程序管理 十二 死鎖

2021-10-02 13:03:46 字數 2048 閱讀 8027

死鎖,是指各併發程序彼此互相等待對方所擁有的資源,且這些併發程序在得到對方的資源之前不會釋放自己所擁有的資源。從而造成大家都想得到資源而又都得不到資源,各併發程序不能繼續向前推進的狀態。

以生產者/消費者問題為例來看死鎖的概念。

設生產者程序已獲得對緩衝區佇列的操作權,但此時緩衝佇列內所有緩衝區都是滿的,因此生產者程序進入等待狀態。

消費者程序此時申請對緩衝佇列操作的操作權。但由於生產者程序掌握緩衝佇列的操作權且不會自動釋放它,從而消費者程序也進入等待狀態。

因而陷入死鎖。

併發程序p1, p2, … , pn,它們共享資源r1, r2, …, rm(n>0,m>0,n>=m)。其中,每個pi(1≤i≤n)擁有資源rj(1 ≤j ≤m),直到不再有剩餘資源。同時,各pi又在不釋放rj 的前提下要求得到rk(k≠j,1 ≤k≤m),從而造成資源的互相占有和互相等待。

在沒有外力驅動的情況下,該組併發程序停止往前推進,陷入永久等待狀態。

死鎖的起因是併發程序的資源競爭。

產生死鎖的根本原因在於系統提供的資源個數少於併發程序所要求的該類資源數。

需要適當的資源分配演算法,以消除死鎖

併發程序所要求和占有的資源不能同時被兩個以上程序使用或操作,程序對需要的資源進行排他性控制。

不剝奪條件。程序獲得的資源在未使用完畢之前,不能被其他程序強行剝奪,只能由獲得該資源的程序自己釋放

部分分配。程序每次申請它所需要的一部分資源,在等待新資源的同時繼續占用已分配到的資源。

環路條件。存在一種程序迴圈鏈,鏈中每乙個程序已獲得的資源同時被下乙個程序所請求。

預防是採用某種策略,限制併發程序對資源的請求,從而使得死鎖的必要條件在系統執行的任何時間都不滿足。

1.一種方法是打破資源的互斥和不可剝奪這兩個條件

例如允許程序同時訪問某些資源等。

缺點:這種方法不能解決訪問那些不允許被同時訪問的資源時所帶來的死鎖問題

2.打破資源的部分分配這個死鎖產生的必要條件

即預先分配各併發程序所需要的全部資源。如某個程序的資源得不到滿足時,則安排一定的等待次序讓其他程序釋放資源。

缺點:

(1)在許多情況下,乙個程序在執行之前不可能提出它所需要的全部資源。

(2) 無論所需資源何時用到,乙個程序只有在所有要求資源都得到滿足之後才開始執行。

(3) 對於那些不經常使用的資源,程序在生存過程期間一直占用它們是一種極大的浪費。

(4) 降低了程序的併發性。

3.打破死鎖的環路條件

即把資源分類按順序排列,使程序在申請、保持資源時不形成環路。

如有m種資源,則列出r1<r2<…<rm。若程序pi保持了資源ri,則它只能申請比ri級別更高的資源rj(ri <rj )。釋放資源時必須是rj先於ri被釋放,從而避免環路的產生。

缺點:限制了程序對資源的請求,而且對資源的分類編序也耗去一定的系統開銷。

概述:死鎖避免採用動態分配資源,在分配過程中**出死鎖發生的可能性並加以避免,也稱為動態預防。

基本模式:把程序分為多個步,其中每個步所使用的資源是固定的,且在乙個步內,程序所保持的資源數不變。即程序的資源請求、使用與釋放要依靠不同的步完成。

死鎖檢測與恢復是指系統設有專門的機構,當死鎖發生時,該機構能夠檢測到死鎖發生的位置和原因,並能通過外力破壞死鎖發生的必要條件,從而使得併發程序從死鎖狀態中恢復出來。

死鎖檢測:

當程序進行資源請求時死鎖檢測演算法檢查併發程序組是否構成資源的請求和保持環路

判斷方法:

1.有限狀態轉移圖

2.petrinet

恢復方法:

1.終止各鎖住程序,或按一定的順序中止程序序列,直至已釋放到有足夠的資源來完成剩下的程序時為止。

2.從被鎖住程序強迫剝奪資源以解除死鎖。

程序管理 程序的死鎖

環路等待條件又叫迴圈等待條件 迴圈等待條件,請求和保持條件,互斥條件,不可剝奪條件。只要保證任何時刻產生死鎖的四個條件至少有乙個不成立,就可以起到預防死鎖的目的。即允許程序同時訪問某些資源,這樣就沒有資源的互斥使用問題了。但是,有的資源是不允許被同時訪問的,像印表機等等,這是資源本身的屬性。可以實行...

程序管理之死鎖

前面兩篇部落格 1.程序同步之臨界區域問題及peterson演算法 2.程序同步之訊號量機制 pv操作 及三個經典同步問題 介紹了程序管理中程序同步的諸多問題,下面為大家詳細解讀程序管理中死鎖的問題及其解決方案。在多道程式設計環境下,多個程序可能競爭一定數量的資源。乙個程序申請資源,如果資源不可用,...

作業系統 程序管理 概念 死鎖

死鎖 死鎖的原因 1 因為系統資源不足。2 程序執行推進的順序不合適,保證有先後順序。3 資源分配不當等。死鎖的必要條件.產生死鎖的四個必要條件 1 互斥條件 乙個資源每次只能被乙個程序使用。2 請求與保持條件 乙個程序因請求資源而阻塞時,對已獲得的資源保持不放。3 不剝奪條件 程序已獲得的資源,在...