您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 操作系统实验报告3篇
课程设计说明书设计题目:操作系统课程设计班级:信息管理与信息系统2011级学号:姓名:山东科技大学2013年12月25日课程设计任务书学院信息科学与工程专业信息学管理与信息系统班级2011-1姓名一、课程设计题目:操作系统课程设计二、课程设计主要参考资料(1)AbrahamSilberschatz&PeterBaerGalvin&GregGagne.OperatingSystemConcepts(第七版影印版).高等教育出版社.2007.3.(2)计算机操作系统(第三版)西安电子科技大学出版社(3)三、课程设计应解决的主要问题:(1)CPU调度算法的模拟实现(2)死锁相关算法的实现(3)磁盘调度算法的实现四、课程设计相关附件(如:图纸、软件等):(1)程序源代码(2)五、任务发出日期:2013-10-1课程设计完成日期:2014-1-1指导教师签字:指导教师对课程设计的评语成绩:指导教师签字:年月日设计1CPU调度算法的模拟实现一、设计目的1、根据系统的资源分配策略所规定的资源分配算法2、利用编程语言,模拟实现先来先服务(FCFS)、最短作业优先(非抢占SJF)、非抢占优先调度算法、时间片轮转调度算法(RR)3、针对模拟进程,利用CPU调度算法进行调度4、进行算法评价,计算平均周转时间和平均等待时间二、设计要求1、调度所需的进程参数由输入产生(手工输入或者随机数产生)2、输出调度结果3、输出算法评价指标三、设计说明1、定义public类:classprogram{public:charname;//进程名intatime;//进程到达的时间intstime;//进程服务的时间intbtime;//进程开始执行的时间intftime;//进程完成的时间intrtime;//进程的周转时间floatqrtime;//进程的带权周转时间};2、冒泡排序:classprogramt;for(i=1;im;i++)for(intj=0;jm-i;j++)if(p[j].atimep[j+1].atime){t=p[j];p[j]=p[j+1];p[j+1]=t;}3、流程图:(1)①先来先服务调度流程图:②主要程序p[0].btime=p[0].atime;p[0].ftime=p[0].atime+p[0].stime;p[0].rtime=p[0].ftime-p[0].atime;p[0].qrtime=(float)p[0].rtime/p[0].stime;for(i=1;im;i++){if(p[i].atimep[i-1].ftime){p[i].btime=p[i].atime;}else{p[i].btime=p[i-1].ftime;}p[i].ftime=p[i].btime+p[i].stime;p[i].rtime=p[i].ftime-p[i].atime;p[i].qrtime=(float)p[i].rtime/p[i].stime;依次输入调度进程,所有进程按到达时间冒泡排序if(p[i].atimep[i-1].ftime){p[i].btime=p[i].atime;}else{p[i].btime=p[i-1].ftime;}p[i].ftime=p[i].btime+p[i].stime;p[i].rtime=p[i].ftime-p[i].atime;p[i].qrtime=(float)p[i].rtime/p[i].stime;输出各个进程cout开始结束}①短作业优先进程(非抢占优先权)调度流程图:②(SJF)主要代码intk=0,x=0;for(i=k+1;im;i++){for(j=k+1;jm;j++){if(p[j].atimep[k].ftime){x++;}elsebreak;开始输入需要调度的进程,冒泡排序计算第一个调度进程的各参数还有进程未调度p[j].atimep[k].ftime将选中进程的开始时间置为上一个被调度进程的完成时间计算其他参数cout结束break}intmin=k+1;if(x1){for(j=k+2;j=x+k;j++){if(p[j].stimep[min].stime){min=j;}}t=p[min];p[min]=p[k+1];p[k+1]=t;p[k+1].ftime=p[k].stime+p[k+1].stime;}k++;x=0;}③优先权调度算法(非抢占):intk=0,x=0;for(i=k+1;im;i++){for(j=k+1;jm;j++){if(p[j].atimep[k].ftime){x++;}elsebreak;}intmin=k+1;if(x1){for(j=k+2;j=x+k;j++){if(p[j].youxianquanp[min].youxianquan){min=j;}}t=p[min];p[min]=p[k+1];p[k+1]=t;p[k+1].ftime=p[k].stime+p[k+1].stime;}k++;x=0;}①时间片轮转调度算法:②主要算法inttime=p[0].atime;intMax=p[0].stime1;for(i=0;im;i++){p[i].stime2=p[i].stime1;if(p[i].stime1Max)Max=p[i].stime1;}开始输入需要调度的进程,冒泡排序就绪队列首进程开始运行p[i].stime2-=1;time+=1;就绪队列为空p[i].atime=timei=-1;p[i].stime2==0p[i].ftime=time;continecout结束for(intj=0;jMax;j++){for(i=0;im;i++){if(p[i].stime2==0)continue;if(p[i].atime=time){p[i].stime2-=1;time+=1;}elsei=-1;if(p[i].stime2==0)p[i].ftime=time;}}4、输出p[0].btime=p[0].atime;p[0].ftime=p[0].atime+p[0].stime;p[0].rtime=p[0].ftime-p[0].atime;p[0].qrtime=(double)p[0].rtime/p[0].stime;for(i=1;im;i++){if(p[i].atimep[i-1].ftime){p[i].btime=p[i].atime;}else{p[i].btime=p[i-1].ftime;}p[i].ftime=p[i].btime+p[i].stime;p[i].rtime=p[i].ftime-p[i].atime;p[i].qrtime=(float)p[i].rtime/p[i].stime;}cout进程******到达时间**服务时间**开始执行时间*完成时间**周转时间**带权周转时间endl;for(i=0;im;i++){coutsetiosflags(ios::left)setw(10)p[i].namesetw(10)p[i].atimesetw(10)p[i].stimesetw(13)p[i].btimesetw(10)p[i].ftimesetw(10)p[i].rtimesetw(13)p[i].qrtimeendl;}}四、运行结果及分析1、先来先服务(FCFS)测试数据2、短作业优先(SJF)测试数据3、优先权(非抢占)测试数据4、时间片轮转(RR)测试数据五、总结通过这次试验,我进一步的理解了冒泡排序的算法,而且,对进程作业先来先服务、短进程优先、非抢占优先、按时间片轮转调度算法以及进程调度的概念和算法,有了更深入的认识!初步理解了操作系统对于作业处理的基本思想!了解到算法很重要,又更加明白算法本身可以节约时间。在动手操作过程中,体会到了成功的喜悦;遇到问题自己解决的能力,对于我来说是一次提高,让自己多多的在实践中可以加深对理论的理解,也让我明白了以后应该如何更好,更高效的学习。设计2死锁相关算法的实现一、设计目的银行家算法是避免死锁的一种重要方法,通过编写一个简单的银行家算法程序,加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。二、设计要求1、编写算法,实现银行家算法、安全性算法、死锁检测算法2、判断系统安全状态、判断进程的资源请求是否可以被满足、判定系统是否为死锁状态三、设计说明1、数据结构:(1)可利用资源向量Available。这是个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目。如果Available[j]=K,则表示系统中现有Rj类资源K个。(2)最大需求矩阵Max。这是一个n×m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max[i,j]=K,则表示进程i需要Rj类资源的最大数目为K。(3)分配矩阵Allocation。这也是一个n×m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i,j]=K,则表示进程i当前已分得Rj类资源的数目为K。(4)需求矩阵Need。这也是一个n×m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need[i,j]=K,则表示进程i还需要Rj类资源K个,方能完成其任务。Need[i,j]=Max[i,j]-Allocation[i,j]系统流程图进入系统进行初始化输出资源分配情况提出申请资源请求Request[j]Need[i][j]Request[j]Available[j]预分配实际分配输出“y”继续分配;“n”,break;退出系统系统是否安全2、银行家算法步骤:(1)如果Requesti[j]=Need[i,j],则转向步骤(2);否则,认为出错,因为它所需要的资源数已超过它所宣布的最大值。(2)如果Requesti[j]=Available[j],则转向步骤(3);否则,表示系统中尚无足够的资源,进程必须等待。(3)系统试探把要求的资源分配给进程Pi,并修改下面数据结构中的数值:Available[j]:=Available[j]-Requesti[j];Allocation[I,j]=Allocation[i,j]+Requesti[j];Need[i,j]=Need[I,j]-Requesti[j];(4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。3、安全性算法:(1)设置两个向量①工作向量Work。它表示系统可提供进程继续运行所需要的各类资源数目,执行安全算法开始时,Work:=Available;②布尔向量Finish。它表示系统是否有足够的资源分配给进程,使之运行完成,开始时先做Finish[i]=false,当有足够资源分配给进程时,令Finish[i]:=true。(2)从进程集合中找到一个能满足下述条件的进程:①Finish[i]=false;②Need=Work;如找到,执行步骤(3);否则,执行步骤(4)。(3)当进程P获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:Work=Work+Allocation;Finish[i]=true;转向步骤(2)。(4)如果所有进程的Finish[i]=true,则表示系统处于安全状态;否则,系统处于不安全状态。银行家算法流程图调用bank()函数输入预分配资源的进程号输入是否合法输入进程申请源量Request[]Request[j]Available[j]Request[j]Need[i][j]预分配调用safe()函数进行安全性检查调用结束“y”继续分配;“n”,break;安全性算法流程图调用safe()函数Work[]=Available[];finish[]=flaseNe
本文标题:操作系统实验报告3篇
链接地址:https://www.777doc.com/doc-3352933 .html