linux内核同步机制----rcu

linux内核同步机制----rcu

ID:19577559

大小:656.00 KB

页数:28页

时间:2018-10-03

linux内核同步机制----rcu_第1页
linux内核同步机制----rcu_第2页
linux内核同步机制----rcu_第3页
linux内核同步机制----rcu_第4页
linux内核同步机制----rcu_第5页
资源描述:

《linux内核同步机制----rcu》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、Linux内核同步机制----RCUwjcdx@qq.comRCU的代码极其复杂,主要文件包括:include/linux/rcupdate.hkernel/rcutree.hkernel/rcutree.c等主要数据结构:rcu_state/rcu_data/rcu_head等wangjianchangdx 2011-07-0623:10在read,copy,update之后,就是要回收旧的数据了,call_cpu(rcu_head,call_back_func)跟踪call_back_func的注册,call_back_func被赋值进入rcu_head,rcu_head被加入rcu_

2、data的nxttail链表rcu_data是per-cpuvariable,rcu_state.rda[]保存rcu_data指针wangjianchangdx 2011-07-0623:13__call_cpu函数结构:前半部分,等宽限期(graceperiod)结束,并开启一个gp;后面是强制静止时间的操作;rcu要考虑到irq/nmi等(fromlwn)wangjianchangdx 2011-07-0623:23跟着call_backfunc走,所有的操作都在rcutree.c中定义,可以索引到大部分的rcu初始化,更新,invoke机制,这是旧数据结构回收的主要任务。wangj

3、ianchangdx 2011-07-0623:27kernel/rcutree.c:rcu_init()初始化rcu机制,在系统启动时的start_kernel中被调用这么长时间都像无头苍蝇一样乱撞,自己认真想一下,找到主线也就好了wangjianchangdx 2011-07-0623:31Document/RCU中有一些描述,其中whatIsRCU.txt中给出了几个lwn中的链接,是RCU的实现者写的,可以一看;这位兄弟写得相当详细,佩服~[http://blogold.chinaunix.net/u1/51562/showart_1341707.html]wangjianchan

4、gdx 2011-07-0723:29rcu_process_callbacks负责调用rcu_data中注册的回调函数;而rcu_process_callbacks本身在rcu_init中被注册为softirq:open_softirq(RCU_SOFTIRQ,rcu_process_callbacks);softirq静态分配,由do_softirq()函数负责调用各个softirq的action,而do_softirq由在内核启动时启动的ksoftirqd内核线程来执行(详见ULK3)。wangjianchangdx 2011-07-0723:49program=algorithm+

5、datastructure后两者是可以转换的algorithm:初始化,各cpucontextswitch时处理,最后一个CPU的处理ds:rcu_state,rcu_data,rcu_node-level,rcu_headconceptsrelated:gracepreiod,quiescentstatewangjianchangdx 2011-07-0800:39DEFINE_PER_CPU(structrcu_data,rcu_sched_data);DEFINE_PER_CPU(structrcu_data,rcu_bh_data);这里并不是直接分配一个NR_CPUS大小的数组,

6、这是我的误解,其背后机制有待研究使用DEFINE_PER_CPU声明的变量在链接时,会被放在.init.percpusection,在系统启动时,调用setup_per_cpu_areas()重新为每个CPU分配一个.init.percpusection以供使用,内存分配的方式是为访问高度优化的(使用到了GDT等)wangjianchangdx 2011-07-1000:28先看rcutiny吧,这个里面想必只保留了rcu的核心机制在schedule函数中,调用了rcu_note_context_switch()在进程切换时,通知RCURCU必然有一种机制,来标示RCU的全局状态,这个全局

7、标志,每个cpu进程切换时亦即在rcu_note_context_switch()中,修改全局标志,但最后的标志即所有的CPU都已经进行过进程上下文切换该如何确定呢?NR_CPUS?wangjianchangdx 2011-07-1002:06看来研究rcutiny的想法有点问题,rcutiny跟rcutree中的实现差别有点小大wangjianchangdx 2011-07-1002:09/**Noteaquiesce

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。