(57)【特許請求の範囲】
【請求項１】
複数のセクタからなり、それら複数のセクタのうち連続する２ｉ個のセクタ(iは、0以上の整数)がデータ消去の最小単位であるブロックとしてグループ化されているメモリ領域を有する半導体メモリカードにおいて、
複数のセクタのうち２j個のセクタ(jは、0以上の整数)に格納されるデータ群をクラスタとして管理し、１つ以上のクラスタをファイルとして管理することにより、ファイルアクセスを実現するアクセス装置であって、
前記メモリ領域において管理されるべきクラスタ数に基づいて、同一ファイルとして管理される前記クラスタ間のリンク関係をファイル毎に示すファイルアロケーションテーブルのデータサイズを算出し、マスタブートレコード、パーティションテーブル、パーティションブートセクタ、ファイルアロケーションテーブル及びルートディレクトリエントリを含むボリューム管理情報のデータサイズを算出する算出手段と、
算出されたボリューム管理情報のデータサイズを上回り、尚且つ、２以上のブロックからなる第１領域を、ボリューム管理情報の記録のために確保し、第１領域に後続するブロックからなる第２領域を、ユーザデータの記録のために確保する確保手段と、
前記第１の領域の先頭ブロックの先頭セクタに前記マスタブートレコードと前記パーティションテーブルを記録し、前記先頭セクタから所定数のセクタを隔てて前記先頭ブロックとは異なるブロックに前記パーティションブートセクタ、前記ファイルアロケーションテーブル、及び前記ルートディレクトリエントリを前記第１の領域の末尾と前記ルートディレクトエントリの末尾が一致するように記録し、第２領域にユーザデータを記録する記録手段とを備え、
前記算出手段は、前記メモリ領域に含まれる総セクタ数と、前記１つのクラスタに含まれるセクタ数とを用いて、ファイルアロケーションテーブルを構成するセクタ数Size1を算出して、
パーティションブートセクタのセクタ数RSCと、ルートディレクトリエントリのセクタ数RDEと、二重化されたファイルアロケーションテーブルのセクタ数Size1×2との総和であるSUMを求め、
前記確保手段は、NOM＋SUM＝ｍ×２jに基づき数値ｍを算出すると共に、NOMを算出し、総セクタ数と前記算出したボリューム管理情報の大きさ(NOM+SUM)に基づいてファイルアロケーションテーブルの大きさSize2を算出し、前記算出されたセクタ数Size2が、セクタ数Size1と等しいか否かを判定し、等しいなら、第１領域の確保を行うが、等しくないなら、セクタ数Size2をセクタ数Size1に代入することでSUMを更新して、NOMの算出をやり直し、
前記記録手段は、前記算出されたセクタ数NOMから、先頭セクタのセクタ数を引き、これにより得られた数値を前記所定のセクタ数として算出する
ことを特徴とするアクセス装置。
【請求項２】
前記第１領域を構成する２以上のブロックのうち先頭のブロックは、マスタブートレコード及びパーティションテーブルが記録された先頭セクタと、第１の予約領域とからなり、
第１領域を構成する２以上のブロックのうち残りのブロックは、第２の予約領域と、パーティションブートセクタ、ファイルアロケーションテーブル及びルートディレクトリエントリーが記録された領域とからなる
ことを特徴とする請求項１記載のアクセス装置。
【請求項３】
前記記録手段は、ボリューム管理情報の記録にあたって、セクタ数NOMを、パーティションテーブルに設定する
ことを特徴とする請求項１記載のアクセス装置。
【請求項４】
前記ファイルアロケーションテーブルの記録に必要なセクタ数は、前記メモリ領域において管理されるべきクラスタ数に基づいた値である
ことを特徴とする請求項１記載のアクセス装置。
【請求項５】
前記ファイルアロケーションテーブルは、前記第２領域に格納され得る複数クラスタの総数に相等しい数のエントリーからなり、各エントリーは、同一ファイルとして管理されるクラスタ間のリンク関係を示し、
前記アクセス装置は更に、
メモリ領域における総セクタ数の設定を受け付ける受付手段を備え、
前記算出手段は、
受け付けた総セクタ数を、クラスタに対応する２j個のセクタ数で割ることにより、総クラスタ数を算出し、算出された総クラスタ数にエントリー1つ当たりのビット長を乗ずることにより、ファイルアロケーションテーブルのサイズを算出する第１算出部を備え、
前記確保手段は
算出されたファイルアロケーションテーブルのサイズと、パーティションブートセクタを構成するセクタ数と、ルートディレクトリエントリを構成するセクタ数との総和SUMをＮＯＭ＋ＳＵＭ＝ｍ×２jに適用することにより、数値mを算出する第２算出部
を備えることを特徴とする請求項１記載のアクセス装置。
【請求項６】
前記メモリ領域には、
半導体メモリカードと接続している機器の正当性が認証された場合のみ、当該機器によりアクセスされるプロテクト領域と、
機器の正当性が認証されるか否かに拘らず、当該機器によりアクセスされるユーザデータ領域とが存在し、
前記受付手段は、
プロテクト領域及びユーザデータ領域のそれぞれに割り当てるべき、総セクタ数の設定をアクセス装置外部から受け付けて、
前記第１算出部は、
プロテクト領域及びユーザデータ領域のそれぞれについての総セクタ数及びクラスタ数の設定に基づいて、それらの領域におけるファイルアロケーションテーブルのサイズを算出し、
前記第２算出部は、
プロテクト領域及びユーザデータ領域のそれぞれについて算出されたファイルアロケーションテーブルのサイズと、パーティションブートセクタを構成するセクタ数と、ルートディレクトリエントリを構成するセクタ数との総和SUMをＮＯＭ＋ＳＵＭ＝ｍ×２jに適用することにより、プロテクト領域及びユーザデータ領域のそれぞれについての数値mを算出する
ことを特徴とする請求項５記載のアクセス装置。
【請求項７】
前記プロテクト領域のクラスタサイズと、前記ユーザデータ領域のクラスタサイズとは、互いに異なる
ことを特徴とする請求項６記載のアクセス装置。
【請求項８】
前記記録手段は、
ユーザデータを第２領域に記録するにあたって、前記ユーザデータを複数に分割することにより得られた複数の分割部分を、複数のクラスタとして第２領域に記録する処理(1)と、
前記複数のクラスタ間のリンク関係を示す複数のエントリーをファイルアロケーションテーブルに設定する処理(2)と、
前記ファイルについてのファイル名と、そのファイルを構成するクラスタのうち、先頭のものの所在を示す位置情報とを前記ルートディレクトリエントリに記録する処理(3)とを行う
ことを特徴とする請求項５記載のアクセス装置。
【請求項９】
前記確保手段は更に、第１領域と、第２領域とは別に予備領域をメモリ領域に確保し、
前記記録手段は、
第２領域に記録されたユーザデータを拡張属性が設定されたファイルとして管理する際、予備領域に、当該拡張属性を示す属性情報を記録する
ことを特徴とする請求項１記載のアクセス装置。
【請求項１０】
前記半導体メモリカードは更に、複数のブロックのそれぞれに対応づけられた複数の属性エントリーからなる属性テーブルを保持しており、
第２領域に記録されたユーザデータは、書込禁止属性が設定されたファイルを構成する1つ以上のクラスタとして管理されており、
前記記録手段は、
前記属性テーブルにおける複数の属性エントリーのうち、当該クラスタを格納する2のj乗個のセクタのみからなるブロックに対応するものに、書き込み禁止属性を設定する
ことを特徴とする請求項１記載のアクセス装置。
【請求項１１】
前記ボリューム管理情報は、ファイルアロケーションテーブルを含み、
前記ファイルアロケーションテーブルは、未使用のクラスタに対応するエントリーが、第１の値が設定され、使用中のクラスタに対するエントリーが、第１の値以外の値が設定され、
前記半導体メモリカードは更に、
メモリ領域に含まれる複数のブロックのうち、消去済みブロックを特定する物理アドレスからなる消去済みフリーリストを保持しており、
前記アクセス装置は
ファイルアロケーションテーブルにおいて未使用と設定されているクラスタを格納する2のj乗個のセクタのみを含むブロックであって、消去済みフリーテーブルにおいて未消去と設定されているものを特定する特定手段と
特定された消ブロックを消去する消去手段と
を備えることを特徴とする請求項１記載のアクセス装置。
【請求項１２】
前記ファイルアロケーションテーブルの複数のエントリーのうち未使用のクラスタに対応するものは、第１の値が設定され、使用中のクラスタに対するエントリーには、第１の値以外の値が設定され、
半導体メモリカードは、各ブロックに対応づけられたエントリーとからなる消去済みフリーテーブルを保持し、
各エントリーは、各ブロックが消去済みであるか、未消去であるかを示し、
前記アクセス装置は
ファイルアロケーションテーブルにおいて未使用と設定されているクラスタを格納する2のj乗個のセクタのみを含むブロックであって、消去済みフリーテーブルにおいて未消去と設定されているものを特定する特定手段と、
特定されたブロックを消去する消去手段と
を備えることを特徴とする請求項１記載のアクセス装置。
【請求項１３】
前記各ブロックには、ユーザデータを分割することにより得られた複数の分割部分が格納され、
前記半導体メモリカードは、複数の分割部分が格納されたブロックに付された物理アドレスと、論理アドレスとの対応関係を示すテーブルを保持しており、
前記アクセス装置は
テーブルにおいて各分割部分を格納した複数ブロックについての複数の物理アドレスが、不連続な複数の論理アドレスに割り当てられている場合、これら複数ブロックについての複数の物理アドレスに、連続する複数の論理アドレスを割り当てる割当手段と、
連続する複数の論理アドレスのうち、先頭のものを指定した読出コマンドを半導体メモリカードに発行することにより、連続する複数の論理アドレスが割り当てられた複数のブロックから、分割部分を読み出すコマンド発行手段と
を備えることを特徴とする請求項１記載のアクセス装置。
【請求項１４】
複数のセクタからなり、それら複数のセクタのうち連続する２ｉ個のセクタ(iは、0以上の整数)がデータ消去の最小単位であるブロックとしてグループ化されているメモリ領域を有する半導体メモリカードにおいて、
複数のセクタのうち２j個のセクタ(jは、0以上の整数)に格納されるデータ群をクラスタとして管理し、１つ以上のクラスタをファイルとして管理することにより、ファイルアクセスを実現するコンピュータに、初期化処理を行わせる初期化プログラムをコンピュータ読取可能な形式で記録している記録媒体であって、
前記メモリ領域において管理されるべきクラスタ数に基づいて、同一ファイルとして管理される前記クラスタ間のリンク関係をファイル毎に示すファイルアロケーションテーブルのデータサイズを算出し、マスタブートレコード、パーティションテーブル、パーティションブートセクタ、ファイルアロケーションテーブル及びルートディレクトリエントリを含むボリューム管理情報のデータサイズを算出する算出ステップと、
算出されたボリューム管理情報のデータサイズを上回り、尚且つ、２以上のブロックからなる第１領域を、ボリューム管理情報の記録のために確保し、第１領域に後続するブロックからなる第２領域を、ユーザデータの記録のために確保する確保ステップと、
前記第１の領域の先頭ブロックの先頭セクタに前記マスタブートレコードと前記パーティションテーブルを記録し、前記先頭セクタから所定数のセクタを隔てて前記先頭ブロックとは異なるブロックに前記パーティションブートセクタ、前記ファイルアロケーションテーブル、及び前記ルートディレクトリエントリを前記第１の領域の末尾と前記ルートディレクトエントリの末尾が一致するように記録し、第２領域にユーザデータを記録する記録ステップとを有し、
前記算出ステップが前記メモリ領域に含まれる総セクタ数と、前記１つのクラスタに含まれるセクタ数とを用いて、ファイルアロケーションテーブルを構成するセクタ数Size1を算出して、
パーティションブートセクタのセクタ数RSCと、ルートディレクトリエントリのセクタ数RDEと、二重化されたファイルアロケーションテーブルのセクタ数Size1×2との総和であるSUMを求め、
前記確保ステップは、NOM＋SUM＝ｍ×２jに基づき数値ｍを算出すると共に、NOMを算出し、総セクタ数と前記算出したボリューム管理情報の大きさ(NOM+SUM)に基づいてファイルアロケーションテーブルの大きさSize2を算出し、前記算出されたセクタ数Size2が、セクタ数Size1と等しいか否かを判定し、等しいなら、第１領域の確保を行うが、等しくないなら、セクタ数Size2をセクタ数Size1に代入することでSUMを更新して、NOMの算出をやり直し、
前記記録ステップは、前記算出されたセクタ数NOMから、先頭セクタのセクタ数を引き、これにより得られた数値を前記所定のセクタ数として算出する
手順をコンピュータに行わせる初期化プログラムが記録されていることを特徴とするコンピュータ読取可能な記録媒体。
【請求項１５】
複数のセクタからなり、それら複数のセクタのうち連続する２ｉ個のセクタ(iは、0以上の整数)がデータ消去の最小単位であるブロックとしてグループ化されているメモリ領域を有する半導体メモリカードにおいて、
複数のセクタのうち２j個のセクタ(jは、0以上の整数)に格納されるデータ群をクラスタとして管理し、１つ以上のクラスタをファイルとして管理することにより、ファイルアクセスを実現するコンピュータに、初期化処理を行わせる初期化方法であって、
前記メモリ領域において管理されるべきクラスタ数に基づいて、同一ファイルとして管理される前記クラスタ間のリンク関係をファイル毎に示すファイルアロケーションテーブルのデータサイズを算出し、マスタブートレコード、パーティションテーブル、パーティションブートセクタ、ファイルアロケーションテーブル及びルートディレクトリエントリを含むボリューム管理情報のデータサイズを算出する算出ステップと、
算出されたボリューム管理情報のデータサイズを上回り、尚且つ、２以上のブロックからなる第１領域を、ボリューム管理情報の記録のために確保し、第１領域に後続するブロックからなる第２領域を、ユーザデータの記録のために確保する確保ステップと、
前記第１の領域の先頭ブロックの先頭セクタに前記マスタブートレコードと前記パーティションテーブルを記録し、前記先頭セクタから所定数のセクタを隔てて前記先頭ブロックとは異なるブロックに前記パーティションブートセクタ、前記ファイルアロケーションテーブル、及び前記ルートディレクトリエントリを前記第１の領域の末尾と前記ルートディレクトエントリの末尾が一致するように記録し、第２領域にユーザデータを記録する記録ステップとを有し、
前記算出ステップは、前記メモリ領域に含まれる総セクタ数と、前記１つのクラスタに含まれるセクタ数とを用いて、ファイルアロケーションテーブルを構成するセクタ数Size1を算出して、
パーティションブートセクタの記録に必要なセクタ数RSCと、ルートディレクトリエントリのセクタ数RDEと、二重化されたファイルアロケーションテーブルのセクタ数Size1×2との総和であるSUMを求め、
前記確保ステップは、NOM＋SUM＝ｍ×２jに基づき数値ｍを算出すると共に、NOMを算出し、総セクタ数と前記算出したボリューム管理情報の大きさ(NOM+SUM)に基づいてファイルアロケーションテーブルの大きさSize2を算出し、前記算出されたセクタ数Size2が、セクタ数Size1と等しいか否かを判定し、等しいなら、第１領域の確保を行うが、等しくないなら、セクタ数Size2をセクタ数Size1に代入することでSUMを更新して、NOMの算出をやり直し、
前記記録ステップは、前記算出されたセクタ数NOMから、先頭セクタのセクタ数を引き、これにより得られた数値を前記所定のセクタ数として算出する
ことを特徴とする初期化方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術部分野】
本発明は、EEPROM等の不揮発メモリを内蔵した半導体メモリカードをアクセスするアクセス装置、半導体メモリカードについての初期化プログラムを記録したコンピュータ読取可能な記録媒体、初期化方法、及び半導体メモリカードに関し、特に、不揮発メモリに対するデータ書換効率を向上させる改良に関する。
【０００２】
【従来の技術】
小型・軽量であることを長所とする半導体メモリカードは、様々な技術分野において、記録媒体としての確固たる地位を築きつつある。半導体メモリカードは、EEPROMと呼ばれる不揮発メモリを内蔵しており、半導体メモリカードと接続した機器は、この不揮発メモリに対するアクセスを行うことにより、半導体メモリカードを記録媒体として利用する。EEPROMにおいて白紙の状態にあるセクタに関しては、磁気ディスク、光ディスク同様、データを直接書き込むことができる。一方、既にデータが書かれているセクタに対しては、一旦書込先に記録されているデータを消去して、白紙の状態に戻してからデータ書き込みを行わねばならない。多くの半導体メモリカードに内蔵されているNAND型と呼ばれるEEPROMにあっては、セクタを白紙の状態に戻すという作業を32個のセクタに対して一括して行う必要があるので（この不揮発メモリにおいて32個のセクタ群は消去可能ブロックと呼ばれる。）、半導体メモリカードは、消去可能ブロックをアクセス単位とした領域管理を実現するべく、専用の制御回路を内蔵している。そして消去可能ブロックの状態管理、及び、消去可能ブロックに対するデータの読み出し、データ書き込みをこの制御回路に委ねている。
【０００３】
以上のことから、半導体メモリカードは、磁気ディスク、光ディスク型の記録媒体とは全く異なる独特のハードウェア構造(物理層)を有している。その反面、図３５に示すような物理層・ファイルシステム層・応用層からなるレイヤモデルにて、データ管理を行っている点は、磁気ディスク、光ディスクと共通しているといえる。図３６は、物理層のレイアウトを詳細に示す図である。図３６において、物理層におけるボリューム領域は、消去可能ブロックを複数配置してなる。各消去可能ブロックは、32個のセクタからなり、16KByteのデータ長を有している。図３７に、ファイルシステム層のレイアウトを詳細に示す。図３７に示すファイルシステム層のレイアウトは、俗にFAT型ファイルシステムと呼ばれるものである。FAT型ファイルシステムにおいて、ボリューム領域における領域管理は、クラスタとよばれる単位を用いて行われる。ボリューム領域の先頭にはボリューム管理情報が配置され、ボリューム管理情報の直後にはユーザデータの記録のための領域であるユーザ領域が配置される。ボリューム管理情報は、マスタブートレコード、パーティションテーブル、パーティションブートセクタ、二重化ファイルアロケーションテーブル(FAT)、ルートディレクトリエントリからなる。このうち、二重化ファイルアロケーションテーブルは、ボリューム領域に含まれる複数のクラスタに対応づけられ、クラスタと、クラスタとの間のリンク関係を示す。こうしたファイルシステム層を設けることにより、応用層では、ディレクトリ、ファイルからなる階層構造にて、データが格納されることなる。レイヤモデルの導入により、アクセス装置は、物理層の違いを意識せずに、磁気ディスク、光ディスク型の記録媒体をアクセスするのと同じ手順を経て、半導体メモリカードをアクセスすることができる。
【０００４】
【発明が解決しようとする課題】
ところで、ファイルシステムのボリューム領域に、データを格納するにあたって、ボリューム領域のデータサイズをユーザが任意に決める機会が多々ある。
ユーザの要望に応じてボリューム領域のサイズを変化させた場合、ボリューム領域に含まれるクラスタ数が増減する。クラスタ数が増減すれば、それらクラスタに対応するエントリーからなるFATのサイズも増減し、このFATを含むボリューム管理情報のサイズも、増減することなる。こうしてボリューム管理情報のサイズが増減すると、ボリューム管理情報に後続するユーザ領域の先頭アドレスも、変動することなる。ユーザ領域の先頭アドレスは、ボリューム領域のサイズに応じて変動するものなので、無論このユーザ領域に含まれる各クラスタの先頭アドレスもユーザ領域のサイズに応じて変動する。
【０００５】
クラスタの先頭アドレスが、ユーザ領域のサイズに応じて変動するとなると、2つの消去可能ブロックの境界をまたぐように、クラスタが配置されたり、ボリューム管理情報の終端部分と、ユーザ領域の先頭に位置するクラスタとが同じ消去可能ブロックに配置されることも有り得る。ボリューム管理情報の終端部分と、ユーザ領域の先頭に位置するクラスタとが同じ消去可能ブロックに配置された状態のボリューム領域のレイアウトを図３８に示す。図３８のようにクラスタが配置されれば、このクラスタに格納されたデータを書き換えたい場合、このクラスタが配置されている2つの消去可能ブロックを読み出して、2つの消去可能ブロックを白紙の状態に戻さねばならない。一方不揮発メモリは、絶縁層に浮遊ゲートを埋設してなる記憶素子から構成されており、かかる構造の記憶素子は、数万回の消去を限界としているので、1つのクラスタの書き換えのために、2つの消去可能ブロックを消去するような現象が多く発生すれば、不揮発メモリ自体の寿命を著しく縮める結果となる。
【０００６】
仮に32個のセクタを1つのクラスタとして管理する場合、クラスタに対するデータの書き込みは、書込先が消去済みならば32×200μ秒(200μ秒は、セクタ1つ当たりの書き込みに要する時間)にて完遂するが、書込先の消去を先に行ってからデータ書き込みを行う場合は、これに約2m秒の消去時間が追加される。クラスタが2つの消去可能ブロックの境界を跨いでいるため、2つのブロックの消去が必要となると、書込先の消去に、4m秒が費やされることなり、データ書き込み時間の長期化が顕著化してしまう。
【０００７】
本発明の目的は、消去可能ブロックに対する書き換えのための処理時間の低減化を図り、また不揮発メモリについての高寿命化を実現するようなデータ格納フォーマットを半導体メモリカード上に形成するアクセス装置を提供することである。
【０００８】
【課題を解決するための手段】
SD(Secure Digital)メモリカードと呼ばれるタイプの半導体メモリカードの実用にあたっては、上述したような、処理時間の低減化及び不揮発メモリについての高寿命化といった問題の解決が強く迫られる。その理由は以下の通りである。SDメモリカードには、データの暗号化に用いられた暗号鍵や、著作物の再生の際の課金に用いられる課金情報等、ユーザへの公開が望ましくない情報を格納しておくための領域（プロテクト領域という）が一般ユーザが使用できる領域とは別に、ボリューム領域上に設けられる。非公開が要求されるデータの量は、アプリケーションプログラムの種別毎に異なるので、プロテクト領域のサイズは、アプリケーションプログラムの種別に応じて変化させねばならない。プロテクト領域のサイズが変化するとなると、ボリューム領域のレイアウトは、アプリケーションプログラムの種別に応じて変化することなる。アプリケーションプログラムの種別に応じて、ボリューム領域のレイアウトを変化させるとなると、クラスタが、消去可能ブロックの境界を跨ぐようなレイアウトが多く発生しうるので、上述した目的の達成は強く望まれる。
【０００９】
こうした目的達成のため、半導体メモリカードについてのアクセス装置は、複数のセクタからなり、それら複数のセクタのうち連続する２ｉ個のセクタ(iは、0以上の整数)がデータ消去の最小単位であるブロックとしてグループ化されているメモリ領域を有する半導体メモリカードにおいて、複数のセクタのうち２j個のセクタ(jは、0以上の整数)に格納されるデータ群をクラスタとして管理し、１つ以上のクラスタをファイルとして管理することにより、ファイルアクセスを実現するアクセス装置であって、前記メモリ領域において管理されるべきクラスタ数に基づいて、同一ファイルとして管理される前記クラスタ間のリンク関係をファイル毎に示すファイルアロケーションテーブルのデータサイズを算出し、マスタブートレコード、パーティションテーブル、パーティションブートセクタ、ファイルアロケーションテーブル及びルートディレクトリエントリを含むボリューム管理情報のデータサイズを算出する算出手段と、算出されたボリューム管理情報のデータサイズを上回り、尚且つ、２以上のブロックからなる第１領域を、ボリューム管理情報の記録のために確保し、第１領域に後続するブロックからなる第２領域を、ユーザデータの記録のために確保する確保手段と、前記第１の領域の先頭ブロックの先頭セクタに前記マスタブートレコードと前記パーティションテーブルを記録し、前記先頭セクタから所定数のセクタを隔てて前記先頭ブロックとは異なるブロックに前記パーティションブートセクタ、前記ファイルアロケーションテーブル、及び前記ルートディレクトリエントリを前記第１の領域の末尾と前記ルートディレクトエントリの末尾が一致するように記録し、第２領域にユーザデータを記録する記録手段とを備え、
前記算出手段は、前記メモリ領域に含まれる総セクタ数と、前記１つのクラスタに含まれるセクタ数とを用いて、ファイルアロケーションテーブルを構成するセクタ数Size1を算出して、パーティションブートセクタのセクタ数RSCと、ルートディレクトリエントリのセクタ数RDEと、二重化されたファイルアロケーションテーブルのセクタ数Size1×2との総和であるSUMを求め、前記確保手段は、NOM＋SUM＝ｍ×２jに基づき数値ｍを算出すると共に、NOMを算出し、総セクタ数と前記算出したボリューム管理情報の大きさ(NOM+SUM)に基づいてファイルアロケーションテーブルの大きさSize2を算出し、前記算出されたセクタ数Size2が、セクタ数Size1と等しいか否かを判定し、等しいなら、第１領域の確保を行うが、等しくないなら、セクタ数Size2をセクタ数Size1に代入することでSUMを更新して、NOMの算出をやり直し、前記記録手段は、前記算出されたセクタ数NOMから、先頭セクタのセクタ数を引き、これにより得られた数値を前記所定のセクタ数として算出することを特徴としている。
【００１０】
【発明の実施の形態】
以降、図面を参照しながら、半導体メモリカード、半導体メモリカード及びアクセス装置からなるシステムについての実施形態について説明する。
図１は、半導体メモリカードの外観形状を示す図であり、図２（ａ）、図２（ｂ）は、アクセス装置の外観形状を示す図である。図３（ａ）は、半導体メモリカード１００及びアクセス装置の内部構成を示す図である。
【００１１】
半導体メモリカード１００は、図１に示すような外観形状を有しており、長さ32.0 mm、幅24.0 mm、厚さ2.1 mmといった大きさ（切手サイズの大きさ）のカード型記録媒体である。ユーザはこの半導体メモリカード１００を指先で把持することができる。半導体メモリカード１００には、アクセス装置との接続のための９本のコネクタが設けられており、側面には、記憶内容の上書きを許可するか禁止するかを操作者が設定することができるプロテクトスイッチ１０１が設けられている。半導体メモリカード１００は、図３（ａ）の下半分に示すように、NAND型EEPROMである不揮発メモリ１と、アクセス装置から発せられるコマンドに従って、不揮発メモリに対するデータ書き込み、不揮発メモリからのデータ読み出し、データ消去を行うアクセス制御部２と、不揮発メモリから読み出されたデータを書き換える際、データの一時格納に用いられるワークメモリ３とを含む。
【００１２】
次にアクセス装置について説明する。アクセス装置は、図２（ａ）に示すような民生用音響機器、図２（ｂ）に示すようなパソコン等の情報機器であり、図３（ａ）の上半分に示すように、半導体メモリカード１００を接続するためのカードコネクタ４と、半導体メモリカード１００をアクセスするための各種ソフトウェアを格納した二次記憶装置５と、アクセス装置における統合制御を行うCPU６と、半導体メモリカード１００をアクセスする際、FATやルートディレクトリエントリの一時的な格納に用いられる一次記憶装置７とからなる。図３（ｂ）は、アクセス装置にて用いられるソフトウェアのレイヤモデルを示す図である。本図に示すように、アクセス装置のソフトウェアは、映像再生、音声再生等のアクセス装置固有の処理を行うアプリケーションプログラム８と、ファイルの読み出し、書き込み、ファイルの削除、ファイルの書き換えといったファイルシステムに対する操作を、アプリケーションプログラム８からの指示に従って実行するファイルシステム操作部９と、半導体メモリカード１００に対して読出コマンド、書込コマンドを発行することにより、ファイルシステムに対する操作を実践するデバイスドライバ１０とからなる。
【００１３】
続いて、不揮発メモリ１におけるデータ格納フォーマットの一例について説明する。不揮発メモリ１は、図４に示したようなフォーマットで、データ格納を行う。図４において、不揮発メモリの全体はボリューム領域と称される。ボリューム領域は、複数のクラスタにより管理される領域であり、パーティション管理領域と、パーティション（パーティションは、レギュラー領域と呼ばれる）とからなる。図４の右段に示すように、パーティションは、システム領域と、ユーザ領域とに区分けされる。
【００１４】
ユーザ領域の先頭アドレスは、システム領域の直後であるが、システム領域における二重化FATのサイズは、ユーザ領域のサイズに応じて増減し得るので、これに応じてユーザ領域の先頭アドレスが変動する点は、従来技術で述べた通りである。ボリューム領域における各セクタは、ボリューム領域の先頭を基準とした物理アドレスにて指示される。
【００１５】
以降、ボリューム領域に含まれる各領域について説明してゆく。図５は、ボリューム領域に含まれる『パーティション管理領域』、『システム領域』、『ユーザ領域』の構成を示す図である。
『パーティション管理領域』は、マスタブートレコード&パーティションテーブルセクタと、Reserved情報1/2,2/2とからなる。マスタブートレコード&パーティションテーブルセクタの構成を詳細に表したものが図６（ａ）である。図６（ａ）では、"＜"型の矢印を用いて、マスタブートレコード&パーティションテーブルセクタの内容を階層的に表現している。矢印ky1に示すように、マスタブートレコード&パーティションテーブルセクタは、マスタブートレコード(Master Boot Record)、4つのパーティションテーブル(Partition Table1,2,3,4)、Signature Wordからなる。
【００１６】
『マスタブートレコード』は、自身に後続する領域が"物理的な一つの媒体（物理媒体）"であることをアクセス装置に認識させるための標識である。本図では、ボリューム領域にマスタブートレコードが1つだけ存在するので、ボリューム領域において1つの物理媒体がアクセス装置により認識され得るが、仮にボリューム領域にマスタブートレコードを2つ配せば、2つの物理媒体がアクセス装置により認識される。
【００１７】
『パーティションテーブル』は、パーティションに関する情報が記述されたテーブルであり、矢印ky2に示すように、本半導体メモリカード１００を起動ドライブとして用いる際、0x80が設定される"Boot Indicator"と、パーティションの開始ヘッダを特定する"Starting Head"と、パーティションの開始セクタ・開始シリンダを特定する"Starting Sector/Starting Cylinder"と、パーティションのサイズが32680Byteより少ない場合、01が設定され、65536Byteより少ない場合、04が設定されることにより、ファイルシステムのタイプを示す"SystemID"と、"Ending Head"と、パーティションの終了セクタ・終了シリンダを特定する"Ending Sector/Ending Cylinder"と、このパーティションの開始セクタまでの相対セクタ数を示す"Relative Sector"と、パーティションのセクタ数が設定される"Total Sector"とからなる。
【００１８】
続いて半導体メモリカード１００のパーティションについて説明する。パーティションは、システム領域及びユーザ領域からなるが、ユーザ領域と、システム領域の順に、これらの領域の説明を行う。ユーザ領域の説明にあたっては、図７（ｃ）を引用する。
『ユーザ領域』は、クラスタを最小単位にして、ファイルが格納される領域である。図７（ｃ）における破線の引き出し線ff2は、ユーザ領域に含まれる複数のクラスタ002,003,004,005・・・・・を示す。図中の番号002,003,004,005,006,007,008・・・・・・・は、各クラスタを識別するために付与された3桁の16進数表記のクラスタ番号を示す。データ領域に対するアクセスは、クラスタを最小単位として行われるので、データ領域の内部位置は、これらのクラスタ番号を用いて、指示される。
【００１９】
システム領域は、パーティションブートセクタ、二重化FAT、ルートディレクトリエントリからなる。パーティションブートセクタの説明にあたっては図６（ｂ）を、二重化FATの説明にあたっては図７（ａ）を、RDEの説明にあたっては図７（ｂ）を引用するものとして、これらの領域について順次説明する。
パーティションブートセクタは、図６（ｂ）に示すような情報項目を有するExtend FDC記述子が設定される。図６（ｂ）によれば、Extend FDC記述子は、Jump Command,Creating System Identifier,一セクタのサイズ(Sector Size), 一クラスタ当たりのセクタ数(Sector per Cluster),Reserved Sector Count,二重化FATに含まれるFAT数(Numbr of FATs),ルートディレクトリエントリのデータ長(Number of Root-directory Entries),Total Sectors,Medium Identifier,FAT1つ当たりのセクタ数(Sector Per FAT),Sector Per Track,Number of Sides,Number of Hidden Sectors,システム領域及びユーザ領域における総セクタ数(Total Sectors),Physical Disk Number,Extended Boot Record Signature,Volume ID Number,ボリュームラベル(Volume Label),File System Type,Signature Word等の項目が設定される。
【００２０】
『二重化ファイルアロケーションテーブル(FAT)』は、ISO/IEC 9293に準拠した2つのFATからなる。各FATは、各クラスタに対応づけられた複数のFATエントリーからなる。各FATエントリーは、対応するクラスタが使用中であるか、未使用であるかを示すものであり、対応するクラスタが未使用であれば、そのファイルエントリーには、"0"が設定され、対応するクラスタが使用中であれば、クラスタ番号が設定される。このクラスタ番号は、対応するクラスタが読み出された場合、次にどのクラスタを読み出せばよいかといったクラスタ間のリンク関係を示す。図７（ａ）の破線の引き出し線ff1は、FATに含まれる複数のFATエントリー002,003,004,005・・を示す。このFATエントリーに付与された数値『002,003,004,005・・』は、各FATエントリーがどのクラスタに対応づけられているか、つまり、各FATエントリーが対応づけられているクラスタのクラスタ番号を示す。
【００２１】
『ルートディレクトリエントリ』は、ルートディレクトリに存在する複数ファイルについてのファイルエントリーを複数含む。各ファイルエントリーは、存在するファイルの「ファイル名」と、そのファイルの「ファイル拡張子」と、ファイルの先頭部が格納されている「ファイル最初のクラスタ番号」と、そのファイルについての「ファイル属性」と、ファイルが記録された「記録時刻」と、ファイルの「記録日付」と、ファイルのデータ長である「ファイル長」とを含む。
【００２２】
ここで、ルートディレクトリにAOB001.SA1というファイルを格納する場合、AOB001.SA1がどのように格納されるか、即ち、ファイル格納方式の一例を図８を参照しながら説明する。上述したようにデータ領域の最小アクセス単位はクラスタであるので、AOB001.SA1は、クラスタサイズを最小単位にしてデータ領域に格納せねばならない。AOB001.SA1は、先ずクラスタサイズに分割されて、各クラスタに書き込まれる。図８は、AOB001.SA1をクラスタサイズに合わせて5つに分割し、各分割部分を、クラスタ003,004,005,00A,00Cに格納する状態を想定した図である。
【００２３】
AOB001.SA1が分割格納されると、ディレクトリエントリー及びFATは、図９のように設定されねばならない。
図９は、AOB001.SA1が複数のクラスタに記録されている場合のディレクトリエントリー及びFATについての設定例を示す図である。本図においてAOB001.SA1の先頭部分がクラスタ003に記録されている場合、ルートディレクトリエントリーにおける『最初のクラスタ番号』には、その先頭部分が格納されているクラスタについてのクラスタ番号003が記載される。以降、AOB001.SA1の後続する部分は、クラスタ004、クラスタ005に格納されていることがわかる。AOB001.SA1の先頭部分を格納しているクラスタ003には、FATエントリー003(004)が対応しているが、このFATエントリーは、AOBファイルの後続する部分を格納しているクラスタ004を示すものである。またこれに後続している部分を格納しているクラスタ004,005には、FATエントリー004(005),FATエントリー005(00A)が対応しているが、これのFATエントリーは、AOBファイルの次の後続する部分を格納しているクラスタ005,00Aを示すものである。
【００２４】
これらFATエントリーに記載されたクラスタ番号を矢印fk1,fk2,fk3,fk4,fk5・・・・・に示すように順次読みとってゆけば、AOB001.SA1の分割部分を全て読み取ることができる。以上の説明により、半導体メモリカード１００のユーザ領域は、クラスタを最小単位としてアクセスされ、また各クラスタにはそれぞれFATエントリーが対応づけられていることがわかる。尚、AOBファイルの末尾の部分を格納したクラスタ(図９の一例では、クラスタ00C)に対応づけられているFATエントリーには、そのクラスタがファイルの最終部分を格納していることを示すクラスタ番号『FFF』が記述される。
【００２５】
これまでの説明は、不揮発メモリにおけるファイルシステムの構成を一通り解説にしたに過ぎない。ここからの説明が、本実施形態において特に主眼とするところである。クラスタの境界と、消去可能ブロックの境界とをどのように整合させたか、システム領域−ユーザ領域間の境界を、消去可能ブロックの境界とどのように整合させたかの説明を行う。境界整合を実現するため、本実施形態では、2つの改良を行っている。1つ目の改良は、クラスタのサイズを、消去可能ブロックのサイズの1/n(nは、1,2,4,8,16,32)に設定するという改良である。図１０（ａ）は、消去可能ブロックと、クラスタとの関係を示す図であり、クラスタサイズは、消去可能ブロックのサイズである16KByteの1/nの大きさ(32セクタの1/n)に定める。図１０（ｂ）は、n=1と定められた場合のクラスタを示す図であり、図１０（ｃ）は、n=16と定められた場合のクラスタを示す図である。
【００２６】
2つ目の改良は、ボリューム領域において、クラスタのm倍のサイズの領域を、ボリューム管理情報の記録に割り当てるという改良である。図１１（ａ）は、s個の消去可能ブロックに含まれるs・n個のクラスタのうち、m個のクラスタをボリューム管理情報の記録に割り当てる場合を想定した図である。m個のクラスタをボリューム管理情報の記録に割り当てれば、s個の消去可能ブロックの内部領域のうち、m/nの部分が、ボリューム管理情報に占有されることなり、残る(s・n-m)/nの内部領域が、ユーザ領域に割り当てられることなる。
【００２７】
ボリューム管理情報を、クラスタのm倍のサイズに設定することにより、s個の消去可能ブロックには、ボリューム管理情報と、s・n-m個のクラスタとが詰め込まれ、クラスタが2つの消去可能ブロックの境界を跨ぐことはない。
図１１（ｂ）は、n=1と設定された場合、ボリューム管理情報の記録にどれだけのクラスタが割り当てられるかを示す図であり、図１１（ｃ）は、n=16と設定された場合、ボリューム管理情報の記録にどれだけのクラスタを割り当てるかを示す図である。これらの図からも明らかなように、ボリューム管理情報の設定により複数のクラスタが、複数の消去可能ブロックに詰め込まれているので、何れのクラスタも消去可能ブロックの境界を跨ぐことはない。先の図５では、かかるサイズ調整がなされたボリューム領域のレイアウトをより詳細に示している。図５において、パーティション管理領域のサイズはNOM、パーティションブートセクタのサイズはRSC、二重化FATのサイズは、Size1×2、ルートディレクトリエントリのサイズはRDE、総セクタサイズをTS、クラスタに含まれるセクタの個数はSCと表現している。
【００２８】
この図５において、二重化FATに含まれるFATのサイズSize1は、TSに依存したものとなる。具体的にいうなら、以下の数式11により算出される値となる。
｛数式11｝
FAT12の場合:Size1=(((((TS-(RSC+RDE))/SC)+2)×12/8)+511)/512
FAT16の場合:Size1=(((((TS-(RSC+RDE))/SC)+2)×16/8)+511)/512
ここでFAT12とは、FATエントリー1つ当たりに12ビットを割り当てることをいい、FAT16とは、FATエントリー1つ当たりに16ビットを割り当てることをいう。
【００２９】
数式11において、(TS-(RSC+RDE))は、ユーザ領域の記録に必要なクラスタ数であり、これにインディケータ数2を加算して、FATエントリーのバイト長(12又は16)を乗じ、且つ8で割ることにより、FATのバイト長が算出される。この算出結果に、オフセット値である511Byteを足し合わせ、セクタのバイト長512で割れば、1つ当たりのFATを格納するのに必要なセクタ数を算出することができる。尚、このオフセット値511は、例えば、FATのデータ長が1Byteと算出された場合、セクタ数が0個と算出されるのを防ぐ目的で設けられている。FATのデータ長が1Byteと算出された場合、オフセット無しでFATのデータ長を512で割れば、FATのセクタ数が0に算出されてしまう。FATのデータ長が1Byteと算出された場合でも、1セクタ以上のSize1を導き出すため、数式11では、オフセット値511を加算している。
【００３０】
図５において特に注意すべきは、パーティション管理領域のサイズであるNOMである。NOMは、パーティション管理領域と、システム領域とが、互いに異なるクラスタに属するように、"SC＋α"という値に設定される。NOMの設定により、パーティション管理領域と、システム領域を異なるクラスタに配置する理由は、システム領域が配置されたクラスタの書き換えに失敗した際、その失敗がパーティション管理領域に波及するのを避けるためである。つまり書き換え失敗にて、パーティション管理領域におけるマスタブートレコード、パーティションテーブルが破壊されれば、この半導体メモリカード１００は、正規の記録媒体として、アクセス装置により認識されなくなる。そうした最悪ケースの発生を避けるため、NOMをSC+αに設定している。
【００３１】
SC+αのαをどのように設定するかであるが、αは、以下に示すように、RSCと、Size1×２と、RDEとの和がSCの整数倍になるように、(RSC+RDE＋Size1×2)をSCで割り、その余りをSCから引くことにより求められる。これらのことを勘案すると、NOMは、数式12に示すように算出される。
｛数式12｝
NOM=(SC-(RSC+RDE+Size1×2)%SC)+SC
こうしてαに定めると、パーティション管理領域及びユーザ領域は、複数の消去可能ブロックに丁度収まる形となり、システム領域と、ユーザ領域との境界が、消去可能ブロックの境界と一致することなる。こうした境界一致がはかれるので、後続する全てのクラスタの境界は、消去可能ブロックの境界に一致することになる。
【００３２】
ここでSC＝32セクタ(16KByte)、RDEを32セクタ、RSCを1セクタとし、TSを65600とした場合、NOM、Size1がどのように算出されるかを説明する。二重化ファイルアロケーションテーブルのタイプがFAT12であるとすると、数式11によりSize1は、Size1=(((((TS-(RSC+RDE))/SC)+2)×12/8)+511)/512
=(((((65600-(1+32))/SC)+2)×12/8)+511)/512
=7セクタと算出される。
【００３３】
また数式12により、NOMは、
NOM=(SC-(RSC+RDE+Size1×2)%SC)+SC
=(32-(1+32+7×2)%32)+32
=49セクタと算出される。算出された大きさで、パーティション管理領域と、システム領域と、クラスタを作図して得られたのが図１２である。PSN000からPSN031までのセクタには、マスタブートレコード&パーティションテーブルセクタとReserved情報1/2とが配置され、PSN032からPSN063までのセクタには、Reserved情報2/2とパーティションブートセクタと二重化FATとが配置される。またPSN064からPSN095までのセクタは、ルートディレクトリエントリが配置される。ボリューム領域におけるセクタは、32個単位で1つの消去可能ブロックを形成するので、マスタブートレコード、パーティションテーブル、Reserved情報1/2は、1番目の消去可能ブロック001に配置され、Reserved情報2/2、パーティションブートセクタ、二重化FATは2番目の消去可能ブロック002に、ルートディレクトリエントリは、3番目の消去可能ブロック003に配置される。ルートディレクトリエントリは、同じサイズの消去可能ブロックに格納されるので、ユーザ領域と、システム領域の境界は、消去可能ブロックの境界と整合することなる。
【００３４】
以上のボリューム領域のレイアウトは、アクセス装置におけるファイルシステム操作部９が、不揮発メモリの初期化処理を行うことにより実現される。この初期化処理の手順を示したのが図１３のフローチャートであり、以降、図１３のフローチャートを参照しながら、ボリューム領域の初期化手順について説明する。
ステップＳ１では、フォーマットすべき領域の大きさ（TS）や半導体メモリカード１００の全体容量、アクセス装置にて動作するオペレーションシステム、ユーザによる指定に応じて、クラスタサイズを決定する。
【００３５】
クラスタサイズが決定されれば、ステップＳ２において、クラスタサイズSCと、フォーマットサイズTSとから、FAT12、FAT16の何れかを使用するかを一意に決める。FAT12、FAT16の何れかが決定されればステップＳ３において、ルートディレクトリエントリのRDEを決定する（本実施形態では、RDEを32セクタに固定する。）。その後、ファイルシステム操作部９はステップＳ４において、パーティションブートセクタのRSCを決定し（尚本実施形態では、RSCを1セクタに固定する。）、ステップＳ５では、RDE及びRSCが算出されれば、数式11にてFATのデータ長を計算する。ステップＳ６において、ファイルシステム操作部９は、マスタブートレコードとパーティションブートセクタとが別のクラスタになるように、数式12にてNOMを計算する。
【００３６】
以上のステップＳ５〜ステップＳ６は、数式11、数式12に示した計算と何等変わるところはない。以降のステップＳ７、ステップＳ８、ステップＳ９がこのフローチャートで初めてあかされる処理である。ステップＳ７において、下記の数式13にて、ユーザ領域のクラスタ数CNを算出する。
｛数式13｝
CN=(TS-(RSC+RDE+Size1×2+NOM))/SC
ステップＳ８において、下記の数式14にて、FATのデータ長を算出する。
【００３７】
｛数式14｝
FAT12の場合:Size2=(((CN+2)×12/8)+511)/512
FAT16の場合:Size2=(((CN+2)×16/8)+511)/512
ステップＳ９では、ステップＳ５にて算出されたSize1と、ステップＳ８にて算出されたSize2との比較を行い、同一値であれば計算を終了する。異なっていれば、ステップＳ１０においてSize2をSize1に代入して、ステップＳ６に移行し、NOMを計算しなおす。代入によりSize1は別の値になるので、ステップＳ６に移行することにより、異なるNOMが算出される。そうして算出されたNOMに基づいて、ステップＳ８においてSize2が再度算出され、Size1とSize2との一致が判定されれば、ステップＳ９がYesとなり処理を終える。
【００３８】
以上の手順を経て、算出されたNOMは、パーティションテーブルにおいてパーティションの開始セクタまでの相対セクタ数を示す"Relative Sector"に設定される、またTSが、パーティションテーブルにおいて"Total Sector"に設定される。
SCは、パーティションブートセクタにおいて一クラスタ当たりのセクタ数を示す『Sector per Cluster』に設定される。またセクタ数を表すRDEは、1セクタ当たりのバイト長(512Byte)を乗じ、更に32Byteで除されることにより、エントリー数に変換され、パーティションブートセクタにおける『Number of Root-directory Entries』に設定される。Size1は、パーティションブートセクタにおいてFAT1つ当たりのセクタ数を示す『Sector Per FAT』に設定される。アクセス装置は、パーティションテーブル及びパーティションブートセクタに設定されたこれらの値を参照して、二重化FAT、ルートディレクトリエントリ、ユーザ領域の所在を特定する。
【００３９】
以上で、図１３のフローチャートの説明を終える。続いてTSを65568セクタと決定した場合、パーティション管理領域と、システム領域のサイズがどのように算出されるかの計算例を以下に示す。
TSが65568であるので、ステップＳ１では、クラスタサイズは32セクタと決定される。クラスタサイズが32セクタと決定されたので、ステップＳ２において、クラスタサイズSCと、フォーマットサイズTSとから、FAT12を使用すると決定する。本実施形態では、RDEは32セクタに固定されており、RSCは1セクタに固定されているので、ステップＳ３、ステップＳ４での計算は行われない。ステップＳ５では、数式11、数式12にてFATのデータ長を計算する。ここでFATはFAT12なので、
Size1=(((((TS-(RSC+RDE))/SC)+2)×12/8)+511)/512
=(((((65568-(1+32))/SC)+2)×12/8)+511)/512
=7セクタと算出される。
【００４０】
Size1が算出されれば、ステップＳ６において、マスタブートレコードとパーティションブートセクタとが別のクラスタになるように、数式12にてNOMを計算する。
NOM=(SC-(RSC+RDE+Size1×2)%SC)+SC
=(32-(1+32+7×2)%32)+32
=49セクタと算出される。
【００４１】
NOMが算出されれば、ステップＳ７において、数式13にてレギュラー領域におけるクラスタ数の計算を行う。
CN=(TS-(RSC+RDE+Size1×2+NOM))/SC
CN=(65568-(1+32+7×2+49))/32
=2046セクタと算出される。
【００４２】
ステップＳ８において、数式14にて、FATのデータ長を算出する。
FAT12の場合:Size2=(((CN+2)×12/8)+511)/512
Size2=(((2046+2)×12/8)+511)/512
Size2=6
ステップＳ９では、ステップＳ５にて算出されたSize1と、ステップＳ８にて算出されたSize2との比較を行う。ここで、Size1は7セクタと、Size2は6セクタと算出され、これらは同一値ではないので、ステップＳ１０に移行して、Size2をSize1に代入して再度ステップＳ６に移行し、NOMを計算しなおす。
【００４３】
NOM=(SC-(RSC+RDE+Size1×2)%SC)+SC
=(32-(1+32+6×2)%32)+32
=51セクタと算出される。NOMが算出されれば、ステップＳ７において、レギュラー領域におけるクラスタ数の計算を行う。
CN=(TS-(RSC+RDE+Size1×2+NOM))/SC
CN=(65568-(1+32+6×2+49))/32
=2046セクタと算出される。
【００４４】
ステップＳ８において、FATのデータ長を算出する。
FAT12の場合:Size2=(((CN+2)×12/8)+511)/512
Size2=(((2046+2)×12/8)+511)/512
Size2=6
こうした計算の後、ステップＳ９においてSize1とSize2との比較がなされるが、Size1、Size2は一致しているので、本フローチャートの処理を終了する。
【００４５】
以上のように本実施形態によれば、パーティション領域のサイズと、システム領域のサイズとが消去可能ブロックの整数倍の大きさになるように、NOMを算出するので、1つのクラスタが2つの消去可能ブロックに跨って格納されることはない。クラスタの境界と、消去可能ブロックの境界との整合、ボリューム管理情報の境界と、消去可能ブロックの境界との整合が図られるので、1つのクラスタを書き換えたり、上書きしたりする際、消去すべき消去可能ブロックの数は1つで済み、消去可能ブロックの消去回数を低減させることができる。消去回数の低減により、半導体メモリカード１００にデータを書き込む際の時間を短縮することができ、また、不揮発メモリ自体の長寿命化を実現することができる。
【００４６】
（第２実施形態）
第２実施形態は、一般ユーザがアクセスすることができる領域（ユーザデータ領域）と、一般ユーザによるアクセスに制限を課し、データをセキュアに格納することができる領域（プロテクト領域）とにボリューム領域を区分することを提案する。
【００４７】
第２実施形態に係るアクセス装置及び半導体メモリカード１００の構成を図１４に示す。図１４に示す内部構成が、図３（ａ）に示した内部構成と異なるのは、不揮発メモリ１内にプロテクト領域が設けられ、半導体メモリカード１００及びアクセス装置にセキュア処理部１１、セキュア処理部１２が加えられている点である。
【００４８】
プロテクト領域に対する読み書きをセキュアに行うために設けられたセキュア処理部１１について説明する。セキュア処理部１１の構成は、図１５に示す通りであり、システム領域１３、Hidden領域１４、AKE処理部１５、Ks復号化部１６、Ks暗号化部１７からなる。
システム領域１３は、Media Key Block(MKB)と、Media-IDとを格納した読出専用領域であり、ここに格納されたMKB、Media-IDを書き換えることはできない。半導体メモリカード１００がアクセス装置と接続され、MKBとMedia-IDとがアクセス装置により読み出された場合、これらを読み出したアクセス装置が、MKB、Media-IDと、自身が所持しているデバイス鍵Kdとを用いて所定の演算を正しく行えば、アクセス装置は正しい暗号鍵Kmuを所持することができる。
【００４９】
Hidden領域１４は、正解値となる暗号鍵Kmu、即ち、アクセス装置が正常なデバイス鍵Kdを用いて正常な演算を行なった場合、得られるべき暗号鍵Kmuを格納している領域である。
Authentication and Key Exchange(AKE)処理部１５は、アクセス装置と半導体メモリカード１００との間でチャレンジ・レスポンス型の相互認証を行って、相手側の正当性を認証し、相手側が不当であれば処理を中断するが、相手側が正当であればアクセス装置と半導体メモリカード１００との間で暗号鍵（セッション鍵Ks）を共有する。アクセス装置による認証は3つのフェーズ（アクセス装置側で乱数を発生させ、得られた乱数をKmuを用いて暗号化して、チャレンジ値Aとして半導体メモリカード１００に送信するChallenge1フェーズ、半導体メモリカード１００側でこのチャレンジ値Aを半導体メモリカード１００内のKmuを用いて復号化し、得られた値をレスポンス値Bとしてアクセス装置に送信するResponse1フェーズ、アクセス装置側で保持していたチャレンジ値Aをアクセス装置側のKmuで復号化して、半導体メモリカード１００から送信されたレスポンス値Bと比較するVerify1フェーズ）からなる。
【００５０】
半導体メモリカード１００による認証は3つのフェーズ(半導体メモリカード１００で乱数を発生させ、得られた乱数をKmuを用いて暗号化して、この値をチャレンジ値Cとしてアクセス装置に送信するChallenge2フェーズ、アクセス装置側においてこのチャレンジ値Cをアクセス装置内のKmuを用いて復号化し、得られた値をレスポンス値Dとして半導体メモリカード１００に送信するResponse2フェーズ、半導体メモリカード１００側で保持していたチャレンジ値Cを半導体メモリカード１００側のKmuで復号化して、アクセス装置から送信されたレスポンス値Dと比較するVerify2フェーズ）からなる。
【００５１】
この際、アクセス装置が不正な暗号鍵Kmuを用いて相互認証を行えば、フェーズVerify1,2において、チャレンジ値Aとレスポンス値Bとの不一致、チャレンジ値Cとレスポンス値Dとの不一致が判定され、相互認証が中断することなる。逆に相手側の正当性が認証されれば、AKE処理部１５は、上述したチャレンジ値Aと、チャレンジ値Cとの排他的論理和をとり、これをKmuにて暗号化することにより、セッション鍵Ksを得る。
【００５２】
Ks復号化部１６は、半導体メモリカード１００と接続されたアクセス装置から、プロテクト領域に書き込むべきデータであって、暗号化されたものが出力された場合、それらデータがセッション鍵Ksを用いて暗号化されているものとして、セッション鍵Ksを用いることにより復号を行う。そうして復号により得られたデータが本来のデータであるとして、プロテクト領域に書き込む。
【００５３】
Ks暗号化部１７は、半導体メモリカード１００と接続されたアクセス装置から、データを読み出す旨の読出コマンドが出力されると、セッション鍵Ksを用いてプロテクト領域に格納されているデータを暗号化した後に、そのコマンドを発行したアクセス装置に出力する。プロテクト領域に対するデータ読み書きには、Ks復号化部１６による復号化と、Ks暗号化部１７による暗号化とが伴うので、プロテクト領域は、半導体メモリカード１００と接続しているアクセス装置がAKEプロセスを正しく行った場合のみ、正規にアクセスされることなる。
【００５４】
続いて、第２実施形態に係るボリューム領域のフォーマットについて説明する。プロテクト領域が設けられたボリューム領域を詳細に示したのが、図１６である。図１６において、ボリューム領域全体のサイズをVolume_Sizeとすると、ボリューム領域の先頭からのVolume_Size×(1-β)までがユーザデータ領域に、ユーザデータ領域の直後からのVolume_Size×βがプロテクト領域に割り当てられる。このβは、0.01を最小とした値に設定される。例えば、Volume_Sizeが64MByteであり、βが0.01ならば、プロテクト領域は、640KByteに設定されることなる。これらユーザデータ領域及びプロテクト領域のフォーマットは、ファイルシステム操作部９が図９に示した初期化手順を実行することにより実現される。
【００５５】
ユーザデータ領域の総データTSを124160セクタと決定した場合、ユーザデータ領域において、パーティション管理領域と、システム領域のサイズがどのように算出されるかの計算例を以下に示す。
TSが124160であるので、ステップＳ１ではクラスタサイズが32セクタと決定される。クラスタサイズが32セクタと決定されたので、ステップＳ２において、クラスタサイズSCと、フォーマットサイズTSとから、FAT12を使用すると決める。本実施形態では、RDEは32セクタに固定であり、RSCは1セクタに固定なので、ステップＳ３、ステップＳ４での計算は行われない。ステップＳ５では、数式11、数式12にてFATのデータ長を計算する。ここでFATはFAT12なので、
Size1=(((((TS-(RSC+RDE))/SC)+2)×12/8)+511)/512
=(((((124160-(1+32))/32)+2)×12/8)+511)/512
=12セクタと算出される。Size1が算出されれば、ステップＳ６において、マスタブートレコードとパーティションブートセクタとが別のクラスタになるように、数式12にてNOMを計算する。
【００５６】
NOM=(SC-(RSC+RDE+Size1×2)%SC)+SC
=(32-(1+32+12×2)%32)+32
=39セクタ  と算出される。NOMが算出されれば、ステップＳ７において、レギュラー領域におけるクラスタ数の計算を行う。
CN=(TS-(RSC+RDE+Size1×2+NOM))/SC
CN=(124160-(1+32+12×2+39))/32
=3877セクタと算出される。 ステップＳ８において、数式13にて、FATのデータ長を計算する。
【００５７】
Size2=(((CN+2)×12/8)+511)/512
Size2=(((3877+2)×12/8)+511)/512
Size2=12と算出される。ステップＳ９では、ステップＳ５にて算出されたSize1と、ステップＳ８にて算出されたSize2との比較を行う。ここで、Size1は12セクタと算出され、Size2は12セクタと算出されるので、両者の一致がステップＳ９において算出される。これにより、本フローチャートの手順を終える。以上の計算にて算出されたTS、Size1、NOMの大きさで、システム領域と、パーティション管理領域を作図するとユーザデータ領域のレイアウトは、図１７のように表現される。本図と図１２とを比較すると、図１２と比べて二重化ファイルアロケーションテーブルのサイズは増大しているが(14→24セクタ)、Reserved情報1/2,2/2のサイズが縮小しているため(17→7セクタ)、パーティション管理領域と、システム領域は、丁度3つの消去可能ブロックに収まっている。
【００５８】
続いて、プロテクト領域のTSを1280セクタと決定した場合、パーティション管理領域と、システム領域がどのように算出されるかの計算例を以下に示す。
TSが1280であるので、ステップＳ１では、クラスタサイズは2セクタ(1KByteであり、ユーザデータ領域のサイズの1/16にすぎない)と決定される。クラスタサイズが2セクタと決定されたので、ステップＳ２において、クラスタサイズSCと、フォーマットサイズTSとから、FAT12を使用すると決定する。本実施形態では、RDEは32セクタに固定であり、RSCは1セクタに固定なので、ステップＳ３、ステップＳ４での計算は行われない。ステップＳ５では、数式11,数式12にてFATのデータ長を計算する。ここでFATはFAT12なので、
Size1=(((((TS-(RSC+RDE))/SC)+2)×12/8)+511)/512
=(((((1280-(1+32))/2)+2)×12/8)+511)/512
=2セクタと算出される。Size1が算出されれば、ステップＳ６において、マスタブートレコードとパーティションブートセクタとが別のクラスタになるように、数式12にてNOMを計算する。これによりNOMは、
NOM=(SC-(RSC+RDE+Size1×2)%SC)+SC
=(2-(1+32+2×2)%2)+2
=3セクタと算出される。NOMが算出されれば、ステップＳ７において、ユーザ領域におけるクラスタ数の計算を行う。これによりクラスタ数CNは、
CN=(TS-(RSC+RDE+Size1×2+NOM))/SC
CN=(1280-(1+32+2×2+3))/32
=620セクタと算出される。ステップＳ８において、FATのデータ長を算出する。
【００５９】
FAT12の場合:Size2=(((CN+2)×12/8)+511)/512
Size2=(((620+2)×12/8)+511)/512
Size2=2
ステップＳ９では、ステップＳ５にて算出されたSize1と、ステップＳ８にて算出されたSize2との比較を行う。ここで、Size1は2セクタと算出され、Size2は2セクタと算出されるので、計算を終える。
【００６０】
以上の計算にて算出されたTS、Size1、NOMの大きさで、システム領域と、パーティション管理領域を作図するとプロテクト領域のレイアウトは、図１８のように表現される。本実施形態では、ユーザデータ領域と、プロテクト領域の双方が、パーティション管理領域と、システム領域と、ユーザ領域を有しているため、独立した物理媒体としてアクセス装置により認識されることなる。クラスタサイズに違いはあるものの、ユーザデータ領域と、プロテクト領域の双方とも、クラスタの境界と、消去可能ブロックの境界とが整合している。
【００６１】
以上のように本実施形態によれば、ボリューム領域に、ユーザデータ領域と、プロテクト領域という2つの領域を設ける場合でも、消去可能ブロックの境界と一致させるので、クラスタの書き換えを短期間に完遂することができる。また、消去可能ブロックの消去回数を削減することも可能なので、不揮発メモリの寿命をいたずらに縮めることもない。
【００６２】
（第３実施形態）
第３実施形態は、消去可能ブロックを、論理アドレス・物理アドレスを用いて管理し、消去可能ブロックに格納されたデータを消去する場合の改良に関する。第３実施形態におけるアクセス制御部２の構成を図１９に示す。図１９に示すようにアクセス制御部２は、コマンド解読部２１、論理・物理アドレス変換部２２、読出制御部２３、割当変更部２４、書込制御部２５、消去制御部２６、及び書換制御部２７からなる。
【００６３】
コマンド解読部２１は、アクセス装置から発行されたコマンドを受け取って、当該コマンド発行の際の内容を解読する。受け取ったコマンドが読出コマンドなら、不揮発メモリ１からのデータ読み出しを行うよう読出制御部２３に命じ(Read)、受け取ったコマンドが、データが既に書き込まれているブロックをアクセス先とした書込コマンドなら、不揮発メモリ１へのデータ書き込みを行うよう書込制御部２５に命じる(Write)。消去済みブロックをアクセス先とした書込コマンドなら、不揮発メモリ１に格納されたデータについての書き換えを行うよう書換制御部２７に命じる(Modify)。状態取得コマンドなら後述する消去済みフリーリストを読み出すよう割当変更部２４に命じる。消去コマンドなら、指定された消去可能ブロックを消去するよう割当変更部２４に命じる。
【００６４】
論理・物理アドレス変換部２２は、各消去可能ブロックについての論理アドレスと物理アドレスとの対応関係を示すアドレス対応表を有しており、アクセス先の指定となる論理アドレスがアクセス装置から発行されれば、本アドレス対応表に示される対応関係を参照して、そのアクセスコマンドにて指定された論理アドレスを物理アドレスに変換して、読出制御部２３、割当変更部２４、書換制御部２７に出力する。
【００６５】
読出制御部２３は、アクセス装置から読出コマンドが発行された場合、不揮発メモリ１において、その読出先に格納されているデータをアクセス装置に読み出すよう、制御を行う。
割当変更部２４は、消去済みについての物理アドレスを先入先出し式に配置した消去済みフリーリストを保持しており、アクセス装置から書込コマンドが発行された場合、書込先にて指定された論理アドレスに対応する物理アドレスが消去済みフリーリストに存在するか否かを判定する。消去済みフリーリストに存在すると判定されれば、対応する物理アドレスを書込制御部２５に出力すると共に、消去済みフリーリストから、その対応する物理アドレスを削除する。書込先論理アドレスに対応する物理アドレスが、未消去ブロックを指示するものであれば、消去済みフリーリストにおいて先頭に位置する物理アドレスをその書込先にて指定された論理アドレスに割り当てて書込制御部２５に出力すると共に、書込先論理アドレスにそれまで割り当てられていた物理アドレスを、消去済みフリーリストの最後尾に追加する。また、アクセス装置から状態取得コマンドが発行されると、消去済みフリーリストに示される物理アドレスを論理アドレスに置き換えて、論理アドレスの羅列により消去済みの消去可能ブロックを表した消去済みフリーリストをアクセス装置に出力する。更にアクセス装置から論理アドレスが指定された消去コマンドが発行されれば、その論理アドレスに対応する物理アドレスを消去済みフリーリストに追加するよう制御を行う。
【００６６】
書込制御部２５は、書込コマンドによりブロックへの書き込みが命じられば、割当変更部２４から出力された物理アドレスに従って、不揮発メモリ１に対するデータ書き込みを行う。
消去制御部２６は、消去済みフリーリストにおいて、未消去ブロックの物理アドレスが追加されたか否かを一定期間毎に監視（ポーリング）しており、消去済みフリーリストに物理アドレスが追加されれば、その物理アドレスにて指示される消去可能ブロックを消去する。
【００６７】
書換制御部２７は、既にデータが書き込まれている消去可能ブロックの書き換えが書込コマンドにより命じられれば、不揮発メモリ１からワークメモリ３へとデータ読み出しを行い、ワークメモリ３において、データ書き換えを行った後、ワークメモリ３から不揮発メモリ１へのデータ書き込みを行う。書換制御部２７による書き換え処理は、割当変更部２４との協調制御により実現される。書換制御部２７によるデータ書き換えの手順の推移を時系列に表したのが図２０（ａ）〜（ｄ）である。
【００６８】
図２０（ａ）は初期状態であり、網掛けがなされたブロック（物理アドレス0000，0001，0002，0004,0007〜0015のブロック）にデータが格納され、物理アドレス0003，0005，0006のブロックが消去済みであることを示す。消去済みフリーリストには、消去済みブロックの物理アドレス0003，0005，0006が配置される。論理アドレス−物理アドレスの対応を示すアドレス対応表は、論理アドレス0001,0002,0003,0004,0005がそれぞれ、物理アドレス0001,0002,0003,0004,0005に対応するよう設定されている。
【００６９】
この際、論理アドレス0001の消去可能ブロックに別の値を書き込む旨の書込コマンドがアクセス装置から発行されれば、書込制御部２５は図２０（ａ）において実線の矢印▲１▼Readに示すように、論理アドレス0001のブロックに書き込まれたデータを不揮発メモリからワークメモリに転送し、ワークメモリにおいて、論理アドレス0001のブロックに書き込まれていたデータの書き換えを行う(▲２▼Modify)。
【００７０】
続く図２０（ｂ）では、破線の矢印BN1に示すように、消去済みフリーリストにおいて先頭に位置する物理アドレス0003を取り出し、実線の矢印(▲３▼Write)に示すように、この物理アドレス0003に指定されたブロックに対するデータ書き込みを行う。その後、図２０（ｃ）において、物理アドレス0001のブロックを、データ消去の対象にするべく、実線の矢印▲４▼に示すように、物理アドレス0001を消去済みフリーリストに配する。
【００７１】
最後に、図２０（ｄ）に示すように、論理アドレス−物理アドレスの対応関係の入れ替えを行う。即ち、物理アドレス0003を論理アドレス0001に割り当て、物理アドレス0001を論理アドレス0003に割り当てる。こうした物理アドレス0003へのデータ書き込みと、物理アドレス−論理アドレスの対応関係の入れ替えとを行えば、論理アドレス0001へのデータの上書きが実現されることなる。
【００７２】
続いてアクセス装置の内部構成について説明する。図２１は、第３実施形態におけるアクセス装置の、ファイルシステム操作部９の内部構成を示す図である。本図においてファイルシステム操作部９は、ファイル削除部２８、先行消去制御部２９を含む。
ファイル削除部２８は、一次記憶装置７に読み出されたFATを更新して、半導体メモリカード１００に書き込むことにより、ファイルの削除を行う。アプリケーションプログラム８から、ファイルを削除する旨の指示がなされれば、該当するファイルの分割部分が格納されているクラスタに対応するFATエントリーを"0"に設定することによりファイル削除を実行する。こうしたファイル削除により、ファイルが格納されたクラスタは、未使用に設定されることなる。しかし、ファイルの分割部分を格納していたクラスタ（消去可能ブロック）が、白紙の状態に戻った訳ではないので、別のファイルを同じクラスタに記録する場合には、そのクラスタを一旦消去せねばならない。従って、古いファイルを削除し、新たなファイルを記録しようとする機会が多ければ多い程、消去のために多くの処理時間が費やされることなる。
【００７３】
先行消去制御部２９は、アプリケーションプログラム８からの指示が無い状態において、状態取得コマンドを半導体メモリカード１００に発行して、消去済みフリーリストを半導体メモリカード１００から読み出すよう命じる。コマンドを発行した後、消去済みフリーリストが出力されれば、ファイルシステム操作部９はこれをうけとって消去済みフリーリストと、FATとを照合することにより、FATにおいて未使用ブロックと設定されているクラスタに対応する消去可能ブロック（1つの消去可能ブロックが複数のクラスタから構成される場合は、未使用クラスタのみからなる消去可能ブロック）を特定する。そうして特定された未使用クラスタのみからなるブロックのうち、消去済みフリーリストに存在しないものを更に特定する。特定された消去可能ブロックは、いわば未使用未消去ブロックであり、そうして特定された未使用未消去ブロックの消去を命じるべく、消去コマンドを半導体メモリカード１００に対して発行する。この消去コマンドは、論理アドレスの指定を含み、この論理アドレスに対応する物理アドレスを消去済みフリーリストに加えよと命じる旨を含む。こうした消去コマンド発行の際の発行により、物理アドレスが消去済みフリーリストに加えられれば、消去制御部２６がポーリングを行うことにより、他の未使用未消去ブロックと同様、消去コマンドにて指定されたブロックが消去されることなる。以上の先行消去制御部２９による処理手順を詳細に表したのが、図２２のフローチャートであり、以降このフローチャートを参照しながら、先行消去制御部２９の処理を詳細に説明する。
【００７４】
本実施形態において先行消去制御部２９が起動されれば、ステップＳ２１〜ステップＳ２２からなるループ処理に移行する。ステップＳ２１において先行消去制御部２９は、アプリケーションプログラム８からのアクセス指示が有ったかどうかの判定を行い、ステップＳ２２において先行消去制御部２９は、所定の監視期間が経過したかを判定する。アプリケーションプログラム８から指示があれば、ステップＳ２３に移行して、指示に従ったファイルシステム操作及び半導体メモリカード１００に対するアクセスを行う。所定の監視期間が経過したなら、ステップＳ２２からステップＳ２４への移行を行い、消去済みフリーリストを読み出す旨の状態取得コマンドを半導体メモリカード１００に対して発行する。その後、ステップＳ２５において消去済みフリーリストの読出待ち状態となり、消去済みフリーリストが読み出されれば、ステップＳ２６において、FATにおいて未使用と設定されているクラスタからなる消去可能ブロックであって、消去済みフリーリストに存在しないものの論理アドレスを全て特定する。
【００７５】
ステップＳ２７では、未使用未消去ブロックが存在するか否かの判定を行い、未使用未消去ブロックが存在しなければ、何の処理をも行わずに、ステップＳ２１−ステップＳ２２のループ処理に戻る。未使用未消去ブロックが存在すれば、ステップＳ２８〜ステップＳ３０からなるループ処理を行う。即ち、ステップＳ２６にて特定された未使用未消去ブロックの物理アドレスの全てに対して、未使用未消去ブロックを指定した消去コマンドを半導体メモリカード１００に対して発行するのである。そうすると、半導体メモリカード１００の内部では、これらの未使用未消去ブロックの物理アドレスが消去済みフリーリストに追加され、消去の対象となる。
【００７６】
以上に示した先行消去制御部２９の処理についての理解を深めるべく、本実施形態における先行消去制御部２９の動作を図２３（ａ）、（ｂ）を参照しながら説明する。図２３（ａ）に示す初期状態では、物理アドレス0001の消去可能ブロックがFATにおいて使用中と設定され、物理アドレス0003，0005，0006が、消去済みブロックのアドレスとして消去済みフリーリストに配置されている。ファイルシステムにおいて網掛けが付されたブロック（物理アドレス0000，0001，0002，0004）にはデータが書き込まれている。この状態において、アプリケーションプログラム８からの指示が存在せず、また、所定の監視時間が経過すれば（ステップＳ２１-No、ステップＳ２２-Yes）、アクセス装置内のファイルシステム操作部９が、半導体メモリカード１００に対して状態取得コマンドを発行することにより、消去済みフリーリストを読み出し（ステップＳ２４）、読み出された消去済みフリーリストとFATとの照合を行う（ステップＳ２５）。その結果、FATにおいて未使用と設定されているブロックであって、消去済みフリーリスト内に論理アドレスが存在しないもの(物理アドレス0000，0002，0004の消去可能ブロック)が特定されることなる（ステップＳ２６）。これらのブロックは未使用であることから、ファイルシステム操作部９は消去コマンドを半導体メモリカード１００に発行することにより、これらの消去可能ブロックに対するデータの消去を行う（ステップＳ２８〜ステップＳ３０）。そうすると、図２３（ｂ）に示すように、物理アドレス0000，0002，0004が消去済みフリーリストに追加され、これらのアドレスにて指示される消去可能ブロックが消去されることなる。
【００７７】
以上のように本実施形態によれば、アクセス装置は、半導体メモリカード１００から消去済みフリーリストを読み出し、FATと、消去済みフリーリストとの照合により、未使用未消去ブロックを特定して、そのブロックの消去を半導体メモリカード１００に命じるので、ファイルシステム操作部９がアプリケーションプログラム８からの指示を待っている状態等に、未使用ブロックの消去が可能となり、未使用ブロックの消去を効率良く行うことができる。
【００７８】
また未使用ブロックの消去がアクセス装置の空き時間に行えるので、ブロックの消去が行なえる機会が大幅に増える。そのため、消去済みフリーリストにおける物理アドレスの個数が欠乏することは無くなり、ブロックの書き換えや上書きを行う場合の処理効率が大幅に向上されることなる。
尚、本実施形態においてアクセス装置が、半導体メモリカード１００から消去済みフリーリストを読み出して未消去未使用ブロックを特定したが、半導体メモリカード１００においてアクセス制御部２内の消去制御部２６が、FATを参照することにより、未消去未使用ブロックを特定して、消去してもよい。アクセス制御部２が消去済みフリーリストに含まれる物理アドレスを論理アドレスに変換して、アクセス装置に引き渡したが、消去済みフリーリストとアドレス対応表とをアクセス装置に引き渡して、物理アドレスから論理アドレスへの変換をアクセス装置に行わせてもよい。データ消去処理はファイル削除時に行ってもよいし、他のコマンドの実行中に並行処理してもよい。また消去済みの消去可能ブロックの物理アドレスを管理する消去済みフリーリストの代わりに、未消去ブロックの消去可能ブロックの物理アドレスを管理する未消去フリーリストなど、その他の情報を用いてもよい。更に本実施形態では、FATを用いて説明を行ったが、リストなど他の形態でもよい。
【００７９】
（第４実施形態）
第４実施形態は、第３実施形態において消去済みフリーリストを用いて実現した処理を、消去済みフリーテーブルを用いて実現する場合の改良に関する。第４実施形態におけるアクセス制御部２の内部構成を、図２４に示す。本図を図１９と比較すると、図１９における消去済みフリーリストが図２４では、「消去済みフリーテーブル」に置き換えられていることがわかる。第４実施形態に係る消去済みフリーテーブルは、各ブロックに対応するエントリーからなり、対応するブロックが消去済みであれば値"1"が設定され、未消去ブロックならば、"0"の値が設定される。"1","0"の設定により、消去済みフリーテーブルには、各ブロックの消去状況が表現される。
【００８０】
消去済みフリーリストが消去済みフリーテーブルに置き換えられているため、第４実施形態における書込制御部２５、消去制御部２６は以下の処理を行うことが第３実施形態と異なる。
第４実施形態における書込制御部２５は、アクセス装置から書込コマンドが発行された場合、消去済みフリーテーブルを参照して、そのコマンド発行の際の書込先が消去済みであるか、未使用ブロックであるかを判定する。そして書込先ブロックが消去済みであれば、その書込先ブロックに対するデータ消去を消去制御部２６に行わせてから、データ書き込みを行う。つまり、第４実施形態の書込制御部２５は、データ書き込みに先立って、データ消去を行う。
【００８１】
続いて、第４実施形態に係る先行消去制御部２９の処理について説明する。第４実施形態における先行消去制御部２９は、第３実施形態同様、アプリケーションプログラム８からの指示を待っている状態において消去可能ブロックの消去を行う。その消去手順は、第３実施形態に示したものと同一であり、図２５に示されるものとなる。図２５のフローチャートは、図２２における『消去済みフリーリスト』を『消去済みフリーテーブル』に置き換えたものであり、その処理内容には大差はないので詳細説明は省略する。続いて、第４実施形態における先行消去制御部２９の処理を、図２６を参照しながら説明する。
【００８２】
図２６（ａ）に示す初期状態は、アドレス0001のブロックが使用中領域として管理されており、消去済みフリーテーブルにおいて、アドレス0003，0005，0006のブロックがデータ消去済み領域として管理されている。不揮発メモリの網掛けの部分（アドレス0000，0001，0002，0004）にデータが記録されている。この初期状態では、未使用であるにも関わらずデータが書かれている領域が存在しており、それらの未使用領域にデータ書き込みが発生した場合、データ消去処理が必要となる。そこで本実施形態では、アプリケーションプログラム８からの指示が存在せず、監視期間が経過した状態において（ステップＳ２１-No、ステップＳ２２-Yes）、先行消去制御部２９は、状態取得コマンドを半導体メモリカードに対して発行する（ステップＳ２４）。消去済みフリーテーブルが読み出されれば、これを自身が有しているFATと照合し、FATにより未使用領域となっている領域で、かつ消去済みフリーテーブルで管理されていない消去可能ブロックを検索する（ステップＳ２６）。図２６の例では、FATに"0"が設定されており、消去済みフリーテーブルに"0"が設定されているアドレス0000，0002，0004の領域が未消去未使用ブロックに該当する。これらの領域は未使用であることからデータを消去しても構わないため、消去コマンドの発行により、消去済みフリーテーブルの該当アドレスに消去済みであることを意味する値"1"に設定させる（ステップＳ２８〜ステップＳ３０）。このようにすることで、未使用ブロックのデータはすべて消去され、消去済みフリーテーブルで消去済みブロックとして管理される。よって以降の未使用領域の割当てによるデータ書き込みは、すべて消去処理なしでおこなわれることになり、高速にデータ書き込みを行うことができる。
【００８３】
（第５実施形態）
第５実施形態は、ファイルを格納する際のフラグメンテーションの解消を提案するものである。一般にファイルを格納する際のフラグメンテーションとは、ファイルを複数に分割して、その分割により得られた分割部分が不連続な領域に格納されることをいう。光ディスク、磁気ディスク等の記録媒体において、不連続な領域に複数の分割部分が格納されれば、それら不連続領域から分割部分を読み出すために、多くのディスクシークが発生し、読み出し処理が長期化してしまう。そうしたフラグメンテーションの解消のため、ファイルシステム操作部９では、それら不連続領域に格納された分割部分を読み出して、連続領域に格納し直すという処理を行う。以上の処理を経れば、ファイルを構成する分割部分の読み出しは、全くディスクシークを伴うことなくスムーズに行われることなり、結果として、データ読み出しの高速化が実現される。以上がディスクにおけるフラグメンテーションの解消についての概要である。これに対して、半導体メモリカード１００におけるフラグメンテーションの発生を考える。半導体メモリカード１００からのデータ読み出しには、ディスクシークといった処理は不要なので、ファイルを構成する分割部分が不連続に格納されたからといって、ディスクシークにより、処理が長期化することは有り得ない。
【００８４】
ディスクシークが発生しないとはいえ、フラグメンテーションが存在していれば、以下に示す(1.コマンド発行の際のオーバーヘッド)、(2.FAT読み込みの際のキャッシュミス)が増大することにより、ファイルの読み出し時間が長大化してしまう。
（１．コマンド発行の際のオーバーヘッド）
フラグメンテーションの有無がコマンド発行の際のオーバーヘッドとどのような因果関係にあるかは、図２７（ａ）、（ｂ）を用いて説明すれば理解が容易である。図２７（ａ）は、48KByteのファイルを構成する16KByteの分割部分が3つの領域にバラバラに配置されている状態を表している。図２７（ｂ）は、48KByteのファイルが連続領域に配置された状態を示す。図２７（ａ）、図２７（ｂ）において、ファイルシステム操作部９が不揮発メモリに対してデータの読み込みを実行する読出コマンドを、Read（add，size）の形式で発行するものとする。ここで、addは読み込み先の論理アドレスを示し、sizeは読み込みサイズを示す。各読出コマンドは、データ長に比例したデータ読み込み時間と、読出コマンドを発行するために必要な一定のオーバーヘッド時間がかかる。図２７（ａ）のようなデータ配置では、Read(0000,16KByte)，Read（0002,16KByte)，Read(0004,16KByte)というように、３回の読出コマンドの発行により、ファイルを読み出さねばならない。そうすると、36m秒(=(8+4)×3)の読み出し時間が費やされる。一方、図２７（ｂ）のようなデータ配置では、Read(0000,48KByte)というように、１回のコマンド発行にて、48KByteのデータを読み出せばよい。読み出し時間は、28m秒(=(8×3+4))となる。これらのことからコマンド実行に伴うオーバーヘッドは、ファイルを構成する分割部分が多くの領域にバラバラに配置される程、増大することなる。
【００８５】
（２．FATキャッシュ）
FATのキャッシュとは、半導体メモリカード１００においてシステム領域に配置されているFATを、アクセス装置の内部メモリに先行的に読み出しておき、内部メモリに対するアクセスにて、FATの参照を高速に行うことである。かかるFATのキャッシュは、アクセス装置が携帯機器であり、アクセス装置の内部メモリの規模が小さい場合に、頻繁に行われる。FATのキャッシュは、FATが連続している領域に配置されているとして、FATを分割することにより得られた分割部分を格納している連続領域を順次読み出してゆくことにより行われる。しかし、FATのフラグメンテーションが発生している場合において、FATのキャッシュを行おうとすると、FATを構成する分割部分と、そうでない分割部分とが内部メモリに順次読み出されることなる。FATの構成部分でないデータが内部メモリに読み出されるということは、目的としないデータが内部メモリに多く読み出されることを意味し、キャッシュミスが発生していることになる。キャッシュミスが多く発生すれば、それだけ内部メモリへの読み出し回数が増大することになるので、FATの読み出しをいたずらに長期化させる結果となる。
【００８６】
こうした2つの問題があるからといって、ディスクを対象としたフラグメンテーションの解消を半導体メモリカード１００に対し実行するのは賢明ではない。何故なら、半導体メモリカード１００では、ブロックに格納されているデータの書き換えにあたっては、それまで格納されたいたデータを一旦消去する必要があり、そうした消去のため、ディスク以上の処理時間が費やされるからである。そこで本実施形態では、フラグメンテーション発生時におけるコマンドオーバーヘッド及びキャッシュミスの増大への対処法として、物理アドレス、論理アドレスの対応関係を変更するという考えを提案する。つまりファイル、FATの分割部分の物理的な配置は変化させず、これらを格納したブロックが、連続した論理アドレスにて指示されるように、物理アドレス、論理アドレスの対応関係を変化させるのである。
【００８７】
図２７（ａ）のように、48KByteのファイルを構成する3つの分割部分が、3つの領域に配置される場合、それら分割部分を格納したブロックが連続した論理アドレスにて指示されれば、アクセス装置が複数の論理アドレスのうち先頭のものと、データ長48KByteとを指定した読出コマンドを一回発行することにより、それら3つの領域（ブロック）に格納された分割部分をまとめて読み出すことができる。またFATが3つに分割され、3つの領域に格納されている場合、これら3つのブロックを連続した論理アドレスにて指示すれば、これら連続論理アドレスを読出先とした読出コマンドを順次発行することにより、バラバラに格納されたFATを内部メモリに順次読み出してゆくことができ、キャッシュミスが生じることはない。
【００８８】
ファイル、FATを分割することにより得られた複数の分割部分が複数の領域にバラバラに格納されている場合であっても、これらの領域に連続した論理アドレスを割り当てれば、読出コマンド発行に伴うオーバーヘッドを解消することができ、またキャッシュミスの発生を防ぐことができる。
以上説明した論理アドレスのフラグメーション解消処理は、先行消去制御部２９が図２８のフローチャートに示す手順を実行することにより、実現される。尚、本フローチャートの説明にあたって、図２９の説明図を引用するものとする。図２９は、フローチャートにおける変数s、変数t、変数u、変数v、変数yが具体的にどのようなものを対象としているかを示す図である。ステップＳ５０において、ファイルシステム操作部９は、変数x、変数yのそれぞれの初期化を行う(x←1,y←1)。これにより、1番目のファイルの1番目の分割部分が処理対象となる。続いてステップＳ５１では、x番目のファイルのy番目の分割部分を格納したブロックの論理アドレスsと、x番目のファイルのy+1番目の分割部分を格納したブロックの論理アドレスtとの前後比較を行う。図２９（ａ）のように、y番目の分割部分と、y+1番目の分割部分とが、隔てられた消去可能ブロックに格納されているが、y番目、y+1番目の順に分割部分が格納されている場合、ステップＳ５２がYesとなり、そのままステップＳ５４に移行する。
【００８９】
図２９（ｂ）のように、y+1番目の分割部分、y番目の分割部分の順で、分割部分が格納されているのであれば、ステップＳ５３に移行して、物理アドレスuを論理アドレスtに割り当て、物理アドレスvを論理アドレスsに割り当てる。これにより、図２９（ｂ）の矢印rv1,rv2に示すように、物理アドレス−論理アドレス間の割り当て変更がなされる。続くステップＳ５４では、y番目の分割部分が格納された消去可能ブロックの論理アドレスと、y+1番目の分割部分が格納された消去可能ブロックの論理アドレスとが連続しているかを判定する。図２９（ｃ）のようにy番目の分割部分を格納した消去可能ブロックの直後の消去可能ブロックに、y+1番目の分割部分が格納されている場合、s+1=tという関係が成立するので、ステップＳ５４がYesとなり、ステップＳ５６に移行する。図２９（ｄ）のように、y番目の分割部分を格納した消去可能ブロックと、y+1番目の分割部分を格納した消去可能ブロックとが隔てられている場合、s+1=tという関係が成立しないので、ステップＳ５４がNoとなり、ステップＳ５５に移行する。ここで論理アドレスs+1に対応する物理アドレスを物理アドレスwとすると、ステップＳ５５では、y+1番目の分割部分を格納した消去可能ブロックについての物理アドレスvを論理アドレスs+1に割り当て、物理アドレスwを論理アドレスtに割り当てる。y番目の分割部分、y+1番目の分割部分が図２９（ｄ）のように格納されている状態において、ステップＳ５５の処理が実行されれば、矢印rv3,rv4に示すように、アドレスの対応関係の変更がなされる。
【００９０】
以上の処理を終えれば、ステップＳ５６において変数yがラストナンバーになったか否かを判定し、そうでなければ、ステップＳ５７において変数yをインクリメントしたステップＳ５１に移行する。ステップＳ５６におけるチェックと、ステップＳ５７における変数yのインクリメントとにより、x番目ファイルを構成する全ての分割部分を対象として、ステップＳ５１〜ステップＳ５７の処理は繰り返される。
【００９１】
一方、ステップＳ５６においてYesと判定されれば、ステップＳ５８においてxがラストナンバーであるかが判定され、Noならば、ステップＳ５９に移行して、変数xをインクリメントし（x←x+1）、ステップＳ６０において変数yを初期化する。ステップＳ５８におけるチェックと、ステップＳ５９における変数yのインクリメントとにより、全てのファイルを対象として、ステップＳ５１〜ステップＳ５７の処理は繰り返される。
【００９２】
図３０に示す具体例を交えて、本実施形態におけるフラグメーションの解消を説明する。図３０（ａ）に示す初期状態において、論理アドレス0000，0001，0004に対応する消去可能ブロックにはfile1を構成する分割部分（file1・1/3、file1・2/3、file1・3/3）が格納される。また、論理アドレス0002，0003，0005，0006に対応する消去可能ブロックには、file2を構成する分割部分（file2・1/4、file2・2/4、file2・3/4、file2・4/4）が格納されている。
【００９３】
file1・2/3を格納した論理アドレス0001の次アドレス(論理アドレス0002)に対応する消去可能ブロックには、file2・1/4が格納されており、またfile1・3/3は、論理アドレス0004に対応する消去可能ブロックに格納されている。
本図に対して図２８のフローチャートを適用すると、file1・1/3とfile1・2/3との関係を考えると、論理アドレス0000,0001というように、論理アドレスの順番に分割部分が配置されているので、対応関係の入れ替えは行われない。一方、file1・2/3とfile1・3/3との関係を考えると、file1・2/3が格納されている消去可能ブロックには、論理アドレス0001が対応しており、これの次の論理アドレス0002には、file2・1/4が格納された消去可能ブロックが対応しているので、ステップＳ５４がNoとなり、ステップＳ５５に移行する。そしてステップＳ５５においてfile1・3/3が格納された論理アドレス、物理アドレスの対応関係と、file2・1/4が格納された論理アドレス、物理アドレスの対応関係とを入れ替えることにより、このfile1・2/3と、file1・3/3とが連続の論理アドレスにて指示されるようにする。即ち、file2・1/4が格納された消去可能ブロックについての物理アドレス0002に論理アドレス0004を割り当て、逆にfile1・3/3が格納された消去可能ブロックについての物理アドレス0004に論理アドレス0002を割り当てる。かかる変更後の論理アドレス−物理アドレスの対応関係は図３０（ｂ）の通りとなる。file1・3/3の処理が済んだので、file2のfile2・1/4に処理を移す。図３０（ｂ）において、file2・1/4とfile2・2/4との間の関係を考えると、file2・1/4は、論理アドレス0004に対応する消去可能ブロックに格納されており、また直後の分割部分file2・2/4は、論理アドレス0003に対応する消去可能ブロックに格納されているので、分割部分に付されるべき論理アドレスの順序が逆になっている。そのため、ステップＳ５２がNoとなり、ステップＳ５３に移行してfile2・1/4とfile2・2/4との前後関係を入れ替える。これにより、図３０（ｃ）に示すように、file2・1/4を格納した消去可能ブロックに対応する物理アドレス0002が、論理アドレス0003に割り当てられ、file2・2/4を格納した消去可能ブロックに対応する物理アドレス0003が、論理アドレス0004に割り当てられることなる。結果として、file1、file2を構成する分割部分は、全て連続する論理アドレスにて指示されることなる。
【００９４】
以上のように本実施形態によれば、ファイルを構成する分割部分が連続な領域に格納されなくても、それら連続領域に連続した論理アドレスを割り当てるので、読出コマンド発行の際のオーバーヘッドや、FAT、ファイルをキャッシュする際のキャッシュミスを低減することができる。
（第６実施形態）
第６実施形態は、配信サービスにおいて不揮発メモリに様々なコンテンツを記録し、携帯型プレーヤで再生する場合の改良に関する。不揮発メモリに様々なコンテンツを記録する場合、音楽、映像、ゲーム、テキスト等、様々な属性を有するファイルが半導体メモリカード１００に格納されることを想定せねばならない。読み出しの可否や編集の可否が、音楽、映像、ゲーム、テキストの種別毎に異なる場合、アクセス装置のファイルシステム操作部９は、ファイル読み出しや編集にあたって、ファイルの中身を調べて、それから読み出し処理や編集処理を行う必要がある。ファイルの読み出しや編集を行う度に、そのような中身の調査が必要となると、ファイルシステム操作部９の処理が複雑になってしまう。そこでDVD等に採用されているUDF(universal disk format)ファイルシステムでは、ファイルの中身を調べることなく、そのファイルに格納されたデータの種別が一目瞭然となるよう、ファイルに拡張属性を設定している。
【００９５】
拡張属性の一例を図３１に示す。図３１は、UDFのImplementation Use Extended Attributeを用いて規定された新たな拡張属性であり、Attribute Type２0０，Attribute SubType２０１０，Reserved２０２０，Attribute Length２０３０，Implementation Use Length２０４０，Implementation Identifier２０５０(これらは、UDFのImplementation UseExtended Attributeと同一であるため、説明は省略する）、Implementation Use２０６０からなる。Implementation Use２０６０は、拡張属性のヘッダ部分のチェックサムが格納されるHeaderChecksum２０６１、ファイル名が格納されるName２０６３、ファイルの属性が格納されるFlag２０６２とからなる。Flag２０６２は、各ビットが0であるか、1であるかによりファイルの属性を表す。0ビット目は、対応するファイルがテキストファイルであるか否かを示し、1ビット目は、対応するファイルが音楽ファイルであるか否かを示す。2ビット目は、対応するファイルが映像ファイルであるか否かを示し、3ビット目以降は予備の領域となっている。
【００９６】
こうした拡張属性を、半導体メモリカード１００に格納させようとすると、1つの問題に直面する。それは、これまでの実施形態で説明してきたように、半導体メモリカード１００のボリューム管理情報は、IS0/IEC9293のデータ構造に準じているので、各ファイルに拡張属性を設定する余地が存在しないという点である。
【００９７】
そこで本実施形態では、プロテクト領域及び代替領域に拡張属性を格納する。プロテクト領域については、既に第２実施形態で説明済みなので説明を省略する。代替領域は、ユーザ領域の通常パーティションとは別に管理される領域であり、割当変更部２４は、不揮発メモリのユーザ領域に欠陥セクタが現れた場合、この代替領域から、セクタを選んで、この欠陥セクタに置き換えるという動作を行う。図３２は、代替領域が設けられた半導体メモリカード１００の内部構成を示す図である。拡張属性をプロテクト領域又は代替領域に格納することにより、FAT型ファイルシステムで定義されていない新たな拡張属性を各ファイルに設定することができる。また、通常ユーザが使用するユーザ領域と、ユーザデータ領域において、新しく設定した拡張属性とはまったく独立して、従来のファイルシステムを使用することが可能であるため、他のシステムとの互換性が生じる。さらに、アクセス装置には各属性のファイルに必要な操作のみを実装することが可能になるため、アクセス装置に実装する操作の量を減らすことができ、アクセス装置のメモリ量を低減することができる。加えて、各ファイルの中身を参照して各ファイルの属性を判定するのではなく、拡張属性のみを参照して判定することが可能であるため、高速な動作が実現できる。
【００９８】
（第７実施形態）
FAT型ファイルシステムにおい、書込禁止、読出禁止等の属性をファイルに設定することにより、ファイルの保護を、より強固にすることを提案する。一般にFAT型ファイルシステムでは、書込禁止や読込禁止といったファイル毎の属性を、ファイルエントリーに設定することができる。アクセス装置のファイルシステム操作部９は、半導体メモリカード１００と接続された際、ボリューム管理情報を読み出して保持し、このファイルエントリに設定されたファイル属性を参照して、ファイルに対する読み書きを行うか否かの判定を行う。アクセス装置におけるアプリケーションプログラム８が、ファイルシステム操作部９を通じて半導体メモリカード１００をアクセスするというルールを遵守していれば、ファイルエントリに設定された属性は有効なものとなる。しかしアクセス装置内部のアプリケーションプログラム８がファイルシステム操作部９を介さずに、半導体メモリカード１００を直接アクセスする場合、つまりアプリケーションプログラム８が直接、半導体メモリカード１００に対して読出コマンド、書込コマンドを発行することにより、半導体メモリカード１００に対するデータ読み書きを行おうとする場合、ファイルエントリにおいて設定された書込禁止属性、読出禁止属性は無意味なものとなる。そこで本実施形態では、ファイルシステム操作部９を介さずに、アプリケーションプログラム８が直接半導体メモリカード１００をアクセスしようとする場合であっても、読出禁止、書込禁止といった属性が有効に活用されるよう、半導体メモリカード１００を図３３のように構成している。図３３は、第７実施形態に係る半導体メモリカード１００の内部構成を示す図である。本図において特徴的なのは、不揮発メモリ１に、代替領域が設けられ、この代替領域にブロック属性テーブルが設けられている点である。
【００９９】
ブロック属性テーブルは、ボリューム領域に含まれる消去可能ブロックに対応づけられたエントリーからなり、エントリーが"1"に設定されれば、対応するブロックは書込禁止に設定される。またエントリーが"2"に設定されれば、対応するブロックは、読出禁止に設定される。第５実施形態におけるファイルシステム操作部９及びアクセス制御部２は、ファイルエントリーに対する操作と共に、ブロック属性テーブルに対する操作をも行う。アプリケーションプログラム８がファイルオープンをファイルシステム操作部９に命じ、そのファイルに、属性の設定を命じた場合、ファイルシステム操作部９は、このファイルに対応するファイルエントリーに属性を設定する。例えば、読出禁止の設定をアプリケーションプログラム８が命じたなら、ファイルエントリーにおいて、その属性を読出禁止に設定する。書込禁止の設定をアプリケーションプログラム８が命じたなら、ファイルエントリーにおいて、その属性を書込禁止に設定する。隠れ属性の設定をアプリケーションプログラム８が命じたなら、ファイルシステム操作部９は、隠れ属性を、そのファイルエントリーに設定する。
【０１００】
このようにして、ファイルのファイルエントリーに、属性が設定されたなら、ファイルシステム操作部９は、ファイルをクラスタサイズに分割し、分割により得られた分割部分のそれぞれをユーザ領域における複数クラスタに記録する。クラスタの記録に伴い、ブロック属性テーブルにおいて、各消去可能ブロックに相当するエントリーを、そのファイルの属性に応じて設定する。そのファイルが書込禁止であれば、そのファイルの分割部分を格納したクラスタに対応するエントリーに書込禁止属性を設定し、またファイルの属性が読出禁止であれば、そのファイルの分割部分を格納したクラスタに対応するエントリーに読出禁止属性を設定する。ファイルの属性が隠れ属性であれば、そのファイルの分割部分を格納したクラスタに対応するエントリーに読出禁止属性を設定する。
【０１０１】
こうして、ファイルがユーザ領域に記録されれば、ブロック属性テーブルに示された属性に従い、ブロックからのデータ読み出し、及び、ブロックに対するデータ書き込みを行う。即ち、読出制御部２３は、アクセス装置から読出コマンドが発行されれば、ブロック属性テーブルにおいて、その読出先アドレスに対応するエントリーを参照し、当該エントリーが読み書き可能を示しているのなら、読出先アドレスにて示されるブロックにデータ読み出しを行い、また読出禁止属性を示しているのなら、データ読み出しを行わない。
【０１０２】
書込制御部２５、書換制御部２７は、アクセス装置から書込コマンドが発行されれば、ブロック属性テーブルにおいて、その書込先アドレスに対応するエントリーを参照し、当該エントリーが読み書き可能を示しているのなら、書込先アドレスにて示されるブロックにデータ書き込みを行い、また書込禁止属性を示しているのなら、データ書き込みを行わない。
【０１０３】
以上のようなブロックに対する読み書き制御は、アプリケーションプログラム８がファイルシステム操作部９を介して書込コマンド、読出コマンドを発行する場合も、ファイルシステム操作部９を介さずに読出コマンド、書込コマンドを発行する場合も可能であるので、アクセス装置からのコマンド発行がファイルシステム操作部９を介しているか否かに拘らず、ブロックに対する読み書きに制限を課すことができる。図３４に示す具体的を交えながら、本実施形態に係るファイルシステム操作部９の処理を説明する。図３４（ａ）において、消去可能ブロックにおけるアドレス0000，0002，0003にfile1のデータが、アドレス0001，0004にfile2のデータが、アドレス0005にfile3のデータが、アドレス0006にfile4のデータが格納されている。
【０１０４】
図３４（ｂ）は、書込禁止属性が設定されたfile1を不揮発メモリ１に格納する場合を想定した図である。ブロック属性テーブルにおいて、file1の各分割部分を格納したブロック（アドレス0000，0002，0003）に対応するエントリーは、書込禁止属性を示す値"1"が設定される。ブロック属性テーブルがこのように設定されれば、書込制御部２５は、アドレス0000，0002，0003に対する書き込みが命じられても、それらブロックに対する書き込み処理を拒否する。
【０１０５】
図３４（ｃ）は、読込禁止属性が設定されたfile2を不揮発メモリ１に格納する場合を想定した図である。file2に読み込み禁止属性が設定された場合、ブロック属性テーブルにおいて、file2に対するファイルエントリーに読み込み禁止属性を示すフラグが設定される。そしてfile2は、複数に分割され、ユーザ領域における複数のブロックに格納される。
【０１０６】
file2の分割部分が論理アドレス0001，0004に格納された場合、ブロック属性テーブルにおいて、これらのブロックに対応するエントリーには、読み込み禁止属性を示す値"2"が設定される。ブロック属性テーブルがこのように設定されれば、読出制御部２３は、たとえアクセス装置からブロックの読み出しが命じられたとしても、アドレス0001，0004からのデータ読み出しを拒否する。
【０１０７】
以上のように本実施形態によれば、アクセス装置のアプリケーションプログラム８がファイルシステム操作部９を介さずに半導体メモリカード１００をアクセスしようとしても、半導体メモリカード１００には、各ブロックに対応づけて、読出禁止、書込禁止が設定されているので、そのようなアクセスを拒否することができる。ファイルを格納したブロックに、読出禁止、書込禁止といった属性を設定することにより、ファイルの保護を確実にすることができ、またファイルに著作物が収録されている場合、その著作権を保護することができる。
【０１０８】
なお、本実施形態においては書込禁止属性を示すフラグに"1"、読み込み禁止属性を示すフラグに"2"を使用したが、これらのフラグは一例であり、本発明はこれらに限定されるものではない。また本実施形態では、不揮発メモリの各ブロックに読み書き禁止属性を付加するために、ブロック属性テーブルを使用したが、各ブロック毎に属性を設定できるものであれば、リスト構造を使用するなど、他の形態で実現してもよい。また、本実施形態では、不揮発メモリのブロック属性として、読み書き禁止属性を設定する方法について説明したが、root特権を持つユーザのみがアクセスできるブロックを管理する▲１▼、各ユーザIDが所有するブロックはそのユーザIDを持つユーザのみがアクセスする▲２▼、ユーザ毎にブロックのアクセス権を設定する▲３▼など、ブロック属性として、本実施例以外の情報を使用してもよい。以上、ファイルシステムの説明においては、FATファイルシステムを用いたが、UDFやWindosNTに採用されているNew Technology File System(NTFS)など、その他の従来のファイルシステムや独自のファイルシステムを用いて同様の効果をあげてもよい。また、消去可能ブロックを構成するセクタ数を32個としたのは、あくまでも一例に過ぎず、消去可能ブロックを構成するセクタ数が、これより増減してよいことはゆうまでもない。
【０１０９】
以上説明したように本発明に係る半導体メモリカード１００は、不揮発メモリ１に対する高寿命化を実現できる。よって、電子音楽配信にて取得した音楽コンテンツを記録し、それからその音楽コンテンツを削除して、改めて別の音楽コンテンツを記録するというような「重ね録り」が多く発生した場合も、不揮発メモリの寿命を縮めることはないので、電子音楽配信にて取得した音楽コンテンツの記録に、一枚の半導体メモリカード１００を繰り返し用いることができる。
【０１１０】
【発明の効果】
以上説明したように、本発明に係る半導体メモリカードのアクセス装置は、複数のセクタからなり、それら複数のセクタのうち連続する2のi乗個のセクタ(iは、0以上の整数)がデータ消去の最小単位であるブロックとしてグループ化されているメモリ領域を有する半導体メモリカードにおいて、複数のセクタのうち2のj乗個のセクタ(jは、0以上の整数)に格納されるデータ群をクラスタとして管理し、１つ以上のクラスタをファイルとして管理することにより、ファイルアクセスを実現する装置であり、前記メモリ領域において管理されるべきクラスタ数に基づいて、同一ファイルとして管理される前記クラスタ間のリンク関係をファイル毎に示すファイルアロケーションテーブルのデータサイズを算出し、ファイルアロケーションテーブルを含むボリューム管理情報のデータサイズを算出する算出手段と、算出されたボリューム管理情報のデータサイズを上回り、尚且つ、m×2のj乗個のセクタからなる第１領域を(mは、1以上の整数)、ボリューム管理情報の記録のために確保し、第１領域に後続するセクタからなる第２領域を、ユーザデータの記録のために確保する確保手段と、確保された第１領域にボリューム管理情報を記録し、第２領域にユーザデータを記録して、これらをクラスタとして管理する記録手段とを備えることを特徴としている。このアクセス装置によれば、メモリ領域においてm×2のj乗個のセクタからなる第１領域を、ボリューム管理情報の記録のために確保するので、1つのクラスタが2つの消去可能ブロックに跨って格納されることはない。クラスタの境界と、消去可能ブロックの境界との整合、ボリューム管理情報の境界と、消去可能ブロックの境界との整合が図られるので、1つのクラスタを書き換えたり、上書きしたりする際、消去するべき消去可能ブロックの数は1つで済み、消去可能ブロックの消去回数を低減させることができる。消去回数の低減により、半導体メモリカードにデータを書き込む際の時間を短縮することができ、また、不揮発メモリ自体の長寿命化を実現することができる。
【０１１１】
ここで前記ボリューム管理情報は、前記ファイルアロケーションテーブルの他に、マスタブートレコード、パーティションテーブル、パーティションブートセクタ、及びルートディレクトリエントリを含み、
前記記録手段は、マスタブートレコード及びパーティションテーブルを第１領域における先頭セクタに記録すると共に、先頭セクタから所定のセクタ数だけ隔てて、パーティションブートセクタ、ファイルアロケーションテーブル、ルートディレクトリエントリを記録することにより、第１領域の末尾とルートディレクトリエントリの末尾とを一致させてもよい。ドライブの先頭を示すマスタブートレコードから、パーティション領域の先頭を示すパーティションブートセクタまでのセクタ数を調整することにより、ボリューム管理情報を、m×2のj乗個のセクタからなる第１領域に収めるので、FAT型ファイルシステムを実行する機器との互換性を保つことができる。
【０１１２】
ここで前記算出手段は、
パーティションブートセクタの記録に必要なセクタ数と、ファイルアロケーションテーブルの記録に必要なセクタ数と、ルートディレクトリエントリの記録に必要なセクタ数との総和SUMを算出し、
前記確保手段は、以下の｛数式1｝に基づき数値mを算出して、第１領域の確保を行い、
前記記録手段は、以下の{数式1}を満たすセクタ数NUMから、先頭セクタのセクタ数を引き、これにより得られた数値を前記所定のセクタ数として算出してもよい。
【０１１３】
｛数式1｝
NUM＋SUM ＝ 2のj乗×m
ファイルアロケーションテーブルのサイズが変動するような場合であっても、消去可能ブロックのサイズの整数倍であって、ボリューム管理情報のサイズを越える最小のサイズの第１領域を確保するので、ファイルアロケーションテーブルサイズがどのように算出されようとも、必要最小限のサイズの第１領域を確保することができる。
【０１１４】
ここで前記記録手段は、ボリューム管理情報の記録にあたって、セクタ数NUMから、1を引いたセクタ数を、パーティションテーブルに設定してもよい。セクタ数NOMから1を引いたセクタ数がパーティションテーブルに設定されるので、第１領域のサイズが変化して、第２領域の先頭アドレスが変動した場合でも、アクセス装置は、このパーティションテーブルを参照することにより、ユーザ領域を確実にアクセスすることができる。
【図面の簡単な説明】
【図１】半導体メモリカードの外観形状を示す図である。
【図２】（ａ）（ｂ）アクセス装置の外観を示す図である。
【図３】（ａ）半導体メモリカード及びアクセス装置の内部構成を示す図である。（ｂ）アクセス装置にて用いられるソフトウェアのレイヤモデルを示す図である。
【図４】不揮発メモリ１がISO/IEC9293に準じたフォーマットでデータ格納を行う際のフォーマットを示した図である。
【図５】ボリューム領域に含まれるパーティション管理領域と、システム領域と、ユーザ領域の構成を示す図である。
【図６】（ａ）マスタブートレコード&パーティションテーブルセクタの構成を表した図である。（ｂ）パーティションブートセクタの構成を示す図である。
【図７】（ａ）二重化FATの構成を示す図である。
（ｂ）ルートディレクトリエントリの構成を示す図である。
（ｃ）ユーザ領域の構成を示す図である。
【図８】ファイル格納方式の一例を示す図である。
【図９】  AOB001.SA1が複数のクラスタに記録されている場合のディレクトリエントリー及びFATについての設定例を示す図である。
【図１０】（ａ）消去可能ブロックと、クラスタとの関係を示す図である。
（ｂ）n=1と定められた場合のクラスタを示す図である。
（ｃ）n=16と定められた場合のクラスタを示す図である。
【図１１】（ａ）s個の消去可能ブロックのうち、m個のクラスタをボリューム管理情報の記録に割り当てる場合を想定した図である。
（ｂ）n=1と設定された場合、ボリューム管理情報の記録にどれだけのクラスタが割り当てられるかを示す図である。
（ｃ）n=16と設定された場合、ボリューム管理情報の記録にどれだけのクラスタを割り当てるかを示す図である。
【図１２】数式11、数式12で算出された大きさで、パーティション管理領域と、システム領域と、クラスタを作図して得られた図である。
【図１３】ボリューム領域の初期化手順を示したフローチャートである。
【図１４】第２実施形態に係るアクセス装置及び半導体メモリカードの構成を示す図である。
【図１５】セキュア処理部１１の内部構成を示す図である。
【図１６】プロテクト領域が設けられたボリューム領域を詳細に示した図である。
【図１７】ユーザデータ領域におけるレイアウトの一例を示す図である。
【図１８】プロテクト領域のレイアウトの一例を示す図である。
【図１９】第３実施形態に係るアクセス制御部２の内部構成を示す図である。
【図２０】（ａ）〜（ｄ）消去可能ブロックの書き換えが行われる際の一連の手順を示す図である。
【図２１】第３実施形態に係るファイルシステム操作部９の内部構成を示す図である。
【図２２】第３実施形態に係る先行消去制御部２９による処理手順を詳細に表したフローチャートである。
【図２３】（ａ）（ｂ）第３実施形態に係る消去可能ブロックの消去手順を示す図である。
【図２４】第４実施形態におけるアクセス制御部２の内部構成を示す図である。
【図２５】第４実施形態に係るファイルシステム操作部９による処理手順を詳細に表したフローチャートである。
【図２６】（ａ）（ｂ）第４実施形態に係る消去可能ブロックの消去手順を示す図である。
【図２７】フラグメンテーションの有無がコマンド発行の際のオーバーヘッドとどのような因果関係にあるかを示す図である。
【図２８】論理アドレスのフラグメーション解消処理の処理手順を示す図である。
【図２９】（ａ）〜（ｄ）図２８のフローチャートにおいて、示さていれる変数s、変数t、変数u、変数v、変数yが具体的にどのようなモデルを想定しているかを示す図である。
【図３０】第５実施形態におけるフラグメーションの解消がどのように行われるかを示す図である。
【図３１】  UDFのImplementation Use Extended Attributeを用いて規定された新たな拡張属性を示す図である。
【図３２】代替領域が設けられた半導体メモリカードの内部構成を示す図である。
【図３３】第６実施形態に係る半導体メモリカードの内部構成を示す図である。
【図３４】第７実施形態に係るファイルシステム操作部９の処理内容を示す説明図である。
【図３５】物理層、ISO9293に準じたファイルシステム層、応用層からなるレイヤモデルを示す図である。
【図３６】物理層、ファイルシステム層のフォーマットを示す図である。
【図３７】物理層、ファイルシステム層のフォーマットを示す図である。
【図３８】ボリューム管理情報の終端部分と、ユーザ領域の先頭に位置するクラスタとが同じ消去可能ブロックに配置された状態のボリューム領域のレイアウトを示す図である。
【符号の説明】
１    不揮発メモリ
２    アクセス制御部
３    ワークメモリ
４    カードコネクタ
５    二次記憶装置
７    一次記憶装置
８    アプリケーションプログラム
９    ファイルシステム操作部
１０    デバイスドライバ
１１    セキュア処理部
１３    システム領域
１４    Hidden領域
１５    AKE処理部
１６    Ks復号化部
１７    Ks暗号化部
２１    コマンド解読部
２２    物理アドレス変換部
２３    読出制御部
２４    割当変更部
２５    書込制御部
２６    消去制御部
２７    書換制御部
２８    ファイル削除部
２９    先行消去制御部
１００    半導体メモリカード
１０１    プロテクトスイッチ
【図１】
0003954790.tif 000002
【図２】
0003954790.tif 000003
【図３】
0003954790.tif 000004
【図４】
0003954790.tif 000005
【図５】
0003954790.tif 000006
【図６】
0003954790.tif 000007
【図７】
0003954790.tif 000008
【図８】
0003954790.tif 000009
【図９】
0003954790.tif 000010
【図１０】
0003954790.tif 000011
【図１１】
0003954790.tif 000012
【図１２】
0003954790.tif 000013
【図１３】
0003954790.tif 000014
【図１４】
0003954790.tif 000015
【図１５】
0003954790.tif 000016
【図１６】
0003954790.tif 000017
【図１７】
0003954790.tif 000018
【図１８】
0003954790.tif 000019
【図１９】
0003954790.tif 000020
【図２０】
0003954790.tif 000021
【図２１】
0003954790.tif 000022
【図２２】
0003954790.tif 000023
【図２３】
0003954790.tif 000024
【図２４】
0003954790.tif 000025
【図２５】
0003954790.tif 000026
【図２６】
0003954790.tif 000027
【図２７】
0003954790.tif 000028
【図２８】
0003954790.tif 000029
【図２９】
0003954790.tif 000030
【図３０】
0003954790.tif 000031
【図３１】
0003954790.tif 000032
【図３２】
0003954790.tif 000033
【図３３】
0003954790.tif 000034
【図３４】
0003954790.tif 000035
【図３５】
0003954790.tif 000036
【図３６】
0003954790.tif 000037
【図３７】
0003954790.tif 000038
【図３８】
0003954790.tif 000039