研究目的

  • ブートが高速で、コンパクトなカーネルを実装する。
  • Codesegment と Datasegment をカーネルに実装するにあたって、メモリ管理の役割とどう合致するのかを検証する。
  • 上記を確認したら CbC を用いて、動作が軽く落ちにくいカーネルを実装する。

今週の作業

  • Linux 3.8.9 を読む
  • メモリ初期化のデバッグ

ELILO

ELILO の中でのカーネル、という方針

「ELILOアプリケーションの中」だったら ExitBootServices を実行しないで書くべき

  1. GDT/LDT を設定
  2. 別セグメントに飛ぶ
  3. メモリの初期化
  4. Call Gate と TSS
  5. CPL (current privilege level) を調べる
  6. 64 bit mode(32bit と互換性なし)/compatibility mode
  7. UEFI のマニュアルには
    Paging mode is enabled and any memory space defined by the UEFI memory map is identity mapped (virtual address equals physical address).

エラーメッセージ

cr0 の PE bit を無効にした時

cr3 に値を入れた時

Fedora Linux

  • Linux kernel 3.8.9
  • gdb で追いながら追っている途中

PostgreSQL

手順

  1. ./initdb -D $PGDATA
    データベースの初期化
  2. ./pg_ctl -D $PGDATA -l [logfile_name] start
    PostgreSQL の起動
  3. ./psql user
    対話プロンプトが開く
  4. ps -ef | grep postgres
    PostgreSQL のプロセスを探し出す
  5. gdb $DIR/bin/postgres [process number]
    で読む