c语言实现SJF算法
时间: 2023-07-25 12:03:37 浏览: 112
SJF(Shortest Job First)算法是一种基于作业运行时间的调度策略,其核心思想是优先选择执行时间最短的任务。
下面是一个使用C语言实现SJF算法的示例代码:
```
#include<stdio.h>
struct process {
int pid; // 进程ID
int at; // 到达时间
int bt; // 运行时间
int ct; // 完成时间
int tat; // 周转时间
int wt; // 等待时间
int rt; // 剩余时间
};
void main() {
int n, i, j, min, t = 0, sum = 0;
float avg_tat = 0, avg_wt = 0;
struct process p[10], temp;
printf("Enter the number of processes:");
scanf("%d", &n);
// 输入进程信息
for(i = 0; i < n; i++) {
printf("Enter the arrival time and burst time of process %d:", i+1);
scanf("%d%d", &p[i].at, &p[i].bt);
p[i].pid = i+1;
p[i].rt = p[i].bt;
}
// 根据到达时间排序
for(i = 0; i < n-1; i++) {
min = i;
for(j = i+1; j < n; j++) {
if(p[j].at < p[min].at) {
min = j;
}
}
temp = p[i];
p[i] = p[min];
p[min] = temp;
}
// SJF算法
for(i = 0; i < n; i++) {
min = i;
for(j = i+1; j < n; j++) {
if(p[j].rt < p[min].rt && p[j].at <= t) {
min = j;
}
}
p[min].rt--;
t++;
if(p[min].rt == 0) { // 进程完成
p[min].ct = t;
p[min].tat = p[min].ct - p[min].at;
p[min].wt = p[min].tat - p[min].bt;
sum += p[min].tat;
avg_wt += p[min].wt;
avg_tat += p[min].tat;
}
}
// 输出结果
printf("\nPID\tAT\tBT\tCT\tTAT\tWT\n");
for(i = 0; i < n; i++) {
printf("%d\t%d\t%d\t%d\t%d\t%d\n", p[i].pid, p[i].at, p[i].bt, p[i].ct, p[i].tat, p[i].wt);
}
avg_tat /= n;
avg_wt /= n;
printf("\nAverage Turnaround Time: %.2f", avg_tat);
printf("\nAverage Waiting Time: %.2f", avg_wt);
}
```
在上述代码中,我们首先输入了所有进程的到达时间和运行时间,然后根据到达时间排序,接着使用SJF算法进行调度,并计算出每个进程的完成时间、周转时间和等待时间。最后输出所有进程的详细信息和平均周转时间、平均等待时间。
阅读全文