スポンサーリンク

VNODE(9) FreeBSD カーネル開発者マニュアル VNODE(9)

名称

vnode − ファイルまたはディレクトリの内部表現

書式

#include <sys/param.h>
#include <sys/vnode.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
通常ファイルです。 VM オブジェクトの支持が有るかもしれませんし無い かもしれません。必ず支持オブジェクトを取得したい場合には、 vfs_object_create(9) を呼び出します。

VDIR
ディレクトリです。

VBLK
ブロック型デバイスです。 VM オブジェクトの支持が有るかもしれません し無いかもしれません。必ず支持オブジェクトを取得したい場合には、 vfs_object_create(9) を呼び出します。

VCHR
文字型デバイスです。

VLNK
シンボリックリンクです。

VSOCK
ソケットです。通知ロックは動作しないでしょう。

VFIFO
FIFO (名前付きパイプ) です。通知ロックは動作しないでしょう。

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 (ロック順序 の逆転) を引き起こします。

関連項目

malloc(9), VFS(9)

作者

このマニュアルページは Doug Rabson が書きました。

FreeBSD 10.0 May 20, 2003 FreeBSD 10.0

スポンサーリンク