作业调度算法--短作业优先用C语言编程
时间: 2023-09-20 13:06:24 浏览: 199
操作系统短作业优先进程调度算法
5星 · 资源好评率100%
既然你想了解短作业优先算法的C语言编程实现,那么我们可以先了解一下这种调度算法的基本思想。短作业优先算法又称为SJF算法,它的核心思想是优先调度执行时间短的进程。对于所有正在等待处理器的进程,按照它们的执行时间升序进行排序,然后选择执行时间最短的进程先被调度执行。这种算法相对其他调度算法来说,它能够有效的缩短进程的等待时间,提高系统的响应速度。下面是一个具体实现的C语言代码范例:
```c
#include <stdio.h>
#include <stdlib.h>
#define max 50
struct process {
int pid; // 进程ID
int burst_time; // 执行时间
int waiting_time; // 等待时间
int turnaround_time; // 周转时间
};
int sjf(struct process p[], int n) { // 短作业优先调度算法
int i, j, shortest;
float avwt = 0; // 平均等待时间
float avtat = 0; // 平均周转时间
for (i = 0; i < n; i++) {
shortest = i;
for (j = i + 1; j < n; j++) {
if (p[j].burst_time < p[shortest].burst_time) {
shortest = j;
}
}
struct process temp = p[i];
p[i] = p[shortest];
p[shortest] = temp;
p[i].waiting_time = 0;
p[i].turnaround_time = p[i].burst_time;
for (j = 0; j < i; j++) {
p[i].waiting_time += p[j].burst_time;
}
avwt += p[i].waiting_time;
avtat += p[i].turnaround_time;
}
printf("\nProcess\tBurst Time\tWaiting Time\tTurnaround Time");
for (i = 0; i < n; i++) {
printf("\n%d\t\t%d\t\t%d\t\t%d", p[i].pid, p[i].burst_time, p[i].waiting_time, p[i].turnaround_time);
}
printf("\n\nAverage waiting time = %f", avwt / n);
printf("\nAverage turnaround time = %f", avtat / n);
}
int main() {
struct process p[max];
int n, i;
printf("Enter the number of processes: ");
scanf("%d", &n);
printf("\nEnter the burst time of each process:\n");
for (i = 0; i < n; i++) {
printf("Process %d: ", i + 1);
p[i].pid = i + 1;
scanf("%d", &p[i].burst_time);
}
sjf(p, n);
return 0;
}
```
上述代码中,我们首先定义了一个包含进程ID、执行时间、等待时间、周转时间等信息的结构体`process`,然后定义了一个`sjf`函数,该函数实现了短作业优先调度算法,返回平均等待时间和平均周转时间。在`main`函数中,我们首先输入了进程数和每个进程的执行时间,并调用`sjf`函数进行调度。最后输出每个进程的执行时间、等待时间、周转时间,以及平均等待时间和平均周转时间。
阅读全文