设计一个时间片轮转法调度的算法

设计一个时间片轮转法调度的算法

首先根据进程的到达时间先后进行排序,然后每个进程运行一次,循环往复。

#include<stdio.h>
struct pcb{
	char name[10];
	float arriveTime;
	float startTime;
	float serviceTime;
	float endTime;
	float time;
};

//数据的输入 
void input(int N, pcb *p){
	printf("输入进程名、到达时间和服务时间\n");
	for(int i=0;i<N;i++)
	scanf("%s%f%f",&p[i].name,&p[i].arriveTime,&p[i].serviceTime);
} 

void sortService(int N,pcb *p){
	for(int i=0;i<N-1;i++){
		pcb temp;
		for(int j=i+1;j<N;j++){
			if(p[i].serviceTime>p[j].serviceTime)
			{
				temp=p[i];
				p[i]=p[j];
				p[j]=temp;
			}
		}
	}
	for(int i=0;i<N;i++){
		if(i==0)
		p[i].time=(p[i].serviceTime-1)*N+1;
		else 
		p[i].time=p[i-1].time+(N-i)*(p[i].serviceTime-p[i-1].serviceTime)+1; 
	} 
}

//按照到达时间进行排序 
void sortTime(int N,pcb *p){
	for(int i=0;i<N-1;i++){
		pcb temp;
		for(int j=i+1;j<N;j++){
			if(p[i].arriveTime>p[j].arriveTime)
			{
				temp=p[i];
				p[i]=p[j];
				p[j]=temp;
			}
		}
	} 
}

//计算进程开始时间和结束时间 
void PCB(int N,pcb *p){
	for(int i=0;i<N;i++){
		if(i==0)
		p[i].startTime=0;
		else
		p[i].startTime=p[i-1].startTime+1;
	p[i].endTime=p[i].time;

	}
}

//数据的输出
void print(int N,pcb *p){
	printf("进程名   到达时间    服务时间   开始时间   结束时间\n");
		for(int i=0;i<N;i++)
	printf("%s%12.2f%12.2f%11.2f%11.2f\n",p[i].name,p[i].arriveTime,p[i].serviceTime,p[i].startTime,p[i].endTime);	
} 

//主函数
int main()
{
	pcb p[100];
	int N;
	printf("输入进程个数:\n");
	scanf("%d",&N);
	input(N,p);
	sortService(N,p);
	sortTime(N,p);
	PCB(N,p);
	print(N,p);
 } 

设计一个时间片轮转法调度的算法
先来先服务算法请看:
https://blog.****.net/ScottWei_007/article/details/86528305
优先级调度算法请看:
https://blog.****.net/ScottWei_007/article/details/86528359

谢谢观看。