JP2007280108A - 記憶媒体制御装置、記憶媒体制御方法、プログラム - Google Patents

記憶媒体制御装置、記憶媒体制御方法、プログラム Download PDF

Info

Publication number
JP2007280108A
JP2007280108A JP2006106426A JP2006106426A JP2007280108A JP 2007280108 A JP2007280108 A JP 2007280108A JP 2006106426 A JP2006106426 A JP 2006106426A JP 2006106426 A JP2006106426 A JP 2006106426A JP 2007280108 A JP2007280108 A JP 2007280108A
Authority
JP
Japan
Prior art keywords
data
unit area
block
writing
page
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.)
Pending
Application number
JP2006106426A
Other languages
English (en)
Inventor
Kenji Irie
健志 入江
Hideji Obayashi
秀次 大林
Kenichi Iida
健一 飯田
Hidetoshi Torii
秀年 鳥居
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 Corp
Original Assignee
Sony Corp
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 Corp filed Critical Sony Corp
Priority to JP2006106426A priority Critical patent/JP2007280108A/ja
Publication of JP2007280108A publication Critical patent/JP2007280108A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Memory System (AREA)
  • Read Only Memory (AREA)

Abstract

【課題】フラッシュメモリのデータ書き込みの高速化を図る。
【解決手段】データ書き込みにあっては、ブロック交替を行わずに、書き込むべきデータをページ単位で追記していく。これとともに、ページデータの論理的な位置が分かるように、論理ページアドレスを定義して、ページデータごとに格納しておく。そして、元のブロックの空きページが無くなった場合には、この元のブロック(オリジナルブロック)と同じLBAを付した追加ブロックを作成し、この追加ブロックに対してページ単位による追記を行っていくようにする。追加ブロックにはオリジナルブロックと同じLBAを持たせる。このような構成により、例えばページデータを書き込むごとにブロック交替処理を行う必要が無くなる。
【選択図】図9

Description

本発明は、例えばフラッシュメモリに代表される不揮発性メモリ素子などとしての記憶媒体を対象として、データ書き込み/読み出しなどについての制御を行う記憶媒体制御装置、及びその方法と、このような装置が実行すべきプログラムに関するものである。
近年では、不揮発性の半導体記憶素子が記憶媒体として広い用途で利用されるようになってきている状況にある。このような半導体記憶素子の記憶媒体としては、フラッシュメモリが代表的なものとなる。
周知のようにして、フラッシュメモリは、その特性上、データの上書きは不可であり、消去されている状態から書き込みを行うことが要求される。また、データの消去は、フラッシュメモリとしての記憶領域を所定サイズに分割したブロックといわれる物理的な記憶領域単位を最小単位として行われ、データの書き込みは、ブロックをさらに所定サイズに分割したページといわれる記憶領域単位を最小単位として行われる。さらに、1ブロック内におけるページに対する書き込みは、例えば先頭ページからのアドレス(物理ページアドレス)順に従った書き込みのみに制限され、例えば、アドレスを飛び越したランダムアクセス的な書き込みはできないこととなっている。このために、データの書き込み(更新)は次のようにして行われる。
実際にデータの更新を行うときには、例えば、更新対象のデータが書き込み済みとなっているブロックからデータを例えばRAM上などに読み出して、この読み出したデータと更新のための追加データなどを利用して更新されたデータを生成する。そして、この段階で消去済みとなっている他の特定ブロックに対して、この更新されたデータをページ単位でアドレス順に従って順次書き込んでいくようにされる。そのうえで、上記更新対象のデータが書き込まれていたブロックについては、データを消去するようにされる。
つまり、データを更新するときには、更新前のデータが書き込まれていたブロックに再度書き込むことはせずに、他の消去状態にあるブロックを選択して書き込みを行うようにされる(ブロック交替処理)。
上記のようにしてブロック交替処理が行われることで、ページに対するランダムアクセスが不可とされる制限の問題を回避して、例えばデータを書き込み済みのブロックにおける途中の一部ページのデータを更新することが可能となる。このために、上記のようなブロック交替処理は、フラッシュメモリを記憶媒体として使用するのにあたっての基本的な仕様となっている。
しかしながら、上記のブロック交替処理は、別の見方をすれば、たとえ更新が必要なデータが1ページ分のみであるとしても、ブロック単位のサイズのデータの書き込み処理と、同じくブロック単位のデータ消去の処理とを必ず実行している、ということになる。このことが、フラッシュメモリにおけるデータ書き込み速度を低下させるおおきな要因として以前から問題になっていた。
そこで、フラッシュメモリを対象としたときのデータ書き込み速度の向上を図るための構成が以前より提案されている。例えば特許文献1には、ページデータの書き込み要求に応じては、ブロックに対して物理ページアドレス順に従って順次書き込みを実行していくようにしたうえで、論理的なデータの連続性は、ページデータごとに論理ページアドレスを付与することで保証できるようにした構成が記載されている。
特開2004−252746号公報
本願発明としても、例えば上記した要因によるデータ書き込み速度の低下の問題を解決して、データ書き込みの高速化が図られるようにすることを目的とするものであり、そのうえで、さらに、より顕著な効果を得るとともに、この効果を得るための構成がより効率的なものとなるようにすることを目指す。
そこで本発明は上記した課題を考慮して、記憶媒体制御装置として次のように構成する。
つまり、記憶媒体の記憶領域を所定の固定長により区切るようにして形成されるデータ消去の最小単位となる第1単位領域の物理アドレスである第1物理アドレスと、この第1単位領域に書き込まれるデータ内容に対応付けられる論理アドレスである第1論理アドレスとの対応を示すアドレス対応情報を管理するアドレス対応情報管理手段と、第1単位領域を所定の固定長により区切るようにして形成されるデータ書き込みの最小単位となる第2単位領域の物理アドレスである第2物理アドレスの順に従ってデータを書き込んでいく書き込み処理と、第2単位領域に書き込まれたデータごとについて、第2単位領域に書き込まれるデータ内容に対応付けられる論理アドレスである第2論理アドレスを対応付けておくようにするアドレス設定処理とを実行するデータ書き込み実行手段と、このデータ書き込み実行手段によりデータ書き込みを実行すべきときにおいて、データが書き込まれるべき本来の第1単位領域についてのデータの書き込みが禁止となる所定の条件を満たしている場合には、未使用の第1単位領域を追加用第1単位領域として確保して、この追加用第1単位領域に対してデータ書き込み実行手段によるデータ書き込みを実行させるデータ書き込み制御手段と、追加用第1単位領域について、対応する本来の第1単位領域と同じ第1論理アドレスが対応付けられて管理されるようにする追加用第1単位領域管理手段とを備えることとした。
上記構成では、本発明の記憶媒体制御装置が対応する記憶媒体は、記憶領域が第1単位領域に区分され、第1単位領域はさらに第2単位領域により区分された物理構造を有するものとされている。第1単位領域が消去の最小単位であるのに対して、第2単位領域は書き込みの最小単位となる。
そのうえで、第1単位領域については物理アドレスを対応させたうえで、第1単位領域に書き込まれるべきデータに対応付けられる論理アドレスを規定して、この論理アドレスと物理アドレスとの対応を示す論理−物理アドレス対応情報を構築して管理しておくようにされる。
また、データの書き込みについては、第2単位領域ごとに実行可能とされており、その手順としては、第2単位領域に対応する第2物理アドレスの順に従って書き込みを行っていくようにされる。このことは、更新のためのデータを書き込むような状況では、更新前のデータが第2物理アドレス順的に前の第2単位領域において残っているとしても、更新のためのデータが未使用の第2単位領域に書き込まれる結果となることを意味している。
そして、本願発明にあっては、データが書き込まれるべき本来の第1単位領域についてのデータの書き込みが禁止である場合には、未使用の第1単位領域を追加用第1単位領域として確保して、この追加用第1単位領域に対して、本来の第1単位領域に書き込むべきであったデータを書き込んでいくようにされる。そして、このようにして作成された追加用第1単位領域については、対応する本来の第1単位領域と同じ第1論理アドレスが対応付けられるようにされる。
このような構成によれば、先ず、本来の第1単位領域において未使用の第2単位領域が存在する限りは、この領域に対してデータを追加するようにして書き込んでいくことができる。換言すれば、例えば第2単位領域1つ分のデータを書き込むために、第1単位領域そのものを対象とするデータ消去とデータ書き込みを行う必要がない。そのうえで、本来の第1単位領域に対してデータを書き込むことができない(禁止)状況である場合には、追加用第1単位領域に対してデータ記録を行っていくことができる。このことは、本来であれば1つの第1単位領域を対象とするデータ書き込みに対応して、「本来の第1単位領域」と、「必要数の追加用第1単位領域」の領域とを併せて得られる領域が使用可能になる、ということを意味している。
上記のようにして、本願発明では、第2単位領域ごとにデータを順次書き込んでいくことが可能とされて、その都度、第1単位領域のデータ消去とデータ書き込みを実行する必要がなくなるようにされたうえで、追加用第1単位領域が設けられた分、第2単位領域ごとにデータを順次書き込み可能な領域が拡大されることになるものである。これにより、第2単位領域分のデータの書き込みに応じては、第1単位領域そのものを対象とするデータ消去とデータ書き込みが発生することが無くなることとなって、その分、記憶媒体へのデータ書き込み速度は、大幅に向上することになる。
本願発明を実施するための最良の形態(以下、実施の形態という)としては、本発明に基づいた記憶媒体制御装置の構成を携帯型コンテンツプレーヤに適用した例を挙げることとする。
図1は、本実施の形態の携帯型コンテンツプレーヤ1の構成例を示すブロック図である。
この図において、制御部11は、携帯型コンテンツプレーヤ1における各種制御を実行する部位とされる。この制御部11の実際的なハードウェア構成としては、例えばCPU(Central Processing Unit)から成るものとされる。つまり、制御部11としてのCPUは、後述する記憶部14(あるいはROM12であってもよい)に記憶されたプログラムを、例えばRAM13に展開して実行することで、所要の各種の制御処理を実現することになる。
ROM12には、例えば起動時に制御部11が実行する起動用プログラムなどのほか、工場出荷時に書き込みが行われた各種の設定データなどが記憶される。
RAM13は、上記のようにして制御部11が実行すべきプログラムのデータが展開されるとともに、制御部11がプログラムに従って実行する各種演算のための作業領域として使用される。
記憶部14は、主として、携帯型コンテンツプレーヤ1により再生出力するコンテンツのデータ(コンテンツデータ)を例えばファイル単位で管理するようにして記憶するための部位である。ここでいうコンテンツデータとは、例えば楽曲などとしてのオーディオデータや、映像などとしてのビデオデータなどとされる。現状において、このような携帯型コンテンツプレーヤ1に記憶されるコンテンツデータとしてのオーディオファイルやビデオデータファイルは、所定方式により圧縮符号化されることが一般的であるが、本実施の形態としては、コンテンツ記憶部13に記憶されるコンテンツデータの種類、ファイル形式については特に限定されるものではない。
また、本実施の形態では、この記憶部14に対して制御部11が実行するプログラムのデータと、例えば記憶部14に記憶されるファイル管理などのために制御部11が利用する各種のシステムデータなども記憶させることとしている。
そして、本実施の形態においては、この記憶部14が備える記憶媒体としてフラッシュメモリ(例えばNAND型)を採用することとしている。フラッシュメモリは、周知のようにして、半導体による不揮発性の記憶素子の1つである。また、フラッシュメモリの容量としては、このような携帯型コンテンツプレーヤ1の用途であれば、現状では、数GB程度までのものが広く採用されている。
また、この場合の記憶部14としてのフラッシュメモリは、装脱不可の状態で携帯型コンテンツプレーヤ1の本体に内蔵される形態を採ることとしている。しかしながら、例えば記憶部14としてのフラッシュメモリとしての記憶媒体装置をリムーバブル形式としたうえで、携帯型コンテンツプレーヤ1の本体側に対応のドライブを備えるような構成であってもよい。このような構成の場合には、プログラムなどのデータは、携帯型コンテンツプレーヤ1内のROMや不揮発性メモリに記憶させることになる。
オーディオ再生処理部15は、制御部11の制御に応じて、記憶部14から読み出されたオーディオファイル形式のコンテンツデータを入力し、所要の再生信号処理を実行するようにされる。例えばオーディオ再生処理部15は、オーディオデータの圧縮符号化に対する復調処理などをはじめとする各種所要の信号処理を施したうえで、最終的に、ヘッドフォン駆動のためのオーディオ信号として、ヘッドフォン端子16に対して出力するようにされる。
また、表示部18には、携帯型コンテンツプレーヤ1の動作に応じたユーザインターフェイスのための表示が行われる。また。例えばビデオデータファイルとしてのコンテンツデータを再生して得られる画像を表示出力させることも可能とされる。このような表示のために、制御部11は、表示処理部17により所要の表示のための信号処理を実行させる。例えばユーザインターフェイスのための画像を表示させるのであれば、表示させるべきユーザインターフェイス画像に対応した表示用画像データを生成する。また、ビデオデータファイルとしてのコンテンツの画像を表示出力させるのであれば、制御部11は、記憶部14から読み出したビデオデータファイルを表示処理部17に入力させ、ここで、圧縮符号化に対する復調処理のほか所要のビデオ信号処理を実行させて、表示用画像データを生成する。そして、表示部18において、このようにして生成された表示用画像データを利用した表示駆動のための動作が実行されることで、表示部18の表示画面にて画像が表示される。
なお、表示部18として実際に採用されるべき表示デバイスについては特に限定されるべきものではないが、現状であれば、液晶ディスプレイや有機ELディスプレイなどを採用することができる。
操作部19は、携帯型コンテンツプレーヤ1の本体に対して実際に設けられる操作子と、これらの操作子に対して行われた操作に応じて操作指示信号を生成して制御部11に出力する部位とを一括して示したものとなる。制御部11は、操作部19から出力される操作指示信号に応じて所要の処理を実行する。
また、本実施の形態の携帯型コンテンツプレーヤ1にあって、記憶部14に記憶させるべきコンテンツデータを取得するためには、外部データインターフェイス20を利用する。
つまり、携帯型コンテンツプレーヤ1と、そのホストとなるパーソナルコンピュータなどの装置とを、外部データインターフェイス20を経由して接続し、コンテンツデータをホストから携帯型コンテンツプレーヤ1に転送させるようにする。そして、携帯型コンテンツプレーヤ1では、例えば制御部11の制御に従って、転送されてくるコンテンツデータを受信取得し、この取得したコンテンツデータを、記憶部14に書き込むようにして記憶させる。
この場合の外部データインターフェイス20は、所定のデータ通信規格に応じたケーブル接続を介して、あるいは無線経由により外部デバイスと通信を行うためのハードウェア及びソフトウェアを備えて構成される部位とされる。この外部データインターフェイス20が対応する通信規格としては、特に限定されるべきではないが、現状であれば、例えばIEEE1394、USB、Ethernet(登録商標)、Bluetooth(登録商標)、IEEE802.11a/b/g/n等を採用することが考えられる。
続いて、図2を参照して、記憶部14における記憶媒体に採用されるフラッシュメモリの物理フォーマットについて説明する。
フラッシュメモリの記憶領域全体は、例えば図2(a)に示すようにして、所定の固定長によるブロック(第1単位領域)0〜Nにより分割される。周知のようにして、フラッシュメモリは、データの上書きはできないことになっており、データの書き込みは、消去済みの領域に対して行われる。そして、このブロックは、データを消去するときの最小単位となる。
また、この図2(a)にはブロックごとに対応してブロックアドレス(物理ブロックアドレス)が示されている。
そして、図2(a)に示したブロックの各々は、図2(b)に示すようにして、所定数(m個)のページ0〜mにより分割される。
1ページは固定長であり、図2(c)に示すように、所定サイズのデータ部と冗長部より成る。データ部はデータを格納する領域であり、冗長部は、ECC(Error Correcting Code)及び各種の所要の管理情報項目などが格納される領域となる。
データ書き込みについては、ページが最小単位となる。つまり、フラッシュメモリは、データの消去はブロック単位で行われ、データの書き込みはページ単位で行われるべきものとなっており、データ消去単位とデータ書込単位のデータサイズが相互に異なるものとなっている。
上記図2(c)に示したページ構造についての、より具体的な例を、図3に示す。
先ず図3(a)に示されるページ構造としては、2048バイトのデータ部と、これに続く64バイトの冗長部から成るものとされている。そして、64バイトの冗長部については、さらに、22バイトの予備領域と、これに続く40バイトのECCにより形成されるものとなっている。このECCにより、上記2048バイトのデータ部と冗長部における22バイトの予備領域のデータについてのエラー訂正処理を行う。
また、本実施の形態においては、予備領域における所定のバイト位置に対して、LPA(1バイト)、LBA(2バイト)、SQN(1バイト)、及びCNTF(1バイト)を配置して格納することとしている。
LPA(Logical Page Address)は、現ページに対応付けられた論理ページアドレスを示すもので、ブロック内に形成されるページごとにおいて有効な値が格納される。なお、論理ページアドレスがどのような意義のものであるのかについては後述する。
LBA(Logical Block Address)は、現ページを含むブロックに対応付けられた論理ブロックアドレスを示すもので、有効な値を格納するのは、ブロック内における先頭ページのみでよい。この論理ブロックアドレスの意義についても後述する。
また、本実施の形態では、後述するようにしてオリジナルブロックに対応して追加ブロックが作成され、さらにマージブロックが作成される可能性があり、これらのブロックに対しては同一のLBAが付される。さらにこれらのブロックに対しては、作成順に応じた連番であるSQN(Sequence Number)が付される。
ページにおけるSQN(Sequence Number)の領域には、現ページを含むブロックに対応付けられたSQNの値を格納する。このSQNとしての有効な値が格納されるべきページとしては、先頭ページのみでよい。
CNTF(Continue Flag)は、現ページを含むブロックのデータ書き込み結果として、そのデータ内容が、物理ページアドレス順に従って配列されている状態にあるか否かを示すフラグとされる。データ内容が物理ページアドレス順に従って配列された状態となる書き込み結果は、例えば一回のデータ書き込み要求に応じた書込データのサイズが一定以上とされていたことで、ブロックの先頭ページから最終ページまで連続して書き込みが行われたような場合に得られる。
また、ページ構造としては、近年、図3(b)に示すフォーマットが採用されるようになってきている。
この図3(b)に示されるページ構造としては、ページ全体としてのサイズは2112バイトで図3(a)と同じであるが、計2048バイトのデータ部を第1〜第4データ部に等分割して各512バイトとするとともに、計64バイトの冗長部についても第1〜第4冗長部に等分割して各16バイトとしたうえで、第1〜第4データ部の各々に続けて、第1〜第4冗長部を連結させるようにして形成したものである。
この場合、第1〜第4冗長部の各々は、図示するようにして、6バイトの予備領域と10バイトのECCの領域とにより形成されることになる。そして、この10バイトのECCにより、お案じ冗長部における先頭から直前までのデータについてのエラー訂正を行う。つまり、例えば第1冗長部のECCによっては、第1データ部及び第1冗長部の予備領域についてのエラー訂正を行う。
また、本実施の形態としては、この図3(b)のフォーマットにあっても、冗長部の予備領域に対しては、LPA、LBA、SQN、及びCNTFをそれぞれ所定のバイト位置に配置して格納することとしている。
なお、先の図3(a)での説明から理解されるように、LPA、LBA、SQN、CNTFについては、しかるべきページにおいて格納されていればよい。従って、図3(b)のようにして、ページ内において4つの予備領域が形成されることとなる場合には、これら4つの予備領域のうちの特定の1つの予備領域に対してのみLPA、LBA、SQN、CNTFの有効な値を格納することとしても特に支障はない。ただし、例えば、複数の予備領域に対してLPA、LBA、SQN、CNTFの有効な値を格納してもよく、この場合には、LPA、LBA、SQN、CNTFがページ内にて多重書きされることになるので、信頼性向上が期待できる。
また、冗長部の予備領域に対して書き込むべきデータが異なる場合には、その分書き込み速度の低下を招く可能性があるが、上記のようにして、複数の予備領域に対してLPA、LBA、SQN、CNTFの有効な値を格納するということは、これらの予備領域に対して書き込むデータ内容については同じとすることが可能であり、従って、上記のような書き込み速度の低下の問題を改善、あるいは解消することができる。
フラッシュメモリの物理フォーマットとして以前から規定される基本的なページ構造は図3(a)に示したものとなるのであるが、現状においては、図3(b)のフォーマットが採用されることが多くなってきている。これは下記のような理由による。
フラッシュメモリは例えばビット単価の低下などを背景として記憶容量が増加している傾向にある。例えば製品として市場に現れた当初は数十メガバイト(MB)程度とされていたものが、現状では、例えばギガバイト(GB)クラスにまで記憶容量が増加している。このようにして記憶容量が増加するのにかかわらず、例えば当初の記憶容量に応じて設定されたブロック容量、あるいはページ容量を維持したとすれば、フラッシュメモリの容量全体におけるブロック数、ページ数も著しく増加することになる。このような膨大な数のブロック、ページを管理しようとした場合、このための管理情報の容量も増加することになるが、このような管理情報も同じフラッシュメモリに記憶保持させる場合がある。従って、管理情報のサイズの肥大化によりフラッシュメモリにおけるユーザデータの記憶可能容量を圧迫するという不都合を生じることになる。また、管理情報を処理する際の処理速度の低下も問題になる場合がある。
そこで、フラッシュメモリの記憶容量を増加させるのに応じては、ブロック、ページの容量も相応に増加させるフォーマットとすることが行われるようになり、このような手法が一般化している。このようなフォーマットとすれば、ブロック、ページの総数を適正な範囲で抑えることが可能となり、上記したような問題を回避できる。
具体例として、図3(a)(b)には、ページサイズについて2112バイト(=2048+64)とした場合が示されているが、この場合における実際のフラッシュメモリの全体容量は2GB、あるいは4GB程度とされている。また、フラッシュメモリの全体容量が2GBの場合のブロックサイズは128KBとされ、1ブロックは64ページにより形成されることになる。また、フラッシュメモリの全体容量が4GBの場合のブロックサイズは256KBとされ、1ブロックは128ページにより形成されることになる。
先に述べたように、ページについての本来の基本構造は図3(a)に示したものとなる。
例えば図3(a)のページ構造のもとで、上記のようにしてページサイズを増加させていったとすると、必然的に1ページ内におけるデータ部のサイズも増加していくことになるが、このことをECCによるエラー訂正処理の観点から見ると、データ部のサイズの増加は、即ち、エラー訂正対象となる語長の増加となる。
エラー訂正に関する一般的なこととして、エラー訂正の対象となる単位データサイズができるだけ小さいほど、エラー訂正の信頼性は高くなる。このことからすると、図3(a)のページ構造のフォーマットによりページサイズを増加させていくことは、エラー訂正の信頼性の低下を招く可能性がある、ということになる。
そこで、例えば図3(b)に示すようにして、1ページ内に占めるデータ部を所定数(この場合は4つ)に分割し、これらの分割したデータ部ごとの直後に対して、その分割されたデータ部(及び予備領域)のエラー訂正を行うだけのECCを格納した冗長部を連結する構造とすれば、ページサイズの増加にかかわらずエラー訂正の語長を適正範囲内に抑えることが可能になる。つまり、図3(b)に示すページ構造は、主として、ページサイズの増加に対してエラー訂正の効率が低下しないことを目的として採用されるものである。
上述したフラッシュメモリの物理フォーマットを踏まえたうえで、フラッシュメモリ上でのデータ管理のために定義される、ブロックに対応した物理アドレス(物理ブロックアドレス)と論理アドレス(論理ブロックアドレス)の概念について、図4を参照して説明する。図4は、データの更新手順を示している。
図4(a)は、データ更新処理前の状態として、或るセグメント内から4つのブロックを抜き出して、これを模式的に示している。
フラッシュメモリにおいて物理的に存在する各ブロック(物理ブロック)に対しては物理ブロックアドレスが付される。この物理ブロックアドレスはメモリにおける物理ブロックの物理的な配列順に従って決まるもので、或る物理ブロックとこれに対応付けされた物理ブロックアドレスとの関係は不変となる。
ここでは、図4(a)に示す4つのブロックに対して、上から順に物理ブロックアドレスの値として、105,106,107,108が付されている。なお、実際の物理ブロックアドレスは例えば2バイトにより表現される。
ここで、図4(a)に示すように、物理ブロックアドレス105,106で示されるブロックがデータの記憶されている書込済ブロックで、物理ブロックアドレス107,108で示されるブロックがデータが消去(即ち、未記録(未使用)領域である)された消去済ブロックとなっている状態であるとする。
そして、論理ブロックアドレスであるが、この論理ブロックアドレスは、ブロックに対して書き込まれたデータに付随するようにして割り振られるアドレスとされる。そして、この論理ブロックアドレスが、論理ブロックアドレス、物理ブロックアドレス管理層の上位に位置するとされる、FAT(File Allocation Table)ファイルシステムなどのファイルシステムが参照するアドレスとされている。
図4(a)では、4つの各ブロックに対して、上から順に論理ブロックアドレスの値として、102,103,104,105が付されている状態が示されている。なお、論理ブロックアドレスも実際には2バイトにより表現されるものである。
ここで、上記図4(a)に示す状態から、例えば物理ブロックアドレス105が示すブロック格納されているデータの更新として、内容の書き換え、追加、又は一部消去を行うとする。
このような場合、フラッシュメモリのファイルシステムでは、同じブロックに対して更新したデータを再度書き込むことはせずに、消去済ブロックに対してその更新したデータを書き込むようにされる。
つまり、例えば図4において処理1となる図4(a)から図4(b)の遷移として示すようにして、物理ブロックアドレス105のブロックに書き込まれていたデータについての更新データは、これまで未使用ブロックであった物理ブロックアドレス107で示されるブロックに書き込むようにされる。そして、物理ブロックアドレス105のブロックのデータについては消去するようにされる。
続いては、処理2として示すように、データ更新前(図4(a))の状態では物理ブロックアドレス105に対応していた論理ブロックアドレス102が、更新されたデータが書き込まれたブロックの物理ブロックアドレス107に対応するように、論理ブロックアドレスと物理ブロックアドレスとの対応関係についての変更を行う。これに伴って、データ更新前は物理ブロックアドレス107に対応していた論理ブロックアドレス104については、物理ブロックアドレス105に対応するように変更されている。このようにして、フラッシュメモリでは、1つの論理ブロックアドレスに対応するデータの更新前後で物理ブロック(物理ブロックアドレス)を交替(スワップ)させる処理が実行される。
そして、この際に論理ブロックアドレスを上記処理2のようにして扱うことで、更新前と更新後のデータとで書き込まれるブロックの交替があるようにされても、例えば上位のファイルシステムは論理ブロックアドレスを参照してファイルアクセスを行うことになるために、ファイルシステム側からは同一のアドレスが見えることになり、以降のアクセスを適正に実行することができるものである。
また、このような処理手順からも分かるように、物理ブロックアドレスはブロックに対して固有に付されるアドレスであり、論理ブロックアドレスは、一旦ブロックに対して書き込まれたデータに付随するようにしてついて回る、ブロック単位の書き込みデータに固有となるアドレスであるとみることができる。
また、上記図4に示されるブロック交替処理を、ページ単位の書き込み処理としてみた場合の手順の一例について図5により説明しておくこととする。
図5(a)〜(d)の左側には、更新対象となるデータが書込済みになっているブロック(更新対象ブロック)が示されている。また、同じ図5(a)〜(d)の右側には、更新データを実際に書き込むものとして消去済みブロックのうちから新規に選択されたブロック(新規ブロック)が示されている。
ここで、図5(a)は、更新処理前において、新規ブロックが決定された状態例を模式的に示している。ここでの更新対象ブロックとして示すように、更新前のデータとしては、ページ0、ページ1、ページ2、ページ3、の4つのページ位置に対してそれぞれ、データD0、D1、D2、D3が書き込み済みの状態にあり、ページ4以降は未使用とされる。また、この段階では、新規ブロックは全てのページが消去済みの状態となっている。
そして、この場合においては、上記図5(a)に示す状態において、例えばページ2に格納されるデータ内容を更新するためのデータ書込要求があったとする。つまり、この場合のブロックのデータ更新に関する具体的な内容としては、ページ2におけるデータ内容の更新となる。
このようなブロックのデータを更新するための新規ブロックへのデータの書き込みは、先頭ページから次のページへと順次的にページ単位で書き込みを実行していくことで行われるようにされる。このために、図5(a)に示されるデータ書込要求に応じては、先ず、図5(b)に示すようにして、更新対象ブロックから、先頭ページであるページ0のデータD0を読み出して、この読み出したデータD0を、新規ブロックにおける同じページ0に対して書き込むようにされる。つまり、データD0についてはその内容に変更はないので、更新対象ブロックから新規ブロックに対してデータをコピーするようにして書き込むことになる。
続いては、図5(c)に示すようにして、先頭ページ(ページ0)に続くページ1のデータD1を読み出して、新規ブロックにおける同じページ1に対してコピーとしての書き込みを行うようにされる。
そして、データ内容が更新されるべき次のページ2については、図5(d)に示すようにして、更新対象ブロックにおけるページ2のデータD2を更新した内容のデータD2+を、新規ブロックのページ2に対して書き込むようにされる。なお、更新後のデータD2+は、先ず、更新対象ブロックにおけるページ2からデータD2を読み出して例えばRAM上で更新処理を行うことで生成するようにされる。
上記のようにしてデータD2+の書き込みが完了すると、図5(e)に示すようにして、更新対象ブロックのページ3のデータD3を、新規ブロックのページ3にコピーするようにして書き込むようにされる。この場合には、ここまでの手順を完了した段階で、新規ブロックに対する更新データの書き込みが完了したことになる。
このようにして、ブロック交替処理に伴うブロックデータの書き込みの実際としては、変更のないページについてはデータをコピーし、変更のあるページについては、更新した内容のデータの書き込むという手順を、先頭ページから順次行っていくようにされる。
そして、この図5には示していないが、更新データの書き込みが終了した後の所定のタイミングで、図5の左側に示されている更新対象ブロックに書き込まれているデータについての消去が行われる。つまり、データ書き込みに伴うブロック交替が行われる。
上記図4及び図5に示したようにしてブロックの交替を伴ってデータの書き込みが行われることで、物理ブロックアドレスと論理ブロックアドレスの対応は変化する。従って、フラッシュメモリに対するデータの書き込み及び読み出しのためのアクセスを実現するには、物理ブロックアドレスと論理ブロックアドレスとの対応が示される論理−物理アドレス変換テーブルが必要となる。つまり、論理−物理アドレス変換テーブルを上位ファイルシステムが参照することで、上位ファイルシステムが指定した論理アドレスに対応する物理アドレスが特定され、この特定された物理アドレスにより示されるブロックにアクセスすることが可能になるものである。
図6は、論理−物理アドレス変換テーブルの概念を示している。
この図に示すようにして、論理−物理アドレス変換テーブルとしては、例えば、先ずブロック論理アドレスを昇順に整列させることしている。そして、各論理ブロックアドレスごとに、対応させるべき物理ブロックアドレスを格納するようにしてテーブル情報を構築する。なお、この図においては、論理ブロックアドレスを、0〜Xによる整数値として示しているが、例えば実際としては2バイトにより表現される値を持つものとなる。
なお、以降の説明において、論理ブロックアドレスをLBA(Logical Block Address)と記載し、物理ブロックアドレスをPBA(Physical Block Address)と記載する場合がある。また、論理−物理アドレス変換テーブルについては、LBAにPBAを対応させていることに基づき、PBAテーブルともいう場合がある。
上記図4〜図6により示したデータ更新に伴うブロック交替処理と、PBAテーブルによるブロック管理を行う必要性は、例えば、下記のようなフラッシュメモリの特質に由来する。
周知のようにして、フラッシュメモリは、上書きが不可であり、必ず消去済みの領域に対してデータを書き込むことが要求される。そのうえで、データ消去の最小単位がブロックとなるのに対して、データ書き込みの最小単位はページとなる。さらに、ページに対するデータ書き込みは、ブロック内において物理的に配列されるページ順(物理ページアドレス順)に従って行っていくべきこととされている。
また、フラッシュメモリとしての半導体素子には寿命があり、この寿命は、データの消去回数として表される。
このような特質から、例えば図5(a)の更新対象ブロックのページ2に対して、直接、更新データを上書きすることはできない。そこで、例えばページ2の領域だけでも消去する必要が生じるが、データ消去の最小単位はブロックであるために、ブロックの全領域のデータを消去したうえで、再び、ブロックに格納させるべきデータを書き込むという手順が必要になる。すると、たとえ1ページ分だけであっても、データの書き換えを行おうとした場合には、その都度、ブロックを消去しなければならないことになる。このようなデータ書き込みに応じたブロックの消去が、1つのブロックに対して繰り返し行われれば、それだけ、そのブロック領域の寿命が短くなる。そこで、ブロック交替処理を伴うブロックのデータ更新とすることで、特定のブロックにおけるデータの消去が集中して繰り返されないようにしているものである。
しかしながら、図4〜図6により説明した、これまでのフラッシュメモリに対するデータ書き込みのシーケンスでは、ブロック内のデータを更新するときには、そのブロックのデータを消去する(ブロック消去)という処理が必然的についてまわる。
このようなブロック消去の処理は、例えばページ書き込みや、読み出しの処理などと比較して、相当に時間を要することが分かっている。具体例として、ブロックサイズが128KBの場合において、ブロック消去の所要時間は約1.5msであるのに対して、ページ書き込み時間は約200μs、ページの読み出しは最大で約20μsとなる測定結果が得られている。また、ブロックサイズが256KBの場合においては、ブロック消去の所要時間が約3msであるのに対して、ページ書き込み時間は約800μs、ページの読み出しは最大で約50μsとなる測定結果が得られている。
このことは、ブロック消去に要する時間の存在により、フラッシュメモリにおいてデータ書き込みを完了させるのに要する時間が長時間化しているとみることができる。特に、データ書き込みの開始から終了までの時間内においてブロック消去に要する時間の占有率は、書き込みデータのサイズが小さいほど高くなる一方で、書き込みデータのサイズが大きくなるほど低くなっていくために、小さなサイズのデータを書き込ませているのにもかかわらず、大きなサイズのデータを書き込んでいるときと、あまりデータ書き込みが完了するまでの時間に大差がないという結果を生じる。つまり、これまでのフラッシュメモリのデータ書き込みのアルゴリズムでは、ブロック消去処理の存在により、データの書き込み速度の高速化を図ることが困難であり、特に、小さいサイズのデータを書き込む場合において、相対的なデータ書き込み速度の低下が顕著になる、という問題を有しているということがいえる。
そこで、本実施の形態としては、以降説明していく構成を採ることで、データ書き込み速度の高速化を図るようにされる。
先ず、図7により、本実施の形態におけるデータ書き込みのアルゴリズムについて、具体例を挙げて説明する。
この図7において、ブロック(第1単位領域)は、m+1個のページ(第2単位領域)から成るものとされており、先頭ページから最終ページにかけて、0〜mにより表される物理ページアドレスが対応付けられている。なお、以降において、物理ページアドレスは、図において表記もしているように、PPA(Physical Page Address)とも記載する場合がある。このPPAは、ブロックにおいて物理的に配列される先頭ページから最終ページに対して固定的に割り当てられる。
ここで先ず、図7(a)に示されるように、データが書込済み(使用済み)の状態にあるブロックが存在しているとする。このブロックは、PPA=0、PPA=1、PPA=2により示される3つのブロックに対して、それぞれ、データD0、D1、D2が書込済みとされており、これに続くPPA=3〜PPA=mまでのページは未使用の状態にあるものとされている。そして、この状態の下で、PPA=1が示すページのデータD1を更新するためのデータの書き込み要求が行われたとする。
先に説明した従来のアルゴリズムでは、この書き込み要求に応じてブロック交替処理を伴うデータの更新が行われる。これに対して本実施の形態では、図7(b)に示すようにして、未使用となっているページのうちの先頭ページである、PPA=3が示すページに対してデータD1を更新した内容のデータD1+を書き込むようにされる。
また、この後において、例えば図7(c)に示すようにして、PPA=0が示すページのデータD0を更新するためのデータ書込要求が行われたとすると、図7(d)に示すようにして、この段階において未使用となっているページのうちの先頭ページである、PPA=4が示すページに対してデータD0を更新した内容のデータD0+を書き込むようにされる。
なお、確認のために述べておくと、上記のようにして更新後のデータD0+、D1+が書き込まれたことで、ページ0、1にそれぞれ格納される更新前のデータD0、D1は無効なデータとなる。更新後のデータD0+、D1+が有効である。
上記した本実施の形態のデータ書き込みの動作は、ページ単位に相当するデータ書き込みを実行するのにあたり、要求に応じて書き込むべきデータを、未使用のページ(空きページ)を先頭から埋めるようにして書き込んでいく動作である、ということになる。例えば先に説明した従来のデータの書き込みを、この図7の状況に適用したとすると、2回のデータ書き込み要求に応じて、既に2回のブロック交替処理が発生する。つまり、2回のブロック消去の処理が実行されることになる。これに対して、本実施の形態では、2回のページ書き込みで済んでいる。このことは、ブロックに空きページが存在してページデータの追記が可能とされる限り、ブロック消去の処理は生じない、ということを意味している。
このようにして本実施の形態では、データ書き込みについて、ブロック交替処理の代わりに未使用ページへの追記という処理を実行するものであり、これにより、ブロック消去が実行されないようにしているものである。そして、このようにブロック消去の処理が省かれれば、それだけ同じデータサイズに対するデータ書き込みの所要時間は短縮される。つまり、データの書き込み速度の高速化が図られることになる。
また、従来においては、ブロック交替処理によりフラッシュメモリの長寿命化を図ることとしているが、これは、或る1つのブロックデータを格納するブロックを交替することにより、消去されるブロックを分散、均一化させることで得られる効果となる。この場合、ブロック消去の処理そのものは、データ書き込みごとに必ず実行される。これに対して、本実施の形態では、データ書き込みとして同一ブロックに対するページデータの追記を行っている限りは、ブロックの消去処理そのものが生じないものであり、長寿命化の点でも従来と比較して優れている。
そして、本実施の形態としては、上記図7のようにして未使用ページに対して書き込みデータを順次追記していくアルゴリズムとしたことに応じて、ページに書き込まれたデータごとに対して、例えば図8に示すようにして、論理ページアドレス(LPA)を割り当てることとする。なお、以降において論理ページアドレスについては、LPA(Logical Page Address)と表記する場合もある。
図8(a)(b)(c)は、それぞれ、図7(a)、(b)(d)と同じデータ書き込み結果が示されている。この場合において、例えば図7(a)に示す状態では、PPA=0が示すページに書き込まれたデータD0に対応させてLPA=0を割り当て、次いで順に、PPA=1が示すページに書き込まれたデータD1に対応させてLPA=1を割り当て、PPA=2が示すページに書き込まれたデータD2に対応させてLPA=2を割り当てている。
そして、図8(b)の状態では、さらにPPA=3が示すページに書き込まれたデータD1+に対して、LPA=1を割り当てている。また、図8(c)の状態では、さらにPPA=3が示すページに書き込まれたデータD0+に対して、LPA=0を割り当てている。
つまり、LPA=は、ページに書き込まれたデータを特定するものとして割り当てられるアドレスとして考えることができる。そして、図8(b)(c)からも分かるように、更新前後の関係を有するデータについては同一のLPAを割り当てることとしている。従って、LPAは、異なるブロックに対して重複して割り当てることが許可されているものである。
上記のようにして割り当てられるLPAは、先に図3に示したように、対応するページ内にて格納されることになる。このようなLPAの格納構造からも、LPAは、ページ単位で記録されるデータに対応付けられるようにして割り与えられるアドレスであるとみることができる。これに対して、PPAは、ブロックにおける物理的なページ配列に対して固定的に割り当てられるものとなる。
ところで、図7及び図8に示したようにしてページデータを追記するかたちでデータ書き込みを継続させていったとすると、或るデータ書き込みを実行完了した段階で、そのブロック内のページは全て使用済みとなって未使用ページ(空きページ)が無くなる。例えばこの状態を図9(a)に示す。
図9(a)には、或るブロックにおいて、全てのページに対してデータの書き込みが行われて使用済みとなっている様態例が示されている。
なお、この図においては、ブロック内のページついてデータ部と冗長部とに論理的に分割して示している。データ部におけるページ0〜63の表記は、PPAに応じたブロック内におけるそのページの配列順を示している。つまり、この場合においては64のページにより1ブロックが形成されるフォーマットを例としている。また、冗長部には、その予備領域に格納しているとされるLPAの値を16進法表記により示している。
そして、上記図9(a)に示されるページ63に対して例えばLPA=0x2Fのページデータの書き込みを完了した次に、図9(b)に示すようにしてLPA=0x2Eのページデータの書き込みを実行すべきことになったとする。
このとき、図9(a)のブロックには未使用ページが存在していないので、図9(a)のブロックに対して新規に書き込む必要のあるLPA=0x2Eのページデータを追記することはできない。このことは、空きページが無くなったことを以て、本来データ書き込みを行う対象となるべきブロックに対するデータの書き込みが禁止される条件を満たしたものであるといえる。
本実施の形態では、このようにして、これまでページ追記を行っていたブロックの空きページがなくなった状態から、さらにそのブロックを指定してデータを書き込まなければならない状況になったとされると、未使用(全ページが空き)となっているブロックのうちから1つのブロックを追加ブロック(追加用第1単位領域)として確保するようにされる。そして、図9(c)に示すようにして、この追加ブロックに対して、図9(b)のページデータを書き込むようにされる。このときの書き込みは、ブロック内において物理的に先頭となるページに対して行われる。先に述べたように、フラッシュメモリでは、ページ単位でのデータ書き込みは、PPAの昇順に従うべきこととされているからである。なお、未使用ページについては、その冗長部の予備領域のLPAは、例えば0xFFとなっている。つまり、予備領域におけるLPA=0xFFとなっていれば、そのページは未使用(空き)であることが示されるのであるが、この0xFFの値は、ブロック消去が行われた結果として、消去対象領域において全て1が書き込まれることにより得られるものである。
そして、以降において、本来は図9(a)のブロックのデータを成すものとされるデータを書き込むべきこととなった場合には、図9(c)の追加ブロックに対して、先頭ページに続く次のページから、PPAの昇順に従って、順次ページ単位での書き込みを行っていくようにされる。
上記のようにしてオプション的に定義される図9(c)の追加ブロックと、図9(a)に示される本来のブロックとの関係は次のようになる。なお、以降においては、図9(a)の本来のブロックについては、オリジナルブロックともいうことにする。
先の説明のようにして、従来からのフラッシュメモリにおけるメモリ管理にあたっては、図6に示したPBAテーブルを用いることとされているが、例えば上位アプリケーションはPBAテーブルを利用してフラッシュメモリへのアクセスを行うことから、本実施の形態としても、同様にして、PBAテーブルによりブロック単位でのメモリ管理を行うこととしている。このことは、本実施の形態としても、ブロックに対しては、そこに書き込まれるデータに対応付けられるようにしてLBAが割り当てられるということを意味する。
そのうえで、本実施の形態としては、図9においても記載しているように、オリジナルブロックと追加ブロックとで、同一のLBAを有り当てることとしている。つまり、追加ブロックが作成された段階で、対応するオリジナルブロックに割り当てられているLBAを、その追加ブロックにも割り当てるようにするものである。
このようにして複数のブロックに同一のLBAを付すということは、1つのLBAに対して複数のPBAを対応付けているということに他ならない。このことは、本実施の形態にあっては、本来は1つのブロックに対応して書き込まれるべきデータのために用意される書き込み可能領域を、2ブロック分のサイズにまで拡張しているということを意味する。この意義を示すものとして、図9においては、オリジナルブロック(図9(a))については、64個のブロックごとに、PPAに対応させてページ0〜63と表記しているのに対して、追加ブロック(図9(b))については、同じ64個のブロックごとに、PPAに対応させてページ64〜127と表記している。つまり、ここでのこの表記は、ブロックデータが格納される1つのブロックに対応するページ数が、本来は64であるのに対し、その2倍の128にまで拡張されているということを示している。
このようにして追加ブロックを設けてデータを追記可能としたことで、オリジナルブロックに空きページがなくなった後においても、追加ブロックに空きページが存在して追加可能なうちは、ブロック消去が実行されない状況を継続させることが可能になる。これにより、データ書き込み速度の向上と、メモリ領域の長寿命化の効果がより高められることになる。
ところで、上記のようにして、互いにPBAの異なるオリジナルブロックと追加ブロックを1つのPBAに対応させることとしたのであれば、このようなオリジナルブロックと追加ブロックとの関係を識別可能なようにしてシステム上で管理することが必要になってくるが、本実施の形態としては、これを下記のようにして行うこととする。なお、このようなオリジナルブロックと追加ブロックについての管理を、ここでは、オプションの追加ブロックに関する管理として捉えることに由来して、追加ブロック管理ともいうことにする。
先ず、フラッシュメモリのシステムにおけるブロック管理は、先の説明のようにして、図6に示したPBAテーブル(論理−物理アドレス変換テーブル)を利用するものとされている。この図6に示されるPBAテーブルは、PBAとLBAとは一対一の関係となっていることを前提として、その管理構造としても、1つのPBAに1つのLBAのみを対応させた構造となっている。従って、このままの構造では、1つのLBAに対して複数のPBAを対応させるようにして管理することはできない。そこで、上位層が参照するPBAテーブルについて、1つのLBAに対して複数のPBAを対応させた管理が可能なようにその構造、仕様を変更することも考えられるが、そうすると、例えばフラッシュメモリのドライバ層だけではなく、その上位のファイルシステム層などについても仕様変更が及ぶ可能性があるなどの不都合が生じる可能性がある。この観点からすると、PBAテーブルの構造については変更しないことが好ましい。
そこで、本実施の形態としても、PBAテーブルについては、図6に示した従来からの構造を採ることとしている。この場合において、PBAテーブルにより管理されるブロックはオリジナルブロックであることとする。
そのうえで、図10に示す追加ブロック管理テーブルを定義する。
図10に示される追加ブロック管理テーブルは、オリジナルブロックのLBAに対して追加ブロックのPBAを対応させた構造を有する。これまでに述べてきたように、LBAはオリジナルブロックと追加ブロックとで同一であるから、追加ブロック管理テーブルにおいて追加ブロックのPBAに対応するLBAが、即ち、その追加ブロックにも与えられるLBAとなる。これにより、フラッシュメモリ内のブロックのうちからオリジナルブロックと追加ブロックの対応関係を特定することが可能になる。
つまり、先ず図6のPBAテーブルを参照することで、或る目的とする1つのオリジナルブロックについてのLBAとPBAの対応を特定できる。そして、PBAテーブルを参照して特定した上記1つのオリジナルブロックのLBAと同じ値のLBA(オリジナルブロックのLBA)を、追加ブロック管理テーブルから探索してみて、そのLBAが探索されたのであれば、このLBAに対応するPBAが追加ブロックである。
このようして、PBAテーブルと追加ブロック管理テーブルとで、同じLBAが対応付けられているPBAを探索すれば、それぞれがオリジナルブロックと追加ブロックのPBAを示していることになる。また、追加ブロック管理テーブルについて探索を行った結果として、PBAテーブルに対して探索を行ったときと同じLBA(オリジナルブロックのLBA)が存在しなかった場合には、そのオリジナルブロックには、追加ブロックが割り当てられていないということになる。
また、図10に示される追加ブロック管理テーブルとしては、行番号について例えば0〜9を付していることから分かるように、オリジナルブロックのLBAに対して追加ブロックのPBAを対応させる行領域としては10個のみを用意することとされている。このことは、管理可能な追加テーブルの上限が10個であり、従って、フラッシュメモリの記憶領域(例えばセグメント)全体において使用可能な追加ブロック数も10個であるということを意味する。
さらに、この図10に示される追加ブロック管理テーブルによっては、追加ブロックの生成順が特定できるようにして追加ブロック管理が行われるものとされる。
このためには、例えば、新規に追加ブロックが登録される都度、登録済みとされていた追加ブロックについてのLBAとPBAを格納した行を、行番号の昇順に従って1行ごとにシフトさせるようにする。つまり、LBAとPBAの組み合わせによる追加ブロックの登録情報に対応させる行番号を1インクリメントしていくようにされる。そして、この行シフトの結果により空き領域となった行番号0の行に対して、新規追加ブロックについてのLBA、PBAを登録するようにされる。これにより、行番号の昇順(0,1,2・・・9)に従って追加ブロックが古くなることが示される。
ところで、上記のようにして、本実施の形態において追加ブロック数に制限を設けることの理由は次のようになる。
仮に追加ブロック数について制限を設けないこととすると、ブロックの空きページがなくなるごとに必ず追加ブロックが形成されていくことになるので、データ書き込みが継続されるのに応じて、追加ブロック数は無制限に増加していくことになる。しかし、追加ブロック数が増加すれば、その分、使用可能なフラッシュメモリの容量が少なくなっていくことになる。つまり、必要以上に、フラッシュメモリの記憶可能容量を少なくしてしまう可能性がある。また、このような記憶可能容量の消費は、実際に書き込んだファイルサイズよりもはるかに少ない空き容量しか残っていないという状況も生む。このようなことは、例えばユーザにとっては不利益となるものであり、また、信頼性を損なう原因にもなり得る。
そこで、本実施の形態としては、使用可能な追加ブロック数に制限を与えることとして、上記した問題が生じないようにしているものである。実際においても、例えば2GB〜4GB程度の総容量でブロック総数が約16000〜32000程度のフラッシュメモリを対象として検討を行った結果として、フラッシュメモリの記憶可能容量を必要以上に消費しないことと、データ書き込み速度との両立させるには、使用可能な追加ブロック数を10個程度とすることが妥当であるとの結論が得られているものである。
そして、例えば図9による説明のようにして、追加ブロックに対して、順次、ページデータの書き込みを行っていったとすると、或る段階にて、最後のページ127に対してページを書き込むことになり、ここで、追加ブロックに対する追記は不可となる。この状態を、図11(a)(b)に示す。図11(a)には、図9(a)と同じオリジナルブロックが示され、図11(b)には、図9(b)の追加ブロックについて、その最終ページまでのページデータの追記が行われて空きページが無くなった状態例を示している。
そして、この状態において、例えばさらに、図9(c)に示すLPA=0x09のデータを書き込むべきことになったとする。この場合、上記もしているように、図11(b)の追加ブロックに対する追記をこれ以上は行うことができない。
このようにして追加ブロックに空きページが無くなってデータの追記ができなくなった場合の対応として、1つには、さらに追加ブロックを設けて追記を継続させるということが考えられる。しかしながら、このような手法による対応は、先に説明したような追加ブロック数の不用意な増加を招く結果につながることから、本実施の形態では採用しないこととしている。
本実施の形態の対応としては、追加ブロックとオリジナルブロックにこれまで書き込まれたページデータのうちから有効なデータを抜き出し、これらを1つのブロックにまとめて書き込むようにして、ブロックの再構築を行うようにされる。このようなブロック再構築の処理を、ここでは、マージ処理ということにする。
図11の場合におけるマージ処理としては次のようになる。
先の説明のようにして、図11(a)(b)のオリジナルブロックと追加ブロックが、ともに空きページが無くなった状態で、図11(c)に示すLPA=0x09のデータを書き込むべきタイミングになったとすると、このときに未使用となっているブロックのうちから1つのブロックを選択して、図5(d)のマージブロックとして確保する。そして、このマージブロックに対して、下記のようにしてページ単位によるデータの書き込みを実行していくようにされる。
先ず、マージブロックの先頭ページに対しては、図11(c)に示すLPA=0x09のデータを書き込むこととする。そして、以降において、先頭ページより後のページに対して、追加ブロックとオリジナルブロックに書き込まれている内容のデータのうちから、有効なデータを書き込んでいくことになる。
オリジナルブロックと追加ブロックに対しては、例えば先の図7の説明のようにしてページデータの追記が行われる。このために、オリジナルブロックと追加ブロックにあっては、1つのLBAに対応して最後に書き込まれたページデータと、これより前に書き込まれたページデータとが混在する可能性があることになる。また、上記最後に書き込まれたページデータは、最後に更新された内容を持つことから有効なデータであることになる。これに対して、これより前に書き込まれたページデータは、更新前の古い内容を有していることになるために無効なデータとなる。また、データ書き込みは、オリジナルブロックに対して追記を行った後に追加ブロックに追記するという手順になるので、オリジナルブロックと追記ブロックのページ0〜127として示されるページ順に従って、書き込みデータは新しいものになるということがいえる。
上記したことに基づいて、本実施の形態としては、先ず、追加ブロックにおける最終ページであるページ127から先頭ページのページ64にかけて、有効なページデータを探索していくようにされ、有効なページデータが探索できるごとに、このページデータを、マージブロックにおいて最後に書き込みが行われた次のページに対して、順次、コピーするようにして書き込んでいくようにされる。次いで、同様にして、オリジナルブロックにおける最終ページであるページ63から先頭ページのページ0にかけて、有効なページデータを探索していきながら、探索された有効なページデータを、マージブロックにおいて最後に書き込みが行われた次のページに対して順次書き込んでいくようにされる。
ここでのページデータについての有効/無効の判定には、冗長部に格納されるLBAを利用する。つまり、これまでに未だ探索されていないLBAを格納したページは、同じLBAを格納するページデータのうちで最後に書き込まれたページデータとなるので、有効であると判定できる。これに対して、探索済みのLBAを格納したページは、同じLBAを格納するページデータのうちで最後よりも前に書き込まれたページデータとなるので無効であると判定できる。
図11においては、上記した追加ブロック及びオリジナルブロックからマージブロックへの有効データのコピー処理の具体例が示される。探索処理としては、先ず、図11(b)に示した追加ブロックにおけるページ127に格納されるページデータを探索することになるが、このページデータのLBA=0x35は、未だマージブロックには格納されていない。従って、このページ127に格納されるページデータは有効データであることになる。そこで、このページデータを追加ブロックから読み出し、この時点において、マージブロックにおける空きページの先頭(PPA順的に、最後の書込済みページの次のページ)となるページ1に対してコピーするようにして書き込む。また、次のページ126に格納されるページデータも有効データであるとして判定されることになり、マージブロックにおけるページ2に対してコピーするようにして書き込むことになる。この要領で追加ブロックに対する探索と、探索された有効なページデータのマージブロックへの書き込みを行っていくようにされる。そして、追加ブロックに対する探索がページ64まで完了したとされると、続いては、図11(a)のオリジナルブロックに対する探索を行っていくようにされる。
図11(a)のオリジナルブロックのページ63には、LBA=0x01のページデータが格納されているが、この段階までLBA=0x01のページデータは探索されていなかったものとされる。そこで、このページ63のページデータは有効であると判定されることになり、マージブロックに対して書き込まれる。なお、これまでの段階においては、マージブロックには、ページ61まで書き込みが完了しているものとされているので、このLBA=0x01のページデータは、マージブロックのページ62に対して書き込むことになる。
この場合においては、以降においてオリジナルブロックの探索を行った結果として、ページ2においてLBA=0x02が探索されるまで、無効なページデータが連続したものとされている。そして、このページ2に格納されるLBA=0x02のページデータが有効と判定され、マージブロックにおいて最後に残っていた空きページであるページ63に対して書き込みを行うようにされる。
そして、このようにしてページ63までの書き込みが完了した段階で、図11(d)のマージブロックには、図11(a)のオリジナルブロック(及び図11(b)の追加ブロック)に割り当てられたLBAに対応する有効な最新のブロックデータが格納された状態となっている。また、確認のために述べておくと、マージブロックにおいては、同一のLPAが重複したページデータは格納されていない。
なお、実際においては、データ書き込み内容に応じて、マージブロックにおける全てのページが使用されない場合もある。この場合には、ページデータのコピーが行われなかったページについては空きページの状態となっているものである。
そして、上記のようにしてマージブロックが完成したとすると、このマージブロックを新規のオリジナルブロックとして登録するようにされる。このためには、例えばPBAテーブルについて、図11(a)(b)のオリジナルブロックと追加ブロックに与えられたLBAに、図11(c)のマージブロックのPBAを対応させるようにして更新を行えばよい。また、このようにしてマージブロックを新規オリジナルテーブルとして登録したことに応じて、図11(a)の前のオリジナルブロックは、PBAテーブルからの登録が削除されることになる。そして、この図11(a)の前のオリジナルブロックについては、再度の使用が可能となるように、この段階で、ブロック消去を行っておくようにされる。
また、マージブロックが完成したことで、図11(b)の追加ブロックも不要となる。そこで、追加ブロックについては、先ず、追加ブロック管理テーブルからの登録を削除する。このようにして追加ブロックの登録削除が行われた場合において、追加ブロック管理テーブルにおいて空きになった行より後の行番号の行に対して追加ブロックが登録されていた場合には、空きになった行を埋めるようにして、空きの行より後ろの全ての追加ブロックの登録データを、1行繰り上げるようにしてシフトさせるようにする。
そのうえで、図11(b)の追加ブロックについてもブロック消去を行っておくようにされる。
以上でマージ処理としての一連の手順が完了する。
なお、図11(d)に示されるように、マージブロック(新規オリジナルブロック)においては、LPA順に従ってページデータを配列させることはしていない。このブロックからデータを読み出すときには、先ず、ブロックからページデータを読み出したうえで、例えばRAMなどの作業領域上で、LPA順に配列させることで論理的な連続性を得るようにされればよいからである。
確認のために述べておくと、例えば、図11に例示したようなマージ処理を実行した後に、さらにデータ書き込みを行っていくべきことになった場合には、マージブロックから新規オリジナルブロックへと変更されたブロックにおいて空きページが在る限りは、この空きページに対して追記を行っていくようにされる。そして、空きページが無くなったのであれば、先の図9により説明したのと同様の要領によって追加ブロックを割り当て、この追加ブロックに対して追記を行っていくようにされる。
これまでの説明から理解されるように、本実施の形態では、データ書き込みの実行中においてブロック消去が行われる機会としては、マージ処理のみであることになる。マージ処理では、元のオリジナルブロックと追加ブロックを対象とした2ブロック分のブロック消去を行う必要があるが、これは、例えば2ブロック分のデータ書き込みが行われてからはじめて実行されるものとなる。従来では、2ブロック分のデータを書き込もうとすれば、最大で1ブロックあたりのページ数の2倍の回数分のブロック消去を実行することになる。これに対して本実施の形態では、2回で済むものであり、データ書き込み速度の向上やメモリの長寿命化などの効果は充分に得られるものである。
また、本実施の形態にあっては、図3にて説明したように、ページデータにおける冗長部の予備領域に対して、LPAとともに、LBA、SQN、CNTFを格納しておく必要がある。これらのうち、LBA、SQNの有効な値をブロック内の先頭ページに対して格納すべきことになっている。そこで、LBA、SQNについては、オリジナルブロック、追加ブロック、またマージブロックが新規に作成されて先頭ページにページデータを書き込むときに、このページデータに対して、しかるべき値を格納するようにされる。SQNについては、データ書き込みを実行しているときにおいて、ブロックを生成した順に従って例えば昇順による連番を生成し、この番号をSQNとして格納させるようにする。従って、例えば同一LBAのオリジナルブロックと追加ブロックについては、SQNは連番となる。さらに同一LBAのオリジナルブロック、追加ブロック、及びマージブロックの間でもSQNは連番になる。
また、CNTFについては、オリジナルブロック、追加ブロック、またマージブロックにおける最終ページのデータ書き込みを実行する段階において、これまでの書き込み結果として、先頭ページから最終ページまでデータが論理的に連続した状態、つまり、LPA順に従って書き込まれたのであれば、そのことを示す値を生成してCNTFとして格納させる。LPA順に従った書き込みではなく、データが論理的に連続して書き込まれた状態ではないのであれば、そのことを示す値を生成して格納させる。
また、図12により、マージ処理の例外(例外マージ処理)について説明しておくこととする。
例えば、書き込みを行うデータサイズが相当に大きい場合には、追加ブロックに対して書き込まれるデータが、PPA順に従ってLPA順も連続した状態となる可能性がある。図12(b)には、このような状態の追加ブロックの一例を示している。なお、図12(a)は、図12(b)の追加ブロックに対応するオリジナルブロックである。
この図12(b)に示す追加ブロックは、先頭のページ64から最終の1つ前のページ126までにかけて、LPA=0x00、LPA=0x01、LPA=0x02・・・・LPA=0x03Eというように、LPAが連続した状態でページデータの書き込みが行われた内容となっている。
そのうえで、さらに、続けて最終ページ127に書き込まれるべきデータは、図12(c)に示すようにしてLPA=0x3Fとなっており、このデータが書き込まれることにより、図12(b)の追加ブロックに書き込まれたブロックデータは、論理的なデータの開始位置(LPA=0x00)からはじまって、LPA=0x3Fまで連続して配列された状態が得られることになる。このような書き込み結果は、追加ブロックに書き込まれたデータのみにより、対応するLBAの有効なブロックデータが形成されていることを意味する。
そこで、このような追加ブロックの書き込み結果となる場合においては、先ず、図12(b)の書き込み内容の追加ブロックを、そのまま新規オリジナルブロックとして登録するようにしてPBAテーブルの更新と、追加ブロック管理テーブルの更新とを行う。そして、この段階では、未だ図12(c)の書き込みページデータを書き込んではいないので、新規オリジナルブロックの最終ページ63に対して書き込むようにされる。なお、この最終ページ63に対してページデータを書き込むときには、当該ブロックにおいてはLBA順によりデータが連続して書き込まれていることを示す値をCNTFの領域に格納することになる。
ここまでの処理を完了したとされると、図12(a)のオリジナルブロックについてはブロック消去を行っておくようにされる。ここまでで例外マージ処理としての一連の手順が完了する。
図12(b)に示すような追加ブロックに対して、図11に示した通常のマージ処理を適用したとすると、追加ブロックの書き込み内容がそのままオリジナルブロックとして使用可能であるのにも関わらず、ページ探索と、ページデータのコピーを行うという合理的でない無駄な処理を実行することになる。そこで、このような例外マージ処理を採用することとすれば、ページ探索及びページデータのコピーが省略されることになり、上記しているような無駄が省かれ効率的な処理とすることができる。また、ページ探索及びページデータのコピーが省略されるとともに、1回のマージ処理あたりのブロック消去処理も1回で済むことになるので、その分、通常マージ処理よりも、新規オリジナルブロックを得るまでの処理時間は短縮され、データ書き込み速度の向上に寄与できる。さらには、ブロック消去回数の削減により、長寿命化についても有利となる。
ところで、本実施の形態の携帯型コンテンツプレーヤ1などのようにして、フラッシュメモリなどのランダムアクセスと書き換えが可能とされる記憶媒体に対応してデータの記録再生を行うシステムにあっては、データ書き込み処理を実行している最中において、例えば、電源が遮断したり、ドライブから半導体記憶装置が取り外されるなどして、データの書き込み処理が中断されてしまう場合のあることを想定しておく必要がある。
このような場合、例えば、次の起動時においては、実際のフラッシュメモリ上での物理的なデータの記憶状態と、上記論理−物理アドレス変換テーブルなどの管理情報の内容とに不整合が生じていることになる。このままでは、以降において、フラッシュメモリに対する正常なデータの管理、アクセスが保証できなくなる。このような不都合を回避するためには、例えばデータ書き込みが中断されたことを検出したときには、フラッシュメモリにおける実際のデータの書き込み状態を検証していくなどして、管理情報を再構築できるように構成することが必要であり、実際においても、このための何らかの構成を採るようにされている。このような構成は、例えばデータ書き込みが瞬断されたことに対する対策であることにちなみ、瞬断対策などともいわれる。
本実施の形態としても瞬断対策を採るようにされるが、この場合において本実施の形態に固有のこととして考慮すべきことは、瞬断のタイミングによっては、オリジナルブロック、追加ブロック、及びマージブロックのうちで、少なくとも2つの同一のLBAを持つブロックが存在してしまうことにある。瞬断によりデータ書き込みが終了した場合には、例えばPBAテーブルや追加ブロック管理テーブルなどの管理情報の内容を信頼することはできない。つまり、管理情報によっては、同一LBAを持つ複数のブロックのうち、どのブロックが正常なブロックであるのかを判定することが困難になる。
本実施の形態において、図3に示した冗長部の予備領域に格納される情報のうち、SQNは、瞬断対策において、例えばオリジナルブロック、追加ブロック、及びマージブロックのうちから正常とされるブロックを特定するために利用される。そこで、図13及び図14により、先に説明した本実施の形態のデータ書き込み手順により、オリジナルブロック、追加ブロック、及びマージブロック間でのSQNがどのような関係となるのかについて説明しておくこととする。
図13は、図12に示した通常のマージ処理の一手順例を示している。
例えば先ず、追加ブロックにおいて空きページが無くなった状態の下で、ステップS101によりフラッシュメモリのドライバ層に対して上位となるアプリケーション(ファイルシステム層)から1ページ分に対応するデータの書込要求があったとする。すると、フラッシュメモリドライバは、ステップS102により、要求されたデータをデータ部に格納したページデータを生成するとともに、マージブロックを確保して、このマージブロックの先頭ページに対して、生成したページデータの書き込みを行う。このステップS102によるページデータの書き込みのときに、そのページデータにおける冗長部の予備領域には、しかるべき値のSQNが格納されることになる。
ステップS103〜S110は、図11にて説明したマージ処理における、追加ブロックとオリジナルブロックに対する有効ページデータの探索と、探索された有効なページデータのマージブロックへの書き込みの処理例が示されている。ステップS103〜ステップS107までが追加ブロックを対象とした処理で、ステップS108〜S110までがオリジナルブロックを対象とした処理となる。例えばステップS103では追加ブロックの最終ページを探索して、有効ページデータの読み込みを行い、マージブロックにおける2番目のページに対する書き込みを行っているものとされる。次のステップS104も、追加ブロックの最後から1つ前のページを探索して有効ページデータの読み込みを行い、マージブロックにおける2番目のページに対する書き込みを行っているものとされる。
また、例えばステップS105は、追加ブロックの最後から1つ前のページを探索したが、ここのページデータのLPAは既に探索済みであったので、マージブロックに対する書き込みを実行しなかった処理が示されている。このようにして以降も探索と有効ページデータの書き込みを実行していき、ステップS107にて追加ブロックの先頭ページを探索し、ここのページデータが有効なものであったことから、マージブロックへの書き込みを実行したことになっている。ここまでで、追加ブロックの探索が完了している。
そして、次のステップS107〜ステップS110まで、同様の手順により、オリジナルブロックを対象として、有効ページデータの探索とマージブロックへの書き込みを行っている。なお、この場合においては、最後の探索処理であるステップS110として、オリジナルブロックの先頭ページまで探索して有効ページデータをマージブロックに書き込んだ場合を示している。
ここまでの段階に至ると、例えばフラッシュメモリドライバは、ステップS111により、RAM13に保持しているPBAテーブル、及び追加ブロック管理テーブルを更新して、データ書き込みが完了したマージブロックを、新規オリジナルブロックとして登録する。なお、ここでの更新は、あくまでもRAM上に保持している管理情報を対象として行っている。従って、例えば電源遮断などによりデータ書き込みが瞬断されれば、このRAMに保持されていた管理情報は消去喪失する。
続いては、ステップS112により追加ブロックを対象としたブロック消去の処理を実行する。これにより、フラッシュメモリ上から追加ブロックのデータ内容が消去されることになる。さらに、次のステップS113により、元のオリジナルブロックを対象としてブロック消去の処理を実行する。ここまでの処理を完了して、ステップS114により要求に応じたページデータ書き込みが完了したことを上位に通知するようにされる。つまり、フラッシュメモリドライバの上位では、単に1ページ相当のデータの書き込みを要求しているだけなのであるが、フラッシュメモリドライバの層では、状況に応じて、このようなマージ処理を実行しているものである。
図13に示した手順を実行していくタイミングに応じては、同図に示すようにして、状態1、状態2、状態3、状態4に分けて考えることができる。
先ず、状態1は、マージブロックが作成される前の段階とされ、オリジナルブロックと追加ブロックのデータが、フラッシュメモリの記憶領域上にて、空きページが無い状態で正常に存在している状態である。そして、マージブロックは、ステップS102により先頭ページのページデータの書き込みを実行したことで、はじめて作成されたものとして存在することになる。従って、ステップS102以降の状態2は、状態1に引き続きオリジナルブロックと追加ブロックのデータは、空きページが無い状態で存在していると共に、未完成あるいは完成したマージブロックのデータが存在している状態である。
状態3は、ステップS112により追加ブロックを消去してからの状態となるので、追加ブロックは存在しておらず、オリジナルブロックとマージブロックのみが存在している状態である。
状態4は、ステップS113により元のオリジナルブロックを消去して以降のタイミングになるこことから、新規オリジナルブロック(マージブロック)のみが存在している状態である。
図14は、上記状態1〜状態4に対応した、オリジナルブロック、追加ブロック、マージブロックのフラッシュメモリ上での存在状態と、各ブロックに格納されるSQNの関係を示している。
先に説明したように、SQNは、ブロックにおける先頭ページに、LBA、LPAなどともに格納される。つまり、オリジナルブロック、追加ブロック、マージブロックの種類にかかわらず、そのブロックの作成開始時に先頭ページを書き込むのと同時に書き込まれるものとなる。また、このSQNは、データ書き込み時におけるブロックの作成順に応じた連番が付される。従って、オリジナルブロックに対して追加ブロック、マージブロックが作成されたとすると、オリジナルブロック、追加ブロック、マージブロックの順で、SQNが連続する。つまり、例えばオリジナルブロックのSQNについてNで表すとすれば、追加ブロックのSQNはN+1、マージブロックのSQNはN+2で表される。
そして、状態1にあっては、SQN=Nのオリジナルブロックと、SQN=N+1の追加ブロックが存在し、マージブロックは未だ存在していないことになる。
状態2にあっては、SQN=Nのオリジナルブロックと、SQN=N+1の追加ブロックと、SQN=N+2のマージブロックが存在することになる。
状態3にあっては、SQN=Nのオリジナルブロックと、SQN=N+2のマージブロックが存在することになる。追加ブロックはブロック消去の処理により消去されて存在しない。
状態4にあっては、追加ブロック及び元のオリジナルブロックがブロック消去により存在していないので、SQN=N+2のマージブロックのみがオリジナルブロックとして存在していることになる。
続いて、これまでに説明した本実施の形態のデータ書き込み処理の手順を、図15〜図17のフローチャートにより説明していくこととする。
これらの図に示す手順は、例えば制御部11におけるハードウェア構成部位であるCPUが、例えば記憶部14に記憶されるプログラムをRAM13に展開して実行することにより得られる、フラッシュメモリドライバ層が実行する処理手順としてみることができる。
なお、このようなプログラムは、例えば製造過程において記憶部14に書き込んで記憶させるほか、例えばリムーバブルの記憶媒体に記憶させておいて、後から、この記憶媒体を使用してインストールするようにして携帯型コンテンツプレーヤ1に対して記憶させることも考えられる。また、ネットワーク上のサーバなどにおける記憶装置に記憶させておき、ネットワーク経由でダウンロードするようにして取得して携帯型コンテンツプレーヤ1にインストールするようなことも考えられる。この点については、図17より以後にて説明するフローチャートについても同様である。
フラッシュメモリに対するデータ書き込みは、例えばフラッシュメモリドライバが、図15のステップS201により、上位のファイルシステム層からのデータ書込要求を受け取り、この要求に応答したステップS202以降の処理を実行していくことで開始されるものとなる。なお、このデータ書き込み要求は、書き込むデータへのポインタ、書き込むべきセクタの先頭番号、及び書き込みデータのセクタ数等を指定する。
ステップS202においては、データ書き込み要求に応じてデータを書き込むべきブロックをLBAにより特定した上で、この書き込み対象のLBAに対して追加ブロックが作成済み(割当済み)となっているか否かについて判別する。このためには、例えばRAM13に保持させている追加ブロック管理テーブルを参照して、書き込み対象のLBAが登録されているか否かについて判別すればよい。
ここで、肯定の判別結果が得られたのであれば、データの書き込み対象はさしあたり追加ブロックということになるので、ステップS203に進んで、追加ブロックにおける最初の空きページまでアクセスするようにされる。なお、追加ブロックの最初の空きページまでのアクセスは、追加ブロック管理テーブルにおいて書き込み対象のLBAに対応付けられているPBAが示すブロックにアクセスした上で、例えば先頭ページから、未使用となっているページが検出されるまで、ページ探索を行えばよい。未使用ページは、フラッシュメモリでは、全て1を書き込んだ状態となっている。
一方、ステップS202において否定の判別結果が得られたのであれば、データの書き込み対象はさしあたりオリジナルブロックということになるので、ステップS204により、オリジナルブロックにおける最初の空きページまでアクセスするようにされる。オリジナルブロックへのアクセスは、例えばRAM13に保持させているPBAテーブルを参照して、書き込み対象のLBAに対応付けられているPBAを取得し、このPBAが示すブロックにアクセスすればよい。
ステップS203、ステップS204の処理に続いては、ステップS205により、現段階において、ステップS201の要求に応じた全てのデータの書き込みが完了したか否かについて判別することとしており、ここで肯定の判別結果が得られれば、ステップS201の要求に応じたデータ書き込み処理を終了させる。これに対して、否定の判別結果が得られたのであれば、ステップS206に進む。
ステップS206では、現時点において書き込み対象となっているブロック(現書込ブロック)のデータ書き込み状態がfullであるか否かについて、つまり、ブロック内の全てのページがデータ書込済み(使用済み)の状態であるか否かについて判別することとしている。ここで、否定の判別結果が得られたのであれば、現書込ブロックには、空きページが存在することになる。そこで、ステップS213により、ページ単位でのデータ書き込みを実行し、ステップS205の判別処理に戻るようにされる。そして、現書込ブロックに空きページが存在しない状態となっていることに応じてステップS206にて肯定の判別結果が得られたのであれば、ステップS207に進む。
ステップS207においては、上記ステップS206に対応して空きページがない状態であることが認識された現書込ブロックについて、これが追加ブロックとオリジナルブロックの何れであるのかについて判別する。この判別は、これまでのデータ書き込み処理過程の進行状況に応じて判別することが可能であるし、現書込ブロックの実際のPBAと、PBAテーブル及び追加ブロック管理テーブルを照らし合わせることでも判別可能である。
先ず、ステップS207において、現書込ブロックが追加ブロックであると判別された場合には、ステップS208によりマージ処理を実行する。つまり、この段階では、現書込ブロックである追加ブロックと、対応するオリジナルブロックでともに、空きページの存在しない状態となっているので、ステップS208により、図11に示したマージ処理、あるいは図12に示した例外マージ処理を実行し、再構築されたオリジナルブロックを生成するものである。そして、ステップS205の手順に戻るようにされる。
次にステップS207において、現書込ブロックがオリジナルブロックであると判別された場合には、ステップS209〜S212の処理を行う。ステップS209〜S212の処理は、これまで書き込み対象としていたオリジナルブロックに対応して割り当てるべき追加ブロックを確保するための手順となる。
ステップS209においては、現段階における追加ブロックの割り当て状況として、使用可能最大数に対応する全ての追加ブロックが、他のオリジナルブロックに割り当て済みとなっているか否かについて判別する。このためには、RAM13に保持されている追加ブロック管理テーブルを参照して、ここに登録されている追加ブロック数が、使用可能最大数(本実施の形態では10個)以上であるか否かについて判別することとすればよい。
このステップS209にて、否定の判別結果が得られた場合にはステップS210、S211をスキップしてステップS212に進み、ここで、現在未使用となっているブロックのうちから所定規則に従って選択した1つのブロックを追加ブロックとして割り当てるための処理を実行する。つまり、この選択したブロックが新規の追加テーブルとして管理されるように追加ブロック管理テーブルを更新する。このためには、例えばRAM13上の追加ブロック管理テーブルに対して、このブロックのPBAと、対応付けられるオリジナルブロックのLBAとを、空き行における先頭に登録することになる。そして、ステップS205に戻る。なお、この図の処理の流れでは、ステップS212により新規に作成された追加ブロックに対する最初のデータの書き込みは、ステップS212から、ステップS205、S206による否定判別結果を経てステップS213に至ったときに実行される。
一方、ステップS209にて肯定の判別結果が得られた場合には、ステップS210、S211の手順を実行してからステップS212に進む。
ステップS210では、追加ブロック管理テーブルを参照して、最も以前に登録された追加ブロックを探索するようにされる。先に図10により説明したようにして、追加ブロック管理テーブルにおける登録管理の形態によっては、最も以前に登録された追加ブロックは、登録された追加ブロックのうちで、最も大きい行番号に対して登録されているので、この場合には、追加ブロック管理テーブルにおける最後の行に対して登録されている追加ブロックが、最も以前に登録された追加ブロックとして探索されることになる。
そして、次のステップS211においては、上記ステップS210により探索された追加ブロックと、この追加ブロックが割り当てられているオリジナルブロックとを利用したマージ処理を実行するようにされる。
このステップS211のマージ処理が実行されることによっては、ステップS210により探索した追加ブロックの登録が削除されることになる。つまり、この段階で、使用済みとなっている追加ブロック数は、最大数−1(本実施の形態では9個)となり、現書込ブロックとしてのオリジナルブロックに対して追加ブロックを割り当てることが可能になるものである。換言すれば、ステップS210、ステップS211の手順は、今回の現書込ブロックに対応する追加ブロックを確保するための手順となるものであり、そのために、オリジナルブロックに割り当て済みの追加ブロックのうちで、最も過去に登録されたものについての割り当てを解放するものである。
ここで、ステップS211において、最も過去に登録された追加ブロックを解放することとしているのは次のような理由による。
データ書込要求に応じてデータを書き換えることとなるフラッシュメモリ上の論理的な領域は、分散するのではなく、むしろ集中する傾向にあることが分かっている。ファイルの更新などを例にとってみると、ファイル更新に際しては、更新したファイルのデータの書き込みのほかに、必然的に、ファイルシステムに対応するファイル管理情報などのシステムデータについての更新も行われる。具体的に、FATファイルシステムの場合であれば、FAT(File Allocation Table)といわれるクラスタチェインによりファイルデータの論理的な連結を管理するテーブル情報と、ディレクトリエントリといわれるディレクトリ構造を管理する情報を書き換えることになる。そして、このようなファイル管理情報は、例えば1ファイルの更新に応じては、そのファイルに対応した内容を記憶している特定の領域が集中して書き換えられることになるわけである。
このようなことから、実際のこととして、追加ブロックは過去に登録されたものほど使用される頻度が少なくなっていくという傾向になり、或る一定数よりも以前の追加ブロックについては、ほとんど使用されないという状況となることが確認されたものである。本実施の形態において、追加ブロック数に制限を与えているのは、上記した事実に鑑みて、いたずらに追加ブロックを多くしても、追記などが行われずに放置に近い状態の追加ブロックが増えるだけであって効率的でない、ということもその理由となっている。
そして、このことからすれば、追加ブロックが不足した場合には、ステップS210、S211のようにして、最も以前の追加ブロックを解放するという手順とすることが、新規追加ブロックを確保するための最も合理的なアルゴリズムの1つである、ということになるわけである。
続いては、上記図15のステップS208あるいはステップS211により実行される、マージ処理の手順について、図16及び図17を参照して説明する。
マージ処理としては、先ず、図16のステップS301として示すように、マージ処理に用いられる追加ブロックの書き込み内容として、PBA順に従って書き込まれているページデータは、LPA=0x00からはじまって順次書き込みされているか否かについて判別することとしている。つまり、例えば図12(b)により説明したような追加ブロックのデータ書き込み内容であるか否かについて判別するものである。
このステップS301において肯定の判別結果が得られた場合には、図12にて説明した例外マージ処理を実行すべきことになる。このために、ステップS302、S303の手順を実行する。
例えばステップS302では、これまでの追加ブロックが新規にオリジナルブロックとして管理されるようにする。つまり、PBAテーブルにおいて、元のオリジナルブロックのPBAが登録されていたLBAへの対応を、これまでの追加ブロックのPBAに変更する。このPBAテーブルの書き換えにより、管理情報のうえで、元のオリジナルブロックは未使用ブロックとして管理されることになる。
次に、ステップS303により、元のオリジナルブロックを対象としてブロック消去処理を実行して、物理的にも未使用領域とする。
一方、ステップS301にて否定の判別結果が得られた場合には、例えば図11により説明した通常マージ処理を実行する。この通常マージ処理の手順を図17に示す。
通常マージ処理としては、先ず、図17のステップS401として示すように、未使用ブロックとして管理されるブロックのうちからマージブロックに使用するブロックを確保するようにされる。
次のステップS402においては、マージ処理に際して、マージブロックの先頭ページに書き込むべき、追記用の書き込みデータが在るか否かについて判別する。この判別は、実質的には、ステップS208のケースでのマージ処理であるのか、ステップS211のケースでのマージ処理であるのかの判別にも相当する。
ステップS208のマージ処理の場合には、図11(c)に示すようにして、マージブロックの先頭に書き込むべき、追記のためのページデータが用意されている。これに対して、ステップS211のマージ処理は、追加ブロックを1つ解放することを目的として行われるもので、従って、マージ処理にあっては、マージブロックの先頭ページに書き込むべき追記のデータは無い、マージブロックに対しては、先ず、先頭ページから順次、追加ブロックから探索した有効なページデータが書き込まれていく。
ステップS402にて肯定の判別結果が得られた場合には、ステップS403により、追記用の書き込みデータを、マージブロックの先頭ページに対して書き込んだうえで、ステップS404−1〜S404−2で括られるループ処理を実行する。これに対して、ステップS402にて否定の判別結果が得られた場合には、ステップS403をスキップして、ステップS404−1〜S404−2で括られるループ処理を実行する。
ループ処理S404−1〜S404−2としては、ページ順(PPAに対応する)を示す変数iについて初期値として64を設定し、ステップS405〜S407の手順を実行するごとに変数iを1デクリメントしていくようにされる。そして、i>0となる条件を満たした段階で、このループ処理を終了させる。ここで変数iの初期値は、ブロックにおけるページ数に対応する。つまり、ここでは、図11における例と同様に、ブロック内ページ数が64である場合を前提としている。
ステップS405では、追加ブロックにおけるページiのデータを読み込んで取得する。ステップS406では、上記ステップS406により読み込んだページデータの冗長部(予備領域)に格納されるものと同じLPAを格納するページデータが、既にマージブロックに書き込まれているか否かについて判別し、肯定の判別結果が得られれば、このまま次の回のループ処理に進む。これに対して、否定の判別結果が得られたのであれば、ステップS407によりマージブロックにおける空きページの先頭に対して、ステップS405により読み込んだデータを書き込み、次回のループ処理に進む。
このループ処理により、図11にて説明したように、追加ブロックの最終ページから有効ページデータを探索してマージブロックの空きページの先頭に対して順に書き込んでいくという処理が行われていくものであり、ループ処理が完了した段階では、追加ブロックに書き込まれていた全ての有効ページデータがマージブロックに書き込まれていることになる。
続いては、ループ処理S408−1〜S408−2を実行する。このループ処理としても、変数i=64で初期化したうえで、ステップS409〜S411の処理を実行するごとに変数iを1デクリメントしていき、i>0の条件を満たしたところでループ処理を抜ける。
ステップS409では、オリジナルブロックにおけるページiのデータを読み込んで取得する。ステップS410では、上記ステップS409により読み込んだページデータの冗長部(予備領域)に格納されるものと同じLPAを格納するページデータが、既にマージブロックに書き込まれているか否かについて判別し、肯定の判別結果が得られれば、このまま次の回のループ処理に進む。これに対して、否定の判別結果が得られたのであれば、ステップS411によりマージブロックにおける空きページの先頭に対して、ステップS409により読み込んだデータを書き込み、次回のループ処理に進む。
このループ処理によっては、図11における、オリジナルブロックの最終ページから有効ページデータを探索してマージブロックの空きページの先頭に対して順に書き込んでいくという処理が行われていくものであり、ループ処理が完了した段階では、オリジナルブロックに書き込まれていた全ての有効ページデータがマージブロックに書き込まれていることになる。そして、この段階において、マージブロックにおけるデータ書き込み内容としては完成した状態が得られたことになる。
ステップS412においては、これまでの処理により作成されたマージブロックを、新規にオリジナルブロックとして設定(登録)するために、PBAテーブルの更新を行う。続いて、ステップS413により、マージ対象となっていた追加ブロックを、追加ブロック管理テーブルから削除すると共に、追加ブロックに対するブロック消去を行うようにされる。これにより、追加ブロックは、未使用ブロックとなる。また、ステップS414により、元のオリジナルブロックについてブロック消去の処理を行い、これについても未使用ブロックとする。
ところで、例えばデータ書き込み中において電源が遮断されるなどしてデータ書き込みが強制的に中断された場合には、フラッシュメモリ上での実際のデータの書き込み結果と、PBAテーブルなど(本実施の形態では追加ブロック管理テーブルも含まれる)の管理情報の内容とが一致しない不整合の状態が生じ得る。このような不整合の状態が生じたままでは、以降の正常なデータの書き込み、読み出しを期待することができない。そこで、例えばフラッシュメモリのメモリドライバが起動するときなどにおいては、前回のデータ書き込みが正常終了したのか否かについて判定し、正常終了していない場合においては、例えば実際のデータ書き込み結果を検証しながら、管理情報を再構築することが行われる。
図18は、本実施の形態における再構築処理例を示している。例えばフラッシュメモリドライバが起動時において、前回のデータ書き込みが正常終了していないことを判別したとされると、この図18に示す手順を実行することになる。なお、前回のデータ書き込みが正常終了したか否かについての判別を可能とするためには、データ書込時において、その処理の進行状況を示す情報を生成して、例えば逐次、フラッシュメモリの所定領域に書き込んでおくようにされる。起動時において、この情報を参照すれば、前回のデータ書き込みが正常終了したか否かを判定できることになる。
このための処理としては、先ず、ループ処理S501−1〜S501−2を実行する。このループ処理では、ページ順(PPAに対応する)を示す変数iについて初期値として0を設定し、ステップS502〜S508の手順を実行するごとに変数iをインクリメントしていくようにされる。そして、変数iが総ブロック数を越えた段階で、このループ処理を終了させる。この場合の変数iは、例えば物理ブロックアドレスに対応するものと考えればよい。
ステップS502は、ブロックの探索処理となるもので、ブロックiの先頭ページ(PPA=0)にアクセスして、このページの予備領域に書き込まれているLBAを取得する。ステップS503では、上記ステップS502により取得されたのと同じLBAのブロックが、これまでの再構築処理の過程でPBAテーブルに登録済みとなっているか否かについて判別する。つまりPBAテーブルにおいて、ステップS502により取得されたのと同じLBAに対して、既に他のブロックのPBAが対応付けられているのか否かについて判別する。
ステップS503において否定の判別結果が得られた場合には、ステップS504に進んで、ブロックiをPBAテーブルに登録する。つまり、PBAテーブルにおける、ブロックiのLBAの位置に対して、このブロックiのPBAを対応させるようにして書き込む。
ステップS503において肯定の判別結果が得られた場合には、ステップS505以降の手順に進む。
ステップS505においては、ステップS503により取得したブロックiのLBAに対応して、既に他のブロックが追加ブロックとして登録済みとなっているか否かについて判別する。このためには、これまでの再構築処理の過程により作成された追加ブロック管理テーブルの内容を参照することになる。
ステップS505において否定の判別結果が得られた場合には、同じLBAを持つことなるPBAのブロックが2つ存在しており、さしあたり、先に探索された一方のブロックは、オリジナルブロックとして登録されている状態になることになる。しかしながら、同じLBAのブロックがもう1つ探索されたことで、これら2つの何れがオリジナルブロックで追加ブロックであるのかについては、未確定になる。そこで、このことを確定するために、ステップS506の手順を行う。
ステップS506では、これら2つのブロックのSQNを比較する。SQNも、ブロックにおける先頭ページの予備領域に格納されている。図14にて説明したように、同一LBAのブロックが2つ存在する状態としては、状態1と状態3とが考えられるが、ステップS506に至るには、ステップS505にて追加ブロックは登録されていないことが判定されていることで、さしあたり、マージブロックが存在する可能性は考慮しなくてもよい段階にある。そこで、ステップS506としては、SQNを比較してみて、この値が大きいほうのブロックを、追加ブロック管理テーブルに対して追加ブロックとして登録するようにされる。またSQNの小さい方はPBAテーブルに登録してオリジナルブロックとして管理されるようにしておく。
これに対して、ステップS505にて肯定の判別結果が得られた場合には、ブロックiと同じLBAを持つ、異なるPBAのブロックが、既にPBAテーブルに登録されていると共に、追加ブロック管理テーブルにも登録されていることになる。つまり、同じLBAのブロックが3つ存在していることになる。このことは、同一LBAに対応して、オリジナルブロック、追加ブロックに加えて、マージブロックも残ってしまっている状態でフラッシュメモリ上で存在していることを意味する。つまり、状態2に対応した期間においてデータ書き込みが中断した場合に対応する。
そこでこの場合には、ステップS507により、これら3つのブロックのSQNを比較し、SQNの値が最大のブロックについてブロック消去の処理を実行する。つまり、マージブロックを消去する。状態2に対応する期間においてデータ書き込みが中断したということは、図13からも理解されるように、マージブロックが未完成である可能性が避けられない。そこで、マージブロックについて消去して無効としてしまうようにする。
これにより、同一LBAのブロックが2つになるので、次のステップS508により、先のステップS506と同様にして、SQNの大きいほうのブロックを追加ブロックとして登録し、小さい方のブロックを、オリジナルブロックとしてPBAテーブルに登録する。
ループ処理S501−1〜S501−2としては、全てのブロックを探索していきながら、上記ステップS502〜S508までの手順を繰り返し行うようにされる。そして、ループ処理S501−1〜S501−2が完了した段階では、ひととおり、PBAテーブルと追加ブロック管理テーブルが再構築された状態となる。
上記ループ処理S501−1〜S501−2を抜けると、続いては、ループ処理S509−1〜S509−2を実行する。このループ処理は、現段階で追加ブロック管理テーブルに登録されている全ての追加ブロックごとに、ステップS510〜S514を実行するものとなる。
ステップS510においては、追加ブロック管理テーブルに登録されている1つの追加ブロックと、これに対応して同じLBAが対応付けられたオリジナルブロックのSQNを取得し、ステップS512により、このSQNが連続しているか否かについて判別する。なお、SQNは、図3の例では1バイトとされており、従って、その数値範囲としては0〜255となる。シーケンスナンバは、生成順に従ってブロックに対して連番を付していくのであるが、最大値の255を付した次には0を付すようにして、循環させて用いるようにされている。従って、ステップS510においては、SQNが0、255となっている場合にはSQNが連続しているものとして判別するようにされる。
ステップS511において、先ず、否定の判別結果が得られた場合には、実際には状態3であるということを意味している。つまり、状態3では、図14に示すようにして、マージブロックとオリジナルブロックが存在して追加ブロックが消去された結果となって、同一LBAのブロックごとのSQNは、NとN+1とで不連続になるからである。このとき、先のループ処理S501−1〜S501−2によっては、これらのマージブロックとオリジナルブロックとが、それぞれ追加ブロック、オリジナルブロックとして登録されている場合となる。
状態3の場合には、図13から分かるように、マージブロックは既に完成している。これに対してオリジナルブロックは、マージ前の内容を有している。従って、再構築にあたって、正式なオリジナルブロックとして採用すべきは、マージブロックであることになる。しかしながら、ループ処理S501−1〜S501−2によっては、マージブロックが追加ブロックとして登録され、マージ前のオリジナルブロックがオリジナルブロックとして登録されている状態になっている。そこで、この誤った登録内容を修正するためにステップS512〜S514を実行する。
先ず、ステップS512においては、現在において追加ブロックとして登録されているブロックを、オリジナルブロックとして登録し直すためのPBAテーブルの更新を行い、続くステップS513により、追加ブロック管理テーブルにおけるこのブロックの登録を削除する。さらに、オリジナルブロックとして登録されていたブロックについては、ブロック消去をおこなって未使用状態とする。
ループ処理S509−1〜S509−2としては、このような処理を、追加ブロック管理テーブルに登録されたブロックごとに行う。そして、このループ処理S509−1〜S509−2が終了した段階では、適正な内容の、PBAテーブル及び追加ブロック管理テーブルが再構築されていることになる。
続いては、本実施の形態における変形例について説明する。
これまでの説明にあっては、先ず、オリジナルブロックに空きページが存在する限りは、ここにデータを追記して書き込んでいき、オリジナルブロックの空きページが無くなると、追加ブロックを割り当てて追記を継続させる、ということになっていた。
これに対して、変形例としては、オリジナルブロックにおいて空きページが存在する、しないに関わらず、追記すべきデータが発生したのであれば、追加ブロックを割り当て、この追加ブロックに対するデータの追記を行うように構成するものである。
この変形例に対応した実際例を図19に示す。図19(a)には、64ページからなるオリジナルブロックとして、ページ0、ページ1に対してデータが書き込まれているが、残るページ2〜ページ63は未使用となっている状態のものが示されている。ここで、図19(b)に示すようにして、LPA=0x03のページデータを書き込むべきことになったとすると、図19(a)のオリジナルブロックの空きページではなく、図19(c)に示すようにして、追加ブロックを確保した上で、その先頭ページに対して、ページデータの書き込みを行うようにされる。
なお、この変形例にあっては、オリジナルブロックとして全くページの書き込みが無い(オリジナルページが存在しない)状態においても、ページデータの書き込みは、先ず、追加ブロックとしてのブロックを確保して、このブロックから開始するようにされる。つまり、当初のデータの書き込みは、オリジナルブロックではなく、常に追加ブロックを対象として行われる。データの書き込まれたオリジナルブロックは、追加ブロックに対する書き込みにより空きページが無くなったことに応じてマージ処理が行われることによって生成されることになる。
このことから、変形例としては、オリジナルブロックに対するデータ書き込みは定常的に禁止されているものとして禁止条件を設定しているものとしてみることができる。
この変形例としての構成では、オリジナルブロックに空き領域が存在するのにもかかわらず追加ブロックを優先的に使用することから、一見、記憶容量の使用効率が良くないようにみえる。しかしながら、実際におけるデータ書き込み態様によっては、このことは特に問題にならなくなる。例えば本実施の形態の携帯型コンテンツプレーヤなどでもそうであるように、ブロックに対して空き領域が存在するような書き込み結果となることは稀で、ほとんどの場合、ブロック内の全ページが使用されるような状態でデータの書き込みは行われる。こうしてみると、データ書き込みの発生に応じては、即座に追加ブロックを作成することが通常であり、オリジナルブロックに対して空き領域が存在するような状態のほうが例外的であるということになる。このようなことを考慮すると、変形例に応じたデータ書き込みのアルゴリズムを採用しても特に問題はないものであり、かえって効率的になってくる場合があると考えられる。例えば、先の実施の形態に応じたデータ書き込みでは、データ書込要求に応じたデータ書き込み対象が、オリジナルブロックと追加ブロックの2つとなるので、例えばプログラムなどの実際の部分では、これに対応した設計を行う必要がある。これに対して、変形例に応じたデータ書き込みでは、新規なデータの書き込みは、常に、追記ブロックのみを対象とすればよい。このような差違が、例えばより簡易なプログラムの構造になるなどの利点になってくる。
図20は、上記図19により説明した変形例に対応したデータ書き込みのための手順をフローチャートとして示している。なお、この図において、図17と同じ処理内容のステップについては、適宜、その対応を示していくとともに説明を省略する。
ステップS601、S602については、図17のステップS201,S202と同様にして、データ書き込み要求に応じたデータ書き込み処理として、先ず、書き込み対象のLBAに対して追加ブロックが作成済み(割当済み)となっているか否かについて判別する。そして、肯定の判別結果が得られた場合には、ステップS608に進む。これに対して、否定の判別結果が得られた場合には、ステップSステップS604以降の手順を行う。
ステップS604〜S607は、図15におけるステップS209〜S212の手順と同じになるものである。つまり、追加ブロックの割り当ての処理を実行する。変形例では、オリジナルブロックに対する追記を行わないことから、ステップS602により追加ブロックが割り当てられていなければ、まずは、追加ブロックの割り当てを行うことになるものである。ステップS604〜S607の手順を完了すると、ステップS608に進む。
ステップS608では、図17のステップS205と同様に、今回のデータ書込要求に応じた全てのデータの書き込みが完了したか否かについて判別し、肯定の判別結果が得られれば、今回のデータ書き込み処理を終了させる。否定の判別結果が得られたのであれば、ステップS609、S611により、現書込ブロック(変形例では追加ブロック)のデータ書き込み状態がfullとなることが判別されるまで、PBA順によるページ単位でのデータ書込が繰り返されていく。そして、追加ブロックの最終ページまで書き込みが実行され、かつ、未だデータ書込が終了していなければ、ステップS610によりマージ処理を実行することになる。変形例では、ステップS609により肯定の判別結果が得られるのは、追加ブロックがfullとなる場合のみであり、オリジナルブロックがfullとなることはない。従って、ステップS610のマージ処理を行うのにあたっては、これまでの現書込ブロックがオリジナルブロックであるのか、マージブロックであるのかを判定しておく必要がない。そして、ステップS611によるマージ処理が完了して、新規にオリジナルブロックが作成されたとすると、ステップS604以降の処理に戻るようにされる。これにより、新規に作成されたオリジナルブロックに対して追加ブロックが割り当てられ、この追加ブロックに対するデータの追記を行っていくことが可能になる。
なお、ステップS208、S211のマージ処理については、先に説明した図16、図17と同様でよいものとされる。
続いては、本実施の形態のデータ書き込みに対応する、データ読み出しの手順例について、図21のフローチャートを参照して説明する。この図には、1つのブロックデータを読み出す場合の手順例を示している。また、この場合においても、1ブロックは64ページから成る場合を例に挙げている。
ブロックデータ読み出しのためには、先ず、ステップS701により、読み出し対象としているブロックデータのLBAに対応して、オリジナルブロックに対して追加ブロックが割り当てられた状態であるか否かについて判別する。
先ず、ステップS701にて肯定の判別結果が得られた場合には、ループ処理S702−1〜S702−2を実行する。ループ処理S702−1〜S702−2は、ページ順(PPAに対応する)を示す変数iについて初期値として64を設定し、ステップS703〜S705の手順を実行するごとに変数iを1デクリメントしていくようにされる。そして、i>0となる条件を満たした段階で、このループ処理を終了させる。
ステップS703では、追加ブロックにおけるページiのデータを読み込んで取得する。ステップS704では、上記ステップS703により取得したページデータの冗長部(予備領域)に格納されるものと同じLPAを格納するページデータが、既に有効読出データとして保持されているか否かについて判別し、肯定の判別結果が得られれば、このまま次の回のループ処理に進む。これに対して、否定の判別結果が得られたのであれば、ステップS705により、ステップS703により読み込んだデータを有効読出データとしてRAM上で保持して、次回のループ処理に進む。
つまり、ループ処理S702−1〜S702−2は、追加ブロックの最終ページから先頭ページにかけて、読出データとして有効なページデータ(有効読出データ)を探索し、これをRAM上で保持させていく処理となる。
上記ループ処理S702−1〜S702−2の手順を終了した後は、ループ処理S706−1〜S706−2を実行する。ループ処理S706−1〜S706−2も、ページ順を示す変数iについて初期値として64を設定し、i>0となる条件を満たすまで、ステップS707〜S710を実行するごとに変数iを1デクリメントしていく手順を繰り返すようにされる。
ステップS707では、オリジナルブロックにおけるページiのデータを読み込んで取得し、次のステップS708により、上記ステップS707により取得したページデータの冗長部(予備領域)に格納されるものと同じLPAを格納するページデータが、既に有効読出データとして保持されているか否かについて判別し、肯定の判別結果が得られれば、さらにステップS710により、現在の有効読出データ数がブロック内ページ数の64となったか否かについて判別する。ここで否定結果が得られたのであれば、次の回のループに進むが、肯定の判別結果が得られた場合には、ブロックを形成する全ての有効読出データをRAMに保持させたことになるので、ループ処理S706−1〜S706−2を抜ける。
このようにして、ループ処理S706−1〜S706−2を抜けた段階では、オリジナルブロックから全ての有効読出データが探索され、これがRAM上で保持されることになる。
ステップS711に至った段階では、追加ブロックとオリジナルブロック、あるいは、オリジナルブロックのみから読み出された全ての有効読出データが保持されている状態にある。
ステップS711では、RAM上に保持されている有効読出データについてLBA順に配列させる処理を行う。つまり、有効読出データは、ページデータの構造とされてデータ部と冗長部からなり、さらにページデータごとの冗長部の予備領域にはLPAが格納されている。ステップS711では、この予備領域のLPAを参照して、先ず、LPAの値の一番小さい有効読出データ(ページデータ)のデータ部を抜き出して先頭に配置し、続いて、次に大きい値のLBAを格納する有効読出データのデータ部を抜き出して、先頭に続けて配置する。この手順を、全ての有効読出データについて行っていくようにされる。この結果、論理的に正常に配列された1ブロック分の読出データ(ブロック読出データ)が形成されることになる。
また、ステップS701にて追加ブロックの割り当ては無く、オリジナルブロックのみであるとして否定の判別結果が得られた場合にはステップS712に進む。
ステップS712では、オリジナルブロック内のページデータに格納されるLPAを参照することで、このオリジナルブロックは、PPA=0(0x00)〜63(0x3F)の昇順に応じて、LPA=0(0x00)〜63(0x3F)の順で書き込まれた状態となっているか否かについて判別する。
ステップS712により否定の判別結果が得られた場合には、オリジナルブロック内のページデータは、LPA順に従って書き込まれていないことになるので、ステップS706−1〜S706−2のループ処理に移行することで、有効読出データを探索して取得することになる。
これに対してステップS712により肯定の判別結果が得られた場合には、ステップS713により、オリジナルブロックからPPA順に従ってページデータの読み出しを行って、そのデータ部を読み出し順に従って配列させていくことで、ブロック読出データを形成する。
そして、ステップS714により、上記ステップS713、あるいはステップS711により形成されたブロック読出データを、例えば上位処理層に対して受け渡すようにされる。
ここで参考として、図22に、本実施の形態と従来のデータ書き込み速度の測定結果を示しておく。この図では、縦軸に書き込み時間を示し、横軸に書き込みを行ったファイルのデータサイズ(ファイルサイズ)を示している。そして、図において下側の曲線が本実施の形態に対応する特性を示しており、上側の曲線が従来に対応する特性を示している。なお、ここでは、実施の形態のデータ書き込み処理として変形例を採用した場合の測定結果を示しているが、先に説明した実施の形態のデータ書き込み処理についても、同等の測定結果が得られる。また、従来のデータ書き込み処理とは、図4及び図5により説明したような、データ更新のためにブロック交替処理を伴うものである。
この図から分かるように、同じファイルサイズに対するデータ書き込み処理時間は、本実施の形態のほうが短くなっている。つまり、データ書き込みの高速化が図られているものである。そして、本実施の形態によっては、特に、ファイルサイズが小さくなるほど、その効果が顕著になっている。
例えば従来では、先にも説明したように、ブロック交替処理を伴うことで、書き込みデータサイズが小さいほど、データ書き込み時においてブロック消去時間の占める割合が非常に高くなる。このために、特性としても、ファイルサイズが100000バイトあたりより小さくなると、これ以上データ書き込み時間が短くならずに、約0.12秒でとどまってしまっている。
これに対して、本実施の形態の特性では、特に、ファイルサイズが小さいときのデータ書き込み時間が大幅に短縮されていることが分かる。例えば矢印Aにより示されている位置では、本実施の形態のデータ書き込み時間は、従来に対して1/10程度にまで短縮されているものである。このことから、本実施の形態のデータ書き込みを実際に採用した場合には、例えば小さいファイルを書き込む場合や、ファイルシステムなどのシステム情報などのサイズの小さいデータを書き換えるような場合において、その書き込み時間の短縮効果が非常に有効にはたらくということがいえる。
なお、本願発明としては、これまでに説明した実施の形態としての構成に限定されるものではない。
例えば、実施の形態としては、コンテンツファイル、プログラムなどを記憶させるための記憶媒体としてフラッシュメモリを備える携帯型コンテンツプレーヤに、本願発明を適用しているが、これ以外のフラッシュメモリを備える電子機器、装置全般に適用することができる。現状であれば、例えばフラッシュメモリにより構成される各種リムーバブル形式の記憶装置や、USBメモリなどといわれる、USB(Universal Serial Bus)端子に差し込むようにして使用する、フラッシュメモリを内蔵した記憶装置などが考えられる。
また、例えば将来的にフラッシュメモリ以外で、同様のブロック、ページ構造のフォーマットをとるような半導体メモリ装置が現れたような場合にも、これらの半導体メモリ装置に対して本願発明を適用できる。
本発明の実施の形態としての記憶媒体制御装置が適用される携帯型コンテンツプレーヤの構成例を示すブロック図である。 フラッシュメモリの物理構造を示す図である。 ページの構造を示す図である。 フラッシュメモリに対するデータ更新処理(ブロック交替処理)と、論理アドレス及び物理アドレスの概念を示す図である。 ブロック交替処理時におけるページ単位のデータ書き込み動作例を示す図である。 論理−物理アドレス変換テーブル(PBAテーブル)の構造を概念的に示す図である。 実施の形態としてのページ単位でのデータ書き込み動作を示す図である。 図7に示したデータ書き込み動作に応じた論理ページアドレスの割り当て方を示す図である。 実施の形態における追加ブロックに対するデータ書き込み処理例を示す図である。 追加ブロック管理テーブルの構造例を示す図である。 実施の形態におけるマージ処理の具体例を示す図である。 例外のマージ処理の具体例を示す図である。 マージ処理の具体的手順と、ブロック形成の状態例との対応を示す図である。 図13に示したブロック形成の状態を、ブロックの存在状況と、ブロックが格納する連番(SQN)の付与状況とにより示す図である。 実施の形態のデータ書き込み処理の手順例を示すフローチャートである。 実施の形態のマージ処理の手順例を示すフローチャートである。 実施の形態における通常マージ処理のための手順例を示す図である。 実施の形態のPBAテーブルと追加ブロック管理テーブルの再構築処理のための手順例を示すフローチャートである。 本実施の形態のデータ書き込み処理の変形例を示す図である。 実施の形態の変形例に応じたデータ書き込み処理の手順例を示すフローチャートである。 実施の形態に対応したデータ読出処理の手順例を示すフローチャートである。 実施の形態と従来のデータ書き込み時間についての測定結果を示す図である。
符号の説明
1 携帯型コンテンツプレーヤ、11 制御部、12 ROM、13 RAM、14 記憶部、15 オーディオ再生処理部、16 ヘッドフォン端子、17 表示処理部、18 表示部、19 操作部、20 外部データインターフェイス

Claims (14)

  1. 記憶媒体の記憶領域を所定の固定長により区切るようにして形成されるデータ消去の最小単位となる第1単位領域の物理アドレスである第1物理アドレスと、この第1単位領域に書き込まれるデータ内容に対応付けられる論理アドレスである第1論理アドレスとの対応を示すアドレス対応情報を管理するアドレス対応情報管理手段と、
    上記第1単位領域を所定の固定長により区切るようにして形成されるデータ書き込みの最小単位となる第2単位領域の物理アドレスである第2物理アドレスの順に従ってデータを書き込んでいく書き込み処理と、第2単位領域に書き込まれたデータごとについて、第2単位領域に書き込まれるデータ内容に対応付けられる論理アドレスである第2論理アドレスを対応付けておくようにするアドレス設定処理とを実行するデータ書き込み実行手段と、
    上記データ書き込み実行手段によりデータ書き込みを実行すべきときにおいて、データが書き込まれるべき本来の第1単位領域についてのデータの書き込みが禁止となる所定の条件を満たしている場合には、未使用の第1単位領域を追加用第1単位領域として確保して、この追加用第1単位領域に対して上記データ書き込み実行手段によるデータ書き込みを実行させる、データ書き込み制御手段と、
    上記追加用第1単位領域について、対応する本来の第1単位領域と同じ第1論理アドレスが対応付けられて管理されるようにする追加用第1単位領域管理手段と、
    を備えることを特徴とする記憶媒体制御装置。
  2. 上記データ書き込み実行手段は、
    上記アドレス設定処理として、論理アドレスを第2単位領域における所定位置に書き込むための処理を実行するようにされる、
    ことを特徴とする請求項1に記載の記憶媒体制御装置。
  3. 上記所定の条件を満たしているか否かを判別する条件判別手段をさらに備え、
    上記条件判別手段は、
    上記本来の第1単位領域において未使用の第2単位領域が存在していない場合に、上記所定の条件を満たしているとの判別結果を得るようにされ、
    上記データ書き込み制御手段は、
    上記判別手段により上記所定の条件を満たしているとの判別結果が得られた場合に、未使用の第1単位領域を追加用第1単位領域として確保して、この追加用第1単位領域に対して上記データ書き込み実行手段によるデータ書き込みを実行させる、
    ことを特徴とする請求項1に記載の記憶媒体制御装置。
  4. 上記データ書き込み制御手段は、
    上位処理層からの要求に応じて上記データ書き込み実行手段が上記書き込み処理の実行を開始すべきとなった場合を、上記所定の条件を満たしている場合としている、
    ことを特徴とする請求項1に記載の記憶媒体制御装置。
  5. 少なくとも、同じ第1論理アドレスが対応付けられた上記本来の第1単位領域と上記追加用第1単位領域との間での識別を可能とするための識別情報を生成する生成手段と、
    生成された上記識別情報を第1単位領域ごとに対応付けるための対応化処理を実行する識別情報設定手段と、
    をさらに備える、ことを特徴とする請求項1に記載の記憶媒体制御装置。
  6. 上記識別情報設定手段は、
    上記対応化処理として、生成された上記識別情報を上記第1単位領域における所定位置に対して書き込むための処理を実行するようにされる、
    ことを特徴とする請求項5に記載の記憶媒体制御装置。
  7. 上記データ書き込み実行手段による上記書き込み処理に際して、上記追加用第1単位領域における未使用の第2単位領域が存在しなくなる状態となった場合に少なくとも対応して、
    未使用の第1単位領域を再構築用第1単位領域として確保して、少なくとも、上記追加用第1単位領域と、対応する本来の第1単位領域とから読み出した有効な第2単位領域のデータを、上記再構築用第1単位領域の第2単位領域に書き込んでいくようにされる再構築用データ書込実行手段と、
    上記再構築用第1単位領域処理手段によりデータが書き込まれた上記再構築用第1単位領域が新規な本来の第1単位領域として管理されるようにするとともに、上記追加用第1単位領域と、元の本来の第1単位領域とについて、未使用として管理されるようにする再構築用領域設定手段と、
    をさらに備えることを特徴とする請求項1に記載の記憶媒体制御装置。
  8. 上記再構築用データ書込実行手段は、
    先ず、追加用第1単位領域における第2単位領域の物理アドレスの降順に従って、未だ上記再構築用第1単位領域に書き込まれていない第2論理アドレスが対応付けられた第2単位領域のデータを探索し、この探索したデータを上記再構築用第1単位領域の第2単位領域に対して書き込んでいくようにされ、
    次いで、元の第1単位領域における第2単位領域の物理アドレスの降順に従って、未だ上記再構築用第1単位領域に書き込まれていない第2論理アドレスが対応付けられた第2単位領域のデータを探索し、この探索したデータを上記再構築用第1単位領域における第2単位領域に対して書き込んでいくようにされる、
    ことを特徴とする請求項7に記載の記憶媒体制御装置。
  9. 上記データ書き込み実行手段による上記書き込み処理に際して、上記追加用第1単位領域における未使用の第2単位領域が存在しなくなる状態となった場合において、この追加用第1単位領域における第2単位領域に書き込まれているデータに対応付けられた第2論理アドレスが、第2物理アドレスの昇順方向に応じて、連続した昇順となっている場合には、
    上記再構築用データ書込実行手段によるデータ書き込みを実行しない代わりに、
    上記再構築用領域設定手段は、上記追加用第1単位領域について新規な本来の第1単位領域として管理されるようにするとともに、元の本来の第1単位領域については未使用として管理されるようにする、
    ことを特徴とする請求項7に記載の記憶媒体制御装置。
  10. 上記データ書き込み制御手段が、未使用の第1単位領域を追加用第1単位領域として確保しようとするのにあたり、追加用第1単位領域が使用可能最大数にまで使用されている状況である場合に対応しては、
    上記再構築用データ書込実行手段は、
    使用中の追加用第1単位領域のうちで最初に使用された追加用第1単位領域から有効な第2単位領域のデータを読み出すようにして処理を実行するようにされている、
    ことを特徴とする請求項7に記載の記憶媒体制御装置。
  11. 第1単位領域における第2単位領域の物理アドレスの降順に従って、未だ探索済みとなっていない第2論理アドレスが対応付けられた第2単位領域のデータを探索し、この探索したデータを有効な単位読み出しデータとして保持していく探索処理を実行する読出データ探索手段と、
    上記読出データ探索手段により保持された単位読み出しデータを、対応付けされている第2論理アドレス順に配列することで正常な読み出しデータを生成する第1の読出データ生成手段と、
    1つの第1論理アドレスに対応付けられている第1単位領域が1つのみ存在するか、あるいは本来の第1単位領域と追加用第1単位領域が存在するかについて判別するアドレス対応状況判別手段と、
    上記アドレス対応状況判別手段により本来の第1単位領域と追加用第1単位領域が存在することが判別された場合においては、
    上記読出データ探索手段は、先ず、上記追加用第1単位領域を対象とする第1の探索処理を実行し、この後に本来の第1単位領域を対象とする第2の探索処理を実行するようにされ、
    上記第1の読出データ生成手段は、上記第1の探索処理と上記第2の探索処理とにより保持されている単位読み出しデータを、対応付けされている第2論理アドレス順に配列することで第1単位領域分の読出データを生成するようにされる、
    ことを特徴とする請求項1に記載の記憶媒体制御装置。
  12. 上記アドレス対応状況判別手段により本来の第1単位領域と追加用第1単位領域が存在することが判別された場合において、さらに、この追加用第1単位領域における第2単位領域に書き込まれているデータに対応付けられた第2論理アドレスが、第2物理アドレスの昇順方向に応じて、連続した昇順となっているか否かについて判別するアドレス順判別手段と、
    上記アドレス順判定手段により肯定の判別結果が得られた場合においては、上記読出データ探索手段と上記第1の読出データ生成手段に代えて、追加用第1単位領域から第2物理アドレスの昇順に従って読み出したデータにより第1単位領域分の読出データを生成する処理を実行するようにされた、第2の読出データ生成手段をさらに備える、
    ことを特徴とする請求項11に記載の記憶媒体制御装置。
  13. 記憶媒体の記憶領域を所定の固定長により区切るようにして形成されるデータ消去の最小単位となる第1単位領域の物理アドレスである第1物理アドレスと、この第1単位領域に書き込まれるデータ内容に対応付けられる論理アドレスである第1論理アドレスとの対応を示すアドレス対応情報を管理するアドレス対応情報管理手順と、
    上記第1単位領域を所定の固定長により区切るようにして形成されるデータ書き込みの最小単位となる第2単位領域の物理アドレスである第2物理アドレスの順に従ってデータを書き込んでいく書き込み処理と、第2単位領域に書き込まれたデータごとについて、第2単位領域に書き込まれるデータ内容に対応付けられる論理アドレスである第2論理アドレスを対応付けておくようにするアドレス設定処理とを実行するデータ書き込み実行手順と、
    上記データ書き込み実行手順によりデータ書き込みを実行すべきときにおいて、データが書き込まれるべき本来の第1単位領域についてのデータの書き込みが禁止となる所定の条件を満たしている場合には、未使用の第1単位領域を追加用第1単位領域として確保して、この追加用第1単位領域に対して上記データ書き込み実行手順としてのデータ書き込みを実行させる、データ書き込み制御手順と、
    上記追加用第1単位領域について、対応する本来の第1単位領域と同じ第1論理アドレスが対応付けられて管理されるようにする追加用第1単位領域管理手順と、
    を実行することを特徴とする記憶媒体制御方法。
  14. 記憶媒体の記憶領域を所定の固定長により区切るようにして形成されるデータ消去の最小単位となる第1単位領域の物理アドレスである第1物理アドレスと、この第1単位領域に書き込まれるデータ内容に対応付けられる論理アドレスである第1論理アドレスとの対応を示すアドレス対応情報を管理するアドレス対応情報管理手順と、
    上記第1単位領域を所定の固定長により区切るようにして形成されるデータ書き込みの最小単位となる第2単位領域の物理アドレスである第2物理アドレスの順に従ってデータを書き込んでいく書き込み処理と、第2単位領域に書き込まれたデータごとについて、第2単位領域に書き込まれるデータ内容に対応付けられる論理アドレスである第2論理アドレスを対応付けておくようにするアドレス設定処理とを実行するデータ書き込み実行手順と、
    上記データ書き込み実行手順によりデータ書き込みを実行すべきときにおいて、データが書き込まれるべき本来の第1単位領域についてのデータの書き込みが禁止となる所定の条件を満たしている場合には、未使用の第1単位領域を追加用第1単位領域として確保して、この追加用第1単位領域に対して上記データ書き込み実行手順としてのデータ書き込みを実行させる、データ書き込み制御手順と、
    上記追加用第1単位領域について、対応する本来の第1単位領域と同じ第1論理アドレスが対応付けられて管理されるようにする追加用第1単位領域管理手順と、
    を記憶媒体制御装置に実行させるプログラム。
JP2006106426A 2006-04-07 2006-04-07 記憶媒体制御装置、記憶媒体制御方法、プログラム Pending JP2007280108A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2006106426A JP2007280108A (ja) 2006-04-07 2006-04-07 記憶媒体制御装置、記憶媒体制御方法、プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006106426A JP2007280108A (ja) 2006-04-07 2006-04-07 記憶媒体制御装置、記憶媒体制御方法、プログラム

Publications (1)

Publication Number Publication Date
JP2007280108A true JP2007280108A (ja) 2007-10-25

Family

ID=38681487

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006106426A Pending JP2007280108A (ja) 2006-04-07 2006-04-07 記憶媒体制御装置、記憶媒体制御方法、プログラム

Country Status (1)

Country Link
JP (1) JP2007280108A (ja)

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008097339A (ja) * 2006-10-12 2008-04-24 Tdk Corp メモリコントローラ、メモリコントローラを備えるフラッシュメモリシステム、並びに、フラッシュメモリの制御方法
JP2009181254A (ja) * 2008-01-30 2009-08-13 Tdk Corp メモリコントローラ、メモリコントローラを備えるフラッシュメモリシステム、並びにフラッシュメモリの制御方法
JP2009211232A (ja) * 2008-03-01 2009-09-17 Toshiba Corp メモリシステム
JP2010503929A (ja) * 2006-09-15 2010-02-04 サンディスク コーポレイション 不揮発性メモリおよびクラスベースの更新ブロック置換規則のための方法
JP2010191782A (ja) * 2009-02-19 2010-09-02 Tdk Corp メモリコントローラ及びメモリコントローラを備えるフラッシュメモリシステム、並びにフラッシュメモリの制御方法
JP2012503234A (ja) * 2008-09-16 2012-02-02 マイクロン テクノロジー, インク. メモリ装置のための組み込みマッピング情報
JP2012033045A (ja) * 2010-07-30 2012-02-16 Toshiba Corp 電子機器およびデータ読み出し方法
JP2013012801A (ja) * 2011-06-28 2013-01-17 Konica Minolta Business Technologies Inc データ記憶制御装置、データ記憶制御方法およびプログラム
JP5679383B2 (ja) * 2011-06-09 2015-03-04 Necディスプレイソリューションズ株式会社 電子機器、電源操作ログ記録方法およびプログラム
JP2015176629A (ja) * 2014-03-17 2015-10-05 日本電気株式会社 アクセス回数カウント装置、メモリシステム、および、アクセス回数カウント方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08221223A (ja) * 1995-02-16 1996-08-30 Mitsubishi Electric Corp 半導体ディスク装置
JP2001521220A (ja) * 1997-10-16 2001-11-06 エム システムズ フラッシュ ディスク パイオニアズ リミテッド 改善されたフラッシュファイルシステム
JP2002366423A (ja) * 2001-06-04 2002-12-20 Samsung Electronics Co Ltd フラッシュメモリの管理方法
JP2004533029A (ja) * 2001-01-19 2004-10-28 サンディスク コーポレイション 不揮発性メモリにおける部分的ブロックデータのプログラミング動作および読出し動作
JP2005505818A (ja) * 2001-09-28 2005-02-24 エム−システムズ フラッシュ ディスク パイオニアーズ リミテッド 順次書き込みのみを用いるフラッシュ管理システム
WO2005066790A1 (en) * 2003-12-30 2005-07-21 Sandisk Corporation Management of non-volatile memory systems having large erase blocks

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08221223A (ja) * 1995-02-16 1996-08-30 Mitsubishi Electric Corp 半導体ディスク装置
JP2001521220A (ja) * 1997-10-16 2001-11-06 エム システムズ フラッシュ ディスク パイオニアズ リミテッド 改善されたフラッシュファイルシステム
JP2004533029A (ja) * 2001-01-19 2004-10-28 サンディスク コーポレイション 不揮発性メモリにおける部分的ブロックデータのプログラミング動作および読出し動作
JP2002366423A (ja) * 2001-06-04 2002-12-20 Samsung Electronics Co Ltd フラッシュメモリの管理方法
JP2005505818A (ja) * 2001-09-28 2005-02-24 エム−システムズ フラッシュ ディスク パイオニアーズ リミテッド 順次書き込みのみを用いるフラッシュ管理システム
WO2005066790A1 (en) * 2003-12-30 2005-07-21 Sandisk Corporation Management of non-volatile memory systems having large erase blocks

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4682261B2 (ja) * 2006-09-15 2011-05-11 サンディスク コーポレイション 不揮発性メモリおよびクラスベースの更新ブロック置換規則のための方法
JP2010503929A (ja) * 2006-09-15 2010-02-04 サンディスク コーポレイション 不揮発性メモリおよびクラスベースの更新ブロック置換規則のための方法
JP2008097339A (ja) * 2006-10-12 2008-04-24 Tdk Corp メモリコントローラ、メモリコントローラを備えるフラッシュメモリシステム、並びに、フラッシュメモリの制御方法
JP4609406B2 (ja) * 2006-10-12 2011-01-12 Tdk株式会社 メモリコントローラ、メモリコントローラを備えるフラッシュメモリシステム、並びに、フラッシュメモリの制御方法
JP4687720B2 (ja) * 2008-01-30 2011-05-25 Tdk株式会社 メモリコントローラ、メモリコントローラを備えるフラッシュメモリシステム、並びにフラッシュメモリの制御方法
JP2009181254A (ja) * 2008-01-30 2009-08-13 Tdk Corp メモリコントローラ、メモリコントローラを備えるフラッシュメモリシステム、並びにフラッシュメモリの制御方法
JP2009211232A (ja) * 2008-03-01 2009-09-17 Toshiba Corp メモリシステム
JP2012503234A (ja) * 2008-09-16 2012-02-02 マイクロン テクノロジー, インク. メモリ装置のための組み込みマッピング情報
JP2010191782A (ja) * 2009-02-19 2010-09-02 Tdk Corp メモリコントローラ及びメモリコントローラを備えるフラッシュメモリシステム、並びにフラッシュメモリの制御方法
JP2012033045A (ja) * 2010-07-30 2012-02-16 Toshiba Corp 電子機器およびデータ読み出し方法
US8503241B2 (en) 2010-07-30 2013-08-06 Kabushiki Kaisha Toshiba Electronic apparatus and data reading method
JP5679383B2 (ja) * 2011-06-09 2015-03-04 Necディスプレイソリューションズ株式会社 電子機器、電源操作ログ記録方法およびプログラム
JP2013012801A (ja) * 2011-06-28 2013-01-17 Konica Minolta Business Technologies Inc データ記憶制御装置、データ記憶制御方法およびプログラム
JP2015176629A (ja) * 2014-03-17 2015-10-05 日本電気株式会社 アクセス回数カウント装置、メモリシステム、および、アクセス回数カウント方法

Similar Documents

Publication Publication Date Title
JP2007280108A (ja) 記憶媒体制御装置、記憶媒体制御方法、プログラム
US8291155B2 (en) Data access method, memory controller and memory storage system
JP5597666B2 (ja) 半導体記憶装置、情報処理システムおよび制御方法
JP4991320B2 (ja) ホスト装置およびメモリシステム
JP4931810B2 (ja) 最適化されたシーケンシャルなクラスタの管理のためのfat分析
KR100526188B1 (ko) 플래시 메모리의 주소 사상 방법, 사상 정보 관리 방법 및상기 방법을 이용한 플래시 메모리
JP4633802B2 (ja) 不揮発性記憶装置及びデータ読み出し方法及び管理テーブル作成方法
US8312554B2 (en) Method of hiding file at data protecting mode for non-volatile memory module, memory controller and portable memory storage apparatus
TWI420305B (zh) 記憶體儲存裝置、其記憶體控制器與自動產生填充檔案的方法
EP2096546B1 (en) Write once recording device
TW201931123A (zh) 記憶體系統及控制方法
JP2004280752A (ja) データ記憶装置、およびデータ記憶装置における管理情報更新方法、並びにコンピュータ・プログラム
WO2008013228A1 (fr) Contrôleur de mémoire, dispositif de stockage non-volatile, dispositif d'accès et système de stockage non-volatile
JP2008033788A (ja) 不揮発性記憶装置、データ記憶システム、およびデータ記憶方法
JP2010020586A (ja) データ処理装置
US9389998B2 (en) Memory formatting method, memory controller, and memory storage apparatus
US20130275655A1 (en) Memory management method and memory controller and memory storage device using the same
JP5066894B2 (ja) 記憶媒体制御装置
JP5395163B2 (ja) メモリ管理装置及びメモリ領域設定方法
JP2012068765A (ja) メモリコントローラ及びメモリコントローラを備えるフラッシュメモリシステム、並びにフラッシュメモリの制御方法
JP2004078902A (ja) 記憶装置、メモリ管理方法及びプログラム
JP3826115B2 (ja) 記憶装置、メモリ管理方法及びプログラム
JP2013033338A (ja) メモリシステム
WO2020039927A1 (ja) 不揮発性記憶装置、ホスト装置、及びデータ記憶システム
JP2010182160A (ja) メモリアクセス装置、不揮発性記憶装置、不揮発性記憶システム、メモリアクセス方法、プログラムおよび集積回路

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090325

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20111128

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111206

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120127

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120710

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20121218