gpt4 book ai didi

linux - IA32 IDT 和 linux 中断处理程序

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:15:19 30 4
gpt4 key购买 nike

在 IDT 中,每一行都有一些称为“DPL”的位 - 描述符特权级别,内核为 0,普通用户为 3(可能还有更多级别)。我不明白两件事:

  1. 这是运行中断处理程序代码所需的级别?或触发导致它的事件?因为 system_call 有 DPL=3,所以在用户模式下我们可以做“int 0x80”。但是在linux中只有内核处理中断,所以我们可以触发事件但不处理它?即使我们拥有正确的 CPL。

  2. 在 linux 中只有内核处理中断,但是当中断(或陷阱)发生时,是什么让我们进入内核模式?

对于任何错误,我深表歉意,我对所有这些东西都是新手,只是想学习。

最佳答案

IDT 有 3 种类型的入口 - 陷阱门、中断门和任务门(没有人使用)。用于陷阱门和中断门;该条目主要描述了中断处理程序的 objective-c S 和 EIP。

IDT 条目中的 DPL 字段决定了使用门所需的特权级别(或者,切换到门描述的 objective-c S 和 EIP)。软件只能使用一个gate via。软件中断(例如 int 0x80)。

对于 IRQ 和异常,硬件使用门而不是软件。硬件没有特权级别,并且始终能够使用门(无论软件当前使用哪个特权级别,也不管门的 DPL)。这意味着 IRQ 处理程序应具有 DPL=0(以确保以 CPL=3 运行的软件不能通过软件中断使用它们)。

当中断处理程序启动时,CPU 确定是否会发生特权级别更改(基于之前使用的特权级别和几乎始终为零的目标特权级别)并自动切换特权级别必要的。这就是导致切换到 CPL=0 的原因。 注意:如果需要更改特权级别,CPU 还将切换堆栈并在新堆栈上保存“return SS:ESP”。

关于linux - IA32 IDT 和 linux 中断处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31099105/

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