什麼是死鎖?

2021-09-10 01:15:32 字數 2686 閱讀 7017

所謂死鎖是指多個程序因競爭資源而相互等待,若無外力作用,這些程序都無法向前推進。

系統資源的競爭當不可剝得資源的數量不足以滿足程序的需要時,使得程序會因為爭得資源而陷入僵局

程序推進順序不當程序在執行過程中,請求和釋放資源的順序不當,也會造成死鎖。例如併發程序p1,p2

分別保持了資源r1,r2,而程序p1申請r2,同時程序p2申請r1

,兩者都會因為所需資源被佔而阻塞。訊號量使用不當也會造成死鎖。

產生死鎖必須滿足以下四個條件,缺一不可:

互斥條件乙個資源只能被乙個程序所占用,此時若其它程序請求該資源,則請求程序必須等待

不剝得條件程序使用的資源在未完成使用之前,不能被其它程序強行得走。

請求和保持條件乙個程序因為請求資源而阻塞時,對已獲資源保持不放

迴圈等待條件若干程序形成了一種頭尾相接環狀等待資源的關係

預防死鎖破壞死鎖產生的四個必要條件之一

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

死鎖檢測及解除通過系統檢測機構及時的檢測出死鎖的發生,然後採取某種策略解除死鎖

死鎖預防就是破壞死鎖產生的四個條件之一。

死鎖避免方法中,允許程序動態的申請資源,但是系統進行資源分配之前,應該先計算此資源的安全性。若此次分配不會導致系統進入不安全狀態,則將資源分配給程序,否則讓程序等待。

系統安全狀態所謂安全狀態是指系統能夠按照某種程序推進的順序(p1,p2,...,pn

)為每個程序pi分配其所需資源,直至滿足每個程序對資源的最大需求,使每個程序都可以勝利的完成。此時稱(p1,p2,...,pn)是安全序列。如果系統無法找到乙個安全序列,則系統處於不安全狀態。需要注意的是並非所有的不安全狀態都是死鎖狀態,但當系統進入不安全狀態後,便可能進入死鎖狀態;反之,只要系統處於安全狀態,系統便可以避免進入四鎖狀態。

雖然多個程序可以共享系統資源,但是其中許多資源一次只能被乙個程序使用,這種資源稱為臨界資源。將每乙個程序訪問臨界資源的那段**稱作臨界區,為了保證臨界資源正常使用,可以把臨界資源訪問分為四個部分:

進入區進入區檢查當前**是否可以進入臨界區,如果可以進入臨界區,則應該應該設定正在訪問臨界區的標誌,以阻止其它程序同時進入臨界區。

臨界區指程序訪問臨界資源的那段**。

退出區將正在訪問臨界區的標誌清除。

剩餘區**中的其餘部分。

為避免兩個程序同時進入臨界區,同步機制應該遵尋以下準則:

區分同步和互斥:同步稱作直接制約關係,它是指為了完成某種任務而建立的2個或者多個程序,這些程序因為要在某些位置上協調工作次序而等待、傳遞訊息所產生的制約關係。例如:寫程序a通過單緩衝區向讀程序b提供資料。當緩衝區為空時,程序b因為不能獲得資料而阻塞,一旦程序b將資料寫入緩衝區,程序b被喚醒,反之,當緩衝區滿時,程序a被阻塞,僅當b取走緩衝區資料時,才喚醒a。互斥稱作間接制約關係,它指當乙個程序進入臨界區時空,另乙個程序必須等待,當它退出臨界區時,另乙個程序才允許訪問臨界區。例如有一台列印裝置,有兩個程序a和b,如果a需要列印時,系統已經將印表機分配給b,則程序a必須阻塞,一段程序b將印表機釋放,系統便喚醒程序a,並將其阻塞狀態變為就緒狀態。

批處理系統中程序更多的被提交而不是馬上執行。這些程式放在大容量儲存裝置的緩衝池中。長期排程程式(作業排程程式)從該緩衝池中選擇程序並裝入記憶體準備執行。

短期排程程式(cpu排程程式)從準備執行的程序中選擇程序,並為它分配cpu。這兩個排程程式的主要差別是他們的執行頻率。一般i/o為主的程序比cpu為主的程序執行時間更長,長期排程程式應該合理的選擇以i/o為主和cpu為主的組合程序。

所謂程序排程方式是指當某乙個程序正在處理機上執行時,若有某個更為緊迫、重要的程序需要處理,即為有優先級別更高的程序進入佇列,此時該如何分配處理機。通常有兩種排程方法:

兩種排程方式的比較:非搶占式排程方法的優點是實現簡單、系統開銷小、適用於大多數的批處理程式,但是不可以用於分時系統和大多數的實時系統。採用搶占式排程方法可以提高系統的吞吐率和響應效率,但是必須遵尋一定的原則:優先權、短程序優先等。

不同排程演算法具有不同的特性,在考慮排程演算法的效能時,需要基本準則進行評價:

cpu利用率

系統吞吐量

周轉時間

等待時間

響應時間

該演算法對長作業不利,可能使得長作業長期不被排程,出現譏餓現象。

該演算法完全沒有考慮作業的緊迫程度,因而不能保證緊迫性的作業被及時處理。

sjf排程演算法的平均等待時間和平均周轉時間最少。

非搶占式優先順序排程演算法。

搶占式優先順序排程演算法。

如果時間片比較長,則時間片輪轉排程演算法就退化為fcfs排程演算法。

如果時間片比較短,那麼處理機將在程序間過於頻繁的切換,系統開銷很大。

什麼是死鎖

程序死鎖,它是作業系統或系統軟體執行的一種狀態 在多工系統下,當乙個或多個程序等待系統資源,而資源又被程序本身或其他程序占用時,就形成了死鎖。產生死鎖的原因 系統資源不足 程序執行推進的順序不合適 資源分配不當等。產生死鎖的四個必要條件 互斥條件 乙個資源每次只能被乙個程序使用 請求與保持條件 乙個...

什麼是死鎖

若干子執行緒在系統競爭時,都在等待對方對某部分資源解除占用狀態,結果是誰也不願意先解鎖,互相幹等著,程式無法執行下去 這就是死鎖 gil鎖直譯器鎖 作用 限制多執行緒同時執行,保證同一時間只有乙個執行緒執行,所以cpython裡的多執行緒其實是偽執行緒 所以python 裡常常使用協程技術來代替多執...

什麼是死鎖?

死鎖 產生原因 如執行緒a占有資源 1 的鎖,去競爭資源 2 的鎖 執行緒 b 占有資源 2 的鎖,去競爭資源1的鎖。如下 package constxiong.concurrency.a022 測試死鎖 author public class testdeadlock catch interrup...