計算機操作系統基礎(七)---作業管理之死鎖

引言

本文爲第七篇,作業管理之死鎖,死鎖是計算機操作系統中非常重要的概念,本文主要介紹什麼是死鎖以及如何解決死鎖

死鎖

死鎖是指兩個或兩個以上的進程在執行過程中,由於競爭資源或者由於彼此通信而造成的一種阻塞現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱爲死鎖進程

舉個例子:

如果這四輛汽車按照如圖的方向行駛,堵在十字路口,相互之間沒有退讓的話,這四輛汽車就形成了死鎖。

死鎖的產生

  • 競爭資源
  • 進程調度順序不當

競爭資源

爲什麼會出現競爭資源?

  • 共享資源數量不滿足各個進程的需求
  • 各個進程之間發生資源競爭導致死鎖

舉例:

假設有兩個進程:進程1和進程2,進程1需要使用傳真機,並且已經獲取到了傳真機資源。進程2需要獲取打印機,並且也獲取到了。如果此時進程2還需要傳真機的時候,或者進程1還需要打印機的時候,他們都需要等待請求的資源被釋放,但他們相互之間所佔用的資源又不會被釋放,因此就造成了死鎖的產生,這個就是由於競爭資源而產生的死鎖。如果此時多一個傳真機或者打印機資源,就不會出現死鎖,本質還是因爲資源不夠

進程調度順序不當

還是以上邊的進程1和進程2爲例,假設進程1申請傳真機資源爲步驟A,進程2申請打印機資源爲步驟B,進程2申請傳真機資源爲步驟C,進程1申請打印機資源爲步驟D。如果這兩個進程按照A、B、C、D的順序申請資源,就會產生死鎖。如果程序可以把調度順序改爲A、D、B、C,這個時候就不會出現死鎖的情況。因爲當進程1先獲得了傳真機資源,然後在獲取打印機資源,完成它的工作之後,進程1就會釋放這兩個資源。這個時候進程2就可以獲得打印機和傳真機資源了。這個就是因爲進程調度順序不當導致死鎖的產生

死鎖的四個必要條件

  • 互斥條件
  • 請求保持條件
  • 不可剝奪條件
  • 環路等待條件

如果只滿足上邊的一個或兩個的話,不會產生死鎖

互斥條件

  • 進程對資源的使用是排他性的使用
  • 某個資源只能由一個進程使用,其它需要使用該資源的進程只能等待,等待資源被釋放

請求保持條件

  • 進程至少持有一個資源,又提出新的資源請求
  • 新資源被佔用,請求被阻塞
  • 被阻塞的進程不釋放自己所持有的資源

不可剝奪條件

  • 進程獲得的資源在未完成使用前不能被剝奪(程序或操作系統均不可)
  • 獲得的資源只能由進程自身釋放

環路等待條件

發生死鎖時,必然存在進程-資源環形鏈

P爲進程,R爲資源

死鎖的處理

預防死鎖的方法

前邊提到了死鎖的四個必要條件,只要破壞其中的一個或多個條件,就可以避免死鎖的出現

破壞請求保持條件

  • 系統規定進程運行之前,一次性申請所有需要的資源
  • 進程在運行期間不會提出資源請求,從而摒棄請求保持條件。也就不可能會因爲在運行的時候請求資源而導致等待的情況

破壞不可剝奪條件

  • 當一個進程請求新的資源得不到滿足時,必須釋放佔有的資源
  • 進程運行時佔有的資源可以被釋放,意味着可以被剝奪

破壞環路等待條件

  • 可用資源線性排序,申請必須按照需要遞增申請
  • 線性申請不再形成環路,從而摒棄了環路等待條件

假設有A、B、C、D、E這五個資源,按照線性順序將他們排起來,假設有一個進程需要A和D這兩個資源的時候,它必須先申請A,才能申請D,這樣就是線性申請

銀行家算法

銀行家算法是一個可操作的著名的避免死鎖的算法,以銀行借貸系統分配策略爲基礎的算法

  • 假設客戶申請的貸款是有限的,每次申請需要聲明最大資金量
  • 銀行家在能滿足貸款時,都應該給客戶貸款
  • 客戶在使用貸款後,能夠及時歸還貸款

上邊是銀行家算法策略的一個基礎,下邊是具體過程:

這個算法要求有三個數據結構,分別是已分配資源表所需資源表可分配資源表

A、B、C、D爲可申請的共享資源,P1、P2、P3、P4爲需要申請資源的四個進程

已分配資源表

表中的數值表示的是每個進程它當前擁有的資源(如P1進程已分配了1個C資源和4個D資源)

所需資源表

表中的數值表示的是每個進程所需要各個資源的數量(如P1進程需要6個B資源、5個C資源和6個D資源)

可分配資源表

表中的數值表示的是系統裏邊還剩下的各種類型資源的數量

有了上邊的幾個數據結構的表格,就可以進行真實的演練了

(1)所需資源表已分配資源表

這兩個數據結構相減,得到還需分配資源表,然後將還需分配資源表和可分配資源表進行對比

我們會發現,可分配資源表,不滿足進程P1的需求,因爲P1進程需要6個B資源、4個C資源、2個D資源,而可用的A、B、C、D資源分別只有1、5、2、0個,因此不滿足進程PA的需求。後邊的P2、P3、P4使用同樣的方法對比可發現,可分配資源表中的資源滿足P2的需求,不滿足P1、P3、P4的需求。因此,系統會把可分配的資源全部分發給P2,那麼這個P2進程就可以繼續的執行下去,等P2執行完之後,再歸還所有的資源,歸還之後,又可以將新的資源分配給別的進程。這個就是銀行家算法。(P1、P2、P3、P4可以看做貸款的人,數字代表貸款的錢)

在快速變化的技術中尋找不變,纔是一個技術人的核心競爭力。知行合一,理論結合實踐

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章