3

BIOS 调用在 Linux 操作系统中不可用。我想知道内核如何阻止执行包含对 BIOS 子例程的调用的此类指令?

4

2 回答 2

4

BIOS大多在 16 位模式下可用,而不是在运行 Linux 的 x86 的 32 位或 64 位模式下

一个Linux进程运行在用户态,使用虚拟内存,它有自己的虚拟地址空间

某些机器指令(尤其INT是用于进入 BIOS 的指令)具有特权,因此无法在用户模式下运行。如果你尝试在用户模式下运行它们,处理器会产生一个机器异常,内核会通过发送一些信号来处理它。(有些INT也用于系统调用,但SYSENTER首选指令)。

应用程序使用系统调用与内核交互(可能通过VDSO)。

阅读组装方法。也可以在kernelnewbies.org上询问

Linux 内核是开源的,您可以从kernel.org下载并研究其源代码。

PS。2020 年后注意UEFI。这是一件复杂的事情。

于 2013-10-23T07:52:36.143 回答
3

INT n 指令生成对目标操作数指定的中断或异常处理程序的调用。目标操作数指定一个从 0 到 255 的中断向量号,编码为 8 位无符号中间值。每个中断向量号都为 IDT 中的门描述符提供了一个索引。

选择的中断描述符又包含一个指向中断或异常处理程序的指针。在保护模式下(Linux 仅在保护模式下工作),IDT 包含一个 8 字节描述符数组,每个描述符是一个中断门、陷阱门或任务门。

此 IDT 由操作系统设置。Linux 将其设置为描述符指向它自己的处理程序,而不是 BIOS 处理程序。

于 2013-10-28T09:22:01.520 回答