word完整版时间片轮转最高响应比优先调度算法剖析.docx

上传人:b****5 文档编号:3655860 上传时间:2022-11-24 格式:DOCX 页数:15 大小:94.88KB
下载 相关 举报
word完整版时间片轮转最高响应比优先调度算法剖析.docx_第1页
第1页 / 共15页
word完整版时间片轮转最高响应比优先调度算法剖析.docx_第2页
第2页 / 共15页
word完整版时间片轮转最高响应比优先调度算法剖析.docx_第3页
第3页 / 共15页
word完整版时间片轮转最高响应比优先调度算法剖析.docx_第4页
第4页 / 共15页
word完整版时间片轮转最高响应比优先调度算法剖析.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

word完整版时间片轮转最高响应比优先调度算法剖析.docx

《word完整版时间片轮转最高响应比优先调度算法剖析.docx》由会员分享,可在线阅读,更多相关《word完整版时间片轮转最高响应比优先调度算法剖析.docx(15页珍藏版)》请在冰豆网上搜索。

word完整版时间片轮转最高响应比优先调度算法剖析.docx

word完整版时间片轮转最高响应比优先调度算法剖析

学号:

课程设计

 

题目

时间片轮转、最高响应比优先调度算法

学院

计算机科学与技术

专业

班级

姓名

指导教师

吴利军

 

2013

1

14

 

课程设计任务书

学生姓名:

指导教师:

吴利军工作单位:

计算机科学与技术学院

题目:

进程调度模拟设计——时间片轮转、最高响应比优先调度算法

初始条件:

1.预备内容:

阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有深入的理解。

2.实践准备:

掌握一种计算机高级语言的使用。

要求完成的主要任务:

(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

1.模拟进程调度,能够处理以下的情形:

⑴能够选择不同的调度算法(要求中给出的调度算法);

⑵能够输入进程的基本信息,如进程名、到达时间和运行时间等;

⑶根据选择的调度算法显示进程调度队列;

⑷根据选择的调度算法计算平均周转时间和平均带权周转时间。

2.设计报告内容应说明:

⑴需求分析;

⑵功能设计(数据结构及模块说明);

⑶开发平台及源程序的主要部分;

⑷测试用例,运行结果与运行情况分析;

⑸我评价自与总结:

)你认为你完成的设计哪些地方做得比较好或比较出色;

)什么地方做得不太好,以后如何改正;

)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);

)完成本题是否有其他方法(如果有,简要说明该方法);

)对实验题的评价和改进意见,请你推荐设计题目。

时间安排:

设计安排一周:

周1、周2:

完成程序分析及设计。

周2、周3:

完成程序调试及测试。

周4、周5:

验收、撰写课程设计报告。

(注意事项:

严禁抄袭,一旦发现,一律按0分记)

指导教师签名:

年月日

系主任(或责任教师)签名:

年月日

1.需求分析

1.1.模拟进程调度,能够处理以下的情形:

⑴能够选择不同的调度算法(要求中给出的调度算法);

⑵能够输入进程的基本信息,如进程名、到达时间和运行时间等;

⑶根据选择的调度算法显示进程调度队列;

⑷根据选择的调度算法计算平均周转时间和平均带权周转时间。

1.2这个实验主要是进程调度模拟设计,进程调度有很多方法,这个课程设计要求我要使用时间片轮转和最高响应比两中算法,来实现对进程的模拟。

首先他要求能够用两种方法实现进程调度,我们需要首先输出一个选择程序,来选择一个调度算法,入数据来进行运算,这是我们首先要解决的问题。

其次,我们要接近输入数据的存放问题,毕竟我还需要数据来进行操作和调度。

我们要用结构体来存放一个进程的相关信息,例如:

进程名字,进程到达时间,进程的运行时间。

但是我们在出来进程的时候,还必须要按照一定的顺序来处理,所以我们必须要对结构体里存放的进程相关信息来进行排序。

只有经过处理过后,才能更容易的实现进程的调度,同时当不只一个进程的时候,我们还必须设置用多个地址单元来实验对输入的数据进行存储,多个输入就相当于的链表的插入处理,因此我们又必须要对链表之间的指针进行处理,这涉及到指针的跳转,我们必须要运用我们所学的知识进行。

我们还必须要对程序的输出进行处理,因为按照实验要求,我们必须显示进程调度队列;根据选择的调度算法计算平均周转时间和平均带权周转时间。

这要求我们要设计算法,将进程的调度顺序给输出,从输出就可以检查自己的设计是否是正确的,而响应比其实进程的等待时间加上执行时间,在除以执行时间,得到的结果就是响应比。

而最高响应比就是没当一个进程执行完成后,在这个时间比较各个时间各个进程的响应比,响应比最大的就会执行,而其他的进程则继续等待,一直循环做这个操作,这就是所谓的是最高响应比调度算法。

时间片轮转法就是将CPU的执行时间分成一个个大小相等的时间片,将这些时间片分别执行就绪队列中的进程,时间片用完的进程就会回答就绪队列的队尾,等待CPU的再次执行。

而周转时间则是完成时间减去提交时间,平均周转时间就是几个进程的周转时间的平均值。

而带权周转时间就是周转时间除以执行时间。

2.功能设计

2.1最高响应比的功能设计

2.1.1最高响应比的结构体

structzgxyb{

charname[10];

floatarrivetime;

floatservicetime;

floatstarttime;

floatfinishtime;

floatzztime;

floatdqzztime;

};

2.2.1时间片的结构体

typedefstructnode

{

datatypeNum,runtime;

charName[10];//定义成字符串

structnode*next;

}linknode;

3.开发平台及源程序的主要部分

3.1实验的开发平台

VisualC++6.0

3.2实验的主要代码

voidinput(zgxyb*p,intN)

{inti;

printf("intputtheprocess'sname&arrivetime&servicetime:

\nforexmple:

a0100\n");

for(i=0;i<=N-1;i++)

{

printf("inputthe%dthprocess'sinformation:

\n",i+1);

scanf("%s%f%f",&p[i].name,&p[i].arrivetime,&p[i].servicetime);

}

}

voidPrint(zgxyb*p,floatarrivetime,floatservicetime,floatstarttime,floatfinishtime,floatzztime,floatdqzztime,intN)

{intk;

printf("runorder:

");

printf("%s",p[0].name);

for(k=1;k

{printf("-->%s",p[k].name);

}

printf("\ntheprocess'sinformation:

\n");

printf("\nname\tarrive\tservice\tstart\tfinish\tzz\tdqzz\n");

for(k=0;k<=N-1;k++)

{printf("%s\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t\n",p[k].name,p[k].arrivetime,p[k].servicetime,p[k].starttime,p[k].finishtime,p[k].zztime,p[k].dqzztime);

}

}

//按到达时间排序

voidsort(zgxyb*p,intN)

{

for(inti=0;i<=N-1;i++)

for(intj=0;j<=i;j++)

if(p[i].arrivetime

{

zgxybtemp;

temp=p[i];

p[i]=p[j];

p[j]=temp;

}

}

//yunxingjieduan

voiddeal(zgxyb*p,floatarrivetime,floatservicetime,floatstarttime,floatfinishtime,float&zztime,float&dqzztime,intN)

{intk;

for(k=0;k<=N-1;k++)

{

if(k==0)

{

p[k].starttime=p[k].arrivetime;

p[k].finishtime=p[k].arrivetime+p[k].servicetime;}

else

{

p[k].starttime=p[k-1].finishtime;

p[k].finishtime=p[k-1].finishtime+p[k].servicetime;}

}

for(k=0;k<=N-1;k++)

{

p[k].zztime=p[k].finishtime-p[k].arrivetime;

p[k].dqzztime=p[k].zztime/p[k].servicetime;

}

}

voidZGXYB(zgxyb*p,intN)

{

floatarrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0;

sort(p,N);

for(intm=0;m

{

if(m==0)

p[m].finishtime=p[m].arrivetime+p[m].servicetime;

else

p[m].finishtime=p[m-1].finishtime+p[m].servicetime;

inti=0,n;

for(n=m+1;n<=N-1;n++)

{

if(p[n].arrivetime<=p[m].finishtime)

i++;

}

floatmax=(p[m].finishtime-p[m+1].arrivetime)/p[m+1].servicetime;//第m+1个的响应比

intfollow=m+1;

for(intk=m+1;k

{

if(max<=(p[m].finishtime-p[k+1].arrivetime)/p[k+1].servicetime)

{

max=(p[m].finishtime-p[k+1].arrivetime)/p[k+1].servicetime;

follow=k+1;

}

}

zgxybtemp;

temp=p[m+1];

p[m+1]=p[follow];

p[follow]=temp;

}

deal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);

Print(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);

}

 

linklistcreatlinklist()

{

linklisthead,r,s;

intx,y;

charch[10];//因为要输的是字符串

head=r=(linklist)malloc(sizeof(linknode));

printf("\n请输入一组编号,作业名,运行时间,以结尾\n");

scanf("%d%s%d",&x,&ch,&y);

while(x)

{

inta=10;

s=(linklist)malloc(sizeof(linknode));

s->Num=x;

s->runtime=y;

//strcpy(s->Name,ch);//直接字符串复制

for(inti=0;i

{

s->Name[i]=ch[i];

}

r->next=s;

r=s;

scanf("%d%s%d",&x,&ch,&y);

}

r->next=NULL;

returnhead;

}

/*输出带头结点的单链表*/

voidprint(linklisthead)

{

linklistp;

p=head->next;

printf("Listis:

\n");

printf("NumNameruntime\n");

while(p)

{

printf("%d%5s%6d\n",p->Num,p->Name,p->runtime);

p=p->next;

}

printf("\n");

}

 

voidmain()

{intG;

scanf("%d",&G);

if(G==1){

linklisthead,pre,p,r;

intt,i;

head=creatlinklist();

print(head);

printf("请输入runtime:

");

scanf("%d",&t);

pre=head;

p=head->next;

while(p)

{

if(p->runtime>t)/*如果运行时间大于时间片*/

{

r=p->next;

p->runtime=p->runtime-t;/*将第一个进程的运行时间减去一个时间片的时间*/

while(r->next)/*将r指向链表的最后一个结点以便用尾插法将P结点插入到链表的最后*/

{

r=r->next;

}

pre->next=p->next;

p->next=NULL;

r->next=p;

p=head->next;

i=1;

while(p)/*将进程的序号重新从开始设置一遍*/

{

p->Num=i++;

p=p->next;

}

}

else

{

pre->next=p->next;/*如果进程运行时间小于时间片,就将第一个进程删除*/

free(p);

p=head->next;

i=1;

while(p)/*因为删了一个进程就需要重新从开始设置一遍进程的排列序号*/

{

p->Num=i++;

p=p->next;

}

}

print(head);/*打印进程列表*/

pre=head;

p=head->next;

}

}

else{intN;

printf("------高响应比调度算法------\n");

printf("inputtheprocess'snumber:

\n");

scanf("%d",&N);

input(a,N);

zgxyb*c=a;

ZGXYB(c,N);

}

}

4.运行结果与运行情况分析

程序的第一步选择最高响应比调度算法,输入进程输入3个,

进程名字

提交时间

运行时间

a

2

3

b

3

2

c

3

3

程序的验证:

第一个进程在2点提交,3个小时的执行时间,在2点没有别的进程,所以a先执行,5点执行完后,而在5点执行前,b,c都提交了,所以就要判断响应比,响应比是等待时间加上执行时间,除以执行时间,所以b的响应比是2,c的响应比是5/3,所以b的响应比高,b先执行,最后是c执行,周转时间是完成时间减去提交时间,而带权周转时间是周转时间除以执行时间。

经检验,平均周转时间4.67,平均带权周转时间是1.67.,经检验,结果是正确的。

 

 

如果是时间片轮转则运行结果为:

5.我评价自与总结

5.1程序好的方面

本次实验的输入与输出基本满足实验所要求的,最高响应比的调度算法的输出结果采用表格的形式的输出,比较清晰,容易看懂,通过输出结果能够清晰的看出结果的正确与否。

输入与输出比较明确,不会出现多种意思。

结构比较清晰,不会到处跳转,容易理解。

指令之间的跳转不会让人难以理解。

最高响应比中进程分为两个状态,等待状态和完成状态,当程序完成时候状态变成完成状态,每次执行只会执行等待状态的进程,不会执行完成状态的进程。

结果中还有调度顺序,

5.2从本设计得到的收获

从本次实验中,我学到了较多东西,首先是结构体的定义和调用,这次实验首先遇到的问题结构体的定义和调用,之后还涉及到指针的跳转,链表的插入与删除,因此指针的跳转是必须要飞行清楚明白的,否则就会出现各种错误,最终将需要修改,而且还必须学会子函数的使用,必须实验各种子函数来实现不同的功能,综合起来才能实现实验所要求的功能。

同时函数的头文件也必须要包含多个东西,来适应我们的要求,同时我们还必须根据要求使用多个全局变量,来实现我们的各种要求。

5.4其他方法

对与最高响应比的想法:

前提设定:

参数进程队列按顺序排好。

设置一个系统时间变量,记录当前系统时间

调度算法思路:

1.系统时间取得第一个进程的提交时间,并执行第一个进程;

2.当某进程执行完成时,系统时间加上该完成进程的运行时间

,并删除该节点,若第一个节点的提交时间就比当前系统时间大

或等于,此情况下,需要修改系统时间,且此时第一个进程就是

下一个该调度的进程,否侧,在从头结点开始扫描进程队列,直

到某进程提交时间大于等于当前系统时间,先假设第一个的响应

比最高,标志指针指向第一个节点,扫描过程中,记录当前扫描

到的进程的响应比,若比记录值大,则修改记录值和标志指针。

扫描完成后,执行标志指针指向的进程,反复执行2,直至没有进

程了

对于输入,输出的界面也有必要改进一下,是他跟具有整齐性,不会出现凌乱的情况,在具体细节上要更加注意,要用更少的代码实现更多的功能,占用更少的空间,总之要精益求精。

5.5是题目的评价和建议

这次的实验,让我对调度算法有了更加深刻的了解,对应编程序也有了更加深刻的理解,编程序不是一件容易的事情,需要很多的时间来实现和修改,而且实践对于计算机的学习是很重要的,本次的题目跟我们所学有关联性较大,对我们学习很有用,题目基本上将我们平时所学习的东西都用到了,虽然每个人侧重点不一样,但是都是对能力的考验,是需要很多努力才能实现的,难度都是有的,关键靠个人的努力,努力才是最关键的,我认为本次的实验题目不错,不会出现难度相差较大的情况,主要靠的是努力和认真程度,而不是考的是题目,不会出现遇到题目很简单的,而不会考验到能力问题,这对每个人都是公平的,认真做就会得到较好的成绩。

我认为实验的题目是比较合理的,没必要进行大的改动,可以从细节上进行改进,希望不会出现超出学生能里太多的情况,课程设计主要是要学生动手做,做的好不好是能力问题,主要注重态度问题,认真做了就行了。

 

本科生课程设计成绩评定表

序号

评分项目

满分

实得分

1

学习态度认真、遵守纪律

10

2

设计分析合理性

10

3

设计方案正确性、可行性、创造性

20

4

设计结果正确性

40

5

设计报告的规范性

10

6

设计验收

10

总得分/等级

评语:

注:

最终成绩以五级分制记。

优(90-100分)、良(80-89分)、中(70-79分)、

及格(60-69分)、60分以下为不及格

 

                      指导教师签名:

                  2013年 月 日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小升初

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1