[OS] 地址重定位

在操作系统中我们知道地址生成主要有以下3个阶段:
这里写图片描述

  • 编译期: 对于各个目标模块儿生成一张符号表记录各个符号名及在本模块中的相对地址
  • 链接期: 对于各个模块解析内部和外部符号表,生成可重定程序,及将其中涉及地址引用的地方转换为数值地址,存放于磁盘中,可在装入主存或执行时重定位,生成物理地址(实际的主存中的地址),由于他在内存中的地址不可知,所以链接器生成的地址通常是一个相对于某个基地址(通常是0)的地址,称为逻辑地址
  • 装入期和执行期: 这里生成的地址我们称为地址重定位,也就是将逻辑地址转换成实际的物理地址的过程。

静态重定位

静态重定位是在程序从外存装入主存是做的工作。即在装入时根据装入的地方将程序的逻辑地址转化为物理地址。装入后就不可搬动,需要连续的地址空间分配。

优点:

  1. 无需硬件支持

缺点:

  1. 要求地址连续
  2. 装入后不可搬动

动态地址重定位

程序可以装入主存任何位置,地址转换在 执行时, 即执行某条指令是做地址转换工作。这需要系统有重定位寄存器不过由于任何时刻CPU仅仅执行一条指令,故并不需要每个进程都有一个重定位寄存器。

优点

  1. 实现简单,装入灵活
  2. 主存可不连续,装入后可搬动

缺点

需要硬件支持代价昂贵

reference

猜你喜欢

转载自blog.csdn.net/dylan_frank/article/details/80815683
os
今日推荐