
_START_ARTICLE_
冒险 (计算机体系结构)
_START_SECTION_
背景
_START_PARAGRAPH_
指令在一个流水线处理器中的执行被分为若干阶段，因此在一个时刻有多条指令处于流水线的不同阶段上被处理。如取操作数、执行等等。Intel的Pentium就是处理器流水线。有的处理器进一步是指令乱序执行，如Intel的Pentium Pro开创的Intel P6微体系结构。指令的乱序执行就会引入一些危险的情况。
_START_SECTION_
例子
_START_PARAGRAPH_
i1. R2 <- R1 + R3 _NEWLINE__NEWLINE_i2. R4 <- R2 + R3_NEWLINE_第一个指令是计算一个值，并将其储存在R2，而第二个指令是使用这个值计算结果并储存在R4，但是在我们拿出第二步的操作数时，第一步的结果还未被储存。因此我们具有一种数据相关性。_NEWLINE_我们可以说那有 一种数据依赖性对于指令i2，他依赖于指令i1的完成。
_START_SECTION_
结构冒险
_START_PARAGRAPH_
结构冒险是指多条指令同时要访问处理器一处硬件。典型例子是一个存储单元被一条指令取操作数同时另一条指令要写入结果。
_START_SECTION_
控制冒险（分支冒险）
_START_PARAGRAPH_
指令流水时，处理器遇到分支指令，不能在流水开始阶段就判断出分支结果。
_START_SECTION_
流水线冒泡
_START_PARAGRAPH_
流水线冒泡，也称作流水线停顿，可以同时解决上述3种冒险。指令译码时如果控制器发现可能存在冒险，就插入NOP指令。这样在有风险的指令进入流水线时，上一条指令已经在流水线中经过了充分多的周期，从而化解了冒险。如果插入的NOP的数量等于流水线的级数，那么处理器就排空了整个流水线。这被称为冲刷流水线（flushing the pipeline）。