4.3 连续分配方式总结
本文最后更新于:2025年10月27日 上午
一、核心定义与特点
连续分配方式是早期操作系统中主流的内存管理方案,其核心特征是为每个用户程序分配连续的物理内存空间,程序加载后在内存中以"整块"形式存在,无需离散地址映射。该方式的优势是实现简单、地址变换直接,但缺点是易产生内存碎片,内存利用率受分配策略影响较大。
二、四种核心分配方法
根据内存分区的划分时机和大小灵活性,连续分配分为四种具体方法:
1. 单一连续分配(Single Continuous Allocation)
(1)核心逻辑
- 适用场景:仅支持单用户、单任务的操作系统(如早期DOS系统),无多进程并发需求
- 内存划分:将内存分为两部分:
- 系统区:位于内存低地址区域,存放操作系统内核代码和数据
- 用户区:占据内存剩余空间,整个区域仅分配给当前运行的一个用户程序
(2)优缺点
- ✅ 优点:实现最简单,无需复杂的分区管理数据结构
- ❌ 缺点:无法支持多道程序并发,内存利用率极低
2. 固定分区分配(Fixed Partition Allocation)
(1)核心逻辑
- 适用场景:支持多道程序并发的早期操作系统
- 内存划分:
- 系统初始化时,将内存划分为若干个固定大小的分区
- 分区大小可"相等"或"不等"
- 通过分区说明表管理分区状态
(2)内存分配示例
| 分区号 | 大小(KB) | 起址(KB) | 状态 | 占用进程 |
|---|---|---|---|---|
| 1 | 12 | 24 | 已分配 | 作业A |
| 2 | 24 | 36 | 已分配 | 作业B |
| 3 | 30 | 60 | 未分配 | - |
| 4 | 35 | 90 | 已分配 | 作业C |
| 5 | 40 | 125 | 未分配 | - |
(3)优缺点
- ✅ 优点:支持多道程序并发,实现简单
- ❌ 缺点:内碎片问题严重,灵活性差
3. 动态分区分配(Dynamic Partition Allocation)
(1)核心逻辑
- 适用场景:多道程序环境,进程内存需求差异大且动态变化
- 内存划分:根据进程的实际内存需求,动态划分出大小匹配的连续分区
(2)五种分区分配算法对比
| 算法名称 | 核心逻辑 | 空闲分区排序 | 优点 | 缺点 |
|---|---|---|---|---|
| 首次适应算法(FF) | 从头部开始查找,找到第一个能容纳进程的分区 | 按首址递增 | 优先利用低地址空闲区 | 低地址区易碎片化 |
| 循环首次适应算法(NF) | 从上次分配成功位置开始循环查找 | 按首址递增 | 空闲分区利用更均匀 | 可能无法满足大进程需求 |
| 最佳适应算法(BF) | 查找能满足要求的最小分区 | 按大小递增 | 避免拆分大空闲分区 | 产生大量小碎片 |
| 最坏适应算法(WF) | 查找能满足要求的最大分区 | 按大小递减 | 分配后剩余空闲区较大 | 大空闲区快速被消耗 |
| 快速适应算法(QF) | 按分区大小分类建立链表 | 按大小分类 | 查找效率极高 | 实现复杂,灵活性低 |
(3)优缺点
- ✅ 优点:按需分配,无内碎片,内存利用率高
- ❌ 缺点:产生外碎片,需通过"内存紧缩"整理碎片
4. 可重定位分区分配(Relocatable Partition Allocation)
(1)核心逻辑
- 适用场景:动态分区分配的优化方案,解决外碎片问题
- 核心思想:通过动态重定位技术,将内存中所有进程移动到内存低地址区域,合并外碎片
(2)优缺点
- ✅ 优点:消除外碎片,提高内存利用率
- ❌ 缺点:进程移动开销大,依赖硬件支持
三、两种补充优化技术
1. 伙伴系统(Buddy System)
(1)核心逻辑
- 分区大小规则:所有分区大小均为(如2KB、4KB、8KB等)
- 分配过程:按规则查找或拆分分区
- 回收过程:检查"伙伴分区"并合并
(2)优缺点
- ✅ 优点:分配/回收效率高,无外碎片
- ❌ 缺点:可能产生内碎片
2. 对换(Swapping)
(1)核心逻辑
- 适用场景:内存空间不足时,通过"内外存数据交换"腾出内存
- 对换过程:
- 换出:将阻塞进程写入对换区
- 换入:将就绪进程从对换区读回内存
(2)优缺点
- ✅ 优点:逻辑上扩充内存容量,提高系统并发度
- ❌ 缺点:依赖磁盘I/O,速度较慢
四、四种连续分配方法对比
| 分配方法 | 适用场景 | 碎片类型 | 内存利用率 | 实现复杂度 | 并发支持 |
|---|---|---|---|---|---|
| 单一连续分配 | 单用户、单任务 | 无(仅用户区闲置) | 极低 | 极低 | 无 |
| 固定分区分配 | 多道程序、进程需求固定 | 内碎片 | 较低 | 低 | 有 |
| 动态分区分配 | 多道程序、进程需求动态 | 外碎片 | 较高 | 中 | 有 |
| 可重定位分区分配 | 动态分区优化、需合并碎片 | 无(需紧缩) | 高 | 高(需硬件) | 有 |
五、核心总结
- 连续分配的核心是"为进程分配连续内存空间",实现简单但易受碎片问题影响
- 动态分区分配是连续分配的主流方案,通过多种算法平衡"查找效率"与"内存利用率"
- 优化技术如可重定位分区、伙伴系统、对换技术分别解决"外碎片"、"分区规整性"、"内存不足"问题
- 现代操作系统更多结合"离散分配"(分页、分段)提升内存利用率
4.3 连续分配方式总结
https://hellowydwyd.github.io/2025/10/27/4-3-连续分配方式总结/