RCU看了好几遍,但是一直没有看明白,今明两天一定要攻下RCU这座大山
RCU是Read-Copy-Update
读的时候,该CPU上禁止抢占,也就是说这个CPU是不允许调度的【是设置了什么环境变量吗?在schedule_tick中会判断这个环境变量,然后会禁止去设置PREET的值】,也就是说这个CPU上仍然会相应中断,但是,so sorry,无论时钟中断怎么来,怎么更新我这个进程的执行时间,但是我仍然是不会让出CPU的。
那除了禁止抢占之外,还需要表明这个CPU目前正处于questience期呀,现在
文档中说RCU的一套核心的思想是:1)阻止读者看到将要被销毁的数据;2)完成真正的销毁工作;、
比如从一个链表中把一个节点给去掉,那么
rcu的读者不需要任何的锁,不需要施加任何的原子操作、写任何的变量到内存中去,也不需要执行任何的内存屏障的操作,
同spinlock一样,rcu并不允许读者被block住,不允许一直死循环,也不允许进程被调度出去让用别的用户态去执行。因此,一旦一个CPU被检测到没有出现上述的三种情况,那么我们就认为这个CPU已经安全地出了上述的RCU的critial area,
实现方法是一个CPU本地的RCU的计数器
什么叫做实时的操作系统,是说规定了一个任务的deadline,在某个时间点上一定要完成
时间: 2024-11-06 00:03:15