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

news2024/11/26 22:24:17

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.coloradmin.cn/o/1089293.html

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

相关文章

十六、 代码校验(3)

本章概要 测试驱动开发 测试驱动 vs 测试优先 日志 日志信息日志等级 测试驱动开发 之所以可以有测试驱动开发(TDD)这种开发方式,是因为如果你在设计和编写代码时考虑到了测试,那么你不仅可以写出可测试性更好的代码&#xff…

计算机导论实验——Linux基础入门

使用Xshell登录 Linux 主机 linux命令: cd:去哪里 pwd:在哪里 ls:查看当前有什么文件 mkdir:创建新目录 cp:复制 cat:连接或显示文件 rm:删除 mv:用于移动或重命名文件…

B站视频“多模态大模型,科大讯飞前NLP专家串讲”记录

文章目录 多模态:对齐 -- align迁移学习和zero-shotClipBlip 多模态: 图片、文字、视频、语音等不同的表征。 表示信息的方式有多种,但是不同的表示方式携带的信息不完全相同。 对齐 – align 如第一个图中,文字内容的描述和图…

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

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

基于SpringBoot的网上订餐系统

基于SpringBoot的网上订餐系统的设计与实现 开发语言:Java数据库:MySQL技术:SpringBootMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 【主要功能】 角色:用户、管理员管理员:登录、个人中心、会员管理、…

【Unity】【VR】详解Oculus Integration输入

【背景】 以下内容适用于Oculus Integration开发VR场景,也就是OVR打头的Scripts,不适用于OpenXR开发场景,也就是XR打头Scripts。 【详解】 OVR的Input相对比较容易获取。重点在于区分不同动作机制的细节效果。 OVR Input的按键存在Button和RawButton两个系列 RawButton…

MATLAB神经网络和优化算法

文章目录 1. matlab感知器神经网络初步学习2 使用建立好的神经网络进行分类程序3 线性神经网络预测程序4 BP神经网络信号拟合程序 1. matlab感知器神经网络初步学习 %% 学习目标:从学习第一个最简单的神经网络案例开启学习之路 %% 感知器神经网络 用于点的分类…

orgChart.js组织架构图

OrgChart.js是什么? 基于ES6的组织结构图插件。 特征 支持本地数据和远程数据(JSON)。 基于CSS3过渡的平滑扩展/折叠效果。 将图表对齐为4个方向。 允许用户通过拖放节点更改组织结构。 允许用户动态编辑组织图并将最终层次结构保存为…

c语言表达式求值--整型提升

什么是整型提升? C的整型算术运算总是至少以缺省整型类型的精度来进行的。 为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。 什么叫缺省整数类型?缺省在计算机里面是默认的意…

第三章 内存管理 一、内存的基础知识

目录 一、什么是内存 二、有何作用 三、常用数量单位 四、指令的工作原理 五、装入方式 1、绝对装入 2、可重定位装入(静态重定位) 3、动态运行时装入(动态重定位) 六、从写程序到程序运行 七、链接的三种方式 1、静态…

MySQL建表操作和用户权限

1.创建数据库school,字符集为utf8 mysql> create database school character set utf8; 2.在school数据库中创建Student和Score表 mysql> create table school.student( -> Id int(10) primary key, -> Stu_id int(10) not null, -> C_n…

服务运营 |摘要:学术+业界-近期前沿运筹医疗合作精选

推文作者:李舒湉 编者按 本文归纳整理了近期INFORMS Journal on Applied Analytics中的相关业界合作研究。 这些研究成果体现了运筹学在医疗健康领域实践的效果。文中的学术业界合作使用了不同的研究工具。第一篇文章使用仿真模型帮助诊所进行不同拥挤程度下诊所使用…

【Java学习之道】日期与时间处理类

引言 在前面的章节中,我们介绍了Java语言的基础知识和核心技能,现在我们将进一步探讨Java中的常用类库和工具。这些工具和类库将帮助我们更高效地进行Java程序开发。在本节中,我们将一起学习日期与时间处理类的使用。 一、为什么需要日期和…

并发编程——1.java内存图及相关内容

这篇文章,我们来讲一下java的内存图及并发编程的预备内容。 首先,我们来看一下下面的这两段代码: 下面,我们给出上面这两段代码在运行时的内存结构图,如下图所示: 下面,我们来具体的讲解一下。…

解锁机器学习-梯度下降:从技术到实战的全面指南

目录 一、简介什么是梯度下降?为什么梯度下降重要? 二、梯度下降的数学原理代价函数(Cost Function)梯度(Gradient)更新规则代码示例:基础的梯度下降更新规则 三、批量梯度下降(Batc…

java io读取数据

1.字节流读取数据 2.字节流读取数据: read() package wwx;import jdk.swing.interop.SwingInterOpUtils;import java.io.*; import java.nio.charset.StandardCharsets;public class Test {public static void main(String[] args) {FileInp…

1.1 向量与线性组合

一、向量的基础知识 两个独立的数字 v 1 v_1 v1​ 和 v 2 v_2 v2​,将它们配对可以产生一个二维向量 v \boldsymbol{v} v: 列向量 v v [ v 1 v 2 ] v 1 v 的第一个分量 v 2 v 的第二个分量 \textbf{列向量}\,\boldsymbol v\kern 10pt\boldsymbol …

机器人制作开源方案 | 杠杆式6轮爬楼机器人

1. 功能描述 本文示例将实现R281b样机杠杆式6轮爬楼机器人爬楼梯的功能(注意:演示视频中为了增加轮胎的抓地力,在轮胎上贴了双面胶,请大家留意)。 2. 结构说明 杠杆式6轮爬楼机器人是一种专门用于爬升楼梯或不平坦地面…

thinkphp6 - 超详细使用阿里云短信服务发送验证码功能,TP框架调用对接阿里云短信发验证码(详细示例代码,一键复制开箱即用)

效果图 在thinkphp 5/6 框架(只要不是太低的版本就能用)中,实现接入调用阿里云短信服务详细教程,整个配置过程及示例代码保证小白也能轻松完成! 直接复制就行,改个阿里云参数就能用了。

MongoDB 简介和安装

一、MongoDB 相关概念 1.1 业务应用场景 1.1.1 三高需求 传统的关系型数据库(如 MySQL) ,在数据操作的 “三高” 需求以及应对 Web2.0 的网站需求面前,显得力不从心。”三高“ 需求如下所示,而 MongoDB 可应对 “三高…