操作系统_进程调度算法(FCFS)

该博客介绍了一种C++实现的先到先服务(FCFS)调度算法,用于处理作业的到达时间、服务时间和周转时间计算。通过输入作业数量、到达时间和服务时间,程序对作业进行排序并计算各个指标,最后输出结果。代码中包含输入输出处理、排序及调度过程的详细步骤。
摘要由CSDN通过智能技术生成

操作系统_处理器管理_先到先服务算法:

问题描述:

输入N(N>0)个作业,输入每个作业的名字,到达时间,服务时间,按照先来先服务算法,计算每个作业的完成时间,周转时间,带权周转时间(保留2位小数)。

输入格式:
第一行输入作业数目,第二行输入作业的名字,第三行输入到达时间,第四行输入服务时间。

输出格式:
按照到达时间从小到大排序,第一行输出作业的名字,第二行输出到达时间,第三行输出服务时间,第四行输出完成时间,第五行输出完成时间,第六行输出带权周转时间。
下面展示一些.

输入样例:
在这里给出一组输入。
例如:
5
A B C D E
0 1 2 3 4
4 3 4 2 4
输出样例:
在这里给出相应的输出。
例如:
作 业 名:A B C D E
到达时间:0 1 2 3 4
服务时间:4 3 4 2 4
完成时间:4 7 11 13 17
周转时间:4 6 9 10 13
带权周转时间:1.00 2.00 2.25 5.00 3.25

FCFS算法

只对先到的作业先服务,因此,对于先到的作业能最早的得到资源并进行运算。

代码展示:

#include <bits/stdc++.h>
using namespace std;

struct  process{
    char name[16];	//名字 
    double come_time; 	//到达时间 
    double run_time;	//运行时间 
    double finish_time;	//完成时间 
    double circle_time;	//周转时间 
    double weight_circletime;	//带权周转时间 
    int  finished;		//程序是否被执行(0)为未被执行,反之已经执行 
}P[1024];

int n; // 输入进去n个进程 
//输入 
void Input(){ 
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>P[i].name;
		P[i].finished = 0;//输入进去的程序都是未被执行的 
    }
    for(int i=0;i<n;i++){
        cin>>P[i].come_time;
    }
    for(int i=0;i<n;i++){
        cin>>P[i].run_time;
    }
}
//输出 
void Output(){
    printf("作 业 名:");
    for(int i=0;i<n;i++){
        
		cout<<P[i].name;
		if(i<n-1){
			printf(" "); 
		}
    }
    printf("\n");
    printf("到达时间:");
    for(int i=0;i<n;i++){
        cout<<P[i].come_time;
        	if(i<n-1){
			printf(" "); 
		}
	}
		
    
    printf("\n");
    printf("服务时间:");
    for(int i=0;i<n;i++){
        cout<<P[i].run_time;
        	if(i<n-1){
			printf(" "); 
		}
	}

    printf("\n");
    printf("完成时间:");
    for(int i=0;i<n;i++){
        cout<<P[i].finish_time; 
        	if(i<n-1){
			printf(" "); 
		}
		}
    
    printf("\n");
    printf("周转时间:");
    for(int i=0;i<n;i++){
        cout<<P[i].circle_time;
        	if(i<n-1){
			printf(" "); 
		}
		}
    
    printf("\n");
    printf("带权周转时间:");
    for(int i=0;i<n;i++){
       printf("%.2f",P[i].weight_circletime);
	    if(i < n-1) {
			printf(" ");
			}
    }
    
}
bool cmp(process p1,process p2){     //将到达的进程按照到达时间进行排序 
	    return p1.come_time<p2.come_time;
}
int main(){
	Input();
	sort(P,P+n,cmp);
	double now_time;
	int finish_count = 0;
	int unfinish_pos = 0;
	while(finish_count<n){ 
		if(now_time<P[unfinish_pos].come_time){
			now_time = P[unfinish_pos].come_time; //对now_time进行更新 
		}
		for(int i = unfinish_pos;(i < n && now_time >= P[i].come_time);i++){// now_time >= P[i].come_time确保是之前已经到了的处于等待中的作业 
			if(P[i].finished == 1) continue ;			
		}
			now_time = now_time + P[unfinish_pos].run_time;//对于先到的作业先运算 
			P[unfinish_pos].finish_time = now_time;
			P[unfinish_pos].circle_time = now_time - P[unfinish_pos].come_time;
			P[unfinish_pos].weight_circletime = P[unfinish_pos].circle_time / P[unfinish_pos].run_time;
			P[unfinish_pos].finished = 1;
		unfinish_pos ++;
		finish_count++;
	}
	Output();
	return 0;
} 

测试结果:

mHandler.obtainMessage(READ_DATA, bytes, -1, buffer).sendToTarget();换成 mHandler.sendMessage()。](https://img-blog.csdnimg.cn/20210327144637963.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTkxMzc4NA==,size_16,color_FFFFFF,t_70)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值