(57)【要約】      （修正有）【課題】フレームワークを用いてユーザ空間上のファイルシステムを使用する場合、空間間コピーの対象が多くなるため、コピー量を削減してアプリケーションからのファイルアクセスの速度を高速化する。【解決手段】カーネル空間内のデータをユーザ空間にコピーすることなく、ユーザ空間のプロセスから参照させる。ファイルの内容となるデータをカーネル空間内のみで参照させることにより、コピー量を削減してファイルアクセスの高速化を図る。【選択図】図２
2013025538.tif 000002
【特許請求の範囲】
【請求項１】
カーネル空間内の管理データを格納する格納手段と、
前記管理データをユーザ空間から参照する参照手段と、
前記管理データをユーザ空間から更新する更新手段とを備えることを特徴とするファイルシステム。
【請求項２】
カーネル空間内の管理データを格納する格納工程と、
前記管理データをユーザ空間から参照する参照工程と、
前記管理データをユーザ空間から更新する更新工程とを備えることを特徴とするファイルシステムの高速化方法。
【請求項３】
請求項２に記載の方法の各工程をコンピュータにて実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ユーザ空間上でファイルシステムを動作させるフレームワーク上で動作する、ファイルシステムの読み書き速度を高速化する技術に関する。
【背景技術】
【０００２】
通常、ファイルシステムはカーネル空間で動作する。例えば、Linux（登録商標、以下省略）では、ファイルシステムは仮想ファイルシステム（Virtual File System、以下VFS）と連携して動作するため、カーネル空間で動作する。一方、ファイルシステムをユーザ空間で動作させることも可能である。例えば、ファイルシステムをライブラリとして動作させ、ファイルシステムからカーネル空間へのアクセスをデバイスファイルアクセスで行い、カーネル空間内のファイルシステムを使用しないことが可能であった。しかし、この方法は、アプリケーションのファイルシステムアクセスの関数を変更する必要があった。
【０００３】
この変更を行わない方法として、アプリケーションのファイルシステムアクセスの関数は、多くの場合ライブラリ関数なので、ライブラリを変更することでユーザ空間のファイルシステムを使用させる方法もあった（特許文献１参照）。しかしこの方法では、同じライブラリを用いている別のアプリケーションにも、ライブラリの変更の影響が及ぶ、という問題点があった。また、ファイルシステムをユーザ空間で動作させるフレームワークとして、ＦＵＳＥ（Filesystem in USErspace、非特許文献１参照）のような仕組みもある。
【０００４】
図８を参照しながら、ＦＵＳＥについて説明する。ＦＵＳＥは、ＦＵＳＥモジュールとＦＵＳＥライブラリの大きく２つの部分から成る。ＦＵＳＥモジュールはカーネル空間で動作し、ＶＦＳからのファイル操作命令、管理用データ、読み書き対象のデータ等をユーザ空間に送受信する。ＦＵＳＥライブラリは、ユーザ空間で動作し、ＦＵＳＥモジュールから命令とデータを送受信し、ユーザ空間のファイルシステムに伝える。また、ＦＵＳＥライブラリは、ユーザ空間上で動作するファイルシステムと同じプロセスで動作する。このプロセスを、本文では、ＦＵＳＥデーモンと呼称することにする。なお、ＦＵＳＥライブラリはダイナミックリンクでプロセスと結合することも可能であるため、ファイルシステムと同じバイナリ内に含めないことも可能である。
【０００５】
一連の処理フローについて簡単に説明する。アプリケーションは、多くの場合、ライブラリ関数を介してシステムコールを発行し、カーネルにファイルアクセスを通知する。アプリケーションがシステムコールを発行することも可能である。システムコールは、カーネル内で処理され、ＶＦＳでアクセス先のファイルもしくはディスクリプタへのパスを解析され、ＶＦＳ下のモジュールに処理が振り分けられる。ＦＵＳＥ管理下の記録装置にアクセスした場合、ＦＵＳＥモジュールに処理が振り分けられる。ＦＵＳＥモジュールでは、システムコールに応じたファイル操作命令と、アプリケーションのプロセスＩＤやグループＩＤ、またＦＵＳＥモジュールが付与するユニークＩＤ等の管理用データを、構造体にまとめ、ＦＵＳＥライブラリに空間間コピーする。書き込み対象のデータがある場合、その書き込み対象のデータも構造体に含まれる。ＦＵＳＥライブラリでは、コピーされた構造体を解析し、ファイル操作命令に応じたファイルシステムの関数を実行する。書き込み対象のデータがある場合、それもファイルシステムに渡す。ファイルシステムでは、そのファイルシステムに応じた処理を行う。
【０００６】
例えば、図８に示すように、同じ装置内の記録装置に対するファイル操作を行うファイルシステムの場合は、デバイスファイルアクセスをカーネルに対して行い、カーネル内のファイルシステムを用いることなく、記録装置にアクセスし、ファイル操作を行う。図８には示さないが、別途、ＮＦＳのようなネットワークアクセスを伴うファイルシステムや、ＲＡＭ上にファイルを置くファイルシステムも実装可能である。読み込みの場合は、記録装置から読み込み対象のデータをユーザ空間上のファイルシステムに空間間コピーする。その読み込み対象データと管理情報を、ＦＵＳＥライブラリに渡す。ＦＵＳＥライブラリでは、ＦＵＳＥモジュールに渡すための構造体にまとめ、ＦＵＳＥモジュールにコピーする。ＦＵＳＥモジュールは読み込みのシステムコールを発行したアプリケーションに、読み込み対象のデータをコピーして渡す。このようにして、ＦＵＳＥを用いることで、アプリケーションは、カーネル空間内のファイルシステムを用いるときと同様にシステムコールを用いて、ＦＵＳＥを介してユーザ空間のファイルシステムを用いることができる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平７−１３７５１号公報
【非特許文献】
【０００８】
【非特許文献１】インターネット＜URL:http://fuse.sourceforge.net/＞
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、ＦＵＳＥのような仕組みでは、ＶＦＳ管理下のモジュールからユーザ空間上のプロセスへ、つまりカーネル空間からユーザ空間へ、ファイル操作命令、管理用データ、読み書き対象のデータ、といった情報を空間間コピーしていた。また、読み書き対象のデータは、再度、カーネル空間にコピーされることとなる。つまり、ＦＵＳＥのような仕組みを用いて同じ装置上の記録装置にアクセスする場合、用いない場合と比較して、空間間コピーがさらに２回実行されるので、空間間コピーの対象が多く、コピー量が多かった。
【００１０】
そこで、本発明の目的は、空間間コピーの際のコピー量を削減し、アプリケーションからのファイルアクセスの速度を高速化することにある。
【課題を解決するための手段】
【００１１】
本発明のファイルシステムは、カーネル空間内の管理データを格納する格納手段と、前記管理データをユーザ空間から参照する参照手段と、前記管理データをユーザ空間から更新する更新手段とを備えることを特徴とする。
【発明の効果】
【００１２】
本発明によれば、空間間コピーの際のコピー量を削減することで、アプリケーションからのファイルアクセスの速度を高速化することが可能となる。また、本発明によれば、コピーに要するバッファを削減することで、メモリ使用量も削減できる。
【図面の簡単な説明】
【００１３】
【図１】ユーザ空間上で動作するファイルシステムの実行対象のハードウェア構成を示すブロック図である。
【図２】装置で動作する、本発明に関するソフトウェア構成のブロック図である。
【図３】プログラムの初期化部分の一部を示すフローチャートである。
【図４】プログラムの記録装置へのファイル読み書きのアクセスを示すフローチャートである。
【図５】プログラムの記録装置へのファイル読み書きのアクセスを示すフローチャートである。
【図６】プログラムの記録装置へのファイル読み書きのアクセスを示すフローチャートである。
【図７】プログラムの記録装置へのファイル読み書きのアクセスを示すフローチャートである。
【図８】背景技術であるＦＵＳＥの仕組みを説明するためのブロック図である。
【発明を実施するための形態】
【００１４】
以下、本発明を適用した好適な実施形態を、添付図面を参照しながら詳細に説明する。
【００１５】
先ず、本発明の第１の実施形態について説明する。図１は、本発明の第１の実施形態である、ユーザ空間上で動作するファイルシステムの実行対象のハードウェア構成を示すブロック図である。図１において、１０１はＣＰＵであり、プログラムを実行する処理装置である。１０２はＲＡＭであり、ＣＰＵ１０１の実行ワークエリアとして使用される。具体的には、変数データの格納領域、スタック領域、ヒープ領域等として使用される。１０３はＲＯＭであり、ＣＰＵ１０１で実行されるプログラムがＣＰＵ１０１で実行可能な形態にコンパイルされた状態で格納されている。１０４はバスであり、ＣＰＵ１０１、ＲＯＭ１０２、ＲＡＭ１０３、後述の入力インタフェース１０５、出力インタフェース１０６、記録装置１０７を相互接続する。１０５は入力インタフェースであり、キーボード、マウス、ボタンからの入力信号を伝達する。１０６は出力インタフェースであり、ＣＰＵ１０１の実行結果の出力信号を伝達する。１０７は記録装置であり、ファイルシステムの読み書き対象である。例えばＵＳＢメモリ、ＳＤカード、ハードディスクが例として挙げられる。１００は装置であり、ＣＰＵ１０１から記録装置１０７までの要素が格納される。
【００１６】
図２は、コンピュータ等の装置１００で動作する、本実施形態に係るソフトウェア構成のブロック図を示している。２０１はアプリケーションであり、システムコールを介してカーネルにファイルアクセスを依頼する。書き込みの際はアプリケーション２０１からカーネルに、ファイルの内容となる書き込みデータがコピーされ、読み込みの際はカーネルからアプリケーション２０１に、ファイルの内容である読み込みデータがコピーされる。２０２は通信デーモンである。２０３は通信ライブラリであり、後述の通信モジュール２０６とやりとりを行う。通信ライブラリ２０３は、前述のＦＵＳＥライブラリと同様な役割を担う。２０４はファイルシステムであり、ユーザ空間上で動作する。通信ライブラリ２０３とファイルシステム２０４は、通信デーモン２０２のプロセス内で動作する。通信ライブラリ２０３およびファイルシステム２０４のバイナリ自体は、通信デーモン２０２と一体でなくとも構わない。
【００１７】
２０５はＶＦＳである。２０６は通信モジュールであり、前述のＦＵＳＥモジュールと同様な役割を担う。２０７は管理データ用バッファである。管理データとは、ファイル操作命令の種別、アプリケーション２０１のプロセスＩＤやグループＩＤ、通信ライブラリ２０３との通信で用いるユニークＩＤ等、通信モジュール２０６と通信ライブラリ２０３とのやりとりに要するデータである。管理データ用バッファ２０７では、この管理データを格納する。２０８は書き込みデータ用バッファであり、アプリケーション２０１から、ファイルに書き込むデータが渡された場合、それを格納する。２０９は読み込みデータ用バッファであり、アプリケーション２０１からファイルの読み込み命令が実行された場合、記録装置１０７から読み取ったファイルの内容を格納する。なお、２０７、２０８、２０９の各バッファは、通信モジュール２０６の外部であっても、通信モジュール２０６からアクセス可能であれば問題ない。
【００１８】
２１０はデバイスドライバであり、記録装置１０７へのアクセスを処理する。２１１はファイルメタデータ用バッファである。ファイルメタデータとは、記録装置１０７に読み書きする、ファイルの位置情報等の、書き込みデータおよび読み込みデータ以外の記録装置１０７上のファイルに関する情報である。ファイルメタデータ用バッファ２１１には、このファイルメタデータを格納する。２１２は書き込みデータ用バッファ参照テーブルであり、書き込みデータ用バッファ２０８へのポインタを格納する。２１３は読み込みデータ用バッファ参照テーブルであり、読み込みデータ用バッファ２０９へのポインタを格納する。なお、ファイルメタデータ用バッファ２１１、２１２および２１３の各参照テーブルは、デバイスドライバ２１０の外部であっても、デバイスドライバ２１０からアクセス可能であれば問題ない。
【００１９】
以下、図１のハードウェア上で、図２のソフトウェア構成を用いて実行するプログラムを、図３、図４及び図５を用いて説明する。図３は、前記プログラムの初期化部分の一部を示すフローチャートである。図３の中央の列にあるステップＳ３０１、Ｓ３０２、Ｓ３０５、Ｓ３０６、Ｓ３１０、Ｓ３１１は、図２の通信デーモン２０２が実行するステップである。同様にステップＳ３０３、Ｓ３０４は、通信モジュール２０６であり、ステップＳ３０７、Ｓ３０８、Ｓ３０９は、デバイスドライバ２１０で実行するステップである。
【００２０】
ステップＳ３０１より、処理が開始される。ステップＳ３０２において、通信デーモン２０２は、管理データ用バッファをマップする命令を実行する。ここで管理データとは、図２の管理データ用バッファ２０７の説明の際に述べた、通信モジュール２０６と通信ライブラリ２０３のやり取りで用いるデータである。マップする命令はシステムコールによりカーネルに伝達される。システムコールは、例えばmmapやioctlを使用できる。ステップＳ３０３において、通信モジュール２０６は、図２の管理データ用バッファ２０７、書き込みデータ用バッファ２０８、読み込みデータ用バッファ２０９の３つのバッファを確保する。ここで、３つのバッファは、ステップＳ３０２の実行前に確保されていても問題ない。例えば、通信モジュール２０６の初期化開始直後などに確保しても問題ない。ステップＳ３０４において、管理データ用バッファを通信ライブラリ２０３から直接参照可能なようにマップする。例えばLinuxでは、remap_pfn_range関数やnopage関数を使用する。マップ終了後、ステップＳ３０５に遷移し、ステップＳ３０２からの管理データ用バッファマップ命令を終了する。以上の処理で、通信デーモン２０２は、カーネル空間内の管理データ用バッファ２０７の内容を、空間間コピーすることなく参照可能となる。
【００２１】
次にステップＳ３０６において、通信デーモン２０２は、ファイルメタデータ用バッファマップ命令を実行する。ステップＳ３０２の場合と同様に、ステップＳ３０６のマップ命令は、システムコールでカーネルに伝達される。システムコールは、先と同様に、例えばmmapやioctlを使用できる。ステップＳ３０７において、デバイスドライバ２１０は、図２のファイルメタデータ用バッファ２１１を確保する。ここで、ステップＳ３０６の実行前にバッファは確保されていても問題ない。例えば、デバイスドライバ２１０の初期化開始直後などに確保しても問題ない。ステップＳ３０８において、ファイルメタデータ用バッファ２１１をファイルシステム２０４から直接参照可能なようにマップする。ここでステップＳ３０４と同様に、例えばLinuxでは、remap_pfn_range関数やnopage関数を使用する。次にステップＳ３０９において、図２の書き込みデータ用バッファ参照テーブル２１２が書き込みデータ用バッファ２０８を、読み込みデータ用バッファ参照テーブル２１３が読み込みデータ用バッファ２０９をポイントするよう設定する。ステップＳ３１０に遷移し、ステップＳ３０６からのマップ命令を終了する。ステップＳ３１１に遷移し、ステップＳ３０１からの処理を終了する。図２において、ステップＳ３０９の処理を、ステップＳ３０７及びＳ３０８の処理の後に行ったが、ステップＳ３０３の処理、つまり書き込みデータ用バッファ２０８、読み込みデータ用バッファ２０９が確保された後なら、実行順序は特に問わない。
【００２２】
以上の処理で、管理データ及びファイルメタデータは、ユーザ空間から、コピーの必要なく参照することが可能となる。また、書き込みデータ及び読み込みデータを、カーネル空間内で、通信モジュール２０６とデバイスドライバ２１０で共有することが可能となる。
図４及び図５は、前記プログラムの記録装置１０７へのファイル読み書きのアクセスを高速化する高速化方法を示すフローチャートである。記載スペースの都合上、１つのフローを図４と図５に分割する。
【００２３】
ステップＳ４０１より、処理が開始される。ステップＳ４０２において、アプリケーション２０１よりシステムコールが実行される。ステップＳ４０３において、ＶＦＳ２０５はシステムコール実行時に指定されたパスより、ＶＦＳ管理下のモジュールに処理を振り分ける。ここでは通信モジュール２０６の処理が実行される。ステップＳ４０４において、通信モジュール２０６は管理データ用バッファ２０７に管理データを作成する。ステップＳ４０５において、アプリケーション２０１からのシステムコールに書き込みデータがあるか判定する。ある場合、ＹＥＳとなりステップＳ４０６に遷移し、ない場合、ＮＯとなりステップＳ４０７に遷移する。ステップＳ４０６において、通信モジュール２０６は、アプリケーション２０１のプロセス空間から書き込みデータ用バッファ２０８に、書き込みデータを空間間コピーする。コピー終了後、ステップＳ４０７に遷移する。ステップＳ４０７において、通信モジュール２０６は、通信デーモン２０２に、通知準備が完了した旨を通知する。ここで通知の方法は特に問わない。ＦＵＳＥで行っているように、ＦＵＳＥデーモンの読み込み処理ルーチンに通知の旨を記載し、スリープ処理を起床させてもよい。ステップＳ４０８において、通信デーモン２０２は通信ライブラリ２０３の関数を実行し、管理データ用バッファ２０７を参照し、通信モジュール２０６がステップＳ４０４で準備した管理データをコピーすることなく参照する。その後、参照した管理データに基づき、ファイルシステム２０４の関数を実行する。
【００２４】
ステップＳ４０９において、ファイルシステムの関数内で、デバイスファイルアクセスの箇所でread処理かそうでない（write処理）かを判定する。ここでread、writeは、記録装置１０７に読み込みか書き込みかの処理をすることを指す。例えば、ファイルの読み込み時、アクセス時間を更新する処理の場合は、ファイルメタデータのアクセス時間の箇所を書き込むことになるので、write処理となる。read処理の場合はＹＥＳとなり、ステップＳ４１４に遷移する。write処理の場合はＮＯとなり、ステップＳ４１０に遷移する。ステップＳ４１０において、ファイルシステム２０４は、ファイルメタデータ用バッファ２１１にあるファイルメタデータを参照する。
【００２５】
なお、ファイルメタデータ用バッファ２１１へのファイルメタデータの書き込みは、後述のステップＳ４１４にて実施される。ステップＳ４１１において、ファイルシステム２０４は、ステップＳ４１０で参照したファイルメタデータと、ファイルシステム２０４内の計算より新たなファイルメタデータの更新部分を生成し、ファイルメタデータ用バッファ２１１のファイルメタデータを更新する。デバイスドライバ２１０は、ファイルメタデータ用バッファ２１１内のファイルメタデータを記録装置１０７に書き込む。ステップＳ４１２において、デバイスドライバ２１０は、書き込みデータ用バッファ参照テーブル２１２を介して書き込みデータ用バッファ２０８に書き込みデータがあるか判定する。書き込みデータがある場合、ＹＥＳとなり、ステップＳ４１３に遷移し、ない場合、ＮＯとなりステップＳ４１７に遷移する。
【００２６】
ステップＳ４１３において、デバイスドライバ２１０は、書き込みデータ用バッファ参照テーブル２１２を介して書き込みデータ用バッファ２０８内の書き込みデータにアクセスし、書き込みデータを記録装置１０７に書き込む。書き込み後、ステップＳ４１７に遷移する。なお、本実施形態では先にステップＳ４１１においてファイルメタデータの書き込みを、後にステップＳ４１２とＳ４１３において書き込みデータの書き込みを行ったが、順序は逆でも問題ない。ステップＳ４１４において、デバイスドライバ２１０は、記録装置１０７からファイルメタデータを読み込み、ファイルメタデータ用バッファ２１１に書き込み、ファイルシステム２０４はファイルメタデータ用バッファ２１１内のファイルメタデータを参照する。ステップＳ４１５において、記録装置１０７内のファイルの内容である、読み込みデータを読み出す処理かどうか判定する。読み込みデータを読み出す処理の場合、ＹＥＳとなり、ステップＳ４１６に遷移し、読み込みデータがない場合、ＮＯとなり、ステップＳ４１７に遷移する。
【００２７】
ステップＳ４１７において、ファイルシステム２０４内の関数実行が終了したか判定する。例えば１つの関数内に、readもしくはwriteのデバイスファイルアクセスを複数実施する場合がある場合、処理の繰り返しをここで判定する。まだreadもしくはwriteを要する処理が残存している場合、ＮＯとなり、ステップＳ４０９に遷移する。残存していない場合、ＹＥＳとなり、ステップＳ４１８に遷移する。ステップＳ４１８において、図５のステップＳ５０１に遷移する。
【００２８】
図５のステップＳ５０１は、図４のステップＳ４１８からのフローの続きである。ステップＳ５０２において、通信デーモン２０２内の通信ライブラリ２０３は、管理データ用バッファ２０７内の管理データを更新する。ステップＳ５０３において、通信ライブラリ２０３は、管理データの更新を通信モジュール２０６に通知する。ここで通知方法は特に問わない。ステップＳ５０４において、通知を受信した通信モジュール２０６は、読み込みデータ用バッファ２０９に、ファイルの内容である読み込みデータがあるか判定する。ある場合、ＹＥＳとなり、ステップＳ５０５に遷移し、ない場合、ＮＯとなり、ステップＳ５０６に遷移する。ステップＳ５０５において、読み込みデータ用バッファ２０９からアプリケーション２０１に、読み込みデータを空間間コピーする。コピー終了後、ステップＳ５０６に遷移する。ステップＳ５０６において、通信モジュール２０６は、アプリケーション２０１が図４のステップＳ４０２において実行したシステムコールの結果を作成し、それをアプリケーション２０１にコピーする。ステップＳ５０７において、アプリケーション２０１にシステムコールの結果が戻り、システムコールの実行は終了となる。ステップＳ５０８に遷移し、一連の処理は終了となる。
【００２９】
以上説明した方法で、通信モジュールと通信デーモン、通信デーモンとデバイスドライバ間で行われていた、ユーザ空間とカーネル空間間のコピー量は削減される。
【００３０】
ところで、本実施形態においては、管理データ、ファイルメタデータ、ファイルの内容である書き込みデータ、読み込みデータの全てを、ユーザ空間とカーネル空間間でコピーしないようにした。しかし、一部だけを従来のようにコピーするようにしても本発明を適用できる。
【００３１】
次に、本発明の第２の実施形態について説明する。第２の実施形態では、アプリケーション２０１から複数の読み書き、または、アプリケーション２０１が複数あり複数の読み書きが発生する場合に対処する方法として、ＩＤで管理する方法を説明する。また同時に、書き込みデータ用バッファ２０８、読み込みデータ用バッファ２０９に格納したデータの管理についても補足する。
【００３２】
第２の実施形態について、図２、図６、図７を参照しながら説明する。図６は、図４を改変したものであり、図７は図５を改変したものであり、太線で囲んだステップが、元の図面と異なる。太線で囲った箇所以外は、元と同じ処理となる。例えば、図４のステップＳ４０２と図６のステップＳ６０２とは同じ処理である。本実施形態では、上記の太線で囲った、改変された箇所のみ説明する。
【００３３】
図６のステップＳ６０４において、管理データを管理データ用バッファ２０７に作成する際、ＩＤも作成する。このＩＤは一意なものである。例えばプロセスＩＤ等は、同一プロセスからの複数アクセスを区別不可能となるため、本ＩＤとして用いてはならない。
【００３４】
ステップＳ６０６において、アプリケーション２０１の書き込みデータを、書き込み用データバッファ２０８にコピーする際、そのコピーされたデータに対し、ステップＳ６０４で作成されたＩＤを付与する。また、マークを作成する。このマークは、書き込み用データバッファ２０８にある書き込みデータが、記録装置１０７に書き込まれていないことを示す。マークを作成する処理は、例えば、特定にビットを立てる処理でも問題ない。
【００３５】
ステップＳ６０８において、通信デーモン２０２内の通信ライブラリ２０３がファイルシステム２０４の関数を実行する際、管理データ用バッファ２０７を参照した際に得たＩＤも渡す。このＩＤは、ステップＳ６０４にて作成されたものである。渡し方は、例えば、関数の引数として渡してもよいし、通信デーモン２０２上に通信ライブラリ２０３とファイルシステム２０４がアクセスできる配列等を用意して渡してもよい。
【００３６】
ステップＳ６１１において、ファイルメタデータを更新する際、ファイルシステム２０４はＩＤもファイルメタデータ用バッファ２１１に書き込む。なお、ＩＤは記録装置には書き込まない。
【００３７】
ステップＳ６１２において、書き込みデータを比較する際、ステップＳ６１１にてファイルメタデータ用バッファ２１１に書き込まれたＩＤと書き込みデータ用バッファ参照テーブル２１２からポイントされた書き込みデータ用バッファ２０８内のＩＤとを比較する。そして書き込みデータ用バッファ２０８内のどの書き込みデータが、記録装置１０７への書き込み対象か決定する。ここで、ファイルメタデータ用バッファ２１１のＩＤは固定である。
【００３８】
ステップＳ６１３において、書き込みデータ用バッファ２０８内の書き込みデータを記録装置１０７に書き込む。その際、ステップＳ６０６において作成されたマークを消去する。ステップＳ６１４において、ファイルメタデータを参照する際、ＩＤをファイルメタデータ用バッファ２１１内で付与する。このＩＤは、ステップＳ６０８においてファイルシステム２０４が通信ライブラリ２０３から渡されたものである。
【００３９】
ステップＳ６１６において、読み込みデータを格納した読み込みデータ用バッファ２０９に、ＩＤを付与し、マークを作成する。このＩＤは、ステップＳ６１４においてファイルメタデータ用バッファ２１１に付与されたものである。またマークは、ステップＳ６０６と同様に、ビットを立てる処理でもよい。
【００４０】
次に、図７のステップＳ７０４において、読み込みデータを比較する際、図６のステップＳ６１６にて読み込みデータ用バッファ２０９に書き込まれたＩＤと、管理データ用バッファ２０７内のＩＤを比較する。そして、読み込みデータ用バッファ２０９内のどの読み込みデータが、アプリケーション２０１への読み込み対象か決定する。ここで、管理データ用バッファ２０７内のＩＤは固定である。
【００４１】
ステップＳ７０５において、読み込みデータ用バッファ２０９内の読み込みデータをアプリケーション２０１にコピーする。その際、図６のステップＳ６１６において作成されたマークを消去する。以上説明した、ＩＤを用いる方法で、複数の読み書きに対応できる。また、マークを作成、削除することで、書き込みデータ用バッファ２０８内の書き込みデータ、読み込みデータ用バッファ２０９内の読み込みデータを削除するタイミングの決定が容易になる。
【００４２】
ところで、本実施形態では、ＩＤを用いる方法、マークを作成、削除する方法を記したが、それぞれの役割は独立しているため、別々に実施されても、それぞれの効果に変化はない。
【００４３】
第１、第２の実施形態では、書き込みデータ用バッファ２０８、読み込みデータ用バッファ２０９を通信モジュール２０６内に配置したが、通信モジュール２０６およびデバイスドライバ２１０から参照可能なカーネル内であれば、配置場所は特に問わない。デバイスドライバ２１０に両バッファが配置される場合、そのバッファを参照するバッファ参照テーブルは、通信モジュール２０６に配置される。また、両バッファが通信モジュール２０６、デバイスドライバ２１０の外に配置される場合、バッファ参照テーブルは通信モジュール２０６、デバイスドライバ２１０の両方に配置される。
【００４４】
さらに、管理データ用バッファ２０７、書き込みデータ用バッファ２０８、読み込みデータ用バッファ２０９は、ページ機構の一部として確保してもよいし、専用のメモリ領域（例えば他の用途に使用しない、予約領域）に確保してもよい。また、実施例２において、マークを作成、削除したが、このマークは、ページ機構使用時は、ページのダーティビットでもよい。
【００４５】
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【符号の説明】
【００４６】
１００：装置、１０１：ＣＰＵ、１０２：ＲＡＭ、１０３：ＲＯＭ、１０４：バス、１０５：入力インタフェース、１０６：出力インタフェース、１０７：記録装置、２０１：アプリケーション、２０２：通信デーモン、２０３：通信ライブラリ、２０４：ファイルシステム、２０５：ＶＦＳ、２０６：通信モジュール、２０７：管理データ用バッファ、２０８：書き込みデータ用バッファ、２０９：読み込みデータ用バッファ、２１０：デバイスドライバ、２１１：ファイルメタデータ用バッファ、２１２：書き込みデータ用バッファ参照テーブル、２１３：読み込みデータ用バッファ参照テーブル
【図１】
2013025538.tif 000003
【図２】
2013025538.tif 000004
【図３】
2013025538.tif 000005
【図４】
2013025538.tif 000006
【図５】
2013025538.tif 000007
【図６】
2013025538.tif 000008
【図７】
2013025538.tif 000009
【図８】
2013025538.tif 000010