你可能听到或读到过 Epanded memory(扩充内存),EMS,Extended memory(扩展内存),XMS,EMM,UMB,HMA,VCPI,以及 DPMI 这些术语。为解释诸程序如何被分配来访问1MB以外的内存,本篇将定义这些术语,这样当这些概念同后面各篇相联系时你就熟悉它们了。正如我们现今所知道的那样 PC 机的体系结构以完全可使用的1024K(1MB)内存空间为基础。就 DOS 而言,1MB就是可供使用的全部内存,但对现实世界的使用而言,1MB内存被证明为太少;用户们希望拥有比较大的文档和较大的电子数据表和数据库,而程序员们编写更强有力的程序则要求更大的可执行文件(运行诸程序的诸文件)。
为响应 PC 机的普及和用户们的不断变化的需要,程序员们和硬件丁程师们努力探索提供更多内存和使用这些内存的方法。实际上提供更多的内存并不是太大的问题:只需插入更多的芯片或内存卡。要使额外的内存可以使用则是现实的挑战。显然,需要更多的内存空间,所以计算机行业开发了使用1MB以外内存的诸多标准。
扩充内存(Expanded Memory)
这些标准中的第一个就是扩充内存(Expanded Memory)。扩充内存是指1MB以上的额外内存,它可以被程序访问(且在某些情形下由硬件访问),后者使用扩充内存规范(在本篇后面解释)。把扩充内存称为一个持定边界(诸如640K或1024K)之外的内存是不正确的,因为扩充内存没有实在的位置,直到它被映射为止。这就是我们把扩充内存称之为“在别的某处”的原因。扩充内存可在任何型号的IBM PC 兼容计算机:8088,8086,80286,i386,i486,以及更高机型上使用。它被发明用于1985年使用的任何 PC 及以后的计算机上。虽然286及后来的处理器拥有保护模式,它们能够使用扩展内存(在本章稍后讨论),但使用比1MB更多的内存的第一个标准发明被用来从8088开始的任何处理器上,以便为以后尽可能大的程序和用户服务。在386及以后的计算机上,使用额外内存所必需的内存管理程序已被设值到该处理器芯片(CPU)中。在 286及以下的计算机上要求特殊的扩充内存硬件(通常是一个内存扩充板)以提供扩充内存。
扩展内存是在286或更高档的计算机上的1MB以上的内存。访可扩展内存比访问扩充内存简,因为在286及更高档的计算机上的处理器芯片被设计成"知道" 关于巳安装额外内存的情况。不能在低于286的计算机亡使用扩展内存,因为其处理器并非为此而设计。遗憾得很, DOS 并不知道如何完成访问扩展内存的该简单功能。不像扩充内存(它可以实模式使用),扩展内存仅可以保护模式使用。再DOS下使用扩展内存的程序需要将该处理器置于一种特殊模式以使用扩展内存并返回另一模式以同DOS对话。
实模式和保护模式
—台 PC 机可有若干种操作模式。一台8086拥有一种操作模式:实模式。一台286拥有两种模式:实模式和保护模式。一台i386拥有四种模式:实模式、保护模式、虚拟8086模式和平坦型32位模式。每种模式都容许对内存和其它功能的不同的访问。每一种模式都可访问完全不同的处理器模型。取决于处理器提供的较好的内存管理和较新的程序。为运行老的和新的两个现存的程序,在该芯片中有各种处理器模型可供使用。你的软件将计算机置于必要的模式以供给软件所希望的内存类别。通常使用DOS扩展器做此事。
实模式
在286、386、i486或Pentium计算机的三种操作模式中是最为兼容的。在实模式下,386处理器表现为复原成8086处理器。实模式是任何D0S程序都可在任何80x86计算机上运行的模式。一个 DOS 扩展程序必须从保护模式切换到实模式以访问任何DOS服务(如像保存一个文件)。在实模式下,程序不能访问一台386计算机的任何先进功能,如高级的内存管理和保护。
保护模式
保护模式是DOS扩展程序可在其中运行并将其数据存储在扩展内存中的模式。一个DOS扩展程序就是一个不仅可把数据存储在扩展内存中,而且在扩展内存中运行它自己的代码的程序。为了做此事,DOS扩展程序必须处在保护模式。在保护模式下,程序可访问386处理器芯片上的分页的内存管理单元并使用该处理器的32位寄存器和寻址模式。保护模式和使用它的DOS扩展程序急剧地增加了 PC 机上内存的使用,使得可使用前所未有的更
多数据的更大而又更快的程序成为可能。