操作系统(Operating System)知识点复习——第七章 内存管理

本文详细探讨了内存管理的关键概念,包括内存分区(固定和动态)、BuddySystem伙伴系统、重定位过程,以及分页和分段的区别。重点介绍了如何通过逻辑地址和物理地址转换满足进程地址需求,同时讨论了内存碎片的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

0.前言

1.内存管理的要求

2.内存分区(Memory Partitioning)

2.1 固定分区(Fixed Partitioning)

①大小相等的分区(Equal-size partitions)

②大小不等的分区(Unequal-size partitions)

2.2 动态分区(Dynamic Partitioning)

2.3 Buddy System伙伴系统

2.4 重定位Relocation

3.分页Paging

4.分段(Segmentation)


0.前言

本系列文章旨在记录操作系统的知识点,可用于期末复习,笔者理解尚浅,文中不正之处静待批正。加粗高亮部分为重点。

1.内存管理的要求

内存的层次结构:寄存器--1级缓存--2级缓存--主存--本地硬盘--远程二级存储

进程的地址需求

三大需求:

  • 重定位(relocation)
    • 与程序员无关(程序员不知道程序在内存的哪一块执行)
    • 每次载入位置允许不同
    • 操作系统MMU(内存管理单元,位于CPU)共同操作从逻辑地址到物理内存地址的转换
  • 保护(protection)
    • 进程不能在未授权的情况下访问其他进程的数据,不能跳转到其他进程的代码区域执行指令
    • 正常情况下,进程不能访问操作系统的任何部分,无论是程序还是数据
    • 运行时检测绝对地址
    • 内存保护由处理器来满足(不是OS)
  • 共享(sharing)
    • 允许多个进程访问同一部分的内存

2.内存分区(Memory Partitioning)

2.1 固定分区(Fixed Partitioning)

①大小相等的分区(Equal-size partitions)

优点:不用考虑放在哪个分区,因为大小都一样

缺点:程序可能会产生覆盖(overlay);程序如果没有占满整个分区,会产生内部碎片(internal fragmentation)

覆盖:用于解决进程大小超过物理内存大小(同一进程间不同代码块的操作)

一般来说Main和管理程序常驻

交换(swap):针对不同进程

②大小不等的分区(Unequal-size partitions)

定义:将每个进程分配到适合它的最小分区

可能会用到放置算法,对每个分区维护一个队列

固定分区优缺点:

优点:实现简单,无外部碎片

缺点:分区的数量会限制活跃的进程数;小型工作将无法有效利用分区

2.2 动态分区(Dynamic Partitioning)

特点:

  • 分区可变长度和数量
  • 进程需要多少内存就分配多少
  • 可能会产生外部碎片(external fragmentation),所以必须压缩(compaction)移动(shift)进程,使他们连续分布剩余的内存放在同一个block

三种放置算法

  1. Best-fit algorithm(最佳适配):选择大小最接近的,但性能最差,可能产生小碎片
  2. First-fit algorithm(首次适配):找到第一个能放下的块,性能最佳(需重新排序)
  3. Next-fit(邻近适配):从上一次放置位置向后第一个能放下的,性能次佳

2.3 Buddy System伙伴系统

将整个空间视为一个大小为2^u的块,若请求分配的大小为2^{u-1}<S\leqslant 2^u,则分配整个空间,否则将整个块分割为两个大小相等的伙伴,持续进行上述操作,直到生成\geqslant S的最小块

2.4 重定位Relocation

定义:从载入的逻辑地址定位到物理地址(绝对地址)

三种地址:

  • 逻辑地址(Logical Address):是与当前数据在物理内存中分配无关的地址与操作系统无关,由软件生成,进程中的所有内存访问都是逻辑地址
  • 相对地址(Relative Address):相对于某个已知点的地址
  • 物理地址(Physical Address):在主存中的绝对地址/实际地址

重定位的硬件支持:

基址寄存器(Base register):记录进程的起始地址

界限寄存器(Bounds register):记录进程的结束地址

基址+相对地址=绝对地址

重定位过程:将绝对地址与界限寄存器中的地址作比较,如果绝对地址不在界限寄存器中,则产生中断;若匹配成果,则重定位成功。

3.分页(Paging)

基础知识:

  • 内存分区分为等大小的块叫帧(frame)进程分为等大小的块叫页(page)
  • 页的大小=帧的大小
  • 逻辑地址=页号+偏移量(offset)
  • 操作系统对每个进程维护页表,在每页中包含帧位置
  • 页号转换为帧号,即完成从逻辑地址到物理地址的转换(1页1k)

4.分段(Segmentation)

基础知识:

  • 代码和数据可被分在不同段中,每个段的大小不一定相同
  • 所有代码段不一定有相同长度,但有最大长度
  • 逻辑地址=段号+偏移量(偏移量小于段表长度才有效)
  • 物理地址=基址+偏移量

分区、分页、分段大比较

  • 分页类似于固定分区,因此也可能产生内部碎片
  • 分段类似于动态分区
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

五倍子的代码空间

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

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

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

打赏作者

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

抵扣说明:

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

余额充值