(57)【要約】【課題】ディスクへの書き込み時の電源断により失われるデータを最小限にする。【解決手段】ホスト装置よりライトコマンド、およびシンクロナイズ・キャッシュ・コマンドを受領して待ち行列を入れ、待ち行列上のライトコマンドをファイルのデータに対するライトコマンドとファイルに対応するメタデータに対するライトコマンドとに判別し、シンクロナイズ・キャッシュ・コマンドが受領されたとき、それ以前に受領された待ち行列上の各ライトコマンドをグループ化し、グループ内でファイルのデータに対するライトコマンドをメタデータに対するライトコマンドよりもディスクに優先して書き込まれるように各ライトコマンドに対してＨＤＤへの書き込み順番を付与し、この書き込み順番に従って各ライトコマンドを実行する。【選択図】図５
2010015610.tif 000002
【特許請求の範囲】
【請求項１】
ディスクに対する書き込みを制御する情報処理装置であって、
ホスト装置よりライトコマンド、および前記ライトコマンドに関するキャッシュを制御する制御コマンドを受領するコマンド受領部と、
前記コマンド受領部にて受領された前記コマンドの待ち行列を記憶する待ち行列記憶部と、
前記待ち行列上の前記ライトコマンドをファイルのデータに対する第１のライトコマンドと前記ファイルに対応するメタデータに対する第２のライトコマンドとに判別し、前記コマンド受領部にて前記制御コマンドが受領されたとき、それ以前に受領された前記待ち行列上の１以上の前記第１のライトコマンドおよび１以上の前記第２のライトコマンドをグループ化し、当該グループ内で前記第１のライトコマンドを前記第２のライトコマンドよりも前記ディスクに優先して書き込まれるように前記各ライトコマンドに対して実行の順番を付与し、この順番に従って前記各ライトコマンドを実行するように制御を行う制御部と
を具備する情報処理装置。
【請求項２】
請求項１に記載の情報処理装置であって、
前記第１のライトコマンドは連続性を有するデータに対するものを含み、
前記制御部は、前記ディスクの記憶領域上で連続する位置に前記ファイルのデータを書き込むための複数の前記第１のライトコマンドを判断し、これら第１のライトコマンドに対して前記待ち行列上での連結情報を付与する
情報処理装置。
【請求項３】
請求項２に記載の情報処理装置であって、
前記待ち行列上の前記第１のライトコマンドのファイルのデータを保持するバッファ部をさらに有し、
前記制御部は、前記バッファ部に保持された前記ファイルのデータに対する更新データを書き込むための新たな前記第１のライトコマンドが前記コマンド受領部にて受領されたとき、前記ホスト装置からの当該ファイルのデータに対するリードコマンドに対する応答を禁止するための情報を前記待ち行列上の前記第１のライトコマンドに付与する
情報処理装置。
【請求項４】
請求項３に記載の情報処理装置であって、
前記ディスクにおいて前記ファイルのデータが書き込まれる第１の記憶領域と前記メタデータが書き込まれる第２の記憶領域とが空間的に分けられ、
前記制御部は、前記ディスクの記憶領域上で連続する位置に前記ファイルのデータを書き込むための複数の前記第１のライトコマンドの実行の順番を、前記記憶領域上の前記第２の領域に近い方から前記ディスクに優先して書き込まれるように前記複数の第１のライトコマンドに対して実行の順番を付与し、この順番に従って前記複数の第１のライトコマンドを実行するように制御を行う
情報処理装置。
【請求項５】
ディスクに対する書き込みを行う情報処理装置の制御方法であって、
ホスト装置よりライトコマンド、および前記ライトコマンドに関するキャッシュを制御する制御コマンドを受領して待ち行列を入れ、
前記待ち行列上の前記ライトコマンドをファイルのデータに対する第１のライトコマンドと前記ファイルに対応するメタデータに対する第２のライトコマンドとに判別し、
前記コマンド受領部にて前記制御コマンドが受領されたとき、それ以前に受領された前記待ち行列上の１以上の前記第１のライトコマンドおよび１以上の前記第２のライトコマンドをグループ化し、
当該グループ内で前記第１のライトコマンドを前記第２のライトコマンドよりも前記ディスクに優先して書き込まれるように前記各ライトコマンドに対して実行の順番を付与し、
前記付与された順番に従って前記各ライトコマンドを実行する
情報処理装置の制御方法。
【請求項６】
ディスクに対する書き込みを制御するプログラムであって、
ホスト装置よりライトコマンド、および前記ライトコマンドに関するキャッシュを制御する制御コマンドを受領するコマンド受領部と、
前記コマンド受領部にて受領された前記コマンドの待ち行列を記憶する待ち行列記憶部と、
前記待ち行列上の前記ライトコマンドをファイルのデータに対する第１のライトコマンドと前記ファイルに対応するメタデータに対する第２のライトコマンドとに判別し、前記コマンド受領部にて前記制御コマンドが受領されたとき、それ以前に受領された前記待ち行列上の１以上の前記第１のライトコマンドおよび１以上の前記第２のライトコマンドをグループ化し、当該グループ内で前記第１のライトコマンドを前記第２のライトコマンドよりも前記ディスクに優先して書き込まれるように前記各ライトコマンドに対して実行の順番を付与し、この順番に従って前記各ライトコマンドを実行するように制御を行う制御部
として、情報処理装置が内蔵するコンピュータに対して機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理装置の制御方法、およびプログラムに関する。
【背景技術】
【０００２】
カムコーダのような民生機器で映像ストリームをハードディスク装置やメモリカードのようなブロックＩ／Ｏを持つデバイスに記録する時、最初に複数のファイルがオープンされ、これらのファイルにデータが追記される。これらのファイルは全体としてストリームを構成するので、一部のファイルが破壊された場合でも、長時間のストリームを失うことがある。
【０００３】
これに対して、ハードディスク装置は、転送性能を上げるためにライト用のバッファ（ライトキャッシュ）を持つ。また、ハードディスク装置は振動や衝撃に対して弱いので、安定した記録を行う目的でできるだけ大きな容量のライトキャッシュを持つ傾向にある。そのため、もしライト中に電源断が起こり、ライトキャッシュの中にあるデータが失われた場合の損害の規模は大きくなる。
【０００４】
そこで、ライトキャッシュにあるデータを全てハードディスク装置に書き込むことを命令するシンクロナイズ・キャッシュ・コマンドが用意されている（例えば、特許文献１参照。）。ホスト装置は、転送するデータの種類やデータの重要度などに応じてシンクロナイズ・キャッシュ・コマンドを発行する頻度を最適に選定する。例えば、映像ストリームなどの場合には、１フレームのデータのライトコマンドが発行された後にシンクロナイズ・キャッシュ・コマンドを発行してフレームデータのハードディスク装置への書き込みを保証するようにしている。
【０００５】
本発明は待ち行列上でライトコマンドのＨＤＤへの書き込み順番をグループの単位で、ファイルのライトコマンドとメタデータのライトコマンドとに分けて最適化するものであるが、特許文献１には、ホスト装置より受領したライトコマンドと連続してアクセスを行うことができるライトコマンドを待ち行列全体の中から検索する技術が記載されている。
【特許文献１】特開平６−２５９１８８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ホスト装置から発行されてディスク記憶装置にて受領されたライトコマンドの情報は待ち行列に登録される。ディスク記憶装置は、シンクロナイズ・キャッシュ・コマンドに応じて、待ち行列から受領順にライトコマンドに関する情報を読み込んで、ＨＤＤへの書き込み処理を行う。ホスト装置からはライトコマンドとして、ファイルのライトコマンドと、当該ファイルの実データの配置情報等を与えるメタデータのライトコマンドとが発行されるが、メタデータのライトコマンドが必ずしもファイルのライトコマンドの後にホスト装置より発行される保証はなく、ＨＤＤへの書込みが必ずしも発行された順番に行われる保障もない。このため、シンクロナイズ・キャッシュ・コマンドの実行中の電源断によって、メタデータのみがＨＤＤに書き込まれ、ファイルの実データがＨＤＤに正しく書き込まれない場合がありえた。この場合には、メタデータにより記録されていることが確定されているファイルが実際には正しく記録されていないという不整合が起こり、複数のファイルでストリームが構成される場合に長時間分のストリームを失うおそれがあった。
【０００７】
以上のような事情に鑑み、本発明の目的は、ディスクへの書き込み時の電源断により失われるデータを最小限にすることのできる情報処理装置、情報処理装置の制御方法、およびプログラムを提供することにある。
【課題を解決するための手段】
【０００８】
上記の課題を解決するために、本発明の第１の観点に基づく情報処理装置は、ディスクに対する書き込みを制御するディスク記憶装置であって、ホスト装置よりライトコマンド、および前記ライトコマンドに関するキャッシュを制御する制御コマンドを受領するコマンド受領部と、前記コマンド受領部にて受領された前記コマンドの待ち行列を記憶する待ち行列記憶部と、前記待ち行列上の前記ライトコマンドをファイルのデータに対する第１のライトコマンドと前記ファイルに対応するメタデータに対する第２のライトコマンドとに判別し、前記コマンド受領部にて前記制御コマンドが受領されたとき、それ以前に受領された前記待ち行列上の１以上の前記第１のライトコマンドおよび１以上の前記第２のライトコマンドをグループ化し、当該グループ内で前記第１のライトコマンドを前記第２のライトコマンドよりも前記ディスクに優先して書き込まれるように前記各ライトコマンドに対して実行の順番を付与し、この順番に従って前記各ライトコマンドを実行するように制御を行う制御部とを具備する。
【０００９】
本発明によれば、待ち行列上のグループ内で、ファイルのデータを書き込むための第１のライトコマンドを、メタデータを書き込むための第２のライトコマンドに比較してディスクに優先して書き込まれるように、書き込みの実行の順番を決めることによって、制御コマンドの実行中の電源断によってメタデータだけがディスクに書き込まれることを防止でき、メタデータにより記録されていることが確定されているファイルが実際には正しく記録されていないという不整合が起こるのを防止でき、長時間分のストリームを失う危険を軽減できる。
【００１０】
前記第１のライトコマンドは連続性を有するデータに対するものを含み、前記制御部は、前記ディスクの記憶領域上で連続する位置に前記ファイルのデータを書き込むための複数の前記第１のライトコマンドを判断し、これら第１のライトコマンドに対して前記待ち行列上での連結情報を付与するものとしてもよい。これにより、複数の第１のライトコマンドをこれと等価な１つのライトコマンドにまとめてディスクへの書き込み処理を行うことができる。
【００１１】
また、前記待ち行列上の前記第１のライトコマンドのファイルのデータを保持するバッファ部をさらに有し、前記制御部は、前記バッファ部に保持された前記ファイルのデータに対する更新データを書き込むための新たな前記第１のライトコマンドが前記コマンド受領部にて受領されたとき、前記ホスト装置からの当該ファイルのデータに対するリードコマンドに対する応答を禁止するための情報を前記待ち行列上の前記第１のライトコマンドに付与することとしてもよい。これにより、バッファ部に保持された、ファイルの更新前の古いデータが、ホスト装置へ応答される不具合を回避することができる。
【００１２】
前記ディスクにおいて前記ファイルのデータが書き込まれる第１の記憶領域と前記メタデータが書き込まれる第２の記憶領域とが空間的に分けられ、前記制御部は、前記ディスクの記憶領域上で連続する位置に前記ファイルのデータを書き込むための複数の前記第１のライトコマンドの実行の順番を、前記記憶領域上の前記第２の領域に近い方から前記ディスクに優先して書き込まれるように前記複数の第１のライトコマンドに対して実行の順番を付与し、この順番に従って前記複数の第１のライトコマンドを実行するように制御を行うことにしてもよい。これにより、ヘッドのトータル的なシーク距離を小さくすることができる。
【００１３】
本発明の第２の観点に基づく情報処理装置の制御方法は、ディスクに対する書き込みを行う情報処理装置の制御方法であって、ホスト装置よりライトコマンド、および前記ライトコマンドに関するキャッシュを制御する制御コマンドを受領して待ち行列を入れ、前記待ち行列上の前記ライトコマンドをファイルのデータに対する第１のライトコマンドと前記ファイルに対応するメタデータに対する第２のライトコマンドとに判別し、前記コマンド受領部にて前記制御コマンドが受領されたとき、それ以前に受領された前記待ち行列上の１以上の前記第１のライトコマンドおよび１以上の前記第２のライトコマンドをグループ化し、当該グループ内で前記第１のライトコマンドを前記第２のライトコマンドよりも前記ディスクに優先して書き込まれるように前記各ライトコマンドに対して実行の順番を付与し、前記付与された順番に従って前記各ライトコマンドを実行する。
【００１４】
本発明の第３の観点に基づくプログラムは、ディスクに対する書き込みを制御するプログラムであって、ホスト装置よりライトコマンド、および前記ライトコマンドに関するキャッシュを制御する制御コマンドを受領するコマンド受領部と、前記コマンド受領部にて受領された前記コマンドの待ち行列を記憶する待ち行列記憶部と、前記待ち行列上の前記ライトコマンドをファイルのデータに対する第１のライトコマンドと前記ファイルに対応するメタデータに対する第２のライトコマンドとに判別し、前記コマンド受領部にて前記制御コマンドが受領されたとき、それ以前に受領された前記待ち行列上の１以上の前記第１のライトコマンドおよび１以上の前記第２のライトコマンドをグループ化し、当該グループ内で前記第１のライトコマンドを前記第２のライトコマンドよりも前記ディスクに優先して書き込まれるように前記各ライトコマンドに対して実行の順番を付与し、この順番に従って前記各ライトコマンドを実行するように制御を行う制御部として、ディスク記憶装置が内蔵するコンピュータに対して機能させるものである。
【発明の効果】
【００１５】
以上のように、本発明によれば、ディスクへの書き込み時の電源断により失われるデータを最小限にすることができる。
【発明を実施するための最良の形態】
【００１６】
以下、本発明の実施の形態を図面に基づき説明する。
【００１７】
図１は本発明の一実施形態に係る情報処理装置としてのディスク記憶装置の構成を示すブロック図である。
【００１８】
同図に示すように、本実施形態のディスク記憶装置１０は、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ Ｓｅｒｉａｌ Ｂｕｓ）インタフェース制御部１１、内部バス１２、インタフェース制御部１３、制御部１４、メモリ制御部１５、バッファメモリ１６、ＨＤＤ１７（ハードディスクドライブ）１７、メモリ１８、およびＣＰＵ（Ｃｅｎｔｒａｌ Ｐｒｏｃｅｓｓｉｎｇ Ｕｎｉｔ）１９を有する。
【００１９】
ＵＳＢインタフェース制御部１１は、ホスト装置２０のＵＳＢインタフェース制御部２１との間でのインタフェースを制御するモジュールである。ホスト装置２０は、例えばビデオカメラ、カムコーダ等の電子機器であり、ＣＰＵ２２、メモリ２３、撮像部２４、録画部２５などを備える。ＵＳＢインタフェース制御部１１は、ホスト装置２０のＵＳＢインタフェース制御部２１より送られてきたライトコマンドを内部バス１２を通じて制御部１４に供給したり、ホスト装置２０より転送された書き込み用のデータを、ＵＳＢインタフェース制御部１１内のＥＰ（Ｅｎｄ ｐｏｉｎｔ ＦＩＦＯ）１１１に一杯になるまで保存し、一杯になったところで内部バス１２を通じてメモリ制御部１５に転送する。なお、ディスク記憶装置１０とホスト装置２０との間のインタフェースはＵＳＢ方式に限らず、その他、ＩＥＥＥ １３９４など、ＵＳＢと同等もしくはそれ以上の転送速度のインタフェースに変更してもよい。
【００２０】
内部バス１２は、ディスク記憶装置１０内の各モジュール間でコマンドおよびデータを伝送する伝送路である。
【００２１】
メモリ制御部１５は、内部バス１２を通じてＵＳＢインタフェース制御部１１より取得
【００２２】
バッファメモリ１６は、ＨＤＤ１７に転送される書き込み用データが一時的に保持されるライトバッファのほかに、ＨＤＤ１７から転送された読み出しデータがホスト装置２０へ転送される前に一時的に保持するリードバッファを有する。
【００２３】
インタフェース制御部１３は、ＨＤＤ１７との間のインタフェースを制御するモジュールである。
【００２４】
制御部１４は、ホスト装置２０より受領したライトコマンド（例えばＳＣＳＩ Ｗｒｉｔｅ（１０）コマンドなど）およびシンクロナイズ・キャッシュ・コマンドに関する情報をメモリに設けられた待ち行列に登録して所定の処理を行う一方、登録に対して非同期に待ち行列の情報を読み出して、ＨＤＤ１７で解釈可能な形式のライトコマンド（例えばＡＴＡコマンドなど）に変換してインタフェース制御部１３を通じてＨＤＤ１７に与える。
【００２５】
ＣＰＵ１９は、上記内部バス１２を通じた各モジュール間でのコマンドやデータのやりとりなど、ディスク記憶装置１０全体の総括的な制御を行う。メモリ１８は、制御部１５、ＣＰＵ１９の作業領域などとして利用される。
【００２６】
ホスト装置２０は、ＨＤＤ１７にデータを書き込みたい場合にライトコマンドを発行する。
【００２７】
図２はライトコマンドの構成を示す図である。このライトコマンドには、ＣＤＢ（Ｃｏｍｍａｎｄ Ｄｅｓｃｒｉｐｔｏｒ Ｂｌｏｃｋ）データであるコマンドの種類を示す操作コード（Ｏｐｅｒａｔｉｏｎ Ｃｏｄｅ）、ＬＢＡ、長さなどを含む。操作コードはライトコマンドの種類に対応したコードである。ＬＢＡは、ＨＤＤ１７に書き込むデータの先頭のＬＢＡである。長さは書き込むデータの長さである。ディスク記憶装置は、ホスト装置２０より当該ライトコマンドを受領したとき、待ち行列に当該ライトコマンドに関する情報を格納する。待ち行列に格納されるライトコマンドに関する情報については後で説明する。
【００２８】
また、ホスト装置２０は、ライトキャッシュ上のデータを全てＨＤＤ１７に記録させるために、待ち行列に蓄えられた全てのライトコマンドを実行するシンクロナイズ・キャッシュ・コマンドと呼ばれるライトキャッシュ制御コマンドを発行する。
【００２９】
図３はこのシンクロナイズ・キャッシュ・コマンドの構成を示す図である。このシンクロナイズ・キャッシュ・コマンドには、ＣＤＢ（Ｃｏｍｍａｎｄ Ｄｅｓｃｒｉｐｔｏｒ Ｂｌｏｃｋ）データであるコマンドの種類を示す操作コード（Ｏｐｅｒａｔｉｏｎ Ｃｏｄｅ）、ＩＭＭＥＤ、ＬＢＡ、ブロック数などを含む。操作コードはシンクロナイズ・キャッシュ・コマンドの種類に対応したコードである。ＩＭＭＥＤは、ＨＤＤ１７へのデータの書き込み完了の通知をホスト装置２０が受けるかどうかを指定する情報であり、通知を受ける場合には"０"、受けない場合には"１"が指定される。すなわち、ＩＭＭＥＤ＝０の場合にはＨＤＤ１７へのデータの書き込み完了の通知をホスト装置２０が受けるまで次のライトコマンドを発行できず、ＩＭＭＥＤ＝１の場合にはＨＤＤ１７へのデータの書き込み完了の通知を待たずにホスト装置２０は次のライトコマンドを発行することができる。より具体的には、ＩＭＭＥＤ＝１の場合、ディスク記憶装置は、ライトバッファのデータをＨＤＤ１７へ吐き出すために、既に受領済みの各ライトコマンドが指定する開始ＬＢＡおよび長さなどが正当であることを確認した時点でこの旨を示すＧｏｏｄ Ｓｔａｔｕｓなどのステータスをホスト装置２０に返し、ホスト装置２０はこれを確認して次のライトコマンドを発行する。ＬＢＡはＨＤＤ１７に吐き出すデータの先頭のＬＢＡ、ＨＤＤ１７に吐き出すデータのブロック数である。但し、ブロック数として"００ｈ"が指定された場合には、ライトキャッシュ上の全てのデータがＨＤＤ１７に吐き出される。以下、ブロック数として"００ｈ"が指定された場合について説明を行うこととする。
【００３０】
データをＨＤＤ１７へより確実に書き込むためには、ＩＭＭＥＤ＝０として、ＨＤＤ１７へのデータの書き込み完了を確認してから次のライトコマンドを発行する必要がある。しかし、この場合、ライトキャッシュの利用効率が落ち、データ転送性能が低下する、あるいは振動等で一時的に書き込みができない場合に、すぐにエラーとなってしまうなどの問題がある。そこで、本実施形態ではホスト装置２０はＩＭＭＥＤ＝１とすることに定められている。
【００３１】
次に、図４を参照してＦＡＴ３２ファイルシステムについて説明する。ＦＡＴ３２ファイルシステムでは、ＨＤＤ１７のディスク記憶領域におけるアクセス最小単位であるセクタを複数個（２のべき乗個）まとめて１クラスタとし、ファイルデータを管理する最小単位とする。クラスタにはＬＢＡの値の小さい方から順にクラスタ番号が割り振られる。以下の説明ではオフセット（クラスタ番号０のクラスタをＬＢＡ空間のどこに配置するか）を無視して、クラスタ番号を、ＬＢＡを単に１６で割ったものとする。この場合、１クラスタは８Ｋバイトである。
【００３２】
図４において、ＦＡＴ(Ｆｉｌｅ Ａｌｌｏｃａｔｉｏｎ Ｔａｂｌｅ) ３１はファイルのデータが、どのクラスタにどのような順番で格納されているかを示す連結情報が記録されるテーブルである。そのためＦＡＴ３１内ではＬＢＡではなくクラスタ番号が用いられる。ＦＡＴファイルシステムで管理される記憶領域は、ＭＢＲ／ＰＢＲ領域３２、ＦＡＴ領域３３、ファイルとディレクトリデータ領域３４から構成される。
【００３３】
ＭＢＲ／ＰＢＲ領域３２は、ＭＢＲ （Ｍａｓｔｅｒ Ｂｏｏｔ Ｒｅｃｏｒｄ）とＰＢＲ（Ｐａｒｔｉｔｉｏｎ Ｂｏｏｔ Ｒｅｃｏｒｄ）のための記録領域であり、そのＬＢＡ空間内での位置は固定である。ＦＡＴ領域３３は、ファイルの実データが格納されたクラスタ番号の連結情報が記録される領域である。ＦＡＴ領域３３の位置もＬＢＡ空間内で固定である。ファイルとディレクトリデータ領域３４は、ファイルの実データと、ファイルを整理・管理するためのディレクトリデータ（ディレクトリ項目）が記録される領域である。ディレクトリ項目は、ファイル毎に、ファイル名と、このファイル名に対応するファイルのデータが先頭が記録されているクラスタの番号（開始クラスタ番号）とを含む。
【００３４】
ファイルシステムは、ファイルを読み込み場合、ディレクトリ項目から、読み込みの対象として指定されたファイル名を検索し、このファイル名に対応する開始クラスタ番号を読み込む。ファイルシステムは、読み込んだ開始クラスタ番号が指しているクラスタからデータを読み込み、続いて、ＦＡＴ領域３３を参照して当該開始クラスタ番号のクラスタの次のクラスタを確認し、そのクラスタからデータを読み込む。以降、同様にファイルシステムは、ＦＡＴ領域３３を参照しながら次々に連結されるクラスタからデータを読み込む。最後に、ファイルシステムは、ＦＡＴ領域３３からファイルのデータの終わりを示すＥＯＦ（Ｅｎｄ ｏｆ Ｆｉｌｅ）を確認したところで、ファイルのデータの読み込みを終了する。
【００３５】
なお、ディレクトリ項目には親ディレクトリや子ディレクトリへのポインタ、アクセス時間等のメタ情報も格納されている。また、カムコーダ等の民生機器では、アプリケーションソフトが特定のデータやディレクトリを、定められたＬＢＡの範囲（アプリケーション予約領域３５）におくこともある。
【００３６】
次に、本実施形態のディスク記憶装置において、ホスト装置２０より受領したライトコマンドおよびシンクロナイズ・キャッシュ・コマンドに基づく待ち行列の処理について説明する。
【００３７】
図７はホスト装置２０より受領したライトコマンドおよびシンクロナイズ・キャッシュ・コマンドに関する情報を格納する待ち行列の例を示す図である。
【００３８】
まず、この図を用いて、待ち行列に格納される情報の構成について説明する。待ち行列には、ライトコマンドおよびシンクロナイズ・キャッシュ・コマンドを受領する毎に、それぞれのコマンドに関する情報が格納される。待ち行列に格納されるコマンドに関する情報には、順番、コマンドの種類、アドレスタイプ、開始ＬＢＡ、ＨＤＤ１７への書き込み順番、連結フラグ、連結先のポインタ、ノーリターンフラグ等がある。
【００３９】
順番は、待ち行列に情報が格納された順番、言い換えればホスト装置２０より受領したライトコマンドおよびシンクロナイズ・キャッシュ・コマンドの順番である。コマンドの種類はそのコマンドがライトコマンド（Ｗｒｉｔｅ）であるか、シンクロナイズ・キャッシュ・コマンド（Ｓｙｎｃｈｒｏｎｉｚｅ）であるかを示す情報である。アドレスタイプは、ライトコマンドに含まれる開始ＬＢＡと長さによって判定され、当該ライトコマンドが予約領域（ＦＡＴ領域３３）への書き込みを指示するコマンドであるか、ファイルとディレクトリデータ領域３４への書き込みを指示するコマンドであるかを識別する情報である。ＨＤＤ１７への書き込み順番は、ライトコマンドによるＨＤＤ１７への実際の書き込み処理を実行する順番である。連結フラグは、ライトコマンドで指定されるＬＢＡの範囲が他のライトコマンドで指定されるＬＢＡの範囲と連続しているか否かを示すフラグであり、連続している場合は"１"がセットされ、連続していない場合には"０"がセットされる。連結先のポインタは、連結フラグが"１"であるエントリに対する連結先であるエントリとその連結の前後関係を示す情報である。ノーリターンフラグは、当該ライトコマンドに関連付けてバッファメモリ１６に格納されているライト用のデータを、ホスト装置２０からのリードコマンドに対して応答しないようにするためのフラグであり、これが"１"のとき応答しないこととする。
【００４０】
ホスト装置２０は、シンクロナイズ・キャッシュ・コマンドを発行した後、ディスク記憶装置からのＨＤＤ１７へのデータの書き込み完了の通知を要することなく次のライトコマンドを発行するモード（ＩＭＭＥＤ＝１）で動作するので、待ち行列には、例えば図７に示すように、シンクロナイズ・キャッシュ・コマンドのエントリの後に次のライトコマンドのエントリが追加して格納される状況が発生する。
【００４１】
例えば、図７は、６つのライトコマンド（受領順番１−６）、シンクロナイズ・キャッシュ・コマンド（受領順番７）、５つのライトコマンド（受領順番８−１２）、シンクロナイズ・キャッシュ・コマンド（受領順番１３）、２つのライトコマンド（受領順番１４−１５）、シンクロナイズ・キャッシュ・コマンド（受領順番１６）、１つのライトコマンド（受領順番１７）を順に受領した場合の待ち行列を示している。
【００４２】
ここで、シンクロナイズ・キャッシュ・コマンドをもとに連続して処理される１つ以上のライトコマンドのエントリを「グループ」と呼ぶことにする。すなわち、図７の待ち行列には、受領順番１−６のライトコマンドのエントリがグループ１、受領順番８−１２のライトコマンドのエントリがグループ２、受領順番１４−１５のライトコマンドのエントリがグループ３、受領順番１７のライトコマンドのエントリがグループ４となる。グループ４のエントリのライトコマンドの実行を要求するシンクロナイズ・キャッシュ・コマンドはまだ受領していない。したがって、この後、ホスト装置２０より新たなライトコマンドが発行された場合には受領順番１８のエントリが待ち行列に追加され、そこに新たなライトコマンドに関する情報が登録される。
【００４３】
図５はホスト装置２０より発行されたコマンドに対する待ち行列の処理手順を示すフローチャートである。
簡単のため、ライトコマンドによって指定されるデータの長さは全て１つのアドレスブロック以下とする。
【００４４】
まず、制御部１４は、ホスト装置２０より発行されたコマンドをＵＳＢインタフェース制御部１１を介して受領する（ステップＳ１０１）。ここで、ホスト装置２０より発行されるコマンドは、ライトコマンド、リードコマンド、シンクロナイズ・キャッシュ・コマンドのいずれかとする。
【００４５】
制御部１４は、受領したコマンドの種類を、そのコマンドに含まれる操作コードにより判定する。制御部１４は受領したコマンドがライトコマンドであることを判定した場合（ステップＳ１０２のＮＯ→ステップＳ１０３のＮＯ）、待ち行列に新たなエントリを追加し、ここに受領順番、コマンドの種類、開始ＬＢＡを登録する。
【００４６】
続いて、制御部１４は、そのライトコマンドで指定されるＬＢＡ範囲が、待ち行列でＨＤＤ１７への書き込み順番が固定されたエントリのライトコマンドにより指定されるＬＢＡ範囲と同一であるかどうかを判定する（ステップＳ１０４）。言い換えれば、制御部１４は、今回受領したライトコマンドによるライト用のデータが既に書き込み順番が固定されて待ち行列に登録されている他のライトコマンドのライト用のデータに対して上書きされるデータであるかどうかを判定する。なお、「待ち行列でＨＤＤ１７への書き込み順番が固定されたエントリ」については後で説明する。
【００４７】
今回受領したライトコマンドで指定されるＬＢＡ範囲が、待ち行列でＨＤＤ１７への書き込み順番が固定されたエントリのライトコマンドにより指定されるＬＢＡ範囲のどれとも同一でない場合を説明する（ステップＳ１０４のＮＯ）。
【００４８】
この場合、制御部１４は、今回受領したライトコマンドにより指定されるＬＢＡ範囲がＬＢＡ空間上の予約領域（ＦＡＴ領域３３）内であるかどうかを判定する（ステップＳ１０５）。今回受領したライトコマンドにより指定されるＬＢＡ範囲が予約領域内であるということは、そのライトコマンドによるライト用のデータは、例えばファイルの実データの配置情報、録音時間、ファイルサイズなどのメタデータであることを意味し、逆に予約領域内であるということは、そのライトコマンドによるライト用のデータはファイルの実データであることを意味する。この例では、開始ＬＢＡの"０"から"１０"までを予約領域とし、"１１"以降をファイルとディレクトリデータ領域３４とする。
【００４９】
（ファイルを書き込むライトコマンドを受領した場合）
まず、ライトコマンドによるライト用のデータがファイルの実データである場合（ステップＳ１０５のＮＯ）の動作を説明する。
【００５０】
この場合、制御部１４は、待ち行列に追加した新たなエントリにアドレスタイプとして"Ｄａｔａ"を登録する。続いて、制御部１４は、待ち行列上の最後のグループ内で、今回受領したライトコマンドと連続してＨＤＤ１７に対してアクセス可能な他のライトコマンドを検索する（ステップＳ１０６）。今回受領したライトコマンドと連続してＨＤＤ１７に対してアクセス可能な他のライトコマンドとは、今回受領したライトコマンドで指定されるＬＢＡ範囲に対して連続するＬＢＡ範囲を指定する他のライトコマンドである。この検索で、該当する他のライトコマンドが発見されなかった場合（ステップＳ１０７のＮＯ）、制御部１４は、今回受領したライトコマンドによるＨＤＤ１７への書き込み順番を、待ち行列上の同一グループ内で、ファイルを書き込むためのライトコマンド同士の間での最下位とし、その書き込み順番を当該新たなエントリに登録する（ステップＳ１０８）。
【００５１】
この後、制御部１４は待ち行列に追加されたエントリの数が予め決められた上限値に達しているかどうかを判定し（ステップＳ１１３）、達していなければ、ホスト装置２０から次のコマンドが発行され次第これを受領して以後の処理を同様に行う。また、達している場合には、待ち行列に空きが発生するまで、ホスト装置２０からの次のコマンドの受領を停止する。
【００５２】
なお、制御部１４は、ホスト装置２０からのコマンドの受領に対して非同期に、待ち行列に格納された最古のグループの各エントリの情報をもとにＨＤＤ１７へのデータの書き込みが実行されるように制御を行う。ＨＤＤ１７へのデータの書き込みが完了したグループの各エントリは待ち行列から消去される。これにより、ホスト装置２０からの次のコマンドを受領して待ち行列への登録を行うことが可能になる。
【００５３】
ステップＳ１０７で、今回受領したライトコマンドと連続してＨＤＤ１７に対してアクセス可能な他のライトコマンドが発見された場合（ステップＳ１０７のＹＥＳ）、制御部１４は、今回受領したライトコマンドによるＨＤＤ１７への書き込み順番を、待ち行列上の同一グループ内で、ファイルを書き込むためのライトコマンド同士の間での最下位とし、その書き込み順番を当該新たなエントリに登録するとともに、その新たなエントリと、連続してＨＤＤ１７に対してアクセス可能な他のライトコマンドのエントリのそれぞれに連結フラグと連結先のポインタを登録する（ステップＳ１０９）。これでファイルをライト用のデータとするライトコマンドを受領した場合の待ち行列への追加処理が完了する。
【００５４】
この後、上記と同様に、制御部１４は待ち行列に追加されたエントリの数が予め決められた上限に達しているかどうかを判定し（ステップＳ１１３）、達していなければ、ホスト装置２０から次のコマンドが発行され次第これを受領して以後の処理を同様に行う。また、達している場合には、待ち行列に空きが発生するまで、ホスト装置２０からの次のコマンドの受領を停止する。
【００５５】
図６は、今回受領したライトコマンドと連続してＨＤＤ１７に対してアクセス可能な他のライトコマンドが発見された場合の待ち行列の更新の例を示す図である。ここで受領順番５のライトコマンドのエントリが今回新しく追加されたエントリである。今回受領したライトコマンドは"Ｄａｔａ"をアドレスタイプとし、開始ＬＢＡが"１２"である。一方、待ち行列上の同一グループ１に属する受領順番３のエントリの開始ＬＢＡは"１１"であるから、今回受領したライトコマンドのエントリは受領順番３のエントリの次に連続するものであることが判定され、この結果、受領順番３と受領順番５の各エントリにそれぞれ連結フラグがセットされると共に連結先のポインタがセットされる。また、受領順番４のライトコマンドのエントリはアドレスタイプが"Ｍｅｔｅ"であり、すなわちメタデータを書き込むためのライトコマンドのエントリであるから、今回受領したライトコマンドのエントリのＨＤＤ１７への書き込み順番は受領順番４より上となる。図の例では、ファイルの実データを書き込むためのライトコマンドのエントリが既に３つ登録されているので、今回受領したライトコマンドのエントリのＨＤＤ１７への書き込み順番は"４"となり、受領順番４のライトコマンドのエントリのＨＤＤ１７への書き込み順番は"４"から"５"に下げられる。
【００５６】
（メタデータを書き込むライトコマンドを受領した場合）
次に、ステップ１０５の判定で、ライトコマンドにより指定されるＬＢＡ範囲が予約領域である場合の動作を説明する（ステップＳ１０５のＹＥＳ）。
【００５７】
この場合、制御部１４は、待ち行列に追加した新たなエントリにアドレスタイプとして"Ｍｅｔａ"を登録する。続いて制御部１４は、ＨＤＤ１７への書き込み順番を、待ち行列上の当該グループ内で最下位とするよう、その順位を当該新たなエントリに登録する（ステップＳ１１０）。このように、メタデータのＨＤＤ１７への書き込み順番はグループ内で最後に設定される。
【００５８】
（シンクロナイズ・キャッシュ・コマンドを受領した場合）
次に、ステップ１０３の判定で、今回受領したコマンドがシンクロナイズ・キャッシュ・コマンドである場合の動作を説明する。
【００５９】
制御部１４は、待ち行列に追加した新たなエントリにシンクロナイズ・キャッシュ・コマンドに関する情報を格納する。すなわち、制御部１４は、そのエントリにコマンドの種類として"シンクロナイズ・キャッシュ・コマンド"を格納する。そして制御部１４は、当該シンクロナイズ・キャッシュ・コマンドの受領前に待ち行列に追加された連続するライトコマンドの各エントリについてＨＤＤ１７への書き込み順番を固定する（ステップＳ１１１）。これにより、上記の「待ち行列でＨＤＤ１７への書き込み順番が固定されたエントリ」が設定される。以後、これらのエントリのＨＤＤ１７への書き込み順番の変更は禁止される。
【００６０】
次に、上記と同様に、制御部１４は待ち行列に追加されたエントリの数が予め決められた上限に達しているかどうかを判定し（ステップＳ１１３）、達していなければ、ホスト装置２０から次のコマンドが発行され次第これを受領して以後の処理を同様に行う。また、達している場合には、待ち行列に空きが発生するまで、ホスト装置２０からの次のコマンドの受領を停止する。
【００６１】
次に、ステップ１０４の判定で、今回受領したライトコマンドにより指定されるＬＢＡ範囲が、待ち行列でＨＤＤ１７への書き込み順番が固定されたいずれかのエントリのＬＢＡ範囲と同一である場合を説明する（ステップＳ１０４のＹＥＳ）。
【００６２】
この場合、制御部１４は、今回受領したライトコマンドにより指定されるＬＢＡ範囲と同一のＬＢＡ範囲を指定する他のライトコマンドのエントリにノーリターンフラグをセットする（ステップＳ１１２）。以後、このノーリターンフラグがセットされたエントリが待ち行列に格納されている間に、このエントリのＬＢＡ範囲を指定するリードコマンドをホスト装置２０から受領しても（ステップＳ１０２のＹＥＳ）、制御部１４は、そのエントリのライトコマンドに対応する書き込み用のデータをホスト装置２０へ応答せず、新しいライトコマンドに対応する書き込み用のデータをホスト装置２０へ応答する（ステップＳ１１４）。これにより、バッファメモリ１６に保持された、ファイルの更新前の古いライトデータがホスト装置２０へ応答される不具合を回避することができる。
【００６３】
次に、図８を参照して、ノーリターンフラグをセットする場合の処理の例を説明する。図７に示す待ち行列が存在するなかで、図８に示すように、開始ＬＢＡを"３０"とする新たなライトコマンド（受領順番１８）が受領された場合を説明する。この場合、制御部１４は、今回受領したライトコマンドにより指定されるＬＢＡ範囲が、待ち行列に既にＨＤＤ１７への書き込み順番が固定されたいずれかのエントリのＬＢＡ範囲と同一であるかどうかを調べる。この結果、受領順番１４のライトコマンドのエントリが該当することが判定される。ちなみに、受領順番１４のライトコマンドのエントリのＨＤＤ１７への書き込み順番は受領順番１６のシンクロナイズ・キャッシュ・コマンドにより既に固定されている。この判定結果により、図８に示すように、制御部１４は受領順番１４のエントリにノーリターンフラグをセットして、当該ライトコマンドと関連付けてバッファメモリ１６に保持されているライト用のデータがホスト装置２０からのリードコマンドに対して読み出されてホスト装置２０に応答されることを禁止にする。
【００６４】
なお、ステップ１０２において、受領したコマンドがリードコマンドであることが制御部１４にて判断された場合には、そのリードコマンドに基づくリード処理を即時に実行するように制御を行う（ステップＳ１１４）。
【００６５】
（待ち行列の情報に基づくＨＤＤへの書き込み動作）
前述したように、ディスク記憶装置１０では、制御部１４にて、ホスト装置２０より受領したライトコマンドおよびシンクロナイズ・キャッシュ・コマンドに関する情報をメモリ１８に設けられた待ち行列に登録して所定の処理を行う一方、その動作に対して非同期に待ち行列の情報を読み出し、ＨＤＤ１７で解釈可能な形式のライトコマンドに変換してインタフェース制御部１３を通じてＨＤＤ１７に与える。この際、制御部１７は、待ち行列上の最古のグループ（グループ１）から、そのグループ内の各エントリのライトコマンドに関する情報を読み込んで、そのライトコマンドに基づくＨＤＤ１７への書き込み処理が実行されるように制御を行い、グループ１のライトコマンドによる書き込みが終了した後、次にグループ２の各エントリのライトコマンドに関する情報を読み込んで、同様にＨＤＤ１７への書き込み処理が実行されるように制御を行う。グループ内の各エントリのライトコマンドの実行は、待ち行列上のＨＤＤ１７への書き込み順番に従って連続的に行われる。このとき、制御部１４は、グループ内の複数のライコマンドのエントリに設定された連結フラグおよび連結先のポインタをもとに、複数のライトコマンドの連結関係を判断し、連結する各ライトコマンドを、これと等価な１つのライトコマンドに置き換えてＨＤＤ１７に与えるように制御を行う。
【００６６】
ところで、同一のグループ内での、ファイルを書き込むためのライトコマンド間でのＨＤＤ１７への書き込み順番の決め方については、次の２つの方法が考えられる。
【００６７】
第１の方法は、図７の待ち行列に示されるように、ライトコマンドの受領順番に従って書き込み順番を設定する方法である。
【００６８】
第２の方法は、シーク距離をより短くように書き込み順番をグループ内でソートする方法である。図９はこの方法を説明する図である。制御部１４は、新たなライトコマンドを受領したとき、この新たなライトコマンドの開始ＬＢＡと同一グループ内の他のライトコマンドの開始ＬＢＡとを比較し、開始ＬＢＡの値が小さい、つまり開始ＬＢＡが先頭ＬＢＡに近いライトコマンドの書き込み順番を上にする。図９の例では、新たなライトコマンド（受領順番１８）の開始ＬＢＡは"３０"、同一のグループ内の他のライトコマンド（受領順番１７）の開始ＬＢＡは"３１"であることから、新たなライトコマンド（受領順番１８）のＨＤＤ１７への書き込み順番を他のライトコマンド（受領順番１７）より上に設定する。これにより、他のライトコマンド（受領順番１７）のＨＤＤ１７への書き込み順番は"１４"から"１５"に下がり、新たなライトコマンド（受領順番１８）のＨＤＤ１７への書き込み順番が"１４"に設定される。
【００６９】
このように、開始ＬＢＡの値が小さいライトコマンドのＨＤＤ１７への書き込み順番を上にすることによって、ヘッドのトータル的なシーク距離を小さくすることができる。その理由は、前のグループの書き込み処理において先頭ＬＢＡに近い予約領域へのメタデータの書き込みが最後に行われることが多いからである。
【００７０】
本実施形態によれば、次のような効果が生じる。
一般に、待ち行列には、ホスト装置から受領した順番にライトコマンドの情報が追加され、シンクロナイズ・キャッシュ・コマンドに応じて待ち行列から受領順にライトコマンドに関する情報から読み込まれてＨＤＤへの書き込み処理が実行される。その際、ホスト装置からは、ファイルのライトコマンドと、当該ファイルの実データの配置情報、録音時間、ファイルサイズ、フレーム数等を与えるメタデータのライトコマンドとが発行されるが、メタデータのライトコマンドが必ずしもファイルのライトコマンドの後にホスト装置より発行される保証はなく、ＨＤＤへの書込みが必ずしも発行された順番に行われる保障もない。例えば、図７の受領順番１２のライトコマンドによるライト用のメタデータは、受領順番８−１１のライトコマンドによるライト用のファイルの実データの配置情報、録音時間、ファイルサイズ等のメタデータであるが、一般にはこのメタデータのライトコマンドがファイルの実データのライトコマンドの後にホスト装置より発行されるとは限らない。このため、書き込み中の電源断によって、メタデータのみがＨＤＤに書き込まれ、ファイルの実データがＨＤＤに正しく書き込まれない場合がありえた。この場合には、メタデータにより記録されていることが確定されているファイルが実際には正しく記録されていないという不整合が起こり、長時間分のストリームを失うおそれがあった。
【００７１】
逆にメタデータを欠いてファイルの実データのみがＨＤＤに書き込まれている場合には、その書き込まれた実データがＨＤＤに書き込まれていないことと等しく、失われるストリームは、メタデータのみがＨＤＤに書き込まれてファイルの実データとの間で不整合が生じている場合に比べ少なくて済む。
【００７２】
本実施形態によれば、待ち行列上のグループ内で、ファイルのライトコマンドをメタデータのライトコマンドに比較してＨＤＤへの書き込み順番を上げることによって、シンクロナイズ・キャッシュ・コマンドの実行中の電源断によってメタデータだけがＨＤＤに書き込まれることを防止でき、メタデータにより記録されていることが確定されているファイルが実際には正しく記録されていないという不整合が起こるのを防止でき、長時間分のストリームを失う危険を軽減できる。また、ＦＡＴ領域３３と、ファイルとディレクトリデータ領域３４との間での移動のためのシークの回数が減り、データ転送速度を向上させることができる。
【００７３】
また、本実施形態によれば、ＨＤＤの記憶領域上で連続するＬＢＡ範囲にファイルの実データを書き込むための複数のライトコマンドを判断し、これらのライトコマンドの待ち行列上の各エントリに連結フラグと連結先のポインタを登録するようにしたことで、複数のライトコマンドをこれと等価な１つのライトコマンドにまとめてＨＤＤ１７への書き込み処理を行うことができる。
【００７４】
なお、上記の実施形態では、ＩＭＭＥＤ＝１とした場合について説明したが、本発明はＩＭＭＥＤ＝０、つまりＨＤＤ１７へのデータの書き込み完了を確認してからホスト装置２０が次のライトコマンドを発行する場合においても有効である。
【００７５】
本発明は、上述の実施形態にのみ限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々更新を加え得ることは勿論である。
【図面の簡単な説明】
【００７６】
【図１】本発明の一実施形態に係るディスク記憶装置の構成を示すブロック図である。
【図２】ライトコマンドの構成を示す図である。
【図３】シンクロナイズ・キャッシュ・コマンドの構成を示す図である。
【図４】ＦＡＴ３２ファイルシステムについて説明する図である。
【図５】待ち行列の処理手順を示すフローチャートである。
【図６】受領したライトコマンドと連続してＨＤＤに対してアクセス可能な他のライトコマンドが発見された場合の待ち行列の例を示す図である。
【図７】待ち行列の構成を説明する図である。
【図８】ノーリターンフラグをセットする場合の処理の例を説明する図である。
【図９】ライトコマンド間でのＨＤＤへの書き込み順番を決定する方法を説明する図である。
【符号の説明】
【００７７】
１０…ディスク記憶装置
１１…ＵＳＢインタフェース制御部
１２…内部バス
１３…インタフェース制御部
１４…制御部
１５…メモリ制御部
１６…バッファメモリ
１７…ＨＤＤ
１８…メモリ
１９…ＣＰＵ
２０…ホスト装置
【図１】
2010015610.tif 000003
【図２】
2010015610.tif 000004
【図３】
2010015610.tif 000005
【図４】
2010015610.tif 000006
【図５】
2010015610.tif 000007
【図６】
2010015610.tif 000008
【図７】
2010015610.tif 000009
【図８】
2010015610.tif 000010
【図９】
2010015610.tif 000011