研究目的
- ブートが高速で、コンパクトなカーネルを実装する。
- 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 を作る
ELILO
ExitBootService の前後の接続
- ExitBootService 後に、 uefi_call_wrapper(RT->SetVirtualAddressMap, 4, mem_map_size, efi_mem_desc_size, mem_desc_ver, mem_map)
- Memory Map を、SetVirtualAddressMap 用に設定しなおさないといけないらしい
- そのまま入れたらマシンが落ちる
- 下記のものが、ExitBootService 前にMemoryMapにラベルが付けられている
- EFI_BOOT_SERVICES_CODE
- EFI_BOOT_SERVICES_DATA
- この辺りを使用して、VirtualAddressMap を生成する必要がある
Vagrant KVM
Bldsv09
- ExitBootService 後に、 uefi_call_wrapper(RT->SetVirtualAddressMap, 4, mem_map_size, efi_mem_desc_size, mem_desc_ver, mem_map)
- Memory Map を、SetVirtualAddressMap 用に設定しなおさないといけないらしい
- そのまま入れたらマシンが落ちる
- 下記のものが、ExitBootService 前にMemoryMapにラベルが付けられている
- EFI_BOOT_SERVICES_CODE
- EFI_BOOT_SERVICES_DATA
- この辺りを使用して、VirtualAddressMap を生成する必要がある
TLB
Linux kernel では
- アセンブラで呼び出し
- hypervisor call を経て、割り込み扱い、int 命令で呼び出す
- 必要なら SetVirtualAddressMap の前後に tlb flush を実装しないといけない
Vagrant の問題
- Vagraint の開発者が作成したツール Packer を使用して、Fedora19 を Vagrant で起動できる形式にする
- Chef で環境/構成を設定
- 構成はどうしよう
- Vagrant で起動し、それに ssh 接続ができることを明示