(57)【要約】データ・リンクとデータ・プロセッサの間のインターフェースを提供する通信インターフェースであって、前記データ・プロセッサはオペレーティング・システムおよびユーザ・アプリケーションをサポートすることができ、通信インターフェースは、前記リンクを介して受け取られ、ユーザ・アプリケーションに関連付けられた論理データ・ポートにアドレス指定されたデータの第１のキューをサポートし、前記リンクを介して受け取られ、前記オペレーティング・システムに宛先指定されていると識別されたデータの第２のキューをサポートし、前記リンクを介して受け取られ、前記オペレーティング・システムまたは前記データ・ポートに宛先指定されていると識別されたデータを分析して、そのデータが１つまたは複数の事前定義された基準を満たすかどうか判定し、それが前記基準を満たす場合、前記オペレーティング・システムに割り込みを送信する。
2005539305.tif 000002
【特許請求の範囲】
【請求項１】
データ・リンクとデータ・プロセッサの間のインターフェースを提供する通信インターフェースであって、前記データ・プロセッサはオペレーティング・システムおよびユーザ・アプリケーションをサポートすることができ、
前記リンクを介して受け取られ、ユーザ・アプリケーションに関連付けられた論理データ・ポートにアドレス指定されたデータの第１のキューをサポートし、
前記リンクを介して受け取られ、前記オペレーティング・システムに宛先指定されていると識別されたデータの第２のキューをサポートし、
前記リンクを介して受け取られ、前記オペレーティング・システムまたは前記データ・ポートに宛先指定されていると識別されたデータを分析して、そのデータが１つまたは複数の事前定義された基準を満たすかどうか判定し、それが前記基準を満たす場合、前記オペレーティング・システムに割り込みを送信する
ように構成された通信インターフェース。
【請求項２】
前記ユーザ・アプリケーションがアドレス空間を持ち、前記第１のキューがそのアドレス空間に位置する請求項１に記載の通信インターフェース。
【請求項３】
前記オペレーティング・システムがアドレス空間を持ち、前記第２のキューがそのアドレス空間に位置する請求項１または２に記載の通信インターフェース。
【請求項４】
前記ユーザ・アプリケーションおよび前記オペレーティング・システムが同じアドレス空間を持つ請求項２に従属する請求項３に記載の通信インターフェース。
【請求項５】
前記リンクを介して受け取られ、前記データ・ポートに宛先指定されていると識別された前記第１のキューデータに適用されるように構成された前記請求項のいずれかに記載の通信インターフェース。
【請求項６】
前記リンクを介して受け取られ、前記オペレーティング・システムに宛先指定されていると識別された前記第２のキューデータに適用されるように構成された請求項１〜５のいずれかに記載の通信インターフェース。
【請求項７】
前記事前定義された基準の１つは、前記リンクを介して受け取られた前記データが１つまたは複数の所定のメッセージ形式にマッチする場合、前記通信インターフェースが前記オペレーティング・システムに割り込みを送信するというものである請求項１〜６のいずれかに記載の通信インターフェース。
【請求項８】
前記データが前記事前定義された基準の１つまたは複数および１つまたは複数のさらなる基準を満たす場合、前記オペレーティング・システムに割り込みを送信し、前記データがアドレス指定されたポートを示す前記オペレーティング・システムへのメッセージを送信するように構成された請求項１〜７のいずれかに記載の通信インターフェース。
【請求項９】
前記さらなる基準がエラー条件を示す請求項８に記載の通信インターフェース。
【請求項１０】
前記リンクを介して受け取られ、ユーザ・アプリケーションに関連付けられた論理データ・ポートにアドレス指定されたデータの第３のキューをサポートするように構成され、前記リンクを介して受け取られた、固定長を有する形式の前記第１のキューデータ単位に適用されると共に、前記リンクを介して受け取られた、可変長を有する形式の前記第３のキューデータ単位に適用されるように構成された請求項１〜９のいずれかに記載の通信インターフェース。
【請求項１１】
前記固定サイズのデータ単位が、前記リンクを介して受け取られ、前記通信インターフェースによってエラー状況を示していると解釈されたメッセージを含む請求項１０に記載の通信インターフェース。
【請求項１２】
前記固定サイズのデータ単位が、前記リンクを介して受け取られ、前記通信インターフェースによって、接続のセットアップを求める要求またはその肯定応答を示していると解釈されたメッセージを含む請求項１０または１１に記載の通信インターフェース。
【請求項１３】
前記固定サイズのデータ単位が、前記リンクを介して受け取られ、前記通信インターフェースによってデータ配信イベントを示していると解釈されたメッセージを含む請求項１０〜１２のいずれかに記載の通信インターフェース。
【請求項１４】
前記リンクを介して受け取られた各データ単位の内容を分析し、そのデータ単位の内容に応じて、前記データ単位を前記キューのうちのどれに適用するか決定するように構成された請求項１〜１３のいずれかに記載の通信インターフェース。
【請求項１５】
前記オペレーティング・システムによって前記基準を設定するように構成可能である請求項１〜１４のいずれかに記載の通信インターフェース。
【請求項１６】
前記通信インターフェースと前記オペレーティング・システムの一方または両方が、所定のタイプのメッセージに応答して、前記ポートの状況を示す情報を含むメッセージを返す請求項１〜１５のいずれかに記載の通信インターフェース。
【請求項１７】
請求項１６に記載の通信インターフェース、および前記データ・プロセッサを含み、前記データ・プロセッサは、データ・ポートが関連付けられたアプリケーションの処理が中断されたとき、そのデータ・ポートに宛先指定されていると識別されたデータを受け取ると、前記通信インターフェースが前記オペレーティング・システムに割り込みを送信するという前記基準を設定するように構成された通信システム。
【請求項１８】
データ・リンクとメモリを含む第１のデータ処理装置との間のインターフェースを提供する通信インターフェースであって、前記データ・インターフェースは、前記第１のデータ処理装置の前記メモリの一領域が、前記リンクによって前記通信インターフェースに接続された第２のデータ処理装置のメモリにマップされ得るというものであり、前記第２のデータ処理装置中の第１の１つまたは複数のメモリ・ロケーションの範囲の、前記第１のデータ処理装置中の第２の１つまたは複数のメモリ・ロケーションの範囲へのマッピングを確立すると、前記第２のデータ処理装置に前記第１のメモリ・ロケーションの範囲を識別するデータを送信するように構成された通信インターフェース。
【請求項１９】
前記第１のデータ処理装置の前記メモリ中の前記１つまたは複数のメモリ・ロケーションが１つまたは複数の仮想メモリ・ロケーションであり、前記マッピングを確立すると、前記１つまたは複数の仮想メモリ・ロケーションの、前記第１のデータ処理装置の前記メモリ中の１つまたは複数の物理メモリ・ロケーションへのさらなるマッピングを確立するように構成された請求項１８に記載の通信インターフェース。
【請求項２０】
前記第２のデータ処理装置の前記メモリ中の第１の１つまたは複数のメモリ・ロケーションの範囲の、前記第１のデータ処理装置の前記メモリ中の第２の１つまたは複数のメモリ・ロケーションの範囲へのマッピングを確立すると、そのマッピングに識別情報を割り振り、その識別情報を前記第２のデータ処理装置に送信するように構成された請求項１８または１９に記載の通信インターフェース。
【請求項２１】
それらが含むデータが適用される宛先ポートを指定するデータ・メッセージによって通信することができる請求項１８〜２０のいずれかに記載の通信インターフェース。
【請求項２２】
前記第２のデータ処理装置の前記メモリ中の第１の１つまたは複数のメモリ・ロケーションの範囲の、前記第１のデータ処理装置の前記メモリ中の第２の１つまたは複数のメモリ・ロケーションの範囲へのマッピングを確立すると、データをチェックし、前記チェック・データを前記第２のデータ処理装置に送信するように構成されると共に、前記チェック・データを示さない前記マッピングを介した後続の通信を拒絶するように構成された請求項１８〜２１のいずれかに記載の通信インターフェース。
【請求項２３】
前記チェック・データが前記通信インターフェースによってランダムに生成される請求項２２に記載の通信インターフェース。
【請求項２４】
前記チェック・データを示すために通信が前記チェック・データを含む請求項２２または２３に記載の通信インターフェース。
【請求項２５】
前記マッピングの操作時に、事前定義された方式に従って、前記チェック・データを変更するように構成された請求項２２〜２４のいずれかに記載の通信インターフェース。
【請求項２６】
前記チェック・データが数を表し、前記事前定義された方式が、前記チェック・データによって表される前記数を、前記マッピングを介して事前定義された回数の通信が受け取られるたびに事前定義された量だけ増分するものである請求項２５に記載の通信インターフェース。
【請求項２７】
前記第１の範囲外のデータにアクセスすることを求める要求を示す前記マッピングを介した後続の通信を拒絶するように構成された請求項１８〜２６のいずれかに記載の通信インターフェース。
【請求項２８】
前記第２のデータ処理装置中の１つまたは複数の仮想メモリ・ロケーションのそれぞれの第１の範囲の、前記第１のデータ処理装置中の１つまたは複数のメモリ・ロケーションのそれぞれの第２の範囲への複数のマッピングをサポートでき、かつそのような各マッピングごとに、前記それぞれの１つまたは複数の仮想メモリ・ロケーションの、前記第１のデータ処理装置の前記メモリ中の１つまたは複数の物理メモリ・ロケーションへのそれぞれのさらなるマッピングする請求項１９または請求項１９に従属する請求項２０〜２７のいずれかに記載の通信インターフェース。
【請求項２９】
前記１つまたは複数の仮想メモリ・ロケーションの範囲のそれぞれとの間のアクセスを前記第１のデータ処理装置の前記メモリ中の前記それぞれの１つまたは複数の物理メモリ・ロケーションとの間のアクセスに変換すると共に、前記第１のデータ処理装置の前記メモリ中の前記１つまたは複数の物理メモリ・ロケーションのそれぞれとの間のアクセスを、１つまたは複数の仮想メモリ・ロケーションの前記それぞれの範囲との間のアクセスに変換する変換インターフェースを備える請求項２８に記載の通信インターフェース。
【請求項３０】
前記さらなるマッピングの詳細を格納するように構成されたマッピング・メモリを備える請求項２９に記載の通信インターフェース。
【請求項３１】
前記マッピング・メモリは、前記変換インターフェースにとってローカルの第１のマッピング・メモリと、前記第１のマッピング・メモリより前記変換インターフェースにとって遠くない第２のマッピング・メモリとを備え、前記さらなるマッピングの全部の詳細を前記第２のマッピング・メモリに格納し、前記さらなるマッピングの一部のみの詳細を前記第１のマッピング・メモリに格納するように構成された請求項３０に記載の通信インターフェース。
【請求項３２】
前記第１のマッピング・メモリが連想メモリである請求項３１に記載の通信インターフェース。
【請求項３３】
前記変換インターフェースが、１つまたは複数の仮想ロケーションの前記範囲の１つとの間のアクセスと、前記第１のデータ処理装置の前記メモリ中の前記それぞれの１つまたは複数の物理メモリ・ロケーションとの間のアクセスとの間で変換を行うために、前記第１のマッピング・メモリに優先的にアクセスして前記変換を実施し、前記アクセスの対象の仮想メモリ・ロケーションの前記範囲の前記マッピングの前記詳細が前記第１のマッピング・メモリに格納されていない場合は、前記第２のマッピング・メモリにアクセスして前記変換を実施するように構成された請求項３１または３２に記載の通信インターフェース。
【請求項３４】
直前に使用されたさらなるマッピングの詳細を前記第１のマッピング・メモリに格納するように構成された請求項３１〜３３のいずれかに記載の通信インターフェース。
【請求項３５】
請求項１８〜３４のいずれかに記載の通信インターフェース、およびオペレーティング・システムおよびユーザ・アプリケーションをサポートすることのできる前記データ・プロセッサを含む通信システムであって、前記第１の範囲に格納されたデータを送信し、または前記第１の範囲に格納するデータを受信するための前記データ・リンクを介した通信での動作パラメータを定義するデータ項目を格納するデータ・ストアを備えるシステム。
【請求項３６】
前記オペレーティング・システムが、ユーザ・アプリケーションに、前記アプリケーションに付与された信頼のレベルに応じて前記データ・ストア中の１つまたは複数のデータ項目にアクセスすることを許可するように構成された請求項３５に記載の通信システム。
【請求項３７】
前記チェック・データが、前記データ・ストア中の前記データ項目の１つとして格納され、前記オペレーティング・システムが、少なくともいくつかのユーザ・アプリケーションに、そのデータ項目への書込みアクセスを行うことを許可するように構成され、前記通信インターフェースが、前記チェック・データを判定するために、そのデータ項目の内容を読み取り、それを前記チェック・データとして扱うように構成された請求項２２に従属する請求項３６に記載の通信システム。
【請求項３８】
前記データ・ストア中のデータ項目は、前記第１のデータ処理装置の前記メモリ中の前記第１のメモリ・ロケーションの範囲の開始点および終了点を定義すると共に、前記第２のデータ処理装置の前記メモリ中の前記第２のメモリ・ロケーションの範囲の開始点および終了点を格納し、前記オペレーティング・システムは、１つまたは複数の信頼レベルを持つアプリケーションに、前記データ・ストア中の前記データ項目への書込みアクセスを行い、前記第２のデータ処理装置の前記メモリ中の前記第２のメモリ・ロケーションの範囲の開始点および終了点を格納することを許可すると共に、どのアプリケーションにも、前記第１のデータ処理装置の前記メモリ中の前記第１のメモリ・ロケーションの範囲の開始点および終了点を定義する前記データ・ストア中の前記データ項目への書込みアクセスを行うことを許可しないように構成された請求項３６または３７に記載の通信システム。
【請求項３９】
請求項１〜１６のいずれかおよび請求項１８〜３４のいずれかに記載の通信インターフェース。
【請求項４０】
請求項１７、および請求項３５から３８のいずれかに記載の通信システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークを介してデータを渡す際に使用するためのネットワーク・インターフェースおよびプロトコルに関する。
【背景技術】
【０００２】
データ・チャネルを介して２つの装置間でデータが転送されるとき、それらの装置のそれぞれは、それがそのチャネルの両端で通信できるようにする適当なネットワーク・インターフェースを持たねばならない。それらの装置およびそのネットワーク・インターフェースは、プロトコルを使用して、そのチャネルを介して送信されるデータを、それが受信側で復号化され得るように形成する。データ・チャネルはネットワークの一部であり、またはその一部を形成するとみなされ、そのネットワークに他の装置が接続され得る。
【０００３】
イーサネット・システムは、多くのネットワーク用途に使用される。ギガビット・イーサネットはイーサネット・プロトコルの高速バージョンであり、特に、サーバ間や、同じまたは異なる筐体内のデータ・プロセッサ間のリンクなど、大量の帯域幅を必要とするリンクに適している。イーサネット・システムを介して通信する装置は、イーサネット・システムの物理的、論理的要件をサポートすることのできるネットワーク・インターフェースを備える。ネットワーク・インターフェースの物理的ハードウェア構成要素は、ネットワーク・インターフェース・カード（ＮＩＣ）と呼ばれるが、それらはカードの形態である必要はない。例えばそれらは、マザーボード上に直接取り付けられた集積回路（ＩＣ）およびコネクタの形態とすることもできる。
【０００４】
ネットワーク中の協働するプロセッサ間でデータが転送される場合、メモリ・マップ・システムを実装するのが一般的である。メモリ・マップ・システムでは、アプリケーション間の通信は、ネットワークを介して別のアプリケーションにマップされている１つのアプリケーションの仮想アドレス空間の一部によって達成される。マッピングを形成するそのアドレス空間中の「穴」はアパーチャと呼ばれる。
【０００５】
図１に、ネットワークを介した仮想アドレス空間（Ｘ０〜Ｘｎ）の別の仮想アドレス空間（Ｙ０〜Ｙｎ）へのマッピングを示す。そのようなシステムでは、Ｘ０〜Ｘｎメモリ空間にアクセスすることのできるＣＰＵは、ストア命令［ｓｔ  ｒ１，ｘ１］を発行することにより、ロケーションｘ１にアクセスしてそのロケーションにレジスタｒ１の内容を書き込むことができるはずである。仮想メモリを物理メモリ・ロケーションにマップするためにメモリ・マッピング・ユニット（ＭＭＵ）が用いられる。
【０００６】
次いで、以下のステップがとられる。
１．ＣＰＵは、仮想アドレスｘ１への書込み操作としてｒ１の内容（例えば値１０など）を出力する
２．ＭＭＵ（ＣＰＵ内に含まれ得る）は、仮想アドレスｘ１を物理アドレスｐｃｉ１に変える（これはページ表探査またはページ不在を含み得る）
３．ＣＰＵの書込みバッファは「ｗｒｉｔｅ  １０，ｐｃｉ１」命令を発し、それが、そのＣＰＵが位置するバスのコントローラ、この例ではＰＣＩ（入出力バス・サブシステム）コントローラによって「捕らえ」られる。次いで、その命令が、コンピュータのＰＣＩバス上に転送される。
４．バスに接続され、ネットワークへのインターフェースを提供するＮＩＣは、そのＰＣＩ命令を「捕らえ」、仮想アドレス空間（Ｙ０〜Ｙｎ）がホストされている宛先コンピュータにデータを転送する
５．同等のハードウェアを備えると想定される宛先コンピュータで、ネットワーク・カードは、そのデータをメモリに格納するためにＰＣＩ書込みトランザクションを出力する
６．受信側アプリケーションは、メモリへの仮想メモリ・マッピングを備え、「ｌｏａｄ  Ｙ１」命令を実行することによってデータを読み取ることができる。
【０００７】
上記のステップを図２に示す。この図には、ハードウェア・ストア命令があるハードウェア装置から別の装置に渡される時点ごとに、１つのアドレス空間から別のアドレス空間へのアドレスの変換が必要とされ得ることが示されている。また、まったく同様な一連のイベントが読取り操作をサポートし、そのホスト入出力バス実装形態として、必須ではないが、ＰＣＩが想定されることにも留意されたい。
【０００８】
したがって、全体のメモリ空間マッピング｛Ｘ０〜Ｘｎ｝→｛Ｙ０〜Ｙｎ｝は、以下のような一連のサブマッピングによって実施される。
｛Ｘ０−Ｘｎ｝
→
｛ＰＣＩ０，ＰＣＩｎ｝（プロセッサ１のアドレス空間）
→
｛ＰＣＩ’０，ＰＣＩ’ｎ｝（ＰＣＩバスのアドレス空間）
→
ネットワーク−マッピング図示せず
→
｛ＰＣＩ”０，ＰＣＩ”ｎ｝（宛先ＰＣＩバスのアドレス空間）
→
｛ｍｅｍ０〜ｍｅｍｎ｝（宛先メモリのアドレス空間）
→
｛Ｙ０〜Ｙｎ｝（宛先アプリケーションの仮想アドレス空間）
【０００９】
図２に「ネットワーク」とマークするステップは、宛先がそのマッピング・チェーンを続行することができるように、ＮＩＣ／ネットワーク・コントローラがそのトランザクションを正しい宛先ホストに転送することを必要とする。これは、別のメモリ・アパーチャによって達成される。
【００１０】
アパーチャ・マッピングを使用する２つの主な理由は以下の通りである。
【００１１】
ａ）システムの頑健性。マッピングが行われる時点ごとに、ハードウェアは、有効なアパーチャ表と突き合わせることによって、アドレスの有効性をチェックすることができる。これは、悪意のある装置や誤作動する装置から保護する。獲得される保護の量は、（ビット単位の）アドレス空間サイズと、割り振られたアパーチャの数（ビット単位の合計サイズ）の比である。
ｂ）アドレス・ビットの節約。３２ビット・メモリ・バス内のホストが２つの３２ビットＰＣＩバスにアクセスする必要がある場合を考える。最低３３ビットが必要とされるはずなので、一見したところでは、これは十分なビット数ではない。しかしながら、アパーチャの使用により、両方のＰＣＩバスのサブセットにアクセスすることが可能になる。
｛ＰＣＩ０〜ＰＣＩｎ｝→｛ＰＣＩ’０〜ＰＣＩ’ｎ｝および
｛ＰＣＩｐ〜ＰＣＩｑ｝→｛ＰＣＩ’ｐ〜ＰＣＩ’ｑ｝
【００１２】
ハードウェア・アドレス・マッピングおよびアパーチャは、仮想メモリおよび入出力バス・マッピング（ＰＣＩなど）の分野ではよく理解されている。しかしながら、ネットワークを介して必要とされるマッピングを実施する際には問題がある。主要な問題は以下の通りである。
１．多数のアパーチャを管理することが必要とされ得る。というのは、１つのホストが、ネットワークを介して他の多くホストと通信しなければならないからである。
２．ネットワークの状況では、セキュリティ上の理由で、各ホストをそれ自体の保護および管理ドメインとして扱うのが普通である。その結果、ネットワークを介して２つのアドレス空間の間の接続が行われるとき、そのパスに沿ったアパーチャ・マッピングすべてが開始側ホストによってセットアップされ得るとは限らなくなる。代わりに、各保護ドメイン内のすべてのマッピングが、そのドメインの「所有者」によって終端間接続が確立されるように設定されることを可能にするプロトコルが考案されなければならない。
３．セキュリティ上の理由で、ネットワーク内のホストは、その他のホスト全部を信頼するとは限らないのが普通であり、そのため、そのマッピング方式は、任意の欠陥または悪意のあるホストが、別のホストのメモリを破壊しないようにする必要がある。
【００１３】
従来方式（例えばイーサネットまたはＡＴＭスイッチングなど）では、プロトコル・スタックおよびネットワーク・ドライバはカーネルに存在している。これが行われているのは、
１．より上位レベルのインターフェースによって、ネットワーク・ハードウェアの複雑さが隠されること、
２．多くのアプリケーション上での、ネットワーク・ハードウェアおよび他のシステム・リソース（メモリなど）の安全な多重化、
３．欠陥または悪意のあるアプリケーションに抗するシステムのセキュリティ
を可能にするためである。
【００１４】
通常のカーネル・スタック・システムの動作では、ハードウェア・ネットワーク・インターフェース・カードがネットワークとカーネルの間のインターフェースを提供する。カーネルでは、デバイス・ドライバ層が、ＮＩＣと直接やりとりし、プロトコル層がシステムのアプリケーション・レベルとやりとりする。
【００１５】
ＮＩＣは、カーネルに供給される着信データおよびネットワークに適用される発信データのためのバッファへのポインタを格納する。これらはＲｘデータ・リングおよびＴｘデータ・リングと呼ばれる。ＮＩＣは、カーネルによって読み取られるＲｘバッファ・リング上の次のデータを示すバッファ・ポインタを更新する。Ｔｘデータ・リングは、直接メモリ・アクセス（ＤＭＡ）によって供給され、ＮＩＣは送信されている発信データを示すバッファ・ポインタを更新する。ＮＩＣは、割り込みを用いてカーネルに知らせることができる。
【００１６】
着信データが、カーネルによってＲｘデータ・リングから選択され、順に処理される。帯域外データは、普通、カーネル自体によって処理される。アプリケーション固有のポートに送られるデータは、ポインタによって、カーネルの専用アドレス空間にある、そのポート専用のバッファキューに加えられる。
【００１７】
データ受信のためのシステム動作時に以下のステップが行われる。
１．システム初期設定時に、オペレーティング・システム・デバイス・ドライバは、カーネル・バッファを作成し、ＮＩＣのＲｘリングをこれらのバッファを指し示すように初期設定する。また、ＯＳは、構成スクリプトからそのＩＰホスト・アドレスを知らされる。
２．アプリケーションは、ネットワーク・パケットを受け取ろうとし、オペレーティング・システム内にあるキューのような構造であるポートを作成する。これは、＜ホスト：ポート＞によってアドレス指定されたネットワーク・パケットがそのポートのキューに配信され得るように、ホストに固有の番号ポートを持つ。
３．パケットはネットワーク・インターフェース・カード（ＮＩＣ）に到着する。ＮＩＣは、ホスト入出力バス（ＰＣＩバスなど）を介して、そのパケットを次の有効ＲｘＤＭＡリング・ポインタ値によって指し示されるメモリ・アドレスにコピーする。
４．利用可能なＤＭＡポインタが残っていない場合、または事前指定されたタイムアウト時に、ＮＩＣは、データが配信されていることをホストに通知するために、入出力バス割り込みをアサートする。
５．割り込みに応答して、デバイス・ドライバは、配信されたバッファを検査し、それが有効ホスト・アドレスなどの有効なアドレス情報を含む場合、そのバッファへのポインタを適当なプロトコル・スタック（ＴＣＰ／ＩＰなど）に渡す。
６．プロトコル・スタックは、有効な宛先ポートが存在するかどうか判定し、存在する場合、ネットワーク・プロトコル処理（受信したデータの肯定応答を生成するなど）を実行し、パケットをそのポートのキューに入れる。
７．ＯＳは、アプリケーションに（「選択」ビット・マスク中のビットをスケジュール変更し、設定することなどにより）、そのポートがバインドされているネットワーク・エンドポイントにパケットが到着していると指示することができる。（そのアプリケーションを実行可能であるとマークし、スケジューラを呼び出すことによって）。
８．アプリケーションは、例えば、（バッファのアドレスおよびサイズを供給する）ｒｅｃｖ（）システム・コールを実行することによって、ＯＳにデータを要求し、ＯＳカーネルでは、カーネル・バッファからアプリケーションのバッファにデータがコピーされる。システム・コールから戻ると、アプリケーションは、アプリケーション・バッファからデータにアクセスすることができる。
９．コピーの後、カーネルは、カーネル・バッファをＯ／Ｓの空きメモリプールに返す。また、割り込み時に、デバイス・ドライバは、新しいバッファを割り振り、ＤＭＡリングへのポインタを付加する。このように、空きプールからアプリケーションのポートへ、そしてまた元に戻るバッファの循環がある。
１０．カーネル・バッファの１つの重要な特性は、それらが物理ＲＡＭ中で適合しており、決してＶＭシステムによってページ・アウトされないことである。しかしながら、空きプールは、すべてのアプリケーションの共通リソースとして共用され得る。
【００１８】
データ送信では、以下のステップが行われる。
１．オペレーティング・システム・デバイス・ドライバは、送信に使用するためのカーネル・バッファを作成し、ＮＩＣのＴｘリングを初期設定する。
２．データを送信するアプリケーションは、そのデータをアプリケーション・バッファに格納し、例えば、（そのアプリケーション・バッファのアドレスおよびサイズを供給する）ｓｅｎｄ（）システム・コールを実行することによって、ＯＳによる送信を要求する。
３．ｓｅｎｄ（）コールに応答して、ＯＳカーネルは、データをアプリケーション・バッファからカーネル・バッファにコピーし、適当なプロトコル・スタック（ＴＣＰ／ＩＰなど）を適用する。
４．データを含むカーネル・バッファへのポインタが、Ｔｘリング状の次の空きスロットに入れられる。利用可能なスロットがない場合、バッファは、ＮＩＣが、割り込みなどによって、スロットが利用可能になったことを示すまで、カーネルでキューに入れられる。
５．スロットは、ＮＩＣによって処理されるようになると、ホスト入出力バスを介してＤＭＡサイクルによりスロットの内容で示されるカーネル・バッファにアクセスし、次いで、データを送信する。
【００１９】
システムを通過するデータの移動を考えると、データ受信の場合、カーネル・バッファからアプリケーション・バッファへのデータのコピーは、実際には、そのデータをプロセッサのキャッシュに存在したままにしており、そのため、この機構を使用する余分なコピーがあるように見えても、そのコピーは、実際には、キャッシュ・ロード操作として働く。データ送信の場合、送信されるデータは、送信のためにアプリケーションに渡される前にキャッシュから出ている可能性が高く、その場合、コピー・ステップは、明らかに、非効率的である。コピー・ステップには以下の２つの理由がある。
１．ＮＩＣがデータを内外にコピーしている間データが識別されたカーネル・メモリ中にあることを保証するため。これは、データが送信または受信されているときに該当し、また、カーネル・プロトコル処理の後でアプリケーションがバッファを改ざんし、または破損することができないという利点も持つ。
２．送信の場合、データが実際に送信される前にｓｅｎｄ（）システム・コールが正常に戻ることがよくある。コピー・ステップは、プロトコル層によって再送信が要求される場合に備えてＯＳがデータを保持できるようにする。
【００２０】
コピー・ステップが省略された場合でさえ、データを受信すると、アプリケーションがカーネル・バッファにアクセスしたときにキャッシュ・ロードが行われるはずである。これらの付加的なコピーが性能低下の原因となっていることを多くの人々が認めている（米国特許第６２４６６８３号参照）。しかしながら、これまで提示されている解決法は、すべて、何らかの余分なデータ移動を伴うものである。このオーバーヘッドを低減することが望ましいはずである。本発明の発明者らは、見落とされている問題は、コピーではなく、ユーザからカーネルへのコンテキスト・スイッチおよび割り込み処理のオーバーヘッドであると理解している。例えば、米国特許第６２４６６８３号は、これらのオーバーヘッドを回避するために何もしていない。
【００２１】
汎用オペレーティング・システム上でのコンテキスト・スイッチ中には、多くのレジスタは保存され、復元される必要があり、ＴＬＢエントリおよびキャッシュはフラッシュされ得る。昨今のプロセッサは、キャッシュからの持続した操作のために高密度に最適化されており、（メモリ・ギャップなどの）アーキテクチャ上の制約条件は、多数のコンテキスト・スイッチに直面した際の性能が大幅に低下するというものである。これについての詳細な考察が、「Piglet:A Low-intrusion Vertical Operating System」、S.J.MuirおよびJ.M.Smith、Tech.rep.MS-CIS-00-04、Univ.of PA、2000年１月に記載されている。したがって、データ転送時と接続管理時の両方でコンテキスト・スイッチを低減することが望ましいはずである。
【００２２】
データ送信および受信からコンテキスト・スイッチのコストを除去するために、Ｕ−ＮＥＴの学業からＶＩＡ（仮想インターフェース・アーキテクチャ）がオープン・スタンダードとして開発された。詳細情報は、ｗｗｗ．ｖｉｄｆ．ｏｒｇから入手可能な仮想インターフェース・アーキテクチャ仕様に記載されている。いくつかの商用実施形態が作成され、それがその後、インフィニバンド標準へと発展している。このシステムの基本原理は、各アプリケーション（ネットワーク・エンドポイント）にそれ自体のＤＭＡキューの対ＴｘおよびＲｘ）を提供するようにネットワーク・インターフェース・ハードウェアを拡張することである。このアーキテクチャは、カーネル・エージェント、ハードウェアＮＩＣ、およびユーザ／アプリケーション・レベルのインターフェースを備える。ユーザ・レベルの各アプリケーションには、ＶＩ（仮想インターフェース）の制御が与えられる。これは、送信用に１つと受信用に１つ、２つのキュー（および任意選択のＣＱ完了キュー）を備える。ＶＩ上でいくらかのデータを送信するために、アプリケーションは以下を行わなければならない。
１．データが、識別されているバッファ中にあることを保証する。（これは、システム・コールが割り振ることを必要とするはずである）。
２．バッファ・ポインタおよび長さを含む記述子を構築し、その記述子へのポインタを送信キューに加える。（注意：その記述子も識別されたメモリ中になければならない。）
３．必要ならば、アプリケーションは、ＶＩエンドポイントに関連付けられたＮＩＣ上のハードウェア「呼び鈴」ロケーションに書き込むことによって、作業キューがアクティブであることを示す。
４．その後のある時点において、ＮＩＣは送信キューを処理し、バッファからのデータにＤＭＡ（直接メモリ・アクセス）し、ネットワーク・パケットを形成し、受信側に送信する。次いで、ＮＩＣは、そのバッファに関連付けられた記述子を、データが送信されたとマークする。
【００２３】
ＶＩを完了キューとも関連付けることが可能である。これがなされている場合、ＮＩＣは、バッファが送信されていることを示すために、完了キューにイベントを通知する。これは、１つのアプリケーションが、ただ１つの完了キュー上のイベントを調べることによっていくつかのＶＩキューを管理できるようにするためであることに留意されたい。
【００２４】
ＶＩ送信キューまたは完了キューは、割り込みのために使用可能にされ得る。
【００２５】
バッファを受け取るために、アプリケーションは、空きバッファを指し示す記述子を作成し、その記述子を受信キュー上に配置しなければならない。また、受信キューがアクティブであることを示すために「呼び鈴」に書き込むこともできる。
【００２６】
ＮＩＣは、それが特定のＶＩ受信キューにアドレス指定されたパケットを持つとき、そのキューから記述子を読み取り、Ｒｘバッファ・ロケーションを決定する。次いで、ＮＩＣは、受信バッファへのデータにＤＭＡし、
１．その記述子をマークし、
２．（それがＶＩと関連付けられている場合は）完了キュー上でイベントを生成し、
３．それが（Ｒｘキューまたは完了キューをマークする）アプリケーションまたはカーネルによって要求されている場合は、割り込みを生成する
ことによって受信を指示する。
【００２７】
このキューに基づくモデルには以下の問題がある。
１．記述子オーバーヘッドのために小さいメッセージでの性能が劣る。
２．受信バッファ・オーバーランを回避するためにアプリケーションによってフロー制御が行われなければならない。
【００２８】
また、ＶＩＡは、接続セットアップのためにコンテキスト・スイッチを回避せず、エラー回復機能を持たない。これは、ＶＩＡが、存続時間の長い接続があり、エラーがほとんどないクラスタ内で使用するためのものであったからである。エラーが発生した場合、ＶＩ接続は、単に、エラー状態に置かれる（そして、普通は、取り外され、再作成される必要がある）。
【００２９】
ＶＩＡ接続セットアップおよび取り外しは、カーネル・スタック処理で説明したのとまったく同じ方式で、カーネル・エージェントを使用して進行する。したがって、開く、接続する、受け入れるなどの操作はすべて、カーネルへのコンテキスト・スイッチを必要とする。ゆえに、接続の存続時間が短く（ＷＷＷなど）、またはエラーが頻繁に起こる（イーサネットなど）環境では、ＶＩＡインターフェースはうまく動作しない。
【００３０】
ＶＩＡはメッセージ受け渡しインターフェースの１つの発展を表し、ハードウェアへのユーザ・レベル・アクセスを可能にする。また、共用メモリ・インターフェースをサポートする別の方法での開発も行われている。これらの研究の多くは、それぞれがローカル・メモリを備えるいくつかのプロセッサおよび高速相互接続から大型スーパーコンピュータが構築される、大型の単一オペレーティング・システムＮＵＭＡ（非均一メモリ・アーキテクチャ）マシン（スタンフォードのＤＡＳＨなど）の構築を対象としたものであった。そのようなマシンでは、各ノードのメモリ間のコヒーレンシが、ハードウェア（相互接続）によって維持された。コヒーレンシは、一般に、ＣＰＵ２上に介在するストア操作がある場合でさえも、ＣＰＵ１上のストア／ロード操作が正しい値を返すことを保証しなければならない。これは、ＣＰＵ１が最初のストアの内容をキャッシュすることができ、介在する書込みが発生しなかった場合にはキャッシュしたコピーを返すことが期待されるときには、達成するのが困難である。ＳＣＩ（スケーラブル・コヒーレント相互接続）のＩＥＥＥ標準の大部分は、コヒーレンシを保証することで占められている。この標準はｗｗｗ．ｖｅｓａ．ｏｒｇから入手可能である。
【００３１】
共用メモリ相互接続のＮＵＭＡおよびコヒーレンシの遺産のために、クラスタの管理および障害モードは、単一マシンのものであった。例えば、各実装形態は、しばしば、以下を想定したものであった。
１．信頼されるクラスタ規模のサービスによって管理された単一ネットワークアドレス空間（例えば、ＤＥＣのメモリ・チャネル：R Gillett、「Memory Channel Network for PCI」、IEEE Micro 16(2)、1996年２月１２〜１８日参照）
２．ローカル・ホスト・メモリを着信ネットワーク・アクセスから保護する保護（またはページ・レベル保護）対策がないこと（ＳＣＩなど）
３．単一プロセッサ・ノードの障害が「マシン」全体の障害を引き起こすこと（ＳＣＩなど）
【００３２】
クラスタ規模の接続サービスのメモリ・チャネル実装形態では、物理的に、すべてのネットワーク書込みが同時にそのクラスタ中のすべてのノードに渡され、そのため、受信側ノードは、ただ、書込みをその着信ウィンドウに対して突き合わせるだけである。この方法は、（本発明と同様に）着信の保護は提供するが、アドレス空間管理は、管理ノードとの通信を必要とし、非効率的である。
【００３３】
ＳＣＩは、書込みが特定のホストに宛先指定され得るように、アドレス空間の１２ビットがノード識別子専用とされることを除けば、同様である。残りの４８ビットは、ホスト実装に依存する。ほとんどの実装形態は、単に、ローカル・メモリの単一の大きなセグメントを割り振り、その４８ビットをオフセットとして使用するにすぎない。
【００３４】
どの実装形態も、そのアーキテクチャの一部として、アドレス指定されたポートも、分散接続管理も持たない。
【００３５】
いくつかの実装形態は、イベント・メッセージが、１つのホストから別のホストに（またはネットワークからホストに）送信され得るイベント機構を提供する。これらがソフトウェアでプログラム可能であれば、ポートを用いた分散接続セットアップが可能である。しかしながら、これらの機構は、（まれな）エラー処理（例えば、ケーブルが抜かれた場合など）のために設計されたものであるため、そのイベントキューは、カーネルのみのオブジェクトになるように設計され、したがって、接続管理のために、ＶＩＡまたはカーネル・スタック・モデルと同じ方式で依然としてコンテキスト・スイッチが必要とされる。
【発明の開示】
【課題を解決するための手段】
【００３６】
本発明の一態様によれば、データ・リンクとデータ・プロセッサの間のインターフェースを提供する通信インターフェースが提供され、データ・プロセッサは、オペレーティング・システムおよびユーザ・アプリケーションをサポートすることができ、通信インターフェースは、リンクを介して受け取られ、ユーザ・アプリケーションに関連付けられた論理データ・ポートにアドレス指定されたデータの第１のキューをサポートし、リンクを介して受け取られ、オペレーティング・システムに宛先指定されていると識別されたデータの第２のキューをサポートし、リンクを介して受け取られ、オペレーティング・システムまたはデータ・ポートに宛先指定されていると識別されたデータを分析して、そのデータが１つまたは複数の事前定義された基準を満たすかどうか判定し、それが基準を満たす場合、オペレーティング・システムに割り込みを送信するように構成される。
【００３７】
好都合には、ユーザ・アプリケーションはアドレス空間を持ち、第１のキューはそのアドレス空間に位置する。好都合には、オペレーティング・システムは、アドレス空間を持ち、第２のキューはそのアドレス空間に位置する。最も好都合には、ユーザ・アプリケーションのアドレス空間の少なくとも一部は、オペレーティング・システムのアドレス空間の少なくとも一部と同一である。好ましくは、ユーザ・アプリケーションのアドレス空間すべては、オペレーティング・システムのアドレス空間内にある。
【００３８】
通信インターフェースは、好ましくは、リンクを介して受け取られ、データ・ポートに宛先指定されていると識別された第１のキューデータに適用されるように構成される。通信インターフェースは、好ましくは、リンクを介して受け取られ、オペレーティング・システムに宛先指定されていると識別された第２のキューデータに適用されるように構成される。
【００３９】
好ましくは、事前定義基準の１つは、リンクを介して受け取られたデータが１つまたは複数の所定のメッセージ形式とマッチする場合、通信インターフェースはオペレーティング・システムに割り込みを送信するというものである。
【００４０】
好ましくは、通信インターフェースは、データが事前定義基準の１つまたは複数およびその他の基準の１つまたは複数を満たす場合、オペレーティング・システムに割り込みを送信すると共に、そのデータがアドレス指定されたポートを示すオペレーティング・システムへのメッセージを送信するように構成される。好ましくは、その他の基準は、エラー条件を示すものである。
【００４１】
好ましくは、通信インターフェースは、リンクを介して受け取られ、ユーザ・アプリケーションに関連付けられた論理データ・ポートにアドレス指定されたデータの第３のキューをサポートするように構成され、リンクを介して受け取られた、固定長を有する形式の第１のキューデータ単位に適用されると共に、リンクを介して受け取られた、可変長を有する形式の第３のキューデータ単位に適用されるように構成される。好ましくは、固定サイズのデータ単位は、リンクを介して受け取られ、通信インターフェースによってエラー状況を示すと解釈されるメッセージを含む。好ましくは、固定サイズのデータ単位は、リンクを介して受け取られ、通信インターフェースによって接続のセットアップを求める要求またはその肯定応答を示すと解釈されるメッセージを含み、または含み得る。好ましくは、固定サイズのデータ単位は、リンクを介して受け取られ、通信インターフェースによって、データ配信イベントを示すと解釈されるメッセージを含む。
【００４２】
好ましくは、通信インターフェースは、リンクを介して受け取られた各データ単位の内容を解析し、そのデータ単位の内容に応じて、前記キューのどれにそのデータ単位を適用すべきか決定するように構成される。
【００４３】
好ましくは、通信インターフェースは、オペレーティング・システムによって前記基準を設定するように構成可能である。
【００４４】
好ましくは、通信インターフェースとオペレーティング・システムの一方または両方は、所定のタイプのメッセージに応答して、ポートの状況を示す情報を含むメッセージを返す。
【００４５】
本発明によれば、前述の通信インターフェースおよび前記データ・プロセッサを含む通信システムも提供される。
【００４６】
データ・プロセッサは、好ましくは、データ・ポートが関連付けられているアプリケーションの処理が中断されたとき、そのデータ・ポートに宛先指定されていると識別されたデータを受け取ると、通信インターフェースがオペレーティング・システムに割り込みを送信するという基準を設定するように構成される。
【００４７】
本発明の第２の態様によれば、データ・リンクと、メモリを含む第１のデータ処理装置の間のインターフェースを提供する通信インターフェースが提供され、データ・インターフェースは、第１のデータ処理装置のメモリの一領域が、リンクによって通信インターフェースに接続された第２のデータ処理装置のメモリにマップされ得るようなものであり、通信インターフェースは、第２のデータ処理装置中の第１の１つまたは複数のメモリ・ロケーションの範囲の、第１のデータ処理装置中の第２の１つまたは複数のメモリ・ロケーションの範囲へのマッピングを確立すると、第２のデータ処理装置に第１のメモリ・ロケーションの範囲を識別するデータを送信するように構成される。
【００４８】
好ましくは、第２のデータ処理装置のメモリは仮想メモリである。好ましくは、第２のデータ処理装置のメモリ中のメモリ・ロケーションは仮想メモリ・ロケーションである。最も好ましくは、第１のデータ処理装置のメモリ中の前記１つまたは複数のメモリ・ロケーションは１つまたは複数の仮想メモリ・ロケーションであり、通信インターフェースは、前記マッピングを確立すると、１つまたは複数の仮想メモリ・ロケーションの、第１のデータ処理装置のメモリ中の１つまたは複数の物理メモリ・ロケーションへの別のマッピングを確立するように構成される。
【００４９】
好ましくは、通信インターフェースは、第２のデータ処理装置のメモリ中の第１の１つまたは複数のメモリ・ロケーションの範囲の、第１のデータ処理装置のメモリ中の第２の１つまたは複数のメモリ・ロケーションの範囲へのマッピングを確立すると、そのマッピングに識別情報を割り振り、その識別情報を第２のデータ処理装置に送信するように構成される。
【００５０】
好ましくは、通信インターフェースは、そのデータ・メッセージが含むデータが適用される宛先ポートを指定するデータ・メッセージによって通信することができる。
【００５１】
好ましくは、通信インターフェースは、第２のデータ処理装置のメモリ中の第１の１つまたは複数のメモリ・ロケーションの範囲の、第１のデータ処理装置のメモリ中の第２の１つまたは複数のメモリ・ロケーションの範囲へのマッピングを確立すると、チェック・データを決定し、そのチェック・データを第２のデータ処理装置送信するように構成され、また、通信インターフェースは、そのチェック・データを示さない、そのマッピングを介した後続の通信を拒絶するように構成される。好ましくは、チェック・データは、通信インターフェースによってランダムに生成される。好都合には、チェック・データを示すために、通信はそのチェック・データを含む。
【００５２】
好ましくは、通信インターフェースは、マッピングの操作中に、事前定義された方式に従って、チェック・データを変更するように構成される。その場合、好ましくは、その変更されたデータを示さないそのマッピングを介した後続の通信を、通信インターフェースが拒絶するように構成される。好ましくは、チェック・データは数を表し、事前定義された方式は、そのマッピングを介して事前定義回数の通信が受け取られるたびに、チェック・データによって表される数を事前定義された量だけ増分するものである。事前定義の量は、必須ではないが、好ましくは１である。事前定義の数は、必須ではないが、好ましくは１である。
【００５３】
好ましくは、通信インターフェースは、第１の範囲外のデータにアクセスすることを求める要求を示す、そのマッピングを介した後続の通信を拒絶するように構成される。
【００５４】
本発明によれば、前述の通信インターフェースおよび前記データ・プロセッサを含む通信システムも提供される。
【００５５】
データ・プロセッサは、好ましくは、オペレーティング・システムおよびユーザ・アプリケーションをサポートすることができる。このシステムは、好ましくは、第１の範囲に格納されたデータを送信し、または第１の範囲に格納するためのデータを受信するためのデータ・リンクを介した通信での動作パラメータを定義するデータ項目を格納するデータ・ストアを備える。
【００５６】
オペレーティング・システムは、ユーザ・アプリケーションに、そのアプリケーションに付与された信頼のレベルに応じて、そのデータ・ストア中の１つまたは複数のデータ項目にアクセスすることを許可するように構成され得る。
【００５７】
チェック・データは、好ましくは、データ・ストア中のデータ項目の１つとして格納され、オペレーティング・システムは、少なくともいくつかのユーザ・アプリケーションに、そのデータ項目への書込みアクセスを行うことを許可するように構成され、通信インターフェースは、チェック・データを判定するために、そのデータ項目の内容を読み取り、それをチェック・データとして扱うように構成される。
【００５８】
好ましくは、データ・ストア中のデータ項目は、第１のデータ処理装置のメモリ中の第１のメモリ・ロケーションの範囲の開始点および終了点を定義し、第２のデータ処理装置のメモリ中の第２のメモリ・ロケーションの範囲の開始点および終了点を格納する。好ましくは、オペレーティング・システムは、１つまたは複数の信頼レベルを持つアプリケーションに、データ・ストア中のデータ項目への書込みアクセスを行い、第２のデータ処理装置のメモリ中の第２のメモリ・ロケーションの範囲の開始点および終了点を格納することを許可すると共に、どのアプリケーションにも、第１のデータ処理装置のメモリ中の第１のメモリ・ロケーションの範囲の開始点および終了点を定義するデータ・ストア中のデータ項目に書込みアクセスすることを許可しないように構成される。
【００５９】
次に、本発明を、添付の図面を参照し、例を引いて説明する。
【００６０】
好ましくは、通信インターフェースは、第２のデータ処理装置中の１つまたは複数の仮想メモリ・ロケーションのそれぞれの第１の範囲の、第１のデータ処理装置中の１つまたは複数のメモリ・ロケーションのそれぞれの第２の範囲への複数のマッピングそれぞれをサポートすることができ、そのような各マッピングごとに、それぞれの１つまたは複数の仮想メモリ・ロケーションの、第１のデータ処理装置のメモリ中の１つまたは複数の物理メモリ・ロケーションへのそれぞれのさらなるマッピングをサポートすることができる。
【００６１】
好ましくは、通信インターフェースは、前記１つまたは複数の仮想メモリ・ロケーションの範囲のそれぞれとの間のアクセスを、第１のデータ処理装置のメモリ中のそれぞれの１つまたは複数の物理メモリ・ロケーションとの間のアクセスに変換すると共に、第１のデータ処理装置のメモリ中の１つまたは複数の物理メモリ・ロケーションのそれぞれとの間のアクセスを、１つまたは複数の仮想メモリ・ロケーションのそれぞれの範囲との間のアクセスに変換する変換インターフェースを含む。好ましくは、仮想メモリ・ロケーションは、例えば、ＰＣＩバス・アドレスなどのローカル・バス・アドレスである。あるロケーションへのアクセスは、好適には、そのロケーションへの書込みアクセスである。あるロケーションからのアクセスは、好適には、そのロケーションからの読取りアクセスである。
【００６２】
好ましくは、通信インターフェースは、前記さらなるマッピングの詳細を格納するように構成されたマッピング・メモリを備える。このマッピング・メモリは、好ましくは、変換インターフェースに対してローカルの第１のマッピング・メモリと、変換インターフェースに対して第１のマッピング・メモリより遠い第２のマッピング・メモリとを備え、通信インターフェースは、さらなるマッピングのすべての詳細を第２のマッピング・メモリに格納すると共に、さらなるマッピングの一部だけの詳細を第１のマッピング・メモリに格納するように構成される。好ましくは、第１のマッピング・メモリは連想メモリである。
【００６３】
好ましくは、変換インターフェースは、前記１つまたは複数の仮想メモリ・ロケーションの範囲の１つのとの間のアクセスと、第１のデータ処理装置のメモリ中のそれぞれの１つまたは複数の物理メモリ・ロケーションとの間のアクセスの間の変換のために、第１のマッピング・メモリに優先的にアクセスして変換を実施し、アクセスの対象の仮想メモリ・ロケーションの範囲のマッピングの詳細が第１のマッピング・メモリに格納されていない場合、第２のマッピング・メモリにアクセスして変換を実施するように構成される。
【００６４】
好ましくは、通信インターフェースは、直前に使用されたさらなるマッピングの詳細を第１のマッピング・メモリに格納するように構成される。好ましくは、それは、第１のマッピング・メモリから詳細にアクセスしようとする試みに失敗した場合、第１のマッピング・メモリ中の詳細を、失敗したアクセスの試みの詳細で置き換えるように構成される。
【発明を実施するための最良の形態】
【００６５】
図３は、第１のデータ処理装置（ＤＰＵ）２０がネットワーク・リンク２２を介して第２のデータ処理装置２１と通信するためのデータ伝送システムの概略図である。各データ処理装置は、メモリ・バス２５、２６を介してＰＣＩコントローラ２７、２８に接続されたＣＰＵ２３、２４を備える。ＰＣＩコントローラは、ＮＩＣ３１、３２が接続されたそれぞれのＰＣＩバス２９、３０を介して通信を制御する。ＮＩＣはネットワークを介して相互に接続される。他の類似のデータ処理装置をネットワークに接続して、それらを相互に、またＤＰＵ２０、２１と通信させることもできる。各メモリ・バス２５、２６にはローカルのランダム・アクセス・メモリ（ＲＡＭ）３３、３４が接続される。
【００６６】
本明細書で説明するデータ伝送システムは、いくつかの有意義な機能を実施する。それらは、（１）ＮＩＣ３１、３２間のアパーチャ・マッピングの動的キャッシング、（２）ＮＩＣ間の通信でのパケット指向のセットアップおよび取り外し構成、および（３）ＮＩＣの一方または両方のアドレス空間における、本明細書で「ノンス・ビット」と呼ぶ特定のビットの使用である。
【００６７】
アパーチャ・エントリの動的キャッシング
静的な表を使用して少数のアパーチャ・マッピングが効率よく格納され得る。これを実施するために、アドレスのいくつかのビット（マップ・ビット）がＮＩＣのアドレス復号化論理によって捕らえられ、マッピングを反転させるのに使用されるビット（再マップ・ビット）を含むメモリ・アレイへのインデックスとして使用される。例えば、図３に示すタイプのシステムでは、ＮＩＣは、ＰＣＩバス２９を介して、指定されたローカル・アドレスの所のデータを読み取り、またはそこにデータを書き込むよう求める要求を受け取ることができる。ＮＩＣは、そのローカル・アドレスに対応するリモート・アドレスを示すマッピングを格納し、その変換は、そのローカル・アドレスのビットの１つまたは複数を置き換えることによって実行される。例えば、そのアドレスの第２および第３のニブルが置き換えられ得る。その場合、０ｘ８２１０ＢＥＥＣというローカル・アドレスに対応するリモート・アドレスにアクセスするために、ＮＩＣは、マッピング表にアクセスし、ビット「２１」のマッピング（それはビット「３２」であると想定する）を決定し、次いで、対応するリモート・アドレス（この例では０ｘ８３２０ＢＥＥＣ）をアドレス指定するはずである。（図４参照）
この方法は、使用される実装技術（通常はＦＰＧＡまたはＡＳＩＣ）に応じて数百または数千エントリまで拡張可能であるが、マッピング表を保持するのに使用される装置内で利用可能な空間によって制限される。１つの優れた実装方法が、マッピングを（それに対するアクセスが結果としてより遅くなる）より大容量のストアに格納すると共に、直前に使用されたマッピングを、迅速にアクセスされ得る連想メモリにキャッシュするものである。（ハードウェア・サーチ操作によって）連想メモリ中に置き換えられるビットのマッチが見つかった場合、その再マップは非常に迅速に行われる。マッチが見つからなかった場合、ハードウェアは、（表またはツリー構造の）より大きなメモリで二次検索を実行しなければならない。通常、連想メモリは、ＮＩＣの処理チップ上に実装され、より大容量のメモリはオフチップで、例えばＤＲＡＭなどに実装される。これを図５に示す。この方法は、ＣＰＵ上のＴＬＢの動作に多少似ている。しかしながら、この場合、それはまったく異なる機能、すなわち、メモリ・マップ・ネットワーク・カード上のアパーチャ・マッピングのために使用される。
【００６８】
実際、マッピング情報は、ネットワークを介してパケットを送信するのに必要とされるすべてのアドレス情報を含まなければならない。これについて以下でより詳細に論じる。
【００６９】
パケット指向接続セットアップおよび取り外しプロトコル
次に、２つの管理ドメイン（通信するホストのそれぞれに属するもの）がある場合に、アパーチャを用いて２つのアプリケーションのアドレス空間の間で接続を確立するためのプロトコルについて説明する。その一般的構成を図６に示す。ドメインＡには、仮想アドレス空間Ａ、およびその仮想アドレス空間にアクセスし得るＮＩＣ  Ａを備えるホストＡがある。ドメインＢには、仮想アドレス空間Ｂ、およびその仮想アドレス空間にアクセスし得るＮＩＣ  Ｂを備えるホストＢがある。これらのＮＩＣは、ネットワークを介して相互に接続される。
【００７０】
この例では、ドメインＡの装置のマッピング・エントリは、ホストＡ上のオペレーティング・システムによってのみ設定され得る。以下で、ホストＡ上で走るアプリケーションＡが、ドメインＡ内のアパーチャ・マッピング上に（全部ではなく）一部のビットを設定することができる別の実装形態について説明する。
【００７１】
説明する接続プロトコルは、ＩＰ（インターネット・プロトコル）データグラムを用いて、（標準イーサネット・ネットワークの場合と同様に）１つのホストから別のホストにパケットを転送する。これらのデータグラムは、＜ホスト：ポート＞としてアドレス指定され、＜ホスト＞は宛先ホストのネットワーク識別子であり、＜ポート＞は、そのホスト内のアプリケーション（注意：各アプリケーションは、異なるネットワーク接続に対応するいくつかの割り振り部分を持ち得る）の識別子である。本プロトコルが、ＩＰ以外のトランスポート・プロトコルを介しても使用され得ることが理解されるであろう。
【００７２】
本プロトコルでは、ホストＡが、アプリケーションＢが走っている受動（受け入れ側）ホストＢへの能動接続を行おうとするものと想定すると、接続セットアップは以下のように進行する。
１．アプリケーションＢは、その受け入れ側インターネット・アドレス＜ホストＢ：ポートＢ＞をパブリッシュする。これは、通常の方法でネットワークを介してアクセスされ得る。
２．アプリケーションＡ（以下便宜上ホストＡと呼ぶ）は、オペレーティング・システムＡに、通信に使用されるホストＡ内のメモリ上への着信アパーチャの作成を求める要求を提示する。このアパーチャが定義されると、その仮想空間中のアドレスに宛先指定された着信ネットワーク書込みが、メモリＡ中の対応する実アドレスに宛先指定されるように、ＮＩＣ  Ａ上にその詳細がプログラムされる。このアパーチャには、参照アドレス：ｉｎ−ｉｎｄｅｘＡが付与される。
３．ホストＡは、接続メッセージ：
［ＣＯＮＮＥＣＴ／ｉｎ−ｉｎｄｅｘＡ］
を含む＜ホストＢ：ポートＢ＞へのＩＰデータグラムを送信する。フルＩＰデータグラムは、通常、発信元および宛先ＩＰアドレス（およびポート）も含むことに留意されたい。
４．接続メッセージは、アプリケーションＢによって受け取られる。このメッセージは、後で説明するように（二重イベントキューの状況に従って）直接ユーザ・レベルに、またはオペレーティング・システムに受け取られ得る。
５．ホストＢはそのメッセージを、Ｂに接続するよう求める要求であると理解し、アパーチャｉｎ−ｉｎｄｅｘＡを提示する。（通常はセキュリティのために）Ｂで事前にプログラムされた規則を用いて、ホストＢは、その接続を拒絶するか、それとも受け入れるか決定する。Ｂは、接続を受け入れると決定した場合、メモリＢにマップされ、参照アドレス：ｉｎ−ｉｎｄｅｘＢが付与される着信アパーチャを作成する（または事前に作成された着信アパーチャを使用する）。ホストＢは、その接続の新しいポート：ポート’Ｂを作成することを選択することもできる。ホストＢはホストＡに、ホストＡへのＩＰデータグラム
［ＡＣＣＥＰＴ／：ポート’Ｂ／ｉｎ−ｉｎｄｅｘＢ］
として受諾メッセージを返信する。フルＩＰデータグラムは、通常、発信元および宛先ＩＰアドレス（およびポート）も含むことに留意されたい。
これが受け取られた後、各ホストはアパーチャを作成しており、各ＮＩＣはそのアパーチャでの読取りまたは書込みを求める要求のマッピングを実行するようにセットアップされ、各ホストは、相手側ホストのアパーチャの参照アドレスを知っている。
６．以上で論じたメッセージングの後、両ホストは発信アパーチャを作成する。Ａは、アプリケーションＡの仮想アドレス空間をＮＩＣＡ発信アパーチャＯＵＴ＿ｉｎｄｅｘＡにマップするアパーチャを作成する。この発信アパーチャは、メモリＢにマップする［ｈｏｓｔＢ：ｉｎ−ｉｎｄｅｘＢ］にマップする。ホストＢは、メモリＡにマップする同様の発信アパーチャｏｕｔ−ｉｎｄｅｘＢを作成する。このようにして、メモリ・マップ領域を介して双方向通信が可能になる。アプリケーションは、いつでも、メモリ・マッピングに関連付けられこのポートにメッセージを送信することができる。これらを用いて、例えば以下のような帯域外データが保証され得る。
（ｉ）接続、したがって、メモリ・マッピングを停止すべきであることを示すＣＬＯＳＥメッセージ
（ｉｉ）非応答アプリケーションに応答を要求するＡＬＩＶＥメッセージ［その応答はＡＬＩＶＥＡＣＫになるはずである］
（ｉｉｉ）データ転送エラーを検出しているデータ・パス上の任意のハードウェア要素によって生成されるＥＲＲＯＲメッセージ。このメッセージは、メモリ・マップ・インターフェースからフィードバックが提供されることを可能にするので、重要である。
【００７３】
アプリケーションが、すでに発信アパーチャへの仮想アドレス・マッピングを持っている場合、ステップ６は、ＮＩＣが発信アパーチャを特定のホストの着信アパーチャにマップするよう求める要求になることに留意されたい。これについては、以下で、ユーザ・レベル接続管理の観点から詳細に説明する。
【００７４】
二重イベントキュー
この文脈では、ポートは、アプリケーションにバインドされ、アドレス・コードを持ち、メッセージを受け取ることのできる、オペレーティング・システムに特有のエンティティであるとみなす。この概念を図７に示す。ポートにアドレス指定された１つまたは複数の着信メッセージはメッセージキューを形成し、それはオペレーティング・システムによって処理される。オペレーティング・システムは、そのポートとオペレーティング・システム上で走るアプリケーションの間のバインディングを事前に格納している。ポートのメッセージキュー中のメッセージは、オペレーティング・システムによって処理され、オペレーティング・システムによってそのポートがバインドされるアプリケーションに提供される。オペレーティング・システムは、適当なポートを指定することによって着信メッセージが適当なアプリケーションに適用されるように、アプリケーションへの複数のポートのバインディングを格納することができる。
【００７５】
ポートは、対応するアプリケーションの状態がどのようなものであれ、メッセージが受け取られ、安全に処理されるようにオペレーティング・システム内に存在する。それは、特定のアプリケーションにバインドされ（つながれ）、メッセージキューに接続される。従来のプロトコル・スタック、例えばカーネル内ＴＣＰ／ＩＰなどでは、すべてのデータは、通常、それがアプリケーションによって読み取られる前にポート・メッセージキューに入れられる（このオーバーヘッドは、本明細書で説明するメモリ・マップ・データ転送機構によって回避され得る）。
【００７６】
本明細書で説明する方式では、帯域外データだけがポート・メッセージキューに入れられる。図７にこれをＣＯＮＮＥＣＴメッセージについて示す。図７では、宛先ホストおよびポートの指定（フィールド５０）、メッセージ・タイプ（フィールド５１）およびインデックス（フィールド５２）を含む着信パケットＥがＮＩＣ５３によって受け取られる。このデータはＣＯＮＮＥＣＴメッセージであるため、帯域外データのクラスに相当する。しかしながら、これは、なお、適当なポート５５のメッセージキューに適用され、そこからオペレーティング・システムによってそのポートに割り当てられているアプリケーションによって読み取られ得る。
【００７７】
別の拡張が、ポートに関連付けられた二重キューを使用するものである。これは、帯域外メッセージを読み取るときにシステム・コールを行う必要を最小限に抑えるのに役立つ。これは、例えばＷｅｂサーバでのような高接続率や、イーサネットで予期され得る高エラー率など、多くのメッセージがある場合に特に有用である。
【００７８】
その動作の開始時に、オペレーティング・システムは、帯域外メッセージを処理するキューを作成する。このキューは、ＮＩＣによって書き込まれ、それに関連付けられた割り込みを持ち得る。アプリケーションがポートにバインドされると、オペレーティング・システムはそのポートを作成し、それをそのアプリケーションと関連付ける。また、そのポート専用の帯域外メッセージを処理するキューも作成する。次いで、そのポートの帯域外メッセージキューは、カーネル・コンテキスト・スイッチを必要とせずにイベントをキューから外せるように、アプリケーションの仮想アドレス空間にメモリ・マップされる。
【００７９】
イベントキューはＮＩＣに登録され、ＮＩＣ上には各キューと関連付けられ（ＯＳとアプリケーションのどちらかまたは両方のアドレス空間にマップされ）た制御ブロックがある。
【００８０】
制御ブロックを備えるキューを図８に示す。キュー５９はメモリ６０に格納され、そこにＮＩＣ６１がアクセスし得る。このキューに関連付けられているのは読取りポインタ（ＲＤＰＴＲ）６２ａおよび書込みポインタ（ＷＲＰＴＲ）６３ａであり、それらは、データが次に読み取られ、書き込まれるキュー中のポイントを示す。ポインタ６２ａはメモリ６０に格納される。ポインタ６３ａはＮＩＣ６１に格納される。これらのポインタのマップされたコピーＲＤＰＴＲ’６２ｂおよびＷＰＴＲ’６３ｂは、元のポインタの相手側のＮＩＣおよびメモリに格納される。システムの動作は以下の通りである。
１．ＮＩＣは、それがローカルで格納しているＲＤＰＴＲ’とＷＲＰＴＲを比較することにより、書込みに使用可能な空間を決定することができる。
２．ＮＩＣは、それがデータグラムとして受け取られたときに帯域外データを生成し、それをキュー５９に書き込む。
３．ＮＩＣは、次のデータが最後のデータの後に書き込まれるように、データが書き込まれたときにＷＲＰＴＲとＷＲＰＴＲ’を更新する。
４．アプリケーションは、メモリ６０からのアクセスとしてＲＤＰＴＲとＷＲＰＴＲ’を比較することにより、読取りに使用可能な空間を決定する。
５．アプリケーションは、キュー５９から帯域外データを読み取り、メッセージを処理する。
６．アプリケーションは、ＲＤＰＴＲおよびＲＤＰＴＲ’を更新する。
７．アプリケーションが割り込みを必要とする場合、それ（またはそれに代わるオペレーティング・システム）は、制御ブロック６４のＩＲＱ６５ａおよびＩＲＱ’６５ｂビットを設定する。制御ブロックはメモリ６０に格納され、ＮＩＣの対応する記憶にマップされる。設定された場合、ＮＩＣはステップ３で割り込みも生成するはずである。
【００８１】
割り込みが生成された場合、まず、コンピュータの割り込みハンドラが確実に実行されるようにＰＣＩ割り込み線がアサートされるが、第２のメッセージもオペレーティング・システムのキューに送られる。一般に、このキューは、ハードウェア障害など多様な割り込みを処理することができるが、この場合ＯＳキューは［ＰＯＲＴ］に属するアプリケーションキューに帯域外データが配信されていることを示すメッセージ［ＯＤＢＤＡＴＡ：ＰＯＲＴ］を含む。ＯＳはキュー５９中のデータを検査し、適当な措置を講じることができる。その普通の状況は、アプリケーションがブロックされ、またはスケジュール解除され、ＯＳがそれを起動させる（スケジューラに実行可能とマークする）必要があるというものであろう。
【００８２】
この二重キュー機構は、アプリケーションが走っている間に、ＯＳを関与させずにアプリケーションによって帯域外データが処理され得るようにする。アプリケーションがブロックされた場合、第２のキューおよび割り込みは、ＯＳが、潜在的に多くのアプリケーションキューのうちのどれが配信されたデータを持っているか判定できるようにする。この全体の構成を図９に示す。
【００８３】
帯域外（ＯＯＢ）キューは、以下の帯域外データを保持する。
１．ポートに関連付けられたエラー・イベント
２．ネットワークおよび他のアプリケーションからの接続セットアップ・メッセージおよび他の信号メッセージ
３．送信側アプリケーション、ＮＩＣまたは受信側ＯＳによって生成され得るデータ配信イベント
【００８４】
キューが可変サイズのデータを含む場合、各メッセージのデータ部分のサイズがそのメッセージの先頭に含まれなければならない。
【００８５】
本システムで、アプリケーションが共用のメモリを介して通信するとき、非コヒーレント共用メモリを用いて２つの通信するエンドポイント間で単一の作業キューが共用され得る。データがキューに書き込まれる際に、そのデータが読取りに有効であることを示すために、送信側アプリケーションによってリモートのネットワーク・マップ・メモリに書込みポインタ（ＷＲＰＴＲ）更新も書き込まれる。データがキューから取り除かれる際には、そのキュー中の空き空間を示すために、ネットワークを介し、受信側アプリケーションによって読取りポインタ（ＲＤＰＲ）更新が書き戻される。
【００８６】
これらのポインタ更新は保守的であり、データの読取りまたは書込みを短時間遅らせることもあるが、受信側でバッファが利用可能になるまで送信側がデータのネットワーク転送を開始しないことを意味し、ポインタ更新の低待ち時間は、１対の通信するエンドポイントをサポートするのに必要とされるキューバッファ空間の量が小さいことを意味する。前述のイベント機構を用いて、アプリケーションを満杯／空のキュー上でブロックさせ、ＣＰＵ使用率および応答時間の点から拡張可能な多重化イベント・ストリームによって多数のキューを管理することができる。
【００８７】
イベントキューに宛先指定された可変長データは、第２のキューに配信されるはずである。これは、ハードウェアでのイベント生成機構を簡略化するという利点を持つ。ゆえに、固定サイズのキューは、単純なイベントおよび可変長キューへのポインタ（サイズ）を含む。
【００８８】
１．図１３に示すように、ＲＤＰＴＲとＷＲＰＴＲの差は、それらが固定サイズであるため、キュー中の有効なイベントを示すと共に、イベントの数も示す。
２．（例えば）イベントＶａｒ１０は、サイズ１０ワードの可変サイズのイベントが可変サイズのキューに配置されていることを示す。
３．ＷＲＰＴＲ２とＲＤＰＴＲ２の差は、可変サイズのキュー中にあるワード数だけを示すが、アプリケーションは、１０ワードを取り除くことによって第１のイベント全部をキューから外すことができる。
４．アプリケーションは、
（ａ）静的キューでは、処理されるイベントの数に各イベントのサイズを掛けたもので、
（ｂ）可変サイズのキューでは、消費されるワード数で（すなわち両方とも同じ）
ＮＩＣのメモリ上のＲＤＰＴＲを更新することによって、ＮＩＣにイベントの処理を指示する。
５．可変長キュー上のデータは、そのサイズも含むことができる（例えば、それがＵＤＰ／ＩＰパケットの場合）
拡張アパーチャ・マッピングおよび「ノンス（nonce）・ビット」
【００８９】
この実装形態では、誤作動する、または悪意のあるハードウェアまたはソフトウェアがアパーチャに意図せずに書き込むのを防ぐために、「ノンス・ビット」と呼ばれる追加ビットが提供される。これを説明するために、以下のネットワーク・マッピングについて論じる。
【００９０】
＜仮想メモリ・アドレス＞→＜ＰＣＩアドレス＞→＜ホスト：ｉｎ−ｉｎｄｅｘ＞→．．．
．．．＜ネットワーク・パケット＞→＜ＰＣＩアドレス＞→＜物理メモリ・アドレス＞→．．．
．．．＜仮想メモリ・アドレス＞
＜ホスト：ｉｎ−ｉｎｄｅｘ＞へのマッピングを実行するとき、ＮＩＣは＜ホスト：ｉｎ−ｉｎｄｅｘ＞でアドレス指定される発信パケットを作成することができる。これは、そのパケットを受け取るＮＩＣによって、ポートを介して対応するアプリケーションに渡すためのパケットとしてではなく、アパーチャ・パケットとして処理するためのパケットであると理解されることになる。ゆえに、このパケットは、着信アパーチャ検索（lookup）ハードウェアに提示される。
【００９１】
前述の方式の下では、データが送信される先のＰＣＩアドレスは、アパーチャ・マッピングとそのアパーチャ内のオフセットの両方を符号化することにまず留意すべきである。これは、ＮＩＣが宛先アドレスを、ＰＣＩバス上のメッセージがそれに向けて形成されたアドレスの関数として形成し得るからである。ＮＩＣによってＰＣＩバスを介して受け取られたアドレスは、アパーチャ定義およびそのアパーチャのオフセットの定義を含む（例えば）３２ビットから形成されるとみなされ得る。受信側ＮＩＣがそのデータを着信アパーチャ・ベースとの関連で書き込むことができるように、オフセット・ビットも発信パケットに符号化される。データ書込みの場合、結果として生じるネットワーク・パケットは、データを、オフセット、ｉｎ−ｉｎｄｅｘ、およびそれがアドレス指定された先のホストの表示を含むロケーション定義と共に含むものとみなされ得る。ホストの受信側ＮＩＣにおいて、これは、受け取ったオフセット分だけオフセットされた、そのアパーチャに対応するＰＣＩアドレスへのデータの書込みを命令するものとみなされることになる。読取り要求の場合には、類似の操作が行われる。この機能は、アパーチャが（前述したように）アプリケーション間で循環キューとして利用されることを可能にし、新しい受信データ・バッファごとに新しいアパーチャを作成する必要を回避する。
【００９２】
この実装形態では、ネットワーク・パケットはノンス・ビットも含む。これらのビットは、接続セットアップ時にアパーチャ・マッピングにプログラムされ、さらなるセキュリティを実現するためのものであり、アパーチャが異なるホストへの多くの接続で安全に再利用され得るようにする。
【００９３】
ホストＡとＢの間の通信でのノンス・ビット処理は以下の通りである。
１．ホストＡで、乱数がノンスＡとして選択される。
２．ノンスＡがアパーチャｉｎ−ｉｎｄｅｘＡと併せて格納される。
３．一般的に前述したように通信をセットアップするために、ホストＢに接続メッセージが送信される。この例では、メッセージはノンスＡも含む。ゆえに、接続メッセージは、ポートＢ、ｉｎ−ｉｎｄｅｘＡ、ノンスＡを含む。
４．接続メッセージを受け取ると、ホストＢは、発信アパーチャＢと併せてｉｎ−ｉｎｄｅｘＡおよびノンスＡを格納する。
５．ホストＢは乱数をノンスＢとして選択する。
６．ノンスＢがアパーチャｉｎ−ｉｎｄｅｘＢと併せて格納される。
７．一般的に前述したように通信のセットアップを受け入れるために受諾メッセージがホストＢに送信される。この例では、メッセージはノンスＢも含む。ゆえに、受諾メッセージは、ポートＢ’、ｉｎ−ｉｎｄｅｘＢ、ノンスＢを含む。
８．ホストＡは、発信アパーチャＡと併せてｉｎ−ｉｎｄｅｘＢおよびノンスＢを格納する。
【００９４】
ノンス・ビットを含むように接続がセットアップされた後、発信アパーチャＡを介してＡからＢに送られたすべてのパケットはノンスＢを含む。受け取られると、ＮＩＣＢはｉｎ−ｉｎｄｅｘＢを検索し、受け取ったノンス値をＢでプログラムされたものと比較する。それらが異なる場合、パケットは拒絶される。これは、誤作動するアプリケーションが失効した接続を保持し続けている場合には非常に有用である。すなわち、それは有効な［ｈｏｓｔ：ｉｎ−ｉｎｄｅｘ］アドレスを持つパケットを送信することはできるが、古いノンス・ビットを持つはずであり、そのため拒絶されることになる。
【００９５】
ユーザ・レベル・アプリケーションが、帯域外キューのための制御ブロックを持つことを想起すると、この制御ブロックを用いて、接続セットアップおよび取り外しが完全にユーザ・レベルで実行されるように、アプリケーションに関連付けられたアパーチャを制御することができる。
【００９６】
アパーチャ制御ブロックの一部だけがユーザ・プログラム可能であり、他の部分はオペレーティング・システムによってプログラムされなければならないことに留意されたい。
【００９７】
・  ユーザ・プログラム可能ビットには、ノンス・ビット、宛先ホスト・ビットが含まれる。
・  ＯＳプログラム可能ビットには、
ａ）着信アパーチャのベース・アドレス（これはアプリケーションが誤って、あるいは悪意によってメモリ・バッファを破壊することを防ぐ）
ｂ）発信元ホスト・ビット（これはアプリケーションが別のホストから発信していると偽装することを防ぐ）
が含まれる。
【００９８】
信頼されないアプリケーションには、カーネル接続管理が実行される。これは、帯域外データがカーネルでのみ処理され、プログラム可能ビットがアプリケーションから利用できないことを意味する。
【００９９】
発信アパーチャ表の一例を図１０に示す。表の各行はアパーチャを表し、そのアパーチャの属性を示す。以下について留意すべきである。
１．いくつかのアパーチャ・サイズがサポートされ得る。これらは、ベース・アドレスがアパーチャのサイズも与えるようにグループ化される。代替として、アパーチャ表にはサイズ・フィールドも含まれ得る。
２．タイプ・フィールドは、発信パケットに使用するイーサネット・タイプを示す。これは、宛先アドレスが４バイトＩＰｖ４アドレスであるか、それとも１６ビット・クラスタ・アドレスであるかも示す。（ＩＰｖ６アドレスまたは他のプロトコル・アドレスも同様に対応され得る）。タイプ・フィールドは、クラスタ内のイベント・パケットとデータ・パケットも区別する。（イベント・パケットは、結果として宛先イベントキュー上に固定サイズのイベント・メッセージを出現させる）。
３．ＰＣＩベース・アドレスはＯＳプログラム可能に限られ、他のフィールドは、システムのセキュリティ・ポリシーに応じて、ユーザ・レベルでアプリケーションによってプログラムされ得る。
４．発信元イーサネット・アドレス、発信元ＩＰおよびクラスタ・アドレス、ならびにおそらくその他の情報は、全エントリに共通であり、ＮＩＣメモリごとに格納される。
５．あらゆる場合において、発信イーサネット・パケットのアドレス指定は、
＜イーサネットＭＡＣ＞＜ＩＰホスト：ＩＰポート＞（ＴＣＰ／ＩＰパケットの場合）
または
＜イーサネットＭＡＣ＞＜ＣＩホスト：ＣＩｉｎ−ｉｎｄｅｘ：ＣＩノンス：ＣＩアパーチャ・オフセット＞（ＣＩ（コンピュータ・インターフェース）パケットの場合）
である（注意：オフセットは、発行されたＰＣＩアドレスから導出される）。
６．各アパーチャには初期シーケンス番号が割り振られる。これは、パケットが処理され、任意選択でクラスタ・アドレス形式として含まれる際にハードウェアによって増分される。
【０１００】
着信アパーチャ表の一例を図１１に示す。表の各行はアパーチャを表し、そのアパーチャの属性を示す。着信アパーチャは、基本的には、発信アパーチャの逆である。以下について留意すべきである。
１．サイズが、固定サイズ表を持つことによって任意選択で符号化されるのみならず、ＥｔｈＴｙｐｅも、別のアパーチャ表をグループ化することによって任意選択で符号化され得る。
２．シーケンス番号フィールドは任意選択であり、受信側は、
（ａ）シーケンス・チェックを行うべきかどうか
（ｂ）初期シーケンス番号の値
を設定することができる。
行われた場合は、これもまた接続プロトコルの一部として伝達されなければならず、それは、好都合には、あるホストから別のホストへのノンス値の通信と類似の方法で実行され得る。
３．発信アパーチャと同様に、ＩＰアドレスやイーサネット・アドレスなど一部の情報はＮＩＣごとである。
４．アプリケーション・レベルの頑健性のために、デフォルトの範囲内にある範囲を指定するアドレスおよびサイズを指定することによってアパーチャを「狭める」ことも可能である。これは、アプリケーション・レベルのデータ構造が、デフォルトのアパーチャ・サイズより小さいサイズのもの、またはそれと異なるアラインメントであり、きめ細かいメモリ保護が必要とされるときに行われ得る。
５．マップ・アドレスは、ＮＩＣがアパーチャのメモリに書き込むために出力するＰＣＩアドレス、またはイベントキューの記述子への（ＮＩＣのＳＲＡＭにとっての）ローカル・ポインタである。
【０１０１】
発信アパーチャでのＰＣＩ書込みは図１２に示すように処理される。そのステップは以下の通りである。
１．そのアドレスがＮＩＣに割り振られた範囲内に含まれるＰＣＩバーストが出力される。
２．ＮＩＣのアドレス・デコーダは、そのバーストを取り込み、そのアドレスがアパーチャの範囲内にあることを判定する（そうでない場合、それはローカル制御書込みであり得る）。
３．（アドレスから大まかに求められる）アパーチャ・サイズに応じて、アドレスは＜ベース：オフセット＞に分割される。例えば、１ｋのアパーチャでは、下位１０ビットがオフセットになるはずである。ベースはアパーチャ表キャッシュに供給されて、必要なパケット・ヘッダ情報に突き合わされる。
４．イーサネット・パケット・タイプ・フィールドに応じて、ＩＰ／イーサネットまたはＣＩ／イーサネット・パケット・ヘッダが形成される。
５．ＣＩパケットは、例えば、以下のフィールドを含むはずである。
データ（ＰＣＩバーストのデータ・ペイロードを含む）
チェックサム（ヘッダの内容に対してハードウェアによって計算される）
オフセット（アドレス・デコーダによる）
シーケンス番号
ノンス
アパーチャインデックス
ＣＩホスト・クラスタ・アドレス
６．特定のホストにいくつかのＰＣＩバーストが到着した場合、それらは、冗長ヘッダ情報を取り除くために適用される圧縮技術を用いて単一のイーサネット・フレームに圧縮され得る。
７．本システムでは、システム固有のＣＲＣまたはチェックサムを用いてエンドツーエンド保護が提供され、パケットのデータ部分に付加される。イーサネット・パケットもＣＲＣを含むが、それは取り除され、任意のホップで（スイッチなどで）再計算され得るので、内部破損（スイッチ特有のものなど）に対する保護を提供しない。
８．シーケンス番号が適用された場合、それは増分され、アパーチャ表エントリに書き戻される。
【０１０２】
着信パケットでは、逆の操作が行われる。着信アパーチャが検索され、それが以下であることがチェックされる。
（ａ）有効である；
（ｂ）期待されるシーケンス番号がパケットの番号とマッチする；
（ｃ）ノンスがマッチする（またはポート）；
（ｄ）期待されるイーサネット発信元アドレスである；
（ｅ）期待されるＩＰまたはＣＩ発信元アドレスである（これは、発信元アドレスの範囲をマッチさせるためのネットマスクとして指定され得る）；
【０１０３】
必要とされるセキュリティ・レベルに応じて、これらのチェックの任意の１つまたは複数が実施され、または省略され得る。
【０１０４】
検索（lookup）は、アパーチャの（ベース＋エクステント）のフィールドを返す。アパーチャ外アクセスが行われず、受信側のＰＣＩバス上で、
【表１】
2005539305.tif 000003
の形式を用いてＰＣＩ書込みが形成され、出力されるように、オフセットがエクステントに対してチェックされる。
【０１０５】
ＰＣＩバスが機能停止した場合、（データＮ上などで）新しいＰＣＩトランザクションが出力される。
【表２】
2005539305.tif 000004
【０１０６】
同様に、連続したＣＩデータ・パケットが到着した場合、それらは、単に冗長な中間ヘッダを除去することにより、より大きなＰＣＩバーストに合併され得る。
【０１０７】
本出願人は、本明細書で説明した個々の特徴および２つ以上のそのような特徴の任意の組合せを、そのような特徴または特徴の組合せが本明細書で開示した任意の問題を解決するかどうかにかかわらず、また特許請求の範囲の範囲を限定することもなく、そのような特徴または組合せが、当分野の技術者に共通の一般的知識を考慮して本明細書全体に基づいて実行され得る程度まで、分離して開示する。本出願人は、本発明の諸態様が、任意のそのような個々の特徴または特徴の組合せから構成され得ることを示す。前述の説明を考察すれば、本発明の範囲内で様々な変更が行われ得ることが当分野の技術者には明らかになるであろう。
【図面の簡単な説明】
【０１０８】
【図１】ネットワークを介した１つのアドレス空間の別のアドレス空間へのマッピングを示す図である。
【図２】従来技術のメモリ・マップ・アーキテクチャのアーキテクチャを示す図である。
【図３】データ伝送システムを示す概略図である。
【図４】アドレスのビットのマッピングを示す図である。
【図５】アドレスのビットのマッピングを示す図である。
【図６】メモリ空間アパーチャおよびその管理ドメインを示す図である。
【図７】ポートの諸機能を示す図である。
【図８】制御ブロックを備えるキューを示す図である。
【図９】二重キュー機構を示す図である。
【図１０】発信アパーチャ表の一例を示す図である。
【図１１】着信アパーチャ表の一例を示す図である。
【図１２】発信アパーチャのためのＰＣＩ書込みでの諸ステップを示す図である。
【図１３】固定長および可変長キューにおけるポインタの操作を示す図である。
【図１】
2005539305.tif 000005
【図２】
2005539305.tif 000006
【図３】
2005539305.tif 000007
【図４】
2005539305.tif 000008
【図５】
2005539305.tif 000009
【図６】
2005539305.tif 000010
【図７】
2005539305.tif 000011
【図８】
2005539305.tif 000012
【図９】
2005539305.tif 000013
【図１０】
2005539305.tif 000014
【図１１】
2005539305.tif 000015
【図１２】
2005539305.tif 000016
【図１３】
2005539305.tif 000017
【国際調査報告】
2005539305.tif 000018
2005539305.tif 000019
2005539305.tif 000020
2005539305.tif 000021
2005539305.tif 000022
2005539305.tif 000023
2005539305.tif 000024