#include <stdio.h>
#include <iostream>
#include<stack>
#include<queue>
#include<cmath>
#include<stdlib.h>
#include<string.h>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<iomanip>
using namespace std;
struct process{ //进程结构体
int pid; //进程id
int ArrivalTime; //到达时间
int ServiceTime; //服务时间
int FinishTime; //完成时间
};
const int N=100; //最大进程数
process p[N];
int n; //进程数
void input(); //输入数据函数
void display(); //输出数据函数
void FCFS(); //先来先服务算法
bool cmp1(process p1,process p2); //比较函数1,实现按进程到达时间升序排序
bool cmp2(process p1,process p2); //比较函数2,实现按进程编号升序排序
int main(){
input();
FCFS();
display();
return 0;
}
void input(){ //输入进程数,每个进程的到达时间和服务时间
cout<<"请输入进程个数n:";
cin>>n;
cout<<"请分别输入每个进程的到达时间和服务时间:"<<endl;
for (int i=0;i<n;i++){
cin>>p[i].ArrivalTime>>p[i].ServiceTime;
p[i].pid = i+1;
}
}
void display(){
sort(p,p+n,cmp2);
cout<<"******************************************************"<<endl;
cout<<"进程相关信息如下:"<<endl;
cout<<setw(10)<<"进程名(ID)"<<" "; //setw(10)设置输出宽度
cout<<setw(10)<<"到达时间"<<" ";
cout<<setw(10)<<"服务时间"<<" ";
cout<<setw(10)<<"完成时间"<<" ";
cout<<setw(10)<<"周转时间"<<" ";
cout<<setw(10)<<"带权周转时间"<<endl;
for (int i = 0;i<n;i++){
cout<<setw(10)<<p[i].pid<<" ";
cout<<setw(10)<<p[i].ArrivalTime<<" ";
cout<<setw(10)<<p[i].ServiceTime<<" ";
cout<<setw(10)<<p[i].FinishTime<<" ";
cout<<setw(10)<<p[i].FinishTime-p[i].ArrivalTime<<" ";
cout<<setw(10)<<(p[i].FinishTime-p[i].ArrivalTime)*1.0/p[i].ServiceTime<<" "<<endl;
}
}
void FCFS(){
sort(p,p+n,cmp1);
int startTime=0;
for(int i=0;i<n;i++){
startTime = max(p[i].ArrivalTime,p[i-1].FinishTime);
p[i].FinishTime = startTime + p[i].ServiceTime;
}
}
bool cmp1(process p1,process p2){
return p1.ArrivalTime < p2.ArrivalTime; //按到达时间升序排序
}
bool cmp2(process p1,process p2){
return p1.pid < p2.pid; //按进程id升序排序
}
【水汐の操作系统】先来先服务调度算法
最新推荐文章于 2021-06-01 20:24:58 发布