Part 2: The Boot Loader
目标及任务
学习目标:能够更加熟悉 x86 汇编语言,以及 PC 启动的整个过程,而且也会首次学习使用QEMU软件来仿真xv6操作系统,并且配合GDB对操作系统的运行进行调试。
作业:完成Exercise3-6。
简介
对于PC来说,软盘,硬盘都可以被划分为一个个大小为512字节的区域,叫做扇区。一个扇区是一次磁盘操作的最小粒度。每一次读取或者写入操作都必须是一个或多个扇区。如果一个磁盘是可以被用来启动操作系统的,就把这个磁盘的第一个扇区叫做启动扇区。这一部分介绍的 boot loader 程序就位于这个启动扇区之中。当 BIOS 找到一个可以启动的软盘或硬盘后,它就会把这512字节的启动扇区加载到内存地址 0x7c00~0x7dff 这个区域内。
对于6.828,我们将采用传统的硬盘启动机制,这就意味着我们的 boot loader 程序的大小必须小于 512 字节。整个 boot loader 是由一个汇编文件,boot/boot.S,以及一个C语言文件,boot/main.c。
如果我们想要完全理解这些文件,我们需要一些前置知识:
Boot loader 必须完成两个主要的功能。
-
首先,boot loader 要把处理器从 real 模式转换为 32bit 的 protected 模式,因为只有在这种模式下软件可以访问超过1MB空间的内容。
-
然后,boot loader可以通过使用 x86 的特定的 IO 指令,直接访问 IDE 磁盘设备寄存器,从磁盘中读取内核。
对于 boot loader 来说,有一个文件很重要,obj/boot/boot.asm。这个文件是我们真实运行的 boot loader 程序的反汇编版本。