第三章、處理機調度與死鎖
? ? 在多道程序環境下,內存中存在著多個進程,其數目往往多于處理機數目,這就要求系統能按照某種算法,動態的將處理機分配給處于就緒狀態的一個進程,使之執行。分配處理機的任務是由處理機調度程序完成的。提高處理機的利用率、改善系統性能,很大程度上取決于處理機調度的性能。本章就處理機調度算法及死鎖問題展開。
一.處理機調度相關基本概念
二.常用調度算法
三.實時調度
四.產生死鎖的原因和必要條件
五.預防死鎖的方法
六.死鎖的檢測與解除
一、處理機調度的基本概念
作業進入系統駐留在外存的后備隊列上,再至調入內存運行完畢,可能要經歷下述三級調度。
?高級調度(High Scheduling)
又稱作業調度或長程調度,接納調度
主要在早期批處理階段,處理在外存上的作業。
決定外存后備隊列中的哪些作業調入內存;
為它們創建進程、分配必要的資源;
將新創建的進程排在就緒隊列上,準備執行。
注意:系統運行并不一定存在高級調度
批處理系統:作業進入系統后先駐留外存,故需要有作業調度。
分時系統:為及時響應,作業由終端直接送入內存,故不需作業調度。
實時系統中,通常也不需作業調度。
?低級調度(Low Level Scheduling)
也稱為進程調度、微觀調度或短程調度(Short-Term Scheduling)
決定內存就緒隊列中的哪個進程獲得處理機,進行分配工作。是最基本的一種調度,在三種基本OS中都有。
?進程調度方式
(1)非搶占方式(Non-preemptiveMode)
? 一旦處理機分配給某進程,該進程一直執行。決不允許其他進程搶占已分配運行進程的處理機。
(2)搶占方式(PreemptiveMode)
? 允許調度程序根據某種原則,暫停某個正在執行的進程,將處理機重新分配給另一進程。
?中級調度(Intermediate-Level Scheduling)
又稱交換調度或中程調度(Medium-Term Scheduling)
引入目的:提高內存利用率和系統吞吐量。根據條件將一些進程調出或再調入內存。
三種調度的頻率和復雜度
進程調度:運行頻率最高,算法不能太復雜,以免占用太多的CPU時間。分時系統通常10~100ms便進行一次。
作業調度:一個作業運行完畢退出系統時即觸發重新調度一個新作業入內存,周期較長,大約幾分鐘一次。因而也允許作業調度算法花費較多的時間。
中級調度:運行頻率基本上介于上述兩種調度之間。
二.常用調度算法
調度的實質就是一種資源分配。不同的系統和系統目標,通常采用不同的調度算法——適合自己的才是最好的。
1、先來先服務調度算法FCFS
一種最簡單的調度算法,按先后順序進行調度。既可用于作業調度,也可用于進程調度。
按照作業提交,或進程變為就緒狀態的先后次序分派CPU;
新作業只有當當前作業或進程執行完或阻塞才獲得CPU運行
被喚醒的作業或進程不立即恢復執行,通常等到當前作業或進程出讓CPU。(所以,默認即是非搶占方式)
不利于短作業
2. 短作業(進程)優先調度算法SJF/SPF
以作業長短來計算優先級,作業越短其優先級越高。
??
通過上表可見采用SJF/SPF算法,平均周轉時間、平均帶權周轉時間都有明顯改善。
SJF/SPF調度算法能有效的降低作業的平均等待時間,提高系統吞吐量。
SJF/SPF的不足:
? 1. 對短作業有利,但同時造成了對長作業的不利。
? 2.由于作業(進程)的長短含主觀因素,不一定能真正做到短作業優先。
? 3.未考慮作業的緊迫程度,因而不能保證緊迫性作業(進程)的及時處理。
3. 高優先權優先調度算法HPF
照顧緊迫性作業,使其獲得優先處理而引入調度算法。常用于批處理系統中的作業調度算法,以及多種操作系統中的進程調度算法
分兩種方式:
非搶占式優先權算法
搶占式優先權算法 關鍵點:新作業產生時
優先權的類型
靜態優先權:創建進程時確定,整個運行期間保持不變。一般利用某一范圍的一個整數來表示,又稱為優先數。
動態優先權:創建進程時賦予的優先權可隨進程的推進或隨其等待時間的增加而改變。
v關于進程優先權的確定?依據如下:
1)進程類型:一般來,系統進程高于用戶進程。
2)進程對資源的需求:如進程的估計時間及內存需要量的多少,對要求少的進程賦予較高優先權。
3)用戶要求:由用戶進程的緊迫程度及用戶所付費用的多少來確定優先權的。
4.高響應比優先調度算法HRRNHighes Response Raito Next
短作業優先算法是一種比較好的算法(相當于根據作業長度設定的靜態優先權算法),適用于短作業較多的批處理系統中,其主要不足是長作業的運行得不到保證。
HRRN為每個作業引入動態優先權,使作業的優先級隨著等待時間的增加而以速率a提高:
優先權 =(等待時間+要求服務時間)/要求服務時間 = 響應時間 / 要求服務時間
1.同時到達的作業優先權相同。
初始t=0,隨著時間增長,如果等待時間 t
相同,執行時間愈短的優先權愈高,利于短作業。
對于長作業,作業的優先級可以隨等待時間的增加而提高,當其等待時間足夠長也可獲得處理機。長作業有照顧。
2.當執行時間相同的作業,優先權的高低決定于其等待時間的長短,也就是先來先服務。
3. 基于時間片的輪轉調度算法RR
分時系統新需求:及時響應用戶的請求;采用基于時間片的輪轉式進程調度算法。
早期分時系統采用的是簡單的時間片輪轉法,進入90年代后廣泛采用多級反饋隊列調度算法。
下面分開介紹這兩種方法并比較性能。
(1)時間片輪轉算法
1.將系統中所有的就緒進程按照FCFS原則,排成一個隊列。
2.每次調度時將CPU分派給隊首進程,讓其執行一個時間片。時間片的長度從幾個ms到幾百ms。
3.在一個時間片結束時,發生時鐘中斷。
4.調度程序據此暫停當前進程的執行,將其送到就緒隊列的末尾,并通過上下文切換執行當前就緒的隊首進程。
進程阻塞情況發生時,未用完時間片也要出讓CPU
多級反饋隊列算法FB
特點:多個就緒隊列,循環反饋動態優先級、時間片輪轉
設置多個就緒隊列,各隊列有不同的優先級,優先級從第一個隊列依次降低。
賦予各隊列進程執行時間片大小不同, 優先權越高,時間片越短。
3)當一個新進程進入內存,引發的調度過程
1.準備調度:先將它放入第一個隊列的末尾,按FCFS原則排隊等待調度。
2.IF時間片內完成,便可準備撤離系統;
3.IF時間片內未能完成,調度程序便將該進程轉入第二隊列的末尾等待再次被調度執行。
4.當第一隊列中的進程都執行完,系統再按FCFS原則調度第二隊列。在第二隊列的稍放長些的時間片內仍未完成,再依次將它放入第三隊列。
5.依次降到第n隊列后,在第n隊列中便采取按時間片輪轉的方式運行。
多級反饋隊列調度算法的性能?
多級反饋隊列調度算法具有較好的性能,能較好的滿足各種類型用戶的需要。
終端型作業用戶。大多屬于較小的交互性作業,只要能使作業在第一隊列的時間片內完成,便可令用戶滿意。
短批處理作業用戶。周轉時間仍然較短,至多在第二到三隊列即可完成。
長批處理作業用戶。將依次在1~n級隊列中輪轉執行,不必擔心作業長期得不到處理。
?三、實時調度
實時系統
1.指系統能夠在限定的響應時間內提供所需水平的服務。
2.指計算的正確性不僅取決于程序的邏輯正確性,也取決于結果產生的時間,如果系統的時間約束條件得不到滿足,將會發生系統出錯
1. 實現實時調度的基本條件
提供必要的信息
?為了實現實時調度,系統應向調度程序提供有關任務的下述信息:
v就緒時間。該任務成為就緒狀態的時間。
v開始截止時間、完成截止時間。
v處理時間。從開始執行到完成所需時間。
v資源要求。任務執行時所需的一組資源。
v優先級。根據任務性質賦予不同優先級。
2.系統處理能力足夠強
處理能力不足可能會出現某些實時任務不能得到及時處理,導致難以預料的后果。
如: 系統中有M個周期性的硬實時任務,處理時間為Ci,周期時間表示為Pi,
單機系統中必須滿足條件? ?∑( Ci/Pi )≤1
3.采用搶占式調度機制
v硬實時任務:廣泛采用搶占機制。
v小的實時系統:如能預知任務的開始截止時間,為簡化調度程序和對任務調度時所花費的系統開銷,可采用非搶占調度機制
4.具有快速切換機制
1.對外部中斷的快速響應能力。
v利用快速硬件中斷機構,可在緊迫的外部事件請求中及時響應。
2.快速的任務分派能力。
v使系統中的運行功能單位適當的小,提高切換速度。類如線程的思想
1)非搶占調度算法
???? 該算法較簡單,用于一些小型實時系統或要求不太嚴格的實時系統中,又可分為:
1.非搶占式輪轉調度算法。常用于工業生產的群控系統中,要求不太嚴格。
2.非搶占式優先調度算法。要求相對嚴格,根據任務的優先級安排等待位置。可用于有一定要求的實時控制系統中。(精心設置可獲得百ms級的響應時間)
2)搶占式調度算法
? ? ? 較嚴格的實時系統中(t約為數十ms),選擇采用搶占式優先權調度算法。根據搶占發生時間可分為:
1.基于時鐘:某高優先級任務到達后并不立即搶占,而等下一個時鐘中斷時搶占。
2.立即搶占:一旦出現外部中斷,只要當前任務未處于臨界區,就立即搶占處理機。
3. 常用的幾種實時調度算法
?目前有許多實時調度算法,在常用的算法中簡單介紹兩種實時調度算法:
最早截止時間優先EDF(Earliest DeadlineFirst)算法
v最低松弛度優先LLF(Least Laxity First)算法
1)最早截止時間優先EDF
v根據任務的開始截止時間來確定任務的優先級。截止時間越早,其優先級越高。
?系統保持一個實時任務就緒隊列
?隊列按各任務截止時間的早晚排序
?調度程序總是選擇就緒隊列中的第一個任務,分配處理機使之投入運行。
v新任務產生時,是否等當前程序執行完:
?搶占式/非搶占式
v可能會使作業錯過,但可適用于軟實時系統
2)最低松弛度優先LLF
? 根據任務緊急(或松弛)的程度,來確定任務的優先級。任務的緊急程度越高(松弛度值越小),優先級就越高。
v松弛度=截止完成時間 – 還需執行時間 - 當前時間
?可理解為當前時刻到開始截止時刻間的差距,隨著時間的推進,這個差值逐漸變小,任務越來越緊迫。
任務A,截止完成時間=200ms,運行=100ms;
任務B,截止完成時間= 400ms,運行=150ms,
當前t=0時刻,兩者的松弛度分別為A松弛度=200-100ms;? B松弛度=250ms。
LLF算法主要用于搶占調度方式中。
進程切換發生的時機
進程執行完
進程I/O阻塞
新進程出現時可能的搶占
某進程松弛度為0時發生搶占
有的時刻,其他并發的實時任務下一周期未到來,會出現只有一個任務的情況。