linux内核如何阻止BIOS系统调用?

时间:2013-10-23 07:07:16

标签: linux kernel bios

Linux操作系统中没有BIOS调用。我想知道内核如何阻止执行包含调用BIOS子程序的指令?

2 个答案:

答案 0 :(得分:3)

BIOS主要以16位模式提供,而不是Linux运行的x86的32位或64位模式。

Linux进程正在user mode中运行,使用virtual memory,它有自己的虚拟address space

某些机器指令(特别是INT用于转到BIOS)具有特权,因此无法在用户模式下运行。如果您尝试在用户模式下运行它们,则处理器会使计算机异常,并且内核会通过发送一些信号来处理它。 (某些INT也用于系统调用,但首选SYSENTER指令。

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

阅读assembly howto

答案 1 :(得分:2)

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

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

此IDT由OS设置。 Linux设置它以便描述符指向它自己的处理程序,而不是BIOS处理程序。