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