浅谈操作系统——动态分区分配放置策略

249 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情

空闲分区表或队列的排序

  • 按空闲区首址递增的次序归类组织空闲分区表或空闲分区队列

image.png

  • 按空闲区大小递增或递减的次序组织空闲分区表或队列

image.png

首次适应法

  • 要求空闲分区按首址递增的次序组织空闲分区表/队列
  • 分配:当进程申请大小为SIZE的内存时,系统从空闲区表的第一个表目开始查询,直到首次找到等于或大于SIZE的空闲区。从该区中划出大小为SIZE的分区分配给进程,余下的部分仍作为一个空闲区留在空闲区表中,但要修改其首址和大小。
  • 回收:按释放区的首址,查询空闲区表,若有与释放区相邻的空闲区,则合并到相邻的空闲区中,并修改该区的大小和首址,否则,把释放区作为一个空闲区,将其大小和首址按照首地址大小递增的顺序插入到空闲区表的适当位置。

首次适应法的优点

释放某一存储区时,若与空闲分区相邻则合并到相邻空闲分区中去,这种情况并不改区在分区表中的位置,只要修改其大小或首址。这种算法是尽可能地利用低地址空间,从而保证高地址空间有较大的空闲区。

下次匹配法: ——循环首次适应法

按空闲分区的前后次序,从上次分配的分区起查找(到最后分区时再回到开头),找到符合要求的第一个分区。

该算法的分配和释放的时间性能较好,使空闲分区分布得更均较大的空闲分区不易保留。

最佳适应法

  • 要求按空闲分区大小从小到大的次序组成空闲分区表/队列
    分配

  • 当进程申请一个存储区时,系统从表头开始查找,当找到第一个满足要求的空闲区时,停止查找,并且这个空闲区是最佳的空闲区。

  • 所谓最佳即选中的空闲区是满足要求的最小空闲区。

  • 回收:按释放区的首址,查询空闲区表(队列),若有与释放区相邻的空闲区,则合并到相邻的空闲区中,并修改该区的大小和首址,否则,把释放区作为一个空闲区插入空闲区表(队列)。

  • 分配和回收后要对空闲区表(队列)重新排序。

优点

在系统中若存在一个与申请分区大小相等的空闲区,必定会被选中,而首次适应法则不一定。若系统中不存在与申请分区大小相等的空闲区,则选中的空闲区是满足要求的最小空闲区,而不致于毁掉较大的空闲区。

缺点

空闲区的大小一般与申请分区大小不相等,因此将其一分为二,留下来的空闲区一般情况下是很小的,以致无法使用·随着时间的推移,系统中的小空闲区会越来越多,从而造成存储区的大量浪费。

最坏适应法

  • 要求按空闲区大小递减的顺序组织空闲区表/队列
  • 分配:
    • 进程申请一个大小为SIZE的存储区时,总是检查空闲分区表的第一个空闲区的大小是否大于或等于SIZE。
    • 若空闲区小于SIZE,则分配失败;否则从空闲区中分配SIZE的存储区给用户,然后修改和调整空闲区表。
  • 回收:
    • 按释放区的首址查询整个空闲分区表/队列若有与释放区相邻的空闲分区,则合并到相邻的空闲分区中,并修改该分区的大小和首址;否则把释放区作为一个空闲分区插入空闲分区表/队列。分配回收后要对空闲分区表/队列重新排序。

以上就是这一节全部内容了,大家也不难看出三者的比较,这个还是比较重要的,所以一定要记牢!