loader 的整体结构。
1 loader被bootSector加载到了BaseOfLoader,偏移地址OffsetOfLoader。
纯物理地址BaseOfLoaderPhyAddr。
2
loader的功能0----调用中断,将得到的内存信息,存入数据buf中。
loader的功能1----加载kernel.bin这个文件到,BaseOfKernelFile:OffsetOfKernelFile
loader的功能2----跳入保护模式,进行保护模式中的一些初始化。
3
loader的功能0(详):这些存储的内存信息,第一个目的是用来显示当前内存的情况,第二个目的是在显示内存情况的同时,计算出的最大块的内存,就是当前的内存大小,这样在初始化PageDir和PageTable的时候,好计算到底要腾出几个页表,而不是对4G进行页表。
4
loader的功能1(详):就是不断的加载RootDirSector(总共大约14块,根据现在的磁盘格式),通过比对名字, 然后找到kernel.bin的RootDirEntry,可以知道它的第一块Sector号码,将其读入内存中的BaseOfKernelFile:OffsetOfKernelFile 中,同时由于是FAT12的格式,可以从FAT表中再读出下一块的Sector号,也将其读入内存,放在刚才那块的后面。
以上这些读入kernel的工作都是在实模式下完成的。
5
loader的功能2(详):这次的保护模式构建只有3个描述符,SelectorFlatC,SelectorFlatRW,SelectorVideo。 SelectorFlatC,SelectorFlatRW都指向0-4G的内存,不过一个属性是读写,一个是可执行。SelectorVideo指向的是显存,主要是用于操作显存显示字符。
loader在加载玩kernel.bin文件之后,就进行哪些一系列的工作开始跳入保护模式。
进入保护模式之后:
1显示存储的内存信息,在这个阶段
计算现有内存的大小(就是最大的那个内存段)
2根据内存大小
对页表进行初始化。
3
将kernel转移到它应该在的位置。
4跳入kernel。loader结束。