首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得Linux内核中锁的全局状态?

问如何获得Linux内核中锁的全局状态?
EN

Stack Overflow用户
提问于 2020-02-19 10:00:23
回答 1查看 422关注 0票数 1

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

EN

回答 1

Stack Overflow用户

发布于 2020-02-19 11:40:50

是的,内核绝对有能力跟踪当前持有的锁,但这很昂贵,而且只用于调试目的。您应该在启用调试的情况下配置和编译内核(特别是CONFIG_LOCKDEP,它还依赖于其他配置选项)。

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

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60297618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档