全部博文(42)
分类:
2010-10-21 16:02:55
第七章 陷阱
陷阱对于操作系统是一个控制的矢量转移,它要通过一个特殊的陷阱表,陷阱表包括每个陷阱处理的前4个程序。表的基址由操作系统建立,通过在IU状态寄存器中写入陷阱基址(陷阱基址寄存器)建立。表内的位移在每个陷阱的种类决定半是给硬件陷阱,另一半给由陷阱程序产生的软件陷阱。
陷阱像一个意想不到的程序调用。他去减小当前窗口指针到下一个寄存器窗口,使硬件把陷阱程序计数器写入新窗口的两个本地寄存器。一般来说,陷阱处理程序把PSR的值保存到另一个本地寄存器,并且在新窗口中免费使用其他5个本地寄存器。
陷阱可能由一个指令引用异常或者不和特殊指令直接有关的外部中断要求引的
在开始执行每个指令之前,IU选择最高优先级的异常或中断要求,如果有的则产生一个陷阱。
不可恢复的机器检查错误异常是因为检查到硬件故障,它是由于本身的特性,在异常发生时处理器的状态不被储存。因为处理器状态不被存储,在这样的异常之后的操作不可恢复。不可恢复机器检查错误是相互依赖实施的,一个可能的这种错误的例子是一个总线奇偶错误。
7.1 陷阱种类
异常或中断请求引起三种类型的陷阱:
精密陷阱,延时陷阱,中断陷阱。
精密陷阱
精密陷阱由特殊的指令引起,发生在任何陷阱诱导指令引起的可视程序状态被改变之前,当精密陷阱发生时,要注意一些情况:
(1) 保存在r[17]的pc指针指向引起陷阱的指令,保存在r[18]里的下一个pc指向要被执行的指令。
(2) 在引起陷阱的指令之前的指令已经执行完毕。
(3) 在引起陷阱发生的指令之后的指令没有执行。
延时陷阱
延时陷阱也是由特殊的指令引起的,但不像精密陷阱,延时陷阱可能发生在可视程序状态改变之后。延时陷阱可能由陷阱诱导指令本身引起或者由它之后的一条或多条指令引起。
延时陷阱可能由已经执行的陷阱诱导指令之后的一条或多条指令引起的,但延时陷阱一定发生在任何依赖于陷阱诱导指令的指令执行之前。也就是说,延时陷阱不能延时超过源寄存器,目的寄存器,条件代码,或任何能被陷阱诱导指令改变的可视软件机器状态指定的指令的执行。
延时陷阱可能不会延时超过精密陷阱,除了浮点异常或处理器异常,这些可以延时超过精密陷阱。
有关特殊的延时陷阱应用,一定有:
(1)引起一个潜在的突出的延时陷阱异常的指令将作为陷阱。