以下、本発明の各実施形態について、添付の図面を参照しながら説明する。なお、各実施形態に係る明細書及び図面の記載に関して、実質的に同一の機能構成を有する構成要素については、同一の符号を付することにより重畳した説明を省略する。
(第1実施形態)
第1実施形態に係る電子機器1ついて、図1〜図7を参照して説明する。本実施形態に係る電子機器1は、揮発メモリから不揮発メモリへのデータの退避が要求される任意の電子機器に適用可能である。例えば、電子機器1は、画像形成装置、デジタルカメラ、電子情報ボード、サーバコンピュータ、クライアントコンピュータなどに適用できる。画像形成装置は、MFP、プリンタ装置、コピー装置、FAX、スキャナ装置などを含む。
まず、本実施形態に係る電子機器1の構成について説明する。図1は、本実施形態に係る電子機器1のハードウェア構成の一例を示す図である。図1の電子機器1は、揮発メモリ11と、不揮発メモリ12と、CPU(Central Processing Unit)13と、電源OFF検知部14と、停電検知部15と、を備える。
揮発メモリ11は、DRAM(Dynamic Random Access Memory)やSRAM(Static RAM)などである。揮発メモリ11は、記憶領域を分割して形成された複数の分割領域を設けられている。各分割領域には、退避対象となるデータがそれぞれ格納される。
不揮発メモリ12は、EEPROM(Electrically Erasable Programmable Read Only Memory)、フラッシュメモリ、MRAM(Magnetoresistive RAM)、ReRAM(Resistive RAM)、FeRAM(Ferroelectric RAM)などである。不揮発メモリ12は、記憶領域を分割して形成された複数の分割領域を設けられている。不揮発メモリ12の各分割領域は、アドレスの特定ビットが共通する記憶領域の集合として設けられる。また、不揮発メモリ12の各分割領域は、それぞれ揮発メモリ11の分割領域に対応する。不揮発メモリ12の分割領域には、揮発メモリ11の対応する分割領域のデータが退避される。
以下では、揮発メモリ11及び不揮発メモリ12に設けられた分割領域を、ブロックと称する。
CPU13は、制御部の一例である。電子機器1の制御部は、FPGA(Field Programmable Gate Array)、ASIC(Application Specified Integrated Circuit)、マイコンなどであってもよい。CPU13は、プログラムを実行し、電子機器1の機能を実現する。CPU13が実行するプログラムは、不揮発メモリ12に格納されていてもよいし、不揮発メモリ12とは別に設けられたプログラムメモリに格納されていてもよい。また、CPU13は、揮発メモリ11上でプログラムを実行してもよいし、揮発メモリ11とは別に設けられたRAM上でプログラムを実行してもよい。CPU13が実現する機能については後述する。
電源OFF検知部14は、電子機器1に入力された電源OFF要求を検知し、CPU13に通知する。CPU13は、電源OFF要求の検知を通知されると、揮発メモリ11の各分割領域から、不揮発メモリ12の対応する分割領域へ、分割領域ごとにデータを退避させる処理(以下、「退避処理」という)を実行する。電源OFF要求は、電子機器1のユーザによる電源OFF操作によって入力されてもよいし、電子機器1で動作するソフトウェアにより入力されてもよい。電子機器1は、電源OFF要求を入力されると、タイムアウト処理の実行後、電源がOFFになる。
停電検知部15は、電子機器1の停電(電子機器1への電力供給の停止)を検知し、CPU13に通知する。CPU13は、停電の検知を通知されると、退避処理を実行する。電子機器1は、停電すると、所定時間後に電源がOFFになる。
なお、本実施形態において、電子機器1は、電源OFF検知部14又は停電検知部15のいずれか一方だけを備えてもよい。
図2は、揮発メモリ11及び不揮発メモリ12のデータ状態の推移を示す図である。図2において、揮発メモリ11はブロックX,Y,Zを備え、不揮発メモリ12はブロックA,B,Cを備える。揮発メモリ11のブロックX,Y,Zは、不揮発メモリ12のブロックA,B,Cにそれぞれ対応する。
図2(A)は、電子機器1の電源OFF時のデータ状態を示す図である。図2(A)に示すように、電源OFF時には、揮発メモリ11の各ブロックには、データが格納されておらず、不揮発メモリ12の各ブロックには、それぞれ所定のデータ(設定情報など)が格納されている。図2(A)の例では、例えば、不揮発メモリ12のブロックAには、データ0xa1,0xa2,0xa3が格納されている。
図2(B)は、電子機器1の電源ON時のデータ状態を示す図である。電子機器1の電源がONになると、CPU13は、揮発メモリ11を利用して処理を実行するため、不揮発メモリ12の各ブロックに格納されたデータを読み出し、読み出した各ブロックのデータを、揮発メモリ11の対応するブロックに書き込む。これにより、揮発メモリ11の各ブロックには、不揮発メモリ12の対応するブロックに格納されたデータと同一のデータが格納される。図2(B)の例では、例えば、揮発メモリ11のブロックXには、不揮発メモリ12のブロックAに格納されたデータと同一のデータ0xa1,0xa2,0xa3が格納されている。
以下では、CPU13が揮発メモリ11を利用して実行する、退避処理以外の処理を通常処理という。CPU13が実行する通常処理は、任意である。
図2(C)は、揮発メモリ11のデータ更新時のデータ状態を示す図である。電子機器1の電源がONになり、CPU13が通常処理を実行すると、CPU13により揮発メモリ11の各ブロックに格納されたデータが更新される。揮発メモリ11のデータが更新されると、揮発メモリ11の更新されたブロックに格納されたデータと、不揮発メモリ12の対応するブロックに格納されたデータと、が一致しなくなる。図2(C)の例では、揮発メモリ11のブロックXのデータが更新されており、ブロックXにはデータ0xa4,0xa5,0xa6が格納されている。これに対して、不揮発メモリ12のブロックAには、データ0xa1,0xa2,0xa3が格納されている。
図2(D)は、不揮発メモリ12のデータ更新時のデータ状態を示す図である。CPU13は、通常処理の実行中、所定のタイミングで不揮発メモリ12のデータを更新する。すなわち、CPU13は、揮発メモリ11のブロックに格納されたデータを読み出し、読み出したデータを、不揮発メモリ12の対応するブロックに書き込む。不揮発メモリ12のデータが更新されると、不揮発メモリ12の更新されたブロックに格納されたデータと、揮発メモリ11の対応するブロックに格納されたデータと、が一致する。図2(D)の例では、不揮発メモリ12のブロックAのデータが更新されており、ブロックAには、対応する揮発メモリ11のブロックXと同一のデータであるデータ0xa4,0xa5,0xa6が格納されている。
CPU13が不揮発メモリ12のデータを更新するタイミングは任意である。ただし、一般に、更新頻度が高いほど、CPU13のパフォーマンスが低下し、不揮発メモリ12の寿命が短くなるため、更新頻度は高すぎないのが好ましい。例えば、CPU13は、1分以上の間隔で定期的に不揮発メモリ12のデータを更新したり、システム要求に応じて不定期に不揮発メモリ12のデータを更新したりするのが好ましい。
図2(E)は、不揮発メモリ12への書き込み異常発生時のデータ状態を示す図である。CPU13が不揮発メモリ12のデータの更新を繰り返し実行すると、ノイズなどの影響により、データエラーやアドレスエラーなどの書き込み異常が発生することがある。データエラーとは、書き込み対象のデータの、一部のビットが反転するエラーである。データエラーが発生すると、所望のアドレスに誤ったデータが書き込まれる。アドレスエラーとは、データの書き込み先を示すアドレスの、一部のビットが反転するエラーである。アドレスエラーが発生すると、データが誤ったアドレスに書き込まれる。
図2(E)の例では、不揮発メモリ12のブロックCのデータの更新時に書き込み異常が発生している。この結果、揮発メモリ11のブロックZにデータ0xc4,0xc5,0xc6が格納されているのに対して、不揮発メモリ12のブロックCにはデータ0xc4,0xc6,0xc6が格納されている。すなわち、ブロックCには、データ0xc5の代わりに、データ0xc6が誤って書き込まれている。以下では、上記のデータ0xc6のような、書き込み異常によって不揮発メモリ12に誤って書き込まれたデータを、誤ライトデータという。
上述の通り、CPU13は、電源OFF要求の検出時や停電時に退避処理を実行する。退避処理により、揮発メモリ11の全データが不揮発メモリ12に退避された場合、上記のような誤ライトデータは訂正される。結果として、不揮発メモリ12に正常なデータを格納することができる。
しかしながら、実際には、退避処理を実行可能な時間は限られているため、必ずしも揮発メモリ11の全データを退避できるとは限らない。そこで、本実施形態では、CPU13は、誤ライトデータが存在する可能性が高い不揮発メモリ12のブロック、に対応する揮発メモリ11のブロックのデータを優先的に退避させる。
具体的には、CPU13は、不揮発メモリ12の各ブロックのデータ更新時の異常検出回数に基づいて、揮発メモリ11の各ブロックの退避優先順位を決定する。退避優先順位とは、データを退避させる優先順位のことである。CPU13は、退避処理の実行時に、この退避優先順位に従って、揮発メモリ11の各ブロックに格納されたデータを、不揮発メモリ12の対応するブロックに退避させる。
CPU13は、退避優先順位を決定するための異常検出回数として、不揮発メモリ12の各ブロックのデータ更新時に検出される任意の異常の検出回数を利用することができる。ただし、CPU13は、異常検出回数として、ベリファイ処理により検出される書き込み失敗の回数を利用するのが好ましい。理由は以下の通りである。
ベリファイ処理は、データの書き込みが成功したか(正常に行われたか)を判定するために広く使用されている処理である。ベリファイ処理では、データの書き込み後、書き込まれたデータを読み出し、読み出されたデータと、書き込まれたデータと、が一致するかを判定する。読み出されたデータ及び書き込まれたデータが、一致する場合、データの書き込みは成功と判定され、一致しない場合、データの書き込みは失敗と判定される。ベリファイ処理により、書き込み失敗が検知された場合、データは再書き込みされる。
図3は、書き込み失敗回数と誤ライトデータとの関係を説明する図である。図3の例では、説明を簡単にするために、揮発メモリ11はブロックZのみを備え、不揮発メモリ12はブロックCのみを備える。ブロックZとブロックCとは対応する。
図3(A)は、データエラー発生時のデータ状態を示す図である。図3(A)の例では、揮発メモリ11のデータ0xc4は、不揮発メモリ12に正常に書き込まれている。このため、データ0xc4の書き込み後に、CPU13がベリファイ処理を実行すると、書き込みは成功と判定される。
これに対して、図3(A)の例では、揮発メモリ11のデータ0xc5を不揮発メモリ12に書き込む際に、データエラーが発生している。この結果、不揮発メモリ12の、データ0xc5が書き込まれるはずのアドレスには、データ0xc4が書き込まれている。このデータ0xc4は、誤ライトデータに相当する。
図3(B)は、データエラー発生後の再書き込み時のデータ状態を示す図である。データエラーの発生後、CPU13がベリファイ処理を実行すると、揮発メモリ11から書き込んだデータ0xc5と、不揮発メモリ12から読み出したデータ0xc4と、が一致しないため、書き込みは失敗と判定される。したがって、CPU13は、揮発メモリ11のデータ0xc5を、不揮発メモリ12に再書き込みする。これにより、図3(B)に示すように、不揮発メモリ12の誤ライトデータ(データ0xc4)が、正常なデータ0xc5に訂正される。
以上のことからわかるように、ベリファイ処理を実行すると、データエラーが発生した場合であっても、正常なデータの再書き込みにより、誤ライトデータを訂正することができる。
図3(C)は、アドレスエラー発生時のデータ状態を示す図である。図3(C)の例では、揮発メモリ11のデータ0xc6を不揮発メモリ12に書き込む際に、アドレスエラーが発生している。この結果、データ0xc6は、不揮発メモリ12の誤ったアドレスに書き込まれている。この誤ったアドレスに書き込まれたデータ0xc6と、正常なデータ0xc6を書き込まれなかったデータ0xc4と、はいずれも誤ライトデータに相当する。
図3(D)は、アドレスエラー発生後の再書き込み時のデータ状態を示す図である。アドレスエラーの発生後、CPU13がベリファイ処理を実行すると、揮発メモリ11から書き込んだデータ0xc6と、不揮発メモリ12から読み出したデータ0xc3と、が一致しないため、書き込みは失敗と判定される。したがって、CPU13は、揮発メモリ11のデータ0xc6を、不揮発メモリ12に再書き込みする。これにより、図3(D)に示すように、誤ライトデータ(データ0xc4)が、正常なデータ0xc6に訂正される。しかしながら、不揮発メモリ12の誤ったアドレスに書き込まれた誤ライトデータ(データ0xc6)は、再書き込みにより訂正されず、その後も不揮発メモリ12に残る。
以上のことからわかるように、アドレスエラーが発生した場合、ベリファイ処理を実行しても、不揮発メモリ12に誤ライトデータが残ることになる。すなわち、アドレスエラーの発生時に検出される書き込み失敗回数は、不揮発メモリ12に存在する誤ライトデータの数に一致する。
実際には、データエラーが発生した場合にも、書き込み失敗は検出されるため、書き込み失敗回数と、不揮発メモリ12に存在する誤ライトデータの数と、は必ずしも一致しない。しかしながら、書き込み失敗回数は、不揮発メモリ12に存在する誤ライトデータの数と、高い相関を有するがわかる。
次に、アドレスエラーと、誤ライトデータと、の関係について説明する。図3の例では、説明を簡単にするために、アドレスエラーが同一ブロック内で発生する場合について説明したが、実際には、アドレスエラーが複数ブロック間で発生することも考えられる。
アドレスエラーが同一ブロック内で発生する場合とは、アドレスエラーにより、不揮発メモリ12のあるブロックのあるアドレスに書き込まれるはずのデータが、そのブロックの他のアドレスに書き込まれる場合のことである。同一ブロック内のアドレスエラーが発生した場合、書き込み失敗を検出された不揮発メモリ12のブロック(図3(D)のブロックC)に、誤ライトデータ(図3(D)のデータ0xc6)が発生することになる。
これに対して、アドレスエラーが複数ブロック間で発生する場合とは、アドレスエラーにより、不揮発メモリ12のあるブロックに書き込まれるはずのデータが、不揮発メモリ12の他のブロックに書き込まれる場合のことである。複数ブロック間のアドレスエラーが発生した場合、書き込み失敗を検出された不揮発メモリ12のブロックとは異なるブロックに、誤ライトデータが発生することになる。
図4は、アドレスエラーと、誤ライトデータと、の関係を説明する図である。図4の例では、揮発メモリ11は、ブロックZ0〜Z3を備え、不揮発メモリ12はブロックC0〜C3を備える。ブロックZ0〜Z3と、ブロックC0〜C3と、はそれぞれ対応する。ブロックC0はアドレスの上位2ビットが00である記憶領域の集合であり、ブロックC1はアドレスの上位2ビットが01である記憶領域の集合である。また、ブロックC2はアドレスの上位2ビットが10である記憶領域の集合であり、ブロックC3はアドレスの上位2ビットが11である記憶領域の集合である。
ここで、揮発メモリ11のブロックZ0のデータを、不揮発メモリ12のブロックC0のアドレス0x00001111に書き込む際に、アドレスエラーが発生した場合について考える。アドレスエラーが発生すると、上記のアドレスのうち、いくつかのビットが反転する。一般には、1ビットの反転が最も発生しやすいため、ここでは、アドレスの1ビットが反転したものと仮定する。このとき、誤ライトデータが書き込まれるアドレスの候補は、以下の通りとなる。
候補1:0x10001111
候補2:0x01001111
候補3:0x00101111
候補4:0x00011111
候補5:0x00000111
候補6:0x00001011
候補7:0x00001101
候補8:0x00001110
候補1は、不揮発メモリ12のブロックC2に相当する。候補2は、不揮発メモリ12のブロックC1に相当する。候補3〜8は、不揮発メモリ12のブロックC0に相当する。このことから、アドレスエラーにより発生した誤ライトデータは、ブロックC0に存在する可能性が最も高いことがわかる。これは、不揮発メモリ12のブロックCの0x00001111以外のアドレスにデータを書き込む場合も同様である。また、不揮発メモリ12の各ブロックが、上位1ビット又は3ビット以上が共通の記憶領域の集合である場合も同様である。すなわち、揮発メモリ11のブロックZ0のデータを、不揮発メモリ12のブロックC0に書き込む際にアドレスエラーが発生した場合、誤ライトデータはブロックC0に存在する可能性が高い。
これは、他のブロックについても同様である。すなわち、揮発メモリ11のブロックZ1〜3のデータを、不揮発メモリ12のブロックC1〜3に書き込む際にアドレスエラーが発生した場合、誤ライトデータはブロックC1〜3に存在する可能性が高い。
以上説明した通り、揮発メモリ11のあるブロックZiのデータを、不揮発メモリ12のブロックCiに書き込む際にアドレスエラーが発生した場合、誤ライトデータはブロックCiに存在する可能性が高い。そして、書き込み失敗の回数は、不揮発メモリ12に存在する誤ライトデータの数と、高い相関を有する。
したがって、揮発メモリ11のあるブロックZiのデータを、不揮発メモリ12のブロックCiに書き込む際に検出される書き込み失敗の回数は、ブロックCiに存在する誤ライトデータの数と相関する。
以下では、揮発メモリ11のあるブロックZiのデータを、不揮発メモリ12のブロックCiに書き込む際に検出される書き込み失敗の回数を、揮発メモリ11のブロックZiの書き込み失敗回数と称する。このとき、上記の説明は、「揮発メモリ11のブロックZiの書き込み失敗回数は、不揮発メモリ12のブロックCiに存在する誤ライトデータの数と相関する」と表現できる。
このため、CPU13は、揮発メモリ11のブロックZiの書き込み失敗回数に基づいて退避優先順位を決定することにより、不揮発メモリ12のブロックCiに存在する誤ライトデータの数に応じた退避優先順位を決定することができる。
具体的には、本実施形態に係るCPU13は、書き込み失敗回数が多いほど退避優先順位が高くなるように、揮発メモリ11の各ブロックの退避優先順位を決定する。これにより、誤ライトデータが多い不揮発メモリ12のブロックCiほど、優先的にデータを退避し、誤ライトデータを訂正することができる。
図5は、退避処理と、誤ライトデータと、の関係を示す図である。図5の例では、揮発メモリ11は、ブロックX,Y,Zを備え、不揮発メモリ12は、ブロックA,B,Cを備える。ブロックX,Y,Zと、ブロックA,B,Cと、はそれぞれ対応する。図5におけるcountは、ブロックX,Y,Zの書き込み失敗回数を示す。
図5(A)は、退避処理実行前のデータ状態を示す図である。図5(A)の例では、揮発メモリ11のブロックX,Yの書き込み失敗回数は0である。すなわち、ブロックX,YからブロックA,Bへのデータの書き込みの際に、アドレスエラーは発生していない。このため、揮発メモリ11のブロックX,Yと、不揮発メモリ12のブロックA,Bと、にはそれぞれ同一のデータが格納されている。
これに対して、図5(A)の例では、揮発メモリ11のブロックZの書き込み失敗回数は1である。ここでは、ブロックZからブロックCへのデータの書き込みの際に、書き込み異常が1度発生している。ここでは、書き込み異常はアドレスエラーであるものとする。このため、揮発メモリ11のブロックZに格納されたデータと、不揮発メモリ12のブロックCに格納されたデータと、が一致しておらず、不揮発メモリ12のブロックCには、誤ライトデータ(データ0xc6)が存在している。
図5(B)は、退避処理実行後のデータ状態を示す図である。上述の通り、本実施形態に係るCPU13は、書き込み異常回数が多いブロックほど優先的に退避処理を実行する。このため、書き込み失敗回数最大の揮発メモリ11のブロックZが、最優先で退避処理を実行される。CPU13はブロック単位で退避処理を実行するため、退避処理により、揮発メモリ11のブロックZの全データが、不揮発メモリ12のブロックCに書き込まれる(退避される)。これにより、図5(B)に示すように、不揮発メモリ12のブロックCに存在した誤ライトデータ(データ0xc6)が、正常なデータ0xc5に訂正される。
CPU13は、退避処理を実行する際に、揮発メモリ11の各ブロックの退避優先順位を決定してもよいし、通常処理の実行中に予め退避優先順位を決定しておいてもよい。退避優先順位を予め決定することにより、退避処理に要する時間を短縮することができる。退避優先順位を予め決定する方法として、退避優先順位を管理するための管理テーブルを利用する方法が考えられる。
図6は、本実施形態における管理テーブルの一例を示す図である。図6の管理テーブルは、項目として、退避優先順位(rank)と、ブロックと、対応ブロックと、書き込み失敗回数(count)と、を有する。ブロックは、揮発メモリ11の各ブロックを特定する識別情報である。対応ブロックは、揮発メモリ11のブロックが対応する不揮発メモリ12のブロックを特定する識別子である。図6に示すように、本実施形態では、揮発メモリ11の各ブロックは、書き込み失敗回数が多いほど退避優先順位が高くなる。例えば、図6の例では、書き込み失敗回数が最大(10回)のブロックZ1の退避優先順位が1位になっている。
CPU13は、通常処理の実行中に揮発メモリ11から不揮発メモリ12への書き込み失敗が検出されるたびに、管理テーブルの書き込み失敗回数を更新し、更新された書き込み失敗回数に基づいて、常に最新の退避優先順位を決定しておけばよい。管理テーブルを利用することにより、CPU13は、退避処理の際に、管理テーブルに格納された退避優先順位に従ってデータを退避させるだけでよい。すなわち、退避処理の際に、CPU13は、揮発メモリ11に格納された書き込み失敗回数の読み出しや、退避優先順位の決定などを行わなくてもよい。この結果、退避処理に要する時間を短縮することができる。
次に、本実施形態に係る電子機器1の動作について説明する。図7は、本実施形態に係る電子機器1の動作の一例を示すフローチャートである。以下では、CPU13は、不揮発メモリ12に書き込む揮発メモリ11のデータを指定するシステム要求に応じて、不揮発メモリ12のデータを更新するものとする。また、CPU13は、管理テーブルを利用して退避処理を実行するものとする。
電子機器1の電源がONになると、CPU13は、不揮発メモリ12の各ブロックに格納されたデータを読み出し、揮発メモリ11の各ブロックに書き込む(ステップS101)。その後、CPU13は、揮発メモリ11に格納されたデータを利用して、電子機器1の起動処理や初期化処理を実行する。この初期化処理により、揮発メモリ11に設けられた管理テーブルも初期化される。具体的には、揮発メモリ11の各ブロックの書き込み失敗回数countが0に設定され、各ブロックの退避優先順位が初期値に設定される。
CPU13は、起動処理や初期化処理の完了後、通常処理を開始する(ステップS102)。以降、CPU13は、電源OFF検知部14から電源OFF要求の検知を通知される、停電検知部15から停電の検知を通知される、又はシステム要求を通知されるまで、通常処理を実行する。
CPU13は、通常処理の実行中にシステム要求を通知された場合(ステップS104のYES)、システム要求により指定されたデータが、ブロックの全体のデータであるか判定する(ステップS105)。
システム要求により指定されたデータが、ブロックの一部のデータである場合(ステップS105のNO)、処理はステップS107に進む。一方、システム要求により指定されたデータが、ブロック全体のデータである場合(ステップS105のYES)、CPU13は、管理テーブルにアクセスし、当該ブロックの書き込み失敗回数countを0にリセットする(ステップS106)。これは、ブロック全体の書き込みにより、揮発メモリ11の各ブロックに存在する誤ライトデータが訂正されると考えられるためである。
その後、CPU13は、システム要求により指定されたデータを、不揮発メモリ12の対応するブロックに書き込む(ステップS107)。これにより、不揮発メモリ12のデータが更新される。
CPU13は、不揮発メモリ12のデータ更新後、ベリファイ処理を実行する(ステップS108)。すなわち、不揮発メモリ12のデータを更新したブロックからデータを読み出し、読み出したデータを、揮発メモリ11の対応するブロックのデータと比較する。CPU13は、揮発メモリ11及び不揮発メモリ12のデータが一致している場合、書き込みは成功と判定する(ステップS109のYES)。その後、処理はステップS103に戻る。
一方、CPU13は、揮発メモリ11及び不揮発メモリ12のデータが一致していない場合、書き込みは失敗と判定し(ステップS109のNO)、揮発メモリ11のデータを不揮発メモリ12に再書き込みする(ステップS110)。
上述の通り、書き込み失敗の原因がデータエラーである場合、不揮発メモリ12に格納された誤ライトデータは、再書き込みにより正常なデータに訂正される。一方、書き込み失敗の原因がアドレスエラーである場合、不揮発メモリ12に格納された2つの誤ライトデータの一方(図3(C)のデータ0xc3)は、再書き込みにより正常なデータに訂正され、他方(図3(C)のデータ0xc6)は不揮発メモリ12に残る。
いずれの場合も、CPU13は、再書き込みの実行後、管理テーブルにアクセスし、不揮発メモリ12にデータを書き込まれた揮発メモリ11の(システム要求により指定された)ブロックの書き込み失敗回数countを1増加させる(ステップS111)。
そして、CPU13は、揮発メモリ11の各ブロックの退避優先順位rankを、書き込み失敗回数countが多い順にソートする。これにより、揮発メモリ11の各ブロックの退避優先順位rankが決定される(ステップS112)。その後、処理はステップS103に戻る。
CPU13は、通常処理の実行中に、電源OFF要求の検知を通知される、又は停電の検知を通知されると(ステップS103のYES)、通常処理を終了し(ステップS113)、退避処理を実行する(ステップS114)。
具体的には、CPU13は、管理テーブルを参照し、揮発メモリ11の退避優先順位が高いブロックのデータから順に、不揮発メモリ12の対応するブロックに書き込んでいく(退避させる)。CPU13は、退避優先順位rankが所定の順位以上のブロックのデータだけを退避させてもよいし、電子機器1の電源がOFFになるまでの時間が許容する範囲で、できるだけ多くのブロックのデータを退避させてもよい。また、CPU13は、書き込み失敗回数が所定の回数以上のブロックのデータだけを退避させてもよい。退避処理の終了後、電子機器1の電源はOFFになる。
以上説明した通り、本実施形態に係る電子機器1は、揮発メモリ11の退避優先順位が高いブロックのデータから順に、不揮発メモリ12の対応するブロックに退避される。これにより、誤ライトデータが多く存在する可能性が高い不揮発メモリ12のブロックから順に、揮発メモリ11の正常なデータが書き込まれ、誤ライトデータが訂正される。したがって、本実施形態によれば、退避処理により、不揮発メモリ12に格納された誤ライトデータを効果的に削減することができる。
また、本実施形態によれば、退避優先順位rankが所定の順位以上のブロックのデータだけを退避させたり、書き込み失敗回数が所定の回数以上のブロックのデータだけを退避させたりすることにより、退避処理に要する時間を短縮することができる。
(第2実施形態)
第2実施形態に係る電子機器1ついて、図8〜図11を参照して説明する。本実施形態では、揮発メモリ11の各ブロックの書き込み失敗回数及びデータ更新の反映状態に基づいて、各ブロックの退避優先順位を決定する電子機器1について説明する。なお、本実施形態に係る電子機器1のハードウェア構成は第1実施形態と同様である。
まず、本実施形態におけるデータ更新の反映状態について説明する。図8は、データ更新の反映状態を説明する図である。図8の例では、揮発メモリ11は、ブロックX,Y,Zを備え、不揮発メモリ12は、ブロックA,B,Cを備える。ブロックX,Y,Zと、ブロックA,B,Cと、はそれぞれ対応する。
図8(A)は、揮発メモリ11のデータ更新反映前のデータ状態を示す図である。図8(A)の例では、揮発メモリ11のブロックYのデータが更新されている。しかしながら、ブロックYのデータ更新後のデータは、不揮発メモリ12のブロックBには書き込まれていない。この場合、揮発メモリ11のブロックYは、データ更新が未反映であるという。また、揮発メモリ11に格納されたデータのうち、不揮発メモリ12に書き込まれていないデータを、未反映データという。
図8(B)は、揮発メモリ11のデータ更新反映後のデータ状態を示す図である。図8(B)の例では、データ更新された揮発メモリ11のブロックYのデータが、不揮発メモリ12のブロックYに書き込まれ、ブロックYのデータが更新されている。この場合、揮発メモリ11のブロックYは、データ更新が反映済みであるという。
このように、データ更新された揮発メモリ11のブロックのデータを、不揮発メモリ12の対応するブロックに書き込むことを、揮発メモリ11のデータ更新を、不揮発メモリ12に反映する、という。データ更新の反映状態は、反映済みの状態と、未反映の状態と、の2つの状態をとり得る。
本実施形態では、CPU13は、揮発メモリ11の各ブロックの、書き込み失敗回数と、データ更新の反映状態と、に基づいて、揮発メモリ11の各ブロックの退避優先順位を決定する。具体的には、CPU13は、未反映のブロックの退避優先順位が、反映済みのブロックの退避優先順位より高くなるように、各ブロックの退避優先順位を決定する。未反映のブロックの中での退避優先順位は、書き込み失敗回数が多いほど、順位が高くなるように決定される。また、反映済みのブロックの中での退避優先順位は、書き込み失敗回数が多いほど、順位が高くなるように決定される。
図9は、本実施形態における退避優先順位を説明する図である。図9の例では、揮発メモリ11は、ブロックX,Y,Zを備え、不揮発メモリ12は、ブロックA,B,Cを備える。ブロックX,Y,Zと、ブロックA,B,Cと、はそれぞれ対応する。また、図9において、flagは揮発メモリ11の各ブロックの反映状態を示す。flag=1は、そのブロックのデータ更新が未反映であることを示し、flag=0は、そのブロックのデータ更新が反映済みであることを示す。
図9(A)は、退避処理前のデータ状態を示す図である。図9(A)の例では、揮発メモリ11のブロックXは、データ更新が反映済み(flag=0)であり、書き込み失敗回数が0回(count=0)である。揮発メモリ11のブロックYは、データ更新が未反映(flag=1)であり、書き込み失敗回数が0回(count=0)である。揮発メモリ11のブロックZは、データ更新が反映済み(flag=0)であり、書き込み失敗回数が1回(count=1)である。このとき、各ブロックの退避優先順位は、ブロックYが1位、ブロックZが2位、ブロックXが3位となる。
図9(B)は、退避優先順位が1位であるブロックYの退避処理後のデータ状態を示す図である。図9(B)の例では、揮発メモリ11のブロックYのデータは、不揮発メモリ12のブロックBに退避されている。
図9(C)は、退避優先順位が2位であるブロックZの退避処理後のデータ状態を示す図である。図9(C)の例では、揮発メモリ11のブロックZのデータは、不揮発メモリ12のブロックCに退避されている。
図10は、本実施形態における管理テーブルの一例を示す図である。図10の管理テーブルは、項目として、退避優先順位(rank)と、ブロックと、対応ブロックと、書き込み失敗回数(count)と、反映状態(flag)を有する。flagの1はデータ更新が未反映の状態を示し、0はデータ更新が反映済みの状態を示す。
図10に示すように、本実施形態では、未反映のブロックの中で書き込み失敗回数が最大(5回)のブロックZ1の退避優先順位が1位になり、未反映のブロックの中で書き込み失敗回数が2番目に大きい(2回)ブロックZ3の退避優先順位が2位になる。また、反映済みのブロックの中で書き込み失敗回数が最大(8回)のブロックZ0の退避優先順位が3位になり、反映済みのブロックの中で書き込み失敗回数が2番目に大きい(1回)ブロックZ2の退避優先順位が4位になる。
CPU13は、通常処理の実行中に揮発メモリ11から不揮発メモリ12への書き込み失敗が検出されるたびに、管理テーブルの書き込み失敗回数を更新する。また、CPU13は、通常処理の実行中に、揮発メモリ11のいずれかのブロックのデータが更新されると、データ更新されたブロックの反映状態を未反映(flag=1)に更新する。また、CPU13は、通常処理の実行中に、flagが1のブロックのデータ更新が不揮発メモリ12に反映された場合、そのブロックの反映状態(flag)を反映済み(0)に更新する。
CPU13は、書き込み失敗回数又は反映状態の更新を行うたびに、更新後の書き込み失敗回数及び反映状態に基づいて、新たな退避優先順位を決定し、管理テーブルに格納する。管理テーブルを利用することにより、CPU13は、退避処理の際に、管理テーブルに格納された退避優先順位に従ってデータを退避させるだけでよい。すなわち、退避処理の際に、CPU13は、揮発メモリ11に格納された書き込み失敗回数及び反映状態の読み出しや、退避優先順位の決定などを行わなくてもよい。この結果、退避処理に要する時間を短縮することができる。
次に、本実施形態に係る電子機器1の動作について説明する。図11は、本実施形態に係る電子機器1の動作の一例を示すフローチャートである。図11のステップS101〜S114は、第1実施形態(図7)と同様である。以下では、ステップS115〜S119について説明する。
本実施形態において、CPU13は、通常処理の実行中に、揮発メモリ11のデータが更新された場合(ステップS115のYES)、データを更新されたブロックの反映状態を未反映(flag=1)に更新する(ステップS116)。その後、処理はステップS104に進む。
また、本実施形態において、CPU13は、通常処理の実行中にシステム要求を通知された場合(ステップS104のYES)、システム要求により指定されたデータが、揮発メモリ11の各ブロックの全ての未反映データを含むか判定する(ステップS117)。
システム要求により指定されたデータが、揮発メモリ11のあるブロックの未反映データを全て含む場合、不揮発メモリ12のデータ更新により、揮発メモリ11の当該ブロックのデータ更新が、不揮発メモリ12に全て反映される。このため、CPU13は、システム要求により指定されたデータが、揮発メモリ11のあるブロックの未反映データを全て含む場合(ステップS117のYES)、当該ブロックの反映状態を反映済み(flag=0)に更新する(ステップS118)。
一方、システム要求により指定されたデータが、揮発メモリ11のあるブロックの未反映データを全ては含まない場合、不揮発メモリ12のデータ更新により、揮発メモリ11の当該ブロックのデータ更新が、不揮発メモリ12に全ては反映されない。このため、CPU13は、システム要求により指定されたデータが、揮発メモリ11のあるブロックの未反映データを全ては含まない場合(ステップS117のNO)、当該ブロックの反映状態を未反映(flag=1)に更新する(ステップS119)。
その後、処理はステップS107に進む。なお、ステップS117〜S119と、ステップS105,S106と、は順番が逆であってもよい。
以上説明した通り、本実施形態によれば、データ更新が未反映のブロックの退避優先順位が高くなるように、揮発メモリ11の各ブロックの退避優先順位が決定される。これにより、揮発メモリ11に格納された未反映データを優先的に不揮発メモリ12に退避させることができる。結果として、退避処理が間に合わないことにより未反映データが失われることを、抑制することができる。
(第3実施形態)
第3実施形態に係る電子機器1について、図12及び図13を参照して説明する。本実施形態では、揮発メモリ11の各ブロックの書き込み失敗回数及び重要度に基づいて、各ブロックの退避優先順位を決定する電子機器1について説明する。なお、本実施形態に係る電子機器1のハードウェア構成は第1実施形態と同様である。
揮発メモリ11に格納されるデータは、ブロックごとにその重要性が異なることがあり得る。このような場合には、重要性が高いデータを優先的に退避させることが好ましい。そこで、本実施形態では、重要性が高いデータを優先的に退避できるように、各ブロックの重要度に基づいて各ブロックの退避優先順位を決定する。
各ブロックの重要度は、各ブロックに格納されるデータの重要性を示す値である。重要度は、重要性に応じた値であってもよいし、重要か否かを示す2値の値であってもよい。重要度は、予め設定され、不揮発メモリ12に格納される。
本実施形態において、CPU13は、揮発メモリ11の各ブロックの重要度及び書き込み失敗回数に基づいて、揮発メモリ11の各ブロックの評価値を計算し、評価値が大きいブロックほど順位を高くなるように、各ブロックの退避優先順位を決定する。評価値は、例えば、重要度及び書き込み失敗回数の和や積であるが、これに限られない。重要度及び書き込み失敗回数は、重み係数により重み付けされてもよい。重み係数は任意に設定可能である。
図12は、本実施形態における管理テーブルの一例を示す図である。図12の例では、揮発メモリ11は、ブロックZ0〜Z3を備える。図12のsignifは、各ブロックが重要か否かを示す2値の重要度である。signif=1はそのブロックのデータが重要であることを示し、signif=0はそのブロックのデータが重要ではないことを示す。また、図12のscoreは、各ブロックの評価値である。図12の例では、評価値scoreは、score=20×signif+countにより計算される。20は、重要度signifの重み係数である。
図12において、ブロックZ0は、重要度signifが1、書き込み失敗回数countが5回であるため、評価値scoreは25(=20×1+5)である。ブロックZ1は、重要度signifが1、書き込み失敗回数countが2回であるため、評価値scoreは22(=20×1+2)である。ブロックZ2は、重要度signifが0、書き込み失敗回数countが1回であるため、評価値scoreは1(=20×0+1)である。ブロックZ3は、重要度signifが0、書き込み失敗回数countが8回であるため、評価値scoreは8(=20×0+8)である。
したがって、ブロックZ0〜Z3の退避優先順位rankは、評価値scoreが大きい順に、ブロックZ0が1位、ブロックZ1が2位、ブロックZ3が3位、ブロックZ2が4位となっている。
以上説明した通り、本実施形態によれば、重要度が高いブロックの順位が高くなるように、各ブロックの退避優先順位を決定することができる。これにより、重要性が高いデータを優先的に不揮発メモリ12に退避させることができる。
なお、本実施形態に係る退避優先順位の決定方法を、他の決定方法と併用することも可能である。例えば、データ更新の反映状態を併用する場合について考える。この場合、CPU13は、反映状態が未反映のブロックの順位が、反映状態が反映済みのブロックの順位より高くなるように、各ブロックの退避優先順位を決定し、未反映及び反映済みのブロックの中での退避優先順位を、評価値が高い順に決定すればよい。
また、反映状態に基づいて評価値を計算し、評価値が高い順に退避優先順位を決定することも可能である。図13は、このような方法により退避優先順位を決定された管理テーブルの一例を示す図である。図13の例では、評価値scoreは、score=20×signif+10×flag+countにより計算される。10は、反映状態flagの重み係数である。例えば、ブロックZ0は、重要度signifが1、反映状態flagが0、書き込み失敗回数countが5回であるため、評価値scoreは25(=20×1+10×0+5)である。図13の例では、ブロックZ0〜Z3の退避優先順位rankは、評価値scoreが大きい順に、ブロックZ0が1位、ブロックZ1が2位、ブロックZ3が3位、ブロックZ2が4位となっている。
(第4実施形態)
第4実施形態に係る電子機器1について、図14及び図15を参照して説明する。本実施形態では、揮発メモリ11の各ブロックの書き込み失敗回数及び連続性に基づいて、各ブロックの退避優先順位を決定する電子機器1について説明する。なお、本実施形態に係る電子機器1のハードウェア構成は第1実施形態と同様である。
CPU13が不揮発メモリ12にデータを書き込む場合、いずれの通信プロトコルを利用する場合でも、受信側(不揮発メモリ12)の反応待機処理や次の通信までの待機処理などのオーバヘッドが発生する。CPU13がデータを書き込む回数が増えるほど、このオーバヘッドが増大し、退避処理に要する時間が長くなる。逆に言うと、CPU13がデータを書き込む回数を減らすことにより、退避処理のオーバヘッドを減少させ、退避処理に要する時間を短くすることができる。
そこで、本実施形態では、CPU13は、不揮発メモリ12へのデータの書き込み回数が少なくなるように、退避先(不揮発メモリ12のブロック)のアドレスの連続性に基づいて、揮発メモリ11の各ブロックの退避優先順位を決定する。
図14は、本実施形態における退避優先順位の決定処理の一例を示すフローチャートである。図14のフローチャートは、図7のステップS112の内部処理に相当する。
まず、CPU13は、揮発メモリ11の各ブロックの仮退避優先順位を決定する(ステップS201)。仮退避優先順位は、上述の任意の決定方法を利用して決定することができる。例えば、仮退避優先順位は、書き込み失敗回数に基づいて決定されてもよいし、書き込み失敗回数及び反映状態に基づいて決定されてもよいし、評価値に基づいて決定されてもよい。CPU13は、仮退避優先順位の決定後、iを1に初期化する(ステップS202)。
次に、CPU13は、仮退避優先順位がi位のブロックの、仮退避優先順位が下限順位Rmin位以上の連続ブロックがあるか判定する(ステップS203)。iは、処理対象のブロックの仮退避優先順位である。下限順位Rminは、退避処理を実行する必要性が高いブロックの仮退避優先順位の下限値として、予め設定された値である。本実施形態において、連続ブロックは、下限順位Rmin以上の仮退避優先順位を有するブロックの中から探索される。
i位のブロックの連続ブロックとは、i位のブロックのデータと同時に、そのブロックのデータを不揮発メモリ12に書き込み可能なブロックのことである。i位のブロックの対応ブロックと、連続ブロックの対応ブロックと、は不揮発メモリ12上でアドレスが連続する。
CPU13は、仮退避優先順位がRmin位以上の連続ブロックがある場合(ステップS203のYES)、その連続ブロックの仮退避優先順位をi位に変更し(ステップS204)、他のブロックの仮退避優先順位を修正する(ステップS205)。すなわち、CPU13は、連続ブロックより順位が低い他の全てのブロックの仮退避優先順位を繰り上げる。
CPU13は、連続ブロックの探索範囲が決定処理の過程で変化しないように、基準順位Rminを1小さくする(ステップS206)。その後、処理はステップS203に戻る。以降、CPU13は、i位のブロックの連続ブロックがなくなるまで、ステップS203〜S206の処理を繰り返す。
CPU13は、仮退避優先順位がRmin位以上の連続ブロックがない場合(ステップS203のNO)、iを1大きくし(ステップS207)、iとRminとを比較する(ステップS208)。
i<Rminの場合(ステップS208のNO)、処理はステップS203に戻る。以降、CPU13は、i≧Rminとなるまで、ステップS203〜S208の処理を繰り返す。
一方、i≧Rminの場合(ステップS208のYES)、CPU13は、決定処理を終了する。本実施形態では、決定処理の終了時の仮退避優先順位が、退避優先順位となる。
図15は、本実施形態における管理テーブルの一例を示す図である。図15の例では、揮発メモリ11は、ブロックZ0〜Z5を備える。ブロックZ0〜Z5は、不揮発メモリ12のブロックC0〜C5とそれぞれ対応する。
図15(A)は、ステップS201において決定される仮退避優先順位を示す図である。図15(A)の例では、仮退避優先順位rankは評価値scoreが高い順に決定されている。評価値scoreは、反映状態flag及び書き込み失敗回数countに基づいて計算されている(score=10×flag+count)。仮退避優先順位は、ブロックZ1が1位、ブロックZ5が2位、ブロックZ4が3位、ブロックZ2が4位、ブロックZ0が5位、ブロックZ3が6位である。また、下限順位Rminは、4位に設定されている。すなわち、仮退避優先順位が4位以上のブロックZ1,Z5,Z4,Z2が、連続ブロックの探索範囲(退避処理を実行する必要性が高いブロック)に相当する。
図15(B)は、図15(A)の仮退避優先順位に基づいて、図14の決定処理により決定される退避優先順位を示す図である。図15(B)の退避優先順位は、以下の手順で決定される。
まず、CPU13は、iを1に設定し(ステップS202)、仮退避優先順位が4位以上のブロックの中から、仮退避優先順位が1位であるブロックZ1の連続ブロックを探索する(ステップS203)。
揮発メモリ11のブロックZ1の対応ブロックは、不揮発メモリ12のブロックC1である。ここで、不揮発メモリ12のブロックC0〜C5のアドレスが連続しているものとする。このとき、ブロックC1と、ブロックC0,C2と、のアドレスは不揮発メモリ12上で連続するため、ブロックZ2がブロックZ1の連続ブロックとして発見される(ステップS203のYES)。
したがって、CPU13は、ブロックZ2の仮退避優先順位を1位に変更し(ステップS204)、ブロックZ2より仮退避優先順位が低かったブロックZ0,Z3の仮優先順位を繰り上げ(ステップS205)、Rminを3位に変更する(ステップS206)。仮退避優先順位が3位以上のブロックに、ブロックZ1の連続ブロックは他に存在しないため(ステップS203のNO)、CPU13は、iを1増加させる(ステップS207)。このとき、i=2、Rmin=3であるため(ステップS208のNO)、CPU13は、仮退避優先順位が2位であるブロックZ5の連続ブロックを、仮退避優先順位が3位以上のブロックの中から探索する(ステップS203)。
揮発メモリ11のブロックZ5の対応ブロックは、不揮発メモリ12のブロックC5である。ブロックC5と、ブロックC4と、はアドレスが不揮発メモリ12上で連続するため、ブロックZ4がブロックZ5の連続ブロックとして発見される(ステップS203のYES)。
したがって、CPU13は、ブロックZ4の仮退避優先順位を2位に変更し(ステップS204)、ブロックZ4より仮退避優先順位が低かったブロックZ0,Z3の仮優先順位を繰り上げ(ステップS205)、Rminを2位に変更する(ステップS206)。仮退避優先順位が2位以上のブロックに、ブロックZ5の連続ブロックは他に存在しないため(ステップS203のNO)、CPU13は、iを1増加させる(ステップS207)。このとき、i=3、Rmin=2であるため(ステップS208のYES)、CPU13は、決定処理を終了する。
以上の処理により、図15(B)の退避優先順位が決定される。図15からわかるように、図15(B)の退避優先順位では、対応ブロックが連続する揮発メモリ11のブロックが、同一順位になっていることがわかる。
本実施形態では、CPU13は、こうして決定された退避優先順位に従って、揮発メモリ11の各ブロックのデータを、不揮発メモリ12に退避させる。この際、CPU13は、揮発メモリ11の同一順位のブロックのデータをまとめて読出し、読み出したデータを、不揮発メモリ12にまとめて書き込む。これにより、本実施形態によれば、CPU13がデータを書き込む回数を減らし、退避処理のオーバヘッドを減少させ、退避処理に要する時間を短くすることができる。
例えば、図15の例では、ブロックZ1,Z2のデータが、ブロックC1,C2にまとめて書き込まれる。また、ブロックZ4,Z5のデータが、ブロックC4,C5にまとめて書き込まれる。これにより、CPU13が揮発メモリ11から不揮発メモリ12にデータを書き込む回数が、2回削減され、退避処理に要する時間がオーバヘッド2回分短くなる。
なお、以上の説明では、退避処理を実行する必要性が高いブロックは、下限順位Rminにより規定されたが、予め設定された評価値又は書き込み失敗回数の下限値により規定されてもよい。この場合、下限値以上の評価値又は書き込み失敗回数を有するブロックが、退避処理を実行する必要性が高いブロックとなる。
(第5実施形態)
第5実施形態に係る電子機器1について、図16及び図17を参照して説明する。本実施形態では、揮発メモリ11の各ブロックのデータを、通常処理の実行中に不揮発メモリ12に事前に退避させる電子機器1について説明する。なお、本実施形態に係る電子機器1のハードウェア構成は第1実施形態と同様である。
上述の通り、退避処理を実行可能な時間は限られているため、データを退避させるブロックが多すぎる場合、退避処理が間に合わない恐れがある。そこで、本実施形態では、退避処理を実行する必要性が高いブロックの数が所定数以下となるように、通常処理の実行中に、揮発メモリ11のデータを事前退避させる。
図16は、本実施形態における事前退避処理の一例を示すフローチャートである。図16の事前退避処理は、通常処理の実行中に、管理テーブルが更新された場合に実行される。以下では、退避優先順位が評価値に基づいて決定される場合について説明する。
通常処理の実行中に管理テーブルが更新されると、図16に示すように、CPU13は、評価値が下限評価値s以上のブロック数が、上限ブロック数T以下であるか判定する(ステップS301)。下限評価値sは、退避処理を実行する必要性が高いブロックの退避優先順位の下限値として、予め設定された値である。上限ブロック数Tは、退避処理を実行する必要性が高いブロックの数の上限値として予め設定された値である。
評価値が下限評価値s以上のブロック数が上限ブロック数T以下である場合(ステップS301のNO)、事前退避処理は終了する。
一方、評価値が下限評価値s以上のブロック数が上限ブロック数Tより多い場合(ステップS301のYES)、CPU13は、評価値が最大のブロックの全データを、対応ブロックに書き込む(退避させる)(ステップ302)。
その後、CPU13は、データを退避させたブロックの書き込み失敗回数や評価値を更新し(ステップS303)、各ブロックの退避優先順位を更新する(ステップS304)。その後、処理はステップS301に戻る。以降、CPU13は、評価値が下限評価値s以上のブロック数が上限ブロック数T以下になるまで、ステップS301〜S304の処理を繰り返す。
図17は、本実施形態における管理テーブルの一例を示す図である。図17の例では、揮発メモリ11は、ブロックZ0〜Z5を備える。また、下限評価値sは10であり、上限ブロック数は3である。
図17(A)は、通常処理の実行中に更新された管理テーブルの一例を示す図である。図17(A)の例では、下限評価値s(=10)以上の評価値を有するブロックが4個であり、上限ブロック数T(=3)より多い。
図17(B)は、事前退避処理の実行後の管理テーブルの一例を示す図である。図17(B)の管理テーブルは、図17(A)の管理テーブルに基づいて、以下の手順で生成される。
上述の通り、図17(A)の例では、下限評価値s(=10)以上の評価値を有するブロック数(4個)が、上限ブロック数T(=3)より多いため(ステップS301のNO)、CPU13は、事前退避処理を実行する。まず、CPU13は、評価値が最大のブロックZ1のデータを対応ブロック(ブロックC1)に退避させる(ステップS302)。次に、CPU13は、ブロックZ1の評価値score、反映状態flag、及び書き込み失敗回数countを0に更新し(ステップS303)、各ブロックZ0〜Z5の退避優先順位を更新する(ステップS304)。
これにより、下限評価値s以上の評価値を有するブロックの数は上限ブロック数T以下になるため(ステップS301のYES)、CPU13は、事前退避処理を終了する。この結果、事前退避処理により、図17(B)の管理テーブルが生成される。
以上説明した通り、本実施形態によれば、通常処理の実行中に事前退避処理を実行することにより、退避処理を実行する必要性が高いブロックの数を、上限ブロック数T以下にすることができる。これにより、退避処理を実行する必要性が高いブロックを、限られた時間内に確実に不揮発メモリ12に退避させることができる。
なお、本実施形態において、評価値の代わりに、書き込み失敗回数が用いられてもよい。この場合、CPU13は、下限書き込み失敗回数c以上の書き込み失敗回数を有するブロック数が上限ブロック数Tより多い場合に、書き込み失敗回数が最大のブロックに対して、事前退避処理を実行すればよい。
また、CPU13は、評価値が最大のブロックに限らず、評価値が下限評価値s以上の任意のブロックに対して、事前退避処理を実行してもよい。例えば、CPU13は、評価値が下限評価値s以上の全ブロックに対して事前退避処理を実行することも可能である。
(第6実施形態)
第6実施形態に係る電子機器1について、図18〜図21を参照して説明する。本実施形態では、不揮発メモリ12を複数備える電子機器1について説明する。図18は、本実施形態に係る電子機器1のハードウェア構成の一例を示す図である。図18の電子機器1は、不揮発メモリ12A,12Bを備える。他の構成は、第1実施形態(図1)と同様である。
不揮発メモリ12A,12Bは、それぞれ1つ又は複数のブロックを設けられている。不揮発メモリ12A,12Bの各ブロックは、揮発メモリ11の各ブロックに対応する。
図19は、本実施形態における揮発メモリ11及び不揮発メモリ12A,12Bの一例を示す図である。図19の例では、揮発メモリ11はブロックX0〜X2,Y0〜Y2を備え、不揮発メモリ12AはブロックA0〜A2を備え、不揮発メモリ12BはブロックB0〜B2を備える。ブロックX0〜X2はブロックA0〜A2にそれぞれ対応し、ブロックY0〜Y2はブロックB0〜B2にそれぞれ対応する。
図18の例では、不揮発メモリ12A,12Bは、CPU13の別々のポートに接続されているが、CPU13の同一のポートに接続されてもよい。また、電子機器1は、3つ以上の不揮発メモリ12を備えてもよい。
本実施形態において、CPU13が不揮発メモリ12A,12Bへの書き込みを並列して実行可能な場合、管理テーブルは、不揮発メモリ12A,12Bに対してそれぞれ設けられる。図20は、CPU13が並列して書き込みを実行可能な場合の管理テーブルの一例を示す図である。図20の例では、不揮発メモリ12A用の管理テーブルと、不揮発メモリ12B用の管理テーブルと、がそれぞれ設けられている。揮発メモリ11の各ブロックは、管理テーブル(対応ブロックの不揮発メモリ)ごとに、退避優先順位rankを決定されている。
この場合、CPU13は、不揮発メモリ12A用の管理テーブルにおける退避優先順位に従って、ブロックX0〜X2のデータを不揮発メモリ12Aに退避させる。また、CPU13は、不揮発メモリ12B用の管理テーブルにおける退避優先順位に従って、ブロックY0〜Y2のデータを不揮発メモリ12Bに退避させる。CPU13は、不揮発メモリ12A,12Bへの退避を並行して実行する。
一方、CPU13が不揮発メモリ12A,12Bへの書き込みを並列して実行できない場合、管理テーブルは、1つ設けられる。図21は、CPU13が並列して書き込みを実行できない場合の管理テーブルの一例を示す図である。図21の管理テーブルでは、揮発メモリ11の全ブロックの退避優先順位rankが決定されている。
この場合、CPU13は、管理テーブルにおける退避優先順位に従って、ブロックX0〜X2,Y0〜Y2のデータを、不揮発メモリ12A,12Bに退避させる。例えば、図21の例では、CPU13は、揮発メモリ11のブロックX2のデータを、不揮発メモリ12AのブロックA2に退避させた後、揮発メモリ11のブロックY0のデータを、不揮発メモリ12BのブロックB0に退避させる。
このように、電子機器1が複数の不揮発メモリ12を備える場合であっても、図20及び図21に示すように、揮発メモリ11の各ブロックの書き込み失敗回数に基づいて退避優先順位を決定することができる。したがって、退避処理によって各不揮発メモリ12に存在する誤ライトデータを訂正することができる。なお、本実施形態に係る電子機器1は、上述の各実施形態で説明した、いずれの退避優先順位の決定方法も利用可能である。
(第7実施形態)
第7実施形態に係る電子機器1について、図22及び図23を参照して説明する。本実施形態では、不揮発メモリ12への書き込み時間に基づいて、退避優先順位を決定する方法について説明する。なお、本実施形態に係る電子機器1の構成は、第6実施形態(図18)と同様である。
電子機器1が複数の不揮発メモリ12を備える場合、各不揮発メモリ12へのデータの書き込み時間が異なることがあり得る。各不揮発メモリ12の書き込み時間が異なる場合、同じ時間に退避可能なブロック数が、不揮発メモリ12毎に相違することになる。例えば、不揮発メモリ12Aへの1回の書き込み時間が1ms、不揮発メモリ12Bへの1回の書き込み時間が100μsである場合、同じ時間に退避可能なブロック数が、不揮発メモリ12Bは不揮発メモリ12Aの10倍となる。このような、退避可能なブロック数の相違は、CPU13が複数の不揮発メモリ12に対して並行して書き込みを実行できない場合に問題となる。そこで、本実施形態では、不揮発メモリ12毎の書き込み時間に基づいて、退避優先順位を決定する。
図22は、本実施形態における揮発メモリ11及び不揮発メモリ12A,12Bの一例を示す図である。図22の例では、揮発メモリ11はブロックX0〜X2,Y0〜Y2を備え、不揮発メモリ12AはブロックA0〜A2を備え、不揮発メモリ12BはブロックB0〜B2を備える。ブロックX0〜X2はブロックA0〜A2にそれぞれ対応し、ブロックY0〜Y2はブロックB0〜B2にそれぞれ対応する。また、不揮発メモリ12A(ブロックA0〜A2)への1回の書き込み時間は1msであり、不揮発メモリ12B(ブロックB0〜B2)への1回の書き込み時間は100μsである。本実施形態では、これらの書き込み時間は、予め設定されているものとする。
また、揮発メモリ11の各ブロックに設定されたspeedは、各ブロックから不揮発メモリ12A,12Bへの書き込み速度であり、不揮発メモリ12A,12Bの書き込み時間に応じて計算させる。図22の例では、揮発メモリ11の各ブロックの書き込み速度speedは、speed=1−(対応ブロックへの書き込み時間/全不揮発メモリの書き込み時間の合計値)により計算されている。例えば、ブロックX0の書き込み速度speedは、speed=1−1ms/(1ms+100μs)=1/11≒0.09である。なお、書き込み速度speedの計算方法はこれに限られない。
本実施形態において、揮発メモリ11の各ブロックは、書き込み速度speedをそれぞれ計算され、管理テーブルに格納される。CPU13は、管理テーブルに格納された書き込み速度に基づいて、評価値を計算し、評価値が大きいほど順位が高くなるように、揮発メモリ11の各ブロックの退避優先順位を決定する。
図23は、本実施形態における管理テーブルの一例を示す図である。図23の例では、評価値scoreは、score=(1+speed)×(10×flag+count)により計算される。1は、speedの影響を調整するための係数であり、任意に設定可能である。例えば、ブロックY0は、書き込み速度speedが0.91、反映状態flagが1、書き込み失敗回数countが4回であるため、評価値scoreは26.73(=(1+0.91)×(10×1+4))である。
以上説明した通り、本実施形態では、評価値は、書き込み速度が早い(書き込み時間が短い)ほど、大きくなるように計算される。すなわち、揮発メモリ11の各ブロックの退避優先順位は、対応ブロックへの書き込み時間が短いほど順位が高くなるように決定される。これにより、本実施形態によれば、同じ時間に退避可能なブロックを増加させることができる。
なお、本実施形態において、評価値の計算方法は、上記の例に限られない。評価値は、書き込み時間及び書き込み失敗回数を利用した任意の方法で計算することができる。
なお、上記実施形態に挙げた構成等に、その他の要素との組み合わせなど、ここで示した構成に本発明が限定されるものではない。これらの点に関しては、本発明の趣旨を逸脱しない範囲で変更することが可能であり、その応用形態に応じて適切に定めることができる。