陷阱和中断有什么区别?

陷阱和中断有什么区别?

如果术语对于不同的系统是不同的,那么它们在x86上意味着什么?

陷阱是用户进程中的exception。 这是由零除或无效的内存访问所造成的。 这也是调用内核例程( 系统调用 )的常用方式,因为它们的运行优先级高于用户代码。 处理是同步的(所以用户代码被挂起,然后继续)。 从某种意义上说,他们是“积极的” – 大多数情况下,代码期望陷阱发生并依赖于这个事实。

中断是由硬件(如硬盘,graphics卡,I / O端口等设备)产生的。 这些是asynchronous的(即它们不会发生在用户代码中的可预见的地方)或“被动的”,因为中断处理程序必须等待它们最终发生。

你也可以看到陷阱是一种CPU内部的中断,因为陷阱处理程序的处理程序看起来像一个中断处理程序(寄存器和堆栈指针被保存,有一个上下文切换,在某些情况下可以恢复执行) 。

陷阱中断密切相关。 陷阱是一种exception ,exception类似于中断。

英特尔x86定义了两个重叠类别,向量事件( 中断exception )和exception类( 故障陷阱 vs exception )。

本文中的所有引用均来自2016年4月版的“ 英特尔软件开发人员手册” 。 对于(确定的和复杂的)x86视angular,我build议阅读SDM有关中断和exception处理的章节。

向量事件

向量事件( 中断exception )导致处理器在保存了处理器的大部分状态(足以使得后面的执行可以继续)之后跳入中断处理程序。

exception和中断有一个ID,称为向量,它决定了处理器跳转到哪个中断处理程序。 中断描述符表中描述了中断处理程序。

中断

响应来自硬件的信号,在程序执行期间随机发生中断 。 系统硬件使用中断来处理处理器外部的事件,例如请求服务于外围设备。 软件也可以通过执行INT n指令来产生中断。

例外

处理器在执行指令时检测到错误条件(例如除零)时会发生exception 。 处理器检测到各种错误情况,包括保护违规,页面错误和内部机器故障。

例外分类

例外情况根据报告的方式以及是否可以重新启动导致exception的指令,而不会丢失程序或任务连续性而被分类为故障陷阱exception

总结: 陷阱增加指令指针, 错误不会,并放弃 '爆炸'。

陷阱

陷阱是执行陷印指令后立即报告的exception。 陷阱允许继续执行程序或任务,而不会丢失程序连续性。 陷阱处理程序的返回地址指向陷阱指令后要执行的指令。

故障

故障是一般可以纠正的exception,一旦纠正,允许程序重新启动,不失连续性。 当报告故障时,处理器将机器状态恢复到开始执行故障指令之前的状态。 error handling程序的返回地址(CS和EIP寄存器的保存内容)指向错误指令,而不是指向错误指令之后的指令。

示例:页面错误通常可恢复。 一块应用程序的地址空间可能已经从ram换出到磁盘。 当应用程序尝试访问已换出的内存时将触发页面错误。 内核可以将内存从磁盘拉到内存,并将控制权交还给应用程序。 应用程序将继续停止(在访问被换出内存的错误指令处),但是这次内存访问应该成功而没有错误。

退出

中止是一个exception,并不总是报告导致exception的指令的精确位置,并且不允许重新启动导致exception的程序或任务。 中止用于报告严重的错误,例如系统表中的硬件错误和不一致或非法的值。

边缘情况

软件调用的中断(由INT指令触发)performance为类似陷阱的方式。 指令在处理器保存其状态并跳转到中断处理程序之前完成。

一般来说,例外,故障,exception, 陷阱中断等术语都是指同一事物,被称为“中断”。

陷阱和中断的区别:

陷阱:程序员是否启动并期望将控制转移到特殊的处理程序。 (例如:80×86 INT指令就是一个很好的例子)

在哪里

中断(硬件):基于CPU外部的外部硬件事件,程序控制中断(例如:按键盘上的键或定时器芯片上的超时)

陷阱是一种特殊的中断 ,通常称为软件中断中断是涵盖硬件中断 (来自硬件设备的中断 )和软件中断 (来自软件的中断,诸如陷阱 )的更一般的术语。

陷阱被类似于程序的代码所调用,例如用于调用OS例程(即通常是同步的)。 一个中断被事件调用(很多时候硬件,比如网卡已经接收到数据,或者CPU定时器),顾名思义,中断正常的控制stream程,因为CPU必须切换到驱动程序来处理事件。

中断是系统内硬件生成的stream量变化。 中断处理程序被召唤来处理中断的原因; 控制然后返回到中断的上下文和指令。 陷阱是一个软件生成的中断。 一个中断可以用来表示I / O的完成,以避免设备轮询的需要。 陷阱可以用来调用操作系统例程或捕捉算术错误。

我认为陷阱是由当前指令的执行引起的,因此被称为同步事件。 其中中断是由处理器中运行的与外部事件有关的独立指令引起的,因此被称为asynchronous处理。

中断是硬件中断,而陷阱是软件调用的中断。 硬件中断的发生通常会禁用其他硬件中断,但对于陷阱来说这不是真的。 如果您需要禁止硬件中断,直到发送陷阱为止,则需要明确清除中断标志。 通常,计算机上的中断标志会影响(硬件)中断,而不是陷阱。 这意味着清除这个标志不会阻止陷阱。 与陷阱不同,中断应该保留CPU的以前的状态。

陷阱是一个软件中断。如果你编写一个程序,声明一个被零值除的variables,那么它就被当作一个陷阱。当你运行这个程序的时候,它会同时抛出相同的错误。系统调用是特殊版本的陷阱,其中一个程序要求os的所需服务。 如果是中断(硬件中断的一般词),比如I / O错误,那么随机时间CPU会中断,而不是程序员的错误。这是硬件带来的。