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 属性で次、次、という形になってるのが分かります。また、リストは循環しているので繰り返しの終了条件もアレですね。