web-dev-qa-db-ja.com

USBメモリスティックにはコントローラーとディスクキャッシュが搭載されていますか?

スピニングプラッタータイプのハードディスクには、オンボードコントローラーとオンボードディスクキャッシュがあることをよく知っています。

さて、「ディスク」キャッシュは(4GBまたは8GB)USBスティックにも存在しますか?ちなみに、ソリッドステートドライブはどうですか?

(ソリッドステートドライブは接続されているコンピューターのRAMよりも遅いので、ソリッドステートにオンボードディスクキャッシュがあるのは理にかなっていると思います。ただし、USBスティックは、ソリッドステートドライブに比べてバイト容量と物理的寸法の両方ではるかに小さいため、前者にはオンボードディスクキャッシュがない場合があります。)

コンテキスト:私は見つけようとしています:

  1. if /bin/sync Linuxで、OSが書き込み操作の完了を報告した直後に電源障害が発生した場合にデータ損失が発生しないことを完全に保証するために必要ですか?

  2. if /bin/mount -o sync ...そのようなオンボードキャッシュを「効果的に」無効にしますか(存在する場合)?

  3. そして最後に、OSがLinuxではなくWindowsである場合、上記のすべてに対する答えはどのようにうまくいくでしょうか?

4
Harry

はい、USBフラッシュドライブにはコントローラーといくつかのキャッシュが搭載されています。異なる速度で動作するデバイスを一致させる方法は他にありません。ウェアレベリングやパイプラインのようなことをする他の方法はありません。

oSが書き込み操作の完了を報告した直後に電源障害が発生した場合にデータ損失が発生しないことを完全に保証するためにLinuxで/ bin/syncが必要な場合はどうなりますか?

はい。ただし、それはデバイスのキャッシュとは関係ありません。これは、OSによって実装されたソフトウェアキャッシュと関係があります。

if/bin/mount -o sync ... '効果的に'そのようなオンボードキャッシュを無効にしますか(存在する場合)?

いいえ、OSキャッシュを無効にします。オンボードキャッシュを無効にすることはできません。無効にしないと、デバイスが機能しなくなります。 OSが準備ができるまでフラッシュから読み取られたデータをどこに保持しますか?フラッシュ書き込みが完了するまでOSが書き込んだデータはどこに保存されますか?

そして最後に、OSがLinuxではなくWindowsである場合、上記のすべてに対する答えはどのようにうまくいくでしょうか?

同じ答え。ハードドライブと同様に、ハードドライブのように機能する他のデバイスには、オンボードコントローラーとキャッシュがあります。

2
David Schwartz

さて、「ディスク」キャッシュは(4GBまたは8GB)USBスティックにも存在しますか?ちなみに、ソリッドステートドライブはどうですか?

いいえ。いいえ。これらのデバイスのフラッシュメモリは、R/Wヘッドアクチュエータを備えた回転プラッタよりもはるかに高速であるため、キャッシュは費用効果が高くありません。
しかし、これらのデバイスに「キャッシュ」がないからといって、ローカルバッファリングがないわけではありません。
USBまたはSATAインターフェイスとフラッシュメモリの間にセクターデータをバッファリングするためのメモリがまだあります。

oSが書き込み操作の完了を報告した直後に電源障害が発生した場合にデータ損失が発生しないことを完全に保証するためにLinuxで/ bin/syncが必要な場合はどうなりますか?

syncは、OSがすべてのバッファをデバイスに適切にフラッシュしたことを確認するために常に必要です。
write()の完了(指定された同期によって異なります)は、ユーザーまたはファイルのデータがシステムバッファーに転送されたこと、または書き込み操作が実際に完了したことを示す場合があります。ただし、ファイル内のデータに加えて、維持する必要のあるファイルシステムメタデータ(セクター割り当てテーブル、ファイル長のディレクトリエントリ、変更時間など)があります。

ただし、syncだけでは、書き込まれたすべてのデータが実際に周辺機器によって書き込まれたことを保証するのに十分ではありません。 syncに関連するシステムコールはsyncfsです。これは、これらがファイルシステムレベル専用であり、デバイスレベルではないことを意味します。デバイスレベルの同期操作とファイルシステムレベルの同期操作があります。 Unmountまたはeject操作は、デバイスが解放される前に、これらの最終的な同期確認を実行する必要があります。

if/bin/mount -o sync ... '効果的に'そのようなオンボードキャッシュを無効にしますか(存在する場合)?

いいえ、マウントレベルでのこの「同期」は、デバイスレベルの最適化に影響を与えるべきではありません。周辺機器のキャッシュを無効にできる場合は、mountがおそらく知らないioctl()によって行われると思います。

そして最後に、OSがLinuxではなくWindowsである場合、上記のすべてに対する答えはどのようにうまくいくでしょうか?

有意差はありません。

3
sawdust