100 likes | 213 Views
MIPS Architecture. Leilei Wang 2011.09.08. 异常. 外部事件 存储器地址转换异常 其它需要内核干预的非常情况 程序或硬件检测到的错误 其它需要内核干预的非常情况 程序或硬件检测到的错误 数据完整性问题 系统调用和自陷. 精确异常. 精确异常( precise exeption ) - 在一个精确异常的 CPU 上,任何异常发生时,我们都指向一条指令(异常受害指令)。在该指令之前的所有指令都执行完毕,但是受害指令及其后续指令就好像从来没有开始一样,当异常为精确的时候,处理异常的软件就可以忽略 CPU 实现的时序影响
E N D
MIPS Architecture Leilei Wang 2011.09.08
异常 • 外部事件 • 存储器地址转换异常 • 其它需要内核干预的非常情况 • 程序或硬件检测到的错误 • 其它需要内核干预的非常情况 • 程序或硬件检测到的错误 • 数据完整性问题 • 系统调用和自陷
精确异常 • 精确异常(precise exeption) - 在一个精确异常的CPU上,任何异常发生时,我们都指向一条指令(异常受害指令)。在该指令之前的所有指令都执行完毕,但是受害指令及其后续指令就好像从来没有开始一样,当异常为精确的时候,处理异常的软件就可以忽略CPU实现的时序影响 • 明确的罪证:EPC都指向一个正确的地方,异常处理之后从该处开始重新执行。 • 异常出现在指令序列中:早期发现的异常并不立即采取措施 • 后继指令无效:处于EPC中的受害指令之后的指令已经开始,但是可以保证这些指令就像异常没有发生一样,根本就不影响到以后从EPC重新开始的后继执行过程
非精确异常 • MIPS CPU中的乘法器 • 异常之前执行的最后一条指令就是受害指令的前一条。如果该异常不是中断,受害指令既是引发异常的指令 • 内插至少两条非乘法指令于mflo/mfhi和mult之间
异常向量 • 中断向量化:CISC处理器由硬件来分析异常,根据异常类型把CPU发送到不同的入口点,甚至连中断都根据哪个中断输入信号激活而在不同的入口点处理 • 所有的异常入口点都位于MIPS存储器影像中不作地址转换的区域,不要高速缓存的入口处位于kseg1,需要高速缓存的位于kseg0
异常处理过程 • 引导:给你自己腾出足够的空间能够做你想要的,而且不要覆盖被中断的程序的重要数据 • 处理不同的异常:查询Cause(ExcCode),允许操作系统为不同的异常定义不同的函数 • 构造异常处理环境:复杂异常处理程序使用高级语言书写,可能希望使用标准库函数。你将不得不提供一块堆栈存储区,保存任何CPU寄存器可能被中断的程序和被调用的例程允许改变的寄存器 • 处理异常 • 准备返回:保存的寄存器得到恢复,通过把SR改回到刚发生异常后的值,CPU得以返回到其安全状态(内核模式,异常关闭) • 从异常返回:
嵌套异常 • 在你的异常处理例程中进一步的异常,称为嵌套异常 • 异常帧 • 嵌套的多个异常帧通常安排在一个堆栈上 • 中断发生了可以使用软件单个屏蔽掉以满足优先级规则,用SR(IE)可以一次性屏蔽全部中断,或者通过异常级位隐式屏蔽单个中断。
中断 • MIPS CPU中的中断资源 • 实现中断优先级临界区,禁止中断,信号量
中断资源 • 任何输入信号的电平在每个周期采样一次,如果使能就会导致异常。 • 全局中断使能位SR(IE)必须设置为1 • SR(EXL)和SR(ERL)异常级,错误级位,如果置位会禁止中断 • SR还有八个中断屏蔽位SR(IM),Cause寄存器中的每个中断各一位。