% 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 在后续的处 理器中,也在硬件上对一些攻击做出了防御。\supercite{intel-9900k} 已有的基于软件的解决方法,存在性能开销大,防御的攻击种类单一等缺点。因 此也有研究,尝试通过微体系结构的设计,低开销地防御 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