[操作系统] 操作系统真相还原读书笔记三:MBR加载loader到内存并跳转到loader执行

为什么要有loader程序?

通过操作系统真相还原读书笔记二:编写MBR主引导记录我们已经能够正常运行MBR主引导记录(有些书籍也叫做boot)程序了,但该程序什么也没做。我们的MBR 受限于 512 宇节大小的,在那么小的空间中,设法为内核准备好环境,更没法将内核成功加载到内存井运行。 所以我们要在另一个程序中完成初始化环境及加载内核的任务,这个程序我们称之 为 loader,即加载器。那么loader应该放在硬盘的哪个位置,又得将他加载到物理内存的什么地址呢?

loader应该放在哪里?又该加载到内存的哪个位置?

由于 MBR 是占据了硬盘的第 0 扇区(以逻辑 LBA 方式,扇区从 0 开始编号,若是以物理 CHS 方式, 扇区则从 1 开始编号),第 1 扇区是空闲的 ,可以用,但离得太近总感觉不如隔开 一 点心里踏实,所以把 loader 放到第 2 扇区。MBR 从第 2 肩区中把它读出来。

实模式下1MB内存布局我们可以看出两个地址空间0x500~0x7BFF0x7E00~0x9FBFF都是可用的内存区域,因此loader可以加载到这两个内存区域中的一个。但考虑如下两个因素:

  • 首先, loader 中要定义一些数据结构(如 GDT 全局描述符表,不懂没关系,以后会说),这些数据结 构将来的内核还是要用的,所以 loader加载到内存后不能被覆盖。
  • 其次,随着咱们不断添加功能,内核必然越来越大,其所在的内存地址也会向越来越高的地方发展, 难免会超过可用区域的上限,咱们尽量把 loader放在低处,多留出一些空间给内核。

我们把loader放在地址空间0x500~0x7BFF内,具体放哪呢?没有明确规定,我们放在地址0x900处。

如何读取硬盘?

一般主板上提供两个IDE插槽(也称为通道),IDE0和IDE1,IDE0也称为Primary通道,IDE1也称为Secondary通道,与IDE插槽链接的IDE线上可以挂两块硬盘,一个是主盘mater、另一个是从盘slave。

猜你喜欢

转载自blog.csdn.net/zkp_java/article/details/81411037