(57)【要約】  【課題】  処理負荷の増大を抑制できる記憶装置、フラッシュメモリ制御装置、及びプログラムを提供する。  【解決手段】  フラッシュメモリ２１には、ｎ個のブロックＢＲ１〜ＢＲｎを構成要素とするブロック集合３７が少なくとも１つ設定されている。各ブロックＢＲｉには、ブロックＢＲｊにて書込みデータの書込みが実行されたことを示す書込みフラグが書込み可能である。ＣＰＵ１１は、新たな書込みデータの書込み要求に応じて、書込みフラグが書込まれていないブロック３１をブロックＢＲｋとしたときに、ブロックＢＲｋの次に書込みデータの書込みを実行するブロックとして設定されているブロックＢＲｌに書込まれていたデータを消去する処理と、ブロックＢＲｌに新たな書込みデータを書込む処理と、ブロックＢＲｋに書込みフラグを書込む処理と、を実行する。【選択図】図４
2016004558.tif 000002
【特許請求の範囲】
【請求項１】
ブロック単位でデータの消去が行われ、該ブロックよりも小さい単位でデータの書込みが行われるブロック（３１）を複数備えるフラッシュメモリ（２１）と、
前記ブロックに書込まれたデータの読出しと、前記ブロックへのデータの書込みと、を実行する制御手段（１１）と、を備え、
前記フラッシュメモリには、ｎ個（ｎは２以上の整数）の前記ブロックＢＲ１〜ＢＲｎを構成要素とするブロック集合（３７）が少なくとも１つ設定されており、
前記ブロック集合の構成要素である各ブロックＢＲｉ（ｉは１以上ｎ以下の各整数）には、ホスト装置からの要求に応じて書込まれるデータである書込みデータと、前記ブロック集合の構成要素のうちブロックＢＲｉに予め対応付けられたブロックである対象ブロックＢＲｊ（ｊは１以上ｎ以下のｉ以外の整数であって、ｉの値ごとに異なる整数）にて前記書込みデータの書込みが実行されたことを示す書込みフラグと、が書込み可能であり、
前記制御手段は、前記ホスト装置からの新たな書込みデータの書込み要求に応じて、前記ブロック集合の構成要素のうち最後に前記書込みデータの書込みが実行されたブロックをブロックＢＲｋ（ｋは１以上ｎ以下の整数）としたときに、該ブロックＢＲｋの次に前記書込みデータの書込みを実行するブロックとして設定されているブロックＢＲｌ（ｌは１以上ｎ以下の整数）に書込まれていた前記書込みデータ及び前記書込みフラグを含むデータを消去する消去処理（Ｓ５）と、前記ブロックＢＲｌに前記新たな書込みデータを書込む第１書込み処理（Ｓ６）と、前記対象ブロックとして前記ブロックＢＲｌが対応付けされているブロックＢＲｍに前記書込みフラグを書込む第２書込み処理（Ｓ７）と、を実行する
ことを特徴とする記憶装置。
【請求項２】
前記制御手段は、前記ホスト装置からのデータ読出し要求に応じて、前記ブロック集合の構成要素のうち最後に前記書込みデータの書込みが実行されたブロックに書込まれていた前記書込みデータを読み出す読出し処理を実行する
ことを特徴とする請求項１に記載の記憶装置。
【請求項３】
前記ブロック集合の構成要素である各ブロックＢＲｉには、前記対象ブロックＢＲｊに対して前記消去処理が開始されたことを示す消去中フラグが書込み可能であり、
前記制御手段は、前記ホスト装置からの新たな書込みデータの書込み要求に応じて前記ブロックＢＲｌに前記消去処理が開始されたときに、前記ブロックＢＲｍに前記消去中フラグを書込む第３書込み処理（Ｓ４）を実行し、該第３書込み処理の後に前記ブロックＢＲｌに前記消去処理を実行し、該消去処理の後に前記ブロックＢＲｌに前記第１書込み処理を実行し、該第１書込み処理の後に前記ブロックＢＲｍに前記第２書込み処理を実行する
ことを特徴とする請求項１又は請求項２に記載の記憶装置。
【請求項４】
前記制御手段が前記第３書込み処理を開始してから前記第２書込み処理を終了するまでの期間を除く所定のタイミングにおいて、前記書込みフラグが書込まれておらず、かつ前記消去中フラグが書込まれている前記ブロックである消去中示唆ブロックを検出する検出手段（１１）を備え、
前記制御手段は、前記検出手段により前記ブロックが検出されたときには、該検出されたブロックをブロックＢＲｐ（ｐは１以上ｎ以下の整数）としたときに、該ブロックＢＲｐの前記対象ブロックであるブロックＢＲｑに書込まれていた前記書込みデータ及び前記書込みフラグを含むデータを消去する処理を実行し、該処理の後に前記ブロック集合の構成要素である各ブロックのうち前記ブロックＢＲｑを除く前記ブロックのいずれかに書込まれている前記書込みデータを前記ブロックＢＲｑに書込み、その後に前記ブロックＢＲｐに前記書込みフラグを書込む処理を実行する
ことを特徴とする請求項３に記載の記憶装置。
【請求項５】
ブロック単位でデータの消去が行われ、該ブロックよりも小さい単位でデータの書込みが行われるブロック（３１）を複数備えるフラッシュメモリ（２１）における前記ブロックに書込まれたデータの読出しと、前記ブロックへのデータの書込みと、を実行する制御手段（１１）と、
前記フラッシュメモリの備える前記複数のブロックを、ｎ個（ｎは２以上の整数）の前記ブロックＢＲ１〜ＢＲｎを構成要素とするブロック集合として少なくとも１つ設定する設定手段（１１）と、を備え、
前記制御手段は、前記ブロック集合の構成要素である各ブロックＢＲｉ（ｉは１以上ｎ以下の各整数）に対してホスト装置からの要求に応じて書込まれるデータである書込みデータを書込む第１書込み処理（Ｓ６）と、前記ブロックＢＲｉに対して、前記ブロック集合の構成要素のうちブロックＢＲｉに予め対応付けられたブロックである対象ブロックＢＲｊ（ｊは１以上ｎ以下のｉ以外の整数であって、ｉの値ごとに異なる整数）にて前記書込みデータの書込みが実行されたことを示す書込みフラグを書込む第２書込み処理（Ｓ７）と、が実行可能であり、
また前記制御手段は、前記ホスト装置からの新たな書込みデータの書込み要求に応じて、前記ブロック集合の構成要素のうち最後に前記書込みデータの書込みが実行されたブロックをブロックＢＲｋ（ｋは１以上ｎ以下の整数）としたときに、該ブロックＢＲｋの次に前記書込みデータの書込みを実行するブロックとして設定されているブロックＢＲｌ（ｌは１以上ｎ以下の整数）に書込まれていた前記書込みデータ及び前記書込みフラグを含むデータを消去する消去処理（Ｓ５）と、前記ブロックＢＲｌに対する前記第１書込み処理と、前記対象ブロックとして前記ブロックＢＲｌが対応付けされているブロックＢＲｍに対する前記第２書込み処理と、を実行する
ことを特徴とするフラッシュメモリ制御装置。
【請求項６】
請求項５に記載のフラッシュメモリ制御装置の前記制御手段及び前記設定手段としてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フラッシュメモリを備える記憶装置に関する。
【背景技術】
【０００２】
近年、通信機器やＡＶ機器をはじめとする様々な分野の機器においてフラッシュメモリが用いられている。フラッシュメモリは、複数のメモリセルの集合であるブロックを単位としてデータ消去が行われるため、書込み単位のサイズと消去単位のサイズとが異なる場合がある。例えば書込みは数バイト（ｂｙｔｅ）単位、消去は数十バイト〜数キロバイト単位のブロックごとに実施される。
【０００３】
フラッシュメモリは上書きができない特性上、データをブロック内に順次書込む追記書込みによりデータを管理する場合がある。それにより、例えば、１つのブロック内に追記を繰り返しブロックが満杯になると、満杯になったブロック以外のいずれかのブロックのデータを消去して空きブロックを作成し、有効なデータをコピーする手法が採用される（以降、この処理を再編処理と記載する）。
【０００４】
再編処理の実行時には、ブロックのデータ消去処理とコピー処理が集中するため、フラッシュメモリを備える記憶システム全体としての処理負荷が増大する結果、再編処理の間はデータへのアクセスに支障が生じやすくなってしまう。
【０００５】
従来、アクセスがない待機時に再編処理を実行し、再編処理中にデータへアクセスがあった場合、再編処理を中断し、アクセス完了後に再開することで、再編時におけるデータへのアクセスの支障抑制を図るように構成された記憶装置が提案されている（特許文献１参照）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許第５１６２８４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記特許文献１の装置は、再編処理自体は必要となるため、再編処理によって処理負荷が増大する期間が長くなるとシステム全体としてのパフォーマンスを低下させてしまう可能性がある。
【０００８】
本発明の目的は、処理負荷の増大を抑制できる記憶装置、フラッシュメモリ制御装置、及びプログラムを提供することである。
【課題を解決するための手段】
【０００９】
上述した課題を解決するためになされた請求項１に記載の発明は、ブロック単位でデータの消去が行われ、該ブロックよりも小さい単位でデータの書込みが行われるブロック（３１）を複数備えるフラッシュメモリ（２１）と、上記ブロックに書込まれたデータの読出しと、上記ブロックへのデータの書込みと、を実行する制御手段（１１）と、を備える記憶装置（１）である。
【００１０】
この記憶装置における上記フラッシュメモリには、ｎ個（ｎは２以上の整数）のブロックＢＲ１〜ＢＲｎを構成要素とするブロック集合（３７）が少なくとも１つ設定されている。
【００１１】
またブロック集合の構成要素である各ブロックＢＲｉ（ｉは１以上ｎ以下の各整数）には、書込みデータと、書込みフラグと、が書込み可能である。書込みデータとは、ホスト装置（３）からの要求に応じて書込まれるデータである。書込みフラグとは、ブロック集合の構成要素のうちブロックＢＲｉに予め対応付けられたブロックである対象ブロックＢＲｊ（ｊは１以上ｎ以下のｉ以外の整数であって、ｉの値ごとに異なる整数）にて上記書込みデータの書込みが実行されたことを示すフラグである。
【００１２】
そして上記制御手段は、ホスト装置からの新たな書込みデータの書込み要求に応じて、ブロック集合の構成要素のうち最後に書込みデータの書込みが実行されたブロックをブロックＢＲｋ（ｋは１以上ｎ以下の整数）としたときに、該ブロックＢＲｋの次に前記書込みデータの書込みを実行するブロックとして設定されているブロックＢＲｌ（ｌは１以上ｎ以下の整数）に書込まれていた書込みデータ及び書込みフラグを含むデータを消去する消去処理（Ｓ５）と、ブロックＢＲｌに新たな書込みデータを書込む第１書込み処理（Ｓ６）と、対象ブロックとしてブロックＢＲｌが対応付けされているブロックＢＲｍに上記書込みフラグを書込む第２書込み処理（Ｓ７）と、を実行する。
【００１３】
このように構成された記憶装置は、ホスト装置から書込み要求を受けるとブロック集合内において最も書込みタイミングの古いブロックに書込まれたデータを消去してそのブロックに新しい書込みデータを書込む。
【００１４】
ここで、消去及び書込みを実行すべきブロックがどのブロックであるかは、ブロック集合の構成要素である各ブロックの書込みフラグをチェックすることで確認が可能である。最後に書込まれたブロックがどのブロックであるかによって、当該ブロック集合における書込みフラグの書込まれた状況が変化するためである。
【００１５】
よって上記記憶装置では、再編処理にて行われるコピー処理が不要になり、再編処理に伴う処理負荷の増大、いわゆるオーバーヘッドの発生を抑制できる。それにより、オーバーヘッドの発生に伴うシステム全体のパフォーマンス低下やデータアクセスのレスポンス低下の発生を抑制できる。
【００１６】
上述した対象ブロックＢＲｊについて、ｊは１以上ｎ以下のｉ以外の整数であって、ｉの値ごとに異なる整数であるが、これは即ち、ブロック集合の各ブロックは、ブロック集合における他のいずれかのブロックに対象ブロックとして対応付けられているということになる。
【００１７】
対象ブロックのより具体的な例としては、変数ｊはｉ＋ａをｎで除算したときの剰余に１を加算した整数とすることができる。ａとは０以上ｎ−２以下の整数である。
なお本発明においては、ブロックの関係をｉ，ｊ，ｋ，ｌ，ｍ，ｐ，ｑなどの変数を用いて説明しているが、数値自体は発明の説明のために用いているものであり、各ブロックが実質的に上記変数を用いて説明される関係を満たしていればよい。
【００１８】
また上述した課題を解決するためになされた請求項５に記載の発明は、ブロック単位でデータの消去が行われ、該ブロックよりも小さい単位でデータの書込みが行われるブロック（３１）を複数備えるフラッシュメモリ（２１）における上記ブロックに書込まれたデータの読出しと、上記ブロックへのデータの書込みと、を実行する制御手段（１１）と、フラッシュメモリの備える複数のブロックを、ｎ個（ｎは２以上の整数）のブロックＢＲ１〜ＢＲｎを構成要素とするブロック集合（３７）として少なくとも１つ設定する設定手段（１１）と、を備えるフラッシュメモリ制御装置である。
【００１９】
このフラッシュメモリ制御装置において、上記制御手段は、上記ブロック集合の構成要素である各ブロックＢＲｉ（ｉは１以上ｎ以下の各整数）に対してホスト装置（３）からの要求に応じて書込まれるデータである書込みデータを書込む第１書込み処理（Ｓ６）と、ブロックＢＲｉに対して、ブロック集合の構成要素のうちブロックＢＲｉに予め対応付けられたブロックである対象ブロックＢＲｊ（ｊは１以上ｎ以下のｉ以外の整数であって、ｉの値ごとに異なる整数）にて上記書込みデータの書込みが実行されたことを示す書込みフラグを書込む第２書込み処理（Ｓ７）と、が実行可能である。
【００２０】
また上記制御手段は、ホスト装置からの新たな書込みデータの書込み要求に応じて、ブロック集合の構成要素のうち最後に書込みデータの書込みが実行されたブロックをブロックＢＲｋ（ｋは１以上ｎ以下の整数）としたときに、該ブロックＢＲｋの次に前記書込みデータの書込みを実行するブロックとして設定されているブロックＢＲｌ（ｌは１以上ｎ以下の整数）に書込まれていた書込みデータ及び書込みフラグを含むデータを消去する消去処理（Ｓ５）と、ブロックＢＲｌに対する上記第１書込み処理と、対象ブロックとしてブロックＢＲｌが対応付けされているブロックＢＲｍに対する上記第２書込み処理と、を実行する。
【００２１】
このように構成されたフラッシュメモリ制御装置では、上述した請求項１の記憶装置と同様に、再編処理にて行われるコピー処理が不要になり、再編処理に伴う処理負荷の増大、いわゆるオーバーヘッドの発生を抑制でき、それに伴うシステム全体のパフォーマンス低下やデータアクセスのレスポンス低下の発生を抑制できる。
【００２２】
また上述した課題を解決するためになされた請求項６に記載の発明は、上述した請求項５に記載のフラッシュメモリ制御装置の制御手段及び設定手段としてコンピュータを機能させるためのプログラム（１５ａ）である。
【００２３】
このようなプログラムであれば、コンピュータを請求項５に記載のフラッシュメモリ制御装置として機能させることができる。
なお、この欄及び特許請求の範囲に記載した括弧内の符号は、一つの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、本発明の技術的範囲を限定するものではない。
【図面の簡単な説明】
【００２４】
【図１】記憶装置の全体構成を示すブロック図である。
【図２】フラッシュメモリへの書込み制御の方法を説明する模式図である。
【図３】ブロックの記憶領域を模式的に示す図である。
【図４】データ書込み処理の処理手順を説明するフローチャートである。
【図５】ブロック集合へのデータ書込みの手順を説明する模式図である。
【図６】ブロック集合へのデータ書込みの手順を説明する模式図である。
【図７】データ復旧処理の処理手順を説明するフローチャートである。
【図８】ブロック集合におけるデータ復旧の手順を説明する模式図である。
【図９】データ復旧処理における各ブロックの状態の組み合わせと処置内容を示す表である。
【図１０】変形例におけるブロック集合へのデータ書込みの手順を説明する模式図である。
【発明を実施するための形態】
【００２５】
以下に本発明の実施形態を図面と共に説明する。
［実施形態］
（１）全体構成
図１は、フラッシュメモリを搭載してなる記憶装置１の全体構成を示すブロック図である。記憶装置１は、ＣＰＵ１１、ＲＡＭ１３、ＲＯＭ１５、フラッシュ（Ｆｌａｓｈ）コントローラ１７、入出力インターフェース（Ｉ／Ｏ）１９、フラッシュメモリ２１を備え、内部バス２３を介してデータの送受信を行う。また電源２５より各部に電力が供給される。
【００２６】
記憶装置１は車両に搭載されて用いられる情報処理システムの一部を構成する装置であり、ホスト装置３の一例である車両のドアＥＣＵからのアクセス（データの書込み又は読出し）要求に応じて、ドアの開閉回数を示すデータをドアＥＣＵから取得して書込む。なおホスト装置３としては車両の様々なＥＣＵを採用できる。もちろん記憶装置１が車両に搭載されて用いられる装置である必要はなく、車載機器以外でも様々な情報処理装置がホスト装置３となりうる。
【００２７】
ＣＰＵ１１は、ＲＯＭ１５に記憶されている複数のプログラム１５ａ（Ｆｌａｓｈドライバソフト及び複数のアプリケーションソフト）に従って、記憶装置１を統括制御するものであり、ホスト装置３からのフラッシュメモリ２１へのアクセス要求に応じて、フラッシュメモリ２１に対するデータの書込み及び読出しを制御する。
【００２８】
ホスト装置３からの要求に応じてフラッシュメモリ２１に書込まれるデータを、便宜上、書込みデータと記載する。書込みデータはホスト装置３からの要求に応じて読み出されるデータでもある。なお書込みを要求するホスト装置と読出しを要求するホスト装置は同一の装置でなくともよい。
【００２９】
ＲＡＭ１３はＣＰＵ１１により使用される作業領域である。またＲＡＭ１３はフラッシュメモリ２１から読み出された書込みデータ及びフラッシュメモリ２１に書込むべき書込みデータを一時的に保持するバッファとして機能する。
【００３０】
フラッシュコントローラ１７は、ＣＰＵ１１から与えられる指令に基づいてフラッシュメモリ２１に対する書込み処理、読出し処理、消去処理等の処理を実行する。
フラッシュメモリ２１は、最小消去単位であるブロック３１を１０２４個有している。
【００３１】
ブロック３１は、１ブロックあたりの容量が３２バイトである比較的小さいブロックであり、追記書込みによるデータの記憶の最小単位は２バイトである。またブロックの個数が１０２４であるため総記憶領域は３２キロバイトとなる。なお、ブロック３１の記憶容量、書込みのサイズ及びフラッシュメモリ２１に設けられる個数は上述したものに限定されない。
【００３２】
本実施形態におけるフラッシュメモリ２１への書込み制御の方法を、ブロック３１を模式的に示す図２を用いて説明する。
フラッシュメモリ２１には、３つのブロック３１（ＢＲ１〜ＢＲ３）を構成要素とするブロック集合３７が複数設定されている。なおブロックＢＲ１〜ＢＲ３はブロック集合３７内の各ブロック３１を識別する符号であり、複数のブロック集合３７それぞれにブロックＢＲ１〜ＢＲ３が含まれる。
【００３３】
ブロック集合３７の構成要素である各ブロックＢＲｉ（ｉは１以上３以下の各整数）は、上述した書込みデータを書込み可能な記憶領域であるデータ部３３と、書込みフラグ及び消去中フラグを書込み可能な記憶領域であるフラグ部３５と、を有している。
【００３４】
書込みフラグとは、ブロック集合３７の構成要素のうちブロックＢＲｉに予め対応付けられたブロックである対象ブロックＢＲｊ（ｊはｉを３で除算したときの剰余に１を加算した整数）にて書込みデータの書込みが実行されたことを示すフラグである。また消去中フラグとは、対象ブロックＢＲｊ（以降、単に対象ブロックとも記載する）に書込まれたデータを消去する処理が開始されたことを示すフラグである。以降、書込みフラグ及び消去中フラグを合せて管理フラグと記載する。
【００３５】
次に、ブロックＢＲｉに書込まれた管理フラグが示す対象ブロックＢＲｊの情報について説明する。
図２に示すＩＤｘのブロック集合３７において矢印で示すように、ブロックＢＲｉのフラグ部３５に書込まれる管理フラグは対象ブロックＢＲｊに関する情報を示している（対象ブロックＢＲｊの状態を監視している）。ブロックＢＲｉはそれぞれ異なる対象ブロックＢＲｊに関する情報を示す管理フラグが書込み可能であり、それらが順番にローテーションして循環するようになっている。
【００３６】
ブロック３１には、図３に示すように、フラグ部３５として書込みフラグ（Ｆ）及び消去中フラグ（Ｍ）を書込むデータ領域が設けられている。対象ブロックの書込みデータの情報はこれらのフラグの組み合わせにより示される。なおブロック３１は上書きすることができない特徴を有しているため、フラグのみを更新することはできない。各ブロックが最小消去単位であるため、ブロックに記憶されたデータを消去することでフラグも消去される。
【００３７】
管理フラグにより示される情報は、管理フラグが書込まれていない初期状態（以降「−」と記載する）と、対象ブロックの消去処理が開始されてから書込みデータの書込みが完了する前の状態である「消去中」と、対象ブロックへの書込みデータの書込みが完了した状態である「書込み済」と、の３つである。
【００３８】
具体的には、Ｍ＝ｂｌａｎｋ，Ｆ＝ｂｌａｎｋ（ｂｌａｎｋは、フラッシュコントローラ１７によりブロックの消去が実行された状態の初期値）のときは「−」であり、消去中フラグ（Ｍ）のみが書込まれた状態、即ちＭ＝非ｂｌａｎｋ，Ｆ＝ｂｌａｎｋのときは「消去中」である。
【００３９】
また、消去中フラグ（Ｍ）と書込みフラグ（Ｆ）の両方が書込まれた状態、即ちＭ＝非ｂｌａｎｋ，Ｆ＝非ｂｌａｎｋのときは「書込み済」である。なお、少なくともＭ，Ｆそれぞれの１書込み単位分の合計４バイト（２バイト＋２バイト）で管理フラグを示すことができる。
【００４０】
説明を図２に戻る。各ブロック集合３７にはＩＤが与えられており、ブロック集合３７の構成要素である３つのブロック３１がそのＩＤに紐付けられている。例えば図２では、ＩＤ１〜ＩＤｘまでのブロック集合３７が存在しており、各ブロック集合３７は３つのブロック３１により構成される。
【００４１】
１つのブロック集合３７には３つのブロック３１が存在するため、データ部３３も３つ存在する。ホスト装置３は、１つのブロック集合３７を１つのブロック３１と同じ容量の書込みデータが書込み可能である記憶領域として扱う。ＣＰＵ１１は、ホスト装置３からの書込み又は読出しの要求に含まれるＩＤ情報に基づいてブロック集合３７を特定し、そのブロック集合３７のいずれかのブロック３１を対象とした書込みデータの書込み又は読出しを実行する。
【００４２】
なお、各ブロック３１の識別情報（各ブロック３１の属するブロック集合３７のＩＤ情報及びブロック集合内で該ブロックを識別するための情報）と、各ブロック３１の物理アドレスと、の関係は、図示しない変換テーブルに記憶されている。なお識別情報と物理アドレスの関係は例えばブロックの状態に応じて変更可能に構成されていてもよい。
【００４３】
（２）ＣＰＵ１１による処理
（２．１）データ書込み処理
図４に示すフローチャートに基づいて、ＣＰＵ１１によるブロック集合３７へのデータ書込み処理の処理手順を説明する。
【００４４】
まずステップ１（以降ステップをＳと記載する）では、ＣＰＵ１１は更新要求が発生したか否かを判断する。具体的には、ホスト装置３からデータの書込みを要求するコマンドを受信したとき、いわゆる書込みのアクセスがあったときに更新要求が発生したと判断する。
【００４５】
次のＳ２では、ＣＰＵ１１はＳ１にて発生した更新要求のＩＤ（例えばＩＤｘ）と紐づくブロック集合３７を検索する。ホスト装置３からのデータ書込み要求のコマンドにはＩＤ情報が含まれており、ＣＰＵ１１はそのＩＤのブロック集合３７を検索する。なお上記コマンドにはＩＤ情報は含まれておらず、ＣＰＵ１１は書込み要求の種類（ホスト装置の種類、又は書込みデータの種類）に応じて予め定められたＩＤのブロック集合を検索する構成であってもよい。
【００４６】
次のＳ３では、Ｓ２で検索したブロック集合３７内の更新最古のブロック３１を特定する。ブロック集合３７内の全てのブロック３１に書込まれた管理フラグをチェックすることで、更新最古のブロック、即ち書込みデータが書込まれたタイミングが最も古いブロックを特定することができる。
【００４７】
図５及び図６における（ｉ）は更新要求が発生していない状態である通常状態を示している。また（ｉｉ）〜（ｖｉ）は上記（ｉ）の時間経過に伴う変化を示している。図５と図６とで同一の番号（ｉ）〜（ｖｉ）が付いている図は同一の状態を示している。
【００４８】
図５の（ｉ）において、ブロックＢＲ１，ブロックＢＲ２に書込まれた管理フラグは「書込み済」を示しており、ブロックＢＲ３に書込まれた管理フラグは「−」を示している。管理フラグが「−」を示しているブロックが更新最新のブロック、即ち書込みデータが書込まれたタイミングが最も新しいブロックであり、更新最新のブロックＢＲ３のローテーションに従った次のブロックＢＲ１がブロック集合３７のうち更新最古のブロック（即ち、ブロックＢＲ３の次に書込みデータの書込みを実行するブロックとして設定されているブロック）である。このように判断できる理由は後述する。
【００４９】
以下の処理については、説明の便宜上、図５及び図６に示す状態を例として説明する。
次のＳ４では、図５における（ｉｉ）のように、ブロックＢＲ３に書込まれた管理フラグが「消去中」に更新される。具体的には図６の（ｉｉ）のように消去中フラグ（Ｍ）が書込まれてＭ＝非ｂｌａｎｋとなる。
【００５０】
次のＳ５では、図５及び図６における（ｉｉｉ）のようにブロックＢＲ３に書込まれた管理フラグの対象ブロックであるブロックＢＲ１に記憶されたデータが消去される。ブロックＢＲ１には書込みデータ及び管理フラグが記憶されているため、これらが削除される。
【００５１】
次のＳ６では、ブロックＢＲ１にデータ書込みが行われる。具体的には、図５及び図６における（ｉｖ）のように、新たな書込みデータが書込まれる。管理フラグは未だ書込まれていないため「−」となる。
【００５２】
次のＳ７では、図５の（ｖ）に示すように、ブロックＢＲ３に書込まれた管理フラグが「書込み済」に更新される。具体的には図６の（ｖ）のように書込みフラグ（Ｆ）が書込まれてＦ＝非ｂｌａｎｋとなる。
【００５３】
以上の手順によりＩＤｘのブロック集合に対するデータの書込み処理が終了する。上述したようにブロックＢＲ１は（ｉｉｉ）にてデータが消去されることで管理フラグが初期状態「−」となる。よって、管理フラグが「−」を示すブロックが最も新しくデータが書込まれたブロックであると判断できる。また書込みの順番はブロックＢＲ１，ブロックＢＲ２，ブロックＢＲ３，ブロックＢＲ１・・・とローテーションすることから、ブロックＢＲ１が最新であるときにはブロックＢＲ２が更新最古のブロックであると判断できる。
【００５４】
次回のデータ書込み処理においてはブロックＢＲ２がデータ書込みの対象となり、処理実行後は（ｖｉ）に示す状態となる。
なお、上記Ｓ７における管理フラグを「書込み済」へ変更する処理、即ち書込みフラグ（Ｆ）の書込みが正常に完了することは、データを正常に管理する上で重要である。従って、書込みフラグ（Ｆ）への書込み時間中の電圧保持を行う保持手段を有することが考えられる。保持手段の一例としてコンデンサを用いることが考えられるが、他の装置により電圧保持がなされてもよい。
【００５５】
ところで、例えばフラッシュメモリ２１を初期化した後など、ブロック集合３７のいずれのブロック３１にも管理フラグが存在しない場合には、いずれかのブロック３１のデータを消去して書込みデータを書込むと共に、他のブロック３１に「書込み済」を示す管理フラグを書込む。それにより、書込みデータを書込んだブロック３１のみが管理フラグとして「−」を示すブロックとなるため、次回の書込み要求が発生したときから上述した書込み処理を実行できる。
【００５６】
（２．２）データ復旧処理
図７に示すフローチャートに基づいて、ＣＰＵ１１によるデータ復旧処理の処理手順を説明する。本処理は、電源喪失から復帰したタイミング、つまり電源が再投入されて装置が起動し、ＣＰＵ１１が本処理を実行できるようになったタイミングで開始される。
【００５７】
まずＳ１１では、ＣＰＵ１１は全てのＩＤに対応するブロック集合３７内の各ブロック３１の各管理フラグを確認する。
次のＳ１２では、Ｓ１１の確認の結果「消去中」を示す管理フラグが存在するか否かを判断する。上述したように、管理フラグが「消去中」を示すのは、消去中フラグ（Ｍ）＝非ｂｌａｎｋ，かつ書込みフラグ（Ｆ）＝ｂｌａｎｋのときである。即ちＳ１２では書込みフラグが書込まれておらず消去中フラグが書込まれているブロック（消去中示唆ブロック）を検出する。このような管理フラグが無ければ（Ｓ１２：ＮＯ）、即ち消去中示唆ブロックが検出されなければ、全てのブロック集合３７は通常状態であると考えられるため、特別な処理を行わず本処理を終了する。
【００５８】
一方、Ｓ１２にて「消去中」を示す管理フラグが存在する場合（Ｓ１２：ＹＥＳ）、即ち消去中示唆ブロックが検出された場合、例えば図８の（ｖｉｉ）〜（ｉｘ）の状態のときには、データ書込み処理の中断があったと考えられるため、続くＳ１３以降の処理を行う。なお図８の（ｖｉｉ）〜（ｉｘ）は図５の（ｉｉ）〜（ｉｖ）とそれぞれ同じ管理フラグの状態である。
【００５９】
以下の処理については、説明の便宜上、図８に示す状態を例として説明する。
Ｓ１３では、図８の（ｘ）に示すように、「消去中」を示すブロックＢＲ３に書込まれた管理フラグが監視する対象ブロックＢＲ１のデータを消去する。
【００６０】
そして次のＳ１４において、図８の（ｘｉ）に示すように、Ｓ１３にてデータを消去した対象ブロックＢＲ１に当該ブロック集合３７における最新データを書込むことにより、データを復旧する。最新データとは、「消去中」を示す管理フラグが書込まれたブロックＢＲ３に書込まれた書込みデータである。
【００６１】
次のＳ１５では、図８の（ｘｉｉ）に示すように、ブロックＢＲ３に書込まれた管理フラグが「書込み済」に更新される。具体的にはブロックＢＲ３に書込みフラグ（Ｆ）を書込む。その後、本処理を終了する。
【００６２】
ところで、Ｓ１２において「消去中」を示す管理フラグが存在すると判断される場合は図８に示す場合に限られず、図９に示す表の場合が考えられる。図９の表に示される状態の組み合わせの項目において、Ｆとは書込みフラグ（Ｆ）及び消去中フラグ（Ｍ）の両方が書込まれている「書込み済」を示す状態であり、Ｍとは消去中フラグ（Ｍ）のみが書込まれている「消去中」を示す状態である。
【００６３】
状態番号１，５，９のときは、通常状態であるため、データ復旧処理を行うことはない。一方その他の状態番号のとき、つまり状態にＭが存在するときは、上記Ｓ１３〜Ｓ１５の処理を実行して書込みデータを復旧させる。
【００６４】
ここで、状態番号３，７，１１ではＭが２つ存在する。図５及び図６に示すように、「消去中」を示す管理フラグが２つ存在する状態は想定されるシーケンスからは起こり得ないが、ブロック３１の消去処理中に電源が遮断された場合にはデータが不安定になり、例えば書込みフラグ（Ｆ）のみが削除されることで偶然にＭの状態となる可能性ある。従って、Ｍが２つ存在する状態も表中に示される。
【００６５】
（２．３）データ読出し処理
ＣＰＵ１１は、ホスト装置３からデータの読出しを要求するコマンドを受信したとき、いわゆる読出しのアクセスがあったときに、読出しを要求されたブロック集合３７内の全てのブロック３１に書込まれた管理フラグをチェックして、書込みフラグが書込まれておらず、管理フラグが「−」を示しているブロックを検出する。そして、当該ブロックに書込まれた書込みデータを読み出し、ホスト装置３に出力する。
【００６６】
なおここでいうホスト装置３とは、例えば記憶装置１から車両情報を取得するコンピュータシステムが想定される。つまり、記憶装置１に対して書込みデータの書込み要求を行うホスト装置３と、記憶装置３のフラッシュメモリ２１に書込まれた書込みデータの読出し要求を行うホスト装置３と、は同一の装置である必要はなく、異なる装置であってもよい。
【００６７】
（３）効果
本実施形態の記憶装置１は、ブロック単位でデータの消去が行われ、該ブロックよりも小さい単位でデータの書込みが行われるブロック３１を複数備えるフラッシュメモリ２１を備えており、ＣＰＵ１１（本発明における制御手段の一例）がフラッシュコントローラ１７を制御して、ブロック３１に書込まれたデータの読出しと、ブロック３１へのデータの書込みと、を実行する。
【００６８】
フラッシュメモリ２１には、ｎ個（本実施形態においてはｎ＝３）のブロックＢＲ１〜ＢＲｎを構成要素とするブロック集合３７が少なくとも１つ設定されている。より具体的には、ＣＰＵ１１（本発明における設定手段の一例）が各ブロック３１を、各ブロック３１の識別情報と各ブロック３１の物理アドレスとの関係を示す変換テーブルに基づいてブロック集合３７として設定する。
【００６９】
ブロック集合３７の構成要素である各ブロックＢＲｉ（ｉは１以上ｎ以下の各整数）には、ホスト装置３からの要求に応じて書込まれるデータである書込みデータと、対象ブロックＢＲｊ（ｊはｉをｎで除算したときの剰余に１を加算した整数）にて書込みデータの書込みが実行されたことを示す書込みフラグと、が書込み可能である。
【００７０】
そしてＣＰＵ１１は、ホスト装置３からの新たな書込みデータの書込み要求に応じて、ブロック集合３７の構成要素のうち最後に書込みデータの書込みが実行されたブロック３１をブロックＢＲｋ（ｋは１以上ｎ以下の整数）としたときに、該ブロックＢＲｋの次に前記書込みデータの書込みを実行するブロックとして設定されているブロックＢＲｌ（ｌは１以上ｎ以下の整数）に書込まれていた書込みデータ及び書込みフラグを含むデータを消去する消去処理（Ｓ５）と、ブロックＢＲｌに新たな書込みデータを書込む第１書込み処理（Ｓ６）と、対象ブロックとしてブロックＢＲｌが対応付けされているブロックＢＲｍに書込みフラグを書込む第２書込み処理（Ｓ７）と、を実行する。
【００７１】
なお本実施形態において、ブロックＢＲｌの変数ｌはより詳細にはｋをｎで除算したときの剰余に１を加算した整数である。
またブロックＢＲｍは、上述した“次に書込みを行うブロック”を対象ブロックとするブロックである。
【００７２】
このように構成された本実施形態の記憶装置１は、ブロック集合３７に対して新たな書込みデータを書込むときには、ブロック集合３７内において最も書込みタイミングの古いブロック３１に書込まれたデータを消去して新しい書込みデータを書込む。
【００７３】
よって、他のブロックへのデータのコピー処理を伴う再編処理を実行する従来の記憶装置と比較すると、再編処理にて実行されるコピー処理が不要となるため、再編処理に伴う処理負荷の増大、いわゆるオーバーヘッドの発生を抑制でき、それに伴うシステム全体のパフォーマンス低下やデータアクセスのレスポンス低下の発生を抑制できる。
【００７４】
なお、消去及び書込みを実行するブロックがどのブロックであるかは、ブロック集合３７を構成する各ブロックの管理フラグをチェックすることで確認が可能である。上記実施形態では、ローテーション順序により管理フラグに書込みがないブロックの次のブロックが消去及び書込みの対象となる。
【００７５】
またＣＰＵ１１は、ホスト装置３からのデータ読出し要求に応じて、最後に書込みデータの書込みが実行されたブロックＢＲｋに書込まれていた書込みデータを読み出す読出し処理を実行するので、最新のデータをホスト装置３に出力することができる。
【００７６】
また本実施形態の記憶装置１では、ブロック集合３７の構成要素である各ブロックＢＲｉには、上記対象ブロックＢＲｊに対して上述した消去処理が開始されたことを示す消去中フラグが書込み可能である。
【００７７】
ＣＰＵ１１は、ホスト装置３からの新たな書込みデータの書込み要求に応じてブロックＢＲｌに消去処理が開始されたときに、ブロックＢＲｍに消去中フラグを書込む第３書込み処理（Ｓ４）を実行し、該第３書込み処理の後にブロックＢＲｌに消去処理（Ｓ５）を実行し、該消去処理の後にブロックＢＲｌに第１書込み処理（Ｓ６）を実行し、該第１書込み処理の後にブロックＢＲｍに第２書込み処理（Ｓ７）を実行する。
【００７８】
即ち本実施形態の記憶装置１は、消去フラグと書込みフラグとをチェックすることでホスト装置からの書込み要求に対する処理の経過を把握することができる。具体的には、消去中フラグのみが書込まれていれば書込み処理の途中であると判断でき、消去中フラグと書込みフラグとの両方が記載されていれば書込み処理が完了していると判断できる。
【００７９】
そして、書込み処理の実行中でないときに書込み処理の途中であると判断されたとすると、書込み処理が正しく完了していない可能性があり、そのようなブロックを検出することで、正常でない可能性のあるデータの存在を知ることができる。
【００８０】
また本実施形態の記憶装置１において、ＣＰＵ１１（本発明における検出手段の一例）は、電源を再投入されたときに、書込みフラグが書込まれておらず、かつ消去中フラグが書込まれているブロック３１（本発明における消去中示唆ブロックの一例）を検出する（Ｓ１１、Ｓ１２）。
【００８１】
そしてＣＰＵ１１は、上述した消去中示唆ブロックであるブロック３１が検出されたときには、該検出されたブロックをブロックＢＲｐ（ｐは１以上３以下の整数）としたときに、該ブロックＢＲｐの対象ブロックであるブロックＢＲｑに書込まれていた書込みデータ、書込みフラグ、及び消去中フラグを含むデータを消去する処理（Ｓ１３）を実行し、該処理の後に、ブロック集合のうちブロックＢＲｑを除くいずれかのブロックに書込まれている書込みデータをブロックＢＲｑに書込み（Ｓ１４）、その後にブロックＢＲｐに第２書込み処理（Ｓ１５）を実行する。本実施形態では、Ｓ１４において、消去中示唆ブロックに書込まれた書込みデータ、即ち最も新しい書込みデータをブロックＢＲｑに書込む。
【００８２】
即ち本実施形態の記憶装置１は、電源が再投入されたときに管理フラグが「消去中」を示すブロックの有無を判定する。そしてそのようなブロックが存在する場合には、上記「消去中」を示す管理フラグが書込まれたブロックに書込まれている書込みデータを、対象ブロックに置き換える。これにより、書込み処理が例えば電源喪失により中断したとしても、中断した書込み処理にて書込みを実行していた新しい書込みデータを得ることはできないものの、書込みデータ自体を損失してしまうことを抑制できる。
【００８３】
また、電源再投入をトリガに上述した処理を行うことから、正常でないデータが利用される可能性が低く、都合がよい。
なお、Ｓ１４においては、ブロックＢＲｑ（消去中示唆ブロック）以外のいずれかのブロックに書込まれている書込みデータをブロックＢＲｑに書込む構成としてもよい。但し、上述したようにブロックＢＲｐに書込まれている書込みデータを用いることで、より新しく書込まれた書込みデータをＢＲｑに復旧させることができる。
【００８４】
［その他の実施形態］
以上本発明の実施形態について説明したが、本発明は、上記実施形態に何ら限定されることはなく、本発明の技術的範囲に属する限り種々の形態をとり得ることはいうまでもない。
【００８５】
例えば、上記実施形態においては３つのブロック３１からブロック集合３７がなる構成を例示したが、ブロック集合は２つ以上のブロックによって構成されていればよく、３つに限定されることはない。
【００８６】
なお、２つのブロック３１によりブロック集合３７を構成する場合には、３つ以上のブロック３１によりブロック集合３７を構成する場合と比較して書込み処理が中断したことの検出の精度が低下する。その理由を以下に説明する。
【００８７】
図４のＳ４にてブロックＢＲｋの管理フラグを「消去中」に更新した後、Ｓ５にて対象ブロックＢＲｌの消去処理の実行中に電源喪失等により処理が中断した場合において、ブロックＢＲｌの書込みフラグ（Ｆ）のみが消去され消去中フラグ（Ｍ）が消去されずに残る可能性がある。その場合、ブロックＢＲｌに書込まれた管理フラグは「消去中」を示すこととなる。
【００８８】
ここで、ブロック集合３７を構成するブロック３１が２つであると、いずれものブロックに書込まれた管理フラグも「消去中」となるためどのブロックのデータが正常であるかの判断が困難になる。
【００８９】
一方、ブロック集合３７を構成するブロック３１が３つ以上あれば、少なくとも１つは管理フラグが「書込み済」となるブロック３１が存在することとなる。そしてローテーションに従ってブロックを順番にチェックしたときに管理フラグが「書込み済」から「消去中」に変化したブロックが、中断された書込み処理を行う以前の最新のデータが記憶されたブロックと判断できる。
【００９０】
また上記実施形態においては、ブロック集合３７の構成要素である各ブロックＢＲｉには、書込みフラグとして、対象ブロックＢＲｊ（ｊはｉをｎで除算したときの剰余に１を加算した整数）にて書込みデータの書込みが実行されたことを示すフラグを書込む構成を例示した。
【００９１】
しかしながら、対象ブロックＢＲｊは上述した規則に限られず、ｊが１以上ｎ以下のｉ以外の整数であって、ｉの値ごとに異なる整数であれよい。このように構成されていれば、ブロック集合の各ブロックは、ブロック集合における他のいずれかのブロックに対象ブロックとして対応付けられているということになる。その結果、各ブロックの書込み状態を把握することができる。
【００９２】
上述した対象ブロックＢＲｊは、例えば、ｊをｉ＋ａをｎで除算したときの剰余に１を加算した整数とすることができる。ａとは０以上ｎ−２以下の整数であり、上記実施形態においては、ａ＝０となる。また、ａ＝１とした場合のフラッシュメモリへの書込み制御の方法を、図１０を用いて説明する。
【００９３】
フラッシュメモリには、５つのブロック３１ａ（ＢＲ１〜ＢＲ５）を構成要素とするブロック集合３７ａが複数設定されている。各ブロックはデータ部３３ａとフラグ部３５ａとを有している。
【００９４】
図１０の（ｉ）において、ブロックＢＲ３，ブロックＢＲ４に書込まれた管理フラグは「−」を示している。次のデータ書込みを行う対象はブロックＢＲ５であり、ブロックＢＲ５を対象ブロックとするブロック（ブロックＢＲ５を監視する管理フラグが書込まれるブロック）はブロックＢＲ３であり、最新の書込みが行われたブロックはブロックＢＲ４である。
【００９５】
書込みを行うときには、まず（ｉｉ）のように、ブロックＢＲ３に書込まれた管理フラグが「消去中」に更新される。次に、（ｉｉｉ）のようにブロックＢＲ３に書込まれた管理フラグの対象ブロックであるブロックＢＲ５に記憶されたデータが消去される。次に、（ｉｖ）のように、新たな書込みデータが書込まれる。管理フラグは未だ書込まれていないため「−」となる。
【００９６】
そして、（ｖ）に示すように、ブロックＢＲ３に書込まれた管理フラグが「書込み済」に更新される。以上の手順によりブロック集合に対するデータの書込み処理が終了する。上記（ｖ）のとき、次のデータ書込みを行う対象はブロックＢＲ１であり、ブロックＢＲ１を対象ブロックとするブロックはブロックＢＲ４であり、最新の書込みが行われたブロックはブロックＢＲ５である。
【００９７】
このように、対象ブロックＢＲｊを、ｊがｉ＋ａをｎで除算したときの剰余に１を加算した整数とするブロックとすることで、ブロック集合内のブロックに順番に書込みを実現することができる。
【００９８】
また上記実施形態においては消去中フラグと書込みフラグとを用いてデータ書込みの完了を判断し、完了していない場合にはデータ復旧処理を行う構成を例示したが、消去中フラグを用いず、データ復旧処理を行わない構成であってもよい。その場合には、書込みデータをブロックＢＲｌに書込むタイミングとブロックＢＲｍに書込みフラグを書込むタイミングとはどちらが先であってもよい。
【００９９】
また上記実施形態においては、ＣＰＵ１１は電源を再投入したタイミングで管理フラグが「消去中」を示すブロックの有無を判定する構成を例示したが、そのタイミングは電源再投入時に限定されず、様々なタイミングにおいて上記判定を行うことが可能である。なお、第３書込み処理（Ｓ４）を開始してから第２書込み処理（Ｓ７）を終了するまでの期間は、書込み処理が中断されていなくても「消去中」という管理フラグが発生するため、その期間は除くタイミングとすることが考えられる。
【０１００】
また上記実施形態においては、ブロック集合３７を構成するブロックの数ｎは、ブロック集合３７ごとに異なっていてもよい。例えば、ＩＤ１に紐付けられたブロック集合３７はｎ＝３、ＩＤ２に紐付けられたブロック集合はｎ＝５とする構成であってもよい。
【０１０１】
また、ブロック集合ごとにＢＲｉ，ＢＲｊ，ＢＲｋなどの関係性が共通である必要はなく、ブロック集合ごとに異なる関係性を有していてもよい。例えば、ＩＤ１及びＩＤ２に紐付けられたブロック集合３７はいずれもｎ＝５であり、ＩＤ１に紐付けられたブロック集合３７は図１０のように変数ａ＝１として書込み制御され、ＩＤ２に紐付けられたブロック集合３７は変数ａ＝０として書込み制御されるように構成されていてもよい。
【０１０２】
またホスト装置３は記憶装置１の外部に存在する装置である必要はなく、記憶装置１に含まれている装置であってもよい。また記憶装置１自身がホスト装置として機能する構成であってもよい。つまり、ＣＰＵ１１がフラッシュメモリ２１の制御とは無関係の処理を実行して書込みデータを取得または生成し、その書込みデータをフラッシュメモリ２１へ書込む構成や、ＣＰＵ１１が書込まれた書込みデータを読み出して、ＣＰＵ１１が別の処理に利用する構成であってもよい。
【０１０３】
ところで、上述した記憶装置１が備える各機能は、ＣＰＵ１１、ＲＡＭ１３、ＲＯＭ１５、フラッシュコントローラ１７、Ｉ／Ｏ１９等を有するフラッシュメモリ制御装置によって実現することができる。
【０１０４】
また、上述した記憶装置１が備える各機能は、プログラムによりコンピュータに実現させることができる。
上記プログラムは、コンピュータによる処理に適した命令の順番付けられた列からなるものであって、コンピュータに組み込まれるＲＯＭやＲＡＭなどに記憶され、これらからコンピュータにロードされて用いられてもよいし、各種記録媒体や通信回線を介してコンピュータにロードされ用いられるものであってもよい。
【０１０５】
コンピュータにプログラムをロードするための上述した記録媒体としては、ＣＤ−ＲＯＭやＤＶＤ−ＲＯＭ等の光ディスク、磁気ディスク、半導体製メモリ等が挙げられる。
【符号の説明】
【０１０６】
１…記憶装置、３…ホスト装置、１１…ＣＰＵ、１３…ＲＡＭ、１５…ＲＯＭ、１５ａ…プログラム、１７…コントローラ、１７…フラッシュコントローラ、１９…Ｉ／Ｏ、２１…フラッシュメモリ、３１…ブロック、３３…データ部、３５…フラグ部、３７…ブロック集合
【図１】
2016004558.tif 000003
【図２】
2016004558.tif 000004
【図３】
2016004558.tif 000005
【図４】
2016004558.tif 000006
【図５】
2016004558.tif 000007
【図６】
2016004558.tif 000008
【図７】
2016004558.tif 000009
【図８】
2016004558.tif 000010
【図９】
2016004558.tif 000011
【図１０】
2016004558.tif 000012