総合手引 | セクション 9 | English | オプション |
#include <sys/param.h>
#include <sys/vnode.h>
個々の 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_* マクロによって使用されます。
VNON | 型なしです。 |
VREG | 通常ファイルです。 VM オブジェクトの支持が有るかもしれませんし無いかもしれません。 必ず支持オブジェクトを取得したい場合には、 vfs_object_create(9) を呼び出します。 |
VDIR | ディレクトリです。 |
VBLK | ブロック型デバイスです。 VM オブジェクトの支持が有るかもしれませんし無いかもしれません。 必ず支持オブジェクトを取得したい場合には、 vfs_object_create(9) を呼び出します。 |
VCHR | 文字型デバイスです。 |
VLNK | シンボリックリンクです。 |
VSOCK | ソケットです。 通知ロックは動作しないでしょう。 |
VFIFO | FIFO (名前付きパイプ) です。 通知ロックは動作しないでしょう。 |
VBAD | 古い形式のバッドセクタマップです。 |
VFIFO/VSOCK のコードになぜか "struct fileops" が使用されている理由は、 カーネルへの VFS コードの不完全な統合の文化遺産です。
vnode(9) インタロックを保持している時の malloc() または free() への全ての呼出しは、VM オブジェクトと vnode のもつれ合いのために、 LOR (ロック順序の逆転) を引き起こします。
VNODE (9) | May 20, 2003 |
総合手引 | セクション 9 | English | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.