PC 教室ソフトウエア ⇒ ブートストラップ

ソフトウエア~ブートストラップという天地創造

電源を投入したり、リセットスイッチを押したりしてから、 OS が利用できるようになるまでの、一連の流れに付いてふれます。 この一連の流れをブートストラップBootstrap)と言ったりします。 ブートストラップという言葉は、 編上げブーツの靴紐を解く時の、その解けていく様に喩えて付けられたらしいです。

CPUや、 メモリ偏では、 ブートストラップのほんの始りの部分に付いて説明しました。 ブートストラップのプロローグという所です。 説明が多少重複しますが、ここでは、一気に OS の起動まで説明しましょう。

CPU は、リセットされたり、電源が投入されりした直後だけは、 プログラム無しで、ある程度まで動きます。 電源投入や、リセットによって、CPU は、 CPU 内部の準備(初期化)動作を行い、 メモリのある番地に記憶されているインストラクションから実行を開始します。

その最初に実行されるインストラクションからはじまるプログラムは、 イニシャルプログラムローダInitail Program LoaderIPL)と言ったりします。 IPL は、破壊されたり、消えてしまったりすることが無いように、 ROM に記憶されています。

ROM に記憶されているプログラムは、 BIOS でしたね? IPL は、その BIOS の一部なのです。 IPL の一番最初に実行されるインストラクション、 つまり、電源の投入や、リセットによって、 CPU が一番最初の実行しようとするインストラクションとなるメモリ番地が、 ROM になるようにマザーボードは作られています。 また、IPL の一番最初に実行されるインストラクションを記憶しているメモリ番地が、 電源の投入や、リセットによって、 CPU が一番最初に実行しようとするインストラクションとなるように、 BIOS は作られています。

ブートストラップの流れ
IPL
MBRHDDの場合)
Primary Boot Loader
Secondary Boot Loader
OS

IPL は、 まず、PC に搭載されているハードウエアの初期化作業を行います。 PC に搭載されているハードウエアを利用可能な状態にするのです。 一番最初に初期化するハードウエアは、グラフィックカードです。 これを利用可能な状態にしないと、ディスプレイに何も表示されないからです。 そして、次に、キーボードコントローラを初期化し、メモリを初期化しつつ、故障が無いかをチェックします。 この時、ディスプレイにその様子を表示します。

その後は、その他のハードウエアの初期化、動作チェックを行います。 どんな二次記憶装置(FDDHDDCD-ROM ドライブなど)が接続されているのかも確認します。 その様子も、ディスプレイに表示します。 そしていよいよ、OS を読み込むための準備に入ります。 OS を読み込み、起動するプログラムを、 ブートローダと言ったりします。 IPL は、このブートローダを読み込んで、実行しようとします。

OS を読み込むべきドライブは、 大抵、FDD か、HDD です。 PC によっては、その他のドライブからも、 OS を読み込めるようにサポートされています。 OS を読み込むドライブをどれからにするのかは、 BIOS の設定によって切り替えることも出来ます。 BIOS の設定は、 IPL が、メモリの初期化・チェックを行っているときに、 特定のキーを押すと(大抵は、F1 キーか、Delete キーです)、 設定をするための画面に切り替わり、行うことが出来ます。

以降は、この設定が、最初に FDD からの読み込みを試みた後、 FDD からの読み込みができない場合は、 HDD からの読み込みを試みるという設定になっているものとして説明します。

IPL は、 まず、OS の読み込みを FDD から行おうと試みます。 この時、FDD に、FD が入れられていると、 FD の一番最初のセクターに記録されているプログラムを読み込んで、実行します。 FD の、この一番最初のセクターは、 ブートレコードBoot Record)と呼ばれます。 FD の一番最初のセクターには、OS を読み込んで、 起動するためのプログラムが記録されているというのが、約束事になっています。

もし、OS 起動のための、正しい FD なら、 無事、OS が読み込まれて、起動します。 もし、そうで無いのなら、OS を起動できずに止まってしまいます。 場合によっては、何も表示されないかもしれません。 OS の起動に失敗し、画面上に何も表示されない場合は、 その FD の一番最初のセクターの中身は、 プログラムとしては目茶目茶なものが記録されているか、 FD の一番最初のセクターが読めない状態、 つまり、セクターとして壊れているか、フォーマットされていないか、大抵は、このいずれかです。

プログラムとしては目茶目茶というのは、 例えば、Macintosh でフォーマットした FD を、 IBM PC/AT に入れたとかです。 たとえ、Macintosh にとっては、正しいプログラムであっても、 IBM PC/AT にとっては、目茶目茶なプログラムになってしまうのです。 また、同じ OS であっても、 OS 起動用の FD が使えないということもあります。 例えば、IBM PC/AT での Windows 98 で作成した、 OS 起動用の FD を、 NEC PC-9821 で、 OS の起動を目的として使おうとしても、駄目です。 何故なら、FDD 周りのバードウエア構成と BIOS の構造が、 IBM PC/AT とは違うためです。

FDD に、 FD が入れられていなかった場合は、 HDD から OS の読み込みを行おうと試みます。 HDD からの読み込みは、FDD からの読み込みより複雑です。 何故なら、HDD には、パーティションという概念があるからです。 HDD には、パーティションがあるため、 それぞれのパーティションに違う OS をインストールして、 切り替えて使うことが出来ます。 この仕組みを実現するため、複雑になるのです。

HDD からの OS の読み込み・起動は、 FDD の場合と同じように、まず、 HDD の一番最初のセクターをプログラムとして読み込んで、 そのプログラムを実行することから始まります。 HDD の、この一番最初のセクターは、 マスターブートレコードMaster Boot RecordMBR) と呼ばれます。

MBR から読み込まれたプログラムは、起動可能とマークされているパーティションから、 OS の起動を行おうとします。 そのため、起動可能とマークされているパーティションの一番最初のセクターをプログラムとして読み込んで、 そのプログラムを実行します。 HDD の場合、この起動可能とマークされているパーティションの一番最初のセクターが、 ブートレコードと呼ばれます。 同じ機種の、同じ OS であれば、 FD のブートレコードに記録されている、 OS の読み込み・起動を行うプログラムと、 HDD のブートレコードに記録されている、 OS の読み込み・起動を行うプログラムは、同じ物です。

FD のブートレコード、もしくは、 HDDMBR から、 プログラムを読み込み、実行すると、IPL の実行は止まります。 OS の読み込み・起動は、 IPL が読み込み、実行したプログラムが担ってくれるからです。

さて、ここからは、Windows NT 4.0 の場合で説明します。 ブートレコードから読み込まれたプログラムは、自分が読み込まれたパーティションの、 ルートディレクトリにある、 Ntldr というプログラムを読み込んで、実行します。 そして、ブートローダの実行は止まります。 Ntldr は、 セカンダリブートローダSecondary Boot Loader)とも呼ばれます。 OSを読み込み、起動を行うための、 2 番目のブートローダだからです。 対して、Ntldr を読み込み、実行する、 FD 、もしくは、 HDD のブートレコードに記録されているプログラムは、 プライマリブートローダPrimary Boot Loader)とも呼ばれます。 OSを読み込み、起動を行うための、 最初のブートローダだからです。

起動された Ntldr は、画面をクリアして、 「OS Loader V4.0」と表示します。 そして、Boot.ini ファイルを読み込んで、 起動する OS を選択するためのメニュー画面を表示します。

このメニューから、Windows NT 4.0 が選ばれると、 Ntdetect.com というプログラムを読み込み、実行して、 PC のハードウエアに関する情報を収集させます。 そして、最後に、Ntoskrnl.exe を読み込み、 Ntdetect.com によって収集した、ハードウエアに関する情報をに引き渡しつつ、 起動します。これで、Ntldr は、止まります。 Ntoskrnl.exe は、Windows NT 4.0 OS そのものです。 後は、Ntoskrnl.exe が、 Windows NT 4.0 OS の世界を創り上げて行くのです。

以上が、ブートストラップという天地創造です。

さて、OS の起動に付いて触れたので、 OS の再起動に付いても触れたいと思います。 以下の 3 つの操作は、共に再起動という意味では同じ動きをします。 だから、全部同じだと思われがちなんですが、この 3 つの動作は、 全く違うと言って良いほど違うんです。

いきなり電源を切ったり、リセットスイッチを押したりするのは、 問題がある事を良く知っていると思いますが、その事はここでは無視しましょう。 それでも、大きく違うからです。

NT から「再起動」を選んだ場合は、 NT が終わる為の色々な事が行われ、 一旦画面が真っ暗になりますよね。 その直前に、CPU にだけ、リセットがかかっています。 リセットスイッチを押した時は、その瞬間に、全てのハードウエアに、リセットがかかります。

もし、NT から「再起動」を選らんでも、 正しく再起動してくれない時は、リセットスイッチを押すと正しく再起動してくれる時があるんです。 これは、CPU だけりセットされて、他のハードウエアがリセットされないから起こるのです。

CPU 以外のハードウエアが、調子がおかしくなってしまうと、 CPU が初期化のために、 色々なコントローラにお願いしても、それを聞き届けてくれなくなっている状態に陥っている場合があるんです。

一旦画面が真っ暗になってから、うんともすんとも言わなくなってしまったなら、そういう状態になっています。 その時はリセットスイッチを押してみてください。何事も無かった様に初めから動き始めてくれると思います。 それでも動かない時は、何かの故障だと思ってもらって良いと思います。

そこまで行かずに、NT の画面が表示されたまま、 ず~と黙ってしまう事もあるかもしれません。 その時は、十分時間をかけて(大体、1 分以上)から、 それでも変わらない時はリセットスイッチを押すようにしましょう。

題は、一旦電源を切ってから、もう一度入れ直す事で再起動する時です。 機種によっては、リセットスイッチが無い機種もあるので、 このような機種の場合は、リセットスイッチを押す代わりに、こうするしかないんですが、 この操作は、計算機にものすごく負担がかかるのだという事を知っておいて欲しいんです。

電源をOFF にして、いきなり ON にするのは、 絶対にやってはいけません。 それですぐに壊れる事はないでしょうけれど、壊れる要因を積み重ねていく事になります。

電源を OFF にしたら、最低 5 秒待ってから、 再び ON にするようにしてください。 これだけで、ずいぶん寿命が延びます。