Lions' 本読み (104)

1100 から歯医者なので今 (0930) から 1h て若干中途半端。現時点の継続としては ialloc 手続きの二つめのブロックが何をしてるかワケワカ状態、というあたりか。
とりあえず手続き定義を睨んでみる事に (しかも薄目)。
俯瞰して見てみても良く分からん。最初らへんがこんなカンジ。

7096    for(i=0; i<fp->s_isize; i++) {
7097            bp = bread(dev, i+2);
7098            ip = bp->b_addr;
7099            for(j=0; j<256; j=+16) {

b_addr の定義が以下。

4520 struct buf
4521 {

/* snip */

4529    char *b_addr; /* 下位コアアドレス */

うーん、どーゆー意味だ。ループの中で ip[j] て形で参照されてるんですが、そもそも b_addr 属性って一体何、ってあたりを確認してみるに、b_addr 属性は binit() 手続きで初期化されているのかどうか。

5064    for (i=0; i<NBUF; i++) {
5065            bp = &buf[i];
5066            bp->b_dev = -1;
5067            bp->b_addr = buffers[i];

buffers はちょっと手前で静的に定義されてますね。

4720 char buffers[NBUF][514];

NBUF は 15 で #define されてます (引用略)。あら、でも binit て初期化される領域と ialloc で参照してる領域が同じか、というとそうとは限らないはずだな。
つうかこのあたりってコード見てるだけでは駄目だ。何か他の根拠を探さないと微妙。