(57)【特許請求の範囲】
【請求項１】
ホスト・メモリ中の共用データ構造体への排他的なアクセスを複数のソフトウェア・アプリケーションのいずれか１つに与えるための方法であって、
前記共用データ構造体内の使用中の各前記バッファを指す対応の記述子中に使用中の各バッファの索引値を保管するステップであって、各前記保管された索引値はバッファ・テーブル中の項目を参照し、前記バッファ・テーブルは使用中の各前記バッファのカーネル・アドレスを有するステップと、そして
使用中の前記各バッファの１つの前記索引値を検索し、複数のソフトウェア・アプリケーションの前記いずれか１つのみによって前記バッファ・テーブルの使用中の前記各バッファの前記１つのカーネル・アドレスへ排他的にアクセスするために前記索引値を使用するステップとを含む方法。
【請求項２】
前記参照するステップは前記カーネル中の記述子リングの第１のミューテックスを獲得するステップをさらに含む請求項１の方法
【請求項３】
前記索引値での前記バッファ・テーブルを前記バッファの情報でアップデートするステップをさらに含む請求項２の方法。
【請求項４】
前記記述子を前記カーネルの記述子リング上の前記索引値へのポインタにするステップをさらに含む請求項３の方法。
【請求項５】
前記バッファへの着信パケットにダイレクト・メモリ・アクセスするステップであって、前記ダイレクト・メモリ・アクセスはハードウェアによって遂行されるステップをさらに含む請求項４の方法。
【請求項６】
前記記述子を前記カーネルの完了リング上の前記索引値へのポインタとするステップをさらに含む請求項５の方法。
【請求項７】
前記完了リングの第２のミューテックスを獲得するステップをさらに含む請求項６の方法。
【請求項８】
前記完了リングから前記索引値を検索しそして前記索引値を使用して前記バッファの前記カーネル・アドレスを前記バッファ・テーブル内で検索するステップをさらに含む請求項７の方法。
【請求項９】
ホスト・メモリ中の共用データ構造体への排他的なアクセスを与えるための装置であって、
共用データ構造体内で使用中の各バッファのカーネル・アドレスを含むバッファ・テーブルと、
複数のバッファ記述子を持つ少なくとも１つの記述子リングを有し、各バッファ記述子は使用中の関連のバッファを指す、データ構造体とを備え、
使用中の対応の前記バッファに排他的にアクセスするために、各前記バッファ記述子は前記バッファ・テーブル中の項目を参照する索引値を有し、複数のソフトウェア・アプリケーションの１つのみが前記索引値を使用する、装置。
【請求項１０】
前記共用データ構造体は少なくとも１つの完了リングを備える請求項９の装置。
【請求項１１】
ホスト・メモリ中の共用データ構造体への排他的なアクセスを与えるためのコンピュータ・システムにおいて、
ホスト・メモリであって、
複数のバッファを保持する共用データ構造体と、
前記共用データ構造体内の使用中の各バッファのカーネル・アドレスを含むバッファ・テーブルと、
前記複数のバッファ記述子を持つ少なくとも１つのバッファ記述子リングを有し、各バッファ記述子は使用中の関連のバッファを指す、データ構造体と、
前記バッファ・テーブル中の項目を参照する索引値を有し、複数のソフトウェア・アプリケーションの１つのみが使用中の対応の前記バッファに排他的にアクセスするために前記索引値を使用する、各前記バッファ記述子と、
を有するホスト・メモリと、
前記共用データ構造体中におけるデータを処理するプロセッサと、
を備えるコンピュータ・システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータ・システムにおける共用データ構造体によるハードウェアとソフトウェアの対話の分野に関する。特に、本発明の方法および装置は、システム全体のパフォーマンスを向上させる、共用データ構造体のバッファ・アドレスの索引付けに関する。
【０００２】
【従来の技術】
コンピュータに関するメモリとは、一般に、命令を実行するために使用される処理装置内および他の内部記憶装置内のアドレス可能記憶空間のすべてである。コンピュータ・システムおよびその他の「インテリジェント」システムがホスト・メモリを備えることは周知である。一般に、ホスト・メモリは、所定のアドレス範囲内にある任意のバイト・サイズのいくつかのデータ・バッファを含む。これらのデータ・バッファは、所定のアドレス範囲内で固有にアドレスされて、データへの選択的なアクセスを可能にし、それに続く処理または送信を可能にする。データ・バッファはメモリ内のバッファ・リングの一部として循環的な順序で配列することができる。
【０００３】
図１に、多くのミューテックス・ロッキングを使用して共用データ構造体のデータ転送を管理する従来技術の方法の実施例を示す。記述子リング１００は１つまたは複数のバッファ１０２を有することができる。バッファ・テーブル１０４によって、バッファ・アドレスを含むバッファ情報がリストされる。完了リング１０６も１つまたは複数のバッファを有することができる。
【０００４】
ミューテックス１（ＭＵＴＥＸ＿１）、２、および３は、所与の時点に、同じ共用変数またはクリティカル・セクションのグループの実行メンバーに、１つの非同期プロシージャしかアクセスすることができないようにするルーチンである。より明確には、ミューテックスとは相互排除の概念を指す。本明細書で使用する限りでは、ミューテックスとは、一度に１つのソフトウェア・アプリケーションだけが、記述子リングおよびバッファ・テーブルにアクセスし使用すること、ができるようにするルーチンを指す。アプリケーションがミューテックス・ロックを獲得することができるようにミューテックスを自動的に獲得するルーチンもある。ミューテックス・ロックは、バッファ・テーブル内と記述子リング内とを問わず同じ場所を異なるスレッドが選択しないようにする。
【０００５】
従来の方法および装置の実施例では、ソフトウェアは一般に、ハードウェアが使用できるようにいくつかのバッファ・アドレスを記述子リング１００にキューイングする。ハードウェアは記述子リング１００を読み取ってバッファ・アドレスを取り出す。次に、ハードウェアは記述子リング１００に書き戻し、ビットをクリアし、それによってハードウェアがそのバッファ・アドレスをピックアップしたことをソフトウェアに知らせる。ハードウェアはパケットの処理を終了すると、その記述子を完了リング１０６に入れる。
【０００６】
バッファＡ  １０２のアドレスＡは、ハードウェアがバッファＡ  １０２にアクセスするためと、そのバッファにデータをＤＭＡ（ダイレクト・メモリ・アクセス）によって送るために使用するアドレスである。このアドレスは入出力バス上にのみ存在するため、ソフトウェアはこのアドレスを使用することができない。したがって、ソフトウェアは、入出力アドレスおよび対応するカーネル・アドレスをリストしたバッファー・テーブル１０４を使用して、必要なバッファ情報を指すアドレスＡを入手する。記述子リング１００上にバッファ・アドレスを置くために、ソフトウェアは記述子リング１００とバッファ・テーブル１０４をミューテックス・ロックして、記述子リング１００およびバッファ・テーブルの同じアドレスに他のソフトウェアが同時にアクセスを試みることができないようにする。
【０００７】
ソフトウェアがバッファ・テーブル１０４を更新し、記述子リング１００上にバッファを置いた後は、ソフトウェアは両方のミューテックスを放棄する。その後、ハードウェアはそのバッファをピックアップして、必要なデータをその中にＤＭＡし、完了リング１０６上に置き、割込みを開始することができる。次にソフトウェアは完了リング１０６のミューテックス３と、再びバッファ・テーブル１０４のミューテックス２を獲得する。ソフトウェアが完了リング１０６からバッファＡ  １０２を取り出して、バッファ・テーブル１０４内のバッファＡアドレスを探索（サーチ）し、バッファ・テーブル１０４から必要な情報を取り出し、バッファ内のデータを所望により処理する。
【０００８】
したがって、従来の方法および装置は、共用データ構造体にアクセスを試みるいくつかの実行スレッドを有することができるマルチスレッド装置ドライバを使用する。競合を避けるために、ミューテックスによって共有データ構造体を保護し、スレッド・アクセスを逐次化する。この従来の方法および装置の欠点は、逐次化によって全体的なシステム・パフォーマンスが損なわれることである。言い換えると、従来の方法および装置を使用すると、ソフトウェア・アプリケーションは、ハードウェアが使用するように記述子リング上にバッファを置くために、記述子リングのミューテックスを獲得しなければならず、バッファ・テーブルのためのもう１つのミューテックスを獲得しなければならない。
【０００９】
図２は、図１に図示するようなリングおよびバッファ・テーブルを必要とするデータ・パケット転送のための従来の方法および装置がたどる一般的なステップを示す流れ図である。ステップ２０１で、ソフトウェア・アプリケーションがミューテックス１およびミューテックス２を獲得する。ミューテックスは、ミューテックス・ロッキングが行われて、たとえば記述子リングまたはバッファ・テーブルへのアクセスが１つのソフトウェア・アプリケーションのみに制限されたときに「獲得」される。ステップ２０２で、ソフトウェアはバッファＡの情報によってバッファ・テーブルを更新し、バッファＡを記述子リング上に置く。
【００１０】
ステップ２０３で、データ・パケットがメディアに到着する。ステップ２０４で、コンピュータ・システムの回路内部にある制御ＲＡＭなどのハードウェアがそのデータ・パケットをバッファＡにＤＭＡし、Ａを完了リング上に置く。ステップ２０５で、ソフトウェアがミューテックス２およびミューテックス３を獲得する。ステップ２０６で、ソフトウェアは、バッファ・テーブルでバッファＡを検索するために、バッファ・テーブルをハッシュする。
【００１１】
従来の技術の方法および装置には多くの欠点がある。たとえば、バッファをキューイングするために、ソフトウェアはニューテックス１とミューテックス２を必要とする。バッファを解放するために、ソフトウェアはミューテックス２とミューテックス３を必要とする。したがって、１つの欠点は２つの操作によってミューテックス２に関して競合が生じ、それによって全体的なシステム・パフォーマンスが制限されることである。第２の欠点は、特定のバッファＡがバッファ・テーブル内のどこにあってもよいことである。したがって、ハッシュしてバッファＡを探索（サーチ）する必要がある。第３に、ハッシュするとき、「ヒット」を見つける必要があることである。たとえば、Ａをバッファ・テーブルにハッシュするために、Ａをバッファ・テーブルに格納してヒットを見つけなければならない。したがって、従来の方法および装置は、バッファ・テーブルにＡを格納するために、この追加のメモリ空間が必要である。
【００１２】
【発明が解決しようとする課題】
したがって、共有データ構造体のデータ転送操作を行う際に生じる衝突を防止し、全体的なシステム・パフォーマンスを向上させる方法および装置があることが望ましい。
【００１３】
【課題を解決するための手段】
メモリ内の共有データ構造体のデータ転送におけるハードウェアとソフトウェアの対話のための方法および装置を開示する。
【００１４】
特に、本発明の方法および装置は、同じデータへのアクセスを試みる異なるソフトウェア間の衝突を防ぐのに必要なミューテックス・ロッキングの数を減らし、バッファ置換とパケット到着の間の衝突を防ぐために、使用中の各バッファの索引値を保持する。
【００１５】
本発明の方法および装置の実施例では、コンピュータ・システムの受信ハードウェアが使用中の各バッファの索引値を保持する。この索引値はミューテックスによって保護された完了リングに入れられ、ミューテックスによって保護されたソフトウェア・キューに入れられる。ミューテックスにより、所与の時点で所与の索引を１つのスレッドのみが保有するように保証される。
【００１６】
本発明を使用すると、ソフトウェア・アドレスおよび関連情報が入ったバッファー・テーブルのミューテックス・ロッキングが不要である。これは、バッファ置換とパケット到着との間の衝突を防ぐために、使用中の各バッファの索引値をハードウェアが保持するからである。さらに、バッファの索引値によって、ハッシングと探索（サーチ）が不要なため、バッファ・テーブル内のソフトウェア・アドレスおよび関連情報の参照を迅速化することができる。さらに、本発明はソフトウェア・アドレスおよび関連情報をバッファ・テーブルから検索するためにバッファ・メモリに入出力アドレスを格納する必要がない。したがって、本発明の方法および装置は従来の技術よりメモリ使用量が少なく、また、本発明によってミューテックス・ロッキングの必要数が少なくなり、共有データ構造体に係わるデータ転送操作中のバッファ・テーブルのハッシングと探索が不要になる。
【００１７】
【発明の実施の形態】
本発明の特徴と利点は、以下の本発明の詳細な説明から明らかになろう。
【００１８】
バッファ置換とパケット到着の間の衝突を防ぐために、ハードウェアが使用中の各バッファの索引値を保持しておくメモリ内の共有データ構造体に関する方法および装置を開示する。
【００１９】
図３に、本発明のデータ転送調整の方法および装置を使用するＡＴＭ（非同期転送方式）ネットワーク・インタフェース回路を組み込んだコンピュータ・システム・ネットワークの例を示す。このコンピュータ・システム・ネットワーク１０は、ＡＴＭの、１つまたは複数のネットワーク・インタフェース回路（ＮＩＣ）１２を組み込んだホスト・コンピュータ・システム（図示せず）を含む。ＮＩＣ  １２は、ローカルＡＴＭ交換機１４を介して公衆ＡＴＭ交換機１６に結合され、ネットワーク１０に結合されたホスト・コンピュータ・システム間でのデータの非同期通信を可能にする。あるいは、ＮＩＣ１２は公衆ＡＴＭ交換機１６に直接結合することもできる。図３に示すように、このコンピュータ・システム・ネットワーク１０は、ＡＴＭネットワークをサポート・フレームワークとして使用するイーサネットまたはトークン・リング・ネットワーク１７などの他のネットワークを接続する、ゲートウェイとして機能するローカル・エリア・ネットワーク（ＬＡＮ）エミュレーション１５の使用を組み込んだコンピュータ・システムも含むことができる。
【００２０】
図４は、図３のＡＴＭ  ＮＩＣ  １２のアーキテクチャを示す略システム図である。ＡＴＭ  ＮＩＣ  １２は、このＡＴＭ  ＮＩＣ  １２は、システム・バス３８を介して結合されているホスト・コンピュータ・システムを、ＡＴＭプロトコルに従って動作するネットワーク媒体４０とインタフェースさせる。
【００２１】
図４のＡＴＭ  ＮＩＣ  １２は、システム・バス・インタフェース２０、汎用入出力（ＧＩＯ）インタフェース２４、システムおよびＡＴＭ層コア２２、ローカル・スレーブ・インタフェース２６、１アレイの送信（ＴＸ）ＦＩＦＯ  ２８、１アレイの受信（ＲＸ）ＦＩＦＯ  ３０、媒体インタフェース３２、外部バッファ・メモリ・インタフェース３４、およびクロック合成回路３６を備える。
【００２２】
ＮＩＣ  １２のこれらの要素２０〜３６が組み合わさって協調動作し、ホスト・コンピュータ４８とネットワーク内の他のコンピュータの間で、複数の帯域幅グループの複数の動的に割り振られたチャネルを介してデータを非同期的に転送する。ネットワーク・インタフェース回路１２の要素は集合的に、ホスト・コンピュータ・システムのシステム・バス３８に結合された多重チャネル・インテリジェント・ダイレクト・メモリ・アクセス（ＤＭＡ）コントローラとして機能する。好ましい実施形態では、複数の送受信チャネルが、全二重１５５／６２２Ｍｂｐｓ物理リンクを使用する仮想接続として処理される。システム・バス３８を経由して外部バッファ・メモリ・インタフェース３４を介して外部バッファ・メモリ４２まで様々なチャネルに加入するデータの複数のパケットが、システムおよびＡＴＭ層コア２２によって送信セルにセグメント化され、媒体インタフェース３２を介して媒体４０に送信される。
【００２３】
外部バッファ・メモリ４２は、ＲＸデータ・バッファを含むＲＸバッファ・メモリ４４を有する。ＲＸデータ・バッファは主として着信セルをバッファリングするために使用される。一実施例では、バッファ・メモリの一部を１０２４本の受信チャネルの情報を保持するためにも使用し、そのうちの１２８本をＮＩＣ  １２内部でキャッシュする。データ・バッファ・メモリは、４８バイトのバケットの集まりとして編成される。各バケットにはＡＴＭセルのペイロードが入る。データ・バッファ・メモリは、その４８バイト・バケットが様々なチャネルの着信セルに動的に割り当てられる共有メモリ・プールである。動的バケット割振りによって、チャネルにそれぞれの必要に応じて空きバケットが割り当てられ、メモリが十分に使用される。極端な場合には、１本のチャネルがメモリ・プール内のすべてバケットを占有することができ、あるいは、完全に近いインタリーブ・セルを使用してバケットを多くのチャネルに割り当てることができる。
【００２４】
コア２２は、受信パケットの再組立てを容易にする再組立てロジックも含む。ＴＸ  ＦＩＦＯ  ２８およびＲＸ  ＦＩＦＯ  ３０はコア２２と媒体インタフェース３２との間に結合され、それぞれ送信パケットと受信パケットの送信セル・ペイロードと受信セル・ペイロードをステージングするために使用される。媒体インタフェース３２は、クロック合成回路３６によって供給されるクロック信号によって駆動され、ネットワークの媒体４０との間でセルを送受信する。この媒体と媒体インタフェース３２は、ＡＴＭフォーラム特別仕様に記載されているＵｎｉｖｅｒｓａｌ  Ｔｅｓｔ  ａｎｄ  Ｏｐｅｒａｔｉｏｎｓ  Ｐｈｙｓｉｃａｌ  Ｉｎｔｅｒｆａｃｅ  ｆｏｒ  ＡＴＭ（ＵＴＯＰＩＡ）標準に準拠していることが好ましい。ＵＴＯＰＩＡ仕様に準拠するために、クロック合成回路３６は２０ＭＨｚまたは４０ＭＨｚのクロック信号を供給して媒体インタフェース３２をイネーブルし、１５５Ｍｂｐｓの場合、２０ＭＨｚで１バイト・ストリーム、６２２Ｍｂｐｓデータ・ストリームの場合、４０ＭＨｚで１６ビット・ストリームをサポートする。
【００２５】
この実施形態では、媒体インタフェース３２は、ＴＸ  ＦＩＦＯ  ２８からそれぞれ４バイトのセル・ヘッダと４８バイトのペイロードを有する５２バイトのデータ・セルを受信する。媒体インタフェース３２は、媒体４０に５３バイトのデータ・セルを供給する前に、各セルにセル・ヘッダに続く５番目のバイトとしてチェックサムを挿入する。逆に、媒体インタフェース３２が媒体４０からセルを受信するときは、各セルの５番目のバイトに入っているチェックサムを検査して、チェックサムが正しいかどうかを判断する。正しい場合、チェックサムを表すバイトをセルから除去してそのセルをＲＸ  ＦＩＦＯ  ３０に転送する。正しくない場合はセル全体を廃棄する。
【００２６】
ネットワーク・インタフェース回路１２は、ホスト・コンピュータ・システム上で稼動しているアプリケーションから非同期転送のセル記述詳細を遮蔽もする。この実施例では、ホスト・コンピュータ・システム上で稼動しているアプリケーションは、パケット・インタフェースとともに循環送受信リングを使用してデータの送受信を管理する。しかし、本発明は、他のデータ構造体を使用してデータの送受信を管理するホスト・コンピュータ・システム上で稼動するアプリケーションとともに実施することもできる。
【００２７】
システム・バス・インタフェース２０と汎用入出力インタフェース２４は、媒体４０への転送の詳細からホスト・コンピュータ・システムを遮蔽する。更に、コア２２はシステム３８バスおよびホスト・データ構造体の詳細から遮蔽されている。好ましい実施形態ではシステム・バスは、電気電子学会（ＩＥＥＥ）標準１４９６仕様で規定されているＳバスである。システム・バス・インタフェース２０は、この好ましい実施形態ではＳバスである、システム・バスの仕様に従って通信するように構成される。
【００２８】
システム・バス・インタフェース２０は、異なるホスト・コンピュータ・システム・バスに準拠するように構成可能であることが企図される。また、システム・バス・インタフェース２０は、汎用入出力インタフェース２４によって指定されたプロトコルに従ってデータを送受信するようにも構成される。汎用入出力インタフェース２４は、コア２２がホスト・コンピュータと通信するための単一のインタフェースを提供する。したがって、コア２２は、様々なホスト・コンピュータ・システムおよびバスとインタフェースするＮＩＣ  １２の様々な実施態様について変わらない。
【００２９】
共用データ構造体のデータ転送のための本発明の方法および装置の実施態様は、ホスト・メモリ５０に記憶されている共用データ構造体に適用することができる。ホスト・メモリ５０はシステム・バス３８に結合されている。記述子リング５２と完了リング５４は両方ともホスト・メモリ５０に入っている。データには、ホスト・メモリ５０からネットワーク・インタフェース回路１２に直接メモリ・アクセスすることができる。ネットワーク・インタフェース回路１２が媒体４０からのパケットの受信を開始すると、パケットが媒体インタフェース３２を通り、システム・コア２２を通って、外部バッファ・メモリ４２に流れる。パケットは次に、システム・コア２２を介してネットワーク・インタフェース回路１２に送り戻され、ホスト・メモリ５０に入れられる。ハードウェアは、受信パケットに対して確認応答し、記述子リング５２から読み取る。ハードウェアはＤＭＡ状態を入手すると、パケットに入ったデータをバッファ５６に入れ、ＤＭＡ状態を完了リング５４に置く。このプロセスの詳細は以下で述べる。
【００３０】
図５は、データ受信に使用するホスト・メモリの好ましいデータ構造の概要図である。ホスト・メモリは受信（ＲＸ）空きターゲット（ユーザ・データ）データ記述子リング５８０ａ〜５８０ｍと、ＲＸ空き非ターゲット（カーネル）記述子リング５８１と、ＲＸ完了リング５９０とを備える。
【００３１】
ＲＸ空きターゲット（ユーザ・データ）データ記述子リング５８０ａ〜５８０ｍとＲＸ空き非ターゲット（カーネル）記述子リング５８１は、２つの異なるタイプのＲＸ空きバッファ記述子リングである。各ＶＣ（仮想回路）はこの２つのタイプのいずれか一方に加入する。複数のＶＣが使用することができる共通の空きバッファ・プールがある。２番目のタイプは、各ＶＣ専用空きバッファ・プールを備える。共通空きバッファ・プールに加入するＶＣを非ターゲットＶＣと呼び、各ＶＣ専用空きバッファ・プールをターゲットＶＣと呼ぶ。データとプロトコル・ヘッダの分割が、ターゲットと非ターゲットの両方のＶＣによってサポートされる。ターゲットＶＣはバッファ・チェーン化特権を持つが、非ターゲットＶＣは持たない。
【００３２】
ＲＸ空きターゲット（ユーザ・データ）記述子リング５８０ａ〜５８０ｍは、ネットワーク・インタフェース回路（ＮＩＣ）によってサポートされる通常はデータ転送レートが異なる複数のチャネルと、ＲＸデータ・バッファとに対応する数のデータ構造体である。各ＲＸデータ記述子リング５８０ａ〜５８０ｍは、「１」から「Ｋ」までの番号が付けられた複数個「Ｋ」のリング項目５８５を含み、これらの項目にはソフトウェアが順次に循環方式でアクセスする。値「Ｋ」は整数であり、少なくとも６４であることが好ましい。各リング項目は、所望のデータ・パケットが入っているそれぞれのＲＸデータ・バッファ内の場所を指す少なくとも１つのポインタを含む「データ記述子」を格納するのに十分な大きさ（たとえば６４バイト）である。したがって、ターゲット・チャネルとしてプログラムされた各受信チャネルは、それ自身の空きバッファ・リングを有することになる。最高１，０２４本のターゲット接続のために最高１，０２４個の空きバッファ・リングがあることになる。特定のチャネルが空きバッファを使い果たし、パケットが到着した場合、ハードウェアは共通空きバッファ・プールにアクセスして空きバッファを取り出す。空きターゲット・データ・リングは記述子所有権を示すために「ＯＷＮ」ビットを使用する。
【００３３】
非ターゲット・チャネルとしてプログラムされた、主として多重受信チャネルのパケットを格納するための１つの共通ＲＸ空きデータ・リング５８１がある。非ターゲット・チャネルは通常、ＮＦＳ（ネットワーク・ファイル・システム）などのカーネル空間に宛てられたパケットに使用される。ＲＸ空き非ターゲット記述子リング５８１は、個別ターゲット・チャネル（ユーザ・アプリケーションに直接結びつけられたチャネル）が空きバッファを使い果たしたときに、補助バッファ・プールとしても使用することができる。一実施形態では、１つの記述子について２つのバッファ・ポインタ項目がある。一方のバッファ・ポインタはプロトコル・ヘッダを格納するために使用され、他方はパケットのデータ部分に使用される。ヘッダ・バッファとデータ・バッファは、それぞれ２０４８バイトと６４Ｋバイトに制限されている。ＲＸ空き非ターゲット・データ・リング５８１は記述子所有権を示す「ＯＷＮ」ビットを使用する。
【００３４】
ＲＸ完了リング５９０は、複数のリング項目を有するデータ構造体であり、ＲＸデータ記述子リング５８０ａ〜５８０ｍとは異なり、ポインタには依存せずにリング項目内に必要なすべての情報が含まれる。多重チャネルの受信データ・パケットは、ターゲットと非ターゲットの両方のＶＣについて単一のＲＸ完了リング５９０で報告される。好ましい実施形態では、ＲＸ完了リング５９０は６４バイト境界上の１，０２４個のリング項目を通して６４Ｋバイトのホスト・メモリを占有する。ＲＸ完了リング５９０には、ソフトウェアとハードウェアの両方がアクセス可能であり、ＮＩＣがＲＸ完了リング５９０の所有権を持つと設定される各記述子内のＯＷＮビットを必要とする。
【００３５】
図６に共有データ構造体にアクセスするソフトウェアの必要ミューテックス数を少なくすることによってデータ転送における全体的システム・パフォーマンスを向上させる方法および装置を示す。本発明の実施形態では、記述子リング５２は、索引Ｐ  ６０６を持つバッファＡ  ６０４の記述子６０２を有する。バッファＡ  ６０４の索引６０６はＰであり、バッファ・テーブル６０８においてバッファＡのアドレスをリストしたそれに対応する項目は、バッファＡ  ６０４の記述子６０２によってポインタされる項目Ｐ内で見つけられる。ソフトウェアが記述子リング５２上でバッファＡ  ６０４を使用可能にすると、ハードウェアはそのバッファを取り出すことができる。ハードウェアが、たとえばバッファ６０４にパケットを挿入することによってバッファ６０４の使用を完了すると、ハードウェアはそのバッファを完了リング５４上に置く。ソフトウェアがバッファ６０４を記述子リング５２上に置くときは、ミューテックス１によって記述子リング５２の同じアドレスに他のソフトウェア・アプリケーションがバッファを置かないようにする。ここで言及するミューテックスとは、「従来の技術」の項で説明したミューテックスと同じであるため、それ以上の説明は要しない。
【００３６】
記述子は、バッファＡ  ６０４を指す索引値６０６を有して、バッファ・テーブル６０８内のバッファＡ  ６０４の項目の正確な場所を示すため、バッファ・テーブル６０８に対するミューテックス・ロッキングは不要である。具体的には、バッファＡ  ６０４のアドレス指定情報が入った項目の場所が索引Ｐによって示されるため、バッファ・テーブル６０８をハッシュしたり探索したりする必要がない。さらに、ミューテックス１のために、１つのソフトウェアだけが索引Ｐ６０６を使用することが保証され、バッファ・テーブル６０８のミューテックス・ロッキングが不要である。
【００３７】
図７に本発明の実施に使用することができるポインタの例を示す。バッファ置換とパケット到着の間の衝突を防ぐため、ワード７００とワード７０４は両方とも、バッファ・テーブル内のバッファの項目を示す索引値を有する。例示するワード７００は索引７０２を有し、ワード７０４は索引７０２の残りの部分を有する。
【００３８】
図８は、本発明の実施形態においてたどる一般的なステップを示す流れ図である。前の図６に図示されている構成要素を参照しながら説明すると、ステップ８０１でソフトウェアは記述子リング６００をミューテックス・ロッキングするためにミューテックス１を獲得する。ステップ８０２で、ソフトウェアはバッファ・テーブル６０８の索引Ｐ  ６０６の項目をバッファＡの情報で更新する。ステップ８０３で、ソフトウェアは、バッファ・テーブル６０８内のバッファＡ  ６０４情報の場所を示す索引Ｐ  ６０６を持つ記述子６０２を記述子リング６００に置く。
【００３９】
ステップ８０４で媒体４０にパケットが到着する。ステップ８０５で、ハードウェアがダイレクト・メモリ・アクセスしてパケットをバッファＡ  ６０４に入れる。ステップ８０６で、ハードウェアはバッファＡ  ６０４を指す記述子６０２に格納されている索引値Ｐ  ６０６を入念に保持する。ステップ８０７でソフトウェアがミューテックス・ロッキング完了リング６１０からミューテックス３を獲得する。次にソフトウェアは、ステップ８０８で完了リング６１０から索引Ｐ  ６０６を検索（レトリーブ）し、バッファ・テーブル６０８内の場所Ｐに直接アクセスする。
【００４０】
本発明の方法および装置を使用すると、索引６０６がソフトウェアによって「所有（ＯＷＮ）」されている限りバッファ・テーブル６０８のミューテックス・ロッキングが不要である。さらに、本発明によって、従来の技術の方法および装置の場合のようなバッファ置換とパケット到着の衝突が起こらない。
【００４１】
以上、使用中の各バッファ値の索引値を保持して、共用データ構造体のデータ転送中に必要なミューテックス・ロッキングの数を減らす方法および装置について説明した。
【００４２】
特定の実施形態について詳細に説明し、添付図面に図示したが、このような実施形態は単に例示的なものに過ぎず、広い本発明を限定するものではなく、当業者なら他の様々な変更を思いつくと考えられるために本発明は図示および説明されている特定の構成および構造には限定されないものと理解すべきである。
【００４３】
具体的には、本発明の方法および装置は図３および図４に図示するＡＴＭを使用した実施態様には限定されない。図に示されている特定の実施態様は例示に過ぎない。本発明は共有データ構造体へのアクセス中にミューテックス・ロッキングを必要とするどのようなフレームワークにおいても実施することができる。
【図面の簡単な説明】
【図１】従来の方法を示す図である。
【図２】共有データ構造体に関するデータ転送のための従来の方法および装置がたどる一般的なステップを示す流れ図である。
【図３】本発明を実施するために使用することができるコンピュータ・システム・ネットワークの例を示す図である。
【図４】図３のＡＴＭ  ＮＩＣ  １２のアーキテクチャを示す略システム図である。
【図５】データ送信に使用するホスト・メモリの好ましいデータ構造体を示す概要図である。
【図６】必要なミューテックスの数を減らすことによって、ハードウェアがバッファを使用することができるようにするときの全体的パフォーマンスを向上させる方法および装置を示す図である。
【図７】共有データ構造体を調整する方法および装置を示す図である。
【図８】本発明の実施形態がたどる一般的ステップを示す流れ図である。
【符号の説明】
１０  コンピュータ・システム・ネットワーク
１２  ＡＴＭネットワーク・インタフェース回路
１４  ローカルＡＴＭ交換機
１６  公衆ＡＴＭ交換機
２２  システムおよびＡＴＭ層コア
２０  システム・バス・インタフェース
２４  汎用入出力インタフェース
２６  ローカル・スレーブ・インタフェース
２８  送信ＦＩＦＯ
３０  受信ＦＩＦＯ
３２  媒体インタフェース
３４  外部バッファ・メモリ・インタフェース
３６  クロック合成回路
３８  システム・バス
４０  ネットワーク媒体
４２  外部バッファ・メモリ
４８  ホスト・コンピュータ・システム
５０  ホスト・メモリ
５２  ＲＸデータ記述子リング
５４  完了リング
５６  バッファ
５８０  ＲＸデータ記述子リング
５８１  ＲＸ空き非ターゲット記述子リング
５９０  ＲＸ完了リング
６０２  記述子
６０４  バッファ
６０６  索引
６０８  バッファ・テーブル
７００  ワード
７０２  索引
【図１】
0003762810.tif 000002
【図２】
0003762810.tif 000003
【図３】
0003762810.tif 000004
【図４】
0003762810.tif 000005
【図５】
0003762810.tif 000006
【図６】
0003762810.tif 000007
【図７】
0003762810.tif 000008
【図８】
0003762810.tif 000009