Risc V 中的异常和中断?

exceptions vs interrupts in RiscV?

我读到异常是由指令引发的,而中断是由外部事件引发的。

但是有几件事我不明白:

  1. 哪种类型我们立即停止,哪种类型让当前代码行结束?

  2. 在这两种情况下,在完成 1 之后我们 运行 下一个程序,对吗?

不同作者使用不同的术语。

软件引起的异常和外部中断都使用硬件异常机制。

In which type we stop immediately and in which we let the current line of code finish?

处理器在一定程度上可以满足其设计者的要求。

如果有外部中断,处理器可能会选择在接受中断之前完成一些正在进行的工作。

如果有软件引起的中断,处理器根本无法执行该指令(或之后的任何指令),必须中止其执行,并在不完成违规指令的情况下接受异常。

In both cases and after doing 1 we run the next program, is that right?

在外部中断的情况下,最有效的方法是恢复被中断的程序,因为该进程的高速缓存和页表很热。但是,外部中断可能会更改另一个更高优先级进程的可运行状态,或者可能会结束被中断进程的时间片,这表明另一个进程现在应该获得 CPU 时间而不是被中断的进程。

在软件导致异常的情况下,它可能是不可恢复的情况(空指针取消引用),在这种情况下,是的,另一个进程在 CPU 之后。这可能是可恢复的情况,例如 I/O 请求或页面错误。如果处理这种情况需要与外围设备接口,这可能会阻止被中断的进程,因此另一个进程将获得一些 CPU 时间。