首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >raw_spinlock是什么意思?

raw_spinlock是什么意思?
EN

Stack Overflow用户
提问于 2015-08-27 17:42:34
回答 1查看 3.8K关注 0票数 4

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

代码语言:javascript
复制
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是什么意思呢?

EN

回答 1

Stack Overflow用户

发布于 2015-09-21 10:34:32

spinlock

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

Documentation/locking/spinlocks.txt

raw_spinlock

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

参见LWN上的这篇文章

arch_spinlock

arch_spinlock是自旋锁实现中特定于平台的部分.raw_spinlock通常是独立于平台的,并将低级操作委托给arch_spinlock

lockdep_map

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

Documentation/locking/lockdep-design.txt

break_lock

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

这样可以同时存档两个目标:

  • 避免频繁的锁定/解锁;
  • 避免长期持有锁,防止他人获得锁。

另见这篇文章

magicownerowner_cpu

当设置CONFIG_SPINLOCK_DEBUG并帮助检测常见错误时,将启用这些字段:

  • 创建自旋锁时,magic被设置为任意选择的常量(SPINLOCK_MAGIC,即0xdead4ead)。
  • owner设置为spin_lock()中的当前进程;
  • owner_cpu设置为spin_lock()中的当前CPU id。

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

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

kernel/locking/spinlock_debug.c

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

https://stackoverflow.com/questions/32256085

复制
相关文章

相似问题

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