先来先服务调度算法代码
时间: 2023-11-06 11:08:27 浏览: 62
先来先服务(FCFS)调度算法的实现相对简单,可以用C语言编写。以下是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int pid; // 进程ID
int arrival_time; // 到达时间
int burst_time; // 执行时间
} Process;
void fcfs(Process *processes, int n) {
int i, j;
int waiting_time = 0, turnaround_time = 0;
float average_waiting_time, average_turnaround_time;
// 按照到达时间排序
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (processes[i].arrival_time > processes[j].arrival_time) {
Process temp = processes[i];
processes[i] = processes[j];
processes[j] = temp;
}
}
}
// 计算等待时间和周转时间
for (i = 0; i < n; i++) {
waiting_time += (i == 0 ? 0 : processes[i - 1].burst_time + processes[i - 1].arrival_time - processes[i].arrival_time);
turnaround_time += processes[i].burst_time + (i == 0 ? processes[i].arrival_time : waiting_time);
}
// 计算平均等待时间和平均周转时间
average_waiting_time = (float) waiting_time / n;
average_turnaround_time = (float) turnaround_time / n;
// 输出结果
printf("Process\tArrival Time\tBurst Time\tWaiting Time\tTurnaround Time\n");
for (i = 0; i < n; i++) {
printf("%d\t\t%d\t\t%d\t\t%d\t\t%d\n", processes[i].pid, processes[i].arrival_time, processes[i].burst_time,
i == 0 ? 0 : processes[i - 1].burst_time + processes[i - 1].arrival_time - processes[i].arrival_time,
processes[i].burst_time + (i == 0 ? processes[i].arrival_time : waiting_time));
}
printf("Average waiting time: %.2f\n", average_waiting_time);
printf("Average turnaround time: %.2f\n", average_turnaround_time);
}
int main() {
Process processes[] = {{1, 0, 6}, {2, 1, 4}, {3, 2, 8}, {4, 3, 5}, {5, 4, 3}};
int n = sizeof(processes) / sizeof(Process);
fcfs(processes, n);
return 0;
}
```
该代码中,定义了一个Process结构体来表示进程,包含进程ID、到达时间和执行时间三个属性。fcfs函数实现了FCFS调度算法,其中按照到达时间对进程进行排序,然后计算等待时间和周转时间,最后输出结果。main函数中定义了一个示例进程数组进行测试。