アカウント名:
パスワード:
空きメモリのサイズを見て安心するのって、DOSの頃の感覚だよね。
今どきはメモリ圧縮もやってるし(Win10-1511以降だっけ?)、使用頻度の低い領域の占有サイズなんてたかが知れてるだろうに。
ページアウトもされておらず、圧縮もされてないなら、これで強制的にメモリ空けてもすぐ読み込まれて一時的な効果しかないんじゃないの?
HMAとUMBじゃなかったっけ?High Memory AreaとUpper Memory Blockかな。セグメントとオフセットの隙間を突いてメモリ確保するようなヤツだったかな。
PC98でVEM486使って色々やって、MSDCEXとFEP組み込んでも600KB以上(覚えてないや、630KBぐらい?)開けられた時は達成感あった気がした。
HMAは640kB~1MBの区間でもともと普通にアクセスできる。EMSやXMSは拡張メモリで1MB超の領域をHMA領域にマッピングして切り替えて使う。
なんか全然違うよ。
誤> HMAは640kB~1MBの区間でもともと普通にアクセスできる。正> UMAは640kB~1MBの区間でもともと普通にアクセスできる。
640kB~1MBの区間は「UMA」。「HMA」は、1MBを超えた約64kB分のメモリのこと。他のコメントで解説されてるけど、8086のメモリ空間は1MBしかないけど、80286以降の8086互換モード(リアルモード)では裏技的に1MBを64KBほど超えてアクセスできる。
次に、EMSは (MMUによるページングのように)メモリを切り替えることで、1MBのメモリ空間で、1MBを超える量のメモリをアクセスできるようにする方法だけど、その実装方法は問わないので、・ソフトウェア的にスワップイン/スワップアウトするもの(めっちゃ遅い)・ハード的にバンク切り替えするもの・386以降の仮想86モードを使うもの(MMUを使って1MB超の領域から1MBより下にマッピングして切り替える)などがある。割り当て先はどこでもいい(UMAに限らない)んだけど、コンベンショナルエリアはもったいないからUMAを使うのが普通。
XMSは、通常の640KBを超えたメモリ空間利用規格の総称で、HMAやUMBも含むんだけど、たいていは、HMAやUMBを除いた、1MB+64Kより後ろの部分を差すことが多い。仮想86モードなEMSは、「(HIMEM.SYSなどの)XMSドライバが、1MB超の領域をメモリ管理してる」「(EMM386.SYSなどの)仮想86EMSドライバは、XMSから必要なメモリを取得して、それをMMUでマッピングしてEMSメモリとして提供する」みたいな流れになる。
なので、誤> EMSやXMSは拡張メモリで1MB超の領域をHMA領域にマッピングして切り替えて使う。正> 仮想86EMSは、XMSメモリを、UMA領域にマッピングして切り替えて使う。となる。マッピングの話が出るのは仮想86EMSの場合だけで、一般論的な話にはできない。まあ、それは許しても、XMSは割り当て元の「1MB超の領域」の方。で、その割り当て先は「UMA領域」が正しい。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
UNIXはシンプルである。必要なのはそのシンプルさを理解する素質だけである -- Dennis Ritchie
CONFIG.SYS (スコア:0)
空きメモリのサイズを見て安心するのって、DOSの頃の感覚だよね。
今どきはメモリ圧縮もやってるし(Win10-1511以降だっけ?)、
使用頻度の低い領域の占有サイズなんてたかが知れてるだろうに。
ページアウトもされておらず、圧縮もされてないなら、これで強制的に
メモリ空けてもすぐ読み込まれて一時的な効果しかないんじゃないの?
Re: (スコア:1)
OS/2のMVDMでコンベンショナルメモリが700KBとかなってて「今までの苦労は何だったんだ~ッ!」ってなったのも懐かしい記憶(笑)
Re:CONFIG.SYS (スコア:0)
HMAとUMBじゃなかったっけ?
High Memory AreaとUpper Memory Blockかな。
セグメントとオフセットの隙間を突いてメモリ確保するようなヤツだったかな。
PC98でVEM486使って色々やって、MSDCEXとFEP組み込んでも600KB以上(覚えてないや、630KBぐらい?)開けられた時は達成感あった気がした。
Re:CONFIG.SYS (スコア:1)
HMA で、80286 以降のリアルモード時に、セグメントレジスタを FFFF にしておくと over 1MB の領域にそのまま通る(A20ラインが生きていれば)ので、
0FFFF0~10FFEF までの領域(over 1MB 中の64KB-16B)が利用できる、っつー技ですな。
-- To be sincere...
Re: (スコア:0)
HMAは640kB~1MBの区間でもともと普通にアクセスできる。
EMSやXMSは拡張メモリで1MB超の領域をHMA領域にマッピングして切り替えて使う。
Re:CONFIG.SYS (スコア:3, 参考になる)
なんか全然違うよ。
誤> HMAは640kB~1MBの区間でもともと普通にアクセスできる。
正> UMAは640kB~1MBの区間でもともと普通にアクセスできる。
640kB~1MBの区間は「UMA」。
「HMA」は、1MBを超えた約64kB分のメモリのこと。他のコメントで解説されてるけど、8086のメモリ空間は1MBしかないけど、80286以降の8086互換モード(リアルモード)では裏技的に1MBを64KBほど超えてアクセスできる。
次に、
EMSは (MMUによるページングのように)メモリを切り替えることで、1MBのメモリ空間で、1MBを超える量のメモリをアクセスできるようにする方法だけど、その実装方法は問わないので、
・ソフトウェア的にスワップイン/スワップアウトするもの(めっちゃ遅い)
・ハード的にバンク切り替えするもの
・386以降の仮想86モードを使うもの(MMUを使って1MB超の領域から1MBより下にマッピングして切り替える)
などがある。
割り当て先はどこでもいい(UMAに限らない)んだけど、コンベンショナルエリアはもったいないからUMAを使うのが普通。
XMSは、通常の640KBを超えたメモリ空間利用規格の総称で、HMAやUMBも含むんだけど、たいていは、HMAやUMBを除いた、1MB+64Kより後ろの部分を差すことが多い。
仮想86モードなEMSは、「(HIMEM.SYSなどの)XMSドライバが、1MB超の領域をメモリ管理してる」「(EMM386.SYSなどの)仮想86EMSドライバは、XMSから必要なメモリを取得して、それをMMUでマッピングしてEMSメモリとして提供する」みたいな流れになる。
なので、
誤> EMSやXMSは拡張メモリで1MB超の領域をHMA領域にマッピングして切り替えて使う。
正> 仮想86EMSは、XMSメモリを、UMA領域にマッピングして切り替えて使う。
となる。
マッピングの話が出るのは仮想86EMSの場合だけで、一般論的な話にはできない。まあ、それは許しても、
XMSは割り当て元の「1MB超の領域」の方。で、その割り当て先は「UMA領域」が正しい。