Linux内核如何防止BIOS系统调用?

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

Solutions Collecting From Web of "Linux内核如何防止BIOS系统调用?"

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

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

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

一个应用程序使用系统调用来与内核交互(也许通过VDSO )。

阅读大会如何

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

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

这个IDT由OS设置。 Linux将其设置为使描述符指向自己的处理程序,而不是BIOS处理程序。