一、分区存储管理相关内容
循环首次适应算法(Next Fit)
- 与首次适应算法(First Fit)的区别:首次适应算法每次从空闲区链表的起始位置开始查找第一个能满足需求的空闲分区;而循环首次适应算法从上一次分配结束的位置(即“刚分配的空白区”之后)开始查找,找到满足要求的空闲区进行分配。
- 优点:减少查找时间,避免频繁使用低地址部分的空闲区,使得内存空间利用更均衡。
- 缺点:可能错过前面较小但可用的空闲区,导致外碎片问题加剧。
碎片问题及解决
- 外碎片:在可变分区管理中,随着进程的分配与释放,会产生大量不连续的小空闲分区。虽然总空闲空间足够,但由于不连续,无法满足较大内存请求。
- 解决方法——拼接(Compact):将所有已分配的分区向内存一端移动,使分散的空闲区合并成一个大的连续空闲区。此过程称为“紧凑”或“紧缩”。
可重定位分区
- 作用:通过移动已分配的作业实现内存紧凑,从而解决外碎片问题。
- 实现方式:采用“动态重定位”技术,在程序运行时由硬件(如重定位寄存器)支持地址变换。
- 触发时机:通常在系统发现无足够连续空间满足新请求时触发紧凑操作。
- 注意事项:移动后必须更新程序的基址信息,并完成地址重定位,否则程序无法正确访问数据。
二、分区保护方式
为防止进程非法访问其他进程的内存空间,操作系统提供以下两种常见硬件保护机制:
-
上界/下界寄存器保护
- 上界寄存器:存放进程的最低物理地址(起始地址)。
- 下界寄存器:存放进程的最高物理地址(结束地址)。
- 访问检查:CPU生成的每个物理地址必须满足:
上界 ≤ 物理地址 ≤ 下界 - 若不满足,则产生越界中断。
-
基址/限长寄存器保护
- 基址寄存器:存放进程在内存中的起始地址。
- 限长寄存器:存放进程所占内存区域的长度(大小)。
- 访问检查:每个逻辑地址经重定位后形成的物理地址需满足:
基址 ≤ 物理地址 < 基址 + 限长 - 此方式更灵活且易于实现边界检查。
⚠️ 两者均为硬件支持的内存保护机制,结合重定位功能可有效隔离进程地址空间。
三、分页存储管理(纯分页)
引入背景
传统分区管理要求进程占用连续内存空间,导致外碎片严重,内存利用率低。为提高内存利用率并简化分配,引入分页存储管理。
分页原理
- 将用户进程的逻辑地址空间划分为固定大小的“页”(Page),如每页4KB。
- 将物理内存也划分为相同大小的“块”(Frame 或 页框),块是分配的基本单位。
- 进程运行时,其各页可分散装入不同物理块中,无需连续。
- 通过页表建立逻辑页号到物理块号的映射关系。
- 地址转换由MMU(内存管理单元) 自动完成:将逻辑地址拆分为页号和页内偏移,查页表得块号,组合成物理地址。
✅ 优势:消除外部碎片(仅可能存在页内碎片),内存利用率高,分配简单。
❌ 缺点:存在页内碎片(最后一页未用满)、需要额外空间维护页表。
首次适应算法(First Fit)与最佳适应算法(Best Fit)是两种常用的动态分区分配策略,它们在内存分配逻辑和性能表现上有显著区别:
1. 分配策略不同
-
首次适应算法(First Fit)
- 从空闲分区链表的起始位置开始查找,选择第一个满足需求大小的空闲分区进行分配。
- 一旦找到合适的分区就立即分配,不再继续搜索。
-
最佳适应算法(Best Fit)
- 遍历整个空闲分区链表,找出能满足请求的最小空闲分区(即“最接近”所需大小的分区)进行分配。
- 目标是使分配后的剩余碎片尽可能小,减少空间浪费。
2. 碎片影响不同
-
首次适应算法
- 倾向于使用低地址部分的大块空闲区,可能导致高地址留下较多小碎片。
- 但保留了大块空闲区用于后续大内存请求,有利于降低外碎片的整体增长速度。
- 优点:实现简单、速度快,适合频繁分配/释放场景。
-
最佳适应算法
- 虽然每次尽量“节省”空间,但往往会产生大量极小且难以利用的外碎片(因为总是切割出刚好够用的部分)。
- 长期运行后会导致大量零散小空闲区,反而降低内存利用率。
- 缺点:查找开销大(需遍历全部),碎片问题更严重。
3. 性能对比总结
| 对比项 | 首次适应算法(First Fit) | 最佳适应算法(Best Fit) |
|---|---|---|
| 查找速度 | 快(找到即停) | 慢(必须遍历全部) |
| 空间利用率 | 较高 | 初期高,后期差 |
| 外碎片情况 | 相对较少 | 易产生大量微小碎片 |
| 实现复杂度 | 简单 | 较复杂 |
✅ 示例说明
假设内存中有以下空闲分区(按地址顺序):
-
10KB, 20KB, 15KB, 30KB
请求分配 12KB 内存: -
首次适应:选择第一个 ≥12KB 的分区 → 使用 10KB?不行 → 使用 20KB(第一个满足的)。
-
最佳适应:比较所有满足条件的 → 可选 15KB、20KB、30KB → 选择最小的 15KB。
⚠️ 尽管 Best Fit 名为“最佳”,但在实际系统中通常不如 First Fit 或 Next Fit 表现好,因其碎片化严重且效率低。


1008

被折叠的 条评论
为什么被折叠?



