【问题标题】:Do Bios interrupts always sits on ram?Bios 中断是否总是位于 ram 上?
【发布时间】:2016-08-13 07:17:34
【问题描述】:

我的问题是即使在操作系统加载后,Bios 中断是否仍位于 RAM 中?如果是,那么保留 bios 中断和中断处理程序的那部分 ram 将被保留,并且不会被其他程序覆盖。那正确吗? 提前致谢

【问题讨论】:

  • 从技术上讲,BIOS 不在 RAM 中,而是在 ROM 中。不过,在启动时将其复制到 RAM 以提高性能是正常的。无论哪种方式,主板 BIOS 的典型地址范围是 0xF00000xFFFFF,而 VGA BIOS 的地址范围是 0xC00000xC7FFF。在实模式下,您通常可以访问高达0xA0000(略少)的 640k RAM。另请参阅wiki.osdev.org
  • 如果您启动受保护模式的操作系统,它将根据需要重新分配内存范围,并且不使用 BIOS 中断(但可能会使用 BIOS/ROM 数据)。
  • 假设我想在我的程序中使用 BIOS 中断,是从 ROM 中检索它还是从 RAM 中检索它。如果它从 RAM 中获取,则在该特定地址范围内为 BIOS 保留,并且在操作系统加载后它永远不会被覆盖。对吗?
  • 传统上,如果需要,每张卡都可以有一个 rom,其中包含该卡的 bios,并且 bios 将用于这些中断。但是不久之后出现了软 bioses,因此您可以在 ram 或 rom 中使用处理程序。有关系吗?可以修改向量表,从而使处理程序的哪种存储方式无关紧要?只需要保护向量表免受不良软件的影响
  • 操作系统很可能会接管 bios 调用,这是有充分理由的,让处理程序对操作系统友好,而不是操作系统周围的后门会造成损害

标签: assembly operating-system embedded bios


【解决方案1】:

由于 RAM 是易失性的,并且在关闭电源时会被完全擦除,因此处理 BIOS 中断的代码不存在于 RAM 中。这一切都在 ROM 中(或者这些天实际上是闪存)。然而,如何处理中断有一个关键部分保存在 RAM 中,那就是中断向量表 (IVT),它存储所有中断例程的地址。 CPU 使用此表来查找要执行的代码的地址以处理中断。 BIOS 中断例程还使用 RAM 存储它们需要运行的各种数据位。

当现代保护模式操作启动时,它必须用自己的中断程序完全替换所有中断程序。它必须这样做,因为 BIOS 的中断代码不会在保护模式下工作。除非操作系统采取特殊步骤将 BIOS 创建的旧 IVT 以及 BIOS 存储在 RAM 中的任何数据保存在 RAM 中,否则此信息将丢失。这意味着不再可能在不重新启动机器的情况下使用 BIOS 中断。 BIOS 用来处理中断的 RAM 没有保留,操作系统可以随意使用它。

据我所知,唯一能保留 BIOS 的 IVT 和数据的保护模式操作系统是 Windows 95、98 和 ME。这些也是唯一允许您从用户模式程序调用 BIOS 中断的操作系统,然后只能从 16 位应用程序可靠地调用。

【讨论】:

    猜你喜欢
    • 2018-11-30
    • 2014-10-29
    • 2021-10-01
    • 1970-01-01
    • 2022-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    相关资源
    最近更新 更多