操作系统进程调度C语言代码
- 格式:docx
- 大小:36.81 KB
- 文档页数:4
操作系统进程调度C语言代码
#include
#define MAX 20
//进程控制块
typedef struct PCB
char name[10]; // 进程名
int AT; // 到达时间
int BT; // 服务时间
int Pri; // 优先数
int FT; // 完成时间
int WT; //等待时间
int RT; // 响应时间
int position; // 第几号进程
int flag; // 用来判断进程是否执行过
}PCB;
//进程调度
void schedule(PCB a[], int n, int alg)
int i, j, k, flag, temp;
int count = 0; int pri_max = 0;
float ATAT = 0.0;
float AWT = 0.0;
float ART = 0.0;
PCBt;
//各种算法的调度
if (alg == 1)
printf("采用先来先服务调度:\n");
//根据到达时间执行
for (i = 0; i < n; i++)
for (j = i + 1; j < n; j++)
if (a[i].AT > a[j].AT)
t=a[i];
a[i]=a[j];
a[j]=t;
}
//按到达时间依次执行
for (i = 0; count != n; i++)
for (j = 0; j < n; j++) //查找第一个到达时间小于等于当前时间的进程
if (a[j].AT <= i && a[j].flag == 0)
//记录运行时间
a[j].BT--;
//如果运行完成,记录完成时间、等待时间、响应时间
if (a[j].BT == 0)
a[j].FT=i+1;
a[j].WT = a[j].FT - a[j].AT - a[j].Pri;
a[j].RT=a[j].WT;
a[j].flag = 1;
count++;
}
else
break;
}
}
}
else if (alg == 2)
printf("采用最短服务时间优先(非抢占)调度:\n"); for (i = 0; count != n; i++)
//找出服务时间最短的进程,并将其放置到最前面
for (j = 0; j < n; j++)