地址重定位是操作系统中内存管理的关键环节,核心是将程序编译、链接后形成的**逻辑地址**(相对地址,从0开始)转换为程序在主存中实际存放的**物理地址**(绝对地址)

3、地址重定位

地址重定位是操作系统中内存管理的关键环节,核心是将程序编译、链接后形成的逻辑地址(相对地址,从0开始)转换为程序在主存中实际存放的物理地址(绝对地址)。
根据重定位发生的时机,分为两类:

  • 静态地址重定位:在程序装入主存时一次性完成重定位,之后程序运行过程中地址不再改变。实现简单,但程序装入后不能移动,灵活性差。
  • 动态地址重定位:在程序执行过程中,每次访问内存时由硬件(如重定位寄存器)实时完成重定位。程序可以在主存中移动,灵活性高,是现代操作系统常用的方式。

4.3.2 分区存储管理

分区存储管理是早期多道程序设计环境下的内存管理方式,核心是将主存用户区划分为若干连续区域,每个区域分配给一个作业。

分区类型
  • 固定分区:主存分区大小和数量在系统初始化时确定,之后不再改变。优点是实现简单,缺点是容易产生“内碎片”(分区内未被利用的空间),内存利用率低。
  • 可变分区:根据作业实际需求动态划分分区,分区大小和数量不固定。优点是减少内碎片,缺点是会产生“外碎片”(多个小空闲分区无法满足大作业需求)。
  • 可重定位分区:通过“紧凑”操作(将所有已分配分区移动到主存一端,合并外碎片为一个大空闲分区)解决外碎片问题,但紧凑过程会消耗系统时间。
分区保护

为防止作业越界访问其他分区,需采取保护机制:

  • 上界/下界寄存器保护
    上界寄存器存作业的起始物理地址,下界寄存器存作业的结束物理地址。访问地址需满足:上界寄存器 ≤ 物理地址 ≤ 下界寄存器,否则视为越界。
  • 基址/限长寄存器保护
    基址寄存器存作业的起始物理地址,限长寄存器存作业的总长度。访问地址需满足:基址寄存器 ≤ 物理地址 < 基址寄存器 + 限长寄存器,更直观地体现了作业的地址范围。

4.3.3 分页存储管理

分区管理的最大局限是要求作业装入连续的内存空间,当内存存在多个不连续的小空闲分区时,无法满足大作业需求(即使总空闲空间足够)。分页存储管理通过“离散分配”解决了这一问题。

纯分页存储管理
  1. 分页原理

    • 进程的逻辑地址空间划分为大小相等的块,称为页(Page),每页大小固定(如4KB、8KB)。
    • 主存的物理空间划分为与页大小相同的块,称为物理块(Block/Page Frame)
    • 作业的各页可装入主存中不连续的物理块,通过“页表”记录页与物理块的对应关系。
  2. 地址结构
    逻辑地址由两部分组成:页号(P) + 页内偏移量(W)

    • 页内偏移量的位数决定了每页的大小:若偏移量为12位(如你提供的32位地址中0~11位),则每页大小为 (2^{12} = 4KB)。
    • 页号的位数决定了进程最多可拥有的页数:32位地址中12~31位为页号(共20位),则最大页数为 (2^{20} = 1MB),进程最大地址空间为 (1MB \times 4KB = 4GB)。
  3. 地址转换过程
    逻辑地址(P,W)→ 查页表找到页P对应的物理块号B → 物理地址 = B × 页大小 + W。

补充说明

分页管理的优点是解决了内存连续分配的限制,提高了内存利用率,且无外碎片(仅可能有页内碎片,大小不超过一页)。但也存在页表占用内存、地址转换需硬件支持等问题。后续还会衍生出“请求分页存储管理”(结合虚拟内存技术,允许作业部分装入内存),进一步提升内存使用效率。
下面把上面这段教材原文“翻译”成更容易理解、便于记忆的要点,并补充一些考试中常见的易错点与例题,帮助你在 10 分钟内完全掌握。

────────────────
一、地址重定位(Relocation)

  1. 定义:把程序里写的“逻辑地址”翻译成真正放在内存里的“物理地址”。
  2. 两种做法
    • 静态重定位:程序装入内存时一次性算好,之后不再改。
    • 动态重定位:程序运行时每次访问内存都靠硬件(MMU)即时转换,支持紧凑、换入换出。

────────────────
二、分区存储管理(Partition)

  1. 核心思想:把主存用户区切成若干“块”,一块给一个作业。

  2. 三种切法
    ① 固定分区:块大小事先定好,碎片大。
    ② 可变分区:按作业实际大小切,碎片小但需“紧凑”。
    ③ 可重定位分区:可变分区+动态重定位,可把作业搬家再紧凑,碎片最少。

  3. 分区保护(记住两对寄存器即可)
    • 上界/下界寄存器:物理地址 ∈ [上界, 下界)
    • 基址/限长寄存器:物理地址 ∈ [基址, 基址+限长)

易错点:

  • 上界/下界用的是“结束地址”,基址/限长用的是“长度”。
  • 两个都是“左闭右开”区间,注意符号 ≤ 与 < 的区别。

────────────────
三、分页存储管理(Paging)

  1. 为什么引入:分区要求“整块连续”太浪费,分页把作业拆成固定大小的小片(页),哪里有空框就放哪里,碎片只在最后一页内部出现(平均浪费半页)。

  2. 纯分页(无快表,无分段)
    • 逻辑地址 = 页号 P + 页内偏移 W
    • 物理地址 = 页框号 f + 页内偏移 W(f 由页表查出)

  3. 地址结构举例(教材原图)
    32 位地址:
    ┌────────── 20 位 ──────────┐┌── 12 位 ──┐
    │ 页号 P ││ 偏移 W │
    └───────────────────────────────┘└───────────┘
    每页大小 = 2^12 = 4 KB
    最大页数 = 2^20 = 1 M 页 → 最大地址空间 = 1 M × 4 KB = 4 GB

易错点:

  • 页大小 = 2^偏移位宽,别算反。
  • 页号位数决定“逻辑页数”,不是物理内存大小。

────────────────
一句话总结
分区管理:整块给作业,碎片大;
分页管理:拆成固定小页,碎片小,逻辑页→物理框靠页表动态重定位。

返回图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bol5261

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值