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

题目描述:

某多处理器多道批处理系统一次允许将所有作业调入内存,且能并行执行,其并行数等于处理机个数。该系统采用SJF的调度方式(最短作业优先,系统在调度时,总是优先调度执行处理时间最短的作业)。

现给定处理器个数m,作业数n,每个作业的处理时间分别为t1,t2...tn。

当n>m时,首先处理时间短的m个作业进入处理器处理,其他的进入等待,当某个作业处理完成时,依次从等待队列中取处理时间最短的作业进入处理。

求系统处理完所有作业的耗时为多少?

注:不考虑作业切换的消耗。

输入描述:

输入2行,第一行为2个整数(采用空格分隔),分别表示处理器个数m和作业数n;第二行输入n个整数(采用空格分隔),表示每个作业的处理时长t1,t2...tn。

0

输出描述:

输出处理总时长

示例1:

输入

3  5

8  4  3  1  10

输出

13

 

#include
using namespace std;

//搜索就绪队列中时长最短的作业 
int timeMin(int* time,int n){
    int min=time[0];
    int k=0; 
    for(int i=0;itime[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;im){
        int flag[m][2]={0};//第一行标志cpu是否被占用,第二行显示作业当前运行所需时间 
        int resultTime=0;//多道多cpu下完成所有作业所需的处理时间 
        int end=0;//作业全部处理结束的标志 
	while(end!=1){
	    //处理时间+1后循环扫描cpu状态 
	    for(int i=0;i0;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;i0) 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>time[i];
	cout<

运行结果:

 【编程】多道批处理调度-华为笔试_第1张图片

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

 

 

 

你可能感兴趣的:(c++)