内核的执行头程序head.S

功能

  • 定义data段和text段

  • 重新手动初始化gdt表, idt表, tss表结构

  • 初始化页表和页目录 --> 页目录的数据放在一个页表中

    • 在页目录中, 其实地址为0x1000, 初始化页目录, 一个页目录占用的页表的剩余数据值使用0来填充, 一个页表的大小分为(2MB, 4MB, 8MB等, 一般来说越大则容易造成页颗粒过于零碎)
  • 在text代码段中, 使用 lgdt, lidt 和 load cr3 等加载数据到寄存器中

  • 初始化完毕之后, 通过跳转指令将CPU指向真正内核的代码, 就是一个函数的地址罢了

  • 注意: 对于head.S, 我们知道他是在内核这一个可执行文件中的, 并且是在最前面, 所以我们在链接的时候需要将其放到内核代码的最前面

原文地址:https://www.cnblogs.com/megachen/p/9769508.html