有没有觉得这个操作有点儿像我们在多线程里面用到的读写锁。在共享状态下,大家都可以并行去读对应的数据。但是如果要写,我们就需要通过一个锁,获取当前写入位置的所有权。整个 MESI 的状态,可以用一个有限状态机来表示它的状态流转。需要注意的是,对于不同状态触发的事件操作,可能来自于当前 CPU 核心,也可能来自总线里其他 CPU 核心广播出来的信号。我把对应的状态机流转图放在了下面,你可以对照着 Wikipedia 里面 MESI 的内容,仔细研读一下。为什么CPU有多层缓存缓存的故事假设你是一位六十年代的白领,在巨大的办公楼里工作,没有电脑,你需要阅读大量的文件并且交叉检索这些文档。你有一个办公桌(L1 缓存)。
桌上的文件是你正在手头处理的资料,还有一些是你最近看过的或者你准备阅读的。通常我们需要阅读文件的每一页(对应于存储单元的一个字节),但除非它们在办公桌上,文件都是作为一个整体。即只想看某一页的内容,我们也必须把整份文件抓过来。办公室里还有文件柜(L2 缓存)。这些文件柜里存放的是你最近处理过,但目前没有在使用的文件。
办公桌上的文件在用完后,通常也会放回文件柜。从文件柜里拿文件就不是顺手拈来了——你需要走过去,打开相应的抽屉,还要查目录卡片,才能找到想要的文件——不过这也还比较快了。有些时候,其他人也需要查看你的文件柜里的文件。勤杂工会推着一辆推车(环路公共汽车)在各个办公室转。如果有人在自己的文件柜没有找到相应的资料,他会写一个纸条交给勤杂工。为简化起见,假设这位勤杂工知道所有的东西放哪儿。所以当他来到你的办公室的时候,他会检查你的文件柜里是否有其他人需要的文件,如果有,就把这些文件抽出来放到车上。当他转到别的办公室,就会把找到的文件放在文件柜里,并留下收条。
电脑常见英文词汇
precedence 优先序(通常用於运算子的优先执行次序)
prefix 前置式、前序式 前置式
preprocessor 前处理器 预处理器
prime 质数 素数
primitive type 基本型别 (不同於 base class,基础类别)
print 列印 打印
printer 印表机 打印机
priority 优先权 (通常用於执行绪获得 CPU 时间的优先次序)
procedure 程序 过程
procedural 程序性的、程序式的 过程式的、过程化的
process 行程 进程
profile 评测 评测
profiler 效能(效率)评测器 效能(性能)评测器
programmer 程式员 程序员
programming 编程、程式设计、程式化 编程