用先来先服务算法和短进程优先算法实现进程调度Word格式.docx

上传人:b****1 文档编号:6027234 上传时间:2023-05-05 格式:DOCX 页数:14 大小:145.21KB
下载 相关 举报
用先来先服务算法和短进程优先算法实现进程调度Word格式.docx_第1页
第1页 / 共14页
用先来先服务算法和短进程优先算法实现进程调度Word格式.docx_第2页
第2页 / 共14页
用先来先服务算法和短进程优先算法实现进程调度Word格式.docx_第3页
第3页 / 共14页
用先来先服务算法和短进程优先算法实现进程调度Word格式.docx_第4页
第4页 / 共14页
用先来先服务算法和短进程优先算法实现进程调度Word格式.docx_第5页
第5页 / 共14页
用先来先服务算法和短进程优先算法实现进程调度Word格式.docx_第6页
第6页 / 共14页
用先来先服务算法和短进程优先算法实现进程调度Word格式.docx_第7页
第7页 / 共14页
用先来先服务算法和短进程优先算法实现进程调度Word格式.docx_第8页
第8页 / 共14页
用先来先服务算法和短进程优先算法实现进程调度Word格式.docx_第9页
第9页 / 共14页
用先来先服务算法和短进程优先算法实现进程调度Word格式.docx_第10页
第10页 / 共14页
用先来先服务算法和短进程优先算法实现进程调度Word格式.docx_第11页
第11页 / 共14页
用先来先服务算法和短进程优先算法实现进程调度Word格式.docx_第12页
第12页 / 共14页
用先来先服务算法和短进程优先算法实现进程调度Word格式.docx_第13页
第13页 / 共14页
用先来先服务算法和短进程优先算法实现进程调度Word格式.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

用先来先服务算法和短进程优先算法实现进程调度Word格式.docx

《用先来先服务算法和短进程优先算法实现进程调度Word格式.docx》由会员分享,可在线阅读,更多相关《用先来先服务算法和短进程优先算法实现进程调度Word格式.docx(14页珍藏版)》请在冰点文库上搜索。

用先来先服务算法和短进程优先算法实现进程调度Word格式.docx

算法流程图:

1.FCFS先来先服务算法流程图:

2.SJF短作业优先算法流程图:

4、测试数据与实验结果(可以抓图粘贴)

测试数据:

用“text.txt文件在同一目录输入相关数据,并选择相应算法输出。

测试格式:

5

01234

23452

输入结果:

FCFS:

SJF:

五、结果分析与实验体会

1、遇到的问题:

一开始没有设置判断进程是否到达,导致短进程优先运行错误,后来加上判断语句后就解决了该问题。

2、算法性能分析及改进:

应该让进程没有到达先后顺序也依然能算出结果,即加入循环,判断各个进程的先后,组成有序数列。

3、实验体会:

通过本次实验,我加深了对先来先服务算法和短作业优先算法的理解,培养了自己的编程能力,通过实践加深了记忆。

附源代码:

#include<

iostream>

iomanip>

sstream>

fstream>

usingnamespacestd;

constintMaxNum=100;

intArrivalTime[MaxNum];

//到达时间

intServiceTime[MaxNum];

//服务时间

intFinishTime[MaxNum];

//完成时间

intWholeTime[MaxNum];

//周转时间

doubleWeightWholeTime[MaxNum];

//带权周转时间

doubleAverageWT_FCFS,AverageWT_SJF;

//平均周转时间

doubleAverageWWT_FCFS,AverageWWT_SJF;

//平均带权周转时间

voidFCFS(intn);

//先来先服务

voidSJF(intn);

//短作业优先

voidprint(intn,intarray[]);

voidprint(intn,doublearray[]);

voidprintproceed(intn);

//输出FCFS进程运行状态

voidmain()

{

intn,i,j;

//n:

进程数;

i、j:

循环计数变量

ifstreamin("

text.txt"

);

//读文件

strings;

for(i=0;

i<

3,getline(in,s);

i++)

{//当i=0读入进程数n;

i=1读入各进程到达时间;

i=2读入各进程服务时间

istringstreamsin(s);

switch(i)

{

case0:

sin>

>

n;

break;

case1:

for(j=0;

j<

j++)

ArrivalTime[j];

case2:

ServiceTime[j];

}

//显示各进程数据

cout<

<

setfill('

'

)<

setw(7)<

"

进程名"

setw

(1)<

;

charch='

A'

setw(3)<

char(ch+i);

endl<

到达时间"

ArrivalTime[i];

服务时间"

ServiceTime[i];

endl;

//选择算法:

先来先服务FCFS-->

1短作业优先SJF-->

2关闭-->

请选择算法:

FCFS-->

1SJF-->

2退出-->

0"

选择:

intchoice;

cin>

choice;

while(choice!

=0)//直到输入值为0跳出循环,结束程序

=1&

&

choice!

=2&

choice!

=0)

Pleaseenter0,1or2!

if(choice==0)

return;

if(choice==1)

FCFS(n);

//进行先来先服务FCFS算法

else

SJF(n);

//进行短作业优先服务SJF算法

请选择:

}

//------------------先来先服务----------------------------------------

voidFCFS(intn)

//第一个进程先服务

FinishTime[0]=ArrivalTime[0]+ServiceTime[0];

WholeTime[0]=FinishTime[0]-ArrivalTime[0];

WeightWholeTime[0]=double(WholeTime[0])/double(ServiceTime[0]);

for(inti=1;

if(FinishTime[i-1]>

ArrivalTime[i])//如果上一个进程的完成时间大于下一个进程的到达时间

FinishTime[i]=FinishTime[i-1]+ServiceTime[i];

//那么下一个进程的开始时间从上一个进程的完成时间开始

FinishTime[i]=ArrivalTime[i]+ServiceTime[i];

//否则,下一个进程的开始时间从它本身的到达时间开始

WholeTime[i]=FinishTime[i]-ArrivalTime[i];

WeightWholeTime[i]=double(WholeTime[i])/double(ServiceTime[i]);

doubletotalWT=0,totalWWT=0;

for(intj=0;

{//循环累加,求总的周转时间,总的带权周转时间

totalWT+=WholeTime[j];

totalWWT+=WeightWholeTime[j];

AverageWT_FCFS=totalWT/double(n);

AverageWWT_FCFS=totalWWT/double(n);

//输出各结果

---------先来先服务FCFS--------------"

完成时间分别为:

print(n,FinishTime);

周转时间分别为:

print(n,WholeTime);

带权周转时间分别为:

print(n,WeightWholeTime);

平均周转时间:

AverageWT_FCFS<

平均带权周转时间:

AverageWWT_FCFS<

printproceed(n);

}

//------------------短作业优先--------------------------------

voidSJF(intn)

intShort;

//存放当前最短作业的序号

intFinish=0;

//存放当前完成时间

for(inta=0;

a<

a++)//初始化完成时间为0

FinishTime[a]=0;

inti;

//循环计数累加变量

inttag=0;

//用于标记当前完成时间,是否找到短作业

intMax=10000;

{

if(FinishTime[j]==0&

ArrivalTime[j]<

=Finish&

ServiceTime[j]<

=Max)

{

Max=ServiceTime[j];

Short=j;

tag=1;

}

}

if(tag==1)

{//找到短作业

FinishTime[Short]=Finish+ServiceTime[Short];

if(tag==0)

{//未找到

for(intk=0;

k<

n,FinishTime[k]==0;

k++)

{//直接进入下一未完成进程

Short=k;

FinishTime[Short]=ArrivalTime[Short]+ServiceTime[Short];

Finish=FinishTime[Short];

{//计算周转时间、带权周转时间

{//计算总的周转时间、总的带权周转时间

//输出各值

---------短作业优先SJF--------------"

完成时间:

周转时间:

带权周转时间:

voidprint(intn,intarray[])

{//打印int型数组

for(inti=0;

array[i]<

"

voidprint(intn,doublearray[])

{//打印double型数组

voidprintproceed(intn)

{//打印各时刻各进程的运行情况

intStartTime=FinishTime[i]-ServiceTime[i];

时刻"

StartTime<

:

进程"

char(ch+i)<

开始运行"

FinishTime[i]<

停止运行"

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2