【编程】多道批处理调度

题目描述:

某多处理器多道批处理系统一次允许将所有作业调入内存,且能并行执行,其并行数等于处理机个数。该系统采用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++){
	        //若当前作业没有处理完,当前作业还需要的处理时间-1
		if(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);
}

运行结果:

 

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

发布了2 篇原创文章 · 获赞 1 · 访问量 56

猜你喜欢

转载自blog.csdn.net/cjw838982809/article/details/105105394
今日推荐