(57)【要約】      （修正有）【課題】  ホストとデータ格納装置との間でのバッファデータを転送する改良した技術を提供する。【解決手段】  エクステントレコードをホストエクステントレコードセットの次のホストエクステントレコードに対してリンクさせるホストポインター、及びエクステントレコードを格納装置エクステントレコードセットの次の格納装置エクステントレコードへリンクさせる格納装置ポインターを有している。又、ホストと格納装置との間でデータを転送するシステムが提供され、エクステントテーブルが該データバッファと関連しており、該エクステントテーブルは少なくとも１個のエクステントレコード、該ホスト及び該エクステントテーブルへ結合されているＬＢＡチェーンテーブル、該格納装置及び該エクステントテーブルへ結合されているトラックセクションテーブルを包含している。【選択図】      図１
2004295893.tif 000002
【特許請求の範囲】
【請求項１】
エクステントを基礎としたデータバッファ用のエクステントレコードにおいて、
エクステントレコードをホストエクステントレコードセットの次のホストエクステントレコードへリンクさせるホストポインター、
エクステントレコードを格納装置エクステントレコードセットの次の格納装置エクステントレコードへリンクさせる格納装置ポインター、
を有していることを特徴とするエクステントレコード。
【請求項２】
請求項１において、前記ホストエクステントレコードセット及び前記格納装置エクステントレコードセットが２個又はそれ以上のエクステントレコードを有していることを特徴とするエクステントレコード。
【請求項３】
請求項１において、前記ホストエクステントレコードセットがデータバッファ内の非逐次的エクステントの位置を定義することを特徴とするエクステントレコード。
【請求項４】
請求項３において、非逐次的エクステントがホストからのホストＬＢＡチェーンデータを有していることを特徴とするエクステントレコード。
【請求項５】
請求項４において、前記ホスト装置がコンピュータであることを特徴とするエクステントレコード。
【請求項６】
請求項１において、前記格納装置エクステントレコードセットが前記データバッファ内の非逐次的エクステントに対する位置を定義することを特徴とするエクステントレコード。
【請求項７】
請求項６において、前記非逐次的エクステントが格納装置からのトラックセクションデータを有していることを特徴とするエクステントレコード。
【請求項８】
請求項７において、前記格納装置がハードディスクであることを特徴とするエクステントレコード。
【請求項９】
請求項１において、前記ホストエクステントレコードセット及び前記格納装置エクステントレコードセットが少なくとも１個のエクステントレコードを共有することを特徴とするエクステントレコード。
【請求項１０】
請求項９において、前記ホストエクステントレコードセットが前記格納装置エクステントレコードセット内に存在しない少なくとも１個のエクステントレコードを有していることを特徴とするエクステントレコード。
【請求項１１】
ホストと格納装置との間でデータを転送するシステムにおいて、
データバッファがホスト及び格納装置へ結合されており、前記データバッファ内のメモリが１個又はそれ以上のエクステントへ分割されており、
エクステントテーブルが前記データバッファと関連しており、前記エクステントテーブルが少なくとも１個のエクステントレコードを有しており、
ＬＢＡチェーンテーブルが前記ホスト及び前記エクステントテーブルへ結合されており、
トラックセクションテーブルが前記格納装置及び前記エクステントテーブルへ結合されている、
ことを特徴とするシステム。
【請求項１２】
請求項１１において、ホストパイプが前記ホスト及び前記データバッファへ結合されていることを特徴とするシステム。
【請求項１３】
請求項１２において、前記ホストパイプが前記ＬＢＡチェーンテーブルへ結合していることを特徴とするシステム。
【請求項１４】
請求項１１において、ディスクパイプが前記格納装置及び前記データバッファへ結合していることを特徴とするシステム。
【請求項１５】
請求項１４において、前記ディスクパイプが前記トラックセクションテーブルへ結合していることを特徴とするシステム。
【請求項１６】
請求項１１において、バッファマネージャが前記データバッファへ結合していることを特徴とするシステム。
【請求項１７】
請求項１６において、ヒット検知器が前記バッファマネージャへ結合しており、前記ヒット検知器が前記ＬＢＡチェーンテーブルにおけるキャッシュヒットを測定することを特徴とするシステム。
【請求項１８】
請求項１１において、前記エクステントレコードがホストプリンタと格納装置ポインターとを有していることを特徴とするシステム。
【請求項１９】
請求項１１において、前記ホストがコンピュータであることを特徴とするシステム。
【請求項２０】
請求項１１において、前記格納装置がハードディスクであることを特徴とするシステム。
【請求項２１】
エクステントを基礎としたデータバッファをサーチする方法において、
ホストにより要求されたＬＢＡを見つけ出すためにエクステントレコードにおけるホストポインターをサーチし、
格納装置により要求されたトラックセクションを見つけ出すためにエクステントレコードにおける格納装置ポインターをサーチする、
ことを特徴とする方法。
【請求項２２】
請求項２１において、前記ホストポインターが前記エクステントレコードをホストエクステントレコードセットにおける別のホストエクステントレコードへリンクさせることを特徴とする方法。
【請求項２３】
請求項２２において、前記ホストエクステントレコードセットがホストＬＢＡチェーン内のデータを有するデータバッファ内のエクステントの位置を画定することを特徴とする方法。
【請求項２４】
請求項２３において、前記エクステントが前記データバッファにおいて非逐次的であることを特徴とする方法。
【請求項２５】
請求項２１において、前記格納装置ポインターが前記エクステントレコードを格納装置エクステントレコードセットにおける別の格納装置エクステントレコードへリンクさせることを特徴とする方法。
【請求項２６】
請求項２５において、前記格納装置エクステントレコードセットが格納装置のトラックセクションにおけるデータを有する前記データバッファにおけるエクステントの位置を画定することを特徴とする方法。
【請求項２７】
請求項２６において、前記エクステントが前記データバッファにおいて非逐次的であることを特徴とする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、大略、ホストとデータ格納装置との間でのバッファしたデータの転送に関するものである。更に詳細には、本発明は、データバッファにおける空間の割当てのためのエクステントを基礎としたキャッシュメモリ管理の方法及びシステムに関するものである。
【背景技術】
【０００２】
データバッファは、ホスト（例えば、コンピュータ）と格納装置（例えば、ディスクドライブ）との間でのデータの転送を容易化させるためにデータ格納装置において使用することが可能である。該バッファは、通常、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）から構成され、ホストと格納装置との間でのデータの転送をバッファするために一時的にデータ格納位置を提供する。
【０００３】
データバッファにおけるデータ空間は、１つ又はそれ以上のデータセグメントへ分割することが可能である。セグメント化したデータバッファは、ホストとディスクドライブとの間でデータをバッファするためのデータ速度マッチング装置として適したものである。然しながら、データアクセス性能を改善する高度なキャッシュ及びディスクアルゴリズムを実現しようとする場合に、バッファセグメントは限界を有している。
【０００４】
１つの限界は、固定寸法のバッファセグメントは、しばしば、それらの空間の一部が使用されないままとなることである。この空間は、他のデータの使用のために割り当てることを不可能であり、データバッファの格納密度に悪影響を与える。別の限界は、開始ＬＢＡを定義し且つＬＢＡチェーンの長さを決定するためにブロックカウンタを使用する従来の方法ではセグメント化バッファにおけるＬＢＡの単一シーケンスをトラック即ち追跡することが可能であるに過ぎないということである。このことは、又、バッファの格納密度を制限する。何故ならば、ＬＢＡチェーンはバッファ内の逐次的なセグメント内に格納されねばならないからである。
【０００５】
従来のセグメント化バッファの場合の更に別の限界は、データセグメントはバッファから又はそれへ逐次的な順番で転送されるものではないという理由から発生する。このことは、ホストからデータバッファへの転送の場合にはそれ程厳しい限界ではない。何故ならば、ホストデータは、ほぼ常に、逐次的なＬＢＡのチェーン内に格納されるからである。然しながら、バッファとハードディスクとの間での逐次的なデータセグメントの転送は、しばしば、かなり効率が悪いものとなる。何故ならば、逐次的なＬＢＡデータはディスクの異なるトラック上に格納される場合があるからである。従来のセグメント化データバッファのこれら及びその他の限界は本発明により対処されるものである。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
本発明は、以上の点に鑑みなされたものであって、上述した如き従来技術の欠点を解消し、ホストとデータ格納装置との間のバッファ型データの転送を行う改良した技術を提供することを目的とする。本発明の別の目的とするところは、データバッファにおける空間の割当てのためのエクステントを基礎としたキャッシュメモリ管理の改良した方法及びシステムを提供することである。
【課題を解決するための手段】
【０００７】
本発明の１実施例によれば、エクステントを基礎としたデータバッファ用のエクステントレコードが提供され、該エクステントレコードは、エクステントレコードをホストエクステントレコードセットの次のホストエクステントレコードへリンクさせるホストポインターと、エクステントレコードを格納装置エクステントレコードセットの次の格納装置エクステントレコードへリンクさせる格納装置ポインターとを有している。
【０００８】
本発明の別の実施例によれば、ホストと格納装置との間でデータを転送するシステムが提供され、該システムは該ホスト及び該格納装置へ結合されているデータバッファを有しており、該データバッファにおけるメモリが１つ又はそれ以上のエクステントに分割されており、エクステントテーブルが該データバッファと関連しており、該エクステントテーブルは少なくとも１個のエクステントレコードを有しており、ＬＢＡチェーンテーブルが該ホスト及び該エクステントテーブルへ結合しており、且つトラックセクションテーブルが該格納装置及び該エクステントテーブルへ結合している。
【０００９】
本発明の更に別の実施例によれば、エクステントを基礎としたデータバッファをサーチする方法が提供され、該方法は、ホストにより要求されたＬＢＡチェーンを見つけ出すためにエクステントレコードにおけるホストポインターをサーチし、且つ格納装置により要求されたトラックセクションを見つけ出すためにエクステントレコードにおける格納装置ポインターをサーチすることを包含している。
【発明を実施するための最良の形態】
【００１０】
定義
バッファブロックは、データバッファにおける２５６個の連続する１６ビットワード（又は５１２個の連続する８ビットバイト）として定義される。
【００１１】
エクステントは、ロジックブロックアドレス（ＬＢＡ）空間において逐次的なデータを包含する１個又はそれ以上の逐次的なバッファブロックのセットとして定義される。エクステントは、区別なく、ホスト書込及びディスク読取により受取られるブロックを表わす。
【００１２】
エクステントテーブルは、１つ又はそれ以上の一緒にリンクされたエクステントとして定義される。このテーブルは、バッファブロック編成に関しての及びどのようにしてそれが各バッファブロック内に包含されているＬＢＡに関連するかの情報を包含している。それは、又、ホスト及びディスクがバッファ内のブロックをトラバースする順番に関しての情報も包含している。
【００１３】
ＬＢＡチェーンは、エクステントアロケーションテーブルにより一緒にリンクされた１つ又はそれ以上のエクステントとして定義される。ＬＢＡチェーンは、ロジックブロックアドレス（ＬＢＡ）空間において逐次的であるデータを包含している。ＬＢＡチェーンサイズはそのコンポーネントエクステントの全体的な寸法である。
【００１４】
ＬＢＡチェーンテーブルは、ＬＢＡチェーンがバッファにおいて作成された時間順によって一緒にリンクされた１つ又はそれ以上のＬＢＡチェーンとして定義される。ＬＢＡチェーンは、ディスク読取によって又はホスト書込によって作成することが可能である。ＬＢＡチェーンテーブルは、キャッシュヒット又はキャッシュミスの条件を決定するための読取コマンドに関してのホストにより使用される。
【００１５】
トラックセクションは、単一ディスクトラック上の１つ又はそれ以上の隣接するセクターとして定義される。これは、開始セクター及びセクターの数を意味する。トラックセクションは、常に、１つ又はそれ以上のエクステントから構成されている。トラックセクションは、それが構成されているエクステントよりも小さいものとなることはない。
【００１６】
トラックセクションテーブルは、単一ディスクトラック上のセクターのディスク転送を記述するための一緒にリンクされた１つ又はそれ以上のトラックセクションとして定義される。トラックセクションテーブルは、停止することなしにトラック上のトラックセクションを転送することが可能なディスクシーケンサに対するトラックを定義する。
【００１７】
本発明は、読取コマンド及び書込コマンドに応答してホストと格納装置との間でデータを転送するためにデータバッファを使用するシステム及び方法を包含している。バッファメモリ内の空間は、逐次的なバッファブロック内に逐次的なＬＢＡデータを配置させることにより効率的に割当てられる。然しながら、より多くのコマンドが処理される場合には、バッファメモリは益々断片化され、前にキャッシュしたデータを保存しながら、新たな読取及び書込要求に対して逐次的なバッファ空間を割当てることを困難とさせる。本発明においては、ホストデータ及び格納データの逐次的なＬＢＡをデータバッファ内に非逐次的に格納することが可能である。バッファメモリ内のこの非逐次的データは、ホスト及び格納装置による効率的なサーチ及び転送のために一緒にリンクされている。
【００１８】
本発明の実施例は、又、バッファ内のデータの位置をカタログに登録し且つサーチするためにホスト及び格納媒体によって使用される別個のテーブルを包含している。データは、格納装置とは異なってホスト内において編成させることが可能であり、且つバッファ性能は、単一のテーブルがバッファ内のデータをトラック即ち追跡するために両方により使用される場合に減少される場合がある。例えば、ホストは逐次的なＬＢＡに編成されたＤＲＡＭメモリを具備するコンピュータである場合があり、一方格納装置はディスク上のトラックを形成する５１２バイトセクターに編成されたディスク格納部を具備するハードディスクドライブである場合がある。この場合には、データのブロックがホストＤＲＡＭメモリとバッファとの間で最も速く転送される順番は、バッファとハードディスクでの間での最も速い転送に対する順番と異なる場合がある。２つの別個のテーブルを有することにより、ホスト及び格納媒体は、これらのコンポーネントにおいてデータが編成されている態様に対して最適であるシーケンスでバッファデータをサーチし且つ転送することが可能な場合がある。本発明のシステム及び方法の実施例についてより詳細に説明する前に、本発明に基づくデータ転送の幾つかのメカニズムについて説明する。
【００１９】
バッファ型データ転送の例
キャッシュバッファ型データ転送においては、情報のカテゴリがデータキャッシュ内のデータの各ブロックに対してトラックされ、且つこれらのカテゴリは、（１）ディスク上の特定のＬＢＡに属するブロック内のデータを識別するディスク上のブロック位置、（２）バッファ内の特定の位置を介してディスクへ又はそれから転送されるブロック内のデータを識別するバッファ内のブロック位置、（３）同一のＬＢＡに関する別のブロックに関して受取ったブロックにおける相対的な時間を識別し且つそのブロックの有効性を制御するブロックタイムコヒーレンシィ（時間一貫性）を包含している。通常、特定のＬＢＡデータを包含する最も新しい／最も若いブロックは有効である。
【００２０】
これらの情報のカテゴリは、キャッシュブックキーピング方法により結合されている。キャッシュ情報のブックキーピングに対する１つの目標は、情報のカテゴリを記述し且つそれらを一体的に結合させるのに必要なハードウエアを最小とさせることである。例えば、ホスト及びディスクコマンドは、開始ＬＢＡ及びブロック数の両方において変化する場合があり、一方データバッファは固定した数のブロックである。これらのコマンドは、各コマンドに対して必要とされる正確な数のバッファブロックを割当てることにより取扱われる。コマンドがやってくると、バッファブロックをそのコマンドに対して割当て且つ割当解除することが可能である。このように、バッファブロック資源は空間の無駄を最小として効率的に使用される。
【００２１】
次に、図１を参照すると、本発明の１実施例に基づくデータバッファ内のホストＬＢＡとエクステントとの間の関係が示されている。図１は、ホストの観点から見たホストＬＢＡ、バッファエクステント、バッファブロックの相互関係を示している。ホストはデータバッファ内に可変寸法型エクステント１０２に編成されている２個のＬＢＡチェーン１０４及び１０６を供給する。この例においては、ＬＢＡチェーン１０４及び１０６は３個のエクステントに分割されており、夫々、ラベルＡ，Ｂ，Ｃ及びＸ，Ｙ，Ｚである。エクステント１０２は、ホストＬＢＡチェーンを形成するために、任意の順番で、バッファ内のどこかにおいてリンクさせることが可能である。
【００２２】
次に、図２を参照すると、格納装置トラックセクションと図１に示したエクステントとの間の関係が示されている。図２は、格納装置の観点からのディストラックセクションと、バッファエクステントと、バッファブロックとの相互関係を示している。この例においては、ディスク動作はディスクによりトラック２０４及び２０６に分解され、更に、夫々、トラックセクションＡ，Ｂ，Ｃ及びＸ，Ｙ，Ｚに分解される。トラック２０４及び２０６からのトラックセクションはバッファ内のエクステント２０２に対してマッピングされる。エクステント２０２はホストＬＢＡチェーン１０４及び１０６、従ってホスト転送に対してマッピングされる。
【００２３】
書込動作の場合には、書込データがホストによりバッファへ書込まれた順番が、バッファからディスクへデータが書込まれる順番と異なる場合がある。この並び替えは、ディスク位置最適化アルゴリズム、又は書込マージング、又は書込キャンセレーションに起因する場合がある。読取動作の場合には、ディスクはプリフェッチしたデータ又はポストフェッチしたデータ（例えば、読取ルックアヘッド）をオリジナルのホスト要求へアペンド即ち追加させる場合がある。ディスクトラックセクションは、バッファ内の１つ又はそれ以上のエクステントである場合があり、且つ１個未満のエクステントとなることはない。トラックセクションが１個未満のエクステントである場合には、ディスクは、トラックセクションとパッチするようにそのエクステントが分割されるか又はトリミングされることを要求する場合がある。ＬＢＡチェーンがホストからディスクへフィルタダウン（ｆｉｌｔｅｒ  ｄｏｗｎ）する場合に、ＬＢＡチェーンに対してマッピングされたディスクトラックセクションとマッチさせるためにエクステントの数及びそれらの寸法が変化する場合がある。
【００２４】
両者が可及的に自動化させることが可能であるような態様でホストと格納装置とを結合させることが望ましい。ホスト転送と格納転送の異なる場合を検討し且つそれらがどのようにバッファに関連しているか観察すると、示されるバッファエクステントリストが同一であり、共通のエクステントを共用し、又は完全に異なるものとなる場合があることが理解される。然しながら、両方のリストは与えられたクライエント（ホスト又は格納装置）がどのようにしてバッファを制御するかを記述する。本発明は、図１及び２に示したリストを各クライエントに対する次のエクステントに関連する情報がそのエクステント内に包含されるように図１及び２に示したリストをバッファエクステントの１つのリスト内に結合させることが可能な方法及びシステムを包含している。このことは、ＬＢＡチェーンとトラックセクションとの間のリアルタイムな関係を形成する。
【００２５】
図３は、本発明の１実施例に基づいてホスト及び格納装置がどのようにしてエクステントのセット即ち１組のエクステント３０４を独立的にトラバースすることが可能であるかを示すことによってこのことを例示している。ホスト側３０２は、ＬＢＡチェーンが任意の数のエクステント３０４を包含することが可能であることを示している。一方、ディスク型３０６においては、ＬＢＡチェーンを構成するエクステント３０４は、ＬＢＡチェーン内又はＬＢＡチェーンを横断して異なる順番でトラバースすることが可能である。このことは、トラックセクションの物理的境界に起因している。ホスト及び格納装置に対する次のエクステントに関連する情報が各エクステント内に包含されているバッファエクステントの１つのリスト３０４が存在している。これは、ホストのＬＢＡチェーンと格納装置のトラックセクションとの間にリアルタイムな関係を形成する。
【００２６】
図３はエクステントのリスト３０４の中で分割されているバッファエクステントをトラバースする３個のＬＢＡチェーンテーブル３０２Ａ，３０２Ｂ，３０２Ｃを示している。最初のＬＢＡチェーンテーブル３０２Ａは逐次的な順番で３個のエクステント３０４Ａ，３０４Ｂ，３０４Ｃをトラバースする。一方、最初のディスクトラックセクション３０６Ａはエクステント３０４Ｂで開始する異なる順番でエクステントのセット（組）３０４をトラバースし次いでエクステント３０４Ｃへ移行し、最終的にエクステント３０４Ａへジャンプする。図３は、又、ホストＬＢＡ及びディスクトラックセクションを異なる数のエクステントへ分割することが可能であることを示しており、ホストＬＢＡチェーンテーブル３０２Ｂはエクステント３０４Ｄ、次いでエクステント３０４Ｅをトラバースし、一方ディスクトラックセクション３０６Ｂはエクステント３０４Ｄに対してのみマッピングされる。更に、図３はどのようにしてホストＬＢＡチェーンテーブル３０２Ｃがエクステント３０４Ｆ，３０４Ｇ，３０４Ｈ、最終的に３０４Ｉに対してマッピングされるかを示しており、それらは、又、ディスクトラックセクション３０４Ｃ及び３０４Ｄ内に包含されるエクステントである。
【００２７】
本発明は、読取コマンド及び書込コマンドに応答してホストと格納装置との間でデータを転送するためにデータバッファを使用するシステム及び方法を包含している。バッファメモリ内の空間は、逐次的なバッファブロック内に逐次的なＬＢＡデータを配置させることにより効率的に割当てられる。然しながら、より多くのコマンドが処理される場合には、バッファメモリは益々断片化され、前にキャッシュしたデータを保存しながら新たな読取要求及び書込要求に対して逐次的なバッファ空間を割当てることが困難となる。本発明においては、ホストデータ及び格納データの逐次的なＬＢＡをデータバッファにおいて非逐次的に格納することが可能である。バッファメモリ内の非逐次的データは、ホスト及び格納装置による効率的なサーチ及び転送のために一体的にリンクされている。
【００２８】
本発明の実施例は、又、バッファ内のデータの位置をカタログに登録し且つサーチするためのホスト及び格納媒体により使用される別個のテーブルを包含している。データは、格納装置におけるものとは異なってホスト内において編成することが可能であり且つバッファ性能は、バッファ内のデータをトラックするために単一のテーブルが両者により使用される場合に減少される場合がある。例えば、ホストは逐次的ＬＢＡに編成されたＤＲＡＭメモリを具備するコンピュータとすることが可能であり、一方格納装置は、ディスク上にトラックを形成する５１２バイトセクターに編成されているディスク格納部を具備するハードディスクドライブとすることが可能である。この場合には、データのブロックがホストＤＲＡＭメモリとバッファとの間で最も速く転送される順番は、しばしば、バッファとハードディスクとの間での最も速い転送に対する順番と異なる場合がある。２つの別個のテーブルを有することにより、ホスト及び格納媒体は、データがこれらのコンポーネントにおいて編成される対応に対して最適であるシーケンスでバッファデータをサーチし且つ転送することが可能な場合がある。
【００２９】
拡張型キャッシュ動作の例
ホスト、キャッシュ、ディスクの間のインターフェース
インターフェースがホストからコマンドを受取り且つバッファ資源に対してキャッシュへ要求を送る。キャッシュは新たなＬＢＡチェーンテーブルエントリを作成し且つ該チェーンに対しバッファエクステントを割当てることが可能である。次いで、キャッシュがディスクへ要求を送る。読取の場合には、キャッシュは、その要求と共に捕獲すべきスペキュレイティブ（瞑想的）データの種類を示す（これは、事前読取、事後読取、両方又はデータなしを包含することが可能である）。ディスクは開始セクター及び幾つかのセクターをそれが読取るかに関する情報でキャッシュに応答する。該キャッシュは、次いで、ＬＢＡチェーンエントリを修正し且つステータスをインターフェースへ送り戻すことが可能である。
【００３０】
実現に依存して、キャッシュ又はホストはキャッシュサーチエンジンを開始させる場合がありそれはデータが使用可能である場合にホスト転送を開始させる。書込の場合には、キャッシュはディスクへ書込要求を送る場合がある。
【００３１】
読取コマンド処理
該インターフェースはホストから読取コマンドを受取り、キャッシュサーチエンジンを開始させる。キャッシュサーチエンジンは、ヒットに対してＬＢＡチェーンテーブルをサーチする。キャッシュサーチエンジンは、１つ又はそれ以上のＬＢＡチェーンを横断してヘッドヒット及びテールヒットを検知することが可能である。キャッシュサーチエンジンは任意のキャッシュヒットに対してホストへのデータ転送を開始させる。各ＬＢＡチェーンエントリはヒットカウンタを具備している。このカウンタは、ＬＢＡチェーンが割当てられ且つそのエントリにおいて検知された各ヒットに対してインクリメントされる場合に、ゼロへ初期化される。ヒットカウンタがそのカウントに到達すると、それは更にインクリメントされることはない。
【００３２】
キャッシュサーチエンジンがキャッシュミス（例えば、ヘッド、テール又はフル）を検知すると、それはファームウエアにＬＢＡのミスの開始及びそのミスの長さを知らせる。インターフェースファームウエアは、キャッシュファームウエアからミスしたデータに対する新たなＬＢＡチェーンを要求する。この要求は、開始ＬＢＡ及び長さを包含している。その要求には、又、事前読取、事後読取又は要求のみの読取等のスペキュレイティブデータに関する情報を包含させることが可能である。これは、検知されたキャッシュミスのタイプに基づく場合がある。トータルなミスは事前読取及び事後読取に対する要求を発生する場合があり、ヘッドヒットは事後読取に対する要求を発生し、且つテールヒットは事前読取に対する要求を発生させる。
【００３３】
キャッシュファームウエアは最初の未使用のエントリから新たなＬＢＡチェーンエントリを形成する。フリーなエントリが存在する場合には、キャッシュブロックがディスクが完了した最も古いＬＢＡチェーンエントリ（例えば、ディスクへ書込んだ又はディスクから読取ったデータ）を見つけ出す。このチェーンに関連するエクステントはフリーなプールへ解放される。最も古いＬＢＡチェーンが読取られる場合には、該ファームウエアはそれと関連するヒットカウンタを検査してそれをフリーとさせるか否かを決定することが可能である。
【００３４】
キャッシュファームウエアは、フリーなエクステントを割当てることによりこのＬＢＡチェーンに対してバッファ空間を割当てる。割当てられるバッファ空間の量は、インターフェース要求（例えば、事前要求又は事後要求）に依存する。使用可能な充分なフリーなバッファスペースが存在しない場合、又は使用可能なフリーなエクステントが存在しない場合には、キャッシュファームウエアは、ディスクが１つの要求／複数個の要求を完了することを待機し、完了した要求と関連するエクステントをフリーとさせ、且つ新たにフリーとさせたバッファ空間を新たなＬＢＡチェーンに対して割当て且つリンクさせることが可能である。この処理は、新たな要求を満足させるために充分な資源がフリーとされるまで繰返すことが可能である。
【００３５】
必須の資源が使用可能である場合には、キャッシュファームウエアは要求されたデータを読取るためにディスクファームウエアへ要求を行うことが可能である。これは、開始ＬＢＡ、長さ、開始エクステント数を包含している。ディスクファームウエアは、キャッシュ要求からのデータを包含する新たなトラックキューエントリを形成する。次いで、ディスクファームウエアＬＢＡを物理的なトラック、ヘッド及びセクターへ変換させ且つランディングセクターを計算する。この情報はキャッシュへフィードバックさせることが可能である。キャッシュは開始ＬＢＡ及びＬＢＡチェーンの長さを該要求の前に読取ることが可能な（事前読取）第一セクターに基づいて調節し且つホストエクステントポインターを最初のホストが要求したセクターのエクステント／オフセットへ設定する。次いで、ホスト転送を開始することが可能であり、それはルームロジック（ｒｏｏｍ  ｌｏｇｉｃ）により制御することが可能である。次いで、ディスクファームウエアがそのトラックセクションキュー内にエントリを形成し、所望のトラックに対するシークを開始し、ディスクエクステントポインターを設定し、且つディスクシーケンサを開始する。
【００３６】
書込コマンド処理
インターフェースがホストから書込コマンドを受取ると、インターフェースファームウエアがキャッシュファームウエアから書込データに対する新たなＬＢＡチェーンを要求する場合がある。この要求は開始ＬＢＡ及び長さを包含している。
【００３７】
キャッシュファームウエアは、最初の未使用のエントリから新たなＬＢＡチェーンエントリを形成する場合がある。未使用のエントリが存在しない場合には、キャッシュファームウエアは、ディスクが完了した最も古いＬＢＡチェーンエントリ（ディスクへ書込んだ又はディスクから読取られたデータ）を見つけ出す場合がある。このチェーンに関連するエクステントはフリーなプールに対して解放される。最も古いＬＢＡチェーンエントリが読取である場合には、該ファームウエアはそれと関連するヒットカウンタを検査して、それがフリーとされるべきであるかを決定する。
【００３８】
キャッシュファームウエアは、フリーなエクステントを割当てることによりこのＬＢＡチェーンに対してバッファ空間を割当てることが可能である。使用可能な充分なフリーなバッファスペースが存在しないか又は使用可能なフリーなエクステントが存在しない場合には、キャッシュファームウエアは、ディスクが１つの要求／複数個の要求を完了することを待機し、完了した要求に関連するエクステントをフリーとさせ、且つ新たなフリーとさせたバッファ空間を新たなＬＢＡチェーンに対して割当て且つリンクさせることが可能である。この処理は、充分な資源が新たな要求を達成するのに充分にフリー即ち解放されるまで繰返すことが可能である。この時点において、ホスト転送を開始することが可能であり、それはルームロジックにより制御することが可能である。
【００３９】
転送が開始されるまでホストコマンドからの時間的拘束が存在する場合には、キャッシュファームウエアは、最初のセクター／ブロックを転送するのに充分なバッファ資源が使用可能であることを確保すべきである。
【００４０】
キャッシュファームウエアは要求されたデータを書込むためにディスクファームウエアに対して要求を行うことが可能である。そのデータは、開始ＬＢＡ、長さ、開始エクステント番号を包含する場合がある。次いで、ディスクファームウエアはキャッシュ要求からのデータを包含する新たなトラックキューエントリを形成する。次いで、ディスクファームウエアがＬＢＡを物理的なトラック、ヘッド及びセクターへ変換し且つランディングセクターを計算する。次いで、ディスクファームウエアは、新たな要求の物理的位置に基づいてそのトラックキューを並び替え且つ適宜それに対してサービスを行う。
【００４１】
キャッシュサーチエンジン動作
キャッシュエンジンはハードウエア状態マシンであって、それは、開始されると、有効なＬＢＡチェーンテーブルエントリをサーチし且つ要求したデータのキャッシュヒットを検知する。キャッシュサーチは、読取コマンドを受領した場合にハードウエアにより、又はファームウエアにより喚起させることが可能である。
【００４２】
キャッシュサーチエンジンは、常に、最も若いＬＢＡチェーンから最も古いものへサーチを行う。このことは、キャッシュヒットが最も最近のデータに関するものであることを確保する。キャッシュサーチエンジンは要求したデータのヘッド又はテールに関してのヒットを検知することが可能である。ヘッドヒットが検知される場合には、そのデータがホストへ転送される。キャッシュサーチエンジンがキャッシュミス（例えば、ヘッド、テール又はフル）を検知すると、それはミスしているＬＢＡの開始及びそのミスの長さを表わす。サーチエンジンは停止し且つファームウエアがミスしているデータに対する読取を開始させる。ファームウエアは、次いで、サーチを再度開始させ、それはミスしているデータをホストへ転送する。
【００４３】
ディスク遅延型解放ロジック
２つのディスクデータポインターが存在しており、即ち、ディスクへ又はそれから転送される各セクターに対してインクリメントするリアルタイムポインター及びセクターが良好なものと決定される場合にインクリメントするレリーズ（解放）ポインターである。書込みの場合には、良好ということは、今読取ったバーストに関して良好なサーボステータスであることを意味する。読取に関しては、良好であるということは、ＥＣＣエラーが存在しないか又は補正によってエラーが直されたことを意味する。トラックセクションをトラバースし、次いでトラックセクションテーブル内のエクステントをトラバースすることは両方のポインターを前進させる。
【００４４】
拡張型キャッシュを有するディスクコマンドキューイングの例
ディスクブロックコマンド概観
ディスクブロックはキャッシュマネージャブロックからＬＢＡのセット（組）に対するコマンドを受取る。これらのコマンドは、ディスクに対して、逐次的なＬＢＡからなるあるセットをバッファへ又はバッファから転送することを命令する。与えられたＬＢＡ要求を満足させるためにディスク上の物理的セクターを転送すべきであるかを決定することはディスクブロックの責任である。ディスクレイアウト及び欠陥性のある物理的セクターの数及び位置に依存して、ディスクブロックに与えられるコマンドは１つ又は多数のトラック上の１つ又は多数のトラックセクション内へ処理される。コマンドがそれの異なるトラック及びトラックセクション内に処理されると、ディスクブロックは個々のトラックに関して動作を行う。与えられたトラックに対するトラックセクションを終了すると、次のトラックに対するシークを開始し且つそのトラックに関する要求されたトラックセクションの転送を開始する。
【００４５】
ディスクブロック性能問題
ディスクブロックは別のトラックをシークする前の時間において１つのトラックに関して動作するので、ディスク性能に影響を与える少なくとも４つのファクターが存在しており、即ち、（１）データ転送率、即ちどれ程速くディスクがディスクからバッファ内へデータを転送することが可能であるか、（２）シーク時間、即ち１つのトラックから他のトラックへシークするのにかかる時間、（３）回転レイテンシー、即ち与えられたトラック上に到達した後に要求されたデータがヘッドの下側を通過するのにディスクが待機する時間、（４）コマンド処理オーバーヘッド、即ちそのコマンドと関連するデータをデータの転送を開始するためにディスクがコマンドを充分に認識し且つ処理するのにかかる時間、である。ディスクデータレートは、読取チャンネルデータレート、回転速度及び制御器論理速度の関数である。
【００４６】
シーク時間は、シーク動作の距離によって変化し、即ちターゲットトラックが現在のトラックから遠ければ遠い程、シーク時間はより長い。シーク時間は、しばしば、与えられたコマンドを実行するのにかかる時間の最も大きい部分であるので、トラック動作をキュー化即ち待ち行列化させ且つそれらのシーク時間を参照とさせる順番でそれらを実行することが可能であることが有益的である。換言すると、次のトラックが現在のトラックから最も小さいシーク時間を有するトラックとして選択される。
【００４７】
あるトラックセクションのアクセス時間に対する別のファクターは回転レイテンシーである。回転レイテンシーは、シーク後の与えられたトラック上に転送することが第一セクターと実際の要求されたデータとの間の差異である。ディスクがトラックセクション動作をキュー化すると、与えられたトラック上の予測された到着位置に最も近いトラックセクションを選択することが可能であることが有用である。
【００４８】
ディスク性能に対する別のファクターはコマンド処理時間である。この時間は顕著なものである場合がある。何故ならば、ディスクはＬＢＡアドレスを物理的ディスクアドレスへ変換するために多数の計算を行わねばならないからである。この時間の影響を最小とさせるために、ディスクファームウエアは、シークが行われている間にこれらの計算を行おうとする。このことは、全体的なコマンド処理時間からこれらの計算を行うのにかかる時間を隠す効果を有している。コマンドキューイングの場合には、他のコマンドが転送を行っている間及び／又はディスクが他のトラックをシークしている間に、ディスクがこれらの計算を実行する。
【００４９】
ディスクブロック性能目標
ディスクブロックが与えられたホストコマンドを完全に実行するのにかかる時間が、ホストが与えられたコマンドに対して待機せねばならない時間の殆どを構成するので、ディスクブロックの性能を最適化すべきである。１つの目標は、ディスクが積極的にバッファへ及びバッファからデータを転送する時間の量を最大とさせることである。この目標は他の二次的な目標に関連しており、以下のものを包含している。
【００５０】
１つの二次的目標は、可及的に多数のコマンドをトラック及びトラックセクション内へ処理することである。このことはディスクに対して未決のホスト要求内へ可及的に多くのビジビリティ即ち視認性を与え、従って次に処理するトラックは効率に基づいて選択される。このことは、各トラック上で転送することが可能なデータの量を最大とさせることを可能とし且つ前のものを完了する場合に新たなコマンドを処理することを可能とする。
【００５１】
別の二次的目標は、そのトラック上の要求されたデータに対して最も短い到着時間に基づいてトラックのリストを順番付けすることである。選択されるべき次のトラックは、どれ程迅速にそれがディスクへ及びそれからデータを転送することを開始することが可能であるかに基づくべきである。
【００５２】
ディスクコマンドタイプ
ディスクが受取る２つのタイプのデータ転送コマンドは読取コマンド及び書込コマンドである。これら２つのタイプのコマンドは２つの異なるディスクコマンドタイプに再編成することが可能である。
【００５３】
最初のコマンドタイプは、他のコマンドを開始する前にコマンド全体を始めから終りまで完了せねばならないコマンドを包含している（例えば、書込キャッシュがオフの状態での読取コマンド及び書込コマンド）。このタイプのコマンドは、ディスクがコマンドの進行状態を追跡することを必要とする。エラーに遭遇する場合に、そのステータスがコマンドに対して与えられる（例えば、エラーのタイプ、終了したブロックの数）。エラーが発生すると、そのエラーを超えてのセクターは転送することを必要とするものではない。このタイプのコマンドは「ディスク非キュー化」コマンドと呼称される。
【００５４】
２番目のコマンドタイプは、コマンドを処理し且つその他の既存のコマンドと合体させることが可能であり且つそれを任意の順番で処理することが可能なコマンドを包含している（例えば、書込キャッシュがオン状態での書込コマンド）。このタイプのコマンドは、ディスクがエラーであるコマンドを追跡させるがそれがどのコマンドからのものであるかを追跡するものでない場合がある。エラーに遭遇する場合には、ステータスがエラーにあるブロックに対して与えられる（例えば、エラーのタイプ、エラーのブロック番号）。コマンドの限界内に包含されているエラーに拘わらずにディスクはセクターを転送しようとする。このタイプのコマンドは「ディスクキュー化」コマンドと呼称される。
【００５５】
キュー化コマンドは、トラック及びトラックセクション内へ処理し、次いで上述した性能目標に合致する態様で順番付けすることが可能である。然しながら、非キュー化コマンドは、それらが完了されるまで、ディスクブロックのアテンションを取る。従って、上述した目標は、非キュー化コマンドに対する単一コマンドレベルにおいて適用される。このことは、コマンドにより与えられたＬＢＡ順番とは異なる順番でブロックを転送することが良好であるかもしれないことを意味している。このことを行うため且つコマンドの進行を測定するために、ディスクブロックはそれらがコマンド内において表われる順番でトラックセクションを追跡すべきである。
【００５６】
ディスクブロックコマンドキューイング構造
最初の構造はディスクコマンドキューエントリであり、それは以下の如くに表わすことが可能である。
【００５７】
【表１ａ】
2004295893.tif 000003
【００５８】
ディスクコマンドキューはディスク転送に対する要求を表わすエントリを保持している。ディスクファームウエアはこれらのエントリを使用してコマンド情報を追跡する。そのコマンドが非キュー化タイプである場合には、そのディスクコマンドの寿命に対してコマンドエントリが存在する。そのディスクコマンドがキュー化コマンドである場合には、ディスクファームウエアは、そのコマンドがトラック及びトラックセクション内に処理された後に、新たなコマンドを処理するためにこの構造をフリー即ち解放させる場合がある。キュー化コマンドをサービスする場合には、ディスクファームウエアはブロック番号指定でエラーを記録する。
【００５９】
ディスクコマンドキューエントリ属性は以下の如くに説明することが可能である。
【００６０】
ＬＢＡＣｈａｉｎＰｏｉｎｔｅｒ−ディスクがＬＢＡＣｈａｉｎＥｎｔｒｙにあるか又はそのフォーマットを有する構造へポインターが通過した。ＬＢＡｃｈａｉｎエントリが、ディスクが転送を開始するのに必要なコマンドパラメータを有している（例えば、ＯＰＣＯＤＥ、ＬＢＡ開始及び終了、開始エクステント）
ＣｏｍｍａｎｄＯｐｔｉｏｎｓ−これはコマンドと関連するオプションフラッグを包含している（例えば、ＡｕｔｏＲｅＡｌｌｏｃａｔｉｏｎＥｎａｂｌｅｄ、ＥｎｔｒｙＯｐｔｉｏｎｓ）
ＣｏｍｍａｎｄＰｒｏｇｒｅｓｓＱｕｅｕｅＨｅａｄＰｏｉｎｔｅｒ−与えられたコマンドのステータス及び進行が追跡される場合に、このポインターはコマンド進行キューに対するヘッダーエントリを指し示す。コマンドに基づくステータスが使用されない場合には、このポインターはＮｕｌｌへ設定される。
【００６１】
ＮｅｘｔＣｏｍｍａｎｄＱｕｅｕｅＥｎｔｒｙＰｏｉｎｔｅｒ−ディスクがコマンドの処理でビジーであり且つ新たなコマンドが到着する場合には、それらが受取られた順番でリンクされたリスト内に入れられる。このポインターは、処理すべき次のコマンドを指し示す。処理すべき１つのコマンドが存在している場合には、このポインターはＮｕｌｌへ設定することが可能である。
【００６２】
非キュー化コマンドの場合には、コマンドの進行を追跡するための条件はコマンド進行キューによって満足される場合があり、それは以下の如くに表わすことが可能である。
【００６３】
【表１ｂ】
2004295893.tif 000004
【００６４】
コマンド進行キューは、ディスクファームウエアが個別的にディスクコマンドのステータス及び進行を追跡する場合に使用することが可能である。コマンド進行キューに対するヘッダーは、コマンドに対するエラーコード及び完了したブロックの数を追跡する。コマンド進行キュー属性は以下の如くに説明することが可能である。
【００６５】
ＦｉｒｓｔＣｏｍｍａｎｄＰｒｏｇｒｅｓｓＥｎｔｒｙＰｏｉｎｔｅｒ−これは、進行キューにおける最初のエントリを指し示す。該キューにおける最初のエントリが終了されると、それはヘッダー値をアップデートする。
【００６６】
ＬａｓｔＣｏｍｍａｎｄＰｒｏｇｒｅｓｓＥｎｔｒｙＰｏｉｎｔｅｒ−これは、進行キューにおける最後のエントリを指し示す。このポインターは、コマンド処理期間中に、キュー上へエントリをアペンドするために使用される。
【００６７】
ＣｏｍｍａｎｄＥｒｒｏｒＣｏｄｅ−これは、ディスクが発生したエラーコードを保持する。
【００６８】
ＡｄｄｉｔｉｏｎａｌＥｒｒｏｒＣｏｄｅ−これは、ディスクサブシステムにより発生されたものでない可能性のある付加的なエラー情報を保持する。
【００６９】
ＮｕｍｂｅｒＯｆＳｅｃｔｏｒｓＣｏｍｐｌｅｔｅｄ−コマンドの第一セクターから順番に完了したセクターの数である。
【００７０】
ＣｏｍｍａｎｄＥｎｔｒｙＰｏｉｎｔｅｒ−これは、この進行キューヘッダーが関連するコマンドエントリに対して指し示す。これは、該コマンドから開始することなしにコマンドステータスをアップデートする１つの態様を与える。
【００７１】
そのコマンドに対して形成された全てのトラックセクションに対するコマンド進行キューエントリが存在している場合があり、それは以下の如くに表わすことが可能である。
【００７２】
【表１ｃ】
2004295893.tif 000005
【００７３】
コマンドが処理されると、進行エントリが、コマンド内に該当する順番で構成される各トラックセクションに対してキュー化される（例えば、低ＬＢＡから高ＬＢＡへ）。トラックセクションが完了すると、対応する進行キューエントリを除去することが可能であり且つ前のポインターにより示されるエントリがアップデートされる。前のポインターがＮＵＬＬである場合には、進行キューヘッダーがアップデートされる。コマンド進行キューエントリ属性は以下の如くに説明することが可能である。
【００７４】
ＰｒｅｖｉｏｕｓＣｏｍｍａｎｄＰｒｏｇｒｅｓｓＥｎｔｒｙＰｏｉｎｔｅｒ−これは、進行キューにおける前のエントリを指し示す。このエントリが削除されると、ＮｕｍｂｅｒＯｆＳｅｃｔｏｒｓＦｏｒＴｈｉｓＥｎｔｒｙとＡｄｄｉｔｉｏｎａｌＳｅｃｔｏｒｓＦｒｏｍＯｔｈｅｒＥｎｔｒｉｅｓの和が前のエントリのＡｄｄｉｔｉｏｎａｌＳｅｃｔｏｒｓＦｒｏｍＯｔｈｅｒＥｎｔｒｉｅｓフィールドへ付加される。
【００７５】
ＮｅｘｔＣｏｍｍａｎｄＰｒｏｇｒｅｓｓＥｎｔｒｙＰｏｉｎｔｅｒ−これは、進行キュー内の最後のエントリを指し示す。このポインターは、コマンド処理期間中に該キュー上へエントリをアペンドするために使用される。
【００７６】
ＮｕｍｂｅｒＯｆＳｅｃｔｏｒｓＦｏｒＴｈｉｓＥｎｔｒｙ−これは、このエントリが保持しているセクターの数である。
【００７７】
ＡｄｄｉｔｉｏｎａｌＳｅｃｔｒｏｓＦｒｏｍＯｔｈｅｒＥｎｔｒｉｅｓ−これは、このエントリが削除される場合にパスさせることが可能なセクターの数である。これらのセクターは、コマンドにおける後のセクターに対するエントリから来る。
【００７８】
キュー化コマンド及び非キュー化コマンドの両方の場合に、コマンドキューエントリを行うべきトラックのリスト及び与えられたトラックに関して行うべきトラックセクションのリスト内へ処理することが可能である。ディスクトラックキューはハードウエアセクションとファームウエアセクションとに分割される。ハードウエアセクションは、ハードウエアによって理解され、従って、それは、ファームウエアに対して、最も短いアクセス時間を有する次のトラックを選択することが可能である。ファームウエアは、現在のトラック位置に基づいてアクセス時間フィールドを設定し且つ維持する責任を担う。ハードウエアトラックキューは次の如くに表わすことが可能である。
【００７９】
【表１ｄ】
2004295893.tif 000006
【００８０】
ハードウエアトラックキューエントリ属性は以下の如くに説明することが可能である。
【００８１】
Ｆｌａｇｓ−これらのフラッグは、エントリを基礎としたハードウエアとファームウエアとの間の通信を助けるために使用される。
【００８２】
ＮｅｘｔＥｎｔｒｙＰｏｉｎｔｅｒ及びＰｒｅｖｉｏｕｓＥｎｔｒｙＰｏｉｎｔｅｒ−これらは、隣りのトラックキューエントリを指し示し且つリストをトラバースし、エントリを削除し且つ挿入する助けとなる。
【００８３】
Ｃｙｌｉｎｄｅｒ及びＨｅａｄ−これらは、ディスク上のトラック番号を形成し且つ媒体上のトラックの物理的位置を与える。
【００８４】
ＡｃｃｅｓｓＴｉｍｅ−これは、現在のトラックからこのトラックへアクセスするのに必要な時間の量を表わす値である。この値は、実際の時間でない場合があるが、より短いアクセス時間に対してより小さく且つより長いアクセス時間に対してより大きなものである場合がある。
【００８５】
ＦｉｒｍｗａｒｅＴｒａｃｋＥｎｔｒｙＰｏｉｎｔｅｒ−これは、トラックキューエントリのファームウエア部分を指し示す。
【００８６】
ファームウエアセクションは、与えられたトラックに関する付加的な情報を格納するためにファームウエアによって使用される。このファームウエア情報は、トラック上をデータを転送するための情報を記述する。ファームウエアトラックキューエントリは次のように表わすことが可能である。
【００８７】
【表１ｅ】
2004295893.tif 000007
【００８８】
ファームウエアトラックキューエントリ属性は以下の如くに説明することが可能である。
【００８９】
Ｆｌａｇｓ−機能はファームウエアによりコンフィギャラブル即ち形態特定可能である。
【００９０】
ＴｒａｃｋＳｋｅｗ−これは、このトラックに対するセクターにおけるトラックスキューを保持する。
【００９１】
ＺｏｎｅＴａｂｌｅＰｏｉｎｔｅｒ−これは、このトラックに対するゾーン情報を保持するゾーンテーブルを指し示す。
【００９２】
ＢｕｒｓｔＰｒｅｃｅｄｉｎｇＦｉｒｓｔＳｅｃｔｏｒ及びＢｕｒｓｔＦｏｌｌｏｗｉｎｇＬａｓｔＳｅｃｔｏｒ−これらは、このトラックに関する転送のサーボバースト境界を記述する。これらの数は、このトラックに対するアクセス期間を計算する場合に使用される。
【００９３】
ＴｒａｃｋＳｅｃｔｉｏｎＱｕｅｕｅＥｎｔｒｙＣｏｕｎｔ−これは、このトラックに関する転送を構成するトラックセクションの数を保持する。
【００９４】
ＴｒａｃｋＳｅｃｔｉｏｎＱｕｅｕｅ  Ｈｅａｄ及びＴａｉｌ  Ｐｏｉｎｔｅｒｓ−これらのポインターは、このトラックに対してのトラックセクションキューの始めと終りとに印を付ける。
【００９５】
各トラックは、そのトラック上で完了されるべきトラックセクションのリストを有している。トラックセクションエントリは、ディスクに対するバッファへのリンクを与える。ディスクトラックセクションキューは、２つの部分に分割され、即ちハードウエア部分とファームウエア部分である。ハードウエア部分は、ディスクから離れたセクターへ実際に転送を司る他のディスクハードウエアを供給するためにハードウエアにより使用することが可能である。それは、トラック上で１組の隣接するセクターを転送するためにディスクハードウエアにより使用することが可能な情報を包含している。ハードウエアトラックセクションキューは次のように表わすことが可能である。
【００９６】
【表１ｆ】
2004295893.tif 000008
【００９７】
ハードウエアトラックセクションキューエントリ属性は以下の如くに説明することが可能である。
【００９８】
ＳｔａｒｔｉｎｇＥｘｔｅｎｔＮｕｍｂｅｒ−これは、ディスクハードウエアに対して、このセクションにおけるセクターはどのエクステント番号から開始するかを告げる。ディスクがこの転送を開始すると、生のディスクポインターがこの値に設定される。
【００９９】
ＳｔａｒｔｉｎｇＯｆｆｓｅｔＩｎＥｘｔｅｎｔ−これは、ディスクハードウエアに対して、このセクションにおけるセクターが開始するのは与えられたエクステント内へのどのオフセットであるかを告げる。ディスクがこの転送を開始すると、生のディスクポインターオフセットがこの値に設定される。
【０１００】
Ｆｌａｇｓ−これらは、ファームウエアとハードウエアとの間でデータを通信するために使用することが可能な１組の制御ビットである。これらの制御ビットは、ハードウエアの使用の恐れなしに、ファームウエアが該キューにおけるエントリをアペンドし且つ修正する助けとなるためのポーズビット及びロックビットを包含している。
【０１０１】
ＳｔａｒｔｉｎｇＳｅｃｔｏｒＯｎＴｒａｃｋ−これは、このセクションに対する転送のためにトラック上の第一セクターの物理的セクター番号を保持する。
【０１０２】
ＥｎｄｉｎｇＳｅｃｔｏｒＯｎＴｒａｃｋ−これは、このセクションに対する転送のために最後のセクターの物理的セクター番号を保持する。
【０１０３】
ＨａｒｄｗａｒｅＮｅｘｔＥｎｔｒｙＰｏｉｎｔｅｒ−これは、ハードウエアが実行するための次のセクションエントリを指し示す。
【０１０４】
ＦｉｒｍｗａｒｅＴｒａｃｋＳｅｃｔｉｏｎＥｎｔｒｙＰｏｉｎｔｅｒ−これは、このハードウエアトラックセクションと関連するファームウエアトラックセクションエントリを指し示す。
【０１０５】
ディスクトラックセクションの２番目の部分はファームウエア部分である。ファームウエア部分は、ハードウエアトラックセクションエントリを操作し且つアップデートする場合の助けとして使用される。それは、順方向及び逆方向の両方にどのようにしてハードウエアキューをトラバースするかについての情報を包含している。それは、ファームウエアがキュー内にエントリを挿入するか又は削除することが必要である場合に使用することが可能である。ファームウエアトラックセクションキューは次の如くに表わすことが可能である。
【０１０６】
【表１ｇ】
2004295893.tif 000009
【０１０７】
ファームウエアトラックセクションキューエントリ属性は次の如くに説明することが可能である。
【０１０８】
ＰｒｅｖｉｏｕｓＨａｒｄｗａｒｅＴｒａｃｋＳｅｃｔｉｏｎＥｎｔｒｙＰｏｉｎｔｅｒ−これは、トラックセクションキュー内の前のハードウエアトラックセクションエントリを指し示す。これは、ファームウエアがキューを逆方向にトラバースすることを助け且つ挿入及び削除を助ける。
【０１０９】
Ｐｒｅｖｉｏｕｓ及びＮｅｘｔ  ＥｎｔｒｙｌｎＰｏｏｌＩｎｄｅｘｅｓ−これらは、使用可能なプールにおける次の及び前のトラックセクションエントリに対するポインターである。該プールは、全ての使用可能なハードウエア及びファームウエアトラックセクションエントリを追跡する。次いで、ファームウエアはこのプールから引出してトラックに対するトラックセクションキューを形成する。これらのポインターは、ファームウエアがそのプールを操作し且つアップデートしてフリーな且つ使用中のエントリを追跡することを可能とする。
【０１１０】
ＣｏｍｍａｎｄＰｒｏｇｒｅｓｓＱｕｅｕｅＥｎｔｒｙＰｏｉｎｔｅｒ−これは、トラックセクションキューエントリと関連するコマンド進行エントリを指し示す。トラックセクションキューが該ハードウエアにより完了されると、該ファームウエアはこのポインターを使用してコマンド進行キューをアップデートすることが可能である。
【０１１１】
ディスクブロックコマンドキューイング構造相互作用
上述したように、ディスクはキュー化されているコマンド及びキュー化されていないコマンドを受取ることが可能である。各場合において、上述したエントリにより表わされる構造の間の相互作用は異なるものである場合がある。
【０１１２】
図４はキュー化コマンドの場合における上述した構造の幾つかの間の相互作用の１つの例を示している。この例においては、ディスクファームウエアがトラックキューエントリ４０４及びトラックセクションキューエントリ４０６内への与えられたコマンドを処理する。キュー化モードにおいては、ディスクは個別的なコマンドに基づいて転送進行を追跡することは必要ではないので、コマンドエントリ４０２は、そのコマンドがそのトラック及びトラックセクション内に完全に処理された後に、フリーとさせることが可能である。従って、このモードにおいては、ディスクコマンドキュー４０２は２つ又は３つのエントリであることが必要であるに過ぎない。
【０１１３】
コマンドステータスが必要ではない場合には、コマンド進行キューもこのモードにおいて必要とされることはない。この代わりに、個々のブロック又はブロックのセットに対するエラーはそのコマンドを送ったクライエントへ報告される。その他のブロックはエラーなしで転送されたものと仮定することが可能である。キューイング状態においては、可及的に多数のコマンドを取り込むことが可能であることが望ましい。このことは、並び替え及びコマンドマージング及びトリミングのために多数のトラックをディスクファームウエアが見ることを可能とする。従って、可及的に多くのトラックキューエントリ４０４及びトラックセクションキューエントリ４０６を有することも望ましい。
【０１１４】
図５は非キュー化コマンドの場合における上述した構造の幾つかの間の相互作用の１例を示している。非キュー化の場合においては、ディスクがコマンドキュー５０２からの１つのコマンドを一度に処理し且つコマンドステータスは各コマンドに対して追跡される。該ディスクは一度に１個のコマンドを処理するので、そのコマンドに対するトラックセクションキュー５０６からのトラックセクションに対するエントリを具備する１個のコマンド進行キュー５０４が存在している。このモードにおいては、付加的なトラックセクションキュー５０８からのエキストラトラックセクションが使用可能であり、従って該セクションはそれらが必要とされるずっと前にキュー化させることが可能である。同様に、エキストラなコマンド進行キュー５０４エントリを有することが望ましい。
【０１１５】
非キュー化モードにおいて、トラックセクションキュー５０６，５０８はより小さいものとすることが可能である。該ディスクは一度の１個のトラック上で転送を行い、且つ転送の間においてシークが存在しているので、ディスクファームウエアをその転送の前に維持するために充分なトラックキューエントリが存在していることが必要であるに過ぎない。
【０１１６】
システム概観
次に、図６を参照すると、本発明のシステムの１実施例が示されている。この実施例においては、ホスト６０２からホストデータ及び格納装置６０４（例えば、ハードディスクドライブ）からの格納データはデータバッファ６０６を介して互いの間で転送される。読取コマンド及び書込コマンドに応答し、ホスト６０２からのデータがホストパイプ６１８を介してバッファ６０６へ及びそれから転送され、且つ格納装置６０４からのデータが格納パイプ６２０を介してバッファ６０６へ及びそれから転送される。
【０１１７】
ホスト６０２とバッファ６０６との間のデータ転送はＬＢＡチェーンテーブル６１２内に記録され、一方格納装置６０４とバッファ６０６との間のデータ転送はトラックセクションテーブル６１４内に記録される。上述したように、ホスト６０２はＬＢＡチェーンテーブル６１２を介してバッファ６０６内のデータをトラック即ち追跡することが可能であり、且つ格納装置６０４はトラックセクション６１４を介してデータをバッファすることが可能である。
【０１１８】
バッファ６０６におけるメモリは１個又はそれ以上のエクステントに編成することが可能である。各エクステントは可変寸法のものであり、ＬＢＡ空間内において逐次的なデータを包含する１個又はそれ以上の逐次的バッファブロックを包含している。どのエクステントも新たな要求を満足するのに充分に大きなものでない場合には、その要求に対して複数個のエクステントを割当てることが可能であり、そのエクステントは逐次的なＬＢＡ順番で一体的にリンクされている。エクステントテーブル６１０は各エクステント及びどのようにしてそれらがバッファ６０６内においてリンクされているかを記述する。
【０１１９】
バッファマネージャ６０８は、ホストパイプ６１８及びディスクパイプ６２０を制御するためにエクステントテーブル６１０を使用し、且つパイプ６１８及び６２０が逐次的ホストデータ６０２及び格納データ６０４をバッファ６０６内の非逐次的位置へ及びそれから転送することを可能とする。ＬＢＡチェーンテーブル６１２はホストデータ６０２におけるＬＢＡをバッファエクステントへ関連付け、且つトラックセクションテーブル６１４は格納データ６０４におけるディスクトラックを該エクステントに対して関連つける。バッファマネージャ６０８は、キャッシュヒント検知６１６に対してＬＢＡチェーンテーブル６１２を使用することが可能である。
【０１２０】
図６に示したシステムのコンポーネントについてより詳細に説明する。
【０１２１】
エクステントテーブル
図６に示したエクステントテーブル６１０（エクステントアロケーションテーブルとも呼称される）は、ユーザデータバッファ空間を記述するエクステントレコードからなるアレイである。それは、バッファブロックの並び替え及びダイナミックバッファブロックアロケーションを可能とする。
【０１２２】
各エクステントレコードは単一のエクステントを記述し、且つ各バッファブロックは単一のエクステントレコード内に包含されている。全てのバッファブロックが１つのエクステントに対してマッピングされる。各エクステントレコードはＤＲＡＭバッファ内のブロックのエクステントの長さ及び位置を記述する。エクステントレコードは、又、どのようにしてそのバッファエクステントがホスト及びディスク転送の両方に対して別のバッファエクステントへリンクされているかを記述し、エクステントアロケーションテーブルを各タイプの転送に対して独立的にトラバース可能なものとさせる。
【０１２３】
エクステントレコードはフラッグのみならずエクステントアロケーションテーブルをトラバースするためのリンクを有している。該フラッグはホストアクティビティ、ディスクアクティビティ、エクステント内のデータステータスを記述する。以下の表１は、最大の１０２４個のエクステントレコード、且つ６４ＭｂｉｔのＤＲＡＭバッファ（１６３８４ブロック）をサポートする例示的なエクステントレコードを示している。
【０１２４】
【表１】
2004295893.tif 000010
【０１２５】
エクステントレコードフィールドは以下の如くに説明することが可能である。
【０１２６】
ＳｔａｒｔｉｎｇＢｕｆｆｅｒＢｌｏｃｋ：これは、そのエクステントの最初のバッファブロックの番号である。エクステント寸法はＮｅｘｔＢｕｆｆｅｒＥｘｔｅｎｔのＳｔａｒｔｉｎｇＢｕｆｆｅｒＢｌｏｃｋから現在のエクステントレコードのＳｔａｒｔｉｎｇＢｕｆｆｅｒＢｌｏｃｋを減算することにより計算することが可能である。
【０１２７】
ＮｅｘｔＢｕｆｆｅｒＥｘｔｅｎｔ：これは、現在のエクステントレコードに対してバッファ内において物理的に隣接するエクステントの数である。このフィールドは、該バッファを介して順番にどのようにしてバッファブロックをトラバースするかを示す。
【０１２８】
ＮｅｘｔＨｏｓｔＥｘｔｅｎｔ：これは、バッファへ又はそれからのホスト転送に対する次の逐次的ＬＢＡ情報を包含するバッファブロックを指し示すエクステントレコードの番号である。このフィールドはホストＬＢＡチェーン転送を介してどのようにしてバッファブロックを転送するかを示している。ホストパイプは、１つのエクステントから別のエクステントへトラバースする場合に、バッファブロックアドレスを決定するためにこのフィールドを使用することが可能である。
【０１２９】
ＮｅｘｔＤｉｓｋＥｘｔｅｎｔ：これは、バッファへの又はそれからのディスク転送に対する次のディスクトラック情報を包含するバッファブロックを指し示すエクステントレコードの番号である。このフィールドはディスクトラック転送を介してどのようにしてバッファブロックを転送するかを示している。ディスクパイプは、１つのエクステントから別のエクステントへトラバースする場合にバッファブロックアドレスを決定するためにこのフィールドを使用することが可能である。
【０１３０】
フラッグは以下の如くに説明することが可能である。
【０１３１】
ＤｉｓｋＡｃｔｉｖｅ：これは、このエクステントにおけるいずれかのバッファブロックへ又はそれからの解放まで、ディスクパイプがデータを有することを表わすビットである。このビットはハードウエアか又はファームウエアにより設定することが可能である。ディスクパイプハードウエアは、ディスクデータ転送がそのエクステントにおいて開始する場合にこのビットを設定し、且つディスクパイプがそのエクステントから去り且つそのエクステントにおける全てのブロックを解放した場合にクリアされる。ディスクデータ転送は、そのエクステントにおける最初のブロックに対するバッファブロックアドレスがディスクリアルタイムデータポインター及びディスク解放データポインター内にディスクパイプハードウエアによりロードされる場合に開始されたものと考えられる。ディスクデータ転送は、ディスク解放データポインターが現在のエクステントにないバッファブロックアドレスでロードされる場合に終了したものと考えられる。ＤｉｓｋＡｃｔｉｖｅビットは、ディスク解放データポインターか又はディスクリアルタイムデータポインターのいずれかがそのエクステント内にある限り、そのエクステントにおいてセット即ち設定されたままとなるべきである。ファームウエアは、アボート又はエラーに対して必要に応じこのビットをセット又はクリアすることが可能である。
【０１３２】
ディスクは、解放中のブロックの前にブロックをディスクが転送することを可能とする遅延型解放論理に起因して、一度に１つを超えるエクステントにおいてＤｉｓｋＡｃｔｉｖｅをセットすることが可能である。多くの場合において、ディスクは、１つのエクステントにおいて積極的にブロックを転送し、次いで、前のエクステントにおける前に転送したブロックを解放することが可能である。従って、１つのエクステントにおけるＤｉｓｋＡｃｔｉｖｅは、ディスク解放データポインターがそのエクステントを指し示すべくセットされる場合にセットさせることが可能である。
【０１３３】
ＨｏｓｔＡｃｔｉｖｅ：これは、ホストパイプがこのエクステントにおける任意のバッファブロックへ又はそれから現在データを転送していることを表わすビットである。このビットは、ハードウエア又はファームウエアによりセットすることが可能である。ホストパイプハードウエアは、そのエクステントにおいてホストデータ転送が開始する場合にこのビットをセットし、且つホストデータ転送がそのエクステントから出る場合にクリアされる。ホストデータ転送は、そのエクステントにおける最初のブロックに対するバッファブロックアドレスがホストパイプハードウエアによりホストデータポインター内にロードされる場合に「開始」されたものと考えることが可能である。ホストデータ転送は、ホストデータポインターが現在のエクステントにおけるバッファブロックアドレス無しでロードされる場合に「終了」したものと考えることが可能である。該ファームウエアは、必要に応じてこのビットをセット又はクリアすることが可能である。
【０１３４】
ＤａｔａＶａｌｉｄ：そのエクステントにおけるデータの全てのブロックが有効であることを表わすためにハードウエアによってセットされるビットである。データは、ホスト書込により又はディスク読取により検証することが可能である。ＤａｔａＶａｌｉｄは、ブロック書込時にホストパイプにより、且つブロック読取時にディスクパイプによりセットされる。ＤａｔａＶａｌｉｄは、そのエクステントのブロック内に包含されるデータがＤＲＡＭバッファにおいて有効であることを表わす。ディスク読取時に、ＤａｔａＶａｌｉｄは、そのエクステントにおける最後のブロックにおける最後のバイトがディスクからバッファへ成功裡に読取られた後にセットすることが可能である。ホスト書込の場合、ＤａｔａＶａｌｉｄは、そのエクステントにおける最後のブロックにおける最後のバイトがホストからバッファへ成功裡に書込まれた後にセットすることが可能である。ディスク読取の場合に、ＤａｔａＶａｌｉｄは、ディスクパイプが１つのエクステントにおける読取に対してアクティブとなる場合にクリアすることが可能である。ホスト書込の場合には、ＤａｔａＶａｌｉｄは、１つのエクステントにおける書込に対してホストパイプがアクティブとなる場合にクリアすることが可能である。
【０１３５】
ＤａｔａＤｉｒｔｙ：このビットは、そのエクステントにおけるブロックの全て又は幾つかがディスクへ書込まれていないことを表わすために書込時にハードウエアによってセットされる。「Ｄｉｒｔｙ」即ちダーティは、ホスト書込データが、未だに、ディスク上の対応するデータと一貫性がないことを意味する。ホスト書込の場合に、ＤａｔａＤｉｒｔｙは、ホストパイプがエクステントにおける書込に対してアクティブとなる場合にセットされる。ディスク書込の場合には、ＤａｔａＤｉｒｔｙは、ディスクパイプがそのエクステントにおける最後のブロックの最後のバイトを成功裡に書き込んだ後にクリアされる。
【０１３６】
ＬＢＡチェーンテーブル
ＬＢＡチェーンテーブルは、バッファ内にＬＢＡチェーンの時間順番リストである。各ＬＢＡチェーンテーブルエントリは、１つ又はそれ以上のバッファエクステントにわたって広がった逐次的なＬＢＡのストリームを画定する。そのチェーンを構成するエクステントはエクステントアロケーションテーブルによりリンクされている。１つを超えるＬＢＡチェーン及びエクステントにおいて特定のＬＢＡが存在している場合がある。然しながら、ＬＢＡチェーンテーブルは時間順にリンクされているので、最も最近の（ヘッドに最も近い）におけるＬＢＡは最も有効である。以下の表２は、最大で１０２４個のエクステントレコード、且つ最大で６３ＬＢＡチェーンをサポートするＬＢＡチェーンテーブルエントリの１例を示している。
【０１３７】
【表２】
2004295893.tif 000011
【０１３８】
ＬＢＡチェーンフィールドは以下の如くに説明することが可能である。
【０１３９】
ＳｔａｒｔｉｎｇＬＢＡ：これは、ＬＢＡチェーンにおける最初のブロックのＬＢＡである。
【０１４０】
ＬＢＡＣｈａｉｎＬｅｎｇｔｈ：これは、ＬＢＡチェーンに割当てられた全てのエクステントのブロックにおける全体的な寸法である。
【０１４１】
ＳｔａｒｔｉｎｇＥｘｔｅｎｔ：これは、このＬＢＡチェーンと関連する最初のエクステントレコードの番号である。
【０１４２】
ＮｅｘｔＬＡＢＣｈａｉｎ：これは、次の時間順番ＬＢＡチェーンテーブルエントリの数である。
【０１４３】
ＰｒｅｖｉｏｕｓＬＢＡＣｈａｉｎ：これは、前の時間順番ＬＢＡチェーンテーブルエントリの数である。
【０１４４】
ＨｉｔＣｏｕｎｔｅｒ：これは、ＬＢＡチェーンが作成される場合にゼロにセットされ且つそのＬＢＡチェーンに関してキャッシュヒットが存在する度にインクリメントされる値である。これは、ＬＢＡチェーン置換アルゴリズム用のファームウエアにより使用することが可能である。
【０１４５】
フラッグは以下の如くに説明することが可能である。
【０１４６】
Ｌｏｃｋｅｄ：これは、スキャン又は転送のためにホストハードウエアに対してＬＢＡチェーンが使用可能であることを表わすビットである。
【０１４７】
ＷｒｉｔｅＤａｔａ：これは、このＬＢＡチェーンが書込データに対するものであることを表わすためにセットされるビットである。クリアされる場合には、ＬＢＡチェーンは読取データに対するものである。この書込データに対するその後の読取ヒットはこのビットをクリアすることはない。このビットは、ＬＢＡチェーンが読取コマンドから、又はディスク先読取又は後読取から形成された場合にクリアされる。
【０１４８】
ＷｒｉｔｅＣａｓｈＥｎａｂｌｅｄ：これは、このＬＢＡチェーンに対して書込キャッシングがイネーブルされているか否かを表わすビットである。このビットは、書込データをディスクに対してすぐ様フラッシュさせることを必要とするＡＴＡコマンドと共に使用される。
【０１４９】
ＳｃａｎＡｃｔｉｖｅ：これは、ハードウエアがヒットに対してこのＬＢＡチェーンをスキャンしていることを表わすビットである。このビットは、そのＬＢＡチェーン及びそのエクステントを修正又は再配置させることを必要とする場合にＬＢＡチェーンにおけるホストアクティビティについてキャッシュ及びディスクファームウエアに知らせる。
【０１５０】
ＤｉｓｋＩｎＵｓｅ：これは、エクステントがＤｉｓｋＡｃｔｉｖｅ又はＤａｔａＤｉｒｔｙのいずれかを活性化させるか否かを表わすビットである。いずれかのビットが１つのエクステントにおいて真である場合には、それは、ＬＢＡチェーンの割当てを解除することが不可能であることを意味する。ファームウエアは、ＬＢＡチェーン資源の割当／割当解除を行う場合にこのビットをチェックすることが可能である。
【０１５１】
トラックセクションテーブル
トラックセクションテーブルは、ディスクファーマッターとデータバッファとの間でどのようにしてデータの与えられたトラックを転送するかを記述する。ディスクトラック情報と共に、バッファ内をトラバースされるべきエクステントのリストは、フォーマッターに対して、どのようにしてバッファ内のエクステントをディスク上の物理的トラックに関して転送するかを告げる。ディスクトラックは、１個又はそれ以上のエクステントを使用して転送することが可能である。各ディスクトラックセクションは連続した数のセクターであり且つバッファ内のブロックの少なくとも１つのエクステントに対応している。以下の表３はディスクトラックセクションテーブルエントリの１例を示している。
【０１５２】
【表３】
2004295893.tif 000012
【０１５３】
フィールドの名前は以下の如くに定義することが可能である。
【０１５４】
ＳｔａｒｔｉｎｇＥｘｔｅｎｔ：これは、トラックセクションの最初のエクステントレコードの番号である。このフィールドは、ディスクデータポインターを派生するためにディスクフォーマッターによって使用される。
【０１５５】
ＳｔａｒｔｉｎｇＯｆｆｓｅｔＩｎＥｘｔｅｎｔ：このフィールドは、ディスクハードウエアに対して、与えられたエクステントにおけるどのオフセットにおいてこのセクションにおけるセクターが開始するかを告げる。ディスクがこのセクションにおいてこの転送を開始すると、ディスクデータポインターオフセットフィールドがこの値に設定される。
【０１５６】
Ｆｌａｇｓ：このフィールドはファームウエアとハードウエアとの間で通信を行うために使用される１組の制御ビットである。
【０１５７】
ＳｔａｒｔｉｎｇＳｅｃｔｏｒ：これは、トラックセクションの最初の物理的セクター番号である。
【０１５８】
ＥｎｄｉｎｇＳｅｃｔｏｒ：これは、トラックセクションの最後の物理的セクター番号である。
【０１５９】
ＨａｒｄｗａｒｅＮｅｘｔＴｒａｃｋＳｅｃｔｉｏｎ：これは、転送用の次のトラックセクションエントリの番号である。この例においては、８ビットフィールドが最大で２５６個のトラックセクションをサポートすることが可能である。
【０１６０】
ＦｉｒｍｗａｒｅＴｒａｃｋＳｅｃｔｉｏｎ：これは、ハードウエアトラックセクションエントリが関連するファームウエアトラックセクションエントリの番号である。この特徴はファームウエアによって使用することが可能である。
【０１６１】
ディスクパイプ
ディスクパイプは、データバッファとディスクとの間の転送を取扱うディスク転送ハードウエアである。このハードウエアは、ディスクＤＲＡＭポート内に組込むことが可能である。特定の時刻において、このブロックは、読取か又は書込のいずれかであり、１つのバッファポイントが必要とされる場合がある。ディスクパイプの構成要素は、ディスクデータポインター、ディスクルームロジック、ディスク遅延型解放ロジックを包含している。以下に示したものはディスクパイプレジスタセット内に包含させることが可能なディスクパイプレジスタのリストである。
【０１６２】
【表４】
2004295893.tif 000013
【０１６３】
ＤｉｓｋＰｉｐｅＣｏｎｔｒｏｌレジスタは、以下のテーブルに示すことが可能である。
【０１６４】
【表５】
2004295893.tif 000014
【０１６５】
ＤｉｓｋＰｉｐｅＳｔａｔｕｓレジスタは、ルームロジックを制御し且つエクステントアロケーションテーブルエントリと相互作用を行うためにディスクデータポインターと共に使用することが可能な１組のフラッグを包含している。
【０１６６】
【表６】
2004295893.tif 000015
【０１６７】
ＴｒａｃｋＳｅｃｔｉｏｎＮｕｍｂｅｒレジスタはディスクパイプへの入力レジスタである。このレジスタは、ディスクパイプ転送を開始する前にファームウエアによってセットされる。それは、ディスクパイプが動作すべき開始トラックセクションエントリ番号にセットされる。トラックセクションエントリ内に包含されているものは、バッファ内にデータを位置決めさせるエクステントに関するディスクシーケンサ情報及びディスク上にデータを位置決めさせるディスクトラックである。
【０１６８】
ＤｉｓｋＴｒａｎｓｆｅｒＣｏｕｎｔレジスタは、転送することが意図されたディスクセクターの総数へ転送を開始する前のファームウエアによってセットされる入力レジスタである。
【０１６９】
ＤｉｓｋＢｌｏｃｋＲｅｍａｉｎｉｎｇＣｏｕｎｔレジスタは、ディスクパイプが転送するために残存するブロックの数を表わす出力レジスタである（ＤｉｓｋＲｅａｌＴｉｍｅＤａｔａＰｏｉｎｔｅｒに基づく）。ハードウエアは、ＤｉｓｋＲｅａｌＴｉｍｅＤａｔａＰｏｉｎｔｅｒがディスクへ又はそれから１つのセクターの転送を完了した後にこのレジスタをアップデートすることが可能である。
【０１７０】
ＤｉｓｋＲｅａｌＴｉｍｅＤａｔａＰｏｉｎｔｅｒは、エクステント番号及びそのエクステント内のブロックオフセットによるディスクシーケンサの現在の位置である。リアルタイムポインターは、ディスクが現在作業中であるが解放していない可能性のあるブロックを表わす。リアルタイムディスクデータポインターの１つの例は以下の如きものである。
【０１７１】
【表７】
2004295893.tif 000016
【０１７２】
この例においては、該ポインターはディスクのバッファアドレスを記述する３バイトフィールドである。１０ビットエクステント数字は１０２４個のエクステントを可能とさせる。１４ビットオフセットは６４Ｍｂｉｔバッファを可能とする。
【０１７３】
【表８】
2004295893.tif 000017
【０１７４】
ディスクデータポインターがデータを転送するために積極的に使用されていない場合には、ＥｘｔｅｎｔＮｕｍｂｅｒフィールドはＮＵＬＬへセットさせることが可能である。このことは、エクステントロジックが、エクステントにおけるディスクパイプのデータ転送とそれがチェーン内の最後のものであったためにエクステントにおいて止まっていることとの区別を行うことを助ける。
【０１７５】
ＤｉｓｋＲｅｌｅａｓｅＤａｔａＰｏｉｎｔｅｒは、エクステント番号及びそのエクステント内のブロックオフセットによりディスクパイプによる次に解放するブロックを表わす。解放ポインターは、ディスクパイプにより成功裡に読取られるか又は書込まれる次のブロックを表わす。ＢｌｏｃｋＯｆｆｓｅｔＩｎｔｏＥｘｔｅｎｔが０にセットされる場合には、このエクステントにおいてブロックが解放されていないことを表わす。ＢｌｏｃｋＯｆｆｓｅｔＩｎｔｏＥｘｔｅｎｔが１にセットされる場合には、そのエクステントにおける０番目のブロックが解放されたことを意味する。ＢｌｏｃｋＯｆｆｓｅｔＩｎｔｏＥｘｔｅｎｔが２にセットされる場合には、そのエクステントにおける０番目のブロックと１番目のブロックとの解放されたことを表わす等々である。解放ディスクデータポインターの１つの例は以下の如きものである。
【０１７６】
【表９】
2004295893.tif 000018
【０１７７】
この例においては、該ポインターはディスクのバッファアドレスを記述する３バイトフィールドである。１０ビットエクステント数字は高々１０２４個のエクステントを可能とする。１４ビットオフセットは６４Ｍｂｉｔバッファを可能とする。
【０１７８】
【表１０】
2004295893.tif 000019
【０１７９】
ディスクデータポインターがデータを転送するために積極的に使用されていない場合には、ＥｘｔｅｎｔＮｕｍｂｅｒフィールドはＮＵＬＬへセットすることが可能である。このことは、エクステントロジックがエクステントにおけるディスクパイプのデータ転送とそれが１つのチェーンにおける最後のものであったためにエクステント内に止まることとの区別をすることを助ける。
【０１８０】
ＥｘｔｅｎｔＢｌｏｃｋＣｏｕｎｔレジスタは、ディスクパイプからの出力レジスタであり且つＤｉｓｋＲｅａｌＴｉｍｅＤａｔａＰｏｉｎｔｅｒにより表わされるように現在のエクステントにおけるブロックの総数を特定する。この値は、ＤｉｓｋＲｅａｌＴｉｍｅＤａｔａＰｏｉｎｔｅｒ．ＥｘｔｅｎｔＮｕｍｂｅｒが新たなエクステントにセットされることにハードウエアにより計算される。
【０１８１】
【表１１】
2004295893.tif 000020
【０１８２】
ＥｘｔｅｎｔＢｌｏｃｋＲｅｍａｉｎｉｎｇＣｏｕｎｔは、ディスクパイプからの出力レジスタであり、且つそれはＤｉｓｋＲｅａｌＴｉｍｅＤａｔａＰｏｉｎｔｅｒによって表わされるように現在のエクステントにおいて転送すべく残存しているブロックの数を特定する。エクステントに入ると、ハードウエアはこのレジスタをＥｘｔｅｎｔＢｌｏｃｋＣｏｕｎｔでロードし、次いでディスクデータセクターパルスが発生する度にそれをデクリメントさせる。このカウントフィールドはディスクリアルタイムポインターにとって関連性があるので、それはホストに対して解放されたブロックを反映するものではない。
【０１８３】
ＥｘｔｅｎｔＢｌｏｃｋＤｏｎｅＣｏｕｎｔレジスタはディスクパイプからの出力レジスタであり、且つ、それは、ＤｉｓｋＲｅａｌＴｉｍｅＤａｔａＰｏｉｎｔｅｒによって表わされるように現在のエクステントにおいて解放されたブロックの数を特定する。エクステントに入ると、ハードウエアはこのレジスタを０でロードし、次いでディスクデータセクターパルスが発生する度にそれをインクリメントさせる。このカウントフィールドはディスクリアルタイムポインターにとって関連性があるので、それはホストに解放されたブロックを反映するものではない。
【０１８４】
ディスクパイプ状態マシン
状態遷移は、ディスクパイプ入力レジスタ、その他のブロックからの信号、及びディスクパイプ出力レジスタ値によって発生させることが可能である。以下の例は、幾つかのディスクパイプ状態及び各状態においてとられる動作をリストしている。ＣｕｒｒｅｎｔＳｅｃｔｏｒＮｕｍｂｅｒレジスタはディスクシーケンサによりアップデートさせることが可能である。
【０１８５】
【表１２】
2004295893.tif 000021
【０１８６】
図７はディスクパイプ状態マシンフローチャートであり、それは上のリストからのディスクパイプ状態の順番を示している。このフローチャートの例において、ディスクパイプ状態マシンは、初期化状態７０４が活性化され且つ転送が開始するまでアイドル状態７０２にある。転送が開始すると、該マシンはＣｏｎｎｅｃｔＴｏＴｒａｃｋＳｅｃｔｉｏｎ状態７０６に入り、次いでＦｉｒｓｔＥｘｔｅｎｔ状態７０８が続く。第一エクステントがＦｉｒｓｔＥｘｔｅｎｔ状態７０８において識別されると、該マシンは条件付け状態７１０に入り、それはディスクルームロジックの制御下とすることが可能である。
【０１８７】
ディスクルームロジックはトラックセクションテーブル（ディスクコマンドキュー）、エクステントレコード、及びディスクデータポインターを使用して、ディスクデータ転送をイネーブル又はディスエーブルさせる。ディスクルームロジックは、ルーム（ｒｏｏｍ）を決定するためにＤｉｓｋＲｅａｌＴｉｍｅＤａｔａＰｏｉｎｔｅｒを使用することが可能である。
【０１８８】
ディスクルームロジックに対して提供される幾つかのシナリオは、（１）書込コマンドに関するＤｉｓｋＮｏＲｏｏｍを包含しており、その場合に、ディスクはエクステントからの書込を開始する場合であり且つそのエクステントはホストからのデータで未だに書込まれていない場合である。このシナリオにおいては、ホスト及びディスクは同一のエクステントにおいてアクティブであり、両方共書込であり、且つディスクデータポインターはホストデータポインターより大きいか又は等しい（即ち、ディスクは同一のエクステントにおいてホストをパスせんとしている）。（２）読取コマンドに関するＤｉｓｋＮｏＲｏｏｍは通常遭遇することはない。何故ならば、全ての読取データはディスクから発生し、ディスク読取に関してルームが存在すべきだからである。
【０１８９】
ＤｉｓｋＮｏＲｏｏｍに対するブール方程式の１つの例は以下の通りである。
【０１９０】
【表１３】
2004295893.tif 000022
【０１９１】
尚、ＨｏｓｔＡｃｔｉｖｅ及びＤａｔａＶａｌｉｄはＤｉｓｋＲｅａｌＴｉｍｅＤａｔａＰｏｉｎｔｅｒ．ＥｘｔｅｎｔＮｕｍｂｅｒによって指し示されるポイントにおけるビットを意味している。
【０１９２】
図７を参照すると、ディスクルームロジックが、ＤｉｓｋＮｏＲｏｏｍ条件が真であることを決定すると、該マシンは条件付け状態７１０からＢｌｏｃｋＮｏＲｏｏｍ状態７１２へ移行する。ディスクルームロジックがＤｉｓｋＮｏＲｏｏｍ条件を偽へセットし且つ該マシンがＳｅｃｔｏｒＴｒａｎｓｆｅｒ状態７１４へ入るまで、該マシンはＢｌｏｃｋＮｏＲｏｏｍ状態７１２に止まることが可能である。一方、該マシンが最初に条件付け状態７１０へ入る場合にディスクルームロジックがＤｉｓｋＮｏＲｏｏｍ条件が偽であることを見付ける場合には、ＢｌｏｃｋＮｏＲｏｏｍ状態７１２をバイパスすることが可能である。この場合には、該マシンは条件付け状態７１０からＳｅｃｔｏｒＴｒａｎｓｆｅｒ状態７１４へ直接的にパスする。
【０１９３】
該マシンがセクター転送を完了すると、それはＳｅｃｔｏｒＴｒａｎｓｆｅｒ状態７１４からＮｅｘｔＢｌｏｃｋ状態７１６へパスする。ＮｅｘｔＢｌｏｃｋ状態７１６において、該マシンは、ディスクとデータバッファとの間で別のエクステントを転送すべきであるか否かを決定する。そうである場合には、該マシンはＮｅｘｔＥｘｔｅｎｔ状態７１８へ入る。次いで、該マシンは、次のエクステントがトラックセクションの最後のエクステントであるか否かを決定し、且つそうである場合にはそれはＮｅｘｔＴｒａｃｋＳｅｃｔｉｏｎ状態７２０へ入る。ＮｅｘｔＴｒａｃｋＳｅｃｔｉｏｎ状態７２０において、該マシンは、転送すべき更なるセクションが存在するか否かを決定し、且つそうでない場合には、それは再度アイドル状態７２２へ入る。
【０１９４】
ディスク遅延型解放ロジック：ディスク遅延型解放ロジックは、ディスクがリアルタイムでバッファへ及びそれからセクターを転送することを可能とする目的を達成するものであるが、ある後のイベントによる妥当性検査までこれらのセクターのレリーズ即ち解放を遅延させる。読取コマンドの場合には、ＥＣＣ処理が、実際のセクターのデータがバッファへ転送されるよりも後の時刻においてセクターの解放（又は妥当性検査）を発生させる。書込コマンドの場合には、既にバッファ内にある前のセクターに対して解放を与える次の最も近いサーボバーストである。いずれの場合においても、ディスクパイプが実際に動作しているバッファ位置を指し示すリアルタイムのディスクデータポインターを有することが必要である。別のディスクデータポインターはリアルタイムのものの後に続いてディスクハードウエアからの遅延された信号を介してバッファ内のセクターを妥当性検査する。これら２つのディスクデータポインターはディスク解放データポインター及びディスクリアルタイムデータポインターと呼ばれる。
【０１９５】
ホストパイプ
ホストパイプはホストとデータバッファとの間のデータ転送を取扱うホストデータ転送ハードウエアである。このハードウエアはホストＤＲＡＭポート内に組み込むことが可能である。与えられた時刻において、このブロックは読取か又は書込のいずれかであり、且つ１つのバッファポインターを必要とする場合がある。ホストパイプは特定のエクステント及びＬＢＡチェーンに関連するホストデータ転送の動作を記述する。ホストパイプは任意の時間においてＬＢＡチェーンの１つのエクステントにおいて動作する。ホストパイプ転送は、ファームウエアによるか又はハードウエアによって開始させることが可能である。読取の場合には、キャッシュヒットがハードウエアによって自動的に開始される。キャッシュミスの場合には、ファームウエアがホスト読取転送を開始させる。書込の場合には、ファームウエアがホスト転送を開始させる。ホストパイプレジスタは、エクステントレコード及びＬＢＡチェーンテーブルの両方への結合を有している。ホストパイプレジスタは、ＬＢＡチェーン又はエクステントにおける現在のホストアクティビティを決定するためにホスト、キャッシュ又はディスクにより任意の時間において使用することが可能である。以下の例はホストパイプレジスタセット内に包含させることが可能なホストパイプレジスタをリストしている。
【０１９６】
【表１４】
2004295893.tif 000023
【０１９７】
全てのホストパイプ転送は開始させるためにセットされた入力フィールドを有している。ホストパイプが稼動する場合に、出力レジスタはホストパイプハードウエアにより最新の状態に維持される。以下のフローチャートは、どのようにしてファームウエア又はハードウエアによりホストパイプ転送が開始され且つ実行されるかを示している。
【０１９８】
ＨｏｓｔＰｉｐｅＣｏｎｔｒｏｌレジスタはホストパイプデータ転送を制御するためにファームウエアにより使用されるビットを包含している。このレジスタのフラッグビットについて以下に説明する。
【０１９９】
【表１５】
2004295893.tif 000024
【０２００】
ＨｏｓｔＰｉｐｅＳｔａｔｕｓレジスタは、ハードウエアによりセットされ且つクリアされるリードオンリビットを包含している。これはホストパイプからの出力レジスタである。このレジスタのフラッグビットについて以下に説明する。
【０２０１】
【表１６】
2004295893.tif 000025
【０２０２】
ＬＢＡＣｈａｉｎＮｕｍｂｅｒレジスタは、ホスト転送を開始させる前にファームウエア又はハードウエアによりセットされるレジスタである。このレジスタはキャッシュヒットからの自動読取転送のイベントにおいてホストハードウエアによりセットされる。そうでない場合には、ＨｏｓｔＰｉｐｅＣｏｎｔｒｏｌレジスタにおけるＳｔａｒｔＴｒａｎｓｆｅｒビットを設定する前に、ファームウエアがＬＢＡチェーンレコードの数でこれをセットする。
【０２０３】
ＳｔａｒｔｉｎｇＬＢＡＩｎＣｈａｉｎレジスタは、ファームウエア又はハードウエアによってセットされる入力レジスタであり且つホストパイプ転送に対する所望の開始ＬＢＡを特定する。このレジスタは、ホストパイプ転送を開始させる前にセットされる。特定されるＬＢＡは、ＬＢＡＣｈａｉｎＮｕｍｂｅｒレジスタにおいて特定されるＬＢＡチェーン内に存在すべきである。
【０２０４】
ＬＢＡＣｏｕｎｔレジスタは、ホストパイプへの入力レジスタであり且つ転送すべきＬＢＡの所望の数を特定する。このレジスタは、ホストパイプ転送を開始する前にセットされる。このレジスタは現在のホストパイプ転送におけるＬＢＡの総数でセットされたままである。それは、転送が開始するファームウエア又はハードウエアにより変更されることはない。
【０２０５】
ＬＢＡＯｆｆｓｅｔＩｎＣｈａｉｎレジスタは、ホストパイプ転送の開始によりハードウエアによりセットされる出力レジスタであり且つ転送中にハードウエアによりアップデートされる。このレジスタは初期的には所望の開始ＬＢＡ（ＳｔａｒｔｉｎｇＬＢＡＩｎＣｈａｉｎにおいて特定される）とＬＢＡチェーンの実際の最初のＬＢＡとの間の差に設定される。
【０２０６】
【表１７】
2004295893.tif 000026
【０２０７】
この初期的設定の後に、ホストにより解放されたブロックはこのレジスタをインクリメントさせる。このレジスタは、ホストが最後に解放させたＬＢＡチェーンにおける現在のブロックオフセットを反映させるべきである。
【０２０８】
ＬＢＡＲｅｍａｉｎｉｎｇＣｏｕｎｔレジスタはホストパイプハードウエアからの出力レジスタであり且つ現在のホスト転送において残存するブロックの数を特定する。ハードウエアは、転送が転送中のブロックの数（即ち、ＬＢＡＣｏｕｎｔ）に対して開始する場合にこのレジスタをセットする。転送が進行し且つブロックが解放されるに従い、このレジスタはゼロに到達するまでデクリメントされる。このカウントがゼロでない限り、ＨｏｓｔＰｉｎＡｃｔｉｖｅビットはセットされたままであるべきである。書込の場合には、このレジスタは、通常、ＬＢＡチェーンレコードのＬＢＡＣｈａｉｎＬｅｎｇｔｈフィールドへセットされる。然しながら、読取の場合には、キャッシュヒットの結果として何等かのより小さな値へセットされる場合があり、それは既存のＬＢＡチェーンの一部を使用するに過ぎない。
【０２０９】
ＬＢＡＤｏｎｅＣｏｕｎｔレジスタはホストパイプハードウエアからの出力レジスタであり且つ転送が開始されてからホストにより幾つのブロックが解放されたかを特定する。転送が開始されると、このレジスタはハードウエアによりゼロにセットされる。次いで、各ブロックが解放されるに従い、このレジスタはハードウエアによりインクリメントされる。それはホストパイプにより完了した現在のブロック数を反映する。
【０２１０】
ＳｔａｒｔｉｎｇＥｘｔｅｎｔレジスタはホストパイプハードウエアからの出力レジスタであり且つそれは転送が行われるべき最初のエクステント番号を特定する。それは、ホストパイプ転送中にオリジナルの開始エクステント番号にセットされたままである。ハードウエアは、転送が開始されるとこのレジスタをＬＢＡチェーンにより指し示されるエクステントチェーンをトラバースすることが派生される値へセットする。ハードウエアはエクステントチェーントラバースを使用して開始エクステント番号及びエクステントオフセットを派生させる。次いで、それはＳｔａｒｔｉｎｇＥｘｔｅｎｔ、ＥｘｔｅｎｔＮｕｍｂｅｒ、ＥｘｔｅｎｔＯｆｆｓｅｔレジスタをエクステントチェーントラバースの出力でロードさせる。転送はＬＢＡＣｈａｉｎＮｕｍｂｅｒにより特定されるＬＢＡチェーンにおいて行われ、且つそれはそのチェーン内のＳｔａｒｔｉｎｇＬＢＡＩｎＣｈａｉｎによって特定されるＬＢＡにおいて開始される。エクステントトラバースは、入力として、トラバースを開始するエクステント番号、そのエクステント内のオフセット、及びトラバースすべきエクステントチェーンを横断してのブロック数を使用することが可能である。開始すべきエクステント番号はＬＢＡＣｈａｉｎ［ＬＢＡＣｈａｉｎＮｕｍｂｅｒ］．ＳｔａｒｔｉｎｇＥｘｔｅｎｔである。トラバースを開始すべきエクステント内のオフセットはゼロである。エクステントチェーンを横断してトラバースするブロックの数はＬＢＡＯｆｆｓｅｔＩｎＣｈａｉｎである。
【０２１１】
ＥｘｔｅｎｔＮｕｍｂｅｒ及びＥｘｔｅｎｔＯｆｆｓｅｔレジスタはホストパイプハードウエアからの出力レジスタであり、それらは現在のエクステント番号及びそのエクステント内へのブロックオフセットを特定する。ハードウエアはそれがＳｔａｒｔｉｎｇＥｘｔｅｎｔレジスタをロードするのと同時にこれらのレジスタを初期化させる。その後にブロックが解放されるに従い、ハードウエアはＥｘｔｅｎｔＮｕｍｂｅｒ及びＥｘｔｅｎｔＯｆｆｓｅｔレジスタをアップデートさせる。バッファブロック番号及びバッファブロックバイトアドレスに対する内部値がエクステント情報から計算される。
【０２１２】
【表１８】
2004295893.tif 000027
【０２１３】
ＥｘｔｅｎｔＢｌｏｃｋＣｏｕｎｔレジスタはホストパイプからの出力レジスタであり且つ現在のエクステントにおけるブロックの総数を特定する。この値は、ＥｘｔｅｎｔＮｕｍｂｅｒが新たなエクステントへセットされる場合にハードウエアにより計算される。
【０２１４】
【表１９】
2004295893.tif 000028
【０２１５】
ＥｘｔｅｎｔＢｌｏｃｋＲｅｍａｉｎｉｎｇＣｏｕｎｔレジスタはホストパイプからの出力レジスタであり且つそれは現在のエクステントにおいて転送をすべく残存しているブロックの数を特定する。エクステントに入ると、ハードウエアはこのレジスタをＥｘｔｅｎｔＢｌｏｃｋＣｏｕｎｔでロードし、次いで１つのブロックが成功裡に解放される度にそれをデクリメントさせる。
【０２１６】
ＥｘｔｅｎｔＢｌｏｃｋＤｏｎｅＣｏｕｎｔレジスタはホストパイプからの出力レジスタであり、且つそれは現在のエクステントにおいて解放されたブロックの数を特定する。エクステントに入ると、ハードウエアはこのレジスタをゼロでロードし、次いで１つのブロックの成功裡に解放されるとそれをインクリメントさせる。
【０２１７】
ホストパイプ状態マシン
状態遷移はホストパイプ入力レジスタ、他のブロックからの信号、及びホストパイプ出力レジスタ値によって発生させることが可能である。以下のリストは、ホストパイプ状態及び各状態においてとられる動作のリストである。
【０２１８】
【表２０】
2004295893.tif 000029
【０２１９】
図８は上のリストからのホストパイプ状態の間の接続を示すホストパイプ状態マシンフローチャートである。このフローチャートの例において、ホストパイプ状態マシンは、初期化状態８０４が活性化され且つ転送が開始するまでアイドル状態８０２内にある。転送が開始すると、該マシンはＣｏｎｎｅｃｔＴｏＬＢＡＣｈａｉｎ状態８０６へ入り、次いでＦｉｒｓｔＥｘｔｅｎｔ状態８０８が続く。ＦｉｒｓｔＥｘｔｅｎｔ状態７０８において最初のエクステントが識別されると、該マシンは条件付け状態８０１へ入り、それはホストルームロジックの制御下とすることが可能である。
【０２２０】
ホストルームロジックはＬＢＡチェーンテーブル、エクステントレコード、ホストパイプレジスタを使用してホストデータ転送をイネーブル又はディスエーブルさせる。ホストルームロジックは、ホストとディスクパイプとの間の接続であって、それはホストとバッファＤＲＡＭとの間でのデータの損失又は無効データの転送を防止する。ホストルームロジックはディスクパイプバッファポインターを検査する。ホストパイプはＤｉｓｋＲｅｌｅａｓｅＤａｔａＰｏｉｎｔｅｒ及びＤｉｓｋＡｃｔｉｖｅビットを検査してルームを決定する。ディスクパイプの解放ポインターがディスクパイプのリアルタイムポインターの代わりに使用される。
【０２２１】
ホストパイプは、ブロックを転送する前にＨｏｓｔＮｏＲｏｏｍをチェックする。ブロックの転送が開始されると、それはホストパイプによりＨｏｓｔＮｏＲｏｏｍが再度チェックされる前に完了させることが可能である。ホストブロック転送期間中にＨｏｓｔＮｏＲｏｏｍがセットされると、ホストパイプが次のブロックを転送しようとするまでそれが効果を発揮することはない。
【０２２２】
ＨｏｓｔＮｏＲｏｏｍに対するブール方程式は以下の通りである。
【０２２３】
【表２１】
2004295893.tif 000030
【０２２４】
ＤｉｓｋＡｃｔｉｖｅ及びＤａｔａＶａｌｉｄはホストパイプＥｘｔｅｎｔＮｕｍｂｅｒレジスタにより指し示されるエクステントを意味している。
【０２２５】
ＨｏｓｔＮｏＲｏｏｍチェック動作は書込と読取とで異なっている。書込コマンドに関するＨｏｓｔＮｏＲｏｏｍの場合には、ホスト書込に対するルームが常に存在すべきである。何故ならば、ホスト書込コマンドはＬＢＡチェーン及びエクステントチェーンから発生するからである。読取コマンドに関するＨｏｓｔＮｏＲｏｏｍの場合には、ホストはエクステントにおける転送を開始せんとしており且つそのエクステントは未だにディスクパイプにより有効な読取データで充填されていない。ホスト及びディスクは同一のエクステントにおいてアクティブであり且つホストデータポインターはディスクデータポインターより大きいか又は等しい（即ち、ホストは同一のエクステントにおいてディスクをパスせんとしている）。
【０２２６】
図８を参照すると、ＨｏｓｔＮｏＲｏｏｍ及びＰａｕｓｅＡｔＮｅｘｔＢｌｏｃｋ条件が真であることをホストルームロジックが決定すると、該マシンは、該条件のうちの１つが変化するまでＢｌｏｃｋＰａｕｓｅ状態８１２へ入る。ＰａｕｓｅＡｔＮｅｘｔＢｌｏｃｋ条件が偽へ変化すると、該マシンはＢｌｏｃｋＰａｕｓｅ状態８１２からＢｌｏｃｋＲｅｓｕｍｅ状態８１４へ移行することが可能である。ＢｌｏｃｋＲｅｓｕｍｅ状態８１４においてホストルームロジックがＨｏｓｔＮｏＲｏｏｍ条件をチェックし、且つＨｏｓｔＮｏＲｏｏｍが真である場合には、該マシンはＢｌｏｃｋＮｏＲｏｏｍ状態８１６へ入る。一方、ＨｏｓｔＮｏＲｏｏｍ条件が偽である場合には、該マシンはＢｌｏｃｋＲｅｌｅａｓｅ状態８１８へ入る。
【０２２７】
該マシンがＢｌｏｃｋＲｅｌｅａｓｅ状態８１８へ入った後に、該ブロックが転送され且つ該マシンはＮｅｘｔＢｌｏｃｋ状態８２０へ入る。ＮｅｘｔＢｌｏｃｋ状態８２０において、解放すべき付加的なブロックが存在するか否かについての決定がなされる。そうである場合には、該マシンは条件付け状態８１０へ元り次のブロックの解放の処理を開始する。そのエクステントにおいて解放すべき更なるブロックが存在しない場合には、該マシンはＮｅｘｔＥｘｔｅｎｔ状態８２６へ入る。
【０２２８】
この例において、ホストルームロジックがＰａｕｓｅＡｔＮｅｘｔＥｘｔｅｎｔ条件を真へ設定すると、該マシンは、現在のエクステントにおいて解放すべき更なるブロックが存在しない場合には、ＮｅｘｔＢｌｏｃｋ状態８２０からＥｘｔｅｎｔＰａｕｓｅ状態８２２へ移行する。該マシンはＰａｕｓｅＡｔＮｅｘｔＥｘｔｅｎｔ条件が偽へセットされるまでＥｘｔｅｎｔＰａｕｓｅ状態８２２内に止まりその場合には、該マシンはＥｘｔｅｎｔＲｅｓｕｍｅ状態８２４を介してＮｅｘｔＥｘｔｅｎｔ状態８２６へ移行する。
【０２２９】
ＮｅｘｔＥｘｔｅｎｔ状態８２６において、転送すべき更なるエクステントが存在するか否かのチェックがなされる。そうである場合には、該マシンは再度条件付け状態８１０へ入り次のエクステントの転送の処理を開始する。一方、転送すべき更なるエクステントが存在しない場合には、該マシンはＤｉｓｃｏｎｎｅｃｔＦｒｏｍＬＢＡＣｈａｉｎ状態８２８へ入り且つ究極的に再度アイドル状態８３０へ入る。
【０２３０】
ヒット検知ブロック
ヒット検知ブロックは、ＬＢＡ及び入って来るホストコマンドの長さに対してＬＢＡチェーンテーブルを反復的にサーチすることが可能なブロックである。ホスト読取の場合には、ヒット検知ブロックはＬＢＡチェーンテーブルとホストパイプとを結合させて、例えデータが１つを超えるＬＢＡチェーンにわたって広がっている場合でも読取ヒットデータの転送を自動化させる。ヒット検知はＬＢＡチェーンテーブルの時間順番編成を使用して１個のＬＢＡが１個を超えるＬＢＡチェーンにおいて表われる場合に最も最近にキャッシュしたブロックを決定する。
【０２３１】
サーチエンジンは最も新しいエントリから開始してＬＢＡチェーンをサーチする。ヒットサーチはテールヒット検知、及びヘッドヒット検知からなる。キャッシュサーチはファーム及びハードウエアの両方によって実施することが可能である。ホスト読取転送の場合には、ヒットハードウエアは要求されたホストＬＢＡチェーンの断片に対して断続的にＬＢＡチェーンテーブルをサーチする。見つかった全ての断片が転送され、且つその断片が終了した場合に、要求されたブロックのすべてが見つかり且つ転送されるまで新たなサーチが開始する。キャッシュミスの場合には、キャッシュファームウエアが、ＬＢＡチェーンテーブルにおける最も新しいエントリとして新たなＬＢＡチェーンをアペンドし、且つディスクがそのエントリをミスしている読取データで充填させることを要求する。ホストエンジンは、キャッシュファームウエアがそれを形成した後にこのＬＢＡチェーンを見つけ出し、且つブロックが使用可能となる場合に転送のためにホストパイプをそれに取付ける。
【０２３２】
ＡＴＡインターフェース条件が存在する場合に例外が発生する場合がある。ＡＴＡインターフェースは転送用に「マルチモード」を使用すべく形態とされているので、最小転送寸法は要求されたマルチモードにより特定されるブロック数である。このブロック数は２の冪である（即ち、２，４，８，１６，．．．）。ホストがマルチモード読取を行っている場合に、キャッシュヒットは、最小でも、マルチブロック単位におけるブロック数である。
【０２３３】
ヒット検知ハードウエアへの入力は以下のものを包含することが可能である。
【０２３４】
ＬＢＡ−サーチすべき開始ＬＢＡ番号
長さ−ＬＢＡにおいて開始する連続的なブロックの数。
【０２３５】
ヒット検知ハードウエアからの出力は以下のものを包含することが可能である。
【０２３６】
ＭｉｓｓＬＢＡ−反復的ヘッドヒット検知及び反復的テールヒット検知サーチの両方を完了した後にキャッシュ内に存在することのない最初のＬＢＡ
ＭｉｓｓＬｅｎｇｔｈ−反復的ヘッドヒット検知及び反復的テールヒット検知サーチの両方を完了した後にキャッシュ内に存在することのないＭｉｓｓＬＢＡにおいて開始する連続的なブロックの数
ＬＢＡｃｈａｉｎＥｎｔｒｙ−ヒットとして検知された最初のＬＢＡのＬＢＡチェーンエントリの数。これはＬＢＡチェーンテーブルエントリ内の特定のＬＢＡ（最も新しいもの）を見つけ出すためにファームウエアにより使用される。
【０２３７】
ＨｅａｄＨｉｔＦｌａｇ−ヘッドヒットが存在していたか否かを表わすビット
ＴａｉｌＨｉｔＦｌａｇ−テールヒットが存在していたか否かを表わすビット
ＦｕｌｌＨｉｔＦｌａｇ−フルヒットが存在していたか否かを表わすビット
ＳｅａｒｃｈＩｎＰｒｏｇｒｅｓｓ−キャッシュサーチが進行中であることを表わすビット
ＳｅａｒｃｈＤｏｎｅ−キャッシュサーチが完了したことを表わすビット
図９を参照すると、ヒット検知期間中に発生する場合のあるキャッシュヒットシナリオの例が示されている。第一の例は、フルヒットであり、その場合には、ホスト要求９０４がキャッシュされたデータ９０２によって完全にカバーされる。別のヒットシナリオはヘッドヒットであり、その場合には、ホスト要求９０８のトップがキャッシュされたデータ９０６によってカバーされるが、ホスト要求９０８の後部セクションはカバーされない。更に別のシナリオはテールヒットであり、その場合には、ホスト要求９１２はキャッシュされたデータ９１０によりカバーされるが、要求９１２の初期的なデータセクションはキャッシュ内には存在しない。更に別のシナリオはヘッド及びテールヒットと呼ばれ、その場合には、ホスト要求９１８はキャッシュされたデータ９１４及び９１６の２つのセクションをヒットするが、ホスト要求９１８の中間部はキャッシュデータによりカバーされない。
【０２３８】
エクステントチェーンリセット
ファームウエアが読取／書込に対してエクステントチェーンを割当てるか、又は資源をフリーとさせるためにチェーンを割当て解除する場合に、そのチェーン内の全てのエクステントにおいてフラッグビットがクリアされる。ファームウエアは１つのロケーションに対する開始エクステント番号を書込み、次いでリセットホストエクステントチェーン、又はリセットディスクエクステントチェーンコマンドを表わすためにビットをセットする。ＥｘｔｅｎｔＣｈａｉｎＲｅｓｅｔＤｏｎｅビットは、ハードウエアがエクステントチェーンを介してトラバースし且つステータスビットの全てをクリアしたことを表わす。ディスクエクステントリセットである場合には、ディスクネクストエクステントポインターがトラバースのために使用される。ホストエクステントリセットである場合には、ホストネクストエクステントポインターがトラバースのために使用される。
【０２３９】
エクステントチェーンリセット用の入力は以下のものを包含している。
【０２４０】
ＴｒａｖｅｒｓｅＴｙｐｅ−ホストトラバースの場合にはホスト、又はディスクトラバースの場合にはディスクとすることが可能である。
【０２４１】
ＦｉｒｓｔＥｘｔｅｎｔＩｎＣｈａｉｎ−開始する最初のエクステントのエクステント番号。
【０２４２】
エクステントチェーンリセットからの出力はＥｘｔｅｎｔＣｈａｉｎＲｅｓｅｔＤｏｎｅを包含しており、それは特定されたＴｒａｖｅｒｓｅＴｙｐｅによってトラバースされるチェーンにおける全てのエクステントにおいてビットのクリアが完了されたことを表わすビットである。
【０２４３】
エクステントチェーントラバース
ファームウエアはむしろ頻繁にエクステントチェーンを介して前方及び後方にトラバースすることが必要な場合がある。チェーンの長さに依存して、これはファームウエアにおいて実施することは時間がかかる場合がある。従って、エクステントトラバース処理のハードウエアで実現する場合がある。更に、２つの別個のエクステントチェーントラバースが存在する場合があり即ちハードウエアに対して１つとファームウエアに対して１つとである。各エクステントトラバースハードウエアブロックに対するレジスタのテーブルを以下に示してある。
【０２４４】
【表２２】
2004295893.tif 000031
【０２４５】
エクステントトラバースレジスタは以下の如くに定義することが可能である。
【０２４６】
ＥｘｔｅｎｔＴｒａｖｅｒｓｅＣｏｎｔｒｏｌレジスタは以下のテーブルにより記述することが可能である。
【０２４７】
【表２３】
2004295893.tif 000032
【０２４８】
ＥｘｔｅｎｔＴｒａｖｅｒｓｅＳｔａｔｕｓレジスタは以下のテーブルにより記述することが可能である。
【０２４９】
【表２４】
2004295893.tif 000033
【０２５０】
ＮｕｍｂｅｒＯｆＢｌｏｃｋｓＴｏＴｒａｖｅｒｓｅレジスタは、エクステントチェーンを介してトラバースするためにブロックの総数にセットされる。これはＥｘｔｅｎｔＴｒａｖｅｒｓｅＣｏｎｔｒｏｌレジスタにおけるＳｔａｒｔＴｒａｖｅｒｓｅビットを設定する前に入力トしてセットされる。
【０２５１】
ＴｒａｖｅｒｓｅＳｔａｒｔＥｘｔｅｎｔレジスタはトラバースを開始するチェーンにおける最初のエクステントにセットされる。これは、ＥｘｔｅｎｔＴｒａｖｅｒｓｅＣｏｎｔｒｏｌレジスタにおけるＳｔａｒｔＴｒａｖｅｒｓｅビットを設定する前に入力としてセットされる。
【０２５２】
ＴｒａｖｅｒｓｅＳｔａｒｔＯｆｆｓｅｔレジスタは、トラバースを開始するチェーンの最初のエクステント内のブロックオフセットにセットされる。これは、ＥｘｔｅｎｔＴｒａｖｅｒｓｅＣｏｎｔｒｏｌレジスタにおけるＳｔａｒｔＴｒａｖｅｒｓｅビットをセットする前に入力としてセットされる。
【０２５３】
ＴａｒｇｅｔＥｘｔｅｎｔＮｕｍｂｅｒレジスタは、エクステントチェーン内の特定されたブロック数をトラバースした後に見つかったエクステント数を表わすエクステントトラバースからの出力である。
【０２５４】
ＴａｒｇｅｔＰｒｅｖｉｏｕｓＥｘｔｅｎｔＮｕｍｂｅｒレジスタは、エクステントチェーンにおける特定されたブロック数をトラバースした後に見つかったエクステント数前のエクステント数を表わすためのエクステントトラバースからの出力である。
【０２５５】
ＴａｒｇｅｔＥｘｔｅｎｔＯｆｆｓｅｔレジスタは、エクステントチェーンにおける特定したブロック数をトラバースした後に見つかったエクステント数内の最終的ブロックオフセットを表わすためのエクステントトラバースからの出力である。
【０２５６】
バッファスクラッチパッド
本発明の１実施例においては、データバッファにおけるデータのチャンクの動作を助けるためにバッファスクラッチパッドが設けられている。バッファスクラッチパッドは２個のメモリポインター及び寸法を有することが可能である。１つのメモリポインターはバッファメモリ内のウインドウを位置決めし、且つ他方のポインターは内部ＲＡＭ内のスクラッチパッドエリアを位置決めする。スクラッチパッド読取コマンドが与えられると、ハードウエアはウインドウに位置決めされたバッファＤＲＡＭの内容を内部ＲＡＭ内のスクラッチパッドエリア内にコピーする。「終了」ビットは、スクラッチパッドがバッファＤＲＡＭと同じであることを表わす。次いで、ファームウエアはより一層高い性能でスクラッチパッド内の任意のデータに対して読取及び書込を行うことが可能である。後に、ファームウエアは修正されたデータのブロックでバッファＤＲＡＭをアップデーとするためのスクラッチパッド書込コマンドを発生する。
【０２５７】
ハードウエア推定
拡張型キャッシュ実現に対する内部メモリ条件はテーブル寸法、レコード寸法、サポートすべきＤＲＡＭの寸法に依存する。上述した例における６４ＭｂｉｔＤＲＡＭに対するサポートを仮定した場合の幾つかの初期的な推定値は以下の通りである。
【０２５８】
【表２５】
2004295893.tif 000034
【０２５９】
以上、本発明の具体的実施の態様について詳細に説明したが、本発明は、これら具体例にのみ制限されるべきものではなく、本発明の技術的範囲を逸脱することなしに種々の変形が可能であることは勿論である。
【図面の簡単な説明】
【０２６０】
【図１】本発明の１実施例に基づくホストＬＢＡとデータバッファにおけるエクステントとの関係を示した概略図。
【図２】図１に示したエクステントと格納装置トラックセクションとの間の関係を示した概略図。
【図３】本発明の１実施例に基づく１組のエクステントを独立的にトラバースするホスト及び格納装置を示した概略図。
【図４】本発明の１実施例に基づくキュー化コマンドデータ構造の間の相互作用の１例を示した概略図。
【図５】本発明の１実施例に基づく非キュー化コマンドデータ構造の間の相互作用の１例を示した概略図。
【図６】本発明のシステムの１実施例を示した概略図。
【図７】本発明の１実施例に基づくディスクパイプ状態マシンに対する状態を示したフローチャート。
【図８】本発明の１実施例に基づくホストパイプ状態マシンに対する状態を示したフローチャート。
【図９】キャッシュヒットの幾つかのタイプの例を示した概略図。
【符号の説明】
【０２６１】
１０２  可変寸法エクステント
１０４，１０６  ＬＢＡチェーン
２０２  エクステント
２０４，２０６  トラック
３０２  ホスト側
３０４  エクステント
３０６  ディスク側
【図１】
2004295893.tif 000035
【図２】
2004295893.tif 000036
【図３】
2004295893.tif 000037
【図４】
2004295893.tif 000038
【図５】
2004295893.tif 000039
【図６】
2004295893.tif 000040
【図７】
2004295893.tif 000041
【図８】
2004295893.tif 000042
【図９】
2004295893.tif 000043