FPF和RR调度算法.docx

上传人:b****9 文档编号:23383626 上传时间:2023-05-16 格式:DOCX 页数:10 大小:212.54KB
下载 相关 举报
FPF和RR调度算法.docx_第1页
第1页 / 共10页
FPF和RR调度算法.docx_第2页
第2页 / 共10页
FPF和RR调度算法.docx_第3页
第3页 / 共10页
FPF和RR调度算法.docx_第4页
第4页 / 共10页
FPF和RR调度算法.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

FPF和RR调度算法.docx

《FPF和RR调度算法.docx》由会员分享,可在线阅读,更多相关《FPF和RR调度算法.docx(10页珍藏版)》请在冰豆网上搜索。

FPF和RR调度算法.docx

FPF和RR调度算法

 

郑州轻工业学院本科

实验报告

 

设计题目:

实现FPF和RR调度算法

*********

系别:

计算机与通信工程学院

专业:

网络运维

班级:

13-03

学号:

************

*******

 

2015年11月18日

 

一、实验目的

编写程序,实现FPF和RR算法,模拟进程调度过程,加深对作业调度的理解。

二、实验内容

实现FPF和RR调度算法。

–数据结构设计(PCB,进程就绪队列)

–算法实现与模拟(排序、调度)

–输出调度结果,展示调度过程并解释

三、实验要求

1.设计进程控制块(PCB)的数据结构

–应包含实验必须的数据项,如进程ID、需要的服务时

间、进入系统时间、完成时间、周转时间、优先权、

进程状态(R-运行,W-等待),以及实验者认为有必

要的其他数据项。

2.实现排序算法(将就绪队列中的进程排序)

–RR:

只需在开始时排序,按FCFS策略将进程依次插

入就绪队列。

开始运行后不再需要排序,按RR策略将

每一个刚刚运行完一个时间片的进程插入到队尾。

–FPF:

每次调度前排序,按计算所得的动态优先权排成

有序队列,最高优先权排进程在队首,优先权相同的

进程按FCFS策略排队。

3.实现RR调度过程模拟

①每个进程用一个PCB表示,按FCFS策略排成就绪队列

,按照固定的周期循环调度。

②选择队首的进程,将其从就绪队列移出,修改其状态

为R。

③经过一个时间片,如果正在执行的进程没有执行完,

修改其状态为W,插入到就绪队列尾部。

如果执行完毕

,计算其周转时间。

④进行下一次调度(去往第②步),直到就绪队列为空。

4.实现FPF调度过程模拟

①每个进程用一个PCB表示。

②计算动态优先权,按优先权高低排入就绪队列,如果

相同,则按FCFS排队。

系统开始时调度,每个进程结

束时进行调度。

③选择队首的作业,将其从后备队列移出

④计算选中作业的周转时间(进程运行过程,在本实验

中,无需实现,可认为就绪队列上的进程一但被调度

程序选出,就顺利运行结束)

⑤进行下一次调度(去往第②步)

5.实现结果输出

–输出进程状态表,展示调度过程

•初始进程状态(未调度时)

•每次调度后的进程状态

6.撰写实验报告

–包含实验要求中1~4项内容,要求有设计图(结构图/流程图)和源代码。

–注明使用的编程语言和环境。

注意事项

•实验中注重实现算法本质(高优先权优先FPF,时间片轮转RR)。

•两个算法可以选做一个,量力而行,鼓励多做。

•FPF算法也适用于作业调度。

关于作业调度和进程调度的区别,只要求概念上理解清楚,不要求实现。

#include

#include

structPCB{

charp_name[20];

intp_priority;

intp_needTime;

intp_runTime;

charp_state;

structPCB*next;

};

voidHighPriority();

voidRoundRobin();

voidInformation();

charChoice();

structPCB*SortList(PCB*HL);

intmain()

{

Information();

charchoice=Choice();

switch(choice)

{

case'1':

system("cls");

HighPriority();

break;

default:

break;

}

system("pause");

return0;

}

voidInformation()

{

printf("按回车键进入演示程序");

getchar();

system("cls");

}

charChoice()

{

printf("\n\n");

printf("1.演示最高优先数优先算法。

");

printf("按1继续:

");

charch=getchar();

returnch;

system("cls");

}

voidHighPriority()

{

structPCB*processes,*pt;

//pt作为临时节点来创建链表,使用for语句,限制进程数为5个

processes=pt=(structPCB*)malloc(sizeof(structPCB));

for(inti=0;i!

=5;++i)

{

structPCB*p=(structPCB*)malloc(sizeof(structPCB));

printf("进程号No.%d:

\n",i);

printf("输入进程名:

");

scanf("%s",p->p_name);

printf("输入进程优先数:

");

scanf("%d",&p->p_priority);

printf("输入进程运行时间:

");

scanf("%d",&p->p_needTime);

p->p_runTime=0;

p->p_state='W';

p->next=NULL;

pt->next=p;

pt=p;

printf("\n\n");

}

getchar();//接受回车

//processes作为头结点来存储链表

processes=processes->next;

intcases=0;

structPCB*psorted=processes;

while

(1)

{

++cases;

pt=processes;

//对链表按照优先数排序

//psorted用来存放排序后的链表

psorted=SortList(psorted);

printf("Theexecutenumber:

%d\n\n",cases);

printf("****当前正在运行的进程是:

%s\n",psorted->p_name);

psorted->p_state='R';

printf("qnamestatesuperndtimeruntime\n");

printf("%s\t%c\t%d\t%d\t%d\t\n\n",psorted->p_name,psorted->p_state,psorted->p_priority,psorted->p_needTime,psorted->p_runTime);

pt->p_state='W';

psorted->p_runTime++;

psorted->p_priority--;

printf("****当前就绪状态的队列为:

\n\n");

//pt指向已经排序的队列

pt=psorted->next;

while(pt!

=NULL)

{

printf("qnamestatesuperndtimeruntime\n");

printf("%s\t%c\t%d\t%d\t%d\t\n\n",pt->p_name,pt->p_state,pt->p_priority,pt->p_needTime,pt->p_runTime);

pt=pt->next;

}

//pt指向已经排序的链表,判断链表是否有已用时间啊等于需要时间的

pt=psorted;

structPCB*ap;

ap=NULL;//ap指向pt的前一个节点

while(pt!

=NULL)

{

if(pt->p_needTime==pt->p_runTime)

{

if(ap==NULL)

{

pt=psorted->next;

psorted=pt;

}

else

ap->next=pt->next;

}

ap=pt;

pt=pt->next;

}

if(psorted->next==NULL)

break;

getchar();

}

}

structPCB*SortList(PCB*HL)

{

structPCB*SL;

SL=(structPCB*)malloc(sizeof(structPCB));

SL=NULL;

structPCB*r=HL;

while(r!

=NULL)

{

structPCB*t=r->next;

structPCB*cp=SL;

structPCB*ap=NULL;

while(cp!

=NULL)

{

if(r->p_priority>cp->p_priority)

break;

else

{

ap=cp;

cp=cp->next;

}

}

if(ap==NULL)

{

r->next=SL;

SL=r;

}

else

{

r->next=cp;

ap->next=r;

}

r=t;

}

returnSL;

}

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

当前位置:首页 > 自然科学 > 数学

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

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