一台微机的物理存储器总是一定的(当然可以扩充)。而各种内存的大小,除基本内存外,UMB、HMA、XMS、EMS都是可随设置参数的不同而改变的。各种应用软件,对内存的使用不完全相同,有的软件要求使用XMS,有的要求使用EMS。
设置内存的各个区域及其大小通常是在系统启动时执行CONFIG.SYS文件完成的。在CONFIG.SYS文件中用于内存管理的命令只有三条:
DEVICE=[路径]HIMEM.SYS[参数]
DEVICE=[路径]EMM386.EXE[参数]
DOS=<参数>
但是这三条命令的使用方法并不简单,特别是参数的选择将直接影响内存区域的建立和范围大小。由于没有哪种设置能满足所有软件的使用,所以通常在CONFIG.SYS中采用多种设置,并用菜单方式进行选择,以便不同的应用软件能在不同的内存环境下工作。下面分别介绍三条命令的使用。
1.HIMEM.SYS
HIMEM.SYS作为XMS存储器的管理驱动程序,它的主要功能是把扩展存储器按XMS规范来管理,也就说,它把传统的扩展存储器改造成了XMS存储器。因此,只有用XMS规范编写的程序才能使用XMS存储器。此外,HIMEM.SYS可以建立HMA存储器供使用。HIMEM.SYS命令的格式是:
DEVICE=HIMEM.SYS[参数]
DOS 6.2版的HIMEM.SYS提供了10种参数,下面介绍几个主要参数,其余的请参考有关手册。
●/HMAMIN=m
本参数用于指定一个0~63范围的数m,这个数以KB为单位,表示一个程序文件的长度。只有大于这个长度的文件才能使用HMA内存。如果省略本参数,则HIMEM.SYS自动将HMA分配给首先要求使用HMA的程序。
在同一时刻,只能有一个应用程序使用高端内存HMA。为了最有效地使用HMA,应把本参数的m值设为申请使用HMA的程序中的最大者,以保证HMA得到最大限度的使用。
●/INT15=memory
安装HIMEM.SYS后,如不用本参数说明,则所有的物理扩展存储器都将纳入XMS管理而成为XMS存储器。此时传统的扩展存储器不再存在(用MEM命令观察可看到“0 Bytes available configurous extended memory”)。这将使得那些需要用BIOS INT15来调用传统扩展内存的早期软件无法运行。本参数的目的就是保留一定容量的传统扩展内存,以便可以使用旧版软件。本参数中memory表示所保留的容量,以KB为单位。取值范围为64到65535,但最大不能超过系统的物理扩展存储器的容量。
一般说来,在DOS 5.0之后出版的软件,凡需要使用1MB以上内存的,大都支持XMS。
●/CPUCLOCK:ON|OFF
安装HIMEM.SYS之后,如发现计算机的时钟速度改变,则应指定本参数为ON来解决,本参数的缺省值为OFF。
●/TESTMEM:ON|OFF
这是DOS 6.2以上版本提供的新参数。启动计算机时HIMEM将检测扩展内存,由于它采用了读写比较的方法,因此与上电自检内存相比更为彻底。但是这项检查将使启动时间加长。本参数的缺省值为ON,如要缩短启动时间,可设置本参数为OFF。
2.EMM386.EXE
EMM386.EXE是EMS的管理驱动程序。它的功能是把XMS存储器模拟成EMS存储器来使用,并且建立UMB存储器。由于EMM386.EXE的扩展名使用了EXE,所以它是一个外部命令,可在DOS下执行。但EMM386.EXE一般还是在CONFIG文件中使用,其格式为:
DEVICE=EMM386.EXE[参数]
EMM386.EXE提供了二十多个参数,下面介绍最常用的几个。
●ON|OFF|AUTO
ON表示激活EMM386.EXE驱动程序,OFF表示挂起EMM386.EXE程序,AUTO表示仅当有程序请求时,才支持EMS内存和UMB内存。
本参数用在已设置EMM386.EXE,但未设置UMB的情况下,即CONFIG文件中的命令行为:
DEVICE=C:/DOS/HIMEM.SYS
DEVICE=C:/DOS/EMM386.EXE
在DOS下再直接执行EMM386.EXE并配合这些参数可改变EMM386.EXE的工作状态。
C:/>EMM386 OFF 取消EMM386功能
C:/>EMM386 ON 恢复EMM386功能
C:/>EMM386 AUTO 设EMM386为自动状态
●memory
本参数是一个数值,取值范围为64到32768,以KB为单位。表示要配置给EMS的存储器总量,缺省值为256KB。例如,将1024KB模拟为EMS存储器,CONFIG.SYS文件中的命令行应写为:
DEVICE=C:/DOS/HIMEM.SYS
DEVICE=C:/DOS/EMM386.EXE 1024
●NOEMS
本参数表示只提供UMB存储器,但不建立EMS存储器。CONFIG.SYS文件命令行应写为:
DEVICE=C:/DOS/HIMEM.SYS
DEVICE=C:/DOS/EMM386.EXE NOEMS
●RAM=XXXX-XXXX
本参数表示同时建立UMB和EMS存储器。XXXX-XXXX表示指定建立UMB的段地址范围。如不指定段地址范围,则EMM386将把保留内存区中所有的可用空间用来建立UMB及一个页框。通常,可以不指定UMB的段地址以获得更多的UMB空间。
DEVICE=C:/DOS/HIMEM.SYS
DEVICE=C:/DOS/EMM386.EXE RAM
●L=minXMS
本参数的L是Least(最少)的意思,minXMS是一个数字,以KB为单位。表示在执行EMM386.EXE时,至少要保留多大容量的XMS不被模拟成EMS。这样在执行EMM386.EXE后,内存中仍有指定数量的XMS存在。如要求至少保留384KB作为XMS,CONFIG.SYS命令行应写为:
DEVICE=C:/DOS/HIMEM.SYS
DEVICE=C:|DOS/EMM386.EXE L=384
●X=XXXX-XXXX
本参数的X是eXclued(不包含)的意思。XXXX-XXXX为段地址范围,表示禁止EMM386把指定的范围作为EMS或UMB,其目的是为了防止发生冲突。
●FRAMEX=XXXX
本参数用以指定实际的64KB页帧(或称为页框)的范围。取值范围为8000-9000和C000-E000之间。例如,选页帧在E000-EFFF范围,DE00-DFFF范围不能作为UMB,则CONFIG.SYS的命令行应写为:
DEVICE=C:/DOS/HIMEM.SYS
DEVICE=C:/DOS/EMM386.EXE RAM FRAME=E000 X=DE00-DFFF
●I=XXXX-XXXX
本参数中I是Include(包含)的意思。XXXX-XXXX是段地址范围,表示该范围内的地址空间可用作UMB。其意义正好和X参数相反。如果X参数和I参数指定的范围重复,则以X参数有效。I参数一定要与NOEMS和RAM参数一起使用才有效。例如:
DEVICE=C:/DOS/EMM386.EXE NOEMS I-E000-EFFF
在设置中,一般都希望获得较大的UMB,以便驻留TSR程序,留出更多的基本内存供用户程序使用。
3.DOS
DOS命令的功能有两个:
(1)把DOS系统的核心部分由基本内存搬到HMA中,从而腾出空间供用户使用。
(2)与UMB建立联系,以便装载TSR程序或设备驱动程序到UMB中。
DOS命令的格式为:
●DOS=HIGH/LOW
表示把DOS核心部分装入UMB(选HIGH),还是装入基本内存(选LOW)。缺省值为LOW,一般应选HIGH。
●DOS=UMB/NOUMB
表示DOS将与UMB建立联系(选UMB)或不准许使用UMB(选NOUMB)。一般应选UMB。可把两行命令合为一行,参数间用逗号间隔。
如:DOS=HIGH,UMB
在系统启动时,DOS自动设置缓冲区数目Buffers的值为15,每个Buffers占523字节。随着DOS=HIGH的执行,Buffers也随DOS的核心程序移到HMA中,这当然是好事,但是如果用户自己设定的Buffers太大,如超过47个,则HMA装入DOS核心后的剩余空间无法容纳,就把全部Buffers移至基本内存中,这将得不偿失。
在CONFIG.SYS文件中,HIMEM.SYS命令行应放在EMM386.EXE命令行之前,DOS命令行可随意放在任何位置。
RAMDRIVE.SYS─例子
要在扩展内存中创建RAM驱动器,并为RAMDRIVE.SYS分配64K扩展内存(默认值),可在CONFIG.SYS中使用以下命令:
device=c:/dos/ramdrive.sys /e
该命令从C:/DOS目录中装入RAMDRIVE.SYS。
要在扩充内存中安装RAMDRIVE.SYS,并给RAM驱动器分配4M(4096K)扩充内存。要完成这一任务并指明RAMDRIVE.SYS放在C盘的DOS目录中,可在CONFIG.SYS文件中加入以下行:
device=c:/dos/ramdrive.sys 4096 /a
现在假设要给RAMDRIVE.SYS分配2048K扩展内存,并创建一个512扇区的RAM驱动器,将根目录项限制在1024之内。要完成该任务并指明RAMQRIVE.SYS位于D盘的DEVICES目录中,可在CONFIG.SYS文件中加入以下行:
device=d:/dos/ramdrive.sys 2048 512 1024 /e