下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验八内存分配与回收算法实现
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年度大型酒店水电设施升级改造合同范本3篇
- 2024年公司企业管理制度
- 2024集成电路设计与制造许可合同
- 2024运输合同海上货物运输合同
- 2024年4月全国自考《管理信息系统》试题
- 2024环保科技公司与政府废弃物处理项目合同
- 群体学习理论视角下的教研群体认知发展的研究与实践
- 2024款自行车买卖标准协议范本下载版
- 动物药理知到智慧树章节测试课后答案2024年秋辽宁农业职业技术学院
- 公安保密知识培训课件
- 2023-2024学年天津市四校联考高一(下)期末地理试卷
- 2025年浙江舟山国家远洋渔业基地建设发展集团有限公司招聘笔试参考题库附带答案详解
- 2024秋新商务星球版地理7年级上册教学课件 第5章 地球表层的人文环境要素 第3节 世界文化的多样性
- 重庆市渝北区六校联盟2024-2025学年八年级上学期12月月考数学试题
- 2024年山东省聊城市中考英语真题含解析
- 安徽省芜湖市2023-2024学年高一上学期期末考试 地理 含答案
- 全新标前协议书范本下载
- 企业反恐安全经费使用制度
- 痛风课件教学
- 2024公共数据授权运营实施方案
- 学校食堂从业人员培训制度
评论
0/150
提交评论