(57)【特許請求の範囲】
【請求項１】
Ｉ／Ｏ特性を認識しないファイルサーバアプリケーション部と、前記ファイルサーバアプリケーション部からＩ／Ｏを受信する、Ｉ／Ｏ特性を認識しないファイルシステムとを備えたファイルサーバにおいて、
Ｉ／Ｏ代行デーモン部、前記ファイルサーバアプリケーション部からＩ／Ｏを受信する、Ｉ／Ｏ特性を認識するファイルシステム、及び、前記ファイルサーバアプリケーション部及び前記ファイルシステムが管理するファイルの構成情報を有するメモリを備え、
前記Ｉ／Ｏ代行デーモン部は、
前記ファイルサーバアプリケーション部からＩ／Ｏを受信し、
前記受信したＩ／Ｏに、前記構成情報を参照して、前記受信したＩ／Ｏの制御情報を付加し、
該制御情報を付加したＩ／Ｏを、前記Ｉ／Ｏ特性を認識するファイルシステムへ送信することを特徴とするファイルサーバ。
【請求項２】
請求項1に記載のファイルサーバにおいて、
前記ファイルサーバアプリケーション部は、Ｉ／Ｏフックモジュール部を備えており、
前記Ｉ／Ｏフックモジュール部は、前記ファイルサーバアプリケーション部のファイルＩ／Ｏ発行要求をフックし、フックしたファイルＩ／Ｏ発行要求からアクセス対象となるファイルの情報を取得して前記Ｉ／Ｏ代行デーモン部に渡すことを特徴とするファイルサーバ。
【請求項３】
請求項２に記載のファイルサーバにおいて、
前記Ｉ／Ｏ代行デーモン部は、Ｉ／Ｏパターン解析部を備えており、
前記Ｉ／Ｏパターン解析部を用いて前記ファイルＩ／Ｏ発行要求のＩ／Ｏパターンを解析して取得した動的な制御情報を、前記ファイルＩ／Ｏ発行要求に付加することを特徴とするファイルサーバ。
【請求項４】
Ｉ／Ｏ特性を認識しないファイルサーバアプリケーション部と、Ｉ／Ｏ代行デーモン部と、前記ファイルサーバアプリケーション部からＩ／Ｏを受信する、Ｉ／Ｏ特性を認識しないファイルシステムと、前記ファイルサーバアプリケーションからＩ／Ｏを受信する、Ｉ／Ｏ特性を認識するファイルシステムと、前記ファイルサーバアプリケーション及び前記ファイルシステムが管理するファイルの構成情報を有するメモリと、を備えるファイルサーバにおけるデータ入出力方法であって、
前記ファイルサーバアプリケーション部から送信されるＩ／Ｏに、前記構成情報を参照して、該Ｉ／Ｏの制御情報を付加するステップ及び
前記制御情報を付加したＩ／Ｏを、前記Ｉ／Ｏ特性を認識するファイルシステムに送信するステップを含むことを特徴とするデータ入出力方法。
【請求項５】
請求項４に記載のデータ入出力方法において、
更に、前記ファイルサーバアプリケーション部のファイルＩ／Ｏ発行要求をフックするステップと、
フックしたファイルＩ／Ｏ発行要求からアクセス対象となるファイルの情報を取得して前記Ｉ／Ｏ代行デーモン部に渡すステップとを含むことを特徴とするデータ入出力方法。
【請求項６】
請求項５に記載のデータ入出力方法において、
更に、前記ファイルＩ／Ｏ発行要求のＩ／Ｏパターンを解析するステップと、解析して取得した動的な制御情報を、前記ファイルＩ／Ｏ発行要求に付加するステップとを含むことを特徴とするデータ入出力方法。
【請求項７】
ファイルサーバアプリケーションソフトウェアのファイルＩ／Ｏ発行要求をフックし、フックしたファイルＩ／Ｏ発行要求からアクセス対象となるファイルの情報を取得して、Ｉ／Ｏ代行デーモンプログラムに渡すＩ／Ｏフックモジュールプログラムであって、
前記Ｉ／Ｏ代行デーモンプログラムは、Ｉ／ＯフックモジュールプログラムからファイルサーバのＩ／Ｏ要求を受け取り、前記ファイルサーバに代行してリアルタイムＩ／Ｏファイルシステムに前記Ｉ／Ｏ要求を発行するものであり、
前記Ｉ／Ｏフックモジュールプログラムは、前記ファイルサーバアプリケーションソフトウェアのファイルＩ／Ｏ発行要求をフックする手順と、フックした前記ファイルＩ／Ｏ発行要求からアクセス対象となるファイルのパス名およびファイル内のアクセス対象領域を示す情報を取得する手順と、
取得したアクセス対象領域を示す情報を前記Ｉ／Ｏ代行デーモンプログラムに渡す手順と、
を計算機に実行させることを特徴とするＩ／Ｏフックモジュールプログラム。
【請求項８】
Ｉ／ＯフックモジュールプログラムからファイルサーバのＩ／Ｏ要求を受け取り、前記ファイルサーバに代行してリアルタイムＩ／Ｏファイルシステムに前記Ｉ／Ｏ要求を発行するＩ／Ｏ代行デーモンプログラムであって、
前記Ｉ／Ｏフックモジュールプログラムから受け取った個々のファイルＩ／Ｏ発行要求に、前記ファイルサーバアプリケーションソフトウェアおよびアクセス対象ファイルに応じたファイルＩ／Ｏの制御情報を付加する手順と、
前記制御情報を付加したファイルＩ／Ｏ発行要求を前記リアルタイムＩ／Ｏファイルシステムに対して発行する手順と、
前記ファイルＩ／Ｏ発行要求の実行結果を前記Ｉ／Ｏフックモジュールプログラムを介して前記ファイルサーバのアプリケーションソフトウェアに渡す手順と、
を計算機に実行させるものであるＩ／Ｏ代行デーモンプログラム。
【請求項９】
Ｉ／Ｏフックモジュールプログラムから受け取った個々のファイルＩ／Ｏ発行要求に、ファイルサーバアプリケーションソフトウェアおよびアクセス対象ファイルに応じた制御情報を付加する手順と、
前記制御情報を付加したファイルＩ／Ｏ発行要求をファイルシステムに対して発行する手順と、
前記ファイルＩ／Ｏ発行要求の実行結果をＩ／Ｏフックモジュールプログラムを介して前記ファイルサーバアプリケーションソフトウェアに渡す手順と、
前記ファイルサーバアプリケーションソフトウェアから受け取った個々のファイルＩ／Ｏ発行要求がデッドラインミスを起こした場合の再試行する回数であるリトライポリシーに基づいてファイルＩ／Ｏ発行要求の手順を、
計算機に実行させることを特徴とするＩ／Ｏ代行デーモンプログラム。
【請求項１０】
Ｉ／Ｏフックモジュールプログラムから受け取った個々のファイルＩ／Ｏ発行要求に、ファイルサーバアプリケーションソフトウェアおよびアクセス対象ファイルに応じた制御情報を付加する手順と、
前記制御情報を付加したファイルＩ／Ｏ発行要求をファイルシステムに対して発行する手順と、
前記ファイルＩ／Ｏ発行要求の実行結果をＩ／Ｏフックモジュールプログラムを介して前記ファイルサーバアプリケーションソフトウェアに渡す手順と、
前記ファイルサーバアプリケーションソフトウェアのＩ／ＯフックモジュールプログラムからファイルＩ／Ｏ発行要求に関する情報を受け取る手順と、
前記ファイルサーバアプリケーションソフトウェアからファイルＩ／Ｏ発行要求に構成情報に基づく制御情報を付加し、リアルタイムＩ／Ｏファイルシステムに対して非同期で発行する手順と、
非同期で発行される読み込みおよび書き込みのファイルＩ／Ｏ発行要求を管理する手順と、管理される履歴情報を参照し、Ｉ／Ｏのパターンを解析する手順と、
解析したパターンに基づく動的な制御情報を前記Ｉ／Ｏ発行要求に付加して前記リアルタイムＩ／Ｏファイルシステムに発行する手順と、
を計算機に実行させることを特徴とするＩ／Ｏ代行デーモンプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークファイル共有サービスを提供するファイルサーバアプリケーションソフトウェアに関し、制御情報付加Ｉ／Ｏ代行機能を有するファイルサーバ、データ入出力方法、Ｉ／Ｏ代行デーモンプログラム及びフックモジュールプログラムに関する。
【背景技術】
【０００２】
ネットワークによって接続された計算機間で文書や画像等のデータファイルを共有する、ネットワークファイル共有技術が実用化されている。ネットワークファイル共有技術において、ＷＳ（Work Station）やＮＡＳ（Network Attached
Storage）等のサーバ装置は、ＰＣ（Personal Computer）や携帯端末等のクライアント端末に対して、ＬＡＮ（Local Area Network）やＷＡＮ（Wide Area Network）等のネットワークを介してサーバ装置上のファイルにアクセスするサービスである、ネットワークファイル共有サービスを提供する。ネットワークファイル共有サービスを提供するサーバ装置は、一般に、ファイルサーバとよばれる。
【０００３】
ネットワークファイル共有サービスで用いられる通信プロトコルには、主にＵＮＩＸ（登録商標）系のＯＳ（Operating System）で用いられるＮＦＳ（Network
File System）、および、主にWindows（登録商標）系のＯＳで用いられるＣＩＦＳ（Common Internet File System）等がある。
【０００４】
ＵＮＩＸ（登録商標）系のＯＳ上でＣＩＦＳを用いたネットワークファイル共有サービスを提供するファイルサーバアプリケーションソフトウェアとして、Ｓａｍｂａが普及している。Ｓａｍｂａは、サーバ装置のＯＳが提供するソケットインタフェースを介してクライアント端末と通信し、ファイルシステムインタフェースを介してサーバ装置上のファイルにアクセスする。
【０００５】
特許文献１には、ファイルシステムのオブジェクトに対して、ＩＯＣＴＬ（Input Output Control）システムコールを発行することにより、Ｗｉｎｄｏｗｓ（登録商標）系の属性更新権等のアクセス制御機能をＳａｍｂａで使用する技術が開示されている。
【０００６】
一方、ＩＯＣＴＬシステムコールを用いて個々のＩ／Ｏ（Input /Output）要求にデッドライン情報等の制御情報を付加することによりＩ／Ｏ制御の精度を高める、リアルタイムＩ／Ｏファイルシステムが開発されている。特許文献２には、ファイルシステムのメタデータにアクセス制御情報を格納し、追加の機能モジュールを読み込むことによりファイルシステムの機能を拡張する技術が開示されている。
【０００７】
また、特許文献３には、非リアルタイムＯＳに外付けのリアルタイムソフトウェアでリアルタイムＩ／Ｏを実現する技術が開示されている。
【０００８】
しかし、これらの技術の組み合わせでは特許文献１記載のＳａｍｂａのようなＩ／Ｏ特性を認識しない非リアルタイムソフトウェアを、特許文献２記載のようなＩ／Ｏ特性を認識するリアルタイムファイルシステム上で動作させることはできない。
【０００９】
なぜならば、特許文献３に記載の方法では、特許文献２記載のようなリアルタイムファイルシステムがＩ／Ｏ特性を認識するために必要な情報をＩ／Ｏに付加することができないからである。Ｉ／Ｏ特性とは、あらかじめ設定した構成情報を参照して得られる制御情報だけでなく、動的に実際に発行されたＩ／Ｏのパターンを解析することで得られる制御情報の両方が含まれる。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００９−２１１６６８号公報
【特許文献２】米国特許第７８５３８２２号明細書
【特許文献３】特表２００７−５２８０３２号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
前記従来の技術では、Ｓａｍｂａ等の既存のファイルサーバアプリケーションソフトウェアが、リアルタイムＩ／Ｏファイルシステム等の新たなファイルシステムの拡張機能に対応しその効果を得るためには、ファイルサーバアプリケーションソフトウェアを改変し、ファイルＩ／Ｏ要求発行時に、Ｉ／Ｏ要求に制御情報を付加するＩＯＣＴＬシステムコールを発行する等の機能を実装する必要があった。従って、ファイルサーバアプリケーションソフトウェア毎に、新たなファイルシステムに対応するための改変工数がかかるという課題があった。
【００１２】
本発明は、前記課題を解決する、個々のファイルサーバアプリケーションソフトウェアの改変工数を従来技術と比較して少なく抑えて新たなファイルシステムの拡張機能に対応する方式および装置を提供することを目的とする。
【課題を解決するための手段】
【００１３】
前記課題を解決するために、本発明では、従来のファイルサーバアプリケーション部のファイルＩ／Ｏ要求発行をフックするＩ／Ｏフックモジュール部と、ファイルシステムの拡張機能に対応するＩ／Ｏ代行デーモン部とを備える。
【００１４】
Ｉ／Ｏフックモジュール部は、ファイルサーバアプリケーション部のファイルＩ／Ｏ要求発行をフックし、フックしたファイルＩ／Ｏ要求からアクセス対象となるファイルのパス名、ファイル内のアクセス対象領域を示すオフセット、レングス等の情報を取得してＩ／Ｏ代行デーモン部に渡す。
【００１５】
Ｉ／Ｏ代行デーモン部は、Ｉ／Ｏフックモジュール部から受け取った個々のファイルＩ／Ｏ要求に、構成情報に基づいてファイルサーバアプリケーション部およびアクセス対象ファイルに応じた制御情報を付加する。Ｉ／Ｏ代行デーモン部は、制御情報を付加したＩ／Ｏ要求をファイルシステムに対して発行し、Ｉ／Ｏの実行結果をＩ／Ｏフックモジュール部を介してファイルサーバアプリケーション部に渡す。
【００１６】
本発明のファイルサーバは、Ｉ／Ｏ特性を認識しないファイルサーバアプリケーション部と、前記ファイルサーバアプリケーション部からＩ／Ｏを受信する、Ｉ／Ｏ特性を認識しないファイルシステムとを備えたファイルサーバにおいて、Ｉ／Ｏ代行デーモン部、前記ファイルサーバアプリケーション部からＩ／Ｏを受信する、Ｉ／Ｏ特性を認識するファイルシステム、及び、前記ファイルサーバアプリケーション部及び前記ファイルシステムが管理するファイルの構成情報を有するメモリを備え、前記Ｉ／Ｏ代行デーモン部は、
前記ファイルサーバアプリケーション部からＩ／Ｏを受信し、前記受信したＩ／Ｏに、前記構成情報を参照して、前記受信したＩ／Ｏの制御情報を付加し、該制御情報を付加したＩ／Ｏを、前記Ｉ／Ｏ特性を認識するファイルシステムへ送信することを特徴とする。
【００１７】
また、本発明のファイルサーバは、前記ファイルサーバアプリケーション部は、Ｉ／Ｏフックモジュール部を備えており、前記Ｉ／Ｏフックモジュール部は、前記ファイルサーバアプリケーション部のファイルＩ／Ｏ発行要求をフックし、フックしたファイルＩ／Ｏ発行要求からアクセス対象となるファイルの情報を取得して前記Ｉ／Ｏ代行デーモン部に渡すことを特徴とする。
【００１８】
また、本発明のファイルサーバは、前記Ｉ／Ｏ代行デーモン部は、Ｉ／Ｏパターン解析部を備えており、前記Ｉ／Ｏパターン解析部を用いて前記ファイルＩ／Ｏ発行要求のＩ／Ｏパターンを解析して取得した動的な制御情報を、前記ファイルＩ／Ｏ発行要求に付加することを特徴とする。
【００１９】
本発明のデータ入出力方法は、Ｉ／Ｏ特性を認識しないファイルサーバアプリケーション部と、Ｉ／Ｏ代行デーモン部と、前記ファイルサーバアプリケーション部からＩ／Ｏを受信する、Ｉ／Ｏ特性を認識しないファイルシステムと、前記ファイルサーバアプリケーションからＩ／Ｏを受信する、Ｉ／Ｏ特性を認識するファイルシステムと、前記ファイルサーバアプリケーション及び前記ファイルシステムが管理するファイルの構成情報を有するメモリと、を備えるファイルサーバにおけるデータ入出力方法であって、前記ファイルサーバアプリケーション部から送信されるＩ／Ｏに、前記構成情報を参照して、該Ｉ／Ｏの制御情報を付加するステップ及び前記制御情報を付加したＩ／Ｏを、前記Ｉ／Ｏ特性を認識するファイルシステムに送信するステップを含むことを特徴とする。
【００２０】
また、本発明のデータ入出力方法は、更に、前記ファイルサーバアプリケーション部のファイルＩ／Ｏ発行要求をフックするステップと、フックしたファイルＩ／Ｏ発行要求からアクセス対象となるファイルの情報を取得して前記Ｉ／Ｏ代行デーモン部に渡すステップとを含むことを特徴とする。
【００２１】
また、本発明のデータ入出力方法は、更に、前記ファイルＩ／Ｏ発行要求のＩ／Ｏパターンを解析するステップと、解析して取得した動的な制御情報を、前記ファイルＩ／Ｏ発行要求に付加するステップとを含むことを特徴とする。
【００２２】
本発明のＩ／Ｏフックモジュールプログラムは、ファイルサーバアプリケーションソフトウェアのファイルＩ／Ｏ発行要求をフックする手順と、フックした前記ファイルＩ／Ｏ発行要求からアクセス対象となるファイルのパス名およびファイル内のアクセス対象領域を示す情報を取得する手順と、取得した情報をＩ／Ｏデーモンプログラムに渡す手順と、を計算機に実行させることを特徴とする。
【００２３】
本発明のＩ／Ｏ代行デーモンプログラムは、Ｉ／Ｏフックモジュールプログラムから受け取った個々のファイルＩ／Ｏ発行要求に、ファイルサーバアプリケーションソフトウェアおよびアクセス対象ファイルに応じた制御情報を付加する手順と、前記制御情報を付加したファイルＩ／Ｏ発行要求をファイルシステムに対して発行する手順と、前記ファイルＩ／Ｏ発行要求の実行結果をＩ／Ｏフックモジュールプログラムを介して前記ファイルサーバアプリケーションソフトウェアに渡す手順と、を計算機に実行させることを特徴とする。
【００２４】
また、本発明のＩ／Ｏ代行デーモンプログラムは、前記ファイルシステムと共有メモリ領域をＩ／Ｏバッファとして使用することにより、Ｉ／Ｏ特性を認識するファイルシステムに対して読み書きするデータの受け渡しを行う手順を、計算機に実行させることを特徴とする。
【００２５】
また、本発明のＩ／Ｏ代行デーモンプログラムは、前記ファイルサーバアプリケーションソフトウェアから受け取った個々のファイルＩ／Ｏ発行要求がデッドラインミスを起こした場合の再試行する回数であるリトライポリシー基づいてファイルＩ／Ｏ発行要求の手順を、計算機に実行させることを特徴とする。
【００２６】
また、本発明のＩ／Ｏ代行デーモンプログラムは、前記ファイルサーバアプリケーションソフトウェアのＩ／ＯフックモジュールプログラムからファイルＩ／Ｏ発行要求に関する情報を受け取る手順と、前記ファイルサーバアプリケーションソフトウェアからファイルＩ／Ｏ発行要求に構成情報に基づく制御情報を付加し、リアルタイムＩ／Ｏファイルシステムに対して非同期で発行する手順と、非同期で発行される読み込みおよび書き込みのファイルＩ／Ｏ発行要求を管理する手順と、管理される履歴情報を参照し、Ｉ／Ｏのパターンを解析する手順と、解析したパターンに基づく動的な制御情報を前記Ｉ／Ｏ発行要求に付加して前記リアルタイムＩ／Ｏファイルシステムに発行する手順と、を計算機に実行させることを特徴とする。
【発明の効果】
【００２７】
本発明によれば、個々のファイルサーバアプリケーション部には、ファイルＩ／Ｏ要求発行をフックするＩ／Ｏフックモジュール部に対応する改変を加えるのみで、実際のＩ／Ｏの発行をＩ／Ｏ代行デーモン部に代行させることができる。
【００２８】
Ｉ／Ｏ代行デーモン部は、Ｉ／Ｏフックモジュール部から受け取った個々のファイルＩ／Ｏ要求にデッドライン情報等の制御情報を付加してファイルシステムに発行することにより、リアルタイムＩ／Ｏファイルシステム等の新たなファイルシステムが提供する拡張機能の効果を得ることができる。
【００２９】
従って、本発明によれば、個々のファイルサーバアプリケーション部の改変工数を従来技術と比較して少なく抑えて新たなファイルシステムの拡張機能に対応する装置および方法を提供することができる。
【図面の簡単な説明】
【００３０】
【図１】図１は本発明の実施例１のネットワークファイル共有システムの構成例を示す。
【図２】図２は本発明の実施例１のファイルサーバのハードウェア構成例を示す。
【図３】図３は本発明の実施例１のＩ／Ｏフックモジュール部の機能モジュール構成を示す。
【図４】図４は本発明の実施例１のＩ／Ｏ代行デーモン部の機能モジュール構成を示す。
【図５】図５は本発明の実施例１の構成情報の詳細を示す。
【図６】図６は本発明の実施例１のＩ／Ｏフックモジュール部とＩ／Ｏ代行デーモン部との間のＩ／Ｏ代行通信プロトコルを示す。
【図７】図７は本発明の実施例１のＩ／Ｏフックモジュール部の処理を示すフローチャートである。
【図８】図８は本発明の実施例１のＩ／Ｏフック処理の詳細を示すフローチャートである。
【図９】図９は本発明の実施例１のＩ／Ｏ代行デーモン部の処理を示すフローチャートである。
【図１０】図１０は本発明の実施例１のＩ／Ｏ代行デーモン部のファイルサーバアプリケーション部との連携を開始する処理の詳細を示すフローチャートである。
【図１１】図１１は本発明の実施例１のＩ／Ｏ代行デーモン部のファイルサーバアプリケーション部との連携を終了する処理の詳細を示すフローチャートである。
【図１２】図１２は本発明の実施例１のＩ／Ｏフックモジュール部のファイルオープン処理の詳細を示すフローチャートである。
【図１３】図１３は本発明の実施例１のＩ／Ｏ代行デーモン部のファイルオープン代行実行処理の詳細を示すフローチャートである。
【図１４】図１４は本発明の実施例１のＩ／Ｏフックモジュール部のファイルクローズ処理の詳細を示すフローチャートである。
【図１５】図１５は本発明の実施例１のＩ／Ｏ代行デーモン部のファイルクローズ代行実行処理の詳細を示すフローチャートである。
【図１６】図１６は本発明の実施例１のＩ／Ｏフックモジュール部のファイルリード処理の詳細を示すフローチャートである。
【図１７】図１７は本発明の実施例１のＩ／Ｏ代行デーモン部のファイルリード代行実行処理の詳細を示すフローチャートである。
【図１８】図１８は本発明の実施例１のＩ／Ｏフックモジュール部のファイルライト処理の詳細を示すフローチャートである。
【図１９】図１９は本発明の実施例１のＩ／Ｏ代行デーモン部のファイルライト代行実行処理の詳細を示すフローチャートである。
【図２０】図２０は本発明の実施例１のＩ／Ｏフックモジュール部のファイルサイズ変更処理の詳細を示すフローチャートである。
【図２１】図２１は本発明の実施例１のＩ／Ｏ代行デーモン部のファイルサイズ変更代行実行処理の詳細を示すフローチャートである。
【図２２】図２２は本発明の実施例１のＩ／Ｏフックモジュール部のファイル削除処理の詳細を示すフローチャートである。
【図２３】図２３は本発明の実施例１のＩ／Ｏ代行デーモン部のファイル削除代行実行処理の詳細を示すフローチャートである。
【図２４】図２４は本発明の実施例２のネットワークファイル共有システムの構成例を示す。
【図２５】図２５は本発明の実施例２のＩ／Ｏ代行デーモン部の機能モジュール構成を示す。
【発明を実施するための形態】
【００３１】
以下、本発明を実施するための形態について、図面を用いて説明する。なお、各図面で同様の構成には同じ符号を付しその説明を省略する。
【実施例１】
【００３２】
図１は、本発明の第１の実施の形態に係るネットワークファイル共有システムの構成例を示す。本実施例のシステムは、ファイルサーバ１００、クライアント端末１１０、ネットワーク１２０、および、ストレージ装置１３０からなる。本システムでは、ファイルサーバ１００が、クライアント端末１１０に対して、ファイルサーバ１００に接続されたストレージ装置１３０に格納される文書および画像等のデータファイルを、ネットワーク１２０を経由してアクセスする、ネットワークファイル共有サービスを提供する。
【００３３】
ファイルサーバ１００は、例えば、ＵＮＩＸ（登録商標）等のＯＳが動作するＷＳであり、ファイルサーバアプリケーション部１４０、ＶＦＳ（Virtual File System）１５０、リアルタイムＩ／Ｏファイルシステム１６０、および、Ｉ／Ｏ代行デーモン部４００からなる。ファイルサーバアプリケーション部１４０は、ネットワークファイル共有サービスを提供するファイルサーバアプリケーションソフトウェアであり、例えば、ＳＭＢＤ（Samba Daemon）やＮＦＳＤ（Network File  System Daemon）等である。
【００３４】
ファイルサーバアプリケーション部１４０は、ファイルサーバ１００上に同一あるいは異なる種類のものが複数存在してもよい。ファイルサーバアプリケーション部１４０のＶＦＳ１５０に対するＩ／Ｏ要求は、Ｉ／Ｏフックモジュール部３００によってフックされる。
【００３５】
ＶＦＳ１５０は、ファイルサーバ１００のＯＳが提供するファイルシステムインタフェースモジュールであり、例えば、open(), close(), read(), write()等のシステムコールインタフェースを提供する、Ｉ／Ｏ特性を認識しないファイルシステムである。
【００３６】
リアルタイムＩ／Ｏファイルシステム１６０は、リアルタイムＩ／Ｏ制御機能を備えたファイルシステムモジュールであり、例えば、個々のＩ／Ｏ要求にデッドライン情報等の制御情報を付加してＩ／Ｏ制御の精度を高めることにより、Ｉ／Ｏ特性を認識するファイルシステムである。
【００３７】
Ｉ／Ｏ代行デーモン部４００は、Ｉ／Ｏフックモジュール部３００を介してファイルサーバ１４０のＩ／Ｏ要求を受け取り、ファイルサーバ１４０に代行してリアルタイムＩ／Ｏファイルシステム１６０にＩ／Ｏ要求を発行する。Ｉ／Ｏ代行デーモン部４００は、構成情報５００に基づき、個々のＩ／Ｏにデッドライン情報等の制御情報を付加する。
【００３８】
クライアント端末１１０は、例えば、文書編集や画像閲覧機能を備えるＰＣや携帯端末等である。クライアント端末１１０は、ネットワーク１２０を介してファイルサーバ１４０上のデータファイルにアクセスする。クライアント端末１１０は、同一あるいは異なる種類のものが複数存在してもよい。
【００３９】
ネットワーク１２０は、例えば、ＬＡＮおよびＷＡＮ等のＩＰ（Internet Protocol）ネットワークである。ネットワーク１２０は、ファイルサーバ１００とクライアント端末１１０を接続する。
【００４０】
ストレージ装置１３０は、ファイルサーバ１００の補助記憶装置であり、例えば、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State
Drive）、および、ＨＤＤやＳＳＤを複数備えるＲＡＩＤ（Redundant Arrays of Inexpensive Independent
Disks）装置等である。ストレージ装置１３０には、文書や画像データ等のデータファイルが格納される。
【００４１】
図２は本実施例のファイルサーバ１００のハードウェア構成例を示す。ファイルサーバ１００は、ＣＰＵ（Central Processing Unit）２００、メモリ２１０、ＮＩＣ（Network
Interface Card）２２０、ＨＢＡ（Host Bus Adapter）２３０、および、プログラム格納領域２４０からなる。なお、本発明の説明に直接関係しないハードウェア構成要素、例えば、キーボード、マウス、電源装置等については記載および説明を省略する。
【００４２】
ＣＰＵ２００は、プログラム格納領域２４０に格納されるプログラムをメモリ２１０上にロードして実行することにより、ファイルサーバ１００全体を制御する。ＣＰＵ２００は、ファイルサーバ１００上に複数存在してもよく、シングルコアプロセッサであってもマルチコアプロセッサであってもよい。
【００４３】
メモリ２１０は、計算機１００の主記憶装置であり、例えば、ＤＲＡＭ（Dynamic Random Access Memory）やＳＲＡＭ（Static  Random Access Memory）等を用いて構成される。メモリ２１０には、ＣＰＵ２００が実行しているＯＳおよびアプリケーションソフトウェアのプログラムコードおよびデータが格納される。
【００４４】
ＮＩＣ２２０は、ファイルサーバ１００とネットワーク１２０を接続するＩ／Ｏインタフェースデバイスであり、例えば、イーサネット（登録商標）、ミリネット、インフィニバンド等の接続機能を提供する。
【００４５】
ＨＢＡ２３０、ファイルサーバ１００とストレージ装置１３０を接続するＩ／Ｏインタフェースデバイスであり、例えば、ＳＣＳＩ（Small Computer System Interface）、ＳＡＳ（Serial  Attached SCSI）、ＦＣ（Fibre  Channel）等の接続機能を提供する。
【００４６】
プログラム格納領域２４０は、不揮発性の記憶領域であり、例えば、ＲＯＭ（Read Only Memory）やフラッシュメモリ等を用いて構成される。プログラム格納領域２４０には、ＯＳプログラム２４１、ファイルサーバプログラム２４２、Ｉ／Ｏフックモジュールプログラム２４３、および、Ｉ／Ｏ代行デーモンプログラム２４４が格納される。なお、これらのプログラムの一部あるいは全部が、ストレージ装置１３０上に格納されていてもよい。この場合、ＣＰＵ２００は、ＨＢＡ２３０を介してストレージ装置１３０からそれぞれのプログラムをメモリ２１０にロードして実行する。
【００４７】
図３は、Ｉ／Ｏフックモジュール部３００の機能モジュール構成を示す。Ｉ／Ｏフックモジュール部３００は、Ｉ／Ｏフック部３１０、および、プロセス間通信部３２０からなる。Ｉ／Ｏフックモジュール部３００は、例えば、Ｓａｍｂａの場合、ソースファイルのファイルＩ／Ｏ発行部分を改変してもよく、スタッカブルＶＦＳモジュールとして実装してもよい。また、環境変数LD_PRELOAD等の機構を利用してファイルサーバアプリケーション部１４０に依存しないダイナミックリンクライブラリとして実装してもよい。
【００４８】
Ｉ／Ｏフック部３１０は、ファイルサーバアプリケーション部１４０がＶＦＳ１５０に対して発行するファイルＩ／Ｏ要求をフックする。Ｉ／Ｏフック部３１０は、フックしたファイルＩ／Ｏ要求のうち、open(), close(), read(), write(), unlink(), ftruncate()の各ファイルＩ／Ｏ要求をＩ／Ｏ代行デーモン部４００に代行させる。Ｉ／Ｏフック部３１０は、その他のファイルＩ／Ｏ要求、例えば、stat()等を、ＶＦＳ１５０に対して発行することでファイルサーバアプリケーション部１４０のプロセスコンテキストで実行する。
【００４９】
プロセス間通信部３２０は、ファイルサーバアプリケーション部１４０とＩ／Ｏ代行デーモン部４００との間のプロセス間通信機能を提供する。プロセス間通信部３２０は、Ｉ／Ｏフック部３１０でフックしたファイルＩ／Ｏ要求に関する情報をＩ／Ｏ代行デーモン部４００へ送り、実行結果をＩ／Ｏ代行デーモン部４００より受信する。プロセス通信部３２０は、プロセス間通信機能を、例えば、ＵＮＩＸ（登録商標）ドメインソケットを用いて実装してもよく、ＰＯＳＩＸ（Portable Operating System Interface）メッセージキューを用いて実装してもよい。
【００５０】
図４は、Ｉ／Ｏ代行デーモン部４００の機能モジュール構成を示す。Ｉ／Ｏ代行デーモン部４００は、プロセス間通信部４１０、セッション管理部４２０、ファイル管理部４３０、共有メモリ管理部４４０、非同期Ｉ／Ｏ管理部４５０、および、構成情報５００からなる。Ｉ／Ｏ代行デーモン部４００は、例えば、ファイルサーバアプリケーション部１４０と完全独立したプロセスとして実装してもよく、ファイルサーバアプリケーション部１４０から実行中にfork()されるプロセスとして実装してもよい。
【００５１】
プロセス間通信部４１０は、Ｉ／Ｏフックモジュール部３００のプロセス間通信部３２０と同様の機構により、Ｉ／Ｏ代行デーモン部４００とファイルサーバアプリケーション部１４０との間のプロセス間通信機能を提供する。プロセス間通信部４１０は、ファイルサーバアプリケーション部１４０のＩ／Ｏフックモジュール部３００よりファイルＩ／Ｏ要求に関する情報を受け取る。
【００５２】
セッション管理部４２０は、Ｉ／Ｏ代行デーモン部４００とファイルサーバアプリケーション部１４０との通信をセッションとして扱い、ファイルサーバアプリケーション部１４０の代理で開いているファイル等を管理する。セッション管理部４２０は、ファイルサーバアプリケーション部１４０のプロセスの終了を検出した場合に、代理で開いているファイルを閉じる等の後片付け処理を行う。
【００５３】
ファイル管理部４３０は、Ｉ／Ｏ代行デーモン部４００が開いているファイル、および、当該ファイルのデータ領域の一部であるファイルブロックのうち、共有メモリ管理部４４０においてキャッシュしているファイルブロックを管理する。
【００５４】
共有メモリ管理部４４０は、Ｉ／Ｏ代行デーモン部４００が、ファイルサーバ１００のメモリ２１０上に確保した共有メモリ領域を管理する。Ｉ／Ｏ代行デーモン部４００は、メモリ２１０上に確保した共有メモリ領域を、ファイルサーバアプリケーション部１４０と共有する。Ｉ／Ｏ代行デーモン部４００とファイルサーバアプリケーション部１４０は、共有メモリ領域をＩ／Ｏバッファとして使用することにより、リアルタイムＩ／Ｏファイルシステム１６０に対して読み書きするデータの受け渡しを行う。
【００５５】
非同期Ｉ／Ｏ管理部４５０は、Ｉ／Ｏ代行デーモン部４００が、リアルタイムＩ／Ｏファイルシステム１６０に対して発行する非同期Ｉ／Ｏ要求を管理する。非同期Ｉ／Ｏ管理部４５０は、ファイルサーバアプリケーション部１４０から受け取ったファイルＩ／Ｏ要求に構成情報５００に基づく制御情報を付加し、リアルタイムＩ／Ｏファイルシステム１６０に対して非同期で発行する。非同期Ｉ／Ｏ管理部４５０は、リアルタイムＩ／Ｏファイルシステム１６０からファイルＩ／Ｏ実行結果を非同期で受け取り、プロセス間通信部４１０を介してファイルサーバアプリケーション部１４０に通知する。
【００５６】
図５は、構成情報５００の詳細を示す。構成情報５００は、アプリケーション構成情報５１０、および、ファイル構成情報５２０からなる。構成情報５００は、コンフィグファイルとしてストレージ装置１３０に格納されているものをＩ／Ｏ代行デーモン部４００の起動時に読み込んでもよく、Ｉ／Ｏ代行デーモンプログラム２４４の一部として組み込まれていてもよい。
【００５７】
アプリケーション構成情報５１０は、アプリケーション名５１１、優先度５１２、リトライポリシー５１３を格納するテーブルである。アプリケーション名５１１は、Ｉ／Ｏ代行デーモン部４００と連携するファイルサーバアプリケーション部１４０のプロセス名やバイナリファイル名である。
【００５８】
優先度５１２は当該ファイルサーバアプリケーション部１４０のＩ／Ｏ実行優先度であり、例えば、優先度の値の高いファイルサーバアプリケーション部１４０から受け取ったファイルＩ／Ｏ要求は、優先度の低いファイルサーバアプリケーション部１４０から受け取ったファイルＩ／Ｏ要求に比べて、Ｉ／Ｏ代行デーモン部４００によって、優先的に処理される。
【００５９】
リトライポリシー５１３は、当該ファイルサーバアプリケーション部１４０から受け取った個々のファイルＩ／Ｏ要求がデッドラインミスを起こした場合に、ファイルＩ／Ｏデーモン部４００が再試行する回数等を格納する。
【００６０】
ファイル構成情報５２０は、ファイルパス５２１、ビットレート５２２、デッドライン５２３の値を格納するテーブルである。ファイルパス５２１は、Ｉ／Ｏ代行デーモン部４００がアクセス対象とするファイルのパスである。ビットレート５２２は、当該ファイルの読み込みおよび書き込みビットレートである。デッドライン５２３は、当該ファイルに対する個々のファイルＩ／Ｏ要求に付加するデッドライン情報である。なお、ファイルパス５２１は、例えば、絶対パスによって単一のファイルを一意に識別するものであってもよく、正規表現を含むパス名によって複数のファイルを識別すものであってもよい。
【００６１】
図６は、Ｉ／Ｏフックモジュール部３００とＩ／Ｏ代行デーモン部４００との間のＩ／Ｏ代行通信プロトコル６００を示す。Ｉ／Ｏ代行通信プロトコル６００には、Ｉ／Ｏフックモジュール部３００からＩ／Ｏ代行デーモン部４００へ伝達されるＩ／Ｏ代行要求と、その応答としてＩ／Ｏ代行デーモン部４００からＩ／Ｏフックモジュール部３００へ伝達されるＩ／Ｏ代行応答がある。
【００６２】
Ｉ／Ｏ代行要求には、ＣＯＮＮＥＣＴ要求６１０、ＤＩＳＣＯＮＮＥＣＴ要求６１１、ＯＰＥＮ要求６１２、ＣＬＯＳＥ要求６１３、ＲＥＡＤ０要求６１４、ＲＥＡＤ１要求６１５、ＷＲＩＴＥ０要求６１６、ＷＲＩＴＥ１要求６１７、ＦＴＲＵＮＣＡＴＥ要求６１８、および、ＵＮＬＩＮＫ要求６１９がある。
【００６３】
Ｉ／Ｏ代行応答には、ＣＯＮＮＥＣＴ応答６２０、ＤＩＳＣＯＮＮＥＣＴ応答６２１、ＯＰＥＮ応答６２２、ＣＬＯＳＥ応答６２３、ＲＥＡＤ０応答６２４、ＲＥＡＤ１応答６２５、ＷＲＩＴＥ０応答６２６、ＷＲＩＴＥ１応答６２７、ＦＴＲＵＮＣＡＴＥ応答６２８、および、ＵＮＬＩＮＫ応答６２９がある。
【００６４】
ＣＯＮＮＥＣＴ要求６１０は、Ｉ／Ｏフックモジュール部３００がＩ／Ｏ代行デーモン部４００と連携を開始する場合に使用される。ＣＯＮＮＥＣＴ要求６１０には、Ｉ／Ｏフックモジュール３００が組み込まれているファイルサーバアプリケーション部１４０のプロセス識別子、例えば、プロセスＩＤ（ＰＩＤ）と、Ｉ／Ｏフックモジュール部３００が応答の受信に使用する情報、例えば、メッセージキュー名（ＭＱ ＮＡＭＥ）が含まれる。ＣＯＮＮＥＣＴ要求６１０を受け取ったＩ／Ｏ代行デーモン部４００は、送信元のファイルサーバアプリケーション部１４０との通信を、セッション管理部４２０においてセッションとして管理する。
【００６５】
ＣＯＮＮＥＣＴ応答６２０は、ＣＯＮＮＥＣＴ要求６１０に対する応答として使用される。ＣＯＮＮＥＣＴ応答６２０には、ＣＯＮＮＥＣＴ要求６１０の実行結果（ＲＥＳＵＬＴ）と、Ｉ／Ｏ代行デーモン部４００が共有メモリ管理部４４０において管理している共有メモリ領域の情報、例えば、共有メモリ名（ＳＨＭ ＮＡＭＥ）と、共有メモリ領域サイズ（ＳＨＭ ＳＩＺＥ）が含まれる。ＣＯＮＮＥＣＴ応答６２０を受け取ったＩ／Ｏフックモジュール部３００は、共有メモリ領域をファイルサーバアプリケーション部１４０のプロセスメモリ空間にマップする。
【００６６】
ＤＩＳＣＯＮＮＥＣＴ要求６１１は、Ｉ／Ｏフックモジュール部３００がＩ／Ｏ代行デーモン部４００との連携を終了する場合に使用される。ＤＩＳＣＯＮＮＥＣＴ要求６１１には、プロセス識別子が含まれる。ＤＩＳＣＯＮＮＥＣＴ要求６１０を受け取ったＩ／Ｏ代行デーモン部４００は、対応するファイルサーバアプリケーション部１４０のセッションの後片付け処理を行う。
【００６７】
ＤＩＳＣＯＮＮＥＣＴ応答６２１は、ＤＩＳＣＯＮＮＥＣＴ要求６１１に対する応答として使用される。ＤＩＳＣＯＮＮＥＣＴ応答６２１には、ＤＩＳＣＯＮＮＥＣＴ要求６１１の実行結果が含まれる。
【００６８】
ＯＰＥＮ要求６１２は、Ｉ／Ｏフックモジュール部３００が、ファイルサーバアプリケーション部１４０のファイルオープン処理をフックした場合に使用される。ＯＰＥＮ要求６１２には、プロセス識別子と、ファイルサーバアプリケーション部１４０内でファイルを一意に示すファイル識別子、例えば、ファイルＩＤ（ＦＩＤ）と、読み出しのみ、あるいは、読み書きのオープンモードを示すフラグ（ＦＬＡＧＳ）と、ファイルのパス名（ＰＡＴＨ）が含まれる。ＯＰＥＮ要求６１２を受け取ったＩ／Ｏ代行デーモン部４００は、当該ファイルを指定されたモードでオープンし、ファイル管理部４３０において管理する。
【００６９】
ＯＰＥＮ応答６２２は、ＯＰＥＮ要求６１２に対する応答として使用される。ＯＰＥＮ応答６２２には、ＯＰＥＮ要求６１２の実行結果と、ファイル識別子が含まれる。
【００７０】
ＣＬＯＳＥ要求６１３は、Ｉ／Ｏフックモジュール部３００が、ファイルサーバアプリケーション部１４０のファイルクローズ処理をフックした場合に使用される。ＣＬＯＳＥ要求６１３には、ファイルサーバアプリケーション部１４０の識別子と、ファイル識別子が含まれる。ＣＬＯＳＥ要求６１３を受け取ったＩ／Ｏ代行デーモン部４００は、ファイル管理部４３０において管理されている当該ファイルをクローズする。
【００７１】
ＣＬＯＳＥ応答６２３は、ＣＬＯＳＥ要求６１３に対する応答して使用される。ＣＬＯＳＥ応答６２３には、ＣＬＯＳＥ要求６１３の実行結果と、ファイル識別子が含まれる。
【００７２】
ＲＥＡＤ０要求６１４は、Ｉ／Ｏフックモジュール部３００が、ファイルサーバアプリケーション部１４０のファイルリード処理をフックした場合に使用される。
【００７３】
ＲＥＡＤ０要求６１４には、プロセス識別子と、読み込み対象ファイルを示すファイル識別子と、ファイルサーバアプリケーション部１４０内でＩ／Ｏ代行デーモン部４００に代行させるファイルＩ／Ｏ要求を一意に識別するＩ／Ｏ識別子（ＩＯＩＤ）と、対象ファイル内の読み込み位置を示すオフセット（ＯＦＦＳＥＴ）とサイズ（ＳＩＺＥ）が含まれる。
【００７４】
ＲＥＡＤ０要求６１４を受け取ったＩ／Ｏ代行デーモン部４００は、共有メモリ管理部４４０においてＩ／Ｏバッファメモリとなる共有メモリ領域を割り当て、非同期Ｉ／Ｏ管理部４５０において、構成情報５００に基づく制御情報を付加したファイルＩ／Ｏ要求をリアルタイムＩ／Ｏファイルシステム１６０に対して発行し、割り当てたＩ／Ｏバッファメモリに当該ファイルデータを読み込む。
【００７５】
ＲＥＡＤ０応答６２４は、ＲＥＡＤ０要求６１４に対する応答として使用される。ＲＥＡＤ０応答６２４には、ＲＥＡＤ０要求６１４の実行結果と、ファイル識別子と、Ｉ／Ｏ識別子と、読み込んだデータが格納されているＩ／Ｏバッファメモリを示す共有メモリ領域内のオフセット（ＳＨＭ ＯＦＦＳＥＴ）とサイズが含まれる。
【００７６】
ＲＥＡＤ１要求６１５は、Ｉ／Ｏフックモジュール部３００が、ＲＥＡＤ０応答６２４を受け取り、例えば、クライアント端末１１０に送信し終わった等、共有メモリ領域に読み込まれたデータの使用を完了した場合に使用される。ＲＥＡＤ１要求６１５には、プロセス識別子と、ファイル識別子と、Ｉ／Ｏ識別子が含まれる。ＲＥＡＤ１要求６１５を受け取ったＩ／Ｏ代行デーモン部４００は、共有メモリ部４５０において当該ファイルＩ／Ｏ要求のために割り当てたＩ／Ｏバッファメモリを開放する。
【００７７】
ＲＥＡＤ１応答６２５は、ＲＥＡＤ１要求６１５に対する応答として使用される。ＲＥＡＤ１応答６２５には、ＲＥＡＤ１要求６２５の実行結果と、ファイル識別子と、Ｉ／Ｏ識別子が含まれる。
【００７８】
ＷＲＩＴＥ０要求６１６は、Ｉ／Ｏフックモジュール部３００が、ファイルサーバアプリケーション部１４０のファイルライト処理をフックした場合に使用される。ＷＲＩＴＥ０要求６１６には、プロセス識別子と、ファイル識別子と、Ｉ／Ｏ識別子と、対象ファイル内の書き込み位置を示すオフセットとサイズが含まれる。ＷＲＩＴＥ０要求６１６を受け取ったＩ／Ｏ代行デーモン部４００は、共有メモリ管理部４４０においてＩ／Ｏバッファメモリとなる共有メモリ領域を割り当てる。
【００７９】
ＷＲＩＴＥ０応答６２６は、ＷＲＩＴＥ０要求６１６に対する応答として使用される。ＷＲＩＴＥ０応答６２６には、ＷＲＩＴＥ０要求６１６の実行結果と、ファイル識別子と、Ｉ／Ｏ識別子と、Ｉ／Ｏ代行デーモン部４００が割り当てたＩ／Ｏバッファメモリを示す共有メモリ領域内のオフセットとサイズが含まれる。
【００８０】
ＷＲＩＴＥ１要求６１７は、Ｉ／Ｏフックモジュール部３００が、ＷＲＩＴＥ０応答６２６を受け取り、Ｉ／Ｏバッファとして割り当てられた共有メモリ領域へ書き込むべきデータの転送を完了した場合に使用される。ＷＲＩＴＥ１要求６１７には、プロセス識別子と、ファイル識別子と、Ｉ／Ｏ識別子が含まれる。ＷＲＩＴＥ１要求６１７を受け取ったＩ／Ｏ代行デーモン部４００は、非同期Ｉ／Ｏ管理部４５０において構成情報５００に基づく制御情報を付加したファイルＩ／Ｏ要求をリアルタイムＩ／Ｏファイルシステム１６０に対して発行し、Ｉ／Ｏバッファメモリに格納されたデータを当該ファイルに書き込む。
【００８１】
ＷＲＩＴＥ１応答６２７は、ＷＲＩＴＥ１要求６１７の応答として使用される。ＷＲＩＴＥ１応答６２７には、ＷＲＩＴＥ１要求６１７の実行結果と、ファイル識別子と、Ｉ／Ｏ識別子と、実際に書き込まれたサイズが含まれる。
【００８２】
ＦＴＲＵＮＣＡＴＥ要求６１８は、Ｉ／Ｏフックモジュール部３００が、ファイルサーバアプリケーション部１４０のファイルサイズ変更処理をフックした場合に使用される。ＦＴＲＵＮＣＡＴＥ要求６１８には、プロセス識別子と、ファイル識別子と、Ｉ／Ｏ識別子と、当該ファイルの変更後のファイルサイズが含まれる。
【００８３】
ＦＴＲＵＮＣＡＴＥ要求６１８を受け取ったＩ／Ｏ代行デーモン部４００は、ファイル管理部４３０において管理されている当該ファイルのサイズを変更し、非同期Ｉ／Ｏ管理部４５０において、ファイルサイズ変更要求をリアルタイムＩ／Ｏファイルシステム１６０に対して発行する。ファイルサイズが縮小される場合、Ｉ／Ｏ代行デーモン部４００は、共有メモリ管理部４４０において共有メモリ領域にキャッシュされている当該ファイルのデータブロックのうち、ファイルサイズの変更により不要となる部分を無効化する。
【００８４】
ＦＴＲＵＮＣＡＴＥ応答６２８は、ＦＴＲＵＮＣＡＴＥ要求６１８の応答として使用される。ＦＴＲＵＮＣＡＴＥ応答６２８には、ＦＴＲＵＮＣＡＴＥ応答６２８の実行結果と、フィル識別子と、Ｉ／Ｏ識別子が含まれる。
【００８５】
ＵＮＬＩＮＫ要求６１９は、Ｉ／Ｏフックモジュール部３００が、ファイルサーバアプリケーション部１４０のファイル削除処理をフックした場合に使用される。ＵＮＬＩＮＫ要求６１９には、プロセス識別子と、ファイル識別子と、削除対象のファイルのパス名が含まれる。ＵＮＬＩＮＫ要求６１９を受け取ったＩ／Ｏ代行デーモン部４００は、ファイル管理部４３０において管理されている当該ファイルの情報を削除し、共有メモリ管理部４４０において共有メモリ領域にキャッシュされている当該ファイルのデータブロックを無効化する。
【００８６】
ＵＮＬＩＮＫ応答６２９は、ＵＮＬＩＮＫ要求６１９の応答として使用される。ＵＮＬＩＮＫ応答６２９には、ＵＮＬＩＮＫ要求６１９の実行結果と、ファイル識別子が含まれる。
【００８７】
以下、フローチャートを用いてＩ／Ｏフックモジュール部３００、および、Ｉ／Ｏ代行デーモン部４００の処理を説明する。
【００８８】
図７は、Ｉ／Ｏフックモジュール部３００の処理を示すフローチャートである。Ｉ／Ｏフックモジュール部３００は、ファイルサーバアプリケーション部１４０の開始時に合わせて開始される。Ｉ／Ｏフックモジュール部３００は、開始時にＦＩＤテーブル等の初期化処理を行う（Ｓ７００）。
【００８９】
次に、連携するＩ／Ｏ代行デーモン部４００に対して、自身のファイルサーバアプリケーション部１４０のプロセスＩＤ（ＰＩＤ）ＣＯＮＮＥＣＴ要求６１０を送信し（Ｓ７１０）、その応答としてＣＯＮＮＥＣＴ応答６２０を受信する（Ｓ７２０）。Ｉ／Ｏフックモジュール部３００は、ＣＯＮＮＥＣＴ応答６２０に含まれる共有メモリ領域の情報をもとに、当該共有メモリを自身のプロセス空間にマップする（Ｓ７３０）。
【００９０】
Ｉ／Ｏフックモジュール部３００は、ファイルサーバアプリケーション部１４０が終了するまで、Ｉ／Ｏフック処理を繰り返す（Ｓ７４０）。
【００９１】
Ｉ／Ｏフックモジュール部３００は、ファイルサーバアプリケーション部１４０が終了する際に、Ｉ／Ｏ代行処理の終了を通知するためにＩ／Ｏ代行デーモン部４００に対してＤＩＳＣＯＮＮＥＣＴ要求６１１を送信する（Ｓ７５０）。最後に、Ｉ／Ｏフックモジュール部３００は、ＤＩＳＣＯＮＮＥＣＴ応答Ｓ６２１を受信し（Ｓ７６０）、自身の処理を終了する。
【００９２】
図８は、Ｉ／Ｏフック処理（Ｓ７１０）の詳細を示すフローチャートである。Ｉ／Ｏフックモジュール部３００は、ファイルサーバアプリケーション部１４０のファイルＩ／Ｏ要求をフックした際に、フックしたファイルＩ／Ｏ要求がファイルＩ／Ｏデーモン４００部に代行させる対象のＩ／Ｏ要求、例えば、ファイルオープンopen()、ファイルクローズclose()、ファイルリードread()、ファイルライトwrite()、ファイルサイズ変更ftruncate()、および、ファイル削除unlink()であるかを判定する（Ｓ８００）。
【００９３】
代行対象Ｉ／Ｏ要求である場合（Ｓ８００においてＹＥＳ）、Ｉ／Ｏフックモジュール部３００は、Ｉ／Ｏ代行デーモン部４００にＩ／Ｏを代行させる処理を行い（Ｓ８１０）、結果をファイルサーバアプリケーション部１４０に返す。
【００９４】
代行対象Ｉ／Ｏ要求でない場合（Ｓ８００においてＮＯ）、Ｉ／Ｏフックモジュール部３００は、ＶＦＳ関数を実行することにより自身でＶＦＳ１５０に対してファイルＩ／Ｏ要求を発行し（Ｓ８２０）、結果をファイルサーバアプリケーション部１４０に返す。
【００９５】
図９は、Ｉ／Ｏ代行デーモン部４００の処理を示すフローチャートである。Ｉ／Ｏ代行デーモン部４００は、例えば、デーモンプロセスとして起動され、最初に、共有メモリ管理部４４０において共有メモリ領域を確保する等の初期化処理を行う（Ｓ９００）。
【００９６】
初期化処理を完了すると、Ｉ／Ｏ代行デーモン部４００は、自身のプロセスを終了するまで、Ｉ／Ｏフックモジュール部３００からのＩ／Ｏ代行要求の処理を行うＩ／Ｏ代行実行処理を繰り返す（Ｓ９１０）。
【００９７】
図１０は、Ｉ／Ｏ代行デーモン部４００のＩ／Ｏ代行実行処理（Ｓ９１０）のひとつである、ファイルサーバアプリケーション部１４０との連携を開始する処理の詳細を示すフローチャートである。
【００９８】
Ｉ／Ｏ代行デーモン部４００は、ＣＯＮＮＥＣＴ要求６１０を受信した場合（Ｓ１０００）、要求に含まれるファイルサーバアプリケーション部１４０のプロセス識別子をセッション管理部４２０においてセッション情報として登録する（Ｓ１０１０）。次に、Ｉ／Ｏ代行デーモン４００は、Ｉ／Ｏフックモジュール部３００に対して、実行結果および共有メモリ領域の情報等を含むＣＯＮＮＥＣＴ応答６２０を送信し（Ｓ１０２０）、Ｉ／Ｏ代行実行処理を終了する。
【００９９】
図１１は、Ｉ／Ｏ代行デーモン部４００のＩ／Ｏ代行実行処理（Ｓ９１０）のひとつである、ファイルサーバアプリケーション部１４０との連携を終了する処理の詳細を示すフローチャートである。
【０１００】
Ｉ／Ｏ代行デーモン部４００は、ＤＩＳＣＯＮＮＥＣＴ要求６１１を受信した場合（Ｓ１１００）、要求に含まれるプロセス識別子を含むセッション情報をセッション管理部４２０において削除する（Ｓ１１１０）。次に、Ｉ／Ｏ代行デーモン部４００は、Ｉ／Ｏフックモジュール３００に対して、実行結果を含むＤＩＳＣＯＮＮＥＣＴ応答６２１を送信し（Ｓ１１２０）、Ｉ／Ｏ代行実行処理を終了する。
【０１０１】
図１２は、Ｉ／Ｏフックモジュール部３００のＩ／Ｏ代行処理（Ｓ８１０）のひとつである、ファイルオープン処理の詳細を示すフローチャートである。Ｉ／Ｏフックモジュール部３００は、ファイルオープンＩ／Ｏ要求をフックした場合、最初に、ＶＦＳ１５０が提供するＶＦＳ関数を用いて対象ファイルを自身でオープンし、ＦＩＤを取得する（Ｓ１２００）。ファイルオープンに失敗した場合（Ｓ１２１０においてＮＯ）、Ｉ／Ｏフックモジュール部３００は、失敗をファイルサーバアプリケーション部１４０に返す。
【０１０２】
ファイルオープンに成功した場合（Ｓ１２１０においてＹＥＳ）、Ｉ／Ｏフックモジュール部３００は、Ｉ／Ｏ代行デーモン部４００に対して、ファイルサーバアプリケーション部１４０のＰＩＤ、オープンしたファイルのＦＩＤ、対象ファイルのパス等を含むＯＰＥＮ要求６１２を送信する（Ｓ１２２０）。
【０１０３】
次に、Ｉ／Ｏフックモジュール部３００は、Ｉ／Ｏ代行モジュール部４００からＯＰＥＮ応答６２２を受信し（Ｓ１２３０）、応答に含まれる実行結果が成功であったかを判定する（Ｓ１２４０）。実行結果が失敗であった場合（Ｓ１２４０においてＮＯ）、自身のファイルオープン処理には成功しているため、成功をファイルサーバアプリケーション部１４０に返す。
【０１０４】
実行結果が成功であった場合（Ｓ１２４０においてＹＥＳ）、ＦＩＤをファイルＩ／Ｏ要求代行対象のファイルを示す情報としてＩ／Ｏフックモジュール部３００内に登録し（Ｓ１２５０）、成功をファイルサーバアプリケーション部１４０に返す。
【０１０５】
図１３は、Ｉ／Ｏ代行デーモン部４００のＩ／Ｏ代行実行処理（Ｓ９１０）のひとつである、ファイルオープン代行実行処理の詳細を示すフローチャートである。Ｉ／Ｏ代行デーモン部４００は、ＯＰＥＮ要求６１２を受信した場合（Ｓ１３００）、要求に含まれるパス名等の情報を用いて、対象ファイルをオープンする（Ｓ１３１０）。ファイルオープンに失敗した場合（Ｓ１３２０においてＮＯ）、Ｉ／Ｏ代行デーモン部４００は、Ｉ／Ｏフックモジュール部３００に対して、実行結果に失敗を含むＯＰＥＮ応答６２２を送信（Ｓ１３４０）し、Ｉ／Ｏ代行実行処理を終了する。
【０１０６】
ファイルオープンに成功した場合（Ｓ１３２０においてＹＥＳ）、Ｉ／Ｏ代行デーモン部４００は、ファイル管理部４３０において、要求に含まれるＦＩＤ、自身がファイルオープン処理により取得したＦＩＤ等の情報をファイル管理情報として登録する（Ｓ１３３０）。次に、Ｉ／Ｏ代行デーモン部４００は、Ｉ／Ｏフックモジュール部３００に対して、実行結果に成功を含むＯＰＥＮ応答６２２を送信（Ｓ１３４０）し、Ｉ／Ｏ代行実行処理を終了する。
【０１０７】
図１４は、Ｉ／Ｏフックモジュール部３００のＩ／Ｏ代行処理（Ｓ８１０）のひとつである、ファイルクローズ処理の詳細を示すフローチャートである。Ｉ／Ｏフックモジュール部３００は、ファイルクローズＩ／Ｏ要求をフックした場合、最初に、対象ファイルが代行対象ファイルであるかを判定する（Ｓ１４００）。代行対象ファイルであるかの判定は、対象ＦＩＤがＩ／Ｏフックモジュール部３００内に登録されているかどうかを判定することによって行う。
【０１０８】
代行対象ファイルでない場合（Ｓ１４００においてＮＯ）、Ｉ／Ｏフックモジュール部３００は、自身でオープンしたファイルをクローズし（Ｓ１４４０）、結果をファイルサーバアプリケーション部１４０に返す。
【０１０９】
代行対象ファイルである場合（Ｓ１４００においてＹＥＳ）、Ｉ／Ｏフックモジュール部３００は、Ｉ／Ｏ代行デーモン部４００に対して、ＰＩＤおよびＦＩＤを含むＣＬＯＳＥ要求６１３を送信する（Ｓ１４１０）。次に、Ｉ／Ｏフックモジュール部３００は、Ｉ／Ｏ代行モジュール４００からＣＬＯＳＥ応答６２３を受信し（Ｓ１４２０）、結果をファイルサーバアプリケーション部１４０に返す。
【０１１０】
図１５は、Ｉ／Ｏ代行デーモン部４００のＩ／Ｏ代行実行処理（Ｓ９１０）のひとつである、ファイルクローズ代行実行処理の詳細を示すフローチャートである。Ｉ／Ｏ代行デーモン部４００は、ＣＬＯＳＥ要求６１３を受信した場合（Ｓ１５００）、要求に含まれるＰＩＤ、ＦＩＤに対応するファイルをクローズする（Ｓ１５１０）。
【０１１１】
次に、Ｉ／Ｏ代行デーモン部４００は、ファイル管理部４３０において、登録されている対応するファイル情報を削除し（Ｓ１５２０）する。次に、Ｉ／Ｏ代行デーモン部４００は、ＣＬＯＳＥ応答６２３を送信（Ｓ１５３０）し、Ｉ／Ｏ代行実行処理を終了する。
【０１１２】
図１６は、Ｉ／Ｏフックモジュール部３００のＩ／Ｏ代行処理（Ｓ８１０）のひとつである、ファイルリード処理の詳細を示すフローチャートである。Ｉ／Ｏフックモジュール部３００は、ファイルリードＩ／Ｏ要求をフックした場合、最初に、対象ファイルが代行対象ファイルであるかを判定する（Ｓ１６００）。
【０１１３】
代行対象ファイルでない場合（Ｓ１６００においてＮＯ）、Ｉ／Ｏフックモジュール部３００は、ＶＦＳ１５０が提供するＶＦＳ関数を実行することによりファイルリード処理を実行し（Ｓ１６１０）、結果をファイルサーバアプリケーション部１４０に返す。
【０１１４】
代行対象ファイルである場合（Ｓ１６００においてＹＥＳ）、Ｉ／Ｏフックモジュール部３００は、Ｉ／Ｏ代行デーモン部４００に対して、ＰＩＤ、ＦＩＤ、ＩＯＩＤ、そして、ファイルの読み出し範囲を示すＯＦＦＳＥＴおよびＳＩＺＥを含むＲＥＡＤ０要求６１４を送信する（Ｓ１６２０）。ここで、ＩＯＩＤは、ファイルサーバアプリケーション部１４０プロセス内で単調増加する整数値を用いればよい。
【０１１５】
次に、Ｉ／Ｏフックモジュール部３００は、Ｉ／Ｏ代行モジュール部４００からＲＥＡＤ０応答６２４を受信し（Ｓ１６３０）、応答に含まれるＳＨＭ ＯＦＦＳＥＴおよびＳＩＺＥで示される共有メモリ領域に格納されたファイルデータを読み出す（Ｓ１６４０）。
【０１１６】
ここで、例えば、ファイルデータのストレージ装置１３０からの読み込みおよびネットワーク１２０への送信を一度に行うsendfile()をフック対象にしている場合は、共有メモリ領域に格納されたファイルデータを直接ネットワーク１２０へ送信すればよい。通常のread()をフックした場合は、共有メモリ領域に格納されたファイルデータをファイルサーバアプリケーション１４０が読み込みバッファに指定したメモリ領域にコピーすればよい。
【０１１７】
次に、Ｉ／Ｏフックモジュール部３００は、Ｉ／Ｏ代行デーモン部４００に対して、ＲＥＡＤ０要求６１４送信時と同一のＩＯＩＤ含むＲＥＡＤ１要求６１５を送信し（Ｓ１６５０）、共有メモリ領域に格納されたファイルデータの使用を完了したことを通知する。
【０１１８】
次に、Ｉ／Ｏフックモジュール部３００は、Ｉ／Ｏ代行デーモン部４００からＲＥＡＤ１応答６２５を受信し（Ｓ１６６０）、結果をファイルサーバアプリケーション部１４０に返す。
【０１１９】
図１７は、Ｉ／Ｏ代行デーモン部４００のＩ／Ｏ代行実行処理（Ｓ９１０）のひとつである、ファイルリード代行実行処理の詳細を示すフローチャートである。Ｉ／Ｏ代行デーモン部４００は、ＲＥＡＤ０要求６１４を受信した場合（Ｓ１７００）、共有メモリ管理部４４０において要求に含まれるサイズ分の共有メモリ領域をＩ／Ｏバッファメモリとして割り当てる（Ｓ１７１０）。
【０１２０】
次に、非同期Ｉ／Ｏ管理部４５０において、構成情報５００に基づく制御情報を付加したファイルＩ／Ｏ要求をリアルタイムＩ／Ｏファイルシステム１６０に対して発行し、割り当てた共有メモリ領域に当該ファイルデータを読み込む（Ｓ１７２０）。次に、Ｉ／Ｏ代行デーモン部４００は、Ｉ／Ｏフックモジュール部３００に対して、ファイルデータを読み込んだ共有メモリ領域の情報を含むＲＥＡＤ０応答６２４を送信する（Ｓ１７３０）。
【０１２１】
次に、Ｉ／Ｏ代行デーモン部４００は、ＲＥＡＤ１要求６１５を受信し（Ｓ１７４０）、共有メモリ管理部４４０においてＩ／Ｏバッファメモリとして割り当てた共有メモリ領域を解放する（Ｓ１７５０）。次に、Ｉ／Ｏ代行デーモン部４００は、Ｉ／Ｏフックモジュール部３００に対して、ＲＥＡＤ１応答６２５を送信し（Ｓ１７６０）、Ｉ／Ｏ代行実行処理を終了する。
【０１２２】
図１８は、Ｉ／Ｏフックモジュール部３００のＩ／Ｏ代行処理（Ｓ８１０）のひとつである、ファイルライト処理の詳細を示すフローチャートである。Ｉ／Ｏフックモジュール部３００は、ファイルライトＩ／Ｏ要求をフックした場合、最初に、対象ファイルが代行対象ファイルであるかを判定する（Ｓ１８００）。
【０１２３】
代行対象ファイルでない場合（Ｓ１８００においてＮＯ）、Ｉ／Ｏフックモジュール部３００は、ＶＦＳ１５０が提供するＶＦＳ関数を実行することによりファイルライト処理を実行し（Ｓ１８１０）、結果をファイルサーバアプリケーション部１４０に返す。
【０１２４】
代行対象ファイルである場合（Ｓ１８００においてＹＥＳ）、Ｉ／Ｏフックモジュール部３００は、Ｉ／Ｏ代行デーモン部４００に対して、ＰＩＤ、ＦＩＤ、ＩＯＩＤ、そして、ファイルの書き込み範囲を示すＯＦＦＳＥＴおよびＳＩＺＥを含むＷＲＩＴＥ０要求６１６を送信する（Ｓ１８２０）。
【０１２５】
次に、Ｉ／Ｏフックモジュール部３００は、Ｉ／Ｏ代行デーモン部４００からＷＲＩＴＥ０応答６２６を受信し（Ｓ１８３０）、応答に含まれるＳＨＭ ＯＦＦＳＥＴおよびＳＩＺＥで示される共有メモリ領域に対して、対象ファイルに書き込むデータを書き込む（Ｓ１８４０）。次に、Ｉ／Ｏフックモジュール部３００は、Ｉ／Ｏ代行デーモン部４００に対して、ＷＲＩＴＥ０要求６１６送信時と同一のＩＯＩＤ含むＷＲＩＴＥ１要求６１７を送信し（Ｓ１８５０）、共有メモリ領域へのファイルデータの書き込みが完了したことを通知する。
【０１２６】
次に、Ｉ／Ｏフックモジュール部３００は、Ｉ／Ｏ代行デーモン部４００からＷＲＩＴＥ１応答６２７を受信し（Ｓ１８６０）、結果をファイルサーバアプリケーション部１４０に返す。
【０１２７】
図１９は、Ｉ／Ｏ代行デーモン部４００のＩ／Ｏ代行実行処理（Ｓ９１０）のひとつである、ファイルライト代行実行処理の詳細を示すフローチャートである。Ｉ／Ｏ代行デーモン部４００は、ＷＲＩＴＥ０要求６１６を受信した場合（Ｓ１９００）、共有メモリ管理部４４０において要求に含まれるサイズ分の共有メモリ領域をＩ／Ｏバッファメモリとして割り当てる（Ｓ１９１０）。次に、Ｉ／Ｏ代行デーモン部４００は、Ｉ／Ｏフックモジュール部３００に対して、割り当てた共有メモリ領域の情報を含むＷＲＩＴＥ０応答６２６を送信する（Ｓ１９２０）。
【０１２８】
次に、Ｉ／Ｏ代行デーモン部４００は、ＷＲＩＴＥ１要求６１７を受信し（Ｓ１９３０）、非同期Ｉ／Ｏ管理部４５０において、構成情報５００に基づく制御情報を付加したファイルＩ／Ｏ要求をリアルタイムＩ／Ｏファイルシステム１６０に対して発行し、共有メモリ領域に格納された当該ファイルデータを書き込む（Ｓ１９４０）。次に、Ｉ／Ｏ代行デーモン部４００は、共有メモリ管理部４４０において割り当てた共有メモリ領域を解放する（Ｓ１９５０）。
【０１２９】
次に、Ｉ／Ｏ代行デーモン部４００は、Ｉ／Ｏフックモジュール３００に対して、ＷＲＩＴＥ１応答６２７を送信し（Ｓ１９６０）、Ｉ／Ｏ代行実行処理を終了する。
【０１３０】
図２０は、Ｉ／Ｏフックモジュール部３００のＩ／Ｏ代行処理（Ｓ８１０）のひとつである、ファイルサイズ変更処理の詳細を示すフローチャートである。Ｉ／Ｏフックモジュール部３００は、ファイルサイズ変更Ｉ／Ｏ要求をフックした場合、最初に、対象ファイルが代行対象ファイルであるかを判定する（Ｓ２０００）。
【０１３１】
代行対象ファイルでない場合（Ｓ２０００においてＮＯ）、Ｉ／Ｏフックモジュール部３００は、ＶＦＳ１５０が提供するＶＦＳ関数を実行することによりファイルサイズ変更処理を実行し（Ｓ２０１０）、結果をファイルサーバアプリケーション部１４０に返す。
【０１３２】
代行対象ファイルである場合（Ｓ２０００においてＹＥＳ）、Ｉ／Ｏフックモジュール部３００は、Ｉ／Ｏ代行デーモン部４００に対して、ＰＩＤ、ＦＩＤ、ＩＯＩＤ、そして、変更後のファイルサイズを示すＳＩＺＥを含むＦＴＲＵＮＣＡＴＥ要求６１８を送信する（Ｓ２０２０）。次に、Ｉ／Ｏフックモジュール部３００は、Ｉ／Ｏ代行デーモン部４００からＦＴＲＵＮＣＡＴＥ応答６２８を受信し（Ｓ２０３０）、結果をファイルサーバアプリケーション部１４０に返す。
【０１３３】
図２１は、Ｉ／Ｏ代行デーモン部４００のＩ／Ｏ代行実行処理（Ｓ９１０）のひとつである、ファイルサイズ変更代行実行処理の詳細を示すフローチャートである。Ｉ／Ｏ代行デーモン部４００は、ＦＴＲＵＮＣＡＴＥ要求６１８を受信した場合（Ｓ２１００）、ファイル管理部４３０において管理されている当該ファイルのサイズを変更し、非同期Ｉ／Ｏ管理部４５０において、ファイルサイズ変更要求をリアルタイムＩ／Ｏファイルシステム１６０に対して発行する（Ｓ２１１０）。次に、Ｉ／Ｏ代行デーモン部４００は、ファイルサイズ変更処理がファイルサイズ縮小であるかを判定する（Ｓ２１２０）。
【０１３４】
ファイルサイズ縮小である場合（Ｓ２１２０においてＹＥＳ）、Ｉ／Ｏ代行デーモン部４００は、共有メモリ管理部４４０において共有メモリ領域にキャッシュされている当該ファイルのデータブロックのうち、ファイルサイズの変更により不要となる部分を無効化する（Ｓ２１３０）。次に、Ｉ／Ｏ代行デーモン部４００は、Ｉ／Ｏフックモジュール部３００に対して、ＦＴＲＵＮＣＡＴＥ応答６２８を送信し（Ｓ２１４０）、Ｉ／Ｏ代行実行処理を終了する。
【０１３５】
ファイルサイズ縮小でない場合（Ｓ２１２０においてＮＯ）、Ｉ／Ｏ代行デーモン部４００は、Ｉ／Ｏフックモジュール部３００に対して、直ちにＦＴＲＵＮＣＡＴＥ応答６２８を送信し（Ｓ２１４０）、Ｉ／Ｏ代行実行処理を終了する。
【０１３６】
図２２は、Ｉ／Ｏフックモジュール部３００のＩ／Ｏ代行処理（Ｓ８１０）のひとつである、ファイル削除処理の詳細を示すフローチャートである。Ｉ／Ｏフックモジュール部３００は、ファイル削除Ｉ／Ｏ要求をフックした場合、Ｉ／Ｏ代行デーモン部４００に対して、ＰＩＤ、ＦＩＤ、そして、削除対象のファイルを示すＰＡＴＨを含むＵＮＬＩＮＫ要求６１９を送信する（Ｓ２２００）。次に、Ｉ／Ｏフックモジュール部３００は、Ｉ／Ｏ代行デーモン部４００からＵＮＬＩＮＫ応答６２９を受信し（Ｓ２２１０）、ＶＦＳ関数を用いて対象ファイルを削除して（Ｓ２２２０）、結果をファイルサーバアプリケーション部１４０に返す。
【０１３７】
図２３は、Ｉ／Ｏ代行デーモン部４００のＩ／Ｏ代行実行処理（Ｓ９１０）のひとつである、ファイル削除代行実行処理の詳細を示すフローチャートである。Ｉ／Ｏ代行デーモン部４００は、ＵＮＬＩＮＫ要求６１９を受信した場合（Ｓ２３００）、対象ファイルがファイル管理部４３０において管理されている代行対象ファイルであるかを判定する（Ｓ２３１０）。
【０１３８】
代行対象ファイルである場合（Ｓ２３１０においてＹＥＳ）、Ｉ／Ｏ代行デーモン部４００は、ファイル管理部４３０において管理されている当該ファイルの情報を削除し、共有メモリ管理部４４０において共有メモリ領域にキャッシュされている当該ファイルのデータブロックを無効化する（Ｓ２３２０）。次に、ＵＮＬＩＮＫ応答６２９を送信し（Ｓ２３３０）、Ｉ／Ｏ代行実行処理を終了する。
【０１３９】
代行対象ファイルでない場合（Ｓ２３１０においてＮＯ）、Ｉ／Ｏ代行デーモン部４００は、Ｉ／Ｏフックモジュール部３００に対して、直ちにＵＮＬＩＮＫ応答６２９を送信し（Ｓ２３３０）、Ｉ／Ｏ代行実行処理を終了する。
【０１４０】
以上に説明したように、本発明の第１の実施の形態に係るネットワークファイル共有システムでは、個々のファイルサーバアプリケーション部１４０には、ファイルＩ／Ｏ要求発行をフックするＩ／Ｏフックモジュール部３００に対応する改変を加えるのみで、実際のファイルＩ／Ｏの発行をＩ／Ｏ代行デーモン部４００に代行させることができる。Ｉ／Ｏ代行デーモン部４００は、Ｉ／Ｏフックモジュール部３００から受け取った個々のファイルＩ／Ｏ要求にリトライポリシー５１３およびデッドライン５２３等の制御情報を付加してリアルタイムＩ／Ｏファイルシステム１６０に発行することにより、リアルタイムＩ／Ｏファイルシステム１６０等の新たなファイルシステムが提供する拡張機能の効果を得ることができる。
【０１４１】
従って、本発明によれば、個々のファイルサーバアプリケーションソフトウェアの改変工数を従来技術と比較して少なく抑えて新たなファイルシステムの拡張機能に対応する方式および装置を提供することができる。
【０１４２】
また、本発明は、Ｓａｍｂａに限らず、例えば、ＨＴＴＰＤなど他のＩ／Ｏ特性を認識しないアプリケーションに適用して実施することが出来る。
【実施例２】
【０１４３】
図２４は、本発明の第２の実施の形態に係るネットワークファイル共有システムの構成例を示す。本実施例のＩ／Ｏ代行デーモン部２５００は、Ｉ／Ｏパターン解析部２５１０を備える。Ｉ／Ｏ代行デーモン部２５００は、Ｉ／Ｏパターン解析部２５１０において、代行するファイルＩ／Ｏ要求のＩ／Ｏパターンを解析し、ファイルブロックの先読み等の処理を行う。
【０１４４】
図２５は、Ｉ／Ｏ代行デーモン部２５００の機能モジュール構成を示す。本発明の実施例１のＩ／Ｏ代行デーモン部４００の構成に加えて、Ｉ／Ｏパターン解析部２５１０を備える。Ｉ／Ｏパターン解析部２５１０は、Ｉ／Ｏ履歴管理部２５１２、Ｉ／Ｏパターン検出部２５１１、および、先読みＩ／Ｏ管理部２５１３からなる。
【０１４５】
Ｉ／Ｏ履歴管理部２５１１は、非同期Ｉ／Ｏ管理部４５０において発行される読み込みおよび書き込みのファイルＩ／Ｏ要求の履歴情報を管理する。Ｉ／Ｏ履歴管理部２５１１が管理する履歴情報には、例えば、読み書き種別、要求元ＰＩＤ、対象ＦＩＤ、対象領域オフセットおよびサイズ等がある。
【０１４６】
Ｉ／Ｏパターン検出部２５１２は、Ｉ／Ｏ履歴管理部２５１１において管理される履歴情報を参照し、非同期Ｉ／Ｏ管理部４５０において発行されるＩ／Ｏのパターンを検出する。Ｉ／Ｏパターン検出部２５１２が検出するＩ／Ｏパターンは、例えば、ファイルＩ／Ｏ要求のアクセス対象となるファイルブロックのオフセットが一定サイズ間隔で増加あるいは減少している、および、ファイルブロックのアクセス時間間隔等である。
【０１４７】
従って、本発明の第２の実施の形態に係るネットワークファイル共有システムでは、本発明の第１の実施の形態では対応できない、動的に変化する制御情報（Ｉ／Ｏ特性）についても付加してリアルタイムＩ／Ｏファイルシステム１６０に発行することにより、リアルタイムＩ／Ｏファイルシステム１６０等の新たなファイルシステムが提供する拡張機能の効果を得ることができる。
【符号の説明】
【０１４８】
１００  ファイルサーバ
１１０  クライアント端末
１２０  ネットワーク
１３０  ストレージ装置
１４０  ファイルサーバアプリケーション部
１５０  ＶＦＳ
１６０  リアルタイムＩ／Ｏファイルシステム
２００  ＣＰＵ
２１０  メモリ
２２０  ＮＩＣ
２３０  ＨＢＡ
２４０  プログラム格納領域
２４１  ＯＳプログラム
２４２  ファイルサーバプログラム
２４３  Ｉ／Ｏフックモジュールプログラム
２４４  Ｉ／Ｏ代行デーモンプログラム
３００  Ｉ／Ｏフックモジュール部
３１０  Ｉ／Ｏフック部
３２０  プロセス間通信部
４００  Ｉ／Ｏ代行デーモン部
４１０  プロセス間通信部
４２０  セッション管理部
４３０  ファイル管理部
４４０  共有メモリ管理部
４５０  非同期Ｉ／Ｏ管理部
５００  構成情報
５１０  アプリケーション構成情報
５１１  アプリケーション名
５１２  優先度
５１３  リトライポリシー
５２０  ファイル構成情報
５２１  ファイルパス
５２２  ビットレート
５２３  デッドライン
６００  Ｉ／Ｏ代行通信プロトコル
６１０  ＣＯＮＮＥＣＴ要求
６１１  ＤＩＳＣＯＮＮＥＣＴ要求
６１２  ＯＰＥＮ要求
６１３  ＣＬＯＳＥ要求
６１４  ＲＥＡＤ０要求
６１５  ＲＥＡＤ１要求
６１６  ＷＲＩＴＥ０要求
６１７  ＷＲＩＴＥ１要求
６１８  ＦＴＲＵＮＣＡＴＥ要求
６１９  ＵＮＬＩＮＫ要求
６２０  ＣＯＮＮＥＣＴ応答
６２１  ＤＩＳＣＯＮＮＥＣＴ応答
６２２  ＯＰＥＮ応答
６２３  ＣＬＯＳＥ応答
６２４  ＲＥＡＤ０応答
６２５  ＲＥＡＤ１応答
６２６  ＷＲＩＴＥ０応答
６２７  ＷＲＩＴＥ１応答
６２８  ＦＴＲＵＮＣＡＴＥ応答
６２９  ＵＮＬＩＮＫ応答
２５００  Ｉ／Ｏ代行デーモン部
２５１０  Ｉ／Ｏパターン解析部
２５１１  Ｉ／Ｏパターン検出部
２５１２  Ｉ／Ｏ履歴管理部
２５１３  先読みＩ／Ｏ管理部
【図１】
0005723812.tif 000002
【図２】
0005723812.tif 000003
【図３】
0005723812.tif 000004
【図４】
0005723812.tif 000005
【図５】
0005723812.tif 000006
【図６】
0005723812.tif 000007
【図７】
0005723812.tif 000008
【図８】
0005723812.tif 000009
【図９】
0005723812.tif 000010
【図１０】
0005723812.tif 000011
【図１１】
0005723812.tif 000012
【図１２】
0005723812.tif 000013
【図１３】
0005723812.tif 000014
【図１４】
0005723812.tif 000015
【図１５】
0005723812.tif 000016
【図１６】
0005723812.tif 000017
【図１７】
0005723812.tif 000018
【図１８】
0005723812.tif 000019
【図１９】
0005723812.tif 000020
【図２０】
0005723812.tif 000021
【図２１】
0005723812.tif 000022
【図２２】
0005723812.tif 000023
【図２３】
0005723812.tif 000024
【図２４】
0005723812.tif 000025
【図２５】
0005723812.tif 000026