(57)【要約】【課題】書き込み速度を最適に高速化することができる半導体ディスク装置へのデータ書き込み方法を提供する。【解決手段】データを半導体ディスク装置に書き込む際、半導体ディスク装置では、受信した論理ブロックアドレスに基づいてデータの書き込み時間が最も短いユニットにおける空きブロックの物理ブロックアドレスが検索され、該検索された物理ブロックアドレスのブロックにデータが書き込まれる。【選択図】図５
2007094734.tif 000002
【特許請求の範囲】
【請求項１】
データを書き込み可能な複数の領域を有するフラッシュメモリを用いた半導体ディスク装置において、
前記領域毎に前記データの書き込みに要する時間を計測するデータ書き込み時間計測部と、
前記計測された時間に基づいて前記データを書き込む領域を選択するデータ書き込み領域選択部とを備えることを特徴とする半導体ディスク装置。
【請求項２】
前記領域毎に前記データの消去回数を管理するデータ消去回数管理部を更に有し、
前記データ書き込み領域選択部は、前記計測された時間及び前記領域における前記データの消去回数に基づいて前記データを書き込む領域を選択することを特徴とする請求項１記載の半導体ディスク装置。
【請求項３】
前記データ書き込み領域選択部は、前記計測された時間に前記領域における前記データの消去回数を重みとして乗じた値に基づいて前記データを書き込む領域を選択することを特徴とする請求項２記載の半導体ディスク装置。
【請求項４】
前記データ書き込み時間計測部は、前記データを前記領域に書き込む際に、前記データの書き込みに要する時間を計測することを特徴とする請求項１乃至３のいずれか１項に記載の半導体ディスク装置。
【請求項５】
データを書き込み可能な複数の領域を有するフラッシュメモリを用いた半導体ディスク装置へのデータ書き込み方法であって、
前記領域毎に前記データの書き込みに要する時間を計測するデータ書き込み時間計測ステップと、
前記計測された時間に基づいて前記データを書き込む領域を選択するデータ書き込み領域選択ステップとを有することを特徴とするデータ書き込み方法。
【請求項６】
前記領域毎に前記データの消去回数を管理するデータ消去回数管理ステップを更に有し、
前記データ書き込み領域選択ステップは、前記計測された時間及び前記領域における前記データの消去回数に基づいて前記データを書き込む領域を選択することを特徴とする請求項５記載のデータ書き込み方法。
【請求項７】
前記データ書き込み領域選択ステップは、前記計測された時間に前記領域における前記データの消去回数を重みとして乗じた値に基づいて前記データを書き込む領域を選択することを特徴とする請求項６記載のデータ書き込み方法。
【請求項８】
前記データ書き込み時間計測ステップは、前記データを前記領域に書き込む際に、前記データの書き込みに要する時間を計測することを特徴とする請求項５乃至７のいずれか１項に記載のデータ書き込み方法。
【請求項９】
データを書き込み可能な複数の領域を有するフラッシュメモリを用いた半導体ディスク装置へのデータ書き込み方法をコンピュータに実行させるプログラムであって、
前記領域毎に前記データの書き込みに要する時間を計測するデータ書き込み時間計測モジュールと、
前記計測された時間に基づいて前記データを書き込む領域を選択するデータ書き込み領域選択モジュールとを有することを特徴とするプログラム。
【請求項１０】
請求項９項に記載のプログラムを格納することを特徴とするコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体ディスク装置、該装置へのデータ書き込み方法、プログラム及び記憶媒体に関し、特に、フラッシュメモリを用いた半導体ディスク装置へのデータの書き込み方法に関する。
【背景技術】
【０００２】
ＲＡＭ（Random Access Memory）は、データの書き込み・消去を自在に行なえるが電源を切ると書き込まれたデータが消去される。一方、ＲＯＭ（Read Only Memory）は、書き込まれたデータを消去することはできないが電源を切っても書き込まれたデータが消去されない不揮発性のメモリである。近年、ＲＡＭとＲＯＭとの両者の機能を兼ね備えた半導体メモリであるフラッシュメモリが広く用いられている。さらに、フラッシュメモリをディスク装置として用いる半導体ディスク装置が、携帯電話、デジタルカメラや携帯音楽プレーヤ等の携帯機器に組込まれて多く用いられるようになってきている。
【０００３】
従来より用いられている、一般の磁気ディスク装置は、ファイルシステムからの要求に応じて、データの読出し／書き込みを５１２バイトのブロック単位で行う。一方、フラッシュメモリ、例えば、ＮＯＲ型フラッシュメモリ（インテル株式会社）は、データの読出し／書き込みをバイト単位で行うことができるが、データの消去は６４Ｋバイトのユニットと呼ばれる消去単位でしか行うことができない。このような、フラッシュメモリは複数のユニットに対応する、データを書き込むための複数のメモリ領域（以下、単に「領域」という。）を有する。
【０００４】
フラッシュメモリにおける各ユニットは、取扱の便宜上、複数のブロックに分割されて管理される。各ブロックの状態は、消去直後の状態（Free）、有効なデータが書き込まれた状態（Allocated）、不要になったデータが残っている状態（Deleted）、物理的に使用できない状態（Bad）等に分類されることが多い。分類された各ブロックの状態は、携帯機器が備えるメインメモリ又はフラッシュメモリの各ユニットが有するヘッダ領域等が管理する。また、各ブロックには、その内容に応じて、コントロールブロック、ブロックマップブロックやデータブロック等の属性が割り当てられる。
【０００５】
一般に、ブロックの定義やフラッシュメモリへのブロックの実装方法等は、半導体ディスク装置や規格によって異なっている。このような規格の一例として、例えば、JEITA（社団法人日本情報技術産業協会）発行の「PC Card Standard」において「Flash Translation Layers（ＦＴＬ）」という規格が規定されている。
【０００６】
ところで、フラッシュメモリはその特性上、同じ領域にデータを上書きすることはできないため、データを上書きする場合は、当該領域に書き込まれているデータを消去する必要がある。しかしながら、データの消去には多大な時間がかかるため、書き込みを高速に行う場合には、予めデータが消去された別の領域を用意し、該別の領域へのデータの書き込みを行う必要がある。このとき、上書きされたデータが上書きされる前のデータが書き込まれていた領域と別の領域に書き込まれたこと（データの書き込み領域が移動したこと）をアドレス変換テーブル等によって参照可能にしておく必要がある。
【０００７】
また、フラッシュメモリには、所定回数、例えば、１０万回の消去回数の保証値が設定されている。フラッシュメモリを構成するセルから消去回数の保証値を越えてデータが消去されると、セル内の酸化膜が劣化すると共に該劣化が他のセルに及び、さらには、フラッシュメモリ全体が使用できなくなることがある。したがって、フラッシュメモリでは、データの消去の回数を補償値内に留めるのが好ましい。この観点からも、フラッシュメモリにおいて、特定の領域を使い続けるのを防止して寿命を延ばすために、データを上書きする場合、上書きするデータを常に別の領域に書き込むのが好ましい。
【０００８】
また、別の領域（新たな領域）へのデータの書き込みによってデータを書き込んでおくことが不要となった領域からデータの消去を行って他のデータの書き込みに備えておくことも、データの書き込みの高速化の観点から、重要である。
【０００９】
また、或るＮＯＲ型フラッシュメモリでは、１消去単位のデータの消去時間はおよそ０. ５秒〜２秒であり、１ワードのデータの書き込み時間は６マイクロ秒〜１００マイクロ秒である。このように、フラッシュメモリはデータの消去時間や書き込み時間がメインメモリに比べてかなり遅いため、例えば、フラッシュメモリの書き込み速度を見かけ上高速化するためのいくつかの技術が提案されている。
【００１０】
このような技術としては、例えば、フラッシュメモリにデータを直接書き込むのではなく、一旦メインメモリ上のライトバッファにデータを書き込むことによって高速化を実現する技術（例えば、特許文献１参照。）、書き込まれているデータが消去単位に対応する領域の境界を越えて跨っていると、該書き込まれているデータの消去の際、消去回数が増えてしまうため、書き込まれているデータが領域の境界を跨がないようにデータを配置することによって高速化を実現する技術（例えば、特許文献２参照。）、データをブロック単位で書き込むことによって高速化を実現する技術（例えば、特許文献３参照。）、複数のストレージを効率よく使うことによって高速化を実現する技術（例えば、特許文献４参照。）が知られている。
【００１１】
また、フラッシュメモリでは領域毎に、データの書き込み速度が異なることも知られている。
【特許文献１】特開平０６−１２４５９６号公報
【特許文献２】特開平１０−１２４３８４号公報
【特許文献３】特開２００３−２９６１７７号公報
【特許文献４】国際公開第０１／００８０１４号パンフレット
【発明の開示】
【発明が解決しようとする課題】
【００１２】
しかしながら、上述した従来のフラッシュメモリの書き込み速度の高速化を実現する技術は、いずれもフラッシュメモリの領域毎に書き込み速度が異なることを考慮していない。このため、フラッシュメモリの書き込み速度を最適に高速化しているとは言えず、ストリームデータのように高速な書き込みが要求されるデータを書き込む際には、データのフラッシュメモリへの転送速度を落とさなければならないという問題があった。
【００１３】
本発明の目的は、書き込み速度を最適に高速化することができる半導体ディスク装置、該装置へのデータ書き込み方法、プログラム及び記憶媒体を提供することにある。
【課題を解決するための手段】
【００１４】
上記目的を達成するために、本発明の半導体ディスク装置は、データを書き込み可能な複数の領域を有するフラッシュメモリを用いた半導体ディスク装置において、前記領域毎に前記データの書き込みに要する時間を計測するデータ書き込み時間計測部と、前記計測された時間に基づいて前記データを書き込む領域を選択するデータ書き込み領域選択部とを備えることを特徴とする。
【００１５】
上記目的を達成するために、本発明の半導体ディスク装置へのデータ書き込み方法は、データを書き込み可能な複数の領域を有するフラッシュメモリを用いた半導体ディスク装置へのデータ書き込み方法であって、前記領域毎に前記データの書き込みに要する時間を計測するデータ書き込み時間計測ステップと、前記計測された時間に基づいて前記データを書き込む領域を選択するデータ書き込み領域選択ステップとを有することを特徴とする。
【００１６】
上記目的を達成するために、本発明のプログラムは、データを書き込み可能な複数の領域を有するフラッシュメモリを用いた半導体ディスク装置へのデータ書き込み方法をコンピュータに実行させるプログラムであって、前記領域毎に前記データの書き込みに要する時間を計測するデータ書き込み時間計測モジュールと、前記計測された時間に基づいて前記データを書き込む領域を選択するデータ書き込み領域選択モジュールとを有することを特徴とする。
【００１７】
上記目的を達成するために、本発明の記憶媒体は、上記プログラムを格納することを特徴とする。
【発明の効果】
【００１８】
本発明によれば、データを書き込み可能な複数の領域を有するフラッシュメモリの領域毎にデータの書き込みに要する時間が計測され、該計測された時間に基づいてデータを書き込む領域が選択される。これにより、データの書き込みの際、フラッシュメモリの領域毎に書き込み速度が異なることを考慮することができ、もって書き込み速度を最適に高速化することができる。
【００１９】
また、本発明によれば、計測された時間及び領域毎におけるデータの消去回数に基づいてデータを書き込む領域が選択されるので、データの書き込みの際、データの消去回数を考慮することができ、もってフラッシュメモリの寿命を延ばすことができる。
【発明を実施するための最良の形態】
【００２０】
以下、本発明の実施の形態について図面を参照しながら詳述する。
【００２１】
まず、本発明の第１の実施の形態に係る半導体ディスク装置について説明する。
【００２２】
図１は、本実施の形態に係る半導体ディスク装置が適用された携帯機器のハードウェアの概略構成を示すブロック図である。
【００２３】
図１において、携帯機器としての携帯電話２００は、組み込み機器として、ＣＰＵ２０１と、ＲＯＭ２０２と、ＲＡＭ２０３と、後述するフラッシュメモリ１０５を用いた半導体ディスク装置１０８と、これらの構成要素を互いに接続するバス２０５とを備える。ＣＰＵ２０１は、バス２０５を介して、ＲＯＭ２０２、ＲＡＭ２０３及び半導体ディスク装置１０８とアドレスやデータの通信を行う。
【００２４】
ＣＰＵ２０１は半導体ディスク装置１０８の動作を制御する。これにより、半導体ディスク装置１０８に専用のコントローラを用いる必要を無くし、もって携帯電話２００の構成を簡素化してコストを削減することができる。また、ＣＰＵ２０１は、ＲＯＭ２０２に格納されたプログラムをＲＡＭ２０３において実行することによって、ＦＡＴ（File Allocation Table）ファイルシステム等の汎用的な後述のファイルシステム１０１を実現する。該ファイルシステム１０１は半導体ディスク装置１０８へのデータの書き込みを行う。
【００２５】
図２は、図１における半導体ディスク装置の概略構成を示すブロック図である。
【００２６】
図２において、半導体ディスク装置１０８は、書き込み部１０２と、物理ブロックアドレス選択部１０３と、ブロック管理部１０４と、不揮発性記憶部としてのフラッシュメモリ１０５と、時間計測部１０６と、ユニット管理部１０７とを備える。
【００２７】
半導体ディスク装置１０８において、フラッシュメモリ１０５は書き込み部１０２と通信可能であり、書き込み部１０２は時間計測部１０６、物理ブロックアドレス選択部１０３及び書き込み要求部としてのファイルシステム１０１と通信可能である。また、時間計測部１０６はユニット管理部１０７と通信可能であり、ユニット管理部１０７はブロック管理部１０４と通信可能である。ブロック管理部１０４は物理ブロックアドレス選択部１０３と通信可能であり、物理ブロックアドレス選択部１０３はファイルシステム１０１と通信可能である。
【００２８】
半導体ディスク装置１０８において、フラッシュメモリ１０５は、例えば、ＮＯＲ型フラッシュメモリであって、データを書き込むための複数のメモリ領域として複数のユニットを有する。各ユニットは、複数のブロックに分割されて管理される。フラッシュメモリ１０５では、ブロック毎にデータが書き込まれる。また、各ブロックにはユニットにおけるブロックの場所（アドレス）、すなわち、フラッシュメモリ１０５におけるブロックの位置を通し番号で示す論理ブロックアドレス（LBA）及びフラッシュメモリ１０５におけるブロックの物理的な位置を示す物理ブロックアドレス（PBA）が割り当てられている。
【００２９】
半導体ディスク装置１０８では、以下に説明するフラッシュメモリ１０５以外の構成要素は、ＣＰＵ２０１がＲＯＭ２０２に格納されたプログラムをＲＡＭ２０３において実行することによって実現される。
【００３０】
ユニット管理部１０７は、フラッシュメモリ１０５のユニット毎に、各ブロックの物理ブロックアドレス、各ユニットが有するブロックの総数（総ブロック数）、現時点でデータを書き込み可能なブロック（以下、「空きブロック」という。）の数、及び時間計測部１０６による計測で得られたユニット毎の後述する書き込み時間を管理する。これにより、ユニット管理部１０７はフラッシュメモリ１０５における複数のユニットのうち最も書き込み時間が短いユニットを判別することができる。
【００３１】
半導体ディスク装置１０８は、ＮＯＲ型フラッシュメモリのように複数のブロック（データを書き込むための領域）を有するブロック型記憶装置である。ファイルシステム１０１は、半導体ディスク装置１０８に対して、データの読出し（READ）や書き込み（WRITE）等のコマンドを、論理ブロックアドレスと共に送信する。このファイルシステム１０１は、送信したコマンドがデータの読出しであれば、半導体ディスク装置１０８からデータを受信し、送信したコマンドがデータの書き込みであれば、半導体ディスク装置１０８にデータを送信する。また、ファイルシステム１０１は、送信したコマンドが成功したか否かの状態についての情報を受信する。
【００３２】
以下、本実施の形態では、ファイルシステム１０１が半導体ディスク装置１０８に対してデータの書き込みを行う場合について説明する。
【００３３】
この場合、まず、ファイルシステム１０１が、物理ブロックアドレス選択部１０３へ、論理ブロックアドレスを送信すると共に、書き込み部１０２に書き込みを所望するデータを送信する。
【００３４】
物理ブロックアドレス選択部１０３は、ファイルシステム１０１から受信した論理ブロックアドレスをブロック管理部１０４に送信し、ブロック管理部１０４は、後述するように、送信された論理ブロックアドレスに基づいて物理ブロックアドレスを検索し、検索された物理ブロックアドレスを物理ブロックアドレス選択部１０３に返信する。また、物理ブロックアドレス選択部１０３は、ブロック管理部１０４から返信された物理ブロックアドレスを書き込み部１０２に送信する。
【００３５】
書き込み部１０２は、物理ブロックアドレス選択部１０３から受信した物理ブロックアドレス、ファイルシステム１０１から受信したデータ、及び書き込みコマンドをフラッシュメモリ１０５へ送信すると共に、時間計測部１０６にデータの書き込み時間の計測開始指示を送信する。なお、書き込み部１０２は、フラッシュメモリ１０５に最適な書き込みコマンドを送信する。
【００３６】
フラッシュメモリ１０５は、書き込み部１０２から書き込みコマンドを受信し、同時に受信したデータを受信した物理ブロックアドレスに対応するブロックに書き込み、データの書き込みが完了した時点で書き込み完了を書き込み部１０２に通知する。
【００３７】
書き込み部１０２は、フラッシュメモリ１０５が書き込み部１０２から受信した全てのデータを書き込んだ時点で時間計測部１０６に書き込み時間の計測終了指示を送信する。
【００３８】
時間計測部１０６は、書き込み部１０２から受信した計測開始指示に基づいて書き込み時間の計測を開始し、その後、書き込み部１０２から受信した計測終了指示に基づいて書き込み時間の計測を終了する。また、時間計測部１０６は、計測によって得られた書き込み時間をユニット管理部１０７へ送信する。
【００３９】
ブロック管理部１０４は、物理ブロックアドレス選択部１０３から論理ブロックアドレスを受信すると、ユニット管理部１０７に、空きブロックを有するユニットの中で最も書き込み時間の短いユニットの判別を要求する。ユニット管理部１０７は、該要求に基づいて、フラッシュメモリ１０５における複数のユニットのうち、空きブロックを有し且つ最も書き込み時間が短いユニット（以下、「最短時間ユニット」という。）をブロック管理部１０４に通知する。
【００４０】
また、ブロック管理部１０４は、物理ブロックアドレス選択部１０３から論理ブロックアドレスを受信した後、ユニット管理部１０７から最短時間ユニットが通知される。すると、後述するブロック管理表３０４に基づいて、受信した論理ブロックアドレスに対応する物理ブロックアドレスのブロックを検索する。さらに検索された物理ブロックアドレスのブロックのうち、通知された最短時間ユニットにおける空きブロックに該当するブロックを判別する（論理ブロックアドレスに基づいて物理ブロックアドレスを検索する）。そして、該ブロックの物理ブロックアドレスを物理ブロックアドレス選択部１０３に返信する。
【００４１】
図３は、図１の携帯電話における組み込み機器のメモリ構成のメモリマップを示す図である。
【００４２】
図３において、メモリマップ３００は、ＲＯＭ領域３０１と、ＲＡＭ領域３０２と、フラッシュメモリ領域３０３とからなる。ＲＯＭ領域３０１はＲＯＭ２０２がマップされているアドレス空間であり、ＲＡＭ領域３０２はＲＡＭ２０３がマップされているアドレス空間であり、フラッシュメモリ領域３０３はフラッシュメモリ１０５がマップされているアドレス空間である。
【００４３】
ＲＯＭ領域３０１は後述する図４乃至７の処理に対応するプログラムの命令コードを含む。ＣＰＵ２０１は、ＲＯＭ領域３０１が含む命令コードを参照して図４乃至７の処理を実行する。
【００４４】
ＲＡＭ領域３０２は、上述したプログラムの実行に必要なワークエリアや変数領域、さらには、フラッシュメモリ１０５の各ブロックを管理するためのブロック管理表３０４、及びフラッシュメモリ１０５の各ユニットを管理するためのユニット管理表３０５を含む。ブロック管理表３０４はブロック管理部１０４が論理ブロックアドレスに基づいて物理ブロックアドレスを検索する際に用い、ユニット管理表３０５はユニット管理部１０７が用いる。
【００４５】
従来、論理ブロックアドレスに基づく物理ブロックアドレスの検索やユニットの管理には、ブロック管理表やユニット管理表を用いることはない。しかしながら、本実施の形態では、処理速度の向上や管理の容易化を目的としてブロック管理表３０４及びユニット管理表３０５を用いる。これらのブロック管理表３０４やユニット管理表３０５は、携帯電話２００の起動時や電源再投入時等において半導体ディスク装置１０８を初期設定する際に、各ユニットの後述するユニットヘッダ３０７の内容を読込むことで作成される。
【００４６】
フラッシュメモリ領域３０３は、フラッシュメモリ１０５の複数ユニットに対応する複数のユニットによって構成されている。各ユニットは６４Ｋバイトを単位とし、複数のブロックによって構成されている。これらの複数のブロックは５１２バイトを単位とし、それぞれがフラッシュメモリ１０５の各ユニットにおける複数のブロックに対応する。
【００４７】
また、各ユニットは、最初のブロックであるユニットヘッダ３０７と、当該ユニット内の各ブロックを管理するために、例えば、ユニット内における各ブロックの順番などを記載したブロックマップを格納しているブロックマップブロック３０６と、データを書き込む領域としての複数のブロック３０８とを有する。例えば、上述したフラッシュメモリの規格であるＦＴＬでは、各ユニットが、消去ユニットヘッダ（ＥＵＨ）や、ブロックアロケーションマップ（ＢＡＭ）というブロックマップを格納しているブロックマップブロック等を有する。なお、各ユニットは、これらのブロックの他に当該ユニット内のブロックの情報を記録したコントロールブロックや、データが記録されたデータブロック等を有していてもよい。
【００４８】
また、各ユニットヘッダ３０７には、各種情報、例えば、当該ユニットの番号（例えば、認証用番号）、当該ユニットにおけるデータの消去回数、当該ユニットが有する総ブロック数、空きブロック数、及び書き込み時間等が登録されている。
【００４９】
図４は、図３におけるブロック管理表３０４を作成するブロック管理表作成処理のフローチャートである。この処理は、半導体ディスク装置１０８を初期設定する際に、ＣＰＵ２０１が、ＲＯＭ領域３０１が含む本処理に対応するプログラムの命令コードを参照して実行する。
【００５０】
図４において、まず、ＣＰＵ２０１は、フラッシュメモリ領域３０３の最初のユニットを選択し（ステップＳ８０１）、ステップＳ８０１又は後述するステップＳ８０８の処理の結果、現在選択されているユニットからブロックマップを読み込む（ステップＳ８０２）。
【００５１】
次いで、読み込んだブロックマップに基づいて現在選択されているユニットにおける最初のブロックを選択する（ステップＳ８０３）。そして、選択されたブロックに割りあてられた論理ブロックアドレスを物理ブロックアドレスと共に読み出し、これらを対応付けた上でブロック管理表３０４へ登録する（ステップＳ８０４）。その結果、ブロック管理表３０４では論理ブロックアドレスと物理ブロックアドレスとが互いに対応する。
【００５２】
次いで、現在選択されているユニットに論理ブロックアドレスを読み出していない次のブロックがあるか否かを判別し、次のブロックがある場合には、当該次のブロックを選択する（ステップＳ８０６）。その後、ステップＳ８０４へ戻り、次のブロックが無い場合にはステップＳ８０７に進む。
【００５３】
ステップＳ８０７では、フラッシュメモリ領域３０３に論理ブロックアドレスを読み出していないブロックを有する次のユニットがあるか否かを判別し、次のユニットがある場合には、当該次のユニットを選択する（ステップＳ８０８）。その後、ステップＳ８０２へ戻り、次のユニットが無い場合には本処理を終了する。
【００５４】
図４の処理によれば、フラッシュメモリ領域３０３における各ユニットの各ブロックの論理ブロックアドレス及び物理ブロックアドレスを順に読み出し、該読み出した論理ブロックアドレス及び物理ブロックアドレスを対応付けた上でブロック管理表３０４へ登録する。これにより、ブロック管理表３０４では論理ブロックアドレスと物理ブロックアドレスとが互いに対応し、ブロック管理表３０４を参照することによって論理ブロックアドレスに対応する物理ブロックアドレスを迅速に見つけ出すことができる。
【００５５】
また、ユニット管理表３０５も、半導体ディスク装置１０８を初期設定する際に、ＣＰＵ２０１が、ＲＯＭ領域３０１が含むユニット管理表作成処理に対応するプログラムの命令コードを参照して実行することによって作成される。
【００５６】
具体的には、ＣＰＵ２０１が、フラッシュメモリ領域３０３における各ユニットのユニッタヘッド３０７の記録内容（消去回数、総ブロック数、空きブロック数、書き込み時間）を読み出し、これらを順に列挙することにより、ユニット管理表３０５を作成する。
【００５７】
次に、本実施の形態に係る半導体ディスク装置へのデータ書き込み方法について説明する。
【００５８】
図５は、図１における半導体ディスク装置へのデータ書き込み処理のフローチャートである。本処理は、ＣＰＵ２０１がＲＯＭ領域３０１の本処理に対応するプログラムの命令コードを参照して半導体ディスク装置１０８の各構成要素の動作を制御することによって実行する。
【００５９】
図５において、ファイルシステム１０１がデータを書き込み部１０２に送信すると共に、物理ブロックアドレス選択部１０３へ論理ブロックアドレスを送信する。すると、物理ブロックアドレス選択部１０３は、受信した論理ブロックアドレスをブロック管理部１０４へ送信する。該論理ブロックアドレスを受信したブロック管理部１０４はユニット管理部１０７と協働して後述する図６の処理を実行することによって物理ブロックアドレスを検索する（ステップＳ４０１）。
【００６０】
ステップＳ４０１における図６の処理では、ユニット管理部１０７は最短時間ユニットを検索して記憶し、ブロック管理部１０４は最短時間ユニットにおける空きブロックを検索し、検索された空きブロックの物理ブロックアドレスを物理ブロックアドレス選択部１０３に返信する。
【００６１】
次いで、物理ブロックアドレス選択部１０３は受信した物理ブロックアドレスを書き込み部１０２に送信する。書き込み部１０２は、物理ブロックアドレス及びファイルシステム１０１の受信を確認すると、時間計測部１０６にデータの書き込み時間の計測開始指示を送信する（ステップＳ４０２）。時間計測部１０６は携帯電話２００の組み込み機器に備えられたハードウェアタイマを制御することによって書き込み時間の計測を行う。また、ステップＳ４０２における計測開始指示はハードウェアタイマのリセットで代用する。なお、携帯電話２００の組み込み機器にハードウェアタイマが備えられていない場合では、ＲＡＭ２０３上に展開されているソフトウェアカウンタの値を０にリセットすることで代用する。
【００６２】
次いで、書き込み部１０２は、受信した物理ブロックアドレス、ファイルシステム１０１から受信したデータ、及び書き込みコマンドをフラッシュメモリ１０５へ送信する。書き込みコマンドを受信したフラッシュメモリ１０５は、受信した物理ブロックアドレスに基づいて受信したデータを物理ブロックアドレスに対応するブロックに所定の書き込み単位（本実施の形態ではワード単位）で書き込む（ステップＳ４０３）。
【００６３】
次いで、フラッシュメモリ１０５は、書き込み単位分のデータの書き込みが完了したか否かを書き込みステータスレジスタのポーリング等で判別する（ステップステップＳ４０４）。データの書き込みが完了していなければ、ステップＳ４０４へ戻り、データの書き込みが完了していれば、後述のステップＳ４０５へ進む。このとき、書き込み時間の計測は、時間計測部１０６がソフトウェアタイマを用いる場合には、処理がステップＳ４０４に戻る際、ソフトウェアタイマのカウントをインクリメントすることによって行われる。
【００６４】
次いで、ブロックにおいてデータを書き込み可能な場所を示す書き込みアドレスの値を、書き込み単位分のデータに対応する量だけ増加させる（ステップＳ４０５）。具体的には、書き込み単位分のブロックサイズが５１２バイトであれば、書き込みアドレスは（ＰＢＡ＋５１２）で算出される。その後、増加された書き込みアドレスが現在データを書き込んでいるブロックの最大データ書き込み量に対応する書き込みアドレスの範囲を超えたか否かを判別する（ステップＳ４０６）。
【００６５】
ステップＳ４０６の判別の結果、増加された書き込みアドレスがブロックの書き込みアドレスの範囲を超えていない場合は、ステップＳ４０３に戻る。ブロックの書き込みアドレスの範囲を超えている場合は、書き込み部１０２が時間計測部１０６に書き込み時間の計測終了指示を送信する（ステップＳ４０７）。
【００６６】
次いで、時間計測部１０６は、ハードウェアタイマのレジスタを読み込むことによって計測した書き込み時間を取得し、計測した書き込み時間をユニット管理部１０７へ送信することによって計測した書き込み時間の登録を指示する（ステップＳ４０８）。なお、時間計測部１０６がソフトウェアタイマを用いる場合には、ソフトウェアカウンタの値を読み込むことによって計測した書き込み時間を取得する。
【００６７】
次いで、ユニット管理部１０７は、ステップＳ４０３〜Ｓ４０７において書き込み時間を計測されたブロックを有するユニット（以下、「対象ユニット」という。）のユニットヘッダ３０７に受信した書き込み時間を登録すると共に、当該ユニットヘッダ３０７におけるユニットの空きブロック数を１だけデクリメントすることによって対象ユニットを更新する（ステップＳ４０９）。
【００６８】
このとき、ユニット管理部１０７は対象ユニットのユニットヘッダ３０７にアクセスしなくてもよい。例えば、ユニット管理部１０７が、ＲＡＭ２０３上に設けられた各ユニットのユニットヘッダ３０７の内容を管理するユニットヘッダキャッシュテーブルにアクセスする。そして、該ユニットヘッダキャッシュテーブルにおける対象ユニットのユニットヘッダ３０７の内容（空きブロック数や書き込み時間）を更新する。その後、半導体ディスク装置１０８の使用終了時やアイドルタスク等によってＣＰＵ２０１の負荷軽減時に、更新されたユニットヘッダ３０７の内容を含むユニットヘッダキャッシュテーブルを参照して、フラッシュメモリ１０５における各ユニットのユニットヘッダ３０７の内容を更新するのがよい。これにより、半導体ディスク装置１０８の使用中やＣＰＵ２０１の高負荷時に、フラッシュメモリ１０５における各ユニットのユニットヘッダ３０７にアクセスする必要を無くすことができ、もってデータ書き込みをより高速化することができる。
【００６９】
次いで、書き込み部１０２は、データの書き込みの完了をブロック管理部１０４に通知する。さらに、データの書き込みによってブロックの物理ブロックアドレスが変更された場合には、ブロック管理表３０４における論理ブロックアドレスと物理ブロックアドレスとの対応を更新するように指示する（ステップＳ４１０）。論理ブロックアドレスと物理ブロックアドレスとの対応は半導体ディスク装置１０８に対するＦＡＴファイルシステムが読込み処理を行う際に参照するが、読込み処理の詳細については公知技術であるためその説明を省略する。
【００７０】
次に、図５の処理におけるステップＳ４０１の物理ブロックアドレス検索処理について説明する。
【００７１】
図６は、図５における物理ブロックアドレス検索処理のフローチャートである。
【００７２】
図６において、ＣＰＵ２０１は、ファイルシステム１０１が物理ブロックアドレス選択部１０３へ送信した論理ブロックアドレスをＲＡＭ２０３に記憶する（ステップＳ５０１）。ユニットのデータの書き込み時間の最小値を表す変数Ｔｍｉｎを所定の最大値（例えば、各ユニットのユニットヘッダ３０７が記録する全ての書き込み時間よりも大きい値）に設定することによって初期化する。また、ユニットヘッダ３０７に記録された書き込み時間が最短であるユニット（すなわち、最短時間ユニット）の番号を表す変数Ｎｍｉｎを−１に設定することによって初期化する。更に、以降の処理において調査対象となるユニットの番号を表す変数Ｎ（以下、変数Ｎに対応するユニットを「ユニットＮ」という。）を０に設定することによって初期化する（ステップＳ５０２）。なお、このとき、変数Ｔｍｉｎを所定の最大値に設定する代わりに、以降の処理において最初に調査するユニットのデータの書き込み時間に設定してもよい。
【００７３】
次いで、ユニットＮに空きブロックがあるか否かをユニットＮのユニットヘッダ３０７の内容（空きブロック数）に基づいて判別し、空きブロックがあれば、ステップＳ５０４に進み、空きブロックがなければ、ステップＳ５０６に進む。
【００７４】
続くステップＳ５０４では、ユニットＮのユニットヘッダ３０７から書き込み時間Ｔを取得し、書き込み時間Ｔが変数Ｔｍｉｎより小さいか否かを判別する。書き込み時間Ｔが変数Ｔｍｉｎより小さくない場合には、ステップＳ５０６に進み、書き込み時間Ｔが変数Ｔｍｉｎより小さい場合には、Ｔｍｉｎ＝Ｔ（ユニットＮの書き込み時間）とすると共に、Ｎｍｉｎ＝Ｎ（ユニットＮの番号）とする（ステップＳ５０５）。
【００７５】
次いで、変数Ｎを１だけインクリメントし（ステップＳ５０６）、変数Ｎがフラッシュメモリ１０５が有するユニットの数（以下、単に「ユニット数」という。）と等しいか否かを判別する（ステップＳ５０７）。変数Ｎがユニット数と等しくない場合には、ステップＳ５０３に戻り、変数Ｎがユニット数と等しい場合にはステップＳ５０８に進む。
【００７６】
続くステップＳ５０８では、変数Ｎｍｉｎが−１であるか否かを判別し、変数Ｎｍｉｎが−１であれば、後述するユニット再生処理を実行し（ステップＳ５０９）、ステップＳ５０１に戻り、変数Ｎｍｉｎが−１でなければ、ステップＳ５１０に進む。ここで、変数Ｎｍｉｎが−１である場合は、処理がステップＳ５０４及びＳ５０５を経由していないので、空きブロックのあるユニットが存在していない場合に該当する。一方、変数Ｎｍｉｎが−１でない場合は、処理がステップＳ５０４及びＳ５０５を経由しているので、空きブロックのあるユニットが存在する場合に該当する。
【００７７】
ステップＳ５０９では、ユニットＮｍｉｎが有する複数のブロックのうち、所定期間に亘ってデータの書き込みや読み出しが行われていないブロックのデータを消去することによってユニット再生処理を実行する。
【００７８】
次いで、ユニットＮｍｉｎ（最短時間ユニット）が有する複数のブロックから空きブロックを検索し（ステップＳ５１０）、該検索された空きブロックの物理ブロックアドレスを物理ブロックアドレス選択部１０３に返信し（ステップＳ５１１）、本処理を終了する。
【００７９】
図５及び図６の処理によれば、フラッシュメモリ１０５において、ファイルシステム１０１が送信した論理ブロックアドレスに基づいて、データの書き込み時間が最も短いユニットにおける空きブロックの物理ブロックアドレスが検索される。そして、該検索された物理ブロックアドレスのブロックにデータが書き込まれるため、データの書き込みの際、各ユニットのデータの書き込み時間を考慮することができ、データの書き込み速度を最適に高速化することができる。
【００８０】
また、ブロックにデータを書き込む際、データの書き込み時間が計測されるので、データを書き込むブロックを有するユニットのデータの書き込み時間を逐次更新することができ、データの書き込み時間に関する情報を最新のものに維持することができる。
【００８１】
また、キャッシュメモリやバッファといったメインメモリ上に一時的に書き込む速度を最適に高速化するのではなく、上述したように、フラッシュメモリ１０５におけるデータの書き込み速度を最適に高速化することができる。
【００８２】
次に、本発明の第２の実施の形態に係る半導体ディスク装置及び該装置へのデータ書き込み方法について説明する。
【００８３】
本実施の形態は、その構成、作用が上述した第１の実施の形態と基本的に同じであり、データの書き込みの際、各ユニットのデータの書き込み時間だけでなく、データの消去回数も考慮する点で異なるのみである。したがって、重複した構成、作用については説明を省略し、以下に異なる構成、作用についての説明を行う。
【００８４】
通常、フラッシュメモリにおいて書き込み／消去を繰り返すと、セル内の酸化膜が劣化して値を識別するための閾値電圧が変化する。その結果、セル内の浮遊ゲートに電子をチャージ／ディスチャージする時間が長くなり、図８のグラフに示すように、フラッシュメモリの動作に要する時間が長くなるという問題がある。
【００８５】
ここで、書き込み時間のみをユニット選択の条件に用いる第１の実施の形態における図６の処理であっても、各ユニットの使用頻度を分散させることによってデータの消去回数を平準化し、フラッシュメモリの動作に要する時間が長くなるのを抑制することができる。しかし、単に各ユニットの使用頻度を分散させるだけでは、結局、書き込み時間に重みが置かれるため、あるユニットのデータの消去回数が補償値に達したとき、データの消去回数が補償値内に留まるユニットが数多く存在する可能性がある。
【００８６】
本実施の形態に係る半導体ディスク装置及び該装置へのデータ書き込み方法は、これに対応して、上述したように、データの書き込みの際、データの消去回数も書き込み時間と同等の重みを持って考慮する。
【００８７】
図７は、本実施の形態における物理ブロックアドレス検索処理のフローチャートである。
【００８８】
図７において、ＣＰＵ２０１は、ファイルシステム１０１が物理ブロックアドレス選択部１０３へ送信した論理ブロックアドレスをＲＡＭ２０３に記憶する（ステップＳ６０１）。ユニットにおけるデータの書き込み時間の最小値を表す変数Ｔｍｉｎを所定の最大値（例えば、各ユニットのユニットヘッダ３０７が記録する全ての書き込み時間よりも大きい値）に設定することによって初期化する。また、ユニットにおけるデータの消去回数の最小値を表す変数Ｅｍｉｎを所定の最大値（例えば、各ユニットのユニットヘッダ３０７が記録する全ての消去回数よりも大きい値）に設定することによって初期化する。更に、ユニットヘッダ３０７に記録されたデータの書き込み時間とデータの消去回数の積が最小のユニットの番号を表す変数Ｎｍｉｎを−１に設定することによって初期化する。また、以降の処理において調査対象となるユニットの番号を表す変数Ｎを０に設定することによって初期化する（ステップＳ６０２）。なお、このとき、変数Ｔｍｉｎを所定の最大値に設定する代わりに、以降の処理において最初に調査するユニットのデータの書き込み時間に設定してもよい。また、変数Ｔｍｉｎ及びＥｍｉｎの初期値は、変数Ｔｍｉｎ＊Ｅｍｉｎの値が演算精度の範囲を越えないように設定する。
【００８９】
次いで、ユニットＮに空きブロックがあるか否かをユニットＮのユニットヘッダ３０７の内容（空きブロック数）に基づいて判別し、空きブロックがあれば、ステップＳ６０４に進み、空きブロックがなければ、ステップＳ６０６に進む。
【００９０】
続くステップＳ６０４では、ユニットＮのユニットヘッダ３０７から書き込み時間Ｔ及び消去回数Ｅを取得し、Ｔ＊ＥがＴｍｉｎ＊Ｅｍｉｎより小さいか否かを判別し、Ｔ＊ＥがＴｍｉｎ＊Ｅｍｉｎより小さくない場合には、ステップＳ６０６に進む。一方、Ｔ＊ＥがＴｍｉｎ＊Ｅｍｉｎより小さい場合には、Ｔｍｉｎ＝Ｔ（ユニットＮの書き込み時間）とし、Ｅｍｉｎ＝Ｅ（ユニットＮの消去回数）とし、Ｎｍｉｎ＝Ｎ（ユニットＮの番号）とする（ステップＳ６０５）。
【００９１】
次いで、変数Ｎを１だけインクリメントし（ステップＳ６０６）、変数Ｎがユニット数と等しいか否かを判別する（ステップＳ６０７）。変数Ｎがユニット数と等しくない場合には、ステップＳ６０３に戻り、変数Ｎがユニット数と等しい場合にはステップＳ６０８に進む。
【００９２】
続くステップＳ６０８では、変数Ｎｍｉｎが−１であるか否かを判別し、変数Ｎｍｉｎが−１であれば、ユニット再生処理を実行し（ステップＳ６０９）、ステップＳ６０１に戻り、変数Ｎｍｉｎが−１でなければ、ステップＳ６１０に進む。ここで、変数Ｎｍｉｎが−１である場合は、処理がステップＳ６０４及びＳ６０５を経由していないので、空きブロックのあるユニットが存在していない場合に該当する。変数Ｎｍｉｎが−１でない場合は、処理がステップＳ６０４及びＳ６０５を経由しているので、空きブロックのあるユニットが存在する場合に該当する。
【００９３】
次いで、ユニットＮｍｉｎが有する複数のブロックから空きブロックを検索し（ステップＳ６１０）、該検索された空きブロックの物理ブロックアドレスを物理ブロックアドレス選択部１０３に返信し（ステップＳ６１１）、本処理を終了する。
【００９４】
図７の処理によれば、フラッシュメモリ１０５において、ファイルシステム１０１が送信した論理ブロックアドレスに基づいて、データの書き込み時間とデータの消去回数の積が最小のユニットにおける空きブロックの物理ブロックアドレスが検索される。そして、該検索された物理ブロックアドレスのブロックにデータが書き込まれる。このため、データの書き込みの際、各ユニットのデータの書き込み時間だけでなくデータの消去回数を考慮することができ、データの書き込み速度を最適に高速化することができると共に、フラッシュメモリ１０５の寿命を延ばすことができる。
【００９５】
上述した各実施の形態に係る半導体ディスク装置が適用される携帯機器は、ＦＡＴファイルシステム等のファイルシステムを備えている。しかしながら、本発明の半導体ディスク装置はファイルシステムに依存しないブロック型記憶装置であるため、本発明はファイルシステムを備えていない携帯機器の半導体ディスク装置にも適用することができる。
【００９６】
また、上述した図５の処理では、データをフラッシュメモリ１０５のブロックにワード単位で書き込んだが、データの書き込み単位はこれに限られず、データをバイト単位で書き込んでもよい。したがって、本発明はバイト単位でデータを書き込む半導体ディスク装置にも適用することができる。
【００９７】
また、本発明の目的は、前述した各実施の形態の機能を実現するソフトウェアのプログラムコードを記憶した記憶媒体を、システム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）が記憶媒体に格納されたプログラムコードを読み出し実行することによっても達成される。
【００９８】
この場合、記憶媒体から読み出されたプログラムコード自体が前述した各実施の形態の機能を実現することになり、そのプログラムコード及び該プログラムコードを記憶した記憶媒体は本発明を構成することになる。
【００９９】
また、プログラムコードを供給するための記憶媒体としては、例えば、ＲＡＭ、ＮＶ−ＲＡＭ、フロッピー（登録商標）ディスク、ハードディスク、光ディスク、ＣＤ−ＲＯＭ、ＭＯ、ＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ（ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＤＶＤ−ＲＷ、ＤＶＤ＋ＲＷ）、磁気テープ、不揮発性のメモリカード、他のＲＯＭ等の上記プログラムコードを記憶できるものであればよい。或いは、上記プログラムコードは、インターネット、商用ネットワーク、若しくはローカルエリアネットワーク等に接続される不図示の他のコンピュータやデータベース等からダウンロードすることにより供給されてもよい。
【０１００】
また、コンピュータが読み出したプログラムコードを実行することにより、上記実施の形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているＯＳ（オペレーティングシステム）等が実際の処理の一部又は全部を行い、その処理によって上述した実施の形態の機能が実現される場合も含まれる。
【０１０１】
更に、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵ等が実際の処理の一部又は全部を行い、その処理によって上述した実施の形態の機能が実現される場合も含まれる。
【０１０２】
上記プログラムコードの形態は、オブジェクトコード、インタプリタにより実行されるプログラムコード、ＯＳ（オペレーティングシステム）に供給されるスクリプトデータ等の形態から成ってもよい。
【図面の簡単な説明】
【０１０３】
【図１】本発明の第１の実施の形態に係る半導体ディスク装置が適用された携帯機器のハードウェアの概略構成を示すブロック図である。
【図２】図１における半導体ディスク装置の概略構成を示すブロック図である。
【図３】図１の携帯電話における組み込み機器のメモリ構成のメモリマップを示す図である。
【図４】図３におけるブロック管理表を作成するブロック管理表作成処理のフローチャートである。
【図５】図１における半導体ディスク装置へのデータ書き込み処理のフローチャートである。
【図６】図５における物理ブロックアドレス検索処理のフローチャートである。
【図７】本発明の第２の実施の形態における物理ブロックアドレス検索処理のフローチャートである。
【図８】フラッシュメモリの書き込み／消去回数と動作時間との関係を示すグラフである。
【符号の説明】
【０１０４】
１０１  ファイルシステム
１０２  書き込み部
１０３  物理ブロックアドレス選択部
１０４  ブロック管理部
１０５  フラッシュメモリ
１０６  時間計測部
１０７  ユニット管理部
１０８  半導体ディスク装置
２００  携帯電話
２０１  ＣＰＵ
２０２  ＲＯＭ
２０３  ＲＡＭ
２０５  バス
３００  メモリマップ
３０１  ＲＯＭ領域
３０２  ＲＡＭ領域
３０３  フラッシュメモリ領域
３０４  ブロック管理表
３０５  ユニット管理表
３０６  ブロックマップブロック
【図１】
2007094734.tif 000003
【図２】
2007094734.tif 000004
【図３】
2007094734.tif 000005
【図４】
2007094734.tif 000006
【図５】
2007094734.tif 000007
【図６】
2007094734.tif 000008
【図７】
2007094734.tif 000009
【図８】
2007094734.tif 000010