操作系统实验报告内容_第1页
操作系统实验报告内容_第2页
操作系统实验报告内容_第3页
操作系统实验报告内容_第4页
操作系统实验报告内容_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

操作系统课程设计PAGEPAGE2郑州航空工业管理学院计算机科学与应用系课程设计报告操作系统原理姓名学号指导教师专业计算机科学与技术S日期2014年6月5日成绩题目动态分区分配算法的模拟指导教师评语目录TOC\o"1-2"\h\z\u293231题目简述 296712需求分析 210362.1设计思想 2289892.2要求 34792.3任务 3140252.4运行环境 3218332.5开发工具 3115183概要设计与详细设计 329253.1系统流程图 34873.2算法流程图 5250474编码与实现 10199354.1数据结构和算法设计 1093234.2程序调试与截图 10220965课程设计总结 1720407参考文献 1826412附录 19

3.1.1系统流程图图3.1.1系统流程图3.2算法流程图3.2.1内存分配流程图图3.2.1内存分配流程图3.2.2.首次适应算法流程图图3.2.2首次适应算法流程图3.2.3最佳适应算法流程图图3.2.3最佳适应算法流程图3.2.4最坏适应算法流程图图3.2.4最坏适应算法流程图3.2.5内存回收流程图图3.2.5内存回收流程图4编码与实现4.1数据结构和算法设计相关数据结构定义:空闲分区结构:typedefstructfreearea()线性链表结构:typedefstructDuLNode()带头结点内存空间链表结构:StatusInitblock()内存分配:Statusalloc()显示主存:voidshow()测试类(主函数类):classTestForMemManage4.2程序调试与截图1)首界面2)首次适应算法测试数据:为作业申请空闲区800KB。作业1申请资源100kb,作业2申请资源120kb,作业3申请资源130kb,作业4申请资源140kb,释放作业1和作业3,作业5申请资源160kb,这时,按照表从头开始查询,第一个找到满足条件的就停止查找,并分配资源。运行结果如下图所示:3)最佳适应算法测试数据:为作业申请空闲区800KB。作业1申请资源105kb,作业2申请资源115kb,作业3申请资源125kb,作业4申请资源135kb,释放作业2和作业4,作业5申请资源145kb,这时,在每次的分配内存中,总是找到既满足要求又是最小空闲分区,然后分配资源,这样,就避免了“大材小用”的问题。运行结果如下图所示:最坏适应算法测试数据:为作业申请空闲区800KB。作业1申请资源80kb,作业2申请资源100kb,作业3申请资源120kb,作业4申请资源140kb,释放作业1和作业3,作业5申请资源160kb,这时,在扫描整个空闲分区链表时,总是找到既满足要求又是最大空闲分区,然后把它分割给作业。运行结果如下图所示:5课程设计总结为期五周的课程设计,对于我个人来说是相当有难度的。在设计的过程中,有很多问题不是很清楚,所以做起来就就很困难,刚开始的时候都有点无从下手的感觉。很多时候在遇到问题时,基本知识都了解,但是就不知道怎么才能把它们都整合到一块,也就是说知识都是很零散的,没有一个完整的系统。而且,又由于基础知识不牢固,使得我在这次的课程设计中感到更加力不从心。在设计的过程中,每走一步就会发现,思路想出来很容易,但涉及到实现的时候,总是有点手无足措。对于本次的课程设计,里面还有很多需要改进的地方。一个程序的顺利出炉,少不了反复地调试和修改。在调试的过程中,总是会发生很多错误,但在解决这些错误的时候,开始很模糊的概念就会变得越来越清晰。其实很多错误都是很类似的,只要解决了一个,其余的就会迎刃而解了。“千里之行,始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义,我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。这次的课程设计,使我树立了正确的设计思想,培养实事求是、严肃认真、高度负责的学习作风,加强操作能力的训练和培养严谨求实的科学作风更尤为重要。在这次设计过程中,充分体现出自己单独设计课程的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。通过本次实验,我掌握了实现多道程序并发执行,操作系统是如何通过作业调,选择作业进入内存以及系统是如何为进入内存的作业分配内存空间,实现多道作业同时驻留内存,就绪进程队列中的多个进程是如何以分式方式共享CPU,作业运行完成离开系统时,系统如何进行内存回收。最后,感谢我们的荆立夏老师,老师严谨细致、一丝不苟的作风将会一直是我工作、学习中的榜样;老师循循善诱的教导和不拘一格的教学思路给予我无尽的启迪;这次课程设计的每个实验细节和每个数据,都离不开老师您的细心指导。而您开朗的个性和宽容的态度,帮助我能够很顺利的完成了这次课程设计。祝愿老师您在以后的工作和生活中继续保持健康的身体和愉快的心情,再次感谢!同时,也很感谢对我帮助过的同学们,谢谢你们对我的帮助和支持,让我感受到同学的友谊和温暖。参考文献[1]李玲玲.C语言程序设计[M].辽宁大学出版社,2010.1[2]谭浩强.程序设计基础与C语言.沈阳:辽宁大学出版社,2010.1[3]严蔚敏、吴伟民等.数据结构(C语言版).北京:清华大学出版社,2008.[4]汤子瀛、梁红兵等.《计算机操作系统第三版》.北京:西安电子科技大学出版社,2009.附录源代码#include<iostream.h>#include<stdlib.h>#defineFree0//空闲状态#defineBusy1//已用状态#defineOK1//完成#defineERROR0//出错#defineMAX_length800//最大内存空间为800KBtypedefintStatus;typedefstructfreearea//定义一个空闲区说明表结构{intID;//分区号longsize;//分区大小longaddress;//分区地址intstate;//状态}ElemType;//线性表的双向链表存储结构typedefstructDuLNode//doublelinkedlist{ElemTypedata;structDuLNode*prior;//前趋指针structDuLNode*next;//后继指针}DuLNode,*DuLinkList;DuLinkListblock_first;//头结点DuLinkListblock_last;//尾结点Statusalloc(int);//内存分配Statusfree(int);//内存回收StatusFirst_fit(int,int);//首次适应算法StatusBest_fit(int,int);//最佳适应算法StatusWorst_fit(int,int);//最坏适应算法voidshow();//查看分配StatusInitblock();//开创空间表//开创带头结点的内存空间链表StatusInitblock(){block_first=(DuLinkList)malloc(sizeof(DuLNode));block_last=(DuLinkList)malloc(sizeof(DuLNode));block_first->prior=NULL;block_first->next=block_last;block_last->prior=block_first;block_last->next=NULL;block_last->data.address=0;block_last->data.size=MAX_length;block_last->data.ID=0;block_last->data.state=Free;returnOK;}//内存分配Statusalloc(intch){intID,request;cout<<"请输入作业(分区号):";cin>>ID;cout<<"请输入需要分配的主存大小(单位:KB):";cin>>request;if(request<0||request==0){cout<<"分配大小不合适,请重试!"<<endl;returnERROR;}if(ch==2)//选择最佳适应算法{if(Best_fit(ID,request)==OK) cout<<"分配成功!"<<endl;else cout<<"内存不足,分配失败!"<<endl;returnOK;}else//默认首次适应算法{if(First_fit(ID,request)==OK) cout<<"分配成功!"<<endl;else cout<<"内存不足,分配失败!"<<endl;returnOK;} if(ch==3)//选择最坏适应算法{if(Worst_fit(ID,request)==OK) cout<<"分配成功!"<<endl;else cout<<"内存不足,分配失败!"<<endl;returnOK;}else//默认首次适应算法{if(First_fit(ID,request)==OK) cout<<"分配成功!"<<endl;else cout<<"内存不足,分配失败!"<<endl;returnOK;}}//首次适应算法StatusFirst_fit(intID,intrequest)//传入作业名及申请量{//为申请作业开辟新空间且初始化DuLinkListtemp=(DuLinkList)malloc(sizeof(DuLNode));temp->data.ID=ID;temp->data.size=request;temp->data.state=Busy;DuLNode*p=block_first->next;while(p){if(p->data.state==Free&&p->data.size==request){ //有大小恰好合适的空闲块p->data.state=Busy;p->data.ID=ID;returnOK;break;}if(p->data.state==Free&&p->data.size>request){ //有空闲块能满足需求且有剩余"temp->prior=p->prior;temp->next=p;temp->data.address=p->data.address;p->prior->next=temp;p->prior=temp;p->data.address=temp->data.address+temp->data.size;p->data.size-=request;returnOK;break;}p=p->next;}returnERROR;}//最佳适应算法StatusBest_fit(intID,intrequest){intch;//记录最小剩余空间DuLinkListtemp=(DuLinkList)malloc(sizeof(DuLNode));temp->data.ID=ID;temp->data.size=request;temp->data.state=Busy;DuLNode*p=block_first->next;DuLNode*q=NULL;//记录最佳插入位置while(p)//初始化最小空间和最佳位置{if(p->data.state==Free&&(p->data.size>request||p->data.size==request)){q=p;ch=p->data.size-request;break;}p=p->next;}while(p){if(p->data.state==Free&&p->data.size==request){ //空闲块大小恰好合适p->data.ID=ID;p->data.state=Busy;returnOK;break;}if(p->data.state==Free&&p->data.size>request){ //空闲块大于分配需求if(p->data.size-request<ch)//剩余空间比初值还小{ch=p->data.size-request;//更新剩余最小值q=p;//更新最佳位置指向}}p=p->next;}if(q==NULL)returnERROR;//没有找到空闲块else{ //找到了最佳位置并实现分配temp->prior=q->prior;temp->next=q;temp->data.address=q->data.address;q->prior->next=temp;q->prior=temp;q->data.address+=request;q->data.size=ch;returnOK;}}//最坏适应算法StatusWorst_fit(intID,intrequest){intch;//记录最大剩余空间DuLinkListtemp=(DuLinkList)malloc(sizeof(DuLNode));temp->data.ID=ID;temp->data.size=request;temp->data.state=Busy;DuLNode*p=block_first->next;DuLNode*q=NULL;//记录最佳插入位置while(p)//初始化最大空间和最佳位置{if(p->data.state==Free&&(p->data.size>request||p->data.size==request)){q=p;ch=p->data.size-request;break;}p=p->next;}while(p){if(p->data.state==Free&&p->data.size==request){ //空闲块大小恰好合适p->data.ID=ID;p->data.state=Busy;returnOK;break;}if(p->data.state==Free&&p->data.size>request){ //空闲块小于分配需求if(p->data.size-request>ch)//剩余空间比初值还大{ch=p->data.size-request;//更新剩余最大值q=p;//更新最佳位置指向}}p=p->next;}if(q==NULL)returnERROR;//没有找到空闲块else{ //找到了最佳位置并实现分配temp->prior=q->prior;temp->next=q;temp->data.address=q->data.address;q->prior->next=temp;q->prior=temp;q->data.address+=request;q->data.size=ch;returnOK;}}//内存回收Statusfree(intID){DuLNode*p=block_first;while(p){if(p->data.ID==ID){p->data.state=Free;p->data.ID=Free;if(p->prior->data.state==Free)//与前面的空闲块相连{p->prior->data.size+=p->data.size;p->prior->next=p->next;p->next->prior=p->prior;}if(p->next->data.state==Free)//与后面的空闲块相连{p->data.size+=p->next->data.size;p->next->next->prior=p;p->next=p->next->next;}break;}p=p->next;}returnOK;}//显示主存分配情况voidshow(){cout<<"+++++++++++++++++++++++++++++++++++++++\n";cout<<"+++主存分配情况+++\n";cout<<"+++++++++++++++++++++++++++++++++++++++\n";DuLNode*p=block_first->next;while(p){cout<<"分区号:";if(p->data.ID==Free)cout<<"Free"<<endl;elsecout<<p->data.ID<<endl;cout<<"起始地址:"<<p->data.address<<endl;cout<<"分区大小:"<<p->data.size<<"KB"<<endl;cout<<"状态:";if(p->data.stat

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论