4.1锁的状态
要想理解到linux系统描述文件file的结构体中包含有一个与rcu相关的结构体,rcu_head。学习文件结构体的思路很简单,就是按图索骥,把一步一步把文件结构的依赖项以及依赖项的依赖项研究到位。先在遇到的问题是rcu的数据组成中包含有自旋锁的数据spinlock_t,而可以做的就是翻查源码和手册,尝试把这一块胜利拼图拼接好。
那先从一般的锁开始吧。
锁的功能的实现是和锁的检验器(validator)密不可分的,没有对锁的校验,锁就无所谓的意义。而校验的结果则是在校验真确的时候有条件触发函数服务,而在校验虚假的时候没有条件出发函数服务。而对锁的看法,往往是来源于校验器如何对锁产生观念和理解。
在linux中锁的状态的编码有4*2+2种。其中4*2的4则是指锁的四个状态:它们的编码分别为 ".""-""+""?"
=== ===================================================
'.' acquired while irqs disabled and not in irq context
##获得"."当中断未被使能而且不在中断条件中
'-' acquired in irq context
##获得"."处于中断环境
'+' acquired with irqs enabled
##获得"+"处于中断使能
'?' acquired in irq context with irqs enabled.
##获得"?"处于中断条件并有着中断使能
=== ===================================================
而4*2中的2则是指来自硬件的中断和来自软件的中断
LOCKDEP_STATE(HARDIRQ)
LOCKDEP_STATE(SOFTIRQ)
最后的两个2则为 USED和USED_READ
它们分别体现了两种来源的锁处于的各种不同状态的表述,这些都是校验器对锁的状态的阐述,虽然现在对校验器的具体机制没有任何信息,但是这对锁来说确实一个很好的内容扩充。