这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

I/O 管理

内容与总线和输入输出系统关联很大,放在一起对比复习。应熟练掌握磁盘的调度算法。
# 输入/输出管理

## I/O管理基础

- 设备的基本概念
- I/O控制方式
- I/O软件层次结构
- I/O应用程序接口

## 设备独立软件

- 缓冲区管理
- 设备分配和回收
- SPOOLing
- 设备驱动程序接口

## 外存管理

- 磁盘
- 固态硬盘

1 - I/O 设备

需熟练掌握 I/O 控制方式和软件层次,常在选择题中考察。本节建议和计算机组成原理中的 I/O 系统 共同学习。

I/O 接口类型

根据设备类型的不同,我们将 I/O 接口 分为三种类型:

  1. 块设备(Block Devices):

块设备(Block Device)是计算机中一类以 固定大小的数据块为单位 进行数据读写的 I/O 设备,通常用于存储和检索大量数据。它们 支持随机访问,意味着可以直接定位到任意数据块,而无需按顺序读取。

典型例子包括机械硬盘(HDD)、固态硬盘(SSD)和 USB 闪存盘。块设备的数据传输速率较高,但涉及复杂的控制器和协议(如 SATA 或 NVMe),因此在操作系统中通常由专门的驱动程序管理。

  1. 字符设备(Character Devices):

字符设备是另一类 I/O 设备,以 连续的字符流形式 进行数据传输,不支持随机访问,也不依赖数据块的概念。它们通常用于与硬件设备交互,如键盘、鼠标、串口终端或打印机。字符设备的数据流是顺序的,适合实时或低速数据传输场景。

例如,键盘输入的字符流直接发送到系统,而无需缓存整个数据块。字符设备在操作系统中通常通过简单的驱动程序管理,且不涉及文件系统,适合处理非结构化数据。

  1. 网络设备(Network Devices):

网络设备是专门用于计算机网络通信的 I/O 设备,负责在计算机与网络之间传输数据包。它们包括网络适配器 和调制解调器等设备。网络设备 以数据包为单位 工作,通常通过协议栈(如 TCP/IP)处理数据,支持点对点或广播通信。

与块设备和字符设备不同,网络设备更注重数据的高速传输和实时性,常涉及中断机制和 DMA(直接内存访问)来提高效率。操作系统通过网络驱动程序管理这些设备,以实现网络连接和数据交换。

I/O 控制方式

在计算机系统中,I/O(输入/输出)控制方式决定了 CPU 与外设之间如何协作完成数据传输。主要有三种方式,每种方式在性能、复杂度与使用场景上各有不同:

  • 程序查询方式: 又称“轮询方式”,CPU 主动不断地检查外设状态是否准备好。在设备较少、交互不频繁的场景下实现简单,但会占用大量 CPU 时间,效率较低。

  • 程序中断方式: 外设准备就绪后向 CPU 发出中断信号,CPU 暂停当前任务处理 I/O 操作,相比轮询更高效。适用于响应及时性要求较高的系统,能够显著降低 CPU 的无效等待。

  • DMA 方式: 即“直接内存访问”,在数据量大、频繁传输的场景中尤为高效。CPU 只负责启动 DMA 控制器,数据传输过程由 DMA 独立完成,显著提高系统整体效率。

I/O 软件层次

I/O 软件层次是计算机系统中用于管理和协调输入输出操作的软件架构,从用户应用程序到硬件设备,分为多个层次,每一层负责特定的功能,确保高效、可靠的 I/O 操作。

用户层I/O软件
设备独立性软件
设备驱动程序
中断处理程序
硬件
I/O 请求
I/O 应答
执行 I/O 操作
设置设备寄存器;检查状态
命名;保护;分块;缓冲;分配
产生 I/O 请求;格式化 I/O;SPOOLing
I/O 软件层次
I/O 完成时唤醒驱动程序

用户层 I/O 软件

用户层 I/O 软件是 I/O 软件体系结构的最上层,直接与用户应用程序交互,提供标准化的接口 以便程序能够访问 I/O 设备。

它主要包括库函数和系统调用接口,例如 C 语言中的 stdio 库(提供 printf、scanf 等函数)或 POSIX 系统调用(如 read、write)。这些软件封装了底层的复杂性,让用户程序无需关心具体设备细节即可进行输入输出操作。

设备独立性软件

设备独立性软件位于用户层和设备驱动程序之间,负责屏蔽不同 I/O 设备的硬件差异,提供统一的接口供上层软件使用。它 实现了设备无关的功能,例如文件系统管理、设备命名、缓冲管理和错误处理。

例如,操作系统通过设备独立性软件将不同类型的存储设备(如硬盘、USB 驱动器)抽象为统一的文件系统接口,程序只需操作文件路径而无需关心底层设备类型。此外,它还管理设备的分配与释放,避免多个进程同时访问同一设备导致冲突。设备独立性软件的核心作用是提高系统的模块化和可移植性。

设备驱动程序

设备驱动程序是 I/O 软件层次中直接 与具体硬件设备交互 的部分,每个设备驱动程序针对特定类型的硬件设备设计,负责将设备独立性软件的通用命令转换为设备能够理解的特定指令。

例如,一个硬盘驱动程序会处理扇区读写命令,而一个打印机驱动程序可能发送控制字符序列。驱动程序通常由设备制造商提供,运行在操作系统的内核态,能够直接访问设备寄存器和端口。由于硬件设备的多样性,驱动程序需要处理设备初始化、数据传输和错误恢复等任务,是连接软件与硬件的关键桥梁。

中断处理程序

中断处理程序是 I/O 软件层次中 专门处理硬件中断 的部分,当设备完成操作或发生事件(如数据到达、错误发生)时,硬件会触发中断信号,中断处理程序迅速响应以处理这些事件。它运行在极低的层次,通常以极高的优先级执行,负责保存中断现场、处理设备状态、通知上层软件或触发后续操作。

例如,当网卡接收到数据包时,中断处理程序会将数据移到内存并通知网络协议栈。由于中断处理需要极快的响应速度,代码通常高度优化且精简,尽量减少处理时间,以避免影响系统性能。

硬件

硬件是 I/O 软件层次的最底层,直接负责 执行物理 I/O 操作,包括实际的设备控制器、寄存器、端口和数据传输通道。硬件层由具体的 I/O 设备(如硬盘、键盘、网络适配器)及其控制器组成,控制器通过寄存器和端口接收驱动程序的指令,执行数据读写或状态查询等操作。

例如,硬盘控制器通过 DMA(直接内存访问)将数据直接传输到内存,而网卡通过硬件队列处理数据包。硬件层的性能和特性直接决定了 I/O 操作的效率,软件层的所有操作最终都依赖硬件的物理实现。

2 - 设备管理

需了解操作系统缓冲区、设备管理和 SPOOLing 知识,可能在选择题中考察。

缓冲区

磁盘高速缓存

磁盘缓存指的是利用内存中的存储空间来暂存从磁盘中读出的一系列盘块中的信息。

因此,磁盘高速缓存从逻辑上属于磁盘,物理上则是驻留在内存中的盘块。

缓冲区

缓冲区是一块预留在内存中的区域,用于临时存放数据,从而使得输入/输出操作与其他处理操作可以相对独立地进行。缓冲区的使用可以减少 I/O 操作的等待时间,提高系统的整体效率。

单缓冲

在单缓冲策略中,只有一个缓冲区用于数据的读取或写入。

工作过程:

  • 数据从源(例如,磁盘)读入到单个缓冲区。
  • 当数据在缓冲区内时,应用程序可以从该缓冲区中处理数据。
  • 当应用程序处理完缓冲区中的数据并需要更多数据时,新的数据再次被读入到同一缓冲区中。

缺点:当缓冲区被填满并且数据被应用程序处理时,I/O 操作必须等待,直到缓冲区再次可用。这可能导致 I/O 操作的延迟。

双缓冲

双缓冲使用两个缓冲区而不是一个。当一个缓冲区被应用程序用于读取或处理数据时,另一个缓冲区可以用于并行的 I/O 操作。

工作过程:

  • 数据从源读入到第一个缓冲区。
  • 当第一个缓冲区的数据被应用程序处理时,第二个缓冲区可以开始并行地加载下一批数据。
  • 一旦第一个缓冲区的数据被处理完毕,应用程序可以立即切换到第二个缓冲区,而第一个缓冲区则开始加载新的数据。

优点:

由于两个缓冲区交替使用,I/O 操作和数据处理可以并行进行,从而减少了等待时间,提高了效率。

工作区
缓冲区
I/O设备
输入
传送
用户进程
工作区
缓冲区
I/O设备
输入
传送
用户进程
缓冲区
循环缓冲

循环缓冲是一个固定大小的缓冲区,其特点是当达到缓冲区的尾部时,下一个位置自动“回绕”到缓冲区的开始位置。循环缓冲的主要优点是它可以无限地存储新数据,只要覆盖旧数据即可。

工作原理:

  • 循环缓冲有两个指针:一个是“写”指针,另一个是“读”指针。
  • 当新数据到来时,数据被写入“写”指针当前指向的位置,并将“写”指针向前移动。
  • 当数据需要被消费或读取时,数据从“读”指针的当前位置读出,并将“读”指针向前移动。
  • 如果“写”指针到达缓冲区的尾部并继续前进,它会回绕到缓冲区的开始位置。同样,“读"指针也会如此。
缓冲池

缓冲池是一组预先分配的缓冲区,这些缓冲区可以被系统中的多个进程或线程共享和重新使用。

工作原理:

  • 当一个进程需要一个缓冲区时,它从缓冲池中请求一个。如果可用的话,一个缓冲区会分配给该进程。
  • 一旦进程完成了对缓冲区的使用,它会将缓冲区返回到池中,使其可以被其他进程重新使用。
  • 如果缓冲池为空,进程可能需要等待,直到有其他进程释放一个缓冲区。

设备分配和回收

设备分配是指根据用户的 I/O 请求分配所需的设备。分配的原则是充分发挥设备的使用效率,尽可能地让设备忙碌,但又避免造成死锁。

从设备的特性来看,设备常使用以下三种使用方式:

  • 独占式使用设备
  • 分时共享使用设备
  • 以 SPOOLing 方式使用外部设备

数据结构

在操作系统中,为了有效管理和访问外围设备,经常使用一种数据结构叫做“设备控制表”(Device Control Table,简称 DCT)。这是一个特殊的数据结构,用于存储有关连接到系统的每个设备的信息。

     设备类型type
DCT 1
DCT 2
DCT n
     设备标识符deviceid
      设备状态
      指向控制器表的指针
      重复执行次数或时间
      设备队列的队首指针
设备控制表DCT

设备分配方式

  • 静态分配:在静态分配中,设备在程序开始执行时分配,并在程序执行完毕后才释放。这意味着该设备在程序执行期间是专用的,不会被其他进程共享。
  • 动态分配:在动态分配中,设备只在需要时被分配,并在不再需要时立即释放,这使得其他进程可以在第一个进程的 I/O 操作之间使用该设备。

分配安全性

  • 安全分配:安全分配意味着操作系统在分配资源时采用一种策略,确保系统始终处于一个不会导致死锁的状态。
  • 不安全分配:不安全的分配方式并不意味着系统必然会进入死锁,但它意味着系统采取了一种策略,可能会使其进入不安全状态。

逻辑和物理设备映射

在操作系统中管理设备时,涉及到两种名字:

  • 逻辑设备名:是用户和应用程序用来引用设备的友好名称或标识符。这些名字通常比物理设备名更容易记忆和使用。
  • 物理设备名 :物理设备名是用来直接与硬件通信的标识符。这些名称通常更加具体,并反映了设备的实际物理特性或位置。

操作系统通过逻辑设备表(LUT,Logical Unit Table)将逻辑设备名映射到物理设备名。 当应用程序或用户尝试访问一个设备时,操作系统首先查找逻辑设备表以确定逻辑设备名与哪个物理设备相关联。然后,操作系统使用表中的信息来管理对实际物理设备的访问。

SPOOLing 技术

SPOOLing(Simultaneous Peripheral Operations On-Line)技术,也被称为“假脱机”技术,是一种在计算机系统中用于管理 I/O 设备,尤其是打印机和磁带设备等慢速设备的方法。

SPOOLing 的核心思想是将输入/输出设备从计算机主处理单元中解耦,并将其与中间存储区域(通常是硬盘)相关联,从而可以缓冲数据。SPOOLing 技术实现了虚拟设备功能,可以将设备同时分配给多个进程

  1. 中间存储区:SPOOLing 使用磁盘作为中间存储区,将要输出到外部设备的数据先保存到这个区域。同样地,从外部设备读取的数据也首先存放在这个中间区域。
  2. 数据独立性:由于数据首先被存储在中间区域,主计算机处理和 I/O 操作可以相对独立地进行。这意味着当一个文件正在被打印时,另一个文件可以同时被存储在磁盘上等待打印,从而实现了设备的高效利用。
  3. 背景处理:SPOOLing 通常在后台进行,这意味着用户在提交了打印作业或其他 I/O 作业后可以继续执行其他任务,而 SPOOLing 系统会在背后管理所有的队列和设备操作。
  4. SPOOLing 的应用:最常见的 SPOOLing 应用是在打印环境中。当用户提交一个打印任务时,数据首先被发送到磁盘上的一个打印队列。打印守护进程(或服务)会定期检查这个队列,并将任务逐一发送到打印机。这种方式允许多个用户和应用同时提交打印任务,而不需要等待其他任务完成。
  5. 优势
    • 设备利用率:SPOOLing 可以提高设备的利用率,因为设备可以持续不断地工作,而不需要等待用户或计算机处理。
    • 用户响应时间:SPOOLing 可以减少用户需要等待设备完成工作的时间,因为数据的读/写是在背景中进行的。

3 - 磁盘

重点内容,需熟练掌握机械磁盘调度算法,在选择题中会考察,也可能在大题中考察相关调度算法。

磁盘管理

磁盘初始化

一个新的磁盘只是一个磁性记录材料的空白盘。在磁盘可以存储数据之前,必须对其进行 物理格式化(也叫做低级格式化)。

物理格式化是指在磁盘的物理表面上创建磁道(track)、扇区(sector)、写入控制信息 以及 测试和标记坏扇区等过程。通过这一过程,磁盘被划分为可供读写头访问的物理存储单元,为数据存储和检索提供基础结构。

一般来说,现代硬盘在出厂时已完成物理格式化,并优化了磁道和扇区的布局。用户通常只需进行逻辑格式化即可使用。

分区

Partition #1
Partition #2
Partition #3
Volume C:
Volume D:
Volume E:
Disk

在使用磁盘存储文件之前,操作系统首先需要对磁盘进行分区,并且将每个分区的起始扇区和大小都记录在磁盘 主引导记录 (MBR,Master Boot Record)的分区表中。这一过程为磁盘划分出若干逻辑存储区域,每个分区可以独立格式化并使用不同的文件系统,为数据的组织和管理提供了基础。

分区表是存储在磁盘主引导记录(MBR)或 GUID 分区表(GPT)中的关键数据结构,用于描述磁盘的分区布局(简单了解即可):

  • 在 MBR 结构中,分区表位于磁盘的第一个扇区(主引导记录),最多支持 4 个主分区或 3 个主分区加 1 个扩展分区,每个分区记录包含起始扇区、结束扇区、分区类型和大小等信息。
  • GPT 结构使用更现代的设计,支持更多的分区(通常 128 个),并存储在磁盘的前几个扇区,提供更高的可靠性和大容量磁盘支持。分区表的存在使操作系统能够准确识别和访问各个分区,确保数据存储的有序性和兼容性。

下图是一个 MBR 分区表的结构:

引导程序
分区入口 1
分区入口 2
分区入口 3
分区入口 4
引导签名
分区标志
起始 CHS 地址
分区类型
结束 CHS 地址
起始 LBA
扇区数量
%3CmxGraphModel%3E%3Croot%3E%3CmxCell%20id%3D%220%22%2F%3E%3CmxCell%20id%3D%221%22%20parent%3D%220%22%2F%3E%3CmxCell%20id%3D%222%22%20value%3D%22%22%20style%3D%22endArrow%3Dclassic%3BstartArrow%3Dclassic%3Bhtml%3D1%3Brounded%3D0%3B%22%20edge%3D%221%22%20parent%3D%221%22%3E%3CmxGeometry%20width%3D%2250%22%20height%3D%2250%22%20relative%3D%221%22%20as%3D%22geometry%22%3E%3CmxPoint%20x%3D%22140%22%20y%3D%22360%22%20as%3D%22sourcePoint%22%2F%3E%3CmxPoint%20x%3D%22140%22%20y%3D%22240%22%20as%3D%22targetPoint%22%2F%3E%3C%2FmxGeometry%3E%3C%2FmxCell%3E%3C%2Froot%3E%3C%2FmxGraphModel%3E
%3CmxGraphModel%3E%3Croot%3E%3CmxCell%20id%3D%220%22%2F%3E%3CmxCell%20id%3D%221%22%20parent%3D%220%22%2F%3E%3CmxCell%20id%3D%222%22%20value%3D%22%22%20style%3D%22endArrow%3Dclassic%3BstartArrow%3Dclassic%3Bhtml%3D1%3Brounded%3D0%3B%22%20edge%3D%221%22%20parent%3D%221%22%3E%3CmxGeometry%20width%3D%2250%22%20height%3D%2250%22%20relative%3D%221%22%20as%3D%22geometry%22%3E%3CmxPoint%20x%3D%22140%22%20y%3D%22360%22%20as%3D%22sourcePoint%22%2F%3E%3CmxPoint%20x%3D%22140%22%20y%3D%22240%22%20as%3D%22targetPoint%22%2F%3E%3C%2FmxGeometry%3E%3C%2FmxCell%3E%3C%2Froot%3E%3C%2FmxGraphModel%3E
64
Bytes
446
Bytes
4 Bytes
分区
MBR
MBR:磁盘的第一个扇区
每个分区的
启动扇区
分区 1
分区 2
分区 3
分区 4(扩展分区)

完成分区后,需对每个分区进行 逻辑格式化 (也称高级格式化)。逻辑格式化负责创建文件系统结构,使操作系统能够识别、组织和管理磁盘上的数据,主要包括生成文件系统的元数据、分配表和目录结构等。

注意

物理格式化和逻辑格式化对比

物理格式化(低级格式化)是在磁盘物理层面创建磁道、扇区和控制信息的过程,通常由制造商出厂时完成。它直接处理磁盘的硬件结构,擦除所有数据并标记坏扇区,为数据存储提供物理基础。

逻辑格式化(高级格式化)是在物理格式化基础上创建文件系统(如 NTFS、FAT32)的过程,由用户通过操作系统完成。它组织数据的逻辑结构,如文件分配表和目录,方便操作系统管理数据。

引导流程

ROM 固件
MBR 中的 bootloader
分区中启动扇区的引导程序
操作系统初始化程序

在计算机启动时,初始化硬件并加载操作系统的过程依赖于一系列引导程序。前文提到,磁盘存储文件前需分区,分区信息记录在主引导记录(MBR)的分区表中。启动流程具体如下:

  1. ROM:计算机加电后,ROM 中的固件(传统 BIOS 或现代 UEFI)首先运行。它初始化硬件,并寻找可启动设备(通常是磁盘)。ROM 中的小型自举代码指示磁盘控制器读取磁盘的第 0 号扇区(即 MBR)到内存。
  2. MBR 中的 Bootloader:MBR(主引导记录)位于磁盘的第一个扇区,包含引导代码、分区表和引导签名。MBR 的引导代码(即 Bootloader)被 ROM 加载并执行,它的任务是解析分区表,找到标有“活动分区”的引导分区,并加载该分区的第一个扇区。
  3. 分区的启动扇区(Boot Sector):活动分区的第一个扇区称为引导扇区(Boot Sector),包含特定于操作系统的引导代码(例如 Windows 的 NT Loader 或 Linux 的 GRUB 部分代码)。MBR 的 Bootloader 将控制权移交到引导扇区,引导扇区代码进一步加载操作系统内核和其他必要组件(如设备驱动程序),最终启动操作系统。
  4. 操作系统初始化程序:在分区的启动扇区中的引导代码执行结束后,控制权被转交给操作系统的初始化程序,该程序负责加载操作系统内核、加载设备驱动、初始化内存和硬件环境,然后将控制权传递给内核。

因此,启动流程可以概括为:ROM 中的固件 → MBR 中的 Bootloader → 分区启动扇区中的引导程序 → 操作系统的初始化程序,每一阶段都将控制权传递给下一阶段,直至操作系统完全运行。

坏块

随着时间的推移,物理磁盘上可能会出现无法读写的区域,这些区域被称为坏块。坏块可以是出厂时就存在的,也可以是由于磁盘的长期使用和磨损导致的。

对坏块的处理实质上就是使用某种机制使系统不去使用坏块。

机械硬盘调度算法

磁盘性能指标 我们知道 磁盘数据读取时间 包含寻道时间、旋转延迟以及传输时间。在一个时刻,磁盘可能有多个数据读写请求,这些数据可能分布在不同的磁道上,如何分配处理这些读写请求的顺序,也很大程度上影响了磁盘的性能。

注意

磁道的编号顺序:

在磁盘驱动器中,磁道编号通常是从外到内的。磁盘表面被划分为同心圆,这些同心圆称为磁道。最外面的磁道通常被赋予最小的编号(例如,0 号磁道),随着磁道向内圈逐渐增加,编号递增。这种编号方式允许磁盘的读写头更容易地定位到磁道的起始位置,因为磁盘的旋转通常是从外缘开始。

磁盘寻道调度算法包含以下几种:

FCFS

FCFS 即 First Come First Service,先来先服务算法。

FCFS 是一种最简单的磁盘调度算法,按照请求到达的先后顺序依次处理磁盘访问任务。

假设在当前时刻,磁道 55、58、39、18、90、160、150、38、184 分别先后到达,那么 FCFS 会有如下图所示的访问顺序:

0
0
18
18
38
38
39
39
55
55
58
58
90
90
100
100
150
150
160
160
184
184
200
200
FCFS
FCFS
Time
Time
Text is not SVG - cannot display

然而,由于不考虑磁头当前位置与请求位置的距离,磁头可能频繁长距离移动,导致平均寻道时间较长,尤其在请求分布不均时效率低下。

SSTF

SSTF 即 Shortest Seek Time First,最短寻道时间优先算法。

磁盘进行调度时每次都选择 距离当前磁头位置最近的请求 进行服务。 旨在最小化磁头的移动距离,从而降低平均寻道时间。它的核心思想是“贪心”,每次选择最优的下一步。

假设在当前时刻,磁道 55、58、39、18、90、160、150、38、184 正在等待服务,那么 SSTF 会有如下图所示的访问顺序:

0
0
18
18
38
38
39
39
55
55
58
58
90
90
100
100
150
150
160
160
184
184
200
200
SSTF
SSTF
Text is not SVG - cannot display

虽然 SSTF 在减少寻道时间上表现优异,但可能导致“饥饿”问题,即远离磁头的请求长时间得不到服务。SSTF 适用于请求分布较均匀的场景,但在请求密集或分布极不均的情况下可能不够公平。

SCAN

SCAN 即 电梯调度算法。

磁头从一个方向开始移动,直到该方向上没有更多的请求或达到边界,然后磁头改变方向并继续服务请求。因为磁头移动规律与电梯运行类似,所以这种算法也称为电梯调度算法。

假设在当前时刻,磁道 55、58、39、18、90、160、150、38、184 正在等待服务,磁头正在向内移动(向更高编号的磁道移动),那么 SCAN 会有如下图所示的访问顺序:

0
0
18
18
38
38
39
39
55
55
58
58
90
90
100
100
150
150
160
160
184
184
200
200
SCAN
SCAN
Text is not SVG - cannot display

SCAN 的优点是有效减少了磁头移动距离,同时避免了 SSTF 的饥饿问题,因为所有请求最终都会被处理。它在高负载场景下表现良好,但对于靠近磁盘边界或反向区域的请求可能等待时间稍长。 SCAN 广泛应用于需要平衡效率与公平性的场景。

C-SCAN

C-SCAN 即 Cycle Scan,循环扫描算法。

和 SCAN 相似,但进行了一些改进。在 C-SCAN 中,磁头始终沿一个方向移动(例如向外),处理沿途请求,到达磁盘边界后立即返回到另一端(例如最内侧)开始新一轮扫描,而不处理返回路径上的请求。

0
0
18
18
38
38
39
39
55
55
58
58
90
90
100
100
150
150
160
160
184
184
200
200
C-SCAN
C-SCAN
Text is not SVG - cannot display

C-SCAN 的优点是提供更均匀的等待时间,尤其对靠近磁盘两端的请求更公平,因为它避免了 SCAN 中反向移动时的偏向性。它的寻道效率略低于 SCAN,但适用于需要更高公平性和稳定性的场景,如实时系统。

对比

算法优点缺点
FCFS公平
简单
可能不是最优的,磁盘臂移动距离可能很长
SSTF通常比 FCFS 更高效
最小化磁盘臂的移动
可能导致某些请求长时间延迟或饿死
SCAN避免长时间等待磁盘两端可能经历不公平的等待时间
C-SCAN提供更均匀的等待时间中间部分的请求可能会被经过两次而不进行服务,直到磁头再次回来