




免费预览已结束,剩余9页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验报告学院(系)名称:计算机与通信工程学院姓名张君卓学号20135612专业计算机科学与技术班级2013级1班实验项目实验二:存储器的分配与回收算法实现课程名称操作系统课程代码0668036实验时间2015 年11月13日 第5、6节2011 年12月1 日 第3、4节2011 年12月5 日 第7、8节实验地点软件实验室7-216软件实验室7-219软件实验室7-215批改意见成绩教师签字: 实验内容:1. 模拟操作系统的主存分配,运用可变分区的存储管理算法设计主存分配和回收程序,并不实际启动装入作业。2. 采用最先适应法、最佳适应法、最坏适应法分配主存空间。3. 当一个新作业要求装入主存时,必须查空闲区表,从中找出一个足够大的空闲区。若找到的空闲区大于作业需要量,这是应把它分成二部分,一部分为占用区,加一部分又成为一个空闲区。4. 当一个作业撤离时,归还的区域如果与其他空闲区相邻,则应合并成一个较大的空闲区,登在空闲区表中。5. 运行所设计的程序,输出有关数据结构表项的变化和内存的当前状态。实验要求:1 详细描述实验设计思想、程序结构及各模块设计思路;2 详细描述程序所用数据结构及算法;3 明确给出测试用例和实验结果;4 为增加程序可读性,在程序中进行适当注释说明;5 认真进行实验总结,包括:设计中遇到的问题、解决方法与收获等;6 实验报告撰写要求结构清晰、描述准确逻辑性强;7 实验过程中,同学之间可以进行讨论互相提高,但绝对禁止抄袭。【实验过程记录(源程序、测试用例、测试结果及心得体会等)】#include #include #include using namespace std;typedef struct FreeLink/定义自由链struct FreeLink *prior;char name;int start;int size;bool flag;struct FreeLink *next;* ptr,*head;head top;ptr p;void print()/将内存分配情况打印到屏幕上p=top;cout*内存分配情况表*endl;cout区号tt起始位置t区间长度t区间状态tendl;docoutnamettstartttsizeflag=false)cout空闲endl;elsecout已占用next;while(p!=NULL);void clear()/结束操作时清空“内存”以备其他操作dop=top;top=top-next;free(p);while(top!=NULL);void asc(ptr &p)/最佳适应法的内存分配函数int min;ptr op;FreeLink *fl=(FreeLink *)malloc(sizeof(FreeLink);cout请输入要分配内存的进程名fl-name;cout请输入要分配内存的大小fl-size;min=256;fl-flag=true;doif(p-flag=false&p-sizesize=fl-size)min=p-size;op=p;p=p-next;while(p!=NULL);if(op-sizefl-size) fl-start=op-start; op-start=fl-start+fl-size; op-size=op-size-fl-size; fl-next=op; fl-prior=op-prior; op-prior-next=fl; op-prior=fl; goto flag1;if(op-size=fl-size) op-flag=fl-flag; op-name=fl-name; free(fl); goto flag1;cout内存过小,分配失败!endl;goto flag2;flag1: cout分配成功!endl;flag2: ;void dec(ptr &p)/最坏适应法的内存分配函数int max;ptr op;FreeLink *fl=(FreeLink *)malloc(sizeof(FreeLink);cout请输入要分配内存的进程名fl-name;cout请输入要分配内存的大小fl-size;max=fl-size;fl-flag=true;doif(p-flag=false&p-size=max)max=p-size;op=p;p=p-next;while(p!=NULL);if(op-sizefl-size) fl-start=op-start; op-start=fl-start+fl-size; op-size=op-size-fl-size; fl-next=op; fl-prior=op-prior; op-prior-next=fl; op-prior=fl; goto flag3;if(op-size=fl-size) op-flag=fl-flag; op-name=fl-name; free(fl); goto flag3;cout内存过小,分配失败!endl;goto flag4;flag3: cout分配成功!prior-flag=false&p-next-flag=false)x=1;if(p-prior-flag=false&p-next-flag=true)|(p-prior-flag=false&p-next=NULL)x=2;if(p-prior-flag=true&p-next-flag=false)|(p-prior=NULL&p-next-flag=false)x=3;if(p-prior-flag=true&p-next-flag=true)|(p-prior=NULL&p-next-flag=true)|(p-prior-flag=true&p-next=NULL)x=4; switch(x)case 1:p-next-prior=p-prior; p-prior-next=p-next; p-prior-size=p-prior-size+p-size+p-next-size; p-prior-next=p-next-next; if(p-next-next!=NULL)p-next-next-prior=p-next-prior; free(p-next); free(p); break; case 2:if(p-next=NULL) p-prior-next=p-next; else p-next-prior=p-prior; p-prior-next=p-next; p-prior-size=p-prior-size+p-size; free(p); break;case 3:if(p-prior=NULL) top=p-next; p-next-prior=NULL; p-next-start=p-start; p-next-size=p-next-size+p-size; else p-next-prior=p-prior; p-prior-next=p-next;p-next-start=p-start; p-next-size=p-next-size+p-size; free(p); break;case 4:p-name=; p-flag=false; break; void allocate(ptr &p)/最先适应法的内存分配函数FreeLink *fl=(FreeLink *)malloc(sizeof(FreeLink);cout请输入要分配内存的进程名fl-name;cout请输入要分配内存的大小fl-size;fl-flag=true;doif(p-flag=false&p-sizefl-size) fl-start=p-start; p-start=fl-start+fl-size; p-size=p-size-fl-size; fl-next=p; fl-prior=p-prior; p-prior-next=fl; p-prior=fl; goto a;if(p-flag=false&p-size=fl-size) p-flag=fl-flag; p-name=fl-name; free(fl); goto a;p=p-next;while(p!=NULL);cout内存过小,分配失败!endl;goto b;a: cout分配成功!endl;b: ; void recover(ptr &p)/内存回收函数char n = ;coutn;do if(p-flag=true&p-name=n)splice(p); goto c; p=p-next;while(p!=NULL);cout内存并未分配给对应进程,回收失败!endl;goto d;c: cout内存回收成功!next=top;pcb-prior=top-prior; top-prior=pcb;pcb-start=top-start;cout请输入要为系统分配的内存块名pcb-name;cout请输入要分配内存的大小endl; goto f;e:cout超过内存最大容量请重新输入要分配内存的大小pcb-size;if(pcb-size256) goto e;top-size=top-size-pcb-size;top=pcb;top-flag=true;top-next-start+=top-size;print();while(true)dop=top-next;cout请从下列选项中进行选择endl;cout1.分配内存endl;cout2.回收内存endl;cout3.结束操作endl;coutchoice;while(choice!=1&choice!=2&choice!=3);switch(choice)case 1:allocate(p);print();break;case 2:recover(p);print();break;case 3:clear();return 0;break;int bfa()/最佳适应法char choice= ;print();ptr pcb=(FreeLink *)malloc(sizeof(FreeLink);pcb-next=top;pcb-prior=top-prior; top-prior=pcb;pcb-start=top-start;cout请输入要为系统分配的内存块名pcb-name;cout请输入要分配内存的大小endl; goto h;g:cout超过内存最大容量请重新输入要分配内存的大小pcb-size;if(pcb-size256) goto g;top-size=top-size-pcb-size;top=pcb;top-flag=true;top-next-start+=top-size;print();while(true)dop=top-next;cout请从下列选项中进行选择endl;cout1.分配内存endl;cout2.回收内存endl;cout3.结束操作endl;coutchoice;while(choice!=1&choice!=2&choice!=3);switch(choice)case 1:asc(p);print();break;case 2:recover(p);print();break;case 3:clear();return 0;break;int wfa()/最坏适应法char choice= ;print();ptr pcb=(FreeLink *)malloc(sizeof(FreeLink);pcb-next=top;pcb-prior=top-prior; top-prior=pcb;pcb-start=top-start;cout请输入要为系统分配的内存块名pcb-name;cout请输入要分配内存的大小endl; goto j;i:cout超过内存最大容量请重新输入要分配内存的大小pcb-size;if(pcb-size256) goto i;top-size=top-size-pcb-size;top=pcb;top-flag=true;top-next-start+=top-size;print();while(true)dop=top-next;cout请从下列选项中进行选择endl;cout1.分配内存endl;cout2.回收内存endl;cout3.结束操作endl;coutchoice;while(choice!=1&choice!=2&choice!=3);switch(choice)case 1:dec(p);print();break;case 2:recover(p);print();break;case 3:clear();return 0;break;int main()/主函数char choice = ; ptr free=(FreeLink *)malloc(sizeof(FreeLink); top=free; top-name=; top-start=0; top-size=256;top-flag=false; top-prior=NULL; top-next=NULL;cout*Memory allocation and recovery algorithm*endl;cout*存储器的分配与回收算法*endl;while(true)docout请从下列选项中进行选择endl;cout1.最先适应算法endl;cout2.最优适应算法
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届重庆市南岸区南开(融侨)中学九年级化学第一学期期中学业质量监测模拟试题含解析
- 2026届吉林省前郭尔罗斯蒙古族自治县英语九上期末教学质量检测模拟试题含解析
- 广东省佛山市南海中学2026届九年级化学第一学期期中联考试题含解析
- 2026届南通市崇川区启秀中学化学九年级第一学期期中统考试题含解析
- 河北省保定市涞水县2026届英语九年级第一学期期末调研试题含解析
- 四川省乐山市市中区2024-2025学年七年级下学期期末道德与法治试题(含解析)
- 2026届重庆市江北新区联盟化学九上期末监测试题含解析
- 湖南省长沙市望城县2026届英语九年级第一学期期末复习检测试题含解析
- 2026届咸宁市重点中学化学九上期中达标检测模拟试题含解析
- 2026届贵州省兴仁市第九中学九年级化学第一学期期中综合测试模拟试题含解析
- 2025至2030年中国汽车制动器行业市场分析研究及发展战略研判报告
- 2025至2030中国淀粉粘合剂行业现状调查与前景竞争对手分析报告
- 黑龙江:装配式混凝土矩形渠道应用技术规范(DB23-T 2334-2019)
- JG/T 127-2017建筑门窗五金件滑撑
- T/CGCC 7-2017焙烤食品用糖浆
- 江苏省2025年中职职教高考文化统考数学试题答案
- 医院培训课件:《医疗质量管理办法》
- 临床洗胃操作演练脚本分享
- 公司服务商管理制度
- 杉树林管理制度
- 农光互补光伏发电项目前景分析与可行性评估
评论
0/150
提交评论