一直希望能用一种及其通俗的方式把Linux RCU锁(所谓两阶段可抢占RCU锁)描述出来。之前写过一篇:
《Linux内核RCU(Read Copy Update)锁简析》:https://blog.csdn.net/dog250/article/details/46848649
虽然把代码逻辑简化了,但是写得并不好,这个太针对于实现了…而如果真正理解了这个并且希望表达,那RCU的精髓应该是路边卖烤地瓜的都应该明白的。最近正好聊到了RCU,就又想起了这个话题。

  这里烤地瓜的不多,但有很多卖蒸米粉的,小区外面就有好几家,今早刚刚还吃了一份。我是最不爱玩手机的,等待出炉的间隙,我仔细观察了做蒸米粉的这个抽屉式炉子

本应该拍个照的,然而可能是骨子里抵触手机吧,全程没有把手机从裤兜里拿出来…

  师傅不停地拉开各个抽屉,看细节,然后就知道是不是该打进去一个鸡蛋,浇点汤汁…总之,每一层的抽屉容器里包含两部分内容:

  • 原材料
  • 加工工序

原材料是放进去的物品,比如粉条,蔬菜,鸡蛋等,而加工工序则是原材料到达什么程度要做什么事的一些列步骤,同时还有原材料没有达到什么程度不能做什么的规定,这一点更加重要!也许你会觉得我说的都是废话,家里做饭不都是这样吗?然而有个不同。

  家里做饭包括饭店后厨做饭是可以试错的,不同的人做饭是否好吃取决于该人在厨艺上的造诣,而这个蒸米粉却和KFC差不多,全部都是流程化操作,所以说,这简直是一个Howto!


嗯,Linux在RCU处理上的机制和蒸米粉非常类似!

  Linux RCU(以后简称RCU)将所谓的宽限期静默期等各种抽象成了容器,每一个调用rcu lock/unlock的task均在这些容器里进行,每一个容器携带一个callback list,只有当容器内的lock全部被unlock之后,才能被调用。这个理解起来非常简单。

  好了,现在被RCU容器分为了三类,这也是典型的分类,几乎存在于任何领域:

  • 空闲容器
  • 已经满载打好包的容器
  • 正在填充的容器

随着时间的流逝,这三类容器的角色在不断转变,这是一个在时间,空间两个维度不断延展的。在RCU容器中,如果该容器内所有的lock区域全部unlock了,那么该容器就算打好包了,这个时候就可以执行其callback list了,其实就是一个TODO list…

  现在,我把RCU的这三类容器按照时间和空间两个维度展开:

其中实线圆圈表示lock,虚线圆圈表示已经unlock。

  空闲的容器是可以被重用的,所以说根本就没有必然保留它们,即刻重用就好了。所以说,RCU容器只有两类即可:


其实,区块链的区块也是一种满足某种特定条件的容器,只是区块是永久容器,而RCU则是瞬时容器之间的区别。


本文并没有说透RCU的全部,比如强序型内存屏障的发布-订阅模式。也没有说Tree RCU的思想,更是没有提RCU最近的进化,所以本文依然只是一篇技术随笔,而不是工作文档。

小区外的蒸米粉和Linux RCU锁相关推荐

  1. openVswitch(OVS)源代码之linux RCU锁机制分析

    前言 本来想继续顺着数据包的处理流程分析upcall调用的,但是发现在分析upcall调用时必须先了解linux中内核和用户空间通信接口Netlink机制,所以就一直耽搁了对upcall的分析.如果对 ...

  2. Linux RCU锁简析

    最近遇到一个问题,大压力测试下咬狗了,定位出来跟RCU相关,还是先简单的捋一捋RCU,也好看看后面能否对RCU做些特定场景下的优化. 网上RCU相关的技术博客比较多,先列几个可供参考的: MagicB ...

  3. Linux RCU机制

    Linux RCU机制 | 桃花猿记1. 简介RCU (Read-copy update)是2002年10月添加到Linux内核中的一种同步机制.作为数据同步的一种方式,在当前的Linux内核中发挥着 ...

  4. Linux RCU机制+内存屏障

    Linux RCU机制+内存屏障 1. RCU 1.1 RCU 背景(读写锁的问题) 1.1.1 读写锁(写独占,读共享,写锁优先级高) 1.1.2 读写锁的缺点(写独占时不可读) 1.1.3 RCU ...

  5. 锁 - linux内核锁(零)

    经典博客: 术道经纬 - 知乎 目录: 一.铺垫知识 1.指令执行流 2.上下文 3.抢占 二.内核锁基础知识 1.为什么要用锁?why 2.锁保护什么?what 3.锁是如何保护资源的?How 三. ...

  6. linux内核锁机制学习

    在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实象多进程多线程编程一样也需要一些同步机制来同步各执行单元对共享数据的访问.尤其是在多处理器系统上,更需要一些同步机制来同步不同处理器上 ...

  7. 在Linux下锁住键盘和鼠标而不锁屏

    假如在你正看着屏幕上的某些重要的事情时,你不想让你的小猫或者小狗在你的键盘上行走,或者让你的孩子在键盘上瞎搞一气,那我建议你试试 xtrlock 这个工具. 假如在你正看着屏幕上的某些重要的事情时,你 ...

  8. 如何修改Linux的锁屏时间,调整Kali Linux的锁屏时间

    调整Kali Linux的锁屏时间 锁屏是保护隐私的一种重要机制.当用户不操作电脑一段时间后,系统会进入锁屏状态.用户需要输入口令,才能重新进入系统.避免因为操作人员离开电脑后,被其他人员利用现有帐号 ...

  9. 互斥锁 、 自旋锁、读写锁和RCU锁

    互斥锁 mutex: 在访问共享资源之前对进行加锁操作,在访问完成之后进行解锁操作. 加锁后,任何其他试图再次加锁的线程会被阻塞,直到当前进程解锁. 如果解锁时有一个以上的线程阻塞,那么所有该锁上的线 ...

  10. linux系统怎么禁用键盘,桌面应用|如何在 Linux 下锁住键盘和鼠标而不锁屏

    我四岁的侄女是个好奇的孩子,她非常喜爱"阿凡达"电影,当阿凡达电影在播放时,她是如此的专注,好似眼睛粘在了屏幕上.但问题是当她观看电影时,她经常会碰到键盘上的某个键或者移动了鼠标, ...

最新文章

  1. 计算机临床医学自动化哪个好,大学专业难度排行前十名,临床医学位列第二
  2. Android下Opengl ES实现单屏幕双眼显示
  3. matplotlib画图_漂亮,超详细的matplotlib画图基础
  4. 使用Idea 配置maven
  5. 2022年2月份谷哥学术资源分下下载列表:19/20
  6. 教师国培计算机计划,教师国培计划大全
  7. ISO9660文件系统分析
  8. 手写数字识别神经网络,手写体识别 神经网络
  9. FIX - 克隆虚拟机NAT模式网络不通、不稳定、vMnet8网络故障、网卡冲突、ssh连接慢
  10. echarts x轴time 24小时
  11. zabbix为啥持续报警
  12. 淘宝代购系统、海外代购系统、代购小程序、APP的开发以及源码PHP前端源码
  13. double转换为二进制
  14. 直播app代码公布:视频直播源码转盘功能的实现
  15. 迅雷9远程服务器,迅雷9【搞定方式】
  16. Android开发指南 1──应用程序基础
  17. 【推荐系统】基于协同过滤的图书推荐系统
  18. android 投放 电视,安卓手机怎么投屏到电视【五个方法教你】
  19. Robert Marino:欧洲创新的代表性不足,量子计算或能破局
  20. 地方麻将、棋牌手游的APP推广只差这项技术

热门文章

  1. Windows 使用学习
  2. Java--------面向对象
  3. 影子卫士中文注册版+系统保护的尚方宝剑、、
  4. LaTeX错误“Unable to read an entire line---bufsize=200000. Please increase buf_size in texmf.cnf.”
  5. grammarly word安装失败
  6. java毕业设计——基于java+JDBC+sqlserver的固定资产管理系统设计与实现(毕业论文+程序源码)——固定资产管理系统
  7. 亮宁机器人套件_十大可编程机器人教育套件
  8. 关于信号发生器的功能和参数介绍(二)
  9. 本科毕业论文论文框架,可参考
  10. 人工智能之模式识别(一)