(57)【特許請求の範囲】
【請求項１】
外部電源から電力が供給されている場合、上記外部電源から供給された電力により動作し、上記外部電源から電力が供給されていない場合、蓄電池から供給された電力により動作する記憶装置において、
データを記憶する不揮発記憶部と、データを記憶する揮発記憶部と、書込み制御部と、退避制御部とを有し、
上記書込み制御部は、指定したデータを上記不揮発記憶部に記憶させることを指示する書込み指示を上位装置から受けた場合、上記書込み指示によって指定されたデータを上記揮発記憶部に記憶させ、
上記退避制御部は、上記書込み制御部が上記揮発記憶部に記憶させたデータのうち、上記不揮発記憶部に記憶させていないデータの量が、上記蓄電池に充電されている電力の残量によって定まる閾値より多い場合、上記書込み制御部が上記揮発記憶部に記憶させたデータであって上記不揮発記憶部に記憶させていないデータのうち少なくとも一部のデータを、上記不揮発記憶部に記憶させ、
上記退避制御部は、上記外部電源から電力が供給されていない場合、上記書込み制御部が上記揮発記憶部に記憶させたデータのうち上記不揮発記憶部に記憶させていないデータの量が多いか否かを判定するための上記閾値として、上記外部電源から電力が供給されている場合の閾値よりも小さい閾値を使う
ことを特徴とする記憶装置。
【請求項２】
上記退避制御部は、上記外部電源から電力が供給されていない場合、上記書込み制御部が上記揮発記憶部に記憶させたデータのうち上記不揮発記憶部に記憶させていないデータの量が多いか否かを判定するための上記閾値として、０を使う
ことを特徴とする請求項１に記載の記憶装置。
【請求項３】
上記書込み制御部は、上記蓄電池に充電されている電力の残量が所定の閾値より少ない場合、上記書込み指示によって指定されたデータを上記不揮発記憶部に記憶させる
ことを特徴とする請求項１または２に記載の記憶装置。
【請求項４】
上記記憶装置は、更に、電源装置を有し、
上記電源装置は、外部電源から電力が供給されている場合に、上記蓄電池を充電し、上記外部電源から電力が供給されていない場合に、上記蓄電池を放電して、上記記憶装置を動作させる電力を得る
ことを特徴とする請求項１から３のいずれか１項に記載の記憶装置。
【請求項５】
データを記憶する不揮発記憶部と、データを記憶する揮発記憶部とを有し、外部電源から電力が供給されている場合、上記外部電源から供給された電力により動作し、上記外部電源から電力が供給されていない場合、蓄電池から供給された電力により動作する記憶装置を使った記憶方法において、
指定したデータを上記不揮発記憶部に記憶させることを指示する書込み指示を上位装置から受けた場合に、上記書込み指示によって指定されたデータを上記揮発記憶部に記憶させ、
上記書込み指示に基づいて上記揮発記憶部に記憶させたデータのうち上記不揮発記憶部に記憶させていないデータの量が、上記蓄電池に充電されている電力の残量によって定まる閾値より多いか否かを判定し、
上記書込み指示に基づいて上記揮発記憶部に記憶させたデータのうち上記不揮発記憶部に記憶させていないデータの量が上記閾値より多いと判定した場合、上記書込み指示に基づいて上記揮発記憶部に記憶させたデータであって上記不揮発記憶部に記憶させていないデータのうち少なくともいずれかのデータを、上記不揮発記憶部に記憶させ、
上記外部電源から電力が供給されていない場合、上記揮発記憶部に記憶させたデータのうち上記不揮発記憶部に記憶させていないデータの量が多いか否かを判定するための上記閾値として、上記外部電源から電力が供給されている場合の閾値よりも小さい閾値を使うことを特徴とする記憶方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、外部記憶装置などの記憶装置に関する。
【背景技術】
【０００２】
半導体メモリや磁気ディスクなどの不揮発性の記憶部を用いた記憶装置において、アクセス速度の向上などを目的として、キャッシュメモリなどの揮発性の記憶部が設けられる場合がある。
例えば、不揮発性の記憶部から読み出したデータを、揮発性の記憶部に記憶しておき、同じデータに対する読出しがあった場合、揮発性の記憶部からデータを読み出す。
あるいは、不揮発性の記憶部に書き込むデータを、不揮発性の記憶部にすぐに書き込むのではなく、揮発性の記憶部に一時的に記憶しておく。記憶装置は、アクセスのないアイドル状態になったとき、揮発性の記憶部に記憶しておいたデータを、不揮発性の記憶部に書き込む。
揮発性の記憶部は、停電などによって電源を失うと、記憶しているデータが消えてしまう場合がある。このため、停電時のバックアップ用のバッテリなどを設け、バッテリからの電源がある間に、不揮発性の記憶部に書き込まなければならないデータの書き込みなどの処理をする。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平９−３３０２７７号公報
【特許文献２】特開２０１０−１５２７４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、停電が頻発するなどしてバッテリが十分に充電されてない場合や、経年劣化などによってバッテリの容量が少なくなった場合は、バッテリからの電源がある間に、必要な処理を終えることができず、その結果として、データが失われる可能性がある。
この発明は、例えば、バッテリなどの蓄電池に蓄積された電力が十分でない場合でも、データが失われるのを防ぎ、信頼性を向上させることを目的とする。
【課題を解決するための手段】
【０００５】
この発明にかかる記憶装置は、
蓄電池から得た電力により動作する記憶装置において、
データを記憶する不揮発記憶部と、データを記憶する揮発記憶部と、書込み制御部と、退避制御部とを有し、
上記書込み制御部は、指定したデータを上記不揮発記憶部に記憶させることを指示する書込み指示を上位装置から受けた場合、上記書込み指示によって指定されたデータを上記揮発記憶部に記憶させ、
上記退避制御部は、上記書込み制御部が上記揮発記憶部に記憶させたデータのうち、上記不揮発記憶部に記憶させていないデータの量が、上記蓄電池に充電されている電力の残量によって定まる閾値より多い場合、上記書込み制御部が上記揮発記憶部に記憶させたデータであって上記不揮発記憶部に記憶させていないデータのうち少なくとも一部のデータを、上記不揮発記憶部に記憶させることを特徴とする。
【発明の効果】
【０００６】
この発明にかかる記憶装置によれば、例えば、バッテリなどの蓄電池に蓄積された電力が十分でない場合でも、データが失われるのを防ぎ、信頼性を向上させることができる。
【図面の簡単な説明】
【０００７】
【図１】実施の形態１における記憶装置１００の構成の一例を示す構成図。
【図２】実施の形態１における記憶装置１００の動作の流れの一例を示すフロー図。
【図３】実施の形態１における読出し処理Ｓ６０の流れの一例を示すフロー図。
【図４】実施の形態１における書込み処理Ｓ７０の流れの一例を示すフロー図。
【図５】実施の形態１における平常退避処理Ｓ８０の流れの一例を示すフロー図。
【図６】実施の形態１における停電退避処理Ｓ９０の流れの一例を示すフロー図。
【図７】実施の形態１におけるバッテリユニット１１５に蓄積された電力の残量と、フラッシュメモリ１０２に書き戻すべきページ数との関係の一例を示す図。
【図８】実施の形態２における書込み処理Ｓ７０の流れの一例を示すフロー図。
【図９】実施の形態３における記憶装置１００の動作の流れの一例を示すフロー図。
【図１０】実施の形態３における停電退避処理Ｓ９０の流れの一例を示すフロー図。
【図１１】実施の形態３におけるバッテリユニット１１５に蓄積された電力の残量と、フラッシュメモリ１０２に書き戻すべきページ数との関係の一例を示す図。
【図１２】実施の形態４における記憶装置１００の動作の流れの一例を示すフロー図。
【発明を実施するための形態】
【０００８】
実施の形態１．
実施の形態１について、図１〜図７を用いて説明する。
【０００９】
図１は、この実施の形態における記憶装置１００の構成の一例を示す構成図である。
【００１０】
記憶装置１００は、データを記憶する外部記憶装置である。記憶装置１００は、例えば、ホストコンピュータなどの上位装置１０からの書込み指示にしたがって、上位装置１０から送られたデータを、指定されたアドレスに記憶する。あるいは、上位装置１０からの読出し指示にしたがって、指定されたアドレスに記憶したデータを読み出して、上位装置１０に対して通知する。
記憶装置１００は、例えば商用電源などの外部電源２０から供給される電力によって動作する。
【００１１】
記憶装置１００は、例えば、フラッシュメモリ１０２と、キャッシュメモリ１０３と、アクセス制御回路１０８と、電源装置１１０とを有する。
【００１２】
フラッシュメモリ１０２は、不揮発性の半導体メモリである。フラッシュメモリ１０２は、不揮発記憶部の一例である。フラッシュメモリ１０２は、複数のデータを記憶する。フラッシュメモリ１０２がデータを記憶する領域には、それぞれ、その領域を識別するアドレスが割り振られている。また、フラッシュメモリ１０２がデータを記憶する領域は、複数のページに分けられている。
フラッシュメモリ１０２は、アクセス制御回路１０８とデータバスなどによって接続されている。フラッシュメモリ１０２は、アクセス制御回路１０８からの指示にしたがって、指定されたページのデータを読み出し、あるいは、指定されたページにデータを書き込むことができる。フラッシュメモリ１０２からのデータ読出しや、フラッシュメモリ１０２へのデータ書込みは、ページ単位で行われる。
【００１３】
キャッシュメモリ１０３は、揮発性の半導体メモリである。キャッシュメモリ１０３は、揮発記憶部の一例である。キャッシュメモリ１０３は、複数のデータを記憶する。キャッシュメモリ１０３がデータを記憶する領域の大きさは、フラッシュメモリ１０２よりも小さい。すなわち、キャッシュメモリ１０３は、フラッシュメモリ１０２よりも少ない数のデータを記憶する。
キャッシュメモリ１０３は、アクセス制御回路１０８とデータバスなどによって接続されている。キャッシュメモリ１０３は、アクセス制御回路１０８からの指示にしたがって、指定されたアドレスのデータを読み出し、あるいは、指定されたアドレスにデータを書き込むことができる。キャッシュメモリ１０３が記憶しているデータを読み出すのにかかる時間は、フラッシュメモリ１０２が記憶しているデータを読み出すのにかかる時間より短い。また、キャッシュメモリ１０３にデータを記憶させるのにかかる時間は、フラッシュメモリ１０２にデータを記憶させるのにかかる時間よりも短い。
【００１４】
アクセス制御回路１０８は、フラッシュメモリ１０２やキャッシュメモリ１０３が記憶しているデータを管理する。アクセス制御回路１０８は、上位装置１０とデータバスなどによって接続されている。アクセス制御回路１０８は、上位装置１０からの指示（アクセス要求）にしたがって、データを読み出したり、データを書き込んだりする。アクセス制御回路１０８は、読出し制御部及び書込み制御部及び退避制御部の一例である。
例えば、上位装置１０から読出し指示（リード）を受けた場合、アクセス制御回路１０８は、フラッシュメモリ１０２からデータを読み出して、上位装置１０に対して通知する。アクセス制御回路１０８は、フラッシュメモリ１０２から読み出したデータをキャッシュメモリ１０３に記憶させる。上位装置１０から同じアドレスのデータに対する読出し指示を受けた場合、アクセス制御回路１０８は、フラッシュメモリ１０２ではなく、キャッシュメモリ１０３からデータを読み出して、上位装置１０に対して通知する。これにより、データの読出しにかかる時間を短縮する。
あるいは、上位装置１０から書込み指示（ライト）を受けた場合、アクセス制御回路１０８は、指定されたデータをフラッシュメモリ１０２ではなくキャッシュメモリ１０３に記憶させる。これにより、データの書込みにかかる時間を短縮する。アクセス制御回路１０８は、その後の適切な時期に、キャッシュメモリ１０３に記憶させたデータを読み出して、フラッシュメモリ１０２に記憶させる。
【００１５】
電源装置１１０は、フラッシュメモリ１０２やキャッシュメモリ１０３やアクセス制御回路１０８に対して、動作に必要な電力を供給する。
電源装置１１０は、外部電源２０から供給された電力を変換して、アクセス制御回路１０８などに対して供給する。例えば、外部電源２０から供給された交流電力を、直流電力に変換する。
【００１６】
電源装置１１０は、例えば、電源回路１１４と、バッテリユニット１１５と、スイッチ回路１１６と、電源残量チェック回路１１７とを有する。
【００１７】
電源回路１１４は、外部電源２０から供給された電力を、アクセス制御回路１０８などに対して供給する電力に変換する。電源回路１１４は、外部電源２０と給電ラインなどによって接続されている。電源回路１１４は、電力変換回路の一例である。
【００１８】
バッテリユニット１１５は、外部電源２０から供給された電力を蓄積する。バッテリユニット１１５は、外部電源２０と給電ラインなどによって接続されている。バッテリユニット１１５は、蓄電池の一例である。外部電源２０からの電力供給が停止すると、バッテリユニット１１５は、蓄積した電力を放電して、アクセス制御回路１０８などに対して供給する電力を出力する。
【００１９】
スイッチ回路１１６は、外部電源２０から電力が供給されているか否かに基づいて、アクセス制御回路１０８などに対して供給する電力の供給元を切り換える。スイッチ回路１１６は、電源回路１１４及びバッテリユニット１１５と給電ラインなどによって接続されている。
外部電源２０から電力が供給されている場合には、電源回路１１４が出力した電力をアクセス制御回路１０８などに対して供給し、外部電源２０から電力が供給されていない場合には、バッテリユニット１１５が出力した電力をアクセス制御回路１０８などに対して供給する。スイッチ回路１１６は、フラッシュメモリ１０２、キャッシュメモリ１０３、アクセス制御回路１０８などとも給電ラインなどによって接続されている。
更に、スイッチ回路１１６は、外部電源２０から電力が供給されているか否か表わす信号（以下「供給元信号」と呼ぶ。）を出力する。スイッチ回路１１６は、供給元検出部の一例である。スイッチ回路１１６は、アクセス制御回路１０８と信号線などによって接続されている。スイッチ回路１１６が出力した供給元信号は、信号線などを介して、アクセス制御回路１０８に伝達される。
【００２０】
電源残量チェック回路１１７は、バッテリユニット１１５に蓄積されている電力の残量を検出する。電源残量チェック回路１１７は、電力残量検出部の一例である。電源残量チェック回路１１７は、検出した残量を表わす信号（以下「電力残量信号」と呼ぶ。）を出力する。電源残量チェック回路１１７は、アクセス制御回路１０８と信号線などによって接続されている。電源残量チェック回路１１７が出力した電力残量信号は、信号線などを介して、アクセス制御回路１０８に伝達される。
【００２１】
停電などにより外部電源２０からの電力供給が途絶えた場合、電源装置１１０は、バッテリユニット１１５に蓄積した電力を使って、ある程度の時間、アクセス制御回路１０８などに対する電力の供給を続ける。キャッシュメモリ１０３は、揮発性であるため、電源を失うと記憶しているデータが消えてしまう。電源装置１１０からの電力供給が続いている間に、アクセス制御回路１０８は、キャッシュメモリ１０３に記憶させただけで、フラッシュメモリ１０２にまだ記憶させていないデータを、フラッシュメモリ１０２に記憶させる。キャッシュメモリ１０３は、不揮発性であるため、電源を失っても記憶しているデータは消えない。これにより、データの損失を防ぐ。
【００２２】
ただし、バッテリユニット１１５にまだ十分な電力が蓄積されていない場合、キャッシュメモリ１０３に記憶させただけでフラッシュメモリ１０２にまだ記憶させていない（ライトデータ属性の）データの数（カウント）が多いと、すべてのデータをフラッシュメモリ１０２に記憶させ終わる前に、バッテリユニット１１５に蓄積された電力を使い果たす可能性がある。
これを防ぐため、アクセス制御回路１０８は、あらかじめ、電源残量チェック回路１１７が検出した電力残量に基づいて、キャッシュメモリ１０３に記憶させただけでフラッシュメモリ１０２にまだ記憶させていないデータの量の上限（閾値）を定める。キャッシュメモリ１０３に記憶させただけでフラッシュメモリ１０２にまだ記憶させていないデータの量が上限を超えた場合、アクセス制御回路１０８は、キャッシュメモリ１０３に記憶させただけでフラッシュメモリ１０２にまだ記憶させていないデータのうち少なくとも一部をフラッシュメモリ１０２に記憶させ、キャッシュメモリ１０３に記憶させただけでフラッシュメモリ１０２にまだ記憶させていないデータの量を減らす。
これにより、外部電源２０からの電力供給が途絶えた時点で、バッテリユニット１１５に蓄積されている電力で、キャッシュメモリ１０３に記憶させただけでフラッシュメモリ１０２にまだ記憶させていないすべてのデータを、フラッシュメモリ１０２に記憶させることができる。
このため、バッテリユニット１１５にまだ十分な電力が蓄積されていない状態で、外部電源２０からの電力供給が停止した場合でも、データの損失を防ぐことができる。
【００２３】
図２は、この実施の形態における記憶装置１００の動作の流れの一例を示すフロー図である。
【００２４】
記憶装置１００は、例えば、供給元判定工程Ｓ５１と、指示受付工程Ｓ５２と、読出し処理Ｓ６０と、書込み処理Ｓ７０と、平常退避処理Ｓ８０と、停電退避処理Ｓ９０と、復旧待ち工程Ｓ５３とを実行する。
【００２５】
供給元判定工程Ｓ５１において、アクセス制御回路１０８（供給元取得部）は、スイッチ回路１１６が出力した供給元信号に基づいて、外部電源２０から電力が供給されているか否かを判定する。
外部電源２０から電力が供給されていると判定した場合、アクセス制御回路１０８は、指示受付工程Ｓ５２へ処理を進める。
外部電源２０からの電力供給が停止していて、内部の電源であるバッテリユニット１１５から電力が供給されていると判定した場合、アクセス制御回路１０８は、停電退避処理Ｓ９０へ処理を進める。
【００２６】
指示受付工程Ｓ５２において、アクセス制御回路１０８は、上位装置１０からの指示を受け付ける。
上位装置１０から読出し指示を受けた場合、アクセス制御回路１０８は、読出し処理Ｓ６０へ処理を進める。
上位装置１０から書込み指示を受けた場合、アクセス制御回路１０８は、書込み処理Ｓ７０へ処理を進める。
上位装置１０から読出し指示も書き込み指示も受けず、アイドル状態である場合、アクセス制御回路１０８は、平常退避処理Ｓ８０へ処理を進める。
【００２７】
読出し処理Ｓ６０において、アクセス制御回路１０８（読出し制御部）は、読出し指示によって指定されたデータをフラッシュメモリ１０２やキャッシュメモリ１０３から読み出して、上位装置１０に対して通知する。
アクセス制御回路１０８は、供給元判定工程Ｓ５１に処理を戻す。
【００２８】
書込み処理Ｓ７０において、アクセス制御回路１０８（書込み制御部）は、書込み指示によって指定されたデータをフラッシュメモリ１０２やキャッシュメモリ１０３に記憶させる。
アクセス制御回路１０８は、供給元判定工程Ｓ５１に処理を戻す。
【００２９】
平常退避処理Ｓ８０において、アクセス制御回路１０８（退避制御部）は、キャッシュメモリ１０３に記憶させただけでフラッシュメモリ１０２にまだ記憶させていないデータを、フラッシュメモリ１０２に記憶させる。
アクセス制御回路１０８は、供給元判定工程Ｓ５１に処理を戻す。
【００３０】
停電退避処理Ｓ９０において、アクセス制御回路１０８（退避制御部）は、キャッシュメモリ１０３に記憶させただけでフラッシュメモリ１０２にまだ記憶させていないデータを、すべて、フラッシュメモリ１０２に記憶させる。
【００３１】
復旧待ち工程Ｓ５３において、アクセス制御回路１０８は、スイッチ回路１１６が出力した供給元信号を監視して、外部電源２０からの電力供給が復旧するのを待つ。
外部電源２０からの電力供給が復旧した場合、アクセス制御回路１０８は、供給元判定工程Ｓ５１に処理を戻す。
外部電源２０からの電力供給が復旧せず、バッテリユニット１１５に蓄積した電力を使い果たした場合、記憶装置１００は、動作を停止する。
【００３２】
図３は、この実施の形態における読出し処理Ｓ６０の流れの一例を示すフロー図である。
【００３３】
読出し処理Ｓ６０は、例えば、キャッシュ判定工程Ｓ６１と、キャッシュ読出し工程Ｓ６２と、データ通知工程Ｓ６３と、フラッシュ読出し工程Ｓ６４と、データ通知工程Ｓ６５と、キャッシュ書込み工程Ｓ６６とを有する。
【００３４】
キャッシュ判定工程Ｓ６１において、アクセス制御回路１０８は、読出し指示で指定されたデータを、キャッシュメモリ１０３が記憶しているか否かを判定する。
【００３５】
例えば、読出し指示は、読み出すべきデータをフラッシュメモリ１０２が記憶した記憶領域のアドレスを含む。キャッシュメモリ１０３の記憶領域は、フラッシュメモリ１０２の記憶領域のページ単位に分割された複数のページ記憶領域と、それぞれのページ記憶領域に対応づけられたページ番号記憶領域及び変更フラグ記憶領域及びアクセス日時記憶領域とに分けられている。ページ記憶領域は、フラッシュメモリ１０２のいずれかのページに対応するデータを記憶する。ページ番号記憶領域は、対応づけられたページ記憶領域に記憶されたデータが、フラッシュメモリ１０２のどのページに対応するデータであるかを表わすページ番号を記憶する。変更フラグ記憶領域は、対応づけられたページ記憶領域に記憶されたデータが、フラッシュメモリ１０２の対応するページに記憶されたデータと一致しているか否かを表わす変更フラグ（データ属性）を記憶する。アクセス日時記憶領域は、対応づけられたページ記憶領域に記憶されたデータに、上位装置１０が最後にアクセス（読出しあるいは書込み）した日時を表わすアクセス日時を記憶する。アクセス日時記憶領域が記憶するアクセス日時は、データにアクセスした順序がわかればよいので、正確な時刻である必要はなく、例えば、アクセスがあるたびにカウントアップするカウンタの値であってもよい。
【００３６】
アクセス制御回路１０８は、読出し指示で指定されたアドレスから、そのアドレスのデータを含むページのページ番号を算出する。アクセス制御回路１０８は、キャッシュメモリ１０３のページ番号記憶領域を検索して、算出したページ番号を探す。
そのページ番号がページ番号記憶領域にない場合、読出し指示で指定されたデータを、キャッシュメモリ１０３が記憶していない。アクセス制御回路１０８は、フラッシュ読出し工程Ｓ６４へ処理を進める。
そのページ番号がページ番号記憶領域にある場合、読出し指示で指定されたデータを、キャッシュメモリ１０３が記憶している。アクセス制御回路１０８は、キャッシュ読出し工程Ｓ６２へ処理を進める。
【００３７】
キャッシュ読出し工程Ｓ６２において、アクセス制御回路１０８は、キャッシュメモリ１０３のページ記憶領域から、読出し指示で指定されたデータを読み出す。アクセス制御回路１０８は、対応するアクセス日時記憶領域に、現在時刻を記憶させる。
【００３８】
データ通知工程Ｓ６３において、アクセス制御回路１０８は、キャッシュ読出し工程Ｓ６２で読み出したデータを、上位装置１０に対して通知する。
アクセス制御回路１０８は、読出し処理Ｓ６０を終了する。
【００３９】
フラッシュ読出し工程Ｓ６４において、アクセス制御回路１０８は、フラッシュメモリ１０２の記憶領域のうち、読出し指示で指定されたデータを含むページから、データを読み出す。
【００４０】
データ通知工程Ｓ６５において、アクセス制御回路１０８は、フラッシュ読出し工程Ｓ６４で読み出したデータのなかから、読出し指示で指定されたデータを、上位装置１０に対して通知する。
【００４１】
キャッシュ書込み工程Ｓ６６において、アクセス制御回路１０８（揮発管理部）は、フラッシュ読出し工程Ｓ６４で読み出したデータを、キャッシュメモリ１０３に記憶させる。
例えば、アクセス制御回路１０８は、キャッシュメモリ１０３のページ記憶領域のなかから、フラッシュ読出し工程Ｓ６４で読み出したデータを記憶させるページ記憶領域を選択する。
キャッシュメモリ１０３のページ記憶領域のなかに、まだデータを記憶していないページ記憶領域があれば、アクセス制御回路１０８は、そのページ記憶領域を選択する。
キャッシュメモリ１０３のページ記憶領域がすべて、データを記憶している場合、アクセス制御回路１０８は、アクセス日時記憶領域に記憶されたアクセス日時に基づいて、選択するページ記憶領域を決定する。例えば、アクセス制御回路１０８は、アクセス日時が最も古いページ記憶領域を選択する。
選択したページ記憶領域に記憶されたデータと、対応するフラッシュメモリ１０２のページに記憶されたデータとが同じであれば、選択したページ記憶領域に記憶されたデータを破棄して、新しくキャッシュメモリ１０３から読み出したデータを記憶させることができる。しかし、選択したページ記憶領域に記憶されたデータと、対応するフラッシュメモリ１０２のページに記憶されたデータとが異なる場合は、新しくキャッシュメモリ１０３から読み出したデータを記憶させる前に、選択したページ記憶領域に記憶されたデータを、対応するフラッシュメモリ１０２のページに書き戻す必要がある。
アクセス制御回路１０８は、選択したページ記憶領域に対応づけられた変更フラグ記憶領域に記憶された変更フラグに基づいて、フラッシュメモリ１０２の選択したページ記憶領域が記憶したデータとキャッシュメモリ１０３の対応するページが記憶したデータとが一致しているか否かを判定する。一致していないと判定した場合、アクセス制御回路１０８は、選択したページ記憶領域に記憶されたデータを、フラッシュメモリ１０２の記憶領域のうち、そのページ記憶領域に対応づけられたページ番号記憶領域に記憶されたページ番号によって表わされるページに記憶させる。これで、選択したページ記憶領域に新しいデータを記憶させることができるようになる。
アクセス制御回路１０８は、キャッシュメモリ１０３の選択したページ記憶領域に、フラッシュ読出し工程Ｓ６４で読み出したデータを記憶させる。アクセス制御回路１０８は、そのページ記憶領域に対応づけられた変更フラグ記憶領域に、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが一致していることを表わす値（例えば「０」）を記憶させる。アクセス制御回路１０８は、そのページ記憶領域に対応づけられたアクセス日時記憶領域に、現在時刻を記憶させる。
【００４２】
図４は、この実施の形態における書込み処理Ｓ７０の流れの一例を示すフロー図である。
【００４３】
書込み処理Ｓ７０は、例えば、キャッシュ判定工程Ｓ７１と、キャッシュ書き換え工程Ｓ７２と、フラッシュ読出し工程Ｓ７３と、キャッシュ書込み工程Ｓ７４と、残量判定工程Ｓ７５と、フラッシュ書込み工程Ｓ７６とを有する。
【００４４】
キャッシュ判定工程Ｓ７１において、アクセス制御回路１０８は、書込み指示で指定されたデータを記憶させるページを、キャッシュメモリ１０３が記憶しているか否かを判定する。
例えば、書込み指示は、書き込むべきデータと、そのデータを書き込むべきフラッシュメモリ１０２の記憶領域のアドレスとを含む。
アクセス制御回路１０８は、書込み指示で指定されたアドレスから、そのアドレスを含むページのページ番号を算出する。アクセス制御回路１０８は、キャッシュメモリ１０３のページ番号記憶領域を検索して、算出したページ番号を探す。
そのページ番号がページ番号記憶領域にない場合、アクセス制御回路１０８は、フラッシュ読出し工程Ｓ７３へ処理を進める。
そのページ番号がページ番号記憶領域にある場合、アクセス制御回路１０８は、キャッシュ書き換え工程Ｓ７２へ処理を進める。
【００４５】
キャッシュ書き換え工程Ｓ７２において、アクセス制御回路１０８は、そのページ番号記憶領域に対応づけられたページ記憶領域の、書込み指示で指定されたアドレスに対応する記憶領域に、書込み指示で指定されたデータを記憶させる。アクセス制御回路１０８は、そのページ記憶領域に対応づけられたアクセス日時記憶領域に、現在時刻を記憶させる。アクセス制御回路１０８は、そのページ記憶領域に対応づけられた変更フラグ記憶領域に、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なることを表わす値（例えば「１」）を記憶させる。
アクセス制御回路１０８は、残量判定工程Ｓ７５へ処理を進める。
【００４６】
フラッシュ読出し工程Ｓ７３において、アクセス制御回路１０８は、フラッシュメモリ１０２の記憶領域のうち、キャッシュ判定工程Ｓ６１で算出したページ番号によって表わされるページから、データを読み出す。なお、書込み指示がページ全体にデータを書き込むことを指示するものである場合には、フラッシュ読出し工程Ｓ７３は、省略可能である。
【００４７】
キャッシュ書込み工程Ｓ７４において、アクセス制御回路１０８は、フラッシュ読出し工程Ｓ７３が読み出したデータのうち、書込み指示で指定されたアドレスに対応するデータを、書込み指示で指定されたデータに書き換える。アクセス制御回路１０８は、書き換えたデータを、キャッシュメモリ１０３のページ記憶領域に記憶させる。なお、アクセス制御回路１０８（揮発管理部）は、キャッシュ書込み工程Ｓ６６と同様、必要なら、キャッシュメモリ１０３のページ記憶領域に記憶されたデータを、フラッシュメモリ１０２に書き戻して、キャッシュメモリ１０３のページ記憶領域に空きを作り、空けたページ記憶領域にデータを記憶させる。
アクセス制御回路１０８は、データを記憶させたページ記憶領域に対応づけられたページ番号記憶領域に、キャッシュ判定工程Ｓ６１で算出したページ番号を記憶させる。アクセス制御回路１０８は、そのページ記憶領域に対応づけられた変更フラグ記憶領域に、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なることを表わす値（例えば「１」）を記憶させる。アクセス制御回路１０８は、そのページ記憶領域に対応づけられたアクセス日時記憶領域に、現在時刻を記憶させる。
【００４８】
残量判定工程Ｓ７５において、アクセス制御回路１０８（電力残量取得部）は、電源残量チェック回路１１７が出力した電力残量信号に基づいて、バッテリユニット１１５に蓄積された電力の残量を取得する。アクセス制御回路１０８は、取得した残量と、所定の閾値とを比較する。
バッテリユニット１１５に蓄積された電力が閾値より多いと判定した場合、アクセス制御回路１０８は、書込み処理Ｓ７０を終了する。
バッテリユニット１１５に蓄積された電力が閾値より少ないと判定した場合、アクセス制御回路１０８は、フラッシュ書込み工程Ｓ７６へ処理を進める。
【００４９】
フラッシュ書込み工程Ｓ７６において、アクセス制御回路１０８は、キャッシュ書込み工程Ｓ７４でキャッシュメモリ１０３のページ記憶領域に記憶させたデータを、フラッシュメモリ１０２の記憶領域のうち、キャッシュ判定工程Ｓ７１で算出したページ番号によって表わされるページに記憶させる。アクセス制御回路１０８は、そのページ記憶領域に対応づけられた変更フラグ記憶領域に、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが一致していることを表わす値（例えば「０」）を記憶させる。
【００５０】
このように、バッテリユニット１１５に蓄積された電力が少ない場合は、書込み指示を受けたデータをすぐにフラッシュメモリ１０２に書き込む。
これにより、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なるページの数が増えないので、バッテリユニット１１５にまだ十分な電力が蓄積されていない状態で、外部電源２０からの電力供給が停止した場合でも、データの損失を防ぐことができる。
【００５１】
図５は、この実施の形態における平常退避処理Ｓ８０の流れの一例を示すフロー図である。
【００５２】
平常退避処理Ｓ８０は、例えば、残数判定工程Ｓ８１と、フラッシュ書込み工程Ｓ８２とを有する。
【００５３】
残数判定工程Ｓ８１において、アクセス制御回路１０８は、フラッシュメモリ１０２の変更フラグ記憶領域を参照して、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なっているページの数を数える。
アクセス制御回路１０８（電力残量取得部）は、電源残量チェック回路１１７が出力した電源残量信号に基づいて、バッテリユニット１１５に蓄積された電力の残量を取得する。アクセス制御回路１０８は、取得した残量から、ページ数の上限値（閾値）を算出する。例えば、アクセス制御回路１０８は、１ページ分のデータを、キャッシュメモリ１０３から読み出してフラッシュメモリ１０２に記憶させる処理に必要な電力で、バッテリユニット１１５に蓄積された電力の残量を割った商を算出して、ページ数の上限値とする。あるいは、確実性を高めるため、アクセス制御回路１０８は、算出した商から所定の値（０より大きい実数）を差し引いた値をページ数の上限値とする構成であってもよいし、あるいは、算出した商に所定の値（０より大きく１より小さい実数）を乗じた値をページ数の上限値とする構成であってもよい。なお、算出した値が負になった場合、アクセス制御回路１０８は、０を上限値とする。
アクセス制御回路１０８は、数えたページ数と、算出した上限値とを比較する。
ページ数が上限値以内である場合、アクセス制御回路１０８は、平常退避処理Ｓ８０を終了する。
ページ数が上限値を超えている場合、アクセス制御回路１０８は、フラッシュ書込み工程Ｓ８２へ処理を進める。
【００５４】
フラッシュ書込み工程Ｓ８２において、アクセス制御回路１０８は、キャッシュメモリ１０３のページ記憶領域のなかから、フラッシュメモリ１０２の対応するページと異なるデータを記憶しているページ記憶領域を１つ選択する。例えば、アクセス制御回路１０８は、フラッシュメモリ１０２の対応するページと異なるデータを記憶しているページ記憶領域のなかから、アクセス日時がもっとも古いページ記憶領域を選択する。
アクセス制御回路１０８は、キャッシュメモリ１０３の選択したページ記憶領域に記憶されたデータを読み出す。アクセス制御回路１０８は、そのページ記憶領域に対応づけられたページ番号記憶領域に記憶されたページ番号に基づいて、読み出したデータをフラッシュメモリ１０２の対応するページに記憶させる。アクセス制御回路１０８は、そのページ記憶領域に対応づけられた変更フラグ記憶領域に、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが一致していることを表わす値（例えば「０」）を記憶させる。
【００５５】
この例における平常退避処理Ｓ８０では、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なっているページの数が１つしか減らないが、上位装置１０からの指示がないアイドル状態が続いていれば、アクセス制御回路１０８は、平常退避処理Ｓ８０を繰り返し実行するので、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なっているページの数は、上限値以内になる。
なお、１回の平常退避処理Ｓ８０で、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なっているページの数が上限値以下となるよう、フラッシュ書込み工程Ｓ８２で複数のページ記憶領域を選択する構成であってもよい。
【００５６】
このように、バッテリユニット１１５に蓄積された電力が少ない場合は、それに比例して、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なっているページの数の上限値を減らす。これにより、バッテリユニット１１５にまだ十分な電力が蓄積されていない状態で、外部電源２０からの電力供給が停止した場合でも、データの損失を防ぐことができる。
【００５７】
図６は、この実施の形態における停電退避処理Ｓ９０の流れの一例を示すフロー図である。
【００５８】
停電退避処理Ｓ９０は、例えば、残数判定工程Ｓ９１と、フラッシュ書込み工程Ｓ９２とを有する。
【００５９】
残数判定工程Ｓ９１において、アクセス制御回路１０８は、フラッシュメモリ１０２の変更フラグ記憶領域を参照して、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なっているページがあるか否かを判定する。
フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なっているページがあると判定した場合、アクセス制御回路１０８は、フラッシュ書込み工程Ｓ９２へ処理を進める。
フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なっているページがないと判定した場合、アクセス制御回路１０８は、停電退避処理Ｓ９０を終了する。
【００６０】
フラッシュ書込み工程Ｓ９２において、アクセス制御回路１０８は、キャッシュメモリ１０３のページ記憶領域のなかから、フラッシュメモリ１０２の対応するページと異なるデータを記憶しているページ記憶領域をすべて選択する。
アクセス制御回路１０８は、キャッシュメモリ１０３の選択したページ記憶領域に記憶されたデータを読み出す。アクセス制御回路１０８は、それぞれのページ記憶領域に対応づけられたページ番号記憶領域に記憶されたページ番号に基づいて、読み出したデータをフラッシュメモリ１０２の対応するページに記憶させる。アクセス制御回路１０８は、それぞれのページ記憶領域に対応づけられた変更フラグ記憶領域に、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが一致していることを表わす値（例えば「０」）を記憶させる。
【００６１】
このように、外部電源２０からの電力供給が停止した場合、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶しているデータとが異なるページをフラッシュメモリ１０２に書き戻す。停電になる前に、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なるページの数を、バッテリユニット１１５に蓄積された電力で、書き戻し可能なページ数以下に抑えてあるので、バッテリユニット１１５に蓄積された電力を使い果たす前に、すべてのデータを書き戻すことができる。これにより、データの損失を防ぐことができる。
【００６２】
図７は、この実施の形態におけるバッテリユニット１１５に蓄積された電力の残量と、フラッシュメモリ１０２に書き戻すべきページ数との関係の一例を示す図である。
横軸は、バッテリユニット１１５に蓄積された電力の残量を示す。縦軸は、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なっていて、キャッシュメモリ１０３が記憶しているデータをフラッシュメモリ１０２に記憶させる必要があるページの数を示す。
【００６３】
実線４１は、バッテリユニット１１５に蓄積された電力で、フラッシュメモリ１０２に書き戻すことができるページ数の最大値を表わす。破線４２は、アクセス制御回路１０８が平常退避処理Ｓ８０で算出する上限ページ数を表わす。細破線４３は、アクセス制御回路１０８が書込み処理Ｓ７０で用いる電力の閾値を表わす。網掛け４４は、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なってるページの数を表わし、網が荒いほど、その確率が低いことを表わす。
【００６４】
アクセス制御回路１０８がアイドル状態になって平常退避処理Ｓ８０を実行すると、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なってるページの数は、破線４２で示した上限ページ数以下になる。
バッテリユニット１１５に蓄積された電力が、細破線４３で示した閾値より少ない場合（すなわち、細破線４３よりも左側）、アクセス制御回路１０８が書込み処理Ｓ７０を実行しても、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なってるページの数は増えないので、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なってるページの数は、常に、破線４２で示した上限ページ数以下である。
バッテリユニット１１５に蓄積された電力が、細破線４３で示した閾値より多い場合（すなわち、細破線４３よりも右側）、アクセス制御回路１０８が書込み処理Ｓ７０を実行すると、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なってるページの数が増える場合がある。
このため、アクセス制御回路１０８がアイドル状態になって平常退避処理Ｓ８０を実行するまでの間は、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なってるページの数が、破線４２で示した上限ページ数を超える可能性がある。
しかし、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なってるページの数と上限ページ数との差が大きいほど、その確率は低くなるので、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なってるページの数が、実線４１で示した最大ページ数を超える可能性は非常に低く、無視できる。
【００６５】
なお、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なってるページの数が、実線４１で示した最大ページ数を超える可能性を完全に０にしたければ、実線４１で示した最大ページ数が、キャッシュメモリ１０３のページ記憶領域が記憶できるページ数を超える点４５よりも、細破線４３が右側になるように、閾値を設定すればよい。
【００６６】
この実施の形態における記憶装置１００（半導体記憶装置）は、
データを記憶する不揮発性記憶部であるフラッシュメモリ１０２（不揮発記憶部）と、
ホストコンピュータなどの上位装置１０からのアクセス速度を向上させるため参照頻度の高いデータを複写しておくキャッシュメモリ１０３（揮発記憶部）と、
外部電源２０からの給電を受ける電源回路１１４と、
停電時に電力を一時的に供給するバッテリユニット１１５（蓄電池）と、
電源回路１１４の給電を受けて、フラッシュメモリ１０２等に給電し、更に、停電により、外部電源２０と電源回路１１４からの給電が停止した場合はバッテリユニット１１５から給電するスイッチ回路１１６と、
バッテリユニット１１５の残電力量を監視して通知する電源残量チェック回路１１７と、
電源残量チェック回路１１７から残電力量の通知を受けて、上位装置１０からのデータ書込み先を、残電力量が無い場合はフラッシュメモリ１０２、有る場合はキャッシュメモリ１０３に切り換えるとともに、残電力量に応じて、キャッシュメモリ１０３上のデータをフラッシュメモリ１０２に退避するアクセス制御回路１０８とで構成される。
【００６７】
バッテリユニット１１５の残電力量を監視し、上位装置１０からのデータ書込み先を、残電力量が無い場合はフラッシュメモリ１０２、有る場合はキャッシュメモリ１０３に切り換えるとともに、残電力量に応じて、キャッシュメモリ１０３上のデータをフラッシュメモリ１０２に退避する。これにより、停電が短時間に連続して発生し、バッテリユニット１１５の残電力量が無い場合は、キャッシュメモリ１０３上にデータを蓄積しないので、データ保持の信頼性が向上する。
【００６８】
実施の形態２．
実施の形態２について、図８を用いて説明する。
なお、実施の形態１と共通する部分については、同一の符号を付し、説明を省略する。
【００６９】
図８は、この実施の形態における書込み処理Ｓ７０の流れの一例を示すフロー図である。
【００７０】
書込み処理Ｓ７０は、実施の形態１で説明した工程のうち、残量判定工程Ｓ７５がなく、その代わりとして、残数判定工程Ｓ７７を有する。
【００７１】
アクセス制御回路１０８は、キャッシュ書き換え工程Ｓ７２あるいはキャッシュ書込み工程Ｓ７４が終了すると、残数判定工程Ｓ７７へ処理を進める。
【００７２】
残数判定工程Ｓ７７において、アクセス制御回路１０８（退避制御部）は、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なっているページの数を数える。アクセス制御回路１０８は、バッテリユニット１１５に蓄積された電力の残量に基づいて、ページ数の上限値を算出する。ここで算出する上限値は、平常退避処理Ｓ８０における残数判定工程Ｓ８１で算出する上限値と同じ値である。アクセス制御回路１０８は、数えたページ数と、算出した上限値とを比較する。
ページ数が上限以内である場合、アクセス制御回路１０８は、書込み処理Ｓ７０を終了する。
ページ数が上限を超えている場合、アクセス制御回路１０８は、フラッシュ書込み工程Ｓ７６へ処理を進める。
【００７３】
フラッシュ書込み工程Ｓ７６において、アクセス制御回路１０８（退避制御部）は、キャッシュメモリ１０３のページ記憶領域のなかから、フラッシュメモリ１０２の対応するページと異なるデータを記憶しているページ記憶領域を１つ選択する。例えば、平常退避処理Ｓ８０におけるフラッシュ書込み工程Ｓ８２と同様、アクセス制御回路１０８は、フラッシュメモリ１０２の対応するページと異なるデータを記憶しているページ記憶領域のなかから、アクセス日時がもっとも古いページ記憶領域を選択する。
アクセス制御回路１０８は、キャッシュメモリ１０３の選択したページ記憶領域に記憶されたデータを読み出し、フラッシュメモリ１０２の対応するページに記憶させる。アクセス制御回路１０８は、そのページ記憶領域に対応づけられた変更フラグ記憶領域に、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが一致していることを表わす値（例えば「０」）を記憶させる。
【００７４】
なお、フラッシュ書込み工程Ｓ７６において、アクセス制御回路１０８は、キャッシュ書き換え工程Ｓ７２またはキャッシュ書込み工程Ｓ７４でデータを記憶させたページ記憶領域を選択する構成であってもよい。
【００７５】
キャッシュ書き換え工程Ｓ７２を実行することにより、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なっているページの数が増える。また、キャッシュ書込み工程Ｓ７４を実行することにより、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なっているページを書き戻したのであれば、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なっているページの数は変わらず、そうでなければ、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なっているページの数が増える。
その結果として、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なっているページの数が、バッテリユニット１１５に蓄積された電力の残量から算出した上限値を超えた場合、アクセス制御回路１０８は、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なっているページを書き戻す。これにより、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なっているページの数は、常に、上限値以下となる。
【００７６】
実施の形態３．
実施の形態３について、図９〜図１１を用いて説明する。
なお、実施の形態１または実施の形態２と共通する部分については、同一の符号を付し、説明を省略する。
【００７７】
図９は、この実施の形態における記憶装置１００の動作の流れの一例を示すフロー図である。
【００７８】
停電退避処理Ｓ９０において、アクセス制御回路１０８は、バッテリユニット１１５が蓄積している電力の残量が少なければ、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なっているページをすべて、フラッシュメモリ１０２に書き戻すが、バッテリユニット１１５が蓄積している電力の残量が多ければ、必ずしも、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なっているページをすべてフラッシュメモリ１０２に書き戻さない。
フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なっているページがまだ残っている場合、アクセス制御回路１０８は、供給元判定工程Ｓ５１に処理を戻す。
フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なっているページがなくなった場合、アクセス制御回路１０８は、復旧待ち工程Ｓ５３へ処理を進める。
【００７９】
図１０は、この実施の形態における停電退避処理Ｓ９０の流れの一例を示すフロー図である。
【００８０】
残数判定工程Ｓ９１において、アクセス制御回路１０８（退避制御部）は、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なっているページの数を数える。アクセス制御回路１０８は、バッテリユニット１１５に蓄積された電力の残量に基づいて、ページ数の上限値を算出する。ここで算出する上限値は、平常退避処理Ｓ８０における残数判定工程Ｓ８１で算出する上限値よりも少ない値である。アクセス制御回路１０８は、数えたページ数と、算出した上限値とを比較する。
ページ数が上限以内である場合、アクセス制御回路１０８は、停電退避処理Ｓ９０を終了する。
ページ数が上限を超えている場合、アクセス制御回路１０８は、フラッシュ書込み工程Ｓ９２へ処理を進める。
【００８１】
フラッシュ書込み工程Ｓ９２において、アクセス制御回路１０８（退避制御部）は、キャッシュメモリ１０３のページ記憶領域のなかから、フラッシュメモリ１０２の対応するページと異なるデータを記憶しているページ記憶領域を１つ選択する。例えば、平常退避処理Ｓ８０におけるフラッシュ書込み工程Ｓ８２と同様、アクセス制御回路１０８は、フラッシュメモリ１０２の対応するページと異なるデータを記憶しているページ記憶領域のなかから、アクセス日時がもっとも古いページ記憶領域を選択する。
アクセス制御回路１０８は、キャッシュメモリ１０３の選択したページ記憶領域に記憶されたデータを読み出し、フラッシュメモリ１０２の対応するページに記憶させる。アクセス制御回路１０８は、そのページ記憶領域に対応づけられた変更フラグ記憶領域に、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが一致していることを表わす値（例えば「０」）を記憶させる。
【００８２】
この例における停電退避処理Ｓ９０では、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なっているページの数が１つしか減らないが、バッテリユニット１１５からの電力供給がない停電状態が続いていれば、アクセス制御回路１０８は、停電退避処理Ｓ９０を繰り返し実行するので、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なっているページの数は、上限値以内になる。
なお、１回の停電退避処理Ｓ９０で、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なっているページの数が上限値以下となるよう、フラッシュ書込み工程Ｓ９２で複数のページ記憶領域を選択する構成であってもよい。
【００８３】
図１１は、この実施の形態におけるバッテリユニット１１５に蓄積された電力の残量と、フラッシュメモリ１０２に書き戻すべきページ数との関係の一例を示す図である。
【００８４】
破線４６は、アクセス制御回路１０８が停電退避処理Ｓ９０で算出する上限ページ数を表わす。停電退避処理Ｓ９０で算出する上限ページ数は、破線４２で示した平常退避処理Ｓ８０で算出する上限ページ数よりも少ない。
例えば、アクセス制御回路１０８は、平常退避処理Ｓ８０と同じ計算式で上限ページ数を算出し、算出した上限ページ数から所定の値（０より大きい実数。）を差し引いて、停電退避処理Ｓ９０における上限ページ数とする。なお、算出した値が負になった場合、アクセス制御回路１０８は、０を上限ページ数とする。
【００８５】
アクセス制御回路１０８が算出する上限ページ数が０になる点４７における電力残量よりも、バッテリユニット１１５に蓄積された電力の残量が少ない場合、アクセス制御回路１０８は、フラッシュメモリ１０２が記憶したデータとキャッシュメモリ１０３が記憶したデータとが異なっているページをすべて、フラッシュメモリ１０２に書き戻す。
【００８６】
これに対し、点４７における電力残量よりもバッテリユニット１１５に蓄積された電力の残量が多い場合、アクセス制御回路１０８は、一部のデータをフラッシュメモリ１０２に書き戻し、一部のデータを書き戻さずに残す。これにより、短時間の停電ののち、バッテリユニット１１５からの電力供給が復旧した場合、記憶装置１００は、通常の処理に素早く復帰することができる。
【００８７】
なお、バッテリユニット１１５からの電力供給がそのまま復旧しない場合、バッテリユニット１１５に蓄積された電力の残量が徐々に減っていく。バッテリユニット１１５が減ったことにより上限ページ数が下がれば、アクセス制御回路１０８は、その分のデータをフラッシュメモリ１０２に書き戻す。そして、上限ページ数が０になれば、アクセス制御回路１０８は、すべてのデータをフラッシュメモリ１０２に書き戻す。
【００８８】
実施の形態４．
実施の形態４について、図１２を用いて説明する。
なお、実施の形態１〜実施の形態３と共通する部分については、同一の符号を付し、説明を省略する。
【００８９】
図１２は、この実施の形態における記憶装置１００の動作の流れの一例を示すフロー図である。
【００９０】
記憶装置１００は、実施の形態１で説明した動作のうち、供給元判定工程Ｓ５１を実行せず、その代わりとして、残量判定工程Ｓ５４を実行する。
【００９１】
残量判定工程Ｓ５４において、アクセス制御回路１０８（電力残量取得部）は、電源残量チェック回路１１７が出力した電力残量信号に基づいて、バッテリユニット１１５に蓄積された電力の残量を取得する。アクセス制御回路１０８は、取得した残量と、所定の閾値とを比較する。
バッテリユニット１１５に蓄積された電力の残量が閾値より多い場合、アクセス制御回路１０８は、指示受付工程Ｓ５２へ処理を進める。
バッテリユニット１１５に蓄積された電力の残量が閾値より少ない場合、アクセス制御回路１０８は、停電退避処理Ｓ９０へ処理を進める。
【００９２】
このように、外部電源２０からの電力供給があるか否かによって、平常時の処理と、停電時の処理とを分けるのではなく、バッテリユニット１１５に蓄積された電力の残量が多いか少ないかによって、平常時の処理と、停電時の処理とを分ける。これにより、外部電源２０からの電力供給が停止している場合でも、バッテリユニット１１５に蓄積された電力の残量が多ければ、記憶装置１００は、上位装置１０からの指示を受け付ける。
【００９３】
停電などにより、外部電源２０からの電力供給が停止した場合でも、上位装置１０は、無停電電源などにより動作を続けている場合がある。上位装置１０は、上位装置１０が記憶しているデータを退避するため、記憶装置１００に対して書込み指示をする可能性がある。
記憶装置１００は、外部電源２０からの電力供給が停止した場合でも、バッテリユニット１１５に蓄積された電力に余裕があれば、上位装置１０からの指示を受け付けるので、上位装置１０が記憶しているデータの退避など、上位装置１０が停電時に必要な処理をすることができる。
【００９４】
書込み処理Ｓ７０における処理の流れは、実施の形態２で説明したものと同様なので、図８を参照して説明する。
【００９５】
残数判定工程Ｓ７７において、アクセス制御回路１０８（退避制御部）は、アクセス制御回路１０８は、バッテリユニット１１５に蓄積された電力の残量と、外部電源２０から電力が供給されているか否かとに基づいて、ページ数の上限値を算出する。
外部電源２０からの電力供給が停止している場合、アクセス制御回路１０８は、ページ数の上限値を、外部電源２０から電力が供給されている場合の上限値よりも小さい値とする。例えば、外部電源２０から電力が供給されている場合は、実施の形態３で説明した残数判定工程Ｓ８１において算出する上限値を使い、外部電源２０からの電力供給が停止している場合は、実施の形態３で説明した残数判定工程Ｓ９１において算出する上限値を使う。
【００９６】
平常退避処理Ｓ８０の残数判定工程Ｓ８１においても同様に、アクセス制御回路１０８は、外部電源２０からの電力供給が停止している場合、外部電源２０から電力が供給されている場合の上限値よりも小さい値を、ページ数の上限値とする。
【００９７】
このように、外部電源２０からの電力供給が停止した場合でも、バッテリユニット１１５に蓄積された電力に余裕があれば、上位装置１０からの指示を受け付けつつ、バッテリユニット１１５に蓄積された電力がいよいよ減ってきたときに書き戻さなければならないページ数を減らす。これにより、データ保持の信頼性が向上する。
【００９８】
なお、残数判定工程Ｓ７７や残数判定工程Ｓ８１において、外部電源２０からの電力供給が停止している場合、アクセス制御回路１０８は、ページ数の上限値を「０」にする構成であってもよい。
【００９９】
以上、各実施の形態で説明した構成は、一例であり、他の構成であってもよい。例えば、異なる実施の形態で説明した構成を組み合わせた構成であってもよいし、本質的でない部分の構成を、他の構成で置き換えた構成であってもよい。
【０１００】
例えば、電源装置１１０は、記憶装置１００の一部ではなく、記憶装置１００の外部に存在する構成であってもよい。
また、蓄電池は、バッテリユニット１１５ではなく、例えば電気二重層キャパシタなどのキャパシタ（コンデンサ）であってもよい。蓄電池は、電源装置１１０の一部ではなく、電源装置１１０の外部に存在する構成であってもよい。例えば、蓄電池は、電源装置１１０に着脱自在に接続される構成であってもよい。
【０１０１】
また、キャッシュ書込み工程Ｓ６６，Ｓ７４で新たなデータを記憶させるページ記憶領域を選択する選択方式は、一例であり、他の選択方式であってもよい。
また、不揮発記憶部の記憶領域へのアクセスは、ページ単位ではなく、ビット単位、バイト単位、ワード単位、セクタ単位、クラスタ単位、トラック単位など他の単位であってもよい。
【０１０２】
以上説明した記憶装置（１００）は、蓄電池（バッテリユニット１１５）から得た電力により動作する。
上記記憶装置は、データを記憶する不揮発記憶部（フラッシュメモリ１０２）と、データを記憶する揮発記憶部（キャッシュメモリ１０３）と、書込み制御部（アクセス制御回路１０８）と、退避制御部（アクセス制御回路１０８）とを有する。
上記書込み制御部は、指定したデータを上記不揮発記憶部に記憶させることを指示する書込み指示を上位装置（１０）から受けた場合、上記書込み指示によって指定されたデータを上記揮発記憶部に記憶させる。
上記退避制御部は、上記書込み制御部が上記揮発記憶部に記憶させたデータのうち、上記不揮発記憶部に記憶させていないデータの量が、上記蓄電池に充電されている電力の残量によって定まる閾値より多い場合、上記書込み制御部が上記揮発記憶部に記憶させたデータであって上記不揮発記憶部に記憶させていないデータのうち少なくとも一部のデータを、上記不揮発記憶部に記憶させる。
【０１０３】
蓄電池に蓄積された電力の残量にしたがって、上限を超える量のデータをあらかじめ退避するので、蓄電池に蓄積された電力の残量が少ない場合でも、蓄電池から電力が供給されている間に、すべてのデータを退避することができる。
【０１０４】
上記書込み制御部（１０８）は、上記蓄電池（１１５）に充電されている電力の残量が所定の閾値より少ない場合、上記書込み指示によって指定されたデータを上記不揮発記憶部（１０２）に記憶させる。
【０１０５】
蓄電池に蓄積された電力の残量が少ない場合、まだ退避されていないデータの量が増えないので、蓄電池に蓄積された電力の残量が少ない場合でも、蓄電池から電力が供給されている間に、すべてのデータを退避することができる。
【０１０６】
上記記憶装置（１００）は、外部電源（２０）から電力が供給されている場合、上記外部電源から供給された電力により動作し、上記外部電源から電力が供給されていない場合、上記蓄電池（１１５）から供給された電力により動作する。
上記退避制御部（１０８）は、上記外部電源から電力が供給されていない場合、上記書込み制御部（１０８）が上記揮発記憶部（１０３）に記憶させたデータのうち上記不揮発記憶部（１０２）に記憶させていないデータの量が多いか否かを判定するための上記閾値として、上記外部電源から電力が供給されている場合の閾値よりも小さい閾値を使う。
【０１０７】
外部電源からの電力供給が停止している場合は、まだ退避されていないデータの量の上限値を小さくするので、蓄電池に蓄積された電力の残量が少ない場合でも、蓄電池から電力が供給されている間に、すべてのデータを退避することができる。
【０１０８】
上記退避制御部（１０８）は、上記外部電源（２０）から電力が供給されていない場合、上記書込み制御部（１０８）が上記揮発記憶部（１０３）に記憶させたデータのうち上記不揮発記憶部（１０２）に記憶させていないデータの量が多いか否かを判定するための上記閾値として、０を使う。
【０１０９】
外部電源からの電力供給が停止している場合は、すべてのデータをあらかじめ退避するので、蓄電池に蓄積された電力の残量が少ない場合でも、蓄電池から電力が供給されている間に、すべてのデータを退避することができる。
【０１１０】
上記読出し制御部（アクセス制御回路１０８）は、上記不揮発記憶部（１０２）が記憶したデータを読み出すことを指示する読出し指示を上記上位装置（１０）から受けた場合、上記読出し指示によって指定されたデータを上記揮発記憶部（１０３）が記憶しているか否かを判定し、上記読出し指示によって指定されたデータを上記揮発記憶部が記憶していると判定した場合、上記読出し指示によって指定されたデータを上記揮発記憶部から取得して、上記上位装置に対して通知し、上記読出し指示によって指定されたデータを上記揮発記憶部が記憶していないと判定した場合、上記読出し指示によって指定されたデータを上記不揮発記憶部から取得して、上記上位装置に対して通知するとともに、上記揮発記憶部に記憶させる。
【０１１１】
これにより、不揮発記憶部が記憶したデータの読出しにかかる時間を短縮することができる。
【０１１２】
上記記憶装置（１００）は、更に、電源装置（１１０）を有する。
上記電源装置は、外部電源（２０）から電力が供給されている場合に、上記蓄電池（１１５）を充電し、上記外部電源から電力が供給されていない場合に、上記蓄電池を放電して、上記記憶装置を動作させる電力を得る。
【０１１３】
外部電源からの電力供給が頻繁に停止するなどして蓄電池に十分な電力が蓄積されない場合や、経年劣化などにより蓄電池の容量が低下した場合であっても、蓄電池から電力が供給されている間に、すべてのデータを退避することができる。
【符号の説明】
【０１１４】
１０  上位装置、１００  記憶装置、１０２  フラッシュメモリ、１０３  キャッシュメモリ、１０８  アクセス制御回路、１１０  電源装置、１１４  電源回路、１１５  バッテリユニット、１１６  スイッチ回路、１１７  電源残量チェック回路、２０  外部電源、４１  実線、４２，４６  破線、４３  細破線、４４  網掛け、４５，４７  点、Ｓ５１  供給元判定工程、Ｓ５２  指示受付工程、Ｓ５３  復旧待ち工程、Ｓ５４，Ｓ７５  残量判定工程、Ｓ６０  読出し処理、Ｓ６１，Ｓ７１  キャッシュ判定工程、Ｓ６２  キャッシュ読出し工程、Ｓ６３，Ｓ６５  データ通知工程、Ｓ６４，Ｓ７３  フラッシュ読出し工程、Ｓ６６，Ｓ７４  キャッシュ書込み工程、Ｓ７０  書込み処理、Ｓ７２  キャッシュ書き換え工程、Ｓ７６，Ｓ８２，Ｓ９２  フラッシュ書込み工程、Ｓ７７，Ｓ８１，Ｓ９１  残数判定工程、Ｓ８０  平常退避処理、Ｓ９０  停電退避処理。
【図１】
0005814825.tif 000002
【図２】
0005814825.tif 000003
【図３】
0005814825.tif 000004
【図４】
0005814825.tif 000005
【図５】
0005814825.tif 000006
【図６】
0005814825.tif 000007
【図７】
0005814825.tif 000008
【図８】
0005814825.tif 000009
【図９】
0005814825.tif 000010
【図１０】
0005814825.tif 000011
【図１１】
0005814825.tif 000012
【図１２】
0005814825.tif 000013