时间片轮转进程调度模拟算法的实现及时间煮雨-钢琴谱 C大调_第1页
时间片轮转进程调度模拟算法的实现及时间煮雨-钢琴谱 C大调_第2页
时间片轮转进程调度模拟算法的实现及时间煮雨-钢琴谱 C大调_第3页
时间片轮转进程调度模拟算法的实现及时间煮雨-钢琴谱 C大调_第4页
时间片轮转进程调度模拟算法的实现及时间煮雨-钢琴谱 C大调_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE武汉理工大学华夏学院课程设计报告书课程名称:操作系统原理题目:时间片轮转进程调度模拟算法的实现系名:信息工程系专业班级:计算机班姓名:学号:指导教师:20年6月26日

武汉理工大学华夏学院信息工程系课程设计任务书课程名称:操作系统原理课程设计指导教师:班级名称:计算机开课系、教研室:自动化与计算机一、课程设计目的与任务操作系统课程设计是《操作系统原理》课程的后续实践课程,旨在通过一周的实践训练,加深学生对理论课程中操作系统概念,原理和方法的理解,加强学生综合运用操作系统原理、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流程图五、使用说明建立一个进程控制块PCB来代表。PCB包括:进程名、链接指针、到达时间、估计运行时间、剩余时间和进程状态。进程状态分为就绪(W)、运行(R)和完成(F)。为每个进程任意确定一个要求运行时间和到达时间。按照进程到达的先后顺序排成一个循环队列。再设一个对首指针指向第一个到达进程的首址。执行处理机调度时,开始选择对首的第一个进程运行。另外再设一个当前运行进程的指针,指向当前正运行的进程。执行:a)预计运行时间减1;b)输出当前运行进程的名字。进程执行一次后,若该进程的剩余运行时间为零,则将该进程的状态置为完成态F,并退出循环队列;若不为空,则将其移至队尾。继续在运行队首的进程。若就绪队列不空,则重复上述的(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++方面的学习,能够理解源程序;并且要多上机操作,多调试多尝试,争取能理解好了解透。本次实验题需要详细阅读题目和不断地尝试才能找到简便的过程,能加强学生的上机操作能力。八、参考源程序#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream.h>typedefstructnode{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')//优先级法cout<<""<<endl;cout<<"进程名占用CPU时间到完成还要的时间轮转时间片状态"<<endl;}//进程PCB输出voidprt2(chara,PCB*q){if(toupper(a)=='P')//优先级法的输出cout<<q->name<<""<<q->cputime<<""<<q->needtime<<""<<q->round<<""<<q->state<<endl;}//输出函数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;cin>>na;cin>>time;strcpy(p->name,na);p->cputime=0;p->needtime=time;p->state='W';p->round=0;if(ready!=NULL)insert(p);else{p->next=ready;ready=p;}cout<<"输入进程名及

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论