Trap和Interrupt有什么区别?
如果不同系统的术语不同,那么它们在x86上意味着什么?
答案 0 :(得分:171)
trap 是用户进程中的一个例外。它是由零除或无效的内存访问引起的。这也是调用内核例程(system call)的常用方法,因为它们的优先级高于用户代码。处理是同步的(因此用户代码被暂停并在之后继续)。从某种意义上说,它们是“活跃的” - 大多数时候,代码期望陷阱发生并依赖于这一事实。
interrupt 是由硬件(硬盘,显卡,I / O端口等设备)生成的内容。这些是异步的(即它们不会发生在用户代码中的可预测位置)或“被动”,因为中断处理程序必须等待它们最终发生。
你也可以看到一个陷阱作为一种CPU内部中断,因为陷阱处理程序的处理程序看起来像一个中断处理程序(寄存器和堆栈指针被保存,有一个上下文切换,执行可以恢复在某些情况下它离开了。)
答案 1 :(得分:76)
陷阱和中断密切相关。陷阱是一种异常,异常类似于中断。
Intel x86定义了两个重叠类别,向量事件(中断与例外)和异常类别(错误 vs 陷阱< / strong> vs 中止)。
此帖中的所有引号均来自Intel Software Developer Manual的2016年4月版。对于(确定的和复杂的)x86透视图,我建议阅读SDM关于中断和异常处理的章节。
向量事件(中断和异常)导致处理器在保存处理器的大部分状态后跳转到中断处理程序(足以使执行从该点继续执行)更高版本)。
异常和中断有一个ID,称为向量,用于确定处理器跳转到哪个中断处理程序。中断处理程序在中断描述符表中描述。
中断在执行程序期间随机发生,以响应来自硬件的信号。系统硬件使用 中断以处理处理器外部的事件,例如 请求服务外围设备。软件也可以生成 通过执行INT n指令来中断。
当处理器检测到错误情况时,会发生异常 执行指令,例如除零。处理器 检测各种错误情况,包括保护违规, 页面错误和内部机器故障。
例外分为错误,陷阱或中止,具体取决于报告的方式以及是否指示 导致异常可以重新启动而不会丢失程序或 任务连续性。
摘要:陷阱增加指令指针,错误不增加,中止'爆炸'。
陷阱是紧随其后报告的异常 执行陷阱指令。陷阱允许执行a 在不损失计划连续性的情况下继续执行计划或任务。 陷阱处理程序的返回地址指向指令 在陷阱指令后执行。
错误是一个通常可以更正的例外情况, 一旦纠正,允许程序重新启动而不会丢失 连续性。报告故障时,处理器恢复故障 机器状态到执行开始之前的状态 错误指令。返回地址(CS和。的保存内容) EIP寄存器)用于故障处理程序指向故障 指令,而不是故障后的指令 指令。
示例:页面错误通常是可恢复的。一个应用程序的地址空间可能已从ram换出到磁盘。当应用程序尝试访问已换出的内存时,应用程序将触发页面错误。内核可以将内存从磁盘拉到RAM,然后将控制权交还给应用程序。应用程序将在它停止的地方继续(在访问被换出的内存的错误指令处),但是这次内存访问应该成功而没有错误。
中止是一个异常,并不总是报告精确 导致异常的指令的位置,并且不允许a 重启导致异常的程序或任务。中止了 用于报告严重错误,例如硬件错误和不一致 或系统表中的非法值。
软件调用的中断(由INT指令触发)以类似陷阱的方式运行。指令在处理器保存其状态并跳转到中断处理程序之前完成。
答案 2 :(得分:8)
一般来说,例外,故障,中止,陷阱和中断等术语都意味着同样的事情,称为“中断”。
陷阱和中断之间的区别:
陷阱:是程序员启动并期望将控制转移到特殊的处理程序例程。 (例如:80x86 INT 指令就是一个很好的例子)
在哪里
中断(硬件):基于CPU外部的外部硬件事件导致程序控制中断(例如:按键盘上的键或定时器超时) 芯片)
答案 3 :(得分:6)
陷阱是一种特殊的中断,通常称为软件中断。 中断是一个更通用的术语,涵盖硬件中断(来自硬件设备的中断)和软件中断(来自软件的中断,例如< EM>陷阱)。
答案 4 :(得分:3)
陷阱由类似程序的代码调用并使用e。 G。调用OS例程(即通常是同步的)。 事件调用中断(多次硬件,如接收数据的网卡,或CPU计时器),并且 - 顾名思义 - 中断正常控制流程,因为CPU必须切换到驱动程序来处理事件。
答案 5 :(得分:2)
中断是系统内硬件生成的流量变化。中断 召唤处理程序来处理中断的原因;然后控制权返回到 中断的背景和指令。陷阱是软件生成的中断。中断可以 用于表示I / O的完成,以避免设备轮询的需要。陷阱可以 用于调用操作系统例程或捕获算术错误。
答案 6 :(得分:2)
我认为陷阱是由当前指令的执行引起的,因此它们被称为同步事件。中断是由处理器中运行的与外部事件相关的独立指令引起的,因此被称为异步指令。
答案 7 :(得分:2)
中断是硬件中断,而陷阱是软件调用的中断。硬件中断的发生通常会禁用其他硬件中断,但对于陷阱而言则不然。如果在服务陷阱之前需要禁止硬件中断,则需要明确清除中断标志。通常,计算机上的中断标志会影响(硬件)中断而不是陷阱。这意味着清除此标志不会阻止陷阱。与陷阱不同,中断应该保留CPU的先前状态。
答案 8 :(得分:1)
陷阱是一个软件中断。如果你编写一个程序,在其中声明一个除以零值的变量,那么它被视为一个陷阱。无论你运行这个程序,它都会同时抛出相同的错误。系统call是一个特殊版本的陷阱,程序会询问操作系统所需的服务。 在中断(硬件中断的一般词)的情况下,如i / o错误,cpu在随机时间中断,当然不是我们程序员的错。它是硬件带来的。
答案 9 :(得分:0)
陷阱可以标识为由程序员启动的控制权转移。术语陷阱与术语异常(这是自动发生的软件中断)可以互换使用。但是有些人可能会认为陷阱只是一个特殊的子例程调用。因此,它们属于软件调用的中断类别。例如,在80×86的计算机中,程序员可以使用int指令来启动陷阱。由于陷阱始终是无条件的,因此控制将始终转移到与陷阱关联的子例程。因为使用显式指令指定陷阱,所以可以很容易地识别出调用处理陷阱的例程的确切指令。