ファイルの先頭にコンテンツを追加すると、すべてのデータブロックが更新されますか?

ファイルの先頭にコンテンツを追加すると、すべてのデータブロックが更新されますか?

UFS(Unix File System)では、ファイルは直接または間接ブロックを参照する15個のポインタを持つinode構造で表されます。

下の画像を例に挙げてみましょう。

インデックスノード構造

Data右側に表示される各ブロックには、実際のファイルデータが含まれています。サイズはdata block通常4096で、ファイルシステムの作成時に決定されます。

40MBの大容量ファイルの場合、ほぼ1Kのデータブロックを占めています。この場合、ファイルにデータを追加すると、最後のブロックにのみ影響するか、最後のデータブロックにスペースがない場合は新しいデータブロックが作成されることがわかりました。

ただし、ファイルの先頭(約200バイト)にいくつかのデータを追加すると、下のデータブロックにカスケード効果があり、各データブロックの最後の200バイトが次のブロックに移動(またはプッシュ)されます。ワンピース?

同様に、最初のデータブロックの最初の200バイトを削除すると、子データブロックにカスケード効果がありますか?

それとも、通常、UFSまたはファイルシステムには、各データブロックに対していくつかのバッファスペースを予約してこの状況を処理する効率的な方法はありますか?

よろしくお願いします。

答え1

ほとんどのファイルシステムはファイルの先頭にデータを挿入することをサポートしておらず、Unixには対応するAPIはありません。ほとんどのオペレーティングシステムでファイルを変更する唯一の方法は、セグメントを上書きする(たとえばに変更)、データをaaaaaaaaaa最後aaabbbaaaaに追加する(たとえばにaaaaaaaaaa変更aaaaaaaaaacccc)、ファイルを切り捨てること(たとえばaaaaaaaaaaに変更aaaaa)です。

ファイルの先頭にデータを追加するには、追加したデータで新しいファイルを作成し、古いファイルの内容をコピーします。

これは元のUnixとほとんどの(すべてではありませんが)最新のUnix(そして通常はほとんどのオペレーティングシステム)に当てはまります。

関連情報