采用首次适应算法的动态分区分配模拟课程设计实验报告
采用首次适应算法的动态分区分配模拟课程设计实验报告
1 需求分析
1)本程序要求实现对内存的动态分配与回收的模拟,同时,在内存的分配时还必须使用首次适应算法,最后,还要显示内存块分配和回收后空闲内存分区链的情况。
2)要实现对作业的内存分配,首先要有一个对作业进行创建和分配内存的模块,其中,该模块在分配内存时要使用首次适应算法;要实现对内存的回收,要有一个内存回收的模块,其中,该模块在回收内存时要考虑内存回收的四种情况;最后,还要有一个能显示内存空闲分区链的情况的模块。
2 概要设计
1)首次适应算法的结构如图1:
图1 首次适应算法的结构图
2)数据结构:
struct Fq
{
int size,o,no;
Fq *before,*next;
};
其中,Fq表示结构体的名字(类型),size表示分区的可用空间大小,o表示该分区的状态(是否已分配),no表示该分区中的作业标志,*before表示该结点的向前指针,*next表示该结点的向后指针。
3)各种函数说明:
void alloc(int b,int no,Fq *p);
对作业no进行内存分配的功能函数;其中,参数b表示需求的内存大小,参数no表示作业的编号,参数*p表示空闲分区链的第一个非空结点的指针;
void free(Fq *c);
将地址为c的分区的内存回收;其中,参数*c表示要回收内存的结点;
void create(Fq *head);
创建新作业的子函数;其中,参数*head表示空闲分区链的链首指针;要配合函数alloc()使用;
void cha(Fq *head);
查看内存中的空闲分区链的子函数;其中,参数*head表示空闲分区链的链首指针;
操作系统实验可变分区内存分配首次适应算法模拟
操作系统实验可变分区内存分配首次适应算法模拟(总6页)
--本页仅作为文档封面,使用时请直接删除即可--
--内页可以根据需求调整合适字体及大小--
题目可变分区内存分配首次适应算法模拟
姓名:
学号:
专业:
学院:
指导教师:林夕
二零一八年十一月
一、实验目的
主存的分配和回收的实现与主存储器的管理方式有关的,通过本实验帮助学生理解在可变分区管理方式下应怎样实现主存空间的分配和回收。
二、实验内容及原理
编写一个内存动态分区分配模拟程序,模拟内存的分配和回收的完整过程。
模拟在可变分区管理方式下采用最先适应算法实现主存分配和回收。
可变分区方式是按作业需要的主存空间大小来分割分区的。当要装入一个作业时,根据作业需要的主存量查看是否有足够的空闲空间,若有,则按需要量分割一个分区分配给该作业;若无,则作业不能装入。随着作业的装入、撤离,主存空间被分成许多个分区,有的分区被作业占用,而有的分区是空闲的。
当进程运行完毕释放内存,系统根据回收区的首址,从空闲区链表中找到相应的插入点,此时可能出现以下4种情况之一:
1.回收区与插入点的前一个空闲分区F1相邻接,此时将两个分区合并
2.回收区与插入点的后一个空闲分区F2相邻接,此时将两个分区合并
3.回收区与插入点的前,后两个空闲分区相邻接,此时将三个分区合并
4.回收区既不与F1相邻接,又不与F2相邻接,此时应为回收区单独建立一个新表项
三、程序设计
1.算法流程
3.详细设计
(1)定义两个结构体
struct kongxian ength>=len) tart=kongxian[i].start;
计算机操作系统课程设计报告《存储管理——动态分区分配算法的模拟》
《计算机操作系统》课程设计
题目:存储管理——动态分区分配算法的模拟
专业:软件工程
年级:2012级
小组成员:
指导教师:
时间:
地点:
2012年5 月
目录
目录 (1)
概述 (3)
2. 课程设计任务及要求 (3)
2.1 设计任务 (3)
2.2 设计要求 (3)
2.3 课程设计任务安排 (3)
3. 算法及数据结构 (4)
3.1算法的总体思想(流程) (4)
3.2首次适应算法 (4)
3.2.1 功能 (4)
3.2.2 数据结构(包括变量的定义,要注释!) (4)
3.2.3 算法(流程图表示,或伪C表示) (5)
3.3循环首次适应算法 (6)
3.3.1功能 (6)
3.3.2 数据结构 (6)
3.3.3算法 (7)
3.4最佳适应算法 (8)
3.4.1功能 (8)
3.4.2 数据结构 (8)
3.4.3算法 (8)
3.5最坏适应算法 (10)
3.5.1功能 (10)
3.5.2 数据结构 (10)
3.5.3算法 (11)
4. 程序设计与实现 (12)
4.1 程序流程图 (12)
4.2 程序代码(要注释) (12)
4.3 实验结果 (21)
5. 结论 (23)
6. 收获、体会和建议。 (23)
A的总结: (23)
B的总结: (23)
7. 参考文献。 (24)
概述
动态分区分配是根据进程的实际需要,动态地为之分配内存空间,而在分配时,须按照一定的分配算法,从空闲分区表或空闲分区链中选出一分区分配给该作业。在本实验中运用了五种分配算法,分别是:
1.首次适应算法
2.循环首次适应算法
3.最坏适应算法
4.最佳适应算法
内存管理实验报告
内存管理实验报告
内存管理实验报告
引言
内存管理是计算机系统中非常重要的一部分,它负责管理计算机系统的内存资源,为程序的运行提供必要的支持。本次实验旨在探究不同的内存管理策略对计算机系统性能的影响,以及如何优化内存管理以提高系统效率。
一、实验背景
计算机系统中的内存是用于存储程序和数据的关键资源。在多道程序设计环境下,多个程序需要共享有限的内存资源,因此需要一种有效的内存管理策略来分配和回收内存空间。本次实验中,我们将研究并比较两种常见的内存管理策略:固定分区和动态分区。
二、实验过程
1. 固定分区
固定分区是将内存划分为固定大小的若干区域,每个区域可以容纳一个程序。在实验中,我们将内存划分为三个固定大小的区域,并将三个不同大小的程序加载到内存中进行测试。通过观察程序的运行情况和内存利用率,我们可以评估固定分区策略的优缺点。
2. 动态分区
动态分区是根据程序的大小动态地分配内存空间。在实验中,我们将使用首次适应算法来实现动态分区。首次适应算法将按照程序的大小从低地址开始查找可以容纳该程序的空闲分区,并分配给程序使用。通过观察动态分区策略下的内存利用率和碎片情况,我们可以评估该策略的优劣。
三、实验结果
1. 固定分区
在固定分区策略下,我们观察到每个程序都能够顺利运行,但是内存利用率较低。由于每个程序都需要占用一个固定大小的分区,当程序大小与分区大小不
匹配时,会出现内存浪费的情况。此外,固定分区策略也存在无法分配较大程
序的问题。
2. 动态分区
在动态分区策略下,我们观察到内存利用率较高,碎片情况也较少。由于动态
内存分配首次适应算法
内存分配首次适应算法
首次适应算法是一种内存分配算法,主要用于操作系统中对内存进行管理和分配。它的原理是将内存分成若干个大小相等的分区,并根据进程的内存需求,将进程放置在适合它的空闲分区中,这样可以最大程度地节省内存空间。
首次适应算法的具体步骤如下:
1.将系统的物理内存分成若干个大小相等的分区,每个分区都有一个标记位,表示是否被占用。
2.当一个进程需要分配内存时,从头开始遍历所有分区,找到第一个满足要求的空闲分区。
3.如果找到了适合的空闲分区,将进程放置在该分区中,并将分区标记为占用。
4.如果没有找到适合的空闲分区,说明内存不够用,需要进行内存回收或者进行内存分配策略的调整。
首次适应算法的优点是简单直观,容易实现,并且能够快速将进程放置在合适的分区中。然而,它也存在一些缺点:
1.内存碎片问题:由于每次分配都是从头开始遍历分区,因此可能会留下很多小的内存碎片,导致内存利用率低下。
2.分区选择不合理:有时候可能会出现大的分区被分割成小的分区,导致后续进程无法利用这些大分区,从而浪费了内存空间。
3.分配时间较长:每次分配都需要遍历所有分区,当分区数较多时,分配时间会较长。
为了解决首次适应算法的缺点,还有其他一些内存分配算法被提出,如最佳适应算法、最坏适应算法、下次适应算法等。这些算法都是为了优化内存分配的效率和内存利用率。
最佳适应算法是在所有空闲分区中找到最小的能满足进程需求的分区进行分配,从而尽可能减小内存碎片。最坏适应算法则是找到最大的能满足进程需求的分区进行分配,这样可以减小大分区被分割的概率。下次适应算法则是从上次分配的位置开始遍历。
动态分区算法实验报告
动态分区算法实验报告
动态分区算法实验报告
一、引言
计算机操作系统是现代计算机系统中的核心组成部分,它负责管理计算机硬件资源,并提供各种服务。内存管理是操作系统的重要功能之一,它负责管理计算机的内存资源,为进程提供运行环境。在内存管理中,动态分区算法是一种常用的内存分配策略。本实验旨在通过实践,深入了解动态分区算法的原理和实现。
二、实验目的
1. 了解动态分区算法的基本原理和实现方式;
2. 掌握动态分区算法的实验环境搭建和使用方法;
3. 分析动态分区算法的优缺点,并比较不同算法的性能差异。
三、实验环境
本实验使用C语言编程实现,实验环境如下:
1. 操作系统:Windows 10;
2. 开发工具:Visual Studio 2019;
3. 编程语言:C语言。
四、实验过程
1. 实验准备
在开始实验之前,我们首先需要了解动态分区算法的基本原理。动态分区算法根据进程的内存需求,将内存划分为若干个不同大小的分区,并按照进程的请求进行分配和释放。常用的动态分区算法有首次适应算法、最佳适应算法和最
坏适应算法等。
2. 实验设计
本实验选择实现首次适应算法,并设计以下几个函数:
- 初始化内存空间:初始化一块指定大小的内存空间,将其划分为一个个的分区,并设置分区的状态;
- 分配内存:根据进程的内存需求,在内存空间中找到合适的分区进行分配,并更新分区的状态;
- 释放内存:将已分配的内存空间进行释放,并更新分区的状态;
- 显示内存状态:打印当前内存空间的分区状态。
3. 实验实现
根据上述设计,我们使用C语言实现了动态分区算法的相关函数。通过调用这些函数,我们可以模拟动态分区算法的运行过程,并观察分区的分配和释放情况。
首次适应算法实验报告
实验报告
系别班级学号姓名时间地点
计算机科学系计科1201 2014/12/29 机房c105 课程名称计算机操作系统实验名称存管理
实验过程
四.运行截图
五.实验总结
算法要求空闲链已地址递增的次序连接。分配存时,从链首开始顺序查找,直到找到第一个满足要求的空间并分配给进程,把分配后余下的空间仍然留在链表中。若从链首至链尾都不满足要求,则分配失败。该算法倾向于优先使用低地址的空间,在不断分割中会产生很多空间碎片,并且每次都是从链首开始查找,这无疑增加了开销。
存储器动态分区算法模拟课程设计报告
操作系统原理
课程设计报告题目:存储器的动态分区算法模拟
所在学院:
班级:
学号:
姓名:
指导教师:
成绩:
2013年1月16
目录
一、课程设计目的 (1)
1、背景 (1)
2、目的 (1)
二、课题任务描述 (1)
三、课题研发相关知识 (1)
1、首次适应算法(first fit) (1)
2、最佳适应算法(best fit) (1)
3、最坏适应算法(worst fit) (2)
4、回收内存 (2)
5、库函数的介绍 (2)
四、课题设计 (2)
1、总体结构 (2)
2、数据结构 (4)
3、主要功能的流程图 (5)
4、程序的技术路线 (8)
五、带有详细注解的源程序 (8)
六、运行与测试 (18)
七、收获及改进意见 (20)
一、课程设计目的
1、背景
主存是CPU可直接访问的信息空间,合理而有效的使用贮存将在很大程度上影响整个计算机系统的性能。
本课题要求模拟实现分区式主存管理机制。模拟实现各种分区管理方法以及相应的主存分配以及回收算法。
2、目的
通过该课题进一步加深对可变分区存储机制的理解。加深对存储器动态分区分配算法的认识。掌握“首次适应算法”、“下次适应算法”、“最佳适应算法发”、“最坏适应算法”的内存分配过程。掌握内存的回收策略。
二、课题任务描述
1、设计可用的内存空闲空间,并能动态输入用户作业所需的内存大小。
2、编程模拟各种分配算法的实施过程,允许自行选择如“首次适应算法”、“下次适应算法”、“最佳适应算法发”、“最坏适应算法”等常用算法,要求实现不少于三种算法。
3、实现内存的回收。要求考虑回收时的内存合并问题。
A.5动态分区分配方式的模拟实验报告
动态分区分配方式的模拟
第一部分设计思想的说明
1 设计目标
用C语言或C++语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程alloc()和回收过程free()。其中,空闲分区通过空闲分区链表来管理,在进行内存分配时,系统优先使用空闲区低端空间。
预期结果:假设初始状态如下,可用的内存空间为640KB,并有下列请求序列:
作业1 申请 130KB
作业2 申请 60KB
作业3 申请 100KB
作业2 释放 60KB
作业4 申请 200KB
作业3 释放 100KB
作业1 释放 130KB
作业5 申请 140KB
作业6 申请 60KB
作业7 申请 50KB
作业6 释放 60KB
分别用首次适应算法和最佳适应算法进行内存块的分配和回收,同时显示内存块分配和回收后空闲内存分区链的情况。
2、设计理论
首次适应算法(First-fit):当要分配内存空间时,就查表,在各空闲区中查找满足大小要求的可用块。只要找到第一个足以满足要球的空闲块就停止查找,并把它分配出去;如果该空闲空间与所需空间大小一样,则从空闲表中取消该项;如果还有剩余,则余下的部分仍留在空闲表中,但应修改分区大小和分区始址。
最佳适应算法(Best-fit):当要分配内存空间时,就查找空闲表中满足要求的空闲块,并使得剩余块是最小的。然后把它分配出去,若大小恰好合适,则直按分配;若有剩余块,则仍保留该余下的空闲分区,并修改分区大小的起始地址。
第二部分程序清单
//*************************************************************** //******** 动态分区分配方式的模拟 *********
计算机操作系统实验报告动态分区分配方式的模拟
计算机操作系统实验报告姓名:班级:学号:
题目:动态分区分配方式的模拟
实习内容简要描述本次实验要完成两部分内容:
一是用C语言实现对采用首次适应算法和最佳适应算法的动态分区分配过程ALLOCo
和回收过程FREE(),其中空闲分区由空闲分区链来管理,进行分配时,系统优先使用空闲区底端空间。
二是假设初始状态下,可用内存空间为640KBO按照题目要求的作业顺序,以及各个作
业分配和回收的内存空间。分别采用首次适应法和最佳适应法,对内存进行分配和回收,
要求每次分配和回收后显示空闲内存分区链的情况。
实验分析算法介绍本次实验通过用C语言进行编程并调试、运行,形象地表现出动态分区的分配方式,直
观地展现了首次适应算法和最佳适应算法对内存的释放和回收方式之间的区别。加深了
我们对两种算法优缺点的理解,帮助我们了解一些数据结构和分配算法,进一步加深我
们对动态分区存储器管理方式及其实现过程的理解。主要的问题在于,如何解决两种算
法对内存的释放和回收空间的表示。
动态分区分配:又称为可变分区分配,这种分配方式并不事先先将主存划分成一块块的分区,而是在作业进入主存时,根据作业的大小动态地建立分区。并使分区的大小正好
适应作业的需要。因此系统中分区的大小是可变的,分区的数目也是可变的。
分区分配算法:(两者的空闲块链接方式不冋)
①首次适应法:
为作业选择分区时总是按地址从高到低搜索,只要找到可以容纳该作业的空白块,
就把该空白块分配给该作业。
特点:优先利用内存中底地址部分的空闲分区(将所有空闲区,按其地址递增的顺序链接)
②最佳适应算法:
动态分区分配算法实验报告
操作系统实验报告
实验二:动态分区分配算法
学生:
学号:
学院:
系别:
专业:
实验时间:
报告时间:
一、实验内容
编写一个内存动态分区分配模拟程序,模拟内存的分配和回收的完整过程。
一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。当用户提出申请存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间的使用情况,找出足够的空闲区域分配给申请者。当作业撤离或主动归还主存资源时,则存储管理要收回作业占用的主存空间或归还部分主存空间。主存的分配和回收的实现与主存储器的管理方式有关的,通过本实验帮助学生理解在可变分区管理方式下应怎样实现主存空间的分配和回收。
三、实验原理
模拟在可变分区管理方式下采用最先适应算法实现主存分配和回收。
(1)可变分区方式是按作业需要的主存空间大小来分割分区的。当要装入一个作业时,根据作业需要的主存量查看是否有足够的空闲空间,若有,则按需要量分割一个分区分配给该作业;若无,则作业不能装入。随着作业的装入、撤离,主存空间被分成许多个分区,有的分区被作业占用,而有的分区是空闲的。例如:
为了说明哪些区是空闲的,可以用来装入新作业,必须要有一X 空闲区说明表,格式如下:
第一栏
第二栏
其中,起址——指出一个空闲区的主存起始地址。
长度——指出从起始地址开始的一个连续空闲的长度。
状态——有两种状态,一种是“未分配”状态,指出对应的由起址指出的某个长度的区域是空闲区。
(2) 当有一个新作业要求装入主存时,必须查空闲区说明表,从中找出一个足够大的空闲区。有时找到的空闲区可能大于作业需要量,这时应把原来的空闲区变成两部分:一部分分给作业占用;另一部分又成为一个较小的空闲区。为了尽量减少由于分割造成的空闲区,而尽量保存高地址部分有较大的连续空闲区域,以利于大型作业的装入。为此,在空闲区说明表中,把每个空闲区按其地址顺序登记,即每个后继的空闲区其起始地址总是比前者大。
动态分区分配方式模拟
动态分区分配方式模拟
动态分区分配方式的核心思想是将内存划分为若干个不同大小的分区,每个分区可以用来存放一个进程或作为一部分进程的存储区域。当一个进
程需要分配内存时,系统会根据进程的需要选择一个合适大小的空闲分区
分配给该进程。当进程执行完毕后,系统会回收其占用的内存分区,再次
将其标记为空闲分区。
首次适应算法(First Fit)是最简单的动态分区分配算法之一、它
从内存的起始位置开始,寻找第一个满足进程需要的空闲分区,然后将该
分区分配给进程。首次适应算法的优点是实现简单,且内存利用率较高。
然而,它也有一些缺点,比如容易产生碎片,导致内存的利用率下降。
最佳适应算法(Best Fit)是根据进程需要的内存大小,选择最小的
满足条件的空闲分区进行分配。最佳适应算法可以最大限度地减少碎片的
产生,提高内存的利用率。但是,最佳适应算法的缺点是实现较为复杂,
同时由于选择最小的分区进行分配,会导致大量的碎片出现。
最坏适应算法(Worst Fit)与最佳适应算法相反,它选择最大的满
足进程需要的空闲分区进行分配。最坏适应算法的优点是可以减少大型进
程的外部碎片,但由于选择最大的分区进行分配,会导致更多的碎片产生。
为了更好地理解动态分区分配方式,我们可以通过一个简单的模拟实
例来进行说明。假设有一块内存大小为1MB,现有以下三个请求需要进行
内存分配:
1.进程A需要200KB的内存;
2.进程B需要400KB的内存;
3.进程C需要600KB的内存。
首次适应算法:首先,进程A需要200KB的内存,首次适应算法从内
存起始位置开始寻找空闲分区,找到一个大小符合要求的空闲分区,将其
操作系统实验四实验报告动态分区分配算法
操作系统实验四
【实验题目】:动态分区分配算法
【实验学时】:4学时
【实验目的】
通过这次实验,加深对动态分区分配算法的理解,进一步掌握首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的实现方法。
【实验内容及要求】
问题描述:
设计程序模拟四种动态分区分配算法:首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的工作过程。假设内存中空闲分区个数为n,空闲分区大小分别为P1, … ,P n,在动态分区分配过程中需要分配的进程个数为m(m≤n),它们需要的分区大小分别为S1, … ,S m,分别利用四种动态分区分配算法将m个进程放入n个空闲分区,给出进程在空闲分区中的分配情况。
程序要求:
1)利用首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法四种动态分区分配算法模拟分区分配过程。
2)模拟四种算法的分区分配过程,给出每种算法进程在空闲分区中的分配情况。
3)输入:空闲分区个数n,空闲分区大小P1, … ,P n,进程个数m,进程需要的分区大小S1, … ,S m。
4)输出:首次适应算法,循环首次适应算法,最佳适应算法,最坏适应算法,最终内存空闲分区的分配情况。
实现源代码:
#include<iostream>
#include<fstream>
#include<iomanip>
#include<string>
#define max 100
using namespace std;
int work_num;
int zone_num;
动态分区分配方式的模拟实验原理说明
动态分区分配方式的模拟实验原理说明
一、引言
动态分区分配方式是计算机内存管理中一种常见的分配方式,它将内存按需划分为多个独立的区域,用于分配进程所需的内存空间。本文将详细探讨动态分区分配方式的原理及其在模拟实验中的应用。
二、动态分区分配方式的原理
动态分区分配方式基于内存动态分配,将可用内存划分为多个不连续的分区,每个分区可用于存放一个进程或程序。此分配方式具有灵活性,能够更好地满足不同程序对内存空间的需求。
2.1 空闲内存分区列表
在动态分区分配方式中,操作系统维护一个空闲内存分区列表,记录可供分配的内存空间情况。列表中的每个分区都有其起始地址和长度。
2.2 分区分配算法
动态分区分配方式有多种分区分配算法可供选择,主要包括首次适应算法、最佳适应算法和最差适应算法。
•首次适应算法:从空闲分区列表中找到第一个满足分配要求的分区进行分配。•最佳适应算法:从空闲分区列表中找到最小的满足分配要求的分区进行分配。•最差适应算法:从空闲分区列表中找到最大的满足分配要求的分区进行分配。
2.3 分区回收算法
当进程结束或释放内存时,操作系统需要将其占用的内存空间回收,归还给空闲内存区。分区回收算法的目标是尽可能地合并相邻的空闲区域,以最大程度地提供可用内存。
三、动态分区分配方式的模拟实验
为了更好地理解和研究动态分区分配方式,可以进行一系列模拟实验。下面将介绍动态分区分配方式的模拟实验原理及步骤。
3.1 实验原理
动态分区分配方式的模拟实验基于以下原理: - 创建一个内存模拟环境,模拟操
作系统管理的内存空间。 - 设计一系列测试用例,模拟进程的创建、分配和回收
采用首次适应算法实现动态分区分配过程的模拟
p = head;
while (p != NULL) {
//根据作业号查找要释放的作业
if (p->id == id) {
p->id = -1;
p->isallocated = no;
//如果此作业前面还有空闲分区,则与之合并
if (p->prev != NULL && p->prev->isallocated == no) {
in百度文库 capacity;//内存容量
printf("请先输入内存的容量:");
scanf("%d", &capacity);
init(capacity);//根据内存容量进行初始化
printSpare();
while (1) {
printMenu();//打印菜单
scanf("%d", &option);//输入选项
switch (option)//判断选项
{
case 1:
getMemory();//申请内存
break;
case 2:
returnMemory();//释放内存
break;
case 0://退出
return 0;
颅骨的实验报告
颅骨的实验报告
一、实验目的:
1、熟悉并掌握动态分区分配的算法。
2、熟悉并掌握动态分区中分区回收的各种情况,并能够实现分区合并。
二、实验内容:用高级语言模拟实现动态分区存储管理,要求:
1、分区分配算法至少实现首次适应算法、最佳适应算法和最坏适应算法中的至少一种。熟悉并掌握各种算法的空闲区组织方式。
2、分区的初始化——可以由用户输入初始分区的大小。(初始化后只有一个空闲分区,起始地址为0,大小是用户输入的大小)
3、分区的动态分配过程:由用户输入作业号和作业的大小,实现分区过程。
4、分区的回收:用户输入作业号,实现分区回收,同时,分区的合并要体现出来。(注意:不存在的作业号要给出错误提示!)
5、分区的显示:任何时刻,可以查看当前内存的情况(起始地址是什么,大小多大的分区时空闲的,或者占用的,能够显示出来)
三、实验代码
四、实验结果
1、选择操作界面
2、选择操作分配内存
3、查看内存分配情况
4、释放内存
五、实验总结
注意:1.标题格式黑体4号加粗,正文宋体小四
2.实验结果给出你程序运行时的截图
3.实验总结是通过这次实验你学到的及不足的等方面的内容。
4.检查过的实验不交实验报告怎么写,但要提交程序代码文件。四个实验全部检查过的至少交一份实验报告怎么写。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
】
1 需求分析
1)本程序要求实现对内存的动态分配与回收的模拟,同时,在内存的分配时还必须使用首次适应算法,最后,还要显示内存块分配和回收后空闲内存分区链的情况。
2)要实现对作业的内存分配,首先要有一个对作业进行创建和分配内存的模块,其中,该模块在分配内存时要使用首次适应算法;要实现对内存的回收,要有一个内存回收的模块,其中,该模块在回收内存时要考虑内存回收的四种情况;最后,还要有一个能显示内存空闲分区链的情况的模块。
2 概要设计
1)首次适应算法的结构如图1:
图1 首次适应算法的结构图
》
2)数据结构:
struct Fq
{
int size,o,no;
Fq *before,*next;
};
其中,Fq表示结构体的名字(类型),size表示分区的可用空间大小,o表示该分区的状态(是否已分配),no表示该分区中的作业标志,*before表示该结点的向前指针,*next表示该结点的向后指针。
3)各种函数说明:
\
void alloc(int b,int no,Fq *p);
对作业no进行内存分配的功能函数;其中,参数b表示需求的内存大小,参数no表示作业的编号,参数*p表示空闲分区链的第一个非空结点的指针;
void free(Fq *c);
将地址为c的分区的内存回收;其中,参数*c表示要回收内存的结点;
void create(Fq *head);
创建新作业的子函数;其中,参数*head表示空闲分区链的链首指针;要配合函数alloc()使用;
void cha(Fq *head);
查看内存中的空闲分区链的子函数;其中,参数*head表示空闲分区链的链首指针;
#
void hui(Fq *head);
回收内存的子函数;其中,参数*head表示空闲分区链的链首指针;要配合函数free()使用;
3 运行环境
1)操作系统: Windows XP ( 32位 / DirectX 11 )
2)电脑: X86 兼容台式电脑
处理器: 英特尔 Pentium(奔腾) 双核 E5300 @
内存: 2 GB
4 开发工具和编程语言
-
1)开发工具:Visual C++ ;
2)编程语言:C++语言;
5 详细设计
1)程序结构如图2:
图2 程序结构图
2)●主菜单模块:
void main()//主函数
"
{
Fq *head=new Fq;head->next=new Fq;
head->next->size=MAXSIZE;
head->next->o=0;
head->next->next=NULL;
int choice=0;
do
{
)
cout<<"请选择你要进行的操作:"< cout<<"1、创建新作业 2、查看空闲分区链 3、回收内存空间 0、退出"< cin>>choice; switch(choice) { case 1: create(head);break; case 2: cha(head);break; case 3: hui(head);break; ( case 0: break; default: cout<<"输入错误!"< } }while(choice!=0); } ●创建新作业模块: void create(Fq *head)//创建作业子函数 { ~ Fq *p=head->next;p->before=head; int no=0,b=0; cout<<"请输入要创建的作业的编号:";cin>>no; cout<<"请输入作业的需求空间大小:";cin>>b; alloc(b,no,p);//此处调用功能函数alloc() } ●查看空闲分区链模块: void cha(Fq *head)//查看内存中的空闲分区链的子函数 ' { Fq *p=head->next;p->before=head; int i=0; cout<<"空闲分区链的情况为:"< while(p!=NULL) { if(p->o==0) { : cout<<"空闲分区"<<++i<<" "< } p=p->next; } } ●回收内存空间模块: void hui(Fq *head)//回收内存的子函数 { ) Fq *p=head->next;p->before=head; int no=0; cout<<"请输入要回收内存的作业号:";cin>>no; while(p!=NULL) { if(p->no==no) { free(p);//此处调用功能函数free() 、 cout<<"作业"< return ; }