このページは大阪弁化フィルタによって翻訳生成されたんですわ。

翻訳前ページへ


コンピュータの電源を入れた時に何が起こるんか?

3. コンピュータの電源を入れた時に何が起こるんか?

プログラムが動いておらへんコンピュータは、役立たずな電子部品んかたまり にすぎまへん。電源を入れた際、コンピュータがまず最初に行うべきことは、 オペレーティングシステムと呼ばれる 特別なプログラムをスタートさせることや。オペレーティングシステムの 仕事は、コンピュータハードウェアの制御ちう極めて煩雑な処理をやちうのんける ことで、その他のプログラムの仕事を支援するっちうことや。

オペレーティングシステムを起動する処理のことは、ブート (boot) と呼ばれとります(ブートとは、 もともと「編み上げ靴のつまみ革(bootstrap)」のことなんやし、靴のつまみ革を 引っ張ってオノレ自身を持ち上げる(困難な事柄の例え)ちう言い方がオペレーティング システムの起動処理に似とることから名付けられはった)。ブートの手順は コンピュータチップのひとつである BIOS (Basic Input/Output System の略) に書き込まれとるさかい、(オペレーティングシステムが起動する前でも) コンピュータはブート方法を知ることができるようになっとりまんねん。

BIOS チップは、コンピュータに対して、ある決まった場所にある 特別のプログラムを探すように指示しまっせ。こら通常、いっちゃん若い番号が 付けられはったハードディスク (ブートディスク (boot disk)) 上にあるんや、ブートローダ (boot loader) とよばれる プログラムや (Linux 上では、このブートローダは LILO とよばれとります)。 ほんで、ブートローダがメモリに読み込まれ、起動されはります。ブートローダの仕事は、 オペレーティングシステムそのもんを起動するっちうことや。

このローダによるオペレーティングシステムの起動ちうんは、 カーネルを探して、それをメモリにロードし、スタートさせることにより 実行されはります。読者が Linux を起動すると、 スクリーンに "LILO" ちう文字と、 その後にドットがいくつか表示されるのが分かる思うで。その時は、 ブートローダがカーネルをロードしてまんねん (ひとつのドットの表示は、 ディスクブロック (disk block) ひとつ分のカーネルコードがロードされたことを意味してるんや)。

(読者は、BIOS がなんで直接カーネルをロードせんんか、なんでわざわざブート ローダを使うて 2 段階の処理をするんかについて不思議に思うかもしれしまへん。 こら、BIOS ちうのが、あんまり賢ないからなんやこれがホンマに。実際コイツはどエライ頭 が悪いさかい、ブートが終われば Linux はまるっきし BIOS を使いまへん。BIOS はもともと ディスクもあんまり積んでおらへん原始的な 8 ビット PC のために書かれたもんで、 ディスクにアクセスしてカーネルを直接ロードするような処理は事実上でけへん のや。また、Unix では都合の悪いような作業があったとしたかて、ブートローダと いう処理過程を介在させることで、ディスク上の別の場所から異なる オペレーティングシステムを起動させることも可能になるんですわ。)

いったんカーネルが始動すると、カーネルは周辺装置の検出を行い、 ハードウェアを残らず認識して、プログラムを実行する準備を整えまんねん。その際、 カーネルは、通常のメモリやのうて、I/O ポート (I/O ports) ちう場所とやりとりをしまっせ。I/O ポートとは、特別なバス アドレスなんやし、デバイスコントローラカードはたいていこのポートを監視しながら カーネルからのコマンドを待っとりまんねん。この時、カーネルは、I/O ポートを ランダムに探すわけやおまへん。どこを探したら何があるんか、コントローラ が存在する場合はどないな反応があるんかといった情報が、カーネルのなかに あらかじめぎっしりと組み込まれとるからや。このプロセスは、 自動検出 (autoprobing) と呼ばれとりまんねん。

起動時に表示される文句のほとんどは、カーネルが I/O ポート経由で ハードウェアを自動検出しながら、どないな周辺機器が利用可能であるんかを 認識し、そのマシンの動作環境に適合していく過程で表示されるもんや。Linux カーネルは、この機能が秀逸なんやし、他の大部分の Unix よりも優れてて、 DOS や Windows よりもずっと優秀や。実際、ようけの Linux 古参ユーザの考えるトコによると、(インストールを比較的容易にする)この 起動時の自動検出機能の出来の良さによって、Linux はフリーな Unix を作るゆう 一連の実験プロジェクトから抜け出て、膨大な数のユーザを一気に引きつけられはる ようになりよったのやと言われとりまんねん。

せやけどダンさん、カーネルを完全にロードして実行するっちうことだけで、ブートプロセスが 終了するわけやおまへん。こらまや、第一段階にすぎまへん(この段階は、 ランレベル 1 (run level 1) ともよばれてい まんねん)。第一段階が済むと、カーネルは、'init' と呼ばれる特別なプロセスに 制御を渡し、この 'init' プロセスが各種の管理プロセスを立ち上げまんねん。

通常、この init プロセスは、最初の仕事として、まずディスクが正常か どうかの確認を行おりますわ。ディスクファイルシステムは繊細にできとるさかい、 もしハードウェアの故障や突然の電源遮断やらなんやらでダメージを受けとった場合は、 Unix が完全に立ち上がってまう前に、ファイルシステム修復の作業が必要 や。これについては、後ほど、ファイルシステムが 壊れるゆうんはどないなことかの章で説明しまっせ。

init の次の仕事は、プリントスプーラ (print spooler)やメールサーバ、 WWW サーバといった、いくつかのデーモン (daemon) を起動するっちうことや。このデーモンちうんは、バックグラウンドで地道に動きなが ら、仕事が与えられはるのを待っとるプログラムのことや。こないな特別の プログラムは、競合する複数のリクエストを上手に調整しつつ処理をせな ならへんことがようおます。そないなプログラムがデーモンプログラムで あるんは、たいていその方がプログラムを書きやすいさかいや。ひとつの リクエストをひとつのプログラムが処理するっちうことにして、同じプログラムをいっぺんに実行 しながら、相互にぜぇぇぇったいに干渉しあいまへんように工夫するよりも、ひとつの プログラムだけが常時動いてて、ずぅぇえええぇぇええんぶのリクエストを処理するように したほうが簡単やからや。どないな種類のデーモンが起動するんかは システムによって異なるんやが、たいていの場合、なんぼなんでもプリントスプーラ (プリンタの門番をしてんデーモン)は起動されとること思われはります。

さらに次の仕事は、ユーザのための準備作業や。init は、 getty とよばれるプログラムをスタートさせて、コンソール を監視します(もしくは、複数の getty を起動して、ダイヤルイン用のシリアル ポートも監視するっちうことがおます)。このプログラムは、コンソール上に login プロンプトを表示するもんや。ずぅぇえええぇぇええんぶのデーモンが 起動し、ターミナル毎に getty プロセスがスタートしたら、この時点で ランレベル 2 (run level 2) に入ったことになるんですわ。 ログインやプログラムの実行は、このランレベルにおいて、可能になるんですわ。

とはいえ、まだずぅぇえええぇぇええんぶが完了したわけやおまへん。次の仕事は、 ネットワーキング等のサービスをサポートする各種デーモンを起動 するっちうことや。ほんで、それらが終了すると、ランレベル 3 (run level 3) に入り、システムが完全に使える状態に なるんですわ。