寻求与固态存储有什么关系?

all*_*tic 13 ssd

对于机械存储,低级磁盘操作seek()会导致硬盘驱动器磁头移动到某个位置,以便它们准备好从磁盘的给定区域进行读取。

对于固态存储,例如 SD 卡、闪存驱动器和 SSD,没有硬件的移动部件,只有电信号。

假设NAND非易失性RAM技术是硬件的基础,那么seek()对于这样的设备,在硬件层面实际执行什么功能?

为了清楚起见,我已经知道会发生以下情况:

  1. 用户空间程序调用seek()系统调用或特定于操作系统的等价物

  2. 内核解释系统调用并向 SATA 控制器发送消息以寻求

  3. SATA 控制器解释命令并告诉连接的固态磁盘设备进行搜索(或者它可能足够聪明以识别它是固态并且甚至不告诉它??)

  4. 知道的是,固态设备可以???用命令“寻找”。

如果有取决于操作系统的详细信息,请假设内核版本为 3.2 的相对标准的 GNU/Linux 桌面版本。

MDM*_*313 4

如果您指的是 Linux,seek 仍会向前移动所需的字节数。例如:

dd if=/dev/zero of=/dev/sdb bs=512 SEEK=2
Run Code Online (Sandbox Code Playgroud)

将开始将零 1024 字节复制到磁盘的开头,无论 sdb 是 SD 卡还是 SSD 驱动器,都没有关系,因为有一个称为抽象的小东西,实际机制是在较低级别处理的。

更新

我现在明白你在说什么了。按照我的 SD 卡示例,闪存使用称为“页面”的东西,并且页面具有特定的大小。当寻道到来时,操作系统向 sd 卡/卡控制器发送命令,移动到某个页面进行读写。

  • 即使在物理旋转硬盘驱动器上,操作系统也会向驱动器发送命令(SCSI 命令、ATA/SATA 命令或 USB 大容量存储命令)以获取 LBA X。主机实际上最终不会告诉驱动器移动硬盘在任何级别上,驱动器的固件都可以做到这一点。如果您想了解 SSD 固件响应存储命令的功能,请查看 Jasmine OpenSSD 项目的一些规范(如果可以找到),其中一些规范在非常低的级别上进行了解释。 (2认同)