以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 网友互助 』  (http://bbs.xml.org.cn/list.asp?boardid=76)
----  DOS启动盘之CONFIG.SYS配置详解  (http://bbs.xml.org.cn/dispbbs.asp?boardid=76&rootid=&id=121849)


--  作者:卷积内核
--  发布时间:9/30/2011 9:07:00 AM

--  DOS启动盘之CONFIG.SYS配置详解

现在虽然是WINDOWS时代了,但是当WINDOWS无法启动(如病毒感染、分区表损坏、安装多系统时操作错误...)一张可启动的软盘就显得尤 为重要了,虽然网上的启动盘多的是,但里面所包含的文件或启动盘的配置并不能使所有人满意,很多人都想做一张适合自己使用的启动盘,但现在可参考的DOS 资料实在是太少了,求助别人吧,高手呢???!!!其实我也是菜鸟一个,毕竟不是从DOS时代过来的人,但我会在能力允许的范围内尽可能详细的讲解给大 家。如有不当或错误,肯请指教!好了,言归正传...

一、认识DOS内存

1、CPU寻址能力:CPU用地址线来选定存贮器(也就是内存)的地址,因为每一条地址线有0和1两种状态,所以一条地址线可选到2个不同的地址。同理2条地址线可选到4个地址,3条可选8个地址,即N=2的N次方。

2、各型号CUP的寻址能力:


CPU
地址线
寻址能力

8088/8086 20条 1M
80286 24条 16M
80386SX 24条 16M
80386DX 32条 4G
80486 32条 4G

3、CPU的寻址能力是CPU最大能存取的地址范围,但在此地址范围内,必须真正安装了存贮器,这样才能把数据存入存贮器,否则即使使用了 80486的CPU,如果只装了640K的存贮器,那主机的存贮器容量也只有640K。这时CPU寻址范围大部分是空的,它的4G寻址能力也无从发挥。

4.1979年,Intel推出了具有20根数据总线的8088芯片,寻址能力为1MB,并且受到了IBM的扶植。另一方面,Microsoft在 为基于8088的电脑设计的操作系统DOS中,采用了“段内寻址”的方式,每个段的长度为64K字节,共有65535个段,但是因为段与段之间可以互相重 叠,段的起始地址间距为16字节,所以DOS的寻址能力只有65535*16Byte,也就是1MB。然而,IBM认为1MB实在太大了,没有人会用到那 么多的内存,于是又把384K内存(UMB,Upper Memory Block)分配给ROM BIOS和视频内存等等,于是,邪恶的640K结界形成了,出于兼容性的考虑,此后的DOS一直保留着原有的内存管理机制。这个640K的Base memory,又叫Conventional memory,是系统最基本内存,它是DOS和所有程序都可以用的内存区,被称为常规内存。它是系统内存中最宝贵、最紧张的资源,如果一个程序因为内存不 够而无法运行,大多是因为这部分空间不够使用造成的。

5、常规内存(Conventional Memory):常规内存是指0-640K的内存区。这是dos下的应用软件唯一可以使用的内存区域,由于DOS本身、config.sys文件中的安装 的设备驱动程序和autoexec.bat文件中执行的内存驻留程序都要占用一些常规内存,所以应用程序能使用的常规内存是不到640K的。

6、上位内存(Upper Memory):上位内存(也称高端内存)是指位于常规内存之上的384K内存。程序一般不能使用这个内存区域,但是EMM386.exe可以激活上位内 存的一部分,并且它允许用户将某些设备驱动程序和用户程序用Devicehigh或LH(即loadhigh)装入上位内存。dos=umb就是允许 DOS管理这些激活的上位内存。这里的umb是上位内存块(Upper Memory Block)的缩写。

7、扩充内存(Expanded Memory):扩充内存是一种早期的增加内存的标准,最多可扩充到32M。使用扩充内存必须在计算机中安装专门的扩充内存板,而且还要安装管理扩充内存 板的管理程序。由于扩充内存是在扩展内存之前推出的,所以大多数程序都被设计成能使用扩充内存,而不能使用扩展内存。由于扩充内存使用起来比较麻烦,所以 在扩展内存出现后不久就被淘汰了。

8、扩展内存(Extended Memory):扩展内存只能用在80286或更高档次的机器上,目前几乎所有使用DOS的机器上超过1M的内存都是扩展内存。扩展内存同样不能被DOS 直接使用,DOS5.0以后提供了Himem.sys这个扩展内存管理程序,我们可以通过它来管理扩展内存。emm386.exe可以把扩展内存 (XMS)仿真成扩充内存(EMS),以满足一些要求使用扩充内存的程序。

最后再强调一下,不管扩充内存或扩展内存有多大,DOS的应用程序只能在常规内存下运行。有的程序可以通过DOS扩展器(比如DOS4GW.exe等程序)使CPU进入保护模式,从而直接访问扩展内存;但是要注意,进入保护模式以后,计算机就脱离了实模式的DOS状态。

二、配置内存

1、前面已经讲了,DOS只能直接使用640K的基本内存,必须依靠其它内存管理程序来使用更多内存。HIMEM.SYS和EMM386.EXE就是最常用的两个内存管理程序。

2、HIMEM.SYS

HIMEM.SYS是一个扩展内存驱动程序,负责管理扩展内存,并开辟HMA,使DOS可以将自己装入其中。HMA是扩展内存的头64K内存(实际 上比64K少16K,但是人们习惯上说是64K),80286以上的电脑要使用HMA,须将CPU的A20地址线打开,这个过程已经由HIMEM代劳。

语法:DEVICE=HIMEM.SYS (一般不带参数加载,如果你确认内存没有错误的话,也可以带上/TESTMEM:OFF来跳过内存检测)

3、EMM386.EXE

EMM386.EXE的作用是创建UMB,并用扩展内存模拟扩充内存供一些程序使用。EMM386就是把扩展内存的一部分或全部映射到这些区域形成上位内存块UMB,因为这些块是分散的,所以就会有多个UMB,即UMBs。

语法:DEVICE=EMM386.EXE RAM|NOEMS [,NOVCPI] [,I=xxxxxxxx|,X=xxxxxxxx]19楼空间 | R C A.e
/RAM ;用扩展内存来模拟扩充内存(EMS),并允许将扩展内存用作UMB装入程序或驱动。(常用)19楼空间 H&w `"m J3{ D
/NOEMS ;用扩展内存来创建UMB,但不模拟EMS。可节省更多UMB供程序或驱动装入其中,但可能导致一些需要EMS的程序无法运行。(常用)19楼空间 j$f E | v6u m;C
/NOVCPI ;VCPI(Virtual Control Program Interface)虚拟控制程序界面,一般指定了NOEMS也就不需要VCPI了。(不常用)
Y ^ @ W6H v;Y z0  /I=xxxxxxxx|X=xxxxxxxx ;当EMM386将扩展内存映射到UMB时,用I=xxxxxxxx|X=xxxxxxxx包含或排除上位内存的特定区域。(如i=b000-b7ff,这一段区域是留给单色显示器用的)(不常用)

注意:在安装EMM386前必须先安装HIMEM。不要用HIGHSCAN或者M9之类的参数,强行扫描虽然可以多出7KUMB,但会造成不稳定。HIMEM和MEM386都无法用DEVICEHIGH装入上位UMB。

4、DOS:指定DOS是否维持与UMB的关系,是否部分装入高端内存。

语法:DOS=[HIGH|LOW][,UMB|,NOUMB][,AUTO|,NOAUTO][,SINGLE]

HIGH|LOW ;指定DOS是否将暂驻部分装入高端内存区。
L w v*d P x8m0  UMB|NOUMB ;指定DOS是否管理由EMM386创建的UMB,只有指定也DOS=UMB才可以用DEVICEHIGH或LH将程序或驱动装入UMB。
%q5U V8t { o+S g X0  AUTO|NOAUTO ;是否将FILES,BUFFERS等自动调入UMB。19楼空间&K$T(Q/y P J4x Y r
SINGLE ;表示使用单一模式的DOS
{ n D B$J0  其中,AUTO/NOAUTO和SINGLE仅用于MS-DOS 7.x中。

5、FILES=[数字] ;表示可同时打开的文件数,一般可选择20到50,如果要拷贝或解压缩大批的小文件(在安装台湾的一些游戏时经常会遇到这种情况,文件数可能有几千),可 以把FILES的值设为上限值255,这样可以提高拷贝或解压缩的速度。但是要注意,如果把FILES的值设得过大会占用过多的基本内存。如果不加设定, 系统缺省为FILES=8,一般FILES/FILESHIGH的设置值在30左右比较合适。

有的系统配置文件里可能会出现FCBS=[数字]这条语句,它也是用于确定DOS可同时打开的文件最大数,它与FILES=[数字]的区别在于打开文件的方式不同。一些旧的应用程序会要求用FCB方式打开多个文件,这样,在CONFIG.SYS里就要使用FCBS命令。

6、BUFFERS=[数字] ;表示设置磁盘缓冲区的数目,通常设置为20-30左右。缺省值一般为15。

磁盘缓冲区是一块内存区,它用于存储从磁盘读入的数据或存储写到磁盘的数据。DOS在读或写一个记录时,先检查包含那个记录的数据块是否已在磁盘缓 冲区中,如果不在,就从磁盘上将该数据块读入到磁盘缓冲区中,再将此记录传送给应用程序;如果数据已在磁盘缓冲区中,则不必从磁盘上读入,而是直接把数据 传送给应用程序。由于从磁盘上读取数据是相对耗时较多的操作,所以增加磁盘缓冲区可以节省很多读盘的时间。但是要注意,增加磁盘缓冲区是要占用内存的,所 以,磁盘缓冲区的数值并不是设得越大越好,最佳的磁盘缓冲区数目要根据用户的机器配置和通常运行的程序类型来确定。

7、STACK=n,s ;改变缺省的堆栈资源。通常指定9,256即可。
[ M V#\)G)M0   n ;堆栈数目
]+V$R O0N o;K M0   s ;每个堆栈的大小

8、BREAK=ON|OFF ;设置或关闭对Ctrl+C的检查,如关闭,则DOS只有在键盘输入、屏幕输出、打印机输出、辅助端口操作时才会检查。

9、DEVICE和DEVICEHIGH ;加载一些内存驻留程序,用于管理设备。比如内存管理程序和光驱驱动程序等。 如:

DEVICE=HIMEM.SYS DEVICEHIGH=VIDE-DD.SYS /D:MSCD001(光驱驱动)19楼空间#]$o1f T W6B
DEVICEHIGH与DEVICE的不同是前者将程序加载入高端内存。

10、LASTDRIVER=字母 ;LASTDRIVER规定用户可以访问的最大驱动器符数目,也就是DOS所能识别的最后的驱动器符(字母)。如果设定的驱动器符数目小于本机上的实际驱 动器数,则此LASTDRIVER命令会被忽略掉。缺省的最大驱动器符数目为本机的实际驱动器数目加一。

11、SHELL=文件名[参数] ;指定DOS 使用的命令解释程序的名称和位置。如未指定,则默认为启动盘根目录下的command.com,你也可以指定其它的文件,如4DOS.EXE等。

12、SET 变量=[变量值] ;设置DOS环境变量。

13、NUMLOCK=ON|OFF ;指定启动时NUMLOCK指定灯是否打开。

14、REM:添加注释,注释不能超过123字符。


--  作者:卷积内核
--  发布时间:9/30/2011 9:07:00 AM

--  
【常见的配置为】:
DEVICE=HIMEM.SYS /TESTMEM:OFF
DEVICE=MEM386.EXE RAM
DOS=HIGH,UMB,AUTO
SHELL=COMMAND.COM /P /E:640
NUMLOCK=OFF
FCBS=4,0
FILES=30
BUFFERS=25,0
LASTDRIVE=32
STACKS=9,256

【多配置CONFIG.SYS的写法】:

一、多重配置文件可分为选项区、配置区、共用区三大部分。

二、多重配置时常用到的五个命令是:

MENUITEM:定义状态菜单上的选项
MENUDEFAULT:指定缺少设置菜单上的选项
MENUCOLOR:定义状态菜单屏幕背景与字符颜色
SUBMENU:定义子菜单
INCLUDE:插入一个配置区

三、实例分析:

[menu] ;定义选项菜单
menuitem=CD,CD-ROM ;带光驱的启动模式
menuitem=U,U-Disk ;带U盘的启动模式
menuitem=CD+U,CD-ROM & U-Disk ;带光驱和U盘的启动模式
menuitem=CD_U,CD-ROM / U-Disk ;不带光驱和U盘的启动模式
menudefault=CD,30 ;默认为“带光驱启动,等待时间为30秒
menucolor=7,0 ;菜单背景色为黑色,字符颜色为浅灰色

[OUR] ;配置区
device=himem.sys /testmemff
device=emm386.exe noems

[CD] ;带光驱启动的配置区
INCLUDE OUR ;插入OUR区的配置内容
device=vide-cdd.sys /D:IDE-CD ;加载光驱驱动

[U]
INCLUDE OUR ;插入OUR区的配置内容
device=usbaspi.sys ;
device=Di1000dd.sys ;驱动U盘

[CD+U]
INCLUDE OUR ;插入OUR区的配置内容
device=vide-cdd.sys /D:IDE-CD
device=usbaspi.sys
device=Di1000dd.sys

[CD_U]
INCLUDE OUR ;插入OUR区的配置内容

[COMMON] ;共用配置区
files=30
buffers=60
dos=high,umb
stacks=9,256
lastdrive=z

五、多重配置时AUTOEXEC.BAT文件的一般结构

公共执行命令 GOTO %CONFIG%
    :配置块名1
配置块1要执行的命令
GOTO 结束标号名
    :配置块名2
配置块2要执行的命令
    GOTO结束标号名
:结束标号名

六、多重配置时AUTOEXEC.BAT文件的常见错误

(1)在多重配置的AUTOEXEC.BAT文件中,最为重要的一条命令就是GOTO %CONFIG%,其中的“CONFIG”必须用两个百分号夹住,并且中间不能含有任何空格。在DOS中,“%环境变量名%”用法的含义是取指定环境变量 的值。在多重配置时,CONFIG是DOS内部一个保留的环境变量名,它代表用户在MENUITEM定义的菜单中所选择的那个配置块的名字。

例如,若用户在菜单中所选择的菜单项对应的配置块名字为WINDOWS,则%CONFIG%的值就是WINDOWS,此时,GOTO %CONFIG%就相当于GOTO WINDOWS,这样就可以灵活地根据先前的菜单选择转移到相应标号处。绝不能将此句写成“GOTO CONFIG”或写成“GOTO CONFIG.SYS”。

(2)在CONFIG。SYS文件中定义的每个配置块名,在AUTOEXEC。BAT中都必须存在相应的标号“:配置块名”。即使某个标号所属内容中无任何命令,也必须写一行“:配置块名”,不得省略任何一个标号。这也是最易犯错误的地方之一。

(3)用“:配置块名”语句定义的标号必须与先前在CONFIG.SYS中定义的相应配置块名一致,但大小写不必区分。另外,习惯上将结束标号名定义为END。

(4)每个标号下属语句的最后都应加上“GOTO 结束标号名”语句,并在文件尾用“:结束标号名”语句定义结束标号,表示做完本配置中的命令后跳过其它配置对应的命令。

(5)若无公共命令,则第一条命令即为GOTO %CONFIG%。

(6)若按以上写法,是先执行完公共命令,然后再执行相应配置块中的命令。有时,可能希望先执行配置块中的命令,最后再执行公共命令,这时就应将公共命令写在最后,即从“:结束标号”语句的下一行开始写公共命令。

七、一个最小的多重配置文件实例

下面列出的一个多重配置实例,启动时仅显示一个配置选择菜单(两个配置名分别为DOS和WINDOWS),但无论选择哪个都不执行任何命令。这举例 子没有任何实际意义,我们的目地是希望通过这举例子强调一个问题:即使一个配置块中不包含任何内容,CONFIG.SYS文件中的任何一个配置块定义语句 (即“〔配置块名〕”)以及AUTOEXEC.BAT 文件中的任何一个标号定义语句(即“:配置块名”)都不能省略,否则运行时都将出错。

(1)CONFIG,SYS文件内容:

[MENU]
U6n+E D(K0  MENUITEM=DOS
MENUITEM=WINDOWS
[COMMON](这一行可以省略,但最好不省)
[DOS]
[WINDOWS]
(2)AUTOEXEC.BAT文件内容:
GOTO %CONFIG%
:DOS
GOTO END
:WINDOWS
GOTO END
:END

以下是MS-DOS v7.1系统CONFIG.SYS配置情况:

DEVICE=ECHO.SYS W/e/l/c/o/m/e /t/o MS-DOS 7.10... (在屏幕显示提示文字)
DEVICE=ECHO.SYS C/o/p/y/r/i/g/h/t M/i/c/r/o/s/o/f/t C/o/r/p. A/l/l /r/i/g/h/t/s /r/e/s/e/r/v/e/d.
DEVICE=HIMEM.SYS (载入扩展内存管理器XMS驱动程序,支持大内存)
DEVICE=EMM386.EXE NOEMS (载入提供UMB和EMS内存驱动程序的工具)
DEVICEHIGH=VIDE-CDD.SYS /D:IDE-CD
SHELL=COMMAND.COM /P /E:640
DOS=HIGH,UMB,AUTO
NUMLOCK=OFF
FILES=30
BUFFERS=30,0
LASTDRIVE=32
STACKS=9,256

◆ 以下是我的电脑CONFIG.SYS配置情况(即“实创启动盘v1.0”其中一段程序):

DEVICE=ECHO.SYS S/t/a/r/t /w/i/t/h /C/H/I/N/E/S/E . . . (在屏幕显示提示文字)
DEVICE=Himem.sys /testmem:off (载入扩展内存管理器XMS驱动程序,支持大内存)
DEVICE=Umbpci.sys (载入UMB驱动程序,可提供高达160多K的UMB内存)
DEVICEHIGH=Vide-cdd.sys /D:MSCD001 (载入通用光驱驱动程序)
DEVICEHIGH=aspicd.sys /D:SCSI001
DEVICE=LOWDMA.SYS (提供软盘的ISA DMA UMB的支持)
DEVICEHIGH=aspidisk.sys (载入SCSI驱动程序)
SHELL=COMMAND.COM /f/p (命令解释程序)

[COMMON]
shell=command.com/p/e:640
SET PATH=c:\;c:\windows;c:\windows\command;
SET TEMP=C:\TEMP (建立临时文件夹)
SET TMP=C:\TEMP
dos=high,umb,auto (DOS系统是否使用“高端内存区”、或使用UMB,是否自动配置)
FILES=30
BUFFERS=30,0
STACKSHIGH=9,256
LASTDRIVEHIGH=32



--  作者:hjx_221
--  发布时间:9/30/2011 2:08:00 PM

--  
谢谢楼主分享
--  作者:257258
--  发布时间:10/9/2011 9:51:00 PM

--  
人才啊。DOS都忘干净了,谢谢楼主还记得。
--  作者:卷积内核
--  发布时间:10/13/2011 12:04:00 PM

--  
这些在某些工作中领域中还是经常用的哦。。。DOS速度不是一般OS能比拟的。
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
64.453ms