全部博文(32)
分类: LINUX
2011-07-06 23:03:23
wangjianchangdx2011-07-07 23:49:08
program = algorithm + data structure
后两者是可以转换的
algorithm: 初始化,各cpu context switch时处理,最后一个CPU的处理
ds: rcu_state, rcu_data, rcu_node-level, rcu_head
concepts related: grace preiod, quiescent state
wangjianchangdx2011-07-07 23:29:41
rcu_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)。
wangjianchangdx2011-07-06 23:31:30
Document/RCU中有一些描述,其中whatIsRCU.txt中给出了几个lwn中的链接,是RCU的实现者写的,可以一看;
这位兄弟写得相当详细,佩服~[http://blogold.chinaunix.net/u1/51562/showart_1341707.html]
wangjianchangdx2011-07-06 23:27:21
kernel/rcutree.c: rcu_init()初始化rcu机制,在系统启动时的start_kernel中被调用
这么长时间都像无头苍蝇一样乱撞,自己认真想一下,找到主线也就好了
wangjianchangdx2011-07-06 23:23:12
跟着call_back func走,所有的操作都在rcutree.c中定义,可以索引到大部分的rcu初始化,更新,invoke机制,这是旧数据结构回收的主要任务。