gpt4 book ai didi

x86 - 调用门、中断门、陷阱门的区别?

转载 作者:行者123 更新时间:2023-12-03 07:23:46 26 4
gpt4 key购买 nike

我正在研究英特尔保护模式。我发现Call Gate、Interrupt Gate、Trap Gate都差不多。实际上,除了Call Gate有参数计数器的字段,并且这3个门的类型字段不同之外,它们在所有其他字段中都是相同的。

至于它们的功能,它们都是用来将代码控制转移到某个代码段内的某个过程中的。

我想知道,因为这 3 个门都包含跨权限边界调用所需的信息。为什么我们需要 3 种? 1 还不够好吗?

感谢您的时间和回复。

更新 1

一个相关问题:When to use Interrupt Gate or Trap Gate?

更新 2

今天我想到了这个想法:

不同的目的、不同的门以及不同的 CPU 行为细节。比如IF标志的处理。

最佳答案

门(调用、中断、任务或陷阱)用于跨段转移执行控制。权限级别检查的完成方式取决于所使用的目标类型和指令。
调用门使用 CALL 和 JMP 指令。调用门将控制从较低权限代码转移到较高权限代码。门 DPL 用于确定哪些权限级别可以访问门。调用门正在(或可能已经)逐渐被放弃,转而支持更快的 SYSENTER/SYSEXIT 机制。
任务门用于硬件多任务支持。硬件任务切换可以自动发生(CALL/JMP 到任务门描述符),或者在设置 NT 标志时通过中断或 IRET。它的工作方式与中断门或陷阱门相同。据我所知,没有使用任务门,因为内核通常希望在任务切换时完成额外的工作。
中断和陷阱门与任务门一起被称为中断描述符表。除了参数从一个特权堆栈到另一个特权堆栈的传输之外,它们的工作方式与调用门相同。一个区别是中断门会清除 EFLAGS 中的 IF 位,而陷阱门则不会。这使它们成为处理硬件中断的理想选择。陷阱广泛用于硬件辅助虚拟化。
有关更多信息,请参阅有关您感兴趣的处理器的英特尔架构手册。
更新
要回答评论:
区分中断和陷阱的原因有很多。一是范围的不同:中断门指向内核空间(毕竟,管理硬件的是内核)而陷阱在用户空间中调用。响应硬件事件调用中断处理程序,而响应 CPU 指令执行陷阱。
举一个简单(但不切实际)的例子来更好地理解为什么中断门和陷阱门对 EFLAGS 的处理方式不同,请考虑如果我们在单处理器系统上为硬件事件编写中断处理程序并且在我们无法清除 IF 位时会发生什么情况正在服务一个。当我们忙于为第一个中断服务时,可能会出现第二个中断。然后我们的中断处理程序将在我们 IH 执行期间的某个随机点被处理器调用。这可能会导致数据损坏、死锁或其他不良魔法。实际上,中断禁用是确保一系列内核语句被视为临界区的机制之一。
不过,上面的示例假设了可屏蔽中断。无论如何,您不会想忽略 NMI。
今天,这在很大程度上也无关紧要。今天几乎没有区别 fast and slow interrupt handlers (搜索“快速和慢速处理程序”),中断处理程序可以嵌套方式执行,SMP 处理器强制将本地中断禁用与自旋锁结合起来,等等。
现在,陷阱门确实用于服务软件中断、异常等。处理器中的缺页错误或除零异常可能是通过陷阱门处理的。使用陷阱门控制程序执行的最简单示例是 INT 3 指令,该指令用于在调试器中实现断点。在进行虚拟化时,发生的情况是管理程序在环 0 中运行,而 guest 内核通常在环 1 中运行 - 特权代码将因一般异常错误而失败。 Witchel 和 Rosenblum 开发 binary translation ,这基本上是重写指令来模拟它们的效果。发现关键指令并用陷阱替换。然后当陷阱执行时,控制权交给 VMM/管理程序,它负责模拟环 0 中的关键指令。
对于硬件辅助虚拟化,陷阱和模拟技术的使用受到了一定的限制(因为它非常昂贵,尤其是在它是动态的时),但二进制转换的实践是 still widely used .
有关更多信息,我建议您查看:

  • Linux 设备驱动程序,第三版(可用 online)
  • 对于二进制翻译,QEMU是一个很好的开始。
  • 关于陷阱和模拟,请查看 a comparison软件/硬件技术之间。

  • 希望这可以帮助!

    关于x86 - 调用门、中断门、陷阱门的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3425085/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com