c-如何在Linux内核中获得锁的全局状态



我正在为Linux内核编写一些代码,我注意到当我需要启用中断时,中断会被禁用,以便进程可以处理信号。如果我能获得系统中当前持有的所有锁的列表,那就太棒了,因为我怀疑某个地方的锁已经禁用了中断。。。这是,假设是一个锁禁用了中断。如果没有,也很高兴知道是怎么做到的(或在哪里(。Linux内核对此有记录吗?

是的,内核肯定能够跟踪当前持有的锁,但这很昂贵,而且只用于调试目的。您应该在启用调试的情况下配置和编译内核(特别是CONFIG_LOCKDEP,它也取决于其他配置选项(。

完成后,在struct task_struct中有各种字段,如lockdep_depth(当前持有的锁的数量(和held_locks(代表当前持有的锁定的struct held_lock数组(,这些字段可能对您有用。当模块运行时,您可以检查current任务的这些字段,以了解发生了什么

看看kernel/locking/lockdep.c中的两个私有函数lockdep_print_held_locks()print_lock(),看看如何从这些struct held_lock中提取有用的信息。您还可以使用kgdb内核调试器来专门查看内核代码运行时发生的情况。

最新更新