操作系统实验先来先服务FCFS和短作业优先SJF进程调度算法Word格式文档下载.docx
《操作系统实验先来先服务FCFS和短作业优先SJF进程调度算法Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《操作系统实验先来先服务FCFS和短作业优先SJF进程调度算法Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
用C++语言实现提示:
1)程序中进程调度时间变量描述如下:
staticintMaxNum=100;
intArrivalTime[MaxNum];
intServiceTime[MaxNum];
intFinishTime[MaxNum];
intWholeTime[MaxNum];
doubleWeightWholeTime[MaxNum];
doubleAverageWT_FCFS,AverageWT_SJF;
doubleAverageWWT_FCFS,AverageWWT_SJF;
2)进程调度的实现过程如下:
Ø
变量初始化;
接收用户输入n,T1,…,Tn,S1,…,Sn;
算法选择1-FCFS,2-SJF;
按照选择算法进行进程调度,计算进程的完成时间、周转时间和带权周转时间;
计算所有进程的平均周转时间和平均带权周转时间;
按格式输出调度结果。
实验要求:
1)上机前认真复习FCFS和SJF进程调度调度算法,熟悉进程调度的执行过程;
2)上机时独立编程、调试程序;
3)根据具体实验要求,完成好实验报告(包括实验的目的、内容、要求、源程序、实例运行结果截图)。
【源程序】
头文件FCFS.h
#include<
iostream>
#defineMaxNum100
structProcess_struct{
intNumber;
//进程编号
charName[MaxNum];
//进程名称
intArrivalTime;
//到达时间
intServiceTime;
//开始运行时间
intFinishTime;
//运行结束时间
intWholeTime;
//运行时间
intrun_flag;
//调度标志
intorder;
//运行次序
doubleWeightWholeTime;
//周转时间
//平均周转时间
doubleAverageWWT_FCFS,AverageWWT_SJF;
//平均带权周转时间
}Process[MaxNum];
intN;
//实际进程个数
intFCFS();
//先来先服务
intFCFS(){//先来先服务算法
inti;
inttemp_time=0;
//当前时间
temp_time=Process[0].ArrivalTime;
for(i=0;
i<
N;
i++)
{
Process[i].ServiceTime=temp_time;
Process[i].FinishTime=Process[i].ServiceTime+Process[i].WholeTime;
Process[i].run_flag=1;
temp_time=Process[i].FinishTime;
Process[i].order=i+1;
}return0;
}
头文件SJF.h
intSJF();
//短作业优先
intSJF(){//短作业优先算法
//当期那时间
inti=0,j;
intnumber_schedul,temp_counter;
//进程编号,当前已执行进程个数
floatrun_time;
run_time=Process[i].WholeTime;
j=1;
while((j<
N)&
&
(Process[i].ArrivalTime==Process[j].ArrivalTime))//判断是否有两个进程同时到达
if(Process[j].WholeTime<
Process[i].WholeTime)
{
run_time=Process[i].WholeTime;
i=j;
}
j++;
}
//查找下一个被调度的进程
//对找到的下一个被调度的进程求相应的参数
number_schedul=i;
Process[number_schedul].ServiceTime=Process[number_schedul].ArrivalTime;
Process[number_schedul].FinishTime=Process[number_schedul].ServiceTime+Process[number_schedul].WholeTime;
Process[number_schedul].run_flag=1;
temp_time=Process[number_schedul].FinishTime;
Process[number_schedul].order=1;
temp_counter=1;
while(temp_counter<
N)
for(j=0;
j<
j++)
if((Process[j].ArrivalTime<
=temp_time)&
(!
Process[j].run_flag))
{
run_time=Process[j].WholeTime;
number_schedul=j;
break;
}
if(Process[j].WholeTime<
run_time)
{
run_time=Process[j].WholeTime;
number_schedul=j;
}
//查找下一个被调度的进程
Process[number_schedul].ServiceTime=temp_time;
Process[number_schedul].FinishTime=Process[number_schedul].ServiceTime+Process[number_schedul].WholeTime;
Process[number_schedul].run_flag=1;
temp_time=Process[number_schedul].FinishTime;
temp_counter++;
Process[number_schedul].order=temp_counter;
主程序Main.cpp
#include"
FCFS.h"
SJF.h"
usingnamespacestd;
intPinput();
//进程参数输入
intPoutput();
//调度结果输出
voidmain()
{
intoption;
Pinput();
printf("
请选择算法:
\n"
);
1.先来先服务\n"
2.短作业优先\n"
0.退出\n"
scanf("
%d"
&
option);
switch(option)
case0:
printf("
运行结束。
break;
case1:
对进程用先来先服务调度。
\n\n"
FCFS();
Poutput();
case2:
对进程用短作业优先调度。
SJF();
intPinput()//进程参数输入
pleaseinputtheprocessnumber:
N);
i++)
***************************************\n"
pleaseinputtheprocessof%dth:
i+1);
pleaseinputthename:
scanf("
%s"
Process[i].Name);
pleaseinputtheArrvialTime:
Process[i].ArrivalTime);
pleaseinputtheWholeTime:
Process[i].WholeTime);
Process[i].ServiceTime=0;
Process[i].FinishTime=0;
Process[i].WeightWholeTime=0;
Process[i].order=0;
Process[i].run_flag=0;
intPoutput()//调度结果输出
floatturn_round_time=0,f1,w=0;
进程名称到达时间运行时间开始运行时间结束时间执行顺序周转时间带权周转时间\n"
Process[i].WeightWholeTime=Process[i].FinishTime-Process[i].ArrivalTime;
f1=Process[i].WeightWholeTime/Process[i].WholeTime;
turn_round_time+=Process[i].WeightWholeTime;
w+=f1;
时刻%d:
进程%s开始运行。
"
Process[i].ServiceTime,Process[i].Name);
%s,%d,%d,%d,%d,%d,%f,%f\n"
Process[i].Name,Process[i].ArrivalTime,Process[i].WholeTime,Process[i].ServiceTime,Process[i].FinishTime,Process[i].order,Process[i].WeightWholeTime,f1);
average_turn_round_timer=%f\n"
turn_round_time/N);
weight_average_turn_round_timer=%f\n"
w/N);
return0;
【实例运行结果截图】
实例(教材P92-图3-4)
进程名
A
B
C
D
E
平均
到达时间
1
2
3
4
服务时间
5
FCFS
完成时间
7
12
14
18
周转时间
6
10
11
9
带权周转时间
5.5
3.5
2.8
SJF
13
8
16
2.67
3.1
1.5
2.25
2.1
先来先服务算法(FCFS)
短作业优先算法(SJF)