




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验八内存分配与回收算法实现
1、实验目的
掌握为实现多道程序并发执行,操作系统是如何通过作业调度选择作业进入内存
系统如何为进入内存的作业分配内存空间,实现多道作业同时驻留内存,就绪进程队列中的多个进程是如何以分式方式共享CPU,作业运行完成离开系统时,系统如何进行内存回收,计算进程周转时间。
掌握各种调度算法,以及实现所需的各种数据结构。
2、实验内容
根据给定的动态分区分配算法流程图(p112,图4-10),用你熟悉的计算机编程语言编写一程序,该程序实现内存的合理分配后回收。
#include<stdio.h>#include<stdlib.h>#include<cstring>#include<cstdlib>#defineM10
//************************空闲内存结构体typedefstruct
{
intstartaddress;intendaddress;charname[20];intsize;
intstate;
}area;
//****************作业记录结构体typedefstruct
{
charpname[20];intpsize;
}progress;intN=10;intk=0;
//*****************空闲内存结构体初始化voidinit(area*f)
{
f[0].startaddress=0;f[0].endaddress=400;f[0].size=400;f[0].state=0;strcpy(f[0].name,"null");
k++;
}
//******************分配内存
voidinsert( area*f,inti,intb,intc)
{
intj;for(j=k;j>i;j--)
f[j]=f[j-1];f[i].startaddress=b;f[i].endaddress=c;f[i].state=0;
f[i].size=c-b;strcpy(f[i].name,"null");k++;
}
voidapplication( area*f,progressp)
{
inti,ff=0;for(i=0;i<k;i++)
if(!f[i].state)
{
if(f[i].size<p.psize)continue;
elseif(f[i].size==p.psize)
{
strcpy(f[i].name,p.pname);f[i].state=1;
ff=1;break;
}
else
{
insert(f,i+1,f[i].startaddress+p.psize,f[i].endaddress);f[i].endaddress=f[i].startaddress+p.psize-1;f[i].size=p.psize;
f[i].state=1;strcpy(f[i].name,p.pname);ff=1;
break;
}
}
if(ff)
printf(" 申请成功\n");
else
printf("申请失败,对不起,主内存的空闲表中没有足够的内存!\n");
}
//*****************输出结果voidprint( area*f)
{
intj;printf("************************************************************\n");printf("* 进程号进程名 始址 结束地址 大小 状态 *\n\n");for(j=0;j<k;j++)
printf("* %d%10s%10d%10d%11d%7d
*\n",j,f[j].name,f[j].startaddress,f[j].endaddress,f[j].size,f[j].state);printf("************************************************************\n\n");}
//******************回收内存voidrecovery( area*f,inti)
{
intj,ff=1;if((i+1)<k&&f[i+1].state==0)
{
f[i].endaddress=f[i+1].endaddress;strcpy(f[i].name,"null");
f[i].size+=f[i+1].size;f[i].state=0;for(j=i+1;j<k-1;j++)f[j]=f[j+1];
if(k>1)
{
k--;
return;
}
recovery(f,i+1);
ff=0;return;
}
if((i-1)>=0&&f[i-1].state==0)
{
f[i-1].endaddress=f[i].endaddress;strcpy(f[i-1].name,"null");
f[i-1].size+=f[i].size;
for(j=i;j<k-1;j++)f[j]=f[j+1];if(k>1)
{
k--;
return;
}
recovery(f,i-1);
ff=0;return;
}
if(ff)
{
strcpy(f[i].name,"null");f[i].state=0;
}
}
//************主函数voidmain()
{
intss=1,i,j=0;areaf[M];
progressp[M];
printf(" ************内存分配与回收*************\n\n");init(f);
while(ss)
{
printf("请选择操作项:\n");printf("1.内存分配\n");
printf("2.内存回收\n");
printf("0.退出操作\n");
printf("选项:");
scanf("%d",&i);
printf("\n");switch(i)
{
case1:
printf("请输入作业名称,大小:\n");printf("进程名: \n");
scanf("%s",p[j].pname);printf("进程大小:");scanf("%d",&p[j].psize);
application(f,p[j]);
j++;
print(f);break;
case2:
printf("你要回收的表序号(0---%d):",k-1);scanf("%d",&i);
if((i<0)||(i>k-1))
printf("输入错误,没有该进程\n\n");
else
{ recovery(f,i);
printf(" 回收成功\n");
print(f);
}
break;case0:
ss=0;b
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025荷兰语等级考试B2级模拟试题集
- 2025年聚苯乙烯(PS)项目规划申请报告
- 一堂难忘的课课堂学习体验作文(14篇)
- 2025年衣架衣夹项目提案报告
- 小花仙成长故事童话作文(8篇)
- 2025年脱硫除尘设备项目提案报告
- 2025年理财规划师(二级)考试试卷:金融衍生品市场分析
- 2025年工具油项目立项申请报告模板
- 2025年密闭式鸡舍光周期自动控制设备项目规划申请报告模范
- 金融行业从业资格及表现证明(7篇)
- 小学语文扩句、缩句专题
- 美军标电子装备环境试验-mil-std-810g
- 农村公路安全生命防护工程施工方案
- (部编版)统编版小学语文教材目录(一至六年级上册下册齐全)
- 抗滑桩专项的施工组织方案[专家评审]
- 常用弹簧钢号对照表
- 应用回归分析(第三版)何晓群_刘文卿_课后习题答案_完整版
- 小学二年级下册劳动教案
- 食品安全及卫生保证措施
- 60m3卧式液化石油气储罐设计
- 上期开特下期出特公式
评论
0/150
提交评论