4.1鎖的狀態(tài)
要想理解到linux系統(tǒng)描述文件file的結構體中包含有一個與rcu相關的結構體,rcu_head。學習文件結構體的思路很簡單,就是按圖索驥,把一步一步把文件結構的依賴項以及依賴項的依賴項研究到位。先在遇到的問題是rcu的數(shù)據(jù)組成中包含有自旋鎖的數(shù)據(jù)spinlock_t,而可以做的就是翻查源碼和手冊,嘗試把這一塊勝利拼圖拼接好。
那先從一般的鎖開始吧。
鎖的功能的實現(xiàn)是和鎖的檢驗器(validator)密不可分的,沒有對鎖的校驗,鎖就無所謂的意義。而校驗的結果則是在校驗真確的時候有條件觸發(fā)函數(shù)服務,而在校驗虛假的時候沒有條件出發(fā)函數(shù)服務。而對鎖的看法,往往是來源于校驗器如何對鎖產(chǎn)生觀念和理解。
在linux中鎖的狀態(tài)的編碼有4*2+2種。其中4*2的4則是指鎖的四個狀態(tài):它們的編碼分別為 ".""-""+""?"
=== ===================================================
'.' acquired while irqs disabled and not in irq context
##獲得"."當中斷未被使能而且不在中斷條件中
'-' acquired in irq context
##獲得"."處于中斷環(huán)境
'+' acquired with irqs enabled
##獲得"+"處于中斷使能
'?' acquired in irq context with irqs enabled.
##獲得"?"處于中斷條件并有著中斷使能
=== ===================================================
而4*2中的2則是指來自硬件的中斷和來自軟件的中斷
LOCKDEP_STATE(HARDIRQ)
LOCKDEP_STATE(SOFTIRQ)
最后的兩個2則為 USED和USED_READ
它們分別體現(xiàn)了兩種來源的鎖處于的各種不同狀態(tài)的表述,這些都是校驗器對鎖的狀態(tài)的闡述,雖然現(xiàn)在對校驗器的具體機制沒有任何信息,但是這對鎖來說確實一個很好的內(nèi)容擴充。