异常和中断的区别

异常和中断的区别

  • 中断
  • 异常
  • 中断和异常的相同点
  • 中断和异常的区别

异常和中断的区别_第1张图片

中断

中断是由硬件设备产生的,而它们从物理上说就是电信号,之后,它们通过中断控制器发送给CPU,接着CPU判断收到的中断来自于哪个硬件设备(这定义在内核中),最后,由CPU发送给内核,有内核处理中断。下面这张图显示了中断处理的流程:
异常和中断的区别_第2张图片

异常

异常包括很多方面,有出错,有陷入,也有可编程异常

  1. 出错保存的EIP指向触发异常的那条指令。因此,当从异常返回时,出错会重新执行那条指令,如我们熟悉的缺页异常,由于是fault,所以当缺页异常处理完成之后,还会去尝试重新执行那条触发异常的指令。
  2. 陷入保存的EIP指向触发异常的那条指令的下一条指令,陷入不会重新执行因为异常的指令。陷入的最主要的应用是在调试中,被调试的进程遇到你设置的断点,会停下来等待你的处理,等到你让其重新执行了,它当然不会再去执行已经执行过的断点指令。
  3. 可编程中断:这类中断可由编程者用int指令来触发。在Linux中,使用了一个,也是唯一的一个可编程中断,就是int 0x80 系统调用。硬件对可编程中断的处理与对trap的处理类似,即从这类异常返回时也是返回到触发异常的下一条指令。

异常是由CPU产生的,同时,它会发送给内核,要求内核处理这些异常,下面这张图显示了异常处理的流程:
异常和中断的区别_第3张图片

中断和异常的相同点

  1. 最后都是由CPU发送给内核,由内核去处理。
  2. 处理程序的流程设计上是相似的。

中断和异常的区别

  1. 产生源不相同,异常是由CPU产生的,而中断是由硬件设备产生的。
  2. 中断是异步的,这意味着中断可能随时到来;而异常是CPU产生的,所以,它是时钟同步的。
  3. 当处理中断时,处于中断上下文中;处理异常时,处于进程上下文中。

你可能感兴趣的:(操作系统,c++,linux)