我正在尝试分析Linux内核的核心转储中的自旋锁变量。在互斥锁的情况下,如果互斥锁被锁定,则count变量的值应为0.在自旋锁的情况下,spinlock_t my_lock具有类似
的字段(struct raw_spinlock) rlock
(arch_spinlock_t) raw_lock
(unsigned int) lock
(unsigned int) break_lock
整数变量的值为0.如果锁定,那么这些值是否会有不同的值?有没有其他方法来检查旋转锁定变量的转储,看看它是否被采取?价值架构是否依赖?
答案 0 :(得分:0)
尝试使用spin_is_locked()
(在spinlock.h中定义)
答案 1 :(得分:0)
在调用die()之后,我收集了一个核心转储并检查了die_lock spinlock变量的状态,当die()发生时,它被锁定在traps.c中。在锁定的情况下,lock的值为1。这给了一些清晰度。
但是也存在大整数值的锁。仍在努力解决这个问题。
答案 2 :(得分:0)
如果采取锁定,它将具有不同的值。您可以使用代码中的spin_is_locked()进行检查。 但是在分析dump时,请检查spin_lock()的实现方式。它将提供有关如何检查和获取锁的信息。当然,spin_lock()是依赖于体系结构的代码,但逻辑仍然相同。