内核同步原语

来源:互联网 发布:淘宝待揽件是什么意思 编辑:程序博客网 时间:2024/05/19 12:11

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

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

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

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

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

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

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

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

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


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

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


原创粉丝点击