为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

进程调度模拟设计—先来先服务、最高响应比优先调度算法课程设计

2017-10-06 24页 doc 91KB 57阅读

用户头像

is_531654

暂无简介

举报
进程调度模拟设计—先来先服务、最高响应比优先调度算法课程设计进程调度模拟设计—先来先服务、最高响应比优先调度算法课程设计 . 课程设计任务书 学生姓名: 闫敏 专业班级: 计科1103班 指导教师: 蔡菁 工作单位: 计算机科学与技术学院 题 目: 进程调度模拟设计——先来先服务、最高响应比优先调度算法 初始条件: 1(预备内容:阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程 调度算法有深入的理解。 2(实践准备:掌握一种计算机高级语言的使用。 要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) 1(模拟进程调度,能够处理以下...
进程调度模拟设计—先来先服务、最高响应比优先调度算法课程设计
进程调度模拟设计—先来先服务、最高响应比优先调度算法课程设计 . 课程设计任务书 学生姓名: 闫敏 专业班级: 计科1103班 指导教师: 蔡菁 工作单位: 计算机科学与技术学院 目: 进程调度模拟设计——先来先服务、最高响应比优先调度算法 初始条件: 1(预备内容:阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程 调度算法有深入的理解。 2(实践准备:掌握一种计算机高级语言的使用。 要求完成的主要任务: (包括课程设计工作量及其技术要求,以及撰写等具体要求) 1(模拟进程调度,能够处理以下的情形: ? 能够选择不同的调度算法(要求中给出的调度算法); ? 能够输入进程的基本信息,如进程名、到达时间和运行时间等; ? 根据选择的调度算法显示进程调度队列; ? 根据选择的调度算法计算平均周转时间和平均带权周转时间。 2(设计内容应说明: ? 课程设计目的与功能; ? 需求分析,数据结构或模块说明(功能与框图); ? 源程序的主要部分; ? 测试用例,运行结果与运行情况分析; ? 自我评价与总结。 时间安排: 设计安排3周: 查阅、分析资料 1天 系统软件的分析与建模 4天 系统软件的设计 5天 系统软件的实现 3天 撰写文档 1天 课程设计验收答辩 1天 设计验收安排:设计周的第三周的指定时间到实验室进行上机验收。 设计报告书收取时间:课程设计验收答辩完结时。 (注意事项:严禁抄袭,一旦发现,抄与被抄的一律按0分记) 指导教师签名: 2013 年 12 月 10日 系主任(或责任教师)签名: 2013 年 12 月 10日 . . 目录 1.课程设计目的与功能 ........................................................................... 3 2.需求分析与模块说明 ........................................................................... 3 2.1需求分析 ..................................................................................... 3 2.1.1功能需求............................................................................. 3 2.1.2环境需求............................................................................. 4 2.1.3用户界面需求 ..................................................................... 4 2.2模块说明 ..................................................................................... 5 3.源程序的主要部分............................................................................... 5 3.1数据结构 ..................................................................................... 5 3.2主要函数 ..................................................................................... 7 4.测试用例,运行结果与运行情况分析 ............................................. 10 4.1测试用例 ................................................................................... 10 4.2运行结果分析............................................................................ 12 5.自我评价与总结 ................................................................................ 12 6. 附录.....................................................................................................13 . . 1.课程设计目的与功能 模拟进程调度,能够处理以下的情形: ? 能够选择不同的调度算法(要求中给出的调度算法); ? 能够输入进程的基本信息,如进程名、到达时间和运行时间等; ? 根据选择的调度算法显示进程调度队列; ? 根据选择的调度算法计算平均周转时间和平均带权周转时间。 2.需求分析与模块说明 2.1需求分析 2.1.1功能需求 (1)实现先来先服务法: 先来先服务算法基本思想:按照作业提交或进 程变为就绪状态的先后次序,调入系统或分派CPU ,换句话说,调度程序每次选择的作业进程是等待时间最久的,而不管其运行时间的长短。这种调度算法突出的优点是实现简单,效率较低,在一些实 际的系统和一般应用程序中采用这种算法的较多。因此,在设计中,首先对输入的各进程的提交时间进行比较,对先进入等待队列的进程提供服务。 (2)实现最高响应比优先调度算法: 最高响应比优先法(HRN)是对FCFS方式和SJF 方式的一种综合平衡。HRN调度策略同时考虑每个作业的等待时间长短和估计需要. . 的执行时间长短,从中选出响应比最高的作业投入执行。响应比R定义如下: R=(W+T)/T=1+W/T 其中T为该作业估计需要的执行时间,W为作业在后备状态队列中的等待时间。每当要进行作业调度时,系统计算每个作业的响应比,选择其中R最大者投入执行。这样,即使是长作业,随着它等待时间的增加,W/T也就随着增加,也就有机会获得调度执行。这种算法是介于FCFS和SJF 之间的一种折中算法。由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于SJF 法,从而采用HRN 方式时其吞吐量将小于采用SJF 法时的吞吐量。另外,由于每次调度前要计算响应比,系统开销也要相应增加。 2.1.2环境需求 开发环境、运行环境及开发语言: 开发环境:Windows平台,Visual C++ 6.0 运行环境:Windows全系列平台 开发语言:C++ 2.1.3用户界面需求 输入输出均采用命令行界面,格式如下: 首先,输入进程数;其次,输入进程编号、进程名、到达时间、执行时间等相关信息;然后,选择算法,先来先服务算法或最高响应. . 比算法;最后,输出程序运行所得结果。 2.2模块说明 程序流程图如下: 进程1 1:先来 信息 先服务 输入 进程进程2开始 数 2:最高信息 响应比 进程n 信息 3:退出 程序 首先选择调度算法,若选1先来先服务然则调用create()创建进程队列,然后调用fcfsrun()进行先来先服务算法,后Goto到起始点。若选择2最高响应比算法则调用create()创建进程队列,然后调用Hrn()进行最高响应比算法,后Goto到起始点。若选择3则退出,选择其他则报错。 3.源程序的主要部分 3.1数据结构 创建一个进程信息结构: struct PCB . . { string name;//进程名 float ta;//进程到达时间 float ts;//进程估计运行的时间 float tb;//进程开始运行时间 float tm;//进程仍需运行的时间 float to;//进程完成的时间 float rn;//进程运行的次数 float totalTime;//周转时间 double weightTotalTime;//带权周转时间(周转时间/估计运行时间) PCB *next;//定义指向下一个进程的指针 }; 此外,对输入信息进行创建链表队列: PCB *create(PCB *head) { PCB *p1,*p2; p1=p2=new PCB; head=p1; cout<<"请输入进程数:"; cin>>pronum; for(int i=0;inext=NULL; cout<<"请依次输入第"<>p1->name>>p1->ta>>p1->ts; p1->tm=p1->ts; p1->rn=1; p2->next=p1; } return head; } 3.2主要函数 struct PCB,,;//进程结构 #define MAX_NUM 15 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(){}//主函数 其中先来先服务算法和最高响应比算法具体如下: void fcfsrun(PCB *head)//先来先服务算法 { deal(head); PCB *p,*q,*s; p=head->next; cout<<"进程执行顺序为:"; while(p!=NULL) { cout<<"--"<name; p=p->next; } cout<next; while(s!=NULL) { cout<name<ta<tb<t o<totalTime<weightTotalTime<next; } cout<next; p=head; while(head) { q=head; if(time < p->ta) //如果该进程提交时间早于其它进程,则先执行该进程 time=p->ta; flag=head; //用于暂存将要执行的进程 //计算当前链表中进程的响应比 while(q && q->ta <= time) { if((time - q->ta)/(q->ts) > (time - flag->ta)/(flag->ts)) flag=q; q=q->next; } if(time < flag->ta)//如果上一次结束时间比当前选中要执行进程的结束时间小 time=flag->ta; //则当前进程开始时间为提交时间 //输出当前执行进程的信息 cout<name; cout<ta; cout<ts); cout<ta + flag->ts); cout<<" "<ta + flag->ts)/flag->ts)<ta+flag->ts); //当前执行进程的周转时间 runTime +=j; //记录周转时间 time+=flag->ts; drunTime+=j/flag->ts; //带权周转时间 pname[xuhao]=flag->name; xuhao++; //将执行过的进程从链表中删除 if(flag==head) //在链表头 head=head->next; else { //在链表中 . . p1=head; while(p1->next!=flag) p1=p1->next; p1->next=flag->next; delete flag; //删除这个进程所占的节点 } } cout<<"进程执行顺序为:"; for(ss=0;ss "; } cout< #include #include using namespace std; struct PCB { string name;//进程名 float ta;//进程到达时间 float ts;//进程估计运行的时间 float tb;//进程开始运行时间 float tm;//进程仍需运行的时间 float to;//进程完成的时间 float totalTime;//周转时间 float weightTotalTime;//带权周转时间(周转时间/估计运行时间) PCB *next;//定义指向下一个进程的指针 }; #define MAX_NUM 15 int pronum;//定义进程数为pronum float total;//记录所有进程的总时间 float weight;//记录所有进程的带权周转时间 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<<"*进程调度模拟设计--先来先服务、最高响应比优先算法*"<>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请重新输入:"<>pronum; for(int i=0;inext=NULL; cout<<"请依次输入第"<>p1->name>>p1->ta>>p1->ts; p1->tm=p1->ts; 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->ta<=q->ta) { r=s; s=s->next; } r->next=q; q->next=s; } } void deal(PCB *head)//FCFS记录处理 { sort(head); PCB *p,*q; q=head->next; q->tb=q->ta; q->to=q->tb+q->ts; q->totalTime=q->to-q->ta; q->weightTotalTime=q->totalTime/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/p->ts; total+=p->totalTime; weight+=p->weightTotalTime; 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; } cout<next; while(s!=NULL) { cout<name<ta<tb<t o<totalTime<weightTotalTime<next; } cout<next; p=head; while(head) { q=head; if(time < p->ta) //如果该进程提交时间早于其它进程,则先执行该进程 time=p->ta; flag=head; //用于暂存将要执行的进程 //计算当前链表中进程的响应比 while(q && q->ta <= time) { if((time - q->ta)/(q->ts) > (time - flag->ta)/(flag->ts)) flag=q; q=q->next; } if(time < flag->ta)//如果上一次结束时间比当前选中要执行进程的结束时间小 time=flag->ta; //则当前进程开始时间为到达时间 //输出当前执行进程的信息 cout<name; cout<ta; cout<ts); cout<ta + flag->ts); cout<<" "<ta + flag->ts)/flag->ts)<ta+flag->ts); //当前执行进程的周转时间 runTime +=j; //记录周转时间 time+=flag->ts; drunTime+=j/flag->ts; //带权周转时间 pname[xuhao]=flag->name; xuhao++; //将执行过的进程从链表中删除 if(flag==head) //在链表头 head=head->next; else . . { //在链表中 p1=head; while(p1->next!=flag) p1=p1->next; p1->next=flag->next; delete flag; //删除这个进程所占的节点 } } cout<<"进程执行顺序为:"; for(ss=0;ss "; } cout<方案
正确性、可行性、创造性 4 40 设计结果正确性 5 10 设计报告的性 6 10 设计验收 总得分/等级 评语: 注:最终成绩以五级分制记。优(90-100分)、良(80-89分)、中(70-79分)、 及格(60-69分)、60分以下为不及格 指导教师签名: 2014 年 月 日 .
/
本文档为【进程调度模拟设计—先来先服务、最高响应比优先调度算法课程设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索