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

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.rhkb.cn/news/157635.html

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

相关文章

多服务器云探针源码(服务器云监控)/多服务器多节点_云监控程序python源码

源码简介: 多服务器云探针源码(服务器云监控),支持python多服务器多节点,云监控程序源码。它是一款很实用的云探针和服务器云监控程序源码。使用它可以帮助管理员能够快速监控和管理各种服务器和节点,实用性强。 源码链接: 网盘…

【机器学习】sklearn特征选择(feature selection)

文章目录 特征工程过滤法(Filter)方差过滤相关性过滤卡方过滤F验表互信息法小结 嵌入法(Embedded)包装法(Wrapper) 特征工程 特征提取(feature extraction)特征创造(feature creation)特征选择(feature se…

lv8 嵌入式开发-网络编程开发 17 套接字属性设置

1 基本概念 设置套接字的选项对套接字进行控制除了设置选项外,还可以获取选项选项的概念相当于属性,所以套接字选项也可说是套接字属性有些选项(属性)只可获取,不可设置;有些选项既可设置也可获取 2 选项…

Ansible概述和模块解释

一、Ansible概述 Ansible介绍 Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。 Ansible能做什么 Ansi…

呼吁社区共同维护Sui品牌和商标

Sui社区成员可以通过举报Sui商标和品牌资产的不当使用来帮助保护网络的信誉。Sui商标政策解释了logo和名称的可接受和不可接受的使用方式。这些展示代表Sui面向公众,而善意行为者的正确使用有助于维护Sui的声誉。 Sui网络在公众中享有良好声誉,Sui社区都…

GEO生信数据挖掘(七)差异基因分析

上节,我们使用结核病基因数据,做了一个数据预处理的实操案例。例子中结核类型,包括结核,潜隐进展,对照和潜隐,四个类别。本节延续上个数据,进行了差异分析。 差异分析 计算差异指标step12 加载…

API攻防-接口安全SOAPOpenAPIRESTful分类特征导入项目联动检测

文章目录 概述什么是接口? 1、API分类特征SOAP - WSDLWeb services 三种基本元素: OpenApi - Swagger UISpringboot Actuator 2、API检测流程Method:请求方法URL:唯一资源定位符Params:请求参数Authorization&#xff…

阿里云r7服务器内存型CPU采用

阿里云服务器ECS内存型r7实例是第七代内存型实例规格族,CPU采用第三代Intel Xeon可扩展处理器(Ice Lake),基频2.7 GHz,全核睿频3.5 GHz,计算性能稳定,CPU内存比1:8,2核16G起步&#…

NSIDC定义的海冰相关概念

文章目录 相关概念Matlab绘图结果展示 相关概念 NSIDC 表示 “National Snow and Ice Data Center”,即美国国家雪和冰数据中心。NSIDC 是一个位于美国科罗拉多大学波尔得分校的研究中心,致力于收集、管理和分发全球雪和冰的科学数据。 Matlab绘图 cl…

2015架构真题(五十)

供应链中信息流覆盖了供应商、制造商和分销商,信息流分为需求信息流和供应信息流,()属于需求信息流,()属于供应信息流。 库存记录生产计划商品入库单提货发运单 客户订单采购合同完工报告单销售…

迅为RK3568开发板Scharr滤波器算子边缘检测

本小节代码在配套资料“iTOP-3568 开发板\03_【iTOP-RK3568 开发板】指南教程\04_OpenCV 开发配套资料\33”目录下,如下图所示: 在 Sobel 算子算法函数中,如果设置 ksize-1 就会使用 3x3 的 Scharr 滤波器。Scharr 算子是 Soble 算子在 ksize…

leetcode oj

150. 逆波兰表达式求值 - 力扣(LeetCode) 思路:定义一个名为 Solution 的类,并在其中定义了一个名为 evalRPN 的公共函数。这个函数接受一个由字符串组成的向量 tokens 作为输入,并返回一个整数。 在代码中&#xff0…

【C++初阶】关键字命名空间缺省函数函数重载入门必看!!!超详解!!!

主页点击直达:个人主页 我的小仓库:代码仓库 C语言偷着笑:C语言专栏 数据结构挨打小记:初阶数据结构专栏 Linux被操作记:Linux专栏 LeetCode刷题掉发记:LeetCode刷题 算法:算法专栏 C头…

嵌入式系统开发【深入浅出】 EXTI 与 NVIC

目录 CPU 感知外部事件变化的三种方式 中断分三个级别 中断控制器 STM32 的中断和异常 NVIC 中断控制器 NVIC 结构体成员 抢占优先级和响应优先级 简单配置NVIC中断控制器 EXTI 外部中断【中断源级】​ STM32系列微控制器实际上最多有23根外部中断线(EXT…

【管理运筹学】第 10 章 | 排队论(1,排队论的基本概念)

文章目录 引言一、基本概念1.1 排队过程1.2 排队系统的组成和特征1.3 排队模型的分类1.4 系统指标1.5 系统状态 引言 开一点排队论的内容吧,方便做题。 排队论(Queuing Theory)也称随机服务系统理论,是为解决一系列排队问题&…

docker入门加实战—从部署MySQL入门docker

docker入门加实战—从部署MySQL入门docker docker部署MySQL 输入如下命令: docker run -d \--name mysql \-p 3306:3306 \-e TZAsia/Shanghai \-e MYSQL_ROOT_PASSWORD123 \mysql部署成功截图如下: 当执行命令后,Docker做的第一件事情&…

Grafana 10 新特性解读:体验与协作全面提升

作者:徽泠(苏墨馨) 为了庆祝 Grafana 的 10 年里程碑,Grafana Labs 推出了 Grafana 10,这个具有纪念意义的版本强调增强用户体验,使各种开发人员更容易使用。Grafana v10.0.x 为开发者与企业展示卓越的新功能、可视化与协作能力&…

java中的接口interface

一、面向对象基本概念 Java是一种面向对象的语言,其中「对象」就相当于是现实世界中的一个个具体的例子,而「类」就相当于是一个抽象的模板,将抽象的概念模板转化为具体的例子的过程就叫做「实例化」。 比如说人这个概念就是一个抽象化的「…

VSCode 快速移动光标至行尾

最近在用vscode进行C编程,经常需要把光标跳到行尾去添加符号。 手动到行尾太麻烦了。 一种快捷方式是:用键盘上的“END”快捷键。 但是用这个键也不是很方便,因为“end”键离主键盘区太远。 另一种便捷的方式是:给vscode设置自定义…

TypeScript React(上)

目录 扩展学习资料 TypeScript设计原则 TypeScript基础 语法基础 变量声明 JavaScript声明变量 TypeScript声明变量 示例 接口 (标准类型-Interface) 类型别名-Type 接口 VS 类型别名 类型断言:欺骗TS&#xff0c;肯定数据符合结构 泛型、<大写字母> 扩展学习…