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升序排序 
}

程序中定义了哪几个变量,分别表示什么资源?

  1. process 结构体,表示每个进程的相关信息,包括进程id、到达时间、服务时间、完成时间等资源。
  2. n,表示进程数,是一个整型变量。
  3. startTime,表示每个进程的开始时间,是一个整型变量。

代码解释

  1. input() 函数:用于输入进程数和每个进程的到达时间和服务时间。
  2. display() 函数:用于显示每个进程的详细信息,包括进程id、到达时间、服务时间、完成时间、周转时间和带权周转时间。
  3. FCFS() 函数:实现先来先服务算法,根据进程的到达时间顺序执行进程,计算每个进程的完成时间。
  4. cmp1() 函数:用于比较两个进程的到达时间,实现按到达时间升序排序。
  5. cmp2() 函数:用于比较两个进程的id,实现按进程id升序排序。

代码流程

  1. 输入进程数和每个进程的到达时间和服务时间。
  2. 使用 FCFS() 函数计算每个进程的完成时间。
  3. 使用 display() 函数输出每个进程的详细信息。

算法分析

先来先服务算法是一种简单的进程调度算法,它按照进程到达时间的顺序执行进程。该算法的优点是实现简单,易于理解。缺点是可能会造成一些进程长时间等待,导致系统吞吐量降低。

总结

本代码实现了一个简单的先来先服务进程调度算法,并解释了代码中每个变量和函数的作用,以及算法的流程。该算法的优点是简单易懂,但缺点是可能会导致一些进程长时间等待。在实际应用中,需要根据具体的场景选择合适的进程调度算法。

C++ 实现先来先服务 (FCFS) 进程调度算法

原文地址: https://www.cveoy.top/t/topic/n47f 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录