用C语言编码实现先来先服务调度算法和短作业优先调度算法。
时间: 2023-11-17 16:07:00 浏览: 168
先来先服务调度和最短作业优先调度算法实现
先来先服务调度算法(FCFS)是一种最简单的调度算法,也是最容易实现的一种算法。该算法按照作业提交的先后顺序进行调度,即先提交的作业先执行,后提交的作业后执行。该算法的优点是简单易懂,缺点是平均等待时间较长,不适用于长作业。
短作业优先调度算法(SJF)是一种根据作业长度来进行调度的算法。该算法优先调度作业长度较短的作业,以期望达到最优的平均等待时间。该算法的优点是平均等待时间较短,缺点是无法预测作业的长度,可能会导致长作业等待时间过长。
以下是用C语言编码实现先来先服务调度算法和短作业优先调度算法的示例代码:
```c
// 先来先服务调度算法
#include <stdio.h>
int main() {
int n, i, j, wt[20], bt[20], tat[20], avwt = 0, avtat = 0;
printf("Enter total number of processes(maximum 20): ");
scanf("%d", &n);
printf("\nEnter Process Burst Time\n");
for(i = 0; i < n; i++) {
printf("P[%d]: ", i + 1);
scanf("%d", &bt[i]);
}
wt[0] = 0;
for(i = 1; i < n; i++) {
wt[i] = 0;
for(j = 0; j < i; j++)
wt[i] += bt[j];
}
printf("\nProcess\tBurst Time\tWaiting Time\tTurnaround Time");
for(i = 0; i < n; i++) {
tat[i] = bt[i] + wt[i];
avwt += wt[i];
avtat += tat[i];
printf("\nP[%d]\t\t%d\t\t%d\t\t%d", i + 1, bt[i], wt[i], tat[i]);
}
avwt /= i;
avtat /= i;
printf("\n\nAverage Waiting Time: %d", avwt);
printf("\nAverage Turnaround Time: %d", avtat);
return 0;
}
// 短作业优先调度算法
#include <stdio.h>
int main() {
int n, i, j, pos, temp, wt[20], bt[20], tat[20], avwt = 0, avtat = 0;
printf("Enter total number of processes(maximum 20): ");
scanf("%d", &n);
printf("\nEnter Process Burst Time\n");
for(i = 0; i < n; i++) {
printf("P[%d]: ", i + 1);
scanf("%d", &bt[i]);
}
for(i = 0; i < n; i++) {
pos = i;
for(j = i + 1; j < n; j++) {
if(bt[j] < bt[pos])
pos = j;
}
temp = bt[i];
bt[i] = bt[pos];
bt[pos] = temp;
}
wt[0] = 0;
for(i = 1; i < n; i++) {
wt[i] = 0;
for(j = 0; j < i; j++)
wt[i] += bt[j];
}
printf("\nProcess\tBurst Time\tWaiting Time\tTurnaround Time");
for(i = 0; i < n; i++) {
tat[i] = bt[i] + wt[i];
avwt += wt[i];
avtat += tat[i];
printf("\nP[%d]\t\t%d\t\t%d\t\t%d", i + 1, bt[i], wt[i], tat[i]);
}
avwt /= i;
avtat /= i;
printf("\n\nAverage Waiting Time: %d", avwt);
printf("\nAverage Turnaround Time: %d", avtat);
return 0;
}
```
阅读全文