Linux内核的同步机制是什么?主要有哪几种内核锁

Linux内核的同步机制是什么?主要有哪几种内核锁,第1张

从最初的原子 *** 作,到后来的信号量,从大内核锁到今天的自旋锁。这些同步机制的发展伴随Linux从单处理器到对称多处理器的过渡;

伴随着从非抢占内核到抢占内核的过度。Linux的锁机制越来越有效,也越来越复杂。

Linux的内核锁主要是自旋锁和信号量。

自旋锁最多只能被一个可执行线程持有,如果一个执行线程试图请求一个已被争用(已经被持有)的自旋锁,那么这个线程就会一直进行忙循环——旋转——等待锁重新可用。要是锁未被争用,请求它的执行线程便能立刻得到它并且继续进行。自旋锁可以在任何时刻防止多于一个的执行线程同时进入临界区。

Linux中的信号量是一种睡眠锁。如果有一个任务试图获得一个已被持有的信号量时,信号量会将其推入等待队列,然后让其睡眠。这时处理器获得自由去执行其它代码。当持有信号量的进程将信号量释放后,在等待队列中的一个任务将被唤醒,从而便可以获得这个信号量。

顺序锁(seqlock)是对读写锁的一种优化,若使用顺序锁,读执行单元不会被写执行单元阻塞,也就是说,读执行单元在写执行单元对被顺序锁保护的共享资源进行写 *** 作时仍然可以继续读,而不必等待写执行单元完成写 *** 作,写执行单元也不需要等待所有读执行单元完成读 *** 作才去进行写 *** 作。但是,写执行单元与写执行单元之间仍然是互斥的,即如果有写执行单元在进行写 *** 作,其他写执行单元必须自旋在那里,直到写执行单元释放了顺序锁。对于顺序锁而言,尽管读写之间不互相排斥,但是如果读执行单元在读 *** 作期间,写执行单元已经发生了写 *** 作,那么,读执行单元必须重新读取数据,以便确保得到的数据是完整的。所以,在这种情况下,读端可能反复读多次同样的区域才能读到有效的数据。

在Linux内核中,写执行单元涉及的顺序锁 *** 作如下。

1.获得顺序锁2.释放顺序锁

对写执行单元而言,它的使用与自旋锁相同。读执行单元涉及的顺序锁 *** 作如下。

1.读开始 2.重读


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8965727.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-23
下一篇 2023-04-23

发表评论

登录后才能评论

评论列表(0条)

保存