TRAP和异常之间的区别

2024-01-09

参加操作系统课程。 所以我知道陷阱和异常都可以被视为软件中断......所以它们都是内部的和同步的。 但是我似乎无法弄清楚这两个定义之间的区别。 因此,如果有人不介意解释并举一些例子,我们将不胜感激。

Thanks.


有中断 - 导致 CPU 开始执行表(例如中断向量表)中的代码。

中断可以根据触发中断的原因分为几类:

  • 异常——由CPU本身触发
  • IRQ - 由外部硬件(例如网卡)触发
  • 软件中断 - 由正在运行的代码显式触发
  • IPI(处理器间中断)- 由不同的 CPU 触发

异常可以进一步细分为子类别:

  • 中止 - 阻止被中断的代码继续执行的事情。这些事情表明存在重大问题 - 例如除数为零、硬件故障等。
  • 陷阱 - 不会阻止被中断的代码继续执行的事情。这些可用于调试、虚拟内存管理等。

大多;陷阱和异常之间的区别就像汽车和车辆之间的区别(陷阱是异常的一种,汽车是车辆的一种类型;但有些异常不是陷阱,也有一些车辆不是汽车)。

所以我明白 TRAP 和异常都可以被视为软件中断

这可能是错误的(如果您使用英特尔的术语,这绝对是错误的) - 软件中断是一种中断类型,而不是一种异常类型。一个很好的例子是int3指令和int 380x86 上的指令。这int3触发断点异常(陷阱)int 3是一个软件中断(不是陷阱,也不是异常),可能(取决于操作系统)导致一般保护错误(由于违反了相应中断描述符表条目的“描述符特权级别”限制)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TRAP和异常之间的区别 的相关文章

  • 用户空间栈和堆的内存布局

    最近在研究OS 网上有一张图 展示了用户空间和内核空间的内存布局 以及栈 堆等的布局 在这个图中我看到栈位于用户空间的最高内存地址 高于堆 数据段等 为了检查这一点 我在调试视图下使用了 vs2012 中的内存观察器窗口 这是我的代码 in
  • Linux 中不使用 C++ 的 C 异常处理

    Linux 是否提供了 C 语言的异常处理而不求助于 C 或者 实现此类异常处理的最佳方法是什么 目标是避免检查每个调用的函数的返回码 而是执行类似于 C 的线程安全且易于移植的操作 您可以通过为其编写信号处理程序来处理信号 GNU 记录的
  • SQL 错误:字符串或二进制数据将被截断

    我正在一个名为 Telligent 的社区平台上进行集成 我正在使用名为 BlogML 的第 3 方插件将博客文章从 XML 文件 BlogML 格式 导入到我的本地 Telligent 站点中 Telligent 平台在其 SDK 中附带
  • linq-to-sql:存储过程不能在查询中使用

    这在 VS2010 RC LINQ to SQL 上失败 并出现 InvalidOperationException 存储过程不能在查询内使用 var foo from a in aTable from b in this SomeStor
  • 什么时候应该使用 ThrowHelper 方法而不是直接抛出?

    什么时候适合使用投掷助手方法而不是直接抛出 void MyMethod throw new ArgumentNullException paramName ThrowArgumentNullException paramName void
  • 捕获所有内部异常详细信息的最佳实践是什么? [复制]

    这个问题在这里已经有答案了 记录完整异常详细信息 包括所有可能的内部异常 的最佳实践是什么 目前 我使用以下代码 try some code that throws an exception catch Exception ex do Co
  • 最佳实践:从属性中抛出异常

    什么时候适合从属性 getter 或 setter 中抛出异常 什么时候不合适呢 为什么 关于这个主题的外部文档的链接会很有帮助 谷歌搜索结果出奇的少 Microsoft 在以下位置提供了有关如何设计属性的建议 http msdn micr
  • 我们什么时候应该在方法中抛出异常或捕获异常?

    我一直在阅读有关异常的更多内容 但我不确定在什么情况下我们应该抛出一个方法 public void fxml throws IOException method body here 或捕获方法内的异常 public void fxml FX
  • java.rmi.NoSuchObjectException:表中没有这样的对象

    我正在编写一个非常简单的 RMI 服务器 并且我看到间歇性的java rmi NoSuchObjectExceptions在单元测试中 我对同一个对象进行了一串远程方法调用 虽然前几个调用成功 但后面的调用有时会失败 我没有做任何事情来取消
  • DataContext.CreateDatabase() 表示文件已存在 - 但事实并非如此

    这可能是 Windows 7 问题 但调用 using var context new DataClassesDataContext if context DatabaseExists context CreateDatabase 结果出现
  • 三层 Asp.Net 应用程序中的异常处理

    1 据我了解 在three tierAsp Net应用程序我们应该通过以下方式实现异常处理 a 我们应该把try catch围绕代码块 位于三层中的任何一层 我们希望页面能够从该代码块正常恢复 当此代码生成异常时 b 我们不应该放try c
  • 如何在 VS2015 中使用 Intellisense 查看抛出哪些异常?

    这个问题已在 VS2015 Update 1 中得到解决和修复 有没有办法在VS2015中显示异常 VS2015 VS2013 在您实际编写代码之前 它似乎不再显示在智能感知工具提示中 一旦代码出现 将鼠标悬停在其上即可使其完整显示 注意
  • API网关+Lambda+Python:处理异常

    我正在非代理模式下从 API Gateway 调用基于 Python 的 AWS Lambda 方法 我应该如何正确处理异常 以便使用部分异常设置适当的 HTTP 状态代码以及 JSON 正文 作为示例 我有以下处理程序 def my ha
  • 如何将exe异常路由回VB6应用程序?

    我有一个 vb6 应用程序 它将调用 mencoder exe 它是 mplayer 的一部分 用于将某些文件转换为 flv 格式 每当我尝试转换这个 opendivx 文件时 我都会从 mencoder 收到这个奇怪的未处理异常问题 目前
  • 如何捕获生成器抛出的异常并恢复迭代?

    我有一个生成器 它将值的集合传递给方法并生成结果 调用的方法可能会返回异常 发生这种情况时 我希望异常转到调用生成器来处理异常的代码 然后继续循环生成器 为了说明这一点 下面是一个生成器的示例 它将产生1 抛出一个 Exception 然后
  • 如何单独捕获这些异常?

    我正在编写一个与 Quickbooks 交互的 Python 程序 连接到 Quickbooks 时 根据问题的不同 我可能会遇到以下两个常见异常之一 pywintypes com error 2147352567 Exception oc
  • 如何使用简历实现一个“一网打尽”的异常处理程序?

    我想知道我怎样才能写一个抓住他们全部应用程序级别的异常处理程序将为用户提供恢复应用程序流程的选项 如果您正在运行 Windows 窗体应用程序 将处理程序添加到Application ThreadException event
  • 如何确定异常是否属于特定类型

    我有一段 try catch 代码 try catch Exception ex ModelState AddModelError duplicateInvoiceNumberOrganisation The combination of
  • C++,set_terminate 是每个线程本地的吗?

    Should set terminate get terminate在 C 2011 或 C 2003 中为多个线程设置不同的终止异常处理器 例如 如果我有程序并将终止处理程序设置为func 1 然后我启动3个线程 新线程中的终止处理程序是
  • C++ Streambuf 方法可以抛出异常吗?

    我正在尝试找到一种方法来获取读取或写入流的字符数 即使存在错误并且读 写结束时间较短 该方法也是可靠的 我正在做这样的事情 return stream rdbuf gt sputn buffer buffer size 但如果streamb

随机推荐