OS関連の雑多なメモ
ブートの仕組み
OSが起動しないとファイルやディレクトリにはアクセスできない
ここではOSが起動する直前までの段階と主なOS起動のごく初期の段階、ブートシーケンスについて説明する
電源を入れるとマザーボード上にあるBIOS ROM内に格納されている初期化プログラムが呼び出される
周辺機器の初期化
初期化プログラムはまずビデオカードの初期化を行う
これは初期化の経過をディスプレイに表示する必要があるため一番最初に行われる
そのあとはメモリチェックや基本的なデバイスの初期化
起動ドライブのサーチ
ドライブにはDFF,HDD,CD-ROMなどがあるがここではHDDの場合について
BIOSの設定でBoot Sequenceという項目があるが、この項目を設定することによって起動ドライブを指定できる
起動ドライブディスクの先頭セクターのロード
次にBIOSプログラムが行うのは起動ドライブディスクの先頭セクターのロードである
この段階ではOSは何も実行されておらず、ファイルシステムは存在しない
この状態でディスクにアクセスするにはBIOS ROM内部に16ビットコードで書かれているPC/ATの基本入出力サブルーチンのうち、ソフトウェア割り込みINT13Hで呼び出せるディスクBIOSによって行うしかない
これはある意味ハードディスクを生で読むこと
先頭セクターにある起動プログラムの実行
先頭セクターをロードすると、BIOSプログラムはそこに書かれたプログラムに制御を移す
この先頭セクターをハードディスクではマスターブートレコードと一般によび、フロッピーディスクの方はブートセクターと呼ぶ
マスターブートレコード(MBR)
PC/AT互換機ではセクターは512バイトなのでMBRも当然512バイトである
パーティションテーブル、ブートシグニチャがある
先頭から446バイトのプログラム領域はBIOSプログラムによって次のように実行される
1 パーティションテーブルの検査
2 見つかったらその領域の先頭位置をテーブルから取得する
3 BIOSにその位置を示して、当該先頭セクターをメモリーにロードしてもらう
4 ロードした先頭セクターに制御を移す
この起動プログラムをマスターブートストラップローダと呼ぶ
LinuxのローダであるLILOなどはマスターブートレコード内のプログラム領域部分に書き込むことができ、PC/AT互換機の一般的ブートシーケンスをトラップして独自の起動シーケンスを実現することができる
このようにしてPC/AT互換機一般のIBMオリジナルの部ートストラップローダと違ったものになってしまったものを元に戻す方法として、DOSやWindows95/98のFdisk/mbrというコマンドがある
これはパーティションテーブルに触れることなく、プログラム領域部分だけPC/AT互換機一般の不ートストラップローダに書き換える
ブートセクター修復用のsysコマンドとfdisk/mbrコマンドの役割が時折混同されるので気を付ける
MBRの部ートストラップローダによってブートセクターがロードされ、制御がそちらに移されると、ブートシーケンスもいよいよPC/AT互換機一般の世界から離れてOS固有の世界に足を踏み入れる
ブートセクター
ブートセクターはOS固有
ブートセクターは各パーティションの先頭セクターということでパーティションブートレコード(PBR)と呼ばれることも結構ある
ブートブロックなどとも呼ぶ
プログラムコードへのジャンプ命令、ディスクパラメータ、プログラムコード、ブートシグニチャ
ブートセクターの役割とこれを作る人
MicrosoftOSの場合、ブートセクターの役割はOSのブート作業だけにとどまらない
ブートセクターの中のディスクパラメータはそのパーティションのファイルシステムに関する重要な情報源としてOS稼働時にも参照される
LinuxなどはLILOを当該ブートセクターにインストールしない限り、ブート作業すらしない
ブートシーケンス図
ブートシーケンスをそれぞれのデータの位置関係もわかるように図式化した
システムコールの仕組み