2011-12-05 16 views
0

ブロックデバイスの書き込みの仕組みを理解しようとしています。私の理解はすべての書き込みがセクターに合わせる必要があります。したがって、セクタサイズが512バイトの場合、すべての書き込みサイズは512バイトです。さて、私はファイルを作成し、それに順番に書き込むことを始めましょう(アプリケーション側ではバッファリングなし)。ここでは、ファイルのオフセット0に16バイトを書き込むことから始めます。これはどのようにしてブロックレベルでの書き込みに変換されますか? 「セクタサイズ」のデータ量を書き込んでからディスクにプッシュするまでバッファリングされていますか? fsyncが呼び出された場合、残りのバイトは埋め込まれてから書き出されますか?理解は正しいのですか、それとも私の方法ですか?ブロックデバイスの書き込み

フォローアップの質問は次のとおりです。ファイルサイズが64Kであるとします。オフセット64で16バイトのランダム書き込みを実行するとします。次に、512バイトの適切なセクタが読み込まれ、16バイトがオフセット64でバッファに書き込まれ、次に512バイトがディスクに書き込まれます。理解は正しいですか?

答えて

0

Read-Modify-Writeと呼ばれています。最初にセクタを読み取り、要求されたバイトを変更して書き戻す必要があります。
フルセクタ書き込みの場合のみ、この手順を無視できます。

私はLinuxについてよくわかりませんが、Windowsの場合、バッファがいっぱいになる(バッファはセクタサイズの倍数になる可能性が高い)まで、通常はバッファリングを実行するか、完全にバッファリングしてスローしないようにしますバッファリングを要求したかどうかによって、書込みがアライメントされていないか、完全セクタでない場合の例外です。

関連する問題