内存空间的分配与回收之连续分配管理方式

1.连续分配管理方式

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

1.单一连续分配

  • 在单一连续分配方式中,内存被分为系统区和用户区
  • 系统区通常位于内存的低地址部分,用于存放操作系统相关数据;
  • 用户区用于存放用户进程相关数据。
  • 内存中只能有一道用户程序,用户程序独占整个用户区空间。

在这里插入图片描述

  • 优点:实现简单,无外部碎片,可以采用覆盖技术扩充内存,不一定需要采取内存保护(eg:早期的PC操作系统MS-DOS) 。
  • 缺点:只能用于单用户、单任务的操作系统中,有内部碎片,存储器利用率极低。

分配给某进程的内存区域中,如果有些部分没有用上,就是“内部碎片”。

2.固定分区分配

  • 20世纪60年代出现了支持多道程序的系统,为了能在内存中装入多道程序,且这些程序之间又不会相互干扰,于是将整个用户空间划分为若干个固定大小的分区
  • 每个分区中只装入一道作业,这样就形成了最早的、最简单的一种可运行多道程序的内存管理方式。
1.分区大小相等:

缺乏灵活性,但是很适合用于用一台计算机控制多个相同对象的场合。
(比如:钢铁厂有n个相同的炼钢炉,就可把内存分为n个大小相等的区域存放n个炼钢炉控制程序)

2.分区大小不等:

增加了灵活性,可以满足不同大小的进程需求。
根据常在系统中运行的作业大小情况进行划分(比如:划分多个小分区、适量中等分区、少量大分区)

3.数据结构:分区说明表

操作系统需要建立一个数据结构――分区说明表,来实现各个分区的分配与回收。

  • 每个表项对应一个分区,通常按分区大小排列。
  • 每个表项包括对应分区的大小、起始地址、状态(是否已分配)。

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

  • 优点:实现简单,无外部碎片
  • 缺点: a.当用户程序太大时,可能所有的分区都不能满足需求,此时不得不采用覆盖技术来解决,但这又会降低性能;b.会产生内部碎片,内存利用率低。

3.动态分区分配

  • 动态分区分配又称为可变分区分配。
  • 这种分配方式不会预先划分内存分区,而是在进程装入内存时,根据进程的大小动态地建立分区
  • 并使分区的大小正好适合进程的需要。
  • 因此系统分区的大小和数目是可变的。

(eg:假设某计算机内存大小为64MB,系统区8MB,用户区共56 MB…)

1.两种常用的数据结构

1.空闲分区表
空闲分区表:每个空闲分区对应个表项。
表项中包含分区号、分区大小、分区起始地址等信息.
在这里插入图片描述

2.空闲分区链
空闲分区链:每个分区的起始部分和末尾部分分别设置前向指针和后向指针。
起始部分处还可记录分区大小等信息.
在这里插入图片描述

2.空闲分区的选择

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

3.外部碎片的处理
  • 动态分区分配没有内部碎片,但是有外部碎片
  • 内部碎片,分配给某进程的内存区域中,有些部分没有用上。
  • 外部碎片,是指内存中的某些空闲分区由于太小而难以利用。

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

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

回收内存分区时,相邻的空闲分区要合并。

2.非连续分配管理方式

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

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

相关文章

2023年淘宝天猫双11活动时间什么时候开始到几月几号结束?

2023年淘宝天猫双11超级红包领取时间 第一阶段:2023年10月24日20:00 至11月03日23:59 第二阶段:2023年11月04日00:00 至 11月11日23:59 2023年淘宝天猫双11超级红包使用时间 第一阶段:2023年10月31日20:00 至11月03日23:59 第二阶段&…

Xcode 14.3.1build 报错整理

1、Command PhaseScriptExecution failed with a nonzero exit code 2、In /Users/XX/XX/XX/fayuan-mediator-app-rn/ios/Pods/CocoaLibEvent/lib/libevent.a(buffer.o), building for iOS Simulator, but linking in object file built for iOS, file /Users/XX/XX/XX/fayuan…

微服务设计原则:构建弹性和可维护的应用

文章目录 1. 单一职责原则2. 独立性和自治性3. 弹性和容错性4. API 网关5. 日志和监控6. 版本管理7. 自动化部署和持续集成8. 安全性9. 数据一致性10. 文档和通信拓展思考结论 🎉欢迎来到架构设计专栏~微服务设计原则:构建弹性和可维护的应用 ☆* o(≧▽…

Qt打开ui文件经常报错

报错如下: 解决方法: 最后设置成默认值 即可

竞赛选题 深度学习 机器视觉 人脸识别系统 - opencv python

文章目录 0 前言1 机器学习-人脸识别过程人脸检测人脸对其人脸特征向量化人脸识别 2 深度学习-人脸识别过程人脸检测人脸识别Metric Larning 3 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习 机器视觉 人脸识别系统 该项目…

高并发下的服务容错

在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用,但是由于网络 原因或者自身的原因,服务并不能保证服务的100%可用,如果单个服务出现问题,调用这个服务就会 出现网络延迟&#xf…

计算机网络传输层知识总结·

传输层提供的服务 传输层的功能 ●传输层提供进程之间的逻辑通信,即端到端的通信 ●复用和分用 ●差错检测(首部和数据部分) ●面向连接的TCP和无连接的UDP 端口的作用 ●端口标识的是主机中的进程 ●硬件端口是不同…

3D WEB轻量化引擎HOOPS:促进CAD软件的创新与协作

CAD软件一直以来都在现代工程、建筑、制造和设计领域发挥着至关重要的作用。在数字时代,CAD软件的开发者不断追求提高软件性能、增加功能和改善用户体验,在这一努力中,HOOPS技术(高度优化的面向对象并行软件)滑块露头角…

IDEA启动报错Failed to create JVM. JVM path的解决办法

今天启动IDEA时IDEA报错,提示如下。 if you already hava a JDK installed, define a JAVA_HOME variable in Computer > Systen Properties > System Settings > Environment Variables.Failed to create JVM. JVM path:D:\ideaIU2023.2.3\IntelliJ IDE…

使用c++视觉处理----canny 边缘检测、sobel边缘检测、scharr 滤波边缘检测

使用c视觉处理canny 边缘检测、sobel边缘检测、scharr 滤波边缘检测 #include <opencv2/opencv.hpp>int main() {// 读取图像cv::Mat image cv::imread("1.jpg", cv::IMREAD_GRAYSCALE); // 转为灰度图像if (image.empty()) {std::cerr << "无法加…

混凝土搅拌站预拌厂数字孪生可视化管理系统,三维可视化数据监控平台

本项目基于三维建模、数据融合等技术&#xff0c;构建一套实时的混凝土搅拌站厂区数字孪生可视化系统&#xff0c;提升混凝土搅拌站厂区信息化建设水平。 通过三维可视化项目的建设&#xff0c;实现搅拌站厂区展示和漫游、生产流程中设备的实时映射孪生、关键设备参数及指标图…

关于一篇什么是JWT的原理与实际应用

目录 一.介绍 1.1.什么是JWT 二.结构 三.Jwt的工具类的使用 3.1. 依赖 3.2.工具类 3.3.过滤器 3.4.控制器 3.5.配置 3.6. 测试类 用于生成JWT 解析Jwt 复制jwt&#xff0c;并延时30分钟 测试JWT的有效时间 测试过期JWT的解析 四.应用 今天就到这了&#xff0c;希…

NLP项目:维基百科文章爬虫和分类【02】 - 语料库转换管道

一、说明 我的NLP项目在维基百科条目上下载、处理和应用机器学习算法。相关上一篇文章中&#xff0c;展示了项目大纲&#xff0c;并建立了它的基础。首先&#xff0c;一个 Wikipedia 爬网程序对象&#xff0c;它按名称搜索文章&#xff0c;提取标题、类别、内容和相关页面&…

@Mapper与@MapperScan注解

Mapper Mapper Mapper.xml文件 作用在dao&#xff08;mapper&#xff09;层上的一个注解&#xff0c;将接口生成一个动态代理类&#xff0c;有了这个注解就不用 再写Mapper.xml文件 如果缺少这个注解&#xff0c;运行项目就会报相应的错误 Field userMapper in com.example…

electron 升级 v22 遇到问题

Electron 漏洞 https://mp.weixin.qq.com/s/5LpSJb_5uV8EIDOl3fz9Tw 由于 23以上不在支持win 7 8 8.1 所以我选择安装 v22.3.24 electron 22.3.24 node-sass 6.0.1 sass-loader 10.4.1 对应的版本 npm i node-sass6.0.1 --sass_binary_sitehttps://npm.taobao.org/mirrors…

深度学习基础知识 BatchNorm、LayerNorm、GroupNorm的用法解析

深度学习基础知识 BatchNorm、LayerNorm、GroupNorm的用法解析 1、BatchNorm2、LayerNorm3、GroupNorm用法&#xff1a; BatchNorm、LayerNorm 和 GroupNorm 都是深度学习中常用的归一化方式。 它们通过将输入归一化到均值为 0 和方差为 1 的分布中&#xff0c;来防止梯度消失和…

深度神经网络压缩与加速技术

// 深度神经网络是深度学习的一种框架&#xff0c;它是一种具备至少一个隐层的神经网络。与浅层神经网络类似&#xff0c;深度神经网络也能够为复杂非线性系统提供建模&#xff0c;但多出的层次为模型提供了更高的抽象层次&#xff0c;因而提高了模型的能力。深度神经网络是一…

链表(3):双链表

引入 我们之前学的单向链表有什么缺点呢&#xff1f; 缺点&#xff1a;后一个节点无法看到前一个节点的内容 那我们就多设置一个格子prev用来存放前面一个节点的地址&#xff0c;第一个节点的prev存最后一个节点的地址&#xff08;一般是null&#xff09; 这样一个无头双向…

Golang 实现接口和继承

小猴子继承了老猴子&#xff0c;这样老猴子拥有的能力包括字段&#xff0c;方法就会自动的被老猴子继承。 小猴子不需要做任何处理就可以拿到老猴子的字段和它的方法&#xff0c;因为是继承关系。 但是小猴子还会其他的技能&#xff0c;比如还会像小鸟一样飞翔&#xff0c;希…

VR全景营销颠覆传统营销,让消费者身临其境

随着VR的普及&#xff0c;各种VR产品、功能开始层出不穷&#xff0c;并且在多个领域都有落地应用&#xff0c;例如文旅、景区、酒店、餐饮、工厂、地产、汽车等&#xff0c;在这个“内容为王”的时代&#xff0c;VR全景展示也是一种新的内容表达方式。 VR全景营销让消费者沉浸式…