大家好,在我之前的博文 存储与寻址部分曾经给大家讲过寻址的一些知识,当时介绍过逻辑地址与物理地址的区别,今天给大家讲讲两者间是如何转换的。
先复习几个概念,讲讲逻辑地址和物理地址
逻辑地址(相对地址或虚拟地址):用户程序经过编译、汇编后形成的目标代码,目标代码通常采取相对地址的形式,其首地址为0,其余地址都相对于首地址进程编址,不能直接用逻辑地址在内存中读取数据
物理地址(绝对地址、实地址):内存中存储单元的地址,可以直接寻址
在实际的情况中,操作系统给进程分配的地址不是实际的物理地址,往往是逻辑地址(也就是相对于进程在内存中初始位置的地址),当进程没有进入CPU中运行的时候,进程的物理地址是无法计算出来的(不知道进程将要加载到内存中的哪一块),所以需要借助地址重定位,实现逻辑地址到物理地址的转换。下面给出地址重定位的定义
地址重定位(Mapping、Translation):为了保证CPU执行指令可以正确的访问内存单元,需要将用户程序中的逻辑地址转换为运行时可由机器直接寻址的物理地址,这一过程称为地址重定位。
地址重定位的实现机制一般有两种:
1、静态重定位
当用户程序加载到内存时,一次性实现逻辑地址到物理地址的转换,一般可以由软件完成
2、动态重定位
在进程执行的过程中,在逐条指令执行时完成地址转换,需要硬件部件的支持
下面给一个实际中常用的动态重定位的例子
如上图所示,在系统中给定一个重定位寄存器(内存管理单元),用于存放进程实际的初始地址,当进程加载进CPU以后,CPU将逻辑地址送入内存管理单元中,计算出物理地址并去物理内存中定位相关的数据。