操作系统考试复习——第四章 4.3连续分配存储管理方式

news2024/9/25 13:18:42

在这里的开头需要讲述一下碎片,碎片分为内碎片外碎片两种。

内碎片:分区之内未被利用的空间
外碎片:分区之间难以利用的空闲分区(通常是小空闲分区)。

连续分配存储管理方式:

为了能将用户程序装入内存,必须为它分配一定大小的内存空间。

1.单一连续分配

只能在单道程序环境下,整个内存的用户空间由单个程序独占。

剩余分配方式详见操作系统——内存分配与回收_操作系统内存回收_用编程写诗的博客-CSDN博客

2.固定分区分配

分区个数固定,分区大小固定。注意大小固定并不是大小相等!!!

将内存用户空间划分为若干个固定大小的区域,在每个分区中只装入一道作业。

划定分区的方法为:分区固定和分区不固定

一般会产生一个分区分配表如图所示:

固定分区的优点:它是最早出现的分区方法这个方法思路以及实现很简单,很容易实现。

固定分区的缺点:由于它的大小是固定的所以必然出现空间的浪费会产生很多内碎片。

3.动态分区分配

动态分区分配又称为可变分区分配。从名字中就可以看出来,它和固定分区分配所不同的就是它在分配内存分区的时候是动态的。它虽然解决了内碎片的问题但是会带来外碎片的问题。

它会产生一个空闲分区表区别于固定分区分配的分区说明表。如下表所示:

 动态分区的大小的不确定的那么它进行分配的时候就不是单独的进行寻找大小找到大小接近的分区那么简单了。需要考虑到动态分区分配算法了。这里提出三种顺序搜索的算法:

1.首次适应算法:

从首地址开始顺序查找,直到找到一个大小能满足要求的空闲分区为止。

该算法的优势:

1.就是优先利用了内存中低地址的部分的空闲分区,从而保留了高地址部分的大空闲。

但是它的缺点也很明显:

1.低地址部分被不断划分,导致留下了许多的难以利用的,很小的空闲分区也就是碎片。

2.每次查找都是从低地址开始查找由于低地址都先被占用了所以只能往后面找无疑是增大了很多开销。

2.最佳适应算法:

指的是每次在分配的时候总是把能满足要求的又是最小的空闲分区分配避免大材小用。该算法要求所有的空闲分区按照从小到大的顺序排列来提高寻找的速度。直接查找到最佳的位置。

该算法的优势:

1.就是第一次能找到的空闲分区肯定是最好的最合适的,从孤立来看该算法是最佳的。

但是它的缺点也很明显:

1.首先他需要从小到大进行排序并进行查找位置所以会增加很多开销尤其是对于计算机种成千上万的空闲位置。

2.其次它虽然是找到了最佳的位置但是在划分之后产生的空闲空间必然是最小的。例如需要占用8K内存系统分配了9K孤立来看肯定是最佳的但是产生的1K的空间很大概率无法再使用所以会产生很多碎片导致浪费。

3.最坏适应算法:

最坏适应算法和最佳适应算法是相反的,它是要求系统分配一个最大的空闲分区进行分配。它要求空闲分区按照从大到小的顺序进行排序。查找时候只需要看第一个是否满足分配即可。

该算法的优势:

1.由于最开始分配的空间是最大的,所以分配后剩下的空间不至于太小,所以产生的碎片不会太多不会产生碎片问题。

2.它在分配的时候进行查找空闲分区表的时候只需要看第一个大小是否满足即可所以效率很快。

但是它的缺点也很明显:

1.由于总是把最大的分区进行划分所以到最后系统中没有大的分区导致后面的大的进程无法分配相对应大小的空间。

上面讲述的基于顺序的查找算法,下面介绍基于索引的查找算法。这个主要掌握它的基本思想。

1.快速适应算法:这个是将空闲分区根据大小进行分类,对于每一类具有相同容量的所有空闲分区,单独设立一个空闲分区链表。该算法仅需要根据进程的长度,寻找到能容纳它的最小空闲区链表,并取下第一块进行分配即可。在分配过程中,不会对任何分区产生分割

2.伙伴系统:这个是无论已分配分区还是空闲分区它的大小都是2的K次幂

当需要为进程分配一个长度为 n 的存储空间时,首先计算一个 i 值,使 2^(i-1) < n ≤ 2^i,然后在空闲分区大小为 2^i 的空闲分区链表中查找。若找到则直接分配。否则,则在分区大小为 2^(i+1) 的空闲分区链表中寻找。若存在 2^(i+1) 的一个空闲分区,则把该空闲分区分为相等的两个分区,这两个分区称为一对伙伴,其中的一个分区用于分配,而把另一个加入分区大小为 2^i 的空闲分区链表中。若仍然找不到,依次类推去寻找更高1次幂的分区。
与一次分配可能要进行多次分割一样,一次回收也可能要进行多次合并,如回收大小为 2^i的空闲分区时,若事先已存在回收块所对应的2^i伙伴块的空闲分区时,则应将其与伙伴分区合并为大小为2^(i+1)的空闲分区,若事先已存在新合并空闲块对应的2^(i+1)伙伴块的空闲分区时,依次类推合并。

3.哈希算法:构造一张以空闲分区大小为关键字的哈希表,该表的每一个表项记录了一个对应的空闲分区链表表头指针。

关于内存的回收问题:

关于内存的回收,总共可以有四种情况:

1.回收区上面的分区是空闲分区

2.回收区下面的分区是空闲分区

3.回收区上面下面的分区都是空闲分区

4.回收区上面下面的分区都不是空闲分区

每种情况的回收情况

1.回收区在空闲区下面:

使用空闲链表的数据结构来保存空闲区,不需要新建空闲链表节点、只需要将空闲区的容量增大为原来空闲区和回收区的容量之和即可(也就是将回收区包含进来)

2.回收区在空闲区上面:

将回收区与空闲区合并的容量大小为新的空闲区的容量大小,新的空闲区在空闲链表中的地址使用之前回收区的地址

3.回收区在两个空闲区中间:

将两个回收区与空闲区合并的容量大小为新的空闲区的容量大小,新的空闲区在空闲链表中的地址使用之前空闲区1的地址

4.单独的回收区:

新建一个单独的地址节点放到空闲链表当中,大小为回收区的大小。

 

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

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

相关文章

力扣刷题Day12_2

144.二叉树的前序遍历 测试代码main() class TreeNode:def __init__(self, valNone, leftNone, rightNone):self.val valself.left leftself.right rightfrom typing import Listclass Solution:def preorderTraversal(self, root: TreeNode) -> List[int]:s Solution…

C++易错编程练习题(1)

0 编程练习 基础不牢靠&#xff0c;回头来补课。小白这个系列主要是为了重新打基础&#xff0c;为一些常见的易错编程练习题提供记录。其间若有错误&#xff0c;欢迎指出&#xff0c;轻喷勿骂。毕竟小白确实是基础不牢靠。 1 题目 自定义函数之整数处理。 题目描述 输入10个…

多视图局部共现和全局一致性学习提高乳腺图像分类的综合性

文章目录 Multi-view Local Co-occurrence and Global Consistency Learning Improve Mammogram Classification Generalisation摘要本文方法global consistency modulelocal co-occurrence module (LCM) 实验结果 Multi-view Local Co-occurrence and Global Consistency Lear…

okio篇3-超时机制

关于System.nanoTime System.currentTimeMills与System.nanoTime实际都是时间间隔&#xff0c;只不过两个时间的起始时间衡量不一致。 我们比较常用的&#xff0c;实际是System.currentTimeMills()&#xff0c;这个时间是以1970-01-01起始&#xff0c;到系统显示时间的间隔。…

聚浪成潮,网易数帆CodeWave智能开发平台开启低代码新时代

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 随着全球范围内新一代人工智能技术发展突飞猛进&#xff0c;社会各领域从数字化、网络化向智能化转变&#xff0c;如何进一步释放数据生产力、加速智能化转型已成为企业发展的必修课。 2023年4月25日&#xff0c;“网易数帆…

K8S管理系统项目实战[API开发]-2

后端: gogin 后端代码地址GitHub - yunixiangfeng/k8s-platform: K8s管理系统后端: gogin 5、存储与配置 5.1 ConfigMap 5.2 Secret 5.3 PersistentVolumeClaims 6、工作流 6.1 流程设计 6.2 数据库操作&#xff08;GORM&#xff09; &#xff08;1&#xff09;初始化…

Mysql Sharding-JDBC读写分离 原理

0 课程视频 深入Sharding-JDBC分库分表从入门到精通【黑马程序员】_哔哩哔哩_bilibili 1 基本概念 1.1应用逻辑 1.1.1 msyql 多库 多表 多服务器 1.1.2 通过Sharding-JDBC jar包->增强JDBC 访问多数据源 -> 自动处理成一个数据源 1.1.3 使用数据的人 -> 使用Sh…

Java面试题总结 | Java面试题总结12- 测试模块

测试 测试需要具备的素质 基础的理论知识、编程语言的功底、自动化测试工具、计算机基础知识 业务分析能力&#xff1a;分析业务的流程&#xff0c;分析被测业务数据、分析被测系统的框架、分析业务模块、分析测试所需资源、分析测试完成目标 缺陷洞察能力&#xff1a;一般…

【ChatGPT】吴恩达教程笔记(预备篇)

本文概要 众所周知&#xff0c;吴恩达老师与OpenAI联合推出了一门面向开发者的Prompt课程&#xff08;https://www.deeplearning.ai/short-courses/chatgpt-prompt-engineering-for-developers &#xff09;&#xff0c;时隔几天&#xff0c;吴恩达老师发推说已经有超过20万人…

Netty基础

2.1Netty是什么 是一个基于异步的&#xff08;多线程处理结果和接收&#xff09;、事件驱动的网络应用框架&#xff0c;用于基于快速开发可维护、高性能的网络服务器和客户端 异步是指调用时的异步&#xff0c;他的IO还是多路复用的IO 许多中间件都依赖与Netty zookperhado…

GUITAR PRO8吉他软件好不好用?值不值得下载

所谓“工欲善其事&#xff0c;必先利其器”&#xff0c;想成为一名专业甚至著名的音乐人&#xff0c;用到的工具软件非常多&#xff0c;在众多款软件工具中&#xff0c;Guitar Pro 8能满足乐谱创作者、学习者的所有需要。很多人在听到Guitar Pro这个名词时&#xff0c;本能反应…

spark的RDD算子计算

一、环境配置 import osfrom pyspark import SparkConf, SparkContextif __name__ __main__:os.environ[SPARK_HOME] /export/server/sparkos.environ["PYSPARK_PYTHON"] "/root/anaconda3/envs/pyspark_env/bin/python"os.environ["PYSPARK_DRIV…

JavaWeb07(MVC应用01[家居商城]连接数据库)

目录 一.什么是MVC设计模式&#xff1f; 1.2 MVC设计模式有什么优点&#xff1f; 二.MVC运用&#xff08;家居商城&#xff09; 2.1 实现登录 2.2 绑定轮播【随机三个商品】 2.2.1 效果预览 index.jsp 2.3 绑定最新上架&热门家居 2.3.1 效果预览 2.3.2 代码实现 数据…

linux进程基本知识

1.什么是程序&#xff0c;什么是进程&#xff1f; 程序是静态的概念&#xff0c;例如 gcc xx.c -o pro 磁盘中生成pro文件&#xff0c;叫做程序 进程是程序的一次运行活动&#xff0c;意思是程序跑起来了&#xff0c;系统中就多了一个进程 2.如何查看系统中有哪些进程&…

EMC VNX登录Unisphere错误 certificate has invalid date问题处理

经常有用户反应说&#xff0c;突然用浏览器登录EMC VNX或者Clarrion CX系统的时候出现“certificate has invalid date”的故障&#xff0c;然后无法正常登录图形界面。具体报错如下图所示&#xff1a; 导致这个问题的原因在于VNX系统中的certification认证过期&#xff0c;既然…

SpringBoot整合Echarts实现用户人数和性别展示

一、背景 在Web应用开发中&#xff0c;经常需要使用图表来展示数据&#xff0c;而Echarts是一个非常优秀的图表库。SpringBoot是一个非常流行的Java Web框架&#xff0c;它可以快速搭建Web应用。本文将介绍如何使用SpringBoot集成Echarts&#xff0c;实现展示用户人数和性别的…

百度百科如何创建?创建百度百科的秘诀你值得掌握(经验分享)

百度百科是中国最大的百科全书式的中文网站之一&#xff0c;是广大用户在互联网上获取知识的重要途径之一。任何人都可以在百度百科创建新的词条&#xff0c;为网站的发展作出贡献。 小媒同学将从如何创建百度百科词条和注意事项两个方面来详细介绍百度百科词条的创建流程和相关…

css3 flex弹性布局详解

css3 flex弹性布局详解 一、flexbox弹性盒子 2009年&#xff0c;W3C 提出了一种新的方案----Flex 布局&#xff0c;可以简便、完整、响应式地实现各种页面布局。目前&#xff0c;它已经得到了所有浏览器的支持&#xff0c;这意味着&#xff0c;现在就能很安全地使用这项功能。…

在选择数据库时需要考虑的因素

在文章的第一部分中&#xff0c;我们奠定了理解各种数据库类型及其用例的基础。随着我们继续探索数据库选择的艺术&#xff0c;我们现在将更深入地探讨影响这个决策过程的关键因素。通过更详细地检查每个因素&#xff0c;我们可以更好地装备自己做出符合项目要求的知情选择&…

ubuntu 卸载 软件包 libfdt-dev

编译环境 Win10 64位 ubuntu 20.04 虚拟机 VMware Workstation 16 Pro NUC980 bsp 自带的编译工具链&#xff1a; nuc980bsp.tar.gz&#xff0c;版本 gcc version 4.8.4 (GCC) NUC980 uboot : https://gitee.com/OpenNuvoton/NUC970_U-Boot_v2016.11 目标 手动编译 NUC9…