Chinaunix首页 | 论坛 | 博客
  • 博客访问: 244712
  • 博文数量: 32
  • 博客积分: 557
  • 博客等级: 中士
  • 技术积分: 431
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-20 23:05
文章分类

全部博文(32)

文章存档

2015年(4)

2014年(2)

2012年(4)

2011年(22)

分类: LINUX

2011-07-06 23:03:23

RCU的代码极其复杂,主要文件包括:
include/linux/rcupdate.h
kernel/rcutree.h
kernel/rcutree.c等
主要数据结构:
rcu_state/rcu_data/rcu_head等

请看附件,使用请标明出处,谢谢!
阅读(5885) | 评论(12) | 转发(0) |
给主人留下些什么吧!~~

wangjianchangdx2011-07-10 02:12:52

我很高兴通过这个开始考虑进程切换的场景了

wangjianchangdx2011-07-10 02:09:04

/*
* Note a quiescent state.  Because we do not need to know
* how many quiescent states passed, just if there was at least
* one since the start of the grace period, this just sets a flag.
*/
void rcu_sched_qs(int cpu){}

do not need to know or do not know or cannot know, IMO, it can be get in other means[implements], but it's has more overhead.

wangjianchangdx2011-07-10 02:06:32

看来研究rcutiny的想法有点问题,rcutiny跟rcutree中的实现差别有点小大

wangjianchangdx2011-07-10 00:28:14

先看rcutiny吧,这个里面想必只保留了rcu的核心机制

在schedule函数中,调用了rcu_note_context_switch()在进程切换时,通知RCU

RCU必然有一种机制,来标示RCU的全局状态,这个全局标志,每个cpu进程切换时亦即在rcu_note_context_switch()中,修改全局标志,但最后的标志即所有的CPU都已经进行过进程上下文切换该如何确定呢?NR_CPUS?

wangjianchangdx2011-07-08 00:39:25

DEFINE_PER_CPU(struct rcu_data, rcu_sched_data);
DEFINE_PER_CPU(struct rcu_data, rcu_bh_data);

这里并不是直接分配一个NR_CPUS大小的数组,这是我的误解,其背后机制有待研究
使用DEFINE_PER_CPU声明的变量在链接时,会被放在.init.percpu section,
在系统启动时,调用setup_per_cpu_areas()重新为每个CPU分配一个.init.percpu section以供使用,内存分配的方式是为访问高度优化的(使用到了GDT等)