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)。