对于机械存储来说,低级磁盘操作seek()
会导致硬盘磁头移动到某个位置,以便它们准备从磁盘的给定区域读取数据。
对于固态存储(例如 SD 卡、闪存驱动器和 SSD)而言,硬件没有移动部件,只有电信号。
假设NAND非易失性RAM技术是硬件的基础,seek()
那么对于这样的设备来说,在硬件层面上实际上发挥什么功能呢?
需要明确的是,我已经知道发生了以下情况:
用户空间程序调用
seek()
系统调用或特定于操作系统的等效调用内核解释系统调用并向 SATA 控制器发送消息以寻求
SATA 控制器解释该命令并告诉所连接的磁盘设备(固态)进行寻道(或者也许它足够智能,可以识别出它是固态的,甚至没有告诉它??)
我不知道的是,固态设备???使用“寻找”命令。
如果有依赖于操作系统的细节,则假设 GNU/Linux 的桌面版本相对标准,内核版本为 3.2。
答案1
如果您指的是 Linux,seek 仍会向前移动所需的字节数。例如:
dd if=/dev/zero of=/dev/sdb bs=512 SEEK=2
将开始将 1024 个字节的零复制到磁盘的开头,sdb 是 sd 卡还是 ssd 驱动器并不重要,因为有一个叫做抽象这一过程的实际机制是在较低层次上进行的。
更新
我明白你的意思了。按照我的 SD 卡示例,闪存使用一种叫做页面,并且页面具有特定的大小。当寻道发生时,操作系统会向 SD 卡/卡控制器发送命令,以移动到某个页用于阅读和写作。