首页 王道操作系统笔记-进程(18)-- 内存
文章
取消

王道操作系统笔记-进程(18)-- 内存

王道操作系统笔记-内存(18)– 内存

逻辑地址和物理地址

物理地址:内存的真实地址。

逻辑地址:相对于进程的起始地址而言的地址。

举例:如果CPU把一个进程的起始地址分配在物理地址的100位。那么该进程如果有一条指令:往地址为79的储存单元中写入10。这条指令中的地址为逻辑地址。所以对应着物理地址的179位。

物理地址和逻辑地址的装换

绝对装入

绝对装入:在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码。装入程序按照装入模块中的地址,将程序和数据装入内存。

绝对装入仅适用于单道程序环境

静态重定位

静态重定位:又称可重定位装入。编译、链接后的装入模块的地址都是从0开始的,指令中使用的地址、数据存放的地址都是相对于起始地址而言的逻辑地址。可根据内存的当前情况,将装入模块装入到内存的适当位置。装入时对地址进行“重定位”,将逻辑地址变换为物理地址(地址变换是在装入时一次完成的)。

举例:如果装入的起始物理地址是100,则所有的地址相关参数都+100。比如把 往地址为79的储存单元中写入10 指令替换为 往地址为179的储存单元中写入10

静态重定位的特点是在一个作业装入内存时,必须分配其要求的全部内存空间,如果没有足够的内存,就不能装入该作业。作业一旦进入内存后,在运行期间就不能再移动,也不能再申请内存空间。

动态重定位

动态重定位:又称动态运行时装入。编译、链接后的装入模块的地址都是从0开始的。装入程序把装入模块装入内存后,并不会立即把逻辑地址转换为物理地址,而是把地址转换推迟到指令真正要执行时才进行。因此装入内存后所有的地址依然是逻辑地址。这种方式需要一个重定位寄存器的支持。

采用动态重定位的时候允许程序在内存中发生移动。

QQ截图20220602095001

QQ截图20220720035230

从写程序到程序运行

QQ截图20220602095116

链接的三种方式

QQ截图20220602095635

本文由作者按照 CC BY 4.0 进行授权