首次适应算法实验报告 下载本文

实 验 报 告

系 别 计算机科学系 课程名称 班 级 计科1201 计算机操作系统 学 号 姓 名 实验名称 时间 2014/12/29 地点 机房 c105 内存管理 实 验 过 程 1

一.实验目的 1.了解内存管理的功能; 2.掌握进程可变内存管理的几种内存分配与回收算法; 3.掌握可变分区算法中空闲分区的合并方法; 二.实验内容 实现首次适应算法; 三.实验程序 #include #include #include #define number 100//进程数量 int neicun=200;//内存块默认大小 int fqNum=1;//已使用分区数目,进程数目=fqNum-1 //结构类型 struct fqinfo//分区信息 { int start;//开始位置 int end;//结束位置 char name;//进程名称 int capactity;//进程大小或者分区块大小 int flag;//分区使用标记,0:未使用 1:已使用 2:回收或者合并的分区 3:尾部 }fqlist[number];//fqlist[]分区列表 //函数定义 int menu();//功能菜单 int init_neicun();//初始化内存大小 int fenpei();//为进程分配内存 int first_fit(char name,int size);//首次适应算法 int Memory_recovery();//内存回收 int showit();//显示进程 int exit();//退出系统 //功能菜单menu int menu(){ int select; printf(\ printf(\ 1: 添加进程 2: 回收内存\\n\ printf(\ 3: 查看内存分配 4: 退出\\n\

2

printf(\ printf(\ scanf(\ switch(select){ case 1:fenpei();break; case 2:Memory_recovery();break; case 3:showit();break; case 4:exit();break; } menu(); return 0; } //初始化内存大小 int init_neicun(){ for(int i=0;i

3

int first_fit(char jname,int size){ printf(\ int flag=0;//默认flag=0情况分配失败,而flag=1时分配成功 int sum=0;//对sum的初始化 for(int i=0;isize)//如果内存空间大于进程长度 { if(ii;j--) { fqlist[j]=fqlist[j-1]; } fqlist[i+1].name='n'; fqlist[i+1].start=sum+size; fqlist[i+1].end=fqlist[i].end; fqlist[i+1].capactity=fqlist[i].capactity-size; fqlist[i+1].flag=fqlist[i].flag; } fqlist[i].name=jname; fqlist[i].start=sum; fqlist[i].end=sum+size-1; fqlist[i].capactity=size; fqlist[i].flag=1; fqNum++;//进程数目增1 //需要把以后的分区块往后一个位置 flag=1; }else{ //当未使用的分区块大小不足时 sum=sum+fqlist[i].capactity; } }else{//当该分区块在使用时 sum=sum+fqlist[i].capactity; } } if(flag==1) printf(\已为进程%c分配内存区!\\n\ else printf(\为进程%c分配内存区失败!\\n\ return 0; } //回收内存

4

int Memory_recovery(){ int flag=0;//标记回收是否成功 0:失败 1:成功 int sflag=0;// int tflag=0;// char jname='z'; getchar();//吸收空白键 printf(\请输入进程名称:\ scanf(\ for(int i=0;i

5