操作系统原理 实验二 《内存分配回收Allocation Reclaim》

本文主要是介绍操作系统原理 实验二 《内存分配回收Allocation Reclaim》,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

提示:实验源码见最下方

目录

一、实验目的

二、实验内容

三、实验方法

四、实验步骤

1.需求分析

2.概要设计

五、实验代码

六、实验结论

七、实验小结


一、实验目的

帮助了解在不同的存储管理方式下,应怎样实现主存空间的分配和回收。

二、实验内容

主存储器空间的分配和回收

在可变分区管理方式下,采用最先适应算法实现主存空间的分配和回收。

三、实验方法

本实验程序基于Qt,实现了内存分配和回收算法的图形化显示。可以直观地看到内存的分配情况。

1、自行假设主存空间大小,预设操作系统所占大小并构造未分分区表;

表目内容:起址、长度、状态(未分/空表目)

2、结合实验一,PCB增加为:

{PID,要求运行时间,优先权,状态,所需主存大小,主存起始位置,PCB指针}

3、采用最先适应算法分配主存空间;

4、进程完成后,回收主存,并与相邻空闲分区合并。

四、实验步骤

1.需求分析

1、自行假设主存空间大小,预设操作系统所占大小并构造未分分区表;

    表目内容:起址、长度、状态(未分/空表目)

2、结合实验一,PCB增加为:

    {PID,要求运行时间,优先权,状态,所需主存大小,主存起始位置,PCB指针}

3、采用最先适应算法分配主存空间;

4、进程完成后,回收主存,并与相邻空闲分区合并。

2.概要设计

  1. 构建数据结构:

      构建一个MemoryItem类,来存储未分分区表表目的内容。其属性如下:

      在pcbcontroller类中新增一个MemoryList用来存储表目信息。

       在mainwindow界面中新增一个tableview以显示主存信息

        新增一个dashboard类显示仪表盘

     2.构建后台内存分配和回收的方法

      

     3.新增前端显示主存tableView的方法,并且改写开始运行,下一步运行,挂起等按钮的逻辑。(部分方法):

 

     4.设计仪表盘

      重绘事件:触发界面重绘;
      传入的值的参数更新展示的值,触发事件重绘;
      绘制:最外围的线、中心最外层背景、中心文字背景、中心文字

五、实验代码

    见文章最下面的链接

六、实验结论

    最优适应分配算法的效率并不高(不仅要进行排序,还需要遍历),但是可以节省大空间,保证后来的进程尽量有空间可用;最差适应分配算法的分配效率应该是最高的,但是对空间的浪费比较多,不能保证后来的进程(特别是内存占用较大的进程)的空间分配;而最先适应分配算法应该是处于二者之间。三种算法各有优劣势,需要根据系统的具体分配情况斟酌考虑使用。

七、实验小结

本次实验,通过展示未分分区表和主存32KB空间的占用情况,使得自己在直观上更加理解了三种分配算法的不同(因为事先就决定了新加入的进程颜色要有区别,所以新加入的进程进入了哪块内存空间很明显,然后是未分分区表的数值、记录条数的变化也比较明显);其次是内存合并算法,其实可以分两种方式实现:一是遍历整个未分分区表,相邻记录之间符合条件则进行合并;二是直接在该记录的下标上下相邻记录之间进行判定,符合条件则进行合并,显然前者比较潦撇(代码容易写),后者效率较高。最后是紧缩算法,需要获取总内存剩余空间,然后删除所有未分分区表记录后新加一条记录,这是对未分分区表的操作;紧缩还包含程序自身的内存浮动:将所有在内存中的进程组成集合,按照内存起址排序,然后结合占用空间将它们首尾相接,最后更新各个容器,总之实现起来还比较繁琐,需要详细的事先规划。

(本实验代码开源在https://github.com/cds007/CPU-Schedule-OS 上)

界面展示:

执行数据:

 

开始运行后的第一次显示:

 

(本实验代码开源在https://github.com/cds007/CPU-Schedule-OS 上)

 声明:部分功能实现原理来自于网络,侵删!

这篇关于操作系统原理 实验二 《内存分配回收Allocation Reclaim》的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/161948

相关文章

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

离心萃取机废旧磷酸铁锂电池回收工艺流程

在废旧磷酸铁锂电池的回收工艺流程中,离心萃取机主要应用于萃取除杂的步骤,以提高回收过程中有价金属(如锂)的纯度。以下是结合离心萃取机应用的废旧磷酸铁锂电池回收工艺流程: 电池拆解与预处理 拆解:将废旧磷酸铁锂电池进行拆解,分离出电池壳、正负极片、隔膜等部分。破碎与筛分:将正负极片进行破碎处理,并通过筛分将不同粒径的物料分开,以便后续处理。 浸出与溶解 浸出:采用适当的浸出工艺(如二段式逆

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

hdu4407容斥原理

题意: 有一个元素为 1~n 的数列{An},有2种操作(1000次): 1、求某段区间 [a,b] 中与 p 互质的数的和。 2、将数列中某个位置元素的值改变。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.Inpu

hdu4059容斥原理

求1-n中与n互质的数的4次方之和 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWrit

Linux操作系统 初识

在认识操作系统之前,我们首先来了解一下计算机的发展: 计算机的发展 世界上第一台计算机名叫埃尼阿克,诞生在1945年2月14日,用于军事用途。 后来因为计算机的优势和潜力巨大,计算机开始飞速发展,并产生了一个当时一直有效的定律:摩尔定律--当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。 那么相应的,计算机就会变得越来越快,越来越小型化。

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

寻迹模块TCRT5000的应用原理和功能实现(基于STM32)

目录 概述 1 认识TCRT5000 1.1 模块介绍 1.2 电气特性 2 系统应用 2.1 系统架构 2.2 STM32Cube创建工程 3 功能实现 3.1 代码实现 3.2 源代码文件 4 功能测试 4.1 检测黑线状态 4.2 未检测黑线状态 概述 本文主要介绍TCRT5000模块的使用原理,包括该模块的硬件实现方式,电路实现原理,还使用STM32类

JVM内存调优原则及几种JVM内存调优方法

JVM内存调优原则及几种JVM内存调优方法 1、堆大小设置。 2、回收器选择。   1、在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提供的内存查看工具,比如JConsole和Java VisualVM。   2、对JVM内存的系统级的调优主要的目的是减少