操作系统-处理机调度-先来先服务算法(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

相关文章

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

springboot的调度服务与异步服务使用详解

《springboot的调度服务与异步服务使用详解》本文主要介绍了Java的ScheduledExecutorService接口和SpringBoot中如何使用调度线程池,包括核心参数、创建方式、自定... 目录1.调度服务1.1.JDK之ScheduledExecutorService1.2.spring

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

TP-Link PDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务

《TP-LinkPDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务》近期,路由器制造巨头普联(TP-Link)在用户群体中引发了一系列重要变动,上个月,公司发出了一则通知,明确要求所... 路由器厂商普联(TP-Link)上个月发布公告要求所有用户必须完成实名认证后才能继续使用普联提供的 D

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最

微服务架构之使用RabbitMQ进行异步处理方式

《微服务架构之使用RabbitMQ进行异步处理方式》本文介绍了RabbitMQ的基本概念、异步调用处理逻辑、RabbitMQ的基本使用方法以及在SpringBoot项目中使用RabbitMQ解决高并发... 目录一.什么是RabbitMQ?二.异步调用处理逻辑:三.RabbitMQ的基本使用1.安装2.架构

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