代码之家  ›  专栏  ›  技术社区  ›  David

陷阱和中断有什么区别?

  •  126
  • David  · 技术社区  · 16 年前

    陷阱和中断有什么区别?

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

    9 回复  |  直到 10 年前
        1
  •  232
  •   Aaron Digulla    12 年前

    trap 是用户进程中的异常。它是由零除或无效的内存访问造成的。这也是调用内核例程的常用方法(a) system call )因为它们的运行优先级高于用户代码。处理是同步的(因此用户代码被挂起并随后继续)。在某种意义上,它们是“活动的”——大多数时候,代码期望陷阱发生并依赖于这个事实。

    安 interrupt 是由硬件(如硬盘、图形卡、I/O端口等设备)生成的。它们是异步的(即它们不会发生在用户代码中可预测的地方)或“被动的”,因为中断处理程序必须等待它们最终发生。

    您还可以将trap看作一种CPU内部中断,因为trap handler的处理程序看起来像一个中断处理程序(寄存器和堆栈指针被保存,有一个上下文切换,在某些情况下可以继续执行)。

        2
  •  128
  •   Peter Cordes    5 年前

    和 中断 例外 ,异常类似于中断。

    英特尔x86定义了两个重叠的类别,矢量事件( 中断 例外情况 ),和异常类( 断层 与 陷阱 与 ).

    这篇文章中的所有引用都来自2016年4月版本的 Intel Software Developer Manual . 对于x86(明确而复杂的)透视图,我建议阅读SDM中关于中断和异常处理的一章。

    矢量化事件

    矢量化事件( 中断 和 例外情况

    中断

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

    例外情况 执行一条指令,如被零除。处理器 页面故障和内部机器故障。

    异常分类

    分类为 , 陷阱 中止 取决于报告方式以及指令 任务连续性。

    陷阱 递增指令指针, 断层 不要,而且 “爆炸”。

    陷阱

    陷阱 是在 在不丧失程序连续性的情况下继续进行的程序或任务。 陷阱处理程序的返回地址指向 在补漏白指令之后执行。

    A 过错 是一个通常可以纠正的例外, 连续性。当报告故障时,处理器将恢复 错误指令。返回地址(保存的CS和 故障处理程序的EIP寄存器)指向故障 指令,而不是故障之后的指令 说明。

    示例:页面错误通常是可恢复的。应用程序地址空间的一部分可能已从ram交换到磁盘。当应用程序试图访问被调出的内存时,它将触发一个页面错误。内核可以将内存从磁盘拉到ram,并将控制权交还给应用程序。应用程序将继续它停止的地方(在访问交换出的内存的错误指令处),但是这次内存访问应该不会出现错误。

    模拟浮点指令或其他丢失指令的非法指令错误处理程序必须手动递增返回地址,以获得所需的类似陷阱的行为,然后才能查看错误指令是否是它可以处理的指令。x86个 #UD 是一个“错误”,而不是一个“陷阱”(处理程序需要一个指向出错指令的指针来确定它是哪条指令。)

    是一个例外,并不总是报告准确的 导致异常的指令的位置,不允许 用于报告严重错误,如硬件错误和不一致 或系统表中的非法值。

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

        3
  •  11
  •   Cheshar    15 年前

    一般来说,异常、故障、中止等术语, 陷阱 ,和 中断 所有的意思都是一样的,被称为“中断”。

    关于陷阱和中断的区别:

    Trap:是由程序员发起的,并期望将控制转移到一个特殊的处理程序例程(例如:80x86 国际的 教学就是一个很好的例子)

    作为

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

        4
  •  7
  •   Paul R    16 年前

    A 陷阱 是一种特殊的 通常被称为 . 安 打断 是一个更一般的术语,涵盖了两者 硬件中断 (来自硬件设备的中断)和 软中断 陷阱 ).

        5
  •  4
  •   Frank    16 年前

    陷阱是由类似代码的程序调用的,例如。g。调用操作系统例程(即。e。通常是同步的)。

        6
  •  3
  •   Dinesh Reddy    12 年前

    中断是系统内由硬件产生的流量变化。打断 传唤处理人处理中断原因;然后将控件返回到 中断的上下文和指令。陷阱是软件生成的中断。一个中断可以 用于发出I/O完成的信号,以避免设备轮询的需要。陷阱可以

        7
  •  3
  •   chetan pawar    12 年前

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

        8
  •  3
  •   Anamik Sarvaiya    11 年前

    中断是硬件中断,而陷阱是软件调用的中断。硬件中断的出现通常会禁用其他硬件中断,但陷阱则不是这样。如果需要在提供陷阱之前禁止硬件中断,则需要显式清除中断标志。通常计算机上的中断标志会影响(硬件)中断,而不是陷阱。这意味着清除此标志不会阻止陷阱。与陷阱不同,中断应该保持CPU以前的状态。

        9
  •  2
  •   Sanketssj5    11 年前

    陷阱是一种软件中断。如果您编写一个程序,其中声明一个变量的值被零除,则该变量将被视为陷阱。每当您运行此程序时,它将同时抛出相同的错误。系统调用是陷阱的一个特殊版本,在该版本中,程序向操作系统请求所需的服务。

        10
  •  1
  •   Exploring Bits    5 年前

    一个陷阱可以被识别为一个控制转移,它是由程序员发起的。术语Trap可与术语Exception(一种自动发生的软件中断)互换使用。但也有人认为陷阱只是一个特殊的子程序调用。因此它们属于软件调用中断的范畴。例如,在8086机器中,程序员可以使用int指令启动陷阱。因为陷阱总是无条件的,所以控制权总是转移到与陷阱相关联的子例程。调用例程来处理陷阱的确切指令很容易识别,因为显式指令用于指定陷阱。 Trap Vs Interrupt