VNODE(9) | FreeBSD Kernel Developer's Manual | VNODE(9) |
名称
vnode — ファイルまたはディレクトリの内部表現解説
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 オブジェクトの支持が有るかもしれませんし無いかもしれません。必ず支持オブジェクトを取得したい場合には、 vnode_create_vobject() を呼び出します。
- VDIR
- ディレクトリです。
- VBLK
- ブロック型デバイスです。 VM オブジェクトの支持が有るかもしれませんし無いかもしれません。必ず支持オブジェクトを取得したい場合には、 vnode_create_vobject() を呼び出します。
- VCHR
- 文字型デバイスです。
- VLNK
- シンボリックリンクです。
- VSOCK
- ソケットです。通知ロックは、動作しないでしょう。
- VFIFO
- FIFO (名前付きパイプ) です。通知ロックは、動作しないでしょう。
- VBAD
- vnode が再請求 (reclaim) されたことを示します。
実装に関する注
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 インタロックを保持している時の malloc(9) または free(9) への全ての呼出しは、VM オブジェクトと vnode のもつれ合いのために、 LOR (ロック順序の逆転) を引き起こします。
関連項目
malloc(9), VOP_ACCESS(9), VOP_ACLCHECK(9), VOP_ADVISE(9), VOP_ADVLOCK(9), VOP_ALLOCATE(9), VOP_ATTRIB(9), VOP_BWRITE(9), VOP_CREATE(9), VOP_FSYNC(9), VOP_GETACL(9), VOP_GETEXTATTR(9), VOP_GETPAGES(9), VOP_GETVOBJECT(9), VOP_INACTIVE(9), VOP_IOCTL(9), VOP_LINK(9), VOP_LISTEXTATTR(9), VOP_LOCK(9), VOP_LOOKUP(9), VOP_OPENCLOSE(9), VOP_PATHCONF(9), VOP_PRINT(9), VOP_RDWR(9), VOP_READDIR(9), VOP_READLINK(9), VOP_REALLOCBLKS(9), VOP_REMOVE(9), VOP_RENAME(9), VOP_REVOKE(9), VOP_SETACL(9), VOP_SETEXTATTR(9), VOP_STRATEGY(9), VOP_VPTOCNP(9), VOP_VPTOFH(9), VFS(9)作者
このマニュアルページは、 によって書かれました。February 13, 2010 | FreeBSD |