(57)【要約】【課題】  データ記憶装置内の特定領域に対するアクセスの集中を抑えるとともに、データ記憶装置内の記憶領域全体を効率的に利用可能とする。【解決手段】  データ記憶装置へのデータの記録単位であるデータブロックは、固定長の管理情報格納領域と可変長のデータ格納領域とを一体的に備えている。管理情報格納領域ＭＡに記録される前方リンクアドレスＬｆと後方リンクアドレスＬｂには、それぞれ、当該データブロックの前後に存在する他のデータブロックの先頭アドレスが記録される。これらのリンクアドレスＬｆ，Ｌｂを、欠損領域を回避するように設定すれば、欠損領域のアドレスを記録するための特別なテーブルを用意する必要がないため、効率的に記憶領域全体を利用することができる。【選択図】  図１０
2005301686.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータのデータを記憶するデータ記憶装置であって、
前記データを記憶する記憶部と、
前記コンピュータからの命令に応じて前記記憶部に対するデータの書き込み、および、読み出しを制御する制御部とを備え、
前記記憶部は、データの実体が記録されたデータブロックと、データの実体が記録されていない空領域ブロックとに区画された記憶領域を備え、
前記データブロックは、他のデータブロックの所在アドレスを記録するためのデータ管理情報格納領域を当該データブロックと一体的に保持しており、
前記空領域ブロックは、他の空領域ブロックの所在アドレスを記録するための空領域管理情報格納領域を当該空領域ブロックと一体的に保持している
データ記憶装置。
【請求項２】
請求項１に記載のデータ記憶装置であって、
前記空領域ブロックの空領域管理情報格納領域には、更に、該空領域ブロックのサイズを取得可能な情報が記録される
データ記憶装置。
【請求項３】
請求項２に記載のデータ記憶装置であって、
前記空領域ブロックの空領域管理情報格納領域に記録された所在アドレス、および、該空領域ブロックのサイズを取得可能な情報は、前記記憶部内に存在する欠損領域を回避するように設定されている
データ記憶装置。
【請求項４】
請求項１に記載のデータ記憶装置であって、
前記データブロックのデータ管理情報格納領域には、更に、該データブロックの種別を表す種別情報が記録される
データ記憶装置。
【請求項５】
請求項４に記載のデータ記憶装置であって、
前記データ管理情報格納領域には、前記種別情報として、ファイル、ディレクトリ、ボリュームのいずれかを表すパラメータが記録される
データ記憶装置。
【請求項６】
請求項４に記載のデータ記憶装置であって、
前記データブロックのデータ管理情報格納領域に対して前記種別情報としてディレクトリを表すパラメータが記録される場合には、該データブロックのいずれかの領域に、更に、該ディレクトリ内に存在するファイルまたはディレクトリが格納されたデータブロックの所在アドレスが記録される
データ記憶装置。
【請求項７】
請求項１に記載のデータ記憶装置であって、
前記制御部は、前記コンピュータからデータの書き込み命令を受けた場合に、
前記空領域ブロックが存在するいずれかの領域に、該データを記録した新たなデータブロックを配置し、該データブロックのデータ管理情報格納領域に対して他のデータブロックの所在アドレスを記録するとともに、該他のデータブロックのデータ管理情報格納領域に記録されている所在アドレスに対して、該新たなデータブロックの所在アドレスを記録する
データ記憶装置。
【請求項８】
請求項７に記載のデータ記憶装置であって、
前記制御部は、更に、前記新たなデータブロックの配置によって前記空領域ブロックの所在アドレスが変動した場合に、該空領域ブロックの所在アドレスを空領域管理情報格納領域に記録していた他の空領域ブロックの空領域管理情報格納領域に対して前記変動後の所在アドレスを記録する
データ記憶装置。
【請求項９】
コンピュータのデータを記憶するデータ記憶装置の初期化方法であって、
データ記憶装置内の欠損領域を認識する工程と、
前記データ記憶装置内の空領域を前記欠損領域に基づき分節する工程と、
前記分節された各空領域の所定の領域に対して、当該空領域のサイズを取得可能な情報と他の分節された空領域の所在アドレスとを記録する工程と
を備える初期化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＩＣメモリなど、コンピュータのデータを記憶するデータ記憶装置に関し、詳しくは、データ記憶装置内のデータの記録方式に関するものである。
【背景技術】
【０００２】
従来、この種のデータ記憶装置では、ファイルシステムとしてＦＡＴが多く利用されている。ＦＡＴを利用する場合には、データ記憶装置内の記憶領域は、ファイル管理領域と実データ記憶領域の２つの領域に分割される。ファイル管理領域には、ファイルの形で管理されている実際のデータの所在地を示すディレクトリエントリやＦＡＴ（ファイルアロケーションテーブル）情報が記録されており、コンピュータは、これらの情報を参照することによって実データ記憶領域内に記録されたファイルにアクセスすることができる。
【０００３】
また、下記特許文献１に記載のように、従来のデータ記憶装置では、その記憶領域内に物理的な欠損が生じた場合に備えて、その欠損領域が存在するアドレスを記録するためのテーブルを記憶領域内の特定の位置に用意している。データ記憶装置は、欠損のある記憶領域を見い出すと、このテーブルにその情報を書き込んでおく。データ記憶装置は、コンピュータからの命令によって新たなデータを書き込む際、このテーブルを参照することにより、欠損領域に対するデータの書き込みを防止している。
【０００４】
【特許文献１】特許第３２２６０４２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし、上述した従来のデータ記憶装置では、コンピュータからファイルの書き込みや消去が行われる度にファイル管理領域内のディレクトリエントリやＦＡＴ情報が書き換えられる。そのため、ファイル管理領域という特定の領域にアクセスが集中し、かかる領域に物理的な欠損が生じやすいといった課題があった。また、特許文献１に記載の技術では、欠損領域のアドレスを記録するテーブルを用意する必要があるため、データ記憶装置内の記憶領域を効率よく利用することが困難であった。このような課題は、ＩＣメモリに限らず、ハードディスクなど、他のデータ記憶装置にも共通の課題であった。
【０００６】
本発明はこのような課題に鑑みてなされたものであり、データ記憶装置内の特定領域に対するアクセスの集中を抑えるとともに、データ記憶装置内の記憶領域全体を効率的に利用可能とすることを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するため、本発明のデータ記憶装置を次のように構成した。すなわち、コンピュータのデータを記憶するデータ記憶装置であって、前記データを記憶する記憶部と、前記コンピュータからの命令に応じて前記記憶部に対するデータの書き込み、および、読み出しを制御する制御部とを備え、前記記憶部は、データの実体が記録されたデータブロックと、データの実体が記録されていない空領域ブロックとに区画された記憶領域を備え、前記データブロックは、他のデータブロックの所在アドレスを記録するためのデータ管理情報格納領域を当該データブロックと一体的に保持しており、前記空領域ブロックは、他の空領域ブロックの所在アドレスを記録するための空領域管理情報格納領域を当該空領域ブロックと一体的に保持していることを要旨とする。
【０００８】
本発明のデータ記憶装置によれば、記憶部内に記録された各データブロックが、データ管理情報格納領域に記録された所在アドレスによって鎖状にリンクされることになる。そのため、この所在アドレスを辿ることにより、目的のデータにアクセスすることができる。このような構成とすることにより、ディレクトリエントリやＦＡＴ情報など、特定の領域に記録された管理情報を用いることなくデータの記録位置を管理することができるため、特定の領域に対するアクセスの集中を抑制することができる。また、本発明では空領域についてもデータブロックと同様の構造によって管理される。従って、複数の空領域が存在する場合にも、各空領域同士がリンクされるため、空領域の存在位置を容易に把握することが可能となる。
【０００９】
前記空領域ブロックの空領域管理情報格納領域には、更に、該空領域ブロックのサイズを取得可能な情報が記録されるものとしてもよい。こうすることにより、空領域のサイズを容易に把握することができる。空領域ブロックのサイズを取得可能な情報とは、例えば、空領域ブロックのサイズそのものを表す情報や、空領域ブロックの終端アドレスを表す情報である。終端アドレスは、絶対アドレスによって指定するものとしてもよいし、オフセットアドレスのような相対的なアドレスによって指定するものとしてもよい。
【００１０】
このような構成において、前記空領域ブロックの前記空領域管理情報格納領域内の所在アドレス、および、該空領域ブロックのサイズを取得可能な情報は、前記記憶部内に存在する欠損領域を回避するように設定されているものとしてもよい。こうすることによって、欠損領域のアドレス情報を格納するためのテーブルを別途用意することなく、欠損領域を避けたデータの書き込みや読み込みを行うことが可能となる。従って、データ記憶装置内の記録領域全体を効率よく利用することが可能となる。
【００１１】
前記データブロックのデータ管理情報格納領域には、更に、該データブロックの種別を表す種別情報が記録されるものとしてもよい。種別情報としては、例えば、ファイル、ディレクトリ（フォルダ）、ボリュームのいずれかを表すパラメータを記録するものとすることができる。こうすることによって、記憶領域内に記録されたデータの種別を容易に把握することが可能となる。
【００１２】
前記データブロックのデータ管理情報格納領域に対して前記種別情報としてディレクトリを表すパラメータが記録される場合には、該データブロックのいずれかの領域に、更に、該ディレクトリ内に存在するファイルまたはディレクトリが格納されたデータブロックの所在アドレスが記録されるものとしてもよい。このような構成とすれば、ディレクトリ毎にデータブロックのリンクを構築することが可能となる。
【００１３】
前記制御部は、前記コンピュータからデータの書き込み命令を受けた場合に、前記空領域ブロックが存在するいずれかの領域に、該データを記録した新たなデータブロックを配置し、該データブロックのデータ管理情報格納領域に対して他のデータブロックの所在アドレスを記録するとともに、該他のデータブロックのデータ管理情報格納領域に記録されている所在アドレスに対して、該新たなデータブロックの所在アドレスを記録するものとすることができる。こうすることによって前記記憶部に対するデータの書き込みを行うことができる。
【００１４】
また、前記制御部は、更に、前記新たなデータブロックの配置によって前記空領域ブロックの所在アドレスが変動した場合に、該空領域ブロックの所在アドレスを空領域管理情報格納領域に記録していた他の空領域ブロックの空領域管理情報格納領域に対して前記変動後の所在アドレスを記録するものとしてもよい。こうすることにより、前記記憶部内の空領域のリンク状態を管理することができる。
【００１５】
また、本発明は、コンピュータのデータを記憶するデータ記憶装置の初期化方法として構成することができる。すなわち、データ記憶装置内の欠損領域を認識する工程と、前記データ記憶装置内の空領域を前記欠損領域に基づき分節する工程と、前記分節された各空領域の所定の領域に対して、当該空領域のサイズを取得可能な情報と他の分節された空領域の所在アドレスとを記録する工程とを備える初期化方法である。
【００１６】
かかる初期化方法によって分節された各空領域が上述した空領域ブロックに相当する。このような初期化方法によれば、データ記憶装置の使用前に予め、欠損領域を回避するように空領域ブロックを配置することができる。データ記憶装置内の欠損領域を認識する方法としては、例えば、データ記憶装置内の全領域に対してデータの書き込みあるいは消去を行い、変化しないビットを検出することにより、欠損領域を認識することができる。また、データ記憶装置に内蔵されたメモリのメモリメーカによって提供された欠損領域に関する情報を参照して認識するものとしてもよい。
【００１７】
本発明のデータ記憶装置は、例えば、ＩＣメモリやハードディスクといった単体の補助記憶装置に対して適用することができる。また、コンピュータ本体と補助記憶装置とを含むコンピュータシステム全体に対しても適用することもできる。また、本発明は、上述したデータ記憶装置としての構成のみならず、例えば、データ記憶装置におけるデータの記録方法やデータを記憶するためのコンピュータプログラムなどとしても構成することができる。コンピュータプログラムは、コンピュータが読み取り可能な記録媒体に記録するものとしてもよい。記録媒体としては、例えば、フレキシブルディスクやＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、光磁気ディスク、メモリカード、ハードディスク等の種々の媒体を利用することができる。
【発明を実施するための最良の形態】
【００１８】
以下、本発明の実施の形態について実施例に基づき次の順序で説明する。
Ａ．データ記憶装置の構成：
Ｂ．データの記録方法：
Ｃ．ファイルアクセス処理：
（Ｃ１）読み出し処理：
（Ｃ２）消去処理：
（Ｃ３）書き込み処理：
Ｄ．その他の実施例：
【００１９】
Ａ．データ記憶装置の構成：
図１は、本発明の一実施例としてのデータ記憶装置１００の構成を示す説明図である。データ記憶装置１００は、パーソナルコンピュータ（以下、単に「コンピュータ」と記載する）のデータを記憶するための補助記憶装置であり、コンピュータのＵＳＢポートに接続されるＵＳＢコネクタ１１０や、ＵＳＢデバイスコントローラ１２０、制御部１３０、データを不揮発的に記憶するフラッシュメモリ１４０などによって構成される。
【００２０】
ＵＳＢデバイスコントローラ１２０は、コンピュータに備えられたＵＳＢホストコントローラとＵＳＢ（ユニバーサルシリアスバス）規格に準拠した通信を行うことで、コンピュータとデータ記憶装置１００間におけるデータや命令の送受信を仲介する。本実施例では、このようにＵＳＢ規格に基づきコンピュータと通信を行うものとしたが、例えば、ＡＴＡ規格やＩＥＥＥ１３９４規格など、他の規格に基づき通信を行うようにしてもよい。
【００２１】
制御部１３０は、コンピュータからＵＳＢデバイスコントローラ１２０を介して受信した命令に従い、フラッシュメモリ１４０に対するデータの書き込みや読み出しを制御する。制御部１３０は、ＣＰＵ１３１とＲＡＭ１３２とＲＯＭ１３３によって構成されており、ＲＯＭ１３３には、データ記憶装置１００の動作を制御するためのプログラムが記録されている。ＣＰＵ１３１は、ＲＡＭ１３２を作業領域として用いながらこのプログラムを実行することによりデータの書き込みや読み出しの制御を行う。
【００２２】
フラッシュメモリ１４０は、ＮＡＮＤ型のフラッシュメモリであり、本実施例では、３２Ｍバイトの記憶容量を有するものとする。フラッシュメモリ１４０は、書き込みや読み出しを行うデータを一時的に格納する５１２バイト分のデータレジスタと２０４８個のブロック領域とからなる。１つのブロック領域は、更に、３２ページの領域に分割されており、１ページあたり５１２バイトの記憶容量を有する。
【００２３】
Ｂ．データの記録方法：
図２は、フラッシュメモリ１４０内のアドレス空間のイメージを示す説明図である。本実施例では、図２に示すように、制御部１３０は、フラッシュメモリ１４０内のアドレス空間をリング状に扱う。つまり、終端アドレスＭＸにアドレス数を１つ加算すると、加算後のアドレスが先頭アドレス０となる。
【００２４】
図３は、このアドレス空間中に格納されるデータの構造を示す説明図である。本実施例のデータ記憶装置１００は、すべてのデータを、図３に示す「データブロック」という形式によりアドレス空間中に格納する。なお、このデータブロックは、図１に示した「ブロック領域」とは異なる語である。
【００２５】
データブロックは、固定長の管理情報格納領域ＭＡと可変長のデータ格納領域ＤＡとを一体的に備えている。制御部１３０は、例えば、コンピュータからファイルの書き込み命令を受けた場合には、そのファイルをデータ格納領域ＤＡに記録するとともに、管理情報格納領域ＭＡに対して後述する所定の情報を記録する。そして、これらの情報からなるデータブロックをアドレス空間中に配置する。
【００２６】
管理情報格納領域ＭＡには、前方リンクアドレスＬｆや後方リンクアドレスＬｂ、データブロックの種別を表す種別情報Ｆａ、データブロック全体のサイズＳｄが記録される。これらの情報は、すべて固定長の情報である。なお、サイズＳｄに替えて、データブロックの終端アドレスを記録するものとしてもよい。この場合、終端アドレスは、絶対アドレスによって記録してもよいし、データブロックの先頭アドレスからのオフセットアドレスによって記録してもよい。
【００２７】
前方リンクアドレスＬｆには、当該データブロックの前に存在するデータブロックの先頭アドレスが記録され、後方リンクアドレスＬｂには、当該データブロックの後に存在するデータブロックの先頭アドレスが記録される。「前」、「後」とは、アドレス空間上の記録位置の前後をいうわけではなく、これらのリンクアドレスによってデータブロック同士がリンクされる順序のことをいう。
【００２８】
図４は、リンクアドレスＬｆ，Ｌｂによるデータブロックのリンク状態の例を示す説明図である。例えば、図４に示すデータブロック２の前方リンクアドレスＬｆには、データブロック３の先頭アドレスである「ａ３」が記録され、後方リンクアドレスＬｂには、データブロック１の先頭アドレスである「ａ１」が記録されている。そのため、図４に示した例では、各データブロックが、データブロック１，データブロック２，データブロック３の順にリンクされていることとなる。制御部１３０は、アドレス空間中のアクセス位置を、このようなリンクアドレスＬｆ，Ｌｂを参照して移動させることにより、所望のデータブロックにアクセスすることができる。
【００２９】
図４のデータブロック２の先頭アドレスａ２は、データブロック１の前方リンクアドレスＬｆによって参照され、さらにデータブロック３の後方リンクアドレスＬｂによって参照されている。すなわち、各データブロックは、双方向にリンクされていることとなる。このように個々のデータブロックが双方向にリンクされているものとすれば、データの検索性が向上し、さらに、リンクの正当性の検証を容易に行うことが可能となる。
【００３０】
図３に示した種別情報Ｆａには、データブロックの種別を表すパラメータが記録される。データブロックの種別には、ボリュームブロックと、ファイルブロックと、ディレクトリブロックと、空領域ブロックとがあり、それぞれを表すパラメータは、「ｆｖ」「ｆｆ」「ｆｄ」「ｆｎ」である。
【００３１】
図５〜８には、データブロックの種別毎のデータ構造を示している。図５は、ボリュームブロックのデータ構造を示す説明図である。ボリュームブロックは、ボリューム情報を格納するためのデータブロックである。種別情報Ｆａには「ｆｖ」と記録され、そのデータ格納領域ＤＡには、ボリュームラベルやボリュームシリアル番号などが記録される。
【００３２】
図６は、ファイルブロックのデータ構造を示す説明図である。ファイルブロックは、ファイルを格納するためのデータブロックである。種別情報には、「ｆｆ」と記録され、データ格納領域ＤＡには、ファイルの実体や、ファイル名、作成日時などが記録される。
【００３３】
図７は、ディレクトリブロックのデータ構造を示す説明図である。ディレクトリブロックは、ディレクトリの情報を格納するためのデータブロックである。種別情報には「ｆｄ」と記録され、データ格納領域ＤＡには、ディレクトリ名や、その作成日時などが記録される。また、データ格納領域ＤＡには、第２前方リンクアドレスＬｆ２と、第２後方リンクアドレスＬｂ２とが記録される。これらのリンクアドレスＬｆ２，Ｌｂ２には、そのディレクトリ内に存在するファイルやサブディレクトリの格納されたデータブロックの先頭アドレスが記録される。なお、このディレクトリブロックによって表されるディレクトリ内にファイルやサブディレクトリが存在しない場合には、第２前方リンクアドレスＬｆ２と第２後方リンクアドレスＬｂ２とには、両者とも、当該ディレクトリブロックの先頭アドレスが記録される。
【００３４】
図８は、空領域ブロックのデータ構造を示す説明図である。空領域ブロックは、そのデータブロックの存在する領域が空領域であることを表すデータブロックである。種別情報には「ｆｎ」と記録され、初期状態では、データ格納領域ＤＡに、空であることを示すＮｉｌデータ（例えば「００」）が記録される。このように種別情報に「ｆｎ」と記録されたデータブロックが、特許請求の範囲に記載した「空領域ブロック」に相当する。
【００３５】
図９は、フラッシュメモリ１４０内に欠損領域がない場合におけるアドレス空間の初期状態を示す説明図である。フラッシュメモリ１４０内に欠損領域がない場合は、そのアドレス空間には、初期状態で１つのボリュームブロックと１つの空領域ブロックとが存在する。ボリュームブロックの前方リンクアドレスＬｆは、空領域ブロックの先頭アドレスａ１を参照しており、後方リンクアドレスＬｂも空領域ブロックの先頭アドレスａ１を参照している。これは、前述したようにアドレス空間がリング状に形成されているためである。同様に、空領域ブロックの前方リンクアドレスＬｆと後方リンクアドレスＬｂも、共に、ボリュームブロックの先頭アドレスａ０を参照している。なお、本実施例では、アドレスａ０はフラッシュメモリ１４０の物理アドレスの先頭を示すものとするが、任意のアドレス値を採るものとしてもよい。
【００３６】
図１０は、フラッシュメモリ１４０内に欠損領域がある場合におけるアドレス空間の初期状態を示す説明図である。欠損領域とは、フラッシュメモリ１４０を構成するメモリセルに物理的な損傷が生じている領域をいう。図１０には、初期状態で欠損領域が２箇所存在している場合を示している。このような場合には、図中に示すように、空領域ブロックは、初期状態で３つ存在することになる（空領域ブロック１〜３）。
【００３７】
空領域ブロック１の前方リンクアドレスＬｆは空領域ブロック２の先頭アドレスａ３を示しており、後方リンクアドレスＬｂはボリュームブロックの先頭アドレスａ０を示している。空領域ブロック２の前方リンクアドレスＬｆは空領域ブロック３の先頭アドレスａ５を示しており、後方リンクアドレスＬｂは空領域ブロック１の先頭アドレスａ１を示している。空領域ブロック３の前方リンクアドレスＬｆはボリュームブロックの先頭アドレスａ０を示しており、後方リンクアドレスＬｂは空領域ブロック２の先頭アドレスａ３を示している。つまり、空領域ブロック１〜３は、それぞれ相互にリンクされており、その先端（空領域ブロック１）と終端（空領域ブロック３）とがボリュームブロックにリンクされるように設定されている。
【００３８】
空領域ブロック１および空領域ブロック２のサイズＳｄは、それぞれ欠損領域を回避するように設定されている。例えば、空領域ブロック１のサイズＳｄには、アドレスａ３の値とアドレスａ１の値との差から、さらに、欠損領域１のサイズを差し引いた値が記録される。
【００３９】
欠損領域を回避して図１０のように空領域ブロックを配置するためには、制御部１３０は次のような初期化処理を行う。まず、最初に、アドレス空間内に存在する欠損領域を認識する処理を行う。かかる認識処理は、例えば、アドレス空間の全てのビットを「０」から「１」、または「１」から「０」に書き換えて、変化しないビットを検出し、こうして検出されたビットが存在する領域を欠損領域として認識する方法を採ることができる。その他にも、例えば、フラッシュメモリ１４０を製造するチップメーカによって提供された欠損領域に関する情報を参照する方法により行うこともできる。通常、フラッシュメモリ１４０には、このような情報が所定の領域に予め書き込まれて出荷されている。そのため、制御部１３０は、かかる情報をフラッシュメモリ１４０から読み出すことにより、欠損領域を認識することができる。
【００４０】
次に、ボリュームブロックを先頭アドレスに配置し、このボリュームブロックと上述した方法により認識された欠損領域とによって全アドレス空間を分節する。そして、こうして分節された各アドレス空間を空領域ブロックに変換させる処理を行う。かかる処理では、各アドレス空間の先頭アドレスから、属性情報に「ｆｎ」と記録した管理情報格納領域ＭＡをそれぞれ配置する。この管理情報格納領域ＭＡには、分節された各アドレス空間のサイズＳｄを記録し、さらに、それぞれの空領域ブロックが相互にリンクされるように、前方リンクアドレスＬｆや後方リンクアドレスＬｂを設定する。以上のような処理により、制御部１３０は、アドレス空間の初期化を行うことができる。
【００４１】
図１１は、欠損領域が１つ存在する場合において上述した種々のデータブロックがアドレス空間中に配置された具体例を便宜的にリング状に示す説明図である。最も内周のリングは空領域ブロックの配置を表しており、その外周にはルートディレクトリに存在するデータブロックの配置を表している。更にその外周や、最外周には、サブディレクトリに存在するデータブロックの配置を表している。アドレス空間上、不連続な前方リンクについては矢印によって示し、後方リンクについては省略している。図１２には、図１１に示した各データブロックのリンク状態によって実現されるディレクトリ構造をツリー状に表している。
【００４２】
図１１に示した例では、アドレス空間の先頭アドレスにボリュームブロックｆｖが存在し、このボリュームブロックｆｖは、ルートディレクトリに存在するファイルブロックｆ１にリンクされている。ルートディレクトリには、ファイルブロックｆ１以外にも，ファイルブロックｆ２，ｆ８、および、ディレクトリブロックｄ１，ｄ３が存在する。このうち、ファイルブロックｆ８は、欠損領域を避けるように２つの領域に跨って格納されている。ディレクトリブロックｄ１には、ファイルブロックｆ３，ｆ４，ｆ５，ｆ９およびディレクトリブロックｄ２がリンクされている。このうち、ディレクトリブロックｄ２には、更に、ファイルブロックｆ６，ｆ７がリンクされている。一方、ディレクトリブロックｄ３には、ファイルやディレクトリがリンクされておらず空ディレクトリであることを表している。ディレクトリブロックｄ３は、ファイルブロックとディレクトリブロックとによって構成されるリンクの終端に位置している。そのため、ディレクトリブロックｄ３には、空領域ブロックｎ１がリンクされている。空領域ブロックｎ１は、空領域ブロックｎ２にリンクされ、空領域ブロックｎ２は、最終的に、ボリュームブロックｆｖにリンクされている。
【００４３】
以上、本実施例におけるデータの記録方法について説明した。本実施例では、上述したように、全てのデータを図３に示したデータブロックによって記録する。このような記録方法によっても、ディレクトリを用いた階層構造によりファイルの記録を行うことができる（図１１および図１２参照）。そのため、コンピュータは、ディレクトリ構造を採用する従来のファイルシステムと同様のファイルアクセス方法によって本実施例のデータ記憶装置１００を扱うことが可能となる。
【００４４】
Ｃ．ファイルアクセス処理：
図１３は、コンピュータからの命令に応じて制御部１３０により実行されるファイルアクセス処理のフローチャートである。制御部１３０はコンピュータからファイルアクセスに関する命令を受信すると（ステップＳ１００）、その命令の種別を判別する（ステップＳ１１０）。
【００４５】
（Ｃ１）読み出し処理：
コンピュータから読み出し命令を受信した場合には（ステップＳ１１０：「読出」）、制御部１３０は、読み出しを行うファイルのファイル名をコンピュータから受信する（ステップＳ１２０）。そして、受信したファイル名が記録されており、かつ、種別情報として「ｆｆ」と記録されたデータブロックの検索を行う（ステップＳ１３０）。この検索は、前方リンクアドレスＬｆによって参照されたアドレスをボリュームブロックから順に辿ることで行う。例えば、図１１において、ファイルブロックｆ２に目的のファイルが記録されている場合には、ボリュームブロックｆｖ、ファイルブロックｆ１、ファイルブロックｆ２の順に検索されることとなる。なお、このとき、前方リンクアドレスＬｆだけではなく、後方リンクアドレスＬｂも同時に辿ることで、双方向から検索を行うものとしてもよい。
【００４６】
上記ステップＳ１２０において、コンピュータからファイル名ではなくパス名を受信した場合には、そのパスに含まれるディレクトリを順に検索した上で、目的のファイルを検索する。例えば、「ｄｉｒ１／ｆｉｌｅ１」というパス名を受信した場合には、最初に「ｄｉｒ１」というディレクトリ名の記録されたディレクトリブロックを検索し、次に、そのディレクトリブロックの第２前方リンクアドレスＬｆ２を辿って、ｆｉｌｅ１というファイル名が記録されたファイルブロックを検索する。
【００４７】
こうして目的のファイルが検索されると、制御部１３０は、検索されたデータブロックのデータ格納領域ＤＡに記録されたファイルを、ＵＳＢデバイスコントローラ１２０を介してコンピュータに送信する（ステップＳ１４０）。ファイルが検索されなかった場合には、ファイルが存在しない旨のエラーをコンピュータに送信する。
【００４８】
（Ｃ２）消去処理：
上記ステップＳ１００において、コンピュータから消去命令を受信した場合には（ステップＳ１１０：「消去」）、制御部１３０は、消去を行うファイルのファイル名をコンピュータから受信する（ステップＳ１５０）。そして、このファイル名の記録されたファイルブロックを検索する（ステップＳ１６０）。検索方法は、上述したファイルの読み出しの場合と同様である。
【００４９】
目的のファイルブロックが検索されると、まず、制御部１３０は、検索されたファイルブロックの種別情報を「ｆｆ」から「ｆｎ」に書き換える（ステップＳ１７０）。こうすることで、ファイル属性の付されていたデータブロックが空領域属性に変換されるため、形式的にファイルが消去され、新たな空領域ブロックが生成されることになる。このとき、新たに生成された空領域ブロックのデータ格納領域ＤＡ全体を、Ｎｉｌデータに書き換えるものとすれば、完全にファイル内容を消去することができる。しかし、本実施例では、処理の簡略化のためこのような書き換えは行わない。
【００５０】
次に、制御部１３０は、ファイルブロックが消去されたことに伴うリンクアドレスの変更処理を行う（ステップＳ１８０）。図１４は、かかる変更処理の具体例を示す説明図である。図１４には、３つのファイルブロック（ファイルブロック１〜３）と１つの空領域ブロック（空領域ブロック１）とがリンクされている様子を示しており、このうちファイルブロック２を消去する場合について考える。まず、制御部１３０は、ファイルブロック２の種別情報Ｆａを「ｆｆ」から「ｆｎ」に書き換えることで、その種別を空領域ブロックに変換する。次に、こうして生成された空領域ブロック２を空領域ブロック１の後にリンクさせるための処理を行う。具体的には、まず、空領域ブロック１の前方リンクアドレスＬｆを、空領域ブロック２の先頭アドレスａ４に書き換える。空領域ブロック１の後方リンクアドレスＬｂについては、ファイルブロック３の存在位置の変動がないため、そのままアドレス値を維持する。そして、空領域ブロック２の前方リンクアドレスＬｆを、ボリュームブロックの先頭アドレスａ０を参照するように設定し、後方リンクアドレスＬｂを、空領域ブロック１の先頭アドレスａ６を参照するように設定する。
【００５１】
次に、制御部１３０は、ファイルブロック２を参照していたファイルブロック１およびファイルブロック３のリンクアドレスを変更する処理を行う。具体的には、ファイルブロック１の前方リンクアドレスＬｆをファイルブロック２の先頭アドレスａ４からファイルブロック３の先頭アドレスａ５に書き換える。そして、更に、ファイルブロック３の後方リンクアドレスＬｂをファイルブロック２の先頭アドレスからファイルブロック１の先頭アドレスａ３に書き換える。以上の処理により、ファイルブロック２の消去に伴う各データブロックのリンクアドレスの変更が終了する。図中には、以上の処理によって変更されたリンクアドレスに「＊」マークを付して示している。
【００５２】
なお、上述した消去処理では、ファイルを消去する場合について説明したが、ディレクトリを消去する場合にも同様の処理が行われる。ディレクトリを削除する場合には、そのデータ格納領域ＤＡに記録された第２前方リンクアドレスＬｆ２や第２後方リンクアドレスＬｂ２によってリンクされている他のファイルやディレクトリの消去も一括して行うようにしてもよい。また、ディレクトリ内にファイルやサブディレクトリが存在する場合には、それらが全て消去されるまで、そのディレクトリを消去しないものとしてもよい。
【００５３】
（Ｃ３）書き込み処理：
次に、書き込み処理について説明する。制御部１３０は、上記ステップＳ１００において、書き込み命令を受信した場合には（ステップＳ１１０：「書込」）、書き込みを行うファイルをコンピュータから受信する（ステップＳ１９０）。そして、各データブロックの前方リンクアドレスＬｆを辿ることにより空領域ブロックの検索を行う（ステップＳ２００）。かかる検索は、属性情報Ｆａに「ｆｎ」と記録されたデータブロックを検索することにより行う。空領域ブロックが検索されなかった場合には、空領域が存在しない旨のエラーをコンピュータに送信して当該ファイルアクセス処理を終了する。
【００５４】
次に、制御部１３０は、検索された空領域ブロックに対して、受信したファイルの書き込みを行う（ステップＳ２１０）。図１５は、かかる書き込み処理の具体例を示す説明図である。図１５には、ファイルブロック１と空領域ブロック１とが存在するアドレス空間中に新たなファイルブロック２を書き込む場合を示している。
【００５５】
まず、上記ステップＳ２００によって空領域ブロック１が検索されると、制御部１３０は、この空領域ブロック１に対して、上記ステップＳ１９０において受信したファイルの書き込みを行う。具体的には、上記ステップＳ１９０において受信したファイルをデータ格納領域ＤＡに格納するとともに、属性情報Ｆａに対して「ｆｆ」と記録したファイルブロック２を、図の下部に示すように、空領域ブロック１の先頭アドレスから書き込む。そして、ファイルブロック２の書き込みによって上書きされた空領域ブロック１の管理情報格納領域ＭＡを、残存した空領域の先頭に移動させる。なお、本実施例では、空領域ブロックの先頭アドレスから新たなファイルブロックを書き込むものとしたが、空領域ブロックの終端から書き込むものとしてもよい。
【００５６】
次に、制御部１３０は、ファイルブロック２の書き込みに伴う各データブロックのリンクアドレスを変更する処理を行う。具体的には、まず、ファイルブロック２の前方リンクアドレスＬｆに対して、空領域ブロック１の先頭アドレスａ５を書き込み、後方リンクアドレスＬｂに対して、ファイルブロック１の先頭アドレスａ３を書き込む。次に、空領域ブロック１の前方リンクアドレスＬｆに対して、ボリュームブロックの先頭アドレスａ０を書き込み、後方リンクアドレスＬｂに対して、新たに書き込まれたファイルブロック２の先頭アドレスａ４を書き込む。また、空領域ブロック１のサイズＳｄに対して、新たなサイズを書き込む。ファイルブロック１については、前方リンクアドレスＬｆおよび後方リンクアドレスＬｂとも変動がないため、リンクアドレスの変更は行わない。以上の処理により、新たなファイルブロック２の書き込み処理は終了する。
【００５７】
なお、上記ステップＳ１９０によって受信したファイルのサイズが、上記ステップＳ２００で検索された空領域ブロックのサイズ（正確には、当該空領域ブロックのデータ格納領域ＤＡのサイズ）よりも大きな場合には、上記ステップＳ２００において、更に、当該ファイルのサイズを超える他の空領域ブロックを検索するものとしてもよい。また、このような検索によっても空領域ブロックが検索されない場合には、複数の空領域ブロックを用いてファイルの書き込みを行うものとしてもよい。かかる場合には、上記ステップＳ１９０において受信したファイルを分割し、分割されたファイルの断片を各空領域ブロックに格納する。このとき、各空領域ブロックの種別情報に対しては、そのデータブロックにファイルの断片が格納されていることを示すパラメータ（例えば、「ｆｇ」）を記録する。こうすることにより、複数の空領域ブロックに跨るファイルの書き込みを行うことができる。
【００５８】
上述したステップＳ２１０におけるファイルの書き込み処理が終了すると、制御部１３０は、書き込んだファイルと、コンピュータから受信したファイルとをビット単位で比較することによりベリファイを行う（ステップＳ２２０）。ベリファイとは、ファイルが正常に書き込まれているか否かを判断するための処理である。このベリファイ処理は、上記ステップＳ２１０における書き込み処理と同時に実行するものとしてもよい。ベリファイによってファイルが正常に書き込まれたと判断した場合には（ステップＳ２３０：Ｙｅｓ）、制御部１３０は、ファイルアクセス処理を終了する。ファイルが正常に書き込まれていないと判断した場合には（ステップＳ２３０：Ｎｏ）、書き込みを行った領域内に欠損が発生していると判断し、以後のファイルアクセス処理において、この欠損領域が用いられないようにするため、ステップＳ２１０による書き込みを元に戻した上で欠損回避処理を行う（ステップＳ２４０）。
【００５９】
図１６は、欠損回避処理の概念を示す説明図である。上記ステップＳ２２０におけるベリファイによって、図１６の上部に示す空領域ブロック１の中に３バイト分の欠損領域が検出されたとする。すると、制御部１３０は、図１６の下部に示すように、この３バイト分の欠損領域を回避するように、空領域ブロック１を２つの空領域ブロック（空領域ブロック１および空領域ブロック２）に分割する。そして、空領域ブロック１と新たに生成された空領域ブロック２のリンクアドレスを相互に参照するように設定し、空領域ブロック１のサイズＳｄを、欠損領域を回避するように設定する。図１５の場合には、空領域ブロック２の先頭アドレスａ５と空領域ブロック１の先頭アドレスａ４の差をとり、更に、この差から欠損領域のサイズ（３バイト）を差し引いた値が、空領域ブロック１のサイズＳｄになる。このような欠損回避処理を行うことにより、空領域ブロックのリンク構造から欠損領域が除外されることとなるため、以降のファイルアクセス処理において、欠損領域が用いられることを防止することが可能になる。
【００６０】
制御部１３０は、上記ステップＳ２４０による欠損回避処理を実行した後、上記ステップＳ２００に処理を戻すことによって他の空領域ブロックを検索する。そして、再度、上述した一連の書き込み処理を実行する。こうすることによって、欠損領域を回避しつつファイルの書き込みを行うことができる。
【００６１】
ところで、本実施例のフラッシュメモリ１４０は、前述したように、ＮＡＮＤ型のフラッシュメモリである。そのため、フラッシュメモリ１４０に対する実際のファイルアクセスでは、データの消去を図１に示すブロック領域単位で行い、データの読み出し／書き込みをページ単位で行う必要がある。また、周知のように、ＮＡＮＤ型のフラッシュメモリでは既に書き込まれたデータを直接上書きすることができない。そのため、制御部１３０は、図１３〜１６で説明したリンクアドレスやデータの書き換えを次の順序で行う。
【００６２】
（１）書き換えを行う部分が含まれるブロック領域の内容をＲＡＭ１３２にコピーする。
（２）フラッシュメモリ１４０から（１）のブロック領域を消去する。
（３）ＲＡＭ１３２にコピーしたデータ内の目的の部分を書き換える。
（４）ＲＡＭ１３２からフラッシュメモリ１４０にデータを書き戻す。
【００６３】
制御部１３０は、以上の処理を書き換えを行う部分全てについて行う。こうすることで、フラッシュメモリ１４０に対するデータの記録を実現することができる。なお、本実施例では、空領域ブロックに対するデータの書き込みについても、このような方法によって行う。これは、ファイルの消去に伴って生成された空領域ブロックのように、データ格納領域ＤＡに、「Ｎｉｌ」データ以外のデータが書き込まれている空領域ブロックに対するデータの書き込みは、実質的にデータを書き換えることになるためである。もちろん、「Ｎｉｌ」データのみによって構成される領域に対しては、上述した方法によらず、ページ単位でデータを直接書き込むものとしてもよい。
【００６４】
以上、本発明の一実施例としてのデータ記憶装置１００の構成やその処理について説明した。本実施例のデータ記憶装置１００によれば、フラッシュメモリ１４０内に記録された各データブロックが、その管理情報格納領域ＭＡに記録された前方リンクアドレスＬｆや後方リンクアドレスＬｂによって鎖状にリンクされることになる。そのため、これらのリンクアドレスを辿ることにより、目的のデータにアクセスすることができる。このような構成とすることにより、ディレクトリエントリやＦＡＴ情報など、特定の領域に確保された管理情報を用いることなくデータの記録位置を管理することができる。従って、特定の領域に対するアクセスの集中が抑えられ、フラッシュメモリ１４０内に欠損が発生する可能性を抑制することができる。
【００６５】
また、本実施例によれば、各データブロックのリンクアドレスを変更することで、欠損領域に対するアクセスを容易に回避することができる。従って、従来のように欠損領域の存在するアドレスを記録するためのテーブルを用意する必要がないため、フラッシュメモリ１４０の記憶領域全体を効率的に利用することが可能となる。また、従来は、欠損領域が発生した場合にその領域の代替えを行うための代替領域を予め記憶領域内に確保する必要があったが、本実施例によるデータ記録方式によれば、このような代替領域の確保も不要となる。更に、従来は、例えば、１ビット分の欠損領域が存在している場合には、そのビットを含むブロック領域あるいはセクタ全体が使用不能となっていた。しかし、本実施例においてリンクアドレスの管理をビット単位で行うものとすれば、このような制限が排除され、極めて効率的に記憶領域全体を利用することが可能となる。
【００６６】
Ｄ．その他の実施例：
（１）上記実施例では、図２に示したように、アドレス空間をリング状に扱うものとしたが、このような態様に限られない。例えば、ボリュームブロックがフラッシュメモリ１４０の物理アドレスの先頭以外に配置されないような場合には、先頭アドレスと終端アドレスとが連続しない通常のアドレス空間を採用してもよい。このような場合には、図１０を例に説明すると、空領域ブロック３の前方リンクアドレスＬｆの参照先が終端アドレスｍｘとなり、ボリュームブロックの後方リンクアドレスＬｂの参照先がアドレスａ０となる。
【００６７】
（２）上記実施例では、図９に示したように、アドレス空間の先頭にボリュームブロックを配置するものとした。しかし、例えば、先頭領域に欠損が存在するような場合には、上述した初期化処理において、他の任意のアドレスにボリュームブロックを配置するものとしてもよい。このような場合には、初期化処理時に、ボリュームブロックが存在する物理アドレスのアドレス値をフラッシュメモリ１４０の終端アドレスなど、予め規定された所定のアドレスに記録しておく。制御部１３０は、こうして記録されたアドレス値をボリュームブロックへのポインタとして用いることにより、ボリュームブロックに対するアクセスを容易に行うことができる。
【００６８】
ボリュームブロックが存在する物理アドレスのアドレス値は、フラッシュメモリ１４０ではなく、ＲＡＭ１３１に記憶させるものとしてもよい。このような場合には、制御部１３０は、データ記憶装置１００の電源投入後の初回のアクセス時に、ボリュームブロックの記録された物理アドレスを属性情報Ｆａの値などに基づき先頭アドレスから順次検索する。そして、検索された物理アドレスをＲＡＭ１３１に記憶させる。制御部１３０は、こうしてＲＡＭ１３１に記憶されたアドレス値を用いることにより、２回目以降のボリュームブロックへのアクセスを迅速に行うことができる。
【００６９】
（３）図１２において説明したファイルの消去処理では、上記ステップＳ１７０以降において、更に、物理的に隣接した空領域ブロック同士を結合する処理を行うものとしてもよい。かかる処理では、まず、上記ステップＳ１７０によって生成された空領域ブロックと物理的に隣接する前後のデータブロックが、空領域ブロックであるか否かを判別する。そして、空領域ブロックである場合には、物理的に後に存在する空領域ブロックの管理情報格納領域ＭＡを消去し、物理的に前に存在する空領域ブロックの管理情報格納領域ＭＡに対して、結合後の新たなサイズを記録する。そしてそのリンクアドレスＬｆ，Ｌｂを他の空領域ブロックを参照するように設定する。このように、空領域ブロック同士を結合させる処理を行うことにより、ファイルが断片化して記録されることを抑制することができる。
【００７０】
このような空領域ブロックの結合処理は、上述したファイル消去のタイミング以外にも、例えば、一定時間コンピュータからデータ記憶装置１００に対するアクセスがない場合など、任意のタイミングで、隣接している空領域ブロックを検索して実行するものとしてもよい。こうすることで、効率的に、ファイルの断片化を抑制することが可能となる。
【００７１】
（４）上記実施例では、図１１や図１４に示したように、空領域ブロックは、ファイルブロックやディレクトリブロックのリンクの終端に配置されている。しかし、空領域ブロックは、ボリュームブロックを除く他のデータブロックと完全に独立したリンクを形成するものとしてもよい。このような場合には、ボリュームブロックのデータ記憶領域ＤＡに、空領域ブロックへのリンクを示すリンクアドレスを記録する。また、ファイルブロックやディレクトリブロックのリンクの終端は、空領域ブロックではなく、ボリュームブロックを参照するものとする。こうすることにより、ファイルブロックやディレクトリブロックを辿ることなく効率的に空領域ブロックを検索することが可能になる。
【００７２】
以上、本発明の種々の実施形態について説明したが、本発明はこうした形態に限定されず、その趣旨を逸脱しない範囲で種々の構成を採ることができることはいうまでもない。例えば、ソフトウェアによって実現した機能はハードウェアによって実現するものとしてもよい。また、フラッシュメモリは、ＮＡＮＤ型に限られず、ＮＯＲ型やＡＮＤ型などを採用するものとしてもよい。実施例では、フラッシュメモリを用いた補助記補記装置に本発明を適用する場合を説明したが、磁気ディスクや光磁気ディスクを備えた補助記憶装置に本発明を適用するものとしてもよい。
【図面の簡単な説明】
【００７３】
【図１】データ記憶装置１００の構成を示す説明図である。
【図２】アドレス空間のイメージを示す説明図である。
【図３】アドレス空間中に格納されるデータの構造を示す説明図である。
【図４】データブロックのリンク状態の例を示す説明図である。
【図５】ボリュームブロックのデータ構造を示す説明図である。
【図６】ファイルブロックのデータ構造を示す説明図である。
【図７】ディレクトリブロックのデータ構造を示す説明図である。
【図８】空領域ブロックのデータ構造を示す説明図である。
【図９】欠損領域がない場合におけるアドレス空間の初期状態を示す説明図である。
【図１０】欠損領域がある場合におけるアドレス空間の初期状態を示す説明図である。
【図１１】欠損領域が１つ存在する場合において上述した種々のデータブロックがアドレス空間中に配置された具体例を便宜的にリング状に示す説明図である。
【図１２】図１１に示した各データブロックのリンク状態によって実現されるディレクトリツリーを示す説明図である。
【図１３】ファイルアクセス処理のフローチャートである。
【図１４】ファイルブロックが削除されたことに伴うリンクアドレスの変更処理の具体例を示す説明図である。
【図１５】ファイルの書き込み処理の具体例を示す説明図である。
【図１６】欠損回避処理の概念を示す説明図である。
【符号の説明】
【００７４】
１００...データ記憶装置
１１０...ＵＳＢコネクタ
１２０...ＵＳＢデバイスコントローラ
１３０...制御部
１３１...ＣＰＵ
１３２...ＲＡＭ
１３３...ＲＯＭ
１４０...フラッシュメモリ
ＭＡ...管理情報格納領域
ＤＡ...データ格納領域
【図１】
2005301686.tif 000003
【図２】
2005301686.tif 000004
【図３】
2005301686.tif 000005
【図４】
2005301686.tif 000006
【図５】
2005301686.tif 000007
【図６】
2005301686.tif 000008
【図７】
2005301686.tif 000009
【図８】
2005301686.tif 000010
【図９】
2005301686.tif 000011
【図１０】
2005301686.tif 000012
【図１１】
2005301686.tif 000013
【図１２】
2005301686.tif 000014
【図１３】
2005301686.tif 000015
【図１４】
2005301686.tif 000016
【図１５】
2005301686.tif 000017
【図１６】
2005301686.tif 000018