研究目的

  • ブートが高速で、コンパクトなカーネルを実装する。
  • 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 を登録する方法

SetVirtualMemoryMap を使った方法

Page Table を登録する方法

実験

  • ExitBootServices の前に GetMemoryMap で MemoryMap を取る
  • ExitBootServices する
  • SetVirtualAddressMap する
  • そうすると、 ExitBootServices でエラー
  • ELILO がすでに、kernel への jump 前に GetMemoryMap しており、
    その Map を使用して SetVirtualMemoryMap する必要がある

今週すること

  • ELILO の中で使われている MemoryMap を使って SetVirtualMemoryMap を試す