天天看點

核心的執行頭程式head.S

功能

  • 定義data段和text段
  • 重新手動初始化gdt表, idt表, tss表結構
  • 初始化頁表和頁目錄 --> 頁目錄的資料放在一個頁表中
    • 在頁目錄中, 其實位址為0x1000, 初始化頁目錄, 一個頁目錄占用的頁表的剩餘資料值使用0來填充, 一個頁表的大小分為(2MB, 4MB, 8MB等, 一般來說越大則容易造成頁顆粒過于零碎)
  • 在text代碼段中, 使用 lgdt, lidt 和 load cr3 等加載資料到寄存器中
  • 初始化完畢之後, 通過跳轉指令将CPU指向真正核心的代碼, 就是一個函數的位址罷了
  • 注意: 對于head.S, 我們知道他是在核心這一個可執行檔案中的, 并且是在最前面, 是以我們在連結的時候需要将其放到核心代碼的最前面

繼續閱讀