写点什么

动态重定位需要由什么来实现?

作者:InfoQ IT百科
  • 2022 年 4 月 24 日
  • 本文字数:635 字

    阅读完需:约 2 分钟

动态重定位需要由什么来实现?


操作系统可以使用一种称为重定位的技术来管理每个进程在内存中的存储位置。 操作系统核心模块通常存储在最高的内存地址中。 当程序编译并执行时,它从零地址位开始处理,最大地址等于总内存大小减去操作系统大小。 系统初始化进程被加载并分配一个连续的内存段。 进程的最小物理地址是基地址,该进程可以访问的最大物理地址是限制地址。


重定位技术有两种方法:静态重定位和动态重定位。

  • 静态重定位在静态重定位过程中,操作系统调整一个进程的内存地址,以反映它在内存中的起始位置。一旦一个进程在内存中被分配了一个起始位置,它就会在其分配的空间内执行。一旦静态重定位过程完成,操作系统直至其终止之前始终无法再次针对该进程进行重定位。

  • 动态重定位在动态重定位方法中,硬件将重定位寄存器(基值)添加到编译器生成的虚拟地址中。重定位寄存器允许转换为物理内存地址。硬件将此内存地址与限制寄存器(已分配部分中可用的最大值——此内存地址必须小于限制)进行比较。如果内存地址高于限制,处理器会进行地址陷阱并忽略物理地址。动态重定位的优点很多。 第一个也是最重要的优点是操作系统可以在必要时轻松移动进程。这带来了第二个优势:一个进程具备随着时间的推移而增长的能力,因为它可以很容易地重新定位到更大的内存块。动态重定位由硬件执行并且很简单——它需要两个特殊的寄存器、一个简单的加法和一个简单的比较运算。动态重定位也有缺点。 虽然相对便宜,但由于上面概述的附加操作,它确实一定程度上减慢了硬件速度。

用户头像

还未添加个人签名 2021.04.12 加入

还未添加个人简介

评论

发布
暂无评论
动态重定位需要由什么来实现?_InfoQ IT百科_InfoQ写作社区