linux核心程序排程系列之排程概述

2021-08-02 04:09:06 字數 1975 閱讀 2604

多工作業系統分為非搶占式多工和搶占式多工。linux採用的是搶占式多工的模式,這就意味著程序對cpu的占用時間是由作業系統決定的,跟具體的說,由作業系統的程序排程程式所決定的,這個章節就介紹關於程序的排程策略。

一、排程策略

1、其實程序的排程策略和程序的型別有關

第一種分配方法:cpu消耗型和i/o消耗型,前者需要大量的cpu時間用於熟知的計算,後者則需要花費大量的時間等待i/o操作完成;

第二種將程序分為三種:

① 互動式程序:這類程序需要大量的人機互動,因此會不斷地休眠,等待滑鼠、鍵盤輸入操作將其喚醒。這類程序對系統響應時間要求比較高,否則使用者體驗會很差;

② 批處理程序:這類程序因為不需要與使用者互動,因此經常在後台執行,相比互動式程序能夠忍受響應的延遲,比如編譯器;

③ 實時程序:這類程序對系統的響應時間有很高的要求,他們需要短的響應時間,並且這個時間的變化非常小。

我們稱與實時程序相對應,互動式程序和批處理程序統稱為普通程序。

2、程序依據自身的型別,採用不同的排程策略:

①sched_normal:預設排程策略,針對普通程序,如果沒有特殊指定,新建立的預設使用此排程策略;

②sched_fifo:針對實時程序的先進先出排程。一旦占用cpu則一直執行,直到有更高優先順序任務到達或自己放棄。適用於時間要求比較高,執行所需時間短的程序;

③sched_rr:針對實時程序的時間片輪轉排程,與sched_fifo相比,有時間片限定。程序的時間片用完後,會重新分配時間片,但會將其置於佇列末尾。適用於每次執行時間比較長的程序;

④sched_batch:針對批處理程序。

⑤sched_idle:使用此策略的程序擁有最低的優先順序,在cfs排程演算法引入了此策略。

二、程序排程的目標

2、加強互動性能:即使系統處於相當負載的情況下,也要能夠保證系統的響應;

3、保證公平和避免飢餓:在河裡設定的時間範圍內,沒有程序處於飢餓狀態;

4、smp排程:排程程式必須支援多處理系統;

5、軟實時排程:這意味著系統能夠有效地排程有嚴格時間要求的程序。

三、程序的nice值

1、nice值是每個程序都會具有的屬性,是乙個能夠影響程序靜態優先順序的數字,進而也能影響動態優先順序。

2、nice值為-20~19之間的整數,預設去中間值0。較高的nice值使程序執行在較低的優先順序上,相反較低的nice值使程序執行在較高的優先順序上。

3、一般來說,控制程序的優先順序,主要是靠修改nice值。

四、優先順序

普通程序有兩種優先順序:靜態優先順序和動態優先順序;實時程序增加了一種實時優先順序。

1、靜態優先順序:不會隨時間而改變,核心不會主動去修改它,只能通過系統呼叫nice值去修改;

計算靜態優先順序,通過乙個公式:static_prio=max_rt_prio+nice+20,其中max_rt_prio巨集值為100,nice取值範圍為-20~19,則金泰優先順序取值範圍是100~139

2、動態優先順序:排程程式通過增加或減少程序靜態優先順序的值來獎勵i/o消耗型程序或懲罰cpu消耗型程序,調整後的優先順序即稱之動態優先順序,也就是我們常說的程序優先順序。

普通程序的優先順序是由乙個關於靜態優先順序和程序互動性函式關係計算得來,隨任務的實際運**況調整。

3、實時優先順序:

實時程序的優先順序只對於實時程序有意義,儲存在rt_priority欄位,取值0~max_rt_prio-1。其與動態優先順序為線性關係。

prio=max_rt_prio-1-rt_priority

五、時間片

1、在完全公平排程器cfs被正式併入核心之前,時間片是各種排程演算法乙個很重要的概念,它指定了程序在被搶占前所能持續執行的時間。那麼排程器的乙個重要的目標就是有效的分配時間片,以便提供良好的使用者體驗。

2、時間片過長導致互動式程序的響應不佳,過短則會明顯增加程序間切換所帶來的消耗,為解決這個矛盾:核心採取以下策略:

(1) 提高互動式程序的優先順序,同時提供給它們較長的預設時間片;

(2) 不需要程序一次用完自己所有的時間片,他可以分為多次使用。

linux核心之程序排程(一)

等待佇列 sleep相關函式將程序的狀態設定為非執行態,在下一次排程來時,將在schedule函式中將本程序從執行佇列中移除。sleep函式將程序加入等待佇列,然後呼叫schedule函式選擇並重新開始另乙個程式的執行。當呼叫wake up類函式將程序喚醒時,wake up類函式將程序加入執行佇列中...

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中尋找也...