【操作系统】内存的连续分配管理

news2024/11/22 21:24:45

文章目录

  • 前言
  • 连续分配管理的方式
    • 单一连续分配
    • 固定分区分配
    • 动态分区分配
      • 如何记录内存的使用情况
      • 如何选择分区
      • 如何对分区进行回收

前言

当我们的进程在完成编译以后,需要装入内存,此时就有两种方式来进行内存的分配:连续分配、非连续分配。

连续分配管理的方式

单一连续分配

在这里插入图片描述
首先,整个内存被分为了系统区用户区两部分。用户进程只能分配到用户区中,而且只能分配一个进程到用户区。这就是所谓的单一连续分配方式。

  • 优点:实现简单;无外部碎片(主要是因为整个用户区都分配给一个进程了,自然没呀外部的碎片空间)、不一定需要内存保护;
  • 缺点:只能用于单用户、单任务的操作系统;
  • 有内部碎片(用户区都分配给一个进程,导致没利用的空间直接空闲);
  • 存储器利用率低;

固定分区分配

在这里插入图片描述
与单一连续分配方式对应的是固定分配分区。在装入多个进程时,操作系统直接给每个进程分配固定大小的内存空间即为固定分配分区方式。为了让操作系统知道这些分区的具体位置,操作系统会维护相关信息,并将其放入分区说明表中。分区说明表的内容概括如下图:
在这里插入图片描述

  • 优点:实现简单;无外部碎片;
  • 缺点:较大用户程序时,需要采用覆盖技术扩充内存,降低了性能;会产生内部碎片,导致内存利用率降低;

动态分区分配

以上两种方式在分配内存空间时,都相当于是分配了固定大小的内存区域。那么要实现动态的分配内存区域?

我们可以从三个方面来思考:

  • 如何记录内存的使用情况?
  • 选择哪个分区给新进程?
  • 已使用的分区怎么回收?

如何记录内存的使用情况

在记录内存使用情况方面,对固定分区分配的方式做了优化。通过空闲分区表记录内存的使用情况。
在这里插入图片描述
其底层数据结构可以是数组,也可以是双向链表。采用双向链表时,进程进程分配内存空间时,可以向前或者向后查询(方便使用多个分区,看相邻的那几个分区大小更适合当前进程)。

如何选择分区

因此就涉及到了该如何判断哪些分区更适合装入当前进程的方式。具体有以下几种(不同的算法表示了上图链表的排序方式):

  • 首次适应算法:从低地址查找合适空间;
  • 最佳适应算法:优先使用最小空闲空间;
  • 最坏适应算法:优先使用最大连续空间;
  • 临近适应算法:从上次查找处向后查找;

以上几种算法做一个对比,如下图:
在这里插入图片描述

如何对分区进行回收

假如当前存在下图的一个内存分配情况:
在这里插入图片描述
此时用户区存在五个分区,空闲分区仅剩一个,此时的空闲分区表如下:
在这里插入图片描述
如果现在P1进程被回收,那么之前P1进程分配的内存分区信息将会更新到空闲分区表中。
在这里插入图片描述
在这里插入图片描述
接下来,P3进程也进行了回收操作,同样的,空闲分区表将会更新P3进程之前所分配的内存分区信息。
在这里插入图片描述
在这里插入图片描述
以上两个进程的相继回收以后,假如P2或者P4进程继续回收,会使得空闲分区变得连贯,操作系统会将相邻空间合并,同时更新空闲分区表。
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

CNKI上最新硕士博士论文pdf格式文件owner密码找回难度

听人说CNKI上比较早期的硕士博士论文pdf格式文件密码修改权限Owner密码是123456,想办法找了几个文件试了试果然如此。 但又听人说CNKI上最新硕士博士论文pdf格式文件owner密码已经不是了。虽然直接移除这种密码的工具到处都是,推测一下新增的owner密码及…

高并发场景下,如何设计订单库存架构,一共9个关键性问题

库存系统可以分为实物库存和虚拟库存两种类型。实物库存的管理涉及到采购、存储、销售和库存轮换等复杂的活动,需要进行供应链管理和仓库管理等工作。相比之下,虚拟库存的管理相对简单,主要适用于线上资源的数量管理,包括各类虚拟…

Python自动化测试之request库详解(一)

在做接口测试,接口自动化测试的时候都会用到很多工具,如postman、jmeter、pytest等工具,除了这些工具外,我们也会用python的第3方库requests来做接口测试。接下来我会专门讲request的系列专题,希望大家能学好request库…

Ansys Lumerical | 用于增强现实系统的表面浮雕光栅

在本示例中,我们使用 RCWA 求解器设计了一个斜面浮雕光栅 (SRG),它将用于将光线耦合到单色增强现实 (AR) 系统的波导中。光栅的几何形状经过优化,可将正常入射光导入-1 光栅阶次。 然后我们将光栅特性导出为 Lumerical Sub-Wavelength Model …

八个开源免费单点登录(SSO)系统

使用SSO服务可以提高多系统使用的用户体验和安全性,用户不必记忆多个密码、不必多次登录浪费时间。下面推荐一些市场上最好的开源SSO系统,可作为商业SSO替代。 单点登录(SSO)是一个登录服务层,通过一次登录访问多个应…

通配符SSL证书

通配符SSL证书是一种特殊的数字证书,用于在互联网上建立安全的连接,其特点是可以保护多个子域名,并且具有很高的兼容性和扩展性。本文将详细介绍通配符SSL证书的相关概念、优点和应用等。 首先,我们需要了解什么是SSL证书。 SSL证…

听我的,日志还是得好好打!

大家好,我是老三,不知道大家有没有经历过这样的场景,线上出了问题,着急火燎地去排查: 唉,问题可能出在这个地方,捞个日志看下,卧槽,怎么找不到……哪个**不打日志&#…

打破语言壁垒,实现全球商贸:多语言多商户跨境商城源码引领电商新潮流

随着全球化的不断深入,电子商务的蓬勃发展,传统的单语言电商模式已经无法满足日益多元化的市场需求。多语言多商户跨境商城源码,一种创新的电商解决方案,应运而生。它打破了语言和地域的限制,让全球的商家和消费者都能…

c语言函数指针 指针函数

指针数组 数组指针 指针数组 数组指针 Int * br[3] {&a,&b,&c}; Int (*pl)[3] &arr; Int a1;int c 2; int c3; Int arr[3] {a,b,c}; Int* br[3] {&a,&b,&c}; Int* br[3] {&a,&b,&c}; //指针数组 Int (*p)[3] &arr…

新品 | 飞凌嵌入式FCU2601工商业储能EMS能量控制单元发布

FCU2601嵌入式控制单元是飞凌嵌入式为锂电池储能行业设计的EMS能量控制单元产品,设计兼具高性能,多接口,低功耗,广泛满足各类储能系统的本地能源管理应用需求。 FCU2601嵌入式控制单元综合考虑到了储能行业不同场景的差异化需求&…

1x1卷积核

1 1 1\times 1 11卷积核对输入数据的通道做约简。 每个 1 1 1\times 1 11卷积核相当于在输入数据的通道上做了一个降维(经过一个神经元个数为1的全连接层),从而相当于大幅度降低了特征图的数量,但不影响特征图的结构。 使用 1 …

双算法SSL证书

国际算法的优势与挑战 1. RSA算法 RSA算法是一种基于大素数分解的非对称加密算法,长期以来一直是SSL证书的主流选择之一。然而,随着计算能力的提高,RSA算法的密钥长度需要不断增加,以维持足够的安全性。 2. ECC算法 椭圆曲线密…

Elasticsearch:检索增强生成 (Retrieval Augmented Generation -RAG)

作者:JOE MCELROY 什么是检索增强生成 (RAG) 以及该技术如何通过提供相关源知识作为上下文来帮助提高 LLMs 生成的响应的质量。 生成式人工智能最近取得了巨大的成功和令人兴奋的成果,其模型可以生成流畅的文本、逼真的图像,甚至视频。 就语…

HelloWorld -从Houdini导出HDA到UE5

1.配置插件 在Houdini安装目录下找到对应版本引擎的插件,例如这里是Houdini19对应UE5.2的版本,我们就要保证先下载好UE5.2: 将Houdini插件粘贴到UE安装目录的Plugins文件夹下: 目前插件配置完成,打开UE会自动启用插…

如何使用功率放大器

功率放大器是一种用于放大电流或电压的重要设备,广泛应用于音频、通信、无线电和电力等领域。正确地使用功率放大器可以确保其正常工作并获得满意的性能。下面西安安泰将介绍使用功率放大器的一般步骤和注意事项。 首先,了解功率放大器的规格和特性非常重…

MVME5100 MOTOROLA 使用GX Works3集成工程软件进行配置

MVME5100 MOTOROLA 使用GX Works3集成工程软件进行配置 例如,在楼宇自动化中,冗余控制器可用于集中控制系统,以管理HVAC、照明、应急响应、电梯系统和其他电气组件。在石油和天然气领域,冗余控制器可以管理起重机设备的制动系统、…

Optical Communication Band O-,E-,S-,C-,L-bands

Optical Communication Band O-bandC-bandL-bandS-bandE-band光纤通讯通常会在光纤拥有比较小传输损耗的区域进行。这个低损耗波长区域从 1260 nm 到 1625 nm。并且这个区域被分成五个带。 O-band 也叫做 original band,意为最初第一个被用于光通讯的波长带,其波长范围为 …

黑客通过ScreenConnect远程访问入侵医疗机构

导语:最近,安全研究人员发现黑客利用ScreenConnect远程访问工具对美国多家医疗机构进行攻击。这些威胁行为利用了Transaction Data Systems(TDS)使用的本地ScreenConnect实例,该公司是一家在全美50个州都有业务的药店供…

Linux系统编程——进程基本知识

1.什么是程序,什么是进程,区别是什么? 程序:程序是已经创建好的进程,此时并未进行运行,表现为静态。 windows存储在硬盘中的可执行文件Linux代码文件的编译但未运行,如gcc xxx.c -o pro 进程…

linux DMA设备驱动详解

一,DMA相关定义(fpga、wait_queue 、device、interrupt、 dma_request_channel 函数、dma_start_transfer函数、poll、read,platform总线) DMA (直接内存读写)是Direct Memory Access的缩写,也就是内存到内存&#xf…