- 9
- 0
- 约4.7千字
- 约 7页
- 2019-05-08 发布于江西
- 举报
实验一 先来先服务FCFS和短作业优先SJF进程调度算法
一 需求分析
【实验目的】
通过这次实验,加深对进程概念的理解,进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。
【实验内容】
问题描述:
设计程序模拟进程的先来先服务FCFS和短作业优先SJF调度过程。假设有n个进程分别在T1, … ,Tn时刻到达系统,它们需要的服务时间分别为S1, … ,Sn。分别采用先来先服务FCFS和短作业优先SJF进程调度算法进行调度,计算每个进程的完成时间、周转时间和带权周转时间,并且统计n个进程的平均周转时间和平均带权周转时间。
程序需求:
1)进程个数n;每个进程的到达时间T1, … ,Tn和服务时间S1, … ,Sn;
2)要求采用先来先服务FCFS和短作业优先SJF分别调度进程运行,计算每个进程的完成时间,周转时间和带权周转时间,并且计算所有进程的平均周转时间和带权平均周转时间;
4)输出:输出计算出来的每个进程的完成时间,周转时间、带权周转时间、所有进程的平均周转时间以及带权平均周转时间。
5)测试数据:
作业情况
调
度
算法
进程名
A
B
C
D
E
平均
到达时间
0
1
2
3
4
服务时间
4
3
5
2
4
FCFS
(a)
完成时间
4
7
12
14
18
周转时间
4
6
10
11
14
9
带权周转时间
1
2
2
5.5
3.5
2.8
SJF
(b)
完成时间
4
9
18
6
13
周转时间
4
8
16
3
9
8
带权周转时间
1
2.67
3.1
1.5
2.25
2.1
二 概要设计
1)程序中进程调度时间变量描述如下:
const int MaxNum=100;//定义进程的最大总数
double ArrivalTime[MaxNum];到达时间
double ServiceTime[MaxNum]; 服务时间
double FinishTime[MaxNum]; 完成时间
double WholeTime[MaxNum]; 周转时间
double WeightWholeTime[MaxNum];带权周转时间
double AverageWT_FCFS; 定义FCFS平均周转时间
double AverageWWT_FCFS; 定义FCFS平均带权周转时间
double AverageWT_SJF; 定义SJF平均周转时间
double AverageWWT_SJF; 定义SJF平均带权周转时间
2)进程调度的实现过程如下:
变量初始化;
接收用户输入n,T1, … ,Tn,S1, … ,Sn;
按照算法进行进程调度,计算进程的完成时间、周转时间和带权周转时间;
计算所有进程的平均周转时间和平均带权周转时间;
按格式输出调度结果。
三 详细设计
1)Main函数
int main()
{
cout请输入进程总的个数 n(n为整数且0n=100):endl;
cinn;
while(n1)
{
cout你输入的n值不合适,请重新输入!endl;
cinn;
}
cout请按照进程到达的时间由小到大依次输入n个进程的到达时间,以空格隔开:endl;
for(int i=0;in;i++)
cinArrivalTime[i];
cout请按上面的顺序依次输入各个进程的服务时间,以空格隔开:endl;
for( int i=0;in;i++)
cinServiceTime[i];
FCFS(ArrivalTime,ServiceTime,n);//调用FCFS子程序
SJF(ArrivalTime,ServiceTime,n); //调用SJF子程序
}
2)FCFS算法
void FCFS(double *ArrivalTime,double *ServiceTime,double n)
{
FinishTime[0]=ArrivalTime[0]+ServiceTime[0];
WholeTime[0]=FinishTime[0]-ArrivalTime[0];
WeightWholeTime[0]=WholeTime[0]/ServiceTime[0];
AverageWT_FCFS=WholeTime[0];
AverageWWT_FCFS=WeightWholeTime[0];
for(int i=1;in;i++)
{
if(FinishTime[i-1]ArrivalTime[i]||FinishTime[i-1]==ArrivalTime[i])
FinishTime[i]=FinishTime[i-1]+ServiceTime[i];
else FinishTime[i]=Ar
原创力文档

文档评论(0)