用C语言编程实现进程调度算法中的:先来先服务调度算法 实验报告 先建立一个PCB表
时间: 2024-02-18 09:04:25 浏览: 227
【操作系统课程设计】Linux环境下使用C语言实现先来先服务调度算法.doc
好的,我可以为您提供先来先服务调度算法实验报告的模板,同时也可以为您提供用C语言编写先来先服务调度算法的代码。
先来先服务调度算法实验报告模板:
一、实验目的
二、实验原理
三、实验步骤
1.建立PCB表
2.初始化PCB表
3.按照到达时间排序PCB表
4.按照先来先服务调度算法进行进程调度
5.输出调度结果
四、实验结果
五、实验结论
六、参考文献
用C语言编写先来先服务调度算法的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_PROCESS_NUM 10
typedef struct PCB {
int process_id; // 进程ID
int arrival_time; // 到达时间
int burst_time; // 执行时间
int waiting_time; // 等待时间
int turnaround_time; // 周转时间
} PCB;
void sort_by_arrival_time(PCB process[], int n) {
int i, j;
PCB temp;
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (process[i].arrival_time > process[j].arrival_time) {
temp = process[i];
process[i] = process[j];
process[j] = temp;
}
}
}
}
void calculate_waiting_time(PCB process[], int n) {
int i;
process[0].waiting_time = 0;
for (i = 1; i < n; i++) {
process[i].waiting_time = process[i - 1].waiting_time + process[i - 1].burst_time;
}
}
void calculate_turnaround_time(PCB process[], int n) {
int i;
for (i = 0; i < n; i++) {
process[i].turnaround_time = process[i].waiting_time + process[i].burst_time;
}
}
void calculate_average_time(PCB process[], int n, float *average_waiting_time, float *average_turnaround_time) {
int i;
float total_waiting_time = 0, total_turnaround_time = 0;
for (i = 0; i < n; i++) {
total_waiting_time += process[i].waiting_time;
total_turnaround_time += process[i].turnaround_time;
}
*average_waiting_time = total_waiting_time / n;
*average_turnaround_time = total_turnaround_time / n;
}
void display(PCB process[], int n) {
int i;
printf("进程ID\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", process[i].process_id, process[i].arrival_time, process[i].burst_time, process[i].waiting_time, process[i].turnaround_time);
}
}
int main() {
int i, n;
float average_waiting_time, average_turnaround_time;
PCB process[MAX_PROCESS_NUM];
printf("请输入进程数:");
scanf("%d", &n);
for (i = 0; i < n; i++) {
printf("请输入进程%d的到达时间和执行时间:", i + 1);
scanf("%d%d", &process[i].arrival_time, &process[i].burst_time);
process[i].process_id = i + 1;
}
sort_by_arrival_time(process, n);
calculate_waiting_time(process, n);
calculate_turnaround_time(process, n);
calculate_average_time(process, n, &average_waiting_time, &average_turnaround_time);
display(process, n);
printf("平均等待时间:%f\n", average_waiting_time);
printf("平均周转时间:%f\n", average_turnaround_time);
return 0;
}
```
以上就是用C语言编写先来先服务调度算法的代码,可以根据需要进行修改和优化。
阅读全文