扩展记忆体(英语: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真实模式)这样就使用应用程式可以直接存取延伸记忆体.

参见

编辑