首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >任务门、中断门、调用门

任务门、中断门、调用门
EN

Stack Overflow用户
提问于 2011-07-14 01:50:07
回答 2查看 3.5K关注 0票数 8

我一直在尝试阅读更多关于x86架构中不同的gates的内容。如果我理解正确,那么中断和陷阱门分别用于硬件和软件中断处理。然而,调用门可能不再被使用,因为人们更喜欢用SYSENTER和SYSEXIT来代替。

我想知道如何使用任务门(我知道它们用于硬件任务切换)。这到底是什么意思?硬件任务是否指操作系统任务/进程。或者更像是在两个不同的操作系统实例之间切换。(可能在服务器上。)?

顺便说一句,是否会发生某些中断是在用户模式下处理的情况。(我们可以在用户模式下处理除零中断吗?如果可以,那么除以零IDT处理程序条目是否包含来自用户空间的地址?)

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-14 04:52:29

你可能想知道的关于中断和门的一切都在Intel developer manual, volume 3中。简而言之:

  • 任务门最初设计为以中央处理器为中介的执行任务切换的方法;在任务切换操作期间,中央处理器可以自动记录进程的状态。
  • 至少在Linux中,所有的中断处理程序都在内核空间中,并在环0上执行。如果要处理被零除的异常,请为SIGFPE注册一个用户空间信号处理程序;内核空间中断处理程序引发SIGFPE信号,间接触发用户空间处理程序代码(用户空间代码在从中断处理程序返回后执行)。
票数 8
EN

Stack Overflow用户

发布于 2012-12-23 17:40:09

事件的状态是,只有中断和陷阱门实际上正在使用中,并且现在仍在使用中。理论上,它们都可以用于s/w和h/w事件处理。它们之间唯一的区别是中断门调用自动禁止未来的中断,这在硬件中断处理的某些情况下可能很有用。默认情况下,人们尝试使用陷阱门,因为不必要的中断禁用是一件坏事,因为中断禁用增加了中断处理延迟并增加了中断丢失的概率。Call gates从未实际使用过。这对于系统调用的实现来说是不方便的,也不是最优的。而不是调用门,大多数操作系统使用陷阱门( Linux中为int 0x80,Windows中为int 0x2E )或sysenter/sysexit syscall/sysrt指令。任务门也从未被实际使用过。它不是最佳的,不方便的和有限的功能,如果不是丑陋的话。操作系统通常通过内核模式的任务栈切换来实现自己的任务切换,而不是直接切换。最初,英特尔通过引入TSS (任务状态段)和任务门来提供对多任务的硬件支持。根据该特性,处理器能够响应来自硬件或软件的请求,自动存储一个任务的状态,并恢复另一个任务的状态。Sw请求可以通过使用TSS选择器或任务门选择器作为指令操作数发出call或jmp指令来完成。可以通过在适当的IDT条目中将硬件陷阱到任务门中来完成Hw请求。但正如我已经提到的,没有人真正使用它。取而代之的是,操作系统对所有任务只使用一个TSS (在任何情况下都必须使用TSS,因为在从较低特权段到较高特权段的控制转移期间,CPU交换机堆栈并且它从TSS获取较高特权段的堆栈地址)并手动进行任务切换。

理论上,中断和异常可以在用户模式下处理(环3),但在实践中它是没有用的,操作系统在内核端处理所有此类事件(环0)。原因很简单,中断和异常处理程序必须始终驻留在内存中,并且可以从任何地址空间访问。地址空间的内核部分是共享的,并且在系统中所有任务的所有地址空间中都是相同的,但是地址空间的用户部分连接到特定任务。如果您想在用户模式下处理异常,您将被迫在每个任务切换上重新编写IDT,这将带来显着的性能损失。如果您想以相同的方式处理中断,您将被迫在相同地址上的所有任务之间共享中断处理程序。作为不想要的后果,系统中的任何任务都将能够损坏处理程序。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6683276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档