操作系统原理 —— 内存动态分区分配算法(二十一)

news2024/11/28 14:10:03

在上一个章节我们讲了内存连续分配的几种方式,有单一、固定、动态这三种,在固定、动态这种里面,操作系统会记录空闲分区表,这个表是用来记录当前空闲的内存。

那么在之后有新的进程装入内存,需要从空闲分区表中找到一块比较合适的空闲内存,该怎么找呢? 这个就是今天我们要讲解的,几种不同方式的动态分区分配算法

首次适应算法 First Fit

算法思想:每次都从低地址开始查找,找到第一个能满足大小的空闲分区。

如何实现:空闲分区以地址递增的次序排列,每次分配内存时顺序查找空闲分区表或者空闲分区链,找到第一个能满足大小的空闲分区。

这个算法很好理解,就从低位置开始找,找到第一个大小符合要求的就行,看下面的例子:

在这里插入图片描述

在这个时候进程5想要分配内存,就会从分区1分配 15 MB 大小的内存,因为起始地址为 8,并且内存大小也满足,所以就选择了第一个。

邻近适应算法 Next Fit

算法思想:首次适应算法是每次都需要从表头重新开始查找,这可能会导致低地址部分出现很多小的空闲分区,而每次查找都需要经过这些分区,增加了查找的开销,如果每次都从上次查找结束的位置开始检索,就能解决这个问题。

如何实现:空闲分区以地址递增的顺序开始排列,每次分配内存时从上次查找结束的位置开始查找空闲分区块,最后找到一个满足大小要求的分区即可。

这个算法和刚刚首次适应算法有相同点,也有不相同点。 相同点就是它们都是按照起始地址,依次递增开始排序,不同点就是首次适应算法每次分配每次都是需要重头开始查询是否有满足的分区,而邻近适应算法时从上一次查找结算的位置接着往后开始查找是否有满足的分区。

最佳适应算法 Best Fit

算法思想:由于动态分区分配是一种连续的分配方式,各个进程分配的空间必须是连续的一整块区域,为了考虑大进程到来时能有连续的大空间,所以尽可能更多的留下大片的空闲区,优先使用更小的空闲区。

如何实现:空闲分区表按照容量依次递增次序排列,每次分配内存的时候按照顺序查找,找到第一个大小能满足要求的空闲分区。

我们看下面这个例子:空闲分区表是按照分区大小递增排列,然后选择第一次能够满足要求的分区即可。

在这里插入图片描述

缺点:每次都选择最小的分区进行分配,会留下很多越来越多的、很小的、难以利用的内存块,就会产生很多内部碎片,如下图:
在这里插入图片描述

当进程6、进程5,他们使用比较最佳的空闲分区表之后,各剩下了 1 MB 的空闲分区,这种情况会越来越多,就会导致产生很多外部碎片。

最坏适应算法 Worst Fit

算法思想:为了解决最佳适应算法的问题,可以在每次分配时,优先使用最大的连续空闲区,这样分配后的空闲区就不会太小,方便使用。

如何实现:空闲分区按照容量递减次序排列,每次分配内存时顺序查找,找到大小能够满足的第一个空闲分区。

看下面这个例子:空闲分区表是按照分区大小,递减的关系来进行排列的,然后按照顺序查找 进程5 就被安排到了第一个分区。

在这里插入图片描述

但是这个算法也会有缺点,因为它是优先使用容量最大的分区,这样就会导致如果之后有大进程需要使用内存的时候,分区就无法满足需求了。

本章总结

在这里插入图片描述

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

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

相关文章

从零手写操作系统之RVOS内存管理模块简单实现-02

从零手写操作系统之RVOS内存管理模块简单实现-02 内存管理分类内存映射表(Memory Map)Linker Script 链接脚本语法基于符号定义获取程序运行时内存分布 基于 Page 实现动态内存分配代码讲解调试 扩展 本系列参考: 学习开发一个RISC-V上的操作系统 - 汪辰 - 2021春 整…

qrcode.min.js下载

目录 qrcode.min.js下载步骤: 去官网 下载后解压: 如下:就可以得到 qrcode.min.js文件了 qrcode.min.js下载步骤: 去官网 可以前往qrcode官网(https://davidshimjs.github.io/qrcodejs/)下载qrcode.m…

培训pytorch(未完善) bp算法原理

生物的神经元 接受外部的刺激 神经网络工作流程演示

MySQL高可用集群解决方案之:MySql Cluster搭建

MySQL是当前使用最广泛的关系型数据库管理系统之一,但MySQL在高并发访问和大量数据处理方面存在较为明显的性能瓶颈。为了解决MySQL单点故障带来的不便和可扩展性问题,我们需要构建稳定性极高的MySQL集群方案。本文将介绍一种快速搭建MySQL集群的解决方案…

机器学习聚类算法——BIRCH算法、DBSCAN算法、OPTICS算法

系列文章目录 前言 本文主要介绍BIRCH算法、DBSCAN算法、OPTICS算法,以及相关案例举例,以下案例仅供参考 一、BIRCH算法 1.1、BIRCH算法简介 BIRCH(Balanced Iterative Reducing and Clustering using Hierarchies,平衡迭代规约…

Kubernetes(K8s)各组件白话解释

深入springboot怎么启动tomcat NameSpacePodDeployment1. 创建多个副本2. 扩容/缩容3. 滚动更新4. 版本回退 ServiceClusterIpNodePort Ingress 个人笔记,仅供参考。 来源于尚硅谷视频 转载请评论。 NameSpace 名称空间,在K8s中用于隔离资源。对不同资源…

第十一届“泰迪杯”数据挖掘挑战赛成绩公示

第十一届“泰迪杯” 数据挖掘挑战赛成绩公示 第十一届“泰迪杯”数据挖掘挑战赛历时两个月顺利结束。竞赛采用盲审(屏蔽参赛者信息;评审专家只能评阅非本区域作品;三位评阅专家同时评阅同一作品,超限调整后再取平均分&#xff0…

【小米的技术分享】数据库索引原理与底层数据结构解析

大家好,我是小米。今天我们来探讨一下数据库索引原理以及底层索引数据结构,同时还会介绍叶子节点存储的内容以及索引失效的情况。废话不多说,让我们开始吧! IO操作与索引 首先,我们先来了解一下IO操作对于数据库索引的…

【区块链 | L2】作为Layer2赛道的领跑者,如何理解 Arbitrum?

上周我们介绍了以太坊L2扩展解决方案Optimism,本周我们继续介绍另一个L2解决方案——Arbitrum。Arbitrum 是以太坊的一个 Optimistic Rollup L2 可扩展性解决方案。 Part.1 什么是Arbitrum? Arbitrum 是一个构建在以太坊之上的区块链网络。你可以使用 Arbitrum 链来做任何在…

长短连接对压测的影响有多大?!

【引言】 当我们进行压力测试时,长短连接是一个非常重要的参数。但是,你知道吗?长短连接对于压测结果有着非常大的影响!如果你不理解这个参数,那么你的压测结果可能会出现严重的偏差。 在这篇文章中,我将…

快速在linux上配置python3.9的环境以及可能报错的解决方案(python其它版本可同样方式安装)

一. linux安装python3.9 步骤1:安装系统依赖(重要) 这一步不执行,后面各种错误。 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-d…

C#:不同登录用户阅读状态的修改:不同的登录用户,登录用户修改阅读状态后,状态变为已读,未修改阅读状态的用户,依然显示未读的程序实例

一、创建数据库 首先,可以使用SQL Server Management Studio创建一个新的数据库(MyDatabase) 以及三个表(Users, Messages, UserMessageStatus),分别用于存储用户信息,消息信息以及用户消息状态。 Users表 该表包含了所有注册用户的信息。…

Es elasticsearch 十七 Java api 实现聚合 几个聚合示例 sql 开启许可 新特效 java 实现es7 sql 功能

目录 Java api 实现聚合 依赖 简单聚合按照颜色分组获取每个卖出数量 聚合每个颜色卖出数量,及平均价格(每个分桶子聚合) 按照颜色分组 ,获取销售数量,avg min max sum 按照600区间价格范围分组,算出…

你学习web安全的路线可以介绍是吗

学习网络安全一定要选好一个方向去下功夫,如果不清楚自己究竟适合什么方向,可以都稍微尝试一下再来做选择,实战能力才是重点,所以你最应该找平台,多多实战,完成实际项目! 书籍推荐:…

『赠书活动 | 第九期』清华社赞助 | 《Java系列丛书》

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 『赠书活动 | 第九期』 本期书籍:《Java系列丛书》 公众号赠书:第一期 参与方式:关注公众号:低调而奢华 …

react-router V6 传递参数的三种方式

react-router V6 传递参数的三种方式 路由跳转使用navigate()路由传参1,searchParams传参2,params 传参3,state传参总结 路由跳转使用navigate() 编程式导航 导入一个 useNavigate钩子函数执行 useNavigate 函数得到 跳转函数在事件中执行跳…

服务器PING值不稳定是什么情况?

​  服务器ping值不稳定是指服务器在不同时间段内,对同一IP地址进行ping测试时,返回的延迟时间不同,存在波动的情况。这种情况会对服务器的性能和稳定性产生影响,影响用户的使用体验。下面我们来分析一下服务器ping值不稳定的原…

模拟IC方向面试常考问题及答案汇总,IC人必看

有不少小伙伴说想了解模拟IC方向的面试题目,这不就来了!(文末可领全部面试题目) 1. 基尔霍夫定理的内容是什么? 电流定律:在集总电路中,任何时刻,对任一节点,所有流出节…

怎样让你的客户服务更高效

随着商业环境的变化,越来越多的企业开始意识到客户服务对于企业的重要性。高效的客户服务能够促进客户满意并增加销售额,从而帮助企业获得更大的成功。但是,怎样才能让您的客户服务更高效呢?以下是一些建议。 建立一个完善的客户…

浅水域三维探地雷达数值模拟研究

Gprmax浅水域三维地质雷达数值模拟研究 前言 浅水域地下不良地质体的探测一直是工程勘察的难点,地质雷达具有仪器轻便、操作简洁、分辨率高的优势,在浅水域勘察中具有很大的应用前景。目前,二维地质雷达已经有不少应用,三维地质…