天天看點

重學作業系統原理系列 - 程序管理(二)1 死鎖2 資源配置設定圖(RAG:Resource Allocation Graph)

管程(Monitors,也稱螢幕)(重點)

基本概念

一種程式結構,結構内的多個子程式(對象 “對象 (計算機科學)”)或子產品 “子產品 (程式設計)”))形成的多個工作線程 “工作 (資訊學)”)互斥通路共享資源。

這些共享資源一般是硬體裝置或一群變量。

管程實作了在一個時間點,最多隻有一個線程在執行管程的某個子程式。與那些通過修改資料結構實作互斥通路的并發程式設計相比,管程實作很大程度上簡化了程式設計。

管程提供了一種機制,線程可以臨時放棄互斥通路,等待某些條件得到滿足後,重新獲得執行權恢複它的互斥通路。

1 死鎖

  • 臨界資源

    每次隻允許一個程序通路的資源,分硬體臨界資源、軟體臨界資源。

  • 臨界區

    每個程序中通路臨界資源的那段程式叫做臨界區。

    程序對臨界區的通路必須互斥,每次隻允許一個程序進去臨界區,其他程序等待。

臨界區管理的基本原則(重點)

①如果有若幹程序要求進入空閑的臨界區,一次僅允許一個程序進入

②任何時候,處于臨界區内的程序不可多于一個。如已有程序進入自己的臨界區,則其它所有試圖進入臨界區的程序必須等待

③進入臨界區的程序要在有限時間内退出,以便其它程序能及時進入自己的臨界區

④如果程序不能進入自己的臨界區,則應讓出CPU,避免程序出現“忙等”

1.1 死鎖的定義

一組程序中,每個程序都無限等待被該組程序中另一程序所占用的資源,因而永遠無法得到的資源,這種現象稱為程序死鎖,這一組程序就稱為死鎖程序。

如果發生死鎖,會浪費大量系統資源,甚至導緻系統崩潰,注意:

  • 參與死鎖的所有程序都在等待資源
  • 參與死鎖的程序是目前系統中所有程序的子集

1.2 死鎖的産生原因

資源數量有限、鎖和信号量錯誤使用。

  • 資源的使用方式
“申請-配置設定-使用-釋放”模式
      
  • 可重用資源:可被多個程序多次使用,又可分為可搶占資源與不可搶占資源,如處理器、

    I/O

    部件、記憶體、檔案、資料庫、信号量等可搶占資源。
  • 可消耗資源:隻可使用一次、可建立和銷毀的資源。如信号、中斷、消息等。

1.3 活鎖和饑餓

重學作業系統原理系列 - 程式管理(二)1 死鎖2 資源配置設定圖(RAG:Resource Allocation Graph)

說明:

如圖,這裡有兩個程序都需要使用資源1和資源2。比如這兩個程序都上cpu執行,但是程序A執行到第二句的時候需要使用資源2,而程序B執行到第二句的時候需要資源1,但是此時恰好都不能獲得各自的資源,這樣就進入忙等待(進入輪詢看資源是否可用),這就是活鎖,也就是先加鎖再輪詢,這樣導緻兩個程序既無進展也沒有阻塞。這和死鎖的概念的差別在于死鎖的時候程序不能進入cpu去執行。

饑餓:資源配置設定政策決定

死鎖與“饑餓”

  • 饑餓

程序在競争資源時,一直得不到其想要的資源,因而得不到服務,此時系統中并沒有死鎖

重學作業系統原理系列 - 程式管理(二)1 死鎖2 資源配置設定圖(RAG:Resource Allocation Graph)

1.4 産生死鎖的必要條件

  • 互斥使用(資源獨占):一個資源每次隻能給一個程序使用
  • 占有且等待(請求和保持,部分配置設定):程序在申請新的資源的同時保持對原有資源的占有。
  • 不可搶占(不可剝奪):資源申請者不能強行的從資源占有着手中多去資源,資源隻能由占有着自願釋放
  • 循環等待

存在一個程序等待隊列

{P1,P2,......,Pn}

,其中

P1

等待

P2

占有的資源,

P2

P3

占有的資源,…,

Pn

P1

占有的資源,形成一個程序等待環路。

2 資源配置設定圖(RAG:Resource Allocation Graph)

用有向圖描述系統資源和程序的狀态

重學作業系統原理系列 - 程式管理(二)1 死鎖2 資源配置設定圖(RAG:Resource Allocation Graph)

2.1 資源配置設定圖畫法說明

  • 系統由若幹類資源構成,一類資源稱為一個資源類;每個資源類中包含若幹個同種資源,稱為資源執行個體。
  • 資源類:用方框表示。資源執行個體:用方框中的黑圓點表示。程序:用圓圈中加程序名表示。
重學作業系統原理系列 - 程式管理(二)1 死鎖2 資源配置設定圖(RAG:Resource Allocation Graph)
  • 配置設定邊:資源執行個體–>程序;申請邊:程序–>資源類

2.2 死鎖定理

  • 如果資源配置設定圖中沒有環路,則系統中沒有死鎖;如果圖中存在還禮則系統中可能存在死鎖。
  • 如果每個資源類中隻包含一個資源執行個體,則環路是死鎖存在的充分必要條件。例如:
重學作業系統原理系列 - 程式管理(二)1 死鎖2 資源配置設定圖(RAG:Resource Allocation Graph)

2.3 資源配置設定圖化簡

化簡步驟:

  • 1、找一個非孤立、且隻有配置設定邊的程序結點,去掉配置設定邊,将其變為孤立結點
  • 2、再把相應的資源配置設定給一個等待該資源的程序,即将該程序的申請邊變為配置設定邊。
  • 3、重複上述步驟直到找不到資源配置設定結點。完成之後如果所有結點都變為孤立結點則表示系統中沒有死鎖,否則系統存在死鎖。