B.3. コンピュータ内部の仕組み: 様々な層の関係性
コンピュータは抽象的なものとして考えられる場合が多く、外から見えるインターフェースは内部の複雑さに比べてずっと簡単なものです。この複雑さの原因は関連する要素が多い事です。しかしながら、これらの要素は層状構造をしており、ある層が影響を及ぼしたり影響を受けたりするその層の真上と真下の層だけです。
すべてが上手く動作している限り… エンドユーザは各層の詳細を理解する必要はありません。「インターネットに繋がらない!」などの問題に直面した場合、最初に問題の原因になっている層を特定する事が重要です。ネットワークカード (ハードウェア) は動いていますか? コンピュータはネットワークカードを認識していますか? Linux カーネルはネットワークカードを認識していますか? ネットワークパラメータは適切に設定されていますか? これらの質問により、コンピュータは適切な層に分割され、問題の本質的な原因になっている層を特定する事が可能です。
基本的な事を思い出すことからはじめましょう。何よりもまず、コンピュータはハードウェア部品の集合体である、という点です。ほとんどの場合主要基板 (マザーボードとして知られています) があり、これには 1 台 (または複数台) のプロセッサ、RAM、デバイスコントローラ、(他のデバイスコントローラを搭載する) 拡張ボード用の拡張スロットが取り付けられています。特に注意すべきコントローラはハードディスクなどのストレージデバイスを接続する IDE (パラレル ATA)、SCSI、シリアル ATA、です。その他のコントローラには、多くの様々なデバイス (ウェブカメラから温度計、キーボードからホームオートメーションシステム) をホストする事が可能な USB と IEEE 1394 (Firewire) があります。これらのコントローラには複数のデバイスを接続する事が可能です。このため、コントローラによって取り扱われる完全なサブシステムは「バス」と呼ばれます。拡張ボードには、グラフィックカード (モニタ画面をここに接続します)、サウンドカード、ネットワークインターフェースカード、などがあります。一部のマザーボードはいくつかの機能を予め備えており、拡張カードを必要としません。
ハードウェアを制御するソフトウェアがなければ、ハードウェアをまともに動作させることはできません。オペレーティングシステムとアプリケーションは、ハードウェアを制御したりハードウェアと情報をやりとりする機能を提供します。同様に、これを行うためにはハードウェアを正常に機能させる必要があります。
ハードウェアとソフトウェアの共生関係はひとりでに発生するものではありません。コンピュータ起動時には、いくつかの初期設定が必要です。この初期設定を担当するのが BIOS です。BIOS はマザーボードに組み込まれた小さなソフトウェアで、起動中に自動的に実行されます。BIOS の最も重要な役割に、ハードウェアの制御を引き継ぐソフトウェアを検索する役割があります。通常、これはブートセクタ (
マスターブートレコードや
MBR として知られています) を備えた最初のハードディスクを検索し、ブートセクタを読み込んで、ブートセクタに収められているソフトウェアを実行します。BIOS の関与する動作はここまでです (次回起動時まで関与しません)。
ブートセクタには、別の小さなソフトウェアが含まれます。これはブートローダと呼ばれ、オペレーティングシステムを探して実行するためのものです。ブートローダはマザーボードに組み込まれているのではなく、ディスクから読み込まれます。このため、BIOS よりも多くの機能を持っています。BIOS 自身がオペレーティングシステムを読み込まないのはこれが理由です。例えば、ブートローダ (Linux システムでは GRUB を使う事が多いです) は利用可能なオペレーティングシステムを表示し、ユーザに起動するオペレーティングシステムを尋ねる事が可能です。通常、タイムアウトとデフォルトの回答が設定されています。ここでユーザはカーネルに渡すパラメータを追加したりする事も可能です。最終的に、カーネルが見つかり、メモリに読み込まれ、実行されます。
さらに BIOS は多数のデバイスを検出して初期化します。言うまでもなくこのデバイスには、IDE/SATA デバイス (通常ハードディスクおよび CD/DVD-ROM デバイス) だけでなく PCI デバイスも含まれます。検出されたデバイスは起動処理中に画面に表示されます。デバイスリストがすぐに消えてしまう場合、Pause キーを押せば表示を止めて内容を読む事が可能です。インストールされた PCI デバイスがリストに含まれないのは悪い兆しです。最悪の場合、デバイスは欠陥品ということになります。良くても、デバイスは BIOS かマザーボードの現在のバージョンと互換性が無いということになります。PCI 仕様は進化しており、古いマザーボードで新しい PCI デバイスを使える保証はありません。
BIOS とブートローダはそれぞれ数秒間だけ実行されます; これでついに、長時間実行するソフトウェア、オペレーティングシステムカーネル、に到達します。カーネルはオーケストラの指揮者の役割を果たし、ハードウェアとソフトウェア間の調整を行います。カーネルは複数の仕事を担当しています: ハードウェアの駆動、プロセスの管理、ユーザとパーミッション、ファイルシステム、などです。カーネルはシステム上のすべての他のプログラムに共通基盤を提供します。
カーネルの以外のすべては「ユーザ空間」の意味でひとくくりにされますが、「ユーザ空間」を更にいくつかのソフトウェア層に分割する事が可能です。しかしながら、ソフトウェア層同士の相互作用は以前に比べてさらに複雑化しており、ソフトウェア層の分類分けは単純ではありません。アプリケーションは一般にライブラリを使います。ライブラリはカーネルと通信しますが、通信には他のプログラムまたはさらに多くのライブラリが必要です。