单一连续分区

  • 内存分为两块:系统区(OS 内核)和 用户区(一个进程独占)
  • 通过界地址寄存器实现越界保护
  • 适用:单道批处理系统
  • 缺点:CPU 利用率低,内存浪费严重

固定分区

  • 内存预先划分为若干个大小固定的分区
  • 一个作业占用一个分区
  • 通过分区状态表(起始地址 + 分区大小 + 状态)管理
  • 进程排队方式:多队列(按大小排队,减少内部碎片)或单队列
  • 缺点:内部碎片(分区内未用完的空间),分区总数固定,限制并发进程数

重点 可变分区(动态分区)

  • 根据作业大小动态划分内存,需要多少切多少
  • 空闲区链表管理(节点含:大小、起始地址、next 指针)
  • 外部碎片问题:经过多次分配释放,空闲分区总和够用但不成连续

分配算法

算法策略优点缺点
首次适应(First Fit)从低地址开始找第一个足够大的空闲分区简单,保留高端大空间产生外部碎片,查找次数多
循环首次适应(Next Fit)从上一次分配的位置继续找(循环链表)分配均匀,查找更快不易保留大分区
最佳适应(Best Fit)选最小的足够大的空闲分区剩余碎片最小产生许多小外部碎片
最差适应(Worst Fit)选最大的空闲分区无需查找,直接取首大分区被切碎

碎片处理

  • 外部碎片:空闲分区总和够用但不成连续,无法分配
  • 紧凑(Compaction):移动已分配分区聚到一端,合并空闲空间
    • 需要动态重定位(基址寄存器)支撑
  • 释放时合并规则:空闲块相邻时需合并(前邻空闲、后邻空闲、前后皆空闲、前后皆占用四种情形)

内部碎片 vs 外部碎片

类型定义产生场景
内部碎片已分配给进程的分区中未被使用的空间固定分区(进程需求 < 分区大小)
外部碎片空闲分区总和够用但不成连续可变分区(多次分配释放后)