處理機調度與死鎖
處理機調度的層次和調度算法的目的
調度的實質是一種資源分配。
三種調度中進程調度(低級調度)的運用頻率最高。
處理器調度的層次
- 高級調度
又稱長程調度或作業調度,調度對象是作業。
根據某種算法,決定將外存上處於后備隊列的哪幾個作業調入內存,為它們創建、分配必要的資源,並將它們放入就緒隊列。
高級調度主要用於多道批處理系統中,分時和實時系統不設置高級調度。
- 低級調度
又稱為進程調度或短程調度,調度對象是進程。
根據某種算法決定就緒隊列中哪個進程應獲得處理機,並由分派系統將處理機分配給被選中的進程。
在多道批處理、分時、實時系統中都必須配置這種調度。
- 中級調度
中級調度又稱內存調度。
目的:提高內存利用率和系統吞吐量。
處理器調度算法的目標
- 處理器調度算法的共同目標
- 資源利用率
CPU的利用率=\frac{CPU有效工作時間}{CPU有效工作時間+CPU空閑等待時間}CPU有效工作時間+CPU空閑等待時間CPU有效工作時間
- 公平性
諸進程都獲得合理的CPU時間,不會發生飢餓現象。
- 平衡性
為了使CPU和各種外設都經常處於忙碌狀態
- 策略強制執行
對所制定的策略其中包括安全策略,只要需要,就必須予以准確執行,及時回造成工作延遲也要執行。
- 資源利用率
- 批處理系統的目的
- 平均周轉時間短
周轉時間:作業被提交給系統開始,到作業完成為止這段時間間隔。
平周周轉時間描述為:T=\frac{1}{n}[\sum_{i=1}^{n}T_i]T=n1[∑i=1nTi]
平均帶權周轉時間可表示為:W=\frac{1}{n}[\sum_{i=1}^{n}\frac{T_i}{T_s}]W=n1[∑i=1nTsTi] - 系統吞吐量高
吞吐量是指單位時間內系統完成的作業數。與批處理作業的平均長度有關。
- 處理機利用率高
- 平均周轉時間短
- 分時系統的目標
- 響應時間快
- 均衡性
- 實時系統的目標
- 截止時間的保證
- 可預測性
作業與作業調度
批處理系統中的作業
在多道批處理系統中,作業是用戶提交給系統的一項相對獨立的工作。
-
作業和作業步
- 作業
一個比程序更廣泛的概念,不僅包括了通常的程序和數據,也配有一份作業說明書。在批處理系統中,是以作業為基本單位調入內存的。
- 作業步
在作業運行期間,每個作業都必須經過若干個相對獨立,又相互關聯的順序加工步驟才能得到結果。我們把每一個加工步驟稱為一個作業步。
-
作業和控制塊
在多道批處理系統中,為每個作業設置了一個作業控制塊JCB。JCB包括內容有:作業識別、用戶名稱、用戶賬號、作業類型、作業狀態、調度信息、資源需求、資源使用情況等。
-
作業運行的三個階段和三種狀態
作業從進入系統到運行結束,通常需要經歷收容、運行、完成三個階段。相應的作業就有了“后備階段”、“運行階段”和“完成階段”。
- 收容階段:通過某種輸入方式或SPOOL系統輸入到硬盤上,再為該作業建立JCB,並把它放入作業后備隊列中。
- 運行階段:當作業被作業調度后,便為它分配必要的資源和建立過程,並將它放入就緒隊列。
- 完成階段:作業完成、或發生異常情況提前結束時,作業便會進入“完成階段”。
作業調度的主要任務
作業調度的主要任務是,根據JCB中的信息,檢查系統中的資源能否滿足作業對資源的需求,以及按照一定算法,從外存的后備隊列中選取某些作業調入內存,並為它們創建進程、分配必要的資源。
- 接納多少個作業
- 接納哪些作業
先來先服務(FCFS)和短作業優先(SJF)調度算法
- 先來先服務調度算法
FCFS是最簡單的調度算法,該算法即可用於作業調度,也可用於進程調度。
- 短作業優先的調度算法
SJF算法是以作業的長短來計算優先級,作業越短,優先級越高。
缺點: 1. 必須預知作業的運算時間。 2. 對長作業非常不利 3. 在采用SJF算法時,人——機無法實現交互 4. 該算法完全未考慮作業的緊迫程度
優先級調度算法和高響應比優先調度算法
- 優先級調度算法
該算法用於作業調度時,系統從后備隊列中選擇若干個優先級最高的作業進入內存。
- 高響應比優先調度算法
優先權=\frac{等待時間+要求服務時間}{要求服務時間}優先權=要求服務時間等待時間+要求服務時間
等待時間與服務時間之和就是系統對該作業的響應時間,故該優先級又相當於相應比R_pRp據此,優先級又可以表示為:
R_p=\frac{響應時間}{要求服務時間}Rp=要求服務時間響應時間
進程調度
進程調度是OS中必不可少的一種調度。
進程調度的任務、機制和方式
- 進程調度的任務
- 保存處理機的現場信息
- 按某種算法選取進程
- 把處理器分配給進程
- 進程調度機制
- 排隊器:為了實現進程調度的效率
- 分派器
- 上下文切換器
- 進程調度方式
- 非搶占方式
- 搶占方式
輪轉調度算法
分時系統中,最簡單的也是交常用的是基於時間片的輪轉(RR)調度算法。
- 輪轉法的基本原理
將CPU分配給隊首進程,令其執行。當該進程的時間片耗盡或者運行完畢時,系統再次將CPU分配給新的隊首進程。
- 進程調度切換時機
①若一個時間片尚未用完,正在運行的進程便已經完成,就立即激活調度程序,將它從就緒隊列中刪除,在調度就緒隊列中隊首的進程運行,並啟動一個新的時間片。
②在一個時間片用完時,計數器終端處理程序被激活。如果進程尚未運行完畢,調度程序將把它送往就緒隊列的末尾。
周轉時間=作業完成時刻—作業到達時刻;
帶權周轉時間=周轉時間/服務時間;
平均周轉時間=作業周轉總時間/作業個數;
平均帶權周轉時間=帶權周轉總時間/作業個數;
- 時間片大小的確定
優先級調度算法
- 優先級調度算法類型
- 非搶占優先級調度算法
處理器分配給就緒隊列最高的進程之后便會一直執行下去
- 搶占式優先級調度算法
進程執行的時候,只有出現了優先級更高的進程便會分配給新進程。
- 非搶占優先級調度算法
- 優先級的類型
- 靜態優先級
在創建進程時確定,在進程的整個運行期間保持不變。
- 動態優先級
在創建之初先賦予一個優先級,然后隨着進程的推進而改變。
- 靜態優先級
多級隊列調度算法
在進程調度時,由於系統中僅設置一個進程的就緒隊列,即低級調度算法是固定的、單一的,無法滿足系統中不同用戶對進程的調度策略的不同需求。
該算法將系統中的進程就緒隊列從一個拆分為若干個,將不同類型或性質的進程固定分配在不同的就緒隊列,不同的就緒隊列采用不同的調度算法。
多級反饋隊列調度算法
- 調度機制
- 設置多個就緒隊列
第一個隊列優先級最高,第二個次之,此后類推。優先級越高的時間片越小。
- 給每個隊列都采用FCFS算法
新進程都放入第一個隊列,如果一個時間片未完成放入第二個隊、、、當被降到第n個隊列中,便采用RR方式運行。
- 按隊列優先級調度
調度程序首先調度最高優先級隊列中的進程運行,第一個隊列空閑時才會運行第二隊列、、
- 設置多個就緒隊列
- 調度算法的性能
- 終端型用戶
- 短批處理作業用戶
- 長批處理用戶
基於公平原則的調度算法
- 保證調度算法
- 跟蹤計算每個進程自創建以來已經執行的處理時間
- 計算每個進程應獲得的處理機時間,即自創建以來的時間除以n
- 計算進程獲得處理機時間的比率,即進程實際執行的處理時間和應獲得的處理機時間只比
- 比較各進程獲得處理機時間的比率。比如進程A的比率最低,為0.5,而進程B的比率為0.8,進程C的比率為1.2等
- 調度程序應選擇比率最小的進程將處理機分配給它,並讓該進程一直運行,直到超過最接近它的進程比率為止。
- 公平分享調度算法
實時調度
在實時系統中,存在兩種不同性質的實時服務,即HRT任務和SRT任務。
實時調度比如能滿足實時任務對截止時間的要求。
實現實時調度的基本條件
- 提供必要信息
- 就緒時間
- 開始截止時間和完成截止時間
- 處理時間
- 資源要求
- 優先級
- 系統處理能力強
單處理機情況下必須滿足:\sum_{i=1}^{m} \frac{C_i}{P_i}\leq1∑i=1mPiCi≤1
上述條件為考慮到任務切換所花費時間,因此應適當留有余地。 - 采用搶占調度機制
在含有HRT任務的實時系統中,廣泛采用搶占機制。
- 具有快速切換機制
- 對中斷的快速響應能力
- 快速任務的分派能力
實時調度算法的分類
- 非搶占式調度算法
- 非搶占輪轉調度算法
- 非搶占優先調度算法
- 搶占式調度算法
- 基於時鍾中斷搶占的優先級調度算法
- 立即搶占
最早截止時間優先算法(EDF)
該算法根據截止時間確定任務的優先級,任務的截止時間越早,優先級越高。
- 非搶占式調度方式用於非周期實時任務
- 搶占式調度方式用於周期實時任務
最低腮松弛優先算法(LLF)
松弛度=必須完成時間-自身的運行時間-當前時間
優先級倒置
- 優先級倒置的形成
- 優先級倒置的解決方法
死鎖概述
資源問題
- 可重用性資源和消耗性資源
- 可重用資源
可重用性資源是一種可供用戶重復使用的資源,它具有如下性質: 1. 每個可重用性資源中的單元只能分配給一個進程使用。 2. 進程使用可重用資源時,分順序:①請求資源;②使用資源;③釋放資源 3. 系統中每一類可重用資源中的單元數目都是相對固定的。
- 可消耗資源
可重用性資源又被稱為臨時資源,由進程動態地創建和消耗。 1. 每一類可消耗資源數目單位都是可以不斷變化的。 2. 進程在運行過程中,可以不斷創造和消耗資源。 3. 進程在運行過程中,可用自己消耗,不在返還。
- 可重用資源
- 可搶占性資源和不可搶占資源
- 可搶占資源
CPU和主存均屬於可搶占資源。
- 不可搶占資源
一旦系統吧某資源分配給該進程后,只能在進程用完后自己釋放。
- 可搶占資源
計算機系統中的死鎖
死鎖的起因通常是源於多個進程對資源的爭奪
- 競爭不可搶占性資源引起死鎖
- 競爭可消耗資源引起死鎖
- 進程推進順序不當引起死鎖
死鎖的定義、必要條件和處理方法
- 死鎖的定義
如果一組進程中每一個進程都在等待僅由該組進程中其他進程才能引發的事件,那么該組進程是死鎖的。
- 產生死鎖的必要條件
- 互斥條件
- 請求和保持條件
- 不可搶占條件
- 循環等待條件
- 處理死鎖的方法
- 預防死鎖
- 避免死鎖
- 檢測死鎖
- 解除死鎖
預防死鎖
預防思索的方法是通過破壞產生死鎖的四個必要條件中的一個或幾個,以避免發生死鎖。由於互斥條件是共享設備所必須的,因此主要是破壞產生死鎖的后三個條件。
破壞和保持條件
- 第一種協議
這種協議規定:所有程序在開始運行之前,必須一次性申請其在整個運行過程中所需的全部資源。
缺點:①資源被嚴重浪費;②進程經常會發生飢餓現象。 - 第二種協議
對第一種協議的一種改進,它允許一個進程只獲得運行初期所需的資源后,便開始運行。
破壞不可搶占條件
當一個已經保持了某些不可搶占資源的進程,提出新的資源請求而不能得到滿足時,它必須釋放已經保持的所有資源,待以后需要時重新申請。
破壞循環等待條件
規定每個進程必須按序號遞增的順序來請求資源。
避免死鎖
在資源動態分配過程中,防止系統進入不安全狀態,以避免發生死鎖。
系統安全狀態
- 安全狀態
- 安全狀態之例
- 由安全狀態向不安全狀態的轉換
利用銀行家算法避免死鎖
死鎖的檢測與解除
- 死鎖檢測算法
- 死鎖接觸算法
死鎖的檢測
死鎖的解除
- 終止所有的死鎖進程
- 終止所有的死鎖進程
- 逐個終止進程
- 付出代銷最小的死鎖算法
習題
-
高級調度和低級調度的主要任務是什么?為什么要引入中級調度?
高級調度的主要任務:用於決定把外存上處於后備隊列的哪些作業調入內存,並為它們創建進程,分配必要的資源,然后再將新創建的進程插入就緒隊列上,准備執行。 低級調度的主要任務:用於決定就緒隊列中哪個進程應獲得處理機,然后再由分配程序執行將處理機分配給該進程的具體操作。 引入中級調度的主要目的:為了提高系統資源的利用率和系統吞吐量。
-
處理機調度算法的共同目標是什么?批處理系統調度的目標又是什么?
①資源利用率、公平性、平衡性、策略強制執行。 ②平均周轉時間短、系統吞吐量高、處理機利用率高
-
何為作業、作業步、作業流
作業:作業是一個比程序更廣泛的概念,包括程序,數據,作業說明書。 作業步:把作業的每一個加工步驟稱為一個作業步。 作業流:是指若干個作業進入系統后依次存放在外存上形成的輸入作業流。
-
在什么情況下需要使用作業控制塊JCB,其中包含了那些內容?
每當作業進入系統時,系統便為每一個作業建立一個作業控制塊PCB,根據作業將它插入到相應的后備隊列中。JCB包括的內容通常有:作業識別、用戶名稱、用戶賬號、作業類型、作業狀態、調度信息、資源需求、資源使用情況等。
-
試說明低級調度的主要功能
保存處理機的現場信息、按某種算法選取進程、把處理器分配給進程 ``
-
在批處理系統、分時系統和實時系統中,各采用哪幾種進程(作業)調度算法?
批處理系統的調度算法:作業優先、優先權、高響應比優先、多級反饋隊列調度算法。分時系統調度算法:時間片輪轉法。實時系統的調度方法:最早截止時間優先即EDF、最低松弛度優先即LLF算法。
-
時間輪調度算法中,應如何確定時間片大小?
時間片應略大於一次典型的交互所需要的時間。一般應考慮三個因素:系統對相應時間的要求、就緒隊列中進程的數目和系統的處理能力。
-
為什么說傳統的幾種調度算法都不能算是公平調度算法?
以上介紹的幾種調度算法所保證的只是優先運行,如優先級算法是優先級最高的作業優先運行,但並不保證作業占用了多少處理機時間。另外也未考慮到調度的公平性。
-
按照調度方式可將實時調度算法分為幾種?
可分為非搶占和搶占兩種算法。而非搶占又分為非搶占式輪轉和優先調度算法;搶占式調度算法又分為基於時鍾中斷的搶占式優先權和立即搶占式優先權調度算法。
-
何謂死鎖?產生死鎖的原因和必要條件是什么?
答: (1) 死鎖是指多個進程因競爭資源而造成的一種僵局,若無外力作用,這些進程都將永遠不能再向前推進; (2)產生死鎖的原因有二,一是競爭資源,二是進程推進順序非法; (3)必要條件是:互斥條件,請求和保持條件,不剝奪條件和環路等待條件。