A. linux系統中,進程進行系統調用進入內核態時,是該進程本身進入內核態還是操作系統新開了一個內核線程
可以說是進程本身進入內核態。
系統調用調用了內核代碼,但是,還是屬於這個進程的進程上下文。
進程的切換要依靠時鍾中斷。
還要明白內核線程的功能,與進程切換沒關系。
B. Linux用戶進程內核態執行,內核線程的關系問題
1、幾乎所有的程序都要切換到內核態運行再返回用戶態,用中斷完成回的,因為在內核下答封裝了一些東西,用戶態下只是傳入某些參數後調用內核態下的函數罷了,
2、進程有三態(執行態,就緒態,阻塞態),cpu任何時刻都只有一個進程在執行,so從用戶態切換到內核態時,用戶態下的進程就處於阻塞或就緒態了,至於從用戶態切換到內核態執行哪個函數那就看你在用戶態下執行的是什麼函數了,比如在用戶態下的lseek在內核下就是llseek了,不一樣的。
3、這問題就是linux的內存管理了,這里就得提到三種地址(邏輯地址、線性地址、物理地址),這里我們提到的4G地址是邏輯地址,不是我們實際的物理地址,linux中一個進程用戶佔0-3G對應的內核佔3G-4G部分
說得不是很清楚,這是比較復雜的內容,需要從頭看起,單就這幾個問題是不能搞懂linux的,最好還是系統的學習,不斷的重復
C. linux內核進行線程切換需要多少時間
Linux內核切換線程時間在微秒級別,幾十微秒。
1. 查看需要更新的內核命令:內
apt-cachesearchlinux
#該命令將會顯示容所有可以獲取的內核
2. 安裝內核,假設要安裝的內核為2.6.39-0,則使用下面的命令
sudoapt-getinstalllinux-headers-2.6.39-0-genericlinux-image-2.6.39-0-generic
#安裝後,reboot即可,重啟後,既是以新內核啟動。
D. linux 內核中,工作隊列和線程有什麼區別
一句話概括:根本就是兩個不同的概念,差別很大。
簡單的說:
一般來說,線版程是windows上的概權念,windows區分進程和線程。而在linux上,統一叫進程,進程是完成某項任務所需資源的集合,同時也是linux基本的執行單元。
工作隊列是一個等待被執行的任務鏈表,由專有的線程來調度、執行。很多linux驅動的中斷下半部的實現,都是採用工作隊列的方式。
作者:陳彬
鏈接:https://www.hu.com/question/20085207/answer/13927301
來源:知乎
著作權歸作者所有,轉載請聯系作者獲得授權。
E. linux內核線程怎麼設置優先順序
Linux內核的三種調度策略:
1,SCHED_OTHER
分時調度策略,
2,SCHED_FIFO實時調度策略,先到先服務。一旦佔用cpu則一直運行。一直運行直到有更高優先順序任務到達或自己放棄
3,SCHED_RR實時調度策略,時間片輪轉。當進程的時間片用完,系統將重新分配時間片,並置於就緒隊列尾。放在隊列尾保證了所有具有相同優先順序的RR任務的調度公平
Linux線程優先順序設置
首先,可以通過以下兩個函數來獲得線程可以設置的最高和最低優先順序,函數中的策略即上述三種策略的宏定義:
int
sched_get_priority_max(int
policy);
int
sched_get_priority_min(int
policy);
SCHED_OTHER是不支持優先順序使用的,而SCHED_FIFO和SCHED_RR支持優先順序的使用,他們分別為1和99,數值越大優先順序越高。
設置和獲取優先順序通過以下兩個函數:
int
pthread_attr_setschedparam(pthread_attr_t
*attr,
const
struct
sched_param
*param);
int
pthread_attr_getschedparam(const
pthread_attr_t
*attr,
struct
sched_param
*param);
例如以下代碼創建了一個優先順序為10的線程:
struct
sched_param
{
int
__sched_priority;
//所要設定的線程優先順序
};
例:創建優先順序為10的線程
pthread_attr_t
attr;
struct
sched_param
param;
pthread_attr_init(&attr);
pthread_attr_setschedpolicy(&attr,
SCHED_RR);
param.sched_priority
=
10;
pthread_attr_setschedparam(&attr,
¶m);
pthread_create(xxx
,
&attr
,
xxx
,
xxx);
pthread_attr_destroy(&attr);