linux
系統中的程序排程:
linux
系統支援實時和非實時兩種程序,
實時程序採用
sched_fifo
或者sche_rr
排程策略,普通程序採用
sche_other
排程策略。在排程演算法的實現上,
linux
核心中每個任務都用
task_struct
結構體來表示,在該結構中有四個與排程相關的策劃那個暈,是
rt_proirity
、policy
、proority(nice)
、counter
。核心排程程式根據這四個成員進行排程。
在svhed_other
排程策略中排程器總是選擇哪個
priority+counter
值最大的程序來排程執行。從邏輯上分析,
sched_other
排程策略存在著排程週期
(epoch)
,每乙個排程週期中,乙個程序的
priority
和counter
值的大小影響而來當前時刻應該排程哪乙個程序來執行,其中
priority
是乙個固定不變的值,在程序建立時就已經確定,它代表了該程序的優先順序,也代表著該程序在每個排程週期中能夠得到的時間片的多少;
counter
是乙個動態變化的值,它反映了乙個程序在當前的排程週期中還剩下的時間片,不再與本排程週期的程序排程。當所有的時間片都用完時,乙個排程週期結束,周而復始。在
2.4核心版本以上的核心中,
priority
被nice
取代,但二者類似。
所以schrd_other
排程策略本質上是一種比例共享的排程策略,它的這種設計方法能夠保證程序排程的公平性——乙個低階優先順序的程序在每個
epoch
中歐冠也會得到自己應得的
cpu時間,也提供了不同優先順序別的區分,具有較高的
priority
值的程序能夠獲得更多的餓
cpu時間片
實時程序使用的是基於實時優先順序
rt_priority
的優先順序排程策略,但根據不用的排程策略,同一實時優先順序的程序之間的排程方法有所不同:
(1) eched_fifo
:不同的程序根據靜態優先順序進行排隊,然後再同乙個優先順序的佇列中,誰先準備好執行就點排程誰,並且正在執行的程序不會被終止直到以下情況發生;
a.被擁有更高優先順序的程序所搶占
cpu
b.自己因為資源請求而阻塞
c.自己主動放棄
cpu(呼叫
sched_yield
)(2) sched_rr
:這種排程策略跟上面的一樣,除了給每個程序分配乙個時間片。時間片到了正在執行的程序就放棄執行;時間片的程度可以通過
sched_rr_get_intrval.
Linux系統中的程序排程演算法
在作業系統中,排程是指一種資源分配,因而排程演算法是指 根據系統的資源分配策略所規定的資源分配演算法,對於不同的系統和系統目標,通常採用不同的排程演算法。以下就linux的程序排程演算法加以解釋。一 以下演算法用於實時系統 1 時間片輪轉排程演算法 round robin sched rr,系統使每...
Linux中的程序排程策略
linux 核心的三種主要排程策略 1 sched other 分時排程策略,2 sched fifo 實時排程策略,先到先服務 3 sched rr 實時排程策略,時間片輪轉 實時程序將得到優先呼叫,實時程序根據實時優先順序決定排程權值。分時程序則通過 nice 和counter 值決定權值,ni...
linux程序排程
排程 從就緒的程序選出最適合的乙個來執行。知識點 1 排程策略 2 排程時機 3 排程步驟 排程策略 sched normal sched other 普通的分時程序 sched fifo 先入先出的實時程序 sched rr 時間片輪轉的實時程序 sched batch 批處理程序 sched i...