操作系统——内存分区管理

本章主要讨论为什么要给内存进行划分和如何划分的问题。
为了给每一个进程都分配一个大小合适的内存块
以连续存储进程的程序和数据,使得各进程可以并发执行

目录

一、内存的划分方法

1、固定分区法

2、动态分区法

3、动态分区的数据管理结构

二、分区的分配与回收

1、固定分区的分配与回收

2、动态分区的分配

1)最先适应算法

2)最佳适应算法

3)最坏适应算法

3、动态分区的回收与拼接

4、最先、最佳、最坏算法优缺点

5、分区管理优缺点


一、内存的划分方法

1、固定分区法

把内存固定的划分为让若干大小不等的内存块
划分主要由操作系统和管理员进行
一旦划分结束,整个内存分区个数以及各个分区大小将不会发生变化
如何对整个分区进行管理?
例如内存块有多大?地址范围是多少?哪些内存块被使用?哪些空闲?等等
上述的管理信息使用分区说明表
分区说明表记录信息:顺序分区号、各分区长度、分区起始地址、分区状态
如图所示:(操作系统占用低20K的地址)

上述固定分区法的先天缺陷是:分配效率低
因为有可能小进程也要占据大分区,导致浪费
于是有了动态法

2、动态分区法

在进程执行前不划分区域,而是在执行过程中进行
可以随着进程对内存的需求进行调整,效率更高
在系统开机初期,内存中只有一个操作系统进程
其余部分都是空闲,分配程序将该空闲部分依次划分给被调度的进程
如图所示:来一个,分配一个,要多少,给多少

但是,随着程序的运行,势必有些进程会结束
结束的进程就要被释放
那么被释放的这部分空间,如何处理?

如何释放?
进程结束后,所占用的内存资源就要被释放
该部分内存状态被标志为空闲

释放后如何管理?
被释放的空闲内存块可能是在中间(前后都被使用)
此时,如果后续如果新的进程需要调度
并且该空闲内存块正好大于 / 等于 所需内存
则分配给新调度的进程

如果被回收的分区有邻接的空闲区,则合并
如图所示:

3、动态分区的数据管理结构

动态分区为了更好的管理分区,也需要有相应的数据结构支持
有:可用表、自由链、请求表

可用表:记录哪些分区可用(空闲)
自由链表:每个空闲内存区会记录本区的大小 和 下一个空闲区的开始地址
                从而将整个空闲区连接起来
请求表:描述被调度进程所需要的内存资源大小

上述三个表的逻辑结构如下图所示:

现在我们将内存给划分好了
之后要做的是给进程分配合理的内存块
同时,对使用完了的进程要进行资源回收
那么,这个过程是如何进行的?

二、分区的分配与回收

(“与” 和 “和”的区别:前者书面,后者口语)

1、固定分区的分配与回收

分配:
1、当进程被调度时,通过请求表请求内存
2、从头开始遍历分区说明表
3、直到找到一个合适的分区,分配之
4、如果直到分区说明表结束都没有匹配,则无法分配

分配算法如图所示:

回收:进程资源使用完毕,直接将对应分区状态设置为空闲即可

2、动态分区的分配

动态分区主要解决三个问题:
1)对请求表的请求内存大小,要从可用表 / 自由链中找到合适的空闲空间
2)分配空闲区后,要更新可用表 / 自由链
3)进程或作业释放资源时,和相邻的空闲区进行合并,并更新可用表 / 自由链

一般的,从可用表 / 自由链中查找空闲区的方法有三种:
最先适应算法、最佳适应算法、最坏适应算法
算法的执行都是建立在特定的数据结构基础上的
例如,折半查找就是建立在数据集处于有序的基础上
上述三个算法,其本质就是不同的数据组织方式
因此,三种算法各自对应不同的数据结构

1)最先适应算法

要求:可用表 / 自由链按起地址递增方式排列
查找机制:
从头逐个查找,一旦找到大于 / 等于 所要求内存长度的分区,则结束探索,分配

2)最佳适应算法

要求:可用表 / 自由链按空闲区从小到大的顺序排列
查找机制:
从头逐个查找,直到找到第一满足要求的空闲区,则结束探索,分配

3)最坏适应算法

要求:可用表 / 自由链按空闲区从大到小的顺序排列

查找机制:
从头逐个查找,如果第一个最大的空闲都不匹配,说明整个空间都不会匹配,分配失败,返回
如果匹配,直接给
每一次都找最大的一块给进程

3、动态分区的回收与拼接

被释放的分区需要重新插入可用表 / 自由链中
很好理解,因为资源被使用完后,需要被释放,以备复用
可是为什么非要拼接呢?
因为如果不进行拼接,而直接插入
会导致存在大量的、零碎的可用内存块
直接导致内存浪费,因为很有可能被分割的很小的内存块
可能永远都不会被使用
因此需要拼接
可是怎么拼接呢?
很简单,相邻就拼接
考虑到相邻,自然的会有4种状态:
这四种状态分别是:上下都空闲、上 / 下空闲、上下都不空闲
如图所示:

对四种情况进行拼接与插入处理:
一、上下都空闲
将3个空闲区合并
起始地址取上空闲区起始地址
大小为3块之和
取消后两块在可用表 / 自由链中的记录
修改上空闲去的相关数据

二、上 / 下空闲
将2个空闲区合并
大小为2块之和
修改相关空闲区的数据

三、上下都不空闲
自立为王,单干

4、最先、最佳、最坏算法优缺点

最先适应算法:
速度块,因为最佳/最坏算法都需要对空闲区进行排序,排序本身就需要检索操作
修改时,无需改变该空闲块在表 / 链表中的位置
只需要修改块的起始位置和长度

最佳适应算法:
最佳适应算法将空闲区从小到大排序
找到所允许的最小空闲块
看起来最佳,但是并不一定利用率最高
例如:
前面的部分块长度很小
于是很多进程没法用,只能用后面的块
分配后,剩余的部分又将成为一个小空闲块
这些小空闲块很小,可能永远都不会被使用
同时,增加查找的开销
最坏算法正是基于这种情况进行分配的
先用大的,
于是剩下的空闲块也大
避免被过于分割

5、分区管理优缺点

优点:
1)在内存中保持多个进程同时存在,提高系统资源利用率
2)要求硬件少

缺点
1)内存利用仍旧不高,主要小碎片内存块多
2)进程大小受到分区大小限制,进程太大可能直接无法执行
3)各个分区封闭,不能共享

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

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

相关文章

ML 系列: 第 24 节 — 离散概率分布(泊松分布)

目录 一、说明 二、固定时间间隔示例 三、固定间隔的示例 四、泊松分布的主要特征 五、示例 5.1 平均客户数的计算: 5.2 用于计算和绘制泊松分布的 Python 代码: 一、说明 泊松概率分布是一种离散概率分布,它表示在固定的时间或空间间隔内发生…

【comfyui教程】如何用 ComfyUI 修复和上色老照片?详细教程让老照片焕发新生

前言 如何用 ComfyUI 修复和上色老照片?详细教程让老照片焕发新生 老照片承载着无数回忆,可时光不饶人,随着岁月流逝,它们渐渐变得模糊、泛黄,甚至出现了褪色、裂痕。对于想要留住这份珍贵记忆的人来说,修…

ThinkServer SR658H V2服务器BMC做raid与装系统

目录 前提准备 一. 给磁盘做raid 二. 安装系统 前提准备 磁盘和系统BMC地址都已经准备好,可正常使用。 例: 设备BMC地址:10.99.240.196 一. 给磁盘做raid 要求: 1. 将两个894G的磁盘做成raid1 2. 将两块14902G的磁盘各自做…

BUUCTF pwn2_sctf_2016 int 0x80方法

本文目的 BUUCTF的PWN的第一页的pwn2_sctf_2016的libc不适用辣,但网上一搜全是libc 然后怎么办嘞,都明摆着有个int 0x80,当然是用啊 所以水一篇 早上中午晚上好 老三样,下载程序,打开ida,拖进去 一眼好几…

如何构建一个功能强大的低代码平台网站?关键步骤与技巧全解析

随着数字化转型的加速,企业对敏捷开发和快速迭代的需求越来越迫切。低代码平台应运而生,成为连接业务需求和技术实现的重要桥梁。低代码平台不仅能够大幅降低技术门槛,还能够通过可视化界面和预配置组件简化开发流程,帮助企业快速…

Unity图形学之Shader2.0 模板测试

1.模版测试:符合条件的 通过 不符合条件的 像素 丢弃 比较公式: if((referenceValue&readMask) comparisonFunction (stencilBufferValue&readMask)) 通过像素 else 抛弃…

RK3588 快速上手

1、资料介绍 我的开发板是临滴科技的LKD3588,相关的官网上都可以找到,我这里给大家一个网盘链接 LKD3588-开发板(公开资料) https://pan.baidu.com/s/1snYcWY-S4rLMCE_3nGlHrw?pwd3588 LKD3588-开发板(保密资料&…

STM32完全学习——点亮LED灯

一、寄存器描述 首先我们知道STM32对外设的操作,是靠对寄存器的设置来完成的。因此我们想要点亮LED灯,就需要知道端口的控制寄存器,然后给寄存器设置不同的值就可以让端口来输出0或1,首先我这里使用的是GPIOA这个端口的0-8位来做…

【Python】如何使用Python-Tkinter打造炫酷动态心形动画 !保姆级教程

文章目录 教程:从零开始,逐步实现动态心形动画环境准备第一步:导入必要的模块第二步:定义画布参数第三步:定义心形生成函数第四步:实现点的散布与收缩第五步:定义曲线函数第六步:创建…

基于SSM的“家政预约管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SSM的“家政预约管理系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 家政预约管理系统功能结构图 系统首页界面 用户注册界面 家政…

MongoDB在现代Web开发中的应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 MongoDB在现代Web开发中的应用 MongoDB在现代Web开发中的应用 MongoDB在现代Web开发中的应用 引言 MongoDB 概述 定义与原理 发展…

springboot企业信息管理系统,计算机毕业设计项目源码310,计算机毕设程序(LW+开题报告、中期报告、任务书等全套方案)

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,员工信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广…

【JAVA毕业设计】基于Vue和SpringBoot的周边产品销售网站

博主说明:本文项目编号 T 061 ,文末自助获取源码 \color{red}{T061,文末自助获取源码} T061,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…

YOLOV8应用|排球垫球计数|附带全部数据集与源码(见文末百度云盘链接)

项目简介: 该项目旨在利用YOLOv8算法实现排球垫球动作的自动识别与计数。YOLOv8作为计算机视觉领域的先进目标检测算法,具备高精度和实时性的特点,非常适合用于体育训练和测试中的自动化计数。项目将排球垫球视频作为输入,通过YOLOv8算法检测视频中的排球及垫球动作,自动…

【工具变量】上市公司企业生产经营效率数据集(1990-2023年)

一、计算说明: 参考《数量经济技术经济研究》沈坤荣(2024)老师的研究,为了度量企业生产经营效率,选取管理费用率(manage_cost)、营运资金周转率(fund_turn)和总资产周转…

Openstack10--认证服务(Keystone)安装

在控制节点安装认证服务组件 yum -y install openstack-keystone httpd mod_wsgi 其中“openstack-keystone”是Keystone的软件包;“httpd”是阿帕奇(Apache)Web服务器的软件包名;“mod_wsgi”是使Web服务器支持WSGI的插件。 进…

从0开始学PHP面向对象内容之(常用魔术方法续二)

哈喽朋友们,I am comming,今天把剩下的常用魔术方法讲了,话不多说开始正文 常用魔术方法(续二) 一、__toString() __toString() 是 PHP 提供的一个魔术方法,用于定义对象在被转换为字符串时的行为。它在某…

CSS 技巧:如何让 div 完美填充 td 高度

引言 一天哈比比突然冒出一个毫无理头的一个问题: 本文就该问题进行展开… 原文链接: 昆仑虚F2E 一、需求说明 大致需求如下, 当然这里做了些简化 有如下初始代码: 一个自适应的表格每个单元格的宽度固定 200px每个单元格高度则是自适应每个单元格内是一个 div 标签, div 标签…

清华、国科大、智谱团队提出LongReward:利用AI反馈改进长文本大语言模型

长文本(Long-context)大模型性能的优劣,在很大程度上取决于其能否全面理解长上下文场景下的复杂信息。 然而,现有的合成有监督微调(SFT)数据由于缺少人类核验,往往会影响长文本大模型的性能&am…

2024 年 10 款替代 Postman 的工具,有免费有开源

10 款替代 Postman 的工具,有免费有开源: 工具名称支持的系统是否免费是否开源ApifoxWindows, macOS, Linux免费否Yapi无限制是是InsomniaWindows, macOS, Linux免费版付费版是Hoppscotch浏览器是是SoapUIWindows, macOS, Linux免费版付费版是Katalon S…