Show page source of internal24-118-ext2_getblk関数アルゴリズム #25241

[[PageNavi(internal24-navi)]]

{{{ comment
h2w-title:ext2_getblk関数アルゴリズム
}}}
 

== ext2_getblk関数アルゴリズム == #SECTION03781000000000000000

以下にその大雑把なアルゴリズムを示す。アルゴリズム中に付いている◆印は同期書き込みを、◇印は遅延書き込みを表す。

{{{
  ext2_getblk(iノード、オフセット, ...)
        ファイルオフセットをブロック番号に変換(ext2_get_block関数)
        空のバッファを確保(getblk関数)
        if (新規割り当てれたブロックであった場合) {
              バッファをクリア(memset関数)
              バッファを有効にする(mark_buffer_update関数)
              ◇バッファの遅延書き込み要求をだす(mark_buffer_dirty関数)
        }
        バッファを返却
}}}

下図は、ちょうど二段間接ブロックが作成される時の、データの更新順を表したものである。◆の後ろに書かれた番号が更新順を表している。

 [[Embed(internal24-images:img41.gif)]]
 

'''問題点など'''

  1.  SYNCモードのマウント時でも、iノードと間接ブロック(一段〜三段)の	更新順序が逆。iノードに近い方から更新されているが、	その更新途中でシステムクラッシュすると、不定の値を持つ	間接ブロックが登録されてしまうことがある。	この間接ブロックの値によっては致命的なファイルシステム	破壊を引き起こす可能性がある。
  1.  SYNCモードのマウント時、ファイル拡張が連続すると、	その度ブロック確保とiノード(間接ブロック)への登録のため、	毎回iノード(間接ブロック)の同期書き込みが発生するため、	I/Oネックとなることが予想される。

----

''(NIS)HirokazuTakahashi [[BR]]2000年12月09日 (土) 23時55分06秒 JST''1

[[PageNavi(internal24-navi)]]