内核如何向硬盘发送 I/O 请求?

内核如何向硬盘发送 I/O 请求?

假设我有一个分布在不同扇区的文件。例如,假设物理扇区和逻辑扇区均为 512B。用户进程向内核发出读取文件的请求。假设该文件使用硬盘驱动器上的 3 个分布式扇区。

1)硬盘是否一次读取所有扇区并将整个(512 * 3)数据发送到内核?

*硬盘首先完整读取3个扇区,然后将数据传输到内核,512 * 3字节从HDD传输到内核。

2) HDD 可以一次读取多个扇区吗?不过,这似乎更多是与硬件相关的问题。

答案1

这取决于。现代类 Unix 操作系统的内核往往具有相当复杂的代码来提高 I/O 速度。最著名的功能是缓存:如果过去读取过某个扇区,则内存中可能仍然有一个副本,在这种情况下,根本不会向硬盘发送请求。其他典型的加速功能包括乱序访问(当有许多待处理的请求时,内核可能会以不同的顺序发出它们,以最小化搜索或更好地利用硬件允许的并行性)和预取(内核假设如果如果文件的扇区 0 到 5 已被读取,那么很可能会读取扇区 6,如果没有更好的事情可做,它将把扇区 6 读入缓存)。

是否可以在读取扇区0的请求完成之前发出读取扇区1的请求取决于磁盘总线和磁盘的能力。没有一般性的答案。

相关内容