diff options
Diffstat (limited to 'chap/chap4.tex')
-rw-r--r-- | chap/chap4.tex | 54 |
1 files changed, 26 insertions, 28 deletions
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} |