linux核心雜記 12 程序排程(7

2021-10-12 18:53:55 字數 1128 閱讀 9799

與排程相關的系統呼叫

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請求 處理器消耗型程序 把時間大部分用...