文章标题

来源:互联网 发布:depthmap软件原理 编辑:程序博客网 时间:2024/06/15 10:50

连续分配方式

单一连续分配

固定分区分配

动态分区分配

根据进程的实际需要,动态地为之分配内存空间。
外部碎片:在所有分区外的存储空间变成越来越多的碎片
优点: 便于动态申请内存

碎片问题(外部碎片)

  • 要求连续的内存空间
  • 经过一段时间的分配回收后,内存中存在很多很小的空闲块。它们每一个都很小,不足以满足分配要求;但其总和满足分配要求。这些空闲块被称为碎片。
  • 造成存储资源的浪费

分区分配中的数据结构

  • 空闲分区表
    记录每个空闲分区的情况。
    每个空闲分区占一个表目:包括分区序号、分区始址及分区的大小等数据项。
  • 空闲分区链

分区的回收

  • 只需修改其前一分区F1的大小
  • 用回收区的首址作为新空闲区的首址,大小为两者之和
  • 使用F1的表项和F1的首址,取消F2的表项
  • 回收区既不与F1邻接,又不与F2邻接。
    这时应为回收区单独建立一新表项,填写回收区的首址和大小,并根据其首址插入到空闲链(表)中的适当位置。

动态分区分配算法

基于顺序式搜索的动态分区分配算法

  • 首次适应算法
    要求空闲分区链以地址递增的次序连接
    该算法倾向于优先利用内存中低址部分的空闲分区,从而保留了高址部分的大空闲区.为以后到达的大作业分配大的内存空间创造了条件。

    • 缺点
      低址部分不断被划分,会留下许多难以利用的、很小的空闲分区
      每次查找又都是从低址部分开始,这无疑会增加查找可用空闲分区时的开销。
  • 循环首次适应算法(next fit)
    从上次找到的空闲分区的下一个空闲分区开始查找
    直至找到一个能满足要求的空闲分区
    从中划出一块与请求大小相等的内存空间分配给作业
    应设置一起始查寻指针,用于指示下一次起始查寻的空闲分区,并采用循环查找方式

    • 使内存中的空闲分区分布得更均匀
      减少了查找空闲分区时的开销
      会缺乏大的空闲分区。
  • 最佳适应算法
    能满足且最小的空闲分区
    将所有空闲分区按容量从小到大顺序形成空闲分区链
    在存储器中会留下许多难以利用的小空闲区

    • 优点
      可使剩下的空闲区不至于太小,产生碎片的几率最小
      对中、小作业有利,查找效率很高。
    • 缺点:它会使存储器中缺乏大的空闲分区。
  • 最坏适应算法(worst fit)

基于索引搜索的动态分区分配算法

  • 快速适应算法(quick fit)
    固定分区和动态分区方式的折衷
    分区大小均为2的K次幂,L≤K≤M。
    2L = 分配的最小分区大小
    2M = 分配的最大分区大小,通常是整个可分配的内存大小
    伙伴通过对大块的物理主存划分而获得
    每次都对半划分
    两个伙伴的大小必须相同

    • 无论已分配分区或空闲分区其大小均为2的k次幂。

    直到产生大于或等于n的最小块

  • 哈希算法

伙伴系统

动态重定位分区分配