Show page source of internal22-58-バッファの確保 #25361

[[PageNavi(internal22-navi)]]

{{{ comment
h2w-title:バッファの確保
}}}
 

= バッファの確保 = #SECTION03230000000000000000

バッファの確保はgetblk関数によって行われる。(伝統的UNIXと同じ)バッファ管理のアルゴリズムの基本は、「Design Of UNIX」にあるものと思われる。getblk関数の引き数は、デバイス番号、ブロック番号、バッファサイズの三つである。大雑把なアルゴリズムは以下のとおりバッファキャッシュ域本体とその領域を管理するbuffer_head構造体は必要に応じて動的に拡張される。

{{{
   getblk(デバイス番号、ブロック番号, バッファサイズ)
      for(;;) {
           if(目的のバッファがハッシュテーブルに見つかった) {
                バッファの参照数を一つ上げる
                if(バッファがクリーンか?)
                     そのバッファをlru_list[BUF_CLEAN]の最後に繋ぎなおす
                return バッファ;
           }

           if(free_list[]から目的のサイズのバッファを取ってくるのに成功) {
               バッファヘッドを初期化し、ハッシュに登録する。
               return バッファ;
           }

           新たにメモリを確保しfree_list[]に登録
      }
}}}

----

''(NIS)HirokazuTakahashi [[BR]]2000年06月11日 (日) 22時29分57秒 JST''1

[[PageNavi(internal22-navi)]]