DOS下面的内存管理和优化
一、DOS下内存的分类和分配
1.常规内存(ConventionalMemory)
DOS为了保持对X86软件向前及向后的兼容性,始终维持着640KB的内存限制。
这640KB勿需借助内存管理程序即可直接寻址的内存称为常规内存。
这也是DOS系统下所有应用软件都可利用的区域。
2.上位内存区(UMAUpperMemoryArea)和上层内存块(UMBUpperMemoryBlock)
紧邻常规内存上端的区域即UMA,其中包含ROM,一般留作系统硬件(如BIOS、视频等)使用,故称系统区域,最大384KB,在1M之内。
8086/8088以上的系统的地址线寻址都能达到1M或更高,故也有将1M以内的内存叫常规内存的。
其中的剩余空间即UMB。
在386以上的系统中,通过在config.sys中设置:DEVICE=EMM386.EXE和DOS=UMB,即可使用UMB存放设备驱动、command等常驻内存程序。
3.扩充内存(ExtendedMemory)
随着CPU性能的提高以及程序对内存要求的增大,DOS对内存管理需要突破640KB的限制,但又要解决兼容性的矛盾,因此出现了扩充内存和扩展内存的概念。
在286以上的系统中,采取线性的内存寻址方式直接存取1M以上的新增的内存称ExtendedMemory。
通常,DOS是通过在config.sys中设置DEVICE=C:\DOS\HIMEM.SYS来使用ExtendedMemory,该驱动程序执行Lotus/Intel/microsoft/AST等公司共同制定的XMSExtendedMemorySpecification规范,以防止两个程序同时存取相同内存位置的情况。
它主要用于Windows环境下系统和用户程序。
在XMS中起始位置的64K称为高内存区(HMAHighMemoryArea)。
可以通过在config.sys中设置DOS=HIGH,将MS-DOS的大部分程序从UMA中移至HMA中,以便用户有更多可用的常规内存。
4.扩展内存(ExpandedMemory)
在早期的8086/8088计算机中,超出由地址线直接寻址的,而由系统区域中的"页框"(Pageframe)间接存取的附加内存称ExpandedMemory。
286以上的计算机都能够使用ExtendedMeory,且它比ExpandedMemory速度快,故当前的机种大部分是以增加ExtendedMemory的方式增加内存容量。
但在286以上的计算机中运行一些老程序(如lotus1-2-3)时,需要ExpandedMemory。
这时只要在config.sys中设置DEVICE=EMM386.SYS,利用ExtendedMemory模拟ExpandedMemory。
DOS6.0以上的版本还可让扩展内存和扩充内存设置共享的内存,以增加使用上的便利和弹性。
当程序需要ExpandedMemory中的数据时,EMM386.SYS先将数据由ExpandedMemory存入"页框",将"页框"中不再需要的数据回写到ExpandedMemory。
二、DOS下内存的优化
优化内存主要要达到两个目的,一是将常驻程序从常规内存移出,以便为其他DOS应用程序
留出更多空间;二是提供扩展内存、扩充内存,供磁盘高速缓存、Windows及其它使用1M 以上的程序使用。
1.增加常规内存
在DOS环境下发生"内存不足",大部分是因为常规内存不够用造成的。
增加常规内存的措施,可以在config.sys中设置:
DOS=HIGH将MS-DOS的大部分程序从UMA移至HMA
DEVICE=C:\DOS\HIMEM.SYS使用ExtendedMemory
LASTDRIVE=F减小最大驱动器符号(一个驱动器约占100B的空间)等。
2.增加ExtendedMemory
在Windows3.X环境下发生"内存不足"提示,大部分是因为ExtendedMemory不足造成的。
增加ExtendedMemory的措施有:
(1)将autoexec.bat中的SMARTDRV命令后的参数改小,即减少分配给磁盘高速缓存器的空间;
(2)在config.sys中设置EMM386.EXE MIN=0,即不保留模拟ExpandedMemory的ExtendedMemory,但在需要时仍能提供ExpandedMemory;或设置EMM386.EXENOEMS,即不使用ExtendedMemory模拟ExpandedMemory,只负责到UMB存取数据;
(3)在config.sys中删除DOS=HIGH,将MS-DOS从HMA送回UMA。
3.增加ExpandedMemory
(1)用EMM386.EXE RAM使ExtendedMemory模拟ExpandedMemory。
(2)尽可能减少分配给RAM盘之类程序的ExpandedMemory。
4、将设备驱动程序装入上位内存
为了提供更多的常规内存给其它应用程序使用,需将一些外部设备的驱动程序(如
cdrom.sys)安装到上位内存区块(UMB),在Config.sys中可做如下配置:
device=HIMEM.SYS
device=EMM386.SYS NOEMS
DOS=HIGH,umb
DeviceHIGH=cdrom.sys
5、将内存驱留程序装入上位内存
将一些常用的内存驱留程序用loadhigh(LH)命令装入UMB,亦可节约基本内存,例如在Auoexec.bat文件中加入命令行:LH C:\DOS\DOSkey
即可将用户普遍使用的DOSkey(键盘命令运行增强程序)加载到上位内存,可节省约3KB的基本内存。
6、建立RAM盘
由于从内存中读取数据比硬盘中读取得快,对于频繁读取磁盘的应用程序及文件如字库文件、图形图像程序文件、字处理程序等,可用RAM盘加快运行。
在Config.sys中设置RAM盘方法如下:
DEVICE=C:\DOS\RAMDRIVE.sys/E1024
其中使用/E参数,将RAM盘建立在扩充内存中,若加/A参数,则将RAM盘建在扩展内存中。
因为访问扩充内存比访问扩展内存快,所以应尽量使用/E参数。
从以上各类优化方法可以看出,在DOS下对内存优化,总是"拆东墙补西墙"以牺牲某一类内存的空间,给另一类内存腾出较多的空间。
如要增加UMB的空间,是以减少ExtendedMemory 的空间和将一些程序从UMB移至ExtendedMemory而实现的。
所以,关键是根据自己的系统及使用情况灵活调整。
从WIN95开始,操作系统全面接管了对内存的控制,操作系统对内存的使用自动进行优化,但这种优化并不是完美的,仍然可以采用其他方法进一步优化。
三、优化"虚拟内存"
随着软件技术的发展,软件对内存的需求大为增加,在运行大程序时,若机器中的物理内存不够用,系统会自动在硬盘上划出一个空间来建立一个虚拟内存文件,以弥补物理内存的不足,Windows操作系统在硬盘上创建的交换文件(Win386.swp),即通常所说的"虚拟内存"。
虽然可用硬盘来代替内存运行更多的程序,但硬盘的速度毕竟比真正的物理内存慢得多,其实质是"以时间换取空间"。
关于交换文件的设置,Windows98(95)为用户提供了两种选择,即"让Windows管理虚拟内存设置"和"用户自己指定虚拟内存设置"。
若选择前者(默认选择),则交换文件的大小是不固定的,从而造成它在C盘上呈碎片状存放。
即使运行"磁盘碎片整理程序"也不能消除碎片,因为Windows98(95)启动后,交换文件始终是在用文件,所以不能进行整理。
CPU与硬盘交换数据的速度本来就比与物理内存交换数据的速度要慢,如果交换文件在硬盘上不连续存放,速度将进一步降低,必然会影响整机的运行速度。
因此,可以选择"用户自己指定虚拟内存设置",通过将交换文件设置成大小固定,且在硬盘上连续存放的文件,达到优化虚拟内存,提高整机运行速度的目的。
具体步骤如下:
1.用鼠标右键单击桌面上的"我的电脑"图标,然后单击"属性"选项,在"系统属性"对话框的"性能"选项卡上,单击"虚拟内存"。
2.在"虚拟内存"对话框上,选中"用户自己指定虚拟内存设置";在"硬盘"框中,选定为D 盘,然后单击"确定"。
3.重新启动电脑,交换文件已移到D盘上。
启动"磁盘碎片整理"程序,整理C盘。
4.在上述的"性能"选项卡上,在"硬盘"框中,选定为C盘;在"最大值"和"最小值"框上键入自定的交换文件大小值(约为物理内存的4倍),然后单击"确定"。
5.重新启动电脑,设置即告完成。
一个固定大小的交换文件连续存放在C盘上。
文件名为Win386.swp,存放在根目录中。
但是,这样手工设置虚拟内存后,电脑有可能出现异常。
因此,应慎用此法。