- 操作系统教程
- 操作系统 - 首页
- 操作系统 - 需求
- 操作系统 - 概述
- 操作系统 - 历史
- 操作系统 - 组成部分
- 操作系统 - 结构
- 操作系统 - 架构
- 操作系统 - 服务
- 操作系统 - 属性
- 操作系统 - 周转时间 & 带权周转时间
- 操作系统进程
- 操作系统 - 进程
- 操作系统 - 进程调度
- 操作系统 - 调度算法
- 先来先服务调度算法
- 最短作业优先调度算法
- 轮转调度算法
- 最高响应比优先调度算法
- 优先级调度算法
- 多级队列调度
- 上下文切换
- 进程操作
- 彩票进程调度
- 预测突发时间最短作业优先调度
- 竞争条件漏洞
- 临界区同步
- 互斥同步
- 进程控制块
- 进程间通信
- 抢占式和非抢占式调度
- 操作系统同步
- 进程同步
- 操作系统内存管理
- 操作系统 - 内存管理
- 操作系统 - 虚拟内存
- 操作系统存储管理
- 操作系统 - 文件系统
- 操作系统类型
- 操作系统 - 类型
- 操作系统其他
- 操作系统 - 多线程
- 操作系统 - I/O 硬件
- 操作系统 - I/O 软件
- 操作系统 - 安全
- 操作系统 - Linux
- 考试题库及答案
- 考试题库及答案
- 操作系统有用资源
- 操作系统 - 快速指南
- 操作系统 - 有用资源
- 操作系统 - 讨论
操作系统 - 先来先服务调度算法
在多道程序设计环境中,调度是由 CPU 执行的,用于决定下一个要执行的进程。这允许多个 CPU 进程同时存在,同时优化系统资源的使用以及执行时间。调度策略定义了一个从就绪队列中等待执行的进程中选择一个进程的过程。有各种各样的调度策略,其中最基本的一种是先来先服务 (FCFS) 调度算法。
FCFS 调度
FCFS 被认为是最简单的 CPU 调度算法。在 FCFS 算法中,最先请求 CPU 的进程首先被分配到 CPU。FCFS 算法的实现是通过 FIFO(先进先出)队列管理的。FCFS 调度是非抢占式的。非抢占式意味着,一旦 CPU 被分配给一个进程,该进程就会一直占用 CPU,直到它执行完工作或任务并释放 CPU,或者通过请求 I/O 来释放 CPU。
FCFS 算法的主要特点
- FCFS 是一种非抢占式调度算法。
- 最先到达就绪队列的进程首先被分配执行。
- 实现简单,因为它不涉及任何复杂的算法。
- 它不需要任何关于进程的先验知识。此外,如果进程的运行时行为动态变化,对 FCFS 调度算法没有影响。
- 虽然这保证了公平的调度,但它可能导致单个进程的等待时间过长。
FCFS 调度的现实生活例子
作为 FCFS 调度的现实生活例子,可以观察到购物中心的收银台系统。排在队伍中第一个人先结账,然后下一个人才有机会结账付款,依此类推。如果没有给 VIP 客户优先权,那么结账系统将按此进行(这意味着排在队伍中的第一人(第一个任务)将首先结账,并在完成(执行)第一个客户的付款后,收银员(CPU)将关注其他客户(单独的任务),因为他们都在排队)。由于 FCFS 是非抢占式的,因此不会优先考虑随机的重要任务。
FCFS 调度数学示例
在 CPU 调度问题中,解决问题时会使用一些术语,因此出于概念目的,这些术语将如下讨论 -
- 到达时间 (AT) - 到达时间是指进程到达就绪队列的时间。
- 突发时间 (BT) 或进程的 CPU 时间 - 突发时间是指特定进程完成执行所需的单位时间。
- 完成时间 (CT) - 完成时间是指进程终止的时间。
- 周转时间 (TAT) - 从到达时间到完成时间的总时间称为周转时间。TAT 可以写成,
- 等待时间 (WT) - 等待时间是指进程在等待分配时,前一个进程正在 CPU 中执行的时间。WT 写成,
周转时间 (TAT) = 完成时间 (CT) - 到达时间 (AT) 或 TAT = 突发时间 (BT) + 等待时间 (WT)
等待时间 (WT) = 周转时间 (TAT) - 突发时间 (BT)
- 响应时间 (RT) - 响应时间是指 CPU 首次分配给特定进程的时间。
- 在非抢占式调度的情况下,等待时间和响应时间通常相同。
- 甘特图 - 甘特图是一种可视化工具,有助于项目中特定任务的调度和管理。在解决调度问题时使用它,了解进程如何在不同算法中被分配。
问题 1
考虑下表,找到完成时间 (CT)、周转时间 (TAT)、等待时间 (WT)、响应时间 (RT)、平均周转时间和平均等待时间。
进程 ID | 到达时间 | 突发时间 |
---|---|---|
P1 | 2 | 2 |
P2 | 5 | 6 |
P3 | 0 | 4 |
P4 | 0 | 7 |
P5 | 7 | 4 |
解决方案
甘特图
对于此问题,CT、TAT、WT、RT 显示在下表中 -
进程 ID | 到达时间 | 突发时间 | CT | TAT=CT-AT | WT=TAT-BT | RT |
---|---|---|---|---|---|---|
P1 | 2 | 2 | 13 | 13-2= 11 | 11-2= 9 | 9 |
P2 | 5 | 6 | 19 | 19-5= 14 | 14-6= 8 | 8 |
P3 | 0 | 4 | 4 | 4-0= 4 | 4-4= 0 | 0 |
P4 | 0 | 7 | 11 | 11-0= 11 | 11-7= 4 | 4 |
P5 | 7 | 4 | 23 | 23-7= 16 | 16-4= 12 | 12 |
平均等待时间 = (9+8+0+4+12)/5 = 33/5 = 6.6 时间单位(时间单位可以视为毫秒)
平均周转时间 = (11+14+4+11+16)/5 = 56/5 = 11.2 时间单位(时间单位可以视为毫秒)
问题 2
考虑下表,找到完成时间 (CT)、周转时间 (TAT)、等待时间 (WT)、响应时间 (RT)、平均周转时间和平均等待时间。
进程 ID | 到达时间 | 突发时间 |
---|---|---|
P1 | 2 | 2 |
P2 | 0 | 1 |
P3 | 2 | 3 |
P4 | 3 | 5 |
P5 | 4 | 5 |
解决方案
甘特图 -
对于此问题,CT、TAT、WT、RT 显示在下表中 -
进程 ID | 到达时间 | 突发时间 | CT | TAT=CT-AT | WT=TAT-BT | RT |
---|---|---|---|---|---|---|
P1 | 2 | 2 | 4 | 4-2= 2 | 2-2= 0 | 0 |
P2 | 0 | 1 | 1 | 1-0= 1 | 1-1= 0 | 0 |
P3 | 2 | 3 | 7 | 7-2= 5 | 5-3= 2 | 2 |
P4 | 3 | 5 | 12 | 12-3= 9 | 9-5= 4 | 4 |
P5 | 4 | 5 | 17 | 17-4= 13 | 13-5= 8 | 8 |
平均等待时间 = (0+0+2+4+8)/5 = 14/5 = 2.8 时间单位(时间单位可以视为毫秒)
平均周转时间 = (2+1+5+9+13)/5 = 30/5 = 6 时间单位(时间单位可以视为毫秒)
*在空闲(非活动)CPU 期间,没有进程被安排终止,因此在此期间它会保持一段时间空闲。
FCFS 调度的优点
- 它易于实现,因为它不包含任何复杂的方式。
- 每个任务都应同时执行,因为它遵循 FIFO 队列。
- FCFS 不会优先考虑任何随机的重要任务,因此它是一种公平的调度。
FCFS 调度的缺点
- FCFS 会导致车队效应,这意味着如果突发时间较长的进程首先到达就绪队列,那么突发时间较短的进程可能会被阻塞,并且如果突发时间较长的任务永远占用时间,则突发时间较短的进程可能无法获得 CPU。
- 如果突发时间长的进程首先排队,那么其他突发时间短的进程必须等待很长时间,因此它对于分时系统来说不是很好。
- 由于它是不可抢占的,因此它不会在完全完成任务执行之前释放 CPU。
*车队效应和饥饿听起来很相似,但略有不同,因此建议不要将这两个术语视为相同的词。
结论
尽管 FCFS 易于实现和理解,但 FCFS 不适合交互式系统,并且在现代操作系统中未使用。可以使用其他 CPU 调度抢占式算法(如“轮转调度”)来防止 FCFS 中的车队效应。