up

Conventional Memory ; Upper Memory Area (UMA)

Conventional Memory

    メモリについて

     以下の事は正確では有りません

システムの最初の 640KB の領域をConventional Memoryと呼ぶようです

アドレスの範囲でいえば 00000h to 9FFFFh となる場所です

DOS の 最初のころは CPU 自体 1MB を越える領域には アクセス出来な かったようです。 アドレスを 示すのが 20個 (2^20=1048576)その内に CPU のアドレスを 示すものが 20個を 越える CPU が出てくるようになったようで す。

時間の経過とともに この領域は狭くなってきました プログラムが大きくな る数が増える

そこで それ以上の 領域のメモリーに アクセスする方式を 作成したようで す。high memory area という最初の 1MB を越えた領域の 最初の 64 KB 位の場 所に DOS 自体を 持ってゆくようにしたようです。この結果 45KB 位 Conventional Memory が 余分に使用できるようになったようです。

それでも 追い付かないので もう一つ残された領域を使おうということに なっ たようです。upper memory area という 384 KB の 領域です

まあ DOS を 使用しない場合はこのような ややこしい事をしなくても 良い ようですが 今は DOS を 使う事なので もう少し見て行かないと いけません。

Upper Memory Area (UMA)

この領域はシステムの プログラムが存在している所ですので かって気まま に使用する事は出来ないようです。まあ簡単にいえば ROM と RAM が 混在して いるということの 様です。邪魔しない場合は使えますよ という事のようです。 空いている所を 見極めてつかうという 究極の技が 必要となるようです。

Expanded Memory (EMS)

話題を変えて Expanded Memory (EMS) というものがあります extended memory (XMS) というものも有ります 混乱しますが Expanded Memory (EMS) と いうものを 見て行きます。

現在のような新しいシステムでは extended memory (XMS) というもので 最 初の 1MB を 越える部分を 扱うのですが DOS というものは これを扱うには特 別な 方法が 必要になるようです 。”(DOS) であって Freedos の 事はわかりませ んそのために 色々調べているのですが”

Expanded Memory (EMS) というのは CPU 8088 8086 という CPU が 1 MB を 越える領域に アクセスするために 考えられた方式ということのようです これ らの CPU は アドレスとして 20 bit ですので そのままでは 2^20=1048576 を 越える 領域にアクセスする事は出来ません。

そこで LIM EMS standard というもので 対応しようとしたようですこれを利 用するのには 特別な基板が 必要になるということです。この基板のメモリは 16kB の4個の 領域に分けられて利用されたようです これを あたかも UMBの D0000-DFFFFh の 領域に有るように 扱う事で 利用しようという事のようです当 然の事ですが これらを利用しても一度に みえるというか 扱えるのは 領域とし ては 16kB が 4個 ということで 64KB しか 扱えない ということで現在はも う古い 扱い方に なっているようです これを 利用するには EMM386.EXE という のが必要なようです。

EMM386.EXE

EMM386.EXE について 使用するのは良いのですが 感じとして
1 - Load FreeDOS with EMM386, no EMS (most UMBs), max RAM free
2 - Load FreeDOS with EMM386+EMS and SHARE
というものが有りました これは どのように異るのかというのが 重要です。

これは この様な事のようです 最初の ”no EMS”というのは 文字どおり で すが せっかく EMM386 を 使うのに こんなことして良いのだろうか という考え ですが 少なくとも Upper Memory Area (UMA) の 領域の 有る部分 64KB を 自 由に 使えるように 空ける事が出来るようです。 その代わり Expanded Memory (EMS) として 使用する事は出来ないということです

EMM386+EMS ということは Upper Memory Area (UMA) の 64KB を 利用して つまり スワップをしながら extended memory (XMS) を 使うということのよう です。つまり 最初の 1MB の 部分で 使える領域は EMM386+EMS の 場合より EMM386, no EMS の場合の方が単純に 64KB は 余分に 使えるということです。 その代わり Expanded Memory (EMS) には アクセスしないよ ということのよう です。(正解か どうか はわかりませんが)

                          Total       Used      Free

   Total under 1 MB         799K        81K     718K                  ----1
   Largest executable program size          610K (624,320 bytes)
   Largest free upper memory block          107K (108,712 bytes)

   Total under 1 MB         735K        90K     645K                   ----2
   Total Expanded                            31M (32,505,856 bytes)
   Free Expanded                             27M (28,803,072 bytes)
   Largest executable program size          607K (621,296 bytes)
   Largest free upper memory block           37K ( 38,096 bytes)

   Total under 1 MB         639K        77K     562K                   ----3
   Largest executable program size          560K (573,824 bytes)

この場合 ”Total under 1 MB”の箇所を 考慮すると 799-735=64KB という ことを表しているのでしょうか それともたまたまなのでしょうかは まだ はっ きりとはわからないのですが

ただ EMM386.EXE が Expanded Memory (EMS) を 使うだけの為に有るのでは 無いということです。でなければ こういうことはしないでしょう。

にゃんたろう 拝!
2008年 3月20日 (木) 21:42:12 JST


up

Copyright © 2006.-2008. nyantarou All Rights Reserved.