(57)【特許請求の範囲】
【請求項１】
障害停止時に二次記憶装置内容を回復する方法であって、
前記二次記憶装置を備える計算機装置のCPUは、二次記憶装置上に構成されるファイルシステム構造の更新履歴を主記憶装置にキャッシュとして記録し、
前記主記憶装置は、第一の領域と第二の領域を有し、
前記第一の領域は、前記ファイルシステム構造の更新履歴を記録するテーブルを有し、
前記第二の領域は、前記第一の領域に更新履歴が保存されているか否かを示すフラグ及び前記第一の領域のテーブルのアドレス範囲を記録する保存範囲を有し、
前記計算機装置の障害停止時に、
前記計算機装置のCPUは、
前記主記憶装置のフラグを検査する第一の手順と、
前記第一の手順で前記フラグに前記第一の領域に更新履歴の保持が示されている場合、前記保存範囲を参照し、主記憶の領域から前記第一の領域を除外して主記憶の利用可能な範囲を含む、OSに渡す構成情報を作成する第二の手順と、
前記第二の手順で作成した構成情報を用いてOSを起動する第三の手順と
前記第三の手順でOSの起動が終了した後、前記主記憶装置のフラグを検査する第四の手順と、
前記第四の手順で前記フラグに前記第一の領域の更新履歴の保持が示されている場合、前記テーブルのアドレス範囲を前記保存範囲から取得する第五の手順と、
前記第五の手順で取得したアドレス範囲を、OSのカーネル内のメモリ管理のデータ構造に登録する第六の手順と、
前記テーブルの各エントリを検査し、破壊されていない更新履歴を前記二次記憶装置に反映する第七の手順と
を行う手順を有することを特徴とする二次記憶装置内容を回復する方法。
【請求項２】
障害停止時に二次記憶装置内容を回復する方法であって、
前記二次記憶装置に格納されているファイル内容は、主記憶装置にキャッシュされ、
前記主記憶装置は、第一の領域と第二の領域を有し、
前記第一の領域は、前記ファイル内容のキャッシュ及び該キャッシュの管理データを格納するキャッシュ管理テーブルを有し、
前記第二の領域は、前記第一の領域に前記ファイル内容のキャッシュ及び該キャッシュの管理データが保存されているか否かを示すフラグと、前記第一の領域の前記管理データのアドレス範囲を記録する保存範囲を有し、
障害停止時に、
前記計算機装置のCPUは、
前記主記憶装置のフラグを検査する第一の手順と、
前記第一の手順でフラグに前記第一の領域に前記ファイル内容のキャッシュ及び該キャッシュの管理データの保持が示されている場合、前記保存範囲を参照し、主記憶の領域から前記第一の領域を除外して主記憶の利用可能な範囲を含む、OSに渡す構成情報を作成する第二の手順と、
前記構成情報を用いてOSを起動する第三の手順と
前記第三の手順でOSの起動が終了した後、前記主記憶装置のフラグを検査する第四の手順と、
前記第四の手順でフラグに前記第一の領域の前記ファイル内容のキャッシュ及び該キャッシュの管理データの保持が示されている場合、前記管理データのキャッシュデータのアドレス範囲を前記保存範囲から取得する第五の手順と、
前記第五の手順で取得した前記管理データのキャッシュデータのアドレス範囲を、OSのカーネル内のメモリ管理のデータ構造に登録する第六の手順と、
前記キャッシュ管理テーブルの各エントリを検査し、キャッシュされた前記ファイル内容のうち未反映のものを前記二次記憶装置に反映する第七の手順と
を行う手順を有することを特徴とする二次記憶装置内容を回復する方法。
【請求項３】
計算機装置の障害停止時におけるキャッシュ内容の回復方法であって、
ユーザプログラムは、前記計算機装置の主記憶装置の一部を管理し、二次記憶装置の内容を前記主記憶装置の一部へキャッシュし、
前記主記憶装置の一部は、第一の領域と第二の領域を含み、
前記第一の領域は、前記ユーザプログラムが管理する前記キャッシュ及び該キャッシュの管理データを有し、
前記第二の領域は、前記第一の領域に前記ユーザプログラムが管理する前記キャッシュ及び該キャッシュの管理データが保存されているか否かを示すフラグと、前記第一の領域の前記管理データのアドレス範囲を記録する保存範囲を有し、
前記計算機装置の障害停止時に、
前記計算機装置のCPUは、
前記主記憶装置のフラグを検査する第一の手順と、
前記第一の手順でフラグに前記第一の領域に前記ユーザプログラムが管理する前記キャッシュ及びキャッシュの管理データの保持が示されている場合、前記保存範囲を参照し、主記憶の領域から前記第一の領域を除外して主記憶の利用可能な範囲を含む、OSに渡す構成情報を作成する第二の手順と、
前記構成情報を用いてOSを起動する第三の手順と
前記ユーザプログラムは、
前記第一の領域を管理下に置き、該第一の領域を参照する第四の手順と
を行う手順を有することを特徴とするキャッシュ内容の回復方法。
【請求項４】
主記憶装置、該主記憶装置の内容を保護する電源及び二次記憶装置を備えた計算機装置であって、
前記計算機装置のCPUは、前記二次記憶装置上に構成されるファイルシステム構造の更新履歴を主記憶装置にキャッシュとして記録し、
前記主記憶装置は第一の領域と第二の領域を有し、
前記第一の領域は、前記ファイルシステム構造の更新履歴を記録するテーブルを有し、
前記第二の領域は、前記第一の領域に更新履歴が保存されているか否かを示すフラグ及び前記第一の領域のテーブルのアドレス範囲を記録する保存範囲を有し、
前記計算機装置が障害により停止した場合、
前記計算機装置のCPUは、前記主記憶装置のフラグを検査し、該フラグに前記第一の領域の更新履歴の保持が示されている場合に、前記保存範囲を参照して、主記憶の領域から前記第一の領域を除外して主記憶の利用可能な範囲を含む、OSに渡す構成情報を作成し、該構成情報を用いてOSを起動し、該起動が終わった後、前記主記憶装置のフラグを検査し、該フラグに前記第一の領域に更新履歴の保持が示されている場合、前記テーブルのアドレス範囲を前記保存範囲から取得し、該アドレス範囲をOSのカーネル内のメモリ管理のデータ構造に登録し、前記テーブルの各エントリを検査し、破壊されていない更新履歴を前記二次記憶装置に反映させることを特徴とする計算機装置。
【請求項５】
主記憶装置、該主記憶装置の内容を保護する電源及び二次記憶装置を備えた計算機装置であって、
前記二次記憶装置に格納されているファイル内容は、前記主記憶装置にキャッシュされ、
前記主記憶装置は、第一の領域と第二の領域を有し、
前記第一の領域は、前記ファイル内容のキャッシュ及び該キャッシュの管理データを格納するキャッシュ管理テーブルを有し、
前記第二の領域は、前記第一の領域に前記ファイル内容のキャッシュ及び該キャッシュの管理データが保存されているか否かを示すフラグ及び前記第一の領域の前記管理データのアドレス範囲を記録する保存範囲を有し、
前記計算機装置が障害により停止した場合、
前記計算機装置のCPUは、前記主記憶装置のフラグを検査し、該フラグに前記第一の領域に前記ファイル内容のキャッシュ及び該キャッシュの管理データの保持が示されている場合、前記保存範囲を参照して、主記憶の領域から前記第一の領域を除外して主記憶の利用可能な範囲を含む、OSに渡す構成情報を作成し、該構成情報を用いてOSを起動した後、前記主記憶装置のフラグを検査し、該フラグに前記第一の領域の前記ファイル内容のキャッシュ及び該キャッシュの管理データの保持が示されている場合、前記管理データのキャッシュデータのアドレス範囲を前記保存範囲から取得し、該管理データのキャッシュデータのアドレス範囲をOSのカーネル内のメモリ管理のデータ構造に登録し、前記キャッシュ管理テーブルの各エントリを検査し、キャッシュされた前記ファイル内容のうち未反映のものを前記二次記憶装置に反映することを特徴とする計算機装置。
【請求項６】
主記憶装置及び該主記憶装置の内容を保護する電源を備える計算機装置であって、
前記計算機装置のユーザプログラムは、前記計算機装置の主記憶装置の一部を管理し、前記二次記憶装置の内容を前記主記憶装置の一部へキャッシュし、
前記主記憶装置の一部は、第一の領域と第二の領域を含み、
前記第一の領域は、前記ユーザプログラムが管理する前記キャッシュ及び該キャッシュの管理データを有し、
前記第二の領域は、前記第一の領域に前記ユーザプログラムが管理する前記キャッシュ及び該キャッシュの管理データが保存されているか否かを示すフラグと、前記第一の領域の前記管理データのアドレス範囲を記録する保存範囲を有し、
前記計算機装置が障害により停止した場合、
前記計算機装置のCPUは、前記主記憶装置のフラグを検査し、該フラグに前記第一の領域に前記ユーザプログラムが管理する前記キャッシュ及びキャッシュの管理データの保持が示されている場合、前記保存範囲を参照して、主記憶の領域から前記第一の領域を除外して主記憶の利用可能な範囲を含む、OSに渡す構成情報を作成し、該構成情報を用いてOSを起動し、
前記ユーザプログラムは、前記第一の領域を管理下に置き、該第一の領域を参照することを特徴とする計算機装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は計算機の障害回復処理方法に関し、特に、ディスク内容の回復方法に関する。
【０００２】
【従来の技術】
磁気ディスク等の記憶装置を含む計算機では、オペレーティングシステム（ＯＳ）とアプリケーションの性能を向上させるため、記憶装置との間でやり取りするデータを主記憶にキャッシュする。記憶装置に実際のＩ／Ｏ操作を発行する前に主記憶にＩ／Ｏ対象となっているディスク領域が保存されていないか検査して、ある場合はその主記憶内容をＩ／Ｏ操作の結果として利用する。つまり、読み込み操作であればその主記憶内容を読み込んだデータとし、書込み操作であればその主記憶への書き込みとする。変更のあったディスク領域は、ある時点でディスクに書き出される。これにより、Ｉ／Ｏ回数を減らし、システム性能の向上を実現している。
【０００３】
この方式は、ＯＳが管理するファイルシステムで実施されるほかに、データベースのようなディスクＩ／Ｏの多いアプリケーションが独自に実施する場合もある。アプリケーションが実施する場合は、アプリケーション自身が直接ディスク装置にアクセスすることで、ＯＳのファイルシステムのキャッシュを無効にしている。
【０００４】
このキャッシュ方式を使う場合、計算機に障害が発生して停止してしまった時に問題が発生する。つまり、ディスクに書き出されていないデータが主記憶上のキャッシュにある時にＯＳが停止した場合、このキャッシュに残っているデータは、計算機の再起動後には失われてしまう。失われるデータによっては、ファイルシステム、データベースの破壊につながる。
【０００５】
このような問題を回避するために、重要なデータ、例えばファイルシステムのディレクトリ構造等に関する変更は同期Ｉ／Ｏにより即座にディスクに反映する方式が取られる。このようなファイルシステムの実装例の１つが、TheDesign and Implementation 4.4BSD Operating System(pp.269--284,Addison-Wesley, 1996)に述べられている。
【０００６】
また、障害時のファイルシステムの回復処理が容易なように、ファイルシステムの構造に関わる変更をログとしてディスクの予め定めた領域に記録する方式もある。このようなファイルシステムの実装例の１つが、Inside WindowsNT Second Edition(pp. 395-450, Microsoft Press, 1998)に述べられている。この場合は、ディスク上のログを参照することにより容易に障害回復処理ができる。
【０００７】
いずれの方式によっても、ファイルシステム構造を変更する処理、例えば、ファイルやディレクトリの生成・削除、ファイル属性の変更などの操作が大量に発生する状況では、ディスク上にランダムに分散してしまう同期Ｉ／Ｏが頻発してシステム性能が低下してしまう。これを解決する方式として、複数のディスクへの書き込みを１つにまとめて、シーケンシャルな追記書き込みとするファイルシステムが、前記の4.4BSD(pp. 285-306)に述べられている。
【０００８】
しかしながら、いずれの方法によっても、障害によるＯＳ停止時にメモリにキャッシュされるているデータが失われてしまう問題を免れることはできない。
【０００９】
【発明が解決しようとする課題】
従来技術では、磁気ディスクの内容、あるいは、更新情報の一部を主記憶上のキャッシュに保存して、Ｉ／Ｏ回数を削減してシステム性能の向上を実現している。ところがこの方式では、計算機が障害停止した時に主記憶上のキャッシュにディスクに書き出されていない内容が残っていると、そのキャッシュに記録されていたデータが失われてしまう。また、ディスク上に構成されるファイルシステムの構造を変更するデータは同期Ｉ／Ｏでディスクへ書き出すため、ＯＳの性能低下の原因となる。
【００１０】
本発明の目的は、障害停止時に主記憶上に残っているディスク内容のキャッシュ、あるいは、更新履歴を、計算機起動後に参照可能とする方法を提供して、ディスク内容の消失を防ぐ方法を提供する。また、本発明によれば、同期Ｉ／Ｏ回数の削減による性能向上も得られる。
【００１１】
【課題を解決するための手段】
本発明は主記憶中の領域を指定する手順と、前記領域にディスク内容の一部、あるいは、ディスク内容の更新情報を記録する手順と、前記領域の内容を保持して計算機を起動する手順と、前記起動手順により起動した時に、前記領域の内容よりディスク内容を更新する手順による。
【００１２】
【発明の実施の形態】
図面を用いて本発明の実施の形態を説明する。本実施形態は、ファイルシステムの回復方法に関する実施の形態である。この実施の形態では、ＯＳのファイルシステムが、ファイルシステム構造の更新履歴（ログ）を主記憶上の定められた領域にキャッシュして、前記領域を破壊しない計算機起動方法を設ける。これにより、計算機の再起動後にキャッシュ内容を参照して、ファイルシステム構造を再構成する方法を示す。
【００１３】
図１は、本発明の実施の形態の計算機構成を示す図である。計算機１００は、ＣＰＵ１０１，磁気ディスク装置１０２、主記憶装置１０４、読取専用メモリ１０５、および、これらを接続するバス１０３より構成される。
【００１４】
主記憶装置１０４は、２つの領域１０４ａと１０４ｂに分割される。この内の１０４ｂは、計算機１００で実行するＯＳのファイルシステムのログ、および、ログを管理するデータ領域として利用する。ファイルシステムのログとは、ディスク１０２上に構成されるファイルシステムの構造変更履歴のことをいう。例えば、ファイルの生成、削除、ファイルへのディスクブロックの割り当て等を記録する。残りの１０４ａは、その他のＯＳのコード、データ、および、アプリケーションプログラムが利用する。また、主記憶１０４ａには、後述するファイルシステムの障害回復手順と計算機１００の起動時に参照されるパラメータも含まれている。
【００１５】
主記憶装置１０４の領域１０４ｂは、後で説明する起動方法により再起動を実行しても、内容が保持される領域となる。本実施形態は、ファイルシステム構造の変更がディスクに反映されていない時に、障害によりＯＳの実行が停止した場合でも、再起動後にファイルシステムのログ領域１０４ｂを参照することにより、障害前に実施されたファイルシステムへの更新を引き継ぐことを可能とするものである。
【００１６】
主記憶領域１０４ｂに格納するデータ構造について、図２により説明する。図２は、ファイルシステム構造の変更の履歴を記録するログキャッシュテーブル２００の構造と、テーブルへのインデックス２１０を示している。テーブル２００には、すべてのファイルシステムの構造、属性の更新操作が記録される。テーブル２００は、主記憶領域１０４ｂに格納する。これにより、ＯＳ停止後の再起動後でも内容が保存される。
【００１７】
テーブル２００は、ファイルシステムに対する各操作の内容を格納するエントリから構成される。テーブル２００の各エントリは、そのエントリが使用されているかどうかを示す有効フラグ２０１、操作内容を記録するログ２０２、ログ２０２に記録されているデータのチェックサム２０３からなる。
【００１８】
次エントリインデックス２１０は、次のファイルシステム操作ログを格納するエントリを指している。エントリの割り当て操作によりインデックス２１０は次に進められる。テーブルの最後を指している場合は、先頭エントリを指すように設定する。
【００１９】
ファイルシステムはなんらかの更新操作を実行する場合、テーブル２００にその操作を記録する。図３によりその操作手順を説明する。
【００２０】
まず、更新情報を格納するエントリがテーブル２００にあるかどうか検査する（ステップ３０１）。エントリがある場合はエントリの割り当て処理へ進む（ステップ３０２）。空きエントリがない場合、つまり、次エントリインデックス２１０の指すエントリの有効フラグ２０１がセットされている場合は、１つ、ないし、複数個のエントリのログ２０２に記録されている更新操作をディスク１０２に反映して（ステップ３０５）、それらのエントリの有効フラグをクリアし（ステップ３０６）、ステップ３０２へ進む。
【００２１】
ステップ３０２では、次エントリインデックス２１０が指すエントリの有効フラグ２０１をセットしてエントリを割り当て、次エントリインデックス２１０を次のエントリへ進める。割り当てたエントリのログ２０２に、ファイルシステム操作内容を示すログを格納し（ステップ３０３）、ログのチェックサムを計算して２０３に格納する（ステップ３０４）。
【００２２】
チェックサムは、ＯＳ再起動後のファイルシステム初期化処理で、ログ２０２に記録さていている情報が破壊されていないかを検査するために利用する。
【００２３】
次に、図４によりＯＳを再起動する時に参照するデータ構造について説明する。図４は、本発明の形態の主記憶１０４の様子を示している。前述したように主記憶１０４は、通常の領域１０４ａと、再起動時に内容が保存される領域１０４ｂとに分かれている。領域１０４ａには、計算機再起動処理中かを示すリブートフラグ４０１、領域１０４ｂのアドレス範囲を記録する保存範囲４０２がある。
【００２４】
フラグ４０１と範囲４０２は、ＯＳの停止時、再起動時に設定する。フラグ４０１は、計算機起動時の動作を決める値を格納する。例えば、電源投入時と同様の初期化処理を実行する、一部の初期化処理を実行せずに起動する等である。本発明では、主記憶領域１０４ｂの内容を保持してＯＳを起動することを示す値が存在する。範囲４０２は、領域１０４ｂのアドレス範囲を記録している。
【００２５】
これらが格納されるメモリのアドレスは予め決められており、起動処理でもこれらのデータを参照でき、保持すべき領域１０４ｂを発見することができる。
【００２６】
次に、図５により計算機の起動手順を説明する。図５に示した手順はＲＯＭ１０５に格納され、ＣＰＵ１０１がリセットされた時に実行されるように、ＲＯＭ１０５はバス１０３に接続されている。
【００２７】
ＣＰＵ１０１がリセットされると、ステップ５０１が実行される。ここでは、主記憶１０４内のリブートフラグ４０１を検査する。フラグ４０１に主記憶領域１０４ｂの保持を示す値が格納されている場合は、保存範囲４０２を参照して、以降の起動処理で利用できるメモリ領域から４０２で示される領域を除外して（ステップ５０２）、ステップ５０３へ進む。そうでない場合は、ステップ５０３へ進む。
【００２８】
ステップ５０３からの処理は、通常の計算機起動手順である。主記憶１０４を初期化し（ステップ５０３）、計算機に接続されている入出力装置の初期化と、ＯＳに渡す構成情報を構築する（ステップ５０４）。構築する構成情報にはＯＳが利用可能な主記憶範囲が含まれる。この主記憶範囲からも、保存範囲４０２で指定される領域は除外される。
【００２９】
続くステップ５０５でＯＳカーネルをロードして、ＯＳの初期化処理を呼び出す。これらの処理の間、主記憶領域１０４ｂは利用可能な主記憶から除外されているので、使われることはない。したがって、ＯＳ停止による再起動の場合でも、停止時に主記憶領域１０４ｂに格納されているログキャッシュテーブル２００の内容も保存される。
【００３０】
ファイルシステムの初期化処理では、ログキャッシュテーブル２００の初期化処理を実行する。この処理を図６により説明する。
【００３１】
まず、主記憶１０４内にあるリブートフラグ４０１を見て、主記憶領域１０４ｂを保持する再起動であったかどうか検査する（ステップ６０１）。そうでない場合は、ステップ６０２へ進む。
【００３２】
ステップ６０２からの処理では、ログキャッシュテーブル２００の割り当て（ステップ６０２）と、テーブル２００の初期化（ステップ６０３）を実行して
、その他のファイルシステム初期化処理を実行する。
【００３３】
主記憶領域１０４ｂが保持される再起動処理中である場合は、ステップ６０４から実行する。ここからの処理により、主記憶領域１０４ｂにあるログキャッシュテーブル２００をＯＳのデータ構造として組み込む。
【００３４】
ＯＳが起動する時に渡される構成情報では、主記憶領域１０４ｂは存在しないとされている。したがって、図６に示す処理が実行されるまでの間に、主記憶領域１０４ｂの内容が破壊されてしまうことはない。
【００３５】
まず、ログキャッシュテーブル２００のアドレス範囲を、主記憶１０４内の保存範囲４０２より取得して（ステップ６０４）、この領域を主記憶から割り当てられたものとしてカーネル内のメモリ管理のデータ構造に登録する（ステップ６０５）。
【００３６】
次に、テーブル２００に格納されているログが破壊されていないかを、テーブル２００の各エントリのチェックサム２０３により検査する。破壊されている場合は、当該エントリの有効フラグ２０１をクリアする（ステップ６０６）。
【００３７】
最後に、テーブル２００のログを、ディスク１０２に反映する（ステップ６０７）。この時、次エントリインデックス２１０が指すエントリの次のエントリが、最も過去に実行された操作のログに対応している。したがって、インデックス２１０の次のエントリから、インデックス２１０が指すエントリまでの間の有効フラグがセットされているログ内容をディスク１０２に反映すれば良い。
【００３８】
ディスク１０２へのログ反映が終了したら、テーブル２００を初期化し（ステップ６０３）、その他のファイルシステム初期化処理を実行する。
【００３９】
これまで説明したデータ構造、計算機起動処理、および、ファイルシステム初期化処理により、ＯＳ停止前に実行された主記憶のキャッシュに記録されたがディスク１０２には反映されていないファイルシステム操作を復元できる。また、従来技術では同期Ｉ／Ｏにより実行しなければならなかったファイルシステム操作を非同期Ｉ／Ｏにより実行でき、同期Ｉ／Ｏによる性能劣化を抑止できる。
【００４０】
また、従来技術では複数のディスクへの書き込み処理を１つにまとめてシーケンシャルライトとしているファイルシステムでは、メモリ上の書き込みデータをディスク１０２に書き込む前にＯＳが停止してしまった場合、それらが失われる問題があった。本発明によれば、これらのまとめ書きするデータを主記憶領域１０４ｂに配置することにより、ＯＳ停止によるデータの消失を防ぐことができる。
【００４１】
次に、本発明の第２の実施の形態について説明する。第１の実施形態では、ファイルシステムの構造に関するログのみをＯＳ再起動の前後で保存するようにしていた。それに対して、第２の実施形態では、ファイルシステム上のファイル自体の内容を回復可能とする。
【００４２】
第２の実施形態のファイルシステムは、ディスク１０２に格納されているファイル内容を主記憶１０４内にキャッシュする。ファイルを読み書きする場合は、まず、主記憶１０４内のキャッシュにファイル内容が格納されているか検査する。あれば、そのメモリ内容を利用してファイルアクセスを実行する。なければ、ディスク１０２からファイル内容を読み出して主記憶１０４内のキャッシュに格納する。ファイルへの書き込みはキャッシュへの書き込みとなり、書き込みの後の適当な時点でディスク１０２への実際の書き込みが実行される。
【００４３】
このようなファイルシステムでは、ＯＳが障害停止するとキャッシュに書き込まれたがディスクに反映されていないファイル内容は失われてしまう。ここで説明する実施形態では、これを防ぐ方法を示す。
【００４４】
図７は、第２の実施形態における計算機の仮想記憶のデータ構造を示している。７０１は仮想アドレス空間、７０４は物理アドレス空間を示している。仮想アドレス空間７０１は、ページテーブル７０３により構成される。ページテーブル７０３は、仮想アドレス空間の仮想ページに対応する物理ページアドレスを記録している。例えば、図７では、仮想ページ７０１ａに対応する物理ページは７０３ｂに記録されており、物理ページ７０４ａを指している。また、仮想ページ対応する物理ページがあるかどうかは有効フラグ７０３ａに記録される。ページテーブルの各エントリには、変更フラグ７０３ｃがある。これは、仮想ページの内容が変更された時に自動的にセットされる。
【００４５】
現在の仮想アドレス空間を構成するページテーブル７０３は、ページテーブルレジスタ７０２により指定される。
【００４６】
第２の実施形態におけるＯＳの仮想アドレス空間構成について説明する。図８は、仮想アドレス空間の一部を示している。仮想アドレス空間７０１中の領域８０１は、ファイルシステムのキャッシュをマップする領域とする。ファイル内容のキャッシュを格納している物理ページは、全て領域８０１の仮想アドレス領域にマップして利用する。
【００４７】
また、ファイルシステムキャッシュとする物理ページは、主記憶１０４中の領域１０４ｂから割り当てる。この領域１０４ｂは、第１の実施形態と同様に計算機の再起動前後で内容が保持される領域である。
【００４８】
図９は、主記憶領域１０４ｂに格納されるファイルシステムキャッシュ管理のためのデータ構造を示す。キャッシュ管理テーブル９００は、ファイルシステムキャッシュ領域８０１内の仮想ページ毎のエントリを格納している。各エントリは、有効なキャッシュ内容を含んでいるかを示す有効フラグ９０１、仮想ページに対応する物理ページアドレス９０２、および、キャッシュしている内容のディスク上の位置を示すアドレス９０３、内容が変更されたかを示す変更フラグ９０４を格納している。
【００４９】
ファイルシステムキャッシュにディスク内容を読み込んだ時には、テーブル９００のエントリを設定する。キャッシュをマップした仮想ページに対応するエントリの有効フラグ９０１をセットし、キャッシュの物理ページアドレスを９０２に、読み込んだディスクのアドレスを９０３に格納する。更に、変更フラグ９０４をクリアする。
【００５０】
次に、図１０により、第２の実施の形態でのファイルへの書き込み手順について説明する。
【００５１】
まず、書き込み先のファイル内容がファイルシステムのキャッシュにあるかを検査する（ステップ１００１）。キャッシュにない場合は、キャッシュにファイル内容を読み込む（ステップ１００５）。
【００５２】
ファイルへの書き込みは、仮想アドレス空間７０１のファイルシステムキャッシュ領域８０１内にマップされているキャッシュへの書き込みとして実行する（ステップ１００２）。この書き込みを実行した時点で、キャッシュがマップされている仮想ページに対応するページテーブル７０３のエントリの変更フラグ７０３ｃが自動的にセットされる。
【００５３】
次に、キャッシュ管理テーブル９００の変更フラグ９０４をセットし（ステップ１００３）、前のステップのメモリ書き込みによりセットされた、ページテーブル７０３の変更フラグ７０３ｃをクリアする（ステップ１００４）。つまり、正規のファイル書き込みの場合は変更フラグ７０３ｃをクリアする。これにより、ファイルシステムのキャッシュをマップしているページテーブルエントリの変更フラグ７０３ｃにより、キャッシュに対して不正な書き込みがあったかどうかを検出できる。
【００５４】
次に、図１１によりＯＳが障害停止した時の処理について説明する。ステップ１１０１からステップ１１０５は、ファイルシステムキャッシュ領域８０１の各ページを検査するループを構成している。
【００５５】
ステップ１１０２では、検査対象となっている仮想ページがファイルシステムキャッシュとして有効なデータを格納しているかを、キャッシュ管理テーブル９００の有効フラグ９０１により検査する。有効なデータを格納していない場合は、次のページへ検査対象として（ステップ１１０５）、ステップ１１０１へ戻る。
【００５６】
有効なデータを含んでいる場合は、ページテーブル７０３の検査対象仮想ページに対応するエントリの変更フラグ７０３ｃを検査する（ステップ１１０３）。ここで、変更フラグが設定されていることは、ファイルシステムの正規の処理以外の処理によりファイルシステムキャッシュに不正な書き込みが行われたことを示している。この場合は、キャッシュ管理テーブル９００の有効フラグ９０１をクリアする（ステップ１１０４）。
【００５７】
上記の処理を、ファイルシステムキャッシュ領域８０１のすべてのページに対して実行する。
【００５８】
計算機の再起動処理は、第１の実施形態と同様である。つまり、主記憶領域１０４ｂを保持する再起動処理を実施する。
【００５９】
本実施形態での、ファイルシステムの初期化処理を図１２に示す。この処理は、第１の実施形態のログキャッシュテーブル初期化処理（ステップ６０１〜）の処理と同様に、主記憶領域１０４ｂに保存されているデータよりファイルシステムを更新する。
【００６０】
まず、主記憶１０４内にあるリブートフラグ４０１を見て、主記憶領域１０４ｂを保存する再起動であったかどうか検査する（ステップ１２０１）。そうでない場合は、ステップ１２０２へ進む。
【００６１】
テップ１２０２からの処理では、キャッシュ管理テーブル９００とキャッシュ用メモリの割り当て（ステップ１２０２）と、テーブル９００の初期化（ステップ１２０３）を実行して、その他のファイルシステム初期化処理を実行する。
【００６２】
主記憶領域１０４ｂが保持される再起動処理中である場合は、ステップ１２０４から実行する。ここからの処理により、主記憶領域１０４ｂのキャッシュデータをファイルシステムに組み込む。
【００６３】
まず、保存されている主記憶領域１０４ｂを保存範囲４０２より取得して（ステップ１２０４）、この領域を主記憶から割り当てられたものとしてカーネル内のメモリ管理のデータ構造に登録する（ステップ１２０５）。
【００６４】
次に、主記憶領域１０４ｂ内のキャッシュ管理テーブル９００を参照して、有効フラグ９０１と変更フラグ９０４がセットされているエントリについて、キャッシュ内容をディスク１０２へ書き込む（ステップ１２０６）。書き込む内容は物理ページアドレス９０２、書き込む位置はディスクアドレス９０３より取得できる。
【００６５】
ディスク１０２へのキャッシュ内容書き込みが終了したら、管理テーブル９００を初期化し（ステップ１２０３）、その他のファイルシステム初期化処理を実行する。
【００６６】
本実施形態によれば、ＯＳが障害により停止した時に、ファイルシステムのキャッシュにディスクに未反映のファイルデータがある場合でも、ＯＳ再起動時にそれをディスクに反映することができ、データの消失を防ぐことができる。
【００６７】
これまで示した第１と第２の実施形態を両方同一のファイルシステムに組み込んでもよい。これにより、ファイルシステム構造とファイル内容の両方について、データ消失を防ぐことができる。
【００６８】
また、従来技術に示した追記書き込み型ファイルシステムにも本実施形態は適用可能である。追記書き込み型ファイルシステムにおいては、ファイルシステム、および、ファイル内容の更新データは、常に追記というかたちでディスク１０２に記録される。すなわち、更新ログの積み重ねによりファイルシステムを構築している。
【００６９】
このようなファイルシステムの場合、主記憶１０４に構成するキャッシュも更新ログのキャッシュとすることができる。ここで、ファイルシステム更新操作は常に追記によるため、既にキャッシュ上にある更新ログへの書き込みは発生しない。これらの更新ログを本実施形態での方法で管理すれば、つまり、ログの破壊をページテーブル７００の変更フラグ７０３ｃにより検査すれば、障害停止時に更新ログが破壊されていないかどうかを容易に知ることができる。
【００７０】
また、これまで示した実施の形態では、ＯＳのファイルシステムが計算機再起動の前後で保存される領域１０４ｂを利用していたが、次の実施形態では、ユーザプログラムが主記憶領域１０４ｂを管理してディスク１０２の内容をキャッシュしている場合について説明する。
【００７１】
この場合は、OSは、ユーザプログラムに対して、主記憶領域104bの割り当て手段1031と、主記憶領域104b中のメモリのユーザ領域へのマッピング操作手段1302、OS再起動後の主記憶領域104bの再割当手段1303を提供する。このマッピング操作手段は、ページテーブル700を操作することにより、主記憶領域104b中のメモリのユーザ空間へのマップ、マップ解除等の操作を実行する。図13には、主記憶領域104b内のメモリがユーザ領域にマップされている様子を示している。
【００７２】
ユーザプログラムは、このマッピング手段１３０２を利用して主記憶１０４ｂ内のメモリを自由にマップでき、マップ先にディスク１０２の内容を読み込むことも可能である。これにより、ユーザプログラムはディスク１０２の内容を主記憶１０４ｂにキャッシュすることが可能となる。
【００７３】
ユーザプログラムは、第２の実施の形態でのキャッシュ管理テーブル９００と同様のデータ構造を保持している。管理テーブル９００により、主記憶領域１０４ｂに保存されている内容が、ディスク１０２上のどの領域に対応するかを管理する。この管理テーブル９００も、第２の実施形態と同様に、主記憶領域１０４ｂに配置する。
【００７４】
ＯＳは、主記憶領域１０４ｂに格納されているデータの内容については一切関与しない。但し、ステップ５０１から始まる再起動手順だけは、第１の実施の形態と同様に、主記憶領域１０４ｂが存在することを保存範囲４０２より知り、領域１０４ｂを保存してＯＳの起動処理を実行する。更に、ＯＳに渡す構成情報から主記憶領域１０４ｂを除外して、ＯＳに主記憶領域１０４ｂを利用させないようにする。
【００７５】
ＯＳが障害停止して再起動した場合、ユーザプログラムは、これまで説明した実施形態と同様に、主記憶領域再割り当て手段１３０３により主記憶領域１０４ｂを再びプログラムの管理下に置く。これにより、再び記憶領域１０４ｂを参照することができるようになり、障害停止前にディスク１０２に反映されなかったキャッシュ内容を取得することが可能となる。
【００７６】
この実施形態によれば、ＯＳのファイルシステムを経由せずに直接二次記憶装置にアクセスして、ユーザプログラムの管理するメモリに記憶装置内のデータをキャッシュするようなユーザプログラムにおいて、計算機障害時の再起動後にキャッシュ内容を回復することが可能となる。
【００７７】
また、図１４に示すように、計算機１００の主電源装置１４０１とは独立して主記憶１０４の内容を保護する補助電源装置１４０２を備える計算機では、主電源装置１４０１の障害により計算機装置が停止しても、主記憶１０４の内容を保存することができる。これと、これまで説明してきた実施の形態を組み合わせると、主電源装置１４０１の障害により計算機が停止した場合でも、記憶領域１０４ｂの内容より停止時のキャッシュの内容を復元できる。
【００７８】
これまで説明した実施の形態では、主記憶領域１０４ｂに直接キャッシュ内容を格納していたが、計算機停止時に、ＯＳ内のデータ構造より同様のデータ構造を構築して再起動、および、回復処理を実施しても良い。
【００７９】
【発明の効果】
本発明によれば、ＯＳ停止前に実行され主記憶１０４内のキャッシュに記録されているが、ディスク１０２には反映されていないファイルシステム操作を復元できる。これにより、従来技術では同期Ｉ／Ｏにより実行しなければならなかったファイルシステム操作を非同期Ｉ／Ｏにより実行でき、同期Ｉ／Ｏによる性能劣化を抑止できる。
【００８０】
また、従来技術では複数のディスクへ１０２の書き込み処理を１つにまとめてシーケンシャルライトとしているファイルシステムでは、メモリ上の書き込みデータをディスク１０２に書き込む前にＯＳが停止してしまった場合、それらが失われる問題があった。本発明によれば、これらのまとめ書きするデータを主記憶領域１０４ｂに配置することにより、ＯＳ停止によるデータの消失を防ぐことができる。
【００８１】
また、ファイルシステムのキャッシュにディスク１０２に未反映のファイルデータがある場合でも、ＯＳ再起動時にそれをディスク１０２に反映することができ、データの消失を防ぐことができる。
【００８２】
また、ＯＳのファイルシステムを経由せずに直接二次記憶装置にアクセスして、ユーザプログラムの管理するメモリに二次記憶装置内のデータをキャッシュするようなユーザプログラムにおいて、計算機障害時の再起動後にキャッシュ内容を回復することが可能となる。
【図面の簡単な説明】
【図１】本発明の実施の形態における計算機を示す図である。
【図２】本発明の第１の実施の形態におけるファイルシステム更新履歴を記録するデータ構造を示す図である。
【図３】本発明の第１の実施の形態におけるファイルシステム構造更新操作手順を示すフローチャートである。
【図４】本発明の第１の実施の形態における計算機再起動処理に関連するデータ構造を示す図である。
【図５】本発明の第１の実施の形態における計算機の起動手順を示すフローチャートである。
【図６】本発明の第１の実施の形態におけるファイルシステム初期化処理手順を示すフローチャートである。
【図７】本発明の第２の実施の形態における仮想記憶管理のデータ構造を示す図である。
【図８】本発明の第２の実施の形態におけるファイルシステムと仮想記憶管理のデータ構造を示す図である。
【図９】本発明の第２の実施の形態におけるファイルシステムキャッシュの管理テーブルのデータ構造を示す図である。
【図１０】本発明の第２の実施の形態におけるファイルへの書き込み手順を示すフローチャートである。
【図１１】本発明の第２の実施の形態における障害停止時のファイルシステム停止処理を示す図である。
【図１２】本発明の第２の実施の形態におけるファイルシステム初期化処理手順を示すフローチャートである。テム停止処理を示す図である。
【図１３】本発明の第３の実施の形態におけるメモリ管理の様子を示す図である。
【図１４】本発明の第４の実施の形態における計算機装置の構成す図である。
【符合の説明】
１００…計算機、      １０１…プロセッサ、      １０２…ディスク装置、
１０３…バス、        １０４…主記憶、
１０４ａ，１０４ｂ…主記憶１０４内の領域、    １０５…読取専用メモリ、
２００ないし２１０…データ構造、    ３０１ないし３０６…処理ステップ、
４０１ないし４０２…データ構造、
５０１ないし５０５…計算機起動時の処理ステップ、
６０１ないし６０７…ファイルシステムの初期化処理ステップ、
７０１ないし７０４…計算機の仮想記憶管理のためのデータ構造、
８０１…ファイルシステムキャッシュを格納する仮想アドレス範囲、
９００ないし９０４…ファイルシステムキャッシュを管理するデータ構造、
１００１ないし１００５…ファイル書き込み処理ステップ、
１１０１ないし１１０５…計算機停止時のファイルシステム停止処理ステップ、
１２０１ないし１２０６…計算機再起動時のファイルシステム初期化処理ステップ、
１３０１ないし１３０３…ＯＳがユーザプログラムに提供する主記憶管理手段、
１４０１ないし１４０２…電源装置。
【図１】
0003959870.tif 000002
【図２】
0003959870.tif 000003
【図３】
0003959870.tif 000004
【図４】
0003959870.tif 000005
【図５】
0003959870.tif 000006
【図６】
0003959870.tif 000007
【図７】
0003959870.tif 000008
【図８】
0003959870.tif 000009
【図９】
0003959870.tif 000010
【図１０】
0003959870.tif 000011
【図１１】
0003959870.tif 000012
【図１２】
0003959870.tif 000013
【図１３】
0003959870.tif 000014
【図１４】
0003959870.tif 000015