進程按照調度類型可以分爲:
SCHED_FIFO:先進先出的實時進程,如果沒有其它更高優先級的可運行實時進程,就可以一直使用cpu運行。對於這種進程,時間片長度是沒有意義的。
SCHED_RR:時間片輪轉的實時進程,所具有相同優先級(且都是當前情況下優先級最高)的SCHED_RR以時間片輪轉的方式公平使用cpu。
SCHED_NORMAL:時間片輪轉的普通進程,時間片用完之後變成過期進程,所有進程都成爲過期進程之後,再統一把過期進程轉變爲活動進程。
時間片輪轉的普通進程(SCHED_NORMAL)優先級分爲靜態優先級和動態優先級。內核用從100(最高優先級)到139(最低優先級)表示普通進程的靜態優先級。新進程總是繼承父進程的靜態優先級。通過nice()和setpriority(),用戶可以改變自己擁有的進程靜態優先級。靜態優先級決定了進程的基本時間片,如下:
Linux操作系統中動態優先級是指:調度程序跟蹤監測進程,對於較長沒使用cpu的進程動態提升優先級,對於較長時間使用cpu的進程動態的降低優先級。動態優先級範圍是100(最高優先級)~139(最低優先級),經驗公式爲:
Bonus範圍0~10,值小於5表示降低動態優先級,值大於5表示增加動態優先級。
時間片輪轉的實時進程(SCHED_RR)的優先級分爲靜態優先級和實時優先級。靜態優先級初始值從父進程繼承而得,決定了時間片的基本長度,值越小,基本時間片越長,與SCHED_NORMAL的靜態優先級相似。實時優先級範圍爲1(最高優先級)~99(最低優先級)。調度程序總是讓優先級高的進程運行,用戶可以通過sched_setparam()和sched_setscheduler()改變進程的實時優先級。實時優先級決定其在運行隊列中的位置,即調度選擇哪一個進程是由它決定。
先進先出的實時進程(SCHED_FIFO)的優先級只有實時優先級。