linux kernel synchronization

本文介绍了内核中的自旋锁实现原理,包括基于汇编指令的原子性和内存操作保证。此外,还探讨了RCU机制中如何确保所有读操作完成的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

atomic_t and spin_lock are implemented on the base of lock prefix of assembly.

 

#define spin_lock_string /

"/n1:/t" / "lock ; decb %0/n/t" / "jns 3f/n" / "2:/t" / "rep;nop/n/t" / "cmpb $0,%0/n/t" / "jle 2b/n/t" / "jmp 1b/n" / "3:/n/t"

above code is spin_lock of kernel. The third line uses the lock prefix and atomic operation on memory is guaranteed.

 

#define spin_unlock_string /

"movb $1,%0" /

:"=m" (lock->slock) : : "memory"

上面这段代码是内核的spin_lock的解锁代码,使用的是只写指令,而现在的x86中,内存只写指令本身就是原子操作,所以不必加lock前缀。

 

RCU:

内核怎么知道所有的读者都完成了读操作?

RCU读者是不允许阻塞,切换到用户模式和进入idle状态,所以如果以上三种状态发生,就可以说明读者都完成了读操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值