在哪里实现磁盘调度



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

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

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

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

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

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

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

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

除非您正在执行磁盘驱动器工程,否则此类调度算法毫无意义。如果您学习硬盘工程,预计该职业很快就会消失。

在实践中,磁盘调度(例如,重新排序挂起的磁盘读取以最小化旋转延迟)在今天不如二十世纪那么重要。

  • 硬盘可能较少使用,有利于SSD,而且它们甚至更慢,快速的RAM访问时间。

  • 内核看到的磁盘扇区已被磁盘控制器本身重新组织,因此 CHS 寻址(如操作系统内核所示)与几何现实不符

  • 如今,硬盘驱动器更加智能,其内部控制器具有重要的内存和计算能力。SATA协议有一些"更高级别"的请求(例如TRIM)。阅读有关 SMART 和混合驱动器的信息。

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

另请阅读操作系统:三个简单部分

最新更新