JP5273780B2 - メモリアクセス制御方法及びメモリ制御装置、コンピュータプログラム - Google Patents

メモリアクセス制御方法及びメモリ制御装置、コンピュータプログラム Download PDF

Info

Publication number
JP5273780B2
JP5273780B2 JP2008150479A JP2008150479A JP5273780B2 JP 5273780 B2 JP5273780 B2 JP 5273780B2 JP 2008150479 A JP2008150479 A JP 2008150479A JP 2008150479 A JP2008150479 A JP 2008150479A JP 5273780 B2 JP5273780 B2 JP 5273780B2
Authority
JP
Japan
Prior art keywords
data
writing
written
area
flag information
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2008150479A
Other languages
English (en)
Other versions
JP2009295089A (ja
Inventor
幸司 島
英嘉 浅井
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sony Interactive Entertainment Inc
Original Assignee
Sony Interactive Entertainment Inc
Sony Computer Entertainment Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sony Interactive Entertainment Inc, Sony Computer Entertainment Inc filed Critical Sony Interactive Entertainment Inc
Priority to JP2008150479A priority Critical patent/JP5273780B2/ja
Priority to US12/867,584 priority patent/US8595413B2/en
Priority to PCT/JP2008/072724 priority patent/WO2009104330A1/ja
Priority to CN2008801281804A priority patent/CN101978361B/zh
Publication of JP2009295089A publication Critical patent/JP2009295089A/ja
Application granted granted Critical
Publication of JP5273780B2 publication Critical patent/JP5273780B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Techniques For Improving Reliability Of Storages (AREA)

Description

本発明は、例えばEEPROM(Electrically Erasable and Programmable Read Only Memory )のような不揮発性メモリへの複数バイトの書込をアトミックに操作するためのメモリアクセス制御技術に関する。
EEPROMのように、書込回数に制限のある不揮発性メモリの書込可能回数を実質的に増やしたり、EEPROMをそれよりも安価なフラッシュメモリで代用する「EEPROMエミュレーション」と呼ばれる技術(非特許文献1)が提案されている。これらの技術では、書込領域を多数のブロック(データ書込領域)に分割するなどの工夫が施されているのが一般的である。このように書込領域を分割した場合において、書込途中で不意の電源切断等の不具合が発生すると、復帰時にどのデータまでが正しく書き込まれているのかを判断することが難しくなる。
この点の改善が可能な従来技術として、ブロック毎に書込開始状態を示す第1参照データと、書込完了状態を示す第2参照データとをそれぞれを記憶しておき、書込開始時は第1参照データを更新し、書込完了時には第2参照データを更新することにより、上記の不具合の発生直前までのデータを最新データとして認識する技術がある(特許文献1)。
また、不具合発生後、回復時に、書込完了を示す情報を参照することにより、書込完了していたブロックの再書込を行うことにより、適正にデータの回復処理を行うという技術もある(特許文献2)。
「アプリケーションノート U17057JJ3V0AN00」、第3版、NECエレクトロニクス株式会社、2004年11月、p.25−27 特開平8−287697号公報 特開2004−206381号公報
特許文献1に開示されている技術は、電源切断等の不具合によって書込が中断して終了した場合でも、復帰後に各参照データを参照することにより、不具合の発生直前に最後に正しく書き込まれたブロックのデータを利用できるという利点がある。しかし、この技術では、書込対象となるデータが分断して書き込まれている場合には、その整合性をとるための付随的な処理が発生する。不揮発性メモリへのデータの書込はブロック単位の追記(その前に消去を伴う)になるので、整合性チェックを正確に行わないと、書込可能な領域を無駄に消費してしまうためである。このような問題は、特許文献2に開示されている技術についても同様に生じる。また、分割されるブロックが一定サイズであるのに対し、書込対象となるデータのサイズは不定なので、この付随的な処理を正しく行うことも困難となる。
本発明は、このような問題を解消するために、不定サイズのデータの書込をアトミックに操作することを保証するメモリアクセス技術を提供することを目的とするものである。
本発明は、メモリアクセス制御方法、この方法の実施に適したメモリ制御装置およびコンピュータプログラムを提供する。
本発明のメモリアクセス制御方法は、所定のデータサイズを1回の書込単位とするデータ領域と、このデータ領域からのデータ読込時に参照されるヘッダ領域とを有するメモリへのアクセスを制御する装置が実行する方法であって、書込対象となる実データを取得し、取得した実データのサイズに応じて1又は複数の書込単位分のデータ領域を前記メモリにおいて確保するとともに、確保した書込単位分のデータ領域を前記実データの最初のものから最後のものまでシーケンシャルに関連付け、当該実データについて何番目の書込単位かを表す第1フラグ情報を前記ヘッダ領域に書き込んだ後、前記データ領域に対して当該書込単位の実データの書込を行い、該実データの書込が正常に終了したことを検知したときは、書込終了を表す第2フラグ情報を前記第1フラグ情報と関連付けて前記ヘッダ領域に書き込む段階と、前記実データについての前記ヘッダ領域を参照し、当該ヘッダ領域に前記第2フラグ情報が書き込まれておらず、あるいは前記第2フラグ情報が書き込まれていても前記第1フラグ情報が最後の書込単位のものでない場合は、前記データ領域に既に書き込まれているすべての実データを無効データとして扱う段階とを有する方法である。
ある実施の態様では、前記第1フラグ情報は、確保した書込単位の数を最大値とするシーケンス番号を含んでおり、前記装置は、前記実データの前記データ領域への正常な書込が進む度に、最初の書込単位を起点とし、最後の書込単位であることを表す数値を終点として、前記シーケンス番号を逐次小さい値に更新し、更新したシーケンス番号を当該書込単位の第1フラグ情報として前記ヘッダ領域に書き込む。
また、他の実施の態様では、前記第2フラグ情報は、書込単位毎に、その直前の書込単位を識別するための識別情報と、前記実データが書き込まれた位置を表す論理アドレスとを含んでおり、前記装置は、前記第1フラグ情報の前記ヘッダ領域への書込と、前記実データの前記データ領域への書込とがいずれも正常に実行されたときに前記第2フラグ情報を生成し、この第2フラグ情報を当該第1フラグ情報とペアで参照される領域に書き込む。
また、他の実施の態様では、前記装置は、前記無効データが書き込まれているデータ領域および前記ヘッダ領域の書込状態を保持したまま、書込対象となる新たな実データを取得し、取得した新たな実データのサイズを書き込むための前記データ領域を新たに確保する。この場合、前記装置は、前記保持してあるデータ領域および前記ヘッダ領域の書込状態を、一定の消去条件を満たしたときに、一括して消去することにより、書込のための消去回数を減らすことができる。
本発明のメモリ制御装置は、所定のデータサイズを1回の書込単位とするデータ領域と、このデータ領域からのデータ読込時に参照されるヘッダ領域とを有するメモリへのアクセスを制御するメモリ制御装置であって、書込対象となる実データを取得する実データ取得手段と、取得した実データのサイズに応じて1又は複数の書込単位分のデータ領域を前記メモリにおいて確保するとともに、確保した書込単位分のデータ領域を前記実データの最初のものから最後のものまでシーケンシャルに関連付け、当該実データについて何番目の書込単位かを表す第1フラグ情報を前記ヘッダ領域に書き込んだ後、前記データ領域に対して当該書込単位の実データの書込を行い、該実データの書込が正常に終了したことを検知したときは、書込終了を表す第2フラグ情報を前記第1フラグ情報と関連付けて前記ヘッダ領域に書き込む書込手段と、前記実データについての前記ヘッダ領域を参照し、当該ヘッダ領域に前記第2フラグ情報が書き込まれておらず、あるいは前記第2フラグ情報が書き込まれていても前記第1フラグ情報が最後の書込単位のものでない場合は、前記データ領域に既に書き込まれているすべての実データを無効なデータとして扱う読込手段とを有する装置である。
本発明のコンピュータプログラムは、所定のデータサイズを1回の書込単位とするデータ領域と、このデータ領域からのデータ読込時に参照されるヘッダ領域とを有するメモリへのアクセスが可能なコンピュータを、 書込対象となる実データを取得する実データ取得手段、取得した実データのサイズに応じて1又は複数の書込単位分のデータ領域を前記メモリにおいて確保するとともに、確保した書込単位分のデータ領域を前記実データの最初のものから最後のものまでシーケンシャルに関連付け、当該実データについて何番目の書込単位かを表す第1フラグ情報を前記ヘッダ領域に書き込んだ後、前記データ領域に対して当該書込単位の実データの書込を行い、該実データの書込が正常に終了したことを検知したときは、書込終了を表す第2フラグ情報を前記第1フラグ情報と関連付けて前記ヘッダ領域に書き込む書込手段、および、前記実データについての前記ヘッダ領域を参照し、当該ヘッダ領域に前記第2フラグ情報が書き込まれておらず、あるいは前記第2フラグ情報が書き込まれていても前記第1フラグ情報が最後の書込単位のものでない場合は、前記データ領域に既に書き込まれているすべての実データを無効なデータとして扱う読込手段として機能させるものである。
本発明によれば、書込対象となるデータに関して、データ領域およびヘッダ領域への書込がすべて正常に完了しない限り、読込時に、それまで書き込まれたのすべてを無効データとして扱われるため、従来技術のように、不具合発生の前後におけるデータの整合性をとるための付随的な処理がまったく不要になる。これにより、不具合発生を考慮した不揮発性メモリへの書込のためのコスト上昇を効果的に抑えることができる。
図1は、本発明の実施の形態例となるメモリ制御装置の構成例を示す図である。このメモリ制御装置1は、プロセッサ2と、本発明のコンピュータ・プログラムを格納したプログラムメモリ3と、揮発性メモリであるワーキングメモリ4とを含み、プロセッサ2が、コンピュータ・プログラムをワーキングメモリ4に展開し、これを実行することにより、データバス6を介して接続された不揮発性メモリ5に対して特徴的なメモリアクセス制御を行う機能、すなわち、実データ取得手段、書込手段および読込手段を実現する。ワーキングメモリ5には、一時的なデータの保持を行うバッファも形成される。不揮発性メモリ5は、EEPROM、フラッシュメモリなど、不揮発のメモリ領域を確保できるメモリ媒体であり、アドレス体系を持ち、レジストリのようなID又はラベル(ともに識別情報の一種)で管理可能なものである。
なお、以後の説明では、書込対象となるデータを、アプリケーションやライブラリ等の上位側から論理アドレスのアドレス体系と共に取得し、このデータを物理アドレスを持った不揮発性メモリ6に書き込むことを前提として説明するが、物理アドレスを、ID又はラベルに置き換えることも可能である。
また、以後の説明では、書込単位となる複数の書込領域のグループのうち、最小単位のグループをエントリ、複数のエントリのグループをブロックと呼ぶ。複数のエントリは、連続するアドレスによりシーケンシャルに関連付けられている。
エントリにおけるシーケンシャルの関連付けは、例えば、確保したエントリの数を最大値とするシーケンス番号を割り当て、エントリへの正常な書込が進む度に、最初のエントリを起点とし、最後のエントリであることを表す数値を終点として、シーケンス番号を逐次小さい値に更新し、更新したシーケンス番号を当該エントリのフラグ情報としてヘッダブロック(エントリ)に書き込むことにより行う。複数のブロック間についても同様の手順で関連付けを行う。
メモリ制御装置1は、データを保存する際に、常に、不揮発性メモリ5にデータが正しく書き込めたか、書き込めなかったかのどちらかになることを保証する。つまり、不揮発性メモリ5に中途半端に書き込めた状態に見えないようにする。従来、アトミックに書き込める単位が例えば1〜4バイト単位であるなら、4バイトまでのデータについては、上記の保証は可能であったが、16バイト、32バイト、あるいはそれ以上のデータについては、上記の保証はできなかった。
<不揮発性メモリの構造>
不揮発性メモリ5の構造例を図2に示す。
不揮発性メモリ5は、複数のブロックで構成される。すなわち、初期データ用の初期データブロック51、管理領域ブロック52及びデータ書込用の実データブロック53を有している。これらのブロック51〜53は、例えばメモリ初期化時、あるいは、再構築時に、メモリ制御装置1により形成される。
初期データブロック51は、不揮発性メモリ5に初期に書き込む初期データのサイズに応じて、例えば2ブロック分(例えば、32ブロックの場合、0〜31の番号で識別される個々のブロックのうち、0,1の2つのブロック)を確保する。初期データは、原則として1度だけ書き込まれるデータであり、既に書き込まれているデータを読み込むプログラムによってダイレクトに参照されるデータである。
管理領域ブロック52には、交互に使用する2ブロック(例えば、2,3の2つのブロック)を割り当てる。この管理領域ブロック52は、実データブロック53が、現在、どのようなブロック構成になっているかを示す管理情報を書き込むためのブロックである。
実データブロック53は、ヘッダブロックとデータブロックのいずれかを任意に選択することができる。
ヘッダブロックは、どのデータブロックのどのアドレスにどのデータが存在し、その書込状態がどのようになっているかを示すヘッダ情報を書き込むためのブロックである。データブロックは、メモリ制御装置1が外部(アプリケーション等)より取得し、装置内で実際に扱うデータ(実データという)を書き込むためのブロックである。
なお、管理領域ブロック52及び実データブロック53は、それぞれ複数のエントリを有する。エントリは、実データブロック53の場合、所定のデータサイズを1回の書込単位とする領域である。エントリおよび他のブロックがシーケンシャルに関連付けられていることは、上述の通りである。図2の例では、管理領域ブロック52についてのエントリ521と、実データブロック53についてのエントリ531とが示されている。
実データブロック53におけるデータブロック、ヘッダブロック及び管理領域ブロックの割当例を図3に示す。データブロックは、図上段に示すように、本例では、16バイト固定長とする。ヘッダブロックは、図中段に示すように8バイト固定長とする。ヘッダ情報は、4バイトのスタートマーク領域(StartMark:SMと略する)と、4バイトのエンドマーク領域(EndMark:EMと略する)とに書き込む。書込は、SM、実データ、EMの順に行う。SMに書き込む情報が第1フラグ情報、EMに書き込む情報が第2フラグ情報となる。このような順番で書込を行うことにより、実際に実データがデータブロックに書き込まれたか書き込まれないかは、SMおよびEMへのヘッダ情報の書込が正常に行われたどうかによって、容易に判別することができる。
SMは、フラグ(1バイト)、シーケンス番号(1バイト)、物理アドレスのブロック番号(1バイト)、エントリ位置(1バイト)の4バイトで構成される。フラグとシーケンス番号は、あるアドレスへの複数回にわたるデータの書込があったときに、これらがシーケンシャルにすべて行われたことを保証するために使用する情報である。従えば256バイトの書込があったときは、個々のデータブロックが16バイト固定長であるために16回に分けて書込を行うことになる。このとき、16回の書込がシーケンシャルにすべて行われたことを保証するためにフラグとシーケンス番号が使用される。
各回の書込単位が分割されたシーケンスの何番目なのかを表すのがシーケンス番号である。シーケンシャル番号は、最初のエントリが最大値で、最後のエントリが0にされる。フラグには、シーケンス番号が有効であることを示す「SEQ(フラグ「S」と表記する場合がある)」と、最初のシーケンス番号を示す「TOP_SEQ(フラグ「TS」と表記する場合がある)」とが設定される。
書き込まれているデータの検索(読込)は、最新エントリ、つまり最後のエントリから開始される。シーケンス番号は、書込が進むにつれて小さい値となり、最後は0となる。従って、検索時に、フラグに「SEQ」があり、且つ、シーケンス番号が最後を示す「0」であれば、それ以降に続くフラグ「TOP_SEQ」までの実データは、正しくデータブロックに書き込まれて、有効な書込状態であることを示す。逆に、検索(読込)時に、フラグに「SEQ」があり、且つ、シーケンス番号が「0」以外であれば、それ以降に続くフラグ「TOP_SEQ」までの実データは無効、つまり無いものとして扱う。
但し、アプリケーションからの要求によって無効として扱うだけで、これをログとして別途読み出すことは可能である。そのため、メモリ制御装置1は、無効データが書き込まれているデータブロックおよびヘッダブロックの書込状態を保持したまま、書込対象となる新たな実データを取得し、取得した新たな実データのサイズを書き込むためのデータブロックおよびヘッダブロックのエントリを新たに確保し、保持してあるデータブロックおよびヘッダブロックの書込状態を、一定の消去条件を満たしたとき、例えば、各ブロックの再構築の条件を満たすとき、あるいはアプリケーションからの指示を受け付けたときに、一括して消去するようにしている。これにより、何らの機能を新たに設けなくとも、不具合解析用のログとして利用することができる。
物理アドレスのブロック番号は、対象となるデータブロックが何番目のブロックかを識別するための番号であり、エントリ位置は、そのブロックのエントリが何番目のものかを示している。ブロック番号は、256ブロックの場合、例えば「0」〜「255」のいずれかとなる。エントリ位置は、データ長が16バイト固定で1ブロックが2kBとして、「0」〜「127」のいずれかである。このブロック番号とエントリ位置が、実際にデータを書き込む物理アドレスに対応したものとなる。
EMは、同一論理アドレスの直前のエントリ位置(2バイト)、論理アドレス(2バイト)の4バイトで構成される。直前のエントリ位置は、最新に書き込まれたデータを特定するための情報である。論理アドレスは、16バイトアライメント(固定長)であるが、ある論理アドレスにデータの書込を行うときに、その論理アドレスのデータを読み込み、新しいデータで書き込む。これにより、その論理アドレスの最新データは、最後に書き込まれたデータだけを読み込めば良いことになる。この最後に書き込まれたデータのエントリ位置が、次にその論理アドレスに書き込まれるときの「直前のエントリ位置」となる。
SM及びEMをこのように構成することにより、読込時に、そこに書き込まれている情報を参照するだけで、実データブロックへのデータの書込が正常に行われているかどうかを容易かつ迅速に判別することができる。
管理領域ブロック52において、「ブロック番号」は、使用している実データブロックがどれかを識別するためのブロック番号である。ブロック番号は、シーケンシャルに関連付けられている。また、そのブロックが現在どのような状態かを示すのがフラグである。フラグは、ヘッダブロックとして使用されていることを示す「ヘッダ」、データブロックとして使用されていることを示す「データ」である。ブロック番号は、空きブロックの中から選択される。空きブロックは、消去済みであったときに空きブロックと判定される公知の機能を利用して判定する。
<動作>
次に、メモリ制御装置1の動作を具体的に説明する。
1.書込処理(概要)
まず、書込処理の概要を説明する。メモリ制御装置1は、書込処理を、空き領域を有するデータブロックの探索、そのデータブロックの書込領域を管理するヘッダブロックへのSMの情報書込、そのデータブロックへの実データの書込、並びに、ヘッダブロックへのEMの情報書込の順に行う。
例えば、あるデータブロックの3002Hのアドレスに、3バイトの実データ(11H、12H、13H)が書き込まれた状態を図4に示す。メモリ内の数値は、便宜上、Big endianで記述されている(以下、同様とする)。これらの実データを「D1」とする。ヘッダブロックにEMがあることから、これらのデータD1は、正常に書き込まれていることを示す。図4の例では、SMの欄には、D1についてフラグ設定無し(分割する必要がない)を表す「0」およびシーケンシャル番号「0」が示されている(物理アドレスについては省略)。EMについては、同一論理アドレスの直前のエントリ位置は「なし」であり、書き込まれている論理アドレスは「0X3000」(3000Hの意)となる。なお、図4では、データブロックとヘッダブロックとの関係だけを示し、管理領域ブロック52の内容については省略してある(以下、同様とする)。
図4の状態で、同じデータブロックの3009Hのアドレスに1バイトの実データ(55H)を書き込んだ状態を図5に示す。不揮発性メモリへの書込なので、16バイト長毎の追記となる。すなわち、データブロックには、もう一つの16バイト分の領域に上記の3バイトの実データと今回の1バイトの実データとが書き込まれる。これらの実データを「D2」とする。ヘッダブロックにEMがあることから、この実データD2も、正常に書き込まれていることを示す。EMのうち、同一論理アドレスの直前のエントリ位置はD1の状態での論理アドレスとなり、書き込まれている論理アドレスは「0X3000」となる。
上記の実データD1,D2の書込後、同じデータブロックの3020Hに1バイトの実データ(77H)を書き込んだ状態を図6に示す。このときは、アライメントアドレスが3020Hの16バイト分の先頭領域に今回の1バイトのデータが書き込まれる。この実データを「D3」とする。ヘッダブロックにEMがあることから、この実データD3も、正常に書き込まれていることを示す。EMのうち、同一論理アドレスの直前のエントリ位置は「なし」であり、書き込まれている論理アドレスは「0X3020」となる。
2.読込処理
書込処理に際しては、既にデータが書き込まれているデータおよび情報の読込処理が先行する。本実施形態による読込処理では、既に書き込まれているデータ、情報が有効かものか無効なものかの判定を伴うことを特徴の一つとしている。
以下、この読込処理を、図7の手順説明図を参照して説明する。
メモリ制御装置1は、データの読み込み要求を行うプログラムが指定する読み込むデータのアドレスの入力(ステップS101)をもとに、ブロック情報を計算する(ステップS102)。ここにいうブロック情報は、管理領域(2)及びヘッダブロック(4)のエントリから特定される情報(どのブロックが何に使われているか等)である。
その後、アドレスのアライメント(a_addr)、オフセット(offset)を計算する(ステップS103)。アドレスのアライメント(a_addr)は、アドレス(addr)の16バイトアライメントである。例えば、読み込むデータの最初のアドレス(addr)が[0X3612]のとき、アドレスのアライメント(a_addr)は[0X3610]であり、差分である「2」がオフセット(offset)となる。このステップS103により計算されたアドレスのデータを読み込む(ステップS104)。必要なデータ分をワーキングメモリ3のバッファ(buf)に保存し(ステップS105)、残りサイズを計算する(ステップS106)。ここにいう必要なデータ分は、「16−offset」かサイズ(size)のうち小さい方の値である。残りサイズは、サイズ(size)から必要なデータ分を差し引いた値となる。これを新たなサイズ(size)としてバッファ(buf)に記憶する。残りサイズがあるときは、次のアライメントアドレスを計算し、オフセット(offset)を「0」にして、ステップS104の処理に戻る(ステップS107:Yes、S108)。残りサイズが無いときは、処理結果である読み出しデータを要求元に返し、終了する(ステップS107:No、S109)。
上記ステップS104の内容を、図8を参照して、より詳細に説明する。
メモリ制御装置1は、該当のアライメントアドレスのデータを読み込み、フラグに関する変数fragsを「0」にセットする(ステップS201,S202)。その後、ヘッダブロックの最新エントリを検索する(ステップS203)。この処理は、具体的には、ヘッダブロックの最後のエントリから、逆順に検索し、初めてSM又はEMが書かれているエントリを見つけ出す処理である。
メモリ制御装置1は、このエントリにおけるEMの論理アドレスが正しく書かれているかどうかを判定する(ステップS204)。正しく書き込まれていない場合であって、調べるエントリがまだある場合は、1つ前のエントリに移動する(ステップS204:No、S205:Yes、S206)。正しく書き込まれておらず、調べるエントリもない場合は、必要なデータ分をすべて有効データが存在しないことを示す「FFH」とし(ステップS204:No、S205:No、S207)、元の処理に戻る(ステップS208)。
他方、ステップS204の判定処理において、EMの論理アドレスが正しく書かれている場合は、書き込んだデータが有効なデータか無効データかを検知する処理を行う(ステップS204:Yes)。
すなわち、メモリ制御装置1は、SMにフラグSが設定されているかどうかを判定し、設定されていない場合は、アドレスのアライメント(a_addr)と論理アドレスとが一致し、かつフラグ領域の変数flagsにフラグSだけがセットされていないかどうかを判定する(ステップS210)。セットされていない場合は、必要なデータ分を結果とし、ステップS208の処理に移る(ステップS210:Yes、S211)。セットされている場合は、SMにフラグTSが設定されているかどうかを判定する(ステップS212)。セットされている場合は、変数flagsを「0」にしてステップS205の処理に移る(ステップS212:Yes、S213)。設定されていない場合は、直ちにステップS205の処理に移る。
ステップS209の判定処理において、フラグSが設定されている場合は、SMのシーケンス番号を調べ、「0」であれば有効処理(ステップS214:Yes)、「0」でない場合は無効処理(ステップS214:No)と判定する。無効処理の場合は、変数flagsにフラグSを追加し、ステップS210の処理に移る(ステップS215)。他方、有効処理の場合は、変数flagsにフラグSとフラグTSとを追加し、ステップS210の処理に移る。ここで「追加する」とは両者の論理和をとることをいう。
3.効用
以上の処理により、実データの書込が正常に終了しているかどうかは、SMおよびEMのヘッダ情報が正常に書き込まれたかどうかで判定することができる(ステップS204参照)。すなわち、EMの論理アドレスの書込は、ヘッダブロックへのSMの書込、データブロックへの実データの書込の後に行われるので、SMの書込途中、SMだけが書き込まれた状態、実データの書込途中、SMおよび実データが書き込まれた状態、EMの書込途中、つまり、EMの論理アドレスが正しく書き込まれていない状態は、いずれも書込が未完了の状態とみなすことができる。
また、エントリは16バイトアライメントなので、論理アドレスは必ず「XXX0H」の形で表される。従って、EMの論理アドレスが「XXX0H」以外、例えば「XXXFH」の形で書き込まれている場合、書込は何らかの不具合で異常終了したことになる。
従って、SMおよびEMの情報、特にEMの論理情報を参照することにより、ある複数バイトのデータが正常に書き込めたか、書き込めなかったかのどちらかを必ず保証することができる。書き込むデータのサイズも、1バイト、4バイトのような固定的なものである必要がない。任意のサイズとすることができる。
例えば、データブロックの5000Hのアドレスに、下記のデータを書き込もうとする際に、書込途中で電源切断があったとする。
「www.test1.aaa.co.jp/test123456.html」
従来技術の場合は、中途半端なサイズでの書込状態があり得るが、本実施形態のメモリ制御装置1では、このような事態が発生しない。このことを、具体的に説明する。
図9は、上記データが正常に書かれた状態を示す。このデータを「Da」とする。Daは33バイトのデータなので、16バイトアライメントの下では3回の書込(16バイト、16バイト、1バイトの順)が行われることになる。正常であれば、図9のようにSMとEMとのペアは3つ存在し、かつ、最初のエントリのSMのフラグ(TS、S)およびシーケンス番号(2)とそれ以外のエントリのSMのそれらとの間には、必ず違いがある。特にシーケンス番号は、「2」,「1」,「0」のように連続して減少しなければならず、シーケンス番号が「0」のときのフラグは「S」でなければならない。
一例として、データブロックに、33バイト中の28バイトだけ書き込んだ直後に電源切断があったときの状態を図10に示す。
図7のステップS203の処理によれば、この状態での最新エントリは、2番目のエントリ(図10の(2)部分)である。しかし、このエントリ(2)のEMの論理アドレスは正しくないので、書かれていないエントリとみなされる(ステップS204〜S206参照)。1つ前のエントリ(図10の(1)の部分)に戻ると、EMの論理アドレスは正しいが、フラグが「S」でシーケンス番号が「0」という条件を満たさないので、このエントリに対応するデータブロックのデータは無効データであるとして、無効処理に移る(図7のステップS215参照)。無効データは、SMにフラグTSが表れるエントリまでである。図10の例では、エントリ(1)自身までということになる。つまり、これまで書かれた実データは、読込時にすべて無いものとみなされる。
もう一つの例として、データブロックに33バイトのすべてを書き込んだ後、ヘッダブロックにEMを書き込もうとした時点で電源切断があった状態の例を図11に示す。最新エントリは、3番目のエントリ(図11のエントリ(3)部分)である。このエントリ(3)はEMの論理アドレスが正しくないので、書かれていないエントリとみなされることは上述の場合と同じである。1つ前のエントリ(図11のエントリ(2)部分)に戻ると、このエントリ(2)は、EMの論理アドレスは正しいが、SMのシーケンス番号が「0」ではないので、無効処理に移る。無効データは、SMにフラグTSが現れるエントリである最初のエントリ(図11のエントリ(1)部分)である。つまり、これまで書かれた実データは、読込時にすべて無いものとみなされる。
このように、書込対象となる実データのサイズに関わらず、そのすべてがデータブロックに書き込まれ、かつ、ヘッダブロックのEMの論理アドレスも正しく書き込まれない限り、有効なデータとして扱われないので、書込前後のデータの整合性を確実にとることができる。
ここで、既に不揮発性メモリ5に書き込まれたデータについて、無効(無いもの)とみなされたデータおよびヘッダ情報が書き込まれた後の書込処理について触れておく。メモリ制御装置1では、このようなデータおよびヘッダ情報が書き込まれた領域は、所定の条件が満たされたとき、例えばブロックの再構築、ないし初期化がなされるまで、そのままの状態とし、新たなデータの書込が発生したときは、残りの空いている領域にそれを書き込むようにする。
例えば、5000HのアドレスへのデータDaの書込に失敗したためにメモリ構造を図10の状態にしたまま、5002Hのアドレスに、上述したD1、すなわち3バイトのデータ(11H、12H、13H)を新たに書き込む場合の例を説明する。
図12は、D1をデータブロックおよびヘッダブロックに正常に書き込んだ状態を示す図である。5000Hのアドレスから16バイトのデータは、図4に示したものと同じようになり、SMには、実データD1についてフラグ設定無しを表す「0」およびシーケンシャル番号「0」、EMについては、同一論理アドレスの直前のエントリ位置は「なし」で、書き込まれている論理アドレスは「0X5000」となる。
このように、本実施形態のメモリ制御装置1では、書込時には、取得した実データのサイズに応じて1又は複数のエントリを不揮発性メモリ5において確保するとともに、確保したエントリを、実データの最初のものから最後のものまでシーケンシャルに関連付け、その実データについて何番目のエントリかを表す情報をSMに書き込んだ後、データブロックへの実データの書込を行い、実データの書込が正常に終了したことを検知したときは、書込終了を表すフラグ情報をヘッダブロックのEMに書き込み、読込時は、実データについてのヘッダ情報(SM/EMに書き込まれている情報)を参照し、EMが書き込まれておらず、あるいはEMが書き込まれていてもSMが最後のエントリのものでない場合は、既に書き込まれているすべての実データを無効データとして扱うようにしたので、実データのサイズが不定であっても、ヘッダ情報を含むすべての書込が正常に完了しない限り、読込時に、実データが無効データとして扱われるため、不具合発生の前後における実データの整合性をとるための付随的な処理がまったく不要になる。つまり、不定サイズの実データの書込をアトミックに操作することができる。
不揮発性メモリ5には、データブロックおよびヘッダブロックの書込状態が、一定の消去条件を満たして一括して消去されるまで保持されているので、例えば、既存のファイルシステムにおけるジャーナリングのように、データの書込において、別途ログを残すことなく、また、一般的なデータベース管理システムが有するロールバックやロールフォワードのような仕組みを必要とするまでもなく、実データがすべて正常に書き込まれたのか、あるいは、すべて書き込まれなかったのか、書き込まれなかったときはどの時点で書込に失敗したのかという情報を知ることができる。
なお、本実施形態では、エントリとブロックの2階層のグループで実データおよびヘッダ情報の書込を行う場合の例を説明したが、3階層であっても良い。あるいは、エントリ単位であっても良い。
本発明は、不揮発性メモリをデータ記録媒体として使用する簡易タイプの情報処理装置、例えばパーソナルコンピュータ、ディジタルカメラ、携帯電話端末等において、広く利用することができる。
本発明の実施の一形態となるメモリ制御装置の全体構成図。 本実施形態によるメモリ構造例を示す図。 実データブロックにおけるヘッダブロック及び管理領域ブロックの割当例を示す図。 あるデータブロックに、3バイトの実データが書き込まれた状態を示す図。 図4の状態で、同じデータブロックの他のアドレスに1バイトの実データを書き込んだ状態を示す図。 図5の状態後、同じデータブロックの他のアドレスに1バイトの実データを書き込んだ状態を示す図。 読込処理の手順説明図。 図7のステップS104の内容の詳細手順説明図。 実データDaが正常に書かれた状態を示す図。 データブロックに33バイト中の28バイトだけ書き込んだ直後に電源切断があったときの状態を示す図。 データブロックに33バイトのすべてを書き込んだ後、ヘッダブロックにEMを書き込もうとした時点で電源切断があった状態を示す図。 無効データについて書き込まれている状態で、実データD1をデータブロックに正常に書き込んだ状態を示す図。
符号の説明
1・・・メモリ制御装置、2・・・プロセッサ、3・・・プログラムメモリ、4・・・ワーキングメモリ、5・・・不揮発性メモリ、6・・・データバス、51・・・初期データブロック、52・・・管理領域ブロック、53・・・実データブロック、521,531・・・エントリ

Claims (6)

  1. 所定のデータサイズを1回の書込単位とするデータ領域と、このデータ領域からのデータ読込時に参照されるヘッダ領域とを有するメモリへのアクセスを制御する装置が実行する方法であって、
    書込対象となる実データを取得し、取得した実データのサイズに応じて1又は複数の書込単位分のデータ領域を前記メモリにおいて確保するとともに、確保した書込単位分のデータ領域を前記実データの最初のものから最後のものまでシーケンシャルに関連付け、当該実データについて何番目の書込単位かを表す第1フラグ情報を前記ヘッダ領域に書き込んだ後、前記データ領域に対して当該書込単位の実データの書込を行い、該実データの書込が正常に終了したことを検知したときは、書込終了を表す第2フラグ情報を前記第1フラグ情報と関連付けて前記ヘッダ領域に書き込む段階と、
    前記実データについての前記ヘッダ領域を前記最後の書込単位から逆順に参照し、前記最後の書込単位のヘッダ領域に前記第2フラグ情報が書き込まれておらず、あるいは前記最後の書込単位のヘッダ領域に前記第2フラグ情報が書き込まれていても前記第1フラグ情報が最後の書込単位のものでない場合は、前記1又は複数の書込単位分のデータ領域に既に書き込まれているすべての実データを無効データとして扱う段階とを有し、
    前記装置は、前記無効データが書き込まれているデータ領域および前記ヘッダ領域の書込状態を保持したまま、書込対象となる新たな実データを取得し、取得した新たな実データのサイズを書き込むための前記データ領域を新たに確保する、
    メモリアクセス制御方法。
  2. 前記第1フラグ情報は、確保した書込単位の数を最大値とするシーケンス番号を含んでおり、
    前記装置は、前記実データの前記データ領域への正常な書込が進む度に、最初の書込単位を起点とし、最後の書込単位であることを表す数値を終点として、前記シーケンス番号を逐次小さい値に更新し、更新したシーケンス番号を当該書込単位の第1フラグ情報として前記ヘッダ領域に書き込む、
    請求項1記載のメモリアクセス制御方法。
  3. 前記第2フラグ情報は、書込単位毎に、その直前の書込単位を識別するための識別情報と、前記実データが書き込まれた位置を表す論理アドレスとを含んでおり、
    前記装置は、前記第1フラグ情報の前記ヘッダ領域への書込と、前記実データの前記データ領域への書込とがいずれも正常に実行されたときに前記第2フラグ情報を生成し、この第2フラグ情報を当該第1フラグ情報とペアで参照される領域に書き込む、
    請求項2記載のメモリアクセス制御方法。
  4. 前記装置は、前記保持してあるデータ領域および前記ヘッダ領域の書込状態を、一定の消去条件を満たしたときに、一括して消去する、
    請求項記載のメモリアクセス制御方法。
  5. 所定のデータサイズを1回の書込単位とするデータ領域と、このデータ領域からのデータ読込時に参照されるヘッダ領域とを有するメモリへのアクセスを制御するメモリ制御装置であって、
    書込対象となる実データを取得する実データ取得手段と、
    取得した実データのサイズに応じて1又は複数の書込単位分のデータ領域を前記メモリにおいて確保するとともに、確保した書込単位分のデータ領域を前記実データの最初のものから最後のものまでシーケンシャルに関連付け、当該実データについて何番目の書込単位かを表す第1フラグ情報を前記ヘッダ領域に書き込んだ後、前記データ領域に対して当該書込単位の実データの書込を行い、該実データの書込が正常に終了したことを検知したときは、書込終了を表す第2フラグ情報を前記第1フラグ情報と関連付けて前記ヘッダ領域に書き込む書込手段と、
    前記実データについての前記ヘッダ領域を、前記最後の書込単位から逆順に参照し、前記最後の書込単位のヘッダ領域に前記第2フラグ情報が書き込まれておらず、あるいは前記最後の書込単位のヘッダ領域に前記第2フラグ情報が書き込まれていても前記第1フラグ情報が最後の書込単位のものでない場合は、前記1又は複数の書込単位分のデータ領域に既に書き込まれているすべての実データを無効なデータとして扱う読込手段とを有し、
    前記書込手段は、前記無効データが書き込まれているデータ領域および前記ヘッダ領域の書込状態を保持したまま、書込対象となる新たな実データを取得し、取得した新たな実データのサイズを書き込むための前記データ領域を新たに確保する、
    メモリ制御装置。
  6. 所定のデータサイズを1回の書込単位とするデータ領域と、このデータ領域からのデータ読込時に参照されるヘッダ領域とを有するメモリへのアクセスが可能なコンピュータを、書込対象となる実データを取得する実データ取得手段、
    取得した実データのサイズに応じて1又は複数の書込単位分のデータ領域を前記メモリにおいて確保するとともに、確保した書込単位分のデータ領域を前記実データの最初のものから最後のものまでシーケンシャルに関連付け、当該実データについて何番目の書込単位かを表す第1フラグ情報を前記ヘッダ領域に書き込んだ後、前記データ領域に対して当該書込単位の実データの書込を行い、該実データの書込が正常に終了したことを検知したときは、書込終了を表す第2フラグ情報を前記第1フラグ情報と関連付けて前記ヘッダ領域に書き込む書込手段、および、
    前記実データについての前記ヘッダ領域を、前記最後の書込単位から逆順に参照し、前記最後の書込単位のヘッダ領域に前記第2フラグ情報が書き込まれておらず、あるいは前記最後の書込単位のヘッダ領域に前記第2フラグ情報が書き込まれていても前記第1フラグ情報が最後の書込単位のものでない場合は、前記1又は複数の書込単位分のデータ領域に既に書き込まれているすべての実データを無効なデータとして扱う読込手段として機能させ、
    更に、前記書込手段を、前記無効データが書き込まれているデータ領域および前記ヘッダ領域の書込状態を保持したまま、書込対象となる新たな実データを取得し、取得した新たな実データのサイズを書き込むための前記データ領域を新たに確保するよう機能させる、
    コンピュータプログラム。
JP2008150479A 2008-02-20 2008-06-09 メモリアクセス制御方法及びメモリ制御装置、コンピュータプログラム Active JP5273780B2 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2008150479A JP5273780B2 (ja) 2008-06-09 2008-06-09 メモリアクセス制御方法及びメモリ制御装置、コンピュータプログラム
US12/867,584 US8595413B2 (en) 2008-02-20 2008-12-09 Memory control method and device, memory access control method, computer program, and recording medium
PCT/JP2008/072724 WO2009104330A1 (ja) 2008-02-20 2008-12-09 メモリ制御方法及び装置、メモリアクセス制御方法、コンピュータプログラム、記録媒体
CN2008801281804A CN101978361B (zh) 2008-02-20 2008-12-09 存储器控制方法以及装置、存储器访问控制方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008150479A JP5273780B2 (ja) 2008-06-09 2008-06-09 メモリアクセス制御方法及びメモリ制御装置、コンピュータプログラム

Publications (2)

Publication Number Publication Date
JP2009295089A JP2009295089A (ja) 2009-12-17
JP5273780B2 true JP5273780B2 (ja) 2013-08-28

Family

ID=41543189

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008150479A Active JP5273780B2 (ja) 2008-02-20 2008-06-09 メモリアクセス制御方法及びメモリ制御装置、コンピュータプログラム

Country Status (1)

Country Link
JP (1) JP5273780B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101739386B1 (ko) * 2010-08-23 2017-05-24 엘지전자 주식회사 메모리 장치 및 그 제어 방법
JP5451682B2 (ja) * 2011-05-20 2014-03-26 株式会社東海理化電機製作所 フラッシュメモリ装置
CN117707434B (zh) * 2024-02-02 2024-05-17 深圳曦华科技有限公司 一种Flash的数据写入方法、装置、车辆以及存储介质

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5200959A (en) * 1989-10-17 1993-04-06 Sundisk Corporation Device and method for defect handling in semi-conductor memory
JPH10320984A (ja) * 1997-05-15 1998-12-04 Sharp Corp 記憶装置
JP3863479B2 (ja) * 2002-10-30 2006-12-27 Necトーキン株式会社 Icカード
JP2008077669A (ja) * 2007-10-09 2008-04-03 Mitsubishi Electric Corp 記録方式

Also Published As

Publication number Publication date
JP2009295089A (ja) 2009-12-17

Similar Documents

Publication Publication Date Title
JP3692313B2 (ja) 不揮発性メモリの制御方法
US8595413B2 (en) Memory control method and device, memory access control method, computer program, and recording medium
JP4037605B2 (ja) 不揮発性メモリユニットのコントローラ、同コントローラを有するメモリシステム及び不揮発性メモリユニットの制御方法
KR20050069925A (ko) 비휘발성 기억장치의 제어방법
JP2004127185A (ja) メモリカード
JP2007133487A (ja) ファイル管理方法、装置、およびプログラム
JP2008033801A (ja) メモリデータ管理装置
US20050278480A1 (en) Method of writing data into flash memory
JPH10124384A (ja) 不揮発性半導体メモリの制御方法
JP5273780B2 (ja) メモリアクセス制御方法及びメモリ制御装置、コンピュータプログラム
JP4242245B2 (ja) フラッシュrom制御装置
JP5066894B2 (ja) 記憶媒体制御装置
JP2009093528A (ja) メモリデータ管理装置
JP4794530B2 (ja) 半導体装置および携帯電話
JP4826232B2 (ja) 情報処理装置およびブートプログラムの書き換え方法
US6646917B1 (en) Storage device managing nonvolatile memory by converting logical address to physical address of nonvolatile memory
JP2008009614A (ja) メモリコントローラ、メモリシステム及びメモリ制御方法
JP3826115B2 (ja) 記憶装置、メモリ管理方法及びプログラム
JP2004078902A (ja) 記憶装置、メモリ管理方法及びプログラム
JP6040895B2 (ja) マイクロコンピュータ及び不揮発性メモリのブロック管理方法
JP2009276883A (ja) 半導体補助記憶装置
JP2010092113A (ja) 記憶装置、電子装置、および、データ管理方法
JP3978720B2 (ja) データ記憶方法
US20060069847A1 (en) Corruption tolerant method and system for deploying and modifying data in flash memory
JP2004310268A (ja) フラッシュメモリ内蔵の半導体装置、フラッシュメモリの制御方法およびそのプログラム

Legal Events

Date Code Title Description
RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20100714

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20100818

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20101125

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20110111

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110304

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130205

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130325

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130416

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130510

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 5273780

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250