[[PageNavi(internal24-navi)]]
{{{ comment
h2w-title:バッファキャッシュの構造
}}}
= バッファキャッシュの構造 = #SECTION03220000000000000000
キャッシュしているバッファは高速に検索できるよう下図のようにハッシュ管理(hash_table[])されている。ハッシュ値は、デバイス番号とブロック番号から計算される。
ディスクブロックと一致するデータを持つバッファは、lru_list[BUF_CLEAN]に古い順番にリンクされる。(クリーンなバッファと呼ぶ)
書き込みのあったバッファは基本的に即ディスクには書き込むことはせず、遅延書き込みとしている。(性能向上が目的)遅延書き込みのバッファはBH_Dirtyフラグを立てた後、lru_list[BUF_DIRTY]にリンクされる。これらのデータは、いづれbdflushデーモンなどにより古いバッファから順にディスクへ書き戻される。書き戻されたあとは再びlru_list[BUF_CLEAN]に繋ぎ直される(時間的に遅延されることがある)。
I/O処理中のバッファはロックし(BH_Lockを立てる)、他のプロセスからのアクセスをブロックする。書き込みI/O処理中のバッファはlru_list[BUF_LOCKED]にリンクされる。読み込みI/O処理は、バッファをはlru_list[BUF_CLEAN]にリンクしたまま行われる。
lru_list[BUF_PROTECTED]は、各種バッファ操作で開放されないようにされたバッファ(BH_Protectedが立っている)をリンクするために用いられる。RAMディスクなどの用途に利用する場合に使用される。BH_Protectedが立ったバッファでも、lru_list[BUF_DIRTY]やlru_list[BUF_LOCKED]にリンクされることもある。
利用されていない空のバッファは、バッファサイズ毎に分類されフリーリストfree_list[]に繋げられている。
[[Embed(internal24-images:img21.gif)]]
----
''(NIS)HirokazuTakahashi [[BR]]2000年12月09日 (土) 23時55分06秒 JST''1
[[PageNavi(internal24-navi)]]