(57)【要約】【課題】電源断等からの復帰後、適正にデータの回復処理を行う。【解決手段】中央演算処理装置１の記憶管理情報記憶部３は、データ記憶部２が不揮発性メモリ６に記憶する、消去単位より小さい単位のデータＡｎの記憶管理に関する記憶管理情報Ｂｎを不揮発性メモリ６に記憶する。記憶完了情報記憶部４は、記憶管理情報Ｂｎの記憶が完了したことを示す記憶完了情報Ｃｎを不揮発性メモリ６に記憶する。記憶情報判断部５は、記憶管理情報Ｂｎの記憶途中における処理断から復帰したとき、記憶完了情報Ｃｎを参照して記憶管理情報Ｂｎの書き込み完了を判断する。よって、記憶管理情報が書き込み完了していた場合に、データの再書き込みをすることにより、適正にデータの回復処理を行うことができる。【選択図】        図１
2004206381.tif 000002
【特許請求の範囲】
【請求項１】
中央演算処理装置による書き換え可能な不揮発性メモリの記憶方法において、
不揮発性メモリに記憶する消去単位より小さい単位のデータの記憶管理に関する記憶管理情報を前記不揮発性メモリに記憶し、
前記記憶管理情報の記憶が完了したことを示す記憶完了情報を前記不揮発性メモリに記憶し、
前記記憶管理情報の記憶途中における処理断から復帰したとき、前記記憶完了情報を参照して前記記憶管理情報の書き込み完了を判断する、
ことを特徴とする不揮発性メモリの記憶方法。
【請求項２】
前記記憶管理情報は、アプリケーション上で指示される前記不揮発性メモリのアドレスと、前記データが実際に前記不揮発性メモリに記憶されるアドレスとを含むことを特徴とする請求項１記載の不揮発性メモリの記憶方法。
【請求項３】
前記記憶管理情報は、前記データの前記不揮発性メモリへの記憶開始を示す情報と記憶完了を示す情報とを含むことを特徴とする請求項１記載の不揮発性メモリの記憶方法。
【請求項４】
前記記憶管理情報は、ガーベージコレクション処理における前記データのコピーに関するコピー情報を含むことを特徴とする請求項１記載の不揮発性メモリの記憶方法。
【請求項５】
前記記憶管理情報は、前記記憶管理に関する情報を複数有し、前記記憶完了情報は、個々の前記記憶管理に関する情報に対して付与されることを特徴とする請求項１記載の不揮発性メモリの記憶方法。
【請求項６】
前記記憶完了情報は、１ビットデータで示されることを特徴とする請求項１記載の不揮発性メモリの記憶方法。
【請求項７】
前記記憶管理情報及び前記記憶完了情報は、バッテリによって電源バックアップされた揮発性メモリに記憶されることを特徴とする請求項１記載の不揮発性メモリの記憶方法。
【請求項８】
書き換え可能な不揮発性メモリにデータを記憶する記憶装置において、
不揮発性メモリに記憶する消去単位より小さい単位のデータの記憶管理に関する記憶管理情報を前記不揮発性メモリに記憶する記憶管理情報記憶部と、
前記記憶管理情報の記憶が完了したことを示す記憶完了情報を前記不揮発性メモリに記憶する記憶完了情報記憶部と、
前記記憶管理情報の記憶途中における処理断から復帰したとき、前記記憶完了情報を参照して前記記憶管理情報の書き込み完了を判断する記憶情報判断部と、
を有することを特徴とする記憶装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は不揮発性メモリの記憶方法及び記憶装置に関し、特に中央演算処理装置による書き換え可能な不揮発性メモリの記憶方法及び書き換え可能な不揮発性メモリにデータを記憶する記憶装置に関する。
【０００２】
【従来の技術】
フラッシュＲＯＭ、ＥＥＰＲＯＭなどの不揮発性メモリは構造上、データの書き込み前にブロック単位又は一括でデータが消去されてないと書き込みができず、ＲＡＭのようにデータの書き換えをすることができない。そこで、不揮発性メモリを、あたかもＲＡＭにアクセスしているかのようにするドライバがある。
【０００３】
このドライバは、アプリケーションが指定するアドレスと、不揮発性メモリの書き込み可能なアドレスとを１対１対応するよう管理し、ＲＡＭにアクセスしているかのようにする。
【０００４】
例えば、アプリケーションが不揮発性メモリのアドレスＡにデータ‘１’を記憶するよう指定したとする。このときドライバは、不揮発性メモリのアドレスＢ１にデータ‘１’を記憶したとする。次に、アプリケーションがアドレスＡにデータ‘２’を記憶するよう指定したとする。不揮発性メモリは、ブロック単位又は一括でデータが消去されないとアドレスＢ１のデータ‘１’をデータ‘２’に書き換えることができないので、ドライバは、不揮発性メモリの新たなアドレスＢ２にデータ‘２’を記憶する。ドライバは、アプリケーションが指定したアドレスと不揮発性メモリの実際にデータが記憶されたアドレスとの対応関係を不揮発性メモリに記憶する。そしてドライバは、データの読み出し時にこのアドレスの対応関係を参照して、適正なデータが読み出せるようにしている。
【０００５】
以下、ドライバの不揮発性メモリへのデータ書き込みについて説明する。図８は、ドライバのデータ書き込みの処理手順を示したフローチャートである。ドライバは、以下の手順に従ってデータを不揮発性メモリに記憶する。
【０００６】
［ステップＳ５１］ドライバは、不揮発性メモリのデータの書き込み可能な領域（未使用領域）を検索する。
［ステップＳ５２］ドライバは、データの書き込み開始を示す書き込み開始情報を不揮発性メモリ上の書き込み管理情報に書き込む。
【０００７】
［ステップＳ５３］ドライバは、ステップＳ５１で検索した領域にデータを書き込む。
［ステップＳ５４］ドライバは、データを記憶するのにアプリケーションが指定したアドレスと、実際にデータを記憶した不揮発性メモリのアドレスとの対応関係を、不揮発性メモリ上のアドレス管理情報に書き込む。
【０００８】
［ステップＳ５５］ドライバは、データの書き込みが完了したことを示す書き込み完了情報を書き込み管理情報に書き込む。
ドライバは、不揮発性メモリからデータを読み出すとき、アドレス管理情報のアドレスの対応関係を参照し、アプリケーションが要求するデータを読み出す。
【０００９】
次に、ドライバのデータ書き換えの処理手順について説明する。図９は、ドライバのデータ書き換えの処理手順を示したフローチャートである。ドライバは、以下の手順に従って不揮発性メモリのデータを書き換える。
【００１０】
［ステップＳ６１］ドライバは、不揮発性メモリの書き換えデータの書き込み可能な領域（未使用領域）を検索する。
［ステップＳ６２］ドライバは、書き換えデータの書き込み開始を示す書き込み開始情報を不揮発性メモリ上の書き込み管理情報に書き込む。
【００１１】
［ステップＳ６３］ドライバは、ステップＳ６１で検索した領域に書き換えデータを書き込む。
［ステップＳ６４］ドライバは、データを記憶するのにアプリケーションが指定したアドレスと、実際に書き換えデータを記憶した不揮発性メモリの新たなアドレスとの対応関係を、不揮発性メモリ上のアドレス管理情報に書き込む。
【００１２】
［ステップＳ６５］ドライバは、書き換え前のデータに関するアドレスの対応関係を無効にするため、書き換え前のデータに対応するアドレス管理情報に無効情報を書き込む。
【００１３】
［ステップＳ６６］ドライバは、書き換え前のデータを無効に（削除）するための削除済み情報を書き込み管理情報に書き込む。
［ステップＳ６７］ドライバは、書き換えデータの書き込みが完了したことを示す書き込み完了情報を書き込み管理情報に書き込む。
【００１４】
このように、アドレス管理情報を記憶することによって、書き換えデータも不揮発性メモリから読み出すことができる。
次に、ガーベージコレクションの処理手順について説明する。図１０は、ドライバのガーベージコレクションの処理手順を示したフローチャートである。ドライバは、以下の手順に従って不揮発性メモリのガーベージコレクションを行う。
【００１５】
［ステップＳ７１］ドライバは、コピー元ユニット（ユニット：消去単位）を選択する。
［ステップＳ７２］ドライバは、スペアユニットとなるコピー先ユニットのヘッダ領域にコピー開始情報を書き込む。
【００１６】
［ステップＳ７３］ドライバは、コピー先ユニットにコピー元ユニットの有効なデータをコピーする。有効なデータとは、図９のステップＳ６６で説明した削除済みデータでないデータである。
【００１７】
［ステップＳ７４］ドライバは、コピー先ユニットのヘッダ領域にコピーが完了したことを示すコピー完了情報を書き込む。
［ステップＳ７５］ドライバは、コピー元ユニットのヘッダ領域にコピー元ユニットを無効に（削除）するための削除済み情報を書き込む。
【００１８】
［ステップＳ７６］ドライバは、コピー元ユニットのデータを消去する。これにより、コピー元ユニットは、新たなデータの書き込みが可能となる。
［ステップＳ７７］ドライバは、コピー元ユニットのヘッダ領域にヘッダ情報を書き込む。
【００１９】
このように、ドライバは、コピー元ユニット及びコピー先ユニットのヘッダ領域に情報を書き込みながらガーベージコレクションを行う。
以上のドライバの処理において、データの不揮発性メモリへの書き込み途中に電源断が発生し、復帰したとする。ドライバは、不揮発性メモリに記憶されているデータの書き込み開始を示す情報及び書き込み完了を示す情報を参照し、書き込みしたデータが信頼できるか否かの判断を行う。若し、書き込み完了を示す情報が記憶されていなければ、ドライバは、そのデータを再度書き込む回復処理を行う。
【００２０】
また、データ書き込み時の中断要因を検出し、データにその中断要因に応じたデータを付加して、信頼できるデータの範囲を確定する記憶方法がある（例えば、特許文献１参照）。
【００２１】
【特許文献１】
特開２０００−１３２４６４号公報（第４頁、第１図）
【００２２】
【発明が解決しようとする課題】
しかしながら、アプリケーションと不揮発性メモリのアドレス対応関係に関する情報（以下、記憶管理情報）の書き込み途中に電源断が発生した場合、電源復帰後、誤った記憶管理情報によってデータの回復処理が行われる恐れがあるという問題点があった。
【００２３】
本発明はこのような点に鑑みてなされたものであり、処理断から復帰したとき、記憶管理情報の書き込み完了の判断を行って、適正に回復処理を行うことができる不揮発性メモリの記憶方法及び記憶装置を提供することを目的とする。
【００２４】
【課題を解決するための手段】
本発明では上記課題を解決するために、図１に示す中央演算処理装置１による書き換え可能な不揮発性メモリの記憶方法が提供される。中央演算処理装置１の記憶管理情報記憶部３は、不揮発性メモリ６に記憶する消去単位より小さい単位のデータＡｎの記憶管理に関する記憶管理情報Ｂｎを不揮発性メモリ６に記憶する。記憶完了情報記憶部４は、記憶管理情報Ｂｎの記憶が完了したことを示す記憶完了情報Ｃｎを不揮発性メモリ６に記憶する。記憶情報判断部５は、記憶管理情報Ｂｎの記憶途中における処理断から復帰したとき、記憶完了情報Ｃｎを参照して記憶管理情報Ｂｎの書き込み完了を判断する。
【００２５】
これによれば、記憶管理情報Ｂｎの不揮発性メモリ６への記憶が完了したことを示す記憶完了情報Ｃｎを不揮発性メモリ６に記憶し、記憶完了情報Ｃｎを参照することによって、記憶管理情報Ｂｎの書き込み完了を判断する。
【００２６】
【発明の実施の形態】
以下、本発明の実施の形態を図面を参照して説明する。
図１は、本発明の原理を説明する原理図である。図に示す中央演算処理装置１は、書き換え可能な不揮発性メモリ６にデータを記憶するドライバを実行することにより、別に実行しているアプリケーションが指示するデータを不揮発性メモリ６に記憶する。中央演算処理装置１は、ドライバを実行することにより、データ記憶部２、記憶管理情報記憶部３、記憶完了情報記憶部４、記憶情報判断部５を有している。
【００２７】
データ記憶部２は、アプリケーションからの指示に応じて、消去単位より小さい単位のデータＡ１，Ａ２，…，Ａｎを不揮発性メモリ６に記憶する。
記憶管理情報記憶部３は、データＡ１，Ａ２，…，Ａｎの記憶管理に関する記憶管理情報Ｂ１，Ｂ２，…，Ｂｎを不揮発性メモリ６に記憶する。記憶管理情報記憶部３は、データＡ１が不揮発性メモリ６に記憶されるとき、データＡ１に関する記憶管理情報Ｂ１を記憶し、以下同様に、データＡｎが不揮発性メモリ６に記憶されるとき、データＡｎに関する記憶管理情報Ｂｎを記憶する。
【００２８】
記憶管理情報Ｂ１，Ｂ２，…，Ｂｎは、例えば、アプリケーションが指示したデータＡ１，Ａ２，…，Ａｎの記憶するアドレスと、実際にデータ記憶部２が不揮発性メモリ６に記憶したアドレスである。
【００２９】
記憶完了情報記憶部４は、記憶管理情報Ｂ１，Ｂ２，…Ｂｎのそれぞれにおいて、不揮発性メモリ６への記憶が完了したとき、記憶が完了したことを示す記憶完了情報Ｃ１，Ｃ２，…，Ｃｎを不揮発性メモリ６に記憶する。記憶完了情報Ｃ１は、記憶管理情報Ｂ１に対応し、以下、記憶完了情報Ｃｎは、記憶管理情報Ｂｎに対応する情報である。
【００３０】
記憶情報判断部５は、記憶管理情報記憶部３の記憶管理情報Ｂ１，Ｂ２，…Ｂｎの記憶途中に、例えば中央演算処理装置１への電源断が発生し、それから復帰したとき、記憶完了情報Ｃ１，Ｃ２，…Ｃｎを参照して、記憶管理情報Ｂ１，Ｂ２，…Ｂｎの記憶が完了していたか否かを判断する。
【００３１】
以下、原理図の動作について説明する。
まず、データ記憶部２は、アプリケーションの指示に応じて、データＡ１，Ａ２，…，Ａｎを不揮発性メモリ６に記憶する。
【００３２】
記憶管理情報記憶部３は、データ記憶部２がデータＡ１，Ａ２，…，Ａｎを記憶するたびに、そのデータＡ１，Ａ２，…，Ａｎに関する記憶管理情報Ｂ１，Ｂ２，…，Ｂｎを不揮発性メモリ６に記憶する。
【００３３】
記憶完了情報記憶部４は、記憶管理情報記憶部３の記憶管理情報Ｂ１，Ｂ２，…，Ｂｎの各々の記憶が完了する毎に、記憶完了情報Ｃ１，Ｃ２，…，Ｃｎを記憶する。
【００３４】
記憶情報判断部５は、記憶管理情報記憶部３が記憶管理情報Ｂ１，Ｂ２，…Ｂｎの記憶途中の電源断等から復帰したとき、記憶完了情報Ｃ１，Ｃ２，…Ｃｎを参照して、記憶管理情報Ｂ１，Ｂ２，…Ｂｎの不揮発性メモリ６への記憶が完了していたか否かを判断する。
【００３５】
このように、記憶管理情報の不揮発性メモリへの記憶が完了したとき、記憶完了を示す記憶完了情報を不揮発性メモリに記憶するようにした。そして、記憶完了情報を参照して、記憶管理情報の書き込み完了を判断するようにした。よって、電源断等により中断された処理に対して、適正にデータの回復処理を行うことができる。
【００３６】
次に本発明の不揮発性メモリの記憶方法を携帯電話に適用した場合の例について説明する。図２は、本発明の不揮発性メモリの記憶方法を適用した携帯電話のハードウェア構成図である。図に示すように、携帯電話１０は、ＣＰＵ１０ａ、ＲＯＭ１０ｂ、ＲＡＭ１０ｃ、フラッシュＲＯＭ１０ｄ、ＲＡＭ１０ｅ、バックアップ電池１０ｆ、電池パック１０ｇ、バス１０ｈを有している。
【００３７】
ＣＰＵ１０ａは、バス１０ｈを介して、ＲＯＭ１０ｂ、ＲＡＭ１０ｃ、フラッシュＲＯＭ１０ｄ、及びＲＡＭ１０ｅと接続され、装置全体を制御している。
ＲＯＭ１０ｂには、ＯＳ(Operating System)プログラムや通話機能、住所録機能を持ったアプリケーションプログラムなどが記憶されている。また、ＣＰＵ１０ａが処理するデータをフラッシュＲＯＭ１０ｄに記憶するためのドライバプログラムが記憶されている。
【００３８】
ＲＡＭ１０ｃには、ＣＰＵ１４に実行させるＯＳやアプリケーション、ドライバの少なくとも一部が一時的に記憶される。また、ＲＡＭ１０ｃには、ＣＰＵ１０ａによる処理に必要な各種データが記憶される。
【００３９】
フラッシュＲＯＭ１０ｄには、消滅してはならないデータ、例えば、住所録などのデータが記憶される。フラッシュＲＯＭ１０ｄは、書き換え可能な不揮発性メモリであり、例えば、携帯電話１０のメイン電源である電池パック１０ｇからの電源が遮断されても、記憶したデータを保持する。なお、電源が遮断されてもデータを保持できる書き換え可能な不揮発性メモリであればよく、例えば、ＥＥＰＲＯＭであってもよい。
【００４０】
ＲＡＭ１０ｅには、例えば、携帯電話１０の機能設定するデータなどの消滅してはならないデータが記憶される。ＲＡＭ１０ｅは、バックアップ電池１０ｆから常時電源が供給されており、携帯電話１０のメイン電源である電池パック１０ｇによる電源が遮断されても、ＲＡＭ１０ｅは、記憶したデータを保持する。
【００４１】
電池パック１０ｇは、携帯電話１０の本体背面に取り付けられ、ＣＰＵ１０ａ、ＲＯＭ１０ｂ、ＲＡＭ１０ｃ、及びフラッシュＲＯＭ１０ｄに電源を供給している。
【００４２】
以上のような構成によって、携帯電話１０は、通話機能や住所録機能などを実現している。
次に、ＣＰＵ１０ａが、データをフラッシュＲＯＭ１０ｄに記憶するためのドライバを実行することによって有する機能について説明する。ＣＰＵ１０ａは、例えば、住所録のアプリケーションを実行することによって、データをフラッシュＲＯＭ１０ｄに書き込むとき、またデータをフラッシュＲＯＭ１０ｄから読み出すとき、ドライバの実行によってフラッシュＲＯＭ１０ｄにアクセスする。
【００４３】
図３は、ＣＰＵの機能ブロック図である。図に示すように、ＣＰＵ１０ａは、データ記憶部１１、管理情報記憶部１２、完了情報記憶部１３、及び記憶情報判断部１４を有している。また、図３には、フラッシュＲＯＭ１０ｄに記憶されるデータ１５、アドレス管理情報１６ａ、書き込み管理情報１６ｂ、コピー書き込み管理情報１６ｃが示してある。また、アドレス管理完了フラグ１７ａ、書き込み完了フラグ１７ｂ、コピー書き込み完了フラグ１７ｃが示してある。
【００４４】
データ記憶部１１は、アプリケーションから書き込み指示に応じて、データ１５をフラッシュＲＯＭ１０ｄの書き込み可能な領域に書き込む。書き込み可能な領域とは、フラッシュＲＯＭ１０ｄの消去されてからデータの書き込みが行われていない領域である。また、データ記憶部１１は、アプリケーションからの読み出し指示に応じて、記憶したデータ１５をフラッシュＲＯＭ１０ｄに記憶されているアドレス管理情報１６ａを参照して（後述詳細）、フラッシュＲＯＭ１０ｄから読み出す。また、データ記憶部１１は、記憶されているデータを消去単位（後述詳細）で消去する。
【００４５】
管理情報記憶部１２は、データ記憶部１１がデータ１５をフラッシュＲＯＭ１０ｄに記憶すると、そのデータ１５のアドレス管理に関するアドレス管理情報１６ａをフラッシュＲＯＭ１０ｄに記憶する。アドレス管理情報１６ａは、アプリケーションでのデータ１５を書き込むアドレス、実際にデータ記憶部１１がフラッシュＲＯＭ１０ｄにデータ１５を書き込むアドレス、及びこれらのアドレスが有効、又は無効であることを示す情報である。アプリケーションは、アドレスの他にファイル名によってもデータ１５の記憶先を指定する場合がある。この場合は、アドレスではなく、ファイル名がアドレス管理情報１６ａに含まれる。
【００４６】
データ記憶部１１は、アプリケーションからデータ１５の読み出し要求があった場合、アドレス管理情報１６ａを参照し、アプリケーション上のアドレスに対応する、実際にフラッシュＲＯＭ１０ｄに記憶されたアドレスを取得し、そのアドレスに記憶されたデータ１５を読み出す。
【００４７】
また、管理情報記憶部１２は、データ記憶部１１がデータ１５をフラッシュＲＯＭ１０ｄに記憶すると、そのデータ１５の書き込みに関する書き込み管理情報１６ｂをフラッシュＲＯＭ１０ｄに記憶する。書き込み管理情報１６ｂは、データ記憶部１１のフラッシュＲＯＭ１０ｄへのデータ１５の書き込み開始を示す情報、書き込み完了を示す情報、及び書き込みしたデータ１５を削除（無効）したことを示す情報である。
【００４８】
また、管理情報記憶部１２は、ガーベージコレクション処理（後述詳細）に関するコピー書き込み管理情報１６ｃをフラッシュＲＯＭ１０ｄに記憶する。コピー書き込み管理情報１６ｃは、ガーベージコレクション処理における、データコピーの開始を示す情報、コピーの完了を示す情報、及びコピー元のデータを削除したことを示す情報である。
【００４９】
完了情報記憶部１３は、管理情報記憶部１２のアドレス管理情報１６ａのフラッシュＲＯＭ１０ｄへの書き込みが完了すると、書き込みが完了したことを示すアドレス管理完了フラグ１７ａをフラッシュＲＯＭ１０ｄに書き込む。
【００５０】
また、完了情報記憶部１３は、管理情報記憶部１２の書き込み管理情報１６ｂのフラッシュＲＯＭ１０ｄへの書き込みが完了すると、書き込みが完了したことを示す書き込み完了フラグ１７ｂをフラッシュＲＯＭ１０ｄに書き込む。
【００５１】
また、完了情報記憶部１３は、管理情報記憶部１２のコピー書き込み管理情報１６ｃのフラッシュＲＯＭ１０ｄへの書き込みが完了すると、書き込みが完了したことを示すコピー書き込み完了フラグ１７ｃをフラッシュＲＯＭ１０ｄに書き込む。
【００５２】
記憶情報判断部１４は、管理情報記憶部１２のアドレス管理情報１６ａ、書き込み管理情報１６ｂ、又はコピー書き込み管理情報１６ｃの書き込み途中、電池パック１０ｇの例えば、本体からの脱離などによる電源断、又はハードウェアリセットが発生して復帰したとき、アドレス管理完了フラグ１７ａ、書き込み完了フラグ１７ｂ、又はコピー書き込み完了フラグ１７ｃを参照して、これらの管理情報の書き込みが完了していたか否かを判断する。
【００５３】
例えば、アドレス管理情報１６ａのフラッシュＲＯＭ１０ｄへの書き込み途中に電源断が発生し、アドレス管理情報１６ａの書き込みが完了しなかったとする。よって、フラッシュＲＯＭ１０ｄには、書き込みが完了してないことを示すアドレス管理完了フラグ１７ａが記憶されている。この場合、記憶情報判断部１４は、電源が復帰したとき、このアドレス管理完了フラグ１７ａを参照することによって、アドレス管理情報１６ａの書き込みが完了していないことを判断することができる。
【００５４】
アドレス管理完了フラグ１７ａ、書き込み完了フラグ１７ｂ、及びコピー書き込み完了フラグ１７ｃは、１ビットのデータであり、‘０’及び‘１’によって、書き込みが完了したか否かを示す。１ビットのデータにすることにより、フラッシュＲＯＭ１０ｄの各メモリセルにおける書き込み時間のばらつきを低減することができる。また、アドレス管理完了フラグ１７ａ、書き込み完了フラグ１７ｂ、及びコピー書き込み完了フラグ１７ｃを多ビットのデータであってもよい。この場合、記憶が完了したことを示す値以外は、全て無効（記憶が完了していない）と記憶情報判断部１４に判断させるようにする。これにより、例えば、電源断で誤った値で記憶されたことによる、記憶情報判断部１４の誤判断を低減することができる。
【００５５】
次に、フラッシュＲＯＭ１０ｄの記憶構造について説明する。図４は、フラッシュメモリの記憶構造の一例を示した図である。図に示すように、フラッシュＲＯＭ１０ｄの記憶領域は、大きく消去単位２１ａ，２１ｂ，…に分けられる。フラッシュＲＯＭ１０ｄは、消去単位２１ａ，２１ｂ，…毎に記憶したデータを消去することができる。各消去単位２１ａ，２１ｂ，…は、同じ記憶構造を有するので、以下では、消去単位２１ａについての記憶構造についてのみ説明する。
【００５６】
消去単位２１ａは、情報領域２２ａとデータ領域２２ｂに分けられる。情報領域２２ａは、さらに、ヘッダ領域２３、管理領域２４ａ，２５ａ、フラグ領域２４ｂ，２５ｂに分かれている。ヘッダ領域２３には、図３で説明したコピー書き込み管理情報１６ｃ、コピー書き込み完了フラグ１７ｃが記憶される。管理領域２４ａには、アドレス管理情報１６ａが記憶される。フラグ領域２４ｂには、アドレス管理完了フラグ１７ａが記憶される。管理領域２５ａには、書き込み管理情報１６ｂが記憶される。フラグ領域２５ｂには、書き込み完了フラグ１７ｂが記憶される。
【００５７】
アドレス管理情報１６ａとアドレス管理完了フラグ１７ａ、書き込み管理情報１６ｂと書き込み完了フラグ１７ｂ、コピー書き込み管理情報１６ｃとコピー書き込み完了フラグ１７ｃは、関連性を持つよう対応して記憶される。
【００５８】
データ領域２２ｂは、さらに小さな領域２６に分かれている。データ１５は、フラッシュＲＯＭ１０ｄの消去単位より小さい単位で領域２６に書き込まれる。図３で示したデータ記憶部１１が、１つのデータ１５をデータ領域２２ｂの領域２６に記憶すると、管理情報記憶部１２は、そのデータ１５に関連するアドレス管理情報１６ａ、書き込み管理情報１６ｂを記憶する。完了情報記憶部１３は、アドレス管理完了フラグ１７ａ、又は書き込み完了フラグ１７ｂを情報領域２２ａに記憶する。
【００５９】
ところで、アプリケーション上で、同一アドレスでのデータの書き換え処理を行った場合、フラッシュＲＯＭ１０ｄでは、同一アドレスでのデータの上書きができない。そのため、管理情報記憶部１２は、書き換え前のデータを無効とするため、書き換え前のデータのアドレス管理情報１６ａを無効にし、書き換え後の新たなデータのアドレスに関するアドレス管理情報１６ａを記憶する。このデータの書き換え処理が多くなると、無効（削除）となったデータがデータ領域２２ｂを占めるようになる。そのため、無効となったデータを整理するために、ガーベージコレクションの処理を行う。
【００６０】
データ記憶部１１は、未使用の消去単位を選択する。データ記憶部１１は、書き込み管理情報１６ｂの書き込みしたデータを削除したこと示す情報を参照し、削除されていないデータ（有効なデータ）のみを選択して、未使用の消去単位のデータ領域２２ｂにコピーしていく。
【００６１】
以下、図３のＣＰＵ１０ａの処理手順についてフローチャートを用いて説明する。図５は、ＣＰＵのデータ書き込みの処理手順を示したフローチャートである。ＣＰＵ１０ａは、以下の手順に従ってデータ１５をフラッシュＲＯＭ１０ｄに書き込む。
【００６２】
［ステップＳ１］ＣＰＵ１０ａのデータ記憶部１１は、フラッシュＲＯＭ１０ｄのデータ１５の書き込み可能な領域を検索する。
［ステップＳ２］ＣＰＵ１０ａの管理情報記憶部１２は、データ１５の書き込み開始を示す書き込み管理情報１６ｂをフラッシュＲＯＭ１０ｄに書き込む。
【００６３】
［ステップＳ３］ＣＰＵ１０ａの完了情報記憶部１３は、ステップ２における書き込み管理情報１６ｂの書き込みが完了したことを示す書き込み完了フラグ１７ｂをフラッシュＲＯＭ１０ｄに書き込む。
【００６４】
［ステップＳ４］ＣＰＵ１０ａのデータ記憶部１１は、アプリケーションが指示するデータ１５をステップＳ１で検索したフラッシュＲＯＭ１０ｄの書き込み可能な領域に書き込む。
【００６５】
［ステップＳ５］ＣＰＵ１０ａの管理情報記憶部１２は、アプリケーション上で指示されたアドレスと、データ１５が実際にフラッシュＲＯＭ１０ｄに記憶されたアドレスとを示す（対応関係を示す）アドレス管理情報１６ａをフラッシュＲＯＭ１０ｄに書き込む。
【００６６】
［ステップＳ６］ＣＰＵ１０ａの完了情報記憶部１３は、ステップＳ５におけるアドレス管理情報１６ａの書き込みが完了したことを示すアドレス管理完了フラグ１７ａをフラッシュＲＯＭ１０ｄに書き込む。
【００６７】
［ステップＳ７］ＣＰＵ１０ａの管理情報記憶部１２は、データ１５の書き込み完了を示す書き込み管理情報１６ｂをフラッシュＲＯＭ１０ｄに書き込む。
［ステップＳ８］ＣＰＵ１０ａの完了情報記憶部１３は、書き込み管理情報１６ｂの書き込みが完了したことを示す書き込み完了フラグ１７ｂをフラッシュＲＯＭ１０ｄに書き込む。
【００６８】
ここで、ＣＰＵ１０ａがステップＳ２、ステップＳ５、又はステップＳ７の処理を実行しているとき、電源断が発生したとする。電源断から復帰したとき、ＣＰＵ１０ａの記憶情報判断部１４は、アドレス管理完了フラグ１７ａ、書き込み完了フラグ１７ｂを参照し、アドレス管理情報１６ａ、書き込み管理情報１６ｂの書き込みが完了していたか否かを判断する。アドレス管理情報１６ａ、書き込み管理情報１６ｂの書き込みが完了していた場合、ＣＰＵ１０ａは、中断された処理を再開すること等により、適正にデータの回復処理を行うことができる。アドレス管理情報１６ａ、書き込み管理情報１６ｂ書き込みが完了していない場合、例えば、アドレス管理情報１６ａ、書き込み管理情報１６ｂの回復処理をする。又はアドレス管理情報１６ａ、書き込み管理情報１６ｂを無効にして、その後の処理に影響がないようにする。
【００６９】
次に、フラッシュＲＯＭ１０ｄのデータの書き換え処理について説明する。図６は、ＣＰＵのデータ書き換えの処理手順を示したフローチャートである。ＣＰＵ１０ａは、以下の手順に従ってフラッシュＲＯＭ１０ｄのデータを書き換える。
【００７０】
［ステップＳ１１］ＣＰＵ１０ａのデータ記憶部１１は、書き換えをする新しいデータ１５（以下、書き換えデータ）のフラッシュＲＯＭ１０ｄの書き込み可能な領域を検索する。
【００７１】
［ステップＳ１２］ＣＰＵ１０ａの管理情報記憶部１２は、書き換えデータ１５の書き込み開始を示す書き込み管理情報１６ｂをフラッシュＲＯＭ１０ｄに書き込む。
【００７２】
［ステップＳ１３］ＣＰＵ１０ａの完了情報記憶部１３は、ステップＳ１２の書き込み管理情報１６ｂの書き込みが完了したことを示す書き込み完了フラグ１７ｂをフラッシュＲＯＭ１０ｄに書き込む。
【００７３】
［ステップＳ１４］ＣＰＵ１０ａのデータ記憶部１１は、アプリケーションが指示する書き換えデータ１５をステップＳ１１で検索したフラッシュＲＯＭ１０ｄの書き込み可能な領域に書き込む。
【００７４】
［ステップＳ１５］ＣＰＵ１０ａの管理情報記憶部１２は、アプリケーション上で指示されたアドレスと、書き換えデータ１５が実際にフラッシュＲＯＭ１０ｄに記憶されるアドレスとを示す（対応関係を示す）アドレス管理情報１６ａをフラッシュＲＯＭ１０ｄに書き込む。
【００７５】
［ステップＳ１６］ＣＰＵ１０ａの完了情報記憶部１３は、ステップＳ１５におけるアドレス管理情報１６ａの書き込みが完了したことを示すアドレス管理完了フラグ１７ａをフラッシュＲＯＭ１０ｄに書き込む。
【００７６】
［ステップＳ１７］ＣＰＵ１０ａの管理情報記憶部１２は、書き換え前のデータに関するアドレス管理情報１６ａにアドレス対応関係を無効にするよう書き込む。
【００７７】
［ステップＳ１８］ＣＰＵ１０ａの完了情報記憶部１３は、ステップ１７におけるアドレス管理情報１６ａの書き込みが完了したことを示すアドレス管理完了フラグ１７ａをフラッシュＲＯＭ１０ｄに書き込む。
【００７８】
［ステップＳ１９］ＣＰＵ１０ａの管理情報記憶部１２は、書き換え前のデータに関する書き込み管理情報１６ｂにデータを削除した旨の情報を書き込む。
［ステップＳ２０］ＣＰＵ１０ａの完了情報記憶部１３は、ステップＳ１９における書き込み管理情報１６ｂの書き込みが完了したことを示す書き込み完了フラグ１７ａをフラッシュＲＯＭ１０ｄに書き込む。
【００７９】
［ステップＳ２１］ＣＰＵ１０ａの管理情報記憶部１２は、書き換えデータ１５の書き込み完了を示す書き込み管理情報１６ｂをフラッシュＲＯＭ１０ｄに記憶する。
【００８０】
［ステップＳ２２］ＣＰＵ１０ａの完了情報記憶部１３は、ステップＳ２１における書き込み管理情報１６ｂの書き込みが完了したことを示す書き込み完了フラグ１７ｂをフラッシュＲＯＭ１０ｄに書き込む。
【００８１】
ここで、ＣＰＵ１０ａがステップＳ１２、ステップＳ１５、ステップＳ１７、ステップＳ１９、又はステップＳ２１の処理を実行しているとき、電源断が発生したとする。電源断から復帰したとき、ＣＰＵ１０ａの記憶情報判断部１４は、アドレス管理完了フラグ１７ａ、書き込み完了フラグ１７ｂを参照し、アドレス管理情報１６ａ、書き込み管理情報１６ｂの書き込みが完了していたか否かを判断する。アドレス管理情報１６ａ、書き込み管理情報１６ｂの書き込みが完了していた場合、ＣＰＵ１０ａは、中断された処理を再開すること等により、適正にデータの回復処理を行うことができる。アドレス管理情報１６ａ、書き込み管理情報１６ｂの書き込みが完了していない場合、例えば、アドレス管理情報１６ａ、書き込み管理情報１６ｂの回復処理をする。又はアドレス管理情報１６ａ、書き込み管理情報１６ｂを無効にして、その後の処理に影響がないようにする。
【００８２】
次に、ガーベージコレクションについて説明する。図７は、ＣＰＵのガーベージコレクションの処理手順を示したフローチャートである。ＣＰＵ１０ａは、以下の手順に従ってフラッシュＲＯＭ１０ｄのガーベージコレクションを行う。
【００８３】
［ステップＳ３１］ＣＰＵ１０ａのデータ記憶部１１は、無効となったデータを整理するコピー元ユニット（ユニット：消去単位）を選択する。
［ステップＳ３２］ＣＰＵ１０ａの管理情報記憶部１２は、コピー先ユニットのヘッダ領域にコピーの開始を示すコピー書き込み管理情報１６ｃを書き込む。
【００８４】
［ステップＳ３３］ＣＰＵ１０ａの完了情報記憶部１３は、ステップＳ３２におけるコピー書き込み管理情報１６ｃの書き込みが完了したことを示すコピー書き込み完了フラグ１７ｃをコピー先ユニットのヘッダ領域に書き込む。
【００８５】
［ステップＳ３４］ＣＰＵ１０ａのデータ記憶部１１は、コピー元ユニットの有効なデータをコピー先ユニットにコピーする。データ記憶部１１は、書き込み管理情報１６ｂのデータを削除したこと示す情報を参照し、削除されていない有効なデータのみを選択して、コピー先ユニットにコピーする。
【００８６】
［ステップＳ３５］ＣＰＵ１０ａの管理情報記憶部１２は、コピー先ユニットのヘッダ領域にコピーの完了を示すコピー書き込み管理情報１６ｃを書き込む。
［ステップＳ３６］ＣＰＵ１０ａの完了情報記憶部１３は、ステップＳ３５におけるコピー書き込み管理情報１６ｃの書き込みが完了したことを示すコピー書き込み完了フラグ１７ｃをコピー先ユニットのヘッダ領域に書き込む。
【００８７】
［ステップＳ３７］ＣＰＵ１０ａの管理情報記憶部１２は、コピー元ユニットのヘッダ領域に削除を示すコピー書き込み管理情報１６ｃを書き込む。
［ステップＳ３８］ＣＰＵ１０ａの完了情報記憶部１３は、ステップＳ３７におけるコピー書き込み管理情報１６ｃの書き込みが完了したことを示すコピー書き込み完了フラグ１７ｃをコピー先ユニットのヘッダ領域に書き込む。
【００８８】
［ステップＳ３９］ＣＰＵ１０ａのデータ記憶部１１は、コピー元ユニットの全データを消去する。
［ステップＳ４０］ＣＰＵ１０ａの管理情報記憶部１２は、コピー元ユニットのヘッダ領域にヘッダ情報を書き込む。コピー元ユニットをスペアユニットにする。
【００８９】
［ステップＳ４１］ＣＰＵ１０ａの完了情報記憶部１３は、ステップＳ４０におけるヘッダ情報の書き込みが完了したことを示すコピー書き込み完了フラグ１７ｃをコピー先ユニットのヘッダ領域に書き込む。
【００９０】
ここで、ＣＰＵ１０ａがステップＳ３２、ステップＳ３５、ステップＳ３７、又はステップＳ４０の処理を実行しているとき、電源断が発生したとする。電源断から復帰したとき、ＣＰＵ１０ａの記憶情報判断部１４は、コピー書き込み完了フラグ１７ｃを参照し、コピー書き込み管理情報１６ｃの書き込みが完了していたか否かを判断する。コピー書き込み管理情報１６ｃの書き込みが完了していた場合、ＣＰＵ１０ａは、データの再コピーをすることにより、適正にデータの回復処理を行うことができる。コピー書き込み管理情報１６ｃの書き込みが完了していない場合、例えば、コピー書き込み管理情報１６ｃの回復処理をする。又はコピー書き込み管理情報１６ｃを無効にして、その後の処理に影響がないようにする。
【００９１】
このように、アドレス管理情報１６ａ、書き込み管理情報１６ｂ、及びコピー書き込み管理情報１６ｃの書き込みが完了したとき、書き込みが完了したことを示すアドレス管理完了フラグ１７ａ、書き込み完了フラグ１７ｂ、及びコピー書き込み完了フラグ１７ｃを記憶するようにし、電源断等の復帰後、これらのフラグを参照し、管理情報の書き込みが完了していたかを判断するようにした。よって、管理情報の書き込みが完了していた場合、ＣＰＵ１０ａは、データの再コピーをすることにより、適正にデータの回復処理を行うことができる。
【００９２】
なお上記では、アドレス管理情報１６ａ、書き込み管理情報１６ｂ、コピー書き込み管理情報１６ｃ、アドレス管理完了フラグ１７ａ、書き込み完了フラグ１７ｂ、及びコピー書き込み完了フラグ１７ｃをフラッシュＲＯＭ１０ｄに記憶するようにしたが、これらの管理情報及びフラグは、電源断においてもデータ消滅しないメモリに記憶されればよく、図２のＲＡＭ１０ｅに記憶するようにしてもよい。
【００９３】
【発明の効果】
以上説明したように本発明では、データの記憶管理に関する記憶管理情報の不揮発性メモリへの記憶が完了したことを示す記憶完了情報を不揮発性メモリに記憶する。そして、処理断から復帰したとき、記憶完了情報を参照することによって、記憶管理情報の書き込み完了を判断するようにした。これにより、処理断からの復帰後、適正にデータの回復処理を行うことができるようになる。
【図面の簡単な説明】
【図１】本発明の原理を説明する原理図である。
【図２】本発明の不揮発性メモリの記憶方法を適用した携帯電話のハードウェア構成図である。
【図３】ＣＰＵの機能ブロック図である。
【図４】フラッシュメモリの記憶構造の一例を示した図である。
【図５】ＣＰＵのデータ書き込みの処理手順を示したフローチャートである。
【図６】ＣＰＵのデータ書き換えの処理手順を示したフローチャートである。
【図７】ＣＰＵのガーベージコレクションの処理手順を示したフローチャートである。
【図８】ドライバのデータ書き込みの処理手順を示したフローチャートである。
【図９】ドライバのデータ書き換えの処理手順を示したフローチャートである。
【図１０】ドライバのガーベージコレクションの処理手順を示したフローチャートである。
【符号の説明】
１  中央演算処理装置
２  データ記憶部
３  記憶管理情報記憶部
４  記憶完了情報記憶部
５  記憶情報判断部
６  不揮発性メモリ
１０  携帯電話
１０ａ  ＣＰＵ
１０ｄ  フラッシュＲＯＭ
１１  データ記憶部
１２  管理情報記憶部
１３  完了情報記憶部
１４  記憶情報判断部
１５，Ａ１〜Ａｎ  データ
１６ａ  アドレス管理情報
１６ｂ  書き込み管理情報
１６ｃ  コピー書き込み管理情報
１７ａ  アドレス管理完了フラグ
１７ｂ  書き込み完了フラグ
１７ｃ  コピー書き込み完了フラグ
Ｂ１〜Ｂｎ  記憶管理情報
Ｃ１〜Ｃｎ  記憶完了情報
【図１】
2004206381.tif 000003
【図２】
2004206381.tif 000004
【図３】
2004206381.tif 000005
【図４】
2004206381.tif 000006
【図５】
2004206381.tif 000007
【図６】
2004206381.tif 000008
【図７】
2004206381.tif 000009
【図８】
2004206381.tif 000010
【図９】
2004206381.tif 000011
【図１０】
2004206381.tif 000012