《Android深度探索 卷1 HAL与驱动开发》笔记之Linux驱动程序中的并发操作(5)——读-复制-更新(RCU)机制原理

本文介绍了Linux内核中的RCU(Read-Copy-Update)机制,这是一种允许读写并发执行的技术,适用于读多写少的场景。在RCU中,读操作直接访问共享数据,而写操作需要备份旧数据,修改后通过后台线程回收旧数据。尽管RCU提高了读操作的效率,但在多写操作场景下,同步开销可能增加,因此不适用于所有情况。

RCU的原理

RCU(Read-Copy-Update,读-复制-更新)机制可以看做是读写自旋锁的扩展。在rwlock机制中读自旋锁和写自旋锁时互斥的,但是在RCU机制中读和写操作是可以并发执行的。

在访问共享数据的时候,需要先获取锁,才能访问共享数据。这种原理很简单,其根本思想就是在访问共享资源时,需要先访问一个全局的变量,也就是锁,然后通过全局变量的状态来控制任务线程或进程对共享数据的访问。但是,这种思想是需要CPU进行支持的,CPU需要配合实现这个全局变量的读写操作。

由此又造成了如下两个问题的产生:

  • 效率问题
    锁机制的实现需要对内存进行原子化的访问,这种访问操作会破坏CPU的流水线式的操作,降低流水线效率,这是影响性能的一个关键因素。另外,在采用读写锁机制的情况下,写自旋锁是具有排他性的锁,无法实现写自旋锁和读自旋锁的并发操作,在某些应用中会降低系统性能。
  • 扩展性问题

**当系统中的CPU数量增多的时候,采用锁机制实现数据的同步访问会导致效率变低,并且随着CPU的数量越来越多,效率会越来越低,由此可见锁机制的扩展性是比较差的。

为了解决上述的两个问题,Linux内核引入了RCU机制。该机制在多CPU的平台上,特别是读多写烧的应用中特别适用。

RCU机制中的读操作

RCU机制中的读操作,可以直接对共享数据进行访问。因为RCU的读操作上下文是不可抢占的,所以读共享数据时,可以采用read_rcu_lock() 函数,这

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值