Lions' 本読み (106)

ある意味朝練。なんとなく 15 章から目を通すも、やっぱり RK ディスクドライバの章は微妙です。ちゃんと仕様書読んでないから、というのは承知してるのですがどうも微妙。
とは言え、色々確認している内にようやくなんとなく見えてきたのかどうか。

  • bread() getblk() はバッファヘッダを戻す
  • inode 配列は使用中の i-node なオブジェクトを管理している模様
  • ialloc 手続きで使われている ino についての誤解

ということでようやく ialloc 手続きで何をしているか、が理解できたのかどうか。
とりあえず ialloc の二つめの繰り返しなブロックでは未使用の inode 番号を確保して fp->s_inode な配列に格納 (100 個分) している、ということは分かったんですが、やはりバッファヘッダの b_addr に何が格納されているのかがアレ。
とりあえず以下な部分は宿題ってことにします。

7097            bp = bread(dev, i+2);
7098            ip = bp->b_addr;
7099            for(j=0; j<256; j=+16) {
7100                    ino++;
7101                    if(ip[j] != 0)
7102                            continue;

手掛りてきには smount (6086) 手続きで mount 構造体オブジェクトのスーパーブロックな属性に 512 をアサインして

6123    smp->m_bufp = getblk(NODEV);

事前に読み出しているスーパーブロックの

6116    mp = bread(d, 1);

b_addr 属性にコピーしとるんですが

6124    bcopy(mp->b_addr, smp->m_bufp->b_addr, 256);

これ、bread (4754) が戻すオブジェクトは一体何なのか、という話ですな。正確には getblk (4921) になるのか。
とりあえず b_addr な xref を引きつつ確認してみます。何かあればメモを追記の方向。

追記

getblk (4921) を確認した方が良さげ、という結論。バッファな領域はシステムの中で唯一で

4720 char buffers[NBUF][514];

バッファヘッダも同じく

4535 } buf[NBUF];

ということで getblk (4921) がその割り当てをしてる、という事なのかどうか。
これから読みます (0859)。