fs.c struct inode* idup(struct inode *ip)

トップページ
jupiteroak.hatenablog.com


fs.c
https://github.com/mit-pdos/xv6-public/blob/master/fs.c#L276

struct inode* idup(struct inode *ip)
{
  acquire(&icache.lock);
  ip->ref++;
  release(&icache.lock);
  return ip;
}

idup関数は、引数で渡されたiノードへの参照を1つ増やします。

引数 struct inode *ip
操作対象となるiノードのアドレスです。

戻り値 inode構造体のアドレス
操作対象となるiノードのアドレスです。


処理の内容

クリティカルセクションの入口を定める

acquire(&icache.lock);

メインメモリ上に用意されているiノードのキャッシュ領域(icache)を排他制御するために、acquire関数を呼び出してロックを取得し、クリティカルセクションの入口とします。

iノードの参照回数を増やす

ip->ref++;

iノードの参照回数をインクリメントします。

クリティカルセクションの出口を定める

release(&icache.lock);

release関数を呼び出して取得していたロックを解放し、クリティカルセクションの出口とします。

iノードのアドレスを戻り値としてリターンする

return ip;