模拟实现先来先服务算法,要求能够编写创建进程队列的程序段和进程调度函数
时间: 2023-12-03 19:47:05 浏览: 68
以下是一个简单的模拟实现先来先服务算法的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
/* 进程结构体 */
typedef struct Process {
int pid; // 进程ID
int arrive_time; // 到达时间
int burst_time; // 执行时间
int wait_time; // 等待时间
int turnaround_time; // 周转时间
} Process;
/* 创建进程队列 */
Process *create_process_queue(int n) {
Process *queue = (Process*) malloc(n * sizeof(Process));
for (int i = 0; i < n; i++) {
printf("请输入进程 %d 的到达时间和执行时间:", i+1);
scanf("%d%d", &queue[i].arrive_time, &queue[i].burst_time);
queue[i].pid = i + 1;
queue[i].wait_time = 0;
queue[i].turnaround_time = 0;
}
return queue;
}
/* 进程调度函数 */
void schedule(Process *queue, int n) {
int current_time = 0;
for (int i = 0; i < n; i++) {
if (current_time < queue[i].arrive_time) {
current_time = queue[i].arrive_time;
}
queue[i].wait_time = current_time - queue[i].arrive_time;
queue[i].turnaround_time = queue[i].wait_time + queue[i].burst_time;
current_time += queue[i].burst_time;
}
}
/* 打印进程信息 */
void print_process_info(Process *queue, int n) {
printf("进程ID\t到达时间\t执行时间\t等待时间\t周转时间\n");
for (int i = 0; i < n; i++) {
printf("%d\t%d\t%d\t%d\t%d\n", queue[i].pid, queue[i].arrive_time, queue[i].burst_time, queue[i].wait_time, queue[i].turnaround_time);
}
}
int main() {
int n;
printf("请输入进程个数:");
scanf("%d", &n);
Process *queue = create_process_queue(n);
schedule(queue, n);
print_process_info(queue, n);
free(queue);
return 0;
}
```
在这个示例中,我们先定义了一个进程结构体,包含了进程的ID、到达时间、执行时间、等待时间和周转时间。然后,我们实现了一个创建进程队列的函数 `create_process_queue`,它将从键盘输入每个进程的到达时间和执行时间,并初始化其它成员变量。
接下来,我们实现了一个进程调度函数 `schedule`,它根据先来先服务算法对进程进行调度,计算出每个进程的等待时间和周转时间。
最后,我们实现了一个打印进程信息的函数 `print_process_info`,它将进程的ID、到达时间、执行时间、等待时间和周转时间输出到屏幕上。
在 `main` 函数中,我们先从键盘输入进程的个数,然后调用 `create_process_queue` 函数创建进程队列。接着,我们调用 `schedule` 函数对进程进行调度,最后调用 `print_process_info` 函数打印进程信息。最后,我们释放了动态分配的内存。
阅读全文