你所說的linux系統(tǒng)的優(yōu)先級數(shù)確實是這樣的。需要注意的是普通用戶只能在0~19之間調(diào)整應用程序的優(yōu)先權值,只有超級用戶有權調(diào)整更高的優(yōu)先權值(從-20~19)。linux系統(tǒng)屬于這種數(shù)值越小優(yōu)先級越高,數(shù)值越大優(yōu)先級越低的系統(tǒng)。windows屬于那種優(yōu)先數(shù)值大的優(yōu)先級高的系統(tǒng)。其他的就不大清楚
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:空間域名、網(wǎng)頁空間、營銷軟件、網(wǎng)站建設、鄂州網(wǎng)站維護、網(wǎng)站推廣。
Linux進程調(diào)度
1.調(diào)度方式
Linux系統(tǒng)的調(diào)度方式基本上采用“ 搶占式優(yōu)先級 ”方式,當進程在用戶模式下運行時,不管它是否自愿,核心在一定條件下(如該進程的時間片用完或等待I/O)可以暫時中止其運行,而調(diào)度其他進程運行。一旦進程切換到內(nèi)核模式下運行時,就不受以上限制,而一直運行下去,僅在重新回到用戶模式之前才會發(fā)生進程調(diào)度。
Linux系統(tǒng)中的調(diào)度基本上繼承了UNIX系統(tǒng)的 以優(yōu)先級為基礎 的調(diào)度。也就是說,核心為系統(tǒng)中每個進程計算出一個優(yōu)先級,該優(yōu)先級反映了一個進程獲得CPU使用權的資格,即高優(yōu)先級的進程優(yōu)先得到運行。核心從進程就緒隊列中挑選一個優(yōu)先級最高的進程,為其分配一個CPU時間片,令其投入運行。在運行過程中,當前進程的優(yōu)先級隨時間遞減,這樣就實現(xiàn)了“負反饋”作用,即經(jīng)過一段時間之后,原來級別較低的進程就相對“提升”了級別,從而有機會得到運行。當所有進程的優(yōu)先級都變?yōu)?(最低)時,就重新計算一次所有進程的優(yōu)先級。
2.調(diào)度策略
Linux系統(tǒng)針對不同類別的進程提供了3種不同的調(diào)度策略,即SCHED_FIFO、SCHED_RR及SCHED_OTHER。其中,SCHED_FIFO適合于 短實時進程 ,它們對時間性要求比較強,而每次運行所需的時間比較短。一旦這種進程被調(diào)度且開始運行,就一直運行到自愿讓出CPU或被優(yōu)先級更高的進程搶占其執(zhí)行權為止。
SCHED_RR對應“時間片輪轉(zhuǎn)法”,適合于每次運行需要 較長時間的實時進程 。一個運行進程分配一個時間片(200 ms),當時間片用完后,CPU被另外進程搶占,而該進程被送回相同優(yōu)先級隊列的末尾,核心動態(tài)調(diào)整用戶態(tài)進程的優(yōu)先級。這樣,一個進程從創(chuàng)建到完成任務后終止,需要經(jīng)歷多次反饋循環(huán)。當進程再次被調(diào)度運行時,它就從上次斷點處開始繼續(xù)執(zhí)行。
SCHED_OTHER是傳統(tǒng)的UNIX調(diào)度策略,適合于交互式的 分時進程 。這類進程的優(yōu)先級取決于兩個因素:一個是進程剩余時間配額,如果進程用完了配給的時間,則相應優(yōu)先級降到0;另一個是進程的優(yōu)先數(shù)nice,這是從UNIX系統(tǒng)沿襲下來的方法,優(yōu)先數(shù)越小,其優(yōu)先級越高。nice的取值范圍是-20 19。用戶可以利用nice命令設定進程的nice值。但一般用戶只能設定正值,從而主動降低其優(yōu)先級;只有特權用戶才能把nice的值設置為負數(shù)。進程的優(yōu)先級就是以上二者之和。
后臺命令對應后臺進程(又稱后臺作業(yè))。后臺進程的優(yōu)先級低于任何交互(前臺)進程的優(yōu)先級。所以,只有當系統(tǒng)中當前不存在可運行的交互進程時,才調(diào)度后臺進程運行。后臺進程往往按批處理方式調(diào)度運行。
3.調(diào)度時機
核心進行進程調(diào)度的時機有以下5種情況:
(1)當前進程調(diào)用系統(tǒng)調(diào)用nanosleep( )或者pause( ),使自己進入睡眠狀態(tài),主動讓出一段時間的CPU的使用權。
(2)進程終止,永久地放棄對CPU的使用。
(3)在時鐘中斷處理程序執(zhí)行過程中,發(fā)現(xiàn)當前進程連續(xù)運行的時間過長。
(4)當喚醒一個睡眠進程時,發(fā)現(xiàn)被喚醒的進程比當前進程更有資格運行。
(5)一個進程通過執(zhí)行系統(tǒng)調(diào)用來改變調(diào)度策略或者降低自身的優(yōu)先級(如nice命令),從而引起立即調(diào)度。
4.調(diào)度算法
進程調(diào)度的算法應該比較簡單,以便減少頻繁調(diào)度時的系統(tǒng)開銷。Linux執(zhí)行進程調(diào)度時,首先查找所有在就緒隊列中的進程,從中選出優(yōu)先級最高且在內(nèi)存的一個進程。如果隊列中有實時進程,那么實時進程將優(yōu)先運行。如果最需要運行的進程不是當前進程,那么當前進程就被掛起,并且保存它的現(xiàn)場—— 所涉及的一切機器狀態(tài),包括程序計數(shù)器和CPU寄存器等,然后為選中的進程恢復運行現(xiàn)場。
(二)Linux常用調(diào)度命令
· nohup命令
nohup命令的功能是以忽略掛起和退出的方式執(zhí)行指定的命令。其命令格式是:
nohup command?。踑rguments]
其中,command是所要執(zhí)行的命令,arguments是指定命令的參數(shù)。
nohup命令告訴系統(tǒng),command所代表的命令在執(zhí)行過程中不受任何結束運行的信號(hangup和quit)的影響。例如,
$ nohup find / -name exam.txt -printf1
find命令在后臺運行。在用戶注銷后,它會繼續(xù)運行:從根目錄開始,查找名字是exam.txt的文件,結果被定向到文件f1中。
如果用戶沒有對輸出進行重定向,則輸出被附加到當前目錄的nohup.out文件中。如果用戶在當前目錄中不具備寫權限,則輸出被定向到$HOME/nohup.out 中。
· at命令
at命令允許指定命令執(zhí)行的時間。at命令的常用形式是:
at time command
其中,time是指定命令command在將來執(zhí)行時的時間和日期。時間的指定方法有多種,用戶可以使用絕對時間,也可以用相對時間。該指定命令將以作業(yè)形式在后臺運行。例如:
$ at 15:00 Oct 20
回車后進入接收方式,接著鍵入以下命令:
mail -s "Happy Birthday!" liuzheny
按下D鍵,屏幕顯示:
job 862960800.a at Wed Oct 20 15:00:00 CST 1999
$
表明建立了一個作業(yè),其作業(yè)ID號是862960800.a,運行作業(yè)的時間是1999年10月20日下午3:00,給liuzheny發(fā)一條標題為“Happy Birthday!”(生日快樂)的空白郵件。
利用 at -l 可以列出當前at隊列中所有的作業(yè)。
利用 at -r 可以刪除指定的作業(yè)。這些作業(yè)以前由at或batch命令調(diào)度。例如,
at -r 862960797.a
將刪除作業(yè)ID號是862960797.a的作業(yè)。其一般使用形式是:
at -r job_id
注意,結尾是.a的作業(yè)ID號,表示這個作業(yè)是由at命令提交的;結尾是.b的作業(yè)ID號,表示這個作業(yè)是由batch命令提交的。
· batch命令
batch命令不帶任何參數(shù),它提交的作業(yè)的優(yōu)先級比at命令提交的作業(yè)的優(yōu)先級低。batch無法指定作業(yè)運行的時間。實際運行時間要看系統(tǒng)中已經(jīng)提交的作業(yè)數(shù)量。如果系統(tǒng)中優(yōu)先級較高的作業(yè)比較多,那么,batch提交的作業(yè)則需要等待;如果系統(tǒng)空閑,則運行batch提交的作業(yè)。例如,
$ batch
回車后進入接收方式,接著鍵入命令:
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)當前空閑,這個作業(yè)被立即執(zhí)行,其結果同樣作為郵件發(fā)送給用戶。
· jobs命令
jobs命令用來顯示當前shell下正在運行哪些作業(yè)(即后臺作業(yè))。例如:
$ jobs
[2] + Running tar tv3 *
[1] - Running find / -name README -print logfile
$
其中,第一列方括號中的數(shù)字表示作業(yè)序號,它是由當前運行的shell分配的,而不是由操作系統(tǒng)統(tǒng)一分配的。在當前shell環(huán)境下,第一個后臺作業(yè)的作業(yè)號為1,第二個作業(yè)的作業(yè)號為2,等等。
第二列中的“ ”號表示相應作業(yè)的優(yōu)先級比“-”號對應作業(yè)的優(yōu)先級高。
第三列表明作業(yè)狀態(tài),是否為運行、中斷、等待輸入或停止等。
最后列出的是創(chuàng)建當前這個作業(yè)所對應的命令行。
利用 jobs -l 形式,可以在作業(yè)號后顯示出相應進程的PID。如果想只顯示相應進程的PID,不顯示其它信息,則使用 jobs -p 形式。
· fg命令
fg命令把指定的后臺作業(yè)移到前臺。其使用格式是:
fg [job…]
其中,參數(shù)job是一個或多個進程的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命令對應的進程就在前臺執(zhí)行。當后臺只有一個作業(yè)時,鍵入不帶參數(shù)的fg命令,就能使相應進程移到前臺。當有兩個或更多的后臺作業(yè)時,鍵入不帶參數(shù)的fg,就把最后進入后臺的進程首先移到前臺。
· bg命令
bg命令可以把前臺進程換到后臺執(zhí)行。其使用格式是:
bg [job…]
其中,job是一個或多個進程的PID、命令名稱或者作業(yè)號,在參數(shù)前要帶“%”號。例如,在cc(C編譯命令)命令執(zhí)行過程中,按下Z鍵,使這個作業(yè)掛起。然后鍵入以下命令:
$ bg %cc
該掛起的作業(yè)在后臺重新開始執(zhí)行。
linux下調(diào)整進程優(yōu)先級
進程的優(yōu)先級決定了進程是否優(yōu)先被cpu分配資源進行處理。
在cpu資源十分充足時,每個正在運行的進程都能分配到足夠的資源進行處理,此時調(diào)整進程的優(yōu)先級是沒有什么意義的;
如果cpu資源緊張時,top查看cpu使用達到90%以上時,優(yōu)先級高的進程將被優(yōu)先分配資源去執(zhí)行。
如果此時手頭有一個非常緊要的任務要執(zhí)行,比如傳輸一個非常重要的數(shù)據(jù)或是準備給客戶發(fā)一封非常緊急的郵件,
你希望這些任務優(yōu)先地被執(zhí)行完成,那么就需要調(diào)整這些任務的優(yōu)先級了。
優(yōu)先級的值=優(yōu)先系數(shù)+nice值
優(yōu)先系數(shù)由系統(tǒng)內(nèi)核決定,不可更改
nice值可以手動更改,范圍是 -20~19
優(yōu)先級的值越低,優(yōu)先級越高;優(yōu)先級的值越高,優(yōu)先級越低。
所以想調(diào)整成最高優(yōu)先級的話,就將nice值設為-20;想調(diào)整成最低優(yōu)先級的話,將nice值設為19。
調(diào)整優(yōu)先級:
1、任務未運行前進行調(diào)整
# nice -n-20 sh /xxx/xxx.sh --以最高優(yōu)先級運行xxx.sh這個腳本
# nice -n19 sh /xxx/xxx.sh --以最低優(yōu)先級運行xxx.sh這個腳本
2、任務已經(jīng)開始運行的情況下調(diào)整
①
# top --查看系統(tǒng)當前進程運行情況
r --鍵入小r
PID to renice: --提示輸入運行的進程的pid
Renice PID 23302 to value: --把這個進程的nice值設置為多少,根據(jù)需要進行調(diào)整
②
# renice -20 PID 將進程的nice值改為-20
# renice 19 PID 將進程的nice值改為19
轉(zhuǎn)載紅黑聯(lián)盟:linux下調(diào)整進程優(yōu)先級
在 Linux 中,線程是由進程來實現(xiàn)的,可以認為線程就是一個輕量級的進程,因此,線程調(diào)度是按照進程調(diào)度的方式來進行的。這樣設計,線程調(diào)度流程可以直接復用進程調(diào)度流程,沒必要再設計一個進程內(nèi)的線程調(diào)度器了。
在 Linux 中,進程調(diào)度器是基于進程的調(diào)度策略與調(diào)度優(yōu)先級來決定調(diào)度哪個進程運行。
調(diào)度策略主要包括:
調(diào)度優(yōu)先級的范圍是 0~99,數(shù)值越大,表示優(yōu)先級越高。
其中,SCHED_OTHER、SCHED_IDLE、SCHED_BACH 為非實時調(diào)度策略,其調(diào)度優(yōu)先級為 0。而 SCHED_FIFO、SCHED_RR 是實時調(diào)度策略,其調(diào)度優(yōu)先級范圍為 1~99。
實時調(diào)度策略的進程總是比非實時調(diào)度策略的進程優(yōu)先級高。
在 Linux 內(nèi)部實現(xiàn)中,調(diào)度器會為每個可能的調(diào)度優(yōu)先級維護一個可運行的進程列表,以最高優(yōu)先級列表頭部的進程作為下一次調(diào)度的進程,所有的調(diào)度都是搶占式的,如果一個具有更高調(diào)度優(yōu)先級的進程轉(zhuǎn)換為可運行狀態(tài),那么當前運行的進程將被強制進入其等待的隊列中。
SCHED_OTHER
該調(diào)度策略是默認的 Linux 分時調(diào)度策略,該調(diào)度策略為非實時的,其調(diào)度優(yōu)先級總是為 0。
對于該調(diào)度策略類型的進程,調(diào)度器是基于動態(tài)優(yōu)先級來調(diào)度的。動態(tài)優(yōu)先級跟屬性 nice 有關,nice 的值會隨著進程的運行時間而動態(tài)改變,以確保所有具有 SCHED_OTHER 策略的進程公平地得到調(diào)度。
在 Linux 中,nice 的值范圍為-20 ~ +19,默認值為 0。nice 值越大,則優(yōu)先級越低,因此相對較低 nice 值的進程可以獲得更多的處理器時間。
通過命令 ps -el 查看系統(tǒng)中的進程列表,其中 NI 列就是進程對應的 nice 值。
使用 top 命令,看到的 NI 列也是進程的 nice 值。
調(diào)整 nice 值,可以通過 shell 命令 nice ,該命令可以按照指定的 nice 值運行 cmd ,命令的幫助信息為:
重新調(diào)整已運行進程的 nice 值,可通過 renice 命令實現(xiàn),命令的幫助信息為:
另外,可以執(zhí)行 top 命令,輸入 r ,根據(jù)提示輸入進程的 pid ,再輸入 nice 數(shù)值,也可以調(diào)整進程的 nice 值。
SCHED_FIFO
該調(diào)度策略為先入先出調(diào)度策略,簡單概括,就是一旦進程占用了 CPU,則一直運行,直到有更高優(yōu)先級的任務搶占,或者進程自己放棄占用 CPU。
SCHED_RR
該調(diào)度策略為時間片輪轉(zhuǎn)調(diào)度策略,該調(diào)度策略是基于 SCHED_FIFO 策略的演進,其在每個進程上增加一個時間片限制,當時間片使用完成后,調(diào)度器將該進程置于隊列的尾端,放在尾端保證了所有具有相同調(diào)度優(yōu)先級的進程的調(diào)度公平。
使用 top 命令,如果 PR 列的值為 RT ,則說明該進程采用的是實時調(diào)度策略,其調(diào)度策略為 SCHED_FIFO 或者 SCHED_RR,而對于非實時調(diào)度策略的進程,該列的值為 NI + 20 。
可以通過命令 ps -eo state,uid,pid,ppid,rtprio,time,comm 來查看進程對應的實時優(yōu)先級,實時優(yōu)先級位于 RTPRIO 列下,如果進程對應的列顯示為 - ,說明該進程不是實時進程。
chrt 命令可以用來很簡單地更改進程的調(diào)度策略與調(diào)度優(yōu)先級。在 Linux 下查看 chrt 命令的幫助信息:
比如,獲取某個進程的調(diào)度策略,使用如下命令:
在比如,設置某個進程的調(diào)度策略為 SCHED_FIFO,調(diào)度優(yōu)先級為 70,使用如下命令:
用top或者ps -l查看進程會發(fā)現(xiàn)有PR(PRI) NI兩個字段:
NI 是優(yōu)先值,是用戶層面的概念, PR是進程的實際優(yōu)先級, 是給內(nèi)核(kernel)看(用)的。
一般情況下,PR=NI+20, 如果一個進程的優(yōu)先級PR是20, 那么它的NI(nice)值就是20-20=0。
進程調(diào)度優(yōu)先級是從-20到19,一共40個級別,數(shù)字越大,表示進程的優(yōu)先級越低。默認時候,進程的優(yōu)先級是0。查看進程優(yōu)先級有兩個辦法:ps和top。top命令顯示的NI列的值。或者可以使用ps -efl來查看,也是在ni列表示了進程的優(yōu)先級?!禠inux就該這么學》 一起學習,進程的優(yōu)先級可以在程序運行的時候設置,也可以在程序運行過程中動態(tài)的修改。
程序命令輸入更改已經(jīng)運行程序的優(yōu)先級。
#taskset:
-p,設定一個已存在的pid,而不是重新開啟一個新任務
-c,指定一個處理,可以指定多個,以逗號分隔,也可指定范圍,如:2,4,5,6-8。
切換某個進程到指定的cpu上:taskset-cp313290。讓某程序運行在指定的cpu上:taskset-c1,2,4-7tarjcftest。tar。gztest。
需要注意的是,taskset-cp313290在設定一個已經(jīng)存在的pid時,子進程并不會繼承父進程的,因此像tarzcfxxx tar。gzxxx這樣的命令,最好在啟動時指定cpu,如果在已經(jīng)啟動的情況下,則需要指定tar調(diào)用的gzip進程。
優(yōu)點:
1、Linux由眾多微內(nèi)核組成,其源代碼完全開源。
2、Linux繼承了Unix的特性,具有非常強大的網(wǎng)絡功能,其支持所有的因特網(wǎng)協(xié)議,包括TCP/IPv4、TCP/IPv6和鏈路層拓撲程序等,且可以利用Unix的網(wǎng)絡特性開發(fā)出新的協(xié)議棧。
3、Linux系統(tǒng)工具鏈完整,簡單操作就可以配置出合適的開發(fā)環(huán)境,可以簡化開發(fā)過程,減少開發(fā)中仿真工具的障礙,使系統(tǒng)具有較強的移植性。
網(wǎng)站題目:linux命令優(yōu)先級 linux設置線程的優(yōu)先級
轉(zhuǎn)載來于:http://chinadenli.net/article6/hgcsog.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、網(wǎng)站設計、移動網(wǎng)站建設、自適應網(wǎng)站、微信小程序、服務器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)