【Linux 内核 内存管理】RCU 机制 ① ( RCU 机制简介 | RCU 机制的优势与弊端 | RCU 机制的链表应用场景 )
文章目录
一、RCU 机制
RCU , 英文全称是 " Read-Copy-Update “ , 对应的中文名称是 ” 读取-拷贝-更新 “ , 这是 Linux 内核中的 ” 同步机制 " ;
Linux 内核中还有其它同步机制 , 如 " 原子操作 " , " 读写信号量 " 等 " 锁机制 " ;
RCU 机制 :
① 记录指针 : RCU 会 记录 所有的 指向 " 共享数据 " 的 指针 ;
② 修改数据 ( 读取-拷贝 操作 ) : 如果 " 指针持有者 “ 修改该 ” 共享数据 " , 需要先 创建一个共享数据 " 副本 " , 然后在副本中修改 ;
③ 更新数据 ( 更新操作 ) : 只需要读取 " 共享数据 " 的线程 , 离开 " 读临界区 " 后 , 指向原来 " 共享数据 " 的 指针 重新指向 " 副本 " , 然后再删除原来的 " 共享数据 " ;
二、RCU 机制的优势与弊端
RCU 的优势是 " 读者 " ( 读取共享数据的线程 ) 不需要承担同步开销 ,
同步开销指的是 : ① 获取 " 锁 " , ② 执行 " 原子指令 " , ③ 执行 " 内存屏障 " ;
与此相对的 RCU 机制也有一定弊端 , " 写者 " ( 修改共享数据的线程 ) 需要 承担很大的同步开销 , 其需要
① 延迟对象释放 ,
② 读取 并 复制 共享数据 ,
③ 必须使用 互斥锁 机制 ;
三、RCU 机制的链表应用场景
RCU 机制 可以极大地 提高 " 链表 " 数据结构的 读取效率 ,
多个线程 同时读取 链表 时 , 使用 rcu_read_lock()
即可 ,
在多线程读取的同时还允许有
个线程修改 链表 ;
RCU 机制 就是 " 读取-拷贝-更新 " ,
上述 " 写线程 " 修改 " 链表 " 数据结构 的流程如下 :
① 首先 , 读取 链表数据 内容 ;
② 然后 , 拷贝 链表数据 到一个 " 副本 " 中 ;
③ 最后 , 更新 数据 , 将 " 链表 " 的指针 指向 拷贝的 " 副本 " 中 , 删除 原始链表数据 ;
如果 " 写线程 " 删除 " 链表 " 数据结构 , 需要 等待 所有 访问该 链表的 线程 访问结束 , 即 释放该链表指针 , 之后才能销毁该链表 ;
相关文章
- 【Linux 内核 内存管理】分区伙伴分配器 ③ ( 备用内存区域列表 | ZONELIST_FALLBACK 枚举 | zoneref 结构体 | 备用内存区域借用物理页规则 )
- 快速掌握Linux内存查看方法(linux查看内存排序)
- 优化优化Linux程序的内存占用(linux程序内存占用)
- Linux实现文件行分割的方法(linux行分割文件)
- 深入了解Linux中的内存读取(linux读取内存)
- :开启Linux之旅:新买的电脑体验(新买的电脑linux)
- 占用标题:深入了解Linux机器内存占用(查看linux机器内存)
- 效实现Linux线程:实现高效并发操作(linux线程高)
- root用户Linux内核中限制Root用户的机制(linux内核限制)
- 学习Linux内核,让你走向成功之路(学linux内核有什么用)
- Linux如何安全删除系统文件夹(linux删除系统文件夹)
- 管理方法Linux环境下的高性能内存管理技术(linux高端内存)
- Linux下修改JDK内存配置的指南(linux修改jdk内存)
- Linux查看内存泄漏:发现与解决(linux查看内存泄漏)
- Linux 内核入门:玩转内核开发(linux内核入门)
- Linux 中使用特殊字符替换的技巧(linux替换特殊字符)
- 新潮流:最新Linux内核发布(最新linux内核)
- Linux下打包Jar的步骤指南(linux打包jar)
- 探索Linux与Unix内核的奥秘(linux和unix内核)
- 体验Linux实训的精彩心得(linux实训心得体会)
- Linux之旅:探索开源分支(linux的分支)
- Linux轻松切换中文输入,让你的电脑更加便捷高效(linux切换中文输入)
- Linux中的exec命令:执行外部程序的终极利器(linux执行exec)
- 使用Linux检测内存泄露的方法(linux检查内存泄露)
- 学习Linux: 编译内核实战教程(linux编译内核教程)
- 实现Linux下二级域名绑定操作的方法及步骤(linux二级域名绑定)
- Linux系统内存管理析:实现高效与可靠性(linux 内存管理分析)
- Linux统治串口:重新定义的通讯之道(linux独占串口)