Lions' 本読み (92)

朝練。バッファ操作の 17 章です。
基本的にここで言及されているバッファヘッダとバッファというものは 4535 および 4720 で静的にメモリ上に確保された領域になるはず。で、その領域がディスクキャッシュ (?) のようなものとして使われているみたい。

incore 手続き

リハビリ的取り組みとして中身掘削。とりあえず引数の adev というヤツが何なのか分からず。

4899 incore(adev, blkno)

ええと、こんな使われかたしてて

4906    dp = bdevsw[adev.d_majar].d_tab;

どうやら以下な構造体オブジェクトらしい。

4604 struct {
4605        char d_minor;
4606        char d_major;
4607 };

あと、上記 4906 の d_tab という属性ですが、こんな初期化がされてて

4656 int (*bdevsw[])()
4657 {
4658  &nulldev, &nulldev, &rkstrategy, &rktab, /* rk */

d_tab という属性が &rktab で初期化されているのが分かります。rktab の定義は以下で

5386 struct devtab rktab;

struct devtab 型ということが分かります。あとはリストを順に手繰って引数と比較して云々してます。これ、デバイスが使ってる (関連する) キャッシュ (バッファ) をという事になるのかな。

4907    for(bp=dp->b_forw; bp != dp; bp = bp->forw)
4908            if (bp->b_blkno==blkno && bp->b_dev==dev)
4909                    return(bp);
4910    return(0);

先頭は struct devtab 型の b_forw 属性が持ってて、後は struct buf 型の b_forw 属性で次、次、という形になってるのが分かります。また、リストは循環しているので繰り返しの終了条件もアレですね。