死鎖是指兩個或多個進程因爭奪資源而造成的互相等待的現(xiàn)象,如進程A需要資源X,進程B需要資源Y,而雙方都掌握對方所需要的資源,且都不釋放,這會導(dǎo)致死鎖。
在內(nèi)核開發(fā)中,時常要考慮并發(fā)設(shè)計,即使采用正確的編程思路,也不可能避免會發(fā)生死鎖。在Linux內(nèi)核中,常見的死鎖有如下兩種:
遞歸死鎖:如在中斷延遲操作中使用了鎖,和外面的鎖構(gòu)成了遞歸死鎖。
AB-BA死鎖:多個鎖因處理不當(dāng)而引發(fā)死鎖,多個內(nèi)核路徑上的鎖處理順序不一致也會導(dǎo)致死鎖。
Linux內(nèi)核在2006年引入了死鎖調(diào)試模塊lockdep,lockdep會跟蹤每個鎖的自身狀態(tài)和各個鎖之間的依賴關(guān)系,經(jīng)過一系列的驗證規(guī)則來確保鎖之間依賴關(guān)系是正確。
配置內(nèi)核要在Linux內(nèi)核中使用lockdep功能,需要打開CONFIG_DEBUG_LOCKDEP選項:
CONFIG_LOCK_STAT=yCONFIG_PROVE_LOCKING=yCONFIG_DEBUG_LOCKDEP=y
在proc目錄下會有l(wèi)ockdep、lockdep_chains和lockdep_stats三個文件節(jié)點,這說明lockdep模塊已經(jīng)生效:
然后重新編譯內(nèi)核,更換內(nèi)核重啟系統(tǒng)。
-
內(nèi)核
+關(guān)注
關(guān)注
3文章
1416瀏覽量
41465 -
Linux
+關(guān)注
關(guān)注
87文章
11512瀏覽量
213915 -
死鎖
+關(guān)注
關(guān)注
0文章
25瀏覽量
8210
發(fā)布評論請先 登錄
Linux內(nèi)核的作用

【學(xué)習(xí)打卡】OpenHarmony的linux內(nèi)核介紹
Linux的內(nèi)核教程
linux處理機調(diào)度與死鎖
用crash工具分析Linux內(nèi)核死鎖的一次實戰(zhàn)分享

如何配置和使用Linux內(nèi)核printk功能
Linux 5.4內(nèi)核正式版本有哪些新功能
linux內(nèi)核是什么_linux內(nèi)核學(xué)習(xí)路線
linux內(nèi)核參數(shù)設(shè)置_linux內(nèi)核的功能有哪些

最硬核的Linux內(nèi)核文章

快速理解什么是Linux內(nèi)核以及Linux內(nèi)核的內(nèi)容

Linux內(nèi)核中簡單的AB-BA死鎖案例

Linux內(nèi)核實際項目中的死鎖

Linux內(nèi)核測試技術(shù)

評論