OS總結(七):CPU調度


1、概述

1.1 上下文切換

切換CPU的當前任務,從一個進程/線程轉換到另一個進程/線程;但切換之前要保護現場,保存當前進程/線程在PCB/TCP中的執行上下文(也就是CPU的狀態);切換任務需要讀取下一個進程/線程的上下文。

1.2 CPU調度

從就緒隊列中挑選一個進程/線程作為CPU將要運行的下一個進程/線程;需要調度程序(挑選進程/線程的內核函數);需要考慮的問題是調度的時機。

1.3 調度時機

調度發生在進程/線程生命周期的什么時候呢?從一個狀態轉到另一個狀態的時候會發生調度。

在這里插入圖片描述

1.4 調度的條件

內核運行調度程序的條件如下(滿足其一即可):

(1)一個進程從運行狀態切換到等待狀態

(2)一個進程被終結了

1.5 CPU調度方式

1.5.1 不可搶占

調度程序必須等待事件結束(效率低,不采用)。

1.5.2 可以搶占

調度程序在中斷被響應后執行;當前的進程從運行切換到就緒,或者一個進程從等待切換到就緒;當前運行的進程可以被換出。

2、調度原則

(1)調度策略

(2)程序執行模型

在這里插入圖片描述

執行模型:程序在CPU突發和I/O中交替。

每個調度決定都是關於在下一個CPU突發時將哪個工作交給CPU;在時間分片機制下,線程可能在結束當前CPU突發前被迫放棄CPU。

(3)比較調度算法的准則

  • CPU使用率:CPU處於忙狀態所占時間的百分比
  • 吞吐量:在單位時間內完成的進程數量
  • 周轉時間:一個進程從初始化到結束,包括所有等待時間所花費的時間
  • 等待時間:進程在就緒隊列中的總時間
  • 響應時間:從一個請求被提交到產生第一次響應所花費的時間

(4)吞吐量 vs 延遲

  • 對快的評價指標:傳輸文件時的高帶寬;玩游戲時的低延遲(這兩點相互獨立)
  • 減少響應時間:及時處理用戶的輸出並盡快將輸出提供給用戶
  • 減少平均響應時間的波動:在交互系統中,可預測性比高差異/低平均更重要
  • 增加吞吐量:減少開支(操作系統開支/上下文切換);系統資源的高效利用(CPU,I/O設備)
  • 減少等待時間:減少每個進程的等待時間
  • 低延遲調度增加了交互式表現(個人電腦):如果移動了鼠標,希望屏幕迅速反饋光標的移動。
  • 操作系統保證吞吐量不受影響(服務器):若想結束長時間的編程,所以操作系統必須不時進行調度,即使存在許多交互任務。

吞吐量是操作系統的計算帶寬;響應時間是操作系統的計算延遲。

(5)公平目標

e.g. 保證每個進程占用相同的CPU時間(並不公平,因為一個用戶可能比其它用戶運行更多進程);保證每個進程都有相同的等待時間。公平通常會增加平均響應時間。

3、調度算法

3.1 FCFS(先來先服務)

FIFO隊列規定,如果進程在執行中阻塞,隊列中的下一個會得到CPU。

在這里插入圖片描述

優點:簡單

缺點:平均等待時間波動較大(沒有搶占);花費時間少的任務可能排在花費時間長的任務后面;可能導致I/O和CPU之間的重疊處理(CPU密集型進程會導致I/O設備閑置時,I/O密集型進程也在等待)。

3.2 SRT短剩余時間優先

SPN(SJF)短進程優先(短作業優先)的意思是 選擇下一個最短的進程(短任務優先),即按照預測的完成時間排序將任務入列;注意,它可以是搶占的也可以是不搶占的,對於搶占類型的,才是SRT短剩余時間優先。

在這里插入圖片描述

優點:平均周轉時間最少;(下圖是一個例子,可以發現SRT的進程平均周轉時間會短一些)

在這里插入圖片描述

缺點:可能導致飢餓(連續的短任務流會使長任務飢餓;短任務可用時的任何長任務的CPU時間都會增加平均等待時間);

因此就需要預知未來,但是怎么預估下一個CPU突發的持續時間是一個問題;當進程沒有進行時無法知道下一個進程是長是短。其中一個簡單的解決辦法:詢問用戶。如果用戶欺騙就殺死進程;但是用戶不知道該怎么處理?一般情況下,根據歷史時間分配預估未來時間的分配(也就是根據之前該進程所花的時間來預測它將要花多少時間):

在這里插入圖片描述

3.3 HRRN最高響應比優先

在SPN調度的基礎上改進(考慮了等待時間,改善飢餓現象);不可搶占;關注進程等待了多長時間;防止無限期推遲;

R = (w + s) / s (選擇R值最高的進程) ,其中w:waiting time(等待時間)s:service time(執行時間)

3.4 Round Robin輪轉調度算法

在一個叫做 量子(或時間切片)的離散單元中分配處理器;

如果時間片結束了,那么就接換到下一個准備好的進程(processes execute every (n-1)q time units);

在這里插入圖片描述

舉一個例子來理解,如下圖,先設置一個時間片,例如20,那么就讓進程輪流分享這個時間片。先P1執行,用完20后,讓出CPU給P2;但是P2只有8,用完直接給P3;同樣,P3只用20;以此類推。

在這里插入圖片描述

上表顯示了在不同時間切片長度的情況下,進程的平均等待時間(假設沒有上下文切換的時間損失):上圖的Best和Worst FCFS分別對應着短的進程線路和長的進程先來。

(1)優點:公平

(2)缺點:額外的上下文切換花銷;如果時間量子太大,則等待時間過長,極限情況下退化成FCFS;如果時間量子太小,雖反應迅速,但是開銷大;吞吐量由於大量的上下文切換開銷而受到影響

(3)目標:選擇一個合適的時間量子

(4)經驗規則:維持上下文切換開銷處於1%以內

3.5 Multilevel feedback queues多級反饋隊列

(1)Multilevel queues多級隊列

兼顧到RR和SRT的優點。就緒隊列被划分為獨立的隊列,比如說前台隊列是負責交互的進程,后台隊列負責批處理進程;而且每個隊列可以有自己的調度策略,比如說前台隊列可以是RR,后台隊列可以是FCFS;需要注意的是調度必須在隊列間進行。比如說,固定優先級,例如先處理前台進程,后處理后台,但是可能會造成飢餓;時間切片,每個隊列都得到一個確定的能夠調度其進程的CPU總時間,例如,80%給前台,20%給后台。

(2)多級反饋隊列

對於I/O密集型任務,放在高優先級隊列,這里的時間片比較短;對於CPU密集型任務,防止低優先級隊列,這里的時間片比較長。(我們希望交互性好,占用資源多的可以放在后面)一個進程可以在不同的隊列中移動。例如,時間量子的大小歲優先級級別的增加而增加;如果任務在當前的時間量子中沒有完成,那么就降到下一個優先級。

在這里插入圖片描述

3.6 Fair share scheduling公平共享調度

站在用戶的角度實現公平共享CPU資源。因為有的用戶可能開的進程多,有的用戶進程少。

它考慮了以下情況:一些用戶組比其他用戶組更重要;保證不重要的組無法壟斷資源;未使用的資源按照每個組所分配的資源的比例來分配;沒有達到資源使用目標的組獲得更高的優先級。

在這里插入圖片描述

3.7 不同調度模型的評價准則

  • 確定性建模:確定一個工作量,然后計算每個算法的表現
  • 隊列模型:用來處理隨機工作負載的數學方法
  • 實現/模擬:建立一個允許算法運行實際數據的系統

在這里插入圖片描述

3.8 面向通用計算系統的調度算法總結

實際上這些調度算法和實際的調度算法是有很多區別的(復雜的多),但是基本的特征是類似的。

(1)FCFS先來先服務:不公平,等待時間較長

(2)SPN/SRT短進程優先:不公平,但是平均等待時間最小;需要精確預測計算機時間;可能導致飢餓;

(3)HRRN最高響應比優先:給予SPN調度的改進;不可搶占;

(4)Round Robin輪循:公平,但是平均等待時間較長;

(5)MLFQ多級反饋隊列:根據CPU和I/O狀態動態調整;和SPN類似;

(6)Fair share scheduling公平共享調度:公平是第一要素

4、實時調度

4.1 實時系統

定義:正確性依賴於其時間和功能兩方面的一種操作系統;

性能指標:時間約束的及時性(deadlines);速度和平均性能相對不重要;

主要特性:時間約束的可預測性;

強實時系統:需要在保證的時間內完成重要的任務,必須完成;

弱實時系統:要求重要的進程的優先級更高,盡量完成,並非必須;

相關術語:

任務(工作單元job):一次計算,一次文件讀取,一次信息傳遞等。

屬性:取得進展所需資源;定時參數。

在這里插入圖片描述

周期任務:任務有規律地重復;周期p = inter-release time (0 < p);(兩個紅箭頭內)執行時間E = 最大執行時間 (0 < e < p);(藍色區域)使用率U = e / p。

在這里插入圖片描述

硬時限:如果錯過了最后期限,可能會發生災難性或非常嚴重的后果;保證確定性。

軟時限:理想情況下,時限應該被最大滿足。如果有時限沒有被滿足,那么就相應地降低要求;盡最大努力去保證。

4.2 可調度性

表示一個實時系統是否可以滿足deadline要求,決定實時任務執行的順序;

靜態優先級調度:運行之前優先級就是確定的;

動態優先級調度:優先級在運行中是動態變化的;

在這里插入圖片描述

4.3 調度算法

RM(Rate Monotonic)速率單調調度:最佳靜態優先級調度;通過周期安排優先級;周期越短,優先級越高;先執行周期最短的任務

EDF(Earliest Deadline First)最早期限調度:最佳的動態優先級調度;Deadline越早,優先級越高;先執行Deadline最早的任務

5、多處理器調度與優先級反轉

5.1 多處理器調度的原因

多處理器的CPU調度更加復雜(多個相同的單處理器組成一個多處理器,它的優點是負載共享);

還有對稱多處理器(SMP)(每個處理器運行自己的調度程序,需要在調度程序中同步);

在這里插入圖片描述

5.2 優先級反轉

優先級反轉可以發生在任何基於優先級的可搶占的調度機制;當系統內的環境強制使高優先級任務等待低優先級任務時發生。

5.2.1 優先級反轉

優先級反轉的持續時間取決於其它不相關任務的不可預測的行為。在這種情況下,高優先級可能比低優先級任務晚完成。例如下圖,優先級T1 > T2 > T3。

在這里插入圖片描述

首先時間軸上,只有T3有任務,所以在t1 ~ t3是T3在執行;到t2的時候,T3訪問了一個藍色的貢獻資源(T1在t4時也要用);到了t3時,T1出現了,它的優先級更高,所以T3中斷,T1執行;直到t4時刻,T1需要使用T3占用的藍色資源釋放后才能繼續執行,所以把CPU讓給T3;t4 ~ t5是T3執行,t5時,此時T2出現,優先級比T3高,所以T3終止,執行T2;T2執行完后,T3在時間t6 ~ t7中釋放了藍色共享資源,T1才能繼續執行。這里出現了個奇怪的現象,也就是優先級更高的T1,需要等T2運行完才能執行。

5.2.2 優先級繼承

低優先級任務即成高優先級任務的優先級,這個依賴於他們共享的資源。此時T3的優先級會動態的得到提升,此時T2無法搶占T3。

在這里插入圖片描述

優先級天花板:“擁有資源”的優先級和“所有可以鎖定該資源任務中優先級最高的那個任務”的優先級相同(T3擁有T1的資源,所以它的優先級提升到T1);除非當前進程的優先級高於系統中所有被鎖定的資源的優先級的上線,否則任務嘗試執行臨界區的時候會被阻塞;持有最高優先級上限信號量鎖的任務,會繼承被該鎖所阻塞的任務的優先級。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM