本文主要是介绍操作系统-处理机调度-先来先服务算法(FCFS),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
#include <iostream> #include <string.h> #include <iomanip>struct job {char name[10]; //作业的名字int reachtime; //作业到达系统时间int starttime; //作业开始时间int needtime; //作业服务时间int runtime; //作业周转时间int endtime; //作业结束时间int flag; //作业完成标志char state; //作业状态,一开始都默认为就绪double dqzz_time; //带权周转时间 };/* 排序算法: 按作业到达系统时间进行排序,最早到达的排在最前面*/ void sort(struct job jobs[50],int n) {int i=0,j=0;char t_name[10];int t_time;for(i=0; i<n; i++) { //按作业到达系统时间进行排序,最早到达的排在最前面for(j=i; j<n; j++) { //按作业到达系统时间进行排序,最早到达的排在最前面if(jobs[j].reachtime<jobs[i].reachtime) {//把到达时间早的赋值到t_timet_time=jobs[j].reachtime;jobs[j].reachtime=jobs[i].reachtime;jobs[i].reachtime=t_time;//把到达时间早的赋值到t_timet_time=jobs[j].needtime;jobs[j].needtime=jobs[i].needtime;jobs[i].needtime=t_time;strcpy(t_name,jobs[j].name);strcpy(jobs[j].name,jobs[i].name);strcpy(jobs[i].name,t_name);//在t_name数组中排序}}} }/* 先来先服务算法 */ void fcfs(struct job jobs[50],int n) {int i=0;int nowtime=0;//系统时间for(i=0; i<n; i++) {if(nowtime<jobs[i].reachtime) {jobs[i].starttime=jobs[i].reachtime;} else jobs[i].starttime=nowtime;jobs[i].state='R'; //运行状态:runningjobs[i].endtime=jobs[i].starttime+jobs[i].needtime; //结束时间jobs[i].runtime=jobs[i].endtime-jobs[i].reachtime; //周转时间jobs[i].dqzz_time=double(jobs[i].runtime)/jobs[i].needtime; //带权周转时间nowtime=jobs[i].endtime; //更新当前时间jobs[i].state='F';} }/* 输入作业的开始条件:作业名、到达时间、服务时间 */ void input(struct job jobs[50],int n) {int i;printf("请输入各作业的信息(格式:作业名 到达时间 服务时间):\n");for(i=0; i<n; i++) {scanf("%s",jobs[i].name); //作业名scanf("%d",&jobs[i].reachtime);//到达时间scanf("%d",&jobs[i].needtime);//运行(服务时间)时间}printf("\n"); }/* 输出打印 每项作业的各种信息 */ void print(struct job jobs[50],int n) {int i;double avertime;double dqzz_avertime;int sum_runtime=0;double sum_time=0.00;printf("作业名 到达时间 开始时间 运行时间 完成时间 周转时间 带权周转时间\n");for(i=0; i<n; i++) {printf("%s %2d %2d %2d %2d %2d %.2f\n",jobs[i].name,jobs[i].reachtime,jobs[i].starttime,jobs[i].needtime,jobs[i].endtime,jobs[i].runtime,jobs[i].dqzz_time);sum_runtime=sum_runtime+jobs[i].runtime;sum_time=sum_time+jobs[i].dqzz_time;}avertime=sum_runtime*1.0/n;dqzz_avertime=sum_time*1.000/n;printf("平均周转时间:%.2f \n",avertime);printf("平均带权周转时间:%.3f \n",dqzz_avertime);printf("\n"); }int main() {struct job jobs[50]= {};int n; //n个作业printf("请输入作业个数:");scanf("%d",&n);input(jobs,n);//输入功能:输入作业的初始条件sort(jobs,n); //排序算法:按照作业到达时间排序,先到达的排在前面,由小到大排序fcfs(jobs,n);//先来先服务算法printf("先来先服务(FCFS)调度算法运行结果:\n");print(jobs,n);//输出功能:输出打印作业的各项信息}
这篇关于操作系统-处理机调度-先来先服务算法(FCFS)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!