(57)【要約】【課題】不揮発性メモリへの書込可能回数を増加させる。【解決手段】入力データが書き換えを要しない初期データか、複数回の書き換えの可能性のあるデータかを、予め定めた書込ルールに基づいて判別する。初期データであるときは当該入力データを不揮発性メモリの初期データブロック５１に書き込む第１書込処理を行う。他方、入力データが複数回の書き換えの可能性のあるデータであるときは、所定回数のデータ書込を可能にする上で必要となる数の実データブロック５３を不揮発性メモリにおいて確保し、確保した実データブロック５３のうち、書込可能領域に入力データの逐次追記を行い、書込済の実データブロック５３については、複数ブロック毎に消去する第２書込処理を行う。【選択図】図２
2010026794.tif 000002
【特許請求の範囲】
【請求項１】
データ書込可能回数に一定の制限のある不揮発性メモリへのデータの書込を制御する装置であって、
入力データを受け付ける受付手段と、
前記入力データが書き換えを要しない第１データか書き換えを要する第２データかを、予め定めた書込ルールに基づいて判別する判別手段と、
入力データが前記第１データであるときは当該入力データを前記不揮発性メモリの第１データ領域に書き込む第１書込処理を行い、他方、前記入力データが前記第２データであるときは、所定回数のデータ書込を可能にする上で必要となる数の第２データ領域を前記不揮発性メモリにおいて確保し、確保した第２データ記録領域のうち、書込可能領域に前記入力データの逐次追記を行い、書込済の第２データ領域については、複数領域毎に消去する第２書込処理とを行う書込処理手段と、
を有するメモリ制御装置。
【請求項２】
前記書込処理手段は、前記書込済の第２データ領域を前記不揮発性メモリの所定領域に一時的に保存しておき、予め定めた条件を満たした時点で消去する、
請求項１記載のメモリ制御装置。
【請求項３】
前記書込処理手段は、前記第２データ領域への書込回数を累計し、累計値が所定値に達したときは、前記確保した数の前記第２データ領域を前記不揮発性メモリにおいて新たに確保するとともに、確保した第２データ領域へのデータ再構築のための処理を行う、
請求項１又は２記載のメモリ制御装置。
【請求項４】
前記書込ルールは、第１データ領域のアドレスに書込可能なアドレス範囲を記録したものであり、
前記判別手段は、前記入力データを書き込むべきアドレスが、前記第１データ領域のアドレス範囲内かどうかを判別し、アドレス範囲内のときは当該入力データを前記第１データ領域に書き込むべきデータと判別し、前記アドレス範囲外のときは当該入力データを前記第２データ領域に書き込むべきデータと判別する、
請求項１、２又は３記載のメモリ制御装置。
【請求項５】
前記書込ルールは、前記不揮発性メモリへの書込順序とそのデータ記録領域との関係を記録したものであり、
前記判別手段は、前記入力データが前記不揮発性メモリに書き込む最初のデータであるときは、当該入力データを前記第１データ領域に書き込むべきデータと判別し、それ意外のデータを前記第２データ領域に書き込むべきデータと判別する、
請求項１乃至４のいずれかの項記載のメモリ制御装置。
【請求項６】
データ書込可能回数に一定の制限のある不揮発性メモリへのデータの書込を制御する装置が実行する方法であって、
入力データを受け付け、受け付けた入力データが書き換えを要しない第１データか書き換えを要する第２データかを、予め定めた書込ルールに基づいて判別するステップと、
入力データが前記第１データであるときは当該入力データを前記不揮発性メモリの第１データ領域に書き込む第１書込処理を行い、他方、前記入力データが前記第２データであるときは、所定回数のデータ書込を可能にする上で必要となる数の第２データ領域を前記不揮発性メモリにおいて確保し、確保した第２データ記録領域のうち、書込可能領域に前記入力データの逐次追記を行い、書込済の第２データ領域については、複数領域毎に消去する第２書込処理とを行うステップとを有する、
メモリ制御方法。
【請求項７】
コンピュータを、データ書込可能回数に一定の制限のある不揮発性メモリへのデータの書込を制御するメモリ制御装置として動作させるためのコンピュータプログラムであって、
前記コンピュータを、
入力データを受け付ける受付手段、
前記入力データが書き換えを要しない第１データか書き換えを要する第２データかを、予め定めた書込ルールに基づいて判別する判別手段、
入力データが前記第１データであるときは当該入力データを前記不揮発性メモリの第１データ領域に書き込む第１書込処理を行い、他方、前記入力データが前記第２データであるときは、所定回数のデータ書込を可能にする上で必要となる数の第２データ領域を前記不揮発性メモリにおいて確保し、確保した第２データ記録領域のうち、書込可能領域に前記入力データの逐次追記を行い、書込済の第２データ領域については、複数領域毎に消去する第２書込処理とを行う書込処理手段、
として機能させるコンピュータプログラム。
【請求項８】
請求項７記載のコンピュータプログラムを記載して成る、
コンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置において、データの書込可能回数に一定の制限のある不揮発性メモリへのデータの書込可能回数を、その不揮発性メモリの一般的な使い方をするよりも、多くするメモリ制御装置、方法及びコンピュータプログラムに関する。
【背景技術】
【０００２】
ＥＥＰＲＯＭ（Electrically Erasable and Programmable Read Only Memory ）、フラッシュメモリのような不揮発性メモリは、データの書込可能回数、正確には消去回数に制限がある。不揮発性メモリでは、データを書き込む際に、それまで書き込まれていたデータを消去する必要があるためである。書込可能回数は、例えば、ＥＥＰＲＯＭは約１０万回（参考値）であるのに対し、フラッシュメモリは１０００回（参考値）程度である。そのため、データの書換頻度の高い用途では、ＥＥＰＲＯＭが使われ、そうでない箇所では、一般に、フラッシュメモリが使われている。
【０００３】
ＥＥＰＲＯＭは、書込可能回数が多い反面、フラッシュメモリに比べてかなり高価である。そのため、ＥＥＰＲＯＭをデータを記録媒体として使用する情報処理装置において、このデータ記録媒体をフラッシュメモリで代用することができれば、データ記録媒体を低コストで実現できる期待がある。
【０００４】
ＥＥＰＲＯＭをフラッシュメモリで代用するには、フラッシュメモリにおいてＥＥＰＲＯＭと同じ程度の回数の書込を保証する仕組みが必要となる。そのための従来技術して、例えば非特許文献１に紹介されている「ＥＥＰＲＯＭエミュレーション」と呼ばれる技術がある。フラッシュメモリでは、データ書き込む際に、それまで書き込まれていたデータを消去する必要があることは上述したとおりであるが、ＥＥＰＲＯＭエミュレーション（登録商標）では、そのデータの消去を複数の書込領域毎に行うことで、データ書込時の消去回数を減らし、見かけ上の書込可能回数をＥＥＰＲＯＭ程度まで多くする。
【非特許文献１】「アプリケーションノート Ｕ17057ＪＪ3Ｖ0ＡＮ00」、第3版、ＮＥＣエレクトロニクス株式会社、2004年11月、ｐ．25−27
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ＥＥＰＲＯＭでも、非特許文献１に紹介されているＥＥＰＲＯＭエミュレーションでも、データ書込可能回数に一定の制限のあることは変わりがない。ところが、書込対象となるアドレスに着目すると、１度しか書き込まれないアドレスもある。例えば、２０４８バイト分のアドレスが、以下の３種類に分類できるとする。
第１アドレス群：000Hから0100Ｈの256バイト分のアドレス
第２アドレス群：0100Hから0500Ｈの1024バイト分のアドレス
第３アドレス群：0500Hから0800Ｈの768バイト分のアドレス
第１および第３アドレス群は、頻繁に書き換えが発生するものとする。これに対して、第２アドレス群は、一度だけデータを書き込めば、その後は、読込だけ発生するような、例えば何かの固定パラメータ値を保存している領域であるとする。このとき、すべてのアドレス群を同じ態様で扱うと、書き換えの対象となるデータサイズは、何らの工夫も施さなければ２０４８バイトとなり、実際には２５６＋７６８＝１０２４バイトで足りるにも関わらず、書込可能回数の上限が減ることになる。
【０００６】
本発明は、書込領域毎のアドレスを管理することができ、不揮発性メモリの書込可能回数も通常の使用形態のときよりも増加させることができる特徴的なメモリ制御装置、方法、並びに、コンピュータをこのような装置として動作させることができるコンピュータプログラムを提供することを課題とする。
【課題を解決するための手段】
【０００７】
本発明が提供するメモリ制御装置は、データ書込可能回数に一定の制限のある不揮発性メモリへのデータの書込を制御する装置であって、入力データを受け付ける受付手段と、前記入力データが書き換えを要しない第１データか書き換えを要する第２データかを、予め定めた書込ルールに基づいて判別する判別手段と、入力データが前記第１データであるときは当該入力データを前記不揮発性メモリの第１データ領域に書き込む第１書込処理を行い、他方、前記入力データが前記第２データであるときは、所定回数のデータ書込を可能にする上で必要となる数の第２データ領域を前記不揮発性メモリにおいて確保し、確保した第２データ記録領域のうち、書込可能領域に前記入力データの逐次追記を行い、書込済の第２データ領域については、複数領域毎に消去する第２書込処理とを行う書込処理手段と、を有する。
【０００８】
ある実施の態様では、前記書込処理手段は、前記書込済の第２データ領域を前記不揮発性メモリの所定領域に一時的に保存しておき、予め定めた条件を満たした時点で消去する。書込処理手段は、また、前記第２データ領域への書込回数を累計し、累計値が所定値に達したときは、前記確保した数の前記第２データ領域を前記不揮発性メモリにおいて新たに確保するとともに、確保した第２データ領域へのデータ再構築のための処理を行う。
【０００９】
前記書込ルールは、例えば第１データ領域のアドレスに書込可能なアドレス範囲を記録したものであり、前記判別手段は、前記入力データを書き込むべきアドレスが、前記第１データ領域のアドレス範囲内かどうかを判別し、アドレス範囲内のときは当該入力データを前記第１データ領域に書き込むべきデータと判別し、前記アドレス範囲外のときは当該入力データを前記第２データ領域に書き込むべきデータと判別する。あるいは、前記書込ルールは、前記不揮発性メモリへの書込順序とそのデータ記録領域との関係を記録したものであり、前記判別手段は、前記入力データが前記不揮発性メモリに書き込む最初のデータであるときは、当該入力データを前記第１データ領域に書き込むべきデータと判別し、それ意外のデータを前記第２データ領域に書き込むべきデータと判別する。
【００１０】
本発明が提供するメモリ制御方法は、データ書込可能回数に一定の制限のある不揮発性メモリへのデータの書込を制御する装置が実行する方法であって、入力データを受け付け、受け付けた入力データが書き換えを要しない第１データか書き換えを要する第２データかを、予め定めた書込ルールに基づいて判別するステップと、入力データが前記第１データであるときは当該入力データを前記不揮発性メモリの第１データ領域に書き込む第１書込処理を行い、他方、前記入力データが前記第２データであるときは、所定回数のデータ書込を可能にする上で必要となる数の第２データ領域を前記不揮発性メモリにおいて確保し、確保した第２データ記録領域のうち、書込可能領域に前記入力データの逐次追記を行い、書込済の第２データ領域については、複数領域毎に消去する第２書込処理とを行うステップとを有する方法である。
【００１１】
本発明が提供するコンピュータプログラムは、コンピュータを、データ書込可能回数に一定の制限のある不揮発性メモリへのデータの書込を制御するメモリ制御装置として動作させるためのコンピュータプログラムであって、前記コンピュータを、上記の受付手段、判別手段、書込処理手段、として機能させるものである。このコンピュータプログラムは、通常、記録媒体に記録されて流通する。
【発明の効果】
【００１２】
本発明によれば、入力データが書き換えを要しない第１データであるときは第１データ領域に書き込まれ、他方、入力データが書き換えを要する第２データであるときは、所定回数のデータ書込を可能にする上で必要となる数の第２データ領域を不揮発性メモリにおいて確保し、確保した第２データ記録領域のうち、書込可能領域に入力データの逐次追記を行い、書込済の第２データ領域については、複数領域毎に消去するようにしたので、第１データ領域についての書き換えが不要となり、書込可能回数が増加するという特有の効果が得られる。
【発明を実施するための最良の形態】
【００１３】
［構成図］
図１は、本発明の実施の形態例となるメモリ制御装置の構成例を示す図である。このメモリ制御装置１は、プロセッサ２と、本発明のコンピュータ・プログラムを格納したプログラムメモリ３と、揮発性メモリであるワーキングメモリ４とを含む。そして、プロセッサ２が、コンピュータ・プログラムをワーキングメモリ４に展開し、これを実行することにより、データバス６を介して接続された不揮発性メモリ５に対して特徴的なメモリアクセス制御を行う機能、すなわち、受付手段、判別手段、書込処理手段および読込手段を実現する。ワーキングメモリ５には、データ、書込回数の累計値、書込ルールを一時的に保持するバッファも形成される。
【００１４】
［不揮発性メモリ］
不揮発性メモリ５は、ＥＥＰＲＯＭ、フラッシュメモリなど、不揮発の書込領域を確保できるメモリ媒体であり、アドレス体系を持ち、レジストリのようなＩＤ又はラベル（ともに識別情報の一種）で管理可能なものである。書込領域はグループ化されている。以後の説明では、書込単位となる複数の書込領域のグループのうち、最小単位のグループをエントリ、複数のエントリのグループをブロックと呼ぶ。
【００１５】
複数のエントリは、連続するアドレスによりシーケンシャルに関連付けられている。エントリにおけるシーケンシャルの関連付けは、例えば、確保したエントリの数を最大値とするシーケンス番号を割り当て、エントリへの正常な書込が進む度に、最初のエントリを起点とし、最後のエントリであることを表す数値を終点として、シーケンス番号を逐次小さい値に更新し、更新したシーケンス番号を当該エントリのフラグ情報としてヘッダブロック（エントリ）に書き込むことにより行う。複数のブロック間についても同様の手順で関連付けを行う。
【００１６】
この不揮発性メモリ５の構造例を図２に示す。不揮発性メモリ５は、複数のブロックで構成される。すなわち、初期データ用の初期データブロック５１、管理領域ブロック５２及び実データブロック５３を有している。これらのブロック５１〜５３は、メモリ制御装置１により形成される。
【００１７】
初期データブロック５１は、不揮発性メモリ５に初期に書き込む初期データのサイズに応じて、例えば２ブロック分（例えば、３２ブロックの場合、０〜３１の番号で識別される個々のブロックのうち、０，１の２つのブロック）を確保する。
初期データは、原則として１度だけ書き込まれるデータ、つまり書き換えを要しないデータであり、例えば既に書き込まれているデータを読み込むプログラムによってダイレクトに参照される。なお、初期データが存在しないときは、初期値が用意される。初期値は例えば「FFH」、あるいは「0XFF」のような値である。初期データブロック５１の書込領域が初期値で埋められているときは、そこに書き込まれているものが何もないため、初期データとして書込可能状態にあることを表す。逆に、指定のアライメントアドレスからサイズ分のデータが、初期値で埋められていない場合は、そこに初期データとして既に書き込まれていることを表す。
【００１８】
管理領域ブロック５２には、交互に使用する２ブロック（例えば、２，３の２つのブロック）を割り当てる。この管理領域ブロック５２は、実データブロック５３が、現在、どのようなブロック構成になっているかを示す管理情報を書き込むためのブロックである。
【００１９】
実データブロック５３は、ヘッダブロックと実データブロックのいずれかを任意に選択することができる。ヘッダブロックは、どの実データブロックのどのアドレスにどのデータが存在し、その書込状態がどのようになっているかを示すヘッダ情報を書き込むためのブロックである。実データブロックは、メモリ制御装置１が外部（アプリケーション等）より取得し、装置内で実際に扱うデータ（実データという）を書き込むためのブロックである。
【００２０】
なお、管理領域ブロック５２及び実データブロック５３は、それぞれ複数のエントリを有する。エントリは、実データブロック５３の場合、所定のデータサイズを１回の書込単位とする領域である。エントリおよび他のブロックがシーケンシャルに関連付けられていることは、上述の通りである。図２の例では、管理領域ブロック５２についてのエントリ５２１と、実データブロック５３についてのエントリ５３１とが示されている。
【００２１】
実データブロック５３におけるヘッダブロック及び管理領域ブロックの割当例を図３に示す。実データブロックは、図上段に示すように、本例では、１６バイト固定長とする。ヘッダブロックは、８バイト固定長とする。ヘッダ情報は、４バイトのスタートマーク領域（StartMark：ＳＭと略する）と、４バイトのエンドマーク領域（EndMark：ＥＭと略する）とに書き込む。書込は、ＳＭ、実データ、ＥＭの順に行う。ＳＭに書き込む情報が第１フラグ情報、ＥＭに書き込む情報が第２フラグ情報となる。このような順番で書込を行うことにより、実際に実データが実データブロックに書き込まれたか書き込まれないかは、ＳＭおよびＥＭへのヘッダ情報の書込が正常に行われたどうかによって、容易に判別することができる。
【００２２】
ＳＭは、フラグ（１バイト）、シーケンス番号（１バイト）、物理アドレスのブロック番号（１バイト）、エントリ位置（１バイト）の４バイトで構成される。フラグとシーケンス番号は、あるアドレスへの複数回にわたるデータの書込があったときに、これらがシーケンシャルにすべて行われたことを保証するために使用する情報である。従えば２５６バイトの書込があったときは、個々の実データブロックが１６バイト固定長であるために１６回に分けて書込を行うことになる。このとき、１６回の書込がシーケンシャルにすべて行われたことを保証するためにフラグとシーケンス番号が使用される。
【００２３】
各回の書込単位が分割されたシーケンスの何番目なのかを表すのがシーケンス番号である。シーケンシャル番号は、最初のエントリが最大値で、最後のエントリが０にされる。フラグには、シーケンス番号が有効であることを示す「ＳＥＱ」と、最初のシーケンス番号を示す「ＴＯＰ_ＳＥＱ」とが設定される。
書き込まれているデータの検索（読込）は、最新エントリ、つまり最後のエントリから開始される。シーケンス番号は、書込が進むにつれて小さい値となり、最後は０となる。従って、検索時に、フラグに「ＳＥＱ」があり、且つ、シーケンス番号が最後を示す「０」であれば、それ以降に続くフラグ「ＴＯＰ_ＳＥＱ」までの実データは、正しく実データブロックに書き込まれて、有効な書込状態であることを示す。逆に、検索（読込）時に、フラグに「ＳＥＱ」があり、且つ、シーケンス番号が「０」以外であれば、それ以降に続くフラグ「ＴＯＰ_ＳＥＱ」までの実データは無効、つまり無いものとして扱う。
【００２４】
但し、アプリケーションからの要求によって無効として扱うだけで、これをログとして別途読み出すことは可能である。そのため、メモリ制御装置１は、無効データが書き込まれている実データブロックおよびヘッダブロックの書込状態を保持したまま、書込対象となる新たな実データを取得し、取得した新たな実データのサイズを書き込むための実データブロックおよびヘッダブロックのエントリを新たに確保し、保持してある実データブロックおよびヘッダブロックの書込状態を、一定の消去条件を満たしたときに、一括して消去するようにしている。これにより、何らの機能を新たに設けなくとも、不具合解析用のログとして利用することができる。
【００２５】
物理アドレスのブロック番号は、対象となる実データブロックが何番目のブロックかを識別するための番号であり、エントリ位置は、そのブロックのエントリが何番目のものかを示している。ブロック番号は、２５６バイトの場合、例えば「0」〜「255」のいずれかとなる。エントリ位置は、データ長が１６バイト固定で１ブロックが２ｋＢとして、「0」〜「127」のいずれかである。このブロック番号とエントリ位置が、実際にデータを書き込む物理アドレスに対応したものとなる。
【００２６】
ＥＭは、同一論理アドレスの直前のエントリ位置（２バイト）、論理アドレス（２バイト）の４バイトで構成される。直前のエントリ位置は、最新に書き込まれたデータを特定するための情報である。論理アドレスは、１６バイトアライメント（固定長）であるが、ある論理アドレスに書込を行うときに、その論理アドレスを読み込み、新しいデータで書き込む。これにより、その論理アドレスの最新データは、最後に書き込まれたデータだけを読み込めば良いことになる。この最後に書き込まれたデータのエントリ位置が「直前のエントリ位置」となる。
【００２７】
ＳＭ及びＥＭをこのように構成することにより、読込時に、そこに書き込まれている情報を参照するだけで、実データブロックへのデータの書込が正常に行われているかどうかを容易かつ迅速に判別することができる。
【００２８】
管理領域ブロック５２は、再構築回数（２バイト）、フラグ（１バイト）、ブロック番号（１バイト）の４バイトから成る。「再構築」とは、更新し続けたデータをあるタイミングで本当に必要なデータだけを集めたものにする処理である。本当に必要なデータとは、一度でもデータが書き込まれたアドレスは、そのアドレスの値を引き継がなければならないということである。このような処理を可能にするには、書込領域のデータを消去して新たな書込領域を確保するとともに、確保した新たな書込領域に、最適化された古いデータの一部をコピーする。再構築は、書込領域を初期値に置き換える初期化とは区別されるものである。再構築回数は、現在までの再構築の回数を示している。再構築回数には、一定の限界がある。
【００２９】
「ブロック番号」は、使用している実データブロック５３を識別するためのブロック番号である。そのブロックが現在どのような状態かを示すのがフラグである。フラグは、「再構築中」、「ヘッダ」、「データ」、「再構築完了」のいずれかを示す。「ヘッダ」及び「データ」は、そのブロックの内容を示している。ブロック番号は、空きブロックの中から選択される。空きブロックは、本例では、消去済みであったときに空きブロックと判定される公知の機能を利用して判定する。
【００３０】
なお、再構築を行うと、再構築前のブロック（エントリを含む）の情報は消去される。そのため、上記の空きブロックは、消去済みのブロックとなる。消去済のブロックは、ブロック内のすべてが未書込であることを示す［0XFF］であれば良いが、実際には、書込のできない不良ブロックの出現の可能性を否定できない。この場合、管理領域ブロック５２のフラグに「不良ブロック」を設定し、不良ブロックの可能性のあるブロックの最初のエントリ部分を試し書き専用にして判定することも考えられる。しかし、一部のエントリのチェックでそのブロックの判定を行うことは、信頼性に欠ける。空きブロックの選択は、再構築時にだけ行われることに着目すれば、書込に失敗したときに、そのエントリをスキップする仕組みがあれば十分である。
【００３１】
メモリ制御装置１は、不揮発性メモリ５を初期化するときは、最初に再構築すべきかどうかを判定する。再構築済であれば、通常の動作となる。この通常の動作の途中で電源の切断等があっても、ＳＭ、実データブロック、ＥＭの順番に従って書き込まれている限り、データの状態は、特別な処理を必要としなくとも保証される。
【００３２】
［ＥＥＰＲＯＭエミュレーション］
本実施形態では、データの書込に際して、ＥＥＰＲＯＭエミュレーションを用いる。そこで、本実施形態におけるＥＥＰＲＯＭエミュレーションの概念を図４を参照して説明する。
【００３３】
図４（ａ）は、データ書込前のデータ領域グループの構造図である。ここでは、簡略化した構造例として、一つのエントリにおけるアドレスの領域が１６バイトアライメント、データの領域が１６バイト固定長、すなわち、例えばそれぞれ１バイトのデータを書き込む１６個の書込領域を有するものとする。１６個の書込領域並びに他のエントリの書込領域は、連続するアドレスで関連付けることにより、書込領域をそれぞれシーケンシャルに関連付ける。図示の数値は、１６進法で表現されている。［0XFF］は、未書込領域を表す。
【００３４】
このような構造のエントリにおいて、メモリ制御装置１が、アドレス［0X3600］（論理アドレスに相当）を指定して１７バイトのデータを書き込んだとする。データの領域は１６バイト固定長であるため、書込対象となる１７バイトのデータは、アドレス［0X3600］〜［0X360F］のエントリに１６バイト分（それぞれ[0X11]）だけが書き込まれる。残りの１バイト分のデータ（［0X11］）は、シーケンシャルにつながる次のエントリの最初の書込領域（アドレス［0X3610］）に書き込まれる。この状態を図４（ｂ）に示す。この場合、アドレス［0X3610］から１バイトのデータを読み込むと、データ[0X11］が得られる。
【００３５】
この状態で、さらに１バイトのデータ［0X22］をアドレス[0X3611]に追記する場合、その時点で最新となっている、アドレス[0X3611]の１６バイトアライメントであるアドレス［0X3610］のエントリを特定し、そのエントリの１６バイト分のデータのうちアドレス[0X3611]に相当する部分を更新した１６バイトのデータを、新しいエントリとして書き込む処理を行う（read-modify-write）。
【００３６】
更新は、追記前の最終の書込の次の未書込のエントリに、上記の新しいエントリを追記することにより、当該エントリの未書込領域を減らしていく処理である。この状態を示したのが、図４（ｃ）である。追記が行われたエントリを、アドレス［0X3610］の新たなエントリとして書き込む。これにより、追記前のアドレス［0X3610］のエントリ（図４（ｂ）の下段のエントリ）は不要となるので、これを、予め定めた所定条件を満たしたこと、例えば最後の書込終了後一定時間経過したことを検知したときに削除する。削除される間では保持される。保持する領域は、その領域を特定できれば、どこであっても良い。
【００３７】
このように、データ書込は個々の未書込領域毎に行い、消去するときはグループ（上記の例ではエントリ）毎に行うのが、本実施形態におけるＥＥＰＲＯＭエミュレーションの一つの特徴である。これにより、データの書換が特定のアドレスに集中する場合に比べて消去回数が格段に減少するので、書込可能回数が増加する。
【００３８】
＜動作＞
次に、メモリ制御装置１の動作を具体的に説明する。
メモリ制御装置１は、入力を受け付けた書込対象データ（入力データ）が上述した初期データか、あるいは、何度も書き換える可能性のあるデータかを、書込ルールに基づいて判別する。
【００３９】
本実施形態では、２種類のルールをルールテーブルに記録してワーキングメモリ４に展開する。
第１ルールは、データを書き込むべきアドレス（書込アドレス）又は読み込むべき該当データのアドレス（読込アドレス）が初期データブロック５１のアドレス範囲内であれば、それを初期データとして判別するという内容のものである。書込アドレスは、メモリ制御装置１にアクセスするアプリケーションプログラム上で指定される。
メモリ制御装置１は、書込アドレス又は読込アドレスが上記のアドレス範囲内のときは当該データを初期データと判別する。アドレス範囲は必ずしも連続する必要はない。例えば、アドレス[0X3000]〜［0X3100］をある目的で使用する初期データ用として確保しておき、不連続の他のアドレス［0X3600］〜［0X3700］を、マルチメディア処理の実行の際に参照されるパラメータ値（例えばサウンドのON/OFFや解像度等）の設定データや、API（Application Programming Interface）などを書き込む領域として定義することができる。この場合、上位アドレスである［0X3000］から１６バイトのデータの読込要求があれば、初期データを返し、他方、下位のアドレスである［0X3600］から１６バイトのデータ（API）の読込要求があれば、そのデータを返すという態様で使用することができる。
第２ルールは、不揮発性メモリ５への書込順序とそのデータ記録領域との関係を定めたもので、例えば、不揮発性メモリ５に書き込む最初の入力データであれば、当該入力データを初期データと判別するという内容のものである。このようにすると、初期データを必要とする範囲は、改めて指定する必要がない。
【００４０】
メモリ制御装置１は、入力データが初期データであるときは、その入力データを初期データブロック５１に書き込む第１書込処理を行う。
他方、入力データが何度も書き換える可能性のあるデータであるときは、特徴的なＥＥＰＲＯＭエミュレーションによる書込、すなわち、所定回数のデータ書込を可能にする上で必要となる数の実データブロック５３を不揮発性メモリ５において確保し、確保した実データブロック５３のうち、書込可能領域に入力データの逐次追記を行い、書込済の実データブロック５３については、複数のブロック毎に消去する第２書込処理とを行う。
第２書込処理では、また、実データブロック５３への書込回数を累計しておき、累計値が所定値に達したときは、予め確保した数の実データブロックと同じ数の実データブロックを不揮発性メモリ５において新たに確保し、上記の再構築を行う再構築処理とも行う。
【００４１】
このことを概念的に示したのが、図５（ａ）である。図中、「ＥＥＰＲＯＭ基本システム」とは、メモリ制御装置１が、特徴的なＥＥＰＲＯＭエミュレーションによる書込及び読込を行うシステムとして動作することを表し、「初期データシステム」とは、メモリ制御装置１が初期データの書込及び読込を行うシステムとして動作することを表す。さらに、「初期データ付きシステム複合システム」とは、メモリ制御装置１が、上記の２つの処理を複合した複合システムとして動作することを表す。
図５（ｂ）に初期データブロックの具体的なアドレス配置を示す。初期データブロックは、例えば0X3000〜0X3100の上位アドレスを、上述したように読込要求があったときに返す初期データの領域とし、下位アドレスを予約領域として使用することができる。
【００４２】
まず、複合システムにおける処理手順の概要を説明する。
［データ書込処理］
全体的なデータ書込処理の手順を図６に示す。図６を参照すると、メモリ制御装置１は、図示しない入力装置を通じて入力データを受け付け、この入力データが初期データかどうかを書込ルールを参照することにより判別する。初期データではなく、何度も書き込む可能性のあるデータであった場合は、ＥＥＰＲＯＭ基本システム（以下、便宜上「基本システム」と称する）による書込を行う（ステップＳ１０１：No、Ｓ１０２）。基本システムによるデータ書込処理については、後述する。
ステップＳ１０１において、判別の結果、入力データが初期データであったときは、その入力データが書き込めるかどうかを判定する。書き込めない場合は、ステップＳ１０２の処理を行う（ステップＳ１０１：No）。初期データとして書き込める場合は、初期データシステムによる書込処理を行う（ステップＳ１０１：No、Ｓ１０３：Yes、Ｓ１０４）。初期データシステムによるデータ書込処理については、後述する。
【００４３】
［データ読込処理］
全体的なデータ読込処理の手順を図７に示す。図７を参照すると、複合システムでデータを読み込むときは、まず、基本システムでの読込を開始する（ステップＳ２０１）。基本システムで読み込むべきデータが見つかったかどうかを判定し（ステップＳ２０２）、見つかった場合は、基本システムでデータを読み込む（ステップＳＳ２０２：Yes、Ｓ２０３）。基本システムでのデータ読込処理については後述する。
基本システムで読み込むべきデータが見つからない場合は、初期データシステムでの読込を開始する（ステップＳ２０２：No、Ｓ２０４）。初期データシステムで読み込むべきデータが見つかったかどうかを判定し（ステップＳ２０５）、見つかった場合は、初期データシステムでのデータ読込処理を行う（ステップＳ２０６）。初期データシステムでのデータ読込処理については後述する。
他方、ステップＳ２０５において、該当データが見つからなかったときは、初期値（本例では「ＦＦＨ」）を必要サイズ分にした読込データとする（ステップＳ２０７）。
【００４４】
［初期データシステムによるデータ書込処理１］
初期データシステムによるデータ書込処理の手順を図８に示す。ここでは、上述した第１ルール、すなわち、書込アドレスが初期データの範囲に指定されている場合の手順を示す。前提として、データの書込前段階でのアドレスは、指定のアライメントアドレスになっているものとする。
複合システムでは、書込アドレスが初期データの範囲に指定されているかどうかを判定する（ステップＳ３０１）。指定されていない場合は、基本システムでの書込処理に移る（ステップＳ３０１：No，Ｓ３０２）。他方、初期データの範囲に指定されている場合は、その書込アドレスの値が、まだ初期値（本例では「FFH」）ですべて埋められているかどうかを判定する（ステップＳ３０３）。埋められている場合は（ステップＳ３０３：Yes）、入力データを初期データシステムで書き込む（ステップＳ３０４）。
【００４５】
［初期データシステムによるデータ読込処理１］
初期データシステムによるデータ読込処理の手順を図９に示す。ここでは、上述した第１ルール、すなわち、読込アドレスが初期データの範囲に指定されている場合の手順を示す。前提として、読込前段階でのアドレスは、指定のアライメントアドレスになっているものとする。
複合システムでは、まず、基本システムでの読込を開始する（ステップＳ４０１）。基本システムで読み込むべき該当データを探し、見つかった場合は、該当データを基本システムで読み込む（ステップＳ４０２：Yes、Ｓ４０３）。該当データが見つからなかった場合は、読込アドレスが初期データの範囲に指定されているかどうかを調べる（ステップＳ４０４）。初期データの範囲に指定されている場合は、初期データシステムでデータを読み込む（ステップＳ４０４：Yes、Ｓ４０５）。他方、初期データの範囲に指定されていない場合は、該当データは存在しないことを意味するので、初期値（本例では「FFH」）を必要サイズ分にした読込データとする（ステップＳ４０４：No、Ｓ４０６）。
【００４６】
［初期データシステムによるデータ書込処理２］         
初期データシステムによるデータ書込処理の他の手順を図１０に示す。ここでは、上述した第２ルール、すなわち、最初に書き込むデータであれば、当該データを初期データと判別するという場合の手順を示す。書込前段階でのアドレスは、指定のアライメントアドレスになっているものとする。
複合システムでは、書込アドレスの初期データの値が、まだ初期値（本例で「FFH」）ですべて埋められているかどうかを判定する（ステップＳ５０１）。埋められていない場合は、基本システムでのデータ書込処理に移る（ステップＳ５０１：No、Ｓ５０２）。初期値ですべて埋められている場合は、初期データシステムで書込を行う（ステップＳ５０１：Yes、Ｓ５０３）。
【００４７】
［初期データシステムによるデータ読込処理２］
初期データシステムによるデータ読込処理の他の手順を図１１に示す。ここでは、上述した第２ルール、すなわち、最初に書き込まれたデータであれば、当該データを初期データと判別するという場合の手順を示す。読込前段階でのアドレスは、指定のアライメントアドレスになっているものとする。
複合システムでは、基本システムでの読込を開始する（ステップＳ６０１）。基本システムで読み込むべき該当データを探し（ステップＳ６０２）、見つかった場合は、基本システムでそのデータを読み込む（ステップＳ６０２：Yes、Ｓ６０３）。ステップＳ６０２において、該当データが見つからなかった場合は、初期データシステムでデータを読み込む（ステップＳ６０２：No、Ｓ６０４）。
【００４８】
次に、基本システムにおけるデータ読込処理及びデータ書込処理について説明する。
複合システムでは、データの書込処理に際して、既にデータが書き込まれているデータおよび情報の読込処理が先行する。また、図７に示したように、データ読込処理に際しては、基本システムでの読込が初期データシステムでの読込に先行する。この基本システムによるデータ読込処理について、図１２の手順説明図を参照して説明する。
【００４９】
［基本システムによるデータ読込処理］
基本システムでは、データの読み込み要求を行うプログラムが指定する読み込むデータのアドレス（addr）の入力をもとに、ブロック情報を計算する（ステップＲ１０１）。ここにいうブロック情報は、図３に示した管理領域ブロック及びヘッダブロックに書き込まれているエントリから特定されるブロック番号、データサイズ（size）等の情報である。
【００５０】
その後、アドレスのアライメント（a_addr）、オフセット（offset）を計算する（ステップＲ１０２）。アドレスのアライメント（a_addr）は、本例では、アドレス（addr）の１６バイトアライメントである。例えば、読み込むデータの最初のアドレス（addr）が［0X3612］のとき、アドレスのアライメント（a_addr）は［0X3610］であり、差分である「２」がオフセット（offset）となる。このステップＲ１０２により計算されたアドレスのデータを読み込む（ステップＲ１０３）。必要なデータ分をワーキングメモリ４のバッファ（buf）に保存し、残りサイズを計算する（ステップＲ１０４）。ここにいう必要なデータ分は、「１６−offset」かサイズ（size）のうち小さい方の値である。残りサイズは、サイズ（size）から（１６−offset）分を差し引いた値となる。これを新たなサイズ（size）としてバッファに記憶する。残りサイズがあるときは、次のアライメントアドレスを計算し、オフセットを「０」にして、ステップＲ１０３の処理に戻る（ステップＲ１０５：Yes、Ｒ１０６）。残りサイズが無いときは、処理結果である読み出しデータを要求元に返し、終了する（ステップＲ１０５：No、Ｒ１０７）。
【００５１】
［基本システムによるデータ書込処理］
基本システムによるデータ書込処理を、図１３及び図１４を参照して説明する。
図１３を参照すると、基本システムで、アプリケーションプログラムからのデータ書込要求の入力を契機に、ブロック情報を計算する（ステップＷ１０１）。ブロック情報は、上述したとおりである。その後、書込可能なアドレスのアライメント（a_addr）、サイズのオフセット（offset）を計算する（ステップＷ１０２）。書込分割回数SEQ、ＳＭの初期フラグ値を決定する（ステップＷ１０３）。「SEQ＝１」かどうかの判別を行い、「SEQ＝１」であったときは（ステップＷ１０４：Yes）、初期データの書込判定と該当のアライメントアドレスのデータ読込処理へ移る（ステップＷ１０５）。初期データの書込判定については、図８に示した通りである。ここで同じデータを書き込もうとしてしている場合は、処理を終える（ステップＷ１０６：Yes）。
【００５２】
書込分割回数SEQは、サイズ（size）が１６バイトとすると、SEQは「２」となる。すなわち、最後に書き込まれたアドレス（addr）が[0X3612]で、オフセット（offset）が「２」であるとすると、１回の書込では１４バイト分しか書き込めない。残りの２バイト分は、次の実データブロックへの２回目の書込となる。そのため、２分割ということになり、SEQは「２」となる。
【００５３】
そのため、処理は、初期データの書込判定と該当のアライメントアドレスのデータの読込処理へ移る（ステップＷ１０４：No、Ｗ１０７）。そして新しいデータに更新し（ステップＷ１０８）、書込処理へ移る（ステップＷ１０９）。ステップＷ１０６において、同じデータを書き込もうとしていない場合も、ステップＷ１０８の処理に移る。書込処理の後、「SEQ−１」の処理を行い、ＳＭの初期フラグ値を調整する（ステップＷ１１０）。「SEQ＞０？」を判別し、そうであった場合は、次のアドレスを計算して（ステップＷ１１１：Yes、Ｗ１１２）、ステップＷ１０７へ戻る。「SEQ＞０」でなければ、処理を終える（ステップＷ１１１：No）。
【００５４】
ステップＷ１０９における書込処理は、図１４のように行われる。すなわち、データをデータ書込の順番（ＳＭ、データ、ＥＭの順）に従って書き込む。（ステップＷ２０１）。この後、ヘッダブロックの領域に空きが無いかどうかを調べ、空きがあるときは、データ書込処理に戻る（ステップＷ２０２：No）。ヘッダブロックの領域に空き領域が無い場合は、次のヘッダブロックを選択できるかどうかを調べる（ステップＷ２０２：Yes、Ｗ２０３）。選択できるときは、次のヘッダブロックを選択し、ブロック情報を更新する（ステップＷ２０３、Ｗ２０４）。その後、呼び出し元の処理に戻る。ステップＷ２０３において、次のヘッダブロック領域を選択できないと判別できるときは、再構築処理へ移行する（ステップＷ２０３：Yes）。
【００５５】
［基本システムにおける再構築処理］
上述した再構築処理は、基本システムにおける特徴的な処理の一つである。この再構築処理の内容を、図１５の処理手順図を参照して説明する。
基本システムでは、過去の消去可能なブロックが存在するかどうかを調べる（ステップＫ１０１）。過去の消去可能なブロックは、その内容が書き換えられたブロックである。存在するときは、そのブロックを消去する（ステップＫ１０１：Yes、Ｋ１０２）。消去可能なブロックが存在しない場合、あるいは存在するが消去した場合は、再構築開始を示す情報を管理領域ブロック５２に書き込む（ステップＫ１０１：No、Ｋ１０３）。
【００５６】
新しいヘッダブロックを選択し、管理領域に書き込む（ステップＫ１０４）。また、新しい実データブロックを選択し、管理領域に書き込む（ステップＫ１０５）。例えば５１２回の書込毎に再構築する場合、ヘッダブロックは２つ、実データブロックは４つ選択される。つまり、再構築のために６ブロック消費する。これは、１つのヘッダブロックに２５６のヘッダを確保できるので、５１２のヘッダを確保するには、ヘッダブロックは２つとなる。実データブロックは、データの領域が１６バイト固定長で、ブロックサイズが２ｋＢであるから１つで１２８回となり、５１２回確保するためには、４つが必要ということになる。
【００５７】
メモリ制御装置１は、古いヘッダブロックが存在するかどうかを調べる（ステップＫ１０６）。存在する場合は、その古いヘッダブロックにおいて登録の順番の新しい側から順にデータを読み込む（ステップＫ１０７）。過去に選択されたスキップすべきアドレスかどうかを調べ、そうでない場合は、新しい実データブロックにデータを書き込む（ステップＫ１０８：No、Ｋ１０９）。そして、選択アドレスと一致する、それより前のデータは不要なデータとなるので、スキップできるようにするために、バッファに記憶しておく（ステップＫ１１０）。
【００５８】
ステップＫ１０８において、スキップすべきアドレスであった場合（ステップＫ１０８：Yes）、あるいは、スキップできるように記憶した後は、すべての古いブロックのデータを確認したかどうかを調べる（ステップＫ１１１）。未確認のブロックのデータが存在するときは、ステップＫ１０８の処理に戻る（ステップＫ１１１：No、Ｋ１１２）。
すべての古いブロックのデータを確認し終えた場合、あるいは、ステップＫ１０６において、古いヘッダブロックが無かった場合は（ステップＫ１０６）、再構築完了の情報を管理領域に書き込み、書込処理のための待機に戻る（ステップＫ１２０）。
【００５９】
再構築の完了により、直前の実データブロックは、新たに不要となった実データブロック（旧実データブロックという）となる。旧実データブロックは、この段階では削除せず、次の再構築のタイミングまで保持される。これは、再構築完了を書き込む前には旧実データブロックは削除できないこともあるが、削除していないことを示すフラグを持つと、その分、後述する回復のときの再構築のときに考慮すべきことが増え、複雑になることを防ぐためである。
【００６０】
なお、旧実データブロックを削除するときは、管理領域ブロック５２にエントリされているＥＭの「同一アドレスの直前のエントリ位置」が意味をもつ。つまり、古いデータがリンクされ、存在位置が判るので、再構築に要する時間を長引かせることがない。
【００６１】
［効用］
このように、本実施形態のメモリ制御装置１では、基本システムにおいて、不揮発性メモリ５へのデータの書込に際して、ＥＥＰＲＯＭエミュレーション及び再構築を繰り返しながらデータ書込が行われるので、通常の使用態様によれば頻出する特定のアドレスへの集中が回避され、データ書込が平準化される。これにより、無駄のないデータ書込が可能となり、書込可能回数が飛躍的に増加する。例えば、従来の書込方式では１０００回程度の書込可能回数しか許されないフラッシュメモリであっても、１０万回程度の書込可能回数が確保されるので、同程度のＥＥＰＲＯＭの代わりに、フラッシュメモリを使用することができる。
【００６２】
また、不要になったブロックでも、次の再構築のときまで削除されないで残っているので、例えば電源切断などの障害が発生しても、その発生前のデータが回復時に、再構築に復帰するので、安全性にも優れたものとなる。
【００６３】
書換可能回数を増加させる観点からは、上述したように基本システムだけでも効果的であるが、初期データを持たずに基本システムでＥＥＰＲＯＭエミュレーションを行おうとすると、実際には１回しか書き込まれない初期データのために、再構築のための書込領域あるいはブロックの数を確保する必要があるため、その分、再構築の回数が増えて、全体の書込可能回数が減る。
本実施形態では、初期データについては初期データブロック５１にそれを書き込み、再構築は、この初期データブロック５１を除く領域（ブロック）についてだけ行うようにしたので、無駄な再構築を抑えることができ、全体の書き込み回数がより多くなる利点がある。再構築の回数が減ることにより、データ移動（コピー）のための回数が減り、全体的な処理効率が高まる効果もある。
【００６４】
［変形例］
なお、本実施形態では、不揮発性メモリ５として、フラッシュメモリを例に挙げて説明したが、本発明は、データの書込可能回数に一定の制限がある不揮発性メモリ全般に適用することができるので、使用できる不揮発性メモリの種類は任意であり、フラッシュメモリに限るものではない。
また、本実施形態では、エントリとブロックの２階層のグループでデータの書込を行う場合の例を説明したが、３階層であっても良い。あるいは、エントリ単位であっても良い。
【産業上の利用可能性】
【００６５】
本発明は、不揮発性メモリをデータ記録媒体として使用する情報処理装置において、広く利用することができる。フラッシュメモリに限定しても、パーソナルコンピュータ、ディジタルカメラ、携帯電話端末等、多種多量の機器に搭載されるデータ記録媒体のメモリ制御に利用することができる。
【図面の簡単な説明】
【００６６】
【図１】本発明の実施の一形態となるメモリ制御装置の全体構成図。
【図２】不揮発性メモリの構造説明図。
【図３】実データブロック、ヘッダブロック、管理領域ブロックの内容説明図。
【図４】（ａ）は書込前のメモリ状態、（ｂ）は１７バイトのデータを書き込んだときのメモリ状態、（ｃ）は他のデータを追記したときのメモリ状態を示す。
【図５】（ａ）は本実施形態によるメモリ制御の特徴、（ｂ）は初期データブロックの具体的なアドレス配置を示す説明図。
【図６】全体的なデータ書込処理の手順説明図。
【図７】全体的なデータ読込処理の手順説明図。
【図８】書込アドレスが指定されたときの書込処理の手順説明図。
【図９】読込アドレスが指定されたときの読込処理の手順説明図。
【図１０】初期データブロックの書込状態だけで初期データを判別するときの書込処理の手順説明図。
【図１１】初期データブロックの書込状態だけで初期データを判別するときの読込処理の手順説明図。
【図１２】基本システムによるデータ読込処理の手順説明図。
【図１３】基本システムによるデータ書込処理の手順説明図。
【図１４】図１３の書込処理の詳細説明図。
【図１５】基本システムによる再構築処理の手順説明図。
【符号の説明】
【００６７】
１・・・メモリ制御装置、２・・・プロセッサ、３・・・プログラムメモリ、４・・・ワーキングメモリ、５・・・不揮発性メモリ、６・・・データバス、５１・・・初期データブロック、５２・・・管理領域ブロック、５３・・・実データブロック、５２１，５３１・・・エントリ
【図１】
2010026794.tif 000003
【図２】
2010026794.tif 000004
【図３】
2010026794.tif 000005
【図４】
2010026794.tif 000006
【図５】
2010026794.tif 000007
【図６】
2010026794.tif 000008
【図７】
2010026794.tif 000009
【図８】
2010026794.tif 000010
【図９】
2010026794.tif 000011
【図１０】
2010026794.tif 000012
【図１１】
2010026794.tif 000013
【図１２】
2010026794.tif 000014
【図１３】
2010026794.tif 000015
【図１４】
2010026794.tif 000016
【図１５】
2010026794.tif 000017