目錄
1 程序排程基本概念
2 排程準則
3 排程演算法
4 執行緒排程
5 多處理器排程
6 實時cpu排程
7 例項(linux)
8 演算法評估
9 小結在多道程式設計設計之前,沒有cpu排程的概念。因為單道程式不需要排程cpu。
問:為什麼需要排程?
答:使計算機更加高效。(例如,不能因為等待io操作,而讓cpu閒著)
每當cpu空閒時,作業系統就應從就緒佇列中選擇乙個程序來執行。
注意:就緒佇列不必是先進先出(fifo)的,可以是先進先出(fifo)佇列、優先佇列、樹、或簡單的無序鍊錶等。
就緒佇列內的內容為程序控制塊(pcb)。
4 種情況時需要進行程序排程:
當乙個程序從執行狀態切換到等待狀態。
當乙個程序從執行狀態切換到就緒狀態。
當乙個程序從等待狀態切換到就緒狀態。
當乙個程序終止時。
出現情況1和情況4,必須排程。
對於情況2和情況3,要是排程的話,就是搶占式的,否則就是非搶占的。
排程程式的功能包括:
為了比較各種cpu排程演算法的優劣,要有一些排程準則。包括:
完美的作業系統應該是:最大化的cpu使用率、吞吐量和最小化周轉時間、等待時間、響應時間。
本節只討論常見的6個排程演算法。
(1)先到先服務排程
先到先服務(first-come,first-serverd, fcfs)。
就緒佇列可以使用fifo佇列實現。
非搶占式的。
缺點:平均等待時間往往很長。會有護航效果(其他程序都在等待乙個程序釋放cpu),對於分時系統來說非常麻煩。
(2)最短作業優先排程
最短作業優先排程(shortest-job-first, sjf).
更為準確的叫法是:下次最短cpu執行。選擇下次最短的程序來執行。
搶占和非搶占。
優點:平均等待時間、平均周轉時間最少。
難點:如何知道下次cpu執行的長度?因此就有了一些演算法來**下一次的首席執行官度。
缺點:容易出現飢餓或無窮阻塞(對長作業長期不被排程)。
(3)優先順序排程
優先順序排程(priority-scheduling)。
每乙個程序都有乙個優先順序與其關聯。
搶占和非搶占。
優先順序分為內部和外部:內部的如(時限、記憶體要求、開啟檔案數量、io時間等)。
外部的(程序重要性、贊助部門、費用【充錢了網速當然快啊】等……)
缺點:容易出現飢餓或無窮阻塞。
解決方法:老化逐漸增加系統中等待很長時間的程序的優先順序。
(4)輪轉排程
輪轉排程(round-robin, rr)。
輪轉排程是專門為分時系統設計的,類似於fcfs基礎上增加了搶占。
有時間片(time slice)通常為10ms~100ms。就緒隊列為迴圈佇列,cpu迴圈整個就緒佇列,每個程序分配不超過乙個時間片的cpu。
搶占式難點:時間片大小的設定。
(5)多級佇列排程
把程序分為不同的組,每一組有一類的排程演算法。
多級佇列排程演算法講就緒佇列分為多個單獨佇列。根據程序的屬性,永久性的分到乙個佇列裡。
各單獨佇列按優先順序來排序,只有高優先順序裡的隊列為空,低優先順序的佇列裡的程序才可以執行。
各個單獨的佇列裡有自己的排程演算法。
(6)多級反饋佇列排程
在多級佇列排程演算法中,程序進入系統時被永久的分配到某個佇列中。
多級反饋佇列排程允許程序在佇列中遷移。
多級反饋佇列排程程式有各種引數。
是更為通用的演算法。也是最複雜的演算法。
上一章講了執行緒。包括使用者級執行緒和核心級執行緒。
使用者級執行緒和核心級執行緒之間的乙個區別在如何排程
對於多對一模型和多對多模型。系統的執行緒庫排程使用者級執行緒。競爭範圍是程序競爭範圍。
而對於一對一模型,競爭範圍是系統競爭範圍。
對於多處理器,有兩種排程方法:
1 非對稱多處理:乙個處理器用來排程、io處理等,其他處理器用來執行使用者**。
2 對稱多處理(smp):每個處理器自我排程。(所有程序可能處於乙個共同的就緒佇列中)
多處理器排程要考慮的問題:
1)處理器親和性
乙個程序最好一直讓乙個處理器來執行,否則要各種清理快取,重新充填快取。
2)負載平衡
不能讓有的處理器空閒,有的處理器處於高負載。
負載平衡會抵消親和性。
多核多程序
現在都是多核系統,多個處理器在乙個物理晶元上。
當乙個處理器訪問記憶體時,花費大量的時間來等待所需資料,這叫做記憶體停頓。
為解決這個問題,硬體上採用多執行緒的處理器核。
例如,雙線程雙核系統中,作業系統會有4個邏輯處理器。ultrasparc t3 cpu有16個處理器核,每個核有8個硬體執行緒。作業系統的角度講,有128個邏輯處理器。
對於多核多執行緒,有兩個級別的排程:
1 作業系統選擇哪個執行緒執行在哪個邏輯處理器(硬體執行緒)上。
2 每個核如何決定執行哪個硬體執行緒。
實時計算機系統要求在截止日期之前得到結果,在截止日期之後得到是無用的。
實時排程演算法包括:
單調速率
最早截止優先排程
linux中只有任務(task)排程這一說法。
完全公平排程演算法(completely fair scheduler , cfs)是預設的linux排程演算法。
linux系統的排程基於排程類,每個類都有乙個特定優先順序,核心針對不同的排程類,採用不同的排程演算法。
根據第2節的排程準則來評估排程演算法。
評估方法有:
確定性模型(分析評估法)
排隊模型
**實現
本章講了程序管理中的程序排程,包括概念和一些演算法。還有一些例項。
程序排程演算法(程序排程策略)
程序排程演算法 排程演算法是指 根據系統的資源分配策略所規定的資源分配演算法。一 先來先服務和短作業 程序 優先排程演算法 1.先來先服務排程演算法。先來先服務 fcfs 排程演算法是一種最簡單的排程演算法,該演算法既可用於作業排程,也可用於程序排程。fcfs演算法比較有利於長作業 程序 而不利於短...
程序排程三 程序排程介紹
一 程序排程介紹 1 程序排程的產生 程序從使用資源方面可以分為如下兩類,不管是i o還是cpu受限類的程序,cpu都希望再盡可能短的時間 完成更多的工作,但另一方面,又希望盡可能的減少資源 i o或cpu 的消耗,這兩則之間存在矛盾,所以程序 的排程管理就是來協調兩者之間的衝突。型別別稱 描述示例...
linux核心 5 核心程序排程與程序切換
一 程序排程 程序被建立到了鍊錶中,如何再進行進一步的呼叫和排程?程序排程 void schedule void 程序排程函式 switch to next 程序切換函式 一 void schedule void 程序排程函式 1 看一下 呼叫了schedule函式,在system call中尋找也...