(57)【特許請求の範囲】
【請求項１】
ストレージ部と、アプリケーション及びファイルシステムを格納するメモリと、を備え、
前記アプリケーションが、システムコール命令を発行して前記ファイルシステムを呼び出すＩ／Ｏ命令発行手段を備え、
かつ、前記ファイルシステムが、前記Ｉ／Ｏ命令の発行に基づきデータを更新し、更新データを前記ストレージ部に格納する手段及び前記更新データの格納後にシステムコールリターン命令による前記アプリケーションへのリターン手段を備えたデータ更新履歴格納装置において、
前記更新データを一時的に格納するバッファプールと、
前記バッファプールに格納される更新データのバッファアドレスにアクセスする権限を前記バッファアドレスごとに設定するページ管理部と、
前記更新データを格納するバッファプールの前記バッファアドレスと、前記更新データを格納するデータ領域のアドレスとの対応を管理するアドレス管理部と、
前記メモリに格納される前記アプリケーションからＩ／Ｏ命令を発行し、前記バッファプールに格納されている任意の更新データを、前記バッファプールのバッファアドレスと対応する任意のアドレスのデータ領域に格納しようとする際、前記ページ管理部内の任意の更新データに設定された任意のアクセス権限をリードアクセスのみ可能に変更するＩ／Ｏ命令捕捉手段と、
前記任意のアクセス権限をリードアクセスのみ可能に変更すると、ページ例外通知を発行し、前記アドレス管理部内で前記任意の更新データを格納する前記バッファアドレスから前記データ領域のアドレスを取得して、前記更新データと前記更新データの更新履歴と、を更新キューに格納するページ例外捕捉手段と、を有する
ことを特徴とするデータ更新履歴格納装置。
【請求項２】
前記更新キューに格納される前記更新データの更新履歴をログ領域に格納し、前記ログ領域に格納した前記更新データの更新履歴に基づいて前記更新データを前記データ領域に格納するログ書き込み手段をさらに有する
ことを特徴とする請求項１に記載のデータ更新履歴格納装置。
【請求項３】
前記メモリに格納される前記アプリケーションからシステムコールリターン命令を発行し、前記バッファプールに格納される更新データの終了を示すコミットエントリを前記更新キューに格納するシステムコールリターン捕捉手段をさらに有する
ことを特徴とする請求項２に記載のデータ更新履歴格納装置。
【請求項４】
前記更新キューに前記コミットエントリが格納され、当該コミットエントリが前記ログ領域に格納されると、前記更新データを前記データ領域に格納する
ことを特徴とする請求項３に記載のデータ更新履歴格納装置。
【請求項５】
前記ログ領域に格納される全ての更新履歴からコミットエントリを検出し、先頭エントリからコミットエントリまでの更新履歴に基づいて、更新データと当該更新データを格納するデータ領域のアドレスを検出し、前記ログ領域にある更新データを前記データ領域のアドレスに格納するデータ復旧手段をさらに有する
ことを特徴とする請求項４に記載のデータ更新履歴格納装置。
【請求項６】
ストレージ部と、アプリケーション及びファイルシステムを格納するメモリと、を備え、
前記アプリケーションが、システムコール命令を発行して前記ファイルシステムを呼び出すＩ／Ｏ命令発行手段を備え、
かつ、前記ファイルシステムが、前記Ｉ／Ｏ命令の発行に基づきデータを更新し、更新データを前記ストレージ部に格納する手段及び前記更新データの格納後にシステムコールリターン命令による前記アプリケーションへのリターン手段を備えたデータ更新履歴格納装置のデータ更新履歴格納方法において、
前記更新データをバッファプールに一時的に格納するステップと、
前記バッファプールに格納される更新データのバッファアドレスにアクセスする権限を前記バッファアドレスごとに設定するページ管理ステップと、
前記更新データを格納するバッファプールの前記バッファアドレスと、前記更新データを格納するデータ領域のアドレスとの対応を管理するアドレス管理ステップと、
前記メモリに格納される前記アプリケーションからＩ／Ｏ命令を発行し、前記バッファプールに格納されている任意の更新データを、前記バッファプールのバッファアドレスと対応する任意のアドレスのデータ領域に格納しようとする際、前記ページ管理部内の任意の更新データに設定された任意のアクセス権限をリードアクセスのみ可能に変更するＩ／Ｏ命令捕捉ステップと、
前記任意のアクセス権限をリードアクセスのみ可能に変更すると、ページ例外通知を発行し、前記アドレス管理部内で前記任意の更新データを格納する前記バッファアドレスから前記データ領域のアドレスを取得して、前記更新データと前記更新データの更新履歴と、を更新キューに格納するページ例外捕捉ステップと、を有する
ことを特徴とするデータ更新履歴格納方法。
【請求項７】
前記更新キューに格納される前記更新データの更新履歴をログ領域に格納し、前記ログ領域に格納した前記更新データの更新履歴に基づいて前記更新データを前記データ領域に格納するログ書き込みステップをさらに有する
ことを特徴とする請求項６に記載のデータ更新履歴格納方法。
【請求項８】
前記メモリに格納される前記アプリケーションからシステムコールリターン命令を発行し、前記バッファプールに格納される更新データの終了を示すコミットエントリを前記更新キューに格納するシステムコールリターン捕捉ステップをさらに有する
ことを特徴とする請求項７に記載のデータ更新履歴格納方法。
【請求項９】
前記更新キューに前記コミットエントリが格納され、当該コミットエントリが前記ログ領域に格納されると、前記更新データを前記データ領域に格納する
ことを特徴とする請求項８に記載のデータ更新履歴格納方法。
【請求項１０】
前記ログ領域に格納される全ての更新履歴からコミットエントリを検出し、先頭エントリからコミットエントリまでの更新履歴に基づいて、更新データと当該更新データを格納するデータ領域のアドレスを検出し、前記ログ領域にある更新データを前記データ領域のアドレスに格納するデータ復旧ステップをさらに有する
ことを特徴とする請求項９に記載のデータ更新履歴格納方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ更新履歴を格納する装置、特に、ファイルシステムの指示により行うデータ更新の履歴を格納する仮想計算機モニタを備えたストレージ装置に関する。
【背景技術】
【０００２】
従来、既存のファイルシステムの指示に基づいてデータ更新の履歴を格納するデータ更新履歴格納装置の方法としては、非特許文献１に記載されている方法が知られている。
【０００３】
図１３は、非特許文献１に記載されたデータ更新履歴格納装置１３００の方法の概要である。従来の方法では、ファイルシステム１０２´´に含まれるファイル手段（ファイル生成手段、ファイル削除手段、ファイル追記手段などを含む）１１１´´が、主メモリ上のページ領域内に格納されるバッファデータを更新することでデータ更新処理が開始する。なお、ページ領域とはバッファプール１２１´´の格納領域を分割した領域をいう。また、バッファデータとは最終的にはデータ領域内に保存されるデータであって、バッファプール１２１´´に一時的に格納されるデータをいう。
【０００４】
そして、ファイルシステム１０２´´に含まれるファイル手段１１１´´が、ページの更新の宣言やトランザクションのコミットを宣言することで、ジャーナリングライブラリ２０１に含まれるページ更新登録手段２１１やトランザクション制御手段２１２に対して関数呼び出しを発行し、ストレージ部１０５´´内のデータ更新を開始する。
【０００５】
ジャーナリングライブラリ２０１はページ更新登録手段２１１、トランザクション制御手段２１２、ログ領域書き込み手段１１５´´を備える。
【０００６】
ページ更新登録手段２１１は、バッファプール１２１´´内のバッファデータの更新宣言をファイル手段１１１´´から受け付けると、更新すべきデータ領域１２６´´内のブロック番号（図中、blknoと表記）と、バッファプール１２１´´内のバッファデータを更新した更新データ（図中、dataと表記）と、を更新キュー１２５´´に登録する。
【０００７】
また、トランザクション制御手段２１２は、ファイルシステム１０２´´が行ったバッファプール１２１´´のバッファデータの更新トランザクションのコミット宣言を受け付けると、トランザクションの終了時を確定するコミットエントリ（図中、commitと表記）を更新キュー１２５´´に登録する。
【０００８】
ログ領域書き込み手段１１５´´は、更新キュー１２５´´に登録した一連の更新履歴１２５´´Ａ…１２５´´Ｎをストレージ部１０５´´内のログ領域１２７´´に格納する。ストレージ部１０５´´はログ領域１２７´´に格納された更新履歴１２５´´Ａのうち更新データを、データ領域１２６´´内の該当するブロック番号にコピーして、データ領域１２６´´内のデータを更新する。
【０００９】
このようなデータ更新処理を行うことで、ストレージ部１０５´´のデータ領域１２６´´には、常にファイルシステム１０２´´が行ったデータ更新が順番に反映される。また、上記のように、ログ領域１２７´´内に保存される更新データをデータ領域１２６´´にコピー中に、万一ファイルシステム１０２´´やジャーナリングライブラリ２０１がクラッシュしても、更新履歴１２５´´Ａがログ領域１２７´´に残っているため、データ領域１２６´´内のデータを容易に修復できる。
【非特許文献１】Andy Hisgen, et. al., “New-Value Logging in the Echo Replicated File System”, Research Report 104, Systems Research Center, Digital Equipment Corporation.
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら、更新履歴をストレージのログ領域に格納するためには、既存のファイルシステムのファイル手段が、ページ更新宣言やトランザクションのコミット宣言を行うための関数を呼び出す必要があった。その結果、既存のファイルシステムのソースコードを改変しなければならず、開発コストが大きくなるという課題があった。
【００１１】
本発明では、既存のファイルシステムのソースコードを改変することなく、既存のファイルシステムの指示により更新履歴を格納し、かつ、データの更新を行えるデータ更新履歴格納装置及びデータ更新履歴格納方法を提案する。
【課題を解決するための手段】
【００１２】
上記課題の解決を行うために、本発明は、ストレージ部と、アプリケーション及びファイルシステムを格納するメモリと、を備え、前記アプリケーションが、システムコール命令を発行して前記ファイルシステムを呼び出すＩ／Ｏ命令発行手段を備え、かつ、前記ファイルシステムが、前記Ｉ／Ｏ命令の発行に基づきデータを更新し、更新データを前記ストレージ部に格納する手段及び前記更新データの格納後にシステムコールリターン命令による前記アプリケーションへのリターン手段を備えたデータ更新履歴格納装置において、前記更新データを一時的に格納するバッファプールと、前記バッファプールに格納される更新データのバッファアドレスにアクセスする権限を前記バッファアドレスごとに設定するページ管理部と、前記更新データを格納するバッファプールの前記バッファアドレスと、前記更新データを格納するデータ領域のアドレスとの対応を管理するアドレス管理部と、前記メモリに格納される前記アプリケーションからＩ／Ｏ命令を発行し、前記バッファプールに格納されている任意の更新データを、前記バッファプールのバッファアドレスと対応する任意のアドレスのデータ領域に格納しようとする際、前記ページ管理部内の任意の更新データに設定された任意のアクセス権限をリードアクセスのみ可能に変更するＩ／Ｏ命令捕捉手段と、前記任意のアクセス権限をリードアクセスのみ可能に変更すると、ページ例外通知を発行し、前記アドレス管理部内で前記任意の更新データを格納する前記バッファアドレスから前記データ領域のアドレスを取得して、前記更新データと前記更新データの更新履歴と、を更新キューに格納するページ例外捕捉手段と、を有することを特徴とする。
【００１３】
この結果、バッファプールに更新データが格納すると、データ更新履歴格納装置内のプログラムに基づいて、既存のファイルシステムのソースコードを改変することなく、データ領域に更新データが格納される。
【００１４】
また、ストレージ部と、アプリケーション及びファイルシステムを格納するメモリと、を備え、前記アプリケーションが、システムコール命令を発行して前記ファイルシステムを呼び出すＩ／Ｏ命令発行手段を備え、かつ、前記ファイルシステムが、前記Ｉ／Ｏ命令の発行に基づきデータを更新し、更新データを前記ストレージ部に格納する手段及び前記更新データの格納後にシステムコールリターン命令による前記アプリケーションへのリターン手段を備えたデータ更新履歴格納装置のデータ更新履歴格納方法において、前記更新データをバッファプールに一時的に格納するステップと、前記バッファプールに格納される更新データのバッファアドレスにアクセスする権限を前記バッファアドレスごとに設定するページ管理ステップと、前記更新データを格納するバッファプールの前記バッファアドレスと、前記更新データを格納するデータ領域のアドレスとの対応を管理するアドレス管理ステップと、前記メモリに格納される前記アプリケーションからＩ／Ｏ命令を発行し、前記バッファプールに格納されている任意の更新データを、前記バッファプールのバッファアドレスと対応する任意のアドレスのデータ領域に格納しようとする際、前記ページ管理部内の任意の更新データに設定された任意のアクセス権限をリードアクセスのみ可能に変更するＩ／Ｏ命令捕捉ステップと、前記任意のアクセス権限をリードアクセスのみ可能に変更すると、ページ例外通知を発行し、前記アドレス管理部内で前記任意の更新データを格納する前記バッファアドレスから前記データ領域のアドレスを取得して、前記更新データと前記更新データの更新履歴と、を更新キューに格納するページ例外捕捉ステップと、を有することを特徴とする。
【００１５】
この結果、バッファプールに更新データが格納すると、データ更新履歴格納装置内のプログラムに基づいて、既存のファイルシステムのソースコードを改変することなく、データ領域に更新データが格納される。
【００１６】
データ更新履歴格納装置の概要は、次に説明する。
【００１７】
データ更新履歴格納装置は、ＮＡＳヘッド部とストレージ部とから構成される。ＮＡＳヘッド部には、メモリとＣＰＵとＨＢＡが搭載されている。
【００１８】
ＣＰＵは、メモリ上に配置されたプログラム（ファイルシステムなど）に基づいて発行されるＩ／Ｏ命令及びシステムコールリターン命令を、メモリ上に配置された他プログラム（ＶＭモニタなど）に通知する機能を有する。
【００１９】
さらに、ＣＰＵは、メモリ上に存在するページテーブルを検査し、メモリ上に配置されたプログラム（ファイルシステムなど）からメモリ上のバッファへのアクセスが行われた際に、アクセスされたバッファアドレスとページ例外発生をメモリ上に配置された他プログラム（ＶＭモニタなど）に通知する機能を有する。
【００２０】
ＨＢＡは、メモリ上に存在するディスクリプタを参照して、ディスクリプタでアドレスが指定されたバッファのデータをストレージに転送する機能を有する。
【００２１】
また、メモリ上に存在するプログラム（ファイルシステムなど）は、メモリ上に存在するバッファアドレスと当該バッファのデータが格納されるべきストレージのブロック番号の対応を管理する管理テーブル（アドレス管理部）を保持している。
【００２２】
他プログラム（ＶＭモニタなど）は、メモリ上に配置されたプログラム（ファイルシステムなど）から、Ｉ／Ｏ命令を発行するとＮＡＳヘッド部のＣＰＵから当該命令発行の通知を受けて起動し、メモリ上に存在するディスクリプタを参照することで当該Ｉ／Ｏ命令のデータ転送元となるバッファアドレスを取得する。さらに、他プログラム（ＶＭモニタなど）は、以降のメモリ上に配置されたプログラム（ファイルシステムなど）によるバッファ更新時にページ例外を発生させるようにメモリ上に存在するページテーブル（ページ管理部）を更新する手段を有する。
【００２３】
上記ページテーブル更新の後に、ＣＰＵがメモリ上に配置されたバッファプールのデータを更新した際に、他プログラム（ＶＭモニタなど）はＣＰＵからページ例外発生の通知を受け起動し、メモリ上に存在するプログラム（ファイルシステムなど）が管理する管理テーブルを参照して、当該バッファデータを格納するバッファアドレスに対応するストレージのブロック番号を取得する。さらに、他プログラム（ＶＭモニタなど）は、当該バッファアドレスに格納されている更新データとブロック番号の組をキューに登録する手段を有する。
【００２４】
メモリ上に配置されたプログラム（ファイルシステムなど）に基づいてシステムコールリターン命令が発行されると、他プログラム（ＶＭモニタなど）はＣＰＵから当該命令発行の通知を受けて起動し、コミットエントリをキューに登録する手段を有する。
【００２５】
他プログラム（ＶＭモニタなど）は、登録されたキューエントリをストレージに転送する手段を有する。
【発明の効果】
【００２６】
本発明は、既存のファイルシステムのソースコードを改変することなく、既存のファイルシステムの指示により更新履歴を格納し、かつ、データの更新を行うことができる。
【発明を実施するための最良の形態】
【００２７】
（１）第１の実施の形態
（１−１）データ更新履歴格納装置の構成
本発明の第１の実施の形態を図１から図９を用いて示す。
【００２８】
まず、第１の実施の形態で前提とするハードウェア構成を図１に示す。
【００２９】
１００は、本実施の形態のデータ更新履歴格納装置を示す。データ更新履歴格納装置１００は、ＮＡＳ（Network Attached Storage）ヘッド部３０１とストレージ部１０５からなる。ＮＡＳヘッド部３０１はＣＰＵ（Central Processing Unit）３１１及びメモリ３１２を含む。
【００３０】
ＣＰＵ３１１は、プログラム実行手段３２３、ページアクセス検査手段３２４、及び、実行検査手段３２５を備える。また、メモリ３１２には、プログラム格納領域３２１とデータ格納領域３２２とが存在する。
【００３１】
プログラム格納領域３２１には、基本ソフトウェア上で動作し特定の目的を果たすための機能を提供するアプリケーション１０１、ストレージ部１０５に記録されるデータを管理するファイルシステム１０２、データ更新履歴格納装置１００内でデータを更新するためのＶＭモニタ１０３、及び後述するキャッシュ構造体１２２を制御するためのキャッシュ構造体スヌープドライバ１０６が格納されている。
【００３２】
そして、データ格納領域３２２には、ファイルシステム１０２の指示により更新データを格納するバッファプール１２１、キャッシュ構造体１２２、ディスクリプタ１２３、ページテーブル１２４、更新キュー１２５、ハンドラテーブル１２８、及び、ページ例外アドレス１２９が格納されている。
【００３３】
キャッシュ構造体１２２は、更新データを格納するデータ領域のブロック番号と、更新データが格納されたバッファアドレスと、の情報を格納する。
【００３４】
ディスクリプタ１２３は、キャッシュ構造体１２２と同様、更新データを格納するデータ領域のブロック番号と、更新データが格納されたバッファアドレスと、の情報を格納する。
【００３５】
ページテーブル１２４は、図２に示すように、バッファプール１２１の領域を分割したページ領域の番号欄１２４Ａと、当該ページ領域に格納される更新データに対するアクセス権限欄１２４Ｂから構成される。ページ領域の番号１２４Ａは、バッファアドレスである。例えば、ページ領域「０」番は、リードアクセスのときのみ「０」番に格納される更新データを読み出すことができるが、ライトアクセスのときには「０」番には更新データを書き込むことはできない。この場合には、後述するページ例外通知がページアクセス検査手段３２４から発行され、このとき「０」番のアドレスがページ例外アドレス１２９として登録されることになる。
【００３６】
更新キュー１２５には、バッファプールに格納された更新データ、当該更新データを格納するデータ領域のブロック番号、及び、更新データ群の終了を確定するためのコミットエントリ、の更新履歴が格納される。
【００３７】
ハンドラテーブル１２８は、図３に示すように、ＣＰＵ３１１のページアクセス検査手段３２４及び実行検査手段３２５から発行されるイベント名欄１２８Ａと、当該イベント名に基づいて、ＶＭモニタ１０３内に作成した各種プログラム手段を実行するジャンプ先アドレス欄１２８Ｂと、から構成される。
【００３８】
例えば、「syscallリターン」というイベント名が実行検査手段３２５から発行された場合には、ＶＭモニタ１０３内のシステムコール捕捉手段１１４にジャンプして、ＣＰＵ３１１がシステムコール捕捉手段１１４に基づくプログラムを実行する。また、「Ｉ／Ｏ命令」というイベント名が実行検査手段３２５から発行された場合には、ＶＭモニタ１０３内のＩ／Ｏ要求捕捉手段１１２にジャンプして、ＣＰＵ３１１がＩ／Ｏ要求捕捉手段１１２に基づくプログラムを実行する。さらに、「ページ例外通知」というイベント名がページアクセス手段３２４から発行された場合には、ＶＭモニタ１０３内のページ例外捉手段１１３にジャンプして、ＣＰＵ３１１がページ例外捕捉手段１１３に基づくプログラムを実行する。
【００３９】
ページ例外アドレス１２９とは、ページアクセス検査手段３２４が、任意のページ領域に予め設定されたアクセス権限以外のアクセスをした場合の任意のページアドレスをいう。このとき、後述するページ例外通知がページアクセス検査手段３２４から発行され、このアクセス拒否されたページ領域内のアドレスがページ例外アドレスとして登録される。
【００４０】
ＣＰＵ３１１が、プログラム格納領域３２１に存在するプログラム（ファイルシステム等）を読み込むと、プログラム実行手段３２３が読み込んだプログラムを実行する。プログラム実行手段３２３は、プログラムの実行過程にて、メモリ３１１内のデータ格納領域３２２に対してデータアクセス要求を行う。そうすると、ページアクセス検査手段３２４が、メモリ３１１のデータ格納領域３２２内のページ領域にアクセスする。この際、ページアクセス検査手段３２４は、後述するページテーブル１２４を参照して、アクセスしたページ領域のアクセス権限を確認することで、プログラム格納領域３２１に格納されているプログラムにページ例外を通知する。また、この例外通知と同時に、ページ例外発生アドレス（プログラム実行手段３２３がアクセスしようとしたアドレス）をプログラムに通知することもできる。また、ＣＰＵ３１１の実行検査手段３２５は、プログラム実行手段３２３が実行するＩ／Ｏ命令やシステムコールリターン命令を捕捉し、これら命令はプログラム実行手段３２３が発行したことを、プログラム格納領域３２１に格納されているプログラムに通知することもできる。
【００４１】
ＮＡＳヘッド部３０１にはＨＢＡ（Host Bus Adapter）１０４が接続している。プログラム実行手段３２３は、データ格納領域３２２に存在するディスクリプタ１２３に、データ転送元となるデータ領域のアドレスと、当該データの格納先となるストレージ部１０５のブロック番号を設定すると、その後、ＨＢＡ１０４に対して、プログラムから指示されたＩ／Ｏ命令を発行する。ＨＢＡ１０４は、データ格納領域３２２に存在するディスクリプタ１２３を参照し、指定されたデータ格納領域３２２のアドレスに格納されたデータを指定されたストレージ部１０５のブロックに転送する。
【００４２】
それでは次に、本実施の形態によるデータ更新履歴格納方法の概要を説明する。データ更新履歴格納方法は、プログラム格納領域３２１に格納される各種プログラム１０１〜１０３、１０６に基づいてＣＰＵ３１１が実行するものである。
【００４３】
（１−２）データ更新履歴格納方法
図４は、データ更新履歴格納装置のソフトウェア構成を階層的に示した図である。ＣＰＵ３１１はアプリケーション１０１を介してシステムコールを発行することによって、ＣＰＵ３１１がファイル手段１１１に対してファイル操作を要求する。ファイル操作が完了してファイル内のデータが更新すると、ＣＰＵ３１１はファイルシステム１０２を介してアプリケーション１０１にシステムコールリターンを発行する。
【００４４】
次にＣＰＵ３１１は、アプリケーション１０１からの要求に応じて、バッファプール１２１に格納されているバッファデータを更新すると、ＣＰＵ３１１の各手段３２３〜３２５がストレージ部１０５のデータ領域１２６に更新データを格納するために、後述する更新処理を行う。まず、プログラム実行手段３２３がキャッシュ構造体１２２に登録されているバッファアドレス情報に基づいて、ＨＢＡ１０４にＩ／Ｏ命令を発行する。この際、ＣＰＵ３１１は、ディスクリプタ１２３内に、バッファアドレスと、当該バッファアドレスに格納されている更新データを転送すべきブロック番号の組を登録する。
【００４５】
ＣＰＵ３１１がファイルシステム１０２を介してＨＢＡ１０４にＩ／Ｏ命令を発行すると、実行検査手段３２５は、ＶＭモニタ１０３に対してＩ／Ｏ命令実行を通知する。このＩ／Ｏ命令実行通知は、ＶＭモニタ１０３のＩ／Ｏ要求捕捉手段１１２で受け取る。そしてＣＰＵ３１１がＩ／Ｏ要求捕捉手段１１２を用いて、ディスクリプタ１２３の設定内容を参照し、転送元となるバッファアドレスにアクセスした際に、ページアクセス検査手段３２４がページ例外をＶＭモニタ１０３に通知できるように、ＣＰＵ３１１がＩ／Ｏ要求捕捉手段１１２を用いてページテーブル１２４の設定を変更する。具体的には、ＣＰＵ３１１が、バッファアドレスのアクセス権限をリード／ライト可能又はライト可能からリードアクセスのみ可能（リードオンリー）に変更する。
【００４６】
ＣＰＵ３１１がファイル手段１１１を用いてバッファプール１２１のバッファデータを更新するたびに、ページ例外がＶＭモニタ１０３に通知されるようになる。ページ例外通知は、ＶＭモニタ１０３のページ例外捕捉手段１１３で受け取る。
【００４７】
ＣＰＵ３１１がページ例外捕捉手段１１３でページ例外通知を受け取ると、ページ例外通知と同時にページ例外発生アドレス（バッファアドレスに相当）を受け取る。ＣＰＵ３１１は、このページ例外発生アドレスをキャッシュ構造体スヌープドライバ１０６に通知し、当該ドライバ１０６を呼び出す。
【００４８】
ＣＰＵ３１１はファイルシステム１０２で管理するキャッシュ構造体１２２を参照し、ＣＰＵ３１１がブロック番号取得手段１１６によって、当該バッファアドレスに対応するブロック番号を取得する。そして、ＣＰＵ３１１がブロック番号取得手段１１６を用いて、取得したブロック番号をページ例外捕捉手段１１３に通知する。ＣＰＵ３１１がページ例外捕捉手段１１３を用いて、キャッシュ構造体スヌープドライバ１０６から受け取ったブロック番号と、ページ例外発生アドレス（バッファアドレス）に格納される更新データを更新キュー１２５に登録する。
【００４９】
さらに、ＣＰＵ３１１がファイルシステム１０２を介してアプリケーション１０１にシステムコールリターンを発行する時に、実行検査手段３２５はシステムコールリターン命令実行通知をＶＭモニタ１０３に送る。ＶＭモニタ１０３のシステムコール捕捉手段１１４がシステムコールリターン命令実行通知を受け取ると、システムコール捕捉手段１１４はコミットエントリを更新キュー１２５に登録する。
【００５０】
ＣＰＵ３１１はログ領域書き込み手段１１５を用いて、更新キュー１２５の内容をストレージ部１０５内のログ領域１２７に書き出す。ＣＰＵ３１１は一連の更新履歴をコミットエントリまでログ領域１２７に書き出したら、ログ領域内に書き出した一連の更新データを、対応するデータ領域１２６にコピーして、更新データを格納する。
【００５１】
なお万一、データ更新履歴格納装置が故障した場合には、ＣＰＵ３１１がシステムリブート後にデータ復旧手段１１７を立ち上げる。データ復旧手段１１７では、ログ領域１２７に格納されている更新履歴に基づきデータ領域１２６のデータを修復する。
【００５２】
（１−３）各動作のフローチャート
それでは次に、上述で説明をしたＶＭモニタ１０３内の各種手段１１２〜１１７を用いてＣＰＵ３１１が更新データをデータ領域に格納する動作について詳細に説明をする。
【００５３】
（１−３−１）Ｉ／Ｏ要求捕捉手段１１２の動作
図５は、ＣＰＵ３１１がファイルシステム１０２からＩ／Ｏ命令を発行した際のＩ／Ｏ要求捕捉手段１１２の動作を実行するフローチャートである。
【００５４】
まず、ＣＰＵ３１１がファイルシステム１０２を用いてＩ／Ｏ命令をＨＢＡ１０４に発行し、バッファプール１２１に格納されているバッファデータ（更新データ）をストレージ部１０５に格納しようと試みる（Ｓ５０１）。また、この際に、ＣＰＵ３１１は、メモリ３１２のデータ格納領域３２２内に存在するディスクリプタ１２３に、バッファアドレスと、当該バッファの内容を格納すべきデータ領域１２６のブロック番号の組を格納する（Ｓ５０１）。
【００５５】
実行検査手段３２５が、ステップＳ５０１で発行されたＩ／Ｏ命令発行を捕捉し、VMモニタ１０３のＩ／Ｏ要求捕捉手段１１２に通知を行う（Ｓ５０２）。
【００５６】
ＣＰＵ３１１がディスクリプタ１２３を検査し、ディスククリプタ１２３に登録されたバッファアドレスを取得する（Ｓ５０３）。そして、ＣＰＵ３１１は、メモリ３１２上に存在するページテーブル１２４を操作して、バッファアドレスのアクセス権限をリードアクセスのみ可能（リードオンリー）に変更すると（Ｓ５０３）、Ｉ／Ｏ要求捕捉手段１１２の動作を終了する。
【００５７】
（１−３−２）ページ例外捕捉手段の動作
図６は、図５のステップＳ５０３において、ＣＰＵ３１１がページテーブル１２４を操作した以降に開始されるページ例外捕捉手段の動作を実行するフローチャートである。
【００５８】
具体的には、まずＣＰＵ３１１がファイル手段１１１を用いてバッファプール１２１内のバッファデータを更新する（Ｓ６０１）。
【００５９】
その結果、ＣＰＵ３１１がバッファアドレスのアクセス権限をリードアクセスのみ可能（リードオンリー）に変更しているので、ページアクセス検査手段３２４がページ例外をページ例外捕捉手段１１３に通知する。この際、ページアクセス検査手段３２４が、アクセス拒否されたページアドレスをページ例外アドレス１２９（ステップＳ６０１にてファイル手段によって更新したバッファアドレス）として併せてページ例外捕捉手段１１３に通知する（Ｓ６０２）。
【００６０】
その後、ＣＰＵ３１１は通知されたページ例外アドレス１２９として登録したバッファアドレスに基づいてキャッシュ構造体スヌープドライバ１０６を呼び出す（Ｓ６０３）。
【００６１】
そして、キャッシュ構造体スヌープドライバ１０６が、ファイルシステム１０２が管理するキャッシュ構造体１２２を参照して、バッファアドレスに対応するデータ領域１２６内のブロック番号を取得し、ページ例外捕捉手段１１３に通知する（Ｓ６０４）。
【００６２】
ＣＰＵ３１１は、ステップＳ６０４で取得したブロック番号、及びバッファアドレスに格納されている更新後のバッファデータを更新データとして更新キュー１２５に登録して（Ｓ６０５）、ページ例外捕捉手段の動作を終了する。
【００６３】
（１−３−３）システムコール捕捉手段の動作
図７は、ＣＰＵ３１１がシステムコール捕捉手段の動作を実行するフローチャートである。
【００６４】
ＣＰＵ３１１は、ファイル手段１１１を用いてシステムコールリターン命令をアプリケーション１０１に発行した際のシステムコール捕捉手段の動作を示すフローチャートである。
【００６５】
まずＣＰＵ３１１がファイル手段１１１を用いて、バッファプール１２１内のバッファデータの更新が終了すると、システムコールリターン命令をアプリケーション１０１に発行する（Ｓ７０１）。
【００６６】
その結果、実行検査手段３２５がシステムコールリターン命令実行通知を、システムコール捕捉手段１１４に送信する（Ｓ７０２）。
【００６７】
ＣＰＵ３１１は、一連の更新データの終了を示すコミットエントリを更新キュー１２５に格納すると（Ｓ７０３）、システムコール捕捉手段１１４の動作を終了する。
【００６８】
（１−３−４）ログ領域に書き込み手段の動作
図８は、ＣＰＵ３１１がログ書き込み手段１１５の動作を実行するフローチャートである。
【００６９】
ＣＰＵ３１１は、更新キュー１２５に更新履歴が格納されているかどうかを検査する（Ｓ８０１）。更新履歴が格納されていなければ（Ｓ８０１：ＮＯ）、ＣＰＵ３１１は、ステップＳ８０１の処理を繰り返す。
【００７０】
もし更新履歴が格納されていれば（Ｓ８０１：ＹＥＳ）、ＣＰＵ３１１はＨＢＡ１０４に対してＩ／Ｏ命令を発行し、更新キュー１２５内の更新履歴をログ領域１２７に転送する（Ｓ８０２）。ＣＰＵ３１１は、更新キュー１２５内から転送した更新履歴を削除する。
【００７１】
次に、ＣＰＵ３１１は、転送した更新履歴がコミットエントリの転送であるかどうか検査する（Ｓ８０３）。ＣＰＵ３１１はコミットエントリではない更新履歴を転送する場合には（Ｓ８０３：ＮＯ）、ステップＳ８０１に再び戻る。
【００７２】
ＣＰＵ３１１は、コミットエントリの転送であれば（Ｓ８０３：ＹＥＳ）、ＨＢＡ１０４に対してＩ／Ｏ命令を発行し、ログ領域１２７に格納された更新履歴を一旦メモリ３１１のデータ格納領域３２２の空き領域に転送する（Ｓ８０４）。
【００７３】
ＣＰＵ３１１は、ＨＢＡ１０４に対してＩ／Ｏ命令を発行し、ログ領域１２７に格納された更新履歴の中から更新データを、対応するデータ領域１２６のブロック番号に転送し（Ｓ８０５）、処理が完了すると再びステップＳ８０１に戻る。
【００７４】
（１−３−５）ログ復旧手段の動作
図９は、ＣＰＵ３１１が更新データをデータ領域１２６に格納中に、データ更新履歴格納装置１００内で故障が発生した場合の、ログ復旧手段を実行するフローチャートである。
【００７５】
ＣＰＵ３１１は、ＨＢＡ１０４にＩ／Ｏ命令（Ｒｅａｄ命令）を発行し、ログ領域１２７に格納されている全更新履歴（更新キュー内から転送されたデータ領域のブロック番号、及び、更新データ）を読み出す（Ｓ９０１）。
【００７６】
ＣＰＵ３１１は、読み出した更新履歴のうち、最後のコミットエントリを検出する（Ｓ９０２）。ＣＰＵ３１１は、検出したコミットエントリまでの更新履歴から、更新データの履歴を示すエントリを検出して、データ領域１２６のブロック番号と更新データとを検出する（Ｓ９０３）。
【００７７】
ＣＰＵ３１１は、検出したデータ領域１２６のブロック番号と更新データとに基づいて、データ領域１２６に更新データを格納する（Ｓ９０４）。
【００７８】
全てのデータの復旧を完了すると、ＣＰＵ３１１はログ領域１２７に格納されている更新履歴を消去して（Ｓ９０５）、データ復旧手段の動作を終了する。
【００７９】
以上より、ＶＭモニタ１０３とキャッシュ構造体スヌープドライバ１０６をＮＡＳヘッド部３０１のプログラム格納領域３２１に搭載するだけで、既存ファイルシステムの改変を行うことなく、更新データをストレージ部１０５に格納できる。すなわち、このＮＡＳヘッド部３０１とストレージ部１０５を組み合わせたデータ更新履歴格納装置１００上で、既存のアプリケーション１０１やファイルシステム１０２を動作させれば、既存のアプリケーション１０１やファイルシステム１０２から関数呼び出しを発行することなく、自動的に更新履歴がログ領域１２７に格納でき、更新データをデータ領域１２６に格納することができる。加えて、ログ領域１２７内の更新履歴に基づいてデータの復旧を行うこともできる。
【００８０】
なお、本方式によるデータ更新履歴の格納は、タイムスタンプ等を追加することにより性能解析の用途に使用することができる。また、更新履歴をデータのバックアップやデータプロテクションに利用することもできる。さらに、更新履歴を障害解析に活用することもできる。このように既存のファイルシステムの改変なく機能拡張が実現できるので、開発コストを大幅に削減することができる。
【００８１】
（１−４）第１の実施の形態の効果
本方式に従うと、既存のファイルシステムのソースコードを改変することなく、既存のファイルシステムの指示により更新履歴を格納し、かつ、データの更新を行うことができる。
【００８２】
（２）第２の実施の形態
それでは次に、第２の実施の形態について説明する。第２の実施の形態では、第１の実施の形態で説明をしたシステムコール捕捉手段の動作フローチャートを除いて、第１の実施の形態と同様の構成及び同様の動作であるため、説明を省略する。なお、第１の実施の形態で説明した構成と同一の構成には、同一の図番を付している。
【００８３】
（２−１）システムコール捕捉手段の動作
図１０は、ＣＰＵ３１１がシステムコール捕捉手段１１４Ａ（図４に記載）の動作を実行するフローチャートである。
【００８４】
ＣＰＵ３１１は、ファイルシステム１０２からトランザクションのコミット宣言発行を契機にシステムコール捕捉手段１１４Ａを起動する（Ｓ１００１）。そして、ＣＰＵ３１１は、コミットエントリを更新キュー１２５に追加して（Ｓ１００２）、システムコール捕捉手段１１４Ａの動作を終了する。
【００８５】
第１の実施の形態では、ＣＰＵ３１１がファイル手段１１１からシステムコールリターン命令の発行を契機にシステムコール捕捉手段１１４を起動させたが、本実施の形態のようにトランザクションのコミット宣言発行を契機にシステムコール捕捉手段１１４Ａを起動することもできる。
【００８６】
（２−２）第２の実施の形態の効果
本方式によっても、既存のファイルシステムのソースコードを改変することなく、既存のファイルシステムの指示により更新履歴を格納し、かつ、データの更新を行うことができる。
【００８７】
（３）第３の実施の形態
それでは次に、第３の実施の形態について、図１１を用いて説明する。１１００は、第３の実施の形態のデータ更新履歴格納装置である。なお、第１の実施の形態で説明した構成と同一の構成には、同一の図番を付している。
【００８８】
（３−１）データ更新履歴格納装置の構成
第３の実施の形態では、データ更新履歴格納装置１１００は、複数のファイルシステム１０２−０〜１０２−Ｎのデータ更新履歴の格納を行う。このために、データ更新履歴格納装置１１００は、ファイルシステム１０２−０〜１０２−Ｎごとに対応するHBA１０４−０〜１０４−Ｎ、ログ領域１２７−０〜１２７−Ｎ、データ領域１２６−０〜１２６−Ｎ、更新キュー１２５−０〜１２５−Ｎ、ディスクリプタ１２３−０〜１２３−Ｎ、キャッシュ構造体スヌープドライバ１０６−０〜１０６−Ｎを備える。
【００８９】
なお、各構成は、第１の実施の形態で説明をした構成と同様の構成のため、説明を省略する。
【００９０】
また、第３の実施の形態のＶＭモニタ１０３´は、ＶＭ管理テーブル１００１を備えている。
【００９１】
ＶＭ管理テーブル１００１は、図１２に示すように、複数あるファイルシステムの実行処理の順番を管理するテーブルである。ＶＭ管理テーブル１００１は、複数ある構成要素のうち１つを実行させるための番号を示すＶＭ番号欄１００１Ａ、実行番号に対応するキャッシュ構造体スヌープドライバ番号欄１００１Ｂ、更新キュー番号欄１００１Ｃ、ディスクリプタ番号欄１００１Ｄ、ＨＢＡ番号欄１００１Ｅ、ログ領域番号欄１００１Ｆ、及びデータ領域番号欄１００１Ｇから構成されている。そして、ＣＰＵ３１１が実行しているＶＭ番号を「実行中ＶＭ番号」１００２に表示する。
【００９２】
（３−２）Ｉ／Ｏ要求捕捉手段の動作
Ｉ／Ｏ要求捕捉手段１１２´の起動契機は第１の実施の形態のステップＳ５０１と同様である。ＣＰＵ３１１は、図５のステップＳ５０３において次のように変更する。
【００９３】
すなわち、ＣＰＵ３１１は、実行中ＶＭ番号１００２を確認後、ＶＭ管理テーブル１００１から実行中ＶＭ番号に対応するキャッシュ構造体スヌープドライバ番号、更新キュー番号、ディスクリプタ番号、ＨＢＡ番号、ログ領域番号、及びデータ領域番号を取得する。なお、便宜上実行中ＶＭ番号を１とし、対応する各種番号をXXX−１（Ｘは任意）とする。
【００９４】
その後、ＣＰＵ３１１は、ＨＢＡ番号１０４−１に対応するディスクリプタ１２３−１を参照し、転送元のバッファアドレスを取得し、ページテーブル１２４の該当アドレスのアクセス権限をリードオンリーに変更する。
【００９５】
そして、ＣＰＵ３１１は、次に実行するＶＭ番号をランダムに決定し、当該ＶＭ番号に対応するファイルシステムが決定すると、再びステップＳ５０１の処理を実行する。
【００９６】
（３−３）ページ例外捕捉手段の動作
ページ例外捕捉手段１１３´の起動契機は第１の実施の形態のステップＳ６０１と同様である。ＣＰＵ３１１は、図６のステップＳ６０３、ステップＳ６０５を次のように変更する。
【００９７】
すなわちステップＳ６０３において、ＣＰＵ３１１は、実行中ＶＭ番号１００２を確認後、ＶＭ管理テーブル１００１から実行中ＶＭ番号１に対応するＨＢＡ番号１０４−１を取得する。そして、ＣＰＵ３１１は、実行中VM番号に対応するキャッシュ構造体スヌープドライバ１０６−１を起動する。この際に、ＣＰＵ３１１は、ページ例外発生例外通知時に受け取ったバッファアドレスを指定する。
【００９８】
またステップＳ６０５において、ＣＰＵ３１１は、取得したバッファアドレス、ブロック番号を、ステップＳ６０３で取得したＶＭ番号に対応する更新キュー１２５−１に追加する。
【００９９】
そして、ＣＰＵ３１１は、次に実行するＶＭ番号をランダムに決定し、当該ＶＭ番号に対応するファイルシステムが決定すると、再びステップＳ６０１の処理を実行する。
【０１００】
（３−４）システムコール捕捉手段の動作
システムコール捕捉手段１１４´の起動契機は第１の実施の形態のステップＳ７０１と同様である。ＣＰＵ３１１は、図７のステップＳ７０３を、次のように変更する。
【０１０１】
すなわち、ステップＳ７０３において、ＣＰＵ３１１は、実行中ＶＭ番号１００２を確認後、ＶＭ管理テーブル１００１から実行中ＶＭ番号１に対応するＨＢＡ番号１０４−１を取得する。そして、ＣＰＵ３１１は、実行中VM番号に対応するキャッシュ構造体スヌープドライバ１０６−１を起動する。
【０１０２】
そして、ＣＯＵ３１１は、実行中ＶＭ番号に対応する更新キュー１２５−１にコミットエントリを追加する。
【０１０３】
そして、ＣＰＵ３１１は、次に実行するＶＭ番号をランダムに決定し、当該ＶＭ番号に対応するファイルシステムが決定すると、再びステップＳ７０１の処理を実行する。
【０１０４】
（３−５）ログ領域書き込み手段の動作
ログ領域書き込み手段１１５´の起動契機は、ＣＰＵ３１１が実行中ＶＭ番号１００２を確認後、ＶＭ管理テーブル１００１から実行中ＶＭ番号１に対応する更新キュー１２５−１に更新履歴が入ることで始まる。
【０１０５】
その後、ＣＰＵ３１１は実行中ＶＭ番号１に対応するＨＢＡ１０４−１、ログ領域１２７−１、データ領域１２６−１に対して、ステップＳ８０２〜Ｓ８０５までの処理を実行する。
【０１０６】
そして、ＣＰＵ３１１は、次に実行するＶＭ番号をランダムに決定し、当該ＶＭ番号に対応するファイルシステムが決定すると、再びステップＳ８０１の処理を実行する。
【０１０７】
ＣＰＵ３１１は、すべての更新キュー１２５−０〜１２５−Ｎに格納された更新履歴をログ領域１２７−０〜１２７−Ｎ、データ領域１２６−０〜１２６−Ｎに転送するまで、ログ領域書き込み手段（ステップＳ８０１〜Ｓ８０５）を繰り返し実行する。
【０１０８】
このように、複数のファイルシステムに対応して、複数のキャッシュ構造体スヌープドライバ、複数の更新キュー、複数のディスクリプタ、複数のＨＢＡ、複数のログ領域、及び複数のデータ領域を有するデータ更新履歴格納装置であっても、既存のファイルシステムの指示により更新履歴を格納し、かつ、データの更新を行うことができる。
【０１０９】
（３−６）第３の実施の形態の効果
本方式によっても、既存のファイルシステムのソースコードを改変することなく、既存のファイルシステムの指示により更新履歴を格納し、かつ、データの更新を行うことができる。
【図面の簡単な説明】
【０１１０】
【図１】第１の実施の形態におけるデータ更新履歴格納装置のハードウェア構成を示すブロック図である。
【図２】第１の実施の形態におけるページテーブルを示す図表である。
【図３】第１の実施の形態におけるハンドラテーブルを示す図表である。
【図４】第１の実施の形態におけるデータ更新履歴格納装置のソフトウェア構成を示すブロック図である。
【図５】第１の実施の形態におけるＩ／Ｏ要求捕捉手段を示すフローチャートである。
【図６】第１の実施の形態におけるページ例外捕捉手段を示すフローチャートである。
【図７】第１の実施の形態におけるシステムコール捕捉手段を示すフローチャートである。
【図８】第１の実施の形態におけるログ領域書き込み捕捉手段を示すフローチャートである。
【図９】第１の実施の形態におけるデータ復旧手段を示すフローチャートである。
【図１０】第１の実施の形態におけるシステムコール捕捉手段を示すフローチャートである。
【図１１】第３の実施の形態におけるデータ更新履歴格納装置のソフトウェア構成を示すブロック図である。
【図１２】第３の実施の形態におけるＶＭ管理テーブルを示す図表である。
【図１３】従来のデータ更新履歴格納装置のソフトウェア構成を示すブロック図である。
【符号の説明】
【０１１１】
１０２……ファイルシステム、１０３、１０３´……ＶＭモニタ、１０４……ＨＢＡ、１０５、１０５´……ストレージ部、１０６……キャッシュ構造体スヌープドライバ、１１１……ファイル手段、１１２、１１２´……Ｉ／Ｏ要求捕捉手段、１１３、１１３´……ページ例外捕捉手段、１１４、１１４Ａ、１１４´……システムコール捕捉手段、１１５、１１５´……ログ領域書き込み手段、１１６……ブロック番号取得手段、１１７……データ復旧手段、１２１……バッファプール、１２２……キャッシュ構造体、１２３……ディスクリプタ、１２４……ページテーブル、１２５……更新キュー、１２６……データ領域、１２７……ログ領域、１２８……ハンドラテーブル、１２９……ページ例外アドレス、３２１……プログラム格納領域、３２２……データ格納領域、３０１……ＮＡＳヘッド部、３１１……ＣＰＵ、３１２……メモリ、３２３……プログラム実行手段、３２４……ページアクセス検査手段、３２５……実行検査手段、１００１……ＶＭ管理テーブル、１００２……実行中ＶＭ番号
【図１】
0005046845.tif 000002
【図２】
0005046845.tif 000003
【図３】
0005046845.tif 000004
【図４】
0005046845.tif 000005
【図５】
0005046845.tif 000006
【図６】
0005046845.tif 000007
【図７】
0005046845.tif 000008
【図８】
0005046845.tif 000009
【図９】
0005046845.tif 000010
【図１０】
0005046845.tif 000011
【図１１】
0005046845.tif 000012
【図１２】
0005046845.tif 000013
【図１３】
0005046845.tif 000014