在早期的pc机时代,电脑的硬件只支持1M字节的寻址空间。那时候,硬盘都
是奢侈品。操作系统在软盘上运作。那是pctools和hdcopy纵横江湖的时代。
那个时候主打的操作系统dos因受硬件限制也只能管理最多1M字节的连续内存
空间。在这1M内存中,又只有640K被留给应用程序使用,它们被称为常规内
存或基本内存,其它384K被称为高端内存,是留给视频显示和BIOS等使用的。
在1982年,640K内存对微型计算机来说显得绰绰有余,人们甚至认为,640K
的内存可以用来干任何事。现在看起来有些可笑,但在当时,情况确实如此。
可时代发展到今天,个人电脑上的内存动辄以数百mb计算。然道,我们使用
dos还要受限于所谓的640k内存限制吗?我们可以说不。我们可以通过一定的
内存管理工具来使用大内存。其实在win95时代这个问题就已经北MS解决得很
不错了在DOS下,系统中存在以下四种内存:
常规内存(Conventional Memory);
高端内存(Upper Memory);
扩充内存(Expanded Memory);
扩展内存(Extended Memory)。
常规内存指的是0-640K的内存区。在DOS下,一般的应用程序只能使用系统的
常规内存,因而都要受到640KB内存的限制。而且由于DOS本身和config.sys文
件中的安装的设备驱动程序和autoexec.bat文件中执行的内存驻留程序都要占
用一些常规内存,所以应用程序能使用的常规内存是不到640K的。有很多时候
我们都要想方设法地整理内存,好为一些“胃口”比较大的应用程序留出足够
的常规内存,这一点想必是许多DOS时代的电脑爱好者最熟悉不过的了。
高端内存是指位于常规内存之上的384K内存。程序一般不能使用这个内存区域,
但是EMM386.exe可以激活高端内存的一部分,并且它允许用户将某些设备驱动
程序和用户程序用Devicehigh或LH(即loadhigh)装入高端内存。dos=high,umb
也是把DOS的一部分装到高端内存里。这里的umb是高端内存块(Upper Memory
Block)的缩写。
扩充内存是一种早期的增加内存的标准,最多可扩充到32M。使用扩充内存必
须在计算机中安装专门的扩充内存板,而且还要安装管理扩充内存板的管理程
序。由于扩充内存是在扩展内存之前推出的,所以大多数程序都被设计成能使
用扩充内存,而不能使用扩展内存。由于扩充内存使用起来比较麻烦,所以在
扩展内存出现后不久就被淘汰了。
扩展内存只能用在80286或更高档次的机器上,目前几乎所有使用DOS的机器上
超过1M的内存都是扩展内存。扩展内存同样不能被DOS直接使用,DOS5.0以后提
供了Himem.sys这个扩展内存管理程序,我们可以通过它来管理扩展内存。
emm386.exe可以把扩展内存(XMS)仿真成扩充内存(EMS),以满足一些要求使用
扩充内存的程序。
最后再强调一下,不管扩充内存或扩展内存有多大,DOS的应用程序只能在常规
内存下运行。有的程序可以通过DOS扩展器(比如DOS4GW.exe等程序)使CPU进入
保护模式,从而直接访问扩展内存;但是要注意,进入保护模式以后,计算机就
脱离了DOS状态。
在dos下如何获得更多的常规内存呢?前文我们提到DOS环境下的大部分程序都是
在常规内存中运行,如果某个程序由于内存不够而运行失败,最常见的问题就是
常规内存不够。所以我们今天介绍几种尽量释放常规内存的方法:
一、当系统配置有扩展内存时,可以将DOS的大部分代码和Command.com的暂驻内存部
分安装在高内存区(HMA)。 这要求在config.sys中包含有下述命令:
device=Himem.sys
dos=high
虽然Himem.sys本身也要占用少量的常规内存,但可以使用HMA将为我们节省出更
多的常规内存。而且在msdos7 以上的版本中我们可以用devicehigh=himem.sys
将Himem.sys放置在高端内存区。有关dos这个config文件中的特殊命令我们已经
在前面讲了。这里就简单的讲讲Himem.sys。
Himem.sys管理扩充内存和高端内存(HMA)的使用。通过device命令在config文
件里配置这个设备驱动程序。如果我们使用扩充内存和高端内存,那麽安装
Himem.sys的device命令必须先于任何其他驱动的安装。
其命令一般格式为:
device=Himem.sys /选项
选项:
hmamin=0到63的整数,缺省值为0
改选项指定Himem.sys使用HMA(高内存区)之前,dos必须使用的常规内存量。
以KB为单位。
numhandles=1到128之间的整数,缺省值为32
该选项指定dos最大可以同时使用的EMB(扩充内存块)柄的数目。每个柄要占用
6字节常规内存。
int15=64到65535的整数,缺省值为0
该选项指定15h中断口分配的扩充内存大小。为了保证足够内存可用这个值必须
大于64。
machine:相应a20处理器的代码。(这个选项我也不是很清楚)
a20处理器是能够存取高内存区的一种微机部件.
a20 control:on/off
该选项指定Himem.sys是否获得a20处理器的控制权。缺省值为on。
shadowram:on/off
该选项指定Himem.sys是否关闭ROM(只读存取器)的RAM(随机存取器)部分。
cpuclock:on/off
该选项用于指定Himem.sys是否影响cpu的时钟速度。
dos在同一时刻只允许一个程序使用高内存区。如果我们不指定/hmamin=xxx那
么Himem.sys为第一个需要它的程序保留HMA。
ram 就是常规意义的内存我们现在用的!
rom 说白了就是bios用的一块用特殊方法擦写的内存.在这讲了真实模式和安全模
式还有V86模式!及其寻址的方法!
0~~640叫主内存或者是传统内存!
640~~1024叫上层内存!
1024以上叫延伸内存!
1024~~1088叫高层内存!
传统内存!
dos开机的时候会占用56k左右的内存!其他的579k是给用户使用的!当然我们可
以用其他的软件来使用打于640k的内存!要我现在的双通道ddr怎么混呀!
上层内存
这块空尖保留给bios和硬件介面使用!这384k内存是附在显卡的video rom;
video ram 以及一些控制卡上的?!应用程序不能直接存取这一区域的资料!这
就是电脑有640k内存限制的原因!应用程序只能使用传统内存!其次:上层内存
有160k每有使用!单色显示器还可以使用更多(>160k)通过管理程序可以使用!
这个地方就是如是大师所说的(upper memory blocks)简称umb!是80386以后机
器可以用的内存!
延伸内存
位于2 的20 次方以上超过8086定址范围所以在80286以后的机器才能用!
由于dos只能管理640k的内存所以必须通过符合xms的规范的延伸内存管理程序才
可以间接管理这块区域的内容!
xms是 intel; louts; ms; ast4 家共同拟定的延伸内存管理程序规定了在确定内
存存取延伸内存hma及上层内存的标准界面,目的在于避免程序间随意存取这块区
域造成冲突!himem.sys和emm386.exe等都符合!…也就是说我们只能用这样的软
件来管理延伸内存!
二、在这里我强调一下config.sys和autoexec.bat文件的内容一定要精简,不启动
那些不必要的内存驻留程序,这些内存驻留程序往往占用很多常规内存。再一个
原因就是没有像wengier那样娴熟的技巧 ,这两个文件简明一点,会减少出错的
机会。而且也便于修改,我经常看wengier的配置就看得眼花缭乱。
如果config.sys文件中含有安装缓存程序如smartdrv.exe或PC-CACHE.COM再就是
ramdrive.sys;xmsdsk.exe等虚拟盘命令,可以取消它们以节省常规内存。特别是
smartdrv.exe要使用大量的常规内存。所以wengier说PC-CACHE.COM好些。如果一
定要使用ramdrive.sys,应保证RAM盘建在扩展内存中,而不是在常规内存中。当
然最好是用xmsdsk,因为它会将自己也放入xms中。
如果config.sys文件含有buffers命令,应减少buffers指定的磁盘缓冲区数目,
每一个缓冲区会占用532个字节的常规内存。但是过多地减少盘缓冲区的个数会造
成一些程序不能正常运行,一般buffers不宜小于15。这个在前面已经讲过,这里
再重申一下。 如果config.sys文件中包含lastdriver命令,取消该命令或将
lastdriver设小一点,而不要设成astdriver=32之类。因为DOS为每个允许访问
的逻辑驱动器在内存中建立一个对应的管理块CDS,每个CDS大约占用80多个字节
的常规内存。
config.sys文件中的device和devicehigh命令的次序是很重要的,它将影响内存
的有效使用和config.sys启动时的一系列程序的正确运行。在config.sys文件中
最好按以下次序安装设备驱动程序:
1. Himem.sys;
2. 使用扩展内存的设备驱动程序;
3. emm386.exe,如果使用emm386仿真扩充内存并提供对高内存块(UMBs)的存取功
能,那么EMM386命令行应包括RAM开关而不用NOEMS。NOEMS禁止emm386.exe仿真
扩充内存,但它为安装设备驱动程序和运行其它程序提供最大的可用高内存块。
4. 使用扩充内存的的设备驱动程序;
5. 使用高内存块(UMBs)的设备驱动程序。
对于autoexec.bat,我的建议还是精简:去掉用户不需要的那些内存驻留程序;
如果不在命令行使用鼠标,不要安装任何鼠标设备驱动程序,比如mouse.com
因为可以在任何时候键入mouse.com以使用鼠标。其他有些类似程序也一样。
尽可能地在高端内存区(UMB)中安装设备驱动程序和运行其它的tsr(内存驻留)
程序。 也就是说只要能用high就坚决要用。autoexec文件里加载程序也请尽量
使用LH命令。(完)
---------------------------------------------------------------------------------------------------------------