王道操作系统笔记-内存(18)– 内存
逻辑地址和物理地址
物理地址:内存的真实地址。
逻辑地址:相对于进程的起始地址而言的地址。
举例:如果CPU把一个进程的起始地址分配在物理地址的100位。那么该进程如果有一条指令:往地址为79的储存单元中写入10。这条指令中的地址为逻辑地址。所以对应着物理地址的179位。
物理地址和逻辑地址的装换
绝对装入
绝对装入:在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码。装入程序按照装入模块中的地址,将程序和数据装入内存。
绝对装入仅适用于单道程序环境
静态重定位
静态重定位:又称可重定位装入。编译、链接后的装入模块的地址都是从0开始的,指令中使用的地址、数据存放的地址都是相对于起始地址而言的逻辑地址。可根据内存的当前情况,将装入模块装入到内存的适当位置。装入时对地址进行“重定位”,将逻辑地址变换为物理地址(地址变换是在装入时一次完成的)。
举例:如果装入的起始物理地址是100,则所有的地址相关参数都+100。比如把 往地址为79的储存单元中写入10 指令替换为 往地址为179的储存单元中写入10
静态重定位的特点是在一个作业装入内存时,必须分配其要求的全部内存空间,如果没有足够的内存,就不能装入该作业。作业一旦进入内存后,在运行期间就不能再移动,也不能再申请内存空间。
动态重定位
动态重定位:又称动态运行时装入。编译、链接后的装入模块的地址都是从0开始的。装入程序把装入模块装入内存后,并不会立即把逻辑地址转换为物理地址,而是把地址转换推迟到指令真正要执行时才进行。因此装入内存后所有的地址依然是逻辑地址。这种方式需要一个重定位寄存器的支持。
采用动态重定位的时候允许程序在内存中发生移动。