Loader的整体结构

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结束。

你可能感兴趣的:(Loader的整体结构)