研究目的

  • ブートが高速で、コンパクトなカーネルを実装する。
  • Codesegment と Datasegment をカーネルに実装するにあたって、メモリ管理の役割とどう合致するのかを検証する。
  • 上記を確認したら CbC を用いて、動作が軽く落ちにくいカーネルを実装する。
  • モデル検証に対応し、エラー予測を可能にする
  • カーネルパニックをなくす
  • Mach-O を ELILO でロードし、64bit で動作可能にする

ELILO

現状

ELILO

目標

  • Page Table を初期化
  • 一度 Paging を disable
  • CR3 レジスタに初期化した Page Table を登録
  • 再度 Paging を enable

目標 [EFI version]

  • memmap を設定
  • 新しく仮想メモリ用に memmap を作る
  • irq をセーブして、pgd を作る[TLB をフラッシュ]
  • UEFI API SetVirtualAddressMap を call
  • pgd を登録して、irq をリストア[TLB をフラッシュ]

どちらかの方法で、ELILO 内に Page table を作る

Page Table を登録する方法

Intel のマニュアルを参照

Page Table を登録する方法

Intel のマニュアルを参照

  • segment descriptor CS の L ビット をクリアして、64 bit mode から compatibility mode へ
  • CR0.PG をクリアして Paging を disable
  • CR3 に、初期化したページテーブルのアドレスを入れる
  • CR0.PG に 1 をセットして Paging を enable する
  • 64 bit mode に戻す

Page Table を登録する方法

UEFI のマニュアルを参照

  • ……っていうのを、SetVirtualAddressMap() がやってくれるんじゃないか
  • つまり、EFI用の Memory map を設定すれば、仮想メモリが作れるんじゃ?

今週すること

  • 以上の2つを試す