【操作系統】處理機調度與死鎖(三)


一、前言

  前面介紹了進程與線程的相關概念,現在繼續學習處理機調度,處理機是系統最重要的資源,提高處理機的利用率和改善系統性能,在很大程度上取決於處理機調度性能的好壞,下面來介紹處理的調度以及死鎖的問題。

二、處理機調度的層次

  2.1 高級調度

  高級調度又稱為作業調度或長程調度,主要功能是根據某種算法,把外存上處於后備隊列中的那些作業調入內存,調度的對象是作業

  作業,包含了程序、數據、作業說明書,系統根據該作業說明書來控制程序的運行。在批處理系統中,是以作業為基本單位從外存調入內存的。

  作業步,在作業運行期間,每個作業都必須經過若干個相對獨立又相互關聯的順序加工步驟才能得到結果,每一個加工步驟稱為一個作業步,各作業步相互關聯,上一個作業步的輸出可能是下一個作業步的輸入。

  作業流,若干個作業進入系統后,被依次存放在外存上,這邊形成了輸入的作業流,在操作系統的控制下,逐個作業進行處理,於是便形成了處理作業流。

  作業控制塊(JCB),為了管理和調度作業,在多道批處理系統中為每個作業設置了一個作業控制塊,如同進程控制塊是進程在系統中存在的標識一樣,他是作業在系統中存在的標志,其中保存了系統對作業進行管理和調度所需的全部信息。每當作業進入系統時,系統便為每個作業簡歷一個JCB,根據作業類型將它插入相應的后備隊列中,作業調度程序根據一定的調度算法來調度他們,被調度到的作業將會裝入內存,當一個作業執行結束進入完成狀態時,系統負責回收分配給它的資源,陳曉它的作業控制塊。

  作業調度,根據作業控制塊中的信息,審查系統能否滿足用戶作業的資源需求,以及按照一定的算法,從外存的后備隊列中選取某些作業調入內存,並為他們創建進程、分配必要的資源。然后再將新創建的進程插入到就緒隊列,准備執行。

  2.2 低級調度

  低級調度也稱為進程調度或短程調度,它所調度的對象是進程(或內核級線程),進程調度是最基本的一種調度。

  低級調度用於決定就緒隊列中的哪個進程(或內核級線程)應獲得處理機,然后再由分派程序執行把處理機分配給該進程的具體操作。其主要功能如下

  ① 保存處理機的現場信息,低級調度程序通過某種算法從就緒隊列中選取一個進程,把它的狀態改為運行狀態,並准備把處理機分配給它。

  ② 把處理機分配給進程,由分派程序把處理機分配給進程,此時需要為選中的進程恢復處理機現場。

  為了實現進程調度,應該具有如下三個基本機制

  ① 排隊器,為了提高進程調度的效率,事先應該將系統的所有就緒進程按照一定的方式排成一個或多個隊列,以便調度程序能最快地找到它。

  ② 分派器,分派器把由進程調度程序所選定的進程,從就緒隊列中去除該進程,然后進行上下文切換,將處理機分配給它。

  ③ 上下文切換機制,當對處理機進行切換時,會發生兩對上下文切換操作,在第一對上下文切換時,操作系統將保存當前進程的上下文,而裝入分派程序的上下文,一遍分派程序運行,在第二對上下文切換時,將移出分派程序,而把新選進程的CPU現場信息裝入到處理機的各個相應寄存器中。

  進程調度可以采用下述兩種調度方式

  ① 非搶占式方式,一旦把處理機分配給某進程后,不管它要運行多長時間,都一直讓它運行下去,不會因為時鍾中斷等原因而搶占正在運行進程的處理機。直至該進程完成,資源釋放處理機,或發生某事件時而被阻塞時,才再把處理機分配給其他進程。在此種方式下,可能引起其他進程調度的因素如下:正在執行的進程執行完成,或因發生某事件而不能再繼續執行;執行中的進程因提出I/O請求而暫停執行;在進程通信或同步過程中執行了某種原語操作,如wait、block、wakeup等。系統開銷小,但是不能在要求比較嚴格的實時系統中。

  ② 搶占方式,允許調度程序根據某種原則去暫停某個正在執行的進程,將已分配給該進程的處理機重新分配給另一個進程,可以防止一個長進程長時間占用處理機,開銷較大,並且其基於如下原則:優先權原則,通常對一個重要的和緊急的作業賦予較高的優先級;短作業(進程)優先原則,新到來的作業(進程)比正在執行的作業(進程)明顯的短時,將暫停當前長作業(進程)的執行,將處理機分配給新到的短作業(進程),使之優先執行;時間片原則,進程按時間片輪轉,當一個時間片用完后,便停止該進程的執行而重新進行調度。

  2.3 中級調度

  中級調度又稱為中程調度,其主要是為了提高內存利用率和系統吞吐率,將那些暫時不能運行的進程不再占用寶貴的內存資源,而是將他們調至外存上去等待,此時的進程的狀態稱為就緒駐外存狀態或掛起狀態,當這些進程重新具備運行條件且內存又稍有空閑時,由中級調度來決定把外存上的那些具備運行條件的進程重新調入內存,修改為就緒狀態,掛在就緒隊列上等待進程調度。

三、調度隊列模型和調度准則

  3.1 僅有進程調度的調度隊列模型

  每個進程在執行時都可以出現以下三種情況

  ① 任務在給定的時間片內已經完成,該進程便在釋放處理機后進入完成狀態。

  ② 任務在本次時間片尚未完成,OS便將該任務在放入就緒隊列的末尾。

  ③ 在執行期間,進程因為某事件而被阻塞后,被OS放入阻塞隊列。

  3.2 具有高級和低級調度的調度隊列模型

  在批處理系統中,不僅需要進程調度,還需要作業調度,由后者按一定的作業調度算法,從外存的后備隊列匯總選擇一批作業調入內存,並為它們建立進程,送入就緒隊列。然后由進程調度按照一定的進程調度算法選擇一個進程,把處理機分配給該進程。

  說明:該調度模型具有多個阻塞隊列,根據不同的阻塞原因確定不同的阻塞隊列。

  3.3 同時具有三級調度的調度隊列模型

  引入中級調度后,可以把進程的就緒狀態分為內存就緒,外存就緒,內存阻塞,外存阻塞。其調度模型如下圖所示

  3.4 面向用戶的准則

  ① 周轉時間短,周轉時間是指從作業被提交給系統開始,到作業完成為止這段時間間隔,它包括四部分:作業在外存后備隊列上等待調度的時間,進程在就緒隊列上等待進程調度的時間,進程在CPU上執行的時間,進程等待I/O操作完成的時間。

  ② 響應時間快,從用戶通過鍵盤提交一個請求開始,到系統首次產生響應為止的時間,包括鍵盤輸入的請求信息傳送到處理機的時間,處理機對請求信息進行處理的時間,形成的響應消息回送到中斷顯示器的時間。

  ③ 截止時間的保證,某任務必須開始執行的最遲時間,或必須完成的最遲時間。

  ④ 優先權准則,讓某些緊急的作業能夠得到及時處理。

  3.5 面向系統的准則

  ① 系統吞吐量高,指在單位時間內系統所完成的作業數。

  ② 處理機利用率好

  ③ 各類資源的平衡利用。

四、調度算法

  根據系統的資源分配策略所規定的資源分配算法,對於不同的系統和系統目標,通常采用不同的調度算法,如在批處理系統中,為了照顧為數眾多的短作業,應采用短作業優先的調度算法,在分時系統中,應采用輪轉法。

  4.1 先來先服務和短作業(進程)優先調度算法

  先來先服務(FCFS)調度算法是一種最簡單的調度算法,該算法可用於作業調度,也可用於進程調度,每次調度從后備作業隊列(就緒隊列)選擇一個最先進入該隊列的作業(進程),以便進行下一步處理。FCFS有利於長作業(進程),而不利於短作業(進程)。

  說明:短作業時間的帶權周轉時間明顯高於長作業。

  短作業(進程)優先調度算法SJ(P)F對短作業(進程)優先調度的算法,其可以用於作業調度和進程調度,每次調度從后備隊列(就緒隊列)選擇一個估計運行時間最短的作業(進程),以便進行下一步處理。SJ(P)F對長作業不利,也不能保證緊迫性作業(進程)被及時處理,同時,由於作業(進程)的長短只是根據用戶所提供的估計時間而定的,用戶可能有意無意縮短估計運行時間,所以不一定能夠保證短作業優先調度。

  4.2 高優先權優先調度算法

  為了使緊迫任務進入系統后便獲得優先處理,引入最高優先權優先調度算法,使用該算法進行作業調度時,系統將從后備隊列中選擇若干優先權最高的作業裝入內存,若進行進程調度,則把處理機分配給就緒隊列中優先權最高的進程,該算法可以分為非搶占式優先權算法搶占式優先權調度算法

  ① 非搶占式優先權算法,系統一旦把處理機分配給就緒隊列中優先權最高的進程后,該進程便一直執行下去,直至完成;或因某事件使該進程放棄處理機時,系統方可再將處理機重新分配給另一個優先權最高的進程。

  ② 搶占式優先權調度算法,系統把處理分配給優先權最高的進程,但在執行期間,如果又出現另一個優先權更高的進程,進程調度程序就立即停止當前進程的執行,重新將處理機分配給新到的優先權最高的進程。

  對於最高優先權優先調度算法,其關鍵在於使用的靜態優先權還是動態優先權,以及如何確定進程的優先權。

  ① 態優先權,在創建進程時確定,在進程的整個運行期間保持不變,確定進程優先級的依據如下:進程類型(系統進程的優先權高於一般用戶進程的優先權),進程對資源的需求(進程的估計執行時間及內存需要量的多少,對要求少的進程賦予高的優先權),用戶要求(用戶進程的緊迫程度及用戶所付費用的多少確定)。

  ② 動態優先權,在創建進程時所賦予的優先權,是可以隨進程的推進或所其等待時間的增加而改變的,以便獲得更好的調度性能,例如,讓就緒隊列中的進程讓其優先權隨等待時間的增加而增加。

  高響應比優先調度算法,在批處理系統中,短作業優先算法是一種比較好的算法,其主要不足之處是長作業得不到保證,為每個作業引入動態優先權,並使作業的優先級隨等待時間的增加而以速率a提高,則長作業在等待一定時間后,必然有機會獲得處理機,該優先權的變化規律可描述為:優先權 = (等待時間 + 要求服務時間)/ 要求服務時間 = 響應時間 / 要求服務時間。此算法會保證短、長作業能夠得到調度,但是在進行調度之間都需要進行響應比的計算,增加系統開銷。

  4.3 基於時間片的輪轉調度算法

  在分時系統中,為保證及時響應用戶的請求,必須采用基於時間片的輪轉式進程調度算法,廣泛采用多級反饋隊列調度算法。

  ① 時間片輪轉法,系統將所有的就緒進程按先來先服務的原則排成一個隊列,每次調度時,把CPU分配給隊首進程,並令其執行一個時間片,時間片的大小從幾ms到幾百ms,當執行的時間片用完時,由一個計時器發出時鍾中斷請求,調度程序便據此信息來停止該進程的執行,將它送到就緒隊列末尾,然后,再把處理機分配給就緒隊列中心的隊首進程,同時也讓它執行一個時間片,這樣就可以保證就緒隊列中的所有進程在一個給定的時間內均能獲得一個時間片的處理機執行時間。

  ② 多級反饋隊列調度算法,首先,設置多個就緒隊列,並為各個隊列賦予不同的優先級,第一個隊列的優先級最高,第二個其次,其余各隊列的優先權逐個降低,該算法賦予各個隊列中進程執行時間的大小也不相同,在優先權越高的隊列中,為每個進程所規定的執行時間片就越小。

  說明:當一個進程進入內存后,首先將它放入第一隊列的末尾,按FCFS原則排隊等待調度,當輪到該進程執行時,如它能夠在該時間片內完成,則可撤離系統,如果在一個時間片內尚未結束,調度程序便將該進程轉入第二隊列的末尾,再同樣按照FCFS原則等待調度執行,如果在第二隊列的時間片仍為完成,則進入第三隊列末尾,以此類推,直至到達最后第n隊列,便按照時間片輪轉的方式運行。只有當第一隊列空閑時,調度程序才調度第二隊列中的進程運行,僅當第1~(i-1)隊列為空時,才會調度第i隊列中的進程運行。如果處理機正在第i隊列中為某個進程服務時,又有新進程進入到優先權較高的第1~(i-1)中的任何一個隊列,則此時新進程會搶占正在運行進程的處理機,即由調度程序把正在運行的進程放回到第i隊列的末尾,把處理機分配到新的高優先權進程。

五、產生死鎖的原因和必要條件

  死鎖是指多個進程在運行過程中因為爭奪資源而造成的一種僵局,當進程處於這種僵局狀態時,若無外力作用,他們都將無法再向前推進。

  5.1 產生死鎖的原因

  產生死鎖的原因可以歸結為如下兩點

  ① 競爭資源,當系統中供多個進程共享的資源,如打印機、公用隊列等,其數目不足以滿足諸進程的需要時,會引起諸進程對資源的競爭而產生死鎖。

  ② 進程間推進順序非法,進程在運行過程中,請求和釋放資源的順序不當,也會導致進程死鎖。

  競爭資源引起的死鎖,競爭的資源可以分為可剝奪性資源(某進程在獲得這類資源后,該資源可以再被其他進程或系統剝奪,如處理機和內存資源)和不可剝奪性資源(當某進程獲得這類資源后,再不能強行收回,只能在進程用完后自行釋放,如磁帶機、打印機等)。

  ① 競爭非剝奪性資源引起的死鎖,在系統中配置的非剝奪性資源,由於它們的數量不能滿足諸進程運行的需要,會使進程在運行過程中,因爭奪這些資源而陷入僵局。如系統中只有一台打印機和一台磁帶機供進程p1和p2使用,假定p1占用了打印機,p2占用了磁帶機,若p1繼續要求磁帶機,則p1會阻塞,p2又要求打印機,則p2也將阻塞,兩個進程都在等待對方釋放出自己所需的資源,但它們又不能釋放出自己已占有的資源,以致進入死鎖狀態。

  ② 競爭臨時性資源而引起的死鎖,對於打印機這類可以重復使用的資源稱為永久性資源,而臨時性資源則是由一個進程產生,被另一個進程使用短暫時間后便無用的資源,其也可能會引起死鎖。若s1、s2、s3為臨時性資源,進程p1產生s1,又要求從p3接受s3,進程p3產生s3,又要求從p2接受s2,p2產生s2,又要求從s1接受消息,如果消息通信的順序如下

  p1: request(s3);release(s1);

  p2: request(s1);release(s2);

  p3: request(s2);release(s3);

  則可能會發生死鎖。

  進程推進順序不當引起的死鎖,由於進程在運行中具有異步性特征,當進程推進順序不合法時就可能引起死鎖。如進程p1運行request(r2),此時r2被p2占有,所以p1將阻塞,當p2運行request(r1),此時r1被p1占有,所以p2將阻塞,此時,就發生了死鎖。

  5.2 產生死鎖的必要條件

  死鎖發生必須具有下列四個必要條件

  ① 互斥條件,指進程對所分配到的資源進行排他性使用,即在一段時間內某資源只由一個進程占用,如果此時還有其他進程請求該資源,則請求者只能等待,直至占有該資源的進程用完釋放。

  ② 請求和保持條件,指進程已經保持了至少一個資源,但又提出了新的資源請求,而該資源又已經被其他進程占用,此時請求進程阻塞,但又對自己已獲得的其他資源保持不放。

  ③ 不剝奪條件,指進程已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。

  ④ 環路等待條件,指在發生死鎖時,必然存在一個進程-資源的環形鏈,即進程集合{p0,p1,p2,...,pn}中的p0正在等待p1占用的資源,p1在等待p2占用的資源,...,pn正在等待p0占用的資源。

  5.3 處理死鎖的基本方法

  為保證系統中諸進程的正常運行,應事先采取必要的措施,來預防發生死鎖,在系統中已經出現死鎖后,則應該及時檢測到死鎖的發生,並采取釋放措施來解除死鎖。處理死鎖的方法可歸結如下四種。

  ① 預防死鎖,該方法通過設置某些限制條件,去破壞產生死鎖的四個必要條件中的一個或幾個,來預防死鎖。其是一種比較容易實現的方法,已經被廣泛使用,但由於所施加的限制條件往往太嚴格,因而可能會導致系統資源利用率和系統吞吐量降低。

  ② 避免死鎖,該方法也是事先預防的策略,但它並不需要事先采取各種限制措施去破壞產生死鎖的四個必要條件,而是在資源的動態分配過程中,用某種方法去防止系統進入不安全狀態,從而避免發生死鎖。

  ③ 檢測死鎖,該方法並不需要事先采取任何限制措施,也不必要檢查系統是否已經進入不安全區,而是允許系統在運行過程中發生死鎖,但可通過系統所設置的檢測機構,及時檢測死鎖的發生,並精確地確定與死鎖有關的進程和資源,然后,采取適當措施,從系統中將已發生的死鎖清除掉。

  ④ 解除死鎖,這是與檢測死鎖相配套的一種措施,當檢測到系統中已經發生死鎖時,需將今晨從死鎖狀態中解脫出來,常用的實施辦法是撤銷或掛起一些進程,以便回收一些資源,再將這些資源分配給已處於阻塞狀態的進程,使之轉為就緒狀態,以繼續運行。

六、預防死鎖的方法

  預防死鎖和避免死鎖這兩種方法都是通過施加某些限制條件,來預防發生死鎖,兩者主要差別在於:為預防死鎖所施加的限制條件較嚴格,往往會影響進程的並發執行,而未避免死鎖所施加的限制條件就相對寬松,這給進程的運行提供了較寬松的環境,有利於進程的並發執行。

  6.1 預防死鎖

  預防死鎖是使四個必要條件中的第2、3、4個條件之一不能成立,來避免發生死鎖,對於條件1,則應該加以保證。

  ① 摒棄請求和保持條件,系統規定所有進程在開始運行之前,都必須一次性地申請其在整個運行過程中所需的全部資源,若系統有足夠的資源,則可分配給進程,這樣,進程在運行期間都不會提出資源請求,從而摒棄了請求條件,若系統有一種資源無法滿足某進程的要求時,即使其他資源都空閑,也不分配給該進程,而讓其等待,在等待中不會占用任何資源,也摒棄了請求和保持條件。其優點在於簡單、易於實現和安全,缺點為資源嚴重浪費,降低了資源利用率,進程不能保證及時運行。

  ② 摒棄不剝奪條件,進程是逐個提出對資源的要求的,當一個已經保持了某些資源的進程,再提出新的資源請求而不能立即得到滿足時,必須釋放它已經保持了的所有資源,帶以后需要時再重新申請,這意味着某一進程已經占用的資源,在運行過程中會被暫時的釋放掉,也可認為被剝奪了,從而摒棄了不可剝奪條件。其缺點在於比較復雜並且付出很大的代價,可能反復申請和釋放資源,致使進程的執行無限地推遲,延長了進程周轉時間,增加系統開銷,降低了吞吐量。

  ③ 摒棄環路等待條件,系統將所有資源按類型進行線性排隊,並賦予不同的序號,所有進程對資源的請求必須嚴格按照資源序號遞增的次序提出,這樣,在所形成的資源分配圖中,不可能再出現環路,因而摒棄了環路等待條件。其缺點在於由於為系統中各類資源所分配的序號相對穩定,這就限制了新類型設備的增加,並且作業(進程)使用各類資源的順序與系統規定的順序不同,造成對資源的浪費,同時也會限制用戶簡單自主的編程。

  6.2 系統安全狀態

  只要系統能夠始終處於安全狀態,便可避免發生死鎖。在避免死鎖的方法中,運行進程動態地申請資源,但系統在進行資源分配之前,應先計算此次資源分配的安全性,若此次分配不會導致系統進入不安全狀態,則將資源分配給進程,否則,令進程等待。  

  安全狀態指的是系統能夠按某種進程順序(p1,p2,p3,...,pn),來為每個進程pi分配其所需資源,直至滿足每個進程對資源的最大需求,使每個進程都可順利地完成。如果系統無法找到這樣一個安全序列,則稱系統處於不安全狀態。雖然並非所有的不安全狀態都必然會轉為死鎖狀態,但當系統進入不安全狀態后,便有可能進入死鎖狀態,只要系統處於安全狀態,系統便可避免進入死鎖狀態,因此,避免死鎖的實質在於,系統在進行資源分配時,如何使系統不進入不安全狀態。

  6.3 利用銀行家算法避免死鎖

  1. 銀行家算法的數據結構  

  ① 可利用資源向量Available,這是一個含有m個元素的數組,其中每一個元素代表一類可利用的資源數目,初始值為系統所配置的改類全部可用資源的數目,Available[j] = k,表示系統中Rj資源又k個。

  ② 最大需求矩陣Max,這是一個n * m 的矩陣,定義了系統中n個進程中的每一個進程對m類資源的最大需求,Max[i,j] = k,表示進程i需要Rj類資源的最大數目為k。

  ③ 分配矩陣Allocation,是一個n * m 的矩陣,定義了系統中每一類資源當前已經分配每一進程的資源數,Allocation[i,j] = k,表示進程i已經分得Rj類資源的數目為k。

  ④ 需求矩陣Need,是一個n * m的矩陣,表示每一個進程尚需的各類資源數。Need[i,j] = k,表示進程i還需要Rj類資源k個。

  Need[i, j] = Max[i, j] - Allocation[i, j]

  2. 銀行家算法

  設Requesti進程Pi的請求向量,若Requesti[j] = K,表示進程Pi需要Rj類資源K個,當Pi發出資源請求后,系統按照下述步驟進行檢查

  ① 如果Requesti[j] <= Need[i, j],轉向②,否則,因為它所需要的資源數已超過它所宣布的最大值,出錯。

  ② 如果Requesti[j] <= Available[j],轉向③,否則,表示尚無足夠資源,Pi需要等待。

  ③ 系統嘗試把資源分配給進程Pi,並修改數據結構中的數值:

  Available[j] = Available[j] - Requesti[j];

  Allocation[i, j] = Allocation[i, j] + Requesti[j];

  Need[i, j] = Need[i, j] - Requesti[j];

  ④ 系統執行安全性算法,檢查此次資源分配后系統是否處於安全狀態,若安全,才正式將資源分配給進程Pi,以完成本次分配,否則,將本次的嘗試分配作廢,恢復原來的資源分配狀態,讓進程Pi等待。

  3. 安全性算法

  系統所執行的安全性算法可描述如下

  ① 設置工作向量Work,表示系統可提供給進程繼續運行所需的各類資源數目,它含有m個元素,在執行安全算法開始時,Work = Available;

  ② 設置Finish,表示系統是否有足夠的資源分配給進程,使之運行完成,開始時Finish[i] = false,當有足夠資源分配給進程時,再令Finish[i] = true;

  ③ 從進程集合中找到一個能滿足下述條件的的進程:Finish[i] = fasle;Need[i, j] <= Work[j],若找到,進入④,否則,執行⑤

  ④ 當進程Pi獲得資源后,可順利執行,直至完成,並釋放出分配給它的資源,執行 Work[j] = Work[j] + Allocation[i, j]; Finish[i] = true;進入步驟③

  ⑤ 如果所有的進程的Finish[i] = true都滿足,則表示系統處於安全狀態,否則,系統處於不安全狀態。

七、死鎖的檢測與解除

  7.1 死鎖的檢測

  當系統為進程分配資源時,若未采取任何限制性措施,則系統必須提供檢測和解除死鎖的手段,系統必須要做到

  ① 保存有關資源的請求和分配信息

  ② 提供一種算法,以利用這些信息來檢測系統是否已進入死鎖狀態。

  資源分配圖用圓圈代表一個進程,用方框代表一類資源,由於一種類型的資源可以有多個,用方框中的一個點代表一類資源中的一個資源。

  說明:p1進程獲得了兩個r1資源,請求一個r2資源,p2進程獲得一個r1資源和一個r2資源,並且又申請了一個r1資源。

  利用資源分配圖可以檢測系統是否處於死鎖狀態。

  ① 在資源分配圖中,找到一個既不阻塞又不獨立的進程結點pi,在順利情況下,可獲得所需資源而繼續運行,直至運行完畢,再釋放其所占用的全部資源。

  ② p1釋放資源后,p2可獲得資源繼續運行,執行p2完成后又釋放其所占用的資源。

  ③ 在進行一系列化簡后,若能消去圖中所有的邊,使得所有的進程結點都成為孤立結點,則稱該圖是可以完全簡化的,若不能通過任何過程使改圖完全簡化,則改圖是不可完全簡化的。

  所有的簡化順序,都將得到相同的不可簡化圖,S為死鎖狀態的充分條件是:當且僅當S狀態的資源分配圖是不可完全簡化的,該充分條件稱為死鎖定理。

  7.2 死鎖的解除

  當發現有死鎖情況時,需要立即把他們從死鎖狀態中解脫出來,常用兩種解除死鎖的方法

  ① 剝奪資源從其他進程剝奪足夠數量的資源給死鎖進程,以解除死鎖狀態。

  ② 撤銷進程使全部死鎖進程都夭折掉,或者按照某種順序逐個撤銷進程,直至有足夠的資源可用,使死鎖狀態消除為止。

八、總結

  關於處理機調度和死鎖就介紹到這里,相信看完了本篇博客,園友們對處理機的調度和死鎖方面的知識會有一個比較全面的認識,謝謝各位園友的觀看~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM