研究目的

  • ブートが高速で、コンパクトなカーネルを実装する。
  • 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 接続ができることを明示