首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在访问中断门描述符之前,用户如何切换到内核模式?

问在访问中断门描述符之前,用户如何切换到内核模式?
EN

Stack Overflow用户
提问于 2016-06-05 18:51:05
回答 1查看 1.1K关注 0票数 0

我目前正在阅读“理解Linux内核”。我正在研究中断和例外一章。

我发现在设置IDT时,我们可以使用Linux术语中的五种门描述符。

  1. 任务门(DPL: 0)
  2. 中断门(DPL: 0)
  3. 陷阱门(DPL: 0)
  4. 系统中断门(DPL: 3)
  5. 系统门(DPL: 3)

现在我意识到使用DPL 3的用户可以从用户模式访问。但是那些有DPL 0的呢?特别是中断门。

如果I/O APIC中断发生在用户模式下,则无法访问中断门。

所以我的问题是,在访问中断门之前,内核模式开关的用户模式是如何发生的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-06 10:53:20

当硬件中断发生时,可以忽略当前正在执行的代码的特权级别;CPU只需切换到中断的特权级别,而无需检查它。

英特尔64和IA-32架构软件开发人员手册第3A卷:系统编程指南,第1部分在第6.12.1.1节中说:

异常和中断处理程序的保护 对异常和中断处理程序的特权级保护与通过调用门调用普通过程时使用的保护类似(参见5.8.4节,“通过调用门访问代码段”)。处理器不允许在特权较低的代码段(数字上大于CPL )中将执行传递到异常或中断处理程序。 试图违反此规则将导致通用保护异常(#GP)。异常处理程序和中断处理程序的保护机制在以下方面有所不同:

  • 因为中断和异常向量没有RPL,所以不检查RPL对异常和中断处理程序的隐式调用。
  • 处理器只检查中断或陷阱门的DPL,如果异常或中断是用INT n,INT 3生成的,或者是进入指令的。在这里,CPL必须小于或等于门的DPL。此限制阻止在特权级别3运行的应用程序或过程使用软件中断来访问关键异常处理程序,如页故障处理程序,条件是这些处理程序被放置在更特权的代码段中(数字上较低的特权级别)。对于硬件产生的中断和处理器检测到的异常,处理器忽略中断和陷阱门的DPL .

由于异常和中断通常不会在可预测的时间发生,这些特权规则有效地限制了异常和中断处理过程可以运行的特权级别。可以使用下列任何一种技术来避免特权级别的违反。

  • 异常或中断处理程序可以放在符合条件的代码段中。此技术可用于只需要访问堆栈上可用数据的处理程序(例如,除以错误异常)。如果处理程序需要来自数据段的数据,则需要从特权级别3访问数据段,这将使其不受保护。
  • 处理程序可以放置在具有特权级别0的不协调代码段中。无论中断的程序或任务在哪个CPL上运行,此处理程序都将始终运行。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37645562

复制
相关文章

相似问题

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