FreeBSDFreeBSD のブートプロセスのブートプロセス
USP 友の会 BSD 担当
今泉光之
@bsdhack
http://bsdhack.org
FreeBSDのブートプロセス 2
講師講師
● 今泉光之
 UNIX/Linux環境でのプログラミングを中心に、ネットワークや
インフラなども含め20年以上に渡る経験だけは積んできました。
 当初はC言語でコンパイラ、Xサーバ、ドライバ、TCP/IPによる
通信などシステム系のプログラミングが主でしたが、最近はPerl
やPHPなどのWeb向けのLLも使っています。
FreeBSDのブートプロセス 3
ブートプロセスブートプロセス
● 最近は UEFI→grub→systemd の流れが主流(?)
●
でも私は BSDHACK だ
● 空気を読まずに FreeBSD のブートプロセス
FreeBSDのブートプロセス 4
ブートとはブートとは
● コンピュータを起動する事、またはそのための一連の動作
● ブートストラップローダに由来する
● ブートストラップとはブーツの後ろについてる輪っか
● 底なし沼に落ちた時にブートストラップを自分で引っ張って沼
から逃げ出したという古いジョークが元ネタ ( 諸説有り)
● 笑ってあげましょう
FreeBSDのブートプロセス 5
BIOSBIOS
● Basic Input Output System
● マザーボード上の ROM に格納されているプログラム
● コンピュータの電源投入時に最初に動作する
● キーボードやディスプレイなどへのアクセスインタ
フェイスなどを提供する
● PC が起動できるのは BIOS のおかげ
FreeBSDのブートプロセス 6
CPUCPU のモードのモード
● Intel の CPU には 2 種類のモードがある
● リアルモード (Real Mode / Real Address Mode)
● プロテクトモード (Protected Virtual Address Mode)
FreeBSDのブートプロセス 7
リアルモードリアルモード
● Intel の 80x86 プロセッサの動作モード
● 8086 互換の動作をするモード
● BIOS は互換性のためにこのモードで動作している
● アクセス保護機能がない
● 16 ビット
● メモリの実アドレスを指定する
FreeBSDのブートプロセス 8
プロテクトモードプロテクトモード
● Intel の 80286 プロセッサ以降の動作モードの一つ
● メモリや I/O の保護機能がある
● ページングとアドレス変換機能がある
● 32 ビット
● 仮想メモリ機能のサポート
● 近代的な OS の機能が実現可能になる
FreeBSDのブートプロセス 9
電源投入電源投入
● PC の電源 ON
● POST(Power On Self Test)
● BIOS
● ブートデバイスの先頭の 1 セクタ (512 バイト ) を読む
● 制御を移す
● ブートローダ
FreeBSDのブートプロセス 10
ブートローダブートローダ
● ハードディスクの第 1 セクタを MBR と呼ぶ
● Master Boot Record
● プログラム領域 :446 バイト
● パーティションテーブル :64 バイト (16 バイト x4)
● マジックナンバー :2 バイト
● MS-DOS の fdisk には /mbr というオプション
FreeBSDのブートプロセス 11
boot0boot0
● FreeBSD 付属のブートローダ
● パーティションテーブルのエントリにアクセスし OS の名前
を表示して起動する OS を選択
– F1 DOS
– F2 FreeBSD
● 次回の起動のために MBR を更新
● 選択されたパーティションの 1 セクタ目に制御を移す
FreeBSDのブートプロセス 12
boot1boot1
● FreeBSD パーティションのブートローダ
● boot2 をロードする
● boot2 で利用するサブルーチンも提供
FreeBSDのブートプロセス 13
boot2boot2
● カーネルや loader をメモリにロードする
● ファイルシステムにアクセス可能
● BTX(BooT eXtender) を内蔵
● プロテクトモードに移行
● /boot.config
FreeBSDのブートプロセス 14
loaderloader
● /boot/loader.rc
● /boot/defaults/loader.conf
● /boot/loader.conf
● カーネルに起動時オプションを指定
– -a 起動中にルートファイルシステムを指定可能
– -s シングルユーザモードで起動
– -v 冗長な出力
FreeBSDのブートプロセス 15
kernelkernel
● メモリアロケータの初期化
● swapper の生成 (pid=0)
● init プロセスの生成 (pid=1)
FreeBSDのブートプロセス 16
initinit
● シングルユーザーモード
● マルチユーザーモード
● /etc/rc を実行
FreeBSDのブートプロセス 17
/etc/rc/etc/rc
● /etc/rc.initdiskless
● /etc/rc.subr
● /etc/defaults/rc.conf
● /etc/rc.conf
● rcorder で起動順序を決定
● システム起動ファイル (/etc/rc.d/) の実行
● ローカル起動ファイル( /usr/local/etc/rc.d/) の実行

FreeBSDのブートプロセス