Open6

『オペレーティングシステム - 設計と実装 (第3版)』 を読む。第5日目。プロセス 2

horie-thorie-t

MINIX 3の起動

ファームウェアに設定されている起動ディスクの優先順位の順序に従って起動ディスクになる。

ハードディスクが起動ディスクの場合、最初のセクタ(マスター・ブート・レコード: MBR)には、小さなプログラム(マスターブート)とパーティション・テーブル(起動パーティションも指定されている)が格納されている。

  1. このセクタがハードウェアによって読み込まれ実行される。
  2. マスターブートが起動パーティションの最初のセクタ(ブートセクタ)を読み込み実行する。
  3. ブートセクタにはブートプログラムが格納されており、/boot/bootを読み込み実行する。
  4. bootプログラム(セカンドローダとも呼ばれる)がOSのイメージファイル(ブートイメージ)を読み込む
horie-thorie-t

ブートイメージ

含まれるコンポーネント

コンポーネント 説明
kernel カーネル
pm プロセスマネージャ
fs ファイルシステム
rs 再生サーバ
memory RAMディスクドライバ
log ログ出力用
tty コンソール
driver ディスクドライバ
init ユーザプロセスの親
horie-thorie-t

主なディレクトリ

ディレクトリ 説明
kernel 第一階層(スケジューリング、メッセージ、クロック、システムタスクを担当)
drivers 第二階層(ディスク、コンソール等のドライバ)
servers 第三階層(プロセスマネージャ、ファイルシステム等のサーバ)
lib ライブラリ手続き(open, read等)
tools システム構築用のMakefileやスクリプト
boot 起動、インストール用
horie-thorie-t

ブートイメージの作成

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
horie-thorie-t

ブートイメージの構成

以下のような構成で各項目がセクタサイズ(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部は一緒になる場合もある。

horie-thorie-t

ブート処理の解説

書籍には、電源が入ってからカーネルに処理が移るまでの部分のコードの解説がほとんどない。

こちらに説明があるので読んでいく。