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


13

使用机械存储时,低级别磁盘操作seek()会导致硬盘驱动器磁头移动到某个位置,以便可以随时从磁盘的给定区域读取数据。

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

假设NAND非易失性RAM技术是硬件的基础,那么seek()这种设备实际上在硬件级别执行什么功能?

明确地说,我已经知道会发生以下情况:

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

  2. 内核解释系统调用并将消息发送到SATA控制器以查找

  3. SATA控制器解释该命令并告诉连接的磁盘设备(固态)寻求(或者说它足够聪明,可以识别出固态甚至不告诉它?)

  4. 知道的是,固态设备确实可以???用命令“搜索”。

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


2
我认为它确实有很大的脂肪。开个玩笑,如果我是SSD驱动器,我将对缓存进行一些“预防性”读取,以确保事情尽快发生。但是,由于这只是对我没有丝毫想法的模糊的猜测,所以请带一点盐...
ppeterka 2013年

我认为低层存储接口中不再使用“搜索”操作。如果它们确实存在,则只需为下一个I / O操作更改存储位置。
David Schwartz

Answers:


4

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

dd if=/dev/zero of=/dev/sdb bs=512 SEEK=2

将开始将零1024字节复制到磁盘的开始位置,无论sdb是sd卡还是ssd驱动器都没有关系,因为有一点称为抽象的东西,因此它的实际机制在较低的层次上得到了解决。

更新资料

我明白你现在在说什么。在我的sd卡示例之后,闪存使用了称为pages的东西,并且页面具有特定的大小。搜索到时,操作系统将命令发送到sd卡/卡控制器,以移至某个页面进行读取和写入。


我知道,它在文件中向前推进逻辑的抽象的“块”的条款,但除了逻辑上的冲击文件,该硬件做的时候它实际上告诉寻求什么不同?lseek()如果需要,您可以将系统调用作为特定示例。我知道这个系统调用不仅在逻辑上寻找,而且在处理机械磁盘时还会导致HDD磁头移动,那么SSD会做什么呢?
allquixotic

@allquixotic我已经更新了答案。
MDMoore313 2013年

1
即使在物理旋转硬盘驱动器上,OS也会发送命令(SCSI命令,ATA / SATA命令或USB大容量存储命令)以驱动器获取LBAX。主机实际上并没有告诉驱动器移动磁盘驱动器。在任何级别上,驱动器的固件都可以做到这一点。如果您想知道SSD固件如何响应存储命令,请查看Jasmine OpenSSD项目的一些规范(如果能找到它们的话),其中有些可以从很低的层次上解释。
LawrenceC
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.