收藏 分销(赏)

实验报告二主存空间分配及回收.doc

上传人:仙人****88 文档编号:7189875 上传时间:2024-12-27 格式:DOC 页数:11 大小:207KB
下载 相关 举报
实验报告二主存空间分配及回收.doc_第1页
第1页 / 共11页
实验报告二主存空间分配及回收.doc_第2页
第2页 / 共11页
实验报告二主存空间分配及回收.doc_第3页
第3页 / 共11页
实验报告二主存空间分配及回收.doc_第4页
第4页 / 共11页
实验报告二主存空间分配及回收.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

1、操作系统原理实验报告实验序号:2实验项目名称:主存空间的分配和回收学号姓名专业、班实验地点指导教师时间2010.11.15一、实验目的通过本实习帮助理解在不同的存储管理方式下应怎样进行存储空间的分配和回收。二、实验设备(环境)及要求微机、C+三、实验题目在可变分区管理方式下采用首次适应算法实现主存分配和回收。四、程序中使用的数据结构及符号说明结构1:typedef struct freeTable char proID6; int startAddr; /*空闲区起始地址*/ int length; /*空闲区长度,单位为字节*/ int flag; /*空闲区表登记栏标志,用0表示空表项,用

2、1表示未分配*/ struct freeTable *next; freeTabNode; /*空闲区表结点*/ 程序中定义了三个函数:allocate(char PName,int PLength)分配主存空间InitFreeTab()显示主存使用情况reclaim(char PName),回收作业名为PName的作业所占主存空间五、源程序/* 程序功能:模拟主存空间的分配与回收 其中空闲表为单链表,没有长度限制*/#include #include #include #include #define minisize 1typedef struct freeTable char proID

3、6; int startAddr; /*空闲区起始地址*/ int length; /*空闲区长度,单位为字节*/ int flag; /*空闲区表登记栏标志,用0表示空表项,用1表示未分配*/ struct freeTable *next; freeTabNode; /*空闲区表结点*/freeTabNode *freeTab;void InitFreeTab()freeTabNode *f,*temp;f=(freeTabNode *)malloc(sizeof(freeTabNode); strcpy(f-proID,OS); f-startAddr=0; f-length=5;f-fl

4、ag=0; freeTab=f; f=(freeTabNode *)malloc(sizeof(freeTabNode); strcpy(f-proID,1); f-startAddr=5; f-length=5;f-flag=0; freeTab-next=f; temp=f;f=(freeTabNode *)malloc(sizeof(freeTabNode); strcpy(f-proID,3); f-startAddr=10; f-length=4;temp-flag=0; temp-next=f;temp=temp-next;f=(freeTabNode *)malloc(sizeo

5、f(freeTabNode); f-startAddr=14;f-length=12;f-flag=1;temp-next=f;temp=temp-next;f=(freeTabNode *)malloc(sizeof(freeTabNode); strcpy(f-proID,2); f-startAddr=26; f-length=6;f-flag=0; temp-next=f;temp=temp-next; f=(freeTabNode *)malloc(sizeof(freeTabNode);f-startAddr=32;f-length=96;f-flag=1;f-next=NULL;

6、temp-next=f;void allocate(char PName,int PLength)freeTabNode *f,*temp;f=freeTab; while(f) /*寻找空间大于PLength的最小空闲区登记项k*/ if(f-length=PLength&f-flag=1) break; f=f-next; if(!f)/*未找到可用空闲区,返回*/ printf(无可用空闲区n); return; /*找到可用空闲区,开始分配*/ if(f-length-PLengthproID,PName); f-flag=0; /*修改成空表目状态*/ else /*若空闲区大小与要

7、求分配的空间差大于minisize大小,从中划出一部分分配*/ f-length=f-length-PLength; temp=(freeTabNode *)malloc(sizeof(freeTabNode); strcpy(temp-proID,PName); temp-startAddr=f-startAddr+f-length; temp-length=PLength; temp-flag=0; temp-next=NULL; temp-next=f-next; f-next=temp; return;/*主存分配函数结束*/void reclaim(char PName)/*回收作业

8、名为PName的作业所占主存空间*/freeTabNode *front,*rear,*temp;temp=freeTab; /*寻找空闲表中对应登记项*/if(strcmp(PName,OS)=0) printf(ERROR!); return;while(strcmp(temp-proID,PName)!=0|temp-flag=1)&temp)temp=temp-next;if(!temp)/*在已分配表中找不到名字为PName的作业*/printf(找不到该作业n);return;/*寻找回收分区的空闲上下邻,上邻表目front,下邻表目rear*/rear=temp-next;fro

9、nt=freeTab;while(front) if(front-next=temp) break; front=front-next;/*找到回收分区的上邻表目*/if(rear=NULL) if(front-flag=1) front-length+=temp-length;front-next=NULL;free(temp);else temp-flag=1;else if(front-flag=1&rear-flag=1) /* 上邻空闲区,下邻空闲区,三项合并*/ front-length=front-length+rear-length+temp-length; front-nex

10、t=rear-next;free(temp);free(rear); else if(front-flag=1&rear-flag=0) /*上邻空闲区,下邻非空闲区,与上邻合并*/ front-length+=temp-length;front-next=rear;free(temp); else if(front-flag=0&rear-flag=1) /*上邻非空闲区,下邻为空闲区,与下邻合并*/ temp-length+=rear-length; temp-next=rear-next; free(rear);temp-flag=1; else /*上下邻均为非空闲区,回收区域直接作修

11、改*/ temp-flag=1;main( )int a;freeTabNode *freeNode;char PName6;int PLength;InitFreeTab(); /*空闲分区表初始化:*/while(1)printf(*选择功能项*n);printf(t0-退出nt1-分配主存nt2-回收主存nt3-显示主存n);printf(选择项(03) :);scanf(%d,&a);switch(a)case 0: exit(0); /*a=0程序结束*/case 1: /*a=1分配主存空间*/ printf(要分配的作业名PName:);scanf(%s,PName);print

12、f(n和作业所需内存大小PLength(1K): ); scanf(%d,&PLength); allocate(PName,PLength);/*分配主存空间*/ break;case 2: /*a=2回收主存空间*/ printf(输入要回收分区的作业名:); scanf(%s,PName); reclaim(PName);/*回收主存空间*/ break;case 3: /*a=3显示主存情况*/ printf(-n); printf(内存分区表:n);printf(tt进程标识 起始地址 分区长度t状态n); freeNode=freeTab; /*打印空闲区表*/while(free

13、Node) if(freeNode-flag=1) printf(tt空t%5dt%6dtt空闲n,freeNode-startAddr,freeNode-length); else printf(tt%st%5dt%6dtt空表目n,freeNode-proID,freeNode-startAddr,freeNode-length);freeNode=freeNode-next; getchar();break;default:printf(没有该选项n);/*case*/*while*/*main()*/六、运行调试结果初始界面:分配主存,五个作业名:P1、P2、P3、P4、P5显示主存使用情况:回收主存P2:回收P5:结束七、实验心得和收获1、函数功能要具体,每个函数完成的功能清晰高效2、编程要有自己的风格3、界面要整洁七、教师评语1按时完成实验;2数据结构及符号说明完整明了;3有源程序清单;4运行调试结果有代表性;5实验报告的撰写认真、格式符合要求.签名:金晶日期:成绩

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服