[操作系统笔记]连续分配管理方式

news2024/12/26 23:00:33

内容系听课复习所做笔记,图例多来自课程截图

连续分配管理方式

在这里插入图片描述

连续分配:指为用户进程分配的必须是一个连续的内存空间

相应地,非连续分配可以是离散的


对于固定分区分配,需要有一个分区说明表,类似下表:

分区号大小(MB)起始地址状态
128未分配
2210已分配
3412已分配

当某用户程序要装入内存时,由操作系统内核程序根据用户程序大小检索该表,从中找到一个能满足大小的、未分配的分区,将之分配给该程序,然后修改状态为“已分配”。

动态分区分配的诸多问题

  1. 使用什么样的数据结构记录内存使用情况
  2. 当多个空闲分区都能满足需求时,应该选择哪个分区进行分配
  3. 如何进行分区的分配与回收操作

在这里插入图片描述

记录内存使用情况的数据结构

分为两种:

  • 空闲分区表(长得跟上面那个表挺像,有分区号、分区大小、分区起始位置等)
  • 空闲分区链(是双向链表)

动态分区分配算法

把一个新作业装入内存时,须按照一定的动态分区分配算法,从空闲分区表(或空闲分区链)中选出一个分区分配给该作业。由于分配算法算法对系统性能有很大的影响,因此人们对它进行了广泛的研究。

在这里插入图片描述

首次适应算法

实现方式:空闲分区以地址递增的次序排列。每次分配内存时按顺序查找(从地址最小的空闲分区开始)空闲分区链(或空闲分区表),找到首个大小能满足要求的空闲分区。

当然,分配完之后肯定要修改原空闲分区表(链)的数据,比如把第二个分区(大小4MB)分配给一个需要3MB空间的进程,那么分区表就得把第二个分区大小改为1MB。

最佳适应算法

算法思想:由于动态分区分配是一种连续分配方式,为各进程分配的空间必须是连续的一整片区域。因此为了保证当“大进程”到来时能有连续的大片空间,可以尽可能多地留下大片的空闲区

原则就是:优先使用更小的空闲区

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

找到的必然是满足需要的最小的空闲分区


缺点:每次都选最小的分区进行分配会留下越来越多的、很小的、难以利用的内存块(因为用来分配的空闲分区大小不总是和需要的空间大小相同,因此总会留下空余的、更小的新的空闲空间)。因此这种方法会产生很多的外部碎片。

最坏适应算法

又称:最大适应算法(Largest Fit)

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

如何实现:空闲分区按容量递减次序链接。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。

如果分配时第一个空闲分区都不能满足需要,那后面的也不用看了,肯定不行

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

邻近适应算法

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

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


首次适应算法每次都要从头查找,每次都需要检索低地址的小分区。但是这种规则也决定了当低地址部分有更小的分区可以满足需求时,会更有可能用到低地址部分的小分区,也会更有可能把高地址部分的大分区保留下来(最佳适应算法的优点)

邻近适应算法的规则可能会导致无论低地址、高地址部分的空闲分区都有相同的概率被使用,也就导致了高地址部分的大分区更可能被使用(划分为小分区),最后导致无大分区可用(最大适应算法的缺点)

总结

最佳适应和最坏适应是有额外开销的,即对空闲空间的按大小进行排序;但是首次适应和邻近适应没有。

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

如何进行分区的分配与回收

分配:如果采用分区表,就得修改其中条目(分区大小和起始地址),如果一整条记录对应的分区都被分配了,那么就删掉这条记录(因为记录是要记录空闲的)

回收:如果回收的空间挨着(分为前边挨着、后边挨着和前后两边都挨着)已记录的空闲空间,就得在记录中将之合并;如果回收区的前后均未邻接空闲分区,则应增加(新建)记录

看好了啊,回收一共是四种情况:前边挨着、后边挨着、前后两边都挨着和前后两边都不挨着空闲空间

总而言之的原则就是相邻的空闲区间要合并


分区表各表项的顺序不一定按照地址递增顺序排列,具体的排列方式需要依据动态分区分配算法来确定。

内部碎片和外部碎片

内部碎片:分配给某进程的内存区域中,如果有些部分没有用上。
外部碎片:是指内存中的某些空闲分区由于太小而难以利用。

如果内存中空闲空间的总和本来可以满足某进程的要求,但由于进程需要的是一整块连续的内存空间,因此这些“碎片”不能满足进程的需求。

可以通过紧凑技术(或称拼凑技术, Compaction)来解决外部碎片

技术性质
单一连续分配无外部碎片,有内部碎片
固定分区分配无外部碎片,有内部碎片
动态分区分配无内部碎片,有外部碎片

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

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

相关文章

【jmeter录制浏览器上特定的单个请求】

目录准备工作jmeter代理设置设置postman代理复制浏览器是特定的url背景:想要对浏览器某一个请求做测试,直接手动输入到jmeter不切实际,一般是使用jmeter代理的方式录制下来,但会有个问题,一般浏览器加载许多其他请求&a…

在虚拟机中安装Linux操作系统详细步骤

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 在虚拟机中安装Linux操作系统详细步骤专栏:《Linux从小白到大神》| 系统学习Linux开发、VI…

达梦数据库表空间误删恢复实操

达梦数据库表空间误删恢复实操1.表空间失效文件检查2.表空间失效文件恢复准备3.表空间失效文件恢复4.表空间失效文件恢复实操1.表空间失效文件检查 表空间恢复失效文件的检查。 语法格式 SP_FILE_SYS_CHECK ();语句功能 在 LINUX 操作系统下,检查是否有数据文件被…

一个已经存在10年,却被严重低估的 Python 库

今天介绍的是一个已经存在十年,但是依旧不红的库 decorator,好像很少有人知道他的存在一样。 这个库可以帮你做什么呢 ? 其实很简单,就是可以帮你更方便地写python装饰器代码,更重要的是,它让 Python 中被…

代码随想录刷题Day52 | 300. 最长递增子序列 | 674. 最长连续递增序列 | 718. 最长重复子数组

代码随想录刷题Day52 | 300. 最长递增子序列 | 674. 最长连续递增序列 | 718. 最长重复子数组 300. 最长递增子序列 题目: 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或…

2022年NPDP新版教材知识集锦--【第四章节】(6)

《产品经理认证(NPDP)知识体系指南(第2版)》已于2022年4月正式上架发行,新版教材自2022年11月NPDP考试起使用。将新版NPDP教材中的相关知识点进行了整理汇总,包括详细设计与规格阶段相关内容,快来看看吧。 【制造与装配阶段】(全部获取文末) …

SAP-ABAP-企业微信:ZCSM37-后台JOB异常检查主动推送企业微信群

场景:异常JOB主动推送企业微信群 (企业微信机器人可百度创建,注意群不能有企业外的人员,否则接口无效) 事务代码:ZSM37_CHECK程序名称:ZSM37_CHECK程序目的: ZCSM37-后台JOB异常检…

Java+JSP+MySQL基于SSM的物流公司物流订单管理系统-计算机毕业设计

项目介绍 随着我国经济的高速增长,物流快递的数量也在不断的增加,同时面临的就是如何更加方便快捷和高效的管理物流订单的问题,传统模式的物流订单管理模式明显已经不能够满足当下的需求,于是我们提出了基于B/S的贴心物流公司物流…

Redis未授权漏洞利用

1、背景介绍 近期公司内部安装主机安全组件,检测出一些安全漏洞,其中就有利用redis未授权漏洞进行攻击。 2、攻击原理 正常redis默认情况下,会绑定在0.0.0.0:6379,如果没有限制来源IP并且甚至没有密码,那么就会导致…

举个栗子~Minitab 技巧(5):掌握常用快捷键,提高统计分析效率

在日常使用 Minitab 时,大部分小伙伴的习惯是使用鼠标进行点击和拖拽等操作。然而,在使用频率很高的情况下,这种方式会带来很多重复且低效的劳动。 其实,Minitab 软件内置了许多快捷键,可以快速实现新建、打开、保存、…

虹科分析 | 终端安全 | 移动目标防御是“变革性”技术——GARTNER

使用前Gartner连续第二年将移动目标防御(MTD)作为特色技术,并将Morphisec作为该技术的样本供应商,在其报告《新兴技术影响雷达:安全》中。作者将MTD定义为“…一种技术趋势,其中动态或静态排列变形、转换或…

sentinel中流控规则 并发线程数的实战理解

先看下官网文档关于并发线程数的解释:链接地址 public class FlowThreadDemo {private static AtomicInteger pass new AtomicInteger();private static AtomicInteger block new AtomicInteger();private static AtomicInteger total new AtomicInteger();priva…

linux_mysql安装教程带安装包(亲测有效)

文章目录1.检查当前系统是否安装mysql2.上传mysql安装包/opt/software目录下3.解压安装包4.在安装目录下执行rpm安装5.删除/etc/my.cnf文件中datadir指向的目录下所有内容,6.初始化数据库7.查看临时生成的root用户密码8.启动mysql服务9.登陆mysql数据库10.修改root用…

Fiddler导出JMeter脚本插件原理

目录 一、Fiddler导出JMeter脚本插件原理 二、Fiddler导出JMeter脚本插件的基本使用 结语 一、Fiddler导出JMeter脚本插件原理 既然JMeter本质上是一个xml文档,Fiddler可以抓取HTTP请求包,插件的基本原理就是Fiddler抓取HTTP请求包将HTTP请求信息通过…

【电商项目实战】修改密码(详细篇)

🍁博客主页:👉不会压弯的小飞侠 ✨欢迎关注:👉点赞👍收藏⭐留言✒ ✨系列专栏:👉SpringBoot电商项目实战 ✨学习社区: 👉不会压弯的小飞侠 ✨知足上进&#x…

乾元通4G/5G多链路聚合设备在公共安全通信方面解决方案

政府部门对应急指挥系统提出了更高的要求,在特殊情况下需要能够迅速建立紧急指挥中心,通过应急指挥系统统一协调、统一调度相关部门协同工作,达到“及时了解,快速反应,准确决策,统一调度,妥善处…

面试半年,上个月成功拿到阿里offer,全靠我啃烂了学长给的这份笔记

前言 不论是校招还是社招都避免不了各种⾯试、笔试,如何去准备这些东⻄就显得格外重要。不论是笔试还是⾯试都是有章可循的,我这个“有章可循”说的意思只是说应对技术⾯试是可以提前准备,所谓不打无准备的仗就是这个道理。 以下为大家&…

牛血清白蛋白修饰葡萄糖 BSA-glucose,木糖/半乳糖/乳糖偶联牛血清白蛋白

产品名称:牛血清白蛋白修饰葡萄糖 英文名称: BSA-glucose 用途:科研 状态:固体/粉末/溶液 产品规格:1g/5g/10g 保存:冷藏 储藏条件:-20℃ 储存时间:1年 牛血清中的简单蛋白&…

创作纪念日 编程练习 - 斐波那契数列

文章目录我的第一次今日份练习| 斐波那契数列憧憬我的第一次 第一次浏览CSDN的时候刚开始学C的时候,当时的课设是《C & SQL 2008的学生管理系统》,C作前段界面、逻辑处理,SQL作为后端服务器支持的题目,当时不太认真学习&…

化纤企业净利润下滑,纺织企业如何利用APS排产减轻盈余压力

根据国家统计局数据,2022年前三季度,全国规模以上纺织企业工业增加值同比减少0.4%,营业收入同比增长3.1%,利润总额同比减少23.6%,增速均较上年同期有所放缓。 从全产业链看,中下游印染、长丝织造、服装等分…