Open6
『オペレーティングシステム - 設計と実装 (第3版)』 を読む。第5日目。プロセス 2
MINIX 3の起動
ファームウェアに設定されている起動ディスクの優先順位の順序に従って起動ディスクになる。
ハードディスクが起動ディスクの場合、最初のセクタ(マスター・ブート・レコード: MBR)には、小さなプログラム(マスターブート)とパーティション・テーブル(起動パーティションも指定されている)が格納されている。
- このセクタがハードウェアによって読み込まれ実行される。
- マスターブートが起動パーティションの最初のセクタ(ブートセクタ)を読み込み実行する。
- ブートセクタにはブートプログラムが格納されており、/boot/bootを読み込み実行する。
- bootプログラム(セカンドローダとも呼ばれる)がOSのイメージファイル(ブートイメージ)を読み込む
ブートイメージ
含まれるコンポーネント
コンポーネント | 説明 |
---|---|
kernel | カーネル |
pm | プロセスマネージャ |
fs | ファイルシステム |
rs | 再生サーバ |
memory | RAMディスクドライバ |
log | ログ出力用 |
tty | コンソール |
driver | ディスクドライバ |
init | ユーザプロセスの親 |
主なディレクトリ
ディレクトリ | 説明 |
---|---|
kernel | 第一階層(スケジューリング、メッセージ、クロック、システムタスクを担当) |
drivers | 第二階層(ディスク、コンソール等のドライバ) |
servers | 第三階層(プロセスマネージャ、ファイルシステム等のサーバ) |
lib | ライブラリ手続き(open, read等) |
tools | システム構築用のMakefileやスクリプト |
boot | 起動、インストール用 |
ブートイメージの作成
tools/Makefile で定義
make image
でブートイメージが作成される。
まず
PROGRAMS= ../kernel/kernel \
../servers/pm/pm \
../servers/fs/fs \
../servers/rs/rs \
../drivers/tty/tty \
../drivers/memory/memory \
../drivers/log/log \
AT:../drivers/at_wini/at_wini \
BIOS:../drivers/bios_wini/bios_wini \
FLOPPY:../drivers/floppy/floppy \
../servers/init/init \
# bootdev.img
をコンパイルして、 installboot
で一つのブートイメージファイルに結合する。
Usage: installboot -i(mage) image kernel mm fs ... init
ブートイメージの構成
以下のような構成で各項目がセクタサイズ(512バイト)にアライメントされて保存される。
内容 |
---|
kernelのa.outヘッダ部 |
kernelのtext部 |
kernelのdata部 |
pmのa.outヘッダ部 |
pmのtext部 |
pmのdata部 |
... |
initのa.outヘッダ部 |
initのtext部 |
initのdata部 |
a.outの形式によってはtext部とdata部は一緒になる場合もある。