
了解DOS下的内存管理机制.doc
43页了解 DOS 下的内存管理机制DOS操作系统最早设计时,PC机的硬件系统只支持1M字节的寻址空间,所以DOS只能管理最多1M 字节的连续内存空间在这1M内存中,又只有640K被留给应用程序使用,它们被称为常规内存或 基本内存,其它384K被称为高端内存,是留给视频显示和BIOS等使用的在1982年,640K内存 对微型计算机来说显得绰绰有余,人们甚至认为, 640K 的内存可以用来干任何事现在看起来有些 可笑,但在当时,情况确实如此现在的情况是,即使你的电脑装有几兆或几十兆内存,但如果你使用DOS操作系统,那么你也 只有640K的内存可以直接使用,1M以上的内存要通过一些内存管理工具才能使用值得庆幸的是, Windows 95已经不存在常规内存的限制了,你所有的内存,不管是8M还是128M,都可以被直接使 用在 DOS 下,系统中存在以下四种内存:常规内存(Conven tional Memory);高端内存(Upper Memory);扩充内存(Expanded Memory);扩展内存(Extended Memory) 0常规内存指的是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)的缩写扩充内存是一种早期的增加内存的标准,最多可扩充到32Mo使用扩充内存必须在计算机中安 装专门的扩充内存板,而且还要安装管理扩充内存板的管理程序由于扩充内存是在扩展内存之前 推出的,所以大多数程序都被设计成能使用扩充内存,而不能使用扩展内存由于扩充内存使用起 来比较麻烦,所以在扩展内存出现后不久就被淘汰了扩展内存只能用在80286或更高档次的机器上,目前几乎所有使用DOS的机器上超过1M的内存 都是扩展内存。
扩展内存同样不能被DOS直接使用,DOS5.0以后提供了 Himem.sys这个扩展内存管 理程序,我们可以通过它来管理扩展内存emm386.exe可以把扩展内存(XMS)仿真成扩充内存(EMS), 以满足一些要求使用扩充内存的程序最后再强调一下,不管扩充内存或扩展内存有多大,DOS的应用程序只能在常规内存下运行 有的程序可以通过DOS扩展器(比如DOS4GW.exe等程序)使CPU进入保护模式,从而直接访问扩展内 存;但是要注意,进入保护模式以后,计算机就脱离了 DOS状态dos 获得更多常规内存DOS 环境下的大部分程序都是在常规内存中运行,如果某个程序由于内存不够而运行失败,最常见 的问题就是常规内存不足下面介绍几种常用的释放常规内存的方法:一、 当系统配置有扩展内存时,可以将DOS的大部分代码和C的暂驻内存部分安装 在高内存区(HMA)这要求在config.sys中包含有下述命令:device=Himem.sys dos=high虽然Himem.sys本身也要占用少量的常规内存,但可以使用HMA将为我们节省出更多的常规内 存二、 精简config.sys和auto exec.bat文件的内容,不启动那些不必要的内存驻留程序,这些 内存驻留程序往往占用很多常规内存。
如果config.sys文件中含有安装sma rt drv.exe或ramdrive.sys的device命令,可以取消它 们以节省常规内存特别是smar tdrv.exe要使用大量的常规内存如果一定要使用ramdrive.sys, 应保证RAM盘建在扩展内存中,而不是在常规内存中如果 config.sys 文件含有 buffers 命令,应减少 buffers 指定的磁盘缓冲区数目,每一个缓冲 区会占用532个字节的常规内存但是过多地减少盘缓冲区的个数会造成一些程序不能正常运行, 一般 buffers 不宜小于 15如果config.sys文件中包含las tdriver命令,取消该命令或将las tdriver设成J或K,而不 要设成Z因为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,我们的建议是:去掉用户不需要的那些内存驻留程序;如果只在Windows 中使用鼠标,不要安装任何鼠标设备驱动程序,比如,因为Windows有一个内置的鼠标 设备驱动程序三、 尽可能地在高端内存区(UMB)中安装设备驱动程序和运行其它的内存驻留程序dos 如何进行多种系统配置由于软件的增多,而不同软件所需的系统配置并不相同,致使我们需要经常改变配置,如果每 次都改写config.sys是相当麻烦的,于是DOS设计了菜单式多重任务选择的配置,就方便多了,比 如有些游戏无需扩展内存,有些又必须有扩展内存,有些汉字系统还必须设置虚拟盘等,采用多重 设置将是一劳永逸的事例:两种设置[menu]menuitem=nomal ,nomal configuration 设置第一种配置menuitem=myself ,configuration for myself 设置第二种配置menudefault=nomal,5 设置默认的配置和自动选择的时间menucolor=15,1 设置菜单的颜色[nomal] 此处为第一种配置, [ ]中的内容需与 menuitem 后的字符相同files=30buffers=30device=c:\dos\hime.sysdevice=c:\dos\emm386.exe ramlastdrive=z[myself] 此处为第二种配置files=35buffers=20device=c:\dos\hime.sysdevice=c:\dos\emm386.exe noems[common] []中为 common 则表示此处为各种配置都使用到的配置项dos=high,umb其中[menu]区中为菜单的设计:menuitem 表示设置对应的配置区,可以有多个配置区,逗号后是菜单上显示的内容 。
menudefault 设置默认的菜单选项,逗号后是自动选择的时间menucolor 设置菜单颜色,逗号前为文字色,后为背景色这样在电脑起动时,就会有菜单显示以供用户选择了对应的,在 autoexec.bat 中也可以进行多任务选择,比如:@ECHO OFFPROMPT $p$gset blaster=a220 i5 d1 此处为公用设置区set temp=c:\dos\tempgoto %config% 转至标 号%config%其中%config%的值是由选择某一菜单项时自动确定的:nomal 此处为对应的第一个设置,:后的字符需与config.sys中的配置区名相同LH /L:0;1,45456 /S C:\DOS\SMARTDRV.EXEPATH C:\WINDOWS;C:\DOS;C:\UCDOS;c:\tools;c:\tools\vpiclh c:\mouse\goto end:myself 此处为对应的第二个设置PATH C:\DOS;c:\toolslh c:\mouse\goto end:enddos 出错提示与对策如果你不懂英文,是不是对经常出现的英文提示一筹莫展,当然最好的主意是你现在就开始学习英 语,未来是互联网的世纪,而互联网上的大部分资料是英文的,不懂的话,就少了一种交流的手段 不过我想给出一些常见的错误提示给大家还是必要的,不懂的时候就来查一查吧。
[英文提示] Abort,Retry, Ignore,fail?[中 文] 退出,重试,忽略,取消?[原 因] 不能识别给出的命令、或发生了使命令不能执行的磁盘或设备错误,可能是磁盘损坏或软驱门没关[对 策] 按 A 键 彻底终止,并回到 DOS 提示符按 R 键 重复执行该命令按 I 键 继续处理,忽略错误,非常冒险,建议不要采用按 F 键 不执行有问题的命令,继续下述处理有时会用到[英文提示] Access Denied[中 文] 拒绝存取[原 因] 试图打开一个标记为只读、存贮在写保护的磁盘上或锁定在网络上的文件如果在子目录上使用“ Type ”命令,或在文件上使用“ CD(chdir)” 命令,也会产生这个信息[对 策] 应该用“Att rib ”命令删除文件的只读状态或从磁盘中去掉写保护,然后再试试[ 英文提示 ] Bad Command or file name[中 文] 错误的命令或文件名[原 因] 不能识别输入的命令[对 策] 应该检查以确保输入命令的正确性 确认在指定目录或用Path命令指定的搜索路径上能找到命令文件[英文提示] Boot error[ 中 文 ] 引导错误[原 因] 在引导时检测不到应该的外设。
[对 策] 应该检查计算机的设置参数,如用户自己不能解决这个问题,请找专门维修人员[英文提示] Cannot find system files[中 文] 不能找到系统文件[原 因] 试图从没有包含系统文件的驱动器上装入操作系统[对 策] 应该用sys命令将系统文件复制到根目录中除非真的是不能恢复系统文件了,才可用 Format/s 命令重新格式化磁盘[英文提示] Cannot load command,system halted[中 文] 不能加载command,系统中止[原 因] 应用程序覆盖了内存中的所有或部分 C[ 对 策 ] 应该重新引导计算机,检查被应用程序修改过的数据是否完整,如必要可将 C 复制到子目录,这样退出应用程序时 DOS 可在这儿找 到 C[英文提示] Cannot read file allocation table[中文]不能读到文件分配表[原因]文件分配表已坏[对策]如仍能找到一些数据,那么将它们都。












