linux程序死鎖

2021-08-07 20:07:37 字數 904 閱讀 1067

死鎖 (deallocks): 是指兩個或兩個以上的程序(執行緒)在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序(執行緒)稱為死鎖程序(執行緒)。

(1) 互斥條件:乙個資源每次只能被乙個程序(執行緒)使用。

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

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

(4) 迴圈等待條件 : 多個程序(執行緒)之間形成一種頭尾相接的迴圈等待資源關係。

linux 提供了檢測死鎖的機制,主要分為 d 狀態死鎖和 r 狀態死鎖。

d 狀態死鎖程序等待 i/o 資源無法得到滿足,長時間(系統預設配置 120 秒)處於 task_uninterruptible 睡眠狀態,這種狀態下程序不響應非同步訊號(包括 kill -9)。如:程序與外設硬體的互動(如 read),通常使用這種狀態來保證程序與裝置的互動過程不被打斷,否則裝置可能處於不可控的狀態。對於這種死鎖的檢測 linux 提供的是 hung task 機制,mtk 也提供 hang detect 機制來檢測 android 系統 hang 機問題。觸發該問題成因比較複雜多樣,可能因為 synchronized_irq、mutex lock、記憶體不足等。d 狀態死鎖只是區域性多程序間互鎖,一般來說只是 hang 機、凍屏,機器某些功能沒法使用,但不會導致沒餵狗,而被狗咬死。

r 狀態死鎖程序長時間(系統預設配置 60 秒)處於 task_running 狀態壟斷 cpu 而不發生切換,一般情況下是程序關搶占或關中斷後長時候執行任務、死迴圈,此時往往會導致多 cpu 間互鎖,整個系統無法正常排程,導致餵狗執行緒無法執行,無法餵狗而最終看門狗復位的重啟。該問題多為原子操作,spinlock 等 cpu 間併發操作處理不當造成。

oracle 程序死鎖

oracle 程序死鎖 select b.owner,b.object name,a.session id,a.locked mode from v locked object a,dba objects b where b.object id a.object id select b.userna...

C 程序死鎖

所謂死鎖 是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。由於資源占用是互斥的,當某個程序提出申請資源後,使得有關程序在無外力協助下,永遠分配不到必需的資源而...

程序的死鎖

產生死鎖的四個條件同時具備 互斥條件 不可搶占條件 占有且申請條件 迴圈等待條件 為什麼會有死鎖 若干程序競爭 有限資源,又 推進順序不當,從而構成無限迴圈等待的局面,這種狀態叫做死鎖。所謂死鎖是指多個程序迴圈等待它方占有的資源而無限期的僵持下去的局面。死鎖原因 一種原因是系統提供的資源太少,遠不能...