【操作系统笔记十】缓存一致性
CPU 核心之间数据如何传播
高速缓存中的值被修改了,那么怎么同步到内存中呢?
- ① 写直达(Write-Through)
- ② 写回(Write-Back)
写直达(Write-Through) 简单,但是很慢,每次写都需要经过 内存总线

写回(Write-Back):尽可能推迟更新,只有当替换算法要驱逐这个更新过的缓存块时,才把它写回到内存中。由于局部性,写回能显著地减少总线流量,但是它的缺点是复杂。

写传播(Write Propagation)
写传播是说,在一个 CPU 核心里,我们的 Cache 数据更新,必须能够传播到其他的对应核心节点的 Cache Line 里。

事务的串行化(Transaction Serialization)
事务串行化是说,我们在一个 CPU 核心里面的写入顺序,在其他的核心节点看起来,顺序是一样的。

CPU 核心之间数据传播的两种方式
- ① 写失效(Write Invalidate)
- ② 写广播(Write Broadcast)
写失效(Write Invalidate):只有一个 CPU 核心负责写入数据,其他的核心对应缓存行失效,需要这个数据的时候,才同步读取到这个写入。

写广播(Write Broadcast):一个写入请求广播到所有的 CPU 核心,同时更新各个核心里的 Cache。


写失效 VS 写广播
-
① 写广播在实现上自然很简单,但是写广播需要占用更多的总线带宽
-
② 写失效只需要告诉其他的 CPU 核心,哪一个内存地址的缓存失效了,但是写广播还需要把对应的数据传输给其他 CPU 核心。
各种缓存请求
处理器向高速缓存发出的请求包括:
- PrRd:处理器请求读取一个缓存块。
- PrWr:处理器请求改写一个缓存块。
总线方面的请求:
- BusRd:当处理器的请求缓存的读操作出现未命中,它会向总线发送一个BusRd请求
- BusRdX:当处理器请求缓存的写操作出现未命中,它会向总线发送一个BusRdX请求
- BusUpgr:当处理器请求缓存的写操作命中时,它它会向总线发送一个BusUpgr
- Flush:该请求表明一个缓存块正在被写回内存



MSI协议和MESI协议
MSI协议


MESI 协议
MESI 协议通过引入 E 状态,来减少没有用的总线事务
E:独占状态(Exclusive)
缓存行只在当前缓存中,但是干净的(clean) —— 缓存数据同于主存数据。当别的缓存读取它时,状态变为共享;当前写数据时,变为已修改状态。






MESI 属于硬件级别的协议
不管是信号的发送、传输、总线仲裁、缓存行的修改等都属于硬件级别的。所谓的硬件,本质上就是一堆电子电路而已。也就是说一般的话,CPU 高速缓存的一致性是由硬件保证的。不同的架构的CPU,提供不同的缓存一致性协议。MESI 是属于经典的,常用的缓存一致性协议,其他很多协议都是在 MESI 基础之上的优化。
内存屏障

写内存屏障 - Store Memory Barrier
屏障之后的写操作必须等待屏障之前的写操作完成才可以执行。

引入 Store Buffer 的目的:提升 CPU 写操作的性能,导致 Store Buffer 与高速缓存中的数据不一致,CPU 每次先从 Store Buffer 读数据,没有的话再去高速缓存,可以解决数据不一致问题,但是解决不了 Memory Ordering 引起的问题 (内存访问顺序和程序设置的顺序不一致)。
读内存屏障
CPU 执行的任何的 load 操作都需要等到失效队列中所有标记信息完成对 cacheline 的操作之后才能进行。

内存屏障总结
-
写内存屏障:解决 CPU 写操作乱序问题,或者叫存储 (Store) 操作乱序问题
-
读内存屏障:解决 CPU 读操作乱序问题,或者叫加载(Load) 操作乱序问题




内存屏障 (memory barriar) 指令
- 写内存屏障:
smp_wmb()汇编指令:sfence(x86 ) - 读内存屏障:
smp_rmb()汇编指令:lfence(x86 ) - 读写内存屏障:
smp_mb()汇编指令:mfence(x86 )
屏障之前的读 / 写操作必须在屏障之后的读 / 写操作之前被执行。

锁内存总线
lock 前缀的底层实现
- 在多处理器下,为了保证一些操作的原子性,需要在这些操作前加上
lock,比如:lock addl ....,lock cmpxchg,lock inc ....

锁内存总线的缺点:其他处理器不能访问其他的内存地址中的数据了,所以锁内存总线的开销挺大的。
锁缓存行



总结
-
Memory Ordering 问题:内存访问顺序和程序设置顺序不一致(指令重排序)
-
写内存屏障:解决 CPU 写操作乱序,或者叫存储(Store)操作乱序问题,屏障之后的写操作必须等屏障之前的写操作完成之后才可以执行
-
读内存屏障:解决 CPU 读操作乱序,或者叫加载(Load)操作乱序问题,屏障之后的读操作必须等屏障之前的读操作完成之后才可以执行
-
底层汇编指令前面加 lock 前缀可以起到内存屏障的作用,带有 lock 前缀的指令是原子操作
-
lock 在底层的实现原理是让某个 CPU 核心“锁定”内存总线,从而独占共享内存,但是此时其他 CPU 核心就不能访问内存数据了,所以锁内存总线的开销是很大的
-
MESI 协议是锁缓存行的协议,它从硬件层面保证缓存行的数据一致,无需锁内存总线,锁缓存行比锁内存总线的开销小
相关文章:
【操作系统笔记十】缓存一致性
CPU 核心之间数据如何传播 高速缓存中的值被修改了,那么怎么同步到内存中呢? ① 写直达(Write-Through)② 写回(Write-Back) 写直达(Write-Through) 简单,但是很慢&am…...
lS1028 + 六网口TSN 硬交换+QNX/Linux实时系统解决方案在轨道交通系统的应用
lS1028 六网口TSN 硬交换QNX/Linux实时系统解决方案在轨道交通系统的应用 以下是在轨道交通应用的实物: CPUNXP LS1028A架构双核Cortex-A72主频1.5GHzRAM2GB DDR4ROM8GB eMMCOSUbuntu20.04供电DC 12V工作温度-40℃~ 80℃ 功能数量参数Display Port≤1路支持DP1.3…...
实现字符串反转函数
实现字符串反转 #include <stdio.h> #include <string.h>void reverse(char *str) {int len = strlen(str);...
抽检监测实施
声明 本文是学习GB-T 42893-2023 电子商务交易产品质量监测实施指南. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件提供了开展电子商务交易的有形产品质量监测的总则,监测准备、监测实施、监测效果评价 与反馈等过程指导…...
C++中的静态库与动态库
文章目录 静态库构建静态库 动态库构建动态库 它们的不同参考文章 单独提这个 库,我想我们在coding过程中,可能也会知道一两个词,如 标准库、xx库等。库作为一组已编写好、组织好的、可复用的资源接口,可以被用于其他程序。很不…...
UGUI 绘制线段
描述 点击鼠标左键在屏幕上绘制线段 准备 VertexHelper 网格绘制工具类向量、叉乘RectTransformUtility.ScreenPointToLocalPointInRectangleSetVerticesDirtyOnPopulateMesh 思路 鼠标按下,记录线段起点;鼠标持续按下,记录鼠标当前帧的…...
详细学习Mybatis(2)
详细学习Mybatis(2) 一、Mybatis核心配置文件详细解释1.1 environment(环境)1.2 事务管理器(transactionManager)1.3、dataSource(数据源)1.4、properties1.5、mapper 一、Mybatis核…...
LinkedList与链表
目录 一、Arraylist的缺陷 二、链表 2.1 链表的概念和结构 2.2 链表的实现 三、链表面试题 3.1 删除链表中所有值为val的节点 3.2 反转一个单链表 3.3 链表的中间节点 3.4 将有序链表合并 3.5 输出倒数第k个节点 3.6 链表分割 3.7 链表的回文结构 3.8 找两个链表的公共节…...
纳米软件芯片自动化测试系统测试电源芯片稳压反馈的方法
在一些电源芯片或稳压芯片中,通常内部都会有稳压反馈电路,这些电路可以将输入电压通过内部调整后输出一个稳定的输出电压,以满足电路中的稳定电源需求。也就是说芯片的稳压反馈就是内部稳压反馈电路中的电压。 芯片稳压反馈原理介绍 稳压反馈…...
微信小程序之项目基本结构、页面的基础及宿主环境
文章目录 前言一、基本组成结构基本组成小程序页面的组成部分JSON配置文件作用 二、页面基础pagesWXML和HTML的区别WXSS和CSS的区别小程序中js文件分类 三、小程序宿主环境总结 前言 微信小程序的项目基本结构、页面的基础及宿主环境 一、基本组成结构 基本组成 新建一个微信…...
C/C++鸡尾酒疗法 2023年5月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析
目录 C/C鸡尾酒疗法 一、题目要求 1、编程实现 2、输入输出 二、解题思路 1、案例分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 C/C鸡尾酒疗法 2020年6月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 鸡尾酒疗法,原指“高效抗…...
人工智能及大模型简介
一、人工智能介绍 人工智能(Artificial Intelligence),英文缩写为AI。它试图赋予机器智能的能力,使它们能够像人类一样思考、学习和做出决策。它的核心要素是数据、模型和算力。 数据是人工智能的基础,数据的质量和…...
基于springboot消防员招录系统
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…...
手把手教你制作登录、注册界面 SpringBoot+Vue.js(cookie的灵活运用,验证码功能)
一、用户登录界面 实现思路:用户在界面输入用户名和密码传入变量。用post方法传输到后端,后端接收整个实体对象。将用户名提取出。在dao层方法中通过select注解查询,返回数据库对应的数据对象。如果返回为空则return false。不为空则通过比对…...
C++ Qt零基础入门进阶与企业级项目实战教程与学习方法分享
Qt是一个卓越的客户端跨平台开发框架,可以在Windows、Linux、macOS进行客户端开发,无缝切换,一统三端;当然除了桌面端,在移动端的早期,Qt也展现了其多才多艺,在Android和ios也可以使用Qt编写app…...
TypeScript学习记录
一、TS开发环境的搭建 1、下载并安装node.js 2、使用npm全局安装typeScript 进入命令行输入:npm i -g typescript 3、创建一个ts文件 4、使用tsc对ts文件进行编译 进入命令行进入ts文件所在目录执行命令:tsc 文件名.ts 二、TS基本变量 1、类型声…...
vue内置组件Transition的详解
1. Transition定义 Vue 提供了两个内置组件,可以帮助你制作基于状态变化的过渡和动画: <Transition>会在一个元素或组件进入和离开 DOM 时应用动画。 <TransitionGroup> 会在一个 v-for 列表中的元素或组件被插入,移动࿰…...
中秋节听夜曲,Android OpenGL 呈现周董专属的玉兔主题音乐播放器
概述 前几天发现QQ音乐有个好玩的功能,为用户提供了多种 播放器主题,其中 原神 的主题让我眼前一亮: 当然,诸如 换肤、主题 类的功能已经屡见不鲜,但这类沉浸式播放器的听歌体验确实不错。 见猎心喜,正好…...
008_第一代软件系统架构
第一代软件系统架构 文章目录 第一代软件系统架构项目介绍软件架构和软件构架系统框架硬件组成运行系统基础库软件层 系统架构 关键字: Qt、 Qml、 关键字3、 关键字4、 关键字5 项目介绍 欢迎来到我们的 QML & C 项目!这个项目结合了 QML&…...
oracle客户端的安装(SQL Developer)
参考资料 软件首页:https://www.oracle.com/database/sqldeveloper/ 官方文档:https://docs.oracle.com/en/database/oracle/sql-developer/ 下载地址:https://www.oracle.com/database/sqldeveloper/technologies/download/ 安装指南&#…...
SEO_如何通过内容优化有效提升SEO效果(353 )
SEO内容优化:如何通过高质量内容提升SEO效果 在当今的互联网时代,搜索引擎优化(SEO)已经成为了每一个网站运营者必须掌握的技能。而其中,内容优化是提升SEO效果的关键。好的内容不仅能吸引更多的访问者,还…...
OpenClaw+SecGPT-14B:个人安全实验室自动化搭建全指南
OpenClawSecGPT-14B:个人安全实验室自动化搭建全指南 1. 为什么需要自动化安全实验室 作为一名长期从事安全研究的工程师,我深刻体会到传统手工分析的低效与局限。每次分析新样本时,都需要重复搭建环境、配置工具、收集威胁情报,…...
QQ空间时光胶囊:用GetQzonehistory打造你的数字记忆保险箱
QQ空间时光胶囊:用GetQzonehistory打造你的数字记忆保险箱 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 当我们在社交平台上记录生活点滴时,可曾想过这些数字足…...
NaViL-9B多模态实战:社交媒体长图理解+争议点识别+评论生成
NaViL-9B多模态实战:社交媒体长图理解争议点识别评论生成 1. 平台简介 NaViL-9B是上海人工智能实验室研发的原生多模态大语言模型,具备强大的文本理解和图像分析能力。与单一模态模型不同,NaViL-9B能够同时处理文字和图片输入,实…...
Cursor Free VIP破解指南:智能绕过AI编程助手使用限制的完整方案
Cursor Free VIP破解指南:智能绕过AI编程助手使用限制的完整方案 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reache…...
除螨仪哪款好?除螨仪哪个品牌最好?内行人揭秘米家、希亦、友望等除螨仪十大品牌排名,挑选不踩雷!
在选购除螨仪时,很多朋友会问:除螨仪哪个牌子好?现在市面上的除螨仪真的五花八门,不少商家打着“紫外线深层杀菌”“强力拍打彻底除螨”的旗号,实则是偷工减料的不专业产品。用起来要么拍打力度弱、吸力不足࿰…...
Leader让我带5个外包,出了问题算我的,绩效好了算团队的,每天当保姆还不如自己写,管理岗这个坑谁爱跳谁跳
看到一哥们吐槽,说leader让他带5个外包,出了问题算他的,绩效好了算团队的,每天当保姆还不如自己写代码。看完我直接笑出声了——不是觉得好笑,是太真实了,笑的是自己也经历过。说实话,这种事在互…...
开源大模型新范式:Pixel Epic智识终端镜像免配置部署详细步骤
开源大模型新范式:Pixel Epic智识终端镜像免配置部署详细步骤 1. 产品概览 Pixel Epic智识终端是一款基于AgentCPM-Report大模型构建的创新研究报告辅助工具。它将枯燥的科研工作转化为一场像素风格的RPG冒险,让用户以游戏化的方式完成专业报告撰写。 …...
文墨共鸣部署案例:中小企业低成本部署水墨风语义分析SaaS前端
文墨共鸣部署案例:中小企业低成本部署水墨风语义分析SaaS前端 1. 项目介绍与价值 文墨共鸣是一个将深度学习技术与传统水墨美学完美结合的语义分析系统。这个项目专门为中文文本设计,能够智能分析两段文字之间的语义相似度,判断它们是"…...
Qwen3.5-35B-A3B-AWQ-4bit企业降本增效案例:替代人工审核10万+商品图的自动化方案
Qwen3.5-35B-A3B-AWQ-4bit企业降本增效案例:替代人工审核10万商品图的自动化方案 1. 企业面临的商品图审核挑战 在电商行业,商品图片审核是一项繁重但至关重要的工作。以某大型电商平台为例,每天需要审核超过10万张商品图片,传统…...
