📜  FCFS CPU 调度程序|设置 1(1)

📅  最后修改于: 2023-12-03 15:15:02.897000             🧑  作者: Mango

FCFS CPU 调度程序 | 设置 1

简介

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算法中,每个进程都按照它们到达的顺序被服务。如果系统中有多个进程,并且每个进程的到达时间和执行时间不同,那么平均等待时间将会受到影响。因此,在实际生产环境中,应该考虑使用更高级别的调度算法来提高系统性能。