东莞理工学院城市学院《计算机操作系统》课程设计题目:通用处理机调度演示程序专业:软件工程年级:2012级小组成员:李伟强廖泓燊指导教师:彭义春老师时间:2014.12.10—2012.12.地点:3B312东莞理工学院城市学院计算机与信息科学系制2014年12月此次的课程设计所选的题目为“通用处理机调度演示”,通过此次课设能够更加理解操作系统中处理机的工作方式,同时在设计不同算法的过程中,也可以明确的知道各种调度算法的使用优劣,视不同的环境条件下,调用不同的算法可也达到比较想要的结果。目录1.概述课程设计内容:设计目的:在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个,也就是能运行的进程数大于处理机个数,为了使系统中的进程有条不紊地工作,必须选用某种调度策略,在一定的时机选择一个进程占有处理机。要求我们设计一个模拟处理机调度算法,以巩固和加深处理机调度的概念。2.课程设计任务及要求2.1设计任务通用处理机调度演示系统,需要模拟进程调度的五种算法:先来先服务调度算法,短作业优先调度算法,高响应比优先调度算法,时间片轮转调度算法,静态优先权优先调度算法,时间片轮转算法。每个作业包括多个进程,进程可以并发,每一个进程用一个进程类表示,进程类包含如下信息:PCB名称,进入内存时间,服务时间,状态标志,进程大小,内部PCB标志,进程的优先级。既可以用户自己输入相关进程,又可以读取外部文件,能够比较同一组数据在不同调度算法下的平均周转时间和平均带权周转时间。因为多数信息需要在执行过程中进行数据处理和动态显示,要求直观而规范的呈现演示过程2.2设计要求(1)进程调度算法包括:时间片轮转算法、先来先服务算法、短作业优先算法、静态优先权优先调度算法、高响应比调度算法。(2)每一个进程有一个PCB,其内容可以根据具体情况设定。(3)进程数、进入内存时间、要求服务时间、作业大小、优先级等均可以在界面上设定。(4)可读取样例数据(要求存放在外部文件中)进行进程数、进入内存时间、时间片长度、作业大小、进程优先级的初始化。(5)可以在运行中显示各个进程的状态:就绪、执行(由于不要求设置互斥资源与进程间的同步关系,故只有两种状态)。(6)采用可视化界面,可在进程调度过程中随时暂停调度,查看当前进程的状态以及相应的阻塞队列。(7)有性能比较功能,可比较同一组数据在不同调度算法下的平均周转时间。(8)具有一定的数据容错性。3.算法及数据结构3.1算法的总体思想3.2先来先服务算法模块3.2.1功能系统将按照作业到达的先后次序来进行调度,或者优先考虑在系统中等待时间最长的作业,不管作业所需执行时间的长短,从后备作业队列中选择几个最先进入该队列的作业,将它们调入内存,为它们分配内存和创建进程,然后放入就绪队列。3.2.2数据结构(包括变量的定义,要注释!)voidrun_FCFS(pcb*p1)//运行未完成的进程{time=p1-arriveTimetime?p1-arriveTime:time;p1-startTime=time;printf(\n时刻:%d,当前开始运行作业%s\n\n,time,p1-name);time+=p1-serviceTime;p1-state='T';p1-endTime=time;p1-lastTime=p1-endTime-p1-arriveTime;p1-lsTime=p1-lastTime/p1-serviceTime;x+=p1-lastTime;y+=p1-lsTime;printf(arrivetimeservetimestartimeendtimelastimelstime\n);printf(%6d%10d%10d%8d%10.1f%10.2f\n,p1-arriveTime,p1-startTime,p1-serviceTime,p1-endTime,p1-lastTime,p1-lsTime);voidFCFS()//找到当前未完成的进程调度算法程序设计实验报告{inti;p=head;for(i=0;in;i++){if(p-state=='F'){q=p;//标记当前未完成的进程run_FCFS(q);}p=p-next;}}voidgetInfo()//获得进程信息并创建进程{intnum;printf(\n进程个数:);scanf(%d,&n);for(num=0;numn;num++){p=(pcb*)malloc(sizeof(pcb));printf(依次输入:\n进程名到达时间服务时间\n);scanf(%s\t%d\t%d,&p-name,&p-arriveTime,&p-serviceTime);3.2.3算法(流程图表示,或伪C表示)根据流程判断得到运行队列的方法新进程到达?点击“运行演示”按钮将新进程加入到就绪队列最后一行YN有进程执行中?Y该进程执行完?将就绪进程队列中的第一行记录,提取到执行进程队列。此行记录删除。Y将执行队列的信息写入完成进程队列中N就绪队列有记录?YN点击“显示平均周转时间和带权平均周转时间”按钮,显示该算法的数据结果重新执行算法?Y结束N开始3.3短作业优先算法模块3.3.1功能以作业长短计算优先级,作业越短,优先级越高,将从外存的作业后备队列中选择若干个估计运行事件最短的作业,优先将它们调入内存运行。3.3.2数据结构RunTask(intnextTaskID){taskes[nextTaskID].operation=1;taskes[nextTaskID].startTime=currenttime;taskes[nextTaskID].endTime=currenttime+taskes[nextTaskID].serveTime;taskes[nextTaskID].lastTime=taskes[nextTaskID].endTime-taskes[nextTaskID].arriveTime;taskes[nextTaskID].lsTime=taskes[nextTaskID].lastTime/(taskes[nextTaskID].serveTime*1.0);currenttime+=taskes[nextTaskID].serveTime;}3.3.3算法3.4高响应比优先调度模块3.4.1功能为作业引入一个动态优先级,若作业等待时间相同,则服务事件越短,优先级越高,因而类似于SJF算法,当要求的服务事件相同时,作业的优先权决定其等待事件,因而该算法类似FCFS算法,对于长作业的优先级,可以随等待时间的增加而提高。3.4.2数据结构3.4.3算法新进程到达?点击“运行演示”按钮将新进程加入到就绪队列最后一行YN有进程执行中?Y该进程执行完?遍历就绪进程队列,判断得到服务时间最小的进程,提取到执行进程队列。此行记录删除。Y将执行队列的信息写入完成进程队列中N就绪队列有记录?YN点击“显示平均周转时间和带权平均周转时间”按钮,显示该算法的数据结果重新执行算法?Y结束N开始3.5静态优先权调度模块3.5.1功能3.5.2数据结构priority(charalgo){while(run!=NULL){run-cputime+=1;run-needtime-=1;run-prio-=3;if(run-needtime==0){run-next=finish;finish=run;run-state='F';run=NULL;就绪进程队列显示进程信息根据Timer计时器的设定,计算当前状态下的响应比将执行完的进程信息,写入完成进程队列中就绪队列有记录?将最短的进程调入到执行队列YN开始结束firstin();}else{if((ready!=NULL)&&(run-prioready-prio)){run-state='W';insert1(run);run=NULL;firstin();}}prt(algo);}}3.5.3算法3.3时间片轮转调度算法模块3.6.1功能就绪进程队列显示进程信息根据优先权的大小,将最大优先级别的进程调入到执行队列将执行完的进程信息,写入完成进程队列中就绪队列有记录?NY开始结束3.6.2数据结构voidrcreate_task(charalgo){PCB*p;inti,time;charna[10];ready=NULL;finish=NULL;run=NULL;for(i=0;iN;i++){p=(PCB*)malloc(sizeof(PCB));printf(Enterthenameofprocess:);scanf(%s,na);printf(Enterthetimeofprocess:);scanf(%d,&time);strcpy(p-name,na);p-cputime=0;p-needtime=time;p-count=0;p-state='W';p-round=2;if(ready!=NULL){insert2(p);}else{p-next=ready;ready=p;tail=p;}}printf(Outputthewaitingprocessesinformation:\n);prt(algo);run=ready;ready=ready-next;run-state='R';}3.6.3算法4.程序设计与实现4.1程序流程图就绪进程队列显示进程信息根据时间片大小,判断执行时间将执行队列的进程信息,写入就绪进程队列的最后一行时间片用完前,执行进程所用时间=服务时间?就绪队列有记录?Y将执行队列的进程信息,写入已完成队列中NYN开始结束通用处理机调度演示程序4.2程序代码(要注释)4.3实验结果时间片轮转算法先来先服务先来先服务调度短作业优先调度高响应比优先调度静态优先权调度时间片轮转调度短作业优先调度算法静态优先级调度算法高响应比优先调度算法5.结论6.收获、体会和建议。7.参考文献。(以下是参考文献的格式)[1]赛奎春,张雨.VisualC++工程应用与项目实践[M].北京:海洋出版社,2005[2]任建武,闾国年,王桥.多层体系GIS与模型集成研究[J].测绘学报,2003,2:78-182。[3]ESRI中国(北京)有限公司网站[EB/OL].。说明:以后毕业论文的参考文献格式就是这样,文章或书名后面中括号的内容表示很重要,解释如下:[M]表示来源于书籍,[J]表示来源于期刊杂志,[EB/OL]表示来源于网上的资料