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

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,一经查实,立即删除!

相关文章

BES耳机空间音频技术实现

BES耳机空间音频技术实现 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?加我微信hezkz17, 本群提供音频技术答疑服务 音响和耳机在空间音频技术上实现方式是不同的 虚拟现实可谓是空间音频技术最具代表性的应 用领域。虽然虚拟现实的起源可以追溯到1 9 6 8年, …

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 第二阶段&…

字符串左旋 与 字符串旋转结果

字符串左旋 实现一个函数&#xff0c;可以左旋字符串中的k个字符。 例如&#xff1a; ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 方法1 三步翻转法 要求:abcdef 左旋两个 整体逆序:fedcba左边逆序:cdef ba右边逆序:cdef ab #include<stdio.h> #include<…

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. 文档和通信拓展思考结论 &#x1f389;欢迎来到架构设计专栏~微服务设计原则&#xff1a;构建弹性和可维护的应用 ☆* o(≧▽…

Qt打开ui文件经常报错

报错如下&#xff1a; 解决方法&#xff1a; 最后设置成默认值 即可

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

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

高并发下的服务容错

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

平面设计师之路 优漫动游

1、入门 平面设计师之路 首先将几个原则&#xff0c;不管你记得住记不住&#xff0c;这些方式和态度决定了你能够深入到平面设计的哪一步。 原则一&#xff1a;实践是掌握真理的唯一途径。这句话是衍生物&#xff0c;因为我觉得原来的那句话实验性质太浓厚了&#xff0c…

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

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

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

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

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

今天启动IDEA时IDEA报错&#xff0c;提示如下。 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 << "无法加…

Spring Boot 中常用的注解@RequestParam

Spring Boot 中常用的注解RequestParam RequestParam 是 Spring Framework 和 Spring Boot 中常用的注解之一&#xff0c;用于从请求中获取参数值。它通常用于处理 HTTP 请求中的查询参数&#xff08;query parameters&#xff09;或表单数据。下面详细解释 RequestParam 的用…

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

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

GPU如何统计显存占用

GPU统计显存占用有两种方法&#xff1a; 方法1&#xff1a; 使用 watch -n 1 nvidia-smi 这个会2秒刷新一次&#xff0c;可以在一个终端运行程序另外一个终端执行这个然后看具体的显存变化【很费劲&#xff0c;而且可能一闪而过】 方法2&#xff1a; 要统计程序的最大显存…

关于一篇什么是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…

Docker 安装 MySQL5.7

Docker 安装 MySQL5.7 查看 docker 仓库中的 mysql 命令 docker search mysql 选择 pull 到系统中的数据库镜像 docker pull mysql:5.7 整个 pull 过程需要花费一些时间&#xff0c;耐心等待。 查看并启动Docker镜像 列出已下载的镜像 docker images 启动 Mysql容器 docker …