(57)【特許請求の範囲】
【請求項１】
クライアント機とディスク装置の間に設けられ、キャッシュ領域を有し、前記キャッシュ領域に前記ディスク装置の内容の一部を記憶させ、該内容に対するアクセスに応答して前記キャッシュ領域に記憶した内容を前記クライアント機へデータ転送するファイル制御装置にて実行されるキャッシュ制御プログラムであって、
前記ファイル制御装置が、
前記キャッシュ領域を複数のキャッシュ・エクステントの集まりとして管理することと、
前記ディスク装置に格納されるファイルは少なくとも１つのオブジェクトから構成され、前記オブジェクトは少なくとも１つのディスクブロックから構成され、前記ファイルと前記オブジェクトと前記ディスクブロックをキャッシュ対象のオブジェクトとし、前記ファイルを前記ディスク装置に格納する時にキャッシュ対象であるオブジェクトを特定するためのキャッシュＩＤを生成することと、
前記キャッシュ領域におけるキャッシュ・エクステントの位置を示すオフセットと前記キャッシュＩＤとを保持するキャッシュ・ヘッダ・テーブルを前記ファイルと前記オブジェクトと前記ディスクブロックのそれぞれに対応して作成することと、
前記ファイルのデータが格納されたディスクブロックを特定するためのキャッシュＩＤと、そのキャッシュＩＤにより特定されたディスクブロックのデータが格納されたキャッシュ・エクステントを示すオフセットとを関連付けて前記ディスクブロックに対応するキャッシュ・ヘッダ・テーブルに格納することと、
前記ディスクブロックに関連付けたキャッシュ・エクステントのオフセットを、前記ディスクブロックに対応する前記オブジェクトと前記ファイルのキャッシュＩＤと関連付けてそれぞれ対応するキャッシュ・ヘッダ・テーブルに格納することと、
前記ディスク装置の内容に対するアクセスに応答して前記キャッシュ・ヘッダ・テーブルを、アクセスするオブジェクトのキャッシュＩＤと前記オフセットで検索すること、
を実行するためのキャッシュ制御プログラム。
【請求項２】
前記ファイル制御装置は、前記ファイルと前記オブジェクトと前記ディスクブロックとを相互に関連付けたマップを記憶し、該マップにより前記ファイルと前記オブジェクトと前記ディスクブロックとを相互に検索すること、を実行する、請求項１記載のキャッシュ制御プログラム。
【請求項３】
前記テーブルを複数のブロックにて構成し、各ブロックを複数のエントリにて構成し、
前記ファイル制御装置は、前記テーブルのエントリを用いて前記キャッシュ・エクステントを管理するマップを作成し、前記アクセス時に該マップを検索すること、を実行する請求項１又は２に記載のキャッシュ制御プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はキャッシュ制御プログラムに関するものである。
ネットワークシステムには、ファイルの共有等を目的としてファイルサーバ機が接続されている。ネットワークシステムに接続されたクライアント機は、ファイルサーバ機にアクセスすることにより、他のクライアント機で作成されたプログラムやデータを利用できる。近年、クライアント機の性能（処理能力）の向上に伴い、ファイルアクセスの高速化、即ちファイルサーバ機の能力向上が求められている。
【０００２】
【従来の技術】
図３２は、ファイルサーバ機１におけるファイル記録の概念図である。
ファイルサーバ機１はディスク装置２を有し、該ディスク装置２にファイル３を格納する。詳しくは、ディスク装置２は、記録するデータを所定量のブロック毎に管理する。従って、ファイルサーバ機１はファイル３を所定量のデータを含む複数のブロック４に分割し、各ブロック４を記憶位置等の情報により管理する。そして、ファイルサーバ機１は、クライアント機からの要望に応答して読み出した複数のブロック４からなるファイル３をクライアント機へ送信し、又はクライアント機から受け取ったファイルを複数のブロックに分割してディスク装置２に記憶する。
【０００３】
ファイルサーバ機１は、データアクセスに対する応答速度を高速化するためにキャッシュ機構を備えている。キャッシュ機構は、クライアント機がアクセスしたデータ（ファイル）をディスク装置２に比べて入出力速度が高速な記憶装置（一般的にはメモリ）に格納しておき、同じデータに対する２回目以降のアクセスに対してメモリから読み出したデータをクライアント機に出力する。これにより、ディスク装置２に対するアクセスに要する時間に対応して応答速度を高速化している。
【０００４】
図３３は、ファイルサーバ機１が持つ機能を概略的に示すブロック図である。ファイルサーバ機１は、通信制御機構１１、ページキャッシュ機構１２、ファイルシステム１３、バッファキャッシュ機構１４、及びブロックデバイス１５を有している。通信制御機構１１はクライアント機５との間のデータ転送に必要な通信バッファ１６を有している。ページキャッシュ機構１２とバッファキャッシュ機構１４はそれぞれキャッシュメモリ１７，１８を有している。
【０００５】
ページキャッシュ機構１２はクライアント機５に対してファイルに対する入出力の効率を上げるために設けられ、バッファキャッシュ機構１４はディスク装置２に対するブロック４の入出力の効率を上げるために設けられている。
【０００６】
クライアント機５から転送されたファイルデータは、通信バッファ１６と２つのキャッシュメモリ１７，１８を介してディスク装置２に格納される。詳述すると、通信制御機構１１はクライアント機５から送信されたファイルデータを受け取り、それを通信バッファ１６に格納する。ファイルシステム１３は、ファイルをファイルＩＤ等の情報によって管理する。ページキャッシュ機構１２はファイルを構成する各ブロック４をキャッシュメモリ１７に格納し、それらブロック４をファイルＩＤとブロックの位置を示すオフセットにより対応付けている。
【０００７】
ファイルシステム１３はファイルを格納するためにディスク装置２上の領域を確保し、デバイスブロック４は指定されたディスク装置２に対してブロック単位でアクセスする。バッファキャッシュ機構１４は、ディスク装置２に格納されるブロック４をキャッシュメモリ１８に記憶し、それらブロック４をディスク装置２のデバイスＩＤとディスク装置２におけるブロックの位置を示すオフセットにより対応付けている。
【０００８】
図３４は、ファイルサーバ機１におけるアクセスの手順を示す説明図である。ファイルサーバ機１は、ファイル３に対するアクセスに対して、該ファイル３のファイルＩＤと、該ファイル３を構成する各ブロック４のオフセットによりキャッシュメモリ１７をアクセスする。
【０００９】
キャッシュメモリ１７に該当するブロックが存在しない場合、ファイルサーバ機１はディスク装置２をアクセスし、該ディスク装置２から読み出したブロック４をバッファキャッシュ機構１４が管理するキャッシュメモリ１８と、ページキャッシュ機構１２が管理するキャッシュメモリ１７とに格納する。更に、ファイルサーバ機１は、該ブロック４をファイル３（の一部）としてクライアント機５に提供する。そして、バッファキャッシュ機構１４は読み出したブロック４を格納したキャッシュメモリ１８とディスク装置２の部分を関連付け、ページキャッシュ機構１２はキャッシュメモリ１７に格納されたブロック４とファイルの部分を関連付ける。
【００１０】
【発明が解決しようとする課題】
ところで、上記のように構成されたファイルサーバ機１では、ページキャッシュ機構１２が管理するキャッシュメモリ１７と、バッファキャッシュ機構１４が管理するキャッシュメモリ１８が必要である。そして、これら２つのキャッシュメモリ１７，１８には実質的に同じブロック４が記憶されている。このため、ファイルサーバ機１が仕様として持つキャッシュメモリの容量に対して２倍のキャッシュメモリ（２つのキャッシュメモリ１７，１８）が必要となる。
【００１１】
更に、両キャッシュメモリ１７，１８の内容を実質的に同一にしなければならないため、データをコピーする必要がある。また、ページキャッシュ機構１２が管理するキャッシュメモリ１７と通信バッファ１６の間でも同様にデータをコピーする必要がある。これらのデータコピーは、ファイルサーバ機１の入出力動作に対するオーバーヘッドとなり、入出力特性（応答速度）を遅くする。
【００１２】
本発明は上記問題点を解決するためになされたものであって、その目的はオーバーヘッドの少ないキャッシュ制御プログラムを提供することにある。
【００１３】
【課題を解決するための手段】
上記目的を達成するため、請求項１に記載の発明のように、ファイル制御装置は、キャッシュ制御プログラムにより、キャッシュ領域を複数のキャッシュ・エクステントの集まりとして管理することと、前記ディスク装置に格納されるファイルは少なくとも１つのオブジェクトから構成され、前記オブジェクトは少なくとも１つのディスクブロックから構成され、前記ファイルと前記オブジェクトと前記ディスクブロックをキャッシュ対象のオブジェクトとし、前記ファイルを前記ディスク装置に格納する時にキャッシュ対象であるオブジェクトを特定するためのキャッシュＩＤを生成することと、前記キャッシュ領域におけるキャッシュ・エクステントの位置を示すオフセットと前記キャッシュＩＤとを保持するキャッシュ・ヘッダ・テーブルを前記ファイルと前記オブジェクトと前記ディスクブロックのそれぞれに対応して作成することと、前記ファイルのデータが格納されたディスクブロックを特定するためのキャッシュＩＤと、そのキャッシュＩＤにより特定されたディスクブロックのデータが格納されたキャッシュ・エクステントを示すオフセットとを関連付けて前記ディスクブロックに対応するキャッシュ・ヘッダ・テーブルに格納することと、前記ディスクブロックに関連付けたキャッシュ・エクステントのオフセットを、前記ディスクブロックに対応する前記オブジェクトと前記ファイルのキャッシュＩＤと関連付けてそれぞれ対応するキャッシュ・ヘッダ・テーブルに格納することと、前記ディスク装置の内容に対するアクセスに応答して前記キャッシュ・ヘッダ・テーブルを、アクセスするオブジェクトのキャッシュＩＤと前記オフセットで検索すること、を実行する。従って、１つのキャッシュメモリはファイルとオブジェクトとディスクブロックに対して関連付けられ、ファイルとオブジェクトとディスクブロック毎に対応するキャッシュメモリが必要なく、オーバーヘッドが少ない。
【００１５】
請求項２に記載の発明のように、前記ファイル制御装置において、前記ファイルと前記オブジェクトと前記ディスクブロックとを相互に関連付けたマップを記憶し、該マップにより前記ファイルと前記オブジェクトと前記ディスクブロックとを相互に検索する。従って、前記ファイルと前記オブジェクトと前記ディスクブロックとの検索が容易である。
【００１６】
請求項３に記載の発明のように、前記テーブルを複数のブロックにて構成し、各ブロックを複数のエントリにて構成し、前記ファイル制御装置は、前記テーブルのエントリを用いて前記エクステントを管理するマップを作成し、前記アクセス時に該マップを検索する。
【００１８】
【発明の実施の形態】
以下、本発明を具体化した一実施の形態を図１〜図２８に従って説明する。
図２は、ネットワークシステムの概略構成図である。
【００１９】
ネットワークシステム２０は、複数（本実施形態では３つ）のクライアント機２１，２２，２３と、ファイル制御装置としてのファイルサーバ機２４，２５，２６とを含み、それらはネットワーク２７を介して相互に接続されている。
【００２０】
ファイルサーバ機２４〜２６のディスク装置には各クライアント機２１〜２３に顧客管理等の業務処理や科学計算等の演算処理など、一又は複数の処理を実行させるためのアプリケーションプログラムとデータのファイルが格納されている。それらを要求するため、ファイルサーバ機２４〜２６にはそれらをクライアント機２１〜２３の要求に応答して提供する（要求元に送信する）ためのシステムプログラム（ＯＳ：オペレーティングシステム）が格納されている。
【００２１】
図３は、ファイルサーバ機２４（コンピュータ）のハードウェア構成を概略的に示すブロック図である。ファイルサーバ機２４が提供する機能は、このような汎用的な目的で使用される計算機上で実行するコンピュータプログラムにより実現する。尚、他のファイルサーバ機２５，２６、クライアント機２１〜２３も同様に汎用的な計算機上で実行するコンピュータプログラムにより実現する。
【００２２】
ファイルサーバ機２４は、中央処理装置（ＣＰＵ）３１を含み、このＣＰＵ３１は、メモリ３２と、入力装置３３と、出力装置３４と、記憶装置（ディスク装置）３５と、ドライブ装置３６と、通信装置３７とをそれに接続された状態で有している。
【００２３】
ＣＰＵ３１は、メモリ３２を利用してプログラムを実行し、ログデータの読み出し、稼働分析等の機能を実現する。メモリ３２には、機能の提供に必要なプログラムとデータが格納され、メモリ３２としては、通常、キャッシュメモリ、システムメモリおよびディスプレイメモリを含む。
【００２４】
入力装置３３は、キーボードおよびマウス装置（図示せず）を含み、ユーザからの要求や指示の入力に用いられる。また、出力装置３４は、表示装置（ＶＤＴ）またはモニタおよびプリンタを含み、サービス画面，分析結果等の出力に用いられる。
【００２５】
ディスク装置３５はメモリ３２に比べて入出力速度が低速な記憶装置であり、該ディスク装置は、磁気ディスク装置、光ディスク装置、光磁気ディスク装置を含む。このディスク装置３５には、上述のプログラムとデータが格納され、ＣＰＵ３１は、入力装置３３による指示に応答してプログラム，データをメモリ３２へ転送し、それを実行する。
【００２６】
ドライブ装置３６は、記録媒体３８を駆動し、その記憶内容にアクセスする。記録媒体３８としては、メモリカード、フレキシブルディスク、光ディスク（CD-ROM,DVD-ROM,… ）、光磁気ディスク（MO,MD,…）等、任意のコンピュータ読み取り可能な記録媒体を使用することができる。この記録媒体３８に、上述のプログラム，データ、後述するキャッシュ制御プログラムを格納しておき、必要に応じて、メモリ３２にロードして使用することもできる。
【００２７】
通信装置３７は、ネットワーク２７への接続に用いられ、通信に伴うデータ変換等を行って、他の装置（クライアント機２１〜２３、ファイルサーバ機２５，２６）との間でプログラムやデータの送受信を行う。また、情報処理装置は、外部の情報提供者のデータベース等からネットワークを介して、上述のプログラムとデータを受け取り、必要に応じて、メモリ３２にロードして使用することもできる。
【００２８】
図１は、ファイルサーバ機２４が持つ機能を概略的に示すブロック図である。尚、他のファイルサーバ機２５，２６が持つ機能は、ファイルサーバ機２４が持つ機能と実質的に同じであるため、図面及び説明を省略する。
【００２９】
ファイルサーバ機２４は、通信制御機構４１、マルチ・バインド・キャッシュ機構（以下、ＭＢＣ機構）４２、ファイルシステム及びボリュームマネージャ（以下、ＦＶＭ）４３を有している。ＭＢＣ機構４２はキャッシュメモリ４４を制御し、該キャッシュメモリ４４は図３のメモリ３２に含まれる。
【００３０】
尚、上記ファイルサーバ機２４が有する機能は、図３のＣＰＵ３１が実行するプログラム（キャッシュメモリ４４を制御するキャッシュ制御プログラムを含む）にて実現される。
【００３１】
クライアント機２１から転送されたファイルデータは、キャッシュメモリ４４を介してディスク装置３５に格納される。ＭＢＣ機構４２はクライアント機２１に対するデータ入出力の効率を上げるために設けられている。ＦＶＭ４３はファイルを格納するためにディスク装置３５上の領域を確保し、デバイスブロック４は指定されたディスク装置３５に対してブロック単位でアクセスする。
【００３２】
詳述すると、通信制御機構４１はクライアント機２１から送信されたファイルデータを受け取り、それをキャッシュメモリ４４に格納する。ＭＢＣ機構４２は、キャッシュメモリ４４に格納されたファイルをそのサイズにより複数のオブジェクトに分解し、各オブジェクトを複数のディスクブロックに分割する。即ち、一次オブジェクトとしてのディスクブロックから二次オブジェクトとしてのオブジェクトが構成され、オブジェクトから三次オブジェクトとしてのファイルが構成される。
【００３３】
ＭＢＣ機構４２は、キャッシュ領域、即ちキャッシュメモリ４４をエクステントの集まりとして管理する。エクステントは、オフセット(offset)と長さ(length)で表される線形範囲であり、キャッシュメモリやストレージの論理的に連続した領域（記憶空間）である。キャッシュメモリ４４の個々のエクステントをキャッシュ・エクステント（Ｃ−ｅｘｔ）と呼び、ストレージの個々のエクステントをストレージ・エクステント（Ｓ−ｅｘｔ）と呼ぶ。ＭＢＣ機構４２は、ファイル，オブジェクト，ディスクブロックとキャッシュ・エクステントを、テーブルを用いてそれぞれ関連付ける（バインドする）。
【００３４】
この関連付けにおいて、ＭＢＣ機構４２は、キャッシュ・エクステントを複数階層のオブジェクトに関連付け、その関連付けを各層毎のキャッシュ・ヘッダ・テーブルにて管理する。詳しくは、ＭＢＣ機構４２は、所定層のオブジェクトと、そのオブジェクトに関連付けたキャッシュ・エクステントをその層に対応するキャッシュ・ヘッダ・テーブルにて管理する。更に、ＭＢＣ機構４２は、そのオブジェクトに関連付けたキャッシュ・エクステントを、その上位のオブジェクトに関連付け、その関連付けをキャッシュ・ヘッダ・テーブル（ＣＨＴ）にて管理する。
【００３５】
即ち、ＭＢＣ機構４２は、キャッシュ・ヘッダ・テーブル（ＣＨＴ）により、ディスクブロックに関連付けたキャッシュ・エクステントを上位オブジェクトであるオブジェクトの対応する部分に関連付け、更にそのキャッシュ・エクステントを上位オブジェクトであるファイルの対応する部分に関連付ける。そして、ＭＢＣ機構４２は、ディスクブロックとキャッシュ・エクステント、オブジェクトとキャッシュ・エクステント、ファイルとキャッシュ・エクステントの関連付けをそれぞれ対応するキャッシュ・ヘッダ・テーブルにて管理する。
【００３６】
ＭＢＣ機構４２は、各階層のオブジェクト識別子からなるキャッシュＩＤを生成し、キャッシュ・ヘッダ・テーブルは該キャッシュＩＤとそれに特有なキーを保持する。
【００３７】
ＭＢＣ機構４２は、クライアント機２１がアクセスするオブジェクト（ファイル、オブジェクト、ディスクブロックの何れか）のキャッシュＩＤとキーでキャッシュ・ヘッダ・テーブルを検索することで、各層のオブジェクトに対応するキャッシュ・エクステントに対するアクセスを実現する。
【００３８】
即ち、ＭＢＣ機構４２は、ファイル、オブジェクト、ディスクブロックの共通なオブジェクトに対して１つのキャッシュ・エクステントを関連付ける。従って、ＭＢＣ機構４２によりキャッシュメモリ４４が一つでよく、従来のようにキャッシュメモリ１７，１８間とキャッシュメモリ１７と通信バッファ１６間のデータ転送が不要になり、オーバーヘッドが少なくなる。また、キャッシュメモリ４４が従来の２つのキャッシュメモリ１７，１８と通信バッファ１６の機能を提供するため、従来に比べてキャッシュメモリ４４のメモリ容量が少なくてすむ。逆に、従来のキャッシュメモリ１７，１８と通信バッファ１６を合計したメモリ容量をキャッシュメモリ４４の空き容量とした場合、キャッシュメモリ４４のキャッシュ・エクステントの数が多くなる。従って、キャッシュミスが少なくなり、クライアント機２１に対する応答速度が速くなる。
【００３９】
また、ＦＶＭ４３は、各クライアント機２１〜２３にマウントされた１つ又は複数のファイルサーバ機２４〜２６からなる論理ボリュームを管理する。論理ボリュームは、クライアントが複数のディスク装置を１つのディスク装置として扱えるように設定されたボリュームである。図４に示すように、１つのクライアント機（例えば、クライアント機２１）にマウントされた複数（例えば２つ）のファイルサーバ機２４，２５は１つの論理ボリュームを構成する。クライアント機２１は、論理ボリュームに対してファイル５１のアクセス（格納）を行う。
【００４０】
今、ファイル５１は複数（図において２つ）のオブジェクト５１ａ，５１ｂから構成される。各ファイルサーバ機２４，２５は、各オブジェクト５１ａ，５１ｂを分散管理する。オブジェクトの数は、該オブジェクトが構成するファイルを格納するためにマウントされたボリュームの構成（ノード（ファイルサーバ機）の数）を基準としている。
【００４１】
詳しくは、ファイルサーバ機２４は、ファイル５１を構成する第１オブジェクト５１ａを管理し、ファイルサーバ機２５はファイル５１を構成する第２オブジェクト５１ｂを管理する。
【００４２】
第１ファイルサーバ機２４における第１オブジェクト５１ａは複数のディスクブロック５２ａから構成され、該ファイルサーバ機２４は各ディスクブロック５２ａをディスク装置５３ａ（図１及び図３のディスク装置３５）に格納する。
【００４３】
第２ファイルサーバ機２５における第２オブジェクト５１ｂは複数のディスクブロック５２ｂから構成され、該ファイルサーバ機２５は各ディスクブロック５２ｂをディスク装置５３ｂに格納する。
【００４４】
そして、第１，第２ファイルサーバ機２４，２５のＭＢＣ機構４２は、それぞれ図２のネットワーク２７に接続された機器のノード番号をキャッシュ・ヘッダ・テーブルに格納する。これにより、ネットワークを介して接続された各々の機器に格納されたファイル、オブジェクト、ディスクブロックとキャッシュ・エクステントを関連付ける。
【００４５】
このように格納されたファイル５１をクライアント機２１がアクセスする時、該クライアント機２１のアクセスに対して２つのファイルサーバ機２４，２５が応答し、それぞれに格納したディスクブロック５２ａ，５２ｂをクライアント機２１へ転送する。
【００４６】
即ち、複数のファイルサーバ機２４，２５にファイル５１を構成するオブジェクト５１ａ，５１ｂを分散配置した。従って、ファイルサーバ機２４，２５は、クライアント機２１に対して平行にデータの転送を行う。そのため、１台のファイルサーバ機にファイル５１を格納する従来の方法に比べてファイルの実質的な転送速度（アクセスからファイル５１の全てのデータをクライアント機が読み込むまでの時間）が短くなる。
【００４７】
また、図４において、複数のファイルサーバ機２４，２５のキャッシュメモリは、１つのファイル５１を入出力する際のキャッシュメモリとなる。従って、このファイル５１に対するキャッシュメモリの容量は、従来の２倍の容量となる。即ち、マウントされたファイルサーバ機の数によりキャッシュメモリの容量が多くなる（合計値になる）。このため、ファイルの入出力性能が向上する。
【００４８】
尚、図２に示す各クライアント機２１〜２３及び各ファイルサーバ機２４〜２６は、ＲＤＭＡ(Remote Direct Memory Access )転送機能（ハードウェアがネットワークを介した２台のマシンのメモリ間で直接データを転送する機能）を持つ通信装置を備えた構成としても良い。この場合、通信装置の高速性のメリットを引き出すことが可能となる。
【００４９】
次に、ＭＢＣ機構４２が持つ機能の詳細を説明する。
ＭＢＣ機構４２は、キャッシュ管理単位及び各領域管理層のデータ管理単位を「エクステント」で統一する。ＭＢＣ機構４２は、キャッシュ・エクステントをファイル，オブジェクト，ディスクブロックとテーブルによって関連付ける。テーブルは、Ｂ木（B-tree）構造のマップにて管理される。そして、ＭＢＣ機構４２は、キャッシュ・エクステントを、ファイル，オブジェクト，ディスクブロックのうちの少なくとも２つと関連付けすることで、データ管理対象の相互の検索を可能としている。
【００５０】
ＭＢＣ機構４２は、テーブルを図３のメモリ３２上に作成する。テーブルには、キャッシュ・エクステント・テーブル（ＣＥＴ）、キャッシュ・ヘッダ・テーブル（ＣＨＴ）、ストレージ・エクステント・テーブル（ＳＥＴ）、オブジェクト・テーブル（ＯＴ）、ファイル・テーブル（ＦＴ）の５種類があり、いずれも同じ形式である。
【００５１】
先ず、テーブルの構造を説明する。
図５は、テーブルの構造を示す説明図である。尚、図５は構造を概略的に示すものであり、この構造に限定されない。
【００５２】
テーブル６１全体は固定長のブロック６２の集まりから構成される。１つのブロック６２はディスク装置の入出力やネットワーク転送に適した大きさを持つ。ブロック６２は複数の固定長データの配列であり、１つ以上のコントロール・エントリ６３と複数のデータ・エントリ６４から構成される。
【００５３】
コントロール・エントリ６３は、ブロック６２を構成する複数のデータ・エントリ６４を管理する（使用状況を管理する）ビットマップデータを保持する。
各データ・エントリ６４はエクステントと呼ぶデータセットを持ち、データセットは、オフセット(Offset)、長さ(Length)、バリュー(Value )からなる。ＣＥＴ，ＳＥＴのデータ・エントリは、１つのエクステントを含む。ＣＨＴ，ＯＴ，ＦＴのデータ・エントリは複数のエクステントを含む要素の配列構造であり、各テーブルに含まれる複数のデータ・エントリはＢツリーを構成するノードの材料である。ＣＨＴ，ＯＴ，ＦＴの各データ・エントリを構成する要素は、それぞれに含まれるエクステントのオフセットによりソートされている。バリューが０（ゼロ）のエクステントをNull（ヌル）エクステントと呼ぶ。全てのデータ・エントリ６４には一意なインデックス（ｉｄｘ）が与えられる。インデックスはデータ・エントリを特定する値を持つ。
【００５４】
各テーブルに含まれるエクステントのデータは、各テーブルの目的によって異なっている。例えば、ＣＥＴ，ＳＥＴのデータ・エントリに含まれるエクステントは、実体であるキャッシュ，ストレージのエクステント（キャッシュ・エクステント，ストレージ・エクステント）を表すデータを表すデータを持つ。図６に示すように、ストレージ６５の１つのストレージ・エクステント６５ａは、オフセットと長さがそれぞれ「 0x18000」「0x1000」で表される領域である。ＣＥＴを構成するブロック６２ａのデータ・エントリ６４は、ストレージ・エクステント６５ａを表すデータ(0x18000,0x1000)が含まれるエクステントを保持する。  尚、図６では、データ・エントリとストレージ６５を構成するストレージ・エクステント６５ａとの関係を説明したが、関連付けの対象がキャッシュの場合も同様である。即ち、ＳＥＴを構成するブロックのデータ・エントリは、キャッシュ・エクステントを表す（指定する）情報であるエクステント（オフセットと長さ）を保持する。
【００５５】
図１のＭＢＣ機構４２は、マップを図３のメモリ３２上に作成する。マップには、フリーストレージ・エクステント・マップ（ＦＳＥＭ），ストレージ・エクステント・マップ（ＳＥＭ），オブジェクト・マップ（ＯＭ），フリーキャッシュ・エクステント・マップ（ＦＣＥＭ），キャッシュ・エクステント・マップ（ＣＥＭ）の５種類があり、いずれも同じ構造である。
【００５６】
各マップは対応するテーブルのデータ・エントリにより構成される。マップはエクステントの集まりを管理するものであり、オフセットをキーとするＢ木（B-tree）構造を持つ。
【００５７】
図７は、マップの構造を示す説明図である。尚、図７は、構造を概略的に示すものであり、この構造に限定されない。
マップ７０は、最上位にルートノード７１を持ち、末端に複数（図において５つ）のリーフノード７２ａ〜７２ｅを持つ。リーフノード７２ａ〜７２ｅは実際のデータを管理する。
【００５８】
リーフノード７２ａ〜７２ｅは実際のデータ量（ファイルサイズ）に応じた個数設けられ、それらリーフノード７２ａ〜７２ｅを収容する（ルートノード７１に関連付ける）ためにルートノード７１とリーフノード７２ａ〜７２ｅの間にブランチノード７３ａ，７３ｂが設けられている。各ノード７１，７２ａ〜７２ｅ，７３ａ，７３ｂは上記テーブルのデータ・エントリからなる。
【００５９】
ルートノード７１は、それに繋がるノード（図において２つのブランチノード７３ａ，７３ｂ）を指し示すデータを格納した２つのエクステントと空きエクステントを有している。図において左側に表したブランチノード７３ａは、それに繋がる２つのリーフノード７２ａ，７２ｂを示すデータを格納したエクステントと空きエクステントを有している。また、図において右側に表したブランチノード７３ｂは、それに繋がる３つのリーフノード７２ｃ，７２ｄ，７２ｅを示すデータを格納したエクステントと空きエクステントを有している。
【００６０】
即ち、リーフノード７２ａ〜７２ｅは実体であるエクステント（キャッシュ・エクステント又はストレージ・エクステント）を示すエクステントを保持する。そして、ブランチノード７３及びルートノード７１は、リーフノードの集まり、ブランチノードの集まり、又はリーフノードとブランチノードの集まりを示すエクステントを保持する。ルートノード、ブランチノードによるブランチノード、リーフノードの保持は、各マップ内のエクステントによりカバーされる範囲のオフセットと長さ及び当該リーフのインデックスによってなされる。
【００６１】
データ・エントリはマップ、即ちＢツリーのノードであり、ノードは論理的にはＢツリーを構成する。例えば、図８に示すように、いずれかのテーブルを構成するブロック６２ｂは複数のデータ・エントリ６４ａ〜６４ｈを持ち、データ・エントリ６４ａ〜６４ｇはマップ７０ａのノードである。データ・エントリ６４ｃはルートノードであり、データ・エントリ６４ａ，６４ｄ，６４ｅはブランチノードであり、データ・エントリ６４ｂ，６４ｆ，６４ｇはリーフノードである。
【００６２】
図９は、エクステントによるノードの関連付けを示す説明図である。
マップ７５は複数のデータ・エントリ（ノード）７６〜７９からなる。データ・エントリ７６には値「１０」のインデックス(idx=10)が与えられ、データ・エントリ７７には値「５０」のインデックス(idx=50)が与えられ、データ・エントリ７８には値「４０」のインデックス(idx=40)が与えられ、データ・エントリ７９には値「３０」のインデックス(idx=30)が与えられている。
【００６３】
ノード７６は複数のエクステント７６ａ〜７６ｅからなる。エクステント７６ａはデータ・エントリ７７を示すインデックス（＝５０）をバリューとして保持し、エクステント７６ｃはデータ・エントリ７８を示すインデックス（＝４０）をバリューとして保持し、エクステント７６ｅはデータ・エントリ７９を示すインデックス（＝３０）をバリューとして保持する。これらエクステント７６ａ，７６ｃ，７６ｅは、データ・エントリ７６と複数のデータ・エントリ７７〜７９を関連付ける。
【００６４】
尚、データ・エントリ７６に含まれるエクステント７６ｂ，７６ｄはバリューとして値「０」を保持する。これは、各エクステント７６ｂ，７６ｄが下位のノードに関連付けられていないヌルエクステントであることを示す。
【００６５】
次に、各テーブルの詳細を説明する。
キャッシュ・エクステント・テーブル（ＣＥＴ）。このテーブルは、キャッシュ上のエクステント（キャッシュ・エクステント：Ｃ−ｅｘｔ）を管理するテーブルである。
【００６６】
キャッシュは仮想メモリ空間上の連続した領域であり、キャッシュ・エクステントの単位で使用される。キャッシュ・エクステントは、キャッシュ上のオフセットと長さで表現される領域である。
【００６７】
従来のページキャッシュではキャッシュは、長さが一定のキャッシュ・エクステントであるページの単位で使用される。
各データ・エントリは以下のデータを保持する。
【００６８】
【表１】
0004299555.tif 000002
各データ・エントリの識別子をキャッシュ・エクステント識別子と呼ぶ。
【００６９】
データ「head[]」（識別子配列）は、キャッシュ・エクステントに関連付けられているストレージ，オブジェクト，ファイルを保持する配列であり、head[0] がストレージを、head[1] がオブジェクトを、head[2] がファイルを特定する値を保持している。値が「０」の場合は関連付けられていないことを表す。
【００７０】
ストレージ・エクステント・テーブル（ＳＥＴ）。このテーブルは、ストレージ上のエクステント（ストレージ・エクステント：Ｓ−ｅｘｔ）（エクステントはオフセットと長さで表現される線形範囲）を管理するテーブルである。
【００７１】
ストレージは、ディスクパーティション（論理的に分割されたディスク装置やメモリの領域）や論理ボリュームなどのボリュームであり、ストレージ・エクステントの単位で使用される。ストレージ・エクステントは、ストレージ上のオフセットと長さで表現される領域である。
【００７２】
従来のファイルシステムではストレージは、長さが一定のストレージ・エクステントであるディスクブロックの単位で使用される。
各データ・エントリは以下のデータを保持する。
【００７３】
【表２】
0004299555.tif 000003
キャッシュ・ヘッダ・テーブル（ＣＨＴ）。このテーブルは、キャッシュ対象とキャッシュ・エクステント（Ｃ−ｅｘｔ）の対応を管理するテーブルである。キャッシュ対象には、ストレージ、オブジェクト、ファイルのいずれかがなり得る。キャッシュ対象とキャッシュ・エクステントのマップ情報は、キャッシュ・エクステント・マップ（ＣＥＭ、後述）というＢツリー構造のマップで管理される。即ち、キャッシュ・ヘッダ・テーブルは、キャッシュ対象とキャッシュ・エクステントのマップ情報を保持し、キャッシュ・エクステント・マップを構成するノード（以下、ＣＥＭノードと呼ぶ）を管理するテーブルである。そして、キャッシュ・ヘッダ・テーブルはＣＥＭノードを配列で保持し、使用中のＣＥＭノードと空きＣＥＭノードをビットマップで管理する。
【００７４】
オブジェクト・テーブル（ＯＴ）。このテーブルは、ストレージ・エクステント（Ｓ−ｅｘｔ）の情報を管理するテーブルである。ストレージ・エクステントの集まりがオブジェクトを構成し、オブジェクトを構成するストレージ・エクステントは全て当該ファイルサーバ機２４上に存在する。従って、オブジェクト・テーブルは、オブジェクトとストレージ・エクステントのマップ情報を管理するテーブルであり、オブジェクトとストレージ・エクステントのマップ情報は、ストレージ・エクステント・マップ（ＳＥＭ、後述）というＢツリー構造のマップで管理される。
【００７５】
即ち、オブジェクト・テーブルは後述するストレージ・エクステント・マップを構成するノード（以下、ＳＥＭノードと呼ぶ）を管理するテーブルであり、オブジェクト・テーブルはＳＥＭノードを配列で保持し、使用中のＳＥＭノードと空きＳＥＭノードをビットマップで管理する。
【００７６】
ファイル・テーブル（ＦＴ）。このテーブルは、ファイルとオブジェクトのマップ情報を管理するテーブルである。オブジェクトがファイルを構成する。ファイルは、単一のファイルサーバ機上のオブジェクト、又は複数のファイルサーバ機上のオブジェクトで構成される。ファイルとオブジェクトのマップ情報は、オブジェクト・マップ（ＯＭ、後述）というＢツリー構造のマップで管理される。即ち、ファイル・テーブルはオブジェクト・マップを構成するノード（以下、ＯＭノードと呼ぶ）を管理するテーブルであり、ＯＭノードを配列で保持し、使用中のＯＭノードと空きＯＭノードをビットマップで管理する。
【００７７】
次に、各マップの詳細を説明する。
ストレージ・エクステント・マップ（ＳＥＭ）。このマップはＢツリー構造にて、オブジェクトとストレージ・エクステント（Ｓ−ｅｘｔ）のマップ情報を管理する。このマップには、オブジェクト・テーブル（ＯＴ）のデータ・エントリがノードに使用されている。Ｂツリーを構成する各ノード（ＳＥＭノード）は以下のデータを保持している。
【００７８】
【表３】
0004299555.tif 000004
尚、上記のＳＥＭノードにデータ「branch」（識別子）として保持される上位ノードの識別子は、当該ＳＥＭノードが繋がる上位のＳＥＭノードのｉｄｘである。従って、ＳＥＭノードがルートノードの場合、データ「branch」としてキャッシュ・ヘッダ識別子が保持される。データ「sem[] 」（構造配列）はエクステントの配列であり、ＯＴのデータ・エントリは複数のエクステントを含んでいる。
【００７９】
フリーストレージ・エクステント・マップ（ＦＳＥＭ）。このマップは、ディスク上の空きエクステント（使用中でないストレージ・エクステント：フリーストレージ・エクステントと呼ぶ）を管理する。このマップには、オブジェクト・テーブル（ＯＴ）のデータ・エントリが後述するノードに使用されている。フリーストレージ・エクステントは、ＦＳＥＭオブジェクトと呼ばれるオブジェクトにマップすることで管理される。ＦＳＥＭオブジェクトとフリーストレージ・エクステントのマップ情報は、通常のオブジェクトと同様に、Ｂツリー構造によって管理される。即ち、ＦＳＥＭオブジェクトを管理対象とするＳＥＭをフリーストレージ・エクステント・マップ（ＦＳＥＭ）と呼ぶ。
【００８０】
オブジェクト・マップ（ＯＭ）。このマップはＢツリー構造で、ファイルとオブジェクトのマップ情報を管理する。このマップには、ファイル・テーブル（ＦＴ）のデータ・エントリがノードに使用されている。ＭＢＣ機構４２は、用途別に２つのバンクを持つ。ファイル毎に１つのＢツリーが存在し、Ｂツリーを構成する各ノード（ＯＭノード）は以下のデータを保持している。
【００８１】
【表４】
0004299555.tif 000005
尚、上記のＯＭノードにデータ「branch」（識別子）として保持される上位ノードの識別子は、当該ＯＭノードが繋がる上位のＯＭノードのｉｄｘである。従って、ＯＭノードがルートノードの場合、データ「branch」としてキャッシュ・ヘッダ識別子が保持される。データ「om[] 」（構造配列）はエクステントの配列であり、ＦＴのデータ・エントリは複数のエクステントを含んでいる。
【００８２】
キャッシュ・エクステント・マップ（ＣＥＭ）。このマップはＢツリー構造にて、キャッシュ対象（ストレージ（Ｓ−ｅｘｔ）、オブジェクト、ファイル）とキャッシュ・エクステント（Ｃ−ｅｘｔ）のマップ情報を管理する。このマップには、キャッシュ・ヘッダ・テーブル（ＣＨＴ）のデータ・エントリがノードに使用されている。キャッシュ対象毎に１つのＢツリー、即ちＣＥＭが存在する。Ｂツリーを構成する各ノード（ＣＥＭノード）は以下のデータを保持している。
【００８３】
【表５】
0004299555.tif 000006
尚、上記のＣＥＭノードにデータ「branch」（識別子）として保持される上位ノードの識別子は、当該ＣＥＭノードが繋がる上位のＣＥＭノードのｉｄｘである。従って、ＣＥＭノードがルートノードの場合、データ「branch」としてキャッシュ対象識別子が保持される。データ「cem[] 」（構造配列）はエクステントの配列であり、ＣＨＴのデータ・エントリは複数のエクステントを含んでいる。
【００８４】
フリーキャッシュ・エクステント・マップ（ＦＣＥＭ）。このマップは、キャッシュメモリ４４上の空きエクステント（使用中でないキャッシュ・エクステント：フリーキャッシュ・エクステントと呼ぶ）を管理する。このマップには、キャッシュ・ヘッダ・テーブル（ＣＨＴ）のデータ・エントリがノードに使用されている。フリーキャッシュ・エクステントは、ＦＣＥＭオブジェクトと呼ばれるオブジェクトにマップすることで管理される。ＦＣＥＭオブジェクトとフリーキャッシュ・エクステントのマップ情報は、通常のキャッシュ対象と同様に、Ｂツリー構造によって管理される。即ち、ＦＣＥＭオブジェクトを管理対象とするＣＥＭをフリーキャッシュ・エクステント・マップ（ＦＣＥＭ）と呼ぶ。
【００８５】
従って、図１３に示すように、ファイル(FILE)８１とオブジェクト(OBJECT)８２がオブジェクト・テーブル(OT)８５によって関連付けられている。また、オブジェクト(OBJECT)８２とディスクブロック（ストレージ・エクステントS-ext ）８３がストレージ・エクステント・テーブル(SET) ８６によって関連付けられている。更に、キャッシュ・エクステント(C-ext) ８４とファイル(FILE)８１、オブジェクト(OBJECT)８２、ディスクブロック（ストレージ・エクステントS-ext ）８３がそれぞれキャッシュ・ヘッダ・テーブル(CHT) ８７，８８，８９により関連付けられている。そして、各テーブル８５〜８９により、相互の検索が可能となる。
【００８６】
上記の説明をまとめると以下のようになる。
ＣＨＴ，ＯＴ，ＦＴは「甲に乙をマップする」ためのテーブルであり、「甲」はルートノードが保持し、「乙」はリーフノードが保持する。
【００８７】
図１４は、ＣＨＴによる関連付けの説明図である。
ＣＨＴ９１はデータ・エントリ９１ａ〜９１ｆを含み、データ・エントリ９１ａ，９１ｂは１つのＣＥＭ９２ａを構成するノードである。このＣＥＭ９２ａは、ＦＴ９３のデータ・エントリ９３ａにＣＥＴ９４のデータ・エントリ９４ａをマップする。即ち、ルートノードであるデータ・エントリ９１ａはキャッシュ対象識別子としてＦＴ９３のデータ・エントリ９３ａを示す情報を保持し、リーフノードであるデータ・エントリ９１ｂはキャッシュ・エクステント識別子としてＣＥＴ９４のデータ・エントリ９４ａを示す情報を保持する。
【００８８】
同様に、データ・エントリ９１ｃ，９１ｄは１つのＣＥＭ９２ｂを構成するノードである。このＣＥＭ９２ｂは、ＯＴ９５のデータ・エントリ９５ａにＣＥＴ９４のデータ・エントリ９４ａをマップする。即ち、ルートノードであるデータ・エントリ９１ｃはキャッシュ対象識別子としてＯＴ９５のデータ・エクステント９５ａを示す情報を保持し、リーフノードであるデータ・エントリ９１ｄはキャッシュ・エクステント識別子としてＣＥＴ９４のデータ・エントリ９４ａを示す情報を保持する。
【００８９】
同様に、データ・エントリ９１ｅ，９１ｆは１つのＣＥＭ９２ｃを構成するノードである。このＣＥＭ９２ｃは、ＳＥＴ９６にＣＥＴ９４のデータ・エントリ９４ａをマップする。即ち、ルートノードであるデータ・エントリ９１ｅはキャッシュ対象識別子としてＳＥＴ９６を示す情報を保持し、リーフノードであるデータ・エントリ９１ｆはキャッシュ・エクステント識別子としてＣＥＴ９４のデータ・エントリ９４ａを示す情報を保持する。尚、ＳＥＴ９６はボリューム毎に作成され、それらをマップするＣＥＭ９２ｃも同様にボリューム毎に作成される。
【００９０】
従って、ＣＥＴ９４のデータ・エントリ９４ａは、ＦＴ９３のデータ・エントリ９３ａと、ＯＴ９５のデータ・エントリ９５ａと、ＳＥＴ９６とにマッピングされている。
【００９１】
図１５は、ＯＴによる関連付けの説明図である。
ＯＴ９５はデータ・エントリ９５ａ，９５ｂを含み、データ・エントリ９５ａ，９５ｂはＳＥＭ９７を構成するノードである。ルートノードであるデータ・エントリ９５ａはオブジェクト識別子を保持し、リーフノードであるデータ・エントリ９５ｂはストレージ・エクステント識別子としてＳＥＴ９６のデータ・エントリ９６ａを示す情報を保持する。
【００９２】
図１６は、ＦＴによる関連付けの説明図である。
ＦＴ９３はデータ・エントリ９３ａ，９３ｂを含み、データ・エントリ９３ａ，９３ｂはＯＭ９８を構成するノードである。ルートノードであるデータ・エントリ９３ａはファイル識別子を保持し、リーフノードであるデータ・エントリ９３ｂはストレージ・エクステント識別子としてＯＴ９５のデータ・エントリ９５ａを示す情報を保持し、このデータ・エントリ９５ａはルートノードである。
【００９３】
図１７は、各種テーブルによる関連付けの説明図であり、図１４〜図１６をまとめた説明図である。
ファイル１０１のエクステント１０１ａと、オブジェクト１０２のエクステント１０２ａと、ストレージ１０３のストレージ・エクステント１０３ａは同じものであり、各エクステント１０１ａ，１０２ａ，１０３ａ中の記載は、それぞれのオフセットと長さである。
【００９４】
ＣＥＴ９４のデータ・エントリ９４ａは、キャッシュメモリ１０４のキャッシュ・エクステント１０４ａを表すセットを保持する。そして、このキャッシュ・エクステント１０４ａは、ＣＥＴ９４とＣＨＴ９１を介して、ＦＴ９３とＯＴ９５とＳＥＴ９６によりファイル１０１のエクステント１０１ａとオブジェクト１０２のエクステント１０２ａとストレージ１０３のストレージ・エクステント１０３ａにそれぞれマッピングされている。
【００９５】
次に、ＭＢＣ機構４２が扱うオブジェクトについて説明する。
ファイルを構成するオブジェクトを一般オブジェクトと呼び、この内容はファイルのデータである。後述する各種テーブル、転送バッファ等を用途とするオブジェクトを予約オブジェクトと呼ぶ。個々のディスク、オブジェクト、ファイルに付加するオブジェクトを予約番号と呼ぶ。この予約番号は、ディスク装置やファイルに対して付加的な情報（ファイルの所有者やディスク装置の容量等）を与えるためのものであり、この内容はメタデータである。
【００９６】
予約オブジェクトは、後述するWell KnownオブジェクトＩＤが与えられているオブジェクトのことである。オブジェクトＩＤは実際にオブジェクトを割り当てるまでその値が決まらないため、ＯＴ，ＦＴなどのオブジェクトにアクセスするために便宜的に Well Known オブジェクト ID を決めている。Well KnownオブジェクトＩＤはＯＭのバンク１を検索することにより対応する実際のオブジェクトＩＤに変換される。
【００９７】
次に、ＭＢＣ機構４２が扱う識別子（ＩＤ）について説明する。
サブネット内のディスクを特定するＩＤをストレージＩＤと呼び、オブジェクトを特定するＩＤをオブジェクトＩＤと呼び、サブネット内のファイルを特定するＩＤをファイルＩＤと呼ぶ。キャッシュ対象（ディスクブロック、オブジェクト、ファイル）を特定するＩＤをキャッシュＩＤと呼ぶ。
【００９８】
オブジェクトＩＤは複数のクラスに分けられる。
ＣＬＡＳＳ＿ＡオブジェクトＩＤとＣＬＡＳＳ＿ＣオブジェクトＩＤはノード内の予約オブジェクトを特定するWell KnownなＩＤ（ＩＤ番号に対して取得されるデータが既知であるＩＤ）（ノード内予約ＩＤ）である。ＣＬＡＳＳ＿ＢオブジェクトＩＤはクラスタ内の予約オブジェクトを特定するWell KnownなＩＤ（クラスタ内予約ＩＤ）である。ＣＬＡＳＳ＿ＤオブジェクトＩＤはサブネット内のオブジェクトを特定するＩＤ（サブネット内特定ＩＤ）である。
【００９９】
普通のオブジェクトのＩＤ（「単なるＩＤ」）は、オブジェクトが作成される時点で決まるのに対し、ＣＨＴ，ＣＥＴ，ＳＥＴ，ＯＴ，ＦＴなどのオブジェクトのＩＤは「Well Know なＩＤ」として予約されている。例えば、テーブルが他のファイルサーバ機にある場合、単なるＩＤではファイル，オブジェクトのＩＤを問い合わせるための通信が必要となる。しかし、「Well Know なＩＤ」として予約されているオブジェクトのＩＤの問い合わせをすることなくＩＤの指定が可能である。こうすることにより、目的のテーブル（ＣＨＴ等）の参照・変更を容易にしている。
【０１００】
そして、ＣＬＡＳＳ＿ＡからＣＬＡＳＳ＿ＣのオブジェクトＩＤの総称が「Well KnownオブジェクトＩＤである。ＣＬＡＳＳ＿Ｄのオブジェクトは実際のオブジェクトＩＤで、ＣＬＡＳＳ＿ＡからＣＬＡＳＳ＿ＣのオブジェクトはＯＭのバンク１を検索することによりＣＬＡＳＳ＿ＤのオブジェクトＩＤに変換される。マルチ・バインド・キャッシュ機構は、単体のノード（コンピュータ）上だけでなく、サブネット内に展開した複数のノード（ファイルサーバ機）でクラスタを形成した場合に、ノード間でキャッシュ対象を共有することが可能である。
【０１０１】
この場合に使用するWell KnownオブジェクトＩＤにクラスを設けている。ＣＬＡＳＳ＿Ａ，ＣＬＡＳＳ＿Ｃはノード内だけでユニークであればノード間で重複してもよいＩＤである。ＣＬＡＳＳ＿Ａは１つの値を予約するのに対し、ＣＬＡＳＳ＿Ｃ２５５個の連番の値を予約する点が異なっている。ＣＬＡＳＳ＿Ｂはクラスタ内においてユニークなＩＤである。
【０１０２】
次に、関連付け（バインド）について説明する。
関連付けの対象は以下の通りである。
関連付け対象がストレージ・エクステント（Ｓ−ｅｘｔ）とオブジェクトの場合、オブジェクトのＳＥＭのノード（データ・エントリ）に当該ストレージ・エクステントを挿入することで関連付けを行う。
【０１０３】
図１１は、エクステントの挿入の説明図である。
図１１上段に示すように、マップ１１０は２つのノード１１１，１１２を含み、各ノード１１１，１１２はそれぞれ４つのエクステントを持つ。ノード１１２はリーフノードであり、インデックス「 101」が与えられている。上位のノード１１１のエクステント１１３は、ノード１１２を表すインデックス「 101」を含むセットを保持している。
【０１０４】
このマップ１１０にエクステント１１４を挿入する。詳しくは、マップ１１０に含まれるリーフノード１１２にエクステント１１４を挿入する。この時、挿入されるエクステント１１４は、オフセット「1200」と長さ「 200」を保持している。従って、図１１下段に示すように、このエクステント１１４は、リーフノード１１２のエクステント１１５とエクステント１１６の間に挿入される。
【０１０５】
更に、後のエクステント１１６に影響が無いように、オフセット「1400」と長さ［ 600」を保持するヌルエクステント１１７を挿入する。そして、エクステント１１５は、挿入されるエクステント１１４のオフセットに対応して長さが「 200」を持つエクステント１１５ａに変更される。更に、エクステントの数が規定値（図において４個）よりも多くなるため、リーフノードを分割して２つのリーフノード１１２，１１２ａとする。一方のリーフノード１１２には元のインデックス「 101」が与えられ、他方のリーフノード１１２ａには新たなインデックス「1001」が与えられる。そして、上位のノード１１１は、一方のリーフノード１１２を表すように内容が変更されたエクステント１１３ａを持ち、他方のリーフノード１１２ｂを表すエクステント１１８が挿入される。
【０１０６】
図１２は、エクステントの削除の説明図である。
図１２上段に示すように、マップ１２０は３つのノード１２１，１２２，１２３を含み、各ノード１２１〜１２３はそれぞれ４つのエクステントを持つ。ノード１２２，１２３はリーフノードであり、それぞれインデックス「 101」，「1001」が与えられている。上位のノード１２１のエクステント１２４，１２５は、ノード１２２，１２３を表すセットを保持している。
【０１０７】
このマップ１２０からノード１２２に含まれるエクステント１２６を削除する。この時、削除されるエクステント１２６は、オフセット「1200」と長さ「 200」を保持している。そして、次のエクステント１２７はヌルエクステントである。従って、これらのエクステント１２６，１２７を、図１２中段に示すように空きエクステント１２６ａ，１２７ａとする。更に、エクステント１２８を、エクステント１２６，１２７の長さを含めるように長さを「1000」を持つエクステント１２８ａとする。
【０１０８】
次に、２つのリーフノード１２２，１２３はそれぞれ２つの使用されたエクステントを持ち、これら使用されたエクステントの数は規定値以内であって１つのノードに含めることが可能である。従って、Ｂツリーの縮小処理を行う。即ち、図１２下段に示すように、一方のリーフノード１２２に他方のリーフノード１２３の使用されたエクステント１２９，１３０を持たせる。そして、上位のノード１２１が他方のリーフノード１２３を表さないようにエクステント１２５（図１２中段参照）を削除すると共に、１つのリーフノード１２２を表すように上位ノード１２１が持つエクステント１２４を、長さ「4000」を持つエクステント１２４ａに変更する。
【０１０９】
関連付け対象がオブジェクトとファイルの場合、ファイルのＯＭ（バンク０）にオブジェクトを挿入することで関連付けを行う。
関連付け対象がキャッシュ・エクステント（Ｃ−ｅｘｔ）とキャッシュ対象の場合、キャッシュ対象のＣＥＭのノード（データ・エントリ）にキャッシュ・エクステントを挿入することで関連付けを行う。
【０１１０】
ファイルとオブジェクトをマッピングするＯＭはＦＴ内にあり、ファイル毎に２つ存在する。一方をバンク０とし、他方をバンク１とする。バンク０とバンク１は実質的に同じ内容を持つ。バンク０は、ファイルにおけるオブジェクトの場所を保持し、バンク１は、ファイルに対する付加情報（ファイルの所有者や実行プログラム等）を保持する。従って、「オブジェクト検索」ではバンク０を検索し、「Well Known オブジェクトＩＤを CLASS-D オブジェクトに変換」ではバンク１を検索する。
【０１１１】
関連付け対象が空きストレージ・エクステント（Ｓ−ｅｘｔ）の場合、ＦＳＥＭのノード（データ・エントリ）に空きストレージ・エクステントを挿入することで関連付けを行う。関連付け対象が空きキャッシュ・エクステント（Ｃ−ｅｘｔ）の場合、ＦＣＥＭのノード（データ・エントリ）に空きキャッシュ・エクステントを挿入することで関連付けを行う。
【０１１２】
関連付け対象がWell KnownオブジェクトＩＤであり、該Well KnownオブジェクトＩＤをWell KnownではないオブジェクトＩＤに関連付ける場合、ルートディレクトリのＯＭ（バンク１）にWell KnownオブジェクトＩＤを挿入する。関連付け対象が予約番号と付加対象（ファイル）の場合、付加対象のＯＭ（バンク１）に予約番号を挿入することで関連付けを行う。
【０１１３】
次に、検索（クエリ）について説明する。
検索は、関連付けに基づいて行い、取得する検索対象に対応するマップを検索してその対象を取得する、即ち、検索対象とオフセット，長さを指定し、対応するエクステントを取得する処理である。このクエリ処理は、ファイルに対して読み書きする場合や、テーブル（オブジェクト）を参照変更する場合、ディスクに対して未書き出しのキャッシュを定期的にディスクに書き出す場合などに行われる。
【０１１４】
例えば、オブジェクトからストレージ・エクステントを取得する場合、該オブジェクトのＳＥＭを検索し、該当するストレージ・エクステントを検出する。同様に、ファイルからオブジェクトを取得する場合、ファイルのＯＭ（バンク０）を検索し、キャッシュ対象からキャッシュ・エクステントを取得する場合、キャッシュ対象のＣＥＭを検索する。
【０１１５】
ファイルの作成や拡張時に、空きストレージ・エクステントを取得する場合にはＦＳＥＭを検索し、空きキャッシュ・エクステントを取得する場合にはＦＣＥＭを検索する。更に、Well KnownオブジェクトＩＤを取得する場合にはルートディレクトリのＯＭ（バンク１）を検索し、付加対象から予約番号を取得する場合には当該付加対象のＯＭ（バンク１）を検索する。
【０１１６】
エクステントの検索は、以下のように行われる。
例えば、図１０に示すマップ１４０からオフセットが「2048」のエクステントを検索する。尚、図においてＢツリーのノード中に記載した数値はそのノードのインデックスである。
【０１１７】
先ず、このマップ１４０のルートノード１４１のエクステント配列をオフセットにて検索し、希望するオフセット「2048」を含むエクステント、即ちオフセット「2000」と長さ[1000]を保持するエクステント１４２を検出する。
【０１１８】
次に、このエクステント１４２が保持するバリューに基づいて、該バリューとして保持された下位ノードの識別子であるインデックス「 4」にて表されるノード１４３のエクステント配列を検索する。そして、希望するオフセット「2048」を含むエクステント、即ちオフセット「2000」と長さ[ 100]を保持するエクステント１４４を検出する。
【０１１９】
次に、このエクステント１４４が保持するバリューに基づいて、該バリューとして保持された下位ノードの識別子であるインデックス「41」にて表されるノード１４５のエクステント配列を検索する。そして、希望するオフセット「2048」を含むエクステント、即ちオフセット「2010」、長さ[50]、バリュー（インデックス）「 411」を保持するエクステント１４６を検出する。そして、このエクステント１４６が保持するバリューにより、実体を表すインデックス「 411」が得られる。
【０１２０】
次に、図２のクライアント機２１に対するファイルサーバ機２４のファイルの入出力について説明する。
ファイルサーバ機２４は、ファイルＩＤとオフセットでキャッシュ・エクステントを検索する。キャッシュ・エクステントが存在する場合、ファイルサーバ機２４はキャッシュ・エクステントのデータをクライアント機２１に送信する。
【０１２１】
キャッシュ・エクステントが存在しない場合、先ずファイルサーバ機２４はファイルとキャッシュ・エクステントの関連付けを行う。次に、ファイルサーバ機２４は、その関連付けしたキャッシュ・エクステントを他から使用されないようにロックする。次に、ファイルサーバ機２４は、キャッシュ・エクステントに対してデータの入出力を行う（図１のディスク装置３５から読み出したデータをキャッシュ・エクステントに書き込む。又はキャッシュ・エクステントのデータをディスク装置３５に格納する）。そして、データの入出力を終えたファイルサーバ機２４は、当該キャッシュ・エクステントのロックを解除する。
【０１２２】
キャッシュ・エクステントの関連付けについて詳述する。
先ず、ファイルサーバ機２４は、ファイルＩＤとオフセットによりＯＭから該当するオブジェクトを検索する。該当するオブジェクトがない場合、ファイルサーバ機２４は新規オブジェクトＩＤを取得し、ファイルにオブジェクトを関連付ける。
【０１２３】
次に、ファイルサーバ機２４は、オブジェクトＩＤとオフセットによりＳＥＭから該当するストレージ・エクステントを検索する。該当するストレージ・エクステントがない場合、ＦＳＥＭから空きストレージ・エクステントを取得し、オブジェクトにストレージ・エクステントを関連付ける。
【０１２４】
次に、ファイルサーバ機２４は、ＦＣＥＭから空きキャッシュ・エクステントを取得し、その空きキャッシュ・エクステントをディスク、オブジェクト、ファイルの順に関連付ける。
【０１２５】
このように、ファイルサーバ機２４は、関連付けをオブジェクト、ストレージの順番で行う。一方、検索を行う場合、ファイルサーバ機２４は、ストレージ、オブジェクトの順番で行う。
【０１２６】
次に、キャッシュ・エクステントの書き出し（コミット）について説明する。コミットは、キャッシュ・エクステントの内容をディスク装置３５に格納することであり、キャッシュメモリ４４に記憶されたファイルの内容が電源遮断により喪失するのを防ぐ。このコミットはコミット・デーモン・プログラムの実行により行われる。このコミット・デーモン・プログラムによるＣＰＵ３１（図３）の動作を、コミット・デーモンの動作として説明する。
【０１２７】
ファイルサーバ機２４は、コミット・デーモンを一定時間毎に起動する。起動されたコミット・デーモンは、先ずディスク装置３５（図３）にバインドされているキャッシュ・エクステントをディスク装置３５のオフセット順にＣＥＭ内で検索する。次に、コミット・デーモンは未書き出しのキャッシュ・エクステントを所定個数選択し、内容をディスク装置３５に書き出す。
【０１２８】
次に、キャッシュ・エクステントの再利用（解放・パージ）について説明する。
キャッシュメモリ４４は有限な資源であるため、バインドを続けると資源が不足してくる。このため、利用度の低い（利用されてからの経過時間が長い、又は利用回数が少ない）キャッシュ・エクステントのバインドを解除し、再利用する。このための処理がパージ処理であり、キャッシュ・エクステントをキャッシュ対象から引き離し、空きキャッシュ・エクステントとする。この空きキャッシュ・エクステントが再利用可能なキャッシュ・エクステントである。
【０１２９】
先ず、キャッシュの内容がディスクに未書き出しの場合は「コミット処理」を行い、内容をディスクに書き出す。キャッシュ・エクステントは、自らを書き出すべきストレージ・エクステントの情報を保持しているため、速やかにディスクへの書き出しが可能である。ただし、キャッシュ・エクステントの状態が VALID
かつ DIRTY（未書き出し）の場合以外は書き出しを行う必要はない。
【０１３０】
次に、「アンバインド処理」を行いキャッシュ・エクステントとキャッシュ対象の関連を解消する。バインド処理の逆であり、ＣＨＴを検索し、対応するエクステントを削除する。最後に、キャッシュ・エクステントを開放する。ＦＣＥＴオブジェクトにバインドすることによりキャッシュ・エクステントは開放される。
【０１３１】
このパージ（パージ処理）はパージ・デーモン・プログラムの実行により行われる。このパージ・デーモン・プログラムによるＣＰＵ３１の動作を、パージ・デーモンの動作として説明する。
【０１３２】
ファイルサーバ機２４は、パージ・デーモンを一定時間毎に起動する。起動されたパージ・デーモンは、パージキューの長さを監視し、その長さが基準値を超えていた場合に、キューの先頭から超えている分の数のキャッシュ・エクステントのバインドを解除し、空きキャッシュ・エクステントを生成する。
【０１３３】
次に、上記のように構成された処理の手順を図１８〜図２８に従って説明する。
図１８，図１９は、クエリ処理のフローチャートである。
【０１３４】
尚、図１８，図１９は、キャッシュ対象からキャッシュ・エクステント（Ｃ−ｅｘｔ）を検索する手順を示しており、他の検索についても同様の手順により実施される。
【０１３５】
先ず、ファイルサーバ機２４は、キャッシュＩＤがオブジェクトＩＤか否かを判断し（ステップ２０１）、オブジェクトＩＤの場合にはキャッシュＩＤがＣＬＡＳＳ＿ＤオブジェクトＩＤか否かを判断する（ステップ２０２）。ＣＬＡＳＳ＿ＤオブジェクトＩＤの場合にはステップ２０４へ進み、そうでない場合にはWell KnownオブジェクトＩＤをＣＬＡＳＳ＿ＤオブジェクトＩＤに変換する（ステップ２０３）。ステップ２０１においてキャッシュＩＤがオブジェクトＩＤではない場合にはステップ２０４へ進む。
【０１３６】
ファイルサーバ機２４はキャッシュ・エクステントを検索し（ステップ２０４）、キャッシュ・エクステントがバインド済みか否かを判断する（ステップ２０５）。バインド済みの場合、ファイルサーバ機２４はキャッシュ・エクステントをロックしパージキューから外す（ステップ２０６）。次に、ファイルサーバ機２４はキャッシュ・エクステントの状態がＶＡＬＩＤ（有効）か否かを判断する（ステップ２０７）。キャッシュ・エクステントがキャッシュ対象（ファイル、オブジェクト、ストレージ）の内容で満たされている状態、或は現在のキャッシュ・エクステントの内容でキャッシュ対象を書き換えることが可能な状態を、キャッシュ・エクステントがVALID （有効）であるという。ファイルサーバ機２４は、有効な場合に当該処理を終了する。一方、キャッシュ・エクステントが有効ではない場合、ファイルサーバ機２４はキャッシュ・エクステントにデータを読み込み（ステップ２０８）、処理を終了する。
【０１３７】
ステップ２０５においてバインド済みではない場合、ファイルサーバ機２４はキャッシュＩＤがストレージＩＤか否かを判断し（ステップ２０９）、ストレージＩＤの場合にはキャッシュ・エクステントを割り当て、ストレージにバインドする（ステップ２１０）。
【０１３８】
ステップ２０９においてストレージＩＤではない場合、ファイルサーバ機２４は、キャッシュＩＤがオブジェクトか否かを判断する（図１９，ステップ２１１）。オブジェクトの場合、ストレージ・エクステントを検索し（ステップ２１２）、ストレージ・エクステントがバインド済みか否かを判断する（ステップ２１３）。バインド済みでない場合にはストレージ・エクステントを割り当てオブジェクトにバインドする（ステップ２１４）。
【０１３９】
バインド済みの場合又はオブジェクトにバインドした後、ディスク装置３５に対して再帰的にクリエを実行し（ステップ２１５）、キャッシュ・エクステントをオブジェクトにバインドし（ステップ２１６）、処理を終了する。
【０１４０】
一方、ステップ２１１においてオブジェクトではない場合、ファイルサーバ機２４はオブジェクトを検索し（ステップ２１７）、オブジェクトがバインド済みか否かを判断する（ステップ２１８）。オブジェクトがバインド済みではない場合にはオブジェクトＩＤを割り当てファイルにバインドする（ステップ２１９）。
【０１４１】
オブジェクトがバインド済みの場合又はファイルにバインドした後、オブジェクトに対して再帰的にクエリを実行し（ステップ２２０）、キャッシュ・エクステントをファイルにバインドし（ステップ２２１）、処理を終了する。
【０１４２】
次に、エクステント検索処理とエクステント割り当て処理を説明する。
「エクステント検索処理」は、ＣＨＴ，ＯＴ，ＦＴの検索処理であり、先のクエリ処理においてキャッシュ・エクステントを検索するとき（図１８のステップ２０４）にＣＨＴを検索する。キャッシュが存在しない場合には新規にキャッシュ・エクステントを割り当てる「エクステント割り当て処理」を実行する。このときにもＣＨＴを検索する。尚、使用中でないキャッシュ・エクステントはＦＣＥＴオブジェクトにバインドされている。
【０１４３】
次に、キャッシュ・エクステントをVALID な状態にするためにファイルの内容をキャッシュ・エクステントに読み込む。このときＦＴを検索し、対応するオブジェクトを特定し、ファイル読み込みをオブジェクト読み込みに翻訳する。更に、ＯＭを検索し、対応するストレージ・エクステントを特定し、オブジェクト読み込みをストレージ読み込みに翻訳する。最後に、実際にストレージのデータをキャッシュ・エクステントに読み込む。
【０１４４】
このファイル読み込みからストレージ読み込みへの翻訳において、ストレージが未割当ての場合があり、新規にストレージ・エクステントを割り当てる。このときにもＯＴを検索する。尚、使用中でないストレージ・エクステントはＦＳＥＴオブジェクトにバインドされている。
【０１４５】
割り当てられたキャッシュ・エクステントやストレージ・エクステントに対して「バインド処理」を実行する。キャッシュ・エクステントのバインド処理ではＣＨＴを検索し、対応する場所にエクステントを挿入する。ストレージ・エクステントのバインド処理ではＯＴを検索し、対応する場所にエクステントを挿入する。
【０１４６】
次に、エクステント検索処理とエクステント割り当て処理をフローチャートに従って説明する。
図２０は、エクステント検索処理のフローチャートであり、図２１は、エクステント割り当て処理のフローチャートである。これらの処理は図１８，１９のクエリ処理にて呼び出される。即ち、図２０のステップ２３１〜２３３は図１８，１９のステップ２０４，２１２のサブステップであり、図２１のステップ２４１〜２５１は図１８，１９のステップ２１０，２１４のサブステップである。
【０１４７】
先ず、エクステント検索処理を図２０に従って説明する。
ファイルサーバ機２４はブランチノードであるか否かを判断し（ステップ２３１）、ブランチノードの場合にはエクステント配列をオフセットで検索し（ステップ２３２）、ステップ２３１へ移行する。
【０１４８】
ブランチノードではない場合、ファイルサーバ機２４はエクステント配列をオフセットで検索し（ステップ２３３）、処理を終了する。つまり、リーフノードのエクステント配列をオフセットで検索する。
【０１４９】
次に、エクステント割り当て処理を図２１に従って説明する。
先ず、ファイルサーバ機２４は、要求長から検索対象の空きエクステント・マップ（ＦＳＥＭ又はＦＣＥＭ）を選択し（ステップ２４１）、ヒントオフセットリストから空きエクステントのオフセットを取得する（ステップ２４２）。
【０１５０】
ヒントオフセットリストは、フリーキャッシュ・エクステントやフリーストレージ・エクステントの検索を高速化するための仕組みである。過去にＦＣＥＭやＦＳＥＭに返却されたキャッシュ・エクステントやストレージ・エクステントのオフセット（キャッシュ上のアドレスやストレージ上のオフセット）を蓄積しておき、蓄積された情報を参照して検索することにより次回の検索が省略できる。
【０１５１】
次に、ファイルサーバ機２４は、ヒントオフセットが得られたか否かを判断し（ステップ２４３）、得られた場合には空きエクステント・マップ（ＦＳＥＭ又はＦＣＥＭ）をオフセットで検索する（ステップ２４４）。
【０１５２】
次に、ファイルサーバ機２４は、空きエクステントがあるか否かを判断し（ステップ２４５）、空きがある場合には空きエクステント・マップから空きエクステントをアンバインドする（ステップ２４６）。
【０１５３】
次に、ファイルサーバ機２４は、取得した空きエクステントが要求長より大きいか否かを判断し（ステップ２４７）、大きい場合にはエクステントを要求長で分割し残りを空きエクステント・マップにバインドする（ステップ２４８）。要求長は、エクステントに格納するデータの量に対応する。
【０１５４】
そして、ヒントオフセットリストにバインドしたエクステントのオフセットを登録する（ステップ２４９）。一方、ステップ２４７において要求長よりも大きくない場合、ファイルサーバ機２４はエクステント割り当て処理を終了する。
【０１５５】
ステップ２４３においてヒントオフセットが得られない場合、ファイルサーバ機２４は検索対象の空きエクステント・マップを１クラス小さいものに変更する（ステップ２５０）。そして、空きエクステントが選択できたか否かを判断し（ステップ２５１）、できた場合にはステップ２４２へ、できない場合には処理を終了する。
【０１５６】
図２２は、バインド処理のフローチャートである。
ファイルサーバ機２４は、先ずＣＥＭにルートノードがあるか否かを判断し（ステップ２６１）、無い場合にはルートノードを割り当て、リーフノードとして初期化する（ステップ２６２）。
【０１５７】
次に、ファイルサーバ機２４は、ブランチノードであるか否かを判断し（ステップ２６３）、ブランチノードの場合にはエクステント配列をオフセットで検索する（ステップ２６４）。
【０１５８】
次に、ファイルサーバ機２４は、エクステントがあるか否かを判断し（ステップ２６５）、ある場合にはステップ２６３へ移行し、無い場合には最終エクステントを選択（ステップ２６６）してステップ２６３へ移行する。
【０１５９】
一方、ステップ２６３においてブランチノードではない場合、ファイルサーバ機２４は、エクステントを挿入し（ステップ２６７）、リーフノードの分割が必要か否かを判断する（ステップ２６８）。その分割が必要な場合にはリーフノードを分割して（ステップ２６９）ステップ２６７へ移行し、必要がない場合には処理を終了する。
【０１６０】
図２３は、アンロック処理のフローチャートである。
アンロック処理は、クエリ処理によってキャッシュ・エクステントに施されたロックを解除する処理であり、クエリ処理とセットで使用される。クエリ処理によって返されるキャッシュ・エクステントは排他のためのロックがされた状態（図１８のステップ２０６）にある。このロックされたキャッシュ・エクステントを他から利用するために、このロックを解除する。  ファイルサーバ機２４は、キャッシュ・エクステントを検索し（ステップ２７１）、ロックカウントをディクリメントする（ステップ２７２）。そして、ロックカウントが「０」（ゼロ）か否かを判断し（ステップ２７３）、「０」でない場合には処理を終了し、「０」の場合にはＢＵＳＹフラグを下ろす（ステップ２７４）。次に、ＷＡＮＴフラグが立っているか否かを判断し（ステップ２７５）、立っている場合には待ちスレッドを起動する（ステップ２７６）。
【０１６１】
一方、ステップ２７５においてウエイトフラグが立っていない場合、パージ記述子が全て使用中か否かを判断する（ステップ２７７）。キャッシュ対象とキャッシュ・エクステントのマッピングを解消し、キャッシュ・エクステントを返却することをパージと呼ぶ。パージ記述子はパージ処理に必要な情報（ＣＥＭを検索するための情報）を保持する。
【０１６２】
パージは「アンロック」時点で可能となるが、これをできるだけ保留することによって同じキャッシュ対象への「クエリ」を高速に処理するいわゆる「キャッシュ・ヒット」させることができる。このパージを保留するためにパージ記述子を使用する。
【０１６３】
「アンロック」時点にパージ記述子を作成しＬＲＵリストにつなぎ、一定時間毎にＬＲＵリスト先頭のパージ記述子が処理される。パージ記述子が処理される前に再び「クエリ」されることでパージ記述子はＬＲＵリストから取り除かれる。
【０１６４】
パージ記述子は、キャッシュＩＤ，オフセット，長さ，リスト上での前と後ろのエントリのメモリ上のアドレスからなる。キャッシュＩＤは、ファイルＩＤ，オブジェクトＩＤ，ストレージＩＤの何れかである。例えば、パージ記述子は、「0x100000005, 0x1000000, 0x8000,  0x6bef8f88, 0x0」のように表される。この例において、「0x100000005 」はファイルＩＤ、「0x1000000 」はオフセット、「0x8000」は長さ、「0x6bef8f88」はリスト上の後のエントリのアドレス、「0x0 」はリスト上の前のエントリのアドレスである。この例は、ＬＲＵリストの先頭にあるパージ記述子を示す。
【０１６５】
全てのパージ記述子が使用中の場合にはキャッシュ・エクステントをパージし（ステップ２７８）、パージ・デーモンを起動する（ステップ２７９）。パージ記述子が全て使用中ではない場合、パージ記述子を作成し、キューにつなげる（ステップ２８０）。そして、パージキューの長さが上水線（基準値）を超えているか否かを判断し（ステップ２８１）、超えている場合にはステップ２７９においてパージ・デーモンを起動し、超えていない場合には処理を終了する。
【０１６６】
図２４は、パージ処理のフローチャートである。
先ず、ファイルサーバ機２４は、キャッシュ・エクステントを検索し（ステップ２９１）、キャッシュ・エクステントの内容をコミットする（ステップ２９２）。次に、キャッシュＩＤがストレージＩＤか否かを判断し（ステップ２９３）、ストレージＩＤの場合にはキャッシュ・エクステントをストレージからアンバインドし（ステップ２９４）、処理を終了する。
【０１６７】
キャッシュＩＤがストレージＩＤではない場合、キャッシュＩＤがオブジェクトＩＤか否かを判断する（ステップ２９５）。オブジェクトＩＤの場合にはストレージ・エクステントを検索し（ステップ２９６）、ストレージに対して再帰的にパージを実行し（ステップ２９７）、キャッシュ・エクステントをオブジェクトからアンバインドし（ステップ２９８）、処理を終了する。
【０１６８】
キャッシュＩＤがオブジェクトＩＤではない場合、オブジェクトを検索し（ステップ２９９）、オブジェクトに対して再帰的にパージを実行し（ステップ３００）、キャッシュ・エクステントをファイルからアンバインドし（ステップ３０１）、処理を終了する。
【０１６９】
図２５は、コミット処理のフローチャートである。
先ず、ファイルサーバ機２４は、キャッシュ・エクステントを検索し（ステップ３１１）、キャッシュＩＤがストレージＩＤか否かを判断する（ステップ３１２）。ストレージＩＤの場合にはキャッシュ・エクステントの内容をディスク装置３５に書き出し（ステップ３１３）、処理を終了する。
【０１７０】
キャッシュＩＤがストレージＩＤではない場合、キャッシュＩＤがオブジェクトＩＤか否かを判断する（ステップ３１４）。オブジェクトＩＤの場合にはストレージ・エクステントを検索し（ステップ３１５）、キャッシュ・エクステントの内容をストレージ・エクステントに書き出し（ステップ３１６）、処理を終了する。
【０１７１】
キャッシュＩＤがオブジェクトＩＤではない場合、オブジェクトを検索し（ステップ３１７）、キャッシュ・エクステントの内容をオブジェクトに書き出し（ステップ３１８）、処理を終了する。
【０１７２】
図２６は、アンバインド処理のフローチャートである。
先ず、ファイルサーバ機２４は、ブランチノードであるか否かを判断し（ステップ３２１）、ブランチノードの場合にはエクステント配列をオフセットで検索し（ステップ３２２）、ステップ３２１へ移行する。
【０１７３】
ブランチノードではない場合、ファイルサーバ機２４は、エクステントを削除し（ステップ３２３）、ノードにエクステントがないか否かを判断し（ステップ３２４）、無い場合にはＢ−ｔｒｅｅの縮小処理を実行し（ステップ３２５）、処理を終了する。また、ノードにエクステントがある場合にも処理を終了する。
【０１７４】
図２７は、パージ・デーモンの処理フローチャートである。
ファイルサーバ機２４（ＣＰＵ３１）は、起こされるまで待機し（ステップ３３１）、パージキューの長さが上水線を越えているか否かを判断する（ステップ３３２）。そして、超えている場合にはパージ記述子をキューからはずし、記述子の内容に従ってパージし（ステップ３３３）、ステップ３３２へ移行し、超えていない場合には再び起こされるまで待機する。
【０１７５】
図２８は、コミット・デーモンの処理フローチャートである。
ファイルサーバ機２４（ＣＰＵ３１）は、一定時間スリープし（ステップ３４１）、パージキューの長さが下水線（基準値）未満か否かを判断しステップ３４２）、未満の場合は再びスリープする。
【０１７６】
パージキューの長さが下水線以上の場合、コミット回数が一定回数未満か否かを判断し（ステップ３４３）、その場合にはディスク装置３５にバインドされているキャッシュ・エクステントを検索する（ステップ３４４）。そして、キャッシュ・エクステントがあるか否かを判断し（ステップ３４５）、ある場合にはキャッシュ・エクステントの内容をディスク装置３５に書き出す（ステップ３４６）。そして、パージキューを一巡したか否か（パージキューに接続された全てのキャッシュ・エクステントについて実施したか否か）を判断し（ステップ３４７）、一巡している場合にはステップ３４２へ移行する。一巡していない場合及びキャッシュ・エクステントが無い（ステップ３４５）場合、ステップ３４３へ移行する。
【０１７７】
以上記述したように、本実施の形態によれば、以下の効果を奏する。
（１）ファイルサーバ機２４のＭＢＣ機構４２は、キャッシュメモリ４４を複数のエクステントの集まりとして管理する。ディスク装置３５のディスクブロックからオブジェクトが構成され、オブジェクトからファイルが構成される階層構造において、ＭＢＣ機構４２は、階層レベルと同一階層レベル内のオブジェクト識別子からなるキャッシュＩＤを生成する。更に、キャッシュＩＤとキャッシュ・エクステントの関連をキャッシュＩＤに特有なキーで保持するキャッシュ・ヘッダを管理するテーブルを階層毎に作成する。そして、ディスク装置３５の内容に対するアクセスに応答してキャッシュ・ヘッダ・テーブルを、アクセスするオブジェクトのキャッシュＩＤとキーで検索するようにした。その結果、各オブジェクト（ファイル、オブジェクト、ディスクブロック）に対応するキャッシュメモリが必要なく、キャッシュメモリ間でデータコピーをする必要がないので、オーバーヘッドを少なくすることができる。
【０１７８】
尚、前記実施形態は、以下の態様に変更してもよい。
・上記実施形態のファイルサーバ機２４〜２６を、別の形態のシステムに適用しても良い。
【０１７９】
例えば、図２９に示す高速大容量データベース向けシステム１５０に適用する。このシステム１５０は、複数（図において３つ）のクライアント機２１，２２，２３と、サーバ・クラスタ・システム１５１がネットワーク２７に接続されてなる。サーバ・クラスタ・システム１５１は、複数（図において１２台）のファイルサーバ機１５２から構成される。これらファイルサーバ機１５２は、上記実施形態のファイルサーバ機２４〜２６と実質的に同一の機能を持ち、ノードと呼ばれる。ノード数はシステム１５０にて要求される入出力性能要件により決定される。このシステム１５０では、データベース（ファイル）の構成オブジェクトをサーバ・クラスタ・システム１５１の各ノードに分散配置する。このような構成により、大容量のデータベースを高速にアクセスすることができる。
【０１８０】
また、図３０に示すクラスタ・システム１６０に適用する。このシステム１６０は、複数（図において１２）のノード１６１がネットワーク２７を介して相互に接続されてなる。各ノード１６１はクライアント機１６２とファイルサーバ機１６３から構成されている。従って、各ノード１６１は、実質的に同じ機能を有している。そして、クラスタ・システム１６０全体で１つのファイルシステムビューを構成する。そして、各ノード１６１に対してオブジェクトを冗長配置する、即ち、複数のノード１６１に実質的に同じオブジェクトを配置する（オブジェクトをコピーする）。このため、１つ又はいくつかのノード１６１が故障しても、同じ機能を持つ他のノード１６１にオブジェクトが配置されていれば、システム１６０の稼働に影響はない。即ち、ノードの数とオブジェクト配置の冗長度により稼働率を高め、耐ノード故障性を設定することができる。
【０１８１】
また、図３１に示す並列計算システム１７０に適用する。このシステム１７０は、クライアント・システム１７１とファイルサーバ機１７２がネットワーク２７を介して接続されてなる。クライアント・システム１７１は、複数（図において１２）の計算ノード１７３からなり、各計算ノード１７３は並列的に動作する。従って、ファイルサーバ機１７２に格納したファイルに対する処理を各計算ノード１７３に分担させる、即ち各計算ノード１７３の処理範囲を設定することで、演算処理時間を極めて短縮することができる。
【０１８２】
以上の様々な実施の形態をまとめると、以下のようになる。
（付記１）  クライアント機とディスク装置の間に設けられたキャッシュ領域に前記ディスク装置の内容の一部を記憶させ、該内容に対するアクセスに応答して前記キャッシュ領域に記憶した内容を前記クライアント機へデータ転送するファイル制御装置にて実行されるキャッシュ制御プログラムであって、
前記ファイル制御装置は、
前記キャッシュ領域を複数のエクステントの集まりとして管理し、
一次オブジェクトから二次オブジェクトが構成され、二次オブジェクトから三次オブジェクトが構成されるような階層構造において、階層レベルと同一階層レベル内のオブジェクト識別子からなるキャッシュＩＤを生成し、
前記キャッシュＩＤとキャッシュ・エクステントの関連をキャッシュＩＤに特有なキーで保持するキャッシュ・ヘッダを管理するテーブルを階層毎に作成し、前記ディスク装置の内容に対するアクセスに応答して前記テーブルを、アクセスするオブジェクトのキャッシュＩＤと前記キーで検索すること、
を実行するキャッシュ制御プログラム。
（付記２）  前記ファイル制御装置は、前記一次オブジェクトに関連付けたキャッシュ・エクステントを、他の階層のオブジェクトの対応する部分に対してそれぞれの階層のキャッシュ・ヘッダにより関連付けること、を実行する付記１記載のキャッシュ制御プログラム。
（付記３）  前記ファイル制御装置は、前記各層のオブジェクトのそれぞれを関連付けたマップを記憶し、該テーブルにより各層のオブジェクトを相互に検索すること、を実行する付記１又は２記載のキャッシュ制御プログラム。
（付記４）  前記テーブルを複数のブロックにて構成し、各ブロックを複数のエントリにて構成し、
前記ファイル制御装置は、前記テーブルのエントリを用いて前記エクステントを管理するマップを作成し、前記アクセス時に該マップを検索すること、を実行する付記１乃至３のうちの何れか一に記載のキャッシュ制御プログラム。
（付記５）  前記クライアント機及び前記ファイル制御装置はネットワークに接続され、
前記キャッシュＩＤにはネットワーク上の特定ドメインにおけるノードの識別番号が含まれ、
前記ファイル制御装置はキャッシュ・ヘッダのテーブルを、前記ネットワークを介してノード間で配布すること、を実行する付記１乃至４のうちの何れか一に記載のキャッシュ制御プログラム。
（付記６）  クライアント機とディスク装置の間に設けられたキャッシュ領域に前記ディスク装置の内容の一部を記憶させ、該内容に対するアクセスに応答して前記キャッシュ領域に記憶した内容を前記クライアント機へデータ転送するファイル制御装置におけるキャッシュ制御方法であって、
前記ファイル制御装置は、
前記キャッシュ領域を複数のエクステントの集まりとして管理し、
一次オブジェクトから二次オブジェクトが構成され、二次オブジェクトから三次オブジェクトが構成されるような階層構造において、階層レベルと同一階層レベル内のオブジェクト識別子からなるキャッシュＩＤを生成し、
前記キャッシュＩＤとキャッシュ・エクステントの関連をキャッシュＩＤに特有なキーで保持するキャッシュ・ヘッダを管理するテーブルを階層毎に作成し、前記ディスク装置の内容に対するアクセスに応答して前記テーブルを、アクセスするオブジェクトのキャッシュＩＤと前記キーで検索すること、
を特徴とするキャッシュ制御方法。
（付記７）  クライアント機とディスク装置の間に設けられたキャッシュ領域に前記ディスク装置の内容の一部を記憶させ、該内容に対するアクセスに応答して前記キャッシュ領域に記憶した内容を前記クライアント機へデータ転送するファイル制御装置であって、
前記キャッシュ領域を複数のエクステントの集まりとして管理し、
一次オブジェクトから二次オブジェクトが構成され、二次オブジェクトから三次オブジェクトが構成されるような階層構造において、階層レベルと同一階層レベル内のオブジェクト識別子からなるキャッシュＩＤを生成し、
前記キャッシュＩＤとキャッシュ・エクステントの関連をキャッシュＩＤに特有なキーで保持するキャッシュ・ヘッダを管理するテーブルを階層毎に作成し、前記ディスク装置の内容に対するアクセスに応答して前記テーブルを、アクセスするオブジェクトのキャッシュＩＤと前記キーで検索すること、
を特徴とするファイル制御装置。
（付記８）  クライアント機とディスク装置の間に設けられたキャッシュ領域に前記ディスク装置の内容の一部を記憶させ、該内容に対するアクセスに応答して前記キャッシュ領域に記憶した内容を前記クライアント機へデータ転送するファイル制御装置におけるキャッシュ制御プログラムを記録した記録媒体であって、
前記ファイル制御装置は、
前記キャッシュ領域を複数のエクステントの集まりとして管理し、
一次オブジェクトから二次オブジェクトが構成され、二次オブジェクトから三次オブジェクトが構成されるような階層構造において、階層レベルと同一階層レベル内のオブジェクト識別子からなるキャッシュＩＤを生成し、
前記キャッシュＩＤとキャッシュ・エクステントの関連をキャッシュＩＤに特有なキーで保持するキャッシュ・ヘッダを管理するテーブルを階層毎に作成し、前記ディスク装置の内容に対するアクセスに応答して前記テーブルを、アクセスするオブジェクトのキャッシュＩＤと前記キーで検索すること、
を特徴とするキャッシュ制御プログラムを記録した記録媒体。
【０１８３】
【発明の効果】
以上詳述したように、本発明によれば、各オブジェクトに対応するキャッシュメモリが必要なく、キャッシュメモリ間のコピーが不要になるのでオーバーヘッドを少なくすることができる。
【図面の簡単な説明】
【図１】  一実施形態のファイルサーバ機の機能説明図である。
【図２】  一実施形態のネットワークシステムの概略構成図である。
【図３】  一実施形態のファイルサーバ機の概略構成図である。
【図４】  ファイルサーバ機のファイル記録の説明図である。
【図５】  テーブルの構造を示す説明図である。
【図６】  データ・エントリとエクステントの関係を示す説明図である。
【図７】  マップの構造を示す説明図である。
【図８】  データ・エントリとマップの関係を示す説明図である。
【図９】  エクステントによるノードの関連付けを示す説明図である。
【図１０】  エクステントの検索の説明図である。
【図１１】  エクステントの挿入の説明図である。
【図１２】  エクステントの削除の説明図である。
【図１３】  各種テーブルの関係を示す説明図である。
【図１４】  ＣＨＴによる関連付けの説明図である。
【図１５】  ＯＴによる関連付けの説明図である。
【図１６】  ＦＴによる関連付けの説明図である。
【図１７】  各種テーブルによる関連付けの説明図である。
【図１８】  クエリ処理のフローチャートである。
【図１９】  クエリ処理のフローチャートである。
【図２０】  エクステント検索処理のフローチャートである。
【図２１】  エクステント割り当て処理のフローチャートである。
【図２２】  バインド処理のフローチャートである。
【図２３】  アンロック処理のフローチャートである。
【図２４】  パージ処理のフローチャートである。
【図２５】  コミット処理のフローチャートである。
【図２６】  アンバインド処理のフローチャートである。
【図２７】  パージ・デーモンの処理フローチャートである。
【図２８】  コミット・デーモンの処理フローチャートである。
【図２９】  適用される別のシステム構成の説明図である。
【図３０】  適用される別のシステム構成の説明図である。
【図３１】  適用される別のシステム構成の説明図である。
【図３２】  従来のファイルサーバ機のファイル記録の説明図である。
【図３３】  従来のファイルサーバ機の機能説明図である。
【図３４】  従来のファイルサーバ機のアクセス手順の説明図である。
【符号の説明】
２１，２２，２３  クライアント機
２４，２５，２６  ファイルサーバ機
２７  ネットワーク
３５  ディスク装置
４２  マルチ・バインド・キャッシュ機構
４４  キャッシュメモリ
８１  ファイル（三次オブジェクト）
８２  オブジェクト（二次オブジェクト）
８３  ディスクブロック（ストレージ・エクステント、一次オブジェクト）
８４  キャッシュ・エクステント
８７〜８９  キャッシュ・エクステント・テーブル
【図１】
0004299555.tif 000007
【図２】
0004299555.tif 000008
【図３】
0004299555.tif 000009
【図４】
0004299555.tif 000010
【図５】
0004299555.tif 000011
【図６】
0004299555.tif 000012
【図７】
0004299555.tif 000013
【図８】
0004299555.tif 000014
【図９】
0004299555.tif 000015
【図１０】
0004299555.tif 000016
【図１１】
0004299555.tif 000017
【図１２】
0004299555.tif 000018
【図１３】
0004299555.tif 000019
【図１４】
0004299555.tif 000020
【図１５】
0004299555.tif 000021
【図１６】
0004299555.tif 000022
【図１７】
0004299555.tif 000023
【図１８】
0004299555.tif 000024
【図１９】
0004299555.tif 000025
【図２０】
0004299555.tif 000026
【図２１】
0004299555.tif 000027
【図２２】
0004299555.tif 000028
【図２３】
0004299555.tif 000029
【図２４】
0004299555.tif 000030
【図２５】
0004299555.tif 000031
【図２６】
0004299555.tif 000032
【図２７】
0004299555.tif 000033
【図２８】
0004299555.tif 000034
【図２９】
0004299555.tif 000035
【図３０】
0004299555.tif 000036
【図３１】
0004299555.tif 000037
【図３２】
0004299555.tif 000038
【図３３】
0004299555.tif 000039
【図３４】
0004299555.tif 000040