回顾DOS内存

一、对扩展内有的三种使用方式

第一种方式,可称为原始方式,各软件都有自己的一套使用扩展内存方法,相互不通气也互不兼容,结果造成任何时候都只能有一个软件使用扩展内存,否则就会出现一个程序把另一个程序在扩展内存中冲掉这种相互“打架”现象。我们可把这种没有统一规范以“野蛮”方式使用的扩展内存称为“无类型的内存”或叫“野的内存”。

1984年以后,针对这种现象,解决对扩展内存使用方法的混乱局面,国际计算机际行业相继推出了两个使用扩展内存的的规范,这分别是XMS规范和EMS规范。这两个规范是各软件使用扩展内存的共同遵循的标准,统一和规范了对扩展内存访问的方法。各应用程序使用扩展内存时都要遵循这两个规范的规定来访问扩展内存,应用程序不再象以前那样直接对扩展内存进行存取,而是通过XMSEMS规范实现对扩展内存的访问,由XMSEMS规范管理和调度各应用程序对扩展内存的访问,这就可根本上避免以“野蛮”方式访问扩展内存时所可能导致的那种相互打架现象。在XMSEMS两种规范中,调XMS规范是一个更先进的观范,目前新设计的绝大部分使用扩展内存的软件如WINDOWSOFFICE基本上遵循XMS规范(使用EMS规范访问扩展内存的软件目前已很少)。

我们把通过把XMS规范访问的扩展内存称为“XMS类型的内存”或简称XMS内存,把通过EMS规范访问的扩展内存称为“EMS类型的内存”或简称EMS内存。这两种规范使用扩展内存的方式是不一样的。

XMS是通过将扩展内存中的数据交换到常规内存中的方式使用扩展内存的,用户程序依然到常规内存中存取数据,再由XMS规范的驱动程序HIMEM.SYS负责将其转换为对扩展内存的访问。

EMS是通过将扩展内存中的数据交换到上位内序中的空闲地址处。即上位内存块(UMB)中的方式使用扩展内存的,经过专门设计的用户程序转到UMB中存取数据,再由EMS规范的驱动程序EMM386EXE负责将其转换力对扩展内存的访问。由于EMS内存是通过将扩展内存映射到UMB中,这相当于在上位内存中开出的一页窗,用户程序通过这个窗口一页一页地使用扩展内存,所以人们也把EMS内存叫扩页内存。

以上两种使用扩展内存的方式可如下所示:

  HIMEM.SYS

用户程序←一一…一一→常规内存→…一……一→扩展内存

  (XMS规范)

 

  EMM386.EXE

用户程序←一一…一一→上位内存块→…一……一→扩展内存

  (EMS规范)

二、设备驱动程序HIMEM.SYS的作用

用法:DEVICE=[盘符][路径]HIMEM.SYS

HIMEM.SYS的作用有二:

一是将1M之外无类型的扩展内存转换为符合XMS规范的内存,即开辟XMS内存,以供那些需要使用XMS内存的程序所使用。

二是从XMS内存中划出第一个64K内存块,即从XMS内存中开辟出高内存区HMA,以便以后DOS=HIGH命令能把DOS部分内核从常驻区中已到HMA中,以节省更多的常规内存供用户程序所使用。

由于以后要运行的很多软件都要使用由HIMEM.SYS所开辟出的XMS内存,显然HIMEM.SYS应先于所有使用XMS内存的程序运行。

另外,HMA也是HIMEM.SYS 开辟出来的,所以只有在运行HIMEM.SYS 才可能实现DOS=HIGH的功能。

三、DOS=HIGH命令的作用

DOS=HIGH命令的功能就是把DOS部分内核从以DOS常驻区中移到HMA中,以节省出更多的常规内存供用户程序所使用。

DOS 622中只有DOS内核能被移到HMA中,设备驱动程序和常驻程序部只能被移至UMB中。

因为HMA是由HIMEM.SYS所开辟出来的,所以若仅运行DOS=HIGH,则只要HIMEM.SYS的支持就够了,不需要运行EMM386EXE

 

 

四。设备驱动程序EMM386.EXE的作用及其重要参数的含义

用法:DEVICE =[盘符][路径]EMM386.EXE[NOEMS][RAM]

1.EMM386.EXE的作用

EMM386.EXE的作用也有二:

一是从HIMEM.SYS开辟出的XMS内存中划出一部分转换为符合EMS规范的内存,映射到位于上位内存区中的EMS页框(EMS窗口)中,即开辟出EMS内存,或叫作XMS内存来模拟EMS内存,以供那些需要使用EMS内存的老式程序所使用。

二是从HIMFM.SYS所开辟出的XMS内存中划出一部分,映射到上位内存块中,即开辟出上位内存块,以便以后DOS=UMB命令能使DOS把上位内存块也利用起来。

由此我们看到,EMS内存和UMB都是从调XMS中“借”过来的,而XMS又是由HIMEMSYS开辟出来的,所以EMM386.EXE是靠HIMEM.SYS程序来支撑的。

由于UMB是由EMM386EXE所开辟出来的,所以只有在运行了EMM386.EXE后。才可能实现DOS=UMB的功能。

2.EMM386.EXE的参数

运行EMM386.EXE时的参数很重要,主要运行参数如下:

(1)    若不带任何参数运行EMM386.EXE,则仅提供EMS内存,不提供UMB

(2)    若带参数NOEMS运行EMM386EXE,则仅提供UMB不提供EMS

(3)    若带参数RAM运行EMM86EXE,则既提供EMS内存,又提供UMB

大部分考题都要求,在编写CONFIG.SYS文件时,要把一些程序调到UMB中,所以我们在书写EMM386.EXE命令时,后面一定要写上参数NOEMSRAM,即应写成DEVICE=EMM386.EXE RAM DEVICE=EMM386.EXE NOEMS均可。很多学员只写成DEVICE=EMM386.EXF,后面什么参数也不写,这时UMB就出不来了,

用法举例:

【例1DEVICE=C:/DOS/EMM386.EXE(只提供EMS内存)

【例2DEVICE=C:/DOS/EMM386.EXE  NOEMS(只提供UMB

【例3DEVICE=C:/DOS/EMM386.EXE  RAM(同时提供EMS内存和UMB

五、DOS=UMB命令的作用

DOS=UMB命令的功能是让DOS把由EMM3S6EXE所开辟出的UMB与常规内存连接在一起,即让DOSUMB也利用起来,这样以后才有可能用DEVICEHIGHLOADHIGH命令把设备驱动程序或常驻程序由常规内存调入到UMB中,以节省出更多的常规内存供用户程序所使用。

因为UMB是由EMM386.EXE所开辟出来的,所以若要运行DOS=UMB就必须先运行EMM386.EXE

另外,DOS=UMB只是通知DOSUMB也利用起来,但并未把任何程序调入到UMB中,若要具体地将某一程序调入到UMB中,需要再运行DEVICEHIGHLOADHIGH命令。

还有,若只写了EMM386EXE,而没有写DOS=UMB,则EMM386.EXE所开辟出的UMBDOS来讲并没有什么用处,此时DOS并不会使用UMB,当然也就更无法实现DEVICEHIGHLOADHIGH命令了,所以一定别忘了DOS=UMB这一句。

通过以上分析可知DOS=HIGHDOS=UMB这两条命令并没有什么必然联系,一个是有关HMA的,一个是有关UMB的,在CONFIG.SYS中也下一定要同时出现。

六、DEVICEHIGH与LOADHIGH命令的作用

当在CONFIG.SYS中写上DOS=UMB命令后,DOS便可将UMB也利用起来,我们可把一些程序存放到UMB中。但是并不是所有的程序部能放到UMB中。能放到UMB中的程序只有两类,一类是设备驱动程序,另一类是常驻程序。

1.用DEVICEHIGH=命令装载设备驱动程序

用法:DFVICEHIGH=[盘符[ [路径]设备驱动程序名

设备驱动程序是指那些用来驱动和管理硬件设备的程序,例如HIMEM.SYS便是一个用来驱动和管理扩展内存这种设备的程序,又如MOUSE.SYS是一个驱动鼠标器这种设备工作的程序。

设备驱动程序只能以“DEVICE=设备驱动程序名”的形式写在CONFIG.SYS中,设备驱动程序是在DOS启动时在执行以COMMAND.COMAUTOEXEC.BAT前就已被执行并被永久地装入内存的。除个别外,绝大部分设备驱动程序都不能在DOS提示符下运行。绝大部分设备驱动程序的扩展名都是.SYS,只有eMM386.EXE等少量几个设备驱动程序例外。

如果用“DECIVE=”命令来装载设备驱动程序,那么设备驱动程序将被装入到常规内存中。若想把设备驱动程序装入到上位内存中,必须改用“DFVICFHICTH=”命令。实际上在DOS6.22DEVICEHIGH命令已可完全替代DEVICE命令,所有写DEVICE的地方部可换成DEVICEHIGHDOS若发现无法将该驱动程序装人到UMB中,会自动将其放到常规内存中,不会出错。尽管如此,我们还是建议学员在考试时对这两个命令根据情况区分使用。

2.用“LOADHIGH”命令运行常驻程序

用法:LOADHIGH [盘符] [路径]常驻程序名

LH[盘符] [路径]常驻程序名

DOS提示符下执行的程序,在其运行结束后,,通常便释放其所占据的所有内存空问,以供下一个要运行的程序所使用。但是有一类程序却不是这样,这类程序就是常驻程序。常驻程序也叫常驻内存程序、TSR程序或驻留程序,是指那些一旦执行便永久地占据内存(这些程序永远呆在内存里不出来)的程序。程序常驻内存后,就有机会随时发挥作用,监视和控制用户的工作。例如病毒就是典型的常驻程序,启动汉字操作系统时需运行的程序如SPIIB.COMSPDOS.COMPY.COM,鼠标管理程序MOUSE..COM等都是常驻程序。DOS622中的SMARTDRV.EXEDOSKEY.COMVSAFE.COM等也是常驻程序。

常驻程序都必须在DOS提示符下运行,不能写在CONFIG.SYS中。所以判断一个程序是设备驱动程序还是一个常驻程序的通常方法是:若其必须写在CONFIG.SYS中,则便是设备驱动程序;若只能在DOS提示符下运行便是一个常驻程序(当然能在DOS提示符下运行的并不都是常驻程序)。

如果运行常驻程序时没写LOADHIGH,如MOUSE,则该常驻程序便将驻留在常规内存中,若想将常驻程序调到UMB中,必须在命令的前面写上LOADHIGH(注意:LOADHIGH简写为LH),例如:LOADHIGHMOUSE.COM.则MOUSE.COM被放到UMB中。

要特别注意这两个命令的用法差别:设备驱动程序只能用“DEVICEHIGH=”命令,常驻       内存只能用“LOADHIGH”命令(或“LH”命令),并且DEVICEHIGH前面必须写上等号,而LOADHIGH 后面绝不可写等号,用一个空格与常驻程序名隔开就可以。

七、磁盘高速缓冲程序SMARTDRV.EXE的作用与用法

DOS6.22中有一个非常有用的常驻程序SMARTDRV.EXE,使用它可以大大加快磁盘的读写速度。其工作原理如下:

由于相对于内存而言,磁盘(包括硬盘)的读写速度要慢多了。为此SMARTDRV.EXEXMS内存中外辟出一块区域(称之为高速缓冲区)作为主机与磁盘之间的一块中间区域,用来暂时存放上次从磁盘上读取的数据。这样,下次读取磁盘时,SMARTDRV.EXE首人查找一下要读取的数据在这块缓冲区中是否能找到,若能找到就没有必要再读取磁盘,就可直接把数据从缓冲区中取回了,这样可大大节省读取磁盘的时间。当然若在缓冲区中找不到,那就没办法了,还得读磁盘去。所以这就有个在缓冲区中是否能找到,即命中率的概念,显然重复读取的数据命中率就比较高。类似地,SMARTDRV.EXE对写磁盘也能进行高速缓存。当写磁盘时,主机只要把数据写到缓冲区中就可马上返回做其它事情,待CUP空闲时,再由SMARTDRV.EXE在后台偷偷把数据写到磁盘上,从而可大大加快写盘速度。

由于SMARTDRV.EXE只能使用XMS内存,所以事先必须在CONFIG.SYS文件中运行HIMEM.SYS程序,以开辟出XMS内存供SMARTDRV.EXE作高速缓冲区用.。注意SMARTDRV.EXE是个常驻程序,通常是写在AUTOEXEC..BAT中或在DOS提示符下单独运行,一般不应写在CONFIG.SYS文件中,只有写在AUTOEXEC.BAT中或在DOS提示符下运行才能起缓冲作用

另外,SMARTDRV.EXE 这个常驻程序很特殊,即使我们运行时不带LOADHIGH,它也会自动把自己装入到UMS中,(我们是说SMARTDRV.EXE程序本身会自动进入到UMB中,SMARTDRV.EXE所开辟的高速缓冲区依然在XMS内存,即扩展内存中)只有这一个特例,其它常驻程序若要装到UMB中,就都必须写上LADDHIGH

SMARTDRV.EXE 程序的主要用法如下:

[盘行][路径] SMARTDRV.EXE[初始值][WINDOWS运行时的最小值] [L]

其中:

初始值(单位是Km一一是指使用多大的XMS内存作为磁盘高速缓冲区,越大当然越好,但若超过过2M,再增加效果就不明显了。若不给出最大值,SMARTDRV.EXE将视所配置的XMS内存的大小自动选择一个合适的值。

WINDOWS运行时的最小值(单位是KB)一一只有运行WINDOWS时才有可能用到这一参数。因为,WINDOWS要大量使用XMS内存,当调XMS内存紧张时,WINDOWS会自动地减少SMARTDRV.EXE所使用的高速缓冲区的大小,以便先满足自己对XMS的要求。规定一个最小值,就是给WINDOWS一个限制,高速缓冲区减少到这个最小值时,就不许WINDOWS再抢占SMARTDRV.EXE所用的高速缓冲区域了。

/L-――强行将SMARTDRV.EXE装入到常砚内存中(若不写,SMARTDRV.EXE自动将自己装到UMB中)

用法举例:

【例1C:/DOS/ SMARTDRV.EXE(自动选择合适的高速缓冲区大小)

【例2C:/DOS/ SMARTDRV.EXE 1024 502(初始值为1024KWINDOWS行时的最小值为512K

八、建立RAM盘的设备驱动程序RAMDRIVE.SYS的作用与用法

RAMDRIVE.SYS的作用是:用系统的一部分内存建立存取速度极快的RAM磁盘。

一般用法如下:

DEVICE=[盘符] [路径] RAMDRIVE.SYS [RAM盘容量] [/E][/A]

其中。

RAM盘容量(单位是KB)一使用多少内存去建立RAM盘,默认值64K

/ E 使用XMS内存来建立RAM盘。事先应运行HIMEM.SYS才会有XMS内存。

/ A 使用EMS内存来建立RAM盘。事先应运行HIMEM.SYSEMM386.EXE,才会有EMS内存。

若/E或/A都未写,则默认采用常规内存来建立RAM盘。

用法举例:

【例1DEVICEHIGH=RAMDRIVE.SYS(使用常规内存,大小为64K

【例2DEVICEHIGH=RAMDRIVE.SYS 1024/E(使用XMS内存,大小为1M

【例3DEVICEHIGH=RAMDRIVE.SYS 2048/A(使用EMS内存,大小为2M

九、各内存管理命令的相互依赖关系

通过上面对常用内存管理程序的细致分析,可看出这些命令之间运行有一个先后顺序问题,它们之间的相互关系如前所述。

在书写CONFIG.SYS文件时,心须先写HIMEM.SYS,然后再写EMM386.EXE,最后才是DEVICEHIGH命令,但DOS=HIGHDOS=UMB及其它命令写在任何位置上均可。

扩展内存的简单设置

1.将DOS装入高位内存(HMA),其位置在1兆以上的64K区域内

CONFIG.SYS文件中输入

DEVICE=HIMEM.SYS

DOS=HIGH  

2.将驱动程序装到高端内存(上位内存),其位置在640K1M之间(系统未用区)

CONFIG.SYS中输入

DEVICE=EMM386.EXE RAM (NOEMS)

DOS=UMB

  3.用DEVICEHIGH=设备驱动程序格式,使用高端内存:

DEVICE=HIMEM.SYS

DEVICE=EMM386.EXE RAM (NOEMS)

DOS=HIGH,UMB

DEVICEHIGH=ANSI.SYS

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值