首页 > 技术文章 > 操作系统的空闲内存管理

WangXianSCU 2022-02-16 14:42 原文

操作系统的空闲内存管理

动态分配内存时,操作系统必须对空闲内存进行管理。

1. 使用位图的存储管理

使用位图时,内存可能被划分为很多个分配单元,每个分配单元对应位图中的一位,0 表示空闲,1 表示占用。

image-20220216141119909

使用位图时,关键问题在于分配单元大小的设计。

分配单元越小,越可以精细分配内存。但这也意味着位图越大,消耗的空间越大。

2. 使用链表的存储管理

使用链表时,链表中的一个节点包括一个进程或者两个进程间的一块空闲区域。

image-20220216143557279

如上图,链表中每个节点都包含以下域:

  • 空闲区 H 或进程 P 的指示标志
  • 起始地址
  • 长度
  • 指向下一节点的指针

段链表可以使用双向链表,在设计时显然会更加方便。

有几种算法可以为创建的线程分配内存:

  • 首次适配算法:沿着链表搜索,使用第一个足够大的空闲区,每次都重头开始。
  • 下次适配算法:沿着链表搜索,使用第一个足够大的空闲区,每次都从上一次结束的位置开始。
  • 最佳适配算法:搜索整个链表,找到大小最合适的空闲区。
  • 快速适配算法:为常用大小的空闲区维护单独的链表。例如有一个 n 项的表,第一项指向大小为 4KB 的空闲区链表表头的指针,第二项为指向大小为 8KB 的空闲区链表表头的指针,以此类推。

推荐阅读