このように、OSがデバイスを抽象化することで、アプリケーションとデバイスの関係はどんどん“薄く”なっていく。例えばフォトレタッチソフトのように、マウスカーソルの位置を常に把握する必要のあるアプリケーションでも、デバイスの状態を見るのではなくポインターの位置を取得すれば事足りるので、マウス自体は気にせずにアプリケーションを作ることが可能になるわけだ。
画面をタッチして操作する「Windowsタッチ」機能は、Windows 7から標準で組み込まれたが、Windows 7以前に作られたプログラムであってもタッチで操作できるのは、アプリケーションはポインターの位置を見て動作するのであって、マウスの状態を見て動作するようになっていないからだ。
抽象化と言うと少し理解しにくいかもしれない。要は「エプソンのPX-201」というハードウェアを、印刷機能を持つ「プリンター」という本質的な部分だけにしてしまうことが抽象化である。OSは抽象化によって、アプリケーションに印刷の機能を提供しているわけだ。
Windowsが登場した理由のひとつは
デバイスの多様化に対応するため
そもそも初期のWindowsは、当時のMS-DOSでアプリケーションを作るときに、さまざまなデバイス、特に多数のグラフィックスカード(ディスプレーアダプター)やプリンターなどに対応しなければならないことを、解決するために開発された。
例えば「IBM PC」の表示機能はディスプレーアダプターとして、マザーボードに装着する拡張カードとして実現されていた。現在まで続くパソコンの基本的なスタイルを作った「Apple II」では、表示機能はマザーボードに組み込まれていたが、IBMはこれを拡張カードとして分離することで、用途に応じた表示機能への切替や、あとから高性能なカードへと変更することを可能にした。
これはこれですばらしい発想なのだが、多数のサードパーティーからさまざまなディスプレーアダプターが登場すると、今度は、アプリケーションがそれぞれに対応するのが大変になってきた。IBMが用意したディスプレーアダプターには、「CGA」や「MDA」、「EGA」などがあった。
さらにサードパーティーからは、CGAを高解像度化したものや、IBMの仕様とは関係ない独自製品などが登場した。これらは高性能化したため、IBMのCGAなどと互換性があっても、ビデオメモリーのアクセスタイミングを変える必要があるなど、個別対応が必要なこともあった。そのためアプリケーション開発の多くの部分が、画面の制御や表示に関わるものになってしまっていた。
マイクロソフト自身も、表計算ソフト(当時はMultiplan)やワープロソフト(Word)を開発していたから、この問題には気づいていた。そこで開発に取りかかったのが「Interface Manager」と呼ばれる新しいOSだった。のちにWindowsと呼ばれることになるこのシステムは、グラフィックス用のAPIを装備しており、アプリケーションは画面の解像度やディスプレーアダプターの種類に応じて処理を切り替えることなく開発できた。
しかしWindowsが実現しようとしたのは、単純なグラフックスの抽象化ではなく、ユーザーインターフェースの抽象化とでも言うべきものだ。ウインドウやダイアログ、ボタンやテキスト欄といったユーザーインターフェースの部品を作り、これを使ってアプリケーションを作るといったものだった。
その他のデバイス、例えば、シリアルポートやプリンター(パラレルポート)、キーボードなどといったデバイスは抽象化され、複数のアプリケーションから利用できるようになった。また、複数のアプリケーションを同時に起動して、動かすことができるようにもなった。
この連載の記事
-
第13回
PC
ARM版Windows 8実現の布石となったWindows 7の「MinWin」 -
第12回
PC
アプリがWindowsの機能を使うには? APIとDLLの仕組み -
第11回
PC
マルチコアCPUの消費電力はスケジューリングで変わる? -
第10回
PC
AMD FX向けにパッチで修正 スケジューラーが抱える難題 -
第9回
PC
マルチコアCPUを賢く使いこなす スケジューリングの秘密 -
第8回
PC
意味の違いがわかる? タスクとプロセスとスレッド -
第7回
PC
Windowsのメモリー管理をx86の仕組みから読み解く -
第6回
PC
メモリー不足を根本的に解決する64bit OSの仕組み -
第5回
PC
Windows 8でMetro Styleアプリを動かす「WinRT」 -
第4回
PC
Windowsを動かすデバイスドライバーの仕組み 前編 - この連載の一覧へ