You are here

パーソナルなコンピュータのメモリ事情 (第7回: 80286期)


80286が使われるようになるとCPUのメモリ空間は16MBありますのでメモリ問題は解決(一時的なものなので先送りと言った方が良いかもしれません)したかと思いきや、そう簡単ではありませんでした。

80286にはリアルモードとプロテクトモードという2つの動作モードがあります。リアルモードでは8086のソフトウェアがそのまま動作しますが、メモリ空間は1MB (実は「+α」があり、後で出てきます)のままです。リセット後は自動的にリアルモードになるので特別なことはせずに高速な8086として使用できます。一方プロテクトモードでは16MBのメモリ空間が使えますが、ソフトウェアの変更が必要になり、OSもMS-DOSは使えず専用のもの(OS/2など)が必要になります。

ここで皆がOS/2へ移行していれば良かったのですが、DOS互換機能に難(後に80386で解決)があったこともあり多くの人が移行せずDOSを使い続けたためメモリ問題に悩まされ続けることになります。
MS-DOS環境で大きなメモリを使う工夫は8086時代の延長ですが、新たなものも加わりました。

一つはHMA (High Memory Area)と呼ばれているもので、(64k - 16)のメモリ空間を新たに使えるようにするものです。これは本来プロテクトモードでなければアクセスできないはずのメモリの一部にリアルモードからアクセスできてしまう現象を利用しています。
8086のメモリ空間は1MBですからアドレスは20ビット必要ですが、アドレスレジスタの類は16ビットしかありません。残り4ビットを追加するためにセグメントレジスタというものを追加しました。セグメントレジスタは4ビットあれば足りると思うかもしれませんがそれでは64kB丸ごと切り替わるバンク切り替えのようなものになってしまい非常に使いにくいものとなってしまいます。そこで16ビットのセグメントと16ビットのオフセット(アドレス)から(20ビットアドレス) = (セグメント << 4) + オフセット の計算をしています。
もしセグメント=0FFFFH, オフセット=0010Hとしたらアクセスされるアドレスは100000Hとなり、オフセット=0FFFFHとすれば10FFEFHとなります。これは1MBの空間の外を指しています。8086にはアドレス信号はA19までしかありませんからラップアラウンドして00000H, 0FFEFHをアクセスすることになりますが、80286にはA23まであるのでほんの入り口のみとはいえ1MB超のエリアが使えるというわけです。
故意にラップアラウンドさせ00000H番地付近をアクセスする8086用ソフトウェア(あるのか知りませんが)との互換性のため外部回路でA20を0にしている機種(IBM PCなど)では解除(プロテクトモード使用時は解除できないと困る)する必要はあります。

さらに上位のメモリについても以下の方法でアクセスすることは可能です。

  1. 一時的にプロテクトモードに切り替える方法:
    切り替えてしまえば自由に16MBの空間にアクセスできるのですが、問題はリアルモードに戻る方法が無いということです。戻らないとDOSのファンクションコールも実行できません。そこで強引ですがレジスタ等を退避しておいてCPUをリセットします。リセット処理の中で本当のリセット(電源ON時など)かリアルモードに戻るためのリセットなのか判別し、退避してあったレジスタを復帰する仕組みになっています。
  2. 隠し命令を使う方法:
    その後、80286の隠し命令「LOADALL」を使えばリアルモードのままアクセスできることがわかりこちらが使われるようになりました。

いずれの方法でもユーザプログラムが直接行なうのは大変なので通常はXMSドライバの提供するコピー機能を使用します。これを利用してEMSをソフトウェアで実現することも出来ました。

この頃の増設メモリはEMS用のメモリ・バンク方式のメモリ・プロテクトメモリが混在していました。バンク方式は先が見えてきていましたが、EMS用とプロテクト用はどちらを選ぶべきか悩ましいところでしたね。将来性ならプロテクト用ですが、EMSで使うだけならコピーのためのオーバヘッドの分遅いので直近のメリットのためにEMS用を選択する例もあります。そのうちに切り替え可能な増設メモリも出てきました。

参考文献・関連図書: 
中島信行(1990)『MS-DOSメモリ管理ソフト技法』CQ出版社.

Add new comment

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
※ コメントは原則公開です。個別のご相談などは「ご意見・ご要望」からお願いします。