用c实现短作业优先调度算法
时间: 2023-10-22 22:07:49 浏览: 166
以下是短作业优先调度算法的C语言实现:
```c
#include <stdio.h>
struct process {
int pid; // 进程ID
int burst; // 进程运行时间
};
void sjf(struct process p[], int n) {
int time = 0; // 当前时间
int sum_burst = 0; // 总运行时间
int i, j, k, min_burst;
for (i = 0; i < n; i++)
sum_burst += p[i].burst;
printf("Process\tBurst Time\tWaiting Time\tTurnaround Time\n");
for (i = 0; i < sum_burst; i++) {
min_burst = 1000000; // 初始化为一个较大的值
k = -1;
// 找到当前可运行的进程中运行时间最短的进程
for (j = 0; j < n; j++) {
if (p[j].burst > 0 && p[j].burst < min_burst && p[j].burst <= sum_burst - time) {
min_burst = p[j].burst;
k = j;
}
}
if (k == -1) {
printf("Idle\t\t1\t\t0\t\t1\n");
time++;
continue;
}
// 运行进程k
printf("P%d\t\t%d\t\t%d\t\t%d\n", p[k].pid, p[k].burst, time, time + p[k].burst);
time += p[k].burst;
p[k].burst = 0;
}
}
int main() {
struct process p[] = {
{1, 6},
{2, 8},
{3, 7},
{4, 3},
{5, 4}
};
int n = sizeof(p) / sizeof(p[0]);
sjf(p, n);
return 0;
}
```
在这个实现中,我们首先计算了所有进程的总运行时间,然后从当前可运行的进程中查找运行时间最短的进程,运行它,并更新当前时间。如果当前没有可运行的进程,则打印出“Idle”进程,继续更新时间。
这个实现假设进程的运行时间都是已知的,如果想要动态添加进程,则还需要一些其他的处理。
阅读全文