C++ 实现先来先服务 (FCFS) 进程调度算法
C++ 实现先来先服务 (FCFS) 进程调度算法
本代码使用 C++ 实现先来先服务 (FCFS) 进程调度算法,并详细解释了代码中每个变量和函数的作用,以及算法的流程。
#include <iostream>
#include <string>
#include <algorithm>
#include <iomanip>
#include <Windows.h>
//#include<bits/stdc++.h>
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升序排序
}
程序中定义了哪几个变量,分别表示什么资源?
process结构体,表示每个进程的相关信息,包括进程id、到达时间、服务时间、完成时间等资源。n,表示进程数,是一个整型变量。startTime,表示每个进程的开始时间,是一个整型变量。
代码解释
input()函数:用于输入进程数和每个进程的到达时间和服务时间。display()函数:用于显示每个进程的详细信息,包括进程id、到达时间、服务时间、完成时间、周转时间和带权周转时间。FCFS()函数:实现先来先服务算法,根据进程的到达时间顺序执行进程,计算每个进程的完成时间。cmp1()函数:用于比较两个进程的到达时间,实现按到达时间升序排序。cmp2()函数:用于比较两个进程的id,实现按进程id升序排序。
代码流程
- 输入进程数和每个进程的到达时间和服务时间。
- 使用
FCFS()函数计算每个进程的完成时间。 - 使用
display()函数输出每个进程的详细信息。
算法分析
先来先服务算法是一种简单的进程调度算法,它按照进程到达时间的顺序执行进程。该算法的优点是实现简单,易于理解。缺点是可能会造成一些进程长时间等待,导致系统吞吐量降低。
总结
本代码实现了一个简单的先来先服务进程调度算法,并解释了代码中每个变量和函数的作用,以及算法的流程。该算法的优点是简单易懂,但缺点是可能会导致一些进程长时间等待。在实际应用中,需要根据具体的场景选择合适的进程调度算法。
原文地址: https://www.cveoy.top/t/topic/n47f 著作权归作者所有。请勿转载和采集!