與排程相關的系統呼叫
nice() 設定程序的nice值
sched_setscheduler()設定程序的排程策略
sched_getscheduler()獲得程序的排程策略
核心在於讀取和設定程序的排程策略和實時優先順序(程序task_struct的policy和rt_priority)。
sched_setparam() 設定程序的實時優先順序
sched_getparam() 獲得程序的實時優先順序
sched_param結構體的 rt_priority
sched_get_priority_max()獲得實時優先順序的最大值
sched_set_priority_min()設定實時優先順序的最小值
sched_rr_get_interval() 獲得程序的時間片值
親和力試圖使程序盡量在同一處理器上執行,也允許強制指定處理器
親和力儲存在task_struct的cpu_allowed位掩碼標誌,每一位對應乙個處理器
sched_setaffinity()設定程序處理器的親和力
sched_getaffinity()獲得程序處理器的親和力
核心提供的強制處理器繫結的方法很簡單:
1)當處理進行每一次建立時,它繼承了其父程序的相關掩碼。
2)由於父程序執行在指定處理器上,子程序也執行在相應處理器上
3)當處理器繫結關係改變時,核心會採用「移植執行緒」把任務 推到合法處理器上
4)載入平衡器只把任務拉到允許的處理器上。
5)程序只執行在指定處理器上,由該程序描述符的 cpus_allowed域設定。
5、放棄處理器時間
sched_yield()暫時放出處理器
1)將程序從活動隊伍中移到過期隊伍中實現,由此產生的效果不僅搶占了該程序,並將其放入優先順序佇列的最後面,還將其放放過期佇列中-這樣保證 在一段時間 它不會再被執行了。實時程序不能過期 ,只被移動至其優先順序佇列最後
2)應用程式甚至核心**在呼叫sched_yield()前,應仔細考慮是否真的希望放棄處理器時間 。
3)核心**為了方便,可直接呼叫yield(),先確定給定程序確實處於可執行狀態,然後再呼叫sched_yield()。
使用者空間的應用程式則直接使用sched_yield()系統呼叫。
linux核心雜記 11 程序排程(6
1 簡單的先入先出排程方法 2 不使用時間片,一旦sched fifo的程序處於可執行狀態,就會繼續執行,直到它自己執行完畢或顯式釋放。3 處於可執行狀態的sched fifo的程序比任何sched normal的程序得到優先排程。4 只能在一種情況下被搶占 具有更高優先順序的sched fifo或...
Linux核心學習筆記 12 程序排程
所謂排程 就是從就緒佇列中選擇乙個程序,投入cpu執行。排程的主戰場 就緒序列 核心 排程演算法 實質性的動作 程序的切換 對於以時間片排程為主的排程,時鐘中斷就是驅動力,確保每個程序在cpu上執行一定的時間。在排程的過程中,使用者還可以通過系統呼叫nice來調整優先順序,比如降低自己的優先順序等。...
Linux核心 程序排程
搶占式多工 由排程程式來決定什麼時間停止乙個程序的執行 程序的時間片 分配給每個可執行程序的處理器時間段 o 1 排程程式 反轉樓梯最後期限排程演算法 完全公平排程演算法 i o消耗型和處理器消耗型程序 i o消耗型程序 大部分時間用來提交i o請求或等待i o請求 處理器消耗型程序 把時間大部分用...