Board logo

标题: 了解DOS内存(转载) [打印本页]

作者: lydong     时间: 2002-10-22 00:00    标题: 了解DOS内存(转载)

了解DOS内存
          
      DOS操作系统最早设计时,PC机的硬件系统只支持1M字节的寻址空间,所以DOS只能管理最多1M字节的连续内存空间。在这1M内存中,又只有640K被留给应用程序使用,它们被称为常规内存或基本内存,其它384K被称为高端内存,是留给视频显示和BIOS等使用的。在1982年,640K内存对微型计算机来说显得绰绰有余,人们甚至认为,640K的内存可以用来干任何事。现在看起来有些可笑,但在当时,情况确实如此。


        现在的情况是,即使你的电脑装有几兆或几十兆内存,但如果你使用DOS操作系统,那么你也只有640K的内存可以直接使用,1M以上的内存要通过一些内存管理工具才能使用。值得庆幸的是,Windows
      95已经不存在常规内存的限制了,你所有的内存,不管是8M还是128M,都可以被直接使用。

        在DOS下,系统中存在以下四种内存:
        常规内存(Conventional Memory);
        高端内存(Upper Memory);
        扩充内存(Expanded Memory);
        扩展内存(Extended Memory)。

        常规内存指的是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)的缩写。

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


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


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

                                                      转载于《学习资讯》

[em18]
作者: Wengier     时间: 2002-10-22 00:00
说法有些不确,并非“进入保护模式以后,计算机就脱离了DOS状态。”
而是进入了保护模式的DOS状态后,计算机就脱离了通常的实模式的DOS状态。
作者: lydong     时间: 2002-10-22 00:00
完全同意版主的评论
作者: 中华dos     时间: 2002-10-26 00:00
帖主能否具体解释一下dos=high,umb中high和umb的区别,我知道其实可以把他们分开写,可见两者是不同的,另外对上位内存,dos保留区这两个概念我也搞不清楚,能否解释一下。
作者: lydong     时间: 2002-10-26 00:00    标题: -

dos=high,umb 的功能是将UMB的控制权交给DOS,至于 high和umb的区别我也说不清楚。
    MS-DOS最初是为8086/8088 CPU设计的操作系统, 最多只能使用1MB的内存。这1MB内存最前面的640KB 即前述的传统内存,至于后面剩下的384KB,则保留给BIOS ROM、硬件接口卡(如VGA、硬盘控制卡)上的ROM 与VIDEO BUFFER 使用。
    保留内存(Reserved Memory)的地址空间介于640~1024KB之间共384KB,它是保留给外部使用的地址空间。保留内存其实不应该称为内存,应该称为保留内存空间,因为在此地址空间并未安装实体的RAM。
    所谓保留内存,其实只是拥有384KB的地址空间而已,并非真有384KB的RAM内存可用来存放数据。
    在保留内存(640~1024间)的384KB地址空间内,除了由视频缓冲区、BIOS ROM 和其他硬件扩充卡使用之外, 仍有许多空隙, 我们可运用 386/486 CPU 的分页(Paging)的能力,将扩展内存映射过来填补这些空隙,因为这些空隙还在DOS的1MB的范围之内,以往是因为没有安插内存所以才无法使用,现在以分页技术配置好内存之后,便成为可供DOS使用的内存了。 我们称这些在640KB 以上地址的内存为“上位内存(Upper Memory)” , 上位内存可能因为外部卡的安装而被分成几个块所以又称为上位内存块(Upper Memory Blocks),简称为UMB。
作者: 禅宗     时间: 2002-10-29 00:00
没错,dos=high,umb 的功能是将UMB的控制权交给DOS,但两者各有各的功能,High是指将DOS核心放在高端内存;而UMB则是让DOS与UMB进行关联,从而使EMM386.EXE负责管理的高端内存让一些程序使用;所以通常将它们写在一起,即可以让DOS核心放在UMB中,又能让其它程序使用UMB,当然,如果没有EMM386.EXE的话,UMB这个参数也就没有了意义了的。我是这样理解的,希望与大家探讨。
作者: laochang409     时间: 2004-6-23 00:00
good
作者: Michael     时间: 2004-6-23 00:00
high是使dos使用hma,hma是1m以上内存的前64KB. 它并不是umb.
作者: qinqong     时间: 2004-6-24 00:00

作者: Michael     时间: 2004-6-24 00:00
请不要只说个"好“字.谢谢