% Copyright (c) 2014,2016,2018 Casper Ti. Vector
% Public domain.

\chapter{绪论}\label{sec:intro}

\section{选题背景与研究意义}

现代微处理器使用了超标量流水线、乱序执行等设计，通过利用程序内的指令级
并行性，掩盖指令的延迟的方法，提高处理器的指令执行效率。乱序执行是处理
器对指令进行动态调度的技术，它允许一条指令在满足数据依赖后即可进入执行
单元执行，而无需等待程序序列之前的指令。超标量处理器设计多条执行流水线，
使得处理器每一周期可以执行多条指令。由于程序中大量出现转移指令，计算转
移方向和目标之前可能有较长延迟，影响流水线的利用率，因此处理器使用了转
移预测和推测式执行技术。处理器可以根据转移预测得出的分支方向和转移目标，
从预测的目标地址处或取指令并执行。

由于处理器在执行程序的过程中，处理器可能接收外部中断，指令执行可能产生
异常，因此乱序执行的处理器使用一个称为重排序缓冲的队列，按程序序列保存
流水线中的指令，在产生中断或异常后，将产生异常的指令及其之后执行的指令
产生的效果撤销。在使用推测式执行的处理器中，处理器在预测错误时，由该预
测产生的推测式执行的指令，也需要类似的错误恢复机制撤销。处理器中的错误
恢复机制使得处理器在体系结构层次上的状态保持正确，从而程序正确运行。

2018年公布的 Meltdown\supercite{meltdown} 和
Spectre\supercite{spectre} 攻击使人们发现，虽然处理器在执行指令产生异
常，或推测式执行错误后，通过恢复可以使体系结构层次上的状态保持正确，但
是这些错误执行的指令在微架构中产生了副作用，并且可能泄露系统中的秘密数
据，破坏了系统的安全。从 Meltdown 和 Spectre 被发现之后，Intel、AMD、
ARM等处理器设计厂商，和Google、Microsoft等软件厂商，均提出了软件补丁或
处理器微码更新，用于减轻 Meltdown 和 Spectre 的威胁。Intel 在后续的处
理器中，也在硬件上对一些攻击做出了防御。

已有的基于软件的解决方法，存在性能开销大，防御的攻击种类单一等缺点。因
此也有研究，尝试通过微架构的设计，低开销地防御 Meltdown 和 Spectre 攻
击。本文的目标是设计并实现一种微架构，防御 Spectre 攻击。

\section{研究平台与环境}

本文使用 gem5 模拟器\supercite{gem5}作为研究平台。gem5 提供了多种 CPU
模型的模拟，包括简单的单周期处理器、详细的按序流水线处理器、乱序超标量
处理器。gem5 支持 X86, ARM, Alpha, MIPS, RISC-V 等指令系统。gem5 乱序
处理器模型基于 Alpha 21264,有取指、译码、重命名、发射、执行、回写、提
交等流水线阶段，包含乱序超标量处理器中的分支预测器、指令队列、重排序缓
冲、装载存储队列等常见部件。gem5 可以详细地模拟存储系统，包括高速缓存、
DRAM、crossbar等组件，通过使用Ruby存储系统，还可以模拟自定义的缓存一致
性协议。gem5 支持同构和异构多核系统的模拟，支持对系统功耗进行建模。

\section{论文组织结构}

本文的组织结构如下：

第\ref{sec:intro}章~\nameref{sec:intro}。阐述本文的选题背景和研究意义、研究平台与环境，并简述论文
的组织结构。

第\ref{sec:attack}章~\nameref{sec:attack}。分析已经发现的 Meltdown 和
Spectre 攻击的各个变体。

第三章~\nameref{sec:defense}。对已经提出的 Meltdown 和
Spectre 攻击的软硬件防御进行分析。

第四章~\nameref{sec:mywork}。提出本文所设计的防御
Spectre 攻击的方法，并描述在 gem5 模拟器上的实现。

第五章~\nameref{sec:eval}。对本文设计的 Spectre 防御方案，进行安全性的
验证和性能分析。

第六章~\nameref{sec:conclusion}。总结本文的主要工作和研究意义，并对未来工作进行展望。

% vim:ts=4:sw=4
