擴展記憶體(英語:Expanded Memory)是1985年4月24日,由Lotus英特爾微軟聯合發布的一項DOS主記憶體技術,可以提供MS-DOS程式更多的記憶體。

上端主記憶體區(upper memory area)中的擴充主記憶體塊

八十年代的個人電腦(IBM PC/XT)純16位元CPU只能使用真實模式,也只有1MB的定址空間,且640KB以上的定址空間不可被應用程式讀寫使用。

擴展記憶體的原理是使用1MB扣除640KB後剩下的384KB,稱作上端主記憶體區(upper memory area), 這本來是用來跟外設溝通的空間, 給程式使用。把主記憶體的定址窗口插入到上端主記憶體區的外設定址空間,引入了bank switching (儲存體轉換)的技巧。 同一時間只有一部分的額外記憶體可以被存取。 使用64KB的memory windows做為bank switching 的單位。

Emulex Persyst 4 MiB ISA擴充主記憶體卡

由於此時CPU沒有超過16位元的定址能力,所以 EMS 只能另外購買記憶體擴充卡插在ISA bus插槽上使用. 之後 Intel 80286 CPU的雖然仍然是16位元暫存器的CPU,但外部定址已經到20bit最大定址16MB,可以超過1MB的極限,因此之後的主機版就不用再買擴充卡,而直接使用CPU的記憶體,再以軟體類比EMS,如此就可以決定系統有多少延伸記憶體被類比做擴展記憶體使用,以及保留多少延伸記憶體繼續使用,所以80286之後幾乎很少人會繼續購買EMS擴充卡,使用XMS類比即可。 但IBM PC/AT(286)的保護模式不好用,既沒有V86模式,也不能切回真實模式,所以使用者不多,而1987年開始,有32位元記憶體管理功能的Intel 80386 處理器出現,再386增強模式的保護模式下,以V86模式使用XMS/EMS,才讓大量使用超過1MB位址記憶體的軟體(DOS/4GW)出現。

MS DOS 於5.x提供 EMM386.sys,6.x提供 EMM386.exe 設定,或使用其他軟體開發商的XMS管理軟提(QEMM), 可以在 EMM386 設定參數 RAM [size] 類比 EMS,例如:一台有 8MB記憶體的 386電腦在 config.sys裡加入

DEVICE=EMM386.exe RAM 2048,表示拿2MB的XMS類比出2MB的EMS,其他繼續當XMS使用,若後面沒有 [size] 則全部XMS類比當作EMS使用。 DEVICE=EMM386.exe NOEMS 則不類比EMS,全部皆為XMS。

在80286與之後的處理器,一個更有效率的方法存取640KB以後的記憶體, 就是用DOS Proteced Mode Interface.DOS extenders 是一個使程式可以在保護模式下執行的驅動程式. 與其用banking技巧存取更多記憶體,這個驅動程式可以讓應用程式在保護模式與類比的V86真實模式間切換, (在需要MS-DOS服務時回到V86真實模式)這樣就使用應用程式可以直接存取延伸記憶體.

參見

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.