![BIOS 是直接读取引导加载程序还是将其加载到 RAM 中?](https://linux22.com/image/37575/BIOS%20%E6%98%AF%E7%9B%B4%E6%8E%A5%E8%AF%BB%E5%8F%96%E5%BC%95%E5%AF%BC%E5%8A%A0%E8%BD%BD%E7%A8%8B%E5%BA%8F%E8%BF%98%E6%98%AF%E5%B0%86%E5%85%B6%E5%8A%A0%E8%BD%BD%E5%88%B0%20RAM%20%E4%B8%AD%EF%BC%9F.png)
我试图了解启动过程的第一步。
CPU读取BIOS
- 它读取固定地址指令
- 会跳转到第一个BIOS指令地址
- 它将执行代码
- 它将执行“开机选择测试”,检查设备并找到第一个可启动设备
然后 Bios 将读MBR 至加载主引导加载程序
- 主引导加载程序将执行加载程序的第二阶段(例如:Grub)
- 加载器的第二阶段将内核加载到内存中
我的问题是:
- 当BIOS读和加载内存中的主引导加载程序,我们是在谈论 RAM 内存吗?
- 中央处理器可以吗直接地址从 HDD(读取指令)而不将内容加载到 RAM 中(我们在这里忽略性能问题)?
- 对于 BIOS 来说同样的问题:它是直接读取还是在执行前加载到 RAM 中?
答案1
谢谢@slm,我找到了大部分答案。
当 BIOS 读取并加载内存中的主引导加载程序时,我们是在谈论 RAM 内存吗?
是的,我们愿意。 BIOS将引导加载程序代码加载到特定地址( 0x7c00
),然后跳转到该地址执行指令。
CPU是否可以直接从HDD寻址(读取指令)而不将内容加载到RAM中(这里我们忽略性能问题)?
我不认为CPU可以执行不在内存地址空间中的指令,但如果我错了,请纠正我(Can Iexecute an instructions from the I/O address space?)。
对于 BIOS 来说同样的问题:它是直接读取还是在执行前加载到 RAM 中?
BIOS是直接读取的:内存地址空间中的某些地址区域直接重定向到ROM内存。
来源:http://duartes.org/gustavo/blog/post/how-computers-boot-up/
参考
答案2
CPU 读取 BIOS [...]
这是一个有点简化的观点,但基本思想是正确的。典型的初始化代码实际上由几个连续的部分组成。
然后 Bios 将读取 MBR 以加载主引导加载程序
这是一个传统的 BIOS。现代 PC BIOS 具有标准化的引导加载程序接口:UEFI。非 PC 平台不会将制造商提供的引导加载程序称为“BIOS”。
当 BIOS 读取并加载内存中的主引导加载程序时,我们是在谈论 RAM 内存吗?
是的。没有其他存储器可以写入(在正常操作下)。
CPU是否可以直接从HDD寻址(读取指令)而不将内容加载到RAM中(这里我们忽略性能问题)?
不。据我所知,没有任何架构具有可由 CPU 寻址的磁存储。操作系统中总是需要一些代码来访问硬盘。
对于 BIOS 来说同样的问题:它是直接读取还是在执行前加载到 RAM 中?
这取决于硬件。 ROM 或闪存中的某些代码可以直接从 ROM 执行。通常,除了从 ROM(或者我认为是 PC 硬件上的 EEPROM)执行的一些初始引导加载程序代码之外,代码会首先复制到 RAM 中,因为 RAM 速度更快。