【问题标题】:What exactly is a trap handler?究竟什么是陷阱处理程序?
【发布时间】:2018-08-09 13:28:51
【问题描述】:

据我所知,陷阱是发生特殊事件时发生的事情。 在系统调用的情况下,程序执行陷阱指令并跳转到内核模式。然后,陷阱处理程序跳转到所需的处理程序(例如 fork、exec、open)。

当fork、exec、open等执行完毕后,操作系统调用return-from-trap指令,使程序回到用户态。

但究竟什么是陷阱处理程序? (另外,如果可以的话,什么是陷阱表?)

【问题讨论】:

标签: operating-system system-calls


【解决方案1】:

陷阱处理程序是触发陷阱时将运行的代码。在您的示例中,操作系统将安装一个处理程序(即告诉 CPU 发生陷阱时要运行的代码的内存地址),并且该处理程序将执行系统调用。 NOT 是跳转到内核模式的程序。程序在触发陷阱后立即中断。使用陷阱处理程序继续执行。

这样,三层(在保护模式下运行的程序、在特权模式下运行的操作系统和强制当前正在执行的代码不能脱离保护模式的 CPU/硬件)可以在彼此之间交接控制权。

还请注意,a) 现代 CPU 具有用于系统调用的专用指令——一种比陷阱更有效但在概念上工作原理相同的机制,并且 b) 还有其他用于不同目的的陷阱/中断——它们提供停止顺序程序执行的基本机制,并针对某种事件执行“其他操作”。

【讨论】:

  • 谢谢!这回答了我的问题!另一个问题:你知道什么是陷阱表吗?陷阱表中的索引是什么?
  • 那是操作系统用来告诉 CPU 在触发陷阱时应该跳转到哪里的调度表。它包含每种类型陷阱的处理程序代码的内存地址。那里的代码将是操作系统的一部分,以特权模式运行,它将(在您的情况下)执行系统调用。
【解决方案2】:

阅读本文, http://www.cse.iitd.ernet.in/~sbansal/os/lec/l8.html

x86 处理器使用称为中断描述符表 (IDT) 的表来确定在发生陷阱时如何转移控制权。 x86 允许多达 256 个不同的中断或异常入口点进入内核,每个点都有不同的中断向量。向量是一个介于 0 和 256 之间的数字。中断的向量由中断源决定:不同的设备、错误条件和对内核的应用程序请求会生成具有不同向量的中断。 CPU 使用向量作为处理器 IDT 的索引,内核将其设置在内核选择的内核专用内存中,就像 GDT 一样。处理器从该表中的相应条目加载:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 2020-11-08
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    相关资源
    最近更新 更多