头歌 处理机调度(编程题)

第1关:先来先服务调度算法

任务描述
本关任务:编写一个先来先服务器调度算法解决一个实际的进程调度问题,并打印出每个进程的完成时间、周转时间和带权周转时间

相关知识
为了完成本关任务,你需要掌握:1.先来先服务调度算法,2.进程周转时间和平均周转时间的计算方法。

先来先服务调度算法FCFS
FCFS是最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,系统将按照作业到达的先后次序来进行调度,或者说它是优先考虑在系统中等待时间最长的作业,

周转时间和带权周转时间
周转时间=完成时间-到达时间
带权周转时间=周转时间/执行时间

编程要求
给定一组进程的到达时间和服务时间,实现先来先服务调度算法,并打印出调度结果,包括每个进程的完成时间、周转时间和带权周转时间。
       进程         到达时间    服务时间
          A           0            3
          B           2            6
          C           4            4
          D           6            5
          E           8            2

测试说明
平台会负责输入和输出,只需要实现FCFS函数即可。先来先服务算法的调度结果包括进程的完成时间、周转时间和带权周转时间需要填写在pcb数据结构中。

主函数运行流程如下:
    input(pcb);//输入进程基本信息
    FCFS(pcb);//调用先来先服务调度算法
    printf("先来先服务FCFS:\n"); //打印调度结果
    output(pcb);
    printf("\n");

开始你的任务吧,祝你成功!

#include <stdio.h>
#include <string.h>#define N 5typedef struct JCB
{char name[10];int arriveTime;  //到达时间 int serveTime;   //服务时间 int finishTime;  //完成时间 int aroundTime;  //周转时间 float waroundTime; //带权周转时间 
}PCB;void input(PCB pcb[N])
{strcpy(pcb[0].name,"A");pcb[0].arriveTime = 0;pcb[0].serveTime = 3;strcpy(pcb[1].name,"B");pcb[1].arriveTime = 2;pcb[1].serveTime = 6;strcpy(pcb[2].name,"C");pcb[2].arriveTime = 4;pcb[2].serveTime = 4;strcpy(pcb[3].name,"D");pcb[3].arriveTime = 6;pcb[3].serveTime = 5;strcpy(pcb[4].name,"E");pcb[4].arriveTime = 8;pcb[4].serveTime = 2;int i = 0;for(; i < N; ++i){pcb[i].finishTime = 0;pcb[i].aroundTime = 0;pcb[i].waroundTime = 0;}}void output(PCB pcb[N])
{int i = 0;printf("进程\t");printf("完成时间\t");printf("周转时间\t");printf("带权周转时间\t\n");for(; i < N; ++i){printf("%s\t",pcb[i].name);printf("%d\t\t",pcb[i].finishTime);printf("%d\t\t",pcb[i].aroundTime);printf("%f\t\t\n",pcb[i].waroundTime);}
}//先来先服务调度算法 
void FCFS(PCB pcb[N])
{//请补充先来先服务算法的实现代码double time = pcb[0].arriveTime;for( int i = 0 ; i < N ; i ++ ){time += pcb[i].serveTime;pcb[i].finishTime = time;pcb[i].aroundTime = pcb[i].finishTime - pcb[i].arriveTime;double a = pcb[i].aroundTime , b = pcb[i].serveTime;pcb[i].waroundTime = a / b ;}
}int main()
{PCB pcb[N];input(pcb);FCFS(pcb);printf("先来先服务FCFS:\n"); output(pcb);printf("\n");}

第2关:短作业优先调度算法

任务描述
本关任务:编写一个先来先服务器调度算法解决一个实际的进程调度问题,并打印出每个进程的完成时间、周转时间和带权周转时间

相关知识
为了完成本关任务,你需要掌握:1.短作业优先调度算法,2.进程周转时间和平均周转时间的计算方法。

短作业优先调度算法SJF
SJF算法是以作业的长短来计算优先级,作业越短,其优先级越高。作业的长短是以作业所要求的运行时间来衡量的。SJF算法可以分别用于作业调度和进程调度,处理机优先选择运行时间短的作业或者进程。

周转时间和带权周转时间
周转时间=完成时间-到达时间
带权周转时间=周转时间/执行时间

编程要求
给定一组进程的到达时间和服务时间,实现短作业优先调度算法,并打印出调度结果,包括每个进程的完成时间、周转时间和带权周转时间。
       进程         到达时间    服务时间
          A           0            3
          B           2            6
          C           4            4
          D           6            5
          E           8            2

测试说明
平台会负责输入和输出,只需要实现SJF函数即可。短作业优先调度算法的调度结果包括进程的完成时间、周转时间和带权周转时间,需要填写在pcb数据结构中。

主函数运行流程如下:
    input(pcb);//输入进程基本信息
    SJF(pcb);//调用短作业优先调度算法
    printf("短作业优先SJF:\n"); //打印调度结果
    output(pcb);
    printf("\n");

开始你的任务吧,祝你成功!

#include <stdio.h>
#include <string.h>#define N 5typedef struct JCB
{char name[10];int arriveTime;  //到达时间 int serveTime;   //服务时间 int finishTime;  //完成时间 int aroundTime;  //周转时间 float waroundTime; //带权周转时间 
}PCB;void input(PCB pcb[N])
{strcpy(pcb[0].name,"A");pcb[0].arriveTime = 0;pcb[0].serveTime = 3;strcpy(pcb[1].name,"B");pcb[1].arriveTime = 2;pcb[1].serveTime = 6;strcpy(pcb[2].name,"C");pcb[2].arriveTime = 4;pcb[2].serveTime = 4;strcpy(pcb[3].name,"D");pcb[3].arriveTime = 6;pcb[3].serveTime = 5;strcpy(pcb[4].name,"E");pcb[4].arriveTime = 8;pcb[4].serveTime = 2;int i = 0;for(; i < N; ++i){pcb[i].finishTime = 0;pcb[i].aroundTime = 0;pcb[i].waroundTime = 0;}}void output(PCB pcb[N])
{int i = 0;printf("进程\t");printf("完成时间\t");printf("周转时间\t");printf("带权周转时间\t\n");for(; i < N; ++i){printf("%s\t",pcb[i].name);printf("%d\t\t",pcb[i].finishTime);printf("%d\t\t",pcb[i].aroundTime);printf("%f\t\t\n",pcb[i].waroundTime);}
}//短作业优先调度算法 
void SJF(PCB pcb[N])
{for(int i=2;i<N;i++)for(int j=i;j<N;j++){while(pcb[i].serveTime>pcb[j].serveTime){PCB a=pcb[i];pcb[i]=pcb[j];pcb[j]=a;} }double time=pcb[0].arriveTime;for(int i=0;i<N;i++){time=time+pcb[i].serveTime;pcb[i].finishTime=time;pcb[i].aroundTime=pcb[i].finishTime-pcb[i].arriveTime;double a=pcb[i].aroundTime,b=pcb[i].serveTime;pcb[i].waroundTime=a/b;}
for(int i=2;i<N;i++)for(int j=i;j<N;j++){while(pcb[i].arriveTime>pcb[j].arriveTime){PCB a=pcb[i];pcb[i]=pcb[j];pcb[j]=a;} }
}int main()
{PCB pcb[N];input(pcb);SJF(pcb);printf("短作业优先SJF:\n"); output(pcb);printf("\n");}

第3关:高响应比优先调度算法

任务描述
本关任务:编写一个高响应比优先调度算法解决一个实际的进程调度问题,并打印出每个进程的完成时间、周转时间和带权周转时间

相关知识
为了完成本关任务,你需要掌握:1.先来先服务调度算法,2.进程周转时间和平均周转时间的计算方法。3、响应比的计算方法

高响应比优先调度算法HRRN
在批处理系统中,FCFS算法所考虑的只是作业的等待时间,而忽视了作业的运行时间。而SJF算法正好与之相反,只考虑作业的运行时间,而忽视了作业的等待时间。高响应比优先调度算法则是既考虑了作业的等待时间,又考虑作业运行时间的调度算法,因此既照顾了短作业,又不致使长作业的等待时间过长,从而改善了处理机调度的性能。
高响应比优先算法引入了响应比的概念,响应比定义如下
响应比=(等待时间+运行时间)/运行时间
高响应比优先算法每次选择响应比最高的进程,进程的响应比是动态变化的,既考虑了进程的等待时间,也考虑了进程的服务时间。

周转时间和带权周转时间
周转时间=完成时间-到达时间
带权周转时间=周转时间/执行时间

编程要求
给定一组进程的到达时间和服务时间,实现高响应比优先调度算法,并打印出调度结果,包括每个进程的完成时间、周转时间和带权周转时间。
       进程         到达时间    服务时间
          A           0            3
          B           2            6
          C           4            4
          D           6            5
          E           8            2

测试说明
平台会负责输入和输出,只需要实现HRRN函数即可。高响应比优先调度算法的调度结果包括进程的完成时间、周转时间和带权周转时间需要填写在pcb数据结构中。

主函数运行流程如下:
    input(pcb);//输入进程基本信息
    HRRN(pcb);//调用高响应比优先调度算法
    printf("高响应比优先HRRN:\n"); //打印调度结果
    output(pcb);
    printf("\n");

开始你的任务吧,祝你成功!

#include <stdio.h>
#include <string.h>#define N 5typedef struct JCB
{char name[10];int arriveTime;  //到达时间 int serveTime;   //服务时间 int finishTime;  //完成时间 int aroundTime;  //周转时间 float waroundTime; //带权周转时间 
}PCB;void input(PCB pcb[N])
{strcpy(pcb[0].name,"A");pcb[0].arriveTime = 0;pcb[0].serveTime = 3;strcpy(pcb[1].name,"B");pcb[1].arriveTime = 2;pcb[1].serveTime = 6;strcpy(pcb[2].name,"C");pcb[2].arriveTime = 4;pcb[2].serveTime = 4;strcpy(pcb[3].name,"D");pcb[3].arriveTime = 6;pcb[3].serveTime = 5;strcpy(pcb[4].name,"E");pcb[4].arriveTime = 8;pcb[4].serveTime = 2;int i = 0;for(; i < N; ++i){pcb[i].finishTime = 0;pcb[i].aroundTime = 0;pcb[i].waroundTime = 0;}}void output(PCB pcb[N])
{int i = 0;printf("进程\t");printf("完成时间\t");printf("周转时间\t");printf("带权周转时间\t\n");for(; i < N; ++i){printf("%s\t",pcb[i].name);printf("%d\t\t",pcb[i].finishTime);printf("%d\t\t",pcb[i].aroundTime);printf("%f\t\t\n",pcb[i].waroundTime);}
}//高响应比优先调度算法 
void HRRN(PCB pcb[N])
{for(int i=3;i<N;i++)for(int j=i;j<N;j++){while(pcb[i].serveTime>pcb[j].serveTime){PCB a=pcb[i];pcb[i]=pcb[j];pcb[j]=a;} }double time=pcb[0].arriveTime;for(int i=0;i<N;i++){time=time+pcb[i].serveTime;pcb[i].finishTime=time;pcb[i].aroundTime=pcb[i].finishTime-pcb[i].arriveTime;double a=pcb[i].aroundTime,b=pcb[i].serveTime;pcb[i].waroundTime=a/b;}
for(int i=2;i<N;i++)for(int j=i;j<N;j++){while(pcb[i].arriveTime>pcb[j].arriveTime){PCB a=pcb[i];pcb[i]=pcb[j];pcb[j]=a;} }
}int main()
{PCB pcb[N];input(pcb);HRRN(pcb);printf("高响应比优先HRRN:\n"); output(pcb);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/482667.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA连接Apifox客户端

IDEA连接Apifox客户端 一、下载Apifox安装包二、IDEA配置三、配置Apifox和IDEA项目同步 一、下载Apifox安装包 Apifox官网&#xff0c;根据自己的操作系统下载对应的Apifox安装包&#xff0c;我是windows系统所以下载的是windows版。 下载 默认仅为我安装&#xff0c;点击下一…

Vue3 脚手架扩展

当 yarn dev 运行成功后&#xff0c;我们继续添加扩展 首先我们要安装一些依赖 其中的vue-router和vuex安装最新版的就行&#xff0c;因为项目是vue3 element-plus和less&#xff0c;less-loader最好按照我这个版本来下载 element-plus是一个vue常用的ui组件库 element-plus/…

STM32 ADC模数转换器原理及单通道多通道测量电压模板代码

ADC简介&#xff1a; &#xff08;主要用来测电压&#xff09; 1us转换时间&#xff08;最大支持1MHZ的信号转换&#xff09; 12位&#xff08;0~4095&#xff09;就是分辨率 通过ADC0809外挂芯片来理解STM32中的ADC&#xff1a; 地址锁存和译码是用来选择通路的&#xff0c;…

Android矩阵Matrix实现Glide图像fitCenter转换为centerCrop,Kotlin

Android矩阵Matrix实现Glide图像fitCenter转换为centerCrop&#xff0c;Kotlin <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.a…

电子电气架构 -- 新的架构带来的软件革命

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所谓鸡汤&#xff0c;要么蛊惑你认命&#xff0c;要么怂恿你拼命&#xff0c;但都是回避问题的根源&…

后端 Java发送邮件 JavaMail 模版 20241128测试可用

配置授权码 依赖 <dependency><groupId>javax.mail</groupId><artifactId>javax.mail-api</artifactId><version>1.5.5</version> </dependency> <dependency><groupId>com.sun.mail</groupId><artifa…

【零基础学习UDS诊断测试】——0x10测试用例设计

从0开始学习CANoe使用 从0开始学习车载测试 相信时间的力量 星光不负赶路者,时光不负有心人。 目录 1.概述 2.三个会话介绍 3.会话切换逻辑 4.会话响应格式 5.解析测试点 5.1. 0x10 5.1.1 具体用例设计 5.1.1.1 NRC否定响应码 6.详细用例展示 1.概述 主要基于诊断调查表介…

【Robocasa】Code Review

文章目录 OverviewalgoInitializationImportant Class MethodsTrain LoopTest Time ConfigsdemoConfig FactoryConfig StructureConfig Locking默认锁定状态配置修改的上下文管理器 dataset示例数据集对象参数说明 model基础模块EncoderCoreVisualCoreScanCore随机化器 (Random…

阅读笔记--知识蒸馏

1.一些基本概念 教师模型&#xff08;Teacher Model&#xff09;&#xff1a;预训练复杂神经网络&#xff0c;高精度&#xff0c;计算存储开销大。学生模型&#xff08;Student Model&#xff09;&#xff1a;简单参数少推理快的模型&#xff0c;目标从教师模型获取知识&#…

【Maven Helper】分析依赖冲突案例

目录 Maven Helper实际案例java文件pom.xml文件运行抛出异常分析 参考资料 《咏鹅》骆宾王 鹅&#xff0c;鹅&#xff0c;鹅&#xff0c;曲项向天歌。 白毛浮绿水&#xff0c;红掌拨清波。 骆宾王是在自己7岁的时候就写下了这首杂言 Maven Helper A must have plugin for wor…

一些基于宏基因组的巨型病毒研究

Introduction 上次已经介绍了巨型病毒的一些基本内容&#xff0c;也讲到了不依赖培养的方法是从环境样本中发现巨型病毒基因组成的不可或缺的工具。可以通过基因组解析宏基因组学来从环境序列数据中获取 NCLDV 基因组并进行深入研究如功能基因&#xff0c;宿主&#xff0c;进化…

李宏毅深度强化学习入门笔记:Actor-Critic

李宏毅-深度强化学习-入门笔记&#xff1a;Actor-Critic 一、深度强化学习简介二、Policy-based 方法&#xff08;一&#xff09;学习一个 Actor&#xff08;二&#xff09;Deep Learning 的 3 个步骤1. 确定 Function&#xff1a;作为 Actor 的神经网络2. 确定 Actor 的好坏3.…

基于Java Springboot成人教育APP且微信小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 微信…

知乎启用AutoMQ替换Kafka,开辟成本优化与运维提效新纪元

作者&#xff1a;知乎在线架构组 王金龙 关于知乎 知乎公司&#xff0c;成立于 2010 年 8 月 10 日&#xff0c;于 2011 年 1 月 26 日正式上线&#xff0c;是中文互联网的高质量问答社区和创作者聚集的原创内容平台。 知乎起步于问答&#xff0c;而超越了问答。知乎以「生…

mysql数据库varchar截断问题

用了这么多年mysql数据库&#xff0c;才发现varchar是可以截断的&#xff0c;而且是在我们线上数据库。个人觉得dba的这个设置是非常有问题的&#xff0c;用户往数据库里存东西&#xff0c;就是为了以后用的&#xff0c;截断了存放&#xff0c;数据不完整&#xff0c;就用不了了…

SeggisV1.0 遥感影像分割软件【源代码】讲解

在此基础上进行二次开发&#xff0c;开发自己的软件&#xff0c;例如&#xff1a;【1】无人机及个人私有影像识别【2】离线使用【3】变化监测模型集成【4】个人私有分割模型集成等等&#xff0c;不管是您用来个人学习还是公司研发需求&#xff0c;都相当合适&#xff0c;包您满…

MySQL底层概述—9.ACID与事务

大纲 1.ACID之原子性 2.ACID之持久性 3.ACID之隔离性 4.ACID之一致性 5.ACID的关系 6.事务控制演进之排队 7.事务控制演进之排它锁 8.事务控制演进之读写锁 9.事务控制演进之MVCC 10.事务隔离级别之隔离级别的类型 11.事务隔离级别之和锁的关系 12.事务隔离级别之隔…

基于 SpringBoot 的新冠密接者跟踪系统:如何实现高效信息推送功能

第2章 程序开发技术 2.1 Mysql数据库 为了更容易理解Mysql数据库&#xff0c;接下来就对其具备的主要特征进行描述。 &#xff08;1&#xff09;首选Mysql数据库也是为了节省开发资金&#xff0c;因为网络上对Mysql的源码都已进行了公开展示&#xff0c;开发者根据程序开发需要…

手撸了一个文件传输工具

在日常的开发与运维中&#xff0c;文件传输工具是不可或缺的利器。无论是跨服务器传递配置文件&#xff0c;还是快速从一台机器下载日志文件&#xff0c;一个高效、可靠且简单的文件传输工具能够显著提高工作效率。今天&#xff0c;我想分享我自己手撸一个文件传输工具的全过程…

基于Java Springboot电子书阅读器APP且微信小程序

一、作品包含 源码数据库全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 微信开发者工具 数…