短作业优先调度算法c
时间: 2023-11-17 19:06:24 浏览: 204
短作业优先调度算法(Shortest Job First, SJF)是一种非抢占式调度算法,它优先选择执行时间最短的任务来执行。该算法通过估计每个作业的运行时间,然后按照作业的运行时间进行排序,以最短的作业先执行。
以下是一个使用C语言实现短作业优先调度算法的示例代码:
```c
#include<stdio.h>
void findWaitingTime(int processes[], int n, int bt[], int wt[]) {
wt[0] = 0;
for (int i = 1; i < n ; i++ )
wt[i] = bt[i-1] + wt[i-1] ;
}
void findTurnAroundTime( int processes[], int n, int bt[], int wt[], int tat[]) {
for (int i = 0; i < n ; i++)
tat[i] = bt[i] + wt[i];
}
void findAverageTime( int processes[], int n, int bt[]) {
int wt[n], tat[n], total_wt = 0, total_tat = 0;
findWaitingTime(processes, n, bt, wt);
findTurnAroundTime(processes, n, bt, wt, tat);
printf("进程\t执行时间\t等待时间\t周转时间\n");
for (int i=0; i<n; i++) {
total_wt = total_wt + wt[i];
total_tat = total_tat + tat[i];
printf("%d\t%d\t\t%d\t\t%d\n", i+1, bt[i], wt[i], tat[i]);
}
printf("\n平均等待时间:%.2f", (float)total_wt/n);
printf("\n平均周转时间:%.2f\n", (float)total_tat/n);
}
int main() {
int n;
printf("输入进程数量:");
scanf("%d", &n);
int processes[n], burst_time[n];
printf("输入每个进程的执行时间:\n");
for (int i = 0; i < n; i++) {
printf("进程 %d:", i+1);
scanf("%d", &burst_time[i]);
processes[i] = i+1;
}
findAverageTime(processes, n, burst_time);
return 0;
}
```
请注意,该代码假设所有进程的到达时间均为0,并且没有考虑进程的抢占。在实际情况中,可能需要根据实际需求进行相应的修改。
阅读全文