tail head cat sleep
QR code linking to this page

manページ  — VNODE

名称

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 が書きました。

VNODE (9) May 20, 2003

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.