动态分区分配算法(1、首次适应算法 2、最佳适应算法 3、最坏适应算法 4、邻近适应算法)

前言

此篇文章是我在B站学习时所做的笔记,大部分图片都是课件老师的PPT,方便复习用。此篇文章仅供学习参考。


提示:以下是本篇文章正文内容

知识总览

动态分区分配算法:在动态分区分配方式中,当很多个空闲分区都能满足需求时,应该选择哪个分区进行分配?
在这里插入图片描述

1、首次适应算法

算法思想:每次都从低地址开始查找,找到第一个能满足大小的空闲分区。
如何实现:空闲分区以地址递增的次序排列。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。
请添加图片描述

考点!!!
首次适应算法 是最有可能使得 高地址空间成为大的空闲区 的分配算法

2、最佳适应算法

算法思想:由于动态分区分配是一种连续分配方式,为各进程分配的空间必须是连续的一整片域。因此为了保证当“大进程”到来时能有连续的大片空间,可以尽可能多地留下大片的空闲区,即,优先使用更尔的空闲区。
如何实现
空闲分区按容量递增次序链接。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。
请添加图片描述
缺点:每次都选最小的分区进行分配,会留下越来越多的、很小的、难以利用的内存块。因此这种方法会产生很多的外部碎片

3、最坏适应算法

又称最大适应算法(Largest Fit)
算法思想:为了解决最佳适应算法的问题――即留下太多难以利用的小碎片,可以在每次分配时优先使用最大的连续空闲区,这样分配后剩余的空闲区就不会太小,更方便使用。
如何实现:空闲分区按容量递减次序链接。每次分配内存时顺序查找空闲分区链(空闲分区表),找到大小能满足要求的第一个空闲分区。
请添加图片描述
缺点:每次都选最大的分区进行分配,虽然可以让分配后留下的空闲区更大,更可用,但是这种方式会导致较大的连续空闲区被迅速用完。如果之后有“大进程”到达,就没有内存分区可用了。

4、邻近适应算法

算法思想:首次适应算法每次都从链头开始查找的。这可能会导致低地址部分出现很多小的空闲分区,而每次分配查找时,都要经过这些分区,因此也增加了查找的开销。如果每次都从上次查找结束的位置开始检索,就能解决上述问题。
如何实现:空闲分区以地址递增的顺序排列(可排成一个循环链表)。每次分配内存时从上次查找结束的位置开始查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区
请添加图片描述
首次适应算法,会导致低地址部分留下一些比较小的碎片,但是我们每一次开始检索,都需要从低地址部分的这些小碎片开始往后检索,所以这就会导致首次适应算法在查找的时候,可能会多花一些时间。不过这并不意味着邻近适应算法就比首次适应算法优秀很多。

  • 首次适应算法每次都要从头查找,每次都需要检索低地址的小分区。但是这种规则也决定了当低地址部分有更小的分区可以满足需求时,会更有可能用到低地址部分的小分区,也会更有可能把高地址部分的大分区保留下来(最佳适应算法的优点)
  • 邻近适应算法的规则可能会导致无论低地址、高地址部分的空闲分区都有相同的概率被使用,也就导致了高地址部分的大分区更可能被使用,划分为小分区,最后导致无大分区可用(最大适应算法的缺点)

知识回顾与重要考点

在这里插入图片描述

### 回答1: 动态异长分区内存分配是指内存被分成不同大小的分区,每个分区可以被分配给不同大小的进程。最先适应算法是一种内存分配算法,它会从内存的起始位置开始查找,找到第一个能够满足进程大小的空闲分区,并将进程分配到该分区中。 该算法的设计思路是简单直观的,但也存在一些问题。例如,如果大量小的进程被分配到内存中,会留下很多小的空闲分区,导致大的进程无法分配到足够的内存空间。此外,如果内存中存在大量的碎片,也会影响内存的利用率。 为了解决这些问题,可以采用其他的内存分配算法,如最佳适应算法最坏适应算法等。这些算法会根据进程的大小选择最合适的空闲分区进行分配,从而提高内存的利用率。同时,还可以采用内存碎片整理技术,将多个小的空闲分区合并成一个大的空闲分区,以便更好地满足大的进程的内存需求。 ### 回答2: 动态异长分区内存分配与去配算法的设计-最先适应算法 动态异长分区内存分配与去配算法是现代操作系统管理内存的重要算法之一,最先适应算法是其重要的一种算法模型。 动态异长分区内存分配与去配算法是指在内存空间有限的情况下,对内存进行分配和回收的过程。通过动态异长分区的划分与去配,使得内存空间更为充分有效地利用,提高了内存的利用效率。 最先适应算法是指在内存区域中寻找第一个适合请求的空闲分区进行分配。具体过程是将内存按照大小分成一些有序的区间段,每次分配时首先查找一个大于等于请求大小的未使用区间段,然后从该区间段的起始位置分配空间。最先适应算法的优点是简单易实现,但缺点是容易产生碎片,影响内存资源的利用率。 为了解决碎片问题,可以采用动态内存分配方式,动态向内存池中添加分区。当一次内存分配无法满足需求时,会动态在内存池中添加新的分区,通过合并相邻的未使用的分区来减少碎片。 最先适应算法作为优化内存分配的一个算法,可以更好地管理内存资源。它的设计理念是“分区平衡”,即内存资源利用率的最大化,同时尽量减少“内存碎片”。 总之,动态异长分区内存分配与去配算法的设计-最先适应算法是一项非常重要的算法模型,对于设计高效的内存管理系统有着重要的作用。其简单易实现、优化内存分配等特点,为操作系统设计提供了更优秀的性能表现。 ### 回答3: 动态异长分区内存分配是指在可变长度的内存块中分配内存资源的过程,这种分配方式往往具有高效性和灵活性。其中,最先适应算法是一种广泛应用的内存分配算法。 最先适应算法是指从空闲块列表中取出最靠前的满足要求的块,进行分配。这种算法具有以下几个特点: 1. 算法简单、容易实现。 2. 空闲块列表中块的顺序比较靠前,因此可以在碎片较小的情况下进行内存分配。 3. 该算法虽然有概率导致大量的内存碎片,但是碎片的大小一般比较小,因此对内存的影响较小。 最先适应算法的核心思想是尽可能利用空闲内存资源,减小内存碎片的大小。在进行内存分配时,系统需要统计当前程序需要的内存资源大小,查找到满足要求的空闲块,进行内存分配。如果找到了合适的空闲块,则系统将其标记为已分配状态,如果没有找到合适的空闲块,那么系统将返回内存分配失败的信息。 在进行内存去配算法的设计时,最先适应算法可以采用合并邻近空闲块的方法来减少内存碎片的大小。如果某个空闲块没有被分配出去,那么空闲块的左右两侧有可能还有其他的空闲块。如果当前空闲块左右两侧的空闲块已经相邻,那么系统可以将这两个空闲块合并成一个更大的空闲块,这样就可以释放更多的内存资源,减少内存碎片的大小。 总之,最先适应算法是一种简单有效的动态异长分区内存分配算法,可以满足大多数情况下的内存分配需求。在进行内存去配算法的设计时,可以采用合并邻近空闲块的方式来优化内存资源的利用效率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜗牛_Chenpangzi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值