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

参见

编辑