先来先服务(First - Come, First - Served,FCFS)

先来先服务(First - Come, First - Served,FCFS)调度算法是一种最简单的进程调度算法,广泛应用于操作系统的进程调度和作业调度中,下面从多个方面为你详细介绍:

基本原理

该算法按照进程进入就绪队列的先后顺序来分配CPU资源。当一个进程进入就绪队列时,它会被排在队列的尾部。调度程序总是选择就绪队列中最前面的进程,将CPU分配给它执行,直到该进程完成或因某种原因阻塞,才会从就绪队列中选择下一个进程。

示例说明

假设有三个进程P1、P2、P3,它们到达就绪队列的时间和所需的执行时间如下:

进程 到达时间 执行时间
P1 0 5
P2 1 3
P3 2 8
  • 在时间0,P1到达并进入就绪队列,由于此时只有P1,所以P1开始执行。
  • 在时间1,P2到达并进入就绪队列尾部,此时P1正在执行,所以P2等待。
  • 在时间2,P3到达并进入就绪队列尾部,P1继续执行。
  • 直到时间5,P1执行完毕,此时调度程序从就绪队列中选择最前面的P2,P2开始执行。
  • 在时间8,P2执行完毕,调度程序选择P3,P3开始执行,直到时间16执行完毕。

算法实现

在操作系统中,FCFS算法可以通过一个队列来实现。进程到达时,将其加入队列尾部;调度时,从队列头部取出进程执行。以下是一个简单的Python代码示例,模拟FCFS调度算法:

class Process:
    def __init__(self, pid, arrival_time, burst_time):
        self.pid = pid
        self.arrival_time = arrival_time
        self.burst_time = burst_time
        self.start_time = None
        self.completion_time = None
        self.turnaround_time = None
        self.waiting_time = None


def fcfs(processes):
    processes.sort(key=lambda x: x.arrival_time)
    current_time = 0
    for process in processes:
        if current_time < process.arrival_time:
            current_time = process.arrival_time
        process.start_time = current_time
        current_time += process.burst_time
        process.completion_time = current_time
        process.turnaround_time = process.completion_time - process.arrival_time
        process.waiting_time = process.turnaround_time - process.burst_time
    return processes


# 示例进程
processes = [
    Process(1, 0, 5),
    Process(2, 1, 3),
    Process(3, 2, 8)
]

scheduled_processes = fcfs(processes)

# 输出结果
for process in scheduled_processes:
    print(f"进程 {process.pid}:")
    print(f"  开始时间: {process.start_time}")
    print(f"  完成时间: {process.completion_time}")
    print(f"  周转时间: {process.turnaround_time}")
    print(f"  等待时间: {process.waiting_time}")

优缺点

  • 优点
    • 实现简单:该算法的逻辑简单,不需要复杂的计算和数据结构,易于实现和理解。
    • 公平性:每个进程按照到达的先后顺序依次执行,对所有进程一视同仁,不会出现饥饿现象。
  • 缺点
    • 平均等待时间长:如果先到达的进程执行时间很长,后到达的短进程需要等待很长时间,导致平均等待时间和平均周转时间较长,系统的整体性能可能受到影响。
    • 不利于短作业:在实际应用中,短作业往往希望能够尽快完成,而FCFS算法可能会使短作业长时间等待,降低了系统的吞吐量和响应速度。

先来先服务调度算法适用于对进程执行顺序有严格要求,且对平均等待时间和响应时间要求不高的场景。

#牛客创作赏金赛#
操作系统I 文章被收录于专栏

操作系统(Operating System,简称 OS)是管理计算机硬件与软件资源的核心程序,是用户与硬件之间的桥梁,也是计算机系统的核心组成部分。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务