JP5398795B2 - 情報処理装置及び情報処理プログラム - Google Patents

情報処理装置及び情報処理プログラム Download PDF

Info

Publication number
JP5398795B2
JP5398795B2 JP2011173100A JP2011173100A JP5398795B2 JP 5398795 B2 JP5398795 B2 JP 5398795B2 JP 2011173100 A JP2011173100 A JP 2011173100A JP 2011173100 A JP2011173100 A JP 2011173100A JP 5398795 B2 JP5398795 B2 JP 5398795B2
Authority
JP
Japan
Prior art keywords
variable
data
flash memory
sector
backup
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2011173100A
Other languages
English (en)
Other versions
JP2011222048A (ja
Inventor
康 平岡
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Furuno Electric Co Ltd
Original Assignee
Furuno Electric Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Furuno Electric Co Ltd filed Critical Furuno Electric Co Ltd
Priority to JP2011173100A priority Critical patent/JP5398795B2/ja
Publication of JP2011222048A publication Critical patent/JP2011222048A/ja
Application granted granted Critical
Publication of JP5398795B2 publication Critical patent/JP5398795B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Techniques For Improving Reliability Of Storages (AREA)

Description

本発明は、アプリケーションプログラムの変数データおよびステータスデータのバックアップを行う、情報処理装置とプログラムとに関する。
アプリケーションプログラムのステータスデータや変数のバックアップ処理を行う際には、バックアップ媒体として、ハードディスクやDVDなどの周辺記憶装置や、データ保存用に電池を装荷したランダムアクセスメモリ(以下、RAMという。)や、保存用のフラッシュメモリが用いられる。コストや保守性の観点からはフラッシュメモリを媒体とする方法が優れていて、容量の大きさや、データ読み出しの容易さなどが特徴として挙げられる。
フラッシュメモリを媒体とする方法では、一般にフラッシュメモリ上のあるアドレスへデータが書き込まれるとそのアドレスに対する上書き処理ができなくなる。もう一度同じアドレスに対してデータを書き込むためには、セクタと呼ばれる複数のビットからなる物理的に定められた単位全体を消去し、そのセクタ消去後に再びそのアドレスへのデータ書き込みが可能となる。
また、フラッシュメモリ上のセクタを構成するビットの書き換えにはデータ保証回数の制限があり、一般に10の4乗回から10の6乗回のビットの書き換えが行われると不良なビットとなり、ビットの書き換えができなくなる性質がある。
このようなフラッシュメモリを用いてバックアップ処理を行う際には、データの書き込みは、書き込みをするアドレスからシーケンシャルに行い、セクタの最後までデータが書き込まれると、次のセクタの先頭から再びシーケンシャルにデータを書き込むシーケンシャルアクセス方式がとられる場合が多い。
また、データの管理形式としては、データをファイルとして(以下、ファイル形式という。)バックアップする形式と、データをフラッシュメモリの物理アドレスに直接書き込み(以下、アドレス形式という。)バックアップする形式とがある。
ファイル形式の場合には、フラッシュメモリ上にファイル情報を記憶するディレクトリ部という領域を用意する必要があり、ディレクトリ部の書き換え頻度が大きくなりやすく、そのために不良ビットが発生しやすいという問題がある。また、構造が複雑で、そのためにデータの書き込み時間と読み出し時間が長くなりやすいという問題もある。しかし、この形式はバックアップするアプリケーション変数の型や量の変更に関して柔軟であり、アプリケーションソフトのデータ構造に無関係に変数の型や量の変更ができるという長所がある。
一方、アドレス形式は、メモリにディレクトリ部のような特殊な領域を作る必要がなく、メモリの有効的な活用が行える。また、特殊な領域を作る必要がないためにデータ構造が単純で、そのためにデータの書き込み時間と読み出し時間が短い場合が多い。しかし、変数の型や量の変更に対応するためには、システム設計者がフラッシュメモリ上のアドレスを完全に把握する必要があるという短所をもつ。
アドレス形式を用いてバックアップ処理を行うアプリケーションを設計する場合には、フラッシュメモリ上のバックアップデータのアドレスがアプリケーションソフトの構造に依存するため、システム設計者はアプリケーションプログラムの設計のたびにバックアッププログラムを再構築する必要があり、その際には、フラッシュメモリ上のアドレスを完全に把握し、データの書き込み効率やバックアップの頑健性を考慮する必要があった。
そのため、システム設計者にとって、アプリケーションの内容とは関係の薄いバックアップ処理の設計作業が増え、システム設計者の負担が重くなるという問題があった。
情報処理装置におけるフラッシュメモリを用いたバックアップ処理において、アドレス形式のバックアップ処理は、バックアップのインフラとして共通化したり再利用したりできず、システム設計者にとって、作業負担が重い場合が多いという問題があった。
この問題を解決するために本発明では、データの読み込み時間と書き込み時間が短いアドレス形式のデータ管理でありながら、システム設計者が容易にバックアップ処理をアプリケーションに導入でき、フラッシュメモリの書き込み効率がよく、バックアップ処理の頑健性も高い、情報処理装置またはプログラムを提供することを目的とする。
また、本発明は、データを移行する局面での電源断があったとしても、エラーデータの読み込みを防ぐことを目的とする。
本発明は、アプリケーションプログラムの変数をフラッシュメモリにバックアップデータとしてセーブさせる情報処理装置において、変数は変数データと変数IDとを含み、変数データのRAM上の位置とフラッシュメモリ上のセーブ位置との対応関係を記憶した変数ディレクトリを、変数IDをつけてRAM上に構築する手段と、あらかじめ設定したセーブ条件にもとづき、変数データと変数IDとをセーブする情報として、フラッシュメモリ上の新たなセーブ位置にセーブする手段と、を備え、フラッシュメモリは、シーケンシャルにデータが書き込まれるものであり、データが書き込まれている書き込みセクタとデータが書き込まれていない非書き込みセクタとからなる複数のセクタで構成され、最後尾の書き込みセクタから連続する非書き込みセクタが少なくとも二つ以上無いとき、最後尾の書き込みセクタに連続する二つ以上のセクタが非書き込みセクタとなるようにデータ消去処理を行って、非書き込みセクタに設定する手段を備えることを特徴とする。
また、本発明は、変数をフラッシュメモリにバックアップデータとしてセーブする際に、変数データがデフォルト値を維持し続けていることを検出すると、変数をバックアップデータとしてセーブしない手段を備えたことを特徴としている。
また、本発明は、アプリケーションプログラムの起動時において、フラッシュメモリをスキャンして変数ディレクトリを再構築する手段を備えたことを特徴としている。
また、本発明は、フラッシュメモリのセクタをグループ化し、セーブ手段は、変数の種類に応じてセーブするグループを決めることを特徴としている。
また、本発明では、フラッシュメモリは、消去対象となったセクタ内に変数ディレクトリで参照されるデータがあるときに、該データをフラッシュメモリ上の新たなセーブ位置に移す手段を備えたことを特徴としている。
また、本発明では、フラッシュメモリは、セクタを消去する場合には、電源電圧が低下した時に優先してセーブするように予め設定したデータを、フラッシュメモリ上の新たなセーブ位置に、セクタを消去する前にセーブする手段を備えたことを特徴としている。
以下、本発明でのバックアップ処理を図3のデータ構造を参照して説明する。
本発明のバックアップ処理においては、バックアップする変数データ10のRAM100上の位置と、フラッシュメモリ101上のセーブ位置との対応関係を変数IDをつけてRAM100上に変数ディレクトリ2として記憶する手段と、あらかじめ設定したセーブ条件にもとづき、前記変数データ10と前記変数IDとをセーブする情報として、新たなセーブ位置にセーブする手段とを備え一つのアプリケーション変数10には、一つの変数IDを配する。
このようにアプリケーション変数のRAM100上の位置(以下RAMアドレスという。)と、フラッシュメモリ101上のセーブ位置(以下フラッシュアドレスという。)とを記憶した変数ディレクトリ2というデータベースをRAM100上に設置し、その変数データ10と変数IDとを一つのセットとし、フラッシュメモリ101にバックアップする。
変数ディレクトリ2上には、バックアップデータの様々な情報を記憶する領域(以下、フィールドという。)を配し、RAMアドレスをRAMアドレスフィールド22に記憶し、フラッシュアドレスをフラッシュアドレスフィールド23に記憶し、変数IDを変数IDフィールド21に記憶する。このように一つの変数IDに対し、複数の情報を記憶するフィールドの組20を一つ配しておく。
さらに、フラッシュアドレス101上に、バックアップデータに関する記憶領域(以下、エレメントという。)4を配し、エレメント4の中にバックアップデータ16とそのバックアップデータに関する情報を記憶し(以下、この情報を記憶した領域30をヘッダという。)、このエレメント4を書き込みの単位としてフラッシュメモリ101にデータを書き込む。
バックアッププログラムは、変数データ10や、バックアップデータ16などを監視し、規定のバックアップ条件が満たされた場合には、RAM100上の変数データ10をフラッシュメモリ101上の新たなアドレスに新たなエレメント4として記憶し、変数IDヘッダ31に変数IDを記述する。また、その際には変数ディレクトリ2上のフラッシュアドレスフィールド23を移動した先の新しいフラッシュアドレスの値に更新する。
本発明のバックアップ処理において、あるアプリケーション変数が配列変数18である場合には、その配列変数18に一つの変数IDを配し、その配列変数18の一つの要素19には一つの指数(以下、配列インデックスという。)を配し、配列要素19ごとにフラッシュメモリ101にエレメント4として記憶する。
また、この配列変数18の変数ディレクトリ2には、各配列要素19の配列インデックスとフラッシュアドレスとを対応付けて記憶しておくテーブル(以下、配列テーブルという。)9を設ける。
配列テーブル9上には、フィールドを配し、配列インデックスは配列インデックスフィールド14に記憶し、配列要素のフラッシュアドレスは配列要素フラッシュアドレスフィールド15に記憶する。
また、フラッシュメモリ101上の一つのエレメント4には、各配列要素19をバックアップデータ16として記憶するとともに、配列変数18の変数IDを変数IDヘッダ31に記憶し、配列要素19の配列インデックスを配列インデックスヘッダ32に一つのエレメント4としてバックアップする。
規定のバックアップ条件が満たされた場合には、フラッシュメモリ101上の新たなアドレスに、RAM100上の配列要素のデータ19を新たなエレメント4として記憶し、変数IDと配列インデックスとを記憶する。また、配列要素フラッシュアドレスフィールド15を移動した先の新しいフラッシュアドレスに更新する。
本発明における変数ディレクトリ2の再構築は、アプリケーションプログラムの起動時に、フラッシュメモリ101内にバックアップされていたバックアップデータ16をもとに行う。フラッシュメモリ101の先頭のセクタからシーケンシャルにフラッシュメモリ101を読み込んでいくと同時に、変数IDごとに変数ディレクトリ2を構築する。この際に、同じ変数IDのエレメント4があれば、その変数IDの変数ディレクトリ2及び変数データ10の内容は上書き処理される。フラッシュメモリ101にはシーケンシャルに新しいエレメントを記憶していくため、この上書き処理により変数ディレクトリ2及び変数データ10の内容は最新のバックアップデータ16と同期する。この変数ディレクトリ2の再構築は一度フラッシュメモリ101全体に対して行い、次にシーケンシャルに並んだ先頭のセクタから、次に書き込みを行うアドレスまで行う。
また、本発明では前記フラッシュメモリ101のセーブ領域をグループ化する。変数データ10を種類に応じてグループに分け、設定されたグループの数に従い、バックアップ処理を並列的に実行する。
また、本発明におけるフラッシュメモリ101のセクタ消去は、書き込みを行うアドレスが新しいセクタに移動するときに、一番古くに書き込みが行われたセクタに対して行う。エレメント4には、そのエレメント4を消去するかを判定するためのアクティブフラグを用意し、そのアクティブフラグを記憶するアクティブフラグフィールド24を変数ディレクトリ2上に配し、活性化したフラグを持つ変数IDであって消去セクタ上に最新のバックアップデータがある場合には、そのエレメント4を新たなセクタへと複写する。消去セクタ上の消してはいけないエレメント4を全て移動させた後にセクタ消去を行う。
また、本発明では、システムのハードウェアに電源電圧の低下(以下、パワーフェイルという。)が起こったときに、優先してバックアップするデータ(以下、パワーフェイルデータという。)が設定されている場合、セクタ消去が実行される前の段階で毎回必ずパワーフェイルデータのバックアップを行う。
本発明によれば、アドレス形式のデータ管理でありながらも異なるアプリケーションやハードウェアに共通に利用可能で、システム設計者が容易にバックアップをアプリケーションプログラムに導入でき、再利用も容易なバックアップ方式を提供できる。
また本発明によれば、変数ディレクトリを用いることで、アプリケーションプログラムの設計者は、バックアップ処理におけるフラッシュメモリのアドレス管理を、変数IDを介した管理にルーチン化することができ、作業負担の減少をさせることができる。
また本発明によれば、配列要素を個別にバックアップ処理することにより、配列変数全体をバックアップ処理する場合に比べてデータ書き換え量を抑制でき、フラッシュメモリの長寿化が実現できる。
また、本発明の変数ディレクトリ再構築手段によれば、最新のデータを判定する必要がなく、また特別な判別フラグも必要としないため、簡易なデータ構造で再構築が行うことができる。
また、本発明のセクタグループ化手段によれば、データの重要度に応じて、データバックアップの頻度をそろえ、効率的なセクタ利用と調寿命化を実現することができる。
また、本発明のセクタ消去手段によれば、セクタ消去はセクタ3に書き込み可能な領域がなくなったときにのみ行われる。そのために、セクタ消去はデータ書き込み量にのみ依存させることができ。非常に小さいセクタ消去頻度を実現できる。
また、本発明のパワーフェイルデータのバックアップ手段によれば、フラッシュメモリのセクタ消去中にパワーフェイルが起こった場合でも、確実にパワーフェイルデータをバックアップすることができる。
本発明に係る情報処理装置の構成図 セクタ消去の手順を示す図 変数IDに対応した変数ディレクトリの動作を示す概観図 バックアップ条件に従った動作を示すフローチャート バックアップ処理起動時の動作を示すフローチャート
図1は本発明の実施形態例であるフラッシュメモリと変数ディレクトリとRAM上の変数データとを配した情報処理装置の構成図であり、図3は、一つの変数IDに対応した変数ディレクトリと、エレメントとの概観図である。
情報処理装置202は、アプリケーションプログラムのバックアップ以外の処理を行うアプリケーションモジュール200とバックアップ処理を行うバックアップモジュール201とで構成されていて、中央演算回路5にフラッシュメモリ101、RAM100、入力デバイス6および出力デバイス7が接続されている。アプリケーションモジュール200には、RAM100上にアプリケーション変数のデータを変数データリスト1として配する。
バックアップモジュール201には、変数ディレクトリ2上に、一つの変数IDごとに複数の情報を記憶させておくフィールドの組20を配する。フィールドとしてはRAMアドレスを記憶するRAMアドレスフィールド22および、フラッシュアドレスを記憶するフラッシュアドレスフィールド23、変数IDを記憶する変数IDフィールド21、セクタ消去の際に新たなセクタ3に移動するかを判定するアクティブフラグフィールド24などを用いる。また、フラッシュメモリ101のエレメント4上には、バックアップデータ16とともに複数の情報を記憶させておくヘッダの組30を配する。ヘッダとしては、変数IDを記憶する変数IDヘッダ31や、配列インデックスを記憶させておく配列インデックスヘッダ32、データサイズを示すサイズヘッダ34、などを用いる。
また、この実施形態では、以降で示すさまざまな処理のために複数のフィールドやヘッダを用いている。変数データが配列変数かどうかを記述するタイプフィールド42、配列変数の場合に配列数を記述する配列数フィールド25、単体の変数の場合には変数のビットサイズを記述しておき、配列変数の場合には要素のビットサイズを記述しておくサイズフィールド43、変数データを登録および復帰させる場合にそのバックアップデータを復帰させるかをアプリケーションモジュールにより登録される登録フラグフィールド27、セクタ消去時にも消去することなく保存を続けるべきバックアップデータを登録するパーマネントフラグフィールド28、バックアップ条件の種類を記述しておく条件フィールド26などが用いられる。
なお、変数ディレクトリ2上に、クリティカルフラグフィールド44を設け、変数データ10を読み出す時のアクセス方式が割り込み禁止によるアクセスかどうかを判定し、割り込み禁止機能を実現することもできる。また、バックアップデータが保存されているセクタ3の番号を記憶しておく新セクタフィールド45、ひとつ前のバックアップデータが保存されているセクタ3の番号を記憶しておく旧セクタフィールド46、ひとつ前のバックアップデータが保存されているエレメント4のアドレスを記憶しておく旧フラッシュアドレスフィールド47、バックアップデータがエラーを含んでいる場合にエラーを記述しておくエラーフラグフィールド48などを記憶させておいて、一つ前のバックアップデータの特定や、変数データの特定、変数データの変更検知などに用いてもよい。
また、条件フィールド26より指定されるバックアップ条件の種類としては、アプリケーションから指定されるタイミングをコマンドフィールド41に記憶し実行される場合や、あらかじめ周期フィールド40に記憶されたタイミングで実行される場合や、カウンタフィールド29でのカウントに基づいて実行される場合などのタイミングで実行することができる。また、バックアップを行う条件として、RAMアドレスとフラッシュアドレスとが指定するそれぞれのデータをアプリケーションモジュール200で監視し、データの内容に変更が行われた場合には変数データ10をバックアップするという条件を加えてもよい。以上のような様々な条件に従いRAMアドレスの指定する変数データ10と、変数ディレクトリ2や配列テーブル9に保存されている情報とを、新たなエレメント4としてフラッシュメモリ101上のアドレスにバックアップする。
以上のようにアプリケーションプログラム実行時には、変数データリスト1上のある変数データ10に対して、アプリケーションによる読み出しあるいは変更が行われる。また、その変数IDの変数ディレクトリ2では、RAMアドレスフィールド22に記憶したRAMアドレスをもとに変数データリスト1上の変数データ10を参照し、フラッシュアドレスフィールド23をもとにエレメント4上のバックアップデータ16のアドレスを得る。そして、あらかじめ設定したバックアップ条件に従い、前期変数データ10をフラッシュメモリ101上の新たなアドレスに記憶する。その際バックアップモジュール201はアプリケーションモジュール200の通常時の処理とは切り離し実行する。
また、配列変数の場合、各配列要素を一つのエレメント4として新たなフラッシュアドレスにバックアップする。変数ディレクトリ2に保存されたあるひとつの変数IDが示すデータが配列変数18である場合、変数ディレクトリ2上のフラッシュアドレスフィールド23は、RAM100上に別途設置された配列テーブル9のRAMアドレスを記憶し、変数ディレクトリ2上に配列数フィールド25を設ける。配列テーブル9では、それぞれの配列要素19を区別する配列インデックスとそれぞれの配列要素19のフラッシュアドレス上でのアドレスとを対応付ける。このようにフラッシュメモリ101上での配列要素19のアドレス管理を一つ一つ行うことにより、たとえば配列変数18のひとつの要素19のみにデータの変更が起こった場合に、配列全体18をバックアップデータ16としてバックアップ処理するのではなく、その配列要素19のみをバックアップデータ16としてバックアップ処理することができる。
なお、変数ディレクトリ2上のRAMアドレスフィールド22が指定するRAMアドレスと配列要素19のデータサイズとから各配列要素のRAM100上のデータ19を特定することができる。
なお、この例においては配列変数18に変数IDを附してバックアップ処理を行うが、配列要素19に変数IDを附してバックアップ処理を行ってもよい。
次に、フラッシュメモリ101内へのデータの複写方法を図2で表す。一つのエレメント4ごとに、ひとつのバックアップデータ16と、そのバックアップデータに対応した情報をヘッダ30として記憶している。まず変数データ10の保存はフラッシュメモリ101の先頭のセクタ3の先頭アドレスからシーケンシャルに行う。図2(a)のように、書き込みが行われているセクタ3に書き込み予定のデータのサイズよりも大きい空き領域がある場合には、空き領域にデータを書き込む。一方、図2(b)のように、データサイズ分の空き領域がない場合には、次のセクタ領域を新たな書き込みを行うセクタ領域とする。
新たなセクタに書き込み領域が移る際には、フラッシュメモリ101の先頭セクタからシーケンシャルにフラッシュメモリ101上の空きセクタ領域を検索する。その結果、フラッシュメモリ101の書き込みを行っていたセクタ3から規定数先までのセクタ領域が空き領域でなければ、もっとも前に書き込んだセクタを消去する。消去の際には消去対象のセクタ3に含まれるエレメント4すべてを一度に消去する。図2(c)のように規定数先のセクタ領域から、消さずに保存しておくべきエレメント4を新しいセクタに複写した後、消去セクタのデータを消去する。
これにより、フラッシュメモリ101上には規定数の連続してデータ消去されたセクタ領域と、連続して書き込まれているセクタ領域とが常に存在する。
また、フラッシュメモリ101の最後尾のセクタまで消去され、新たにセクタ消去を行う必要がある場合には、フラッシュメモリ先頭のセクタ領域を消去する。すると、このフラッシュメモリ101の書き込み領域と非書き込み領域は、常に円環状に循環し、循環して連続な書き込み領域の先頭のセクタには最も古い変数データがバックアップされ、循環して連続な書き込み領域の最後尾のセクタの、最後尾のアドレスに、バックアップするエレメント4を書き込む。
セクタ消去時に、一定の条件を満たすエレメント4は新しいセクタ3に移動させる。このエレメント4は、アプリケーションが使用していてバックアップを行うように登録されたエレメント4のみではなく、消去せずにフラッシュメモリ101上に常に残すように登録されたバックアップデータのエレメント4も含む。エレメント4にはそのエレメントが変数ディレクトリ2に登録されているという情報を記憶しておく登録フラグフィールド27と、消去せずに常に残しておくという情報を記憶しておくパーマネントフラグフィールド28とが配されており、フラッシュメモリ101上のエレメント4にはパーマネントフラグを記憶する属性フラグ・チェックサムヘッダ35が配され、パーマネントフラグの状態をフラッシュメモリ101のバックアップデータ上にも保存される。登録フラグがONの変数とパーマネントフラグがONの変数は、セクタ消去の際に消去されずに新しいセクタ3に移動する。
次に、バックアップ処理を行うタイミングについて述べる。バックアップを定期的に行う場合には、アプリケーションからバックアップモジュール201を、何らかの形で自動的に繰り返し呼び出す。バックアップモジュール201側で、変数ディレクトリ2に条件フィールド26を配し、時間をカウントして定期処理を行う場合に用いられる周期フィールド40やカウンタフィールド29などを配した構成にして時間計測を行い、アプリケーションによってあらかじめ登録された周期に達した場合にバックアップ処理を行う。
また、変数データ10に変更が加わるたびにバックアップ処理を行いたい場合には、変数ディレクトリ2のRAMアドレスフィールド22の指し示す変数データ10とフラッシュアドレスフィールド23の指し示すバックアップデータ16を逐次比較し、2つの値が異なる場合に、バックアップ処理を行う。
また、アプリケーション側で任意にバックアップ処理を行うタイミングを指定する場合には、変数ディレクトリ2に、同時にコマンドフィールド41を配し、アプリケーションからの指示を保存する。このコマンドフィールド41を監視し、バックアップが指示されるとバックアップを行う。
ここで図4に条件別バックアップ実施例の処理フローを示す。複数のアプリケーションデータに対してそれぞれ異なるタイミングで条件付けてバックアップ処理を行う。バックアップ処理に演算回路の処理が渡された場合に変数ディレクトリ2に登録されているすべての変数IDに対して、以下の処理が行われる。まずステップ1においてコマンドフィールド41にアプリケーションからのバックアップ指示の設定がされているかを判定し、バックアップ指示の設定を与えられている変数である場合には、ステップ9においてバックアップ処理が行われる。
また、バックアップ指示の設定がない場合においても、ステップ2において条件フィールド26を読み込み、バックアップが変数変化時に行うように設定されている場合には、ステップ3において、変数がデフォルト値を維持し続けているならばバックアップ処理を行わない。またそうでない場合はステップ4において変数に変化が起きているかを、変数ディレクトリ2のRAMアドレスフィールド22の指定する値とフラッシュアドレスフィールド23の指定する値とを比較することで検知する。変化がない場合にはバックアップを行わないが、変化があった場合においても、ステップ5においてさらに、変化している状態が数ターン維持されていることを条件に加えて、その条件を満たした後バックアップ処理がステップ10で行う。
また、バックアップ条件が変数変化時ではない場合においても、ステップ6において条件フィールド26を読み込み、定期的にバックアップ処理を行うように設定されていれば定期バックアップ処理を行う。ステップ7において、定期時間かどうかを判定し、定期時間であればステップ8の処理を行う。ステップ8では、変数がデフォルト値を維持し続けているかを判定する。そして、維持し続けていない場合にはバックアップ処理を行う。
ステップ3とステップ8とにおいて、変数がデフォルト値を維持し続けているならばバックアップ処理を行わないように設定する。変数が宣言された当初から、規定値を維持し続けている場合には、バックアップを行う必要がなく、この条件を判定することでバックアップ処理の量を抑制できる。たとえば変数の宣言時には全ての変数を0に設定すれば過去のバックアップデータがない変数データで値が0のデータはバックアップを省くことができる。
ステップ5においてさらに、変化している状態が数ターン維持されていることを条件に加える場合には、アプリケーション設計者がバックアップの条件として任意に時間を設定する。
また、条件フィールド26にバックアップ条件が記述されていないデータはバックアップ処理されない。
次に、アプリケーションの起動時のアプリケーション変数への値の回復処理について説明する。アプリケーションの起動時には、バックアップデータ16から変数ディレクトリ2を再構築するとともに、変数データリスト1を再編成する。変数ディレクトリ2を構築した後、アプリケーションが指定する再使用したいデータの変数IDのバックアップデータ16が、変数データリスト1に読み込まれるとともに、バックアップを取る変数IDが指定され変数ディレクトリ2の登録フラグフィールド27に登録される。
通常、フラッシュメモリ101上には、循環して連続な書き込み済みセクタ領域と、同様に連続な非書き込みセクタ領域とが設置される。また、書き込み済みセクタ領域には、同一変数IDのバックアップデータが複数回書き込まれている。データはシーケンシャルに並び、連続して書き込まれた領域のもっとも先頭のデータが最も古くに書き込まれたデータで、そこから時間順に記憶されている。そのため、最も新しいデータは、同一変数IDのエレメントのうち、最も後方のエレメントに位置する。
変数ディレクトリ2の再構築の際には、まず、フラッシュメモリ101の先頭セクタの先頭アドレスから最後尾セクタの最後尾アドレスまで、すべてのバックアップデータ16をシーケンシャルに変数ディレクトリ2へと書き込む。同時に、シーケンシャルに並んだエレメントのうち最も後方のエレメントの位置を検索しておき、再び先頭セクタから検索したエレメントまでの再書き込みを行う。これにより、常に最も新しいデータで変数ディレクトリ2の変数IDが上書き処理される。
この変数ディレクトリ2の再構築により、フラッシュアドレス101にバックアップされたデータと変数ディレクトリ2とを整合させる。その後、さらにアプリケーションの変数データリスト1との整合をとったり、バックアップ処理条件の登録を受けたりしてもよい。
次に、アプリケーション側から見た場合のバックアップ実行のための手続きを図5で示す。ステップ30のアプリケーションからのバックアップモジュール起動処理により、ステップ20のバックアップ処理が起動する。バックアップ処理が起動すると、ステップ21で前述の変数ディレクトリ2の再構築を行う。このときに同時にアプリケーションプログラムによって変数のバックアップ条件の情報がステップ31において登録される。このときに登録される変数の変数IDが、変数ディレクトリ2にすでにある場合には、その変数を登録し登録フラグをONにするとともに、バックアップデータの値が変数ディレクトリ2内の変数アドレスが示すRAMアドレスに書かれアプリケーションの変数データ10として用いられる。また、変数ディレクトリ2に存在しない変数IDの場合には変数ディレクトリ2に新たな変数IDを持つデータとして登録される(ステップ22)。
以降、内部処理が渡されると、ステップ23のバックアップ処理を行う。内部処理の引渡しは、アプリケーションプログラムのサブルーチンの形式でもよく、スケジューラ等によって内部処理が引き渡されるバックグラウンド処理の形式でもよい。アプリケーションプログラムからのバックアップ処理の呼び出しは、通常は以上の起動と登録との手順のみであるが、登録された設定のバックアップ条件以外の条件でバックアップを行いたいときに用いるステップ32のバックアップ指示と、ステップ33のバックアップ設定の変更を行うための再設定とは、随意に呼び出すことができる。
このように、アプリケーションプログラムからの呼び出しは起動と登録のみでバックアップを実行する。
このような構成にすることで、アプリケーションの変更があった場合にも、消去したくないデータと変数IDを残すことができる。アプリケーション起動時の変数IDの登録以外、アプリケーションへの依存がないために、アプリケーションに何らかの変更が行われた場合において、新しい変数に対しては新しい変数IDを登録させることで対応し、変更に対する冗長性を高くすることができる。
次に、終了処理以外での電源断が発生し、フラッシュデータの書き込みエラーが起こったとしても、エラーデータを読み込むことなく、代替となる過去のデータを自動的に読み込んで対応する例を示す。
バックアップモジュール201が起動している場合であって、何らかのデータが書き込まれている途中で電源断が発生した場合には、記述された変数IDに対応するデータがエラーデータとなっている場合がある。再起動時にそのようなエラーデータを誤って変数ディレクトリ2に読み込んで再構築することを避け、エラーデータを読み込まずに、エラーデータ以前にバックアップ処理されたバックアップデータを読み込む。変数ディレクトリ2の再構築は、シーケンシャルな上書き処理により行われていたため、エラーデータの判別ができれば、それを変数ディレクトリ2に読み込まないことで自動的にエラーの起こっていない最新のバックアップデータからシステムを復旧することができる。
このために、エレメント4に通常のバックアップデータ16と同時にデータサイズを記憶しておくサイズヘッダ34および、属性フラグおよびチェックサムを記憶しておく属性フラグ・チェックサムヘッダ35、を用意することで対応可能となる。バックアップデータの記述に際して、エレメント4内にデータサイズ、バックアップデータ、属性フラグおよびチェックサムの順番で記述する。このような順番で記述することにより、属性フラグおよびチェックサムを記述する前の電源断による書き込みエラーの発生に対しては、属性フラグおよびチェックサムが正しく書き込まれない。そのため、属性フラグおよびチェックサムが正しく書き込まれていないエレメント4には、書き込み途中でエラーが発生したことが検知でき、エラーデータを読みこまないようにすることができる。
また、複数の変数間に、常に同期が取られている必要がある場合、ある変数データ10が正常にバックアップされても、同時に同期すべき別の変数のバックアップ処理前に電源断等でバックアップが中断された場合にはそれを検知し、同期が取れている過去の状態に設定しなおす必要がある。
この同期処理は、フラッシュメモリ101内に同期フラグエレメントと終端同期フラグエレメントを備えることで対応可能となる。同期フラグエレメントと終端同期フラグエレメントには、たとえば、固有の変数IDを割り当てておき同期フラグエレメントであるということを判定可能にしておく。また、データとして同期させるグループのメンバの変数IDを記述しておく。また、同期フラグエレメントと対になるエレメントとして、終端同期フラグエレメントもあわせて記述する。ここでこの同期すべき変数グループのメンバをバックアップ処理する場合には、必ず、同期フラグエレメントと終端同期フラグエレメントとで前記メンバをはさむように記述する。このように記述することで同期グループの記述途中の電源断に対して、同期フラグエレメントとデータとして記述されたメンバと終端同期フラグエレメントが記憶された順番に従って記述されていない場合には電源断が起こったことが検知できる。また、これらのエレメントの記述の際には、変数ディレクトリ2上にルートフラグフィールド49とチェーンフィールド50を配しておく。ルートフラグには、同期して記述しておくべき変数のエレメントのうち先頭に保存するエレメントかどうかを記述しておき、チェーンフィールド50にはそのエレメントの次に保存するべき変数データ10を示しておく。同期バックアップ処理は、まずルートフラグがONになっている変数データ10を検知すると、その変数ディレクトリ2のチェーンフィールド50が示す別の変数ディレクトリ2を検索し、さらにそこからチェーンフィールド50に記述された変数ディレクトリ2を次々と検索する。そして同期フラグエレメントのデータとしてそのチェーンを記述した後それぞれの変数ディレクトリ2が示す変数データ10がバックアップされ最後に終端同期フラグエレメントを記述する。このようにして同期バックアップを実現することができる。
また、一般にフラッシュメモリ101のデータ消去には時間がかかり、その間の電源断がおこると消去作業中のセクタ全体が不定なビット列となってしまう。そのエラーデータを読み込むことがないようにするためには、常に連続して2以上のセクタ3が空き領域になっているように前記非書き込みセクタを設定すればよい。上述の書き込みを行う新しいセクタを検出する過程において、常に非書き込みセクタが2以上連続するように設定し、非書き込みセクタが連続していなければ、少なくともひとつ存在するはずの非書き込みセクタの次のセクタ3を消去する。このように処理することで、たとえ電源断により全体が不定なビットとなったセクタ3であっても常に消去の対象になるためにそこからデータが読み出されることはなくなる。また、消去予定のセクタ3に存在する有効なデータを移行した後でセクタ消去を行うために、データを移行する局面での電源断があったとしても、前述のデータ書き込みにおける電源断対策によってエラーデータの読み込みを防ぐことができる。
また、バックアップ処理はバックグラウンドで実行される定期的な処理であるが、情報処理装置への入力電圧が何らかの原因により低下してしまうパワーフェイルなどの特殊なタイミングで、バックアップ処理を実行したい場合がある。また、更新頻度が高い変数と、重要な変数とを区別して保存したい場合もある。
パワーフェイルや変数を区別して保存するには、セクタ群を多重化することで対応が可能である。たとえば変数IDを0〜FFFまでをAセクタ群として、1000からFFFFまでをBセクタ群として、それ以外をCセクタ群と分けておき、それぞれのセクタ群に対応したバックアップモジュール201を並行して実行する。
パワーフェイル時に起動する割り込みプログラムにおいてバックアップしたい変数を登録しておき、割り込みプログラム中でバックアップモジュール201を呼び出し、パワーフェイル時にバックアップ対象の変数を多重化した別のセクタ3に記憶し、電源断に対応する。しかし、セクタ消去中のパワーフェイルの場合には、セクタ消去の処理に非常に時間がかかり、バックアップ処理を行う前に電源断がおこる事がある。このときは一般に割り込み処理でセーブ(書き込み)はできない。そのため、パワーフェイルデータが設定されている場合には、セクタ消去実行前に必ずパワーフェイルデータをバックアップセーブすることで、パワーフェイルに対しても確実にパワーフェイル対象の変数をバックアップ処理することができるようになる。たとえば、書き込みを行っていたセクタ3の空き領域のサイズが、一定のサイズより小さくなったときに、このバックアップを行い、バックアップが終了した後で消去対象のセクタ3を消去する。
以上のようにしてエラーデータを読み込むことなく正常なバックアップデータからアプリケーション変数を復旧することができ、頑健性の高いバックアップ処理を得ることができる。
1 変数データリスト
2 変数ディレクトリ
3 セクタ
4 エレメント
5 中央演算回路
6 入力デバイス
7 出力デバイス
9 配列テーブル
10 RAM上の変数のデータ
14 配列インデックスフィールド
15 配列要素フラッシュアドレスフィールド
18 RAM上の配列変数のデータ
19 RAM上の配列要素のデータ
20 変数ディレクトリのフィールドの組
21 変数IDフィールド
22 RAMアドレスフィールド
23 フラッシュアドレスフィールド
24 アクティブフラグフィールド
25 配列数フィールド
26 条件フィールド
27 登録フラグフィールド
28 パーマネントフラグフィールド
29 カウンタフィールド
30 エレメントのヘッダの組
31 変数IDヘッダ
32 配列インデックスヘッダ
34 サイズヘッダ
35 属性フラグ・チェックサムヘッダ
40 周期フィールド
41 コマンドフィールド
42 タイプフィールド
43 サイズフィールド
44 クリティカルフラグフィールド
45 新セクタフィールド
46 旧セクタフィールド
47 旧フラッシュアドレスフィールド
48 エラーフラグフィールド
49 ルートフラグフィールド
50 チェーンフィールド
100 RAM
101 フラッシュメモリ
200 アプリケーションモジュール
201 バックアップモジュール
202 情報処理装置

Claims (12)

  1. アプリケーションプログラムの変数をフラッシュメモリにバックアップデータとしてセーブさせる情報処理装置において、
    前記変数は変数データと変数IDとを含み、
    前記変数データのRAM上の位置と、前記フラッシュメモリ上のセーブ位置との対応関係を記憶した変数ディレクトリを、変数IDをつけてRAM上に構築する手段と、
    あらかじめ設定したセーブ条件にもとづき、前記変数データと前記変数IDとをセーブする情報として、前記フラッシュメモリ上の新たなセーブ位置にセーブする手段と、を備え、
    前記フラッシュメモリは、シーケンシャルにデータが書き込まれるものであり、データが書き込まれている書き込みセクタとデータが書き込まれていない非書き込みセクタとからなる複数のセクタで構成され、最後尾の書き込みセクタから連続する非書き込みセクタが少なくとも二つ以上無いとき、前記最後尾の書き込みセクタに連続する二つ以上のセクタが非書き込みセクタとなるようにデータ消去処理を行って、前記非書き込みセクタに設定する手段を備えることを特徴とする情報処理装置。
  2. 前記変数を前記フラッシュメモリにバックアップデータとしてセーブする際に、前記変数データがデフォルト値を維持し続けていることを検出すると、前記変数をバックアップデータとしてセーブしない手段を備えた請求項1に記載の情報処理装置。
  3. アプリケーションプログラムの起動時において、フラッシュメモリをスキャンして前記変数ディレクトリを再構築する手段を備えた請求項1または請求項2に記載の情報処理装置。
  4. 前記フラッシュメモリのセクタをグループ化し、前記セーブ手段は、前記変数の種類に応じてセーブするグループを決める請求項1〜請求項3のいずれかに記載の情報処理装置。
  5. 前記フラッシュメモリは、消去対象となったセクタ内に前記変数ディレクトリで参照されるデータがあるときに、該データをフラッシュメモリ上の新たなセーブ位置に移す手段を備えた請求項1〜請求項4のいずれかに記載の情報処理装置。
  6. 前記フラッシュメモリは、セクタを消去する場合には、電源電圧が低下した時に優先してセーブするように予め設定したデータを、フラッシュメモリ上の新たなセーブ位置に、セクタを消去する前にセーブする手段を備えた請求項1〜請求項5のいずれかに記載の情報処理装置。
  7. コンピュータによって実行されるアプリケーションプログラムが使用する変数をフラッシュメモリにバックアップデータとしてセーブする手段として前記コンピュータを機能させるためのプログラムであって、
    前記変数は変数データと変数IDとを含み、
    前記プログラムは、
    前記変数データのRAM上の位置とフラッシュメモリ上のセーブ位置との対応関係を記憶した変数ディレクトリを、変数IDをつけてRAM上に構築する手段と、
    あらかじめ設定したセーブ条件に基づいて、前記変数データと前記変数IDとを、セーブする情報としてフラッシュメモリ上の新たなセーブ位置に、前記アプリケーションプログラムとは非同期にセーブするセーブ手段、
    として前記コンピュータを機能させるプログラムであって、
    シーケンシャルにデータが書き込まれ、データが書き込まれている書き込みセクタとデータが書き込まれていない非書き込みセクタとからなる複数のセクタで構成される前記フラッシュメモリに対して、最後尾の書き込みセクタから連続する非書き込みセクタが少なくとも二つ以上無いとき、前記最後尾の書き込みセクタに連続する二つ以上のセクタが非書き込みセクタとなるようにデータ消去処理を行って、前記非書き込みセクタに設定する手段を前記コンピュータに機能させるプログラム。
  8. 前記変数を前記フラッシュメモリにバックアップデータとしてセーブする際に、前記変数データがデフォルト値を維持し続けていることを検出すると、前記変数をバックアップデータとしてセーブしない手段を前記コンピュータに機能させる請求項7に記載のプログラム。
  9. アプリケーションプログラムの起動時に、フラッシュメモリをスキャンして前記変数ディレクトリを再構築する手段を前記コンピュータに機能させる請求項7または請求項8に記載のプログラム。
  10. 前記フラッシュメモリのセクタをグループ化し、前記セーブ手段によって、前記変数の種類に応じてセーブするグループを決めることを、前記コンピュータに機能させる請求項7〜請求項9のいずれかに記載のプログラム。
  11. 前記フラッシュメモリに対して、消去対象となったセクタ内に前記変数ディレクトリで参照されるデータがあるときに、該データをフラッシュメモリ上の新たなセーブ位置に移す手段を前記コンピュータに機能させる請求項7〜請求項10のいずれかに記載のプログラム。
  12. 前記フラッシュメモリに対して、セクタを消去する場合に、電源電圧が低下した時に優先してセーブするように予め設定したデータを、フラッシュメモリ上の新たなセーブ位置に、セクタを消去する前にセーブする手段を前記コンピュータに機能させる請求項7〜請求項11のいずれかに記載のプログラム。
JP2011173100A 2011-08-08 2011-08-08 情報処理装置及び情報処理プログラム Active JP5398795B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2011173100A JP5398795B2 (ja) 2011-08-08 2011-08-08 情報処理装置及び情報処理プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011173100A JP5398795B2 (ja) 2011-08-08 2011-08-08 情報処理装置及び情報処理プログラム

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2004305798A Division JP4824294B2 (ja) 2004-10-20 2004-10-20 情報処理装置及び情報処理プログラム

Publications (2)

Publication Number Publication Date
JP2011222048A JP2011222048A (ja) 2011-11-04
JP5398795B2 true JP5398795B2 (ja) 2014-01-29

Family

ID=45038874

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011173100A Active JP5398795B2 (ja) 2011-08-08 2011-08-08 情報処理装置及び情報処理プログラム

Country Status (1)

Country Link
JP (1) JP5398795B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103544112B (zh) * 2013-10-17 2016-08-17 Tcl通讯(宁波)有限公司 一种移动终端的存储器坏块处理方法及移动终端
JP5981477B2 (ja) * 2014-04-04 2016-08-31 Necプラットフォームズ株式会社 フラッシュメモリ制御装置、フラッシュメモリ内蔵機器、フラッシュメモリ制御方法、及びそのためのプログラム

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09244954A (ja) * 1996-03-11 1997-09-19 Toshiba Corp 情報記憶装置
US6104638A (en) * 1999-02-26 2000-08-15 Hewlett-Packard Company Use of erasable non-volatile memory for storage of changing information
JP2002229863A (ja) * 2001-02-05 2002-08-16 Kyocera Mita Corp バックアップ回路

Also Published As

Publication number Publication date
JP2011222048A (ja) 2011-11-04

Similar Documents

Publication Publication Date Title
CN1331063C (zh) 基于数据卷快照的在线数据备份方法
TWI546818B (zh) 一種具有綠能資料持續模式的裝置驅動器
US7610465B2 (en) Method and related apparatus for data migration utilizing disk arrays
US8065492B2 (en) System and method for early detection of failure of a solid-state data storage system
CN101903866B (zh) 非易失存储介质中的数据存储的方法和系统
US8341386B2 (en) Method for updating basic input/output system and method for repairing thereof
KR100204027B1 (ko) 이중면 비휘발성 메모리를 이용한 데이타베이스 회복 장치 및 그 방법
US20150143174A1 (en) Method and apparatus for recovering metadata lost during an unexpected power down event
US20130238559A1 (en) Migration of computer data
KR20190016562A (ko) 저장 클래스 메모리를 위한 웨어 레벨링의 장치 및 방법
KR101736944B1 (ko) Nand 메모리 디바이스에 저장되는 데이터의 페일 세이프 리프레시
JP2008015769A (ja) ストレージシステム及び書き込み分散方法
US20070061540A1 (en) Data storage system using segmentable virtual volumes
CN102929750A (zh) 非易失性介质肮脏区段跟踪
JPH06274409A (ja) 一括消去型不揮発性メモリ
CN104050056A (zh) 多存储介质设备的文件系统备份
US7900003B2 (en) System, method and computer program product for storing an information block
US9772782B2 (en) Non-volatile complement data cache
JP4460967B2 (ja) メモリカード、不揮発性半導体メモリ、及び半導体メモリの制御方法
JP5183662B2 (ja) メモリ制御装置及びメモリ制御方法
JPH03224045A (ja) データ保全方式
JP5398795B2 (ja) 情報処理装置及び情報処理プログラム
KR101548452B1 (ko) 비휘발성 메모리 기반의 전자 장치의 메타 데이터 복원 방법 및 장치
CN111338850A (zh) 一种基于cow模式多快照下提高备份效率的方法及系统
JP4824294B2 (ja) 情報処理装置及び情報処理プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110809

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130930

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131015

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131022

R150 Certificate of patent or registration of utility model

Ref document number: 5398795

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250