:就为了一个原子操作,其他CPU核心罢工了( 二 )
文章图片
文章图片
“阿Q , 上次那办法好是好 , 可解决不了这一次的问题啊” , 虎子再次找上门来 。
“你来的正好 , 我正想去找你说这事呢”
“哦 , 是吗 , 难不成你想到破解之道了?”
“只是一些初步的想法 , 问题的核心在于现在咱们各个车间各自为政 , 都有自己的私有缓存 , 各自修改数据后向内存更新时也不互相打招呼 , 缺少一个联络机制”
虎子点了点头 , “确实 , 所以咱们需要建立一个联络机制 , 来对各个车间的缓存内容进行统一管理是吗?”
“对!这事儿咱俩说了可不算 , 我建议召集8个核心车间的代表 , 统一开一个会议 , 详细讨论下这个问题 。哦 , 对了 , 把总线主任也叫上 , 他经验丰富说不定能提供一些思路”
缓存一致性协议MESI
很快 , 咱们CPU的8个核心车间就为此问题召开了会议 , 并且取得了非常重要的成果 。
我们牵了一条新的专线 , 把8个核心车间连接起来 , 用于各个车间之间进行信息沟通 , 不同于CPU外部的总线系统 , 大家把这个叫片内总线 。
文章图片
文章图片
新的线路铺设好了 , 以后大家就可以通过这条线路即时沟通 , 为了解决之前出现的问题 , 大家还制定了一套规则 , 叫做缓存一致性协议 。
规则里面规定了所有车间的缓存单元——缓存行有四种状态:
已修改Modified (M)
缓存行已经被修改了 , 与内存的值不一样 。如果别的CPU内核要读内存这块数据 , 要赶在这之前把该缓存行回写到主存 , 把状态变为共享(S).
独占Exclusive (E)
缓存行只在当前CPU核心缓存中 , 而且和内存中数据一样 。当别的CPU核心读取它时 , 状态变为共享;如果当前CPU核心修改了它 , 就要变为已修改状态 。
共享Shared (S)
缓存行存在于多个CPU核心的缓存中 , 而且和内存中的内容一致 。
无效Invalid (I)
缓存行是无效的
四种状态之间的转换是这样的:
文章图片
文章图片
按照这套规则 , 大家不能再像以前那样随意了 , 各车间对自家缓存进行读写时 , 都要相互通一下气 , 避免使用过时的数据 。
除此之外 , 还规定如果一块内存区域被多个车间都缓存 , 就不再允许多个车间同时去修改缓存了 。
会议还有另外一个收获 , 以前被各车间诟病的每次原子操作都要锁定总线 , 导致大家需要访问内存的都只能干等着的问题也得到了解决 。以后总线主任不再需要锁定总线了 , 通过这次的缓存一致性协议就可以办到 。
自此以后 , 数据不一致的问题总算是根治了 , 咱们8个车间又可以愉快的工作了 。
【:就为了一个原子操作,其他CPU核心罢工了】作者:轩辕之风
推荐阅读
- 每日经济新闻|格创东智获云锋基金亿元级A轮融资 CEO何军:不是为了融资而融资
- 金融墙|两首富为何都重回中国?一个在英国亏了千亿,一个在美国亏了百亿
- RedmiRedmi 10X Pro 体验:性能、低价和 5G 一个都不漏
- 大肥皂|一个让我们连喊「YES」的手机,iQOO Z1体验评测
- 搜狐新闻|又一个中国企业“打破”技术垄断,跃居世界第一,年收入达1160亿
- 微信号|微信终于有这个功能了!网友:一个重新做人的机会
- 马路边老张|给大家说一个比华为更厉害的公司,专利全球第三,强大到令人发指
- 生活小蒙娜|小伙花5000块买了部手机为啥用一个月就后悔了?来听听小伙咋说
- 铁鑫地源热泵|暖通新手必看!水地源热泵和水环热泵的区别?
- 花儿街参考|一个程序猿决定去当摇滚歌手