此前和同学讨论过:启动过程中,kernel还不在内存中,如何进行文件系统相关的操作?initrd和kernel都是存在于文件系统中的(/boot/)。
刚刚查了一下,了解到grub是可以解析inode的,因此grub可以从文件系统内读取这两个文件。
grub启动时,还有一点比较tricky。在实模式下,只能访问1MB的物理内存,而vmlinuz和initrd.img大于1MB;另一方面,BIOS中断能够很方便地读取磁盘,但是在保护模式下BIOS中断无法使用。grub在加载vmliuz和initrd.img的过程中总是重复以下过程:
- 将1MB的内容加载到内存中
- 进入保护模式
- 将低地址处的内容移动到高地址处
- 切换回实地址模式
这样就既可以使用大于1MB的空间,又可以用BIOS中断了