(57)【要約】【課題】  不揮発メモリに誤って書き込まれたデータを、揮発メモリから不揮発メモリへのデータの退避時に訂正することができる。【解決手段】  一実施形態に係る電子機器は、複数の分割領域が設けられた揮発メモリと、前記揮発メモリに格納されたデータが退避される不揮発メモリと、前記揮発メモリから前記不揮発メモリに、前記分割領域ごとにデータを退避させる制御部と、を備え、前記制御部は、前記分割領域ごとの異常検出回数に基づいて、前各分割領域の退避優先順位を決定し、前記退避優先順位に従って、前記分割領域に格納されたデータを退避させる。【選択図】  図１
2018018207.tif 000002
【特許請求の範囲】
【請求項１】
複数の分割領域が設けられた揮発メモリと、
前記揮発メモリに格納されたデータが退避される不揮発メモリと、
前記揮発メモリから前記不揮発メモリに、前記分割領域ごとにデータを退避させる制御部と、
を備え、
前記制御部は、前記分割領域ごとの異常検出回数に基づいて、前記各分割領域の退避優先順位を決定し、前記退避優先順位に従って、前記分割領域に格納されたデータを退避させる電子機器。
【請求項２】
前記異常検出回数は、ベリファイ処理により検出される書き込み失敗回数である
請求項１に記載の電子機器。
【請求項３】
前記制御部は、前記不揮発メモリに対する、前記分割領域ごとのデータ更新の反映状態に基づいて、前記退避優先順位を決定する
請求項１又は請求項２に記載の電子機器。
【請求項４】
前記制御部は、前記分割領域に格納されるデータの重要度に基づいて、前記退避優先順位を決定する
請求項１乃至請求項３のいずれか１項に記載の電子機器。
【請求項５】
前記制御部は、データの退避先のアドレスの連続性に基づいて、前記退避優先順位を決定する
請求項１乃至請求項４のいずれか１項に記載の電子機器。
【請求項６】
前記制御部は、前記異常検出回数又は前記異常検出回数に基づいて計算された評価値が所定値以上の前記分割領域の数が上限ブロック数より多い場合、通常処理の実行中に、少なくとも一部の前記分割領域のデータを退避させる
請求項１乃至請求項５のいずれか１項に記載の電子機器。
【請求項７】
前記不揮発メモリを複数備え、
前記制御部は、前記各不揮発メモリへのデータの書き込み時間に基づいて、前記退避優先順位を決定する
請求項１乃至請求項６のいずれか１項に記載の電子機器。
【請求項８】
複数の分割領域が設けられた揮発メモリと、
前記揮発メモリに格納されたデータが退避される不揮発メモリと、
前記揮発メモリから前記不揮発メモリに、前記分割領域ごとにデータを退避させる制御部と、
を備える電子機器におけるデータ退避方法であって、
前記分割領域ごとの異常検出回数に基づいて、前各分割領域の退避優先順位を決定し、前記退避優先順位に従って、前記分割領域に格納されたデータを退避させるデータ退避方法。
【請求項９】
複数の分割領域が設けられた揮発メモリと、
前記揮発メモリに格納されたデータが退避される不揮発メモリと、
前記揮発メモリから前記不揮発メモリに、前記分割領域ごとにデータを退避させる制御部と、
を備える電子機器に、
前記分割領域ごとの異常検出回数に基づいて、前各分割領域の退避優先順位を決定し、前記退避優先順位に従って、前記分割領域に格納されたデータを退避させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子機器、データ退避方法、及びプログラムに関する。
【背景技術】
【０００２】
ＭＦＰ（Multi-Function Peripheral）などの電子機器では、電源ＯＦＦ時や停電時に、揮発メモリに格納されたデータが不揮発メモリに退避される。従来、退避処理の所要時間を短縮する方法として、揮発メモリに格納されたデータの内、更新されたデータだけを不揮発メモリに退避させる方法が提案されている。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
しかしながら、上記従来の方法では、揮発メモリから不揮発メモリへのデータの書き込みの際に発生する書き込み異常について考慮されていなかった。このため、上記従来の方法では、書き込み異常によって不揮発メモリに誤ったデータが書き込まれると、退避処理後にも、不揮発メモリに誤ったデータがそのまま格納され続けることがあった。
【０００４】
本発明は、上記の課題に鑑みてなされたものであり、退避処理により、不揮発メモリに格納された誤ったデータを削減することを目的とする。
【課題を解決するための手段】
【０００５】
一実施形態に係る電子機器は、複数の分割領域が設けられた揮発メモリと、前記揮発メモリに格納されたデータが退避される不揮発メモリと、前記揮発メモリから前記不揮発メモリに、前記分割領域ごとにデータを退避させる制御部と、を備え、前記制御部は、前記分割領域ごとの異常検出回数に基づいて、前各分割領域の退避優先順位を決定し、前記退避優先順位に従って、前記分割領域に格納されたデータを退避させる。
【発明の効果】
【０００６】
本発明の各実施形態によれば、退避処理により、不揮発メモリに格納された誤ったデータを削減することができる。
【図面の簡単な説明】
【０００７】
【図１】第１実施形態に係る電子機器１のハードウェア構成の一例を示す図。
【図２】揮発メモリ及び不揮発メモリのデータ状態の推移を示す図。
【図３】書き込み失敗回数と誤ライトデータとの関係を説明する図。
【図４】アドレスエラーと、誤ライトデータと、の関係を説明する図。
【図５】退避処理と、誤ライトデータと、の関係を示す図。
【図６】第１実施形態における管理テーブルの一例を示す図。
【図７】第１実施形態に係る電子機器の動作の一例を示すフローチャート。
【図８】第２実施形態におけるデータ更新の反映状態を説明する図。
【図９】第２実施形態における退避優先順位を説明する図。
【図１０】第２実施形態における管理テーブルの一例を示す図。
【図１１】第２実施形態に係る電子機器の動作の一例を示すフローチャート。
【図１２】第３実施形態における管理テーブルの一例を示す図。
【図１３】第３実施形態における管理テーブルの他の例を示す図。
【図１４】第４実施形態における退避優先順位の決定処理の一例を示すフローチャート。
【図１５】第４実施形態における管理テーブルの一例を示す図。
【図１６】第５実施形態における事前退避処理の一例を示すフローチャート。
【図１７】第５実施形態における管理テーブルの一例を示す図。
【図１８】第６実施形態に係る電子機器のハードウェア構成の一例を示す図。
【図１９】第６実施形態における揮発メモリ及び不揮発メモリの一例を示す図。
【図２０】第６実施形態における管理テーブルの一例を示す図。
【図２１】第６実施形態における管理テーブルの他の例を示す図。
【図２２】第７実施形態における揮発メモリ及び不揮発メモリの一例を示す図。
【図２３】第７実施形態における管理テーブルの他の例を示す図。
【発明を実施するための形態】
【０００８】
以下、本発明の各実施形態について、添付の図面を参照しながら説明する。なお、各実施形態に係る明細書及び図面の記載に関して、実質的に同一の機能構成を有する構成要素については、同一の符号を付することにより重畳した説明を省略する。
【０００９】
（第１実施形態）
第１実施形態に係る電子機器１ついて、図１〜図７を参照して説明する。本実施形態に係る電子機器１は、揮発メモリから不揮発メモリへのデータの退避が要求される任意の電子機器に適用可能である。例えば、電子機器１は、画像形成装置、デジタルカメラ、電子情報ボード、サーバコンピュータ、クライアントコンピュータなどに適用できる。画像形成装置は、ＭＦＰ、プリンタ装置、コピー装置、ＦＡＸ、スキャナ装置などを含む。
【００１０】
まず、本実施形態に係る電子機器１の構成について説明する。図１は、本実施形態に係る電子機器１のハードウェア構成の一例を示す図である。図１の電子機器１は、揮発メモリ１１と、不揮発メモリ１２と、ＣＰＵ（Central Processing Unit）１３と、電源ＯＦＦ検知部１４と、停電検知部１５と、を備える。
【００１１】
揮発メモリ１１は、ＤＲＡＭ（Dynamic Random Access Memory）やＳＲＡＭ（Static RAM）などである。揮発メモリ１１は、記憶領域を分割して形成された複数の分割領域を設けられている。各分割領域には、退避対象となるデータがそれぞれ格納される。
【００１２】
不揮発メモリ１２は、ＥＥＰＲＯＭ（Electrically Erasable Programmable Read Only Memory）、フラッシュメモリ、ＭＲＡＭ（Magnetoresistive RAM）、ＲｅＲＡＭ（Resistive RAM）、ＦｅＲＡＭ（Ferroelectric RAM）などである。不揮発メモリ１２は、記憶領域を分割して形成された複数の分割領域を設けられている。不揮発メモリ１２の各分割領域は、アドレスの特定ビットが共通する記憶領域の集合として設けられる。また、不揮発メモリ１２の各分割領域は、それぞれ揮発メモリ１１の分割領域に対応する。不揮発メモリ１２の分割領域には、揮発メモリ１１の対応する分割領域のデータが退避される。
【００１３】
以下では、揮発メモリ１１及び不揮発メモリ１２に設けられた分割領域を、ブロックと称する。
【００１４】
ＣＰＵ１３は、制御部の一例である。電子機器１の制御部は、ＦＰＧＡ（Field Programmable Gate Array）、ＡＳＩＣ（Application Specified Integrated Circuit）、マイコンなどであってもよい。ＣＰＵ１３は、プログラムを実行し、電子機器１の機能を実現する。ＣＰＵ１３が実行するプログラムは、不揮発メモリ１２に格納されていてもよいし、不揮発メモリ１２とは別に設けられたプログラムメモリに格納されていてもよい。また、ＣＰＵ１３は、揮発メモリ１１上でプログラムを実行してもよいし、揮発メモリ１１とは別に設けられたＲＡＭ上でプログラムを実行してもよい。ＣＰＵ１３が実現する機能については後述する。
【００１５】
電源ＯＦＦ検知部１４は、電子機器１に入力された電源ＯＦＦ要求を検知し、ＣＰＵ１３に通知する。ＣＰＵ１３は、電源ＯＦＦ要求の検知を通知されると、揮発メモリ１１の各分割領域から、不揮発メモリ１２の対応する分割領域へ、分割領域ごとにデータを退避させる処理（以下、「退避処理」という）を実行する。電源ＯＦＦ要求は、電子機器１のユーザによる電源ＯＦＦ操作によって入力されてもよいし、電子機器１で動作するソフトウェアにより入力されてもよい。電子機器１は、電源ＯＦＦ要求を入力されると、タイムアウト処理の実行後、電源がＯＦＦになる。
【００１６】
停電検知部１５は、電子機器１の停電（電子機器１への電力供給の停止）を検知し、ＣＰＵ１３に通知する。ＣＰＵ１３は、停電の検知を通知されると、退避処理を実行する。電子機器１は、停電すると、所定時間後に電源がＯＦＦになる。
【００１７】
なお、本実施形態において、電子機器１は、電源ＯＦＦ検知部１４又は停電検知部１５のいずれか一方だけを備えてもよい。
【００１８】
図２は、揮発メモリ１１及び不揮発メモリ１２のデータ状態の推移を示す図である。図２において、揮発メモリ１１はブロックＸ，Ｙ，Ｚを備え、不揮発メモリ１２はブロックＡ，Ｂ，Ｃを備える。揮発メモリ１１のブロックＸ，Ｙ，Ｚは、不揮発メモリ１２のブロックＡ，Ｂ，Ｃにそれぞれ対応する。
【００１９】
図２（Ａ）は、電子機器１の電源ＯＦＦ時のデータ状態を示す図である。図２（Ａ）に示すように、電源ＯＦＦ時には、揮発メモリ１１の各ブロックには、データが格納されておらず、不揮発メモリ１２の各ブロックには、それぞれ所定のデータ（設定情報など）が格納されている。図２（Ａ）の例では、例えば、不揮発メモリ１２のブロックＡには、データ０ｘａ１，０ｘａ２，０ｘａ３が格納されている。
【００２０】
図２（Ｂ）は、電子機器１の電源ＯＮ時のデータ状態を示す図である。電子機器１の電源がＯＮになると、ＣＰＵ１３は、揮発メモリ１１を利用して処理を実行するため、不揮発メモリ１２の各ブロックに格納されたデータを読み出し、読み出した各ブロックのデータを、揮発メモリ１１の対応するブロックに書き込む。これにより、揮発メモリ１１の各ブロックには、不揮発メモリ１２の対応するブロックに格納されたデータと同一のデータが格納される。図２（Ｂ）の例では、例えば、揮発メモリ１１のブロックＸには、不揮発メモリ１２のブロックＡに格納されたデータと同一のデータ０ｘａ１，０ｘａ２，０ｘａ３が格納されている。
【００２１】
以下では、ＣＰＵ１３が揮発メモリ１１を利用して実行する、退避処理以外の処理を通常処理という。ＣＰＵ１３が実行する通常処理は、任意である。
【００２２】
図２（Ｃ）は、揮発メモリ１１のデータ更新時のデータ状態を示す図である。電子機器１の電源がＯＮになり、ＣＰＵ１３が通常処理を実行すると、ＣＰＵ１３により揮発メモリ１１の各ブロックに格納されたデータが更新される。揮発メモリ１１のデータが更新されると、揮発メモリ１１の更新されたブロックに格納されたデータと、不揮発メモリ１２の対応するブロックに格納されたデータと、が一致しなくなる。図２（Ｃ）の例では、揮発メモリ１１のブロックＸのデータが更新されており、ブロックＸにはデータ０ｘａ４，０ｘａ５，０ｘａ６が格納されている。これに対して、不揮発メモリ１２のブロックＡには、データ０ｘａ１，０ｘａ２，０ｘａ３が格納されている。
【００２３】
図２（Ｄ）は、不揮発メモリ１２のデータ更新時のデータ状態を示す図である。ＣＰＵ１３は、通常処理の実行中、所定のタイミングで不揮発メモリ１２のデータを更新する。すなわち、ＣＰＵ１３は、揮発メモリ１１のブロックに格納されたデータを読み出し、読み出したデータを、不揮発メモリ１２の対応するブロックに書き込む。不揮発メモリ１２のデータが更新されると、不揮発メモリ１２の更新されたブロックに格納されたデータと、揮発メモリ１１の対応するブロックに格納されたデータと、が一致する。図２（Ｄ）の例では、不揮発メモリ１２のブロックＡのデータが更新されており、ブロックＡには、対応する揮発メモリ１１のブロックＸと同一のデータであるデータ０ｘａ４，０ｘａ５，０ｘａ６が格納されている。
【００２４】
ＣＰＵ１３が不揮発メモリ１２のデータを更新するタイミングは任意である。ただし、一般に、更新頻度が高いほど、ＣＰＵ１３のパフォーマンスが低下し、不揮発メモリ１２の寿命が短くなるため、更新頻度は高すぎないのが好ましい。例えば、ＣＰＵ１３は、１分以上の間隔で定期的に不揮発メモリ１２のデータを更新したり、システム要求に応じて不定期に不揮発メモリ１２のデータを更新したりするのが好ましい。
【００２５】
図２（Ｅ）は、不揮発メモリ１２への書き込み異常発生時のデータ状態を示す図である。ＣＰＵ１３が不揮発メモリ１２のデータの更新を繰り返し実行すると、ノイズなどの影響により、データエラーやアドレスエラーなどの書き込み異常が発生することがある。データエラーとは、書き込み対象のデータの、一部のビットが反転するエラーである。データエラーが発生すると、所望のアドレスに誤ったデータが書き込まれる。アドレスエラーとは、データの書き込み先を示すアドレスの、一部のビットが反転するエラーである。アドレスエラーが発生すると、データが誤ったアドレスに書き込まれる。
【００２６】
図２（Ｅ）の例では、不揮発メモリ１２のブロックＣのデータの更新時に書き込み異常が発生している。この結果、揮発メモリ１１のブロックＺにデータ０ｘｃ４，０ｘｃ５，０ｘｃ６が格納されているのに対して、不揮発メモリ１２のブロックＣにはデータ０ｘｃ４，０ｘｃ６，０ｘｃ６が格納されている。すなわち、ブロックＣには、データ０ｘｃ５の代わりに、データ０ｘｃ６が誤って書き込まれている。以下では、上記のデータ０ｘｃ６のような、書き込み異常によって不揮発メモリ１２に誤って書き込まれたデータを、誤ライトデータという。
【００２７】
上述の通り、ＣＰＵ１３は、電源ＯＦＦ要求の検出時や停電時に退避処理を実行する。退避処理により、揮発メモリ１１の全データが不揮発メモリ１２に退避された場合、上記のような誤ライトデータは訂正される。結果として、不揮発メモリ１２に正常なデータを格納することができる。
【００２８】
しかしながら、実際には、退避処理を実行可能な時間は限られているため、必ずしも揮発メモリ１１の全データを退避できるとは限らない。そこで、本実施形態では、ＣＰＵ１３は、誤ライトデータが存在する可能性が高い不揮発メモリ１２のブロック、に対応する揮発メモリ１１のブロックのデータを優先的に退避させる。
【００２９】
具体的には、ＣＰＵ１３は、不揮発メモリ１２の各ブロックのデータ更新時の異常検出回数に基づいて、揮発メモリ１１の各ブロックの退避優先順位を決定する。退避優先順位とは、データを退避させる優先順位のことである。ＣＰＵ１３は、退避処理の実行時に、この退避優先順位に従って、揮発メモリ１１の各ブロックに格納されたデータを、不揮発メモリ１２の対応するブロックに退避させる。
【００３０】
ＣＰＵ１３は、退避優先順位を決定するための異常検出回数として、不揮発メモリ１２の各ブロックのデータ更新時に検出される任意の異常の検出回数を利用することができる。ただし、ＣＰＵ１３は、異常検出回数として、ベリファイ処理により検出される書き込み失敗の回数を利用するのが好ましい。理由は以下の通りである。
【００３１】
ベリファイ処理は、データの書き込みが成功したか（正常に行われたか）を判定するために広く使用されている処理である。ベリファイ処理では、データの書き込み後、書き込まれたデータを読み出し、読み出されたデータと、書き込まれたデータと、が一致するかを判定する。読み出されたデータ及び書き込まれたデータが、一致する場合、データの書き込みは成功と判定され、一致しない場合、データの書き込みは失敗と判定される。ベリファイ処理により、書き込み失敗が検知された場合、データは再書き込みされる。
【００３２】
図３は、書き込み失敗回数と誤ライトデータとの関係を説明する図である。図３の例では、説明を簡単にするために、揮発メモリ１１はブロックＺのみを備え、不揮発メモリ１２はブロックＣのみを備える。ブロックＺとブロックＣとは対応する。
【００３３】
図３（Ａ）は、データエラー発生時のデータ状態を示す図である。図３（Ａ）の例では、揮発メモリ１１のデータ０ｘｃ４は、不揮発メモリ１２に正常に書き込まれている。このため、データ０ｘｃ４の書き込み後に、ＣＰＵ１３がベリファイ処理を実行すると、書き込みは成功と判定される。
【００３４】
これに対して、図３（Ａ）の例では、揮発メモリ１１のデータ０ｘｃ５を不揮発メモリ１２に書き込む際に、データエラーが発生している。この結果、不揮発メモリ１２の、データ０ｘｃ５が書き込まれるはずのアドレスには、データ０ｘｃ４が書き込まれている。このデータ０ｘｃ４は、誤ライトデータに相当する。
【００３５】
図３（Ｂ）は、データエラー発生後の再書き込み時のデータ状態を示す図である。データエラーの発生後、ＣＰＵ１３がベリファイ処理を実行すると、揮発メモリ１１から書き込んだデータ０ｘｃ５と、不揮発メモリ１２から読み出したデータ０ｘｃ４と、が一致しないため、書き込みは失敗と判定される。したがって、ＣＰＵ１３は、揮発メモリ１１のデータ０ｘｃ５を、不揮発メモリ１２に再書き込みする。これにより、図３（Ｂ）に示すように、不揮発メモリ１２の誤ライトデータ（データ０ｘｃ４）が、正常なデータ０ｘｃ５に訂正される。
【００３６】
以上のことからわかるように、ベリファイ処理を実行すると、データエラーが発生した場合であっても、正常なデータの再書き込みにより、誤ライトデータを訂正することができる。
【００３７】
図３（Ｃ）は、アドレスエラー発生時のデータ状態を示す図である。図３（Ｃ）の例では、揮発メモリ１１のデータ０ｘｃ６を不揮発メモリ１２に書き込む際に、アドレスエラーが発生している。この結果、データ０ｘｃ６は、不揮発メモリ１２の誤ったアドレスに書き込まれている。この誤ったアドレスに書き込まれたデータ０ｘｃ６と、正常なデータ０ｘｃ６を書き込まれなかったデータ０ｘｃ４と、はいずれも誤ライトデータに相当する。
【００３８】
図３（Ｄ）は、アドレスエラー発生後の再書き込み時のデータ状態を示す図である。アドレスエラーの発生後、ＣＰＵ１３がベリファイ処理を実行すると、揮発メモリ１１から書き込んだデータ０ｘｃ６と、不揮発メモリ１２から読み出したデータ０ｘｃ３と、が一致しないため、書き込みは失敗と判定される。したがって、ＣＰＵ１３は、揮発メモリ１１のデータ０ｘｃ６を、不揮発メモリ１２に再書き込みする。これにより、図３（Ｄ）に示すように、誤ライトデータ（データ０ｘｃ４）が、正常なデータ０ｘｃ６に訂正される。しかしながら、不揮発メモリ１２の誤ったアドレスに書き込まれた誤ライトデータ（データ０ｘｃ６）は、再書き込みにより訂正されず、その後も不揮発メモリ１２に残る。
【００３９】
以上のことからわかるように、アドレスエラーが発生した場合、ベリファイ処理を実行しても、不揮発メモリ１２に誤ライトデータが残ることになる。すなわち、アドレスエラーの発生時に検出される書き込み失敗回数は、不揮発メモリ１２に存在する誤ライトデータの数に一致する。
【００４０】
実際には、データエラーが発生した場合にも、書き込み失敗は検出されるため、書き込み失敗回数と、不揮発メモリ１２に存在する誤ライトデータの数と、は必ずしも一致しない。しかしながら、書き込み失敗回数は、不揮発メモリ１２に存在する誤ライトデータの数と、高い相関を有するがわかる。
【００４１】
次に、アドレスエラーと、誤ライトデータと、の関係について説明する。図３の例では、説明を簡単にするために、アドレスエラーが同一ブロック内で発生する場合について説明したが、実際には、アドレスエラーが複数ブロック間で発生することも考えられる。
【００４２】
アドレスエラーが同一ブロック内で発生する場合とは、アドレスエラーにより、不揮発メモリ１２のあるブロックのあるアドレスに書き込まれるはずのデータが、そのブロックの他のアドレスに書き込まれる場合のことである。同一ブロック内のアドレスエラーが発生した場合、書き込み失敗を検出された不揮発メモリ１２のブロック（図３（Ｄ）のブロックＣ）に、誤ライトデータ（図３（Ｄ）のデータ０ｘｃ６）が発生することになる。
【００４３】
これに対して、アドレスエラーが複数ブロック間で発生する場合とは、アドレスエラーにより、不揮発メモリ１２のあるブロックに書き込まれるはずのデータが、不揮発メモリ１２の他のブロックに書き込まれる場合のことである。複数ブロック間のアドレスエラーが発生した場合、書き込み失敗を検出された不揮発メモリ１２のブロックとは異なるブロックに、誤ライトデータが発生することになる。
【００４４】
図４は、アドレスエラーと、誤ライトデータと、の関係を説明する図である。図４の例では、揮発メモリ１１は、ブロックＺ０〜Ｚ３を備え、不揮発メモリ１２はブロックＣ０〜Ｃ３を備える。ブロックＺ０〜Ｚ３と、ブロックＣ０〜Ｃ３と、はそれぞれ対応する。ブロックＣ０はアドレスの上位２ビットが００である記憶領域の集合であり、ブロックＣ１はアドレスの上位２ビットが０１である記憶領域の集合である。また、ブロックＣ２はアドレスの上位２ビットが１０である記憶領域の集合であり、ブロックＣ３はアドレスの上位２ビットが１１である記憶領域の集合である。
【００４５】
ここで、揮発メモリ１１のブロックＺ０のデータを、不揮発メモリ１２のブロックＣ０のアドレス０ｘ００００１１１１に書き込む際に、アドレスエラーが発生した場合について考える。アドレスエラーが発生すると、上記のアドレスのうち、いくつかのビットが反転する。一般には、１ビットの反転が最も発生しやすいため、ここでは、アドレスの１ビットが反転したものと仮定する。このとき、誤ライトデータが書き込まれるアドレスの候補は、以下の通りとなる。
【００４６】
候補１：０ｘ１０００１１１１
候補２：０ｘ０１００１１１１
候補３：０ｘ００１０１１１１
候補４：０ｘ０００１１１１１
候補５：０ｘ０００００１１１
候補６：０ｘ００００１０１１
候補７：０ｘ００００１１０１
候補８：０ｘ００００１１１０
【００４７】
候補１は、不揮発メモリ１２のブロックＣ２に相当する。候補２は、不揮発メモリ１２のブロックＣ１に相当する。候補３〜８は、不揮発メモリ１２のブロックＣ０に相当する。このことから、アドレスエラーにより発生した誤ライトデータは、ブロックＣ０に存在する可能性が最も高いことがわかる。これは、不揮発メモリ１２のブロックＣの０ｘ００００１１１１以外のアドレスにデータを書き込む場合も同様である。また、不揮発メモリ１２の各ブロックが、上位１ビット又は３ビット以上が共通の記憶領域の集合である場合も同様である。すなわち、揮発メモリ１１のブロックＺ０のデータを、不揮発メモリ１２のブロックＣ０に書き込む際にアドレスエラーが発生した場合、誤ライトデータはブロックＣ０に存在する可能性が高い。
【００４８】
これは、他のブロックについても同様である。すなわち、揮発メモリ１１のブロックＺ１〜３のデータを、不揮発メモリ１２のブロックＣ１〜３に書き込む際にアドレスエラーが発生した場合、誤ライトデータはブロックＣ１〜３に存在する可能性が高い。
【００４９】
以上説明した通り、揮発メモリ１１のあるブロックＺｉのデータを、不揮発メモリ１２のブロックＣｉに書き込む際にアドレスエラーが発生した場合、誤ライトデータはブロックＣｉに存在する可能性が高い。そして、書き込み失敗の回数は、不揮発メモリ１２に存在する誤ライトデータの数と、高い相関を有する。
【００５０】
したがって、揮発メモリ１１のあるブロックＺｉのデータを、不揮発メモリ１２のブロックＣｉに書き込む際に検出される書き込み失敗の回数は、ブロックＣｉに存在する誤ライトデータの数と相関する。
【００５１】
以下では、揮発メモリ１１のあるブロックＺｉのデータを、不揮発メモリ１２のブロックＣｉに書き込む際に検出される書き込み失敗の回数を、揮発メモリ１１のブロックＺｉの書き込み失敗回数と称する。このとき、上記の説明は、「揮発メモリ１１のブロックＺｉの書き込み失敗回数は、不揮発メモリ１２のブロックＣｉに存在する誤ライトデータの数と相関する」と表現できる。
【００５２】
このため、ＣＰＵ１３は、揮発メモリ１１のブロックＺｉの書き込み失敗回数に基づいて退避優先順位を決定することにより、不揮発メモリ１２のブロックＣｉに存在する誤ライトデータの数に応じた退避優先順位を決定することができる。
【００５３】
具体的には、本実施形態に係るＣＰＵ１３は、書き込み失敗回数が多いほど退避優先順位が高くなるように、揮発メモリ１１の各ブロックの退避優先順位を決定する。これにより、誤ライトデータが多い不揮発メモリ１２のブロックＣｉほど、優先的にデータを退避し、誤ライトデータを訂正することができる。
【００５４】
図５は、退避処理と、誤ライトデータと、の関係を示す図である。図５の例では、揮発メモリ１１は、ブロックＸ，Ｙ，Ｚを備え、不揮発メモリ１２は、ブロックＡ，Ｂ，Ｃを備える。ブロックＸ，Ｙ，Ｚと、ブロックＡ，Ｂ，Ｃと、はそれぞれ対応する。図５におけるｃｏｕｎｔは、ブロックＸ，Ｙ，Ｚの書き込み失敗回数を示す。
【００５５】
図５（Ａ）は、退避処理実行前のデータ状態を示す図である。図５（Ａ）の例では、揮発メモリ１１のブロックＸ，Ｙの書き込み失敗回数は０である。すなわち、ブロックＸ，ＹからブロックＡ，Ｂへのデータの書き込みの際に、アドレスエラーは発生していない。このため、揮発メモリ１１のブロックＸ，Ｙと、不揮発メモリ１２のブロックＡ，Ｂと、にはそれぞれ同一のデータが格納されている。
【００５６】
これに対して、図５（Ａ）の例では、揮発メモリ１１のブロックＺの書き込み失敗回数は１である。ここでは、ブロックＺからブロックＣへのデータの書き込みの際に、書き込み異常が１度発生している。ここでは、書き込み異常はアドレスエラーであるものとする。このため、揮発メモリ１１のブロックＺに格納されたデータと、不揮発メモリ１２のブロックＣに格納されたデータと、が一致しておらず、不揮発メモリ１２のブロックＣには、誤ライトデータ（データ０ｘｃ６）が存在している。
【００５７】
図５（Ｂ）は、退避処理実行後のデータ状態を示す図である。上述の通り、本実施形態に係るＣＰＵ１３は、書き込み異常回数が多いブロックほど優先的に退避処理を実行する。このため、書き込み失敗回数最大の揮発メモリ１１のブロックＺが、最優先で退避処理を実行される。ＣＰＵ１３はブロック単位で退避処理を実行するため、退避処理により、揮発メモリ１１のブロックＺの全データが、不揮発メモリ１２のブロックＣに書き込まれる（退避される）。これにより、図５（Ｂ）に示すように、不揮発メモリ１２のブロックＣに存在した誤ライトデータ（データ０ｘｃ６）が、正常なデータ０ｘｃ５に訂正される。
【００５８】
ＣＰＵ１３は、退避処理を実行する際に、揮発メモリ１１の各ブロックの退避優先順位を決定してもよいし、通常処理の実行中に予め退避優先順位を決定しておいてもよい。退避優先順位を予め決定することにより、退避処理に要する時間を短縮することができる。退避優先順位を予め決定する方法として、退避優先順位を管理するための管理テーブルを利用する方法が考えられる。
【００５９】
図６は、本実施形態における管理テーブルの一例を示す図である。図６の管理テーブルは、項目として、退避優先順位（ｒａｎｋ）と、ブロックと、対応ブロックと、書き込み失敗回数（ｃｏｕｎｔ）と、を有する。ブロックは、揮発メモリ１１の各ブロックを特定する識別情報である。対応ブロックは、揮発メモリ１１のブロックが対応する不揮発メモリ１２のブロックを特定する識別子である。図６に示すように、本実施形態では、揮発メモリ１１の各ブロックは、書き込み失敗回数が多いほど退避優先順位が高くなる。例えば、図６の例では、書き込み失敗回数が最大（１０回）のブロックＺ１の退避優先順位が１位になっている。
【００６０】
ＣＰＵ１３は、通常処理の実行中に揮発メモリ１１から不揮発メモリ１２への書き込み失敗が検出されるたびに、管理テーブルの書き込み失敗回数を更新し、更新された書き込み失敗回数に基づいて、常に最新の退避優先順位を決定しておけばよい。管理テーブルを利用することにより、ＣＰＵ１３は、退避処理の際に、管理テーブルに格納された退避優先順位に従ってデータを退避させるだけでよい。すなわち、退避処理の際に、ＣＰＵ１３は、揮発メモリ１１に格納された書き込み失敗回数の読み出しや、退避優先順位の決定などを行わなくてもよい。この結果、退避処理に要する時間を短縮することができる。
【００６１】
次に、本実施形態に係る電子機器１の動作について説明する。図７は、本実施形態に係る電子機器１の動作の一例を示すフローチャートである。以下では、ＣＰＵ１３は、不揮発メモリ１２に書き込む揮発メモリ１１のデータを指定するシステム要求に応じて、不揮発メモリ１２のデータを更新するものとする。また、ＣＰＵ１３は、管理テーブルを利用して退避処理を実行するものとする。
【００６２】
電子機器１の電源がＯＮになると、ＣＰＵ１３は、不揮発メモリ１２の各ブロックに格納されたデータを読み出し、揮発メモリ１１の各ブロックに書き込む（ステップＳ１０１）。その後、ＣＰＵ１３は、揮発メモリ１１に格納されたデータを利用して、電子機器１の起動処理や初期化処理を実行する。この初期化処理により、揮発メモリ１１に設けられた管理テーブルも初期化される。具体的には、揮発メモリ１１の各ブロックの書き込み失敗回数ｃｏｕｎｔが０に設定され、各ブロックの退避優先順位が初期値に設定される。
【００６３】
ＣＰＵ１３は、起動処理や初期化処理の完了後、通常処理を開始する（ステップＳ１０２）。以降、ＣＰＵ１３は、電源ＯＦＦ検知部１４から電源ＯＦＦ要求の検知を通知される、停電検知部１５から停電の検知を通知される、又はシステム要求を通知されるまで、通常処理を実行する。
【００６４】
ＣＰＵ１３は、通常処理の実行中にシステム要求を通知された場合（ステップＳ１０４のＹＥＳ）、システム要求により指定されたデータが、ブロックの全体のデータであるか判定する（ステップＳ１０５）。
【００６５】
システム要求により指定されたデータが、ブロックの一部のデータである場合（ステップＳ１０５のＮＯ）、処理はステップＳ１０７に進む。一方、システム要求により指定されたデータが、ブロック全体のデータである場合（ステップＳ１０５のＹＥＳ）、ＣＰＵ１３は、管理テーブルにアクセスし、当該ブロックの書き込み失敗回数ｃｏｕｎｔを０にリセットする（ステップＳ１０６）。これは、ブロック全体の書き込みにより、揮発メモリ１１の各ブロックに存在する誤ライトデータが訂正されると考えられるためである。
【００６６】
その後、ＣＰＵ１３は、システム要求により指定されたデータを、不揮発メモリ１２の対応するブロックに書き込む（ステップＳ１０７）。これにより、不揮発メモリ１２のデータが更新される。
【００６７】
ＣＰＵ１３は、不揮発メモリ１２のデータ更新後、ベリファイ処理を実行する（ステップＳ１０８）。すなわち、不揮発メモリ１２のデータを更新したブロックからデータを読み出し、読み出したデータを、揮発メモリ１１の対応するブロックのデータと比較する。ＣＰＵ１３は、揮発メモリ１１及び不揮発メモリ１２のデータが一致している場合、書き込みは成功と判定する（ステップＳ１０９のＹＥＳ）。その後、処理はステップＳ１０３に戻る。
【００６８】
一方、ＣＰＵ１３は、揮発メモリ１１及び不揮発メモリ１２のデータが一致していない場合、書き込みは失敗と判定し（ステップＳ１０９のＮＯ）、揮発メモリ１１のデータを不揮発メモリ１２に再書き込みする（ステップＳ１１０）。
【００６９】
上述の通り、書き込み失敗の原因がデータエラーである場合、不揮発メモリ１２に格納された誤ライトデータは、再書き込みにより正常なデータに訂正される。一方、書き込み失敗の原因がアドレスエラーである場合、不揮発メモリ１２に格納された２つの誤ライトデータの一方（図３（Ｃ）のデータ０ｘｃ３）は、再書き込みにより正常なデータに訂正され、他方（図３（Ｃ）のデータ０ｘｃ６）は不揮発メモリ１２に残る。
【００７０】
いずれの場合も、ＣＰＵ１３は、再書き込みの実行後、管理テーブルにアクセスし、不揮発メモリ１２にデータを書き込まれた揮発メモリ１１の（システム要求により指定された）ブロックの書き込み失敗回数ｃｏｕｎｔを１増加させる（ステップＳ１１１）。
【００７１】
そして、ＣＰＵ１３は、揮発メモリ１１の各ブロックの退避優先順位ｒａｎｋを、書き込み失敗回数ｃｏｕｎｔが多い順にソートする。これにより、揮発メモリ１１の各ブロックの退避優先順位ｒａｎｋが決定される（ステップＳ１１２）。その後、処理はステップＳ１０３に戻る。
【００７２】
ＣＰＵ１３は、通常処理の実行中に、電源ＯＦＦ要求の検知を通知される、又は停電の検知を通知されると（ステップＳ１０３のＹＥＳ）、通常処理を終了し（ステップＳ１１３）、退避処理を実行する（ステップＳ１１４）。
【００７３】
具体的には、ＣＰＵ１３は、管理テーブルを参照し、揮発メモリ１１の退避優先順位が高いブロックのデータから順に、不揮発メモリ１２の対応するブロックに書き込んでいく（退避させる）。ＣＰＵ１３は、退避優先順位ｒａｎｋが所定の順位以上のブロックのデータだけを退避させてもよいし、電子機器１の電源がＯＦＦになるまでの時間が許容する範囲で、できるだけ多くのブロックのデータを退避させてもよい。また、ＣＰＵ１３は、書き込み失敗回数が所定の回数以上のブロックのデータだけを退避させてもよい。退避処理の終了後、電子機器１の電源はＯＦＦになる。
【００７４】
以上説明した通り、本実施形態に係る電子機器１は、揮発メモリ１１の退避優先順位が高いブロックのデータから順に、不揮発メモリ１２の対応するブロックに退避される。これにより、誤ライトデータが多く存在する可能性が高い不揮発メモリ１２のブロックから順に、揮発メモリ１１の正常なデータが書き込まれ、誤ライトデータが訂正される。したがって、本実施形態によれば、退避処理により、不揮発メモリ１２に格納された誤ライトデータを効果的に削減することができる。
【００７５】
また、本実施形態によれば、退避優先順位ｒａｎｋが所定の順位以上のブロックのデータだけを退避させたり、書き込み失敗回数が所定の回数以上のブロックのデータだけを退避させたりすることにより、退避処理に要する時間を短縮することができる。
【００７６】
（第２実施形態）
第２実施形態に係る電子機器１ついて、図８〜図１１を参照して説明する。本実施形態では、揮発メモリ１１の各ブロックの書き込み失敗回数及びデータ更新の反映状態に基づいて、各ブロックの退避優先順位を決定する電子機器１について説明する。なお、本実施形態に係る電子機器１のハードウェア構成は第１実施形態と同様である。
【００７７】
まず、本実施形態におけるデータ更新の反映状態について説明する。図８は、データ更新の反映状態を説明する図である。図８の例では、揮発メモリ１１は、ブロックＸ，Ｙ，Ｚを備え、不揮発メモリ１２は、ブロックＡ，Ｂ，Ｃを備える。ブロックＸ，Ｙ，Ｚと、ブロックＡ，Ｂ，Ｃと、はそれぞれ対応する。
【００７８】
図８（Ａ）は、揮発メモリ１１のデータ更新反映前のデータ状態を示す図である。図８（Ａ）の例では、揮発メモリ１１のブロックＹのデータが更新されている。しかしながら、ブロックＹのデータ更新後のデータは、不揮発メモリ１２のブロックＢには書き込まれていない。この場合、揮発メモリ１１のブロックＹは、データ更新が未反映であるという。また、揮発メモリ１１に格納されたデータのうち、不揮発メモリ１２に書き込まれていないデータを、未反映データという。
【００７９】
図８（Ｂ）は、揮発メモリ１１のデータ更新反映後のデータ状態を示す図である。図８（Ｂ）の例では、データ更新された揮発メモリ１１のブロックＹのデータが、不揮発メモリ１２のブロックＹに書き込まれ、ブロックＹのデータが更新されている。この場合、揮発メモリ１１のブロックＹは、データ更新が反映済みであるという。
【００８０】
このように、データ更新された揮発メモリ１１のブロックのデータを、不揮発メモリ１２の対応するブロックに書き込むことを、揮発メモリ１１のデータ更新を、不揮発メモリ１２に反映する、という。データ更新の反映状態は、反映済みの状態と、未反映の状態と、の２つの状態をとり得る。
【００８１】
本実施形態では、ＣＰＵ１３は、揮発メモリ１１の各ブロックの、書き込み失敗回数と、データ更新の反映状態と、に基づいて、揮発メモリ１１の各ブロックの退避優先順位を決定する。具体的には、ＣＰＵ１３は、未反映のブロックの退避優先順位が、反映済みのブロックの退避優先順位より高くなるように、各ブロックの退避優先順位を決定する。未反映のブロックの中での退避優先順位は、書き込み失敗回数が多いほど、順位が高くなるように決定される。また、反映済みのブロックの中での退避優先順位は、書き込み失敗回数が多いほど、順位が高くなるように決定される。
【００８２】
図９は、本実施形態における退避優先順位を説明する図である。図９の例では、揮発メモリ１１は、ブロックＸ，Ｙ，Ｚを備え、不揮発メモリ１２は、ブロックＡ，Ｂ，Ｃを備える。ブロックＸ，Ｙ，Ｚと、ブロックＡ，Ｂ，Ｃと、はそれぞれ対応する。また、図９において、ｆｌａｇは揮発メモリ１１の各ブロックの反映状態を示す。ｆｌａｇ＝１は、そのブロックのデータ更新が未反映であることを示し、ｆｌａｇ＝０は、そのブロックのデータ更新が反映済みであることを示す。
【００８３】
図９（Ａ）は、退避処理前のデータ状態を示す図である。図９（Ａ）の例では、揮発メモリ１１のブロックＸは、データ更新が反映済み（ｆｌａｇ＝０）であり、書き込み失敗回数が０回（ｃｏｕｎｔ＝０）である。揮発メモリ１１のブロックＹは、データ更新が未反映（ｆｌａｇ＝１）であり、書き込み失敗回数が０回（ｃｏｕｎｔ＝０）である。揮発メモリ１１のブロックＺは、データ更新が反映済み（ｆｌａｇ＝０）であり、書き込み失敗回数が１回（ｃｏｕｎｔ＝１）である。このとき、各ブロックの退避優先順位は、ブロックＹが１位、ブロックＺが２位、ブロックＸが３位となる。
【００８４】
図９（Ｂ）は、退避優先順位が１位であるブロックＹの退避処理後のデータ状態を示す図である。図９（Ｂ）の例では、揮発メモリ１１のブロックＹのデータは、不揮発メモリ１２のブロックＢに退避されている。
【００８５】
図９（Ｃ）は、退避優先順位が２位であるブロックＺの退避処理後のデータ状態を示す図である。図９（Ｃ）の例では、揮発メモリ１１のブロックＺのデータは、不揮発メモリ１２のブロックＣに退避されている。
【００８６】
図１０は、本実施形態における管理テーブルの一例を示す図である。図１０の管理テーブルは、項目として、退避優先順位（ｒａｎｋ）と、ブロックと、対応ブロックと、書き込み失敗回数（ｃｏｕｎｔ）と、反映状態（ｆｌａｇ）を有する。ｆｌａｇの１はデータ更新が未反映の状態を示し、０はデータ更新が反映済みの状態を示す。
【００８７】
図１０に示すように、本実施形態では、未反映のブロックの中で書き込み失敗回数が最大（５回）のブロックＺ１の退避優先順位が１位になり、未反映のブロックの中で書き込み失敗回数が２番目に大きい（２回）ブロックＺ３の退避優先順位が２位になる。また、反映済みのブロックの中で書き込み失敗回数が最大（８回）のブロックＺ０の退避優先順位が３位になり、反映済みのブロックの中で書き込み失敗回数が２番目に大きい（１回）ブロックＺ２の退避優先順位が４位になる。
【００８８】
ＣＰＵ１３は、通常処理の実行中に揮発メモリ１１から不揮発メモリ１２への書き込み失敗が検出されるたびに、管理テーブルの書き込み失敗回数を更新する。また、ＣＰＵ１３は、通常処理の実行中に、揮発メモリ１１のいずれかのブロックのデータが更新されると、データ更新されたブロックの反映状態を未反映（ｆｌａｇ＝１）に更新する。また、ＣＰＵ１３は、通常処理の実行中に、ｆｌａｇが１のブロックのデータ更新が不揮発メモリ１２に反映された場合、そのブロックの反映状態（ｆｌａｇ）を反映済み（０）に更新する。
【００８９】
ＣＰＵ１３は、書き込み失敗回数又は反映状態の更新を行うたびに、更新後の書き込み失敗回数及び反映状態に基づいて、新たな退避優先順位を決定し、管理テーブルに格納する。管理テーブルを利用することにより、ＣＰＵ１３は、退避処理の際に、管理テーブルに格納された退避優先順位に従ってデータを退避させるだけでよい。すなわち、退避処理の際に、ＣＰＵ１３は、揮発メモリ１１に格納された書き込み失敗回数及び反映状態の読み出しや、退避優先順位の決定などを行わなくてもよい。この結果、退避処理に要する時間を短縮することができる。
【００９０】
次に、本実施形態に係る電子機器１の動作について説明する。図１１は、本実施形態に係る電子機器１の動作の一例を示すフローチャートである。図１１のステップＳ１０１〜Ｓ１１４は、第１実施形態（図７）と同様である。以下では、ステップＳ１１５〜Ｓ１１９について説明する。
【００９１】
本実施形態において、ＣＰＵ１３は、通常処理の実行中に、揮発メモリ１１のデータが更新された場合（ステップＳ１１５のＹＥＳ）、データを更新されたブロックの反映状態を未反映（ｆｌａｇ＝１）に更新する（ステップＳ１１６）。その後、処理はステップＳ１０４に進む。
【００９２】
また、本実施形態において、ＣＰＵ１３は、通常処理の実行中にシステム要求を通知された場合（ステップＳ１０４のＹＥＳ）、システム要求により指定されたデータが、揮発メモリ１１の各ブロックの全ての未反映データを含むか判定する（ステップＳ１１７）。
【００９３】
システム要求により指定されたデータが、揮発メモリ１１のあるブロックの未反映データを全て含む場合、不揮発メモリ１２のデータ更新により、揮発メモリ１１の当該ブロックのデータ更新が、不揮発メモリ１２に全て反映される。このため、ＣＰＵ１３は、システム要求により指定されたデータが、揮発メモリ１１のあるブロックの未反映データを全て含む場合（ステップＳ１１７のＹＥＳ）、当該ブロックの反映状態を反映済み（ｆｌａｇ＝０）に更新する（ステップＳ１１８）。
【００９４】
一方、システム要求により指定されたデータが、揮発メモリ１１のあるブロックの未反映データを全ては含まない場合、不揮発メモリ１２のデータ更新により、揮発メモリ１１の当該ブロックのデータ更新が、不揮発メモリ１２に全ては反映されない。このため、ＣＰＵ１３は、システム要求により指定されたデータが、揮発メモリ１１のあるブロックの未反映データを全ては含まない場合（ステップＳ１１７のＮＯ）、当該ブロックの反映状態を未反映（ｆｌａｇ＝１）に更新する（ステップＳ１１９）。
【００９５】
その後、処理はステップＳ１０７に進む。なお、ステップＳ１１７〜Ｓ１１９と、ステップＳ１０５，Ｓ１０６と、は順番が逆であってもよい。
【００９６】
以上説明した通り、本実施形態によれば、データ更新が未反映のブロックの退避優先順位が高くなるように、揮発メモリ１１の各ブロックの退避優先順位が決定される。これにより、揮発メモリ１１に格納された未反映データを優先的に不揮発メモリ１２に退避させることができる。結果として、退避処理が間に合わないことにより未反映データが失われることを、抑制することができる。
【００９７】
（第３実施形態）
第３実施形態に係る電子機器１について、図１２及び図１３を参照して説明する。本実施形態では、揮発メモリ１１の各ブロックの書き込み失敗回数及び重要度に基づいて、各ブロックの退避優先順位を決定する電子機器１について説明する。なお、本実施形態に係る電子機器１のハードウェア構成は第１実施形態と同様である。
【００９８】
揮発メモリ１１に格納されるデータは、ブロックごとにその重要性が異なることがあり得る。このような場合には、重要性が高いデータを優先的に退避させることが好ましい。そこで、本実施形態では、重要性が高いデータを優先的に退避できるように、各ブロックの重要度に基づいて各ブロックの退避優先順位を決定する。
【００９９】
各ブロックの重要度は、各ブロックに格納されるデータの重要性を示す値である。重要度は、重要性に応じた値であってもよいし、重要か否かを示す２値の値であってもよい。重要度は、予め設定され、不揮発メモリ１２に格納される。
【０１００】
本実施形態において、ＣＰＵ１３は、揮発メモリ１１の各ブロックの重要度及び書き込み失敗回数に基づいて、揮発メモリ１１の各ブロックの評価値を計算し、評価値が大きいブロックほど順位を高くなるように、各ブロックの退避優先順位を決定する。評価値は、例えば、重要度及び書き込み失敗回数の和や積であるが、これに限られない。重要度及び書き込み失敗回数は、重み係数により重み付けされてもよい。重み係数は任意に設定可能である。
【０１０１】
図１２は、本実施形態における管理テーブルの一例を示す図である。図１２の例では、揮発メモリ１１は、ブロックＺ０〜Ｚ３を備える。図１２のｓｉｇｎｉｆは、各ブロックが重要か否かを示す２値の重要度である。ｓｉｇｎｉｆ＝１はそのブロックのデータが重要であることを示し、ｓｉｇｎｉｆ＝０はそのブロックのデータが重要ではないことを示す。また、図１２のｓｃｏｒｅは、各ブロックの評価値である。図１２の例では、評価値ｓｃｏｒｅは、ｓｃｏｒｅ＝２０×ｓｉｇｎｉｆ＋ｃｏｕｎｔにより計算される。２０は、重要度ｓｉｇｎｉｆの重み係数である。
【０１０２】
図１２において、ブロックＺ０は、重要度ｓｉｇｎｉｆが１、書き込み失敗回数ｃｏｕｎｔが５回であるため、評価値ｓｃｏｒｅは２５（＝２０×１＋５）である。ブロックＺ１は、重要度ｓｉｇｎｉｆが１、書き込み失敗回数ｃｏｕｎｔが２回であるため、評価値ｓｃｏｒｅは２２（＝２０×１＋２）である。ブロックＺ２は、重要度ｓｉｇｎｉｆが０、書き込み失敗回数ｃｏｕｎｔが１回であるため、評価値ｓｃｏｒｅは１（＝２０×０＋１）である。ブロックＺ３は、重要度ｓｉｇｎｉｆが０、書き込み失敗回数ｃｏｕｎｔが８回であるため、評価値ｓｃｏｒｅは８（＝２０×０＋８）である。
【０１０３】
したがって、ブロックＺ０〜Ｚ３の退避優先順位ｒａｎｋは、評価値ｓｃｏｒｅが大きい順に、ブロックＺ０が１位、ブロックＺ１が２位、ブロックＺ３が３位、ブロックＺ２が４位となっている。
【０１０４】
以上説明した通り、本実施形態によれば、重要度が高いブロックの順位が高くなるように、各ブロックの退避優先順位を決定することができる。これにより、重要性が高いデータを優先的に不揮発メモリ１２に退避させることができる。
【０１０５】
なお、本実施形態に係る退避優先順位の決定方法を、他の決定方法と併用することも可能である。例えば、データ更新の反映状態を併用する場合について考える。この場合、ＣＰＵ１３は、反映状態が未反映のブロックの順位が、反映状態が反映済みのブロックの順位より高くなるように、各ブロックの退避優先順位を決定し、未反映及び反映済みのブロックの中での退避優先順位を、評価値が高い順に決定すればよい。
【０１０６】
また、反映状態に基づいて評価値を計算し、評価値が高い順に退避優先順位を決定することも可能である。図１３は、このような方法により退避優先順位を決定された管理テーブルの一例を示す図である。図１３の例では、評価値ｓｃｏｒｅは、ｓｃｏｒｅ＝２０×ｓｉｇｎｉｆ＋１０×ｆｌａｇ＋ｃｏｕｎｔにより計算される。１０は、反映状態ｆｌａｇの重み係数である。例えば、ブロックＺ０は、重要度ｓｉｇｎｉｆが１、反映状態ｆｌａｇが０、書き込み失敗回数ｃｏｕｎｔが５回であるため、評価値ｓｃｏｒｅは２５（＝２０×１＋１０×０＋５）である。図１３の例では、ブロックＺ０〜Ｚ３の退避優先順位ｒａｎｋは、評価値ｓｃｏｒｅが大きい順に、ブロックＺ０が１位、ブロックＺ１が２位、ブロックＺ３が３位、ブロックＺ２が４位となっている。
【０１０７】
（第４実施形態）
第４実施形態に係る電子機器１について、図１４及び図１５を参照して説明する。本実施形態では、揮発メモリ１１の各ブロックの書き込み失敗回数及び連続性に基づいて、各ブロックの退避優先順位を決定する電子機器１について説明する。なお、本実施形態に係る電子機器１のハードウェア構成は第１実施形態と同様である。
【０１０８】
ＣＰＵ１３が不揮発メモリ１２にデータを書き込む場合、いずれの通信プロトコルを利用する場合でも、受信側（不揮発メモリ１２）の反応待機処理や次の通信までの待機処理などのオーバヘッドが発生する。ＣＰＵ１３がデータを書き込む回数が増えるほど、このオーバヘッドが増大し、退避処理に要する時間が長くなる。逆に言うと、ＣＰＵ１３がデータを書き込む回数を減らすことにより、退避処理のオーバヘッドを減少させ、退避処理に要する時間を短くすることができる。
【０１０９】
そこで、本実施形態では、ＣＰＵ１３は、不揮発メモリ１２へのデータの書き込み回数が少なくなるように、退避先（不揮発メモリ１２のブロック）のアドレスの連続性に基づいて、揮発メモリ１１の各ブロックの退避優先順位を決定する。
【０１１０】
図１４は、本実施形態における退避優先順位の決定処理の一例を示すフローチャートである。図１４のフローチャートは、図７のステップＳ１１２の内部処理に相当する。
【０１１１】
まず、ＣＰＵ１３は、揮発メモリ１１の各ブロックの仮退避優先順位を決定する（ステップＳ２０１）。仮退避優先順位は、上述の任意の決定方法を利用して決定することができる。例えば、仮退避優先順位は、書き込み失敗回数に基づいて決定されてもよいし、書き込み失敗回数及び反映状態に基づいて決定されてもよいし、評価値に基づいて決定されてもよい。ＣＰＵ１３は、仮退避優先順位の決定後、ｉを１に初期化する（ステップＳ２０２）。
【０１１２】
次に、ＣＰＵ１３は、仮退避優先順位がｉ位のブロックの、仮退避優先順位が下限順位Ｒｍｉｎ位以上の連続ブロックがあるか判定する（ステップＳ２０３）。ｉは、処理対象のブロックの仮退避優先順位である。下限順位Ｒｍｉｎは、退避処理を実行する必要性が高いブロックの仮退避優先順位の下限値として、予め設定された値である。本実施形態において、連続ブロックは、下限順位Ｒｍｉｎ以上の仮退避優先順位を有するブロックの中から探索される。
【０１１３】
ｉ位のブロックの連続ブロックとは、ｉ位のブロックのデータと同時に、そのブロックのデータを不揮発メモリ１２に書き込み可能なブロックのことである。ｉ位のブロックの対応ブロックと、連続ブロックの対応ブロックと、は不揮発メモリ１２上でアドレスが連続する。
【０１１４】
ＣＰＵ１３は、仮退避優先順位がＲｍｉｎ位以上の連続ブロックがある場合（ステップＳ２０３のＹＥＳ）、その連続ブロックの仮退避優先順位をｉ位に変更し（ステップＳ２０４）、他のブロックの仮退避優先順位を修正する（ステップＳ２０５）。すなわち、ＣＰＵ１３は、連続ブロックより順位が低い他の全てのブロックの仮退避優先順位を繰り上げる。
【０１１５】
ＣＰＵ１３は、連続ブロックの探索範囲が決定処理の過程で変化しないように、基準順位Ｒｍｉｎを１小さくする（ステップＳ２０６）。その後、処理はステップＳ２０３に戻る。以降、ＣＰＵ１３は、ｉ位のブロックの連続ブロックがなくなるまで、ステップＳ２０３〜Ｓ２０６の処理を繰り返す。
【０１１６】
ＣＰＵ１３は、仮退避優先順位がＲｍｉｎ位以上の連続ブロックがない場合（ステップＳ２０３のＮＯ）、ｉを１大きくし（ステップＳ２０７）、ｉとＲｍｉｎとを比較する（ステップＳ２０８）。
【０１１７】
ｉ＜Ｒｍｉｎの場合（ステップＳ２０８のＮＯ）、処理はステップＳ２０３に戻る。以降、ＣＰＵ１３は、ｉ≧Ｒｍｉｎとなるまで、ステップＳ２０３〜Ｓ２０８の処理を繰り返す。
【０１１８】
一方、ｉ≧Ｒｍｉｎの場合（ステップＳ２０８のＹＥＳ）、ＣＰＵ１３は、決定処理を終了する。本実施形態では、決定処理の終了時の仮退避優先順位が、退避優先順位となる。
【０１１９】
図１５は、本実施形態における管理テーブルの一例を示す図である。図１５の例では、揮発メモリ１１は、ブロックＺ０〜Ｚ５を備える。ブロックＺ０〜Ｚ５は、不揮発メモリ１２のブロックＣ０〜Ｃ５とそれぞれ対応する。
【０１２０】
図１５（Ａ）は、ステップＳ２０１において決定される仮退避優先順位を示す図である。図１５（Ａ）の例では、仮退避優先順位ｒａｎｋは評価値ｓｃｏｒｅが高い順に決定されている。評価値ｓｃｏｒｅは、反映状態ｆｌａｇ及び書き込み失敗回数ｃｏｕｎｔに基づいて計算されている（ｓｃｏｒｅ＝１０×ｆｌａｇ＋ｃｏｕｎｔ）。仮退避優先順位は、ブロックＺ１が１位、ブロックＺ５が２位、ブロックＺ４が３位、ブロックＺ２が４位、ブロックＺ０が５位、ブロックＺ３が６位である。また、下限順位Ｒｍｉｎは、４位に設定されている。すなわち、仮退避優先順位が４位以上のブロックＺ１，Ｚ５，Ｚ４，Ｚ２が、連続ブロックの探索範囲（退避処理を実行する必要性が高いブロック）に相当する。
【０１２１】
図１５（Ｂ）は、図１５（Ａ）の仮退避優先順位に基づいて、図１４の決定処理により決定される退避優先順位を示す図である。図１５（Ｂ）の退避優先順位は、以下の手順で決定される。
【０１２２】
まず、ＣＰＵ１３は、ｉを１に設定し（ステップＳ２０２）、仮退避優先順位が４位以上のブロックの中から、仮退避優先順位が１位であるブロックＺ１の連続ブロックを探索する（ステップＳ２０３）。
【０１２３】
揮発メモリ１１のブロックＺ１の対応ブロックは、不揮発メモリ１２のブロックＣ１である。ここで、不揮発メモリ１２のブロックＣ０〜Ｃ５のアドレスが連続しているものとする。このとき、ブロックＣ１と、ブロックＣ０，Ｃ２と、のアドレスは不揮発メモリ１２上で連続するため、ブロックＺ２がブロックＺ１の連続ブロックとして発見される（ステップＳ２０３のＹＥＳ）。
【０１２４】
したがって、ＣＰＵ１３は、ブロックＺ２の仮退避優先順位を１位に変更し（ステップＳ２０４）、ブロックＺ２より仮退避優先順位が低かったブロックＺ０，Ｚ３の仮優先順位を繰り上げ（ステップＳ２０５）、Ｒｍｉｎを３位に変更する（ステップＳ２０６）。仮退避優先順位が３位以上のブロックに、ブロックＺ１の連続ブロックは他に存在しないため（ステップＳ２０３のＮＯ）、ＣＰＵ１３は、ｉを１増加させる（ステップＳ２０７）。このとき、ｉ＝２、Ｒｍｉｎ＝３であるため（ステップＳ２０８のＮＯ）、ＣＰＵ１３は、仮退避優先順位が２位であるブロックＺ５の連続ブロックを、仮退避優先順位が３位以上のブロックの中から探索する（ステップＳ２０３）。
【０１２５】
揮発メモリ１１のブロックＺ５の対応ブロックは、不揮発メモリ１２のブロックＣ５である。ブロックＣ５と、ブロックＣ４と、はアドレスが不揮発メモリ１２上で連続するため、ブロックＺ４がブロックＺ５の連続ブロックとして発見される（ステップＳ２０３のＹＥＳ）。
【０１２６】
したがって、ＣＰＵ１３は、ブロックＺ４の仮退避優先順位を２位に変更し（ステップＳ２０４）、ブロックＺ４より仮退避優先順位が低かったブロックＺ０，Ｚ３の仮優先順位を繰り上げ（ステップＳ２０５）、Ｒｍｉｎを２位に変更する（ステップＳ２０６）。仮退避優先順位が２位以上のブロックに、ブロックＺ５の連続ブロックは他に存在しないため（ステップＳ２０３のＮＯ）、ＣＰＵ１３は、ｉを１増加させる（ステップＳ２０７）。このとき、ｉ＝３、Ｒｍｉｎ＝２であるため（ステップＳ２０８のＹＥＳ）、ＣＰＵ１３は、決定処理を終了する。
【０１２７】
以上の処理により、図１５（Ｂ）の退避優先順位が決定される。図１５からわかるように、図１５（Ｂ）の退避優先順位では、対応ブロックが連続する揮発メモリ１１のブロックが、同一順位になっていることがわかる。
【０１２８】
本実施形態では、ＣＰＵ１３は、こうして決定された退避優先順位に従って、揮発メモリ１１の各ブロックのデータを、不揮発メモリ１２に退避させる。この際、ＣＰＵ１３は、揮発メモリ１１の同一順位のブロックのデータをまとめて読出し、読み出したデータを、不揮発メモリ１２にまとめて書き込む。これにより、本実施形態によれば、ＣＰＵ１３がデータを書き込む回数を減らし、退避処理のオーバヘッドを減少させ、退避処理に要する時間を短くすることができる。
【０１２９】
例えば、図１５の例では、ブロックＺ１，Ｚ２のデータが、ブロックＣ１，Ｃ２にまとめて書き込まれる。また、ブロックＺ４，Ｚ５のデータが、ブロックＣ４，Ｃ５にまとめて書き込まれる。これにより、ＣＰＵ１３が揮発メモリ１１から不揮発メモリ１２にデータを書き込む回数が、２回削減され、退避処理に要する時間がオーバヘッド２回分短くなる。
【０１３０】
なお、以上の説明では、退避処理を実行する必要性が高いブロックは、下限順位Ｒｍｉｎにより規定されたが、予め設定された評価値又は書き込み失敗回数の下限値により規定されてもよい。この場合、下限値以上の評価値又は書き込み失敗回数を有するブロックが、退避処理を実行する必要性が高いブロックとなる。
【０１３１】
（第５実施形態）
第５実施形態に係る電子機器１について、図１６及び図１７を参照して説明する。本実施形態では、揮発メモリ１１の各ブロックのデータを、通常処理の実行中に不揮発メモリ１２に事前に退避させる電子機器１について説明する。なお、本実施形態に係る電子機器１のハードウェア構成は第１実施形態と同様である。
【０１３２】
上述の通り、退避処理を実行可能な時間は限られているため、データを退避させるブロックが多すぎる場合、退避処理が間に合わない恐れがある。そこで、本実施形態では、退避処理を実行する必要性が高いブロックの数が所定数以下となるように、通常処理の実行中に、揮発メモリ１１のデータを事前退避させる。
【０１３３】
図１６は、本実施形態における事前退避処理の一例を示すフローチャートである。図１６の事前退避処理は、通常処理の実行中に、管理テーブルが更新された場合に実行される。以下では、退避優先順位が評価値に基づいて決定される場合について説明する。
【０１３４】
通常処理の実行中に管理テーブルが更新されると、図１６に示すように、ＣＰＵ１３は、評価値が下限評価値ｓ以上のブロック数が、上限ブロック数Ｔ以下であるか判定する（ステップＳ３０１）。下限評価値ｓは、退避処理を実行する必要性が高いブロックの退避優先順位の下限値として、予め設定された値である。上限ブロック数Ｔは、退避処理を実行する必要性が高いブロックの数の上限値として予め設定された値である。
【０１３５】
評価値が下限評価値ｓ以上のブロック数が上限ブロック数Ｔ以下である場合（ステップＳ３０１のＮＯ）、事前退避処理は終了する。
【０１３６】
一方、評価値が下限評価値ｓ以上のブロック数が上限ブロック数Ｔより多い場合（ステップＳ３０１のＹＥＳ）、ＣＰＵ１３は、評価値が最大のブロックの全データを、対応ブロックに書き込む（退避させる）（ステップ３０２）。
【０１３７】
その後、ＣＰＵ１３は、データを退避させたブロックの書き込み失敗回数や評価値を更新し（ステップＳ３０３）、各ブロックの退避優先順位を更新する（ステップＳ３０４）。その後、処理はステップＳ３０１に戻る。以降、ＣＰＵ１３は、評価値が下限評価値ｓ以上のブロック数が上限ブロック数Ｔ以下になるまで、ステップＳ３０１〜Ｓ３０４の処理を繰り返す。
【０１３８】
図１７は、本実施形態における管理テーブルの一例を示す図である。図１７の例では、揮発メモリ１１は、ブロックＺ０〜Ｚ５を備える。また、下限評価値ｓは１０であり、上限ブロック数は３である。
【０１３９】
図１７（Ａ）は、通常処理の実行中に更新された管理テーブルの一例を示す図である。図１７（Ａ）の例では、下限評価値ｓ（＝１０）以上の評価値を有するブロックが４個であり、上限ブロック数Ｔ（＝３）より多い。
【０１４０】
図１７（Ｂ）は、事前退避処理の実行後の管理テーブルの一例を示す図である。図１７（Ｂ）の管理テーブルは、図１７（Ａ）の管理テーブルに基づいて、以下の手順で生成される。
【０１４１】
上述の通り、図１７（Ａ）の例では、下限評価値ｓ（＝１０）以上の評価値を有するブロック数（４個）が、上限ブロック数Ｔ（＝３）より多いため（ステップＳ３０１のＮＯ）、ＣＰＵ１３は、事前退避処理を実行する。まず、ＣＰＵ１３は、評価値が最大のブロックＺ１のデータを対応ブロック（ブロックＣ１）に退避させる（ステップＳ３０２）。次に、ＣＰＵ１３は、ブロックＺ１の評価値ｓｃｏｒｅ、反映状態ｆｌａｇ、及び書き込み失敗回数ｃｏｕｎｔを０に更新し（ステップＳ３０３）、各ブロックＺ０〜Ｚ５の退避優先順位を更新する（ステップＳ３０４）。
【０１４２】
これにより、下限評価値ｓ以上の評価値を有するブロックの数は上限ブロック数Ｔ以下になるため（ステップＳ３０１のＹＥＳ）、ＣＰＵ１３は、事前退避処理を終了する。この結果、事前退避処理により、図１７（Ｂ）の管理テーブルが生成される。
【０１４３】
以上説明した通り、本実施形態によれば、通常処理の実行中に事前退避処理を実行することにより、退避処理を実行する必要性が高いブロックの数を、上限ブロック数Ｔ以下にすることができる。これにより、退避処理を実行する必要性が高いブロックを、限られた時間内に確実に不揮発メモリ１２に退避させることができる。
【０１４４】
なお、本実施形態において、評価値の代わりに、書き込み失敗回数が用いられてもよい。この場合、ＣＰＵ１３は、下限書き込み失敗回数ｃ以上の書き込み失敗回数を有するブロック数が上限ブロック数Ｔより多い場合に、書き込み失敗回数が最大のブロックに対して、事前退避処理を実行すればよい。
【０１４５】
また、ＣＰＵ１３は、評価値が最大のブロックに限らず、評価値が下限評価値ｓ以上の任意のブロックに対して、事前退避処理を実行してもよい。例えば、ＣＰＵ１３は、評価値が下限評価値ｓ以上の全ブロックに対して事前退避処理を実行することも可能である。
【０１４６】
（第６実施形態）
第６実施形態に係る電子機器１について、図１８〜図２１を参照して説明する。本実施形態では、不揮発メモリ１２を複数備える電子機器１について説明する。図１８は、本実施形態に係る電子機器１のハードウェア構成の一例を示す図である。図１８の電子機器１は、不揮発メモリ１２Ａ，１２Ｂを備える。他の構成は、第１実施形態（図１）と同様である。
【０１４７】
不揮発メモリ１２Ａ，１２Ｂは、それぞれ１つ又は複数のブロックを設けられている。不揮発メモリ１２Ａ，１２Ｂの各ブロックは、揮発メモリ１１の各ブロックに対応する。
【０１４８】
図１９は、本実施形態における揮発メモリ１１及び不揮発メモリ１２Ａ，１２Ｂの一例を示す図である。図１９の例では、揮発メモリ１１はブロックＸ０〜Ｘ２，Ｙ０〜Ｙ２を備え、不揮発メモリ１２ＡはブロックＡ０〜Ａ２を備え、不揮発メモリ１２ＢはブロックＢ０〜Ｂ２を備える。ブロックＸ０〜Ｘ２はブロックＡ０〜Ａ２にそれぞれ対応し、ブロックＹ０〜Ｙ２はブロックＢ０〜Ｂ２にそれぞれ対応する。
【０１４９】
図１８の例では、不揮発メモリ１２Ａ，１２Ｂは、ＣＰＵ１３の別々のポートに接続されているが、ＣＰＵ１３の同一のポートに接続されてもよい。また、電子機器１は、３つ以上の不揮発メモリ１２を備えてもよい。
【０１５０】
本実施形態において、ＣＰＵ１３が不揮発メモリ１２Ａ，１２Ｂへの書き込みを並列して実行可能な場合、管理テーブルは、不揮発メモリ１２Ａ，１２Ｂに対してそれぞれ設けられる。図２０は、ＣＰＵ１３が並列して書き込みを実行可能な場合の管理テーブルの一例を示す図である。図２０の例では、不揮発メモリ１２Ａ用の管理テーブルと、不揮発メモリ１２Ｂ用の管理テーブルと、がそれぞれ設けられている。揮発メモリ１１の各ブロックは、管理テーブル（対応ブロックの不揮発メモリ）ごとに、退避優先順位ｒａｎｋを決定されている。
【０１５１】
この場合、ＣＰＵ１３は、不揮発メモリ１２Ａ用の管理テーブルにおける退避優先順位に従って、ブロックＸ０〜Ｘ２のデータを不揮発メモリ１２Ａに退避させる。また、ＣＰＵ１３は、不揮発メモリ１２Ｂ用の管理テーブルにおける退避優先順位に従って、ブロックＹ０〜Ｙ２のデータを不揮発メモリ１２Ｂに退避させる。ＣＰＵ１３は、不揮発メモリ１２Ａ，１２Ｂへの退避を並行して実行する。
【０１５２】
一方、ＣＰＵ１３が不揮発メモリ１２Ａ，１２Ｂへの書き込みを並列して実行できない場合、管理テーブルは、１つ設けられる。図２１は、ＣＰＵ１３が並列して書き込みを実行できない場合の管理テーブルの一例を示す図である。図２１の管理テーブルでは、揮発メモリ１１の全ブロックの退避優先順位ｒａｎｋが決定されている。
【０１５３】
この場合、ＣＰＵ１３は、管理テーブルにおける退避優先順位に従って、ブロックＸ０〜Ｘ２，Ｙ０〜Ｙ２のデータを、不揮発メモリ１２Ａ，１２Ｂに退避させる。例えば、図２１の例では、ＣＰＵ１３は、揮発メモリ１１のブロックＸ２のデータを、不揮発メモリ１２ＡのブロックＡ２に退避させた後、揮発メモリ１１のブロックＹ０のデータを、不揮発メモリ１２ＢのブロックＢ０に退避させる。
【０１５４】
このように、電子機器１が複数の不揮発メモリ１２を備える場合であっても、図２０及び図２１に示すように、揮発メモリ１１の各ブロックの書き込み失敗回数に基づいて退避優先順位を決定することができる。したがって、退避処理によって各不揮発メモリ１２に存在する誤ライトデータを訂正することができる。なお、本実施形態に係る電子機器１は、上述の各実施形態で説明した、いずれの退避優先順位の決定方法も利用可能である。
【０１５５】
（第７実施形態）
第７実施形態に係る電子機器１について、図２２及び図２３を参照して説明する。本実施形態では、不揮発メモリ１２への書き込み時間に基づいて、退避優先順位を決定する方法について説明する。なお、本実施形態に係る電子機器１の構成は、第６実施形態（図１８）と同様である。
【０１５６】
電子機器１が複数の不揮発メモリ１２を備える場合、各不揮発メモリ１２へのデータの書き込み時間が異なることがあり得る。各不揮発メモリ１２の書き込み時間が異なる場合、同じ時間に退避可能なブロック数が、不揮発メモリ１２毎に相違することになる。例えば、不揮発メモリ１２Ａへの１回の書き込み時間が１ｍｓ、不揮発メモリ１２Ｂへの１回の書き込み時間が１００μｓである場合、同じ時間に退避可能なブロック数が、不揮発メモリ１２Ｂは不揮発メモリ１２Ａの１０倍となる。このような、退避可能なブロック数の相違は、ＣＰＵ１３が複数の不揮発メモリ１２に対して並行して書き込みを実行できない場合に問題となる。そこで、本実施形態では、不揮発メモリ１２毎の書き込み時間に基づいて、退避優先順位を決定する。
【０１５７】
図２２は、本実施形態における揮発メモリ１１及び不揮発メモリ１２Ａ，１２Ｂの一例を示す図である。図２２の例では、揮発メモリ１１はブロックＸ０〜Ｘ２，Ｙ０〜Ｙ２を備え、不揮発メモリ１２ＡはブロックＡ０〜Ａ２を備え、不揮発メモリ１２ＢはブロックＢ０〜Ｂ２を備える。ブロックＸ０〜Ｘ２はブロックＡ０〜Ａ２にそれぞれ対応し、ブロックＹ０〜Ｙ２はブロックＢ０〜Ｂ２にそれぞれ対応する。また、不揮発メモリ１２Ａ（ブロックＡ０〜Ａ２）への１回の書き込み時間は１ｍｓであり、不揮発メモリ１２Ｂ（ブロックＢ０〜Ｂ２）への１回の書き込み時間は１００μｓである。本実施形態では、これらの書き込み時間は、予め設定されているものとする。
【０１５８】
また、揮発メモリ１１の各ブロックに設定されたｓｐｅｅｄは、各ブロックから不揮発メモリ１２Ａ，１２Ｂへの書き込み速度であり、不揮発メモリ１２Ａ，１２Ｂの書き込み時間に応じて計算させる。図２２の例では、揮発メモリ１１の各ブロックの書き込み速度ｓｐｅｅｄは、ｓｐｅｅｄ＝１−（対応ブロックへの書き込み時間／全不揮発メモリの書き込み時間の合計値）により計算されている。例えば、ブロックＸ０の書き込み速度ｓｐｅｅｄは、ｓｐｅｅｄ＝１−１ｍｓ／（１ｍｓ＋１００μｓ）＝１／１１≒０．０９である。なお、書き込み速度ｓｐｅｅｄの計算方法はこれに限られない。
【０１５９】
本実施形態において、揮発メモリ１１の各ブロックは、書き込み速度ｓｐｅｅｄをそれぞれ計算され、管理テーブルに格納される。ＣＰＵ１３は、管理テーブルに格納された書き込み速度に基づいて、評価値を計算し、評価値が大きいほど順位が高くなるように、揮発メモリ１１の各ブロックの退避優先順位を決定する。
【０１６０】
図２３は、本実施形態における管理テーブルの一例を示す図である。図２３の例では、評価値ｓｃｏｒｅは、ｓｃｏｒｅ＝（１＋ｓｐｅｅｄ）×（１０×ｆｌａｇ＋ｃｏｕｎｔ）により計算される。１は、ｓｐｅｅｄの影響を調整するための係数であり、任意に設定可能である。例えば、ブロックＹ０は、書き込み速度ｓｐｅｅｄが０．９１、反映状態ｆｌａｇが１、書き込み失敗回数ｃｏｕｎｔが４回であるため、評価値ｓｃｏｒｅは２６．７３（＝（１＋０．９１）×（１０×１＋４））である。
【０１６１】
以上説明した通り、本実施形態では、評価値は、書き込み速度が早い（書き込み時間が短い）ほど、大きくなるように計算される。すなわち、揮発メモリ１１の各ブロックの退避優先順位は、対応ブロックへの書き込み時間が短いほど順位が高くなるように決定される。これにより、本実施形態によれば、同じ時間に退避可能なブロックを増加させることができる。
【０１６２】
なお、本実施形態において、評価値の計算方法は、上記の例に限られない。評価値は、書き込み時間及び書き込み失敗回数を利用した任意の方法で計算することができる。
【０１６３】
なお、上記実施形態に挙げた構成等に、その他の要素との組み合わせなど、ここで示した構成に本発明が限定されるものではない。これらの点に関しては、本発明の趣旨を逸脱しない範囲で変更することが可能であり、その応用形態に応じて適切に定めることができる。
【符号の説明】
【０１６４】
１：電子機器
１１：揮発メモリ
１２：不揮発メモリ
１３：ＣＰＵ
１４：電源ＯＦＦ検知部
１５：停電検知部
【先行技術文献】
【特許文献】
【０１６５】
【特許文献１】特開２００８−９７１６９号公報
【図１】
2018018207.tif 000003
【図２】
2018018207.tif 000004
【図３】
2018018207.tif 000005
【図４】
2018018207.tif 000006
【図５】
2018018207.tif 000007
【図６】
2018018207.tif 000008
【図７】
2018018207.tif 000009
【図８】
2018018207.tif 000010
【図９】
2018018207.tif 000011
【図１０】
2018018207.tif 000012
【図１１】
2018018207.tif 000013
【図１２】
2018018207.tif 000014
【図１３】
2018018207.tif 000015
【図１４】
2018018207.tif 000016
【図１５】
2018018207.tif 000017
【図１６】
2018018207.tif 000018
【図１７】
2018018207.tif 000019
【図１８】
2018018207.tif 000020
【図１９】
2018018207.tif 000021
【図２０】
2018018207.tif 000022
【図２１】
2018018207.tif 000023
【図２２】
2018018207.tif 000024
【図２３】
2018018207.tif 000025