信号 vs 异常 vs 硬件中断 vs 陷阱



我读了这个答案,我想我有一个清晰的想法。但是这个答案又让我感到困惑。

有人可以清楚地了解信号,异常,硬件中断和陷阱之间的区别吗?

此外,我想知道这些块中哪个块 CPU 抢占内核代码?

示例会有所帮助。

中断由硬件为处理器内核外部的事件生成。 这些本质上是异步的,这意味着处理器不知道何时会生成中断。这些也称为硬件中断。示例:键盘在屏幕上键入字符时生成的中断,或定时器中断。

•异常:当处理器在执行指令时检测到错误情况并被归类为故障陷阱中止时,会发生异常,具体取决于它们的报告方式以及导致异常的指令是否可以在不丢失程序或任务连续性的情况下重新启动。(这些技术术语至少在x86上使用,可能是其他体系结构或一般使用。 示例:除以零或页面错误。

陷阱:基本上是告诉内核从用户模式切换到内核模式的指令。示例:在系统调用期间,TRAP 指令将强制内核代表进程在内核内执行系统调用代码(内核模式(。 陷阱是一种例外.
x86int 0x80"软件中断"指令是一个陷阱,不像外部中断。 x86 对中断和异常使用单个处理程序表;其他《国际审计准则》也可以这样做。

有些人更普遍地使用这个术语,作为"例外"的同义词。 例如,您可能会说"MIPSadd会在有符号溢出时捕获,因此编译器始终使用addu"。

•信号:信号由内核或进程(kill系统调用(生成。它们最终由操作系统内核管理,操作系统内核将它们传送到目标线程/进程。例如,除以零指令将导致内核向运行它的进程传递 SIGFPE 信号(算术异常(。 (例如,x86 #DE 错误由内核处理,为当前进程生成软件 SIGFPE。

<小时 />

相关:

  • 发生中断时,管道中的指令会发生什么情况? - @Krazy Glew的回答还使用英特尔定义定义了一些术语。
  • 如果段错误不可
  • 恢复,为什么它们被称为错误(而不是中止(? - 段错误是页面错误的特殊情况,通常是可恢复的。 即使来自用户空间的无效页面错误也不会使内核崩溃,因此从这个意义上说它是可以恢复的。

最新更新