1. 程式人生 > >os第三章處理機排程與死鎖

os第三章處理機排程與死鎖

1.死鎖的概念
死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。
2.死鎖產生的4個必要條件
1、互斥:某種資源一次只允許一個程序訪問,即該資源一旦分配給某個程序,其他程序就不能再訪問,直到該程序訪問結束。
2、佔有且等待:一個程序本身佔有資源(一種或多種),同時還有資源未得到滿足,正在等待其他程序釋放該資源。
3、不可搶佔:別人已經佔有了某項資源,你不能因為自己也需要該資源,就去把別人的資源搶過來。
4、迴圈等待:存在一個程序鏈,使得每個程序都佔有下一個程序所需的至少一種資源。
當以上四個條件均滿足,必然會造成死鎖,發生死鎖的程序無法進行下去,它們所持有的資源也無法釋放。這樣會導致CPU的吞吐量下降。所以死鎖情況是會浪費系統資源和影響計算機的使用效能的。那麼,解決死鎖問題就是相當有必要的了。

3.避免死鎖的方法
1、死鎖預防 ----- 確保系統永遠不會進入死鎖狀態 產生死鎖需要四個條件,那麼,只要這四個條件中至少有一個條件得不到滿足,就不可能發生死鎖了。由於互斥條件是非共享資源所必須的,不僅不能改變,還應加以保證,所以,主要是破壞產生死鎖的其他三個條件。
a、破壞“佔有且等待”條件
方法1:所有的程序在開始執行之前,必須一次性地申請其在整個執行過程中所需要的全部資源。 優點:簡單易實施且安全。 缺點:因為某項資源不滿足,程序無法啟動,而其他已經滿足了的資源也不會得到利用,嚴重降低了資源的利用率,造成資源浪費。 使程序經常發生飢餓現象。
方法2:該方法是對第一種方法的改進,允許程序只獲得執行初期需要的資源,便開始執行,在執行過程中逐步釋放掉分配到的已經使用完畢的資源,然後再去請求新的資源。這樣的話,資源的利用率會得到提高,也會減少程序的飢餓問題。
b、破壞“不可搶佔”條件
當一個已經持有了一些資源的程序在提出新的資源請求沒有得到滿足時,它必須釋放已經保持的所有資源,待以後需要使用的時候再重新申請。這就意味著程序已佔有的資源會被短暫地釋放或者說是被搶佔了。 該種方法實現起來比較複雜,且代價也比較大。釋放已經保持的資源很有可能會導致程序之前的工作實效等,反覆的申請和釋放資源會導致程序的執行被無限的推遲,這不僅會延長程序的週轉週期,還會影響系統的吞吐量。
c、破壞“迴圈等待”條件 可以通過定義資源型別的線性順序來預防,可將每個資源編號,當一個程序佔有編號為i的資源時,那麼它下一次申請資源只能申請編號大於i的資源。

4.常見的批處理作業排程演算法
(1).先來先服務排程演算法(FCFS):就是按照各個作業進入系統的自然次序來排程作業。這種排程演算法的優點是實現簡單,公平。其缺點是沒有考慮到系統中各種資源的綜合使用情況,往往使短作業的使用者不滿意,因為短作業等待處理的時間可能比實際執行時間長得多。
(2).短作業優先排程演算法(SPF): 就是優先排程並處理短作業,所謂短是指作業的執行時間短。而在作業未投入執行時,並不能知道它實際的執行時間的長短,因此需要使用者在提交作業時同時提交作業執行時間的估計值。
(3).最高響應比優先演算法(HRN):FCFS可能造成短作業使用者不滿,SPF可能使得長作業使用者不滿,於是提出HRN,選擇響應比最高的作業執行。響應比=1+作業等待時間/作業處理時間。
(4). 基於優先數排程演算法(HPF):每一個作業規定一個表示該作業優先級別的整數,當需要將新的作業由輸入井調入記憶體處理時,優先選擇優先數最高的作業。
(5).均衡排程演算法,即多級佇列排程演算法

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述