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

【學習打卡】OpenHarmony的linux內核介紹
linux處理機調度與死鎖
用crash工具分析Linux內核死鎖的一次實戰分享

如何配置和使用Linux內核printk功能
Linux 5.4內核正式版本有哪些新功能
linux內核是什么_linux內核學習路線
Linux內核中簡單的AB-BA死鎖案例

Linux內核實際項目中的死鎖

評論