第三章 处理机调度与死锁(汤小丹版操作系统笔记) 超全超详细!!!
文章目錄
- 第三章 處理機調度與死鎖(上)
- 3.1 處理機調度的層次和調度算法的目標
- 3.1.1 處理機調度層次
- 3.1.2 處理機調度算法目標
- 3.2作業與作業調度
- 3.2.1批處理系統中的作業
- 3.3.2 作業調度的主要任務
- 3.2.3先來先服務(FCFS)和短作業優先(SJF)調度算法
- 3.2.4優先級調度算法(PSA)和高響應比優先調度算法(HRRN)
- 3.3進程調度
- 3.3.1進程調度任務、機制和方式
- 3.3.2輪轉調度算法(RR)
- 3.3.3優先級調度算法
- 3.3.4多級隊列調度算法
- 3.3.5多級反饋隊列調度算法
- 3.3.6 基于公平性原則的調度算法
- 3.4實時調度
- 3.4.1 實現實時調度基本條件
- 3.4.2 實時調度算法分類
- 3.4.3 最早截至時間優先(EDF)算法
- 3.4.4 最低松弛度優先(LLF)算法
- 3.5死鎖概述
- 3.5.1 資源問題
- 3.5.2 計算機系統的死鎖
- 3.5.3 死鎖的定義、必要條件和處理方法
- 3.6預防死鎖
- 3.6.1 破壞"請求和保持"條件
- 3.6.2 破壞“不可搶占”條件
- 3.6.3 破壞“循環等待”條件
- 3.7避免死鎖
- 3.7.1 系統安全狀態
- 3.7.2 利用銀行家算法避免死鎖
- 3.8死鎖的檢測與解除
- 3.8.1 死鎖的檢測
- 3.8.2 死鎖的解除
第三章 處理機調度與死鎖(上)
3.1 處理機調度的層次和調度算法的目標
- 調度的實質
- 處理機調度
- 處理機調度
- 算法多級調度
3.1.1 處理機調度層次
3.1.2 處理機調度算法目標
- 資源利用率
- 公平性:每個進程獲得合理的時間分配
- 平衡性:使CPU和各種外部設備都處于忙碌狀態,調度算法保證系統資源的使用平衡性
- 策略強制執行:對所制定的策略,只要需要就予以執行,即使會造成某些工作的延遲也要執行
? (1)平均周轉時間短
? 作業周轉周期:是指從作業被提交給系統開始,到作業完成為止這段時間。
? 包括四部分:作業在外存后背隊列上的等待調度的時間 、進程在就緒隊列上等待進程調度時間、進程在CPU上執行時間、進程等待I/O操作完成時間
? 對每個用戶而言,都希望自己作業的周轉時間最短。但作為計算機系統的管理者,則總是希望能使平均周轉時間最短,這不僅會有效地提高系統資源的利用率,而且還可使大多數用戶都感到滿意。
? 可把平均周轉時間描述為:[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳
(N條作業提交到結束的時間之和除N)
? 為了進一步反映調度的性能,更清晰地描述各進程在其周轉時間中,等待和執行時間的具體分配狀況,往往使用帶權周轉時間,即作業的周轉時間T與系統為它提供服務的時間T,之比,即W= T/T,o而平均帶權周轉時間則可表示為:
(N條作業提交到結束的時間與其對應每條作業運行時間的比除N)
? (2)系統吞吐量高。
吞吐量是指在單位時間內系統所完成的作業數,它與批處理作業的平均長度有關。事實上,如果單純是為了獲得高的系統吞吐量,就應盡量多地選擇短作業運行。
? (3)處理機利用率高。
調度方式和算法又對處理機的利用率起著十分重要的作用。如果單純是為使處理機利用率高,應盡量多地選擇計算量大的作業運行。
3.分時系統的目標
? (1)響應時間快
響應時間:是從用戶通過鍵盤提交一個請求開始,直到屏幕上顯示出處理結果為止 的一段時間間隔。
? (2)均衡性
均衡性:是指系統響應時間的快慢應與用戶請求服務的復雜性相適應。
? (1)截止時間保證
? 截止時間是指某任務必須開始執行的最遲時間,或必須完成的最遲時間。
? HRT和SRT任務的調度方式、調度算法對其要求不一樣。
? (2)可預測性
3.2作業與作業調度
在多道批處理系統中,作業是用戶提交給系統的一項相對獨立的工作。操作員把用戶提交的作業通過相應的輸入設備輸入到磁盤存儲器,并保存在一個后備作業隊列中,再由作業調度程序將其從外存調入內存。
3.2.1批處理系統中的作業
? (1)作業(Job) PS:不僅包含程序和數據還包含說明書
? (2)作業步(Job Step) 對作業進行處理的相對獨立的一個步驟,一個作業由多個作業步組成。如編譯、鏈接、運行、打印結果。
作業控制塊(Job Control Block,JCB)
為了管理和調度作業,在多道批處理系統中,為每個作業設置了一個作業控制塊JCB,它是作業在系統中存在的標志,其中保存了系統對作業進行管理和調度所需的全部信息。
- JCB中的內容
- 作業標識
- 用戶名稱
- 用戶賬號
- 作業類型
- 作業狀態
- 調度信息(優先級、作業運行時間)
- 資源需求(預計運行時間、要求內存大小等)
- 資源使用情況
作業運行的三個階段和三種狀態
作業從進入系統到運行結束,通常需要經歷收容、運行和完成三個階段。相應的,作業也就有“后備狀態”、“運行狀態”和“完成狀態”。
(1)收容階段
(2)運行階段
(3)完成階段
3.3.2 作業調度的主要任務
根據JCB中的信息,檢查系統中的資源能否滿足作業對資源的需求,以及按照一定的調度算法,從外存的后備隊列中選取某些作業調入內存,并為它們創建進程、分配必要的資源。然后再將新創建的進程排在就緒隊列上等待調度。因此,也把作業調度稱為接納調度。
在每次執行作業調度時,都需做出以下兩個決定。
接納多少個作業(取決于多道程序度)
接納哪些作業(取決于所采用的調度算法)
- 注意:分時和實時系統不需要作業調度,但需具有接納控制措施。
3.2.3先來先服務(FCFS)和短作業優先(SJF)調度算法
先來先服務(first-come first-served,FCFS)調度算法
FCFS是最簡單的調度算法,該算法既可用于作業調度,也可用于進程調度。
當在進程調度中采用FCFS算法時,每次調度是從就緒隊列中選擇一個最先進入該隊列的進程,為之分配處理機,使之投入運行。該進程一直運行到完成或發生某事件而阻塞后,才放棄處理機。
-
特點:屬于非搶占調度方式,簡單、易于實現,
? 但不利于短作業和I/O型作業的運行。
-
應用場合:FCFS很少作為進程調度的主算法,常作為輔助調度算法。
短作業優先(short job first,SJF)的調度算法
由于在實際情況中,短作業(進程)占有很大比例,為了能使它們能比長作業優先執行,而產生了短作業優先調度算法。
? (1) 短作業優先算法
? SJF算法是以作業的長短來計算優先級,作業越短,其優先級越高。作業的長短是以作業所要求的運行時間來衡量的。SJF算法可以分別用于作業調度和進程調度。
? 在把短作業優先調度算法用于作業調度時,它將從外存的作業后備隊列中選擇若干個估計運行時間最短的作業,優先將它們調入內存運行。
? (2) 短作業優先算法的缺點
- 必須預知作業的運行時間。
- 對長作業非常不利。
- 人機無法實現交互。
- 不能保證緊迫性作業能得到及時處理。
3.2.4優先級調度算法(PSA)和高響應比優先調度算法(HRRN)
優先級調度算法(priority-scheduling algorithm,PSA)
可以這樣來看待作業的優x先級,對于FCFS調度算法,作業的等待時間就是作業的優先級,等待時間越長,其優先級越高。
對于SJF調度算法,作業的長短就是作業的優先級,作業所需運行的時間越短,其優先級越高。但上述兩種優先級都不能反映作業的緊迫程度。
高響應比優先調度算法(Highest Response RatioNext, HRRN)
在批處理系統中,FCFS算法所考慮的只是作業的等待時間,而忽視了作業的運行時間。而SJF算法正好與之相反,只考慮作業的運行時間,而忽視了作業的等待時間。
高響應比優先調度算法則是既考慮了作業的等待時間,又考慮作業運行時間的調度算法,因此既照顧了短作業,又不致使長作業的等待時間過長,從而改善了處理機調度的性能。
若能為每個作業引入一個動態優先級,即優先級是可以改變的,令它隨等待時間延長而增加,這將使長作業的優先級在等待期間不斷地增加,等到足夠的時間后,必然有機會獲得處理機。
由于等待時間與服務時間之和就是系統對該作業的響應時間,故該優先級又相當于響應比RP.
3.3進程調度
3.3.1進程調度任務、機制和方式
- 保存當前進程現場信息
- 按某種算法選取新進程
- 把處理器分配給新進程
調度機制由三組成部分
- 排隊器:就緒進程構成一個或多個隊列
- 分派器
- 上下文切換器:兩次切換
- OS保存當前進程上下文(即把當前進程的處理機寄存器內容保存到該進程的進程控制塊內),再裝入新進程的上下文
- 移除分派程序上下文,將新選進程的CPU現場信息裝入到處理機的各個相應寄存器中,以便新選進程運行
進程切換開銷大
- 硬件實現切換,兩組R(系統態、用戶態)
在上下文切換時,需要執行大量load和store 等操作指令,以保存寄存器內容。即使是現代計算機,每次上下文切換所花費時間大約可執行上千條指令。為了解決這個問題,一般用空間換時間的方法優化,采用多組寄存器,一組寄存器供處理機系統態使用,一組供應用程序使用,這樣上下文切換只需改變指針即可。
3.進程調度方式
-
非搶占式調度
- 不會被時鐘中斷或其它任何原因搶占,早期OS采用
- 有局限性,無法滿足交互式及實時性需求
-
引起調度因素
-
(1)運行完畢,或出現錯誤
-
(2)因Io請求暫停
-
(3)進行通信或同步時執行某些原語,如block
-
特點:簡單、開銷小,適合批處理os,不能用于實時和分時系統
-
搶占式調度
-
允許調度程序根據某種原則調度新進程執行
-
現代OS廣泛采用:
- 1)批處理:防止長期占用CPU
- 2)分時:實現人機交互
- 3)實時:滿足實時任務需求
復雜,開銷大
-
搶占原則
不是任意搶占,要遵循一定原則:
- 優先權原則:高搶占低
- 短進程優先:短搶占長
- 時間片原則:時間片完搶占
3.3.2輪轉調度算法(RR)
分時系統常采用輪轉調度算法,非常公平,毫秒級時間片
輪轉算法基本原理
系統根據按FCFS策略,將所有的就緒進程排成一個就緒隊列,并可設置每隔一定時間間隔(如30ms)即產生一次中斷,激活系統中的進程調度程序進行調度,完成一次調度,將CPU分配給隊首進程,令其執行。
當該進程的時間片耗盡或運行完畢時,系統再次將CPU 分配給新的隊首進程(或新到達的緊迫進程)。由此可保證就緒隊列中的所有進程在一個確定的時間段內,都能夠獲得一次CPU執行。
進程切換時機
- 若一個時間片尚未用完,正在運行的進程便已經完成,就立即激活調度程序,將它從就緒隊列中刪除,再調度就緒隊列中隊首的進程運行,并啟動一個新的時間片。
- 在一個時間片用完時,計時器中斷處理程序被激活。如果進程尚未運行完畢,調度程序將把它送往就緒隊列的末尾。
- 進程I/O進程執行過程時間片未用完,但是發送I/O進程進入阻塞
- 時間片大小極大影響系統性能
- 小時間片有利于短作業;太小則調度頻繁,開銷大
- 時間片長無法滿足短作業和交互式需求太長退化為FCFS
- 以略大于一次典型交互時間為準,大多數進程在一個時間片完成
3.3.3優先級調度算法
優先級調度算法把處理機分配給就緒隊列中優先級最高的進程
-
分成如下兩種
- (1)非搶占式優先級調度算法
- (2)搶占式優先級調度算法
-
搶占式優先級調度常用于實時性較高系統,當有新就緒進程時要重新評估
- 靜態優先級
靜態優先級是指在創建進程時確定且在進程的整個運行期間保持不變的優先級。
-
進程創建時確定,三個依據:
-
(1)進程類型 系統進程>用戶進程
- (2)進程對資源需求 需求少優先級高
-
(3)用戶要求 根據緊迫程序及付費確定
-
動態優先級
動態優先級是指在創建進程時賦予的優先權,可以隨進程推進或隨其等待時間增加而改變的優先級,可以獲得更好的調度性能。
特點:隨進程推進或等待時間的增加而改變,調度性能好
3.3.4多級隊列調度算法
- 采用一個進程就緒隊列,低級調度算法固定、單一,無法滿足不同用戶對進程調度策略的不同要求
- 多個進程就緒隊列,不同隊列有不同調度算法,不同優先級
- 針對不同用戶進程提供多種調度策略
- 針對多CPU,一個CPu進程可放于單個就緒隊列
- 相互合作的進行分配到不同隊列以提高并行性
3.3.5多級反饋隊列調度算法
- 前面的算法有局限。不知進程長度時SPF和基于進程長度搶先式調度無法使用
- 不必事先知道進程長度,較好滿足各種類型進程需要
- 目前公認較好的算法
- 多級:多個隊列,每個隊列優先級從高到低,優先級高的時間片短。
- 反饋:表示如果有新的進程加入優先級高的隊列時,立刻停止當前正在運行的進程,轉而去運行優先級高的隊列。
調度機制
設置多個就緒隊列, 設置多個就緒隊列(多隊列調度算法),第一個隊列優先級最高,逐個降低;優先級越高,時間片越 小
時間片不同每個隊列都采用FCFS算法,最后隊列采取按RR
按隊列優先級調度,屬于搶先式調度
調度算法性能
第一個隊列時間片略大于多數人機交互所需之處理時間時,能滿足各種類型用戶的需要。
- 終端型用戶:由于終端型用戶提交的作業多屬于交互型作業,通常較小,系統只要能使這些作業在第一隊列規定的時間片內完成,便可使終端型用戶感到滿意。
- 短批處理作業用戶 :對于這類作業,如果可在第一隊列中執行完成,便獲得與終端型作業一樣的響應時間。對于稍長的短作業,也只需在第二和第三隊列各執行一時間片完成,其周轉時間仍然較短。
- 長批處理作業用戶 :對于長作業,它將依次在第1,2,……n個隊列中運行,然后再按輪轉方式運行,用戶不必擔心其作業長期得不到處理。
3.3.6 基于公平性原則的調度算法
保證調度算法
性能保證
n個相同類型的進程同時運行,須保證每個進程都獲得相同的處理機時間1/n。
? 保證調度算法是另外一種類型的調度算法,它向用戶所做出的保證并不是優先運行,而是明確的性能保證,該算法可以做到調度的公平性。一種比較容易實現的性能保證是處理機分配的公平性。
在公平分享調度算法中,調度的公平性主要是針對用戶而言,使所有用戶能獲得相同的處理機時間,或所要求的時間比例。
3.4實時調度
3.4.1 實現實時調度基本條件
- 就緒時間 某任務成為就緒狀態的起始時間,在周期任務的情況下,它是事先預知的一串時間序列
- 開始時間和截止時間 對于典型的實時應用,只須知道開始截止時間,或者完成截止時間。
- 處理時間 一個任務從開始執行,直至完成時所需的時間。
- 資源要求 任務執行時所需的一組資源。
- 優先級 如果某任務的開始截止時間錯過,勢必引起故障,則應為該任務賦予“絕對”優先級;如果其開始截止時間的錯過,對任務的繼續運行無重大影響,則可為其賦予“相對”優先級,供調度程序參考。
? 假定系統中有m個周期性的硬實時任務HRT,它們的處理時間可表示為C,周期時間表示為P,則在單處理機情況下,必須滿足下面的限制條件時系統才是可調度的:
- 提高系統處理能力的途徑有:
①采用單處理機系統,但須增強其處理能力,以顯著地減少對每一個任務的處理時間;
②采用多處理機系統。假定系統中的處理機數為N,則應將上述的限制條件改為
采用搶占式調度機制
在含有HRT任務的實時系統中,廣泛采用搶占機制。這樣便可滿足HRT任務對截止時間的要求。但這種調度機制比較復雜。
具有快速切換機制
為保證硬實時任務能及時運行,在系統中還應具有快速切換機制,使之能進行任務的快速切換。該機制應具有如下兩方面的能力:
- (1)對中斷的快速響應能力
- (2)快速的任務分派能力
3.4.2 實時調度算法分類
- 可以按不同方式對實時調度算法加以分類:
- 根據實時任務性質:硬實時調度、軟實時調度
- 按調度方式:非搶占調度、搶占調度。
- 非搶占式調度:非搶占式輪轉、非搶占式優先權
- 搶占式調度:基于時鐘中斷的搶占式優先級調度、立即搶占的優先級調度
3.4.3 最早截至時間優先(EDF)算法
任務的截至時間越早,其優先級越高
-
假設任務3,4的開始截止時間早于任務2
-
任務A和任務B的周期時間分別為20ms和50ms
每個周期的處理時間分別為10ms和25ms。
3.4.4 最低松弛度優先(LLF)算法
該算法在確定任務的優先級時,根據的是任務的緊急(或松弛)程度。任務緊急程度愈高,賦予該任務的優先級就愈高,以使之優先執行。
-
任務的松弛度=必須完成的時間-其本身的運行時間-當前時間
其中其本身運行的時間指任務運行結束還需多少時間。eg:一個任務在200ms時必須完成,而它本身所需的運行時間是100ms,因此調度程序必須在100ms之前調度執行,則該任務的緊急程度(松弛程度)為100ms。
-
LLF算法實現方法
在實現該算法在時要求系統中有一個按松弛度排序的實時任務就緒隊列,松弛度最低的任務排在最前面,調度程序選擇隊列中的隊首任務執行。
該算法主要用于可搶占調度方式中。
假如在一個實時系統中有兩個周期性實時任務A和B,
任務A要求每20ms執行一次,執行時間為10ms,
任務B要求每50ms執行一次,執行時間為25ms.
由此可知,任務A和B每次必須完成的時間分別為:A1、A2、A3、…和B1、B2、B3、…,見下圖。
- 下圖示出了具有兩個周期性實時任務的調度情況
t1= 0ms: A1松弛度為10ms,B1松弛度為25ms
t2=10ms:A2松弛度為20ms,B1松弛度為15ms
t3=30ms:A2松弛度為 0ms,B1松弛度為15ms
t4=40ms:A3松弛度為10ms,B1松弛度為 5ms
t5=45ms:A3松弛度為 5ms,B2松弛度為30ms
t6=55ms:任務A尚未進入第4周期,調度B2執行
t7=70ms: A4松弛度為0ms,B2松弛度為20ms
3.5死鎖概述
所謂死鎖是指多個進程因為競爭資源而造成的一種僵局(互相等待),若無外力作用,這些進程都將無法向前推進。
3.5.1 資源問題
在系統中有許多不同類型的資源,其中可以引起死鎖的主要是,需要采用互斥訪問方法的、不可以被搶占的資源(臨界資源)。
系統中這類資源有很多,如打印機、數據文件、隊列、信號量等。
可重用性資源和消耗性資源
① 可重用性資源
-
定義:是一種可供用戶重復使用多次的資源
-
代表:計算機中的大多數資源
-
資源的請求和釋放:通過系統調用實現
-
特點:
(1)每一個可重用性資源中的單元只能分配給一個進程使用,不允許多個進程共享。
(2)進程在使用可重用性資源時須按照一定的順序。
(3)系統中每一類可重用性資源中的單元數目是相對固定的,進程在運行期間既不能創建也不能刪除它。
② 消耗性資源臨時性資源
-
定義:是在進程運行期間由進程動態地創建和消耗的資源。
-
代表:進程間通信的消息。
-
特點:
(1)每一類可消耗性資源的單元數目在進程運行期間是可以不斷變化的。
(2)進程在運行過程中,可以不斷地創造可消耗性資源的單元,將它們放入該資源類的緩沖區中,以增加該資源類的單元數目。
(3)進程在運行過程中,可請求若干個可消耗性資源單元用于進程自己的消耗,不再將它們返回給該資源類中。
可搶占資源和不可搶占資源
①可搶占資源
某進程獲取該資源后可以被其他進程或系統搶占
②不可搶占資源
一旦系統把某資源分配給該進程后,就不能將它強行收回,只能在進程用完后自行釋放。
3.5.2 計算機系統的死鎖
競爭不可搶占性資源的死鎖
通常系統中所擁有的不可搶占性資源其數量不足以滿足多個進程運行的需要,使得進程在運行過程中,會因爭奪資源而陷入僵局。
-
資源分配圖
方塊代表資源,圓圈代表進程
從進程指向資源的箭頭表示請求資源
從資源指向進程的箭頭表示已分配資源
競爭可消耗資源引起死鎖
圖8.進程之間通信時死鎖 如果三個進程間的消息通信。則按照下述順序進行:P1: …send(p2, m1);receive(p3, m3); …
P2: …send(p3, m2);receive(p1, m1); …
P3: …send(p1, m3);receive(p2, m2); …
- 結果:三個進程可以順利的運行,不會發生死鎖。
但若改成三個進程都先執行receive操作,后執行send操作。按照下述運行順序:
P1: …receive(p3 m2); send(p2,m1); …
P2: …receive(p1, m1);send(p3,m2); …
P3: …receive(p2, m2);send(p1, m3);…
- 結果:則三個進程就會永遠阻塞在它們的receive操作上,于是發生了死鎖。
進程推進順序不當引起死鎖
除了系統中多個進程對資源的競爭會引發死鎖外,進程在運行過程中,對資源進行申請和釋放的順序是否合法,也是在系統中是否會產生死鎖的一個重要因素。
- 例如:
系統中只有一臺打印機R1和一臺磁帶機R2,可供進程Р1和P2,共享。由于進程在運行中具有異步的特征,這就可能使P1和P2按照下述兩種順序向前推進。
- 進程推進順序非法
若并發進程P1,和P2,按圖3中曲線④所示的順序推進,它們將進入不安全區D內。- 此時P1保持了資源R1,P2保持了資源R2,系統處于不安全狀態。此刻如果兩個進程繼續向前推進,就可能發生死鎖。
- 例如,當P1,運行到P1: Request(R2)時,將因R2,已被P2占用而阻塞;當P2運行到P2: Request(R1)時,也將因R1已被P1占用而阻塞,于是發生了進程死鎖,這樣的進程推進順序就是非法的。
3.5.3 死鎖的定義、必要條件和處理方法
死鎖的定義
死鎖:是指兩個或兩個以上的進程在執行過程中,由于競爭資源或者由于彼此通信而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處丁死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱為死鎖進程。
規范定義
如果一組進程中每一個進程都在等待僅由該組進程中的其它進程才能引發的事件,那么該組進程是死鎖的(Deadlock)。
產生死鎖的必要條件
(1)互斥條件
(2)請求和保持條件
(3)不可搶占條件
(4)循環等待條件
處理死鎖的方法
⑴預防死鎖
(2)避免死鎖
(3)檢測死鎖
(4)解除死鎖
說明:這4種方法按次序對死鎖的防范程度逐漸削弱,但對應的是資源利用率的提高,以及進程因資源因素而阻塞的頻度下降(即并發程度提高)。
3.6預防死鎖
通過破壞產生死鎖的四個必要條件中的一個或幾個,以避免發生死鎖。
由于互斥條件是非共享設備所必須的,不僅不能改變,還應加以保證,因此主要是破壞產生> 死鎖的后三個條件。
3.6.1 破壞"請求和保持"條件
為了能破壞“請求和保持”條件,系統必須保證做到:當一個進程在請求資源時,它不能持有不可搶占資源。
第一種協議
該協議規定:所有進程在開始運行之前,必須一次性地申請其在整個運行過程中所需的全部資源。
分配所有所需資源,進程在整個運行期間便不會再提出資源要求,從而破壞了“請求”條件。
系統在分配資源時,只要有一種資源不滿足進程的要求,即使其他資源都空閑也不分配給該進程,而讓進程等待。由于該進程在等待期間未占用任何資源,于是,破壞了“保持”條件,從而預防了死鎖的產生。
特點
-
優點:簡單、易行和安全。
-
缺點:
第二種協議
該協議是對第一種協議的改進,它允許一個進程只獲得運行初期所需的資源后,便開始運行。運行過程中再逐步釋放已分配給自己的、且已用畢的全部資源,然后再請求新的所需資源。
特點 提高資源利用率和減少饑餓幾率
3.6.2 破壞“不可搶占”條件
-
為了能破壞“不可搶占”條件,協議中規定:進程提出新資源請求而不能滿足時,必須釋放已經保持的所有資源,待以后需要時再重新申請。
-
進程已占有的資源會被暫時地釋放,或者說是被搶占
特點
該實現起來比較復雜,且需付出很大的代價。
反復申請釋放,延長進程周轉時間、增加系統開銷、降低系統吞吐量
3.6.3 破壞“循環等待”條件
一個能保證“循環等待”條件不成立的方法是,對系統所有資源類型進行線性排序,并賦予不同的序號。
設R={R1,R2, R3.…Rm}為資源類型的集合,為每個資源類型賦予唯一的序號。若系統中有磁帶驅動器、磁盤驅動器、打印機,則函數F可按如下形式來定義:
F(tape drive) =1;
F(disk drive) =5;
F(printer)=12;
- 規定:每個進程必須按照序號遞增的順序請求資源。
如果一個進程已請求到一些序號較高的資源,后來又想請求序號低的資源時,必須先釋放所有具有相同和更高序號的資源后,才能申請序號低的資源。
特點
-
優點:資源利用率和系統吞吐量都明顯改善。
-
缺點:
- 系統中各類資源所規定的序號必須穩定,這就限制了新類型設備的增加。
- 可能會發生作業使用各類資源的順序與系統規定的順序不同,造成資源的浪費。
- 這種按照規定次序申請資源的方法會限制用戶自主的編程。
3.7避免死鎖
- 避免死鎖思想:
避免死鎖屬于事先預防策略
在資源動態分配過程中防止進入不安全狀態,以避免死鎖
施加的限制條件較弱,系統性能較好
目前常用此方法來避免死鎖
3.7.1 系統安全狀態
死鎖的避免把死鎖分為安全狀態和不安全狀態
-
系統處于安全狀態可避免死鎖
-
系統處于不安全狀態可能發生死鎖
-
避免死鎖的實質:資源分配時不進入不安全狀態
-
安全狀態
-
安全狀態:指系統能找到某種進程推進順序(P1,P2,…pn)為每個進程分配所需最大資源,使每個進程都可順序完成
-
安全序列:找到推進順序(p1,p2,p3,…pn)
-
安全狀態舉例:三個進程p1,p2,p3,共12臺磁帶機,資源使用情況如下表
進程最大需求已分配還需要可用 p1 10 5 5 3 p2 4 2 2 p3 9 2 7 由表:
可找到安全序列(p2,p1,p3),系統安全。
-
安全狀態變為不安全狀態舉例:若p3再多分配一個磁帶機,分配后為不安全狀態
進程最大需求已分配還需要可用 p1 10 5 5 2 p2 4 2 2 p3 9 3 6
-
3.7.2 利用銀行家算法避免死鎖
本為銀行系統設計,確保放貸安全
現在OS也可使用來避免死鎖
-
算法思想
- 新進程進入系統必須聲明對每種資源的最大需求量
- 進程申請資源確定是否有足夠資源
- 若足夠再判斷分配后是否進入安全狀態
- 若安全則分,否則進程等待
-
銀行家算法數據結構:
? ps: i:表示進程 ,j表示資源
-
可利用資源向量Available
表示可利用資源的數量,初值為系統每類資源總數量 Available[j]=k;
-
最大需求矩陣 Max
每個進程對每類資源的最大需求量 Max[i,j]=k
-
分配矩陣Allocation
每個進程已分配每類資源數量。 Allocation[i,j]=k
-
需求矩陣 Need
每個進程還需要多少資源 Need[i,j]=Max[i,j]-Allocation[i,j]
-
-
銀行家算法流程
Requesti[j] 是進程pi對資源j的請求向量,Requesti[j]=k含義:
-
若Requesti[j]≤Need[i,j],則轉向2;否則出錯
判斷請求資源數量是否小于等于進程還所需資源
-
若Requesti[j]≤Available[j]則轉向3;否則pi等待
判斷請求資源數量是否小于等于進程可利用資源
-
試探著把資源分配給進程pi,并修改數據結構值:
Avaliable[j]=Avaliable[j]-Requesti[j];
Allocation[i,j]=Allocation[i,j]+Requesti[j];
Need[i,j]=Need[i,j]-Requesti[j]
-
系統執行安全性算法。若安全才正式分配給Pi;否則恢復原來資源分配狀態,讓進程Pi,等待;
-
安全性算法
-
設置兩個向量:
①工作向量Work,表示系統可提供給該進程所需的各類資源數量,在執行安全算法時,Work[j]:=Avaliable[j];
②完成標志向量Finish:表示系統是否有足夠資源分配給進程,使之運行完成。開始時Finish[i]=false;當有足夠資源分配給進程時令Finish[I]=true;
-
從進程集合中找到能滿足下述條件的進程:
①Finish=false;
②Need[i,j]≤Work[j];
若找到則執3否則執行4
-
Pi獲得資源執行完成并釋放分配給它的所有資源,故應執行
Work[j]=Work[j]+Allocation[i,j];
Finsh[i]=true;
go to step 2;
-
若所有進程的Finish[i]=true,則系統處于安全狀態;反之不安全;
-
銀行家算法舉例
有五個進程{p0,p1,p2,p3,p4}和三類資源{A,B,C},各種資源數量分別為10,5,7在T0時刻資源分配情況如下:
- T0時刻存在安全序列{p1,p3,p4,p2,p0},系統是安全的
-
若p1發出資源請求向量Request1(1,0,2),先按銀行家算法檢查
①Request1(1,0,2)≤Need1(1,2,2);
②Request1(1,0,2)≤Avaiable1(3,3,2);
③先假定為P1,分配資源,并修改Available1,Allocation1,和Need1,向量
④再利用安全性算法檢查,存在安全序列<P1,P3,P4,P0,P2>
安全性算法檢查
-
若P4發出資源請求向量Reque4(3,3,0),按銀行家算法檢查:
①Request4(3,3,0)≤Need4;
②Request4(3,3,0)≤Available(2,3,0 ),p4等待
-
若P0發出資源請求向量Request0(0,2,0),按銀行家算法檢查:
①Request0(0,2,0)≤Need0;
②Request0(0,2,0)≤Available(2,3,0 );
③先假定可為p0分配資源,并修改有關數據
-
再進行安全性檢查:可用資源Available(2,1,0)不能滿足任何進程的需要,故系統進入不安全狀態,拒絕分配資源
3.8死鎖的檢測與解除
系統不采取預防死鎖措施,有沒有避免死鎖算法
系統提供兩個算法:
- 死鎖檢測算法。判斷系統是否發生死鎖
- 死鎖解除算法。發生死鎖時,利用該算法使系統脫離死鎖狀態
3.8.1 死鎖的檢測
資源分配圖
資源分配圖由結點集合N和邊集合E所組成
(1)結點集合N分為兩個互斥子集
即進程結點P={P1,P2,… ,Pn}和資源結點R={R1,R2,…R3},N=PUR
(2)邊集合E每條邊都連接著P中的一個結點和R中的一個結點,
邊Pi—>Rj是資源請求邊;Rj—>Pj是資源分配邊
圖11.資源分配圖死鎖定理
利用資源分配圖化簡來檢測死鎖
①在圖找出一個既不阻塞又非獨立的進程結點P,消去P;的請求邊和分配邊使之成為孤立
②化簡后若能化簡成功則沒死鎖反之則發生了死鎖
圖12.資源分配圖化簡死鎖檢測步驟
①可利用資源向量Available,表示m類資源中每一類資源的可用數目
②把不占用資源的進程(向量Allocation=0)記入L表中,即LiUL;
③從進程集合中找到一個Request≤Work的進程做如下處理
- 釋放該進程資源work =Work + Allocation i
- 將它記入L表中
④循環執行③若不能將所有進程都加入L表,資源分配圖不可化簡,發生死鎖
3.8.2 死鎖的解除
- 搶占資源
- 終止進程:終止所有進程或者逐個終止,代價大
- 終止進程考慮的因素:進程優先級,已執行時間,已使用資源數量,交互式作業還是匹處理作業
-------------------------------------------分隔符-----------------------------------------
ps: 對于k個進程,每個進程需要m個資源,需要滿足k*(m-1)+1≤資源總數,才不會發生死鎖
- 參考:計算機操作系統(第四版)(湯小丹版)
總結
以上是生活随笔為你收集整理的第三章 处理机调度与死锁(汤小丹版操作系统笔记) 超全超详细!!!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: access里的多步oledb错误_ac
- 下一篇: 计算机操作系统 第三章:处理机调度与死锁