TRAP和异常之间的区别

3
参加操作系统课程。我已经理解 TRAPs 和异常都可以被视为软件中断... 所以它们都是内部和同步的。然而,我似乎无法弄清楚这两个定义之间的区别。如果有人能够解释并举一些例子,那将不胜感激。谢谢。

1
两者非常相似。例外是硬件概念(例如,处理器中的除零引发异常)。而陷阱是软件对应物,指的是在异常发生后控制权被转移到操作系统(在除零后,当处理器处理异常时,适当的陷阱处理程序将被执行)。但很多人无差别地使用它们。 - undefined
2个回答

11
有中断 - 会导致CPU开始执行来自表格的代码(例如中断向量表)。
根据触发它们的原因,中断可以分为以下几类:
- 异常 - 被CPU本身触发 - IRQs - 被外部硬件触发(例如网络卡) - 软件中断 - 显式地被运行的代码触发 - IPIs(处理器间中断) - 被不同的CPU触发
异常可以进一步分为子类别:
- 中止 - 阻止中断的代码继续执行。这些是指示重大问题的事情 - 例如除以零、硬件故障等。 - 陷阱 - 不会阻止中断的代码继续执行。这些可以用于调试、虚拟内存管理等。
总的来说,陷阱和异常之间的区别就像汽车和车辆之间的区别一样(陷阱是异常的一种类型,汽车是车辆的一种类型;但有些异常不是陷阱,有些车辆不是汽车)。
“所以我理解陷阱和异常都可以被视为软件中断”可能是错误的(如果使用英特尔的术语,则肯定是错误的) - 软件中断是一种中断类型,而不是异常类型。一个很好的例子是80x86上int3指令和int 3指令之间的区别。int3触发断点异常(陷阱),而int 3是一种软件中断(不是陷阱也不是异常),这可能会导致通用保护错误(由于违反了相应中断描述符表条目上的“描述符特权级别”限制,具体取决于操作系统)。

0
陷阱由程序员使用x86指令Int触发。一旦遇到此指令,程序控制就会转移到特殊的处理程序中。 每当发生异常情况时,都会引发异常。例如,除零条件。程序控制被转移到用户定义的异常处理程序中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接