#include <sched.h> struct sched_param { int sched_priority; }; int sched_setscheduler(pid_t pid, int policy, const struct sched_param *param); int sched_getscheduler(pid_t pid); policy 參數
  1. SCHED_FIFO(First In-First Out)
    SCHED_FIFO 顧名思義就是『先進先出(First In First Out)』,一但 Procees 是 FIFO 模式,在被 Kernel 的排程器設為可運行時,將會立即先佔並插隊執行,比同樣系統優先權的其他『一般 Process』還優先,除非有系統優先權比較高的 Process 正在佔用時間,否則 FIFO Process 通常都會優先佔用。
    另外,FIFO Process若是使用 sched_yield() 或是遭暫停而讓出CPU時間,將會被重新排在當時同優先權的最後,等待其他同優先權的 Process 完畢後,再度被運行。所以 SCHED_FIFO ,永遠會有最大的機會被先執行。

  2. SCHED_RR(Round-robin)
    而被設定為 SCHED_RR 的 Process,基本上排程行為和 SCHED_FIFO 一樣,不同的是 Process 將被 Kernel 分配一個 timeslice 去限制時間,時間一但用盡,將會被暫停以讓出 CPU。

  3. SCHED_BATCH
    大部份排程方法都是被 POSIX 所定義,唯『SCHED_BATCH』是 Linux 獨有的,被實作於 Linux Kernel 2.6.16 之後。被設定 SCHED_BATCH 的 Process,將會在系統沒有其他可運行的 Process 時(Idle),才會被執行,而且不被優先權所影響而導致 Process 提前執行

  4. SCHED_OTHER
    標準預設的排程方法是 SCHED_OTHER,意味 Kernel 並不會為這些一般性 Process 做特別的即時排程處理。因為,我們所寫的程式,都沒有被特殊設定,所得到的將都會是使用 SCHED_OTHER。

注意事項
  1. SCHED_FIFO, SCHED_RR 為即時行程,SCHED_OTHER, SCHED_BATCH 為普通行程。
  2. 對於即時行時來說 sched_priority 為 1~99,對普通行程只能為 0,不可以設錯,會造成設定失敗,param 亦不可為 NULL。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()