目录
①大小相等的分区(Equal-size partitions)
②大小不等的分区(Unequal-size partitions)
2.2 动态分区(Dynamic Partitioning)
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内
三种放置算法:
- Best-fit algorithm(最佳适配):选择大小最接近的,但性能最差,可能产生小碎片
- First-fit algorithm(首次适配):找到第一个能放下的块,性能最佳(需重新排序)
- Next-fit(邻近适配):从上一次放置位置向后找第一个能放下的,性能次佳
2.3 Buddy System伙伴系统
将整个空间视为一个大小为的块,若请求分配的大小为
,则分配整个空间,否则将整个块分割为两个大小相等的伙伴,持续进行上述操作,直到生成
的最小块
2.4 重定位Relocation
定义:从载入的逻辑地址定位到物理地址(绝对地址)
三种地址:
- 逻辑地址(Logical Address):是与当前数据在物理内存中分配无关的地址。与操作系统无关,由软件生成,进程中的所有内存访问都是逻辑地址
- 相对地址(Relative Address):相对于某个已知点的地址
- 物理地址(Physical Address):在主存中的绝对地址/实际地址
重定位的硬件支持:
基址寄存器(Base register):记录进程的起始地址
界限寄存器(Bounds register):记录进程的结束地址
基址+相对地址=绝对地址
重定位过程:将绝对地址与界限寄存器中的地址作比较,如果绝对地址不在界限寄存器中,则产生中断;若匹配成果,则重定位成功。
3.分页(Paging)
基础知识:
- 内存分区分为等大小的块叫帧(frame),进程分为等大小的块叫页(page)
- 页的大小=帧的大小
- 逻辑地址=页号+偏移量(offset)
- 操作系统对每个进程维护页表,在每页中包含帧位置
- 将页号转换为帧号,即完成从逻辑地址到物理地址的转换(1页1k)
4.分段(Segmentation)
基础知识:
- 代码和数据可被分在不同段中,每个段的大小不一定相同
- 所有代码段不一定有相同长度,但有最大长度
- 逻辑地址=段号+偏移量(偏移量小于段表长度才有效)
- 物理地址=基址+偏移量
分区、分页、分段大比较:
- 分页类似于固定分区,因此也可能产生内部碎片
- 分段类似于动态分区