[[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)]]