VNODE(9) FreeBSD カーネル開発者マニュアル VNODE(9)
名称
vnode − ファイルまたはディレクトリの内部表現 |
書式
#include <sys/param.h> |
解説
vnode は UNIX でのファイル活動の中心です。 vnode は struct vnode で記述さ れます。個々の活動中のファイル、個々の現在のディレクトリ、個々のマウント されたファイル、テキストファイル、およびルートのために割当てられた一意的 な vnode があります。 個々の vnode は 3 つの参照カウント、 v_usecount, v_holdcnt および v_writecount を持っています。最初のものはカーネル内でこの vnode を使用し ているクライアントの数です。このカウントは vref(9), vrele(9) および vput(9) によって管理されます。 2 番目のものはカーネル内でこの vnode の再 利用を拒否しているクライアントの数です。このカウントは vhold(9) および vdrop(9) によって管理されます。 vnode の v_usecount および v_holdcnt の両 方が 0 に達すると、それからその vnode はフリーリスト上に置かれ、ことに よっては別のファイルシステムで、別のファイルのために再利用されるかもしれ ません。フリーリストへのおよびフリーリストからの移行は、 getnewvnode(9), vfree(9) および vbusy(9) によって取り扱われます。 3 番目のものはファイル に書込み中のクライアントの数のカウントです。これは open(2) および close(2) システムコールによって管理されます。 vnode を返すあらゆる呼び出し (例えば vget(9), VOP_LOOKUP(9) など) は vnode の v_usecount を 1 ずつ増やします。呼び出し側が vnode の利用を完了 したときには、この参照は vrele(9) (または vnode がロックされていれば vput(9)) の呼び出しによって解放されるべきです。 その他の共通に使用される vnode 構造体のメンバは、名前キャッシュでの一貫性 を管理するために使用される v_id と、その vnode を所有しているファイルシス テムを指す v_mount と、その vnode が表現するオブジェクトの型を含む v_type と、その vnode のファイルシステム特有のデータを保存するためにファイルシス テムによって使用される v_data があります。 v_op フィールドは vnode の機能 を実装するファイルシステム内の関数を呼び出すための VOP_* マクロによって使 用されます。 |
VNODE の型
VNON
型なしです。 VREG VDIR VBLK VCHR VLNK VSOCK VFIFO VBAD 実装に関する注 |
VFIFO は /sys/kern/sys_pipe.c の "struct fileops" を使用します。 VSOCK は /sys/kern/sys_socket.c の "struct fileops" を使用します。その他の全ては /sys/kern/vfs_vnops.c の "struct fileops" を使用します。 VFIFO/VSOCK のコードになぜか "struct fileops" が使用されている理由は、 カーネルへの VFS コードの不完全な統合の文化遺産です。 vnode(9) インタロックを保持している時の malloc() または free() への全ての 呼出しは、VM オブジェクトと vnode のもつれ合いのために、 LOR (ロック順序 の逆転) を引き起こします。 |
関連項目
作者
このマニュアルページは Doug Rabson が書きました。 FreeBSD 10.0 May 20, 2003 FreeBSD 10.0 |