ソリッドステートストレージでシークは何をしますか?


13

メカニカルストレージでは、低レベルのディスク操作seek()により、ハードドライブヘッドがディスクの所定の領域から読み取る準備ができる場所に移動します。

SDカード、フラッシュドライブ、SSDなどのソリッドステートストレージでは、ハードウェアの可動部分はなく、電気信号のみがあります。

NAND不揮発性RAMテクノロジーがハードウェアの基礎であると仮定すると、seek()そのようなデバイスのハードウェアレベルで実際に実行される機能は何ですか?

明確にするために、次のことが起こることをすでに知っています。

  1. seek()ユーザースペースプログラムは、システムコールまたはOS固有の同等なものを呼び出します

  2. カーネルはシステムコールを解釈し、SATAコントローラーにメッセージを送信してシークします

  3. SATAコントローラーはコマンドを解釈し、接続されているディスクデバイス(ソリッドステート)にシークするように指示します(または、ソリッドステートであると認識し、それさえ伝えないほど賢いのでしょうか?)

  4. 知らないのは、ソリッドステートデバイスがすることです??? 「シーク」コマンドで。

オペレーティングシステムに依存する詳細がある場合は、カーネルバージョン3.2を備えたGNU / Linuxの比較的標準的なデスクトップバージョンを想定します。


2
私はそれが大きな脂肪NOPを行うと思います。冗談ですが、もし私がSSDドライブだったら、できる限り早く物事が起こるように、「予防的な」読み取りをキャッシュに入れます。しかし、これは私は塩の粒とそれを取る、およそわずかなアイデアを持っていない何かの漠然と推測...あるとして
ppeterka

低レベルのストレージインターフェイスでは、「シーク」操作が使用されなくなったと思います。それらが存在する場合、次のI / O操作のために保存された位置を変更するだけです。
デビッドシュワルツ

回答:


4

Linuxを参照している場合、シークは必要なバイト数だけ先に進みます。例えば:

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

ディスクの先頭にゼロの1024バイトのコピーを開始します。sdbがsdカードまたはssdドライブであるかどうかは関係ありません。抽象化と呼ばれる小さなことのために、実際の仕組みは下位レベルで処理されます。

更新

あなたの言っていることがわかりました。私のsdカードの例に従って、フラッシュメモリはpagesと呼ばれるものを使用し、ページは特定のサイズになります。シークが来ると、OSはコマンドをsdカード/カードコントローラーに送信して、読み取りと書き込みのために特定のページに移動します


ファイル内で論理的に進むことはわかっていますが、抽象的な「ブロック」という点でのファイルへの論理的な影響は別として、ハードウェアは実際にシークするように指示されたときに別のことを行いますか?lseek()必要に応じて、システムコールを特定の例として見ることができます。このシステムコールは、論理的なシークを行うだけでなく、メカニカルディスクを扱うときにHDDヘッドを移動させることも知っているので、SSDは何をしますか?
allquixotic

@allquixotic回答を更新しました。
MDMoore313

1
物理的に回転しているハードドライブでも、OSはコマンド(SCSIコマンド、ATA / SATAコマンド、またはUSB大容量記憶装置コマンド)をドライブに送信してLBA Xを取得します。ドライブのファームウェアがそれを行います。ストレージコマンドに応答してSSDファームウェアが何を行うかについてのアイデアが必要な場合は、Jasmine OpenSSDプロジェクトの仕様を調べてみてください。そのいくつかは非常に低いレベルで説明しています。
ローレンス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.