关于存储器映射、存储器重映射、内存映射、地址映射、地址转换等计算机专业名词详解

      计算机技术源于西方,而西方乃至当今世界最通用的语言是英语,所以很多专业名词也都是英语词汇,而中国人想要跟上时代学习计算机、使用计算机就势必要向西方人学习、学习英语、学习英语技术资料、翻译英语技术资料,可是经过学习、翻译后的结果就是很多英文专业名词被翻译成不同的中文意思在不同的资料、教材上出现(如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)来完成。地址转换有两种方法:静态重定位、动态重定位。

     小结:由于不同的翻译造成意思混淆或者不同的地方使用相同的专业词汇,使读者不能明白一些专业词汇到底什么意思,增加了学习的难度,所以在这里写下这篇文章,表达自己的拙见,希望大家多多指点,另外也希望能够统一专业词汇的意思,使大家学习起来不再这么迷惑。

时间: 2024-09-23 20:28:03

关于存储器映射、存储器重映射、内存映射、地址映射、地址转换等计算机专业名词详解的相关文章

深入分析:用1K内存实现高效I/O的RandomAccessFile类的详解_java

主体:目前最流行的J2SDK版本是1.3系列.使用该版本的开发人员需文件随机存取,就得使用RandomAccessFile类.其I/O性能较之其它常用开发语言的同类性能差距甚远,严重影响程序的运行效率.开发人员迫切需要提高效率,下面分析RandomAccessFile等文件类的源代码,找出其中的症结所在,并加以改进优化,创建一个"性/价比"俱佳的随机文件访问类BufferedRandomAccessFile.在改进之前先做一个基本测试:逐字节COPY一个12兆的文件(这里牵涉到读和写)

存储那些事儿(五):BTRFS文件系统之Btree结构详解

   Btree数据结构可以说是BTRFS文件系统的基础.它提供了一个通用的方式去存储不同的数据类型.它仅仅存储3个数据类型:key, item和block header.    btrfs_header的定义如下: struct btrfs_header { u8 csum[32]; u8 fsid[16]; __le64 blocknr; __le64 flags; u8 chunk_tree_uid[16]; __le64 generation; __le64 owner; __le32

深入理解计算机系统-之-数值存储(三)-- 原码、反码、补码和移码详解

原码 如果机器字长为n,那么一个数的原码就是用一个n位的二进制数,其中最高位为符号位:正数为0,负数为1.剩下的n-1位表示概数的绝对值. PS:正数的原.反.补码都一样:0的原码跟反码都有两个,因为这里0被分为+0和-0. 原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制: [+1]原 = 0000 0001 [-1]原 = 1000 0001 例如: X=+101011 , [X]原= 00101011 X=-101011 , [X]原= 1010

c++-求教!通过内存映射,实现生成的数组存储到文件中,显示出来头100个数?

问题描述 求教!通过内存映射,实现生成的数组存储到文件中,显示出来头100个数? 我目前就了解个大概,现在我不明白const DWORD mmf_size = 512*1024;//?这个地方不懂 ,这个原来的代码部分,我拿别人的代码改的,增加了自己的double的动态数组SigNRead,这个怎么弄 我就想实现,通过内存映射 实现写入 读取 double数组 数组有 1列 90000行个double数组成. #include #include #include #include #define

Linux中共享内存及内存映射技术研究

Linux给我们提供了丰富的内部进程通信机制,包括共享内存.内存映射文件.先入先出(FIFO).接口(sockets)以及多种用于同步的标识.在本文中,我们主要讨论一下共享内存和内存映射文件技术. 一般来说,内部进程通信(interprocess communication)也就是IPC,是指两个或两个以上进程以及两个或者两个以上线程之间进行通信联系.每个IPC机制都有不同的强项或者弱点,不过没有一个IPC机制包含内建的同步方法.因此程序员不但需要自己在程序中实现同步,而且还需要为了利用IPC机

Java中用内存映射处理大文件的实现代码_java

在处理大文件时,如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 来进行频繁的读写操作,都将导致进程因频繁读写外存而降低速度.如下为一个对比实验. package test; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOExc

C++中静态存储区与栈以及堆的区别详解_C 语言

学习c++如果不了解内存分配是一件非常可悲的事情.而且,可以这样讲,一个C++程序员无法掌握内存.无法了解内存,是不能够成为一个合格的C++程序员的.一.内存基本构成可编程内存在基本上分为这样的几大部分:静态存储区.堆区和栈区.他们的功能不同,对他们使用方式也就不同.静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.它主要存放静态数据.全局数据和常量.栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放.栈内存分配运算

详解Java中synchronized关键字的死锁和内存占用问题_java

先看一段synchronized 的详解: synchronized 是 java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行.另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块. 二.然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以

VC++中使用内存映射文件处理大文件

摘要:本文给出了一种方便实用的解决大文件的读取.存储等处理的方法,并结合相关程序代码对具体的实现过程进行了介绍. 引言 文件操作是应用程序最为基本的功能之一,Win32 API和MFC均提供有支持文件处理的函数和类,常用的有Win32 API的CreateFile().WriteFile().ReadFile()和MFC提供的CFile类等.一般来说,以上这些函数可以满足大多数场合的要求,但是对于某些特殊应用领域所需要的动辄几十GB.几百GB.乃至几TB的海量存储,再以通常的文件处理方法进行处理