⑴ linux的進程優先順序 NI 和 PR 有什麼區別
用top -u 命令查看進程以及PID。命令如下:
$ top -u
PID — 進程id
USER — 進程所有者
PR — 進程優先順序
NI — nice值。負值表示高優先順序,正值表示低優先順序
VIRT — 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
RES — 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
SHR — 共享內存大小,單位kb
S — 進程狀態。D=不可中斷的睡眠狀態 R=運行 S=睡眠 T=跟蹤/停止 Z=僵屍進程
%CPU — 上次更新到現在的CPU時間佔用百分比
%MEM — 進程使用的物理內存百分比
TIME+ — 進程使用的CPU時間總計,單位1/100秒
COMMAND — 進程名稱(命令名/命令行)
⑵ linux鎿嶄綔緋葷粺璁劇疆浼樺厛綰х殑闂棰
linux涓嬭皟鏁磋繘紼嬩紭鍏堢駭
榪涚▼鐨勪紭鍏堢駭鍐沖畾浜嗚繘紼嬫槸鍚︿紭鍏堣玞pu鍒嗛厤璧勬簮榪涜屽勭悊銆
鍦╟pu璧勬簮鍗佸垎鍏呰凍鏃訛紝姣忎釜姝e湪榪愯岀殑榪涚▼閮借兘鍒嗛厤鍒拌凍澶熺殑璧勬簮榪涜屽勭悊錛屾ゆ椂璋冩暣榪涚▼鐨勪紭鍏堢駭鏄娌℃湁浠涔堟剰涔夌殑錛
濡傛灉cpu璧勬簮緔у紶鏃訛紝top鏌ョ湅cpu浣跨敤杈懼埌90%浠ヤ笂鏃訛紝浼樺厛綰ч珮鐨勮繘紼嬪皢琚浼樺厛鍒嗛厤璧勬簮鍘繪墽琛屻
濡傛灉姝ゆ椂鎵嬪ご鏈変竴涓闈炲父緔ц佺殑浠誨姟瑕佹墽琛岋紝姣斿備紶杈撲竴涓闈炲父閲嶈佺殑鏁版嵁鎴栨槸鍑嗗囩粰瀹㈡埛鍙戜竴灝侀潪甯哥揣鎬ョ殑閭浠訛紝
浣犲笇鏈涜繖浜涗換鍔′紭鍏堝湴琚鎵ц屽畬鎴愶紝閭d箞灝遍渶瑕佽皟鏁磋繖浜涗換鍔$殑浼樺厛綰т簡銆
浼樺厛綰х殑鍊=浼樺厛緋繪暟+nice鍊
浼樺厛緋繪暟鐢辯郴緇熷唴鏍稿喅瀹氾紝涓嶅彲鏇存敼
nice鍊煎彲浠ユ墜鍔ㄦ洿鏀癸紝鑼冨洿鏄
-20~19
浼樺厛綰х殑鍊艱秺浣庯紝浼樺厛綰ц秺楂橈紱浼樺厛綰х殑鍊艱秺楂橈紝浼樺厛綰ц秺浣庛
鎵浠ユ兂璋冩暣鎴愭渶楂樹紭鍏堢駭鐨勮瘽錛屽氨灝唍ice鍊艱句負-20錛涙兂璋冩暣鎴愭渶浣庝紭鍏堢駭鐨勮瘽錛屽皢nice鍊艱句負19銆
璋冩暣浼樺厛綰:
1銆佷換鍔℃湭榪愯屽墠榪涜岃皟鏁
#
nice
-n-20
sh
/xxx/xxx.sh
--浠ユ渶楂樹紭鍏堢駭榪愯寈xx.sh榪欎釜鑴氭湰
#
nice
-n19
sh
/xxx/xxx.sh
--浠ユ渶浣庝紭鍏堢駭榪愯寈xx.sh榪欎釜鑴氭湰
2銆佷換鍔″凡緇忓紑濮嬭繍琛岀殑鎯呭喌涓嬭皟鏁
鈶
#
top
--鏌ョ湅緋葷粺褰撳墠榪涚▼榪愯屾儏鍐
>
r
--閿鍏ュ皬r
>
PID
to
renice:
--鎻愮ず杈撳叆榪愯岀殑榪涚▼鐨刾id
>
Renice
PID
23302
to
value:
--鎶婅繖涓榪涚▼鐨刵ice鍊艱劇疆涓哄氬皯,鏍規嵁闇瑕佽繘琛岃皟鏁
鈶
#
renice
-20
PID
灝嗚繘紼嬬殑nice鍊兼敼涓-20
#
renice
19
PID
灝嗚繘紼嬬殑nice鍊兼敼涓19
杞杞姐銆綰㈤粦鑱旂洘錛歭inux涓嬭皟鏁磋繘紼嬩紭鍏堢駭
⑶ 淺析Linux下進程的調度策略與優先順序
在 Linux 中,線程是由進程來實現的,可以認為線程就是一個輕量級的進程,因此,線程調度是按照進程調度的方式來進行的。這樣設計,線程調度流程可以直接復用進程調度流程,沒必要再設計一個進程內的線程調度器了。
在 Linux 中,進程調度器是基於進程的調度策略與調度優先順序來決定調度哪個進程運行。
調度策略主要包括:
調度優先順序的范圍是 0~99,數值越大,表示優先順序越高。
其中,SCHED_OTHER、SCHED_IDLE、SCHED_BACH 為非實時調度策略,其調度優先順序為 0。而 SCHED_FIFO、SCHED_RR 是實時調度策略,其調度優先順序范圍為 1~99。
實時調度策略的進程總是比非實時調度策略的進程優先順序高。
在 Linux 內部實現中,調度器會為每個可能的調度優先順序維護一個可運行的進程列表,以最高優先順序列表頭部的進程作為下一次調度的進程,所有的調度都是搶占式的,如果一個具有更高調度優先順序的進程轉換為可運行狀態,那麼當前運行的進程將被強制進入其等待的隊列中。
SCHED_OTHER
該調度策略是默認的 Linux 分時調度策略,該調度策略為非實時的,其調度優先順序總是為 0。
對於該調度策略類型的進程,調度器是基於動態優先順序來調度的。動態優先順序跟屬性 nice 有關,nice 的值會隨著進程的運行時間而動態改變,以確保所有具有 SCHED_OTHER 策略的進程公平地得到調度。
在 Linux 中,nice 的值范圍為-20 ~ +19,默認值為 0。nice 值越大,則優先順序越低,因此相對較低 nice 值的進程可以獲得更多的處理器時間。
通過命令 ps -el 查看系統中的進程列表,其中 NI 列就是進程對應的 nice 值。
使用 top 命令,看到的 NI 列也是進程的 nice 值。
調整 nice 值,可以通過 shell 命令 nice ,該命令可以按照指定的 nice 值運行 cmd ,命令的幫助信息為:
重新調整已運行進程的 nice 值,可通過 renice 命令實現,命令的幫助信息為:
另外,可以執行 top 命令,輸入 r ,根據提示輸入進程的 pid ,再輸入 nice 數值,也可以調整進程的 nice 值。
SCHED_FIFO
該調度策略為先入先出調度策略,簡單概括,就是一旦進程佔用了 CPU,則一直運行,直到有更高優先順序的任務搶占,或者進程自己放棄佔用 CPU。
SCHED_RR
該調度策略為時間片輪轉調度策略,該調度策略是基於 SCHED_FIFO 策略的演進,其在每個進程上增加一個時間片限制,當時間片使用完成後,調度器將該進程置於隊列的尾端,放在尾端保證了所有具有相同調度優先順序的進程的調度公平。
使用 top 命令,如果 PR 列的值為 RT ,則說明該進程採用的是實時調度策略,其調度策略為 SCHED_FIFO 或者 SCHED_RR,而對於非實時調度策略的進程,該列的值為 NI + 20 。
可以通過命令 ps -eo state,uid,pid,ppid,rtprio,time,comm 來查看進程對應的實時優先順序,實時優先順序位於 RTPRIO 列下,如果進程對應的列顯示為 - ,說明該進程不是實時進程。
chrt 命令可以用來很簡單地更改進程的調度策略與調度優先順序。在 Linux 下查看 chrt 命令的幫助信息:
比如,獲取某個進程的調度策略,使用如下命令:
在比如,設置某個進程的調度策略為 SCHED_FIFO,調度優先順序為 70,使用如下命令:
⑷ Linux的進程優先順序NI和PR有什麼區別
nice(NI)和priority(PR),並不是同一個概念。
NICE值應該是熟悉Linux/UNIX的人很了解的概念了,它是反應一個進程「優先順序」狀態的值,其取值范圍是-20至19,一共40個級別。這個值越小,表示進程」優先順序」越高,而值越大「優先順序」越低。nice值雖然不是priority,但是它確實可以影響進程的優先順序。一般會把nice值叫做靜態優先順序,這也基本符合nice值的特點,就是當nice值設定好了之後,除非我們用renice去改它,否則它是不變的。
實用priority值表示PRI和PR值,或者叫動態優先順序。priority的值在之前內核的O1調度器上表現是會變化的,所以也叫做動態優先順序。在內核中,進程優先順序的取值范圍是通過一個宏定義的,這個宏的名稱是MAX_PRIO,它的值為140。
而這個值又是由另外兩個值相加組成的,一個是代表nice值取值范圍的NICE_WIDTH宏,另一個是代表實時進程(realtime)優先順序范圍的MAX_RT_PRIO宏。
說白了就是,Linux實際上實現了140個優先順序范圍,取值范圍是從0-139,這個值越小,優先順序越高。nice值的-20到19,映射到實際的優先順序范圍是100-139。
⑸ 是指實時線程,Linux分配1-99為實時線程,是1為最高優先順序還是99為最高
1是實時進程優先順序最高的,99是實時進程優先順序最低的,數字越小,優先順序越高
你在做operating system的實驗?