用c语言实现最短作业优先算法的作业调度
时间: 2023-09-23 12:11:15 浏览: 109
os短作业优先调度算法c语言.doc
最短作业优先算法(Shortest Job First,简称为SJF)是一种基于作业长度的调度算法,它的核心思想是优先调度执行时间最短的作业,以最大化系统资源的利用率和作业的平均周转时间。
以下是用C语言实现SJF算法的代码:
```c
#include<stdio.h>
struct process {
int pid; // 进程ID
int bt; // 进程执行时间
int at; // 进程到达时间
};
// 按到达时间对进程进行排序
void sortByArrival(struct process proc[], int n) {
struct process temp;
int i, j;
for(i = 0; i < n-1; i++) {
for(j = i+1; j < n; j++) {
if(proc[i].at > proc[j].at) {
temp = proc[i];
proc[i] = proc[j];
proc[j] = temp;
}
}
}
}
// 执行SJF算法
void sjf(struct process proc[], int n) {
int wt[n], tat[n], ct[n];
int i, j, t, sum = 0;
float avgwt = 0, avgtat = 0;
sortByArrival(proc, n);
// 计算完成时间
for(i = 0; i < n; i++) {
t = 0;
for(j = 0; j < i; j++) {
t += proc[j].bt;
}
ct[i] = t + proc[i].bt;
sum += ct[i];
}
// 计算周转时间和等待时间
for(i = 0; i < n; i++) {
tat[i] = ct[i] - proc[i].at;
wt[i] = tat[i] - proc[i].bt;
avgwt += wt[i];
avgtat += tat[i];
}
// 输出结果
printf("\nProcess\tBurst Time\tArrival Time\tCompletion Time\tWaiting Time\tTurnaround Time\n");
for(i = 0; i < n; i++) {
printf("%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n", proc[i].pid, proc[i].bt, proc[i].at, ct[i], wt[i], tat[i]);
}
printf("Average Waiting Time: %f\n", avgwt/n);
printf("Average Turnaround Time: %f\n", avgtat/n);
}
int main() {
struct process proc[] = {{1, 6, 1}, {2, 8, 1}, {3, 7, 2}, {4, 3, 3}};
int n = sizeof(proc)/sizeof(proc[0]);
sjf(proc, n);
return 0;
}
```
这个程序实现了SJF算法,其中包括了排序函数sortByArrival和算法函数sjf。sortByArrival函数按到达时间对进程进行排序,sjf函数计算完成时间、周转时间、等待时间,并输出结果。程序中的四个进程的信息是预先定义的,你可以根据需要修改。
阅读全文