linux核心雜記 11 程序排程(6

2021-10-12 18:19:03 字數 1347 閱讀 5327

(1)簡單的先入先出排程方法

(2)不使用時間片,一旦sched_fifo的程序處於可執行狀態,就會繼續執行,直到它自己執行完畢或顯式釋放。

(3)處於可執行狀態的sched_fifo的程序比任何sched_normal的程序得到優先排程。

(4)只能在一種情況下被搶占:具有更高優先順序的sched_fifo或sched_pr任務才可以搶占它,如果存在多個相同優先順序的sched_fifo,則輪流執行,前提條件是,它們願意主動讓出處理器

sched_pr與sched_fifo類似 ,但是在消耗完事先分配給它的時間後就不再執行。

帶有時間片的 sched_fifo演算法 ,實時輪流排程演算法,在消耗完時間片後,其它同優先順序的實時程序繼續執行,但低優先順序程序不能搶占高優先順序的sched_pr程序,即使它已經用盡時間片

給定優先順序的實時程序總能搶占比它優先順序低的程序

注意:1-2都屬於實時程序,為靜態優先順序,也就是說核心不會為它們計算動態優先順序,cfs對它們不起作用。

實時優先順序從0到max_pt_prio(預設為100)減1

其具體實現在kernel/sched_rt.c中。
完全公平排程器(英語:completely fair scheduler,縮寫為cfs),linux核心的一部分,負責程序排程。參考了康恩·科里瓦斯(con kolivas)提出的排程器源**後,由匈牙利程式設計師英格·蒙內(ingo molnar)所提出。在linux kernel 2.6.23之後採用,取代先前的o(1)排程器,成為系統預設的排程器。它負責將cpu資源,分配給正在執行中的程序,目標在於最大化程式互動性能與整體cpu的使用率。使用紅黑樹來實作,演算法效率為o(log(n))。

cfs排程器參考了康恩·科里瓦斯(con kolivas)所開發的樓梯排程演算法(staircase scheduler)與rsdl(the rotating staircase deadline schedule)的經驗[2] ,選取花費cpu執行時間最少的程序來進行排程。cfs主要由sched_entity 內含的 vruntime所決定,不再跟蹤process的sleep time,並揚棄active/expire的概念, runqueue裡面所有的程序都平等對待,cfs使用「虛擬執行時」(virtual running time)來表示某個任務的時間量。

cfs改使用紅黑樹演算法,將執行時間越少的工作(即 sched_entity)排列在紅黑樹的左邊[3],時間複雜度是o(log n),節點(即rb_node)的安插工作則由dequeue_entity()和enqueue_entity()來完成。當前執行的task通過呼叫 put_prev_task 返回紅黑樹,下乙個待執行的task則由pick_next_task來呼叫。蒙內表示, cfs在百分之八十時間都在確實模擬處理器的處理時間。

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

與排程相關的系統呼叫 nice 設定程序的nice值 sched setscheduler 設定程序的排程策略 sched getscheduler 獲得程序的排程策略 核心在於讀取和設定程序的排程策略和實時優先順序 程序task struct的policy和rt priority sched se...

Linux核心 程序排程

搶占式多工 由排程程式來決定什麼時間停止乙個程序的執行 程序的時間片 分配給每個可執行程序的處理器時間段 o 1 排程程式 反轉樓梯最後期限排程演算法 完全公平排程演算法 i o消耗型和處理器消耗型程序 i o消耗型程序 大部分時間用來提交i o請求或等待i o請求 處理器消耗型程序 把時間大部分用...

linux核心 5 核心程序排程與程序切換

一 程序排程 程序被建立到了鍊錶中,如何再進行進一步的呼叫和排程?程序排程 void schedule void 程序排程函式 switch to next 程序切換函式 一 void schedule void 程序排程函式 1 看一下 呼叫了schedule函式,在system call中尋找也...