磁盘调度在哪里实现

where is disk scheduling implemented

我最近在学习操作系统的磁盘调度部分。我能理解这个问题的各种算法,像 FCFS、LIFO、SSTF、SCAN 等等。但我想知道这些算法是在哪里实现的?

我不认为操作系统是答案,因为 OS 无法知道 I/O 设备的详细信息。那么它们是在设备本身上实现的吗?谁能为我澄清一下?任何相关文献或链接将不胜感激。

实际上,disk scheduling(例如重新排序挂起的磁盘读取以最小化旋转延迟的意义)在今天不如 XXth 重要世纪.

  • 硬盘可能用得比较少,有利于 SSD,它们甚至更慢 w.r.t。快速 RAM 访问时间。

  • 内核看到的磁盘扇区已经被disk controller itself, so the CHS addressing (as seen by the OS kernel)重组了,不符合几何现实

  • hard disk drive is smarter today and its internal controller has significant memory and computing capabilities. The SATA protocol has some "higher level" requests (e.g. TRIM). Read about SMART and hybrid drives.

但是,应用程序代码可以向操作系统提供有关访问模式的提示。例如在 posix_fadvise(2).

中查找

另读Operating Systems: Three Easy Pieces

简单的答案是,如今,这一切都发生在驱动控制器中。

在过去,操作系统通常分两层实现磁盘 I/O。顶部是一个独立于驱动器的逻辑层。这将驱动器视为一组块。在这之下是一个物理层,将磁盘视为盘片、磁道和扇区。由于物理细节因驱动器而异,物理层通常在磁盘(或 class 个磁盘)特定设备驱动程序中实现。

在这些黑暗时期,您经常不得不等待驱动器供应商创建新的设备驱动程序,然后才能升级操作系统。

在 1980 年代中期,磁盘驱动器提供逻辑 I/O 接口开始变得普遍。设备驱动程序不再看到 disks/platters/sectors。相反,它只是看到了一组逻辑块。该驱动器负责物理位置和坏块的重定向(操作系统过去处理的任务)。这允许单个设备驱动程序管理多种类型的设备,共享相同的接口并且仅在逻辑块的数量上有所不同。

如今,您很难找到不提供逻辑接口的磁盘驱动器。

所有涉及物理位置的调度算法都必须在磁盘驱动器内进行。

除非你是做磁盘驱动工程的,否则这样的调度算法是相当没有意义的。如果你学的是硬盘工程,希望这个职业很快就会消失。