(57)【特許請求の範囲】
【請求項１】
通信環境において通信を容易にするためのコンピュータ・プログラムであって、
前記通信環境のプロセッサに、
同期データ転送から非同期データ転送に変換する事前承認を前記通信環境の送信機から取得するステップであって、前記事前承認は、前記非同期データ転送を追跡するためのメモリ・ブロックの指標を含む、ステップと、
データを前記通信環境の受信機に送信する要求を前記送信機から取得するステップと、
前記受信機への前記データの送信を開始するステップであって、前記同期データ転送を用いる、ステップと、
前記同期データ転送が非同期データ転送に変換されるべきであると判定するステップと、
前記判定するステップに応答して、前記同期データ転送を前記非同期データ転送に自動的に変換して、前記受信機への前記データの前記送信を完了させるステップであって、前記自動的に変換するステップが、前記事前承認以外の前記送信機によるアクションと無関係である、ステップと
を実行させるためのコンピュータ・プログラム。
【請求項２】
前記判定するステップが、前記受信機が、前記データが送信されようとするときに前記データを受信することができるようになるのに遅れていると判定するステップと、それに応答して、前記同期データ転送を前記非同期データ転送に自動的に変換して、前記受信機が前記データを受信することができるときに前記データの前記送信を完了させるステップとを含む、請求項１に記載のコンピュータ・プログラム。
【請求項３】
前記自動的に変換するステップが、
前記メモリ・ブロックに前記要求を記憶するステップと、
前記受信機のキューに対して前記メモリ・ブロックを待ち行列に入れるステップと、
前記受信機が前記データを受信することができると判定するステップと、
前記メモリ・ブロックを使用して、前記データを前記受信機に送信するステップと
を含む、請求項１に記載のコンピュータ・プログラム。
【請求項４】
前記受信機が前記データを受信することができると前記判定するステップが、前記受信機が前記データを受信するための空のバッファを有すると判定するステップを含む、請求項３に記載のコンピュータ・プログラム。
【請求項５】
前記方法が、前記送信の完了を前記送信機に対して示すステップをさらに含む、請求項３に記載のコンピュータ・プログラム。
【請求項６】
完了を示す前記ステップが、前記送信機がアクセス可能なメモリ内の完了キュー上に前記メモリ・ブロックのアドレスをポストするステップを含む、請求項５に記載のコンピュータ・プログラム。
【請求項７】
前記方法が、前記完了キュー上に前記アドレスをポストするステップに応答して、前記送信機への割込みを行うステップをさらに含む、請求項６に記載のコンピュータ・プログラム。
【請求項８】
前記受信機が遅れていると前記判定するステップが、受信バッファが前記データを受信するのに利用可能でないと判定するステップを含む、請求項２に記載のコンピュータ・プログラム。
【請求項９】
前記方法が、前記送信機から別の要求を取得するステップであって、前記別の要求が、前記受信機に前記要求を非同期的に送信することを完了させる前に、別の受信機に同期的に送信される、ステップをさらに含む、請求項１に記載のコンピュータ・プログラム。
【請求項１０】
前記方法が、前記データを非同期的に前記受信機に前記送信することを完了させる前に、１つまたは複数の追加の要求を前記送信機から受信するステップをさらに含み、前記１つまたは複数の追加の要求のデータを同期的にまたは非同期的に１つまたは複数の受信機に送信することができる、請求項１に記載のコンピュータ・プログラム。
【請求項１１】
前記方法が、前記同期データ転送から前記非同期データ転送に変換するステップに応答して、前記受信機でのデータ到着順序を維持するステップをさらに含む、請求項１に記載のコンピュータ・プログラム。
【請求項１２】
通信環境において通信を容易にするためのコンピュータ・システムであって、前記コンピュータ・システムが、
メモリと、
前記メモリと通信するプロセッサとを含み、前記コンピュータ・システムが、
前記通信環境のプロセッサによって、同期データ転送から非同期データ転送に変換する事前承認を前記通信環境の送信機から取得するステップであって、前記事前承認は、前記非同期データ転送を追跡するためのメモリ・ブロックの指標を含む、ステップと、
前記プロセッサによって、データを前記通信環境の受信機に送信する要求を前記送信機から取得するステップと、
前記プロセッサによって、前記受信機への前記データの送信を開始するステップであって、前記同期データ転送を用いる、ステップと、
前記プロセッサによって、前記同期データ転送が非同期データ転送に変換されるべきであると判定するステップと、
前記判定するステップに応答して、前記プロセッサによって前記同期データ転送を前記非同期データ転送に自動的に変換して、前記受信機への前記データの前記送信を完了させるステップであって、前記自動的に変換するステップが、前記事前承認以外の前記送信機によるアクションと無関係である、ステップと
を含む方法を実行するように構成される、
コンピュータ・システム。
【請求項１３】
前記判定するステップが、前記受信機が、前記データが送信されようとするときに前記データを受信することができるようになるのに遅れていると判定するステップと、それに応答して、前記同期データ転送を前記非同期データ転送に自動的に変換して、前記受信機が前記データを受信することができるときに前記データの前記送信を完了させるステップとを含む、請求項１２に記載のコンピュータ・システム。
【請求項１４】
前記自動的に変換するステップが、
前記メモリ・ブロックに前記要求を記憶するステップと、
前記受信機のキューに対して前記メモリ・ブロックを待ち行列に入れるステップと、
前記受信機が前記データを受信することができると判定するステップと、
前記メモリ・ブロックを使用して、前記データを前記受信機に送信するステップと
を含む、請求項１２に記載のコンピュータ・システム。
【請求項１５】
前記受信機が前記データを受信することができると判定する前記ステップが、前記受信機が前記データを受信するための空のバッファを有すると判定するステップを含む、請求項１４に記載のコンピュータ・システム。
【請求項１６】
前記方法が、前記送信の完了を前記送信機に対して示すステップをさらに含み、完了を示す前記ステップが、前記送信機がアクセス可能なメモリ内の完了キュー上に前記メモリ・ブロックのアドレスをポストするステップを含み、前記方法が、前記完了キュー上に前記アドレスをポストするステップに応答して、前記送信機への割込みを行うステップをさらに含み、前記受信機が遅れていると判定する前記ステップが、受信バッファが前記データを受信するのに利用可能でないと判定するステップを含む、請求項１４に記載のコンピュータ・システム。
【請求項１７】
通信環境において通信を容易にするための方法であって、
前記通信環境のプロセッサによって、同期データ転送から非同期データ転送に変換する事前承認を前記通信環境の送信機から取得するステップであって、前記事前承認は、前記非同期データ転送を追跡するためのメモリ・ブロックの指標を含む、ステップと、
前記プロセッサによって、データを前記通信環境の受信機に送信する要求を前記送信機から取得するステップと、
前記プロセッサによって、前記受信機への前記データの送信を開始するステップであって、前記同期データ転送を用いる、ステップと、
前記プロセッサによって、前記同期データ転送が非同期データ転送に変換されるべきであると判定するステップと、
前記判定するステップに応答して、前記プロセッサによって前記同期データ転送を前記非同期データ転送に自動的に変換して、前記受信機への前記データの前記送信を完了させるステップであって、前記自動的に変換するステップが、前記事前承認以外の前記送信機によるアクションと無関係である、ステップと
を含む、方法。
【請求項１８】
前記判定するステップが、前記受信機が、前記データが送信されてようとするときに前記データを受信することができるようになるのに遅れていると判定するステップと、それに応答して、前記同期データ転送を前記非同期データ転送に自動的に変換して、前記受信機が前記データを受信することができるときに前記データの前記送信を完了させるステップとを含む、請求項１７に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の一態様は、一般に、通信環境内で通信することに関し、より詳細には、通信環境の隔離されたメモリ空間の間のデータの転送を容易にすることに関する。
【背景技術】
【０００２】
隔離されたメモリ空間の間でデータを転送するために、典型的には、ネットワーキング技術およびプロトコルが使用される。例えば、データは、イーサネット（Ｒ）リンクを介してＴＣＰ／ＩＰプロトコルを使用して、ある隔離されたメモリ空間から別の隔離されたメモリ空間に送信され得る。現行のネットワーキング技術により、データを同期的にまたは非同期的にのいずれかで送信することができる。これは、送信機の側の排他的選択である。
【０００３】
データが同期的に送信されるとき、送信機は、データ転送が完了するまで一時停止される。一方、データが非同期的に送信される場合、送信機は操作を継続することができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許第６，３３２，１７１Ｂ１号
【特許文献２】米国特許第６，３４５，２４１Ｂ１号
【特許文献３】米国特許第６，５１９，６４５Ｂ２号
【特許文献４】米国特許第７，９４１，７９９Ｂ２号
【特許文献５】米国特許第５，５５１，０１３号
【特許文献６】米国特許第６，００９，２６１号
【特許文献７】米国特許第５，５７４，８７３号
【特許文献８】米国特許第６，３０８，２５５号
【特許文献９】米国特許第６，４６３，５８２号
【特許文献１０】米国特許第５，７９０，８２５号
【非特許文献】
【０００５】
【非特許文献１】「z/Architecture Principles ofOperation」、ＩＢＭ刊行物番号第ＳＡ２２−７８３２−０８号、２０１０年８月
【発明の概要】
【発明が解決しようとする課題】
【０００６】
【課題を解決するための手段】
【０００７】
通信環境における通信を容易にするためのコンピュータ・プログラム製品を提供することによって、従来技術の欠点が克服され、さらなる利点がもたらされる。コンピュータ・プログラム製品は、処理回路によって読取り可能であって、方法を実行するための、処理回路によって実行する命令を記憶する記憶媒体を含む。方法は、例えば、通信環境のプロセッサによって、同期データ転送から非同期データ転送に変換する事前承認を通信環境の送信機から取得するステップと、プロセッサによって、データを通信環境の受信機に送信する要求を送信機から取得するステップと、プロセッサによって、受信機へのデータの送信を開始するステップであって、同期データ転送を用いる、ステップと、プロセッサによって、同期データ転送が非同期データ転送に変換されるべきであると判定するステップと、判定するステップに応答して、プロセッサによって同期データ転送を非同期データ転送に自動的に変換して、受信機へのデータの送信を完了させるステップであって、自動的に変換するステップが、事前承認以外の送信機によるアクションと無関係である、ステップとを含む。
【０００８】
本発明の１つまたは複数の態様に関する方法およびシステムも本明細書において記述され、特許請求される。さらに、本発明の１つまたは複数の態様に関するサービスも本明細書において記述され、特許請求され得る。
【０００９】
本発明の１つまたは複数の態様の技術を介して、さらなる特色および利点が実現される。本発明の他の実施形態および態様を本明細書において詳細に記述し、特許請求されている発明の一部とみなす。
【００１０】
本発明の１つまたは複数の態様が特に指摘され、明細書の最後にある特許請求の範囲における例として明確に特許請求される。本発明の１つまたは複数の態様の前述および他の目的、特色および利点は、添付の図面と併せた下記の詳細な説明から明らかである。
【図面の簡単な説明】
【００１１】
【図１】本発明の１つまたは複数の態様を組み込むまたは使用するあるいはその両方を行う通信環境の一例を示す図である。
【図２】本発明の態様による、図１の論理パーティションに関連するメモリ空間の例を示す図である。
【図３】本発明の態様による、使用される同期アウトバウンドデータ転送の一例を示す図である。
【図４】本発明の態様による、同期データ転送から非同期データ転送に自動的に変換するために使用される制御構造の例を示す図である。
【図５】本発明の態様による、同期データ転送を非同期データ転送に自動的に変換するための論理の一実施形態を示す図である。
【図６】本発明の態様による、非同期データ転送の正常完了の一例を絵画的に示す図である。
【図７】本発明の１つまたは複数の態様を組み込むコンピュータ・プログラム製品の一実施形態を示す図である。
【図８】本発明の１つまたは複数の態様を組み込み、使用するためのホスト・コンピュータ・システムの一実施形態を示す図である。
【図９】本発明の１つまたは複数の態様を組み込み、使用するためのコンピュータ・システムのさらなる例を示す図である。
【図１０】本発明の１つまたは複数の態様を組み込み、使用するためのコンピュータ・ネットワークを含むコンピュータ・システムの別の例を示す図である。
【図１１】本発明の１つまたは複数の態様を組み込み、使用するためのコンピュータ・システムの様々な要素の一実施形態を示す図である。
【図１２】本発明の１つまたは複数の態様を組み込み、使用するための図１１のコンピュータ・システムの実行ユニットの一実施形態を示す図である。
【図１３】本発明の１つまたは複数の態様を組み込み、使用するための図１１のコンピュータ・システムの分岐ユニットの一実施形態を示す図である。
【図１４】本発明の１つまたは複数の態様を組み込み、使用するための図１１のコンピュータ・システムの読込み／記憶ユニットの一実施形態を示す図である。
【図１５】本発明の１つまたは複数の態様を組み込み、使用するためのエミュレートされたホスト・コンピュータ・システムの一実施形態を示す図である。
【発明を実施するための形態】
【００１２】
本発明の態様によれば、同期データ転送を非同期データ転送に自動的に変換するための機能が提供される。例えば、同期データ転送は、例えば、データの受信機が転送時にデータを受信することができないなど、データ転送の完了に遅延があるという判定に応答して、非同期データ転送に自動的に変換される。同期データ転送から非同期データ転送への変換は、送信機（または受信機）の要求によるものではないという点で自動的に実行され、送信機（または受信機）は変換が開始されるときにその変換について知っているわけではない。さらに、変換時に、送信機（または受信機）は、何らかの措置を講じたり変換に介入したりする必要がない。
【００１３】
図１を参照して、本発明の１つまたは複数の態様を組み込むまたは使用するあるいはその両方を行う通信環境の一実施形態について記述する。一例では、通信環境１００は、インターナショナル・ビジネス・マシーンズ・コーポレーション（International Business Machines Corporation）（ＩＢＭ（Ｒ））によって提供されるｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）に基づく中央プロセッサ複合体（ＣＰＣ）１０２を含む。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）の態様は、その全体が参照により本明細書に組み込まれる「z/Architecture Principles of Operation」という表題のＩＢＭ（Ｒ）刊行物、ＩＢＭ刊行物番号第ＳＡ２２−７８３２−０８号、２０１０年８月に記述されている。中央プロセッサ複合体１０２を含み得る１つのシステムは、インターナショナル・ビジネス・マシーンズ・コーポレーション、アーモンク、ニューヨーク州によって提供されるｚＥｎｔｅｒｐｒｉｓｅ  １９６（ｚ１９６）システムである。ＩＢＭ（Ｒ）およびｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）は登録商標であり、ｚＥｎｔｅｒｐｒｉｓｅ  １９６およびｚ１９６はインターナショナル・ビジネス・マシーンズ・コーポレーション、アーモンク、ニューヨーク州、アメリカ合衆国の商標である。本明細書において使用される他の名称は、インターナショナル・ビジネス・マシーンズ・コーポレーションまたは他の会社の登録商標、商標または製品名である場合がある。
【００１４】
中央プロセッサ複合体１０２は、例えば、１つまたは複数のパーティション１０４、ハイパーバイザ１０６、１つまたは複数の中央プロセッサ１０８、および入力／出力サブシステム１１０の１つまたは複数の構成要素を含む。１つまたは複数のパーティション１０４は、この例では、別個のシステムとして仮想化されたシステムのハードウェアリソースのセットを含む論理パーティション（別名ＬＰＡＲ）である。
【００１５】
それぞれの論理パーティション１０４は、別個のシステムとして機能することができる。すなわち、それぞれの論理パーティションを個別にリセットし、所望であれば、オペレーティング・システム１２０を用いて最初に読み込み、異なるプログラムを用いて操作することができる。論理パーティションで動作するオペレーティング・システムまたはアプリケーション・プログラムは、完全な（full and complete）システムにアクセスできるように見えるが、実際は、その一部分のみが利用可能である。ハードウェアおよびファームウェアと呼ばれるライセンス内部コード（ＬＩＣ）の組合せは、論理パーティション内のプログラムが異なる論理パーティション内のプログラムに干渉しないようにする。これにより、いくつかの異なる論理パーティションは、タイムスライス方式で単一または複数の物理プロセッサ上で動作することができる。この例では、いくつかの論理パーティションは、１つまたは複数の論理パーティションによって異なっていてもよい常駐オペレーティング・システム１２０を有する。一実施形態では、オペレーティング・システム１２０は、インターナショナル・ビジネス・マシーンズ・コーポレーション、アーモンク、ニューヨーク州によって提供されるｚ／ＯＳ（Ｒ）オペレーティング・システムである。
【００１６】
本明細書において使用される場合、ファームウェアは、例えば、プロセッサのマイクロコード、ミリコードまたはマクロコードあるいはそれらすべてを含む。ファームウェアは、例えば、より高レベルのマシンコードの実施において使用されるハードウェアレベルの命令またはデータ構造あるいはその両方を含む。一実施形態では、ファームウェアは、例えば、典型的にはマイクロコードとして提供される独自コードを含み、独自コードは、信頼できるソフトウェアまたは基盤となるハードウェアに特有のマイクロコードを含み、システム・ハードウェアへのオペレーティング・システムのアクセスを制御する。
【００１７】
論理パーティション１０４はハイパーバイザ１０６によって管理され、ハイパーバイザ１０６は中央プロセッサ１０８上で動作するファームウェアによって実施される。ハイパーバイザ１０６の一例は、インターナショナル・ビジネス・マシーンズ・コーポレーション、アーモンク、ニューヨーク州によって提供されるＰｒｏｃｅｓｓｏｒ  Ｒｅｓｏｕｒｃｅ／Ｓｙｓｔｅｍｓ  Ｍａｎａｇｅｒ（ＰＲ／ＳＭ（商標））である。
【００１８】
中央プロセッサ１０８は、論理パーティションに割り振られる物理プロセッサ・リソースである。例えば、論理パーティション１０４は、１つまたは複数の論理プロセッサを含み、それぞれの論理プロセッサは、パーティションに割り振られた物理プロセッサ・リソース１０８のすべてまたは割り当て分を表す。特定のパーティション１０４の論理プロセッサは、基盤となるプロセッサ・リソースがそのパーティション用に確保されるように、パーティション専用にするか、基盤となるプロセッサ・リソースが場合によっては別のパーティションで利用可能となるように、別のパーティションと共有することができる。
【００１９】
論理パーティション１０４およびハイパーバイザ１０６はそれぞれ、中央プロセッサに関連する主メモリ１５０のそれぞれの部分に常駐する１つまたは複数のプログラムを含む。一例では、図２を参照してさらに詳細に記述されるように、それぞれの論理パーティションには、メモリ空間と呼ばれる主メモリの一部分が割り当てられる。
【００２０】
図２を参照すると、一実施形態では、主メモリ１５０は、それぞれが主メモリにおいて一連のアドレスを含む複数のメモリ空間を含む。メモリ空間は、論理パーティションなどのエンティティまたは他のエンティティに割り当てられ得る。図２に示す例では、２つの論理パーティションにそれぞれ割り当てられた２つのメモリ空間がある。送信機と受信機の間の通信について以下でさらに記述するので、本明細書では、一方のメモリ空間を送信機のメモリ空間２０２と呼び、他方のメモリ空間を受信機のメモリ空間２０４と呼ぶ。送信機のメモリ空間２０２は、例えば、１つまたは複数の入力キュー２１０、１つまたは複数の出力キュー２１２、および１つまたは複数のバッファ２１４を含む。同様に、受信機のメモリ空間２０４は、１つまたは複数の入力キュー２２０、１つまたは複数の出力キュー２２２、および１つまたは複数のバッファ２２４を含む。キューおよびバッファの使用について以下でさらに記述する。
【００２１】
個々のメモリ空間は、ファームウェアによる制御なしでデータを一方のメモリ空間から他方のメモリ空間に直接書き込むことができないという点で互いに隔離されている。一例では、例えば、イーサネット（Ｒ）リンクを介したＴＣＰ／ＩＰを使用するネットワーキング伝送は、あるメモリ空間から別のメモリ空間にデータを転送するために使用される。特定の一例では、ＨｉｐｅｒＳｏｃｋｅｔｓ（商標）と呼ばれる、インターナショナル・ビジネス・マシーンズ・コーポレーションによって提供される技術が転送を実行するために使用される。
【００２２】
ＨｉｐｅｒＳｏｃｋｅｔｓ（商標）は、中央プロセッサ複合体内で高速ＴＣＰ／ＩＰ接続を提供する。ＨｉｐｅｒＳｏｃｋｅｔｓ（商標）により、異なる論理パーティションで動作するサーバ間のいかなる物理ケーブリングまたは外部ネットワーキング接続も不要になる。その代わりに、通信はプロセッサのシステムメモリを経由する。ＨｉｐｅｒＳｏｃｋｅｔｓ（商標）実装は、ＯＳＡ−Ｅｘｐｒｅｓｓ  Ｑｕｅｕｅｄ  Ｄｉｒｅｃｔ  Ｉ／Ｏ（ＱＤＩＯ）プロトコルに基づく。ファームウェアは、ＯＳＡ−Ｅｘｐｒｅｓｓ  ＱＤＩＯインターフェースのリンク制御レイヤをエミュレートする。
【００２３】
例えば、ネットワーキング技術を使用したあるメモリ空間から別のメモリ空間へのデータ転送は同期であり、このデータ転送では、データ転送を開始した後、送信機は転送が完了するまで一時停止される。あるメモリ空間から別のメモリ空間への同期データ転送の一例について、図３を参照して記述する。
【００２４】
図３を参照すると、送信機のメモリ空間で動作しているＴＣＰ／ＩＰスタックまたはプログラムなどの送信機３００は、受信機のメモリ空間内の例えば別のＴＣＰ／ＩＰスタックまたはプログラムなどの受信機３１０に、データを送信する要求を開始する。受信機のメモリ空間は送信機のメモリ空間から隔離されているので、この例では、ネットワーク通信プロトコルを使用して、送信機から受信機に送信されるデータの同期データ伝送を実行する。同期データ転送を使用すると、ファームウェアの制御下である位置から別の位置へのメモリ転送を実行することによって、送信機と受信機の間に非常に高速で低遅延のダイレクト通信パスをもたらす。一例では、メモリ間のデータ転送はＨｉｐｅｒＳｏｃｋｅｔｓ（商標）によって実行される。この転送機構は、送信機がデータを送信するのと同じレートでまたはそれよりも速く受信機がデータを受信することができる限り、非常に効率的である。
【００２５】
データを転送するために、送信機は選択されたデータバッファ３２０内に含まれるデータを取り出し、そのデータを送信機の出力キュー３３０に置く。例えば、選択されたデータバッファのポインタ３３２は出力キューに置かれる。次いで、送信機３００はプロセッサに信号を送って３４０、受信機３１０へのデータ転送を実行する。一例では、信号で知らされ、転送を実行することになるのはプロセッサのファームウェア３５０であるが、他の例では、それはファームウェアではなく、プロセッサの他のコードまたはハードウェアあるいはその両方である。
【００２６】
送信機から受信機へのデータ転送を要求する信号を受信したことに応答して、ファームウェアは送信機の出力キューからデータをコピーし、そのデータを受信機の入力キュー３６０に置く。例えば、データは空のバッファ３７０にコピーされ、そのデータに対するポインタ３７２が入力キュー３６０に置かれる。データ転送が完了した後、ファームウェアは転送が完了した旨の信号を送信機に返す。送信機がこの完了信号を受信するまで、送信機は一時停止され、いかなる他の操作も実行することができない。
【００２７】
特定の一例として、プロセッサに信号で知らせるために、送信機は信号アダプタ（SignalAdapter）（ＳＩＧＡ）命令を発行し、この命令は、１つまたは複数の出力キューが受信機に伝送されるべきデータを有することをプロセッサに信号で知らせる書込み機能（ＳＩＧＡ−ｗ）を示す。書込み機能は、命令によって使用される第１の汎用レジスタで提供される機能コードとして特定され、書込み機能のネットワーク接続（例えば、サブシステム識別語）のアドレスは、命令によって使用される第２の汎用レジスタで示される。さらに、出力キューは、命令によって使用されるさらなる第３の汎用レジスタで特定される。
【００２８】
この特定の例では、キューはＱｕｅｕｅｄ  Ｄｉｒｅｃｔ  Ｉ／Ｏ（ＱＤＩＯ）キューとして実施され、それぞれのキューはそれに関連する複数のバッファならびに様々な制御情報を有する。一実施形態では、ＱＤＩＯキューは、キューについて記述するデータ構造ならびにデータ転送に使用されるバッファ・ストレージ・ブロックを含む。一例として、キューの特徴についてまとめて記述し、データの交換を可能にするための制御を提供する、キュー構成要素と呼ばれる複数のストレージ・データ構造は、例えば、以下を含む。
ＱＤＩＯ入力キューおよび出力キューの収集についての情報を含むキュー情報ブロック（ＱＩＢ）。ＱＩＢは、入力キュー用のストレージ・リスト情報ブロック（ＳＬＩＢ）アドレスおよび出力キュー用のＳＬＩＢアドレスを含む。
それぞれのキューに対して１つのＳＬＩＢがあり、それぞれのＳＬＩＢはキューおよびキューのそれぞれのキューバッファについての情報を提供する。それぞれのＳＬＩＢは、ヘッダおよび、それぞれのキューのバッファのそれぞれについての情報を含むストレージ・リスト情報ブロック・エントリ（ＳＬＩＢＥ）と呼ばれる１つまたは複数のエントリを有する。一例では、それぞれのストレージ・リスト情報ブロックは、次のストレージ・リスト情報ブロックのアドレス、ストレージ・リスト（ＳＬ）のアドレスおよびストレージ・リスト状態ブロック（ＳＬＳＢ）のアドレスを含む。
それぞれのキューに対して定められた１つのストレージ・リストがあり、ＳＬは、例えば、１２８のエントリ、キューのバッファのそれぞれに対して１つのエントリを含む。ストレージ・リストは、主ストレージにおけるＩ／Ｏバッファ位置についての情報を提供する。それぞれのエントリは、ストレージ・ブロック・アドレス・リスト（ＳＢＡＬ）の絶対アドレスを含む。それぞれのストレージ・ブロック・アドレス・リストは、それぞれのキューに関連するデータバッファのうちの１つを集合的に占めるストレージ・ブロックの絶対アドレスのリストを含む。
ストレージ・ブロック・リスト・エントリ（ＳＢＡＬＥ）は、それぞれのＳＢＡＬの一部として提供される。それぞれのＳＢＡＬＥは、ストレージ・ブロックの絶対ストレージ・アドレスを含む。集合的に、単一のＳＢＡＬのすべてのエントリによってアドレス指定されるストレージ・ブロックは、ＱＤＩＯキューの多くの考えられるＱＤＩＯバッファのうちの１つを構成する。一例では、ＱＤＩＯキューはそれに関連する１２８個のＱＤＩＯバッファを有してもよい。
ＳＬＳＢは、キューを占めるバッファについての状態情報を提供する状態インジケータを含む。
【００２９】
ＳＩＧＡ、ＱＤＩＯキュー、および関連する制御構造に関するさらなる詳細は、Baskeyら、２００１年１２月１８日発行の「Self-Contained Queues With Associated Control Information ForReceipt And Transfer Of Incoming And Outgoing Data Using A Queued DirectInput-Output Device」という表題の米国特許第６，３３２，１７１Ｂ１号、Briceら、２００２年２月５日発行の「Method And Apparatus For Simulation Of Data In a Virtual EnvironmentUsing A Queued Direct Input-Output Device」という表題の米国特許第６，３４５，２４１Ｂ１号、Markosら、２００３年２月１１日発行の「Method And Apparatus ForProviding Configuration Information Using A Queued Direct Input-Output Device」という表題の米国特許第６，５１９，６４５Ｂ２号、およびEastonら、２０１１年５月１０日発行の「Interpreting I/OOperation Requests From Pageable Guests Without Host Intervention」という表題の米国特許第７，９４１，７９９Ｂ２号に記述されている。
【００３０】
上記の処理において、送信機がデータを送信するのと同じレートで受信機が空のバッファを提供することができないとき、プロトコルの同期の性質が原因で、増大した遅延およびＣＰＵオーバーヘッドが送信機の側にもたらされる。受信機において空のバッファが利用可能でないとき、送信機は２つの選択肢を有する。送信機は、失敗した操作およびその後の同じ受信機へのデータ再送を待ち行列に入れるオーバーヘッドを通過するか、データを破棄して、ＴＣＰ／ＩＰのような上位通信プロトコルが操作を再駆動することを可能にする。データを待ち行列に入れ再送することの落とし穴は、復旧させるのに追加のＣＰＵサイクルを必要とするだけでなく、着信データを受け入れ可能な場合がある他の宛先への、送信機によるさらなる伝送を場合によってはブロックするまたは遅延させる可能性もあるということである。
【００３１】
複数のサーバ（例えば、送信機、受信機）がＣＰＵリソースを共有することができる仮想化された環境は、受信機が、受信機にデータを送信する様々な送信機に遅れずについていくことができない場合がある状況を生み出す可能性が高い。これは、典型的には、ＰＲ／ＳＭのようなハイパーバイザが様々な利用可能な共有プロセッサ上でのサーバのディスパッチを制御する場合である。送信機と共有ＣＰＵリソースの間に複数のレベルのハイパーバイザがあると、この問題は悪化する。これは、例えば、送信機がｚ／ＶＭ（Ｒ）下の仮想マシンで動作しており、仮想マシンも論理パーティションで動作しているときに当てはまる。ここで、２つのハイパーバイザは、サーバをディスパッチして、サーバが空のバッファをタイミング良く満たすことを可能にするものである。
【００３２】
利用可能な十分なＣＰＵリソースがあれば、受信機をタイミング良くディスパッチすることは問題ではない。短期間または長期間のいずれかにわたってＣＰＵリソースが制約されるようになるときのみ、同期データ転送が失敗に終わる。したがって、本発明の態様によれば、送信機は、ＣＰＵリソースが制約されるようになるときに関連する落とし穴およびオーバーヘッドを排除する一方で、制約のないＣＰＵ環境で同期低遅延データ伝送を利用することができる。これは、受信機が送信機に遅れずについていくことができないときに、通信プロトコルを同期から非同期に変換することによって達成される。一実施形態では、同期から非同期へのプロトコル変換は、送信機へのいかなるプッシュバックもなしに自動的に実行される（すなわち、送信機は、変換時にいかなる措置も実行する必要がない）。これにより、特定の受信機に対してＣＰＵリソースが制約されるようになるときに、送信機は何らかのタイプの復旧処理を行う必要も、他の受信機へのデータ伝送をブロックしたりデータ伝送の速度を落としたりする必要もなくなる。さらに、これにより、これまで制約されていた受信機への同期通信を自動的に再開することができる。
【００３３】
本発明の態様によれば、データを受信することができる空のバッファを受信機が提供するまで、送信機のメモリ内でデータを待ち行列に入れる機能が、送信機に提供される。図４を参照して記述されるように、この処理を容易にするために、１つまたは複数の制御構造が使用される。例えば、送信機は、それぞれの保留中の非同期転送について、送信機のメモリにおいてメモリ４００の空のブロックを割り振る。一例では、任意のある時点におけるこれらのブロックをＸ個とすることができ、Ｘはモデルに依存し構成可能である。Ｘは送信機によって許容される同時非同期要求の数を表す。ＱＤＩＯ（Ｑｕｅｕｅｄ  Ｄｉｒｅｃｔ  Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）非同期操作ブロック（ＱＡＯＢ）と呼ばれるメモリのこのブロックは、ファームウェアが操作を完了するまで、非同期データ転送を追跡するために使用される。ＱＡＯＢは、この例では、制御情報のみを含み、データ自体は含まない。送信機は要求に対するデータ転送を開始するときにこのブロックを提供し、任意選択で非同期的に実行することを可能にするが、そうでなければ、制御ブロックを提供する必要はない。これは、送信機が最大数の未処理の非同期要求を制御することを可能にする。データ転送が非同期的に実行されるべきであるとファームウェアが判定すると、ＱＡＯＢ自体のみがファームウェアによって使用され、初期化される。データ転送が非同期的に実行されるべきである場合、ＱＡＯＢにメモリを提供すること以外に、データ転送について送信機が行わなければならないことは何もない。
【００３４】
特定の一例では、ＱＡＯＢは要求を提供するＳＩＧＡ命令に含まれる。送信機は、ＱＡＯＢ機能による書込みを示す第１の汎用レジスタで選択された機能コードを指定する、ＱＡＯＢによるＳＩＧＡ書込み（ＳＩＧＡ−ｗｑ）命令を出す。ＱＡＯＢアドレスは、命令によって使用される第４の汎用レジスタで特定される。この汎用レジスタは、ＱＡＯＢが指定されていないときは０、またはＱＡＯＢの絶対アドレス（例えば、２５６バイトのＱＡＯＢ）のいずれかを有する。ファームウェアは、ＱＡＯＢ機能コードによる書込みが設定されたことに応答して、ＱＡＯＢが非同期データ転送で使用することができる第４の汎用レジスタで指定されるかどうかを判定する。
【００３５】
ファームウェアがデータ転送を非同期プロトコルに変更するとき、ファームウェアはＱＡＯＢを使用して、アウトバウンドデータ転送に関連する送信機のメモリに常駐するデータを追跡する。ＨｉｐｅｒＳｏｃｋｅｔｓ（商標）が伝送に使用される例では、ＱＡＯＢは、データ転送に関連するストレージ・ブロック・アドレス・リスト（ＳＢＡＬ）で送信機によって指定されたアドレスおよび制御を追跡する。ＳＢＡＬから抽出され、ＱＡＯＢに置かれるフィールドの例としては、例えば、以下のものが挙げられる。
・  ＳＢＡＬからのすべての有意義なＳＢＡＬＥ（例えば、１番目のＳＢＡＬＥから最終エントリビットセットを有するＳＢＡＬＥまで）。これは、データの絶対バッファアドレスおよびバイトカウントを含む。
・  ＳＢＡＬの出力キュー番号
・  要求を開始するＳＢＡＬのバッファ番号（例えば、１〜２７）
・  有意義なＳＢＡＬＥエントリの数
・  それぞれの有意義なＳＢＡＬＥによって指定されたストレージ・ブロックにアクセスするために使用されるストレージ・キー
【００３６】
ＱＡＯＢに加えて、完了キュー（ＣＱ）４１０と呼ばれる別の制御構造が使用される。すなわち、一例では、ＱＡＯＢを提供することに加えて、送信機は、通信キューを確立するときに、そのメモリに完了キューという新しいタイプのキューも割り振る。ＨｉｐｅｒＳｏｃｋｅｔｓ（商標）の場合、これはＳＢＡＬを有する新しいタイプのＱＤＩＯ入力キューであるが、ＳＢＡＬＥに関連するバッファがない。この新しい入力キューは、データを転送するために使用されるのではなく、完了イベントをポストして、非同期データ転送が完了したことを送信機に信号で知らせるためにファームウェアによって使用される。キューエントリが「インバウンド準備完了（inbound primed）」になると、完了イベントについての情報はＳＢＡＬＥ自体に配置され、ＳＢＡＬＥは完了キュー上に含まれる。ファームウェアは、完了した非同期データ転送に関連するＱＡＯＢのアドレスをＣＱにポストし、必要であれば、割込みを行って、送信機にデータ転送完了を信号で知らせる。この時点で、送信機は、完了した操作に関連するメモリを他の目的で再利用することができる。（一実施形態では、ＳＢＡＬＥは単一の完了イベントをポストするために使用される。ＳＢＡＬは、例えば、１６個のＳＢＡＬＥを含むので、ファームウェアは単一のＳＢＡＬ内で最大１６個の完了イベント（ＱＡＯＢ）をポストすることができる。）
【００３７】
さらに、一実施形態では、ファームウェアは、それぞれの意図された受信者において、未処理のデータ転送要求を有することを覚えておくために使用されるＴＰＱ４２０という別のキューを有する。
【００３８】
同期データ転送から非同期データ転送への変換に関するさらなる詳細について、図５〜図６を参照して記述する。図５は変換を実行するためにファームウェアによって使用される論理の一実施形態を示し、図６は変換の一例を絵画的に示す。両方の図が以下の説明で参照される。
【００３９】
図５〜図６を参照すると、最初に、ステップ５００で、ファームウェア３５０はＱＡＯＢの指標（例えば、非同期データ転送に使用され得るストレージ・ブロックのアドレス）を受信する。したがって、ファームウェア３５０は、必要な（または所望される）場合、要求されたデータ転送を非同期的に実行することができることを知っている。一実施形態では、ファームウェアは、その数までのデータ転送を非同期的に実行することができることを示す複数のＱＡＯＢを受信することができる。送信機によってＱＡＯＢを提供することは、ファームウェアが、そうすることを選んだ場合、データ転送を非同期的に実行することができるという、ファームウェアに対する事前承認である。
【００４０】
特定の一例では、ＱＡＯＢは、ステップ５０２で、送信機３００からファームウェアによって受信されたデータ転送要求の一部として含まれる。データ転送要求を受信したことに応答して、ステップ５０４で、ファームウェアはデータを受信機に送信しようと試みる。問合せ５０６で、受信機がデータを受信することができる（例えば、受信機において空のバッファがある）場合、次いで、ステップ５０８で、データが同期的に転送され、データ転送が完了する。その後、送信機は別のデータ転送を実行することができ、非同期処理が送信機によって許可される場合、送信機はＱＡＯＢを新しい要求に含めることができる。
【００４１】
しかし、受信機が現在データを受信することができない（例えば、バッファ状態によって判定されたように、受信機において空のバッファがなく、したがって、受信機がデータの受信で遅れている）場合、データ転送は、要求においてＱＡＯＢが提供されたものと想定して、ファームウェアによって同期要求から非同期要求に自動的に変換される。ステップ５１０で、要求はＱＡＯＢに保存され、ステップ５１２で、例えば、ＱＡＯＢに対するポインタをＴＰＱに置くことによって、ＱＡＯＢはその意図された宛先のＴＰＱ４２０で待ち行列に入れられる。ここで、ＱＡＯＢはＳＢＡＬの内容を含み、したがって、他の処理にＳＢＡＬを使用することができる。
【００４２】
一実施形態では、ＱＡＯＢが指定されていない場合、要求は失敗するか、要求を同期的に送信することができるまで待機する。
【００４３】
一例では、ＱＡＯＢが待ち行列に入れられたことに応答して、指定されたＱＡＯＢがこのデータ転送を非同期的に実行するために使用されているという指示によって送信サーバが制御される。次いで、送信サーバはその次のデータ転送を直ちにセットアップし、任意選択で、その後のデータ転送に必要な場合、別のＱＡＯＢを割り振ることができる。
【００４４】
次に、問合せ５１４で、受信機がデータを受信することができるかどうかについての判定が行われる。例として、ファームウェアが、受信機が現在データを受け入れることができる（例えば、現在利用可能な空のバッファがある）という信号を受信機から受信したかどうか、または、ファームウェアが、バッファの状態をチェックすることによってバッファが利用可能であると判定したかどうかについての判定が行われる。特定の一例では、受信機はＳＩＧＡ命令を使用して、その入力キューに空のバッファを置いたことをファームウェアに信号で知らせる。ＳＩＧＡ読取り（ＳＩＧＡ−ｒ）機能コードは第１の汎用レジスタで指定される。ＳＩＧＡ読取り機能は、ファームウェアに任意の保留パケットを受信機のＴＰＱからターゲットの入力バッファに転送させる。
【００４５】
受信機がデータを受け入れることができない場合、ファームウェアは待機する。そうでなく、受信機がデータを受信することができる（例えば、少なくとも１つの空のバッファがある）場合、問合せ５１６で、ファームウェアは受信機のＴＰＱにＱＡＯＢに対するポインタを有するかどうかを判定する。ポインタを有さない場合、処理は完了する。そうでなければ、ファームウェアはＱＡＯＢを使用してデータ転送を実行する。具体的には、ファームウェアはＱＡＯＢによって指し示されたデータを受信機に転送し、そのデータを空のバッファに置き、今では満たされているバッファに対するポインタを受信機の入力キューに置く。
【００４６】
その後、ステップ５２０で、ファームウェアはデータ転送の完了を送信機に示す。一例では、この指示は、完了した非同期データ転送に関連するＱＡＯＢのアドレスを送信機の完了キュー４１０（図６）にポストすること、および必要であれば、割込み５５０を行って、送信機にデータ転送完了を信号で知らせることを含む。この時点で、送信機は、完了した操作に関連するメモリを他の目的で再利用することができる。ＣＱにポストされたＱＡＯＢは、例えば、状態情報、完了コード、エラーコードなどを含む非同期処理に関する情報を含む。
【００４７】
特定の一例では、ＱＡＯＢのアドレスが完了キューエントリにポストされる（すなわち、ＱＡＯＢアドレスが完了キューのエントリに配置されたＳＢＡＬＥに含まれる）と、ファームウェアは、一例として、以下の情報をＱＡＯＢ内のプログラムに返す。
・  非同期Ｉ／Ｏ動作の結果を反映する理由コード
・  バッファ状態：非同期データ転送の「Ｓｔａｔｅ  ｏｆ  Ｑｕｅｕｅ−Ｂｕｆｆｅｒ  Ｎ（ＳＱＢＮ）」。これは同期データ転送のＳＬＳＢに置かれるものと同じ値である。ＳＱＢＮはＱＡＯＢの現在の状態を示す値を含む。状態値は、例えば、２つの部分、すなわち、バッファがプログラム・ファームウェアによって所有されているかどうかを示す第１の部分、およびＱＡＯＢの現在の処理状態を示す第２の部分を含む。
【００４８】
特定の要求が非同期的に実行されるが、特定の受信機が、例えば、データの受信で遅れていない限り、送信機から他の受信機への他の要求を同期的に実行することができる。さらに、受信機がデータの受信で遅れていると再び判定されない限り、送信機から受信機への他の要求は自動的に同期に戻る。例えば、上記に記述したように、ファームウェアはデータを受信機に送信しようと試み、受信機がデータを受信することができる場合、データは同期的に送信される。一実施形態では、伝送が同期と非同期の間で変換されても、データは伝送されたときと同じＦＩＦＯ順序のままである。ファームウェアは、受信機のＴＰＱ４２０にあるすべての待ち行列に入れられたＱＡＯＢを、任意の将来の同期要求がこの送信機または任意の他の送信機から受信される前に、転送することになる。そのＴＰＱ４２０にＱＡＯＢを既に有する受信機に対して別の同期データ転送が行われた場合、この同期データ転送は（送信機によって許可された場合）ファームウェアによって自動的に非同期要求に変換されるか、利用可能なバッファ応答がないために失敗する。順序を維持することで、コストのかかる再配列処理を回避し、受信機のＴＣＰ／ＩＰスタックの性能および全体的なＣＰＵ利用率を向上させる。
【００４９】
上記で詳細に記述されているのは、プロセッサ（例えば、ファームウェア）がそのような変換が行われるべきであると判定したことに応答して、同期データ転送から非同期データ転送に自動的に変換する機能である。例として、変換は、受信機がデータを受信することができることに遅れていること（例えば、利用可能なバッファがない、応答が遅いなど）に応答して、実行される。さらに、この機能により、同じ受信機への他の転送を自動的に同期的に実行することができる。
【００５０】
このサポートの１つまたは複数の態様は、ターゲットの宛先に対するコストのかかる再送を行うことなく、しかもネットワーク内の他の機能している宛先に対する影響を最小限に抑え、または影響を及ぼさずに、一時的なまたは長期間のデータ伝送に合わせて調整する機能を提供する。一態様では、送信機プログラムへのプッシュバックなしに、同期データ転送と非同期データ転送の間で交互に切り替える機能が提供される。ＨｉｐｅｒＳｏｃｋｅｔｓ完了キュー（ＣＱ）を使用する特定の一例では、デバイスドライバはＩ／Ｏ動作を一時停止しない（ＳＩＧＡは処理をブロックしない）。ＣＱにより、書込みプロセスは脇に置かれ、送信機がさらなる書込み（ＳＩＧＡ）を同じターゲットまたは他のターゲットに出し続けることができ、一部のものは同期的に完了することができ、他のものは非同期的に完了する。このノンブロッキング態様により、ＣＱは非同期になる。
【００５１】
本発明の態様によれば、転送が同期か非同期かにかかわらず、データは送信機から受信機に一度だけコピーされる（内部バッファなし）。
【００５２】
当業者によって理解されるように、本発明の態様は、システム、方法またはコンピュータ・プログラム製品として具体化され得る。したがって、本発明の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、またはソフトウェアの態様とハードウェアの態様を組み合わせる実施形態の形をとり得、これらすべてが本明細書において一般的に「回路」、「モジュール」または「システム」と呼ばれ得る。さらに、本発明の態様は、具体化されるコンピュータ可読プログラム・コードを有する１つまたは複数のコンピュータ可読媒体で具体化されるコンピュータ・プログラム製品の形をとり得る。
【００５３】
１つまたは複数の非一時的コンピュータ可読媒体の任意の組合せが利用され得る。コンピュータ可読媒体は、コンピュータ可読記憶媒体であってもよい。コンピュータ可読記憶媒体は、例えば、電子、磁気、光学、電磁、赤外線、または半導体システム、装置、またはデバイス、あるいは上記の任意の適切な組合せであってもよいが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な例（非網羅的なリスト）としては、１つまたは複数のワイヤを有する電気接続、携帯型コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、消去可能プログラマブル読取り専用メモリ（ＥＰＲＯＭまたはフラッシュメモリ）、光ファイバ、携帯型コンパクトディスク読取り専用メモリ（ＣＤ−ＲＯＭ）、光記憶デバイス、磁気記憶デバイス、あるいは上記の任意の適切な組合せが挙げられる。この文書の文脈では、コンピュータ可読記憶媒体は、命令実行システム、装置もしくはデバイスによって、または命令実行システム、装置もしくはデバイスに関連して使用するためのプログラムを含む、または記憶することができる任意の有形媒体であってもよい。
【００５４】
ここで図７を参照すると、一例では、コンピュータ・プログラム製品６００は、例えば、コンピュータ可読プログラム・コード手段または論理６０４を記憶して、本発明の１つまたは複数の態様を提供し、容易にするための１つまたは複数の非一時的コンピュータ可読記憶媒体６０２を含む。
【００５５】
コンピュータ可読媒体で具体化されるプログラム・コードは、無線、有線、光ファイバケーブル、ＲＦなど、または上記の任意の適切な組合せを含むがこれらに限定されない、適切な媒体を使用して伝送され得る。
【００５６】
本発明の態様に関する操作を実行するためのコンピュータ・プログラム・コードを、Ｊａｖａ（Ｒ）、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語、アセンブラまたは類似のプログラミング言語などの従来の手続きプログラミング言語を含む、１つまたは複数のプログラミング言語の任意の組合せで書くことができる。プログラム・コードは、ユーザのコンピュータで全体的に、ユーザのコンピュータで部分的に、スタンドアロン・ソフトウェア・パッケージとして、ユーザのコンピュータで部分的にかつリモート・コンピュータで部分的に、またはリモート・コンピュータもしくはサーバで全体的に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）またはワイド・エリア・ネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを介して、ユーザのコンピュータに接続され得るか、外部のコンピュータへの接続が（例えば、インターネット・サービス・プロバイダを使用してインターネットを介して）行われ得る。
【００５７】
本発明の実施形態による方法、装置（システム）およびコンピュータ・プログラム製品のフローチャートの説明図またはブロック図あるいはその両方を参照しながら、本発明の態様を本明細書において記述する。フローチャートの説明図またはブロック図あるいはその両方のそれぞれのブロック、およびフローチャートの説明図またはブロック図あるいはその両方におけるブロックの組合せを、コンピュータ・プログラム命令によって実施することができることを理解されたい。これらのコンピュータ・プログラム命令は、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサを介して実行する命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックにおいて指定された機能／行為を実施するための手段を作成するように、汎用コンピュータ、専用コンピュータ、またはマシンを作製するための他のプログラマブル・データ処理装置のプロセッサに提供され得る。
【００５８】
また、これらのコンピュータ・プログラム命令は、コンピュータ可読媒体に記憶された命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックにおいて指定された機能／行為を実施する命令を含む製造品を作製するように、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイスに特定の方法で機能するよう命令することができるコンピュータ可読媒体に記憶され得る。
【００５９】
また、コンピュータ・プログラム命令は、コンピュータまたは他のプログラマブル装置で実行する命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックにおいて指定された機能／行為を実施するためのプロセスを提供するように、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイスに読み込まれて、コンピュータによって実施されるプロセスを作製するためにコンピュータ、他のプログラマブル装置または他のデバイスで一連の操作ステップを実行させ得る。
【００６０】
図におけるフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法およびコンピュータ・プログラム製品の考えられる実装形態のアーキテクチャ、機能および動作を示す。この点において、フローチャートまたはブロック図におけるそれぞれのブロックは、（１つまたは複数の）指定された論理機能を実施するための１つまたは複数の実行可能な命令を含むモジュール、セグメントまたはコードの部分を表し得る。いくつかの代替実装形態では、ブロックに記載された機能は、図に記載された順序ではない順序で行われ得ることにも留意されたい。例えば、連続して示されている２つのブロックは、実際には、実質的に同時に実行されることがあり、またはこれらのブロックは、時として、関与する機能に応じて、逆の順序で実行されることがある。ブロック図またはフローチャートの説明図あるいはその両方のそれぞれのブロック、およびブロック図またはフローチャートの説明図あるいはその両方におけるブロックの組合せを、指定された機能または行為を実行する専用ハードウェアベース・システム、または専用ハードウェアおよびコンピュータ命令の組合せによって実施することができることにも留意されたい。
【００６１】
上記に加えて、本発明の１つまたは複数の態様を、顧客環境の管理を提案するサービス・プロバイダによって提供し、提案し、展開し、管理し、サービスすることなどができる。例えば、サービス・プロバイダは、１つまたは複数の顧客に対して本発明の１つまたは複数の態様を実行するコンピュータ・コードまたはコンピュータ・インフラあるいはその両方を作成し、維持し、サポートすることなどができる。それと引き換えに、サービス・プロバイダは、例として、加入または料金あるいはその両方の契約の下で、顧客から支払を受けることができる。加えてまたはその代わりに、サービス・プロバイダは、１つまたは複数のサードパーティへの広告コンテンツの販売から支払を受けることができる。
【００６２】
本発明の一態様では、本発明の１つまたは複数の態様を実行するためのアプリケーションが展開され得る。一例として、アプリケーションの展開は、本発明の１つまたは複数の態様を実行するように動作可能なコンピュータ・インフラを提供することを含む。
【００６３】
本発明のさらなる態様として、コンピュータ可読コードをコンピューティング・システムに統合することを含むコンピューティング・インフラを展開することができ、コンピューティング・システムと組み合わされたコードは本発明の１つまたは複数の態様を実行することができる。
【００６４】
本発明のさらなる態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含むコンピューティング・インフラを統合するためのプロセスが提供され得る。コンピュータ・システムはコンピュータ可読媒体を含み、コンピュータ媒体は本発明の１つまたは複数の態様を含む。コンピュータ・システムと組み合わされたコードは、本発明の１つまたは複数の態様を実行することができる。
【００６５】
様々な実施形態が上記で記述されているが、これらは例にすぎない。例えば、他のアーキテクチャのコンピューティング環境は、本発明の１つまたは複数の態様を組み込み、使用することができる。例として、ｚＥｎｔｅｒｐｒｉｓｅサーバ以外のサーバは、本発明の１つまたは複数の態様を含み、これを使用し、またはそれから利益を得るか、あるいはそれらのすべてを行うことができる。さらに、同期から非同期への変換は、バッファが利用可能であるかどうか以外の考慮事項に応答したものであってもよい。さらに、本発明の１つまたは複数の態様を、隔離されたメモリ空間の間での任意のメモリ間転送に使用することができる。多くの他の変形形態も可能である。
【００６６】
さらに、他のタイプのコンピューティング環境は、本発明の１つまたは複数の態様から利益を得ることができる。例として、システムバスを介してメモリ要素に直接または間接的に結合された少なくとも２つのプロセッサを含む、プログラム・コードを記憶するまたは実行するあるいはその両方を行うのに適したデータ処理システムが使用可能である。メモリ要素は、例えば、プログラム・コードの実際の実行中に用いられるローカルメモリ、バルクストレージ、および実行中にコードをバルクストレージから取り出さなければならない回数を低減するために少なくとも一部のプログラム・コードの一時的なストレージを提供するキャッシュメモリを含む。
【００６７】
入力／出力またはＩ／Ｏデバイス（キーボード、ディスプレイ、ポインティング・デバイス、ＤＡＳＤ、テープ、ＣＤ、ＤＶＤ、サムドライブおよび他のメモリ媒体などを含むが、これらに限定されない）を直接または介在するＩ／Ｏコントローラを介してシステムに結合することができる。また、ネットワーク・アダプタをシステムに結合して、データ処理システムが介在するプライベート・ネットワークまたは公共ネットワークを介して他のデータ処理システムまたはリモート・プリンタもしくはストレージ・デバイスに結合されるようになることを可能にすることができる。モデム、ケーブルモデム、およびイーサネット（Ｒ）カードは利用可能なタイプのネットワーク・アダプタのいくつかにすぎない。
【００６８】
図８を参照すると、本発明の１つまたは複数の態様を実施するためのホスト・コンピュータ・システム５０００の代表的な構成要素が図示されている。代表的なホスト・コンピュータ５０００は、コンピュータ・メモリ（すなわち、中央ストレージ）５００２と通信する１つまたは複数のＣＰＵ５００１、ならびに記憶媒体デバイス５０１１および他のコンピュータまたはＳＡＮなどと通信するためのネットワーク５０１０へのＩ／Ｏインターフェースを含む。ＣＰＵ５００１は、アーキテクチャ化された命令セットおよびアーキテクチャ化された機能を有するアーキテクチャに準拠している。ＣＰＵ５００１は、プログラムアドレス（仮想アドレス）をメモリの実際のアドレスに変換するための動的アドレス変換（ＤＡＴ）５００３を有し得る。ＤＡＴは、典型的には、コンピュータ・メモリ５００２のブロックへの後のアクセスでアドレス変換の遅延がなくて済むように、変換をキャッシュするための変換ルックアサイド・バッファ（ＴＬＢ）５００７を含む。典型的には、コンピュータ・メモリ５００２とプロセッサ５００１の間でキャッシュ５００９が用いられる。キャッシュ５００９は、２つ以上のＣＰＵで利用可能な大型キャッシュ、および大型キャッシュとそれぞれのＣＰＵの間のより小型で高速の（下位）キャッシュを有する階層型であってもよい。いくつかの実装形態では、下位キャッシュが分割されて、命令フェッチおよびデータアクセスのための別個の下位キャッシュを提供する。一実施形態では、命令は、キャッシュ５００９を介して命令フェッチ・ユニット５００４によってメモリ５００２からフェッチされる。命令は、命令デコード・ユニット５００６でデコードされ、（いくつかの実施形態では、他の命令によって）１つまたは複数の命令実行ユニット５００８にディスパッチされる。典型的には、いくつかの実行ユニット５００８、例えば、演算実行ユニット、浮動小数点実行ユニットおよび分岐命令実行ユニットが用いられる。命令は実行ユニットによって実行され、必要に応じて、命令が指定したレジスタまたはメモリからオペランドにアクセスする。メモリ５００２からオペランドにアクセスする（オペランドを読み込むまたは記憶する）場合、典型的には、読込み／記憶ユニット５００５が実行中の命令の制御下でアクセスを処理する。命令は、ハードウェア回路でもしくは内部マイクロコード（ファームウェア）でまたはその両方の組合せによって実行され得る。
【００６９】
述べたように、コンピュータ・システムは、ローカル（または主）ストレージにおける情報、ならびにアドレス指定、保護、および参照や変更の記録を含む。アドレス指定のいくつかの態様は、アドレスの形式、アドレス空間の概念、様々なタイプのアドレス、およびあるタイプのアドレスを別のタイプのアドレスに変換する方法を含む。主ストレージの一部は、恒久的に割り当てられたストレージ位置を含む。主ストレージは、システムに、データの直接アドレス指定可能な高速アクセス・ストレージを提供する。データおよびプログラムを処理することができるようになる前に、（入力デバイスから）データおよびプログラムの両方を主ストレージに読み込まなければならない。
【００７０】
主ストレージは、時としてキャッシュと呼ばれる、１つまたは複数のより小型でより高速なアクセス・バッファ・ストレージを含み得る。キャッシュは、典型的には、ＣＰＵまたはＩ／Ｏプロセッサに物理的に関連付けられる。物理的な構造および別々の記憶媒体を使用することの影響は、性能に対するものを除き、一般的に、プログラムによって観察することはできない。
【００７１】
命令およびデータ・オペランドについて、別個のキャッシュを維持することができる。キャッシュ内の情報は、キャッシュ・ブロックまたはキャッシュ・ライン（または略してライン）と呼ばれる整数境界上の連続したバイトに維持される。モデルは、キャッシュ・ラインのサイズをバイト単位で返すＥＸＴＲＡＣＴ  ＣＡＣＨＥ  ＡＴＴＲＩＢＵＴＥ命令を提供し得る。また、モデルはデータまたは命令キャッシュへのストレージのプリフェッチまたはキャッシュからのデータの解放に影響を与えるＰＲＥＦＥＴＣＨ  ＤＡＴＡ命令およびＰＲＥＦＥＴＣＨ  ＤＡＴＡ  ＲＥＬＡＴＩＶＥ  ＬＯＮＧ命令を提供し得る。
【００７２】
ストレージは、長い水平方向のビットの文字列とみなされる。大半の操作の場合、ストレージへのアクセスは、左から右への順序で進む。ビットの文字列は、８ビットの単位で分割される。８ビットの単位は１バイトと呼ばれ、これはすべての情報形式の基本的な構成要素（building block）である。ストレージ内のそれぞれのバイト位置は一意の負でない整数によって識別され、この整数はそのバイト位置のアドレスまたは単純にバイトアドレスである。隣接するバイト位置は連続アドレスを有し、左の０で始まり、左から右への順序で進む。アドレスは符号なし２進整数であり、２４ビット、３１ビットまたは６４ビットである。
【００７３】
情報は、ストレージとＣＰＵまたはチャネルサブシステムの間で、一度に１バイトずつ、または１バイト・グループずつ伝送される。別途指定されない限り、例えば、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）では、ストレージ内のバイト・グループはグループの左端のバイトによってアドレス指定される。グループ内のバイトの数は、実行される操作によって暗示されるか、明示的に指定される。ＣＰＵ操作で使用されるとき、バイト・グループはフィールドと呼ばれる。それぞれのバイト・グループ内で、例えば、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）では、ビットは左から右の順序で番号が付けられる。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）では、左端のビットは時として「高位」ビットと呼ばれ、右端のビットは「低位」ビットと呼ばれる。ただし、ビット数はストレージ・アドレスではない。バイトのみをアドレス指定することができる。ストレージ内のバイトの個々のビットに対して操作するためには、バイト全体にアクセスする。１バイト内のビットには、（例えば、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）では）左から右に０から７までの番号が付けられる。１つのアドレス内のビットには、２４ビット・アドレスの場合は８〜３１または４０〜６３の番号を付けることができ、あるいは３１ビット・アドレスの場合は１〜３１または３３〜６３の番号を付けることができ、６４ビット・アドレスの場合は０〜６３の番号が付けられる。複数バイトの任意の他の固定長形式内では、その形式を形成するビットには、０から始まる連続した番号が付けられる。誤り検出の目的で、また、好ましくは訂正のために、１つまたは複数のチェックビットをそれぞれのバイトまたはバイト・グループとともに伝送することができる。そのようなチェックビットはマシンによって自動的に生成され、プログラムが直接制御することはできない。ストレージ容量はバイト数で表される。ストレージ・オペランド・フィールドの長さが命令の操作コードによって暗示されるとき、フィールドは固定長を有すると言われ、固定長は１バイト、２バイト、４バイト、８バイトまたは１６バイトとすることができる。命令によっては、より大きいフィールドが暗示され得る。ストレージ・オペランド・フィールドの長さが暗示されず明示的に述べられるとき、フィールドは可変長を有すると言われる。可変長オペランドは１バイトずつ（または命令によっては、２バイトの倍数もしくは他の倍数で）長さを変えることができる。情報がストレージに置かれると、ストレージへの物理パスの幅が記憶されるフィールドの長さよりも大きい場合でも、指定されたフィールドに含まれるこれらのバイト位置の内容のみが置き換えられる。
【００７４】
特定の情報単位は、ストレージ内の整数境界上になければならない。そのストレージ・アドレスがバイトでの単位の長さの倍数であるとき、境界は、情報単位に関して整数のものであると言われる。整数境界上にある２バイト、４バイト、８バイト、および１６バイトのフィールドには、特別な名称が与えられる。ハーフワード（halfword）は、２バイト境界上にある２個の連続したバイトのグループであり、命令の基本的な構成要素である。ワード（word）は、４バイト境界上にある４個の連続したバイトのグループである。ダブルワード（doubleword）は、８バイト境界上にある８個の連続したバイトのグループである。クワドワード（quadword）は、１６バイト境界上にある１６個の連続したバイトのグループである。ストレージ・アドレスが、ハーフワード、ワード、ダブルワード、およびクワドワードを示す場合、そのアドレスの２進表現は、それぞれ、右端の１個、２個、３個、または４個のゼロビットを含む。命令は、２バイトの整数境界上になければならない。大半の命令のストレージ・オペランドは、境界合わせ（boundary-alignment）要件を有さない。
【００７５】
命令およびデータ・オペランドの別個のキャッシュを実施するデバイスでは、ストアが後にフェッチされる命令を変更するかどうかに関係なく、後に命令をフェッチするキャッシュ・ライン内にプログラムが格納する場合には、著しい遅延が生じることがある。
【００７６】
一実施形態では、本発明はソフトウェア（時として、ライセンス内部コード、ファームウェア、マイクロコード、ミリコード、ピココードなどと呼ばれ、それらのいずれも本発明の１つまたは複数の態様と整合性がある）によって実施され得る。図８を参照すると、本発明の１つまたは複数の態様を具体化するソフトウェア・プログラム・コードは、ＣＤ−ＲＯＭドライブ、テープドライブまたはハードライブなどの長期記憶媒体デバイス５０１１から、ホストシステム５０００のプロセッサ５００１によってアクセスされ得る。ソフトウェア・プログラム・コードは、ディスケット、ハードドライブ、またはＣＤ−ＲＯＭなどの、データ処理システムとともに使用するための様々な知られている媒体のいずれかの上で具体化され得る。コードは、そのような媒体上に分散させてもよく、またはコンピュータ・メモリ５００２からユーザに分散させるか、そのような他のシステムのユーザが使用するために、ネットワーク５０１０上の１つのコンピュータ・システムのストレージから他のコンピュータ・システムに分散させてもよい。
【００７７】
ソフトウェア・プログラム・コードは、様々なコンピュータ構成要素および１つまたは複数のアプリケーション・プログラムの機能および相互作用を制御するオペレーティングシステムを含む。プログラム・コードは、通常、記憶媒体デバイス５０１１から比較的高速なコンピュータ・ストレージ５００２にページングされ、そこでプロセッサ５００１による処理に利用可能になる。ソフトウェア・プログラム・コードをメモリ内、物理媒体上で具体化するまたはネットワークを介してソフトウェア・コードを分散するあるいはその両方を行う技術および方法はよく知られており、本明細書ではさらに論じない。プログラム・コードは、有形媒体（電子メモリ・モジュール（ＲＡＭ）、フラッシュメモリ、コンパクトディスク（ＣＤ）、ＤＶＤ、磁気テープなどを含むが、これらに限定されない）上で作成され、記憶されるとき、「コンピュータ・プログラム製品」と呼ばれることが多い。コンピュータ・プログラム製品媒体は、処理回路によって実行するために、好ましくはコンピュータ・システム内の処理回路によって典型的には読取り可能である。
【００７８】
図９は、本発明の１つまたは複数の態様が実施され得る代表的なワークステーションまたはサーバ・ハードウェア・システムを示す。図９のシステム５０２０は、任意選択の周辺デバイスを含む、パーソナルコンピュータ、ワークステーション、またはサーバなどの代表的なベース・コンピュータ・システム５０２１を含む。ベース・コンピュータ・システム５０２１は、１つまたは複数のプロセッサ５０２６と、知られている技術に従って（１つまたは複数の）プロセッサ５０２６とシステム５０２１の他の構成要素を接続し、これらの間の通信を可能にするために用いられるバスとを含む。バスは、プロセッサ５０２６を、メモリ５０２５および、例えばハードドライブ（例えば、磁気媒体、ＣＤ、ＤＶＤ、およびフラッシュメモリのいずれかを含む）またはテープドライブを含むことができる長期ストレージ５０２７に接続する。また、システム５０２１はユーザ・インターフェース・アダプタを含むことができ、ユーザ・インターフェース・アダプタは、バスを介して、マイクロプロセッサ５０２６を、キーボード５０２４、マウス５０２３、プリンタ／スキャナ５０３０、またはタッチ・センシティブ・スクリーン、デジタル化された入力パッドなどの任意のユーザ・インターフェース・デバイスとすることができる他のインターフェース・デバイスあるいはそれらすべてなどの、１つまたは複数のインターフェース・デバイスに接続する。また、バスは、ディスプレイ・アダプタを介して、ＬＣＤスクリーンまたはモニタなどのディスプレイ・デバイス５０２２をマイクロプロセッサ５０２６に接続する。
【００７９】
システム５０２１は、ネットワーク５０２９と通信する５０２８ことができるネットワーク・アダプタを介して、他のコンピュータまたはコンピュータのネットワークと通信することができる。例示的なネットワーク・アダプタは、通信チャネル、トークンリング、イーサネット（Ｒ）またはモデムである。あるいは、システム５０２１はＣＤＰＤ（セルラー・デジタル・パケット・データ）カードなどの無線インターフェースを使用して通信することができる。システム５０２１をローカル・エリア・ネットワーク（ＬＡＮ）またはワイド・エリア・ネットワーク（ＷＡＮ）内のそのような他のコンピュータと関連付けることができ、または、システム５０２１は別のコンピュータなどとのクライアント／サーバ構成におけるクライアントとすることができる。これらの構成のすべて、ならびに適切な通信ハードウェアおよびソフトウェアは、当技術分野において知られている。
【００８０】
図１０は、本発明の１つまたは複数の態様が実施され得るデータ処理ネットワーク５０４０を示す。データ処理ネットワーク５０４０は、それぞれが複数の個々のワークステーション５０４１、５０４２、５０４３、５０４４を含むことができる、無線ネットワークおよび有線ネットワークなどの複数の個々のネットワークを含み得る。さらに、当業者であれば理解するように、１つまたは複数のＬＡＮを含めることができ、ＬＡＮは、ホスト・プロセッサに結合された複数のインテリジェント・ワークステーションを含み得る。
【００８１】
さらに図１０を参照すると、ネットワークは、ゲートウェイ・コンピュータ（クライアント・サーバ５０４６）またはアプリケーション・サーバ（データ・リポジトリにアクセスすることができ、かつ、ワークステーション５０４５から直接アクセスすることもできるリモート・サーバ５０４８）などのメインフレーム・コンピュータまたはサーバを含むこともできる。ゲートウェイ・コンピュータ５０４６は、それぞれの個々のネットワークへの入口点として働く。ゲートウェイは、あるネットワーキング・プロトコルを別のネットワーキング・プロトコルに接続するときに必要とされる。ゲートウェイ５０４６を、通信リンクによって別のネットワーク（例えば、インターネット５０４７）に結合することができることが好ましい。ゲートウェイ５０４６を、通信リンクを使用して１つまたは複数のワークステーション５０４１、５０４２、５０４３、５０４４に直接結合することもできる。ゲートウェイ・コンピュータは、インターナショナル・ビジネス・マシーンズ・コーポレーションから入手可能なＩＢＭ  ｅＳｅｒｖｅｒ（商標）Ｓｙｓｔｅｍ  ｚ（Ｒ）サーバを利用して実装され得る。
【００８２】
図９および図１０を同時に参照すると、本発明の１つまたは複数の態様を具体化することができるソフトウェア・プログラミング・コードは、ＣＤ−ＲＯＭドライブまたはハードドライブなどの長期記憶媒体５０２７から、システム５０２０のプロセッサ５０２６によってアクセスされ得る。ソフトウェア・プログラミング・コードは、ディスケット、ハードドライブ、またはＣＤ−ＲＯＭなどの、データ処理システムとともに使用するための様々な知られている媒体のいずれかの上で具体化され得る。コードは、そのような媒体上に分散させてもよく、またはメモリからユーザ５０５０、５０５１に分散させるか、そのような他のシステムのユーザが使用するために、ネットワーク上の１つのコンピュータ・システムのストレージから他のコンピュータ・システムに分散させてもよい。
【００８３】
あるいは、プログラミング・コードをメモリ５０２５で具体化し、プロセッサ・バスを使用してプロセッサ５０２６によってアクセスすることができる。そのようなプログラミング・コードは、様々なコンピュータ構成要素および１つまたは複数のアプリケーション・プログラム５０３２の機能および相互作用を制御するオペレーティング・システムを含む。プログラム・コードは、通常、記憶媒体５０２７から高速メモリ５０２５にページングされ、そこでプロセッサ５０２６による処理に利用可能になる。ソフトウェア・プログラミング・コードをメモリ内、物理媒体上で具体化するまたはネットワークを介してソフトウェア・コードを分散するあるいはその両方を行う技術および方法はよく知られており、本明細書ではさらに論じない。プログラム・コードは、有形媒体（電子メモリ・モジュール（ＲＡＭ）、フラッシュメモリ、コンパクトディスク（ＣＤ）、ＤＶＤ、磁気テープなどを含むが、これらに限定されない）上で作成され、記憶されるとき、「コンピュータ・プログラム製品」と呼ばれることが多い。コンピュータ・プログラム製品媒体は、処理回路によって実行するために、好ましくはコンピュータ・システム内の処理回路によって典型的には読取り可能である。
【００８４】
プロセッサが最も容易に利用できるキャッシュ（通常、プロセッサの他のキャッシュよりも高速で小さい）は、最下位（Ｌ１またはレベル１）キャッシュであり、主ストア（主メモリ）は最上位キャッシュ（３つのレベルがある場合はＬ３）である。最下位レベルのキャッシュは、実行されるマシン命令を保持する命令キャッシュ（Ｉ−キャッシュ）と、データ・オペランドを保持するデータ・キャッシュ（Ｄ−キャッシュ）とに分割されることが多い。
【００８５】
図１１を参照すると、プロセッサ５０２６についての例示的なプロセッサ実施形態が示されている。典型的には、プロセッサ性能を向上させるために、１つまたは複数のレベルのキャッシュ５０５３を用いてメモリ・ブロックをバッファに入れる。キャッシュ５０５３は、使用される可能性が高いメモリ・データのキャッシュ・ラインを保持する高速バッファである。典型的なキャッシュ・ラインは、６４バイト、１２８バイト、または２５６バイトのメモリ・データである。データをキャッシュに入れるのではなく、命令をキャッシュに入れるために、別個のキャッシュが用いられることが多い。キャッシュ・コヒーレンス（メモリおよびキャッシュ内のラインのコピーの同期）は、当技術分野においてよく知られている様々な「スヌープ」アルゴリズムによって提供されることが多い。プロセッサ・システムの主メモリ・ストレージ５０２５は、キャッシュと呼ばれることが多い。４つのレベルのキャッシュ５０５３を有するプロセッサ・システムでは、主ストレージ５０２５は、典型的にはより高速であるので、時としてレベル５（Ｌ５）のキャッシュと呼ばれ、コンピュータ・システムが利用できる不揮発性ストレージ（ＤＡＳＤ、テープなど）の一部のみを保持する。主ストレージ５０２５は、オペレーティング・システムによって主ストレージ５０２５との間でページングされるデータのページを「キャッシュに入れる」。
【００８６】
プログラム・カウンタ（命令カウンタ）５０６１は、実行される現行の命令のアドレスを追跡する。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）プロセッサ内のプログラム・カウンタは６４ビットであり、従来のアドレッシング制限をサポートするために、３１ビットまたは２４ビットに切り捨てることができる。プログラム・カウンタは、典型的には、コンテキスト・スイッチ中に持続するように、コンピュータのＰＳＷ（プログラム状況ワード）内で具体化される。したがって、例えば、オペレーティング・システムによって、プログラム・カウンタ値を有する進行中のプログラムに割り込むことができる（プログラム環境からオペレーティング・システム環境へのコンテキスト・スイッチ）。プログラムのＰＳＷは、プログラムがアクティブでない間、プログラム・カウンタ値を維持し、オペレーティング・システムが実行している間、オペレーティング・システムの（ＰＳＷ内の）プログラム・カウンタが使用される。典型的には、プログラム・カウンタは、現行の命令のバイト数に等しい量だけインクリメントされる。ＲＩＳＣ（Reduced Instruction Set Computing、縮小命令セットコンピューティング）命令は、典型的には固定長であり、ＣＩＳＣ（Complex Instruction Set Computing、複合命令セットコンピューティング）命令は、典型的には可変長である。ＩＢＭ  ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）の命令は、２バイト、４バイト、または６バイトの長さを有するＣＩＳＣ命令である。例えば、プログラム・カウンタ５０６１は、コンテキスト・スイッチ操作または分岐命令の分岐成立（branch taken）操作によって変更される。コンテキスト・スイッチ操作では、現行のプログラム・カウンタ値は、実行されるプログラムについての他の状態情報（条件コードなど）とともにプログラム状況ワードに保存され、実行される新しいプログラムモジュールの命令を指し示す新しいプログラム・カウンタ値が読み込まれる。分岐命令の結果をプログラム・カウンタ５０６１に読み込むことによって、プログラムが判断を下すことまたはプログラム内でループすることを可能にするために、分岐成立操作が実行される。
【００８７】
典型的には、プロセッサ５０２６の代わりに命令をフェッチするために、命令フェッチ・ユニット５０５５が用いられる。フェッチ・ユニットは、「次の順次命令」、分岐成立命令のターゲット命令、またはコンテキスト・スイッチの後のプログラムの最初の命令のいずれかをフェッチする。現代の命令フェッチ・ユニットは、プリフェッチされた命令を使用することができる可能性に基づいて、命令を投機的に（speculatively）プリフェッチするプリフェッチ技術を用いることが多い。例えば、フェッチ・ユニットは、次の順次命令を含む１６バイトの命令と、付加的なバイトのさらなる順次命令とをフェッチすることができる。
【００８８】
次いで、フェッチされた命令が、プロセッサ５０２６によって実行される。実施形態では、（１つまたは複数の）フェッチされた命令は、フェッチ・ユニットのディスパッチ・ユニット５０５６に渡される。ディスパッチ・ユニット５０５６は（１つまたは複数の）命令をデコードし、（１つまたは複数の）デコードされた命令についての情報を適切なユニット５０５７、５０５８、５０６０に転送する。実行ユニット５０５７は、典型的には、命令フェッチ・ユニット５０５５からデコードされた算術命令についての情報を受信し、命令のオペコードに従ってオペランドに関する算術演算を実行することになる。オペランドは、好ましくは、メモリ５０２５、アーキテクチャ化レジスタ５０５９、または実行される命令の即値フィールドのいずれかから、実行ユニット５０５７に提供される。実行の結果は、記憶される場合には、メモリ５０２５、レジスタ５０５９、または他のマシン・ハードウェア（制御レジスタ、ＰＳＷレジスタなど）内に記憶される。
【００８９】
プロセッサ５０２６は、典型的には、命令の機能を実行するための１つまたは複数のユニット５０５７、５０５８、５０６０を有する。図１２を参照すると、実行ユニット５０５７は、インターフェース論理５０７１を介して、アーキテクチャ化汎用レジスタ５０５９、デコード／ディスパッチ・ユニット５０５６、読込み／記憶ユニット５０６０、および他５０６５のプロセッサ・ユニットと通信することができる。実行ユニット５０５７は、いくつかのレジスタ回路５０６７、５０６８、５０６９を用いて、算術論理ユニット（ＡＬＵ）５０６６が動作することになる情報を保持することができる。ＡＬＵは、加算（add）、減算（subtract）、乗算（multiply）、および除算（divide）などの算術演算、ならびに、論理積（and）、論理和（or）、および排他的論理和（XOR）、ローテート（rotate）およびシフト（shift）などの論理関数を実行する。ＡＬＵは、設計に依存する専用の演算をサポートすることが好ましい。他の回路は、例えば条件コードおよびリカバリーサポート論理を含む、他のアーキテクチャ化ファシリティ５０７２を提供することができる。典型的には、ＡＬＵ演算の結果は、出力レジスタ回路５０７０に保持され、出力レジスタ回路５０７０は、結果を様々な他の処理機能に転送することができる。プロセッサ・ユニットの多数の構成が存在し、本説明は、一実施形態の代表的な理解を与えることのみを意図している。
【００９０】
ＡＤＤ命令は、例えば、算術および論理機能を有する実行ユニット５０５７で実行されるが、浮動小数点命令は、例えば、特化された浮動小数点能力を有する浮動小数点実行部で実行される。実行ユニットは、オペランドに対してオペコードが定めた関数を実行することにより、命令が識別したオペランドに対して動作することが好ましい。例えば、ＡＤＤ命令は、命令のレジスタ・フィールドによって特定された２つのレジスタ５０５９内に見出されるオペランドに対して、実行ユニット５０５７により実行することができる。
【００９１】
実行ユニット５０５７は、２つのオペランドに対して算術加算を実行し、結果を第３のオペランドに記憶し、ここで、第３のオペランドは、第３のレジスタまたは２つのソースレジスタのうちの１つであってもよい。実行ユニットは、シフト、ローテート、論理積、論理和および排他的論理和などの様々な論理関数、ならびに、加算、減算、乗算、除算のいずれかを含む様々な代数関数を実行することができる算術論理ユニット（ＡＬＵ）５０６６を利用することが好ましい。スカラー演算のために設計されたＡＬＵ５０６６もあり、浮動小数点のために設計されたＡＬＵ５０６６もある。データは、アーキテクチャに応じて、ビッグエンディアン（Big Endian）（最下位バイトが最も高いバイトアドレスである）、またはリトルエンディアン（Little Endian）（最下位バイトが最も低いバイトアドレスである）とすることができる。ＩＢＭ  ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）はビッグエンディアンである。符号付きフィールドは、アーキテクチャに応じて、符号および大きさ、１の補数または２の補数とすることができる。２の補数における負の値または正の値は、ＡＬＵ内で加算しか必要としないため、ＡＬＵが減算能力を設計する必要がないという点で、２の補数は有利である。数は、通常、省略表現で記述され、１２ビット・フィールドは、４，０９６バイトブロックのアドレスを定め、通常、例えば４Ｋバイト（キロバイト）ブロックと記述される。
【００９２】
図１３を参照すると、分岐命令を実行するための分岐命令情報が、典型的には、分岐ユニット５０５８に送信され、分岐ユニット５０５８は、分岐履歴テーブル５０８２などの分岐予測アルゴリズムを用いて、他の条件付き演算が完了する前に分岐の結果を予測することが多い。条件付き演算が完了する前に、現行の分岐命令のターゲットがフェッチされ、投機的に実行されることになる。条件付き演算が完了すると、投機的に実行された分岐命令は、条件付き演算の条件および投機された結果に基づいて、完了されるかまたは破棄される。典型的な分岐命令は、条件コードを試験し、条件コードが分岐命令の分岐要件を満たす場合、ターゲット・アドレスに分岐することができ、ターゲット・アドレスは、例えば、命令のレジスタ・フィールドまたは即値フィールド内に見出されるものを含むいくつかの数に基づいて計算することができる。分岐ユニット５０５８は、複数の入力レジスタ回路５０７５、５０７６、５０７７と、出力レジスタ回路５０８０とを有するＡＬＵ５０７４を用いることができる。分岐ユニット５０５８は、例えば、汎用レジスタ５０５９、デコード・ディスパッチ・ユニット５０５６または他の回路５０７３と通信することができる。
【００９３】
例えば、オペレーティング・システムによって開始されるコンテキスト・スイッチ、コンテキスト・スイッチを発生させるプログラム例外もしくはエラー、コンテキスト・スイッチを発生させるＩ／Ｏ割込み信号、または（マルチスレッド環境における）複数のプログラムのマルチスレッド活動を含む様々な理由により、命令のグループの実行に割込みがかけられることがある。コンテキスト・スイッチ動作は、現在実行中のプログラムについての状態情報を保存し、次いで、起動される別のプログラムについての状態情報を読み込むことが好ましい。状態情報は、例えば、ハードウェア・レジスタまたはメモリ内に保存することができる。状態情報は、実行される次の命令を指し示すプログラム・カウンタ値、条件コード、メモリ変換情報、およびアーキテクチャ化されたレジスタの内容を含むことが好ましい。コンテキスト・スイッチの活動は、ハードウェア回路、アプリケーション・プログラム、オペレーティング・システム・プログラム、またはファームウェア・コード（マイクロコード、ピココードまたはライセンス内部コード（ＬＩＣ））を単独でまたは組み合わせて実施することができる。
【００９４】
プロセッサは、命令により定められた方法に従ってオペランドにアクセスする。命令は、命令の一部の値を使用して即値オペランドを提供することができ、汎用レジスタまたは専用レジスタ（例えば、浮動小数点レジスタ）のいずれかを明示的に指し示す１つまたは複数のレジスタ・フィールドを提供することができる。命令は、オペコード・フィールドによって、オペランドとして識別されるインプライド・レジスタ（implied register）を利用することができる。命令は、オペランドのためのメモリ位置を利用することができる。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）の長変位ファシリティ（long displacement facility）によって例示されるように、オペランドのメモリ位置を、レジスタ、即値フィールド、またはレジスタと即値フィールドの組合せによって与えることができ、命令は、基底レジスタ、指標レジスタ、および即値フィールド（変位フィールド）を定め、これらが、例えば一緒に加算されてメモリ内のオペランドのアドレスをもたらす。本明細書における位置は、通常は、別段の指示がない限り、主メモリ（主ストレージ）内の位置を意味する。
【００９５】
図１４を参照すると、プロセッサは読込み／記憶ユニット５０６０を使用してストレージにアクセスする。読込み／記憶ユニット５０６０は、メモリ５０５３内のターゲット・オペランドのアドレスを取得し、オペランドをレジスタ５０５９または別のメモリ５０５３の位置に読み込むことによって読込み操作を実行することができ、または、メモリ５０５３内のターゲット・オペランドのアドレスを取得し、レジスタ５０５９または別のメモリ５０５３の位置から取得したデータをメモリ５０５３内のターゲット・オペランド位置に記憶することによって、記憶操作を実行することができる。読込み／記憶ユニット５０６０は、投機的なものであってもよく、命令シーケンスに対してアウト・オブ・オーダー式の順序でメモリにアクセスすることができるが、読込み／記憶ユニット５０６０は、プログラムに対して、命令がイン・オーダー式に実行されたという外観を維持する必要がある。読込み／記憶ユニット５０６０は、汎用レジスタ５０５９、デコード／ディスパッチ・ユニット５０５６、キャッシュ／メモリ・インターフェース５０５３、または他の要素５０８３と通信することができ、ストレージ・アドレスを計算し、かつ、パイプライン・シーケンシングを行って操作をイン・オーダー式に保持するための、様々なレジスタ回路、ＡＬＵ５０８５、および制御論理５０９０を含む。いくつかの動作は、アウト・オブ・オーダー式とすることができるが、読込み／記憶ユニットは、アウト・オブ・オーダー式動作が、プログラムに対して、当技術分野においてよく知られているようにイン・オーダー式に実行されたように見えるようにする機能を提供する。
【００９６】
好ましくは、アプリケーション・プログラムが「見ている」アドレスは、仮想アドレスと呼ばれることが多い。仮想アドレスは、時として「論理アドレス」および「実効アドレス」と呼ばれる。これらの仮想アドレスは、単に仮想アドレスをオフセット値にプリフィックス付加すること、１つまたは複数の変換テーブルを介して仮想アドレスを変換することを含むがこれらに限定されない、様々な動的アドレス変換（ＤＡＴ）技術のうちの１つによって、物理メモリ位置にリダイレクトされるという点で仮想のものであり、変換テーブルは、少なくともセグメント・テーブルおよびページ・テーブルを単独でまたは組み合わせて含むことが好ましく、セグメント・テーブルは、ページ・テーブルを指し示すエントリを有することが好ましい。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）では、領域第１テーブル、領域第２テーブル、領域第３テーブル、セグメント・テーブル、および任意選択のページ・テーブルを含む、変換の階層が提供される。アドレス変換の性能は、仮想アドレスを関連した物理メモリ位置にマッピングするエントリを含む変換ルックアサイド・バッファ（ＴＬＢ）を利用することによって改善されることが多い。ＤＡＴが変換テーブルを使用して仮想アドレスを変換したときに、エントリが作成される。次いで、後に仮想アドレスを用いることで、低速の順次変換テーブル・アクセスではなく、高速のＴＬＢのエントリを利用することができる。ＴＬＢの内容は、ＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）を含む様々な置換アルゴリズムによって管理され得る。
【００９７】
プロセッサがマルチプロセッサ・システムのプロセッサである場合、それぞれのプロセッサは、コヒーレンシのために、Ｉ／Ｏ、キャッシュ、ＴＬＢ、およびメモリなどの共有リソースをインターロック状態に保持する責任を負う。典型的には、キャッシュ・コヒーレンシを維持する際に、「スヌープ」技術が利用される。スヌープ環境では、共有を容易にするために、それぞれのキャッシュ・ラインを、共有状態、排他的状態、変更状態、無効状態などのいずれか１つの状態にあるものとしてマーク付けすることができる。
【００９８】
Ｉ／Ｏユニット５０５４（図１１）は、プロセッサに、例えば、テープ、ディスク、プリンタ、ディスプレイ、およびネットワークを含む周辺デバイスに取り付けるための手段を提供する。Ｉ／Ｏユニットは、ソフトウェア・ドライバによってコンピュータ・プログラムに提示されることが多い。ＩＢＭ（Ｒ）のＳｙｓｔｅｍ  ｚ（Ｒ）などのメインフレームでは、チャネル・アダプタおよびオープン・システム・アダプタが、オペレーティング・システムと周辺デバイスの間で通信を提供するメインフレームのＩ／Ｏユニットである。
【００９９】
さらに、他のタイプのコンピューティング環境は、本発明の１つまたは複数の態様から利益を得ることができる。例として、環境はエミュレータ（例えば、ソフトウェアまたは他のエミュレーション機構）を含むことができ、エミュレータでは、特定のアーキテクチャ（例えば、命令実行、アドレス変換などのアーキテクチャ化された機能、およびアーキテクチャ化レジスタを含む）またはそのサブセットが（例えば、プロセッサおよびメモリを有するネイティブ・コンピュータ・システム上で）エミュレートされる。そのような環境では、エミュレータの１つまたは複数のエミュレーション機能は、エミュレータを実行するコンピュータがエミュレートされる機能とは異なるアーキテクチャを有し得る場合でも、本発明の１つまたは複数の態様を実施することができる。一例として、エミュレーション・モードでは、エミュレートされる特定の命令または操作がデコードされ、適切なエミュレーション機能が作り出されて個々の命令または操作を実施する。
【０１００】
エミュレーション環境では、ホスト・コンピュータは、例えば、命令およびデータを記憶するメモリと、メモリから命令をフェッチし、任意選択でフェッチされた命令にローカル・バッファリングを行う命令フェッチ・ユニットと、フェッチされた命令を受信し、フェッチされた命令のタイプを判定する命令デコード・ユニットと、命令を実行する命令実行ユニットとを含む。実行は、データをメモリからレジスタに読み込むこと、データをレジスタからメモリに戻して記憶すること、またはデコード・ユニットによって決定された通りに何らかのタイプの算術演算もしくは論理演算を実行することを含み得る。一例では、それぞれのユニットはソフトウェアで実施される。例えば、ユニットによって実行される操作は、エミュレータソフトウェア内の１つまたは複数のサブルーチンとして実装される。
【０１０１】
より具体的には、メインフレームでは、アーキテクチャ化されたマシン命令は、多くの場合コンパイラ・アプリケーションを用いて、プログラマー、今日では通常「Ｃ」プログラマーによって使用される。記憶媒体に記憶されたこれらの命令は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）ＩＢＭ（Ｒ）Ｓｅｒｖｅｒで、あるいは他のアーキテクチャを実行するマシンで、ネイティブに実行され得る。これらの命令を、既存および将来のＩＢＭ（Ｒ）メインフレームサーバで、また、ＩＢＭ（Ｒ）の他のマシン（例えば、Ｐｏｗｅｒ  ＳｙｓｔｅｍｓサーバおよびＳｙｓｔｅｍ  ｘ（Ｒ）サーバ）上でエミュレートすることができる。これらの命令を、ＩＢＭ（Ｒ）、Ｉｎｔｅｌ（Ｒ）、ＡＭＤ（商標）などによって製造されたハードウェアを使用する様々なマシン上でＬｉｎｕｘを動作させるマシンで実行することができる。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）下のそのハードウェアでの実行の他に、Ｌｉｎｕｘを、Ｈｅｒｃｕｌｅｓ、ＵＭＸ、またはＦＳＩ（Ｆｕｎｄａｍｅｎｔａｌ  Ｓｏｆｔｗａｒｅ，Ｉｎｃ）によるエミュレーションを使用するマシンとして使用することもでき、一般的に実行はエミュレーション・モードで行われる。エミュレーション・モードでは、エミュレーション・ソフトウェアはネイティブ・プロセッサによって実行されて、エミュレートされるプロセッサのアーキテクチャをエミュレートする。
【０１０２】
ネイティブ・プロセッサは、典型的には、エミュレートされるプロセッサのエミュレーションを実行するためのファームウェアまたはネイティブ・オペレーティング・システムのいずれかを含むエミュレーション・ソフトウェアを実行する。エミュレーション・ソフトウェアは、エミュレートされるプロセッサ・アーキテクチャの命令をフェッチし、実行する責任を負う。エミュレーション・ソフトウェアは、命令境界を追跡するためのエミュレートされたプログラム・カウンタを維持する。エミュレーション・ソフトウェアは、１つまたは複数のエミュレートされたマシン命令を一度にフェッチし、１つまたは複数のエミュレートされたマシン命令を、ネイティブ・プロセッサによって実行するための対応するネイティブ・マシン命令のグループに変換することができる。より速い変換を達成することができるように、これらの変換された命令をキャッシュすることができる。それにもかかわらず、エミュレーション・ソフトウェアは、オペレーティング・システムおよびエミュレートされるプロセッサ用に書かれたアプリケーションが正常に動作することを保証するために、エミュレートされたプロセッサ・アーキテクチャのアーキテクチャ・ルールを維持しなければならない。さらに、エミュレーション・ソフトウェアは、エミュレートされるプロセッサ上で動作するように設計されたオペレーティング・システムまたはアプリケーション・プログラムが、エミュレーション・ソフトウェアを有するネイティブ・プロセッサ上で動作することができるように、制御レジスタ、汎用レジスタ、浮動小数点レジスタ、例えばセグメント・テーブルおよびページ・テーブルを含む動的アドレス変換機能、割込み機構、コンテキスト・スイッチ機構、時刻（ＴＯＤ）クロックおよびＩ／Ｏサブシステムへのアーキテクチャ化されたインターフェースを含むが、これらに限定されない、エミュレートされるプロセッサ・アーキテクチャによって特定されたリソースを提供しなければならない。
【０１０３】
エミュレートされる特定の命令がデコードされ、サブルーチンが呼び出されて個々の命令の機能を実行する。エミュレートされるプロセッサの機能をエミュレートするエミュレーション・ソフトウェア機能は、例えば、「Ｃ」サブルーチンもしくはドライバで、または好ましい実施形態の説明を理解した後の当業者の技能の範囲内であるような、特定のハードウェアのドライバを提供する何らかの他の方法で、実施される。Beausoleilらによる「Multiprocessor for HardwareEmulation」という表題の米国特許第５，５５１，０１３号、およびScalziらによる「Preprocessing of Stored Target Routines for Emulating IncompatibleInstructions on a Target Processor」という表題の米国特許第６，００９，２６１号、およびDavidianらによる「Decoding Guest Instruction toDirectly Access Emulation Routines that Emulate the Guest Instructions」という表題の米国特許第５，５７４，８７３号、およびGorishekらによる「Symmetrical Multiprocessing Busand Chipset Used for Coprocessor Support Allowing Non-Native Code to Run in aSystem」という表題の米国特許第６，３０８，２５５号、およびLethinらによる「Dynamic Optimizing Object Code Translator for Architecture Emulationand Dynamic Optimizing Object Code Translation Method」という表題の米国特許第６，４６３，５８２号、およびEric Trautによる「Method for Emulating GuestInstructions on a Host Computer Through Dynamic Recompilation of HostInstructions」という表題の米国特許第５，７９０，８２５号を含むが、これらに限定されない様々なソフトウェアおよびハードウェアエミュレーション特許は、当業者が利用できるターゲットマシンのために、異なるマシンに対してアーキテクチャ化された命令形式のエミュレーションを実現するための様々な知られている方法を示している。
【０１０４】
図１５では、ホスト・アーキテクチャのホスト・コンピュータ・システム５０００'をエミュレートする、エミュレートされたホスト・コンピュータ・システム５０９２の例が提供されている。エミュレートされたホスト・コンピュータ・システム５０９２では、ホスト・プロセッサ（ＣＰＵ）５０９１はエミュレートされたホスト・プロセッサ（または仮想ホスト・プロセッサ）であり、ホスト・コンピュータ５０００'のプロセッサ５０９１のものとは異なるネイティブ命令セット・アーキテクチャを有するエミュレーション・プロセッサ５０９３を含む。エミュレートされたホスト・コンピュータ・システム５０９２は、エミュレーション・プロセッサ５０９３がアクセス可能なメモリ５０９４を有する。例示的な実施形態では、メモリ５０９４は、ホスト・コンピュータ・メモリ５０９６部分と、エミュレーション・ルーチン５０９７部分とに分割される。ホスト・コンピュータ・メモリ５０９６は、ホスト・コンピュータ・アーキテクチャに従った、エミュレートされたホスト・コンピュータ５０９２のプログラムで利用可能である。エミュレーション・プロセッサ５０９３は、エミュレートされたプロセッサ５０９１のもの以外のアーキテクチャのアーキテクチャ化された命令セットのネイティブ命令、エミュレーション・ルーチン・メモリ５０９７から得られたネイティブ命令を実行し、アクセスされたホスト命令の機能をエミュレートするためのネイティブ命令実行ルーチンを決定するためにアクセスされた（１つまたは複数の）ホスト命令をデコードすることができるシーケンス＆アクセス／デコード・ルーチンで得られた１つまたは複数の命令を用いることによって、コンピュータ・メモリ５０９６内のプログラムから実行するためのホスト命令にアクセスすることができる。ホスト・コンピュータ・システム５０００'アーキテクチャについて定められる他のファシリティは、例えば、汎用レジスタ、制御レジスタ、動的アドレス変換およびＩ／Ｏサブシステム・サポートならびにプロセッサ・キャッシュなどのファシリティを含むアーキテクチャ化されたファシリティ・ルーチンによってエミュレートされ得る。エミュレーション・ルーチンは、エミュレーション・プロセッサ５０９３（汎用レジスタおよび仮想アドレスの動的変換など）で利用可能な機能を利用して、エミュレーション・ルーチンの性能を向上させることもできる。特殊ハードウェアおよびオフロード・エンジンを提供して、ホスト・コンピュータ５０００'の機能をエミュレートする際にプロセッサ５０９３を支援することもできる。
【０１０５】
本明細書において使用される術語は、特定の実施形態を記述することだけを目的とし、本発明の限定を意図するものではない。本明細書において使用される場合、単数形「ａ」、「ａｎ」および「ｔｈｅ」は、文脈上明らかに別段の定めがある場合を除き、複数形も含むことが意図されている。「備える」または「備えている」あるいはその両方の用語は、本明細書で使用される場合、述べられた特徴、整数、ステップ、動作、要素、または構成要素、あるいはそれらすべての存在を規定するが、１つまたは複数の他の特徴、整数、ステップ、動作、要素、構成要素、またはそれらのグループあるいはそれらすべての存在もしくは追加を排除しないことをさらに理解されるであろう。
【０１０６】
下記の特許請求の範囲における対応する構造、材料、行動、およびすべてのミーンズプラスファンクション要素またはステッププラスファンクション要素の均等物は、存在する場合、具体的に特許請求される他の特許請求される要素との組合せにおいて機能を実行するための任意の構造、材料、または行動を含むことが意図されている。本発明の１つまたは複数の態様の説明は、例示および説明の目的のために提示されたが、網羅的であること、または開示された形態の本発明に限定されることは意図されていない。多くの修正形態および変形形態が、本発明の範囲を逸脱することなく、当業者には明らかとなるであろう。実施形態は、本発明の原理および実際的な用途について最善の説明をするように、かつ当業者が考慮される特定の使用に適する様々な修正形態を有する様々な実施形態に対して本発明を理解することができるように、選ばれ、説明された。
【図１】
0006012725.tif 000002
【図２】
0006012725.tif 000003
【図３】
0006012725.tif 000004
【図４】
0006012725.tif 000005
【図５】
0006012725.tif 000006
【図６】
0006012725.tif 000007
【図７】
0006012725.tif 000008
【図８】
0006012725.tif 000009
【図９】
0006012725.tif 000010
【図１０】
0006012725.tif 000011
【図１１】
0006012725.tif 000012
【図１２】
0006012725.tif 000013
【図１３】
0006012725.tif 000014
【図１４】
0006012725.tif 000015
【図１５】
0006012725.tif 000016