内存分配算法实验报告Word下载.docx

上传人:b****2 文档编号:14945460 上传时间:2022-10-26 格式:DOCX 页数:16 大小:115.17KB
下载 相关 举报
内存分配算法实验报告Word下载.docx_第1页
第1页 / 共16页
内存分配算法实验报告Word下载.docx_第2页
第2页 / 共16页
内存分配算法实验报告Word下载.docx_第3页
第3页 / 共16页
内存分配算法实验报告Word下载.docx_第4页
第4页 / 共16页
内存分配算法实验报告Word下载.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

内存分配算法实验报告Word下载.docx

《内存分配算法实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《内存分配算法实验报告Word下载.docx(16页珍藏版)》请在冰豆网上搜索。

内存分配算法实验报告Word下载.docx

要求:

1.设计数据结构,存储结构;

2.在c兼容环境完成上述题目的代码编写与调试;

3.程序运行及诶按交互性好;

4.软件运行,给出测试数据。

工作计划与进度安排:

第14周:

布置课程设计任务,查阅资料,分组设计,程序调试。

第15周:

程序调试,编写课程设计报告,验收,答辩。

指导教师:

2015年11月28日

专业负责人:

学院教学副院长:

1.设计目的

1)了解多道程序系统中,多个进程并发执行的内存资源分配;

2)模拟可变分区内存储管理算法实现分区管理的最佳适应分配算法;

3)通过实现最佳算法来进一步了解静态分区模式的优缺点;

4)掌握最佳适应分配算法,深刻了解各进程在内存中的具体分配策略。

2.总体设计

3.关键技术

allocate():

实现内存分配,并当中调用display(pbc),以及display(S)两个函数显示内存分配完成后的空闲块链表和进程链表情况。

requireback():

实现内存回收,在满足情况的条件下调动allocate()对用户社情的内存块进行回收并在当中调用display(pbc),以及display(S)两个函数显示内存分配完成后的空闲块链表和进程链表情况。

callback():

按内存回收时的四种情况对内存进行回收。

display(pbc):

对空闲块链表中的空闲快惊醒从小到大排序并显示空闲链情况。

display(S):

对进程链表中的进程进行从小到大排序并显示进程链情况。

main():

创建并初始化空闲块链表和进程链链表,用户选择操作功能。

4.程序流程

图4-1

图4-2

5.主要源代码

#include<

stdio.h>

iostream.h>

string.h>

iomanip.h>

constintMAXJOB=100;

//定义表最大记录数

typedefstructnode{

intstart;

//空闲分区的起始地址

intlength;

//空闲分区的长度

chartag[20];

//分区信息是否已分配

}job;

jobfrees[MAXJOB];

//定义空闲区表

intfree_quantity;

//空闲区的个数

joboccupys[MAXJOB];

//定义已分配区表

intoccupy_quantity;

//已分配区的个数

//初始化函数

voidinitial(){

inti;

for(i=0;

i<

MAXJOB;

i++){

frees[i].start=-1;

frees[i].length=0;

strcpy(frees[i].tag,"

free"

);

occupys[i].start=-1;

occupys[i].length=0;

strcpy(occupys[i].tag,"

"

}

free_quantity=0;

occupy_quantity=0;

}

//读数据函数

intreadData(){

FILE*fp;

charfname[20];

cout<

<

endl<

》》欢迎进入主存储器空间的分配与回收模拟系统《《"

endl;

请输入初始空闲表文件名:

;

cin>

>

fname;

if((fp=fopen(fname,"

r"

))==NULL)//读文件

cout<

错误,文件打不开,请检查文件名!

else{

while(!

feof(fp))//文件结束

{

fscanf(fp,"

%d"

&

frees[free_quantity].start);

frees[free_quantity].length);

free_quantity++;

return1;

return0;

//sort选择——排序

voidsort(){

inti,j,p;

free_quantity-1;

i++){

p=i;

for(j=i+1;

j<

free_quantity;

j++)//空闲分区按地址递增的顺序排列

{if(frees[j].start<

frees[p].start)

{p=j;

if(p!

=i){

frees[free_quantity]=frees[i];

frees[i]=frees[p];

frees[p]=frees[free_quantity];

}

//显示函数

voidview(){

-------------------------------------------"

当前空闲表:

起始地址长度状态"

cout.setf

(2);

cout.width(12);

frees[i].start;

cout.width(10);

frees[i].length;

cout.width(8);

frees[i].tag<

------------------------------------------"

当前已分配表:

起始地址长度占用作业名"

occupy_quantity;

i++){

occupys[i].start;

occupys[i].length;

occupys[i].tag<

//最先适应分配算法

voidearliest(){

//空闲分区按地址递增的顺序排列

charjob_name[20];

intjob_length;

inti,j,flag,t;

请输入新申请内存空间的作业名和空间大小:

job_name;

//输入作业的名称

job_length;

//输入作业的长度

flag=0;

//分配成功与否信号

if(frees[i].length>

=job_length){

flag=1;

//可以分配

}}

if(flag==0)

{

Sorry,当前没有能满足你申请长度的空闲内存,请稍候再试……"

else{

t=0;

i=0;

while(t==0)

=job_length)

//从空闲分区表顺序查找,直到找到第一能满足其大小要求的空闲分区为止

{t=1;

i++;

i--;

occupys[occupy_quantity].start=frees[i].start;

//修改已分区的相关信息

strcpy(occupys[occupy_quantity].tag,job_name);

occupys[occupy_quantity].length=job_length;

occupy_quantity++;

job_length)

frees[i].start+=job_length;

frees[i].length-=job_length;

else//刚好分配则空闲分区数减一

{for(j=i;

j++){

frees[j]=frees[j+1];

free_quantity--;

内存空间成功!

//最优适应分配算法

voidexcellent(){

//空闲分区按大小递增的顺序排列

=job_length){

if(flag==0){

Sorry,当前没有能满足你申请长度的空闲内存,请稍候再试!

t=0;

i=0;

while(t==0){

t=1;

for(j=0;

if((frees[j].length>

=job_length)&

&

(frees[j].length<

frees[i].length))

{i=j;

job_length){

for(j=i;

j++)

{frees[j]=frees[j+1];

free_quantity-

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 电大

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1