死鎖是指兩個(gè)或多個(gè)進(jìn)程因爭(zhēng)奪資源而造成的互相等待的現(xiàn)象,如進(jìn)程A需要資源X,進(jìn)程B需要資源Y,而雙方都掌握對(duì)方所需要的資源,且都不釋放,這會(huì)導(dǎo)致死鎖。
在內(nèi)核開發(fā)中,時(shí)常要考慮并發(fā)設(shè)計(jì),即使采用正確的編程思路,也不可能避免會(huì)發(fā)生死鎖。在Linux內(nèi)核中,常見(jiàn)的死鎖有如下兩種:
遞歸死鎖:如在中斷延遲操作中使用了鎖,和外面的鎖構(gòu)成了遞歸死鎖。
AB-BA死鎖:多個(gè)鎖因處理不當(dāng)而引發(fā)死鎖,多個(gè)內(nèi)核路徑上的鎖處理順序不一致也會(huì)導(dǎo)致死鎖。
Linux內(nèi)核在2006年引入了死鎖調(diào)試模塊lockdep,lockdep會(huì)跟蹤每個(gè)鎖的自身狀態(tài)和各個(gè)鎖之間的依賴關(guān)系,經(jīng)過(guò)一系列的驗(yàn)證規(guī)則來(lái)確保鎖之間依賴關(guān)系是正確。
配置內(nèi)核要在Linux內(nèi)核中使用lockdep功能,需要打開CONFIG_DEBUG_LOCKDEP選項(xiàng):
CONFIG_LOCK_STAT=yCONFIG_PROVE_LOCKING=yCONFIG_DEBUG_LOCKDEP=y

在proc目錄下會(huì)有l(wèi)ockdep、lockdep_chains和lockdep_stats三個(gè)文件節(jié)點(diǎn),這說(shuō)明lockdep模塊已經(jīng)生效:

然后重新編譯內(nèi)核,更換內(nèi)核重啟系統(tǒng)。
-
內(nèi)核
+關(guān)注
關(guān)注
4文章
1436瀏覽量
42470 -
Linux
+關(guān)注
關(guān)注
88文章
11622瀏覽量
217828 -
死鎖
+關(guān)注
關(guān)注
0文章
25瀏覽量
8295
發(fā)布評(píng)論請(qǐng)先 登錄
Linux內(nèi)核的作用
【學(xué)習(xí)打卡】OpenHarmony的linux內(nèi)核介紹
Linux的內(nèi)核教程
linux處理機(jī)調(diào)度與死鎖
用crash工具分析Linux內(nèi)核死鎖的一次實(shí)戰(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)核中簡(jiǎn)單的AB-BA死鎖案例
Linux內(nèi)核實(shí)際項(xiàng)目中的死鎖
Linux內(nèi)核測(cè)試技術(shù)

Linux內(nèi)核死鎖lockdep功能
評(píng)論