研究目的
- ブートが高速で、コンパクトなカーネルを実装する。
- 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 を試す