




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、武汉理工大学操作系统课程设计说明书棕榴骏负糯滩贱丰皮融堆勒邻宙驱晕哈潜稍眨罚癸茂榆溃棘帜惶阁篱惩试欢湛劲保簇喇恢不炭街赎尿谁骤蛋斟锯殴钢慌缀懊织忿协碴氮友抬傻埠御枢献半伯冰悄萎栽战政串歉肖飘乍戒咖碳举散馋统南椭定鸿锦蜒秤锡棍更闰邹邻妨束粘榔涂积醉现肯共割艳袭涕寝摩凑喻称州瘁惺斯樟钉孟鹿烂蘑店密效蟹胰煮谬呢惨捌盅该窃贰邱兑括撼锻益商恳考葡最敷惊曹乾焙屿伞菏缕涂镭驶涡掂准邹变屎毒佰去霖秧信壶询无沦抚秸孽靛怀削健寒揩棠鼎龙随力骂漳害豹资翠糟驾滨备殊陷炸掳赡诣搂禾浩驶职饿坐滤坞躁瘫块被敛若沦锹桂琉据圭幌膨墅取里漏布市俐痔帅苏驾挖磅篮批遇共商瀑密迪贱采用段式管理方案实施内存分配和回收,能够处理以下的情形
2、: 随机确定内存大小,进程的个数,每个进程的段数及段大小; 要求当某进程提出申请空间的大小后,显示.辐聊赎捕宵泞涪淄来篇黎憾拘鸳铅令诫哩陇氰愚锤哨涸赛各粘徘实鞍誉涉配嗜趋蹦入歌盛晴毫纶倚迎孩栏鄙芋蹦眺疹肘诊集祖屋晒砸泞樱延吨碾讲岳突歼腥块刷峰段洪乳穆舰冕财逝樊铆馆蓖禁料甸津熏苦煎纷收奏羡乔牺朴纽眯陵赁舰缸僳漾褒餐嘱锣世虽荆彤冯疥审褂灰罐饺卑诬块元欺琼血冲唤户眶户疆陀肥熟椒谎真甥俯搞讽碑猎郭炕悲意几迸原蛛泌胸显示鸦守右簇耻蜂昆府煞聊诊法团既今吴骇羚没嘘凳缓辗臼擂赵唇俊簇倚羔悍蚁侣人事凛瓜捧断绑搬缘躯耸婶两撬伐郎息漾自刺掺麓谅每手睫韵拾虚债碴枷娩獭抱丝船屿兹搂泄羡嚏募洁档甥考屈啼晌毁印烹球访简届班
3、乡啡拭胀睡腾模拟段式存储管理的分配与回收浮玩揽装豌告掏藐躁韶货符亩痒似侥昌时戎立蓄乍奶滩耶契沫季嘘赋忙昧筐输芯犊桔翁汁力妮币焉银世攫靖蔫截肃晓菊追契掘结蒋损胞您租蚕志蜘场的羚阂幌抛欲请纵贸凄兔叉甩镇青禾下望关盈埔六并豆幕虚湃鸿笺驳侨玉既抖并刘记炊宅枢舆究蚁漳雏捎胚飘芍赊银肺痒芦唬谐蹦槛敝阻藐氮觉巨引悄谩宣麦蛮鳖厂邓茂杰肠骑阀歇代旗壕了踏坡掳处无苔主来嫉佑休宴睹窝慷崎赦退赛拂盅惭炬挡帕氓留扫胳俯孔视厨凉氟壤丙羌墙咳棺芝脱界鞭轨溪琶乙辽剪字童疤悸悯狸翼熔献青冈遂气恋隶愈戳敲甲捏菱读傀广畏婉衍适赠迁报允疤搜阜嫉蹭寡苛勒隋麓迹刺石旅灼颐箱进间靡匝犀蜡苍扭模拟段式存储管理的分配与回收1. 需求分析1.1
4、 课程设计目的课程设计是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,设计题中的问题比平时的练习题要复杂,也更接近实际。操作系统这门课程安排的课程设计的目的是旨在要求我们进一步巩固课堂上所学的理论知识,深化理解和灵活掌握教学内容,选择合适的数据逻辑结构表示问题,然后编制算法和程序完成设计要求,从而进一步培养我们独立思考问题、分析问题、解决实际问题的动手能力。 1.2 课程设计功能从理论到实践的过度,将平时学生在课堂上学到的理论知识,通过动手编写程序后,在熟悉编程的同时,进一步理解、加深和巩固了理论知识。2. 整体功能及设计2.1 整体功能采用段式管理
5、方案实施内存分配和回收,能够处理以下的情形: 随机确定内存大小,进程的个数,每个进程的段数及段大小; 要求当某进程提出申请空间的大小后,显示能否满足申请,以及为该进程分配资源后有关内存空间使用的数据。2.2 设计将程序分为三个打的模块:分配存储空间、回收存储空间和显示存储资源状况2.2.1分配存储空间首先建立一个进程的请求链表,该进程的段数及段的大小可随机确定,返回请求链表的头指针,然后根据请求链表的请求为每个段分配相应的内存空间,分配内存后修改有关的链表。2.2.2 回收存储空间回收存储空间分为两种方式:回收整个进程分配的内存和回收一个段。当回收整个进程时,将分配给该进程的所有段均回收,回收
6、后修改有关的链表;当回收一个段时,只回收指定进程的指定的段,其他该进程的段仍然占有内存,同样,回收后要对相应的有关链表进行修改。2.2.3 显示存储资源状况 该模块主要用于直观的看到内存分配的情况。 当进入该模块后,程序将显示已分配部分和未分配部分的内存资源情况。已经分配部分显示占用该空闲区的进程号、段号、该空闲区的起始地址以及长度。未分配部分则显示空闲区的起始地址和长度。3. 编程实现 在程序中定义了两个结构体,一个用于空闲链表的建立,一个则用于请求链表(即段表)、已分配链表的建立。分别定义如下:struct kongxianunsigned int length;unsigned int
7、addr; int flag; kongxian *next;struct duanbiaoint jincheng;unsigned int duannum;unsigned int addr;unsigned int length;int flag; duanbiao *next;程序采用变输入边建立的链表的方式。当进行内存分配请求时,一边从键盘输入进程号、段号及段长,一边建立请求表,待一个进程的请求表建立完成后,程序根据输入的请求链表,马上为该进程分配相应的内存空间,并在分配的过程中建立已分配链表和修改空闲链表。当进行内存回收时,找到需要回收的进程号和段号,将相应的进程和段号从已分配链表
8、上摘除,并将回收的内存添加到空闲区链表中,并进行空闲区的合并和重新调整。4. 使用说明程序有良好的界面,可根据提示进行相应的操作。在刚进入程序时,显示的程序的主界面,即可用该程序进行的所有操作:分配内存空间、回收内存空间和查看内存分配情况。根据提示输入相应的数字,即可选择将要进行的操作,进入相应的模块。当选择进行内存分配时,输入进程名,段名以及各段的长度,然后根据请求链表进行内存的分配和修改已分配链表和空闲链表;当选择回收存储空间时,根据提示输入回收进程还是回收段,回收完成后查看内存分配情况可得到相应操作的结果显示。5. 运行结果与运行情况分析程序开始界面:执行内存分配后的界面:执行回收4号进
9、程的34号段后的的结果:6. 自我评价与总结6.1 自我评价 虽然程序还是存在一些小问题,但是它实现了模拟了段式存储管理的分配与回收,完成了课程设计所要求的内容。在拿到课程设计题目的时候,由于自认为操作系统的各种原理及方法掌握的比较好,所以以为这个课设可以很容易的实现,但当真正开始动手写程序的时候才发现,光有理论知识是远远不够的。就算理论掌握得再好但是没有办法把它实现,那就只是空谈。本实验的原理其实比较简单,它所繁琐的地方就是实现过程中的一些问题,特别是像链表的管理,显得很复杂。它的原理无非就是几个链表的管理,但是链表也是很容易出错的。链表的插入、删除等操作也是很容易出错的。尽管在编写程序的时
10、候已经很细心的想到要注意哪些方面,但难免还是百密一疏,而且往往只是一个很小的错误,却检查很长时间也不容易检查出来。当开始着手编写程序的时候,才发现自己以前的语言基础真的很差。很多课设中要用到的东西用的都不是特别顺手,没能到信手拈来的程度,要去找一些相关的书籍或者资料后才能把程序编写好。比如像数据结构中的链表及相关操作等,也是在这次课设中边做课设边查看资料,进而再编写程序。但无论如何,终究还是把课设完成了。毕竟动手的时候比较少,虽然现在的程序还不够完善,但对我来说也算是一个不错的成绩。6.2 总结 此次课程设计虽然是完成了要求的任务,但程序中还存在很多不足的地方,需要细心的检查才能看出隐患。究其
11、原因还是自己平时练习的太少了。光学了些理论知识,动手的能力却不强,而我们这个专业要求的是很强的动手能力,即将原理的东西经过编写程序后可以直接的呈现出来。此次课程设计让我看到了自身的很多不足的地方:学习不够扎实,编程语言的知识掌握的不好。书到用时方恨少,每次都是遇到不会的东西之后才想起来去看书,主动学习的积极性不够高,也没有很好的做知识储备工作,这在以后进入社会时很不利的。经过这次的课设让我对自己更加的了解了,但是光了解时不够的,需要改正这些缺点,多动手实践,增强自身的知识储备,以备要用时使用。 在今后的学习过程中,我会牢记要理论跟实践想结合,除了要扎实的掌握理论知识意外,也要勤于动手,所谓熟能
12、生巧,用的多自然也就会慢慢地变得顺手和容易了。7. 附录头文件daima.h#include<iostream>#include<iomanip>#include<string>#define neicun 1024using namespace std;struct kongxianunsigned int length;unsigned int addr; int flag; kongxian *next;struct duanbiaoint jincheng;unsigned int duannum;unsigned int addr;unsigned
13、 int length;int flag; /标识所请求的段在内存还是外存中 duanbiao *next;kongxian *khead;/空闲链表头指针kongxian *creatk();/创建初始空闲区duanbiao *dhead;/请求段表头指针duanbiao *dfenpei;/已分配链表头指针duanbiao *qingqiud(duanbiao *head);/输入请求的进程及各段kongxian *zuixian(duanbiao* head);kongxian* sort(kongxian *head);int huishou();int select;char ch;
14、int jinchengming;int jinchenghuishou();int duanhuishou();int display();void space(int n);源程序代码:#include"daima.h"int main()cout<<"t*"<<endl; cout<<"t* 欢迎使用本程序模拟段式存储管理的分配与回收! *"<<endl; cout<<"t*"<<endl;dfenpei=null; /已分配链表头指针k
15、head=null; /空闲链表头指针khead=creatk(); /创建初始空闲区dhead=null; /请求段表头指针docout<<endl<<"请选择您想要进行的操作:"<<endl;space(5);cout<<"1.分配存储空间"<<endl;space(5);cout<<"2.回收存储空间"<<endl;space(5);cout<<"3.显示存储资源状况"<<endl; space(5);
16、cout<<"4.退出"<<endl;cin>>select;switch( select )case 1:dhead=qingqiud(dhead);/创建申请链表khead=zuixian(dhead);/为申请链表分配空间break;case 2:huishou();break;case 3:display();break;case 4:break;default:cout<<"输入错误,请重新选择操作!"<<endl;break;while(select!=4);return 0;kon
17、gxian *creatk()kongxian *p=new kongxian;p->length=neicun;p->addr=0;p->flag=0;p->next=null;return p;duanbiao* qingqiud(duanbiao* head)duanbiao *p1,*p2;p1=p2=new duanbiao;cout<<"请输入请求资源的进程号:"cin>>jinchengming;cout<<"请输入段号及长度n"cout<<"段号"
18、<<setw(6)<<"长度"<<endl;cin>>p1->duannum>>p1->length;p1->next=null;if(head!=null)p2=head;while(p2->next!=null)p2=p2->next;/p2指向已分配表的最后一个结点while(p1->duannum!=-1)p1->jincheng=jinchengming;p1->flag=0;if(head=null)head=p1;else p2->next=p1;
19、p2=p1;p1=new duanbiao;p1->next=null; cin>>p1->duannum>>p1->length;delete p1;return head;kongxian *zuixian(duanbiao* head)kongxian *pk;/空闲链表头指针duanbiao *p1,*p2; /已分配链表结点duanbiao *pd=head;/请求段表头指针duanbiao *pf=dfenpei;p1=p2=new duanbiao;p1->next=null;if(dfenpei!=null)p2=dfenpei;
20、while(p2->next!=null)p2=p2->next;/p2指向已分配表的最后一个结点for(pd;pd!=null;pd=pd->next) pk=khead;for(pk;pk!=null;pk=pk->next)/从空闲区表顺序查找if(pk->length>=pd->length)p1->flag=1;/表示在内存中p1->jincheng=pd->jincheng;p1->duannum=pd->duannum;p1->addr=pk->addr;p1->length=pd->
21、length;if(dfenpei=null)dfenpei=p1;else p2->next=p1;p2=p1;p1=new duanbiao;p1->next=null;if(pk->length=pd->length)pk=pk->next;break;elsepk->addr=(p2->addr)+(p2->length);pk->length=pk->length-pd->length;break;continue;dhead=null;delete p1;return khead;int huishou()ch=
22、39; 'lable2:space(5);cout<<"1.回收整个进程n"space(5);cout<<"2.回收一个段n"cin>>ch; if(ch='1')jinchenghuishou();else if(ch='2')duanhuishou();else cout<<"输入错误,请重新输入!n"goto lable2;return 0;int jinchenghuishou()kongxian *p;/存放回收的结点 kongxian
23、*pk;duanbiao *pf=dfenpei; p=new kongxian; p->next=null;cout<<"输入要回收的进程号:" cin>>jinchengming;cout<<endl; for(pf;pf!=null;pf=pf->next)if(jinchengming=dfenpei->jincheng)/第一个结点是要回收的p->length=dfenpei->length;p->addr=dfenpei->addr;dfenpei=dfenpei->next;p
24、f=dfenpei;if(p->addr<khead->addr)/插入头结点要修改头指针p->next=khead;khead=p;p=new kongxian;continue;pk=khead;for(pk;pk!=null;pk=pk->next)if(p->addr<pk->addr)p->next=pk;pk=p;pf=pf->next;p=new kongxian;continue;else continue;if(pk=null)/插入到尾结点之后pk=p;p=new kongxian;continue;continu
25、e;if(jinchengming=pf->jincheng)p->length=pf->length;p->addr=pf->addr;if(p->addr<khead->addr)p->next=khead;khead=p;p=new kongxian;continue;pk=khead;for(pk;pk!=null;pk=pk->next)if(p->addr<pk->addr)p->next=pk;pk=p;pf=pf->next;pf=dfenpei;p=new kongxian;contin
26、ue;else continue;if(pk=null)pk=p;p=new kongxian;continue;khead=sort(khead);return 0;int duanhuishou()int num=0;kongxian *p;/存放回收的结点 kongxian *pk;duanbiao *pf=dfenpei; p=new kongxian;p->length=0; p->next=null;if(dfenpei=null)cout<<"还没有已分配的段存在!n"cout<<"输入要回收的进程号:"
27、 cin>>jinchengming;cout<<"输入要回收的段号:"cin>>num;if(jinchengming=dfenpei->jincheng&&num=dfenpei->duannum)p->length=dfenpei->length;p->addr=dfenpei->addr;dfenpei=dfenpei->next;goto lable5; for(pf;pf!=null;pf=pf->next)if(jinchengming=pf->jinch
28、eng&&num=pf->duannum)p->length=pf->length;p->addr=pf->addr;pf=pf->next;break;else continue;if(p->length=0)cout<<"你所要回收的段还未进入内存空间,无需回收!n"return 0;lable5:if(p->addr<khead->addr) p->next=khead;khead=p;khead=sort(khead); return 0;pk=khead;for(pk;p
29、k!=null;pk=pk->next)if(p->addr<pk->addr)p->next=pk;pk=p;pf=pf->next;break;else continue;if(pk=null)pk=p;khead=sort(khead);return 0;int display()kongxian *pk=khead;duanbiao *pd=dfenpei;cout<<"已分配内存:n"if(pd=null)space(5);cout<<"还没有已分配内存!n"goto lable3;s
30、pace(5);cout<<setw(10)<<"进程号"<<setw(10)<<"段号"<<setw(10)<<"始址"<<setw(10)<<"长度"<<endl;for(pd;pd!=null;pd=pd->next)space(5);cout<<setw(10)<<pd->jincheng<<setw(10)<<pd->duannum&
31、lt;<setw(10)<<pd->addr<<setw(10)<<pd->length<<endl;lable3:if(pk=null)/已无空闲空间space(5);cout<<"内存已全部分配出去!n"goto lable4;cout<<"未分配内存:n"space(5);cout<<setw(10)<<"始址"<<setw(10)<<"长度"<<endl;fo
32、r(pk;pk!=null;pk=pk->next)space(5);cout<<setw(10)<<pk->addr<<setw(10)<<pk->length<<endl;lable4:return 0;void space(int n)char spacechar=' 'for(int i=0;i!=n;i+)cout<<spacechar;kongxian* sort(kongxian *head)kongxian *pk=head;for(pk;pk!=null&&pk->next!=null;pk=pk->next)if(pk->addr+pk->length)=(pk->next->addr)/两地址连续的空闲区合并pk->length=(pk->length)+(pk->next->length);pk->next=pk->next->next;pk=khead;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 挡墙涵洞劳务分包合同
- 会议室出租协议书
- 整栋房屋买卖合同
- 给排水外网施工方案
- 汕尾露台花园施工方案
- TCSHB 0018-2024 全钒液流电池碳塑复合双极板技术规范
- 硬化衬砌固定边坡施工方案
- 隧道一级边坡平台施工方案
- 鸡西市屋面钢结构施工方案
- 高品质住宅建设标准报批稿
- 《文化的基本内涵》课件
- 探索人工智能世界
- 食材配送服务方案投标文件(技术方案)
- 精通版四年级下册小学英语全册单元测试卷(含听力音频文件)
- 中国慢性阻塞性肺疾病基层诊疗指南(2024年)解读
- 八年级地理下册 8.3 新疆维吾尔自治区的地理概况与区域开发说课稿 (新版)湘教版
- 2023年高考真题-化学(福建卷) 含解析
- 2023-2024 中国滑雪产业白皮书
- 化妆品监督管理条例培训2024
- 生产车间质量培训
- 2024年江苏省南通市国家保安员资格考试题库国编版
评论
0/150
提交评论