トップ :: G 物理学 :: G06 計算;計数




【発明の名称】 磁気ディスク装置及び磁気ディスク装置のリトライ方法
【発明者】 【氏名】長谷部 賀洋

【要約】 【課題】データ転送の中断を最小限に抑えつつ最も有効なリトライを行う。

【解決手段】インターフェイス制御手段1は、上位装置から受信したコマンドをコマンドキュー2に格納する。インターフェイス負荷検出手段3は、コマンドキュー2に格納されたコマンドの総数に基づいて、インターフェイスの負荷を検出する。リトライテーブル9は、各負荷レベルに応じたリトライ処理の内容を記憶する。コマンド実行手段4は、コマンドキュー2からコマンドを逐次取り出して実行すると共に、リトライが必要なときは、負荷検出手段3によって検出された負荷レベルに応じたリトライ処理の内容をリトライテーブル9より取得して、リトライ処理を実行する。
【特許請求の範囲】
【請求項1】 上位装置との通信を行うインターフェイス制御手段と、インターフェイス制御手段で受信したコマンドを格納するためのコマンドキューと、コマンドキューに格納されたコマンドの総数に基づいて、上位装置とのインターフェイスの負荷を検出する負荷検出手段と、前記負荷の度合いに応じたリトライ処理の内容を予め記憶するリトライテーブルと、コマンドキューからコマンドを取り出して実行し、リトライが必要なときは、負荷検出手段によって検出された負荷の度合いに応じたリトライ処理の内容をリトライテーブルより取得して、リトライ処理を実行する実行手段とを有することを特徴とする磁気ディスク装置。
【請求項2】 請求項1記載の磁気ディスク装置において、前記リトライテーブルは、前記インターフェイスの負荷が軽いときは処理の重いリトライ処理が行われ、負荷が重いときは処理の軽いリトライ処理が行われるように、インターフェイスの負荷とリトライ処理の内容とを対応付けて記憶するものであることを特徴とする磁気ディスク装置。
【請求項3】 請求項1記載の磁気ディスク装置において、前記実行手段は、媒体上の同一のセクタに対してリトライを実行する度に、前記リトライテーブルを参照して、その時点の負荷の度合いに応じたリトライ処理の内容をリトライテーブルより取得するものであることを特徴とする磁気ディスク装置。
【請求項4】 上位装置からのコマンドをインターフェイス制御手段で受信し、インターフェイス制御手段で受信したコマンドをコマンドキューに格納し、コマンドキューに格納されたコマンドの総数に基づいて、上位装置とのインターフェイスの負荷を検出し、コマンドキューからコマンドを取り出して実行すると共に、リトライが必要なときは、検出した負荷の度合いに応じたリトライ処理の内容をリトライテーブルより取得して、リトライ処理を実行することを特徴とする磁気ディスク装置のリトライ方法。
【請求項5】 請求項4記載の磁気ディスク装置のリトライ方法において、前記リトライテーブルに、前記インターフェイスの負荷が軽いときは処理の重いリトライ処理が行われ、負荷が重いときは処理の軽いリトライ処理が行われるように、インターフェイスの負荷とリトライ処理の内容とを対応付けて記憶させることを特徴とする磁気ディスク装置のリトライ方法。
【請求項6】 請求項4記載の磁気ディスク装置のリトライ方法において、媒体上の同一のセクタに対してリトライを実行する度に、前記リトライテーブルを参照して、その時点の負荷の度合いに応じたリトライ処理の内容をリトライテーブルより取得することを特徴とする磁気ディスク装置のリトライ方法。
【発明の詳細な説明】【0001】
【発明の属する技術分野】本発明は、磁気ディスク装置に係り、特に上位装置からのアクセス状況を監視してリトライ処理の内容を変えることにより、スループットの低下を抑え、エラーの発生やデータ転送の中断の発生を防ぐことができる磁気ディスク装置及び磁気ディスク装置のリトライ方法に関するものである。
【0002】
【従来の技術】従来より、磁気ディスク装置は、上位装置(ホストコンピュータ)からのリード/ライトコマンドを受信すると、磁気媒体上の一連のセクタに対して、再生あるいは記録を行うが、何らかの理由で、記録再生ができないセクタに遭遇した場合、そのエラーの発生したセクタに対してリトライを行う。リトライの方法としては、例えば、エラーの発生したセクタに対して規定の回数限度内で再生あるいは記録を行い、その回数内に再生あるいは記録ができれば、正常に記録再生できたものと見なし、次のセクタへの再生あるいは記録に移行するという方法がある。
【0003】他のリトライ方法として、エラーの発生したセクタを単純に再生あるいは記録するだけでなく、他の処理、例えば、再生時であれば、ヘッドの位置をディスクの内周方向や外周方向に僅かにずらして再生を行ったり、ヘッドの電圧を増幅するアンプのゲインを変化させたりしながらリトライを行うという方法がある。実際のリトライ実行時には、これらの処理をある決まった手順で実行し、リトライに成功した段階で、一連のリトライ動作を終了する。
【0004】
【発明が解決しようとする課題】以上のような従来のリトライ方法では、リトライ処理を実行すると、上位装置が要求するデータを規定時間内に送ることができないという問題点があった。特に、動画処理用のシステムに使用される磁気ディスク装置では、転送時間が短いことが要求されるが、従来のリトライ方法では、リトライ処理が始まると、動画データ転送の中断が発生して、動画に乱れや中断が発生する。また、従来のリトライ方法において、データ転送の中断が発生しないように、リトライ処理を軽くすることもできるが、このような場合には、常に軽いリトライ処理しか行えないので、リトライに十分な時間がある場合でも、充分なリトライ処理が行えず、エラー発生の頻度が高くなる。よって、動画処理用のシステムに使用される磁気ディスク装置では、動画に乱れが発生する。本発明は、上記課題を解決するためになされたもので、データ転送の中断を最小限に抑え、かつその範囲で最も有効なリトライを行うことができる磁気ディスク装置及び磁気ディスク装置のリトライ方法を提供することを目的とする。
【0005】
【課題を解決するための手段】本発明の磁気ディスク装置は、請求項1に記載のように、上位装置との通信を行うインターフェイス制御手段(1)と、インターフェイス制御手段で受信したコマンドを格納するためのコマンドキュー(2)と、コマンドキューに格納されたコマンドの総数に基づいて、上位装置とのインターフェイスの負荷を検出する負荷検出手段(3)と、上記負荷の度合いに応じたリトライ処理の内容を予め記憶するリトライテーブル(9)と、コマンドキューからコマンドを取り出して実行し、リトライが必要なときは、負荷検出手段によって検出された負荷の度合いに応じたリトライ処理の内容をリトライテーブルより取得して、リトライ処理を実行する実行手段(4)とを有するものである。このように、コマンドキューに格納されたコマンドの総数を、上位装置とのインターフェイスの負荷レベルと見なす。そして、リトライが必要なときは、負荷検出手段によって検出された負荷の度合いに応じたリトライ処理の内容をリトライテーブルより取得して、リトライ処理を実行する。
【0006】また、請求項2に記載のように、上記リトライテーブル(9)は、上記インターフェイスの負荷が軽いときは処理の重いリトライ処理が行われ、負荷が重いときは処理の軽いリトライ処理が行われるように、インターフェイスの負荷とリトライ処理の内容とを対応付けて記憶するものである。このように、上位装置から先行して発行されるコマンドの数(キューイングされるコマンドの数)に比例して、データ転送の処理要求が高くなる相関関係を用いて、キューイングされるコマンド数が少ないときは、処理の重いリトライを行い、コマンド数が多いときは、処理の軽いリトライを行い、常に上位装置からの負荷に対して、最適なリトライ処理を選択する。また、請求項3に記載のように、上記実行手段(4)は、媒体上の同一のセクタに対してリトライを実行する度に、上記リトライテーブルを参照して、その時点の負荷の度合いに応じたリトライ処理の内容をリトライテーブルより取得するものである。
【0007】また、本発明の磁気ディスク装置のリトライ方法は、請求項4に記載のように、上位装置からのコマンドをインターフェイス制御手段で受信し、インターフェイス制御手段で受信したコマンドをコマンドキューに格納し、コマンドキューに格納されたコマンドの総数に基づいて、上位装置とのインターフェイスの負荷を検出し、コマンドキューからコマンドを取り出して実行すると共に、リトライが必要なときは、検出した負荷の度合いに応じたリトライ処理の内容をリトライテーブルより取得して、リトライ処理を実行するようにしたものである。また、請求項5に記載のように、上記リトライテーブルに、上記インターフェイスの負荷が軽いときは処理の重いリトライ処理が行われ、負荷が重いときは処理の軽いリトライ処理が行われるように、インターフェイスの負荷とリトライ処理の内容とを対応付けて記憶させるようにしたものである。また、請求項6に記載のように、媒体上の同一のセクタに対してリトライを実行する度に、リトライテーブルを参照して、その時点の負荷の度合いに応じたリトライ処理の内容をリトライテーブルより取得するようにしたものである。
【0008】
【発明の実施の形態】[実施の形態の1]次に、本発明の実施の形態について図面を参照して詳細に説明する。図1は本発明の第1の実施の形態を示す磁気ディスク装置のブロック図、図2、図3は図1の磁気ディスク装置の動作を説明するためのフローチャート図である。
【0009】本実施の形態の磁気ディスク装置は、図示しない上位装置からのコマンドの受信やデータの相互の転送を行うインターフェイス制御手段1と、インターフェイス制御手段1で受信したコマンドを一時格納するためのコマンドキュー2と、コマンドキュー2に格納されたコマンドの総数に基づいて、インターフェイス制御手段1の負荷レベルを検出するインターフェイス負荷検出手段3と、コマンドキュー2に蓄積されているコマンドを逐次取り出し、そのコマンドの内容に従って、後述するリード/ライト実行手段7及び位置決め実行手段6に指示を与えるコマンド実行手段4と、データをセクタ単位で記憶している円板状の媒体(磁気ディスク)5と、コマンドによって指定された、媒体5のセクタ上に磁気ヘッド11を位置決めするための位置決め実行手段6と、ヘッド11の位置決めを行った後、コマンドによって指定されたセクタに対して読み出しあるいは書き込みを行うリード/ライト実行手段7と、リード/ライト実行手段7による読み出しあるいは書き込みの最中にエラーが発生したことを検出するエラー検出手段8と、負荷レベルに応じたリトライ処理の内容が記述されているリトライテーブル9と、コマンド数と負荷レベル値とを対応付けて記憶している負荷レベル変換テーブル10とを有している。
【0010】インターフェイス負荷検出手段3は、コマンドキュー2に格納されているコマンドの総数をインターフェイスの負荷レベルとみなし、インターフェイス制御手段1がコマンドを受信する度に、負荷レベル変換テーブル10を参照して負荷レベル値の更新を行う。また、コマンド実行手段4は、コマンドキュー2からコマンドを取り出して実行すると共に、リトライが必要なときは、検出した負荷レベルに応じたリトライ処理の内容をリトライテーブル9より取得して、リトライ処理を実行する。
【0011】次に、図2、図3のフローチャート図を参照して本実施の形態の磁気ディスク装置の全体の動作について説明する。まず、図示しない上位装置(ホストコンピュータ)よりコマンドがインターフェイス制御手段1に送られると、インターフェイス制御手段1は、コマンドが送られてきたことを検出し(図2ステップ101)、コマンド受信処理を開始する(ステップ102)。そして、インターフェイス制御手段1は、受信したコマンドをコマンドキュー2に格納する(ステップ103)。
【0012】コマンドキュー2に格納されているコマンドの数は、上位装置から磁気ディスク装置に対するデータ転送の要求度数と見なすことができ、コマンドキュー2に存在するコマンド数が多ければ多いほど、上位装置とのインタフェースの負荷が高いと見なすことができる。
【0013】磁気ディスク装置の負荷が高いときはリトライ処理によるデータ転送の中断の影響が大きい。そこで、コマンドキュー2に格納されたコマンドの数と、データ転送の中断を引き起こさない程度のリトライ処理との相関関係をテーブル化して、リトライ処理を行う度に、コマンドキュー2に格納されたコマンドの数を基にテーブルを参照して、リトライ方法の最適化を図ればよい。
【0014】つまり、インターフェイス負荷検出手段3は、インターフェイス制御手段1によってコマンドキュー2にコマンドが格納されたことを検出すると、コマンドキュー2に格納されているコマンド数をカウントし、そのカウント値をインデックス値として負荷レベル変換テーブル10を参照する。負荷レベル変換テーブル10は、コマンド数と負荷レベル値とを対応付けて記憶しているテーブルである。
【0015】インターフェイス負荷検出手段3は、コマンドキュー2に格納されているコマンドの数をインデックス値として負荷レベル変換テーブル10を参照し、該コマンド数に対応する負荷レベル値を取得する。そして、インターフェイス負荷検出手段3は、取得した負荷レベル値により、自身が有する負荷レベルカウンタ(不図示)の更新を行う(ステップ104)。
【0016】負荷レベルカウンタの値は、初期設定時には0に設定される。負荷レベルカウンタの更新が終了すると、ステップ101に戻り、インターフェイス制御手段1及びインターフェイス負荷検出手段3は、上位装置からのコマンド受信待ち状態に移行する。以上の一連のシーケンスは、上位装置からコマンドが送られる度に起動され、コマンドキュー2へのコマンドの追加格納動作と、負荷レベルカウンタの更新動作が行われる。
【0017】一方、コマンド実行手段4は、コマンドキュー2にコマンドが格納されていることを検出すると(図3ステップ201)、コマンドキュー2よりコマンドを取り出す(ステップ202)。
【0018】このとき、コマンドキュー2よりコマンドが取り出されると、コマンドキュー2に格納されたコマンドの数が減少する。そのため、インターフェイス負荷検出手段3は、コマンドキュー2に格納されているコマンド数をインデックス値として負荷レベル変換テーブル10を再び参照し、該コマンド数に対応する新たな負荷レベル値を取得して、この負荷レベル値により、自身が有する負荷レベルカウンタの更新を行う(ステップ203)。
【0019】続いて、コマンド実行手段4は、コマンドキュー2より取り出したコマンドの解析を行う(ステップ204)。そして、コマンド実行手段4は、解析したコマンドの内容に従って、位置決め実行手段6及びリード/ライト実行手段7に指示を与える。これにより、位置決め実行手段6は、上記コマンドで指定される、媒体5のセクタ上にヘッド11を位置決めし、リード/ライト実行手段7は、該セクタに対する読み出し又は書き込みを実行する(ステップ205)。
【0020】エラー検出手段8は、読み出し又は書き込み時に発生するエラーを検出する。媒体5に対する読み出し又は書き込みの実行後、コマンド実行手段4は、エラー検出手段8の検出結果に基づいて、エラーで終了したか否かをチェックする(ステップ206)。そして、コマンド実行手段4は、正常に終了していれば、ステップ201に戻り、エラーで終了しているならば、リトライ処理を開始するためのステップ207に移行する。
【0021】ステップ207において、コマンド実行手段4は、最初のリトライを行うために、負荷レベルカウンタの値をインデックス値としてリトライテーブル9を参照する。図4にリトライテーブル9の構成を示す。リトライテーブル9には、負荷レベルカウンタの値に応じたリトライ処理の内容が記述されている。図4では、リトライテーブル9の各行が、各負荷レベルカウンタ値に対応したリトライ処理の内容となっており、各行では、左から順番に1回目のリトライ処理、2回目のリトライ処理、3回目のリトライ処理・・・という具合に並んでいる。
【0022】例えば、負荷レベルカウンタ値1に対応するリトライ処理の内容は、「単純リトライ3回」、「オフセット+1」、「オフセット−1」、「オフセット+2」、「オフセット−2」といった具合にリトライの順番に記述されている。ここで、「単純リトライ3回」は、エラーの発生したセクタに対するリトライを3回行うという意味である。
【0023】また、「オフセット+1」は、媒体5の半径方向にヘッド11を1単位量だけ移動させるオフセットシークを行い、その後にエラーの発生したセクタに対するリトライを1回行うという意味である。「オフセット−1」も同様の意味であるが、この場合にはオフセットシークの際の移動方向が「オフセット+1」の場合と逆方向になる。
【0024】同様に、「オフセット+2」は、媒体5の半径方向にヘッド11を2単位量だけ移動させるオフセットシークを行い、その後にエラーの発生したセクタに対するリトライを1回行うという意味である。「オフセット−2」も同様の意味であるが、この場合にはオフセットシークの際の移動方向が「オフセット+2」の場合と逆方向になる。
【0025】なお、リトライテーブル9に記述された「終了」は、各負荷レベルカウンタ値に対応するリトライ処理の終了を示している。このリトライ処理の終了を示す情報が記録されている理由は、各負荷レベルカウンタ値に対応するリトライ処理の内容が可変長となるためである。リトライ処理の内容が未定義の項目に関しては、同様にリトライ処理の終了を示す情報を設定しておく。
【0026】また、図4から分かるように、リトライテーブル9には、対応する負荷レベルカウンタ値が大きくなるほど、処理の軽い(つまり、より少ない回数で終了に至る)リトライ処理が記述されている。例えば、負荷レベルカウンタ値1に対応するリトライ処理では、6回目のリトライ処理で終了に至るのに対し、負荷レベルカウンタ値2に対応するリトライ処理では、4回目のリトライ処理で終了に至る。
【0027】次に、コマンド実行手段4は、リトライテーブル9から取得したリトライ処理の内容に従って、位置決め実行手段6及びリード/ライト実行手段7に指示を与え、リトライを実行する(ステップ208)。例えば、負荷レベルカウンタの値が1の場合、コマンド実行手段4は、最初のリトライ処理として、エラーの発生したセクタに対するリトライ(読み出し又は書き込み)を3回行う。このときの位置決め実行手段6及びリード/ライト実行手段7の動作は上記と同様である。
【0028】このリトライ処理の実行後、コマンド実行手段4は、エラー検出手段8の検出結果より、エラーが発生してリトライが失敗したと判断した場合には、2回目のリトライ処理として、1単位量のオフセットシーク後にエラーの発生したセクタに対するリトライを1回行う。このときの位置決め実行手段6は、媒体5の半径方向にヘッド11を1単位量移動させた後、エラーの発生したセクタ上にヘッド11を位置決めし、リード/ライト実行手段7は、該セクタに対する読み出し又は書き込みを実行する。
【0029】以降同様にして、リトライに成功するまで「オフセット−1」、「オフセット+2」、「オフセット−2」といったリトライ処理を順次行う。コマンド実行手段4は、リトライを順次行っている最中にリトライに成功した場合、そこでリトライを終了する。また、コマンド実行手段4は、リトライテーブル9に記述されたリトライ処理を順次実行した結果、リトライに成功することなく、リトライ処理の終了を示す情報に到達した場合にも、そこでリトライを終了する。
【0030】リトライの完了後、コマンド実行手段4は、リトライを行った結果を判定する(ステップ209)。そして、コマンド実行手段4は、リトライに成功したと判定した場合、コマンドキュー2から取り出したコマンドで指定された、読み出し又は書き込みすべきセクタが残っているかどうかを判定する(ステップ211)。
【0031】コマンド実行手段4は、残りのセクタが無い場合、ステップ201に戻り、次のコマンドを取り出すシーケンスに移る。また、残りのセクタが有る場合、コマンド実行手段4は、残りのセクタに対する読み出し又は書き込みを行うためにステップ205に戻る。
【0032】また、コマンド実行手段4は、ステップ209においてリトライに失敗(リトライテーブル9に記述された終了を示す情報に従ってリトライを終了した場合)したと判定したとき、コマンドの実行がエラーで終了したことを上位装置に報告し(ステップ210)、ステップ201に戻り、次のコマンドを取り出すシーケンスに移る。
【0033】次に、本実施の形態の磁気ディスク装置の動作をより具体的な例を用いて説明する。図5は図1の負荷レベル変換テーブル10の構成を示す図である。負荷レベル変換テーブル10は、コマンドキュー2に格納されたコマンドの数をインデックス値とする、負荷レベル値への変換テーブルとなっている。例えば、コマンド数が0であれば、負荷レベル値は0、コマンド数が1であれば、負荷レベル値は1といった具合になっている。
【0034】図6は媒体5上のトラック20のフォーマットを示す図である。トラック20上のセクタ30,31,32・・・のうち、セクタ32,36はリトライで回復可能なエラーセクタである。そして、初期時には、コマンドキュー2には、何もコマンドが登録されていないものとする。
【0035】まず、図示しない上位装置よりコマンドがインターフェイス制御手段1に送られると、インターフェイス制御手段1は、コマンドが送られてきたことを検出し(図2ステップ101)、コマンド受信処理を開始する(ステップ102)。このときのコマンドは、図6のトラック20上のセクタ30からセクタ36までのデータの読み出しを指示するリードコマンドとする。そして、インターフェイス制御手段1は、受信したコマンドをコマンドキュー2に格納する(ステップ103)。
【0036】ここでは、コマンドキュー2に格納されたコマンドの数が1となっているため、インターフェイス負荷検出手段3が、コマンド数1をインデックス値として負荷レベル変換テーブル10を参照すると、負荷レベル値1が得られる。これにより、インターフェイス負荷検出手段3は、負荷レベルカウンタの値を1に更新する(ステップ104)。ステップ102〜104のコマンド受信処理が終了すると、ステップ101に戻り、次のコマンドの受信に備える。
【0037】一方、コマンド実行手段4は、コマンドキュー2にコマンドが格納されていることを検出すると(図3ステップ201)、コマンドキュー2よりコマンドを取り出す(ステップ202)。これにより、コマンドキュー2に格納されたコマンドの数が0となる。
【0038】そのため、インターフェイス負荷検出手段3が、コマンド数0をインデックス値として負荷レベル変換テーブル10を参照すると、負荷レベル値0が得られる。これにより、インターフェイス負荷検出手段3は、負荷レベルカウンタの値を0に更新する(ステップ203)。
【0039】続いて、コマンド実行手段4は、コマンドキュー2より取り出したコマンドの解析を行う(ステップ204)。そして、コマンド実行手段4は、解析したコマンドの内容に従って、トラック20上のセクタ30からセクタ36までの読み出しを位置決め実行手段6及びリード/ライト実行手段7に指示する。この指示に応じて、位置決め実行手段6は、媒体5のトラック20上にヘッド11を位置決めし、リード/ライト実行手段7は、セクタ30〜36からの読み出しを実行する(ステップ205)。
【0040】このとき、トラック20上のセクタ32がエラーセクタであるため、セクタ30,31から読み出しを行った後、セクタ32でエラーが発生して読み出しが終了する。ステップ206の判定において、コマンド実行手段4は、ステップ205の読み出し処理がエラーで終了しているため、ステップ207に進む。
【0041】ステップ207において、コマンド実行手段4は、エラー時のリトライ処理の内容を決定するために、負荷レベルカウンタの参照を行う。ステップ201〜206までの一連の処理の間に、コマンドの受信が行われていないとすれば、コマンドキュー2に格納されたコマンドの数が0のままなので、負荷レベルカウンタの値は、更新されておらず、0のままである。
【0042】しかし、コマンドを受信している場合には、図2のステップ101〜104までのシーケンスをたどる度に、負荷レベルカウンタの更新が行われている。ここで、上述のステップ201〜206までの一連の処理の間に、2つのコマンドを受信したとすると、1度目のコマンド受信で、コマンドキュー2に格納されたコマンドの数は1となり、コマンド数1に対応する負荷レベル変換テーブル10の負荷レベル値は1なので、負荷レベルカウンタの値は1に更新される。同様に、2度目のコマンド受信で、負荷レベルカウンタの値は2に更新される。
【0043】ステップ207において、コマンド実行手段4は、負荷レベルカウンタの値をインデックス値として、リトライテーブル9を参照する。上述のように、ステップ201〜206までの一連の処理の間に、2つのコマンドを受信したとすると、負荷レベルカウンタの値は2に更新されている。図4のリトライテーブル9において、負荷レベルカウンタ値2に対応するリトライ処理の内容は、「単純リトライ1回」、「オフセット+1」、「オフセット−1」といった具合に記述されている。
【0044】そして、コマンド実行手段4は、リトライテーブル9から取得したリトライ処理の内容に従って、位置決め実行手段6及びリード/ライト実行手段7に指示を与え、リトライを実行する(ステップ208)。まず、コマンド実行手段4は、最初のリトライ処理として、エラーセクタ32に対するリトライ(読み出し)を1回行う。
【0045】このリトライ処理の実行後、コマンド実行手段4は、エラーが発生してリトライが失敗したと判断した場合には、2回目のリトライ処理として、1単位量のオフセットシーク後にエラーセクタ32に対するリトライを1回行う。以降同様にして、リトライに成功するまでリトライ処理を順次行う。コマンド実行手段4は、リトライを順次行っている最中にリトライに成功した場合、そこでリトライを終了する。
【0046】リトライ完了後、コマンド実行手段4は、リトライを行った結果を判定する(ステップ209)。そして、コマンド実行手段4は、リトライに成功した場合、継続して読み出し又は書き込みすべきセクタが残っているかどうかを判定する(ステップ211)。ここでは、セクタ30からセクタ36までの読み出しを指示するリードコマンドに応じて、セクタ30,31の読み出しが完了しており、セクタ32の読み出しもリトライによって完了している。
【0047】よって、セクタ33からセクタ36までの読み出しが未了なので、コマンド実行手段4は、図3のステップ212において、読み出すべきセクタをセクタ33〜セクタ36に再設定する。そして、コマンド実行手段4は、ステップ205に戻って、トラック20上のセクタ33からセクタ36までの読み出しを位置決め実行手段6及びリード/ライト実行手段7に指示する。
【0048】このとき、トラック20上のセクタ36がエラーセクタであるため、セクタ33,34,35から読み出しを行った後、セクタ36でエラーが発生して読み出しが終了する。ステップ206の判定において、コマンド実行手段4は、ステップ205の読み出し処理がエラーで終了しているため、ステップ207に進む。
【0049】ステップ207において、コマンド実行手段4は、エラー時のリトライ処理の内容を決定するために、負荷レベルカウンタの参照を行う。コマンドキュー2に格納されたコマンドの数が2であった時点から現在までの一連の処理の間に、更に2つのコマンドを受信したとすると、コマンドキュー2に格納されたコマンドの数は合計4となり、コマンド数4に対応する負荷レベル変換テーブル10の負荷レベル値は3なので、負荷レベルカウンタの値は3に更新される。
【0050】そして、コマンド実行手段4は、この負荷レベルカウンタ値3をインデックス値として、リトライテーブル9を参照する。続いて、コマンド実行手段4は、リトライテーブル9から取得したリトライ処理の内容に従って、位置決め実行手段6及びリード/ライト実行手段7に指示を与え、リトライを実行する(ステップ208)。このときのリトライ処理は、「単純リトライ1回」、すなわちエラーセクタ36に対するリトライ(読み出し)を1回行うだけで終了となる。
【0051】リトライ完了後、コマンド実行手段4は、リトライを行った結果を判定し(ステップ209)、リトライに成功したと判断した場合、継続して読み出し又は書き込みすべきセクタが残っているかどうかを判定する(ステップ211)。このときには全てのセクタの読み出しが完了しているので、コマンド実行手段4は、図3のステップ201に戻り、次のコマンドの取り出し動作に移行する。
【0052】また、コマンド実行手段4は、ステップ209においてリトライに失敗してエラーを回復できなかったと判定した場合、コマンドの実行がエラーで終了したことを上位装置に報告し(ステップ210)、ステップ201に戻り、次のコマンドを取り出すシーケンスに移る。図3のステップ201〜ステップ212の処理は、コマンドキュー2にコマンドが無くなるまで継続的に処理される。
【0053】次に、本実施の形態の磁気ディスク装置の効果について説明する。本実施の形態では、コマンドキュー2に格納されたコマンドの数を、上位装置とのインターフェイスの負荷レベルと見なしている。そして、インターフェイスの負荷が軽いときは処理の重い(終了までの回数が多く、処理にかかる時間が長い)リトライ処理が行われ、負荷が重いときは処理の軽い(終了までの回数が少なく、処理にかかる時間が短い)リトライ処理が行われるように、インターフェイスの負荷レベルとリトライ処理の内容とを対応付けてリトライテーブル9に記憶させ、リトライが必要なときにコマンド実行手段4がリトライテーブル9を参照するようにしたので、インターフェイスの負荷が重いときに、リトライにかかる時間を削減することができる。これにより、動画が中断したり乱れたりするようなデータ転送の中断を防止することができる。
【0054】さらに、本実施の形態では、エラーが発生してリトライが必要になる度に、インターフェイスの負荷レベルを示す負荷レベルカウンタの参照を行った後に、リトライテーブル9を参照して、リトライ処理の内容を変えるため、1つのコマンドで複数箇所のセクタがエラーする場合でも、リトライにかかる時間を削減することができる。
【0055】[実施の形態の2]次に、本発明の第2の実施の形態について図面を参照して詳細に説明する。図7は、本発明の第2の実施の形態となる磁気ディスク装置の動作を説明するためのフローチャート図である。本実施の形態においても、磁気ディスク装置の構成は実施の形態の1とほぼ同様なので、図1、図2、図4〜図6、そして図7を用いて本実施の形態の磁気ディスク装置の動作を説明する。
【0056】まず、図示しない上位装置よりコマンドがインターフェイス制御手段1に送られると、インターフェイス制御手段1は、コマンドが送られてきたことを検出し(図2ステップ101)、コマンド受信処理を開始する(ステップ102)。そして、インターフェイス制御手段1は、受信したコマンドをコマンドキュー2に格納する(ステップ103)。
【0057】インターフェイス負荷検出手段3は、インターフェイス制御手段1によってコマンドキュー2にコマンドが格納されたことを検出すると、コマンドキュー2に格納されているコマンドの数をインデックス値として負荷レベル変換テーブル10を参照し、該コマンド数に対応する負荷レベル値を取得する。そして、インターフェイス負荷検出手段3は、取得した負荷レベル値により、自身が有する負荷レベルカウンタ(不図示)の更新を行う(ステップ104)。
【0058】負荷レベルカウンタの値は、初期設定時には0に設定される。負荷レベルカウンタの更新が終了すると、ステップ101に戻り、インターフェイス制御手段1及びインターフェイス負荷検出手段3は、上位装置からのコマンド受信待ち状態に移行する。
【0059】以上の一連のシーケンスは、上位装置からコマンドが送られる度に起動され、コマンドキュー2へのコマンドの追加格納動作と、負荷レベルカウンタの更新動作が行われる。以上の動作は実施の形態の1と全く同じである。
【0060】一方、コマンド実行手段4は、コマンドキュー2にコマンドが格納されていることを検出すると(図7ステップ301)、コマンドキュー2よりコマンドを取り出す(ステップ302)。
【0061】このとき、コマンドキュー2よりコマンドが取り出されると、コマンドキュー2に格納されたコマンドの数が減少する。そのため、インターフェイス負荷検出手段3は、コマンドキュー2に格納されているコマンド数をインデックス値として負荷レベル変換テーブル10を再び参照し、該コマンド数に対応する新たな負荷レベル値を取得して、この負荷レベル値により、自身が有する負荷レベルカウンタの更新を行う(ステップ303)。
【0062】続いて、コマンド実行手段4は、コマンドキュー2より取り出したコマンドの解析を行うと共に(ステップ304)、自身が有するリトライカウンタ(不図示)を0に初期化する(ステップ305)。このリトライカウンタは、リトライの回数をカウントするものであり、このリトライカウンタの値を参照することにより、何回目のリトライかを容易に判別できるようになっている。しかも、このリトライカウンタの値は、リトライテーブル9上のリトライ処理の内容を示すオフセット値にもなる。
【0063】リトライカウンタの初期化後、コマンド実行手段4は、解析したコマンドの内容に従って、位置決め実行手段6およびリード/ライト実行手段7に指示を与える。これにより、位置決め実行手段6は、上記コマンドで指定される、媒体5のセクタ上にヘッド11を位置決めし、リード/ライト実行手段7は、該セクタに対する読み出し又は書き込みを実行する(ステップ306)。
【0064】エラー検出手段8は、読み出し又は書き込み時に発生するエラーを検出する。媒体5に対する読み出し又は書き込みの実行後、コマンド実行手段4は、エラー検出手段8の検出結果に基づいて、エラーで終了したか否かをチェックする(ステップ307)。そして、コマンド実行手段4は、正常に終了していれば、ステップ301に戻り、エラーで終了しているならば、リトライ処理を開始するためのステップ308に移行する。
【0065】ステップ308において、コマンド実行手段4は、最初のリトライを行うために、負荷レベルカウンタの値をインデックス値、リトライカウンタの値をオフセット値として、リトライテーブル9を参照する。実施の形態の1と同様に、リトライテーブル9には、負荷レベルカウンタの値に応じたリトライ処理の内容が記述されている。また、リトライテーブル9には、対応する負荷レベルカウンタ値が大きくなるほど、処理の軽いリトライ処理が記述されている。
【0066】前述のように、コマンド実行手段4は、負荷レベルカウンタの値をインデックス値、リトライカウンタの値をオフセット値として、リトライテーブル9を参照する。例えば、負荷レベルカウンタの値が1で、リトライカウンタの値が0であれば、図4のリトライテーブル9から取得するリトライ処理の内容は、「単純リトライ3回」となり、負荷レベルカウンタの値が1で、リトライカウンタの値が1であれば、リトライ処理の内容は、「オフセット+1」となる。
【0067】つまり、実施の形態の1では、特定の負荷レベルカウンタ値に対応するリトライ処理の全内容を1度に取得したのに対し、本実施の形態では、これらリトライ処理のうちの1回分だけを取得する。次に、コマンド実行手段4は、リトライテーブル9から取得したリトライ処理の内容をチェックし(ステップ309)、これが実行すべき内容であれば(つまり、リトライ処理の終了を示す情報でない場合)、ステップ310に進む。
【0068】ステップ310において、コマンド実行手段4は、リトライテーブル9から取得したリトライ処理の内容に従って、位置決め実行手段6及びリード/ライト実行手段7に指示を与え、リトライを実行する。例えば、負荷レベルカウンタの値が1で、リトライカウンタの値が0の場合、コマンド実行手段4は、最初のリトライ処理として、エラーの発生したセクタに対するリトライ(読み出し又は書き込み)を3回行う。
【0069】このリトライ処理の実行後、コマンド実行手段4は、リトライを行った結果を判定する(ステップ311)。そして、コマンド実行手段4は、エラー検出手段8の検出結果より、エラーが発生してリトライが失敗したと判断した場合には、リトライカウンタの値を1増やし(ステップ314)、再びステップ308に戻ってリトライテーブル9の参照を行う。
【0070】また、コマンド実行手段4は、リトライに成功したと判断した場合、コマンドキュー2から取り出したコマンドで指定された、読み出し又は書き込みすべきセクタが残っているかどうかを判定する(ステップ312)。コマンド実行手段4は、残りのセクタが無い場合、ステップ301に戻り、次のコマンドを取り出すシーケンスに移る。また、残りのセクタが有る場合、コマンド実行手段4は、残りのセクタに対する読み出し又は書き込みを行うためにステップ305に戻る。
【0071】また、コマンド実行手段4は、ステップ309においてリトライテーブル9から取得した内容がリトライ処理の終了を示す情報であった場合、リトライを終了し、コマンドの実行がエラーで終了したことを上位装置に報告し(ステップ315)、ステップ301に戻り、次のコマンドを取り出すシーケンスに移る。
【0072】次に、本実施の形態の磁気ディスク装置の動作をより具体的な例を用いて説明する。実施の形態の1と同様に、図6に示すトラック20上にはエラーセクタ32,36が存在し、初期時には、コマンドキュー2には、何もコマンドが登録されていないものとする。
【0073】まず、図示しない上位装置よりコマンドがインターフェイス制御手段1に送られると、インターフェイス制御手段1は、コマンドが送られてきたことを検出し(図2ステップ101)、コマンド受信処理を開始する(ステップ102)。このときのコマンドは、図6のトラック20上のセクタ30からセクタ34までのデータの読み出しを指示するリードコマンドとする。そして、インターフェイス制御手段1は、受信したコマンドをコマンドキュー2に格納する(ステップ103)。
【0074】ここでは、コマンドキュー2に格納されたコマンドの数が1となっているため、インターフェイス負荷検出手段3が、コマンド数1をインデックス値として、図5の負荷レベル変換テーブル10を参照すると、負荷レベル値1が得られる。これにより、インターフェイス負荷検出手段3は、負荷レベルカウンタの値を1に更新する(ステップ104)。ステップ102〜104のコマンド受信処理が終了すると、ステップ101に戻り、次のコマンドの受信に備える。
【0075】一方、コマンド実行手段4は、コマンドキュー2にコマンドが格納されていることを検出すると(図7ステップ301)、コマンドキュー2よりコマンドを取り出す(ステップ302)。これにより、コマンドキュー2に格納されたコマンドの数が0となる。
【0076】そのため、インターフェイス負荷検出手段3が、コマンド数0をインデックス値として負荷レベル変換テーブル10を参照すると、負荷レベル値0が得られる。これにより、インターフェイス負荷検出手段3は、負荷レベルカウンタの値を0に更新する(ステップ303)。
【0077】続いて、コマンド実行手段4は、コマンドキュー2より取り出したコマンドの解析を行うと共に(ステップ304)、自身が有するリトライカウンタを0に初期化する(ステップ305)。
【0078】そして、コマンド実行手段4は、解析したコマンドの内容に従って、トラック20上のセクタ30からセクタ34までの読み出しを位置決め実行手段6及びリード/ライト実行手段7に指示する。この指示に応じて、位置決め実行手段6は、媒体5のトラック20上にヘッド11を位置決めし、リード/ライト実行手段7は、セクタ30〜34からの読み出しを実行する(ステップ306)。
【0079】このとき、トラック20上のセクタ32がエラーセクタであるため、セクタ30,31から読み出しを行った後、セクタ32でエラーが発生して読み出しが終了する。ステップ307の判定において、コマンド実行手段4は、ステップ306の読み出し処理がエラーで終了しているため、ステップ308に進む。
【0080】ステップ308において、コマンド実行手段4は、エラー時のリトライ処理の内容を決定するために、負荷レベルカウンタの参照を行う。ステップ301〜307までの一連の処理の間に、コマンドの受信が行われていないとすれば、コマンドキュー2に格納されたコマンドの数が0のままなので、負荷レベルカウンタの値は、更新されておらず、0のままである。
【0081】しかし、コマンドを受信している場合には、図2のステップ101〜104までのシーケンスをたどる度に、負荷レベルカウンタの更新が行われている。ここで、上述のステップ301〜307までの一連の処理の間に、2つのコマンドを受信したとすると、1度目のコマンド受信で、コマンドキュー2に格納されたコマンドの数は1となり、コマンド数1に対応する負荷レベル変換テーブル10の負荷レベル値は1なので、負荷レベルカウンタの値は1に更新される。同様に、2度目のコマンド受信で、負荷レベルカウンタの値は2に更新される。
【0082】ステップ308において、コマンド実行手段4は、負荷レベルカウンタの値をインデックス値、リトライカウンタの値をオフセット値として、リトライテーブル9を参照する。上述のように、ステップ301〜307までの一連の処理の間に、2つのコマンドを受信したとすると、負荷レベルカウンタの値は2であり、リトライカウンタの値は、まだリトライを一度も行っていないために0である。
【0083】図4のリトライテーブル9において、負荷レベルカウンタ値2、リトライカウンタ値0に対応するリトライ処理の内容は、「単純リトライ1回」である。次に、コマンド実行手段4は、リトライテーブル9から取得したリトライ処理の内容をチェックし(ステップ309)、これが実行すべき内容であれば、ステップ310に進み、リトライテーブル9から取得した内容がリトライ処理の終了を示す情報であれば、ステップ315に進む。
【0084】ここでは、リトライテーブル9から取得したリトライ処理の内容が「単純リトライ1回」なので、ステップ310に進む。ステップ310において、コマンド実行手段4は、リトライテーブル9から取得したリトライ処理の内容に従って、エラーセクタ32に対するリトライ(読み出し)を位置決め実行手段6及びリード/ライト実行手段7に指示する。
【0085】このリトライ処理の実行後、コマンド実行手段4は、リトライを行った結果を判定する(ステップ311)。そして、コマンド実行手段4は、エラーが発生してリトライが失敗したと判断した場合には、リトライカウンタの値を1増やす(ステップ314)。このとき、リトライカウンタの値は、0から1インクリメントされて、1となる。
【0086】リトライカウンタをインクリメントした後、ステップ308に処理が戻るが、リトライ中に上位装置よりコマンドが送信されることが十分に予測される。このとき、更に2つのコマンドを受信したとすると、コマンドキュー2に格納されたコマンドの数は合計4となり、コマンド数4に対応する負荷レベル変換テーブル10の負荷レベル値は3なので、負荷レベルカウンタの値は3に更新される。
【0087】図4のリトライテーブル9において、負荷レベルカウンタ値3、リトライカウンタ値1に対応するリトライ処理の内容は、「終了」である。よって、コマンド実行手段4は、ステップ309においてYESと判定し、リトライを終了して、コマンドの実行がエラーで終了したことを上位装置に報告し(ステップ315)、ステップ301に戻り、次のコマンドを取り出すシーケンスに移る。
【0088】また、リトライ中に上位装置からのコマンドを受信しなかった場合、負荷レベルカウンタの値は2のままであり、かつリトライカウンタの値が1なので、ステップ308においてリトライテーブル9から取得するリトライ処理の内容は、「オフセット+1」となる。よって、コマンド実行手段4は、ステップ309においてNOと判定し、1単位量のオフセットシーク後にエラーセクタ32に対するリトライを1回行う。
【0089】このリトライ処理の実行後、コマンド実行手段4は、リトライを行った結果を判定する(ステップ311)。そして、コマンド実行手段4は、リトライに成功した場合、継続して読み出し又は書き込みすべきセクタが残っているかどうかを判定する(ステップ312)。ここでは、セクタ30からセクタ34までの読み出しを指示するリードコマンドに応じて、セクタ30,31の読み出しが完了しており、セクタ32の読み出しもリトライによって完了している。
【0090】よって、セクタ33,セクタ34の読み出しが未了なので、コマンド実行手段4は、ステップ313において、読み出すべきセクタをセクタ33,セクタ34に再設定する。そして、コマンド実行手段4は、ステップ305に戻って、リトライカウンタを0に初期化し、トラック20上のセクタ33,セクタ34からの読み出しを位置決め実行手段6およびリード/ライト実行手段7に指示する(ステップ306)。
【0091】上記と同様にステップ307〜311の処理を実行し、ステップ312において残りのセクタがなくなった場合、コマンド実行手段4は、コマンドの実行を終了し、ステップ301に戻って次のコマンドの取り出し動作に移行する。図7のステップ301〜ステップ315の処理は、コマンドキュー2にコマンドが無くなるまで継続的に処理される。
【0092】次に、本実施の形態の磁気ディスク装置の効果について説明する。本実施の形態では、コマンドキュー2に格納されたコマンドの数を、上位装置とのインターフェイスの負荷レベルと見なしている。そして、インターフェイスの負荷が軽いときは処理の重いリトライ処理が行われ、負荷が重いときは処理の軽いリトライ処理が行われるように、インターフェイスの負荷レベルとリトライ処理の内容とを対応付けてリトライテーブル9に記憶させ、リトライが必要なときにコマンド実行手段4がリトライテーブル9を参照するようにしたので、インターフェイスの負荷が重いときに、リトライにかかる時間を削減することができる。これにより、動画が中断したり乱れたりするようなデータ転送の中断を防止することができる。
【0093】さらに、本実施の形態では、同一のセクタをリトライする度に、インターフェイスの負荷レベルを示す負荷レベルカウンタの参照を行った後に、リトライテーブル9を参照して、リトライ処理の内容を変えるため、同一セクタのリトライ中でも、負荷レベルが高くなると、リトライを中断することができ、リトライにかかる時間を削減することができる。
【0094】
【発明の効果】本発明によれば、請求項1又は4に記載のように、上位装置からのコマンドをインターフェイス制御手段で受信し、インターフェイス制御手段で受信したコマンドをコマンドキューに格納し、コマンドキューに格納されたコマンドの総数に基づいて、上位装置とのインターフェイスの負荷を検出し、リトライが必要なときは、検出した負荷の度合いに応じたリトライ処理の内容をリトライテーブルより取得して、リトライ処理を実行することにより、インターフェイスの負荷が重いときに、リトライにかかる時間を削減することができる。その結果、動画処理用のシステムに使用される磁気ディスク装置では、動画が中断したり乱れたりするようなデータ転送の中断を防止することができる。また、エラーが発生してリトライが必要になる度に、リトライテーブルを参照して、リトライ処理の内容を変えるため、1つのコマンドで複数箇所のセクタがエラーする場合でも、リトライにかかる時間を削減することができる。
【0095】また、請求項2又は5に記載のように、インターフェイスの負荷が軽いときは処理の重いリトライ処理が行われ、負荷が重いときは処理の軽いリトライ処理が行われるように、インターフェイスの負荷とリトライ処理の内容とを対応付けてリトライテーブルに記憶させることにより、データ転送の中断を最小限に抑え、かつ限定された時間の中で最も有効なリトライ処理を行うことができる。
【0096】また、請求項3又は6に記載のように、媒体上の同一のセクタに対してリトライを実行する度に、リトライテーブルを参照して、その時点の負荷の度合いに応じたリトライ処理の内容をリトライテーブルより取得することにより、同一セクタのリトライ中でも、インターフェイスの負荷が重くなると、リトライを中断することができ、リトライにかかる時間を削減することができる。
【出願人】 【識別番号】000004237
【氏名又は名称】日本電気株式会社
【出願日】 平成10年11月5日(1998.11.5)
【代理人】 【識別番号】100064621
【弁理士】
【氏名又は名称】山川 政樹
【公開番号】 特開2000−148410(P2000−148410A)
【公開日】 平成12年5月30日(2000.5.30)
【出願番号】 特願平10−314478