您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 时间片轮转进程调度模拟算法的实现
武汉理工大学华夏学院课程设计报告书课程名称:操作系统原理题目:时间片轮转进程调度模拟算法的实现系名:信息工程系专业班级:计算机1132班姓名:李杰学号:10210413209指导教师:司晓梅2015年6月26日武汉理工大学华夏学院信息工程系课程设计任务书课程名称:操作系统原理课程设计指导教师:司晓梅班级名称:计算机1131-2开课系、教研室:自动化与计算机一、课程设计目的与任务操作系统课程设计是《操作系统原理》课程的后续实践课程,旨在通过一周的实践训练,加深学生对理论课程中操作系统概念,原理和方法的理解,加强学生综合运用操作系统原理、Linux系统、C语言程序设计技术进行实际问题处理的能力,进一步提高学生进行分析问题和解决问题的能力,包含系统分析、系统设计、系统实现和系统测试的能力。学生将在指导老师的指导下,完成从需求分析,系统设计,编码到测试的全过程。二、课程设计的内容与基本要求1、课程设计题目时间片轮转进程调度模拟算法的实现2、课程设计内容用c/c++语言实现时间片轮转的进程调度模拟算法。要求:1.至少要有5个以上进程2.进程被调度占有CPU后,打印出该进程正在运行的相关信息提示:时间片轮转调度算法中,进程调度程序总是选择就绪队列中的第一个进程,也就是说按照先来先服务原则调度,但一旦进程占用处理机则仅使用一个时间片。在使用完一个时间片后,进程还没有完成其运行,它必须释放出处理机给下一个就绪的进程,而被抢占的进程返回到就绪队列的末尾重新排队等待再次运行。1)进程运行时,只打印出相关提示信息,同时将它已经运行的时间片加1就可以了。2)为进程设计出PCB结构。PCB结构所包含的内容,有进程名、进程所需运行时间、已运行时间和进程的状态以及指针的信息等。3、设计报告撰写格式要求:1设计题目与要求2设计思想3系统结构4数据结构的说明和模块的算法流程图5使用说明书(即用户手册):内容包含如何登录、退出、读、写等操作说明6运行结果和结果分析(其中包括实验的检查结果、程序的运行情况)7自我评价与总结8附录:程序清单,注意加注释(包括关键字、方法、变量等),在每个模块前加注释;三、课程设计步骤及时间进度和场地安排本课程设计将安排在第17周,现代教育技术中心。具体安排如下:时间设计内容第一天下发任务书,学生查阅资料第二天系统设计和原型开发第三天-第四天系统功能实现第五天系统调试、测试、打包和验收课程设计集中时间安排:周次星期一星期二星期三星期四星期五第17周第2-3节第2-3节第2-3节第2-3节第3-6节地点现教现教现教现教现教四、课程设计考核及评分标准课程设计考核将综合考虑学生的系统设计方案、运行结果、课程设计报告书的质量、态度、考勤、答辩情况等各因素。具体评分标准如下:(1)设计方案正确,具有可行性、创新性;30分(2)系统开发效果较好;20分(3)设计报告规范、课程设计报告质量高、参考文献充分20分(4)课程设计答辩时,问题回答正确;20分(5)态度认真、刻苦钻研、遵守纪律;10分按上述五项分别记分后求和,总分按五级制记载最后成绩。优秀(100~90分),良好(80~89分),中等(70~79分),及格(60~69分),不及格(0~59分)一、设计题目与要求:进程时间片轮转调度算法。要求:用C++语言编写程序完成单处理机的进程调度,要求采用时间片轮转调度算法。实验具体要求包括:首先确定作业控制块的内容和组成方式;然后完成作业调度;最后编写主函数,并对所做工作进行测试。二、设计思想:在多道程序系统中,一个作业被提交后必须经过处理机调度后,方能获得处理机执行。对调度的处理又都可采用不同的调度方式和调度算法。调度算法是指:根据系统的资源分配策略所规定的资源分配算法。三、系统结构处理机管理模拟系统由创建进程、运行程序和显示结果三部分组成。而它们又分别包括输入进程信息、创建结点和插入结点三个步骤。系统功能说明:创建进程模块在输入进程页面输入要创建的进程数,输入后逐个将进程信息录入插入到就绪队列中,完成进程的创建过程。运行程序模块:此模块实现时间片轮转调度算法,从就绪队列中取出进程结点,并模拟运行该进程,反复循环,直至进程全部运行结束。每次运行进程后,将运行信息存入到文件中,实现信息的持久化。方便信息的记录,系统功能的分析和出错时便于检查错误。现实结果模块:从文件读入进程运行的结果,在图形界面下操作,提供友好的用户操作方式,方便直观了解进程呢过的调度过程,便于数据的分析和研究。算法描述:1、在创建进程界面将进程信息录入,将进程控制块进行包装,插入到循环队列中;2、当运行程序时,每次从就绪队列队首取出一个进程,判断是P进程是否到达。到达则运行该进程;3、若P进程为首次运行,则记录进程开始运行时间;4、运行完P进程后,输入进程运行信息,并将此进程移动至队尾;5、若循环队列长度大于1,则返回执行B,否则结束程序。四、数据结构的说明和模块的算法流程图typedefstructjcb{charname[N];intprio;intround;intcputime;intneedtime;intcount;charstate;structnode*next;}PCB图1流程图五、使用说明(1)建立一个进程控制块PCB来代表。PCB包括:进程名、链接指针、到达时间、估计运行时间、剩余时间和进程状态。进程状态分为就绪(W)、运行(R)和完成(F)。(2)为每个进程任意确定一个要求运行时间和到达时间。(3)按照进程到达的先后顺序排成一个循环队列。再设一个对首指针指向第一个到达进程的首址。(4)执行处理机调度时,开始选择对首的第一个进程运行。另外再设一个当前运行进程的指针,指向当前正运行的进程。(5)执行:a)预计运行时间减1;b)输出当前运行进程的名字。(6)进程执行一次后,若该进程的剩余运行时间为零,则将该进程的状态置为完成态F,并退出循环队列;若不为空,则将其移至队尾。继续在运行队首的进程。(7)若就绪队列不空,则重复上述的(5)和(6)步骤直到所有进程都运行完为止。在所设计的调度程序中,要求包含显示或打印语句。以便显示或打印每次选操作系统课程设计中进程的名称及运行一次后队列的变化情况。六、运行结果1、输入数据图2输入数据2、运行结果示例(1)数据输入完成后的初始状态,进程标识为x1的进程首先得到调度,运行10个时间单位。图3运行结果1(2)进程标识为x2的进程得到调度,从就绪态“W”改为运行态“R”,运行10个时间单位。图4运行结果2(3)进程标识为x3的进程得到调度,从就绪态“W”改为运行态“R”,运行10个时间单位。图5运行结果3(4)进程标识为x4的进程得到调度,从就绪态“W”改为运行态“R”,运行10个时间单位。图6运行结果4(5)进程标识为x5的进程得到调度,从就绪态“W”改为运行态“R”,运行10个时间单位。图7运行结果5(6)进程标识为x1的进程再次得到调度,从就绪态“W”改为运行态“R”,因进程x1只剩下5个单位时间,所以进程x1只运行5个单位时间。图8运行结果6(7)进程标识为x2的进程得到调度,从就绪态“W”改为运行态“R”,运行10个时间单位。进程x1已运行完,从运行态“R”改为运行结束状态“F”。图9运行结果7(8)进程标识为x3的进程得到调度,从就绪态“W”改为运行态“R”,运行10个时间单位。图10运行结果8(9)进程标识为x4的进程得到调度,从就绪态“W”改为运行态“R”,运行10个时间单位。图11运行结果9(10)进程标识为x5的进程得到调度,从就绪态“W”改为运行态“R”,运行10个时间单位。图12运行结果10(11)进程标识为x2的进程得到调度,从就绪态“W”改为运行态“R”,运行5个时间单位。进程x5已运行完,从运行态“R”改为运行结束状态“F”。图13运行结果11(12)进程标识为x3的进程得到调度,从就绪态“W”改为运行态“R”,运行10个时间单位。进程x2已运行完,从运行态“R”改为运行结束状态“F”。图14运行结果12(13)进程标识为x4的进程得到调度,从就绪态“W”改为运行态“R”,运行10个时间单位。图15运行结果13(14)进程标识为x3的进程得到调度,从就绪态“W”改为运行态“R”,运行5个时间单位。进程x4已运行完,从运行态“R”改为运行结束状态“F”。图16运行结果14(15)所有进程都已运行完,状态都为“F”。图17运行结果15七、小结在这次实验中,我能够正确分析实验过程和实验结果,思路清晰,能够比较好的理解进程按时间片轮转算法这一调度过程,加深了我对进程时间片轮转调度过程的理解。但是还有很多不足。我自己的C++基础差,不能够自己编写这一调度算法的程序,只能通过网络和同学、老师的帮忙得到正确的程序编码;另外一开始输入进程运行需要的时间时,由于输入运行时间的数值较大,导致后面进程繁多,但后来及时改正,走了弯路,也增加了理解。因此以后要加强自己在C++方面的学习,能够理解源程序;并且要多上机操作,多调试多尝试,争取能理解好了解透。本次实验题需要详细阅读题目和不断地尝试才能找到简便的过程,能加强学生的上机操作能力。八、参考源程序#includestdio.h#includestdlib.h#includestring.h#includeiostream.htypedefstructnode{charname[10];intprio;intround;intcputime;intneedtime;intcount;charstate;structnode*next;}PCB;PCB*finish,*ready,*tail,*run;//队列指针intN;//进程数voidfirstin(){run=ready;//就绪队列头指针赋值给运行头指针run-state='R';//进程状态变为运行态]ready=ready-next;//就绪队列头指针后移到下一进程}//输出标题函数voidprt1(chara){if(toupper(a)=='P')//优先级法coutendl;cout进程名占用CPU时间到完成还要的时间轮转时间片状态endl;}//进程PCB输出voidprt2(chara,PCB*q){if(toupper(a)=='P')//优先级法的输出coutq-nameq-cputimeq-needtimeq-roundq-stateendl;}//输出函数voidprt(charalgo){PCB*p;prt1(algo);//输出标题if(run!=NULL)//如果运行指针不空prt2(algo,run);//输出当前正在运行的PCBp=ready;//输出就绪队列PCBwhile(p!=NULL){prt2(algo,p);p=p-next;}p=finish;//输出完成队列的PCBwhile(p!=NULL){prt2(algo,p);p=p-next;}getchar();//按住任意键继续}//时间片轮转的插入算法voidinsert(PCB*q){PCB*p1,*s,*r;s=q;//待插入的PCB指针p1=ready;//就绪队列头指针r=p1;//*r做pl的前驱指针while(p1!=NULL)if(p1-round=s-round){r=p1;p1=p1-next;}if(r!=p1){r-next=s;s-next=p1;}else{s-next=p1;//否则插入在就绪队列的头ready=s;}}//优先级创建初voidcreate(charalg){PCB*p;inti,time;charna[10];ready=NULL;finish=NULL;run=NULL;cout输入进程名及其需要运行的时间:endl;for(i=1;i=N;i++){p=newPCB;cinna;cintime;strcpy(p-name,na);
本文标题:时间片轮转进程调度模拟算法的实现
链接地址:https://www.777doc.com/doc-2311060 .html