gpt4 book ai didi

linux - raw_spinlock 是什么意思?

转载 作者:IT王子 更新时间:2023-10-29 00:34:13 27 4
gpt4 key购买 nike

我正在研究 raw_spinlock 结构,它在 /usr/src/linux/include/linux/spinlock_types.h 中:

typedef struct raw_spinlock {
arch_spinlock_t raw_lock;
#ifdef CONFIG_GENERIC_LOCKBREAK
unsigned int break_lock;
#endif
#ifdef CONFIG_DEBUG_SPINLOCK
unsigned int magic, owner_cpu;
void *owner;
#endif
#ifdef CONFIG_DEBUG_LOCK_ALLOC
struct lockdep_map dep_map;
#endif
} raw_spinlock_t;

我认为raw_lock 是一种依赖架构的锁,dep_map 是一种避免死锁的数据结构,但是break_lockmagicowner_cpu*owner 是什么意思?

最佳答案

自旋锁

spinlock 是内核代码中用于自旋锁的公共(public) API。

参见 Documentation/locking/spinlocks.txt .

原始自旋锁

raw_spinlock 是普通自旋锁的实际实现。在非 RT 内核上,spinlock 只是 raw_spinlock 的包装器。在 RT 内核上,spinlock 并不总是使用 raw_spinlock

参见 this article在 LWN 上。

arch_spinlock

arch_spinlock 是自旋锁实现的平台特定部分。 raw_spinlock 通常与平台无关,并将低级操作委托(delegate)给 arch_spinlock

lockdep_map

lockdep_map 是用于锁定正确性验证器的依赖映射。

参见 Documentation/locking/lockdep-design.txt .

破解锁

在 SMP 内核上,当一个 CPU 上的 spin_lock() 开始循环而另一个 CPU 上持有锁时,它将此标志设置为 1。持有锁的另一个 CPU 可以使用 spin_is_contended() 定期检查此标志,然后调用 spin_unlock()

这允许同时归档两个目标:

  • 避免频繁上锁/解锁;
  • 避免长时间持有锁,防止他人获取锁。

另见 this article .

魔法, owner, owner_cpu

这些字段在设置 CONFIG_SPINLOCK_DEBUG 时启用,有助于检测常见错误:

  • magic 在创建自旋锁时设置为一些随机选择的常量(SPINLOCK_MAGIC0xdead4ead)
  • ownerspin_lock() 中设置为当前进程;
  • owner_cpuspin_lock() 中设置为当前 CPU id。

spin_unlock() 检查当当前进程和 CPU 与调用 spin_lock() 时相同时调用它。

spin_lock() 检查 magic 是否等于 SPINLOCK_MAGIC 以确保调用者传递了指向正确初始化自旋锁的指针并且(希望)没有发生内存损坏。

参见 kernel/locking/spinlock_debug.c .

关于linux - raw_spinlock 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32256085/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com