linux - 信号、异常、硬件中断、陷阱

标签 linux kernel cpu interrupt

我读到this回答,我想我已经有了一个清晰的想法。但后来this答案再次让我困惑。

有人可以给我一个清晰的图片来说明信号、异常、硬件中断和陷阱之间的区别吗?

另外,我想知道这些阻止CPU抢占的内核代码中有哪些?

示例会很有帮助。

最佳答案

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

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

陷阱:基本上是一条指令,告诉内核从用户模式切换到内核模式。示例:在系统调用期间,TRAP 指令将强制内核代表进程执行内核内部(内核模式)的系统调用代码。 陷阱是一种异常。
x86 int 0x80“软件中断”指令是一个陷阱,与外部中断不同。 x86 对中断和异常使用单个处理程序表;其他 ISA 也可能这样做。

有些人更普遍地使用这个术语,作为“异常”的同义词。例如您可能会说“MIPS add 将捕获有符号溢出,因此编译器始终使用 addu。”

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


相关:

关于linux - 信号、异常、硬件中断、陷阱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45485093/

相关文章:

c++ - 防止 Ctrl-C 关闭程序

cpu - 为什么乱序 CPU 不麻烦?

linux - 文件所有者 :group doesn't change at location/proc/<pid>/after setuid()?

c - 为什么向串口发送字符需要延时?

c - 有哪些可用的 KPRIORITIES?

linux - 从 procfile 中删除

linux - 单元格/BE : make use of the SPEs under Linux

logic - 计算 ALU 中的溢出标志

linux - 在 .cshrc 中设置 PATH 无效

linux - Linux 内核是如何测试的?