【问题标题】:Is address 0xFFFFFFF0 hardwired for system BIOS ROM?地址 0xFFFFFFF0 是否为系统 BIOS ROM 硬接线?
【发布时间】:2014-05-29 07:51:36
【问题描述】:
我从以前的堆栈溢出答案中读到了这个:
初始开机时,BIOS 直接从 ROM 执行。 ROM 芯片映射到处理器内存空间中的固定位置(这通常是芯片组的一个特性)。当 x86 处理器退出复位后,它会立即从 0xFFFFFFF0 开始执行。
跟进问题,
这个地址 0xFFFFFFF0 是硬连线的,只是为了访问系统 BIOS ROM,然后在系统启动并运行之后,这个地址 0xFFFFFFF0 不能被 RAM 使用吗?
另外,当这个地址0xFFFFFFF0被我们访问系统BIOS ROM时,CPU是作为IO设备还是内存设备访问它?
【问题讨论】:
标签:
memory
x86
cpu
boot
bios
【解决方案1】:
上电时,它是 ROM。必须是,否则 CPU 将无法启动。一些芯片组具有寄存器位,允许您从内存地址空间取消映射 BIOS 闪存芯片。当然你不应该在从 ROM 执行时这样做!
PC 硬件上有一种称为"shadowing" 的通用技术,BIOS 会将 ROM 芯片的内容复制到映射到相同地址的 RAM 中。 RAM 通常比 ROM 快得多,因此可以加快系统速度。
至于你的第二个问题,它是一个内存设备。 一定有以下原因:
- I/O 地址是 16 位,而不是 32 位。
- x86 处理器无法从 I/O 空间执行代码。您不能将指令指针指向 I/O 地址。
【解决方案2】:
它被映射到全局内存空间并以相同的方式寻址。按照惯例,不应将 RAM 映射到其他设备使用的任何地址范围。这很常见。您可能还记得几年前,在 64 位操作系统在家用 PC 上变得更加标准之前,用户可以安装 4 GB 的物理内存,但由于显卡映射到 512 MB 的地址空间,因此可能只能访问 3.5 GB .