SysVinit
 ブート
 起動
 dmesg
 ブートローダ

 SysVinit
 ・SysVinitは、ユーザプロセスを順番に処理(起動が遅くなる可能性がある。)
ハードウェア起動
BIOS/UEFI起動
OSカーネル起動
initプロセス起動
ユーザープロセス起動
・・・
ユーザープロセス起動

 ブート
 ・マルチプロセッサマシンでも、起動処理は1つのCPUで行う
 ・pciバス
 ・PCIデバイス
使用しているリソース
PCI BIOSから入手した検出データを「/proc/pci」ファイルで参照
(各ハードウェアのドライバとは無関係)

 起動(boot)
 ・電源オン
 ・0xfffffff0番地(ROM:BIOS)へジャンプ
 ・BIOS(ハードウェア組み込みプログラム)起動、POST(電源オン時テスト)実行
 ・ハードディスク(HD)の電源オン
 ・HDの記憶領域の先端(512バイト(MBR))にある情報を最初にメモリに読み込む
BIOSは、最後2バイトが「55」「aa」の場合「ブートシグニチャ」と認識する。
BIOSは「このデバイスはブート可能なデバイスである」と認識
ブートローダと呼ばれる、起動用のプログラムを格納するための記憶領域も用意
 ・メモリの機械語プログラムの先端にプログラム・カウンタを合わせ、そのプログラムを実行する。
(OS起動用の)ブートローダの起動
(ブートローダの指示にしたがい)OSの起動

 dmesg
 ・セットアップルーチン
初期チェック
物理MEMの大きさ確認
BIOSのサービスを呼び出す(INT 15H,Function E820H)
キーボードのリピートレートを設定
VGAの属性を設定
IDEディスクの属性設定
PS/2マウスの接続確認
A20を有効にする
仮IDT、GDTを作成
FPUをリセット
割り込みコントローラを仮設定
CPUをリアルモードからプロレクトモードにする
カーネルの展開ルーチンを呼び出す
 ・圧縮カーネルの展開
 ・展開後のカーネルを連結
 ・カーネルを起動
 ・カーネルは、initrdをマウント、RAMディスクにinitrdオプションで指定のファイルを展開
 ・(一時的なルートファイルシステムとしてマウント)
 ・カーネルは、初期設定スクリプト(linuxrc)を実行
デバイスの初期化
カーネル組込み又は、モジュールロードしたデバイスドライバを使用して行う
 ・initプログラム起動 (最初に起動されるユーザランドプロセス、ID = 0)
設定ファイルの読み込み(/etc/inittab)
ネットワークの設定
ファイルシステム破損チェック
ファイルシステムのマウント
モジュールの依存関係チェック、デバイスの初期化
ランレベルに応じて、起動プロセスの実行
「/etc/init.d/rcX」スクリプトによって、「/etc/rcX.d」配下のスクリプトを実行
アプリケーションの起動スクリプトのシンボリックリンク
命名規則
S : Start
K : Kill
数字の小さい順に実行

 ブートローダ
 ・既にインストールしてあるものが適切に動作しているのであれば、それを使い続けるのがベスト
 ・電源投入によって開始されるOS起動までの一連の動作をブート ストラップ(boot strap)
電源ON  システムBIOS  ブートローダー  OSの起動