当前位置: 首页 > news >正文

操作系统————四种动态分区分配算法详解(首次适应,最坏适应,最佳适应,邻近适应)

❤️❤️❤️算法1:首次适应算法

💙💙💙算法思想:
在这里插入图片描述
💙💙💙实现方法:
在这里插入图片描述
可以通过两种数据结构实现:
方式1:空闲分区表
方式2:空闲分区链(链表)
下面我们来看一个通过空闲分区链实现的例子
在这里插入图片描述
我们假设现在内存有三个空闲分区,大小分别是20MB,10MB,4MB如上图所示
在这里插入图片描述
我们按照地址高低的顺序把他们排成一个链表,每次分配内存时都从头查找,找出第一个符合条件的为止

我们假设现在有一个进程5需要15MB的空间,经过查找发现第一个空闲分区满足条件,分配过后要修改内存空间,变成如下图所示的新队列
在这里插入图片描述

那么如果此时再有一个8MB的进程6请求内存分配我们就需要从头开始查找,第一个5MB的空间不满足,继续往后查找,发现第二个10MB的空闲分区满足,于是分配空间,同样还要把空闲分区的大小修改为2,因为分配了8MB给进程6

❤️❤️❤️算法2:最佳适应算法

💙💙💙算法思想:
在这里插入图片描述
💙💙💙实现方法:
在这里插入图片描述
按容量递增的顺序就可以保证找出的分区是最合适的,不会太大造成空间的浪费

我们还是以算法1中的例子分析:
在这里插入图片描述
算法1中我们是按三个分区的地址高低排列的,这里我们是按三个空闲分区的地址容量大小排序的(升序)
在这里插入图片描述
假设此时有一个进程6需要分配9MB的内存,我们从头查找发现第二个空闲分区满足条件,10MB分配了9MB,还剩1MB,但是最佳适应算法要求每次都按容量递增的顺序排列,所以我们需要更新链表顺序,如下图:
在这里插入图片描述
可能存在的缺点:
在这里插入图片描述

❤️❤️❤️算法3:最坏适应算法(最大适应算法)

💙💙💙算法思想:
在这里插入图片描述
💙💙💙实现方法:
在这里插入图片描述
我们还是以上面的例子分析,按照容量递减的顺序排列空闲分区
在这里插入图片描述
此时进程5需要分配3MB的空间,第一个分区分配3MB,剩下17MB
在这里插入图片描述
此时进程6又需要分配9MB的空间,第一个分区分配9MB剩下8MB,按照容量递减的顺序应该排到10MB的空闲分区后面,得到如下图所示队列:
在这里插入图片描述
缺点:

在这里插入图片描述
注意:最佳适应和最坏适应的空闲分区排列顺序是完全相反的

❤️❤️❤️算法4:邻近适应算法

💙💙💙算法思想:
在这里插入图片描述
💙💙💙实现方法:
在这里插入图片描述
💙💙💙算法核心:
循环链表
下面来看例子:
在这里插入图片描述
我们假设初始时进程5需要5MB的内存空间,我们首先找到6MB的空闲分区,分配完之后应该有如下的队列:

在这里插入图片描述
假设此时又有一个进程6需要5MB的空间,那么上次结束的位置是2号空闲分区,我们直接往后查找到10MB的空闲分区发现满足条件直接分配,这样指针移动的次数是1次

那么如果我们采用首次适应的算法,就要从头开始寻找,指针移动2次,这样看来,邻近适应算法确实减少开销

🍔🍔🍔那么请读者思考一个问题,邻近适应算法是不是一定比首次适应算法好呢?

当然不是,我们给出如下比较

在这里插入图片描述
首次适应算法有一部分最佳适应算法的优点,而邻近适应算法包含了最坏适应算法的缺点,所以不能说邻近适应算法比一定首次适应算法好

🍬🍬🍬综上所述,四种算法中还是首次适应的效果最好!!!

最后我们给出总结:
在这里插入图片描述

注意:

🍬🍬🍬克服碎片化方面表现最好的是最坏适应算法!!!

🍬🍬🍬首次适应算法匹配速度快,但容易形成碎片,内存利用率也不高!!!

相关文章:

  • 【Java高阶面经:微服务篇】3.熔断机制深度优化:从抖动治理到微服务高可用架构实战
  • Python Day27 学习
  • Linux僵死进程以及文件操作
  • LW-CTrans:一种用于三维医学图像分割的轻量级CNN与Transformer混合网络|文献速递-深度学习医疗AI最新文献
  • RFID技术在半导体晶圆卡塞盒中的应用方案
  • 计算机可以深度结合、并且很有发展空间的领域
  • 机器学习 day05
  • Git客户端安装、操作
  • Vue3 中使用 provide/inject 实现跨层级组件传值失败的原因及解决方案
  • Vue之入门(Vue是什么以及Vue工作原理)
  • 数据要素如何重构人力资本升级
  • 消息传递--树形dp--50?!
  • windows/linux 模拟鼠标键盘输入
  • 创建型:建造者模式
  • 文件操作和IO—初识文件
  • leetcode hot100:三、解题思路大全:哈希(两数之和、字母异位词分组、最长连续序列)、双指针(移动零、盛最多水的容器、三数之和、接雨水)
  • 《C 语言 sizeof 与 strlen 深度对比:原理、差异与实战陷阱》
  • COMSOL软件入门
  • 爱普生Epson PX-S887打印机信息
  • 不同企业数字化转型补贴差异解析:政策导向下的分层激励模式
  • 中国与东盟十国全面完成中国—东盟自贸区3.0版谈判
  • “世界茶树原产地”打通全产业链,茶文旅融合助力西双版纳高质量发展
  • 钟睒睒:不反对代工,但农夫山泉目前所有产品是无法代工的
  • 读懂城市|成都高新区:打造“人尽其才”的“理想之城”
  • 外交部驻港公署正告美政客:威胁恫吓撼动不了中方维护国家安全的决心
  • 用贝多芬八首钢琴三重奏纪念风雨并肩20年