1 依賴鎖
關於依賴鎖的參考文件是 linux/Documentation/lockdep-design.txt。
致能器(validator)運作的基本物件是鎖類別,而鎖類別是一群應用於相同鎖規則的鎖的集合。
例如 inode 結構中的鎖就是一種鎖的類別,而 inode 可能會有上千個 inode 實例 (instantiation)。
核心透過依賴鎖的方式,處理物件的存取,因為在多工的環境中,任何物件的存取都有可能發生衝突,必須透過鎖的機制加以錯開。
致能器追蹤鎖類別的狀態和鎖類別之間的相依性,並輪流確認鎖類別的狀態和相依性是正確的。
鎖類別狀態:
致能器追蹤鎖類別的使用紀錄,分成 4n+1 個別狀態位元。
鎖的狀態多應用於保持狀態內文,做為狀態內文的讀取鎖,或應用於狀態致能,做為狀態致能鎖。
狀態可以是硬體中斷(hardirq)、軟體中斷(softirq)、取得檔案系統(reclaim_fs)。
當違反鎖規則時,就會將狀態位元值以大括號方式,顯示於鎖的錯誤訊息。
一個人為的錯誤例子是,當使用 modprobe 嘗試去取得一個鎖,而這個鎖卻已經被一個任務取得,此時就會產生鎖的違例。
此時就會產生如下面的訊息。
大括號內的符號定義是,小點 (.) 表示 IRQ 除能,並且不在 IRQ 內執行。
減號 (-) 表示 IRQ 除能,並且在 IRQ 內執行。
減號 (+) 表示 IRQ 致能,但不在 IRQ 內執行。
減號 (?) 表示 IRQ 致能,並且在 IRQ 內執行。
|