内核的执行头程序head.S
功能
-
定义data段和text段
-
重新手动初始化gdt表, idt表, tss表结构
-
初始化页表和页目录 --> 页目录的数据放在一个页表中
- 在页目录中, 其实地址为0x1000, 初始化页目录, 一个页目录占用的页表的剩余数据值使用0来填充, 一个页表的大小分为(2MB, 4MB, 8MB等, 一般来说越大则容易造成页颗粒过于零碎)
-
在text代码段中, 使用 lgdt, lidt 和 load cr3 等加载数据到寄存器中
-
初始化完毕之后, 通过跳转指令将CPU指向真正内核的代码, 就是一个函数的地址罢了
-
注意: 对于head.S, 我们知道他是在内核这一个可执行文件中的, 并且是在最前面, 所以我们在链接的时候需要将其放到内核代码的最前面