From ffc448a9b7fe1ebc1edc47bc8b4da361cb264f2b Mon Sep 17 00:00:00 2001
From: Iru Cai <mytbk920423@gmail.com>
Date: Tue, 28 May 2019 18:38:53 +0800
Subject: fixes

---
 chap/chap4.tex | 54 ++++++++++++++++++++++++++----------------------------
 1 file changed, 26 insertions(+), 28 deletions(-)

(limited to 'chap/chap4.tex')

diff --git a/chap/chap4.tex b/chap/chap4.tex
index b816540..38ad65d 100644
--- a/chap/chap4.tex
+++ b/chap/chap4.tex
@@ -85,6 +85,7 @@ DIFT 可以作为 Spectre 攻击的检测手段之一。Spectre 的论文中指
 据的标记均为0，为了描述方便，这里用体系结构寄存器进行描述，实际的微处理器中，数据可存放在物理寄存器、保留站、ROB等结构。
 
 \begin{table}
+\caption{分支中代码产生的 DIFT 行为}
 \begin{tabular}{|c|c|c|}
 \hline 
 指令 & 指令的语义 & DIFT 行为\tabularnewline
@@ -107,7 +108,6 @@ lea rdx, {[}rip + 0x2b425d{]} & rdx <- rip + 0x2b425d & T{[}rdx{]} <- T{[}rip{]}
  &  & T{[}rax{]} <- 1\tabularnewline
 \hline 
 \end{tabular} 
-\caption{分支中代码产生的 DIFT 行为}
 \label{tab:spectre_dift}
 \centering
 \end{table}
@@ -326,56 +326,54 @@ InvisiSpec 中，一级缓存处理 SpecLoad 和 Expose 的部分状态如
 为了维护指令的安全、推测式内存读取等信息，需要在 DynInst 类为指令添加
 新的状态和属性，添加的主要的指令状态和属性见表\ref{tab:inst_status}。
 
-\begin{table}
-\begin{tabular}{|p{0.25\textwidth}|p{0.75\textwidth}|}
+在每一周期，更新流水线中每条指令的 PrevBrsResolved 状态。在 LSQ 中，对于每一个未完成的装载指令，根据指令
+之前是否存在未决分支，判断指令是否安全，设定 ReadyToExpose 属性，取消 FenceDelay 标志。
+
+执行单元执行一条装载指令时，根据 ReadyToExpose 属性判断是否需要用
+InvisiSpec 等安全的方式执行。修改后的执行流程如图 \ref{fig:is-load}，
+LSQ 每周期都要将已转为安全指令的装载指令的验证或曝光，发送请求的
+LSQUnit::read 过程需要支持 SpecLoad 请求的发送，对地址翻译的过程做一个
+微小的修改，对 TLB 不命中的推测式执行的指令要延迟执行，防止产生 TLB 的
+侧信道。
+
+\begin{table}[htbp]
+\centering
+\caption{新增的指令状态}
+\begin{tabular}{p{0.25\textwidth}p{0.75\textwidth}}
 \hline 
 指令状态和属性 & 含义\tabularnewline
 \hline 
-\hline 
+%\hline 
 PrevBrsResolved & 记录指令之前的分支是否得出结果\tabularnewline
-\hline
+%\hline
 IsTainted & 在基于 DIFT 的检测方案中，记录指令是否依赖于被标记的寄存器\tabularnewline
-\hline 
+%\hline 
 AfterTaintedBranch & 在基于 DIFT 的检测方案中，记录指令是否在被标记的转
                     移指令之后\tabularnewline
-\hline 
+%\hline 
 L1Hit & 记录指令的 SpecLoad 请求是否命中一级缓存并且缓存内容不变，如果
         是，则不需要发送验证请求\tabularnewline
-\hline 
+%\hline 
 ExposeSent & 已发送 Expose 请求\tabularnewline
-\hline 
+%\hline 
 ExposeCompleted & Expose 已执行完成\tabularnewline
-\hline 
+%\hline 
 ValidationCompleted & 数据已验证完成\tabularnewline
-\hline
+%\hline
 NeedPostFetch & 需要再次发送 Expose 请求\tabularnewline
-\hline
+%\hline
 ReadyToExpose & 指令已确认安全，可以发送 Expose 请求，或直接用基本的方
                 式执行指令\tabularnewline
-\hline
+%\hline
 NeedExposeOnly & 只需要发送 Expose，而不需要通过再次读取数据用于验证\tabularnewline                
-\hline
+%\hline
 FenceDelay & 指令被阻止执行，直到确认安全，在 InvisiSpec 之外的执行方
              案中使用\tabularnewline
 \hline
 \end{tabular}
-\caption{新增的指令状态}
 \label{tab:inst_status}
-\centering
 \end{table}
 
-在每一周期，处理器扫描 ROB 中的每条指令，更新流水线中每条指令的
-PrevBrsResolved 状态。在 LSQ 中，对于每一个未完成的装载指令，根据指令
-之前是否存在未决分支，判断指令是否安全，设定 ReadyToExpose 属性，取消
-FenceDelay 标志。
-
-执行单元执行一条装载指令时，根据 ReadyToExpose 属性判断是否需要用
-InvisiSpec 等安全的方式执行。修改后的执行流程如图 \ref{fig:is-load}，
-LSQ 每周期都要将已转为安全指令的装载指令的验证或曝光，发送请求的
-LSQUnit::read 过程需要支持 SpecLoad 请求的发送，对地址翻译的过程做一个
-微小的修改，对 TLB 不命中的推测式执行的指令要延迟执行，防止产生 TLB 的
-侧信道。
-
 \begin{figure}[htbp]
   \centering
   \includegraphics[width=0.6\textwidth]{is-load.eps}
-- 
cgit v1.2.3

