Linux中進程的優先級

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
在我的機器上執行結果爲:

[tuzhu@CentOS 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值是絕對不會重複存在的。

發佈了33 篇原創文章 · 獲贊 6 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章