c语言用先来先服务算法设计一个关于3个进程的进程调度
时间: 2024-02-25 19:53:47 浏览: 19
以下是用C语言实现的一个关于3个进程的进程调度,采用先来先服务算法(FCFS):
```c
#include <stdio.h>
#include <stdlib.h>
// 进程结构体
typedef struct {
int id; // 进程编号
int arrival; // 到达时间
int burst; // 运行时间
int finish; // 完成时间
int turnaround; // 周转时间
int waiting; // 等待时间
} Process;
// 计算进程完成时间、周转时间和等待时间
void calculate(Process *p, int n) {
int i;
int time = 0;
for (i = 0; i < n; i++) {
if (time < p[i].arrival) {
time = p[i].arrival;
}
time += p[i].burst;
p[i].finish = time;
p[i].turnaround = p[i].finish - p[i].arrival;
p[i].waiting = p[i].turnaround - p[i].burst;
}
}
// 按照到达时间排序
void sort(Process *p, int n) {
int i, j;
Process temp;
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (p[i].arrival > p[j].arrival) {
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
}
int main() {
int n = 3; // 进程数目
Process p[n]; // 进程数组
int i;
// 输入进程信息
for (i = 0; i < n; i++) {
printf("请输入第%d个进程的信息:\n", i+1);
printf("进程编号:");
scanf("%d", &p[i].id);
printf("到达时间:");
scanf("%d", &p[i].arrival);
printf("运行时间:");
scanf("%d", &p[i].burst);
}
// 按照到达时间排序
sort(p, n);
// 计算进程完成时间、周转时间和等待时间
calculate(p, n);
// 输出进程信息
printf("进程编号\t到达时间\t运行时间\t完成时间\t周转时间\t等待时间\n");
for (i = 0; i < n; i++) {
printf("%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n", p[i].id, p[i].arrival, p[i].burst, p[i].finish, p[i].turnaround, p[i].waiting);
}
return 0;
}
```
在上述代码中,我们定义了一个`Process`结构体来表示进程的信息,包括进程编号、到达时间、运行时间、完成时间、周转时间和等待时间。我们还定义了两个函数`calculate()`和`sort()`,分别用来计算进程的完成时间、周转时间和等待时间,以及按照到达时间对进程进行排序。在`main()`函数中,我们首先输入进程的信息,然后按照到达时间排序,最后计算进程的完成时间、周转时间和等待时间,并输出进程信息。
以上代码仅实现了一个简单的进程调度,可以根据实际需求进行改进。