5 程序排程

2021-09-29 08:23:07 字數 3040 閱讀 5178

目錄

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