操作系统-处理机调度-先来先服务算法(FCFS)

2024-03-17 09:20

本文主要是介绍操作系统-处理机调度-先来先服务算法(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)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/818533

相关文章

Java中使用Java Mail实现邮件服务功能示例

《Java中使用JavaMail实现邮件服务功能示例》:本文主要介绍Java中使用JavaMail实现邮件服务功能的相关资料,文章还提供了一个发送邮件的示例代码,包括创建参数类、邮件类和执行结... 目录前言一、历史背景二编程、pom依赖三、API说明(一)Session (会话)(二)Message编程客

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个