今天查看了linux下的實時線程,FIFO和RR策略的調度,遇到一個問題:
priority越大優先級越高呢?還是越小越高呢?
回答這個問題要明白一個問題,首先,linux2.6內核將任務優先級進行了一個劃分:
0——99 實時進程
100——139 非實時進程
現在,這個劃分是起決定作用的,而且一定是數值越小,優先級越高。
但是,有時候從網上會看到 優先級數值越大,優先級越高?這又是怎麼回事?難道有一種說法錯了嗎?
實際的原因是這樣的,對於一個實時進程,他有兩個參數來表明優先級——prio 和 rt_priority,
prio纔是調度所用的最終優先級數值,這個值越小,優先級越高;
而rt_priority 被稱作實時進程優先級,他要經過轉化——prio=MAX_RT_PRIO - 1- p->rt_priority;
MAX_RT_PRIO = 99;這樣意味着rt_priority值越大,優先級越高;
而內核提供的修改優先級的函數,是修改rt_priority的值,所以越大,優先級越高。
所以用戶在使用實時進程或線程,在修改優先級時,就會有“優先級值越大,優先級越高的說法”,也是對的。