操作系統(四)

CPU調度

上下文切換:

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

CPU調度:

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

在進程/線程生命週期的什麼時候進行調度?

從一個狀態到另一個狀態的時候會發生調度。

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

->一個進程從運行狀態切換到等待狀態
->一個進程被終結了

CPU調度方式

(1)不可搶佔
->調度程序必須等待事件結束(效率低,不採用);
(2)可以搶佔
->調度程序在中斷被響應後執行;
->當前的進程從運行切換到就緒,或者一個進程從等待切換到就緒;
->當前運行的進程可以被換出。

注意,以上一般指用戶態;內核態也可能涉及到是否搶佔。

調度原則

(1)調度策略

(2)程序執行模型

執行模型:程序在CPU突發和I/O中交替
->每個調度決定都是關於在下一個CPU突發時將哪個工作交給CPU;
->在時間分片機制下,線程可能在結束當前CPU突發前被迫放棄CPU;

(3)比較調度算法的準則
CPU使用率:CPU處於忙狀態所佔時間的百分比;
吞吐量:在單位時間內完成的進程數量;
週轉時間:一個進程從初始化到結束,包括所有等待時間所花費的時間;
等待時間:進程在就緒隊列中的總時間;
響應時間:從一個請求被提交到產生第一次響應所花費的時間。

(4)吞吐量vs延遲
對快的評價指標:傳輸文件時的高帶寬;玩遊戲時的低延遲==(這兩點相互獨立)==;
減少響應時間:及時處理用戶的輸出並儘快將輸出提供給用戶;
減少平均響應時間的波動:在交互系統中,可預測性比高差異/低平均更重要;
增加吞吐量:減少開支(操作系統開支/上下文切換);系統資源的高效利用(CPU,I/O設備);
減少等待時間:減少每個進程的等待時間。

低延遲調度增加了交互式表現(個人電腦):
->如果移動了鼠標,希望屏幕迅速反饋光標的移動。

操作系統保證吞吐量不受影響(服務器):
->若想結束長時間的編程,所以操作系統必須不時進行調度,即使存在許多交互任務。

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

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

調度算法

FCFS:先來先服務,first come,first served;
SPN(SJF) SRT:短進程優先(短作業優先)短剩餘時間優先,shortest process next(shortest job first) shortest remaining time;
HRRN:最高響應比優先,highest response ratio next;
Round robin:輪循,使用時間切片和搶佔來輪流執行任務;
Multilevel feedback queues:多級反饋隊列,多級反饋隊列,優先級隊列中的輪循;
fair share scheduling:公平共享調度;

調度算法:
1.先來先服務(FCFS)是非搶佔式的,仲裁規則是隨機的。有利於長進程,不利於短進程。
2.最短作業優先(SPF)是非搶佔式的,仲裁規則是按照時間先後順序或者隨機的。有不利於長進程。
3.最短剩餘時間優先(SRT)是搶佔式的,仲裁規則是按照時間先後順序或者隨機方式,

FCFS先來先服務

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

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

SRT短剩餘時間優先

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

優點:平均週轉時間最少;

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

因此就需要預知未來,
但是怎麼預估下一個CPU突發的持續時間是一個問題;(你咋知道下一個進程是長是短呢???)
其中一個簡單的解決辦法:詢問用戶;
如果用戶欺騙就殺死進程;
但是用戶不知道怎麼辦?

->根據歷史時間分配預估未來時間的分配(也就是根據之前該進程所花的時間來預測它將要花多少時間):

HRRN最高響應比優先

->在SPN調度的基礎上改進(考慮了等待時間,改善飢餓現象);
->不可搶佔;
->關注進程等待了多長時間;
->防止無限期推遲;
R = (w + s) / s (選擇R值最高的進程) ,注: w:waiting time等待時間 s:service time執行時間

Round robin輪循

在一個叫做 量子(或時間切片)對離散單元中分配處理器;
如果時間片結束了,那麼就接換到下一個準備好的進程(processes execute every (n-1)q time units);

(1)優點:公平;
(2)缺點:
額外的上下文切換花銷;
如果時間量子太大,則等待時間過長,極限情況下退化成FCFS;
如果時間量子太小,雖反應迅速,但是開銷大;吞吐量由於大量的上下文切換開銷而受到影響;
(3)目標:
選擇一個合適的時間量子;
經驗規則:維持上下文切換開銷處於1%以內。

Multilevel feedback queues多級反饋隊列

(1)Multilevel queues多級隊列
兼顧到RR和SRT的優點。
就緒隊列被劃分爲獨立的隊列,比如說前臺隊列是負責交互的進程,後臺隊列負責批處理進程;
而且呢,每個隊列可以有自己的調度策略,比如說前臺隊列可以是RR,後臺隊列可以是FCFS;

有一點要注意,就是調度必須在隊列間進行,比如說,
固定優先級,例如先處理前臺進程,後處理後臺,但是可能會造成飢餓;
時間切片,每個隊列都得到一個確定的能夠調度其進程的CPU總時間,例如,80%給前臺,20%給後臺。

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

Fair-share scheduling 公平共享調度

站在用戶的角度實現公平共享CPU資源。因爲有的用戶可能開的進程多,有的用戶進程少。
它考慮了以下情況:
一些用戶組比其他用戶組更重要;
保證不重要的組無法壟斷資源;
未使用的資源按照每個組所分配的資源的比例來分配;
沒有達到資源使用目標的組獲得更高的優先級。

不同調度模型的評價準則

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

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

實際上這些調度算法和實際的調度算法是有很多區別的(複雜的多),但是基本的特徵是類似的。
(1)FCFS先來先服務
->不公平,等待時間較長;

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

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

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

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

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

實時調度

(1)實時系統
定義:正確性依賴於其時間和功能兩方面的一種操作系統;
性能指標:時間約束的及時性(deadlines);速度和平均性能相對不重要;
主要特性:時間約束的可預測性;
強實時系統:需要在保證的時間內完成重要的任務,必須完成;
弱實時系統:要求重要的進程的優先級更高,儘量完成,並非必須;

一些術語,
任務(工作單元job):一次計算,一次文件讀取,一次信息傳遞等;
屬性:取得進展所需資源;定時參數。

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

硬時限:
->如果錯過了最後期限,可能會發生災難性或非常嚴重的後果;
->必須驗證:在最壞的情況下也能夠滿足時限嗎?
->保證確定性;
軟時限:
->理想情況下,時限應該被最大滿足。如果有時限沒有被滿足,那麼就相應地降低要求;
->盡最大努力去保證;

(2)可調度性
表示一個實時系統是否可以滿足deadline要求,
決定實時任務執行的順序;
靜態優先級調度:運行之前優先級就是確定的;
動態優先級調度:優先級在運行中是動態變化的;

(3)調度算法
RM(Rate Monotonic)速率單調調度
->最佳靜態優先級調度
->通過週期安排優先級
->週期越短,優先級越高
->先執行週期最短的任務
EDF(Earliest Deadline First)最早期限調度
->最佳的動態優先級調度
->Deadline越早,優先級越高
->先執行Deadline最早的任務

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

多處理器調度的原因

多處理器的CPU調度更加複雜(多個相同的單處理器組成一個多處理器;它的優點是負載共享);
還有對稱多處理器(SMP)(每個處理器運行自己的調度程序;需要在調度程序中同步);

優先級反轉

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

(1)優先級反轉
優先級反轉的持續時間取決於其它不相關任務的不可預測的行爲
在這種情況下,高優先級可能比低優先級任務晚完成。

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

你知道的越多,你不知道的越多。
有道無術,術尚可求,有術無道,止於術。
如有其它問題,歡迎大家留言,我們一起討論,一起學習,一起進步

發佈了114 篇原創文章 · 獲贊 67 · 訪問量 8005
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章