作業系統實習課(二) -Scheduler-Related System Calls- 2015/04/14
Initializing Priority and Scheduling Policy Fields
Header 及 Macro 是Unix Standard的縮寫。Real-time applications系統定義符號常數的標頭檔,包含open、read、write、exit、getpid等函數的原型。 此標頭檔內定義下列的常數,用來決定最佳的預設priority:SCHED_PRIO_USER_MIN SCHED_PRIO_USER_MAX SCHED_PRIO_SYSTEM_MIN SCHED_PRIO_SYSTEM_MAX SCHED_PRIO_RT_MIN SCHED_PRIO_RT_MAX Macro(巨集),根據一系列預定義的規則替換一定的文字模式,編譯器在遇到巨集時會自動進行這一模式替換。
sched_get_priority_max() 及 sched_get_priority_min() 在sched.h裡定義 int sched_get_priority_max(int policy); int sched_get_priority_min(int policy); 支援的policy 包含SCHED_FIFO,SCHED_RR,及 SCHED_OTHER...等。 只有在系統遇到不認識policy時,回傳-1並送errno給 EINVAL。
sched_getscheduler()及sched_getparam() 在sched.h裡定義 int sched_getscheduler(pid_t pid); int sched_getparam(pid_t pid, struct sched_param *param); 用來取得realtime processes 的 scheduling policy 和 priority的 函數。 User使用時不需要特殊權限。 如果每個function的PID都為0,則回傳值為calling process的 scheduling policy 或 priority。 sched_getparam() 回傳值為0,表示成功;失敗則回傳-1。
sched_setscheduler() 在sched.h裡定義 int sched_setscheduler(pid_t pid, int policy, const struct sched_param *param); 用來設置process的scheduling policy和priority。 User使用時需要superuser的權限。 sched_setscheduler () 回傳值為0,表示成功;失敗則回 傳-1。
sched_setparam() 在sched.h裡定義 int sched_setparam(pid_t pid, const struct sched_param *param); 用來建立新的priority。 User使用時需要superuser的權限。 sched_setparam() 回傳值為0,表示成功;失敗則回傳-1。
範例的參數變化
Cygwin vs Ubuntu Cygwin Ubuntu
問題 如果把範例程式中的SCHED_FIFO全部改成SCHED_RR,範 例參數變化圖裡讀取的參數中有哪些會改變? 範例程式中的pid的值有變動嗎?怎麼變的? sts這個變數是甚麼? 對於process的priority更改,sched_setscheduler()和 sched_setparam()是差在哪裡?