(57)【特許請求の範囲】
【請求項１】
不揮発性の主記憶部と、
前記主記憶部に記憶されているデータの複製を記憶する不揮発性のバックアップ記憶部と、
プロセッサ部から送出された、前記主記憶部に対する書込み対象のデータと当該書込み対象のデータの書込み先を指定する書込み先アドレスとを含む書込みアクセスを検出した場合に、前記書込み先アドレスによって指定される記憶領域に既に記憶されているデータを読取る読取手段と、
前記読取手段で読取られた前記データと、前記書込みアクセスに含まれる前記書込み先アドレスとを含むバックアップデータを生成する生成手段と、
前記バックアップ記憶部の空き容量を算出し、前記空き容量が予め定められた閾値以下である場合に、割込み信号を前記プロセッサ部に送出する閾値チェック手段と、
前記バックアップデータを前記バックアップ記憶部へ書込む第１の書込手段と、
前記バックアップデータが前記バックアップ記憶部に書込まれた後、前記書込み先アドレスによって指定される前記主記憶部上の記憶領域へ、前記書込み対象のデータを書込む第２の書込手段と、
前記バックアップ記憶部のうち、順に書き込まれていく前記バックアップデータの先頭位置を示す先頭アドレスを保持する先頭アドレス保持部と、
前記バックアップ記憶部のうち、次の前記バックアップデータを書き込む位置を示すアドレス値を保持し、前記バックアップデータが書き込まれるたびに前記アドレス値を更新する書込ポインタ保持部と、
前記割込み信号の受信を契機として、復元目標となる前記主記憶部の状態を作成するためのコミット処理の実行が前記プロセッサ部から指示されるたびに、現時点の前記書込ポインタに保持された前記アドレス値を前記先頭アドレスに更新して、前記コミット処理が指示された時点から次の前記コミット処理までに前記第１の書込手段によって新たに前記バックアップ記憶部に書込まれる一連の前記バックアップデータを示すシーケンスを切り替えるコミット手段と、
を備えることを特徴とする情報処理装置。
【請求項２】
前記第２の書込手段は、前記主記憶部の記憶内容を書戻す旨を指示された場合に、前記バックアップ記憶部に記憶されたバックアップデータのなかから、最新の前記シーケンスに含まれる前記データおよび前記書込み先アドレスを抽出し、当該データを当該書込み先アドレスが示す前記主記憶部上の記憶領域へ書込む、
請求項１に記載の情報処理装置。
【請求項３】
前記プロセッサ部は、前記割込み信号を受信した場合、前記情報処理装置を再起動し、再起動後、前記コミット処理の指示の前に、前記主記憶部の記憶内容を書戻す旨を指示し、
前記第２の書込手段は、前記プロセッサ部からの前記主記憶部の記憶内容を書戻す旨の指示を受けた場合に、前記バックアップ記憶部に記憶されたバックアップデータのなかから、最新の前記シーケンスに含まれる前記データおよび前記書込み先アドレスを抽出し、当該データを当該書込み先アドレスが示す前記主記憶部上の記憶領域へ書込む、
請求項１に記載の情報処理装置。
【請求項４】
前記第１の書込手段は、前記プロセッサ部と前記主記憶部との間に接続され、前記プロセッサ部から前記書込みアクセスを受け、受けた前記書込みアクセスを前記主記憶部へ送出する、
請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
プロセッサ部と、
不揮発性の主記憶部と、
前記主記憶部に記憶されているデータの複製を記憶する不揮発性のバックアップ記憶部と、
前記プロセッサ部から送出された、前記主記憶部に対する書込み対象のデータと当該書込み対象のデータの書込み先を指定する書込み先アドレスとを含む書込みアクセスを検出した場合に、前記書込み先アドレスによって指定される記憶領域に既に記憶されているデータを読取る読取手段と、
前記読取手段で読取られた前記データと、前記書込みアクセスに含まれる前記書込み先アドレスとを含むバックアップデータを生成する生成手段と、
前記バックアップ記憶部の空き容量を算出し、前記空き容量が予め定められた閾値以下である場合に、割込み信号を前記プロセッサ部に送出する閾値チェック手段と、
前記バックアップデータを前記バックアップ記憶部へ書込む第１の書込手段と、
前記バックアップデータが前記バックアップ記憶部に書込まれた後、前記書込み先アドレスによって指定される前記主記憶部上の記憶領域へ、前記書込み対象のデータを書込む第２の書込手段と、
前記バックアップ記憶部のうち、順に書き込まれていく前記バックアップデータの先頭位置を示す先頭アドレスを保持する先頭アドレス保持部と、
前記バックアップ記憶部のうち、次の前記バックアップデータを書き込む位置を示すアドレス値を保持し、前記バックアップデータが書き込まれるたびに前記アドレス値を更新する書込ポインタ保持部と、
前記割込み信号の受信を契機として、復元目標となる前記主記憶部の状態を作成するためのコミット処理の実行が前記プロセッサ部から指示されるたびに、現時点の前記書込ポインタに保持された前記アドレス値を前記先頭アドレスに更新して、前記コミット処理が指示された時点から次の前記コミット処理までに前記第１の書込手段によって新たに前記バックアップ記憶部に書込まれる一連の前記バックアップデータを示すシーケンスを切り替えるコミット手段と、
を備えることを特徴とする情報処理装置。
【請求項６】
不揮発性の主記憶部と、前記主記憶部に記憶されているデータの複製を記憶する不揮発性のバックアップ記憶部とを備える情報処理装置のデータ復旧方法であって、
プロセッサ部から送出された、前記主記憶部に対する書込み対象のデータと当該書込み対象のデータの書込み先を指定する書込み先アドレスとを含む書込みアクセスを検出した場合に、前記書込み先アドレスによって指定される記憶領域に既に記憶されているデータを読取る読取ステップと、
前記読取ステップで読取られた前記データと、前記書込みアクセスに含まれる前記書込み先アドレスとを含むバックアップデータを生成する生成ステップと、
前記バックアップ記憶部の空き容量を算出し、前記空き容量が予め定められた閾値以下である場合に、割込み信号を前記プロセッサ部に送出する閾値チェックステップと、
前記バックアップデータを前記バックアップ記憶部へ書込む第１の書込ステップと、
前記バックアップデータが前記バックアップ記憶部に書込まれた後、前記書込み先アドレスによって指定される前記主記憶部上の記憶領域へ、前記書込み対象のデータを書込む第２の書込ステップと、
前記割込み信号の受信を契機として、復元目標となる前記主記憶部の状態を作成するためのコミット処理の実行が前記プロセッサ部から指示されるたびに、前記バックアップ記憶部のうち、次の前記バックアップデータを書き込む位置を示すアドレス値を保持し、前記バックアップデータが書き込まれるたびに前記アドレス値を更新する書込ポインタ保持部に保持された現時点の前記アドレス値を、前記バックアップ記憶部のうち、順に書き込まれていく前記バックアップデータの先頭位置を示す先頭アドレスに更新して、前記コミット処理が指示された時点から次の前記コミット処理までに前記第１の書込手段によって新たに前記バックアップ記憶部に書込まれる一連の前記バックアップデータを示すシーケンスを切り替えるコミットステップと、を含むことを特徴とするデータ復旧方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性の主記憶部を備える情報処理装置およびデータ復旧方法に関する。
【背景技術】
【０００２】
近年、フラッシュメモリ、ＭＲＡＭ（Magnetoresistive Random Access Memory）、ＦｅＲＡＭ（Ferroelectric Random Access Memory）やＰＲＡＭ（Phase change Random Access Memory）といった電源供給を断っても記録した内容が失われない不揮発性メモリの技術開発が進んでいる。将来、それらの不揮発性メモリが、現在コンピュータの主記憶部として広く使われているＤＲＡＭ等の揮発性メモリにとって代わることが予想される。
【０００３】
このような不揮発性メモリをコンピュータの主記憶部に使用すると、プログラムの処理中に主記憶部への電源供給が途切れた場合でも、その主記憶部に保存されたデータやシステムの状態は主記憶部に残り、失われない。これにより、電源供給復旧時に、電源が切れた瞬間の状態からコンピュータの動作を再開することが容易になり、コンピュータの起動時間が短縮され、操作性が向上する。また、不揮発性メモリは、揮発性メモリと異なり、記憶内容を保持するための電源装置が必要ないため、コンピュータ全体としての消費電力の削減、電池の小型化、電池の長寿命化が期待される。
【０００４】
このような不揮発性メモリを使用したコンピュータで不意の電源断を経てその後電源が復旧した際に、電源が切れた瞬間の状態を保持してかつ復元する方法としては、電源断が生じた場合に電源監視機構によってＣＰＵに割込みが通知され、オペレーティングシステムのような制御ソフトウェアによってＣＰＵの状態を主記憶部に保存する方法が開示されている（特許文献１参照）。
【０００５】
【特許文献１】特開２００５−１０７５７３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記特許文献１に記載された技術では、不意の電源断後の電源が復旧した時に、プロセッサの状態のような揮発性のシステム状態を復元できるようにするために、不意の電源断が起きたときにシステム状態を不揮発性メモリ（以下、不揮発性主記憶部という）に格納する間の電源を確保する必要がある。そのため、別途キャパシタ等の電池が必要である。すなわち、不揮発性主記憶部に記憶されたシステム状態を保持するための電池は必要としないが、不意の電源断時にシステム状態を記憶するための電池が必要である。一般にコンピュータが書込み処理を完結するために備える電池は、二次電池であることが多く、頻繁な電源断が生じた場合に十分な電力を供給できない可能性がある。
【０００７】
また、上記特許文献１に記載された技術では、不揮発性主記憶部の内容を含むシステムの状態を電源断以前の特定の時点の状態に戻すために、処理のログを取っている。しかし、組込み装置のような限られた資源しか使用できない装置では、物理的な制約等により、ログを書込む領域として少量のメモリしか使用できない場合がある。このような場合、少量のログ領域からログデータが溢れてしまうと、システムの状態を以前のどの状態も復元できなくなってしまい、システム全体として処理を継続することができなくなるという問題があった。
【０００８】
本発明は、上記に鑑みてなされたものであって、不揮発性主記憶部を備えた情報処理装置において、電池のような追加の電源を用いることなく、不意の電源断が起きた場合でも、その後の電源復旧時に不揮発性主記憶部に格納されたデータの状態を復元することができ、かつ復元に必要なバックアップデータを格納するための記憶領域を確保できるか否かを判断することができる情報処理装置およびデータ復旧方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するために、本発明は、不揮発性の主記憶部と、前記主記憶部に記憶されているデータの複製を記憶する不揮発性のバックアップ記憶部と、プロセッサ部から送出された、前記主記憶部に対する書込み対象のデータと当該書込み対象のデータの書込み先を指定する書込み先アドレスとを含む書込みアクセスを検出した場合に、前記書込み先アドレスによって指定される記憶領域に既に記憶されているデータを読取る読取手段と、前記読取手段で読取られた前記データと、前記書込みアクセスに含まれる前記書込み先アドレスとを含むバックアップデータを生成する生成手段と、前記バックアップ記憶部の空き容量を算出し、前記空き容量が予め定められた閾値以下である場合に、割込み信号を前記プロセッサ部に送出する閾値チェック手段と、前記バックアップデータを前記バックアップ記憶部へ書込む第１の書込手段と、前記バックアップデータが前記バックアップ記憶部に書込まれた後、前記書込み先アドレスによって指定される前記主記憶部上の記憶領域へ、前記書込み対象のデータを書込む第２の書込手段と、前記バックアップ記憶部のうち、順に書き込まれていく前記バックアップデータの先頭位置を示す先頭アドレスを保持する先頭アドレス保持部と、前記バックアップ記憶部のうち、次の前記バックアップデータを書き込む位置を示すアドレス値を保持し、前記バックアップデータが書き込まれるたびに前記アドレス値を更新する書込ポインタ保持部と、前記割込み信号の受信を契機として、復元目標となる前記主記憶部の状態を作成するためのコミット処理の実行が前記プロセッサ部から指示されるたびに、現時点の前記書込ポインタに保持された前記アドレス値を前記先頭アドレスに更新して、前記コミット処理が指示された時点から次の前記コミット処理までに前記第１の書込手段によって新たに前記バックアップ記憶部に書込まれる一連の前記バックアップデータを示すシーケンスを切り替えるコミット手段と、を備えることを特徴とする。
【００１０】
また、本発明は、プロセッサ部と、不揮発性の主記憶部と、前記主記憶部に記憶されているデータの複製を記憶する不揮発性のバックアップ記憶部と、前記プロセッサ部から送出された、前記主記憶部に対する書込み対象のデータと当該書込み対象のデータの書込み先を指定する書込み先アドレスとを含む書込みアクセスを検出した場合に、前記書込み先アドレスによって指定される記憶領域に既に記憶されているデータを読取る読取手段と、前記読取手段で読取られた前記データと、前記書込みアクセスに含まれる前記書込み先アドレスとを含むバックアップデータを生成する生成手段と、前記バックアップ記憶部の空き容量を算出し、前記空き容量が予め定められた閾値以下である場合に、割込み信号を前記プロセッサ部に送出する閾値チェック手段と、前記バックアップデータを前記バックアップ記憶部へ書込む第１の書込手段と、前記バックアップデータが前記バックアップ記憶部に書込まれた後、前記書込み先アドレスによって指定される前記主記憶部上の記憶領域へ、前記書込み対象のデータを書込む第２の書込手段と、前記バックアップ記憶部のうち、順に書き込まれていく前記バックアップデータの先頭位置を示す先頭アドレスを保持する先頭アドレス保持部と、前記バックアップ記憶部のうち、次の前記バックアップデータを書き込む位置を示すアドレス値を保持し、前記バックアップデータが書き込まれるたびに前記アドレス値を更新する書込ポインタ保持部と、前記割込み信号の受信を契機として、復元目標となる前記主記憶部の状態を作成するためのコミット処理の実行が前記プロセッサ部から指示されるたびに、現時点の前記書込ポインタに保持された前記アドレス値を前記先頭アドレスに更新して、前記コミット処理が指示された時点から次の前記コミット処理までに前記第１の書込手段によって新たに前記バックアップ記憶部に書込まれる一連の前記バックアップデータを示すシーケンスを切り替えるコミット手段と、を備えることを特徴とする。
【００１１】
また、本発明は、情報処理装置で実行されるデータ復旧方法であって、不揮発性の主記憶部と、前記主記憶部に記憶されているデータの複製を記憶する不揮発性のバックアップ記憶部とを備える情報処理装置のデータ復旧方法であって、プロセッサ部から送出された、前記主記憶部に対する書込み対象のデータと当該書込み対象のデータの書込み先を指定する書込み先アドレスとを含む書込みアクセスを検出した場合に、前記書込み先アドレスによって指定される記憶領域に既に記憶されているデータを読取る読取ステップと、前記読取ステップで読取られた前記データと、前記書込みアクセスに含まれる前記書込み先アドレスとを含むバックアップデータを生成する生成ステップと、前記バックアップ記憶部の空き容量を算出し、前記空き容量が予め定められた閾値以下である場合に、割込み信号を前記プロセッサ部に送出する閾値チェックステップと、前記バックアップデータを前記バックアップ記憶部へ書込む第１の書込ステップと、記バックアップデータが前記バックアップ記憶部に書込まれた後、前記書込み先アドレスによって指定される前記主記憶部上の記憶領域へ、前記書込み対象のデータを書込む第２の書込ステップと、前記割込み信号の受信を契機として、復元目標となる前記主記憶部の状態を作成するためのコミット処理の実行が前記プロセッサ部から指示されるたびに、前記バックアップ記憶部のうち、次の前記バックアップデータを書き込む位置を示すアドレス値を保持し、前記バックアップデータが書き込まれるたびに前記アドレス値を更新する書込ポインタ保持部に保持された現時点の前記アドレス値を、前記バックアップ記憶部のうち、順に書き込まれていく前記バックアップデータの先頭位置を示す先頭アドレスに更新して、前記コミット処理が指示された時点から次の前記コミット処理までに前記第１の書込手段によって新たに前記バックアップ記憶部に書込まれる一連の前記バックアップデータを示すシーケンスを切り替えるコミットステップと、を含むことを特徴とする。
【発明の効果】
【００１２】
本発明によれば、不揮発性主記憶部を備える情報処理装置において、追加の電源を用いることなく、不意の電源断が起きても、電源復旧時に、電源断した時点に最も近い安定した不揮発性主記憶の内容を復元することができ、かつ復元に必要なバックアップデータを格納するための記憶領域を確保できるか否かを判断することができるという効果を奏する。
【発明を実施するための最良の形態】
【００１３】
以下に添付図面を参照して、この発明にかかる情報処理装置およびデータ復旧方法の最良な実施の形態を詳細に説明する。本発明にかかる情報処理装置をパーソナルコンピュータ（以下、ＰＣと示す）に適用した例を示すが、これに限定されるものではなく、主記憶部を備える装置であれば、サーバ装置、ゲーム機等の様々な装置に適用することができる。
【００１４】
本実施の形態について、添付図面を参照して説明する。まず、本発明が適用されるＰＣの構成例について説明する。図１は、本実施の形態にかかるＰＣ１００の構成を示すブロック図である。
【００１５】
本実施の形態にかかるＰＣ１００は、バックアップ部１１０と、不揮発性主記憶部１２０と、不揮発性バックアップメモリ１３０と、コミット部１４０と、ロールバック部１５０と、プロセッサ部１６０と、制御ソフトウェア１７０と、バス１８０と、割込線１９０とを備えている。また、ＰＣ１００は、電源線１０を介して電源２００から電力を供給されている。
【００１６】
不揮発性主記憶部１２０は、ＭＲＡＭやＦｅＲＡＭ等の不揮発性メモリである。不揮発性主記憶部１２０には、プロセッサ部１６０上で動作するソフトウェアのプログラムやそのソフトウェアが使用するデータが格納される。なお、プロセッサ部１６０は、不揮発性主記憶部１２０へ書込みを行う際に、書込みアクセスを主記憶アクセス制御部１１１へ送出する。主記憶アクセス制御部１１１は、プロセッサ部１６０から受信した書込みアクセスに応じて、不揮発性主記憶部１２０への書込みを行う。ここで、書込みアクセスとは、プロセッサ部１６０が不揮発性主記憶部１２０へ書込むデータと、そのデータの書込み先を指定する不揮発性主記憶部１２０のアドレス（以下、書込み先アドレスという）とを含む情報である。
【００１７】
不揮発性バックアップメモリ１３０は、不揮発性主記憶部１２０と同様に不揮発性メモリである。不揮発性バックアップメモリ１３０は、バックアップデータを記録する。ここで、バックアップデータとは、不揮発性主記憶部１２０への書込みアクセスを検出した際に、書込みアクセスに含まれる書込み先アドレスが示す不揮発性記憶部１２０の記憶領域に既に格納されているデータを複製したデータであり、具体的には、不揮発性記憶部１２０へのデータの復旧を可能にするために少なくとも不揮発性主記憶部１２０において更新されるデータのアドレスである書込み先アドレスと、そのアドレスに格納されていた更新前のデータ（以下、元データという）とを含む。
【００１８】
バックアップ部１１０は、不揮発性主記憶部１２０への書込み時にバックアップデータを作成して不揮発性バックアップメモリ１３０に書込む。具体的には、バックアップ部１１０は、不揮発性主記憶部１２０へのアクセスを監視して、不揮発性主記憶部１２０への書込みアクセスを検出した場合に、書込みアクセスに含まれた書込み先アドレスによって指定される記憶領域に既に記憶されている元データを不揮発性主記憶部１２０から読み出す。次に、バックアップ部１１０は、書込みアクセスに含まれた書込み先アドレスと元データからバックアップデータを生成し、不揮発性バックアップメモリ１３０に格納する。その後、バックアップ部１１０は、書込みアクセスで不揮発性主記憶部１２０への書込みを指示されたデータを実際に不揮発性主記憶部１２０の書込み先アドレスによって指定された記憶領域に書込む。
【００１９】
バックアップ部１１０は、さらに主記憶アクセス制御部１１１と、バックアップ制御部１１２と、バックアップメモリアクセス制御部１１３と、バックアップデータ生成部１１４と、バックアップメモリ先頭アドレス保持部１１５と、書込ポインタ保持部１１６と、閾値保持部１１７と、閾値チェック部１１８とを備えている。
【００２０】
主記憶アクセス制御部１１１は、バス１８０を介して受信した不揮発性主記憶部１２０への読み書きアクセスに応じ、不揮発性主記憶部１２０に格納されたデータを読み出し、不揮発性主記憶部１２０にデータを書込む。ただし、主記憶アクセス制御部１１１は、バス１８０を介した不揮発性主記憶部１２０への書込みアクセスが検出された場合に、すぐに不揮発性主記憶部１２０にデータを書込まず、一旦バックアップ制御部１１２に書込み先アドレスを送出する。
【００２１】
また、主記憶アクセス制御部１１１は、バックアップ制御部１１２からの不揮発性主記憶部１２０へのアクセスに応じ、不揮発性主記憶部１２０に格納されたデータを読み書きする。主記憶アクセス制御部１１１は、バス１８０を介した不揮発性バックアップメモリ１３０へのアクセスをバックアップ制御部１１２に送出する。また、主記憶アクセス制御部１１１は、書込ポインタ保持部１１６へのアクセスをバックアップ制御部１１２に送出する。なお、主記憶アクセス制御部１１１は、特許請求の範囲に記載した読取手段および第２の書込手段に対応する。
【００２２】
バックアップ制御部１１２は、主記憶アクセス制御部１１１から不揮発性バックアップメモリ１３０への書込みアクセスを受信した場合、データをバックアップするために、主記憶アクセス制御部１１１を経由して不揮発性主記憶部１２０から不揮発性主記憶部１２０の書込み先アドレスが示す記憶領域に格納されているデータを読み出す。また、バックアップ制御部１１２は、バックアップデータ生成部１１４に書込み先アドレスおよび不揮発性主記憶部１２０から読み出したデータを送出する。
【００２３】
また、バックアップ制御部１１２は、バックアップメモリアクセス制御部１１３を経由して不揮発性バックアップメモリ１３０に格納されたデータを読み書きする。また、バックアップ制御部１１２は、書込ポインタ保持部１１６に格納された書込ポインタおよびバックアップメモリ先頭アドレス保持部１１５に格納されたバックアップメモリ先頭アドレスを読み書きする。なお、バックアップ制御部１１２は、特許請求の範囲に記載した第１の書込手段に対応する。
【００２４】
バックアップメモリアクセス制御部１１３は、バックアップ制御部１１２からのアクセスに応じて不揮発性バックアップメモリ１３０に格納されたデータを読み書きする。
【００２５】
バックアップデータ生成部１１４は、バックアップ制御部１１２から送信された不揮発性主記憶部１２０の書込み先アドレスおよび不揮発性主記憶部１２０の書込み先アドレスが示す記憶領域から読み出した元データからバックアップデータを生成する。
【００２６】
バックアップメモリ先頭アドレス保持部１１５は、不揮発性バックアップメモリ１３０の先頭アドレスを保持する。バックアップメモリ先頭アドレス保持部１１５は、バックアップ制御部１１２からの要求に応じてその内容を更新する、またはその内容をバックアップ制御部１１２に送出する。
【００２７】
書込ポインタ保持部１１６は、書込ポインタを保持する。ここで、書込ポインタは、バックアップデータを書込む不揮発性バックアップメモリ１３０上のアドレスである。書込ポインタ保持部１１６は、バックアップ制御部１１２からの要求に応じてその内容を更新し、またはその内容をバックアップ制御部１１２に送出する。
【００２８】
閾値保持部１１７は、不揮発性バックアップメモリ１３０の空き容量に関する閾値を保持する。また、閾値保持部１１７は、バックアップ制御部１１２からの要求に応じてその内容を更新したり、後述する閾値チェック部１１８からの読み出し要求に応じてその内容を送出する。閾値保持部１１７が保持する閾値は、閾値チェック部１１８で不揮発性バックアップメモリ１３０の空き容量チェックにおいて使用できるものであれば、どんなものでもよい。例えば、不揮発性バックアップメモリ１３０の容量に対する百分率や、絶対的な容量を示す値などである。
【００２９】
閾値チェック部１１８は、バックアップ制御部１１２からの指示により、書込ポインタ保持部１１６が保持している書込ポインタと、バックアップメモリ先頭アドレス保持部１１５が保持している不揮発性バックアップメモリ１３０の先頭アドレスから、不揮発性バックアップメモリ１３０の空き容量を計算する。閾値チェック部１１８は、計算結果が示す不揮発性バックアップメモリ１３０の空き容量と、閾値保持部１１７が保持している閾値から求めたバックアップメモリの空き容量の閾値とを比較することにより、バックアップメモリの空き容量が、あらかじめ設定された閾値以下であるかどうかをチェックする。
【００３０】
閾値チェック部１１８は、不揮発性バックアップメモリ１３０の空き容量が閾値以下であった場合は、プロセッサ部１６０に接続している割込線１９０を介してプロセッサ部１６０に割込みを送出する。それにより、不揮発性バックアップメモリ１３０の空き容量があらかじめ設定された閾値以下であることを制御ソフトウェア１７０に通知する。
【００３１】
ただし、閾値チェック部１１８がプロセッサ部１６０に割込みを送出する方法は、必ずしも図１のように専用の割込線１９０である必要はなく、バス１８０を介して送出してもよい。
【００３２】
また、バックアップ部１１０は、バックアップ処理そのものを行うか否かのスイッチを備え、不揮発性主記憶部１２０への書込みに対するバックアップ処理全体を有効にしたり無効にしたりする機能もあわせ持つ。なお、不揮発性主記憶部１２０に対する書込みアクセスを検出した場合にバックアップ処理を行うか否かを示すこのスイッチは、物理的なスイッチでも、メモリ上に保持した情報であってもよい。
【００３３】
コミット部１４０は、コミット処理を行う。コミット処理とは、突然の電源断を経て電源が復旧した場合であって、不揮発性主記憶部１２０の状態を復元する必要が生じた場合に、復元目標となる不揮発性主記憶部１２０の状態（以下、チェックポイントという）を作成する一連の処理のことである。具体的には、コミット部１４０が、コミット処理を行った時点以降にバックアップ部１１０によって新たに不揮発性バックアップメモリ１３０に記憶されたバックアップデータを、不揮発性主記憶部１２０の記憶内容を書戻す際に用いるバックアップデータとして、読み出し許可と設定し、それ以前に記憶されたバックアップデータを上書き許可と設定することにより実現する。また、このように、コミット部１４０がコミット処理を指示された時点以前に記憶されたバックアップデータを上書き許可と設定することにより、不揮発性バックアップメモリ１２０においてコミット処理を指示された時点以前に記憶されたバックアップデータを記憶していた領域が空き領域となる。なお、コミット処理の詳細は、不揮発性バックアップメモリ１３０のデータの使用方法（スタックかリングバッファか等）に依存する。
【００３４】
ロールバック部１５０は、不揮発性バックアップメモリ１３０に格納されているバックアップデータから不揮発性主記憶部１２０の内容を復元するために必要な、読み出し許可と設定されたバックアップデータを読み出し、読み出された不揮発性主記憶部１２０にバックアップデータから抽出した元データを書き戻す。この操作により不揮発性主記憶部１２０を一番最近に作成したチェックポイントの状態を復元する。
【００３５】
このロールバック部１５０が正しい復元処理を行うためには、不揮発性バックアップメモリ１３０に格納されているバックアップデータの中から、不揮発性主記憶部１２０の状態を最新のチェックポイントの状態に復元するために必要なバックアップデータを読み出すことができることが重要である。つまり、不揮発性バックアップメモリ１３０は、不揮発性主記憶部１２０の状態を最新のチェックポイントの状態に復元するために必要なバックアップデータを管理する必要がある。したがって、コミット処理では、不揮発性バックアップメモリ１３０が管理対象としている復元処理に必要な１または複数のバックアップデータとして、当該コミット処理以前に管理していた１または複数のバックアップデータから、新たに不揮発性バックアップメモリ１３０に記憶するバックアップデータに、読み出し許可を設定する処理を行う。
【００３６】
ここで、あるコミット処理から次のコミット処理までに不揮発性バックアップメモリ１３０に記録され管理の対象となる一連のバックアップデータのことをシーケンスと呼ぶ。また、最後のコミット処理以降に不揮発性バックアップメモリ１３０に記録された一連のバックアップデータを、最新シーケンスという。つまり、ある時点で不揮発性バックアップメモリ１３０が管理しているシーケンスが最新シーケンスであり、最新シーケンスとして新たに不揮発性バックアップメモリ１３０に記憶するバックアップデータを読み出し許可と設定する処理とは、具体的に言えば、最新シーケンスの切替え処理である。
【００３７】
プロセッサ部１６０は、制御ソフトウェア１７０を動作させる。制御ソフトウェア１７０は、通常の処理においては不揮発性主記憶部１２０のデータを操作してシステム固有の機能を提供する。
【００３８】
制御ソフトウェア１７０は、プロセッサ部１６０上で動作するソフトウェア（プログラム）である。制御ソフトウェア１７０は、プロセッサ部１６０をはじめとしたハードウェアの動作を制御する。また、制御ソフトウェア１７０は、その管理の下で、プロセッサ部１６０上で他のソフトウェアを動作させる。例えば、制御ソフトウェア１７０が一般的なオペレーティングシステムである場合、制御ソフトウェア１７０の管理の下、プロセッサ部１６０でアプリケーションソフトウェアが動作する。複数のアプリケーションソフトウェアをプロセッサ部１６０上で動作させる場合は、制御ソフトウェア１７０は、デバイスが起こす割込みや、制御ソフトウェア１７０自身が設定したタイマによる一定時間間隔の割込み等によって、アプリケーションソフトウェアを順次切り替えて動作させる。
【００３９】
制御ソフトウェア１７０は、さらにチェックポイント作成部１７１と、チェックポイント復元部１７２を備えている。
【００４０】
チェックポイント作成部１７１は、コミット部１４０にコミット要求を出すことにより、ロールバック部１５０がロールバック可能な不揮発性主記憶部１２０の状態、つまりチェックポイントを新規に作成する。また、チェックポイント作成部１７１は、閾値チェック部１１８から割込み信号を受信した制御ソフトウェア１７０によって呼び出される。これにより、不揮発性バックアップメモリ１３０の空き容量がなくなる前にチェックポイントが作成されて最新シーケンスが切り替えられる。これによって、それまで最新シーケンスとして管理していた不揮発性バックアップメモリ１３０上のバックアップデータが不要になって空き領域となるため、減少した空き容量を回復することができる。
【００４１】
チェックポイント復元部１７２は、電源２００からの電源供給の復旧を検知した場合、ロールバック部１５０に最新のチェックポイントの内容まで不揮発性主記憶部１２０の内容をロールバックする要求を送出する。このため、チェックポイント復元部１７２は、制御ソフトウェア１７０が起動する際に、不意の電源断から電源供給が復旧して制御ソフトウェア１７０が再起動したか否かを判断する。ただし、判断手段は、どんな実装でも構わない。
【００４２】
バス１８０は、コミット部１４０、ロールバック部１５０、プロセッサ部１６０およびバックアップ部１１０を接続する。不揮発性主記憶部１２０は、バス１８０に直接接続されず、バックアップ部１１０を介してバス１８０と接続される。これにより、不揮発性主記憶部１２０へのアクセスは、すべてバックアップ部１１０を介するため、バックアップ部１１０において不揮発性主記憶部１２０へのアクセスに応じたバックアップ処理を行うことができる。なお、バックアップ部１１０の配置位置は、バス１８０と不揮発性主記憶部１２０の間に限らず、不揮発性主記憶部１２０へのアクセスを不揮発性主記憶部１２０が受け取る前に受け取ることができる位置であれば、どの位置に配置されていてもよい。また、バックアップ部１１０には、不揮発性主記憶部１２０に加え、不揮発性バックアップメモリ１３０が接続される。
【００４３】
次に、以上のように構成されているＰＣ１００のバックアップ部１１０によるバックアップ処理、コミット部１４０によるコミット処理およびロールバック部１５０によるロールバック処理について説明する。
【００４４】
図２−１、図２−２は、バックアップ部１１０が行うバックアップ処理手順を示すフローチャートである。なお、バックアップ部１１０は、バス１８０からのアクセスを受け取って動作する。
【００４５】
まず、主記憶アクセス制御部１１１は、バス１８０からのアクセスを検出する（ステップＳ２０１）。主記憶アクセス制御部１１１は、検出したアクセスが不揮発性主記憶部１２０への読出しアクセスであるか否かを判断する（ステップＳ２０２）。具体的には、アクセスに含まれる命令から不揮発性主記憶部１２０への読出しアクセスであるか否かを判断する。なお、読出しアクセスに限らず、書込みアクセス等の他のアクセスについても同様に、アクセスに含まれる命令からアクセスの種類やアクセスする記憶媒体を判断する。
【００４６】
検出したアクセスが不揮発性主記憶部１２０への読出しアクセスであると判断した場合は（ステップＳ２０２：Ｙｅｓ）、主記憶アクセス制御部１１１は不揮発性主記憶部１２０からデータを読み出し（ステップＳ２０３）、バス１８０へ読み出したデータを返す。
【００４７】
検出したアクセスが不揮発性主記憶部１２０への読出しアクセスでないと判断した場合は（ステップＳ２０２：Ｎｏ）、主記憶アクセス制御部１１１がバックアップ制御部１１２にアクセスを送出し、バックアップ制御部１１２がアクセスを受け取る（ステップＳ２０４）。バックアップ制御部１１２は、受け取ったアクセスが不揮発性主記憶部１２０への書込みアクセスであるか否かを判断する（ステップＳ２０５）。
【００４８】
受け取ったアクセスが不揮発性主記憶部１２０への書込みアクセスであると判断した場合は（ステップＳ２０５：Ｙｅｓ）、バックアップ制御部１１２はバックアップ処理が有効であるか否かを判断する（ステップＳ２０６）。バックアップ処理が有効でないと判断した場合は（ステップＳ２０６：Ｎｏ）、バックアップ処理は行わず、ステップＳ２１９に進む。バックアップ処理が有効であると判断した場合は（ステップＳ２０６：Ｙｅｓ）、バックアップ制御部１１２は主記憶アクセス制御部１１１に読出し要求を送出し、主記憶アクセス制御部１１１が不揮発性主記憶部１２０から書込み先アドレスに格納されている元データを読み出す（ステップＳ２０７）。次に、バックアップ制御部１１２は書込み先アドレスと読み出した元データとをバックアップデータ生成部１１４に送り、バックアップデータ生成部１１４は、アドレスおよび元データからバックアップデータを生成する（ステップＳ２０８）。
【００４９】
バックアップ制御部１１２は、生成したバックアップデータを書込む不揮発性バックアップメモリ１３０上のアドレスを書込ポインタ保持部１１６から読み出す（ステップＳ２０９）。バックアップメモリアクセス制御部１１３は、読み出した不揮発性バックアップメモリ１３０上のアドレスに示す記憶領域にバックアップデータを書込む（ステップＳ２１０）。バックアップ制御部１１２は、書込ポインタ保持部１１６に保持しているポインタの値を更新する（ステップＳ２１１）。
【００５０】
バックアップ制御部１１２は、閾値チェック部１１８にチェックを指示する（ステップＳ２１２）。閾値チェック部１１８は、閾値保持部１１７から閾値を読み出す（ステップＳ２１３）。閾値チェック部１１８は、書込ポインタ保持部１１６から書込みポインタを読み出す（ステップＳ２１４）。閾値チェック部１１８は、バックアップメモリ先頭アドレス保持部１１５から現在の不揮発性バックアップメモリ１３０の先頭アドレスを読み出す（ステップＳ２１５）。閾値チェック部１１８は、不揮発性バックアップメモリ１３０の空き容量を計算する（ステップＳ２１６）。閾値チェック部１１８は、不揮発性バックアップメモリ１３０の空き容量が閾値以下であるか否かを判断する（ステップＳ２１７）。不揮発性バックアップメモリ１３０の空き容量が閾値以下でないと判断した場合は（ステップＳ２１７：Ｎｏ）、ステップＳ２１９に進む。不揮発性バックアップメモリ１３０の空き容量が閾値以下であると判断した場合は（ステップＳ２１７：Ｙｅｓ）、プロセッサ部１６０に割込みをかけて空き容量が閾値以下であることを通知する（ステップＳ２１８）。具体的には、割込線１９０を介して、割込み信号をプロセッサ部１６０に送出する。主記憶アクセス制御部１１１は、不揮発性主記憶部１２０の書込み先アドレスにデータを書込む（ステップＳ２１９）。
【００５１】
ステップＳ２０５において、受け取ったアクセスが不揮発性主記憶部１２０への書込みアクセスでないと判断した場合は（ステップＳ２０５：Ｎｏ）、バックアップ制御部１１２は不揮発性バックアップメモリ１３０へのアクセスであるか否かを判断する（ステップＳ２２０）。不揮発性バックアップメモリ１３０へのアクセスであると判断した場合は（ステップＳ２２０：Ｙｅｓ）、バックアップメモリアクセス制御部１１３は不揮発性バックアップメモリ１３０のデータを読み出す、または不揮発性バックアップメモリ１３０にデータを書込む（ステップＳ２２１）。
【００５２】
不揮発性バックアップメモリ１３０へのアクセスでないと判断した場合は（ステップＳ２２０：Ｎｏ）、バックアップ制御部１１２は書込ポインタ保持部１１６へのアクセスであるか否かを判断する（ステップＳ２２３）。書込ポインタ保持部１１６へのアクセスであると判断した場合は（ステップＳ２２３：Ｙｅｓ）、バックアップ制御部１１２は書込ポインタ保持部１１６の値を読み出す、または更新する（ステップＳ２２４）。
【００５３】
書込ポインタ保持部１１６へのアクセスでないと判断した場合は（ステップＳ２２３：Ｎｏ）、バックアップ制御部１１２は閾値保持部１１７へのアクセスであるか否かを判断する（ステップＳ２２５）。閾値保持部１１７へのアクセスであると判断した場合は（ステップＳ２２５：Ｙｅｓ）、バックアップ制御部１１２は閾値保持部１１７の閾値を読み出す、または更新する（ステップＳ２２６）。閾値保持部１１７へのアクセスでないと判断した場合は（ステップＳ２２５：Ｎｏ）、処理を終了する。
【００５４】
次に、ステップＳ２１８で、プロセッサ部１６０が割込み信号を受信した場合の処理について説明する。プロセッサ部１６０は、割込み信号を受信した場合に不揮発性バックアップメモリ１３０に空き領域を生成する処理を実行する。具体的に、不揮発性バックアップメモリ１３０に空き領域を生成する処理とは、プロセッサ部１６０が割込み信号を受信した場合、制御ソフトウェア１７０に従って後述するコミット部１４０にコミット処理を指示する。コミット部１４０は、プロセッサ部１６０からの指示を受けてコミット処理を実行し、チェックポイントを生成し、不揮発性バックアップメモリ１３０上で管理している最新シーケンスを切替える。これにより、コミット処理を指示された時点以前に不揮発性バックアップメモリ１３０に記憶されたバックアップデータは上書き許可が設定されるため、不揮発性バックアップメモリ１３０において上書き許可が設定された領域は空き領域となり、新たなバックアップデータを書込むことが可能となる。
【００５５】
また、他の不揮発性バックアップメモリ１３０に空き領域を生成する処理として、プロセッサ部１６０は、割込み信号を受信した場合、制御ソフトウェア１７０に従って後述するロールバック部１５０にロールバック処理を指示する。ロールバック部１５０は、プロセッサ部１６０からの不揮発性主記憶部１２０の記憶内容を書戻す旨の指示を受けてロールバック処理を実行し、最新のチェックポイントまで不揮発性バックアップメモリ１３０に格納されたデータを書戻す。この場合、閾値保持部１１７に格納する閾値は、０（％）としてもよい。すなわち、不揮発性バックアップメモリ１３０の空き容量がなくなったと判断した時点で、最新のチェックポイントの状態に不揮発性バックアップメモリ１３０を戻すことにより、バックアップデータを格納できない状態を回避することができる。なお、ここでの閾値は、不揮発性バックアップメモリ１３０の全体容量におけるバックアップデータが格納されていない容量の割合として求めている。
【００５６】
また、さらに他の不揮発性バックアップメモリ１３０に空き領域を生成する処理として、プロセッサ部１６０は、割込み信号を受信した場合、制御ソフトウェア１７０に従ってＰＣ１００自体を再起動する。電源が再投入された場合に、ロールバック部１５０は、プロセッサ部１６０からの不揮発性主記憶部１２０の記憶内容を書戻す旨の指示を受けてロールバック処理が実行し、不揮発性主記憶１２０の状態が最新のチェックポイントの状態に復元される。このロールバック処理が実行されることにより、復元に使用された不揮発性バックアップメモリ１３０内のバックアップデータが不要となり、不揮発性バックアップメモリ１３０内に空き領域が作成される。その後、コミット処理を実行することにより、最新シーケンスの切り替え処理が行われ、不揮発性バックアップメモリ１３０内に空き領域にバックアップデータを書込むことが可能となる。この場合、閾値保持部１１７に格納する閾値は、０（％）としてもよい。すなわち、不揮発性バックアップメモリ１３０の空き容量がなくなったと判断した時点で、電源を再投入することによって不揮発性バックアップメモリ１３０に空き領域を作成するため、バックアップデータを格納できない状態を回避することができる。
【００５７】
次に、コミット部１４０によるコミット処理について説明する。図３は、コミット部１４０が行うコミット処理手順を示すフローチャートである。なお、コミット部１４０は、プロセッサ部１６０上で動作する制御ソフトウェア１７０またはロールバック部１５０からのバックアップ部１１０に対するコミット処理の指示で起動する。
【００５８】
コミット部１４０は、不揮発性バックアップメモリ１３０上の最新シーケンスを切替える（ステップＳ３０１）。このコミット処理により、この時点の不揮発性主記憶部１２０の状態が新たに不揮発性主記憶部１２０のチェックポイントとなる。コミット処理の詳細は、バックアップ部１１０の構成とバックアップデータ形式に依存する。例えば、不揮発性バックアップメモリ１３０のデータ構造がスタックである場合、書込ポインタ保持部１１６にバックアップメモリ先頭アドレス保持部１１５に保持されている値を格納することによって最新シーケンスの切替えを実現する。
【００５９】
次に、ロールバック部１５０によるロールバック処理について説明する。図４は、ロールバック部１５０が行うロールバック処理手順を示すフローチャートである。なお、ロールバック部１５０は、プロセッサ部１６０上で動作させる制御ソフトウェア１７０からの指示で起動する。
【００６０】
まず、ロールバック部１５０は、バックアップ部１１０へバックアップ処理を無効にする要求を送出する（ステップＳ４０１）。バックアップ部１１０は、バックアップ処理を無効にする（ステップＳ４０２）。これは、不揮発性主記憶部１２０にバックアップデータを書戻す際に、不意の電源断で不定となっている不揮発性主記憶部１２０のデータを不揮発性バックアップメモリ１３０にバックアップデータとして格納しないようにするためである。
【００６１】
ロールバック部１５０は、最新シーケンスを特定する（ステップＳ４０３）。なお、最新シーケンスの特定方法は、バックアップ部１１０の構成とバックアップデータの形式に依存する。次に、ロールバック部１５０は、読み出された最新シーケンス内の最新バックアップデータをＥに格納する（ステップＳ４０４）。ロールバック部１５０は、Ｅが空であるか否かを判断する（ステップＳ４０５）。
【００６２】
Ｅが空でないと判断した場合は（ステップＳ４０５：Ｎｏ）、ロールバック部１５０はＥの読み出し要求をバックアップ部１１０に送出する（ステップＳ４０６）。バックアップ部１１０は、不揮発性バックアップメモリ１３０からバックアップデータを読み出す（ステップＳ４０７）。読み出したバックアップデータをＥに格納する。ロールバック部１５０は、Ｅに含まれる書込み先アドレスへ元データを書戻す要求をバックアップ部１１０に送出する（ステップＳ４０８）。バックアップ部１１０は、不揮発性主記憶部１２０の指定されたアドレスに元データを書込む（ステップＳ４０９）。ロールバック部１５０は、次の最新シーケンス内の次のバックアップデータをＥに格納する（ステップＳ４１０）。これにより、最新シーケンス内で記録された時刻の逆順、すなわち新しく格納された順にバックアップデータを読み出すことができる。ステップＳ４０５に戻り、最新シーケンス内の全てのバックアップデータに対してこの処理を繰り返す。
【００６３】
ステップＳ４０５において、Ｅが空であると判断した場合は（ステップＳ４０５：Ｙｅｓ）、ロールバック部１５０はバックアップ部１１０にバックアップ処理を有効にする要求を送出する（ステップＳ４１１）。バックアップ部１１０は、バックアップ処理を有効にする（ステップＳ４１２）。ロールバック部１５０は、コミット部１４０にコミット要求を送出する（ステップＳ４１３）。コミット部１４０は、コミット処理を行う（ステップＳ４１４）。これにより、ロールバック処理が完了した時点でのチェックポイントが生成される。
【００６４】
なお、コミット部１４０およびロールバック部１５０は、プロセッサ部１６０上で動作するソフトウェアとして構成することも可能である。また、バックアップ部１１０内にコミット部１４０およびロールバック部１５０を配置し、制御ソフトウェア１７０からのコミット要求やロールバック要求を、バックアップ部１１０を経由して受ける構成としてもよい。
【００６５】
次に、閾値チェック部１１８における不揮発性バックアップメモリ１３０の空き容量チェックを具体的な値を用いて説明する。図５は、不揮発性バックアップメモリ１３０のデータ格納状態の一例を示す説明図である。図５に示す不揮発性バックアップメモリ１３０は、１００個のバックアップデータが格納可能であり、１０個のバックアップデータが格納されている。また、閾値保持部１１７に保持されている閾値は、不揮発性バックアップメモリ１３０の全体容量の１０％であるとする。
【００６６】
このとき、書込ポインタ保持部１１６が保持しているアドレスは、“１１”であり、バックアップメモリ先頭アドレス保持部１１５が保持しているアドレスは、“１”である。従って、不揮発性バックアップメモリ１３０の空き容量は、次の計算で求められる。
【００６７】
（１００−１１＋１）＝９０
【００６８】
この結果で、不揮発性バックアップメモリ１３０の空き容量は、バックアップデータ９０個分、すなわち９０％ということがわかり、閾値である１０％を下回っていないことがわかる。従って、この場合閾値チェック部１１８はプロセッサ部１６０に割込みを通知しない。
【００６９】
このように、不揮発性バックアップメモリ１３０の空き容量が閾値以下となっているか否かを判断し、空き容量が閾値以下となっていると判断した場合に不揮発性バックアップメモリ１３０にバックアップデータの格納を行わないことによって、不揮発性バックアップメモリ１３０の容量を超えて、バックアップデータが格納されることを未然に防ぐことができる。
【００７０】
また、このような不揮発性バックアップメモリ１３０に容量以上のバックアップデータを格納することを防ぐしくみを備えているため、不揮発性バックアップメモリ１３０の容量を必要以上に大きくする必要がなくなり、装置全体の小型化が実現できる。
【００７１】
なお、本発明は、上記実施の形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。また、上記実施の形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成することができる。例えば、実施の形態に示される全構成要素からいくつかの構成要素を削除してもよい。
【図面の簡単な説明】
【００７２】
【図１】本実施の形態にかかるＰＣの構成を示すブロック図である。
【図２−１】バックアップ部が行うバックアップ処理手順を示すフローチャートである。
【図２−２】バックアップ部が行うバックアップ処理手順を示すフローチャートである。
【図３】コミット部が行うコミット処理手順を示すフローチャートである。
【図４】ロールバック部が行うロールバック処理手順を示すフローチャートである。
【図５】不揮発性バックアップメモリのデータ格納状態の一例を示す説明図である。
【符号の説明】
【００７３】
１００  パーソナルコンピュータ（ＰＣ）
１１０  バックアップ部
１１１  主記憶アクセス制御部
１１２  バックアップ制御部
１１３  バックアップメモリアクセス制御部
１１４  バックアップデータ生成部
１１５  バックアップメモリ先頭アドレス保持部
１１６  書込ポインタ保持部
１１７  閾値保持部
１１８  閾値チェック部
１２０  不揮発性主記憶部
１３０  不揮発性バックアップメモリ
１４０  コミット部
１５０  ロールバック部
１６０  プロセッサ部
１７０  制御ソフトウェア
１７１  チェックポイント作成部
１７２  チェックポイント復元部
１８０  バス
２００  電源
【図１】
0005161600.tif 000002
【図２−１】
0005161600.tif 000003
【図２−２】
0005161600.tif 000004
【図３】
0005161600.tif 000005
【図４】
0005161600.tif 000006
【図５】
0005161600.tif 000007