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に関わるスリープロックを解放し、他のプロセスがこのバッファを利用できるようにします。