题目描述:

某多处理器多道批处理系统一次允许将所有作业调入内存,且能并行执行,其并行数等于处理机个数。该系统采用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);
}

运行结果:

第一次写博客,不足之处请大家多多指正!

【编程】多道批处理调度-华为笔试相关推荐

  1. java常见笔试编程题_9道常见的java笔试选择题

    9道常见的java笔试选择题 1.关于Java编译,下面哪一个正确()(选择一项) A.Java程序经编译后产生machine code B.Java程序经编译后会生产byte code C.Java ...

  2. Java并发编程71道面试题及答案

    Java并发编程71道面试题及答案 1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程和用户线程,通过方 ...

  3. Java并发编程75道面试题及答案

    1.在java中守护线程和本地线程区别?java中的线程分为两种:守护线程(Daemon)和用户线程(User).任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon(bo ...

  4. 简单批处理与多道批处理

    1.2.2简单批处理 第一个操作系统是批处理系统,诞生于20世纪50年代中期 监控程序(早期操作系统):一次处理一批程序(歌单,一次播放一组歌,但一个一个播放) 程序完成处理后返回监控程序,监控程序自 ...

  5. Seeker的奇妙求职历险(华为笔试)

    矩阵报数 题目: 给出一个旋转矩阵,M行N列,左上角为(0,0),右下角为(M-1,N-1),从左上角开始计数,顺时针从外圈开始,外圈遍历完之后再遍历内圈,直到遍历完所有的点. 返回所有个位数为7且十 ...

  6. 华为 社招 C语言笔试,华为笔试C语言笔试题之3

    <华为笔试C语言笔试题之3>由会员分享,可在线阅读,更多相关<华为笔试C语言笔试题之3(10页珍藏版)>请在人人文库网上搜索. 1.C 语言笔试题之34. static 有什么 ...

  7. 非零基础自学计算机操作系统 第1章 操作系统概述 1.4 操作系统的分类 1.4.1 多道批处理操作系统 1.4.2 分时操作系统

    非零基础自学计算机操作系统 文章目录 非零基础自学计算机操作系统 第1章 操作系统概述 1.4 操作系统的分类 1.4.1 多道批处理操作系统 1.4.2 分时操作系统 第1章 操作系统概述 1.4 ...

  8. 20200422华为笔试

    20200422华为笔试 第一题 题目描述 输入描述 输出描述: 输入 输出 思路 代码 第二题 题目描述 输入描述 输出描述: 输入 输出 说明 思路 代码(Python3) 第三题 题目描述 输入 ...

  9. 读《编程之道》-对于程序员的抽象描述

    <编程之道>的第二篇是"古代的大师(The Ancient Masters)",不知道悟道非常深的作者为何在编程大师的前面加上了个"古代"来修饰,我 ...

最新文章

  1. 吵架记-2020年6月22日16:47:45
  2. Qt中的TCP客户端编程
  3. 数学--数论--组合数(卢卡斯+扩展卢卡斯)模板
  4. CSRF的绕过与利用
  5. java textfield赋值_Java中怎么把运行结果显示到textfield中
  6. android 图片方向,Android图片处理:识别图像方向并显示
  7. html小游戏代码_研发实践:Mozilla分享如何开发一款WebVR小游戏
  8. Arcgis Android API开发之离线地图
  9. dubbo 数据传输大小配置
  10. Jenkins+MSbuild+SVN实现快速搭建.net持续集成环境(构建、编辑、部署到服务器)
  11. WinEdt 打开***.bib文件时 error reading
  12. 冒泡排序的C语言实现
  13. 【TSP问题】基于禁忌搜索算法求解旅行商问题Matlab源码
  14. 基于LabVIEW 2018开发的自动化测试系统源码,该系统模仿TestStand编写
  15. 毕业论文 一级标题段前段后问题
  16. 微信视频压缩画质怎么办?微信发视频怎么不压缩画质
  17. DevOps 工程师成长日记系列四:打包
  18. 【FFMPEG】H264码流的两种组织方式:AnnexB和AVCC
  19. c语言程序灵魂编译后,谭浩强C程序设计第4版精讲视频课程
  20. 汉英谚语与中西方文化(转贴)

热门文章

  1. 从浏览器跳转到前端框架的路由实现
  2. 零基础学SQL(1):初识数据库与SQL
  3. 史上最全的Jackson框架使用教程
  4. 解决引用openssl静态库libcrypto.a和libssl.a出现undefined reference to错误的问题
  5. 常见网络摄像机默认使用的端口,RTSP地址
  6. HDU 小明系列故事——买年货
  7. 内网穿透-NPS使用教程(SOCKS5代理)
  8. 用计算机弹出黑人才关的声音,计算机突然变黑,风扇发出很大的声音?
  9. 基于C#的AE二次开发之图层右键菜单打开属性表及图层相关操作
  10. Anderson《空气动力学基础》5th读书笔记 第0记——白金汉PI定理