2013-10-23 51 views
2

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

+0

你的意思是在用户空间调用BIOS例程吗? – tristan

+1

Linux并不公开irq,任何程序员都可以使用它,所以bios irq就是这样。 – icbytes

回答

2

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

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

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

3

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

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

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

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

阅读assembly howto

+0

内核如何确定是否拒绝某个特定的中断? – KawaiKx

+0

内核处理所有中断。它并不否认任何一个。 –