Linux中進程的優先級
阿新 • • 發佈:2017-05-08
this 優先 命令 fault sch proc valid nic lin
Linux採用兩種不同的優先級範圍,一種是nice值。還有一種是實時優先級。
1.nice值
nice值得範圍是-20~19,默認值是0。
越大的nice值意味著更低的優先級。也就是說nice值為-20的優先級最高。
2.實時優先級
實時優先級的範圍是0~99。其值得意義與nice值相反。即:越高的實時優先級數值意味著進程優先級越高。
Linux的進程可分為普通進程和實時進程。實時進程都是一些對響應時間要求比較高的進程。因此實時進程的優先級比普通進程的優先級要高。
3.優先級比較
Linux中的這兩種優先級劃分,是不是難以理解?究竟哪種優先級高?假設一個進程同一時候含有上述兩種優先級呢?
對於上述的兩個問題。最好的回答方式就是用代碼說話。
Linux 3.6內核中,關於進程的優先級。include/linux/sched.h文件裏有例如以下的一段描寫敘述:
1597 /* 1598 * Priority of a process goes from 0..MAX_PRIO-1, valid RT 1599 * priority is 0..MAX_RT_PRIO-1, and SCHED_NORMAL/SCHED_BATCH 1600 * tasks are in the range MAX_RT_PRIO..MAX_PRIO-1. Priority 1601 * values are inverted: lower p->prio value means higher priority. 1602 * 1603 * The MAX_USER_RT_PRIO value allows the actual maximum 1604 * RT priority to be separate from the value exported to 1605 * user-space. This allows kernel threads to set their 1606 * priority to a value higher than any user task. Note: 1607 * MAX_RT_PRIO must not be smaller than MAX_USER_RT_PRIO. 1608 */
1610 #define MAX_USER_RT_PRIO 100 1611 #define MAX_RT_PRIO MAX_USER_RT_PRIO 1612 1613 #define MAX_PRIO (MAX_RT_PRIO + 40) 1614 #define DEFAULT_PRIO (MAX_RT_PRIO + 20)
通過上述的描寫敘述和代碼。我們能夠看出:
1) 實時優先級的範圍是0~99,nice值得範圍是100~139。
2)實時優先級的優先級別要高於nice值。
那麽假設幾個進程同一時候含有上述兩種優先級會怎麽樣呢?
優先級,而普通進程相應的則是nice值。這種話,理論上就不會出現一個進程同一時候含有兩種不同的優先級。那事實是不是這種呢?再反復一遍上面的一句話:Linux中的進程分為實時進程和普通進程。當中實時進程相應的就是實時優先級。而普通進程相應的則是nice值。這種話,理論上就不會出現一個進程同一時候含有兩種不同的優先級。
那事實是不是這種呢?
能夠使用例如以下命令來查看進程的優先級:
ps -eo state,uid,pid,ppid,rtprio,time,comm在我的機器上運行結果為:
[[email protected] linux-3.6]$ ps -eo state,uid,pid,ppid,rtprio,ni,time,comm S UID PID PPID RTPRIO NI TIME COMMAND S 0 1 0 - 0 00:00:03 init S 0 2 0 - 0 00:00:00 kthreadd S 0 3 2 99 - 00:00:00 migration/0 S 0 4 2 - 0 00:00:00 ksoftirqd/0 S 0 5 2 99 - 00:00:00 migration/0 S 0 6 2 99 - 00:00:00 watchdog/0 S 0 7 2 99 - 00:00:00 migration/1 S 0 8 2 99 - 00:00:00 migration/1 S 0 9 2 - 0 00:00:00 ksoftirqd/1 S 0 10 2 99 - 00:00:00 watchdog/1當中RTPRIO表示的是實時優先級,NI即nice值。我們能夠非常清楚的看出。實時優先級和nice值是絕對不會反復存在的。
Linux中進程的優先級