- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DOS下XMS,EMS,DPMI,DOS4GW研究
DOS DEBUG,XMS,EMS,DPMI,DOS4GW 研究
wxleasyland
20 11.2
本文引用了很多资料。
一、 概念
实模式和保护模式
在 386 以上档次的微机中,有两种存储器工作方式,一种称为实地址方式或实方式,另一
种称为保护方式。
在实方式下,物理地址仍使用20 位,所以最大寻址空间为1MB,以便与8086 兼容。
保护方式采用32 位物理地址,寻址范围可达4GB 。
DOS 系统在实方式下工作,它管理的内存空间仍为1MB,因此它不能直接使用扩展存储器。
EMS:扩充内存(Expanded Memory )。
1985 年初,Lotus 、Intel 和Microsoft 三家共同定义了LIM -EMS ,即扩充内存规范,通常
称EMS 为扩充内存。80386DX 已经是32 位微处理器,实际寻址能力达4GB,反观旧的内存管
理规范却处处碍手碍脚,于是扩充内存Expanded memory 规范横空出世,取代了INT 15H,使
程序能够访问32MB 的内存空间。EMS 通过一种页面映射分配技术的反复映射访问所有的EMS
内存,这样的效率并不高,所以只有少数老游戏使用了EMS 。EMS 的原理和XMS 不同,它采
用了页帧方式。页帧是在1MB 空间中指定一块64KB 空间 (通常在保留内存区内,但其物理存
储器来自扩展存储器),分为4 页,每页16KB 。EMS 存储器也按16KB 分页,每次可交换4 页
内容,以此方式可访问全部EMS 存储器。符合EMS 的驱动程序很多,常用的有EMM386.EXE 、
QEMM 、TurboEMS 、386MAX 等。DOS 和 Windows 中都提供了EMM386.EXE 。emm386.exe
可以把扩展内存(XMS)仿真成扩充内存(EMS),以满足一些要求使用扩充内存的程序。
XMS:扩展内存Extended memory。
由于EMS 并没有解决根本的问题,Microsoft 又制定了扩展内存Extended memory 管理规范
XMS ,通过在实模式与保护模式之间的快速切换,使程序在保护模式中能够直接使用系统所有
内存,从而快速访问XMS 。XMS 简单而实际,被众多DOS 游戏采用。很多游戏采用了一个signed
integer 来存储XMS 的数 ,导致32767 以上的数值变成负数,这就要求我们降低内存数量到
32MB 了。Microsoft 的HIMEM.SYS 是一个符合XMS 规范的管理扩展内存的驱动程序。但在这
种方式下,扩展内存只能作为数据区使用,运行于实地址模式下的DOS 及其应用程序代码不能
存放其中。
注:物理内存都是一样的,EMS 和XMS 只是操作系统管理内存的方式不一样而已。EMS
方式更早出现,XMS 方式是更迟出现的!!但是XMS 更简单好用,所以Microsoft 就没有直接
支持EMS 了,而是直接支持XMS ,DOS 里加载HIMEM.SYS 就是XMS 了。如果要EMS,则
要再加载EMM386.EXE ,将XMS 仿真成EMS !
保留内存:占据640KB~1024KB 地址空间。
分配给显示缓冲存储器、各适配卡上的ROM 和系统ROM BIOS ,剩余空间可作上位内存
UMB 。UMB 的物理存储器取自物理扩展存储器。此范围的物理RAM 可作为Shadow RAM 使
用。
(我注:我个人觉得是这样:
在640KB 以下时,地址是分给了内存,CPU 地址线在这范围内时,就是选通到内存去了。
640KB~1024KB 地址是分给了ROM 等,而不是给内存,所以CPU 地址线在这范围内时,
硬件自动选通的是去ROM、显卡内存等地方,而不是去内存。这样,由于硬件设计的原因,这
部分300 多KB 的物理内存容量就相当于废掉了!
保护模式下,CPU 地址线在 1MB 以上时,就又选通到去内存了。比如XMS 或EMS 管理
时。
也就是说:
如果只装了1MB 的物理内存条,只用到了640KB,其它300 多KB 的物理容量都废掉了,
这300 多KB 也不能用作XMS 或EMS !
如果只装了2MB 的物理内存条,XMS 或EMS 也只能用到1MB 物理容量,即1MB-2MB
之间的物理内存空间,而640KB-1024KB 之间的物理空间也是用不到的!
EMS 有映射软件地址的功能,即可以将地址
文档评论(0)