(57)【要約】【課題】  サーバーコンピュータとネットワークの負荷を軽減して大容量のファイルに対するＩ／Ｏ処理を高速に行う。【解決手段】  クライアントコンピュータ１によるファイルのオープン操作の際に親サーバーコンピュータ２からクライアントコンピュータ１が取得した実ファイル情報に基づいてクライアントコンピュータ１がチャネルスイッチ５を介してディスク装置４に直接的にアクセスしてファイル操作に関わる入出力処理を行う。また、ディスク装置４を子サーバーコンピュータ３で管理することで、同一の仮想ファイル上の異なる実ファイルに対して複数のクライアントコンピュータ１から同時にＩ／Ｏの処理を行うことを可能とする。【選択図】図２
2007293634.tif 000002
【特許請求の範囲】
【請求項１】
複数のディスク装置を管理する各ディスク装置毎の子サーバーコンピュータと前記子サーバーコンピュータを管理する親サーバーコンピュータと複数のクライアントコンピュータとを情報伝達可能に接続し、前記ディスク装置に大容量ファイルを分割して記憶するようにしたファイル共有方法であって、
前記クライアントコンピュータおよび子サーバーコンピュータと親サーバーコンピュータをネットワーク経由で接続すると共に、前記複数のディスク装置と前記各クライアントコンピュータおよび前記各子サーバーコンピュータをチャネルスイッチを介して接続し、
前記各ディスク装置の実ファイルシステムの構造および前記実ファイルシステムを跨ぐ仮想ファイルシステムの構造と前記仮想ファイルシステム内における実ファイルの記憶位置を特定する実ファイル情報を前記親サーバーコンピュータにファイル管理データベースとして予め登録しておき、
前記クライアントコンピュータによるファイルのオープン操作に際し、前記クライアントコンピュータが前記親サーバーコンピュータにネットワーク経由で要求を送信して前記親サーバーコンピュータから目的とするファイルに対応した実ファイル情報を取得し、
当該実ファイル情報に基づいて、前記クライアントコンピュータが前記チャネルスイッチを介して前記ディスク装置に直接的にアクセスしてファイル操作に関わる入出力処理を行うことを特徴としたファイル共有方法。
【請求項２】
前記クライアントコンピュータが前記実ファイル情報に基づいてディスク装置との間でファイル操作に関わる入出力処理を行う間に当該ディスク装置内における実ファィルの終端が検出されると、前記クライアントコンピュータが、当該実ファイルに続く実ファイルの実ファイル情報を前記親サーバーコンピュータに要求することを特徴とした請求項１記載のファイル共有方法。
【請求項３】
前記仮想ファイルシステム上のディレクトリのファイルハンドルを前記親サーバーコンピュータが生成すると共に、前記仮想ファイルシステム上のファイルのオフセットに基づいて前記親サーバーコンピュータが前記子サーバーコンピュータから実ファイルシステム上のファイルのファイルハンドルを取得し、前記親サーバーコンピュータが、仮想ファイルシステム上のディレクトリのファイルハンドルと実ファイルシステム上のファイルのファイルハンドルを実ファイル情報として前記クライアントコンピュータに送信することを特徴とした請求項１または請求項２記載のファイル共有方法。
【請求項４】
前記クライアントコンピュータが、前記親サーバーコンピュータから取得した実ファイル情報をファイル管理表に記憶し、ファイルのオープン操作に際して前記ファイル管理表に目的とするファイルに対応した実ファイル情報が記憶されているか否かを判定し、記憶されている場合にはファイル管理表に記憶されている実ファイル情報に基づいて該当する子サーバーコンピュータに対して直接的に入出力処理の要求を送信してファイル操作に関わる入出力処理を開始する一方、
記憶されていない場合には、前記親サーバーコンピュータにネットワーク経由で要求を送信して前記親サーバーコンピュータから目的とするファイルに対応した実ファイル情報を取得することを特徴とした請求項１，請求項２または請求項３記載のファイル共有方法。
【請求項５】
複数のディスク装置を管理する子サーバーコンピュータと前記子サーバーコンピュータを管理する親サーバーコンピュータと複数のクライアントコンピュータを情報伝達可能に接続し、前記ディスク装置に大容量ファイルを分割して記憶するようにしたファイル共有システムであって、
前記クライアントコンピュータおよび子サーバーコンピュータと親サーバーコンピュータがネットワーク経由で接続されると共に、前記複数のディスク装置と前記各クライアントコンピュータおよび前記各子サーバーコンピュータがチャネルスイッチを介して接続され、
前記親サーバーコンピュータには、前記各ディスク装置の実ファイルシステムの構造および前記実ファイルシステムを跨ぐ仮想ファイルシステムの構造と前記仮想ファイルシステム内における実ファイルの記憶位置を特定する実ファイル情報を生成する子サーバー管理手段と、生成された実ファイル情報を記憶するファイル管理データベースが設けられ、
前記クライアントコンピュータには、ファイルのオープン操作に際し、前記親サーバーコンピュータにネットワーク経由で要求を送信して前記親サーバーコンピュータから目的とするファイルに対応した実ファイル情報を取得する実ファイル情報取得手段と、取得された実ファイル情報に基いて該当する子サーバーコンピュータに対して直接的に入出力処理の要求を送信し、該子サーバーコンピュータから送信されたブロックＩ／Ｏ情報に従って、チャネルスイッチを介して前記ディスク装置に直接的にアクセスしてファイル操作に関わる入出力処理を行うＩ／Ｏ要求手段が設けられていることを特徴としたファイル共有システム。
【請求項６】
前記クライアントコンピュータには、実ファイル情報を記憶するファイル管理表と、前記実ファイル情報取得手段が取得した実ファイル情報をファイル管理表に登録する実ファイル情報登録手段とが設けられ、
前記Ｉ／Ｏ要求手段は、ファイルのオープン操作に際して前記ファイル管理表に目的とするファイルに対応した実ファイル情報が記憶されているか否かを判定し、記憶されている場合には前記ファイル管理表に記憶されている実ファイル情報に基づいて該当する子サーバーコンピュータに対して直接的に入出力処理の要求を送信する一方、
記憶されていない場合には、前記親サーバーコンピュータにネットワーク経由で要求を送信して前記親サーバーコンピュータから目的とするファイルに対応した実ファイル情報を取得するように構成されていることを特徴とした請求項５記載のファイル共有システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のディスク装置の実ファイルシステムを跨ぐようにして構成された仮想ファイルシステム上に大容量ファイルを記憶するファイル共有方法およびファイル共有システムの改良に関する。
【背景技術】
【０００２】
メタデータサーバーおよび複数のオブジェクトストレージサーバーとクライアントからなるシステム上でファイルを共有する方法が非特許文献１として提案されている。
【０００３】
このファイル共有方法は、ファイルシステムの管理情報のみを持つメタデータサーバーと、オブジェクトストレージサーバーと呼ばれる複数のディスクへのＩ／Ｏのみを行うサーバーを有し、クライアントがメタデータサーバーから取得したファイル管理情報を元に各ディスクへＩ／Ｏ処理を依頼することによりファイルの共有を実現している。
【０００４】
このような構成を有する従来のファイル共有方法は、次のように動作する。例えば、クライアントがファイルを参照する際の処理としては、クライアントがメタデータサーバーに対して参照したいファイルのメタデータを要求する。メタデータサーバーは、求められたファイルに対するメタデータを同クライアントへ送信する。同クライアントは、そのメタデータを基に対応するオブジェクトストレージサーバーへファイルを参照させるよう要求する。オブジェクトストレージサーバーは、メタデータに対応するファイルをディスク装置から読み込んで同クライアントへ送信する。
【０００５】
しかし、この従来技術には、次のような問題点があった。第１の問題点は、多くのクライアントから、多数のＩ／Ｏ要求をメタデータサーバーが受信するような場合、メタデータサーバーへの負荷が高くなり、一度には処理しきれなくなる可能性があることである。その理由は、Ｉ／Ｏ処理の際に、クライアントがメタデータサーバーに対してＩ／Ｏ対象のファイルのメタデータを要求しなければならないためである。
【０００６】
第２の問題点は、多くのクライアントから、多数のメタデータが同じオブジェクトストレージサーバーへ送信された場合、そのオブジェクトストレージサーバーのＩ／Ｏ処理能力が追いつかず、Ｉ／Ｏ処理が遅延する可能性があることである。その理由はクライアントが、オブジェクトストレージサーバーにメタデータを送信することによってＩ／Ｏをオブジェクトストレージサーバーに依頼しなければならないためである。
【０００７】
第３の問題点は、多くのクライアントから、多くのＩ／Ｏが要求された場合、ネットワーク負荷が増大してデータ転送時間が遅延される可能性があることである。その理由は、クライアントは、ネットワークを介してオブジェクトストレージサーバーとの間でＩ／Ｏのデータを送受信するためである。
【０００８】
また、ファイル管理情報のみを処理するファイル管理用計算機とクライアントを構成する他の計算機をネットワークで接続し、クライアントから要求のあったファイルに関連するファイル管理情報をファイル管理用計算機からネットワーク経由でクライアントに送信し、クライアントがファイル管理情報に基づいてネットワークを経由せずに共有ディスクに直接アクセスしてファイル操作を行うようにした共有ファイルシステムが特許文献１として提案されている。
【０００９】
しかし、このものは、ファイル操作の度にファイル管理情報をファイル管理用計算機からクライアントに送信する必要があり、前記と同様、多数のクライアントからの要求がファイル管理用計算機に集中した場合にファイル管理用計算機やネットワークの負荷が増大する問題がある。
【００１０】
また、ファイルへのアクセスに際してクライアントをファイル単位で排他的に制御しているため、複数のクライアントが同じファイルに対して同時にアクセスすることはできない。従って、複数のディスク装置を統合して仮想ファイルシステム上で大容量のファイルを取り扱うような場合、異なるディスク装置に実ファイルが分散している場合であっても、個々の実ファイルに対して書き込み等の処理を並行して行えない不都合がある。
【００１１】
【特許文献１】特開１１−１２００６３号公報
【非特許文献１】http://www.lustre.org/docs/whitepaper.pdf
【発明の開示】
【発明が解決しようとする課題】
【００１２】
本発明の課題は、前記従来技術の不都合を改善し、サーバーコンピュータとネットワークの負荷を軽減して大容量のファイルに対するＩ／Ｏ処理を高速に行うことができ、また、同じ仮想ファイルシステム上のファイルであっても実ファイルが異なれば複数のクライアントコンピュータからの同時アクセスが可能なファイル共有方法およびファイル共有システムを提供することにある。
【課題を解決するための手段】
【００１３】
本発明は、複数のディスク装置を管理する子サーバーコンピュータと前記子サーバーコンピュータを管理する親サーバーコンピュータと複数のクライアントコンピュータとを情報伝達可能に接続し、前記ディスク装置に大容量ファイルを分割して記憶するようにしたファイル共有方法およびファイル共有システムであり、前記課題を達成するため、特に、
前記クライアントコンピュータおよび子サーバーコンピュータと親サーバーコンピュータをネットワーク経由で接続すると共に、前記複数のディスク装置と前記各クライアントコンピュータおよび前記各子サーバーコンピュータをチャネルスイッチを介して接続し、
前記各ディスク装置の実ファイルシステムの構造および前記実ファイルシステムを跨ぐ仮想ファイルシステムの構造と前記仮想ファイルシステム内における実ファイルの記憶位置を特定する実ファイル情報を前記親サーバーコンピュータにファイル管理データベースとして予め登録しておき、
前記クライアントコンピュータによるファイルのオープン操作に際し、前記クライアントコンピュータが前記親サーバーコンピュータにネットワーク経由で要求を送信して前記親サーバーコンピュータから目的とするファイルに対応した実ファイル情報を取得し、
当該実ファイル情報に基づいて、前記クライアントコンピュータが前記チャネルスイッチを介して前記ディスク装置に直接的にアクセスしてファイル操作に関わる入出力処理を行うことを特徴とした構成を有する。
【００１４】
例えば、図１に示すように、各ディスク装置４毎の子サーバーコンピュータ３と複数の子サーバーコンピュータ３を管理する親サーバーコンピュータ２と複数のクライアントコンピュータ１とをイーサネット（登録商標）等のネットワーク経由で接続し、複数のディスク装置４と各クライアントコンピュータ１および各子サーバーコンピュータ３をファブリックトポロジー形式のチャネルスイッチ５を介して接続する。
そして、図２に示すように１つの大規模ファイルシステムを複数の子サーバーコンピュータ３で分担して管理し、図３に示すように１つの巨大ファイルを同様に複数の子サーバーコンピュータ３で分担して管理する。
各子サーバーコンピュータ３はそれぞれ個別に管理する実ファイルシステムを持っており、これらを親サーバーコンピュータ２がクライアントコンピュータ１に対して、あたかも１つのファイルシステムであるように見せかける(仮想ファイルシステム)。
さらに、各実ファイルシステム内に大容量ファイルの分割されたある一部分をそれぞれ配置し、これらを親サーバーコンピュータ２がクライアントコンピュータ１に対して、あたかも１つのファイルであるように見せかける(仮想ファイル)。
クライアントコンピュータ１は、ファイルのオープン処理において、ネットワークを介して、親サーバーコンピュータ２へ該当するファイルが存在する子サーバーコンピュータ３とそのファイルに関する情報を要求する。この時、親サーバーコンピュータ２はファイル管理データベースから該当する子サーバーコンピュータ３を検索し、子サーバーコンピュータ３に対して該当ファイルのファイルハンドルを取得するLOPOKUP処理を実行し、仮想ファイルシステム上でファイルまたはディレクトリを一意に特定するための識別子であるファイルハンドルを得る。
そして、クライアントコンピュータ１は、実ファイルシステムの構造と実ファイルシステムを跨ぐ仮想ファイルシステムの構造および仮想ファイルシステム内における実ファイルの記憶位置を特定するために必要とされる実ファイル情報、つまり、子サーバーコンピュータ３のＩＰアドレスやファイルオフセットおよびファイルハンドル等の情報を親サーバーコンピュータ２から受け取る。
読み出しや書き込みのＩ／Ｏ処理に際しては、親サーバーコンピュータ２を介さず、親サーバーコンピュータ２から受信した実ファイル情報に基づいて、クライアントコンピュータ１が該当するファイルのデータを管理する子サーバーコンピュータ３に対してＩ／Ｏのリクエストを送信する。
ファイルのオープン処理の回数は、読み出しや書き込み処理の回数に比べて、一般に少ないので、クライアントコンピュータ１の数が多い場合でも、親サーバーコンピュータ２には大きな負荷をかけることがない。
また、Ｉ／０データの転送は、親サーバーコンピュータ２や子サーバーコンピュータ３およびネットワークを共に介さず、クライアントコンピュータ１と該当するディスク装置４との間でチャネルスイッチ５を介して直接的に行われるため、子サーバーコンピュータ３やネットワークにも大きな負荷がかからない。
更に、ディスク装置４は各ディスク装置４毎の子サーバーコンピュータ３によって管理されているので、同一の仮想ファイル上の異なる実ファイルに対して複数のクライアントコンピュータ１から同時に書き込み処理を行うことが可能である。
【００１５】
また、クライアントコンピュータ１が実ファイル情報に基づいてディスク装置４との間でファイル操作に関わる入出力処理を行う間に当該ディスク装置４内における実ファィルの終端が検出されると、クライアントコンピュータ１が、当該実ファイルに続く実ファイルの実ファイル情報を親サーバーコンピュータ２に要求する。
【００１６】
従って、ファイルの規模が大容量であってファイルが複数のディスク装置４に分散して記憶されている場合であっても、クライアントコンピュータ１は、読み出しや書き込みに関わるＩ／Ｏ処理を円滑に継続することができる。
【００１７】
更に、クライアントコンピュータ１が、親サーバーコンピュータ２から取得した実ファイル情報をファイル管理表に記憶し、ファイルのオープン操作に際してファイル管理表に目的とするファイルに対応した実ファイル情報が記憶されているか否かを判定し、記憶されている場合にはファイル管理表に記憶されている実ファイル情報に基づいて目的とする実ファイル情報を管理する子サーバーコンピュータに対して直接的に入出力処理の要求を送信してファイル操作に関わる入出力処理を開始する一方、
記憶されていない場合には、前記親サーバーコンピュータ２にネットワーク経由で要求を送信して親サーバーコンピュータ２から目的とするファイルに対応した実ファイル情報を取得するようにする。
【００１８】
操作対象となるファイルの実ファイル情報がファイル管理表に記憶されている場合にはクライアントコンピュータ１から親サーバーコンピュータ２にアクセスして実ファイル情報を取得する必要がなくなるので、親サーバーコンピュータ２やネットワークの負荷を更に軽減することができる。
【発明の効果】
【００１９】
本発明のファイル共有方法およびファイル共有システムは、クライアントコンピュータによるファイルのオープン操作の際に親サーバーコンピュータからクライアントコンピュータが取得した実ファイル情報に基づいてクライアントコンピュータがチャネルスイッチを介してディスク装置に直接的にアクセスしてファイル操作に関わる入出力処理を行うようにしているので、読み出しや書き込み等のＩ／Ｏ処理の間にクライアントコンピュータから親サーバーコンピュータにアクセスする必要がなく、クライアントコンピュータの数が多い場合でも、親サーバーコンピュータに大きな負荷がかからない。
また、Ｉ／０データの転送は、親サーバーコンピュータや子サーバーコンピュータおよびネットワークを共に介さず、クライアントコンピュータと該当するディスク装置との間でチャネルスイッチを介して直接的に行われるため、子サーバーコンピュータやネットワークにも大きな負荷がかからない。
更に、ディスク装置は各ディスク装置毎の子サーバーコンピュータによって管理されているので、同一の仮想ファイル上の異なる実ファイルに対して複数のクライアントコンピュータから同時にＩ／Ｏの処理、特に、書き込みに関わる処理を行うこともできる。
【発明を実施するための最良の形態】
【００２０】
次に、本発明のファイル共有方法を適用したファイル共有システムの一実施形態について具体的に説明する。
図４は主にクライアントコンピュータ１（以下、単にクライアント１という）の構成の概略を示した機能ブロック図、図５は主に親サーバーコンピュータ２（以下、単に親サーバー２という）の構成の概略を示した機能ブロック図、図６は主に子サーバーコンピュータ３（以下、単に子サーバー３という）の構成の概略を示した機能ブロック図である。
【００２１】
図４〜図６に示される通り、本実施形態のファイル共有システムは、クライアント１と親サーバー２と子サーバー３およびディスク装置４によって構成され、図２に示されるように、子サーバー３と親サーバー２とクライアント１がイーサネット等のネットワークを経由して情報伝達可能に接続され、同時に、ディスク装置４とクライアント１および子サーバー３はファブリックトポロジー形式のチャネルスイッチ５を介して接続されている。
【００２２】
クライアント１は、図４に示されるように、通信手段１０１，Ｉ／Ｏ要求手段１０２，実ファイル情報操作手段１０３，オフセット変更手段１０４を備える。
Ｉ／Ｏ要求手段１０２は、Ｉ／Ｏ要求作成手段１０２ａ，受信待ち手段１０２ｂ，Ｉ／Ｏ発行手段１０２ｃを内包し、実ファイル情報操作手段１０３は、実ファイル情報取得手段１０３ａと実ファイル情報登録手段１０３ｂを内包する。
【００２３】
また、図５に示されるように、親サーバー２は、通信手段２０１，ファイル管理データベース２０２，仮想ファイル管理手段２０３，データベース検索更新手段２０４，子サーバー管理手段２０５を備える。
仮想ファイル管理手段２０３は、実ファイル終端処理手段２０３ａ，オフセット変更手段２０３ｂ，子サーバー割り当て手段２０３ｃ，アクセス許可手段２０３ｄ，アクセス許可リスト２０３ｅ，ファイルハンドル作成手段２０３ｆ，実ファイル情報取得手段２０３ｇ，実ファイル情報登録手段２０３ｈを内包し、子サーバー管理手段２０５は、ファイルハンドル取得手段２０５ａ，マウント手段２０５ｂ，実ファイル操作手段２０５ｃ，実ファイルシステム拡張手段２０５ｄ，子サーバー追加手段２０５ｅ，実ファイル情報収集手段２０５ｆを内包する。
【００２４】
そして、図６に示されるように、子サーバー３は、通信手段３０１，実ファイル管理手段３０２，実ファイルシステム管理手段３０３，ブロックＩ／Ｏ手段３０４を備える。実ファイル処理手段３０２は、アクセス許可手段３０２ａ，アクセス許可リスト３０２ｂ，Ｉ／Ｏ結果返信手段３０２ｃを内包する。
【００２５】
クライアント１，親サーバー２，子サーバー３，ディスク装置４はそれぞれ概略において次のように動作する。
【００２６】
〔クライアント１〕
クライアント１は、アプリケーションプログラムを実行するユーザプロセスが動作するコンピュータであり、一般にシステム内に複数存在する。
【００２７】
通信手段１０１は、クライアント１と親サーバー２またはクライアント１と任意の子サーバー３との間の通信を行うための機能を提供する。通信は、ＴＣＰ／ＩＰ等の一般的な通信プロトコルを用い、それぞれの通信相手と予めコネクションの確立をしておく必要がある。また、通信手段１０１は、受信したパケットの種別を判断し、クライアント１内の適切な処理手段に渡す機能も備えている。
【００２８】
Ｉ／Ｏ要求手段１０２は、ユーザプロセスから呼び出されたread,writeシステムコール内において実行される処理である。
【００２９】
Ｉ／Ｏ要求手段１０２内のＩ／Ｏ要求作成手段１０２ａは、クライアント１から、親サーバー２を介さず、直に子サーバー３にＩ／Ｏ要求を送信するために、実ファイル情報に基づいてＩ／Ｏ要求のためのパケットを作成する。この際、ファイル管理表１０５内に対応する実ファイル情報が存在しない場合は、親サーバー２へ実ファイル情報を問い合わせるパケットを送信する。
【００３０】
Ｉ／Ｏ要求手段１０２内の受信待ち手段１０２ｂは、Ｉ／Ｏ要求作成手段１０２ａによって子サーバー３へ要求されたＩ／Ｏに基づくレスポンスのパケットの受信待ちを行い、受信したパケットの種別がディスク装置４へのＩ／Ｏ発行（ブロックＩ／Ｏ情報）であるのかＩ／Ｏ処理終了通知であるのかを判別する。
Ｉ／Ｏ発行の場合は、Ｉ／Ｏ発行手段１０２ｃを呼び出し、Ｉ／Ｏ処理の終了通知の場合はＩ／Ｏ終了判別手段１０２ｄを呼び出す。
【００３１】
Ｉ／Ｏ要求手段１０２内のＩ／Ｏ発行手段１０２ｃは、受信したパケットの種別がディスク装置４へのＩ／Ｏ発行である場合、そのパケットには、どのディスク装置４のどの場所からどれだけの長さをリードまたはライトするかという情報が含まれているので、これに従ってディスクドライバに渡せる形式に変換し、ディスクドライバを呼び出す（ブロックＩ／Ｏの発行）。
また、発行したブロックＩ／Ｏの終了通知は、Ｉ／Ｏの終了割り込みの処理内において、パケットを受信した子サーバー３から指示されたブロックＩ／Ｏが終了した旨を伝えるパケットをその子サーバー３へ返信する。
【００３２】
Ｉ／Ｏ要求手段１０２内のＩ／Ｏ終了判別手段１０２ｄは、受信したパケットの種別がＩ／Ｏ処理の終了通知である場合において、Ｉ／Ｏ要求作成手段１０２ａから要求したＩ／Ｏが正常に終わったかどうかを確認する。正常終了の場合は、ユーザプロセスへ復帰する。
また、正常ではない場合には、次の２種がある。
（１）Ｉ／Ｏ中にエラーが発生した場合。
（２）エラーは発生していないが、Ｉ／Ｏすべき仮想ファイルの続きが他の子サーバー上にある場合。
（１）の場合は、エラー番号を設定してユーザプロセスへ復帰する。
（２）の場合は、ファイル管理表１０５に対応する実ファイル情報がある場合はそれを取り出し、ない場合は、実ファイル情報を親サーバー２へ問い合わせるパケットを送信して応答があるまで待ち合わせ、親サーバー２からその応答のパケットを受信した時点で、再度Ｉ／Ｏ要求作成手段１０２ａの処理に戻る。
【００３３】
実ファイル情報操作手段１０３は、ユーザプロセスから呼び出されたopenシステムコール内、またはread,writeシステムコール内において実行される処理である。
【００３４】
実ファイル情報操作手段１０３内の実ファイル情報取得手段１０３ａは、最初に、ファイル管理表１０５内にオープンしようとする仮想ファイルのiノード番号のエントリが存在するかどうかを調べる。
存在すれば、openシステムコールを呼び出したプロセスからiノード番号によって同エントリを参照できるので、この処理を終了する。
存在しない場合は、親サーバー２へ問い合わせるためのパケットを送信する。そして、親サーバー２からの応答を受信すると、実ファイル情報登録手段１０３ｂを呼び出す。
また、read,writeシステムコールの内部の処理において、Ｉ／Ｏ対象の仮想ファイル上の現在のファイルオフセットとiノード番号によりファイル管理表１０５内に対応する実ファイル情報が存在するか否かを確認し、存在しない場合は上記と同様に親サーバー２へ問い合わせるためのパケットを送信し、親サーバー２からの応答を受信すると、実ファイル情報登録手段１０３ｂを呼び出す。
【００３５】
実ファイル情報操作手段１０３内の、実ファイル情報登録手段１０３ｂは、親サーバー２から実ファイル情報を受信した際に、ファイル管理表１０５の対応するiノード番号のエントリ（エントリがなければ作成する）に、受信した実ファイル情報を仮想ファイルのファイルオフセットの順に登録する。
【００３６】
オフセット変更手段１０４は、ユーザプロセスから呼び出されたseekシステムコール内において呼び出され、仮想ファイル上での新しいオフセットの位置を決め、ファイル管理表１０５内に、そのオフセットに対応した実ファイル情報があるかどうかを調べる。ある場合は、何もしない。また、ない場合には、ファイルのオープン時と同様に、新しいオフセットを指定して実ファイル情報取得手段１０３ａを呼び出して対応する実ファイル情報を親サーバー２から取得し、実ファイル情報登録手段１０３ｂにより、ファイル管理表１０５の対応するエントリへ登録する。
【００３７】
ファイル管理表１０５は、ユーザプロセスが、openシステムコールやread,writeシステムコールあるいはseekシステムコールを呼び出した際に、実ファイル情報の登録，更新，参照が行われる。
また、対応する仮想ファイルが削除または移動された場合または対応する仮想ファイルが存在するディレクトリが削除移動された際に、それを認識した時点でその実ファイル情報が削除される。
このファイル管理表１０５は、iノード番号毎に仮想ファイル毎のエントリを持ち、そのエントリ毎に実ファイル毎のエントリを持つ。実ファイル毎のエントリは、各実ファイルの仮想ファイル上のオフセットにより、実ファイル情報を判別される。
【００３８】
ネットワークファイルシステム処理手段１０６は、ＵＮＩＸオペレーティングシステム（「ＵＮＩＸ」は登録商標）などで一般的に存在するネットワークファイルシステムのクライアントの処理を行う。
【００３９】
〔親サーバー２〕
親サーバー２は、システムに１つ存在し、仮想ファイルシステムや仮想ファイルの管理を行う。一般に、親サーバー２は、複数の仮想ファイルシステムを管理する。
【００４０】
通信手段２０１は、親サーバー２と任意の子サーバー３または親サーバー２と任意のクライアント１との間の通信を行うための機能を提供する。通信は、ＴＣＰ／ＩＰなどの一般的な通信プロトコルを用い、それぞれの通信相手と予めコネクションの確立をしておく必要がある。また、通信手段２０１は、受信したパケットの種別を判断し、親サーバー２内の適切な処理手段に渡す機能も備えている。
【００４１】
ファイル管理データベース２０２は、仮想ファイルシステム上のディレクトリとそのファイルハンドル及びそれに対応する各子サーバー３上の実ファイルシステムのサイズとマウントしたディレクトリ名とそのファイルハンドル及び実ファイルシステム上の各ディレクトリとそのファイルハンドルの対応ならびに仮想ファイルシステム上の各ディレクトリ内の仮想ファイル及びそれに対応する各子サーバー３上の実ファイル情報から成り、一般的なデータベースのソフトウェアによって構築される。
【００４２】
仮想ファイル管理手段２０３は、仮想ファイルと実ファイルの関係が複数の子サーバー３に跨るような場合において実行される処理である。
【００４３】
仮想ファイル管理手段２０３内の実ファイル終端処理手段２０３ａは、クライアント１が、ある子サーバー３との間で実ファイルに対するＩ／Ｏ処理を行っている過程において、その実ファイルの終端を検出し、且つ実ファイルのファイルサイズが、予め設定された実ファイルの最大長に達している場合には、そのクライアント１から、現在の実ファイルの続きの実ファイルに関する実ファイル情報を要求するパケットを受信する。この際、データベース検索更新手段２０４によってファイル管理データベース２０２内の現在の実ファイルが属する仮想ファイルのエントリを検索し、そのエントリ内の現在の実ファイル情報に続く実ファイル情報をクライアント１へ送信する。
【００４４】
仮想ファイル管理手段２０３内のオフセット変更手段２０３ｂは、クライアント１内のユーザプロセスがseekシステムコールにより仮想ファイルのオフセットを変更させた場合に、クライアント１から新しい実ファイル情報を要求するパケットが送信される。この際、そのオフセット位置に対応する実ファイル情報をクライアント１へ返信する。
【００４５】
仮想ファイル管理手段２０３内の子サーバー割り当て手段２０３ｃは、クライアント１からのファイルの生成の属性の付いたファイルのオープン時や実ファイルの終端検出時あるいはオフセット変更時において、実ファイルの生成が必要な場合、その実ファイルを管理する子サーバー３を１つ割り当てる。この割り当てには、全ての子サーバー３に実ファイルがなるべく均等に割り当てられるように、前回の子サーバー割り当て処理において割り当てられた子サーバー３の次の（隣の）子サーバー３を割り当てる。
【００４６】
仮想ファイル管理手段２０３内のアクセス許可手段２０３ｄは、アクセス許可リスト２０３ｅに登録されたクライアント１が、read,write要求発行時にその子サーバー３にアクセス可能なように、全ての子サーバー３に対して、これらアクセス許可を設定させるためのパケットを送信する。この処理は、システム全体を起動した場合とクライアント１を新たに追加した際に実行する。但し、子サーバー３を追加した際は、その子サーバー３に対してのみこのパケットを送信する。
【００４７】
クライアント１がマウントしている親サーバー２をアンマウントする際においては、クライアント１から一般的なネットワークファイルシステム手続きに基づいたパケットが送信される。仮想ファイル管理手段２０３内のアクセス許可リスト２０３ｅは、これを受けて、親サーバー２が管理する仮想ファイルシステムに対して当該クライアント１のアクセス許可の設定を解除する。
【００４８】
仮想ファイル管理手段２０３内のファイルハンドル作成手段２０３ｆは、クライアント１が親サーバー２をマウントする際において、親サーバー２がマウントプロトコルに従ったパケットを受信すると、アクセス許可を持つクライアント１であるかどうかを確認するためにアクセス許可リスト２０３ｅを参照する。
もし、同リストに当該クライアント１が登録されていない場合は、ステータスとしてエラーを設定し、通信手段２０１を介して同クライアント１へ返送する。
一方、同リストに当該クライアント１が登録されていた場合は、仮想ファイルシステムの先頭のディレクトリのファイルハンドルがファイル管理データベース２０２にあるかどうかをデータベース検索更新手段２０４を介して調べる。そして、まだ存在しない場合は、このファイルハンドルを作成してデータベース検索更新手段２０４によりファイル管理データベース２０２へ登録し、通信手段２０１によりマウントを要求したクライアントへ返送する。
また、クライアント１から仮想ファイルシステム上にディレクトリの作成を要求するパケットを受信した際に仮想ファイル操作手段２０３ｉから呼び出され、仮想ファイルシステム全体で一意のファイルハンドルを生成する。
【００４９】
仮想ファイル管理手段２０３内の実ファイル情報取得手段２０３ｇは、クライアント１が仮想ファイルをオープンする際または仮想ファイルのオフセットを移動する際あるいは実ファイルの終端を検出した際において、ファイル管理データベース２０２に対応する実ファイルのファイルハンドルが登録されていない場合もしくは実ファイル情報自体が登録されていない場合において、該当する子サーバー３に対しファイルハンドル取得手段２０５ａにより実ファイルのファイルハンドルを取得する。次に、実ファイル情報登録手段２０３ｈによってファイル管理データベース２０２へ登録し、クライアント１へ実ファイル情報に含めて送信する。
【００５０】
仮想ファイル管理手段２０３内の実ファイル情報登録手段２０３ｈは、実ファイル情報取得手段２０３ｇによって取得した実ファイルのファイルハンドルをデータベース検索更新手段２０４によりファイル管理データベース２０２へ実ファイル情報の一つとして登録する。
【００５１】
仮想ファイル管理手段２０３内の仮想ファイル操作手段２０３ｉは、クライアント１が一般的なネットワークファイルシステムの手続きに基づいて、仮想ファイルシステム上のディレクトリや仮想ファイルの作成／削除／名前の変更を行った際に、それらの要求を含んだパケットを通信手段２０１を介して受信する。この際、ディレクトリへの操作の場合は、ファイルハンドル作成手段２０３ｆを呼び出して仮想ファイルシステム上におけるディレクトリのファイルハンドルを作成する。次に、実ファイル操作手段２０５ｃを呼び出し、各子サーバー上の実ファイルまたはディレクトリに対する操作を行い、データベース検索更新手段２０４によりファイル管理データベース２０２の仮想ファイル及び実ファイルまたはディレクトリの追加，更新，削除を行う。
【００５２】
データベース検索更新手段２０４は、一般的なデータベースのソフトウェアが提供する機能を使用して実現する。
【００５３】
子サーバー管理手段２０５内のファイルハンドル取得手段２０５ａは、各子サーバー３内の実ファイルのファイルハンドルを取得するため、その子サーバー３に対して、対象の実ファイルの名前とその実ファイルが存在する実ファイルシステム上のディレクトリのファイルハンドルを含む一般的なネットワークファイルシステムが有するLOOKUPのプロトコルに基づいたパケットを作成し、該当する子サーバー３から実ファイルのファイルハンドルを取得する。
【００５４】
子サーバー管理手段２０５内のマウント手段２０５ｂは、一般的なネットワークファイルシステムのマウント処理により、各子サーバー３が管理する各実ファイルシステムを親サーバー２からマウントする。この処理は、システム全体の起動時や子サーバー３を追加する際に行う。
【００５５】
子サーバー管理手段２０５内の実ファイル操作手段２０５ｃは、クライアント１が仮想ファイルシステム上のディレクトリや仮想ファイルの作成／削除／名前の変更を行った際に、仮想ファイル操作手段２０３ｉより呼び出され、ディレクトリへの操作の場合は全子サーバー３に対して、また、ファイルへの操作の場合は対応する子サーバー３に対して、一般的なネットワークファイルシステムの手続きであるファイルやディレクトリに対する生成，削除，名前変更の処理を行う。
【００５６】
子サーバー管理手段２０５内の実ファイルシステム拡張手段２０５ｄは、子サーバー３が管理する実ファイルシステムに、動的にファイルシステムの容量を拡張する機能がある場合において、新たなディスク装置を追加するなど、子サーバー３上の実ファイルシステムの容量を拡張した際、それを親サーバー２のファイル管理データベース２０２へ反映するために、子サーバー３からその旨を伝えるパケットが送信される。この時、実ファイルシステム拡張手段２０５ｄは、データベース検索更新手段２０４により、ファイル管理データベース２０２の該当する実ファイルシステムのエントリを更新する。
【００５７】
子サーバー管理手段２０５内の子サーバー追加手段２０５ｅは、仮想ファイルシステムの容量を拡張するために、システム管理者の指示により新たな子サーバー３を追加する場合、指定された子サーバー３のＩＰアドレスとマウントするディレクトリ名からマウント手段２０５ｂを用いてその子サーバー３の実ファイルシステムをマウントし、一般的なネットワークファイルシステムの手続きにより、その実ファイルシステムの容量を取得する。次に、データベース検索更新手段２０４により、ファイル管理データベース２０２に新たな実ファイルシステムのエントリを設け、ディレクトリの情報のみをコピーする。さらに、そのディレクトリの情報に基づいて、実ファイル操作手段２０５ｃにより、ディレクトリの作成を行う。
【００５８】
〔子サーバー３〕
子サーバー３は、仮想ファイルシステムや仮想ファイルの存在を意識せずに、各実ファイルシステムと実ファイルを管理する。子サーバー３は一般にシステム内に複数存在する。また、子サーバー３は、複数のディスク装置４に跨って１つの実ファイルシステムを構築し、その中で複数の実ファイルを管理する。
【００５９】
通信手段３０１は、子サーバー３と親サーバー２または子サーバー３と任意のクライアント１との間の通信を実現するための機能を提供する。通信は、ＴＣＰ／ＩＰなどの一般的な通信プロトコルを用い、それぞれの通信相手とあらかじめコネクションの確立をしておく必要がある。また、通信手段３０１は、受信したパケットの種別を判断し、子サーバー３内の適切な処理手段に渡す機能も備えている。
【００６０】
実ファイル管理手段３０２内のアクセス許可手段３０２ａは、親サーバー２内のアクセス許可手段２０３ｄより送信されたアクセスを許可するクライアントのリストをアクセス許可リスト３０２ｂに登録する。また、クライアント１内のＩ／Ｏ要求作成手段１０２ａによってＩ／Ｏ要求を送信してきたクライアントがアクセス許可リスト３０２ｂに登録されているかどうかを調べる。
もし、登録されていない場合は、そのクライアントに対してエラーを示すパケットを返信する。登録されている場合は、そのＩ／Ｏ要求に実ファイル処理手段３０２内のアクセス許可リスト３０２ｂは、アクセスを許可したクライアント１のＩＰアドレスのリストで、アクセス許可手段３０２ａにより、更新または参照される。
【００６１】
実ファイルシステム管理手段３０３は、一般的なネットワークファイルシステムのサーバー機能と子サーバー３が管理するファイルシステムのファイル管理機能であり、子サーバー３のオペレーティングシステム内に存在する既存の機能である。
なお、全子サーバーが同じ種類のファイルシステムを使用する必要はなく、一般的なＵＮＩＸオペレーティングシステムのインターフェースをサポートしているファイルシステムであれば、子サーバー３毎に異なる種類のファイルシステムであってもよい。
【００６２】
ブロックＩ／Ｏ手段３０４は、実際にＩ／Ｏをディスク装置４に対して発行するのは、クライアント１であるので、クライアント１のＩ／Ｏ発行手段１０２ｃに対して、どのディスク装置４のどの場所からどれだけの長さをリード、またはライトするかという情報（ブロックＩ／Ｏ情報）を渡す必要がある。このため、実ファイルシステム管理手段３０３よりこれらの情報を受け取り、そして、これらの情報を含んだパケットＩ／Ｏ要求を送信してきたクライアント１へ返信する。また、クライアント１がディスク装置４へのＩ／Ｏを終了した旨のパケットを受信した際は、実ファイルシステム管理手段３０３へその旨を通知する。
【００６３】
〔ディスク装置４〕
ディスク装置４は、ランダムアクセスが出来る一般的な記憶媒体であり、また図１に示すようにファイバチャネルなどのＩ／Ｏプロトコルに対応したスイッチ５に接続され、子サーバー３及びクライアント１よりアクセス可能である。
【００６４】
〔動作の説明〕
次に、図２および図４〜図６のブロック図と図７〜図１０のフローチャートやシーケンス図を参照して本実施形態の動作について詳細に説明する。
各部の動作には以下のように複数のフェーズがあるので、この単位毎に説明する。
・システム設定時（子サーバーの設定）
・システム設定時（アクセス許可）
・クライアントからの親サーバーのマウント時
・クライアントからの仮想ファイルのオープン時
・Ｉ／Ｏ処理時（read,write処理）
・オフセット移動時
【００６５】
〔システム設定時（子サーバーの設定）〕
図５より、システム管理者は、子サーバー追加手段２０５ｅにより、すべての子サーバー３のＩＰアドレスとマウントするディレクトリ名から、マウント手段２０５ｂを用いて各子サーバー３の実ファイルシステムをマウントし、一般的なネットワークファイルシステムの手続きにより、各実ファイルシステムのファイルシステムの容量を取得する。
次に、データベース検索更新手段２０４により、ファイル管理データベース２０２に新たな実ファイルシステムのエントリを実ファイルシステム数だけ設ける。
【００６６】
〔システム設定時（アクセス許可）〕
図５，図６より、システム管理者は、アクセス許可手段２０３ｄによりアクセス許可リスト２０３ｅへ、親サーバー２が管理する仮想ファイルシステムへのアクセスを許可する各クライアント１のＩＰアドレスを設定する。
【００６７】
次に、アクセス許可手段２０３ｄは、管理する全子サーバー３の実ファイルシステム管理手段３０３に対して、アクセス許可リスト２０３ｅ内にあるクライアントのＩＰアドレスを元にアクセス許可の設定をさせるパケットを送信する。
【００６８】
〔クライアントからの親サーバーのマウント時〕
図４，図５より、クライアント１は、一般的なネットワークファイルシステムのクライアントの機能であるネットワークファイルシステム処理手段１０６により、通信手段１０１を介して、仮想ファイルシステムを管理する親サーバー２を一般的なネットワークファイルシステムと同様にマウント処理を行う。この時、親サーバー２は、通信手段２０１を介して、上記一般的なネットワークファイルシステムのマウントプロトコルに従ったパケットを受信すると、ファイルハンドル作成手段２０３ｆにより、まずアクセス許可リスト２０３ｅを参照し、マウントを要求したクライアント１が同リストに登録されているか否かを確認する。もし、登録されていない場合は、アクセス許可を持たないクライアント１からの不正なマウント要求なので、ステータスとしてエラーを設定し、通信手段２０１を介して同クライアント１へ返送する。一方、マウントを要求したクライアント１が同リストに登録されていた場合は、仮想ファイルシステムの先頭のディレクトリのファイルハンドルがファイル管理データベース２０２にあるかどうかをデータベース検索更新手段２０４を介して調べる。そして、まだ存在しない場合は、このファイルハンドルを作成してデータベース検索更新手段２０４により、ファイル管理データベース２０２へ登録し、通信手段２０１により、マウントを要求したクライアント１へ返送する。
【００６９】
次に、上記ファイルハンドルを通信手段１０１により受信したクライアント１は、ネットワークファイルシステム処理手段１０６により、親サーバー２から受信したファイルハンドルを保持する。
【００７０】
〔クライアントからの仮想ファイルのオープン時〕
図７のフローチャートおよび図８のシーケンス図と図４〜図６のブロック図より、仮想ファイルのオープンの処理においては、最初に親サーバー２からディレクトリのファイルハンドルを得て、次に実ファイル情報を得る。この際、実ファイル情報を取得する仕方として条件によって以下がある。
【００７１】
条件１：
クライアント１のファイル管理表１０５内に該当する実ファイル情報が既に登録されている場合。
これは処理の手間が一番少ない場合で、クライアント１内で処理が完結する。
【００７２】
条件２：
実ファイル情報は、クライアント１のファイル管理表１０５には登録されていないが、親サーバー２のファイル管理データベース２０２に該当する実ファイル情報が登録されている場合。
この場合は子サーバー３への問い合わせをしなくても良いので、クライアント１と親サーバー２との通信だけでよい。
【００７３】
条件３：
実ファイル情報は、クライアント１のファイル管理表１０５にも、親サーバー２のファイル管理データベース２０２にも登録されておらず、該当する子サーバー３へ問い合わせを行わなければならない場合。
これは最も処理の手間が多い場合であり、クライアント１と親サーバー２、親サーバー２と子サーバー３との通信が必要となる。（図２内の「open時の制御パケットの転送経路」として示された点線は、この場合の通信経路である。）
【００７４】
なお、実ファイル情報は、以下から成る。
・実ファイルが存在する子サーバーのＩＰアドレス
・実ファイルのファイルハンドル
・実ファイルの最大長
・終端フラグ（仮想ファイルの最後の実ファイルであることを示すフラグ）
・仮想ファイルに対するこの実ファイルのオフセット
・仮想ファイルが存在するディレクトリのファイルハンドル
【００７５】
まず、クライアント１上のユーザプロセスから呼び出されるopenシステムコールの内部の処理において、実ファイル情報取得手段１０３ａにより、オープンする対象のファイルのｉノード番号を使用し、ファイル管理表１０５の該当するｉノード番号のエントリがあるかどうかを調べる(図７のステップＳ２、ステップＳ３)。ある場合（条件１）は、その後のＩ／Ｏ処理においてこのエントリから実ファイル情報を取り出すことができるので、オープン処理を終了する。（ファイル管理表１０５は、ｉノード番号毎にエントリを持つ）。
ファイル管理表１０５に該当するエントリがない場合は、実ファイル情報取得手段１０３ａは、一般的なネットワークファイルシステムのクライアントの機能と同様なLOOKUPを対象ファイルに到達するまで、ディレクトリツリーを辿りながら行い、LOOKUPの度に親サーバーから返されるディレクトリのファイルハンドルを上記マウント時と同様に、ネットワークファイルシステムのクライアントの機能が保持する。
【００７６】
この際、親サーバー２では、LOOKUPのパケットを通信手段２０１を介して受信する毎にファイルハンドル作成手段２０３ｆは、データベース検索更新手段２０５を介してファイル管理データベース２０２内を検索し、そのディレクトリ名に対応したファイルハンドルがなければ作成した後、データベース検索更新手段２０５を介してファイル管理データベース２０２にそのファイルハンドルを登録する。その後、通信手段２０１により、クライアント１へファイルハンドルを送信する（図７のステップＳ１）。
【００７７】
次に、クライアント１における上記LOOKUP処理の結果オープンする対象のファイルに到達した場合、実ファイル情報取得手段１０３ａにより、オープン対象のファイルのファイル名、オープン対象のファイルが属するディレクトリのファイルハンドル、及びopenシステムコールに引数として渡された属性を通信手段１０１を介して親サーバー２に送信し、実ファイル情報の問い合わせを行う（図７のステップＳ４）。
【００７８】
ここで、属性とは、オープンするファイルを新たに生成するのか、オープンするファイルに対して後刻readするのか、writeするのか、またはその両方か、及びwriteの場合はAPPENDであるか否かの情報であって、ユーザプロセスが指定するものである。ここで、APPEND属性とは、既存のファイルをオープンし、その後そのファイルに対してwriteする場合、ファイルの終端にwriteするデータを付加することを意味する。APPEND属性がない場合の既存のファイルへのwriteは、ファイル先頭から上書きすることを意味する。
【００７９】
クライアント１の実ファイル情報取得手段１０３ａから、実ファイル情報取得要求のパケットを通信手段２０１を介して受信した親サーバー２は、実ファイル情報取得手段２０３ｇにより、データベース検索更新手段２０４を介してファイル管理データベース２０２をオープン対象のファイルが属するディレクトリのファイルハンドルと、オープン対象のファイルのファイル名を元に検索する（図７のステップＳ５〜ステップＳ６）。
【００８０】
なお、属性が、write且つAPPENDである場合は、仮想ファイルの最後を含む実ファイル情報を検索する。
【００８１】
この検索の結果として、以下の場合がある。
（１）該当するエントリが見つからず、属性がファイルの生成である。
（２）該当するエントリが見つかったが、実ファイル情報が登録されていない。
（３）該当するエントリがあり、実ファイル情報が登録されている。
【００８２】
まず、（１）の場合、実ファイル情報取得手段２０３ｇは、子サーバー割り当て手段２０３ｃにより、子サーバー３を１つ割り当て、実ファイル操作手段２０５ｃにより、割り当てた子サーバー３上の該当ディレクトリに実ファイルを生成する（図７のステップＳ７）。この際、子サーバー３から生成した実ファイルのファイルハンドルが返されるので（図７のステップＳ８）、実ファイル情報登録手段２０３ｈにより、データベース検索更新手段２０４を介してファイル管理データベース２０２に該当エントリを作成し、ファイルハンドルを含む実ファイル情報を登録する（図７のステップＳ９）。
【００８３】
次に、クライアント１へ検索した実ファイル情報を送信する（図７のステップＳ１０）。クライアント１は、実ファイル情報取得手段１０３ａが実ファイル情報登録手段１０３ｂにより、ファイル管理表１０５の対応するiノード番号のエントリに（エントリがなければ作成する）、受信した実ファイル情報を登録する（図７のステップＳ１１）。
【００８４】
また、検索の結果が（２）の場合、実ファイル情報取得手段２０３ｇは、該当する子サーバー３に対しファイルハンドル取得手段２０５ａにより、実ファイルのファイルハンドルを取得する（図７のステップＳ７〜ステップＳ８）。そして、実ファイル情報登録手段２０３ｈにより、データベース検索更新手段２０４を介してファイル管理データベース２０２に該当エントリを作成し、ファイルハンドルを含む実ファイル情報を登録する（図７のステップＳ９）。
【００８５】
次に、クライアント１へ検索した実ファイル情報を送信する（図７のステップＳ１０）。クライアント１は、実ファイル情報取得手段１０３ａが実ファイル情報登録手段１０３ｂにより、ファイル管理表１０５の対応するiノード番号のエントリに（エントリがなければ作成する）、受信した実ファイル情報を登録する（図７のステップＳ１１）。
【００８６】
一方、検索の結果が（３）の場合、実ファイル情報取得手段２０３ｇは、クライアント１へ検索した実ファイル情報を送信する（図７のステップＳ１０）。クライアント１は、実ファイル情報取得手段１０３ａが実ファイル情報登録手段１０３ｂにより、ファイル管理表１０５の対応するiノード番号のエントリに（エントリがなければ作成する）、受信した実ファイル情報を登録する（図７のステップＳ１１）。
【００８７】
図８は条件３の場合、つまり、クライアント１から親サーバー２へ、そして、親サーバー２から子サーバー３へ至って、実ファイルのファイルハンドルを取得し、結果として親サーバー２のファイル管理データベース２０２に実ファイル情報を登録し、さらにクライアント１へその実ファイル情報が返信されて、ファイル管理表１０５へ登録するまでのシーケンスを表している。
【００８８】
〔Ｉ／Ｏ処理時（read,write処理）〕
クライアント１上のユーザプロセスから呼び出されるreadまたはwriteシステムコールの内部の処理において、図９のフローチャート及び図４〜図６のブロック図より、Ｉ／Ｏ要求作成手段１０２ａは、ファイル管理表１０５をＩ／Ｏ対象の仮想ファイルのiノード番号に対応するエントリを参照し、さらに仮想ファイルの現在のファイルオフセットの値を元に、同エントリ内の実ファイル情報を順に調べ（図９のステップＳ１）、ファイルオフセットに対応した実ファイル情報が存在すれば（図９のステップＳ２）、それを取り出す。存在しない場合は、実ファイル情報取得手段１０３ａにより、親サーバー２へ対応する実ファイルの実ファイル情報を問い合わせるパケットを送信し、応答があるまで待ち合わせる（図９のステップＳ３）。
【００８９】
次に、仮想ファイル上のファイルオフセットをその実ファイルの先頭を基準としたオフセット（実ファイルのファイルオフセット）に変換し、実ファイルのファイルオフセットとＩ／Ｏサイズと実ファイルの最大長の関係から、Ｉ／Ｏサイズとファイルオフセットの合計値が実ファイルの最大長を超えない値に補正する。要求されたＩ／Ｏサイズと補正後のＩ／Ｏサイズの差分は、図９のステップＳ１０〜ステップＳ１１を経て再度ステップＳ１に戻った際に処理する（図９のステップＳ４）。
【００９０】
そして、実ファイルのファイルオフセット，ファイルハンドル，Ｉ／Ｏサイズ，認証情報から、Ｉ／Ｏ要求パケットを作成し、該当する子サーバー３へ送信し、受信待ち手段１０２ｂにより、子サーバー３からのレスポンスを待ち合わせる（図９のステップＳ５）。
【００９１】
子サーバー３から、パケットを受信した場合（図９のステップＳ６）、受信するパケットの種別として、ブロックＩ／Ｏ情報とＩ／Ｏ終了通知の２種がある。
【００９２】
このパケットの種別をパケット内のフラグから判断し（図９のステップＳ７）、ブロックＩ／Ｏ情報である場合、Ｉ／Ｏ発行手段１０２ｃにより、パケット内に納められたブロックＩ／Ｏ情報に基づいて、該当するディスク装置４の該当する箇所に対してブロックＩ／Ｏを発行する。発行後は、再度ステップＳ６に戻りパケットの受信待ちをする。また、発行したブロックＩ／Ｏの終了通知は、Ｉ／Ｏの終了割り込みの処理内において、Ｉ／Ｏ発行手段１０２ｃにより、パケットを受信した子サーバー３から指示されたブロックＩ／Ｏが終了した旨を伝えるパケットをその子サーバー３へ返信する（図９のステップＳ８）。
【００９３】
子サーバー３から、受信したパケットがＩ／Ｏ終了通知である場合、子サーバー３から返された実際にＩ／Ｏを行ったサイズだけ仮想ファイルのファイルオフセットを進め（図９のステップＳ９）、Ｉ／Ｏの終了ステータスをチェックし（エラーのチェック）、エラーがない場合で要求したＩ／ＯサイズのＩ／Ｏが完了した場合は、Ｉ／Ｏ処理を終了する（図９のステップＳ１０）。
【００９４】
エラーがない場合で要求したＩ／ＯサイズのＩ／Ｏがまだ終了していない場合においてＩ／Ｏ要求がwriteの場合は、実ファイルの最大長までＩ／Ｏした場合であるので、ステップＳ１へ戻り（図９のステップＳ１１）、次の実ファイル情報を取り出す。
【００９５】
readの場合で、実ファイルのファイルオフセットが実ファイルの終端に達した場合、または、実ファイルのファイルオフセットが実ファイルの最大長に達しており且つ終端フラグがセットされている場合は、既に仮想ファイルの最後までreadした場合であるので、Ｉ／Ｏ処理を終了する（図９のステップＳ１０）。
【００９６】
readの場合で、上記以外の場合は次にreadすべき実ファイルが存在するので、ステップＳ１に戻り、次の実ファイル情報を取り出す（図９のステップＳ１１）。
【００９７】
そして、エラーがある場合はエラー番号を設定し、Ｉ／Ｏ処理を終了する（図９のステップＳ１０）。
【００９８】
次に、クライアント１から、Ｉ／Ｏ要求を受信した子サーバー３の処理において、図１０のフローチャート及び図４〜図６のブロック図より、Ｉ／Ｏ要求のパケットを受信した子サーバー３では（図１０のステップＳ１）、アクセス許可手段３０２ａにより、アクセス許可のあるクライアントであるか否かを確認する（図１０のステップＳ２）。
【００９９】
次に、実ファイルシステム管理手段３０３により、認証情報のチェックのあと、対象の実ファイル上のＩ／Ｏすべき箇所が、どのディスク装置４のどのアドレスからの何ブロックをreadまたはwriteするかという情報（ブロックＩ／Ｏ情報）に変換し、ブロックＩ／Ｏ手段３０４によって、上記ブロックＩ／Ｏ情報をＩ／Ｏ要求を送信したクライアント１へ返信する（図１０のステップＳ３）。
【０１００】
次に、クライアント１からブロックＩ／Ｏの終了通知を示すパケットを受信するまで待ち合わせる（図１０のステップＳ４）。
【０１０１】
クライアント１からブロックＩ／Ｏの終了通知を示すパケットを受信したら、そのブロックＩ／Ｏが正常に終了したか、エラーになったかを確認する。
【０１０２】
エラーになった場合は、クライアント１へ返すＩ／Ｏ終了通知のステータスとしてエラーを設定し、そのパケットを同クライアント１へ返送する。
また、正常終了した場合は、クライアント１へ返すＩ／Ｏ終了通知のステータスとして正常終了を設定し、そのパケットを同クライアント１へ返送する（図１０のステップＳ５）。
【０１０３】
〔オフセット移動時〕
クライアント１上のユーザプロセスから呼び出されるseekシステムコールの内部の処理において、図４〜図６のブロック図より、オフセット変更手段１０４を用いて、仮想ファイルシステム上のファイルオフセットの新しい位置をseekシステムコールの渡された引数の値より計算し、ファイル管理表１０５を、対象の仮想ファイルのiノード番号と計算した新しいファイルオフセットの値を用いて検索し、対応する実ファイル情報があるかどうかを調べる。
実ファイル情報が存在する場合は何もしない。存在しない場合は、実ファイル情報取得手段１０３ａにより、親サーバー２へ対応する実ファイルの実ファイル情報を問い合わせ、親サーバー２から返された実ファイル情報をファイル管理表１０５の該当するエントリに実ファイル情報登録手段１０３ｂにより登録する。
【０１０４】
以上に述べた通り、この実施形態では、read,writeに関わるＩ／Ｏデータはサーバー（親サーバー２と子サーバー３）を介さないように構成されているため、サーバー上のメモリ、ＣＰＵ等のシステム資源を無駄に使用しないようにできる。
【０１０５】
また、read,writeシステムコール呼び出し時に、システム内に１つしかない親サーバー２に殆どの場合は通信の必要が生じないため、親サーバー２に負荷をかけない。このため、親サーバー２の処理がボトルネックになってファイルシステム全体の処理が遅延するようなことがなく、Ｉ／Ｏ高負荷でも滞りなくＩ／Ｏ処理ができる。その理由は、クライアント１と親サーバー２との通信及び親サーバー２と子サーバー３との通信は、実ファイルの終端を検出しない限り、クライアント１がファイルのオープン（openシステムコール呼び出し時の処理）またはファイルオフセットの移動（seekシステムコール呼出時の処理）を呼び出した際に行われ、read,writeシステムコール呼び出し時においては、クライアント１は子サーバー３との間での通信だけでよく、openまたはseekシステムコールの呼び出し頻度は、read,writeシステムコールの呼び出し頻度より一般に少ないと考えられるためである。
【０１０６】
しかも、ファイル生成時において、親サーバー２が、最初に実ファイルを生成する子サーバー３を決定するアルゴリズムとして、子サーバー３の番号を最若番から順に増やすという方法を取っているため（段落００４５参照）、ファイル生成を要求したクライアント１には依存せず、登録されている全ての子サーバー３に偏りなく実ファイルの配置ができるので、多数のＩ／Ｏ要求が発行された場合でも、各要求はそれぞれの子サーバー３に分散されることになり、子サーバー３の負荷が軽減される。
【０１０７】
また、複数の子サーバー３に跨った大容量ファイルを作成でき、そのファイルへのＩ／Ｏがシーケンシャルなアクセスの場合は特に効率よくＩ／Ｏ処理を行うことができる。その理由は、新規にファイルを生成する場合、子サーバー３上の実ファイルのサイズが一定値を超えると、次の子サーバー３上にそのファイルの続きを作成するので（段落００４３，００８９参照）、親サーバー２との通信は次の子サーバー３に移る場合だけで済むためである。また、ファイルの読み込みや、既に存在するファイルに対する上書きを行う場合で、実ファイルの終端を検出した場合、クライアント１は親サーバー２へその旨を通知し、親サーバー２はクライアント１へ次の子サーバーのアドレスとファイルハンドル（実ファイル情報）を送信することで、クライアント１がＩ／Ｏの対象としている仮想ファイル上の次の実ファイルが存在する子サーバー３へＩ／Ｏ要求を発行することができるためである。
【０１０８】
また、同一の仮想ファイルであっても実ファイルが異なれば、複数のクライアント１から同一の仮想ファイル上の異なる実ファイルに対して同時にwriteを行うことが可能である。
【０１０９】
しかも、システムの運用中に親サーバー２に対して新たな子サーバー３とそれが管理するディスク装置４を追加することができるので、システムの運用中にファイルシステムを拡張することができる。
【産業上の利用可能性】
【０１１０】
ＨＰＣ（High Performance Computing）のような大規模なデータを高速に処理しなければならない分野においては、データの取り扱いを容易にするため、複数のファイルシステムに分散させてファイルを格納するのではなく、大容量の１つのファイルシステムにファイルを格納する方が一般に扱いやすいとされている。従って、本発明はＨＰＣのような分野に適用できる。
また、ＭＰＩ（Message Passing Interface）のジョブが複数のクライアント上で動作する場合、大容量ファイルの異なる箇所に対して、同時にＩ／Ｏ処理を行うことがある。本発明によれば、実ファイルが異なる場合、大容量ファイルの異なる箇所に対して同時に書き込み等のＩ／Ｏ処理ができるため、効率的に大容量ファイルの生成等が行える。従って、本発明はＭＰＩのような分野にも好適である。
【図面の簡単な説明】
【０１１１】
【図１】クライアントコンピュータと子サーバーコンピュータと親サーバーコンピュータとの接続およびディスク装置とクライアントコンピュータと子サーバーコンピュータとの接続について示した概念図である。
【図２】仮想ファイルシステムと実ファイルシステムの関係を簡略化して示した概念図である。
【図３】仮想ファイルと実ファイルの関係を簡略化して示した概念図である。
【図４】クライアントコンピュータの構成の概略を示した機能ブロック図である。
【図５】親サーバーコンピュータの構成の概略を示した機能ブロック図である。
【図６】子サーバーコンピュータの構成の概略を示した機能ブロック図である
【図７】クライアントから仮想ファイルをオープンする際の処理の概略について示したフローチャートである。
【図８】実ファイル情報がクライアントにも親サーバーにも登録されておらず子サーバーへの問い合わせが必要となった場合のファイルハンドルの取得に関わる処理の流れを簡略化して示したシーケンス図である。
【図９】Ｉ／Ｏ処理におけるクライアントの動作の概略を示したフローチャートである。
【図１０】Ｉ／Ｏ処理における子サーバーの動作の概略を示したフローチャートである。
【符号の説明】
【０１１２】
１  クライアントコンピュータ
２  親サーバコンピュータ
３  子サーバコンピュータ
４  ディスク装置
５  チャネルスイッチ
１０１  通信手段
１０２  Ｉ／Ｏ要求手段
１０２ａ  Ｉ／Ｏ要求作成手段
１０２ｂ  受信待ち手段
１０２ｃ  Ｉ／Ｏ発行手段
１０２ｄ  Ｉ／Ｏ終了判別手段
１０３  実ファイル情報操作手段
１０３ａ  実ファイル情報取得手段
１０３ｂ  実ファイル情報登録手段
１０４  オフセット変更手段
１０５  ファイル管理表
１０６  ネットワークファイルシステム処理手段
２０１  通信手段
２０２  ファイル管理データベース
２０３  仮想ファイル管理手段
２０３ａ  実ファィル終端処理手段
２０３ｂ  オフセット変更手段
２０３ｃ  子サーバ割り当て手段
２０３ｄ  アクセス許可手段
２０３ｅ  アクセス許可リスト
２０３ｆ  ファイルハンドル作成手段
２０３ｇ  実ファィル情報取得手段
２０３ｈ  実ファイル情報登録手段
２０３ｉ  仮想ファイル操作手段
２０４  データベース検索更新手段
２０５  子サーバ管理手段
２０５ａ  ファイルハンドル取得手段
２０５ｂ  マウント手段
２０５ｃ  実ファイル操作手段
２０５ｄ  実ファイルシステム拡張手段
２０５ｅ  子サーバ追加手段
２０５ｆ  実ファイル情報収集手段
３０１  通信手段
３０２  実ファイル管理手段
３０２ａ  アクセス許可手段
３０２ｂ  アクセス許可リスト
３０２ｃ  Ｉ／Ｏ結果返信手段
３０３  実ファイルシステム管理手段
３０４  ブロックＩＯ手段
【図１】
2007293634.tif 000003
【図２】
2007293634.tif 000004
【図３】
2007293634.tif 000005
【図４】
2007293634.tif 000006
【図５】
2007293634.tif 000007
【図６】
2007293634.tif 000008
【図７】
2007293634.tif 000009
【図８】
2007293634.tif 000010
【図９】
2007293634.tif 000011
【図１０】
2007293634.tif 000012