内核同步原语

最好的内核同步手段是不需要同步。

对于SMP系统,如果数据结构可以设计为每cpu变量,将最有效的避免cpu间的同步。

原子锁要求一些寄存器读写动作采用automic_t型变量,并在单条指令内完成,并对该指令加automic锁,提供了对单一寄存器的访问保护。

自旋锁用在保护SMP下各cpu间的同步,等待锁的进程会空转直到获取到锁,对系统效率会造成一定的影响。

读写锁可以保护一段临界区的数据,其原理是允许并发的读,但是只能有一个进程在写,并且写期间不允许其它进程读。

顺序锁是对读写锁的改进,允许并发的读和写,不过为了确保读的有效性,读的操作完成后,读进程要再次确认数据是否发生更新,如果有更新,则不得不丢弃改数据重读。

RCU机制允许并发的读写操作而不使用锁,其原理对内存的访问采用指针,改写数据就是改写指针指向的地址,在读进程访问旧数据时,写进程建立一份新数据的内存并将指针指向改内存,在确信读进程已经读完的情况下,释放掉旧数据,后面的读访问都将引用新内存。

信号量类似于自旋锁,区别在于等待的进程会挂起而不是空转。信号量的等待队列严格遵从FIFO调度。

通过禁止本地中断和禁止可延迟函数,可以有效保护包含这类内核控制路径的数据结构。这类禁止加上自旋锁便可以同时保护好多cpu内核控制路径访问的数据结构。


内核如果使用了锁原语来保护数据,就应该同时禁止内核抢占。

在访问每cpu变量时,也需要禁止内核抢占。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值