次のページ 前のページ 目次へ

5. ミニキャッシュと downcall

Coda FS ドライバは、upcall の回数を抑制するために、lookup および access の結果をキャッシュできます。upcall は、プロセスコンテキスト スイッチを行う必要があるので、コストがかかります。情報をキャッシュするこ とに対応して、Venus から FS ドライバにキャッシュされたエントリのフラッシュ や名前の変更を行わなければならないという通知が行われます。

一般的にカーネルコードは、Venus が管理する ViceFid と共に内部のファイル ハンドル (BSD で vnode, Linux で inode, Windows で FileHandle と呼ばれま す) にリンクした構造体を管理しなければなりません。その理由は、頻繁な双方 向の変換が、upcall を行ったり、その upcall の結果を使用する際必要となる からです。こういったリンクされたオブジェクトは cnode と呼ばれます。

現行のミニキャッシュの実装は以下を記録したキャッシュエントリになっていま す -

  1. ファイルの名前
  2. オブジェクトを含んでいるディレクトリの cnode
  3. lookup が許される CodaCred の一覧
  4. オブジェクトの cnode

Coda FS ドライバにおける lookup コールは、呼び出し元の名前、ディレ クトリ、CodaCred を渡し、キャッシュから希望するオブジェクトの cnode を要 求するかもしれません。キャッシュは cnode を返すか、見つからなかったこと を示すでしょう。Coda FS ドライバは、オブジェクトの修正もしくは削除をした 場合、キャッシュエントリが無効になるように、気を付けなければなりません。

キャッシュエントリがもう有効ではないことを示す情報を得た場合、Venus はカー ネルに downcall を発行するでしょう。downcall は Coda FS ドライバに捕獲さ れ、キャッシュを以下に述べる種類で無効にします。downcall のデータがカー ネルメモリ内に読み出せない場合を除き、Coda FS ドライバはエラーを返しませ ん。

5.1 INVALIDATE

このコールの情報はありません。

5.2 FLUSH

引き数 なし

概要 ネームキャッシュ全体をフラッシュします。

詳細 Venus は起動時および終了時にこのコールを発行します。無効なキャッ シュ情報の保持を防ぎます。カーネルのネームキャッシュを動的に切れるオペレー ティングシステムもあります。これが終了した時 downcall は終了します。

5.3 PURGEUSER

引き数

        struct cfs_purgeuser_out {/* CFS_PURGEUSER is a venus->kernel call */
            struct CodaCred cred;
        } cfs_purgeuser;

詳細 Cred を持つキャッシュ内のすべてのエントリを削除します。このコー ルは、ユーザ用のトークンの期限が切れるかフラッシュされる時に発行されます。

5.4 ZAPFILE

引き数

        struct cfs_zapfile_out {  /* CFS_ZAPFILE is a venus->kernel call */
            ViceFid CodaFid;
        } cfs_zapfile;

詳細 ディレクトリの vnode と名前の組みを持つすべてのエントリを削除 します。キャッシュされた vnode の属性が失効となった結果、発行されます。

注記 コールは NetBSD および Mach で正しい名前ではありません。ミニ キャッシュの zapfile ルーチンの引き数は異なっています。Linuxは、属 性の失効を正しく実装していません。

5.5 ZAPDIR

引き数

        struct cfs_zapdir_out {   /* CFS_ZAPDIR is a venus->kernel call */
            ViceFid CodaFid;
        } cfs_zapdir;

詳細 ディレクトリ CodaFid およびこのディレクトリのすべての子の エントリを、キャッシュの中から、すべて削除します。Venus がディレクトリの callback を受け取った時に発行されます。

5.6 ZAPVNODE

引き数

        struct cfs_zapvnode_out { /* CFS_ZAPVNODE is a venus->kernel call */
            struct CodaCred cred;
            ViceFid VFid;
        } cfs_zapvnode;

詳細 引き数で渡される cred および VFid を持つキャッシュの 中のエントリをすべて削除します。このコールはたぶん発行されることはありま せん。

5.7 PURGEFID

概要

引き数

        struct cfs_purgefid_out { /* CFS_PURGEFID is a venus->kernel call */
            ViceFid CodaFid;
        } cfs_purgefid;

詳細 ファイルのための属性をフラッシュします。それがディレクトリ (や 変な vnode) なら、ネームキャッシュからのその子を除去し、ネームキャッシュ からファイルを削除します。

5.8 REPLACE

概要 名前のコレクションのための Fid を置きかえます。

引き数

        struct cfs_replace_out { /* cfs_replace is a venus->kernel call */
            ViceFid NewFid;
            ViceFid OldFid;
        } cfs_replace;

詳細 このルーチンはネームキャッシュの中の ViceFid を別のものに置き かえます。切断されている間ローカルに割当てられたテンポラリ fid をグロー バル fid に置きかえるための再統合の間、それらの fid の参照カウントが 0 でないときでさえ、Venus に許可を追加します。


次のページ 前のページ 目次へ