作業系統 CPU排程策略

2022-09-24 00:24:19 字數 2336 閱讀 9816

見之前寫的「cpu管理的直觀想法和多程序影象」

面對諸多的場景,如何設計排程演算法呢?首先,我們要明白我們的演算法應該讓什麼更好呢?

面對客戶:銀行排程演算法的設計目標應該是使用者滿意; 而面對程序:cpu排程的目標應該是程序滿意。

那怎麼才能讓程序滿意呢?那就是時間了。程序希望盡早地結束任務,這就是周轉時間(從任務到達到任務結束)要短,而且希望使用者的操作能夠盡快地被響應,這就是響應時間(從操作發生到響應)要短。而且系統內耗時間要少,吞吐量(任務的完成量)要大,系統需要把更多的時間用在任務的執行上,而不能老是去做無關緊要的事情,例如:頻繁切換任務,切換棧,分配資源等事情。

同時,系統還要去合理地調配任務。那麼,cpu的排程策略如何做到合理呢?首先得明白系統中有以下的幾種矛盾。

1.吞吐量和響應時間之間有矛盾響應時間小=>切換次數多=>系統內耗大=>吞吐量小由於需要較短的響應時間,那麼就得頻繁地切換任務,這樣系統的很多時間都花在切換任務上面了,系統的內耗大了,吞吐量就小了。

2.前台任務和後台任務的關注點不同前台任務關注響應時間,後台任務關注周轉時間。前台任務例如我們的word文件,我們打乙個字,需要立馬顯示在文件中,這就是word文件這個任務關注的是響應時間;而後台任務中,例如我們的j**ac編譯j**a**,它的周轉時間要小,即該任務從進入到結束所花的時間要小,即編譯完成的時間要小。

3.io約束型任務和cpu約束型任務各有各的特點io約束型任務就是使用cpu的時間較少,進行io操作的時間較長,cpu約束型的任務就是使用cpu的時間較長。因此,要做到合理,需要折中、綜合考慮以上的幾種矛盾。

1、先到先服務(fcfs)

採用這種方案,先請求的程序先得到cpu,由於是非搶先排程,所以乙個程序得到cpu後,會一直占用cpu到該程序結束。

2、最短作業優先(sjf)

這個演算法將每個程序與下次cpu執行的長度關聯起來,當cpu變為空閒時,它會被賦給cpu執行時間最短的程序。

對於任意一組給定的程序,sjf演算法的平均等待時間最小,因為總是可以通過把短程序移到長程序之前,來使平均等待時間減少。

3、優先順序排程(priority-scheduling):

每個程序都有乙個優先順序,程序的執行順序按照優先順序,sjf演算法也屬於優先順序排程,其優先順序為cpu執行時間的倒數,優先順序排程可以是搶占的或非搶占的。

該演算法的乙個問題是可能導致無限阻塞或飢餓,乙個解決的辦法稱為老化,每隔一段時間就將所有處於等待狀態的程序的優先順序提高一級,這樣可以證明,在不超過乙個常數的時間內,所有程序都會執行。

4、輪轉(rr):該演算法是專門為分時系統設計的,類將乙個較小的時間單元定義為時間片,通常為10ms~100ms,就緒隊列為乙個迴圈佇列,為每乙個程序分配不超過乙個時間片的cpu,如程序(p1, p2, p3)對應的cpu為(24, 3, 3),如果使用4ms的時間片,那每個時間片中執行的程序為(p1, p2, p3, p1, p1, p1, p1, p1),等待時間6ms, 4ms, 7ms, 平均等待時間為 (6 + 4 + 7) / 3 = 5.6667ms。

說到這裡,sjf是關注系統的平均周轉時間,而rr演算法是關注系統的響應時間,但是如果乙個系統需要響應時間小和周轉時間小同時存在,那該怎麼辦?

比如word很關心響應時間,而j**ac編譯j**a程式更關心周轉時間,兩類任務同時存在該怎麼辦?

前台的任務更關心響應時間,因為前台任務是與使用者直接進行互動的,需要快速響應使用者的請求,後台任務更關心周轉時間,需要快速的結束任務的。

乙個很直觀的想法,定義前台任務和後台任務兩條佇列,前台使用rr演算法,後台使用sjf演算法,只有前台任務沒有時才排程後台任務。

但是這樣又會產生問題,如果一直有前台任務怎麼辦,那這樣後台任務就永遠得不到排程了。

在這裡有乙個有趣的小故事:2023年有位工作人員去關閉mit的ibm7094計算機時,發現有乙個程序在2023年提交但一直未執行。

這時候我們可以讓後台的任務優先順序動態公升高,但後台任務(用sjf排程)一旦執行,那前台任務的響應時間又得變大了。

如果我們前後台任務都用時間片,那又退化為了rr演算法。

所以,問題還有很多等著我們去發現去想辦法解決。

如我們怎麼知道哪些是前台任務那些是後台任務呢,前台任務難道就沒有後台任務的工作?後台任務難道沒有前台任務的工作?sjf中的短作業優先如何體現?如何判斷作業的長度?

參考:1、

2、3、

作業系統 CPU排程

控制 協調多個程序對cpu的競爭 即按一定的排程演算法從就緒佇列中選擇乙個程序,把cpu的使用權交給被選中的程序 n個程序就緒,等待上m m 1 個cpu執行,需要決策哪個程序分配給哪個cpu執行 排程時機 核心對中斷 異常 系統呼叫處理後返回使用者態時 就緒佇列的改變引發重新排程 如程序正常終止 ...

作業系統面試 cpu排程

cpu排程是多道程式設計的基礎。本文是對作業系統概念 第七版 第五章 cpu排程的學習總結,不足之處歡迎各位博友提出,共同進步。1 介紹cpu排程常見概念。2 介紹cpu排程演算法以及特點。1 cpu排程決策發生的情況 a 當乙個程序從執行態到等待狀態。i o請求 b 執行狀態到就緒態 中斷 c 等...

作業系統 CPU排程(一)

cpu排程室多道程式作業系統的基礎。通過在程序之間切換cpu,作業系統可以提高計算機的生產效率。接下來會展示多個不同cpu的排程演算法。還要闡述為特定系統選擇演算法的問題。多道程式設計的 目標是在任何時候都有乙個程序在執行,以使cpu使用了最大化。在單處理器系統中,每次允許乙個程序執行 任何其他程序...