且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

内核的执行头程序head.S

更新时间:2022-08-12 16:14:53

功能

  • 定义data段和text段
  • 重新手动初始化gdt表, idt表, tss表结构
  • 初始化页表和页目录 --> 页目录的数据放在一个页表中

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