TRAP 和异常的区别

cro*_*mmy 1 operating-system exception os-trap

参加操作系统课程。所以我知道陷阱和异常都可以被视为软件中断......所以它们都是内部的和同步的。但是我似乎无法弄清楚这两个定义之间的区别。因此,如果有人不介意解释并提供一些示例,我们将不胜感激。

谢谢。

Bre*_*dan 6

有中断 - 导致 CPU 从表(例如 n 中断向量表)开始执行代码的事情。

中断可以根据触发它们的原因分为几类:

  • 异常 - 由 CPU 本身触发
  • IRQs - 由外部硬件(例如网卡)触发
  • 软件中断 - 由正在运行的代码显式触发
  • IPI(处理器间中断)——由不同的 CPU 触发

异常可以进一步细分为子类别:

  • aborts - 阻止被中断代码继续的事情。这些是表明存在重大问题的事情 - 例如被零除、硬件故障等。
  • 陷阱 - 不会阻止被中断代码继续的事情。这些可用于调试、虚拟内存管理等。

大多; 陷阱和异常之间的区别就像汽车和车辆之间的区别(陷阱是一种异常,汽车是一种类型的车辆;但是有些异常不是陷阱,有些车辆可以不是汽车)。

所以我明白陷阱和异常都可以被认为是软件中断

这可能是错误的(如果您使用的是英特尔的术语,那肯定是错误的)——软件中断是一种中断,而不是一种异常。一个很好的例子是80x86 上的int3指令和int 3指令之间的区别。在int3触发一个断点异常(陷阱),而int 3在于将可能(取决于OS)导致一般性保护故障(因违反“描述符权限级别”限制的软件中断(不是一个陷阱,而不是一个例外)在相应的中断描述符表的条目上)。