首页 理论教育 Linux驱动程序开发实例-RCU读-复制-修改高性能锁机制

Linux驱动程序开发实例-RCU读-复制-修改高性能锁机制

时间:2023-10-19 理论教育 版权反馈
【摘要】:RCU就是读-复制-修改的意思,它是一种高性能的锁机制,具有很好的扩展性。RCU的原理是对于被RCU保护的共享数据结构,读者不需要获得任何锁就可以访问它,但写者在访问它时需要先复制一个副本,然后对副本进行修改,最后调用一个回调函数在适当的时机把指向原来数据的指针指向新的被修改的数据。例3.2 RCU实例代码见\samples\3synchronous\3-2rcu。

Linux驱动程序开发实例-RCU读-复制-修改高性能锁机制

RCU就是读-复制-修改(Read-Copy-Update)的意思,它是一种高性能的锁机制,具有很好的扩展性。但是这种锁机制的使用范围比较窄,只适用于读多写少的情况。RCU的原理是对于被RCU保护的共享数据结构读者不需要获得任何锁就可以访问它,但写者在访问它时需要先复制一个副本,然后对副本进行修改,最后调用一个回调(callback)函数在适当的时机把指向原来数据的指针指向新的被修改的数据。这个时机就是所有引用该数据的任务都退出对共享数据的操作。

RCU读者最基本的函数组合如下:

#definercu_read_lock()preempt_disable()//进入读操作临界区标记

#definercu_read_unlock()preempt_enable()//退出读操作临界区

RCU写者一般先对副本进行操作,然后将副本设定为新正本,最后同步或者异步地释放旧的正本。call_rcu函数为异步机制;synchronize_rcu函数为同步机制。函数原型如下:

call_rcu函数调用后,直接返回,RCU软中断会调用回调函数释放旧数据指针。synchronize_rcu函数则会原地等待,它被唤醒时,即可释放旧数据指针。

例3.2 RCU实例

代码见\samples\3synchronous\3-2rcu。核心代码如下:

应用层核心代码如下:

本例运行结果如下:(www.xing528.com)

[root@urbetter drivers]#insmod rcu.ko

[root@urbetter drivers]#mknod/dev/fgj c 2240

[root@urbetter drivers]#./test

open/dev/fgj successfullyoldprisNULL

read successfully:fgj

[root@urbetter drivers]#./test

open/dev/fgj successfullycallback_functionkfree

read successfully:fgj

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈