📅  最后修改于: 2023-12-03 15:15:02.897000             🧑  作者: Mango
FCFS(First-Come-First-Served)是一种非抢占式的CPU调度算法,这意味着在当前进程完成之前,CPU不会被分配给其他等待的进程。在该算法中,进程按照它们到达的顺序被服务。它是最简单和最容易实现的CPU调度算法之一,并且适用于一些较小的系统或场景。
以下是一个使用FCFS算法的CPU调度程序示例,该程序使用C语言实现:
#include<stdio.h>
#include<stdlib.h>
struct process
{
int pid; // 进程ID
int arrival_time; // 到达时间
int burst_time; // 执行时间
};
// 计算等待时间和执行时间
void findWaitTime(struct process processes[], int n, int wait_times[])
{
// 第一个进程的等待时间为0
wait_times[0] = 0;
// 计算其他进程的等待时间
for(int i = 1; i < n; i++)
{
wait_times[i] = processes[i - 1].burst_time + wait_times[i - 1];
}
}
// 计算平均等待时间
float findAvgWaitTime(struct process processes[], int n)
{
int wait_times[n];
// 计算等待时间
findWaitTime(processes, n, wait_times);
// 计算总等待时间
int total_wait_time = 0;
for(int i = 0; i < n; i++)
{
total_wait_time += wait_times[i];
}
// 返回平均等待时间
return ((float)total_wait_time / (float)n);
}
int main()
{
struct process processes[] = {{1, 0, 6}, {2, 2, 4}, {3, 4, 2}, {4, 7, 1}};
int n = sizeof(processes) / sizeof(processes[0]);
printf("进程ID\t 到达时间\t 执行时间\t 等待时间\n");
// 计算每个进程的等待时间并输出
for(int i = 0; i < n; i++)
{
printf("%d\t\t %d\t\t %d\t\t ", processes[i].pid, processes[i].arrival_time, processes[i].burst_time);
int wait_time = (i == 0) ? 0 : processes[i - 1].burst_time;
printf("%d\n", wait_time);
}
printf("\n平均等待时间: %.2f\n", findAvgWaitTime(processes, n));
return 0;
}
运行上述程序,您将看到以下输出:
进程ID 到达时间 执行时间 等待时间
1 0 6 0
2 2 4 6
3 4 2 10
4 7 1 12
平均等待时间: 7.00
在FCFS算法中,每个进程都按照它们到达的顺序被服务。如果系统中有多个进程,并且每个进程的到达时间和执行时间不同,那么平均等待时间将会受到影响。因此,在实际生产环境中,应该考虑使用更高级别的调度算法来提高系统性能。