
16ビット時代のメモリ拡張の歴史(3) - 386以降
インテルの話ではあるのですが、16ビットCPU時代のCPUである8086は1Mバイト(20ビット)のメモリ空間しか扱うことが出来ず時代が進むにつれて使うメモリも増えてきて手狭になってしまいました。
8ビット時代のように単純なバンク切り替えで凌げなくもなかったのですが、その反省もこめてもう少し汎用性のある規格化した方法で拡張されることになりました。それがいわゆるEMSメモリです(EMSメモリを管理するソフトがEMM)。
16ビット時代のメモリ拡張の歴史(1) - EMS
同じ16ビットでも80286になるとプロテクトモードという状態で走らせれば最大で16Mまで(24ビット)のメモリ空間を扱えるようになったのですが、今までのOS(とその上で走るソフト)が使えなくなるので、もっぱら8086と互換性のあるモードしか使われませんでした。よって1Mまでのアドレスしか使えず、相変わらずバンク切り替えのEMSメモリも続投となったのですが、よく考えればプロテクトモードでしかアクセスできないメモリを使ってEMSメモリと同じ動作をさせることもできるだろうということで、あれこれ工夫してソフトウェアだけでEMSメモリを使えるようなドライバが作られました。
16ビット時代のメモリ拡張の歴史(2) - XMSの登場
これが80386の時代になると、もうアーキテクチャとしては32ビットになったのですが、OS(やソフト)に関してはまだ8086時代のままです。都合の良いことに(インテルはこれが便利に使われるだろうと)仮想86モードという仕組みが出来て、プロテクトモードの中に8086として動作する仮想CPUを動かせるようにしました。この仕組みを活用すれば特定の論理アドレスに対して実アドレスへの変換テーブルを書き換えるだけであっという間にEMSの仕組みを作ることが出来ます。
EMM386
EMM386 - コチラのほうが詳しい
最初は80286のプロテクトモードで8086の環境を作って動かすDOSエクステンダとして開発されていたようで、マイクロソフト自身も(誰も使わなかった)Windows 2.0でMS-DOS(この時代はVersin3.x)を走らせるために、この技術を確立したようです。
DOSエクステンダ
Windows 2.0(Windows/386)
仮想86モード
MS-DOSでもVersion3.x時代から仮想86モードを使ったメモリメーカー独自のEMSメモリ・ドライバも出ていたような気もするのですが、Version4になった時点でDOSの機能としてEMM386.SYSが用意されるようになりました。このドライバは拡張メモリの使い方に関して限定的な機能しかもっていなかったのですが、そもそもVer.4はあまり普及しなかった(PC98向けは存在しない)ので、Ver.5になって導入されたEMM386.EXEの方がよく知られています。
HIMEM.SYS - XMSメモリの管理
EMM386.EXE - EMSメモリーのエミュレートとUMBの提供
この時代になると大抵のPCは1Mを超えるメモリを搭載するようになっていたので、このEMM386は常に使われるような重要なツールとなっており、自分の環境に合わせて複雑な細かな設定を駆使して設定ファイルを書くのが常でした。
MS-DOS の基礎講座 Vol 4.
EMSに関してもソフトウェア上の設定だけでフレームアドレスを変更できるようになりましたし、16K単位でチマチマと使うのではなくラージフレームという仕組みでより大きな単位で切り替えて使う方法も追加されました。またハードウェアから切り離されたのでデバイス用に確保していたアドレスも拡張メモリとして使うことも出来るように(UMB)なり、DOSから直接使える1Mのアドレス空間を隙間なく活用するようになりました。
技術 / 歴史 / DOS時代のメモリ管理(EMS,XMS周辺)
EMM386はある意味DOSの上位にあたる仕組みでもあり、複数のEMM386に相当するプログラムを同時に動かすことは出来ません。Windwosの中でDOSを動かすときにはWindowsの持っている機能の一部として動かすことになるのでWindowsと協調できるEMMしか使えないわけです。初期のWindows(3.1など)ではDOSを使うことも多かったので、これはこれで設定に苦労する時代は続いたわけです。
EMSを駆使するようなアプリに限って、より多くのメモリが使いやすいWinodwsアプリに移行していったので、徐々にEMSの設定をすることもなくなりましたが、古いDOSソフトを動かそうとする時に設定ファイルが残っていないとメモリが足りなくて動かないなんていう苦労も多かったです。そんな時代はもう16M(これですごく多かったんですよ)とかのメモリを積んでいた時代だったので、1Mのメモリをチマチマ取り合うのはもう勘弁してほしいとは思っていたのですけどね。
もっと細かい話はMS-DOSや古いWinodwsについて書く時に補います。
ヘッダ写真は、以下のものを使わせて頂きました。https://commons.wikimedia.org/wiki/File:Intel_chips_286_386_486_size_comparison.jpg
By Sgroey - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=158840814
#EMS #80386 #仮想86モード #EMM386 #DOSエクステンダ #Windows2 #DOSボックス #config #UMB #ラージフレーム
いいなと思ったら応援しよう!
