MS-DOS とメモリの関係
[記事公開日]2013/09/25
[最終更新日]2013/10/01
パソコンは、「メモリ」にプログラムやデータを読み込んで(展開して)仕事をします。だからこそ、メモリをどう使うかが重要になり、その割り振りなどを「config.sys」や「autoexec.bat」などで、起動のたびに整える必要があったわけです。
具体的に、MS-DOSが活用するメモリには、大別すると、「コンベンショナルメモリ(メインメモリ)」と「拡張メモリ」の二種類があり、それぞれ役割を担っています。
※システムで使用されているメモリについて、利用可能なメモリ領域や現在の利用状況などを確認したい場合は、「mem」コマンドを使用してください。(Windows 95 以降だと、MS-DOSがベースじゃないから、MEM コマンドで表示される情報に、一部、MS-DOS 時代とは異なる表記がありますが、大まかな点では同じなので、見方はわかると思います。Windows XPだと、「MS-DOSプロンプト」じゃないと使えませんが……一応、何とか使えます。制限あるけど。
コンベンショナルメモリ(メインメモリ)
コンベンショナルメモリは、デバイスドライバを組み込まなくても使用できるメモリで、容量はノーマルモードで最大640KB、ハイレゾリューションモードでは最大768KBなんですが……MS-DOSのシステムがここのメモリを一部使用しているので、実際使用できるのは、もうちょっと少ない容量になってしまいます。
MS-DOSで動作するプログラムは、通常このメモリを使っています。
※こういう「メインとなるべきメモリ」なので、コンベンショナルメモリの節約に、config.sys に「DOS=HIGH,UMB」などの一文を入れたりして、なるべくこのメモリを広く使おうと設定していました(この一文を入れると、MS-DOSのシステムが、XMSメモリのHMA領域に移動してくれる)。
拡張メモリ(XMS・EMS)
Windows をはじめ、大きなプログラムを実行するためには、コンベンショナルメモリだけでは少なすぎて、メモリを増設する必要がありました(ソフトがどんどん進化したので、そういう要請もありましたし)。この増設したメモリが「拡張メモリ」と呼ばれるもので、メモリを増設したら同時に「対応したドライバの組み込み」を必要とする、ちょっとややこしいメモリです。
どこがややこしいかというと、メモリの拡張方法にもいくつか種類があり、それぞれの方法に応じて「XMSドライバ」「EMSドライバ」というような、デバイスドライバを用意して、組み込まないと動かないからです。
ちなみに Windows 3.1では……というか、Windows では「拡張メモリ」は必須で、これがないと動きません。それこそ十年くらい前の、かわいらしい機能しかもっていなかったソフトじゃない以外、機能強化のためにアプリケーション・ソフト側が要請するメモリも大きくなっているので、拡張メモリの大きさが、ソフトの使い勝手のよさを、ある程度規定しているといってもいいんじゃないでしょうか。
XMSメモリ(eXtended Memory Specification)
このメモリは、拡張メモリをEMSメモリやコンベンショナルメモリの一部のように扱うことができます。このメモリには、三つの種類があります。
- HMA (High Memory Area) :XMSメモリの最初の約64KB
- EMB (Extended Memory Block) :XMSメモリから、HMAを除いた領域
- UMB (Upper Memory Block) :上位メモリの未使用領域
※MS-DOS6.2から追加された「MemMaker」機能は、UMBを効率的に利用するように設定してくれるという優れもの。でも、Windows95以降は、MS-DOSがベースじゃなくなったので、この便利な機能は姿を消しました。そういえば、コンピュータのシステム状況を詳しく調べる「MSD」コマンドも、今では使えないんですよね。(T_T)
XMSメモリドライバ:HIMEM.SYS
- DEVICE=A:\DOS\HIMEM.SYS と config.sys に記述する。
※SMARTDRV.EXE や EMM386.EXE などの他のメモリドライバを組み込む場合は、XMSメモリを確保してから、各種ドライバを組み込む必要があります。ということで、この HIMEM.SYS の組み込みは、config.sys の DEVICE 行の最初に記述する必要があるわけです。これを忘れるとひどい目にあうので、お忘れなく。
EMSメモリ(Expanded Memory Specification)
拡張メモリを使用するための規格の一つで、システム領域の上位メモリにページフレームという領域を作って、これを通じてXMSメモリの一部を1ページ16KB単位で使用することができます。要はEMSを使用することにより、システム領域のページフレームを経由して、XMSメモリのEMBを使う……みたいな感じですね。イメージわきますか?
もともと、EMS ドライバは、一度コンピュータ起動時に設定した EMS のサイズは変更出来ないので、ソフトが使う最大容量を確保しなくちゃいけない運命を背負っていました。これじゃ大変なので(MS-Windows登場の際には足枷になった)、UMB + EMS という形で使うことになり、XMSってことで完全に統合された……らしいと聞きました。(^ ^;)
MS-DOS対応のソフトだと、ちょっと使えるソフトはみんなEMS対応のソフトで、インストール時に config.sys に、EMSドライバを入れた覚えがあります。一太郎だとVer5とか6の頃ですね。Windows の時代に入ると、EMSメモリより、XMSメモリしか聞かなくなりました。
EMSメモリドライバ:EMM386.EXE
- DEVICE=A:\DOS\EMM386.EXE /P=64 /UMB /T=A:\DOS\EXTDSWAP.SYS
みたいに、必要に応じてEMM386.EXEを組み込んでもらえればOK。その際、まず最初に「XMSメモリ:HIMEM.SYS」を組み込まないと意味がないのでご注意を。なにはともあれ、config.sys にDEVICEで組み込めばいいわけです。
ちなみに、「EMM386.EXE」は仮想8086モード用のEMSドライバで、「EMM.SYS」は汎用のEMSドライバ。同時に使用することはできません。
仮想86メモリドライバ(VMM386.EXE)
……というのもあった気がする。64MB以上だとこっちを使ったような気もする。んで、対応メモリはプロテクトメモリ……ということしか覚えていません。忘れました、前のことなんで。(^ ^;)
SMARTDrive
MS-DOSで標準サポートされている、メモリの有効利用のための「ディスキャッシュ」機能で、これは、XMSメモリを一時的にディスクキャッシュ用メモリとして使用し、処理効率をぐう-ん高めるという優れものです。
ディスクキャッシュというのは、ディスクから読み込んだデータをメモリに蓄えることにより、次に同じデータが必要になったとき、ディスクからじゃなくメモリから直接読み込むため、データの読み書きがものすごく早くなるというもの。
SMARTDRV.EXEを組み込むことにより、この機能を使うことができます。ただ、Windows の時代になり、MS-DOSをベースに動く時代じゃなくなったので、今ではこの機能もなくなってしまいました。
最近のコメント