操作系统先来先服务FCFS进程调度算法
《操作系统》课程上机实验项目3
先来先服务FCFS进程调度算法
一、实验项目名称
先来先服务FCFS进程调度算法
二、实验目的
1、 掌握各种进程调度算法的基本思想
2、 掌握进程调度算法的性能评价方法
三、预习内容
阅读教材第2章 2.9节处理机调度
四、实验内容
设计程序模拟进程的先来先服务FCFS调度过程。假设有n个进程分别在T1, „ ,Tn时刻到达系统,它们需要的服务时间分别为S1, „ ,Sn。采用先来先服务FCFS进程调度算法进行调度,计算每个进程的完成时间,周转时间和带权周转时间,并且统计n个进程的平均周转时间和平均带权周转时间。
程序要求如下:
1) 进程个数n;每个进程的到达时间T1, „ ,Tn和服务时间S1, „ ,Sn;
2)要求采用先来先服务FCFS进程调度算法运行,计算每个进程的周转时间,带权周转时间,并且计算所有进程的平均周转时间,带权平均周转时间;
3)输出:要求模拟整个调度过程,输出每个时刻的进程运行状态,如“时刻3:进程B开始运行”等等;
4)输出:要求输出计算出来的每个进程的周转时间,带权周转时间,所有进程的平均周转时间,带权平均周转时间。
实现提示:
用C语言实现提示:
1)进程用结构体实现
#define Number 5
struct statedd //声明结构体 {
float arrive_time,service_time; //到达时间,服务时间
float finish_time,whole_time,weight_wholetime; //完成时间,周转时间,带权周转时间 float run_time; //开始执行时间
};
statedd process[Number]; //声明结构体变量,这里为数组
2)进程调度的实现过程如下:
变量初始化;
接收用户输入:a1, „ ,an,s1, „ ,sn; //到达时间和服务时间
进行进程调度,计算进程的完成时间、周转时间和带权周转时间;
计算所有进程的平均周转时间和平均带权周转时间;
按格式输出调度结果。
五、实验步骤
程序:
#include
#define N 5
struct process //声明结构体 {
float arrive_time,service_time; //到达时间,服务时间
float finish_time,whole_time,weight_wholetime; //完成时间,周转时间,带权周转时间
float start_time; //开始执行时间
};
void main()
{
struct process p[N];
int i;
for(i=0;i
scanf("%f %f",&p[i].arrive_time,&p[i].service_time);
p[0].start_time=p[0].arrive_time;
p[0].finish_time=p[0].start_time+p[0].service_time;
for(i=1;i
{
if(p[i].arrive_time
p[i].start_time=p[i-1].finish_time;
else
p[i].start_time=p[i].arrive_time;
p[i].finish_time=p[i].start_time+p[i].service_time;
}
for(i=0;i
{
p[i].whole_time=p[i].finish_time-p[i].arrive_time;
p[i].weight_wholetime=p[i].whole_time/p[i].service_time;
}
for(i=0;i
{ printf("%f,%f,%f",p[i].arrive_time,p[i].service_time,p[i].start_time);
printf("%f,%f,%f",p[i].finish_time,p[i].whole_time,p[i].weight_wholetime);
printf("\n");
}
}