版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持学 号:课程设计题目操作系统原理课程设计学院计算机科学与技术专业班级指导教师20XX年 0X月 0X 日课程设计任务书学生姓名:指导教师:雅蟆蝶工作单位:计算机科学与技术学院题 目:模拟设计段式存储管理的分配与回收初始条件:1 .预备内容:阅读操作系统的内存管理章节内容,理解有关虚拟存储器、段式存储管理等概 念,并掌握段式管理内存的分配和回收过程。2 .实践准备:掌握一种计算机高级语言的使用。要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1 .采用段式管理方案实施内存分配和回收。能够处理以下的情形 能
2、够输入给定的内存大小,进程的个数,每个进程的段数及段大小;当某进程提出申请空间的大小后,显示能否满足申请,以及为该进程分配资源后有关内存空间使用的情况;显示回收后内存空间的使用情况(注意回收后的合并)。2 .设计报告内容应说明:需求分析; 功能设计(数据结构及模块说明); 开发平台及源程序的主要部分;(4)测试用例,运行结果与运行情况分析;1文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持自我评价与总结:i)你认为你完成的设计哪些地方做得比较好或比较出色;ii)什么地方做得不太好,以后如何改正;iii)从本设计得到的收获
3、(在编写,调试,执行过程中的经验和教训);iv)完成本题是否有其他方法(如果有,简要说明该方法);时间安排:设计安排一周:周1、周2:完成程序分析及设计。周2、周3:完成程序调试及测试。周4、周5:验收、撰写课程设计报告。(注意事项:严禁抄袭,一旦发现,一律按0分记)指导教师签名:年月日系主任(或责任教师)签名:年月日模拟段式存储管理的分配与回收1 .需求分析1.1 课程设计目的课程设计是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不 可少的一个教学环节。通常,设计题中的问题比平时的练习题要复杂,也更接近实际。操 作系统这门课程安排的课程设计的目的是旨在要求我们进一步巩固课堂
4、上所学的理论知 识,深化理解和灵活掌握教学内容,选择合适的数据逻辑结构表示问题,然后编制算法和 程序完成设计要求,从而进一步培养我们独立思考问题、分析问题、解决实际问题的动手 能力。1.2 课程设计功能从理论到实践的过度,将平时学生在课堂上学到的理论知识,通过动手编写程序后, 在熟悉编程的同时,进一步理解、加深和巩固了理论知识。2 .整体功能及设计2.1 整体功能采用段式管理方案实施内存分配和回收,能够处理以下的情形: 随机确定内存大小,进程的个数,每个进程的段数及段大小; 要求当某进程提出申请空间的大小后,显示能否满足申请,以及为该进程分配资 源后有关内存空间使用的数据。2.2设计将程序分为
5、三个打的模块:分配存储空间、回收存储空间和显示存储资源状况首先建立一个进程的请求链表,该进程的段数及段的大小可随机确定,返回请求链表 的头指针,然后根据请求链表的请求为每个段分配相应的内存空间,分配内存后修改有关 的链表。2.2.2 回收存储空间回收存储空间分为两种方式:回收整个进程分配的内存和回收一个段。当回收整个进 程时,将分配给该进程的所有段均回收,回收后修改有关的链表;当回收一个段时,只回 收指定进程的指定的段,其他该进程的段仍然占有内存,同样,回收后要对相应的有关链 表进行修改。2.2.3 显示存储资源状况该模块主要用于直观的看到内存分配的情况。当进入该模块后,程序将显示已分配部分和
6、未分配部分的内存资源情况。已经分配 部分显示占用该空闲区的进程号、段号、该空闲区的起始地址以及长度。未分配部分则显 示空闲区的起始地址和长度。3.编程实现在程序中定义了两个结构体,一个用于空闲链表的建立,一个则用于请求链表 (即段 表)、已分配链表的建立。分别定义如下:struct kongxianunsigned int length;unsigned int addr;int flag ;kongxian *next ;struct Duanbiaoint jincheng ;unsigned int duannunn;unsigned int addr;unsigned int leng
7、th;int flag ;Duanbiao *next;程序采用变输入边建立的链表的方式。当进行内存分配请求时,一边从键盘输入进程 号、段号及段长,一边建立请求表,待一个进程的请求表建立完成后,程序根据输入的请 求链表,马上为该进程分配相应的内存空间,并在分配的过程中建立已分配链表和修改空 闲链表。当进行内存回收时,找到需要回收的进程号和段号,将相应的进程和段号从已分 配链表上摘除,并将回收的内存添加到空闲区链表中,并进行空闲区的合并和重新调整。 4.使用说明程序有良好的界面,可根据提示进行相应的操作。在刚进入程序时,显示的程序的主界面,即可用该程序进行的所有操作:分配内存空 间、回收内存空间
8、和查看内存分配情况。根据提示输入相应的数字,即可选择将要进行的 操作,进入相应的模块。当选择进行内存分配时,输入进程名,段名以及各段的长度,然 后根据请求链表进行内存的分配和修改已分配链表和空闲链表;当选择回收存储空间时, 根据提示输入回收进程还是回收段,回收完成后查看内存分配情况可得到相应操作的结果 显示。5 .运行结果与运行情况分析程序开始界面:执行内存分配后的界面:执行回收4号进程的34号段后的的结果:6 .附录#include<iostream>#include<iomanip>#include<string>#define neicun 1024u
9、sing namespace std;struct kongxianunsigned int length;unsigned int addr;int flag;kongxian *next;;struct Duanbiaoint jincheng ;unsigned int duannum;unsigned int addr;unsigned int length;int flag ; /标识所请求的段在内存还是外存中Duanbiao *next;kongxian *Khead; /空闲链表头指针kongxian *creatK() ; /创建初始空闲区Duanbiao *Dhead; /请
10、求段表头指针Duanbiao *Dfenpei; /已分配链表头指针Duanbiao *qingqiuD(Duanbiao *head); 输入请求的进程及各段kongxian *zuixian(Duanbiao* head);kongxian* sort(kongxian *head);int huishou();int select;char ch;int jinchengming ;int jinchenghuishou();int duanhuishou();int Display。;void space(int n);#include"daima.h"int ma
11、in()20文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.cout<<"t*”<<endl;cout<<"t*模拟段式存储管理的分配与回收! *"<<endl;cout<<"t*”<<endl;Dfenpei=NULL; /已分配链表头指针Khead=NULL;/空闲链表头指针Khead=creatK(); /创建初始空闲区Dhead=NULL; /请求段表头指针do cout<<endl<<"请选择您想要进行的操作:"&l
12、t;<endl;space(5);cout<<"1.分配存储空间"<<endl;space(5);cout<<"2.回收存储空间"<<endl;space(5);cout<<"3.显示存储资源状况"<<endl;space(5);cout<<"4.退出"<<endl;space(5);cout<<"0.返回 ”<<endl;cin>>select;switch( sel
13、ect )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;kongxian *creatK()kongxian *p=new kongxian;p->length=neicun;p->addr
14、=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<<"段号"<<setw(6)<<"长度"<<endl;cin>>p1->duannum>>p
15、1->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;p2=p1;p1=new Duanbiao;p1->next=NULL;cin>>p1->duannum>>p1->lengt
16、h;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;while(p2->next!=NULL)p2=p2->next;p2 指向已分配表的最后一个结点for(pD;pD!=NULL;pD=pD->next)
17、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->length;if(Dfenpei=NULL)Dfenpei=p1;else p2->next=p1;p2=p1;p1=new Duanbiao;p1->next
18、=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=' 'lable2:space(5);cout<<"1.回收整个进程n"space(5);cout<<"2
19、.回收一个段 n"cin>>ch;if(ch='1')jinchenghuishou();else if(ch='2')duanhuishou(); elsecout<<"输入错误,t#重新输入!n";goto lable2;return 0;int jinchenghuishou()kongxian *p;/存放回收的结点kongxian *pK;Duanbiao *pf=Dfenpei;p=new kongxian;p->next=NULL;cout<<"输入要回收的进程号:”
20、; 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;pf=Dfenpei;if(p->addr<Khead->addr)/插入头结点要修改头指针 p->next=Khead;Khead=p;p=new kongxia
21、n;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;continue;if(jinchengming=pf->jincheng)p->length=pf->length;p->addr=pf->addr;if(p->
22、;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;continue;else continue;if(pK=NULL)pK=p;p=new kongxian;continue;Khead=sort(Khead);return 0;int duan
23、huishou()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<<"输入要回收的进程号:”;cin>>jinchengming;cout<<"输入要回收的段号:”;cin>>num;if(jinchengming=Dfenpei->jin
24、cheng&&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->jincheng&&num=pf->duannum)p->length=pf->length;p->addr=pf->addr;pf=pf->next;break;el
25、se 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;pK!=NULL;pK=pK->next)if(p->addr<pK->addr)p->next=pK;pK=p;pf=pf->next;break;else continue;if(pK
26、=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;space(5);长度cout<<setw(10)<<"进程号"<<setw(10)<<"段号"<<setw(10)<&
27、lt;"始址"<<setw(10)<< "<<endl;for(pD;pD!=NULL;pD=pD->next)space(5);cout«setw(10)«pD->jincheng«setw(10)«pD->duannum«setw(10)«pD->addr«set w(10)«pD->length«endl;)Iable3:if(pK=NULL) space(5);coutvv”内存已全部分配出去!n”;g
28、oto Iable4;)coutvv”未分酉己内存:n"space(5);coutvvsetw(10)vv“始址"vvsetw(10)vv''长度"«endl;for(pK;pK!=NULL;pK=pK->next)(space(5);cout«setw(10)«pK->addr«setw(10)«pK->length«endl;)Iable4: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!=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 拓展课程设计大纲模板
- 舞蹈俱乐部样板房施工合同
- 图安课课程设计前言
- 建筑环保工程合同
- 2024年度我国电子商务数据共享与交换合同规范与安全要求3篇
- 机器学习课程设计题目
- 大型医院污水处理系统维护合同
- 2024年度国际音乐节演出资源委托合同3篇
- 2024版二手房交易贷款合同咨询费支付范本3篇
- 推箱子游戏java课课程设计
- 老年人睡眠障碍的护理(PPT课件)
- 会阴阻滞麻醉完整版PPT课件
- 《家庭礼仪》PPT课件
- 应聘人员面试登记表(应聘者填写)
- T∕CAAA 005-2018 青贮饲料 全株玉米
- s铁路预应力混凝土连续梁(钢构)悬臂浇筑施工技术指南
- 拨叉831006设计说明书
- 程序语言课程设计任意两个高次多项式的加法和乘法运算
- 石油钻井八大系统ppt课件
- 北师大版二年级数学上册期末考试复习计划
- 人教PEP版六年级英语上册《Unit4_B_Let’s_learn教学设计》
评论
0/150
提交评论