(57)【特許請求の範囲】
【請求項１】
データを記憶するデータエリアと前記データエリアに格納されているデータが実行されるべき目的プログラムを構成している構成データであるか否かを示す識別フラグデータを記憶する冗長エリアとを各々が備えている複数のメモリページから各々が構成される複数のメモリブロックを備える不揮発性メモリから構成され、メモリページ単位でシーケンシャルにアクセスされる不揮発性メモリエリアから構成される第１の記憶手段と、
前記第１の記憶手段から前記目的プログラムを読み出す為の読出プログラムを記憶し、揮発性メモリエリアを有する第２の記憶手段と、
ランダムにアクセスされる揮発性メモリエリアを備え、前記第１の記憶手段から読み出した目的プログラムを格納する第３の記憶手段と、
前記第２の記憶手段に記憶されている読み出しプログラムに従って、前記第１の記憶手段の前記冗長エリアに記憶されているデータ識別フラグを用いて構成データを記憶しているメモリページを特定し、特定されたメモリページのデータエリアから構成データを読み出し、前記第３の記憶手段に読み出された構成データから構成される目的プログラムを格納し、該第３の記憶手段に記憶された目的プログラムを実行する制御手段と、
を備えることを特徴とする記憶装置。
【請求項２】
前記読出プログラムは、前記制御手段に、前記複数のメモリページの中から前記構成データを格納しているメモリページを特定させるプログラムを含む、  ことを特徴とする請求項１に記載の記憶装置。
【請求項３】
前記第１の記憶手段は、ＮＡＮＤ型のフラッシュメモリから構成されている、ことを特徴とする請求項２に記載の記憶装置。
【請求項４】
前記読出プログラムは、前記制御手段に、前記複数のメモリページのそれぞれに格納されている前記データ識別フラグを検出させ、該データ識別フラグを用いて前記構成データを格納しているメモリページを特定させるプログラムを含む、
ことを特徴とする請求項２に記載の記憶装置。
【請求項５】
前記対象プログラムは、前記制御手段が前記メモリページ単位よりも小さい単位で前記第１記憶手段にランダムアクセスすることを、擬似的に、実現するデバイスドライバであり、
前記制御手段は、前記第３の記憶手段に格納した前記デバイスドライバを実行することにより、擬似的に、前記メモリページ単位よりも小さい単位で前記第１の記憶手段にランダムアクセスする、
ことを特徴とする請求項３に記載の記憶装置。
【請求項６】
前記対象プログラムは、前記制御手段が前記メモリページ単位よりも小さい単位で前記第１の記憶手段にランダムアクセスすることを、擬似的に、実現するデバイスドライバであり、
前記制御手段は、前記第３の記憶手段に格納した前記デバイスドライバを実行することにより、擬似的に、前記メモリページ単位よりも小さい単位で前記第１の記憶手段にランダムアクセスする、
ことを特徴とする請求項４に記載の記憶装置。
【請求項７】
前記複数のメモリページのそれぞれは、メモリページを特定するための論理アドレスを割り当てられており、
前記デバイスドライバは、前記制御手段に、アクセス対象のメモリページを特定するための論理アドレスを取得させ、取得した該論理アドレスと同一の論理アドレスが割り当てられているメモリページにアクセスさせるプログラムを含む、
ことを特徴とする請求項５に記載の記憶装置。
【請求項８】
前記複数のメモリページのそれぞれは、メモリページを特定するための論理アドレスを割り当てられており、
前記デバイスドライバは、前記制御手段に、アクセス対象のメモリページを特定するための論理アドレスを取得させ、取得した該論理アドレスと同一の論理アドレスが割り当てられているメモリページにアクセスさせるプログラムを含む、
ことを特徴とする請求項６に記載の記憶装置。
【請求項９】
前記第２の記憶手段は、外部から供給される前記読出プログラムを取得して格納する、ことを特徴とする請求項１に記載の記憶装置。
【請求項１０】
データを記憶するデータエリアと前記データエリアに格納されているデータが実行されるべき目的プログラムを構成している構造データであるか否かを示す識別フラグデータを記憶する冗長エリアとをそれぞれが含む複数の記憶ページからそれぞれが構成される複数のブロックを備える不揮発性メモリから構成され、メモリページ単位でシーケンシャルにアクセスされる不揮発性記憶エリアから構成される第１の記憶手段から、実行されるべき目的プログラムを構成する構成データを記憶するメモリページを特定し、
前記読出プログラムにより、前記特定されたメモリページのデータエリアから構成データを読み出し、
読み出した構成データにより構成される目的プログラムを、ランダムアクセスが可能な第３の記憶手段に格納し、
前記第３の記憶手段に記憶された目的プログラムを実行する、
ことを特徴とする記憶装置制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、記憶装置及び記憶装置制御方法に関し、特に、一定の記憶容量毎にシーケンシャルにアクセスすることを要する記憶装置とその制御方法に関する。
【０００２】
【従来の技術】
小型の記憶装置として、フラッシュメモリが用いられている。フラッシュメモリには、大別してＮＯＲ型とＮＡＮＤ型とがある。
【０００３】
ＮＯＲ型のフラッシュメモリは、１バイト単位でのランダムアクセスが可能である。しかし、ＮＡＮＤ型のフラッシュメモリに比べると、高価であり、集積度が低い。
【０００４】
ＮＡＮＤ型のフラッシュメモリは、ＮＯＲ型のフラッシュメモリに比べると、安価で集積度が高い。しかし、ランダムアクセスを実行できる最小単位がＮＯＲ型のフラッシュメモリより大きく、典型的には、例えば最小単位が５１２バイトとなる。
このため、記憶領域に格納された状態から読み出して実行する場合に当該記憶領域にランダムアクセスする必要が生じるようなプログラムは、ＮＡＮＤ型のフラッシュメモリの記憶領域に格納された状態から直接実行することができない。このようなプログラムの例としては、ＮＡＮＤ型のフラッシュメモリへの擬似的なランダムアクセスを実現するためのデバイスドライバがある。
【０００５】
【発明が解決しようとする課題】
ＮＡＮＤ型のフラッシュメモリの記憶領域に格納されたデバイスドライバを実行できるようにするための手法としては、実行する対象のデバイスドライバを予めＮＯＲ型のフラッシュメモリやプログラマブルＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）の記憶領域に格納しておき、ＮＡＮＤ型フラッシュメモリにアクセスするＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等が起動した直後に、このデバイスドライバをＲＡＭ（Ｒａｍｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）の記憶領域へと転送する、という手法が考えられる。
【０００６】
しかし、この手法によった場合、デバイスドライバを格納するための不揮発性記憶媒体をＮＡＮＤ型フラッシュメモリとは別に備える必要が生じ、フラッシュメモリにアクセスする装置の構成が複雑になり、大型にもなる。
【０００７】
この発明は上記実状に鑑みてなされたもので、簡単な構成で、シーケンシャルにデータを読み出す記憶装置に格納されたランダムアクセスを要するプログラムの処理を実行することができる記憶装置及び記憶装置制御方法を提供することを目的とする。
【０００８】
【課題を解決するための手段】
上記目的を達成するため、この発明の第１の観点にかかる記憶装置は、
データを記憶するデータエリアと前記データエリアに格納されているデータが実行されるべき目的プログラムを構成している構成データであるか否かを示す識別フラグデータを記憶する冗長エリアとを各々が備えている複数のメモリページから各々が構成される複数のメモリブロックを備える不揮発性メモリから構成され、メモリページ単位でシーケンシャルにアクセスされる不揮発性メモリエリアから構成される第１の記憶手段と、
前記第１の記憶手段から前記目的プログラムを読み出す為の読出プログラムを記憶し、揮発性メモリエリアを有する第２の記憶手段と、
ランダムにアクセスされる揮発性メモリエリアを備え、前記第１の記憶手段から読み出した目的プログラムを格納する第３の記憶手段と、
前記第２の記憶手段に記憶されている読み出しプログラムに従って、前記第１の記憶手段の前記冗長エリアに記憶されているデータ識別フラグを用いて構成データを記憶しているメモリページを特定し、特定されたメモリページのデータエリアから構成データを読み出し、前記第３の記憶手段に読み出された構成データから構成される目的プログラムを格納し、該第３の記憶手段に記憶された目的プログラムを実行する制御手段と、
を備えることを特徴とする。
【０００９】
前記読出プログラムは、例えば、前記制御手段に、前記複数のメモリページの中から前記構成データを格納しているメモリページを特定させるプログラムを含む。
【００１０】
前記第１の記憶手段は、例えば、ＮＡＮＤ型のフラッシュメモリから構成される。
【００１１】
前記読出プログラムは、例えば、前記制御手段に、前記複数のメモリページのそれぞれに格納されている前記データ識別フラグを検出させ、該データ識別フラグを用いて前記構成データを格納しているメモリページを特定させるプログラムを含む。
【００１２】
前記対象プログラムは、例えば、前記制御手段が前記メモリページ単位よりも小さい単位で前記第１の記憶手段にランダムアクセスすることを、擬似的に、実現するデバイスドライバであり、前記制御手段は、例えば、前記第３の記憶手段に格納した前記デバイスドライバを実行することにより、擬似的に、前記メモリページ単位よりも小さい単位で前記第１記憶手段にランダムアクセスする。
【００１３】
前記対象プログラムは、例えば、前記制御手段が前記メモリページ単位よりも小さい単位で前記第１の記憶手段にランダムアクセスすることを、擬似的に、実現するデバイスドライバであり、
前記制御手段は、例えば、前記第３の記憶手段に格納した前記デバイスドライバを実行することにより、擬似的に、前記メモリページ単位よりも小さい単位で前記第１の記憶手段にランダムアクセスする。
【００１４】
例えば、前記複数のメモリページのそれぞれは、メモリページを特定するための論理アドレスを割り当てられており、前記デバイスドライバは、前記制御手段に、アクセス対象のメモリページを特定するための論理アドレスを取得させ、取得した該論理アドレスと同一の論理アドレスが割り当てられているメモリページにアクセスさせるプログラムを含む。
【００１５】
例えば、前記複数のメモリページのそれぞれは、メモリページを特定するための論理アドレスを割り当てられており、前記デバイスドライバは、前記制御手段に、アクセス対象のメモリページを特定するための論理アドレスを取得させ、取得した該論理アドレスと同一の論理アドレスが割り当てられているメモリページにアクセスさせるプログラムを含む。
【００１６】
前記第２の記憶手段は、例えば、外部から供給される前記読出プログラムを取得して格納する。
【００１７】
また、この発明の第２の観点に係る記憶装置の制御方法は、
データを記憶するデータエリアと前記データエリアに格納されているデータが実行されるべき目的プログラムを構成している構造データであるか否かを示す識別フラグデータを記憶する冗長エリアとをそれぞれが含む複数の記憶ページからそれぞれが構成される複数のブロックを備える不揮発性メモリから構成され、メモリページ単位でシーケンシャルにアクセスされる不揮発性記憶エリアから構成される第１の記憶手段から、実行されるべき目的プログラムを構成する構成データを記憶するメモリページを特定し、
前記読出プログラムにより、前記特定されたメモリページのデータエリアから構成データを読み出し、
読み出した構成データにより構成される目的プログラムを、ランダムアクセスが可能な第３の記憶手段に、格納し、
前記第３の記憶手段に記憶された目的プログラムを実行する、
ためのものであることを特徴とする。
【００１９】
【発明の実施の形態】
以下、この発明の実施の形態に係る記憶装置及び記憶装置制御方法を、フラッシュメモリドライブ装置を例として説明する。
図１に示すように、このフラッシュメモリドライブ装置は、制御部１と、ユーザロジック部２と、主記憶部３と、フラッシュメモリＩ／Ｆ（ＩｎｔｅｒＦａｃｅ）４と、フラッシュメモリ５と、入出力部６とより構成されている。
【００２０】
制御部１、ユーザロジック部２、主記憶部３、フラッシュメモリＩ／Ｆ４及び入出力部６は、内部バスＢＵＳを介して互いに接続されている。フラッシュメモリ５は、フラッシュメモリＩ／Ｆ４に固定的に接続され、あるいは、図示しないＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）カードＡＴＡ（ＡＴ  Ａｔｔａｃｈｍｅｎｔ）インターフェース等を介して着脱可能に接続されている。
あるいは、フラッシュメモリ５は、例えばスマートメディア（商標）やコンパクトフラッシュ（商標）等のメモリカードを構成するものとし、このメモリカードが、図示しないアダプタを介してフラッシュメモリＩ／Ｆ４に着脱可能に接続されてもよい。
【００２１】
制御部１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等より構成されている。
制御部１は、ユーザロジック部２の後述するブート用ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）２１から後述する制御コードを読み出し、読み出した制御コードに従い、後述する制御コードの処理を行う。制御コードの処理では、後述するように、ラッシュメモリ５が記憶する後述のデバイスドライバが主記憶部３の後述する命令格納用領域３１へと転送される。そして、制御部１は、転送されたデバイスドライバを命令格納用領域３１より読み出し、読み出したデバイスドライバに従い、フラッシュメモリ５へのアクセスを行う。フラッシュメモリ５へのアクセスは、フラッシュメモリＩ／Ｆ４を制御コードやデバイスドライバに従って制御することにより行う。
なお、デバイスドライバは、実行にあたって、１バイト単位でのランダムアクセスが可能な記憶領域に格納されていることを要するプログラムからなる。
【００２２】
ユーザロジック部２は、ＰＬＡ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ａｒｒａｙ）、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ））等からなるロジック回路や、ブート用ＲＯＭ２１を備えている。
ブート用ＲＯＭ２１は、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）やＦＰＧＡ等より構成されており、自己が記憶している制御コードを制御部１の制御に従って読み出し、制御部１へと供給する。制御コードは、制御部１が実行する後述のステップＳ１０１〜Ｓ１１４の処理を制御するためのプログラムを含むデータである。
【００２３】
主記憶部３は、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等、１バイト単位でのランダムアクセスが可能であってフラッシュメモリ５よりもデータを高速に読み書き可能な記憶装置より構成されている。主記憶部３は、制御部１の制御に従って、自己に供給されたデータを自己の記憶領域に記憶したり、自己が記憶しているデータを制御部１の制御に従って読み出したりする。
【００２４】
図１に示すように、主記憶部３が備える記憶領域には、命令格納用領域３１と、データ格納用領域３２とが含まれている。
【００２５】
命令格納用領域３１は、後述のデバイスドライバを格納するための記憶領域である。データ格納用領域３２は、制御部１がデバイスドライバの制御に従ってデータを格納するための記憶領域である。データ格納用領域３２に属する記憶領域は、各々の記憶容量が所定の単位量（例えば、１バイト）である区画に区切られ、各々の区画には、この区画を識別するためのデータ番地が割り当てられている。
【００２６】
データ格納用領域３２は、制御部１のワークエリアとして用いられ、また、デバイスドライバの制御に従って制御部１が行う処理に従い、空きブロックテーブル及びアドレス変換テーブルを格納する。
空きブロックテーブルは、フラッシュメモリ５の各ブロックのいずれが空きブロック（すなわち、リセットされた状態にあり、データ「０」を記憶したメモリセルを含んでいないブロック）であるかを表す情報を含むデータである。
アドレス変換テーブルは、フラッシュメモリ５の各ブロックのうち、後述するユーザ領域を含むブロックに割り当てられる論理ブロックアドレスを表す情報を含むデータである。
【００２７】
論理ブロックアドレスは、フラッシュメモリ５がデバイスドライバの処理に従って読み書きされるときに、制御部１により、データ読み書きの単位として認識される単位である。論理ブロックアドレスが割り当てられているブロックの総量は、フラッシュメモリ５が物理的に備えるブロックの総量より小さく、フラッシュメモリ５のユーザが後述のユーザデータを記憶させるために確保したいブロックの量より大きい量とする。例えば、ユーザデータを記憶させるために確保したいブロックの量が１０００個であれば、論理ブロックアドレスが割り当てられるブロックの総量は、１００１個であればよい。
【００２８】
フラッシュメモリＩ／Ｆ４は、制御部１によるフラッシュメモリ５へのアクセスを媒介する。具体的には、フラッシュメモリＩ／Ｆ４は、例えば、制御部１が制御コードやデバイスドライバの制御に従って発する指示に従い、制御部１が供給するデータをフラッシュメモリ５の記憶領域に格納する。また、例えば、制御部１が制御コードやデバイスドライバの制御に従って発する指示に従い、制御部１が供給するデータをフラッシュメモリ５から読み出して制御部１に供給する。
【００２９】
フラッシュメモリ５は、ＮＡＮＤ型のフラッシュメモリより構成され、複数のメモリセルを備えている。各メモリセルは、１バイトの記憶容量を有する。これらのメモリセルは、論理的には、図２に示すように、縦１３１０７２行、横５２８列のマトリクス状に配置されている。従って、フラッシュメモリ５は全体としてはほぼ６６メガバイトの記憶容量を有する。
【００３０】
フラッシュメモリ５は、フラッシュメモリＩ／Ｆ４を介して制御部１よりデータの読み出しを指示されると、読み出しを指示された行のデータを、先頭からメモリセル１個分（すなわち、１バイト）ずつ５２８回に分けて読み出し、フラッシュメモリＩ／Ｆ４を介し制御部１へと順次供給する。
一方、フラッシュメモリＩ／Ｆ４を介して制御部１よりデータの書き込みを指示されると、書き込みを指示された行に、制御部１からフラッシュメモリＩ／Ｆ４を介して供給された書き込み対象のデータを、先頭の１バイトから１バイトずつ５２８回に分けて記憶する。
【００３１】
また、フラッシュメモリ５は、フラッシュメモリＩ／Ｆ４を介して制御部１より、特定のブロックの記憶内容を消去するよう指示されると、当該ブロックに含まれるすべてのメモリセルの記憶内容をリセットする（具体的には、各メモリセルの記憶値を「１」とする）。
【００３２】
図２に示すように、メモリセルのマトリクスの各行は５２８バイトの記憶容量を有するページを構成する。各ページに含まれるメモリセルには、連続的に１から５２８までの番地が与えられている。
また、各ページは、先頭から３２ページ単位で１つのブロックを構成する。各ブロックは８キロバイトの記憶容量を有し、記憶領域全体は、４０９６個のブロックから構成されている。各々のブロックに属するページには、連続的に１から３２までのページアドレスが与えられている。
【００３３】
そして、フラッシュメモリ５の各ブロックは、各々が１０２４個のブロックを含む４個のゾーン（ゾーン１〜ゾーン４）へと更に分類されている。各々のゾーンに属するブロックには、連続的に１から１０２４までの物理ブロックアドレスが与えられている。ゾーン１、ゾーン２、ゾーン３、及びゾーン４には、順に、１、２、３及び４のゾーンアドレスが与えられている。
【００３４】
また、各ページは、図２に示すように、先頭から５１２バイトの領域を占めるデータ領域と、末尾１６バイトを占める冗長部とから構成される。データ領域には、このフラッシュメモリドライブ装置のユーザが利用するユーザデータ、又は、デバイスドライバが格納される。
【００３５】
一方、各々のページの冗長部には、当該ページのデータ領域に格納されているデータ（ユーザデータ又はデバイスドライバ）の内容が破壊されていないことを確認するためのエラーチェックコードが格納され、更に、このページが属するブロックに割り当てられている論理ブロックアドレスと、エラーフラグと、システムフラグとが、予め格納される。
【００３６】
エラーフラグは、このエラーフラグが格納されているブロックが、データを正常に格納可能なブロック（良品ブロック）であるか、良品ブロックでないブロックすなわち不良ブロックであって、フラッシュメモリ５の製造者等によって出荷前に不良と判断されたブロック（初期不良ブロック）であるか、不良ブロックであって、フラッシュメモリ５の使用中にデータの正常な格納ができないと判断された（又は、デバイスドライバを格納するために用いるものとされた）ブロック（後発不良ブロック）であるか、を示すデータである。
【００３７】
システムフラグは、このシステムフラグが格納されているページのデータ領域が、デバイスドライバを構成するデータを格納するデータ領域（ファームウェア領域）であるか、ユーザデータを格納するデータ領域（ユーザ領域）であるかを示すデータである。ファームウェア領域は、本願発明におけるプログラム構成データを格納する記憶領域に相当する。
なお、ファームウェア領域は、上述の通り、後発不良ブロックの記憶領域内に確保されている。
【００３８】
入出力部６は、キーボード、マウス、記録媒体からのデータの読み出しを行う記録媒体ドライバ（例えば、フロッピーディスクドライブ装置やＭＯ（Ｍａｇｎｅｔｏ  Ｏｐｔｉｃａｌ  ｄｉｓｋ）ドライブ装置）等を備える入力部と、液晶ディスプレイや、記録媒体へのデータの書き込みを行う記録媒体ドライバ等を備える出力部とを含んでいる。
なお、単一の記録媒体ドライバが入力部及び出力部の両方を構成していても差し支えない。また、双方向のデータ伝送が可能なバスを介してデータ伝送を行うインタフェース回路（例えばＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）のインターフェース回路や、ＩＥＥＥ（Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｅｌｅｃｔｒｉｃａｌ  ａｎｄ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｅｎｇｉｎｅｅｒｓ）１３９４バスのインターフェース回路）が、入力部及び出力部の両方の機能を行うようにしてもよい。
また、入力部は、音声を集音しあるいは音声を表すデータを外部から取得して、これらの音声を表すＭＰ３（ＭＰＥＧ１  ａｕｄｉｏ  ｌａｙｅｒ  ３）形式のデータを作成するＭＰ３エンコーダを備えていてもよい。また、出力部は、ＭＰ３形式のデータを内部バスＢＵＳを介して制御部１より取得して、このＭＰ３形式のデータが表す音声を再生しあるいはこの音声を表す他の形式のデータを作成するＭＰ３デコーダを備えていてもよい。
【００３９】
入出力部６は、操作者の操作に従ったデータを制御部１に供給し、あるいは、自己に装着された記録媒体からデータを読み取って、読み取ったデータを制御部１に供給する。また、入出力部６は、制御部１が供給する指示に従ったデータを出力する。（具体的には、当該データを表示したり、あるいは記録媒体に書き込んだりする）。
【００４０】
（動作）
次に、このフラッシュメモリドライブ装置の処理を、図３を参照して説明する。図３は、制御コードの処理を示すフローチャートである。
【００４１】
このフラッシュメモリドライブ装置に電源電力が投入されると、制御部１はまず、ユーザロジック部２のブート用ＲＯＭ２１にアクセスし、ブート用ＲＯＭ２１の記憶領域に格納されている制御コードを読み出して、図３に示す制御コードの処理を実行する。
【００４２】
制御コードの処理を開始すると、制御部１は、ステップＳ１０１で、カウンタ用の変数Ｚ、変数Ｂ及び変数Ｐの使用を宣言し（すなわち、変数Ｚ、変数Ｂ及び変数Ｐの値を格納するための記憶領域を主記憶部３のデータ格納用領域３２内に確保し）、変数Ｚ、変数Ｂ及び変数Ｐに初期値「０」を代入する（すなわち、変数Ｚの値を格納する記憶領域に値０を格納し、変数Ｂの値を格納する記憶領域と、変数Ｐの値を格納する記憶領域とにも、それぞれ、値０を格納する）。
【００４３】
次に、制御部１は、ステップＳ１０２で変数Ｚをインクリメントし（すなわち、変数Ｚの値を格納する記憶領域に格納されている値を１だけ増加させ）、次いで変数Ｂもインクリメントし（ステップＳ１０３）、次いで変数Ｐもインクリメントする（ステップＳ１０４）。
【００４４】
次に、制御部１は、変数Ｚの現在の値に相当するゾーンに含まれるページのうち、変数Ｂの現在の値に相当する物理ブロックアドレスを与えられたブロックに含まれ、且つ、変数Ｐの現在の値に相当するページアドレスを与えられたページに格納されている５２８バイトのデータを、シーケンシャルに（すなわち、番地が大きい順に、又は、番地が小さい順に）読み出して、主記憶部３のデータ格納用領域３２に一時記憶する（ステップＳ１０５）。
【００４５】
次に、制御部１は、ステップＳ１０５でもっとも新しく読み出したデータに含まれるエラーフラグの値に基づき、データを読み出したページが初期不良ページ（初期不良ブロック内のページ）であるか否かを判別する（ステップＳ１０６）。そして、このページが初期不良ページであると判別すると、制御部１は、後述のステップＳ１１０に処理を進める。
一方、初期不良ページでないとステップＳ１０６で判別すると、制御部１は、ステップＳ１０５でもっとも新しく読み出したデータに含まれるエラーフラグの値に基づき、データを読み出したページが後発不良ページ（後発不良ブロック内のページ）であるか否かを判別する（ステップＳ１０７）。そして、このページが後発不良のページでないと判別すると、制御部１は、ステップＳ１１０に処理を進める。
【００４６】
一方、後発不良のページであるとステップＳ１０７で判別すると、制御部１は、ステップＳ１０５でもっとも新しく読み出したデータに含まれるシステムフラグの値に基づき、データを読み出したページがファームウェア領域であるかユーザ領域であるかを判別する（ステップＳ１０８）。そして、このページがユーザ領域であると判別すると、制御部１はステップＳ１１０に処理を進める。
【００４７】
一方、ファームウェア領域であるとステップＳ１０８で判別すると、制御部１は主記憶部３の命令格納用領域３１にアクセスし、ステップＳ１０５でもっとも新しく読み出したページのデータのうち、先頭の５１２バイトを命令格納用領域３１に格納する（ステップＳ１０９）。ステップＳ１０９で命令格納用領域３１に格納されるデータは、上述のデバイスドライバを構成するデータである。
【００４８】
次に、制御部１は、ステップＳ１０５でもっとも新しくデータを読み出したページが、このページが属するブロックの最終ページであるか否かを、例えば変数Ｐの現在の値に基づいて判別する（ステップＳ１１０）。そして、最終ページでないと判別すると、処理をステップＳ１０４に戻す。
【００４９】
一方、最終ページであると判別すると、制御部１は、変数Ｐの値を「０」へと書き換える（ステップＳ１１１）。次いで、制御部１は、ステップＳ１０５でもっとも新しくデータを読み出したページが属するブロックが、このブロックが属するゾーンの最終ブロックであるか否かを、例えば変数Ｂの現在の値に基づいて判別する（ステップＳ１１２）。そして、最終ブロックでないと判別すると、処理をステップＳ１０３に戻す。
【００５０】
一方、最終ブロックであると判別すると、制御部１は、変数Ｂの値を「０」へと書き換える（ステップＳ１１３）。次いで、制御部１は、ステップＳ１０５でもっとも新しくデータを読み出したブロックが属するゾーンが、フラッシュメモリ５の記憶領域が備えるゾーンのうちの最終ゾーンであるか否かを、例えば変数Ｚの現在の値に基づいて判別する（ステップＳ１１４）。そして、最終ゾーンでないと判別すると、処理をステップＳ１０２に戻す。
【００５１】
一方、最終ゾーンであると判別すると、制御部１は制御コードの処理を終了する。そして、命令格納用領域３１にアクセスし、ステップＳ１０９で格納したデータより構成されるデバイスドライバを読み出して実行する。
【００５２】
デバイスドライバの処理を開始した制御部１は、例えば特開２０００−３０５８３９や特開２０００−０１１６７７に開示されているような手法で、フラッシュメモリ５の各ブロックの冗長部に格納されている論理ブロックアドレスの内容に基づいて空きブロックテーブル及びアドレス変換テーブルを作成し、主記憶部３のデータ格納用領域３２に格納する。空きブロックテーブル及びアドレス変換テーブルを作成すると、制御部１は、フラッシュメモリ５へアクセスしてデータの読み書きを行ったり、ブロックの記憶内容の消去を行ったり、読み出したデータをデータ格納用領域３２に格納したりすることにより、フラッシュメモリ５への１バイト単位のランダムアクセスを擬似的に実現する。
デバイスドライバの処理に従ったフラッシュメモリ５へのデータの書き込みあるいは書き換えや、フラッシュメモリ５が記憶するデータの読み出しを行う場合、書き込み、書き換えあるいは読み出しの対象となるデータのある記憶領域は、論理ブロックアドレスに基づいて特定される。
【００５３】
具体的には、例えば、入出力部６から論理ブロックアドレス、ページアドレス、データ番地、及びデータ読み出しの指示が供給されたとき、制御部１は、この指示に応答してアドレス変換テーブルを検索し、入出力部６から供給された論理ブロックアドレスに対応付けられている物理ブロックアドレスを特定する。次に、特定した物理ブロックアドレス及び入出力部６から供給されたページアドレスにより特定されるページにアクセスして、このページの記憶内容の先頭５１２バイトを読み出し、主記憶部３のデータ格納用領域３２に一時記憶する。次に、制御部１は、データ格納用領域３２に一時記憶した５１２バイトのデータのうち、入出力部６から供給されたデータ番地により特定される記憶領域に格納されたデータを特定し、入出力部６に、特定したデータの出力を指示する。入出力部６は、特定されたこのデータを出力する。
【００５４】
一方、例えば、入出力部６から、データ書き換えの指示と、書き換える対象のデータの論理ブロックアドレス、ページアドレス、データ番地、及び、書き換え後の内容が供給されたとき、デバイスドライバの処理を行う制御部１は、データ書き換えの指示に応答して空きブロックテーブルを検索して、空きブロックを特定する。次に、制御部１は、入出力部６から供給された論理ブロックアドレスに対応付けられている物理ブロックアドレスを特定し、特定した物理ブロックアドレス及び入出力部６から供給されたページアドレスにより特定されるページの記憶内容を読み出してデータ格納用領域３２に一時記憶する。次に、データ格納用領域３２に一時記憶されているデータのうち、入出力部６から供給されたデータ番地により特定されるデータを、入出力部６から供給された書き換え後の内容と同じになるように書き換える。
【００５５】
次に、制御部１は、書き換える対象のデータを含むブロック内のデータを、自ら特定した空きブロックにシーケンシャルに書き込む。ただし、書き換える対象のデータを含むページ内のデータは書き込まず、このページ内のデータに代えて、データ格納用領域３２に一時記憶して書き換えたデータを書き込む。そして、書き換え前のデータが記憶されているブロックの記憶内容を一括して消去し、消去したブロック内の各ページの冗長部に、このブロックがユーザ領域であることを表すシステムフラグを書き込む。
なお、消去時に消去エラーが発生した場合、又は、書き込み時に書き込みエラーが発生した場合は、これらのエラーを発生させたブロック内の各ページの冗長部に、このブロックが後発不良ブロックであることを表すエラーフラグを書き込むものとする。そして、空きブロックテーブルを再度検索して更に空きブロックを特定し、書き換える対象のデータを含むブロック内のデータを、再度の検索により特定された空きブロックに書き込むものとする。
【００５６】
次に、制御部１は、空きブロックテーブルの内容を、記憶内容を新たに消去されたブロックが空きブロックであることを表し書き換え後のデータが空きブロックでないことを表すように変更する。また、アドレス変換テーブルの内容を、書き換え後のデータが記憶されているブロックの物理ブロックアドレスが、入出力部６から供給された論理ブロックアドレスに対応付けられるように変更する。
【００５７】
なお、このフラッシュメモリドライブ装置の構成は上述のものに限られない。例えば、フラッシュメモリ５の各ブロックの大きさは上述の大きさに限られない。例えば、各ブロックは３２ページから構成される必要はなく、例えば、各ページの大きさの整数倍であればよい。また、フラッシュメモリ５が備えるブロックの数や、ゾーンの数や、１ページあたりのメモリセルの数も任意である。
【００５８】
また、このフラッシュメモリドライブ装置は、ブート用ＲＯＭ２１に代えて、ＲＡＭ等からなり外部から制御コードをシリアルに入力して記憶する一時記憶装置を備えるようにしてもよい。この場合、制御コードを記憶した一時記憶装置が、ブート用ＲＯＭ２１の機能を行えばよい。
【００５９】
また、制御部１がフラッシュメモリＩ／Ｆ４の機能を行ってもよい。
また、上述のステップＳ１０１で変数Ｚや変数Ｂや変数Ｐに代入する初期値は、必ずしも「０」である必要はなく、例えば、フラッシュメモリ５の末尾のゾーンのゾーンアドレスを変数Ｚの初期値としてもよいし、末尾のブロックのブロックアドレスを変数Ｂの初期値としてもよい。
また、変数Ｚや変数Ｂや変数Ｐをインクリメントする代わりにデクリメントする（すなわち、変数Ｚや変数Ｂや変数Ｐの値を格納する記憶領域に格納されている値を１だけ減少させる）ことも差し支えない。
例えばデバイスドライバが、制御部１に、プログラム等のデータを先頭のゾーンの先頭のブロックから順に格納させるようなプログラムである場合、フラッシュメモリ５がこのデバイスドライバを末尾のゾーンの末尾付近のブロックに予め格納し、末尾のゾーンのゾーンアドレスを変数Ｚの初期値とし、末尾のブロックのブロックアドレスを変数Ｂの初期値とし、末尾のページのページアドレスを変数Ｐの初期値として、制御コードの処理において変数Ｚや変数Ｂや変数Ｐをインクリメントする代わりにデクリメントするようにすれば、変数Ｚや変数Ｂや変数Ｐの初期値を「０」として制御コードの処理で変数Ｚや変数Ｂや変数Ｐをインクリメントする場合に比べ、主記憶部２へのデバイスドライバの転送が迅速になる。
また、上記実施の形態では、フラッシュメモリ５は、ＮＡＮＤ型のものによって構成されていたが、ＡＮＤ型のものによっても構成することはできる。
【００６０】
また、ステップＳ１０５で、制御部１は、変数Ｚ、変数Ｂ及び変数Ｐの現在の値に相当するページに格納されているデータすべてを読み出す必要はなく、末尾１６バイトのデータだけを読み出してデータ格納用領域３２に一時記憶するようにしてもよい。
この場合、制御部１は、ステップＳ１０９で、命令格納用領域３１に代えて、ステップＳ１０５でもっとも新しくデータを読み出したフラッシュメモリ５のページに再びアクセスし、このページのデータのうち先頭の５１２バイトを読み出して、命令格納用領域３１に格納するようにすればよい。
【００６１】
以上、この発明の実施の形態を説明したが、この発明の記憶装置は、専用のシステムによらず、通常のコンピュータシステムを用いて実現可能である。フラッシュメモリが接続されたコンピュータに上述の制御部１、ユーザロジック部２、主記憶部３、フラッシュメモリＩ／Ｆ４及び入出力部６の動作を実行するためのプログラムを格納した媒体（フロッピーディスク、ＣＤ−ＲＯＭ等）から当該プログラムをインストールすることにより、上述の処理を実行するフラッシュメモリドライブ装置を構成することができる。
【００６２】
また、例えば、通信ネットワークの掲示板（ＢＢＳ）に当該プログラムを掲示し、これを通信回線を介して配信してもよく、また、当該プログラムを表す信号により搬送波を変調し、得られた変調波を伝送し、この変調波を受信した装置が変調波を復調して当該プログラムを復元するようにしてもよい。
そして、当該プログラムを起動し、ＯＳの制御下に、他のアプリケーションプログラムと同様に実行することにより、上述の処理を実行することができる。
【００６３】
なお、ＯＳが処理の一部を分担する場合、あるいは、ＯＳが本願発明の１つの構成要素の一部を構成するような場合には、記録媒体には、その部分を除いたプログラムを格納してもよい。この場合も、この発明では、その記録媒体には、コンピュータが実行する各機能又はステップを実行するためのプログラムが格納されているものとする。
【００６４】
【発明の効果】
以上説明したように、この発明によれば、簡単な構成で、シーケンシャルにデータを読み出す記憶装置に格納されたランダムアクセスを要するプログラムの処理を実行することができる記憶装置及び記憶装置制御方法が実現される。
【図面の簡単な説明】
【図１】この発明の実施の形態にかかるフラッシュメモリドライブ装置の基本構成を示すブロック図である。
【図２】フラッシュメモリの記憶領域の論理的構造を示す図である。
【図３】制御コードの処理を示すフローチャートである。
【符号の説明】
１      制御部
２      ユーザロジック部
２１      ブート用ＲＯＭ
３      主記憶部
３１      命令格納用領域
３２      データ格納用領域
４      フラッシュメモリＩ／Ｆ
５      フラッシュメモリ
６      入出力部
【図１】
0003574078.tif 000002
【図２】
0003574078.tif 000003
【図３】
0003574078.tif 000004