动态分区分配算法-第四十四天

news2024/11/28 8:43:53

目录

前言

首次适应算法(First Fit)

最佳适应算法(Best Fit)

最坏适应算法(Worst Fit)

临近适应算法(Next Fit)

本节思维导图


前言

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

首次适应算法(First Fit)

核心思想:每次从低地址开始查找,找到第一个满足大小地空闲分区

实现方法:空闲分区以地址递增地次序排列,每次分配内存时顺序查找空闲分区链或空闲分区表,找到大小能满足要求的第一个空闲分区,找到后就修改满足要求的分区的分区大小和起始地址等信息

最佳适应算法(Best Fit)

核心思想:为了保证“大进程”到来时能有连续的大片空间,可以尽可能多地留下大片地空闲区,即优先使用更小地空闲区

实现方法:空闲分区按容量递增次序链接,每次分配内存时顺序查找空闲分区链或空闲分区表,找到大小能满足要求的第一个空闲分区,找到后就修改满足要求的分区的分区大小和起始地址等信息,同时还需要对空闲分区链和空闲分区表重新排序使其依旧按容量递增的次序链接,如果分出去后还是有序就不需要重新排序了

缺点:每次都选最小的分区进行分配,会留下越来越多的、很小的、难以利用的内存块,即很多的外部碎片

最坏适应算法(Worst Fit)

核心思想:为了解决最佳适应算法的问题(太多难以被利用的外部碎片),在每次分配时优先使用最大的连续空闲区,这样分配后剩余的空闲区就不会太小,更方便使用

实现方法:空闲分区按容量递减次序链接,每次分配内存时顺序查找空闲分区链或空闲分区表,找到大小能满足要求的第一个空闲分区,找到后就修改满足要求的分区的分区大小和起始地址等信息,同时还需要对空闲分区链和空闲分区表重新排序使其依旧按容量递减的次序链接,如果分出去后还是有序就不需要重新排序了

缺点:每次都选最大的分区进行分配,虽然可以让分配后留下的空闲区更大、更可用,但是这种方式会导致较大的连续空闲区被迅速用完,如果之后有"大进程"到达,就没有内存分区可用了

临近适应算法(Next Fit)

核心思想:首次适应算法每次都从链/表头开始查找,这可能会导致低地址出现很多很小的空闲分区,而每次分配查找时,都要经过这些分区,因此也增加了查找的开销,如果每次都从上次查找结束的位置开始检索,就能解决上述问题

实现方法:空闲分区以地址递增的顺序排列(可以排成一个循环链表),每次分配内存时从上次查找结束的位置开始查找空闲分区链或空闲分区表,找到大小能满足要求的第一个空闲分区

缺点:会使高地址的大分区也被用完

本节思维导图

算法算法思想分区排列顺序优点缺点
首次适应从头到尾找适合的分区空闲分区以地址递增次序排列综合看性能最好,算法开销小,回收分区后一般不需要对空闲分区队列重排序
最佳适应优先使用更小的分区,以保留更多大分区空闲分区以容量递增次序排列会有更多的大分区被保留下来,更能满足大进程的需求会产生很多太小的、难以利用的碎片;算法开销大,回收分区后可能需要对空闲分区队列重新排序
最坏适应优先使用更大的分区,以防止产生太多小的不可用的碎片空闲分区以地址递减次序排列可以减少难以利用的小碎片大分区容易被用完,不利于大进程;算法开销大(原因同上)
临近适应由首次适用算法演变而来,每次从上次查找结束位置开始查找空闲分区以地址递增次序排列(可排列成循环链表)不用每次都从低地址的小分区开始检索。算法开销小(原因同首次适应算法)会使高地址的大分区也被用完

~over~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1356908.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#使用switch多路选择语句判断何为季节

目录 一、 switch语句 二、示例 三、生成 一、 switch语句 switch语句是多路选择语句,它通过一个表达式的值来使程序从多个分支中选取一个用于执行的分支。 switch表达式的值只可以是整型、字符串、枚举和布尔类型。 switch语句中多个case可以使用一个break。 在…

移动通信原理与关键技术学习(2)

1.多径信道滤波器表示,多径信道可以认为是线性时变滤波器,接收信号为发送信号与信道冲激响应的卷积。 2.调制就是对信号源的信息进行处理加到载波上,使其变为适合于信道传输的形式的过程,就是使载波随信号而改变的技术。 3.进行调…

CodeWave智能开发平台--03--目标:应用创建--01模板创建依赖问题修改

摘要 本文是网易数帆CodeWave智能开发平台系列的第03篇,主要介绍了基于CodeWave平台文档的新手入门进行学习,实现一个完整的应用,本文主要完成模板创建时的依赖问题解决。 CodeWave智能开发平台的03次接触 CodeWave参考资源 网易数帆Code…

3个.NET开源简单易用的任务调度框架

前言 今天分享3个.NET开源、简单、易用的任务调度框架,帮助大家在做定时任务调度框架技术选型的时候有一个参考。 Quartz.Net Quartz.NET是一个功能齐全的开源作业调度系统,可用于从最小的应用程序到大规模企业系统。 Quartz.NetUI Quartz.NetUI是一…

Java 泛型深入解析

Java 中的泛型是一种强大的编程特性,允许我们编写更加通用和类型安全的代码。本篇博客将深入探讨 Java 泛型的各个方面,包括泛型类、泛型方法、泛型接口以及泛型通配符。 1. 泛型类 首先,让我们看一个简单的泛型类的例子。在下面的代码中&a…

功能问题:如何限制同一账号只能在一处登录?

大家好,我是大澈! 本文约1200字,整篇阅读大约需要2分钟。 感谢关注微信公众号:“程序员大澈”,免费领取"面试礼包"一份,然后免费加入问答群,从此让解决问题的你不再孤单&#xff01…

C语言快速入门——基础知识

C语言基础 C语言基础C程序基本格式基本数据类型原码、反码和补码原码反码补码 整数类型浮点类型字符类型 变量变量的使用无符号数类型转换 运算符基本运算符运算符优先级自增自减运算符位运算符逻辑运算符 流程控制分支语句 - if分支语句 - switch循环语句 - for循环语句 - whi…

两种高效计算 两个经纬度之间距离的方法--解决Haversine 公式性能慢的问题

目录 前言 Haversine 原理 实现代码 优化后的距离计算 原理 代码 性能及精度对比 前言 最新开发的业务中,涉及到计算两个经纬度之间的距离。已知A点和B点的 经纬度,计算A点到B点之间的距离。最开始使用的是Haversine公式来进行计算&…

opencv期末练习题(8)附带解析

图像切片 %matplotlib inline import cv2 import matplotlib.pyplot as plt def imshow(img,grayFalse,bgr_modeFalse):if gray:img cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)plt.imshow(img,cmap"gray")else:if not bgr_mode:img cv2.cvtColor(img,cv2.COLOR_BGR2RG…

014、枚举与模式匹配

枚举类型,通常也被简称为枚举,它允许我们列举所有可能的值来定义一个类型。在本篇文章中,我们首先会定义并使用一个枚举,以向你展示枚举是如何连同数据来一起编码信息的。 接着,我们会讨论一个特别有用的枚举&#xff…

双碳管理系统任务需求分析(第10套)

需求规格说明书 一、引言 (一)项目背景 编写本需求规格说明书的目的是为了详细呈现碳足迹产品需求和系统的功能描述,以进一步定制应用软件系统开发的细节问题,便于与项目开发协调工作。本文档面向的读者主要是项目委托单位的管…

找不到vcruntime140.dll怎么处理?6个修复教程分享

本文将详细介绍vcruntime140.dll文件的相关内容,并提供6个不同的修复教程,帮助大家解决这一问题。 一、vcruntime140.dll是什么文件? vcruntime140.dll是Visual C Redistributable Packages的一部分,它是Microsoft Visual Studi…

Alice Bob推出16量子比特量子处理单元——“Helium 1”

​(图片来源:网络) 容错量子计算机硬件开发商Alice & Bob宣布已成功流片一款新芯片“Helium 1”,希望能借助该芯片降低随着量子比特数增加而提高的错误率,这是该公司第一个纠错逻辑量子比特(纠错量子计…

MySQL Enterprise版本各系统安装包下载

一、官方下载地址 oracle下载地址 https://edelivery.oracle.com/osdc/faces/SoftwareDelivery 使用oracle账号登录进去 Category选择Download Package(下载安装包),搜索栏输入mysql Enterprise关键字点search进行搜索。选项结果第一个MySQL Enterprise Edition&a…

教程:Centos6迁移旧虚拟机文件后的网络配置教程,完美解决虚拟机移动后的网络ip变化问题

博主在工作后,想整整之前大学的虚拟机集群,因此特意从之前的旧电脑把虚拟机文件给拷贝了过来,在导入到vm-workstation,顺便能启动虚拟机后,发现之前的静态ip已经跟现在的宿主机网络不一样。想着重新配置,但觉得太麻烦,故想到了修改网卡的mac地址+网卡重配置方法,完美解…

【绘图软件】自用安装教程

链接:https://pan.baidu.com/s/17r9Pr460FzkULU7fTr91_w?pwdftv7 提取码:ftv7 --来自百度网盘超级会员V6的分享解压并且右键打开set up 解压crack软件前需要退出杀毒软件, 关闭实时保护 域网络关闭,专用网络关闭&#xff0…

【源码分析】 Calcite 处理流程详解:calcite架构、处理流程以及就一个运行示例进行源码分析

文章目录 一. Calcite整体架构二. Calcite处理流程三. 处理流程样例说明1. 样例demo1.1. 样例数据1.2. 使用calcite 2. 流程源码分析Step1: SQL 解析阶段(SQL–>SqlNode)Step2: SqlNode 验证(SqlNode–>SqlNode)1. 注册元数…

接口自动化测试,完整入门到入职篇

一、自动化测试 众所周知,自动化测试已经成为软件项目中不可或缺的测试方法。基于用户交互界面(GUI)的自动化测试方法具有模拟用户行为和过程可视化的特点,因此受到了广大入门自动化人士的喜爱。诸如:QTP、Selenium等…

JMeter 插件大全:详细介绍 Jmeter 常用插件

JMeter作为一个开源的接口性能测试工具,其本身的小巧和灵活性给了测试人员很大的帮助,但其本身作为一个开源工具,相比于一些商业工具(比如 LoadRunner),在功能的全面性上就稍显不足。这篇博客,就…

深入了解 Vite:快速、简洁、高效的前端构建工具(下)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…