矢沢久雄

 あらゆるプログラムは,コンピュータの持つプロセサが解釈し,実行します。PCの場合,役割に応じてプログラムの種類をBIOS,OS,アプリケーションなどに分類することができます。これらのプログラムの特徴と役割を説明しましょう。

●BIOS

 BIOS(バイオス)とは,Basic Input Output System(基本入出力システム)の略です。BIOSは,電源を切っても情報が失われないROM(Read Only Memory:ロム)と呼ぶ特殊なメモリーに記録されたプログラムであり,あらかじめPCの内部に装備されています。ROMに対して,電源を切ると記録が失われてしまうメモリーをRAM(Random Access Memory:ラム)と呼ぶことも覚えておいてください。ちなみに,ハード・ディスクに記録しているようなプログラム(後で説明するOSやアプリケーション)は,必要に応じてRAMにロード(コピー)されてから実行されます。

 PCの電源投入直後やリセット直後には,BIOSのプログラムが実行されます。プロセサは,最初にメモリーの特定のアドレス(例えば0番地)に記録されたプログラムを実行するようになっているので,そのアドレスを先頭としてBIOSが配置されています。

図1●最初にBIOSが実行される
 BIOSのプログラムは,周辺装置を含めてコンピュータ全体を初期化します。PCを起動した直後の画面を見てください。BIOSが実行されていることを表す英語のメッセージが表示されることが分かるはずです(図1)。BIOSが,コンピュータ全体の初期化を完了すると,ハード・ディスクからOSをRAMにロードします。この動作は「ブート・ストラップ」と俗称されます。ブート・ストラップ(boot strap)とは,ブーツを履くときに引っ張りあげる小さな皮紐のことです。小さなプログラムであるBIOS(皮紐)が,大きなプログラムであるOS(ブーツ)を引っ張り挙げる(RAMにロードする)ことを表しています。この後のPCの動作は,OSにバトンタッチされます。

●OS

 皆さんがお使いのWindowsは,OS(Operating System,基本ソフトウエア)と呼ばれるプログラムに分類されます。PC用のOSの種類には,Windowsだけでなく,MacOSやUnix(Linux,FreeBSD,Solarisなど)などがあります。OSは,ユーザーがコンピュータを使う環境を提供します。皆さんは,OSが提供するユーザー・インタフェースを通して,コンピュータを使っているのです。Windowsは,GUI(Graphical User Interface:ジー・ユー・アイ)と呼ばれるグラフィカルで使いやすい環境を提供してくれます。ウインドウを開きマウスで操作する機能は,すべてWindowsが提供しているのです。

 OSには,コンピュータのハードウエアを“覆い隠す”という機能もあります。OSは,複数の小さなプログラムの集合体として構成されていて,その中に「デバイス・ドライバ」と呼ばれるプログラムがあります。デバイス・ドライバ(device driver=装置の運転手)とは,コンピュータ本体と,キーボード,マウス,ディスプレイ,ディスク装置およびプリンタなどの周辺装置を制御するプログラムです。

 ハードウエアを覆い隠すデバイス・ドライバは,ハードウエアを間接的に制御するための命令群を提供しています。このような命令は,システム・コール(system call)やAPI(Application Programming Interface:エー・ピー・アイ)と呼びます。

図2●キーボードのデバイス・ドライバを確認する
 Windowsのコントロールパネルから「システム」アイコンを起動し,デバイス・マネージャのプロパティを見れば,現在使用しているデバイス・ドライバを確認できます(図2[拡大表示])。周辺装置を追加または変更したときには,それに合わせてデバイス・ドライバも追加または変更する必要があります。

●アプリケーション

 何らかのOS上で動作するワープロやゲームなどのプログラムは,アプリケーション(応用プログラム)と呼ばれます。何らかのアプリケーションをお持ちなら,そのパッケージを見てください。アプリケーションの動作環境としてOSの名前が明記されているはずです。当然のことですが,同じ名前のアプリケーションであっても,異なるOS上では動作しません。例えば,ワープロや表計算ソフトのセットであるMicrosoft Officeというアプリケーションには,Windows用とMacintosh用があります。Windows用のMicrosoft Officeは,Macintosh上では動作しません。その逆も同じです。

プログラムの階層とプログラマ

 アプリケーションを作成するプログラマにとって,OSは実にありがたい存在です。なぜなら,アプリケーションからハードウエアを用いる場合に,直接ハードウエアを制御するのではなく,OSのデバイス・ドライバを通してハードウエアを利用できるからです。  プログラマは,前述のシステム・コールやAPIを使って,簡単にハードウエアを制御できます。何番地のアドレスに何のためのI/Oが接続され,それをどうやって制御すればよいかを考えなくて済むのです。

図3●プログラムの種類と位置付け
図4●フレームワークの位置付け
 アプリケーション,OS,BIOSという3種類のプログラム,およびハードウエアの関係を図3にまとめておきます。直接ハードウエアを制御していないため,アプリケーションの実行速度は遅くなりますが,プロセサのスピードが驚くほど高速化した現在では,ほとんど問題にはなりません。

●フレームワーク

 最近のIT技術者の話題は「Java」と「.NET」といえます。Java(ジャバ)は米Sun Microsystemsが開発した技術で,.NET(ドット・ネット)は米Microsoftが開発した技術です。これらは「フレームワーク(framework)」と呼ばれます。フレームワークとは,OSとアプリケーションの間に位置し,コンピュータの機種の違いをすべて覆い隠してくれるプログラム群(実行エンジンとクラス・ライブラリ)のことです。フレームワーク上で動作するアプリケーションは,コンパイル後に中間コード(特定のプロセサに依存しないプログラム)に変換されます。フレームワークの持つ実行エンジンが,中間コードを解釈し,マシン語に変換して実行します。フレームワークは,GUI,インターネット,データベースなど様々な機能を実現するクラス・ライブラリ(プログラムの部品群)も提供します。プログラマは,クラス・ライブラリを利用してアプリケーションを作成し,高度な機能を容易に実現できます(図4)。

 プロセサに依存しない中間コードを使うことで,同じプログラムを異なる環境で動作させることが可能となります。例えば,Javaアプリケーションは,JavaフレームワークがインストールされたWindowsマシン,Unixマシン,家電品でも動作します。.NETフレームワークは,現状ではWindows用しかありませんが,いずれUnix用などが登場する予定です(Unixの一種であるFreeBSD用の.NETフレームワークがベータ段階になっています)。

 Javaと.NETの最大の違いは,使用できるプログラミング言語の種類です。Javaでは,フレームワークと同じJavaという名前のプログラミング言語しか使えません。それに対して.NETでは,C#,Visual Basic .NET,Visual C++ .NET,Visual J#,COBOL,FORTRAN,Pascalなど,様々なプログラミング言語が使えます。

 Javaや.NETの登場によって,驚くほど便利な時代になりましたが,コンピュータの基礎知識が不要になるわけではありません。基礎知識があってこそ,フレームワークを100%使いこなせるからです。

 基礎知識を習得された皆さんには,より詳細な知識を提供する専門書で学習を続けられることをお勧めします。コンピュータ全般の知識を網羅して深く学習したいなら,情報処理技術者試験の参考書が便利でしょう。実習を望まれるなら,ICを組み合せてオリジナルのコンピュータを作ったり,OSのインストールや各種の設定を実験的に何度もやってみるとよいでしょう。そのための参考書も数多く市販されています。

 コンピュータの仕組みをテーマとした連載は,今回で最終回です。皆さんから「コンピュータをより身近に感じられるようになった」とか「これまで疑問に思っていたことがスッキリわかった」と言っていただけるなら,筆者として至上の喜びです。皆さんのご健闘をお祈りいたします。またお会いしましょう!