(57)【要約】【課題】フラッシュメモリのメモリ容量を消費することなくリード専用のデータを有効に保護することができるフラッシュメモリ制御システムおよび制御方法を提供する。【解決手段】フラッシュメモリ制御システムは、フラッシュメモリ１１４のデータ領域１１４に仮想機能としてのリードライト部１１７と仮想機能としてのリード専用部１１８とが設けられ、リードライト部１１７にアクセスするためのリードライト部ドライバ１０８と、リード専用部１１８にアクセスするためのリード専用部ドライバ１０９と、データのリードあるいはライト指示をいずれかのドライバへ送るエイリアス部１０６と、を有し、リード専用部ドライバ１０９はリード指示に対してのみリード専用部１１８へのアクセスを実現する。【選択図】  図１
2009211245.tif 000002
【特許請求の範囲】
【請求項１】
フラッシュメモリの制御システムにおいて、
前記フラッシュメモリのデータ領域に、仮想機能としてのリードライト部と仮想機能としてのリード専用部とが設けられ、
前記リードライト部にアクセスするための第１仮想ドライバと、
前記リード専用部にアクセスするための第２仮想ドライバと、
データのリードあるいはライト指示を前記第１および第２仮想ドライバのいずれか一方へ送る切替手段と、
を有し、前記第２仮想ドライバはリード指示に対してのみ前記リード専用部へのアクセスを実現することを特徴とするフラッシュメモリ制御システム。
【請求項２】
前記リードライト部と前記リード専用部とは、前記フラッシュメモリの消去単位で区切られており、前記リードライト部でのデータ書き込みおよび消去が前記リード専用部へ影響しない構造を有することを特徴とする請求項１に記載のフラッシュメモリ制御システム。
【請求項３】
アプリケーションで扱うファイルとセクタとの変換を行うファイルシステムを更に有し、前記リードライト部は前記ファイルシステムにより管理され、前記リード専用部は前記ファイルシステムの管理外であることを特徴とする請求項１または２に記載のフラッシュメモリ制御システム。
【請求項４】
フラッシュメモリを有する情報処理装置において、
前記フラッシュメモリのデータ領域に設けられた仮想機能としてのリードライト部にアクセスするための第１仮想ドライバと、
前記データ領域に設けられた仮想機能としてのリード専用部にアクセスするための第２仮想ドライバと、
データのリードあるいはライト指示を前記第１および第２仮想ドライバのいずれか一方へ送る切替手段と、
を有し、前記第２仮想ドライバはリード指示に対してのみ前記リード専用部へのアクセスを実現することを特徴とする情報処理装置。
【請求項５】
前記リードライト部と前記リード専用部とは、前記フラッシュメモリの消去単位で区切られており、前記リードライト部でのデータ書き込みおよび消去が前記リード専用部へ影響しない構造を有することを特徴とする請求項４に記載の情報処理装置。
【請求項６】
アプリケーションで扱うファイルとセクタとの変換を行うファイルシステムを更に有し、前記リードライト部は前記ファイルシステムにより管理され、前記リード専用部は前記ファイルシステムの管理外であることを特徴とする請求項４または５に記載の情報処理装置。
【請求項７】
フラッシュメモリを有する情報処理装置のフラッシュメモリ制御方法において、
前記フラッシュメモリのデータ領域に設けられた仮想機能としてのリードライト部にアクセスするための第１仮想ドライバを生成し、
前記データ領域に設けられた仮想機能としてのリード専用部にアクセスするための第２仮想ドライバを生成し、
データのリードあるいはライト指示を前記第１および第２仮想ドライバのいずれか一方へ送り、
前記第２仮想ドライバがリード指示に対してのみ前記リード専用部へのアクセスを提供する、
ことを特徴とするフラッシュメモリ制御方法。
【請求項８】
前記リードライト部と前記リード専用部とは、前記フラッシュメモリの消去単位で区切られており、前記リードライト部でのデータ書き込みおよび消去が前記リード専用部へ影響しない構造を有することを特徴とする請求項７に記載のフラッシュメモリ制御方法。
【請求項９】
アプリケーションで扱うファイルとセクタとの変換を行うファイルシステムを更に有し、前記リードライト部は前記ファイルシステムにより管理され、前記リード専用部は前記ファイルシステムの管理外であることを特徴とする請求項７または８に記載のフラッシュメモリ制御方法。
【請求項１０】
フラッシュメモリを有する情報処理装置としてコンピュータを機能させるプログラムにおいて、
前記フラッシュメモリのデータ領域に設けられた仮想機能としてのリードライト部にアクセスするための第１仮想ドライバと、
前記データ領域に設けられた仮想機能としてのリード専用部にアクセスするための第２仮想ドライバと、
データのリードあるいはライト指示を前記第１および第２仮想ドライバのいずれか一方へ送る切替手段と、
を有し、前記第２仮想ドライバがリード指示に対してのみ前記リード専用部へのアクセスを実現するように前記コンピュータを機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はフラシュメモリを有する情報処理装置に係り、特にフラッシュメモリの制御方法および制御システムに関する。
【背景技術】
【０００２】
一般に、フラッシュメモリは１つ以上のフラッシュメモリデバイスで構成され、フラッシュメモリデバイスは、内部の管理単位として、ブロック、 ページ、 セクタ等の単位を有する。１つのブロックの中に複数のページが含まれ、１つのページに複数のセクタが含まれる。セクタは情報処理装置が扱う単位であり、ブロックおよびページはフラッシュメモリのイレ−ス単位である。
【０００３】
図８は、フラッシュメモリの一般的な論理的構造を示す模式図である。ここでは、中央処理装置ＣＰＵ８０１がフラッシュメモリ８０２を制御するものとする。フラッシュメモリ８０２は、図示するようにデータ領域８０３とスペア領域８０４とに論理的に分けられている。後述するように、１つのブロック（またはページ）は、そのときの状態に応じて、スペア領域８０４かデータ領域８０３のどちらかに属する。ＣＰＵ８０１のアプリケーションは、データ領域８０３に属するブロックを読み込むことはできるが、スペア領域に属するブロックを読み取ることはできない。
【０００４】
データ領域８０３とスペア領域８０４との間ではブロック(またはページ)の移動がある。この移動は、フラッシュメモリのイレ−ス可能な回数が少ないので、フラッシュメモリ全体を順繰りに使って特定の部分が壊れないようにする仕組みである。この仕組みはフラッシュメモリの使用できる容量を減らさない書き込み仕様として一般的なものである。
【０００５】
ブロック(またはページ)の移動はセクタ内容の更新をするときに発生する。以下、図８に示すように、ＣＰＵ８０１がブロックａのセクタi+1の内容を更新する際、データ領域８０３とスペア領域８０４との間で発生するブロックの移動について簡単に説明をする。
【０００６】
図９はセクタ内容の更新およびブロック移動の通常の手順を説明するための説明図である。最初にスペア領域８０４のブロックｂのデータを削除し、全て消えたことを確認する（ステップ９−１）。 続いて、データ領域８０３にあるブロックａ内の更新しないセクタi, i+2, …, i+mのデータをブロックｂにコピ−し（ステップ９−２）、更新するデータのセクタi+１’をブロックｂに書込む（ステップ９−３）。
【０００７】
次に、いままで使用していたブロックａを未使用に変更してスペア領域８０４のブロックとして扱うとともに（ステップ９−４）、スペア領域８０４にあって書込が行われたブロックｂをデータ領域８０３のブロックとして扱う（ステップ９−５）。こうしてＣＰＵ８０１のアプリケーションは、セクタi+1’が更新されたブロックｂをデータ領域８０３のデータとして読み取ることが可能となる。
【０００８】
ところで、このようなデータの書込み中に情報処理装置の電源がＯＦＦになると、データ書込み処理は、通常、装置内に残った電力によって実行されるが、その際、ステップ９−４まで実行されて停止する可能性がある。ステップ９−４は、いままで使用していたブロックａを未使用に変更した直後に電源が切れた状態であるから、データ領域８０３には有効なデータの入ったブロックがなくなっている。この状態では、有効なデータが入ったブロックがブロックａなのかブロックｂなのか、あるいはそれ以外なのかを判別することができない。そこで、このような電源断発生時のデータの消失あるいは破壊を防止しようとする技術がいくつか提案されている。
【０００９】
特許文献１に開示されたフラッシュメモリの管理方法では、スペア領域に論理アドレスを記録しておくことで、フラッシュメモリの更新中に電源断されてもスペア領域に存在する論理アドレスによりアドレス変換テ−ブルを容易に復元することができる。これによって上述したデータ化けやデータロストを回避することが可能となる。
【００１０】
特許文献２に開示されたメモリシステムでは、簡易のライトバックキャッシュと補助電源とを設け、電源の供給がなくなったときにキャッシュからフラッシュメモリに対して確実にデータを書込みができるようにする。
【００１１】
【特許文献１】特開２００３−１６７７９５号公報
【特許文献２】特開平１０−２４０６３３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１２】
しかしながら、特許文献１に開示された方法では、論理アドレスを記憶する領域などが必要となってフラッシュメモリ内部のメモリ消費量が多くなり、コストも高くなる。また、未使用になったデータ領域やスペア領域の回収・再利用に工夫が必須となるので、更新するデータ量に依って性能が低下する可能性がある。
【００１３】
また特許文献２に開示されたメモリシステムでは、キャッシュおよび補助電源というハ−ドウエア回路を追加するために、一般的なフラッシュメモリよりも部品が多くなり、コストも高いものとなる。
【００１４】
また、特許文献１および２に開示された方法では、ライト（書込）不可のリード専用データを考慮した管理を行っていないために、セキュリティの面で十分でない。たとえば、図９に示すステップ９−４の場合、更新されたセクタi+1に続くセクタi+2のデータがリード専用のデータであった場合、アプリケーションからは、データ更新に全く関係のないリード専用ファイルの一部がロストしたように見える。
【００１５】
リード専用に使われるデータはソフトウエアやシステムデータ等の重要なデータであることも多いため、このデータが化けたりロストしたりすることは、情報処理装置が動かなくなる、ソフトウエアが正常に動作できなくなる、あるいはソフトウエアが起動できなくなる等の問題を引き起こす可能性が高くなる。
【００１６】
そこで、本発明の目的は、フラッシュメモリのメモリ容量を消費することなくリード専用のデータを有効に保護することができるフラッシュメモリ制御システムおよび制御方法を提供することにある。
【課題を解決するための手段】
【００１７】
本発明によるフラッシュメモリ制御システムは、フラッシュメモリのデータ領域に仮想機能としてのリードライト部と仮想機能としてのリード専用部とが設けられ、前記リードライト部にアクセスするための第１仮想ドライバと、前記リード専用部にアクセスするための第２仮想ドライバと、データのリードあるいはライト指示を前記第１および第２仮想ドライバのいずれか一方へ送る切替手段と、を有し、前記第２仮想ドライバはリード指示に対してのみ前記リード専用部へのアクセスを実現することを特徴とする。
【発明の効果】
【００１８】
本発明によりフラッシュメモリのメモリ容量を消費することなくリード専用のデータを有効に保護することができる。
【発明を実施するための最良の形態】
【００１９】
１．一実施形態
１．１）構成
図１は本発明の一実施形態によるフラッシュメモリ制御システムを適用した情報処理装置の概略的構成を示すブロック図である。情報処理装置１０１はＣＰＵ１０２および外部メモリ１０３を有する。ＣＰＵ１０２は、アプリケーション、ドライバおよびＯＳ(Operating System)を実行するプログラム制御プロセッサであり、外部メモリ１０３はＣＰＵ１０２と外部バスで接続された外部記憶装置であり、アプリケーションやＯＳ等のプログラム、アプリケーションが使用するデータやシステムデータなどを格納する。
【００２０】
ＣＰＵ１０２は内部メモリ１０４を含み、内部メモリ１０４は、アプリケーション１０５、エイリアス部１０６、ファイルシステム１０７、リードライト部ドライバ１０８、リード専用部ドライバ１０９、バスドライバ１１０、およびローダ１１１を含み、ローダ１１１はローダ・リード専用部アクセスデータ部１１２を含む。
【００２１】
外部メモリ１０３は、制御ソフト１１３およびフラッシュメモリ１１４を含み、フラッシュメモリ１１４はデータ部１１５およびスペア部１１６を含む。データ部１１５はリードライト部１１７とリード専用部１１８とを含み、互いに影響を与えないようにレイアウトされている。すなわち、リードライト部１１７とリード専用部１１８とはフラッシュメモリの消去単位であるブロックまたはページ単位で区切られていて、リードライト部１１７とリード専用部１１８とに跨ったブロックあるいはページが存在しない構造を有している。
【００２２】
内部メモリ１０４におけるアプリケーション１０５は、情報処理装置１０１の目的および用途に従って設けられたモジュールである。
【００２３】
エイリアス部１０６は、アプリケーション１０５からリード（読込み）あるいはライト（書込み）を指示されたファイルのファイル名を変換することによって、リードライト部ドライバ１０８あるいはリード専用部ドライバ１０９のいずれを経由してファイルをアクセスすべきかをファイルシステム１０７に対して指示をするパス切替機能を有する。ファイルシステム１０７は、アプリケーション１０５の扱うファイルをセクタに分解したり、逆にセクタを１つのファイルにまとめたりする機能を有する。
【００２４】
ファイルシステム１０７、リードライト部ドライバ１０８およびリード専用部ドライバ１０９により、リードライト部１１７とリード専用部１１８とを別々の仮想外部メモリとしてアプリケーション１０５に提供することができる。また、ＣＰＵ１０２から見える論理構造としては、リードライト部１１７はファイルシステム１０７で管理され、リード専用部１１８はファイルシステム１０７の管理外に存在する。
【００２５】
リードライト部ドライバ１０８は、ファイルシステム１０７からの指示をバスドライバ１１０に渡す機能を有する。
【００２６】
リード専用部ドライバ１０９は、ファイルシステム１０７からのリード指示のアドレスを変換する機能と、ファイルシステム１０７からのライト指示に対してエラーを返す機能と、リード専用部１１８からの読み取り情報を返す機能とを有する。
【００２７】
バスドライバ１１０は外部メモリ１０３とＣＰＵ１０２との間のバス制御を実行し、リードライト部ドライバ１０８やリード専用部ドライバ１０９からのリード／ライトの指示を外部メモリ１０３に伝える機能を有する。
【００２８】
ローダ１１１は、情報処理装置１０１が起動したときに動作し、ローダ・リード専用部アクセスデータ部１１２からリード専用部１１８にアクセスするための情報を読み出し、リード専用部１１８から読み出したＯＳやアプリケーションを内部メモリ１０４に展開し、制御を渡す機能を有する。
【００２９】
外部メモリ１０３は、ＣＰＵ１０２の内部メモリ１０４に存在するローダ１１１以外のソフトウエア、すなわちアプリケーション１０５、エイリアス部１０６、ファイルシステム１０７、リードライト部ドライバ１０８、リード専用部１０９、およびバスドライバ１１０のソフトウエアを格納し、各ソフトウエアが使用するデータも格納されている。
【００３０】
外部メモリ１０３に含まれる制御ソフト１１３は、バスドライバ１１０が外部メモリ１０３に通知したデータのアドレスをフラッシュメモリ１１４内部のアドレスに変換し、フラッシュメモリ１１４に対するデータのリード／ライトを行う機能を有する。具体的には、図９で説明したように、スペア部１１６のブロック初期化、スペア部１１６のブロックへの更新データの書込み、データ部１１５にあった元ブロックのスペア部１１６への移動、および新たに書込みしたスペア部１１６のブロックのデータ部１１５への移動などの制御を行う。
【００３１】
なお、データ部１１５に存在するリードライト部１１７とリード専用部１１８とは、仮想モジュ−ルであり、データを保持する機能と、制御ソフト１１３の指示により書込みされたデータを保持する機能を有す。
【００３２】
なお、図１において、通常のフラッシュメモリ制御システムとは異なる構成要素は、エイリアス部１０６、リード専用部ドライバ１０９、ローダ・リード専用部アクセスデータ部１１２およびリード専用部１１８である。
【００３３】
図２は本実施形態で用いられるフラッシュメモリの内容を模式的に示す図である。図２において、フラッシュメモリ１１４の内容２０１は、データ部１１５の内容２０２とスペア部１１６の内容２０３とを含み、データ部内容２０２はリードライト部１１７の内容２０４とリード専用部１１８の内容２０５とを含む。
【００３４】
リードライト部内容２０４は、マスタブートレコード２０６、ファイルシステム管理エリア内容２０７およびスペアセクタ２０８を含み、ファイルシステム管理エリア内容２０７はパーティション情報２０９、ＦＡＴ２１０およびファイルシステムデータ部２１１を含む。リード専用部内容２０５はＯＳファイル２１２、アプリケーションファイル２１３およびシステムデータファイル２１４を含む。
【００３５】
ＯＳファイル２１２は、エイリアス部１０６、ファイルシステム１０７、リードライト部ドライバ１０８、リード専用ドライバ１０９、バスドライバ１１０等のドライバを含むＯＳが格納されるエリアである。アプリケーションファイル２１３は、アプリケーション１０５およびアプリケーションのリード専用データが格納されるエリアである。システムデータファイル２１４は、情報処理装置全体のシステム情報が格納されているエリアである。
【００３６】
なお、マスタブートレコード２０６、ファイルシステム管理エリア内容２０７、スペアセクタ２０８、パーティション情報２０９、ＦＡＴ２１０およびファイルシステムデータ部２１１については、本発明に直接関係しない上に周知でもあるので詳細は省略する。
【００３７】
１．２）動作
上述したように、本実施形態によるシステムでは、フラッシュメモリ１１４におけるデータ部１１５のリードライト部１１７とリード専用部１１８とは、フラッシュメモリの消去単位であるブロックまたはページ単位で区切られており、互いに影響を与えないようにレイアウトされている。このようにレイアウトされたリードライト部１１７とリード専用部１１８とは、次のように制御される。
【００３８】
まず、アプリケーション１０５がデータの読込みをする場合、エイリアス部１０６は読み込みするデータがフラッシュメモリ１１５のリードライト部１１７に存在するのかリード専用部１１８に存在するのか判定し、その判定結果にしたがってファイルシステム１０７に対してリード指示を行う。ファイルシステム１０７は指示されたドライバに対してリード指示を送る。
【００３９】
リードライト部ドライバ１０８がリード指示を受け取れば、バスドライバ１１０を通して制御ソフト１１３にリード指示を出力し、制御ソフト１１３は指示に該当する内容をリードライト部１１７から読み出してＣＰＵ側へ返す。
【００４０】
リード専用部１１８がリード指示を受け取れば、読み出しするアドレスを変換し、バスドライバ１１０を通して制御ソフト１１３へリード指示を送る。制御ソフト１１３は、指示に該当する内容をリード専用部１１８から読み出ししてＣＰＵ側へ返す。
【００４１】
アプリケーションが書込みをする場合、エイリアス部１０６で書込むデータを元データがリードライト部１１７に存在するのかリード専用部１１８に存在するのかを判定し、ファイルシステム１０７に対してどちらの領域にライトするのか指示をする。ファイルシステム１０７は指示されたドライバにライト指示を行う。
【００４２】
リードライト部ドライバ１０８がライト指示を受け取ると、制御ソフト１１３にライト指示をし、制御ソフト１１３はスペア部１１６を使ってリードライト部１１７に当該データの書込みを行い、その結果（正常/異常）を上位へ返す。
【００４３】
これに対して、リード専用部１１８がライト指示を受け取れば、書込みできない旨を上位に返す。
【００４４】
したがって、アプリケーション１０５がリードライト部１１７に対してデータのリード／ライトをする場合には、リードライト部ドライバ１０８を通してフラッシュメモリ１１４のリードライト部１１７にアクセスし、アプリケーション１０５がリード専用データの読み込みを行う場合には、リード専用部ドライバ１０９を通してフラッシュメモリ１１４のリード専用部１１８にアクセスすることができる。しかしながら、アプリケーション１０５がリード専用データに書込みをしようとすると、リード専用部ドライバ１０９からエラーを受け取る。したがって、リードライト部１１７にデータを書込み中に電源断になっても、フラッシュメモリ１１４のリード専用部１１８のデータが化けたりロストしたりする事態を確実に回避することができる。
【００４５】
１．３）効果
上述したように、本実施形態によれば、読み書きするデータが使用するエリア（リードライト部１１７）と、読み込み専用のデータが使用するエリア（リード専用部１１８）とを互いに影響を与えないようにレイアウトして分割しているので、読み書きするデータの書き込み中の電源断により、読み込み専用のデータも一緒に化けたり消失したりすることがない。
【００４６】
また、リード専用部ドライバ１０９やリード専用部１１８などは、仮想機能により実現するために、追加回路が不要であり、フラッシュメモリ１１４の制御についても変更は不要である。
【実施例】
【００４７】
２．一実施例
２．１）構成
図３は本発明の一実施例によるフラッシュメモリ制御システムを適用した情報処理装置のブロック図である。情報処理装置４０１は、ＣＰＵ４０２と、図１における外部メモリ１０３に該当するコンパクトフラッシュ(登録商標、以下同様）４０３とを含む。ＣＰＵ４０２は内部メモリ４０４を含み、内部メモリ４０４はアプリケーション４０５と、エイリアス部１０６に該当するラッパー４０６と、ファイルシステム１０７に該当するＦＡＴファイルシステム４０７と、リードライト部ドライバ１０８に該当するハードディスクドライバ４０８と、リード専用部ドライバ１０９に該当する仮想フロッピィディスクドライバ４０９と、バスドライバ１１０に該当するＩＤＥドライバ４１０と、ローダ４１１と、を含む。またローダ４１１はローダ・リード専用部アクセスデータ部４１２を含む。
【００４８】
ラッパー４０６には仮想フロッピィディスクに存在するファイルの一覧が保持されている。仮想フロッピィディスクドライバ４０９はリード専用部ドライバ１０９と同様の機能を有し、フロッピィディスクにアクセスするようにアプリケーションに見せかけてコンパクトフラッシュ４０３にアクセスする。
【００４９】
コンパクトフラッシュ４０３は制御ソフト４１３とフラッシュメモリ４１４とを含む。フラッシュメモリ４１４は、データ部４１５とスペア部４１６を含み、データ部４１５はリードライト部４１７とリード専用部４１８とを含む。リードライト部４１７は、アプリケーションが扱うリード／ライトするデータ４１９を含む。リード専用部４１８は、アプリケーション４０５が使用するパラメータ４２０と、ＯＳおよびアプリケーションのプログラムを格納したファイルであるＯＳ/アプリ４２１とを含む。
【００５０】
本実施例に特徴的な機能は、ラッパー４０６、仮想フロッピィディスクドライバ４０９、ローダ・リード専用部アクセスデータ部４１２およびリード専用部４１８である。なお、図３における矢印の実線は、アプリケーション４０５がフラッシュメモリ４１４に存在するファイルをアクセスするための経路を示していて、矢印線のかかったブロックは、経路上に機能するブロックである。
【００５１】
図４は、図２におけるデータ部内容２０２の具体例を示す図である。ただし、比較が容易なように、図４の用語を図２にあわせている。
【００５２】
本実施例によれば、図４に示すように、リードライト部内容２０４は、ファイルシステム管理エリア内容２０７に属するが、リード専用部内容２０５はファイルシステム管理エリア内容２０７の外側におかれている。
【００５３】
セクタ番号のＨＤおよびＦＤは、それぞれハードディスクのセクタ番号、仮想フロッピィディスクのセクタ番号を示す。ハードディスクのセクタ番号０にマスタブートレコード２０６が割り当てられ、フラッシュメモリ４１４内のブロック番号は＃０に該当し、かつ、ブロック＃０はリードライト部内容２０４に属する。具体的には次の通りである。
【００５４】
ハードディスクのセクタ番号１０−２３および仮想フロッピィディスクのセクタ番号０−１３にＯＳファイル２１２が割り当てられ、フラッシュメモリ４１４内のブロック番号は＃１〜＃２に該当し、ブロック＃１〜＃２はリード専用部内容２０５に属する。
【００５５】
ハードディスクのセクタ番号２５−３７および仮想フロッピィディスクのセクタ番号１５−２７にアプリケーションファイル２１３が割り当てられ、フラッシュメモリ４１４内のブロック番号は＃２〜＃３に該当し、ブロック＃２〜＃３はリード専用部内容２０５に属する。
【００５６】
ハードディスクのセクタ番号４０−４２および仮想フロッピィディスクのセクタ番号３０−３２にシステムデータファイル２１４が割り当てられ、フラッシュメモリ４１４内のブロック番号は＃４に該当し、ブロック＃４はリード専用部内容２０５に属する。
【００５７】
ハードディスクのセクタ番号５０、５１−５４、５５−９８９は、ファイルシステム管理エリア内容２０７に属する通常のシステムにてアクセスできるエリアである。このエリア内のハードディスクのセクタ番号５０はパーティション情報２０９が割り当てられ、フラッシュメモリ４１４内のブロック番号は＃５に該当し、ブロック＃５はリードライト部内容２０４に属する。
【００５８】
ハードディスクのセクタ番号５１〜５４はＦＡＴ２１０が割り当てられ、フラッシュメモリ４１４内のブロック番号は＃５に該当し、ブロック＃５はリードライト部内容２０４に属する。
【００５９】
ハードディスクのセクタ番号５５〜９８９はファイルシステムデータ部２１１が割り当てられ、フラッシュメモリ４１４内のブロック番号は＃５〜＃９８に該当し、ブロック＃５〜＃９８はリードライト部内容２０４に属する。
【００６０】
ハードディスクのセクタ番号９９０〜９９９はスペアセクタ２０８が割り当てられ、フラッシュメモリ１１４内のブロック番号は＃９９に該当し、ブロック＃９９はリードライト部内容２０４に属する。
【００６１】
次に、情報処理装置４０１に電源が入ったときの動作について説明をする。
【００６２】
２．２）起動時の動作
情報処理装置４０１に電源が入ると、内部メモリ４０４に見えるローダ４１１が動作を開始する。ローダ４１１は、ＯＳ/アプリ４２１をアクセスするためのセクタ番号をローダ・リードライト専用部アクセスデータ部４１２から取り出す。図４の例では、ＯＳファイル２１２はハードディスクセクタ番号で１０〜２３セクタ、 アプリケーションファイル２１３はハードディスクセクタ番号で２５〜３７セクタである。ローダ４１１は、ＣＰＵ４０２とコンパクトフラッシュ４０３を接続するインタフェースを直接制御し、コンパクトフラッシュ４０３に対して、ＯＳ/アプリ４２１のハードディスクセクタ番号を入力してリード指示を順番に送る。つまり、最初にＯＳ、次にアプリケーションの順番で、ハードディスクセクタ番号の小さい順に、セクタを読み出しする指示とハードディスクセクタ番号を送る。
【００６３】
コンパクトフラッシュ４０３内の制御ソフト４１３は、入力された指示とハードディスクセクタ番号を解析し、入力されたハードディスクセクタ番号を、フラッシュメモリ４１４のブロック番号とブロック内のセクタ番号とに分解する。例えば入力されたハードディスクセクタ番号が１２である場合には、ブロック番号は“１”、ブロック内のセクタ番号は“２”である。この情報を使って、フラッシュメモリ４１４の中の該当するブロックの該当するセクタを読み出し、ＩＤＥインタフェースでローダ４１１にＯＳ/アプリ４２１の内容を返す。ローダ４１１は読み出したデータを、内部メモリ４０４に貼り付ける。ＯＳ/アプリ４２１を全て内部メモリ４０４に貼り付け終わると、ローダは終了し、ＯＳを介してアプリケーション４０５に制御が渡る。
【００６４】
２．３）リード専用データの読み出し動作
図５はアプリケーションがリード専用データを読み込む時の本実施例のリード動作を示すシーケンス図である。ここでは、アプリケーション４０５が自身を初期化するために、リード専用部４１８のパラメータ４２０を読み出す動作について説明をする。ローダ４１１が終了してＯＳを介してアプリケーション４０５に制御が渡ると、アプリケーション４０５は、アプリケーションとして動作するためにアプリケーション自身を初期化する必要がある。この初期化のために、アプリケーション設定情報が格納されているパラメータ４２０が読み出される。以下、このパラメータ読み出し動作を詳細に説明する。
【００６５】
アプリケーション４０５から見ると、パラメータ４２０は、仮想フロッピィディスクドライバ４０９を経由してアクセスするので仮想フロッピィディスクに存在するデータとして認識される。
【００６６】
まず、アプリケーション４０５は、パラメータ４２０を読み込む場合、ラッパー４０６に対してパラメータ４２０のリード指示を送る(ステップ５−１)。ラッパー４０６は入力されたファイル名と内部に保持する仮想フロッピィディスクに存在するファイルの一覧とを比較してパラメータのドライブ判定を行う（ステップ５−２）。ここでは、パラメータ４２０は仮想フロッピィディスクに存在するファイルであると判定される。そして、ラッパー４０６は、ＦＡＴファイルシステム４０７に対して仮想フロッピィディスクのパラメータ４２０のリード指示を行う（ステップ５−３）。
【００６７】
なお、パラメータ４２０のファイル名の記述は、仮想フロッピィディスクに存在する情報が含まれている。また、ハードディスクドライブに存在する情報が含まれている別名のファイルパラメータ４２０’として見える場合には、このパラメータ４２０’のファイル名を、ラッパー４０６によってパラメータ４２０のファイル名に変換することも可能である。
【００６８】
ＦＡＴファイルシステム４０７は、仮想フロッピィディスクドライバ４０９にファイルのエントリ情報を読み出す指示をする（ステップ５−４）。エントリ情報の読み込みは、ＦＡＴファイルシステム４０７から仮想フロッピィディスクドライバ４０９にエントリ情報の入ったセクタ番号のリード指示で行われる。
【００６９】
仮想フロッピィディスクドライバ４０９はパラメータ４２０がどこのセクタに存在するか識別するエントリ情報をＦＡＴファイルシステム４０７に返す（ステップ５−５）。エントリ情報は、コンパクトフラッシュ４０３の中にあるリード専用部４１８の内容、つまり、ＯＳファイル２１２、アプリケーションファイル２１３およびシステムデータファイル２１４の情報であり、仮想フロッピィディスクドライバ４０９の中で固定値として保持している。固定値として使えるのは、情報処理装置４０１の設計時に、コンパクトフラッシュ４０３の中にあるリード専用部４１８の情報マップが決められているからである。その際、既存のシステムのようにリード指示をＩＤＥドライバ４１０へ送ることはない。
【００７０】
更にＦＡＴファイルシステム４０７は、ファイルがどのようにマップされているか知るために、マップ情報(ＦＡＴ情報)のリード指示を仮想フロッピィディスクドライバ４０９へ送る（ステップ５−６）。このリード指示も、仮想フロッピィディスクドライバ４０９にＦＡＴ情報の入ったセクタ番号のリード指示で行われる。仮想フロッピィディスクドライバは、ＦＡＴ情報を返すが、この情報も仮想フロッピィディスクドライバが固定で保持する値である（ステップ５−７）。その際、既存のシステムのようにリード指示をＩＤＥドライバ４１０へ送ることはない。
【００７１】
ＦＡＴファイルシステム４０７は受け取ったエントリ情報とＦＡＴ情報からセクタ番号を計算し（ステップ５−８）、当該セクタ番号のリード指示を仮想フロッピィディスクドライバ４０９へ送る（ステップ５−９）。仮想フロッピィディスクドライバ４０９は、受け取ったセクタ番号を、コンパクトフラッシュ４０３をアクセスするためのセクタ番号に変換する（ステップ５−１０）。例えば、図４におけるシステムデータファイル２１４ （＝パラメータ４２０）の仮想フロッピィディスクのセクタ番号３０を、ハードディスクのセクタ番号４０に変換をする。仮想フロッピィディスクドライバ４０９は、変換後のセクタ番号と入力された指示をＩＤＥドライバ４１０に送る（５−１１）。
【００７２】
このように、仮想フロッピィディスクドライバ４０９は、リード指示をＩＤＥドライバ４１０を送ることなく、固定値のエントリ情報およびＦＡＴ情報を戻し（ステップ５−５、５−７）、ＦＡＴファイルシステム４０７から受け取ったセクタ番号を変換してＩＤＥドライバ４１０へ送る（ステップ５−１０、５−１１）というシーケンスにより、読み出し専用のセクタに対して読み込みだけのアクセス経路を実現することができる。これにより当該セクタの内容が化けたりロストしたりしない仕組みの一部が実現される。
【００７３】
ＩＤＥドライバ４１０は、仮想フロッピィディスクドライバ４０９から入力した指示とセクタ番号とをＩＤＥインタフェ−スを通してコンパクトフラッシュ４０３に送る（ステップ５−１２）。
【００７４】
コンパクトフラッシュ４０３内の制御ソフト４１３は、入力された指示とセクタ番号を解析し、入力されたセクタ番号をフラッシュメモリ４１４のブロック番号とブロック内のセクタ番号に分解する（ステップ５−１３）。例えば、入力されたセクタ番号が“４０”であれば、ブロック番号が“４”で、ブロック内のセクタ番号が“０”である。分解されたブロック番号およびセクタ番号を使って、フラッシュメモリ４１４の中の該当するブロックの該当するセクタを読み出し（ステップ５−１４）、そのセクタ内容をＩＤＥインタフェ−スを通してＩＤＥドライバ４１０に返す（ステップ５−１５）。
【００７５】
このセクタ内容は、ＩＤＥドライバ４１０によって仮想フロッピィディスクドライバ４０９に返され（ステップ５−１６）、さらに仮想フロッピィディスクドライバ４０９によってＦＡＴファイルシステム４０７へ返される（ステップ５−１７）。
【００７６】
ＦＡＴファイルシステム４０７は、仮想フロッピィディスクのファイルのエントリ情報を更新し、仮想フロッピィディスクドライバ４０９にファイル更新したエントリ情報のライト指示を送る（ステップ５−１８）。
【００７７】
さらに、ＦＡＴファイルシステム４０７はラッパー４０６にセクタ内容を返し（ステップ５−１９）、ラッパー４０６はアプリケーション４０５に返す（ステップ５−２０）。こうして、アプリケーション４０５は、初期化に必要なデータ＝パラメータを読み取ることに成功する。アプリケーション４０５は読み取ったパラメータを解析してアプリケーション自身を初期化する。
【００７８】
２．４）リード専用データへのライト指示
次に、アプリケーション４０５がＯＳ/アプリ４２１のセクタに誤って書込み指示した場合、つまりアプリケーション４０５がパラメータ４２０にデータのライト指示をした場合について本実施例の動作を説明する。
【００７９】
図６はアプリケーションがリード専用データに対して誤ってライト指示を発した場合の本実施例の応答処理を示すシーケンス図である。アプリケーション４０５がラッパー４０６に対してパラメータ４２０’へのデータのライト指示を行ったとする（ステップ６−１）。この場合、ラッパー４０６は入力されたパラメータ４２０’のファイル名をパラメータ４２０のファイル名に変換し、変換したファイル名と内部に保持する仮想フロッピィディスクに存在するファイルの一覧と比較して、仮想フロッピィディスクに存在するファイルであることを判定すると（ステップ６−２）、パラメータ４２０’のファイル名をパラメータ４２０のファイル名に変換して、ＦＡＴファイルシステム４０７に対して、仮想フロッピィディスクのパラメータ４２０のライト指示を送る（ステップ６０３）。ＦＡＴファイルシステム４０７は、仮想フロッピィディスクドライバ４０９にファイルのエントリ情報のリード指示を送る（ステップ６−４）。
【００８０】
仮想フロッピィディスクドライバ４０９は、上述したように（図５のステップ５０５）、パラメータ４２０がどこのセクタに存在するか識別するエントリ情報を固定値としてＦＡＴファイルシステム４０７に返す（ステップ６−５）。その際、既存のシステムのようにリード指示をＩＤＥドライバ４１０へ送ることはない。
【００８１】
更に、ＦＡＴファイルシステム４０７は、ファイルがどのようにマップされているか知るために、マップ情報(ＦＡＴ情報)のリード指示を仮想フロッピィディスクドライバ４０９へ送り（ステップ６−６）、仮想フロッピィディスクドライバ４０９はその応答としてＦＡＴ情報を固定値で返す（ステップ６−７）。その際、既存のシステムのようにリード指示をＩＤＥドライバ４１０へ送ることはない。
【００８２】
ＦＡＴファイルシステム４０７は受け取ったエントリ情報とＦＡＴ情報からパラメータのセクタ番号を計算し（ステップ６−８）、当該パラメータのライト指示を仮想フロッピィディスクドライバ４０９へ送る（ステップ６−９）。これに応答して、仮想フロッピィディスクドライバ４０９は、ＦＡＴファイルシステム４０７に、仮想フロッピィディスクがノッチされている情報（書込不可）を返す（ステップ６−１０）。
【００８３】
ＦＡＴファイルシステム４０７は、仮想フロッピィディスクドライバ４０９からノッチ情報を受け取ると、ラッパー４０６にエラーを返し（ステップ６−１１）、ラッパー４０６はアプリケーション４０５にエラーを返す（ステップ６−１２）。いずれにしても仮想フロッピィディスクドライバ４０９がライト指示をＩＤＥドライバ４１０へ送ることはない。
【００８４】
以上のようにして、仮想フロッピィディスクドライバ４０９は、上位からのライト指示に対して、ライト不可（仮想フロッピィディスクがノッチされている情報）によるエラーを上位に返すことで、書込みをさせない機能を実現する。これに対して、上述したように上位からのリード指示に対しては、下位にリード指示を送ることによって、フラッシュメモリ４１４のリード専用部４１８にアクセスしてデータの読み取りを可能にする。
【００８５】
２．５）リードライト部へのデータ書き込み動作
次に、アプリケーション４０５によって、コンパクトフラッシュ４０３内のデータ４１９にデータ書き込みする場合について説明をする。ただし、このデータ書き込み動作は、ラッパー４０６を経由すること以外、通常の書き込み方法と同様である。
【００８６】
図７は、アプリケーションがリードライト部へのデータ書き込み時の本実施例のライト動作を示すシーケンス図である。上述したように、アプリケーション４０５から見て、データ４１９は、ハードディスクドライバを経由してアクセスするので、ハードディスクに存在するデータとして認識される。
【００８７】
まず、アプリケーション４０５がデータ４１９を書込みする場合はラッパー４０６にデータ４１９のライト指示をする（ステップ７−１）。ラッパー４０６は入力されたファイル名と内部に保持する仮想フロッピィディスクに存在するファイルの一覧と比較してドライブ判定を行う（ステップ７−２）。ここでは、データ４１９は仮想フロッピィディスクに存在しないファイルであると判定される。ラッパー４０６は、ＦＡＴファイルシステム４０７に対して、ハードディスクのデータ４１９に対して書き込みを行うライト指示を送る（ステップ７−３）。
【００８８】
ＦＡＴファイルシステム４０７はデータのセクタ番号を計算し（ステップ７−４）、当該セクタ番号のデータとライト指示をハードディスクドライバ４０８へ送る（ステップ７−５）。ハードディスクドライバ４０８は入力したセクタ番号、ライト指示およびデータをＩＤＥドライバ４１０へ送る（ステップ７−６）。ＩＤＥドライバ４１０は、入力したライト指示、セクタ番号およびデータをＩＤＥインタフェ−スを通してコンパクトフラッシュ４０３へ送る（ステップ７−７）。
【００８９】
コンパクトフラッシュ４０３内の制御ソフト４１３は、入力されたライト指示とセクタ番号を解析し、入力されたセクタ番号をフラッシュメモリ４１４のブロック番号とブロック内のセクタ番号に分解する（ステップ７−８）。例えば入力されたセクタ番号が＃７１であればブロック番号は“７”、ブロック内のセクタ番号は“１”である。この情報を使って、フラッシュメモリ４１４の中の該当するブロックの該当するセクタを特定する。
【００９０】
次に、制御ソフト４１３は、スペア部４１６から未使用のブロックを検索し、図９で説明したようにデータの書き込み処理を実施する（ステップ７−９）。続いて、制御ソフト４１３は、ＩＤＥインタフェ−スを通してＩＤＥドライバ４１０に対して、書き込みが成功したことを通知する（ステップ７−１０）。
【００９１】
書き込み正常完了通知を受け取ると、ＩＤＥドライバ４１０は、ハードディスクドライバ４０８に正常終了した通知を送り（ステップ７−１１）、ハードディスクドライバ４０８はＦＡＴファイルシステム４０７に正常終了したことを通知する（ステップ７−１２）。ＦＡＴファイルシステム４０７は、ハードディスクのファイルのエントリ情報とＦＡＴ情報を更新し、ハードディスクドライバ４０８にファイルの更新したエントリ情報とＦＡＴ情報のライト指示をする（ステップ７−１３）。続いて、ＦＡＴファイルシステム４０７はラッパー４０６に正常終了を通知し（ステップ７−１４）、さらにラッパー４０６はアプリケーション４０５に正常終了を通知する（ステップ７−１５）。
【００９２】
なお、アプリケーション４０５によって、コンパクトフラッシュ４０３内のデータ４１９からデータを読み込みする場合は、ラッパー４０６を経由すること以外、通常の読み込み方法と同様であるから説明は省略する。
【００９３】
２．６）効果
上述したように、図４におけるリード専用部４１８をファイルシステム管理エリア内容２０７の外側におくことと、図５における仮想フロッピィディスクドライバ４０９によって実現されるステップ５−５〜５−１１のシーケンスと、図６におけるステップ６−５〜６−１０のライト不可シーケンスとによって、リード専用のセクタに対して読み込みだけのアクセス経路を実現することができる。すなわち、書き込みするときにアクセスするブロックは、リードライト部４１７とスペア部４１６に限定することができ、リード専用部４１８のブロックをアクセスすることがないようにできる。つまり、図９で述べたデータ更新シーケンスは、リードライト部４１７にデータを書き込みするときには発生するが、リード専用部４１８はデータ書き込みが発生しないため、図９のシーケンスが発生しない。これによってリード専用部４１８を有効に保護することができ、リード専用のデータの破壊を回避できる。こうしてフラッシュメモリへの書き込み時にリード専用のデータが化けたりロストしたりすることを防ぐことができる。
【００９４】
このように制御することで、読み書きするデータが使用するエリアと、読み込み専用のデータが使用するエリアとを分割することができ、読み書きするデータの書き込み中の電源断により読み込み専用のデータも一緒に化けたりロストしたりすることがない。さらに、ＣＰＵ視点の仮想フロッピィディスクドライブやリード専用部等の仮想機能部を使うため、既存の装置環境を利用することができ、追加の回路は不要でありフラッシュメモリの制御についても変更は不要である。
【００９５】
なお、上記実施例では、マスタブートレコード２０６からパーティション情報２０９の間に、ＯＳ/アプリ４２１およびパラメータ４２０を入れたが、下記の場所にＯＳ/アプリ４２１および パラメータ４２０を入れてもよい。すなわち、スペアセクタ２０８をリード専用部に割り当て、ＯＳ/アプリ４２１および パラメータ４２０を入れてもよい。また、パーティション情報２０９とＦＡＴ２１０との間をリード専用部にして、ＯＳ/アプリ４２１および パラメータ４２０を入れてもよい。
【００９６】
また、ファイルシステムの中の１ファイルに、ブロックが別のファイルと共有しないようにダミーのエリアを含んだ、ＯＳ/アプリ４２１および パラメータ４２０をまとめた統合ファイルを用意し、この統合ファイルをリード専用部として使用してもよい。
【００９７】
また、ファイルシステムは、ＦＡＴ１２/１６を具体例としたが、他のファイルシステムを採用してもよい。
【００９８】
上記実施例では、仮想フロッピィディスクをリード専用部ドライバの具体例としたが、ＣＤ−ＲＯＭドライバなどのストレ−ジ系のドライバにより置き換える構成としてもよい。更に、リード部専用ドライバ（仮想フロッピィディスクドライバ）をアプリケーション１０５に静的リンク等により取り込む構成にしてもよい。
【００９９】
また、上記実施例では、エイリアス部１０６をラッパー４０６として、ＦＡＴファイルシステム４０６をラップした具体例としたが、ラッパー４０６の機能は、アプリケーション４０５あるいはＦＡＴファイルシステム４０７に組み込みすることにより実現してもよいし、シェルの機能により実現してもよい。
【産業上の利用可能性】
【０１００】
本発明は、組み込み系のフラッシュメモリを使用する情報処理装置に適用可能である。
【図面の簡単な説明】
【０１０１】
【図１】本発明の一実施形態によるフラッシュメモリ制御システムを適用した情報処理装置の概略的構成を示すブロック図である。
【図２】本実施形態で用いられるフラッシュメモリの内容を模式的に示す図である。
【図３】本発明の一実施例によるフラッシュメモリ制御システムを適用した情報処理装置のブロック図である。
【図４】図２におけるデータ部内容２０２の具体例を示す図である。
【図５】アプリケーションがリード専用データを読み込む時の本実施例のリード動作を示すシーケンス図である。
【図６】アプリケーションがリード専用データに対して誤ってライト指示を発した場合の本実施例の応答処理を示すシーケンス図である。
【図７】アプリケーションがリードライト部へのデータ書き込み時の本実施例のライト動作を示すシーケンス図である。
【図８】フラッシュメモリの一般的な論理的構造を示す模式図である。
【図９】セクタ内容の更新およびブロック移動の通常の手順を説明するための説明図である。
【符号の説明】
【０１０２】
１０１  情報処理装置
１０２  ＣＰＵ
１０３  外部メモリ
１０４  内部メモリ
１０５  アプリケーション
１０６  エイリアス部
１０７  ファイルシステム
１０８  リードライト部ドライバ
１０９  リード専用部ドライバ
１１０  バスドライバ
１１１  ローダ
１１２  ローダ・リード専用アクセスデータ部
１１３  制御ソフト
１１４  フラッシュメモリ
１１５  データ部
１１６  スペア部
１１７  リードライト部
１１８  リード専用部
２０１  フラッシュメモリ内容
２０２  データ部内容
２０３  スペア部内容
２０４  リードライト部内容
２０５  リード専用部の内容
２０６  マスタブートレコード
２０７  ファイルシステム管理エリア内容
２０８  スペアセクタ
２０９  パーティション情報
２１０  ＦＡＴ
２１１  ファイルシステムデータ部
２１２  ＯＳファイル
２１３  アプリケーションファイル
２１４  システムデータファイル
４０１  情報処理装置
４０２  ＣＰＵ
４０３  コンパクトフラッシュ
４０４  内部メモリ
４０５  アプリケーション
４０６  ラッパー
４０７  ＦＡＴファイルシステム
４０８  ハードディスクドライバ
４０９  仮想フロッピィディスクドライバ
４１０  ＩＤＥドライバ
４１１  ローダ
４１２  ローダ・リード専用アクセスデータ部
４１３  制御ソフト
４１４  フラッシュメモリ
４１５  データ部
４１６  スペア部
４１７  リードライト部
４１８  リード専用部
４１９  データ
４２０  パラメータ
４２１  ＯＳ/アプリ
【図１】
2009211245.tif 000003
【図２】
2009211245.tif 000004
【図３】
2009211245.tif 000005
【図４】
2009211245.tif 000006
【図５】
2009211245.tif 000007
【図６】
2009211245.tif 000008
【図７】
2009211245.tif 000009
【図８】
2009211245.tif 000010
【図９】
2009211245.tif 000011