繁体   English   中英

如何在 Linux 内核中获取锁的全局状态?

[英]How to get a global state of the locks in Linux kernel?

我正在为 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 内核调试器来专门查看内核代码运行时发生的情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM