【操作系统】短作业优先调度算法

  • 内容
  • 相关

 

#include"stdio.h"
#define N 20

int ct;//当前时间
struct process {
	int no;//定义一个作业号
	int arrtime;//到达时间
	int runtime;//运行时间
	int startime;//开始时间
	int endtime;//结束时间
	int roundtime;//周转时间
	int flag;//标志位 初始值为0,运行时间为1,2,3

};


int bubblesort(process a[],int n) { //对到达时间进行从小到大排序
	int i,k;
	process t;
	for(i=0; i<n-1; i++)
		for(k=0; k<n-1-i; k++) {
			if(a[k].arrtime>a[k+1].arrtime) { //当本次到达时间大于下一个的到达时间,则调换顺序(升序排序)
				t=a[k];
				a[k]=a[k+1];
				a[k+1]=t;

			}
		}
	ct=a[0].arrtime;//当前时间为到达时间

}



int bubblesort2(process a[],int n) { //执行顺序进行从小到大排序
	int i,k;
	process t;
	for(i=0; i<n-1; i++)
		for(k=0; k<n-1-i; k++) {
			if(a[k].flag>a[k+1].flag) { //当前标志位大于下一个的标志位,则调换位置
				t=a[k];
				a[k]=a[k+1];
				a[k+1]=t;
			}

		}
	ct=a[0].arrtime;


}

int finds(process a[],int n) { //查找要调度作业的下标值
	int k=0;//记录要调度作业的下标,赋值给K
	int rt=65535;
	for(int i=0;i<n;i++)
		if(a[i].flag==0&&a[i].arrtime<=ct&&a[i].runtime<rt) { //标志位 等于0并且到达时间小于或等于第一个作业到达时间并且运行时间小于 65535
			rt=a[i].runtime;
			k=i;
		}
	if(ct<a[k].arrtime)
		ct=a[k].arrtime;
	return k;

}





int sjf(process a[],int n) { //短作业优先调度算法的实现
	int k;
	bubblesort(a,n);//进行一次排序
	for(int i=1; i<=n; i++) 
	{
		k=finds(a,n);
		a[k].flag=i;
		a[k].startime=ct;//开始时间等于当前时间
		a[k].endtime=ct+a[k].runtime;//结束时间等于当前时间加运行时间
		a[k].roundtime=a[k].endtime-a[k].arrtime;//周转时间等于结束时间减去到达时间
		ct=a[k].endtime;
		if(ct<a[i].arrtime)//如果当前作业结束,下一个作业还未到达,则时间更新为下一个作业的到达时间
			ct=a[i].arrtime;

	}


}
int printarray(process a[],int n) {
	int i;
	printf("作业号\t到达时间\t执行时间\t开始时间\t结束时间\t周转时间\n");
	for(i=0; i<n; i++) {
		printf("%d\t    %d\t\t    %d\t\t    %d\t\t    %d\t\t    %d\n",a[i].no,a[i].arrtime,a[i].runtime,a[i].startime,a[i].endtime,a[i].roundtime);

	}


}


int main() {
	process a[N]= {0};
	int n;//实际进程个数
	printf("请输入作业的总数量:");
	scanf("%d",&n);
	for(int i=0; i<n; i++) {
		printf("请输入第%d个作业的作业号,到达时间以及运行时间:",i+1);
		scanf("%d%d%d",&a[i].no,&a[i].arrtime,&a[i].runtime);
	}
	sjf(a,n);
	bubblesort2(a,n);
	printarray(a,n);

}

 

20210418113814.png

本文标签:

版权声明:若无特殊注明,本文皆为《G4br1el》原创,转载请保留文章出处。

本文链接:【操作系统】短作业优先调度算法 - https://www.itznxh.com/post-51.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

未显示?请点击刷新