假设我需要在 HDD 上创建和保存文件数据。HDD 只不过是一堆多个旋转磁盘。我的理解是文件数据被分成内存块的数量,这些内存块可以保存到 HDD 中的任何磁盘(在 HDD 中的磁盘堆栈中)。那是对的吗 ?
另一个相关问题是说两个写入或两个读取请求是同时执行的。它们会按顺序完成吗?一旦执行了一个任务,就只执行下一个任务,或者每个请求将以循环方式执行一段时间?
假设我需要在 HDD 上创建和保存文件数据。HDD 只不过是一堆多个旋转磁盘。我的理解是文件数据被分成内存块的数量,这些内存块可以保存到 HDD 中的任何磁盘(在 HDD 中的磁盘堆栈中)。那是对的吗 ?
另一个相关问题是说两个写入或两个读取请求是同时执行的。它们会按顺序完成吗?一旦执行了一个任务,就只执行下一个任务,或者每个请求将以循环方式执行一段时间?
操作系统看不到单独的磁盘盘片——它只将整个 HDD 视为单个线性存储设备,只能使用“逻辑块地址”(LBA) 访问。
通常最低编号的 LBA(从 0 开始)在外边缘,而最高编号的 LBA 在中心——但操作系统没有关于数据物理位置(例如在哪个磁盘盘片上)的信息。只有 HDD 的固件知道这一点。(我认为这通常是某种循环映射?)
(这同样适用于基于闪存的 SSD 或 USB 记忆棒——操作系统看到单个存储单元,而 SSD 本身决定如何将每个 LBA 放置到相应的闪存芯片。)
所以当操作系统需要保存一个文件时,
首先OS文件系统将文件分成块并决定在哪些LBA上存储文件(通常同一个文件的块保持靠近在一起,但不同的文件分散在周围);
然后 HDD 决定每个 LBA 使用哪个盘片/磁道/扇区。
这取决于操作系统的I/O 调度程序。请参阅此 PDF。
调度程序还可能根据设备类型(例如,旋转磁盘有“寻道时间”延迟,但闪存没有)、设备是否支持排队请求(例如,SATA AHCI 支持一次发送多个请求,但IDE 实际上没有)和其他因素。