fs.c void iinit(int dev)
トップページ
jupiteroak.hatenablog.com
fs.c
https://github.com/mit-pdos/xv6-public/blob/master/fs.c#L171
void iinit(int dev) { int i = 0; initlock(&icache.lock, "icache"); for(i = 0; i < NINODE; i++) { initsleeplock(&icache.inode[i].lock, "inode"); } readsb(dev, &sb); cprintf("sb: size %d nblocks %d ninodes %d nlog %d logstart %d\ inodestart %d bmap start %d\n", sb.size, sb.nblocks, sb.ninodes, sb.nlog, sb.logstart, sb.inodestart, sb.bmapstart); }
iinit関数は、iノードのキャッシュ領域を初期化します。
引数 dev
iノードの情報を記録したスーパーブロックが所属するハードディスク(マスタードライブ、スレイブドライブのどちらか)を示す値です。
処理の内容
initlock(&icache.lock, "icache");
initlock関数を呼び出して、icache(iノードのキャッシュ領域)の操作に関わるロックを初期化します。
for(i = 0; i < NINODE; i++) { initsleeplock(&icache.inode[i].lock, "inode"); }
メインメモリ上に用意されているiノードのキャッシュ領域にある全てのiノードエントリについて、スリープロックを初期化しておきます。
readsb(dev, &sb);
readsd関数を呼び出して、ハードディスクにあるスーパーブロックから内容を読み込み、読み込んだ内容を構造体変数sb(アドレス&sbが指定するメモリ領域)に保存します。
cprintf("sb: size %d nblocks %d ninodes %d nlog %d logstart %d\ inodestart %d bmap start %d\n", sb.size, sb.nblocks, sb.ninodes, sb.nlog, sb.logstart, sb.inodestart, sb.bmapstart);
cprintf関数を呼び出して、メッセージを出力します。