(57)【要約】【課題】フラッシュメモリのデータ書き込みの高速化を図る。【解決手段】データ書き込みにあっては、ブロック交替を行わずに、書き込むべきデータをページ単位で追記していく。これとともに、ページデータの論理的な位置が分かるように、論理ページアドレスを定義して、ページデータごとに格納しておく。そして、元のブロックの空きページが無くなった場合には、この元のブロック（オリジナルブロック）と同じＬＢＡを付した追加ブロックを作成し、この追加ブロックに対してページ単位による追記を行っていくようにする。追加ブロックにはオリジナルブロックと同じＬＢＡを持たせる。このような構成により、例えばページデータを書き込むごとにブロック交替処理を行う必要が無くなる。【選択図】図９
2007280108.tif 000002
【特許請求の範囲】
【請求項１】
記憶媒体の記憶領域を所定の固定長により区切るようにして形成されるデータ消去の最小単位となる第１単位領域の物理アドレスである第１物理アドレスと、この第１単位領域に書き込まれるデータ内容に対応付けられる論理アドレスである第１論理アドレスとの対応を示すアドレス対応情報を管理するアドレス対応情報管理手段と、
上記第１単位領域を所定の固定長により区切るようにして形成されるデータ書き込みの最小単位となる第２単位領域の物理アドレスである第２物理アドレスの順に従ってデータを書き込んでいく書き込み処理と、第２単位領域に書き込まれたデータごとについて、第２単位領域に書き込まれるデータ内容に対応付けられる論理アドレスである第２論理アドレスを対応付けておくようにするアドレス設定処理とを実行するデータ書き込み実行手段と、
上記データ書き込み実行手段によりデータ書き込みを実行すべきときにおいて、データが書き込まれるべき本来の第１単位領域についてのデータの書き込みが禁止となる所定の条件を満たしている場合には、未使用の第１単位領域を追加用第１単位領域として確保して、この追加用第１単位領域に対して上記データ書き込み実行手段によるデータ書き込みを実行させる、データ書き込み制御手段と、
上記追加用第１単位領域について、対応する本来の第１単位領域と同じ第１論理アドレスが対応付けられて管理されるようにする追加用第１単位領域管理手段と、
を備えることを特徴とする記憶媒体制御装置。
【請求項２】
上記データ書き込み実行手段は、
上記アドレス設定処理として、論理アドレスを第２単位領域における所定位置に書き込むための処理を実行するようにされる、
ことを特徴とする請求項１に記載の記憶媒体制御装置。
【請求項３】
上記所定の条件を満たしているか否かを判別する条件判別手段をさらに備え、
上記条件判別手段は、
上記本来の第１単位領域において未使用の第２単位領域が存在していない場合に、上記所定の条件を満たしているとの判別結果を得るようにされ、
上記データ書き込み制御手段は、
上記判別手段により上記所定の条件を満たしているとの判別結果が得られた場合に、未使用の第１単位領域を追加用第１単位領域として確保して、この追加用第１単位領域に対して上記データ書き込み実行手段によるデータ書き込みを実行させる、
ことを特徴とする請求項１に記載の記憶媒体制御装置。
【請求項４】
上記データ書き込み制御手段は、
上位処理層からの要求に応じて上記データ書き込み実行手段が上記書き込み処理の実行を開始すべきとなった場合を、上記所定の条件を満たしている場合としている、
ことを特徴とする請求項１に記載の記憶媒体制御装置。
【請求項５】
少なくとも、同じ第１論理アドレスが対応付けられた上記本来の第１単位領域と上記追加用第１単位領域との間での識別を可能とするための識別情報を生成する生成手段と、
生成された上記識別情報を第１単位領域ごとに対応付けるための対応化処理を実行する識別情報設定手段と、
をさらに備える、ことを特徴とする請求項１に記載の記憶媒体制御装置。
【請求項６】
上記識別情報設定手段は、
上記対応化処理として、生成された上記識別情報を上記第１単位領域における所定位置に対して書き込むための処理を実行するようにされる、
ことを特徴とする請求項５に記載の記憶媒体制御装置。
【請求項７】
上記データ書き込み実行手段による上記書き込み処理に際して、上記追加用第１単位領域における未使用の第２単位領域が存在しなくなる状態となった場合に少なくとも対応して、
未使用の第１単位領域を再構築用第１単位領域として確保して、少なくとも、上記追加用第１単位領域と、対応する本来の第１単位領域とから読み出した有効な第２単位領域のデータを、上記再構築用第１単位領域の第２単位領域に書き込んでいくようにされる再構築用データ書込実行手段と、
上記再構築用第１単位領域処理手段によりデータが書き込まれた上記再構築用第１単位領域が新規な本来の第１単位領域として管理されるようにするとともに、上記追加用第１単位領域と、元の本来の第１単位領域とについて、未使用として管理されるようにする再構築用領域設定手段と、
をさらに備えることを特徴とする請求項１に記載の記憶媒体制御装置。
【請求項８】
上記再構築用データ書込実行手段は、
先ず、追加用第１単位領域における第２単位領域の物理アドレスの降順に従って、未だ上記再構築用第１単位領域に書き込まれていない第２論理アドレスが対応付けられた第２単位領域のデータを探索し、この探索したデータを上記再構築用第１単位領域の第２単位領域に対して書き込んでいくようにされ、
次いで、元の第１単位領域における第２単位領域の物理アドレスの降順に従って、未だ上記再構築用第１単位領域に書き込まれていない第２論理アドレスが対応付けられた第２単位領域のデータを探索し、この探索したデータを上記再構築用第１単位領域における第２単位領域に対して書き込んでいくようにされる、
ことを特徴とする請求項７に記載の記憶媒体制御装置。
【請求項９】
上記データ書き込み実行手段による上記書き込み処理に際して、上記追加用第１単位領域における未使用の第２単位領域が存在しなくなる状態となった場合において、この追加用第１単位領域における第２単位領域に書き込まれているデータに対応付けられた第２論理アドレスが、第２物理アドレスの昇順方向に応じて、連続した昇順となっている場合には、
上記再構築用データ書込実行手段によるデータ書き込みを実行しない代わりに、
上記再構築用領域設定手段は、上記追加用第１単位領域について新規な本来の第１単位領域として管理されるようにするとともに、元の本来の第１単位領域については未使用として管理されるようにする、
ことを特徴とする請求項７に記載の記憶媒体制御装置。
【請求項１０】
上記データ書き込み制御手段が、未使用の第１単位領域を追加用第１単位領域として確保しようとするのにあたり、追加用第１単位領域が使用可能最大数にまで使用されている状況である場合に対応しては、
上記再構築用データ書込実行手段は、
使用中の追加用第１単位領域のうちで最初に使用された追加用第１単位領域から有効な第２単位領域のデータを読み出すようにして処理を実行するようにされている、
ことを特徴とする請求項７に記載の記憶媒体制御装置。
【請求項１１】
第１単位領域における第２単位領域の物理アドレスの降順に従って、未だ探索済みとなっていない第２論理アドレスが対応付けられた第２単位領域のデータを探索し、この探索したデータを有効な単位読み出しデータとして保持していく探索処理を実行する読出データ探索手段と、
上記読出データ探索手段により保持された単位読み出しデータを、対応付けされている第２論理アドレス順に配列することで正常な読み出しデータを生成する第１の読出データ生成手段と、
１つの第１論理アドレスに対応付けられている第１単位領域が１つのみ存在するか、あるいは本来の第１単位領域と追加用第１単位領域が存在するかについて判別するアドレス対応状況判別手段と、
上記アドレス対応状況判別手段により本来の第１単位領域と追加用第１単位領域が存在することが判別された場合においては、
上記読出データ探索手段は、先ず、上記追加用第１単位領域を対象とする第１の探索処理を実行し、この後に本来の第１単位領域を対象とする第２の探索処理を実行するようにされ、
上記第１の読出データ生成手段は、上記第１の探索処理と上記第２の探索処理とにより保持されている単位読み出しデータを、対応付けされている第２論理アドレス順に配列することで第１単位領域分の読出データを生成するようにされる、
ことを特徴とする請求項１に記載の記憶媒体制御装置。
【請求項１２】
上記アドレス対応状況判別手段により本来の第１単位領域と追加用第１単位領域が存在することが判別された場合において、さらに、この追加用第１単位領域における第２単位領域に書き込まれているデータに対応付けられた第２論理アドレスが、第２物理アドレスの昇順方向に応じて、連続した昇順となっているか否かについて判別するアドレス順判別手段と、
上記アドレス順判定手段により肯定の判別結果が得られた場合においては、上記読出データ探索手段と上記第１の読出データ生成手段に代えて、追加用第１単位領域から第２物理アドレスの昇順に従って読み出したデータにより第１単位領域分の読出データを生成する処理を実行するようにされた、第２の読出データ生成手段をさらに備える、
ことを特徴とする請求項１１に記載の記憶媒体制御装置。
【請求項１３】
記憶媒体の記憶領域を所定の固定長により区切るようにして形成されるデータ消去の最小単位となる第１単位領域の物理アドレスである第１物理アドレスと、この第１単位領域に書き込まれるデータ内容に対応付けられる論理アドレスである第１論理アドレスとの対応を示すアドレス対応情報を管理するアドレス対応情報管理手順と、
上記第１単位領域を所定の固定長により区切るようにして形成されるデータ書き込みの最小単位となる第２単位領域の物理アドレスである第２物理アドレスの順に従ってデータを書き込んでいく書き込み処理と、第２単位領域に書き込まれたデータごとについて、第２単位領域に書き込まれるデータ内容に対応付けられる論理アドレスである第２論理アドレスを対応付けておくようにするアドレス設定処理とを実行するデータ書き込み実行手順と、
上記データ書き込み実行手順によりデータ書き込みを実行すべきときにおいて、データが書き込まれるべき本来の第１単位領域についてのデータの書き込みが禁止となる所定の条件を満たしている場合には、未使用の第１単位領域を追加用第１単位領域として確保して、この追加用第１単位領域に対して上記データ書き込み実行手順としてのデータ書き込みを実行させる、データ書き込み制御手順と、
上記追加用第１単位領域について、対応する本来の第１単位領域と同じ第１論理アドレスが対応付けられて管理されるようにする追加用第１単位領域管理手順と、
を実行することを特徴とする記憶媒体制御方法。
【請求項１４】
記憶媒体の記憶領域を所定の固定長により区切るようにして形成されるデータ消去の最小単位となる第１単位領域の物理アドレスである第１物理アドレスと、この第１単位領域に書き込まれるデータ内容に対応付けられる論理アドレスである第１論理アドレスとの対応を示すアドレス対応情報を管理するアドレス対応情報管理手順と、
上記第１単位領域を所定の固定長により区切るようにして形成されるデータ書き込みの最小単位となる第２単位領域の物理アドレスである第２物理アドレスの順に従ってデータを書き込んでいく書き込み処理と、第２単位領域に書き込まれたデータごとについて、第２単位領域に書き込まれるデータ内容に対応付けられる論理アドレスである第２論理アドレスを対応付けておくようにするアドレス設定処理とを実行するデータ書き込み実行手順と、
上記データ書き込み実行手順によりデータ書き込みを実行すべきときにおいて、データが書き込まれるべき本来の第１単位領域についてのデータの書き込みが禁止となる所定の条件を満たしている場合には、未使用の第１単位領域を追加用第１単位領域として確保して、この追加用第１単位領域に対して上記データ書き込み実行手順としてのデータ書き込みを実行させる、データ書き込み制御手順と、
上記追加用第１単位領域について、対応する本来の第１単位領域と同じ第１論理アドレスが対応付けられて管理されるようにする追加用第１単位領域管理手順と、
を記憶媒体制御装置に実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えばフラッシュメモリに代表される不揮発性メモリ素子などとしての記憶媒体を対象として、データ書き込み／読み出しなどについての制御を行う記憶媒体制御装置、及びその方法と、このような装置が実行すべきプログラムに関するものである。
【背景技術】
【０００２】
近年では、不揮発性の半導体記憶素子が記憶媒体として広い用途で利用されるようになってきている状況にある。このような半導体記憶素子の記憶媒体としては、フラッシュメモリが代表的なものとなる。
周知のようにして、フラッシュメモリは、その特性上、データの上書きは不可であり、消去されている状態から書き込みを行うことが要求される。また、データの消去は、フラッシュメモリとしての記憶領域を所定サイズに分割したブロックといわれる物理的な記憶領域単位を最小単位として行われ、データの書き込みは、ブロックをさらに所定サイズに分割したページといわれる記憶領域単位を最小単位として行われる。さらに、１ブロック内におけるページに対する書き込みは、例えば先頭ページからのアドレス（物理ページアドレス）順に従った書き込みのみに制限され、例えば、アドレスを飛び越したランダムアクセス的な書き込みはできないこととなっている。このために、データの書き込み（更新）は次のようにして行われる。
【０００３】
実際にデータの更新を行うときには、例えば、更新対象のデータが書き込み済みとなっているブロックからデータを例えばＲＡＭ上などに読み出して、この読み出したデータと更新のための追加データなどを利用して更新されたデータを生成する。そして、この段階で消去済みとなっている他の特定ブロックに対して、この更新されたデータをページ単位でアドレス順に従って順次書き込んでいくようにされる。そのうえで、上記更新対象のデータが書き込まれていたブロックについては、データを消去するようにされる。
つまり、データを更新するときには、更新前のデータが書き込まれていたブロックに再度書き込むことはせずに、他の消去状態にあるブロックを選択して書き込みを行うようにされる（ブロック交替処理）。
【０００４】
上記のようにしてブロック交替処理が行われることで、ページに対するランダムアクセスが不可とされる制限の問題を回避して、例えばデータを書き込み済みのブロックにおける途中の一部ページのデータを更新することが可能となる。このために、上記のようなブロック交替処理は、フラッシュメモリを記憶媒体として使用するのにあたっての基本的な仕様となっている。
【０００５】
しかしながら、上記のブロック交替処理は、別の見方をすれば、たとえ更新が必要なデータが１ページ分のみであるとしても、ブロック単位のサイズのデータの書き込み処理と、同じくブロック単位のデータ消去の処理とを必ず実行している、ということになる。このことが、フラッシュメモリにおけるデータ書き込み速度を低下させるおおきな要因として以前から問題になっていた。
そこで、フラッシュメモリを対象としたときのデータ書き込み速度の向上を図るための構成が以前より提案されている。例えば特許文献１には、ページデータの書き込み要求に応じては、ブロックに対して物理ページアドレス順に従って順次書き込みを実行していくようにしたうえで、論理的なデータの連続性は、ページデータごとに論理ページアドレスを付与することで保証できるようにした構成が記載されている。
【０００６】
【特許文献１】特開２００４−２５２７４６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
本願発明としても、例えば上記した要因によるデータ書き込み速度の低下の問題を解決して、データ書き込みの高速化が図られるようにすることを目的とするものであり、そのうえで、さらに、より顕著な効果を得るとともに、この効果を得るための構成がより効率的なものとなるようにすることを目指す。
【課題を解決するための手段】
【０００８】
そこで本発明は上記した課題を考慮して、記憶媒体制御装置として次のように構成する。
つまり、記憶媒体の記憶領域を所定の固定長により区切るようにして形成されるデータ消去の最小単位となる第１単位領域の物理アドレスである第１物理アドレスと、この第１単位領域に書き込まれるデータ内容に対応付けられる論理アドレスである第１論理アドレスとの対応を示すアドレス対応情報を管理するアドレス対応情報管理手段と、第１単位領域を所定の固定長により区切るようにして形成されるデータ書き込みの最小単位となる第２単位領域の物理アドレスである第２物理アドレスの順に従ってデータを書き込んでいく書き込み処理と、第２単位領域に書き込まれたデータごとについて、第２単位領域に書き込まれるデータ内容に対応付けられる論理アドレスである第２論理アドレスを対応付けておくようにするアドレス設定処理とを実行するデータ書き込み実行手段と、このデータ書き込み実行手段によりデータ書き込みを実行すべきときにおいて、データが書き込まれるべき本来の第１単位領域についてのデータの書き込みが禁止となる所定の条件を満たしている場合には、未使用の第１単位領域を追加用第１単位領域として確保して、この追加用第１単位領域に対してデータ書き込み実行手段によるデータ書き込みを実行させるデータ書き込み制御手段と、追加用第１単位領域について、対応する本来の第１単位領域と同じ第１論理アドレスが対応付けられて管理されるようにする追加用第１単位領域管理手段とを備えることとした。
【０００９】
上記構成では、本発明の記憶媒体制御装置が対応する記憶媒体は、記憶領域が第１単位領域に区分され、第１単位領域はさらに第２単位領域により区分された物理構造を有するものとされている。第１単位領域が消去の最小単位であるのに対して、第２単位領域は書き込みの最小単位となる。
そのうえで、第１単位領域については物理アドレスを対応させたうえで、第１単位領域に書き込まれるべきデータに対応付けられる論理アドレスを規定して、この論理アドレスと物理アドレスとの対応を示す論理−物理アドレス対応情報を構築して管理しておくようにされる。
また、データの書き込みについては、第２単位領域ごとに実行可能とされており、その手順としては、第２単位領域に対応する第２物理アドレスの順に従って書き込みを行っていくようにされる。このことは、更新のためのデータを書き込むような状況では、更新前のデータが第２物理アドレス順的に前の第２単位領域において残っているとしても、更新のためのデータが未使用の第２単位領域に書き込まれる結果となることを意味している。
そして、本願発明にあっては、データが書き込まれるべき本来の第１単位領域についてのデータの書き込みが禁止である場合には、未使用の第１単位領域を追加用第１単位領域として確保して、この追加用第１単位領域に対して、本来の第１単位領域に書き込むべきであったデータを書き込んでいくようにされる。そして、このようにして作成された追加用第１単位領域については、対応する本来の第１単位領域と同じ第１論理アドレスが対応付けられるようにされる。
このような構成によれば、先ず、本来の第１単位領域において未使用の第２単位領域が存在する限りは、この領域に対してデータを追加するようにして書き込んでいくことができる。換言すれば、例えば第２単位領域１つ分のデータを書き込むために、第１単位領域そのものを対象とするデータ消去とデータ書き込みを行う必要がない。そのうえで、本来の第１単位領域に対してデータを書き込むことができない（禁止）状況である場合には、追加用第１単位領域に対してデータ記録を行っていくことができる。このことは、本来であれば１つの第１単位領域を対象とするデータ書き込みに対応して、「本来の第１単位領域」と、「必要数の追加用第１単位領域」の領域とを併せて得られる領域が使用可能になる、ということを意味している。
【発明の効果】
【００１０】
上記のようにして、本願発明では、第２単位領域ごとにデータを順次書き込んでいくことが可能とされて、その都度、第１単位領域のデータ消去とデータ書き込みを実行する必要がなくなるようにされたうえで、追加用第１単位領域が設けられた分、第２単位領域ごとにデータを順次書き込み可能な領域が拡大されることになるものである。これにより、第２単位領域分のデータの書き込みに応じては、第１単位領域そのものを対象とするデータ消去とデータ書き込みが発生することが無くなることとなって、その分、記憶媒体へのデータ書き込み速度は、大幅に向上することになる。
【発明を実施するための最良の形態】
【００１１】
本願発明を実施するための最良の形態（以下、実施の形態という）としては、本発明に基づいた記憶媒体制御装置の構成を携帯型コンテンツプレーヤに適用した例を挙げることとする。
【００１２】
図１は、本実施の形態の携帯型コンテンツプレーヤ１の構成例を示すブロック図である。
この図において、制御部１１は、携帯型コンテンツプレーヤ１における各種制御を実行する部位とされる。この制御部１１の実際的なハードウェア構成としては、例えばＣＰＵ(Central Processing Unit)から成るものとされる。つまり、制御部１１としてのＣＰＵは、後述する記憶部１４（あるいはＲＯＭ１２であってもよい）に記憶されたプログラムを、例えばＲＡＭ１３に展開して実行することで、所要の各種の制御処理を実現することになる。
【００１３】
ＲＯＭ１２には、例えば起動時に制御部１１が実行する起動用プログラムなどのほか、工場出荷時に書き込みが行われた各種の設定データなどが記憶される。
ＲＡＭ１３は、上記のようにして制御部１１が実行すべきプログラムのデータが展開されるとともに、制御部１１がプログラムに従って実行する各種演算のための作業領域として使用される。
【００１４】
記憶部１４は、主として、携帯型コンテンツプレーヤ１により再生出力するコンテンツのデータ（コンテンツデータ）を例えばファイル単位で管理するようにして記憶するための部位である。ここでいうコンテンツデータとは、例えば楽曲などとしてのオーディオデータや、映像などとしてのビデオデータなどとされる。現状において、このような携帯型コンテンツプレーヤ１に記憶されるコンテンツデータとしてのオーディオファイルやビデオデータファイルは、所定方式により圧縮符号化されることが一般的であるが、本実施の形態としては、コンテンツ記憶部１３に記憶されるコンテンツデータの種類、ファイル形式については特に限定されるものではない。
また、本実施の形態では、この記憶部１４に対して制御部１１が実行するプログラムのデータと、例えば記憶部１４に記憶されるファイル管理などのために制御部１１が利用する各種のシステムデータなども記憶させることとしている。
【００１５】
そして、本実施の形態においては、この記憶部１４が備える記憶媒体としてフラッシュメモリ(例えばNAND型)を採用することとしている。フラッシュメモリは、周知のようにして、半導体による不揮発性の記憶素子の１つである。また、フラッシュメモリの容量としては、このような携帯型コンテンツプレーヤ１の用途であれば、現状では、数ＧＢ程度までのものが広く採用されている。
【００１６】
また、この場合の記憶部１４としてのフラッシュメモリは、装脱不可の状態で携帯型コンテンツプレーヤ１の本体に内蔵される形態を採ることとしている。しかしながら、例えば記憶部１４としてのフラッシュメモリとしての記憶媒体装置をリムーバブル形式としたうえで、携帯型コンテンツプレーヤ１の本体側に対応のドライブを備えるような構成であってもよい。このような構成の場合には、プログラムなどのデータは、携帯型コンテンツプレーヤ１内のＲＯＭや不揮発性メモリに記憶させることになる。
【００１７】
オーディオ再生処理部１５は、制御部１１の制御に応じて、記憶部１４から読み出されたオーディオファイル形式のコンテンツデータを入力し、所要の再生信号処理を実行するようにされる。例えばオーディオ再生処理部１５は、オーディオデータの圧縮符号化に対する復調処理などをはじめとする各種所要の信号処理を施したうえで、最終的に、ヘッドフォン駆動のためのオーディオ信号として、ヘッドフォン端子１６に対して出力するようにされる。
【００１８】
また、表示部１８には、携帯型コンテンツプレーヤ１の動作に応じたユーザインターフェイスのための表示が行われる。また。例えばビデオデータファイルとしてのコンテンツデータを再生して得られる画像を表示出力させることも可能とされる。このような表示のために、制御部１１は、表示処理部１７により所要の表示のための信号処理を実行させる。例えばユーザインターフェイスのための画像を表示させるのであれば、表示させるべきユーザインターフェイス画像に対応した表示用画像データを生成する。また、ビデオデータファイルとしてのコンテンツの画像を表示出力させるのであれば、制御部１１は、記憶部１４から読み出したビデオデータファイルを表示処理部１７に入力させ、ここで、圧縮符号化に対する復調処理のほか所要のビデオ信号処理を実行させて、表示用画像データを生成する。そして、表示部１８において、このようにして生成された表示用画像データを利用した表示駆動のための動作が実行されることで、表示部１８の表示画面にて画像が表示される。
なお、表示部１８として実際に採用されるべき表示デバイスについては特に限定されるべきものではないが、現状であれば、液晶ディスプレイや有機ＥＬディスプレイなどを採用することができる。
【００１９】
操作部１９は、携帯型コンテンツプレーヤ１の本体に対して実際に設けられる操作子と、これらの操作子に対して行われた操作に応じて操作指示信号を生成して制御部１１に出力する部位とを一括して示したものとなる。制御部１１は、操作部１９から出力される操作指示信号に応じて所要の処理を実行する。
【００２０】
また、本実施の形態の携帯型コンテンツプレーヤ１にあって、記憶部１４に記憶させるべきコンテンツデータを取得するためには、外部データインターフェイス２０を利用する。
つまり、携帯型コンテンツプレーヤ１と、そのホストとなるパーソナルコンピュータなどの装置とを、外部データインターフェイス２０を経由して接続し、コンテンツデータをホストから携帯型コンテンツプレーヤ１に転送させるようにする。そして、携帯型コンテンツプレーヤ１では、例えば制御部１１の制御に従って、転送されてくるコンテンツデータを受信取得し、この取得したコンテンツデータを、記憶部１４に書き込むようにして記憶させる。
【００２１】
この場合の外部データインターフェイス２０は、所定のデータ通信規格に応じたケーブル接続を介して、あるいは無線経由により外部デバイスと通信を行うためのハードウェア及びソフトウェアを備えて構成される部位とされる。この外部データインターフェイス２０が対応する通信規格としては、特に限定されるべきではないが、現状であれば、例えばＩＥＥＥ１３９４、ＵＳＢ、Ethernet（登録商標）、Bluetooth（登録商標）、IEEE802.11a/b/g/n等を採用することが考えられる。
【００２２】
続いて、図２を参照して、記憶部１４における記憶媒体に採用されるフラッシュメモリの物理フォーマットについて説明する。
フラッシュメモリの記憶領域全体は、例えば図２（ａ）に示すようにして、所定の固定長によるブロック（第１単位領域）０〜Ｎにより分割される。周知のようにして、フラッシュメモリは、データの上書きはできないことになっており、データの書き込みは、消去済みの領域に対して行われる。そして、このブロックは、データを消去するときの最小単位となる。
また、この図２（ａ）にはブロックごとに対応してブロックアドレス（物理ブロックアドレス）が示されている。
【００２３】
そして、図２（ａ）に示したブロックの各々は、図２（ｂ）に示すようにして、所定数（ｍ個）のページ０〜ｍにより分割される。
１ページは固定長であり、図２（ｃ）に示すように、所定サイズのデータ部と冗長部より成る。データ部はデータを格納する領域であり、冗長部は、ＥＣＣ(Error Correcting Code)及び各種の所要の管理情報項目などが格納される領域となる。
データ書き込みについては、ページが最小単位となる。つまり、フラッシュメモリは、データの消去はブロック単位で行われ、データの書き込みはページ単位で行われるべきものとなっており、データ消去単位とデータ書込単位のデータサイズが相互に異なるものとなっている。
【００２４】
上記図２（ｃ）に示したページ構造についての、より具体的な例を、図３に示す。
先ず図３（ａ）に示されるページ構造としては、２０４８バイトのデータ部と、これに続く６４バイトの冗長部から成るものとされている。そして、６４バイトの冗長部については、さらに、２２バイトの予備領域と、これに続く４０バイトのＥＣＣにより形成されるものとなっている。このＥＣＣにより、上記２０４８バイトのデータ部と冗長部における２２バイトの予備領域のデータについてのエラー訂正処理を行う。
また、本実施の形態においては、予備領域における所定のバイト位置に対して、ＬＰＡ（１バイト）、ＬＢＡ（２バイト）、ＳＱＮ（１バイト）、及びＣＮＴＦ（１バイト）を配置して格納することとしている。
【００２５】
ＬＰＡ(Logical Page Address)は、現ページに対応付けられた論理ページアドレスを示すもので、ブロック内に形成されるページごとにおいて有効な値が格納される。なお、論理ページアドレスがどのような意義のものであるのかについては後述する。
ＬＢＡ(Logical Block Address)は、現ページを含むブロックに対応付けられた論理ブロックアドレスを示すもので、有効な値を格納するのは、ブロック内における先頭ページのみでよい。この論理ブロックアドレスの意義についても後述する。
また、本実施の形態では、後述するようにしてオリジナルブロックに対応して追加ブロックが作成され、さらにマージブロックが作成される可能性があり、これらのブロックに対しては同一のＬＢＡが付される。さらにこれらのブロックに対しては、作成順に応じた連番であるＳＱＮ(Sequence Number)が付される。
ページにおけるＳＱＮ(Sequence Number)の領域には、現ページを含むブロックに対応付けられたＳＱＮの値を格納する。このＳＱＮとしての有効な値が格納されるべきページとしては、先頭ページのみでよい。
ＣＮＴＦ(Continue Flag)は、現ページを含むブロックのデータ書き込み結果として、そのデータ内容が、物理ページアドレス順に従って配列されている状態にあるか否かを示すフラグとされる。データ内容が物理ページアドレス順に従って配列された状態となる書き込み結果は、例えば一回のデータ書き込み要求に応じた書込データのサイズが一定以上とされていたことで、ブロックの先頭ページから最終ページまで連続して書き込みが行われたような場合に得られる。
【００２６】
また、ページ構造としては、近年、図３（ｂ）に示すフォーマットが採用されるようになってきている。
この図３（ｂ）に示されるページ構造としては、ページ全体としてのサイズは２１１２バイトで図３（ａ）と同じであるが、計２０４８バイトのデータ部を第１〜第４データ部に等分割して各５１２バイトとするとともに、計６４バイトの冗長部についても第１〜第４冗長部に等分割して各１６バイトとしたうえで、第１〜第４データ部の各々に続けて、第１〜第４冗長部を連結させるようにして形成したものである。
この場合、第１〜第４冗長部の各々は、図示するようにして、６バイトの予備領域と１０バイトのＥＣＣの領域とにより形成されることになる。そして、この１０バイトのＥＣＣにより、お案じ冗長部における先頭から直前までのデータについてのエラー訂正を行う。つまり、例えば第１冗長部のＥＣＣによっては、第１データ部及び第１冗長部の予備領域についてのエラー訂正を行う。
また、本実施の形態としては、この図３（ｂ）のフォーマットにあっても、冗長部の予備領域に対しては、ＬＰＡ、ＬＢＡ、ＳＱＮ、及びＣＮＴＦをそれぞれ所定のバイト位置に配置して格納することとしている。
なお、先の図３（ａ）での説明から理解されるように、ＬＰＡ、ＬＢＡ、ＳＱＮ、ＣＮＴＦについては、しかるべきページにおいて格納されていればよい。従って、図３（ｂ）のようにして、ページ内において４つの予備領域が形成されることとなる場合には、これら４つの予備領域のうちの特定の１つの予備領域に対してのみＬＰＡ、ＬＢＡ、ＳＱＮ、ＣＮＴＦの有効な値を格納することとしても特に支障はない。ただし、例えば、複数の予備領域に対してＬＰＡ、ＬＢＡ、ＳＱＮ、ＣＮＴＦの有効な値を格納してもよく、この場合には、ＬＰＡ、ＬＢＡ、ＳＱＮ、ＣＮＴＦがページ内にて多重書きされることになるので、信頼性向上が期待できる。
また、冗長部の予備領域に対して書き込むべきデータが異なる場合には、その分書き込み速度の低下を招く可能性があるが、上記のようにして、複数の予備領域に対してＬＰＡ、ＬＢＡ、ＳＱＮ、ＣＮＴＦの有効な値を格納するということは、これらの予備領域に対して書き込むデータ内容については同じとすることが可能であり、従って、上記のような書き込み速度の低下の問題を改善、あるいは解消することができる。
【００２７】
フラッシュメモリの物理フォーマットとして以前から規定される基本的なページ構造は図３（ａ）に示したものとなるのであるが、現状においては、図３（ｂ）のフォーマットが採用されることが多くなってきている。これは下記のような理由による。
フラッシュメモリは例えばビット単価の低下などを背景として記憶容量が増加している傾向にある。例えば製品として市場に現れた当初は数十メガバイト（ＭＢ）程度とされていたものが、現状では、例えばギガバイト（ＧＢ）クラスにまで記憶容量が増加している。このようにして記憶容量が増加するのにかかわらず、例えば当初の記憶容量に応じて設定されたブロック容量、あるいはページ容量を維持したとすれば、フラッシュメモリの容量全体におけるブロック数、ページ数も著しく増加することになる。このような膨大な数のブロック、ページを管理しようとした場合、このための管理情報の容量も増加することになるが、このような管理情報も同じフラッシュメモリに記憶保持させる場合がある。従って、管理情報のサイズの肥大化によりフラッシュメモリにおけるユーザデータの記憶可能容量を圧迫するという不都合を生じることになる。また、管理情報を処理する際の処理速度の低下も問題になる場合がある。
そこで、フラッシュメモリの記憶容量を増加させるのに応じては、ブロック、ページの容量も相応に増加させるフォーマットとすることが行われるようになり、このような手法が一般化している。このようなフォーマットとすれば、ブロック、ページの総数を適正な範囲で抑えることが可能となり、上記したような問題を回避できる。
具体例として、図３（ａ）（ｂ）には、ページサイズについて２１１２バイト（＝２０４８＋６４）とした場合が示されているが、この場合における実際のフラッシュメモリの全体容量は２ＧＢ、あるいは４ＧＢ程度とされている。また、フラッシュメモリの全体容量が２ＧＢの場合のブロックサイズは１２８ＫＢとされ、１ブロックは６４ページにより形成されることになる。また、フラッシュメモリの全体容量が４ＧＢの場合のブロックサイズは２５６ＫＢとされ、１ブロックは１２８ページにより形成されることになる。
【００２８】
先に述べたように、ページについての本来の基本構造は図３（ａ）に示したものとなる。
例えば図３（ａ）のページ構造のもとで、上記のようにしてページサイズを増加させていったとすると、必然的に１ページ内におけるデータ部のサイズも増加していくことになるが、このことをＥＣＣによるエラー訂正処理の観点から見ると、データ部のサイズの増加は、即ち、エラー訂正対象となる語長の増加となる。
エラー訂正に関する一般的なこととして、エラー訂正の対象となる単位データサイズができるだけ小さいほど、エラー訂正の信頼性は高くなる。このことからすると、図３（ａ）のページ構造のフォーマットによりページサイズを増加させていくことは、エラー訂正の信頼性の低下を招く可能性がある、ということになる。
そこで、例えば図３（ｂ）に示すようにして、１ページ内に占めるデータ部を所定数（この場合は４つ）に分割し、これらの分割したデータ部ごとの直後に対して、その分割されたデータ部(及び予備領域)のエラー訂正を行うだけのＥＣＣを格納した冗長部を連結する構造とすれば、ページサイズの増加にかかわらずエラー訂正の語長を適正範囲内に抑えることが可能になる。つまり、図３（ｂ）に示すページ構造は、主として、ページサイズの増加に対してエラー訂正の効率が低下しないことを目的として採用されるものである。
【００２９】
上述したフラッシュメモリの物理フォーマットを踏まえたうえで、フラッシュメモリ上でのデータ管理のために定義される、ブロックに対応した物理アドレス（物理ブロックアドレス）と論理アドレス（論理ブロックアドレス）の概念について、図４を参照して説明する。図４は、データの更新手順を示している。
図４（ａ）は、データ更新処理前の状態として、或るセグメント内から４つのブロックを抜き出して、これを模式的に示している。
フラッシュメモリにおいて物理的に存在する各ブロック（物理ブロック）に対しては物理ブロックアドレスが付される。この物理ブロックアドレスはメモリにおける物理ブロックの物理的な配列順に従って決まるもので、或る物理ブロックとこれに対応付けされた物理ブロックアドレスとの関係は不変となる。
ここでは、図４（ａ）に示す４つのブロックに対して、上から順に物理ブロックアドレスの値として、１０５，１０６，１０７，１０８が付されている。なお、実際の物理ブロックアドレスは例えば２バイトにより表現される。
【００３０】
ここで、図４（ａ）に示すように、物理ブロックアドレス１０５，１０６で示されるブロックがデータの記憶されている書込済ブロックで、物理ブロックアドレス１０７，１０８で示されるブロックがデータが消去（即ち、未記録（未使用）領域である）された消去済ブロックとなっている状態であるとする。
【００３１】
そして、論理ブロックアドレスであるが、この論理ブロックアドレスは、ブロックに対して書き込まれたデータに付随するようにして割り振られるアドレスとされる。そして、この論理ブロックアドレスが、論理ブロックアドレス、物理ブロックアドレス管理層の上位に位置するとされる、ＦＡＴ(File Allocation Table)ファイルシステムなどのファイルシステムが参照するアドレスとされている。
図４（ａ）では、４つの各ブロックに対して、上から順に論理ブロックアドレスの値として、１０２，１０３，１０４，１０５が付されている状態が示されている。なお、論理ブロックアドレスも実際には２バイトにより表現されるものである。
【００３２】
ここで、上記図４（ａ）に示す状態から、例えば物理ブロックアドレス１０５が示すブロック格納されているデータの更新として、内容の書き換え、追加、又は一部消去を行うとする。
このような場合、フラッシュメモリのファイルシステムでは、同じブロックに対して更新したデータを再度書き込むことはせずに、消去済ブロックに対してその更新したデータを書き込むようにされる。
つまり、例えば図４において処理１となる図４（ａ）から図４（ｂ）の遷移として示すようにして、物理ブロックアドレス１０５のブロックに書き込まれていたデータについての更新データは、これまで未使用ブロックであった物理ブロックアドレス１０７で示されるブロックに書き込むようにされる。そして、物理ブロックアドレス１０５のブロックのデータについては消去するようにされる。
【００３３】
続いては、処理２として示すように、データ更新前（図４（ａ））の状態では物理ブロックアドレス１０５に対応していた論理ブロックアドレス１０２が、更新されたデータが書き込まれたブロックの物理ブロックアドレス１０７に対応するように、論理ブロックアドレスと物理ブロックアドレスとの対応関係についての変更を行う。これに伴って、データ更新前は物理ブロックアドレス１０７に対応していた論理ブロックアドレス１０４については、物理ブロックアドレス１０５に対応するように変更されている。このようにして、フラッシュメモリでは、１つの論理ブロックアドレスに対応するデータの更新前後で物理ブロック（物理ブロックアドレス）を交替（スワップ）させる処理が実行される。
そして、この際に論理ブロックアドレスを上記処理２のようにして扱うことで、更新前と更新後のデータとで書き込まれるブロックの交替があるようにされても、例えば上位のファイルシステムは論理ブロックアドレスを参照してファイルアクセスを行うことになるために、ファイルシステム側からは同一のアドレスが見えることになり、以降のアクセスを適正に実行することができるものである。
また、このような処理手順からも分かるように、物理ブロックアドレスはブロックに対して固有に付されるアドレスであり、論理ブロックアドレスは、一旦ブロックに対して書き込まれたデータに付随するようにしてついて回る、ブロック単位の書き込みデータに固有となるアドレスであるとみることができる。
【００３４】
また、上記図４に示されるブロック交替処理を、ページ単位の書き込み処理としてみた場合の手順の一例について図５により説明しておくこととする。
【００３５】
図５（ａ）〜（ｄ）の左側には、更新対象となるデータが書込済みになっているブロック（更新対象ブロック）が示されている。また、同じ図５（ａ）〜（ｄ）の右側には、更新データを実際に書き込むものとして消去済みブロックのうちから新規に選択されたブロック（新規ブロック）が示されている。
ここで、図５（ａ）は、更新処理前において、新規ブロックが決定された状態例を模式的に示している。ここでの更新対象ブロックとして示すように、更新前のデータとしては、ページ0、ページ1、ページ2、ページ3、の４つのページ位置に対してそれぞれ、データＤ0、Ｄ1、Ｄ2、Ｄ3が書き込み済みの状態にあり、ページ4以降は未使用とされる。また、この段階では、新規ブロックは全てのページが消去済みの状態となっている。
【００３６】
そして、この場合においては、上記図５（ａ）に示す状態において、例えばページ2に格納されるデータ内容を更新するためのデータ書込要求があったとする。つまり、この場合のブロックのデータ更新に関する具体的な内容としては、ページ2におけるデータ内容の更新となる。
このようなブロックのデータを更新するための新規ブロックへのデータの書き込みは、先頭ページから次のページへと順次的にページ単位で書き込みを実行していくことで行われるようにされる。このために、図５（ａ）に示されるデータ書込要求に応じては、先ず、図５（ｂ）に示すようにして、更新対象ブロックから、先頭ページであるページ0のデータＤ0を読み出して、この読み出したデータＤ0を、新規ブロックにおける同じページ0に対して書き込むようにされる。つまり、データＤ0についてはその内容に変更はないので、更新対象ブロックから新規ブロックに対してデータをコピーするようにして書き込むことになる。
続いては、図５（ｃ）に示すようにして、先頭ページ（ページ0）に続くページ1のデータＤ1を読み出して、新規ブロックにおける同じページ1に対してコピーとしての書き込みを行うようにされる。
【００３７】
そして、データ内容が更新されるべき次のページ2については、図５（ｄ）に示すようにして、更新対象ブロックにおけるページ2のデータＤ2を更新した内容のデータＤ2＋を、新規ブロックのページ2に対して書き込むようにされる。なお、更新後のデータD2＋は、先ず、更新対象ブロックにおけるページ2からデータD2を読み出して例えばＲＡＭ上で更新処理を行うことで生成するようにされる。
上記のようにしてデータD2＋の書き込みが完了すると、図５（ｅ）に示すようにして、更新対象ブロックのページ3のデータＤ3を、新規ブロックのページ3にコピーするようにして書き込むようにされる。この場合には、ここまでの手順を完了した段階で、新規ブロックに対する更新データの書き込みが完了したことになる。
このようにして、ブロック交替処理に伴うブロックデータの書き込みの実際としては、変更のないページについてはデータをコピーし、変更のあるページについては、更新した内容のデータの書き込むという手順を、先頭ページから順次行っていくようにされる。
そして、この図５には示していないが、更新データの書き込みが終了した後の所定のタイミングで、図５の左側に示されている更新対象ブロックに書き込まれているデータについての消去が行われる。つまり、データ書き込みに伴うブロック交替が行われる。
【００３８】
上記図４及び図５に示したようにしてブロックの交替を伴ってデータの書き込みが行われることで、物理ブロックアドレスと論理ブロックアドレスの対応は変化する。従って、フラッシュメモリに対するデータの書き込み及び読み出しのためのアクセスを実現するには、物理ブロックアドレスと論理ブロックアドレスとの対応が示される論理−物理アドレス変換テーブルが必要となる。つまり、論理−物理アドレス変換テーブルを上位ファイルシステムが参照することで、上位ファイルシステムが指定した論理アドレスに対応する物理アドレスが特定され、この特定された物理アドレスにより示されるブロックにアクセスすることが可能になるものである。
【００３９】
図６は、論理−物理アドレス変換テーブルの概念を示している。
この図に示すようにして、論理−物理アドレス変換テーブルとしては、例えば、先ずブロック論理アドレスを昇順に整列させることしている。そして、各論理ブロックアドレスごとに、対応させるべき物理ブロックアドレスを格納するようにしてテーブル情報を構築する。なお、この図においては、論理ブロックアドレスを、０〜Ｘによる整数値として示しているが、例えば実際としては２バイトにより表現される値を持つものとなる。
【００４０】
なお、以降の説明において、論理ブロックアドレスをＬＢＡ(Logical Block Address)と記載し、物理ブロックアドレスをＰＢＡ(Physical Block Address)と記載する場合がある。また、論理−物理アドレス変換テーブルについては、ＬＢＡにＰＢＡを対応させていることに基づき、ＰＢＡテーブルともいう場合がある。
【００４１】
上記図４〜図６により示したデータ更新に伴うブロック交替処理と、ＰＢＡテーブルによるブロック管理を行う必要性は、例えば、下記のようなフラッシュメモリの特質に由来する。
周知のようにして、フラッシュメモリは、上書きが不可であり、必ず消去済みの領域に対してデータを書き込むことが要求される。そのうえで、データ消去の最小単位がブロックとなるのに対して、データ書き込みの最小単位はページとなる。さらに、ページに対するデータ書き込みは、ブロック内において物理的に配列されるページ順（物理ページアドレス順）に従って行っていくべきこととされている。
また、フラッシュメモリとしての半導体素子には寿命があり、この寿命は、データの消去回数として表される。
このような特質から、例えば図５（ａ）の更新対象ブロックのページ2に対して、直接、更新データを上書きすることはできない。そこで、例えばページ2の領域だけでも消去する必要が生じるが、データ消去の最小単位はブロックであるために、ブロックの全領域のデータを消去したうえで、再び、ブロックに格納させるべきデータを書き込むという手順が必要になる。すると、たとえ1ページ分だけであっても、データの書き換えを行おうとした場合には、その都度、ブロックを消去しなければならないことになる。このようなデータ書き込みに応じたブロックの消去が、１つのブロックに対して繰り返し行われれば、それだけ、そのブロック領域の寿命が短くなる。そこで、ブロック交替処理を伴うブロックのデータ更新とすることで、特定のブロックにおけるデータの消去が集中して繰り返されないようにしているものである。
【００４２】
しかしながら、図４〜図６により説明した、これまでのフラッシュメモリに対するデータ書き込みのシーケンスでは、ブロック内のデータを更新するときには、そのブロックのデータを消去する（ブロック消去）という処理が必然的についてまわる。
このようなブロック消去の処理は、例えばページ書き込みや、読み出しの処理などと比較して、相当に時間を要することが分かっている。具体例として、ブロックサイズが１２８ＫＢの場合において、ブロック消去の所要時間は約１．５ｍｓであるのに対して、ページ書き込み時間は約２００μｓ、ページの読み出しは最大で約２０μｓとなる測定結果が得られている。また、ブロックサイズが２５６ＫＢの場合においては、ブロック消去の所要時間が約３ｍｓであるのに対して、ページ書き込み時間は約８００μｓ、ページの読み出しは最大で約５０μｓとなる測定結果が得られている。
【００４３】
このことは、ブロック消去に要する時間の存在により、フラッシュメモリにおいてデータ書き込みを完了させるのに要する時間が長時間化しているとみることができる。特に、データ書き込みの開始から終了までの時間内においてブロック消去に要する時間の占有率は、書き込みデータのサイズが小さいほど高くなる一方で、書き込みデータのサイズが大きくなるほど低くなっていくために、小さなサイズのデータを書き込ませているのにもかかわらず、大きなサイズのデータを書き込んでいるときと、あまりデータ書き込みが完了するまでの時間に大差がないという結果を生じる。つまり、これまでのフラッシュメモリのデータ書き込みのアルゴリズムでは、ブロック消去処理の存在により、データの書き込み速度の高速化を図ることが困難であり、特に、小さいサイズのデータを書き込む場合において、相対的なデータ書き込み速度の低下が顕著になる、という問題を有しているということがいえる。
そこで、本実施の形態としては、以降説明していく構成を採ることで、データ書き込み速度の高速化を図るようにされる。
【００４４】
先ず、図７により、本実施の形態におけるデータ書き込みのアルゴリズムについて、具体例を挙げて説明する。
この図７において、ブロック（第１単位領域）は、ｍ＋１個のページ（第２単位領域）から成るものとされており、先頭ページから最終ページにかけて、０〜ｍにより表される物理ページアドレスが対応付けられている。なお、以降において、物理ページアドレスは、図において表記もしているように、ＰＰＡ（Physical Page Address）とも記載する場合がある。このＰＰＡは、ブロックにおいて物理的に配列される先頭ページから最終ページに対して固定的に割り当てられる。
【００４５】
ここで先ず、図７（ａ）に示されるように、データが書込済み（使用済み）の状態にあるブロックが存在しているとする。このブロックは、ＰＰＡ＝０、ＰＰＡ＝１、ＰＰＡ＝２により示される３つのブロックに対して、それぞれ、データＤ0、Ｄ1、Ｄ2が書込済みとされており、これに続くＰＰＡ＝３〜ＰＰＡ＝ｍまでのページは未使用の状態にあるものとされている。そして、この状態の下で、ＰＰＡ＝１が示すページのデータＤ1を更新するためのデータの書き込み要求が行われたとする。
【００４６】
先に説明した従来のアルゴリズムでは、この書き込み要求に応じてブロック交替処理を伴うデータの更新が行われる。これに対して本実施の形態では、図７（ｂ）に示すようにして、未使用となっているページのうちの先頭ページである、ＰＰＡ＝３が示すページに対してデータＤ1を更新した内容のデータＤ1＋を書き込むようにされる。
また、この後において、例えば図７（ｃ）に示すようにして、ＰＰＡ＝０が示すページのデータＤ0を更新するためのデータ書込要求が行われたとすると、図７（ｄ）に示すようにして、この段階において未使用となっているページのうちの先頭ページである、ＰＰＡ＝４が示すページに対してデータＤ0を更新した内容のデータＤ0＋を書き込むようにされる。
なお、確認のために述べておくと、上記のようにして更新後のデータＤ0＋、Ｄ1＋が書き込まれたことで、ページ0、1にそれぞれ格納される更新前のデータＤ0、Ｄ1は無効なデータとなる。更新後のデータＤ0＋、Ｄ1＋が有効である。
【００４７】
上記した本実施の形態のデータ書き込みの動作は、ページ単位に相当するデータ書き込みを実行するのにあたり、要求に応じて書き込むべきデータを、未使用のページ（空きページ）を先頭から埋めるようにして書き込んでいく動作である、ということになる。例えば先に説明した従来のデータの書き込みを、この図７の状況に適用したとすると、２回のデータ書き込み要求に応じて、既に２回のブロック交替処理が発生する。つまり、２回のブロック消去の処理が実行されることになる。これに対して、本実施の形態では、２回のページ書き込みで済んでいる。このことは、ブロックに空きページが存在してページデータの追記が可能とされる限り、ブロック消去の処理は生じない、ということを意味している。
このようにして本実施の形態では、データ書き込みについて、ブロック交替処理の代わりに未使用ページへの追記という処理を実行するものであり、これにより、ブロック消去が実行されないようにしているものである。そして、このようにブロック消去の処理が省かれれば、それだけ同じデータサイズに対するデータ書き込みの所要時間は短縮される。つまり、データの書き込み速度の高速化が図られることになる。
また、従来においては、ブロック交替処理によりフラッシュメモリの長寿命化を図ることとしているが、これは、或る１つのブロックデータを格納するブロックを交替することにより、消去されるブロックを分散、均一化させることで得られる効果となる。この場合、ブロック消去の処理そのものは、データ書き込みごとに必ず実行される。これに対して、本実施の形態では、データ書き込みとして同一ブロックに対するページデータの追記を行っている限りは、ブロックの消去処理そのものが生じないものであり、長寿命化の点でも従来と比較して優れている。
【００４８】
そして、本実施の形態としては、上記図７のようにして未使用ページに対して書き込みデータを順次追記していくアルゴリズムとしたことに応じて、ページに書き込まれたデータごとに対して、例えば図８に示すようにして、論理ページアドレス（ＬＰＡ）を割り当てることとする。なお、以降において論理ページアドレスについては、ＬＰＡ(Logical Page Address)と表記する場合もある。
図８（ａ）（ｂ）（ｃ）は、それぞれ、図７（ａ）、（ｂ）（ｄ）と同じデータ書き込み結果が示されている。この場合において、例えば図７（ａ）に示す状態では、ＰＰＡ＝０が示すページに書き込まれたデータＤ0に対応させてＬＰＡ＝0を割り当て、次いで順に、ＰＰＡ＝１が示すページに書き込まれたデータＤ1に対応させてＬＰＡ＝1を割り当て、ＰＰＡ＝２が示すページに書き込まれたデータＤ2に対応させてＬＰＡ＝2を割り当てている。
そして、図８（ｂ）の状態では、さらにＰＰＡ＝３が示すページに書き込まれたデータＤ1＋に対して、ＬＰＡ＝1を割り当てている。また、図８（ｃ）の状態では、さらにＰＰＡ＝３が示すページに書き込まれたデータＤ0＋に対して、ＬＰＡ＝0を割り当てている。
つまり、ＬＰＡ＝は、ページに書き込まれたデータを特定するものとして割り当てられるアドレスとして考えることができる。そして、図８（ｂ）（ｃ）からも分かるように、更新前後の関係を有するデータについては同一のＬＰＡを割り当てることとしている。従って、ＬＰＡは、異なるブロックに対して重複して割り当てることが許可されているものである。
【００４９】
上記のようにして割り当てられるＬＰＡは、先に図３に示したように、対応するページ内にて格納されることになる。このようなＬＰＡの格納構造からも、ＬＰＡは、ページ単位で記録されるデータに対応付けられるようにして割り与えられるアドレスであるとみることができる。これに対して、ＰＰＡは、ブロックにおける物理的なページ配列に対して固定的に割り当てられるものとなる。
【００５０】
ところで、図７及び図８に示したようにしてページデータを追記するかたちでデータ書き込みを継続させていったとすると、或るデータ書き込みを実行完了した段階で、そのブロック内のページは全て使用済みとなって未使用ページ（空きページ）が無くなる。例えばこの状態を図９（ａ）に示す。
【００５１】
図９（ａ）には、或るブロックにおいて、全てのページに対してデータの書き込みが行われて使用済みとなっている様態例が示されている。
なお、この図においては、ブロック内のページついてデータ部と冗長部とに論理的に分割して示している。データ部におけるページ０〜６３の表記は、ＰＰＡに応じたブロック内におけるそのページの配列順を示している。つまり、この場合においては６４のページにより１ブロックが形成されるフォーマットを例としている。また、冗長部には、その予備領域に格納しているとされるＬＰＡの値を１６進法表記により示している。
【００５２】
そして、上記図９（ａ）に示されるページ６３に対して例えばＬＰＡ＝0x2Fのページデータの書き込みを完了した次に、図９（ｂ）に示すようにしてＬＰＡ＝0x2Eのページデータの書き込みを実行すべきことになったとする。
このとき、図９（ａ）のブロックには未使用ページが存在していないので、図９（ａ）のブロックに対して新規に書き込む必要のあるＬＰＡ＝0x2Eのページデータを追記することはできない。このことは、空きページが無くなったことを以て、本来データ書き込みを行う対象となるべきブロックに対するデータの書き込みが禁止される条件を満たしたものであるといえる。
【００５３】
本実施の形態では、このようにして、これまでページ追記を行っていたブロックの空きページがなくなった状態から、さらにそのブロックを指定してデータを書き込まなければならない状況になったとされると、未使用（全ページが空き）となっているブロックのうちから１つのブロックを追加ブロック（追加用第１単位領域）として確保するようにされる。そして、図９（ｃ）に示すようにして、この追加ブロックに対して、図９（ｂ）のページデータを書き込むようにされる。このときの書き込みは、ブロック内において物理的に先頭となるページに対して行われる。先に述べたように、フラッシュメモリでは、ページ単位でのデータ書き込みは、ＰＰＡの昇順に従うべきこととされているからである。なお、未使用ページについては、その冗長部の予備領域のＬＰＡは、例えば0xFFとなっている。つまり、予備領域におけるＬＰＡ＝0xFFとなっていれば、そのページは未使用（空き）であることが示されるのであるが、この0xFFの値は、ブロック消去が行われた結果として、消去対象領域において全て１が書き込まれることにより得られるものである。
そして、以降において、本来は図９（ａ）のブロックのデータを成すものとされるデータを書き込むべきこととなった場合には、図９（ｃ）の追加ブロックに対して、先頭ページに続く次のページから、ＰＰＡの昇順に従って、順次ページ単位での書き込みを行っていくようにされる。
【００５４】
上記のようにしてオプション的に定義される図９（ｃ）の追加ブロックと、図９（ａ）に示される本来のブロックとの関係は次のようになる。なお、以降においては、図９（ａ）の本来のブロックについては、オリジナルブロックともいうことにする。
先の説明のようにして、従来からのフラッシュメモリにおけるメモリ管理にあたっては、図６に示したＰＢＡテーブルを用いることとされているが、例えば上位アプリケーションはＰＢＡテーブルを利用してフラッシュメモリへのアクセスを行うことから、本実施の形態としても、同様にして、ＰＢＡテーブルによりブロック単位でのメモリ管理を行うこととしている。このことは、本実施の形態としても、ブロックに対しては、そこに書き込まれるデータに対応付けられるようにしてＬＢＡが割り当てられるということを意味する。
【００５５】
そのうえで、本実施の形態としては、図９においても記載しているように、オリジナルブロックと追加ブロックとで、同一のＬＢＡを有り当てることとしている。つまり、追加ブロックが作成された段階で、対応するオリジナルブロックに割り当てられているＬＢＡを、その追加ブロックにも割り当てるようにするものである。
【００５６】
このようにして複数のブロックに同一のＬＢＡを付すということは、１つのＬＢＡに対して複数のＰＢＡを対応付けているということに他ならない。このことは、本実施の形態にあっては、本来は１つのブロックに対応して書き込まれるべきデータのために用意される書き込み可能領域を、２ブロック分のサイズにまで拡張しているということを意味する。この意義を示すものとして、図９においては、オリジナルブロック（図９（ａ））については、６４個のブロックごとに、ＰＰＡに対応させてページ０〜６３と表記しているのに対して、追加ブロック（図９（ｂ））については、同じ６４個のブロックごとに、ＰＰＡに対応させてページ６４〜１２７と表記している。つまり、ここでのこの表記は、ブロックデータが格納される１つのブロックに対応するページ数が、本来は６４であるのに対し、その２倍の１２８にまで拡張されているということを示している。
【００５７】
このようにして追加ブロックを設けてデータを追記可能としたことで、オリジナルブロックに空きページがなくなった後においても、追加ブロックに空きページが存在して追加可能なうちは、ブロック消去が実行されない状況を継続させることが可能になる。これにより、データ書き込み速度の向上と、メモリ領域の長寿命化の効果がより高められることになる。
【００５８】
ところで、上記のようにして、互いにＰＢＡの異なるオリジナルブロックと追加ブロックを１つのＰＢＡに対応させることとしたのであれば、このようなオリジナルブロックと追加ブロックとの関係を識別可能なようにしてシステム上で管理することが必要になってくるが、本実施の形態としては、これを下記のようにして行うこととする。なお、このようなオリジナルブロックと追加ブロックについての管理を、ここでは、オプションの追加ブロックに関する管理として捉えることに由来して、追加ブロック管理ともいうことにする。
【００５９】
先ず、フラッシュメモリのシステムにおけるブロック管理は、先の説明のようにして、図６に示したＰＢＡテーブル（論理−物理アドレス変換テーブル）を利用するものとされている。この図６に示されるＰＢＡテーブルは、ＰＢＡとＬＢＡとは一対一の関係となっていることを前提として、その管理構造としても、１つのＰＢＡに１つのＬＢＡのみを対応させた構造となっている。従って、このままの構造では、１つのＬＢＡに対して複数のＰＢＡを対応させるようにして管理することはできない。そこで、上位層が参照するＰＢＡテーブルについて、１つのＬＢＡに対して複数のＰＢＡを対応させた管理が可能なようにその構造、仕様を変更することも考えられるが、そうすると、例えばフラッシュメモリのドライバ層だけではなく、その上位のファイルシステム層などについても仕様変更が及ぶ可能性があるなどの不都合が生じる可能性がある。この観点からすると、ＰＢＡテーブルの構造については変更しないことが好ましい。
【００６０】
そこで、本実施の形態としても、ＰＢＡテーブルについては、図６に示した従来からの構造を採ることとしている。この場合において、ＰＢＡテーブルにより管理されるブロックはオリジナルブロックであることとする。
そのうえで、図１０に示す追加ブロック管理テーブルを定義する。
図１０に示される追加ブロック管理テーブルは、オリジナルブロックのＬＢＡに対して追加ブロックのＰＢＡを対応させた構造を有する。これまでに述べてきたように、ＬＢＡはオリジナルブロックと追加ブロックとで同一であるから、追加ブロック管理テーブルにおいて追加ブロックのＰＢＡに対応するＬＢＡが、即ち、その追加ブロックにも与えられるＬＢＡとなる。これにより、フラッシュメモリ内のブロックのうちからオリジナルブロックと追加ブロックの対応関係を特定することが可能になる。
つまり、先ず図６のＰＢＡテーブルを参照することで、或る目的とする１つのオリジナルブロックについてのＬＢＡとＰＢＡの対応を特定できる。そして、ＰＢＡテーブルを参照して特定した上記１つのオリジナルブロックのＬＢＡと同じ値のＬＢＡ（オリジナルブロックのＬＢＡ）を、追加ブロック管理テーブルから探索してみて、そのＬＢＡが探索されたのであれば、このＬＢＡに対応するＰＢＡが追加ブロックである。
このようして、ＰＢＡテーブルと追加ブロック管理テーブルとで、同じＬＢＡが対応付けられているＰＢＡを探索すれば、それぞれがオリジナルブロックと追加ブロックのＰＢＡを示していることになる。また、追加ブロック管理テーブルについて探索を行った結果として、ＰＢＡテーブルに対して探索を行ったときと同じＬＢＡ（オリジナルブロックのＬＢＡ）が存在しなかった場合には、そのオリジナルブロックには、追加ブロックが割り当てられていないということになる。
【００６１】
また、図１０に示される追加ブロック管理テーブルとしては、行番号について例えば０〜９を付していることから分かるように、オリジナルブロックのＬＢＡに対して追加ブロックのＰＢＡを対応させる行領域としては１０個のみを用意することとされている。このことは、管理可能な追加テーブルの上限が１０個であり、従って、フラッシュメモリの記憶領域（例えばセグメント）全体において使用可能な追加ブロック数も１０個であるということを意味する。
【００６２】
さらに、この図１０に示される追加ブロック管理テーブルによっては、追加ブロックの生成順が特定できるようにして追加ブロック管理が行われるものとされる。
このためには、例えば、新規に追加ブロックが登録される都度、登録済みとされていた追加ブロックについてのＬＢＡとＰＢＡを格納した行を、行番号の昇順に従って１行ごとにシフトさせるようにする。つまり、ＬＢＡとＰＢＡの組み合わせによる追加ブロックの登録情報に対応させる行番号を１インクリメントしていくようにされる。そして、この行シフトの結果により空き領域となった行番号０の行に対して、新規追加ブロックについてのＬＢＡ、ＰＢＡを登録するようにされる。これにより、行番号の昇順（０，１，２・・・９）に従って追加ブロックが古くなることが示される。
【００６３】
ところで、上記のようにして、本実施の形態において追加ブロック数に制限を設けることの理由は次のようになる。
仮に追加ブロック数について制限を設けないこととすると、ブロックの空きページがなくなるごとに必ず追加ブロックが形成されていくことになるので、データ書き込みが継続されるのに応じて、追加ブロック数は無制限に増加していくことになる。しかし、追加ブロック数が増加すれば、その分、使用可能なフラッシュメモリの容量が少なくなっていくことになる。つまり、必要以上に、フラッシュメモリの記憶可能容量を少なくしてしまう可能性がある。また、このような記憶可能容量の消費は、実際に書き込んだファイルサイズよりもはるかに少ない空き容量しか残っていないという状況も生む。このようなことは、例えばユーザにとっては不利益となるものであり、また、信頼性を損なう原因にもなり得る。
【００６４】
そこで、本実施の形態としては、使用可能な追加ブロック数に制限を与えることとして、上記した問題が生じないようにしているものである。実際においても、例えば２ＧＢ〜４ＧＢ程度の総容量でブロック総数が約１６０００〜３２０００程度のフラッシュメモリを対象として検討を行った結果として、フラッシュメモリの記憶可能容量を必要以上に消費しないことと、データ書き込み速度との両立させるには、使用可能な追加ブロック数を１０個程度とすることが妥当であるとの結論が得られているものである。
【００６５】
そして、例えば図９による説明のようにして、追加ブロックに対して、順次、ページデータの書き込みを行っていったとすると、或る段階にて、最後のページ１２７に対してページを書き込むことになり、ここで、追加ブロックに対する追記は不可となる。この状態を、図１１（ａ）（ｂ）に示す。図１１（ａ）には、図９（ａ）と同じオリジナルブロックが示され、図１１（ｂ）には、図９（ｂ）の追加ブロックについて、その最終ページまでのページデータの追記が行われて空きページが無くなった状態例を示している。
そして、この状態において、例えばさらに、図９（ｃ）に示すＬＰＡ＝0x09のデータを書き込むべきことになったとする。この場合、上記もしているように、図１１（ｂ）の追加ブロックに対する追記をこれ以上は行うことができない。
【００６６】
このようにして追加ブロックに空きページが無くなってデータの追記ができなくなった場合の対応として、１つには、さらに追加ブロックを設けて追記を継続させるということが考えられる。しかしながら、このような手法による対応は、先に説明したような追加ブロック数の不用意な増加を招く結果につながることから、本実施の形態では採用しないこととしている。
本実施の形態の対応としては、追加ブロックとオリジナルブロックにこれまで書き込まれたページデータのうちから有効なデータを抜き出し、これらを１つのブロックにまとめて書き込むようにして、ブロックの再構築を行うようにされる。このようなブロック再構築の処理を、ここでは、マージ処理ということにする。
【００６７】
図１１の場合におけるマージ処理としては次のようになる。
先の説明のようにして、図１１（ａ）（ｂ）のオリジナルブロックと追加ブロックが、ともに空きページが無くなった状態で、図１１（ｃ）に示すＬＰＡ＝0x09のデータを書き込むべきタイミングになったとすると、このときに未使用となっているブロックのうちから１つのブロックを選択して、図５（ｄ）のマージブロックとして確保する。そして、このマージブロックに対して、下記のようにしてページ単位によるデータの書き込みを実行していくようにされる。
【００６８】
先ず、マージブロックの先頭ページに対しては、図１１（ｃ）に示すＬＰＡ＝0x09のデータを書き込むこととする。そして、以降において、先頭ページより後のページに対して、追加ブロックとオリジナルブロックに書き込まれている内容のデータのうちから、有効なデータを書き込んでいくことになる。
【００６９】
オリジナルブロックと追加ブロックに対しては、例えば先の図７の説明のようにしてページデータの追記が行われる。このために、オリジナルブロックと追加ブロックにあっては、１つのＬＢＡに対応して最後に書き込まれたページデータと、これより前に書き込まれたページデータとが混在する可能性があることになる。また、上記最後に書き込まれたページデータは、最後に更新された内容を持つことから有効なデータであることになる。これに対して、これより前に書き込まれたページデータは、更新前の古い内容を有していることになるために無効なデータとなる。また、データ書き込みは、オリジナルブロックに対して追記を行った後に追加ブロックに追記するという手順になるので、オリジナルブロックと追記ブロックのページ０〜１２７として示されるページ順に従って、書き込みデータは新しいものになるということがいえる。
【００７０】
上記したことに基づいて、本実施の形態としては、先ず、追加ブロックにおける最終ページであるページ１２７から先頭ページのページ６４にかけて、有効なページデータを探索していくようにされ、有効なページデータが探索できるごとに、このページデータを、マージブロックにおいて最後に書き込みが行われた次のページに対して、順次、コピーするようにして書き込んでいくようにされる。次いで、同様にして、オリジナルブロックにおける最終ページであるページ６３から先頭ページのページ０にかけて、有効なページデータを探索していきながら、探索された有効なページデータを、マージブロックにおいて最後に書き込みが行われた次のページに対して順次書き込んでいくようにされる。
ここでのページデータについての有効／無効の判定には、冗長部に格納されるＬＢＡを利用する。つまり、これまでに未だ探索されていないＬＢＡを格納したページは、同じＬＢＡを格納するページデータのうちで最後に書き込まれたページデータとなるので、有効であると判定できる。これに対して、探索済みのＬＢＡを格納したページは、同じＬＢＡを格納するページデータのうちで最後よりも前に書き込まれたページデータとなるので無効であると判定できる。
【００７１】
図１１においては、上記した追加ブロック及びオリジナルブロックからマージブロックへの有効データのコピー処理の具体例が示される。探索処理としては、先ず、図１１（ｂ）に示した追加ブロックにおけるページ１２７に格納されるページデータを探索することになるが、このページデータのＬＢＡ＝0x35は、未だマージブロックには格納されていない。従って、このページ１２７に格納されるページデータは有効データであることになる。そこで、このページデータを追加ブロックから読み出し、この時点において、マージブロックにおける空きページの先頭（ＰＰＡ順的に、最後の書込済みページの次のページ）となるページ１に対してコピーするようにして書き込む。また、次のページ１２６に格納されるページデータも有効データであるとして判定されることになり、マージブロックにおけるページ２に対してコピーするようにして書き込むことになる。この要領で追加ブロックに対する探索と、探索された有効なページデータのマージブロックへの書き込みを行っていくようにされる。そして、追加ブロックに対する探索がページ６４まで完了したとされると、続いては、図１１（ａ）のオリジナルブロックに対する探索を行っていくようにされる。
【００７２】
図１１（ａ）のオリジナルブロックのページ６３には、ＬＢＡ＝0x01のページデータが格納されているが、この段階までＬＢＡ＝0x01のページデータは探索されていなかったものとされる。そこで、このページ６３のページデータは有効であると判定されることになり、マージブロックに対して書き込まれる。なお、これまでの段階においては、マージブロックには、ページ６１まで書き込みが完了しているものとされているので、このＬＢＡ＝0x01のページデータは、マージブロックのページ６２に対して書き込むことになる。
この場合においては、以降においてオリジナルブロックの探索を行った結果として、ページ２においてＬＢＡ＝0x02が探索されるまで、無効なページデータが連続したものとされている。そして、このページ２に格納されるＬＢＡ＝0x02のページデータが有効と判定され、マージブロックにおいて最後に残っていた空きページであるページ６３に対して書き込みを行うようにされる。
そして、このようにしてページ６３までの書き込みが完了した段階で、図１１（ｄ）のマージブロックには、図１１（ａ）のオリジナルブロック（及び図１１（ｂ）の追加ブロック）に割り当てられたＬＢＡに対応する有効な最新のブロックデータが格納された状態となっている。また、確認のために述べておくと、マージブロックにおいては、同一のＬＰＡが重複したページデータは格納されていない。
【００７３】
なお、実際においては、データ書き込み内容に応じて、マージブロックにおける全てのページが使用されない場合もある。この場合には、ページデータのコピーが行われなかったページについては空きページの状態となっているものである。
【００７４】
そして、上記のようにしてマージブロックが完成したとすると、このマージブロックを新規のオリジナルブロックとして登録するようにされる。このためには、例えばＰＢＡテーブルについて、図１１（ａ）（ｂ）のオリジナルブロックと追加ブロックに与えられたＬＢＡに、図１１（ｃ）のマージブロックのＰＢＡを対応させるようにして更新を行えばよい。また、このようにしてマージブロックを新規オリジナルテーブルとして登録したことに応じて、図１１（ａ）の前のオリジナルブロックは、ＰＢＡテーブルからの登録が削除されることになる。そして、この図１１（ａ）の前のオリジナルブロックについては、再度の使用が可能となるように、この段階で、ブロック消去を行っておくようにされる。
また、マージブロックが完成したことで、図１１（ｂ）の追加ブロックも不要となる。そこで、追加ブロックについては、先ず、追加ブロック管理テーブルからの登録を削除する。このようにして追加ブロックの登録削除が行われた場合において、追加ブロック管理テーブルにおいて空きになった行より後の行番号の行に対して追加ブロックが登録されていた場合には、空きになった行を埋めるようにして、空きの行より後ろの全ての追加ブロックの登録データを、１行繰り上げるようにしてシフトさせるようにする。
そのうえで、図１１（ｂ）の追加ブロックについてもブロック消去を行っておくようにされる。
以上でマージ処理としての一連の手順が完了する。
【００７５】
なお、図１１（ｄ）に示されるように、マージブロック（新規オリジナルブロック）においては、ＬＰＡ順に従ってページデータを配列させることはしていない。このブロックからデータを読み出すときには、先ず、ブロックからページデータを読み出したうえで、例えばＲＡＭなどの作業領域上で、ＬＰＡ順に配列させることで論理的な連続性を得るようにされればよいからである。
【００７６】
確認のために述べておくと、例えば、図１１に例示したようなマージ処理を実行した後に、さらにデータ書き込みを行っていくべきことになった場合には、マージブロックから新規オリジナルブロックへと変更されたブロックにおいて空きページが在る限りは、この空きページに対して追記を行っていくようにされる。そして、空きページが無くなったのであれば、先の図９により説明したのと同様の要領によって追加ブロックを割り当て、この追加ブロックに対して追記を行っていくようにされる。
【００７７】
これまでの説明から理解されるように、本実施の形態では、データ書き込みの実行中においてブロック消去が行われる機会としては、マージ処理のみであることになる。マージ処理では、元のオリジナルブロックと追加ブロックを対象とした２ブロック分のブロック消去を行う必要があるが、これは、例えば２ブロック分のデータ書き込みが行われてからはじめて実行されるものとなる。従来では、２ブロック分のデータを書き込もうとすれば、最大で１ブロックあたりのページ数の２倍の回数分のブロック消去を実行することになる。これに対して本実施の形態では、２回で済むものであり、データ書き込み速度の向上やメモリの長寿命化などの効果は充分に得られるものである。
【００７８】
また、本実施の形態にあっては、図３にて説明したように、ページデータにおける冗長部の予備領域に対して、ＬＰＡとともに、ＬＢＡ、ＳＱＮ、ＣＮＴＦを格納しておく必要がある。これらのうち、ＬＢＡ、ＳＱＮの有効な値をブロック内の先頭ページに対して格納すべきことになっている。そこで、ＬＢＡ、ＳＱＮについては、オリジナルブロック、追加ブロック、またマージブロックが新規に作成されて先頭ページにページデータを書き込むときに、このページデータに対して、しかるべき値を格納するようにされる。ＳＱＮについては、データ書き込みを実行しているときにおいて、ブロックを生成した順に従って例えば昇順による連番を生成し、この番号をＳＱＮとして格納させるようにする。従って、例えば同一ＬＢＡのオリジナルブロックと追加ブロックについては、ＳＱＮは連番となる。さらに同一ＬＢＡのオリジナルブロック、追加ブロック、及びマージブロックの間でもＳＱＮは連番になる。
また、ＣＮＴＦについては、オリジナルブロック、追加ブロック、またマージブロックにおける最終ページのデータ書き込みを実行する段階において、これまでの書き込み結果として、先頭ページから最終ページまでデータが論理的に連続した状態、つまり、ＬＰＡ順に従って書き込まれたのであれば、そのことを示す値を生成してＣＮＴＦとして格納させる。ＬＰＡ順に従った書き込みではなく、データが論理的に連続して書き込まれた状態ではないのであれば、そのことを示す値を生成して格納させる。
【００７９】
また、図１２により、マージ処理の例外（例外マージ処理）について説明しておくこととする。
例えば、書き込みを行うデータサイズが相当に大きい場合には、追加ブロックに対して書き込まれるデータが、ＰＰＡ順に従ってＬＰＡ順も連続した状態となる可能性がある。図１２（ｂ）には、このような状態の追加ブロックの一例を示している。なお、図１２（ａ）は、図１２（ｂ）の追加ブロックに対応するオリジナルブロックである。
この図１２（ｂ）に示す追加ブロックは、先頭のページ６４から最終の１つ前のページ１２６までにかけて、ＬＰＡ＝0x00、ＬＰＡ＝0x01、ＬＰＡ＝0x02・・・・ＬＰＡ＝0x03Eというように、ＬＰＡが連続した状態でページデータの書き込みが行われた内容となっている。
そのうえで、さらに、続けて最終ページ１２７に書き込まれるべきデータは、図１２（ｃ）に示すようにしてＬＰＡ＝0x3Fとなっており、このデータが書き込まれることにより、図１２（ｂ）の追加ブロックに書き込まれたブロックデータは、論理的なデータの開始位置（ＬＰＡ＝0x00）からはじまって、ＬＰＡ＝0x3Fまで連続して配列された状態が得られることになる。このような書き込み結果は、追加ブロックに書き込まれたデータのみにより、対応するＬＢＡの有効なブロックデータが形成されていることを意味する。
【００８０】
そこで、このような追加ブロックの書き込み結果となる場合においては、先ず、図１２（ｂ）の書き込み内容の追加ブロックを、そのまま新規オリジナルブロックとして登録するようにしてＰＢＡテーブルの更新と、追加ブロック管理テーブルの更新とを行う。そして、この段階では、未だ図１２（ｃ）の書き込みページデータを書き込んではいないので、新規オリジナルブロックの最終ページ６３に対して書き込むようにされる。なお、この最終ページ６３に対してページデータを書き込むときには、当該ブロックにおいてはＬＢＡ順によりデータが連続して書き込まれていることを示す値をＣＮＴＦの領域に格納することになる。
ここまでの処理を完了したとされると、図１２（ａ）のオリジナルブロックについてはブロック消去を行っておくようにされる。ここまでで例外マージ処理としての一連の手順が完了する。
【００８１】
図１２（ｂ）に示すような追加ブロックに対して、図１１に示した通常のマージ処理を適用したとすると、追加ブロックの書き込み内容がそのままオリジナルブロックとして使用可能であるのにも関わらず、ページ探索と、ページデータのコピーを行うという合理的でない無駄な処理を実行することになる。そこで、このような例外マージ処理を採用することとすれば、ページ探索及びページデータのコピーが省略されることになり、上記しているような無駄が省かれ効率的な処理とすることができる。また、ページ探索及びページデータのコピーが省略されるとともに、１回のマージ処理あたりのブロック消去処理も１回で済むことになるので、その分、通常マージ処理よりも、新規オリジナルブロックを得るまでの処理時間は短縮され、データ書き込み速度の向上に寄与できる。さらには、ブロック消去回数の削減により、長寿命化についても有利となる。
【００８２】
ところで、本実施の形態の携帯型コンテンツプレーヤ１などのようにして、フラッシュメモリなどのランダムアクセスと書き換えが可能とされる記憶媒体に対応してデータの記録再生を行うシステムにあっては、データ書き込み処理を実行している最中において、例えば、電源が遮断したり、ドライブから半導体記憶装置が取り外されるなどして、データの書き込み処理が中断されてしまう場合のあることを想定しておく必要がある。
このような場合、例えば、次の起動時においては、実際のフラッシュメモリ上での物理的なデータの記憶状態と、上記論理−物理アドレス変換テーブルなどの管理情報の内容とに不整合が生じていることになる。このままでは、以降において、フラッシュメモリに対する正常なデータの管理、アクセスが保証できなくなる。このような不都合を回避するためには、例えばデータ書き込みが中断されたことを検出したときには、フラッシュメモリにおける実際のデータの書き込み状態を検証していくなどして、管理情報を再構築できるように構成することが必要であり、実際においても、このための何らかの構成を採るようにされている。このような構成は、例えばデータ書き込みが瞬断されたことに対する対策であることにちなみ、瞬断対策などともいわれる。
【００８３】
本実施の形態としても瞬断対策を採るようにされるが、この場合において本実施の形態に固有のこととして考慮すべきことは、瞬断のタイミングによっては、オリジナルブロック、追加ブロック、及びマージブロックのうちで、少なくとも２つの同一のＬＢＡを持つブロックが存在してしまうことにある。瞬断によりデータ書き込みが終了した場合には、例えばＰＢＡテーブルや追加ブロック管理テーブルなどの管理情報の内容を信頼することはできない。つまり、管理情報によっては、同一ＬＢＡを持つ複数のブロックのうち、どのブロックが正常なブロックであるのかを判定することが困難になる。
【００８４】
本実施の形態において、図３に示した冗長部の予備領域に格納される情報のうち、ＳＱＮは、瞬断対策において、例えばオリジナルブロック、追加ブロック、及びマージブロックのうちから正常とされるブロックを特定するために利用される。そこで、図１３及び図１４により、先に説明した本実施の形態のデータ書き込み手順により、オリジナルブロック、追加ブロック、及びマージブロック間でのＳＱＮがどのような関係となるのかについて説明しておくこととする。
【００８５】
図１３は、図１２に示した通常のマージ処理の一手順例を示している。
例えば先ず、追加ブロックにおいて空きページが無くなった状態の下で、ステップＳ１０１によりフラッシュメモリのドライバ層に対して上位となるアプリケーション（ファイルシステム層）から１ページ分に対応するデータの書込要求があったとする。すると、フラッシュメモリドライバは、ステップＳ１０２により、要求されたデータをデータ部に格納したページデータを生成するとともに、マージブロックを確保して、このマージブロックの先頭ページに対して、生成したページデータの書き込みを行う。このステップＳ１０２によるページデータの書き込みのときに、そのページデータにおける冗長部の予備領域には、しかるべき値のＳＱＮが格納されることになる。
【００８６】
ステップＳ１０３〜Ｓ１１０は、図１１にて説明したマージ処理における、追加ブロックとオリジナルブロックに対する有効ページデータの探索と、探索された有効なページデータのマージブロックへの書き込みの処理例が示されている。ステップＳ１０３〜ステップＳ１０７までが追加ブロックを対象とした処理で、ステップＳ１０８〜Ｓ１１０までがオリジナルブロックを対象とした処理となる。例えばステップＳ１０３では追加ブロックの最終ページを探索して、有効ページデータの読み込みを行い、マージブロックにおける２番目のページに対する書き込みを行っているものとされる。次のステップＳ１０４も、追加ブロックの最後から１つ前のページを探索して有効ページデータの読み込みを行い、マージブロックにおける２番目のページに対する書き込みを行っているものとされる。
また、例えばステップＳ１０５は、追加ブロックの最後から１つ前のページを探索したが、ここのページデータのＬＰＡは既に探索済みであったので、マージブロックに対する書き込みを実行しなかった処理が示されている。このようにして以降も探索と有効ページデータの書き込みを実行していき、ステップＳ１０７にて追加ブロックの先頭ページを探索し、ここのページデータが有効なものであったことから、マージブロックへの書き込みを実行したことになっている。ここまでで、追加ブロックの探索が完了している。
そして、次のステップＳ１０７〜ステップＳ１１０まで、同様の手順により、オリジナルブロックを対象として、有効ページデータの探索とマージブロックへの書き込みを行っている。なお、この場合においては、最後の探索処理であるステップＳ１１０として、オリジナルブロックの先頭ページまで探索して有効ページデータをマージブロックに書き込んだ場合を示している。
【００８７】
ここまでの段階に至ると、例えばフラッシュメモリドライバは、ステップＳ１１１により、ＲＡＭ１３に保持しているＰＢＡテーブル、及び追加ブロック管理テーブルを更新して、データ書き込みが完了したマージブロックを、新規オリジナルブロックとして登録する。なお、ここでの更新は、あくまでもＲＡＭ上に保持している管理情報を対象として行っている。従って、例えば電源遮断などによりデータ書き込みが瞬断されれば、このＲＡＭに保持されていた管理情報は消去喪失する。
【００８８】
続いては、ステップＳ１１２により追加ブロックを対象としたブロック消去の処理を実行する。これにより、フラッシュメモリ上から追加ブロックのデータ内容が消去されることになる。さらに、次のステップＳ１１３により、元のオリジナルブロックを対象としてブロック消去の処理を実行する。ここまでの処理を完了して、ステップＳ１１４により要求に応じたページデータ書き込みが完了したことを上位に通知するようにされる。つまり、フラッシュメモリドライバの上位では、単に１ページ相当のデータの書き込みを要求しているだけなのであるが、フラッシュメモリドライバの層では、状況に応じて、このようなマージ処理を実行しているものである。
【００８９】
図１３に示した手順を実行していくタイミングに応じては、同図に示すようにして、状態１、状態２、状態３、状態４に分けて考えることができる。
先ず、状態１は、マージブロックが作成される前の段階とされ、オリジナルブロックと追加ブロックのデータが、フラッシュメモリの記憶領域上にて、空きページが無い状態で正常に存在している状態である。そして、マージブロックは、ステップＳ１０２により先頭ページのページデータの書き込みを実行したことで、はじめて作成されたものとして存在することになる。従って、ステップＳ１０２以降の状態２は、状態１に引き続きオリジナルブロックと追加ブロックのデータは、空きページが無い状態で存在していると共に、未完成あるいは完成したマージブロックのデータが存在している状態である。
状態３は、ステップＳ１１２により追加ブロックを消去してからの状態となるので、追加ブロックは存在しておらず、オリジナルブロックとマージブロックのみが存在している状態である。
状態４は、ステップＳ１１３により元のオリジナルブロックを消去して以降のタイミングになるこことから、新規オリジナルブロック（マージブロック）のみが存在している状態である。
【００９０】
図１４は、上記状態１〜状態４に対応した、オリジナルブロック、追加ブロック、マージブロックのフラッシュメモリ上での存在状態と、各ブロックに格納されるＳＱＮの関係を示している。
先に説明したように、ＳＱＮは、ブロックにおける先頭ページに、ＬＢＡ、ＬＰＡなどともに格納される。つまり、オリジナルブロック、追加ブロック、マージブロックの種類にかかわらず、そのブロックの作成開始時に先頭ページを書き込むのと同時に書き込まれるものとなる。また、このＳＱＮは、データ書き込み時におけるブロックの作成順に応じた連番が付される。従って、オリジナルブロックに対して追加ブロック、マージブロックが作成されたとすると、オリジナルブロック、追加ブロック、マージブロックの順で、ＳＱＮが連続する。つまり、例えばオリジナルブロックのＳＱＮについてＮで表すとすれば、追加ブロックのＳＱＮはＮ＋１、マージブロックのＳＱＮはＮ＋２で表される。
【００９１】
そして、状態１にあっては、ＳＱＮ＝Ｎのオリジナルブロックと、ＳＱＮ＝Ｎ＋１の追加ブロックが存在し、マージブロックは未だ存在していないことになる。
状態２にあっては、ＳＱＮ＝Ｎのオリジナルブロックと、ＳＱＮ＝Ｎ＋１の追加ブロックと、ＳＱＮ＝Ｎ＋２のマージブロックが存在することになる。
状態３にあっては、ＳＱＮ＝Ｎのオリジナルブロックと、ＳＱＮ＝Ｎ＋２のマージブロックが存在することになる。追加ブロックはブロック消去の処理により消去されて存在しない。
状態４にあっては、追加ブロック及び元のオリジナルブロックがブロック消去により存在していないので、ＳＱＮ＝Ｎ＋２のマージブロックのみがオリジナルブロックとして存在していることになる。
【００９２】
続いて、これまでに説明した本実施の形態のデータ書き込み処理の手順を、図１５〜図１７のフローチャートにより説明していくこととする。
これらの図に示す手順は、例えば制御部１１におけるハードウェア構成部位であるＣＰＵが、例えば記憶部１４に記憶されるプログラムをＲＡＭ１３に展開して実行することにより得られる、フラッシュメモリドライバ層が実行する処理手順としてみることができる。
なお、このようなプログラムは、例えば製造過程において記憶部１４に書き込んで記憶させるほか、例えばリムーバブルの記憶媒体に記憶させておいて、後から、この記憶媒体を使用してインストールするようにして携帯型コンテンツプレーヤ１に対して記憶させることも考えられる。また、ネットワーク上のサーバなどにおける記憶装置に記憶させておき、ネットワーク経由でダウンロードするようにして取得して携帯型コンテンツプレーヤ１にインストールするようなことも考えられる。この点については、図１７より以後にて説明するフローチャートについても同様である。
【００９３】
フラッシュメモリに対するデータ書き込みは、例えばフラッシュメモリドライバが、図１５のステップＳ２０１により、上位のファイルシステム層からのデータ書込要求を受け取り、この要求に応答したステップＳ２０２以降の処理を実行していくことで開始されるものとなる。なお、このデータ書き込み要求は、書き込むデータへのポインタ、書き込むべきセクタの先頭番号、及び書き込みデータのセクタ数等を指定する。
【００９４】
ステップＳ２０２においては、データ書き込み要求に応じてデータを書き込むべきブロックをＬＢＡにより特定した上で、この書き込み対象のＬＢＡに対して追加ブロックが作成済み（割当済み）となっているか否かについて判別する。このためには、例えばＲＡＭ１３に保持させている追加ブロック管理テーブルを参照して、書き込み対象のＬＢＡが登録されているか否かについて判別すればよい。
ここで、肯定の判別結果が得られたのであれば、データの書き込み対象はさしあたり追加ブロックということになるので、ステップＳ２０３に進んで、追加ブロックにおける最初の空きページまでアクセスするようにされる。なお、追加ブロックの最初の空きページまでのアクセスは、追加ブロック管理テーブルにおいて書き込み対象のＬＢＡに対応付けられているＰＢＡが示すブロックにアクセスした上で、例えば先頭ページから、未使用となっているページが検出されるまで、ページ探索を行えばよい。未使用ページは、フラッシュメモリでは、全て１を書き込んだ状態となっている。
一方、ステップＳ２０２において否定の判別結果が得られたのであれば、データの書き込み対象はさしあたりオリジナルブロックということになるので、ステップＳ２０４により、オリジナルブロックにおける最初の空きページまでアクセスするようにされる。オリジナルブロックへのアクセスは、例えばＲＡＭ１３に保持させているＰＢＡテーブルを参照して、書き込み対象のＬＢＡに対応付けられているＰＢＡを取得し、このＰＢＡが示すブロックにアクセスすればよい。
【００９５】
ステップＳ２０３、ステップＳ２０４の処理に続いては、ステップＳ２０５により、現段階において、ステップＳ２０１の要求に応じた全てのデータの書き込みが完了したか否かについて判別することとしており、ここで肯定の判別結果が得られれば、ステップＳ２０１の要求に応じたデータ書き込み処理を終了させる。これに対して、否定の判別結果が得られたのであれば、ステップＳ２０６に進む。
【００９６】
ステップＳ２０６では、現時点において書き込み対象となっているブロック（現書込ブロック）のデータ書き込み状態がfullであるか否かについて、つまり、ブロック内の全てのページがデータ書込済み（使用済み）の状態であるか否かについて判別することとしている。ここで、否定の判別結果が得られたのであれば、現書込ブロックには、空きページが存在することになる。そこで、ステップＳ２１３により、ページ単位でのデータ書き込みを実行し、ステップＳ２０５の判別処理に戻るようにされる。そして、現書込ブロックに空きページが存在しない状態となっていることに応じてステップＳ２０６にて肯定の判別結果が得られたのであれば、ステップＳ２０７に進む。
【００９７】
ステップＳ２０７においては、上記ステップＳ２０６に対応して空きページがない状態であることが認識された現書込ブロックについて、これが追加ブロックとオリジナルブロックの何れであるのかについて判別する。この判別は、これまでのデータ書き込み処理過程の進行状況に応じて判別することが可能であるし、現書込ブロックの実際のＰＢＡと、ＰＢＡテーブル及び追加ブロック管理テーブルを照らし合わせることでも判別可能である。
【００９８】
先ず、ステップＳ２０７において、現書込ブロックが追加ブロックであると判別された場合には、ステップＳ２０８によりマージ処理を実行する。つまり、この段階では、現書込ブロックである追加ブロックと、対応するオリジナルブロックでともに、空きページの存在しない状態となっているので、ステップＳ２０８により、図１１に示したマージ処理、あるいは図１２に示した例外マージ処理を実行し、再構築されたオリジナルブロックを生成するものである。そして、ステップＳ２０５の手順に戻るようにされる。
【００９９】
次にステップＳ２０７において、現書込ブロックがオリジナルブロックであると判別された場合には、ステップＳ２０９〜Ｓ２１２の処理を行う。ステップＳ２０９〜Ｓ２１２の処理は、これまで書き込み対象としていたオリジナルブロックに対応して割り当てるべき追加ブロックを確保するための手順となる。
ステップＳ２０９においては、現段階における追加ブロックの割り当て状況として、使用可能最大数に対応する全ての追加ブロックが、他のオリジナルブロックに割り当て済みとなっているか否かについて判別する。このためには、ＲＡＭ１３に保持されている追加ブロック管理テーブルを参照して、ここに登録されている追加ブロック数が、使用可能最大数（本実施の形態では１０個）以上であるか否かについて判別することとすればよい。
【０１００】
このステップＳ２０９にて、否定の判別結果が得られた場合にはステップＳ２１０、Ｓ２１１をスキップしてステップＳ２１２に進み、ここで、現在未使用となっているブロックのうちから所定規則に従って選択した１つのブロックを追加ブロックとして割り当てるための処理を実行する。つまり、この選択したブロックが新規の追加テーブルとして管理されるように追加ブロック管理テーブルを更新する。このためには、例えばＲＡＭ１３上の追加ブロック管理テーブルに対して、このブロックのＰＢＡと、対応付けられるオリジナルブロックのＬＢＡとを、空き行における先頭に登録することになる。そして、ステップＳ２０５に戻る。なお、この図の処理の流れでは、ステップＳ２１２により新規に作成された追加ブロックに対する最初のデータの書き込みは、ステップＳ２１２から、ステップＳ２０５、Ｓ２０６による否定判別結果を経てステップＳ２１３に至ったときに実行される。
【０１０１】
一方、ステップＳ２０９にて肯定の判別結果が得られた場合には、ステップＳ２１０、Ｓ２１１の手順を実行してからステップＳ２１２に進む。
ステップＳ２１０では、追加ブロック管理テーブルを参照して、最も以前に登録された追加ブロックを探索するようにされる。先に図１０により説明したようにして、追加ブロック管理テーブルにおける登録管理の形態によっては、最も以前に登録された追加ブロックは、登録された追加ブロックのうちで、最も大きい行番号に対して登録されているので、この場合には、追加ブロック管理テーブルにおける最後の行に対して登録されている追加ブロックが、最も以前に登録された追加ブロックとして探索されることになる。
【０１０２】
そして、次のステップＳ２１１においては、上記ステップＳ２１０により探索された追加ブロックと、この追加ブロックが割り当てられているオリジナルブロックとを利用したマージ処理を実行するようにされる。
このステップＳ２１１のマージ処理が実行されることによっては、ステップＳ２１０により探索した追加ブロックの登録が削除されることになる。つまり、この段階で、使用済みとなっている追加ブロック数は、最大数−１（本実施の形態では９個）となり、現書込ブロックとしてのオリジナルブロックに対して追加ブロックを割り当てることが可能になるものである。換言すれば、ステップＳ２１０、ステップＳ２１１の手順は、今回の現書込ブロックに対応する追加ブロックを確保するための手順となるものであり、そのために、オリジナルブロックに割り当て済みの追加ブロックのうちで、最も過去に登録されたものについての割り当てを解放するものである。
【０１０３】
ここで、ステップＳ２１１において、最も過去に登録された追加ブロックを解放することとしているのは次のような理由による。
データ書込要求に応じてデータを書き換えることとなるフラッシュメモリ上の論理的な領域は、分散するのではなく、むしろ集中する傾向にあることが分かっている。ファイルの更新などを例にとってみると、ファイル更新に際しては、更新したファイルのデータの書き込みのほかに、必然的に、ファイルシステムに対応するファイル管理情報などのシステムデータについての更新も行われる。具体的に、ＦＡＴファイルシステムの場合であれば、ＦＡＴ(File Allocation Table)といわれるクラスタチェインによりファイルデータの論理的な連結を管理するテーブル情報と、ディレクトリエントリといわれるディレクトリ構造を管理する情報を書き換えることになる。そして、このようなファイル管理情報は、例えば１ファイルの更新に応じては、そのファイルに対応した内容を記憶している特定の領域が集中して書き換えられることになるわけである。
このようなことから、実際のこととして、追加ブロックは過去に登録されたものほど使用される頻度が少なくなっていくという傾向になり、或る一定数よりも以前の追加ブロックについては、ほとんど使用されないという状況となることが確認されたものである。本実施の形態において、追加ブロック数に制限を与えているのは、上記した事実に鑑みて、いたずらに追加ブロックを多くしても、追記などが行われずに放置に近い状態の追加ブロックが増えるだけであって効率的でない、ということもその理由となっている。
そして、このことからすれば、追加ブロックが不足した場合には、ステップＳ２１０、Ｓ２１１のようにして、最も以前の追加ブロックを解放するという手順とすることが、新規追加ブロックを確保するための最も合理的なアルゴリズムの１つである、ということになるわけである。
【０１０４】
続いては、上記図１５のステップＳ２０８あるいはステップＳ２１１により実行される、マージ処理の手順について、図１６及び図１７を参照して説明する。
マージ処理としては、先ず、図１６のステップＳ３０１として示すように、マージ処理に用いられる追加ブロックの書き込み内容として、ＰＢＡ順に従って書き込まれているページデータは、ＬＰＡ＝0x00からはじまって順次書き込みされているか否かについて判別することとしている。つまり、例えば図１２（ｂ）により説明したような追加ブロックのデータ書き込み内容であるか否かについて判別するものである。
【０１０５】
このステップＳ３０１において肯定の判別結果が得られた場合には、図１２にて説明した例外マージ処理を実行すべきことになる。このために、ステップＳ３０２、Ｓ３０３の手順を実行する。
例えばステップＳ３０２では、これまでの追加ブロックが新規にオリジナルブロックとして管理されるようにする。つまり、ＰＢＡテーブルにおいて、元のオリジナルブロックのＰＢＡが登録されていたＬＢＡへの対応を、これまでの追加ブロックのＰＢＡに変更する。このＰＢＡテーブルの書き換えにより、管理情報のうえで、元のオリジナルブロックは未使用ブロックとして管理されることになる。
次に、ステップＳ３０３により、元のオリジナルブロックを対象としてブロック消去処理を実行して、物理的にも未使用領域とする。
【０１０６】
一方、ステップＳ３０１にて否定の判別結果が得られた場合には、例えば図１１により説明した通常マージ処理を実行する。この通常マージ処理の手順を図１７に示す。
通常マージ処理としては、先ず、図１７のステップＳ４０１として示すように、未使用ブロックとして管理されるブロックのうちからマージブロックに使用するブロックを確保するようにされる。
【０１０７】
次のステップＳ４０２においては、マージ処理に際して、マージブロックの先頭ページに書き込むべき、追記用の書き込みデータが在るか否かについて判別する。この判別は、実質的には、ステップＳ２０８のケースでのマージ処理であるのか、ステップＳ２１１のケースでのマージ処理であるのかの判別にも相当する。
ステップＳ２０８のマージ処理の場合には、図１１（ｃ）に示すようにして、マージブロックの先頭に書き込むべき、追記のためのページデータが用意されている。これに対して、ステップＳ２１１のマージ処理は、追加ブロックを１つ解放することを目的として行われるもので、従って、マージ処理にあっては、マージブロックの先頭ページに書き込むべき追記のデータは無い、マージブロックに対しては、先ず、先頭ページから順次、追加ブロックから探索した有効なページデータが書き込まれていく。
ステップＳ４０２にて肯定の判別結果が得られた場合には、ステップＳ４０３により、追記用の書き込みデータを、マージブロックの先頭ページに対して書き込んだうえで、ステップＳ４０４−１〜Ｓ４０４−２で括られるループ処理を実行する。これに対して、ステップＳ４０２にて否定の判別結果が得られた場合には、ステップＳ４０３をスキップして、ステップＳ４０４−１〜Ｓ４０４−２で括られるループ処理を実行する。
【０１０８】
ループ処理Ｓ４０４−１〜Ｓ４０４−２としては、ページ順（ＰＰＡに対応する）を示す変数ｉについて初期値として６４を設定し、ステップＳ４０５〜Ｓ４０７の手順を実行するごとに変数ｉを１デクリメントしていくようにされる。そして、ｉ＞０となる条件を満たした段階で、このループ処理を終了させる。ここで変数ｉの初期値は、ブロックにおけるページ数に対応する。つまり、ここでは、図１１における例と同様に、ブロック内ページ数が６４である場合を前提としている。
ステップＳ４０５では、追加ブロックにおけるページｉのデータを読み込んで取得する。ステップＳ４０６では、上記ステップＳ４０６により読み込んだページデータの冗長部（予備領域）に格納されるものと同じＬＰＡを格納するページデータが、既にマージブロックに書き込まれているか否かについて判別し、肯定の判別結果が得られれば、このまま次の回のループ処理に進む。これに対して、否定の判別結果が得られたのであれば、ステップＳ４０７によりマージブロックにおける空きページの先頭に対して、ステップＳ４０５により読み込んだデータを書き込み、次回のループ処理に進む。
このループ処理により、図１１にて説明したように、追加ブロックの最終ページから有効ページデータを探索してマージブロックの空きページの先頭に対して順に書き込んでいくという処理が行われていくものであり、ループ処理が完了した段階では、追加ブロックに書き込まれていた全ての有効ページデータがマージブロックに書き込まれていることになる。
【０１０９】
続いては、ループ処理Ｓ４０８−１〜Ｓ４０８−２を実行する。このループ処理としても、変数ｉ＝６４で初期化したうえで、ステップＳ４０９〜Ｓ４１１の処理を実行するごとに変数ｉを１デクリメントしていき、ｉ＞０の条件を満たしたところでループ処理を抜ける。
ステップＳ４０９では、オリジナルブロックにおけるページｉのデータを読み込んで取得する。ステップＳ４１０では、上記ステップＳ４０９により読み込んだページデータの冗長部（予備領域）に格納されるものと同じＬＰＡを格納するページデータが、既にマージブロックに書き込まれているか否かについて判別し、肯定の判別結果が得られれば、このまま次の回のループ処理に進む。これに対して、否定の判別結果が得られたのであれば、ステップＳ４１１によりマージブロックにおける空きページの先頭に対して、ステップＳ４０９により読み込んだデータを書き込み、次回のループ処理に進む。
このループ処理によっては、図１１における、オリジナルブロックの最終ページから有効ページデータを探索してマージブロックの空きページの先頭に対して順に書き込んでいくという処理が行われていくものであり、ループ処理が完了した段階では、オリジナルブロックに書き込まれていた全ての有効ページデータがマージブロックに書き込まれていることになる。そして、この段階において、マージブロックにおけるデータ書き込み内容としては完成した状態が得られたことになる。
【０１１０】
ステップＳ４１２においては、これまでの処理により作成されたマージブロックを、新規にオリジナルブロックとして設定（登録）するために、ＰＢＡテーブルの更新を行う。続いて、ステップＳ４１３により、マージ対象となっていた追加ブロックを、追加ブロック管理テーブルから削除すると共に、追加ブロックに対するブロック消去を行うようにされる。これにより、追加ブロックは、未使用ブロックとなる。また、ステップＳ４１４により、元のオリジナルブロックについてブロック消去の処理を行い、これについても未使用ブロックとする。
【０１１１】
ところで、例えばデータ書き込み中において電源が遮断されるなどしてデータ書き込みが強制的に中断された場合には、フラッシュメモリ上での実際のデータの書き込み結果と、ＰＢＡテーブルなど（本実施の形態では追加ブロック管理テーブルも含まれる）の管理情報の内容とが一致しない不整合の状態が生じ得る。このような不整合の状態が生じたままでは、以降の正常なデータの書き込み、読み出しを期待することができない。そこで、例えばフラッシュメモリのメモリドライバが起動するときなどにおいては、前回のデータ書き込みが正常終了したのか否かについて判定し、正常終了していない場合においては、例えば実際のデータ書き込み結果を検証しながら、管理情報を再構築することが行われる。
図１８は、本実施の形態における再構築処理例を示している。例えばフラッシュメモリドライバが起動時において、前回のデータ書き込みが正常終了していないことを判別したとされると、この図１８に示す手順を実行することになる。なお、前回のデータ書き込みが正常終了したか否かについての判別を可能とするためには、データ書込時において、その処理の進行状況を示す情報を生成して、例えば逐次、フラッシュメモリの所定領域に書き込んでおくようにされる。起動時において、この情報を参照すれば、前回のデータ書き込みが正常終了したか否かを判定できることになる。
【０１１２】
このための処理としては、先ず、ループ処理Ｓ５０１−１〜Ｓ５０１−２を実行する。このループ処理では、ページ順（ＰＰＡに対応する）を示す変数ｉについて初期値として０を設定し、ステップＳ５０２〜Ｓ５０８の手順を実行するごとに変数ｉをインクリメントしていくようにされる。そして、変数ｉが総ブロック数を越えた段階で、このループ処理を終了させる。この場合の変数ｉは、例えば物理ブロックアドレスに対応するものと考えればよい。
ステップＳ５０２は、ブロックの探索処理となるもので、ブロックｉの先頭ページ（PPA＝0）にアクセスして、このページの予備領域に書き込まれているＬＢＡを取得する。ステップＳ５０３では、上記ステップＳ５０２により取得されたのと同じＬＢＡのブロックが、これまでの再構築処理の過程でＰＢＡテーブルに登録済みとなっているか否かについて判別する。つまりＰＢＡテーブルにおいて、ステップＳ５０２により取得されたのと同じＬＢＡに対して、既に他のブロックのＰＢＡが対応付けられているのか否かについて判別する。
【０１１３】
ステップＳ５０３において否定の判別結果が得られた場合には、ステップＳ５０４に進んで、ブロックｉをＰＢＡテーブルに登録する。つまり、ＰＢＡテーブルにおける、ブロックｉのＬＢＡの位置に対して、このブロックｉのＰＢＡを対応させるようにして書き込む。
【０１１４】
ステップＳ５０３において肯定の判別結果が得られた場合には、ステップＳ５０５以降の手順に進む。
ステップＳ５０５においては、ステップＳ５０３により取得したブロックｉのＬＢＡに対応して、既に他のブロックが追加ブロックとして登録済みとなっているか否かについて判別する。このためには、これまでの再構築処理の過程により作成された追加ブロック管理テーブルの内容を参照することになる。
ステップＳ５０５において否定の判別結果が得られた場合には、同じＬＢＡを持つことなるＰＢＡのブロックが２つ存在しており、さしあたり、先に探索された一方のブロックは、オリジナルブロックとして登録されている状態になることになる。しかしながら、同じＬＢＡのブロックがもう１つ探索されたことで、これら２つの何れがオリジナルブロックで追加ブロックであるのかについては、未確定になる。そこで、このことを確定するために、ステップＳ５０６の手順を行う。
ステップＳ５０６では、これら２つのブロックのＳＱＮを比較する。ＳＱＮも、ブロックにおける先頭ページの予備領域に格納されている。図１４にて説明したように、同一ＬＢＡのブロックが２つ存在する状態としては、状態１と状態３とが考えられるが、ステップＳ５０６に至るには、ステップＳ５０５にて追加ブロックは登録されていないことが判定されていることで、さしあたり、マージブロックが存在する可能性は考慮しなくてもよい段階にある。そこで、ステップＳ５０６としては、ＳＱＮを比較してみて、この値が大きいほうのブロックを、追加ブロック管理テーブルに対して追加ブロックとして登録するようにされる。またＳＱＮの小さい方はＰＢＡテーブルに登録してオリジナルブロックとして管理されるようにしておく。
【０１１５】
これに対して、ステップＳ５０５にて肯定の判別結果が得られた場合には、ブロックｉと同じＬＢＡを持つ、異なるＰＢＡのブロックが、既にＰＢＡテーブルに登録されていると共に、追加ブロック管理テーブルにも登録されていることになる。つまり、同じＬＢＡのブロックが３つ存在していることになる。このことは、同一ＬＢＡに対応して、オリジナルブロック、追加ブロックに加えて、マージブロックも残ってしまっている状態でフラッシュメモリ上で存在していることを意味する。つまり、状態２に対応した期間においてデータ書き込みが中断した場合に対応する。
そこでこの場合には、ステップＳ５０７により、これら３つのブロックのＳＱＮを比較し、ＳＱＮの値が最大のブロックについてブロック消去の処理を実行する。つまり、マージブロックを消去する。状態２に対応する期間においてデータ書き込みが中断したということは、図１３からも理解されるように、マージブロックが未完成である可能性が避けられない。そこで、マージブロックについて消去して無効としてしまうようにする。
これにより、同一ＬＢＡのブロックが２つになるので、次のステップＳ５０８により、先のステップＳ５０６と同様にして、ＳＱＮの大きいほうのブロックを追加ブロックとして登録し、小さい方のブロックを、オリジナルブロックとしてＰＢＡテーブルに登録する。
【０１１６】
ループ処理Ｓ５０１−１〜Ｓ５０１−２としては、全てのブロックを探索していきながら、上記ステップＳ５０２〜Ｓ５０８までの手順を繰り返し行うようにされる。そして、ループ処理Ｓ５０１−１〜Ｓ５０１−２が完了した段階では、ひととおり、ＰＢＡテーブルと追加ブロック管理テーブルが再構築された状態となる。
【０１１７】
上記ループ処理Ｓ５０１−１〜Ｓ５０１−２を抜けると、続いては、ループ処理Ｓ５０９−１〜Ｓ５０９−２を実行する。このループ処理は、現段階で追加ブロック管理テーブルに登録されている全ての追加ブロックごとに、ステップＳ５１０〜Ｓ５１４を実行するものとなる。
ステップＳ５１０においては、追加ブロック管理テーブルに登録されている１つの追加ブロックと、これに対応して同じＬＢＡが対応付けられたオリジナルブロックのＳＱＮを取得し、ステップＳ５１２により、このＳＱＮが連続しているか否かについて判別する。なお、ＳＱＮは、図３の例では１バイトとされており、従って、その数値範囲としては０〜２５５となる。シーケンスナンバは、生成順に従ってブロックに対して連番を付していくのであるが、最大値の２５５を付した次には０を付すようにして、循環させて用いるようにされている。従って、ステップＳ５１０においては、ＳＱＮが０、２５５となっている場合にはＳＱＮが連続しているものとして判別するようにされる。
【０１１８】
ステップＳ５１１において、先ず、否定の判別結果が得られた場合には、実際には状態３であるということを意味している。つまり、状態３では、図１４に示すようにして、マージブロックとオリジナルブロックが存在して追加ブロックが消去された結果となって、同一ＬＢＡのブロックごとのＳＱＮは、ＮとＮ＋１とで不連続になるからである。このとき、先のループ処理Ｓ５０１−１〜Ｓ５０１−２によっては、これらのマージブロックとオリジナルブロックとが、それぞれ追加ブロック、オリジナルブロックとして登録されている場合となる。
状態３の場合には、図１３から分かるように、マージブロックは既に完成している。これに対してオリジナルブロックは、マージ前の内容を有している。従って、再構築にあたって、正式なオリジナルブロックとして採用すべきは、マージブロックであることになる。しかしながら、ループ処理Ｓ５０１−１〜Ｓ５０１−２によっては、マージブロックが追加ブロックとして登録され、マージ前のオリジナルブロックがオリジナルブロックとして登録されている状態になっている。そこで、この誤った登録内容を修正するためにステップＳ５１２〜Ｓ５１４を実行する。
先ず、ステップＳ５１２においては、現在において追加ブロックとして登録されているブロックを、オリジナルブロックとして登録し直すためのＰＢＡテーブルの更新を行い、続くステップＳ５１３により、追加ブロック管理テーブルにおけるこのブロックの登録を削除する。さらに、オリジナルブロックとして登録されていたブロックについては、ブロック消去をおこなって未使用状態とする。
【０１１９】
ループ処理Ｓ５０９−１〜Ｓ５０９−２としては、このような処理を、追加ブロック管理テーブルに登録されたブロックごとに行う。そして、このループ処理Ｓ５０９−１〜Ｓ５０９−２が終了した段階では、適正な内容の、ＰＢＡテーブル及び追加ブロック管理テーブルが再構築されていることになる。
【０１２０】
続いては、本実施の形態における変形例について説明する。
これまでの説明にあっては、先ず、オリジナルブロックに空きページが存在する限りは、ここにデータを追記して書き込んでいき、オリジナルブロックの空きページが無くなると、追加ブロックを割り当てて追記を継続させる、ということになっていた。
これに対して、変形例としては、オリジナルブロックにおいて空きページが存在する、しないに関わらず、追記すべきデータが発生したのであれば、追加ブロックを割り当て、この追加ブロックに対するデータの追記を行うように構成するものである。
【０１２１】
この変形例に対応した実際例を図１９に示す。図１９（ａ）には、６４ページからなるオリジナルブロックとして、ページ０、ページ１に対してデータが書き込まれているが、残るページ２〜ページ６３は未使用となっている状態のものが示されている。ここで、図１９（ｂ）に示すようにして、ＬＰＡ＝0x03のページデータを書き込むべきことになったとすると、図１９（ａ）のオリジナルブロックの空きページではなく、図１９（ｃ）に示すようにして、追加ブロックを確保した上で、その先頭ページに対して、ページデータの書き込みを行うようにされる。
なお、この変形例にあっては、オリジナルブロックとして全くページの書き込みが無い（オリジナルページが存在しない）状態においても、ページデータの書き込みは、先ず、追加ブロックとしてのブロックを確保して、このブロックから開始するようにされる。つまり、当初のデータの書き込みは、オリジナルブロックではなく、常に追加ブロックを対象として行われる。データの書き込まれたオリジナルブロックは、追加ブロックに対する書き込みにより空きページが無くなったことに応じてマージ処理が行われることによって生成されることになる。
このことから、変形例としては、オリジナルブロックに対するデータ書き込みは定常的に禁止されているものとして禁止条件を設定しているものとしてみることができる。
【０１２２】
この変形例としての構成では、オリジナルブロックに空き領域が存在するのにもかかわらず追加ブロックを優先的に使用することから、一見、記憶容量の使用効率が良くないようにみえる。しかしながら、実際におけるデータ書き込み態様によっては、このことは特に問題にならなくなる。例えば本実施の形態の携帯型コンテンツプレーヤなどでもそうであるように、ブロックに対して空き領域が存在するような書き込み結果となることは稀で、ほとんどの場合、ブロック内の全ページが使用されるような状態でデータの書き込みは行われる。こうしてみると、データ書き込みの発生に応じては、即座に追加ブロックを作成することが通常であり、オリジナルブロックに対して空き領域が存在するような状態のほうが例外的であるということになる。このようなことを考慮すると、変形例に応じたデータ書き込みのアルゴリズムを採用しても特に問題はないものであり、かえって効率的になってくる場合があると考えられる。例えば、先の実施の形態に応じたデータ書き込みでは、データ書込要求に応じたデータ書き込み対象が、オリジナルブロックと追加ブロックの２つとなるので、例えばプログラムなどの実際の部分では、これに対応した設計を行う必要がある。これに対して、変形例に応じたデータ書き込みでは、新規なデータの書き込みは、常に、追記ブロックのみを対象とすればよい。このような差違が、例えばより簡易なプログラムの構造になるなどの利点になってくる。
【０１２３】
図２０は、上記図１９により説明した変形例に対応したデータ書き込みのための手順をフローチャートとして示している。なお、この図において、図１７と同じ処理内容のステップについては、適宜、その対応を示していくとともに説明を省略する。
ステップＳ６０１、Ｓ６０２については、図１７のステップＳ２０１，Ｓ２０２と同様にして、データ書き込み要求に応じたデータ書き込み処理として、先ず、書き込み対象のＬＢＡに対して追加ブロックが作成済み（割当済み）となっているか否かについて判別する。そして、肯定の判別結果が得られた場合には、ステップＳ６０８に進む。これに対して、否定の判別結果が得られた場合には、ステップＳステップＳ６０４以降の手順を行う。
【０１２４】
ステップＳ６０４〜Ｓ６０７は、図１５におけるステップＳ２０９〜Ｓ２１２の手順と同じになるものである。つまり、追加ブロックの割り当ての処理を実行する。変形例では、オリジナルブロックに対する追記を行わないことから、ステップＳ６０２により追加ブロックが割り当てられていなければ、まずは、追加ブロックの割り当てを行うことになるものである。ステップＳ６０４〜Ｓ６０７の手順を完了すると、ステップＳ６０８に進む。
【０１２５】
ステップＳ６０８では、図１７のステップＳ２０５と同様に、今回のデータ書込要求に応じた全てのデータの書き込みが完了したか否かについて判別し、肯定の判別結果が得られれば、今回のデータ書き込み処理を終了させる。否定の判別結果が得られたのであれば、ステップＳ６０９、Ｓ６１１により、現書込ブロック（変形例では追加ブロック）のデータ書き込み状態がfullとなることが判別されるまで、ＰＢＡ順によるページ単位でのデータ書込が繰り返されていく。そして、追加ブロックの最終ページまで書き込みが実行され、かつ、未だデータ書込が終了していなければ、ステップＳ６１０によりマージ処理を実行することになる。変形例では、ステップＳ６０９により肯定の判別結果が得られるのは、追加ブロックがfullとなる場合のみであり、オリジナルブロックがfullとなることはない。従って、ステップＳ６１０のマージ処理を行うのにあたっては、これまでの現書込ブロックがオリジナルブロックであるのか、マージブロックであるのかを判定しておく必要がない。そして、ステップＳ６１１によるマージ処理が完了して、新規にオリジナルブロックが作成されたとすると、ステップＳ６０４以降の処理に戻るようにされる。これにより、新規に作成されたオリジナルブロックに対して追加ブロックが割り当てられ、この追加ブロックに対するデータの追記を行っていくことが可能になる。
なお、ステップＳ２０８、Ｓ２１１のマージ処理については、先に説明した図１６、図１７と同様でよいものとされる。
【０１２６】
続いては、本実施の形態のデータ書き込みに対応する、データ読み出しの手順例について、図２１のフローチャートを参照して説明する。この図には、１つのブロックデータを読み出す場合の手順例を示している。また、この場合においても、１ブロックは６４ページから成る場合を例に挙げている。
【０１２７】
ブロックデータ読み出しのためには、先ず、ステップＳ７０１により、読み出し対象としているブロックデータのＬＢＡに対応して、オリジナルブロックに対して追加ブロックが割り当てられた状態であるか否かについて判別する。
先ず、ステップＳ７０１にて肯定の判別結果が得られた場合には、ループ処理Ｓ７０２−１〜Ｓ７０２−２を実行する。ループ処理Ｓ７０２−１〜Ｓ７０２−２は、ページ順（ＰＰＡに対応する）を示す変数ｉについて初期値として６４を設定し、ステップＳ７０３〜Ｓ７０５の手順を実行するごとに変数ｉを１デクリメントしていくようにされる。そして、ｉ＞０となる条件を満たした段階で、このループ処理を終了させる。
ステップＳ７０３では、追加ブロックにおけるページｉのデータを読み込んで取得する。ステップＳ７０４では、上記ステップＳ７０３により取得したページデータの冗長部（予備領域）に格納されるものと同じＬＰＡを格納するページデータが、既に有効読出データとして保持されているか否かについて判別し、肯定の判別結果が得られれば、このまま次の回のループ処理に進む。これに対して、否定の判別結果が得られたのであれば、ステップＳ７０５により、ステップＳ７０３により読み込んだデータを有効読出データとしてＲＡＭ上で保持して、次回のループ処理に進む。
つまり、ループ処理Ｓ７０２−１〜Ｓ７０２−２は、追加ブロックの最終ページから先頭ページにかけて、読出データとして有効なページデータ（有効読出データ）を探索し、これをＲＡＭ上で保持させていく処理となる。
【０１２８】
上記ループ処理Ｓ７０２−１〜Ｓ７０２−２の手順を終了した後は、ループ処理Ｓ７０６−１〜Ｓ７０６−２を実行する。ループ処理Ｓ７０６−１〜Ｓ７０６−２も、ページ順を示す変数ｉについて初期値として６４を設定し、ｉ＞０となる条件を満たすまで、ステップＳ７０７〜Ｓ７１０を実行するごとに変数ｉを１デクリメントしていく手順を繰り返すようにされる。
ステップＳ７０７では、オリジナルブロックにおけるページｉのデータを読み込んで取得し、次のステップＳ７０８により、上記ステップＳ７０７により取得したページデータの冗長部（予備領域）に格納されるものと同じＬＰＡを格納するページデータが、既に有効読出データとして保持されているか否かについて判別し、肯定の判別結果が得られれば、さらにステップＳ７１０により、現在の有効読出データ数がブロック内ページ数の６４となったか否かについて判別する。ここで否定結果が得られたのであれば、次の回のループに進むが、肯定の判別結果が得られた場合には、ブロックを形成する全ての有効読出データをＲＡＭに保持させたことになるので、ループ処理Ｓ７０６−１〜Ｓ７０６−２を抜ける。
このようにして、ループ処理Ｓ７０６−１〜Ｓ７０６−２を抜けた段階では、オリジナルブロックから全ての有効読出データが探索され、これがＲＡＭ上で保持されることになる。
【０１２９】
ステップＳ７１１に至った段階では、追加ブロックとオリジナルブロック、あるいは、オリジナルブロックのみから読み出された全ての有効読出データが保持されている状態にある。
ステップＳ７１１では、ＲＡＭ上に保持されている有効読出データについてＬＢＡ順に配列させる処理を行う。つまり、有効読出データは、ページデータの構造とされてデータ部と冗長部からなり、さらにページデータごとの冗長部の予備領域にはＬＰＡが格納されている。ステップＳ７１１では、この予備領域のＬＰＡを参照して、先ず、ＬＰＡの値の一番小さい有効読出データ（ページデータ）のデータ部を抜き出して先頭に配置し、続いて、次に大きい値のＬＢＡを格納する有効読出データのデータ部を抜き出して、先頭に続けて配置する。この手順を、全ての有効読出データについて行っていくようにされる。この結果、論理的に正常に配列された１ブロック分の読出データ（ブロック読出データ）が形成されることになる。
【０１３０】
また、ステップＳ７０１にて追加ブロックの割り当ては無く、オリジナルブロックのみであるとして否定の判別結果が得られた場合にはステップＳ７１２に進む。
ステップＳ７１２では、オリジナルブロック内のページデータに格納されるＬＰＡを参照することで、このオリジナルブロックは、ＰＰＡ＝０（0x00）〜６３（0x3F）の昇順に応じて、ＬＰＡ＝０（0x00）〜６３（0x3F）の順で書き込まれた状態となっているか否かについて判別する。
ステップＳ７１２により否定の判別結果が得られた場合には、オリジナルブロック内のページデータは、ＬＰＡ順に従って書き込まれていないことになるので、ステップＳ７０６−１〜Ｓ７０６−２のループ処理に移行することで、有効読出データを探索して取得することになる。
これに対してステップＳ７１２により肯定の判別結果が得られた場合には、ステップＳ７１３により、オリジナルブロックからＰＰＡ順に従ってページデータの読み出しを行って、そのデータ部を読み出し順に従って配列させていくことで、ブロック読出データを形成する。
そして、ステップＳ７１４により、上記ステップＳ７１３、あるいはステップＳ７１１により形成されたブロック読出データを、例えば上位処理層に対して受け渡すようにされる。
【０１３１】
ここで参考として、図２２に、本実施の形態と従来のデータ書き込み速度の測定結果を示しておく。この図では、縦軸に書き込み時間を示し、横軸に書き込みを行ったファイルのデータサイズ（ファイルサイズ）を示している。そして、図において下側の曲線が本実施の形態に対応する特性を示しており、上側の曲線が従来に対応する特性を示している。なお、ここでは、実施の形態のデータ書き込み処理として変形例を採用した場合の測定結果を示しているが、先に説明した実施の形態のデータ書き込み処理についても、同等の測定結果が得られる。また、従来のデータ書き込み処理とは、図４及び図５により説明したような、データ更新のためにブロック交替処理を伴うものである。
この図から分かるように、同じファイルサイズに対するデータ書き込み処理時間は、本実施の形態のほうが短くなっている。つまり、データ書き込みの高速化が図られているものである。そして、本実施の形態によっては、特に、ファイルサイズが小さくなるほど、その効果が顕著になっている。
例えば従来では、先にも説明したように、ブロック交替処理を伴うことで、書き込みデータサイズが小さいほど、データ書き込み時においてブロック消去時間の占める割合が非常に高くなる。このために、特性としても、ファイルサイズが１０００００バイトあたりより小さくなると、これ以上データ書き込み時間が短くならずに、約０．１２秒でとどまってしまっている。
これに対して、本実施の形態の特性では、特に、ファイルサイズが小さいときのデータ書き込み時間が大幅に短縮されていることが分かる。例えば矢印Ａにより示されている位置では、本実施の形態のデータ書き込み時間は、従来に対して１／１０程度にまで短縮されているものである。このことから、本実施の形態のデータ書き込みを実際に採用した場合には、例えば小さいファイルを書き込む場合や、ファイルシステムなどのシステム情報などのサイズの小さいデータを書き換えるような場合において、その書き込み時間の短縮効果が非常に有効にはたらくということがいえる。
【０１３２】
なお、本願発明としては、これまでに説明した実施の形態としての構成に限定されるものではない。
例えば、実施の形態としては、コンテンツファイル、プログラムなどを記憶させるための記憶媒体としてフラッシュメモリを備える携帯型コンテンツプレーヤに、本願発明を適用しているが、これ以外のフラッシュメモリを備える電子機器、装置全般に適用することができる。現状であれば、例えばフラッシュメモリにより構成される各種リムーバブル形式の記憶装置や、ＵＳＢメモリなどといわれる、ＵＳＢ（Universal Serial Bus）端子に差し込むようにして使用する、フラッシュメモリを内蔵した記憶装置などが考えられる。
また、例えば将来的にフラッシュメモリ以外で、同様のブロック、ページ構造のフォーマットをとるような半導体メモリ装置が現れたような場合にも、これらの半導体メモリ装置に対して本願発明を適用できる。
【図面の簡単な説明】
【０１３３】
【図１】本発明の実施の形態としての記憶媒体制御装置が適用される携帯型コンテンツプレーヤの構成例を示すブロック図である。
【図２】フラッシュメモリの物理構造を示す図である。
【図３】ページの構造を示す図である。
【図４】フラッシュメモリに対するデータ更新処理（ブロック交替処理）と、論理アドレス及び物理アドレスの概念を示す図である。
【図５】ブロック交替処理時におけるページ単位のデータ書き込み動作例を示す図である。
【図６】論理−物理アドレス変換テーブル（ＰＢＡテーブル）の構造を概念的に示す図である。
【図７】実施の形態としてのページ単位でのデータ書き込み動作を示す図である。
【図８】図７に示したデータ書き込み動作に応じた論理ページアドレスの割り当て方を示す図である。
【図９】実施の形態における追加ブロックに対するデータ書き込み処理例を示す図である。
【図１０】追加ブロック管理テーブルの構造例を示す図である。
【図１１】実施の形態におけるマージ処理の具体例を示す図である。
【図１２】例外のマージ処理の具体例を示す図である。
【図１３】マージ処理の具体的手順と、ブロック形成の状態例との対応を示す図である。
【図１４】図１３に示したブロック形成の状態を、ブロックの存在状況と、ブロックが格納する連番（ＳＱＮ）の付与状況とにより示す図である。
【図１５】実施の形態のデータ書き込み処理の手順例を示すフローチャートである。
【図１６】実施の形態のマージ処理の手順例を示すフローチャートである。
【図１７】実施の形態における通常マージ処理のための手順例を示す図である。
【図１８】実施の形態のＰＢＡテーブルと追加ブロック管理テーブルの再構築処理のための手順例を示すフローチャートである。
【図１９】本実施の形態のデータ書き込み処理の変形例を示す図である。
【図２０】実施の形態の変形例に応じたデータ書き込み処理の手順例を示すフローチャートである。
【図２１】実施の形態に対応したデータ読出処理の手順例を示すフローチャートである。
【図２２】実施の形態と従来のデータ書き込み時間についての測定結果を示す図である。
【符号の説明】
【０１３４】
１  携帯型コンテンツプレーヤ、１１  制御部、１２  ＲＯＭ、１３  ＲＡＭ、１４  記憶部、１５  オーディオ再生処理部、１６  ヘッドフォン端子、１７  表示処理部、１８  表示部、１９  操作部、２０  外部データインターフェイス
【図１】
2007280108.tif 000003
【図２】
2007280108.tif 000004
【図３】
2007280108.tif 000005
【図４】
2007280108.tif 000006
【図５】
2007280108.tif 000007
【図６】
2007280108.tif 000008
【図７】
2007280108.tif 000009
【図８】
2007280108.tif 000010
【図９】
2007280108.tif 000011
【図１０】
2007280108.tif 000012
【図１１】
2007280108.tif 000013
【図１２】
2007280108.tif 000014
【図１３】
2007280108.tif 000015
【図１４】
2007280108.tif 000016
【図１５】
2007280108.tif 000017
【図１６】
2007280108.tif 000018
【図１７】
2007280108.tif 000019
【図１８】
2007280108.tif 000020
【図１９】
2007280108.tif 000021
【図２０】
2007280108.tif 000022
【図２１】
2007280108.tif 000023
【図２２】
2007280108.tif 000024