(57)【要約】本発明は、送信元コンピュータシステムとブロックデータストレージデバイス（２６）を有する送信先コンピュータシステムとの間でデータを伝送する機能を提供するものである。送信先コンピュータシステムは送信元コンピュータシステムに対してリモートであり、この機能は使用するブロックデータストレージデバイス（２６）のタイプに対してインターフェイス依存性が無い。一つの実施形態においては、ブロックデータストレージデバイス（２６）に対してインターフェイス依存性が無いコマンドセットを実行する仮想デバイスドライバが用いられる。
2005527007.tif 000002
【特許請求の範囲】
【請求項１】
データブロックの保存に使用するコンピュータ構造において、
パケットプロトコルに従って通信をネットワークインフラストラクチャに／から、送信する／受信する機能を有するストレージデバイスネットワークインターフェイスと、
通信をブロックデータストレージデバイスに／から、送信する／受信する機能を有するブロックストレージデバイスインターフェイスと、
ブロックストレージデバイスプロセッサを有するストレージデバイスオペレーティングシステムとを含むネットワーク接続型ストレージデバイスを備え、前記ブロックストレージデバイスプロセッサは、
前記ストレージデバイスネットワークインターフェイスから、ブロックデータストレージデバイスに対してインターフェイス依存性の無い、ネットワークコマンドセットのネットワークコマンドを受信し、
前記ネットワークコマンドを実行するためにブロックデータストレージデバイス用の一つ以上のデバイス固有コマンドを生成し、
前記一つ以上のデバイス固有コマンドの各々を前記ブロックストレージデバイスインターフェイスに送信し、
前記ブロックストレージデバイスインターフェイスから前記ネットワークコマンドを満足させる、前記一つ以上のデバイス固有コマンドに対する応答を受信し、
前記ストレージデバイスネットワークインターフェイスに前記ネットワークコマンドに対する前記応答を送信する、コンピュータ構造。
【請求項２】
前記ネットワークコマンドセットは、リードネットワークコマンドを含む請求項１記載のコンピュータ構造。
【請求項３】
前記ネットワークコマンドセットは、リードネットワークコマンド及びライトネットワークコマンドを含む請求項１記載のコンピュータ構造。
【請求項４】
前記ネットワークコマンドセットは、ネットワーク接続に関するコマンドを含む請求項１記載のコンピュータ構造。
【請求項５】
ネットワーク接続に関する前記コマンドは、ネットワーク接続を切断する切断コマンドを含む請求項４記載のコンピュータ構造。
【請求項６】
ネットワーク接続に関する前記コマンドは、ネットワーク遅延を求めるために使用するｐｉｎｇコマンドを含む請求項４記載のコンピュータ構造。
【請求項７】
ブロックストレージデバイスプロセッサを備える前記ストレージデバイスオペレーティングシステムは、ワーク・キュー及びワーク・スレッドを生成する機能を有する監視装置を含む請求項１記載のコンピュータ構造。
【請求項８】
ブロックストレージデバイスプロセッサを備える前記ストレージデバイスオペレーティングシステムは、リクエスト管理装置を含む請求項１記載のコンピュータ構造。
【請求項９】
ブロックストレージデバイスプロセッサを備える前記ストレージデバイスオペレーティングシステムは、リクエスト・リスナーを含む請求項１記載のコンピュータ構造。
【請求項１０】
メモリを更に備え、当該メモリは
ホストブロックストレージデバイスプロセッサを有し、ホストコンピュータ内で実行するホストオペレーティングシステムを含み、前記ネットワーク接続型ストレージデバイスは前記ホストコンピュータに対してリモートであり、ホストブロックストレージデバイスプロセッサを有する前記ホストオペレーティングシステムは、
ホストコンピュータ上で実行するアプリケーションからファイルコマンドを受信し、
ファイルコマンドをブロックデータストレージデバイスに対してインターフェイス依存性の無い、ネットワークコマンドセットのネットワークコマンドに変換し、
前記ネットワークコマンドを前記ホストコンピュータに接続されるネットワークインターフェイスに送信して、そこからパケットプロトコルに従ってネットワークインフラストラクチャを通して転送し、
前に送信されたネットワークコマンドに対する応答を前記ネットワークインターフェイスから受信し、
適切である場合に、前記応答を前記アプリケーションに少なくとも前記ファイルコマンドに対する部分的返答として送信する、コンピュータ構造。
【請求項１１】
ホストコンピュータを更に備え、前記ネットワーク接続型ストレージデバイスは前記ホストコンピュータに対してリモートであると見做され、前記ホストコンピュータは、
パケットプロトコルに従って通信をネットワークインフラストラクチャに／から、送信する／受信するホストネットワークインターフェイスと、
ホストブロックストレージデバイスプロセッサを有するホストオペレーティングシステムとを含み、前記ホストブロックストレージデバイスプロセッサは、
ホストコンピュータ上で実行するアプリケーションからファイルコマンドを受信し、
ファイルコマンドをブロックデータストレージデバイスに対してインターフェイス依存性の無い、ネットワークコマンドセットのネットワークコマンドに変換し、
前記ネットワークコマンドを前記ホストネットワークインターフェイスに送信して、そこからパケットプロトコルに従ってネットワークインフラストラクチャを通して転送し、
前に送信されたネットワークコマンドに対する応答を前記ホストネットワークインターフェイスから受信し、
適切である場合に、前記応答を前記アプリケーションに少なくとも前記ファイルコマンドに対する部分的返答として送信する、請求項１記載のコンピュータ構造。
【請求項１２】
前記ストレージデバイスネットワークインターフェイス及び前記ホストネットワークインターフェイスに動作的に接続され、パケットプロトコルに従って動作することが可能なネットワークインフラストラクチャを更に備える請求項１又は１１記載のネットワーク構造。
【請求項１３】
コンピュータ構造において、
ネットワーク接続型ストレージデバイスであって、
パケットプロトコルに従って通信をネットワークインフラストラクチャに／から、送信する／受信する機能を有するストレージデバイスネットワークインターフェイスと、
通信をブロックデータストレージデバイスに／から、送信する／受信する機能を有するブロックストレージデバイスインターフェイスと、
ブロックストレージデバイスプロセッサを有するストレージデバイスオペレーティングシステムとを含む前記ネットワーク接続型ストレージデバイスと、前記ブロックストレージデバイスプロセッサは、
ブロックデータストレージデバイスに対して独立したインターフェイス依存性の無い、ネットワークコマンドセットのネットワークコマンドを前記ストレージデバイスネットワークインターフェイスから受信し、
前記ネットワークコマンドを実行するために、ブロックデータストレージデバイス用の一つ以上のデバイス固有コマンドを生成し、
前記一つ以上のデバイス固有コマンドの各々を前記ブロックストレージデバイスインターフェイスに送信し、
前記ネットワークコマンドを満足させる、前記一つ以上のデバイス固有コマンドに対する応答を前記ブロックストレージデバイスインターフェイスから受信し、
前記ストレージデバイスネットワークインターフェイスに前記ネットワークコマンドに対する前記応答を送信するものであり、
前記ネットワーク接続型ストレージデバイスに対してリモートであると見做されるホストコンピュータであって、
パケットプロトコルに従って通信をネットワークインフラストラクチャに／から、送信する／受信するホストネットワークインターフェイスと、
ホストブロックストレージデバイスプロセッサを有するホストオペレーティングシステムとを含む前記ホストコンピュータとを備え、前記ホストブロックストレージデバイスプロセッサは、
ホストコンピュータ上で実行するアプリケーションからファイルコマンドを受信し、
ファイルコマンドをブロックデータストレージデバイスに対してインターフェイス依存性の無い、ネットワークコマンドセットのネットワークコマンドに変換し、
前記ネットワークコマンドを前記ホストネットワークインターフェイスに送信して、そこからパケットプロトコルに従ってネットワークインフラストラクチャを通して転送し、
前に送信されたネットワークコマンドに対する応答を前記ホストネットワークインターフェイスから受信し、
適切である場合に、前記応答を前記アプリケーションに少なくとも前記ファイルコマンドに対する部分的返答として送信する、コンピュータ構造。
【請求項１４】
前記ストレージデバイスネットワークインターフェイス及び前記ホストネットワークインターフェイスに動作的に接続され、パケットプロトコルに従って動作することが可能であるネットワークインフラストラクチャを更に備える請求項１３記載のネットワーク構造。
【請求項１５】
コンピュータ構造において、
ネットワーク接続型ストレージデバイスに対してリモートに位置するホストコンピュータであって、
パケットプロトコルに従って通信をネットワークインフラストラクチャに／から、送信する／受信するホストネットワークインターフェイスと、
ホストブロックストレージデバイスプロセッサを有するホストオペレーティングシステムとを含む前記ホストコンピュータを備え、前記ホストブロックストレージデバイスプロセッサは、
ホストコンピュータ上で実行するアプリケーションからファイルコマンドを受信し、
ファイルコマンドをブロックデータストレージデバイスに対してインターフェイス依存性の無い、ネットワークコマンドセットのネットワークコマンドに変換し、
前記ネットワークコマンドを前記ホストネットワークインターフェイスに送信して、そこからパケットプロトコルに従ってネットワークインフラストラクチャを通して転送し、
前に送信されたネットワークコマンドに対する応答を前記ホストネットワークインターフェイスから受信し、
適切である場合に、前記応答を前記アプリケーションに少なくとも前記ファイルコマンドに対する部分的返答として送信する、コンピュータ構造。
【請求項１６】
ネットワーク接続型ストレージデバイスであって、
パケットプロトコルに従って通信をネットワークインフラストラクチャに／から、送信する／受信するストレージデバイスネットワークインターフェイスと、
通信をブロックデータストレージデバイスに／から、送信する／受信する機能を有するブロックストレージデバイスインターフェイスと、
ブロックストレージデバイスプロセッサを有するストレージデバイスオペレーティングシステムとを含む前記ネットワーク接続型ストレージデバイスを更に備え、前記ブロックストレージデバイスプロセッサは、
前記ストレージデバイスネットワークインターフェイスからブロックデータストレージデバイスに対してインターフェイス依存性の無い、ネットワークコマンドセットのネットワークコマンドを受信し、
前記ネットワークコマンドを実行するために、ブロックデータストレージデバイス用の一つ以上のデバイス固有コマンドを生成し、
前記一つ以上のデバイス固有コマンドの各々を前記ブロックストレージデバイスインターフェイスに送信し、
前記ネットワークコマンドを満足させる、前記一つ以上のデバイス固有コマンドに対する応答を前記ブロックストレージデバイスインターフェイスから受信し、
前記ストレージデバイスネットワークインターフェイスに前記ネットワークコマンドに対する前記応答を送信する、請求項１５記載のコンピュータ構造。
【請求項１７】
前記ストレージデバイスネットワークインターフェイス及び前記ホストネットワークインターフェイスに動作可能に接続され、パケットプロトコルに従って動作することが可能なネットワークインフラストラクチャを更に備える請求項１５又は１６記載のネットワーク構造。
【請求項１８】
ホストコンピュータと、前記ホストコンピュータに対してリモートであるブロックデータストレージデバイスを有するネットワーク接続型ストレージデバイスとの間の通信方法であって、
前記ホストコンピュータ及び前記ネットワーク接続型ストレージデバイスにまでは必ずしも延びる必要が無い形で、前記ホストコンピュータと前記ネットワーク接続型ストレージデバイスとの間に延び、かつ、パケットプロトコルに従って通信を伝送する機能を有するネットワークインフラストラクチャを設け、
前記ネットワーク接続型ストレージデバイス内の前記ブロックデータストレージデバイス用の完全なコマンドセットに対して、前記ブロックデータストレージデバイス用の前記完全なコマンドセットのサブセット内に在るコマンドのみを前記ホストコンピュータと前記ネットワーク接続型ストレージデバイスとの間で伝送することを備える方法。
【請求項１９】
前記ネットワーク接続型ストレージデバイス内の前記ブロックデータストレージデバイス用の完全なコマンドセットに対して、前記ブロックデータストレージデバイス用の前記完全なコマンドセットのサブセット内に在るコマンドに対する応答のみを前記ホストコンピュータと前記ネットワーク接続型ストレージデバイスとの間で伝送することを更に備える請求項１８記載の方法。
【請求項２０】
前記サブセットはリードコマンド及びライトコマンドを含む請求項１８記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンピュータデータ保存に関し、特にコンピュータネットワーク内のブロックデータストレージデバイスでのデータ保存に関する。
【背景技術】
【０００２】
通常のコンピュータシステムは、命令を実行するプロセッサ、プロセッサが実行する命令及び命令の実行の結果を保存するメモリ、ユーザのシステムとの情報のやりとりを可能にする入力周辺機器（例えばキーボード、マウスなど）、ユーザのシステムとの情報のやりとりを可能にする出力周辺機器（例えばモニター、プリンタなど）、及びメモリの能力を超えるデータ保存を可能にする記憶周辺機器（例えばディスクドライブ、テープドライブなど）を含む。コンピュータシステムが動作しているとき、メモリは通常２つのプログラム、すなわちオペレーティングシステムプログラム及びアプリケーションプログラム（例えばスプレッドシートプログラム）の少なくとも一部を含む。オペレーティングシステムプログラムは、ファイル、ファイルのディレクトリ及びコンピュータシステムに接続される入力及び出力周辺機器の管理に関する機能を含む多くの機能を提供する。アプリケーションプログラムがこれらの機能の内のどれかの性能を必要とする場合（例えばビデオモニターへの情報の出力）、アプリケーションプログラムはオペレーティングシステムに所望の機能を要求するリクエストを出し、オペレーティングシステムはその機能を実行するために必要な全ての処理を実行する。
【０００３】
より大きな規模で、コンピュータシステムは互いに共通接続され、コンピュータネットワークを形成する。共通ネットワークは、ネットワークで結ばれたコンピュータシステムがオフィスまたはビィルディング内のような比較的小さい領域に分散配置されたローカルエリアネットワーク（ＬＡＮ）を含む。別の共通ネットワークは、ネットワークの一部であるコンピュータシステムが比較的大きな領域に分散配置されたワイドエリアネットワーク（ＷＡＮ）を含む。その結果、一般的にサードパーティ通信システム（例えば電話及び衛星）がワイドエリアネットワークを構成することが要求される。
【０００４】
コンピュータネットワークの基本的な利点は、一のコンピュータシステムがネットワーク内の別のコンピュータシステムに接続されるメモリデバイスにデータを書き込む、またはメモリデバイスからデータを読み出すことである。しかしながら、コンピュータシステムがネットワークで結ばれ、そしてデータの読出し及び書込みをこのような方法で行なう前に、コンピュータシステムにインストールされているオペレーティングシステムの多くの「ローカル」性に固有の或る制約を克服する必要があった。詳しく説明すると、多くのオペレーティングシステムは、オペレーティングシステムの接続先であるコンピュータシステムに接続されるメモリデバイス、すなわち「ローカル」メモリデバイスとの通信を要求するリクエストを処理する機能を有しているだけである。その結果、これらのオペレーティングシステムは「リモート（遠く離れた：ｒｅｍｏｔｅ）」メモリデバイス、すなわちオペレーティングシステムの接続先であったコンピュータシステムに接続されないメモリデバイスとの通信を要求するリクエストを処理することができなかった。この制約を克服するために、「仮想デバイスドライバ（ｖｉｒｔｕａｌ  ｄｅｖｉｃｅ  ｄｒｉｖｅｒ」が考案された。
【０００５】
一般的に仮想デバイスドライバは、リモートメモリデバイスがコンピュータシステムのオペレーティングシステムにとってあたかもローカルメモリデバイスであるかのように見えるように機能し、リモートに位置するメモリデバイスとの通信を管理する。仮想デバイスドライバはまた、２つの構成要素、すなわちリモートメモリデバイスとの通信を開始するコンピュータシステムに接続される送信元仮想デバイスドライバ及びリモートメモリデバイスの接続先であるコンピュータシステムに接続される送信先仮想デバイスドライバから構成される。多くの場合、「送信元」コンピュータシステムは、「送信先」コンピュータシステムに対してリモートであり、かつ、「送信先」コンピュータシステムがアクセスを希望するところのメモリデバイスを有する。このような場合、コンピュータシステムに接続される仮想デバイスドライバは通常、逆の役割を果たすことができる、すなわち送信元仮想デバイスドライバも送信先仮想デバイスドライバとして機能し、またその逆も行なわれる。
【０００６】
リモートメモリデバイスがオペレーティングシステムにとってあたかもローカルメモリデバイスのように見えるようにするために、「送信元仮想デバイスドライバ」は、ローカルメモリデバイスがオペレーティングシステムと通信するのと同じ方法でコンピュータシステムのオペレーティングシステムと通信する。しかしながら、リモートメモリデバイスとの通信を管理するために、「送信元仮想デバイスドライバ」は、ネットワーク通信インフラストラクチャ（例えば銅ケーブル、光ファイバケーブル、無線チャネルなど）を通してコンピュータネットワーク内の他のコンピュータシステムとの通信を行なう役割を担うコンピュータシステムの一部と通信する。このコンピュータシステムの一部は通常、ネットワークインターフェイスと呼ばれ、そして一般的にネットワークインターフェイスカードの形で具現化される。いずれにせよ、送信元仮想デバイスドライバは、リモートメモリデバイスに送信されることとなる通信をネットワークインターフェイスに供給し、このインターフェイスがプロトコルに従ってこの通信をカプセル化し、ネットワーク通信インフラストラクチャを通して通信を伝送する。例えば、ネットワークインターフェイスはＴＣＰ／ＩＰプロトコルに従って通信をカプセル化し、インターネットを通して伝送する。送信元コンピュータシステムが開始する通信に応答してリモートメモリデバイスから受信する通信の場合、ネットワークインターフェイスはネットワークインフラストラクチャプロトコル情報の通信を調査し、そしてその通信を送信元仮想デバイスドライバに供給する。次に、送信元仮想デバイスドライバはその通信をオペレーティングシステムに送信してそこでさらに全ての処理が行なわれる。
【０００７】
送信先コンピュータシステム（すなわち、リモートメモリデバイスの接続先であるコンピュータシステム）の送信先仮想デバイスドライバは送信元仮想デバイスドライバとほとんど同じ方法で動作する。詳細に説明すると、送信先コンピュータシステムのネットワークインターフェイスは送信元コンピュータシステムからの通信を調査し、そして次にその通信を送信先仮想デバイスドライバに供給する。それに応答して、送信先仮想デバイスドライバはその通信をリモートメモリデバイスに転送する。リモートメモリデバイスからのあらゆる応答は送信先仮想デバイスドライバに供給され、そこでその応答がネットワークインターフェイスに転送される。次に、ネットワークインターフェイスはその応答または通信をカプセル化するように動作し、ネットワークインフラストラクチャを通して送信元コンピュータシステムに送信する。
【０００８】
通常、コンピュータネットワークに用いられる「仮想デバイスドライバ」はデバイスプロトコル依存型である。例えば、リモートメモリデバイスがＳＣＳＩディスクドライブである場合、送信元コンピュータの「送信元仮想デバイスドライバ」はリモートＳＣＳＩディスクドライブと通信するために必要な全ＳＣＳＩコマンドセットを実行する。例えば、送信元コンピュータ上で実行するアプリケーションがリモートＳＣＳＩディスクドライブからデータを読み出す必要がある場合、送信元コンピュータの送信元仮想デバイスドライバは、読出し処理を実行するために必要な必要ＳＣＳＩコマンドの全てがネットワークインフラストラクチャを通して伝送されるように、そして必要に応じてコマンドに対する全ての応答を処理するように動作する。これにはネットワークを通しての幾つかの通信が含まれる。例えば、第１の通信がＳＣＳＩディスクドライブが動作していることを保証するステータスリクエストであり；第２のコマンドがドライブへのアクセスを要求するリクエストであり；第３のコマンドが読出しヘッドを所望のデータが位置するトラックに移動させるシークコマンドである。
【０００９】
ネットワークのコンピュータシステム間でデータを伝送するこのシステムは或る時間の間は十分に機能する。何故なら、ネットワークインフラストラクチャを通してコンピュータシステム間でデータを伝送する速度が、送信先コンピュータシステムに接続されるオペレーティングシステムがデータを送信先コンピュータシステムに接続されるリモートメモリデバイスに、またはリモートメモリデバイスから移動させることができる速度よりもかなり遅いからである。言い換えれば、送信先コンピュータシステム及び特に、送信先コンピュータシステムのオペレーティングシステムは、データをコンピュータネットワークの他のコンピュータシステムにネットワークインフラストラクチャの利用可能な帯域幅を実質的に利用した速度で伝送することができた。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら、近年、ネットワークインフラストラクチャの帯域幅または速度は劇的に大きくなっている。その結果、ネットワークインフラストラクチャはもはや、コンピュータネットワーク内で一つのコンピュータシステムから別のコンピュータシステムにデータを伝送する際の最も遅い要素ではなくなっている。その代わりに、送信先コンピュータシステム及び、特に送信先コンピュータシステムのオペレーティングシステムが最も遅い要素になっている。詳細に説明すると、送信先コンピュータシステムに接続されるオペレーティングシステムは通常、システムで実行されている一つ以上のアプリケーションプログラムからのリクエストを処理し、周辺機器を管理し、そして他のタスクを遂行するために、オペレーティングシステムはその時間の一部しか、ネットワークの他のコンピュータシステムと一緒にデータ伝送を処理するのに充てることができない。さらに、オペレーティングシステムがそのような伝送に割くことの出来る時間は現状では、ネットワークインフラストラクチャがデータを伝送できる帯域幅または速度をフルに利用するには概して不十分なものとなっている。
【００１１】
高速ネットワークインフラストラクチャを利用するコンピュータネットワークのコンピュータシステム間でのデータ伝送に関連して生じるオペレーティングシステムの制約の結果、新しいタイプのストレージシステムまたはストレージデバイス、すなわちネットワーク接続型ストレージデバイスが考案された。ネットワーク接続型ストレージシステムまたはデバイスはデータ保存機能専用のコンピュータシステムである。従って、ネットワーク接続型ストレージデバイスに接続されるオペレーティングシステムは、従来のコンピュータシステムのように、アプリケーションプログラムなどからのリクエストを直接処理するために時間を費やすことがない。これにより、今度はネットワーク接続型ストレージデバイスがネットワークの他のコンピュータシステムにデータを、通常の従来のコンピュータシステムよりもずっと速く伝送することができるようになる。さらに、ネットワークストレージデバイスがコンピュータネットワークにインストールされると、そのデバイスはネットワーク内でのそれ固有のアドレスが割り当てられるので、ネットワークの他のコンピュータシステムがこのデバイスに直接アクセスすることができる。この直接アクセスできる機能もデータ伝送速度の改善につながる。
【課題を解決するための手段】
【００１２】
本発明の一の実施形態はネットワーク接続型ストレージデバイス（ＮＡＳデバイス）を提供するものであり、このＮＡＳデバイスは、ＮＡＳデバイスに接続される、またはＮＡＳデバイスに接続されることとなる、さらにネットワークの他のコンピュータに対してリモートであると見做されるブロックデータストレージデバイスを使用してデータ転送を容易にする。このような関係のＮＡＳデバイスは、ネットワークにより可能となるストレージデバイス（すなわち、データ保存専用で、固有のネットワークアドレスを有するデバイス）と呼ぶが、ファイル転送に利用される代わりに、データブロック転送に関わる。データ転送を容易にするには少なくとも２つの要素を認識する必要がある。まず、ディスクドライブのような記憶媒体上の連続領域に複数バイトのデータを保存するブロックデータストレージデバイスは通常、コマンドセットの中に共通に示される多くの機能を実行することができる。例えば、ディスクドライブ用の通常のコマンドセットは、シーク、サーチ、ロード、アンロード、リード及びライトコマンドを含む。次に、リモートに位置するブロックデータストレージデバイスへのアクセスを要求し、コンピュータ上で実行されるアプリケーションプログラムは、限られた数の機能に対応するアクセスしか要求しない。その結果、ＮＡＳデバイスは、ＮＡＳデバイスに接続される、または接続されることとなるブロックデータストレージデバイス用の完全なコマンドセットに対して、ネットワークのコンピュータシステムからの機能またはコマンドの数を制限することによりデータ転送を容易にするが、この場合、ブロックデータストレージデバイスはコンピュータシステムに対してリモートであると見做され、これらの機能またはコマンドは受信した後、処理して完全なコマンドセットのサブセットとする。一の実施形態においては、サブセットはリード及びライトコマンドを含むが、ブロックストレージデバイス内のアクチュエータに固有のコマンドは含まない。例えば、ディスクドライブの場合、特にアクチュエータを使用してヘッドにディスク表面を横断させることを含むシークコマンドはサブセットから除外される。別の実施形態においては、コマンドは少なくとも２つの、そして好ましくは幾つかのタイプのデータブロックストレージデバイスに共通する。従って、ＮＡＳデバイスとリモートコンピュータとの間のデータ転送は、ＮＡＳデバイスに接続される、または接続されることとなるブロックデータストレージデバイスのタイプに依存しない、或いは別の表現をすれば、インターフェイスに依存しない。以下においては、ＮＡＳデバイスが処理するリモートコンピュータシステムからのコマンドをネットワークコマンドと呼ぶ。
【００１３】
本発明のＮＡＳデバイスは２つのインターフェイスを備える。すなわち、（１）通信をネットワークインフラストラクチャ（例えばＬＡＮまたはＷＡＮ）に／から、送信する／受信するネットワークインターフェイスを備え、この場合ネットワークインターフェイスはデータパケットプロトコル（例えばＴＣＰ／ＩＰ）を実行する機能を有し、そして（２）通信をブロックデータストレージデバイスに／から、送信する／受信するブロックデータストレージデバイスインターフェイスを備える。ＮＡＳデバイスはさらに、ブロックデータストレージプロセッサ（このプロセッサは新しいタイプの仮想デバイスドライバの送信先と考えることができる）を有するオペレーティングシステムを備える。このブロックデータストレージプロセッサは、ネットワークインターフェイスで受信されたネットワークコマンドを受信し、そしてネットワークコマンドを実行するために必要なブロックデータストレージデバイスに固有の一つ以上のコマンドのストリングを生成する機能を有する。例えば、プロセッサがネットワークインターフェイスから「リード」ネットワークコマンドを受信する場合、プロセッサはディスクドライブにコマンドを発行してデバイスのステータス及び／又は利用可能性をリクエストし、デバイスを予約し、ディスクにリード／ライトヘッドをロードし、所望のデータブロックが位置するトラックをシークし、そして次にデータブロックが位置するトラック上のセクターをサーチし、最後にデバイス固有リードコマンドを発行してリクエストされたデータを読み出す必要がある。ブロックデータストレージプロセッサはまた、そのようなコマンドストリングの全てをブロックデータストレージインターフェイスに送信し、続いてそこからブロックデータストレージデバイスに転送する機能を有する。さらにプロセッサは、コマンドに対する応答の全てをブロックデータストレージデバイスインターフェイスから受信し、そして必要に応じてデータをネットワークインターフェイスに送信して、そこからネットワークインフラストラクチャを通して、データをリクエストしたコンピュータシステムに転送する機能を有する。
【００１４】
一の実施形態においては、ブロックデータストレージプロセッサはネットワークコマンドを並列処理する機能を含む。コマンドの並列処理は別々の「スレッド」として概念的に説明することができ、この場合、各スレッドはネットワークコマンドまたは関連ネットワークコマンドグループに関係する。一の実施形態においては、プロセッサは複数のコマンドキューを生成する機能を含み、この場合、各コマンドキューは関連する「スレッド」を含み、このスレッドにより、スレッドが関わるコマンドキューのネットワークコマンドまたは複数のネットワークコマンドを実行する。プロセッサはさらに、ネットワークコマンドを処理キューに向ける機能を有する管理装置を含む。一の実施形態においては、管理装置は複数のキューの負荷をモニターし、そして所望の目的を達成するためにコマンドをどのキューに置くかを決定する機能を有する。例えば、管理装置はスループットを最大化するためにキューの負荷をバランスさせるアルゴリズムを実行する機能を有する。
【００１５】
本発明の別の実施形態はコンピュータ構造を含み、このコンピュータ構造は実際にホストコンピュータで実現することができ、ＮＡＳデバイスはこのホストコンピュータに対してリモートデバイスと見做される。この構造はホストブロックストレージデバイスプロセッサ（このデバイスは新しいタイプの仮想デバイスドライバの送信側として考えることができる）を有するオペレーティングシステムを備え、このプロセッサはホストコンピュータ上で実行するアプリケーションプログラムからのファイルリクエストを処理する機能を有し、このホストコンピュータにおいてはファイルの少なくとも一部がリモートＮＡＳデバイスに接続されるブロックデータストレージデバイスに含まれる。詳細に説明すると、プロセッサを有するオペレーティングシステムはホストコンピュータ上で実行するアプリケーションプログラムからファイルリクエストを受信し、このファイルリクエストをネットワークコマンドに変換し、このネットワークコマンドをホストコンピュータに接続されるネットワークインターフェイスに供給してネットワークインターフェイスがネットワークコマンドをリモートブロックデータストレージデバイスを有するＮＡＳデバイスに転送できるようにする機能を有する。さらに、プロセッサを有するオペレーティングシステムはホストコンピュータのネットワークインターフェイスで受信するネットワークコマンドに対する返答を受信し、この返答をアプリケーションプログラムに転送する機能を有する。例えば、ホストコンピュータ上で実行するアプリケーションがＮＡＳデバイスに接続されるブロックデータストレージデバイスに位置する「ｘｙｚ」ファイルに含まれるデータを必要とする場合、このアプリケーションはプロセッサに転送されるリクエストを生成する。プロセッサはこのリクエストに応答して、「ｘｙｚ」ファイルを要求するリクエストを変形または変換してネットワークコマンド、すなわち「ｘｙｚ」ファイルを含み、ＮＡＳデバイスに接続されるブロックデータストレージデバイスに在るブロックまたはブロック群用のブロックリードコマンドとする。さらに、プロセッサはネットワークコマンドをホストコンピュータのネットワークインターフェイスに転送して、そこからネットワークインフラストラクチャを通してＮＡＳデバイスに送信する。ＮＡＳデバイスはネットワークコマンドを処理し、そしてリクエストされた「ｘｙｚ」ファイルを含むデータブロックまたはデータブロック群をネットワークインフラストラクチャを通してホストコンピュータのネットワークインターフェイスに転送する。データブロックまたはデータブロック群が今度はプロセッサに転送される。これに応答して、プロセッサはブロックまたはブロック群をリクエストを出しているアプリケーションに転送、またはそうでなければアプリケーションがブロックまたはブロック群を利用できるようにする。
【００１６】
本発明のさらに別の実施形態は、ホストブロックストレージデバイスプロセッサを有する前に述べたオペレーティングシステムを含むホストコンピュータと、通信をネットワークインフラストラクチャに／から、送信する／受信するホストネットワークインターフェイスを含み、この場合ネットワークインターフェイスはデータパケットプロトコル（例えばＴＣＰ／ＩＰ）を実行する。別の実施形態はＬＡＮ及びＷＡＮを含む、多くの異なる形で実行することが可能なネットワークインフラストラクチャを含む。
【００１７】
本発明のさらに別の実施形態は、ホストコンピュータとブロックデータストレージデバイスの接続先となるＮＡＳデバイスのような送信先コンピュータとの間の通信方法を含む。この方法には、ホストコンピュータと送信先コンピュータとの間の通信を伝送するネットワークインフラストラクチャの提供が含まれる。この方法にはさらに、ネットワークコマンド、すなわち、２つ以上のブロックデータストレージデバイスに対して共通の、またはインターフェイス依存性のないコマンド、或いはブロックデータストレージデバイス用の完全なコマンドセットのサブセット内のコマンドのネットワークインフラストラクチャを通しての伝送が含まれる。一の実施形態においては、ネットワークインフラストラクチャを通して伝送されるネットワークコマンドは、複数のブロックデータストレージデバイスに対して共通の、またはインターフェイス依存性のない、或いはブロックデータストレージデバイス用の完全なコマンドセットのサブセットであるコマンドを含み、また、共通でもなく、そのようなサブセットの一部でもないコマンドを含む。例えば、一の実施形態においては、コマンドは、ネットワーク遅延を求めるのに有効な「ｐｉｎｇ」ネットワークコマンド及びホストコンピュータと送信先コンピュータとの間の接続を終了させるために使用する切断ネットワークコマンドを含む。
【発明を実施するための最良の形態】
【００１８】
図１は本発明の実施形態を含むコンピュータネットワーク１０のブロック図である。一般的にコンピュータネットワーク１０は、ネットワーク接続型ストレージデバイスまたはシステム１４（以下、ＮＡＳデバイス１４と呼ぶ）、ＮＡＳデバイス１４の全てのブロックデータストレージデバイスがリモートであると考えられる基準となるホストコンピュータ１６、及びＮＡＳデバイス１４とホストコンピュータ１６との間のデータ転送を行なうネットワークインフラストラクチャ１８を備える。
【００１９】
ＮＡＳデバイス１４は、通信をパケットプロトコル（例えばＴＣＰ／ＩＰ）に従ってネットワークインフラストラクチャに／から、送信する／受信するストレージデバイスネットワークインターフェイス２２を備える。従って、インターフェイス２２はネットワークインフラストラクチャ１８を通して伝送されることとなる通信をパケット化し、そしてネットワークインフラストラクチャ１８から受信する関連パケットを再組み立てする機能を有する。ＮＡＳストレージデバイス１４内にはブロックストレージデバイスインターフェイス２４も含まれ、このインターフェイス２４は図示の実施形態においては、ブロックストレージデバイス制御装置の形を採る。ブロックストレージデバイスインターフェイス２４は一つ以上のブロックデータストレージデバイス２６との物理的な通信を管理する。特に、ブロックストレージデバイスインターフェイス２４は一つ以上のブロックデータストレージデバイス２６との通信に必要な一連の電気信号を処理する。
【００２０】
ブロックデータストレージデバイス２６は、特定の長さ（例えば５１２バイト）を有し、各々が固有のアドレスを有するブロックにデータを保存するデータストレージデバイスである。ブロックデータストレージデバイス２６は通常、全て同じタイプであり、全てが同じ量のデータを保存することができる（例えばＳＣＳＩディスクドライブは各々が１０ＧＢのデータ保存容量を有する）。しかしながら、ブロックデータストレージデバイスは異なるタイプ（例えばディスクドライブ及びテープドライブ、または異なるサブタイプ（例えばＳＣＳＩディスクドライブ及びＡＴＡディスクドライブ））とすることができる。ブロックデータストレージデバイス２６は異なる量のデータも保存できる。また、ブロックデータストレージデバイス２６はＲＡＩＤのような種々のストレージ構成を実現する構成とすることができる。
【００２１】
ＮＡＳデバイス１４はさらにネットワークインターフェイス２２からネットワークコマンドを受信する機能を有するブロックストレージデバイスプロセッサ３０を含むオペレーティングシステム２８を備える。ネットワークコマンドはブロックストレージデバイス用の完全なコマンドセットのサブセット内に在る、または１タイプよりも多くのブロックデータストレージデバイス用の完全なコマンドセットに共通する、或いは全てのブロックデータストレージデバイスのインターフェイスには依存しないコマンドである。一の実施形態においては、ネットワークコマンドのサブセットは、実際のブロックデータストレージデバイス２６に対して共通する、またはインターフェイス依存性のない「リード（ｒｅａｄ）」及び「ライト（ｗｒｉｔｅ）」コマンドを含み、全てではないが、他のブロックデータストレージデバイスコマンドのほとんどを含まない。従って、アクチュエータをディスクドライブ内で一つのトラックから別のトラックに移動させる処理を含むシークコマンドのような、特にブロックデータストレージデバイスのアクチュエータなどの動きに向けられるコマンドが実行される。ネットワークコマンドセットはまた、ブロックデータストレージデバイスの完全なコマンドセット内に無い、または２つ以上のブロックデータストレージデバイスの完全なコマンドセットに対して共通する、或いはインターフェイス依存性のないコマンドを含む。例えば、ネットワークコマンドはネットワークに関連し、ブロックデータストレージデバイスに関連しないコマンドを含むことができる。例えば、「ｐｉｎｇ」コマンドはネットワーク遅延を求めるのに利用される。
【００２２】
ブロックストレージデバイスプロセッサ３０はまた、ネットワークコマンドを処理して、ネットワークコマンドが関連するブロックデータストレージデバイス２６の内の特定の一つに対する一つ以上のデバイス固有コマンドのストリングを生成する機能を備える。例えば、ネットワークコマンドが、ブロックデータストレージデバイス２６の一つであるディスクドライブに向けられる「リード」ネットワークコマンドである場合、ブロックストレージプロセッサ３０はデバイス固有コマンドを発行して、ドライブを予約し、アクチュエータにリード／ライトヘッドをブロックが位置するトラックに移動させ、データブロックを読み出してそのデータをキャッシュに格納し、そしてキャッシュからデータブロックを読み出す。通常、ストリング内の２番目及びそれに続くデバイス固有コマンドはそれぞれ、前のコマンドの結果が判明した後に生成されるので、プロセッサは２番目及びそれに続くコマンドを判断する際に、少なくとも一つの前コマンドに生じ得る複数の結果を含む一つ以上の前コマンドに対する応答を考慮することができる。例えば、デバイス固有ステータスコマンドに対する応答が、そのデバイスがビジーであることを示す場合、プロセッサはそのステータスコマンドを再発行することができる。しかしながら、デバイス固有ステータスコマンドに対する応答が、そのデバイスが利用可能であることを示す場合、プロセッサはコマンドを発行してそのデバイスを予約する。ブロックストレージデバイスプロセッサ３０はさらに、デバイス固有コマンドをブロックストレージデバイスインターフェイスに転送する機能を備え、このインターフェイスがコマンドを特定のブロックデータストレージデバイスに転送するように動作する。さらにブロックストレージデバイスプロセッサ３０は、ブロックデータストレージデバイス２６からのコマンドストリングに対する全ての返答を受信し、そして全ての返答を処理する機能を備える。ブロックストレージデバイスプロセッサ３０はまた、ブロックデータストレージデバイス２６からのネットワークコマンドを満足させる全ての返答をストレージデバイスネットワークインターフェイス２２に転送する機能を備える。例えば、ネットワークインターフェイスで受信するネットワークコマンドが「リード」ネットワークコマンドであった場合、プロセッサ３０はデバイスから読み出したデータブロックをストレージデバイスネットワークインターフェイス２２に転送し、そこからネットワークインフラストラクチャ１８を通してホストコンピュータ１６に送信する。
【００２３】
一の実施形態においては、オペレーティングシステム２８はリナックス（Ｌｉｎｕｘ）オペレーティングシステムである。他のオペレーティングシステムを用いることも可能である。またオペレーティングシステムは、ブロックストレージデバイスプロセッサ３０がオペレーティングシステムのカーネル内に位置するように適合化が行なわれてきた。プロセッサ３０をカーネル内に構築することにより、ＮＡＳデバイス１４内でのプロセッサ３０のインストールを分けて行なう必要が無くなる。また一の実施形態においては、プロセッサ３０を含むオペレーティングシステムはブロックデータストレージデバイス２６の一つ以上に保存される。必要に応じて、オペレーティングシステム２８をメモリ（図示せず）にロードし、ＮＡＳデバイス１４に接続されるマイクロプロセッサのような処理エンジン（図示せず）により実行する。
【００２４】
ブロックデータストレージデバイス２６に関しては、カスタマーが彼ら固有のデバイスをインストールできるように、ブロックデータストレージデバイス２６がインストールされない形でＮＡＳデバイス１４をカスタマーに提供することができることに注目されたい。しかしながら、ほとんどの状況においては、ＮＡＳデバイス１４はブロックデータストレージデバイス２６がインストールされた形でカスタマーに提供される。
【００２５】
ＮＡＳデバイス１４はまたデータバッファ３２を備え、このデータバッファは、ＮＡＳデバイス１４内の特定のブロックデータストレージデバイスがデータ転送を処理する状態にない場合でも、データ転送をネットワークインフラストラクチャ１８を通して行なうことにより、ネットワーク性能を容易に実現する。例えば、ブロックデータデバイスがホストコンピュータ１６からの「ライト」ネットワークコマンドを処理する機能を持っていない場合、「ライト」コマンド用のデータをバッファ３２に保存し、そして後でブロックデータストレージデバイスに転送することができる。
【００２６】
ホストコンピュータ１６はホストネットワークインターフェイス３６を備え、これによりパケットプロトコル（例えばＴＣＰ／ＩＰ）に従って通信をネットワークインフラストラクチャ１８に／から、送信する／受信する。従って、インターフェイス３６は、ネットワークインフラストラクチャ１８を通して伝送されることとなる通信をパケット化し、そしてネットワークインフラストラクチャ１８から受信する関連するパケットを再組み立てする機能を有する。またホストコンピュータ１６を構成するものにアプリケーションプログラム３８が含まれ、このアプリケーションプログラムはそれを実行する際、少なくとも部分的にホストコンピュータ１６のメモリ（図示せず）にロードされ、そしてホストコンピュータ１６に接続される処理エンジン（図示せず）により実行される。
【００２７】
さらにホストコンピュータ１６を構成するものにホストオペレーティングシステム４０が含まれ、これにより、とりわけアプリケーションプログラム３８からのリクエストを処理する。ホストオペレーティングシステム４０はそれを実行する際、少なくとも部分的にホストコンピュータ１６のメモリ（図示せず）にロードされ、そしてホストコンピュータ１６に接続される処理エンジン（図示せず）により実行される。ホストオペレーティングシステム４０はホストリモートブロックストレージデバイスプロセッサ４２を備え、このプロセッサは、ＮＡＳデバイス１４に接続されるブロックデータストレージデバイス２６を含むアプリケーションプログラム３８からのリクエストを処理するように特別に適合化される。図示のために、ブロックデータストレージデバイス２６はホストコンピュータ１６内で「仮想（ｖｉｒｔｕａｌ）」ブロックデータストレージデバイス２６’として表示する。特に、ホストリモートブロックストレージデバイスプロセッサ４２を備えるホストオペレーティングシステム４０は次のように動作する。すなわち、（１）ブロックデータストレージデバイス２６の内の一つに位置するファイルへのデータの読出し又は書込みに関するアプリケーションプログラムからのリクエスト、すなわちファイルリクエストを受信し；（２）このファイルリクエストを一つ以上のネットワークコマンドに変換し；（３）ネットワークコマンドをホストネットワークインターフェイス３６に転送し；（４）前に転送されたネットワークコマンドに対する応答をホストネットワークインターフェイスから受信し；そして（５）適切である場合に、この応答をアプリケーションプログラムに送信する。
【００２８】
通常のホストコンピュータの例として、ホストコンピュータ１６はさらにストレージ制御装置４６が管理する一つ以上のストレージデバイス４４を備える。ストレージデバイス４４は、ブロックデータストレージデバイス２６とは対照的に、ホストコンピュータ１６にとっては「ローカル（ｌｏｃａｌ）」と見做される。図示の実施形態ではＰＣＩバスとして示されるバス４８は、ホストオペレーティングシステム４０とストレージ制御装置４６との間の通信パスとなる。通常、アプリケーションプログラム３８及びオペレーティングシステム４０はそれぞれ、実行中ではないときは一つ以上のストレージデバイス４４に保存される。アプリケーションプログラム３８及びオペレーティングシステム４０が実行中であるときは、各々の少なくとも一部が一つ以上のストレージデバイス４４からホストコンピュータ１６のメモリ（図示せず）にロードされる。
【００２９】
ホストコンピュータ１６はデータバッファ４９も含み、このデータバッファはアプリケーションプログラム３８がデータ転送を処理する状態にない場合でも、データ転送をネットワークインフラストラクチャ１８を通して行なうことにより、ネットワーク性能を容易に実現する。例えば、アプリケーションプログラム３８が「リード」ネットワークコマンドに対する応答を処理する機能を持っていない場合、データをデータバッファ４９に保存し、そして後でアプリケーションプログラム３８に転送することができる。データバッファ５０はアプリケーションプログラム３８にも接続され、追加の、または別のデータ保存容量を提供してネットワーク１０内の他の構成要素がデータ転送を受け入れない状態にあるときにデータを保存するために利用できるようにすることにより、ネットワーク性能を容易に実現する。
【００３０】
ネットワークインフラストラクチャ１６はどのようなネットワークインフラストラクチャであってもよく、或いはネットワークインフラストラクチャのどのような組み合わせでもよい。例えば、ネットワークインフラストラクチャ１６はＬＡＮまたはＷＡＮの形で実現することができる。またネットワークインフラストラクチャはインターネットを含むことができる。物理レベルでは、ネットワークインフラストラクチャはイーサネット標準に従って実現することができる。ネットワークインフラストラクチャは他の標準に従っても実現できる。さらに、ネットワークインフラストラクチャ１６を通しての通信は、ＴＣＰ／ＩＰ（大部分がインターネットで使用される）、Ｎｏｖｅｌ，Ａｐｌｌｅｔａｌｋ及びＳｔｒｅａｍｉｎｇ  Ｃｏｎｔｒｏｌ  Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｐｒｏｔｏｃｏｌ（ＳＣＴＰ）のようなパケットプロトコルに従って行なわれる。ＳＣＴＰは混雑したネットワークの遅延を減らすために特に有用である。他のパケットプロトコルに従った通信も可能である。
【００３１】
一般的に、ホストリモートブロックストレージデバイスプロセッサ４２を備えるホストオペレーティングシステム４０は、ホストシステムで実行するアプリケーションプログラムが出力したファイルコマンドを受信し、そしてファイルコマンドを一つ以上のネットワークコマンドに変換し、変換したコマンドをパケットプロトコルに従ってネットワークインフラストラクチャを通してＮＡＳデバイス１４に送信し、そしてブロックデータストレージデバイス２６の内の一つに入力する。最小のネットワークコマンドセットはブロックデータストレージデバイス２６の特性に依存する。ブロックデータストレージデバイス２６が読出し専用デバイスである場合、最小のネットワークコマンドセットはリードコマンドである。ブロックデータストレージデバイス２６がリード／ライトデバイスである場合、最小のネットワークコマンドセットはリードコマンド及びライトコマンドを含む。ネットワークコマンドセットは通常、ブロックデータストレージデバイスへのデータの読出し又は書込みに直接関係しないがホストコンピュータ１６とＮＡＳデバイス１４との間のデータ転送を容易にするコマンドを含む。いずれにせよ、ネットワークコマンドセットは最小コマンドセットを含む必要がある。
【００３２】
図３〜９Ｃを参照しながら、ホストリモートブロックストレージデバイスプロセッサ４２用のネットワークコマンドセットを記載する。ネットワークコマンドセットはリードブロック（ブロック群）コマンド及びライトブロック（ブロック群）コマンドを含み、これらのコマンドは、全てのブロックデータストレージデバイスに対して共通する、或いはインターフェイス依存性がない、またはいずれかのシングルブロックデータストレージデバイスの完全なコマンドセットのサブセットである。図示の実施形態においては、ネットワークコマンドセットはさらに、ＮＡＳデバイス１４とホストコンピュータ１６との間の接続に関係するコマンドを含む。このようにこれらのコマンドは、ブロックデータストレージデバイスに対して共通なものでもないし、シングルブロックデータストレージデバイス用の完全なコマンドセットのサブセットでもない。図示の実施形態においては、これらのコマンドは、ネットワーク遅延を評価するために使用する「ｐｉｎｇ」コマンド及びホストコンピュータ１６とＮＡＳデバイス１４との間のソケット接続を終了させる切断コマンドを含む。
【００３３】
ホストリモートブロックストレージデバイスプロセッサ４２は、各ネットワークコマンドを「リクエスト（ｒｅｑｕｅｓｔ）」の形で実行する。リクエストは環境に依存する形で幾つかの形を採る。図示の実施形態においては、リクエストは一つ以上のサブコマンドを含むことができる。例えば、リード（ｒｅａｄ）リクエストまたはリード（ｒｅａｄ）ネットワークコマンドは一つ以上のリード（ｒｅａｄ）サブコマンドを含み、サブコマンドの各々はデータブロックまたは連続データブロックに関係する。リクエストはまた、サブコマンドが無くなるように実行する。例えば、リードリクエストまたはリードネットワークコマンドはシングルデータブロックまたは連続データブロックに関係する。このような実行形態において、複数のリードサブコマンドを可能にするリードリクエストと同じ効果を実現するために複数のリードリクエストが必要となる。リクエストはまた、リード及びライト（ｗｒｉｔｅ）ネットワークコマンドの場合、リクエストがシングルデータブロックにのみ関係するように実行することができる。このような特殊な場合においては、より多くのリードまたはライトリクエストが、サブコマンドを可能にする実行形態に対して必要となるが、この場合、各サブコマンドはデータブロックまたは連続データブロックに関係する機能を有する。
【００３４】
図２を参照すると、リクエストがヘッダ５２により特定される。ヘッダは次のフィールドを含む：（１）ネットワークコマンドコードを保持するコマンドフィールド；（２）セッションの期間（すなわち、ＮＡＳデバイス１４とホストコンピュータ１６との間の接続が有効な期間）を要求するリクエストに固有のキーを保持するトランザクションキー（ＴｒａｎｓａｃｔｉｏnＫｅｙ）フィールド；（３）シングルリソースとして機能することができ、ＮＡＳデバイス１４に接続されるクラスタストレージデバイス群／クラスタストレージデバイス用の固有の識別子を保持するＣｌｕｓｔｅｒＩＤフィールド；（４）クラスタとの関係上、クラスタ内のロジカルパーティションまたはボリュームを指す固有の識別子を保持するＬｕｎＩＤフィールド；（５）リクエスト内に示されるコマンドの合計数を保持するＣｍｄＣｏｕｎｔフィールド；そして（６）「Ｃ」フィールドが、以下に記載する識別ネットワークコマンド内で１に等しい場合、エラー訂正繰り返し冗長チェックを保持するエラー訂正（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｏｎ）ＣＲＣフィールド。
【００３５】
図３Ａ〜３Ｂには識別ネットワークコマンドが記載される。識別ネットワークコマンドはホストコンピュータ１６が使用してＮＡＳデバイス１４からの情報をリクエストする及び／又はＮＡＳデバイス１４に情報を送信する。識別ネットワークコマンドは、ホストコンピュータ１６とＮＡＳデバイス１４との間に接続が確立した後、すなわちセッションの開始時に直ちに送信されるものと考えられる。ホストリモートブロックストレージデバイスプロセッサ４２は識別ネットワークコマンドをただ含むだけの「リクエスト（ｒｅｑｕｅｓｔ）」を確立させるように動作する。識別ネットワークコマンドのヘッダ部は０ｘ０２の値のコマンドフィールドを含む。ヘッダ部はまた、トランザクションキーフィールド、ｃｌｕｓｔｅｒ  ｉｄフィールド及びｌｕｎ  ｉｄフィールドを含む。識別ネットワークコマンドのコマンドカウントフィールドは０ｘ０１に設定され、この０ｘ０１によりリクエストが識別ネットワークコマンドを含み、サブコマンドを含まないことを示す。ヘッダ部に加えて、識別ネットワークコマンドはＣフィールド、ＥＣＣＴフィールド、及びＶｅｒｓｉｏｎフィールドを含む。ＣフィールドはＥＣＣフラグである。Ｃフィールドの値が０の場合、ｎｏ  ＥＣＣが立っている。１の値を有するＣフィールドはＥＣＣが立っていることを示す。ＥＣＣＴフィールドは、Ｃフィールドが１に設定されている場合に用いられるエラー訂正アルゴリズムのタイプを示す。Ｖｅｒｓｉｏｎフィールドは、ネットワークコマンドの処理に使用されているソフトウェアのバージョンを特定する。ＮＡＳデバイス１４はＶｅｒｓｉｏｎフィールドの情報を利用してＮＡＳデバイスがホストコンピュータ１６と同じソフトウェアバージョンを使用していることを証明する。
【００３６】
図３Ｂを参照すると、識別ネットワークコマンドに応答してＮＡＳデバイス１４が送信し、ホストリモートブロックストレージデバイスプロセッサ４２が受信するアクノリッジメントは、識別ネットワークコマンドまたは識別リクエストと同じコマンド、トランザクションキーフィールド、ｃｌｕｓｔｅｒｉｄフィールド及びｌｕｎｉｄフィールド、及びこれらの各フィールド内の値を有するヘッダを含む。アクノリッジメントはさらに、以下に示すフィールド及びフィールド内の値を含み、これらのフィールドにより、次に続くネットワークコマンドまたはリクエストを生成する際に使用される情報をプロセッサ４２に供給する：（１）指定されたｃｌｕｓｔｅｒ及びｌｕｎに関する最小ブロックサイズを指定するＢｌｋＳｉｚｅフィールド；（２）指定されたｃｌｕｓｔｅｒ及びｌｕｎにより示される最大ロジカルブロックアドレスを指定するＭａｘＬＢＡフィールド；（３）ＮＡＳデバイス１４側から見た場合の指定されたｃｌｕｓｔｅｒ及びｌｕｎに対する好適なブロックサイズを指定するＰｒｅｆｅｒｒｅｄＢｌｋＳｉｚｅフィールド；（４）リクエスト当たりの最大サブコマンド数を指定するＭａｘＣｍｄｓＰｅｒＲｑｓｔフィールド；（５）リードまたはライトサブコマンドに関連付けることができる最大ブロック数を指定するＭａｘＢｌｋｓＰｅｒＣｍｄフィールド；（６）ＬｕｎＩＤフィールド内で特定されるｌｕｎ及びＣｌｕｓｔｅｒＩＤフィールド内で特定されるｃｌｕｓｔｅｒに対するＡＳＣＩＩにおけるシリアル番号を保持するＳｅｒｉａｌ  Ｎｕｍｂｅｒフィールド；（７）ＬｕｎＩＤフィールド内で特定されるｌｕｎが関連付けられるＡＳＣＩＩにおけるデバイスＩＤを指定するＤｅｖｉｃｅ  Ｎｕｍｂｅｒフィールド；そして（８）ネットワークコマンドを処理する際に使用されるソフトウェアに関連して使用されるソフトウェア及び／又はハードウェアのバージョン番号を指定するｓｅｃｏｎｄ  Ｖｅｒｓｉｏｎ  Ｎｕｍｂｅｒ。
【００３７】
図４Ａ〜４Ｂにはリードネットワークコマンドが記載される。リードネットワークコマンドはホストコンピュータ１６が使用してＮＡＳデバイス１４内のブロックデータストレージデバイス２６に含まれる一つ以上のデータブロックを取得する。リードネットワークコマンドは一つ以上のリードサブコマンドを含み、これらのサブコマンドの各々はデータブロックまたは連続データブロックに関係する。リードネットワークのヘッダ部は０ｘ１０の値のコマンドフィールドを含む。ヘッダ部にはまた、トランザクションキーフィールド、ｃｌｕｓｔｅｒ  ｉｄフィールド及びｌｕｎ  ｉｄフィールドが含まれる。コマンドカウントフィールドはリードネットワークコマンド内のリードサブコマンドの数を表す値を保持する。ヘッダ部に加えて、リードネットワークコマンドは、ＳｔａｒｔＬＢＡフィールド，ＢｌｋＣｏｕｎｔフィールド及びＳｔａｔｕｓ／Ｔｙｐｅフィールドからなる少なくとも一つのリードサブコマンドを含む。ＳｔａｒｔＬＢＡフィールドは、読出し動作が開始する、特定されたｃｌｕｓｔｅｒ  ｉｄ／ｌｕｎ  ｉｄに関するスタートロジカルブロックアドレスを指定するために使用される。ＢｌｋＣｏｕｎｔフィールドは、ＳｔａｒｔＬＢＡフィールド内に指定されたスタートロジカルブロックアドレスから始まる形で読み出されることとなるブロックの数を指定するために使用される。Ｓｔａｔｕｓ／Ｔｙｐｅフィールドはリードサブコマンドに「エラーが無い（ｎｏ  ｅｒｒｏｒ）」ことを示すために使用される。
【００３８】
図４Ｂを参照すると、前に送信されたリードネットワークコマンドまたはリードリクエストに応答してホストコンピュータ１６及び特にホストリモートブロックストレージデバイスプロセッサ４２が受信するアクノリッジメントが記載されている。アクノリッジメントはリードネットワークコマンドのヘッダ部と同じヘッダ部を含む。アクノリッジメントはまた、リードネットワークコマンドの各リードサブコマンドに対応する形で、リードネットワークコマンドに含まれていた値を有するＳｔａｒｔＬＢＡフィールド及びＢｌｋＣｏｕｎｔフィールドを含む。Ｓｔａｔｕｓ／Ｔｙｐｅフィールドは、ブロックデータストレージデバイスからデータを読み出す際にエラーが生じたかどうかを示す値を保持する。さらに、エラーが生じた場合、フィールドの値は生じたエラーのタイプを示す。アクノリッジメントはまた、ＮＡＳデバイス１４内のブロックデータストレージデバイス２６から読み出されるリクエストデータのデータフィールドを含む。前に送信されている識別ネットワークコマンドのＣフィールドが「１」に設定されてエラー訂正のコード化ができる場合、アクノリッジメントはＥＣＣフィールドも含み、このＥＣＣフィールドはデータフィールドにデータ用のエラー訂正コードを保持する。
【００３９】
図５Ａ〜５Ｂを参照すると、ライトネットワークコマンドが記載されている。ライトネットワークコマンドまたはライトリクエストはホストコンピュータが使用して一つ以上のデータブロックをＮＡＳデバイス１４内のブロックデータストレージデバイス２６に書き込む。ライトネットワークコマンドは、データブロックまたは連続するデータブロックに関係する一つ以上のライトサブコマンドを含む。ライトネットワークコマンドのヘッダ部は０ｘ２０の値のコマンドフィールドを含む。ヘッダ部はさらに、トランザクションキーフィールド、ｃｌｕｓｔｅｒ  ｉｄフィールド及びｌｕｎ  ｉｄフィールドを含む。コマンドカウントフィールドはライトネットワークコマンド内のライトサブコマンドの数を表す値を保持する。ヘッダ部に加えてライトネットワークコマンドは、ＳｔａｒｔＬＢＡフィールド，ＢｌｋＣｏｕｎｔフィールド及びＳｔａｔｕｓ／Ｔｙｐｅフィールドからなる少なくとも一つのライトサブコマンドを含む。ＳｔａｒｔＬＢＡフィールドは、書込み動作が開始する、特定されたｃｌｕｓｔｅｒ  ｉｄ／ｌｕｎ  ｉｄに対する開始ロジカルブロックアドレスを指定するために使用される。ＢｌｋＣｏｕｎｔフィールドは、ＳｔａｒｔＬＢＡフィールドにより指定されたスタートロジカルブロックアドレスから始まる形で書き込まれることとなるブロックの数を指定するために使用される。Ｓｔａｔｕｓ／Ｔｙｐｅフィールドはライトサブコマンドに「エラーが無い（ｎｏ  ｅｒｒｏｒ）」ことを示すために使用される。ライトネットワークコマンドはさらに、ｃｌｕｓｔｅｒ  ｉｄフィールド,ｌｕｎ  ｉｄフィールド及びＳｔａｒｔＬＢＡフィールドに示される値に従ってＮＡＳデバイス１４内のブロックデータストレージデバイス２６の内の一つに書き込まれることとなるデータを保持するデータフィールドを含む。さらに、ライトネットワークコマンドは、前に送信されている識別ネットワークコマンド中のＣフィールドが「１」に設定されている場合、データフィールドに示されるデータ用のエラー訂正コードを含むエラー訂正コードフィールドを含む。
【００４０】
図５Ｂを参照すると、前に送信されたライトネットワークコマンドまたはライトリクエストに応答してホストコンピュータ１６及び特にホストリモートブロックストレージデバイスプロセッサ４２が受信するアクノリッジメントが記載されている。データを受信し、そしてブロックデータストレージデバイス２６の内の一つに書き込む準備ができたことをＮＡＳデバイス１４内のオペレーティングシステム２８が認識した後、アクノリッジメントがＮＡＳデバイス１４により生成され、そしてホストコンピュータ１６に送信される。従って、アクノリッジメントは、データが実際に物理デバイス、すなわちブロックデータストレージデバイス２６の内の一つに書き込まれる前に、ホストコンピュータ１６に送信することができる。アクノリッジメントは、ライトネットワークコマンドのヘッダ部と同じフィールド及びこれらのフィールドの値と同じ値を有するヘッダ部を含む。アクノリッジメントはまた、ライトネットワークコマンドの各ライトサブコマンドに対応する形で、ライトネットワークコマンドに含まれていた値を有するＳｔａｒｔＬＢＡフィールド及びＢｌｋＣｏｕｎｔフィールドを含む。Ｓｔａｔｕｓ／Ｔｙｐｅフィールドは、ブロックデータストレージデバイスにデータを書き込む際にエラーが生じたかどうかを示す値を保持する。さらに、エラーが生じた場合、フィールドの値は生じたエラーのタイプを示す。しかしながらアクノリッジメントは、ライトネットワークコマンドのデータフィールド（フィールド群）に在ったデータを含まない。
【００４１】
図６Ａ〜６Ｂを参照すると、ライト／ナウ（ｗｒｉｔｅ／ｎｏｗ）ネットワークコマンドが記載されている。一般的に、ライト／ナウネットワークコマンドはライトネットワークコマンドと同じ目的を果たす。すなわち、ライト／ナウネットワークコマンドをホストコンピュータ１６が使用してデータブロックをＮＡＳデバイス１４内のブロックデータストレージデバイス２６に書き込む。ライト／ナウネットワークコマンドとライトネットワークコマンドとの間の違いはアクノリッジメントのタイミングにある。ＮＡＳデバイス１４は前に記載したように、オペレーティングシステム２８が一旦、データをブロックデータストレージデバイス２６の内の一つに書き込むためにデータが利用可能であることを認識すると、アクノリッジメントを生成し、そして送信する。その結果、アクノリッジメントは、データがブロックデータストレージデバイス２６の内の一つに書き込まれる前に必ず送信することができる。これとは対照的に、ＮＡＳデバイス１４は、データが実際に物理デバイス、すなわちブロックデータストレージデバイス２６の内の一つに書き込まれる前までに、ライト／ナウネットワークコマンドに対するアクノリッジメントを生成せず、送信しない。
【００４２】
図６Ａ〜６Ｂを参照すると、ライト／ナウネットワークコマンドは０ｘ２０の値のコマンドフィールドを有するヘッダ部を含んでいる。ヘッダ部内にはまた、トランザクションキーフィールド、ｃｌｕｓｔｅｒ  ｉｄフィールド及びｌｕｎ  ｉｄフィールドが含まれる。コマンドカウントフィールドはライト／ナウネットワークコマンド内のライトサブコマンドの数を表す値を保持する。ヘッダ部に加えてライトネットワークコマンドは、ＳｔａｒｔＬＢＡフィールド，ＢｌｋＣｏｕｎｔフィールド及びＳｔａｔｕｓ／Ｔｙｐｅフィールドからなる少なくとも一つのライトサブコマンドを含む。ＳｔａｒｔＬＢＡは、書込み動作が開始する、特定されたｃｌｕｓｔｅｒ  ｉｄ／ｌｕｎ  ｉｄに対する開始ロジカルブロックアドレスを指定するために使用される。ＢｌｋＣｏｕｎｔフィールドは、ＳｔａｒｔＬＢＡフィールドにより指定されたスタートロジカルブロックアドレスから始まる形で書き込まれることとなるブロックの数を指定するために使用される。Ｓｔａｔｕｓ／Ｔｙｐｅフィールドはライトサブコマンドに「エラーが無い（ｎｏ  ｅｒｒｏｒ）」ことを示すために使用される。ライトネットワークコマンドはさらに、ｃｌｕｓｔｅｒ  ｉｄフィールド,ｌｕｎ  ｉｄフィールド及びＳｔａｒｔＬＢＡフィールドに示される値に従ってＮＡＳデバイス１４内のブロックデータストレージデバイス２６の内の一つに書き込まれることとなるデータを保持するデータフィールドを含む。さらにライトネットワークコマンドは、前に送信されている識別ネットワークコマンドのＣフィールドが「１」に設定されている場合、データフィールドに示されるデータ用のエラー訂正コードを含むエラー訂正コードフィールドを含む。
【００４３】
図６Ｂを参照すると、前に送信されたライト／ナウネットワークコマンドに応答してホストコンピュータ１６及び特にホストリモートブロックストレージデバイスプロセッサ４２が受信するアクノリッジメントが記載されている。アクノリッジメントは、データが実際にブロックデータストレージデバイス２６の内の一つ以上に書き込まれた後に、ＮＡＳデバイス１４により生成され、そしてホストコンピュータ１６に送信される。アクノリッジメントは、ライト／ナウネットワークコマンドのヘッダ部と同じフィールド及びこれらのフィールドの値と同じ値を有するヘッダ部を含む。アクノリッジメントはまた、ライトネットワークコマンドの各ライトサブコマンドに対応する形で、ライトネットワークコマンドに在ったのと同じ値のＳｔａｒｔＬＢＡフィールド及びＢｌｋＣｏｕｎｔフィールドを含む。Ｓｔａｔｕｓ／Ｔｙｐｅフィールドは、ブロックデータストレージデバイスにデータを書き込む際にエラーが生じたかどうかを示す値を保持する。さらに、エラーが生じた場合、フィールドの値は生じたエラーのタイプを示す。しかしながらアクノリッジメントは、ライトネットワークコマンドのデータフィールド（フィールド群）に含まれていたデータを含まない。
【００４４】
図７Ａ〜７Ｂを参照すると、切断ネットワークコマンドまたは切断リクエストが記載されている。切断ネットワークコマンドはホストコンピュータ１６が使用してＮＡＳデバイス１４とのソケット接続を終了させる。他のネットワークコマンドとは異なり、切断ネットワークコマンドはＮＡＳデバイス１４がホストコンピュータ１６に送信することにより接続を終了させることもできる。ホストコンピュータ１６が切断ネットワークコマンドを送信する場合、ＮＡＳデバイス１４は全ての未了のリード及び／又はライト処理を処理することにより応答し、アクノリッジメントを送信し、そして接続を終了させる。ＮＡＳデバイス１４が切断ネットワークコマンドをホストコンピュータ１６に送信する場合、ホストコンピュータ１６は未了で、アクノリッジを受信していないリードまたはライトネットワークコマンドがどれも回復できない程に損なわれていると推定する。
【００４５】
図７Ａを参照すると、切断ネットワークコマンドまたは切断リクエストが０ｘ４１の値のコマンドフィールドを有するヘッダ部を含んでいる。ヘッダ部はまた、トランザクションキーフィールド、ｃｌｕｓｔｅｒ  ｉｄフィールド及びｌｕｎ  ｉｄフィールドを含む。コマンドカウントフィールドは、切断ネットワークコマンドまたは切断リクエストが切断ネットワークコマンドを含み、サブコマンドは含まないことを表す０ｘ０１の値を保持する。
【００４６】
図７Ｂを参照すると、切断ネットワークコマンドの受信先により生成され、そして切断ネットワークコマンドの送信元に供給されるアクノリッジメントが記載されている。アクノリッジメントは切断ネットワークコマンドのフィールドと同じフィールドを含む。アクノリッジメントのフィールドの値は切断ネットワークコマンドのフィールドの値と同じである。
【００４７】
図８Ａ〜８Ｃを参照すると、「ｐｉｎｇ」ネットワークコマンドまたはｐｉｎｇリクエストが記載されている。ｐｉｎｇネットワークコマンドをホストコンピュータ１６が使用することによりネットワークの遅延を求める。ｐｉｎｇネットワークコマンドも切断ネットワークコマンドと同じく、ＮＡＳデバイス１４が発行する。ネットワークの遅延を求めるために、ＮＡＳデバイス１４及びホストコンピュータ１６がともに同期している、すなわちこれらの内部システムクロックが同期していると仮定する。通常同期は、頭文字ＮＴＰで共通に表されるネットワークタイムプロトコル（ｎｅｔｗｏｒｋ  ｔｉｍｅ  ｐｒｏｔｏｃｏｌ）を使用してネットワークの起動時に実現させる。
【００４８】
図８Ａによれば、ｐｉｎｇネットワークコマンドは、値が０ｘ０１のコマンドフィールドを有するヘッダ部を含む。ヘッダ部はさらに、トランザクションキーフィールド、ｃｌｕｓｔｅｒ  ｉｄフィールド及びｌｕｎ  ｉｄフィールドを含む。コマンドカウントフィールドは、ｐｉｎｇネットワークコマンドがｐｉｎｇネットワークコマンドを含み、サブコマンドを含まないリクエストであることを表す０ｘ０１の値を保持する。ｐｉｎｇネットワークコマンドはさらに、送信元（すなわち、ホストコンピュータ１６またはＮＡＳデバイス１４）が送信元内部システムクロックに示されるように、ｐｉｎｇネットワークコマンドを送信した時刻を表す値を保持する「ｔ０」フィールドを含む。
【００４９】
図８Ｂによれば、ｐｉｎｇネットワークコマンドのアクノリッジメントは、ｐｉｎｇネットワークコマンドと同じフィールド及びフィールドの値と同じ値を含むヘッダ部を含む。特に、アクノリッジメントはコマンドフィールド、トランザクションキーフィールド、ｃｌｕｓｔｅｒ  ｉｄフィールド、ｌｕｎ  ｉｄフィールド、コマンドカウントフィールド及びｔ０フィールドを含み、各フィールドはｐｉｎｇネットワークコマンドに在ったのと同じ値を含む。さらに、アクノリッジメントはｔ１フィールド及びｔ２フィールドを含む。ｔ１フィールドは受信先内部システムクロックに示されるように、ｐｉｎｇネットワークコマンドが受信先により受信された時刻を含む。ｔ２フィールドは受信先内部システムクロックに示されるように、アクノリッジメントが受信先から送信元に送信された時刻を含む。
【００５０】
図８Ｃによれば、ｐｉｎｇネットワークコマンドに対する完全な応答は、ｐｉｎｇネットワークコマンドのアクノリッジメントと同じフィールド及びフィールドの値と同じ値を含むヘッダ部を含む。特に完全な応答は、コマンドフィールド、トランザクションキーフィールド、ｃｌｕｓｔｅｒ  ｉｄフィールド、ｌｕｎ  ｉｄフィールド、コマンドカウントフィールド、及びｔ０、ｔ１及びｔ２フィールドを含み、各フィールドはアクノリッジメントの該当するフィールドに含まれていた値を含む。完全な応答はさらに、送信元内部システムクロックに示されるように、送信元が受信先からアクノリッジメントを受信した時刻を保持するｔ３フィールドを含む。
【００５１】
ｔ０、ｔ１及びｔ２フィールドの値を送信元が使用して、送信元と受信先との間の遅延を表す或る情報を判断する。特に、往復時間または往復遅延はｔ３フィールドの値からｔ０フィールドの値を引いた値であり；アップロード時間またはアップロード遅延はｔ１フィールドの値からｔ０フィールドの値を引いた値であり；そしてダウンロード時間またはダウンロード遅延はｔ３フィールドの値からｔ２フィールドの値を引いた値である。これらの値は必要に応じてＮＡＳデバイス１４のオペレーティングシステム２８及び／又はホストデバイス１６のオペレーティングシステム４０が使用してデータ転送を管理する。特に、オペレーティングシステム４０はアップロード時間、ダウンロード時間及び／又は往復時間を使用して、とりわけ、遅延、ＮＡＳデバイス１４が「正常動作している」かどうか、及びデータ転送のタイムアウト限界を判断する。
【００５２】
ブロックストレージデバイスプロセッサ３０の実施形態を図９を参照して記載する。プロセッサ３０は一般的に、監視装置５６、リクエストリスナー５８、及びリクエスト管理装置６０を備える。監視装置５６は次のように動作する：（１）リクエストリスナー５８をスタートさせ；（２）リクエスト管理装置６０をスタートさせ；そして（３）ワーク・キュー（ワーク・キュー群）及びワーク・スレッド（ワーク・スレッド群）を生成してリクエストまたはネットワークコマンドを処理し、この場合、キュー（キュー群）及びスレッド（スレッド群）はコンフィギュレーションファイル（図示せず）に従って生成する。
【００５３】
ワーク・キューはネットワークリクエストまたはネットワークコマンドを保持する構造である。ワーク・スレッドは待ち状態のネットワークリクエストまたはネットワークコマンドを処理する。リードまたはライトネットワークコマンドのリードまたはライトサブコマンド及び識別ネットワークコマンドの処理には、リクエストのヘッダ部のｃｌｕｓｔｅｒ  ｉｄフィールド及びｌｕｎ  ｉｄフィールドの値に関連する物理デバイスに対応する形で、コマンドを実行するために必要なデバイス固有のコマンドを生成し、そして物理デバイスから固有デバイスコマンドに対する全ての応答を処理することが含まれる。デバイス固有コマンドの生成に関しては、スレッドはコマンドを実行するために必要な一つ以上のデバイス固有コマンドからなるストリングを生成する。例えば、物理デバイスがディスクドライブである場合にリードネットワークコマンドを実行するために、スレッドは次の処理を行なうためのデバイス固有コマンドを発行する：（１）ドライブのステータスを取得し；（２）ドライブが利用可能である場合に、ドライブにアクセスを要求している可能性のある他のスレッドに対するドライブを予約し；（３）ドライブ内のアクチュエータにリード／ライトヘッドを開始ロジカルブロックアドレスが位置するトラックに移動させ；そして（４）一旦目的のトラックに移動すると、特定数のブロックを特定の開始アドレスから開始する形でドライブから読み出す。固有のデバイスコマンドに対する物理デバイスからの全ての応答の処理には、リードネットワークコマンドの場合、アクノリッジメントを返したリクエストデータを供給してネットワークインフラストラクチャを通してホストコンピュータ１６に送信することが含まれる。ライトネットワークコマンドの場合、処理にはアクノリッジメントを生成してネットワークインフラストラクチャを通してホストコンピュータ１６に送信することが含まれる。リード／ライトネットワークコマンドという特定ケースの場合、アクノリッジメントは、データが実際に物理デバイスに書き込まれた後に供給される。デバイス固有コマンドの生成を含み得る識別ネットワークコマンドの場合、処理にはアクノリッジメントの生成が含まれる。応答の処理には、固有のデバイスコマンドに応答して生じる全てのエラー状態の処理も含まれる。スレッドは少なくとも、送信元デバイスに転送されるエラー応答を供給する機能だけは備える。別の実施形態においては、スレッドは別のデバイス固有コマンドを発行することによりエラー状態から回復しようと試みる。例えば、スレッドは単にデバイス固有コマンドを１回以上再試行する。
【００５４】
リクエストリスナー５８は次のように動作する：（１）ネットワーク（このネットワークは図示の実施形態では単にホストコンピュータ１６とすることができる）内の他の構成要素からの接続を受け入れ；そして（２）ネットワーク内の他の構成要素から受信したリクエストをリクエスト管理装置に転送してそこで処理する。
【００５５】
リクエスト管理装置６０は次のように動作する：（１）リクエストまたはネットワークコマンドをリクエストリスナー５８から受信し；（２）リード／ライトリクエストまたはネットワークコマンド内のサブコマンドを分離し；そして（３）ネットワークコマンド及びサブコマンドをワーク・キューに書き込んでワーク・スレッドにより処理する。通常、監視装置５６は一つよりも多くのワーク・キュー及び一つよりも多くのワーク・スレッドを生成する。この場合、処理のためにコマンドをワーク・キューに割当てることは、ワーク・スレッドの各々に現時点で生じているワーク負荷のリクエスト管理装置による評価に基づく。さらに、リクエストまたはネットワークコマンドが切断ネットワークコマンドである場合、管理装置６０はこれ以上ワーク・キューをロードさせず、そしてワーク・スレッドまたはワーク・スレッド群が全ての待ち状態のコマンドの処理を完了すると、アクノリッジメントを生成する。管理装置６０はまた、ｐｉｎｇネットワークコマンドに応答してアクノリッジメントを生成する。
【００５６】
図１を参照すると、ホストコンピュータ１６とＮＡＳデバイス１４との間のブロックデータ転送が記載されている。一般的に、ホストリモートブロックストレージデバイスプロセッサ４２及びホストオペレーティングシステム４０の他の部分はファイルコマンドを、ホストコンピュータ１６内で実行されるアプリケーションプログラムから受信し、ファイルコマンドを一つ以上のリード／ライトネットワークコマンドに変換し、そしてそのようなネットワークコマンドを全てネットワークインターフェイスカード３６に供給し、パケットプロトコルに従ってネットワークインフラストラクチャ１８を通してＮＡＳデバイス１４に転送するように動作する。一般的に、ＮＡＳデバイス１４内のブロックストレージデバイスプロセッサ３０は、ブロックストレージデバイスインターフェイス２４を通して一つ以上のデバイス固有コマンドをブロックデータストレージデバイス２６の内の一つに発行することにより、リード／ライトネットワークコマンドの全てに応答する。さらに、ＮＡＳデバイス１４は、リード／ライトネットワークコマンドのアクノリッジメントをパケットプロトコル（例えばＴＣＰ／ＩＰ）に従ってホストコンピュータ１６にストレージデバイスネットワークインターフェイス２２及びネットワークインフラストラクチャ１８を通して転送する。一般的に、ホストコンピュータ１６は、ホストネットワークインターフェイス３６によるパケットの再組立てが全て終わった後に、アクノリッジメントをホストネットワークインターフェイス３６からホストリモートブロックストレージデバイスプロセッサ４２に転送するように動作する。ホストリモートブロックストレージデバイスプロセッサ４２及びホストオペレーティングシステム４０の他の部分は協同して前に発行されたリード／ライトネットワークコマンドのアクノリッジメントを処理する。リードネットワークコマンドの場合、プロセッサ４２及びホストオペレーティングシステム４０の他の部分は協同して、ブロックデータストレージデバイス２６の内の一つから読み出され、そしてアクノリッジメント中に具体化されたデータを、そのデータをリードファイルコマンドの形でリクエストしたアプリケーションに供給する。ライトネットワークコマンドの場合、プロセッサ４２及びホストオペレーティングシステム４０の他の部分は通常、協同してアプリケーションプログラムに、アプリケーションプログラムがファイルコマンドの形でストレージに書き込むことをリクエストしたデータがストレージデバイスに書き込まれたことを示す通知を供給する。
【００５７】
図３〜９に示すネットワークコマンドの特定の実施形態と関連する、ホストコンピュータ１６とＮＡＳデバイス１４との間のブロックデータ転送の例として、ＮＡＳデバイス１４の一部であるブロックデータストレージデバイス２６の内の一つに含まれるブロックデータの、ホストコンピュータ１６内で実行するアプリケーションへの転送が記載されている。通常、リードネットワークコマンドを発行する前に、ホストリモートブロックストレージデバイスプロセッサ４２は識別ネットワークコマンドを発行することにより、全てのリードネットワークコマンドをフォーマットするために必要な、またはフォーマットするために望ましいデバイス固有の情報を判断する。識別ネットワークコマンドはパケットプロトコルに従って、ブロックストレージデバイスプロセッサ３０にホストネットワークインターフェイス３６、ネットワークインフラストラクチャ１８、及びストレージデバイスネットワークインターフェイス２２を通して送信される。それに応答して、ブロックストレージデバイスプロセッサ３０がアクノリッジメントに必要な情報を判断するためにデバイス固有コマンドを物理デバイスに発行する。いずれにせよ、ブロックストレージデバイスプロセッサ３０はアクノリッジメントを生成し、そしてアクノリッジメント中の種々のフィールドの値を決定する。プロセッサ３０はまた、アクノリッジメントをストレージデバイスネットワークインターフェイス２２に供給し、そこからホストコンピュータ１６にネットワークインフラストラクチャ１８を通して転送する。
【００５８】
一旦ホストリモートブロックストレージデバイスプロセッサ４２が、リードネットワークコマンドをブロックデータストレージデバイスの内の一つのために適切にフォーマットするのに必要な、または望ましい情報を取得したと判断すると、プロセッサ４２は、ホストコンピュータ１６で実行されるアプリケーションプログラムからのリードファイルリクエストに応答してリードネットワークコマンドを生成することができる。詳細に説明すると、ホストオペレーティングシステム４０はアプリケーション３８からリードファイルコマンド（例えばリードファイル“ｘｙｚ”）を受信するが、この場合、ファイル“ｘｙｚ”はブロックデータストレージデバイス２６の内の一つに位置する。プロセッサ４２はホストオペレーティングシステム４０の他の部分と協同して、識別ネットワークコマンドに対するアクノリッジメントの中に含まれる情報に依存する形でリードファイルコマンドを一つ以上のリードネットワークコマンドに変換する。リードネットワークコマンドまたは複数のリードネットワークコマンドは、パケットプロトコルに従ってＮＡＳデバイス１４にホストネットワークインターフェイス３６及びネットワークインフラストラクチャ１８を通して転送される。ブロックストレージデバイスプロセッサ３０は、適切なデバイス固有コマンドをブロックストレージデバイス２６の内の一つに発行して要求されたデータを読み出すことにより、リードネットワークコマンドまたは複数のリードネットワークコマンドを処理する。一旦データがリードネットワークコマンドに対応するデバイスから読み出されると、プロセッサ３０はデータをアクノリッジメントに格納し、そしてアクノリッジメントをストレージデバイスネットワークインターフェイス２２に供給し、そこからホストコンピュータ１６にネットワークインフラストラクチャ１８を通して、かつ、パケットプロトコルに従って転送する。
【００５９】
ホストネットワークインターフェイス３６は、リードネットワークコマンドに対するアクノリッジメントを受信し、そしてパケットの再組立て後に必ず、アクノリッジメントをホストリモートブロックストレージデバイスプロセッサ４２に供給する。これに応答して、プロセッサ４２及びホストオペレーティングシステム４０の他の部分が協同してアクノリッジメント中のデータを、リードネットワークコマンドまたは複数のリードネットワークコマンドの発行の起因となったリードファイルコマンドを発行したアプリケーションに供給する。
【００６０】
図１０及び１１を参照しながら、アプリケーションプログラムインターフェイス（ＡＰＩ）６２を有するブロックストレージデバイスプロセッサ３０の実施形態及びＡＰＩ６４を有するホストリモートブロックストレージデバイスプロセッサ４２の実施形態を議論する。ＡＰＩ６２及びＡＰＩ６４の各々は、プロセッサに接続されるソフトウェア層が、メモリ及び／又はストレージデバイスをネットワーク１０内で実現する方法を指定しなければならない必要性、または指定するように適合化されなければならない必要性を持たないで済むように機能する。ＡＰＩ６２及び６４はさらに、アプリケーションプログラマーにコマンドインターフェイスを提供し、このインターフェイスによりプログラマーはブロックデータ転送を特定のアプリケーションに対して最適化することができる。例えば、ストリーミングビデオを含むアプリケーションにおいては、ＡＰＩにより、アプリケーションプログラマーは、ネットワーク内のブロックデータ転送を最適化してストリーミングビデオアプリケーションを実行することができる。一の実施形態においては、ＡＰＩ６２及び６４により、ネットワーク機能、デバイス機能及びメモリ機能を実行することが可能になる。
【００６１】
ネットワーク機能は電話に似たモデルを実現し、このモデルにおいては、コールを発し、そしてコールを返して接続を確立させる。ＮＡＳデバイス１４側ではｎｅｔＬｉｓｔｅｎネットワーク機能を利用してホスト１６からの接続リクエストをリスニングし；プロセスのホスト１６側ではｎｅｔＣａｌｌネットワーク機能を利用して接続リクエストを送信し；そしてプロセスのＮＡＳデバイス１４側ではｎｅｔＡｎｓｗｅｒネットワーク機能を利用して接続リクエストを承認する、すなわちＮＡＳデバイス１４とホスト１６との間の接続確立を指示する。一旦接続が確立すると、ｎｅｔＲｅａｄ及びｎｅｔＷｒｉｔｅネットワーク機能を利用して接続を通してのデータ転送を有効にする。他のネットワーク機能も実行可能である。
【００６２】
ＮＡＳデバイス１４側ではｄｅｖＲｅａｄ及びｄｅｖＷｒｉｔｅデバイス機能をそれぞれ利用してデバイスからデータブロックを読出し、そしてブロックデータストレージデバイスにデータブロックを書き込む。他のデバイス機能には：（ａ）読出し／書込み用のブロックデータストレージデバイスを開くｄｅｖＯｐｅｎ；（ｂ）デバイスを閉じて他のプロセスからのブロックデータストレージデバイスへのアクセスを可能にするｄｅｖＣｌｏｓｅ；そして（ｃ）ブロックデータストレージデバイスの現在の状態（例えば利用可能、利用不能、予約済み等）を取得するためのｄｅｖＳｔａｔｕｓが含まれる。他のデバイス機能も実現可能である。
【００６３】
メモリ機能により、メモリのＮＡＳデバイス１４側及びホストコンピュータ１６側双方への割当て、及び割当て解除が可能となる。
今まで記載してきた実施形態は、本発明を実施する方法を示す最良のモードについて説明し、かつ、この技術分野の当業者が本発明を利用することができるようにすることを意図したものである。
【図面の簡単な説明】
【００６４】
【図１】コンピュータネットワークのブロック図であり、このコンピュータネットワークは本発明を具現化し、ホストコンピュータ、ホストコンピュータに対してリモートであり、ブロックデータストレージデバイスを有する送信先コンピュータ、及びホストコンピュータと送信先コンピュータとの間の通信を伝送するネットワークインフラストラクチャを含む。
【図２】「リクエスト」のヘッダを示す。
【図３】Ａ，Ｂはそれぞれ識別ネットワークコマンド及びそのアクノリッジメントを示す。
【図４】Ａ，Ｂはそれぞれリードネットワークコマンド及びそのアクノリッジメントを示す。
【図５】Ａ，Ｂはそれぞれライトネットワークコマンド及びそのアクノリッジメントを示す。
【図６】Ａ，Ｂはそれぞれリード／ナウ（ｒｅａｄ／ｎｏｗ）ネットワークコマンド及びそのアクノリッジメントを示す。
【図７】Ａ，Ｂはそれぞれ切断ネットワークコマンド及びそのアクノリッジメントを示す。
【図８】Ａ〜Ｃはそれぞれ「ｐｉｎｇ」ネットワークコマンド、そのコマンドのアクノリッジメント、及び完了したコマンドを示す。
【図９】ＮＡＳデバイス内のオペレーティングシステムのブロックストレージデバイスプロセッサ部の一実施形態を示す。
【図１０】ブロックストレージプロセッサ及びプロセッサと共に使用するアプリケーションプログラムインターフェイスを示す。
【図１１】ホストリモートブロックストレージデバイスプロセッサ及びプロセッサと共に使用するアプリケーションプログラムインターフェイスを示す。
【図１】
2005527007.tif 000003
【図２】
2005527007.tif 000004
【図３】
2005527007.tif 000005
【図４】
2005527007.tif 000006
【図５】
2005527007.tif 000007
【図６】
2005527007.tif 000008
【図７】
2005527007.tif 000009
【図８】
2005527007.tif 000010
【図９】
2005527007.tif 000011
【図１０】
2005527007.tif 000012
【図１１】
2005527007.tif 000013
【国際調査報告】
2005527007.tif 000014