RISC-V 规范如何管理未决异常?
How are pending exceptions managed by the RISC-V specification?
我正在使用 RISC-V 规范,但遇到了未决 interrupts/exceptions 的问题。我正在阅读 2017 年 5 月 7 日出版的第二卷 1.10 版。
在 3.1.14 节中,描述寄存器 mip
和 mie
说:
Multiple simultaneous interrupts and traps at the same privilege level are handled in the following decreasing priority order: extern interrupts, software interrupts, timer interrupts, then finally any synchronous traps.
在那之前我认为例外情况,例如JAL
/JALR
指令上的未对齐指令提取异常将立即由陷阱处理,因为
a)没有办法继续执行你的指令流和
b) 没有描述异常如何挂起,即规范中没有描述可以管理异常状态的概念(例如 mip
之类的寄存器,但用于异常)。
但是,上面引用的段落表明了一些不同的东西。
我的问题是:
- RISC-V 中是否存在未决异常?
- 如果是,怎么可能处理完中断后异常还能处理,而且没有被遗忘?
根据我的选择,RISCV-V 中有未决的例外情况,完全按照您所说的原因。这是一个语义问题,如果两个事件同时发生,并且一个被推迟,那么它一定是挂起的。必须考虑到异步事件(中断)与陷阱同时发生的可能性,并且(根据第 3.1.14 节)异步事件具有优先权。根据实现情况,在这种情况下不需要保存任何状态,在处理中断后,触发陷阱的指令是re-fetched,并适时导致异常。在我看来3.1.14节描述了异步事件的序列化。
我正在使用 RISC-V 规范,但遇到了未决 interrupts/exceptions 的问题。我正在阅读 2017 年 5 月 7 日出版的第二卷 1.10 版。
在 3.1.14 节中,描述寄存器 mip
和 mie
说:
Multiple simultaneous interrupts and traps at the same privilege level are handled in the following decreasing priority order: extern interrupts, software interrupts, timer interrupts, then finally any synchronous traps.
在那之前我认为例外情况,例如JAL
/JALR
指令上的未对齐指令提取异常将立即由陷阱处理,因为
a)没有办法继续执行你的指令流和
b) 没有描述异常如何挂起,即规范中没有描述可以管理异常状态的概念(例如 mip
之类的寄存器,但用于异常)。
但是,上面引用的段落表明了一些不同的东西。 我的问题是:
- RISC-V 中是否存在未决异常?
- 如果是,怎么可能处理完中断后异常还能处理,而且没有被遗忘?
根据我的选择,RISCV-V 中有未决的例外情况,完全按照您所说的原因。这是一个语义问题,如果两个事件同时发生,并且一个被推迟,那么它一定是挂起的。必须考虑到异步事件(中断)与陷阱同时发生的可能性,并且(根据第 3.1.14 节)异步事件具有优先权。根据实现情况,在这种情况下不需要保存任何状态,在处理中断后,触发陷阱的指令是re-fetched,并适时导致异常。在我看来3.1.14节描述了异步事件的序列化。