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 で参照してる領域が同じか、というとそうとは限らないはずだな。
つうかこのあたりってコード見てるだけでは駄目だ。何か他の根拠を探さないと微妙。