Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1013627
  • 博文数量: 238
  • 博客积分: 2842
  • 博客等级: 少校
  • 技术积分: 2765
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-16 00:20
个人简介

stdlf

文章分类

全部博文(238)

文章存档

2013年(6)

2012年(13)

2011年(82)

2010年(89)

2009年(48)

我的朋友

分类: 服务器与存储

2011-08-24 11:22:55

在我们现在看来,内存有多少G,要么就是几根内存条,可在当年DOS的环境下,系统中存在以下四种内存:

   常规内存(Conventional Memory)

   高端内存(Upper Memory)

   扩充内存(Expanded Memory) EMS

   扩展内存(Extended Memory) XMS

DOS在实模式下,能直接寻址的范围是1MB。而这1MB分为640KB的常规内存和384KB的高端内存,加在一起就是1024KB也就是1MB。因为DOS使用16位段基址:便宜量格式,只能使用低端的640KB,这就是有名的640KB限制。其中最低端的1KB,即00000H~003FFH存放的是中断(IRQ)矢量表;接下来是256B的BIOS数据区;DOS及应用程序使用00500H~9FFFFH。这在开始使用DOS的20世纪80年代是完全能够满足要求的,因为当时PC上安装的物理内存容量也是640KB,甚至更少。(前面地址中的H代表16进制)
系统硬件使用的内存位于地址区域的高端,范围是A0000H~FFFFFH,共384KB。其中有用于显示的视频缓冲区和BIOS程序空间,例如显卡,网卡和主板BIOS。

地址FFFF0H在PC中有特别的用途。

计算机在加电启动时,CPU中的CS=F000H,IP=FFF0H,即从地址FFFF0H处开始执行,这个区域属于系统BIOS。(F000:FFF0)=EA5BE000F0(是JMP F000:E05B指令的十六进制表示),它立即跳转到BIOS的初始化程序,开始系统自检。(这段跟DOS没有关系,只是查资料时看到了,就也写上了。是想让大家知道,在按下主机电源开关后,CPU都做了些什么,为什么BIOS开始工作,自检硬件设备)

最后我附了一张图,本来想自己画的,可一搜发现已经有人画好了,并且画的肯定比我好,我就用人家的图了,一看这个,肯定就清楚多了,比文字怎么写的都强。

上面说的扩充内存是一种硬件,那个年代的主板专门预留了扩展槽,可以插上,我是没见过。扩展内存就是内存条上大于1M的部分,通过DOS下的一些驱动可以将XMS的一部分虚拟成EMS,以满足一些为EMS开发的程序的需要。

中间有一段叫高端内存,指位于常规内存之上的384K内存。程序一般不能使用这个内存区域,但是EMM386.exe可以激活高端内存的一部分,并且它允许用户将某些设备驱动程序和用户程序用Devicehigh或LH(即loadhigh)装入高端内存。dos=high,umb也是把DOS的一部分装到高端内存里。这里的umb是高端内存块(Upper Memory Block)的缩写。(以后我会专门写config.sys的部分)

DOS的程序,主要还是要使用常规内存的,的时候,连点Shift进入最小的DOS模式也就是为了节省640K这部分的空间,以便让HP的刷写程序有足够的空间运行,不然刷写程序就要报错,就算XMS再大也没用。

还有一个叫DOS4GW.EXE的程序,在DOS玩过一些大一些的游戏如仙剑,红警等,在启动的时候,有时候能看到有个DOS4GW一闪而过,它可以使用CPU直接进入保护模式,直接访问XMS,不过这时就已经脱离了DOS状态。后来的Windows 3.x,95,98也都运行在保护模式下的,但都需要DOS带一下。

有些东西要看一下计算机组成原理或汇编之类的书才能理解,尤其是内存的寻址与CPU的寄存器(上面提到的CS,IP等)。

文:kingduanlian

阅读(3529) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~