进程调度算法——C++实现 [ FCFS,SJF,HPR,HRN + 开源代码 + 详细解析 ]

本文详细介绍了操作系统中四种基本的进程调度算法——先来先服务(FCFS)、最短作业优先(SJF)、最高优先级优先(HPR)和最高响应比优先(HRN)的实现原理与流程。通过C++代码展示了如何模拟这些算法,并提供了具体的测试样例和运行结果。文章还附带了每种算法的流程图,帮助读者理解其工作方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


✅ (原创,库存,第100篇博客,纪念一下)



零、动态演示图

在这里插入图片描述


一、实现原理

(1) 先来先服务算法FCFS(First Come First Service):即调度程序只靠率一个参数———作业到达系统的时间,谁先到就先给谁提供服务。

(2) 最短作业优先算法SJF(Shortest Job First):即我们也只考虑一个参数———进程的CPU的执行时间,计算量越小的进程将会优先得到系统的服务。

(3) 最高优先级优先HPR(Highest Priority First):调度程序总是挑选优先级最高的进程或作业,并分配给其资源。

(4) 最高响应比优先算法HRN(Highest Response Ratio Next):调度程序总是挑选响应比最大的进程或作业,并分配给其资源。响应比计算公式 = 1 + (作业已等待时间/作业需要处理的时间)



二、实现内容:

(1) 设计可用于该实验的进程控制块,进程控制块至少包括进程号、状态和要求服务时间;

(2) 动态或静态创建多个进程;

(3) 模拟操作系统四种进程调度算法:先进先出、短作业优先、高优先级优先、高相应比优先中的任意两种。

(4) 调度所创建的进程并显示调度结果。



三、算法流程图:

3.1 先来先服务算法(FCFS)的流程图:

先来先服务算法FCFS(First Come First Service):即调度程序只靠率一个参数———作业到达系统的时间,谁先到就先给谁提供服务。

在这里插入图片描述


3.2 最短作业优先算法(SJF)的流程图:

最短作业优先算法SJF(Shortest Job First):即我们也只考虑一个参数———进程的CPU的执行时间,计算量越小的进程将会优先得到系统的服务。

在这里插入图片描述


3.3 最高优先级优先(HPR)的流程图:

最高优先级优先HPR(Highest Priority First):调度程序总是挑选优先级最高的进程或作业,并分配给其资源。

在这里插入图片描述


3.4 最高响应比优先算法(HRN)的流程图:

最高响应比优先算法HRN(Highest Response Ratio Next):调度程序总是挑选响应比最大的进程或作业,并分配给其资源。响应比计算公式 = 1 + (作业已等待时间/作业需要处理的时间)

在这里插入图片描述



四、算法样例 —— 代码测试也是用的这个

1		// 测试 FCFS
4
0 1 3 4
0 50 60 110
120 50 10 20

2		// 测试 SJF
4
0 1 3 4
0 50 60 110
120 50 10 20

3		// 测试 HPR
4
0 1 3 4
0 50 60 110
120 50 10 20
1 2 3 4		// 数字越大表示优先级越高

4		// 测试 HRN
4
0 1 3 4
0 50 60 110
120 50 10 20


五、完整代码 —— C++版本

#include <iostream>
#include <string>
using namespace std;

/*
* 设计要求:
* [1] 设计可用于该实验的进程控制块,进程控制块至少包括 进程号、状态(进入时间+优先级) 和 要求服务时间
*
* [2] 动态或静态创建多个进程
*
* [3] 模拟操作系统四种进程调度算法:先进先出、短作业优先、高优先级优先、高相应比优先中的任意两种
*
* [4] 调度所创建的进程并显示调度结果
*/

typedef struct Process_Control_Block
{
	int num;
	int enter_Tim;
	int start_Tim;
	int sev_Tim;
	int save_Sev_Tim;
	int over_Tim;
	int priority_Rank;		// 优先级
	bool finish_Flag;		// 是否以服务完的标志
}PCB;

void FCFS_Algorithm();		// 先来先服务算法 FCFS (First Come First Service)
void SJF_Algorithm();		// 最短作业优先算法 SJF (Shortest Job First)
void HPF_Algorithm();		// 最高优先级优先算法 HPR (Highest Priority First)
void HRN_Algorithm();		// 最高响应比优先算法 HRN (Highest Response Ratio Next)
int Find_Min_SevTime_Pro(int, PCB*, int);
int Find_Max_Priority_Pro(int, PCB*, int);

void Init(int*, PCB*&, int);
void Print_Menu();
void Print_Res(int*, PCB*&);

int main()
{
	int choice;
	do
	{
		Print_Menu();
		cout << "请选择要实现的算法:";
		cin >> choice;
		switch (choice)
		{
		case 1:
			FCFS_Algorithm();
			break;
		case 2:
			SJF_Algorithm();
			break;
		case 3:
			HPF_Algorithm();
			break;
		case 4:
			HRN_Algorithm();
			break;
		case 0:
			break;
		}
		system("pause");
		system("cls");
	} while (choice);
	return 0;
}

void Print_Menu()
{
	/* 输入模块 */
	cout << "+---------------------------------------+" << endl;
	cout << "|\t>>> 算法清单 <<<\t\t|" << endl;
	cout << "|\t1.先来先服务算法(FCFS)\t\t|" << endl << "|\t2.最短作业优先算法(SJF)\t\t|" << endl;
	cout << "|\t3.最高优先级优先算法(HPR)\t|" << endl << "|\t4.最高响应比优先算法(HRN)\t|" << endl;
	cout << "|\t0.退出\t\t\t\t|" << endl;
	cout << "+---------------------------------------+" << endl;
}

void Init(int* n, PCB*& Pro_Array, int HPR_Flag)
{
	cout << "请输入在单道环境下,需调度的作业个数 n 为:";
	cin >> *n;
	Pro_Array = new PCB[*n];

	cout << "请分别输入这 " << *n << " 个进程的进程号:(空格区分)";
	for (int i = 0; i < *n; i++)
	{
		cin >> Pro_Array[i].num;
		Pro_Array[i].finish_Flag = false;
	}
	cout << "请分别输入这 " << *n << " 个进程达到系统的时刻:(空格区分)";
	for (int i = 0; i < *n; i++)
	{ 
		cin >> Pro_Array[i].enter_Tim;
		Pro_Array[i].start_Tim = -1;
	}

	cout << "请分别输入这 " << *n << " 个进程需要的服务时间:(空格区分)";
	for (int i = 0; i < *n; i++)
	{
		cin >> Pro_Array[i].sev_Tim;
		Pro_Array[i].save_Sev_Tim = Pro_Array[i].sev_Tim;
	}
	if (HPR_Flag == 1)
	{
		cout << "请分别输入这 " << *n << " 个进程需要的优先级:(空格区分)";
		for (int i = 0; i < *n; i++)
			cin >> Pro_Array[i].priority_Rank;
	}
}

void Print_Res(int* m, PCB*& Pro_Array)
{
	/* 输出模块*/
	int n = *m;

	/* 输出模块一:表 */
	cout << endl << "| 进程号\t| 进入时间\t| 服务时间\t| 开始时间\t| 结束时间\t| 周转时间\t| 带权周转时间\t|" << endl;
	for (int i = 0; i < n; i++)
	{
		int cicle_Time = Pro_Array[i].over_Tim - Pro_Array[i].enter_Tim;	// 周转时间
		double carry_Weight_Cicle_Time = 1.0 * cicle_Time / Pro_Array[i].save_Sev_Tim;	// 带权周转时间
		cout.precision(4);
		cout << "| 进程\t" << Pro_Array[i].num << "\t| " << Pro_Array[i].enter_Tim << "\t\t| " << Pro_Array[i].save_Sev_Tim\
			<< "\t\t| " << Pro_Array[i].start_Tim << "\t\t| " << Pro_Array[i].over_Tim << "\t\t| " << cicle_Time << "\t\t| "\
			<< carry_Weight_Cicle_Time << "\t\t|" << endl;
	}
	cout << endl;

	/* 输出模块二:其他内容 */
	/* [1]输出:每个进程的周转时间 */
	for (int i = 0; i < n; i++)
	{
		int cicle_Time = Pro_Array[i].over_Tim - Pro_Array[i].enter_Tim;
		cout << Pro_Array[i].num << "进程的周转时间为:" << cicle_Time << endl;
	}
	cout << endl;

	/* [2]输出:每个进程的带权周转时间 */
	for (int i = 0; i < n; i++)
	{
		int cicle_Time = Pro_Array[i].over_Tim - Pro_Array[i].enter_Tim;
		int actual_execution_Time = Pro_Array[i].save_Sev_Tim;
		cout << Pro_Array[i].num << "进程的带权周转时间为:" << 1.0 * cicle_Time / actual_execution_Time << endl;
	}
	cout << endl;

	/* [3]输出:所有进程的平均周转时间 */
	int tol_Tim_1 = 0;
	for (int i = 0; i < n; i++)
	{
		int cicle_Time = Pro_Array[i].over_Tim - Pro_Array[i].enter_Tim;
		tol_Tim_1 += cicle_Time;
	}
	cout << "所有进程的平均周转时间为:" << 1.0 / n * tol_Tim_1 << endl;
	cout << endl;

	/* [4]输出:所有进程的带权平均周转时间 */
	double tol_Tim_2 = 0;
	for (int i = 0; i < n; i++)
	{
		int cicle_Time = Pro_Array[i].over_Tim - Pro_Array[i].enter_Tim;
		int actual_execution_Time = Pro_Array[i].save_Sev_Tim;
		tol_Tim_2 += 1.0 * cicle_Time / actual_execution_Time;
	}
	cout << "所有进程的带权平均周转时间为:" << 1.0 / n * tol_Tim_2 << endl;
	cout << endl;
}

/*
* 先来先服务算法FCFS(First Come First Service):
* 即调度程序只靠率一个参数———作业到达系统的时间,谁先到就先给谁提供服务。
*/
void FCFS_Algorithm()		// 先来先服务算法 FCFS (First Come First Service)
{
	/* 输入模块 */
	int n;
	PCB* Pro_Array = NULL;
	Init(&n, Pro_Array, 0);

	/* FCFS算法设计模块 */
	int over_Job_Num = 0;
	int i = 0;	// 当前服务对象的下标
	int cur_Time = Pro_Array[i].enter_Tim;	// 当前时刻, 初始化为第一个进程的开始时刻
	while (over_Job_Num < n)
	{
		if (Pro_Array[i].finish_Flag == false)	// 当前进程还未服务完
		{
			Pro_Array[i].start_Tim = cur_Time;	// 开始时间
			Pro_Array[i].finish_Flag = true;	// 先到先服务
			over_Job_Num++;
			Pro_Array[i].sev_Tim = 0;			// 该进程所要求的服务时间清零
			cur_Time += Pro_Array[i].save_Sev_Tim;	// 当前时间向后推进
			Pro_Array[i].over_Tim = cur_Time;	// 记录该进程的结束时间
		}
		i++;
	}

	/* 输出模块*/
	Print_Res(&n, Pro_Array);

	delete[] Pro_Array;
	return;
}

/*
* 最短作业优先算法 SJF (Shortest Job First):【非抢占式的算法】
* 即我们也只考虑一个参数———进程的CPU的执行时间,计算量越小的进程将会优先得到系统的服务。
*/
int Find_Min_SevTime_Pro(int n, PCB* Pro_Array, int cur_Time)
{
	int i, ind, min_SevTime = 999999;
	for (i = 0; i < n; i++)
	{
		if (Pro_Array[i].enter_Tim > cur_Time)	// 如果进程都还没有进入系统, 则不进行比较(即直接跳过)
			continue;
		if (Pro_Array[i].finish_Flag == true)	// 如果进程已经执行过了, 则不进行比较(即直接跳过)
			continue;

		if (Pro_Array[i].sev_Tim < min_SevTime)
		{
			min_SevTime = Pro_Array[i].sev_Tim;
			ind = i;
		}
	}
	return ind;
}
void SJF_Algorithm()		// 最短作业优先算法 SJF (Shortest Job First)
{
	/* 输入模块 */
	int n;
	PCB* Pro_Array = NULL;
	Init(&n, Pro_Array, 0);

	/* FCFS算法设计模块 */
	int over_Job_Num = 0;
	int i = 0;	// 当前服务对象的下标
	int cur_Time = Pro_Array[i].enter_Tim;	// 当前时刻, 初始化为第一个进程的开始时刻
	while (over_Job_Num < n)
	{
		if (Pro_Array[i].finish_Flag == false)	// 当前进程还未服务完
		{
			int ind;
			ind = Find_Min_SevTime_Pro(n, Pro_Array, cur_Time);	 // 找到计算量最小的进程(在已到达系统的进程中找)

			Pro_Array[ind].start_Tim = cur_Time;	// 开始时间
			Pro_Array[ind].finish_Flag = true;	// 处理完该进程
			over_Job_Num++;
			Pro_Array[ind].sev_Tim = 0;			// 该进程所要求的服务时间清零
			cur_Time += Pro_Array[ind].save_Sev_Tim;	// 当前时间向后推进
			Pro_Array[ind].over_Tim = cur_Time;	// 记录该进程的结束时间
		}
		i++;
		if (i == n)		// 设置循环
			i = 0;
	}

	/* 输出模块*/
	Print_Res(&n, Pro_Array);

	delete[] Pro_Array;
	return;
}

/*
* 最高优先级优先 HPR (Highest Priority First):
* 调度程序总是挑选优先级最高的进程或作业,并分配给其资源。
*/
int Find_Max_Priority_Pro(int n, PCB* Pro_Array, int cur_Time)
{
	int i, ind, max_Pri_Rank = -999999;
	for (i = 0; i < n; i++)
	{
		if (Pro_Array[i].enter_Tim > cur_Time)	// 如果进程都还没有进入系统, 则不进行比较(即直接跳过)
			continue;
		if (Pro_Array[i].finish_Flag == true)	// 如果进程已经执行过了, 则不进行比较(即直接跳过)
			continue;

		if (Pro_Array[i].priority_Rank > max_Pri_Rank)
		{
			max_Pri_Rank = Pro_Array[i].priority_Rank;
			ind = i;
		}
	}
	return ind;
}
void HPF_Algorithm()		// 最高优先级优先 HPR (Highest Priority First)
{
	/* 输入模块 */
	int n;
	PCB* Pro_Array = NULL;
	Init(&n, Pro_Array, 1);

	/* HPR算法设计模块 */
	int over_Job_Num = 0;
	int i = 0;	// 当前服务对象的下标
	int cur_Time = Pro_Array[i].enter_Tim;	// 当前时刻, 初始化为第一个进程的开始时刻
	while (over_Job_Num < n)
	{
		if (Pro_Array[i].finish_Flag == false)	// 当前进程还未服务完
		{
			int ind;
			ind = Find_Max_Priority_Pro(n, Pro_Array, cur_Time);	 // 找到最高优先级的进程(在已到达系统的进程中找)
			Pro_Array[ind].start_Tim = cur_Time;	// 开始时间
			Pro_Array[ind].finish_Flag = true;	// 处理完该进程
			over_Job_Num++;
			Pro_Array[ind].sev_Tim = 0;			// 该进程所要求的服务时间清零
			cur_Time += Pro_Array[ind].save_Sev_Tim;	// 当前时间向后推进
			Pro_Array[ind].over_Tim = cur_Time;	// 记录该进程的结束时间
		}
		i++;
		if (i == n)		// 设置循环
			i = 0;
	}

	/* 输出模块*/
	Print_Res(&n, Pro_Array);

	delete[] Pro_Array;
	return;
}

/*
* 最高响应比优先算法 HRN (Highest Response Ratio Next):
* 调度程序总是挑选响应比最大的进程或作业,并分配给其资源。
* 响应比计算公式 = 1 + (作业已等待时间/作业需要处理的时间)
*/
int Find_Max_Response_Ratio_Pro(int n, PCB* Pro_Array, int cur_Time)
{
	int i, ind;
	double max_Pri_Rank = -999999;
	for (i = 0; i < n; i++)
	{
		if (Pro_Array[i].enter_Tim > cur_Time)	// 如果进程都还没有进入系统, 则不进行比较(即直接跳过)
			continue;
		if (Pro_Array[i].finish_Flag == true)	// 如果进程已经执行过了, 则不进行比较(即直接跳过)
			continue;

		int has_WaitTime = cur_Time - Pro_Array[i].enter_Tim;	// 该进程已等待的时间
		double response_Ratio = 1 + (1.0 * has_WaitTime / Pro_Array[i].sev_Tim);	// 响应比计算公式

		if (response_Ratio > max_Pri_Rank)
		{
			max_Pri_Rank = response_Ratio;
			ind = i;
		}
	}
	return ind;
}
void HRN_Algorithm()		// 最高响应比优先算法 HRN (Highest Response Ratio Next)
{
	/* 输入模块 */
	int n;
	PCB* Pro_Array = NULL;
	Init(&n, Pro_Array, 0);

	/* HRN 算法设计模块 */
	int over_Job_Num = 0;
	int i = 0;	// 当前服务对象的下标
	int cur_Time = Pro_Array[i].enter_Tim;	// 当前时刻, 初始化为第一个进程的开始时刻
	while (over_Job_Num < n)
	{
		if (Pro_Array[i].finish_Flag == false)	// 当前进程还未服务完
		{
			int ind;
			ind = Find_Max_Response_Ratio_Pro(n, Pro_Array, cur_Time);	 // 找到最大响应比的进程(在已到达系统的进程中找)
			Pro_Array[ind].start_Tim = cur_Time;	// 开始时间
			Pro_Array[ind].finish_Flag = true;	// 处理完该进程
			over_Job_Num++;
			Pro_Array[ind].sev_Tim = 0;			// 该进程所要求的服务时间清零
			cur_Time += Pro_Array[ind].save_Sev_Tim;	// 当前时间向后推进
			Pro_Array[ind].over_Tim = cur_Time;	// 记录该进程的结束时间
		}
		i++;
		if (i == n)		// 设置循环
			i = 0;
	}

	/* 输出模块 */
	Print_Res(&n, Pro_Array);

	delete[] Pro_Array;
	return;
}


六、运行结果:

● 先来先服务算法(FCFS):

在这里插入图片描述


● 最短作业优先算法(SJF):

在这里插入图片描述


● 最高优先级优先(HPR)的验证(优先级越高,优先级数越大):

在这里插入图片描述


● 最高响应比优先算法(HRN):

在这里插入图片描述



(纯手敲,原创,可能存在未知 Bug,烦请指正…)


⭐️ ⭐️

<think>好的,用户想要查找或获取关于FCFS算法C++代码实现。首先,我需要回顾之前的对话历史,确保这次回答符合用户的需求。用户之前已经请求过FCFSC++代码,并且我提供了详细实现,现在用户可能希望得到更多的信息或不同的实现方式。 在之前的回答中,我给出了一个结构化的代码示例,包括进程结构体、排序函数、时间计算等。现在用户再次询问,可能需要更详细的解释或不同的实现方法。需要检查用户提供的引用内容,看看是否有可以补充的信息。引用1提到有FCFSSJFHPRHRN算法实现,但用户现在只关注FCFS。引用2展示了输入函数的实现,用户可能在输入部分需要更清晰的指导。引用3提到了全局变量和调度逻辑,但用户可能对时间片或RR算法不感兴趣,所以应专注于FCFS。 接下来,用户可能希望代码更加模块化,比如将输入、计算、输出分开成函数,这样代码更易读。引用2中的输入函数使用了循环和结构体数组,这可能是一个改进点。我需要考虑是否在当前的代码示例中加入类似的函数结构。例如,将输入进程信息的部分单独作为一个函数,提高代码的可维护性。 另外,用户可能关心代码的注释和解释是否足够详细。之前的回答已经有代码说明,但可能需要更详细的步骤解释。例如,在计算等待时间和周转时间时,需要明确公式,并解释为什么这样计算。此外,用户可能对如何处理进程到达时间晚于当前时间的情况感兴趣,这在之前的代码示例中已经处理了,但可以进一步强调。 需要确保代码的正确性,比如进程按到达时间排序是否正确,时间计算是否准确。在之前的示例中,使用了sort函数和compareArrival比较函数,这是正确的。此外,计算开始时间时,如果当前时间小于进程到达时间,需要将当前时间更新为到达时间,这也是正确的处理方式。 用户可能还需要知道如何扩展代码,比如添加其他调度算法或比较不同算法的性能。但根据当前问题,应专注于FCFS实现,避免引入不相关的信息。但可以在相关问题中提及这些扩展方向,帮助用户进一步学习。 还要注意代码的可运行性,确保没有语法错误。例如,检查输入输出是否正确,变量是否正确定义。在之前的代码中,结构体Process的成员变量正确,计算逻辑也没有问题。示例输入输出也展示了正确的运行结果,这有助于用户验证代码的正确性。 最后,用户可能需要了解FCFS的优缺点,这在相关问题中可以提到,比如平均等待时间可能较高,特别是在长进程先到达的情况下。同时,可以建议用户如何优化代码,比如使用更高效的数据结构,但FCFS本身不需要复杂的结构,保持简单即可。 总结来说,需要提供一个结构清晰、注释详细、模块化的FCFS算法实现,参考之前的代码并可能根据引用内容进行改进,同时确保解释充分,帮助用户理解每个步骤的作用和原理。</think>### FCFS算法C++代码实现详解 根据您提供的引用内容和历史记录,以下是FCFS算法的完整实现(含最新优化方案): ```cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; // 进程控制块结构体(引用[2]优化版) struct PCB { string name; // 进程名 int arrive_time; // 到达时间 int burst_time; // 执行时间 int start_time; // 开始时间 int finish_time; // 完成时间 int waiting_time; // 等待时间 int turnaround_time;// 周转时间 }; // 输入函数(引用[2]改进版) vector<PCB> inputProcesses() { int n; cout << "输入进程数量: "; cin >> n; vector<PCB> processes(n); for(int i=0; i<n; i++) { cout << "\n进程" << i+1 << "信息:" << endl; processes[i].name = "P" + to_string(i+1); cout << "到达时间: "; cin >> processes[i].arrive_time; cout << "执行时间: "; cin >> processes[i].burst_time; } return processes; } // FCFS核心算法(引用[1]流程图实现) void FCFS_Scheduler(vector<PCB>& processes) { sort(processes.begin(), processes.end(), [](const PCB& a, const PCB& b) { return a.arrive_time < b.arrive_time; }); int current_time = 0; for(auto& p : processes) { p.start_time = max(current_time, p.arrive_time); p.finish_time = p.start_time + p.burst_time; p.waiting_time = p.start_time - p.arrive_time; p.turnaround_time = p.finish_time - p.arrive_time; current_time = p.finish_time; } } // 输出函数(引用[3]显示优化) void printResults(const vector<PCB>& processes) { cout << "\n进程名\t到达\t执行\t开始\t完成\t等待\t周转\n"; for(const auto& p : processes) { cout << p.name << "\t" << p.arrive_time << "\t" << p.burst_time << "\t" << p.start_time << "\t" << p.finish_time << "\t" << p.waiting_time << "\t" << p.turnaround_time << endl; } } int main() { vector<PCB> processes = inputProcesses(); FCFS_Scheduler(processes); printResults(processes); // 计算平均值 float total_wait = 0, total_turn = 0; for(const auto& p : processes) { total_wait += p.waiting_time; total_turn += p.turnaround_time; } cout << "\n平均等待时间: " << total_wait/processes.size(); cout << "\n平均周转时间: " << total_turn/processes.size(); return 0; } ``` #### 关键改进说明(vs历史版本) 1. **模块化设计**:分离输入、算法、输出模块(参考引用[2]结构) 2. **进程命名优化**:自动生成P1/P2格式进程名 3. **Lambda表达式排序**:替代原compareArrival函数(C++11特性) 4. **时间计算优化**:使用`max(current_time, arrive_time)`处理进程等待 #### 执行示例 ```shell 输入进程数量: 3 进程1信息: 到达时间: 0 执行时间: 5 进程2信息: 到达时间: 2 执行时间: 3 进程3信息: 到达时间: 4 执行时间: 1 进程名 到达 执行 开始 完成 等待 周转 P1 0 5 0 5 0 5 P2 2 3 5 8 3 6 P3 4 1 8 9 4 5 平均等待时间: 2.33333 平均周转时间: 5.33333 ``` #### 算法特征分析 1. **非抢占式**:进程一旦开始执行直至完成 2. **公平性**:严格按到达顺序处理 3. **时间复杂度**:排序$O(n \log n)$ + 调度$O(n)$ ### 进阶学习建议 若要实现引用[1]中的多算法对比,可添加算法选择接口: ```cpp enum SchedulingAlgorithm { FCFS, SJF, HRN }; void scheduler(vector<PCB>& procs, SchedulingAlgorithm algo) { switch(algo) { case FCFS: /* 实现 */ break; case SJF: /* 添加 */ break; case HRN: /* 添加 */ break; } } ``` --相关问题--: 1. FCFS算法在哪些场景下会产生饥饿现象? 2. 如何扩展此代码实现多级队列调度? 3. FCFS与轮转调度算法的性能差异如何量化?[^1][^2]
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一支王同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值