先来先服务(FCFS)进程调度模拟

本文介绍了先来先服务(FCFS)调度算法的基本概念,包括其工作原理和在进程调度中的应用。通过C++代码模拟实现,展示了如何按照作业到达时间进行排序并计算平均周转时间和带权周转时间。最后给出了运行结果示例。
摘要由CSDN通过智能技术生成
  • 1.算法简介

先来先服务(first-come first-served,FCFS)调度算法,FCFS是最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。  

算法思想:当在作业调度中采用该算法时,系统将按照作业到达的先后次序来进行调度,或者说它是优先考虑在系统中等待时间最长的作业,而不管该作业所需执行时间的长短,从后备作业队列中选择几个最先进入该队列的作业,将它们调入内存,为它们分配资源和创建进程。然后把它放入就绪队列。

  • 2.代码模拟实现
#include<bits/stdc++.h>
using namespace std;
struct job 
{
	char name[10];//作业的名字
	int starttime;//作业到达时间 
	int needtime;//作业服务时间 
	int runtime;//作业周转时间 
	int endtime;//作业结束时间 
	int flag=0;//作业完成标志 
	char state='w';//作业状态,一开始都默认为就绪 
	double dqzz_time;//带权周转时间 
}; 
bool campare_start(struct job job1,struct job job2)//自定义排序方式
{
	return job1.starttime<job2.starttime;

 } 
void FCFS(struct job jobs[50],int n)
{
	sort(jobs,jobs+n,campare_start);//按作业到达时间从小到大排序
	int nowtime=0;//系统时间 

	for(int i=0;i<n;i++)
	{
		if(nowtime<jobs[i].starttime)
		{
			nowtime=jobs[i].starttime;
		}
		jobs[i].state='R';//运行
		jobs[i].endtime=nowtime+jobs[i].needtime;//作业结束时间 
		jobs[i].runtime=jobs[i].endtime-jobs[i].starttime;//作业周转时间
		jobs[i].dqzz_time=double(jobs[i].runtime)/jobs[i].needtime;//带权周转时间
		nowtime=jobs[i].endtime; 
		jobs[i].state='F';//作业完成 
	 } 
}
void print_FCFS(struct job jobs[50],int n)
{
	double a_runtime=0;//平均周转时间 
	double a_dqzz_time=0;//平均带权周转时间
	double sum_time1=0;//总周转时间 
	double sum_time2=0; //总带权周转时间 
	cout<<"作业名 到达时间 运行时间 完成时间 周转时间 带权周转时间:"<<endl;
	for(int i=0;i<n;i++)
	{
		cout<<"作业名:"<<jobs[i].name<<"到达时间:"<<jobs[i].starttime<<"运行时间:"<<jobs[i].needtime<<"完成时间:"<<jobs[i].endtime<<"周转时间"<<jobs[i].runtime<<"带权周转时间:"<<jobs[i].dqzz_time<<endl;
		sum_time1+=jobs[i].runtime;
		sum_time2+=jobs[i].dqzz_time; 
	 } 
	 a_runtime=sum_time1/n;
	 a_dqzz_time=sum_time2/n;
	 cout<<"平均周转时间"<<a_runtime<<endl; 
	 cout<<"平均带权周转时间"<<a_dqzz_time<<endl;
 } 
int main()
{
	struct job jobs[50];
	int n;//n个作业
	cout<<"请输入作业个数"<<endl;
	cin>>n;
	cout<<"请输入各作业的信息(作业名 到达时间 服务时间):"<<endl;
	for(int i=0;i<n;i++)
	{	cin>>jobs[i].name;
		cin>>jobs[i].starttime;
		cin>>jobs[i].needtime;

		}
	FCFS(jobs,n);//调用FCFS算法 
	cout<<"FCFS调度算法运行结果:"<<endl;
	print_FCFS(jobs,n);	//打印FCFS运行结果 
	return 0;
 } 
  • 3.运行结果
  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值