操作系统原理 实验二 《内存分配回收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

相关文章

Java循环创建对象内存溢出的解决方法

《Java循环创建对象内存溢出的解决方法》在Java中,如果在循环中不当地创建大量对象而不及时释放内存,很容易导致内存溢出(OutOfMemoryError),所以本文给大家介绍了Java循环创建对象... 目录问题1. 解决方案2. 示例代码2.1 原始版本(可能导致内存溢出)2.2 修改后的版本问题在

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常

Redis多种内存淘汰策略及配置技巧分享

《Redis多种内存淘汰策略及配置技巧分享》本文介绍了Redis内存满时的淘汰机制,包括内存淘汰机制的概念,Redis提供的8种淘汰策略(如noeviction、volatile-lru等)及其适用场... 目录前言一、什么是 Redis 的内存淘汰机制?二、Redis 内存淘汰策略1. pythonnoe

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R