linux程序排程方法

2021-05-22 21:16:00 字數 2948 閱讀 8013

linux

核心的三種排程方法: 1

,sched_other

分時排程策略,

2,sched_fifo

實時排程策略,先到先服務

3,sched_rr

實時排程策略,時間片輪轉

核心的三種排程方法: 1

,sched_other

分時排程策略,

2,sched_fifo

實時排程策略,先到先服務

3,sched_rr

實時排程策略,時間片輪轉

實時程序將得到優先呼叫,實時程序根據實時優先順序決定排程權值,分時程序則通過

nice

和counter

值決定權值,

nice

越小,counter

越大,被排程的概率越大,也就是曾經使用了

cpu最少的程序將會得到優先排程。

shced_rr

和sched_fifo

的不同:

當採用shced_rr

策略的程序的時間片用完,系統將重新分配時間片,並置於就緒佇列 尾。放在佇列尾保證了所有具有相同優先順序的

rr任務 的排程公平。

sched_fifo

一 旦占用

cpu則一直執行。一直執行直到有更高優先順序任務到達或自己放棄。

如果有相同優先順序的實時程序(根據優先順序計算的排程權值是一樣 的)已經準備好,

fifo

時必須等待該程序主動放棄後才可以執行這個優先順序相同的任務。 而

rr可以讓每個任務都執行一段時間。

相同點: rr

和fifo

都只用於實時任務。

建立時優先順序大於

0(1-99)。

按照可搶占優先順序排程演算法進行。

就緒態的實時任務立即搶占非實時任務。

所有任務都採用

linux

分 時排程策略時。 1

,建立任務指定採用分時排程策略,並指定優先順序

nice

值(-20~19)。

2,將根據每個任務的

nice

值 確定在

cpu上的執行時間

(counter)。

3,如果沒有等待資源,則將該任務加入到就緒佇列中。 4

,排程程式遍歷就緒佇列中的任務,通過對每個任務動態優先順序的 計算

(counter+20-nice)

結果,選擇計算結果最大的乙個去執行,當這個時間片用完後

(counter

減至0)

或者主動放棄

cpu時,該任務將被放在就緒佇列末尾

(時間片用完

)或等待佇列

(因等待資源而放棄

cpu)中。

5,此時排程程式重複上面計算過程,轉到第4步。

6,當排程程式發現所有就緒任務計算所得的權值都為不大於

0時,重複第2步。

所有任務都採用

fifo時,

1,建立程序時指定採用

fifo

, 並設定實時優先順序

rt_priority(1-99)。

2,如果沒有等待資源,則將該任務加入到就緒佇列中。 3

,排程程式遍歷就緒佇列,根據實時優先順序計算排程權值

(1000+rt_priority),

選擇權值最高的任務使用

cpu,該

fifo

任務將一直占有

cpu直到有優先順序更高的任務就緒

(即使優先順序相同也不行

)或者主動放棄

(等待資源)。

4,排程程式發現有優先順序更高的任務到達

(高優先順序任務可能被中斷或定時器任務喚醒,再或被當前執行的任務喚醒,等等

),則排程程式立即在當前任務堆疊中儲存當前

cpu暫存器的所有資料,重新從高優先順序任務的堆疊中載入暫存器資料到

cpu,此時高優先順序的任務開始執行。重複第3步。

5,如果當前任務因等待資源而主動放棄

cpu使 用權,則該任務將從就緒佇列中刪除,加入等待佇列,此時重複第3步。

所有任務都採用

rr排程 策略時 1

,建立任務時指定排程引數為

rr,並設定任務的實時優先順序和

nice

值(nice

值將會轉換為該任務的時間片的長度)。

2,如果沒有等待資源,則將該任務加入到就緒佇列中。 3

,排程程式遍歷就緒佇列,根據實時優先順序計算排程權值

(1000+rt_priority),

選擇權值最高的任務使用

cpu。 4

,如果就緒佇列中的

rr任務 時間片為

0,則會根據

nice

值設定該任務的時間片,同時將該任務放入就緒佇列的末尾。重複步 驟3。

5,當前任務由於等待資源而主動退出

cpu, 則其加入等待佇列中。重複步驟3。

系統中既有分時排程,又有時 間片輪轉排程和先進先出排程

1,rr排程和

fifo

排程的程序屬於實時程序,以分時排程的程序是非實時程序。 2

,當實時程序準備就緒後,如果當前

cpu正 在執行非實時程序,則實時程序立即搶占非實時程序。 3

,rr程序和fifo

程序都採用實時優先順序做為排程的權值標準,rr是

fifo

的乙個延伸。

fifo

時,如果兩個程序的優先順序一樣,則這兩個優先順序一樣的程序具體執 行哪乙個是由其在佇列中的未知決定的,這樣導致一些不公正性

(優先順序 是一樣的,為什麼要讓你一直執行

?),如果將兩個優先順序一樣的任務的排程策略都設為

rr,則保證了這兩個任務可以迴圈執行,保證了公平。

linux程序排程方法簡述

在 linux2.6 中,仍有三種排程策略 sched other sched fifo 和 sched rr。sched orher 普通程序,基於優先順序進行排程。sched fifo 實時程序,實現一種簡單的先進先出的排程演算法。sched rr 實時程序,基於時間片的sched fifo,實...

linux程序排程

排程 從就緒的程序選出最適合的乙個來執行。知識點 1 排程策略 2 排程時機 3 排程步驟 排程策略 sched normal sched other 普通的分時程序 sched fifo 先入先出的實時程序 sched rr 時間片輪轉的實時程序 sched batch 批處理程序 sched i...

linux程序排程

搶占就是程序排程,使用者程序搶占發生在以下情況 1 從系統呼叫返回使用者空間的時候 2 從中斷處理程式返回使用者空間時。在時鐘中斷中會呼叫scheduler tick 函式,該函式在程序時間片用完的時候會設定need resched標誌,當從時鐘中斷或者其他中斷返回後檢查need resched,核...