`
talin2010
  • 浏览: 500670 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

[转] 彻底理解内存概念

阅读更多

尽管内存这个词常常挂在我们的嘴上,但是,有多少人真正了解内存、理解内存概念呢?

对刚刚步入电脑世界的初学者来说,基本内存、上位内存、高端内存、扩展内存、扩充内存、保留内存等概念更是玄之又玄,难以彻底理解。所以我们特地介绍一下内存的基本概念。

基本知识

● 内存
内存就是存储程序以及数据的地方,比如当我们在使用 WPS 处理文稿时,当你在键盘上敲入字符时,它就被存入内存中,当你选择存盘时,内存中的数据才会被存入硬 (磁) 盘。在进一步理解它之前,还应认识一下它的物理概念。
● 只读存储器 (ROM)
ROM 表示只读存储器 (Read Only Memory) ,在制造 ROM 的时候,信息 (数据或程序) 就被存入并永久保存。这些信息只能读出,一般不能写入,即使机器掉电,这些数据也不会丢失。ROM 一般用于存放计算机的基本程序和数据,如 BIOS ROM。其物理外形一般是双列直插式 (DIP) 的集成块。
● 随机存储器 (RAM)
随机存储器 (Random Access Memory) 表示既可以从中读取数据,也可以写入数据。当机器电源关闭时,存于其中的数据就会丢失。我们通常购买或升级的内存条就是用作电脑的内存,内存条 (SIMM) 就是将 RAM 集成块集中在一起的一小块电路板,它插在计算机中的内存插槽上,以减少 RAM 集成块占用的空间。目前市场上常见的内存条有 4M/条、8M/条、16M/条等。
● 高速缓冲存储器 (Cache)
Cache 也是我们经常遇到的概念,它位于 CPU 与内存之间,是一个读写速度比内存更快的存储器。当 CPU 向内存中写入或读出数据时,这个数据也被存储进高速缓冲存储器中。当 CPU 再次需要这些数据时,CPU 就从高速缓冲存储器读取数据,而不是访问较慢的内存,当然,如需要的数据在 Cache 中没有,CPU 会再去读取内存中的数据。
当你理解了上述概念后,也许你会问,内存就是内存,为什么又会出现各种内存名词,这到底又是怎么回事呢?
在回答这个问题之前,我们再来看看下面这一段。

物理存储器和地址空间

物理存储器和存储地址空间是两个不同的概念。但是由于这两者有十分密切的关系,而且两者都用 B、KB、MB、GB 来度量其容量大小,因此容易产生认识上的混淆。初学者弄清这两个不同的概念,有助于进一步认识内存储器和用好内存储器。
物理存储器是指实际存在的具体存储器芯片。如主板上装插的内存条和装载有系统的 BIOS 的 ROM 芯片,显示卡上的显示 RAM 芯片和装载显示 BIOS 的 ROM 芯片,以及各种适配卡上的 RAM 芯片和 ROM 芯片都是物理存储器。
存储地址空间是指对存储器编码 (编码地址) 的范围。所谓编码就是对每一个物理存储单元 (一个字节) 分配一个号码,通常叫作"编址"。分配一个号码给一个存储单元的目的是为了便于找到它,完成数据的读写,这就是所谓的"寻址" (所以,有人也把地址空间称为寻址空间) 。
地址空间的大小和物理存储器的大小并不一定相等。举个例子来说明这个问题:某层楼共有 17 个房间,其编号为 801~817。这 17 个房间是物理的,而其地址空间采用了三位编码,其范围是 800~899 共 100 个地址,可见地址空间是大于实际房间数量的。
对于 386 以上档次的微机,其地址总线为 32 位,因此地址空间可达 232 即 4GB。但实际上我们所配置的物理存储器通常只有 1MB、2MB、4MB、8MB、16MB、32MB 等,远小于地址空间所允许的范围。从下图中我们可以看到地址空间与物理存储器之间的关系。

好了,现在可以解释为什么会产生诸如:常规内存、保留内存、上位内存、高端内存、扩充内存和扩展内存等不同内存类型。

各种内存概念

这里需要明确的是,我们讨论的不同内存的概念是建立在寻址空间上的。
IBM 推出的第一台 PC 机采用的 CPU 是 8088 芯片,它只有 20 根地址线,也就是说,它的地址空间是 1MB。
PC 机的设计师将 1MB 中的低端 640KB 用作 RAM,供 DOS 及应用程序使用,高端的 384KB 则保留给 ROM、视频适配卡等系统使用。从此,这个界限便被确定了下来并且沿用至今。低端的 640KB 就被称为常规内存即 PC 机的基本 RAM 区,请看图 1。保留内存中的低 128KB 是显示缓冲区,高 64KB 是系统 BIOS (基本输入/输出系统) 空间,其余 192KB 空间留用。从对应的物理存储器来看,基本内存区只使用了 512KB 芯片,占用 0000 至 80000 这 512KB 地址。显示内存区虽有 128KB 空间,但对单色显示器 (MDA 卡) 只需 4KB 就足够了,因此只安装 4KB 的物理存储器芯片,占用了 B0000 至 B10000 这 4KB 的空间,如果使用彩色显示器 (CGA 卡) 需要安装 16KB 的物理存储器,占用 B8000 至 BC000 这 16KB 的空间,可见实际使用的地址范围都小于允许使用的地址空间。
在当时 (1980 年末至 1981 年初) 这么"大"容量的内存对 PC 机使用者来说似乎已经足够了,但是随着程序的不断增大,图象和声音的不断丰富,以及能访问更大内存空间的新型 CPU 相继出现,最初的 PC 机和 MS-DOS 设计的局限性变得越来越明显。

1. 什么是扩充内存?

EMS 工作原理
到 1984 年,即 286 被普遍接受不久,人们越来越认识到 640KB 的限制已成为大型程序的障碍,这时,Intel 和 Lotus,这两家硬、软件的杰出代表,联手制定了一个由硬件和软件相结合的方案,此方法使所有 PC 机存取 640KB 以上 RAM 成为可能。而 Microsoft 刚推出 Windows 不久,对内存空间的要求也很高,因此它也及时加入了该行列。
在 1985 年初,Lotus、Intel 和 Microsoft 三家共同定义了 LIM-EMS,即扩充内存规范,通常称 EMS 为扩充内存。当时,EMS 需要一个安装在 I/O 槽口的内存扩充卡和一个称为 EMS 的扩充内存管理程序方可使用。但是 I/O 插槽的地址线只有 24 位 (ISA 总线) ,这对于 386 以上档次的 32 位机是不能适应的。所以,现在已很少使用内存扩充卡。现在微机中的扩充内存通常是用软件如 DOS 中的 EMM386 把扩展内存模拟或扩充内存来使用。所以,扩充内存和扩展内存的区别并不在于其物理存储器的位置,而在于使用什么方法来读写它。下面将作进一步介绍。
前面已经说过扩充存储器也可以由扩展存储器模拟转换而成。EMS 的原理和 XMS 不同,它采用了页帧方式。页帧是在 1MB 空间中指定一块 64KB 空间 (通常在保留内存区内,但其物理存储器来自扩展存储器) ,分为 4 页,每页 16KB。EMS 存储器也按 16KB 分页,每次可交换 4 页内容,以此方式可访问全部 EMS 存储器。图 2 给出了 EMS 的工作原理。符合 EMS 的驱动程序很多,常用的有 EMM386.EXE、QEMM、TurboEMS、386MAX 等。DOS 和 Windows 中都提供了 EMM386.EXE。

2. 什么是扩展内存?

我们知道,286 有 24 位地址线,它可寻址 16MB 的地址空间,而 386 有 32 位地址线,它可寻址高达 4GB 的地址空间,为了区别起见,我们把 1MB 以上的地址空间称为扩展内存 XMS (eXtend memory) 。
在 386 以上档次的微机中,有两种存储器工作方式,一种称为实地址方式或实方式,另一种称为保护方式。在实方式下,物理地址仍使用 20 位,所以最大寻址空间为 1MB,以便与 8086 兼容。保护方式采用 32 位物理地址,寻址范围可达 4GB。DOS 系统在实方式下工作,它管理的内存空间仍为 1MB,因此它不能直接使用扩展存储器。为此,Lotus、Intel、AST 及 Microsoft 公司建立了 MS-DOS 下扩展内存的使用标准,即扩展内存规范 XMS。我们常在 Config.sys 文件中看到的 Himem.sys 就是管理扩展内存的驱动程序。
扩展内存管理规范的出现迟于扩充内存管理规范。

3. 什么是高端内存区?

在实方式下,内存单元的地址可记为:
段地址:段内偏移
通常用十六进制写为 XXXX:XXXX。实际的物理地址由段地址左移 4 位再和段内偏移相加而成。若地址各位均为 1 时,即为 FFFF:FFFF。其实际物理地址为:FFF0 + FFFF = 10FFEF,约为 1088KB (少 16 字节) ,这已超过 1MB 范围进入扩展内存了。这个进入扩展内存的区域约为 64KB,是 1MB 以上空间的第一个 64KB。我们把它称为高端内存区 HMA (High Memory Area) 。HMA 的物理存储器是由扩展存储器取得的。因此要使用 HMA,必须要有物理的扩展存储器存在。此外 HMA 的建立和使用还需要 XMS 驱动程序 HIMEM.SYS 的支持,因此只有装入了 HIMEM.SYS 之后才能使用 HMA。

4. 什么是上位内存?

为了解释上位内存的概念,我们还得回过头看看保留内存区。保留内存区是指 640KB~1024KB (共 384KB) 区域。这部分区域在 PC 诞生之初就明确是保留给系统使用的,用户程序无法插足。但这部分空间并没有充分使用,因此大家都想对剩余的部分打主意,分一块地址空间 (注意,是地址空间,而不是物理存储器) 来使用。于是就得到了又一块内存区域 UMB。
UMB (Upper Memory Blocks) 称为上位内存或上位内存块。它是由挤占保留内存中剩余未用的空间而产生的,它的物理存储器仍然取自物理的扩展存储器,它的管理驱动程序是 EMS 驱动程序。

5. 什么是 SHADOW (影子) 内存?

对于细心的读者,可能还会发现一个问题:即是对于装有 1MB 或 1MB 以上物理存储器的机器,其 640KB~1024KB 这部分物理存储器如何使用的问题。由于这部分地址空间已分配为系统使用,所以不能再重复使用。为了利用这部分物理存储器,在某些 386 系统中,提供了一个重定位功能,即把这部分物理存储器的地址重定位为 1024KB~1408KB。这样,这部分物理存储器就变成了扩展存储器,当然可以使用了。但这种重定位功能在当今高档机器中不再使用,而把这部分物理存储器保留作为 Shadow 存储器。Shadow 存储器可以占据的地址空间与对应的 ROM 是相同的。Shadow 由 RAM 组成,其速度大大高于 ROM。当把 ROM 中的内容 (各种 BIOS 程序) 装入相同地址的 Shadow RAM 中,就可以从 RAM 中访问 BIOS,而不必再访问 ROM。这样将大大提高系统性能。因此在设置 CMOS 参数时,应将相应的 Shadow 区设为允许使用 (Enabled) 。

总结

经过上面分析,内存储器的划分可归纳如下:
● 基本内存 占据 0~640KB 地址空间。
● 保留内存 占据 640KB~1024KB 地址空间。分配给显示缓冲存储器、各适配卡上的 ROM 和系统 ROM BIOS,剩余空间可作上位内存 UMB。UMB 的物理存储器取自物理扩展存储器。此范围的物理 RAM 可作为 Shadow RAM 使用。
● 上位内存 (UMB) 利用保留内存中未分配使用的地址空间建立,其物理存储器由物理扩展存储器取得。UMB 由 EMS 管理,其大小可由 EMS 驱动程序设定。
● 高端内存 (HMA) 扩展内存中的第一个 64KB 区域 (1024KB~1088KB) 。由 HIMEM.SYS 建立和管理。
● XMS 内存 符合 XMS 规范管理的扩展内存区。其驱动程序为 HIMEM.SYS。
● EMS 内存 符合 EMS 规范管理的扩充内存区。其驱动程序为 EMM386.EXE 等。
分享到:
评论

相关推荐

    Java新手入门的30个基本概念

    掌握其中的基本概念对我们的学习无论是J2SE,J2EE,J2ME都是很重要的,J2SE是Java的基础,所以有必要对其中的基本概念做以归纳,以便大家在以后的学习过程中更好的理解java的精髓,在此我总结了30条基本的概念。...

    【JavaScript源代码】详细聊聊浏览器是如何看闭包的.docx

    只有把这一连串的知识点都理解透彻,实现一个概念的闭环,才可以真正理解它。今天打算换个角度来理解闭包,从内存分配与回收的角度阐述,希望能帮助你真正消化掉所看到的闭包知识,同时也希望本文是你看的最后一篇...

    彻底搞定C 指针 (完全版 ·修订增补版)

    第壹篇 变量的内存实质.................................................................................................................5 1.先来理解C语言中变量的实质....................................

    深入解析Windows操作系统中文.part2.rar

    彻底揭开Windows技术内幕! ■ Csdn、博客堂、博客园、《程序员》杂志鼎力推荐! 目录第1章 概念和工具 1 1.1 Windows操作系统的版本 1 1.2 基础概念和术语 3 Windows API 3 服务、函数和例程 5 进程、线程和作业 ...

    疯狂JAVA讲义

    6.6 更彻底的抽象:接口 192 6.6.1 接口的概念 192 6.6.2 接口的定义 193 6.6.3 接口的继承 195 6.6.4 使用接口 195 6.6.5 接口和抽象类 197 6.6.6 面向接口编程 198 6.7 内部类 202 6.7.1 非静态内部类 202...

    C++ Primer第四版【中文高清扫描版】.pdf

    本版对前一版进行了彻底的修订,内容经过了重新组织,更加入了C++ 先驱Barbara E. Moo在C++教学方面的真知灼见。既显著改善了可读性,又充分体现了C++语言的最新进展和当前的业界最佳实践。书中不但新增大量教学辅助...

    C#微软培训资料

    第六章 类 型 转 换 .48 6.1 隐式类型转换 .48 6.2 显式类型转换 .53 6.3 小 结 .56 第七章 表 达 式 .58 7.1 操 作 符 .58 7.2 算术操作符和算术表达式.59 7.3 赋值操作符和赋值表达式.64 7.4 关系...

    Virbox 开发者工具盒-软件加密工具

    而且此方案严格受加密锁硬件规格的限制,可扩展性极低,加密后的软件只能彻底依赖加密锁,无法实现业务变化(比如在线试用等)。 深思的“碎片代码执行”从根本上解决上述问题,利用成熟的代码提取技术,从软件中...

    Access+2000中文版高级编程

    8.7.3 用组的嵌套彻底解决问题 217 8.7.4 区分新旧记录 217 8.7.5 在交叉表查询中使用“总计”行 220 8.8 查询过程的结构 224 8.8.1 定义查询 224 8.8.2 编译 224 8.8.3 准备执行计划(优化) 225 8.9...

    Access 2000中文版高级编程(part1)

    8.7.3 用组的嵌套彻底解决问题 217 8.7.4 区分新旧记录 217 8.7.5 在交叉表查询中使用“总计”行 220 8.8 查询过程的结构 224 8.8.1 定义查询 224 8.8.2 编译 224 8.8.3 准备执行计划(优化) 225 8.9 Jet的...

    asp.net知识库

    理解C#中的委托[翻译] 利用委托机制处理.NET中的异常 与正则表达式相关的几个小工具 你真的了解.NET中的String吗? .NET中的方法及其调用(一) 如何判断ArrayList,Hashtable,SortedList 这类对象是否相等 帮助解决...

    自己动手写操作系统(含源代码).part2

    如果考虑到操作系统作为软硬件桥梁的特殊地位,那么它可能看上去比一般的软件系统更难理解,因为其核心部分往往包含许多直接针对CPU、内存和 I/O端口的操作,它们夹杂在一片代码汪洋之中,显得更加晦涩。 我们有许多...

    自己动手写操作系统(含源代码).part1

    如果考虑到操作系统作为软硬件桥梁的特殊地位,那么它可能看上去比一般的软件系统更难理解,因为其核心部分往往包含许多直接针对CPU、内存和 I/O端口的操作,它们夹杂在一片代码汪洋之中,显得更加晦涩。 我们有许多...

    网吧维护技术资料 合集

    44 网吧维护\资料\XP下FAT分区转NTFS分区.TXT 484 网吧维护\资料\XP中不能正常IE浏览不正常一例.TXT 10790 网吧维护\资料\XP优化.TXT 3638 网吧维护\资料\xp实用技巧\Win XP 键盘快捷键概述.txt 5851 网吧维护\资料\...

Global site tag (gtag.js) - Google Analytics