3.1_3 连续分配管理方式

3.1_3 连续分配管理方式

image-20240312171051385

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

(一)单一连续分配

  在单一连续分配方式中,内存被分为系统区用户区

  系统区通常位于内存的低地址部分,用于存放操作系统相关数据;用户区用于存放用户进程相关数据。

image-20240312171231472

  内存中只能有一道用户程序,用户程序独占整个用户区空间。

优点

  实现简单;无外部碎片;可以采用覆盖技术扩充内存;不一定需要采取内存保护(eg:早期的PC操作系统MS-DOS)。

  因为1个用户进程独占整片用户区,所以不会发生A进程访问B进程的内存空间的情况,因此不一定需要采取内存保护。但有的系统也会采取一定的内存越界保护等。

缺点

  只能用于单用户、单任务的操作系统中;有内部碎片;存储器利用率极低。

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

image-20240312172019300

(二)固定分区分配

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

image-20240312172417447

image-20240312172515118

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

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

  操作系统需要建立一个数据结构——分区说明表,来实现各个分区的分配与回收。每个表项对应一个分区,通常按分区大小排列。每个表项包括对应分区的大小、起始地址、状态(是否已分配)。

image-20240312174759195

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

优点

  实现简单,无外部碎片

缺点

  a.当用户程序太大时,可能所有的分区都不能满足需求,此时不得不采用覆盖技术来解决,但这又会降低性能;

  b.会产生内部碎片,内存利用率低。

(三)动态分区分配

  动态分区分配又称为可变分区分配。这种分配方式不会预先划分内存分区,而是在进程装入内存时,根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要。因此系统分区的大小和数目是可变的。(eg:假设某计算机内存大小为64MB,系统区8MB,用户区共56MB)

image-20240312175520615

问题

  1.系统要用什么样的数据结构记录内存的使用情况?

  2.当很多个空闲分区都能满足需求时,应该选择哪个分区进行分配?

  例如,上图中,进程2执行完毕并离开。此时又有一个4MB的进程要进入内存,那么它是应该分配到刚刚进程2所占用的14MB空间的地方,还是最下方空闲的4MB的地方?

  3.如何进行分区的分配与回收操作?

  例如,进程2、进程3执行完毕并离开,此时,内存中会有三块空闲区域:14MB、18MB、4MB。那么这三块连续的空闲分区该如何处理、是否该进行合并?

问题1:系统要用什么样的数据结构记录内存的使用情况?

  两种常用的数据结构:a.空闲分区表;b.空闲分区链。

image-20240312183406467

问题2:当很多个空闲分区都能满足需求时,应该选择哪个分区进行分配?

image-20240312183855608

  如上图,此时若有一个进程5(4MB)到达,则:应该用最大的分区进行分配?还是用最小的分区进行分配?又或是用地址最低的部分进行分配?

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

(在下个小节中会介绍四种动态分区分配算法)

问题3:如何进行分区的分配与回收操作?

  假设系统采用的数据结构是“空闲分区表”——如何分配

分配时-情况1

image-20240312185237199

image-20240312185152005

  假设此时来了一个进程5(4MB),并且打算存入20MB的空闲分区当中。

image-20240312185315029

image-20240312185320096

分配时-情况2

image-20240312185430671

image-20240312185425161

  假设此时来了一个进程5(4MB),并且打算存入4MB的空闲分区当中。

image-20240312185507615

image-20240312185514617


  假设系统采用的数据结构是“空闲分区表”——如何回收

回收时-情况1:回收区的后面有一个相邻的空闲分区

image-20240312192434913

image-20240312192440838

  假设此时要回收进程4(即,要回收的进程,在它后面,有一个相邻的空闲分区)。——两个相邻的空闲分区合并为一个。

image-20240312192636220

image-20240312192641436

回收时-情况2:回收区的前面有一个相邻的空闲分区

image-20240312192952344

image-20240312192958345

  假设此时要回收进程3(即,要回收的进程,在它前面,有一个相邻的空闲分区)。——两个相邻的空闲分区合并为一个。

image-20240312193146700

image-20240312193200347

回收时-情况3:回收区的前、后各有一个相邻的空闲分区

image-20240312193339052

image-20240312193343797

  假设此时要回收进程3(即,要回收的进程,在它的前、后各有一个相邻的空闲分区)——三个相邻的空闲分区合并为一个。

image-20240312193452100

image-20240312193457422

回收时-情况4:回收区的前、后都没有相邻的空闲分区

image-20240312195716306

image-20240312195720591

  假设此时要回收进程2(即,要回收的进程,它的前、后都没有相邻的空闲分区)——新增一个表项。

image-20240312195819315

image-20240312195824122

  :各表项的顺序不一定按照地址递增顺序排列,具体的排列方式需要依据动态分区分配算法来确定。


  动态分区分配没有内部碎片,但是有外部碎片

  内部碎片:分配给某进程的内存区域中,有些部分没有用上。

  外部碎片:指内存中的某些空闲分区由于太小而难以利用。


外部碎片举例:

image-20240312200710890


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

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

  紧凑技术,就是“挪位置”,把内存中的进程位置挪到一块,腾出一块连续的大空间。

image-20240312200932381


思考:

  1.再次回顾交换技术,什么是换入/换出?什么是中级调度(内存调度)?

  2.思考动态分区分配应使用哪种装入方式?“紧凑”之后需要做什么处理?

  应该用三种装入方式当中的——动态重定位。因为这种方式能最方便实现“进程在内存当中移动位置”这件事情。

  另外,“紧凑”之后,我们应该把各个进程的起始地址(一般存放在进程PCB当中)给修改一下。

总结

image-20240312201613003

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

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

相关文章

微信小程序-wxml语法

介绍 WXML&#xff08;WeiXin Markup Language&#xff09;是框架设计的一套标签语言&#xff0c;可以进行页面布局&#xff0c;声明事件&#xff0c;数据绑定&#xff0c;条件判断。 语法 数据绑定 <view> {{message}} </view>// page.js Page({data: { // 状态…

原生高性能抓包工具Proxyman,送给爱学习的你

现在的抓包工具可谓是五花八门&#xff0c;比如Fiddler&#xff0c;Charles&#xff0c;LightProxy等&#xff0c;各有各的优缺点&#xff0c;最近又看到一个新的抓包工具&#xff0c;像我这样一个有强烈好奇心的人&#xff0c;怎么能错过&#xff0c;我们一起来学习下吧&#…

Python 导入Excel三维坐标数据 生成三维曲面地形图(面) 4-2、线条平滑曲面(原始颜色)但不去除无效点

环境和包: 环境 python:python-3.12.0-amd64包: matplotlib 3.8.2 pandas 2.1.4 openpyxl 3.1.2 scipy 1.12.0 代码: import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from scipy.interpolate import griddata fro…

抓包是什么?我们为什么要抓包?

一、什么是抓包? 抓包&#xff08;packet capture&#xff09;就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作&#xff0c;也用来检查网络安全。抓包也经常被用来进行数据截取等。 二、抓包做什么&#xff1f; 不管做什么事情&#xff0c;首先要有明确的…

3.8_理解代码(3)

fliplr函数 其中fliplr函数为flip array left to right&#xff0c;此处fliplr(i)的输出结果为[4 3 2 1] 我的代码实验 area1 fill(i,u_up(i),cyan,FaceAlpha,0.3);把我都弄得无语了&#xff0c;就实现fill怎么这么难 真是不知道向量长度哪里不同&#xff0c;知道了哈哈 终于…

[Java安全入门]三.CC1链

1.前言 Apache Commons Collections是一个扩展了Java标准库里的Collection结构的第三方基础库&#xff0c;它提供了很多强大的数据结构类型和实现了各种集合工具类。Commons Collections触发反序列化漏洞构造的链叫做cc链&#xff0c;构造方式多种&#xff0c;这里先学习cc1链…

python使用国内镜像源

使用格式 格式为&#xff1a;pip install 库名 -i 镜像地址&#xff08;注意空格的存在&#xff09; pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple 推荐的镜像源&#xff1a; 清华大学&#xff08;推荐&#xff09;&#xff1a;https://pypi.tuna.tsing…

知识文档管理系统平台:企业管理的王炸

无论是企业内部的文件共享&#xff0c;还是团队之间的协作编辑&#xff0c;知识文档管理系统都能发挥巨大的作用。它帮助企业整理、存储和查找各种文档资料&#xff0c;这不仅能提高企业的工作效率&#xff0c;还能增强企业的竞争力。今天就跟着LookLook同学一起来深入了解知识…

仿牛客项目Day6:账号设置——检查登录状态

账号设置 这个功能主要就是上传头像 在账户设置页可以点击上传头像&#xff0c;然后在首页可以改变头像&#xff08;获取头像&#xff09; 访问账号设置页面 controller getSettingPage的方法就是返回html页面 前端 改一下setting页面&#xff0c;index账号设置的url就可…

uView Toast 消息提示

Toast 组件主要用于消息通知、加载提示、操作结果提示等醒目提示效果&#xff0c;我们为其提供了多种丰富的API。 注意&#xff1a; 由于uni中无法通过js创建元素&#xff0c;所以需要在页面中调用<toast />组件&#xff0c;再通过ref开启 #平台差异说明 App&#xf…

代码随想录算法训练营第五十八天 739. 每日温度、 496.下一个更大元素 I

代码随想录算法训练营第五十八天 | 739. 每日温度、 496.下一个更大元素 I 739. 每日温度 题目链接&#xff1a;739. 每日温度 - 力扣&#xff08;LeetCode&#xff09; 情况一&#xff1a;当前遍历的元素T[i]小于栈顶元素T[st.top()]的情况 此时满足递增栈&#xff08;栈头…

安卓 修改系统时间

安卓 修改系统时间 参考资料实践修改 参考资料 链接&#xff1a;Android App 设置系统时间&#xff0c;语言和时区、系统重启_android断电重启后设置系统时间的类在哪-CSDN博客链接&#xff1a;【Android 应用】简单实测可行的获取NTP时间实例_android ntp地址-CSDN博客 实践…

ARMv8架构特殊寄存器介绍-1

1&#xff0c;ELR寄存器&#xff08;Exception Link Register &#xff09; The Exception Link Register holds the exception return address。 异常链接寄存器保存异常返回地址。最常用也很重要。 2&#xff0c;SPSR&#xff08;Saved Process Status Register&#xff09;…

react hook: useId

在 React 中直接编写 ID 并不是一个好的习惯。一个组件可能会在页面上渲染多次&#xff0c;但是 ID 必须是唯一的&#xff01;不要使用自己编写的 ID&#xff0c;而是使用 useId 生成唯一的 ID。 现在&#xff0c;即使 PasswordField 多次出现在屏幕上&#xff0c;生成的 ID 并…

Java中实现双向链表

一、目标 最近项目中实现双向链表&#xff0c;同时转为满二叉树。 二、代码 用java实现双向链表的代码如下&#xff1a; class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) { val x; } }public class FullBinaryTree {public TreeNode createTree(int[…

TypeScript 哲学 - Generic 和 ts表示构造函数

ts中 类的二义性 &#xff1a;做类型 和作为构造函数

基于PHP的店家服务与管理交互平台

目 录 摘 要 I Abstract II 引 言 1 1相关技术 3 1.1 PHP 3 1.2 ThinkPHP框架 3 1.2.1 Struts结构 3 1.2.2 MVC 3 1.2 Tomcat服务器 3 1.3 MySQL数据库 3 1.4 LayUI框架 4 1.5 ECharts 4 1.6 本章小结 4 2 系统分析 5 2.1 功能需求 5 2.2 用例分析 6 2.3 非功能需求 8 2.4 本章…

Vue3全家桶 - Vue3 - 【8】模板引用【ref】(访问模板引用 + v-for中的模板引用 + 组件上的ref)

模板引用【ref】 Vue3官网-模板引用&#xff1b;如果我们需要直接访问组件中的底层DOM元素&#xff0c;可使用vue提供特殊的ref属性来访问&#xff1b; 一、 访问模板引用 在视图元素上采用ref属性来设置需要访问的DOM元素&#xff1a; 该 ref 属性可采用 字符串 值的执行设…

PostgreSQL教程(三十九):客户端接口(三)之 信息模式

信息模式由一组视图构成&#xff0c;它们包含定义在当前数据库中对象的信息。信息模式以 SQL 标准定义&#xff0c;因此能够被移植并且保持稳定 — 系统目录则不同&#xff0c;它们是与PostgreSQL相关的并且是为了实现的考虑而建模的。不过&#xff0c;信息模式视图不包含与Pos…

RabbitMQ - 02 - 基本消息模型

目录 部署demo项目 什么是基本消息模型 实现基本消息模型 部署demo项目 首先配置好一个mq的练习demo,并配置好相关依赖 链接&#xff1a;https://pan.baidu.com/s/1oXAqgoz9Y_5V7YxC_rLa-Q?pwdv2sg 提取码&#xff1a;v2sg 如图 父xml文件已经配置好了 AMQP依赖了 什么…