编写C程序模拟实现进程调度算法之先来先服务
时间: 2023-12-18 13:04:48 浏览: 23
好的,以下是一个简单的 C 语言程序,用于模拟先来先服务(FCFS)进程调度算法:
```c
#include <stdio.h>
#define MAX_PROCESS 10
struct Process {
int pid; // 进程号
int arrival_time; // 到达时间
int burst_time; // 执行时间
int waiting_time; // 等待时间
int turnaround_time; // 周转时间
};
int main() {
struct Process processes[MAX_PROCESS];
int n, i, j;
float avg_waiting_time = 0, avg_turnaround_time = 0;
printf("请输入进程数:");
scanf("%d", &n);
// 输入每个进程的信息
for (i = 0; i < n; i++) {
printf("请输入进程 %d 的到达时间和执行时间:", i + 1);
scanf("%d %d", &processes[i].arrival_time, &processes[i].burst_time);
processes[i].pid = i + 1;
}
// 对进程按照到达时间排序
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (processes[i].arrival_time > processes[j].arrival_time) {
struct Process temp = processes[i];
processes[i] = processes[j];
processes[j] = temp;
}
}
}
// 计算等待时间和周转时间
for (i = 0; i < n; i++) {
if (i == 0) {
processes[i].waiting_time = 0;
processes[i].turnaround_time = processes[i].burst_time;
} else {
processes[i].waiting_time = processes[i - 1].turnaround_time - processes[i].arrival_time;
if (processes[i].waiting_time < 0) {
processes[i].waiting_time = 0;
}
processes[i].turnaround_time = processes[i].waiting_time + processes[i].burst_time;
}
avg_waiting_time += processes[i].waiting_time;
avg_turnaround_time += processes[i].turnaround_time;
}
// 输出进程调度表和平均等待时间、平均周转时间
printf("进程调度表:\n");
printf("进程号\t到达时间\t执行时间\t等待时间\t周转时间\n");
for (i = 0; i < n; i++) {
printf("%d\t%d\t\t%d\t\t%d\t\t%d\n", processes[i].pid, processes[i].arrival_time, processes[i].burst_time, processes[i].waiting_time, processes[i].turnaround_time);
}
printf("平均等待时间:%.2f\n", avg_waiting_time / n);
printf("平均周转时间:%.2f\n", avg_turnaround_time / n);
return 0;
}
```
该程序首先要求用户输入进程数,然后输入每个进程的到达时间和执行时间,接着根据到达时间对进程进行排序,计算每个进程的等待时间和周转时间,最后输出进程调度表和平均等待时间、平均周转时间。
其中,等待时间表示进程从就绪状态进入执行状态前所等待的时间,周转时间表示进程从提交到完成整个处理所需要的时间。先来先服务调度算法就是按照进程提交的顺序进行处理,每次选择到达时间最早的进程先进行处理。