【问题标题】:how does linux kernel prevents the BIOS system calls?linux内核如何防止BIOS系统调用?
【发布时间】:2013-11-01 08:06:33
【问题描述】:

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

【问题讨论】:

  • 你的意思是在用户空间调用bios例程吗?
  • Linux 根本不公开 irq 以供任何程序员使用,因此 bios irq 的。

标签: linux kernel bios


【解决方案1】:

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

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

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

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

阅读assembly howto。也可以在kernelnewbies.org询问

Linux 内核为open source,您可以从kernel.org 下载并研究其源代码

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

【讨论】:

  • 内核如何判断某个中断是否被拒绝?
  • 内核处理所有中断。它不否认其中任何一个。
【解决方案2】:

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

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

此 IDT 由操作系统设置。 Linux 对其进行了设置,以便描述符指向它自己的处理程序,而不是 BIOS 处理程序。

【讨论】:

    猜你喜欢
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 2014-03-20
    • 2015-01-13
    • 2013-04-25
    • 2011-01-07
    相关资源
    最近更新 更多