设计一个按先来先服务调度的算法
设计一个先来先服务(FIFS)调度算法
根据进程到达时间进行排序,按顺序依次执行。
#include<stdio.h>
struct pcb{
char name[10];
float arriveTime;
float startTime;
float serviceTime;
float endTime;
float zzTime;
};
//数据的输入
void input(int N, pcb *p){
printf("输入进程名、到达时间和服务时间\n");
for(int i=0;i<N;i++)
scanf("%s%f%f",&p[i].name,&p[i].arriveTime,&p[i].serviceTime);
}
//按照到达时间进行排序
void sort(int N,pcb *p){
for(int i=0;i<N-1;i++){
pcb temp;
for(int j=i+1;j<N;j++){
if(p[i].arriveTime>p[j].arriveTime)
{
temp=p[i];
p[i]=p[j];
p[j]=temp;
}
}
}
}
//计算进程开始时间和结束时间
void PCB(int N,pcb *p){
for(int i=0;i<N;i++){
if(i==0){
p[i].startTime=p[i].arriveTime;
p[i].endTime=p[i].startTime+p[i].serviceTime;
}
else{
p[i].startTime=p[i-1].endTime;
p[i].endTime=p[i].startTime+p[i].serviceTime;
}
}
}
//数据的输出
void print(int N,pcb *p){
float temp=0;
for(int i=0;i<N;i++){
p[i].zzTime=p[i].endTime-p[i].arriveTime;
temp+=p[i].zzTime;
}
float pjzzTime=temp/N;
printf("进程名 到达时间 服务时间 开始时间 结束时间 周转时间\n");
for(int i=0;i<N;i++)
printf("%s%12.2f%12.2f%11.2f%11.2f%12.2f\n",p[i].name,p[i].arriveTime,p[i].serviceTime,p[i].startTime,p[i].endTime,p[i].zzTime);
printf("平均周转时间为:\n");
printf("%f",pjzzTime);
}
//主函数
int main()
{
pcb p[100];
int N;
printf("输入进程个数:\n");
scanf("%d",&N);
input(N,p);
sort(N,p);
PCB(N,p);
print(N,p);
}
优先级算法和时间片轮转算法请看博客主页。
https://blog.****.net/ScottWei_007