扩充内存规范
由特别为扩充内存而设计的应用程序所访问
扩充内存规范(xms extended memory specification,简称EMS)。它只能由特别为扩充内存而设计的应用程序所访问。当前,大多数专业性的商业软件包支持扩充扩充内存,因而它成为一种事实上的工业标准,支持扩充内存的一些常用软件有:Framework,Excel,Paradox,Symphony等。
发展
1983年IBM宣布采用了Intel80286处理器的PC/AT。这种微处理器能以两种方式运行。第一种是实地址方式。即DOS使用的方式,它允许直接访问IBM内存,另一种是保护方式,这种方式能直接访问16MB内存。
PC机中出现的硬件约束对内存的限制。再PC/AT机及其它新的80386PC机中同样存在。因此,越过640kDOS壁垒的唯一方法是用扩充内存卡。
再Intel、Lotus和Microsoft宣布EMS规范后不就,AST与其他一些制造商发布了另一种称为改进的扩充内存规范(EEMS)。EEMS是LIM-EMS的一种超集,它除了一些额外的可选功能外,支持全部EMS功能。大多数EMS程序可同样在EMS和EEMS的内存卡上运行。不过少数软件,包括Quarterdeck公司和Desq view和Digital Research公司的Concurrent DOS,用到了EEMS的额外功能。
1987年8月LIM宣布了EMS的一个新版本V4.0。此版本在原3.2版本上从两个方面作了很大的改进。第一是它能支持32MB扩充内存,而不是以前版本的8MB。
第二是3.2版本只允许数据驻留在扩充内存中,而4.0版本允许数据和程序两者都在扩充内存中运行,V3.2的程序在V4.0中正常运行,但新的程序,如Microsoft和Excel和Lotus1-2-3的第3版只能在V4.0版本上使用。
许多制造商向现有扩充内存卡的用户免费提供新的扩充内存管理驱动程序,以便他们能使用EMSV4.0。AST及其支持者立即表示他们将放弃EEMS而支持新的LIM-EMS4.0版本。所以现在整个PC产业界已经取得一致。将来的软件及硬件开发将支持工业标准EMS4.0版。
初级的扩充内存管理
在XMS出现之前,已出现了不少扩充内存的管理方法,最后都集中在两种方法上:VDISK方法和Int 15H方法。
VDISK.SYS是个很常见的可安装的RAMdisk设备驱动程序,从PC-DOS3.0版起IBM就提供了这个驱动程序。从一开始,VDISK就可用常规内存或扩充内存创建键盘。近期的版本也可以使用扩展内存创建虚盘。由于PC-DOS提供了VDISK的源码,因此不少公司借鉴这种方法实现了自己的RAMdisk。
VDISK装入后,占有了1M以上扩充内存,并将所占用的扩充内存数量的信息存放在两个地方,一个是常规内存上的数据结构,可以用Int 19H取到;另一个是1M扩充内存边界上的数据结构。如果再有新的VDISK要创建另外的RAMdisk,必须首先查看这两个数据结构,得到可用的扩充内存,并根据新占用的扩充内存数量更新这两个数据结构的内容。
用Int 15H方法管理扩充内存相对简单一些。首先调用Int 15H功能得到当前可用的扩充内存的大小,然后改写Int 15H使之以后每调用这个功能,都返回当前可用的扩充内存的带下,其中除去了本程序正在使用的扩充内存。对Int 15H的其他功能扔调用原来的Int 15H。这样,如果一个程序占用了一块扩充内存,对后来的程序来说,这块被占用的扩充内存好像不存在一样,从而达到了扩充内存管理的目的。
扩充内存规范
前面说的VDISK方法和Int 15H方法管理扩充内存都有三个严重缺陷:
1、对那些转入保护方式读写扩充内存、不理会其他已被使用扩充内存的程序无法管理。
2、这两种方法都不是动态管理,都是先进后出方式分配扩充内存的,一旦有个程序不按顺序中止了,它 所用的那块扩充内存只能到它后面的程序全部释放所扩充内存后才能再用。
3、MS-DOS不参与扩充内存管理,因此程序意外中断时不能清理程序所用的扩充内存资源。
1988年提出了更高级的扩充内存管理方法XMS。XMS再80286/386/486机上定义一个软件接口,使实方式下程序程序能以合作的、与硬件无关的方式使用扩充内存和一些MS-DOS管理不到的内存。
XMS实现下面三类的内存的管理:
1、640K-1024K之间的内存;
2、1024K-1088K之间的内存;
3、1088K以上的内存;
XMS还提供了与硬件无关的对CPU地址线A20的控制。
缺点
扩充内存的缺点是运行速度慢,明明有那么多的内存,却要来回地用分页框来代替。后来在386CPU出现后,就不再使用扩充内存卡了,而是通过采用增加CPU的地址总线(变32位)的方法,可使得DOS能够访问1MB以上的内存了。把插在内存槽上1MB以上的内存了。把插在内存槽上1MB以上的内存叫做扩展内存,用XMS表示。扩展内存的容量取决于安装在内存槽上的RAM的个数多少,在DOS中扩展内存的管理程序为himem,sys。考虑到有时可能在386以上的机器运行需要扩充内存的软件,DOS提供了emm386.exe内存管理程序,可将扩展内存仿真成扩充文件。
扩展内存与扩充内存的区别
扩展内存与扩展内存的区别是:
1、安装的位置不同。扩充内存是在插在主板的扩充槽上,而扩展内存是插在内存槽上;
2、存在的机型不同。扩充内存仅在8088或8086机上才可能有,而在80836以上的机上不再使用扩充内存而是使用扩展内存;
3、运行速度不同。扩充内存的使用需要页框,即换页技术来实现,而扩展内存不需要。因而扩充内存(或用扩展内存仿真的扩充内存)的运行速度比扩展内存慢;
4、表示符号不同。再内存中,扩充内存用EMS表示,扩展内存用XMS表示;
5、管理程序不同。扩充内存的管理程序存在扩充内存卡上,由扩充内存制造商提供,而扩展内存管理程序由DOS提供。
参考资料
最新修订时间:2022-10-24 14:13
目录
概述
发展
参考资料