版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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(freeNode) 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*/*wh
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/ZHHX 006-2025主要鲜切花流通规范
- T/HZFDS 001-2025体外诊断试剂出口质量管理能力评价规范
- T/CMAM M55-2025溢血症(免疫性血小板减少症)蒙医诊疗指南
- T/CARD 057-2024脑卒中重症康复服务指南
- T/CSCMA 0004-2023出口工程机械二手设备 评估服务规范
- 高校产学研合作基础培训
- 2025~2026学年广东省茂名市高州市北师大版六年级上册阶段练习(三)数学试卷【附答案】
- PHP后端面试题及详细答案(实战完整版)
- 引水隧洞衬砌及防渗堵漏施工方案
- 2027届山东省青岛市黄岛十中学数学八年级第一学期期末教学质量检测模拟试题含解析
- 2026年保密培训考试题带答案(完整版)
- 中国邮政集团招聘考试历年真题
- 2026年一级造价师案例考试真题及答案
- 回复客户投诉的的质量整改函(6篇)
- 2026年春季云南云天化股份有限公司招聘(校园招聘)笔试历年参考题库附带答案详解
- 抖音【服饰户外行业IP】山山而川-雪山篇招商方案
- 测绘安全生产事故报告及处置办法
- PICC导管继发异位案例分析
- 《烹饪化学》课件(共七章)
- 胎儿窘迫教学课件
- 人教版数学五年级上册第三单元第三课时 商的近似数 同步测试(含解析)
评论
0/150
提交评论