中断和特权级别如何工作?

中断和特权级别如何工作?

我试图更好地理解中断的工作原理(硬件和软件)以及与之相关的特权。

如果我们以 NIC 为例。当操作系统创建 IDT 时,NIC 描述符的条目是否指向处理它的内置驱动程序。如果用户随后为 NIC 安装第三方驱动程序,IDT 是否会被修改以指向新驱动程序?

USB 控制器的中断会指向 USB 驱动程序吗?

此 IDT 条目的特权级别是什么?它有什么用途?我曾在某处读到过,硬件中断会忽略特权级别并允许运行,但我不确定这是否属实。

对于软件中断,这些中断会执行哪种类型的中断。如果它想要访问内核函数,是否所有这些都通过具有 3 级特权的同一中断来访问?

有哪些类型的软件中断以及用户模式程序如何使用它们,或者用户模式程序是否仅使用软件中断来访问内核。

我一直尝试从在线资源中将所有信息拼凑在一起,但我只是想知道是否有人可以清楚地解释整个过程是如何进行的。

任何帮助将非常感激。

谢谢。

答案1

您没有指定所询问的处理器架构。我假设您谈论的是 PC 中的 x86 处理器。需要了解的最基本信息是,当前主要的操作系统仅使用 2 个特权级别(x86 处理器架构提供的 4 个特权级别):内核(级别 0)和用户(级别 3)。由此可见,在每个驱动程序中,每个中断服务例程都必须在内核特权(级别 0)下运行。

软件中断是一种从较低特权代码调用具有较高特权级别的函数的方法。在当前操作系统中,当且仅当用户(级别 3)代码想要调用内核(级别 0)函数时才会发生这种情况。

如果用户随后为 NIC 安装第三方驱动程序,IDT 是否会被修改以指向新的驱动程序?

IDT 通常指向一个通用内核函数,该函数在某些内存结构中查找实际中断服务例程的地址。通常,此结构在驱动程序加载到内核时设置。安装通常涉及复制文件系统中的文件,而这些结构存在于内存中。

研究 Linux 的源代码可以让您深入了解这些东西现在是如何实现的。

相关内容