(57)【要約】【課題】  アクセス頻度の高いディレクトリエントリへデータを書き込む際、記憶装置内のデータの移動を最小限に抑えることが難しく、高速アクセスが困難であった。【解決手段】  制御部(110)は、アドレス情報を含む書き込みコマンド内からアドレス情報を検出するアドレス情報検出部(123)と、アドレス情報を格納するアドレス情報記憶部(121)と、アドレス情報検出部で検出したアドレス情報が、アドレス情報記憶部に記憶されたアドレス情報と一致するか否かを判定する第１のアドレス判定部(122b)とを具備し、制御部は、第１のアドレス判定部から一致情報を受けた場合、アドレス情報に対応するディレクトリエントリ情報を記憶部(101)の第２の記憶部(103)に格納する。【選択図】      図１
2006018471.tif 000002
【特許請求の範囲】
【請求項１】
制御部及び記憶部を備える記憶装置であって、
前記制御部は、アドレス情報を含む書き込みコマンド内から前記アドレス情報を検出するアドレス情報検出部と、
アドレス情報を格納するアドレス情報記憶部と、
前記アドレス情報検出部で検出した前記アドレス情報が、前記アドレス情報記憶部に記憶された前記アドレス情報と一致するか否かを判定する第１のアドレス判定部と
を具備し、
前記記憶部は、第１の記憶部及び第２の記憶部を備え、
前記制御部は、前記第１のアドレス判定部から一致情報を受けた場合、前記アドレス情報に対応するディレクトリエントリ情報を前記第２の記憶部に格納することを特徴とする記憶装置。
【請求項２】
前記制御部は、
前記書き込みコマンドに付加された書き込みデータのデータサイズ情報を検出するデータサイズ情報検出部と、
前記データサイズ情報検出部が検出した前記データサイズ情報と前記記憶部に対して予め設定されたサイズ情報とを比較するサイズ比較部と
をさらに具備し、
前記サイズ比較部の比較の結果、前記データサイズ情報が前記サイズ情報以下の場合、前記制御部は、前記アドレス情報検出部で検出された前記アドレス情報を前記アドレス情報記憶部に格納することを特徴とする請求項１に記載の記憶装置。
【請求項３】
制御部及び記憶部を備える記憶装置であって、
アドレス情報を含む書き込みコマンド内から前記アドレス情報を検出するアドレス情報検出部と、
前記アドレス情報検出部で検出したアドレス情報と前記記憶部に対して予め設定されたクラスタサイズ情報とからクラスタアドレス情報を算出するクラスタアドレス情報算出部と、
前記クラスタアドレス情報を格納するクラスタアドレス情報記憶部と、
前記クラスタアドレス情報算出部で算出した前記クラスタアドレス情報が、前記クラスタアドレス情報記憶部に記憶された前記クラスタアドレス情報と一致するか否かを判定するクラスタアドレス判定部と
を具備し、
前記記憶部は、第１の記憶部及び第２の記憶部を備え、
前記制御部は、前記クラスタアドレス判定部から一致情報を受けた場合、前記クラスタアドレス情報に対応するディレクトリエントリ情報を前記第２の記憶部に格納することを特徴とする記憶装置。
【請求項４】
前記制御部は、
前記書き込みコマンドに付加された書き込みデータのデータサイズ情報を検出するデータサイズ情報検出部と、
前記データサイズ情報検出部が検出した前記データサイズ情報と前記記憶部に設定されたサイズ情報とを比較するサイズ比較部と
をさらに具備し、
前記サイズ比較部の比較の結果、前記データサイズ情報が前記サイズ情報と同等又はより小さい場合、前記制御部は、前記クラスタアドレス情報検出部で検出された前記クラスタアドレス情報を前記クラスタアドレス情報記憶部に格納することを特徴とする請求項３に記載の記憶装置。
【請求項５】
前記制御部は、前記記憶部のパーティション情報及びクラスタ情報を検出するパーティション情報検出部をさらに具備し、
前記パーティション情報検出部で検出したパーティション情報又は前記クラスタ情報が前記制御部の対象とする範囲でない場合、第２の記憶部を用いずに前記記憶部に書き込み処理を行うことを特徴とする請求項１又は３に記載の記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば制御部を有するメモリカードのような記憶装置に係わり、特に、その記憶方式に関する。
【背景技術】
【０００２】
ファイルシステムは、記憶装置に記録されているデータを管理する方式であり、記憶媒体に設けられた管理領域や管理情報を示している。また、ファイルシステムには、記憶装置におけるファイルやフォルダなどのディレクトリ情報の作成方法、ファイルやフォルダなどの移動方法や削除方法、データの記録方式、管理領域の場所や利用方法などが定められている。
【０００３】
図７は、クラスタサイズが１６ｋバイトのＦＡＴ（File Allocation Table）ファイルシステムの一例を示している。このファイルシステムは、管理領域７０１、複数のクラスタＡ、Ｂ、Ｃ、Ｄ（７０２〜７０５）…により構成されている。ファイルシステム管理領域７０１は、例えばブート情報を記憶するブート領域７１１、パーティション情報などを記憶する領域７０２、ルートディレクトリエントリの情報を記憶するルートディレクトリエントリ領域７１３、ＦＡＴＡ、ＦＡＴＢ（７１４、７１５）を有している。
【０００４】
上記構成において、例えばクラスタＡ及びクラスタＣが使用された状態において、ファイル名が「ＡＡＡ．ｔｘｔ」で、ファイルサイズが３２ｋバイトのファイルを記憶装置に書き込むとする。このファイルのサイズは、クラスタサイズより大きいため、ファイルはクラスタ単位のサイズに分割され、記憶装置の空いているクラスタに記憶される。つまり、書き込むべきファイルサイズが３２ｋバイトであるため、２つのクラスタを使用してファイルが書き込まれる。クラスタは連続している必要がないため、例えばクラスタＢとクラスタＤを使用してファイルが記憶される。
【０００５】
この場合、書き込むべきファイルがどのクラスタに分割して記憶されたかを管理するため、管理情報がＦＡＴＡ、ＦＡＴＢに記憶される。ＦＡＴＡ、ＦＡＴＢには、同一のデータが記憶されており、一方のＦＡＴに欠陥が生じた場合、他方のＦＡＴを用いてデータの修復が可能とされている。ＦＡＴＡ、ＦＡＴＢは、ファイルに割り当てられたクラスタの情報を記憶しており、記憶装置中のクラスタのリンクの関係を記憶している。ＦＡＴＡ、ＦＡＴＢに記憶された情報をトレースすることにより、元のファイルへと復元することができる。
【０００６】
この場合、分割されたファイルのうち、前半の１６ｋバイトがクラスタＢに記憶され、後半の１６ｋバイトがクラスタＤに記憶されるため、ＦＡＴＡ、ＦＡＴＢには、クラスタＢの次にクラスタＤがリンクされることを示す情報が記憶される。２つのクラスタに分割されたファイルを読み出す際、ＦＡＴＡ、ＦＡＴＢに記憶されたこれらの情報をチェイン接続することにより、ファイルが元に復元される。
【０００７】
ルートディレクトリエントリ領域７１３は、ファイル名又はフォルダ名、ファイルサイズ、属性及びファイルの更新日時などとともに、ＦＡＴＡ、ＦＡＴＢに示されたどのクラスタがファイルの先頭クラスタであるかを示すフラグを記憶する。この例の場合、ルートディレクトリエントリ領域７１３に記憶される情報は、ファイル名が「ＡＡＡ．ｔｘｔ」、ファイルサイズが３２ｋバイト、先頭クラスタがクラスタＢである。
【０００８】
このようなファイルシステムを使用した記憶装置は、記憶装置に、データを書き込む際、書き込みデータ以外に、ルートディレクトリエントリの情報やＦＡＴなどの管理情報も一緒に更新する必要がある。
【０００９】
一方、ルートディレクトリの下にサブディレクトリ名が「ＡＢＣＤＥ」のサブディレクトリを作成し、そこにファイル「ＡＡＡ．ｔｘｔ」を書き込む場合がある。
【００１０】
この例のように、ルートディレクトリの下にサブディレクトリを作成する場合、サブディレクトリのエントリを単にディレクトリエントリと呼ぶこととする。サブディレクトリもファイルと同様に、「ＡＢＣＤＥ」というディレクトリエントリ（３２バイト）が空きクラスタに作成される。
【００１１】
ディレクトリエントリの内容は、ルートディレクトリエントリと同様に、サブディレクトリ「ＡＢＣＤＥ」の中にあるファイルについての情報である。図７において、例えばクラスタＡ及びクラスタＣが使用されており、クラスタＢが空いているとすると、クラスタＢに「ＡＢＣＤＥ」のディレクトリエントリが書き込まれる。
【００１２】
次に、ルートディレクトリエントリ領域７１３に、「ＡＢＣＤＥ」のディレクトリについての情報が記憶される。つまり、ルートディレクトリエントリ領域７１３には、「ＡＢＣＤＥ」というディレクトリエントリがどのクラスタにあるかを示す情報が記憶される。
【００１３】
次に、サブディレクトリ「ＡＢＣＤＥ」に、ファイル「ＡＡＡ．ｔｘｔ」を書き込んだ場合、「ＡＢＣＤＥ」のディレクトリエントリが記憶されているクラスタＢのデータを更新する。クラスタは１６ｋバイトのサイズであるが、ディレクトリエントリ中のエントリが更新される場合、最小の書き込み単位である５１２バイトのサイズで書き込みを行うことが多い。クラスタＢはサブディレクトリ「ＡＢＣＤＥ」の下に作成するファイル、又はフォルダについての管理情報を記憶する。この例の場合、ファイル名「ＡＡＡ．ｔｘｔ」、ファイルサイズ及び書き込み開始クラスタアドレスがクラスタＢに記録される。
【００１４】
ここで、サブディレクトリ「ＡＢＣＤＥ」のディレクトリエントリが、管理領域７０１以外のクラスタ領域（データ領域）に書き込まれたこととなる。したがって、記憶装置のクラスタの使用状況によって、サブディレクトリの新規ディレクトリエントリのアドレスは変化することとなる。これに対して、ＦＡＴ、ルートディレクトリエントリは、管理領域７０１の固定されたアドレスに記憶される。
【００１５】
このように、書き込みが固定されたアドレスへ行われる場合、そのアドレスに対する書き込みデータを連続して記憶できる特別な記憶領域を設けることで、書き込みの効率化を図ることができる。しかし、ルートディレクトリの下に位置するサブディレクトリのディレクトリエントリは、管理領域以外のクラスタ領域に記憶される。サブディレクトリのディレクトリエントリが記憶されたアドレスは、ルートディレクトリから下層に位置するディレクトリエントリを検索すればアドレスが特定できるようになってはいる。しかし、サブディレクトリが複数の階層になった場合、記憶装置内でディレクトリエントリから下層にある所望のディレクトリエントリのアドレスを知ることが難しいという問題があった。
【００１６】
そこで、パーソナルコンピュータとＵＳＢにより接続されたカードリーダライタを用いて、例えばＮＡＮＤ型フラッシュメモリが内蔵されたメモリカードに対する書き込み動作を調べ、ディレクトリエントリ及びファイルの書き込みアドレス及びその頻度を分析した。
【００１７】
図８は、その結果を示している。図８より明らかなように、ファイルのデータを書き込む前後に、ＦＡＴやディレクトリエントリへの書き込みが複数回行われていることが分かる。さらに、図８より次のことが分かる。
【００１８】
（１）  ＦＡＴやディレクトリエントリへの書き込みサイズはファイルのデータに比べて小さい。
【００１９】
（２）  ディレクトリエントリへの書き込みアドレスは、常に同じアドレスである。
【００２０】
（３）  ディレクトリエントリへの書き込みアドレスは、管理領域から外れたクラスタ領域である。
【００２１】
（４）  全体的な書き込みの流れにおいて、アドレスが非連続である。
【００２２】
また、複数個のファイルを書き込む際、上記流れを繰り返すホスト機器が多い。
【００２３】
ところで、ＮＡＮＤ型フラッシュメモリにおいて、一度の書き込み要求で書き込みが可能な最小単位はページと呼ばれる。１ページは、例えば５１２バイトあるいは２０４８バイト等により構成されている。また、データの消去単位はブロックと呼ばれ、１ブロックは例えば３２ページ、２５６ページ、５１２ページ等により構成されている。
【００２４】
上記のように、同じファイルやフォルダを更新する場合、対応するディレクトリエントリへの書き込みアドレスは変わらない。このため、同じアドレスのデータを上書きする必要がある。しかし、ＮＡＮＤ型フラッシュメモリは、書き込み済みのページに対して、上書きができない。上書きする際には、あらかじめ消去を行わなければならない。この消去は、ブロック単位でしか行うことができないため、ページ単位にデータを更新する場合、消去済みのブロックを用いて行う。このとき、上書きするページのデータと、上書きされるページが属するブロック内の他のページのデータとを消去済みのブロックに書き込まなければならない。
【００２５】
図９は、ブロックＡのページＣに対して新たな書き込みがあった場合における書き込み動作の一例を示している。
【００２６】
ブロックＡのページＣにデータを書き込む場合、ページＣが属するブロックＡの他のページＡ、Ｂ、Ｄ…ＮのデータをブロックＢに転送しなければならない。すなわち、先ずページＡ、ＢのデータをブロックＢに転送し、この後、新たなページＣのデータをブロックＢに書き込み、次いで、ページＤ…ＮのデータをブロックＢに転送する必要がある。このため、ページＣの小容量のデータを更新する場合においてもデータの移動量が多く、書き込み速度が低下する。
【００２７】
これを改善するための方法として、データの移動量をできるだけ少なくし、性能を改善する方法が開発されている（例えば特許文献１参照）。
【００２８】
しかし、この特許文献１に記載された技術は、ディレクトリ以外のデータに関するものである。しかも、図８に示すＮＡＮＤ型フラッシュメモリへのアクセス状況のトレース結果に見られるように、ディレクトリエントリのようなデータ量が少なく、且つアクセス頻度の多い書き込みに対しては考慮されていない。
【特許文献１】特開２００３−２８０８２２号公報
【発明の開示】
【発明が解決しようとする課題】
【００２９】
本発明は、上記課題を解決するためになされたものであり、その目的とするところは、アクセス頻度の高いディレクトリエントリへデータを書き込む際、記憶装置内のデータの移動を最小限に抑えて、高速アクセスが可能な記憶装置を提供しようとするものである。
【課題を解決するための手段】
【００３０】
本発明の記憶装置の第１の態様は、制御部及び記憶部を備える記憶装置であって、前記制御部は、アドレス情報を含む書き込みコマンド内から前記アドレス情報を検出するアドレス情報検出部と、アドレス情報を格納するアドレス情報記憶部と、前記アドレス情報検出部で検出した前記アドレス情報が、前記アドレス情報記憶部に記憶された前記アドレス情報と一致するか否かを判定する第１のアドレス判定部とを具備し、前記記憶部は、第１の記憶部及び第２の記憶部を備え、前記制御部は、前記第１のアドレス判定部から一致情報を受けた場合、前記アドレス情報に対応するディレクトリエントリ情報を前記第２の記憶部に格納することを特徴とする。
【００３１】
本発明の記憶装置の第２の態様は、制御部及び記憶部を備える記憶装置であって、アドレス情報を含む書き込みコマンド内から前記アドレス情報を検出するアドレス情報検出部と、前記アドレス情報検出部で検出したアドレス情報と前記記憶部に対して予め設定されたクラスタサイズ情報とからクラスタアドレス情報を算出するクラスタアドレス情報算出部と、前記クラスタアドレス情報を格納するクラスタアドレス情報記憶部と、前記クラスタアドレス情報算出部で算出した前記クラスタアドレス情報が、前記クラスタアドレス情報記憶部に記憶された前記クラスタアドレス情報と一致するか否かを判定するクラスタアドレス判定部とを具備し、前記記憶部は、第２の記憶部及び第１の記憶部を備え、前記制御部は、前記クラスタアドレス判定部から一致情報を受けた場合、前記クラスタアドレス情報に対応するディレクトリエントリ情報を前記第２の記憶部に格納することを特徴とする。
【発明の効果】
【００３２】
本発明によれば、アクセス頻度の高いディレクトリエントリへデータを書き込む際、記憶装置内のデータの移動を最小限に抑えて、高速アクセスが可能な記憶装置が提供できる。
【発明を実施するための最良の形態】
【００３３】
以下、本発明の実施の形態について図面を参照して説明する。
【００３４】
（第１の実施形態）
図１は、例えば制御部及びＮＡＮＤ型フラッシュメモリを有するメモリカードとしての記憶装置の一例を示している。
【００３５】
図１において、ＮＡＮＤ型フラッシュメモリにより構成された記憶部１０１は、第１の記憶部１０２と第２の記憶部１０３とを有している。第１の記憶部１０２には、管理領域、及び複数のクラスタＡ、Ｂ、Ｃ…が記憶される。管理領域は、例えばブート領域、パーティション情報などを記憶する領域、ルートディレクトリエントリ、ＦＡＴを含んでいる。
【００３６】
また、第２の記憶部１０３は、第１の記憶部１０２の例えば１つのクラスタに対応し、システムの管理領域から外れたディレクトリエントリ（サブディレクトリ情報）が書き込まれる。第２の記憶部１０３は、後述するように、同一のディレクトリエントリのデータを更新する場合、新たなデータが追記される。ディレクトリエントリとしては、例えばファイル名、ファイルサイズ、書き込み開始アドレスなどがある。
【００３７】
制御部１１０は、例えば記憶制御部１２０、アドレス情報記憶部１２１、第１、第２のアドレス判定部１２２ａ、１２２ｂ、アドレス情報検出部１２３、サイズ比較部１２４、データサイズ情報検出部１２５、クラスタサイズ抽出部１２６、パーティション情報記憶部１２７、パーティション情報検出部１２８を有している。
【００３８】
制御部１１０は、この構成に限定されるものではなく、例えば図示せぬマイクロプロセッサ及びこのマイクロプロセッサの動作に必要なプログラムを記憶するＲＯＭやＲＡＭにより構成し、ソフトウェアにより制御することも可能である。
【００３９】
前記記憶制御部１２０は、外部インターフェース、及び各構成部からの情報に応じて第１の記憶部１０２及び第２の記憶部１０３に対して、ディレクトリエントリやファイルデータなどの書き込み及び読み出し制御を行う。
【００４０】
アドレス情報検出部１２３は、外部インターフェースを介して供給される書き込みコマンドに付加された書き込み開始アドレスを検出する。
【００４１】
アドレス情報記憶部１２１は、後述するサイズ比較部１２４の制御に応じて、アドレス情報検出部１２３により検出された書き込み開始アドレスを記憶する。
【００４２】
第１のアドレス判定部１２２ａは、アドレス情報検出部１２３により検出された書き込み開始アドレスがファイルシステムの管理領域内のアドレスか否かを判定する。この判定結果は記憶制御部１２０に供給される。
【００４３】
第２のアドレス判定部１２２ｂは、アドレス情報検出部１２３により検出された書き込み開始アドレスと、アドレス情報記憶部１２１に記憶された書き込み開始アドレス情報とを比較する。この比較結果は、記憶制御部１２０に供給される。
【００４４】
データサイズ情報検出部１２５は、外部インターフェースを介して供給される書き込みデータのサイズを検出する。書き込みデータは記憶制御部１２０を介して第１又は第２の記憶部１０２、１０３に書き込まれる。
【００４５】
サイズ比較部１２４は、データサイズ情報検出部１２５により検出されたデータサイズとクラスタサイズ抽出部１２６から供給されるクラスタサイズとを比較する。この比較の結果は、アドレス情報記憶部１２１及び記憶制御部１２０に供給される。アドレス情報記憶部１２１は、サイズ比較部１２４において、書き込みデータのサイズがクラスタサイズ以下と判定された場合、アドレス情報検出部１２３により検出された書き込み開始アドレス情報を記憶する。
【００４６】
パーティション情報検出部１２８は、図示せぬホスト機器からの読み出し要求に応じて、記憶部１０１の例えば管理領域１０４から読み出されたデータより、予め設定されたパーティション情報及びクラスタ情報を含む情報を検出する。
【００４７】
パーティション情報記憶部１２７は、パーティション情報検出部１２８により検出されたパーティション情報及びクラスタサイズを含む情報を記憶する。パーティション情報記憶部１２７は、パーティション情報が検出されなかった場合を考慮して、製品の出荷時に予め初期値が設定されている。
【００４８】
クラスタサイズ抽出部１２６は、パーティション情報記憶部１２７に記憶されたクラスタサイズを抽出する。
【００４９】
次に、図２を参照して第１の実施形態における書き込み処理について説明する。
【００５０】
先ず、アドレス情報検出部１２３は、図示せぬ外部インターフェースを介して供給された書き込みコマンドに付加された書き込み開始アドレス情報を検出する（ＳＴ２０１）。この後、第１のアドレス判定部１２２ａにより、アドレス情報検出部１２３で検出した書き込み開始アドレスが管理領域内か否かが判別される（ＳＴ２０２）。この結果、書き込み開始アドレスが管理領域内である場合、第１の記憶部１０２にデータが書き込まれる（ＳＴ２０３）。すなわち、ＦＡＴやルートディレクトリに対するデータは、通常の書き込みにより処理される。
【００５１】
一方、前記判定の結果、書き込み開始アドレスが管理領域外である場合、第２のアドレス判定部１２２ｂは、アドレス情報検出部１２３で検出したアドレス情報がアドレス情報記憶部１２１に記憶された書き込み開始アドレス情報と同じか否かを比較する。すなわち、過去にそのアドレスに対して書き込みが行われたか否かを判定する（ＳＴ２０４）。
【００５２】
この比較の結果、書き込み開始アドレスが過去に書き込まれたことの無いアドレスである場合、第１の記憶部１０２の空きクラスタへデータが書き込まれる（ＳＴ２０５、ＳＴ２０６）。この時、データサイズ情報検出部１２５は、外部インターフェースを介して記憶部１０１に書き込まれたデータのサイズを検出している。
【００５３】
第１の記憶部１０２へデータの格納が終了した場合、サイズ比較部１２４は、データサイズ情報検出部１２５から第１の記憶部１０２に書き込まれたデータのサイズと、クラスタサイズ抽出部１２６からパーティション情報記憶部１２７より抽出したクラスタサイズを取り込み（ＳＴ２０７、ＳＴ２０８）、書き込まれたデータのサイズと、クラスタサイズとを比較判定する（ＳＴ２０９）。
【００５４】
この結果、データサイズがクラスタサイズ以下の場合、ディレクトリの書き込みであると判断され、アドレス情報検出部１２３で検出した書き込み開始アドレス情報をアドレス情報記憶部１２１に記憶する（ＳＴ２１０）。また、クラスタサイズよりデータサイズが大きい場合、通常の書き込み処理が行われる。
【００５５】
一方、前記ステップＳＴ２０４における比較の結果、書き込みアドレスとアドレス情報記憶部１２１に記憶されたアドレスとが一致した場合、すなわち、過去にそのアドレスに対して少ないデータの書き込みが行われている場合、今回の書き込みデータはディレクトリエントリの書き込みであると見なされる。このため、ディレクトリエントリのために設けられた第２の記憶部１０３にデータが追記される（ＳＴ２１１、ＳＴ２１２）。
【００５６】
上記のように、ディレクトリエントリがファイルシステムのデータ領域としての第１の記憶部１０２に書き込まれた場合においても、２回目のディレクトリエントリの書き込み以降は、第２の記憶部１０３にディレクトリエントリを書き込むことができる。
【００５７】
図３は、第１、第２の記憶部１０２、１０３に対する書き込み動作の一例を示している。
【００５８】
図３において、例えばブロックＡ、Ｂ、Ｃ、Ｄは、第１の記憶部１０２に対応し、例えばブロックＥが第２の記憶部１０３に対応する。各領域のサイズは例えば次のように規定されている。１ページは５１２バイト、１ブロックは１６ｋバイト、１クラスタは１６ｋバイト、１ディレクトリエントリは３２バイトとする。
【００５９】
ここで、前記ステップＳＴ２０４の比較の結果、書き込みアドレスとアドレス情報記憶部１２１に記憶されたアドレスとが一致した場合、今回の書き込みデータがディレクトリエントリであると判断される。この場合、図３に示す例えば消去されたブロックＥのページ１に、ディレクトリエントリとしての新ページ１Ｃのデータが書き込まれる。また、このディレクトリエントリがブロックＣのページ１Ｃに対するデータの書き込みに対応する場合、ブロックＥのページ１に設けられた冗長領域６１２に、ブロックＣのページ１Ｃを示すデータが書き込まれる。
【００６０】
さらに、次の書き込みにおいて、検出された書き込みアドレスが、再びアドレス情報記憶部１２１に記憶されたアドレスと一致した場合、ブロックＥのページ２に新なディレクトリエントリが追記される。このブロックＥのページ２の冗長領域６１４には、ブロックＣのページ１Ｃを示すデータが書き込まれる。このようにして、アドレス情報記憶部１２１に記憶されたアドレスと同じ書き込みアドレスに対する書き込み動作に対して、ブロックＥに新たなディレクトリエントリが追記される。
【００６１】
ＮＡＮＤ型フラッシュメモリは、ページ単位でデータを書き込むため、ページ単位の追記が可能である。このため、追記が可能な範囲において、新たな消去ブロックへデータを移動させる必要がない。
【００６２】
また、例えばディレクトリエントリであると判断したアドレスに変更があった際や、所定のタイミングにより、ブロックＥに追記されたディレクトリエントリに基づいて、ブロックＣに格納されたディレクトリエントリを更新する。このディレクトリエントリの更新は、以下の手順により行う。まず、ブロックＥのページの冗長部を参照し、ブロックＥに格納されたディレクトリエントリにより更新されるページを検出する。ここで、ブロックＥのページの冗長部にはブロックＣのページ１Ｃを示すデータが書き込まれているため、更新されるページとしてブロックＣのページ１Ｃが検出される。そして、ブロックＥに追記されたディレクトリエントリのうち最新のディレクトリエントリ（ブロックＥのページ２のデータ）を、消去済みのブロックＤの１ページ目に転送し、データが更新されないブロックＣの残りのデータをブロックＤの２ページ目以降に転送する。これにより、ブロックＣに格納されたディレクトリエントリが更新される。
【００６３】
尚、アドレス情報記憶部１２１には、最低２つ以上のアドレスを記憶する容量が必要である。なぜなら、ファイルで使用する最終クラスタは、クラスタ単位で書き込まれず、クラスタ単位より小さなサイズのデータとして記憶される。この場合、ファイルの最後の部分をディレクトリエントリであると誤認され、この書き込みアドレスがアドレス情報記憶部１２１に記憶されてしまう。したがって、アドレス情報記憶部１２１に記憶されたアドレスのうち、例えば複数回の書き込みにおいてディレクトリエントリとしてみなされなかったアドレスは、次回のアドレスがアドレス情報記憶部１２１に記憶される際、消去してもよい。
【００６４】
上記第１の実施形態によれば、データのサイズがクラスタサイズ以下で、アドレス情報記憶部１２１に記憶されているアドレスと同じ書き込みアドレスにデータを書き込む場合、記憶部１０１の第２の記憶部１０３にディレクトリエントリをページ単位で追記している。このため、追記が可能な範囲において新たな消去ブロックへデータを移動させる必要がない。したがって、ルートディレクトリの下にサブディレクトリを設定した場合においても、書き込み速度の低下を防止することが可能である。
【００６５】
また、第２の記憶部１０３の冗長領域には、追記したページを示すデータが記憶されている。このため、記憶装置の電源オン時において、ホスト機器は、冗長領域に記憶されたデータより追記されたページを容易に検出することが可能である。
【００６６】
（第２の実施形態）
図４、図５は、第２の実施形態を示している。ディレクトリエントリは、３２バイトで、１つのファイル又はフォルダを表現する。このため、５１２バイトの領域に保存可能なディレクトリエントリの数は１６個である。したがって、連続的に複数のファイルを記録した場合で、且つ、ファイル毎に逐一ディレクトリエントリを更新するホスト機器の場合、１６個のファイルを書き込むと、書き込み開始アドレスが５１２バイトシフトする。アドレスを比較する第１の実施形態の場合、１６個のファイルを書き込むと、書き込みアドレスが異なるアドレスとなる。このため、１６個のファイルを書き込む毎にデータ移動が発生し、書き込み性能が低下する。第２の実施形態はこの問題を解決している。
【００６７】
図４において、記憶装置は、記憶部３０１と制御部３２０から構成されている。ＮＡＮＤ型フラッシュメモリにより構成された記憶部３０１は第１の記憶部３０２と第２の記憶部３０３により構成されている。第１の実施形態と同様に、第１の記憶部３０２には、管理領域、及び複数のクラスタＡ、Ｂ、Ｃ…が記憶される。また、第２の記憶部３０３は、第１の記憶部３０２の例えば１つのクラスタに対応し、システムの管理領域から外れたディレクトリエントリ（サブディレクトリ情報）が書き込まれる。
【００６８】
制御部１１０は、例えば記憶制御部３２０、クラスタアドレス情報記憶部３２１、第１、第２のクラスタアドレス判定部３２２ａ、３２２ｂ、クラスタアドレス情報算出部３２３、サイズ比較部３２４、データサイズ情報検出部３２５、クラスタサイズ抽出部３２６、パーティション情報記憶部３２７、パーティション情報検出部３２８を有している。
【００６９】
制御部１１０は、この構成に限定されるものではなく、例えば図示せぬマイクロプロセッサ及びこのマイクロプロセッサの動作に必要なプログラムを記憶するＲＯＭやＲＡＭにより構成し、ソフトウェアにより制御することも可能である。
【００７０】
また、記憶制御部３２０、サイズ比較部３２４、データサイズ情報検出部３２５、クラスタサイズ抽出部３２６、パーティション情報記憶部３２７、パーティション情報検出部３２８は、第１の実施形態と同様である。
【００７１】
クラスタアドレス情報算出部３２３は、外部インターフェースを介して書き込みコマンドに付加された書き込み開始アドレスを検出し、この書き込み開始アドレスをクラスタサイズで除算し、この除算結果の整数部を書き込み開始クラスタアドレスとする。
【００７２】
クラスタアドレス情報記憶部３２１は、サイズ比較部３２４の制御に応じて、アドレス情報算出部３２３により算出された書き込み開始クラスタアドレスを記憶する。
【００７３】
第１のクラスタアドレス判定部３２２ａは、クラスタアドレス情報算出部３２３により算出された書き込み開始クラスタアドレスがファイルシステムの管理領域内のアドレスか否かを判定する。この判定結果は記憶制御部３２０に供給される。
【００７４】
第２のクラスタアドレス判定部３２２ｂは、クラスタアドレス情報算出部３２３により算出された書き込み開始クラスタアドレスと、クラスタアドレス情報記憶部３２１に記憶された書き込み開始クラスタアドレス情報とを比較する。この比較結果は、記憶制御部３２０に供給される。
【００７５】
図５は、第２の実施形態に係る書き込み処理を示している。
【００７６】
先ず、クラスタアドレス情報算出部３２３は、外部インターフェースを介して供給された書き込みコマンドに付加された書き込み開始アドレス情報を検出し、検出した書き込み開始アドレスをクラスタサイズで除算して書き込み開始アドレスの属する書き込み開始クラスタアドレスを算出する（ＳＴ４０１）。この後、第１のクラスタアドレス判定部３２２ａにより、クラスタアドレス情報算出部３２３で検出した書き込み開始クラスタアドレスが管理領域内か否かが判別される（ＳＴ４０２）。この結果、書き込み開始クラスタアドレスが管理領域内である場合、通常の書き込み処理により、第１の記憶部３０２にデータが書き込まれる（ＳＴ４０３）。すなわち、ＦＡＴやルートディレクトリに対するデータは、通常の書き込みにより処理される。
【００７７】
一方、前記判定の結果、書き込み開始クラスタアドレスが管理領域外である場合、第２のクラスタアドレス判定部３２２ｂは、クラスタアドレス情報算出部３２３で検出したクラスタアドレス情報がクラスタアドレス情報記憶部３２１に記憶された書き込み開始クラスタアドレス情報と同じか否かを比較する。すなわち、過去にそのクラスタアドレスに対して書き込みが行われたか否かを判定する（ＳＴ４０４）。
【００７８】
この比較の結果、書き込み開始クラスタアドレスが過去に書き込まれたことの無いアドレスである場合、第１の記憶部３０２の領域へ書き込みデータを格納する（ＳＴ４０５、ＳＴ４０６）。この時、データサイズ情報検出部３２５は、外部インターフェースを介して記憶装置に書き込まれたデータのサイズを検出している。
【００７９】
第１の記憶部３０２へデータの格納が終了した場合、サイズ比較部３２４は、データサイズ情報検出部３２５から第１の記憶部３０２に書き込まれたデータのサイズと、クラスタサイズ抽出部３２６からパーティション情報記憶部３２７より抽出したクラスタサイズを取り込み（ＳＴ４０７、ＳＴ４０８）、書き込まれたデータのサイズと、クラスタサイズとを比較判定する（ＳＴ４０９）。
【００８０】
この結果、データサイズがクラスタサイズ以下の場合、ディレクトリの書き込みであると判断され、クラスタアドレス情報算出部３２３で検出した書き込み開始クラスタアドレス情報をクラスタアドレス情報記憶部３２１に記憶する（ＳＴ４１０）。また、クラスタサイズよりデータサイズが大きい場合、通常の書き込み処理が行われる。
【００８１】
一方、前記ステップＳＴ４０４の比較の結果、書き込みクラスタアドレスとアドレス情報記憶部３２１に記憶されたクラスタアドレスとが一致した場合、すなわち、過去にそのクラスタアドレスに対して書き込みが行われている場合、今回の書き込みデータはディレクトリエントリの書き込みであると見なされる。このため、ディレクトリエントリのために設けられた第２の記憶部３０３にデータが書き込まれる（ＳＴ４１１、ＳＴ４１２）。
【００８２】
尚、第２の記憶部３０３に記憶するデータは、書き込み要求のあった書き込みデータのみを記憶するか、あるいは、クラスタのデータにクラスタ内の更新されたデータを更新して、クラスタ自体を第２の記憶部３０３に格納するかのいずれもが可能である。どちらの場合においても、クラスタ内のどのアドレスのデータであるかを見分けるため、第１の実施形態と同様に、第２の記憶部３０３の冗長記憶部にアドレスを示すフラグを記憶させる。
【００８３】
上記第２の実施形態によれば、クラスタアドレス情報検出部３２３は、書き込みコマンド内から検出した書き込み開始アドレスをクラスタサイズで除算して書き込み開始アドレスの属する書き込み開始クラスタアドレスを算出し、クラスタアドレス判定部３２２は、クラスタアドレス情報記憶部３２１に記憶されたクラスタアドレス情報と、クラスタアドレス情報検出部により検出されたクラスタアドレス情報とが一致した場合、ディレクトリエントリの書き込みと見なし、第２の記憶部３０３にデータを追記している。したがって、ルートディレクトリの下にサブディレクトリを設定した場合においても、書き込み速度の低下を防止することが可能である。
【００８４】
しかも、ディレクトリエントリは、３２バイトで１つのファイル又はフォルダを表現しているため、５１２バイト内に格納できるディレクトリエントリの数は１６個である。ディレクトリエントリのサイズが１６ｋバイトであって、更新サイズが、５１２バイトであるホスト機器の場合で、ファイルの書き込みごとに逐一ディレクトリエントリを更新する場合、５１２バイト中に１６個のファイルに関するエントリを格納できる。このため、書き込み開始アドレスは、１６個のファイルを書き込むと、５１２バイトシフトする。アドレスを比較する第１の実施形態の場合、１６個のファイルを書き込むと、書き込みアドレスが異なるアドレスとなるため、追記状態にある第２の記憶部に書かれなくなる。これに対して、第２の実施形態の場合、アドレスが、５１２バイトシフトしたとしても、同一のクラスタの範囲内では、同一のクラスタアドレスと見なされる。したがって、クラスタサイズが１６ｋバイトの場合、５１０個（＝５１２−２（ディレクトリ先頭の２エントリは親ディレクトリ、及び自身のディレクトリに関する情報である））のファイルのディレクトリエントリに対して処理時間がかかるデータ移動処理が発生しないため、高速な書き込みが可能となる。
【００８５】
次に、図６を用いて、第１、第２の実施形態に示す記憶装置が起動されるまでの動作について説明する。記憶装置の起動時の動作は第１、第２の実施形態とも同様であるため、第１の実施形態を例に説明する。
【００８６】
記憶装置に電源が投入されると、ホスト機器から記憶制御部１２０に読み出し要求が供給される。記憶制御部１２０は、読み出し要求に応じて記憶部１０１から例えば管理領域に記憶されたデータを読み出し、ホスト機器に転送する（ＳＴ５０１）。パーティション情報検出部１２８は、この読み出されたデータからパーティション情報などを検出する（ＳＴ５０２、ＳＴ５０３）。この結果、パーティション情報を検出できた場合（ＳＴ５０４）、パーティション情報記憶部（１２７、３２７）内のパーティション情報を更新して格納する（ＳＴ５０４）。
【００８７】
次に、ホスト機器は、図示せぬ外部インターフェースを介して記憶制御部１２０から供給される読み出しデータに含まれたパーティション情報の中からファイルシステムの種類とクラスタサイズが処理対象か否かを判別する（ＳＴ５０５）。この結果、ファイルシステムの種類とクラスタサイズが処理対象である場合、制御が図２に示すＳＴ２０１、あるいは図５に示すＳＴ４０１に移行される。また、ファイルシステムの種類とクラスタサイズが処理対象外である場合、第２の記憶部を用いない通常の書き込み処理が実行される。
【００８８】
このように、記憶装置の起動時に、ファイルシステムの種類とクラスタサイズが処理対象であるか否かを判別することにより、誤動作を防止することが可能であるとともに、処理の高速化が可能である。
【００８９】
尚、上記第１、第２の実施形態において、サイズ比較部１２４、３２４は、クラスタサイズとデータサイズを比較したが、これに限定されるものではなく、例えばクラスタサイズより小さい所定値とデータサイズとを比較し、データサイズが所定値以下である場合、この書き込みデータのアドレスをアドレス情報記憶部１２１あるいはクラスタアドレス情報記憶部３２１に格納してもよい。具体的には、クラスタサイズが１６ｋバイトである場合、所定値として例えば４ｋバイトを設定し、書き込みデータのサイズが４ｋバイト以下である場合、この書き込みデータのアドレスをアドレス情報記憶部あるいはクラスタアドレス情報記憶部に格納してもよい。
【００９０】
尚、本発明は、上記第１、第２の実施形態に限定されるものではなく、本発明の要旨を変えない範囲において種々変形実施可能なことは勿論である。
【図面の簡単な説明】
【００９１】
【図１】本発明の第１の実施形態に係る構成図。
【図２】図１の動作を示すフローチャート。
【図３】図１に示す記憶部の動作を示す図。
【図４】本発明の第２の実施形態に係る構成図。
【図５】図４の動作を示すフローチャート。
【図６】記憶装置の起動時の動作を示すフローチャート。
【図７】ＦＡＴファイルシステムを示す構成図。
【図８】ＦＡＴファイルシステムの動作の一例を説明するために示す図。
【図９】ＮＡＮＤ型フラッシュメモリを用いた記憶装置におけるデータ移動の概念を説明するための図。
【符号の説明】
【００９２】
１０１、３０１…記憶部、１０２、３０２…第１の記憶部、１０３、３０３…第２の記憶部、１２０、３２０…制御部、１２１…アドレス情報記憶部、１２２ａ、１２２ｂ…第１、第２のアドレス判定部、１２３…アドレス情報検出部、１２４…サイズ比較部、１２５…データサイズ情報検出部、１２８、３２８…パーティション情報検出部、１２７、３２７…パーティション情報記憶部、３２１…クラスタアドレス情報記憶部、３２３…クラスタアドレス情報算出部。
【図１】
2006018471.tif 000003
【図２】
2006018471.tif 000004
【図３】
2006018471.tif 000005
【図４】
2006018471.tif 000006
【図５】
2006018471.tif 000007
【図６】
2006018471.tif 000008
【図７】
2006018471.tif 000009
【図８】
2006018471.tif 000010
【図９】
2006018471.tif 000011