zzz22333 (@a909204013)奔跑吧Linux内核阅读记录——章1 处理器架构 中发帖

一条指令在流水线的过程? 
指令首先进入流水线(pipeline)的前端(front-end),包括预取(fetch)和译码(decode),经过分发(dispatch)和调度(schedule)后进入执行单元,最后提交执行结果。
所有的指令采用顺序方式通过前端,并采用乱序的方式进行发射,然后乱序执行,最后用顺序方式提交执行结果。


既然指令是顺序提交结果,那为什么还需要内存屏障?
在CPU0上执行下面操作:
data = 1; // 操作1
flag = 1; // 操作2

在单核的角度上,乱序执行 + 顺序提交 确保了单核程序的局部正确性。
在多核的角度上,由于MESI协议的store buffer特性和invaild queue特性,可能会先观察到flag=1,后观察到data=1,从而误读旧data值。


顺序提交的必要性?

保...