进程调度模拟设计——先来先服务、最高响应比优先调度算法(共20页).doc

上传人:飞****2 文档编号:14518729 上传时间:2022-05-05 格式:DOC 页数:20 大小:176.50KB
返回 下载 相关 举报
进程调度模拟设计——先来先服务、最高响应比优先调度算法(共20页).doc_第1页
第1页 / 共20页
进程调度模拟设计——先来先服务、最高响应比优先调度算法(共20页).doc_第2页
第2页 / 共20页
点击查看更多>>
资源描述

《进程调度模拟设计——先来先服务、最高响应比优先调度算法(共20页).doc》由会员分享,可在线阅读,更多相关《进程调度模拟设计——先来先服务、最高响应比优先调度算法(共20页).doc(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上学 号: 1课 程 设 计题 目进程调度模拟设计先来先服务、最高响应比优先调度算法学 院计算机科学与技术专 业计算机科学与技术班 级计算机009班姓 名 旭指导教师汪 祥 莉2012年1月9日课程设计任务书学生姓名: 旭 专业班级: 计算机009 指导教师: 汪祥莉 工作单位: 计算机科学与技术学院 题 目: 进程调度模拟设计先来先服务、最高响应比优先调度算法 初始条件:1预备内容:阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有深入的理解。2实践准备:掌握一种计算机高级语言的使用。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书

2、撰写等具体要求)1模拟进程调度,能够处理以下的情形: 能够选择不同的调度算法(要求中给出的调度算法); 能够输入进程的基本信息,如进程名、到达时间和运行时间等; 根据选择的调度算法显示进程调度队列; 根据选择的调度算法计算平均周转时间和平均带权周转时间。2设计报告内容应说明: 课程设计目的与功能; 需求分析,数据结构或模块说明(功能与框图); 源程序的主要部分; 测试用例,运行结果与运行情况分析; 自我评价与总结:i)你认为你完成的设计哪些地方做得比较好或比较出色;ii)什么地方做得不太好,以后如何改正;iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);iv)完成本题是否有其

3、他方法(如果有,简要说明该方法);v)对实验题的评价和改进意见,请你推荐设计题目。时间安排:设计安排一周:周1、周2:完成程序分析及设计。周2、周3:完成程序调试及测试。周4、周5:验收、撰写课程设计报告。(注意事项:严禁抄袭,一旦发现,抄与被抄的一律按0分记)指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日目录1 设计题目 . 12 需求分析 . 12.1 功能需求 . 12.1.1进程调度模拟设计先来先服务法. 12.1.2进程调度模拟设计最高响应比优先调度算法. 22.2 环境需求 . 32.3 用户界面需求 . 33 功能设计 . 31233.1数据结构 . 33.2模

4、块说明 . 44 开发平台及源程序的主要部分 .54.1 开发平台 . 54.2 源程序主要部分 .55 测试用例,运行结果与运行情况分析 .65.1 测试用例 . 65.2 运行结果 .66 自我评价与总结 .77 附加代码.812345专心-专注-专业1. 设计题目1. 先来先服务、最高响应比优先调度算法2. 需求分析 模拟进程调度,能够处理以下的情形: 能够选择不同的调度算法(要求中给出的调度算法); 能够输入进程的基本信息,如进程名、到达时间和运行时间等; 根据选择的调度算法显示进程调度队列; 根据选择的调度算法计算平均周转时间和平均带权周转时间。2.1 功能需求2.1.1 实现先来先

5、服务法:先来先服务算法基本思想:按照作业提交或进 程变为就绪状态的先后次序,调入系统或分派CPU ,换句话说,调度程序每次选择的作业/进程是等待时间最久的,而不管其运行时间的长短。这种调度算法突出的优点是实现简单,效率较低,在一些实 际的系统和一般应用程序中采用这种算法的较多。因此,在设计中,首先对输入的各进程的提交时间进行比较,对先进入等待队列的进程提供服务。 2.1.2 实现最高响应比优先调度算法:最高响应比优先法(HRN)是对FCFS方式和SJF 方式的一种综合平衡。HRN调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行。 响应比R定义如下

6、: R=(W+T)/T=1+W/T 其中T为该作业估计需要的执行时间,W为作业在后备状态队列中的等待时间。 每当要进行作业调度时,系统计算每个作业的响应比,选择其中R最大者投入执行。这样,即使是长作业,随着它等待时间的增加,W/T也就随着增加,也就有机会获得调度执行。这种算法是介于FCFS和SJF 之间的一种折中算法。由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于SJF 法,从而采用HRN 方式时其吞吐量将小于采用SJF 法时的吞吐量。另外,由于每次调度前要计算响应比,系统开销也要相应增加。2.2 环境需求开发环境、运行环境及开发语言:开发环境:Windows平台Visual

7、C+ 6.0运行环境:Windows全系列平台开发语言:C+2.3 用户界面需求输入输出均采用命令行界面。格式如下:首先 输入进程数。其次 输入进程编号,姓名,到达时间,执行时间等 相关信息。然后 选择算法,优先法或者是最高响应比算法。最后,输出程序运行所得结果。3 功能设计:3.1 数据结构:创建一个进程信息结构:struct PCBstring name;/进程名float ta;/进程到达时间float ts;/进程估计运行的时间float tb;/进程开始运行时间float tm;/进程仍需运行的时间float to;/进程完成的时间float rn;/进程运行的次数float tot

8、alTime;/周转时间double weightTotalTime;/带权周转时间(周转时间/估计运行时间)PCB *next;/定义指向下一个进程的指针;此外,对输入信息进行创建链表队列:PCB *create(PCB *head)PCB *p1,*p2;p1=p2=new PCB;head=p1;coutpronum;for(int i=0;inext=NULL;cout请依次输入第i+1p1-namep1-tap1-ts;p1-tm=p1-ts;p1-rn=1; p2-next=p1;return head;3.2 模块说明 首先选择调度算法,若选1先来先服务然则调用create()创

9、建进程队列,然后调用fcfsrun()进行先来先服务算法,后Goto到起始点。若选择2最高响应比算法则调用create()创建进程队列,然后调用Hrn()进行最高响应比算法,后Goto到起始点。若选择3则退出,选择其他则报错。4 开发平台及源程序的主要部分:4.1 开发平台:开发环境、运行环境及开发语言: 开发环境:Windows平台Visual C+ 6.04.2 源程序主要部分: struct PCB;/进程结构 #define MAX_NUM 15 int pronum;/定义进程数为pronum float total;/记录所有进程的总时间 double weight;/记录所有进程

10、的带权周转时间 PCB *create(PCB *head);/创建进程队列 void deal(PCB *head);/FCFS记录处理 void sort(PCB *head);/将进程按到达的先后顺序排列 void fcfsrun(PCB *head);/先来先服务算法 void Hrn(PCB *head,int n);/最高响应比算法 void main()/主函数流程图如下:进程1信息1:先来 先服务输入进程数进程2信息开始2:最高响应比进程n信息3:退出 程序5 测试用例,运行结果与运行情况分析:5.1 测试用例:正确的测试用例:先来先服务算法结果:最高响应比结果:其他:六 自我

11、评价与总结:这次课程设计是让我们用已经学过的操作系统知识对先来先服务算法和最高响应比算法进行设计,使我在对进程调度的先来先服务和最高响应比优先算法充分理解的同时,也使我的实践编程能力和运用理论知识的能力得到进一步提高。在此次实验中,我认为我比较出色的是自己一开始就有了一个整体的思路,不像以前的课程设计一样,对全局的规划不是很清楚,以至于在后来模块的衔接做得不到位,但是此次的设计由于初始就对各个功能块的相互调用也比较了解,所以对该课设的设计整体上比较轻松,也使程序的编写比较清晰。不过,在此次课设中我也出现了不少问题,尤其是在对先来先服务和最高响应比优先功能块的设计时,对其中每个进程之间的时间比较

12、和响应比比较的具体代码还比较模糊,因此使得设计一度陷入了修改和编写中;此外,刚开始对程序的容错能力并未加入考虑的范围,所以使得程序的完整性和健壮性比较欠缺。所以,从中看出自己在具体细致的地方还约显不足,还有待提高。通过此次课程设计,也使我见到对同一实验目的可以使用多种方法,C+的编程比较符合我们现在的编程设计能力,但是使用JAVA也可以完成相同功能,而且会使得某些步骤还比较简易。此外,使程序具有较强的容错能力也对程序设计的优劣性起到较为重要的因素。相信通过这次的设计,对我以后的学习和编程能力有一定的帮助。七、 附加代码 #include#include#includeusing namespa

13、ce std;struct PCBstring name;/进程名float ta;/进程到达时间float ts;/进程估计运行的时间float tb;/进程开始运行时间float tm;/进程仍需运行的时间float to;/进程完成的时间float rn;/进程运行的次数float totalTime;/周转时间double weightTotalTime;/带权周转时间(周转时间/估计运行时间)PCB *next;/定义指向下一个进程的指针;#define MAX_NUM 15int pronum;/定义进程数为pronumfloat total;/记录所有进程的总时间double w

14、eight;/记录所有进程的带权周转时间PCB *create(PCB *head);/创建进程队列void deal(PCB *head);/FCFS记录处理void sort(PCB *head);/将进程按到达的先后顺序排列void fcfsrun(PCB *head);/先来先服务算法void Hrn(PCB *head,int n);void main()int choice;cout*进程调度模拟设计先来先服务、最高响应比优先算法*endl;cout*1.先来先服务算法*endl;cout*2.最高响应比优先算法*endl;cout*3 退出*endl;l1:cout请输入您的选择

15、:choice;PCB *head=NULL;switch(choice)case 1:head=create(head);fcfsrun(head);goto l1;case 2:head=create(head);Hrn(head,pronum);goto l1;case 3:break;default:cout输入错误!n请重新输入:endl;goto l2;PCB *create(PCB *head)PCB *p1,*p2;p1=p2=new PCB;head=p1;coutpronum;for(int i=0;inext=NULL;cout请依次输入第i+1p1-namep1-tap

16、1-ts;p1-tm=p1-ts;p1-rn=1; p2-next=p1;return head;void sort(PCB *head)/将进程按到达的先后顺序排列PCB *p,*q,*r,*s;if(head-next!=NULL)p=head-next-next;head-next-next=NULL;while(p)q=p;p=p-next;r=head;s=head-next;while(s&s-tata)r=s;s=s-next;r-next=q;q-next=s;void deal(PCB *head)/FCFS记录处理sort(head);PCB *p,*q;q=head-ne

17、xt;q-tb=q-ta;q-to=q-tb+q-ts;q-totalTime=q-to-q-ta; q-weightTotalTime=q-totalTime/(double)q-ts;total+=q-totalTime; weight+=q-weightTotalTime;p=q-next; while(p!=NULL)p-tb=q-to;p-to=p-tb+p-ts;p-totalTime=p-to-p-ta; p-weightTotalTime=p-totalTime/(double)p-ts;total+=p-totalTime; weight+=p-weightTotalTime

18、;q=p;p=p-next;void fcfsrun(PCB *head)/先来先服务算法deal(head);PCB *p,*q,*s;p=head-next;cout进程执行顺序为:;while(p!=NULL)cout-name;p=p-next;coutendl;coutnext;while(s!=NULL)coutsetw(4)namesetw(7)tasetw(10)tbsetw(11)tosetw(10)totalTimesetw(10)weightTotalTimenext;coutendl; cout 平均周转时间:total/(double)pronumendl;cout平

19、均带权周转时间:weight/(double)pronumendl;cout*endl;total=0;weight=0;/最高响应比算法函数void Hrn(PCB *head,int n)PCB *p,*p1;PCB *flag=NULL;PCB *q=NULL; double time=0,j=0,runTime=0, drunTime=0;int xuhao=0;string pnameMAX_NUM;for(int ss=0;ssMAX_NUM;ss+)pnamess=;sort(head);coutendl;coutnext;p=head;while(head)q=head;if(

20、time ta) /如果该进程提交时间早于其它进程,则先执行该进程time=p-ta;flag=head; /用于暂存将要执行的进程/计算当前链表中进程的响应比while(q & q-ta ta)/(q-ts) (time - flag-ta)/(flag-ts)flag=q;q=q-next;if(time ta)/如果上一次结束时间比当前选中要执行进程的结束时间小time=flag-ta; /则当前进程开始时间为提交时间/输出当前执行进程的信息 coutsetw(4)xuhao+1;coutsetw(8)name;coutsetw(8)ts;coutsetw(8)time;coutsetw

21、(10)ts);coutsetw(10)ta + flag-ts);cout setw(11)ta + flag-ts)/flag-ts)ta+flag-ts); /当前执行进程的周转时间runTime +=j; /记录周转时间time+=flag-ts;drunTime+=j/flag-ts; /带权周转时间pnamexuhao=flag-name;xuhao+;/将执行过的进程从链表中删除if(flag=head) /在链表头head=head-next; else /在链表中p1=head;while(p1-next!=flag)p1=p1-next;p1-next=flag-next;

22、delete flag; /删除这个进程所占的节点cout进程执行顺序为:;for(ss=0;ssn;ss+)coutpnamess;if(pnamess+1 !=)cout ;coutendl;cout 平均周转时间为:runTime/nendl; cout平均带权周转时间为:drunTime/nendl;cout*endl;本科生课程设计成绩评定表班级:计算机009 姓名: 旭学号:1序号评分项目满分实得分1学习态度认真、遵守纪律102设计分析合理性103设计方案正确性、可行性、创造性204设计结果正确性405设计报告的规范性106设计验收10总得分/等级评语:注:最终成绩以五级分制记。优(90-100分)、良(80-89分)、中(70-79分)、及格(60-69分)、60分以下为不及格指导教师签名:201 年月日

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁