进程调度算法实现

#include<stdio.h>
#define N 4
struct PBC{
	int job_name;  //作业
	int sub_time;  //提交时间
	int run_time;  //运行时间
	int start_time; //开始时间
	int completion_time;  //完成时间
	int turnover_time; //周转时间
	double Right_turnover_time; //带权周转时间
	int priority;  //优先数
	int state; //进程状态
};
PBC p[N];
void input()//输入进程信息 并且初始化 开始时间 完成时间 周转时间 带权周转时间
{
	int i;
    for(i=0;i<N;i++){  //循环输入所有进程信息
		printf("\n进程名:");
		scanf("%d",& p[i].job_name);
		printf("\n输入提交时刻:");
		scanf("%d",& p[i].sub_time);
		printf("\n输入运行时间:");
		scanf("%d",& p[i].run_time);
		}
	for(i=0;i<N;i++)  //初始化 start_time,completion_time,turnover_time,Right_turnover_time
	{
	     p[i].start_time=0;
		 p[i].completion_time=0;
		 p[i].turnover_time=0;
		 p[i].Right_turnover_time=0.0;
	}
}
void input1()//输入进程信息 并且初始化 开始时间 完成时间 周转时间 带权周转时间
{
	int i;
    for(i=0;i<N;i++){  //循环输入所有进程信息
		printf("\n进程名:");
		scanf("%d",& p[i].job_name);
		printf("\n输入提交时刻:");
		scanf("%d",& p[i].sub_time);
		printf("\n输入运行时间:");
		scanf("%d",& p[i].run_time);
		if(i>0)
		{
			printf("输入优先级:");
			scanf("%d",&p[i].priority);
		}
		}
	for(i=0;i<N;i++)  //初始化 start_time,completion_time,turnover_time,Right_turnover_time
	{
	     p[i].start_time=0;
		 p[i].completion_time=0;
		 p[i].turnover_time=0;
		 p[i].Right_turnover_time=0.0;
	}
}
void P() 
{   
	 int k;
    printf("运行顺序:");//执行顺序
    printf("%d",p[0].job_name);
    for(k=1;k<N;k++)
	{
		printf("-->%d",p[k].job_name);
	} 
	printf("\n");
	  int i;
	  printf("进程名  提交时间  运行时间  开始时间  完成时间  周转时间  带权周转时间\n");
	  for(i=0;i<N;i++)
	  printf("%d        %d          %d          %d           %d           %d          %lf\n",p[i].job_name,p[i].sub_time,p[i].run_time,p[i].start_time,p[i].completion_time,p[i].turnover_time,p[i].Right_turnover_time);
}

void Short_job_priority()
{
		
    for(int m=0;m<N;m++)
	{
		if(m==0)
		{
		p[m].start_time=p[m].sub_time;
        p[m].completion_time=p[m].sub_time+p[m].run_time;
		}
        else 
		{
			if(p[m-1].completion_time>=p[m].sub_time )
			{
				p[m].start_time=p[m-1].completion_time;}
			else
			{
				p[m].start_time =p[m].sub_time;}
			  	p[m].completion_time=p[m].start_time+p[m].run_time;
		}
		int i=0;
        for(int n=m+1;n<=N-1;n++)
		{
			if(p[n].sub_time<=p[m].completion_time)
            i++;
		}


  
		 //按服务时间排序
        int min=p[m+1].run_time;
        int next=m+1;//m+1=n
        for(int k=m+1;k<m+i;k++)
		{
          if(p[k+1].run_time<min)
          {
			  min=p[k+1].run_time;
              next=k+1;
		  }
            
		}
            PBC temp;
            temp=p[m+1];
            p[m+1]=p[next];
            p[next]=temp;
	}
        
    for(int k=0;k<N;k++)
     {
     p[k].turnover_time=p[k].completion_time-p[k].sub_time;//周转时间=完成时间-到达时间
     p[k].Right_turnover_time=p[k].turnover_time*1.0/p[k].run_time;//带权周转时间=周转时间/服务时间
     
     }
   
   P();
}

void Priority()
{
		
    for(int m=0;m<N;m++)
	{
		if(m==0)
		{
		p[m].start_time=p[m].sub_time;
        p[m].completion_time=p[m].sub_time+p[m].run_time;
		}
        else 
		{
			if(p[m-1].completion_time>=p[m].sub_time )
			{
				p[m].start_time=p[m-1].completion_time;}
			else
			{
				p[m].start_time =p[m].sub_time;}
			  	p[m].completion_time=p[m].start_time+p[m].run_time;
		}
		int i=0;
        for(int n=m+1;n<=N-1;n++)
		{
			if(p[n].sub_time<=p[m].completion_time)
            i++;
		}


  
		 //按优先级排序
        int min=p[m+1].priority;
        int next=m+1;//m+1=n
        for(int k=m+1;k<m+i;k++)
		{
          if(p[k+1].priority<min)
          {
			  min=p[k+1].priority;
              next=k+1;
		  }
            
		}
            PBC temp;
            temp=p[m+1];
            p[m+1]=p[next];
            p[next]=temp;
	}
        
    for(int k=0;k<N;k++)
     {
     p[k].turnover_time=p[k].completion_time-p[k].sub_time;//周转时间=完成时间-到达时间
     p[k].Right_turnover_time=p[k].turnover_time*1.0/p[k].run_time;//带权周转时间=周转时间/服务时间
     
     }
   
   P();
}
      
	
void main()
{
   int x; //选择算法
   printf("********************************\n");
   printf("*         进程调度算法         *\n");
   printf("********************************\n");
   printf("请选择你所需要的进程调度算法:\n");
   printf("1.短作业优先调度算法  2.最高优先级调度算法 3.退出程序 \n");
   printf("请输入你的选择:(1 2 3)");
   scanf("%d",&x);
   
   switch(x){
        case 1:{
			 input();
			Short_job_priority();
		        
 		}
		case 2:{
			input1();
			Priority();
			break;
		
		}
		default:break;
		
   }
   getchar();
   
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值