(57)【要約】【課題】本発明の課題は、ハード構成量を増大させることなく、データ処理の高速化を実現することができる記憶装置を提供することである。【解決手段】本発明によれば、処理装置へのデータ送信の完了を待つことなく、当該カウンタを新たな命令により読み出されたデータの処理に使用することができる。ゆえに、ハード構成量を増大させることなく、データ処理の高速化を実現することができる。【選択図】図２
2010015613.tif 000002
【特許請求の範囲】
【請求項１】
処理装置から受信した命令に基づいて記録媒体から読み出されたデータを記憶する第一記憶部を有し、該第一記憶部に記憶されているデータを該処理装置に送信する記憶装置において、
該処理装置から受信した該命令を記憶する第二記憶部と、
該第一記憶部が記憶しているデータの数をカウントするカウンタと、
該カウンタのカウント値に基づき、該第一記憶部に記録されているデータを該処理装置へ送信し、該命令により読み出されたデータが該第一記憶部に記憶された場合、該データの記憶が完了したことを示す識別情報を該二記憶部に書き込み、該識別情報に基づき、該第一記憶部に記憶された該データを該処理装置へ送信する制御部と、
を有することを特徴とする記憶装置。
【請求項２】
該制御部は、該第二記憶部に該識別情報を書き込んだ場合、該処理装置から受信する新たな命令に基づいて、該記録媒体から新たなデータの読み出しを開始することを特徴とする請求項１記載の記憶装置。
【請求項３】
該制御部は、該第一記憶部に記憶された該データを該処理装置に送信している間に、該新たな命令に基づいて、該記録媒体から新たなデータを読み出すことを特徴とする請求項２記載の記憶装置。
【請求項４】
該制御部は、該第二記憶部に該識別情報を書き込んだ場合、該カウンタのカウンタ値を初期化することを特徴とする請求項１記載の記憶装置。
【請求項５】
受信した命令に基づいて記録媒体から読み出されたデータを記憶し、該記憶されたデータを送信する記憶装置の制御方法において、
該命令を記憶し、
該記憶されたデータの数をカウントし、
該カウントされた値に基づき該記録されているデータを送信し、
該命令により読み出されたデータの記憶が完了した場合、該データの記憶が完了したことを示す識別情報を書き込み、該識別情報に基づき該記憶された該データを送信すること、
を特徴とする制御方法。
【請求項６】
該識別情報を書き込んだ場合、受信する新たな命令に基づいて、該記録媒体から新たなデータの読み出しを開始することを特徴とする請求項５記載の制御方法。
【請求項７】
記憶された該データを送信している間に、該新たな命令に基づいて、該記録媒体から新たなデータを読み出すことを特徴とする請求項６記載の制御方法。
【請求項８】
該識別情報を書き込んだ場合、該カウントされた値を初期化することを特徴とする請求項５記載の制御方法。
【請求項９】
処理装置から受信した命令に基づいて記録媒体から読み出されたデータを記憶する第一記憶部を有し、該第一記憶部に記憶されているデータを該処理装置に送信する記憶装置を制御する制御プログラムであって、
該記憶装置を、該処理装置から受信した該命令を第二記憶部に記憶する記憶手段、
該第一記憶部が記憶しているデータの数を計数する計数手段、
該計数手段の計数値に基づき、該第一記憶部に記録されているデータを該処理装置へ送信し、該命令により読み出されたデータの該第一記憶部への記憶が完了した場合、該データの記憶が完了したことを示す識別情報を該二記憶部に書き込み、該識別情報に基づき、該第一記憶部に記憶された該データを該処理装置へ送信する制御部手段、
として機能させることを特徴とする制御プログラム。
【請求項１０】
該制御手段は、該第二記憶部に該識別情報を書き込んだ場合、該処理装置から受信する新たな命令に基づいて、該記録媒体から新たなデータの読み出しを開始することを特徴とする請求項９記載の制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、処理装置から受信した命令に基づいて記録媒体から読み出されたデータを記憶する第一記憶部を有し、第一記憶部に記憶されているデータを処理装置に送信する記憶装置に関する。
【背景技術】
【０００２】
記憶装置の１つである磁気ディスク装置におけるデータの読み出し方法として、例えば以下の方法がある。１つは、ホストである処理装置からリードコマンドを受信すると、要求されたデータがバッファに既に格納されていると判定し、バッファに格納された要求データを読み出して、処理装置に送信する方法である。また、１つは、処理装置からリードコマンドを受信すると、要求されたデータがバッファに格納されていないと判定し、要求データを記録媒体のセクタから読み出し、バッファに格納してから処理装置に送信する方法である。ここで、データ読み出しの際、要求されたデータが格納されたセクタ近傍のセクタから要求されていないデータも読み出し、先読みデータとしてバッファに格納しておく。先読みデータが新たなリードコマンドが要求するデータである場合、先読みデータを即座にバッファから読み出すことができ、データの高速処理を図っている。
【０００３】
記録媒体からの読み出しデータがバッファに格納されているか否かの判定は、磁気ディスク装置に備えられたカウンタの値に基づいて行われる。記録媒体から読み出されたデータがバッファに格納される度にカウンタの値は制御部によってインクリメントされ、バッファに格納されたデータが処理装置に送信される度にカウンタの値は制御部によってデクリメントされる。カウンタの値を参照することにより、データがバッファに格納されているか否かを判定することができる。処理装置へのデータの送信が完了すると、カウンタの値は０に初期化される。上述した様に、バッファには先読みデータも格納されているため、処理装置へ送信すべきデータの数とバッファに格納されるデータの数は一致しない。ゆえに、要求データを処理装置に送信する度に、制御部がカウンタの値をデクリメントしても、カウンタの値はバッファに格納されている先読みデータの数を示してしまう。そこで、カウンタの値を初期化することで、カウンタの値が１以上になってしまい、新たなリードコマンドが要求するデータがバッファに既に格納されていると判定されることを防いでいる。
【０００４】
ここで、磁気ディスク装置は、処理装置から複数のリードコマンドを受信した場合、バッファに格納されたデータの処理装置への送信中に、新たなリードコマンドに対応するデータの読み出し処理を開始する。並行処理を行うことで、データの高速処理を図るためである。制御部は、新たなリードコマンドに対応するデータが格納されているセクタにヘッドを移動させる。ヘッドの移動中に処理装置へのデータ送信が完了すれば、カウンタの値を初期化することができる。ゆえに、新たなリードコマンドが要求するデータの読み出し処理でカウンタを使用することができる。しかし、データ送信が完了しなければ、新たなリードコマンドが要求するデータの読み出し処理でカウンタを使用することはできない。カウンタの値を初期化してしまうと、処理装置に送信すべきデータがバッファに格納されていないと判定されるからである。ゆえに、データ送信完了を待たなければならず、処理装置へのデータの送信が遅れてしまい、データ処理の高速化を図れなくなる。あるリードコマンドに対応するデータを処理装置に送信している間に、新たなリードコマンドに対応するデータの読み出しを実現する方法として、カウンタを複数備える方法がある。しかし、新たなカウンタの増設は、磁気ディスク装置のハード構成量の増大の要因となる。
【０００５】
先行技術文献としては、下記のものがある。
【特許文献１】特開２０００−１２３４７５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
本発明の課題は、ハード構成量を増大させることなく、データ処理の高速化を実現することができる記憶装置を提供することである。
【課題を解決するための手段】
【０００７】
処理装置から受信した命令に基づいて記録媒体から読み出されたデータを記憶する第一記憶部を有し、該第一記憶部に記憶されているデータを該処理装置に送信する記憶装置は、該処理装置から受信した該命令を記憶する第二記憶部と、該第一記憶部が記憶しているデータの数をカウントするカウンタと、該命令により読み出されたデータが該第一記憶部に記憶されていない場合、該カウンタのカウント値に基づき、該第一記憶部に記録されているデータを該処理装置へ送信し、該命令により読み出されたデータが該第一記憶部に記憶された場合、該データの記憶が完了したことを示す識別情報を該二記憶部に書き込み、該識別情報に基づき、該カウンタを参照せずに、該第一記憶部に記憶された該データを該処理装置へ送信する制御部とを有する。
【発明の効果】
【０００８】
本発明によれば、処理装置へのデータ送信の完了を待つことなく、当該カウンタを新たな命令により読み出されたデータの処理に使用することができる。ゆえに、ハード構成量を増大させることなく、データ処理の高速化を実現することができる。
【発明を実施するための最良の形態】
【０００９】
以下に図面を用いて本実施形態について説明する。図１は、本実施形態における磁気ディスク装置１００を表す。磁気ディスク装置１００は、Ｍｉｃｒｏ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ（ＭＰＵ、マイクロプロセッサ）１０２、Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ（ＲＯＭ、ロム）１０４、Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ（ＲＡＭ、ラム）１０６、制御ユニット２００、バッファ２１０、信号処理部１０８、磁気ディスク１１０、サーボ制御部１１２及びヘッドアクチュエータ１１４から構成される。また、磁気ディスク装置１００は、イニシエータ３００と接続され、データを処理する処理装置として機能とするホスト５００と、コマンドやデータの送受信を行う。
【００１０】
ＭＰＵ１０２は、制御ユニット２００と連動して磁気ディスク装置１００の制御を行う。ＲＯＭ１０４は、ＭＰＵ１０２が実行するプログラムやデータ等を格納する。ＲＡＭ１０６には、装置起動時に、制御コードと変数を含むドライブ制御ソフトウェアであるファームウェアが展開される。なお、ファームウェアは、例えば、ＲＯＭ１０４と磁気ディスク１１０に分けて格納されれば良い。磁気ディスク１１０は、スピンドルモータの回転軸に装着される。磁気ディスク１１０は、例えば、１００００ｒｐｍで回転する。磁気ディスク１１０は、データを格納する。
【００１１】
ヘッドアクチュエータ１１４は、アームの先端にヘッドを搭載している。ヘッドには、ライトヘッド素子とリードヘッド素子とが一体化されて搭載されている。磁気ディスク１１０に対するヘッドによる磁気記録方式としては、長手磁気記録方式または垂直磁気記録方式のいずれであっても良い。サーボ制御部１１２は、ヘッドアクチュエータ１１４を制御し、ヘッドアクチュエータ１１４に搭載されたヘッドの磁気ディスク１１０に対する位置決めを行う。信号処理部１０８は、ヘッドアクチュエータ１１４に搭載されたヘッドに接続されている。信号処理部１０８は、上位装置であるホスト５００からのリードコマンド又はライトコマンドを受信する。信号処理部１０８は、受信したライトコマンドはヘッドに搭載されたライトヘッド素子に、受信したリードコマンドはヘッドに搭載されたリードヘッド素子にそれぞれ送信する。ヘッドは、信号処理部１０８からコマンドを受信すると磁気ディスク１１０に対してライト又はリードを行う。また、信号制御部１０８は、ヘッドが磁気ディスク１１０からリードしたデータを受信する。
【００１２】
図２は、データの読み出し処理を表す図である。図１において説明した制御ユニット２００は、コマンド制御部２０４、ディスク制御部２０６、イニシエータ制御部２０２及びバッファ制御部２０８を有する。コマンド制御部２０４は、コマンド情報テーブル２１８を有する。コマンド制御部２０４は、ホスト５００からイニシエータ３００を介して送信されるコマンドに従って、ディスク制御部２０６及びイニシエータ制御部２０２を起動する。バッファ制御部２０８は、データを格納するバッファ２１０のセグメントを管理する。
【００１３】
イニシエータ制御部２０２は、ホスト５００からイニシエータ３００を介してライトコマンド又はライトデータを受信すると、ライトコマンドはＭＰＵ１０２に、ライトデータはバッファ２１０にそれぞれ送信する。ＭＰＵ１０２は、イニシエータ制御部２０２から受信したライトコマンドの解読を行う。イニシエータ制御部２０２はホスト５００からイニシエータ３００を介して受信したライトデータをバッファ２１０に格納する。ディスク制御部２０６は、バッファ２１０に格納されているライトデータを所定のデータ形式に変換する。そして、ディスク制御部２０６は、ＥＣＣ符号を生成し、当該ライトデータに付加する。ディスク制御部２０６は、ＥＣＣ符号が付加されたデータを信号処理部１０８を介してヘッドに送信する。ヘッドは、受信した当該ライトデータをライトヘッドから磁気ディスク１１０に書き込む。なお、ライトの際、ＭＰＵ１０２はサーボ制御部１１２にヘッド位置決め信号を送信する。サーボ制御部１１２は、受信したヘッド位置決め信号が指示するトラックにヘッドアクチュエータ１１４をシークさせ、トラック追従制御を行う。
【００１４】
図３は、コマンド制御部２０４を表す。コマンド制御部２０４は、イニシエータ制御部２０２から受信するコマンドを格納する。図３は、コマンド制御部２０４がコマンド情報テーブル２１８を格納している状態を表す。コマンド情報テーブル２１８は、イニシエータ情報、コマンド情報、バッファ情報及びコマンド実行情報を有する。イニシエータ情報とは、コマンドを発行したイニシエータを特定する情報である。コマンド情報は、Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓｉｎｇ（論理ブロックアドレス、ＬＢＡ）を含み、磁気ディスク１１０のセクタを指定するために用いられる。また、コマンド情報は、リードするデータのブロック数に関する情報を有する。バッファ情報は、データを読み出すバッファ２１０のセグメントを指定するために用いられる。セグメントとは、バッファ２１０を所定数に分割した区分のことである。コマンド実行情報は、バッファ情報フラグ及びデータフロー制御フラグを有する。バッファ情報フラグとは、バッファ２１０にデータが格納されているか否かを示すフラグである。バッファ情報フラグが有効になっている場合、バッファ２１０にデータが格納されていることを示す。一方、バッファ情報フラグが無効になっている場合、バッファ２１０にデータが格納されていないことを示す。データフロー制御フラグとは、バッファ２１０にコマンドが要求するデータが既に格納されているか否かを示すフラグである。データフロー制御フラグが有効になっている場合、コマンドが要求するデータがバッファ２１０に未だ格納されていないことを示す。一方、データフロー制御フラグが無効になっている場合、コマンドが要求するデータがバッファ２１０に既に格納されていることを示す。
【００１５】
イニシエータ制御部２０２は、イニシエータ３００からコマンドを受信すると、コマンドをコマンド制御部２０４に格納する。コマンド制御部２０４は、コマンドを受信するとイニシエータ制御部２０２及びディスク制御部２０６を起動する。コマンド制御部２０４は、ディスク制御部２０６、イニシエータ制御部２０２の処理状況に従ってディスク制御ポインタ２２２及びイニシエータ制御ポインタ２２４をコマンド情報テーブル２１８に指定する。ディスク制御部２０６及びイニシエータ制御部２０２は、ディスク制御ポインタ２２２及びイニシエータ制御ポインタ２２４を参照してコマンドを実行する。つまり、ディスク制御部２０６は、ディスク制御ポインタ２２２が指定しているコマンド情報テーブル２１８のコマンドを実行し、イニシエータ制御部２０２は、イニシエータ制御ポインタ２２４が指定しているコマンド情報テーブル２１８のコマンドを実行する。図３は、ディスク制御ポインタ２２２がコマンド３に関するコマンド情報テーブル２１８を指定し、イニシエータ制御ポインタ２２４がコマンド１に関するコマンド情報テーブル２１８を指定している状態を表す。ディスク制御部２０６は、コマンド３に関するコマンド情報テーブル２１８を参照して処理を実行し、イニシエータ制御部２０２は、コマンド１に関するコマンド情報テーブル２１８を参照して処理を実行する。
【００１６】
図４及び図５を参照して、データのリード処理について説明する。ステップＳ１０１において、ディスク制御部２０６は、バッファ２１０を参照し、イニシエータ３００が発行したコマンドが要求するデータがバッファ２１０に格納されているか否かを判定する。イニシエータ３００が発行したコマンドが要求するデータがバッファ２１０に格納されている場合、処理はステップＳ１０３へ移行する。ステップＳ１０３において、ディスク制御部２０６は、コマンド制御部２０４に格納されているコマンド情報テーブル２１８のバッファ情報フラグを有効にする。処理は終了する。一方、イニシエータ３００が発行したコマンドが要求するデータがバッファ２１０に格納されていない場合、処理はステップＳ１０２へ移行する。
【００１７】
ステップＳ１０２において、ディスク制御部２０６は、シーク起動を行う。具体的には、ディスク制御部２０６は、イニシエータ３００が発行したコマンド情報テーブル２１８のコマンド情報を参照し、サーボ制御部１１２を制御する。サーボ制御部１１２は、ヘッドアクチュエータ１１４に備えられたヘッドを目標のセクタに到達させる。処理はステップＳ１０４へ移行する。
【００１８】
ステップＳ１０４において、ディスク制御部２０６は、データフローカウンタ２１２を初期化する。具体的には、ディスク制御部２０６は、データフローカウンタ２１２の値を「０」に設定する。処理はステップＳ１０５へ移行する。
【００１９】
ステップＳ１０５において、ディスク制御部２０６は、コマンド制御部２０４に格納されているコマンド情報テーブル２１８のデータフロー制御フラグを有効にする。処理はステップＳ１０６へ移行する。
【００２０】
ステップＳ１０６において、ディスク制御部２０６は、コマンド制御部２０４に格納されているコマンド情報テーブル２１８のコマンド情報を参照して、読み出すべきデータが格納されているセクタ番号を取得する。また、ディスク制御部２０６は、読み出すべきデータが格納されているセクタ近傍のセクタを、先読みデータを読み出すセクタとして指定する。ディスク制御部２０６は、コマンド情報テーブル２１８から取得したセクタ番号と、先読みデータを読み出すセクタとから、停止セクタ番号格納部２１４の値を最終セクタの番号に設定する。処理はステップＳ１０７へ移行する。
【００２１】
ステップＳ１０７において、ディスク制御部２０６は、ステップＳ１０６において設定した停止セクタ番号格納部２１４の値と、サーボ制御部１１２が取得するセクタ情報とから、シークが完了したか否かを判定する。シークが完了した場合は、処理はステップＳ１０８へ移行する。一方、シークが完了していない場合は、処理はステップＳ１０７に戻る。
【００２２】
ステップＳ１０８において、ディスク制御部２０６は、ヘッドアクチュエータ１１４のヘッドに、目標のセクタに対してリードを行わせる。そして、ディスク制御部２０６は、リードしたデータをバッファ制御部２０８が指定するバッファ２１０のセグメントに格納する。処理はステップＳ１０９へ移行する。
【００２３】
ステップＳ１０９において、ディスク制御部２０６は、データが正常にリードできたか否かを判定する。具体的には、ディスク制御部２０６は、バッファ２１０に格納されたデータの正当性検証を当該データに付加されたＥｒｒｏｒ  Ｃｒｒｅｃｔｉｎｇ  Ｃｏｄｅ（ＥＣＣ、誤り訂正符号）によって行う。ディスク制御部２０６は、当該データからエラーを検出した場合、訂正可能なエラーであれば、データの訂正を行う。なお、データに誤り検出符号としてＣｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ（ＣＲＣ、巡回冗長検査）を付加しても良い。処理はステップＳ１１２へ移行する。一方、当該データからエラーを検出した場合、訂正不可能なエラーであれば、処理はステップＳ１１０へ移行する。
【００２４】
ステップＳ１１０において、ディスク制御部２０６は、データのリードのリトライを行うか否かを判定する。リトライを行うか否かは、例えば、リードを行った回数が予め定められた許容回数を超えているか否かを判定して決定すれば良い。当該許容回数はホスト５００からイニシエータ３００を通じてディスク制御部２０８に予め格納される。ディスク制御部２０８は、当該許容回数とリトライを行った回数とを比較して、リトライ回数が当該許容回数を超えた場合に、リトライを中止すれば良い。データのリードのリトライを行う場合、処理はステップＳ１０８に戻る。一方、データのリードのリトライを行わない場合、処理はステップＳ１１１へ移行する。
【００２５】
ステップＳ１１１において、ディスク制御部２０６は、ディスク制御部２０６は、コマンド制御部２０４に格納されているコマンド情報テーブル２１８のデータフロー制御フラグを無効にする。処理は終了する。
【００２６】
続いて、ステップＳ１０９において、データが正常にリードできたと判定され、処理がステップＳ１１２に移行した場合について説明する。ステップＳ１１２において、ディスク制御部２０６は、データフローカウンタ２１２を更新する。具体的には、ディスク制御部２０６は、データフローカウンタ２１２の値をインクリメントする。処理はステップＳ１１３へ移行する。
【００２７】
ステップＳ１１３において、ディスク制御部２０６は、コマンド制御部２０４に格納されているコマンド情報テーブル２１８のコマンド情報と、サーボ制御部１１２が取得するセクタ情報とから、最終セクタのリードが完了したか否かを判定する。最終セクタのリードが完了した場合、処理はステップＳ１１４へ移行する。ステップＳ１１４において、ディスク制御部２０６は、コマンド制御部２０４に格納されているコマンド情報テーブル２１８のデータフロー制御フラグを無効にする。処理は終了する。
【００２８】
ステップＳ１１５において、ディスク制御部２０６は、セグメントサイズがデータフローカウンタ２１２の値よりも大きいか否かを判定する。セグメントサイズは、バッファ２１０の各セグメントが格納することができるデータ量を表す。セグメントサイズがデータフローカウンタ２１２の値よりも大きいということは、バッファ２１０のセグメントがさらにデータを格納することができることを表す。一方、セグメントサイズがデータフローカウンタ２１２の値と同じということは、イニシエータ３００に転送すべきデータが上書きされてしまったことを表す。セグメントサイズがデータフローカウンタ２１２の値よりも大きい場合、次のセクタからデータを読み出すため、処理はステップＳ１０８に戻り、ディスク制御部２０６は、目標のセクタに対してリードを行う。一方、セグメントサイズがデータフローカウンタ２１２の値と同じ場合、バッファ２１０に格納されたデータが読み出されて、セグメントが新たなデータを格納できるようになるのを待つため、処理はステップＳ１１５に戻る。
【００２９】
図６及び図７を参照して、データの送信処理について説明する。ステップＳ２０１において、イニシエータ制御部２０２は、コマンド制御部２０４に格納されているコマンド情報テーブル２１８を参照して、バッファ情報フラグが有効であるか否かを判定する。バッファ情報フラグが有効である場合、処理はステップＳ２０２へ移行する。一方、バッファ情報フラグが有効でない場合、コマンド制御部２０４は、イニシエータ制御部２０２を起動できないため、処理は終了する。
【００３０】
ステップＳ２０２において、イニシエータ制御部２０２は、転送カウンタ２１６の値をイニシエータ３００が発行するコマンドが要求するデータの数にセットする。処理はステップＳ２０３へ移行する。
【００３１】
ステップＳ２０３において、イニシエータ制御部２０２は、イニシエータ３００へのデータ送信を開始する。処理はステップＳ２０４へ移行する。
【００３２】
ステップＳ２０４において、イニシエータ制御部２０２は、コマンド制御部２０４に格納されているコマンド情報テーブル２１８のデータフロー制御フラグが無効になっているか否かを判定する。データフロー制御フラグが無効になっている場合は、処理はステップＳ２０５へ移行する。ステップＳ２０５において、イニシエータ制御部２０２は、イニシエータ３００に送信すべきデータがバッファ２１０に格納されているため、当該データのイニシエータ３００への送信を実行する。処理は終了する。イニシエータ制御部２０２は、データフローカウンタ２１２を参照しなくても、データフロー制御フラグが無効になっているので、送信すべきデータがバッファ２１０に既に格納されていると判定することができる。よって、ディスク制御部２０６はデータフローカウンタ２１２を新たなコマンドが要求するデータの読み出しのために使用することができる。ゆえに、イニシエータ制御部２０２がデータをイニシエータ３００へ送信している間に、ディスク制御部２０６は新たなコマンドが要求するデータのリードを行うことができる。一方、データフロー制御が有効になっている場合は、処理はステップＳ２０６へ移行する。
【００３３】
ステップＳ２０６において、イニシエータ制御部２０２は、データフローカウンタ２１２を参照して、データフローカウンタ２１２の値が０よりも大きいか否かを判定する。データフローカウンタ２１２の値が０よりも大きいということは、前述したディスク制御部２０６によってデータが読み出され、バッファ制御部２０８が当該データをバッファ２１０に格納したことを意味する。イニシエータ制御部２０２は、データフローカウンタ２１２の値を参照することで、データがバッファ２１０に格納されているか否かを判定することができる。データフローカウンタ２１２の値が０よりも大きい場合、処理はステップＳ２０７へ移行する。一方、データフローカウンタ２１２の値が０である場合、処理はステップＳ２０４に戻る。
【００３４】
ステップＳ２０７において、イニシエータ制御部２０２は、バッファ２１０に格納されたデータのイニシエータ３００への送信を実行する。処理はステップＳ２０８へ移行する。
【００３５】
ステップＳ２０８において、イニシエータ制御部２０２は、コマンド情報テーブル２１８を参照して、データフロー制御が有効になっているか否かを判定する。データフロー制御が有効になっている場合、処理はステップＳ２１０へ移行する。一方、データフロー制御が無効になっている場合、処理はステップＳ２０９へ移行する。ステップＳ２０９において、イニシエータ制御部２０２は、イニシエータ３００に送信すべきデータがバッファ２１０に格納されているため、当該データのイニシエータ３００への送信を実行する。処理は終了する。
【００３６】
ステップＳ２１０において、イニシエータ制御部２０２は、データフローカウンタ２１２を更新する。具体的には、イニシエータ制御部２０２は、データフローカウンタ２１２の値をデクリメントする。処理はステップＳ２１１へ移行する。
【００３７】
ステップＳ２１１において、イニシエータ制御部２０２は、転送カウンタ２１６を更新する。具体的には、イニシエータ制御部２０２は、転送カウンタ２１６の値をデクリメントする。イニシエータ制御部２０２は、転送カウンタ２１６の値が０になるとデータのイニシエータ３００への送信が完了したと判定することができる。処理はステップＳ２１２へ移行する。
【００３８】
ステップＳ２１２において、イニシエータ制御部２０２は、コマンドが要求するデータのイニシエータ３００への送信が完了しているか否かを判定する。データのイニシエータ３００への送信が完了している場合、処理は終了する。一方、データのイニシエータ３００への送信が完了していない場合、処理はステップＳ２０４に戻る。
【００３９】
（本実施形態の有効性）
最後に本実施形態の有効性について説明する。図８は、コマンドが情報管理テーブル２１８にデータフロー制御フラグを有しない構成の磁気ディスク装置１００のデータ処理を表している。図８の上段は磁気ディスク装置１００の読み出し処理を、図８の中段は磁気ディスク装置１００の送信処理を、図８の下段はカウンタの値を表す。
【００４０】
磁気ディスク装置１００は読み出したデータＡ４０１をバッファに格納すると、カウンタをインクリメントして、カウンタの値を「１」とする。次に、磁気ディスク装置１００は読み出したデータＢ４０２をバッファに格納すると、カウンタをインクリメントして、カウンタの値を「２」とする。続いて、磁気ディスク装置１００は読み出したデータＣ４０３をバッファに格納すると、カウンタをインクリメントして、カウンタの値を「３」とする。さらに、磁気ディスク装置１００は読み出したデータＤ４０４をバッファに格納すると、カウンタをインクリメントして、カウンタの値を「４」とする。磁気ディスク装置１００は、バッファに格納されているデータＡ４０１をホストに送信すると、カウンタをデクリメントして、カウンタの値を「３」とする。最後に、磁気ディスク装置１００は読み出した先読データＥ４０５をバッファに格納すると、カウンタをインクリメントして、カウンタの値を「４」とする。先読データとは、コマンドが要求するデータではないが、予め読んでバッファに格納しておくデータのことである。先読データをバッファに格納しておくことで、新たなコマンドが当該先読データを要求した場合に、既にバッファに格納されているので、読み出し処理を効率良く行うことができる。磁気ディスク装置１００は、バッファに格納されているデータＢ４０２をホストに送信すると、カウンタをデクリメントして、カウンタの値を「３」とする。磁気ディスク装置１００は、バッファに格納されているデータＣ４０３をホストに送信すると、カウンタをデクリメントして、カウンタの値を「２」とする。最後に、磁気ディスク装置１００は、バッファに格納されているデータＤ４０４をホストに送信すると、カウンタをデクリメントして、カウンタの値を「１」とする。ホストへのデータ送信が完了して初めて、磁気ディスク装置１００は、次のコマンドで指示されたデータの読み出しを開始することができる。
【００４１】
以下、上述したように、磁気ディスク装置１００は、データＦ４０６、データＧ４０７、データＨ４０８、データＩ４０９及び先読データＪ４１０を読み出し、バッファに格納する。磁気ディスク装置１００は、データフローカウンタ２１２を参照してデータＦ４０６、データＧ４０７、データＨ４０８及びデータＩ４０９をホストへ送信する。
【００４２】
図９は、本実施形態における磁気ディスク装置１００の読み出し処理を表している。読み出し処理を行う前に、コマンド情報テーブル２１８には、例えば、１０個のコマンドが格納されている。イニシエータ制御部２０２は、例えば、ディスク制御部２０６が１つのコマンドを終了する度に、イニシエータ３００から新たなコマンドを受信し、コマンド情報テーブル２１８に格納する。図９の上段はディスク制御部２０６の処理を、図９の中段はイニシエータ制御部２０２の処理を、図９の下段はデータフローカウンタ２１２の値を表す。
【００４３】
ディスク制御部２０６は磁気ディスク１１０から読み出したデータＡ４０１をバッファ２１０に格納すると、データフローカウンタ２１２をインクリメントして、データフローカウンタ２１２の値を「１」とする。次に、ディスク制御部２０６は磁気ディスク１１０から読み出したデータＢ４０２をバッファ２１０に格納すると、データフローカウンタ２１２をインクリメントして、データフローカウンタ２１２の値を「２」とする。続いて、ディスク制御部２０６は磁気ディスク１１０から読み出したデータＣ４０３をバッファ２１０に格納すると、データフローカウンタ２１２をインクリメントして、データフローカウンタ２１２の値を「３」とする。さらに、ディスク制御部２０６は磁気ディスク１１０から読み出したデータＤ４０４をバッファ２１０に格納すると、データフローカウンタ２１２をインクリメントして、データフローカウンタ２１２の値を「４」とする。イニシエータ制御部２０２は、バッファに格納されているデータＡ４０１をホスト５００に送信すると、データフローカウンタ２１２をデクリメントして、データフローカウンタ２１２の値を「３」とする。最後に、ディスク制御部２０６は磁気ディスク１１０から読み出した先読データＥ４０５をバッファ２１０に格納すると、データフローカウンタ２１２をインクリメントして、データフローカウンタ２１２の値を「４」とする。ここで、ディスク制御部２０６は、コマンドによって指示されたデータをバッファ２１０に全て格納したので、コマンド情報テーブル２１８のデータフロー制御フラグを無効にする。
【００４４】
イニシエータ制御部２０２は、データフロー制御フラグを無効になっているので、データＢ４０２、データＣ４０３及びデータＤ４０４はバッファ２１０に格納されていると判断できる。よって、イニシエータ制御部２０２は、データフローカウンタ２１２を参照することなく、データＢ４０２、データＣ４０３及びデータＤ４０４をホスト５００へ送信することができる。イニシエータ制御部２０２は、ディスク制御部２０６が１つのコマンドを終了したので、イニシエータ３００から新たなコマンドを受信し、コマンド情報テーブル２１８に格納する。イニシエータ制御部２０２は、データフローカウンタ２１２を参照しないので、ディスク制御部２０６は、データフローカウンタ２１２を初期化し、新たなコマンドによって指示されたデータの読み出しを開始することができる。図９に表すように、イニシエータ制御部２０２が、データＣ４０３及びデータＤ４０４をホスト５００へ送信している間に、ディスク制御部２０６は、データＦ４０６の読出しを行うことができる。
【００４５】
以下、上述したように、ディスク制御部２０６は、データＧ４０７、データＨ４０８、データＩ４０９及び先読データＪ４１０を磁気ディスク１１０から読み出し、バッファ２１０に格納する。ディスク制御部２０６は、先読データＪ４１０をバッファ２１０に格納すると、データフロー制御フラグを無効にするので、イニシエータ制御部２０２は、フラグを参照し、データＦ４０６、データＧ４０７、データＨ４０８及びデータＩ４０９をホスト５００へ送信する。図９に表すように、イニシエータ制御部２０２が、データＧ４０７、データＨ４０８及びデータＩ４０９をホスト５００へ送信している間に、ディスク制御部２０６は、データＫ４１１、データＬ４１２及びデータＭ４１３の読出しを行うことができる。
【００４６】
以上の説明は、本実施形態をより良く理解させるために具体的に説明したものであって、別形態を制限するものではない。従って、趣旨を変更しない範囲で変更可能である。
【図面の簡単な説明】
【００４７】
【図１】磁気ディスク装置の構成を表す図である。
【図２】制御ユニットの構成を表す図である。
【図３】コマンド制御部を表す図である。
【図４】ディスク制御部の処理を表すフローチャート（その１）である。
【図５】ディスク制御部の処理を表すフローチャート（その２）である。
【図６】イニシエータ制御部の処理を表すフローチャート（その１）である。
【図７】イニシエータ制御部の処理を表すフローチャート（その２）である。
【図８】ディスク制御部による読み出し処理都イニシエータ制御部による送信処理との関係を表した図（その１）である。
【図９】ディスク制御部による読み出し処理都イニシエータ制御部による送信処理との関係を表した図（その２）である。
【符号の説明】
【００４８】
１００  磁気ディスク装置
１０２  ＭＰＵ
１０４  ＲＯＭ
１０６  ＲＡＭ
１０８  信号処理部
１１０  磁気ディスク
１１２  サーボ制御部
１１４  ヘッドアクチュエータ
２００  制御ユニット
２０２  イニシエータ制御部
２０４  コマンド制御部
２０６  ディスク制御部
２０８  バッファ制御部
２１０  バッファ
２１２  データフローカウンタ
２１４  停止セクタ番号格納部
２１６  転送カウンタ
２１８  コマンド情報テーブル
２２０  コマンド
２２２  ディスク制御ポインタ
２２４  イニシエータ制御ポインタ
３００  イニシエータ
４０１  データＡ
４０２  データＢ
４０３  データＣ
４０４  データＤ
４０５  データＥ
４０６  データＦ
４０７  データＧ
４０８  データＨ
４０９  データＩ
４１０  データＪ
４１１  データＫ
４１２  データＬ
４１３  データＭ
５００  ホスト
【図１】
2010015613.tif 000003
【図２】
2010015613.tif 000004
【図３】
2010015613.tif 000005
【図４】
2010015613.tif 000006
【図５】
2010015613.tif 000007
【図６】
2010015613.tif 000008
【図７】
2010015613.tif 000009
【図８】
2010015613.tif 000010
【図９】
2010015613.tif 000011