死鎖核心概念

死鎖核心概念

1.什麼是死鎖

在多個併發進程中,互相佔用對方資源,

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

產生條件

如果在一個系統中以下四個條件同時成立,那麼就能引起死鎖:

(1) 互斥條件:一個資源每次只能被一個進程使用。

(2) 請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。

(3) 不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。

(4) 循環等待條件:若干進程之間形成一種頭尾相接的循環等待資源關係。

我們強調所有四個條件必須同時成立纔會出現死鎖。循環等待條件意味着佔有並等待條件,這樣四個條件並不完全獨立。

解決死鎖的策略

  • 採用靜態資源分配方法 -----預防死鎖
  • 採用有控資源分配方法 -----避免死鎖
  • 死鎖的檢測與忽略

處理死鎖的思路如下:

預防死鎖:破壞四個必要條件中的一個或多個來預防死鎖

避免死鎖:在資源動態分配的過程中,用某種方式防止系統進入不安全的狀態。

檢測死鎖:運行時產生死鎖,及時發現死鎖,將程序解脫出來。

解除死鎖:發生死鎖後,撤銷進程,回收資源,分配給正在阻塞狀態的進程。

在這裏插入圖片描述

預防死鎖的辦法:

破壞請求和保持條件:1.一次性的申請所有資源。之後不在申請資源,如果不滿足資源條件則得不到資源分配。2.只獲得初期資源運行,之後將運行完的資源釋放,請求新的資源。

破壞不可搶佔條件:當一個進程獲得某種不可搶佔資源,提出新的資源申請,若不能滿足,則釋放所有資源,以後需要,再次重新申請。

破壞循環等待條件:對資源進行排號,按照序號遞增的順序請求資源。若進程獲得序號高的資源想要獲取序號低的資源,就需要先釋放序號高的資源。

死鎖的解除辦法:

1、搶佔資源。從一個或多個進程中搶佔足夠數量的資源,分配給死鎖進程,以解除死鎖狀態。

2、終止(撤銷)進程:將一個或多個死鎖進程終止(撤銷),直至打破循環環路,使系統從死鎖狀態解脫

銀行家算法

爲銀行發放現金貸款時不會發生不能滿足客戶需要的情況,後續用在操作系統中避免死鎖

核心思想:

如果進程提出資源申請時,這次分配會導致系統不安全,就暫時不答應,讓它先等着

一共10個資源

進程 已佔用 還需 可分配
p1 4 4 X
p2 2 2
p3 2 7 X

因爲如果剩下兩個資源不分配給p2,也是不足緩解p1和p3的壓力和貪心,還是會導致線程阻塞,

所以先給滿足的,而且安全的人,然後它用完就會歸還

這時候歸還了,系統資源剩4個

進程 已佔用 還需 可分配
p1 4 4
p2 0 0 無需分配
p3 2 7 X

這樣就分配給p1 4個資源,再歸還,就有8個資源,完全滿足p3的需要

這個有點像貪心的分支,誰滿足就給誰,然後繼續算剩下的

ps:每一輪都是從序號小的進程開始檢查分配**

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