用C语言编程实现最短作业优先调度算法
时间: 2024-05-02 07:21:06 浏览: 132
进程调度和作业调度算法C语言实现
5星 · 资源好评率100%
以下是用C语言实现最短作业优先调度算法的代码:
```c
#include <stdio.h>
struct Process {
int pid; // 进程id
int bt; // 执行时间
int at; // 到达时间
};
void swap(struct Process *a, struct Process *b) {
struct Process temp = *a;
*a = *b;
*b = temp;
}
// 按到达时间排序
void sortByArrivalTime(struct Process processes[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (processes[i].at > processes[j].at) {
swap(&processes[i], &processes[j]);
}
}
}
}
// 按执行时间排序
void sortByBurstTime(struct Process processes[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (processes[i].bt > processes[j].bt) {
swap(&processes[i], &processes[j]);
}
}
}
}
void printProcesses(struct Process processes[], int n) {
printf("进程id\t到达时间\t执行时间\n");
for (int i = 0; i < n; i++) {
printf("%d\t%d\t\t%d\n", processes[i].pid, processes[i].at, processes[i].bt);
}
}
void shortestJobFirst(struct Process processes[], int n) {
sortByArrivalTime(processes, n);
int ct = processes[0].at; // 当前时间
int tat = 0; // 平均周转时间
int wt = 0; // 平均等待时间
printf("\n最短作业优先调度算法:\n");
printf("进程执行顺序: ");
for (int i = 0; i < n; i++) {
printf("%d ", processes[i].pid);
ct += processes[i].bt;
tat += ct - processes[i].at;
wt += ct - processes[i].at - processes[i].bt;
}
printf("\n平均周转时间: %f\n", (float) tat / n);
printf("平均等待时间: %f\n", (float) wt / n);
}
int main() {
struct Process processes[] = {{1, 6, 0}, {2, 8, 1}, {3, 7, 2}, {4, 3, 3}};
int n = sizeof(processes) / sizeof(struct Process);
printf("初始进程状态:\n");
printProcesses(processes, n);
shortestJobFirst(processes, n);
return 0;
}
```
代码中的 `Process` 结构体表示进程,包含进程id、执行时间和到达时间等属性。`swap` 函数用于交换两个进程的位置。`sortByArrivalTime` 和 `sortByBurstTime` 函数分别按到达时间和执行时间排序进程数组。`printProcesses` 函数用于打印进程信息。`shortestJobFirst` 函数实现最短作业优先调度算法,计算出平均周转时间和平均等待时间,并输出进程执行顺序和这两个值。
在 `main` 函数中,定义了一个包含4个进程的数组,并通过 `printProcesses` 函数打印出初始进程状态。然后调用 `shortestJobFirst` 函数实现最短作业优先调度算法,并输出结果。
可以根据需要修改 `main` 函数中的进程信息,以测试不同的情况。
阅读全文