什么是计算机体系结构中的受保护执行?

守卫处决是一种消除手段;至少部分是条件分支。这个想法是在架构中引入条件操作指令并使用它们来替换条件分支。条件操作指令称为保护指令。受保护的指令由两部分组成,称为保护的条件部分和作为传统指令的操作部分。例如,它可以表示为以下形式 -

(guard) instruction

受保护指令的执行取决于以下条件:如果指定的保护为真,则执行相关指令;如果守卫结果是假的,则指令的行为就像一个 NOP。

例如,α 架构提供了条件移动指令,这些指令是受保护的指令,具有以下语法和语义(DEC,1992) -

cmovxx ra.rq, rb.rq, rc.wq
cmovxx ra.rq, #b.ib, rc.wq

在哪里

xx 表示条件

ra.rq 是存储在寄存器 ra 中的整数、只读 64 位操作数

rb.rq 是一个整数,只读的 64 位操作数,存储在寄存器 rb 中

rc.wq 是存储在寄存器 rc 中的整数、只写 64 位操作数

#b.ib 是一个整数 64 位文字

该指令操作如下。注册 ra 被测试。

指令助记符指定受保护执行的条件 -

cmoveq // cmove 如果寄存器 ra 的内容等于 0

cmovge // cmove 如果寄存器 ra 的内容大于或等于 0

cmovgt // cmove 如果寄存器 ra 的内容大于零

cmovlbc // 如果寄存器 ra 的低位清零则 cmov

cmovlbs // 如果设置了寄存器 ra 的低位,则 cmovlbs

cmovle // 如果寄存器 ra 的内容小于或等于 0,则 cmov

cmovlt // cmove 如果寄存器 ra 的内容小于零

cmovne // cmove 如果寄存器 ra 的内容不等于 0

通过使用具有在相应条件分支中指定的相反条件的受保护指令,可以消除前向条件分支。例如,考虑代码序列

beq ra, label // if (ra)=0 分支到“标签”
or rb, rb, rc // else move (rb) into rc

SPARC V9 (1994) 也提供了一些类似的条件移动指令。HP Precision Architecture (1985) 以比 DEC α 更全面的方式引入了受保护的指令。这里,所有整数操作指令都是以下形式的保护指令

opcode.cond operands

给定的条件 (cond) 与操作的结果有关。如果指定条件为真,例如结果为正,则以下指令无效。

有两种类型的保护执行,例如完全保护和限制保护。在完全保护中,假定所有指令都受到保护,而在受限保护中,只有操作指令(ALU 指令)具有保护形式。

这种受限制的保护形式考虑到这样一个事实:在现有体系结构中,指令代码空间通常被压缩,并且在大多数情况下,只有少数额外位可用于指定保护条件。