在了解 I/O 调度之前,了解 I/O 操作的概述很重要。
I/O 操作是如何执行的?
操作系统有一部分代码专门用于管理输入/输出,以提高系统的可靠性和性能。计算机系统包含 CPU 和多个连接到公共总线通道的设备控制器,通常称为设备驱动程序。这些设备驱动程序为 I/O 设备提供了一个接口,用于与系统硬件进行通信,从而提高通信的便利性,提供对共享内存的访问。
操作系统中的 I/O 请求:
I/O 请求由设备驱动程序与 I/O 设备内部的一些系统程序协作管理。操作系统使用三个简单的段来处理请求:
- I/O 流量控制器:跟踪所有设备、控制单元和通信通道的状态。
- I/O 调度程序:执行操作系统用于分配和访问设备、控制单元和通信通道的策略。
- I/O 设备处理程序:服务于设备中断和数据传输。
操作系统中的 I/O 调度:
调度用于有效使用计算机资源,避免死锁并为队列中等待的所有进程提供服务。要了解有关 CPU 调度的更多信息,请参阅操作系统中的 CPU 调度。
I/O 流量控制器有 3 个主要任务:
- 主要任务是检查是否至少有一条路径可用。
- 如果存在多条路径,它必须决定选择哪一条。
- 如果所有路径都被占用,它的任务是分析最早可用的路径。
I/O 调度器的功能类似于进程调度器,它分配设备、控制单元和通信通道。但是,在 I/O 请求负载很重的情况下,调度程序必须决定应该首先服务哪个请求,为此我们需要由操作系统管理多个队列。
Process scheduler < 和I/O scheduler的主要区别在于 I/O 请求不会被抢占:一旦通道程序启动,它就可以继续完成。虽然它是可行的,因为程序相对较短(50 到 100 毫秒)。一些现代操作系统允许 I/O 调度程序服务和更高优先级的请求。简而言之,如果一个 I/O 请求具有更高的优先级,那么它们会在其他具有较低优先级的 I/O 请求之前被提供。 I/O 调度程序与 I/O 流量控制器协同工作,以跟踪当前 I/O 请求正在服务的路径。
I/O 设备处理程序管理 I/O 中断(如果有)和调度算法。很少有 I/O 处理算法是:
- FCFS [先到先得服务器]。
- SSTF [最短寻道时间优先]。
- 扫描
- 看
- N步扫描
- 扫描
- C-LOOK
每个调度算法都旨在最小化手臂运动、平均响应时间、响应时间的差异。下面描述了所有 I/O 调度算法的概述:
- 先到先得 [FCFS]
它是最简单的设备调度算法之一,因为它易于编程并且对用户(I/O 设备)基本公平。唯一的障碍可能是高寻道时间,因此可以超过最小寻道时间的任何其他算法都适合调度。 - 最短寻道时间优先 [SSTF] :
它在进程调度中使用与最短作业优先相同的思想,其中最短的进程首先被服务,更长的进程必须等待轮到它们。比较 I/O 调度中的 SJF 概念,轨道最接近被服务的请求(在磁盘上传播距离最短的请求)是下一个被满足的请求。与 FCFS 相比的主要优点是它最大限度地减少了整体搜索时间。它有利于容易到达的请求,并将旅行推迟到那些不方便的地方。 - 扫描算法:
SCAn 使用一个状态标志,告诉手臂的方向,它告诉手臂是向磁盘中心移动还是向另一侧移动。该算法将臂从磁盘末端移动到中心磁道,为每个请求提供服务。当它到达最里面的磁道时,它会反转方向并移向磁盘上的外磁道,再次为其路径中的每个请求提供服务。 - 看【电梯算法】 :
这是 SCAN 算法的一种变体,除非有待处理的请求,否则 arm 不一定会一直到达磁盘的任一侧。它在为请求提供服务之前先行查看请求。一个大问题是“为什么我们应该使用 LOOK 而不是 SCAN?”。 LOOK 优于 SCAN 的主要优点是它丢弃了 I/O 请求的无限延迟。 - SCAN 的其他变体:
- N 步扫描:它保留所有待处理的请求,直到手臂开始返回。新请求被分组用于下一个轮换周期。
- C-SCAN [Circular SCAN] :它提供统一的等待时间,因为在向内循环期间,手臂在途中处理请求。要了解更多信息,请参阅 SCAN 和 C-SCAN 之间的区别。
- C-LOOK [C-SCAN 的优化版本] : Arm 不一定会返回到编号最低的轨道,它会从要服务的最低请求返回。它优化了 C-SCAN,因为如果不需要,手臂不会移动到磁盘的末端。要了解更多信息,请参阅 C-LOOK 和 C-SCAN 之间的区别。