操作系统进程管理先来先服务实验
时间: 2023-12-03 08:04:11 浏览: 69
以下是操作系统进程管理先来先服务实验的C语言代码和注释说明:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义进程结构体
typedef struct PCB {
int pid; // 进程ID
int arrive_time; // 到达时间
int burst_time; // 执行时间
int start_time; // 开始时间
int finish_time; // 完成时间
int turnaround_time; // 周转时间
int waiting_time; // 等待时间
} PCB;
// 按照到达时间排序
void sort(PCB *pcb, int n) {
int i, j;
PCB temp;
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (pcb[i].arrive_time > pcb[j].arrive_time) {
temp = pcb[i];
pcb[i] = pcb[j];
pcb[j] = temp;
}
}
}
}
// 先来先服务调度算法
void FCFS(PCB *pcb, int n) {
int i;
float avg_turnaround_time = 0, avg_waiting_time = 0;
printf("进程ID\t到达时间\t执行时间\t开始时间\t完成时间\t周转时间\t等待时间\n");
for (i = 0; i < n; i++) {
if (i == 0) {
pcb[i].start_time = pcb[i].arrive_time;
} else {
pcb[i].start_time = pcb[i - 1].finish_time;
}
pcb[i].finish_time = pcb[i].start_time + pcb[i].burst_time;
pcb[i].turnaround_time = pcb[i].finish_time - pcb[i].arrive_time;
pcb[i].waiting_time = pcb[i].turnaround_time - pcb[i].burst_time;
avg_turnaround_time += pcb[i].turnaround_time; avg_waiting_time += pcb[i].waiting_time;
printf("%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n", pcb[i].pid, pcb[i].arrive_time, pcb[i].burst_time, pcb[i].start_time, pcb[i].finish_time, pcb[i].turnaround_time, pcb[i].waiting_time);
}
avg_turnaround_time /= n; avg_waiting_time /= n;
printf("平均周转时间:%f\n", avg_turnaround_time);
printf("平均等待时间:%f\n", avg_waiting_time);
}
int main() {
int n, i;
printf("请输入进程数:");
scanf("%d", &n);
PCB *pcb = (PCB*)malloc(n * sizeof(PCB));
printf("请输入每个进程的到达时间和执行时间:\n");
for (i = 0; i < n; i++) {
printf("进程%d:", i + 1);
scanf("%d%d", &pcb[i].arrive_time, &pcb[i].burst_time);
pcb[i].pid = i + 1;
}
sort(pcb, n);
FCFS(pcb, n);
free(pcb);
return 0;
}
```
阅读全文