




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课 程 设 计 说 明 书设计题目: 操作系统课程设计 班 级: 信息管理与信息系统2011级 学 号: 姓 名: 山 东 科 技 大 学2013年12 月 25 日课 程 设 计 任 务 书学院 信息科学与工程 专业 信息学管理与信息系统 班级 2011-1 姓名 一、课程设计题目: 操作系统课程设计 二、课程设计主要参考资料(1)Abraham Silberschatz & Peter Baer Galvin & Greg Gagne. Operating System Concepts(第七版 影印版). 高等教育出版社. 2007.3. (2) 计算机操作系统(第三版) 西安电子科技大
2、学出版社 (3) 三、课程设计应解决的主要问题:(1)CPU调度算法的模拟实现 (2)死锁相关算法的实现 (3)磁盘调度算法的实现 四、课程设计相关附件(如:图纸、软件等):(1) 程序源代码 (2) 五、任务发出日期: 2013-10-1 课程设计完成日期: 2014-1-1 指导教师签字: 指导教师对课程设计的评语成绩: 指导教师签字: 年 月 日设计1 CPU调度算法的模拟实现1、 设计目的1、根据系统的资源分配策略所规定的资源分配算法2、利用编程语言,模拟实现先来先服务(FCFS)、最短作业优先(非抢占SJF)、非抢占优先调度算法、时间片轮转调度算法(RR)3、针对模拟进程,利用CPU
3、调度算法进行调度4、进行算法评价,计算平均周转时间和平均等待时间二、设计要求1、调度所需的进程参数由输入产生(手工输入或者随机数产生)2、输出调度结果3、输出算法评价指标三、设计说明1、定义public类:class programpublic:char name;/进程名int atime;/进程到达的时间int stime;/进程服务的时间int btime;/进程开始执行的时间int ftime;/进程完成的时间int rtime;/进程的周转时间float qrtime;/进程的带权周转时间;2、冒泡排序: class program t;for( i=1;im;i+)for(int
4、j=0;jpj+1.atime)t=pj;pj=pj+1;pj+1=t;3、流程图:(1)先来先服务调度流程图:依次输入调度进程,所有进程按到达时间冒泡排序if(pi.atimepi-1.ftime)pi.btime=pi.atime;elsepi.btime=pi-1.ftime;pi.ftime=pi.btime+pi.stime;pi.rtime=pi.ftime-pi.atime;pi.qrtime=(float)pi.rtime/pi.stime;输出各个进程cout开始结束主要程序 p0.btime=p0.atime;p0.ftime=p0.atime+p0.stime;p0.rt
5、ime=p0.ftime-p0.atime;p0.qrtime=(float)p0.rtime/p0.stime;for(i=1;ipi-1.ftime)pi.btime=pi.atime;elsepi.btime=pi-1.ftime;pi.ftime=pi.btime+pi.stime;pi.rtime=pi.ftime-pi.atime;pi.qrtime=(float)pi.rtime/pi.stime;短作业优先进程(非抢占优先权)调度流程图:开始输入需要调度的进程,冒泡排序计算第一个调度进程的各参数还有进程未调度pj.atimepk.ftime将选中进程的开始时间置为上一个被调度进
6、程的完成时间计算其他参数cout结束break()主要代码int k=0,x=0;for(i=k+1;im;i+)for(j=k+1;jm;j+)if(pj.atime1)for(j=k+2;j=x+k;j+)if(pj.stimepmin.stime)min=j;t=pmin;pmin=pk+1;pk+1=t;pk+1.ftime=pk.stime+pk+1.stime;k+;x=0;优先权调度算法(非抢占):int k=0,x=0;for(i=k+1;im;i+)for(j=k+1;jm;j+)if(pj.atime1)for(j=k+2;j=x+k;j+)if(pj.youxianqua
7、npmin.youxianquan)min=j;t=pmin;pmin=pk+1;pk+1=t;pk+1.ftime=pk.stime+pk+1.stime;k+;x=0;时间片轮转调度算法:开始输入需要调度的进程,冒泡排序就绪队列首进程开始运行pi.stime2-=1; time+=1;就绪队列为空pi.atime=timei=-1;pi.stime2=0pi.ftime=time;continecout结束主要算法int time=p0.atime;int Max=p0.stime1;for(i=0; iMax) Max=pi.stime1;for(int j=0; jMax; j+) f
8、or(i=0; im; i+) if(pi.stime2=0) continue; if(pi.atime=time) pi.stime2-=1; time+=1; else i=-1; if(pi.stime2=0) pi.ftime=time; 4、输出p0.btime=p0.atime;p0.ftime=p0.atime+p0.stime;p0.rtime=p0.ftime-p0.atime;p0.qrtime=(double)p0.rtime/p0.stime;for(i=1;ipi-1.ftime)pi.btime=pi.atime;elsepi.btime=pi-1.ftime;p
9、i.ftime=pi.btime+pi.stime;pi.rtime=pi.ftime-pi.atime;pi.qrtime=(float)pi.rtime/pi.stime;cout进程*到达时间*服务时间*开始执行时间*完成时间*周转时间*带权周转时间endl;for(i=0;im;i+)coutsetiosflags(ios:left)setw(10)setw(10)pi.atimesetw(10)pi.stimesetw(13)pi.btimesetw(10)pi.ftimesetw(10)pi.rtimesetw(13)pi.qrtimeNeedijRequestjAv
10、ailablej预分配实际分配输出“y”继续分配;“n”,break;退出系统2、银行家算法步骤:(1)如果Requestij =Needi,j,则转向步骤(2);否则,认为出错,因为它所需要的资源数已超过它所宣布的最大值。(2)如果Requestij AvailablejRequestjNeedij预分配调用safe()函数进行安全性检查调用结束“y”继续分配;“n”,break;安全性算法流程图调用safe()函数Work=Available;finish=flaseNeed=Work&Finish=flaseWork=Work+Allocation,Finish=True所有进程的Fin
11、ish=True实际分配,输出安全序列,兵打印当前资源的分配情况系统不安全调用结束主要代码1、头文件:#include#include#define False 0#define True 1using namespace std;char name50=0;int Max5050=0;int Allocation5050=0;int Need5050=0;int Available50=0;int Request50=0;int Work50=0;int Finish50=0;int temp50=0;int b50=0;int M=50;int N=50;2、显示资源矩阵void disp
12、lay() int i,j,number,m,n;char Name;int a50=0;coutn;N=n;for(i=0;in;i+)cout资源i+1Namenumber;namei=Name;bi=number;coutm;M=m;cout请输入各进程的最大需求Max:endl;for(i=0;im;i+)for(j=0;jMaxij;cout请输入各进程的已分配Allocation:endl;for(i=0;im;i+)for(j=0;jAllocationij;Needij=Maxij-Allocationij;if(Needij0)cout您输入的第i+1个进程所拥有的第j+1个
13、资源数错误,请重新输入:endl;j-;continue;cout目前可用的资源:endl;for(i=0;iN;i+)coutnamei ;coutendl;for (j=0;jN;j+)for(i=0;iM;i+)aj+=Allocationij;Availablej=bj-aj;for(i=0;iN;i+)coutAvailablei ;coutendl;3、矩阵的输出void print()int i,j;cout Max Allocation Needendl;cout进程名 ;for(j=0;j3;j+)for(i=0;iN;i+)coutnamei ;cout ;coutendl
14、;for(i=0;iM;i+)cout i ;for(j=0;jN;j+)coutMaxij ;cout ;for(j=0;jN;j+)coutAllocationij ;cout ;for(j=0;jN;j+)coutNeedij ;coutendl;4、进行资源分配int changdata(int i) int j;for (j=0;jM;j+)Availablej=Availablej-Requestj; Allocationij=Allocationij+Requestj; Needij=Needij-Requestj;return 1;5、安全性算法int safe(int num
15、,int M,int N)int i,j,k=0,m,apply;int flag;int flag1;for(j=0;jN;j+) Workj=Availablej; for(flag=0;flagM;flag+)for(i=0;iM;i+)apply=0;for(j=0;jN;j+)if (Finishi=False&Needij=Workj)apply+;if(apply=N)for(m=0;mN;m+) Workm=Workm+Allocationim;Finishi=True;tempk=i;/放置安全序列k+;for(i=0;iM;i+)if(Finishi=False)cout系
16、统不安全endl;for(i=0;iN;i+)Availablei=Availablei+Requesti;Allocationnumi=Allocationnumi-Requesti; Neednumi=Neednumi+Requesti;return -1; cout系统是安全的!endl; cout分配的序列:;for(i=0;iM;i+)couttempi;if(iM-1)cout;coutendl;for(i=0;iN;i+)if(Maxnumi = Allocationnumi)/某个进程最大需求达到 flag1 = 1; elseflag1 = 0;break;if(flag1=
17、1)/某进程释放资源for(i=0;iN;i+)Availablei = Availablei + Allocationnumi;Allocationnumi = 0;return 0;6、利用银行家算法对申请资源对进行判定void bank(int M,int N) char ch; int i=0,j=0; ch=y;cout请输入要求分配的资源进程号(0-M-1i;cout请输入进程 i 申请的资源:endl; for(j=0;jN;j+) coutnamejRequestj;for (j=0;jNeedij)cout进程 i申请的资源大于它需要的资源;cout 分配不合理,不予分配!A
18、vailablej)cout进程i申请的资源大于系统现在可利用的资源;cout 分配出错,不予分配!endl;ch=n;break; if(ch=y)changdata(i);print();safe(i,M,N);7、主函数void main()int i;cout银行家算法endl; display(); print(); safe(0,M,N);for(i=0;iM;i+) bank(M,N); print();四、运行结果及分析五、总结 由于算法基础不好,所以本程序代码我并未能按要求编写出来,而是在网上找到了一个样例算法,但是,这依然加强了我对银行家算法的理解,通过仔细琢磨这个银行家算
19、法的程序,来加强有关资源的申请、避免死锁的概念,体会和了解死锁和避免思索的具体实施方法。保证系统处于安全状态。设计3 磁盘调度算法的实现一、设计目的 通过设计一个磁盘调度模拟系统,从而使磁盘调度算法更加形象化,容易使人理解,使磁盘调度的特点更简单明了,能使使用者加深对先来先服务算法、最短寻道时间优先算法、扫描算法以及循环扫描算法等磁盘调度算法的理解。二、设计要求1、主要实现先来先服务(FCFS)、最短寻道时间优先(SSTF)、扫描算法(SCAN)、循环扫描算法(CACAN)四种算法。2、输入所需要访问的磁道序列和当前磁道号。3、计算并且输出平均寻道长度。三、设计说明1.先来先服务(FCFS)算
20、法介绍:这是一种最简单的磁盘调度算法,输入磁道号,按先来先服务的策略输出磁盘请求序列,求平均寻道长度,输出移动平均磁道数。此算法的优点是公平、简单。程序流程图开始输入磁道号序列按照输入顺序将磁道输出求出平均磁道长度输出平均磁道长度结束主要代码void FCFS(int cidao,int m) int now; int sum=0; int i,j; float ave; cout磁盘请求序列为:; for(i=0; im; i+) coutcidaoi ; coutendl; coutnow; sum+=fabs(cidao0-now); cout磁盘扫描序列为:; for(i=0; im;
21、 i+) coutcidaoi ; for(i=0,j=1; jm; i+,j+) sum+=fabs(cidaoj-cidaoi); ave=(float)(sum)/(float)(m); coutendl; cout平均寻道长度为:aveendl;2、最短寻道时间优先(SSTF) 算法介绍:该算法选择这样的进程:其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短。磁道号用冒泡法从小到大排序,输入当前磁道号,根据前磁道在已排的序列中的位置,选择扫描的顺序,求出平均寻道长度,输出移动的平均磁道数。 程序流程图开始输入磁盘道序号由小到大排列判断磁头的位置选择距离当前磁道号最近
22、的进行扫描移动到最小(大)号,改变方向,扫描未扫描的磁道求出平均寻道长度输出结束主要代码void SSTF(int cidao,int m) int k=1; int now,l,r; int i,j,sum=0; float ave; maopao(cidao,m); coutnow; if(cidaom-1=now) cout=0; i-) coutcidaoi=now) cout磁盘扫描序列为:; for(i=0; im; i+) coutcidaoicidao0&nowcidaom-1) cout磁盘扫描序列为:; while(cidaok=0)&(rm) if(now-cidaol)
23、=(cidaor-now) coutcidaol ; sum+=now-cidaol; now=cidaol; l=l-1; else coutcidaor ; sum+=cidaor-now; now=cidaor; r=r+1; if(l=-1) for(j=r; jm; j+) coutcidaoj=0; j-) coutcidaoj ; sum+=cidaom-1-cidao0; ave=(float)(sum)/(float)(m); coutendl; cout平均寻道长度:aveendl;3、扫描算法(SCAN) 算法介绍:该算法不仅考虑到欲访问的磁道与当前磁道间的距离,更优先考
24、虑的是磁头当前的移动方向。将磁道号用冒泡法从小到大排序,输入当前磁道号,选择磁臂的移动方向,根据当前磁道在已排的序列中的位置,选择扫描的顺序,求出平均寻道长度,输出移动的平均磁道数。 程序流程图开始输入、排序磁盘序列输入当前磁盘号判断磁头位置选择移动方向开始扫描移动到最小(大)时改变方向继续扫描计算、输出平均寻道长度结束主要代码void SCAN(int cidao,int m) int k=1; int now,l,r,d; int i,j,sum=0; float ave; maopao(cidao,m); coutnow; if(cidaom-1=now) cout=0; i-) cou
25、tcidaoi=now) cout磁盘扫描序列为:; for(i=0; im; i+) coutcidaoicidao0&nowcidaom-1) while(cidaoknow) k+; l=k-1; r=k; coutd; if(d=0) cout=0; j-) coutcidaoj ; for(j=r; jm; j+) coutcidaoj ; sum=now-2*cidao0+cidaom-1; else cout磁盘扫描序列为:; for(j=r; jm; j+) coutcidaoj=0; j-) coutcidaoj ; sum=-now-cidao0+2*cidaom-1; ave=(float)(sum)/(float)(m); coutendl; cout平均寻道长度: aveendl;4、循环扫描算法(CSCAN) 算法介绍 将磁道号用冒泡法从小到大排序,输入当前磁道号,选择磁臂的移动方向,进行单向循环扫描,根据当前磁道在已排的序列中的位置,选择扫描的顺序,求出平均寻道长度,输出移动的平均磁道数。 程序流程图
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年透皮吸收材料项目提案报告模板
- 2025年都市情感项目提案报告
- 2025年楚雄州金江能源集团有限公司招聘考试试题(含答案)
- 2024年云南省云县人民医院公开招聘医务工作人员试题带答案详解
- 2024年云南省沧源佤族自治县人民医院公开招聘医务工作人员试题带答案详解
- 2024年湖北省蕲春县邮政公开招聘工作人员试题带答案详解
- 2024年黑龙江省汤原县邮政公开招聘工作人员试题带答案详解
- 拆除工程安全监管及质量保证承包合同
- 文化活动中心餐饮窗口租赁合同
- 生态公园内特色门面房租赁及经营活动协议
- 《国际贸易理论与实务》考试复习题库(含答案)
- 公路工程标准施工招标文件第八章-工程量清单计量规则(2018年版)
- 看场工作合同协议
- 工艺验证检查指南2025
- 安徽亳州谯城在建风电场项目“9.5”较大高处坠落事故调查报告警示教育专题学习
- 预防给药错误
- 石化公司安全生产管理制度汇编
- 支气管激发试验临床应用中国专家共识(2024版)
- DB4401∕T 11-2018 建筑废弃物运输 车辆标志与监控终端、车厢规格与密闭
- 2025年陕西精益化工有限公司招聘笔试参考题库含答案解析
- 出租屋孩子意外免责协议书
评论
0/150
提交评论