Windowsの歴史 MS-DOS編:メモリ管理、ファイルシステム、デバイスドライバ

横山哲也(グローバル ナレッジ ネットワーク)
2009-04-06 15:56:01
  • このエントリーをはてなブックマークに追加

8086のメモリ管理

 MS-DOSは、IBM PCのためにIntelの16ビットプロセッサ8088用に作成された。8088は8086の廉価版ではあるが、ソフトウェア的には8086と同等であった。そのため、8088用のソフトウェアは8086でも動作した。

 8086は、8080のプログラムを簡単に移植できるように「セグメント」と呼ばれるメモリ管理手法を導入している。

 8086のメモリ空間は20ビット(1MB)。この空間を「セグメント」と呼ばれる最大64KBの領域に分割し、1つのセグメントに8080のメモリ空間64KBを収めた。より多くのメモリが必要な場合は、複数のセグメントを割り当てることもできた。

 セグメントは、8ビットアプリケーション資産を16ビットCPUに移行するために大きな力を発揮したが、次のステップへ進む足かせにもなった。セグメントをまたがるプログラムの開発は制限が大きかった上、連続した作業領域は64KBを超えることができなかったからだ。

 なお、8086の対抗製品としてMotorola(モトローラ)の68000がある。幸か不幸か、Motorolaは8ビット時代に高い市場シェアを築けなかった(筆者はモトローラ6809互換8ビットCPUを採用した富士通Micro 8、通称FM-8を使っていたが少数派だった)。そのため、互換性を考慮せずに新しいCPUを設計できたようだ。

 68000は16ビットCPUであるが、内部的には32ビット構造を持っており、初期のMacintoshやSun Microsystemsのワークステーションなどに使われた。

 68000はセグメントを持たない連続した24ビットアドレス(16MB)を使えたため、大量のメモリを効率よく利用できた。何しろ、大型機でも仮想メモリ空間が24ビットという機種が多かった時代である。「パーソナル」コンピュータにとっては十分すぎるサイズだった。

MS-DOSのメモリ管理

 MS-DOSは、8086のセグメント構造を実にうまく利用したOSである。

 8080互換メモリ領域を使うプログラムはセグメントを1つだけ使う。どのセグメントを使うかはMS-DOSが自動的に割り当てる。このような8080メモリモデルを使うアプリケーションは拡張子としてCOMを持つ。

 一方、複数のセグメントを使うアプリケーションは拡張子としてEXEを持つ。初期のプログラムは、8080プログラムを単純に8086命令に置き換えたものが多かったためCOMファイルが多かったが、徐々にEXEファイルが増えてきた。

 MS-DOSは、現在のWindowsに比べれば非常に制約の多いOSである。しかし、その制約の多くは8086に由来するものである。そして、8086の制約の多くは8080との互換性を実現するためのものであり、ユーザーが望んだことでもある。

 互換性と先進性を両立させるのはいつの時代でも難しいのだ。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]