1. 程式人生 > >Linux中進程的優先級

Linux中進程的優先級

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中進程的優先級