本文主要是介绍RCU机制实现原理分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.经典不可睡眠RCU
rcu_read_lock 用于reader进入RCU读临界区,经典RCU的读临界区线程是不能睡眠的,rcu_read_lock的实现仅仅是关了一下抢占
经典RCU算法实现如下:
1.等待宽限期的写着,注册一个callback,到per-cpu链表
2.在一个合适时间点,通知所有CPU.开始统计宽限期
3.每个CPU收到通知后,将自己的静默统计次数和快照保存
4.每个CPU周期,对比当前静默太次数和快照值,如果一致表示没有进入静默期,如果不同,表示当前CPU进入了静默太,记录下来.当所有的CPU都经历过此次静默期,表示宽限期结束
5.每个CPU的宽限期结束,触发当前CPU上注册的相关callback.
为什么经典RCU,临界区不能睡眠,
如果临界区睡眠,相当于进入了静默期,但RCU宽限期统计中不允许有静默太出现在读临界区内,
否则会照成宽限期无限延长,对于同一个CPU上的写者,宽限期结束的callback是随机的,也就是说一个CPU上的写者可以多次注册宽限期结束后的callback,如果在宽限期无限延长,CPU上的callback无限注册,会导致内存资源的耗尽然后崩溃
2.实时系统中的可睡眠SRCU
这篇关于RCU机制实现原理分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!