我最近正在学习操作系统的磁盘调度部分。我可以理解这个问题的各种算法,如FCFS,LIFO,SSTF,SCAN等。但我想知道这些算法在哪里实现?
我不认为操作系统是答案,因为操作系统无法了解I / O设备的详细信息。那么它们是在设备上实现的吗?谁能为我澄清一下?任何相关的文献或链接将不胜感激。
答案 0 :(得分:2)
在实践中,disk scheduling(例如重新排序未决磁盘读取以最小化旋转延迟)在今天不如在XX th 世纪那么重要。
硬盘的使用可能较少,有利于SSD,而且它们的速度甚至更慢。快速RAM访问时间。
内核看到的磁盘扇区已由disk controller本身重新组织,因此CHS寻址(由OS kernel看到)与几何不对应现实
hard disk drive今天更加智能,其内部控制器具有重要的内存和计算能力。 SATA协议有一些“更高级别”的请求(例如TRIM)。阅读SMART和hybrid drives。
但是,应用程序代码可以向操作系统提供有关访问模式的提示。查看posix_fadvise(2)中的示例。
答案 1 :(得分:1)
简单的答案是,现在这一切都发生在驱动器控制器中。
在这些日子里,操作系统通常分两层实现磁盘I / O.顶部是一个独立于驱动器的逻辑层。这将驱动器视为一系列块。下面是一个物理层,将磁盘视为盘片,轨道和扇区。由于驱动器之间的物理细节不同,因此物理层通常在磁盘(或磁盘类)特定设备驱动程序中实现。
在这些黑暗时期,您经常需要等待驱动器供应商创建新的设备驱动程序才能升级您的操作系统。
在20世纪80年代中期,磁盘驱动器开始变得普遍,以提供逻辑I / O接口。设备驱动程序不再看到磁盘/盘片/扇区。相反,它只是看到了一组逻辑块。驱动器负责处理物理位置和重定向坏块(操作系统用来处理的任务)。这允许单个设备驱动程序管理多种类型的设备,共享相同的接口,并且仅在逻辑块的数量上有所不同。
现在,您很难找到不提供逻辑接口的磁盘驱动器。
涉及物理位置的所有调度算法都必须在磁盘驱动器中进行。
除非您正在进行磁盘驱动器工程,否则此类调度算法毫无意义。如果你学习硬盘驱动器工程,期望占领很快消失。