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

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

本章首先介绍论文的选题背景，然后介绍论文的研究平台和环境，最后介绍论文的组织结构。

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

现代微处理器使用了超标量流水线、乱序执行等设计，通过利用程序内的指令级
并行性，掩盖指令的延迟的方法，提高处理器的指令执行效率。

乱序执行是处理器对指令进行动态调度的技术，它允许一条指令在满足数据依赖
后即可进入执行单元执行，而无需等待程序序列之前的指令。在乱序执行处理器
中，处理器存在多个不同的执行单元，用于同时处理多个指令。处理器使用
Tomasulo 算法\supercite{tomasulo}，可以识别指令之间的依赖关系，允许无
依赖关系的指令并行执行。

在乱序执行中，指令可以不按程序序列改变体系结构状态，在指令执行发生异常
时，发生异常之后的指令可能已经执行，使得处理器无法在处理异常后，恢复异
常发生时的体系结构状态。为了解决这个问题，处理器需要支持精确中断。现代
处理器通常使用重排序缓冲区（ROB）\supercite{preciseint}实现精确中断，
它使得指令按序提交至体系结构状态中，如果异常发生，则丢弃未提交的指令的
结果。

超标量处理器设计允许处理器平均没周期执行多于一条指令，它可以在一周期内
同时分发多个指令至不同的执行单元，从而利用程序的指令级并行性。

程序中除了数据相关，还有控制相关。程序中存在大量的分支指令，等待分支指
令执行，则后续指令在分支指令执行期间均无法执行，降低了执行单元的利用率，
导致总体性能下降。因此现代微处理器使用了推测式执行技术，在分支指令执行
结束前，根据分支预测的结果，执行预测将要执行的指令。分支预测需要预测分
支的方向和目标地址。处理器使用分支目标缓冲器（BTB）预测分支指令的方向
和目标地址\supercite{btb}。为了预测函数调用的返回地址，处理器还使用栈
结构的返回栈缓冲器（RSB）\supercite{rsb}。

为了开发出多任务系统的线程级并行性，部分处理器使用了多线程技术。同时多
线程（SMT）\supercite{smt}是一种多线程技术，它对超标量处理器做了少量修
改，使得多个线程可以共用一组执行单元，提高执行单元的利用率。

\begin{figure}[htbp]
  \centering
  \includegraphics[width=0.8\textwidth]{skylake.pdf}
  \caption{Skylake 微体系结构示意图}
  \label{fig:skylake}
\end{figure}

图\ref{fig:skylake}是 Intel Skylake 微体系结构的示意图\footnote{图片来
  自 https://mdsattacks.com/images/skylake.svg}，它是一个乱序执行超标
量处理器体系结构，每周期最多可以将 6 个微操作发射至 8 组执行单元中执行，
它的 ROB 使得流水线中可以同时存在 224 个微操作，它的分支预测器可以预测
分支的方向和目标地址，使处理器在预测的目标处取出指令至指令缓存。

2018 年公布的 Meltdown\supercite{meltdown} 和
Spectre\supercite{spectre} 攻击使人们发现，虽然处理器在执行指令产生异
常，或推测式执行错误后，通过恢复可以使体系结构层次上的状态保持正确，但
是这些错误执行的指令在微体系结构中产生了副作用，并且可能泄露系统中的秘
密数据，破坏了系统的安全。在 Meltdown 和 Spectre 之后，研究者发现了更
多相似的攻击种类，包括 Foreshadow\supercite{foreshadow}、
Fallout\supercite{fallout}、RIDL\supercite{ridl}、
ZombieLoad\supercite{zombie}。

面对这些新型攻击，Intel、AMD、ARM 等处理器设计厂商，和 Google、
Microsoft 等软件厂商，均发布了软件补丁或处理器微码更新，用于减轻这些攻
击的威胁。Intel 在后续的处理器中，也在硬件上对一些攻击做出了防御
\supercite{intel-9900k}。当前的基于软件的防御方法，均对性能造成一定的
损失，并且通常无法防御更新的攻击手段。表\ref{tab:perf_mitigation}列出
了部分已有的软件和微码防御方法，它们所防御的攻击，和造成的性能损失。
\supercite{systematic}

\begin{table}[htbp]
  \begin{tabular}{ccc}
    \hline
    防御方法 & 防御的攻击种类 & 性能损失\tabularnewline
    \hline
    KAISER & Meltdown & 0-2.6\%\tabularnewline
    Retpoline & Spectre v2 & 5\%-10\%\tabularnewline
    IBRS/IBPB/STIPB & Spectre v2 & 20\%-50\%\tabularnewline
    SSBD/SSBB & Spectre v4 & 2\%-8\%\tabularnewline
    串行化指令 & Spectre v1 & 62\%\tabularnewline
    推测式装载加固 & Spectre v1 & 29\%\tabularnewline
    \hline
  \end{tabular}
  \centering
  \caption{软件防御对性能的影响}
  \label{tab:perf_mitigation}
\end{table}

因此，通过改进微体系结构的设计，低开销地防御 Meltdown 和 Spectre 攻击，
具有重要的研究意义。本文的目标是设计一种微体系结构，防御 Spectre 攻击。

\section{研究平台与环境}

本文使用 gem5 模拟器\supercite{gem5}作为研究平台。

gem5 是一个模拟平台，由 GEMS\supercite{gems} 和 M5\supercite{m5} 两个
模拟器项目合并而成，同时具有这两个模拟器的优点。M5 提供了一个可配置的
框架，支持多种指令系统和多种 CPU模型，GEMS 则提供了一个详细而灵活的存
储系统，支持多种缓存一致性模型和互联模型。gem5 支持 X86, ARM, Alpha,
MIPS, RISC-V 等指令系统。作为一个开源的模拟器，学术界和工业界都为 gem5
的开发做出贡献，使得 gem5 称为体系结构研究中最流行的模拟器之一。

gem5 的灵活性使得研究者可以根据需要选择不同的系统模型，取得模拟速度和精
度的平衡。gem5 支持以下模型的配置：

\begin{itemize}
\item CPU 模型：gem5 支持四种不同的 CPU 模型。AtomicSimpleCPU 模拟一个
  单周期处理器，模拟速度最快。TimingSimpleCPU 在此之上增加对存储访问时
  间的模拟。O3CPU 则是一个详细的乱序执行处理器模型。
\item 系统模式：gem5 可以用系统调用模拟（SE）和全系统（FS）两种模式进
  行模拟，前者模拟大多数的系统调用，无需对操作系统和设备进行模拟，而后
  者则模拟了操作系统和设备，同时执行用户态和内核态的指令。
\item 存储系统：gem5 包含两种存储系统模型，来自 M5 的 Classic 模型容易
  配置且模拟速度快，而来自 GEMS 的 Ruby 模型则提供了一个可以精确模拟缓
  存一致性模型的存储系统模拟框架。
\end{itemize}

gem5 模拟器使用 C++ 编写，并集成了 Python，模拟器的核心功能由 C++ 实现，
而 Python 用于初始化、配置和控制模拟器。为了支持多种指令系统和缓存一致
性协议，gem5 分别使用了两种领域专用语言，指令系统描述语言
和 SLICC 在gem5 构建时转为 C++ 代码并编译，生成指令系统和缓存一致性协议
的模型代码。

最新的 gem5 还支持功耗的模拟，和 SystemC 协同模拟，同构和异构多核模拟
等特性。

\section{论文组织结构}

本文的组织结构如下：

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

第二章~\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
