死鎖是指兩個或多個進程因爭奪資源而造成的互相等待的現象,如進程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模塊已經生效:

然后重新編譯內核,更換內核重啟系統。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
內核
+關注
關注
4文章
1467瀏覽量
42870 -
Linux
+關注
關注
88文章
11758瀏覽量
219006 -
死鎖
+關注
關注
0文章
25瀏覽量
8322
發布評論請先 登錄
相關推薦
熱點推薦
Linux內核的作用
Linux操作系統是當今世界上最為廣泛使用的開源操作系統之一,內核則是一個操作系統的核心和靈魂所在。對于一名Linux驅動開發者來說,了解Linux
發表于 07-06 11:46
?2334次閱讀
【學習打卡】OpenHarmony的linux內核介紹
能得到了提高。Linux 內核管理操作系統資源,確保有足夠的內存可供應用程序運行,優化處理器使用,并避免由競爭應用程序需求導致的系統死鎖。Linux
發表于 07-22 18:26
linux處理機調度與死鎖
linux處理機調度與死鎖
掌握處理機的三級調度
掌握作業調度及進程調度的概念
理解調度算法的評價準則
掌握并靈活運用常用的幾種作業調度、
發表于 04-28 14:59
?0次下載
用crash工具分析Linux內核死鎖的一次實戰分享
內核死鎖問題一般是讀寫鎖(rw_semaphore)和互斥鎖(mutex)引起的,本文主要講如何通過ramdump+crash工具來分析這類死鎖問題。
如何配置和使用Linux內核printk功能
了解如何配置和使用Linux內核printk功能,包括其動態調試功能。
這樣可以選擇性地打印調試消息,而無需重新編譯內核。
Linux 5.4內核正式版本有哪些新功能
今天,Linus Torvalds正式簽署了Linux 5.4內核的正式版本,帶來了大量新功能,強化了安全,更新了硬件驅動,你值得擁有。
linux內核是什么_linux內核學習路線
Linux內核是一個操作系統(OS)內核,本質上定義為類Unix。它用于不同的操作系統,主要是以不同的Linux發行版的形式。Linux
發表于 09-16 15:49
?3147次閱讀
Linux內核中簡單的AB-BA死鎖案例
簡單的AB-BA死鎖案例 下面舉一個簡單的AB-BA死鎖的例子: # include # include # include static DEFINE_SPINLOCK (hack_spinA
Linux內核實際項目中的死鎖
實際項目中的死鎖 下面的例子要復雜一些,這是從實際項目中抽取出來的死鎖,更具有代表性。 # include # include # include # include # include
Linux內核死鎖lockdep功能
評論