【编程】多道批处理调度-华为笔试
题目描述:
某多处理器多道批处理系统一次允许将所有作业调入内存,且能并行执行,其并行数等于处理机个数。该系统采用SJF的调度方式(最短作业优先,系统在调度时,总是优先调度执行处理时间最短的作业)。
现给定处理器个数m,作业数n,每个作业的处理时间分别为t1,t2...tn。
当n>m时,首先处理时间短的m个作业进入处理器处理,其他的进入等待,当某个作业处理完成时,依次从等待队列中取处理时间最短的作业进入处理。
求系统处理完所有作业的耗时为多少?
注:不考虑作业切换的消耗。
输入描述:
输入2行,第一行为2个整数(采用空格分隔),分别表示处理器个数m和作业数n;第二行输入n个整数(采用空格分隔),表示每个作业的处理时长t1,t2...tn。
0<m,n<100,0<t1,t2...tn<100。
输出描述:
输出处理总时长
示例1:
输入
3 5
8 4 3 1 10
输出
13
#include<iostream>
using namespace std;//搜索就绪队列中时长最短的作业
int timeMin(int* time,int n){int min=time[0];int k=0; for(int i=0;i<n;i++)if(min>time[i]) {k=i; min=time[i];} time[k]=100;//被处理的作业通过修改时长表示已被处理 return min;
}//搜索就绪队列中时长最长作业
int timeMax(int* time,int n){int max=time[0];for(int i=0;i<n;i++)if(max<time[i]) max=time[i];return max;
}//多cpu多道批处理模拟
int processingTime(int m,int n,int* time){int count=n;if(count==0) return 0;//作业数为0,返回总时间0 //作业数大于cpu数 if(n>m){int flag[m][2]={0};//第一行标志cpu是否被占用,第二行显示作业当前运行所需时间 int resultTime=0;//多道多cpu下完成所有作业所需的处理时间 int end=0;//作业全部处理结束的标志 while(end!=1){//处理时间+1后循环扫描cpu状态 for(int i=0;i<m&&count>0;i++){//仍有等待的作业并且有空闲的cpu,则当前cpu对作业进行处理 if(flag[i][0]==0){flag[i][0]=1;flag[i][1]=timeMin(time,n);//短作业优先 count--;//作业数-1 }}//判断是否所有cpu均空闲 int flagK=0;//标志flagK记录当前空闲的cpu数 for(int i=0;i<m;i++)if(flag[i][1]==0) flagK++; if(flagK==m) {end=1; continue;}//cpu均空闲,结束的标志置1 //对cpu状态数组的处理 for(int i=0;i<m;i++){//若当前作业没有处理完,当前作业还需要的处理时间-1if(flag[i][1]>0) flag[i][1]--;//如果当前cpu空闲,将cpu标志位置0 if(flag[i][1]==0) flag[i][0]=0;}resultTime++;//处理时间增加一个单位 }return resultTime;}//作业数小于或等于cpu数,完成所有作业所需时间为最长作业时间 else return timeMax(time,n);
}int main(){int m;//处理机数int n;//作业数int time[100];//作业队列 cin>>m>>n;for(int i=0;i<n;i++) cin>>time[i];cout<<processingTime(m,n,time);
}
运行结果:
第一次写博客,不足之处请大家多多指正!
【编程】多道批处理调度-华为笔试相关推荐
- java常见笔试编程题_9道常见的java笔试选择题
9道常见的java笔试选择题 1.关于Java编译,下面哪一个正确()(选择一项) A.Java程序经编译后产生machine code B.Java程序经编译后会生产byte code C.Java ...
- Java并发编程71道面试题及答案
Java并发编程71道面试题及答案 1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程和用户线程,通过方 ...
- Java并发编程75道面试题及答案
1.在java中守护线程和本地线程区别?java中的线程分为两种:守护线程(Daemon)和用户线程(User).任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon(bo ...
- 简单批处理与多道批处理
1.2.2简单批处理 第一个操作系统是批处理系统,诞生于20世纪50年代中期 监控程序(早期操作系统):一次处理一批程序(歌单,一次播放一组歌,但一个一个播放) 程序完成处理后返回监控程序,监控程序自 ...
- Seeker的奇妙求职历险(华为笔试)
矩阵报数 题目: 给出一个旋转矩阵,M行N列,左上角为(0,0),右下角为(M-1,N-1),从左上角开始计数,顺时针从外圈开始,外圈遍历完之后再遍历内圈,直到遍历完所有的点. 返回所有个位数为7且十 ...
- 华为 社招 C语言笔试,华为笔试C语言笔试题之3
<华为笔试C语言笔试题之3>由会员分享,可在线阅读,更多相关<华为笔试C语言笔试题之3(10页珍藏版)>请在人人文库网上搜索. 1.C 语言笔试题之34. static 有什么 ...
- 非零基础自学计算机操作系统 第1章 操作系统概述 1.4 操作系统的分类 1.4.1 多道批处理操作系统 1.4.2 分时操作系统
非零基础自学计算机操作系统 文章目录 非零基础自学计算机操作系统 第1章 操作系统概述 1.4 操作系统的分类 1.4.1 多道批处理操作系统 1.4.2 分时操作系统 第1章 操作系统概述 1.4 ...
- 20200422华为笔试
20200422华为笔试 第一题 题目描述 输入描述 输出描述: 输入 输出 思路 代码 第二题 题目描述 输入描述 输出描述: 输入 输出 说明 思路 代码(Python3) 第三题 题目描述 输入 ...
- 读《编程之道》-对于程序员的抽象描述
<编程之道>的第二篇是"古代的大师(The Ancient Masters)",不知道悟道非常深的作者为何在编程大师的前面加上了个"古代"来修饰,我 ...
最新文章
- 吵架记-2020年6月22日16:47:45
- Qt中的TCP客户端编程
- 数学--数论--组合数(卢卡斯+扩展卢卡斯)模板
- CSRF的绕过与利用
- java textfield赋值_Java中怎么把运行结果显示到textfield中
- android 图片方向,Android图片处理:识别图像方向并显示
- html小游戏代码_研发实践:Mozilla分享如何开发一款WebVR小游戏
- Arcgis Android API开发之离线地图
- dubbo 数据传输大小配置
- Jenkins+MSbuild+SVN实现快速搭建.net持续集成环境(构建、编辑、部署到服务器)
- WinEdt 打开***.bib文件时 error reading
- 冒泡排序的C语言实现
- 【TSP问题】基于禁忌搜索算法求解旅行商问题Matlab源码
- 基于LabVIEW 2018开发的自动化测试系统源码,该系统模仿TestStand编写
- 毕业论文 一级标题段前段后问题
- 微信视频压缩画质怎么办?微信发视频怎么不压缩画质
- DevOps 工程师成长日记系列四:打包
- 【FFMPEG】H264码流的两种组织方式:AnnexB和AVCC
- c语言程序灵魂编译后,谭浩强C程序设计第4版精讲视频课程
- 汉英谚语与中西方文化(转贴)
热门文章
- 从浏览器跳转到前端框架的路由实现
- 零基础学SQL(1):初识数据库与SQL
- 史上最全的Jackson框架使用教程
- 解决引用openssl静态库libcrypto.a和libssl.a出现undefined reference to错误的问题
- 常见网络摄像机默认使用的端口,RTSP地址
- HDU 小明系列故事——买年货
- 内网穿透-NPS使用教程(SOCKS5代理)
- 用计算机弹出黑人才关的声音,计算机突然变黑,风扇发出很大的声音?
- 基于C#的AE二次开发之图层右键菜单打开属性表及图层相关操作
- Anderson《空气动力学基础》5th读书笔记 第0记——白金汉PI定理