(57)【要約】【課題】ホストから送られるコマンドを効率的に処理する。【解決手段】本発明の一態様としてのコマンド実行方法は、ディスクヘッドによりデータを読み書き可能なディスク状記憶媒体と、データを読み書き可能な不揮発性メモリと、を備えたハードディスクドライブにおいて実行するコマンド実行方法であって、データの書き込みを指示するコマンドを前記ディスク状記憶媒体に対して実行する際、前記不揮発性メモリの利用状況を検出し、前記利用状況が低いとき、前記書き込みコマンドを高速シークにより実行し、利用状況が高いときは低速シークにより実行し、前記高速シークさせられたディスクヘッドによる書き込み中に書き込みエラーを検出したら、書き込みに失敗したデータを書き込むことを指示する書き込みコマンドを前記不揮発性メモリに対して実行する。【選択図】図６
2008152440.tif 000002
【特許請求の範囲】
【請求項１】
データを読み書き可能なディスク状記憶媒体と、
実行要求された読み出しまたは書き込みコマンドにしたがって、ディスクヘッドを高速にシークさせる高速シークおよび低速にシークさせる低速シークにより前記ディスクヘッドをシークしてデータの読み出しまたは書き込みを行うシーク制御部と、
データを読み書き可能な不揮発性メモリと、
実行要求された読み出しまたは書き込みのコマンドにしたがって前記不揮発性メモリに対しデータの読み出しまたは書き込みを行うアクセス制御部と、
ホストからデータの読み出しまたは書き込みを指示するコマンドを受け取るコマンド受取手段と、
前記コマンド受取部により受け取られた前記コマンドを前記シーク制御部および前記アクセス制御部のいずれに実行させるかを決定する決定手段と、
前記シーク制御部に実行させるべきと決定されたコマンドを格納する第１のコマンド格納部と、
前記アクセス制御部に実行させるべきと決定されたコマンドを格納する第２のコマンド格納部と、
前記第２のコマンド格納部内からコマンドを選択し、選択したコマンドの実行を前記アクセス制御部に要求する第１の要求手段と、
前記不揮発性メモリの利用状況を検出する利用状況検出手段と、
前記利用状況が低いとき、前記第１のコマンド格納部に格納された書き込みコマンドおよび読み出しコマンドのうち前記シーク制御部に次に実行させるとした場合に前記ディスクヘッドをアクセス開始位置に最も早く到達させることが可能なコマンドを、前記書き込みコマンドについては高速シークにより前記読み出しコマンドについては低速シークにより前記ディスクヘッドをシークさせると想定して選択する第１の選択部と、
前記第１の選択部により選択されたコマンドが書き込みコマンドである場合、前記高速シークを指定して前記シーク制御部に実行要求し、前記第１の選択部により選択したコマンドが読み出しコマンドである場合、前記低速シークを指定して前記シーク制御部に実行要求する、第２の要求手段と、
前記第２の要求手段によって要求された前記書き込みコマンドの実行中に書き込みエラーを検出し、書き込みに失敗したデータを書き込むことを指示する書き込みコマンドを前記第２のコマンド格納部に格納する書き込みエラー処理部と、
前記不揮発性メモリの利用状況が高いとき、前記第１のコマンド格納部に格納された書き込みコマンドおよび読み出しコマンドのうち前記シーク制御部に次に実行させるとした場合に前記ディスクヘッドをアクセス開始位置に最も早く到達させることが可能なコマンドを前記低速シークにより前記ディスクヘッドをシークさせると想定して選択する第２の選択部と、
前記第２の選択部により選択されたコマンドの実行を前記低速シークを指定して前記シーク制御部に要求する第３の要求手段と、
を備えたハードディスクドライブ。
【請求項２】
前記利用状況検出手段は、前記書き込みエラー処理部により書き込みエラーが検出されたら、前記不揮発性メモリの利用状況を検出し、
前記書き込みエラー処理部は、前記不揮発性メモリの利用状況が低いときは、前記書き込みに失敗したデータを書き込むことを指示する書き込みコマンドを前記第２のコマンド格納部に格納し、前記不揮発性メモリの利用状況が高いときは、前記書き込みコマンドを前記第１のコマンド格納部に格納する、
ことを特徴とする請求項１に記載のハードディスクドライブ。
【請求項３】
前記利用状況検出手段は、前記不揮発性メモリの利用状況として、前記不揮発性メモリの空き容量から、前記第２のコマンド格納部内の各書き込みコマンドにより書き込み要求されているデータ量の総和を減算した残存容量を検出し、
前記第１の選択部は、前記残存容量が第１の閾値以上であるとき前記利用状況が低いと判断する、
ことを特徴とする請求項１または２に記載のハードディスクドライブ。
【請求項４】
前記利用状況検出手段は、前記不揮発性メモリの利用状況として、前記不揮発性メモリの空き容量から、前記第２のコマンド格納部内の各書き込みコマンドにより書き込み要求されているデータ量の総和を減算した残存容量を検出し、
前記書き込みエラー処理部は、前記残存容量が第１の閾値以上であるとき前記利用状況が低いと判断する、
ことを特徴とする請求項２に記載のハードディスクドライブ。
【請求項５】
前記利用状況検出手段は、前記不揮発性メモリの利用状況として、前記第２のコマンド格納部内の書き込みコマンドおよび読み出しコマンドの実行に要する時間の合計を計算し、
前記第１の選択部は、前記合計が第２の閾値以下であるとき前記利用状況が低いと判断する、
ことを特徴とする請求項１または２に記載のハードディスクドライブ。
【請求項６】
前記利用状況検出手段は、前記不揮発性メモリの利用状況として、前記第２のコマンド格納部内の書き込みコマンドおよび読み出しコマンドの実行に要する時間の合計を計算し、
前記書き込みエラー処理部は、前記合計が第２の閾値以下であるとき前記利用状況が低いと判断する、
ことを特徴とする請求項２に記載のハードディスクドライブ。
【請求項７】
前記第２の要求手段は、前記第１の選択手段により選択された書き込みコマンドについて前記ディスクヘッドを前記高速シークさせるとした場合のアクセス開始時刻と、前記低速シークさせるとした場合のアクセス開始時刻とを比較し、これらのアクセス開始時刻が同一であるときは、前記シーク制御部に対し前記低速シークを指定する、
ことを特徴とする請求項１ないし６のいずれか一項に記載のハードディスクドライブ。
【請求項８】
前記書き込みエラー処理部は、前記書き込みコマンドの実行中に書き込みエラーが発生したら、前記書き込みコマンドにより書き込み要求されているデータにおいて前記エラーが発生した地点以降の部分を前記書き込みに失敗したデータとして検出する、
ことを特徴とする請求項１ないし７のいずれか一項に記載のハードディスクドライブ。
【請求項９】
前記シーク制御部は、前記書き込みコマンドの実行中に書き込みエラーが発生したらエラーが解除されるまで待機し、前記エラーが解除されたら書き込みを再開し、
前記書き込みエラー処理部は、前記書き込みコマンドにより書き込み要求されているデータのうち前記エラーが発生した地点から前記書き込みを再開した地点までの部分を前記書き込みに失敗したデータとして検出する、
ことを特徴とする請求項１ないし７のいずれか一項に記載のハードディスクドライブ。
【請求項１０】
前記決定手段は、前記ディスク状記憶媒体を回転駆動するディスクモーターのオン／オフの状態、前記第１のコマンド格納部内のコマンド数、前記不揮発性メモリの空き容量から前記第２のコマンド格納部内の各書き込みコマンドにより書き込み要求されているデータの総和を減算した残存容量、の少なくともいずれかを用いて前記コマンド受取部により受け取られたコマンドを前記シーク制御部および前記アクセス制御部のいずれに実行させるかを決定する、
ことを特徴とする請求項１ないし９のいずれか一項に記載のハードディスクドライブ。
【請求項１１】
ディスクヘッドによりデータを読み書き可能なディスク状記憶媒体と、データを読み書き可能な不揮発性メモリと、を備えたハードディスクドライブにおいて実行するコマンド実行方法であって、
ホストからデータの読み出しまたは書き込みを指示するコマンドを受け取り、
受け取られた前記コマンドの実行を前記ディスク状記憶媒体および前記不揮発性メモリのいずれに対して行うかを決定し、
前記ディスク状記憶媒体に決定された場合第１のコマンド格納部に前記コマンドを格納し、前記不揮発性メモリに決定された場合第２のコマンド格納部に前記コマンドを格納し、
前記不揮発性メモリの利用状況を検出し、
前記利用状況が低いとき、前記第１のコマンド格納部に格納された書き込みコマンドおよび読み出しコマンドのうち次に実行するとした場合に前記ディスクヘッドをアクセス開始位置に最も早く到達させることが可能なコマンドを、前記書き込みコマンドについては高速シークにより前記読み出しコマンドについては低速シークにより前記ディスクヘッドをシークさせると想定して選択し、
選択されたコマンドが書き込みコマンドである場合、前記書き込みコマンドを前記高速シークにより実行し、選択したコマンドが読み出しコマンドである場合、前記読み出しコマンドを前記低速シークにより実行し、
前記書き込みコマンドの実行中に書き込みエラーを検出したら、書き込みに失敗したデータを書き込むことを指示する書き込みコマンドを前記第２のコマンド格納部に格納し、
前記不揮発性メモリの利用状況が高いとき、前記第１のコマンド格納部に格納された書き込みコマンドおよび読み出しコマンドのうち次に実行するとした場合に前記ディスクヘッドをアクセス開始位置に最も早く到達させることが可能なコマンドを前記低速シークにより前記ディスクヘッドをシークさせると想定して選択し、
選択されたコマンドを前記低速シークにより実行する、
ことを特徴とするコマンド実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ホストから送られる読み出しまたは書き込みのコマンドを実行するハードディスクドライブおよびコマンド実行方法に関する。
【背景技術】
【０００２】
ハードディスク装置を代表する磁気ディスク装置において、ディスクへの読み出し、書き込みをする際、ヘッドを目標トラックに移動するシークを行い、目標アドレスのディスク位置がヘッドの下に移動するまで、ヘッドの位置決め制御を行いながらディスクの回転を待つ回転待ちを行う。ディスクのヘッドが目標アドレスに到達した時点より、ディスクへのデータの読み書きを開始する。この際、エラーが発生すると、読み書きを中止し、ディスクが１回転するのを待ち、読み書きを再度行うリトライが行われる。エラーが解消されるまでリトライを続けるため、次のコマンドの実行を開始するまで、少なくともディスク１回転の回転待ち時間が生じる。
【０００３】
ディスクへの書き込みは読み出しと比べ、厳しい位置決め制御が必要となり、エラーが発生しやすい。ディスクへの書き込みを失敗するライトフォルトが発生するたびにディスク1回転以上の回転待ちが生じるため、ライトフォルト数を削減することでコマンド実行時間を迅速にすることが可能である。
【０００４】
ディスク装置には複数のコマンドを保持するためのコマンドキューを備えたものがある。このようなディスク装置では、ホスト装置から受信したコマンドを上記コマンドキューに格納し、コマンドキューに格納された実行待ちコマンドの中から次に実行するコマンドを選択し、実行する。コマンドキューを用いることで、コマンドの実行をコマンドの発行順序から入れ替えて行うリオーダリングが可能となる。コマンドの要求アドレスのディスク上の位置を考慮し、リオーダリングを実施することで、コマンド実行に要する時間を短縮することができる。例えば図１４のように、コマンド１、２、３の順序でコマンドが発行された場合を考える。この場合、図１４（Ｂ）に示すように、発行された順番でコマンドを実行（ディスクアクセス）するよりも、リオーダリングにより、図１４（Ａ）のように、コマンド１→コマンド３→コマンド２の順でコマンドを実行する方が、データの読み出し／書き込みを効率よく行うことが確認できる。なお、図１４（Ａ）および図１４（Ｂ）では、コマンド１、２、３による読み出し／書き込みの対象となるディスク上の領域が示されている。
【０００５】
STF (Shortest Time First)アルゴリズムは、リオーダリングアルゴリズムの１つであり、最もアクセス時間が短いコマンドを次々に選ぶアルゴリズムである。たとえば、図１５のように、コマンド1（コマンド１が読み出し／書き込みの対象とするディスク上の領域が示されている）を実行中であるとする。STFアルゴリズムでは、次に実行するコマンドとして、コマンド3を選択する。コマンド２は、シーク中のディスクの回転により、ヘッド位置を通り過ぎ、ディスク１周分の余計な回転待ち（シーク終了後、読み出し／書き込みを行うデータが到来するのを待つこと）が生じるため、選択されない。コマンド３の実行終了後、コマンド４はシークが間に合うため、コマンド3の次に実行するコマンドは、一番早くアクセスできるコマンド4となる。
【０００６】
シークスピード（ヘッドの移動速度）を速めた場合、トラック間の移動時間が短くなる。  図１６（Ｂ）のように、シークスピードを速めない場合、コマンド１の次のコマンドとしてコマンド２を選択することができず、コマンド３を実行するが、シークスピードを速めた場合は、同時間内でコマンド１、２、３を実行でき（図１６（Ａ））、より多くのコマンドの実行が可能となる。このように、シークスピードを上げるとで、より効率的なリオーダリングをSTFアルゴリズムで行うことができる。
【特許文献１】特開平６−２８２３８４公報
【特許文献２】特開２０００−２９３９６３公報
【特許文献３】特開２００１−１００９３５公報
【特許文献４】特開２００１−２３６７４４公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかし、シークスピードを速めた場合、ヘッド位置を目標トラックに停止させる際にヘッドに伝わる振動が大きくなる。この振動が大きいほど、位置決め制御が困難となり、リード・ライトフォルトが発生しやすくなる。ゆえに、シークスピードを高速化すると、より効率的なリオーダリング可能となるが、ライトフォルト発生率が上がり、回転待ち時間が増え、必ずしもスループット向上には繋がらない。
【０００８】
特開平６−２８２３８４公報（特許文献１）では、ディスクの信頼性向上のためディスク上の欠陥セクタの代替領域として、ディスク書き込みに失敗したデータをフラッシュメモリに格納する。この方式では、データサイズの小さいランダムライトコマンド（書き込み先のアドレスがとびとびであるライトコマンド）に対し、スループット向上が期待できるが、シーケンシャルなライトコマンド（書き込み先のアドレスが連続しているライトコマンド）やデータサイズの大きいライトコマンドに対しスループット向上を配慮した処理を行っていない。また、フラッシュメモリに格納したデータをディスクに書き戻す処理が無いため、フラッシュメモリの容量に空きがなくなった場合、ライトフォルトの発生により書き込みに失敗したデータをフラッシュメモリに書きこむ処理ができなくなる。
【０００９】
特開２０００−２９３９６３公報（特許文献２）では、ディスク書き込みに失敗したデータをディスク上の専用領域に格納する。この方式は、専用領域に格納するためのシーク、回転待ち時間が発生するため、必ずしもスループットが向上するとは限らない。
【００１０】
特開２００１−１００９３５公報（特許文献３）では、ディスクに読み書き失敗したデータを、再度ディスクコマンドキューに格納し、リオーダリングしなおしている。この方式では、ライトフォルトが発生したデータに対するディスクライトは必要不可欠であり、必ずしもライトフォルトのペナルティが削減されるわけではない。例えば、図１７のように、書き込み失敗後、失敗したデータをディスクコマンドキューに戻し、リオーダリングしなおした結果、同一コマンドを選択する場合がある。この場合、リオーダリングしない場合の処理である、ディスク一周待ち後の再書き込みと同じ動作になるため、ディスクコマンドキューに戻しリオーダリングし直す処理をしてもスループットは向上されない。
【００１１】
特開２００１−２３６７４４公報（特許文献４）では、ディスクに読み書き失敗しリトライが必要となった場合、その間に実行可能なコマンドを探索する。この方式も特許文献３の場合と同様に、ライトフォルトが発生したデータに対するディスクライトは必要不可欠であり、必ずしもライトフォルトのペナルティが削減されるわけではない。
【００１２】
本発明は、ホストから送られるコマンドを効率的に処理できるようにしたハードディスクドライブおよびコマンド実行方法を提供する。
【課題を解決するための手段】
【００１３】
本発明の一態様としてのハードディスクドライブは、
データを読み書き可能なディスク状記憶媒体と、
実行要求された読み出しまたは書き込みコマンドにしたがって、ディスクヘッドを高速にシークさせる高速シークおよび低速にシークさせる低速シークにより前記ディスクヘッドをシークしてデータの読み出しまたは書き込みを行うシーク制御部と、
データを読み書き可能な不揮発性メモリと、
実行要求された読み出しまたは書き込みのコマンドにしたがって前記不揮発性メモリに対しデータの読み出しまたは書き込みを行うアクセス制御部と、
ホストからデータの読み出しまたは書き込みを指示するコマンドを受け取るコマンド受取手段と、
前記コマンド受取部により受け取られた前記コマンドを前記シーク制御部および前記アクセス制御部のいずれに実行させるかを決定する決定手段と、
前記シーク制御部に実行させるべきと決定されたコマンドを格納する第１のコマンド格納部と、
前記アクセス制御部に実行させるべきと決定されたコマンドを格納する第２のコマンド格納部と、
前記第２のコマンド格納部内からコマンドを選択し、選択したコマンドの実行を前記アクセス制御部に要求する第１の要求手段と、
前記不揮発性メモリの利用状況を検出する利用状況検出手段と、
前記利用状況が低いとき、前記第１のコマンド格納部に格納された書き込みコマンドおよび読み出しコマンドのうち前記シーク制御部に次に実行させるとした場合に前記ディスクヘッドをアクセス開始位置に最も早く到達させることが可能なコマンドを、前記書き込みコマンドについては高速シークにより前記読み出しコマンドについては低速シークにより前記ディスクヘッドをシークさせると想定して選択する第１の選択部と、
前記第１の選択部により選択されたコマンドが書き込みコマンドである場合、前記高速シークを指定して前記シーク制御部に実行要求し、前記第１の選択部により選択したコマンドが読み出しコマンドである場合、前記低速シークを指定して前記シーク制御部に実行要求する、第２の要求手段と、
前記第２の要求手段によって要求された前記書き込みコマンドの実行中に書き込みエラーを検出し、書き込みに失敗したデータを書き込むことを指示する書き込みコマンドを前記第２のコマンド格納部に格納する書き込みエラー処理部と、
前記不揮発性メモリの利用状況が高いとき、前記第１のコマンド格納部に格納された書き込みコマンドおよび読み出しコマンドのうち前記シーク制御部に次に実行させるとした場合に前記ディスクヘッドをアクセス開始位置に最も早く到達させることが可能なコマンドを前記低速シークにより前記ディスクヘッドをシークさせると想定して選択する第２の選択部と、
前記第２の選択部により選択されたコマンドの実行を前記低速シークを指定して前記シーク制御部に要求する第３の要求手段と、
を備える。
【００１４】
本発明の一態様としてのコマンド実行方法は、
ディスクヘッドによりデータを読み書き可能なディスク状記憶媒体と、データを読み書き可能な不揮発性メモリと、を備えたハードディスクドライブにおいて実行するコマンド実行方法であって、
ホストからデータの読み出しまたは書き込みを指示するコマンドを受け取り、
受け取られた前記コマンドの実行を前記ディスク状記憶媒体および前記不揮発性メモリのいずれに対して行うかを決定し、
前記ディスク状記憶媒体に決定された場合第１のコマンド格納部に前記コマンドを格納し、前記不揮発性メモリに決定された場合第２のコマンド格納部に前記コマンドを格納し、
前記不揮発性メモリの利用状況を検出し、
前記利用状況が低いとき、前記第１のコマンド格納部に格納された書き込みコマンドおよび読み出しコマンドのうち次に実行するとした場合に前記ディスクヘッドをアクセス開始位置に最も早く到達させることが可能なコマンドを、前記書き込みコマンドについては高速シークにより前記読み出しコマンドについては低速シークにより前記ディスクヘッドをシークさせると想定して選択し、
選択されたコマンドが書き込みコマンドである場合、前記書き込みコマンドを前記高速シークにより実行し、選択したコマンドが読み出しコマンドである場合、前記読み出しコマンドを前記低速シークにより実行し、
前記書き込みコマンドの実行中に書き込みエラーを検出したら、書き込みに失敗したデータを書き込むことを指示する書き込みコマンドを前記第２のコマンド格納部に格納し、
前記不揮発性メモリの利用状況が高いとき、前記第１のコマンド格納部に格納された書き込みコマンドおよび読み出しコマンドのうち次に実行するとした場合に前記ディスクヘッドをアクセス開始位置に最も早く到達させることが可能なコマンドを前記低速シークにより前記ディスクヘッドをシークさせると想定して選択し、
選択されたコマンドを前記低速シークにより実行する、
ことを特徴とする。
【発明の効果】
【００１５】
本発明により、ホストから送られるコマンドを効率的に処理できる。
【発明を実施するための最良の形態】
【００１６】
図１は、本発明の一実施の形態としてのハードディスクドライブ(HDD ：Hard Disk Drive)の構成を示すブロック図である。HDD２は、記憶装置として、ディスク６と不揮発性メモリ８を有している。ホスト１はリード・ライトコマンドの発行をHDD２内のフロー制御部３に行う。フロー制御部３では、受理したリード・ライトコマンドをディスク６に実行させる場合はディスクインターフェイス５にディスクの読み・書きの指令を出し、不揮発性メモリ８に実行させる場合は不揮発性メモリインターフェイス７に読み・書きの指令を出す。図１のブロック矢印はバスを表している。ホスト１から発行されたコマンドがリードコマンドの場合、リードコマンドにより要求されたデータがディスク６または不揮発性メモリ８からキャッシュメモリ４に読み出され、キャッシュメモリ４からホスト１に転送される。一方、ホスト１から発行されたコマンドがライトコマンドの場合、ライトコマンドにより要求されたデータをキャッシュメモリ４に格納し、ディスク６または不揮発性メモリ８に書き込みを行う。
【００１７】
以下、図２は、図１のＨＤＤの構成を詳細に示すブロック図である。
【００１８】
ホスト１より発行されたコマンドは、フロー制御部３内のホストインターフェイス（コマンド受取手段、決定手段）９が受理する。受理したコマンドがライトコマンドの場合、図３のフローチャートに示す処理を行う。
【００１９】
まず、ホストインターフェイス９は、受理したライトコマンドをキャッシュメモリ４に格納する(S11)。ホストインターフェイス９はライトコマンドによって書き込み要求されるデータ（ライトデータ）をディスク６・不揮発性メモリ８のどちらの記憶装置に書き込むかを、ホスト１からの指定、ディスク６の状態、不揮発性メモリ８の状態を考慮し決定する(S12)。
【００２０】
ホスト１からの指定とは、ホスト１が書き込む記憶装置を指定することを意味し、この場合指定された記憶装置にライトデータを書き込むこととなる。ディスク６の状態とは、ディスク６の回転状況、ディスク６へアクセスするコマンド数（ディスクコマンドキュー１０内のコマンド数）が挙げられる。ディスク６が回転していない場合、回転させるまでに時間を要し、ディスク６へのアクセスが集中している場合、ライトデータの書き込み完了まで時間を要する。このような状況でディスク６に書き込みを行うのは好ましくない。また、不揮発性メモリ８の状態とは、不揮発性メモリ８の残存容量、不揮発性メモリ８へのアクセス待ちのコマンド数（不揮発性メモリコマンドキュー１１内のコマンド数）が挙げられる。残存容量は、現在の不揮発性メモリ８の空き容量から、不揮発性メモリコマンドキュー１１に格納されたライトコマンドの全ての要求データサイズの和を減算したものである。すなわち不揮発性メモリコマンドキュー１１に格納されたライトコマンドを全て実行した後の不揮発性メモリ８の空き容量が不揮発性メモリ８の残存容量である。不揮発性メモリ８の残存容量が不足している場合は、不揮発性メモリに書くことはできない。また、アクセスするコマンド数が多い場合、不揮発性メモリ８へ書き込むのに時間を要する。このような状況で不揮発性メモリ８に書き込みを行うのは好ましくない。
【００２１】
ディスク６の状態、不揮発性メモリ８の状態を考慮し、どちらの記憶装置に書き込む方が効率的かを算出し、書き込む記憶装置を決定する。ディスク６に書き込む場合はディスクコマンドキュー（第１のコマンド格納部）１０、不揮発性メモリ８に書き込む場合は不揮発性メモリコマンドキュー（第２のコマンド格納部）１１にホストインターフェイス９が受理したライトコマンドを格納する(S13、S14)。図３の例では、書き込む記憶装置として、ディスク６・不揮発性メモリ８のどちらか片方を選んでいるが、ディスク６・不揮発性メモリ８の両方に書き込むこともできる。その際、受理したライトデータを分割し、異なるデータを別の記憶装置に書き込むことや、同じデータを両方の記憶装置に書き込むことができる。本判定の際に、後述する不揮発性メモリ迅速利用判定機能１２を用いても構わない。またディスクコマンドキュー１０と不揮発性メモリコマンドキュー１１とを合わせて単一のコマンドキューとして構成することも可能である。単一のコマンドキューの一例を図１８に示す。単一のコマンドキュー内に書き込み先が不揮発性メモリであるかディスクであるかを識別する書き込み先情報を付加することで、ディスクアクセス選択機能１４および不揮発性メモリアクセス選択機能１６（後述）は単一コマンドキューから自身が実行するべきコマンドを識別できる。すなわち、第１のコマンド格納部と第２のコマンド格納部は物理的に一体に形成されていても分離して形成されていてもよく本発明はこれらのいずれの場合も含む。
【００２２】
図４は、図３のS12を詳細に説明するフローチャートである。S51にて、ライトデータの書き込み先が不揮発性メモリ８に指定されているか調べる。指定されていた場合（S51のYES）、書き込む記憶装置として不揮発性メモリ８を決定する（S52）。指定されていなかった場合は（S51のNO）、S53にてディスクが回転しているか（ディスクを回転させるモーターのオン／オフ（on/off））を調べる。回転していた場合（S53のon）、ディスクに書き込むことを前提とするが、S54にてディスクへのコマンド数（ディスクコマンドキュー１０内のコマンド数）を調べ、規定値以上であれば、書き込む記憶装置として不揮発性メモリ８を検討する（S55）。またS53においてディスクが回転していない場合も（S53のoff）不揮発性メモリ８を検討する（S55）。S55では、不揮発性メモリ８の残存容量を調べ、不揮発性メモリ８に書き込むか決定する。残存容量が規定値以上であれば、書き込む記憶装置として不揮発性メモリ８を決定し（S52）、規定値未満であれば、書き込む記憶装置としてディスク６を決定する（S56）。S54にて規定値未満である場合も、書き込む記憶装置としてディスク６を決定する（S56）。
【００２３】
一方、図２において、ホストインターフェイス９により受理されたコマンドがリードコマンドである場合、例えば図５のフローチャートに示す処理を行う。まず、読み出し要求されているデータ（リードデータ）がディスク６、不揮発性メモリ８どちらに格納されているかを調べる(S21)。ディスク６に格納されている場合はディスクコマンドキュー１０、不揮発性メモリ８の場合は不揮発性メモリコマンドキュー１１に、両方に別々に格納されている場合は、両方のコマンドキューに必要なデータを読み出すリードコマンドを格納する(S22)。S21の処理を行う前に、キャッシュメモリ４にリードデータが存在するかどうかを判定し、存在した場合、S22の処理を行うことなくホスト１にデータ転送を行ってもよい。
【００２４】
ディスク６へのアクセスを実行開始する際は、図６のフローチャートに従った処理をディスクアクセス選択機能１４および不揮発性メモリ迅速利用判定機能１２により行う。まず、不揮発性メモリ８に迅速にアクセス可能であるか（不揮発性メモリ８の利用状況が低いか高いか）を、不揮発性メモリ迅速利用判定機能（利用状況検出手段）１２により調べる(S31)。不揮発性メモリ迅速利用判定機能１２では、迅速にアクセス可能であるかの判断基準として、（１）不揮発性メモリ８の残存容量、（２）不揮発性メモリ８へのアクセス時間を見積もる方法が挙げられる。
（１）不揮発性メモリ８の残存容量は、上述したように、現在の不揮発性メモリ８の空き容量から、不揮発性メモリコマンドキュー１１に格納されたライトコマンドの全ての要求データサイズの和を減算したものである。規定値以上の残存容量が存在すれば、迅速にアクセス可能であると判断される。すなわち不揮発性メモリ８の利用状況は低いと判断される。
（２）一方、不揮発性メモリへのアクセス時間は、不揮発性メモリコマンドキュー１１に格納されたコマンドの種類（リード・ライト）、データサイズより見積もることが出来る。例えば、1セクタ当たりの不揮発性メモリ８から読み出しに要する時間をa 、書き込みに要する時間を b とし、不揮発性コマンドキュー１１に格納されたリードコマンドの総セクタ数を A 、ライトコマンドの総セクタ数を B とすると、不揮発性コマンドキュー１１に格納された全てのコマンドを実行する時間は、aA+bBと見積もることができる。見積もった値が規定値以下であれば、迅速にアクセス可能であると判断できる。すなわち不揮発性メモリ８の利用状況は低いと判断される。
【００２５】
以上のように、S31の処理では、不揮発性メモリ８の残存容量、または不揮発性メモリ８のアクセス総時間を見積もり、不揮発性メモリ８に迅速にアクセス可能であるかを判断する。
【００２６】
迅速にアクセス可能であれば（S31のYES）、ライトフォルトが発生しても、ディスク６への書き込みに失敗したデータを不揮発性メモリ８に即座に書き込むことができ、従来ライトフォルト時に発生したディスク一周分の回転待ちのペナルティを削減することができる。そこで、ライトフォルトの発生率が高いが効率的なリオーダリングが可能となる高速スピードのシーク（高速シーク）を行うことを想定してディスクアクセス選択機能（第１の選択手段、第２の選択手段、第２の要求手段、第３の要求手段）１４においてリオーダリングを行う(S32)。一方、迅速にアクセス可能でなければ（S31のNO）、通常スピードのシーク（通常シーク）を行うことを想定してディスクアクセス選択機能１４においてリオーダリングを行う（S36）。
【００２７】
通常スピードのリオーダリング（S36）では、ディスクコマンドキュー１０に溜まったコマンドの中から、最も早くアクセス可能であるコマンド（アクセス開始位置に最も早くヘッドを到達可能なコマンド）を探し出す。その際、各コマンドに対し、ヘッド位置と、書き込み要求あるいは読み出し要求されているデータ（要求データ）のディスク上の先頭位置（アクセス開始位置）と、通常シーク用のシーク時間情報１３（１）より得られる通常シークにかかるシーク時間とを用い、コマンドへのアクセス時間を算出する。以下、アクセス時間算出の具体例を紹介する。時間の変わりに、ディスク上の角度で算出しても良い。
【００２８】
まず図７に示すようにディスクコマンドキュー１０に格納されたコマンドj（トラックjにあるとする）に対し、ヘッド位置（トラックiにあるとする）と、要求データの先頭位置とから、ヘッド位置と該先頭位置とがディスク中心に対して成す角度θと、トラック間距離Dとを算出する。ディスクの回転角度ωは一定であることから、算出した角度より、ヘッド位置から要求データへのアクセス開始までの最短アクセス時間（角度×ω＝Tj）を図８に示すように求めることが出来る。一方、トラック間距離Dよりトラックiからトラックjにシークをする際に要する時間Sijを、シーク時間情報１３（１）より、図８に示すように求めることが出来る。シーク情報（シーク時間情報１３（１）および１３（２））の例として、i、jを引数に持った関数、i、jより検索可能なテーブルが挙げられる。最短アクセス時間Tjよりもシーク時間Sijが大きい場合（Tj>Sij）、シーク時間中に要求データがヘッドを通り過ぎてしまうため、最短アクセス時間Tjではアクセスできない。この場合、アクセス時間は、最短アクセス時間にディスク一周分の回転待ち時間を足し続け、シーク時間を越える最小の値となる（2周以上回転待ちをする場合があるため）。すなわち、シーク中にヘッドがコマンドjを通り過ぎる数をxとした場合、 Tj+(ディスク一周の回転待ち時間)×xとなる。以上のようにして、コマンドjを実行開始する時刻を見積もることができ、最も早く実行するコマンドを探索することが出来る。リオーダリングの計算時間、および位置決め制御に要する時間（リード・ライトで異なる値にしてよい）を考慮し、Tj>Sij+α (αが考慮した時間分)をディスクの回転待ちを行うことなくシークが間に合うか否かの条件式としても良い。
【００２９】
一方、高速シークのリオーダリングの場合（S32）、通常シークの場合と同様に、ディスクコマンドキュー１０に溜まったコマンドの中から、最も早くアクセス可能であるコマンドを探し出す。その際、ライトコマンドに対しては、高速シーク用のシーク時間情報１３（２）から高速シークにかかるシーク時間を得て、アクセス時間を算出する。リードコマンドに対しては、通常シーク用のシーク時間情報１３（１）から通常シークにかかるシーク時間を得る。そのため、高速シークのリオーダリングでは、通常シーク用のシーク時間情報１３（１）と、高速シーク用のシーク時間情報１３（２）との2種類のシーク時間情報が必要となる。
【００３０】
高速シークをライトコマンドのみに用いるのは、ライトコマンドはディスク６・不揮発性メモリ８のどちらにも書き込みを行うことが可能なためである。ライトフォルトが発生した際、ディスク６の代わりに不揮発性メモリ８に書き込むことができるため、回転待ちのペナルティを削減できる。一方、リードコマンドの場合、ホストが要求しているデータは、ディスク６・不揮発性メモリ８の両方に格納されているとは限らない。そのため、リードフォルトが発生した場合、必ずしも不揮発性メモリから読み出すことはできない。
【００３１】
例えば、図９に示すように、ヘッドがトラックi、リードコマンドにより読み出し要求されているリードデータがトラックj、ライトコマンドにより書き込み要求されているライトデータがトラックk上に存在し、リードデータの方がヘッドに近い場合を考える。この場合、リードコマンドに対しては高速シークが行われないため、リードデータに到達するためには一周の回転待ちが余計に生じる。一方、高速シークを行うライトデータに対しては、データが通り過ぎる前にヘッドが移動完了できるため回転待ちは生じない。したがって図９の状況において、高速リオーダリングした場合、ライトコマンドが選択される。
【００３２】
S32における高速シークを想定したリーダリングで選出されたコマンドがライトコマンドである場合（S33のNO）、このライトコマンドの実行開始時刻（アクセス開始時刻）が、このライトコマンドに通常シークでアクセスした場合の実行開始時刻と同一時刻であるか調べる（S34）。すなわち、このライトコマンドへの高速シークによるアクセス時間が通常シークを行った場合のアクセス時間と同じであるかを調べる。これは、高速シークによるリオーダリングで選出されたコマンドが必ずしも高速シークする必要があるとは限らないためである。通常シークでもアクセス時間が変わらないのであれば(S34のYES)、ライトフォルト発生率の高い高速シークではなく、通常シークによりアクセスを行う。
【００３３】
通常のシークを行うことを決定した場合、（S31のNO、またはS33のYES、またはS34のYES）、シーク制御部１７が通常シーク用のシークプロファイル情報１５（１）を参照してヘッドをシークする（S37）。一方、高速シークを行うことを決定した場合（S34のNO）、シーク制御部１７は高速シーク用のシークプロファイル情報１５（２）を参照してヘッドをシークする(S35)。このようにシーク制御部１７は少なくとも2種類のシーク（通常シークと高速シーク）を行うため、通常シーク用のシークプロファイル情報１５（１）と高速シーク用のシークプロファイル情報１５（２）との2種類のシークプロファイル情報が必要となる。S35の高速シーク、S37の通常シークでは、ジャストインタイムシーク制御を行って、シーク完了時の振動を減らしライトフォルトの発生を抑えるようにしてもよい。ジャストインタイムシーク制御とは、シークが完了後の回転待ち時間が最小限になるようシークスピードを調整する。この制御により消費電力を削減できることが知られている（特開2000-40317号参照）。ここでシークプロファイル情報について簡単に説明すると以下の通りである。ヘッドのシーク制御は、ヘッドの位置するトラックと目標トラックとのトラック間距離に対し、目標速度を設置しフィードバック制御を行うのが一般的である。すなわち、シーク制御部１７はシーク中のトラック間距離に応じ、目標速度になるようシーク速度を増減する。トラック間距離から目標速度を求める際に、シークプロファイル情報を用いる。シークプロファイル情報は、トラック間距離に対する目標速度を格納したテーブル、トラック間距離を引数とし目標速度を返す関数、または上記関数の係数情報として保持することができる（例えば特開平9-73618号参照）。
【００３４】
S35の高速シークまたはS37の通常シークにより、ヘッドが目的トラック（図８の場合トラックj）に到達する。その後、回転待ちにより要求データがヘッドの真下に到達するのを待ち、データの読み・書きを行う（S38）。リードコマンドの場合は、読み出したデータをキャッシュメモリ４に格納し、ホスト１への転送を開始する。ライトコマンドの場合、書き込み要求されたデータの書き込みが終了した時点で、コマンドの実行完了となる。
【００３５】
S38におけるディスク６への書き込み中に、ディスクインターフェイス５が書き込み不可信号（書き込みエラー信号）を検出した場合（ライトフォルトが発生した場合）、直ちに書き込み処理を停止し、ライトフォルト処理を行う。書き込み不可信号が発生した際、その原因となった現象を知ることが出来る。エラー発生には、ヘッドを正しい位置に制御できない位置決め制御のエラー、衝撃検知や電源異常の外部要因によるエラー、ディスクに対する読み・書きが正常に行えないディスクの欠陥によるエラーがある。
【００３６】
図１０はライトフォルト処理の流れを示すフローチャートである。S41では、書き込みに失敗したデータを検出している。この書き込み失敗したデータの検出では、書き込み要求されているデータサイズに応じて異なる処理をする方が望ましい。具体的には、図１１のように、ライトフォルト発生地点からライトデータの末尾が近い場合には、ライトフォルトが発生した時点で、ライトフォルト発生地点からライトデータの末尾までが、書き込みが失敗したデータとして検出する。一方、ライトデータのサイズが大きい場合や、アドレスの連続した書き込み要求が続いている場合（アドレスが連続する複数のライトコマンドがまとめて処理されている場合）、図１２のようにライトフォルト発生地点よりライトデータの末尾までが非常に長いため、ヘッドがライトデータの末尾に到達する前に、エラーが解除され、再度書き込みを開始することが可能となる。ディスクインターフェイス５はディスク６より書き込み可能信号が送られるのを待ち、書き込み可能になった時点で、書き込みを再開する。その際は、ライトフォルト発生時点から再書き込みを開始した地点までを、書き込み失敗したデータとして検出する。
【００３７】
S42では、エラーの発生原因がディスクの欠陥によるものか判定し、もしディスク欠陥によるものである場合は（S42のYES）、リトライ処理を行う（S46）。リトライ処理では、再度同一アドレスにデータの書き込みを行い、そのディスク上の位置が欠陥であるかを調べる。そのため、再書き込みを行うたびに、ディスク１周の回転待ちを行う。欠陥と判断した場合、当該ディスク上の位置を欠陥セクタとして登録し、代替の位置にデータを格納する。代替の位置は、ディスク、不揮発性メモリのどちらに設けても構わない。
【００３８】
エラーの発生原因がディスクの欠陥でないと判断した場合は（S42のNO）、不揮発性メモリ迅速利用判定機能１２により、不揮発性メモリ８が迅速にアクセス可能であるかを再度、検査する(S43)。可能であれば（S43のYES）、S41で検出した書き込みに失敗したデータを書き込むライトコマンドを不揮発性メモリコマンドキュー１１に格納する（S45）。すなわち、ディスクインターフェイス５は、ディスク６に対する書き込みのエラーが発生したら、書き込みに失敗したデータを書き込むためのライトコマンドを生成し、生成したライトコマンドを不揮発性メモリコマンドキュー１１に格納する書き込みエラー処理部を含む。一方、不揮発性メモリ８に迅速にアクセスできる状況でなければ(S43のNO)、書き込みに失敗したデータを書き込むためのライトコマンドをディスクコマンドキュー１０に格納する(S44)。ここで図６のS31において行われた、不揮発性メモリ８に迅速にアクセス可能であるどうかの判定結果を利用することにより、S43での再検査を省略してもよい。すなわち、S31で不揮発性メモリ８に迅速にアクセス可能である判定が得られた場合はS42からS45に直接進み、そうでない場合はS42からS44に直接進むこととしてもよい。
【００３９】
図６において、S38での読み出し中に、読み出し不可信号（読み出しエラー信号）を受け取った場合（リードフォルトが発生した場合）、直ちに読み出し処理を停止し、リードフォルト処理を行う。ライトフォルトと同様に、読み出し不可信号が発生する際、その原因となった現象を知ることができ、位置決め制御のエラー、外部要因によるエラー、ディスクの欠陥によるエラーを検出することが出来る。リードフォルト処理のフローチャートを図１３に示す。読み出しに失敗したデータを検出し(S51)、リードフォルトの原因が、ディスク上の欠陥であるか判断する(S52)。ディスク上の欠陥の可能性のある場合（S52のYES）、リトライ処理を行う(S54)。このリトライ処理では、要求データの読み出しを再度行い、読み出すことができなかった場合、読出しエラーをホスト１に通知する。リードフォルトの原因がディスク上の欠陥でないと判断した場合（S52のNO）、読み出しに失敗したデータを読み出すリードコマンドをディスクコマンドキュー１０に格納する（S53）。
【００４０】
図２に戻り、不揮発性メモリアクセス選択機能（第１の要求手段）１６は、不揮発性コマンドキュー１１に格納されたコマンドから実行すべきコマンドを選択し、選択したコマンドを、不揮発性メモリインターフェイス（アクセス制御部）７へ送る。不揮発性メモリインターフェイス７は、受理したコマンドを実行して、不揮発性メモリ８に対しデータの読み出し・書き込みを行う。不揮発性メモリアクセス選択機能１６のコマンド選択方法としては、不揮発性メモリコマンドキュー１１に格納された順に選択する方法、（処理速度の速い）読み出しコマンドの順に選択する方法が挙げられる。リードコマンドを実行した場合、読み出したデータをキャッシュメモリ４に格納し、ホスト１への転送を開始する。ライトコマンドを実行した場合、書き込み要求されたデータの書き込みが終了した時点で、コマンドの実行完了となる。
【００４１】
不揮発性メモリ８の容量を空けるため、不揮発性メモリ８に格納されたデータをディスク６に書き込む処理を行ってもよい。本処理は、スループットへの影響が少ないときに行うことが望ましい。例えば、ディスクコマンドキュー１０、不揮発性コマンドキュー１１にコマンドが格納さていないときが挙げられる。本処理では、ディスク６に書き込みたいデータを不揮発性メモリ８からキャッシュメモリ４に読み出す。その際、不揮発性メモリコマンドキュー１１にリードコマンドを登録することにより読み出しを実行してもよい。次に、キャッシュメモリ４に読み出されたデータをディスク６に書き込む。その際、ライトコマンドをディスクコマンドキュー１０に格納し行っても良い。
【図面の簡単な説明】
【００４２】
【図１】本発明の一実施の形態としてのハードディスクドライブ(HDD ：Hard Disk Drive)の構成を示すブロック図
【図２】図１のＨＤＤの構成を詳細に示すブロック図。
【図３】ライトコマンドが受理された場合に行う処理を説明するフローチャート。
【図４】図３のS12を詳細に説明するフローチャート。
【図５】リードコマンドが受理された場合に行う処理を説明するフローチャート。
【図６】ディスク６へのアクセスを実行開始する際に行う処理を説明するフローチャート。
【図７】ヘッドと要求データとが成す角度を説明する図。
【図８】最短アクセス時間とシーク時間とを示す図。
【図９】高速リオーダリングを説明する図。
【図１０】ライトフォルト処理の流れを示すフローチャート。
【図１１】書き込み失敗したデータの検出例を説明する図。
【図１２】書き込み失敗したデータの検出例を説明する図。
【図１３】リードフォルト処理の流れを示すフローチャート。
【図１４】リオーダリングによる効果を説明する図。
【図１５】STF (Shortest Time First)アルゴリズムを説明する図。
【図１６】通常速度のシークと、高速シークとを説明する図。
【図１７】ライトフォルトのペナルティを説明する図。
【図１８】単一のコマンドキューを示す図。
【符号の説明】
【００４３】
１：ホスト
２：ハードディスクドライブ（ＨＤＤ）
３：フロー制御部
４：キャッシュメモリ
５：ディスクインターフェイス
６：ディスク
７：不揮発性メモリインターフェイス
８：不揮発性メモリ
９：ホストインターフェイス
１０：ディスクコマンドキュー
１１：不揮発性メモリコマンドキュー
１２：不揮発性メモリ迅速利用判定機能
１３（１）、１３（２）：シーク時間情報
１４：ディスクアクセス選択機能
１５（１）、１５（２）：シークプロファイル情報
１６：不揮発性メモリアクセス選択機能
１７：シーク制御部
【図１】
2008152440.tif 000003
【図２】
2008152440.tif 000004
【図３】
2008152440.tif 000005
【図４】
2008152440.tif 000006
【図５】
2008152440.tif 000007
【図６】
2008152440.tif 000008
【図７】
2008152440.tif 000009
【図８】
2008152440.tif 000010
【図９】
2008152440.tif 000011
【図１０】
2008152440.tif 000012
【図１１】
2008152440.tif 000013
【図１２】
2008152440.tif 000014
【図１３】
2008152440.tif 000015
【図１４】
2008152440.tif 000016
【図１５】
2008152440.tif 000017
【図１６】
2008152440.tif 000018
【図１７】
2008152440.tif 000019
【図１８】
2008152440.tif 000020