第3章 處理機調度與死鎖
3.1 處理機調度相關基本概念
1、處理機調度:
1)定義:多道程序環境下,動態的把處理機分配給就緒隊列中的一個進程使之執行。
2)作業進入系統駐留在外存的後備隊列上,再至調入內存運行完畢,可能要經歷下述三級調度:
- 高級調度(High Scheduling)
- 中級調度(Intermediate-Level Scheduling)
- 低級調度(Low Level Scheduling)
①高級調度(High Scheduling)
定義:又稱作業調度或長程調度(Long-Term Scheduling),接納調度(Admission Scheduling)。
決定外存後備隊列中的哪些作業調入內存;爲它們創建進程、分配必要的資源。將新創建的進程排在就緒隊列上,準備執行。
②中級調度(Intermediate-Level Scheduling)
定義:又稱交換調度或中程調度(Medium-Term Scheduling)
引入目的:提高內存利用率和系統吞吐量。根據條件將一些進程調出或再調入內存。
③低級調度(Low Level Scheduling)
定義:也稱爲進程調度、微觀調度或短程調度(Short-Term Scheduling)。
決定內存就緒隊列中的哪個進程獲得處理機,進行分配工作。是最基本的一種調度,在三種基本OS中都有。
進程調度方式:
非搶佔方式(Non-preemptive Mode)
一旦處理機分配給某進程,該進程一直執行。決不允許其他進程搶佔已分配運行進程的處理機。
搶佔方式(Preemptive Mode)
允許調度程序根據某種原則,暫停某個正在執行的進程,將處理機重新分配給另一進程。
3)三級調度比較
4)調度隊列模型
不論高級、中級或者低級調度,都涉及到進程隊列,由此形成了三類調度隊列模型。從這三種方式中體驗調度的過程。
- 僅有進程調度的調度隊列模型
- 具有高級和低級調度的調度隊列模型
- 同時具有三級調度的調度隊列模型
5)選擇調度方式和調度算法的若干準則
- 面向用戶的準則
- 面向系統的準則
3.2 常用調度算法
調度的實質就是一種資源分配。不同的系統和系統目標,通常採用不同的調度算法——適合自己的纔是最好的。
1、先來先服務調度算法FCFS(First Come First Service)
一種最簡單的調度算法,按先後順序進行調度。既可用於作業調度,也可用於進程調度。
- 按照作業提交,或進程變爲就緒狀態的先後次序分派CPU;
- 新作業只有噹噹前作業或進程執行完或阻塞才獲得CPU運行
- 被喚醒的作業或進程不立即恢復執行,通常等到當前作業或進程出讓CPU。 (所以,默認即是非搶佔方式)
2. 短作業(進程)優先調度算法SJF/SPF(Shortest Job First) OR (Shortest Process First)
SJF/SPF調度算法能有效的降低作業的平均等待時間,提高系統吞吐量。
方式:
- 搶佔
- 非搶佔
3. 高優先權優先調度算法HPF Highest Priority First
照顧緊迫性作業,使其獲得優先處理而引入調度算法。常用於批處理系統中的作業調度算法,以及進程調度算法
分兩種方式:
- 非搶佔式優先權算法
- 搶佔式優先權算法 關鍵點:新作業產生時
優先權的類型
- 靜態優先權:創建進程時確定,整個運行期間保持不變。一般利用某一範圍的一個整數來表示,又稱爲優先數。
- 動態優先權:創建進程時賦予的優先權可隨進程的推進或隨其等待時間的增加而改變。
4.高響應比優先調度算法HRRN (Highest Response Raito Next)
HRRN爲每個作業引入動態優先權,使作業的優先級隨着等待時間的增加而以速率a提高:
優先權 =(等待時間+要求服務時間)/要求服務時間 = 響應時間 / 要求服務時間
5. 基於時間片的輪轉調度算法RR(Round Robin)
分時系統新需求:及時響應用戶的請求;採用基於時間片的輪轉式進程調度算法。
(1)時間片輪轉算法
- 將系統中所有的就緒進程按照FCFS原則,排成一個隊列。
- 每次調度時將CPU分派給隊首進程,讓其執行一個時間片。時間片的長度從幾個ms到幾百ms。
- 在一個時間片結束時,發生時鐘中斷。
- 調度程序據此暫停當前進程的執行,將其送到就緒隊列的末尾,並通過上下文切換執行當前就緒的隊首進程。
(2)多級反饋隊列算法FB(Multiple-level Feed Back Queue)
- 設置多個就緒隊列,各隊列有不同的優先級,優先級從第一個隊列依次降低。
- 賦予各隊列進程執行時間片大小不同, 優先權越高,時間片越短。
各算法綜合比較
3.3 實時調度
什麼是實時系統?
- 指系統能夠在限定的響應時間內提供所需水平的服務。
- 指計算的正確性不僅取決於程序的邏輯正確性,也取決於結果產生的時間,如果系統的時間約束條件得不到滿足,將會發生系統出錯。
1. 實現實時調度的基本條件
1)提供必要的信息
- 就緒時間。該任務成爲就緒狀態的時間。
- 開始截止時間、完成截止時間。
- 處理時間。從開始執行到完成所需時間。
- 資源要求。任務執行時所需的一組資源。
- 優先級。根據任務性質賦予不同優先級。
2)系統處理能力足夠強
系統中有M個週期性的硬實時任務,處理時間爲Ci,週期時間表示爲Pi,單機系統中必須滿足條件
3)採用搶佔式調度機制
4)具有快速切換機制
2. 實時調度算法的分類
根據實時任務的性質
硬實時調度算法
軟實時調度算法;
按調度方式
非搶佔調度算法
搶佔調度算法;
根據調度時間不同
靜態調度算法
動態調度算法。
多處理機環境下
集中式調度
分佈式調度
3. 常用的幾種實時調度算法
1)最早截止時間優先EDF (Earliest Deadline First)
根據任務的開始截止時間來確定任務的優先級。截止時間越早,其優先級越高。
2)最低鬆弛度優先LLF (Least Laxity First)
根據任務緊急(或鬆弛)的程度,來確定任務的優先級。任務的緊急程度越高(鬆弛度值越小),優先級就越高。
鬆弛度= 截止完成時間 – 還需執行時間 - 當前時間
可理解爲當前時刻到開始截止時刻間的差距,隨着時間的推進,這個差值逐漸變小,任務越來越緊迫。
3.4 產生死鎖的原因和必要條件
1、死鎖(Deadlock):指多個進程在運行過程中,因爭奪資源而造成的一種僵局。當進程處於這種狀態時,若無外力作用,它們都將無法再向前推進。
- 死鎖(Deadlock): 指進程之間無休止地互相等待!
- 飢餓(Starvation):指一個進程無休止地等待!
2、產生死鎖的原因可歸結爲如下兩點:
- 競爭資源。系統中供多個進程共享的資源如打印機、公用隊列等的數目不滿足需要時,會引起資源競爭而產生死鎖。
- 進程間推進順序非法。進程在運行過程中,請求和釋放資源的順序不當,同樣會導致死鎖。
3、產生死鎖的必要條件
形成死鎖的四個必要條件(四個條件都具備就會死鎖,缺一就不會死鎖)
- 互斥條件:進程對所分配到的資源進行排他性使用
- 請求和保持條件:進程已經保持了至少一個資源,又提出新的資源請求,而新請求資源被其他進程佔有只能造成自身進程阻塞,但對自己已獲得的其他資源保持不放,必然影響其他進程。
- 不剝奪條件:進程已獲得的資源未使用完之前不能被剝奪,只能在使用完時由自己釋放。
- 環路等待條件
4、處理死鎖的基本方法
1)事先預防
- 預防死鎖
- 避免死鎖
2)事後處理
- 檢測死鎖
- 解除死鎖
3.5 預防死鎖的方法、死鎖的檢測與解除
當系統爲進程分配資源時,若未採取任何限制性措施,則系統必須提供檢測和解除死鎖的手段,爲此係統必須:
- 保存有關資源的請求和分配信息;
- 提供一種算法,以利用這些信息來檢測系統是否已進入死鎖狀態。
1、資源分配圖
系統死鎖可利用資源分配圖來描述。
- 圓圈表示進程
- 方框表示一類資源,其中的一個點代表一個該類資源
- 請求邊由進程指向方框中的資源
- 分配邊則由方框中的一個點即資源。
2、死鎖的檢測
1)檢測時機:
當進程等待時檢測死鎖
定時檢測
系統資源利用率下降時檢測死鎖
2)死鎖定理
利用資源分配圖簡化法來檢測死鎖。
簡化方法如下:
1.在資源分配圖中找出一個既不阻塞又非獨立的進程結點Pi,在順利的情況下運行完畢,釋放其佔有的全部資源。
2.由於釋放了資源,這樣能使其它被阻塞的進程獲得資源繼續運行。消去了Pi的邊。
3.經過一系列簡化後,若能消去圖中所有邊,使結點都孤立,稱該圖是可完全簡化的。
S狀態爲死鎖狀態的充分條件是當且僅當S狀態的資源分配圖是不可完全簡化的。<死鎖定理>
3) 死鎖的解除
當發現進程死鎖時,便應立即把它們從死鎖狀態中解脫出來。常採用的方法是:
- 剝奪資源。從其他進程剝奪足夠數量的資源給死鎖進程以解除死鎖狀態。
- 撤銷進程。最簡單的是讓全部進程都死掉;溫和一點的是按照某種順序逐個撤銷進程,直至有足夠的資源可用,使死鎖狀態消除爲止。