文章目录

  • 一、RCU 机制适用场景
  • 二、RCU 机制特点
  • 三、使用 RCU 机制保护链表

一、RCU 机制适用场景


在上一篇博客 【Linux 内核 内存管理】RCU 机制 ① ( RCU 机制简介 | RCU 机制的优势与弊端 | RCU 机制的链表应用场景 ) 中 , 分析了 RCU 机制的优势与弊端 ;

优势 : RCU 的优势是 " 读者 " ( 读取共享数据的线程 ) 不需要承担同步开销 ,

同步开销指的是 : ① 获取 " 锁 " , ② 执行 " 原子指令 " , ③ 执行 " 内存屏障 " ;

弊端 : 与此相对的 RCU 机制也有一定弊端 , " 写者 " ( 修改共享数据的线程 ) 需要 承担很大的同步开销 , 其需要

① 延迟对象释放 ,

② 读取 并 复制 共享数据 ,

③ 必须使用 互斥锁 机制 ;

④ 使用复杂 , 比其它互斥锁要复杂 ;

RCU 机制 适用于 " 读者 " ( 读取共享数据的线程 ) 性能要求高的场景 ;

二、RCU 机制特点


RCU 机制 只能 保护 " 动态分配 “ 的 ” 共享数据结构 " , 该 共享数据 必须 通过指针访问 ,

这里的 动态分配 指的是 使用 malloc , calloc 等内存申请函数 , 申请的数据结构 , 不是栈内存数据结构 ;

RCU 机制保护的 " 临界区 " ( 函数代码块 ) 中 , 不能执行耗时操作 , 尤其是 不能有 sleep 休眠操作 ;

读写不对称 : RCU 机制 读写不对称 , " 写者 “ ( 修改共享数据的线程 ) 性能不作要求 , 可以高也可以低 , 但是 ” 读者 " ( 读取共享数据的线程 ) 性能要求很高 ;

三、使用 RCU 机制保护链表


RCU 机制 除了保护 普通指针 指向的数据 之外 , 还可以用于 保护 " 链表 " 数据结构 ;

Linux 内核中 , 提供了 一系列的 标准函数 , 可以 使用 " RCU 机制 " 保护 " 双链表 " ;

标准链表元素 : 使用 RCU 机制 保护 的 链表 , 链表中的 标准 元素 , 仍然可以使用 ;

标准函数 RCU 变体 : 遍历 , 修改 , 删除 链表元素 时 , 需要调用 标准函数的 RCU 变体 ;

【Linux 内核 内存管理】RCU 机制 ② ( RCU 机制适用场景 | RCU 机制特点 | 使用 RCU 机制保护链表 )相关推荐

  1. linux 内核内存管理

    物理内存 相关数据结构 page(页) Linux 内核内存管理的实现以 page 数据结构为核心,其他的内存管理设施都基于 page 数据结构,如 VMA 管理.缺页中断.RMAP.页面分配与回收等 ...

  2. pae扩展内存 linux,浅析linux内核内存管理之PAE

    浅析linux内核内存管理之PAE 早期Intel处理器从80386到Pentium使用32位物理地址,理论上,这样可以访问4GB的RAM.然而,大型服务器需要大于4GB的RAM来同时运行数以千计的进 ...

  3. Linux内核内存管理(3):kmemcheck介绍

    Linux内核内存管理 kmemcheck介绍 rtoax 2021年3月 在英文原文基础上,针对中文译文增加5.10.13内核源码相关内容. 5.10.13不存在kmemcheck的概念,取代的是k ...

  4. Linux内核内存管理(2):固定映射地址(fixmap)和输入输出重映射(ioremap)

    Linux内核内存管理 固定映射地址(fixmap)和输入输出重映射(ioremap) rtoax 2021年3月 在英文原文基础上,针对中文译文增加5.10.13内核源码相关内容. Print ke ...

  5. Linux内核内存管理:地址转换和MMU

    地址转换和MMU 虚拟内存是一个概念,是给进程的一种错觉,因此它认为自己拥有巨大的.几乎无限的内存,有时甚至比系统实际拥有的内存还要多.每次访问内存位置时,由CPU将虚拟地址转换为物理地址.这种机制称 ...

  6. 【Linux 内核 内存管理】虚拟地址空间布局架构 ③ ( 内存描述符 mm_struct 结构体成员分析 | mmap | mm_rb | task_size | pgd | mm_users )

    文章目录 一.mm_struct 结构体成员分析 1.mmap 成员 2.mm_rb 成员 3.get_unmapped_area 函数指针 4.task_size 成员 5.pgd 成员 6.mm_ ...

  7. 【Linux 内核 内存管理】内存管理架构 ④ ( 内存分配系统调用过程 | 用户层 malloc free | 系统调用层 brk mmap | 内核层 kmalloc | 内存管理流程 )

    文章目录 一.内存分配系统调用过程 ( 用户层 | 系统调用 | 内核层 ) 二.内存管理流程 一.内存分配系统调用过程 ( 用户层 | 系统调用 | 内核层 ) " 堆内存 " ...

  8. 【Linux 内核 内存管理】内存管理架构 ② ( 用户空间内存管理 | malloc | ptmalloc | 内核空间内存管理 | sys_brk | sys_mmap | sys_munmap)

    文章目录 一.用户空间内存管理 ( malloc / free / ptmalloc / jemalloc / tcmalloc ) 二.内核空间内存管理 1.内核内存管理系统调用 ( sys_brk ...

  9. 【Linux 内核 内存管理】优化内存屏障 ③ ( 编译器屏障 | 禁止 / 开启内核抢占 与 方法保护临界区 | preempt_disable 禁止内核抢占源码 | 开启内核抢占源码 )

    文章目录 一.禁止 / 开启内核抢占 与 方法保护临界区 二.编译器优化屏障 三.preempt_disable 禁止内核抢占 源码 四.preempt_enable 开启内核抢占 源码 一.禁止 / ...

最新文章

  1. Android中关于SQLite数据库的一些知识
  2. 【贪心】【codeforces】651A Joysticks
  3. boost::multiprecision模块mpfr_float相关的测试程序
  4. linux中如何查看进程占用了哪些端口?
  5. MMORPG的一份Unity手游性能蓝皮书
  6. QueryRunner类 的應用,以及ResultSetHandler 接口的实现类
  7. 比亚迪发布九款新车 首次展示L4技术和BNA升级架构...
  8. 申请AppleID的界面,连继续按钮都看不到
  9. CentOS7 安装ffmpeg
  10. macOS 启用ftp/telnet/tftp 服务
  11. 皇帝的新脑-读书笔记
  12. Android Studio中运行Android模拟器
  13. python回复qq_「转」使用python发送qq消息
  14. 怎么找到当地供应商_微商怎么找一手货源供货商(微商新手必看教程)
  15. SpringCloud使用@Aspect面向切面处理Web请求日志
  16. [面试题][Java]当当、映客直播
  17. win10系统中如何不用360安全卫士等软件仍能实现清理垃圾,释放内存和安全防护的基本功能
  18. 关闭电脑浏览器快捷键
  19. C语言课设电子英汉词典系统(大作业)
  20. cisco思科产品大全

热门文章

  1. Git Push 不用再次输入用户名和密码方法
  2. Android自定义泡泡效果 源码
  3. Silverlight学习笔记清单
  4. 在Flex3中使用Runtime Shared Library (RSL)
  5. 黑马vue---13、事件修饰符的介绍
  6. [转载]秀脱linux实战笔记linux-kernel-3.0.3实战篇
  7. flink on yarn部分源码解析 (FLIP-6 new mode)
  8. JavaScript编码规范[百度]
  9. 安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)转载自码农网
  10. echart封装,前端简单路由,图表设置自动化