(57)【要約】  本発明は、ストレージシェルフルータと、ディスクアレイコントローラおよびホストコンピュータなどの外部計算エンティティにストレージシェルフが含まれるストレージシェルフと、Ｉ／Ｏコントローラと、ストレージブリッジデバイスと、を含む中間デバイスによって、仮想ディスクフォーマティングを提供する。本発明の追加の実施形態では、二重抽象化法において、仮想ブロック読み取りを基本デバイスブロックに効果的に配列するために追加のパディングを用いて仮想フォーマティングを高精度化する。さらに本発明の追加の実施形態では、仮想ブロックＷＲＩＴＥ動作中に発生するＲＥＡＤ−ＭＯＤＩＦＹ動作において改変されたデバイスブロックを修正する。いろいろな中間デバイスが２つまたはそれ以上の仮想フォーマティング、二重抽象化法、あるいは改変デバイスブロック追跡方法を採用可能である。【特許請求の範囲】
【請求項１】
中間デバイス集積回路であって、
中間デバイスとコントローラまたはプロセッサとを相互接続する第１の通信ポートと、
中間デバイスと大容量ストレージデバイスとを相互接続する第２の通信ポートと、
データとコマンドの処理エンジンであって、各々が仮想ブロックサイズを有する仮想ブロックを第１の通信ポートを介してコントローラまたはプロセッサと交換し、さらに各々が仮想ブロックサイズと異なるデバイスブロックサイズを有するデバイスブロックを第２の通信ポートを介して大容量ストレージデバイスと交換する処理エンジンと、
を備える、中間デバイス集積回路。
【請求項２】
前記処理エンジンは、前記大容量ストレージデバイスに接続する前記第２の通信ポートを介して、１または２以上のデバイスブロックの連続したシーケンスに書き込み、各デバイスブロックは仮想ブロックサイズと異なるデバイスブロックサイズを有し、
前記大容量ストレージデバイスは１または２以上の整列単位に等しい長さのデバイスブロックのグループの中にあり、当該デバイスブロックのグループは対応する仮想ブロックのグループに正確に整列し、１または２以上の整列単位の長さはデバイスブロックサイズと仮想ブロックサイズの両方によって割り切れる、請求項１に記載の中間デバイス集積回路。
【請求項３】
前記処理エンジンは、
前記第１の通信ポートを介して前記コントローラまたはプロセッサと交換される仮想ブロックを中間仮想ブロックにマップし、当該中間仮想ブロックは前記仮想ブロックサイズよりも大きく、前記デバイスブロックサイズと違う中間仮想ブロックサイズを有し、そのサイズの差はパッドバイト数を含む中間仮想ブロックの長さおよび仮想ブロックの長さの間の長さであり、
前記大容量ストレージデバイスに接続する前記第２の通信ポートを介して、１または２以上のデバイスブロックの連続したシーケンスに書き込み、前記大容量ストレージデバイスは１または２以上の整列単位と等しい長さのデバイスブロックのグループの中にあり、当該デバイスブロックのグループは対応する仮想ブロックのグループに正確に整列し、１または２以上の整列単位の長さはデバイスブロックサイズおよび仮想ブロックサイズによって正確に分割可能である、請求項１に記載の中間デバイス集積回路。
【請求項４】
前記中間仮想ブロックの各々のパッドバイト数は、整列単位のサイズを減少させ、各中間仮想ブロックのパッドバイト数を減少させ、かつ前記第１の通信ポートと前記第２の通信ポートの間のデータ転送バンド幅を増加させるように選択される、請求項３に記載の中間デバイス集積回路。
【請求項５】
前記処理エンジンは、
前記第１の通信ポートを介して前記コントローラまたはプロセッサと交換される１または２以上の仮想ブロックの連続したシーケンスを対応する１または２以上の中間仮想ブロックの連続したシーケンスにマップし、当該中間仮想ブロックは前記仮想ブロックサイズとは異なるブロックサイズを有し、
さらに前記中間仮想ブロックサイズと異なるデバイスブロックサイズを有するデバイスブロックを前記第２の通信ポートを介して前記大容量ストレージデバイスと交換し、さらに、
特定の１または２以上の仮想ブロックの連続したシーケンスを前記大容量ストレージデバイスに書き込む場合であって、当該特定の１または２以上の仮想ブロックの境界がデバイスブロックの境界と一致しない場合に、当該特定の１または２以上の仮想ブロックがマップされた対応するデバイスブロックのシーケンスの境界領域を埋めるに十分な追加データが前記大容量ストレージデバイスから得られることを保証するＲＥＡＤ−ＭＯＤＩＦＹ動作を採用する、請求項１に記載の中間デバイス集積回路。
【請求項６】
前記十分な追加データは、デバイスブロックのシーケンスの追加の境界領域を埋めるために前記大容量ストレージデバイスから得られ、当該デバイスブロックのシーケンスは前記特定の１または２以上の仮想ブロックのシーケンスを含むように配置されたホストメモリバッファに対応する、請求項５に記載の中間デバイス集積回路。
【請求項７】
前記中間デバイス集積回路は、ストレージシェルフルータ集積回路、ストレージブリッジ集積回路、およびＩ／Ｏコントローラ集積回路のいずれかである、請求項１に記載の中間デバイス集積回路。
【請求項８】
前記大容量ストレージデバイスは、少なくとも１つのディスクドライブ、または少なくとも１つのストレージエリアネットワークからなる、請求項１に記載の中間デバイス集積回路。
【請求項９】
前記中間デバイス集積回路はデータストレージシステム内に含まれ、当該データストレージシステムは、
ディスクアレイのストレージシェルフ内に含まれるストレージシェルフルータ集積回路であって、ストレージシェルフルータは、前記第１の通信ポート経由の第１の通信メディアと前記第２の通信ポート経由の第２の通信メディアとの間のインターフェースを提供する、ストレージシェルフルータ集積回路と、
ＲＡＩＤコントローラ内に含まれるＩ／Ｏコントローラ集積回路であって、ＲＡＩＤコントローラは、ディスクアレイ内に含まれ、前記第１の通信ポート経由の第１の通信メディアと前記第２の通信ポート経由の第２の通信メディアとの間のインターフェースを提供する、Ｉ／Ｏコントローラ集積回路と、
ディスクアレイ内に含まれるストレージブリッジ集積回路であって、ディスクアレイ内のＲＡＩＤコントローラと、ストレージブリッジによって提供されるインターフェース経由の第１の通信メディアを使って、第２の通信メディアを使ってストレージブリッジと通信する前記大容量ストレージデバイスとを通信可能にする、ストレージブリッジ集積回路と、を備える請求項１に記載の中間デバイス集積回路。
【請求項１０】
ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラ集積回路であって、
ＰＣＩｅリンクから到着する全てのＰＣＩｅトラフィックを管理するＰＣＩｅレイアと、
１または２以上のＳＡＳポートを提供するＳＡＳレイアと、
時分割多重化をおこない、ＰＣＩｅレイアからのデータをＳＡＳレイアに伝送し、逆にＳＡＳレイアからのデータをＰＣＩｅレイアに伝送するグローバルシェアードメモリスイッチと、
プロセッサとメモリとを含み、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラのファームウェアを実行するＣＰＵサブシステムと、
トラッキングすること、翻訳すること、およびＰＣＩｅレイアを介して受信してＳＡＳレイアを介して送られる大容量ストレージコマンドによって実行されるＩ／Ｏコマンドを管理すること、を促進するコンテクストマナージャーと、
を備えるＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラ集積回路。
【請求項１１】
前記ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラ集積回路はＲＡＩＤコントローラ内に含まれ、当該ＲＡＩＤコントローラは、
ＦＣリンクを介してホストコンピュータからコマンドを受信し応答するＦＣプロトコルチップと、
メモリと、
プロセッサと、
ＦＣプロトコルチップとＰＣＩｅリンクを介してコマンドを交換し、ＦＣプロトコルチップをメモリとプロセッサとにリンクさせる、ＰＣＩｅルートコンプレックスチップと、
ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラチップであって、プロセッサによって実行されるＲＡＩＤコントローラからコマンドを受け取り返信し、ＳＡＳ通信メディアを介してＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラと相互接続するＳＡＳディスクまたはＳＡＴＡディスクへコマンドを発行し応答を受信する、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラチップと、
を備える、請求項１０に記載のＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラ集積回路。
【請求項１２】
ストレージブリッジ集積回路であって、
物理レイアとＦＣプロトコルのレイアリンク機能を提供するＦＣポートと、
交換と順序の管理と、フレーム構造、フロー制御およびサービス分類に関連するタスクの管理とを含む上位レベルＦＣＰプロトコルを実行するＦＣプロトコルレイアと、
上位レベルＳＡＴＡプロトコルレイアを実行するＳＡＴＡレイアと、
ＳＡＴＡプロトコルの転送レイアと物理レイアリンクを実行するＳＡＴＡポートと、
時分割多重化をおこない、ＦＣポートからの一連のコマンドとデータをＳＡＴＡポートに伝送し、逆にＳＡＴＡポートからのデータをＦＣポートに伝送するグローバルシェアードメモリスイッチと、
管理機能に含まれるストレージブリッジルーティン、Ｉ／Ｏコマンドセットアップおよび他の非データパスタスクを実行するＣＰＵ複合体と、
を備えるストレージブリッジ集積回路。
【請求項１３】
前記ストレージブリッジ集積回路はブリッジインターフェースカード内に含まれ、当該ブリッジインターフェースカードは、
１または複数のＲＡＩＤコントローラに接続し、ＲＡＩＤコントローラからコマンドとデータを受信し、ＲＡＩＤコントローラへコマンドとデータを転送する、ＦＣ２重ポートコネクタと、
ＳＡＴＡディスクに接続し、ＳＡＴＡディスクにコマンドとデータを転送し、ＳＡＴＡディスクからコマンドとデータを受信するＳＡＴＡコネクタとを備え、
前記ストレージブリッジ集積回路は、ＦＣ通信メディアとＳＡＴＡ通信メディアとをインターフェースするスイッチ機能を提供し、さらに、電圧変換コンポーネントと、クロックと、フラッシュメモリとを備える、請求項１２に記載のストレージブリッジ集積回路。
【請求項１４】
ＷＲＩＴＥ動作のために、第１ブロック長さの第１データブロックの第１の連続する順序シーケンスを対応する第２ブロック長さの第２データブロックの第２の連続する順序シーケンスにマップする方法であって、
各第１データブロックは第１バイト数および他の初期データストレージ単位を含み、各第２データブロックは第２バイト数および他の初期データストレージ単位を含み、
第１データブロックの第１の連続する順序シーケンス内および第２データブロックの第２の連続する順序シーケンス内のデータストレージ単位は、データ単位アドレスによって上昇順序として順序立てられ、データブロックのアドレスはそのデータブロック中の最小アドレスデータストレージ単位のアドレスに等しく、前記マップする方法は、
第１ブロック長さの第１データブロックの第１の連続する順序シーケンスのために、第１データブロックの整列単位と、第１データブロックの最小アドレス境界および第２データブロックの最小アドレス境界に対応する整列単位の最小アドレス境界と、第１データブロックの最大アドレス境界および第２データブロックの最大アドレス境界に対応する整列単位の最大アドレス境界と、を決定するステップと、
第１ブロック長さの第１データブロックの第１の連続する順序シーケンスに含まれるデータに加えて整列単位を満たすべきデータを取得するステップと、
整列単位を当該整列単位に整列された第２データブロックの対応する第２の連続する順序シーケンスにマッピングするステップと、を含む方法。
【請求項１５】
整列単位に整列された第２データブロックの第２の連続する順序シーケンスの最初のデータブロックのアドレスは、第１データブロックの整列単位の最初のデータブロックのアドレスから、第１データブロックの整列単位の最初のデータブロックのアドレスを最小可能単位中の最初のデータブロック数で除算して得られる余りを引き算して決定される、請求項１４に記載の方法。
【請求項１６】
整列単位に整列された第２データブロックの第２の連続する順序シーケンスの最後のデータブロックのアドレスは、第１データブロックの整列単位の最初のデータブロックのアドレスから、第１データブロックの整列単位の最後のデータブロックのアドレスを最小可能単位中の最後のデータブロック数で除算して得られる余りを引き算して決定される、請求項１４に記載の方法。
【請求項１７】
前記整列単位を満たすべきデータを取得するステップは、
１または複数の第２データブロックからデータを取得するステップであって、当該第２データブロックは、第１データブロックの第１の連続する順序シーケンスの最小アドレス境界のアドレスを含みかつ当該アドレスから前にあり、さらに整列単位の最小アドレス境界を含みかつ当該境界に続くステップと、
１または複数の第２データブロックからデータを取得するステップであって、当該第２データブロックは、第１データブロックの第１の連続する順序シーケンスの最大アドレス境界のアドレスを含みかつ当該アドレスに続き、さらに整列単位の最大アドレス境界を含みかつ当該境界から前にあるステップと、を含む請求項１４に記載の方法。
【請求項１８】
第１データブロックは仮想データブロックであり、第２データブロックは大容量ストレージデバイスに格納される物理データブロックである、請求項１４に記載の方法。
【請求項１９】
最初に仮想データブロックを中間仮想データブロックにマップし、次に中間仮想データブロックを大容量ストレージデバイスに格納される物理データブロックにマップする、請求項１８に記載の方法。
【請求項２０】
第１データブロックは、最小可能整列単位に含まれる第１データブロック数を減らすために追加バイトを含むようにパッドされる、請求項１４に記載の方法。
【請求項２１】
大容量ストレージシステムであって、
少なくとも１つ以上のコントローラと、
コントローラによって管理されアクセスされる少なくとも１つ以上の大容量ストレージデバイスと、
中間デバイス集積回路とを備え、当該中間デバイス集積回路は、
中間デバイスとコントローラとを相互接続する第１の通信ポートと、
中間デバイスと大容量ストレージデバイスとを相互接続する第２の通信ポートと、
データとコマンドの処理エンジンであって、各々が仮想ブロックサイズを有する仮想ブロックを第１の通信ポートを介してコントローラと交換し、さらに各々が仮想ブロックサイズと異なるデバイスブロックサイズを有するデバイスブロックを第２の通信ポートを介して大容量ストレージデバイスと交換する処理エンジンとを含む、大容量ストレージシステム。
【請求項２２】
前記処理エンジンは、前記大容量ストレージデバイスに接続する前記第２の通信ポートを介して、１つまたは２以上のデバイスブロックの連続したシーケンスに書き込み、各デバイスブロックは仮想ブロックサイズと異なるデバイスブロックサイズを有し、前記大容量ストレージデバイスは１または２以上の整列単位に等しい長さのデバイスブロックのグループの中にあり、当該デバイスブロックのグループは対応する仮想ブロックのグループに正確に整列し、１または２以上の整列単位の長さはデバイスブロックサイズと仮想ブロックサイズの両方によって割り切れる、請求項２１に記載の大容量ストレージシステム。
【請求項２３】
前記処理エンジンは、
前記第１の通信ポートを介して前記コントローラと交換される仮想ブロックを中間仮想ブロックにマップし、当該中間仮想ブロックは前記仮想ブロックサイズよりも大きく、前記デバイスブロックサイズと違う中間仮想ブロックサイズを有し、そのサイズの差はパッドバイト数を含む中間仮想ブロックの長さと仮想ブロックの長さとの間の長さであり、
前記大容量ストレージデバイスに接続する前記第２の通信ポートを介して、１または２以上のデバイスブロックの連続したシーケンスに書き込み、前記大容量ストレージデバイスは１または２以上の整列単位と等しい長さのデバイスブロックのグループの中にあり、当該デバイスブロックのグループは対応する仮想ブロックのグループに正確に整列し、１または２以上の整列単位の長さはデバイスブロックサイズおよび仮想ブロックサイズによって正確に分割可能である、請求項２１に記載の大容量ストレージシステム。
【請求項２４】
前記中間仮想ブロックの各々のパッドバイト数は、整列単位のサイズを減少させ、各中間仮想ブロックのパッドバイト数を減少させ、かつ前記第１の通信ポートと前記第２の通信ポートの間のデータ転送バンド幅を増加させるように選択される、請求項２３に記載の大容量ストレージシステム。
【請求項２５】
前記処理エンジンは、
前記第１の通信ポートを介して前記コントローラと交換される１または２以上の仮想ブロックの連続したシーケンスを対応する１または２以上の中間仮想ブロックの連続したシーケンスにマップし、当該中間仮想ブロックは前記仮想ブロックサイズとは異なるブロックサイズを有し、
さらに前記中間仮想ブロックサイズと異なるデバイスブロックサイズを有するデバイスブロックを前記第２の通信ポートを介して前記大容量ストレージデバイスと交換し、さらに、
特定の１または２以上の仮想ブロックの連続したシーケンスを前記大容量ストレージデバイスに書き込む場合であって、当該特定の１または２以上の仮想ブロックの境界がデバイスブロックの境界と一致しない場合に、当該特定の１または２以上の仮想ブロックがマップされた対応するデバイスブロックのシーケンスの境界領域を埋めるに十分な追加データが前記大容量ストレージデバイスから得られることを保証するＲＥＡＤ−ＭＯＤＩＦＹ動作を採用する、請求項２１に記載の大容量ストレージシステム。
【請求項２６】
前記十分な追加データは、デバイスブロックのシーケンスの追加の境界領域を埋めるために前記大容量ストレージデバイスから得られ、当該デバイスブロックのシーケンスは前記特定の１または２以上の仮想ブロックのシーケンスを含むように配置されたホストメモリバッファに対応する、請求項２５に記載の大容量ストレージシステム。
【請求項２７】
前記中間デバイス集積回路は、大容量ストレージアレイ内のストレージシェルフルータ集積回路、大容量ストレージアレイ内のストレージブリッジ集積回路および関連する大容量ストレージデバイス、およびＲＡＩＤコントローラ内のＩ／Ｏコントローラ集積回路のいずれかである、請求項２１に記載の大容量ストレージシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、数々の個別の大容量ストレージデバイスから構成されるディスクアレイおよび他の大容量ストレージデバイスに関し、さらに詳細には、割り当て単位に基づく仮想フォーマッティング法を利用するストレージシェルフルータ、Ｉ／Ｏコントローラ、ストレージブリッジ集積回路に関する。
【０００２】
＜関連出願の相互参照＞
本出願は、２００７年１月１９日出願の出願番号第１１／６５５，７７８号の一部継続出願である。出願番号第１１／６５５，７７８号は、２００３年１１月４日出願の出願番号第１０／７０２，１３７号の一部継続出願であり、出願番号第１０／７０２，１３７号は、２００３年６月２３日出願の出願番号第１０／６０２，５２９号の一部継続出願であり、出願番号第１０／６０２，５２９号は、２００３年１月１３日出願の出願番号第１０／３４１，８３５の一部継続出願である。
【背景技術】
【０００３】
ファイバチャネル（「ＦＣ」）は、コンピュータおよび周辺デバイスの複数の異なる組み合わせを相互接続するデータ通信ネットワーク用のアーキテクチャおよびプロトコルである。ＦＣは、小型コンピュータシステムインターフェイス（「ＳＣＳＩ」）プロトコルをはじめとする種々の上位プロトコルをサポートする。コンピュータまたは周辺デバイスは、ＦＣポートおよび銅線または光ファイバを介してネットワークに連結される。ＦＣポートは、トランシーバおよびインターフェイスコントローラを含み、ＦＣポートが収容されるコンピュータ周辺デバイスは、「ホスト」と呼ばれる。ＦＣポートは、周辺コンピュータインターフェイス（「ＰＣＩ」）バスなどのローカルデータバスを介してホストとデータを交換する。インターフェイスコントローラは、ファイバチャネルとＦＣポートが常駐するコンピュータまたは周辺デバイスとの間の下位プロトコル交換を実行する。
【０００４】
コンピュータネットワークにおける遠隔データアクセスのためのよく知られているパラダイムは、クライアント／サーバアーキテクチャである。このアーキテクチャによれば、クライアントコンピュータは、データの読み出しまたはデータの書き込みの要求をサーバコンピュータに送信する。サーバコンピュータは、クライアントサーバがデータの読み出しまたはデータの書き込みに対する認証および許可を有することを調べ、特定の大容量ストレージデバイスへの要求された読み出し動作または書き込み動作をマッピングし、書き込み動作の場合には、クライアントコンピュータから大容量ストレージデバイスへのデータの転送において中間物として機能することによって、または読み出し動作の場合には大容量ストレージデバイスからクライアントへのデータの転送において中間物として機能することによって、要求を処理する。
【０００５】
一般的な現在利用可能であり、これまで利用可能であった通信ネットワークアーキテクチャにおいて、サーバコンピュータは、ローカルエリアネットワーク（「ＬＡＮ」）を介してクライアントコンピュータと通信し、サーバコンピュータは、ＳＣＳＩバスなどのローカルバスを通じて複数の大容量ストレージデバイスと通信する。そのようなシステムにおいて、サーバは、２つの異種通信媒体間のブリッジを代表するため、サーバは、読み出し動作または書き込み動作の結果として転送されたデータを格納して転送するために必要とされる。ＦＣの出現で、クライアントコンピュータ、サーバコンピュータおよび大容量ストレージデバイスはすべて、１つの通信媒体によって対称に相互接続されてもよい。従来のクライアント／サーバアーキテクチャは一般に、上述のＬＡＮおよびＳＣＳＩネットワークにおいて用いられるものと同種のクライアント／サーバプロトコルを用いて、ＦＣに移植される。
【０００６】
大容量のディスクドライブをはじめとするＳＣＳＩバス準拠の大容量ストレージデバイスは、特に、中規模コンピュータシステムおよび大規模のコンピュータシステムにおいて、広範囲に利用可能であり、広く用いられており、多くのＦＣに基づくシステムは、ＦＣ準拠のディスクドライブを利用し、これらはそれぞれが１つまたは複数のＦＣポートと、ＦＣレスポンダとして機能するためにディスクドライブ用に必要とされる論理回路と、を備える。パーソナルコンピュータ（「ＰＣ」）をはじめとするより小規模のシステムにおいて、「Ｉｎｔｅｇｒａｔｅｄ  Ｄｒｉｖｅ  Ｅｌｅｃｔｒｏｎｉｃｓ」（「ＩＤＥ」）ディスクドライブまたは「Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ」（「ＡＴＡ」）ディスクドライブと呼ばれる異なるファミリのディスクドライブが、広範囲に利用される。シリアルＡＴＡディスク（「ＳＡＴＡ」）は一般に、業界標準アーキテクチャ（「ＩＳＡ」）バスを介してシステムと相互接続する。
【０００７】
本発明は、ＦＣ、ＳＣＳＩおよびＩＤＥ／ＡＴＡ技術に関する。それぞれについて、以下の３つの個別の小段落で順に説明する。これらの技術のいずれかまたはすべてに精通している当業者は、ＦＣに基づくディスクアレイについて記述するこの段落の最後の小段落およびその小段落の直後の本発明の概要の段落まで飛ばして構わない。
【０００８】
＜ファイバチャネル＞
ファイバチャネル（「ＦＣ」）は、表１において以下に列挙された規格文書をはじめとする複数のＡＮＳＩ規格文書によって定義され、記載されている。
【表１】
2011504632.tif 000002
2011504632.tif 000003
2011504632.tif 000004
【０００９】
表１に列挙された文書およびファイバチャネルに関するさらなる情報は、以下のアドレスの「ｈｔｔｐ：／／ｗｗｗ．ｔｌｌ．ｏｒｇ／ｉｎｄｅｘ．ｈｔｍ」および「ｈｔｔｐ：／／ｗｗｗ．ｆｉｂｒｅｃｈａｎｎｅｌ．ｃｏｍ．」のワールドワイドウェブページで見ることができる可能性がある。
【００１０】
ＦＣの以下の説明は、本発明の説明を容易にするために、これらの文書に含まれる情報の一部を導入してまとめることを意図している。以下の説明において導入された話題のいずれかのさらなる詳細が所望である場合には、上述の文献を閲覧してよい。
【００１１】
ＦＣは、一般にコンピュータ、ワークステーション、周辺デバイスおよびアレイ、または１つまたは複数の通信媒体によって相互接続されるディスクアレイなどの周辺デバイスの集合などの、ＦＣノード間のデータ通信のためのアーキテクチャおよびプロトコルである。通信媒体としては、シールド付きより対接続、同軸ケーブルおよび光ファイバが挙げられる。ＦＣノードは、少なくとも１つのＦＣポートおよびＦＣリンクを介して通信媒体に接続される。ＦＣポートは、ＦＣホストアダプタまたはＦＣコントローラであり、ＦＣノードの処理構成要素とレジスタおよびメモリインターフェイスを共有し、ハードウェアおよびファームウェアにおいてＦＣプロトコルのより下位を実装する。ＦＣノードは一般に、共有メモリにおける共有データ構造を用い、ＦＣポートにおける制御レジスタを用いて、ＦＣポートとデータおよび制御情報を交換する。ＦＣポートは、電気配線または光ストランドを含むリンクを介して通信媒体に連結されるシリアル送信器構成要素およびシリアル受信器構成要素を含む。
【００１２】
以下の説明において、「ＦＣ」は、汎用ファイバチャネルアーキテクチャおよびプロトコルを指すための形容詞として用いられ、ファイバチャネル通信媒体のインスタンスを指すための名詞として用いられる。したがって、ＦＣ（アーキテクチャおよびプロトコル）ポートは、ＦＣ（通信媒体）からＦＣ（アーキテクチャおよびプロトコル）シーケンスを受信してもよい。
【００１３】
ＦＣアーキテクチャおよびプロトコルは、図１Ａ〜図１Ｃに示される相互接続トポロジ（構成）の３つの異なるタイプをサポートする。図１Ａは、「ポイントツーポイントトポロジ（構成）」と呼ばれる３つの相互接続トポロジ（構成）の最も簡単なトポロジ（構成）を示す。図１Ａに示されるポイントツーポイントトポロジ（構成）において、第１のノード１０１は、第１のノード１０１のＦＣポート１０４の送信器１０３を第２のノード１０２のＦＣポート１０６の受信器１０５に直接的に連結することによって、第２のノード１０２のＦＣポート１０６の送信器１０７を第１のノード１０１のＦＣポート１０４の受信器１０８に直接的に接続することによって、第２のノード１０２に直接的に接続される。ポイントツーポイントトポロジ（構成）において用いられるポート１０４および１０６は、Ｎ＿Ｐｏｒｔと呼ばれる。
【００１４】
図１Ｂは、「ＦＣアービトレイテッドループトポロジ（構成）」と呼ばれるある程度さらに複雑なトポロジ（構成）を示す。図１Ｂは、アービトレイテッドループの中で相互接続される４つのノード１１０〜１１３を示す。電気バイナリデータまたは光学バイナリデータからなる信号は、円形方式でループの周囲を１つのノードから次のノードに転送される。ノード１１１に関連する送信器１１４などの１つのノードの送信器は、ループにおける次のノードの受信器に直接的に接続され、送信器１１４の場合には、ノード１１２に関連する受信器１１５と直接的に接続される。２種類のＦＣポートが、アービトレイテッドループ内でＦＣノードを相互接続するために用いられてもよい。アービトレイテッドループにおいて用いられる最も一般的な種類のポートは、「ＮＬ＿Ｐｏｒｔ」と呼ばれる。「ＦＬ＿Ｐｏｒｔ」と呼ばれる特殊な種類のポートは、以下に記載されるＦＣファブリックトポロジ（構成）とＦＣアービトレイテッドループを相互接続するために用いられてもよい。１つのみのＦＬ＿Ｐｏｒｔが、アービトレイテッドループトポロジ（構成）にアクティブに組み込まれてもよい。ＦＣアービトレイテッドループトポロジ（構成）は、１２７個までのアクティブなＦＣポートを含んでもよく、さらなる非参加ＦＣポートを含んでもよい。
【００１５】
ＦＣアービトレイテッドループトポロジ（構成）において、ノードは、アービトレイテッドループの制御のために競合してもよく、または調停が行われてもよい。一般に、２つ以上のノードが制御のために競合している場合には、最低のポートアドレスを有するノードが、制御を受ける。フェアネスアルゴリズムは、すべてのノードが最終的には、合理的な時間量の中で、制御を受信することを保証するために、ノードによって実行されてもよい。ノードが、ループの制御を受けたとき、ノードは、アービトレイテッドループの中の任意の他のノードへのチャネルを開くことができる。半二重チャネルにおいて、１つのノードがデータを送信し、他のノードがデータを受信する。全二重チャネルにおいて、データは、データが第２のノードによって送信され、第１のノードによって受信されると同時に、第１のノードによって送信され、第２のノードによって受信されてもよい。たとえば、図１Ｂのアービトレイテッドループにおいて、ノード１１１が、ノード１１３で全二重チャネルを開く場合には、ノード１１１からノード１１３へのチャネルを通じて送信されたデータは、ノード１１２のＮＬ＿Ｐｏｒｔ１１６を通過し、ノード１１３からノード１１１によって送信されたデータは、ノード１１０のＮＬ＿Ｐｏｒｔ１１７を通過する。
【００１６】
図１Ｃは、「ＦＣファブリック」と呼ばれる最も一般的かつ最も複雑なＦＣトポロジ（構成）を示す。ＦＣファブリックは、４つのＦＣノード１１９〜１２２が接続される不規則な形状の中心オブジェクト１１８によって図１Ｃにおいて表されている。ＦＣノード１１９〜１２２の中のＮ＿Ｐｏｒｔ１２３〜１２６が、ファブリック１１８の中でＦ＿Ｐｏｒｔ１２７〜１３０に接続される。ファブリックは、電話システムにおける機能と類似のスイッチ式トポロジ（構成）またはクロスポイントスイッチトポロジ（構成）である。データは、スイッチを通じてＦ＿Ｐｏｒｔ間のファブリックまたは「ファブリックエレメント」と呼ばれる交換によってルーティングされる。あるＦ＿Ｐｏｒｔと別のＦ＿Ｐｏｒｔとの間のファブリックを介する可能な経路が、多くある可能性がある。Ｆ＿Ｐｏｒｔに関連するファブリック内のデータのルーティングおよびノードのアドレス指定は、ＦＣノードまたはＮ＿Ｐｏｒｔによってではなく、ＦＣファブリックによって扱われる。
【００１７】
ＦＣは、シリアル通信媒体である。データは、きわめて高い転送速度で一度に１ビット転送される。図２は、ＦＣネットワークを通じた転送のために、時間においてデータが体系化されるきわめて簡単な階層を示している。最下位の概念レベルで、データは、データビットのストリーム２００であると考えることができる。ＦＣネットワークによってサポートされるデータの最小単位またはデータビットのグループ化は、１０ビット文字であり、８ビット文字としてＦＣポートによって復号化される。ＦＣプリミティブは、１０ビット文字またはバイトから構成される。あるＦＣプリミティブは、ＦＣポート間で交換された制御情報を保持するために利用される。データ体系化の次のレベルであるＦＣプロトコルに関する基本レベルは、フレームである。７つのフレーム２０２〜２０８が、図２に示されている。フレームは、区切り符号、ヘッダを含む３６〜２，１４８バイトから構成されてもよく、データ０〜２０４８バイトから構成されてもよい。第１のＦＣフレームは、たとえば、水平の括弧２０１によって取り囲まれるデータビットのストリーム２００のデータビットに対応する。ＦＣプロトコルは、シーケンスと呼ばれる次に高位の構成レベルを指定する。第１のシーケンス２１０と、第２のシーケンス２１２の一部が、図２に表示されている。第１のシーケンス２１０は、フレーム１〜４  ２０２〜２０５から構成される。第２のシーケンス２１２は、フレーム５〜７  ２０６〜２０８から構成され、他のフレームは示されていない。ＦＣプロトコルは、エクスチェンジと呼ばれる第３の構成レベルを指定する。エクスチェンジ２１４の一部が、図２に示されている。このエクスチェンジ２１４は、図２に示される少なくとも第１のシーケンス２１０および第２のシーケンス２１２から構成される。このエクスチェンジはあるいは、フレーム１〜フレーム７  ２０２〜２０８と、第２のシーケンス２１２と、エクスチェンジ２１４を構成する任意のさらなるシーケンスとに含まれる任意のさらなるフレームから構成されるものとして見なすことができる。
【００１８】
ＦＣは、全二重データ伝送媒体である。フレームおよびシーケンスは同時に、オリジネータまたはイニシエータと、レスポンダまたはターゲットとの間の両方向に渡されることができる。エクスチェンジは、すべてのシーケンスを含み、シーケンス内のフレームは、読み出しＩ／Ｏトランザクションまたは書き出しＩ／Ｏトランザクションなどの１つのＩ／Ｏトランザクション中に、オリジネータとレスポンダとの間で交換される。ＦＣプロトコルは、インターネットプロトコル（「ＩＰ」）、小型コンピュータシステムインターフェイス（「ＳＣＳＩ」）プロトコル、高性能パラレルインターフェイス（「ＨＩＰＰＩ」）および知的周辺装置インターフェイス（「ＩＰＩ」）をはじめとする任意の数のより高次のデータ交換プロトコルに基づいて、データを転送するように設計される。ＳＣＳＩバスアーキテクチャは、以下の小段落で説明され、この小段落および残りの小段落における次の説明の大部分は、ＦＣプロトコルの中に埋め込まれるＳＣＳＩプロトコルに焦点を当てる。ファイバチャネルへのＳＣＳＩプロトコルの標準的な適応が続いて、本願明細書において「ＦＣＰ」と呼ばれる。したがって、ＦＣは、ＳＣＳＩバスおよび他の周辺相互接続バスのほか、インターネットを実装するために用いられるような比較的オープンで非構造的な通信プロトコルの特性であるマスタスレーブ型通信パラダイムをサポートすることができる。イニシエータおよびターゲットからなるＳＣＳＩバスアーキテクチャの概念は、上述したように設計されたＦＣＰにおいて進められ、ＦＣによる伝送のために、ＳＣＳＩコマンドおよびデータ交換をカプセル化している。
【００１９】
図３は、標準的なＦＣフレームの内容を示す。ＦＣフレーム３０２は、５つの高位セクション３０４、３０６，３０８、３１０および３１２を含む。フレーム開始部３０４と呼ばれる第１の高位セクションは、フレームの開始を印付ける４バイトを含む。フレームヘッダ３０６と呼ばれる次の高位セクションは、アドレス指定情報、シーケンス情報、エクスチェンジ情報および種々の制御フラグを含む２４バイトを含む。フレームヘッダ３１４のさらに詳細な図は、図３においてＦＣフレーム３０２から拡大されて示されている。宛て先識別子（「Ｄ＿ＩＤ」）またはＤＥＳＴＩＮＡＴＩＯＮ＿ＩＤ３１６は、フレーム用の宛て先ＦＣポートを示す２４ビットのＦＣアドレスである。発信元識別子（「Ｓ＿ＩＤ」）またはＳＯＵＲＣＥ＿ＩＤ３１８は、フレームを送信したＦＣポートを表す２４ビットのアドレスである。オリジネータＩＤまたはＯＸ＿ＩＤ３２０およびレスポンダＩＤ３２２またはＲＸ＿ＩＤは共に、フレームがオリジネータまたはイニシエータおよびレスポンダまたはターゲット、ＦＣポートに対して属するエクスチェンジを識別する３２ビットエクスチェンジＩＤから構成される。シーケンスＩＤまたはＳＥＱ＿ＩＤ３２４は、フレームが属するシーケンスを識別する。
【００２０】
データペイロードと呼ばれる次の高位セクション３０８は、ＦＣフレーム内にパッケージ化される実際のデータを含む。データペイロードは、ＩＰおよびＳＣＳＩなどのより高位のプロトコルに基づいて転送されることになっているデータおよびカプセル化するプロトコル情報を含む。図３は、ＳＣＳＩプロトコルに基づくデータ転送のために用いられる４つの基本的な種類のデータペイロードレイアウト３２６〜３２９を示す。ＦＣＰ＿ＣＭＮＤと呼ばれるこれらのフォーマットの第１のタイプ３２６は、イニシエータからターゲットにＳＣＳＩコマンドを送信するために用いられる。ＦＣＰ＿ＬＵＮフィールド３３０は、８バイトのアドレスを含み、これは一定の実装例において、特定のＳＣＳＩバスアダプタ、ＳＣＳＩバスアダプタに関連するターゲットデバイス、指定されたターゲットＳＣＳＩデバイスに関連する論理デバイスに対応する論理単位番号（「ＬＵＮ」）を指定することができ、これらは共に、ＦＣＰ＿ＣＭＮＤ用のターゲットを表す。他の実装例において、ＦＣＰ＿ＬＵＮフィールド３３０は、ＳＣＳＩバスアダプタ、ＳＣＳＩバスアダプタに関連するターゲットデバイス、指定されたターゲットＳＣＳＩデバイスに関連する論理デバイスに対応するＬＵＮを決定するために、ターゲットＦＣホストアダプタによって用いられることができるインデックスまたは参照符号を含む。ＳＣＳＩ読み出しＩ／ＯコマンドまたはＳＣＳＩ書き込みＩ／Ｏコマンドなどの実際のＳＣＳＩコマンドは、１６バイトのフィールドＦＣＰ＿ＣＤＢ３３２の中に含まれる。
【００２１】
図３に示されるデータペイロードフォーマットの第２のタイプ３２７は、ＦＣＰ＿ＸＦＥＲ＿ＲＤＹレイアウトと呼ばれる。このデータペイロードフォーマットは、ターゲットがデータの受信または送信を開始するために準備されているときに、ターゲットからイニシエータにＳＣＳＩ開始コマンドを転送するために用いられる。図３に示されるデータペイロードフォーマットの第３のタイプ３２８は、ＦＣＰ＿ＤＡＴＡフォーマットである。ＦＣＰ＿ＤＡＴＡフォーマットは、ＳＣＳＩのＩ／Ｏトランザクションの実行の結果として、ＳＣＳＩデータストレージデバイスから読み出されている実際のデータまたはＳＣＳＩデータストレージデバイスに書き込まれている実際のデータを転送するために用いられる。図３に示される最後のデータペイロードフォーマット３２９は、ＦＣＰ＿ＲＳＰレイアウトと呼ばれ、Ｉ／Ｏトランザクションの終了時に、ＳＣＳＩ状態バイト３３４のほか、他のＦＣＰ状態情報をターゲットからイニシエータに戻すように転送するために用いられる。
【００２２】
＜ＳＣＳＩバスアーキテクチャ＞
コンピュータバスは、コンピュータコマンドおよびデータがコンピュータシステムの処理構成要素、格納構成要素および入力／出力（「Ｉ／Ｏ」）構成要素の間で伝送される、一連の電気信号線である。ＳＣＳＩのＩ／Ｏバスは、ハードディスクおよびＣＤ−ＲＯＭドライブなどの大容量ストレージデバイスを、コンピュータシステムのメモリ構成要素および処理構成要素と相互接続するための最も広範囲に及ぶ人気のあるコンピュータバスである。ＳＣＳＩバスアーキテクチャは、３つの主要な規格、すなわち、ＳＣＳＩ−１、ＳＣＳＩ−２およびＳＣＳＩ−３で定義される。ＳＣＳＩ−１規格およびＳＣＳＩ−２規格は、米国規格協会（Ａｍｅｒｉｃａｎ  Ｎａｔｉｏｎａｌ  Ｓｔａｎｄａｒｄｓ  Ｉｎｓｔｉｔｕｔｅ「ＡＮＳＩ」）の「Ｘ３．１３１−１９８６」および「Ｘ３．１３１−１９９４」の規格文書でそれぞれ出版されている。ＳＣＳＩ−３規格は、ＡＮＳＩ委員会で現在開発中である。ＳＣＳＩバスアーキテクチャの概要は、「Ｔｈｅ  ＳＣＳＩ  Ｂｕｓ  ａｎｄ  ＩＤＥ  Ｉｎｔｅｒｆａｃｅ」，Ｆｒｅｉｄｈｅｌｍ  Ｓｃｈｍｉｄｔ，Ａｄｄｉｓｏｎ−Ｗｅｓｌｅｙ  Ｐｕｂｌｉｓｈｉｎｇ  Ｃｏｍｐａｎｙ，ＩＳＢＮ  ０−２０１−１７５１４−２，１９９７（「Ｓｃｈｍｉｄｔ」）によって提供される。
【００２３】
図４は、ＳＣＳＩバスを含む共通のパーソナルコンピュータ（「ＰＣ」）アーキテクチャのブロック図である。ＰＣ４００は、高速ＣＰＵバス４０６によってシステムコントローラ４０４に連結される中央演算処理装置またはプロセッサ（「ＣＰＵ」）４０２を含む。システムコントローラは次に、メモリバス４１０を介してシステムメモリ構成要素４０８に連結される。システムコントローラ４０４はさらに、より低速の業界標準アーキテクチャ（「ＩＳＡ」）バス４１４およびＳＣＳＩバス４１６と相互接続される周辺構成要素相互接続（「ＰＣＩ」）バス４１２を介して、種々の周辺デバイスと連結される。ＰＣＩバスのアーキテクチャは、「ＰＣＩ  Ｓｙｓｔｅｍ  Ａｒｃｈｉｔｅｃｔｕｒｅ」，Ｓｈａｎｌｅｙ  ＆  Ａｎｄｅｒｓｏｎ，Ｍｉｎｅ  Ｓｈａｒｅ，Ｉｎｃ．，Ａｄｄｉｓｏｎ−Ｗｅｓｌｅｙ  Ｐｕｂｌｉｓｈｉｎｇ  Ｃｏｍｐａｎｙ，ＩＳＢＮ  ０−２０１−４０９９３−３，１９９５に記載されている。相互接続されるＣＰＵバス４０６、メモリバス４１０、ＰＣＩバス４１２およびＩＳＡバス４１４により、ＣＰＵが、コンピュータシステムに含まれる種々の処理構成要素およびメモリ構成要素およびＩ／Ｏデバイスとデータおよびコマンドを交換することを可能にする。一般に、ビデオディスプレイデバイス４１８などのきわめて高速かつ高帯域幅のＩ／Ｏデバイスは、ＰＣＩバスに直接的に接続される。キーボード４２０およびポインティングデバイス（図示せず）などの低速のＩ／Ｏデバイス４２０は、ＩＳＡバス４１４に直接的に接続される。ＩＳＡバスは、バスブリッジ構成要素４２２を介してＰＣＩバスと相互接続される。ハードディスク、フロッピディスクドライブ、ＣＤ−ＲＯＭドライブおよびテープドライブ４２４〜４２６などの大容量ストレージデバイスは、ＳＣＳＩバス４１６に接続される。ＳＣＳＩバスは、ＳＣＳＩバスアダプタ４３０を介してＰＣＩバス４１２と相互接続される。ＳＣＳＩバスアダプタ４３０は、５３Ｃ８ｘｘ  ＳＣＳＩプロセッサのＳｙｍｂｉｏｓファミリから選択されるプロセッサなどのプロセッサ構成要素と、標準的なＰＣＩバスプロトコルを用いたＰＣＩバス４１２へのインターフェイスと、を含む。ＳＣＳＩバスアダプタ４３０は、部分的に下記に記載するＳＣＳＩバスプロトコルを用いて、ＳＣＳＩバス４１６とインターフェイス接続する。ＳＣＳＩバスアダプタ４３０は、一般に、ＳＣＳＩバスに接続される各大容量ストレージデバイス４２４〜４２６またはＳＣＳＩデバイスに埋め込まれるＳＣＳＩコントローラ（図示せず）とコマンドおよびデータを交換する。ＳＣＳＩコントローラは、ＳＣＳＩバスを介してＳＣＳＩアダプタから受信したＳＣＳＩコマンドを解釈してそれに応答するハードウェア／ファームウェア構成要素であり、論理デバイスとインターフェイスを取り、制御することによって、ＳＣＳＩコマンドを実装するハードウェア／ファームウェア構成要素である。論理デバイスは、１つまたは複数の物理デバイスに対応してもよく、または１つまたは複数の物理デバイスの一部に対応してもよい。物理デバイスとしては、ディスクドライブ、テープドライブおよびＣＤ−ＲＯＭドライブなどのデータストレージデバイスが挙げられる。
【００２４】
Ｉ／Ｏコマンドと呼ばれる２つ重要なタイプのコマンドが、ＳＣＳＩデバイスに論理デバイスからのデータの読み出しおよび論理デバイスへのデータの書き込みを命令する。Ｉ／Ｏトランザクションは、コンピュータシステムの２つの構成要素間のデータの交換であり、一般に、読み出しＩ／Ｏコマンドまたは書き込みＩ／Ｏコマンドによって部分的に実装されるＣＰＵ４０２などの処理構成要素によって開始される。したがって、Ｉ／Ｏトランザクションは、読み出しＩ／Ｏトランザクションおよび書き込みＩ／Ｏトランザクションを含む。
【００２５】
ＳＣＳＩバス４１６は、複数のデータビットを同時に輸送することができるパラレルバスである。ＳＣＳＩバスによって同時に輸送することができるデータビットの数は、バスの幅と呼ばれる。異なるタイプのＳＣＳＩバスは、８ビット、１６ビットおよび３２ビットの幅を有する。１６ビットおよび３２ビットのＳＣＳＩバスは、ワイドＳＣＳＩバスと呼ばれる。
【００２６】
すべてのコンピュータバスおよびプロセッサと同様に、ＳＣＳＩバスは、バスの動作およびデータ転送の速度を決定するクロックによって制御される。ＳＣＳＩバスは、クロック速度が変化する。ＳＣＳＩバスの幅およびＳＣＳＩバスが動作するクロック速度の組み合わせが、毎秒ＳＣＳＩバスを介して輸送されることができるバイトの数またはＳＣＳＩバスの帯域幅を決定する。異なるタイプのＳＣＳＩバスは、毎秒２メガバイト（「Ｍｂｙｔｅ」）未満〜４０Ｍｂｙｔｅまでの範囲の帯域幅を有し、将来に対して毎秒８０Ｍｂｙｔｅ、可能であれば毎秒１６０Ｍｂｙｔｅまで増大することが計画されている。増大する帯域幅は、ＳＣＳＩバスの物理長さにおける制限を増大することによって、達成されてもよい。
【００２７】
図５は、ＳＣＳＩバストポロジ（構成）を示す。コンピュータシステム５０２または他のハードウェアシステムは、１つまたは複数のＳＣＳＩバスアダプタ５０４および５０６を含んでもよい。ＳＣＳＩバスアダプタ、ＳＣＳＩバスアダプタが制御するＳＣＳＩバスおよびそのＳＣＳＩバスに取り付けられる任意の周辺デバイスは、共にドメインを含む。図５におけるＳＣＳＩバスアダプタ５０４は、第１のドメイン５０８に関連し、ＳＣＳＩバスアダプタ５０６は、第２のドメイン５１０に関連する。最近のＳＣＳＩ−２バス実装により、１５の異なるＳＣＳＩデバイス５１３〜５１５および５１６〜５１７を１つのＳＣＳＩバスに取り付けることが可能である。図５において、ＳＣＳＩデバイス５１３〜５１５は、ＳＣＳＩバスアダプタ５０６によって制御されるＳＣＳＩバス５１８に取り付けられ、ＳＣＳＩデバイス５１６〜５１７は、ＳＣＳＩバスアダプタ５０４によって制御されるＳＣＳＩバス５２０に取り付けられる。各ＳＣＳＩバスアダプタおよびＳＣＳＩデバイスは、ＳＣＳＩ識別番号またはＳＣＳＩ＿ＩＤを有し、特定のＳＣＳＩバスにおけるデバイスまたはアダプタを一意に識別する。規則により、ＳＣＳＩバスアダプタは、ＳＣＳＩ＿ＩＤ７を有し、ＳＣＳＩバスに取り付けられるＳＣＳＩデバイスは、０〜６および８〜１５の範囲のＳＣＳＩ＿ＩＤを有する。ＳＣＳＩデバイス５１３などのＳＣＳＩデバイスは、複数の論理デバイスとインターフェイスをとってもよく、各論理デバイスは、１つまたは複数の物理デバイスの一部を含む。各論理デバイスは、論理デバイスを制御するＳＣＳＩデバイスに対して論理デバイスを一意に識別する論理単位番号（「ＬＵＮ」）によって識別される。たとえば、ＳＣＳＩデバイス５１３はそれぞれ、ＬＵＮ０、１および２を有する論理デバイス５２２〜５２４を制御する。ＳＣＳＩ専門用語によれば、ＳＣＳＩバスでＩ／Ｏコマンドを起動するデバイスは、イニシエータと呼ばれ、Ｉ／Ｏ動作を実行するようにＳＣＳＩデバイスに命令するＳＣＳＩバスに関するＩ／Ｏコマンドを受信するＳＣＳＩデバイスは、ターゲットと呼ばれる。
【００２８】
一般に、ＳＣＳＩバスアダプタ５０４および５０６などのＳＣＳＩバスアダプタは、コマンドをターゲットデバイスに送信することによって、Ｉ／Ｏ動作を起動する。ターゲットデバイス５１３〜５１５および５１６〜５１７は、ＳＣＳＩバスからＩ／Ｏコマンドを受信する。ターゲットデバイス５１３〜５１５および５１６〜５１７は次に、論理デバイスからのデータを読み出してＳＣＳＩバスを介してイニシエータにデータを返すか、またはＳＣＳＩバスを介してイニシエータから論理デバイスに受信されたデータを書き込むように制御する１つまたは複数の論理デバイスとインターフェイスをとることによって、コマンドを実装する。最後に、ターゲットデバイス５１３〜５１５および５１６〜５１７は、コマンドの実装の成功または失敗を表す状態メッセージを用いて、ＳＣＳＩバスを介してイニシエータに応答する。
【００２９】
図６Ａ〜図６Ｃは、読み出しＩ／Ｏ動作および書き込みＩ／Ｏ動作の起動および実装に伴うＳＣＳＩプロトコルを示す。読み出しＩ／Ｏ動作および書き込みＩ／Ｏ動作は、ＳＣＳＩデバイスによって行われる大量のＩ／Ｏ動作から構成される。ＳＣＳＩバスによって相互接続される大容量ストレージデバイスのシステムの動作効率を最大限にするための努力は最も一般的には、読み出しＩ／Ｏ動作および書き込みＩ／Ｏ動作が行われる効率を最大限にすることに向けられている。したがって、以下の説明において、種々のハードウェアデバイスのアーキテクチャの特徴は、読み出し動作および書き込み動作に関して説明される。
【００３０】
図６Ａは、ＳＣＳＩイニシエータ、最も一般的にはＳＣＳＩバスアダプタによる、ＳＣＳＩターゲット、最も一般的には１つまたは複数の論理デバイスに関連するＳＣＳＩデバイスに埋め込まれるＳＣＳＩコントローラへの読み出しＩ／Ｏコマンドまたは書き込みＩ／Ｏコマンドの送信を示す。読み出しＩ／Ｏコマンドまたは書き込みＩ／Ｏコマンドの送信は、ＳＣＳＩのＩ／Ｏ動作のコマンド段階と呼ばれる。図６Ａは、中心の垂直線６０６によってイニシエータ６０２セクションおよびターゲット６０４セクションに分割される。イニシエータセクションおよびターゲットセクションの両方は、ＳＣＳＩバスの状態を記載する「状態」という名称の列６０６および６０８と、イニシエータおよびターゲットにそれぞれ関連するＳＣＳＩバスイベントを記載する「イベント」という名称の列６１０および６１２と、を含む。Ｉ／Ｏコマンドの送信に伴うバス状態およびバスイベントは、図６Ａの上から図６Ａの下まで時間順に並べられる。図６Ｂ〜図６Ｃもまた、この上述の形式に従う。
【００３１】
図６Ａに示されるイニシエータＳＣＳＩバスアダプタからターゲットＳＣＳＩデバイスへのＩ／Ｏコマンドの送信は、ターゲットＳＣＳＩデバイスによる読み出しＩ／Ｏ動作または書き込みＩ／Ｏ動作を起動する。図４を参照すると、ＳＣＳＩバスアダプタ４３０は、Ｉ／Ｏトランザクションの一部としてＩ／Ｏ動作を起動する。一般に、ＳＣＳＩバスアダプタ４３０は、読み出し動作または書き込み動作のいずれかを行うようにＳＣＳＩバスアダプタに命令するＣＰＵ４０２から、ＰＣＩバス４１２、システムコントローラ４０４およびＣＰＵバス４０６を介して読み出しコマンドまたは書き込みコマンドを受信する。読み出し動作において、ＣＰＵ４０２は、ＳＣＳＩバスアダプタ４３０に対して、大容量ストレージデバイス４２４〜４２６からデータを読み出して、ＳＣＳＩバス４１６、ＰＣＩバス４１２、システムコントローラ４０４およびメモリバス４１０を介してそのデータをシステムメモリ４０８内の位置に転送するように命令する。書き込み動作において、ＣＰＵ４０２は、システムコントローラ４０４に対して、システムメモリ４０８からメモリバス４１０、システムコントローラ４０４およびＰＣＩバス４１２を介してＳＣＳＩバスアダプタ４３０にデータを転送するように命令し、ＳＣＳＩバスアダプタ４３０に対して、ＳＣＳＩバス４１６を介してデータが書き込まれる大容量ストレージデバイス４２４〜４２６にデータを送信するように命令する。
【００３２】
図６Ａは、ＢＵＳ  ＦＲＥＥ状態６１４のＳＣＳＩバスから始まる。この状態は、ＳＣＳＩデバイスに現在輸送中のコマンドまたはデータがないことを表す。イニシエータまたはＳＣＳＩバスアダプタは、バスをＡＲＢＩＴＲＡＴＩＯＮ状態６１６に入らせるために、ＳＣＳＩバスのＢＳＹ信号線、Ｄ７信号線およびＳＥＬ信号線をアサートする。この状態において、イニシエータは、デバイスのすべてに、ＳＣＳＩバスにコマンドを伝送する意志を通知する。１つのみのデバイスが任意の瞬間にＳＣＳＩバスの動作を制御してもよいことから、アービトレーションが必要である。イニシエータがＳＣＳＩバスの制御を獲得すると仮定すると、イニシエータは次に、ＳＣＳＩバスをＳＥＬＥＣＴＩＯＮ状態６１８に入らせるために、ターゲットＳＣＳＩ＿ＩＤに対応するＡＴＮ信号線およびＤＸ信号線をアサートする。イニシエータまたはターゲットは、上述したＡＲＢＩＴＲＡＴＩＯＮ状態６１６からＳＥＬＥＣＴＩＯＮ状態６１８への状態の変更などのＳＣＳＩバス状態の変更を行うために、特定のシーケンスにおいて、種々のＳＣＳＩ信号線のアサートおよびドロップを行う。これらのシーケンスは、Ｓｃｈｍｉｄｔ規格およびＡＮＳＩ規格において見つけることができるため、以下にはさらに記載しない。
【００３３】
ターゲットがイニシエータによって選択されたことをターゲットが検知する場合には、ターゲットは、Ｉ／Ｏ動作のコマンド段階を終了するために、ＳＣＳＩバスの制御６２０を仮定する。ターゲットは次に、ＭＥＳＳＡＧＥ  ＯＵＴ状態６２２に入るために、ＳＣＳＩ信号線を制御する。ＭＥＳＳＡＧＥ  ＯＵＴ状態において生じる第１のイベントにおいて、ターゲットは、イニシエータからＩＤＥＮＴＩＦＹメッセージ６２３を受信する。ＩＤＥＮＴＩＦＹメッセージ６２３は、後に続くコマンドメッセージが対処されるＬＵＮを識別するＬＵＮフィールド６２４を含む。ＩＤＥＮＴＩＦＹメッセージ６２３はまた、ターゲットが後に続くＩ／Ｏコマンドのターゲットの実装中に、ＳＣＳＩバスから切断することをターゲットが認証するターゲットを表すために一般に設定されるフラグ６２５を含む。ターゲットは次に、後に続くＩ／Ｏコマンドがどのように待ち行列に入れられるべきかをターゲットに示すＱＵＥＵＥ  ＴＡＧメッセージ６２６を受信するほか、ターゲットに待ち行列タグ６２７を提供する。待ち行列タグは、Ｉ／Ｏコマンドを識別する１バイトである。したがって、ＳＣＳＩバスアダプタは、ＬＵＮごとに２５６個の異なるＩ／Ｏコマンドを同時に処理することができる。イニシエータＳＣＳＩバスアダプタのＳＣＳＩ＿ＩＤ、ターゲットＳＣＳＩデバイスのＳＣＳＩ＿ＩＤ、ターゲットＬＵＮおよび待ち行列タグの組み合わせは共に、ＳＣＳＩバスの中で後に続くＩ／Ｏコマンドに対応するＩ／Ｏ動作を一意に識別するＩ＿Ｔ＿Ｌ＿Ｑ結合参照番号を含む。次に、ターゲットデバイスは、ＣＯＭＭＡＮＤ状態６２８に入るために、ＳＣＳＩバス信号線を制御する。ＣＯＭＭＡＮＤ状態において、ターゲットは、イニシエータからＩ／Ｏコマンド６３０を要請して受信する。Ｉ／Ｏコマンド６３０は、実行されることになっている特定のコマンド、この場合には、読み出しコマンドまたは書き込みコマンドを識別する命令コード６３２と、コマンドによって指定される読み出し動作または書き込み動作の開始時点である論理デバイスの論理ブロックを識別する論理ブロック番号６３６と、コマンドの実行中に読み出されるか、または書き込まれるブロックの数を指定するデータ長さ６３８と、を含む。
【００３４】
ターゲットがＩ／Ｏコマンドを受信して処理するとき、ターゲットデバイスは、ターゲットデバイスが一般に切断メッセージ６４２をイニシエータデバイスに戻すように送信するＭＥＳＳＡＧＥ  ＩＮ状態６４０に入るために、ＳＣＳＩバス信号線を制御する。一般に、ターゲットは、コマンドによって指定される読み出し動作または書き込み動作のために論理デバイスを準備するために、論理デバイスと対話し始めるため、ターゲットは、ＳＣＳＩバスから切断される。ターゲットは、データの受信のためのバッファを準備する必要がある可能性があり、ディスクドライブまたはＣＤ−ＲＯＭドライブの場合には、ターゲットデバイスは、読み出しコマンドまたは書き込みコマンド用の開始時点として指定される適切なブロックを求めるように論理デバイスに命令してもよい。切断することによって、ターゲットデバイスは、ＳＣＳＩバスアダプタとターゲットデバイスとの間でさらなるメッセージ、コマンドまたはデータの輸送のために、ＳＣＳＩバスを解放する。このように、きわめて多数の異なるＩ／Ｏ動作が、ＳＣＳＩバスを通じて同時に多重化されることができる。最後に、ターゲットデバイスは、ＢＵＳ  ＦＲＥＥ状態６４４にＳＣＳＩバスを戻すためにＢＳＹ信号線をドロップする。
【００３５】
ターゲットデバイスは次に、読み出し動作または書き込み動作のために論理デバイスを準備する。論理デバイスにおいてデータの読み出しまたは書き込みのための準備が整っているとき、Ｉ／Ｏ動作のデータ段階が結果として生じる。図６Ｂは、ＳＣＳＩのＩ／Ｏ動作のデータ段階を示す。ＳＣＳＩバスは最初は、ＢＵＳ  ＦＲＥＥ状態６４６である。ターゲットデバイスは、読み出しＩ／Ｏコマンドに応じてデータを戻すか、または書き込みＩ／Ｏコマンドに応じてデータを許容するかの準備がここでなされ、ＡＲＢＩＴＲＡＴＩＯＮ状態６４８に入るために、ＳＣＳＩバス信号線を制御する。ターゲットデバイスが、ＳＣＳＩバスの制御のための仲裁に成功すると仮定すると、ターゲットデバイスは、ＲＥＳＥＬＥＣＴＩＯＮ状態６５０に入るためにＳＣＳＩバス信号線を制御する。ＲＥＳＥＬＥＣＴＩＯＮ状態は、図６Ａの上記の説明において記載したＳＥＬＥＣＴＩＯＮ状態に類似であり、ＲＥＳＥＬＥＣＴＩＯＮ状態において通信するために、ＳＥＬＥＣＴＩＯＮ状態におけるターゲットデバイスを選択するＳＣＳＩバスアダプタではなく、ＳＣＳＩバスアダプタの選択を行っているターゲットデバイスである点が異なる。
【００３６】
一旦、ターゲットデバイスが、ＳＣＳＩバスアダプタを選択すると、ターゲットデバイスは、ＳＣＳＩバスをＭＥＳＳＡＧＥ  ＩＮ状態６５２に入らせるために、ＳＣＳＩバス信号線を操作する。ＭＥＳＳＡＧＥ  ＩＮ状態において、ターゲットデバイスは、ＩＤＥＮＴＩＦＹメッセージ６５４およびＱＵＥＵＥ  ＴＡＧメッセージ６５６の両方をＳＣＳＩバスアダプタに送信する。これらのメッセージは、図６Ａに示されるイニシエータからターゲットへのＩ／Ｏコマンドの伝送中に、イニシエータによってターゲットデバイスに送信されるＩＤＥＮＴＩＦＹメッセージおよびＱＵＥＵＥ  ＴＡＧメッセージと同一である。イニシエータは、Ｉ＿Ｔ＿Ｌ＿Ｑ結合参照番号、イニシエータおよびターゲットデバイスのＳＣＳＩ＿ＩＤ、ターゲットＬＵＮ、ＱＵＥＵＥ  ＴＡＧメッセージに含まれる待ち行列タグの組み合わせを用いて、読み出し動作の場合には、データが続いてターゲットからイニシエータに送信されるＩ／Ｏトランザクションを識別してもよく、またはＷＲＩＴＥ動作の場合には、データが続いてイニシエータによって伝送されるＩ／Ｏトランザクションを識別してもよい。したがって、Ｉ＿Ｔ＿Ｌ＿Ｑ結合参照番号は、読み出しの場合には、ターゲットデバイスからデータを受信するための適切なバッファ、書き込みの場合には、ターゲットデバイスにデータを伝送するための適切なバッファを位置決めするために、目立つＩ／Ｏコマンドの表へのインデックスとして、ＳＣＳＩバスアダプタによって用いられることができるＩ／Ｏ動作処理である。
【００３７】
ＩＤＥＮＴＩＦＹメッセージおよびＱＵＥＵＥ  ＴＡＧメッセージの送信後、ターゲットデバイスは、ＤＡＴＡ状態６５８に移行するために、ＳＣＳＩ信号線を制御する。読み出しＩ／Ｏ動作の場合には、ＳＣＳＩバスは、ＤＡＴＡ  ＩＮ状態に移行する。書き込みＩ／Ｏ動作の場合には、ＳＣＳＩバスは、ＤＡＴＡ  ＯＵＴ状態に移行する。ＳＣＳＩバスがＤＡＴＡ状態にある時間中に、ターゲットデバイスは、各ＳＣＳＩバスクロックサイクル中に、データが伝送中である特定のＳＣＳＩバスの幅に等しいビット単位のサイズを有するデータ単位を伝送する。一般に、データの各単位の転送の一部として、信号線ＡＣＫおよびＲＥＱを伴うＳＣＳＩバス信号線ハンドシェイクがある。読み出しＩ／Ｏコマンドの場合には、たとえば、ターゲットデバイスは、次のデータ単位をＳＣＳＩバスに配置し、ＲＥＱ信号線をアサートする。イニシエータは、ＲＥＱ信号線のアサーションを検知し、ＳＣＳＩバスから伝送されたデータを検索し、データの受信を承認するために、ＡＣＫ信号線をアサートする。この種のデータ転送は、非同期転送と呼ばれる。ＳＣＳＩバスプロトコルはまた、ターゲットデバイスが、イニシエータからの第１の承認を受信する前に、一定数のデータ単位を転送することを可能にする。同期転送と呼ばれるこの転送モードにおいて、第１のデータ単位の送信と伝送のための承認の受信との間の待ち時間が、回避される。データ伝送中、ターゲットデバイスは、ＤＩＳＣＯＮＮＥＣＴメッセージが後に続くＳＡＶＥ  ＰＯＩＮＴＥＲＳメッセージをイニシエータに送信し、続いて、ＢＵＳ  ＦＲＥＥ状態に入るためにＳＣＳＩバス信号線を制御することによって、データ伝送を中断することができる。これにより、ターゲットデバイスは、さらなるデータの受信または伝送前にターゲットデバイスが制御する論理デバイスと対話するために、休止することを可能にする。ＳＣＳＩバスからの切断後、ターゲットデバイスは次に、ＳＣＳＩバスの制御のために再び後で仲裁し、さらなるＩＤＥＮＴＩＦＹメッセージおよびＱＵＥＵＥ  ＴＡＧメッセージをイニシエータに送信し、イニシエータが中断された時点で、イニシエータがデータの受信または伝送を再開することができるようにしてもよい。切断および再接続６６０の実施例が、ＤＡＴＡ状態６５８を中断する図３Ｂに示されている。最後に、Ｉ／Ｏ動作用のすべてのデータが伝送されると、ターゲットデバイスは、ＭＥＳＳＡＧＥ  ＩＮ状態６６２に入るために、ＳＣＳＩ信号線を制御し、ターゲットデバイスは、任意にＳＡＶＥ  ＰＯＩＮＴＥＲＳメッセージによって先行されるＤＩＳＣＯＮＮＥＣＴメッセージをイニシエータに送信する。ＤＩＳＣＯＮＮＥＣＴメッセージの送信後、ターゲットデバイスは、ＢＳＹ信号線をドロップし、ＢＵＳ  ＦＲＥＥ状態６６４にＳＣＳＩバスを移行させる。
【００３８】
図６Ｂに示されているように、Ｉ／Ｏ動作用のデータの伝送後に、ターゲットデバイスは、Ｉ／Ｏ動作の状態段階中に、状態をイニシエータに戻す。図６Ｃは、Ｉ／Ｏ動作の状態段階を示す。図６Ａ〜図６Ｂの場合のように、ＳＣＳＩバスは、図３Ｂの場合のように、ＢＵＳ  ＦＲＥＥ状態６６６からＡＲＢＩＴＲＡＴＩＯＮ状態６６８、ＲＥＳＥＬＥＣＴＩＯＮ状態６７０およびＭＥＳＳＡＧＥ  ＩＮ状態６７２に移行する。ＭＥＳＳＡＧＥ  ＩＮ状態６７２中のターゲットによるイニシエータへのＩＤＥＮＴＩＦＹメッセージ６７４およびＱＵＥＵＥ  ＴＡＧメッセージ６７６の伝送後に、ターゲットデバイスは、ＳＴＡＴＵＳ状態６７８に入るようにするために、ＳＣＳＩバス信号線を制御する。ＳＴＡＴＵＳ状態６７８において、ターゲットデバイスは、Ｉ／Ｏコマンドが正常に終了したかどうかを表すために、１つの状態バイト６８４をイニシエータに送信する。図６Ｃにおいて、０の状態コードによって表される正常終了に対応する状態バイト６８０は、ターゲットデバイスからイニシエータに送信されていることが示される。状態バイトの伝送後、ターゲットデバイスは次に、ＭＥＳＳＡＧＥ  ＩＮ状態６８２に入るために、ＳＣＳＩバス信号線を制御し、ターゲットデバイスは、ＣＯＭＭＡＮＤ  ＣＯＭＰＬＥＴＥメッセージ６８４をイニシエータに送信する。この時点で、Ｉ／Ｏ動作が終了する。ターゲットデバイスは次に、ＢＳＹ信号線をドロップし、ＳＣＳＩバスがＢＵＳ  ＦＲＥＥ状態６８６に戻るようにする。ＳＣＳＩバスアダプタはここで、Ｉ／Ｏコマンドのその部分を終了し、コマンドを実行し、ＰＣＩバスを介して終了メッセージまたは状態をＣＰＵに戻すために割り当てられた任意の内部リソースを解放することができる。
【００３９】
＜ＦＣＰへのＳＣＳＩプロトコルのマッピング＞
図７Ａおよび図７Ｂは、イニシエータとターゲットとの間で交換されたＦＣＰシーケンスと図６Ａ〜図６Ｃに記載されるＳＣＳＩバス段階および状態とのマッピングを示す。図７Ａ〜図７Ｂにおいて、ターゲットＳＣＳＩアダプタは、ＦＣＰホストアダプタと共にパッケージ化されることが仮定され、その結果、ターゲットＳＣＳＩアダプタは、ＦＣを介してイニシエータと通信し、ＳＣＳＩバスを介してターゲットＳＣＳＩデバイスと通信することができる。図７Ａは、読み出しＩ／Ｏトランザクションに関するＦＣＰシーケンスとＳＣＳＩ段階および状態との間のマッピングを示す。トランザクションは、イニシエータが、ＦＣＰ＿ＣＭＮＤ７０２データペイロードを含む１フレームＦＣＰシーケンスをＦＣを介してターゲットＳＣＳＩアダプタに送信するときに起動される。ターゲットＳＣＳＩバスアダプタがＦＣＰ＿ＣＭＮＤフレームを受信すると、ターゲットＳＣＳＩバスアダプタは、ＡＲＢＩＴＲＡＴＩＯＮ、ＲＥＳＥＬＥＣＴＩＯＮ、ＭＥＳＳＡＧＥ  ＯＵＴ、ＣＯＭＭＡＮＤおよびＭＥＳＳＡＧＥ  ＩＮをはじめとする図６Ａに示されるコマンド段階７０４のＳＣＳＩ状態を介して続行する。図６Ａに示されているように、コマンド段階の終わりで、Ｉ／ＯトランザクションのターゲットであるＳＣＳＩデバイスは、ＳＣＳＩバスを解放するために、ＳＣＳＩバスから切断し、ターゲットＳＣＳＩデバイスにおいて、トランザクションを実行する準備がなされる。後に、ターゲットＳＣＳＩデバイスは、ＳＣＳＩバス制御のために再仲裁し、Ｉ／Ｏトランザクション７０６のデータ段階を開始する。この時点で、ＳＣＳＩバスアダプタは、データ伝送がここで続行することができることを表すために、ＦＣＰ＿ＸＦＥＲ＿ＲＤＹ１フレームシーケンス７０８をイニシエータに戻すように送信してもよい。読み出しＩ／Ｏトランザクションの場合には、ＦＣＰ＿ＸＦＥＲ＿ＲＤＹ１フレームシーケンスは、任意である。データ段階が続行されるとき、ターゲットＳＣＳＩデバイスは、論理デバイスからデータを読み出して、ＳＣＳＩバス上でそのデータをターゲットＳＣＳＩバスアダプタに伝送し始める。ターゲットＳＣＳＩバスアダプタは次に、ターゲットＳＣＳＩデバイスから受信されたデータを、共にＩ／Ｏ読み出しトランザクションに対応するエクスチェンジの第３のシーケンスを構成する複数のＦＣＰ＿ＤＡＴＡフレームにパッケージ化し、ＦＣを介してそれらのＦＣＰ＿ＤＡＴＡフレームをイニシエータに伝送する。すべてのデータが伝送され、ターゲットＳＣＳＩデバイスがＳＣＳＩバスの制御を断念するとき、ターゲットＳＣＳＩデバイスは次に、Ｉ／Ｏトランザクションの状態段階７１４を起動するために、ＳＣＳＩバスの制御を仲裁する。この段階において、ＳＣＳＩバスは、ターゲットＳＣＳＩデバイスからターゲットＳＣＳＩバスアダプタにＳＣＳＩ状態バイトを送信するために、図３Ｃに示されているように、ＢＵＳ  ＦＲＥＥ状態からＡＲＢＩＴＲＡＴＩＯＮ、ＲＥＳＥＬＥＣＴＩＯＮ、ＭＥＳＳＡＧＥ  ＩＮ、ＳＴＡＴＵＳ、ＭＥＳＳＡＧＥ  ＩＮおよびＢＵＳ  ＦＲＥＥ状態を介して移行する。状態バイトの受信時に、ターゲットＳＣＳＩバスアダプタは、状態バイトをＦＣＰ＿ＲＳＰ１フレームシーケンス７１６にパッケージ化し、ＦＣを介してＦＣＰ＿ＲＳＰ１フレームシーケンスをイニシエータに伝送する。これが、読み出しＩ／Ｏトランザクションを終了する。
【００４０】
多くのコンピュータシステムにおいて、ターゲットＦＣホストアダプタとターゲットＳＣＳＩバスアダプタとの間に、ＰＣＩバスなどのさらなる内部コンピュータバスがあってもよい。言い換えれば、ＦＣホストアダプタおよびＳＣＳＩアダプタは、１つのターゲット構成要素に共にパッケージ化されなくてもよい。簡単にするために、図７Ａ〜図７Ｂにはさらなる相互接続は、示されない。
【００４１】
図７Ｂは、図７Ａの類似の方式において、ＦＣＰ＿ＣＭＮＤフレーム７１８によって示される書き込みＩ／Ｏトランザクション中のＦＣＰシーケンスとＳＣＳＩバス段階および状態との間のマッピングを示す。図７Ｂは、書き込みトランザクション中に、ＦＣＰ＿ＤＡＴＡフレーム７２２〜７２５が、ＦＣにわたってイニシエータからターゲットに伝送され、ターゲットからイニシエータに送信されるＦＣＰ＿ＸＦＥＲ＿ＲＤＹ１フレームシーケンス７２０が、読み出しＩ／Ｏトランザクションの場合のように任意ではなく、代わりに必須である点のみが図７Ａとは異なる。図７Ａの場合のように、書き込みＩ／Ｏトランザクションは、ターゲットがＦＣＰ＿ＲＳＰ１フレームシーケンス７２６をイニシエータに戻す場合に含まれる。
【００４２】
＜ＩＤＥ／ＡＴＡディスクドライブ＞
ＩＤＥ／ＡＴＡドライブは、ディスク論理コントローラおよびハードディスクを共に１つのモジュールとして統合するために開発された。ＩＤＥ／ＡＴＡドライブは、ＩＳＡバスを介するＰＣシステムへの容易な統合のために特に設計された。元来、ＩＤＥ／ＡＴＡドライブは、システムまたはバスクロックによって制御される離散的な時間間隔で、ＩＤＥ／ＡＴＡドライブとシステムとの間のデータの２バイトの交換を可能にするために、パラレルな１６ビット相互接続によって設計された。残念なことに、パラレルバス相互接続は、性能限界に達しつつあり、現在のデータ速度は１００〜１３３ＭＢ／秒であり、４０または８０のピンリボンケーブル接続はもはや、現在のコンピュータシステム内の内部構成要素の窮屈な高密度パッケージ化に適合しない。これらの理由からＳＡＴＡ（「ＳＡＴＡ」）規格が開発され、ＳＡＴＡディスクドライブが現在、製作されており、８０ピンリボンケーブル接続が、４線式シリアルケーブルに取って代わっている。ＳＡＴＡディスクの場合の初期データ速度は、１５０ＭＢ／秒であり、まもなく３００ＭＢ／秒に増大し、次には６００ＭＢ／秒に達すると予想されている。標準的な８Ｂ／１０Ｂ符号化は、ＡＴＡシリアルディスクドライブと周辺構成要素相互接続（「ＰＣＩ」）に基づくコントローラとの間の転送のために、データのシリアル化のために用いられる。最終的には、種々のＩ／Ｏコントローラを統合し、インターフェイスを周辺デバイスおよびバスに提供し、１つまたは複数のＣＰＵおよびメモリを連結する第２のブリッジとの間でデータ転送を行うサウスブリッジコントローラは、ＳＡＴＡデバイスの直接的な相互接続を提供するために、ＳＡＴＡ技術を完全に組み込むように設計されてもよい。
【００４３】
ＡＴＡインターフェイス、特にＡＴＡ−５およびＡＴＡ−６規格のインターフェイスは、外部プロセッサまたは論理コントローラが、ＡＴＡディスクドライブ内の論理コントローラに、基本的なデータ転送コマンド、探索、キャッシュ管理および他の管理および診断に関連するタスクを実行するように命令することを可能にする、様々なコマンドをサポートする。以下の表２は、プロトコル「１」などのプロトコル番号を一般的なタイプのＡＴＡコマンドと関連付ける。コマンドのタイプとしては、プログラムされた入力／出力（「ＰＩＯ」）、非データコマンドおよび直接メモリアクセス（「ＤＭＡ」）コマンドが挙げられる。
【表２】
2011504632.tif 000005
【００４４】
以下に提供される表３は、複数のＡＴＡコマンドに加えて、表２において上記で定義したように、コマンドが属するコマンドタイプを表す対応するプロトコルを列挙している。
【表３】
2011504632.tif 000006
【００４５】
ＣＨＥＣＫ  ＰＯＷＥＲ  ＭＯＤＥコマンドは、ホストがＡＴＡデバイスの電力モードを決定することを可能にする。ＤＯＷＮＬＯＡＤ  ＭＩＣＲＯＣＯＤＥコマンドは、ホストがＡＴＡデバイスのマイクロコードを変更することを可能にする。ＥＸＥＣＵＴＩＶＥ  ＤＥＶＩＣＥ  ＤＩＡＧＮＯＳＴＩＣＳコマンドは、ホストが、ＡＴＡデバイスによって実装される診断試験を呼び出すことを可能にする。ＦＬＵＳＨ  ＣＡＣＨＥコマンドは、ホストが、ＡＴＡデバイスがその書き込みキャッシュをフラッシュすることを要求することを可能にする。このコマンドの２つのバージョンが表に含まれ、拡張バージョンはＡＴＡ〜６規格インターフェイスをサポートするデバイスで利用可能な４８ビットアドレス指定機能を表す。表３に示されるコマンドのさらなる拡張バージョンは、以下で個別に説明しない。ＩＤＥＮＴＩＦＹ  ＤＥＶＩＣＥコマンドは、ホストが、デバイスによって提供される論理セクタ、シリンダおよびヘッドの数、デバイスによってサポートされるコマンド、デバイスによってサポートされる機能および他のそのようなパラメータをはじめとするパラメータ情報に関して、ＡＴＡデバイスに照会することを可能にする。ＲＥＡＤ  ＤＭＡコマンドは、ホストがＤＭＡデータ転送プロトコルを用いて、デバイスからデータを読み出すことを可能にし、大量のデータの場合に、一般にはるかに効率的である。ＲＥＡＤ  ＶＥＲＩＦＹ  ＳＥＣＴＯＲＳコマンドは、ホストが、ＡＴＡデバイスにホスト内に格納されたデータの一部を読み出すように命令して、デバイスからホストへのデータ読み出しを転送することなく、エラー状態が生じるかどうかを決定することを可能にする。ＳＥＥＫコマンドは、ホストが次のコマンドにおける１つまたは複数の特定の論理ブロックにアクセスし、デバイスが指定された１つまたは複数の論理ブロックへの次のアクセスを実行するために、ヘッドの位置決めを最適化することを可能にしうることを、ホストがＡＴＡデバイスに通知することを可能にする。ＳＥＴ  ＦＥＡＴＵＲＥＳコマンドは、ホストがＡＴＡデバイス内の種々のパラメータを修正して、デバイスによって提供された機能をオンおよびオフ状態にすることを可能にする。ＳＬＥＥＰコマンドは、ホストが、ＡＴＡデバイスに次のリセットコマンドを停止させて待機するように命令することを可能にする。ＷＲＩＴＥ  ＤＭＡコマンドは、ホストが、より大量のデータの場合に一般的にさらに効率的であるＤＭＡデータ転送を用いて、ＡＴＡデバイスにデータを書き込むことを可能にする。
【００４６】
＜ＦＣに基づくディスクアレイ＞
中規模および大規模のコンピュータシステムにおいて、データ格納の要件は一般に、埋め込まれたディスクドライブを含む埋め込まれた大容量ストレージデバイスの容量をはるかに超える。そのようなシステムにおいて、ローカルエリアネットワーク、光ファイバネットワークおよび他の高帯域幅通信媒体を介して、中規模の高性能なコンピュータシステムに連結される内部プロセッサを含む廉価なディスクの冗長アレイ（「ＲＡＩＤ」）などの高性能で大容量デバイスを利用することが一般的になっている。ディスクアレイの設計および製作を容易にするために、ディスク製造者は、ディスクアレイ内のディスクドライブをディスクアレイコントローラに直接的に相互連結するために、ＦＣポートを含むディスクドライブを提供する。一般に、ＦＣアービトレイテッドループトポロジ（構成）が、個別のＦＣディスクドライブをディスクアレイコントローラに相互連結するために、ディスクアレイ内で利用される。
【００４７】
図８Ａ〜図８Ｄは、ディスクアレイにおけるＦＣディスクの使用に関連する複数の問題点を示している。図８Ａは、ディスクアレイの内部構成要素の比較的抽象的なレンダリングを示している。以下に説明する図８Ｂ〜図８Ｄおよび図９は、同一の説明の規則を利用する。図８Ａにおいて、ディスクアレイコントローラ８０２は、高帯域幅通信媒体８０４を介して遠隔コンピュータシステムおよび他の遠隔エンティティに相互接続される。ディスクアレイコントローラは、１つまたは複数のプロセッサ、１つまたは複数の一般に比較的大きい電子メモリ、遠隔コンピュータシステムに、ディスクアレイ内のディスクドライブに比較的高位の倫理単位および論理ブロックインターフェイスを提供するために、ディスクアレイ制御ファームウェアおよびソフトウェアをディスクアレイコントローラ内に格納して実行することが可能な他のそのような構成要素を含む。図８Ａに示されているように、ディスクアレイは、ディスクアレイコントローラ８０２および複数のＦＣディスクドライブ８０６〜８１３を含む。ＦＣディスクドライブは、ＦＣアービトレイテッドループ８１４を介してディスクアレイコントローラ８０２と相互接続される。図８Ａに抽象的に示されたディスクアレイなどのＦＣに基づくディスクアレイは、格納媒体として標準的かつ容易に利用可能なＦＣディスク、相互接続用のＦＣアービトレイテッドループおよびディスクアレイコントローラ内の標準的なＦＣコントローラを用いて、比較的容易に設計および製作される。ＦＣは高速のシリアル通信媒体であるため、ＦＣアービトレイテッドループ８１４は、ＦＣディスク８０６〜８１３とディスクアレイコントローラ８０２との間のデータ転送のために豊富な帯域幅を提供する。
【００４８】
しかし、ＦＣディスクドライブなどのＦＣアービトレイテッドループ内の各ＦＣノードで、データが処理され、ノードのＦＣポートを介して転送されるときに、著しいノード遅延がある。ノード遅延は、下付き文字の小文字の「ｔ」でラベル付けされた短い矢印で、図８Ａに示されている。ノード遅延は、ＦＣアービトレイテッドループの中で累積し、ＦＣアービトレイテッドループの中のＦＣノードの数に比例して著しく蓄積されたノード遅延となる。
【００４９】
図８Ａに示されるディスクアレイ実装に関する第２の問題点は、ＦＣアービトレイテッドループが、潜在的に１つの故障点を表すことである。一般に、ＦＣディスクは、アービトレイテッドループから機能していないＦＣディスクを分離するために、ポートバイパス回路を用いて拡大されてもよいが、ポートバイパス回路のみによっては阻止されることができない異なるモードの故障が複数ある。
【００５０】
ノードをアービトレイテッドループに連結するＦＣポートが、機能しないときに、第３の問題点が生じる。そのような場合には、複雑かつ信頼性に欠ける技術が、機能しないＦＣポートを識別して分離する試みにおいて利用されなければならない。一般に、機能しないＦＣポートは、ループトポロジ（構成）が混乱しており、機能しないノードを分離するために、ディスクアレイコントローラは、各ノードをバイパスするためにポートバイパス回路を連続的に起動しようとしなければならない。しかし、この技術は、種々の故障モードの下で機能しないノードを識別することに失敗する可能性がある。したがって、ノードの故障は、アービトレイテッドループトポロジ（構成）に関する深刻な問題点である。
【００５１】
図８Ｂは、潜在的な１点故障問題に対する解決策を示している。図８Ｂに示されているように、ディスクアレイコントローラ８０２は、２つの個別の独立なＦＣアービトレイテッドループ８１４および８１６を介してＦＣディスク８０６〜８１３と相互接続される。２つの個別のＦＣアービトレイテッドループを用いることにより、１点故障問題を著しく解消する。しかし、ノード遅延問題は、２つのＦＣアービトレイテッドループを用いることにより、改善されるわけではない。さらに、各ＦＣディスクが２つの個別のＦＣポートを含まなければならないため、個別のＦＣディスクは、さらに複雑かつさらに高価である。最後に、機能しないポートの識別および分離に関する問題は、部分的にのみ対処される。その理由は、２つのアービトレイテッドループの一方が混乱するノード故障の場合には、他方のアービトレイテッドループが機能し続けるが、通信媒体において２倍の冗長性はないためである。２倍の冗長性を復元するためには、ディスクアレイコントローラは依然として、機能しないノードを識別して分離しようとする必要があり、上述したように、識別および分離に抵抗する故障モードが多くある。
【００５２】
図８Ｃは、ディスクアレイのＦＣに基づく実装に関するさらなる問題点をさらに示している。一般に、ディスクアレイから必要とされる利用可能な格納空間が大きくなればなるほど、大量の個別のＦＣディスクの追加を結果として生じる。しかし、さらなるディスクを含むことは、ノード遅延問題を悪化させ、上述のように、１つのＦＣアービトレイテッドループが、最大１２７個のノードだけを含むことになる可能性がある。この最大ノード問題を克服するためには、さらに独立なＦＣアービトレイテッドループが、ディスクアレイに追加される。
【００５３】
図８Ｄは、より高性能のディスクアレイを示しており、ここでＦＣディスクの第１の集合８１８が、２つの個別のＦＣアービトレイテッドループ８１４および８１６を介してＦＣコントローラ８０２と相互接続され、ＦＣディスクの第２の集合８２０が、第２のペアのＦＣアービトレイテッドループ８２２および８２４を介してディスクアレイコントローラ８０２と相互接続される。ＦＣディスクの集合のそれぞれ８１８および８２０は、シェルフと呼ばれ、一般に冗長な電源システム、冗長な制御経路、全体的な故障の許容差およびディスクアレイの高可用性に寄与する他の特徴によって、個別のエンクロージャに含まれる。しかし、各シェルフの追加は、ディスクアレイコントローラ８０２内のＦＣコントローラおよびＦＣポートの数を増大させる。また、各個別のＦＣアービトレイテッドループは、ＦＣアービトレイテッドループの中に含まれるＦＣノードの累積的なノード遅延を被ることも留意されたい。したがって、ディスクアレイの設計者、製造者および利用者は、ＦＣに基づくディスクアレイの中でディスクアレイコントローラおよびＦＣディスクを相互接続するために、さらに柔軟性があり、さらにコスト効率がよく、さらに効率的な方法の必要性を認識している。さらに、ディスクアレイの設計者、製造者および利用者は、ポート故障および他の通信および構成要素の故障のより簡単かつより高い信頼性の識別を可能にするＦＣに基づくディスクアレイの中で、ディスクアレイコントローラおよびＦＣディスクを相互接続するための方法の必要性を認識している。
【００５４】
＜ディスクドライブのフォーマティングおよびエラー検出＞
ディスクドライブ技術および実装は、他のタイプの大容量ストレージデバイスと同様に。発展し続ける。ディスクアレイ製作は、ディスクアレイにおいて、最もコスト効果がよく、技術的に高度なディスクドライブを用いることを期待している。しかし、ディスクアレイコントローラは、唯一または少数の現在利用可能なディスクドライブインターフェイスに対してインターフェイスをとるために実装されてもよいが、新たなフォーマティングの規則をはじめとする新たなインターフェイスを新たなディスクドライブに組み込むことは、ディスクアレイコントローラのコストおよび時間のかかるリエンジニアリングを必要とする。現在利用可能なディスクドライブは一般に、パリティチェックコードおよび他の技術を用いる原始的なエラー検査およびエラー補正を提供する。しかし、現在のディスクドライブによって提供されるこのレベルのエラー検査は、商用に用いられるディスクアレイストレージデバイスに関するエラー検出要件には不十分である可能性がある。さらなるエラー検出は、ディスクアレイコントローラにおいてプログラムされることができるが、ディスクアレイコントローラに基づく技術は、コストがかかり、複雑なディスクアレイコントローラソフトウェアおよびファームウェアの再実装を必要とする可能性があり、非効率的で、ディスクアレイコントローラとストレージデバイスとの間の増大するデータ転送を伴う可能性がある。さらに、ディスクアレイコントローラのエラー検出技術は、大量のディスクドライブ指定論理を必要とすることになる。
【発明の概要】
【発明が解決しようとする課題】
【００５５】
したがってディスクアレイおよび他の大容量ストレージデバイスの設計者、製造者および利用者は、ディスクアレイおよび他の大容量ストレージデバイスの中に新たなタイプのディスクドライブを組み込むため、およびディスクアレイコントローラを再実装する必要のないディスクアレイのエラー検出能力を増大させるためのコスト効果および効率のよい方法の必要性を認識している。
【課題を解決するための手段】
【００５６】
種々の実施形態において、本発明は、（１）ストレージシェルフルータと、ディスクアレイコントローラおよびホストコンピュータなどの外部計算エンティティにストレージシェルフが含まれるストレージシェルフと、（２）Ｉ／Ｏコントローラと、（３）ストレージブリッジデバイスと、を含む中間デバイスによって仮想ディスクフォーマティングを提供する。本発明の追加の実施形態では、二重抽象化法において、仮想ブロック読み取りを基本デバイスブロックに効果的に配列するために追加のパディングを用いて仮想フォーマティングを高精度化する。さらに本発明の追加の実施形態では、仮想ブロックＷＲＩＴＥ動作中に発生するＲＥＡＤ−ＭＯＤＩＦＹ動作において改変されたデバイスブロックを修正する。いろいろな中間デバイスが２つまたはそれ以上の仮想フォーマティング、二重抽象化法、あるいは改変デバイスブロック追跡方法を採用可能である。
【図面の簡単な説明】
【００５７】
【図１Ａ】３つの異なるタイプのＦＣ相互接続トポロジ（構成）を示す。
【図１Ｂ】３つの異なるタイプのＦＣ相互接続トポロジ（構成）を示す。
【図１Ｃ】３つの異なるタイプのＦＣ相互接続トポロジ（構成）を示す。
【図２】データがＦＣネットワークを介した転送のために時間において体系化される極めて簡素な階層を示す。
【図３】標準的なＦＣフレームの内容を示す。
【図４】ＳＣＳＩバスを含む一般的なパーソナルコンピュータアーキテクチャのブロック図である。
【図５】ＳＣＳＩバストポロジ（構成）を示す。
【図６Ａ】読み出しＩ／Ｏ動作および書き込みＩ／Ｏ動作の開始および実装に伴うＳＣＳＩプロトコルを示す。
【図６Ｂ】読み出しＩ／Ｏ動作および書き込みＩ／Ｏ動作の開始および実装に伴うＳＣＳＩプロトコルを示す。
【図６Ｃ】読み出しＩ／Ｏ動作および書き込みＩ／Ｏ動作の開始および実装に伴うＳＣＳＩプロトコルを示す。
【図７Ａ】図６Ａ〜図６Ｃに記載されるイニシエータとターゲットとの間で交換されるＳＣＳＩシーケンスおよびＳＣＳＩバス段階および状態に対する、ＦＣプロトコルのマッピングを示す。
【図７Ｂ】図６Ａ〜図６Ｃに記載されるイニシエータとターゲットとの間で交換されるＳＣＳＩシーケンスおよびＳＣＳＩバス段階および状態に対する、ＦＣプロトコルのマッピングを示す。
【図８Ａ】ディスクアレイにおけるＦＣディスクの構成例を示す。
【図８Ｂ】ディスクアレイにおけるＦＣディスクの構成例を示す。
【図８Ｃ】ディスクアレイにおけるＦＣディスクの構成例を示す。
【図８Ｄ】ディスクアレイにおけるＦＣディスクの構成例を示す。
【図９】図８Ａ〜図８Ｄのために利用される説明の規則を用いて、本発明の一実施形態を表すストレージシェルフルータを示す。
【図１０】本発明の一実施形態を表すストレージシェルフルータによって占められるコンピュータおよびディスクアレイの階層的に相互接続されるシステムの中の位置を示す。
【図１１】本発明の一実施形態を表すストレージシェルフルータを用いて実装されるストレージシェルフの構成要素の斜視図を示す。
【図１２】本発明の一実施形態を表すストレージシェルフルータを用いて実装されるストレージシェルフの構成要素の斜視図を示す。
【図１３Ａ】本発明の一実施形態を表すストレージシェルフルータを用いて、ストレージシェルフの３つの異なる実装を示す。
【図１３Ｂ】本発明の一実施形態を表すストレージシェルフルータを用いて、ストレージシェルフの３つの異なる実装を示す。
【図１３Ｃ】本発明の一実施形態を表すストレージシェルフルータを用いて、ストレージシェルフの３つの異なる実装を示す。
【図１４Ａ】２つのストレージシェルフルータとＡＴＡディスクドライブを相互接続するために適切なパスコントローラカードの２つの実装を示す。
【図１４Ｂ】２つのストレージシェルフルータとＡＴＡディスクドライブを相互接続するために適切なパスコントローラカードの２つの実装を示す。
【図１５】ストレージシェルフルータの主要な機能構成要素を示す高位ブロック図である。
【図１６Ａ】本発明の一実施形態を表す１つまたは複数のストレージシェルフルータを組み込んだ高可用性ストレージシェルフによって提供される複数の異なる論理インターフェイスを示す。
【図１６Ｂ】本発明の一実施形態を表す１つまたは複数のストレージシェルフルータを組み込んだ高可用性ストレージシェルフによって提供される複数の異なる論理インターフェイスを示す。
【図１６Ｃ】本発明の一実施形態を表す１つまたは複数のストレージシェルフルータを組み込んだ高可用性ストレージシェルフによって提供される複数の異なる論理インターフェイスを示す。
【図１６Ｄ】本発明の一実施形態を表す１つまたは複数のストレージシェルフルータを組み込んだ高可用性ストレージシェルフによって提供される複数の異なる論理インターフェイスを示す。
【図１６Ｅ】本発明の一実施形態を表す１つまたは複数のストレージシェルフルータを組み込んだ高可用性ストレージシェルフによって提供される複数の異なる論理インターフェイスを示す。
【図１６Ｆ】本発明の一実施形態を表す１つまたは複数のストレージシェルフルータを組み込んだ高可用性ストレージシェルフによって提供される複数の異なる論理インターフェイスを示す。
【図１６Ｇ】本発明の一実施形態を表す１つまたは複数のストレージシェルフルータを組み込んだ高可用性ストレージシェルフによって提供される複数の異なる論理インターフェイスを示す。
【図１７Ａ】本発明の一実施形態を表すストレージシェルフルータを介したデータおよび制御情報の流れを示す。
【図１７Ｂ】本発明の一実施形態を表すストレージシェルフルータを介したデータおよび制御情報の流れを示す。
【図１７Ｃ】本発明の一実施形態を表すストレージシェルフルータを介したデータおよび制御情報の流れを示す。
【図１７Ｄ】本発明の一実施形態を表すストレージシェルフルータを介したデータおよび制御情報の流れを示す。
【図１７Ｅ】本発明の一実施形態を表すストレージシェルフルータを介したデータおよび制御情報の流れを示す。
【図１７Ｆ】本発明の一実施形態を表すストレージシェルフルータを介したデータおよび制御情報の流れを示す。
【図１８】本発明の一実施形態を表すストレージシェルフルータの論理構成要素のさらに詳細なブロック図を示す。
【図１９】ＦＣポート層のさらに詳細な図を示す。
【図２０】ルーティング層のさらに詳細なブロック図を示す。
【図２１】ＦＣＰ層のさらに詳細なブロック図を示す。
【図２２】ＳＡＴＡポート層のさらに詳細なブロック図を示す。
【図２３】ＳＡＴＡポートのさらに詳細なブロック図を示す。
【図２４】４ストレージシェルフルータ可用性ストレージシェルフの中のルーティングトポロジ（構成）を示す。
【図２５】２ストレージシェルフルータの中のＸおよびＹのＦＣアービトレイテッドループ相互接続の抽象表現を示し、ディスクアレイの２ストレージシェルフの実装を示す。
【図２６Ａ】本発明の一実施形態を表すストレージシェルフの中で、特定のＦＣポートを介して、特定のストレージシェルフルータまたは遠隔エンティティへのＦＣフレームのルーティングのために用いられるＦＣフレームヘッダの中のデータフィールドを示す。
【図２６Ｂ】本発明の一実施形態を表すストレージシェルフの中で、特定のＦＣポートを介して、特定のストレージシェルフルータまたは遠隔エンティティへのＦＣフレームのルーティングのために用いられるＦＣフレームヘッダの中のデータフィールドを示す。
【図２６Ｃ】本発明の一実施形態を表すストレージシェルフの中で、特定のＦＣポートを介して、特定のストレージシェルフルータまたは遠隔エンティティへのＦＣフレームのルーティングのために用いられるＦＣフレームヘッダの中のデータフィールドを示す。
【図２６Ｄ】本発明の一実施形態を表すストレージシェルフの中で、特定のＦＣポートを介して、特定のストレージシェルフルータまたは遠隔エンティティへのＦＣフレームのルーティングのために用いられるＦＣフレームヘッダの中のデータフィールドを示す。
【図２６Ｅ】本発明の一実施形態を表すストレージシェルフの中で、特定のＦＣポートを介して、特定のストレージシェルフルータまたは遠隔エンティティへのＦＣフレームのルーティングのために用いられるＦＣフレームヘッダの中のデータフィールドを示す。
【図２７】ルーティング層によってＦＣフレームのルーティングを容易にするためにストレージシェルフルータの中に維持される７つの主要ルーティングテーブルを示す。
【図２８】フロー制御図に用いられる簡素化されたルーティングトポロジ（構成）およびルーティング宛て先の命名法を提供する。
【図２９】ルーティング層論理回路を記述する一連の階層的なフロー制御図である。
【図３０】ルーティング層論理回路を記述する一連の階層的なフロー制御図である。
【図３１】ルーティング層論理回路を記述する一連の階層的なフロー制御図である。
【図３２】ルーティング層論理回路を記述する一連の階層的なフロー制御図である。
【図３３】ルーティング層論理回路を記述する一連の階層的なフロー制御図である。
【図３４】ルーティング層論理回路を記述する一連の階層的なフロー制御図である。
【図３５】ルーティング層論理回路を記述する一連の階層的なフロー制御図である。
【図３６Ａ】ＡＴＡおよびＳＡＴＡディスクドライブおよびＦＣディスクドライブによって利用されるディスクフォーマティングの規則を示す。
【図３６Ｂ】ＡＴＡおよびＳＡＴＡディスクドライブおよびＦＣディスクドライブによって利用されるディスクフォーマティングの規則を示す。
【図３７Ａ】ディスクアレイコントローラなどの外部エンティティによるストレージシェルフ内部の５１２バイトに基づくディスクドライブへの５２０バイトのＷＲＩＴＥアクセスを処理するためのストレージシェルフ仮想ディスクフォーマティング実装を示す。
【図３７Ｂ】ディスクアレイコントローラなどの外部エンティティによるストレージシェルフ内部の５１２バイトに基づくディスクドライブへの５２０バイトのＷＲＩＴＥアクセスを処理するためのストレージシェルフ仮想ディスクフォーマティング実装を示す。
【図３７Ｃ】ディスクアレイコントローラなどの外部エンティティによるストレージシェルフ内部の５１２バイトに基づくディスクドライブへの５２０バイトのＷＲＩＴＥアクセスを処理するためのストレージシェルフ仮想ディスクフォーマティング実装を示す。
【図３７Ｄ】ディスクアレイコントローラなどの外部エンティティによるストレージシェルフ内部の５１２バイトに基づくディスクドライブへの５２０バイトのＷＲＩＴＥアクセスを処理するためのストレージシェルフ仮想ディスクフォーマティング実装を示す。
【図３８Ａ】ストレージシェルフルータによる５２０バイトセクタに基づく仮想ＲＥＡＤ動作の実装を示す。
【図３８Ｂ】ストレージシェルフルータによる５２０バイトセクタに基づく仮想ＲＥＡＤ動作の実装を示す。
【図３９】図３７Ａ〜図３７Ｄに示される、仮想ＷＲＩＴＥ動作のストレージシェルフルータ実装を示す制御フロー図である。
【図４０】図３８Ａ〜図３８Ｂに示される、仮想ＲＥＡＤ動作のストレージシェルフルータ実装を示す制御フロー図である。
【図４１】本発明の一実施形態を表す物理セクタへの仮想セクタのマッピング例を示す。
【図４２】本発明の一実施形態を表す離散的な仮想フォーマティング実装における仮想セクタＷＲＩＴＥの様子を示す。
【図４３】本発明の一実施形態を表すストレージシェルフに基づく離散的な仮想フォーマティング実装における仮想セクタＷＲＩＴＥの様子を示す。
【図４４】ストレージシェルフルータが、ＡＴＡおよびＳＡＴＡディスクドライブのエラー検出能力を強化することを可能にする２レベル仮想ディスクフォーマティングを示す。
【図４５】図４１に示される２仮想レベル実施形態における各第１位仮想の５２０バイトセクタにおけるストレージシェルフルータによって含まれるＬＲＣフィールドの内容を示す。
【図４６】ＣＲＣ値の計算フローを示す。
【図４７】エラーを検出するために仮想セクタのＬＲＣフィールドに含まれるＣＲＣフィールドに対して仮想セクタの内容の検査を示す。
【図４８】エラーのために検索される仮想セクタを検査するために、ストレージシェルフルータによって利用される完全なＬＲＣ検査技術を示す制御フロー図である。
【図４９】遅延されるＬＲＣ検査を示す。
【図５０】受信された第２位５１２バイト仮想セクタにおける書き込み動作の完全なＬＲＣ検査を示す。
【図５１】ＦＣ／ＳＡＳ  ＲＡＩＤコントローラを利用するＦＣに基づくディスクアレイの中にＳＡＴＡディスクドライブを組み込むための別の手法を示す。
【図５２】ＦＣ／ＳＡＳ  ＲＡＩＤコントローラのブロック図を示す。
【図５３】ＳＡＳ通信媒体のＩＸ物理層を示す。
【図５４】差分信号ペアの動作を示す。
【図５５】異なる幅の複数の異なるＳＡＳポートを示す。
【図５６】ＦＣ／ＳＡＳ  Ｉ／Ｏコントローラ（図５２の５２１６）のための３つの異なる設定を示す。
【図５７】デュアルコントローラディスクアレイにおいてＦＣ／ＳＡＳ  Ｉ／ＯコントローラへのディスクドライブのＳＡＳに基づく接続を示す。
【図５８】ＳＡＳによってサポートされる３つの異なる通信プロトコルを示す。
【図５９】２ＳＡＳポートＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラ設定における２ＳＡＳポートへのデュアルコアＲＡＩＤコントローラＣＰＵのインターフェイスを示す。
【図６０】図５２に示されるＲＡＩＤコントローラに含まれるＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラ（図５２の５２１６）のブロック図である。
【図６１】ＦＣ／ＳＡＳ  Ｉ／Ｏコントローラ（図５２の５２１６）とのＲＡＩＤコントローラインターフェイスのデュアルコアプロセッサ（図５２の５２１４）で実行中であるＲＡＩＤコントローラが実行可能な、ＲＡＩＤコントローラ／Ｉ／Ｏコントローラインターフェイスを示す。
【図６２】図６１を参照して上述したＲＡＩＤコントローラ／Ｉ／Ｏコントローラインターフェイスによるデータの流れを示す。
【図６３】１バッファＲＥＡＤコマンドに関するスキャッタギャザリストを示す。
【図６４】２バッファＲＥＡＤコマンドに関するスキャッタギャザリストを示す。
【図６５】ＲＡＩＤコントローラ／Ｉ／Ｏコントローラインターフェイスによって指定される整列されていないＷＲＩＴＥ  Ｉ／Ｏコマンドを示す。
【図６６】ブリッジインターフェイスカードを用いることによって、ＦＣディスクドライブに基づくディスクアレイの中のＳＡＴＡディスクドライブの使用状態を示す。
【図６７】ブリッジインターフェイスカードのブロック図である。
【図６８】図６７に示されるストレージブリッジ集積回路のブロック図である。
【図６９】ＣＰＵコンプレックス（図６８の６８１６）の詳細である。
【図７０】ストレージシェルフルータ、ＲＡＩＤコントローラ／Ｉ／Ｏコントローラまたはストレージブリッジなどの中間デバイスが、仮想フォーマティングを提供するとき、ＷＲＩＴＥ動作のために一般に必要なＲＥＡＤ修正動作を示す。
【図７１】整列単位と、仮想ブロックがデバイスブロックより大きい場合に、整列単位に関する計算フローを示す。
【図７２】仮想ブロックサイズがデバイスブロックサイズより小さい場合に、整列単位に関連するパラメータおよび計算フローを示す。
【図７３】５１２バイトのデバイスブロック長さおよび５２０バイト〜５７６バイトの範囲の仮想ブロック長さに関して、整列単位に関するパラメータを示す表１を示す。
【図７４】仮想ブロックＷＲＩＴＥ動作のために指定された仮想ブロックの連続数を含むＡＵの最小の連続数の最初と最後の仮想ブロックアドレスの計算フローを示す。
【図７５】本発明の一実施形態を表す二重抽象化法を示す。
【図７６】長さ０〜１２０バイトの中間仮想ブロックパディングに関するＡＵに関するパラメータおよび特性を提供する表２を示す。
【図７７】図７６に示される表２に表されるトレードオフを示す。
【図７８】追加の境界ブロックの様子を示す。
【図７９】仮想ブロックサイズがデバイスブロックサイズよりも小さい場合に、ＰＣＩｅ/ＳＡＳ  Ｉ／Ｏのための仮想フォーマッティングの様子を示す。
【発明を実施するための形態】
【００５８】
本発明の一実施形態は、ストレージシェルフの中でディスクドライブを、次にディスクアレイコントローラまたは類似の高性能の大容量ストレージデバイスのコントローラとストレージシェルフを相互接続する高帯域幅通信媒体と相互接続するために、ディスクアレイのストレージシェルフまたは他の大きな個別に制御される大容量ストレージデバイスの中で、単独でまたは組み合わせて利用することができるストレージシェルフルータの集積回路実装である。記載された実施形態はまた、ディスクドライブと１つまたは複数のストレージシェルフルータとの間の冗長な通信リンクを提供するパスコントローラカードを含む。図８Ａ〜図８Ｄを参照して上述したように、ディスクアレイは、ストレージシェルフの中でＦＣ準拠のディスクドライブを現在利用してもよく、各ＦＣ準拠のディスクドライブは、１つまたは２つのＦＣアービトレイテッドループ、またはＦＣ準拠のディスクドライブをディスクアレイコントローラと相互接続する他のＦＣファブリックトポロジ（構成）でＦＣノードとして作用する。対照的に、本発明の一実施形態を部分的に表すストレージシェルフルータは、ストレージシェルフの中でポイントツーポイントシリアル通信媒体によって各ディスクドライブと直接的に接続され、ファイバチャネルアービトレイテッドループなどの１つまたは複数の高帯域幅通信媒体を介してディスクアレイコントローラと相互接続される、中間通信ハブとして機能する。
【００５９】
＜概要＞
図９は、図８Ａ〜図８Ｄに関して利用された説明の規則を用いて、本発明の一実施形態を表すストレージシェルフルータを抽象的に示している。図９において、ディスクアレイコントローラ９０２は、ＬＡＮまたは光ファイバ通信媒体９０４を介して１つまたは複数の遠隔コンピュータシステムに連結される。ディスクアレイコントローラ９０２は、ＦＣアービトレイテッドループ９０８を介してストレージシェルフルータ９０６と相互接続される。ストレージシェルフルータ９０６は、相互接続９１８などの個別のポイントツーポイント相互接続を介して、ストレージシェルフ９１０〜９１７の中で、ディスクドライブのそれぞれと直接的に相互接続される。図９に抽象的に示された実装を図８Ａ〜図８Ｄに示された実装と比較すると、図８Ａ〜図８Ｄに示された実装によって識別された問題点が、ストレージシェルフルータに基づく実装によって対処されることが容易に明白である。第一に、図９に示された実装のＦＣアービトレイテッドループの中の唯一のノード遅延は、１つのＦＣアービトレイテッドループノードとして作用するストレージシェルフルータによって導入される。対照的に、図８Ａに示されているように、各ＦＣ準拠のディスクドライブは、個別のノード遅延を導入し、ＦＣアービトレイテッドループ８１４における累積的なノード遅延は、ＦＣアービトレイテッドループによって相互接続されるＦＣ準拠のディスクドライブの数に比例する。ストレージシェルフルータは、ＦＣポートと、ストレージシェルフルータを個別のディスクドライブに連結する内部シリアル相互接続との間の、きわめてパラレルかつ効率的なデータ転送を容易にするように設計される。したがって、ストレージシェルフルータをＦＣアービトレイテッドループ９０８に相互接続する搭載されたＦＣコントローラによって導入される不可避のノード遅延以外のストレージシェルフルータによって導入される実質的な遅延および累積的な遅延はない。
【００６０】
図９に示された実装において利用されるＦＣアービトレイテッドループ９０８は、２つのノード、ディスクアレイコントローラおよびストレージシェルフルータのみを含む。各ストレージシェルフルータが、８個のディスクドライブをＦＣアービトレイテッドループと相互接続することができると仮定すると、１つのＦＣアービトレイテッドループは、１２５個のストレージシェルフルータをディスクアレイコントローラに相互接続するために用いられることができ、またはＦＣファブリック用に通常保存されるアドレスがストレージシェルフルータによって用いられる場合には、１２６個のストレージシェルフルータを相互接続するために用いられることができ、それにより、１つのＦＣアービトレイテッドループを介して８，０００個以上の個別のディスクドライブをディスクアレイコントローラと相互接続する。上述したように、高可用性が必要でない場合には、１６，０００個以上の個別のディスクドライブが、１つのＦＣアービトレイテッドループを介してディスクアレイコントローラと相互接続されてもよい。対照的に、図８Ｃに示されているように、個別のＦＣ準拠のディスクドライブのそれぞれが、個別のＦＣノードとして機能する場合には、１２５個のディスクドライブのみが１つのＦＣアービトレイテッドループを介してディスクアレイコントローラと相互接続されることができ、またはＦＣファブリック用に通常保存されるアドレスが、ディスクドライブのために用いられる場合には１２６個のディスクドライブが相互接続されることができる。
【００６１】
ディスクドライブは、複数の現在利用可能な内部相互接続技術のいずれかによって、ストレージシェルフルータ９０６に接続される。一実施形態において、ＳＡＴＡ準拠の相互接続は、ＳＡＴＡディスクドライブをストレージシェルフルータと相互接続するために用いられる。ストレージシェルフルータは、ディスクアレイコントローラから受信された各ＦＣＰコマンドを、ストレージシェルフルータが適切なＳＡＴＡディスクドライブに次に伝送する１つまたは複数の等価なＡＴＡインターフェイスコマンドに変換する論理回路を含む。図９に示されるストレージシェルフルータは、１つのＦＣアービトレイテッドループ９０８を介してディスクアレイコントローラと相互接続されるが、以下に記載するように、ストレージシェルフルータは、２つのＦＣアービトレイテッドループまたは他のＦＣファブリックトポロジ（構成）を介してディスクアレイコントローラとさらに一般的に相互接続される。
【００６２】
図１０は、本発明の一実施形態を部分的に表すストレージシェルフルータによって占められるコンピュータおよびディスクアレイの階層的に相互接続されるシステムの中の位置を示している。図１０において、２つのサーバコンピュータ１００１および１００４は、種々のＦＣファブリックトポロジ（構成）のいずれかなどの高帯域幅通信媒体１００８を介して、互いに、またディスクアレイコントローラ１００６と相互接続される。ディスクアレイコントローラ１００６は、２つの個別のＦＣアービトレイテッドループを介してストレージシェルフ１０１０と相互接続される。第１のＦＣアービトレイテッドループ１０１２は、ディスクアレイコントローラ１００６を第１のストレージシェルフルータ１０１４と直接的に相互接続する。第２のＦＣアービトレイテッドループ１０１６は、ディスクアレイコントローラ１００６を第２のストレージシェルフルータ１０１８と直接的に相互接続する。２つのストレージシェルフルータ１０１４および１０１８は、第１のＦＣアービトレイテッドループ１０１２の一部として第１のストレージシェルフルータ１０１４から第２のストレージシェルフルータ１０１８にＦＣフレームを搬送し、第２のＦＣアービトレイテッドループ１０１６の一部として第２のストレージシェルフルータ１０１８と第１のストレージシェルフルータ１０１４との間のＦＣフレームを搬送する、内部ポイントツーポイントＦＣ相互接続１０２０と相互接続される。さらに、内部ＦＣリンク１０２０は、ストレージシェルフ１０１０の中で内部で生成され、内部で消費される内部管理および通信のために用いられるＦＣフレームを搬送してもよい。以下に記載するように、ディスクアレイをストレージシェルフと相互接続する２つのＦＣアービトレイテッドループを「Ｘループ」または「Ｘファブリック」および「Ｙループ」または「Ｙファブリック」と呼び、内部ＦＣ１０２０における内部で生成され、内部で消費される管理ＦＣフレームのエクスチェンジを「Ｓファブリック」と呼ぶことが一般的である。ストレージシェルフ１０１０は、４つのディスクドライブ１０２２〜１０２５および明確に図示されていない１２個のディスクドライブを示す省略記号１０２６によって、図１０に表される１６個のＳＡＴＡディスクドライブを含む。各ストレージシェルフルータ１０１４および１０１８は、シリアルリンク１０２８などのポイントツーポイントシリアルリンクを介して、各ＳＡＴＡディスクドライブと相互接続される。
【００６３】
図１０に示されているように、ディスクアレイコントローラ１００６およびストレージシェルフ１０１０を含むディスクアレイの中の相互通信経路のそれぞれにおいて、少なくとも２倍の冗長性がある。さらに、ストレージシェルフルータにおいて２倍の冗長性がある。任意の１つのリンクまたは１つのストレージシェルフルータが故障した場合には、ディスクアレイコントローラ１００６とストレージシェルフ１０１０内の１６個のＳＡＴＡディスクドライブのそれぞれとの間の完全な接続性を維持するために、残りのリンクおよび残りのストレージシェルフルータが、故障したリンクまたは故障したストレージシェルフルータによって既に担われた作業負荷を担うことができる。ＳＡＴＡディスクドライブのうちの１つまたは複数の故障にもかかわらず、復旧および完全な動作を可能にするために、ディスクアレイコントローラはその上、種々のレベルのＲＡＩＤストレージ技術などの複数の異なる高可用性のデータストレージスキームのいずれかを実装してもよい。ＲＡＩＤ技術は、たとえば、２つ以上のディスクドライブ上に格納されたデータの２つ以上の完全なコピーを個別かつ完全に冗長に復元してもよい。サーバは、ＦＣファブリックなどの通信媒体を介して、本質的な冗長性およびフェイルオーバを備えたディスクアレイコントローラ１００６およびストレージシェルフ１０１０などの１つまたは複数のストレージシェルフを含むディスクアレイと相互通信する。ディスクアレイコントローラは、論理単位（「ＬＵＮ」）および論理ブロックアドレス（「ＬＢＡ」）インターフェイスを提示し、サーバコンピュータ１００２および１００４が、ストレージシェルフにおけるディスクドライブの中のデータの実際の位置を意識することなく、かつ、ディスクアレイコントローラ１００６によって提供されるデータおよび他の機能性および特徴の冗長なコピーを意識することなく、ディスクアレイからファイルおよび他のデータオブジェクトを格納して検索することを可能にする。ディスクアレイコントローラ１００６は次に、ストレージシェルフルータ１０１４および１０１８によって提供されるインターフェイスを介して、ストレージシェルフ１０１０とインターフェイスをとる。ディスクアレイコントローラ１００６は、ＦＣＰプロトコルを介して別個のＦＣ準拠のディスクドライブに見えるものにＦＣエクスチェンジを伝送し、そこからＦＣエクスチェンジを受信する。しかし、ディスクアレイコントローラに対して透過的に、ＳＡＴＡディスクドライブとコマンドおよびデータを交換するために、ディスクシェルフルータ１０１４および１０１８は、ＦＣコマンドをＡＴＡコマンドに変換する。
【００６４】
図１１および図１２は、本発明の一実施形態を表すストレージシェルフルータを用いて実装されるストレージシェルフの構成要素の斜視図を示す。図１１において、２つのストレージシェルフルータ１１０２および１１０４は、ＳＡＴＡディスクドライブ１１０８などの１６個のＳＡＴＡディスクドライブを用いて、パッシブ中央平面１１０６を介してルータカード相互接続上に取り付けられる。各ＳＡＴＡディスクドライブキャリアは、パッシブ中央平面を通って２つのストレージシェルフルータ１１０２および１１０４のそれぞれまで延びる２つの個別のシリアルリンクと、ＳＡＴＡディスクドライブとを相互接続する、ＳＡＴＡディスクドライブおよびパスコントローラカード１１１０と、を含む。通常は、ＳＡＴＡディスクドライブは、外部システムへの１つのシリアル接続のみをサポートする。ストレージシェルフの中で完全に冗長な相互接続を提供するために、パスコントローラカード１１１０が必要とされる。ストレージシェルフ１１００はその上、冗長なファン１１１２および１１１４および冗長な電源１１１６および１１１８を含む。
【００６５】
図１２は、それぞれが２つのパスコントローラカード１１１０および２つのＳＡＴＡディスクドライブを含むデュアルＳＡＴＡディスクドライブキャリアを備えた、図１１に示されるものと類似のストレージシェルフ実装を示す。高可用性用途のために必要とされる２倍の冗長性を提供するために、ディスクドライブの数が増大すると、ストレージシェルフルータを対応して倍増することが必要である。
【００６６】
＜ストレージシェルフ内部トポロジ（構成）＞
図１３Ａ〜図１３Ｃは、本発明の一実施形態を部分的に表すストレージシェルフルータを用いたストレージシェルフの３つの異なる実装を示している。図１３Ａにおいて、１つのストレージシェルフルータ１３０２が、ＦＣアービトレイテッドループ１３２０を介して１６個のＳＡＴＡディスクドライブ１３０４〜１３１９をディスクアレイコントローラと相互接続する。一実施形態において、ストレージシェルフルータは、最大１６個のシリアルリンクを提供し、１６個までのＳＡＴＡディスクドライブの相互接続をサポートすることができる。図１３Ａに示されるストレージシェルフは、１つまたは複数のルータと各ＳＡＴＡディスクドライブとの間に、冗長なストレージシェルフルータも冗長なシリアルリンクも含まないために、あまり高い可用性はない。
【００６７】
対照的に、図１３Ｂに示されるストレージシェルフの実装は、きわめて高い可用性がある。このストレージシェルフにおいて、２つのストレージシェルフルータ１３２２および１３２４は、ポイントツーポイントシリアルリンクを介して、１６個のＳＡＴＡディスクドライブ１３２６〜１３４１のそれぞれに連結される。正常動作中、ストレージシェルフルータ１３２２は、ＳＡＴＡディスクドライブ１３２６〜１３３３の半分をディスクアレイコントローラに相互接続し、ストレージシェルフルータ１３２４は、ＳＡＴＡディスクドライブ１３３４〜１３４１の他方の半分をディスクアレイコントローラに相互接続する。正常動作中に利用される内部ポイントツーポイントシリアルリンクが、シリアルリンク１３４２などのように図１３Ｂにおいて太線で示されており、「一次リンク」と呼ばれる。内部シリアルリンク１３４４などの正常動作中に用いられない内部シリアルリンクは、「二次リンク」と呼ばれる。一次リンクが、動作中に故障した場合には、故障した一次リンクが接続されるストレージシェルフルータの交換をはじめとする故障した一次リンクの修理または交換を可能にするために、故障した一次リンクと、ストレージシェルフルータに接続される他のすべての一次リンクは、故障した一次リンクが他のストレージシェルフルータに接続されるストレージシェルフルータからフェイルオーバされてもよい。上述のように、２つのストレージシェルフルータのそれぞれは、ディスクアレイコントローラとストレージシェルフを相互接続する２つのＦＣアービトレイテッドループのうちの一方のためのＦＣノードとして機能する。一方のＦＣアービトレイテッドループが故障する場合には、故障したＦＣアービトレイテッドループを通常通過するデータ転送は、残りの動作可能なＦＣアービトレイテッドループにフェイルオーバされる。同様に、ストレージシェルフルータが故障した場合には、他のストレージシェルフルータが、ストレージシェルフの完全な動作制御を担うことができる。別の実施形態において、一次パス故障が、全体のストレージシェルフルータをフェイルオーバすることなく、個別にフェイルオーバされてもよい。ある実施形態および状況において、一次パスのフェイルオーバは、ストレージシェルフルータの中で行われてもよく、他の実施形態および状況において、一次パスのフェイルオーバは、一次パスを第２のストレージシェルフルータにフェイルオーバする必要があってもよい。
【００６８】
図１３Ｃは、３２ＡＴＡディスク高可用性ストレージシェルフの実装を示している。図１３Ｃに示されているように、３２ＡＴＡディスクストレージシェルフは、４つのストレージシェルフルータ１３５０、１３５２、１３５４および１３５６を含む。各ストレージシェルフルータは、正常動作中、ストレージシェルフをディスクアレイコントローラと相互接続する２つのＦＣアービトレイテッドループと８個のＳＡＴＡディスクを相互接続する。各ストレージシェルフルータは、二次リンクを介して８個のさらなるＳＡＴＡディスクドライブに相互接続され、フェイルオーバが必要である場合には、ストレージシェルフルータが、合わせて１６個のＳＡＴＡディスクドライブを２つのＦＣアービトレイテッドループと相互接続することができる。４ストレージシェルフルータ設定において、ストレージシェルフルータ１３５０が、１つのＦＣアービトレイテッドループに対して４つすべてのストレージシェルフルータ用のＦＣノードとして作用し、ストレージシェルフルータ１３５６が、第２のＦＣアービトレイテッドループに対して４つすべてのストレージシェルフルータ用のＦＣノードとして作用することに留意されたい。図１３Ｃに示されているように、ストレージシェルフルータ１３５０がＦＣノードとして作用する第１のＦＣアービトレイテッドループは、ＸループまたはＸファブリックと見なされ、ストレージシェルフルータ１３５６がＦＣノードとして作用する他方のＦＣアービトレイテッドループは、ＹファブリックまたはＹループと見なされる。ストレージシェルフの中で、ディスクアレイコントローラからＸループを介してＳＡＴＡディスクに伝送されるＦＣフレームは最初に、ストレージシェルフルータ１３５０によって受信される。ＦＣフレームは、正常動作の場合には、一次リンクを介してストレージシェルフルータ１３５０と相互接続されるＳＡＴＡディスクに向けられるか、または内部ＦＣリンク１３５８を介してストレージシェルフルータ１３５２に向けられかのいずれかであり、次にＦＣフレームを一次リンクを介してＳＡＴＡディスクに伝送される１つまたは複数のＡＴＡコマンドに変換するか、またはＦＣフレームをストレージシェルフルータ１３５４の下流に転送する。応答ＦＣフレームが、Ｘファブリックを介してストレージシェルフルータ１３５６によって伝送される場合には、内部ＦＣリンク１３６０、１３６２および１３５８を通り、ストレージシェルフルータ１３５４および１３５２を介して、そこから応答フレームが外部Ｘファブリックに伝送されることができるストレージシェルフルータ１３５０に転送されなければならない。記載された実施形態において、高可用性ストレージシェルフは、少なくとも２つのストレージシェルフルータを含む必要があり、ストレージシェルフの中の８個のＳＡＴＡディスクの各集合に関してストレージシェルフルータを含む必要がある。
【００６９】
＜パスコントローラカードの概要＞
上述のように、２つの構成要素が、ＳＡＴＡディスクまたは他の廉価なディスクドライブを利用し、ＦＣアービトレイテッドループにおける唯一のスロットまたはノードを用いて、ＦＣアービトレイテッドループまたは他の高帯域幅通信媒体と相互接続されることができる高可用性ストレージシェルフの構成を容易にする。一方の構成要素は、ストレージシェルフルータであり、他方の構成要素は、２つのストレージシェルフルータへのＡＴＡドライブの冗長な相互接続を提供するパスコントローラカードである。
【００７０】
図１４Ａ〜図１４Ｂは、ＡＴＡディスクドライブを２つのストレージシェルフルータと相互接続するために適切なパス制御カードの２つの実装を示す。図１４Ａに示される実装は、パラレルコネクタをパラレルＡＴＡディスクドライブに提供し、図１４Ｂに示される実装は、シリアル接続をＳＡＴＡディスクドライブに提供する。上述のように、ＳＡＴＡディスクドライブは、より高いデータ転送速度を提供するため、図１４Ｂに示される実装が好ましく、この実装について、以下で説明する。
【００７１】
パスコントローラカードは、第１のストレージシェルフルータへの一次シリアルリンク１４０４および管理リンク１４０６の外部接続、および第２のストレージシェルフルータへの二次シリアルリンク１４０８および第２の管理リンク１４１０の外部接続のために、ＳＣＡ−２コネクタ１４０２を提供する。一次リンクおよび二次リンクは、シリアルリンク１４１４を介してＳＡＴＡディスクドライブ１４１６に相互接続される２：１マルチプレクサによって多重化される。管理リンク１４０６および１４１０は、ディスクドライブ環境の温度を監視し、ディスクドライブキャリア内のファンの動作を制御し、ディスクドライブエンクロージャの外部から見ることができる種々の発光ダイオード（「ＬＥＤ」）信号の光を起動するルーチンなどの管理サービスルーチンを実行するマイクロコントローラ１４１８に入力される。本質的に、正常動作の下で、ＡＴＡコマンドおよびデータは、一次リンクを介してパスコントローラカードによって受信され、２：１マルチプレクサを介して、ＳＡＴＡディスクドライブ１４１６に入力されるシリアルリンク１４１４に転送される。一次リンクを介してパスコントローラカードに接続されるデフォルトのストレージシェルフルータの動作を停止するフェイルオーバが、ストレージシェルフの中で生じる場合には、第２のストレージシェルフルータが、二次リンクを介してＡＴＡコマンドおよびデータの転送を担い、次に、２：１マルチプレクサを通って、ＳＡＴＡディスクドライブ１４１６に直接的に入力されるシリアルリンク１４１４に渡される。
【００７２】
パスコントローラカードが、２つの個別のストレージシェルフルータへの冗長な相互接続を提供し、高可用性ストレージシェルフにおいて必要とされる２倍の冗長性を提供するためにこのように必要とされる。ストレージシェルフルータは、異なるタイプの通信媒体間の相互接続と、異なるタイプの通信媒体間のコマンドおよびデータパケットの変換を提供する。さらに、ストレージシェルフルータは、内部構成要素の故障の自動検出のためのフェイルオーバ論理回路を含み、適切なフェイルオーバの実行により、冗長なリンクおよび故障していない構成要素を用いたディスクアレイコントローラとディスクドライブの完全な相互接続を復元しようとする。
【００７３】
＜ストレージシェルフルータの概要＞
図１５は、ストレージシェルフルータの主要な機能構成要素を示す高位ブロック図である。ストレージシェルフルータ１５００は、２つのＦＣポート１５０２および１５０４、ルーティング層１５０６、ＦＣＰ層１５０８、グローバル共有メモリスイッチ１５１０、１６個のＳＡＴＡポート１５１２〜１５１８、ＣＰＵコンプレックス１５２０および外部フラッシュメモリ１５１４を含む。ストレージシェルフの中で相互接続するストレージシェルフルータの集合の中のストレージシェルフルータの論理位置に応じて、ＦＣポートの一方または両方が、外部ＦＣアービトレイテッドループまたは他のＦＣファブリックに接続されてもよく、ＦＣポートの一方または両方が、内部のポイントツーポイントＦＣリンクに接続されてもよい。一般に、ＦＣポートの一方は、ストレージシェルフルータの集合の中のストレージシェルフルータの論理位置および物理位置に関係なく、第１のＦＣアービトレイテッドループと直接的または間接的にストレージシェルフルータをリンクすると考えられてもよく、他方のＦＣポートは、第２のＦＣアービトレイテッドループとストレージシェルフルータとを直接的または間接的に相互接続すると考えられることができる。
【００７４】
ルーティング層１５０６は、以下に説明されるメモリに格納される複数のルーティングテーブルと、両方のＦＣポートから入ってくるＦＣフレームを転送する場所を決定するルーティング論理回路と、を含む。ＦＣＰ層１５０８は、ＦＣＰエクスチェンジを共に構成するＦＣフレームの交換を容易にするために、メモリにおけるＦＣエクスチェンジコンテクストを設定するために、ＦＣフレームおよび中間レベルプロトコルメッセージの一時的格納のための種々の待ち行列と、種々のタイプの入ってくるＦＣフレームと出て行くＦＣフレームを処理するための制御論理回路と、ＣＰＵコンプレックスで実行中のファームウェアルーチンがＦＣＰ＿ＣＭＮＤフレームを処理することを可能にするＣＰＵコンプレックス１５１２へのインターフェイスと、を含む。
【００７５】
グローバル共有メモリスイッチ１５１０は、ＦＣＰ層待ち行列とＳＡＴＡポート１５１２〜１５１８との間でデータを通過させるためのきわめて高速の時分割データ交換機器である。グローバル共有メモリスイッチ（「ＧＳＭＳ」）１５１０は、仮想待ち行列の割り当てが、ＦＣＰ層と特定のＳＡＴＡポートとの間にデータの転送を容易にすることを可能にするために、仮想待ち行列機構を利用する。ＧＳＭＳは、本質的にきわめて高い帯域幅で、高速の双方向マルチプレクサであり、ＦＣＰ層と１６個のＳＡＴＡポートとの間のきわめてパラレルなデータ流れを促進すると同時に、ＦＣＰ層とＳＡＴＡポートとの間の同期境界の横断を促進するための同期機構を含むブリッジ状のデバイスである。
【００７６】
ＣＰＵコンプレックス１５１２は、種々のファームウェアルーチンを実行する。種々のファームウェアルーチンは、ＦＣエクスチェンジ用のコンテクスト情報を初期化して維持し、ＦＣＰコマンドをＡＴＡの等価コマンドに変換するために、ＦＣＰコマンドを処理し、ＳＡＴＡディスクドライブおよびストレージシェルフルータの内部構成要素の動作も監視し、問題点が検出されるときには、精巧なフェイルオーバ戦略を実行する。フェイルオーバ戦略を実行するために、ＣＰＵコンプレックスは、ストレージシェルフルータの他の論理構成要素と相互接続される。外部フラッシュメモリ１５１４は、設定パラメータおよびファームウェアルーチンを格納する。ストレージシェルフルータは、２つのＦＣポート１５０２および１５０４、１６個のＳＡＴＡポート１５１２〜１５１８、１６個のシリアル管理リンク１５２０、Ｉ２Ｃ  ＢＵＳ１５２２およびコンソール１５２４へのリンクを介して、外部構成要素に相互接続されることに留意されたい。
【００７７】
＜ストレージシェルフインターフェイス＞
上述のように、ストレージシェルフルータに基づくストレージシェルフ実装は、多くの方式で現在のディスクドライブごとのＦＣノードの実装より大きな自由度を提供する。ストレージシェルフルータは、接続されるディスクアレイコントローラに対して多くの異なる論理インターフェイスのいずれかを提供することができる。
【００７８】
図１６Ａ〜図１６Ｇは、本発明の一実施形態を部分的に表す１つまたは複数のストレージシェルフルータを組み込んだ高可用性ストレージシェルフによって提供される、複数の異なる論理インターフェイスを示す。図１６Ａは、図８Ａ〜図８Ｄを参照して上述したように、ストレージシェルフの現在のＦＣ準拠のディスクドライブ実装によって提供されるインターフェイスを示す。図１６Ａは、図１６Ａ〜図１６Ｇを通じて用いられる抽象的な説明の規則を用いる。図１６Ａにおいて、各ディスクドライブ１６０２〜１６０５は、０〜１９の番号の付いた一連のデータブロックとして論理的に表されている。当然のことながら、実際のディスクドライブは、数十万〜数百万の論理ブロックを含むが、種々の異なるタイプのインターフェイスを示すためには、図１６Ａには各ディスクに関して示される２０個の論理ブロックで十分である。図１６Ａにおいて、各個別のディスクドライブ１６０２〜１６０５は、ＦＣアービトレイテッドループにおける別個のノードであり、したがって、各ディスクドライブは、「ＡＬ＿ＰＡ１」、「ＡＬ＿ＰＡ２」、「ＡＬ＿ＰＡ３」および「ＡＬ＿ＰＡ４」としてそれぞれ図１６Ａに表される個別のＦＣノードアドレスに関連している。しかし、図８Ａ〜図８Ｄを参照して説明したＦＣアービトレイテッドループなどの現在のＦＣアービトレイテッドループディスクアレイ実装とは異なり、図９に示されているように、各ノードがポイントツーポイント接続を介して、ストレージシェルフルータの相補ＳＡＴＡポートと相互接続されるため、ノードに関連する累積的なノード遅延はないことに留意されたい。したがって、ディスクアレイコントローラは、ディスクドライブに関連するＦＣアドレスを介して特定のディスクドライブの中の特定の論理ブロックにアクセスしてもよい。所与のディスクドライブが、一定の場合において、論理ブロックアドレス空間が、それぞれが、異なるＬＵＮに関連する個別の論理ブロックアドレス空間に区分けされる論理単位（「ＬＵＮ」）インターフェイスを提供してもよい。しかし、現在の説明のために、複雑なレベルには対応する必要はない。
【００７９】
図１６Ｂは、ストレージシェルフルータを介してＦＣアービトレイテッドループに相互接続される図１６Ａに示される４つのディスクドライブを含む、ストレージシェルフ用の第１の可能なインターフェイスを示す。この第１のインターフェイスにおいて、各ディスクドライブは、個別のＦＣノードアドレスに依然として関連している。各ディスクドライブは、１つの論理ブロックアドレス空間を含む１つの論理単位であると見なされる。このインターフェイスは、以下では、本発明の一実施形態を部分的に表す１つまたは複数のストレージシェルフルータを含むストレージシェルフの「トランスペアレントモード」動作と呼ばれる。
【００８０】
ストレージシェルフによって提供される第２の可能なインターフェイスが、図１６Ｃに示される。この場合には、４つのディスクドライブのすべてが、１つのＦＣアービトレイテッドループノードアドレス「ＡＬ＿ＰＡ１」に関連している。各ディスクドライブは、異なる論理単位であると見なされ、ディスクドライブ１６０２は、論理単位０と見なされ、ディスクドライブ１６０３は、論理単位１と見なされ、ディスクドライブ１６０４は、論理単位２と見なされ、ディスクドライブ１６０５は、論理単位３と見なされる。したがって、ディスクアレイコントローラは、１つのＦＣノードアドレス、論理単位番号および論理単位内の論理ブロックアドレスを介して、ストレージシェルフにおける４つのディスクドライブのいずれかの中の論理ブロックにアクセスすることができる。
【００８１】
仮説的ストレージシェルフの中の４つのディスクドライブに対する別のインターフェイスが、図１６Ｄに示される。この場合には、４つのディスクドライブのすべてが、１つの論理単位内に含まれると見なされる。４つのディスクデバイスの中の各論理ブロックには、一意の論理ブロックアドレスが割り当てられる。したがって、ディスクドライブ１６０２の中の論理ブロック０〜１９は、論理ブロックアドレス０〜１９に関連し続け、ディスクドライブ１６０３の中の論理ブロック０〜１９はここで、論理ブロックアドレス２０〜３９に関連している。このインターフェイスは、以下では、図１６Ｃに示される純粋なＬＵＮに基づくインターフェイスとは対照的に、純粋な論理ブロックアドレスインターフェイスと呼ばれる。
【００８２】
図１６Ｅは、４つのディスクドライブを含む仮説的ストレージシェルフによって提供されるさらに別の可能な論理インターフェイスを示す。この場合には、２つのディスクドライブ１６０２および１６０３の第１の集合が第１のＦＣノードアドレス「ＡＬ＿ＰＡ１」に関連し、２つのディスクドライブ１６０２および１６０３はそれぞれ、２つの異なるＬＵＮ番号、すなわちＬＵＮ０およびＬＵＮ１に関連している。同様に、ディスクドライブ１６０４および１６０５の第２の対が共に、第２のＦＣノードアドレス「ＡＬ＿ＰＡ２」に関連し、ディスクドライブの第２の対のそれぞれが、異なるＬＵＮ番号に関連している。
【００８３】
図１６Ｆは、さらに別の可能なインターフェイスを示す。この場合には、第１の２つのディスクドライブ１６０２および１６０３は、第１のＦＣノードアドレスに関連し、第２の２つのディスクドライブ１６０４および１６０５は、第２のＦＣノードアドレスに関連する。しかし、この場合には、各グループにおける２つのディスクドライブは両方とも、１つの論理単位に属すると見なされ、２つのディスクドライブの中の論理ブロックは、１つの論理ブロックアドレス空間を構成する論理ブロックアドレスに関連している。
【００８４】
最後のインターフェイスは、図１６Ｇに示される。この場合には、前の２つのインターフェイスの場合と同じように、１つのＦＣノードアドレスに関連するディスクドライブの各対が、１つの論理ブロックアドレス空間で１つのＬＵＮを構成すると見なされる。しかし、このインターフェイスで、論理ブロックアドレスは、２つのディスクドライブの間で交互となる。たとえば、ディスクドライブ１６０２および１６０３の対の場合には、論理ブロックアドレス０は、第１の論理ブロック１６１０および第１のディスクドライブ１６０２に関連し、論理ブロックアドレス１は、第２のディスクドライブ１６０３における第１のブロック１６１２に関連する。
【００８５】
図１６Ａ〜図１６Ｇは、本発明の一実施形態を部分的に表すストレージシェルフルータによってディスクアレイコントローラに提供される多くの可能なインターフェイスの一部を示すことだけを意図している。アルゴリズムによって記載されることができるディスクドライブおよびディスクドライブの中の物理ブロックへのＬＵＮおよび論理ブロックアドレスのほとんどのマッピングは、ストレージシェルフの中のストレージシェルフルータによって実装されることができる。一般に、これらの多くの異なるタイプの論理インターフェイスは、以下の４つの一般的なタイプのインターフェイスに区分けされてもよい。（１）各ディスクドライブが、個別かつ局所的に一意のＦＣノードアドレスに関連するトランスペアレントモード、（２）各ディスクドライブが、異なるＬＵＮ番号に関連し、すべてのディスクドライブが、１つのＦＣノードアドレスを介してアクセスされる純粋ＬＵＮモード、（３）すべてのディスクドライブが、１つのＦＣノードアドレスおよび１つの論理単位番号に関連する純粋論理ブロックアドレシングモード、（４）ＬＵＮおよび論理ブロックアドレス空間の区分けの種々の異なる組み合わせを利用する混合ＬＵＮおよび論理ブロックアドレシングモードである。
【００８６】
＜ストレージシェルフルータ実装＞
図１７Ａは、本発明の一実施形態を表すストレージシェルフルータの中のコマンドおよびデータの流れの高位の概要である。ストレージシェルフルータは、１つまたは複数のＦＣアービトレイテッドループまたは他のＦＣファブリック１７０２〜１７０３を介して、データおよびコマンドのシリアルストリームを他のストレージシェルフルータおよびディスクアレイコントローラと交換する。データのシリアルストリームは、より低位のＦＣプロトコルレベルで処理される場合には、ＦＣポート層１７０４に入る。データストリームから抽出されたＦＣフレームは、先入れ先出しバッファ（「ＦＩＦＯ」）１７０６〜１７０７に入力される。ＦＣフレームの最初の部分は利用可能であるとき、ＦＣフレームの後半部分がＦＩＦＯに入力されたとしても、ルーティング層１７０８およびＦＣＰ層１７１０によって処理される。したがって、ＦＣフレームは、バッファで完全にアセンブルして、内部メモリバッファから内部メモリバッファにコピーされる必要なく、著しい時間および計算効率で処理される。
【００８７】
ルーティング層１７０８は、ＦＣフレームヘッダから、ＦＣフレームがストレージルータまたは遠隔ストレージルータ、またはＦＣアービトレイテッドループまたは他のＦＣファブリックによってストレージルータと相互接続される他のエンティティに向けられるかどうかを決定する役割を担っている。遠隔エンティティに向けられるそれらのフレームは、ルーティング層によって、ＦＣアービトレイテッドループまたは他のＦＣファブリックを介する遠隔エンティティへの伝送のために、ＦＣポート層の中のＦＩＦＯ１７１２〜１７１３に出力されるように向けられる。状態機械がストレージシェルフルータの中のそれらの配置を制御する場合には、ストレージルータに向けられるフレームは、ルーティング層によってＦＣＰ層に向けられる。
【００８８】
現在アクティブであるＦＣエクスチェンジに関連し、コンテクストがストレージシェルフルータによって確立されたＦＣＰ−ＤＡＴＡフレームは、きわめて能率的かつ効率的な態様で処理される。これらのフレームからのデータは、ＦＣＰ層によってＧＳＭＳ１７１８の中の仮想待ち行列１７１４〜１７１６に向けられ、そこからデータがＳＡＴＡポート層１７２２の中の入力バッファ１７２０に転送される。ＳＡＴＡポート層から、データは、多くのＳＡＴＡリンク１７２４の１つを介して、ストレージシェルフルータと相互接続される複数のＳＡＴＡディスクドライブ１７２６の１つにＡＴＡパケットで伝送される。
【００８９】
ＦＣＰ−ＣＭＮＤフレームは、異なる方式でＦＣＰ層によって処理される。これらのフレームは、ＦＣＰ層によって、ＦＣＰ層とストレージシェルフルータの中のＣＰＵとの間で共有されるメモリ１７２８に転送される。ＣＰＵは、その中に含まれるコマンドを処理するために、フレームにアクセスする。たとえば、入ってくるＷＲＩＴＥコマンドが受信されると、ファームウェアルーチンの制御の下で、ストレージシェルフルータのＣＰＵは、コマンドが向けられてＷＲＩＴＥ動作のために、共有メモリに格納されるコンテクストを確立するＳＡＴＡドライブを決定する必要がある。ＣＰＵは、ＳＡＴＡドライブがデータを受信して、ＦＣＰ−ＸＦＥＲ−ＲＤＹフレームの伝送を一般にディスクアレイコントローラであるイニシエータに戻すように向ける準備をする必要がある。ＣＰＵによって準備され、共有メモリに格納されるコンテクストにより、ＦＣＰ層が、ＣＰＵを介在することなく、次に入ってくるＦＣＰ−ＤＡＴＡメッセージを処理することを可能にし、ＷＲＩＴＥ動作の能率的な実行を可能にする。
【００９０】
ストレージシェルフルータの中の種々の論理層は一般に、対称に逆方向に機能する。ＡＴＡコマンドに対する応答は、ＳＡＴＡリンクを介してＳＡＴＡディスクドライブからＳＡＴＡポート層１７２２によって受信される。ＳＡＴＡポート層は次に、適切な信号およびメッセージを生成し、ファームウェアの制御下で、ＣＰＵまたはＦＣＰ層が、適切な行為および応答を実行することを可能にする。ＲＥＡＤコマンドに応じて、ＳＡＴＡディスクから遠隔エンティティにデータが転送されるとき、ＣＰＵは、ＦＣＰ層による処理のために、共有メモリに格納される適切な待ち行列エントリを生成する。ＦＣＰ層内の状態機械が、共有メモリからＦＣフレームヘッダテンプレートを獲得し、仮想待ち行列１７３２〜１７３３を介してＳＡＴＡポート層における出力バッファ１７３０からのデータ転送のために配置し、ＦＣフレームヘッダを準備し、ＳＡＴＡポート層から受信されたＦＣフレームヘッダおよびデータの転送を調節して、一般にディスクアレイコントローラである要求中の遠隔エンティティへの伝送のために、ＦＣポート層のＦＩＦＯ１７１２および１７１３に出力する。
【００９１】
図１７Ａは、ストレージシェルフルータの中のデータおよび制御の流れの簡素化した概要を提供することを意図している。ストレージシェルフルータの内部構成要素を正確に表現することを意図しているわけではなく、ＦＣＰ−ＣＭＮＤフレームおよびＦＣＰ−ＤＡＴＡフレームの受信および処理に対して、論理層の間の相互関係を示すことを意図している。たとえば、複数の仮想待ち行列は、ＧＳＭＳ層の中に図１７Ａで示される。しかし、仮想待ち行列は一般に、静的エンティティではなく、必要に応じて、ストレージシェルフルータの現在の状態に基づいて動的に割り当てられる。図１７Ａは、１つのＳＡＴＡシリアル接続１７２４およびＳＡＴＡディスクドライブ１７２６のみを示しているが、上述のように、各ストレージルータは、一実施形態において、１６個の異なるＳＡＴＡディスクドライブに接続されてもよい。
【００９２】
図１７Ｂ〜図１７Ｆは、本発明の一実施形態を表すストレージシェルフルータによるデータおよび制御情報の流れについてさらなる詳細を提供する。図１７Ｂ〜図１７Ｆに記載するとき、簡略化するため、同一の構成要素の種々の対の両方の構成要素を特に参照するわけではない。図面は、構成要素の完全に例示するリストではなく、データおよび制御情報がストレージシェルフルータの種々の構成要素によってどのように移動するかを示すことを意図している。さらに、種々の構成要素の数は、ストレージシェルフルータの種々の異なる実装に応じて、変化してもよい。図１７Ｂは、ストレージシェルフルータの中のＦＣＰ−ＤＡＴＡフレームの最初の流れを示す。ＦＣＰ−ＤＡＴＡフレームは、第一にＦＣポート１７３６によって受信され、入力ＦＩＦＯ１７３７に書き込まれ、ＦＣＰ−ＤＡＴＡフレームの残りが依然として入力ＦＩＦＯに書き込まれている間であっても、十分なヘッダ情報が入力ＦＩＦＯにおいて利用可能になるとすぐに、そこからルータ論理回路１７３８による処理が開始されてもよい。ＦＣポートが、ルータ論理回路への新たなフレーム到着の信号を発し、ルータ論理回路によるフレームの処理開始を可能にする。ルータ論理回路１７３８は、ルーティングテーブル１７３９を利用して、フレームがストレージシェルフルータに向けられているかどうか、またはフレームが遠隔エンティティに向けられているかどうかを決定する。ＦＣＰ−ＤＡＴＡフレームが、遠隔エンティティに向けられている場合には、遠隔エンティティへの伝送のために、フレームは、ルータ論理回路によってＦＣポートに向けられる。ルータはまた、コンテクスト論理回路１７４０とインターフェイスをとり、コンテクストが、ＦＣＰ−ＤＡＴＡフレームが属するＦＣエクスチェンジのためにＣＰＵによって共有メモリにおいて作成されて格納されているかどうかを決定する。フレーム用のコンテクストを見つけることができる場合には、ルータ論理回路は、フレームをＦＣＰインバウンドシーケンスマネジャ（「ＦＩＳＭ」）状態機械１７４１に向ける。コンテクストが見つからない場合には、フレームは、共有メモリに向けられ、そこから続いて、ファームウェア制御の下で、ＣＰＵによって誤って受信されたフレームとして抽出されて処理される。
【００９３】
ＦＩＳＭ１７４１は、ＦＣＰデータムーバ論理モジュール（「ＦＤＭ」）１７４２からＧＳＭＳチャネルを要求し、ＦＣＰデータムーバ論理モジュール１７４２は次に、ＧＳＭ１７４４の中の仮想待ち行列（「ＶＱ」）１７４３にアクセスして、ＦＩＳＭを介してコンテクスト論理回路からＶＱを特徴付けるパラメータを受信する。ＦＤＭは次に、フレーム内に含まれるデータをＶＱに書き込み、そこからＳＡＴＡディスクドライブへの伝送のために、ＦＤＭを用いてＶＱへのアクセスを共有するＳＡＴＡポートによってそのデータが引き出される。一旦、データがＶＱに書き込まれると、ＦＤＭは、データが転送されたことをコンテクストマネジャに信号発信し、コンテクストマネジャを次に、終了待ち行列マネジャ（「ＣＱＭ」）１７４５が共有メモリ１７４７内の待ち行列１７４６を終了するために、終了メッセージ（「ＣＭＳＧ」）の待ち行列に入れることを要求する。ＣＱＭは次に、ＣＰＵデータムーバ（「ＣＰＵＤＭ」）１７４８がＣＭＳＧを共有メモリに書き込むことを要求する。
【００９４】
図１７Ｃは、ストレージシェルフルータの中のＦＣ−ＣＭＮＤフレームおよびエラーに関連するフレームの流れを示す。上述のように、フレームは、ＦＣポート１７３６によって受信され、ルーティングテーブル１７３９を参照して、ルータ論理回路１７３８によって、ストレージシェルフルータの中の種々のターゲット構成要素に向けられる。ＦＣ−ＣＭＮＤフレームおよびエラーで受信されたＦＣフレームは、ＣＰＵによる抽出および処理のために、共有メモリ１７４７に経路指定される。ルーティング論理回路１７３８は、フレームバッファ待ち行列マネジャ（「ＦＢＱＭ」）１７４６用の要求を発行して、フレームを共有メモリ１７４７に書き込む。ＦＢＱＭは、ＣＰＵＤＭ１７４８から共有メモリ１７５０に格納されたバッファポインタを受信し、フレームを共有メモリ１７４７内のフレームバッファ１７４９に書き込む。最後に、ルータは、ＣＱＭ１７４５にＣＭＳＧをＣＱ１７４６に書き込むように要求する。ＣＰＵは最終的には、フレームバッファ１７４９に格納されたフレームにアクセスするために、ＣＭＳＧ中に含まれる情報を用いて、ＣＭＳＧを処理する。
【００９５】
図１７Ｄは、１つのＦＣポートから別のＦＣポートへのＦＣフレームの流れを示す。ルータ論理回路１７３６が、第１のＦＣポート１７３６の中の入力ＦＩＦＯ１７３７を介して受信されたフレームがストレージルータに向けられないが、代わりに、遠隔エンティティに向けられると決定する場合には、ルータ論理回路は、フレームを第２のＦＣポート１７５２内の出力ＦＩＦＯ１７５１に書き込み、フレームを遠隔エンティティに伝送する。
【００９６】
図１７Ｅは、ストレージシェルフルータ内のＣＰＵからＦＣアービトレイテッドループまたは他のＦＣファブリックへのデータおよび制御情報の流れを示す。ＣＰＵは、ファームウェア制御の下で、共有メモリ１７４７の中に共有メモリ待ち行列ＳＲＱの中のエントリを格納し、ＳＲＱに関連するＳＲＱプロデューサインデックスを更新して、ＣＰＵがＦＣアービトレイテッドループまたは他のＦＣファブリックへの伝送のために作成したフレームを記述するＳＲＱエントリの存在（「ＳＲＥ」）を表す。ＳＲＱマネジャモジュール（「ＳＲＱＭ」）１７５５は、ＳＲＱプロデューサインデックスの更新を検出し、ＣＰＵＤＭ１７４８を介して共有メモリ１７４７から次のＳＲＥをフェッチする。ＳＲＱＭは、フェッチされたＳＲＥをＳＲＱアービトレーションモジュール（「ＳＲＱ＿ＡＲＢ」）１７５６に渡し、総当たりスキームなどの仲裁スキームを実装して、複数のＣＰＵによって生成され、複数のＳＲＱに格納されたＳＲＥの処理を確実にする。ＳＲＱ＿ＡＲＢは、そこから次のＳＲＥを受信するために、ＳＲＱＭを選択し、ＳＲＥをＦＣＰアウトバウンドシーケンスマネジャ（「ＦＯＳＭ」）状態機械ｌ７５７に渡す。ＦＯＳＭは、ＳＲＥを処理して、ＣＰＵＤＭ１７４８を介して共有メモリ１７４７からＦＣヘッダテンプレートおよびフレームペイロードをフェッチする。ＦＯＳＭは、共有メモリからＣＰＵＤＭを介してＦＣヘッダテンプレートおよびフレームペイロードを用いてＦＣフレームを構成し、ＦＣポート１７３６における出力ＦＩＦＯ１７５８にそれを書き込み、そこからＦＣアービトレイテッドループまたは他のＦＣファブリックに伝送される。フレームがＦＣポートに転送されたとき、ＦＯＳＭは、ＣＭＳＧを共有メモリに書き込むように、ＣＱＭ１７４５を向ける。
【００９７】
図１７Ｆは、ＧＳＭＳおよび共有メモリからＦＣアービトレイテッドループまたは他のＦＣファブリックへのデータおよび制御情報の流れを示す。このプロセスにおけるステップの多くは、図１７Ｅを参照して記載したものと類似であり、簡略化するため、再び記載しない。一般に、ＦＣフレームヘッダの中に格納されたＦＣＰ−ＤＡＴＡフレームの制御部分は、図１７Ｅを参照して記載した任意の他のタイプのフレームの生成と類似の方式で生成される。しかし、ＦＣＰ−ＤＡＴＡフレームの場合には、プロセスは、ＳＡＴＡポートからＧＳＭＳを介して得られたデータを制御情報と組み合わせるために、段階的に行われる必要がある。ＦＯＳＭ１７５７がＦＣＰ−ＤＡＴＡフレームを記述するＳＲＥを受信すると、ＦＯＳＭは、ＦＣＰ−ＤＡＴＡフレームヘッダを構成し、ＧＳＭＳチャネルを介してＦＤＭ１７４２を通ってフレームに組み込まれるデータを要求し、次に、ＧＳＭＳ１７４４の中のＶＱ１７５９を介してデータを得なければならない。一旦、データおよび制御情報が、ＦＯＳＭによってＦＣＰ−ＤＡＴＡフレームに組み込まれると、前述のように、フレームは次に、ＦＣポートに渡され、ＣＭＳＧメッセージが、ＣＱへの待ち行列に入れられる。
【００９８】
図１８は、本発明の一実施形態を表すストレージシェルフルータの論理構成要素のさらに詳細なブロック図を示す。論理構成要素は、図１６および図１７に関して上述した２つのＦＣポート１８０２および１８０４、ルーティング層１８０６、ＦＣＰ層１８０８、ＧＳＭＳ１８１０、ＳＡＴＡポート層１８１２、２つのＣＰＵ１８１４および１８１６を含むＣＰＵコンプレックスを含む。太線の矢印１８１８などの太線の矢印で図１８に示される通信経路およびリンクは、ストレージシェルフルータの中の性能臨界通信経路を表す。性能臨界通信経路は、ＦＣフレームの受信および出力、ＳＡＴＡポートによってＳＡＴＡディスクドライブへの伝送のための適切なＡＴＡコマンドを生成するための受信フレームの処理、受信されたＦＣＰ−ＤＡＴＡフレームからのデータのＧＳＭＳを通ったＳＡＴＡポートへの送り込み、ＦＣポートを通ってＦＣアービトレイテッドループまたは他のＦＣファブリックへの伝送するためのＦＣフレームの生成、ＧＳＭＳを通ってＳＡＴＡポートから得られたデータの出て行くＦＣＰ−ＤＡＴＡフレームへの組み込みに関連する経路である。非性能臨界通信経路は、ストレージシェルフルータの種々の論理構成要素と直接的にＣＰＵ１８１４および１８１６を相互接続する種々のプログラムされたＩ／Ｏインターフェイスを含む。たとえば、中心仲裁スイッチ１８２０とＧＳＭＳ  ＳＬポート層との間にはＰＩＯインターフェイスがあり、内部ＢＵＳブリッジ１８２２は次に、１７個のＵＡＲＴポート１８２４、Ｉ２Ｃ  ＢＵＳインターフェイス１８２６、汎用ＰＩＯインターフェイス（「ＧＰＩＯ」）１８２８、タイマ構成要素１８３０および複数の割り込みコントローラ１８３２と相互接続される。これらのＰＩＯインターフェイスは、太線でない両方向矢印１８３４〜１８３６として図１８に示される。さらに、ＣＰＵ１８１４および１８１６とフラッシュメモリコントローラ１８４０との間にＰＩＯインターフェイス１８３８がある。フラッシュメモリコントローラ１８４０は次に、外部フラッシュメモリ１８４２に対してインターフェイスをとる。外部フラッシュメモリは、特殊な設定管理情報およびファームウェア画像を格納するために用いられる。ＣＰＵは、別のＰＩＯインターフェイス１８４４によって、内部ＳＲＡＭコントローラ１８４６に接続され、内部ＳＲＡＭコントローラ１８４６は次に、ストレージシェルフルータの中およびストレージシェルフルータ間のフェイルオーバを向けるために、ファームウェアルーチンをはじめとする非性能経路コードおよびデータを格納するＳＲＡＭメモリ１８４８とインターフェイスをとる。ＣＰＵ１８１４および１８１６は、プロセッサデータ空間用にも用いられる２つのデータ密結合メモリ１８５０および１８５２に含まれる共有メモリ待ち行列を介して、ＦＣＰ層１８０８およびＳＡＴＡポート層１８１２と相互接続される。各ＣＰＵはまた、ファームウェア命令１８５４および１８５６を格納する個別のメモリと相互接続される。最後に、両方のＣＰＵは、１つのＰＩＯチャネル１８５８を介して両方のＦＣポート１８０２および１８０４、ルーティング層１８０６およびＦＣＰ層１８０８に接続される。
【００９９】
図１９は、ＦＣポート層のさらに詳細な図を示す。ＦＣポート層は、２つのＦＣポート１９０２および１９０４を備え、そのそれぞれが、入力ＦＩＦＯ１９０６および１９０８および２つの出力ＦＩＦＯ１９１０〜１９１１および１９１２〜１９１３を含む。ＦＣポートは、物理およびリンク層論理回路１９１４〜１９１７を含む、ＦＣアービトレイテッドループまたは他のＦＣファブリックから入ってくるシリアルデータを入力ＦＩＦＯに供給されるＦＣフレームに共に変換し、出力ＦＩＦＯに書き込まれ出て行くＦＣフレームをＦＣアービトレイテッドループに伝送されるシリアルデータに変換する。
【０１００】
図２０は、ルーティング層のさらに詳細なブロック図である。図２０に示されているように、ルーティング層２００２は、ＦＣポートのそれぞれを扱うための個別のルーティング論理回路２００４および２００６を含む。ルーティング層はまた、入ってくるＦＣフレームを適切な待ち行列に経路指定するために必要な経路指定決定を容易にするために、メモリに格納されたルーティングテーブル２００８を含む。ＦＣデータフレームは、上述したように、ＦＤＭ２０１１を介してＦｌＳＭ２０１０および２０１２の制御下で、ルータによってＧＳＭＳ層２０１５に比較的直接的に経路指定されることができることに留意されたい。ファームウェア処理を必要とするフレームは、ＣＰＵＤＭ２０１７および２０１８を介してＦＢＱＭ２０１４および２０１６の制御下で、ルーティング層によって入力待ち行列に経路指定される。
【０１０１】
図２１は、ＦＣＰ層のさらに詳細なブロック図である。図２１に示されるこれらの内部構成要素の多くは、前述されているか、または次の段落でさらに詳細に記載される。一般に、一方では、２つのＦＣポート１９０２および１９０４を扱い、他方では、２つのＣＰＵ２１０２および２１０４を扱うために配置される、構成要素の複製集合があることに留意されたい。出て行くフレームを生成するために必要な情報は、ファームウェア制御の下でＣＰＵによって生成され、それぞれが主に１つのＣＰＵに関連付けられる共有メモリ２１０６および２１０８に格納される。伝送のために２つのＦＣポート１９０２および１９０４に供給されるＦＣフレームを生成するために、各メモリ内に格納された情報は次に、ＳＲＱＭ２１１０および２１１２、ＦＯＳＭ２１１４および２１１６、ＳＲＱ＿ＡＲＢＳ２１１８および２１２０、ＣＰＵＤＭ２１２２および２１２４および他の構成要素の個別の集合によって処理される。各ＦＣポートに入ってくるフレームは、個別のルータモジュール２００４および２００６、ＦＩＳＭ２０１０および２０１２および他の構成要素によって処理される。
【０１０２】
図２２は、ＳＡＴＡポート層のさらに詳細なブロック図を示す。ＳＡＴＡポート層の主要な目的は、仮想待ち行列管理、ＳＡＴＡポート層とＧＳＭおよびＦＣＰ層の間で共有されるタスク、ＧＳＭＳおよび個別のＳＡＴＡポートを介したＦＣＰ層とのデータの交換である。
【０１０３】
図２３は、ＳＡＴＡポートのさらに詳細なブロック図を示す。ＳＡＴＡポートは、共にＳＡＴＡインターフェイスを実装する物理層２３０２、リンク層２３０４およびトランスポート層２３０６を含む。トランスポート層は、入力バッファ２３０８および出力バッファ２３１０を含み、データ転送の一部および相互接続されたＳＡＴＡディスクから来るＡＴＡメッセージ情報を格納し、ＧＳＭＳ層からのデータ転送の一部およびインターフェイスからＣＰＵおよび共有メモリにそれぞれ供給されるＡＴＡコマンドを格納する。ＳＡＴＡポートに関するさらなる詳細は、他の段落に記載される。
【０１０４】
＜ストレージシェルフルータルーティング層＞
図２４は、４ストレージシェルフルータ高可用性ストレージシェルフの中のルーティングトポロジ（構成）の抽象表現を示す。この抽象表現は、以下の説明のための有用なモデルおよびテンプレートである。図２４に示されているように、各ストレージシェルフルータ２４０２〜２４０５は、一次リンクを介してディスクドライブ２４０６などのｎ個のディスクドライブに接続される。上述のように、各ストレージシェルフルータは、二次リンクを介してｎ個のディスクドライブの隣接する集合に接続されるが、簡単にするため二次リンクは、図２４に示されていない。１つのストレージシェルフルータ２４０２が、ファブリックＸ２４０８と呼ばれる第１のＦＣアービトレイテッドループまたは他のＦＣファブリックに対してストレージシェルフルータの全体的な集合のためのエンドポイントまたはＦＣノード接続点として機能する。異なるストレージシェルフルータ２４０５は、ファブリックＹと呼ばれる第２のＦＣアービトレイテッドループまたは他のＦＣファブリック２４１０へのエンドポイントまたはＦＣノード接続点として機能する。各ストレージシェルフルータは、２つのＦＣポート、たとえば、ストレージシェルフルータ２４０２におけるＸポート２４１２およびＹポート２４１４などのＸポートおよびＹポートを含む。４つのストレージシェルフルータは、内部ポイントツーポイントＦＣリンク２４１６、２４１８および２４２０と相互接続される。たとえば、ストレージシェルフルータ２４０４のような任意の特定のストレージシェルフルータの場合には、ファブリックＸから入ってくるＦＣフレームは、Ｘポート２４２２で受信され、ストレージシェルフルータ２４０４によってファブリックＸに出力されるＦＣフレームは、Ｘポート２４２２を介して出力される。同様に、入ってくるＦＣフレームおよび出て行くＦＣフレームはそれぞれＹファブリックから受信されて、Ｙファブリックに向けられ、ＦＣポート２４２４にわたって入力および出力される。ＸおよびＹファブリックへの特定のＦＣポートの割り当てが設定可能であり、以下の例示の実施例および実施例を参照する説明において、ＦＣポート０がＸファブリックポートであると仮定され、ＦＣポート１がＹポートであると仮定されるが、対向する割り当てが設定可能であってもよいことに留意すべきである。
【０１０５】
Ｓファブリックの中で用いられ、「Ｓビット」と呼ばれるＦＣフレームヘッダのＤＦ＿ＣＴＬフィールドの中の２ビット保存サブフィールドによって識別されるＳファブリック管理フレームは、ＸポートまたはＹポートのいずれかおよびポイントツーポイント内部ＦＣリンクを介して、ストレージシェルフルータの間に向けられる。各ストレージシェルフルータは、ストレージシェルフの中で一意であり、管理フレームにおいて、ＦＣフレームヘッダＤ＿ＩＤフィールドの一部を形成するルータ番号に割り当てられる。ストレージシェルフルータは、ＸファブリックおよびＹファブリックの一方に対して厳密に増大する順で番号付けされ、ＸファブリックおよびＹファブリックの他方に対して厳密に減少する順で番号付けされる。たとえば、図２４において、ストレージシェルフルータ２４０２、２４０３、２４０４および２４０５はそれぞれ、ルータ番号１、２、３および４が割り当てられてもよく、したがって、Ｘファブリックに対して厳密に増大または昇順であってもよく、Ｙファブリックに対して厳密に減少または降順であってもよい。この順序付けは、以下で説明する詳細なフロー制御図において用いられる。
【０１０６】
図２５は、２つのストレージシェルフルータの中のＸおよびＹ  ＦＣアービトレイテッドループ相互接続の抽象表現を示し、ディスクアレイの２ストレージシェルフ実装を示す。図２５において、ディスクアレイコントローラ２５０２は、ＦＣアービトレイテッドループＸ２５０４によって、各ストレージシェルフ２５０６および２５０８にリンクされ、ＦＣアービトレイテッドループＹ２５１０によって両方のストレージシェルフ２５０６および２５０８にリンクされる。図２５において、ストレージシェルフルータ２５１２は、ストレージシェルフ２５０６用のＸファブリックエンドポイントとして機能し、ストレージシェルフルータ２５１４は、ストレージシェルフ２５０８用のＸファブリックエンドポイントとして機能する。同様に、ストレージシェルフルータ２５１６は、ストレージシェルフ２５０６用のＹファブリックエンドポイントとして機能し、ストレージシェルフルータ２５１８は、ストレージシェルフ２５０８用のＹファブリックエンドポイントとして機能する。ディスクドライブ２５１８などの各個別のディスクドライブは、ＸおよびＹの両方のアービトレイテッドループを介してディスクアレイコントローラ２５０２にアクセス可能である。両方のストレージシェルフにおいて、ストレージシェルフルータは、１つのポイントツーポイントＦＣリンク２５２０および２５２２を介して内部に相互接続され、相互接続は、ＸファブリックフレームおよびＹファブリックフレームに加えて、内部で生成され内部で消費される管理フレームまたはＳファブリックフレームを保持してもよい。ストレージシェルフ２５０６の中の内部ポイントツーポイントＦＣリンクは、Ｓ１ファブリックと呼ばれ、ストレージシェルフルータ２５０８の中の内部ポイントツーポイントＦＣリンクは、Ｓ２ファブリックと呼ばれる。本質的に、内部ポイントツーポイントＦＣリンクは、Ｘファブリック用のＦＣフレーム、Ｙファブリック用のＦＣフレームおよび内部管理フレームを保持するが、一旦、ＸファブリックフレームおよびＹファブリックフレームが、エンドポイントストレージシェルフルータを通ってストレージシェルフルータに入ると、これらは消費されるか、またはエンドポイントストレージシェルフルータのＦＣポートを介してＸファブリックまたはＹファブリックにエクスポートされるまで、Ｓファブリックフレームと見なされる。
【０１０７】
図２６Ａ〜図２６Ｅは、本発明の一実施形態を表すストレージシェルフの中で、特定のＦＣポートを介して、ＦＣフレームを特定のストレージシェルフルータまたは遠隔エンティティに経路指定するために用いられるＦＣフレームヘッダの中のデータフィールドを示す。ＦＣフレームヘッダについては、図３を参照して上述した。当然のことながら、ＦＣヘッダは、フレームを、１つのＦＣノードを介してＦＣアービトレイテッドループまたは他のＦＣファブリックに対してインターフェイスを共にとるストレージシェルフルータと相互接続されるディスクドライブではなく、ＦＣノードに向けるように設計される。したがって、ストレージシェルフの中のストレージシェルフルータへのＦＣフレームヘッダフィールドのマッピングおよびＳＡＴＡディスクドライブの設定が、ＦＣフレームの適切な方向のために必要とされる。ＦＣフレームヘッダ２６０４における３バイトのＤ＿ＩＤフィールド２６０２は、ＦＣノードのノードアドレスを表す。ＦＣアービトレイテッドループの場合には、Ｄ＿ＩＤの最も高位の２バイトが一般に、非公共ループの場合には値「０」を有し、最も低位のバイトが、１２７個のノードのうちの１つを指定するアービトレイテッドループ物理アドレス（「ＡＬ＿ＰＡ」）を含む。一般に、１つのノードアドレスが、ディスクアレイコントローラのために用いられ、別のノードアドレスが、ファブリックアービトレイテッドループアドレスのために保存される。３バイトのＳ＿ＩＤフィールドは、フレームが由来するノードのノードアドレスを含む。一般に、Ｓ＿ＩＤフィールドは、ディスクアレイコントローラ用のノードアドレスであるが、ストレージシェルフは、ＦＣファブリックに直接的に相互接続されてもよく、その場合には、Ｓ＿ＩＤは、ストレージシェルフにアクセスしてもよい多数の遠隔エンティティのいずれかの完全な２４ビットＦＣファブリックアドレスであってもよい。
【０１０８】
図２６Ａに示されているように、ＦＣフレームヘッダ２６０６のＤＦ＿ＣＴＬフィールド２６０４内の２つの保存ビット２６０２は、ストレージシェルフに格納されて、ストレージシェルフの中、言い換えれば、Ｓファブリックの中に伝送されるフレームのための一種の方向指示またはコンパス２６０８として利用される。以下の表４は、この方向インジケータの符号化を示す。
【表４】
2011504632.tif 000007
【０１０９】
ビットパターン「０１」は、フレームがＸファブリックフレームとしてＳファブリックに入力されたことを示し、ビットパターン「１０」は、フレームがＹファブリックフレームとしてＳファブリックに入力されたことを示し、ビットパターン「１１」は、フレームがＳファブリック管理フレームであることを示す。Ｓファブリックおよび外部ファブリックフレームが１つのＦＣポートを通ってストレージシェルフルータによって受信されてもよいことから、ＤＦ＿ＣＴＬフィールドのビット１８：１９によって表されるこの方向インジケータまたは内部コンパスが必要とされる。上述したように、ＤＦ＿ＣＴＬフィールドのビット１８：１９は、「Ｓビット」と総称的に呼ばれる。Ｓビットは、エンドポイントストレージシェルフルータによるＸファブリックフレームまたはＹファブリックフレームの受信時に設定され、エンドポイントストレージシェルフルータからＸファブリックまたはＹファブリックへのＦＣフレームのエクスポートの前にクリアされる。
【０１１０】
図２６Ｂは、ＦＣＰ−ＣＭＮＤフレームの経路指定を伴うＦＣフレームヘッダフィールドを示す。Ｄ＿ＩＤフィールド２６１０は、ＦＣフレームを特定のＦＣノードに向けるが、上述のように、ストレージシェルフは、トランスペアレントモードで動作中である場合には、複数のＦＣノードを含んでもよく、トランスペアレントモードで動作中でない場合には、多数のデータストレージデバイスを含んでもよく、ここに１つのＤ＿ＩＤをすべて含むＦＣフレームが分散される必要がある。ストレージシェルフルータのルーティング論理回路は本質的に、Ｄ＿ＩＤ、ストレージシェルフ、ストレージシェルフルータおよび最終的にはディスクドライブの間の種々のマッピングを扱うことに徹している。ルーティング論理回路は、Ｄ＿ＩＤフィールドのみの値からＦＣフレームがストレージシェルフルータに向けられているかどうかを決定することはできない。Ｄ＿ＩＤが、入ってくるＦＣ−ＣＭＮＤフレームをストレージシェルフルータに向けるかどうかを決定するためには、ルーティング論理回路は、以下で説明される内部のルーティングテーブル２６１２および複数のレジスタを調査して、Ｄ＿ＩＤがストレージシェルフルータによって管理されるディスクドライブのアドレスを表すかどうかを決定する必要がある。したがって、図２６Ｂに示されているように、Ｄ＿ＩＤフィールドは、内部ルーティングテーブル２６１２に対して解釈されるときに、ストレージシェルフ２６１６の中の特定のストレージシェルフルータと、ストレージシェルフルータに相互接続される特定のディスクと、を指定する。さらに、ルーティング論理回路は、以下で説明される追加内部テーブル２６１４を調査し、Ｓ＿ＩＤフィールド２６１１によって指定されるＦＣフレームのソースが、ストレージシェルフルータによって現在ログインされている遠隔エンティティであるか、遠隔エンティティがアドレス指定されたディスクドライブと相互接続されるものとして識別されるかどうかを決定する。したがって、Ｓ＿ＩＤフィールドは、種々の内部テーブル２６１４に対して解釈されるとき、ＦＣ−ＣＭＮＤフレームによって表されるコマンドが実行される必要があるかどうかを決定する認証スイッチ２６２０として作用する。
【０１１１】
図２６Ｃは、ＦＣＰ−ＤＡＴＡフレームの経路指定を伴うＦＣフレームヘッダフィールドを示す。Ｄ＿ＩＤフィールド２６１０およびＳ＿ＩＤフィールド２６１１および内部テーブル２６１２および２６１４が、ＦＣＰ−ＣＭＮＤフレームの経路指定と共に、ストレージシェルフ２６１６の中の特定のストレージシェルフルータと、ストレージシェルフルータに相互接続される特定のディスクを指定し、ディスクへのデータの転送を認証する（２６２０）ために用いられる。しかし、ＦＣＰ＿ＤＡＴＡフレームは、マルチＦＣＰ＿ＤＡＴＡフレームＷＲＩＴＥシーケンスの一部である可能性があるために、一旦、ＦＣ＿ＤＡＴＡフレームがストレージシェルフルータに対して局所的なディスクに向けられることをルーティング論理回路が決定すると、ＦＣフレームヘッダ２６０６のさらなるフィールドが、ストレージシェルフルータの中のＦＣＰ＿ＤＡＴＡフレームを向けるために利用される。図２６Ｃに示されているように、ＲＸ＿ＩＤフィールド２６２２は、ＷＲＩＴＥコマンド用のコンテクスト２６２４を指定する、ＦＣＰ＿ＤＡＴＡフレームに関連するＷＲＩＴＥコマンドを指定したＦＣＰ＿ＣＭＮＤフレームの処理中にストレージシェルフルータによって最初に生成される値を含み、このコンテクスト２６２４は次に、データがＧＳＭＳを介してＦＣＰ層からＳＡＴＡポート層に転送されることができる仮想待ち行列２６２６を指定する。さらに、ＦＣフレームヘッダ２６０６のパラメータフィールド２６２８は、データ用の相対的なオフセットを含み、ＷＲＩＴＥコマンドによって転送されるデータ２６３２の全体的なシーケンス長さの中のＦＣＰ＿ＤＡＴＡフレームに含まれるデータの位置２６３０を表す。コンテクスト２６２４は、次のＦＣＰ＿ＤＡＴＡフレームのための予想される相対的なオフセットを格納し、これは適正なシーケンシングのためにＦＣＰ＿ＤＡＴＡフレームを調べるために用いられることができる。格納された予想される相対的なオフセットが、パラメータフィールドの値に適合する場合には、ＦＣＰ＿ＤＡＴＡフレームは、ばらばらの順で受信され、エラー処理を呼び出す必要がある。
【０１１２】
図２６Ｄは、内部で生成される管理フレームの経路指定を伴うＦＣフレームヘッダフィールドを示す。管理フレームの場合には、Ｄ＿ＩＤフィールド２６１０の最も低位のバイトは、ストレージシェルフの中の特定のストレージシェルフルータを指定するルータ番号を含む。Ｄ＿ＩＤフィールドに含まれるルータ番号は、以下で説明されるレジスタ２６３４に含まれる局所ルータ番号と比較され、管理フレームがストレージシェルフルータ、たとえばストレージシェルフルータ２６３６に向けられるかどうか、または管理フレームが、Ｘファブリックに関連するＦＣポート２６３８またはＹファブリックに関連するＦＣポート２６４０によってアクセス可能であるストレージシェルフの中の別のストレージシェルフルータに向けられるかどうかを決定する。
【０１１３】
最後に、図２６Ｅは、受信されたＦＣＰ＿ＴＲＡＮＳＦＥＲ＿ＲＤＹフレームおよびＦＣＰ＿ＲＥＳＰＯＮＳＥフレームの経路指定を伴うＦＣフレームヘッダフィールドを示す。ＦＣＰ＿ＴＲＡＮＳＦＥＲ＿ＲＤＹフレームおよびＦＣＰ＿ＲＥＳＰＯＮＳＥフレームの場合には、ルーティング論理回路は、別のストレージシェルフルータによって、遠隔エンティティ、通常はディスクアレイコントローラに向けられるものとしてフレームを直ちに認識する。したがって、ルーティング論理回路は、フレームがＸファブリックまたはＹファブリックに送信されなければならないことを決定するために、ＦＣフレームヘッダのＲ＿ＣＴＬフィールド２６４２を調査することだけが必要とされる。
【０１１４】
図２７は、ルーティング論理回路によるＦＣフレームの経路指定を容易にするために、ストレージシェルフルータの中に維持される７つの主要ルーティングテーブルを示す。これらのテーブルは、内部ルーティングテーブル（「ＩＲＴ」）２７０２、Ｘファブリック外部ルーティングテーブル（「ＥＲＴ＿Ｘ」）２７０４およびＹファブリック外部ルーティングテーブル（「ＥＲＴ−Ｙ」）２７０６、Ｘファブリックイニシエータ／ターゲットテーブル（「ＩＴＴ−Ｘ」）２７０８およびＹファブリックイニシエータ／ターゲットテーブル（「ＩＴＴ＿Ｙ」）２７１０、Ｘファブリックログインペアテーブル（「ＬＰＴ−Ｘ」）２７１２およびＹファブリックログインペアテーブル（「ＬＰＴ−Ｙ」）２７１４を含む。これらの７つのルーティングテーブルのそれぞれは、インデックスレジスタ（「ＩＲＴ＿ＩＮＤＥＸ」）２７１６およびデータレジスタ（「ＩＲＴ＿ＤＡＴＡ」）２７１８などのインデックスレジスタおよびデータレジスタに関連する。テーブルの内容は、テーブルにおける特定のフィールドを表す値をインデックスレジスタに書き込み、そこからフィールドの内容を読み出すことによって、またはデータレジスタにフィールドに関する新たな内容を書き込むことによって、ＣＰＵによってアクセスされることができる。さらに、３つのレジスタＳＦＡＲ２７２０、ＸＦＡＲ２７２２およびＹＦＡＲ２７２４があり、ルータ番号と、それぞれＸファブリックおよびＹファブリックに対するストレージシェルフルータアドレスに対応するＤ＿ＩＤの高い方の２バイトを格納するために用いられる。これは、さらにコンパクトなＩＲＴ、ＥＲＴ＿ＸおよびＥＲＴ＿Ｙのテーブルを可能にし、Ｄ＿ＩＤの低位バイトを格納するだけで済む。
【０１１５】
ＩＲＴテーブル２７０２は、ストレージシェルフルータに接続される各ディスクドライブ用、または言い換えれば、各ローカルディスクドライブ用の列を含む。この列は、ディスクドライブに向けられるフレームのＤ＿ＩＤフィールドの低位バイトに含まれるディスクドライブに割り当てられるＡＬ＿ＰＡ、ディスクドライブ用のＬＵＮ番号、ディスクドライブの中に含まれる論理ブロックアドレスの範囲、２つのＣＰＵが管理するディスクドライブに向けられるＩ／Ｏを表すＣＰＵフィールド、列がテーブルにおける有効なエントリを表しているかどうかを表す有効ビットを含む。有効ビットは、可能な最大数未満のディスクドライブがストレージシェルフルータに接続される場合に好都合である。
【０１１６】
ＥＲＴ＿Ｘテーブル２７０４およびＥＲＴ＿Ｙテーブル２７０６は、ストレージシェルフルータに対して局所的でないが、ストレージシェルフに対して局所的であるディスクドライブをアドレス指定する有効Ｄ＿ＩＤのより低いバイトを含む。これらのテーブルは、以下に記載するように、転送する不要な内部ＦＣフレームを短絡するために用いられることができる。
【０１１７】
ＸファブリックＩＴＴテーブル２７０８およびＹファブリックＩＴＴテーブル２７１０は、ストレージシェルフルータによって現在ログインされており、ストレージシェルフルータおよびストレージシェルフルータに相互接続されるディスクドライブとのＦＣエクスチェンジを起動することができる遠隔ＦＣオリジネータに対応する完全なＳ＿ＩＤを含む。ログインペアテーブル２７１２および２７１４は、ＦＣＰ交換のために現在ログインされている遠隔オリジネータおよびローカルディスクドライブのペアに対応するセルに入れられるビット値を有する本質的に疎行列である。したがって、ログインテーブル２７１２および２７１４は、ディスクアレイコントローラなどの遠隔エンティティと、ストレージシェルフルータに相互接続されるローカルディスクドライブとの間で継続中の相互接続を表す有効ログインの表示を提供する。
【０１１８】
次に、ストレージシェルフルータのルーティング層を構成するルーティング論理回路は、一連の詳細なフロー制御図を参照して記載される。図２８は、簡素化されたルーティングトポロジ（構成）と、フロー制御図において用いられるルーティングの宛て先の命名法を提供する。図２９〜図３５は、ルーティング層論理回路を記述する階層型の一連のフロー制御図である。
【０１１９】
図２８に示されているように、ルーティング層２８０２は、ＦＣポート２８０４および２８０６からＦＣポートに直接的に、またはコンテクストが確立されているデータフレームの場合には、ＧＳＭＳ層に比較的直接的にＣＰＵで実行するＦＣＰ論理およびファームウェアによる処理のために、ＦＣＰ層２８１０に入ってくるＦＣフレームを転送することに関する。ルーティング層が、ＦＣポート内の入力ＦＩＦＯ２８１２および２８１４から入ってくるＦＣフレームを受信し、それぞれ「Ｆｒｏｍ＿ＦＰ０」「Ｆｒｏｍ＿ＦＰ１」で表される。ルーティング層は、ＦＣフレームを出力ＦＩＦＯ２８１６および２８１８の一方に書き込むことによって、ＦＣフレームをＦＣポートに向けてもよく、それぞれ「Ｔｏ−ＦＰ０」および「Ｔｏ＿ＦＰ１」で表される。ルーティング層は、仮想待ち行列を介してＦＣＰ＿ＤＡＴＡフレームを比較的直接的にＧＳＭＳ層に転送してもよく、このプロセスは「Ｔｏ＿ＧＳＭＳ」と呼ばれ、「Ｔｏ＿ＦＣＰ」と呼ばれる処理のために、ＦＣフレームをＦＣＰ層２８１０に転送してもよい。表示「Ｆｒｏｍ＿ＦＰ０」、「Ｆｒｏｍ＿ＦＰ１」、「Ｔｏ＿ＦＰ０」、「Ｔｏ＿ＦＰ１」、「Ｔｏ＿ＧＳＭＳ」および「Ｔｏ＿ＦＣＰ」は、ＦＩＦＯからの読み出しおよびＦＩＦＯへの書き込み、ＧＳＭＳ仮想待ち行列機構を介したデータ転送および共有メモリインターフェイスを介したＣＰＵへの状態機械を介在した転送の処理のための略記として、フロー制御図において利用される。
【０１２０】
図２９は、ルーティング層論理回路を表す第１の最も高いレベルのフロー制御図である。ルーティング層論理回路は、入ってくるＦＣフレームをその適切な宛て先に向けるために行われる決定の集合として記載される。ストレージルータを機能させる際に、図２９〜図３５に関して記載されるルーティング論理回路は、入ってくるＦＣフレームが処理されるときに呼び出される。ルーティング論理回路は、ストレージシェルフルータの状態機械および論理回路の中に常駐する。ストレージシェルフルータは、内部データ転送の格納および転送、データ複製タイプを可能な限り回避し、ＦＣポートのＦＩＦＯに入力中であっても、フレームヘッダにおける情報を用いて、フレームを経路指定することができるようにするために、代わりに能率的にするように設計される。言い換えれば、ルーティング論理回路は、フレームヘッダがＦＩＦＯからの読み出しのために利用可能となるとすぐに呼び出されてもよく、フレームは、経路指定されてもよく、ＦＣポートによる残りのデータの受信と平行して、フレームに含まれる初期データがその宛て先に転送されてもよい。ストレージシェルフルータは、２つのＦＣポートの２つの異なる入力ＦＩＦＯの公平な扱いを確保するために、仲裁論理回路を含み、その結果、ＸファブリックおよびＹファブリックの両方から入ってくるＦＣフレームが、タイムリーな方式で扱われ、ＸファブリックおよびＹファブリックのいずれも、不必要なＦＣフレームの扱いの遅延または窮乏を被らないようにする。ルーティング論理回路は、ＦＩＦＯに新たに到着したフレームの可用性を表すＦＣポートによって生成された信号によって呼び出される。
【０１２１】
ステップ２９０２において、ルーティング層論理回路（「ＲＬＬ」）は、それぞれ「Ｆｒｏｍ＿ＦＰ０」および「Ｆｒｏｍ＿ＦＰ１」で表されるＦＣポートの入力ＦＩＦＯの１つから次に入ってくるＦＣフレームを読み出す。ステップ２９０４において、ルーティング層論理回路は、ＦＣフレームがクラス３のＦＣフレームであるかどうかを決定する。クラス３のＦＣフレームのみが、ストレージシェルフルータの記載された実施形態によってサポートされる。ＦＣフレームがクラス３のＦＣフレームでない場合には、ステップ２９０６において、エラー処理のために、ＦＣフレームは、ＦＣＰ層に向けられる（Ｔｏ＿ＦＣＰ）。このフロー制御図および次のフロー制御図において、フロー矢印に関連する小文字の「ｅ」は、フロー矢印によって示されたフローが、エラー状態を扱うために生じていることを示すことに留意されたい。ステップ２９０４において、ＦＣフレームがクラス３のＦＣフレームである場合には、ＲＬＬが次に、ステップ２９０８において、ＦＣフレームが受信されたＦＣポートがＳファブリックエンドポイント、または言い換えれば、ＸファブリックノードまたはＹファブリックノードであるかどうかを決定する。ストレージシェルフルータは、特定のポートがＳファブリックに対してエンドポイントであるかどうか、または言い換えれば構成可能な設定からＸファブリックノードまたはＹファブリックノードであるかどうかを決定することができる。ＦＣフレームヘッダは、上述のように、ソースポートのポートアドレスを含む。
【０１２２】
ＦＣフレームのソースポートが、ＦＣフレームがローカルＳファブリックに対して外部にあるエンティティから受信されたことを表すＳファブリックエンドポイントである場合には、ＲＬＬは、ステップ２９１０において、Ｓビットのいずれかが、ＦＣフレームヘッダのＤＦ＿ＣＴＬフィールドの中に設定されるかどうかを決定する。そうである場合には、エラーが生じ、ＦＣフレームは、ステップ２９０６におけるエラー処理のために、ＦＣＰ層に向けられる（Ｔｏ＿ＦＣＰ）。そうでない場合には、ステップ２９１２において、ＦＣフレームがＸファブリックまたはＸ空間またはＹファブリックまたはＹ空間に属しているかどうかを表すために、適切なＳビットが設定される。ストレージシェルフの中で相互接続ストレージシェルフルータの集合の中で、ストレージシェルフルータの位置に関係なく、２つのＦＣポートの一方がＸファブリックに対応し、２つのＦＣポートの他方がＹファブリックに対応することに留意されたい。上述したように、ＦＣポートとＸファブリックおよびＴファブリックとの間の関連付けが、構成可能である。次に、ＲＬＬは、ステップ２９１４において、フレームがＳファブリックフレームであることを示すように、Ｓビットが設定されるかどうかを決定する。そうである場合には、ステップ２９１６において、フレーム用の宛て先を決定するために、サブ論理（ルーチン）（ルーチン）「Ｍａｎａｇｅｍｅｎｔ  Ｄｅｓｔｉｎａｔｉｏｎ」が呼び出され、その後で、ステップ２９１６において決定された宛て先にＦＣフレームを実際に経路指定するために、ステップ２９１８において、サブ論理（ルーチン）「Ｒｏｕｔｅ  Ｔｏ  Ｄｅｓｔｉｎａｔｉｏｎ」が呼び出される。ステップ２９１４において、ＦＣフレームがＳファブリック管理フレームでない場合には、ステップ２９２０においてＲＬＬは、各ディスクドライブがそれ自体のＦＣノードアドレスを有するモードとして上述したトランスペアレントモードにおいてＲＬＬが現在動作中であるかどうかを決定する。ストレージシェルフルータがトランスペアレントモードにおいて動作中である場合には、フレーム用の宛て先を決定するために、ステップ２９２２において、サブ論理（ルーチン）「Ｔｒａｎｓｐａｒｅｎｔ  Ｄｅｓｔｉｎａｔｉｏｎ」が呼び出され、次に、フレームをその宛て先に実際に経路指定するために、ステップ２９１８において、サブ論理（ルーチン）「Ｒｏｕｔｅ  Ｔｏ  Ｄｅｓｔｉｎａｔｉｏｎ」が呼び出される。他の場合には、フレーム用の宛て先を決定するために、ステップ２９２４において、サブ論理（ルーチン）「Ｄｅｓｔｉｎａｔｉｏｎ」が呼び出され、その後で、ステップ２９１８において、サブ論理（ルーチン）「Ｒｏｕｔｅ  Ｔｏ  Ｄｅｓｔｉｎａｔｉｏｎ」への呼び出しを介して、その宛て先に経路指定される。
【０１２３】
図３０は、図２９のステップ２９１６から呼び出されるサブ論理（ルーチン）「Ｍａｎａｇｅｍｅｎｔ  Ｄｅｓｔｉｎａｔｉｏｎ」のフロー制御図である。ステップ３００２において、ＲＬＬは、ＦＣフレームのヘッダにおいてＤ＿ＩＤに格納されるストレージシェルフルータの数がストレージシェルフルータの数に等しいかどうかを決定する。この決定は、ストレージシェルフ内のストレージシェルフルータに割り当てられ、ＳＦＡＲレジスタに格納されたルータ数を用いて行われることができる。ステップ３００２において、Ｄ＿ＩＤに含まれるルータ数が、ＳＦＡＲレジスタのルータ数と一致する場合には、変数「ｄｅｓｔｉｎａｔｉｏｎ」は、ステップ３００４において、フレームがＦＣＰ層に送られる必要があることを示す値「Ｔｏ＿ＦＣＰ」に設定される。ステップ３００６において、ルータ数が一致しない場合には、ＲＬＬは、ＦＣフレームのＤ＿ＩＤにおけるルータ数が、ストレージシェルフルータのルータ数を超えるかどうかを決定する。ＦＣフレームのＤ＿ＩＤにおけるルータ数が、ＳＦＡＲレジスタに格納されたストレージシェルフルータのルータ数を超える場合には、制御フローは、ステップ３００８に進む。他の場合には、制御フローは、ステップ３０１０に進む。いずれのステップ３００８および３０１０においても、ＲＲＬは、フレームがストレージシェルフの中のＳファブリックエンドポイントに達したかどうかを決定する。そうである場合には、管理フレームは、不正確にアドレス指定されたか、または誤って適切な宛て先が使われておらず、いずれの場合も、ステップ３００４において、宛て先は、「Ｔｏ＿ＦＣＰ」に設定され、その結果、フレームは、誤って受信されたフレームとしてＣＰＵによって処理される。しかし、いずれのステップ３００８および３０１０においても、現在のストレージシェルフルータが、Ｓファブリックエンドポイントでない場合には、ステップ３０１２において、宛て先は、「Ｔｏ＿ＦＰ０」に設定され、その場合には、Ｄ＿ＩＤにおけるルータ数は、現在のルータのルータ数未満であり、Ｄ＿ＩＤにおけるルータ数が、現在のストレージシェルフルータのルータ数を超える場合には、ステップ３０１４において、宛て先は、「Ｔｏ＿ＦＰ１」に設定される。ストレージシェルフの中のストレージルータの数値的識別は、Ｘファブリックに対して、単調に昇順であり、Ｙファブリックに対して、単調に降順であることに再び留意すべきである。
【０１２４】
図３１は、図２９におけるステップ２９２４から呼び出されるサブ論理（ルーチン）「Ｄｅｓｔｉｎａｔｉｏｎ」のフロー制御図である。このサブ論理（ルーチン）は、ストレージシェルフルータがトランスペアレントモードで動作中でない場合、または言い換えれば、ストレージシェルフルータが複数のディスクドライブをＡＬ＿ＰＡにマッピングしている場合に、ＦＣフレーム用の宛て先を決定する。ステップ３１０２において、ＲＬＬは、フレームがＸＦＥＲ＿ＲＤＹフレームまたはＲＳＰフレームであるかを決定する。これらのフレームは、ディスクアレイコントローラに送り返される必要がある。そうである場合には、ステップ３１０２において、ＲＬＬは、フレームがＸファブリックに属しているかどうかを決定する。フレームがＸファブリックに属している場合には、変数「ｄｅｓｔｉｎａｔｉｏｎ」は、ステップ３１０４において値「Ｔｏ＿ＦＰ０」に設定され、フレームをＸ  ＦＣポートに向ける。ステップ３１０２において、フレームがＹファブリックフレームである場合には、フレームをＹ  ＦＣポートに向けるために、ステップ３１０６において、変数「ｄｅｓｔｉｎａｔｉｏｎ」は、「Ｔｏ＿ＦＰ１」に設定される。ステップ３１０２において、フレームがＸＦＥＲ＿ＲＤＹフレームまたはＲＳＰフレームでない場合には、ステップ３１０８において、ＲＬＬは、フレームがＦＣＰ＿ＣＭＮＤフレームであるかどうかを決定する。そうである場合には、ステップ３１１０において、変数「ｄｅｓｔｉｎａｔｉｏｎ」は、「Ｔｏ＿ＦＣＰ」に設定され、フレームがストレージシェルフルータに対して局所的であるＬＵＮに向けられるＦＣＰ＿ＣＭＮＤフレームであることと、フレームがＦＣＰコマンド用のコンテクストを確立するために、ファームウェア処理用のＦＣＰ層に向けられる必要があることを表す。ステップ３１０８において、フレームがＦＣＰ＿ＣＭＮＤフレームでない場合には、ステップ３１１２において、ＲＬＬは、フレームがＦＣＰ＿ＤＡＴＡフレームであるかどうかを決定する。フレームがデータフレームでない場合には、ステップ３１１４において、変数「ｄｅｓｔｉｎａｔｉｏｎ」は、「Ｔｏ＿ＦＣＰ」に設定され、どのタイプのフレームが受信され、フレームをどのように扱うべきかをファームウェアが決定するエラー処理を呼び出す。ステップ３１１２において、フレームがＦＣＰ＿ＤＡＴＡフレームである場合には、ステップ３１１６において、ＲＬＬは、フレームがレスポンダまたはオリジネータによって送信されたかどうかを決定する。フレームがオリジネータによって送信された場合には、ステップ３１１０において、変数「ｄｅｓｔｉｎａｔｉｏｎ」は、「Ｔｏ＿ＦＣＰ」に設定され、フレームをＦＣＰ層処理に向ける。データフレームがレスポンダによって送信された場合には、ステップ３１１８において、ＲＬＬは、フレームが最初はＳファブリック以外から受信されたかどうか、またはフレームヘッダ内のＳビット符号化ファブリック表示がフレームが受信された対向するポートと不一致であるかどうかを決定する。いずれの状態も当てはまる場合には、フレームはエラーで受信され、ステップ３１１４において、変数「ｄｅｓｔｉｎａｔｉｏｎ」は、「Ｔｏ��ＦＣＰ」に設定され、フレームをエラー処理のためのＣＰＵに向ける。他の場合には、制御フローは、ＸポートまたはＹポートのいずれかの方向のためのステップ３１０３に進む。
【０１２５】
図３２は、図２９のステップ２９２２から呼び出されたサブ論理（ルーチン）「Ｔｒａｎｓｐａｒｅｎｔ  Ｄｅｓｔｉｎａｔｉｏｎ」のフロー制御図である。このサブ論理（ルーチン）は、ストレージシェルフルータがトランスペアレントモードで動作中であり、各ディスクドライブがそれ自体のＡＬ＿ＰＡを有するときのＦＣフレーム用の宛て先を決定する。ステップ３２０２において、ＲＬＬは、ＦＣフレームにおけるヘッダのＤ＿ＩＤフィールドの高い方の２バイトが、フレームが受信されたソースポートに対応するＸＦＡＲレジスタまたはＹＦＡＲレジスタの内容に等しいかどうか、Ｄ＿ＩＤフィールドの低バイトが、ＡＬ＿ＰＡがローカルディスクドライブに割り当てられたことを表すＩＲＴテーブルに含まれるＡＬ＿ＰＡを含むかどうかを決定する。そうである場合には、ＦＣフレームは、現在のストレージシェルフルータに向けられる。他の場合には、ＦＣフレームは、別のストレージシェルフまたはストレージシェルフルータに向けられる。ＦＣフレームが現在のストレージシェルフルータに向けられる場合には、ステップ３２０４において、ＲＬＬは、Ｓ＿ＩＤが適切なＩＩＴテーブルに含まれるＳ＿ＩＤに対応するかどうかを調べることによって、ＦＣフレームのオリジネータが、ストレージシェルフルータと相互接続されるディスクドライブとのＦＣエクスチェンジを現在起動することができる外部ＦＣオリジネータとして識別される遠隔エンティティであるかどうかを決定し、Ｓ＿ＩＤが、適切なＩＴＴテーブルに見つかる場合には、ＲＬＬはさらに、ＦＣフレームヘッダに含まれるＳ＿ＩＤに関連する遠隔エンティティが、フレームが向けられているディスクに対して、現在ログインされているかどうかを確認するために、適切なＬＰＴテーブルを調べる。Ｓ＿ＩＤが、現在ログインされており、ステップ３２０４において、フレームが向けられるストレージシェルフルータと相互接続されるディスクドライブとのＦＣの交換を行うことができる遠隔エンティティを表している場合には、ステップ３２０６において、処理のためのＦＣＰ層にフレームを向けるために、変数「ｄｅｓｔｉｎａｔｉｏｎ」は、「Ｔｏ＿ＦＣＰ」に設定される。対照的に、Ｓ＿ＩＤが適切なＩＩＴテーブルの中にないか、または適切なＬＰＴテーブルによって示されているように、ＦＣフレームが向けられるソースドライブおよびディスクドライブが現在ログインされていない場合には、ステップ３２０８において、フレームをエラー処理のためのＦＣＰ層に向けるために、変数「ｄｅｓｔｉｎａｔｉｏｎ」は、「Ｔｏ＿ＦＣＰ」に設定される。
【０１２６】
ステップ３２０２において決定されたように、Ｄ＿ＩＤフィールドが、適切なＦＡＲレジスタの内容に適合しない場合には、ステップ３２１０において、ＲＬＬは、フレームがＸファブリックフレームであるかどうかを決定する。そうである場合には、ステップ３２１２において、ＲＬＬは、フレームがストレージシェルフ内の別のストレージシェルフルータに向けられるかどうかを決定する。そうでない場合には、ステップ３２１４において別のストレージシェルフに転送するために、フレームを外部Ｘファブリックに戻すために、変数「ｄｅｓｔｉｎａｔｉｏｎ」が「Ｔｏ＿ＦＰ０」に設定される。ＥＲＴ＿Ｘテーブルが、ステップ３２１２において決定されたように、フレームの宛て先がストレージシェルフ内の別のストレージシェルフルータに取り付けられるディスクドライブであることを表すエントリを含む場合には、ステップ３２１６において、ＲＬＬは、現在のストレージシェルフルータがＹファブリックエンドポイントを表すかどうかを決定する。そうである場合には、フレームは、正確に処理されておらず、Ｙファブリックに送り込まれることができず、したがって、ステップ３２０８において、変数「ｄｅｓｔｉｎａｔｉｏｎ」は、値「Ｔｏ＿ＦＣＰ」に設定され、その結果、フレームは、エラー処理のためのＦＣＰ層に向けられることができる。別の場合には、フレームをＳファブリックを介してストレージシェルフ内の次のストレージシェルフルータに転送するために、変数の宛て先は、ステップ３２１８において、「Ｔｏ＿ＦＰ１」に設定される。ステップ３２１０において、受信されたフレームがＸファブリックフレームでない場合には、ステップ３２２０においてＲＬＬは、受信されたフレームがＹファブリックフレームであるかどうかを決定する。そうである場合には、フレームは、ステップ３２２２において始まるＸファブリックフレームのための処理と対称かつ同等に処理される。別の場合には、ステップ３２０８において、フレームをエラー処理のためのＦＣＰ層に向けるために、変数「ｄｅｓｔｉｎａｔｉｏｎ」は、「Ｔｏ＿ＦＣＰ」に設定される。
【０１２７】
図３３は、図２９におけるステップ２９１８から呼び出されるサブ論理（ルーチン）「Ｒｏｕｔｅ  Ｔｏ  Ｄｅｓｔｉｎａｔｉｏｎ」のフロー制御図である。このサブ論理（ルーチン）は、受信されたＦＣフレームを前に呼び出された論理において決定される宛て先に向ける。ステップ３３０２において、ＲＬＬは、変数「ｄｅｓｔｉｎａｔｉｏｎ」の値が、「Ｔｏ＿ＦＰ０」または「Ｔｏ＿ＦＰ１」であるかを決定する。そうである場合には、同ステップにおいて、ＲＬＬは、宛て先がＦＣフレームが受信されたポートに対向するポートに関連しているかどうかを決定する。そうである場合には、ステップ３３０４において、ＲＬＬは、変数「Ｄｅｓｔｉｎａｔｉｏｎ」の内容によって表される宛て先が、Ｓファブリックエンドポイントを表すポートに関連する待ち行列であるかどうかを決定する。そうである場合には、ステップ３３０６において、ＦＣフレームヘッダのＤＦ＿ＣＴＬフィールド内に設定される任意のＳ空間ビットが、ローカルＳファブリックからフレームを伝送する前にクリアされる。ステップ３３０８において、ＲＬＬは、ＸファブリックまたはＹファブリックのいずれにフレームが属するかを決定し、ステップ３３１０または３３１２において、フレームを適切な出力待ち行列に入れる。変数「ｄｅｓｔｉｎａｔｉｏｎ」の内容がＦＰ０ポートまたはＦＰ１ポートを表さないか、またはステップ３３０２において、宛て先が、ＦＣフレームが受信されたポートに対向していないかのいずれかである場合には、ステップ３３１４において、ＲＬＬは、変数「ｄｅｓｔｉｎａｔｉｏｎ」の内容が、フレームがＦＣポートの１つに向けられるべきであることを示しているかどうかを決定する。フレームがＦＣポートの１つに向けられるべきである場合には、フレームは、ＦＣＰ層によるエラー処理のために、ステップ３３１６において、ＦＣＰ層に向けられる。ステップ３３１８において、ＲＬＬによって決定されるように、変数「ｄｅｓｔｉｎａｔｉｏｎ」の内容が、フレームがＦＣＰ層に向けられること、すなわち、「Ｔｏ＿ＦＣＰ」を表す場合には、フレームは、ステップ３３１６において、ＦＣＰ層に向けられる。別の場合には、ＲＬＬは、ステップ３３２０において、ＦＣフレームヘッダのＲ＿ＣＴＬフィールドが、フレームがＦＣＰフレームであることを表すかどうかを調べる。そうでない場合には、フレームは、エラー処理のために、ステップ３３１６において、ＦＣＰ層に向けられる。別の場合には、ステップ３３２２において、ＲＬＬは、フレームがＦＣＰ＿ＣＭＮＤフレームであるかどうかを決定する。そうである場合には、ステップ３３２４において、サブ論理（ルーチン）「Ｍａｐ  Ｄｅｓｔｉｎａｔｉｏｎ」が呼び出され、その後で、ステップ３３２６において、ＲＬＬは、変数「ｄｅｓｔｉｎａｔｉｏｎ」の内容が「Ｔｏ＿ＦＣＰ」に依然として等しいかどうかを決定する。そうである場合には、フレームは、ステップ３３１６において、ＦＣＰ層に向けられる。別の場合には、変数「ｄｅｓｔｉｎａｔｉｏｎ」の内容が今度は、２つのＦＣポートの一方へのフレーム転送を表し、ステップ３３２８において決定されるように、ＦＣポートの宛て先が、フレームが受信されたものと同一のＦＣポートである場合には、フレームは、ステップ３３１６において、エラー処理のためにＦＣＰ層に向けられる。別の場合には、制御フローは、ステップ３３０４に進み、フレームを２つのＦＣＰポートの一方の待ち行列に入れる。ステップ３３２２において、フレームがＦＣＰ＿ＣＭＮＤフレームでない場合には、ステップ３３３０において、サブ論理（ルーチン）「Ｏｔｈｅｒ  Ｒｏｕｔｉｎｇ」が呼び出される。
【０１２８】
図３４は、ステップ３３２４において呼び出されるサブ論理（ルーチン）「Ｍａｐ  Ｄｅｓｔｉｎａｔｉｏｎ」のフロー制御図である。ＲＬＬは第一に、ステップ３４０２において、ＬＵＮ、ＬＢＡ、またはＬＵＮおよびＬＢＡマッピングの組み合わせが、ストレージシェルフルータによって現在実行中であるかどうかを決定する。そうでない場合には、ＲＬＬは、ステップ３４０４において、ストレージシェルフルータが現在、トランスペアレントモードで動作中であるかどうかを決定する。そうである場合には、ステップ３４０６において、変数「ｄｅｓｔｉｎａｔｉｏｎ」の値は、「Ｔｏ＿ＦＣＰ」に設定される。ステップ３４０４において、ストレージシェルフルータがトランスペアレントモードで動作中でない場合には、ＲＬＬは、ステップ３４０８において、適切なＬＰＴテーブルが、フレームのソースが、フレームの宛て先とのデータ交換のためにログイン中であることを示すかどうかを決定する。そうである場合には、ステップ３４０６において、変数「ｄｅｓｔｉｎａｔｉｏｎ」は、「Ｔｏ＿ＦＣＰ」に設定される。別の場合には、フレームをエラー処理のためのＣＰＵに向けるために、宛て先はまた、ステップ３４０６において、「Ｔｏ＿ＦＣＰ」に設定される。ＬＵＮ、ＬＢＡ、またはＬＵＮおよびＬＢＡマッピングの組み合わせが、ストレージシェルフルータによって実行中である場合には、ＲＬＬは、ステップ３４１０において、指定された宛て先のディスクが、ＩＲＴテーブルにおけるエントリに関連付けられているかどうかを決定する。そうである場合には、制御フローは、ステップ３４０４に進む。別の場合には、ステップ３４１２において、ＲＬＬは、範囲調査が無効かどうかを決定する。範囲調査が無効である場合には、ステップ３４１４において、ＲＬＬは、フレームがＦＰ０ポートで受信されたかどうかを決定する。そうである場合には、ステップ３４１６において、変数「ｄｅｓｔｉｎａｔｉｏｎ」は、「Ｔｏ＿ＦＰ１」に設定される。別の場合には、変数「ｄｅｓｔｉｎａｔｉｏｎ」の内容が、ステップ３４１８において、「Ｔｏ＿ＦＰ０」に設定される。範囲調査が有効である場合には、ステップ３４２０において、ＲＬＬは、指定された宛て先のディスクが、ＦＰ０ポートを介してアクセス可能であるかどうかを決定する。そうである場合には、制御フローは、ステップ３４１８に進む。別の場合には、ステップ３４２２において、ＲＬＬは、指定された宛て先のディスクが、ＦＣポートＦＰ１を介してアクセス可能であるかどうかを決定する。そうである場合には、制御フローは、ステップ３４１６に進む。別の場合には、変数「ｄｅｓｔｉｎａｔｉｏｎ」は、エラー処理の目的のために、ステップ３４０６において、「Ｔｏ＿ＦＣＰ」に設定される。最後のステップにおいて、いずれかのステップ３４１６または３４１８において、２つのＦＣポートのうちの一方にマッピングされるフレームの場合には、ＲＬＬは、ステップ３４２４において、フレームが現在向けられているポートが、Ｓ空間エンドポイントであるかどうかを決定する。そうである場合には、フレームをエラー処理用のＦＣＰに向けるために、変数「ｄｅｓｔｉｎａｔｉｏｎ」の値は、ステップ３４０６にお���て、「Ｔｏ＿ＦＣＰ」に設定される。
【０１２９】
図３５は、図３３のステップ３３３０におけるサブ論理（ルーチン）「Ｏｔｈｅｒ  Ｒｏｕｔｉｎｇ」のフロー制御図である。ステップ３５０２において、ＲＬＬは、フレームのＲＸ＿ＩＤフィールドが、現在のストレージシェルフルータまたはそれに接続されるディスクドライブが、フレーム用のＦＣレスポンダであることを示すかどうかを決定する。そうである場合には、ステップ３５０４において、ＲＬＬは、フレームがＦＣＰ＿ＤＡＴＡフレームであるかどうかを決定する。そうである場合には、ステップ３５０６において、ＲＬＬは、フレーム用の有効なコンテクストがあるかどうかを決定する。そうである場合には、フレームは、上述のように、ＳＡＴＡポートに対するデータの転送のために、ステップ３５０８において、ＧＳＭＳに向けられ、すなわち、「Ｔｏ＿ＧＳＭＳ」である。別の場合には、ステップ３５１０において、フレームはエラー処理のためのＦＣＰ層に向けられる。ステップ３５０２において決定されるように、ＦＣフレームヘッダのＲＸ＿ＩＤフィールドが、フレーム用のＦＣレスポンダとしてこのストレージシェルフルータを示さない場合には、ステップ３５１２において、ＲＬＬは、ＦＣフレームヘッダ内のＲＸ＿ＩＤフィールドによって識別されるストレージシェルフルータが、フレームが受信されたポートに対向するポートを介してアクセス可能であるかどうかを決定する。そうでない場合には、フレームは、ＦＣＰ層によるエラー処理のために、待ち行列「Ｔｏ＿ＦＣＰ」に入れられる。他の場合には、ＲＸ＿ＩＤが、フレームが受信されたポートに対向するポートからアクセス可能であるストレージシェルフルータを識別する場合には、ＲＬＬは、ステップ３５１４において、そのポートがＳファブリックエンドポイントであるかどうかを決定する。そうである場合には、ステップ３５１６において、ＲＬＬは、ＦＣフレームヘッダのＤＦ＿ＣＴＬフィールドに設定された任意のＳ空間ビットを除去する。ステップ３５１８において、ＲＬＬが、ＸファブリックおよびＹファブリックのいずれにフレームが属するかを決定し、いずれかのステップ３５２０または３５２２において、フレームが属するファブリックに関して適切な同じ待ち行列に入れられる。
【０１３０】
＜ＳＣＳＩコマンド／ＡＴＡコマンド変換＞
上述のように、本発明の一実施形態を表すストレージシェルフルータは、ＦＣＰ＿ＣＭＮＤフレームがＦＣディスクドライブに向けられたかのごとく、ストレージシェルフルータに対するディスクアレイ制御によって向けられるＦＣＰ＿ＣＭＮＤフレームを受信し、ＦＣＰ＿ＣＭＮＤフレーム内のＳＣＳＩコマンドを、ＳＣＳＩコマンドを実行するために、ＳＡＴＡディスクドライブに伝送されることができる１つまたは複数のＡＴＡコマンドに変換する。以下の表５は、ストレージシェルフルータによって受信されたＳＣＳＩコマンドと、ＳＣＳＩコマンドを実行するために用いられるＡＴＡコマンドとの間の対応関係を示す。
【表５】
2011504632.tif 000008
【０１３１】
＜仮想ディスクフォーマティング＞
種々の実施形態において、ストレージシェルフルータまたはストレージシェルフ内の複数のストレージシェルフルータは、仮想ディスクフォーマティングを提供することができ、異なる予想外のディスクフォーマティング規則が実際には、ストレージシェルフディスクドライブにおいて利用されるという事実にもかかわらず、ディスクアレイコントローラおよび他の外部処理エンティティが、ストレージシェルフ内のディスク用の予想されるディスクフォーマティング規則とのインターフェイスをとることを可能にする。仮想ディスクフォーマティングは、ＡＴＡディスクフォーマティング規則およびＳＡＴＡディスクフォーマティング規則とのインターフェイスをとるために、ディスクアレイコントローラを再実装することを必要とすることなく、ＡＴＡディスクドライブなどのさらに経済的なディスクドライブの使用を可能にする。さらに、ディスクアレイコントローラなどの外部計算エンティティを非標準的かつ予想外のディスクフォーマティング規則にさらすことなく、さらなるエラー検出情報およびエラー補正情報などのディスクセクタの中にさらなる情報を組み込むために、ストレージシェルフルータまたは複数のストレージシェルフルータは共に、ストレージシェルフ内の異なるディスクフォーマティング規則を適用することができる。
【０１３２】
図３６Ａ〜図３６Ｂは、ＡＴＡディスクドライブおよびＦＣディスクドライブによって利用されるディスクフォーマティング規則を示す。図３６Ａに示されているように、ディスクドライブは、セクタにそれぞれ分割される複数のトラックからなると概念的に考えられる。トラックは、トラック３６０２などのディスクプラッタの表面における円形の帯、ＡＴＡディスクドライブプラッタにおける外周の帯である。各トラックは、セクタ３６０４、すなわち、第１のトラック３６０２の第１のセクタなどのセクタと呼ばれる放射部分に分割される。一般に、ディスクアクセス動作は、セクタの粒度で生じる。現代のディスクドライブは、複数の平行に向けられたプラッタを含んでもよい。平行なプラッタのすべての両面にすべての類似の番号の付いたトラックが、共に、円筒を構成する。図３６Ａに示されているように、ＡＴＡディスクドライブにおいて、各トラックの各セクタは一般に、５１２バイトのデータペイロードを含む。セクタは、セクタ番号およびエラー検出情報およびエラー補正情報をはじめとするさらなる情報を含む。このさらなる情報は一般に、ディスクドライブコントローラによって維持されて用いられ、外部からアクセス可能でない場合がある。このさらなる情報は、本発明には関係していない。したがって、セクタは、セクタに含まれるデータペイロードのバイト数に対して記載される。
【０１３３】
図３６Ｂは、ＦＣディスクドライブ用の概念的なトラックおよびセクタのレイアウトを示す。ＦＣディスクドライブは、ＡＴＡディスクドライブによって利用される５１２バイトセクタではなく、５２０バイトセクタを利用してもよい。図３６Ａに示されるＡＴＡディスクドライブまたはＳＡＴＡディスクドライブに関する概念的なレイアウトを図３６Ｂに示されるＦＣディスクドライブ用の概念的なレイアウトと比べると、図３６Ａ〜図３６Ｂにおける両方のレイアウトは本質的に、等しい数のデータバイトをサポートしているが、ＡＴＡディスクドライブフォーマットは、ＦＣディスクドライブより各トラック内により多数のより小さなセクタを提供することが分かる。しかし、一般に、ＡＴＡディスクおよびＦＣディスクは本質的に等しいバイト数を提供しなくてもよく、ＦＣディスクもまた、５１２バイトセクタでフォーマットされてもよい。図３６Ａ〜図３６Ｂは、簡素化された概念的なレベルにおけるディスクフォーマティング規則を示していることに留意すべきである。実際には、ディスクドライブは、数千または数万のトラックを含んでもよく、各トラックは多数のセクタを含んでもよい。
【０１３４】
種々の実施形態において、本発明の主題であるストレージシェルフルータにより、経済的なＡＴＡディスクドライブが、ファイバチャネルに基づくディスクアレイのストレージシェルフの中で利用されることを可能にする。しかし、ある種の現在利用可能なＦＣに基づくコントローラは、５２０バイトセクタをサポートするディスクドライブを専ら用いてインターフェイスをとるように実装されてもよい。ＡＴＡまたはＳＡＴＡに基づくストレージシェルフの製造者は、５１２バイトセクタを含むＡＴＡディスクドライブまたはＳＡＴＡディスクドライブとインターフェイスをとるために、強化することになっている現在非ＡＴＡ準拠のディスクアレイコントローラを必要とすることに決めている可能性があるが、さらに実現可能な手法は、仮想ディスクフォーマティングをサポートするようにストレージシェルフルータを実装することである。仮想ディスクフォーマティングは、ディスクアレイコントローラなどの外部エンティティに対し、ＦＣディスクドライブの５２０バイトセクタフォーマティング規則にフォーマットされたディスクドライブを含むストレージシェルフの幻影をストレージシェルフルータまたはストレージシェルフ内のストレージシェルフルータに提供し、ストレージシェルフ内のＡＴＡディスクドライブによって利用される５１２バイトセクタフォーマティングへの５２０バイトセクタに基づくディスクアクセスコマンドのマッピングを処理する。
【０１３５】
図３７Ａ〜図３７Ｄは、ディスクアレイコントローラなどの外部エンティティによる、ストレージシェルフ内部の５１２バイトに基づくディスクドライブへの５２０バイトのＷＲＩＴＥアクセスを扱うための、仮想ディスクフォーマティング実装を示す。図３７Ａに示されているように、ディスクアレイコントローラなどの外部処理エンティティは、ＷＲＩＴＥアクセスが対象とされるディスクを５２０バイトセクタでフォーマットされているものとして表示する（図３７Ａにおける３７０２）が、内部ディスクドライブは実際には、５１２バイトセクタでフォーマットされている（図３７Ａにおける３７０４）。ストレージシェルフルータは、論理的な５２０バイトセクタに基づくフォーマティング３７０２と実際の５１２バイトセクタのフォーマティング３７０４との間の垂直矢印３７０６〜３７１０によって、図３７Ａにおいて示されているマッピングの維持を担っている。図３７Ｂ〜図３７Ｄは、仮想の５２０バイトセクタ２５７〜２５９（３７１２〜３７１４）を５１２バイトセクタに基づく内部ディスクドライブ３７０４に指定するＷＲＩＴＥ動作を終了するために、ストレージシェルフルータによって実行される動作を表す。ディスクドライブの第１のセクタがセクタ０と見なされ、次のセクタがすべて、単調に増大するセクタ番号を有するセクタ番号付け規則を仮定すると、２５６×５２０＝２６０×５１２＝１３３，１２０であるため、仮想の５２０バイトセクタ２５６（３７１６）は、実際のディスクドライブにおいて５１２バイトセクタ２６０（３７１８）の最初のバイトから始まる。言い換えれば、仮想の５２０バイトセクタ２５６および実際の５１２バイトセクタ２６００はいずれも、バイト数１３３，１２０で始まる。仮想セクタ２５６および実際のセクタ２６０の始まりは、同一のバイトアドレスにマッピングされる（３７０６）が、仮想セクタ２５６は、図３７Ａのマッピング矢印３７０７によって表される実際のセクタ２６０の終わりを越えて延在する。したがって、仮想セクタ２５７の始まりは、８バイト（３７２０）の変位だけ実際のセクタ２６１の始まりからずれており、仮想セクタ２５８〜２６０の始まりは、実際のセクタ２６２〜２６４の始まりから、１６バイト、２４バイトおよび３２バイトのオフセット３７２２〜３７２４のずれがある。したがって、ディスクドライブに仮想セクタ２５７〜２５９を書き込むために、ストレージシェルフルータは、実際のディスクセクタ２６１〜２６４（３７２６〜３７２９）に対する仮想セクタ２５７〜２５９の外部処理エンティティによって供給されるデータを書き込む必要がある。
【０１３６】
図３７Ｂは、仮想フォーマティング環境におけるストレージシェルフルータによって実行されるＷＲＩＴＥ動作処理の第１の段階を示す。図３７Ｂに示されているように、ストレージシェルフルータは最初に、実際のディスクセクタ２６１（３７２６）および２６４（３７２９）をメモリバッファ３７３０に読み出す。メモリバッファ３７３２および３７３４におけるデータの網掛け部分は、ＷＲＩＴＥアクセスがアドレス指定される仮想セクタとは別の仮想セクタに含まれるディスクドライブからのデータ読み出しに対応する。セクタ２６１および２６４（それぞれ、３７２６および３７２９）は、アクセス動作のための仮想セクタ境界を含むため、「境界セクタ」と呼ばれる。ストレージシェルフルータは、第２のメモリバッファ３７３６において、仮想セクタ２５７〜２５９（図３７Ａにおけるそれぞれ３７１２〜３７１４）に書き込まれるデータを同時に受信する。
【０１３７】
図３７Ｃは、ＷＲＩＴＥアクセスのストレージシェルフルータ処理の第２の段階を示す。図３７Ｃにおいて、受信データ３７３８および３７４０の網掛け部分は、図３７Ｂに示される実際のディスクドライブから読み出されるバッファデータのそれぞれの部分３７４２および３７４４に書き込まれる。
【０１３８】
図３７Ｄは、ＷＲＩＴＥアクセスのストレージシェルフルータ実装の最後の段階を示す。図３７Ｄにおいて、実際のディスクセクタ２６１および２６４用のメモリバッファ３７３０に準備されたバッファデータは、実際のディスクセクタ２６２および２６３（それぞれ３７４６および３７４８）に対応する第２のメモリバッファ３７３６における受信データの一部と共に、すべて実際のディスクセクタ２６１〜２６４に書き込まれる。非境界ディスクセクタ２６２および２６３は、受信データバッファ３７３６から直接的に書き込まれることができることに留意されたい。
【０１３９】
図３７Ａ〜図３７Ｄに示される仮想フォーマティング環境におけるストレージシェルフルータ実装ＷＲＩＴＥアクセスを要約すると、ストレージシェルフルータは一般に、最初に実際のディスクドライブから境界セクタを読み出し、受信データをメモリにおける境界セクタにマッピングし、次に、境界セクタおよびすべての非境界セクタをディスクドライブにＷＲＩＴＥする必要がある。したがって、一般に、ｎ個のセクタの５２０バイトセクタに基づく仮想書き込み動作は、２回の実際のディスクセクタ読み出しおよび２＋ｎ−１回の実際のディスクセクタ書き込みを用いて、ストレージシェルフルータによって実装される。
【０１４０】
ＷＲＩＴＥ  Ｉ／Ｏ（ｎ個の仮想の５２０セクタ）→２回の読み出し＋２回の書き込み＋（ｎ−１）回の書き込み
対応して減少した書き込み効率は、
【数１】
2011504632.tif 000009
【０１４１】
仮想セクタが実際のディスクセクタにサイズが比較的近く、一般に、ＷＲＩＴＥ動作は、ＲＥＡＤ動作よりわずかに時間がかかるが、セクタの読み出しおよびセクタの書き込みに同量の時間がかかると仮定すると、その結果、上記で計算したＷＲＩＴＥ  Ｉ／Ｏ効率は、実際のＷＲＩＴＥ  Ｉ／Ｏ効率よりわずかに低く見積もられる。
【０１４２】
図３８Ａ〜図３８Ｂは、ストレージシェルフルータによる仮想の５２０バイトセクタに基づくＲＥＡＤ動作の実装を示す。図３８Ａは、図３７Ａに示されているように、仮想の５２０バイトに基づくセクタと実際のディスクドライブの５１２バイトセクタとの間の同じマッピングを示し、図３８Ａにおいて、ディスクアレイコントローラなどの外部処理エンティティが、仮想セクタ２５７〜２５９（それぞれ３７１２〜３７１４）の読み出しを要求する点が異なる。図３８Ｂは、仮想セクタ２５７〜２５９に向けられるＲＥＡＤアクセスを実装するために、ストレージシェルフルータによって実行される動作を示す。ストレージシェルフルータは第一に、外部処理エンティティによって要求されたデータを含む実際のディスクセクタを決定する。このデータは、境界セクタ２６１および２６４（それぞれ、３７２６および３７２９）および非境界セクタ２６２および２６３（それぞれ、３７２７および３７２８）を含む。一旦、ストレージシェルフルータが、アクセスされることになっているデータを含む実際のディスクセクタを識別すると、ストレージシェルフルータは、それらのセクタをメモリバッファ３８０２に読み出す。ストレージシェルフルータは次に、メモリバッファ内の仮想セクタ境界３８０４〜３８０７を識別し、メモリバッファ３８０２内の仮想セクタに対応するデータを要求を出した外部処理エンティティに戻し、第１の仮想セクタ３８０４の第１のバイトに先立ち、最後の仮想セクタ３８０７の最後のバイトに続く任意のメモリバッファデータを棄却する。
【０１４３】
図３７Ａ〜図３７Ｄおよび図３８Ａ〜図３８Ｂにおける仮想ディスクフォーマティングの実装の説明は、高位の概念的な説明である。入ってくるＦＣ＿ＤＡＴＡパケットからデータを受信し、特定のＳＡＴＡディスクドライブへの伝送のためにストレージシェルフルータを通ってＳＡＴＡポートにデータを経路指定し、ＳＡＴＡディスクドライブからのデータを特定のＳＡＴＡポートで受信し、ストレージシェルフルータを通ってデータを経路指定し、外部処理エンティティに伝送されたＦＣ＿ＤＡＴＡパケットおよびＦＣ＿ＳＴＡＴＵＳパケットにおけるデータおよび状態情報を伝送するために、内部では、ストレージシェルフルータは、前の小段落で説明した種々のデータ伝送経路を利用する。複数の個別のメモリバッファが、図３７Ｂ〜図３７Ｄおよび図３８Ｄに示されるが、ストレージシェルフルータによるデータの実際の処理は、前の小段落に記載した仮想待ち行列機構および他のデータトランスポート機構を用いて、最小のデータストレージで達成されてもよい。図３７Ｂ〜図３７Ｄおよび図３８Ｂに示されるメモリバッファは、ストレージシェルフルータ内で実行されるデータ操作および伝送の上述した詳細なレベルではなく、概念レベルでストレージシェルフルータによるデータ処理を示すことを意図している。
【０１４４】
図３８Ａ〜図３８Ｂに示される読み出し動作を要約すると、ストレージシェルフルータは、ｎ個の仮想セクタの仮想ＲＥＡＤを実行するために、ｎ＋１回のディスクセクタを読み出す必要があり、対応して減少した読み出し効率は、以下の式によって表現される。
【０１４５】
ＲＥＡＤ  Ｉ／Ｏ（ｎ個の仮想の５２０セクタ）→１回の読み出し＋ｎ回の読み出し
対応して減少した読み出し効率は、
【数２】
2011504632.tif 000010
仮想セクタのサイズが実際のディスクセクタに比較的近いと仮定する。
【０１４６】
図３９は、図３７Ａ〜図３７Ｄに示されているように、複数の仮想セクタのＷＲＩＴＥ動作のストレージシェルフルータによる実装を示す制御フロー図である。第一に、ステップ３９０２において、ストレージシェルフルータは、仮想セクタを指定する外部処理エンティティからＷＲＩＴＥコマンドを受信する。次に、ステップ３９０４において、ストレージシェルフルータは、低境界セクタおよび高境界セクタをはじめとする書き込まれることになっている実際のディスクセクタを決定する。次に、ストレージシェルフルータは、境界セクタの処理３９０６および非境界セクタの処理３９０８を並列に行ってもよい。境界セクタの処理は、ステップ３９１０において、受信されたＷＲＩＴＥコマンドに関連する低境界セクタがあるかどうかを決定することを含む。そうである場合には、ステップ３９１２において、低境界セクタの読み出しが、起動される。同様に、ステップ３９１４において、ストレージシェルフルータは、ＷＲＩＴＥ動作において必要な高境界セクタがあるかどうかを決定し、そうである場合には、ステップ３９１６において、高境界セクタ用のＲＥＡＤ動作を起動する。仮想セクタの始まりが、図３７Ａにおいて仮想セクタ２５６および実際のディスクセクタ２６０に関して、実際のディスクセクタの始まりと一致する場合には、ＷＲＩＴＥ動作において必要とされる低境界セクタはないことに留意されたい。同様に、高い仮想セクタの終わりが、実際のディスクセクタの終わりと一致する場合には、ＷＲＩＴＥ動作において必要とされる高境界セクタはない。
【０１４７】
ステップ３９１８において検出されたように、低境界セクタのＲＥＡＤ動作が終了するとき、ストレージシェルフルータは、ステップ３９２０において、ＷＲＩＴＥコマンドに関連する受信データの最初の部分を低境界セクタに書き込み、ステップ３９２２において、ディスクドライブへの低境界セクタのＷＲＩＴＥを起動する。同様に、ストレージシェルフルータが、ステップ３９２４において、高境界セクタの読み出しの終了を検出する場合には、ストレージシェルフルータは、ステップ３９２６において、高境界セクタからのデータの読み出しを含む受信データの最後の部分をメモリバッファに書き込み、ステップ３９２８において、ディスクドライブへの高境界セクタのＷＲＩＴＥを起動する。本発明の一実施形態において、ディスクセクタは、最も低いセクタから最も高いセクタの順にディスクに書き込まれる。非境界セクタの場合には、ストレージシェルフルータは、ステップ３９３２において、ステップ３９３０、３９３２および３９３４を含むｆｏｒループの一部として、ディスクドライブに各非境界セクタを書き込む。ストレージシェルフルータが、仮想ＷＲＩＴＥ動作に関連するイベントを検出するとき、ストレージシェルフルータは、ステップ３９３６において、起動されたＷＲＩＴＥ動作のすべてが終了したかどうかを決定する。そうである場合には、ステップ３９３８において、ＷＲＩＴＥ動作は、首尾よく終了する。別の場合には、ストレージシェルフルータは、ステップ３９４０において、仮想セクタのＷＲＩＴＥ動作が時間切れであったかどうかを決定する。そうである場合には、ステップ３９４２においてエラー状態を得る。別の場合には、ストレージシェルフルータは、ステップ３９４４において、すべてのＷＲＩＴＥ動作の終了まで待機し続ける。
【０１４８】
図４０は、図３８Ａ〜図３８Ｂに示されているように、１つまたは複数の仮想セクタに向けられるＲＥＡＤ動作のストレージシェルフルータによる実装に関する制御フロー図である。ステップ４００２において、ストレージシェルフルータは、外部処理エンティティから読み出しコマンドを受信する。ステップ４００４において、ストレージシェルフルータは、境界セクタを含む読み出し動作において必要とされるすべての実際のディスクセクタの素性を決定する。次に、ステップ４００６〜４００８を構成するｆｏｒループにおいて、ストレージシェルフルータは、読み出し動作に必要とされる各実際のディスクセクタを読み出す。ストレージシェルフルータが、仮想ＲＥＡＤ動作に関連するイベントの発生を検出すると、ストレージシェルフルータは、ステップ４０１０において、ＲＥＡＤ動作を介して要求されたディスクセクタが受信されたかどうかを決定する。そうである場合には、ステップ４０１２において、ストレージシェルフルータは、境界セクタのＲＥＡＤが終了したかどうかを決定する。そうである場合には、ステップ４０１４において、ストレージシェルフルータは、境界セクタから仮想ＲＥＡＤ動作に関連するデータを抽出し、要求する処理エンティティに対する最終的な伝送のために、バッファまたは待ち行列にそのデータを書き込む。受信されたセクタが境界セクタでない場合には、ストレージシェルフルータは、ステップ４０１６において、要求する処理エンティティに対する最終的な伝送のために、バッファまたは待ち行列内の適切な位置に受信データを書き込むだけである。ステップ４０１８において決定されるように、すべての読み出しが首尾よく終了した場合には、ステップ４０２０において、仮想ＲＥＡＤ動作が首尾よく終了し、当然のことながら、ディスクドライブからのデータの読み出しが処理エンティティに戻るように首尾よく伝送されることになる。別の場合には、ストレージシェルフルータは、ステップ４０２２において、時間切れが生じたかどうかを決定する。そうである場合には、ステップ４０２４においてエラー状態を得る。別の場合には、ストレージシェルフルータは、ステップ４０２６において、別のＲＥＡＤ動作の終了まで待機し続ける。
【０１４９】
本発明の仮想フォーマティング法およびシステムの一実施形態において、５１２バイトＡＴＡディスクドライブセクタへの５２０バイトＦＣディスクドライブセクタのマッピングが、効率的に計算されることができる。図４１は、本発明の一実施形態を表す仮想フォーマティング法およびシステムを実行するために必要な計算値を示す。図４１において、セクタ４１０２の一番上の水平方向の帯は、仮想的にマッピングされる５２０バイトセクタを表し、下の水平方向の帯４１０４は、物理的な５１２バイトＡＴＡセクタを表す。図４１は、物理セクタ４１１０〜４１１２への仮想セクタ４１０６〜４１０８のマッピングを示す。図４１に示される実施例の場合には、仮想セクタ４００〜４０９が、対応する物理セクタにマッピングされることになっていると仮定する。したがって、第１の仮想セクタ「ｆｃ＿ｌｂａ」４１１４の論理ブロックアドレス（「ＬＢＡ」）は、値「４００」を有し、その結果、マッピングされることになっている仮想ブロックの数「ｆｃ＿ｂｌｏｃｋ＿ｃｏｕｎｔ」４１１６は、１０である。計算値「ｆｃ＿ｌｂａ＿ｌａｓｔ」４１１８は、「４１０」であり、マッピングされることになっている仮想セクタ範囲の後に、第１の仮想セクタのＬＢＡが続く。マッピングされることになっている仮想セクタに関するデータを含む第１の物理セクタの論理ブロックアドレス「ａｔａ＿ｌｂａ」４１２０は、よく知られているＣ言語構文および演算子を用いて、
ａｔａ＿ｌｂａ＝ｆｃ＿ｌｂａ＋（ｆｃ＿ｌｂａ＞＞６）
として計算される。実施例において、ａｔａ＿ｌｂａの計算値は、「４０６」である。この計算は、第１の仮想セクタのＬＢＡに、６４によって分割された第１の仮想セクタの前の仮想セクタの総数として計算された複数の物理セクタを加えたものとして理解されることができる。この理由は、６４個の仮想セクタの各連続集合は、６５個の物理セクタの対応する連続集合に正確にマッピングされるため、または、言い換えれば、
６４＊５２０＝＝６５＊５１２＝＝３３２８０
であるためである。第１の物理セクタの始まりから第１の仮想セクタの第１のバイトに対応する第１の物理セクタ内のバイトまでのオフセット「ａｔａ＿ｌｂａ＿ｏｆｆｓｅｔ」４１２２は、以下のように計算される。
ａｔａ＿ｌｂａ＿ｏｆｆｓｅｔ＝（ｆｃ＿ｌｂａ＆６３）＜＜３
実施例において、ａｔａ＿ｌｂａ＿ｏｆｆｓｅｔに関して計算された値は、「１２８」である。この計算は、必要な第１の物理ブロックの中で８バイトシフトの数を決定するものとして理解されることができ、８バイトは、仮想セクタおよび物理セクタの長さにおける差であり、仮想セクタの数は、必要な８バイトシフトの数に対応する６４によって分割された最初の仮想セクタＬＢＡの後に続く。最後の物理的境界ブロックＬＢＡ「ａｔａ＿ｅｎｄｉｎｇ＿ｌｂａ」４１２４は、
ａｔａ＿ｅｎｄｉｎｇ＿ｌｂａ＝ｆｃ＿ｌｂａ＿ｌａｓｔ＋（ｆｃ＿ｌｂａ＿ｌａｓｔ＞＞６）
として計算される。実施例において、ａｔａ＿ｅｎｄｉｎｇ＿ｌｂａの計算値は、「４１６」である。上記の計算は、第１の物理セクタ「ａｔａ＿ｌｂａ」の計算に等価である。仮想セクタの中にない第１のバイトに対応する最後の物理的境界ブロックの中のオフセット「ａｔａ＿ｅｎｄｉｎｇ＿ｌｂａ＿ｏｆｆｓｅｔ」４１２６は、
aｔａ＿ｅｎｄｉｎｇ＿ｌｂａ＿ｏｆｆｓｅｔ＝（ｆｃ＿ｌｂａ＿ｌａｓｔ＆６３）＜＜３
として計算される。実施例において、ａｔａ＿ｅｎｄｉｎｇ＿ｌｂａ＿ｏｆｆｓｅｔの計算値は「２０８」である。ａｔａ＿ｅｎｄｉｎｇ＿ｌｂａ＿ｏｆｆｓｅｔの計算値が「０」である場合には、
ａｔａ＿ｅｎｄｉｎｇ＿ｌｂａ＝ａｔａ＿ｅｎｄｉｎｇ＿ｌｂａ−１
である。この理由は、仮想セクタの最後のバイトが、物理セクタの最後のバイトに対応し、最後の部分的に関連する境界セクタにアクセスする必要がないためである。実施例において、ａｔａ＿ｅｎｄｉｎｇ＿ｌｂａの値は、この最後のステップによって変化しない。仮想セクタに対応する物理ブロックの数「ａｔａ＿ｂｌｏｃｋ＿ｃｏｕｎｔ」が最後に、
ａｔａ＿ｂｌｏｃｋ＿ｃｏｕｎｔ＝ａｔａ＿ｅｎｄｉｎｇ＿ｌｂａ−ａｔａ＿ｌｂａ＋１
と計算される。実施例において、ａｔａ＿ｂｌｏｃｋ＿ｃｏｕｎｔの計算値は、「１１」である。仮想セクタが物理セクタより小さい場合には、類似であるが異なる計算を行うことができることに留意すべきである。任意のサイズの仮想セクタは、本発明の方法によって、物理セクタの任意のサイズにマッピングされることができる。
【０１５０】
図４２は、本発明の一実施形態を表す個別の仮想フォーマティング実装における仮想セクタのＷＲＩＴＥを示す。個別の仮想フォーマティング実装は、汎用プロセッサと、本発明の一実施形態を表す集積回路ストレージルータ実装によって提供されるストレージルータインターフェイスを提供するための格納されたファームウェア／ソフトウェアルーチンと、を利用するストレージルータ状の構成要素の中の、ストレージルータ機能性のファームウェア／ソフトウェア実装を含む。図４２に示されているように、物理的境界セクタ４２０２〜４２０３は、ディスクバッファ４２０４に読み出され、仮想セクタ４２０６〜４２０７の受信された内容が、ディスクバッファ４２０４に書き込まれ、物理的境界データのオーバライト部分が仮想セクタデータに対応する。ディスクバッファ４２０４の内容は次に、ＡＴＡディスクドライブ４２０８に書き込まれる。したがって、仮想ディスクフォーマティングは、ソフトウェア／ファームウェア／汎用プロセッサに基づく構成要素を用いて実行されることができる。
【０１５１】
図４３は、本発明の一実施形態を表す集積回路ストレージシェルフに基づく仮想フォーマティング実装における仮想セクタのＷＲＩＴＥを示す。図４３に示されているように、物理的境界セクタ４３０２〜４３０３は、ＧＳＭ４３０８の中の第１のセクタバッファ（「ＦＳＢ」）４３０４および最後のセクタバッファ（「ＬＳＢ」）４３０６に読み出され、ＦＳＢおよびＬＳＢは、仮想セクタデータと重ね合わされ、残りの仮想セクタデータは、ＦＳＢおよびＬＳＢに関連するＧＳＭ４０８の中の仮想待ち行列４３１０による転送のために設定される。ＦＳＢおよびＬＳＢの内容および仮想待ち行列に向けられるデータは次に、前の小段落に記載したデータ転送機構によって、ＡＴＡディスクに転送される。
【０１５２】
図３９〜図４０における制御フロー図は、仮想ＷＲＩＴＥコマンドおよび仮想ＲＥＡＤコマンドに関連するストレージシェルフ動作のかなり高度で概念的な例示を表すことに留意されたい。特に、上記の段落に詳述したデータフローおよびディスク動作の詳細は、簡単および明確にするために繰り返さない。
【０１５３】
図３６〜図４３を参照して記載した仮想ディスクフォーマティングは、上述のように、ストレージシェルフルータが、ストレージシェルフルータによって管理されるストレージシェルフが、５２０バイトセクタのＦＣディスクドライブを含むようなディスクアレイコントローラなどの外部計算エンティティへの幻影を提供することを可能にするが、実際には、ストレージシェルフは、５１２バイトセクタのＡＴＡまたはＳＡＴＡディスクドライブを含む。同様に、仮想ディスクフォーマティングは、ストレージシェルフ内で利用されるローカルディスクフォーマティングにもかかわらず、外部エンティティによって予想または所望である任意のタイプのディスクフォーマティングに対するインターフェイスを提供するために、ストレージシェルフルータによって用いられることができる。たとえば、新たなきわめて経済的な１０２４バイトセクタディスクドライブが利用可能になる場合には、仮想ディスクフォーマティング技術は、ストレージシェルフルータが、仮想の５２０バイトセクタに基づくアクセス動作または５１２バイトセクタに基づくアクセス動作を新たな１０２４バイトセクタに基づくディスクドライブにマッピングすることを可能にする。さらに、ディスクドライブの各セクタ内に格納された追加情報に応じてディスクドライブのエラー検出能力およびエラー補正能力を提供または強化するために、ストレージシェルフルータによって、仮想ディスクフォーマティングの多層を利用してもよい。
【０１５４】
図４４は、ストレージシェルフルータがＡＴＡディスクドライブのエラー検出能力を強化することを可能にする２層仮想ディスクフォーマティング技術を示す。図４４において、ＡＴＡディスクドライブは、５１２バイトセクタ境界を表す実線の垂直線４４０４などの実線の垂直線によって、セクタ４４０４のリニアサブシーケンスによって表される５１２バイトセクタを利用する。５１２バイトセクタのショートサブシーケンス４４０６によって図４４に示されているように、ストレージシェルフルータは、５２０バイトセクタを下にあるディスクドライブでサポートされる５１２バイトセクタにマッピングするために、上記で説明した仮想ディスクフォーマティング技術を用いる。仮想セクタ４４０８などの各５２０バイト仮想セクタは、５１２バイトペイロードおよび５１２バイトペイロードに付加されるさらなる８バイトの水平冗長符号（「ＬＲＣ」）フィールドを含む。言い換えれば、ストレージシェルフルータは、第１の仮想ディスクフォーマティング層を利用して、５２０バイトセクタをＡＴＡディスクドライブの下にある５１２バイトセクタにマッピングする。しかし、この実施形態において、ストレージシェルフルータは、第２の仮想ディスクフォーマティングレベルを利用し、仮想セクタ４４１０などの外部で見ることが可能な５１２バイトの第２のレベルの仮想セクタを第１のレベルの仮想セクタ４４０８などの５２０バイトの第１のレベルの仮想セクタにマッピングし、次に、ストレージシェルフルータによって５１２バイトのディスクセクタにマッピングされる。この２層仮想化により、ストレージシェルフルータは、各セクタの終わりにさらなる８バイトのＬＲＣフィールドを挿入することができる。ディスクアレイコントローラなどの外部処理エンティティは、５１２バイトセクタをサポートする第２のレベルの仮想ディスクフォーマティング層に対してインターフェイスをとるが、ディスクドライブによって用いられる同一のフォーマティングにより、外部処理エンティティは、ディスクドライブによってサポートされるセクタの実際の数より少ないディスクドライブ内の総セクタを見る。この理由は、ストレージシェルフルータが、各セクタに関してディスクドライブにさらなる８バイトのＬＲＣフィールドを格納するためである。さらに、外部エンティティは、ディスクセクタに含まれるＬＲＣフィールドを認識しない。
【０１５５】
図４５は、図４４に示される２つの仮想レベルの実施形態において、各第１のレベルの仮想の５２０バイトセクタにおいてストレージシェルフルータによって含まれるＬＲＣフィールドの内容を示す。図４５に示されているように、５２０バイト仮想セクタ４５０２の第１の５１２バイトは、ペイロードまたはデータバイトである。ＬＲＣフィールドの最後の８バイトは、２つの保管バイト４５０４、２バイトを含む巡回冗長検査（「ＣＲＣ」）サブフィールド４５０６および最後の４バイトに格納される論理ブロックアドレス４５０８を含む。ＣＲＣフィールドは、公知のＣＲＣ−ＣＣＩＴＴ技術によって計算されるＣＲＣ値を含む。この値の計算は、さらに詳細に以下に記載される。論理ブロックアドレス（「ＬＢＡ」）は、仮想セクタに関連するセクタアドレスである。
【０１５６】
ＬＲＣフィールドの内容により、ストレージシェルフルータが、種々のデータ破損エラーを検出するために利用されるハードウェアレベルのＥＣＣ情報およびディスクドライブコントローラ技術にもかかわらず、ＡＴＡディスクドライブにおいて生じる種々のタイプのエラーを検出することを可能にする。たとえば、ディスクドライブ内の特定のセクタを指定するＲＥＡＤ要求は、時折、異なるセクタに関連するディスクドライブコントローラによって、データを返す結果を生じることがある。ＬＲＣフィールド内のＬＢＡは、ストレージシェルフルータがそのようなエラーを検出することを可能にする。さらに、ディスクドライブは、種々のレベルのデータ破損を被る可能性がある。ハードウェアが供給するＥＣＣ機構は、１ビットまたは２ビットのパリティエラーを検出することができるが、ＣＲＣフィールド４５０６に格納されたＣＲＣ値は、ＣＲＣ値を計算するために利用された技術に応じて、すべての１ビット、２ビット、３ビットのエラーのほか、一定の長さ範囲のエラーの実行を検出することができる。言い換えれば、ＣＲＣ値は、強化したエラー検出能力を提供する。図４４に示される２層仮想ディスクフォーマティング技術を利用することによって、ストレージシェルフルータは、他の場合には、ストレージシェルフルータによって検出することができないような広範囲のエラー状態を検出することができ、これをディスクアレイコントローラなどの外部処理エンティティに対してトランスペアレントな態様で行うことができる。上述したように、外部処理エンティティによって観察可能な唯一の非トランスペアレント特性は、特定のディスクドライブに関してアクセス可能なより少数のセクタである。
【０１５７】
図４６は、ＣＲＣ値の計算を示す。図４６に示されているように、５２０バイト仮想セクタのペイロードまたはデータバイト４６０２およびＬＢＡフィールド４６０４は共に、きわめて大きな数を表すと考えられる。そのきわめて大きな数は、２を法（モジュロ）とした除算を用いて、特定の定数４６０６によって除算され、２を法（モジュロ）とした除算の剰余は、最初のＣＲＣ値４６０８と見なされる。定数は、１７ビットの数であり、したがって、２を法（モジュロ）とした除算の剰余は、長さが最大で１６ビットであることから、２バイトのＣＲＣフィールドの中に収まることに留意されたい。最初のＣＲＣ値は、定数値「ＦＦＦＦ」（１６進数表記）を用いてＥＸＣＬＵＳＩＶＥまたは（「ＸＯＲ」）動作を受け、最終的なＣＲＣ値４６１０を生成する。定数４６０６は、データバイト４６０２およびＬＢＡフィールド４６０４を含む大きな数に対して行われる小さな変更が、定数による２を法（モジュロ）とした除算の後に続く異なる剰余または最初のＣＲＣ値を結果として生じることを確実にする代数特性に関して注意深く選択される。異なるＣＲＣ計算技術は、異なる定数を利用してもよく、それぞれが、わずかに異なるエラー検出能力を提供する異なる代数特性を有する。
【０１５８】
図４７は、エラーを検出するために、仮想セクタのＬＲＣフィールドに含まれるＣＲＣフィールドに対して仮想セクタの内容が検査される技術を示す。たとえば、ストレージシェルフルータが、２つのディスクセクタから仮想セクタの内容を読み出すとき、ストレージシェルフルータは、任意の検出可能なエラーが、仮想セクタの中に含まれる情報の格納または読み出しにおいて生じたかどうかを決定するために、ＣＲＣフィールドに対して仮想セクタの内容を検査することができる。仮想セクタが、ディスクから読み出されるとき、ストレージシェルフルータは、データバイト４７０２、ＬＢＡフィールド４７０４およびＣＲＣフィールド４７０６を共に組み合わせて、きわめて大きな数を形成する。このきわめて大きな数は、ＣＲＣ値を計算するために利用されたものと同じ定数４７０７によって、２を法（モジュロ）とした除算によって計算され、剰余が、検査値４７１０として利用される。ＣＲＣ−ＣＣＩＴＴ技術が利用されるとき、検索データ、ＬＢＡおよびＣＲＣフィールドが、最初のＣＲＣ値が計算された場合のデータおよびＬＢＡと同一である場合には、検査値４７１０は、「１Ｄ０Ｆ」（１６進数）である。言い換えれば、検査値４７１０が定数値「１Ｄ０Ｆ」を有するとき、ストレージシェルフルータは、仮想セクタの格納および検索にエラーが生じなかったことを確信する。当然のことながら、ＣＲＣ技術は、絶対確実というわけではなく、サイレントエラーが生じる可能性がきわめてわずかにある。最初に計算されたＣＲＣをデータおよびＬＢＡに追加することは、データおよびＬＢＡを含む数を２１６と乗算することに等しいため、およびデータ、ＬＢＡおよび最初に計算されたＣＲＣを含む数が、定数値４７０８によって等しく除算可能であることを保証するＣＲＣ−ＣＣＩＴＴ技術によるために、定数の検査値が生じることに留意されたい。
【０１５９】
図４８は、検索された仮想セクタのエラーを検査するために、ストレージシェルフルータによって利用される完全なＬＲＣ検査技術を示す制御フロー図である。ステップ４８０２において、ストレージシェルフルータは、ＣＲＣフィールドおよびＬＢＡフィールドを含む検索された仮想セクタを受信する。ステップ４８０４において、ストレージシェルフルータは、検索された仮想セクタにおけるＬＢＡ値が、予想ＬＢＡ値に対応するかどうかを決定する。そうでない場合には、ステップ４８０６において、エラーが戻される。別の場合には、ステップ４８０８において、ストレージシェルフルータは、図４４に関して上述したように、検索された仮想セクタのデータ、ＬＢＡフィールドおよびＣＲＣフィールドに基づいて、新たなＣＲＣ値を計算する。新たに計算されたＣＲＣ値が、ステップ４８１０において決定されたように、予想定数「１Ｄ０Ｆ」（１６進数）に等しい場合には、ストレージシェルフルータは、ステップ４８１２において、検査の成功の表示を戻す。別の場合には、ストレージシェルフルータは、ステップ４８１４において、エラーを戻す。
【０１６０】
ストレージシェルフルータは、ＷＲＩＴＥ動作中に完全なＬＲＣ検査または延期型ＬＲＣ検査のいずれかを実行してもよい。図４９は、延期型ＬＲＣ検査を示す。図４９に示され、既に述べたように、１つの第２のレベルの仮想５１２バイトセクタ４９０２が、ストレージシェルフルータによってディスクドライブに書き込まれるとき、ストレージシェルフルータは最初に、第２のレベルの仮想セクタ４９０２に関連する２つの境界セクタ４９０６〜４９０７をメモリ４９１０に読み出さなければならない（４９０４〜４９０５）。境界セクタ４９０６〜４９０７は一般に、それぞれ、ＬＲＣフィールド４９１２および４９１３を含む。第２のＬＲＣフィールド４９１３が、第２のレベルの仮想セクタ４９０２に対応する第１のレベルの５２０バイト仮想セクタ４９１４の中に生じる。延期型ＬＲＣモードにおいて、ストレージシェルフルータは、データおよびＬＢＡ値をバッファ４９１６に挿入し、ＣＲＣ計算を実行し、計算されたＣＲＣをＣＲＣフィールド４９１８に挿入し、次に、結果として生じる第１のレベルの仮想セクタをメモリバッファ４９１０に書き込む。メモリバッファの内容は次に、２つのＷＲＩＴＥ動作４９２０および４９２２を介してディスクドライブに戻される。第１のレベルの仮想セクタに関連するＬＲＣフィールド４９１３の内容は、有効であると仮定されることに留意されたい。しかし、２つのＷＲＩＴＥ動作はまた、隣接する第１のレベルの仮想セクタに対応するデータおよびＬＲＣフィールドをディスクドライブに書き込む。このデータおよびさらなるＬＲＣフィールドが有効であるかを検査するのではなく、ストレージシェルフルータは、隣接する第１のレベルの仮想レベルが続いて読み出されるまで、隣接する第１のレベルの仮想セクタの検査を単に延期する。
【０１６１】
図５０は、受信された第２のレベルの５１２バイト仮想セクタにおけるＷＲＩＴＥ動作の完全なＬＲＣ検査を示す。図４９と図５０を比較すると、完全なＬＲＣ検査において、ストレージシェルフルータは、第２のレベルの仮想セクタ４９０２をひとまとめにする境界セクタ４９０６および４９０７を読み出すだけでなく、境界セクタ４９０６および４９０７の次の隣接セクタ５００２および５００４もメモリバッファ５００６に読み出すことが明らかになる。これにより、ストレージシェルフルータは、受信された第２のレベルの仮想セクタ４９０２のメモリバッファ５０１２への書き込みおよび２つの境界セクタのディスクドライブ５０１４および５０１６への次の書き込みに進む前に、図４８を参照して記載したＬＲＣ検査法を用いることによって、上下の隣接する第１のレベルの５２０バイト仮想セクタ５００８および５０１０にエラーがないかどうかを検査することが可能となる。したがって、完全なＬＲＣ検査は、２回のさらなる書き込みを必要とし、以下の式によって記載したように、対応して減少する書き込み効率を伴う。
【０１６２】
ＷＲＩＴＥ  Ｉ／Ｏ（ｎ個の仮想の５２０セクタ）→４回の読み出し＋２回の書き込み＋（ｎ−１）回の書き込み
対応して減少した書き込み効率は、
【数３】
2011504632.tif 000011
仮想セクタのサイズが実際のディスクセクタに比較的近いと仮定する。
【０１６３】
ストレージシェルフルータは、問題を検出し、外部処理エンティティに対してトランスペアレントである問題を補正するために、種々のさらなる技術を利用してもよい。たとえば、ストレージシェルフルータは、図５０における低境界セクタ４９０６を首尾よく読み出すことに失敗した場合に、ストレージシェルフルータは、それにもかかわらず、第２のレベルの仮想セクタ４９１２において受信された低境界セクタの部分をディスクにおける低境界セクタに書き込み、ディスクアレイコントローラに「復旧エラー」状態を戻してもよい。続いて、前の仮想セクタがアクセスされるときに、ディスクアレイコントローラは、前の書き込み動作中に読み出されなかった元の低境界セクタの部分を検索し、データをディスクドライブに書き込むために必要なセクタのミラーコピーからデータ復元を起動し、エラーを補正する。したがって、ＬＲＣの失敗は、ストレージシェルフルータによって回避されることができる。
【０１６４】
＜ＦＣ／ＳＡＴＡ  ＲＡＩＤコントローラ内で利用されるＩ／Ｏコントローラ＞
前の小段落において説明したように、ストレージシェルフルータは、ディスクアレイにおける現在利用可能なＲＡＩＤコントローラにＦＣ通信媒体を介して相互接続されることができるあまり高価でないＳＡＴＡディスクドライブを含む高可用性のストレージシェルフの開発を容易にする。しかしＦＣに基づくディスクアレイにあまり高価でないＳＡＴＡディスクドライブを組み込むためのさらなる対処法が、可能である。図５１は、ＦＣ／ＳＡＳ  ＲＡＩＤコントローラを利用するＦＣに基づくディスクアレイ内にＳＡＴＡディスクドライブを組み込むための別の手法を示す。図５１において、ディスクアレイ５１０２は、２つのＦＣ通信媒体５１０４および５１０６によってサーバと相互接続される。図５１に示されるディスクアレイは、２つのＦＣ／ＳＡＳ  ＲＡＩＤコントローラ５１０８および５１１０を含む。各ＦＣ／ＳＡＳ  ＲＡＩＤコントローラは、ＦＣ通信媒体（たとえば、ＦＣリンク５１０４にインターフェイス接続するＦＣ／ＳＡＳ  ＲＡＩＤコントローラ５１０８）と、各ＦＣ／ＳＡＳ  ＲＡＩＤコントローラを複数のＳＡＳおよび／またはＳＡＴＡディスクドライブ５１１４〜５１３１と相互接続するシリアル接続ＳＣＳＩ（「ＳＡＳ」）通信媒体５１１２と、インターフェイスをとる。ディスクアレイは、内部ＦＣループおよびＦＣディスクドライブを利用する現在利用可能なディスクアレイによって提供されるものと同一のホストコンピュータに対するＦＣに基づくインターフェイスを提供することができ、ＦＣに基づくディスクアレイ用に開発された既存のＲＡＩＤコントローラソフトウェアの大部分を用いてもよい。
【０１６５】
図５２は、ＦＣ／ＳＡＳ  ＲＡＩＤコントローラのブロック図を示す。ＦＣ／ＳＡＳ  ＲＡＩＤコントローラ５２０２は、ＦＣリンク５２０６を介してホストコンピュータからコマンドを受信し、ホストコンピュータに応答を伝送し、周辺コンピュータ相互接続エクスプレス（「ＰＣＩｅ」）リンク５２０８によってＰＣＩｅルートコンプレックスチップ５２１０とコマンドおよび応答を交換することを担うＦＣプロトコルチップ５２０４を含む。ＰＣＩｅルートコンプレックスチップ５２１０は本質的にＰＣＩｅスイッチであり、次に、ＦＣプロトコルチップ５２０４をメモリ５２１２、デュアルコアプロセッサ５２１４およびＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラチップ５２１６とリンクする。ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラチップ５２１６は、デュアルコアプロセッサ５２１４で実行中のＲＡＩＤコントローラソフトウェアからコマンドを受信し、ＲＡＩＤコントローラソフトウェアへ応答を伝送し、ＳＡＳ通信媒体５２１８を介してＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラ５２１６と相互接続される複数のＳＡＳおよび／またはＳＡＴＡディスクドライブにコマンドを発し、これらのＳＡＳおよび／またはＳＡＴＡディスクドライブから応答を受信する。
【０１６６】
ＳＡＳ通信媒体およびＰＣＩｅ通信媒体はいずれも、以前のパラレル通信媒体にとって変わるように最近開発された新たなシリアル通信媒体である。シリアル通信媒体は、イニシエータとターゲットデバイスとの間の直接的な相互接続を提供する。ＳＡＳおよびＰＣＩｅの階層的アーキテクチャはいずれも、イニシエータまたはより高位のスイッチを複数のより低位のスイッチおよび／またはターゲットデバイスのいずれかと直接的に相互接続することができるスイッチを提供する。ＳＡＳ通信媒体およびＰＣＩｅ通信媒体は、交換および切り替え構成要素の種々の組み合わせが、２つの電話間の直接的な相互接続を提供する電話交換に基づく通信システムに類似している。シリアル通信媒体は、バス状の媒体が複数のデバイスによって仲裁を介して共有されるパラレル通信媒体よりはるかに高いデータ転送帯域幅と、短いデータ転送待ち時間を達成するように設計されることができる。
【０１６７】
図５３は、１×ＳＡＳ通信媒体物理リンクを示す。１×物理リンクは、第１のＳＡＳポート５３０２および第２のＳＡＳポート５３０４を含み、各ポートは、Ｐｈｙ層５３０５〜５３０６およびトランシーバ５３０８〜５３０９を含む。第１のポート５３０２の受信器５３１０は、第１の差分信号ペア５３１４によって第２のポート５３０４の送信器５３１２と相互接続され、第１のポート５３０２の送信器５３１６は、第２の差分信号ペア５３２０によって第２のポート５３０４の受信器５３１８と相互接続される。各差分信号ペアは、ＳＡＳ実装に応じて、毎秒１．５ギガビット（「Ｇｂｐｓ」）または３．０Ｇｂｐｓのいずれかの速度で１方向のデータ転送を提供する。１方向のデータ転送速度は、次のＳＡＳバージョンでは、６．０Ｇｂｐｓであると推定されている。データは、文字ごとに追加の２ビットがクロック復元、ＤＣバランス、特殊文字の符号化およびエラー検出を提供する各８ビットバイトを１０ビットの文字として転送するシリアル８ｂ１０ｂ符号化プロトコルを用いて、各方向において転送される。図５３に示される１×物理リンクは、各差分信号ペアが３．０Ｇｂｐｓでデータを転送する場合には、毎秒６００メガバイト（「ＭＢｓ」）の全二重データ転送を提供することができる。
【０１６８】
図５４は、差分信号ペアの動作を示す。「＋」で示される差分信号ペアの一方の信号線は、第１の電圧規則を用いてビットを符号化し、「−」で示される差分信号ペアの他方の信号線は、第１の電圧規則とは逆の第２の電圧規則を用いてビットを符号化する。図５４において、「＋」符号化ビットストリームの小さな部分が、時間の関数としてプロットされた電圧を用いて、グラフ５４０２に示される。「＋」符号化ビットストリームにおいて、１５００ｍＶの正の電圧は、ビット値「１」５４０４を符号化してもよく、９００ｍＶのより低い正の電圧５４０６は、ビット値「０」を符号化してもよい。図５４におけるグラフ５４０８は、第１のグラフ５４０２に示される「＋」符号化ビットストリームに対応する「−」符号化ビットストリームを示す。ＳＡＳポートトランシーバは、図５４におけるグラフ５４１０に示されているように、最終的に符号化されたビットストリームを生成するために、正の符号化信号から負の符号化信号を減算し、ビット値「１」が６００ｍＶの正の電圧５４１２によって符号化され、ビット値「０」が、−６００ｍＶの負の電圧５４１４によって符号化される。図５４に示されているように、差分信号符号化は、雑音を改善して、より鮮明な結果信号を生成する。
【０１６９】
ＳＡＳポートは、複数のＰｈｙを含んでもよく、図５３に示されているように、Ｐｈｙは、物理リンクの一方の側である。図５５は、異なる幅の複数の異なるＳＡＳポートを表す。１×ＳＡＳポート５５０２は、１つのＰｈｙを含む。２×ＳＡＳポート５５０４は、２つのＰｈｙを含む。同様に、４×ＳＡＳポート５５０６は、４つのＰｈｙを含み、８×ＳＡＳポート５５０８は、８つのＰｈｙを含む。第１の８×ＳＡＳポートが第２の８×ＳＡＳポートと相互接続されるとき、８つの物理リンクは、２つの１×ＳＡＳポートの相互接続によって得られる帯域幅の８倍の帯域幅が可能となる。異なる幅の２つのＳＡＳポートが相互接続されるとき、最初の交渉を介して決定されて得られた帯域幅は、２つのＳＡＳポートの最低の幅のポートによって得られることができる帯域幅である。たとえば、４×ＳＡＳポートへの８×ＳＡＳポートの相互接続は、２つの１×ＳＡＳポートの相互接続によって得られる帯域幅の４倍の帯域幅を提供することを可能にする。したがって、ＳＡＳ通信媒体またはリンクは一般に、リンクによって相互接続される２つのポートの最低の幅によって決定されるように、「１×」、「２×」、「４×」または「８×」と示される。
【０１７０】
ＰＣＩｅも同様に、構造化される。ＰＣＩｅリンクも、リンクによって相互接続される２つのＰＣＩｅポートの最小の幅に応じて、「１×」、「２×」、「４×」および「８×」と分類されてもよい。ＰＣＩ  Ｐｈｙもまた、差分信号ペアを利用し、８ｂ１０ｂ符号化を用いる。現在利用可能なＰＣＩｅ差分信号ペアは、１方向において、２．５Ｇｂｐｓの伝送を提供し、将来のＰＣＩバージョンでははるかに高速の伝送速度が予想されている。ＳＡＳと同様に、各ＰＣＩｅポートは、受信器およびトランシーバを含む少なくとも１つのＰｈｙを含み、それぞれが、差分信号ペアに接続される。
【０１７１】
図５６は、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラ（図５２の５２１６）用の３つの異なる設定を示す。第１の設定５６０２において、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラは、８×ＰＣＩｅリンク５６０４および１つの８×ＳＡＳリンク５６０６とインターフェイスをとる。第２の設定５６０８において、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラは、１つの８×ＰＣＩｅリンク５６１０および２つの４×ＳＡＳリンク５６１２および５６１４とインターフェイスをとる。第３の設定５６１６において、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラは、１つの８×ＰＣＩｅリンク５６１８および４つの２×ＳＡＳリンク５６２０〜５６２３とインターフェイスをとる。ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラは、種々の異なるＳＡＳ接続モードおよびＳＡＳトポロジ（構成）をサポートする。
【０１７２】
図５１に示されているように、故障許容差および高可用性を達成するため、ディスクアレイ内の各ディスクドライブの独立なデュアルポート化を可能にするために、図５２に示されるＦＣ／ＳＡＳ  ＲＡＩＤコントローラを用いるディスクアレイは一般に、少なくとも２つのＲＡＩＤコントローラを利用する。図５７は、デュアルコントローラディスクアレイにおいて、ＰＣＩｅ／ＳＡＳ  Ｉ／ＯコントローラへのディスクドライブのＳＡＳに基づく接続を示す。図５７に示される実施例の設定において、第１のＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラは、８×ＳＡＳリンクを介して第１のファンアウトエキスパンダ５７０２に相互接続される。第２のＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラは、８×ＳＡＳリンクを介して第２のＳＡＳファンアウトエキスパンダ５７０４に接続される。ファンアウトエキスパンダ５７０２および５７０４のそれぞれは次に、エッジエキスパンダ５７０８〜５７１３などの１２８個までのエッジエキスパンダに接続されることができる。エッジエキスパンダ５７０８〜５７１３のそれぞれは次に、１×ＳＡＳリンクを介して、最大１２８個のターゲットデバイス、本実施例においては、ＳＡＴＡディスクドライブ５７１６などのＳＡＴＡディスクドライブに相互接続されることができる。したがって、各ＳＡＴＡディスクドライブは、ＳＡＴＡディスクドライブ５７１６のポート５７１８などの第１のポートを介して第１のＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラに接続されてもよく、ＳＡＴＡディスク５７１６のＳＡＴＡポート５７２０などの第２のポートを介して第２のＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラに接続されてもよい。ＳＡＴＡディスクドライブは、デュアルポート型デバイスとして製作されないが、各ＳＡＴＡディスクドライブは、２ＳＡＳポートコネクタモジュールによって強化され、２つのＳＡＳポートを介した２つの異なるＳＡＳドメインへのＳＡＴＡディスクドライブの相互接続を可能にしてもよい。スイッチの異なる設定を用いて、多大な数の異なるＳＡＳトポロジ（構成）を実装することができる。
【０１７３】
図５８は、ＳＡＳによってサポートされる３つの異なるトランスポートプロトコルを示す。イニシエータデバイスは、シリアル管理プロトコル（「ＳＭＰ」）５８０６を介してＳＡＳエキスパンダ５８０２および５８０４などのＳＡＳエキスパンダと通信することができる。イニシエータは、シリアルＡＴＡトンネリングプロトコル（「ＳＴＰ」）５８１０を介してＳＡＴＡディスク５８０８にコマンドを送信し、ＳＡＴＡディスク５８０８から応答を受信することができる。イニシエータは、シリアルＳＣＳＩプロトコル（「ＳＳＰ」）５８１４を介してＳＡＳディスク５８１２にコマンドを送信し、ＳＡＳディスク５８１２から応答を受信することができる。
【０１７４】
図５２を参照して上述したように、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラ（図５２の５２１６）は、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラの設定に応じて、１つ、２つまたは４つのＳＡＳポートへの８×ＰＣＩｅリンクを介してマルチプロセッサＲＡＩＤコントローラ（図５２の５２１４）とインターフェイスをとる。図５９は、２ＳＡＳポートＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラ設定において、２つのＳＡＳポートへのマルチプロセッサＲＡＩＤコントローラのインターフェイスを示す。図５９の水平の破線５９０２の上に示されているように、デュアルコアＲＡＩＤコントローラＣＰＵは、本発明の表示された実施形態において、４つまでの異なる同時に実行中のデバイスドライバ５９０４〜５９０７をサポートすることができる。ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラは対応して、それぞれが、マルチプロセッサＲＡＩＤコントローラの上で同時に実行中のデバイスドライバ５９０４〜５９０７の１つへの機能的なインターフェイスを提供する、４つのＰＣＩｅ機能５９０８〜５９１１を提供する。２つのＳＡＳポート５９１２〜５９１３のいずれかに接続される任意のＳＡＳまたはＳＡＴＡディスクにコマンドを送信し、ＳＡＳまたはＳＡＴＡディスクから応答を受信するために、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラは本質的に、各ＰＣＩｅ機能５９０８〜５９１１を可能にする一種のスイッチとして、ＰＣＩｅ機能へのインターフェイスをとるデバイスドライバとして作用する。
【０１７５】
図６０は、図５２に示されるＲＡＩＤコントローラに含まれるＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラ（図５２の５２１６）のブロック図レベルの表現を提供する。図６０において、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラ５２１６を通るデータ、Ｉ／Ｏコマンドおよび管理コマンドの汎用経路が、両方向矢印６００２などの両方向矢印として示されている。ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラ５２１６は、（１）ＰＣＩｅ層６００４、（２）ＣＰＵサブシステム６００６、（３）グローバル共有メモリスイッチ６００８、（４）コンテクストマネジャ６０１０、（５）ＰＣＩｅトラフィックマネジャ６０１２、（６）ＳＡＳトラフィックマネジャ６０１４および（７）ＳＡＳ層６０１６を含む。ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラの種々の構成要素は、一般にＣＰＵを必要とすることなく、グローバル共有メモリスイッチ６００８を通じて、ＰＣＩｅ層からＳＡＳ層へおよびＳＡＳ層からＰＣＩｅ層への効率的かつ高速のデータ転送を可能にするように構成および配置される。Ｉ／Ｏコマンドは、最小のＣＰＵ６００６を必要とするだけで、コンテクストマネジャ６０１０によって処理および追跡される。対照的に、ＳＭＰプロトコルによって発せられるコマンドを含む管理コマンドは一般に、大きなＣＰＵサブシステム６００６を必要とするほか、内部メモリキャッシュにおけるバッファも必要とする。
【０１７６】
ＰＣＩｅ層は、ＰＣＩｅリンクから入ってきてＰＣＩｅリンクに出て行くすべてのＰＣＩｅトラフィックを管理する。ＰＣＩｅ層は、図５９を参照して説明したように、４つまでのＲＡＩＤコントローラデバイスドライバ用の４つのＰＣＩｅ機能を実装する。各ＰＣＩｅ機能は、ＲＡＩＤコントローラ／Ｉ／Ｏコントローラインターフェイスを共に含む以下に説明する待ち行列およびレジスタの集合を提供する。
【０１７７】
グローバル共有メモリスイッチ６００８は、図５９を参照してさらに一般的に記載したように、ＰＣＩｅ層６００４からＳＡＳ層６０１６に、およびＳＡＳ層６０１６からＰＣＩｅ層６００４にデータを経路指定する時分割多重化非ブロッキングスイッチである。グローバル共有メモリスイッチは、ＰＣＩｅ層とＳＡＳ層との間で交換されるデータを一時的にバッファに格納する。
【０１７８】
コンテクストマネジャ６０１０は、Ｉ／Ｏコンテクストキャッシュテーブル（「ＩＣＣＴ」）およびデバイス属性テーブル（「ＤＡＴ」）を含む。以下で説明されるこれらのデータ構造は、Ｉ／Ｏコマンドの追跡、変換および管理を可能にする。ＩＣＣＴは、ＲＡＩＤコントローラメモリにおけるＩＣＴからＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラに移動されるＩ／Ｏキャッシュテーブル（「ＩＣＴ」）エントリのキャッシュである。ＤＡＴは、Ｉ／Ｏコマンドの適切な変換および実行のために必要なデバイス属性情報を含むように、ＲＡＩＤコントローラによって初期化される。
【０１７９】
ＳＡＳ層６０１６は、図５６を参照して上述したように、１つまたは複数のＳＡＳポートのほか、共にＳＡＳポートに埋め込まれるＳＡＳ物理層と共に、ＳＡＳプロトコルを実装するＳＡＳリンク、ポートおよびトランスポート層を実装する。各ＳＡＳポートは、ＰＣＩｅ層とＳＡＳ層との間で情報の高い帯域幅の転送を達成するために、グローバル共有メモリスイッチ６００８と個別にインターフェイスをとる。ＣＰＵサブシステム６００６は、プロセッサおよび種々の密結合メモリを含み、ＳＭＰ管理コマンドを処理し、ＳＳＰエラーおよびＳＴＰエラーを処理するために、ＲＡＩＤコントローラプロセッサとの自在なインターフェイスを提供するＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラファームウェアを実行する。
【０１８０】
図６１は、ＲＡＩＤコントローラのデュアルコアプロセッサ（図５２の５２１４）で実行中のＲＡＩＤコントローラの実行ファイルが、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラ（図５２の５２１６）とインターフェイスをとるＲＡＩＤコントローラ／Ｉ／Ｏコントローラインターフェイスを示す。ＲＡＩＤコントローラ／Ｉ／Ｏコントローラインターフェイスは、水平破線６１０２の上に図６１に示されるＲＡＩＤコントローラメモリに格納される構成要素と、図６１において破線６１０２の下に示されるＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラコンテクストマネジャの中の構成要素と、を含む。ＲＡＩＤコントローラ／Ｉ／Ｏコントローラインターフェイスは、ＩＣＴ６１０４、６つの円形待ち行列６１０６〜６１１１、ＩＣＣＴ６１１４およびＤＡＴ６１１６を含む。図６１において、矢印は、ＲＡＩＤコントローラおよびＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラのどのエンティティが、種々の構成要素にデータを入力し、種々の構成要素からデータを抽出するかを示す。たとえば、ＲＡＩＤコントローラは、ＩＣＴ６１０４へのＩＣＴエントリを入力（６１２０）し、エントリをＩＣＴとＩＣＣＴ６１１４との間で前後にマイグレートし、そこからデータがＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラによって抽出される。ＲＡＩＤコントローラは、ＤＡＴ６１１６におけるＤＡＴエントリを初期化し、これはＩ／Ｏコマンドを実行するために、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラによって用いられる。一定の場合において、ＲＡＩＤコントローラは、円形待ち行列６１０６などの円形待ち行列にエントリを入力し、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラは、エントリを除去するか、またはエントリから情報を抽出する。他の場合には、データフローは、円形待ち行列６１０８などで逆転される。ある場合には、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラは、円形待ち行列６１０９に情報を入力し、および円形待ち行列６１０９から情報を抽出する。
【０１８１】
６つの円形待ち行列は、（１）ＲＡＩＤコントローラがＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラによる処理のためのＩ／Ｏ要求を入力するＩ／Ｏ要求待ち行列（「ＩＲＱ」）６１０６、（２）ＳＭＰコマンドおよび他の管理コマンドを含む、デバイスドライバとＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラの中で実行中のファームウェアとの間で転送される非同期コマンド用の自在通信チャネルを提供する、非同期要求待ち行列（「ＡＲＱ」）６１０７、（３）デバイスドライバによってＩＲＱ６１０６またはＡＲＱ６１０７の待ち行列に以前に入れられたタスクまたは要求の終了をデバイスドライバに通知するために、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラによって用いられる終了待ち行列（「ＣＱ」）６１０８、（４）ＦＣ  ＸＦＥＲ＿ＲＤＹフレームを管理するためのＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラによって用いられる転送準備待ち行列（「ＸＱ」）６１０９、（５）小さなＲＡＩＤコントローラメモリバッファをＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラに提供するために用いられる小バッファ待ち行列（「ＳＢＱ」）６１１０、および（６）ＲＡＩＤコントローラ内に大きなメモリバッファをＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラに提供するために用いられる大バッファ待ち行列（「ＬＢＱ」）６１１１を含む。
【０１８２】
図６２は、図６１を参照して上述したＲＡＩＤコントローラ／Ｉ／Ｏコントローラインターフェイスによるデータの流れを示す。Ｉ／Ｏコマンドを要求するために、ＲＡＩＤコントローラは、ＩＣＴエントリ６２０１をＩ／Ｏコマンドを記述するＩＣＴ６１０４に配置し、エントリ６２０３をＩＲＱ６１０６に配置する。ＩＲＱ６１０６は、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラによって検出されたときに、Ｉ／ＯコマンドのＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラ処理を起動する。ＩＲＱエントリは、Ｉ／Ｏコマンドを識別するトランザクションＩＤ（「ＴＩＤ」）６２０５を含み、ＩＣＴエントリ６２０１は、コマンドを記述する。コマンド処理の一部として、ＩＣＴエントリ６２０１は一般に、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラによるより高速のアクセスのために、ＩＣＣＴ６１１４に移動される。ＩＣＴエントリ６２０７は、コマンドが向けられるデバイスを記述する適切なＤＡＴエントリ６２１１を参照するフィールド６２０９を含むコマンドを記述する種々のフィールドを含む。ＩＣＴエントリはまた、ＲＡＩＤコントローラメモリバッファ６２２８〜６２３０を参照する４つまでの明確な長さ−アドレス−バッファポインタ（「ＬＡＰ」）６２１３を含むか、あるいはＬＡＰブロック６２１７〜６２１８のリンクされたリストへのポインタ６２１５を含み、それぞれが、ＲＡＩＤコントローラバッファ６２２０〜６２２４への３つのＬＡＰポインタと、およびリストにおける次のＬＡＰブロックへのポインタ６２２６と、を含み、最後のＬＡＰブロックが、リストの終わりを指定するためにＮＵＬＬポインタを有する。ＬＡＰポインタは、メモリバッファを明確に参照するか、またはＬＡＰポインタブロックのリンクされたリストに含まれるかどうかに関係なく、共に、スキャッタギャザリスト（「ＳＧＬ」）を含む。明確なＬＡＰ６２１３は、４個の個別のメモリバッファが参照される必要がある場合に限り、用いられる。Ｉ／Ｏコマンドを実行するために必要なメモリバッファの要件が、４個までの明確なＬＡＰポインタによって参照されることができる要件を超える場合には、リンクポインタ６２１５によって参照されるＬＡＰブロックリンクリストが、代わりに用いられる。ＩＣＴエントリ６２０７は、ＩＣＴエントリによって指定され、コマンドを起動するＩＲＱエントリに含まれるＴＩＤによって識別されるＩ／Ｏコマンドを実行するために、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラによって必要とされる情報のすべてを含む。コマンドが終了すると、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラは、エントリ６２３２をＣＱ待ち行列６１０８に配置し、エントリは、終了したＩ／Ｏコマンドを識別するＴＩＤ６２０５を含む。ＣＱエントリ６２３２は、ＰＣＩｅ／ＳＡＳ  Ｉ／ＯコントローラがＲＡＩＤコントローラへの通信のために、必要に応じて、ＳＣＳＩ  ＩＯに関連する応答フレームを中に配置することができるＲＡＩＤコントローラバッファ６２３８を指定するＳＢＱエントリ６２３６への参照６２３４を含んでもよい。
【０１８３】
図６３は、１つのバッファＲＥＡＤコマンドのためのスキャッタギャザリストを示す。図６３に示されているように、ＲＥＡＤ  Ｉ／Ｏコマンドを特徴付けるＩＣＴエントリ６３０４の中の１つのＬＡＰ６３０２は、その中にデータ６３０８のブロックが読み出されることになっているＲＡＩＤコントローラバッファ６３０６を指定する。
【０１８４】
図６４は、２バッファＲＥＡＤコマンド用のスキャッタギャザリストを示す。図６４において、ＩＣＴエントリ６４０２は、ディスク６４０８からのデータ読み出しが配置される２つのＲＡＩＤコントローラバッファ６４０６および６４０７を指定するために、２つのＬＡＰ６４０４〜６４０５を利用する。データ６４１０の第１の部分は、第１のホストバッファ６４０６に配置され、データ６４１２の第２の部分は、第２のホストバッファ６４０７に配置される。最後のバッファ６４１４の一部が、未使用であることに留意されたい。
【０１８５】
図６５は、ＲＡＩＤコントローラ／Ｉ／Ｏコントローラインターフェイスによって指定される以下の小段落でさらに詳細に説明する未整列の仮想ブロックＷＲＩＴＥ  Ｉ／Ｏコマンドを示す。上記および下記のように、未整列の仮想ブロックＷＲＩＴＥは、境界ブロックにおけるＲＥＡＤ修正動作を伴う。未整列のＷＲＩＴＥ  Ｉ／Ｏコマンドを作動するため、境界ブロックＲＥＡＤはそれぞれ、個別のＩＣＴエントリ６５０２および６５０４によって記述される。第１の境界ＲＥＡＤ  Ｉ／Ｏコマンドは、低位アドレス境界ブロックが読み出されることになっているＲＡＩＤコントローラバッファ６５０８を指すＬＡＰ６５０６を含む。同様に、第２の境界ブロックＲＥＡＤ動作６５１０用のＩＣＴエントリは、上位アドレス境界バッファが読み出されることになっているＲＡＩＤコントローラバッファ６５１４を参照するＬＡＰ６５１２を含む。個別のＩＣＴエントリ６５１６は、ＷＲＩＴＥ動作を記述する。ＷＲＩＴＥ  ＩＣＴエントリ６５１６は、前に読み出された下位アドレス境界ブロックを含むＲＡＩＤコントローラメモリバッファ６５０８を指すＬＡＰ６５１８と、上位アドレス境界ブロックを含むＲＡＩＤコントローラバッファ６５１４を指す第２のＬＡＰ６５２０と、を含む。残りのＬＡＰ６５２２および６５２４は、書き込まれることになっている非境界ブロックを含むＲＡＩＤコントローラバッファ６５２６および６５２８を参照する。したがって、未整列の仮想ブロックＷＲＩＴＥ動作の場合には、境界ブロックは、２つの個別のＩＣＴエントリ６５０２および６５０４によって指定されるＲＥＡＤ動作によって最初に読み出され、書き込まれることになっているデータは、境界ブロックのほか、ＷＲＩＴＥ動作を記述するＩＣＴエントリ６５２０において指定される任意の非境界ブロックを含む。ディスクから読み出される境界ブロックデータは、ＷＲＩＴＥバッファに格納されてコピーされる必要はなく、代わりに、ＷＲＩＴＥ動作のためにＳＧＬにおけるＲＥＡＤバッファを含むことによって、所定の場所で用いられる。
【０１８６】
＜ストレージブリッジ＞
低コストＳＡＴＡディスクドライブをディスクアレイに組み込むための２つの異なる戦略が、前段落において説明された。第１の手法は、１つまたは複数のストレージシェルフルータによって制御される高可用性のストレージシェルフを必要とする。第２の手法は、ＦＣ媒体を介してホストコンピュータとインターフェイスをとり、ＳＡＳ通信媒体を介してＳＡＳディスクドライブおよびＳＡＴＡディスクドライブとインターフェイスをとるＦＣ／ＳＡＳ  ＲＡＩＤコントローラを必要とする。第１の手法は、ＦＣに基づくディスクアレイコントローラソフトウェアに対する修正を必要としないが、第２の手法は、ＰＣＩｅ／ＳＡＳ  Ｉ／ＯコントローラへのＰＣＩｅリンクを介してインターフェイスをとるために、ＦＣに基づくディスクアレイコントローラソフトウェアの修正を必要とする。
【０１８７】
この小段落において、ＦＣディスクドライブに基づくディスクアレイにおいてＳＡＴＡディスクドライブを利用するための第３の技術が、記載される。図６６は、ブリッジインターフェイスカードを用いることによって、ＦＣディスクドライブに基づくディスクアレイ内のＳＡＴＡディスクドライブの使用を示す。図６６において、ディスクアレイまたはストレージシェルフ６６０２はそれぞれ、２つのＲＡＩＤコントローラまたは２つのエンクロージャＩ／Ｏカード６６０４および６６０６のいずれかを含む。ＲＡＩＤコントローラまたはエンクロージャＩ／Ｏカードは、２つのＦＣリンク６６０８および６６１０を介してコマンドおよびデータを受信し、２つの内部ＦＣループ６６１４および６６１６を介してディスクドライブ６６１２などのディスクドライブにコマンドおよびデータを経路指定し、そこからデータを受信する。ディスクドライブは、中央平面を通って内部ＦＣループに直接的に接続するデュアルポート型ＦＣディスクドライブであってもよく、またはブリッジインターフェイスカード６６２０を通って、内部ＦＣループ６６１４および６６１６に対するインターフェイスをとるＳＡＴＡディスクドライブ６６１８などのＳＡＴＡディスクドライブであってもよい。ブリッジインターフェイスカードを用いることによって、ＳＡＴＡディスクドライブは、標準的なＦＣに基づくディスクアレイの内部ＦＣループに適合されることができる。
【０１８８】
図６７は、ブリッジインターフェイスカードのブロック図レベルを例示する。ブリッジインターフェイスカード６７０２は、ＳＣＡ−２ＦＣデュアルポートコネクタ６７０４、ＳＡＴＡディスクが接続されるＳＡＴＡコネクタ６７０６、ストレージブリッジ集積回路６７０８、および電圧変換構成要素６７１０、２つのクロック６７１２および６７１４、フラッシュメモリ６７１６およびさらなるＭＯＳＦＥＴ回路６７１８をはじめとする種々のさらなる構成要素を含む。
【０１８９】
図６８は、図６７に示されるストレージブリッジ集積回路のブロック図レベル表現を示す。ストレージブリッジ集積回路は、２つのＦＣポート６８０４および６８０６、ＦＣプロトコル層６８０８、グローバル共有メモリスイッチ６８１０、ＳＡＴＡ層６８１２、ＳＡＴＡポート６８１４およびＣＰＵコンプレックス６８１６を含む。図６９は、ＣＰＵコンプレックス（図６８の６８１６）をさらに詳細に示す。図６８において２つのＦＣポート６８０４および６８０６は、ＦＣプロトコルの物理層およびリンク層の機能性を提供し、ストレージブリッジ集積回路６８０２とＦＣループ（図６６の６６１４および６６１６）との間のインターフェイスを原則的に提供し、ストレージブリッジインターフェイスカードをＲＡＩＤコントローラまたはエンクロージャＩ／Ｏカードにリンクする。ＦＣＰ層６８０８は、エクスチェンジおよびシーケンスの管理、フレーム構造に関するタスクの管理、フロー制御およびサービスのクラスを伴う上位ＦＣＰプロトコル層を実装する。ＦＣＰ層は、ＦＣＰエクスチェンジおよびシーケンスに関するコンテクストを管理し、ＦＣＰ  Ｉ／Ｏコマンドを調節する。グローバル共有メモリスイッチ６８１０は、ＦＣポートからＳＡＴＡポートにコマンドおよびデータを経路指定し、ＳＡＴＡポートからＦＣポートにデータを経路指定する時分割多重化非ブロッキングスイッチを提供する。ＳＡＴＡ層６８１２およびＳＡＴＡポート６８１４は、ＳＡＴＡプロトコルの物理層、リンク層およびトランスポート層を実装する。ＣＰＵコンプレックス６８１６は、管理機能、Ｉ／Ｏコマンドの作動および他の非データパスタスクに必要なストレージブリッジルーチンを実行する。したがって、ストレージブリッジ集積回路６８０２は、ＦＣリンクとＳＡＴＡディスクドライブとの間のスイッチおよびブリッジとして作用する。ストレージブリッジ集積回路は、ＦＣコマンドをＳＡＴＡコマンドに変換し、ＳＡＴＡドライブによって戻されるデータをＦＣＰフレームにパッケージ化する。
【０１９０】
＜二重抽象化＞
上述のように、「中間デバイス」と呼ばれるストレージシェルフ、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラまたはストレージブリッジが、一定の用途においてホストブロックとも呼ばれるより大きなサイズの仮想ブロックが、より小さいサイズのデバイスブロックにマッピングされる仮想フォーマティングを提供するとき、仮想ブロックＷＲＩＴＥ動作は一般に、未整列の境界ブロックを伴い、これはＷＲＩＴＥ動作に対して提供されない境界ブロックデータを得るために、最初に読み出し、次に、仮想ブロックＷＲＩＴＥ動作に含まれる境界ブロックデータの一部の修正後に、ディスクに書き込まれなければならない。
【０１９１】
図７０は、ストレージシェルフルータ、ＲＡＩＤコントローラ／Ｉ／Ｏコントローラまたはストレージブリッジなどの中間デバイスが、仮想フォーマティングを提供するときに、ＷＲＩＴＥ動作のために一般に必要とされるＲＥＡＤ修正動作を示す。図７０は、図７０に実線で示される対応する論理ディスクブロック７０１０、７０１２、７０１４、７０１６および７０１８に重ね合わせられる破線の矩形７００２、７００４および７００６として図７０に示される一連の仮想ブロックの仮想ブロックＷＲＩＴＥ動作を示す。第１のデバイスブロック７０１０は、別の仮想ブロックに属する第１のデータ部分７０２０のほか、第１の仮想ブロック７００２におけるデータの第１の部分に対応する第２のデータ部分７０２２を含む。同様に、最後のデバイスブロック７０１８は、最終の仮想ブロック７００６の最終部分を含む第１の部分７０２４と、次の仮想ブロックに属するデータを含む第２の部分７０２６と、を含む。仮想ブロックＷＲＩＴＥ動作は、バッファ７０３０に仮想ブロック７００２、７００４および７００６用のデータのみを提供する。したがって、仮想ブロックＷＲＩＴＥ動作を実行するために、第１のデバイス論理ブロック７０１０は、メモリバッファ７０３２（第１の境界バッファ）に読み出され、最終のデバイス論理ブロック７０１８は、第２のメモリバッファ７０３４（最後の境界バッファ）に読み出される。次に、メモリバッファ７０３０における第１の仮想ブロック７００２の部分７０３８が、第１の境界バッファ７０３２の最終の部分に転送され、最終の仮想ブロックの部分７０３８が、最後の境界バッファの第１の部分に転送される。次に、デバイスブロックＷＲＩＴＥ動作が、ディスクドライブに対して行われる。第１の境界バッファ７０３２は、第１のデバイスブロック７０１０に書き込まれ、デバイスブロック７０１２、７０１４および７０１６に対応するメモリバッファ７０３０に格納されたデータが、デバイス論理ブロック７０１２、７０１４および７０１６に書き込まれ、最後に、最後の境界ブロックバッファ７０３４の内容が、最終の論理デバイスブロック７０１８に書き込まれる。要約すると、仮想ブロック７００２、７００４および７００６のＷＲＩＴＥは、境界デバイスブロック７０１０および７０１８のＲＥＡＤ修正動作、および非境界デバイス論理ブロック７０１２、７０１４および７０１６に対するＷＲＩＴＥ動作に変換される。
【０１９２】
ＲＥＡＤ修正動作は、特に少数のデバイスブロックを伴う個別のＷＲＩＴＥ動作に関するデータ転送混乱およびデータ転送の非能率を生じる可能性がある。ブロックを最初に読み出して次に書き込むことは、回転サイクルの損失を伴い、ディスクドライブコントローラおよび物理ディスクドライブレベルにおけるＲＥＡＤ動作とＷＲＩＴＥ動作との間の移行を伴う他の非能率を伴う可能性がある。このため、ストレージシェルフルータ、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラおよびストレージブリッジインターフェイスカードをはじめとする中間デバイスの設計者および製造者は、未整列の仮想ブロックＷＲＩＴＥ動作中にデバイス境界ブロックにおけるＲＥＡＤ修正動作によって生じる非能率およびデータ転送の混乱を被ることなく、仮想フォーマティングを提供する必要性を認識している。
【０１９３】
未整列の仮想ブロックＷＲＩＴＥ動作中に境界ブロックに関するＲＥＡＤ修正動作を除去するための１つの手法は、仮想ブロックにおいてＷＲＩＴＥ動作の粒度を拡大し、整列単位を含む最小に対応するようにすることである。整列単位（「ＡＵ」）は、デバイスブロックの対応する集合と正確に整列された仮想ブロックの連続集合である。仮想ブロックではなく、ＡＵを書き込むことによって、未整列の仮想ブロックＷＲＩＴＥ動作は生じない。
【０１９４】
図７１は、仮想ブロックがデバイスブロックより大きい場合の整列単位と、整列単位に関する計算を示している。図７１において、実線７１０２で表されるデバイスブロックのシーケンスは、図の中央部分に水平方向に表示される。デバイスブロックは、ｎ，ｎ＋１，ｎ＋２，．．．，ｎ＋８と番号付けされる。デバイスブロックの番号付けは、デバイスブロック７１０２の表示の下に示される。垂直方向の破線を用いて、対応する仮想ブロックの表示が、デバイス論理ブロックの表示の上に重ね合わせられる。仮想ブロックは、仮想ブロック番号、ｍ，ｍ＋１，ｍ＋２，．．．，ｍ＋７でラベル付けされる。仮想ブロックの番号付けは、デバイスブロック７１０２の表示の上に示される。仮想ブロックのサイズとデバイスブロックのサイズとの間の差Δ７１０４は、第１のデバイスブロックｎの上位アドレス境界７１０６と第１の仮想ブロックｍの上位アドレス境界７１０８との間の距離として、図７１のように示されている。ＡＵ７１１０の中の連続ブロックに関して、連続デバイスブロックの上位アドレス境界と連続仮想ブロックの上位アドレス境界との間のバイト単位の距離は、各連続デバイスブロックおよび仮想ブロックに関してΔだけ増大する。たとえば、仮想ブロックｍ＋１の上位アドレス境界の位置とデバイスブロックｎ＋１の位置の間の差は、２Δ（図７１の７１１２）である。５７６バイトの仮想ブロック長さおよび５１２バイトのデバイスブロック長さは、図７１に示される実施例を生成するために用いられた。しかし、図７１に示されるパラメータおよび計算は一般に、適用される。
【０１９５】
図７１に示される特定の場合において、１つのＡＵ７１１０の中に８個の仮想ブロックおよび９個のデバイスブロックがある。ＡＵは連続的に、デバイスブロック空間および仮想ブロック空間に広がる。ＡＵは、デバイスブロック空間および仮想ブロック空間の両方に同時にマッピングされることができる超仮想ブロックとみなされることができる。ＡＵにおいて、第１のデバイスブロックｎおよび第１の仮想ブロックｍは、下位アドレスブロック境界に完全に整列され、最終のデバイスブロックｎ＋８および最終の仮想ブロックｍ＋７は上位アドレスブロック境界に完全に整列された。ＡＵにおける仮想ブロックの数ｖｉｒｔｕａｌＰｅｒＡＵは、以下のように計算される。
【数４】
2011504632.tif 000012
式中、ＬＣＭ（ｘ、ｙ）は、最小公倍数の関数であり、ｎｘｘ＊ｎｙｙ＝ｍに関する最小のｍを返し、ｎｘ、ｎｙは整数である。
ｄｅｖｉｃｅＬｅｎは、デバイスブロックの長さであり、
ｖｉｒｔｕａｌＬｅｎは、仮想ブロックの長さである。
ＡＵの中のデバイスブロックの数ｄｅｖｉｃｅＰｅｒＡＵは、以下のように計算されることができる。
【数５】
2011504632.tif 000013
下位アドレスＡＵ境界７１１４で、ＡＵにおける第１のデバイスブロックのデバイスブロックアドレスｎは、ＡＵ当たりのデバイスブロックの数によって等しく分割可能である。同様に、ＡＵにおける第１の仮想ブロックの仮想ブロックアドレスｍは、ＡＵにおける仮想ブロックの数または仮想ブロックによって等しく分割可能である。さらに、ｎが周知であるとき、ｍは以下のように計算されることができる。
【数６】
2011504632.tif 000014
仮想ブロックアドレスｍが周知であるとき、デバイスブロックｎは以下のように計算されることができる。
【数７】
2011504632.tif 000015
【０１９６】
仮想ブロックＷＲＩＴＥ動作中のＲＥＡＤ修正動作を回避するために、書き込まれることになっている仮想ブロックを含む連続ＡＵの最小数が、代わりに書き込まれるべきである。たとえば、図７１に示される実施例において、仮想ブロックｍ＋３およびｍ＋４が、仮想ブロックｍ＋３およびｍ＋４のみに書き込まれるのではなく、仮想ブロックＷＲＩＴＥ動作において書き込むために指定され、デバイスブロックｎ＋３およびｎ＋５におけるＲＥＡＤ修正動作のほか、デバイスブロックｎ＋４の書き込みを伴う場合には、ＡＵ７１１０を含む全体が、代わりに書き込まれる必要がある。全体的なＡＵまたはＡＵの連続シーケンスが書き込まれる場合には、ＲＥＡＤ修正動作を必要とする整列および境界ブロックはない。
【０１９７】
図７２は、仮想ブロックサイズがデバイスブロックサイズより小さい場合の、整列単位に関連するパラメータおよび計算を示す。図７２は、図７１に用いられるものと同一の説明の規則を用いる。図７２に示される計算は、種々の項の符号のみが、図７１に示されるものと異なることが容易に観察される。
【０１９８】
図７３は、５１２バイトのデバイスブロック長さおよび５２０バイト〜５７６バイトの範囲の仮想ブロック長さに関する整列単位に関連するパラメータを示す表６を示す。表６において、仮想ブロック長さとデバイスブロック長さとの間の差のサイズΔは、各デバイスブロック長さ／仮想ブロック長さの組み合わせに関して示され、Δによって表される仮想ブロック長さの割合が、最終列に示される。表６において分かるように、長さΔが、第１の行７３０２の８から最後の行７３０４の６４まで増大されるため、Δによって表される仮想ブロック長さの割合は、１．５％から１１．１％にまで増大する。しかし、ＡＵ当たりのデバイスブロックの数は、６５から９に減少する。
【０１９９】
前段落において説明されるように、ストレージシェルフルータおよび他の中間デバイスのある実施形態において、仮想ブロック長さとデバイスブロック長さとの間のΔは、デバイスレベルに含まれるさらなるエラー検出データおよびエラー補正データを含むために導入されてもよい。他の実施形態において、Δは、ホストコンピュータなどのより高位のエンティティに適用されるブロックとデバイスブロックとの間の長さにおける差を表す。
【０２００】
図７４は、仮想ブロックＷＲＩＴＥ動作に関して指定された仮想ブロックの連続数を含むＡＵの最小連続数の最初の仮想ブロックアドレスおよび最終の仮想ブロックアドレスの計算を示す。図７４において、２つの仮想ブロック７４０２は、書き込みのために指定される。第１の仮想ブロックは、アドレスＶＬＢＡｉｎｉｔｉａｌを有し、最後の仮想ブロックは、仮想ブロックアドレスＶＬＢＡｆｉｎａｌを有する。ＡＵの最小のシーケンスの第１の仮想ブロックの仮想ブロックアドレスは、図７４に示されるように、以下のように計算されることができる。
【数８】
2011504632.tif 000016
ＡＵの最小のシーケンスの最終の仮想ブロックは、以下のように計算される。
【数９】
2011504632.tif 000017
図７１に関して上述したように、ＡＵの左端および右端におけるデバイスブロックのデバイスブロックアドレスは、ＡＵの第１のブロックの仮想ブロックアドレスから容易に計算される。
【０２０１】
図７５は、本発明の一実施形態を表す二重抽象化法を示す。図７５に示されているように、抽象化７５０２の第１のレベルで、５２０バイト仮想ブロックは、５２０バイト仮想ブロックをＳＡＴＡディスクドライブの５１２バイトデバイスブロックに最終的にマッピングするストレージシェルフルータ、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラまたはストレージブリッジ集積回路などの中間デバイスによってサポートされる。前の小段落で説明したように、Δ差７５０４などの５２０バイト仮想ブロックと５１２バイトデバイスブロックとの間のΔ差は、さらなるエラー検出データおよびエラー補正データを含んでもよい。上述のように、未整列の仮想ブロックＷＲＩＴＥ動作におけるＲＥＡＤ修正動作を回避するためのＡＵに基づく技術が、用いられることになっており、図７３の表６に示されているように、ＡＵ当たりのデバイスブロックの数は、６５となる。したがって、ＷＲＩＴＥ動作に関するバイト単位の粒度（granularity）は、３２．５Ｋとなる。一定の場合には、３２．５Ｋの粒度ＷＲＩＴＥ動作は、ＲＥＡＤ修正動作を回避することによって、未整列の仮想ブロックＷＲＩＴＥ動作のためのＲＥＡＤ修正動作を有する５１２バイト粒度ＷＲＩＴＥ動作よりよいデータ転送効率を提供してもよい。しかし、他の場合には、特に、各ＷＲＩＴＥ動作において転送される余分なバイトが効果的にキャッシュに格納されることができず、次のＲＥＡＤ動作のために再使用されることができない場合には、３２．５Ｋの粒度ＷＲＩＴＥ動作は、ＲＥＡＤ修正動作の回避にもかかわらず、データ転送効率にほとんどまたは全く改善を得られない結果に終わる可能性がある。したがって、本発明の一実施形態において、５２０バイト仮想ブロックは、さらに大きな中間仮想ブロック７５０４にマッピングされ、各中間仮想ブロックが５２０バイト仮想ブロックの５２０バイトのほか、中間仮想ブロック７５１０におけるパッド７５０８などのさらなる長さのパディングバイトを含む。中間仮想ブロックは次に、仮想フォーマティングの第２のレベルによって、５１２バイトデバイスブロック７５１２にマッピングされる。
【０２０２】
図７６は、長さ０〜１２０バイトの中間仮想ブロックパディングのためのＡＵ関連パラメータおよび特性を提供する表７を示す。図７６において分かるように、パッド長さが第１の行７６０４における０から最後の行７６０６における１２０バイトまで増大するとき、ＡＵ当たりのデバイスブロックの数は、６５から５に減少する。したがって、たとえば、８の長さのパッド長さを用いることにより、表７の行７６０８に示されているように、ＡＵ当たりのデバイスブロックの数は３３となり、パディングバイトが用いられない３３ＫＢの粒度ＷＲＩＴＥ動作ではなく、１６．５ＫＢの粒度ＷＲＩＴＥ動作を生じる。しかし、表７の最後の列７６０６に示されているように、パディングによって表される無駄空間の量は、パディングが用いられないときの０％から各中間仮想ブロックに関して１２０バイトのパディングが用いられる時の２３％まで増大する。一般にパディングバイトのための使用はないため、パディングに用いられるバイトの数は本質的に無駄空間である。したがって、無駄空間は、ＡＵのサイズを減少することと引き換えられ、それにより、ＷＲＩＴＥ動作の粒度を減少させる。
【０２０３】
図７７は、図７６に示される表７に表されるトレードオフを示す。８バイトの倍数であるパッドサイズが、水平軸７６０２にプロットされる。左側の垂直軸７６０４には、ＡＵ当たりのデバイスブロックの数がプロットされる。曲線７６０８は、パッドサイズの関数として、ＡＵ当たりのデバイスブロックの数を表す。図７７においてグラフによって表示されているように、ＡＵ当たりのデバイスブロックの数およびしたがって、ＷＲＩＴＥ動作の粒度は、最初はパッドサイズの増大と共に、２４バイトのパッドサイズまで急速に減少し、その後で、２４バイトから１２０バイトまではるかに緩慢に減少する。無駄空間の割合は、右側の垂直軸７６１０にプロットされる。線７６１２は、パッドサイズの関数として、無駄空間の割合を表す。図７７において分かるように、無駄空間の割合は、パッドサイズに対して線形に増大する。したがって、ＡＵ長さ対無駄空間の割合を最適化することは、第１の解析において、８バイト〜５６バイトの比較的小さいパッドサイズの場合に優先傾向を示す。しかし、パッドサイズの選択時に、さらなる考慮事項が一般に適用される。多くの場合には、ディスクドライブおよび通信システム、データがディスクドライブに転送される中間デバイスの物理特性に応じて、最適の仮想ブロックＷＲＩＴＥ動作粒度がある。本発明の一実施形態において、５１２バイトのデバイスブロックにマッピングされる５２０バイトの仮想ブロックの場合には、８バイトのパッドサイズが最適であることが分かっている。図７７に示されるグラフにおける曲線の形状が、８ブロックの倍数のパッドサイズに特有であることに留意すべきである。他のパッドサイズの場合には、異なる曲線が得られるであろう。
【０２０４】
＜ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラ用の仮想フォーマティング法＞
前の小段落において、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラのアーキテクチャは、図５２および図６０〜図６２を参照して説明した。このアーキテクチャの特徴は、仮想ブロックＷＲＩＴＥ動作中に、境界ブロック用のＲＥＡＤ修正動作中にディスクからのデータの読み出しを格納するために、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラによって用いられるバッファが、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラメモリではなく、ＲＡＩＤコントローラメモリバッファ（図５２の５２１２）に含まれることである。このため、未整列の仮想ブロックＷＲＩＴＥ動作は、以下に記載するように、さらなる境界ブロックを含んでもよい。このため、仮想フォーマティングの計算および方法は、前の小段落に記載したストレージシェルフルータにおいて用いられる計算および方法とはＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラで異なる。
【０２０５】
図７８は、さらなる境界ブロックの必要性を示す。図７８において、ＲＡＩＤコントローラメモリ８３０２は、仮想ブロックマップ８３０４と整列されることが示されており、この仮想ブロックマップ８３０４は次に、前の図において用いられた説明の規則を用いて、仮想ブロックが中間デバイスによってマッピングされる対応するデバイスブロック８３０６と整列される。２つのブロックの仮想ブロックＷＲＩＴＥ動作を考える。２つの仮想ブロック８３０８は、デバイスに書き込まれることになっている。上述のように、未整列である仮想ブロックＷＲＩＴＥ動作が、デバイス境界ブロック８３１０および８３１２に向けられるＲＥＡＤ修正動作を必要とする。しかし、ＲＥＡＤ修正動作のＲＥＡＤ動作部分によって読み出されるデータは、ＰＣＩｅ／ＳＡＳ  Ｉ／ＯコントローラからＰＣＩｅリンクを通ってＰＣＩｅルートコンプレックスおよびＲＡＩＤコントローラメモリ（図５２の５２１０および５２１２）に送信される必要があるため、中間デバイスは、全体的な隣接仮想ブロック８３１５および８３１８用のバッファの内容を満たすために、さらなる境界ブロック８３１４および８３１６にさらなる情報を得ることが必要である。言い換えれば、デバイスブロックへの２つの仮想ブロックのマッピングは、デバイス境界ブロック８３１０および８３１２を結果として生じるが、書き込まれることになっている仮想ブロックに属さないこれらの２つの境界ブロックにおけるデータの部分は、隣接仮想ブロックに対応するホストメモリのメモリバッファに格納されなければならず、隣接仮想ブロック８３１５および８３１８の内容全体を得るために、さらなるデバイス境界ブロック８３１４および８３１６の読み出しを必要とする。ブロックの内容は、転送中にエラー状態のために検査される可能性があり、これらの検査は、隣接仮想ブロックが有効データを含まない限り、失敗となることから、隣接仮想ブロックの部分的な内容は、ＲＡＩＤコントローラメモリに転送されることはできない。
【０２０６】
図７９は、仮想ブロックサイズがデバイスブロックサイズより小さい場合に、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラに関する仮想フォーマティングの考慮事項を示す。図７９は、図７４において用いられるのと同一の説明の規則を用いる。図７９は、２つの仮想ブロックの３つのセグメント用の仮想ブロックＷＲＩＴＥ動作を示す。すなわち、（１）２つの対応するデバイスブロック８４０４と右側で整列される第１のセグメント８４０２、（２）２つの対応するデバイスブロック８４０８と左側で整列される第２の仮想ブロックセグメント８４０６および（３）２つの対応するデバイスブロック８４１２と完全に整列される第３の仮想ブロックセグメント８４１０である。３つのすべての場合において、仮想ブロック長さがデバイスブロックの長さを超える場合と同様に、その全体において、ＲＡＩＤコントローラメモリに送信される必要がある隣接仮想ブロックを完全に満たすために、各境界ブロック用のさらなるデバイスブロックは、読み出される必要があってもよい。したがって、仮想ブロック８４０２の仮想ブロックＷＲＩＴＥ動作に関して、隣接仮想ブロック８４１８を完全に満たすために、境界ブロック８４１６の前のさらなるデバイスブロック８４１４が、読み出される必要がある。
【０２０７】
未整列の仮想ブロック書き込みに関して、ＲＡＩＤコントローラは、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラに、各未整列の仮想ブロックセグメント境界に隣接するさらなるＲＡＩＤコントローラ仮想ブロックバッファを備えなければならない。ＲＡＩＤコントローラによって供給される仮想ブロックバッファを完全に満たすために、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラは、各未整列の境界に関して、境界ブロックだけでなく、さらなる隣接デバイスブロックを読み出す必要がある。
【０２０８】
ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラのために必要な仮想フォーマティング計算は、以下のＣ＋＋のような擬似コードでカプセル化される。第一に、複数の定数およびタイプの定義が提供される。
【数１０】
2011504632.tif 000018
【０２０９】
定数「ＶＢＳＺ」は、仮想ブロックサイズである。定数「ＤＢＳＺ」は、デバイスブロックサイズである。定数「ＶｐｅｒＡＵ」および「ＤｐｅｒＡＵ」はそれぞれ、整列単位における仮想ブロックの数およびデバイスブロックの数である。定数「ＡＵＳＺ」は、整列単位におけるバイト数である。タイプ「ｂｕｆｐｔｒ」は、文字ポインタである。
【０２１０】
次に、複数のルーチンが宣言される。
【数１１】
2011504632.tif 000019
【０２１１】
ルーチン「ＬＣＭ」は、独立変数「ｘ」および「ｙ」として供給される２つの数の最小公倍数を計算し、計算された最小公倍数を戻り値として返す。ルーチン「ＤＲｅａｄ」は、指定したポインタに指定した数のデバイスブロックを読み出す物理的なデバイスブロックＲＥＡＤユーティリティであり、アドレス「Ｄｓ」を有するデバイスブロックから始まる。ルーチン「ＤＷｒｉｔｅ」は、指定したポインタからアドレス「Ｄｓ」を有するデバイスブロックで始まるデバイスまで指定された数のデバイスブロックを書き込む物理的なデバイスブロックＷＲＩＴＥユーティリティである。ルーチン「ＬＣＭ」が一般に利用可能な数学ライブラリルーチンであり、物理的なＲＥＡＤルーチンおよびＷＲＩＴＥルーチンは、本説明の範囲を超えるほか、デバイスおよびコントローラオペレーティングシステムに左右されるため、これらのルーチンの実装については提供しない。
【０２１２】
次に、ルーチン「ｃｏｍｐｕｔｅＦｉｒｓｔＬｅｖｅｌＭａｐｐｉｎｇ」は、指定した仮想ブロックアドレスおよび仮想ブロックの数から、対応する最初のデバイスブロックアドレス「Ｄｓ」、最後のデバイスブロックアドレス「Ｄｆ」、第１のデバイスブロックにおける未使用のバイト「ＤｓＸ」および最後のデバイスブロックにおける未使用のバイト「ＤｆＸ」を計算する。
【数１２】
2011504632.tif 000020
【０２１３】
６行目では、仮想ブロックの指定された実行の後の第１の仮想ブロックの仮想ブロックアドレスが、計算される。７行目では、第１の仮想ブロックのバイトアドレスが、計算される。８〜１２行目では、デバイスブロックの対応する実行において未使用のバイトの最初の数および最後の数と共に、第１のデバイスブロックアドレスおよび最後のデバイスブロックアドレスが計算される。
【０２１４】
次に、ルーチン「ｃｏｍｐｕｔｅＡＵＭａｐｐｉｎｇ」は、指定された最初のデバイスブロックアドレスおよび最後のデバイスブロックアドレスに関するデバイスブロックの実行を含む整列単位の最小の実行に関する最初のデバイスブロックアドレスおよび最後のデバイスブロックアドレスを計算する。
【数１３】
2011504632.tif 000021
【０２１５】
次に、第１の仮想ブロックアドレス「Ｖｓ」で始まる指定した数の仮想ブロック「ｎｕｍＢｌｏｃｋｓ」に対応するデバイスブロックを読み出し、仮想ブロックの内容をポインタ「ｂｕｆｆｅｒ」によって参照されるバッファに配置するルーチン「ＶＲｅａｄ」が、提供される。
【数１４】
2011504632.tif 000022
【０２１６】
ルーチン「ＶＲｅａｄ」は、６行目で関数「ｃｏｍｐｕｔｅＦｉｒｓｔＬｅｖｅｌＭａｐｐｉｎｇ」を呼び出すことによって、対応するデバイスブロックアドレスを最初に計算する。８行目で決定されるように、第１の仮想ブロックが整列されていない場合には、１０〜１３行目で、第１のデバイスブロックは、スクラッチバッファに読み出され、１つまたは複数の最初の仮想ブロックに対応する部分が、バッファに転送される。次に、第１のデバイスブロックと最後のデバイスブロックとの間にさらなるデバイスブロックがある場合には、１７〜１８行目で、それらがバッファに読み出される。２０行目で決定されるように、最後のデバイスブロックが整列されていない場合には、２２〜２３行目で、最後のブロックが、スクラッチバッファに読み出され、適切なバイトがバッファに転送される。別の場合には、２５行目で、最後のデバイスブロックが、バッファに直接的に読み出される。
【０２１７】
次に、仮想ブロックの実行を整列単位を含む１つまたは複数の対応する実行に変換し、変数における整列単位の実行の仮想ブロックアドレスを返し、戻り値として整列単位の数を返す、ルーチン「ＶＧｅｔＡＵ」が提供される。ルーチン「ＶＧｅｔＡＵ」は、デバイスへの書き込みのために、仮想ブロックの実行を整列単位の実行に変換するために呼び出される。
【数１５】
2011504632.tif 000023
【０２１８】
最後に、複数の整列単位をデバイスに書き込むルーチン「ＶＷｒｉｔｅ」が提供される。
【数１６】
2011504632.tif 000024
【０２１９】
本発明は、特定の実施形態に関して記載してきたが、本発明は、これらの実施形態に限定されることを意図していない。本発明の範囲内の修正は、当業者には明白であろう。たとえば、本発明の方法の実施形態は、ストレージブリッジ集積回路、ＰＣＩｅ／ＳＡＳ  Ｉ／Ｏコントローラおよびストレージシェルフルータをはじめとする種々の中間デバイスにおいて用いるため、または中間デバイスおよびより高位のデバイスの組み合わせにおいて実装するために、ファームウェア、ソフトウェア、ハードウェア、または２つ以上のファームウェア、ソフトウェアおよびハードウェアの組み合わせにおいて実装されることができる。実装は、無数の異なるデータ構造、制御構造、変数、プログラミング言語および他のそのような馴染みのある実装パラメータおよび特性を用いることができる。
【０２２０】
仮想フォーマティング法および二重抽象化法において、多くの異なる仮想ブロックサイズやデバイスブロックサイズが許容される。二重抽象化法で使われるパッド長さは、可能な最高のデータ転送レート等を達成するために異なる基準に基づいて選択される。上述したように、本発明の各種実施形態で示される仮想ディスクフォーマティング技術は、ほとんど無制限数の仮想ディスクフォーマットインターフェースを外部処理エンティティに提供し、それにより内部ディスクフォーマットを外部処理エンティティから分離させるストレージシェルフルータによって利用される。本発明の方法によりあらゆるサイズの仮想セクタがあらゆるサイズの物理セクタにマッピング可能となる。このことはストレージシェルフルータが、各セクタが追加のエラー検出情報を含むことを可能にし、かつ外部処理エンティティによって予期せぬフォーマッティング仕様の使用を許容することのみならず、仮想ディスクフォーマティング技術が他の目的で使われることを可能とする。例えば、仮想ディスクフォーマティングは、非常に安全なデータストレージを提供するためにストレージシェルフルータが仮想セクタを拡大してエンコードすることを可能にする。他の例では、ストレージシェルフルータが、ディスクドライブ内で十分で冗長なデータを格納するために仮想ディスクフォーマティングを使い、それにより個々のセクタ内あるいはセクタ境界で発生する多くの種類のデータエラーを検出することのみならずそれを訂正することができる。仮想ディスクフォーマティングの多くの異なる形態を実施するためにほとんど無制限の各種ハードウェア、ファームウェア、およびソフトウェアのコンポーネントが利用され得る。当業者にとってはストレージシェルフルータ、内部ディスクドライブおよび他のストレージシェルフのコンポーネントの仕様や容量に応じて数多くの最適化が可能である。
【０２２１】
前述の説明は、説明目的のために、本発明の全体的な理解を提供するために具体的な用語を用いた。しかし、具体的な詳細は、本発明を実行するために必要ではないことは当業者には明白であろう。他の場合には、公知の回路およびデバイスが、根本にある本発明から不必要な余計なものを回避するために、ブロック図の形態で示される。したがって、本発明の具体的な実施形態の前述の説明は、例示および説明の目的のために提示され、網羅することも開示された正確な形態に本発明を限定することも意図しておらず、上述の教示に鑑みて多くの修正および変形が可能である。実施形態は、本発明の原理およびその実際的な用途を最もよく説明するために選択されて記載されており、それにより、当業者は検討される特定の用途に合わせて種々の変更を行い、本発明および種々の実施形態を最もよく利用することが可能となる。本発明の範囲は、以下の特許請求の範囲およびその等価物によって定義されることを意図している。
【図１Ａ】
2011504632.tif 000025
【図１Ｂ】
2011504632.tif 000026
【図１Ｃ】
2011504632.tif 000027
【図２】
2011504632.tif 000028
【図３】
2011504632.tif 000029
【図４】
2011504632.tif 000030
【図５】
2011504632.tif 000031
【図６Ａ】
2011504632.tif 000032
【図６Ｂ】
2011504632.tif 000033
【図６Ｃ】
2011504632.tif 000034
【図７Ａ】
2011504632.tif 000035
【図７Ｂ】
2011504632.tif 000036
【図８Ａ】
2011504632.tif 000037
【図８Ｂ】
2011504632.tif 000038
【図８Ｃ】
2011504632.tif 000039
【図８Ｄ】
2011504632.tif 000040
【図９】
2011504632.tif 000041
【図１０】
2011504632.tif 000042
【図１１】
2011504632.tif 000043
【図１２】
2011504632.tif 000044
【図１３Ａ】
2011504632.tif 000045
【図１３Ｂ】
2011504632.tif 000046
【図１３Ｃ】
2011504632.tif 000047
【図１４Ａ】
2011504632.tif 000048
【図１４Ｂ】
2011504632.tif 000049
【図１５】
2011504632.tif 000050
【図１６Ａ】
2011504632.tif 000051
【図１６Ｂ】
2011504632.tif 000052
【図１６Ｃ】
2011504632.tif 000053
【図１６Ｄ】
2011504632.tif 000054
【図１６Ｅ】
2011504632.tif 000055
【図１６Ｆ】
2011504632.tif 000056
【図１６Ｇ】
2011504632.tif 000057
【図１７Ａ】
2011504632.tif 000058
【図１７Ｂ】
2011504632.tif 000059
【図１７Ｃ】
2011504632.tif 000060
【図１７Ｄ】
2011504632.tif 000061
【図１７Ｅ】
2011504632.tif 000062
【図１７Ｆ】
2011504632.tif 000063
【図１８】
2011504632.tif 000064
【図１９】
2011504632.tif 000065
【図２０】
2011504632.tif 000066
【図２１】
2011504632.tif 000067
【図２２】
2011504632.tif 000068
【図２３】
2011504632.tif 000069
【図２４】
2011504632.tif 000070
【図２５】
2011504632.tif 000071
【図２６Ａ】
2011504632.tif 000072
【図２６Ｂ】
2011504632.tif 000073
【図２６Ｃ】
2011504632.tif 000074
【図２６Ｄ】
2011504632.tif 000075
【図２６Ｅ】
2011504632.tif 000076
【図２７】
2011504632.tif 000077
【図２８】
2011504632.tif 000078
【図２９】
2011504632.tif 000079
【図３０】
2011504632.tif 000080
【図３１】
2011504632.tif 000081
【図３２】
2011504632.tif 000082
【図３３】
2011504632.tif 000083
【図３４】
2011504632.tif 000084
【図３５】
2011504632.tif 000085
【図３６Ａ】
2011504632.tif 000086
【図３６Ｂ】
2011504632.tif 000087
【図３７Ａ】
2011504632.tif 000088
【図３７Ｂ】
2011504632.tif 000089
【図３７Ｃ】
2011504632.tif 000090
【図３７Ｄ】
2011504632.tif 000091
【図３８Ａ】
2011504632.tif 000092
【図３８Ｂ】
2011504632.tif 000093
【図３９】
2011504632.tif 000094
【図４０】
2011504632.tif 000095
【図４１】
2011504632.tif 000096
【図４２】
2011504632.tif 000097
【図４３】
2011504632.tif 000098
【図４４】
2011504632.tif 000099
【図４５】
2011504632.tif 000100
【図４６】
2011504632.tif 000101
【図４７】
2011504632.tif 000102
【図４８】
2011504632.tif 000103
【図４９】
2011504632.tif 000104
【図５０】
2011504632.tif 000105
【図５１】
2011504632.tif 000106
【図５２】
2011504632.tif 000107
【図５３】
2011504632.tif 000108
【図５４】
2011504632.tif 000109
【図５５】
2011504632.tif 000110
【図５６】
2011504632.tif 000111
【図５７】
2011504632.tif 000112
【図５８】
2011504632.tif 000113
【図５９】
2011504632.tif 000114
【図６０】
2011504632.tif 000115
【図６１】
2011504632.tif 000116
【図６２】
2011504632.tif 000117
【図６３】
2011504632.tif 000118
【図６４】
2011504632.tif 000119
【図６５】
2011504632.tif 000120
【図６６】
2011504632.tif 000121
【図６７】
2011504632.tif 000122
【図６８】
2011504632.tif 000123
【図６９】
2011504632.tif 000124
【図７０】
2011504632.tif 000125
【図７１】
2011504632.tif 000126
【図７２】
2011504632.tif 000127
【図７３】
2011504632.tif 000128
【図７４】
2011504632.tif 000129
【図７５】
2011504632.tif 000130
【図７６】
2011504632.tif 000131
【図７７】
2011504632.tif 000132
【図７８】
2011504632.tif 000133
【図７９】
2011504632.tif 000134
【国際調査報告】
2011504632.tif 000135
2011504632.tif 000136