C++实现FCFS调度算法

前言 

最近刚开始学操作系统,刚好要做实验便记录一下实验内容,首先要理解FCFS的基本概念,它是以提交时间为核心的一种调度算法


基本思路:

题目已知提交时间与运行时间要我们得出所有作业的开始、完成、周转、带权周转、平均周转、平均带权周转时间。


题目关键在于求出上一作业的完成时间后与下一作业的提交时间相比较,以此来判断开始时间是等于本作业的提交时间还是上一次作业的完成时间


#include<iostream>
#include <iomanip>//保留小数用到
using namespace std;
struct Fcfs
{
	int N;
	double Htime;//提交时间
	double Rtime;//运行时间
	double Stime;//开始时间
	double Ctime;//完成时间
	double Ztime;//周转时间
	double DZtime;//带权周转时间
};
	#define t 4//作业数量
    double sumZtime;//总周转时间
	double sumDZtime;//总带权周转时间
	void Fin();
	void Px();
	void Get();
	void print();

	struct Fcfs F[t],temp;
	void Fin() {//输入所有作业的提交与执行时间
		for (int i = 0; i < t; i++) {
			cout << "请输入提交时间: ";
			cin >> F[i].Htime;
			cout << "请输入执行时间: ";
			cin >> F[i].Rtime;			
		}
		cout << endl;
	}
	void Px() {        //冒泡升序排序(提交时间)	
		for (int i = 0; i < t - 1; i++) {
			for (int j = 0; j < t - i-1; j++) {
				if (F[j + 1].Htime < F[j].Htime) {
					temp = F[j + 1];    //temp = F[j + 1].Htime;
					F[j + 1] = F[j];   //F[j + 1].Htime = F[j].Htime
					F[j] = temp;      //F[j].Htime = temp
					                 //以上注释如此填写会只交换Htime而不交换Rtime
				}
			}
		}
	}
	void Get() {               //先把第一个作业所有数据得出
		F[0].Stime = F[0].Htime;
		F[0].Ctime = F[0].Stime + F[0].Rtime;
		F[0].Ztime = F[0].Ctime - F[0].Htime;
		F[0].DZtime = F[0].Ztime / F[0].Rtime;
		sumZtime= F[0].Ztime;
		sumDZtime= F[0].DZtime;
		for (int i = 1; i < t; i++) {             //根据第一个数据求开始时间
			if (F[i].Htime < F[i - 1].Ctime) {   //如果提交时间小于上一个作业的完成时间
				F[i].Stime = F[i - 1].Ctime;    //开始时间等于上一个作业的完成时间
			}
			else
				F[i].Stime = F[i].Htime;      //开始时间等于本作业的提交时间
	//-----------------------------------------------------------------------
			//公共部分求出剩下数据:
			F[i].Ctime = F[i].Stime + F[i].Rtime;    //完成=开始+运行
			F[i].Ztime = F[i].Ctime - F[i].Htime;   //周转=完成-提交
			F[i].DZtime = F[i].Ztime / F[i].Rtime;  //带权周转=周转/运行
			sumZtime += F[i].Ztime;           //循环累加
			sumDZtime += F[i].DZtime;        //循环累加
		}
	}
	void print() {
		cout << setiosflags(ios::fixed) << setprecision(2);   //保留2位小数
		cout << "FCFS调度算法:" << endl;
		cout << "作业\t     提交时间\t     执行时间\t     开始时间\t     完成时间\t     周转时间\t     带权周转时间\t     "<<endl;
		for (int i = 0; i < t; i++) {
			F[i].N = i + 1;
			cout << F[i].N << "\t\t" << F[i].Htime << "\t\t" << F[i].Rtime << "\t\t" <<
				F[i].Stime << "\t\t" << F[i].Ctime << "\t\t" << F[i].Ztime << "\t\t" << F[i].DZtime << "\n";
		}
		cout << setiosflags(ios::fixed) << setprecision(3);  //保留3位小数
		cout << "平均周转时间: ";
		cout << sumZtime/t << endl;
		cout << "平均带权周转时间: ";
		cout << sumDZtime/t << endl;
	}
	int main() {
		 Fin();
		 Px();
		 Get();
		 print();
	}

 输入:9.00 0.10

            8.00 2.00

            8.50 0.50

            9.50 0.20

  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,FCFS调度算法是先来先服务调度算法,其实现代码如下: ```c++ #include <iostream> using namespace std; struct Process { int pid; // 进程号 int burst; // 执行时间 int arrival; // 到达时间 }; void FCFS(Process processes[], int n) { int waitingTime[n], turnAroundTime[n], totalWaitingTime = 0, totalTurnAroundTime = 0; waitingTime[0] = 0; turnAroundTime[0] = processes[0].burst; for (int i = 1; i < n; i++) { waitingTime[i] = turnAroundTime[i - 1]; turnAroundTime[i] = waitingTime[i] + processes[i].burst; } for (int i = 0; i < n; i++) { totalWaitingTime += waitingTime[i]; totalTurnAroundTime += turnAroundTime[i]; } double avgWaitingTime = (double)totalWaitingTime / n; double avgTurnAroundTime = (double)totalTurnAroundTime / n; cout << "FCFS Scheduling Algorithm\n"; cout << "Process\tBurst Time\tArrival Time\tWaiting Time\tTurn-Around Time\n"; for (int i = 0; i < n; i++) { cout << "P" << processes[i].pid << "\t "; cout << processes[i].burst << "\t\t "; cout << processes[i].arrival << "\t\t "; cout << waitingTime[i] << "\t\t "; cout << turnAroundTime[i] << endl; } cout << "Average Waiting Time: " << avgWaitingTime << endl; cout << "Average Turn-Around Time: " << avgTurnAroundTime << endl; } int main() { Process processes[] = {{1, 10, 0}, {2, 5, 0}, {3, 8, 0}}; int n = sizeof(processes) / sizeof(Process); FCFS(processes, n); return 0; } ``` 以上是FCFS调度算法实现代码,可以计算出每个进程的等待时间和周转时间,最后输出平均等待时间和平均周转时间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值