(57)【特許請求の範囲】
【請求項１】
コンピューティング環境においてアドレスを変換するための方法であって、
変換されることになるアドレスをアダプタから取得することであって、前記アドレスは複数のビットを含み、前記複数のビットはビットの第１の部分およびビットの第２の部分を含む、取得すること、
許可されたアドレスの領域を示すアドレス領域値を受信すること、
少なくとも前記ビットの第１の部分および前記受信したアドレス領域を使用して前記アドレスを妥当性検査することであって、前記ビットの第１の部分が前記アドレス領域値によって示される、０でない前記アドレスの領域内にある旨の決定を条件に処理の続行を許可する、前記検査すること、および、
前記アドレスを、前記コンピューティング環境のメモリにアクセスする際に使用可能なメモリ・アドレスに変換することであって、前記変換することが、前記ビットの第１の部分を無視し、前記変換を実行するためのアドレス変換テーブルの１つまたは複数のレベルからアドレス情報を取得するために前記ビットの第２の部分を使用する、変換すること、を含む、方法。
【請求項２】
前記ビットの第１の部分は前記アドレスの高位ビットを備え、前記ビットの第２の部分は前記アドレスの低位ビットを備え、前記低位ビットが、前記メモリ・アドレスを含む割り当てられたアドレス・スペースのサイズに基づいて決定される、請求項１に記載の方法。
【請求項３】
アドレス変換テーブルのレベルの数は、前記メモリ・アドレスを含む割り当てられたアドレス・スペースのサイズ、前記変換で使用されることになる１つまたは複数のアドレス変換テーブルのサイズ、および、前記メモリ・アドレスによってアクセスされるメモリの単位のサイズの少なくとも１つに基づくものである、請求項１に記載の方法。
【請求項４】
前記変換することが、前記アドレスの変換に使用されることになるアドレス変換テーブルを選択することを含み、前記選択することは、前記変換で使用されるデバイス・テーブル・エントリ内でのポインタを使用する、請求項１に記載の方法。
【請求項５】
前記方法が、前記デバイス・テーブル・エントリの位置を特定することをさらに含み、前記位置を特定することは、前記変換されることになるアドレスまたは前記アドレスの一部を含む要求を発行する前記アダプタの要求側識別子のうちの少なくとも１つを使用する
、請求項４に記載の方法。
【請求項６】
前記方法が、前記選択されたアドレス変換テーブルのフォーマットを決定することをさらに含み、前記決定することは、前記デバイス・テーブル・エントリのフォーマット・フィールドを使用する、請求項４に記載の方法。
【請求項７】
前記アドレスを妥当性検査するために、前記アドレス領域が、前記デバイス・テーブル・エントリの基本フィールドおよび限界フィールドのうちの少なくとも１つの値によって画定される、請求項４に記載の方法。
【請求項８】
前記アドレスを前記妥当性検査することが、
前記ビットの第１の部分がアドレス領域の対応するビットの領域内にある旨の決定に応答して実行を許可することであって、前記アドレス領域の前記対応するビットがすべて０ではない、許可すること、および
前記ビットの第１の部分がアドレス領域の対応するビットの領域内にない旨の決定に応答して実行を許可しないことであって、前記アドレス領域の前記対応するビットがすべて０ではない、許可しないこと、
を含む、請求項７に記載の方法。
【請求項９】
前記アダプタがＰｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ機能を備える、請求項１に記載の方法。
【請求項１０】
コンピューティング環境においてアドレスを変換するためのコンピュータ・システムであって、
メモリと、
前記メモリと通信するプロセッサと、
変換されることになるアドレスをアダプタから取得するためのアドレス取得器であって、前記アドレスは複数のビットを含み、前記複数のビットはビットの第１の部分およびビットの第２の部分を含む、アドレス取得器と、
許可されたアドレスの領域を示すアドレス領域値を受信するための受信器と、
少なくとも前記ビットの第１の部分および前記受信したアドレス領域を使用して前記アドレスを妥当性検査するための妥当性検査器であって、前記ビットの第１の部分が前記アドレス領域値によって示される、０でない前記アドレスの領域内にある旨の決定を条件に処理の続行を許可する、前記妥当性検査器と、
前記アドレスを、前記コンピューティング環境のメモリにアクセスする際に使用可能なメモリ・アドレスに変換するための変換器であって、前記変換器が、前記ビットの第１の部分を無視し、前記変換を実行するためのアドレス変換テーブルの１つまたは複数のレベルからアドレス情報を取得するために前記ビットの第２の部分を使用する、変換器と、
を備える、コンピュータ・システム。
【請求項１１】
請求項１から９のいずれか１項に記載の方法のすべてのステップをコンピュータに実行させるためのコンピュータ・プログラム。
【請求項１２】
請求項１から９のいずれか１項に記載の方法の各ステップを実行するように適合された手段を備えるコンピュータ・システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、コンピューティング環境におけるアドレスの変換に関し、特に、入力／出力アドレスの、環境のシステム・メモリにアクセスする際に使用可能なメモリ・アドレスへの変換に関する。
【背景技術】
【０００２】
システム・メモリは、読み取りおよび書き込みの要求によってアクセスされる。これらの要求は、中央処理ユニットならびにアダプタを含む、コンピューティング環境の様々な構成要素から発することができる。各要求は、システム・メモリにアクセスする際に使用されるアドレスを含む。しかしながらこのアドレスは、典型的には、システム・メモリ内の物理位置と１対１で対応している訳ではない。したがって、アドレス変換が実行される。
【０００３】
アドレス変換は、システム・メモリにアクセスする際に直接使用することのできない形で提供されたアドレスを、システム・メモリ内の物理位置にアクセスする際に直接使用できる他の形に変換するために使用される。たとえば、中央処理ユニットによって提供される要求に含められた仮想アドレスは、システム・メモリ内の実アドレスまたは絶対アドレスに変換される。他の例として、アダプタからの要求で提供されるＰｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）アドレスは、システム・メモリ内の絶対アドレスに変換可能である。
【０００４】
２００８年７月１０日付公告の、Ｇｒｅｇｇによる「Ｉ／Ｏ  Ａｄａｐｔｅｒ  ＬＰＡＲ  Ｉｓｏｌａｔｉｏｎ  Ｉｎ  Ａ  Ｈｙｐｅｒｔｒａｎｓｐｏｒｔ  Ｅｎｖｉｒｏｎｍｅｎｔ  Ｗｉｔｈ  Ａｓｓｉｇｎｅｄ  Ｍｅｍｏｒｙ  Ｓｐａｃｅ  Ｉｎｄｅｘｉｎｇ  Ａ  ＴＶＴ  Ｖｉａ  Ｕｎｉｔ  Ｉｄｓ」という名称の米国公開第２００８／０１６８２０８  Ａ１号は、データ処理システム、およびシステム内の複数のＩ／Ｏアダプタを分離する方法について記載している。データ処理システムは、プロセッサのセット、ホスト・ブリッジ、ならびに、プロセッサのセットとホスト・ブリッジとを接続するシステム・バスも備えている。各Ｉ／ＯアダプタはそれぞれのＩＤを有し、Ｉ／ＯアダプタのＩＤのうちの１つまたは複数を含むコマンドを、ホスト・ブリッジに送信する。好ましい実施形態では、これらのＩＤはＨｙｐｅｒＴｒａｎｓｐｏｒｔ定義のユニットＩＤであり、Ｉ／Ｏアダプタによって発行されるコマンドは、Ｉ／ＯアダプタのユニットＩＤのうちの１つまたは複数を含むユニットＩＤを含む。ユニットＩＤはそれぞれ、固有の独立したシステム・メモリ・スペースを識別するように、ＴＶＴにインデックス付けするために使用される。
【０００５】
２００９年７月１６日付公告の、Ｇｒｅｉｎｅｒ等による「Ｄｙｎａｍｉｃ  Ａｄｄｒｅｓ  Ｔｒａｎｓｌａｔｉｏｎ  ｗｉｔｈ  Ｆｒａｍｅ  Ｍａｎａｇｅｍｅｎｔ」という名称の米国公開第２００９／０１８２９６６Ａ１号は、コンピュータ・システムの機械体系に関して定義されたフレーム管理機能を開示している。一実施形態では、第１および第２の汎用レジスタを識別するフレーム管理命令が取得される。第１の汎用レジスタは、アクセス保護ビットおよびブロック・サイズ指示を備えたキー・フィールドを有するフレーム管理フィールドを含む。ブロック・サイズ指示が大きなブロックを示す場合、大きなデータ・ブロックのオペランド・アドレスが、第２の汎用レジスタから取得される。大きなデータ・ブロックは、複数の小さなブロックを有し、そのそれぞれが、複数のストレージ・キー・アクセス保護ビットを有する対応するストレージ・キーに関連付けられる。ブロック・サイズ指示が大きなブロックを示す場合、大きなブロック内の各小さなブロックの各対応するストレージ・キーのストレージ・キー・アクセス保護ビットには、キー・フィールドのアクセス保護ビットがセットされる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国公開第２００８／０１６８２０８Ａ１号
【特許文献２】米国公開第２００９／０１８２９６６Ａ１号
【特許文献３】米国特許証第６００９２６１号
【特許文献４】米国特許証第５５７４８７３号
【特許文献５】米国特許証第５５５１０１３号
【特許文献６】米国特許証第６３０８２５５号
【特許文献７】米国特許証第６４６３５８２号
【特許文献８】米国特許証第５７９０８２５号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
コンピューティング環境においてアドレスを変換するためのコンピュータ・プログラム製品を提供することによって、従来技術の欠点が克服され、追加の利点が与えられる。
【課題を解決するための手段】
【０００８】
コンピュータ・プログラム製品は、処理回路によって読み取り可能であり、方法を実行するために処理回路によって実行するための命令を格納する、コンピュータ読み取り可能ストレージ・メディアを含む。方法は、たとえば、変換されることになるアドレスをアダプタから取得することであって、アドレスは複数のビットを含み、複数のビットはビットの第１の部分およびビットの第２の部分を含む、取得すること、許可されたアドレスの領域を示すアドレス領域値を受信すること、少なくともビットの第１の部分および受信したアドレス領域を使用してアドレスを妥当性検査すること、ならびに、このアドレスを、コンピューティング環境のメモリにアクセスする際に使用可能なメモリ・アドレスに変換することであって、変換することは、ビットの第１の部分を無視し、変換を実行するためのアドレス変換テーブルの１つまたは複数のレベルからアドレス情報を取得するためにビットの第２の部分を使用する、変換すること、を含む。
【０００９】
本明細書では、本発明の１つまたは複数の態様に関する方法およびシステムについても説明および主張する。
【００１０】
追加の特徴および利点は、本発明の技法を通じて実現される。本明細書では、本発明の他の実施形態および態様について詳細に説明され、主張された発明の一部とみなされる。
【００１１】
本発明の１つまたは複数の態様が特に注目され、明細書の終わりの特許請求の範囲で例として明確に主張される。本発明の前述および他の目的、特徴、および利点は、添付の図面に関連した以下の詳細な説明から明らかとなる。
【図面の簡単な説明】
【００１２】
【図１】本発明の１つまたは複数の態様を組み込んで使用するための、コンピューティング環境の一実施形態を示す図である。
【図２】本発明の態様に従った、図１のシステム・メモリおよびＩ／Ｏハブのさらなる細部の一実施形態を示す図である。
【図３】本発明の態様に従った、アダプタに関するＤＭＡ（ダイレクト・メモリ・アクセス）アドレス・スペースを登録するための論理の概要の一実施形態を示す図である。
【図４】本発明の態様に従った、アダプタに関するＤＭＡアドレス・スペースの登録の様々な細部の一実施形態を示す図である。
【図５】本発明の態様に従った、ＤＭＡ動作を処理するための論理の一実施形態を示す図である。
【図６】アドレスを変換するためおよびページにアクセスするために、アドレス変換テーブルにインデックス付けするためにアドレス全体が使用される場合に採用される、変換のレベルの一例を示す図である。
【図７】本発明の態様に従った、アドレス変換テーブルにインデックス付けする際にアドレスの一部が無視される場合に採用される、変換のレベルの一例を示す図である。
【図８】本発明の１つまたは複数の態様に従って使用可能な、様々なＣＰＵ  ＤＡＴ適合フォーマットの例を示す図である。
【図９】本発明の１つまたは複数の態様に従って使用可能な、様々なＩ／Ｏ拡張アドレス変換フォーマットの例を示す図である。
【図１０】本発明の態様に従って使用される、ＰＣＩ機能制御修正命令の一実施形態を示す図である。
【図１１】本発明の態様に従った、図１０のＰＣＩ機能制御修正命令によって使用されるフィールドの一実施形態を示す図である。
【図１２】本発明の態様に従った、図１０のＰＣＩ機能制御修正命令によって使用される他のフィールドの一実施形態を示す図である。
【図１３】本発明の態様に従って使用される、機能情報ブロック（ＦＩＢ）のコンテンツの一実施形態を示す図である。
【図１４】本発明の態様に従った、ＰＣＩ機能制御修正命令の論理の概要の一実施形態を示す図である。
【図１５】本発明の態様に従った、ＰＣＩ機能制御修正命令によって指定可能な、Ｉ／Ｏアドレス変換パラメータ登録動作に関連付けられた論理の一実施形態を示す図である。
【図１６】本発明の態様に従った、ＰＣＩ機能制御修正命令によって指定可能な、Ｉ／Ｏアドレス変換パラメータ登録解除動作に関連付けられた論理の一実施形態を示す図である。
【図１７】本発明の１つまたは複数の態様を組み込んだコンピュータ・プログラム製品の一実施形態を示す図である。
【図１８】本発明の１つまたは複数の態様を組み込んで使用するための、ホスト・コンピュータ・システムの一実施形態を示す図である。
【図１９】本発明の１つまたは複数の態様を組み込んで使用するための、コンピュータ・システムの他の例を示す図である。
【図２０】本発明の１つまたは複数の態様を組み込んで使用するためのコンピュータ・ネットワークを備える、コンピュータ・システムの他の例を示す図である。
【図２１】本発明の１つまたは複数の態様を組み込んで使用するためのコンピュータ・システムの様々な要素の一実施形態を示す図である。
【図２２】本発明の１つまたは複数の態様を組み込んで使用するための、図２１のコンピュータ・システムの実行ユニットの一実施形態を示す図である。
【図２３】本発明の１つまたは複数の態様を組み込んで使用するための、図２１のコンピュータ・システムの分岐ユニットの一実施形態を示す図である。
【図２４】本発明の１つまたは複数の態様を組み込んで使用するための、図２１のコンピュータ・システムのロード／格納ユニットの一実施形態を示す図である。
【図２５】本発明の１つまたは複数の態様を組み込んで使用するための、エミュレートされたホスト・コンピュータ・システムの一実施形態を示す図である。
【発明を実施するための形態】
【００１３】
本発明の態様によれば、コンピューティング環境においてアドレスを変換するための機能が提供される。一例では、変換されるアドレスは、アダプタによって提供されるアドレス（本明細書では、入力／出力（Ｉ／Ｏ）アドレスと呼ばれる）であり、システム・メモリにアクセスする際に使用可能なアドレスに変換されるものである。アドレス変換を実行するために、いくつかのレベルのアドレス変換が使用され、このレベルの数は、たとえば、アダプタに割り当てられたメモリ・アドレス・スペースのサイズ、変換に使用される１つまたは複数のアドレス変換テーブルのサイズ、または、アクセスされることになるページ（またはメモリの他の単位）のサイズ、あるいはそれらすべてに基づくものである。
【００１４】
変換されるアドレスは複数のビットを含み、一実施形態では、それらのビットの一部のみが、変換されたアドレスを取得するためにアドレス変換テーブルにインデックス付けするために使用される。他のビットは変換については無視される。たとえばアドレスは、（割り当てられたアドレス・スペースのサイズに基づいて）高位ビットおよび低位ビットを含む。この例では、ページ・テーブルを含むアドレス変換テーブルにインデックス付けするため、および、ページ自体にインデックス付けするために、低位ビットが使用される。高位ビットは、（値、すなわちゼロまたは非ゼロに関係なく）変換については無視され、アドレス変換テーブルにインデックス付けするためには使用されない。これにより、変換に使用されるアドレス変換テーブルのレベル数は減少する。（低位ビットおよび高位ビットの指示は、ビットがどのように番号付けされるかとは無関係である。）
【００１５】
一例では、変換は、Ｓｙｓｔｅｍ  ｚ（Ｒ）サーバなどの企業クラス・サーバに好適な保護を提供しながら、実行される。例として、メモリにアクセスする際にはフル・アドレス（たとえば６４ビット・アドレス全体）が使用されるが、変換にはアドレスの一部のみが使用される。変換については無視されるアドレスの他の部分は、変換に使用されるアドレスの少なくとも一部と共に、妥当性検査（たとえば領域チェック）に使用される。変換のためにアドレスの一部のみを使用することによって、アドレス変換ルックアップは最小限に抑えられる。これは、アドレス自体のサイズではなく、たとえばアダプタによるアクセスに登録されたＤＭＡアドレス・スペースのサイズに基づいて、いくつかのレベルの変換を実行することによって達成される。
【００１６】
本発明の１つまたは複数の態様を組み込んで使用するためのコンピューティング環境の一実施形態について、図１を参照しながら説明する。一例では、コンピューティング環境１００は、インターナショナル・ビジネス・マシーンズ・コーポレーションによって提供されるＳｙｓｔｅｍ  ｚ（Ｒ）である。Ｓｙｓｔｅｍ  ｚ（Ｒ）は、インターナショナル・ビジネス・マシーンズ・コーポレーションによって提供されるｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）に基づくものである。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）に関する詳細については、２００９年２月、ＩＢＭ（Ｒ）発行の「ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｐｒｉｎｃｉｐｌｅｓ  ｏｆ  Ｏｐｅｒａｔｉｏｎ」と題するＩＢＭ出版物第ＳＡ２２−７８３２−０７号で説明されている。ＩＢＭ（Ｒ）、Ｓｙｓｔｅｍ  ｚ（Ｒ）、およびｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）は、ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である。本明細書で使用される他の名前は、インターナショナル・ビジネス・マシーンズ・コーポレーションまたは他の会社の登録商標、商標、または製品名とすることができる。
【００１７】
一例では、コンピューティング環境１００は、メモリ・コントローラ１０６を介してシステム・メモリ１０４（別名メイン・メモリ）に結合された、１つまたは複数の中央処理ユニット（ＣＰＵ）１０２を含む。システム・メモリ１０４にアクセスするために、中央処理ユニット１０２は、システム・メモリにアクセスするために使用されるアドレスを含む、読み取りまたは書き込み要求を発行する。要求に含まれるアドレスは、通常、システム・メモリへのアクセスに直接使用することはできないため、システム・メモリへのアクセスに直接使用可能なアドレスに変換される。アドレスは、変換メカニズム（ＸＬＡＴＥ）１０８を介して変換される。たとえばアドレスは、たとえば動的アドレス変換（ＤＡＴ）を使用して、仮想アドレスから実または絶対アドレスへと変換される。
【００１８】
変換済みアドレスを含む要求は、メモリ・コントローラ１０６によって受信される。一例では、メモリ・コントローラ１０６はハードウェアからなり、システム・メモリへのアクセスに関する調停（arbitrate）およびメモリの一貫性の維持のために使用される。この調停はＣＰＵ  １０２から受信される要求、ならびに１つまたは複数のアダプタ１１０から受信される要求に対して実行される。中央処理ユニットと同様に、アダプタは、システム・メモリにアクセスできるようにするための要求を発行する。
【００１９】
一例では、アダプタ１１０は、Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）、あるいは１つまたは複数のＰＣＩ機能を含むＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）アダプタである。ＰＣＩ機能は、システム・メモリへのアクセスを必要とする要求を発行する。要求は、１つまたは複数のスイッチ（たとえばＰＣＩｅスイッチ）１１４を介して入力／出力ハブ１１２（たとえばＰＣＩハブ）へと経路指定される。一例では、入力／出力ハブは、１つまたは複数の状態機械を含むハードウェアからなる。
【００２０】
本明細書で使用されるアダプタと言う用語は、任意のタイプのアダプタ（たとえば、ストレージ・アダプタ、ネットワーク・アダプタ、処理アダプタ、ＰＣＩアダプタ、暗号アダプタ、他のタイプの入力／出力アダプタなど）を含む。一実施形態では、アダプタは１つのアダプタ機能を含む。しかしながら、他の実施形態では、アダプタは複数のアダプタ機能を含むことができる。本発明の１つまたは複数の態様は、アダプタが１つのアダプタ機能または複数のアダプタ機能を含むかどうかにかかわらず、適用可能である。さらに、本明細書に提示された例では、特に注記されない限り、アダプタはアダプタ機能（たとえばＰＣＩ機能）と互換的に使用される。
【００２１】
入力／出力ハブは、たとえば、スイッチからの要求を受信するルート・コンプレックス（root complex）１１６を含む。要求は、変換されることになる入力／出力アドレスを含むため、ルート・コンプレックスはアドレス変換および保護ユニット１１８にアドレスを提供する。このユニットは、以下でより詳細に説明するように、たとえばＩ／Ｏアドレスを、システム・メモリ１０４にアクセスするために直接使用可能なアドレスに変換する、ハードウェア・ユニットである。
【００２２】
アダプタから開始された、変換済みアドレスを含む要求は、たとえばＩ／Ｏ−メモリ・バス（I/O-to-memory bus）１２０を介して、メモリ・コントローラ１０６へ提供される。メモリ・コントローラはその調停を実行し、要求を変換済みアドレスと共に適切な時点でシステム・メモリに転送する。
【００２３】
システム・メモリおよび入力／出力ハブに関するさらなる詳細について、図２を参照しながら説明する。この実施形態では、メモリ・コントローラは示されていない。しかしながら、Ｉ／Ｏハブを直接、またはメモリ・コントローラを介して、システム・メモリに結合することができる。一例では、システム・メモリ１０４は１つまたは複数のアドレス・スペース２００を含む。アドレス・スペースとは、特定のアダプタなどのコンピューティング環境の特定の構成要素に割り当てられた、システム・メモリの特定部分である。一例では、アドレス・スペースには、アダプタによって開始されたダイレクト・メモリ・アクセス（ＤＭＡ）によってアクセス可能であるため、本明細書の例では、アドレス・スペースはＤＭＡアドレス・スペースと呼ばれる。しかしながら他の例では、アドレス・スペースにアクセスするためにダイレクト・メモリ・アクセスは使用されない。
【００２４】
さらに、一例では、システム・メモリ１０４は、システム・メモリにアクセスする際に直接使用できないアドレスから直接使用可能なアドレスへと、アドレスを変換する際に使用される、アドレス変換テーブル２０２を含む。一実施形態では、ＤＭＡアドレス・スペースに割り当てられた１つまたは複数のアドレス変換テーブルが存在し、それらの１つまたは複数のアドレス変換テーブルは、たとえば、割り当て先のアドレス・スペースのサイズ、アドレス変換テーブル自体のサイズ、または、ページ（またはメモリの他の単位）のサイズ、あるいはそれらすべてに基づいて、構成される。
【００２５】
一例では、アドレス変換テーブルの階層が存在する。たとえば図２に示されるように、ＩＯＡＴポインタ２１８（以下で説明）によってポイントされる第１レベル・テーブル２０２ａ（たとえばセグメント・テーブル）、および、第１レベル・テーブルのエントリ２０６ａによってポイントされる第２の低レベル・テーブル２０２ｂ（たとえばページ・テーブル）が存在する。特定の低レベル・テーブル２０２ｂを示す、特定のエントリ２０６ａの位置を特定するため、テーブル２０２ａにインデックス付けするために、受信アドレス２０４の１つまたは複数のビットが使用される。その後、そのテーブル内の特定のエントリ２０６ｂの位置を特定するために、アドレス２０４の１つまたは複数の他のビットが使用される。この例では、そのエントリは、正しいページの位置を特定するために使用されるアドレスを提供し、データ転送を実行するためにページ内の特定の位置２０８を特定するために、アドレス２０４内の追加のビットが使用される。すなわち、システム・メモリにアクセスするために直接使用可能なアドレスを提供するために、エントリ２０６ｂ内のアドレス、および受信ＰＣＩアドレス２０４の選択されたビットが使用される。たとえば、直接使用可能なアドレスは、エントリ２０６ｂ内のアドレスの高位ビット（たとえば、４Ｋページの例では、ビット６３：１２）と、受信ＰＣＩアドレスからの選択された低位ビット（たとえば、４Ｋページではビット１１：０）との連結から、形成される。
【００２６】
一例では、これは、特定のアダプタにＤＭＡアドレス・スペースを割り当てるオペレーティング・システムである。この割り当ては、登録プロセスを介して実行され、これによって、そのアダプタに関するデバイス・テーブル・エントリ２１０が（たとえば、信頼できるソフトウェアを介して）初期化される。デバイス・テーブル・エントリは、Ｉ／Ｏハブ１１２内に配置されたデバイス・テーブル２１１内に配置される。たとえば、デバイス・テーブル２１１は、Ｉ／Ｏハブのアドレス変換および保護ユニット内に配置される。
【００２７】
一例では、デバイス・テーブル・エントリ２１０は、以下のようないくつかのフィールドを含む。
フォーマット２１２：このフィールドは、たとえばアドレス変換・テーブルの上位レベル・テーブル（たとえばこの例では、第１レベル・テーブル）のアドレス変換フォーマット（レベルを含む）を含む、様々な情報を示すための複数のビットを含む。
ページ・サイズ２１３：このフィールドは、アクセスされることになるページ（またはメモリの他の単位）のサイズを示す。
ＰＣＩベース・アドレス２１４およびＰＣＩ限界２１６：これらの値は、ＤＭＡアドレス・スペースを定義し、受信したアドレス（たとえばＰＣＩアドレス）が有効かどうかを検証するために使用される、領域を提供する。
ＩＯＡＴ（入力／出力アドレス変換）ポインタ２１８：このフィールドは、ＤＭＡアドレス・スペースに使用されるアドレス変換テーブルの最高レベルに対するポインタを含む。
【００２８】
他の実施形態では、ＤＴＥは、より多くの、より少ない、または、異なる情報を含むことができる。
【００２９】
一実施形態では、特定の変換で使用されることになるデバイス・テーブル・エントリは、アダプタに関連付けられたＰＣＩ機能２２０（またはアドレスの一部、あるいはその両方）によって発行される要求内に配置される、要求側識別子（ＲＩＤ）を使用して配置される。要求側ＩＤ（たとえば、バス番号、デバイス番号、および機能番号を指定する、１６ビット値）は、要求、ならびに、システム・メモリへのアクセスに使用されることになるＩ／Ｏアドレス（たとえば、６４ビットＰＣＩｅアドレス）内に含められる。ＲＩＤおよびＩ／Ｏアドレスを含む要求は、たとえば、インデックス値を提供するために使用される、たとえばスイッチ１１４を介して、コンテンツ・アドレス指定可能メモリ（ＣＡＭ）２３０へと提供される。たとえば、ＣＡＭは複数のエントリを含み、各エントリはデバイス・テーブルへのインデックスに対応する。各ＣＡＭエントリは、ＲＩＤの値を含む。たとえば、受信したＲＩＤが、ＣＡＭ内のエントリに含まれる値と一致する場合、デバイス・テーブル・エントリの位置を特定するために、対応するデバイス・テーブル・インデックスが使用される。すなわち、ＣＡＭの出力は、デバイス・テーブル・エントリ２１０の位置を特定するために、デバイス・テーブル２１１へのインデック付けに使用される。一致しない場合、システム・メモリへのアクセスは実行されることなく、受信したパケットが廃棄される。（他の実施形態では、ＣＡＭまたは他のルックアップは不要であり、ＲＩＤはインデックスとして使用される。）
【００３０】
その後、デバイス・テーブル・エントリ内のフィールドは、アドレスの妥当性検査およびアドレス変換テーブルの構成を保証するために使用される。たとえば、要求内の着信アドレスは、アドレスを提供した要求のＲＩＤを使用して位置が特定されたデバイス・テーブル・エントリに格納された、ＰＣＩベース・アドレス２１４およびＰＣＩ限界２１６によって画定された、境界内にあることを保証するために、Ｉ／Ｏハブのハードウェア（たとえば、アドレス変換および保護ユニット）によってチェックされる。これによって、アドレスが、事前に登録された領域内にあること、および、それに対してアドレス変換テーブルが有効に構成されることが保証される。
【００３１】
本発明の態様によれば、一実施形態において、Ｉ／Ｏアドレス（すなわち、Ｉ／Ｏサブシステムのアダプタまたは他の構成要素によって提供されるアドレス）を、システム・メモリ・アドレス（すなわち、システム・メモリへのアクセスに直接使用可能なアドレス）に変換するために、最初に、登録プロセスが実行される。この登録プロセスは、特定のアダプタまたはアダプタ機能などの、特定のアドレス・スペースを特定の要求側に登録する。この登録プロセスの概要の一例について、図３を参照しながら説明する。
【００３２】
最初に、ステップ３００で、システム・メモリに結合された中央処理ユニットのうちの１つ内で実行するオペレーティング・システムが、アダプタがアクセスするアドレス・スペースのサイズおよび位置を決定する。一例では、アドレス・スペースのサイズは、オペレーティング・システムによって設定されたＰＣＩベース・アドレスおよびＰＣＩ限界によって決定される。オペレーティング・システムは、１つまたは複数の基準を使用してベースおよび限界を決定する。たとえば、オペレーティング・システムがＰＣＩアドレスをＣＰＵ仮想アドレスに直接マッピングさせたい場合、ベースおよび限界はそのように設定される。他の例では、アダプタまたはオペレーティング・システム・イメージまたはその両方の間の追加の分離が望ましい場合、非重複および独立のアドレス・スペースを提供するように、使用されているアドレスが選択される。位置もオペレーティング・システムによって指定され、たとえばアダプタの特徴に基づく。
【００３３】
その後、ステップ３０２で、そのＤＭＡアドレス・スペースをカバーするために、１つまたは複数のアドレス変換テーブルが作成される。例として、テーブルはＣＰＵアドレス変換テーブルに適合可能であるか、または、入力／出力ハブによってサポートされる固有のフォーマットが提供可能である。一例では、作成は、テーブルを構築すること、およびテーブル・エントリ内に適切なアドレスを配置することを含む。例として、変換テーブルのうちの１つは５１２の６４ビット・エントリを有する４Ｋページ・テーブルであり、各エントリは、割り当てられたアドレス・スペースに適合可能な４Ｋページ・アドレスを含む。
【００３４】
その後、図４を参照しながらより詳細に説明するように、ステップ３０４で、アダプタに対してＤＭＡアドレス・スペースが登録される。この例では、アダプタについて１つのＰＣＩ機能が存在し、したがってアダプタについて１つの要求側ＩＤが存在するものと想定される。この論理は、たとえば、オペレーティング・システム要求に応答して、システム・メモリに結合された中央処理ユニットによって実行される。
【００３５】
最初に、一実施形態では、ステップ３１０で、アダプタの要求側ＩＤに対応するように、使用可能なデバイス・テーブル・エントリが選択される。すなわち、デバイス・テーブル・エントリの位置を特定するために、要求側ＩＤが使用されることになる。
【００３６】
加えて、ステップ３１２で、ＰＣＩベース・アドレスおよびＰＣＩ限界がデバイス・テーブル・エントリに格納される。さらに、ステップ３１４で、最高レベル・アドレス変換テーブルのフォーマットも、ならびにステップ３１６で、最高レベル・アドレス変換テーブルをポイントするために使用される入力／出力アドレス変換（ＩＯＡＴ）ポインタも、デバイス・テーブル・エントリ（たとえばフォーマット・フィールド）に格納される。これで登録プロセスが完了する。
【００３７】
登録の実行に応答して、ＤＭＡアドレス・スペースおよび対応するアドレス変換テーブル、ならびにデバイス・テーブル・エントリが使用できるようになる。システム・メモリにアクセスするために、アダプタなどの要求側によって発行される要求の処理に関する詳細について、図５を参照しながら説明する。以下で説明される処理は、Ｉ／Ｏハブによって実行される。一例では、これは、論理を実行するアドレス変換および保護ユニットである。一実施形態では、最初に、ステップ４００で、入力／出力ハブでＤＭＡ要求が受信される。たとえばＰＣＩ機能は、たとえばＰＣＩスイッチを介してＰＣＩハブに転送される要求を発行する。要求内の要求側ＩＤを使用して、ステップ４０２で、適切なデバイス・テーブル・エントリの位置が特定される。その後、照会４０４で、デバイス・テーブル・エントリが有効かどうかが決定される。一例では、有効性は、エントリ自体の有効性ビットをチェックすることによって決定される。このビットは、たとえばオペレーティング・システムによる有効化機能要求の実行に応答して、設定される。有効化されている場合、ビットは、たとえば１（すなわち有効）に設定され、有効化されていない場合、ゼロ（すなわち無効）のままである。他の例では、登録プロセスが完了した時点でビットを設定することができる。
【００３８】
デバイス・テーブル・エントリが無効の場合、ステップ４０５でエラーが提示される。無効でない場合、照会４０６で、要求内に提供されたＰＣＩアドレスが、デバイス・テーブル・エントリに格納されたＰＣＩベース・アドレスよりも小さいかどうかが決定される。小さい場合、アドレスは有効領域外にあり、ステップ４０７でエラーが提供される。しかしながら、ＰＣＩアドレスがベース・アドレスよりも大きいかまたは等しい場合、照会４０８で、ＰＣＩアドレスがデバイス・テーブル・エントリ内のＰＣＩ限界値よりも大きいかどうか、さらに決定される。ＰＣＩアドレスが限界よりも大きい場合、アドレスは有効領域外にあるため、ステップ４０９で再度エラーが提示される。しかしながら、アドレスが有効範囲内にある場合、処理は続行される。
【００３９】
一例では、ステップ４１０で、アドレス変換に使用されることになるアドレス内のＰＣＩアドレス・ビットを決定するために、デバイス・テーブル・エントリ内に提供されるフォーマットが使用される。たとえば、フォーマットが、上位レベル・テーブルが４Ｋページを備えた第１レベル・テーブルであることを示す場合、第１レベル・テーブルにインデックス付けするためにアドレスのビット２９：２１が使用され、ページ・テーブルにインデックス付けするためにビット２０：１２が使用され、４Ｋページにインデックス付けするためにビット１１：０が使用される。使用されるビットは、所与のサイズ・ページまたはテーブルにインデックス付けするためにどれだけのビットが必要であるかに依存する。たとえば、バイト・レベル・アドレス指定を伴う４Ｋページの場合、４０９６バイトのアドレス指定には１２ビットが使用され、それぞれ８バイト、５１２エントリを伴う４Ｋページの場合、５１２エントリのアドレス指定には９ビットが使用される、などである。
【００４０】
次に、ステップ４１２で、ＰＣＩハブは、適切なアドレス変換テーブル・エントリをフェッチする。たとえば、最初に、デバイス・テーブル・エントリのＩＯＡＴポインタを使用して、最高レベル変換テーブルの位置が特定される。その後、そのテーブル内の特定のエントリの位置を特定するために、アドレスのビット（変換ではなく有効性に使用される高位ビットの後：たとえば上記の例ではビット２９：２１）が使用される。
【００４１】
その後、照会４１４で、たとえば、位置が特定されたアドレス変換エントリが正しいフォーマットを有するかどうかに関して、デバイス・テーブル・エントリに提供されたフォーマットに基づいて決定される。たとえば、デバイス・テーブル・エントリ内のフォーマットが、アドレス変換エントリ内に示されるフォーマットと比較される。等しい場合、デバイス・テーブル・エントリに内のフォーマットは有効である。等しくない場合、ステップ４１５でエラーが提供され、そうでなければ、照会４１６で、これが処理される最後のテーブルであるかどうかの決定によって処理が続行される。すなわち、実または絶対アドレスを取得するために必要な他のアドレス変換テーブルが存在するかどうか、または、最低レベルのテーブル・エントリの位置が特定されたかどうかに関して、決定される。これは、提供されたフォーマットおよびすでに処理されているテーブルのサイズに基づいて決定される。最後のテーブルでない場合、ステップ４１２で処理が続行される。そうでなければ、Ｉ／Ｏハブはステップ４１８で、変換済みのアドレスでデータのフェッチまたは格納を実行可能にするための処理を続行する。一例では、Ｉ／Ｏハブは、変換済みアドレスをメモリ・コントローラに転送し、これは変換済みアドレスによって指定されたＤＭＡ位置でデータをフェッチまたは格納するために、アドレスを使用する。
【００４２】
前述のように、本発明の態様によれば、変換のレベル数、したがってさらに変換を実行するために必要なフェッチ数が減少する。これは、たとえば、変換中にアドレスの高位ビットを無視すること、および、たとえば、アダプタに割り当てられたＤＭＡアドレス・スペースのサイズに基づく、変換テーブルをトラバースするために低位ビットのみを使用することによって、達成される。以下の例で、部分アドレスの使用対フル・アドレスの使用について示される。
【００４３】
最初に、図６を参照すると、アドレス変換／メモリ・アクセスでアドレス全体が使用される例が示されている。この従来技法では、ページ・テーブルを含む６レベルの変換テーブルが必要である。ＩＯＡＴポインタによって、最高レベル・テーブル（たとえばこの例では、第５レベル・テーブル）の開始がポイントされ、その後、テーブル内のエントリの位置を特定するために、ＰＣＩアドレスのビットが使用される。各変換テーブル・エントリは、低レベル変換テーブルの始まりまたはページをポイントする（たとえば、第５レベル・テーブル内のエントリは第４レベル・テーブルの始まりをポイントする）。
【００４４】
この例では、ＤＭＡアドレス・スペース（ＤＭＡＡＳ）は６Ｍサイズであり、各テーブルは最大５１２の８バイト・エントリを有する４Ｋバイトである（アドレスのサイズに基づいて、１２８エントリを有する第５レベル・テーブルを除く）。たとえばアドレスは、６４ビット：ＦＦＦＦ  Ｃ０００  ０００９  Ｃ６００である。第５レベル・テーブルの始まりはＩＯＡＴポインタによってポイントされ、第４レベル・テーブルの始まりの位置を特定するために第５レベル・テーブルにインデックス付けするためにＰＣＩアドレスのビット６３：５７が使用され、第３レベル・テーブルの始まりの位置を特定するために第４レベル・テーブルにインデックス付けするためにＰＣＩアドレスのビット５６：４８が使用され、第２レベル・テーブルの始まりの位置を特定するために第３レベル・テーブルにインデックス付けするためにビット４７：３９が使用され、第１レベル・テーブルの始まりの位置を特定するために第２レベル・テーブルにインデックス付けするためにビット３８：３０が使用され、ページ・テーブルの始まりの位置を特定するために第１レベル・テーブルにインデックス付けするためにビット２９：２１が使用され、ページの始まりの位置を特定するためにページ・テーブルにインデックス付けするためにビット２０：１２が使用され、４Ｋページ内のエントリの位置を特定するためにビット１１：０が使用される。
【００４５】
これは、アドレス・スペースが同じサイズ（たとえば６Ｍ）であり、アドレスが同じであるが、変換技法が変換中にアドレス・ビットのいくつかを無視する、図７の例とは対照的である。この例では、アドレスのビット６３：３０は変換について無視される。ＩＯＡＴポインタは、第１レベル・テーブルの始まりをポイントし、ページ・テーブルの始まりの位置を特定するために第１レベル・テーブルにインデックス付けするためにビットＰＣＩアドレスのビット２９：２１が使用され、ページの始まりの位置を特定するために適切なページ・テーブルにインデックス付けするためにビット２０：１２が使用され、４Ｋページにインデックス付けするためにビット１１：０が使用される。
【００４６】
図に示されるように、第１レベル・テーブル５００は３つのエントリ５０２を含み、それぞれが３つのページ・テーブル５０４のうちの１つにアドレスを提供する。したがって、必要なページ・テーブルの数、したがって他のレベルのテーブルの数は、たとえばＤＭＡアドレス・スペースのサイズ、変換テーブルのサイズ、またはページのサイズ、あるいはそれらすべてに依存する。この例では、ＤＭＡアドレス・スペースは６Ｍであり、各ページ・テーブルは４Ｋで、５１２までのエントリを有する。したがって各ページ・テーブルは２Ｍまでのメモリをマッピングすることができる（４Ｋ％５１２エントリ）。したがって、６Ｍのアドレス・スペースには３つのページ・テーブルが必要である。第１レベル・テーブルは、各ページ・テーブルについて１つの、３つのエントリを保持することが可能であるため、この例では、他のレベルのアドレス変換テーブルは不要である。
【００４７】
他の実施形態では、アドレス変換に使用される異なるフォーマットのアドレス変換テーブルが存在可能であり、フォーマット内に変形が存在可能である。したがって、特定のテーブルまたはページにインデックス付けするために使用されるビットに、変形が存在する。これらの例のいくつかについて、図８および図９を参照しながら説明する。
【００４８】
たとえば、１つのフォーマットは、変換テーブルがＣＰＵ  ＤＡＴ変換に使用される変換テーブルに適合する、ＣＰＵ  ＤＡＴ適合フォーマットである。様々なＣＰＵ  ＤＡＴ適合フォーマットが存在可能であり、その例について図８を参照しながら説明する。図に示されるように、例として、一方のＣＰＵ  ＤＡＴ適合フォーマットは４ＫページＣＰＵ  ＤＡＴ適合フォーマット５５０であり、他方は１ＭページＣＰＵ  ＤＡＴ適合フォーマット５５２である。示されたビット数は、そのページまたはテーブルにインデックス付けするため（またはそうでなければ、そのページまたはテーブル内のエントリの位置を特定するため）に使用されるアドレス・ビット数である。たとえば、ＰＣＩアドレスの１２ビット５５４は、４Ｋページ５５６内へのバイト・オフセットとして使用され、８ビット５５８はページ・テーブル５６０内へのインデックスとして使用され、１１ビット５６２はセグメント・テーブル５６４内へのインデックスとして使用される、などである。指定されたアドレス変換テーブルの下で位置が特定されるのは、そのアドレス変換テーブルによってサポートされるアドレス・スペースの最大サイズである。たとえば、ページ・テーブル５６０は１ＭのＤＭＡアドレス・スペースをサポートし、セグメント・テーブル５６４は２ＧのＤＭＡアドレス・スペースをサポートする、などである。この図、ならびに図９では、Ｋ＝キロバイト、Ｍ＝メガバイト、Ｇ＝ギガバイト、Ｔ＝テラバイト、Ｐ＝ペタバイト、およびＥ＝エクサバイトである。
【００４９】
図に示されるように、ページのサイズが大きくなるほど、変換テーブルのレベル数は減少する。たとえば４Ｋページ５５６の場合、ページ・テーブルが必要であるが、１Ｍページには必要ない。他の例および変形が可能である。
【００５０】
他のアドレス変換フォーマットは、拡張アドレス変換テーブルが使用されるＩ／Ｏ拡張アドレス変換フォーマットである。Ｉ／Ｏ拡張アドレス変換フォーマットの様々な例が、図９に示される。たとえば、４Ｋページを伴う４Ｋアドレス変換テーブル５７０、４Ｋページを伴う１Ｍアドレス変換テーブル５７２、および１Ｍページを伴う１Ｍアドレス変換テーブル５７４の、フォーマットが示されている。ＣＰＵ  ＤＡＴ適合フォーマットと同様に、リスト表示されたビットの数は、特定のテーブル内でエントリの位置を特定するために使用されるビットである。たとえば参照番号５７６では、１２ビットが４Ｋページ内へのオフセットである。同様に、参照番号５７８では、Ｉ／Ｏページ・テーブルにインデックス付けするために９ビットが使用される。このＩ／Ｏページ・テーブルでは、２ＭサイズのＤＭＡアドレス・スペースが可能である。多くの他の例が存在する。
【００５１】
１つの特定の実装では、アダプタへのＤＭＡアドレス・スペースの登録を実行するために、ＰＣＩ機能制御修正（ＭＰＦＣ）命令と呼ばれる命令が使用される。たとえば、オペレーティング・システムは、どのアドレス変換フォーマットを使用したいかを決定し、そのフォーマットに対するアドレス変換テーブルを構築した後、命令のオペランドとしてそのフォーマットが含まれるＭＰＦＣ命令を発行する。一例では、命令のフォーマットおよび他のオペランドが、命令のオペランドである機能情報ブロック（以下で説明）に含まれる。次にこの機能情報ブロックは、ＤＴＥ、および一実施形態では、オプションで、アダプタの動作パラメータを含む機能テーブル・エントリ（ＦＴＥ）を、更新するために使用される。
【００５２】
この命令に関する細部の一実施形態および、特に登録プロセスについて、図１０〜図１６を参照しながら説明する。図１０を参照すると、ＰＣＩ機能制御修正命令６００は、たとえばＰＣＩ機能制御修正命令を示す命令コード６０２と、動作パラメータが確立されているアダプタ機能に関する様々な情報が含まれる位置を指定する第１のフィールド６０４と、ＰＣＩ機能情報ブロック（ＦＩＢ）のフェッチ元である位置を指定する第２のフィールド６０６と、を含む。フィールド１および２によって指定された位置のコンテンツについて、以下でさらに説明する。
【００５３】
一実施形態では、フィールド１は様々な情報を含む汎用レジスタを指定する。図１１に示されるように、レジスタのコンテンツは、たとえば、どの修正命令が実行されているかの代わりに、アダプタ機能のハンドルを識別する機能ハンドル６１０と、機能ハンドルによって指定されたアダプタ機能に関連付けられたシステム・メモリ内のアドレス・スペースを指定するアドレス・スペース６１２と、アダプタ機能に関して実行される動作を指定する動作制御６１４と、事前定義されたコードによって命令が完了した場合に命令に関する状況を提供する状況６１６と、を含む。
【００５４】
一実施形態では、機能ハンドルは、たとえばハンドルが実行可能かどうかを示す実行可能インジケータと、アダプタ機能を識別する機能番号（これは静的識別子であり、機能テーブルにインデックス付けするために使用可能である）と、この機能ハンドルの特定のインスタンスを指定するインスタンス番号と、を含む。各アダプタ機能について１つの機能ハンドルが存在し、機能テーブル内の機能テーブル・エントリ（ＦＴＥ）の位置を特定するために使用される。各機能テーブル・エントリは、動作パラメータまたはそのアダプタ機能に関連付けられた他の情報あるいはその両方を含む。一例では、機能テーブル・エントリは、以下を含む。
インスタンス番号：このフィールドは、機能テーブル・エントリに関連付けられたアダプタ機能ハンドルの特定のインスタンスを含む。
デバイス・テーブル・エントリ（ＤＴＥ）インデックス１…ｎ：１つまたは複数のデバイス・テーブル・インデックスが存在可能であり、各インデックスはデバイス・テーブル・エントリ（ＤＴＥ）の位置を特定するためのデバイス・テーブルへのインデックスである。アダプタ機能につき１つまたは複数のデバイス・テーブル・エントリが存在し、各エントリは、アダプタ機能の要求（たとえば、ＤＭＡ要求、ＭＳＩ要求）を処理するために使用される情報、およびアダプタ機能に関連付けられた要求に関する情報（たとえばＰＣＩ命令）を含む、そのアダプタ機能に関連付けられた情報を含む。各デバイス・テーブル・エントリは、アダプタ機能に割り当てられたシステム・メモリ内の１つのアドレス・スペースに関連付けられる。アダプタ機能は、アダプタ機能に割り当てられたシステム・メモリ内の１つまたは複数のアドレス・スペースを有することができる。
【００５５】
ビジー・インジケータ：このフィールドは、アダプタ機能がビジーであるかどうかを示す。
永続的エラー状態インジケータ：このフィールドは、アダプタ機能が永続的エラー状態にあるかどうかを示す。
回復開始インジケータ：このフィールドは、アダプタ機能に関して回復が開始されたかどうかを示す。
許可インジケータ：このフィールドは、アダプタ機能の制御を試行しているオペレーティング・システムが、それを実行する権限を有するかどうかを示す。
実行可能インジケータ：このフィールドは、アダプタ機能が実行可能であるかどうかを示す（たとえば、１＝実行可能、０＝実行不可）。
要求側識別子（ＲＩＤ）：これは、アダプタ機能の識別子であり、たとえばバス番号、デバイス番号、および機能番号を含む。
【００５６】
一例では、このフィールドはアダプタ機能の構成スペースのアクセスに使用される。（アダプタのメモリは、たとえば構成スペース、Ｉ／Ｏスペース、または、１つまたは複数のメモリ・スペース、あるいはそれらすべてを含む、アダプタ・スペースとして定義可能である。）一例では、構成スペースは、オペレーティング・システム（または他の構成）によってアダプタ機能に発行された命令内の構成スペースを指定することによってアクセス可能である。命令内に指定されるのは、構成スペース内へのオフセット、および、ＲＩＤを含む適切な機能テーブル・エントリの位置を特定するために使用される機能ハンドルである。ファームウェアは命令を受信し、これが構成スペース用であるかどうかを決定する。したがって、Ｉ／Ｏハブへの要求を生成するためにＲＩＤを使用し、Ｉ／Ｏハブはアダプタにアクセスするための要求を作成する。アダプタ機能の位置はＲＩＤに基づき、オフセットはアダプタ機能の構成スペース内へのオフセットを指定する。
【００５７】
本明細書で使用される場合、ファームウェアは、たとえばプロセッサのマイクロコード、ミリコード、またはマクロコード、あるいはそれらすべてを含む。これはたとえば、ハードウェア・レベル命令、または、高位レベル機械コードの実装で使用されるデータ構造、あるいはその両方を含む。一実施形態では、これは、たとえば、通常、基礎となるハードウェア特有の信頼できるソフトウェアまたはマイクロコードを含み、システム・ハードウェアへのオペレーティング・システム・アクセスを制御する、マイクロコードとして送達されるプロプライエタリ・コードを含む。
【００５８】
ベース・アドレス・レジスタ（ＢＡＲ）（１からｎ）：このフィールドは、最初に指定されたアダプタ機能に関連付けられ、その値もアダプタ機能に関連付けられたベース・アドレス・レジスタ内に格納される、ＢＡＲ０〜ＢＡＲｎとして指定された、複数の符号なし整数を含む。例として、各ＢＡＲは、アダプタ機能内のメモリ・スペースまたはＩ／Ｏスペースの開始アドレスを指定し、これが６４または３２ビットのメモリ・スペースであるか、あるいは３２ビットのＩ／Ｏスペースであるかの、アドレス・スペースのタイプも示す。
一例では、これは、アダプタ機能のメモリ・スペースまたはＩ／Ｏスペースあるいはその両方にアクセスするために使用される。たとえば、アダプタ機能にアクセスするための命令内に提供されるオフセットは、アダプタ機能にアクセスするために使用されることになるアドレスを取得するために命令内に指定されたアドレス・スペースに関連付けられたベース・アドレス・レジスタ内の値に追加される。命令内に提供されるアドレス・スペース識別子は、アクセスされることになるアダプタ機能内のアドレス・スペースと、使用されることになる対応するＢＡＲとを識別する。
サイズ１…ｎ：このフィールドは、ＳＩＺＥ０〜ＳＩＺＥｎとして指定された、複数の符号なし整数を含む。サイズ・フィールドの値は、非ゼロの場合、以前に説明されたＢＡＲに対応する各エントリを備えた各アドレス・スペースのサイズを表す。
【００５９】
ＢＡＲおよびサイズに関する詳細について、以下で説明する。
１．ＢＡＲがアダプタ機能に関して実装されない場合、ＢＡＲフィールドおよびその対応するサイズ・フィールドはどちらのゼロとして格納される。
２．ＢＡＲフィールドがＩ／Ｏアドレス・スペースまたは３２ビット・メモリ・アドレス・スペースのいずれかを表す場合、対応するサイズ・フィールドは非ゼロであり、アドレス・スペースのサイズを表す。
３．ＢＡＲフィールドが６４ビット・メモリ・アドレス・スペースを表す場合、
ａ．ＢＡＲｎフィールドは最下位アドレス・ビットを表す。
ｂ．次の連続するＢＡＲｎ＋１フィールドは、最上位アドレス・ビットを表す。
ｃ．対応するＳＩＺＥｎフィールドは、非ゼロであり、アドレス・スペースのサイズを表す。
ｄ．対応するＳＩＺＥｎ＋１フィールドは有意ではなく、ゼロとして格納される。
【００６０】
内部ルーティング情報：この情報は、アダプタへの特定のルーティングを実行するために使用される。例として、たとえばこれは、ノード、プロセッサ・チップ、およびハブ・アドレス指定情報を含む。
【００６１】
状況指示：これは、ロード／格納動作が阻止されているか、またはアダプタがエラー状態にあるかの指示、ならびに他の指示を提供する。
【００６２】
一例では、ビジー・インジケータ、永続的エラー状態インジケータ、および回復開始インジケータは、ファームウェアによって実行されるモニタリングに基づいて設定される。さらに、許可インジケータは、たとえばポリシーに基づいて設定され、ＢＡＲ情報は、プロセッサ（たとえばプロセッサのファームウェア）によるバス・ウォーク中に発見された構成情報に基づく。他のフィールドは、構成、初期化、またはイベント、あるいはそれらすべてに基づいて、設定可能である。他の実施形態では、機能テーブル・エントリは、より多い、より少ない、または異なる情報を、含むことができる。含まれる情報は、アダプタ機能によってサポートされるか、またはそれに対して実行可能化される、動作に依存することができる。
【００６３】
一例では、図１２を参照すると、フィールド２は、関連付けられたアダプタ機能に関する情報を含む、ＰＣＩ機能情報ブロック（ＦＩＢ）の論理アドレス６２０を指定する。機能情報ブロックは、アダプタ機能に関連付けられた、デバイス・テーブル・エントリまたは機能テーブル・エントリ（または他の位置）、あるいはその両方を更新するために使用される。情報は、アダプタの初期化時または構成時、あるいはその両方で、または特定のイベントに応答して、あるいはその両方で、ＦＩＢに格納される。
【００６４】
機能情報ブロック（ＦＩＢ）に関する他の詳細について、図１３を参照しながら説明する。一実施形態では、機能情報ブロック６５０は、以下のフィールドを含む。
フォーマット６５１：このフィールドは、ＦＩＢのフォーマットを指定する。
遮断制御６５２：このフィールドは、ページ可能（pageable）モード・ゲストによる特有の命令のゲスト実行の結果、命令の遮断が生じるかどうかを示すために使用される。
エラー指示６５４：このフィールドは、ダイレクト・メモリ・アクセスおよびアダプタ割り込みに関するエラー状態指示を含む。ビットが設定された場合（たとえば１）、アダプタ機能に関するダイレクト・メモリ・アクセスまたはアダプタ割り込みの実行中に、１つまたは複数のエラーが検出されている。
ロード／格納阻止（blocked）６５６：このフィールドは、ロード／格納動作が阻止されるかどうかを示す。
ＰＣＩ機能有効６５８：このフィールドは、アダプタ機能に関する実行可能化制御を含む。ビットが設定された場合（たとえば１）、アダプタ機能はＩ／Ｏ動作に対して実行可能化されるものとみなされる。
アドレス・スペース登録済み６６０：このフィールドは、アダプタ機能に関するダイレクト・メモリ・アクセス実行可能化制御を含む。フィールドが設定された場合（たとえば１）、ダイレクト・メモリ・アクセスは実行可能化される。
ページ・サイズ６６１：このフィールドは、ＤＭＡメモリ・アクセスによってアクセスされることになるページのサイズまたは他のメモリ単位を示す。
ＰＣＩベース・アドレス（ＰＢＡ）６６２：このフィールドは、アダプタ機能に割り当てられるシステム・メモリ内のアドレス・スペースに関するベース・アドレスである。これは、アダプタ機能が、指定されたＤＭＡアドレス・スペースへのダイレクト・メモリ・アクセスに使用可能である、最下位仮想アドレスを表す。
ＰＣＩアドレス限界（ＰＡＬ）６６４：このフィールドは、アダプタ機能が、指定されたＤＭＡアドレス・スペース内でアクセス可能である、最高位仮想アドレスを表す。
入力／出力アドレス変換ポインタ（ＩＯＡＴ）６６６：入力／出力アドレス変換ポインタは、ＰＣＩ仮想アドレス変換によって使用される任意の変換テーブルのうちの第１を指定するか、または、変換の結果であるストレージのフレームの絶対アドレスを直接指定することができる。
割り込みサブクラス（ＩＳＣ）６６８：このフィールドは、アダプタ機能に関するアダプタ割り込みを提示するために使用される、割り込みサブクラスを含む。
割り込みの数（ＮＯＩ）６７０：このフィールドは、アダプタ機能用に受け入れられる別個の割り込みコードの数を指定する。さらにこのフィールドは、アダプタ割り込みビット・ベクトル・アドレスおよびアダプタ割り込みビット・ベクトル・オフセット・フィールドによって指定された、アダプタ割り込みビット・ベクトルのサイズを、ビット単位でも定義する。
アダプタ割り込みビット・ベクトル・アドレス（ＡＩＢＶ）６７２：このフィールドは、アダプタ機能に関するアダプタ割り込みビット・ベクトルのアドレスを指定する。このベクトルは割り込み処理で使用される。
アダプタ割り込みビット・ベクトル・オフセット６７４：このフィールドは、アダプタ機能に関する第１のアダプタ割り込みビット・ベクトル・ビットのオフセットを指定する。
アダプタ割り込み要約ビット・アドレス（ＡＩＳＢ）６７６：このフィールドは、オプションで、割り込み処理で使用される、アダプタ割り込み要約ビットを指定するアドレスを提供する。
アダプタ割り込み要約ビット・オフセット６７８：このフィールドは、アダプタ割り込み要約ビット・ベクトルへのオフセットを提供する。
機能測定ブロック（ＦＭＢ）６８０：このフィールドは、アダプタ機能に関する測定値を収集するために使用される、機能測定ブロックのアドレスを提供する。
機能測定ブロック・キー６８２：このフィールドは、機能測定ブロックにアクセスするためのアクセス・キーを含む。
要約ビット通知制御６８４：このフィールドは、使用されている要約ビット・ベクトルが存在するかどうかを示す。
命令認証トークン６８６：このフィールドは、ページ可能ストレージ・モード・ゲストがＰＣＩ命令の実行を認証されているかどうかを決定するために使用される。
【００６５】
一例では、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）において、ページ可能ゲストは、レベル２の解釈で、解釈実行開始（ＳＩＥ）命令を介して解釈的に（interpretively）実行される。たとえば、論理区画（ＬＰＡＲ）ハイパーバイザは、物理的な固定メモリにおける論理区画を開始するために、ＳＩＥ命令を実行する。ｚ／ＶＭ（Ｒ）がその論理区画におけるオペレーティング・システムである場合、そのＶ＝Ｖ（仮想）ストレージにおいてそのゲスト（仮想）機会を実行するために、ＳＩＥ命令を発行する。したがって、ＬＰＡＲハイパーバイザはレベル１のＳＩＥを使用し、ｚ／ＶＭ（Ｒ）ハイパーバイザはレベル２のＳＩＥを使用し、さらに
アドレス変換フォーマット６８７：このフィールドは、変換で使用されることになる最高レベル変換テーブルのアドレス変換のために選択されたフォーマット（たとえば、最高レベル・テーブル（たとえば、セグメント・テーブル、領域第３など）の指示）を示す。
【００６６】
ＰＣＩ機能制御修正命令内に指定された機能情報ブロックは、選択されたデバイス・テーブル・エントリ、機能テーブル・エントリ、または、命令内に指定されたアダプタ機能に関連付けられた他のファームウェア制御、あるいはそれらすべてを、修正するために使用される。デバイス・テーブル・エントリ、機能テーブル・エントリ、または他のファームウェア制御、あるいはそれらすべてを修正することによって、あるサービスがアダプタに提供される。これらのサービスは、たとえばアダプタ割り込み、アドレス変換、エラー状態リセット、ロード／格納阻止リセット、機能測定パラメータ設定、および遮断制御設定を含む。
【００６７】
ＰＣＩ機能制御修正命令に関連付けられた論理の一実施形態について、図１４を参照しながら説明する。一例では、この命令は、オペレーティング・システム（または他の構成）によって発行され、オペレーティング・システムを実行しているプロセッサ（たとえばファームウェア）によって実行される。本明細書の例では、命令およびアダプタ機能はＰＣＩベースである。しかしながら、他の例では、異なるアダプタ・アーキテクチャおよび対応する命令が使用可能である。
【００６８】
一例では、オペレーティング・システムは、ＰＣＩ機能ハンドル、ＤＭＡアドレス・スペース識別子、動作制御、および機能情報ブロックのアドレスの、オペランドを、（たとえば、命令によって指定された１つまたは複数のレジスタにおいて）命令に提供する。
【００６９】
図１４を参照すると、最初に、照会７００で、ＰＣＩ機能制御修正命令を可能にする機構がインストールされるかどうかについて決定される。この決定は、たとえば制御ブロックに格納されたインジケータをチェックすることによって実行される。機構がインストールされない場合、ステップ７０２で例外条件が提供される。インストールされる場合、照会７０４で、ページ可能ストレージ・モード・ゲスト（または他のゲスト）によって命令が発行されたかどうかが決定される。発行された場合、ステップ７０６でホスト・オペレーティング・システムは、そのゲストに関する動作をエミュレートすることになる。
【００７０】
あるいは、照会７０８で、オペランドのうちの１つまたは複数が位置合わせされるかどうかについて決定される。たとえば、機能情報ブロックのアドレスがダブルワード境界上にあるかどうかについて決定される。一例では、これはオプションである。オペランドが位置合わせされない場合、ステップ７１０で例外条件が提供される。位置合わせされる場合、照会７１２で、機能情報ブロックにアクセス可能であるかどうかについて決定される。アクセス可能でない場合、ステップ７１４で例外条件が提供される。アクセス可能である場合、照会７１６で、ＰＣＩ機能制御修正命令のオペランド内に提供されたハンドルが実行可能であるかどうかについて決定される。一例では、この決定は、ハンドル内の実行可能インジケータをチェックすることによって実行される。ハンドルが実行可能でない場合、ステップ７１８で例外条件が提供される。
【００７１】
ハンドルが実行可能である場合、ステップ７２０で、機能テーブル・エントリの位置を特定するためにハンドルが使用される。すなわち、動作パラメータが確立されることになるアダプタ機能に対応する機能テーブル・エントリの位置を特定するために、ハンドルの少なくとも一部が機能テーブルへのインデックスとして使用される。
【００７２】
照会７２２で、機能テーブル・エントリが見つかったかどうかについて決定される。見つからなかった場合、ステップ７２４で例外条件が提供される。見つかった場合、照会７２６で、命令を発行している構成がゲストであれば、ステップ７２８で例外条件（たとえばホストに対する遮断）が提供される。この照会は、指定されていれば、構成がゲストでない場合、または他の認証がチェックできる場合、無視することができる。
【００７３】
照会７３０で、機能が実行可能であるかどうかについて決定される。一例では、この決定は、機能テーブル・エントリ内の実行可能インジケータをチェックすることによって実行される。実行可能でない場合、ステップ７３２で例外条件が提供される。
【００７４】
機能が実行可能である場合、照会７３４で、回復がアクティブであるかどうかについて決定される。機能テーブル・エントリ内の回復インジケータによって決定された回復がアクティブである場合、ステップ７３６で例外条件が提供される。しかしながら回復がアクティブでない場合、照会７３８で、機能がビジーであるかどうかについてさらに決定される。この決定は、機能テーブル・エントリ内のビジー・インジケータをチェックすることによって実行される。機能がビジーである場合、ステップ７４０でビジー条件が提供される。このビジー条件で、ドロップする代わりに命令を再試行することができる。
【００７５】
機能がビジーでない場合、照会７４２で、機能情報ブロック・フォーマットが有効であるかどうかについて、さらに決定される。たとえば、このフォーマットがシステムによってサポートされているかどうかを決定するために、ＦＩＢのフォーマット・フィールドがチェックされる。無効である場合、ステップ７４４で例外条件が提供される。機能情報ブロック・フォーマットが有効である場合、照会７４６で、命令のオペランド内に指定された動作制御が有効であるかどうかについて、さらに決定される。すなわち、動作制御が、この命令に関して指定された動作制御のうちの１つであるかどうか、である。無効である場合、ステップ７４８で例外条件が提供される。しかしながら動作制御が有効である場合、指定されている特定の動作制御で処理が続行する。
【００７６】
指定可能な１つの動作制御は、アダプタに関するアドレス変換を制御する際に使用される、Ｉ／Ｏアドレス変換パラメータ登録動作である。この動作では、Ｉ／Ｏアドレス変換に関連するＰＣＩ機能パラメータが、ＤＴＥ、ＦＴＥ、または、ＦＩＢの適切なパラメータからの他の位置、あるいはそれらすべてで設定され、これは命令に対するオペランドである。これらのパラメータは、たとえば、ＰＣＩベース・アドレス、ＰＣＩアドレス限界（別名、ＰＣＩ限界または限界）、アドレス変換フォーマット、ページ・サイズ、および、Ｉ／Ｏアドレス変換ポインタを含み、これらはこの動作に対するオペランドである。ＤＭＡ開始アドレス（ＳＤＭＡ）およびＤＭＡ終了アドレス（ＥＤＭＡ）を含む暗黙（implied）オペランドも存在し、これらは、命令を実行しているプロセッサがアクセス可能な位置に格納される。
【００７７】
Ｉ／Ｏアドレス変換に関する動作パラメータを確立するための論理の一実施形態について、図１５を参照しながら説明する。最初に、照会８００で、ＦＩＢ内のＰＣＩベース・アドレスがＦＩＢ内のＰＣＩ限界よりも大きいかどうかについて決定される。ベース・アドレスと限界とのこの比較で、ベース・アドレスの方が限界よりも大きいものと示された場合、ステップ８０２で例外条件が認識される。しかしながら、ベース・アドレスの方が限界よりも小さいかまたは等しい場合、照会８０４で、アドレス変換フォーマットおよびページ・サイズが有効であるかどうかについてさらに決定される。これらが無効である場合、ステップ８０６で例外条件が提供される。しかしながら、これらが有効である場合、照会８０８で、（ベース・アドレスおよび限界に基づいて）アドレス・スペースのサイズが変換容量を超えているかどうかについて決定される。一例では、上位レベル・テーブルのフォーマットに基づいて、アドレス・スペースのサイズと、可能な最大のアドレス変換容量とが比較される。たとえば、上位レベル・テーブルがＤＡＴ適合セグメント・テーブルである場合、最大変換容量は２ギガバイトである。
【００７８】
アドレス・スペースのサイズが変換容量を超える場合、ステップ８１０で例外条件が提供される。超えない場合、照会８１２で、ベース・アドレスがＤＭＡ開始アドレスよりも小さいかどうかについてさらに決定される。小さい場合、ステップ８１４で例外条件が提供される。小さくない場合、照会８１６で、アドレス限界がＤＭＡ終了アドレスよりも大きいかどうかについてさらに決定される。大きい場合、ステップ８１８で例外条件が提供される。一例では、ＤＭＡ開始アドレスおよびＤＭＡ終了アドレスは、システム規模のポリシーに基づくものである。
【００７９】
その後、照会８２０で、必要であれば、Ｉ／Ｏアドレス変換を実行するために十分なリソースが使用可能であるかどうかについて決定される。使用可能でない場合、ステップ８２２で例外条件が提供される。使用可能である場合、照会８２４で、Ｉ／Ｏアドレス変換パラメータがＦＴＥおよびＤＴＥ内にすでに登録されているかどうかについて決定される。これは、ＦＴＥ／ＤＴＥ内のパラメータの値をチェックすることによって決定される。たとえば、ＦＴＥ／ＤＴＥ内の値がゼロかまたは他の定義済みの値である場合、登録は実行されていない。ＦＴＥの位置を特定するためには命令内に提供されたハンドルが使用され、ＤＴＥの位置を特定するためにはＦＴＥ内のデバイス・インデックスが使用される。
【００８０】
アドレス変換に関してアダプタ機能がすでに登録されている場合、ステップ８２６で例外条件が提供される。登録されていない場合、照会８２８で、指定されたＤＭＡアドレス・スペースが有効であるかどうか（すなわち、ＤＴＥが実行可能なアドレス・スペースであるかどうか）について決定される。有効でない場合、ステップ８３０で例外条件が提供される。すべてのチェックが首尾よく行われた場合、ステップ８３２で、変換パラメータがデバイス・テーブル・エントリ内に、およびオプションで、対応する機能テーブル・エントリ（または他の指定された位置）内に、配置される。たとえば、Ｉ／Ｏアドレス変換に関するＰＣＩ機能パラメータが機能情報ブロックからコピーされ、ＤＴＥ／ＦＴＥ内に配置される。これらのパラメータは、たとえばＰＣＩベース・アドレス、ＰＣＩアドレス限界、変換フォーマット、ページ・サイズ、およびＩ／Ｏアドレス変換ポインタを含む。この動作により、指定されたＤＭＡアドレス・スペースへのＤＭＡアクセスが実行可能となる。これにより、アダプタ機能に関するＩ／Ｏアドレス変換が実行可能となる。
【００８１】
ＰＣＩ機能制御修正命令によって指定可能な他の動作制御は、Ｉ／Ｏアドレス変換パラメータ登録解除動作であり、その例について図１６を参照しながら説明する。この動作では、Ｉ／Ｏアドレス変換に関連する機能パラメータがゼロにリセットされる。この動作で、指定されたＤＭＡアドレス・スペースへのＤＭＡアクセスが実行不可となり、そのＤＭＡアドレス・スペースに対するＩ／Ｏ変換索引（lookaside）バッファ・エントリのパージ（purge）が実行される。これにより、アドレス変換が実行不可となる。
【００８２】
図１６を参照すると、一実施形態では、照会９００で、Ｉ／Ｏアドレス変換パラメータが登録されていないかどうかについて決定される。一例では、この決定は、ＦＴＥまたはＤＴＥ内の適切なパラメータの値をチェックすることによって実行される。それらのフィールドがゼロまたは何らかの指定された値である場合、それらは登録されていない。したがって、ステップ９０２で例外条件が提供される。それらが登録されている場合、照会９０４で、ＤＭＡアドレス・スペースが有効であるかどうかについて決定される。これが無効である場合、ステップ９０６で例外条件が提供される。ＤＭＡアドレス・スペースが有効である場合、ステップ９０８で、デバイス・テーブル・エントリ内、およびオプションで、対応する機能テーブル・エントリ内の、変換パラメータがクリアされる。
【００８３】
上記で、アダプタによってシステム・メモリ・アドレスに提供された入力／出力アドレスを変換するための効率的なメカニズムについて、詳細に説明した。一例では、メモリにアクセスする際に、フルＰＣＩアドレス（たとえば６４ビット・アドレス全体）が使用されるが、変換のためにアドレスの一部のみを使用することによって、アドレス変換ルックアップが最小限に抑えられる。フル・アドレスの使用によって保護は追加されるが、たとえば変換のために低位ビットのみを使用することで、低レベルの変換ルックアップによってより効率的な変換が可能となる。これにより、オペレーティング・システム仮想アドレスと共存可能な、または同じであることが可能なアドレスを使用する際に、オペレーティング・システムの柔軟性が可能となる。さらに、アダプタがＣＰＵアドレス変換テーブルを共有できるようになり、Ｉ／Ｏはスキャンが必要なテーブルの数を減らすことができる。さらに、異なるアダプタまたはオペレーティング・システムあるいはその両方が、アドレス・スペース領域の切り離しを使用できるようにすることで、保護が追加される。
【００８４】
本明細書で説明される実施形態では、アダプタはＰＣＩアダプタである。本明細書で使用されるＰＣＩは、ＰＣＩまたはＰＣＩｅを含むがこれに限定されない、Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｓｐｅｃｉａｌ  Ｉｎｔｅｒｅｓｔ  Ｇｒｏｕｐ（ＰＣＩ−ＳＩＧ）によって定義されるＰＣＩベース規格に従って実装される、任意のアダプタを言い表す。特定の一例では、Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）は、Ｉ／Ｏアダプタとホスト・システムとの間のトランザクションに関する双方向通信プロトコルを定義する、構成要素レベルの相互接続標準である。ＰＣＩ通信は、ＰＣＩｅバス上の伝送に関するＰＣＩｅ標準に従ってパケット内にカプセル化される。Ｉ／Ｏアダプタから発せられ、ホスト・システムで終端するトランザクションは、上り方向（upbound）トランザクションと呼ばれる。ホスト・システムから発せられ、Ｉ／Ｏアダプタで終端するトランザクションは下り方向（downbound）トランザクションと呼ばれる。ＰＣＩｅトポロジは、ＰＣＩｅバスを形成するためにペア（たとえば、一方は上り方向リンク、一方は下り方向リンク）を成す２地点間一方向リンクに基づく。ＰＣＩｅ標準はＰＣＩ−ＳＩＧによって維持および公開される。
【００８５】
当業者であれば理解されるように、本発明の態様は、システム、方法、またはコンピュータ・プログラム製品として具体化することができる。したがって、本発明の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなど）、または、本明細書ではすべてが全体として「回路」、「モジュール」、または「システム」と呼ばれることのあるソフトウェアおよびハードウェアの態様を組み合わせた実施形態の、形を取ることができる。さらに、本発明の態様は、具体化されたコンピュータ読み取り可能プログラム・コードを有する１つまたは複数のコンピュータ読み取り可能メディア内に具体化された、コンピュータ・プログラム製品の形を取ることができる。
【００８６】
１つまたは複数のコンピュータ読み取り可能メディアの任意の組み合わせを使用することができる。コンピュータ読み取り可能メディアは、コンピュータ読み取り可能ストレージ・メディアとすることができる。コンピュータ読み取り可能ストレージ・メディアは、たとえば、電子、磁気、光、電磁、赤外線、または半導体の、システム、装置、またはデバイス、あるいはそれらの任意の好適な組み合わせとすることができるが、これらに限定されるものではない。コンピュータ読み取り可能ストレージ・メディアのさらに特定の例（非網羅的リスト）は、１本または複数本のワイヤを有する電気接続、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、消去可能プログラマブル読み取り専用メモリ（ＥＥＰＲＯＭまたはフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、光ストレージ・デバイス、磁気ストレージ・デバイス、またはそれらの任意の好適な組み合わせを含む。本書との関連で、コンピュータ読み取り可能ストレージ・メディアは、命令実行のシステム、装置、またはデバイスによって、またはそれらに関連して使用するためのプログラムを、含むかまたは格納可能な、任意の有形メディアとすることができる。
【００８７】
次に図１７を参照すると、一例では、コンピュータ・プログラム製品１０００は、たとえば、本発明の１つまたは複数の態様を提供および容易にするためにコンピュータ読み取り可能プログラム・コード手段または論理１００４をその上に格納するための、１つまたは複数のコンピュータ読み取り可能ストレージ・メディア１００２を含む。
【００８８】
コンピュータ読み取り可能メディア上に具体化されたプログラム・コードは、無線、有線、光ファイバ・ケーブル、ＲＦなど、またはそれらの任意の好適な組み合わせを含むがこれらに限定されない、適切なメディアを使用して伝送可能である。
【００８９】
本発明の態様に関する動作を実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋などのオブジェクト指向プログラミング言語と、「Ｃ」プログラミング言語、アセンブラ、または同様のプログラミング言語などの、従来の手続き型プログラミング言語とを含む、１つまたは複数のプログラミング言語の任意の組み合わせで作成可能である。プログラム・コードは、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロン型ソフトウェア・パッケージとして、部分的にユーザのコンピュータ上および部分的にリモート・コンピュータ上で、あるいは、完全にリモートのコンピュータまたはサーバ上で、実行可能である。後者のシナリオでは、リモート・コンピュータを、ローカル・エリア・ネットワーク（ＬＡＮ）またはワイド・エリア・ネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを介してユーザのコンピュータに接続するか、あるいは、（たとえば、インターネット・サービス・プロバイダを使用し、インターネットを介して）外部コンピュータに接続することができる。
【００９０】
本明細書では、本発明の実施形態に従った方法、装置（システム）、およびコンピュータ・プログラム製品の、流れ図またはブロック図あるいはその両方を参照しながら、本発明の態様について説明する。流れ図またはブロック図あるいはその両方の各ブロック、および、流れ図またはブロック図あるいはその両方におけるブロックの組み合わせが、コンピュータ・プログラム命令によって実装可能であることを理解されよう。これらのコンピュータ・プログラム命令は、機械を生成するために、汎用コンピュータ、特定用途向けコンピュータ、または他のプログラマブル・データ処理装置の、プロセッサに提供可能であり、結果としてコンピュータまたは他のプログラマブル・データ処理装置のプロセッサを介して実行する命令が、流れ図またはブロック図あるいはその両方のブロック内に指定された機能／動作を実装するための手段を作成する。
【００９１】
コンピュータ、他のプログラマブル・データ処理装置、または他のデバイスに、特定の様式で機能するように指示することが可能な、これらのコンピュータ・プログラム命令を、コンピュータ読み取り可能メディアに格納することも可能であり、結果として、コンピュータ読み取り可能メディア内に格納された命令が、流れ図またはブロック図あるいはその両方のブロック内に指定された機能／動作を実装する命令を含む製品を生成する。
【００９２】
コンピュータ実装プロセスを生成するために、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを実行させるように、コンピュータ・プログラム命令を、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイス上にロードすることも可能であり、結果として、コンピュータまたは他のプログラマブル装置上で実行する命令は、流れ図またはブロック図あるいはその両方のブロック内に指定された機能／動作を実装するための処理を提供する。
【００９３】
図面内の流れ図およびブロック図は、本発明の様々な実施形態に従った、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。この点で、流れ図またはブロック図内の各ブロックは、指定された論理機能を実装するための１つまたは複数の実行可能命令を含む、モジュール、セグメント、またはコードの一部を表すことが可能である。いくつかの代替の実装では、ブロック内に示された機能が、図に示された順序外で実行可能であることにも留意されたい。たとえば、関連する機能に応じて、連続して示された２つのブロックを実際にはほぼ同時に実行することが可能であるか、またはこのブロックを逆の順序で実行することが可能である。ブロック図または流れ図あるいはその両方の各ブロック、および、ブロック図または流れ図あるいはその両方内のブロックの組み合わせが、指定された機能または動作を実行する特定用途向けハードウェアベース・システム、あるいは、特定用途向けハードウェアとコンピュータ命令との組み合わせによって、実装可能であることにも留意されよう。
【００９４】
上記に加えて、本発明の１つまたは複数の態様は、顧客環境の管理を提示するサービス・プロバイダによる、提供、提示、展開、管理、サービス提供などが可能である。たとえばサービス・プロバイダは、１人または複数の顧客に対して本発明の１つまたは複数の態様を実行する、コンピュータ・コードまたはコンピュータ・インフラストラクチャあるいはその両方を、作成、維持、サポートなどを実行することができる。次に、サービス・プロバイダは、例として、加入または料金契約あるいはその両方の下で、顧客からの支払いを受け取ることができる。加えて、または別の方法として、サービス・プロバイダは、１人または複数の第三者への広告コンテンツの販売から支払いを受け取ることができる。
【００９５】
本発明の一態様では、本発明の１つまたは複数の態様を実行するためのアプリケーションが展開可能である。一例として、アプリケーションの展開は、本発明の１つまたは複数の態様を実行するように動作可能なコンピュータ・インフラストラクチャを提供することを含む。
【００９６】
本発明の他の態様として、コンピュータ読み取り可能コードをコンピューティング・システムに統合することを含む、コンピューティング・インフラストラクチャが展開可能である。コードとコンピューティング・システムとを組み合わせて、本発明の１つまたは複数の態様を実行することができる。
【００９７】
本発明のさらに他の態様として、コンピュータ読み取り可能コードをコンピュータ・システムに統合することを含む、コンピューティング・インフラストラクチャを統合するためのプロセスが提供可能である。コンピュータ・システムはコンピュータ読み取り可能メディアを備え、コンピュータ・メディアは本発明の１つまたは複数の態様を含む。コードとコンピュータ・システムとを組み合わせて、本発明の１つまたは複数の態様を実行することができる。
【００９８】
上記で様々な実施形態について説明したが、これらは単なる例である。たとえば、他のアーキテクチャのコンピューティング環境は、本発明の１つまたは複数の態様を組み込んで使用することができる。例として、インターナショナル・ビジネス・マシーンズ・コーポレーションによって提示されたＰｏｗｅｒ  Ｓｙｓｔｅｍｓサーバまたは他のサーバ、あるいは他の企業のサーバなどの、Ｓｙｓｔｅｍ  ｚ（Ｒ）サーバ以外のサーバは、本発明の１つまたは複数の態様を含むこと、使用すること、またはそれらから恩恵を得ること、あるいはそれらすべてが可能である。さらに、本明細書の例では、アダプタおよびＰＣＩハブはサーバの一部とみなされるが、他の実施形態では、それらは必ずしもサーバの一部とみなされる必要はなく、単に、コンピューティング環境のシステム・メモリまたは他の構成要素あるいはその両方に結合されているものとみなすことができる。コンピューティング環境はサーバである必要はない。さらに、変換テーブルについて説明しているが、任意のデータ構造を使用することが可能であり、テーブルという用語はすべてのこうしたデータ構造を含むものである。さらに、アダプタはＰＣＩベースであるが、本発明の１つまたは複数の態様は、他のアダプタまたは他のＩ／Ｏ構成要素と共に使用可能である。アダプタおよびＰＣＩアダプタは、単なる例である。さらに、本発明から逸脱することなく、他のサイズのアドレス・スペース、アドレス・テーブル、またはページ、あるいはそれらすべてを使用することができる。さらにＤＴＥは、より多い、より少ない、または異なる情報を含むことができる。またさらに、本発明の１つまたは複数の態様を使用して、他のタイプのアドレスを変換することができる。多くの他の変形が可能である。
【００９９】
さらに、他のタイプのコンピューティング環境が、本発明の１つまたは複数の態様からの恩恵を得ることができる。例として、システム・バスを介して直接または間接的にメモリ要素に結合された少なくとも２つのプロセッサを含む、プログラム・コードの格納または実行あるいはその両方を行うために好適なデータ処理システムが使用可能である。メモリ要素は、たとえば、プログラム・コードの実際の実行中に採用されるローカル・メモリと、大容量ストレージと、実行中に大容量ストレージからコードを取り出さなければならない回数を低減させるために少なくともいくつかのプログラム・コードの一時ストレージを提供するキャッシュ・メモリとを、含む。
【０１００】
入力／出力またはＩ／Ｏデバイス（キーボード、ディスプレイ、ポインティング・デバイス、ＤＡＳＤ、テープ、ＣＤ、ＤＶＤ、サム・ドライブ、および他のメモリ・メディアなど）を、直接、または介在するＩ／Ｏコントローラを介して、システムに結合することができる。データ処理システムを、介在する専用または公衆のネットワークを介して、他のデータ処理システムあるいはリモートのプリンタまたはストレージ・デバイスに結合できるようにするために、ネットワーク・アダプタをシステムに結合することもできる。モデム、ケーブル・モデム、およびイーサネット・カードは、使用可能なネットワーク・アダプタのほんのいくつかのタイプである。
【０１０１】
図１８を参照すると、本発明の１つまたは複数の態様を実装するためのホスト・コンピュータ・システム５０００の代表的な構成要素が示されている。代表的なホスト・コンピュータ５０００は、コンピュータ・メモリ（すなわち中央ストレージ）５００２と通信する１つまたは複数のＣＰＵ５００１、ならびに、他のコンピュータまたはＳＡＮなどと通信するためのストレージ・メディア・デバイス５０１１およびネットワーク５０１０へのＩ／Ｏインターフェースを備える。ＣＰＵ５００１は、アーキテクチャ命令セットおよびアーキテクチャ機能を有するアーキテクチャに準拠している。ＣＰＵ  ５００１は、プログラム・アドレス（仮想アドレス）をメモリの実アドレスに変換するための、ダイナミック・アドレス変換（ＤＡＴ）５００３を有することができる。ＤＡＴは、コンピュータ・メモリ５００２のブロックへのその後のアクセスが、アドレス変換の遅延を必要としないように、通常、変換をキャッシュに入れるための変換索引バッファ（ＴＬＢ）５００７を含む。通常、コンピュータ・メモリ５００２とプロセッサ５００１との間に、キャッシュ５００９が採用される。キャッシュ５００９は、複数のＣＰＵが使用可能な大型キャッシュと、大型キャッシュと各ＣＰＵとの間の小型、高速（低レベル）キャッシュとを有する、階層型とすることができる。いくつかの実装では、低レベル・キャッシュは、命令フェッチおよびデータ・アクセスのための別の低レベル・キャッシュを提供するために、分割される。一実施形態では、命令は、キャッシュ５００９を介して命令フェッチ・ユニット５００４によってメモリ５００２からフェッチされる。命令は、命令復号ユニット５００６内で復号され、命令実行ユニット５００８へと（いくつかの実施形態では他の命令と共に）ディスパッチされる。通常、たとえば演算実行ユニット、浮動小数点実行ユニット、および分岐命令実行ユニットなどの、いくつかの実行ユニット５００８が採用される。この命令は、必要に応じて、命令指定レジスタまたはメモリからオペランドにアクセスする、実行ユニットによって実行される。オペランドがメモリ５００２からアクセス（ロードまたは格納）されるものである場合、ロード／格納ユニット５００５は、通常、実行される命令の制御の下にアクセスを処理する。命令は、ハードウェア回路内または内部マイクロコード（ファームウェア）内で、あるいはそれらの組み合わせによって、実行可能である。
【０１０２】
上記のように、コンピュータ・システムは、ローカル（またはメイン）ストレージ内に、情報、ならびにアドレス指定、保護、および参照、ならびに変更記録を含む。アドレス指定のいくつかの態様は、アドレスのフォーマット、アドレス・スペースの概念、様々なタイプのアドレス、および、１つのタイプのアドレスが他のタイプのアドレスに変換される様式を含む。いくつかのメイン・ストレージは、永続的に割り当てられたストレージ位置を含む。メイン・ストレージは、直接アドレス指定可能なデータの高速アクセス・ストレージを、システムに提供する。データおよびプログラムはどちらも、処理される前に（入力デバイスから）メイン・ストレージ内にロードされることになる。
【０１０３】
メイン・ストレージは、時にはキャッシュと呼ばれる、１つまたは複数の小型高速アクセス・バッファ・ストレージを含むことができる。キャッシュは、通常、ＣＰＵまたはＩ／Ｏプロセッサに物理的に関連付けられる。性能に関する以外の、別個のストレージ・メディアの物理構造および使用の効果は、通常、プログラムによって観察することはできない。
【０１０４】
別々のキャッシュを、命令およびデータ・オペランドに対して維持することができる。キャッシュ内の情報は、キャッシュ・ブロックまたはキャッシュ・ライン（または単にライン）と呼ばれる整数境界（integral boundary）上の連続バイト内で維持される。モデルは、バイト単位のキャッシュ・ラインのサイズを戻す、キャッシュ属性抽出命令を提供する。モデルは、データまたは命令キャッシュへのストレージのプリフェッチまたはキャッシュからのデータの解放を実行する、データのプリフェッチ命令および比較的長いデータのプリフェッチ命令を提供することもできる。
【０１０５】
ストレージは、長い水平のビットの文字列とみなされる。たいていの動作では、ストレージへのアクセスは左から右の順に進行する。ビットの文字列は、８ビット単位に細分化される。８ビット単位がバイトと呼ばれ、これがすべての情報フォーマットの基本構築ブロックである。ストレージ内の各バイト位置は、そのバイト位置のアドレスであるか、または単にバイト・アドレスである、固有の非負整数によって識別される。隣接するバイト位置は、左の０から始まり、左から右へと順に進んでいく、連続アドレスを有する。アドレスは符号なし２進整数であり、２４、３１、または６４ビットである。
【０１０６】
情報は、ストレージとＣＰＵまたはチャネル・サブシステムとの間で、１回に１バイトまたはバイト・グループずつ送信される。特に指定のない限り、たとえばｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）では、ストレージ内のバイト・グループはグループの左端のバイトによってアドレス指定される。グループ内のバイト数は、実行される動作によって暗黙的または明示的に指定される。ＣＰＵ動作で使用される場合、バイトのグループはフィールドと呼ばれる。バイトの各グループ内で、たとえばｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）では、ビットは左から右の順に番号付けされる。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）では、左端のビットは時には「高位」ビットと呼ばれ、右端のビットは「低位」ビットと呼ばれる。しかしながら、ビット番号はストレージ・アドレスではない。バイトのみがアドレス指定可能である。ストレージ内のバイトの個別のビット上で動作するために、バイト全体がアクセスされる。バイト内のビットには、左から右へと、０から７の番号が付けられる（たとえばｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）の場合）。アドレス内のビットには、２４ビット・アドレスの場合は８〜３１または４０〜６３、あるいは３１ビット・アドレスの場合は１〜３１または３３〜６３の、番号を付けることが可能であり、６４ビット・アドレスの場合は０〜６３が番号付けされる。任意の他の複数バイトの固定長フォーマットでは、フォーマットを構成するビットには、０から始まる連続番号が付けられる。エラー検出のため、および好ましくは訂正のために、１つまたは複数のチェック・ビットを、各バイトまたはバイト・グループと共に伝送することができる。こうしたチェック・ビットは機械によって自動的に生成され、プログラムによって直接制御することはできない。ストレージ容量はバイト数で表される。ストレージ・オペランド・フィールドの長さが命令のオペレーション・コードによって暗示される場合、フィールドは、１、２、４、８、または１６バイトとすることが可能な、固定長を有するものと言われる。いくつかの命令では、さらに大きいフィールドが暗示される場合がある。ストレージ・オペランド・フィールドの長さが暗示されず、明示的に示される場合、フィールドは可変長を有するものと言われる。可変長オペランドは、１バイトずつの増分（またはいくつかの命令では、２バイトの倍数または他の倍数）での長さの変化が可能である。情報がストレージ内に配置される場合、たとえストレージへの物理経路の幅が格納されているフィールドの長さよりも長い場合であっても、指定されたフィールドに含まれるそれらのバイト位置のコンテンツのみが置き換えられる。
【０１０７】
情報の一定の単位は、ストレージ内の整数境界とされる。境界は、そのストレージ・アドレスがバイト単位の長さの倍数である場合、情報の単位に関する整数と呼ばれる。整数境界上の２、４、８、および１６バイトのフィールドには、特別の名前が与えられる。ハーフワードは、２バイト境界上の２つの連続するバイトのグループであり、命令の基本構築ブロックである。ワードは、４バイト境界上の４つの連続するバイトのグループである。ダブルワードは、８バイト境界上の８つの連続するバイトのグループである。クワドワード（quadword）は、１６バイト境界上の１６の連続するバイトのグループである。ストレージ・アドレスがハーフワード、ワード、ダブルワード、およびクワドワードを指定する場合、アドレスの２進表現は、それぞれ右端に１つ、２つ、３つ、または４つのゼロビットを含む。命令は、２バイト整数境界上にあるものとされる。ほとんどの命令のストレージ・オペランドは、境界整列要件を有さない。
【０１０８】
命令およびデータ・オペランドに対して別々のキャッシュを実装するデバイスでは、後で命令がフェッチされる元であるキャッシュ・ラインに、プログラムが格納する場合、格納が後でフェッチされる命令を変更するかどうかにかかわらず、大幅な遅延を経験する可能性がある。
【０１０９】
一実施形態では、本発明は、ソフトウェア（時にはライセンス付き内部コード、ファームウェア、マイクロコード、ミリコード、ピココードなどと呼ばれ、そのいずれかは本発明と一致することになる）によって実施可能である。図１８を参照すると、本発明を具体化するソフトウェア・プログラム・コードは、通常、ＣＤ−ＲＯＭドライブ、テープ・ドライブ、またはハード・ドライブなどの、長期ストレージ・メディア・デバイス５０１１からホスト・システム５０００のプロセッサ５００１によってアクセスされる。ソフトウェア・プログラム・コードは、ディスケット、ハード・ドライブ、またはＣＤ−ＲＯＭなどの、データ処理システムと共に使用するための様々な知られたメディアのいずれかで、具体化することができる。コードは、こうしたメディア上で配布可能であるか、またはコンピュータ・メモリ５００２からユーザへ、あるいは、ネットワーク５０１０を介して１つのコンピュータ・システムのストレージから他のコンピュータ・システムへ、こうした他のシステムのユーザが使用するために、配布可能である。
【０１１０】
ソフトウェア・プログラム・コードは、様々なコンピュータ構成要素および１つまたは複数のアプリケーション・プログラムの機能および対話を制御する、オペレーティング・システムを含む。プログラム・コードは、通常、ストレージ・メディア・デバイス５０１１から、プロセッサ５００１による処理に使用可能な比較的高速のコンピュータ・ストレージ５００２へと、ページングされる。物理メディア上のメモリ内のソフトウェア・プログラム・コードを具体化するため、またはネットワークを介してソフトウェア・コードを配布するため、あるいはその両方のための技法および方法は、良く知られており、本明細書ではこれ以上考察しない。プログラム・コードは、有形メディア（電子メモリ・モジュール（ＲＡＭ）、フラッシュ・メモリ、コンパクト・ディスク（ＣＤ）、ＤＶＤ、磁気テープなどを含むがこれらに限定されない）上で作成および格納される場合、しばしば「コンピュータ・プログラム製品」と呼ばれる。コンピュータ・プログラム製品メディアは、通常、処理回路による実行のために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能である。
【０１１１】
図１９は、内部で本発明が実施可能な、代表的なワークステーションまたはサーバ・ハードウェア・システムを示す。図１９のシステム５０２０は、オプションの周辺デバイスを含む、パーソナル・コンピュータ、ワークステーション、またはサーバなどの、代表的な基本コンピュータ・システム５０２１を備える。基本コンピュータ・システム５０２１は、１つまたは複数のプロセッサ５０２６、ならびに、既知の技法に従ってプロセッサ５０２６とシステム５０２１の他の構成要素との間の通信を接続および実行可能にするために採用されたバスを含む。バスは、プロセッサ５０２６を、メモリ５０２５と、たとえばハード・ドライブ（たとえば磁気メディア、ＣＤ、ＤＶＤ、およびフラッシュ・メモリのうちのいずれかを含む）またはテープ・ドライブを含むことが可能な長期ストレージ５０２７と、に接続する。システム５０２１は、バスを介してマイクロプロセッサ５０２６を、キーボード５０２４、マウス５０２３、プリンタ／スキャナ５０３０、または、タッチ・スクリーン、デジタル入力パッドなどの任意のユーザ・インターフェース・デバイスとすることが可能な他のインターフェース・デバイス、あるいはそれらすべてなどの、１つまたは複数のインターフェース・デバイスに接続する、ユーザ・インターフェース・アダプタも含む場合がある。バスは、ディスプレイ・アダプタを介して、ＬＣＤスクリーンまたはモニタなどのディスプレイ・デバイス５０２２を、マイクロプロセッサ５０２６にも接続する。
【０１１２】
システム５０２１は、ネットワーク５０２９との通信５０２８が可能なネットワーク・アダプタを用いて、他のコンピュータまたはコンピュータのネットワークと通信可能である。ネットワーク・アダプタの例は、通信チャネル、トークン・リング、イーサネット、またはモデムである。別の方法として、システム５０２１は、ＣＤＰＤ（セルラ式デジタル・パケット・データ）カードなどの無線インターフェースを使用して、通信可能である。システム５０２１は、ローカル・エリア・ネットワーク（ＬＡＮ）またはワイド・エリア・ネットワーク（ＷＡＮ）におけるこうした他のコンピュータと関連付けることが可能であるか、または、システム５０２１は、他のコンピュータとのクライアント／サーバ配置構成におけるクライアントなどとすることができる。これらの構成ならびに適切な通信ハードウェアおよびソフトウェアのすべてが、当分野で知られている。
【０１１３】
図２０は、内部で本発明が実施可能なデータ処理ネットワーク５０４０を示す。データ処理システム５０４０は、それぞれが複数の個別のワークステーション５０４１、５０４２、５０４３、５０４４を含むことが可能な、無線ネットワークおよび有線ネットワークなどの複数の個別のネットワークを含むことができる。加えて、当業者であれば、１つまたは複数のＬＡＮを含めることが可能であることを理解し、ＬＡＮはホスト・プロセッサに結合された複数のインテリジェント・ワークステーションを備えることができる。
【０１１４】
さらに図２０を参照すると、ネットワークは、ゲートウェイ・コンピュータ（クライアント・サーバ５０４６）、またはアプリケーション・サーバ（データ・リポジトリにアクセス可能であり、ワークステーション５０４５から直接アクセスすることも可能な、リモート・サーバ５０４８）などの、メインフレーム・コンピュータまたはサーバを含むこともできる。ゲートウェイ・コンピュータ５０４６は、各個別のネットワークへの入力ポイントとして働く。ゲートウェイは、一方のネットワーキング・プロトコルを他方に接続する場合に必要である。ゲートウェイ５０４６は、ゲートウェイ５０４６は、好ましくは、通信リンクによって他のネットワーク（たとえばインターネット５０４７）に結合することが可能である。ゲートウェイ５０４６は、通信リンクを使用して１つまたは複数のワークステーション５０４１、５０４２、５０４３、５０４４に直接結合することも可能である。ゲートウェイ・コンピュータは、インターナショナル・ビジネス・マシーンズ・コーポレーションから入手可能な、ＩＢＭ  ｅＳｅｒｖｅｒ（ＴＭ）Ｓｙｓｔｅｍ  ｚ（Ｒ）サーバを使用して実装可能である。
【０１１５】
図１９および図２０を同時に参照すると、ＣＤ−ＲＯＭドライブまたはハード・ドライブなどの、長期ストレージ・メディア５０２７から、システム５０２０のプロセッサ５０２６によって、本発明を具体化することが可能なソフトウェア・プログラミング・コードにアクセスすることができる。ソフトウェア・プログラミング・コードは、ディスケット、ハード・ドライブ、またはＣＤ−ＲＯＭなどの、データ処理システムで使用するために、様々な既知のメディアのいずれかで具体化することができる。コードは、こうしたメディア上で配布可能であるか、または、１つのコンピュータ・システムのメモリまたはストレージから、ネットワークを介して他のコンピュータ・システムへと、こうした他のシステムのユーザが使用するために、ユーザ５０５０、５０５１に配布可能である。
【０１１６】
別の方法として、プログラミング・コードは、メモリ５０２５内で具体化し、プロセッサ・バスを使用してプロセッサ５０２６によってアクセス可能である。こうしたプログラム・コードは、様々なコンピュータ構成要素および１つまたは複数のアプリケーション・プログラム５０３２の機能および対話を制御する、オペレーティング・システムを含む。プログラム・コードは、通常、ストレージ・メディア５０２７から、プロセッサ５０２６による処理に使用可能な高速メモリ５０２５へとページングされる。物理メディア上のメモリ内のソフトウェア・プログラム・コードを具体化するため、またはネットワークを介してソフトウェア・コードを配布するため、あるいはその両方のための技法および方法は、良く知られており、本明細書ではこれ以上考察しない。プログラム・コードは、有形メディア（電子メモリ・モジュール（ＲＡＭ）、フラッシュ・メモリ、コンパクト・ディスク（ＣＤ）、ＤＶＤ、磁気テープなどを含むがこれらに限定されない）上で作成および格納される場合、しばしば「コンピュータ・プログラム製品」と呼ばれる。コンピュータ・プログラム製品メディアは、通常、処理回路による実行のために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能である。
【０１１７】
プロセッサが最も容易に使用できるキャッシュ（通常はプロセッサの他のキャッシュより高速かつ小型）は、最低（Ｌ１またはレベル１）キャッシュであり、メイン・ストア（メイン・メモリ）は、最高レベル・キャッシュ（３レベルある場合はＬ３）である。最低レベル・キャッシュはしばしば、実行されることになる機械命令を保持する命令キャッシュ（Ｉキャッシュ）と、データ・オペランドを保持するデータ・キャッシュ（Ｄキャッシュ）とに分割される。
【０１１８】
図２１を参照すると、例示的プロセッサの実施形態がプロセッサ５０２６に関して示されている。通常、プロセッサの性能を向上させるために、キャッシュ５０５３の１つまたは複数のレベルがメモリ・ブロックをバッファに入れるために採用される。キャッシュ５０５３は、使用される可能性が高いメモリ・データのキャッシュ・ラインを保持する、高速バッファである。典型的なキャッシュ・ラインは、６４、１２８、または２５６バイトのメモリ・データである。別々のキャッシュが、データのキャッシュよりも命令のキャッシュにしばしば採用される。キャッシュ・コヒーレンス（メモリおよびキャッシュ内のラインのコピーの同期化）は、しばしば、当分野で周知の様々な「スヌープ（snoop）」アルゴリズムによって提供される。プロセッサ・システムのメイン・メモリ・ストレージ５０２５は、しばしばキャッシュと呼ばれる。４レベルのキャッシュ５０５３を有するプロセッサ・システムでは、メイン・ストレージ５０２５は、通常はより高速であり、コンピュータ・システムが使用可能な不揮発性ストレージ（ＤＡＳＤ、テープなど）の一部のみを保持するため、時にはレベル５（Ｌ５）と呼ばれる。メイン・ストレージ５０２５は、オペレーティング・システムによってメイン・ストレージ５０２５内におよびメイン・ストレージ５０２５外にページングされたデータのページを「キャッシュ」する。
【０１１９】
プログラム・カウンタ（命令カウンタ）５０６１は、実行されることになる現行命令のアドレスを追跡する。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）プロセッサ内のプログラム・カウンタは６４ビットであり、前のアドレス指定限界をサポートするために３１または２４ビットまで切り詰めることができる。プログラム・カウンタは通常、コンテキスト切り換え時に持続するように、コンピュータのＰＳＷ（プログラム状況ワード）で具体化される。したがって、プログラム・カウンタ値を有する進行中のプログラムに、たとえばオペレーティング・システムが割り込むことができる（プログラム環境からオペレーティング・システム環境へのコンテキスト切り換え）。プログラムのＰＳＷは、プログラムがアクティブでない間、プログラム・カウンタ値を維持し、オペレーティング・システムが実行している間、オペレーティング・システムの（ＰＳＷの）プログラム・カウンタが使用される。通常、プログラム・カウンタは、現行命令のバイト数に等しい数ずつ増分される。ＲＩＳＣ（縮小命令セット・コンピューティング）命令は、通常、固定長であり、ＣＩＳＣ（複数命令セット・コンピューティング）命令は、通常、可変長である。ＩＢＭ  ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）の命令は、２、４、または６バイトを有するＣＩＳＣ命令である。プログラム・カウンタ５０６１は、コンテキスト切り換え動作、または、たとえば分岐命令の分岐実行動作のいずれかによって修正される。コンテキスト切り換え動作では、実行されているプログラムに関する（条件コードなどの）他の状態情報と共に、現行プログラムのカウンタ値がプログラム状況ワードに保存され、実行されることになる新しいプログラム・モジュールの命令をポイントする、新しいプログラムのカウンタ値がロードされる。分岐命令の結果をプログラム・カウンタ５０６１にロードすることによって、プログラムがプログラム内で意思決定またはループできるようにするために、分岐実行動作が実行される。
【０１２０】
通常、命令フェッチ・ユニット５０５５は、プロセッサ５０２６の代わりに命令をフェッチするために採用される。フェッチ・ユニットは、「次の順次命令」、分岐実行命令のターゲット命令、またはコンテキスト切り換えに続くプログラムの第１の命令の、いずれかをフェッチする。現在の命令フェッチ・ユニットは、しばしば、プリフェッチされた命令が使用される可能性に基づいて命令を投機的にプリフェッチするために、プリフェッチ技法を採用する。たとえば、フェッチ・ユニットは、次の順次命令および他の順次命令の追加バイトを含む、１６バイトの命令をフェッチすることができる。
【０１２１】
フェッチされた命令は、その後、プロセッサ５０２６によって実行される。ある実施形態では、フェッチされた命令がフェッチ・ユニットのディスパッチ・ユニット５０５６に渡される。ディスパッチ・ユニットは命令を復号し、復号された命令に関する情報を適切なユニット５０５７、５０５８、５０６０に転送する。実行ユニット５０５７は、通常、復号された算術命令に関する情報を、命令フェッチ・ユニット５０５５から受信し、命令のオペレーション・コードに従って、オペランド上で算術演算を実行することになる。オペランドは、好ましくはメモリ５０２５、アーキテクチャ・レジスタ５０２９、または実行されている命令の即時フィールドの、いずれかから、実行ユニット５０５７に提供される。実行の結果は、格納される場合、メモリ５０２５、レジスタ５０２９、または（制御レジスタ、ＰＳＷレジスタなどの）他の機械ハードウェアの、いずれかに格納される。
【０１２２】
プロセッサ５０２６は、通常、命令の機能を実行するための１つまたは複数のユニット５０５７、５０５８、５０６０を有する。図２２を参照すると、実行ユニット５０５７は、アーキテクチャ汎用レジスタ５０５９、復号／ディスパッチ・ユニット５０５６、ロード／格納ユニット５０６０、およびその他５０６５のプロセッサ・ユニットと、インターフェース論理５０７１によって通信することができる。実行ユニット５０５７は、算術論理ユニット（ＡＬＵ）５０６６が動作することになる情報を保持するために、いくつかのレジスタ回路５０６７、５０６８、５０６９を採用することができる。ＡＬＵは、加算、減算、乗算、および除算などの算術演算、ならびに、論理積、論理和、および排他的論理和（ＸＯＲ）、回転およびシフトなどの、論理機能を実行する。好ましくは、ＡＬＵは、設計に依存した特別な演算をサポートする。他の回路は、たとえば条件コードおよび回復サポート論理を含む、他のアーキテクチャ機構５０７２を提供することができる。通常、ＡＬＵ演算の結果は、結果を様々な他の処理機能に転送できる出力レジスタ回路５０７０内に保持される。プロセッサ・ユニットには多くの配置構成があるが、この説明では、一実施形態の代表的な理解を与えることのみが意図されている。
【０１２３】
たとえばＡＤＤ命令は、算術および論理機能を有する実行ユニット５０５７内で実行されるが、たとえば浮動小数点命令は、特別な浮動小数点機能を有する浮動小数点実行内で実行される。好ましくは、実行ユニットは、オペランド上でオペレーション・コード定義機能を実行することによって、命令によって識別されたオペランド上で動作する。たとえば、加算命令は、命令のレジスタ・フィールドによって識別された２つのレジスタ５０５９内で見つかったオペランド上で、実行ユニット５０５７によって実行されることが可能である。
【０１２４】
実行ユニット５０５７は、２つのオペランド上で算術加算を実行し、その結果を第３のオペランドに格納するが、この第３のオペランドは、第３のレジスタ、または２つのソース・レジスタのうちの１つとすることができる。実行ユニットは、好ましくは、シフト、回転、論理積、論理和、および排他的論理和などの、様々な論理機能、ならびに、加算、減算、乗算、除算のいずれかを含む、様々な算術機能を実行することが可能な、演算論理ユニット（ＡＬＵ）５０６６を使用する。ＡＬＵ５０６６のいくつかはスカラー演算用に、いくつかは浮動小数点用に設計されている。データは、アーキテクチャに応じて、ビッグ・エンディアン（Big Endian）（最高バイト・アドレスに最下位バイトがある）またはリトル・エンディアン（最低バイト・アドレスに最下位バイトがある）とすることができる。ＩＢＭ  ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）はビッグ・エンディアンである。符号付きフィールドは、アーキテクチャに応じて、符号付き絶対値、１の補数、または２の補数とすることが可能である。２の補数内の負の値または正の値のいずれかがＡＬＵ内で加算のみを必要とすることから、ＡＬＵは減算機能を設計する必要がないという点において、２の補数が有利である。数は通常、省略表現で記述され、たとえば１２ビット・フィールドは４０９６バイト・ブロックのアドレスを画定し、一般に４Ｋバイト（キロバイト）ブロックと記述される。
【０１２５】
図２３を参照すると、分岐命令を実行するための分岐命令情報は、通常、他の条件付き演算が完了する前に分岐の結果を予測するために、分岐履歴テーブル５０８２などの分岐予測アルゴリズムをしばしば採用する、分岐ユニット５０５８へと送信される。現行の分岐命令のターゲットはフェッチされ、条件付き演算が完了する前に投機的に実行される。条件付き演算が完了した場合、投機的に実行された分岐命令は、条件付き演算の条件および投機された結果に基づいて、完了または廃棄される。典型的な分岐命令は、条件コードをテストし、条件コードが分岐命令の分岐要件に合致する場合、ターゲット・アドレスに分岐することが可能であり、ターゲット・アドレスは、たとえば、命令のレジスタ・フィールドまたは即時フィールド内で見つかった中のいくつかの数に基づいて算出可能である。分岐ユニット５０５８は、複数の入力レジスタ回路５０７５、５０７６、５０７７および出力レジスタ回路５０８０を有する、ＡＬＵ５０７４を採用することができる。分岐ユニット５０５８は、汎用レジスタ５０５９、復号ディスパッチ・ユニット５０５６、または、たとえば他の回路５０７３と通信することができる。
【０１２６】
命令グループの実行は、たとえば、オペレーティング・システムによって開始されるコンテキスト切り換え、コンテキスト切り換えを発生させるプログラム例外またはエラー、複数のプログラム（マルチスレッド環境の場合）のコンテキスト切り換えまたはマルチスレッド・アクティビティを発生させるＩ／Ｏ割り込み信号を含む、多様な理由で、割り込まれる可能性がある。好ましくは、コンテキスト切り換え動作は、現在実行中のプログラムに関する状態情報を保存し、その後、呼び出された他のプログラムに関する状態情報をロードする。状態情報は、たとえばハードウェア・レジスタまたはメモリ内に保存することができる。状態情報は、好ましくは、実行されることになる次の命令をポイントするプログラム・カウンタ値、条件コード、メモリ変換情報、およびアーキテクチャ・レジスタ・コンテンツを含む。コンテキスト切り換えアクティビティは、ハードウェア回路、アプリケーション・プログラム、オペレーティング・システム・プログラム、またはファームウェア・コード（マイクロコード、ピココード、またはライセンス付き内部コード（ＬＩＣ））単独で、あるいはそれらの組み合わせによって、行使することが可能である。
【０１２７】
プロセッサは、命令定義の方法に従ってオペランドにアクセスする。命令は、命令の一部の値を使用して即時オペランドを提供すること、汎用レジスタまたは特定用途向けレジスタ（たとえば浮動小数点レジスタ）のいずれかを明示的にポイントする１つまたは複数のレジスタ・フィールドを提供することが、可能である。命令は、オペレーション・コード・フィールドによってオペランドとして識別された、暗黙レジスタを使用することができる。命令は、オペランドに関するメモリ位置を使用することができる。命令が、たとえばメモリ内のオペランドのアドレスを提供するためにまとめて追加される、基本レジスタ、インデックス・レジスタ、および即時フィールド（変位フィールド）を定義する、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）の長変位機構（long displacement facility）によって例示されるように、オペランドのメモリ位置は、レジスタ、即時フィールド、またはレジスタと即時フィールドとの組み合わせによって提供可能である。本明細書では、特に指定がない限り、位置とはメイン・メモリ（メイン・ストレージ）内の位置を示唆する。
【０１２８】
図２４を参照すると、プロセッサはロード／格納ユニット５０６０を使用してストレージにアクセスする。ロード／格納ユニット５０６０は、メモリ５０５３内のターゲット・オペランドのアドレスを取得すること、およびこのオペランドをレジスタ５０５９または他のメモリ５０５３位置内にロードすることによって、ロード動作を実行することが可能であるか、あるいは、メモリ５０５３内のターゲット・オペランドのアドレスを取得すること、および、レジスタ５０５９または他のメモリ５０５３位置から取得したデータをメモリ５０５３内のターゲット・オペランド位置に格納することによって、格納動作を実行することが可能である。ロード／格納ユニット５０６０は投機的とすることが可能であり、命令シーケンスとは順序外れのシーケンスでメモリにアクセスすることが可能であるが、ロード／格納ユニット５０６０は、その命令が順序通りに実行されたようにプログラムに対して表示することを維持するものである。ロード／格納ユニット５０６０は、汎用レジスタ５０５９、復号／ディスパッチ・ユニット５０５６、キャッシュ／メモリ・インターフェース５０５３、または他の要素５０８３との通信が可能であり、ストレージ・アドレスを計算するため、および、動作を順番に維持するためのパイプライン・シーケンシングを提供するための、様々なレジスタ回路、ＡＬＵ５０８５、および制御論理５０９０を備える。いくつかの動作は順序外れとすることが可能であるが、ロード／格納ユニットは、当分野で周知のように、プログラムに対して順序外れ動作を順序通りに実行されたように表すための機能を提供する。
【０１２９】
好ましくは、アプリケーション・プログラムが「見る」アドレスは、しばしば仮想アドレスと呼ばれる。仮想アドレスは、時には「論理アドレス」および「有効アドレス」と呼ばれる。これらの仮想アドレスは、単に仮想アドレスにオフセット値をプレフィックス付けすること、仮想アドレスを１つまたは複数の変換テーブルを介して変換することを含むが、これらに限定されない、様々な動的アドレス変換（ＤＡＴ）技術のうちの１つによって物理メモリ位置にリダイレクトされるという点で、仮想であり、変換テーブルは、好ましくは少なくともセグメント・テーブルおよびページ・テーブルを単独またはそれらの組み合わせで含み、好ましくは、セグメント・テーブルはページ・テーブルをポイントするエントリを有する。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）では、領域第１テーブル、領域第２テーブル、領域第３テーブル、セグメント・テーブル、およびオプション・ページ・テーブルを含む、変換の階層が提供される。アドレス変換の性能は、仮想アドレスを関連付けられた物理メモリ位置にマッピングするエントリを備える変換索引バッファ（ＴＬＢ）を使用することによって、しばしば向上される。エントリは、ＤＡＴが変換テーブルを使用して仮想アドレスを変換した場合に作成される。その後の仮想アドレスの使用は、低速逐次変換テーブル・アクセスではなく高速ＴＬＢのエントリを使用することができる。ＴＬＢコンテンツは、ＬＲＵ（最長時間未使用法）を含む様々な置換アルゴリズムによって管理可能である。
【０１３０】
プロセッサがマルチプロセッサ・システムのプロセッサである場合、各プロセッサは、コヒーレンシに関してインターロックされた、Ｉ／Ｏ、キャッシュ、ＴＬＢ、およびメモリなどの、共有リソースを維持する責務を有する。通常、キャッシュ・コヒーレンシを維持する際には、「スヌープ」技術が使用される。スヌープ環境では、各キャッシュ・ラインは、共有を容易にするために、共有状態、排他的状態、変更状態、無効状態などのうちのいずれかとしてマーク付けすることが可能である。
【０１３１】
Ｉ／Ｏユニット５０５４（図２１）は、たとえばテープ、ディスク、プリンタ、ディスプレイ、およびネットワークを含む、周辺デバイスに接続するための手段を、プロセッサに提供する。Ｉ／Ｏユニットは、しばしば、ソフトウェア・ドライバによってコンピュータ・プログラムに提示される。ＩＢＭ（Ｒ）からのＳｙｓｔｅｍ  ｚ（Ｒ）などのメインフレームでは、チャネル・アダプタおよびオープン・システム・アダプタが、オペレーティング・システムと周辺デバイスとの間に通信を提供するメインフレームのＩ／Ｏユニットである。
【０１３２】
さらに、他のタイプのコンピューティング環境も、本発明の１つまたは複数の態様から恩恵を受けることができる。例として、環境は、エミュレータ（たとえばソフトウェアまたは他のエミュレーション・メカニズム）を含むことが可能であり、ここでは、特定のアーキテクチャ（たとえば命令実行、アドレス変換などのアーキテクチャ機能、およびアーキテクチャ・レジスタを含む）またはそのサブセットが（たとえば、プロセッサおよびメモリを有するネイティブ（native）・コンピュータ・システム上で）エミュレートされる。こうした環境では、たとえ、エミュレータを実行するコンピュータがエミュレートされる機能以外の異なるアーキテクチャを有する可能性がある場合であっても、エミュレータの１つまたは複数のエミュレーション機能は、本発明の１つまたは複数の態様を実装することが可能である。一例として、エミュレーション・モードでは、エミュレートされている特定の命令または動作が復号され、個別の命令または動作を実装するために適切なエミュレーション機能が構築される。
【０１３３】
エミュレーション環境では、ホスト・コンピュータは、たとえば命令およびデータを格納するためのメモリと、メモリから命令をフェッチするため、およびオプションでフェッチされた命令に対してローカル・バッファリングを提供するための、命令フェッチ・ユニットと、フェッチされた命令を受け取るため、およびフェッチされた命令のタイプを決定するための、命令復号ユニットと、命令を実行するための命令実行ユニットと、を含む。実行は、データをメモリからレジスタにロードすること、データをレジスタからメモリに再度格納すること、または、復号ユニットによって決定されるように、いくつかのタイプの算術または論理演算を実行することを、含むことができる。一例では、各ユニットはソフトウェア内に実装される。たとえば、ユニットによって実行されている動作は、１つまたは複数のサブルーチンとしてエミュレータ・ソフトウェア内に実装される。
【０１３４】
より具体的には、現在では通常「Ｃ」プログラマであるプログラマによって、しばしばコンパイラ・アプリケーションを用いて、メインフレーム内でアーキテクチャ機械命令が使用される。ストレージ・メディアに格納されたこれらの命令は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）  ＩＢＭ（Ｒ）では、あるいは他のアーキテクチャを実行する機械では、ネイティブに実行することができる。それらは、既存の、および今後のＩＢＭ（Ｒ）メインフレーム・サーバ内で、およびＩＢＭ（Ｒ）の他の機械（たとえばＰｏｗｅｒ  ＳｙｓｔｅｍサーバおよびＳｙｓｔｅｍ  ｘ（Ｒ）サーバ）で、エミュレートすることができる。それらは、ＩＢＭ（Ｒ）、Ｉｎｔｅｌ（Ｒ）、ＡＭＤ（ＴＭ）、その他によって製造されるハードウェアを使用して、多様な機械上でＬｉｎｕｘを実行している機械内で実行可能である。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）の下でのそのハードウェア上での実行に加えて、Ｌｉｎｕｘ、ならびに、ＴｕｒｂｏＨｅｒｃｕｌｅｓ（ｗｗｗ.ｔｕｒｂｏｈｅｒｃｕｌｅｓ．ｃｏｍ／）、Ｈｅｒｃｕｌｅｓ（ｗｗｗ.ｈｅｒｃｕｌｅｓ−３９０．ｏｒｇ／）、またはＦＳＩ（Ｆｕｎｄａｍｅｎｔａｌ  Ｓｏｆｔｗａｒｅ，Ｉｎｃ）（ｗｗｗ.ｆｕｎｓｏｆｔ．ｃｏｍ／）によるエミュレーションを使用する、一般に実行がエミュレーション・モードである機械が使用可能である。エミュレーション・モードでは、エミュレートされたプロセッサのアーキテクチャをエミュレートするために、エミュレーション・ソフトウェアがネイティブ・プロセッサによって実行される。
【０１３５】
ネイティブ・プロセッサは、通常、エミュレートされたプロセッサのエミュレーションを実行するための、ファームウェアまたはネイティブ・オペレーティング・システムのいずれかを含む、エミュレーション・ソフトウェアを実行する。エミュレーション・ソフトウェアは、エミュレートされたプロセッサ・アーキテクチャのフェッチおよび実行命令に対する責務を負う。エミュレーション・ソフトウェアは、一度に１つまたは複数のエミュレートされた機械命令をフェッチし、ネイティブ・プロセッサによる実行のために、この１つまたは複数のエミュレートされた機械命令を対応するネイティブ機械命令のグループに変換することができる。これらの変換された命令は、高速変換が達成可能なようにキャッシュすることができる。それにもかかわらず、エミュレーション・ソフトウェアは、エミュレートされたプロセッサ用に作成されたオペレーティング・システムおよびアプリケーションが正しく動作するのを保証するように、エミュレートされたプロセッサ・アーキテクチャのアーキテクチャ規則を維持するものである。さらに、エミュレーション・ソフトウェアは、エミュレートされたプロセッサ上で実行するように設計されたオペレーティング・システムまたはアプリケーション・プログラムが、エミュレーション・ソフトウェアを有するネイティブ・プロセッサ上で実行可能なように、制御レジスタ、汎用レジスタ、浮動小数点レジスタ、たとえばセグメント・テーブルおよびページ・テーブルを含む動的アドレス変換機能、割り込みメカニズム、コンテキスト切り換えメカニズム、時刻（ＴＯＤ）時計、および、Ｉ／Ｏサブシステムへのアーキテクチャ・インターフェースを含むが、これらに限定されない、エミュレートされたプロセッサ・アーキテクチャによって識別されたリソースを提供するものである。
【０１３６】
エミュレートされている特定の命令が復号され、個別の命令の機能を実行するためにサブルーチンが呼び出される。エミュレートされたプロセッサの機能をエミュレートするエミュレーション・ソフトウェア機能は、好ましい実施形態の説明を理解した当業者であればわかるように、たとえば、「Ｃ」サブルーチンまたはドライバ内に、あるいは、特定のハードウェアに対するドライバを提供する何らかの他の方法内に、実装される。Ｂｅａｕｓｏｌｅｉｌ等による「Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒ  ｆｏｒ  Ｈａｒｄｗａｒｅ  Ｅｍｕｌａｔｉｏｎ」という名称の米国特許証第５５５１０１３号、および、Ｓｃａｌｚｉ等による「Ｐｒｅｐｒｏｃｅｓｓｉｎｇ  ｏｆ  Ｓｔｏｒｅｄ  Ｔａｒｇｅｔ  Ｒｏｕｔｉｎｅｓ  ｆｏｒ  Ｅｍｕｌａｔｉｎｇ  Ｉｎｃｏｍｐａｔｉｂｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎｓ  ｏｎ  ａ  Ｔａｒｇｅｔ  Ｐｒｏｃｅｓｓｏｒ」という名称の米国特許証第６００９２６１号、および、Ｄａｖｉｄｉａｎ等による「Ｄｅｃｏｄｉｎｇ  Ｇｕｅｓｔ  Ｉｎｓｔｒｕｃｔｉｏｎ  ｔｏ  Ｄｉｒｅｃｔｌｙ  Ａｃｃｅｓｓ  Ｅｍｕｌａｔｉｏｎ  Ｒｏｕｔｉｎｅｓ  ｔｈａｔ  Ｅｍｕｌａｔｅ  ｔｈｅ  Ｇｕｅｓｔ  Ｉｎｓｔｒｕｃｔｉｏｎｓ」という名称の米国特許証第５５７４８７３号、および、Ｇｒｏｒｉｓｈｅｋ等による「Ｓｙｍｍｅｔｒｉｃａｌ  Ｍｕｌｔｉｐｒｏｃｅｓｓｉｎｇ  Ｂｕｓ  ａｎｄ  Ｃｈｉｐｓｅｔ  Ｕｓｅｄ  ｆｏｒ  Ｃｏｐｒｏｃｅｓｓｏｒ  Ｓｕｐｐｏｒｔ  Ａｌｌｏｗｉｎｇ  Ｎｏｎ−Ｎａｔｉｖｅ  Ｃｏｄｅ  ｔｏ  Ｒｕｎ  ｉｎ  ａ  Ｓｙｓｔｅｍ」という名称の米国特許証第６３０８２５５号、および、Ｌｅｔｈｉｎ等による「Ｄｙｎａｍｉｃ  Ｏｐｔｉｍｉｚｉｎｇ  Ｏｂｊｅｃｔ  Ｃｏｄｅ  Ｔｒａｎｓｌａｔｏｒ  ｆｏｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｅｍｕｌａｔｉｏｎ  ａｎｄ  Ｄｙｎａｍｉｃ  Ｏｐｔｉｍｉｚｉｎｇ  Ｏｂｊｅｃｔ  Ｃｏｄｅ  Ｔｒａｎｓｌａｔｉｏｎ  Ｍｅｔｈｏｄ」という名称の米国特許証第６４６３５８２号、および、Ｅｒｉｃ  Ｔｒａｕｔによる「Ｍｅｔｈｏｄ  ｆｏｒ  Ｅｍｕｌａｔｉｎｇ  Ｇｕｅｓｔ  Ｉｎｓｔｒｕｃｔｉｏｎｓ  ｏｎ  ａ  Ｈｏｓｔ  Ｃｏｍｐｕｔｅｒ  Ｔｈｒｏｕｇｈ  Ｄｙｎａｍｉｃ  Ｒｅｃｏｍｐｉｌａｔｉｏｎ  ｏｆ  Ｈｏｓｔ  Ｉｎｓｔｒｕｃｔｉｏｎｓ」という名称の米国特許証第５７９０８２５号、および多くのその他を含むが、それらに限定されない、様々なソフトウェアおよびハードウェアのエミュレーション特許は、当業者が使用可能なターゲット機械に対して、異なる機械のために構成された命令フォーマットのエミュレーションを達成する、様々な知られた方法を示している。
【０１３７】
図２５では、ホスト・アーキテクチャのホスト・コンピュータ・システム５０００’をエミュレートする、エミュレートされたホスト・コンピュータ・システム５０９２の例が提供されている。エミュレートされたホスト・コンピュータ・システム５０９２では、ホスト・プロセッサ（ＣＰＵ）５０９１はエミュレートされたホスト・プロセッサ（または仮想ホスト・プロセッサ）であり、ホスト・コンピュータ５０００’のプロセッサ５０９１のそれとは異なるネイティブ命令セット・アーキテクチャを有するエミュレーション・プロセッサ５０９３を備える。エミュレートされたホスト・コンピュータ・システム５０９２は、エミュレーション・プロセッサ５０９３がアクセス可能なメモリ５０９４を有する。この実施形態例では、メモリ５０９４は、ホスト・コンピュータ・メモリ５０９６部分とエミュレーション・ルーチン５０９７部分とに区分される。ホスト・コンピュータ・メモリ５０９６は、ホスト・コンピュータ・アーキテクチャに従って、エミュレートされたホスト・コンピュータ５０９２のプログラムによって使用可能である。エミュレーション・プロセッサ５０９３は、エミュレートされたプロセッサ５０９１以外のアーキテクチャのアーキテクチャ命令セットのネイティブ命令を実行し、ネイティブ命令はエミュレーション・ルーチン・メモリ５０９７から取得され、アクセスされたホスト命令の機能をエミュレートするためのネイティブ命令実行ルーチンを決定するために、アクセスされたホスト命令を復号することが可能な、シーケンスおよびアクセス／復号ルーチンで取得された１つまたは複数の命令を採用することによって、ホスト・コンピュータ・メモリ５０９６内のプログラムから実行のためにホスト命令にアクセスすることが可能である。ホスト・コンピュータ・システム５０００’アーキテクチャ用に定義された他の機構は、たとえば、汎用レジスタ、制御レジスタ、ダイナミック・アドレス変換、ならびにＩ／Ｏサブシステム・サポートおよびプロセッサ・キャッシュなどの機構を含む、アーキテクチャ機構ルーチンによってエミュレート可能である。エミュレーション・ルーチンは、エミュレーション・ルーチンの性能を向上させるために、エミュレーション・プロセッサ５０９３内で使用可能な（汎用レジスタおよび仮想アドレスの動的変換などの）機能を利用することも可能である。ホスト・コンピュータ５０００’の機能をエミュレートする際に、プロセッサ５０９３を支援するために特別なハードウェアおよびオフロード・エンジンを提供することも可能である。
【０１３８】
本明細書で使用される用語は、特定の実施形態を説明するためのみのものであり、本発明を限定することは意図されていない。本明細書で使用される場合、単数形「ａ」、「ａｎ」、および「ｔｈｅ」は、コンテキストが特に明確に示していない限り、複数形も含むことが意図されている。「備える（comprises）」または「備えている（comprising）」あるいはその両方の用語は、本明細書で使用される場合、示された機能、整数、ステップ、動作、要素、または構成要素、あるいはそれらすべての存在を指定するが、１つまたは複数の他の機能、整数、ステップ、動作、要素、構成要素、またはそれらのグループ、あるいはそれらすべての存在または追加を排除するものではないことを、さらに理解されよう。
【０１３９】
以下の特許請求の範囲内のすべての手段またはステップならびに機能要素の、対応する構造、材料、動作、および等価物は、もしもあれば、具体的に請求された他の請求要素と組み合わせてこの機能を実行するための任意の構造、材料、または動作を含むことが意図される。本発明の説明は、例示および説明の目的で提示されたものであるが、開示された形の本発明を網羅するかまたはこれに限定されることは意図されていない。当業者であれば、本発明の範囲を逸脱することのない多くの修正および変形が明らかとなろう。実施形態は、本発明の原理および実際の適用例を最も適切に説明するために、ならびに、企図された特定の用途に好適な様々な修正を伴う様々な実施形態について、他の当業者が本発明を理解できるように、選択および説明されたものである。
【図１】
0005636097.tif 000002
【図２】
0005636097.tif 000003
【図３】
0005636097.tif 000004
【図４】
0005636097.tif 000005
【図５】
0005636097.tif 000006
【図６】
0005636097.tif 000007
【図７】
0005636097.tif 000008
【図８】
0005636097.tif 000009
【図９】
0005636097.tif 000010
【図１０】
0005636097.tif 000011
【図１１】
0005636097.tif 000012
【図１２】
0005636097.tif 000013
【図１３】
0005636097.tif 000014
【図１４】
0005636097.tif 000015
【図１５】
0005636097.tif 000016
【図１６】
0005636097.tif 000017
【図１７】
0005636097.tif 000018
【図１８】
0005636097.tif 000019
【図１９】
0005636097.tif 000020
【図２０】
0005636097.tif 000021
【図２１】
0005636097.tif 000022
【図２２】
0005636097.tif 000023
【図２３】
0005636097.tif 000024
【図２４】
0005636097.tif 000025
【図２５】
0005636097.tif 000026