`
zhangyafei_kimi
  • 浏览: 265617 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Linux 2.6内核中新的锁机制--RCU

阅读更多
源自:
Linux源码中附带的Document
http://www.ibm.com/developerworks/cn/linux/l-rcu

摘要:
RCU(Read-Copy Update)。对于被RCU保护的共享数据结构,读者不需要获得任何锁就可以访问它,但写者在访问它时首先拷贝一个副本,然后对副本进行修改,最后使用一个回调(callback)机制在适当的时机把指向原来数据的指针重新指向新的被修改的数据,这个时机就是所有引用该数据的CPU都退出对共享数据的操作。

读者在访问被RCU保护的共享数据期间不能被阻塞。

写者在访问被RCU保护的共享数据时不需要和读者竞争任何锁,只有在有多于一个写者的情况下需要获得某种锁以与其他写者同步。写者修改数据前首先拷贝一个被修改元素的副本,然后在副本上进行修改,修改完毕后它向垃圾回收器注册一个回调函数以便在适当的时机执行真正的修改操作。等待适当时机的这一时期称为grace period,而CPU发生了上下文切换称为经历一个quiescent state,grace period就是所有CPU都经历一次quiescent state所需要的等待的时间。垃圾收集器就是在grace period之后调用写者注册的回调函数来完成真正的数据修改或数据释放操作的。

函数摘要:
/*读者在读取由RCU保护的共享数据时使用该函数标记它进入读端临界区。*/
rcu_read_lock()


/*
该函数与rcu_read_lock配对使用,用以标记读者退出读端临界区。夹在这两个函数之间的代码区称为"读端临界区"(read-side critical section)。读端临界区可以嵌套,如图3,临界区2被嵌套在临界区1内。
*/
rcu_read_unlock()


/*
该函数由RCU写端调用,它将阻塞写者,直到经过grace period后,即所有的读者已经完成读端临界区,写者才可以继续下一步操作。如果有多个RCU写端调用该函数,他们将在一个grace period之后全部被唤醒。
*/
synchronize_rcu()


/*
函数 call_rcu 也由 RCU 写端调用,它不会使写者阻塞,因而可以在中断上下文或 softirq 使用,而 synchronize_rcu、synchronize_kernel 和synchronize_shced 只能在进程上下文使用。该函数将把函数 func 挂接到 RCU回调函数链上,然后立即返回。一旦所有的 CPU 都已经完成端临界区操作,该函数将被调用来释放删除的将绝不在被应用的数据。参数 head 用于记录回调函数 func,一般该结构会作为被 RCU 保护的数据结构的一个字段,以便省去单独为该结构分配内存的操作。需要指出的是,函数 synchronize_rcu 的实现实际上使用函数call_rcu。
*/
void fastcall call_rcu(struct rcu_head *head,
                                void (*func)(struct rcu_head *rcu))

/*
写端调用,把一个指针p赋为指针v。
*/
rcu_assign_pointer()
typeof(p) rcu_assign_pointer(p, typeof(p) v);

/*
获得指针p的解引用值
*/
rcu_dereference()
typeof(p) rcu_assign_pointer(p, typeof(p) v);


分享到:
评论

相关推荐

    Linux2.6内核标准教程(共计8-- 第1个)

    最后讲解了Linux内核中常见的同步机制,使读者掌握每处理器变量和RCU这两种新的 同步机制。 《Linux2.6内核标准教程》适合Linux内核爱好者、Linux驱动开发人员、Linux系统工程师参考使用,也可以作为计算机及相关...

    Linux2.6内核标准教程(共计8--第8个)

    最后讲解了Linux内核中常见的同步机制,使读者掌握每处理器变量和RCU这两种新的 同步机制。 《Linux2.6内核标准教程》适合Linux内核爱好者、Linux驱动开发人员、Linux系统工程师参考使用,也可以作为计算机及相关...

    Linux2.6内核标准教程(共计8--第6个)

    最后讲解了Linux内核中常见的同步机制,使读者掌握每处理器变量和RCU这两种新的 同步机制。 《Linux2.6内核标准教程》适合Linux内核爱好者、Linux驱动开发人员、Linux系统工程师参考使用,也可以作为计算机及相关...

    Linux 2.6内核标准教程(部分)

    《Linux 2.6内核标准教程》是一本专为Linux内核爱好者、驱动开发者和系统工程师设计的深度解析书籍。它旨在帮助读者理解和掌握Linux内核的核心工作原理,通过详细解析内核的关键组件,引领读者进入Linux内核的世界。...

    Linux2.6内核标准教程(共计8--第3个)

    最后讲解了Linux内核中常见的同步机制,使读者掌握每处理器变量和RCU这两种新的 同步机制。 《Linux2.6内核标准教程》适合Linux内核爱好者、Linux驱动开发人员、Linux系统工程师参考使用,也可以作为计算机及相关...

    Linux2.6内核标准教程(共计8--第7个)

    最后讲解了Linux内核中常见的同步机制,使读者掌握每处理器变量和RCU这两种新的 同步机制。 《Linux2.6内核标准教程》适合Linux内核爱好者、Linux驱动开发人员、Linux系统工程师参考使用,也可以作为计算机及相关...

    Linux2.6内核标准教程(共计8--第2个)

    最后讲解了Linux内核中常见的同步机制,使读者掌握每处理器变量和RCU这两种新的 同步机制。 《Linux2.6内核标准教程》适合Linux内核爱好者、Linux驱动开发人员、Linux系统工程师参考使用,也可以作为计算机及相关...

    linux 2.6内核标准教程

    最后讲解了Linux内核中常见的同步机制,使读者掌握每处理器变量和RCU这两种新的同步机制。 本书适合Linux内核爱好者、Linux驱动开发人员、Linux系统工程师参考使用,也可以作为计算机及相关专业学生深入学习操作系统...

    Linux2.6内核标准教程(共计8--第4个)

    最后讲解了Linux内核中常见的同步机制,使读者掌握每处理器变量和RCU这两种新的 同步机制。 《Linux2.6内核标准教程》适合Linux内核爱好者、Linux驱动开发人员、Linux系统工程师参考使用,也可以作为计算机及相关...

    Linux2.6内核标准教程(共计8--第5个)

    最后讲解了Linux内核中常见的同步机制,使读者掌握每处理器变量和RCU这两种新的 同步机制。 《Linux2.6内核标准教程》适合Linux内核爱好者、Linux驱动开发人员、Linux系统工程师参考使用,也可以作为计算机及相关...

    linux 2.6内核标准 part3/3

    《Linux2.6内核标准教程》适合Linux内核爱好者、Linux驱动开发人员、Linux系统工程师参考使用,也可以作为计算机及相关专业...最后讲解了Linux内核中常见的同步机制,使读者掌握每处理器变量和RCU这两种新的同步机制。

    Linux 2.6内核标准 Part4 (Final)

    最后讲解了Linux内核中常见的同步机制,使读者掌握每处理器变量和RCU这两种新的同步机制。 本书适合Linux内核爱好者、Linux驱动开发人员、Linux系统工程师参考使用,也可以作为计算机及相关专业学生深入学习操作系统...

    Linux 2.6内核标准 Part3

    最后讲解了Linux内核中常见的同步机制,使读者掌握每处理器变量和RCU这两种新的同步机制。 本书适合Linux内核爱好者、Linux驱动开发人员、Linux系统工程师参考使用,也可以作为计算机及相关专业学生深入学习操作系统...

    Linux 2.6内核标准 Part2

    最后讲解了Linux内核中常见的同步机制,使读者掌握每处理器变量和RCU这两种新的同步机制。 本书适合Linux内核爱好者、Linux驱动开发人员、Linux系统工程师参考使用,也可以作为计算机及相关专业学生深入学习操作系统...

    Linux 2.6内核标准 Part1

    最后讲解了Linux内核中常见的同步机制,使读者掌握每处理器变量和RCU这两种新的同步机制。 本书适合Linux内核爱好者、Linux驱动开发人员、Linux系统工程师参考使用,也可以作为计算机及相关专业学生深入学习操作系统...

    LINUX内核编程---相当经典

    熟悉`spinlock_t`, `mutex`, `semaphore`等同步原语,以及`RCU(Read-Copy-Update)`机制,对于编写安全的内核代码至关重要。 10. **调试技巧**:使用`kdb`(Kernel Debugging Breakpoint)和`kgdb`(Kernel ...

    Linux SMP内核信号量机制实现原理分析

    2. 读-拷贝-更新(Read-Copy-Update,简称RCU):Linux 2.6内核引入了RCU机制,允许读者和写者并发执行,无需获取任何锁即可访问被保护的数据结构。写者在修改数据前需要拷贝一份数据副本,并在副本上进行修改。写者...

    userspace-rcu-devel-0.10.1-4.el8.x86_64.rpm

    离线安装包,亲测可用

    Linux 内核RCU机制的使用

    ### Linux 内核RCU机制详解 #### 一、RCU概述 RCU(Read-Copy-Update)是一种专门针对读多写少场景优化的同步机制,在Linux内核2.5版本开发期间引入。尽管其核心概念相对简单,但理解和掌握这一机制却需要一定的...

    userspace-rcu-devel-0.10.1-2.el7.x86_64.rpm

    离线安装包,亲测可用

Global site tag (gtag.js) - Google Analytics