fs.c static void bzero(int dev, int bno)
トップページ
jupiteroak.hatenablog.com
fs.c
https://github.com/mit-pdos/xv6-public/blob/master/fs.c#L42
static void bzero(int dev, int bno) { struct buf *bp; bp = bread(dev, bno); memset(bp->data, 0, BSIZE); log_write(bp); brelse(bp); }
bzero関数は、引数devと引数bnoが指定するセクタ内のデータを0の値で初期化します。
引数 int dev
操作対象となるハードディスクドライブを指定します。
引数devが1の値の時は、マスタードライブを指定しています。
引数devが0の値の時は、スレイブドライブを指定しています。
引数 uint bno
初期化対象となるセクタのセクタ番号です。
処理の内容
bp = bread(dev, bno);
bread関数を呼び出して、セクタ番号bnoのセクタに対応しているバッファを取得します。
memset(bp->data, 0, BSIZE);
memset関数を呼び出して、バッファの内容(先頭アドレスがbp->data・サイズが引数BSIZEのメモリ領域)を0の値で使って初期化します
log_write(bp);
log_write関数を呼び出して、バッファbpに対応しているブロック(セクタ)を、ロギングにおけるトランザクションの管理対象として登録します。
brelse(bp);
brelse関数を呼び出して、バッファbpに関わるスリープロックを解放し、他のプロセスがこのバッファを利用できるようにします。