纯c语言写短作业优先和高响应比优先这两个作业调度算法

主要参考链接:

代码绝大多数都是从网上拷下来再自己改了一点。本来想附上参考链接,但时间有点久,找不到主要参考的那个连接。

[声明]本文为转载是因为代码大多数都是网上copy的,然后自己也只是微调加实现过,个人认为不可以当原创。代码全部都贴上来了,txt文档的格式也贴了,也实现过,如果期间遇到困难,希望你们再去找其他的资料,问我的话我未必能答上来。

 

操作系统系列文章:

1.进程调度算法FCFS和RR

2.作业调度算法SJF和HRRN

3.动态分区分配算法的FirstFit和BestFit

4.银行家算法

 

 主要的数据结构

//定义一个结构体
struct jcb{
char name[10]; //作业名
float arrivetime; //到达时间
float servicetime;//服务时间
float starttime; //开始时间
float finishtime;//完成时间
float rtime;//周转时间
float drtime;//带权周转
float Rp;//响应比 
}*b;

static int N;//作业个数 

//定义一个结构体数组
jcb a[100];

用到的函数

void input(jcb *a);//向文档读入数据的函数
void display(jcb *a);//显示输入的数据 
void Print(jcb *a,int N);//定义一个输出函数
void sort(jcb *a,int N);//按到达时间排序
void deal(jcb *a,int N);//运行阶段
void hrrn(jcb *a,int N);
void sjff(jcb *a,int N);

核心算法

短作业优先

void sjff(jcb *p,int N)
{
	display(p);
	float arrivetime=0,servicetime=0,starttime=0,finishtime=0,rtime=0,drtime=0;


	sort(p,N);//调用sort函数

		
    for(int m=0;m=p[m].arrivetime )
			{
				p[m].starttime=p[m-1].finishtime;
			}
			else
			{
				p[m].starttime =p[m].arrivetime;
			}
			p[m].finishtime=p[m].starttime+p[m].servicetime;
		}
		
		int i=0;
        for(int n=m+1;n

高响应比

void hrrn(jcb *p,int N)
{
	display(p);
    float arrivetime=0,servicetime=0,starttime=0,finishtime=0,rtime=0,drtime=0,Rp=0;
    int num=1;
    
    sort(p,N);
    
    for(int m=0;m=p[m].arrivetime )
			{
				p[m].starttime=p[m-1].finishtime;
			}
			else
			{
				p[m].starttime =p[m].arrivetime;
			}
			p[m].finishtime=p[m].starttime+p[m].servicetime;
		}
		
		int i=0;
		for(int n=m+1;nmax)
          {
          	max=p[k+1].Rp;
          	next=k+1;
		  }
            
		}
            jcb temp;
            temp=p[m+1];
            p[m+1]=p[next];
            p[next]=temp;
	}
	deal(p,N);
   
    Print(p,N);
} 

纯c语言写短作业优先和高响应比优先这两个作业调度算法_第1张图片高响应比代码中检测代码的用途:为了更直观的看到运行步骤

//运行阶段
void deal(jcb *p,int N)
{ 
	int k;
    for(k=0;k=p[k].arrivetime)
			 {
				 p[k].starttime=p[k-1].finishtime;}
			 else
			 {
			 p[k].starttime =p[k].arrivetime;}
			 p[k].finishtime=p[k].starttime+p[k].servicetime;
		 }
	}

     for(k=0;k
//按到达时间排序
void sort(jcb *p,int N)
{
	for(int i=0;i

主函数

int main()
{ 
   int aa;
   printf("作业调度算法:1.SJF 2.HRRN 3.quit\n");
   scanf("%d",&aa);
   
   while(aa!=3){
	
	switch(aa){
		case 1:
	    input(a);
        b=a;
        sjff(a,N);//调用sjff函数

		break; 
		
		case 2:
		
	    input(a);
        b=a;
        hrrn(a,N);
		break; 
        
        default:
        	break;
	}

	printf("作业调度算法:1.SJF 2.HRRN 3.quit\n");
	scanf("%d",&aa);
}
    printf("end.\n");

   return 0;
}                        

测试数据的输入

纯c语言写短作业优先和高响应比优先这两个作业调度算法_第2张图片

源代码

#include 
#include  
#include
//定义一个结构体
struct jcb{
char name[10]; //作业名
float arrivetime; //到达时间
float servicetime;//服务时间
float starttime; //开始时间
float finishtime;//完成时间
float rtime;//周转时间
float drtime;//带权周转
float Rp;//响应比 
}*b;

static int N;//作业个数 

//定义一个结构体数组
jcb a[100];

void input(jcb *a);//向文档读入数据的函数
void display(jcb *a);//显示输入的数据 
void Print(jcb *a,int N);//定义一个输出函数
void sort(jcb *a,int N);//按到达时间排序
void deal(jcb *a,int N);//运行阶段
void hrrn(jcb *a,int N);
void sjff(jcb *a,int N);

//向文档读入数据的函数
void input(jcb *a)
{ 
	int i;
	
	FILE *fp;
	fp=fopen("作业调度算法输入数据.txt","r");
	if(fp==NULL){
		exit(EXIT_FAILURE);
	}
	fscanf(fp,"%d",&N);
	for(i=0;i%s",p[k].name);
	} 
   	printf("\n-----------结果------------\n");
	printf("\n====================================================================================\n");
	printf("进程名   到达时间  服务时间  开始时间  完成时间   周转时间   带权周转时间\n");
   
    for(k=0;k<=N-1;k++)
	{ 
		printf("%4s  %8.2f  %9.2f  %7.2f  %9.2f  %9.2f %12.2f\n",p[k].name,p[k].arrivetime,p[k].servicetime,p[k].starttime,p[k].finishtime,p[k].rtime,p[k].drtime);
	}
   
}
//按到达时间排序
void sort(jcb *p,int N)
{
	for(int i=0;i=p[k].arrivetime)
			 {
				 p[k].starttime=p[k-1].finishtime;}
			 else
			 {
			 p[k].starttime =p[k].arrivetime;}
			 p[k].finishtime=p[k].starttime+p[k].servicetime;
		 }
	}

     for(k=0;k=p[m].arrivetime )
			{
				p[m].starttime=p[m-1].finishtime;
			}
			else
			{
				p[m].starttime =p[m].arrivetime;
			}
			p[m].finishtime=p[m].starttime+p[m].servicetime;
		}
		
		int i=0;
		for(int n=m+1;nmax)
          {
          	max=p[k+1].Rp;
          	next=k+1;
		  }
            
		}
            jcb temp;
            temp=p[m+1];
            p[m+1]=p[next];
            p[next]=temp;
	}
	deal(p,N);
   
    Print(p,N);
} 


//短作业优先调度算法

void sjff(jcb *p,int N)
{
	display(p);
	float arrivetime=0,servicetime=0,starttime=0,finishtime=0,rtime=0,drtime=0;


	sort(p,N);//调用sort函数

		
    for(int m=0;m=p[m].arrivetime )
			{
				p[m].starttime=p[m-1].finishtime;
			}
			else
			{
				p[m].starttime =p[m].arrivetime;
			}
			p[m].finishtime=p[m].starttime+p[m].servicetime;
		}
		
		int i=0;
        for(int n=m+1;n

 实验截图

短作业优先实验结果

纯c语言写短作业优先和高响应比优先这两个作业调度算法_第3张图片

高响应比实验结果

纯c语言写短作业优先和高响应比优先这两个作业调度算法_第4张图片

 

你可能感兴趣的:(os)