物理存储器和存储地址空间是两个不同的概念。但是由于这两者有十分密切的关系,而且两者都用B、KB、MB、GB来度量其容量大小,因此容易产生认识上的混淆。初学者弄清这两个不同的概念,有助于进一步认识主存储器和用好主存储器。
物理存储器是指实际存在的具体存储器芯片。如主板上装插的主存条和装载有系统的BIOS的ROM芯片,显示卡上的显示RAM芯片和装载显示BIOS的ROM芯片,以及各种适配卡上的RAM芯片和ROM芯片都是物理存储器。
存储地址空间是指对存储器编码(编码地址)的范围。所谓编码就是对每一个物理存储单元(一个字节)分配一个号码,通常叫作“编址”。分配一个号码给一个存储单元的目的是为了便于找到它,完成数据的读写,这就是所谓的“寻址”(所以,有人也把地址空间称为寻址空间)。
地址空间的大小和物理存储器的大小并不一定相等。举个例子来说明这个问题:某层楼共有17个房间,其编号为801~817。这17个房间是物理的,而其地址空间采用了三位编码,其范围是800~899共100个地址,可见地址空间是大于实际房间数量的。
对于386以上档次的微机,其地址总线为32位,因此地址空间可达2的23次方,即4GB。但实际上我们所配置的物理存储器通常只有1MB、2MB、4MB、8MB、16MB、32MB等,远小于地址空间所允许的范围。
计算机技术源于西方,而西方乃至当今世界最通用的语言是英语,所以很多专业名词也都是英语词汇,而中国人想要跟上时代学习计算机、使用计算机就势必要向西方人学习、学习英语、学习英语技术资料、翻译英语技术资料,可是经过学习、翻译后的结果就是很多英文专业名词被翻译成不同的中文意思在不同的资料、教材上出现(如Memory Map,被翻译成存储器映射、内存映射、地址映射等等),造成大家在看这些资料、教材的时候不知所措,一片茫然,到底是什么意思?所以今天我就根据自己的见解把上面这几个容易产生混淆的专业词汇集中介绍一下。
一、存储器映射、内存映射、地址映射
在开始之前首先大家要明白映射的意思,映射就是一一对应的意思,重映射就是重新分配这种一一对应的关系。
Memory Map(可以被翻译为存储器映射、内存映射有时也叫地址映射(Address Map))
计算机最重要的功能单元之一是Memory,memory是众多存储单元的集合,为了使CPU准确地找到存储有某个信息的存储单元,必须为这些单元分配一个相互区别的编号,这个编号就是地址编码。在嵌入式处理器内,集成了多种类型的Memory,通常我们称同一类型的Memory为一个Memory Block,一般情况下,处理器设计者会为每一个memory block分配一个数值连续、数目与其存储单元数相等、以16进制表示的自然数集合作为该memory block的地址编码。这种自然数集合与memory block的对应关系就是Memory Map(存储器映射、内存映射),有时也叫地址映射(Address Map)。在这里需要强调的是memory Map是一个逻辑概念,是在计算机系统在(上电)复位后才建立起来的。Memory Map相当于这样一个函数:函数的输入量是地址编码,输出量是被寻址单元中的数据。当计算机系统掉电后或复位时,这个函数就不复存在,只剩下实现这个函数的物理基础——电路连接。也可以这样认为:Memory Map是计算机系统上电(复位)时的预备动作,是一个将CPU所拥有的地址编码资源向系统内各个物理存储器块分配的自动过程。
二、存储器重映射、内存重映射、地址重映射
Memory Remap(存储器重映射、内存重映射、地址重映射)
Memory Remap是与计算机异常(中断)处理机制机紧密相关的。完整的计算机系统必须具备异常(中断)处理能力。当异常(中断)产生时,CPU在硬件驱动机制下跳转到预先设定的存储器单元中,取出相应的异常处理程序的入口地址,并根据这个地址进入异常处理程序。这个保存有异常程序入口地址的存储器单元就是通常所说的“异常入口”。CPU设计人员为了简化芯片设计,一般将所有的异常入口集中起来置于非易失性存储器中,并在系统上电时映射到一个固定的连续的地址空间上。位于这个地址空间上的异常入口集合就是“异常向量表”。
Memory Remap是对此前已确立的Memory Map的再次修改,从本质上讲,两者是一样的,都是将地址编码资源分配给存储器块,只不过二者产生的时间不同。
Remap技术的引入是为了提高系统对异常的实时响应能力,也就是解决低速非易失性存储器与高速CPU之间通信的问题。
完整的Memory Remap过程通常始于bootload过程,具体的执行过程为:bootload将非易失性存储器中的异常向量复制到高速易失性存储器块的一端,然后执行Memory Remap命令,将位于高速易失性存储器中的异常向量块映射到异常向量表地址空间上,此后,系统若产生异常,CPU将从已映射到异常向量表地址空间的高速易失性存储器中读取向量。典型的boot、Memory Map、Memory Remap时间顺序应该是:Memory Map——boot——Memory Remap。
三、操作系统中的地址转换(有些地方也称地址映射、内存映射)
1、物理地址
内存中的每个单元都有一个唯一的编号,这种编号成为内存地址(也就是物理地址、绝对地址),内存地址的集合称为内存空间(或物理地址空间)。
2、逻辑地址
源程序经过汇编或编译后形成目标程序,目标程序中的地址称为逻辑地址(相对地址),并且每个目标程序都是从0地址开始编址的。
3、地址转换
将用户程序中的指令或数据的逻辑地址转换为存储空间中物理地址的工作称为地址转换或重定位(有些地方称做地址映射、内存映射)。这个过程一般由内存管理单元(MMU)来完成。地址转换有两种方法:静态重定位、动态重定位。
小结:由于不同的翻译造成意思混淆或者不同的地方使用相同的专业词汇,使读者不能明白一些专业词汇到底什么意思,增加了学习的难度,所以在这里写下这篇文章,表达自己的拙见,希望大家多多指点,另外也希望能够统一专业词汇的意思,使大家学习起来不再这么迷惑。参考自:http://blog.csdn.net/songjinshi/article/details/6760708
http://www.cnblogs.com/mydomain/archive/2011/01/07/1930404.html