コンピュータのハードウエアは、CPU だけで構成されているわけではありません。プログラムの命令やデータを記憶するためのメモリーがあり、I/O*1 を介して接続されたキーボード、ディスプレイ、ハード・ディスク、プリンタなどの周辺装置もあります。それぞれの周辺装置をどのように制御するのかは、コンピュータの機種ごとに違います。

 Windows は、このようなハードウエア構成の違いを乗り越えることに大きく貢献したOS です。Windows の説明をする前に、Windows の前身OS であるMS-DOS*2 が広く使われていた時代の思い出話をしておきましょう。今から30 ~ 40 年ほど前のMS-DOS の時代には、NEC のPC-9801、富士通のFMR、東芝のDynabook など、国内にさまざまな機種のパソコンがありました。Windows 3.0 や3.1 が出てきたころには、PC/AT 互換機(現在のWindows パソコン)が普及し始め、PC-9801 とシェアを競っていました。

 これらの機種はいずれもx86 系CPU を搭載していましたが、メモリーやI/O の構成などが異なっていたので、MS-DOS 用のアプリケーションは機種ごとに専用のものが必要でした。CPU は、周辺装置との入出力のために専用のI/Oアドレス空間(I/Oアドレスの割り当て)を備えています。どの周辺装置に何番地のアドレスを割り当てるかが、機種によって異なっていたのです。

 たとえば、当時の売れ筋ワープロ・ソフトであるジャストシステムの「一太郎」を使いたいなら、それぞれの機種専用の一太郎を買わなければなりませんでした。なぜなら、アプリケーションの機能の中に、コンピュータのハードウエアを直接操作している部分があったからです。MS-DOS の機能が不十分だったこと、プログラムの実行速度を高める必要があったことなどがその理由です。

 事態は、Windows が広く使われるようになって大きく改善されました。Windows が動いているなら、同じアプリケーション(ネイティブ・コード)がどの機種でも動作するからです。Windows 用アプリケーションでは、キー入力もディスプレイ出力も、ハードウエアではなくWindows に命令を与えることで間接的に実現します。これによって、プログラマはメモリーやI/O アドレスの構成の違いを意識する必要がなくなったのです。それは、Windows が機種ごとに異なる構成のハードウエアをアプリケーションの代わりに操作しているからです(図7-4)。ただし、Windows 自体は、PC/AT 互換機用やPC-9801 用など、機種ごとに専用のものが必要でした。

 Windows であってもCPU の種類の違いまでは吸収できません。なぜなら、市販のWindowsアプリケーションは、特定のCPUのネイティブ・コードの形で提供されるからです。

*1 ここで、I/O(Input/Output、アイ・オー)とは、コンピュータ本体と周辺装置を接続する機能を持つICのことです。

*2 MS-DOS(Microsoft Disk Operating System、エムエス・ドス)は、1980年代に広く普及したパソコン用OSです。