RISC-V 规范如何管理未决异常?

How are pending exceptions managed by the RISC-V specification?

我正在使用 RISC-V 规范,但遇到了未决 interrupts/exceptions 的问题。我正在阅读 2017 年 5 月 7 日出版的第二卷 1.10 版。

在 3.1.14 节中,描述寄存器 mipmie 说:

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 之类的寄存器,但用于异常)。

但是,上面引用的段落表明了一些不同的东西。 我的问题是:

  1. RISC-V 中是否存在未决异常?
  2. 如果是,怎么可能处理完中断后异常还能处理,而且没有被遗忘?

根据我的选择,RISCV-V 中有未决的例外情况,完全按照您所说的原因。这是一个语义问题,如果两个事件同时发生,并且一个被推迟,那么它一定是挂起的。必须考虑到异步事件(中断)与陷阱同时发生的可能性,并且(根据第 3.1.14 节)异步事件具有优先权。根据实现情况,在这种情况下不需要保存任何状态,在处理中断后,触发陷阱的指令是re-fetched,并适时导致异常。在我看来3.1.14节描述了异步事件的序列化。