一、存储器映射、内存映射、地址映射
在开始之前首先大家要明白映射的意思,映射就是一一对应的意思,重映射就是重新分配这种一一对应的关系。
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)来完成。地址转换有两种方法:静态重定位、动态重定位。
小结:由于不同的翻译造成意思混淆或者不同的地方使用相同的专业词汇,使读者不能明白一些专业词汇到底什么意思,增加了学习的难度,所以在这里写下这篇文章,表达自己的拙见,希望大家多多指点,另外也希望能够统一专业词汇的意思,使大家学习起来不再这么迷惑。