我正在阅读RISC-V的特权ISA手册,我发现它们严格将“中断”和“异常”和“陷阱”分开。在我的理解中,外部的异步事件是“中断”,而执行指令的意外情况是“例外”。 “陷阱”是通过“中断”和“异常”的上下文切换。

问题描述 投票:0回答:1
mie

寄存器的描述中找到了这些术语。这是桌子

表14


在我的猜测中,我认为“异常”与“软件中断”不同,因为在表中,“软件中断”和其他不间断事件(例如“指令访问访问故障”或“非法指令”)有不同的条目我认为这将是“例外”的例子。
有人可以解释这种“软件中断”到底是什么?
如果它与“异常”不同,那么
mie

注册是不承担任何“异常”的负责?

这些中断都使用相同的机制,只是以不同的方式设置原因,并通过内核进行不同的处理。 经典陷阱是

ecall

。  一个(用户)线程使

ecall

期望该指令(由内核)维修(好像是函数调用)。

这具有两个显着的低级效应:相对于该线程是同步的;为了恢复该线程,内核必须既需要服务请求操作,返回值(例如成功,某些数据或失败以及某些原因),并且还必须将线程的程序计数器推进,只是超越了

ecall

机器代码指令此类该线程在下一个指令之后恢复,模仿子例程返回/恢复行为。
compare此例外处理行为以及另一个例外,例如内存访问违规行为,这也是通过执行软件的指令中断。
在违反内存访问的情况下,内核必须确定违规行为是否是真正的违规行为,在这种情况下,该程序被认为是错误的,并且违反线程被终止,或者,如果违规行为是页面错误。

一个页面故障被认为是正常操作,可以通过使内核找到所需的虚拟内存页面并将其用于用户进程可恢复。  这可能会涉及到I/O,更改页面表条目,TLB条目等...但是,由于页面故障并未指示程序错误,并且一旦维修,用户线程就可以恢复 - 在这里,尽管可以通过重新恢复启动/重新执行(以前的)有问题的指令,而不是像
exception interrupt riscv trap
1个回答
0
投票
.

一样跳过它。

都不能“关闭”所有同步异常(例如

ecall

和内存访问违规),因为当软件线程将处理器带到需要例外的指令时,这些简直就是可选的:必须处理它们。
相反,可以启用或禁用外部中断。
SO,术语陷阱通常用于内核注意力进行操作,就像函数调用一样。  软件中断是由执行故障或机器代码指令执行(内存访问,侵犯特权等)引起的。
计时器的行为会更像是外部中断,尽管在这些系统上,计时器是内置的芯片(而不是像过去的几天一样,而不是碎屑),并且由于希望能够在当今更多的更多信息中使用计时器复杂的编程模型,它们通常具有自己的启用/禁用/禁用与芯片外中断,以轻松禁用所有其他真正的外部设备中断。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.