説明

情報処理装置およびデータ復旧方法

【課題】不揮発性主記憶部を備えたコンピュータにおいて、電池のような追加の電源を用いることなく、不意の電源断後の電源復旧時に不揮発性主記憶部に格納されたデータの状態を復元することができる情報処理装置およびデータ復旧方法を提供する。
【解決手段】バックアップ部110が不揮発性主記憶部120への書込みアクセスを検出した場合不揮発性主記憶部120から元データを読取り、バックアップデータを不揮発性バックアップメモリ130に書込んだ後不揮発性主記憶部120のアドレスにデータを書込み、コミット部140は一連の書込みアクセスごとに、シーケンス番号記憶部に記憶されたシーケンス番号を変更し、ロールバック部150はロールバック指示時に、シーケンス番号記憶部に記憶されたシーケンス番号と、データの有効を示す完全性検証用データとを含むバックアップデータを用いて、元データを不揮発性主記憶部120に書込む。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、不揮発性の主記憶部を備える情報処理装置およびデータ復旧方法に関する。
【背景技術】
【0002】
近年、フラッシュメモリ、MRAM(Magnetoresistive Random Access Memory)、FeRAM(Ferroelectric Random Access Memory)やPRAM(Phase change Random Access Memory)といった電源供給を断っても記録した内容が失われない不揮発性メモリの技術開発が進んでいる。将来、それらの不揮発性メモリが、現在コンピュータの主記憶部として広く使われているDRAM等の揮発性メモリにとって代わることが予想される。
【0003】
このような不揮発性メモリをコンピュータの主記憶部に使用すると、プログラムの処理中に主記憶部への電源供給が途切れた場合でも、その主記憶部に保存されたデータやシステムの状態は主記憶部に残り、失われない。これにより、電源供給復旧時に、電源が切れた瞬間の状態からコンピュータの動作を再開することが容易になり、コンピュータの起動時間が短縮され、操作性が向上する。また、不揮発性メモリは、揮発性メモリと異なり、記憶内容を保持するための電源装置が必要ないため、コンピュータ全体としての消費電力の削減、電池の小型化、電池の長寿命化が期待される。
【0004】
このような不揮発性メモリを使用したコンピュータで不意の電源断を経てその後電源が復旧した際に、電源が切れた瞬間の状態を保持してかつ復元する方法としては、電源断が生じた場合に電源監視機構によってCPUに割り込みが通知され、オペレーティングシステムのような制御ソフトウェアによってCPUの状態を主記憶部に保存する方法が開示されている(特許文献1参照)。
【0005】
【特許文献1】特開2005−107573号公報
【発明の開示】
【発明が解決しようとする課題】
【0006】
しかしながら、上記特許文献1に記載された技術では、不意の電源断に際して実行中の書込み処理を完結し、主記憶部として用いている不揮発性メモリ(以下、不揮発性主記憶部という)の内容を安定させるため、別途キャパシタ等の電池が必要である。一般にコンピュータが書込み処理を完結するために備える電池は、二次電池であることが多く、頻繁な電源断が生じた場合に十分な電力を供給できない可能性がある。
【0007】
また、上記特許文献1に記載された技術では、不揮発性主記憶部の内容を含むコンピュータの状態を電源断以前の特定の時点の状態に戻すために、処理のログを取っている。この場合、ログ領域にログデータを書込んでいる途中で電池を含めた電源が切れると、ログデータが不完全な状態でログ領域に書込まれる可能性がある。そうすると、電源復旧時にログ領域に残されていたログから不揮発性主記憶部の内容を復元しようとしても、データが不完全なため復元に必要なログデータを特定できない。このため、データの復元に失敗し、結果的に以前のどの状態も復元できず、処理を継続することができなくなってしまうという問題があった。
【0008】
本発明は、上記に鑑みてなされたものであって、不揮発性主記憶部を備えたコンピュータにおいて、電池のような追加の電源を用いることなく、不意の電源断が起きた場合でも、その後の電源復旧時に不揮発性主記憶部に格納されたデータの状態を復元することができる情報処理装置およびデータ復旧方法を提供することを目的とする。
【課題を解決するための手段】
【0009】
上述した課題を解決し、目的を達成するために、本発明にかかる情報処理装置は、不揮発性の主記憶部と、前記主記憶部に記憶されたデータの複製を記憶する不揮発性のバックアップ記憶部と、前記バックアップ記憶部に記憶されたデータのそれぞれについて前記主記憶部へ書戻しが必要か否かを識別する際に用いられるシーケンス番号を記憶する不揮発性のシーケンス番号記憶部と、プロセッサ部から送出された、前記主記憶部に対する書込み対象のデータと当該書込み対象のデータの書込み先を指定する書込み先アドレスとを含む書込みアクセスを検出した場合に、前記書込み先アドレスによって指定される記憶領域に既に記憶されている元データを読取る第1の読取手段と、前記シーケンス番号記憶部に記憶されているシーケンス番号を読取る第2の読取手段と、前記第1の読取手段で読取られた前記元データと、前記書込みアクセスに含まれる前記書込み先アドレスと、前記第2の読取手段で読取られた前記シーケンス番号と、前記元データと前記書込み先アドレスと前記シーケンス番号とが前記バックアップ記憶部に正常に書込まれたか否かを示す完全性検証用データとを含むバックアップデータを、前記バックアップ記憶部へ書込む第1の書込手段と、前記バックアップデータが前記バックアップ記憶部に書込まれた後、前記主記憶部の前記書込み先アドレスによって指定された記憶領域へ、前記書込み対象のデータを書込む第2の書込手段と、前記シーケンス番号記憶部に記憶されたシーケンス番号を変更する変更手段と、前記シーケンス番号が前回変更された時点における前記主記憶部の記憶内容へ、前記主記憶部の記憶内容を書戻す旨を指示された場合に、前記バックアップ記憶部に格納された前記バックアップデータの中から、前記シーケンス番号記憶部に記憶されたシーケンス番号を含み、かつ正常な書込みが行われたことを示す完全性検証用データを含むバックアップデータを選択する選択手段と、選択された前記バックアップデータに含まれる前記元データおよび前記書込み先アドレスを抽出する抽出手段と、前記バックアップデータから抽出された前記元データおよび前記書込みアドレスごとに、当該元データを当該書込み先アドレスが示す前記主記憶部上の記憶領域へ書込む第3の書込手段と、を備えることを特徴とする。
【0010】
また、本発明にかかるデータ復旧方法は、不揮発性の主記憶部と、前記主記憶部に記憶されたデータの複製を記憶する不揮発性のバックアップ記憶部と、前記バックアップ記憶部に記憶されたデータのそれぞれについて前記主記憶部へ書戻しが必要か否かを識別する際に用いられるシーケンス番号を記憶する不揮発性のシーケンス番号記憶部とを備える情報処理装置のデータ復旧方法であって、プロセッサ部から送出された、前記主記憶部に対する書込み対象のデータと当該書込み対象のデータの書込み先を指定する書込み先アドレスとを含む書込みアクセスを検出した場合に、前記書込み先アドレスによって指定される記憶領域に既に記憶されている元データを読取る第1の読取ステップと、前記シーケンス番号記憶部に記憶されているシーケンス番号を読取る第2の読取ステップと、前記第1の読取ステップで読取られた前記元データと、前記書込みアクセスに含まれる前記書込み先アドレスと、前記第2の読取ステップで読取られた前記シーケンス番号と、前記元データと前記書込み先アドレスと前記シーケンス番号とが前記バックアップ記憶部に正常に書込まれたか否かを示す完全性検証用データとを含むバックアップデータを、前記バックアップ記憶部へ書込む第1の書込ステップと、前記バックアップデータが前記バックアップ記憶部に書込まれた後、前記主記憶部の前記書込み先アドレスによって指定される記憶領域へ、前記書込み対象のデータを書込む第2の書込ステップと、前記シーケンス番号記憶部に記憶されたシーケンス番号を変更する変更ステップと、前記シーケンス番号が前回変更された時点における前記主記憶部の記憶内容へ、前記主記憶部の記憶内容を書戻す旨を指示された場合に、前記バックアップ記憶部に格納された前記バックアップデータの中から、前記シーケンス番号記憶部に記憶されたシーケンス番号を含み、かつ正常な書込みが行われたことを示す完全性検証用データを含むバックアップデータを選択する選択ステップと、選択された前記バックアップデータに含まれる前記元データおよび前記書込み先アドレスを抽出する抽出ステップと、前記バックアップデータから抽出された前記元データおよび前記書込みアドレスごとに、当該元データを当該書込み先アドレスが示す前記主記憶部上の記憶領域へ書込む第3の書込ステップと、を含むことを特徴とする。
【発明の効果】
【0011】
本発明によれば、不揮発性主記憶部を備えた情報処理装置において、追加の電源を用いることなく、不意の電源断が起きた場合でも、その後の電源復旧時に不揮発性主記憶部に格納されたデータの状態を復元することができるという効果を奏する。
【発明を実施するための最良の形態】
【0012】
以下に添付図面を参照して、この発明にかかる情報処理装置およびデータ復旧方法の最良な実施の形態を詳細に説明する。本発明にかかる情報処理装置をパーソナルコンピュータ(以下、PCと示す)に適用した例を示すが、これに限定されるものではなく、主記憶部を備える装置であれば、サーバ装置、ゲーム機等の様々な装置に適用することができる。
【0013】
本実施の形態について、添付図面を参照して説明する。まず、本発明が適用されるPCの構成例について説明する。図1は、本実施の形態にかかるPCの構成を示すブロック図である。
【0014】
本実施の形態にかかるPC100は、バックアップ部110と、不揮発性主記憶部120と、不揮発性バックアップメモリ130と、コミット部140と、ロールバック部150と、プロセッサ部160と、制御ソフトウェア170と、バス180とを備えている。また、PC100は、電源線10を介して電源200から電力を供給されている。
【0015】
不揮発性主記憶部120は、MRAMやFeRAM等の不揮発性メモリである。不揮発性主記憶部120には、プロセッサ部160上で動作するソフトウェアのプログラムやそのソフトウェアが使用するデータが格納される。なお、プロセッサ部160は、不揮発性主記憶部120へ書込みを行う際に、書込みアクセスを主記憶アクセス制御部111へ送出する。主記憶アクセス制御部111は、プロセッサ部160から受信した書込みアクセスに応じて、不揮発性主記憶部120への書込みを行う。ここで、書込みアクセスとは、プロセッサ部160が不揮発性主記憶部120へ書込むデータと、そのデータの書込み先を指定する不揮発性主記憶部120のアドレス(以下、書込み先アドレスという)とを含む情報である。
【0016】
不揮発性バックアップメモリ130は、不揮発性主記憶部120と同様に不揮発性メモリである。不揮発性バックアップメモリ130は、バックアップデータを記録する。ここで、バックアップデータとは、不意の電源断後の電源復旧時に不揮発性主記憶部120に格納されていたデータを復旧するために用いるデータであり、具体的には少なくとも不揮発性主記憶部120における更新されるデータのアドレスである書込み先アドレスと、そのアドレスに格納されていた更新前のデータ(以下、元データという)と、シーケンス番号と、完全性検証用データとを含む。
【0017】
ここで、シーケンス番号とは、不揮発性バックアップメモリ130に格納されている一連のバックアップデータを識別する情報である。すなわち、不揮発性主記憶部120へのデータの書戻しを行う際に、不揮発性バックアップメモリ130に格納されたバックアップデータのうち、不揮発性主記憶部120へ書戻しが必要か否かを識別するために用いられる。例えば、連続した整数などを使用することが考えられる。そして、シーケンス番号は後述するシーケンス番号保持部118に記憶される。また、完全性検証用データとは、不揮発性バックアップメモリ130に格納されたバックアップデータが正常に書かれたものであるか否かを判断するためのデータである。
【0018】
次に、不揮発性バックアップメモリ130に格納されるバックアップデータのデータ構成について説明する。図2は、不揮発性バックアップメモリ130に格納されるバックアップデータのデータ構成の一例を示す説明図である。バックアップデータ20は、シーケンス番号21、書込み先アドレス22、元データ23、完全性検証用データ24の順に、不揮発性バックアップメモリ130に格納され、これら4つのデータの組で1つのバックアップデータを構成している。
【0019】
また、他のバックアップデータのデータ構成について説明する。図3は、不揮発性バックアップメモリ130に格納されるバックアップデータのデータ構成の一例を示す説明図である。バックアップデータ30は、完全性検証用データ31、書込み先アドレス32、シーケンス番号33、元データ34の順に、不揮発性バックアップメモリ130に格納され、これら4つのデータの組で1つのバックアップデータを構成している。
【0020】
なお、完全性検証用データの内容は、シーケンス番号を用いてもよい。また、完全性検証用データの内容として、元データをそのまま用いてもよい。この場合、バックアップデータ全体が正しく書込まれたか否かの検証は、完全性検証用データとシーケンス番号とが一致するか否か、または完全性検証用データと元データとが一致するか否かによって判断できる。二つのデータが一致する場合は、バックアップデータ全体が正常に書込まれたと判断される。一方、二つのデータが一致しない場合は、バックアップデータ全体が正常に書込まれていないと判断されるため、そのバックアップデータはデータ復旧には用いない。
【0021】
このような判断方法は、バックアップデータを構成するデータが不揮発性バックアップメモリ130に書かれる順番を考慮したものある。例えば、図2のデータ構造で完全性検証用データにシーケンス番号をそのまま用いた場合、不揮発性バックアップメモリ130でのバックアップデータの両端の記憶領域に格納された二つのデータが正しく書かれていると判断されれば、データ構造上でシーケンス番号の記憶領域と完全性検証用データの記憶領域の間の記憶領域に格納されている書込み先アドレスと元データも正しく書かれていると判断できる。
【0022】
同様に、図3の場合は、完全性検証用データと元データが正しく書かれていることが判断できれば、完全性検証用データの記憶領域と元データの記憶領域との間の記憶領域に格納されている書込み先アドレスとシーケンス番号も正しく書かれていると判断することができる。
【0023】
なお、完全性検証用データは、完全性の検証によって、バックアップデータを構成する各データが全て正しく書かれているか、もしくはいずれかのデータが間違っている可能性があるかを判断できるデータであればよい。よって、完全性検証用データには、元データ、書込み先アドレス、シーケンス番号のいずれかを利用して排他的論理和を計算したパリティデータや、誤り訂正符号を利用したデータでもよく、データの内容や作成方法に関して特定の方法を強いるものではない。
【0024】
バックアップ部110は、不揮発性主記憶部120への書込み時にバックアップデータを作成して不揮発性バックアップメモリ130に書込む。具体的には、バックアップ部110は、主記憶アクセス制御部11へ送出された不揮発性主記憶部120への書込みアクセスを検出した場合に、書込みアクセスに含まれた書込み先アドレスに格納されている元データを不揮発性主記憶部120から読み出す。次に、バックアップ部110は、書込み先アドレスと元データとシーケンス番号と完全性検証用データの組からバックアップデータを生成し、不揮発性バックアップメモリ130に格納する。その後、バックアップ部110は、書込みアクセスに含まれる不揮発性主記憶部120に書込みを指示されたデータを、実際に不揮発性主記憶部120の書込み先アドレスによって指定された記憶領域に書込む。
【0025】
バックアップ部110は、さらに主記憶アクセス制御部111と、バックアップ制御部112と、バックアップメモリアクセス制御部113と、バックアップデータ生成部114と、完全性検証用データ生成部115と、バックアップメモリ先頭アドレス保持部116と、書込ポインタ保持部117と、シーケンス番号保持部118とを備えている。
【0026】
主記憶アクセス制御部111は、バス180を介して受信した不揮発性主記憶部120への読み書きアクセスに応じ、不揮発性主記憶部120に格納されたデータを読み出し、不揮発性主記憶部120にデータを書込む。ただし、主記憶アクセス制御部111は、バス180を介した不揮発性主記憶部120への書込みアクセスが検出された場合に、すぐに不揮発性主記憶部120にデータを書込まず、一旦バックアップ制御部112に書込み先アドレスを送出する。
【0027】
また、主記憶アクセス制御部111は、バックアップ制御部112からの不揮発性主記憶部120へのアクセスに応じ、不揮発性主記憶部120に格納されたデータを読み書きする。主記憶アクセス制御部111は、バス180を介した不揮発性バックアップメモリ130へのアクセスをバックアップ制御部112に送出する。また、主記憶アクセス制御部111は、書込ポインタ保持部117およびシーケンス番号保持部118へのアクセスをバックアップ制御部112に送出する。
【0028】
バックアップ制御部112は、主記憶アクセス制御部111から不揮発性記憶部120への書込みアクセスを受信した場合、データをバックアップするために、主記憶アクセス制御部111を経由して不揮発性主記憶部120から不揮発性主記憶部120の書込み先アドレスが示す記憶領域に格納されているデータを読み出す。また、バックアップ制御部112は、バックアップデータ生成部114に書込み先アドレスおよび不揮発性主記憶部120から読み出したデータを送出する。
【0029】
また、バックアップ制御部112は、バックアップメモリアクセス制御部113を経由して不揮発性バックアップメモリ130に格納されたデータを読み書きする。また、バックアップ制御部112は、書込ポインタ保持部117に格納された書込ポインタ、バックアップメモリ先頭アドレス保持部116に格納されたバックアップメモリ先頭アドレス、およびシーケンス番号保持部118に格納されたシーケンス番号を読み書きする。バックアップ制御部112は、シーケンス番号保持部118から読み出したシーケンス番号をバックアップデータ生成部114に送る。
【0030】
バックアップメモリアクセス制御部113は、バックアップ制御部112からのアクセスに応じて不揮発性バックアップメモリ130に格納されたデータを読み書きする。
【0031】
バックアップデータ生成部114は、バックアップ制御部112から送信された不揮発性主記憶部120の書込み先アドレス、不揮発性主記憶部120の書込み先アドレスが示す記憶領域から読み出した元データおよびシーケンス番号からバックアップデータを生成する。
【0032】
完全性検証用データ生成部115は、バックアップデータ生成部114から受け取ったデータをもとに、ロールバック時に不揮発性バックアップメモリ130から読み出したバックアップデータが書込みに成功したデータか否かを検証するために利用する完全性検証用データを作成する。
【0033】
バックアップメモリ先頭アドレス保持部116は、不揮発性バックアップメモリ130の先頭アドレスを保持する。バックアップメモリ先頭アドレス保持部116は、バックアップ制御部112からの要求に応じてその内容を更新する、またはその内容をバックアップ制御部112に送出する。
【0034】
書込ポインタ保持部117は、書込ポインタを保持する。ここで、書込ポインタは、バックアップデータを書込む不揮発性バックアップメモリ130上のアドレスである。書込ポインタ保持部117は、バックアップ制御部112からの要求に応じてその内容を更新し、またはその内容をバックアップ制御部112に送出する。
【0035】
シーケンス番号保持部118は、バックアップデータの生成に使用するシーケンス番号を保持する。シーケンス番号保持部118は、後述するコミット部140のシーケンス番号更新部145からの要求に応じて保持しているシーケンス番号を更新する。また、シーケンス番号保持部118は、バックアップ制御部112からの要求に応じて保持しているシーケンス番号を送出する。なお、このシーケンス番号保持部118は揮発性であっても不揮発性であっても構わない。
【0036】
また、バックアップ部110は、バックアップ処理そのものを行うか否かのスイッチを備え、不揮発性主記憶部120への書込みに対するバックアップ処理全体を有効にしたり無効にしたりする機能もあわせ持つ。なお、不揮発性主記憶部120に対する書込みアクセスを検出した場合にバックアップ処理を行うか否かを示すこのスイッチは、物理的なスイッチでも、メモリ上に保持した情報であってもよい。
【0037】
コミット部140は、コミット処理を行う。コミット処理とは、突然の電源断を経て電源が復旧した場合であって、不揮発性主記憶部120の状態を復元する必要が生じた場合に、復元目標となる不揮発性主記憶部120の状態(以下、チェックポイントという)を作成する一連の処理のことである。
【0038】
コミット部140がコミット処理を行うことにより新しいチェックポイントが作成されると、不揮発性バックアップメモリ130に格納されている、不揮発性主記憶部120の状態を一つ前のチェックポイントの状態に復元するためのバックアップデータは不要になる。このため、コミット処理では、一番最近のコミット処理以降に不揮発性バックアップメモリ130に格納したバックアップデータを無効化することが必要となる。
【0039】
本実施の形態にかかるバックアップデータには、不揮発性主記憶部120に書戻すために使用する一連のバックアップデータを識別する情報であるシーケンス番号が含まれている。これにより、不揮発性バックアップメモリ130への1回または複数回のバックアップ処理を行った後にこのシーケンス番号を新しいものに変更することで、変更前のシーケンス番号を含むバックアップデータを不揮発性バックアップメモリ130上から物理的に削除することなく無効化することができる。つまり、本実施の形態においてはシーケンス番号を更新することがコミット処理の一部となっている。本実施の形態においては、シーケンス番号保持部118が保持しているものと同じシーケンス番号を持つ一つもしくは複数のバックアップデータのことを最新シーケンスと呼ぶ。
【0040】
コミット部140は、さらにコミット制御部141と、書込ポインタアクセス部142と、コミットデータ書込部143と、コミットデータ書込アドレス保持部144と、シーケンス番号更新部145とを備えている。
【0041】
コミット制御部141は、制御ソフトウェア170からの指示により、書込ポインタアクセス部142と、コミットデータ書込部143と、シーケンス番号更新部145と、コミットデータ書込アドレス保持部144によってコミット処理全体を制御して、チェックポイントを作成する。
【0042】
書込ポインタアクセス部142は、バックアップ部110が備える書込ポインタ保持部117の内容を読み書きする要求をバス180に送出する。コミットデータ書込アドレス保持部144は、コミット処理の最後で不揮発性主記憶部120への書込み処理を行う場合に指定する不揮発性主記憶部120上の記憶領域を示す書込み先アドレスの値を保持する。コミットデータ書込アドレス保持部144の内容は、コミット制御部141の指示により読み書きされる。シーケンス番号更新部145は、バス180を介して、バックアップ部110のシーケンス番号保持部118が保持しているシーケンス番号を読み書きする。
【0043】
コミットデータ書込部143は、コミット処理において、コミットデータ書込アドレス保持部144に保持されている不揮発性主記憶部120のアドレスに、書込ポインタアクセス部142が読み出した書込ポインタ保持部117の内容を書込む場合に、その書込み要求をバス180に送出する。シーケンス番号更新部145は、バックアップ部110に備えるシーケンス番号保持部118の内容を更新する要求をバス180に送出する。
【0044】
ロールバック部150は、不揮発性バックアップメモリ130に格納されているバックアップデータから不揮発性主記憶部120の内容復元に必要な最新シーケンスを探し出して読み出し、不揮発性主記憶部120にバックアップデータから抽出した元データを書き戻す。この操作により不揮発性主記憶部120の状態として一番最近に作成したチェックポイントの状態を復元する。
【0045】
ロールバック部150は、さらにロールバック制御部151と、ロールバックデータ特定部152と、ロールバックデータ読出部153と、ロールバックデータ書戻部154とを備えている。
【0046】
ロールバック制御部151は、制御ソフトウェア170からの指示によって、ロールバックデータ特定部152と、ロールバックデータ読出部153と、ロールバックデータ書戻部154とで実現されるロールバック処理を制御する。
【0047】
ロールバックデータ特定部152は、不揮発性バックアップメモリ130からロールバック時に必要なデータを特定する。ロールバックデータ特定部152は、上述したとおり、不揮発性バックアップメモリ130へのバックアップデータの書込み処理中に不意の電源断が発生し、当該書込み処理が不完全に終わった場合でも、バックアップデータが持つ完全性検証用データを使用し、バックアップデータの完全性検証を行うことにより、ロールバックに必要なバックアップデータを正しく特定する。このために、特定の計算装置を備えてもよい。
【0048】
ロールバックデータ読出部153は、ロールバックデータ特定部152によって特定されたロールバックに必要なバックアップデータを不揮発性バックアップメモリ130から読み出す。
【0049】
ロールバックデータ書戻部154は、ロールバックデータ読出部153が読み出したバックアップデータから、元データと、その元データを書き戻す不揮発性主記憶部120内の書込み先アドレスを取得する。ロールバックデータ書戻部154は、元データを不揮発性主記憶部120の書込み先アドレスで指定された記憶領域に書込む。
【0050】
プロセッサ部160は、制御ソフトウェア170を動作させる。制御ソフトウェア170は、通常の処理においては不揮発性主記憶部120のデータを操作してシステム固有の機能を提供する。また、制御ソフトウェア170は、適切なタイミング(例えば、一定時間ごとに)でコミット部140に要求を出し、不揮発性主記憶部120のチェックポイントを作成する。制御ソフトウェア170は、電源復帰時にはロールバック部150に要求を出し、前回のチェックポイントまで不揮発性主記憶部120の状態を戻す処理を行う。
【0051】
バス180は、コミット部140、ロールバック部150、プロセッサ部160およびバックアップ部110を接続する。不揮発性主記憶部120は、バス180に直接接続されず、バックアップ部110を介してバス180と接続する。これにより、不揮発性主記憶部120へのアクセスは、すべてバックアップ部110を介するため、バックアップ部110において不揮発性主記憶部120へのアクセスに応じたバックアップ処理を行うことができる。なお、バックアップ部110の配置位置は、バス180と不揮発性主記憶部120の間に限らず、不揮発性主記憶部120へのアクセスを不揮発性主記憶部120が受け取る前に受け取ることができる位置であれば、どの位置に配置されていてもよい。また、バックアップ部110には、不揮発性主記憶部120に加え、不揮発性バックアップメモリ130が接続される。
【0052】
次に、以上のように構成されているバックアップ部110によるバックアップ処理、コミット部140によるコミット処理およびロールバック部150によるロールバック処理について説明する。
【0053】
図4−1、図4−2は、バックアップ部110が行うバックアップ処理手順を示すフローチャートである。なお、バックアップ部110は、バス180からのアクセスを受け取って動作する。
【0054】
まず、主記憶アクセス制御部111は、バス180からのアクセスを検出する(ステップS401)。主記憶アクセス制御部111は、検出したアクセスが不揮発性主記憶部120への読出しアクセスであるか否かを判断する(ステップS402)。具体的には、アクセスに含まれる命令から不揮発性主記憶部120への読出しアクセスであるか否かを判断する。なお、主記憶アクセス制御部111は、読出しアクセスに限らず、書込みアクセス等の他のアクセスについても同様に、アクセスに含まれる命令からアクセスの種類やアクセスする記憶媒体を判断する。
【0055】
検出したアクセスが不揮発性主記憶部120への読出しアクセスであると判断した場合は(ステップS402:Yes)、主記憶アクセス制御部111は不揮発性主記憶部120からデータを読み出し(ステップS403)、バス180へ読み出したデータを返す。
【0056】
検出したアクセスが不揮発性主記憶部120への読出しアクセスでないと判断した場合は(ステップS402:No)、主記憶アクセス制御部111がバックアップ制御部112にアクセスを送出し、バックアップ制御部112がアクセスを受け取る(ステップS404)。バックアップ制御部112は、受け取ったアクセスが不揮発性主記憶部120への書込みアクセスであるか否かを判断する(ステップS405)。
【0057】
受け取ったアクセスが不揮発性主記憶部120への書込みアクセスであると判断した場合は(ステップS405:Yes)、バックアップ制御部112はバックアップ処理が有効であるか否かを判断する(ステップS406)。バックアップ処理が有効でないと判断した場合は(ステップS406:No)、バックアップ処理は行わず、ステップS412に進む。バックアップ処理が有効であると判断した場合は(ステップS406:Yes)、バックアップ制御部112は主記憶アクセス制御部111に読出し要求を送出し、主記憶アクセス制御部111が不揮発性主記憶部120から書込み先アドレスに示す記憶領域に格納されている元データを読み出す(ステップS407)。次に、バックアップ部110はバックアップデータ生成処理を行う(ステップS408)。このバックアップデータ生成処理の詳細は後述する。
【0058】
バックアップ制御部112は、生成したバックアップデータを書込む不揮発性バックアップメモリ130上のアドレスを書込ポインタ保持部117から読み出す(ステップS409)。バックアップメモリアクセス制御部113は、読み出した不揮発性バックアップメモリ130上のアドレスにバックアップデータを書込む(ステップS410)。バックアップ制御部112は、書込ポインタ保持部117に保持しているポインタの値を更新する(ステップS411)。主記憶アクセス制御部111は、不揮発性主記憶部120の書込み先アドレスにデータを書込む(ステップS412)。
【0059】
ステップS405において、受け取ったアクセスが不揮発性主記憶部120への書込みアクセスでないと判断した場合は(ステップS405:No)、バックアップ制御部112は不揮発性バックアップメモリ130へのアクセスであるか否かを判断する(ステップS413)。不揮発性バックアップメモリ130へのアクセスであると判断した場合は(ステップS413:Yes)、バックアップメモリアクセス制御部113は不揮発性バックアップメモリ130のデータを読出す、または不揮発性バックアップメモリ130にデータを書込む(ステップS414)。
【0060】
不揮発性バックアップメモリ130へのアクセスでないと判断した場合は(ステップS413:No)、バックアップ制御部112は書込ポインタ保持部117へのアクセスであるか否かを判断する(ステップS415)。書込ポインタ保持部117へのアクセスであると判断した場合は(ステップS415:Yes)、バックアップ制御部112は書込ポインタ保持部117の値を読み出す、または更新する(ステップS416)。
【0061】
書込ポインタ保持部117へのアクセスでないと判断した場合は(ステップS415:No)、バックアップ制御部112はシーケンス番号保持部118へのアクセスであるか否かを判断する(ステップS417)。シーケンス番号保持部118へのアクセスでないと判断した場合は(ステップS417:No)、処理を終了する。
【0062】
シーケンス番号保持部118へのアクセスであると判断した場合は(ステップS417:Yes)、バックアップ制御部112はシーケンス番号保持部118に保持されたシーケンス番号を読み出す、または更新する(ステップS418)。その後、バックアップ制御部112は、アクセスがシーケンス番号保持部118へのアクセスであった場合、そのアクセスが書込みだったか否かを判断する(ステップS419)。アクセスが書込みであると判断した場合は(ステップS419:Yes)、すなわちコミット処理の一部であると判断した場合は、書込ポインタ保持部117に保持された書込ポインタを再設定する(ステップS420)。ここで、不揮発性バックアップメモリ130をスタックとして使用している場合は、書込ポインタを不揮発性バックアップメモリ130の先頭アドレスに設定する。また、不揮発性バックアップメモリ130をリングバッファとして使用している場合は、書込ポインタを動かす必要はないのでなにも処理しない。アクセスが書込みでないと判断した場合は(ステップS419:No)、処理を終了する。このように、バックアップ制御部112がシーケンス番号を書込む際に書込ポインタ保持部117が保持している書込ポインタを再設定することにより、コミット処理の一部を実現している。このコミット処理時に行われるシーケンス番号設定処理と書込ポインタの再設定処理は、一括して行う必要がある。これは新しいシーケンス番号を使用したバックアップデータが間違った場所に書込まれることを防ぐためである。
【0063】
次に、図4−1のステップS408で実行するバックアップデータ生成処理について説明する。図5は、バックアップ部110が行うバックアップデータ生成処理手順を示すフローチャートである。
【0064】
まず、バックアップ制御部112は、シーケンス番号保持部118からシーケンス番号を読み出す(ステップS501)。バックアップ制御部112は、不揮発性主記憶部120の元データと書込み先アドレスとシーケンス番号とをバックアップデータ生成部114に送出する(ステップS502)。バックアップデータ生成部114は、元データと書込み先アドレスとシーケンス番号からバックアップデータを生成し、完全性検証用データ生成部115に送出する(ステップS503)。
【0065】
完全性検証用データ生成部115は、受け取ったバックアップデータから完全性検証用データを生成する(ステップS504)。完全性検証用データ生成部115は、完全性検証用データを加えたバックアップデータを生成し、生成したバックアップデータをバックアップデータ生成部114に送出する(ステップS505)。なお、バックアップデータ内での完全性検証用データは、バックアップデータ全体が正常に書込まれたことを判断できる位置に格納される。バックアップデータは、例えば上述した図2または図3のようなデータ構成となる。バックアップデータ生成部114は、完全性検証用データを含むバックアップデータをバックアップ制御部112に送出する(ステップS506)。
【0066】
次に、コミット部140によるコミット処理について説明する。図6は、コミット部140によるコミット処理手順を示すフローチャートである。
【0067】
まず、コミット部140において、シーケンス番号更新部145が、バックアップ部110のシーケンス番号保持部118からシーケンス番号を読み出す(ステップS601)。シーケンス番号更新部145は、読み出したシーケンス番号に1を加算して新シーケンス番号とする(ステップS602)。シーケンス番号更新部145は、バックアップ部110のバックアップ制御部112にシーケンス番号保持部118への新シーケンス番号の設定を要求する(ステップS603)。
【0068】
バックアップ制御部112は、シーケンス番号保持部118に新シーケンス番号を設定する(ステップS604)。バックアップ制御部112は、不揮発性バックアップメモリ130の使用方法(スタックかリングバッファか等)にしたがって書込ポインタ保持部117の書込ポインタを再設定する(ステップS605)。なお、ステップS604およびステップS605の処理は、上述したバックアップ部110での図4−2のステップS417〜ステップS420の処理である。
【0069】
なお、もしシーケンス番号保持部118が不揮発性であった場合は、以下で説明するステップS606以降の処理を行わなくてもよい。これは、シーケンス番号保持部118が不揮発性であれば、突然の電源断が起きてもシーケンス番号保持部118が保持しているシーケンス番号が失われないからである。逆にいえば、ステップS606以降の処理は、シーケンス番号保持部118が揮発性であった場合には必須の処理である。この処理は、突然の電源断によってシーケンス番号保持部118が保持しているシーケンス番号を失っても処理が継続できるように、コミット処理の際に不揮発性バックアップメモリ130に同じシーケンス番号のバックアップデータを残すことが目的である。
【0070】
書込ポインタアクセス部142は、バックアップ部110の書込ポインタ保持部117から書込ポインタを読み出す(ステップS606)。コミットデータ書込部143は、コミットデータ書込アドレス保持部144からコミットデータを書込む不揮発性主記憶部120のアドレスを取得する(ステップS607)。コミットデータ書込部143は、書込ポインタの値を今取得した不揮発性記憶部120のアドレスが示す記憶領域に書込む要求をする(ステップS608)。これに応じて、図4−1、図4−2に示すバックアップ処理が実行される。これにより、バックアップ部110が再設定した書込ポインタの位置に新シーケンス番号を含むバックアップデータが書込まれるため、不揮発性バックアップメモリ130上に格納されていた最新シーケンスが無効化され、新たに格納されたバックアップデータが最新シーケンスとなる。
【0071】
次に、コミット処理時に不揮発性バックアップメモリ130に格納されているデータの遷移について説明する。図7−1〜図7−3は、コミット処理時の不揮発性バックアップメモリ(スタック)の状態の一例を示す説明図である。図7−1は、コミット部140がコミット処理を開始する前の不揮発性バックアップメモリ130の状態を示している。バックアップデータ73は、1つのバックアップデータを示し、図7−1の不揮発性バックアップメモリ130には、複数のバックアップデータが格納されている。このとき、シーケンス番号保持部118が保持しているシーケンス番号が“99”であることから、不揮発性バックアップメモリ130に格納されているシーケンス番号“99”のバックアップデータすべてが最新シーケンス74である。また、バックアップメモリ先頭アドレスが指す位置71は、不揮発性バックアップメモリ130の先頭アドレスである。また、書込ポインタの指す位置72は、最新シーケンス74において次のバックアップデータが書込まれる位置を示している。また、データは、A→A’の方向に書込んでいく。
【0072】
図7−2は、シーケンス番号および書込みポインタが更新された状態を示している。まず、コミット部140は、制御ソフトウェア170からのコミット要求に応じて、シーケンス番号を更新する。図7−1の時点でバックアップ部110のシーケンス番号保持部118が保持しているシーケンス番号は“99”であるから、コミット部140は99に1を加算した値、つまり“100”を新シーケンス番号として設定する。次に、バックアップ部110は、書込ポインタを再設定する。すなわち、バックアップ部110は、書込ポインタ保持部117にバックアップメモリ先頭アドレス保持部116が保持している値を設定する。この2つの処理を行うことにより、書込ポインタの指す位置72が不揮発性バックアップメモリ130の先頭アドレスとなる。シーケンス番号保持部118が不揮発性の場合は、ここまででコミット処理を終了しても構わない。
【0073】
図7−3は、新しいシーケンス番号を使用したバックアップデータを書込んだ状態を示している。コミット部140は、コミットデータ書込アドレス保持部144に格納されている不揮発性主記憶部120内のアドレスを読み出し、読み出したアドレスの領域に書込ポインタの値を書込む。その書込み処理に対してバックアップ処理が行われ、新シーケンス番号つまりシーケンス番号“100”のバックアップデータが、不揮発性バックアップメモリ130に格納される。これらの処理を行うことにより、図7−3に示すように、シーケンス番号“99”のバックアップデータにシーケンス番号“100”のバックアップデータが上書きされる。シーケンス番号“99”のバックアップデータは古いシーケンスとなり、シーケンス番号“100”のバックアップデータが最新のシーケンスとなる。つまり、コミット部140によって前シーケンスの無効化が行われた。
【0074】
次に、不揮発性バックアップメモリ130をリングバッファとして使用した場合のコミット処理のメモリの状態について説明する。図8−1〜図8−3は、コミット処理時の不揮発性バックアップメモリ(リングバッファ)の状態の一例を示す説明図である。図8−1は、コミット部140がコミット処理を開始する前の不揮発性バックアップメモリ130の状態を示している。バックアップデータ83は、1つのバックアップデータを示し、図8−1の不揮発性バックアップメモリ130には、複数のバックアップデータが格納されている。図8−1では、シーケンス番号保持部118が保持しているシーケンス番号が“99”であり、不揮発性バックアップメモリ130に格納されているシーケンス番号“99”のバックアップデータが最新シーケンス84である。また、バックアップメモリ先頭アドレスが指す位置81は、不揮発性バックアップメモリ130の先頭アドレスである。書込ポインタの指す位置82は、最新シーケンス84での次のバックアップデータが書込まれる位置を示している。また、データは、A→A’の方向に書込んでいく。
【0075】
図8−2は、シーケンス番号および書込みポインタが更新された状態を示している。まず、コミット部140は、制御ソフトウェア170からのコミット要求に応じて、シーケンス番号を更新する。図8−1の時点でバックアップ部110のシーケンス番号保持部118が保持しているシーケンス番号は“99”であるから、コミット部140は99に1を加算した値、つまり“100”を新シーケンス番号として設定する。次に、バックアップ部110は、書込ポインタを再設定する。ただし、この例では、不揮発性バックアップメモリ130をリングバッファとして使用しているので、スタックの場合と異なり常にバックアップメモリ先頭アドレス保持部116が保持している不揮発性バックアップメモリ130の先頭アドレスを設定しなくても、新しいシーケンスは古いシーケンスを上書きしていくため、実際には何も行わない。シーケンス番号保持部118が不揮発性の場合は、ここまででコミット処理を終了しても構わない。
【0076】
図8−3は、新しいシーケンス番号を使用したバックアップデータを書込んだ状態を示している。コミット部140は、コミットデータ書込アドレス保持部144に格納されている不揮発性主記憶部120内のアドレスを読み出し、読み出したアドレスの領域に書込ポインタの値を書込む。その書込み処理に対してバックアップ処理が行われ、新シーケンス番号つまりシーケンス番号“100”のバックアップデータが、不揮発性バックアップメモリ130に格納される。これらの処理を行うことにより、図8−3に示すように、不揮発性バックアップメモリ130には、シーケンス番号“99”のバックアップデータの次にシーケンス番号“100”のバックアップデータが書込まれる。これにより、シーケンス番号“99”のバックアップデータは古いシーケンスとなり、シーケンス番号“100”のバックアップデータが最新のシーケンスとなる。つまり、コミット部140によって前シーケンスの無効化が行われた。
【0077】
このように、本実施の形態におけるコミット部140は、新しいシーケンス番号のバックアップデータを一つ作成することにより、チェックポイント作成時のコミット処理における最新シーケンスの無効化処理を行うことができる。
【0078】
次に、ロールバック部150によるロールバック処理について説明する。図9は、ロールバック部150によるロールバック処理手順を示すフローチャートである。なお、ロールバック部150は、プロセッサ部160上で動作する制御ソフトウェア170からの指示で起動する。
【0079】
まず、ロールバック制御部151は、バックアップ部110へバックアップ処理を無効にする要求を送出する(ステップS901)。バックアップ部110は、バックアップ処理を無効にする(ステップS902)。これは、不揮発性主記憶部120にバックアップデータを書戻す際に、不意の電源断で不定となっている不揮発性主記憶部120のデータを不揮発性バックアップメモリ130にバックアップデータとして格納しないようにするためである。
【0080】
次に、ロールバックデータ特定部152は、最新シーケンス特定処理を行う(ステップS903)。詳細は後述する。ロールバックデータ読出部153は、読み出された最新シーケンス内の最新バックアップデータをEに格納する(ステップS904)。ロールバックデータ読出部153は、Eが空であるか否かを判断する(ステップS905)。
【0081】
Eが空でないと判断した場合は(ステップS905:No)、ロールバックデータ読出部153はEの読み出し要求をバックアップ部110に送出する(ステップS906)。バックアップ部110は、不揮発性バックアップメモリ130からバックアップデータを読み出す(ステップS907)。ロールバックデータ書戻部154は、Eに含まれる書込み先アドレスへ元データを書戻す要求をバックアップ部110に送出する(ステップS908)。バックアップ部110は、不揮発性主記憶部120の指定されたアドレスに元データを書込む(ステップS909)。ロールバックデータ読出部153は、次の最新シーケンス内の次のバックアップデータをEに格納する(ステップS910)。これにより、最新シーケンス内で記録された時刻の逆順、すなわち新しく格納された順にバックアップデータを読み出すことができる。ステップS905に戻り、最新シーケンス内の全てのバックアップデータに対して繰り返す。
【0082】
ステップS905において、Eが空であると判断した場合は(ステップS905:Yes)、ロールバック制御部151はバックアップ部110にバックアップ処理を有効にする要求を送出する(ステップS911)。バックアップ部110は、バックアップ処理を有効にする(ステップS912)。ロールバック制御部151は、コミット部140にコミット要求を送出する(ステップS913)。コミット部140は、コミット処理を行う(ステップS914)。これにより、ロールバック処理が完了した時点でのチェックポイントが生成される。
【0083】
次に、ロールバックデータ特定部152による最新シーケンス特定処理について説明する。図10は、ロールバックデータ特定部152による最新シーケンス特定処理手順を示すフローチャートである。
【0084】
まず、ロールバックデータ特定部152は、不揮発性バックアップメモリ130からバックアップデータの1つを選択し、選択されたバックアップデータをデータAに格納する(ステップS1001)。なお、バックアップデータは、任意のバックアップデータを選択してよい。ロールバックデータ特定部152は、データAが正常なデータか否かを、完全性検証用データを用いて検証する(ステップS1002)。検証方法は、完全性検証用データとしてどのようなデータを使用したかに依存する。例えば、バックアップデータを図2のように構成し、完全性検証用データとしてシーケンス番号のコピーを使用した場合、完全性検証用データとシーケンス番号を比較して一致した場合は検証結果OKと判断し、不一致なら検証結果NGと判断する。
【0085】
ロールバックデータ特定部152は、データAの完全性検証結果がOKであるか否かを判断する(ステップS1003)。データAの完全性検証結果がOKでないと判断した場合は(ステップS1003:No)、現在のデータAの直前のバックアップデータをデータAに格納し(ステップS1004)、ステップS1002に戻る。
【0086】
データAの完全性検証結果がOKであると判断した場合は(ステップS1003:Yes)、データAの直前のバックアップデータをデータBに格納する(ステップS1005)。ロールバックデータ特定部152は、データBが正常なデータか否かを、完全性検証用データを用いて検証する(ステップS1006)。ロールバックデータ特定部152は、データBの完全性検証結果がOKであるか否かを判断する(ステップS1007)。データBの完全性検証結果がOKでないと判断した場合は(ステップS1007:No)、ステップS1010に進む。
【0087】
データBの完全性検証結果がOKであると判断した場合は(ステップS1007:Yes)、データBのシーケンス番号がデータAのシーケンス番号より小さいか否かを判断する(ステップS1008)。データBのシーケンス番号がデータAのシーケンス番号より小さくない、すなわちデータBのシーケンス番号がデータAのシーケンス番号以上であると判断した場合は(ステップS1008:No)、ロールバックデータ特定部152はデータBの内容をデータAに格納し(ステップS1009)、ステップS1002に戻る。
【0088】
データBのシーケンス番号がデータAのシーケンス番号より小さいと判断した場合は(ステップS1008:Yes)、ロールバックデータ特定部152は、データAより後方に格納され、データAとシーケンス番号が異なるバックアップデータ、もしくは、データAより後方に格納され、完全性検証結果がNGである最初のバックアップデータを、データCに格納する(ステップS1010)。ロールバックデータ特定部152は、データCの完全性検証結果がOKであるか否かを判断する(ステップS1011)。データCの完全性検証結果がOKであると判断した場合は(ステップS1011:Yes)、ロールバックデータ特定部152は、データAのシーケンス番号がデータCのシーケンス番号より小さいか否かを判断する(ステップS1012)。データAのシーケンス番号がデータCのシーケンス番号より小さいと判断した場合は(ステップS1012:Yes)、ロールバックデータ特定部152はデータCの内容をデータAに格納し(ステップS1013)、ステップS1002に戻る。
【0089】
ステップS1011において、データCの完全性検証結果がOKでないと判断した場合は(ステップS1011:No)、または、ステップS1012において、データAのシーケンス番号がデータCのシーケンス番号より小さくないと判断した場合は(ステップS1012:No)、ロールバックデータ特定部152はロールバックデータの先頭をデータAとし、ロールバックデータの最後尾をデータCの直前のデータとする(ステップS1014)。なお、データAのシーケンス番号がデータCのシーケンス番号より小さくないと判断した場合とは、ステップS1010、ステップS1011での判断により、データAのシーケンス番号がデータCのシーケンス番号と同一になることはないため、データAのシーケンス番号がデータCのシーケンス番号より大きいと判断した場合となる。
【0090】
このように、不揮発性バックアップメモリ130にバックアップデータを書込む最中に電源が切断された場合であっても、完全性検証用データによって検証された正常に書込まれた最新のチェックポイントにおける不揮発性主記憶部120の状態を復元するために必要なバックアップデータを正しく発見することができる。また、正しく発見したバックアップデータのみを用いて、元データに書き戻すため、チェックポイント時の不揮発性主記憶部120のデータに正確に再現することができる。
【0091】
また、不揮発性主記憶部120に対する書込みアクセスが検出された場合に、すぐに不揮発性主記憶部120にデータを書込まず、不揮発性バックアップメモリ130にバックアップデータを格納した後に、不揮発性主記憶部120にデータを書込むため、バックアップデータを書込む最中に電源が切断され、正常でないバックアップデータが不揮発バックアップメモリ130に書込まれたとしても、まだ不揮発性主記憶部120にデータが書込まれていないため、正常でないバックアップデータをロールバック時に用いないことにより、整合性のとれた不揮発性主記憶部120の状態を再現することができる。
【0092】
なお、もしシーケンス番号保持部118が不揮発性だった場合には、ロールバックデータ特定部152は、図10の処理の代わりに、不揮発性バックアップメモリ130に格納されたバックアップデータの中から、完全性検証用データによる完全性検証結果がOKであり、かつシーケンス番号保持部118が保持しているシーケンス番号と同じシーケンス番号を持つバックアップデータを探すことで、ロールバックに使用するデータを発見することもできる。ただし、図9の処理は、シーケンス番号保持部118が揮発性でも不揮発性でも同じである。
【0093】
次に、最新シーケンス特定処理を、具体的に不揮発性バックアップメモリの状態を参照し、図10に示したフローチャートを用いて説明する。なお、以下の図11および図12の説明においては、最も処理が複雑になる、シーケンス番号保持部118が揮発性であった場合を説明する。ただし、以下で説明する処理は、シーケンス番号保持部118が不揮発性であった場合でも適用することができる。
【0094】
図11は、不揮発性バックアップメモリ130の状態の一例を示す説明図である。図11には、不揮発性バックアップメモリ130の一部が示されている。不揮発性バックアップメモリ130には、完全性がOKであるバックアップデータ1〜9が格納されている。
【0095】
まず、ロールバックデータ特定部152は、不揮発性バックアップメモリ130から例えばバックアップデータ4を選択し、選択されたバックアップデータ4をデータAに格納する(ステップS1001)。ロールバックデータ特定部152は、データAが正常なデータか否かを、完全性検証用データを用いて検証する(ステップS1002)。
【0096】
ロールバックデータ特定部152は、データAの完全性検証結果がOKであると判断し(ステップS1003:Yes)、データAの直前のバックアップデータ3をデータBに格納する(ステップS1005)。ロールバックデータ特定部152は、データBが正常なデータか否かを、完全性検証用データを用いて検証する(ステップS1006)。
【0097】
ロールバックデータ特定部152は、データBの完全性検証結果がOKであると判断し(ステップS1007:Yes)、データBのシーケンス番号“100”がデータAのシーケンス番号“100”より小さいか否かを判断する(ステップS1008)。データBのシーケンス番号がデータAのシーケンス番号より小さくない、すなわちデータBのシーケンス番号はデータAのシーケンス番号以上であると判断し(ステップS1008:No)、ロールバックデータ特定部152はデータBの内容をデータAに格納し(ステップS1009)、ステップS1002に戻る。この時点で、データAにバックアップデータ3が格納されている。
【0098】
次に、ロールバックデータ特定部152は、データAが正常なデータか否かを、完全性検証用データを用いて検証する(ステップS1002)。ロールバックデータ特定部152は、データAの完全性検証結果がOKであると判断し(ステップS1003:Yes)、データAの直前のバックアップデータ2をデータBに格納する(ステップS1005)。ロールバックデータ特定部152は、データBが正常なデータか否かを、完全性検証用データを用いて検証する(ステップS1006)。ロールバックデータ特定部152は、データBの完全性検証結果がOKであると判断し(ステップS1007:Yes)、データBのシーケンス番号がデータAのシーケンス番号より小さいか否かを判断する(ステップS1008)。
【0099】
データBのシーケンス番号“99”がデータAのシーケンス番号“100”より小さいと判断し(ステップS1008:Yes)、ロールバックデータ特定部152はデータAより後方に格納され、データAとシーケンス番号が異なるバックアップデータ9を、データCに格納する(ステップS1010)。ロールバックデータ特定部152は、データCの完全性検証結果がOKであると判断し(ステップS1011:Yes)、ロールバックデータ特定部152はデータAのシーケンス番号“100”がデータCのシーケンス番号“57”より小さいか否かを判断する(ステップS1012)。データAのシーケンス番号がデータCのシーケンス番号より小さくないと判断し(ステップS1012:No)、ロールバックデータ特定部152はロールバックデータの先頭をデータA、すなわちバックアップデータ3とし、ロールバックデータの最後尾をデータCの直前のデータ、すなわちバックアップデータ8とする(ステップS1014)。
【0100】
これにより、最新シーケンスは、先頭がバックアップデータ3で最後尾がバックアップデータ8であることを特定することができる。その後、図9のS904に戻り、特定された最新シーケンスのバックアップデータを用いてロールバックを行う。
【0101】
他の場合として、バックアップデータに正常でないデータを含む場合の最新シーケンス特定処理について説明する。図12は、不揮発性バックアップメモリ130の状態の一例を示す説明図である。図12には、不揮発性バックアップメモリ130の一部が示されている。不揮発性バックアップメモリ130には、完全性がOKであるバックアップデータ11〜18と、完全性がNGであるバックアップデータ19が格納されている。バックアップデータ19は、バックアップデータ19を不揮発性バックアップメモリ130に書込む途中で電源が切断されたため、正しく書込まれなかったものである。
【0102】
まず、ロールバックデータ特定部152は、不揮発性バックアップメモリ130から例えばバックアップデータ13を選択し、選択されたバックアップデータ13をデータAに格納する(ステップS1001)。ロールバックデータ特定部152は、データAが正常なデータか否かを、完全性検証用データを用いて検証する(ステップS1002)。データAの完全性検証結果がOKであると判断し(ステップS1003:Yes)、データAの直前のバックアップデータ12をデータBに格納する(ステップS1005)。ロールバックデータ特定部152は、データBが正常なデータか否かを、完全性検証用データを用いて検証する(ステップS1006)。
【0103】
ロールバックデータ特定部152は、データBの完全性検証結果がOKであると判断し(ステップS1007:Yes)、データBのシーケンス番号“99”がデータAのシーケンス番号“100”より小さいか否かを判断する(ステップS1008)。データBのシーケンス番号がデータAのシーケンス番号より小さいと判断し(ステップS1008:Yes)、ロールバックデータ特定部152はデータAより後方に格納され、完全性検証結果がNGである最初のバックアップデータ19を、データCに格納する(ステップS1010)。
【0104】
ロールバックデータ特定部152は、データCの完全性検証結果がNGであると判断し(ステップS1011:No)、ロールバックデータ特定部152はロールバックデータの先頭をデータA、すなわちバックアップデータ13とし、ロールバックデータの最後尾をデータCの直前のデータ、すなわちバックアップデータ18とする(ステップS1014)。
【0105】
これにより、最新シーケンスは、先頭がバックアップデータ13で最後尾がバックアップデータ18であることを特定することができる。この最新シーケンスを用いて、ロールバックを行う。
【0106】
このように、仮にバックアップ部110による不揮発性バックアップメモリ130へのバックアップデータ書込み中に不意の電源断が生じて、バックアップデータが不完全な形で不揮発性バックアップメモリ130に書かれたとしても、シーケンス番号と完全性検証用データとロールバックデータ特定部152の処理によって、正しくロールバックに必要なデータを特定することができる。
【0107】
次に、PC100全体として、バックアップ処理、コミット処理およびロールバック処理を説明する。図13は、各部によるバックアップ処理を示すシーケンス図である。また、各部ごとの処理を縦方向に示し、各部間を結ぶ矢印は、各部間を接続している信号線を介した制御およびデータ信号のやり取りを示す。AからA’への向きに時間が経過している。
【0108】
まず、バックアップ部110は、バス180を介した不揮発性主記憶部120への書込みアクセスを検出する(ステップS1301)。バックアップ部110は、不揮発性主記憶部120への書込みアクセスを検出し、不揮発性主記憶部120の書込み先アドレスを取得する(ステップS1302)。また、バックアップ部110は、バックアップ処理が有効になっているか否かをチェックする(ステップS1303)。バックアップ処理が有効な場合は、バックアップ部110は、書込みアクセスに含まれた書込み先アドレスに格納されている元データを不揮発性主記憶部120から読み出す(ステップS1304、ステップS1305)。バックアップ部110は、元データと不揮発性主記憶部120の書込み先アドレスとシーケンス番号と完全性検証用データからバックアップデータを生成する(ステップS1306)。なお、生成するバックアップデータのデータ長を、不揮発性バックアップメモリ130のデータ幅の整数倍とするように配慮することで、バックアップデータの不揮発性バックアップメモリ130への書込みをスムーズに行うことができる。
【0109】
バックアップ部110は、生成したバックアップデータを不揮発性バックアップメモリ130に書込む(ステップS1307)。バックアップデータは、不揮発性バックアップメモリ130の書込ポインタ保持部117に保持された書込みポインタが示す記憶領域に書込まれる。バックアップ部110は、書込みアクセスに含まれる不揮発性主記憶部120の書込み先アドレスに、書込みアクセスに含まれるデータを書込む(ステップS1308)。バックアップ部110は、不揮発性バックアップメモリ130の書込みポインタを更新する(ステップS1309)。
【0110】
次に、コミット処理について説明する。図14は、各部によるコミット処理を示すシーケンス図である。
【0111】
まず、制御ソフトウェア170は、コミット部140にコミットを指示する(ステップS1401)。コミット部140は、シーケンス番号を読み出し(ステップS1402、ステップS1403)、新たなシーケンス番号を計算する(ステップS1404)。具体的には、シーケンス番号保持部118から読み出したシーケンス番号に1を加算した値を新たなシーケンス番号とする。コミット部140は、バックアップ部110に新シーケンス番号を送出する(ステップS1405)。バックアップ部110は、新シーケンス番号をシーケンス番号保持部118に設定する(ステップS1406)。バックアップ部110は、書込ポインタ保持部117に保持された書込みポインタを再設定する(ステップS1407)。なお、書込みポインタの再設定は、不揮発性バックアップメモリ130をスタックとして使用している場合であり、リングバッファとして使用している場合は再設定を行わない。シーケンス番号保持部118が不揮発性の場合は、コミット処理をここで終了しても構わない。
【0112】
コミット部140は、バックアップ部110の書込ポインタ保持部117から書込ポインタを読み出す(ステップS1408、ステップS1409)。コミット部140は、書込みポインタの不揮発性主記憶部120への書込みアクセスを送出する(ステップS1410)。この書込みアクセスは、不揮発性主記憶部120のコミットデータ書込アドレス保持部144に保持されたアドレスに書込みポインタの値を書込むものである。以下、この書込みアクセスを検出したことに応じて、バックアップ部110でバックアップ処理(ステップS1411〜ステップS1418)が行われる。この処理は、図13で説明したバックアップ処理のステップS1302〜ステップS1309の処理と同様であるため、上述した説明を参照し、ここでの説明を省略する。この処理により、コミット部140が設定した新しいシーケンス番号のバックアップデータが一つ作成され、不揮発性バックアップメモリ130内でそれまで最新だった最新シーケンスの無効化が行われる。
【0113】
次に、ロールバック処理について説明する。図15は、各部によるロールバック処理を示すシーケンス図である。
【0114】
まず、制御ソフトウェア170は、ロールバック部150にロールバックを要求する(ステップS1501)。ロールバック部150は、バックアップ部110のバックアップ処理を無効にする(ステップS1502)。ロールバック部150は、不揮発性バックアップメモリ130から最新シーケンスのバックアップデータを特定する(ステップS1503)。ロールバック部150は、不揮発性バックアップメモリ130から最新シーケンスのバックアップデータを読み出す(ステップS1504、ステップS1505)。ロールバック部150は、最新シーケンスのバックアップデータを用いて不揮発性主記憶部120に元データを書き戻す(ステップS1506)。
【0115】
ロールバック部150は、ロールバックに使用したシーケンスのシーケンス番号を、バックアップ部110のシーケンス番号保持部118に設定する(ステップS1507)。例えば、シーケンス番号“99”のバックアップデータを用いて、ロールバックした場合は、シーケンス番号に“99”を設定する。ロールバック部150は、ロールバックに使用したバックアップデータのうち、最後尾のバックアップデータ、すなわち最後にバックアップされたデータ(最初に不揮発性主記憶部120に元データを書戻したバックアップデータ)の次のアドレスを、バックアップ部110の書込ポインタ保持部117に設定する(ステップS1508)。例えば、ロールバックに使用したバックアップデータのアドレスが“12”であった場合は、書込みポインタとして“13”を設定する。
【0116】
ロールバック部150は、バックアップ部110のバックアップ処理を有効にする(ステップS1509)。ロールバック部150は、コミット部140にコミット処理を要求する(ステップS1510)。
【0117】
それ以降の処理は、図14で説明したコミット処理のステップS1402〜ステップS1418の処理と同様であるため、上述した図14および説明を参照し、ここでの説明を省略する。なお、コミット処理において、シーケンス番号は、新シーケンス番号が設定される。例えばロールバックに使用したシーケンスのシーケンス番号“99”であれば、新シーケンス番号として“100”が設定される。また、書込みポインタは、不揮発性バックアップメモリ130がスタックとして使用されている場合は、不揮発性バックアップメモリ130の先頭アドレスが設定され、不揮発性バックアップメモリ130がリングバッファとして使用されている場合は、既に設定されているロールバックで使用したバックアップデータの次のアドレスとなる。
【0118】
このように、バックアップ処理、コミット処理およびロールバック処理において、バックアップ部110、コミット部140、そしてロールバック部150は連携して動作する。本実施の形態では、シーケンス番号および完全性検証用データを用いることにより、ロールバック部150がロールバックに必要なデータを特定することができるため、チェックポイント時点の不揮発性主記憶部120の状態を正確に復元できる。これにより、バックアップデータを様々な構成にする場合や、不揮発性バックアップメモリ130に対して様々なデータの格納の仕方、取り出し方をする場合であっても、不揮発性主記憶部120の内容をロールバックすることができる。ひいては、不意の電源断後の電源復旧時において、コンピュータの動作を保証することが可能となる。
【0119】
なお、本発明は、上記実施の形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。また、上記実施の形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成することができる。例えば、実施の形態に示される全構成要素からいくつかの構成要素を削除してもよい。さらに、異なる実施の形態にわたる構成要素を適宜組み合わせてもよい。
【図面の簡単な説明】
【0120】
【図1】本実施の形態にかかるPCの構成を示すブロック図である。
【図2】不揮発性バックアップメモリに格納されるバックアップデータのデータ構成の一例を示す説明図である。
【図3】不揮発性バックアップメモリに格納されるバックアップデータのデータ構成の一例を示す説明図である。
【図4−1】バックアップ部が行うバックアップ処理手順を示すフローチャートである。
【図4−2】バックアップ部が行うバックアップ処理手順を示すフローチャートである。
【図5】バックアップ部が行うバックアップデータ生成処理手順を示すフローチャートである。
【図6】コミット部によるコミット処理手順を示すフローチャートである。
【図7−1】コミット処理時の不揮発性バックアップメモリ(スタック)の状態の一例を示す説明図である。
【図7−2】コミット処理時の不揮発性バックアップメモリ(スタック)の状態の一例を示す説明図である。
【図7−3】コミット処理時の不揮発性バックアップメモリ(スタック)の状態の一例を示す説明図である。
【図8−1】コミット処理時の不揮発性バックアップメモリ(リングバッファ)の状態の一例を示す説明図である。
【図8−2】コミット処理時の不揮発性バックアップメモリ(リングバッファ)の状態の一例を示す説明図である。
【図8−3】コミット処理時の不揮発性バックアップメモリ(リングバッファ)の状態の一例を示す説明図である。
【図9】ロールバック部によるロールバック処理手順を示すフローチャートである。
【図10】ロールバックデータ特定部による最新シーケンス特定処理手順を示すフローチャートである。
【図11】不揮発性バックアップメモリの状態の一例を示す説明図である。
【図12】不揮発性バックアップメモリの状態の一例を示す説明図である。
【図13】各部によるバックアップ処理を示すシーケンス図である。
【図14】各部によるコミット処理を示すシーケンス図である。
【図15】各部によるロールバック処理を示すシーケンス図である。
【符号の説明】
【0121】
100 パーソナルコンピュータ(PC)
110 バックアップ部
111 主記憶アクセス制御部
112 バックアップ制御部
113 バックアップメモリアクセス制御部
114 バックアップデータ生成部
115 完全性検証用データ生成部
116 バックアップメモリ先頭アドレス保持部
117 書込ポインタ保持部
118 シーケンス番号保持部
120 不揮発性主記憶部
130 不揮発性バックアップメモリ
140 コミット部
141 コミット制御部
142 書込ポインタアクセス部
143 コミットデータ書込部
144 コミットデータ書込アドレス保持部
145 シーケンス番号更新部
150 ロールバック部
151 ロールバック制御部
152 ロールバックデータ特定部
153 ロールバックデータ読出部
154 ロールバックデータ書戻部
160 プロセッサ部
170 制御ソフトウェア
180 バス
200 電源

【特許請求の範囲】
【請求項1】
不揮発性の主記憶部と、
前記主記憶部に記憶されたデータの複製を記憶する不揮発性のバックアップ記憶部と、
前記バックアップ記憶部に記憶されたデータのそれぞれについて前記主記憶部へ書戻しが必要か否かを識別する際に用いられるシーケンス番号を記憶する不揮発性のシーケンス番号記憶部と、
プロセッサ部から送出された、前記主記憶部に対する書込み対象のデータと当該書込み対象のデータの書込み先を指定する書込み先アドレスとを含む書込みアクセスを検出した場合に、前記書込み先アドレスによって指定される記憶領域に既に記憶されている元データを読取る第1の読取手段と、
前記シーケンス番号記憶部に記憶されているシーケンス番号を読取る第2の読取手段と、
前記第1の読取手段で読取られた前記元データと、前記書込みアクセスに含まれる前記書込み先アドレスと、前記第2の読取手段で読取られた前記シーケンス番号と、前記元データと前記書込み先アドレスと前記シーケンス番号とが前記バックアップ記憶部に正常に書込まれたか否かを示す完全性検証用データとを含むバックアップデータを、前記バックアップ記憶部へ書込む第1の書込手段と、
前記バックアップデータが前記バックアップ記憶部に書込まれた後、前記主記憶部の前記書込み先アドレスによって指定された記憶領域へ、前記書込み対象のデータを書込む第2の書込手段と、
前記シーケンス番号記憶部に記憶されたシーケンス番号を変更する変更手段と、
前記シーケンス番号が前回変更された時点における前記主記憶部の記憶内容へ、前記主記憶部の記憶内容を書戻す旨を指示された場合に、前記バックアップ記憶部に格納された前記バックアップデータの中から、前記シーケンス番号記憶部に記憶されたシーケンス番号を含み、かつ正常な書込みが行われたことを示す完全性検証用データを含むバックアップデータを選択する選択手段と、
選択された前記バックアップデータに含まれる前記元データおよび前記書込み先アドレスを抽出する抽出手段と、
前記バックアップデータから抽出された前記元データおよび前記書込みアドレスごとに、当該元データを当該書込み先アドレスが示す前記主記憶部上の記憶領域へ書込む第3の書込手段と、
を備えることを特徴とする情報処理装置。
【請求項2】
前記完全性検証用データは、前記バックアップデータに含まれる、前記元データ、前記書込み先アドレス、前記シーケンス番号のいずれかと同一の値であり、
前記第1の書込手段は、前記バックアップデータを前記バックアップ記憶部へ書込む際に、前記バックアップデータに含まれる前記元データ、前記書込み先アドレス、前記シーケンス番号、および前記完全性検証用データのうち、前記完全性検証用データと同一の値となった前記元データ、前記書込み先アドレス、前記シーケンス番号のいずれかを最初に書込み、前記完全性検証用データを最後に書込むこと、を特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記完全性検証用データは、前記バックアップデータに含まれる、前記元データ、前記書込み先アドレス、前記シーケンス番号のいずれかと同一の値であり、
前記第1の書込手段は、前記バックアップデータを前記バックアップ記憶部へ書込む際に、前記バックアップデータに含まれる、前記元データ、前記書込み先アドレス、前記シーケンス番号、および前記完全性検証用データのうち、前記完全性検証用データを最初に書込み、前記完全性検証用データと同一の値となった前記元データ、前記書込み先アドレス、前記シーケンス番号のいずれかを最後に書込むこと、を特徴とする請求項1に記載の情報処理装置。
【請求項4】
前記第1の書込手段は、前記完全性検証用データを格納した記憶領域と、前記完全性検証用データと同一の値のデータを格納した記憶領域との間の記憶領域に、前記バックアップデータのうち、前記完全性検証用データまたは前記完全性検証用データと同一の値のデータを除くデータを書込むこと、を特徴とする請求項2または請求項3に記載の情報処理装置。
【請求項5】
前記第1の書込手段は、前記バックアップデータに含まれる、前記元データ、前記書込み先アドレス、前記シーケンス番号、前記完全性検証用データのうち、前記完全性検証用データを最後尾の記憶領域に書込むこと、を特徴とする請求項4に記載の情報処理装置。
【請求項6】
前記完全性検証用データは、前記シーケンス番号と同一番号のデータであること、を特徴とする請求項4または請求項5に記載の情報処理装置。
【請求項7】
前記第1の書込手段は、読取られた前記元データと同一の値を前記完全性検証用データとし、前記バックアップデータに含まれる、前記元データ、前記書込み先アドレス、前記シーケンス番号、前記完全性検証用データのうち、前記完全性検証用データを先頭の記憶領域に格納し、前記元データを最後尾の記憶領域に書込むこと、を特徴とする請求項2または請求項3に記載の情報処理装置。
【請求項8】
前記完全性検証用データは、前記元データ、前記書込み先アドレス、および前記シーケンス番号の少なくとも1つ以上についての排他的論理和によるパリティデータであること、を特徴とする請求項1乃至請求項3のいずれか1項に記載の情報処理装置。
【請求項9】
前記バックアップ手段は、前記プロセッサ部と前記主記憶部との間に接続され、前記プロセッサ部から前記書込みアクセスを受け、受けた前記書込みアクセスを前記主記憶部へ送出すること、を特徴とする請求項1乃至8のいずれか1項に記載の情報処理装置。
【請求項10】
前記シーケンス番号記憶部は、揮発性の記憶装置から構成され、
前記変更手段は、前記主記憶部上の記憶領域を示すアドレスを記憶する書込みアドレス記憶部を有し、
前記第2の書込手段は、前記変更手段によって前記シーケンス番号記憶部に記憶されているシーケンス番号が変更された後に、
前記書込みアドレス記憶部に記憶されたアドレスが示す前記主記憶部上の記憶領域へ、書込み対象のデータを書込むこと、を特徴とする請求項1乃至9のいずれか1項に記載の情報処理装置。
【請求項11】
前記バックアップ記憶部で前記バックアップデータの書込みアドレスを記憶する書込みアドレス記憶手段と、
前記変更手段によって前記シーケンス番号記憶部に記憶されているシーケンス番号が変更された後に、前記書込みアドレス記憶手段に記憶する前記書込みアドレスを前記バックアップ記憶部の先頭アドレスとする書込みアドレス設定手段と、をさらに備えることを特徴とする請求項1乃至10のいずれか1項に記載の情報処理装置。
【請求項12】
不揮発性の主記憶部と、前記主記憶部に記憶されたデータの複製を記憶する不揮発性のバックアップ記憶部と、前記バックアップ記憶部に記憶されたデータのそれぞれについて前記主記憶部へ書戻しが必要か否かを識別する際に用いられるシーケンス番号を記憶する不揮発性のシーケンス番号記憶部とを備える情報処理装置のデータ復旧方法であって、
プロセッサ部から送出された、前記主記憶部に対する書込み対象のデータと当該書込み対象のデータの書込み先を指定する書込み先アドレスとを含む書込みアクセスを検出した場合に、前記書込み先アドレスによって指定される記憶領域に既に記憶されている元データを読取る第1の読取ステップと、
前記シーケンス番号記憶部に記憶されているシーケンス番号を読取る第2の読取ステップと、
前記第1の読取ステップで読取られた前記元データと、前記書込みアクセスに含まれる前記書込み先アドレスと、前記第2の読取ステップで読取られた前記シーケンス番号と、前記元データと前記書込み先アドレスと前記シーケンス番号とが前記バックアップ記憶部に正常に書込まれたか否かを示す完全性検証用データとを含むバックアップデータを、前記バックアップ記憶部へ書込む第1の書込ステップと、
前記バックアップデータが前記バックアップ記憶部に書込まれた後、前記主記憶部の前記書込み先アドレスによって指定される記憶領域へ、前記書込み対象のデータを書込む第2の書込ステップと、
前記シーケンス番号記憶部に記憶されたシーケンス番号を変更する変更ステップと、
前記シーケンス番号が前回変更された時点における前記主記憶部の記憶内容へ、前記主記憶部の記憶内容を書戻す旨を指示された場合に、前記バックアップ記憶部に格納された前記バックアップデータの中から、前記シーケンス番号記憶部に記憶されたシーケンス番号を含み、かつ正常な書込みが行われたことを示す完全性検証用データを含むバックアップデータを選択する選択ステップと、
選択された前記バックアップデータに含まれる前記元データおよび前記書込み先アドレスを抽出する抽出ステップと、
前記バックアップデータから抽出された前記元データおよび前記書込みアドレスごとに、当該元データを当該書込み先アドレスが示す前記主記憶部上の記憶領域へ書込む第3の書込ステップと、
を含むことを特徴とする情報処理装置のデータ復旧方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4−1】
image rotate

【図4−2】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7−1】
image rotate

【図7−2】
image rotate

【図7−3】
image rotate

【図8−1】
image rotate

【図8−2】
image rotate

【図8−3】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate