Cinco tipos de algoritmos de programación de procesos

Algoritmo de programación del proceso del sistema operativo

Se incluyen los cinco métodos.
Mi prioridad de trabajo corto se basa en el tiempo y el método de comparación de trabajo corto para juzgar la ejecución.

# include <stdio.h>
# include <stdlib.h> 
# include <string.h>
# include<iostream>
# include<queue>
# include<list>
#include <Windows.h>
using namespace std;
struct input{
	int num;
	char name;
    double daoda;
    double service;  
    
}input[ ]={
    { 0, 'A', 0, 3 },
    { 1, 'B', 2, 6 },
    { 2, 'C', 4, 4 },
    { 3, 'D', 6, 5 },
    { 4, 'E', 8, 2 }
}; 
struct FCFS{
	char name;
	double wancheng;
    double changetime;//平均周转时间
	double powertime;//带权周转时间 
}FCFS[6];
struct SJF{
	char name;
	double wancheng;
    double changetime;//平均周转时间
	double powertime;//带权周转时间 
}SJF[6];
struct GXY{
	char name;
	double wancheng;
    double changetime;//平均周转时间
	double powertime;//带权周转时间 
	double zanshi;//存放暂时的优先权 
}GXY[6];
struct RR{
	char name;
	double wancheng;
    double changetime;//平均周转时间
	double powertime;//带权周转时间 
	double ser;//存放任务经历的时间 
}RR[6];
struct MFQ{
	char name;
	double wancheng;
    double changetime;//平均周转时间
	double powertime;//带权周转时间 
	double ser;
}MFQ[7];
//list<node>ListQ;   //链表队列
char jincheng[6]={'A','B','C','D','E'};//进程名 
int  daoda[6]={0,2,4,6,8};//到达时间 
int service[6]={3,6,4,5,2};//服务时间 
int time[7];//到达时间排序之后的表 
int duan[7];//按照作业长短排序 
double FCFSchangetime=0;
double FCFSpowertime=0; 
double SJFchangetime=0;
double SJFpowertime=0;
double GXYchangetime=0;
double GXYpowertime=0;
double RRchangetime=0;
double RRpowertime=0;
double MFQchangetime=0;
double MFQpowertime=0;


void  shurujincheng();//1输入作业模拟情况; 
void perform();//显示作业情况
void xianlaixianfuwu();//先来先服务 
void performFCFS();//先来先服务算法输出时间 
void paixutime();//按照到达时间排序 
void duanzuoye();//短作业优先
void paixuwork();//按照作业服务时间排序 
void performSJF();//输出短作业优先 
void gaoxingying();//高响应比 
void performGXY();//输出高响应比 
void timeswitch();//时间片轮转
void performRR() ;//输出时间片轮转 
void duojiMFQ();//多级反馈队列 
void performMFQ();//输出多级反馈队列 
int main()
{
	int n = 1;
	while( n!=0 )
	{
		printf("**************************\n") ;
		printf("进程调度模拟程序:\n");
		printf("1: 输入作业模拟情况\n");
		printf("2: 显示作业情况\n");
		printf("3: 先来先服务\n");
		printf("4: 短作业优先算法\n");
		printf("5: 高响应比优先算法\n");
		printf("6: 时间片轮转算法\n");
		printf("7: 多级反馈队列\n");
		printf("8: 算法结果比较\n");
		printf("0: 退出\n");
		printf("请输入选择:\n");
		printf("*****************************\n");
		//printf("%d\n",n);
		scanf("%d",&n);	
		switch(n)
		{
		    case 1:
		    	   printf("\n*****************************\n");
		    	    shurujincheng();
		    	    perform();
		    	    printf("\n*****************************\n");
		    	break;
		    case 2:
		    	    printf("\n*****************************\n");
		    	    perform();
		    	    printf("\n*****************************\n");
		    	break;
		    case 3:
		    	   printf("\n*****************************\n");
		    	   xianlaixianfuwu();
		    	   perform();
		    	   performFCFS();
		    	   printf("\n*****************************\n");
		    	break;
		    case 4:
		    	   printf("\n*****************************\n");
		    	   //duanzuoye();
		    	   duanzuoye(); 
		    	   perform();
		    	   performSJF();
		    	   printf("\n*****************************\n");
		    	break;
		    case 5:
		    	   printf("\n*****************************\n");
		    	   gaoxingying(); 
		    	   perform();
		    	   performGXY();
		    	   printf("\n*****************************\n");
		    	break;
		    case 6:
		    	   printf("\n*****************************\n");
		    	   timeswitch(); 
		    	   perform();
		    	   performRR();
		    	   printf("\n*****************************\n");
		    	break;
		    case 7:
		    	   printf("\n*****************************\n");
		    	   duojiMFQ();
		    	   perform();
		    	   performMFQ();
		    	   printf("\n*****************************\n");
		    	break;
		    case 8:
		    	   printf("\n*****************************\n");
		    	   perform();
		    	   printf("\n*****************************\n");
		    	   performFCFS();
		    	   printf("\n*****************************\n");
				   performSJF();
				   printf("\n*****************************\n");
		    	   performGXY();
		    	   printf("\n*****************************\n");
		    	   performRR();
		    	   printf("\n*****************************\n");
		    	   performMFQ();
		    	   printf("\n*****************************\n");
		    	break;
		    case 0: 
		           printf("\n*****************************\n");
		           n=0;
		           
		           printf("\n*****************************\n");
		    	break;
		    default :
			    printf("\n输入错误。请重新输入:\n");
			    continue;
						
		}	
	 } 
}


void  shurujincheng()
{
	int n;
	printf("输入5个作业:\n");
	printf("\n输入进程信息(进程名,到达时间,服务时间):\n");
	for(int i=0;i<5;i++)
	{
		getchar();
		printf("进程 %d :",i);
		input[i].name=getchar();
		printf("%c\n",input[i].name);
		printf("到达时间:");
		scanf("%lf",&input[i].daoda);
		printf("服务时间:");
		scanf("%lf",&input[i].service);	
		input[i].num=i;
	}	
	return ;
} 

void perform()
{
   printf("进程名      :");
   for(int i=0;i<5;i++)
   {
   	    printf("%8c",input[i].name);
   }
   printf("\n");
   printf("到达时间    :");
   for(int i=0;i<5;i++)
   {
   	    printf("%8.2lf",input[i].daoda);
   }
   printf("\n");
   printf("服务时间    :");
   for(int i=0;i<5;i++)
   {
   	    printf("%8.2lf",input[i].service);
   }
   printf("\n");
	
	
	
	return ;
}

void xianlaixianfuwu()//先来先服务 
{
	
	int daoda=0;//到达时间 
	int ser=0;//服务时间 
	daoda=input[time[0]].daoda+daoda; 
	paixutime();
	for(int i=0 ; i<5 ; i++)
	{
		
		if(daoda >= input[time[i]].daoda)//到达时间总是小于服务时间 
		{
			FCFS[time[i]].name=input[time[i]].name;
			FCFS[time[i]].wancheng=input[time[i]].service+daoda;
			FCFS[time[i]].changetime=FCFS[time[i]].wancheng-input[time[i]].daoda;
			FCFS[time[i]].powertime=FCFS[time[i]].changetime/input[time[i]].service;	
			daoda=daoda+input[time[i]].service;
		}
		else
		{
			daoda=input[time[i]].daoda;
			FCFS[time[i]].name=input[time[i]].name;
			FCFS[time[i]].wancheng=input[time[i]].service+daoda;
			FCFS[time[i]].changetime=FCFS[time[i]].wancheng-input[time[i]].daoda;
			FCFS[time[i]].powertime=FCFS[time[i]].changetime/input[time[i]].service;	
			daoda=daoda+input[time[i]].service;
		}
	    
	} 
	return ;
}

void performFCFS()
{ 
   double sumchange=0;
   double sumpower=0;
   //printf("\n");
   printf("完成时间    :");
   for(int i=0;i<5;i++)
   {
   	    printf("%8.2lf",FCFS[i].wancheng);
   }
   printf("\n");
   printf("周转时间    :");
   for(int i=0;i<5;i++)
   {
   	    printf("%8.2lf",FCFS[i].changetime);
   	    sumchange+=FCFS[i].changetime; 
   }
    printf("\n");
   printf("带全周转时间:");
   for(int i=0;i<5;i++)
   {
   	    printf("%8.2lf",FCFS[i].powertime);
   	    sumpower+=FCFS[i].powertime;
   }
   printf("\n");
   FCFSchangetime=sumchange/5;
   FCFSpowertime=sumpower/5;
   printf("平均周转时间\t\t带权周转时间\t\t\n");
   printf("%8.2lf\t\t%8.2lf\t\t\n",FCFSchangetime,FCFSpowertime);
   return ;
}

void duanzuoye()//短作业优先 
{
	paixutime();
	paixuwork();
    int daoda=0;//到达时间 
    //int ser=0;
    int i=0,j=0; 
    int flag[7];
    memset(flag,0,sizeof(flag)); 
    if(input[time[i]].name!=input[duan[j]].name)
	{
		daoda+=input[time[i]].daoda;
		SJF[time[i]].wancheng=daoda+input[time[i]].service;
		daoda+=input[time[i]].service;
		flag[time[i]]=1;
		SJF[time[i]].changetime=SJF[time[i]].wancheng-input[time[i]].daoda;
		SJF[time[i]].powertime=SJF[time[i]].changetime/input[time[i]].service;
	}
	printf("%d\n ",daoda);
    for(int k=1;k<5;k++)
	{
	    j=0;
	    i=0;
	    while(flag[time[i]]==1)
		{
			i++;
		}//保证每次比较的都是没有执行过的 
		while(flag[duan[j]]==1)
		{
			j++;
		}//保证每次比较的都是没有执行过的 
		//printf("%c %c\n",input[time[i]].name,input[duan[j]].name);
		if(daoda<input[time[i]].daoda && daoda<input[duan[j]].daoda)//保证2个都还没到达 
		{    
		    //printf("1%c  %c\n",input[time[i]].name,input[duan[j]].name);
			if(flag[time[i]]==0)
			{
				if(input[time[i]].daoda < input[duan[i]].daoda)
				{
					daoda=daoda+input[time[i]].daoda;
		            SJF[time[i]].wancheng=daoda+input[time[i]].service;
			        daoda+=input[time[i]].service;
			        flag[time[i]]=1;
					SJF[time[i]].changetime=SJF[time[i]].wancheng-input[time[i]].daoda;
					SJF[time[i]].powertime=SJF[time[i]].changetime/input[time[i]].service;
				}
				else
				{
					daoda+=input[duan[j]].daoda;
		    		SJF[duan[j]].wancheng=daoda+input[duan[j]].service;
					daoda+=input[duan[j]].service;
					flag[duan[j]]=1;
					SJF[duan[j]].changetime=SJF[duan[j]].wancheng-input[duan[j]].daoda;
					SJF[duan[j]].powertime=SJF[duan[j]].changetime/input[duan[j]].service;
				}
			}
			
			printf("%d \n ",daoda);
		}
		else if(input[time[i]].name==input[duan[j]].name && daoda>input[time[i]].name)//两个都到达了 
		{
		//	printf("2%c  %c\n",input[time[i]].name,input[duan[j]].name);
			if(input[time[i]].service < input[duan[j]].service)
			{
				//daoda=input[time[i]].daoda;
				//printf("%d",daoda);
		        SJF[time[i]].wancheng=daoda+input[time[i]].service;
			    daoda+=input[time[i]].service;
			    flag[time[i]]=1;
				SJF[time[i]].changetime=SJF[time[i]].wancheng-input[time[i]].daoda;
				SJF[time[i]].powertime=SJF[time[i]].changetime/input[time[i]].service;
				
			}
			else
			{
				   //daoda=input[duan[j]].daoda;
				   //printf("%d\n ",daoda);
		    		SJF[duan[j]].wancheng=daoda+input[duan[j]].service;
					daoda+=input[duan[j]].service;
					flag[duan[j]]=1;
					SJF[duan[j]].changetime=SJF[duan[j]].wancheng-input[duan[j]].daoda;
					SJF[duan[j]].powertime=SJF[duan[j]].changetime/input[duan[j]].service;
			}
		}
		else if(input[time[i]].daoda <daoda && input[duan[j]].daoda>daoda)//两个都到达了,此时比较的是 
		{
			//printf("3%c  %c\n",input[time[i]].name,input[duan[j]].name);
			//if(input[time[i]].service < input[duan[j]].service )
		    {
		    	//daoda=input[time[i]].daoda;
		    	//printf("%d\n",daoda);
		    	//printf("%c\n",input[time[i]].name);
		        SJF[time[i]].wancheng=daoda+input[time[i]].service;
			    daoda+=input[time[i]].service;
			    flag[time[i]]=1;
				SJF[time[i]].changetime=SJF[time[i]].wancheng-input[time[i]].daoda;
				SJF[time[i]].powertime=SJF[time[i]].changetime/input[time[i]].service;
			}
		 
		}
		else if(input[time[i]].daoda >daoda && input[duan[j]].daoda< daoda)
		{
					//printf("%d\n",daoda);
				    //printf("%c\n",input[duan[j]].name);
		    		SJF[duan[j]].wancheng=daoda+input[duan[j]].service;
					daoda+=input[duan[j]].service;
					flag[duan[j]]=1;
					SJF[duan[j]].changetime=SJF[duan[j]].wancheng-input[duan[j]].daoda;
					SJF[duan[j]].powertime=SJF[duan[j]].changetime/input[duan[j]].service;
		}
		else
		{
			//printf("3%c  %c\n",input[time[i]].name,input[duan[j]].name);
			if(input[time[i]].service < input[duan[j]].service )
		    {
		    	//daoda=input[time[i]].daoda;
		    	//printf("%d\n",daoda);
		    	//printf("%c\n",input[time[i]].name);
		        SJF[time[i]].wancheng=daoda+input[time[i]].service;
			    daoda+=input[time[i]].service;
			    flag[time[i]]=1;
				SJF[time[i]].changetime=SJF[time[i]].wancheng-input[time[i]].daoda;
				SJF[time[i]].powertime=SJF[time[i]].changetime/input[time[i]].service;
			}
			else
			{
				    //daoda=input[duan[j]].daoda;
				    //printf("%d\n",daoda);
				    //printf("%c\n",input[duan[j]].name);
		    		SJF[duan[j]].wancheng=daoda+input[duan[j]].service;
					daoda+=input[duan[j]].service;
					flag[duan[j]]=1;
					SJF[duan[j]].changetime=SJF[duan[j]].wancheng-input[duan[j]].daoda;
					SJF[duan[j]].powertime=SJF[duan[j]].changetime/input[duan[j]].service;
			}
		}	
	 } 
	
	
	return ;
}

void performSJF()
{ 
   double sumchange=0;
   double sumpower=0;
   //printf("\n");
   printf("完成时间    :");
   for(int i=0;i<5;i++)
   {
   	    printf("%8.2lf",SJF[i].wancheng);
   }
   printf("\n");
   printf("周转时间    :");
   for(int i=0;i<5;i++)
   {
   	    printf("%8.2lf",SJF[i].changetime);
   	    sumchange+=SJF[i].changetime; 
   }
    printf("\n");
   printf("带全周转时间:");
   for(int i=0;i<5;i++)
   {
   	    printf("%8.2lf",SJF[i].powertime);
   	    sumpower+=SJF[i].powertime;
   }
   printf("\n");
   SJFchangetime=sumchange/5;
   SJFpowertime=sumpower/5;
   printf("平均周转时间\t\t带权周转时间\t\t\n");
   printf("%8.2lf\t\t%8.2lf\t\t\n",SJFchangetime,SJFpowertime);
   return ;
}
void gaoxingying()
{
	paixutime();
	int flag[7];
	int num[7];
	int daoda=0;
    memset(flag,0,sizeof(flag)); 
	daoda+=input[time[0]].daoda;
	GXY[time[0]].wancheng=daoda+input[time[0]].service;
	daoda+=input[time[0]].service;
	flag[time[0]]=1;
	GXY[time[0]].changetime=GXY[time[0]].wancheng-input[time[0]].daoda;
	GXY[time[0]].powertime=GXY[time[0]].changetime/input[time[0]].service;
	int zanshi[7];
	memset(zanshi,0,sizeof(zanshi)); 
	int maxnum=0;
	int max=0;
	for(int i=1;i<5;i++)
	{
		if(daoda < input[time[i]].daoda)//还没到 
		{
			printf("%c ",input[time[i]].name);
			daoda=input[time[i]].daoda; 
			GXY[time[i]].wancheng=daoda+input[time[i]].service;
	        daoda+=input[time[i]].service;
	        flag[time[i]]=1;
	        GXY[time[i]].changetime=GXY[time[i]].wancheng-input[time[i]].daoda;
	        GXY[time[i]].powertime=GXY[time[i]].changetime/input[time[i]].service;
		}
		else//已经到了 
		{
			for(int j=1;j<5;j++)//找到已经到了的 ,算出优先权存放起来 
			{
				if(time[j]<daoda)
				{
					if(flag[time[j]]==0)
					{
						printf("%c ",input[time[j]].name);
			             //printf("%d \n",daoda);
						//GXY[time[j]].wancheng=;
	                    //daoda+=input[time[j]].service;
	                    zanshi[time[j]]=1;
	                    GXY[time[j]].zanshi=(daoda+input[time[j]].service-input[time[j]].daoda)/input[time[j]].service+1;
	                    //GXY[time[j]].changetime=GXY[time[j]].wancheng-input[time[j]].daoda;
	                    //GXY[time[j]].powertime=GXY[time[j]].changetime/input[time[j]].service;
					}
				}
			}
			for(int j=1;j<5;j++)
			{
				if(zanshi[time[j]]==1)
				{
					if(max<GXY[time[j]].zanshi)
					{
						max=GXY[time[j]].zanshi;
						maxnum=time[j];
					}
				}
			}
			memset(zanshi,0,sizeof(zanshi)); 
			//daoda=input[time[i]].daoda; 
			printf("%c ",input[maxnum].name);
			printf("%d \n",daoda);
			GXY[maxnum].wancheng=daoda+input[maxnum].service;
	        daoda+=input[maxnum].service;
	        flag[maxnum]=1;
	        GXY[maxnum].changetime=GXY[maxnum].wancheng-input[maxnum].daoda;
	        GXY[maxnum].powertime=GXY[maxnum].changetime/input[maxnum].service; 
			maxnum=0;
			max=0;
		}	
	}
	return ;
}
void performGXY()
{ 
   double sumchange=0;
   double sumpower=0;
   //printf("\n");
   printf("完成时间    :");
   for(int i=0;i<5;i++)
   {
   	    printf("%8.2lf",GXY[i].wancheng);
   }
   printf("\n");
   printf("周转时间    :");
   for(int i=0;i<5;i++)
   {
   	    printf("%8.2lf",GXY[i].changetime);
   	    sumchange+=GXY[i].changetime; 
   }
    printf("\n");
   printf("带全周转时间:");
   for(int i=0;i<5;i++)
   {
   	    printf("%8.2lf",GXY[i].powertime);
   	    sumpower+=GXY[i].powertime;
   }
   printf("\n");
   GXYchangetime=sumchange/5;
   GXYpowertime=sumpower/5;
   printf("平均周转时间\t\t带权周转时间\t\t\n");
   printf("%8.2lf\t\t%8.2lf\t\t\n",GXYchangetime,GXYpowertime);
   return ;
}
void timeswitch()//时间片轮转 
{
   queue<int>q;
   int daoda=0; 
   int num;
   int zanshi=0;//存放没用完的时间片; 
   int z=0;
   int flag[7];
    memset(flag,0,sizeof(flag)); 
   printf("输入时间片长度:\n");
   scanf("%d",&num); 
   //printf("%d",num);
   paixutime();
   q.push(time[0]);
   flag[0]=1;
   for(int i=0;i<5;i++)
	 {
	 	RR[i].changetime=0;
	 	RR[i].wancheng=0;
	 	RR[i].ser=0;
	 	RR[i].powertime=0;
	 	
	 }
    while(!q.empty())
   {
	   //printf("q.size:%d \n",q.size());
   	   //printf("daoda:%d  zanshi:%d\n",daoda,zanshi); 
	   daoda+=num;
	   for(int i=1;i<5;i++)
	    {
	  		if(daoda>=input[time[i]].daoda &&flag[time[i]]==0)
	  		{
	  			q.push(input[time[i]].num);
	  			flag[time[i]]=1;
	  			//printf("进入队列:%c \n",input[time[i]].name);	
			}						 				 	
	   	}
			if((RR[q.front()].ser+num) >= input[q.front()].service)//任务可以执行完 
			{
				zanshi=num-(input[q.front()].service-RR[q.front()].ser);
				//printf("   任务完成:%c 到达时间:%d  剩余时间片:%d\n",input[q.front()].name,daoda,zanshi); 
				daoda=daoda-zanshi;
				RR[q.front()].ser=input[q.front()].service;	
				RR[q.front()].wancheng=daoda;
				
				RR[q.front()].changetime=RR[q.front()].wancheng-input[q.front()].daoda;
				RR[q.front()].powertime=RR[q.front()].changetime/input[q.front()].service;
				q.pop();
				
			}
			else //任务执行不完 
			{
			        RR[q.front()].ser+=num;
				    //printf("运行名字:%c 服务:%.2lf ",input[q.front()].name,RR[q.front()].ser);
				    
				    //printf("   任务未完成:%c 到达:%d  \n",input[q.front()].name,daoda);
					
				    z=q.front();
				    q.push(z);
				    //printf("进入队列 %c \n",input[q.back()].name);
				    q.pop();
				    zanshi=0;
			}	    
    }
  
} 

void performRR()
{
	double sumchange=0;
   double sumpower=0;
   //printf("\n");
   printf("完成时间    :");
   for(int i=0;i<5;i++)
   {
   	    printf("%8.2lf",RR[i].wancheng);
   }
   printf("\n");
   printf("周转时间    :");
   for(int i=0;i<5;i++)
   {
   	    printf("%8.2lf",RR[i].changetime);
   	    sumchange+=RR[i].changetime; 
   }
    printf("\n");
   printf("带全周转时间:");
   for(int i=0;i<5;i++)
   {
   	    printf("%8.2lf",RR[i].powertime);
   	    sumpower+=RR[i].powertime;
   }
   printf("\n");
   RRchangetime=sumchange/5;
   RRpowertime=sumpower/5;
   printf("平均周转时间\t\t带权周转时间\t\t\n");
   printf("%8.2lf\t\t%8.2lf\t\t\n",RRchangetime,RRpowertime);
   return ;
	
}


void duojiMFQ()//多级反馈队列 
{
    int daoda=0; 
     int num=0;
     int zanshi=0;//存放没用完的时间片; 
     int z=0;
     int flag[7],wan[7];//wan标记完成与否,flag标记进去没 
     memset(flag,0,sizeof(flag));
      memset(flag,0,sizeof(wan));
      paixutime();
     //q.push(time[0]);
     flag[0]=1;
     printf("申请队列数:\n");
     int n;
     scanf("%d",&n);
     queue<int>q[n];
	 q[0].push(time[0]);
	 int index=0;
	 for(int i=0;i<5;i++)
	 {
	 	MFQ[i].changetime=0;
	 	MFQ[i].wancheng=0;
	 	MFQ[i].ser=0;
	 	MFQ[i].powertime=0;
	 	
	 }
	 while(1)
	 {
	 	   for(int i=0;i<5;i++)//退出条件:所有的都执行了 
		    {
				if(wan[i]==1)
				{
					if(i==4)
					{
						printf("%d\n",i);
						return ;
					}
				}
				else
				{
					break;
				}
			}
			num=index+1;
			daoda+=num;//到达时间加运行时间
	 	    printf("daoda时间:%d 运行时间: %d\n",daoda,index+1);
			 for(int i=1;i<5;i++)//加入 
            {
            	if(daoda >= input[time[i]].daoda &&flag[time[i]]==0)
            	{
            		q[0].push(time[i]);
					flag[time[i]]=1;
					printf("进入队列的是 %c\n",input[time[i]].name); 
				}	
			} 
			if((MFQ[q[index].front()].ser+num) >= input[q[index].front()].service)//任务可以执行完 
			{
				zanshi=num-(input[q[index].front()].service-MFQ[q[index].front()].ser);
				printf("   任务完成:%c 到达时间:%d  \n",input[q[index].front()].name,daoda); 
				daoda=daoda-zanshi;
				MFQ[q[index].front()].ser=input[q[index].front()].service;	
				MFQ[q[index].front()].wancheng=daoda;
				
				MFQ[q[index].front()].changetime=MFQ[q[index].front()].wancheng-input[q[index].front()].daoda;
				MFQ[q[index].front()].powertime=MFQ[q[index].front()].changetime/input[q[index].front()].service;
				printf("完成时间:%d \n",MFQ[q[index].front()].wancheng); 
				wan[time[q[index].front()]]=1;
				q[index].pop();
			
			}
			else //任务执行不完 
			{
			        MFQ[q[index].front()].ser+=num;
				    printf("运行名字:%c 服务:%.2lf ",input[q[index].front()].name,MFQ[q[index].front()].ser);
				    
				    printf("   任务未完成:%c 到达:%d  \n",input[q[index].front()].name,daoda);
					
				    z=q[index].front();
				    if(index<(n-1))
				    {
				    	q[index+1].push(z);
				    	printf("%d %d \n",n-1,index+1);
					}
				      
				    else
				    {
				    	q[index].push(z);
					}
				    //printf("进入队列 %c 此时需转换队列 %d \n",input[q[index+1].back()].name,index+1);
				    q[index].pop();
				    zanshi=0;
			}
				for(int j=0; j<n;j++)
					{
						if(q[j].size()!=0)
						{
							index=j;
							break;
						}
						/*if(q[index].size()!=0)
						{
							break;
						}*/
					}
			
				    
	 }
     
	 return ;
}

void performMFQ()//输出多级反馈队列 
{
   double sumchange=0;
   double sumpower=0;
   //printf("\n");
   printf("完成时间    :");
   for(int i=0;i<5;i++)
   {
   	    printf("%8.2lf",MFQ[i].wancheng);
   }
   printf("\n");
   printf("周转时间    :");
   for(int i=0;i<5;i++)
   {
   	    printf("%8.2lf",MFQ[i].changetime);
   	    sumchange+=MFQ[i].changetime; 
   }
    printf("\n");
   printf("带全周转时间:");
   for(int i=0;i<5;i++)
   {
   	    printf("%8.2lf",MFQ[i].powertime);
   	    sumpower+=MFQ[i].powertime;
   }
   printf("\n");
   MFQchangetime=sumchange/5;
   MFQpowertime=sumpower/5;
   printf("平均周转时间\t\t带权周转时间\t\t\n");
   printf("%8.2lf\t\t%8.2lf\t\t\n",MFQchangetime,MFQpowertime);
   return ;

	
}

void paixutime()
{
	int zanshi1[6];
	int zanshi2[6];
	int num;
	for(int i=0;i<5;i++)
	{
		zanshi1[i]=input[i].daoda;
		zanshi2[i]=input[i].num;
	}
	for(int i=0;i<5;i++)
	{	
		for(int j=i+1;j<5;j++)
		{		
			if(zanshi1[i]>zanshi1[j])
			{
				num=zanshi2[i];
				zanshi2[i]=zanshi2[j];
				zanshi2[j]=num;
				
				num=zanshi1[i];
				zanshi1[i]=zanshi1[j];
				zanshi1[j]=num;				
			}
		 } 
	} 
	for(int i=0;i<5;i++)
	{
		time[i]=zanshi2[i];
		printf("%d ",time[i]);
	}//排序,按照到达时间长短
	printf("\n");
}

void paixuwork()
{
	int zanshi1[6];
	int zanshi2[6];
	int num;
	for(int i=0;i<5;i++)
	{
		zanshi1[i]=input[i].service;
		zanshi2[i]=input[i].num;
	}
	for(int i=0;i<5;i++)
	{	
		for(int j=i+1;j<5;j++)
		{		
			if(zanshi1[i]>zanshi1[j])
			{
				num=zanshi2[i];
				zanshi2[i]=zanshi2[j];
				zanshi2[j]=num;
				
				num=zanshi1[i];
				zanshi1[i]=zanshi1[j];
				zanshi1[j]=num;				
			}
		 } 
	} 
	for(int i=0;i<5;i++)
	{
		duan[i]=zanshi2[i];
		printf("%d ",duan[i]);
	}//排序,按照到达时间长短
	printf("\n");
	
	return ;
 } 

Resultados de operación La
entrada experimental necesita realizar los pasos 3, 4, 5, 6 y 7 antes de poder ejecutar 2, y muestra todas las condiciones de operación

Condición de datos de entrada Condición de datos de
Datos de entrada
Pantalla de entrada, conectar a la imagenentrada
Ejecución por orden de llegadaejecución por orden de llegada Realizar trabajos cortos primeroejecución prioridad de trabajo breve

Realizar alta prioridad de relación de respuestaLa ejecución de una relación de respuesta alta tiene prioridad. La
parte azul es la prueba en el proceso que se puede eliminar más adelante.

Tiempo de rotación de la porciónTiempo de rotación
Inserte la descripción de la imagen aquíde la cola de retroalimentación de varios niveles, el proceso puede cerrar sesión

Inserte la descripción de la imagen aquí
Cola de retroalimentación multinivel Salida de resultados finales de Inserte la descripción de la imagen aquítodo el proceso Salida de resultados finales de todo el proceso

4 artículos originales publicados · Me gusta0 · Visitas 510

Supongo que te gusta

Origin blog.csdn.net/weixin_43902812/article/details/105484304
Recomendado
Clasificación