【问题标题】:Who loads the BIOS and the memory map during boot-up谁在启动期间加载 BIOS 和内存映射
【发布时间】:2014-01-18 14:34:31
【问题描述】:

对于 BIOS,维基百科指出:

BIOS 内存地址的定位是在计算机首次启动时执行。然后跳转指令指示处理器开始执行 BIOS 中的代码。

我知道 BIOS 存在于非易失性内存中。但它必须加载到 RAM 中才能执行。那么谁将 BIOS 加载到 RAM 中呢?

我还读到在启动时加载了内存映射。 BIOS 是否加载此内存映射?存放在哪里?

【问题讨论】:

  • 您可以从 ROM 运行 BIOS。
  • 这个问题在这里是题外话。以后用superuser.com,这个问题是already covered
  • 内存映射被硬编码到硬件 AFAIK 中。没有要加载的“内存映射”。
  • 我认为这个其他主题回答了你的问题。 stackoverflow.com/questions/5300527/…
  • @tangrs 内存映射绝对不是硬编码的——如果是,它如何支持改变 RAM 的数量?

标签: memory x86 boot bios memory-mapping


【解决方案1】:

初始开机时,BIOS 直接从 ROM 执行。 ROM 芯片映射到处理器内存空间中的固定位置(这通常是芯片组的一个特性)。当 x86 处理器退出复位后,它会立即从 0xFFFFFFF0 开始执行。

但是,直接从 ROM 执行非常慢,因此 BIOS 所做的第一件事通常是将 BIOS 代码复制并解压缩到 RAM 中,然后从那里执行。当然,必须先初始化内存控制器! BIOS 会事先处理好这些。

内存映射布局因系统而异。开机时,BIOS 将查询连接的 PCI/PCIe 设备,确定需要哪些资源,并将它们放置在内存映射中的最佳位置。如果一切正常,内存映射设备不应与 RAM 重叠。 (请注意,在 RAM 大于 3GB 的 64 位系统上,事情会变得复杂,因为您需要在 RAM 中间为 32 位 PCI/PCIe 设备设置一个“孔”。一些早期的 x64 BIOS 和芯片组对此存在问题.)

【讨论】:

  • The ROM chip is mapped to a fixed location in the processor's memory space. 这是否意味着内存控制器(AFAIK 位于 Intel 和 AMD 的 CPU 上)已将引脚连接到包含 BIOS 的 CMOS 并已硬编码该内存范围的重定向到去那些别针?
  • @Sled:不,物理地址空间包括 DRAM,还包括 PCIe 和其他设备内存。不涉及 DRAM 的物理地址被路由到环形总线上的“系统代理”,而不是其中一个内存控制器。系统代理与芯片组有片外连接(以及一些其他专用的 PCIe 通道,这些通道通常连接到显卡的 PCIe x16 插槽。)X86 Address Space Controller?
猜你喜欢
  • 1970-01-01
  • 2012-04-02
  • 2023-03-03
  • 2020-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多