# 4.2 连续分配管理方式 ## 一、单一连续分配 ### 1.1 基本概念 **定义**:内存中只装入一道用户程序,整个内存分为系统区和用户区。 ### 1.2 内存划分 ``` +------------------+ | 系统区 | 低地址 +------------------+ | 用户区 | 高地址 +------------------+ ``` ### 1.3 特点 **优点**: - 实现简单 - 无外部碎片 **缺点**: - 只能运行一个程序 - 内存利用率低 - 有内部碎片 --- ## 二、固定分区分配 ### 2.1 基本概念 **定义**:将内存划分为若干个固定大小的分区,每个分区装入一个作业。 ### 2.2 分区大小 **分区大小相等**: - 所有分区大小相同 - 适用于多个相同类型程序 **分区大小不等**: - 划分为多个不同大小的分区 - 适用于不同类型程序 ### 2.3 内存分配 **数据结构**:分区说明表 | 分区号 | 大小 | 起始地址 | 状态 | |-------|------|---------|------| | 1 | 8K | 20K | 已分配 | | 2 | 16K | 28K | 空闲 | | ... | ... | ... | ... | ### 2.4 特点 **优点**: - 实现简单 - 无外部碎片 **缺点**: - 有内部碎片 - 分区大小固定,不够灵活 - 并发度受分区数限制 --- ## 三、动态分区分配 ### 3.1 基本概念 **定义**:根据进程实际需要,动态分配内存分区。 ### 3.2 数据结构 **空闲分区表**: | 分区号 | 分区大小 | 起始地址 | 状态 | |-------|---------|---------|------| | 1 | 20K | 100K | 空闲 | | 2 | 50K | 150K | 空闲 | | ... | ... | ... | ... | **空闲分区链**: - 将空闲分区链接成链表 - 每个分区的头部记录大小和指针 ### 3.3 分区分配算法 #### 首次适应算法(First Fit) **思想**:从空闲分区链的第一个分区开始,找到第一个满足要求的分区。 **特点**: - 低地址部分使用频繁 - 高地址部分保留大分区 - 有外部碎片 #### 最佳适应算法(Best Fit) **思想**:选择满足要求的最小分区。 **特点**: - 保留大分区 - 产生大量小碎片 - 查找效率低 #### 最坏适应算法(Worst Fit) **思想**:选择满足要求的最大分区。 **特点**: - 减少小碎片 - 大分区很快被用完 #### 邻近适应算法(Next Fit) **思想**:从上次查找的位置开始,找到第一个满足要求的分区。 **特点**: - 首次适应的改进 - 避免低地址部分过度使用 ### 3.4 分区回收 **回收过程**: 1. 检查回收分区的前后是否有空闲分区 2. 如果前邻或后邻是空闲的,合并 3. 更新空闲分区表或链表 **合并情况**: - 上邻空闲:与上邻合并 - 下邻空闲:与下邻合并 - 上下都空闲:与上下都合并 - 都不空闲:插入空闲链表 ### 3.5 特点 **优点**: - 无内部碎片 - 内存利用率高 **缺点**: - 有外部碎片 - 需要紧凑(Compaction) --- ## 四、紧凑(Compaction) ### 4.1 什么是紧凑 **定义**:将内存中的所有作业移动,使所有空闲分区合并成一个大的空闲分区。 ### 4.2 紧凑的时机 - 当内存中没有足够大的空闲分区时 - 系统空闲时 ### 4.3 紧凑的开销 - 需要移动大量数据 - 需要动态重定位支持 - 系统开销大 --- ## 五、考研重点 1. **三种连续分配方式**:单一连续、固定分区、动态分区 2. **动态分区分配算法**:首次适应、最佳适应、最坏适应、邻近适应 3. **内部碎片和外部碎片**:概念和区别 4. **分区回收**:合并过程 5. **紧凑**:概念和开销 --- *下一节:4.3 基本分页存储管理*