新聞中心
Linux系統(tǒng)的進(jìn)程調(diào)度
Linux進(jìn)程調(diào)度
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信平臺小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了肥鄉(xiāng)免費(fèi)建站歡迎大家使用!
1.調(diào)度方式
Linux系統(tǒng)的調(diào)度方式基本上采用“ 搶占式優(yōu)先級 ”方式,當(dāng)進(jìn)程在用戶模式下運(yùn)行時,不管它是否自愿,核心在一定條件下(如該進(jìn)程的時間片用完或等待I/O)可以暫時中止其運(yùn)行,而調(diào)度其他進(jìn)程運(yùn)行。一旦進(jìn)程切換到內(nèi)核模式下運(yùn)行時,就不受以上限制,而一直運(yùn)行下去,僅在重新回到用戶模式之前才會發(fā)生進(jìn)程調(diào)度。
Linux系統(tǒng)中的調(diào)度基本上繼承了UNIX系統(tǒng)的 以優(yōu)先級為基礎(chǔ) 的調(diào)度。也就是說,核心為系統(tǒng)中每個進(jìn)程計(jì)算出一個優(yōu)先級,該優(yōu)先級反映了一個進(jìn)程獲得CPU使用權(quán)的資格,即高優(yōu)先級的進(jìn)程優(yōu)先得到運(yùn)行。核心從進(jìn)程就緒隊(duì)列中挑選一個優(yōu)先級最高的進(jìn)程,為其分配一個CPU時間片,令其投入運(yùn)行。在運(yùn)行過程中,當(dāng)前進(jìn)程的優(yōu)先級隨時間遞減,這樣就實(shí)現(xiàn)了“負(fù)反饋”作用,即經(jīng)過一段時間之后,原來級別較低的進(jìn)程就相對“提升”了級別,從而有機(jī)會得到運(yùn)行。當(dāng)所有進(jìn)程的優(yōu)先級都變?yōu)?(最低)時,就重新計(jì)算一次所有進(jìn)程的優(yōu)先級。
2.調(diào)度策略
Linux系統(tǒng)針對不同類別的進(jìn)程提供了3種不同的調(diào)度策略,即SCHED_FIFO、SCHED_RR及SCHED_OTHER。其中,SCHED_FIFO適合于 短實(shí)時進(jìn)程 ,它們對時間性要求比較強(qiáng),而每次運(yùn)行所需的時間比較短。一旦這種進(jìn)程被調(diào)度且開始運(yùn)行,就一直運(yùn)行到自愿讓出CPU或被優(yōu)先級更高的進(jìn)程搶占其執(zhí)行權(quán)為止。
SCHED_RR對應(yīng)“時間片輪轉(zhuǎn)法”,適合于每次運(yùn)行需要 較長時間的實(shí)時進(jìn)程 。一個運(yùn)行進(jìn)程分配一個時間片(200 ms),當(dāng)時間片用完后,CPU被另外進(jìn)程搶占,而該進(jìn)程被送回相同優(yōu)先級隊(duì)列的末尾,核心動態(tài)調(diào)整用戶態(tài)進(jìn)程的優(yōu)先級。這樣,一個進(jìn)程從創(chuàng)建到完成任務(wù)后終止,需要經(jīng)歷多次反饋循環(huán)。當(dāng)進(jìn)程再次被調(diào)度運(yùn)行時,它就從上次斷點(diǎn)處開始繼續(xù)執(zhí)行。
SCHED_OTHER是傳統(tǒng)的UNIX調(diào)度策略,適合于交互式的 分時進(jìn)程 。這類進(jìn)程的優(yōu)先級取決于兩個因素:一個是進(jìn)程剩余時間配額,如果進(jìn)程用完了配給的時間,則相應(yīng)優(yōu)先級降到0;另一個是進(jìn)程的優(yōu)先數(shù)nice,這是從UNIX系統(tǒng)沿襲下來的方法,優(yōu)先數(shù)越小,其優(yōu)先級越高。nice的取值范圍是-20 19。用戶可以利用nice命令設(shè)定進(jìn)程的nice值。但一般用戶只能設(shè)定正值,從而主動降低其優(yōu)先級;只有特權(quán)用戶才能把nice的值設(shè)置為負(fù)數(shù)。進(jìn)程的優(yōu)先級就是以上二者之和。
后臺命令對應(yīng)后臺進(jìn)程(又稱后臺作業(yè))。后臺進(jìn)程的優(yōu)先級低于任何交互(前臺)進(jìn)程的優(yōu)先級。所以,只有當(dāng)系統(tǒng)中當(dāng)前不存在可運(yùn)行的交互進(jìn)程時,才調(diào)度后臺進(jìn)程運(yùn)行。后臺進(jìn)程往往按批處理方式調(diào)度運(yùn)行。
3.調(diào)度時機(jī)
核心進(jìn)行進(jìn)程調(diào)度的時機(jī)有以下5種情況:
(1)當(dāng)前進(jìn)程調(diào)用系統(tǒng)調(diào)用nanosleep( )或者pause( ),使自己進(jìn)入睡眠狀態(tài),主動讓出一段時間的CPU的使用權(quán)。
(2)進(jìn)程終止,永久地放棄對CPU的使用。
(3)在時鐘中斷處理程序執(zhí)行過程中,發(fā)現(xiàn)當(dāng)前進(jìn)程連續(xù)運(yùn)行的時間過長。
(4)當(dāng)喚醒一個睡眠進(jìn)程時,發(fā)現(xiàn)被喚醒的進(jìn)程比當(dāng)前進(jìn)程更有資格運(yùn)行。
(5)一個進(jìn)程通過執(zhí)行系統(tǒng)調(diào)用來改變調(diào)度策略或者降低自身的優(yōu)先級(如nice命令),從而引起立即調(diào)度。
4.調(diào)度算法
進(jìn)程調(diào)度的算法應(yīng)該比較簡單,以便減少頻繁調(diào)度時的系統(tǒng)開銷。Linux執(zhí)行進(jìn)程調(diào)度時,首先查找所有在就緒隊(duì)列中的進(jìn)程,從中選出優(yōu)先級最高且在內(nèi)存的一個進(jìn)程。如果隊(duì)列中有實(shí)時進(jìn)程,那么實(shí)時進(jìn)程將優(yōu)先運(yùn)行。如果最需要運(yùn)行的進(jìn)程不是當(dāng)前進(jìn)程,那么當(dāng)前進(jìn)程就被掛起,并且保存它的現(xiàn)場—— 所涉及的一切機(jī)器狀態(tài),包括程序計(jì)數(shù)器和CPU寄存器等,然后為選中的進(jìn)程恢復(fù)運(yùn)行現(xiàn)場。
(二)Linux常用調(diào)度命令
· nohup命令
nohup命令的功能是以忽略掛起和退出的方式執(zhí)行指定的命令。其命令格式是:
nohup command?。踑rguments]
其中,command是所要執(zhí)行的命令,arguments是指定命令的參數(shù)。
nohup命令告訴系統(tǒng),command所代表的命令在執(zhí)行過程中不受任何結(jié)束運(yùn)行的信號(hangup和quit)的影響。例如,
$ nohup find / -name exam.txt -printf1
find命令在后臺運(yùn)行。在用戶注銷后,它會繼續(xù)運(yùn)行:從根目錄開始,查找名字是exam.txt的文件,結(jié)果被定向到文件f1中。
如果用戶沒有對輸出進(jìn)行重定向,則輸出被附加到當(dāng)前目錄的nohup.out文件中。如果用戶在當(dāng)前目錄中不具備寫權(quán)限,則輸出被定向到$HOME/nohup.out 中。
· at命令
at命令允許指定命令執(zhí)行的時間。at命令的常用形式是:
at time command
其中,time是指定命令command在將來執(zhí)行時的時間和日期。時間的指定方法有多種,用戶可以使用絕對時間,也可以用相對時間。該指定命令將以作業(yè)形式在后臺運(yùn)行。例如:
$ at 15:00 Oct 20
回車后進(jìn)入接收方式,接著鍵入以下命令:
mail -s "Happy Birthday!" liuzheny
按下D鍵,屏幕顯示:
job 862960800.a at Wed Oct 20 15:00:00 CST 1999
$
表明建立了一個作業(yè),其作業(yè)ID號是862960800.a,運(yùn)行作業(yè)的時間是1999年10月20日下午3:00,給liuzheny發(fā)一條標(biāo)題為“Happy Birthday!”(生日快樂)的空白郵件。
利用 at -l 可以列出當(dāng)前at隊(duì)列中所有的作業(yè)。
利用 at -r 可以刪除指定的作業(yè)。這些作業(yè)以前由at或batch命令調(diào)度。例如,
at -r 862960797.a
將刪除作業(yè)ID號是862960797.a的作業(yè)。其一般使用形式是:
at -r job_id
注意,結(jié)尾是.a的作業(yè)ID號,表示這個作業(yè)是由at命令提交的;結(jié)尾是.b的作業(yè)ID號,表示這個作業(yè)是由batch命令提交的。
· batch命令
batch命令不帶任何參數(shù),它提交的作業(yè)的優(yōu)先級比at命令提交的作業(yè)的優(yōu)先級低。batch無法指定作業(yè)運(yùn)行的時間。實(shí)際運(yùn)行時間要看系統(tǒng)中已經(jīng)提交的作業(yè)數(shù)量。如果系統(tǒng)中優(yōu)先級較高的作業(yè)比較多,那么,batch提交的作業(yè)則需要等待;如果系統(tǒng)空閑,則運(yùn)行batch提交的作業(yè)。例如,
$ batch
回車后進(jìn)入接收方式,接著鍵入命令:
find / -name exam.txt -print
按下D。退出接收方式,屏幕顯示:
job 862961540.b at Thu Nov 18 14:30:00 CST 1999
表示find命令被batch作為一個作業(yè)提交給系統(tǒng),作業(yè)ID號是862961540.b。如果系統(tǒng)當(dāng)前空閑,這個作業(yè)被立即執(zhí)行,其結(jié)果同樣作為郵件發(fā)送給用戶。
· jobs命令
jobs命令用來顯示當(dāng)前shell下正在運(yùn)行哪些作業(yè)(即后臺作業(yè))。例如:
$ jobs
[2] + Running tar tv3 *
[1] - Running find / -name README -print logfile
$
其中,第一列方括號中的數(shù)字表示作業(yè)序號,它是由當(dāng)前運(yùn)行的shell分配的,而不是由操作系統(tǒng)統(tǒng)一分配的。在當(dāng)前shell環(huán)境下,第一個后臺作業(yè)的作業(yè)號為1,第二個作業(yè)的作業(yè)號為2,等等。
第二列中的“ ”號表示相應(yīng)作業(yè)的優(yōu)先級比“-”號對應(yīng)作業(yè)的優(yōu)先級高。
第三列表明作業(yè)狀態(tài),是否為運(yùn)行、中斷、等待輸入或停止等。
最后列出的是創(chuàng)建當(dāng)前這個作業(yè)所對應(yīng)的命令行。
利用 jobs -l 形式,可以在作業(yè)號后顯示出相應(yīng)進(jìn)程的PID。如果想只顯示相應(yīng)進(jìn)程的PID,不顯示其它信息,則使用 jobs -p 形式。
· fg命令
fg命令把指定的后臺作業(yè)移到前臺。其使用格式是:
fg [job…]
其中,參數(shù)job是一個或多個進(jìn)程的PID,或者是命令名稱或者作業(yè)號(前面要帶有一個“%”號)。例如:
$ jobs
[2] + Running tar tv3 *
[1] - Running find / -name README -print logfile
$ fg %find
find / -name README -print logfile
注意,顯示的命令行末尾沒有“”符號。下面命令能產(chǎn)生同樣的效果:
$ fg %1
這樣,find命令對應(yīng)的進(jìn)程就在前臺執(zhí)行。當(dāng)后臺只有一個作業(yè)時,鍵入不帶參數(shù)的fg命令,就能使相應(yīng)進(jìn)程移到前臺。當(dāng)有兩個或更多的后臺作業(yè)時,鍵入不帶參數(shù)的fg,就把最后進(jìn)入后臺的進(jìn)程首先移到前臺。
· bg命令
bg命令可以把前臺進(jìn)程換到后臺執(zhí)行。其使用格式是:
bg [job…]
其中,job是一個或多個進(jìn)程的PID、命令名稱或者作業(yè)號,在參數(shù)前要帶“%”號。例如,在cc(C編譯命令)命令執(zhí)行過程中,按下Z鍵,使這個作業(yè)掛起。然后鍵入以下命令:
$ bg %cc
該掛起的作業(yè)在后臺重新開始執(zhí)行。
如何查看linux線程的調(diào)度策略
方法一:PS
在ps命令中,“-T”選項(xiàng)可以開啟線程查看。下面的命令列出了由進(jìn)程號為pid的進(jìn)程創(chuàng)建的所有線程。
1.$ ps -T -p pid
“SID”欄表示線程ID,而“CMD”欄則顯示了線程名稱。
方法二: Top
top命令可以實(shí)時顯示各個線程情況。要在top輸出中開啟線程查看,請調(diào)用top命令的“-H”選項(xiàng),該選項(xiàng)會列出所有Linux線程。在top運(yùn)行時,你也可以通過按“H”鍵將線程查看模式切換為開或關(guān)。
1.$ top -H
要讓top輸出某個特定進(jìn)程pid并檢查該進(jìn)程內(nèi)運(yùn)行的線程狀況:
$ top -H -p pid
linux下怎么查看cpu的調(diào)度
檢查cpu頻率的方法如下;
查看 /proc/cpuinfo ,這個虛擬文件展示的是可用CPU硬件的配置。
通過查看這個文件,你能識別出物理處理器數(shù)(插槽),每個CPU核心數(shù),可用的CPU標(biāo)志寄存器以及其它東西的數(shù)量。
cpuid命令的功能就相當(dāng)于一個專用的CPU信息工具,它能通過使用CPUID功能來顯示詳細(xì)的關(guān)于CPU硬件的信息。
信息報告包括處理器類型/家族、CPU擴(kuò)展指令集、緩存/TLB(譯者注:傳輸后備緩沖器)配置、電源管理功能等等。
網(wǎng)頁鏈接由于電腦代碼復(fù)雜,具體配圖可參考此鏈接。
Linux是一套免費(fèi)使用和自由傳播的類Unix操作系統(tǒng),是一個基于POSIX和UNIX的多用戶,多任務(wù),支持多線程和多CPU的操作系統(tǒng)。它能運(yùn)行主要的UNIX工具軟件,應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。它支持32位和64位硬件。Linux繼承了Unix以網(wǎng)絡(luò)為核心的設(shè)計(jì)思想,是一個性能穩(wěn)定的多用戶網(wǎng)絡(luò)操作系統(tǒng)。
什么命令查看linux當(dāng)前進(jìn)程調(diào)度策略
輸入下面的ps命令,顯示所有運(yùn)行中的進(jìn)程: # ps aux | less 其中, -A:顯示所有進(jìn)程 a:顯示終端中包括其它用戶的所有進(jìn)程 x:顯示無控制終端的進(jìn)程
分享標(biāo)題:linux查看和調(diào)度命令 linux幫助查看命令
轉(zhuǎn)載源于:http://www.dlmjj.cn/article/hhceij.html