设计一个时间片轮转法调度的算法
设计一个时间片轮转法调度的算法
首先根据进程的到达时间先后进行排序,然后每个进程运行一次,循环往复。
#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
谢谢观看。