次のページ 前のページ 目次へ

4. コンピュータの電源を入れた時には何が起こるのですか?

プログラムが動いていないコンピュータは、電気で動く鉄のかたまりに過ぎません。 電源が投入された時にコンピュータがまずやらなければならないことは、 オペレーティング・システムと呼ばれる特殊なプログラム を開始させることです。オペレーティング・システムの仕事は、コンピュータの ハードウェアを制御するというやっかいな処理を行なうことにより、他の コンピュータ・プログラムが動作する手助けをすることです。

オペレーティング・システムを起動する処理のことを ブートといいます(これは元々 ブートストラッピング (bootstrapping)といい、「自力で(`by your bootstraps')」立ち上がること の難しさを意味しています)。コンピュータはブートの方法を知っています。 なぜなら、ブートのための命令がコンピュータのチップのうちの 1 つである、BIOS (またはBasic Input/Output System=基本入出力システム)チップに埋め込まれてい るからです。

BIOS チップは、最小の番号がついているハードディスク(ブート ディスク)上の決まった位置にある、ブートローダと呼 ばれる特殊なプログラムを探します(Linux ではブートローダは LILO と呼ばれています)。ブートローダはコアに読み込まれ、動作を開始し ます。本当のオペレーティング・システムを開始させることがブートロ ーダの仕事です。

ローダはこの処理を行うために、カーネルを探してコアに読 み込み、そしてカーネルを始動させます。Linux をブートすると画面に "LILO" と いう文字が現れ、続けてドットが 1 つずつ表示されていきますが、まさにこの時 カーネルを読み込んでいるのです(表示される各ドットは、読み込んだカーネルコード の ディスク・ブロックを表しています)。

(なぜ BIOS がカーネルを直接ロードしないのか、不思議に思われる方 もいらっしゃるかもしれません。なぜブートローダで 2 つの過程を踏む のでしょう? これはですね、BIOS っていうのはあまり賢くないからで す。実際こいつはとても頭が悪いので、ブートが終われば Linux は 全く BIOS を使いません。これは元々ディスクもあまり積んでいない原 始的な 8 ビット PC のために書かれたもので、カーネルを直接ロード するようなディスクアクセスは事実上できないのです。ブートローダの 過程においても、ディスク上の異なった場所からいくつかのオペレーテ ィング・システムを開始させることはできますが、これは Unix の機能 では不可能なことなのです。)

いったんカーネルが動作を開始すると、カーネルは周辺装置を検索して その他のハードウェアを見つけ、そしてプログラムが動作するための準 備を完了します。この処理は、通常のメモリ位置ではなく I/O ポ ート -- デバイスのコントローラ・カードがコマンドを受け 付けるために監視していると思われる、特別なバスのアドレス-- にある値を書き込むことによって行われます。カーネルはランダムに 値を書き込むわけではありません。カーネルには、どこのポートに書き 込みに行けばよいか、またそこにコントローラが存在した場合どのよう に反応するべきかについて、あらかじめ組み込まれた情報を持っている のです。この処理のことをハードウェアの 自動認識(autoprobing)といいます。

ブート時に表示されるメッセージのほとんどは、カーネルによるハード ウェアの自動認識機構が I/O ポートを通してハードウェアにアクセスし、 それが使用可能であればそれらをマシンに組み込んでいる様子を示して います。Linux のカーネルはこの機能については良くできていて、他の ほとんどの Unix に優り、ましてや DOS や Windows よりは はるか に 優れています。実際、昔からの Linux 使いの方々は、Linux の ブート時におけるハードウェアの自動認識機能の賢さ(インストールの 簡単さに通じる)が、Linux がフリーな Unix の一連の実験段階から抜け 出し、口うるさい大衆ユーザを魅了するようになってきた主な要因だった と考えています。

しかしながら、カーネルのロードが完了して動作を開始することで、ブ ート処理が終わったわけではありません。まだほんの初期の段階です( ランレベル 1 と呼ばれることもあります)。 この最初の段階の後、カーネルは制御を `init' と呼ばれる特殊なプロセスに引き 渡します。`init' は管理のためのプロセスをいくつか立ち上げます。

init プロセスの最初の仕事は普通、ディスクが正常であるかどうかを確認すること です。ディスクのファイルシステムとは壊れやすいものです。もしそれ らがハードウェアの故障や突然の電源遮断などによってダメージを受け ていれば、Unix がすべての面で完全に立ち上がる前にファイルシステ ムの修復を行う必要があります。後述の ファイ ルシステムはどうやって壊れるのかの節で、このことに触れます。

init の次の仕事は、いくつかのデーモンを起動することです。 デーモンとは、やるべきことを待ちながらバックグラウンド でこっそり動く、プリント・スプーラやメールサーバ、WWW サーバといっ たプログラムのことです。これらの特別なプログラムは、競合する複数 の要求を調整しなければならないことが往々にしてあります。これらを デーモンとする理由は、多数のプログラムのコピー(各々が 1 つの要求 を処理して、それらがすべて同時に動いている)に、お互いに他の処理 に影響を及ぼさないかを確認させようとするよりは、ずっと動きっぱな しで、すべての要求について知っている 1 本のプログラムを書く方が簡 単だからです。あなたのシステムで開始されるこの特殊なデーモン群は システムにより異なっているかもしれませんが、ほとんどの場合その中 にはプリント・スプーラ(プリンタの番人)が含まれます。

いったんすべてのデーモンが開始されると、ランレベル 2 に 入ったことになります。次のステップではユーザに対する準備を行いま す。init は getty と呼ばれるプログラムのコピーを起動 することにより、あなたのコンソールを監視します(場合によっては、 それ以上の数の getty がダイヤルイン用のシリアル・ポートを監視する こともあります)。このプログラムは、あなたのコンソールに ログイン プロンプトを表示します。ここでランレベル 3 に到達し、ユーザがログインしてプログラムを動かすための準備が完了 したことになります。


次のページ 前のページ 目次へ