(57)【要約】本発明の実施形態は、Ｉ／Ｏ装置用のメモリアドレス変換との関連において入出力メモリ管理ユニット（ＩＯＭＭＵ）の二層アドレッシングのための方法、システムおよびコンピュータ可読媒体を提供する。１つの実施形態によれば、方法は、Ｉ／Ｏ装置に関連するアドレス変換トランザクションと関連付けられるプロセスアドレス空間ＩＤに従って、ゲストアドレス変換テーブルを用いて、ゲスト仮想アドレス（ＧＶＡ）を、対応するゲスト物理アドレス（ＧＰＡ）に変換するステップと、アドレス変換トランザクションと関連付けられる装置ＩＤに従って、システムアドレス変換テーブルを用いて、ＧＰＡを、対応するシステム物理アドレス（ＳＰＡ）に変換するステップとを含む。【選択図】図７
2013546104.tif 000002
【特許請求の範囲】
【請求項１】
Ｉ／Ｏ装置に関連するアドレス変換トランザクションと関連付けられるプロセスアドレス空間ＩＤを用いて、ゲスト仮想アドレス（ＧＶＡ）を、対応するゲスト物理アドレス（ＧＰＡ）に変換するステップと、
前記ＧＰＡを、前記アドレス変換トランザクションと関連付けられる装置ＩＤに従って、システムアドレス変換テーブルを用いて、対応するシステム物理アドレス（ＳＰＡ）に変換するステップと、
を含む方法。
【請求項２】
ＧＶＡからＧＰＡへの複数の変換を、ＧＰＡからＳＰＡへの変換ごとにカスケードするステップをさらに含む、
請求項１に記載の方法。
【請求項３】
所与のレベルのゲストページテーブルに対して、前記ＧＶＡは、次のレベルでのゲストページテーブルのルートを指すゲストルートページテーブルポインタと関連付けられるゲストページテーブルエントリにアクセスするために、前記ゲストページテーブルに索引を付けるように動作可能である、
請求項１に記載の方法。
【請求項４】
ＧＰＡからＳＰＡへの変換を用いて、前記ゲストページテーブルエントリを前記ゲストルートページテーブルポインタに変換するステップをさらに含む、
請求項３に記載の方法。
【請求項５】
所与のレベルのネスト化されたページテーブルに対して、前記ＧＰＡは、次のレベルでのネスト化されたページテーブルのルートを指すネスト化されたルートページテーブルポインタと関連付けられる、ネスト化されたページテーブルエントリにアクセスするために、前記ネスト化されたページテーブルに索引を付けるように動作可能である、
請求項４に記載の方法。
【請求項６】
前記ネスト化されたページテーブルエントリはＳＰＡである、
請求項５に記載の方法。
【請求項７】
前記ＧＶＡを変換するステップは、装置テーブルエントリのゲストポインタにアクセスするステップをさらに含み、
前記ＧＰＡを変換するステップは、前記装置テーブルエントリのシステムポインタにアクセスするステップをさらに含む、
請求項１に記載の方法。
【請求項８】
前記ＧＶＡの変換は、ゲストオペレーティングシステム（ＯＳ）によって管理可能であり、
前記ＧＰＡの変換は、ハイパーバイザによって管理可能である、
請求項１に記載の方法。
【請求項９】
Ｉ／Ｏ装置に関連するアドレス変換トランザクションと関連付けられるプロセスアドレス空間ＩＤを用いて、ゲスト仮想アドレス（ＧＶＡ）を、対応するゲスト物理アドレス（ＧＰＡ）に変換するように動作可能な入力／出力メモリ管理ユニット（ＩＯＭＭＵ）を備え、
前記ＩＯＭＭＵは、前記ＧＰＡを、前記アドレス変換トランザクションと関連付けられる装置ＩＤに従って、システムアドレス変換テーブルを用いて、対応するシステム物理アドレス（ＳＰＡ）に変換するように動作可能である、
システム。
【請求項１０】
ＧＶＡからＧＰＡへの複数の変換を、ＧＰＡからＳＰＡへの変換ごとにカスケードするように動作可能なモジュールをさらに備える、
請求項９に記載のシステム。
【請求項１１】
所与のレベルのゲストページテーブルに対して、前記ＧＶＡは、次のレベルでのゲストページテーブルのルートを指すゲストルートページテーブルポインタと関連付けられるゲストページテーブルエントリにアクセスするために、前記ゲストページテーブルに索引を付けるように動作可能である、
請求項９に記載のシステム。
【請求項１２】
ＧＰＡからＳＰＡへの変換を用いて、前記ゲストページテーブルエントリを前記ゲストルートページテーブルポインタに変換するように動作可能なモジュールをさらに備える、
請求項１１に記載のシステム。
【請求項１３】
所与のレベルのネスト化されたページテーブルに対して、前記ＧＰＡは、次のレベルでのネスト化されたページテーブルのルートを指すネスト化されたルートページテーブルポインタと関連付けられる、ネスト化されたページテーブルエントリにアクセスするために、前記ネスト化されたページテーブルに索引を付けるように動作可能である、
請求項１２に記載のシステム。
【請求項１４】
前記ネスト化されたページテーブルエントリはＳＰＡである、
請求項１３に記載のシステム。
【請求項１５】
前記ＩＯＭＭＵは、装置テーブルエントリのゲストポインタにアクセスすることによって、前記ＧＶＡを変換するように動作可能であり、
前記ＩＯＭＭＵは、前記装置テーブルエントリのシステムポインタにアクセスすることによって、前記ＧＰＡを変換するように動作可能である、
請求項９に記載のシステム。
【請求項１６】
ゲストオペレーティングシステム（ＯＳ）は、前記ＧＶＡの変換を管理し、
ハイパーバイザは、前記ＧＰＡの変換を管理する、
請求項９に記載のシステム。
【請求項１７】
命令を格納するコンピュータ可読媒体であって、
前記命令は、実行されるときに、
Ｉ／Ｏ装置に関連するアドレス変換トランザクションと関連付けられるプロセスアドレス空間ＩＤに基づいて、ゲスト仮想アドレス（ＧＶＡ）を、対応するゲスト物理アドレス（ＧＰＡ）に変換することと、
前記アドレス変換トランザクションと関連付けられた装置ＩＤに基づいて、前記ＧＰＡを、対応するシステム物理アドレス（ＳＰＡ）に変換することと、
を含む方法を行う、コンピュータ可読媒体。
【請求項１８】
ゲストオペレーティングシステム（ＯＳ）は、前記ＧＶＡの変換を管理し、
ハイパーバイザは、前記ＧＰＡの変換を管理する、
請求項１７に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、コンピュータシステムを対象とする。さらに詳細には、本発明は、入出力メモリ管理ユニットを対象とする。
【背景技術】
【０００２】
グラフィックス処理ユニット（ＧＰＵ：ｇｒａｐｈｉｃｓ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）を一般的な演算に用いる要請は、ＧＰＵの単位電力および／またはコストあたりの能力が優れることから、最近ではより顕著となってきている。ＧＰＵの計算能力は、対応する中央処理装置（ＣＰＵ：ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）の計算能力の成長速度を超える速度で成長してきた。移動コンピューティング市場（例えば、ノートブック、モバイルスマートフォン、タブレット、その他）およびその必要な支援サーバ／企業システムの爆発的な成長と組み合わされたこの成長は、特定品質の所望のユーザ経験を提供するために用いられてきている。したがって、並列データの内容を有する作業負荷を実行するためにＣＰＵとＧＰＵとを併用することはボリュームテクノロジとなりつつある。
【０００３】
しかし、ＧＰＵは、従来、主にグラフィックの高速化のために利用可能な制約されたプログラミング環境で動作する。これらの制約は、ＧＰＵが、ＣＰＵと同程度に豊かなプログラミングエコシステムを有さないという事実に起因するものである。したがって、ＧＰＵの使用は、主に、グラフィックスおよびビデオのアプリケーションプログラミングインターフェース（ＡＰＩ：ａｐｐｌｉｃａｔｉｏｎ  ｐｒｏｇｒａｍｍｉｎｇ  ｉｎｔｅｒｆａｃｅ）を処理することに既に順応した、２次元（２Ｄ）グラフィックスと、３次元（３Ｄ）グラフィックスと、少数の最先端マルチメディアアプリケーションとに限られていた。
【０００４】
マルチベンダにサポートされるＯｐｅｎＣＬ（登録商標）、ＤｉｒｅｃｔＣｏｍｐｕｔｅ（登録商標）、標準的なＡＰＩおよびサポート用ツールの出現とともに、従来の用途におけるＧＰＵの限界は、従来のグラフィックスを越えて拡張されてきている。ＯｐｅｎＣＬ（登録商標）およびＤｉｒｅｃｔＣｏｍｐｕｔｅ（登録商標）は将来性のあるスタートではあるが、大部分のプログラミングタスクに対して、ＣＰＵと同程度に流動的にＣＰＵとＧＰＵとの組合せが用いられることを可能にする環境およびエコシステムを作成するには、多数のハードルが残されている。
【０００５】
既存のコンピューティングシステムは、大抵、複数の処理装置を含む。例えば、いくつかのコンピューティングシステムは、ＣＰＵおよびＧＰＵの両方を、別個のチップ上（例えば、ＣＰＵはマザーボード上に、ＧＰＵはグラフィックカード上に配置され得る）または単一チップパッケージ上に有し得る。これらの構成の両方は、（ｉ）効率的なスケジューリング、（ｉｉ）プロセス間でサービス品質（ＱｏＳ）保証を提供すること、（ｉｉｉ）プログラミングモデル、（ｉｖ）複数のターゲット命令セットアーキテクチャ（ＩＳＡ：ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ａｒｃｈｉｔｅｃｔｕｒｅ）へのコンパイルおよび（ｖ）別個のメモリシステム、の全項目を、電力消費を最小化しながら満足することに関して顕著な問題点を依然として含む。
【０００６】
例えば、個別チップ構成においては、各プロセッサがメモリにアクセスするためには、システムアーキテクチャおよびソフトウェアアーキテクチャは、チップ間インターフェースを利用することを余儀なくされる。これらの外部インターフェース（例えばチップ間インターフェース）においては、異機種環境のプロセッサを協働させるために、メモリレイテンシおよび電力消費に弊害がもたらされる一方で、別個のメモリシステム（すなわち、別個のアドレス空間）およびドライバに管理される共有メモリにおいては、きめ細かな負荷軽減に対しては許容されないオーバーヘッドが生成されてしまうこととなる。
【０００７】
ＧＰＵは、他の周辺機器（例えば、入出力（Ｉ／Ｏ）装置）と共に、コンピューティングシステムのシステムメモリに格納された情報にアクセスする必要があり得る。コンピューティングシステムは、性能向上のために、Ｉ／Ｏデバイス用の仮想メモリ機能を提供し得る。したがって、Ｉ／Ｏデバイスは、仮想アドレスに基づいて情報を要求し、コンピューティングシステムは、仮想アドレスを、システムメモリに対応する物理アドレスに変換し得る。入出力メモリ管理ユニット（ＩＯＭＭＵ：ｉｎｐｕｔ／ｏｕｔｐｕｔ  ｍｅｍｏｒｙ  ｍａｎａｇｅｍｅｎｔ  ｕｎｉｔ）は、Ｉ／Ｏデバイスとシステムメモリとの間のアドレス変換サービスを提供し得る。
【０００８】
コンピューティングシステムは、ハイパーバイザによって管理される仮想化されたゲストオペレーティングシステム（ＯＳ）を含む複数の仮想システムも提供することができる。コンピューティングシステムは、Ｉ／Ｏデバイスへのアクセスを提供するために、ゲストＯＳごとにＩ／Ｏデバイスを仮想化することができる。すなわち、ハイパーバイザは、仮想化されたゲストＯＳごとに、仮想メモリアドレスから物理メモリアドレスへの変換を調整することによって、システムメモリを操作する。この処理は、各ゲストＯＳがＩ／Ｏデバイスにアクセスする唯一のＯＳであったかのように、各仮想システムがＩ／Ｏデバイスにアクセスできるように行われる。
【０００９】
したがって、ハイパーバイザは、アドレス変換の全ての要求に適応するためにソフトウェアルーチンを実行する際の障害となる可能性がある。これらの変換の各々は、ＩＯＭＭＵにアクセスすることに関連するので、ハイパーバイザのソフトウェアベースの動作は、顕著なオーバーヘッドを表す。このオーバーヘッドは、性能を低下させる可能性がある。
【発明の概要】
【発明が解決しようとする課題】
【００１０】
したがって、必要とされるのは、コンピューティングシステムにおけるゲストＯＳ用のアドレス変換を提供する能力である。
【課題を解決するための手段】
【００１１】
ＧＰＵと、アクセラレーテッドプロセッシングユニット（ＡＰＵ）と、ＧＰＵによる汎目的計算（ＧＰＧＰＵ）とは、この分野において一般に用いられる用語であるが、「アクセラレーテッド処理デバイス」（ＡＰＤ）は、より広い表現とみなされる。例えば、ＡＰＤは、従来のＣＰＵ、従来のＧＰＵ、ソフトウェアおよび／またはこれらの組合せと比較して高速化された方法で行われる、グラフィックス処理タスク、データ並列タスク、またはネスト化されたデータ並列タスクの高速化に関連する機能および演算を実行する任意のハードウェアおよび／またはソフトウェアの協働的集合体を指す。
【００１２】
本発明の実施形態は、ある特定の状況では、Ｉ／Ｏデバイス用のメモリアドレス変換との関連でＩＯＭＭＵ二層アドレッシングを行うための方法、システムおよびコンピュータ可読媒体に関する。例示的な方法は、Ｉ／Ｏデバイスに関連するアドレス変換トランザクションと関連付けられるプロセスアドレス空間ＩＤに従うゲストアドレス変換テーブルを用いて、ゲスト仮想アドレス（ＧＶＡ：ｇｕｅｓｔ  ｖｉｒｔｕａｌ  ａｄｄｒｅｓｓ）を、対応するゲスト物理アドレス（ＧＰＡ：ｇｕｅｓｔ  ｐｈｙｓｉｃａｌ  ａｄｄｒｅｓｓ）に変換するステップを含む。ＧＰＡは、アドレス変換トランザクションと関連付けられる装置ＩＤに従って、システムアドレス変換テーブルを用いて、対応するシステム物理アドレス（ＳＰＡ：ｓｙｓｔｅｍ  ｐｈｙｓｉｃａｌ  ａｄｄｒｅｓｓ）に変換される。
【００１３】
本発明の追加的な特徴および利点、ならびに本発明の様々な実施形態の構造および動作は、添付の図面を参照して以下で詳細に説明される。本発明は本明細書において説明される特定の実施形態に制限されないことに注意すべきである。係る実施形態は、例示目的のみのために本明細書において提示される。追加的実施形態は、本明細書に含まれる教示に基づいて当業者に明らかとなるであろう。
【００１４】
添付の図面は、本明細書に組み込まれ本明細書の一部を構成するものであって、本発明を例示し、説明とともに、本発明の原理を説明し、当業者が本発明を実施することを可能にするように、さらに機能する。本発明の様々な実施形態は、添付の図面を参照して以下で説明される。なお、添付の図面の全体を通じて、同様の参照番号は同様の構成要素を参照するために用いられる。
【図面の簡単な説明】
【００１５】
【図１Ａ】本発明の実施形態に係る処理システムの例示的ブロック図である。
【図１Ｂ】図１Ａに示されたアクセラレーテッドプロセッシングデバイスの例示的ブロック図である。
【図２】本発明の実施形態に係るＣＰＵおよびＩ／Ｏデバイス用のＩＯＭＭＵアーキテクチャおよびメモリ管理、並びにシステムメモリマッピング構造の例示的ブロック図である。
【図３】本発明の実施形態に係る仮想システムの例示的ブロック図である。
【図４】本発明の実施形態に係るＩＯＭＭＵおよびシステムメモリに関連するデータ構造の例示的ブロック図である。
【図５】二層アドレス変換に関連するデータ構造の例示的ブロック図である。
【図６Ａ】本発明の実施形態に係る二層アドレス変換システムの例示的ブロック図である。
【図６Ｂ】本発明の実施形態に係るＧＶＡからＳＰＡへのアドレス変換システムの例示的ブロック図である。
【図７】本発明の実施形態に係る二層アドレッシングを示すフローチャートの例示的ブロック図である。
【発明を実施するための形態】
【００１６】
以下の詳細な説明においては、「１つの実施形態」、「ある実施形態」、「例示的実施形態」またはその他を参照することは、本明細書において説明される実施形態が、特定の特徴、構造または特性を有することを示すが、全ての実施形態がその特定の特徴、構造または特性を必ずしも含むとは限らない。さらに、係る語句は、同一の実施形態を参照するとは限らない。さらに、特定の特徴、構造または特性が１つの実施形態に関連して説明されるとき、係る特長、構造または特性を他の実施形態との関連で実施することは、明示されているか否かによらず、当業者の知識の範囲内であることが提起される。
【００１７】
「本発明の実施形態」という用語は、本発明の実施形態の全部が検討の対象である特徴、特長または操作モードを含むことを必ずしも要求しない。代替的な実施形態が本発明の範囲から逸脱することなく考案され、本発明の既知の構成要素は、本発明の関連する詳細を不明瞭化しないために、必ずしも詳細に説明されるとは限らず、または省略され得る。加えて、本明細書において用いられる用語は、特定の実施形態を説明することのみを目的とし、本発明を制限することを意図するものではない。例えば、本明細書において用いられる単数形の「１つの」および「その」は、内容的に明らかに単数のみを指す場合を除き、複数形をも含むことを意図するものである。本明細書において用いられる場合、「含む」、「備える」、「包含する」および／または「有する」という用語は、述べられた特徴、整数、ステップ、操作、構成要素および／またはコンポーネントが存在することを指定するが、１つまたは複数の他の特徴、整数、ステップ、操作、構成要素、コンポーネントおよび／またはこれらの群の存在または追加を除外しない。
【００１８】
図１Ａは、２つのプロセッサ、すなわちＣＰＵ１０２およびＡＰＤ１０４を含む統合化されたコンピューティングシステム１００の例示的な図である。ＣＰＵ１０２は、１つ以上のシングルコアまたはマルチコアＣＰＵを含み得る。本発明の一実施形態において、システム１００は、統合化されたプログラミング環境および実行環境を提供するために、ＣＰＵ１０２およびＡＰＤ１０４を組み合わせた単一のシリコンダイまたはパッケージ上に形成される。この環境は、ＡＰＤ１０４が、いくつかのプログラミングタスクに対して、ＣＰＵ１０２と同程度に流動的に用いられることを可能にする。しかし、ＣＰＵ１０２およびＡＰＤ１０４が単一のシリコンダイ上に形成されることは、本発明の絶対的な要件ではない。いくつかの実施形態において、ＣＰＵ１０２およびＡＰＤ１０４は別個に形成され、同一の基板または異なる基板上に搭載されることが可能である。
【００１９】
１つの例において、システム１００は、メモリ１０６、ＯＳ（オペレーティングシステム）１０８および通信インフラストラクチャ１０９を含む。オペレーティングシステム１０８および通信インフラストラクチャ１０９は、以下でより詳細に説明される。
【００２０】
システム１００は、カーネルモードドライバ（ＫＭＤ：ｋｅｒｎｅｌ  ｍｏｄｅ  ｄｒｉｖｅｒ）１１０と、ソフトウェアスケジューラ（ＳＷＳ：ｓｏｆｔｗａｒｅ  ｓｃｈｅｄｕｌｅｒ）１１２と、例えば入出力メモリ管理ユニット（ＩＯＭＭＵ：ｉｎｐｕｔ／ｏｕｔｐｕｔ  ｍｅｍｏｒｙ  ｍａｎａｇｅｍｅｎｔ  ｕｎｉｔ）等のメモリ管理ユニット１１６とを含む。システム１００の構成品は、ハードウェア、ファームウェア、ソフトウェアまたはこれらの任意の組合せとして実装され得る。当業者は、システム１００が図１Ａに示される実施形態において示されるものに加えて、またはこれらとは異なる、１つ以上のソフトウェアコンポーネント、ハードウェアコンポーネントおよびファームウェアコンポーネントを含み得ることを理解するであろう。
【００２１】
１つの例において、ＫＭＤ１１０等のドライバは、通常、ハードウェアが接続されたコンピュータバスまたは通信サブシステムを通してデバイスと通信する。呼び出しプログラムがドライバにおいてルーチンを呼び出すと、ドライバは、デバイスに対してコマンドを発行する。デバイスがドライバに対してデータを戻すと、ドライバは、元の呼び出しプログラムにおいてルーチンを呼び出し得る。１つの例において、ドライバは、ハードウェア依存的であり、オペレーティングシステム固有である。ドライバは、通常、任意の必要な非同期的時間依存性のハードウェアインターフェースに対して要求されるインタラプトハンドリングを提供する。
【００２２】
デバイスドライバは、特に現代のマイクロソフト・ウィンドウズ（登録商標）プラットフォームにおいては、カーネルモード（リング０）またはユーザモード（リング３）において実行され得る。ドライバをユーザモードにおいて実行することの主要な利益は、安定性が改善されることである。なぜなら、不完全な形で書かれたユーザモードデバイスドライバは、カーネルメモリを上書きすることによってシステムをクラッシュさせることができないためである。一方、ユーザモード／カーネルモードの遷移は、通常、顕著な性能オーバーヘッドを与え、それにより、低レイテンシおよび高スループット要件目的のユーザモードドライバを阻害する。カーネルスペースは、システムコールの使用を通してのみ、ユーザモジュールからのアクセスが可能である。ＵＮＩＸ（登録商標）シェルまたは他のＧＵＩベースのアプリケーションなどのエンドユーザプログラムは、ユーザスペースの一部である。これらのアプリケーションは、カーネルにサポートされた機能を通してハードウェアと相互作用する。
【００２３】
ＣＰＵ１０２は、制御プロセッサ、フィールド・プログラマブル・ゲートアレイ（ＦＰＧＡ：ｆｉｅｌｄ  ｐｒｏｇｒａｍｍａｂｌｅ  ｇａｔｅ  ａｒｒａｙ）、特定用途集積回路（ＡＳＩＣ：ａｐｐｌｉｃａｔｉｏｎ  ｓｐｅｃｉｆｉｃ  ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ）またはデジタル・シグナル・プロセッサ（ＤＳＰ：ｄｉｇｉｔａｌ  ｓｉｇｎａｌ  ｐｒｏｃｅｓｓｏｒ）のうち１つ以上を含み得る（図示せず）。ＣＰＵ１０２は、例えば、コンピューティングシステム１００の動作を制御する、ＯＳ１０８、ＫＭＤ１１０、ＳＷＳ１１２およびアプリケーション１１１を含む制御ロジックを実行する。この例示的な実施形態において、ＣＰＵ１０２は、１つの実施形態によれば、アプリケーション１１１の実行の起動および制御を、例えばそのアプリケーションに関連する処理をＣＰＵ１０２とＡＰＤ１０４等の他の処理リソースとの間に分散させることにより行う。
【００２４】
ＡＰＤ１０４は、とりわけ、グラフィックス演算や、例えば特に並列処理に好適となり得る他の演算等の、選択された機能のためのコマンドおよびプログラムを実行する。一般に、ＡＰＤ１０４は、ピクセル処理、幾何学演算およびディスプレイに対する画像のレンダリング等のグラフィックスパイプライン処理を実行するために、しばしば用いられ得る。本発明の様々な実施形態において、ＡＰＤ１０４は、ＣＰＵ１０２から受信したコマンドまたは命令に基づいて、計算処理演算（例えば、ビデオ演算、物理シミュレーション、計算流体力学等のグラフィックスに関連しない演算）も実行し得る。
【００２５】
例えば、コマンドは、通常、命令セットアーキテクチャ（ＩＳＡ：ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ａｒｃｈｉｔｅｃｔｕｒｅ）において定義されない特殊な命令であるとみなされ得る。コマンドは、例えばディスパッチプロセッサ、コマンドプロセッサまたはネットワークコントローラ等の特殊なプロセッサにより実行され得る。一方、命令は、例えばコンピュータアーキテクチャ内のプロセッサの単一の演算であるとみなされ得る。１つの例において、２セットのＩＳＡが用いられる場合には、いくつかの命令は、ｘ８６プログラムを実行するために用いられ、いくつかの命令は、ＡＰＤ計算ユニット上でカーネルを実行するために用いられる。
【００２６】
例示的な実施形態において、ＣＰＵ１０２は、選択されたコマンドをＡＰＤ１０４に伝達する。これらの選択されたコマンドは、並列実行に適したグラフィックスコマンドと、並列実行に適した他のコマンドとを含み得る。計算処理コマンドを含み得るこれらの選択されたコマンドは、実質的にＣＰＵ１０２から独立して実行され得る。
【００２７】
ＡＰＤ１０４は、例えば１つ以上のＳＩＭＤ処理コア等ではあるがこれに制限されない、自身の計算ユニット（図示せず）を含み得る。本明細書で参照されるＳＩＭＤは、パイプライン、すなわち、それぞれが自身のデータおよび共有プログラムカウンタを有する複数の処理エレメント上でカーネルが同時に実行されるプログラミングモデルである。全ての処理エレメントは、同等なセットの命令を実行する。プレディケーションを用いることにより、発行された各コマンドに対して、ワークアイテムを関与させることまたはさせないことが可能となる。
【００２８】
１つの例において、各ＡＰＤ計算ユニット１０４は、１つ以上のスカラーおよび／またはベクトル浮動小数点演算ユニットおよび／または算術論理ユニット（ＡＬＵ：ａｒｉｔｈｍｅｔｉｃ  ａｎｄ  ｌｏｇｉｃ  ｕｎｉｔ）を含み得る。ＡＰＤ計算ユニットは、逆平方根ユニットおよびサイン／コサインユニット等の特殊用途処理ユニット（図示せず）も含み得る。１つの例において、ＡＰＤ計算ユニットは、本明細書においてシェーダコア１２２と総称される。
【００２９】
１つ以上のＳＩＭＤが存在することにより、一般に、ＡＰＤ１０４は、グラフィックス処理において一般的なデータ並列タスク等のデータ並列タスクの実行に、理想的に好適なものとなる。
【００３０】
ピクセル処理等のいくつかのグラフィックスパイプライン処理と、他の並列演算処理とは、同一のコマンドストリームまたは計算カーネルが、ストリームまたは入力データ要素の集合体上で実行されることを要求する。同一の計算カーネルのそれぞれのインスタンス化は、上記データ要素を並列に処理するために、シェーダコア１２２の複数の計算ユニット上で同時に実行され得る。本明細書で参照されるように、例えば計算カーネルは、プログラム上で宣言され、ＡＰＤ計算ユニット上で実行される命令を含む関数である。この関数は、カーネル、シェーダ、シェーダプログラムまたはプログラムとも称される。
【００３１】
１つの例示的な実施形態において、各計算ユニット（例えばＳＩＭＤ処理コア）は、入力されるデータを処理するために、特定ワークアイテムのそれぞれのインスタンス化を実行し得る。ワークアイテムは、コマンドによりデバイス上で呼び出されるカーネルの並列実行の集合体のうちの１つである。ワークアイテムは、計算ユニット上で実行されるワークグループの一部として、１つ以上の処理エレメントにより実行され得る。
【００３２】
ワークアイテムは、自身のグローバルＩＤおよびローカルＩＤによって、集合体内の他の実行から区別される。１つの例において、ワークグループ内のＳＩＭＤ上でともに同時に実行されるワークアイテムの一部は、ウェーブフロント１３６と称され得る。ウェーブフロントの幅は、計算ユニット（例えば、ＳＩＭＤ処理コア）のハードウェアの特性である。本明細書で参照されるワークグループは、単一の計算ユニット上で実行される関連するワークアイテムの集合体である。ワークグループ内のワークアイテムは、同一のカーネルを実行し、ローカルメモリおよびワークグループバリアを共有する。
【００３３】
代表的な実施形態において、１つのワークグループからの全てのウェーブフロントは、同一のＳＩＭＤ処理コア上で処理される。ウェーブフロントにわたる命令は１度に１つずつ発行され、全てのワークアイテムが同一の制御フローに従う場合には、各ワークアイテムは、同一のプログラムを実行する。ウェーブフロントは、ワープ、ベクトルまたはスレッドと称され得る。
【００３４】
実行マスクおよびワークアイテムプレディケーションは、ウェーブフロント内の拡散的な制御フローを可能にするために用いられる。拡散的な制御フローでは、各個別のワークアイテムは、カーネルを通る一意的なコードパスを実際に取り得る。部分的に占められたウェーブフロントは、ワークアイテムの全セットがウェーブフロント開始時に必ずしも利用可能とは限らない場合に、処理され得る。例えば、シェーダコア１２２は、所定数のウェーブフロント１３６を同時に実行し得る。なお、各ウェーブフロント１３６は、複数のワークアイテムを含む。
【００３５】
システム１００において、ＡＰＤ１０４は、グラフィックスメモリ１３０等の自身のメモリを含む（なお、メモリ１３０は、グラフィックス専用に制限されるとは限らない）。グラフィックスメモリ１３０は、ＡＰＤ１０４における計算実行の間の使用のために、ローカルメモリを提供する。シェーダコア１２２内の個々の計算ユニット（図示せず）は、自身のローカルデータ記憶装置（図示せず）を有し得る。１つの実施形態において、ＡＰＤ１０４は、ローカルグラフィックスメモリ１３０へのアクセス、ならびにメモリ１０６へのアクセスを含む。他の実施形態において、ＡＰＤ１０４は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ：ｄｙｎａｍｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、または、ＡＰＤ１０４には直接的に接続されているがメモリ１０６からは分離している他のメモリ（図示せず）へのアクセスを含み得る。
【００３６】
図示の例において、ＡＰＤ１０４は、１つまたは「ｎ」個のコマンドプロセッサ（ＣＰ：ｃｏｍｍａｎｄ  ｐｒｏｃｅｓｓｏｒ）１２４を含み得る。ＣＰ１２４は、ＡＰＤ１０４内の処理を制御する。ＣＰ１２４は、実行されるべきコマンドを、メモリ１０６内のコマンドバッファ１２５から取得し、ＡＰＤ１０４でのこれらのコマンドの実行を調整する。
【００３７】
１つの例において、ＣＰＵ１０２は、アプリケーション１１１に基づくコマンドを、適切なコマンドバッファ１２５に入力する。本明細書において参照されるように、アプリケーションは、ＣＰＵ内またはＡＰＤ内の計算ユニット上で実行されるプログラム部分の組合せである。
【００３８】
複数のコマンドバッファ１２５は、各プロセスがＡＰＤ１０４での実行のためにスケジュールされた状態で、保持され得る。
【００３９】
ＣＰ１２４は、ハードウェア、ファームウェア、ソフトウェアまたはこれらの組合せにおいて実装され得る。１つの実施形態において、ＣＰ１２４は、スケジューリングロジックを含むロジックを実装するためのマイクロコードを有する縮小命令セットコンピュータ（ＲＩＳＣ：ｒｅｄｕｃｅｄ  ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ｃｏｍｐｕｔｅｒ）エンジンとして実装される。
【００４０】
ＡＰＤ１０４は、１つまたは「ｎ」個のディスパッチコントローラ（ＤＣ：ｄｉｓｐａｔｃｈ  ｃｏｎｔｒｏｌｌｅｒ）１２６を含み得る。本願において、ディスパッチという用語は、１セットの計算ユニット上の１セットのワークグループに対するカーネルの実行のスタートを起動するために、コンテキスト状態を使用するディスパッチコントローラにより実行されるコマンドを指す。ＤＣ１２６は、シェーダコア１２２内でワークグループを起動するためのロジックを含む。いくつかの実施形態において、ＤＣ１２６は、ＣＰ１２４の一部として実装され得る。
【００４１】
システム１００は、ＡＰＤ１０４上で実行するためのプロセスを実行リスト１５０から選択するためのハードウェアスケジューラ（ＨＷＳ：ｈａｒｄｗａｒｅ  ｓｃｈｅｄｕｌｅｒ）１２８を含む。ＨＷＳ１２８は、ラウンドロビン方式、優先レベルを用いて、または他のスケジューリングポリシーに基づいて、プロセスを実行リスト１５０から選択し得る。優先レベルは、例えば、動的に決定され得る。ＨＷＳ１２８は、例えば、新規のプロセスを追加することによって、あるいは既存のプロセスを実行リスト１５０から削除することによって、実行リスト１５０を管理する機能を含み得る。ＨＷＳ１２８の実行リスト管理ロジックは、実行リストコントローラ（ＲＬＣ：ｒｕｎ  ｌｉｓｔ  ｃｏｎｔｒｏｌｌｅｒ）と称されることもある。
【００４２】
本発明の様々な実施形態において、ＨＷＳ１２８が、実行リスト１５０からプロセスの実行を開始すると、ＣＰ１２４は、対応するコマンドバッファ１２５からのコマンドの取得および実行を開始する。いくつかの事例において、ＣＰ１２４は、ＣＰＵ１０２から受信したコマンドに対応する、ＡＰＤ１０４内で実行される１つ以上のコマンドを生成し得る。１つの実施形態において、ＣＰ１２４は、ＡＰＤ１０４リソースおよび／またはシステム１００のリソースの利用が改善または最大化されるように、ＡＰＤ１０４におけるコマンドの優先化およびスケジューリングを、他のコンポーネントとともに実装する。
【００４３】
ＡＰＤ１０４は、インタラプトジェネレータ１４６に対してアクセスを有するか、またはインタラプトジェネレータ１４６を含み得る。インタラプトジェネレータ１４６は、ＡＰＤ１０４がページフォールト等のインタラプトイベントに遭遇すると、ＡＰＤ１０４によってオペレーティングシステム１０８にインタラプトをかけるよう構成され得る。例えば、ＡＰＤ１０４は、ＩＯＭＭＵ１１６内のインタラプト生成ロジックに依存して、上述のページフォールトインタラプトを生成し得る。
【００４４】
ＡＰＤ１０４は、シェーダコア１２２内で現在実行中のプロセスを切り替えるためのプリエンプションおよびコンテキストスイッチロジック１２０を含み得る。コンテキストスイッチロジック１２０は、例えばプロセスを停止させ、その現在状態（例えばシェーダコア１２２状態およびＣＰ１２４状態）を保存する機能を含む。
【００４５】
本明細書において参照される状態という用語は、初期状態、中間状態および／または最終状態を含み得る。初期状態は、機械がプログラム順序に従って入力データセットを処理することによって、データの出力セットを生成する開始点である。例えば、処理を前進させるためにいくつかのポイントにおいて記憶される必要がある中間状態が存在する。この中間状態は、他のプロセスによってインタラプトがかけられた場合に、後に実行を継続することを可能にするために記憶される場合もある。出力データセットの一部として記録され得る最終状態も存在する。
【００４６】
プリエンプションおよびコンテキストスイッチロジック１２０は、他のプロセスを、ＡＰＤ１０４にコンテキストスイッチするためのロジックを含み得る。他のプロセスをＡＰＤ１０４で実行するようにコンテキストスイッチするための機能は、ＡＰＤ１０４上で実行するために、例えばＣＰ１２４およびＤＣ１２６によってプロセスをインスタンス化することと、当該プロセスに対して以前に保存された状態を復元することと、当該プロセスの実行を開始することと、を含み得る。
【００４７】
メモリ１０６は、ＤＲＡＭ（図示せず）等の非永続型メモリを含み得る。メモリ１０６は、例えば、アプリケーションまたは他の処理ロジックの部分を実行する間に、処理ロジック命令、定数および様々な変数を記憶し得る。例えば、１つの実施形態において、ＣＰＵ１０２上で１つ以上の演算を実行するための制御ロジックの部分は、ＣＰＵ１０２によって演算のそれぞれの部分が実行される間、メモリ１０６内に常駐し得る。
【００４８】
実行中、個別のアプリケーション、ＯＳ関数、処理ロジックコマンドおよびシステムソフトウェアは、メモリ１０６に常駐し得る。ＯＳ１０８に対して必須である制御ロジックコマンドは、一般に、実行中にはメモリ１０６に常駐することとなるであろう。他のソフトウェアコマンド、例えばカーネルモードドライバ１１０およびソフトウェアスケジューラ１１２は、システム１００の実行中にはメモリ１０６に常駐し得る。
【００４９】
この例において、メモリ１０６は、コマンドをＡＰＤ１０４に送るために、ＣＰＵ１０２によって用いられるコマンドバッファ１２５を含む。メモリ１０６は、プロセスリストおよびプロセス情報（例えば、アクティブリスト１５２およびプロセス制御ブロック１５４）を含み得る。これらのリストおよび情報は、スケジュール情報を、ＡＰＤ１０４および／または関連するスケジューリングハードウェアに伝えるために、ＣＰＵ１０２上で実行されるスケジューリングソフトウェアによって使用される。メモリ１０６に対するアクセスは、メモリ１０６に接続されたメモリコントローラ１４０によって管理され得る。例えば、メモリ１０６に対する読み出しおよび書き込みを実行するための、ＣＰＵ１０２または他のデバイスからの要求は、メモリコントローラ１４０によって管理される。
【００５０】
システム１００の他の態様に戻ると、ＩＯＭＭＵ１１６は、マルチコンテキスト・メモリ管理ユニットである。
【００５１】
本明細書で用いられるコンテキストという用語は、カーネルが実行される環境であって、同期およびメモリ管理が定義されるドメインであるとみなされる。コンテキストは、１セットのデバイスと、これらのデバイスに対してアクセス可能であるメモリと、対応するメモリ特性と、メモリオブジェクト上におけるカーネル（単数または複数）または演算の実行をスケジュールするために用いられる１つ以上のコマンドキューとを含む。
【００５２】
図１Ａにおいて示される例に戻ると、ＩＯＭＭＵ１１６は、ＡＰＤ１０４を含むデバイスに対するメモリページアクセスに対して、仮想アドレスから物理アドレスへの変換を実行するためのロジックを含む。ＩＯＭＭＵ１１６は、例えば、ＡＰＤ１０４等のデバイスによるページアクセスの結果としてページフォールトが生じる場合に、インタラプトを生成するためのロジックを含み得る。ＩＯＭＭＵ１１６は、トランスレーションルックアサイドバッファ（ＴＬＢ：ｔｒａｎｓｌａｔｉｏｎ  ｌｏｏｋａｓｉｄｅ  ｂｕｆｆｅｒ）１１８を含むか、あるいはＴＬＢ１１８に対するアクセスを有し得る。ＴＬＢ１１８は、１つの例として、メモリ１０６内のデータ用にＡＰＤ１０４によりなされた要求に対して、論理（すなわち仮想）メモリアドレスから物理メモリアドレスへの変換を高速化するために、コンテントアドレサブルメモリ（ＣＡＭ：ｃｏｎｔｅｎｔ  ａｄｄｒｅｓｓａｂｌｅ  ｍｅｍｏｒｙ）に実装され得る。
【００５３】
示された例において、通信インフラストラクチャ１０９は、必要に応じてシステム１００のコンポーネントを相互接続する。通信インフラストラクチャ１０９は、周辺構成要素相互接続（ＰＣＩ）バス、拡張ＰＣＩ（ＰＣＩ−Ｅ）バス、アドバンスト・マイクロコントローラ・バス・アーキテクチャ（ＡＭＢＡ）バス、アドバンスト・グラフィックス・ポート（ＡＧＰ）または他の通信インフラストラクチャのうち１つ以上を含み得る（図示せず）。通信インフラストラクチャ１０９は、イーサネット（登録商標）若しくは同様のネットワークまたはアプリケーションの転送速度要求を満足する任意の好適な物理的通信インフラストラクチャを含み得る。通信インフラストラクチャ１０９は、コンピューティングシステム１００のコンポーネントを含むコンポーネントを相互接続するための機能を含む。
【００５４】
この例において、ＯＳ１０８は、システム１００のハードウェアコンポーネントを管理する機能と、共通サービスを提供するための機能とを含む。様々な実施形態において、ＯＳ１０８は、ＣＰＵ１０２上で実行し、共通サービスを提供する。これらの共通サービスは、例えば、ＣＰＵ１０２内での実行のためにアプリケーションをスケジューリングすることと、フォールト管理と、インタラプトサービスと、他のアプリケーションの入力および出力を処理することと、を含む。
【００５５】
いくつかの実施形態において、ＯＳ１０８は、例えばインタラプトコントローラ１４８等のインタラプトコントローラによって生成されたインタラプトに基づいて、適切なインタラプトハンドリングルーチンを呼び出す。例えば、ＯＳ１０８は、ページフォールト・インタラプトを検出すると、関連するページをメモリ１０６にロードし始め、且つ、対応するページテーブルを更新するために、インタラプトハンドラを呼び出す。
【００５６】
ＯＳ１０８は、ＯＳにより管理されるカーネル機能を通して、ハードウェア部品に対するアクセスが仲介されることを確保することによって、システム１００を保護する機能を含み得る。事実、ＯＳ１０８は、アプリケーション１１１等のアプリケーションが、ＣＰＵ１０２上でユーザスペースにおいて実行されることを確保する。ＯＳ１０８は、アプリケーション１１１が、ハードウェアにアクセスするためにＯＳにより提供されるカーネル機能および／または入出力機能を呼び出すことも確保する。
【００５７】
例として、アプリケーション１１１は、ＣＰＵ１０２上でも実行されるユーザ計算を実行するための様々なプログラムまたはコマンドを含む。ＣＰＵ１０２は、選択されたコマンドを、ＡＰＤ１０４上で処理されるためにシームレスに送信し得る。１つの例において、ＫＭＤ１１０は、ＣＰＵ１０２、ＣＰＵ１０２上で実行されるアプリケーションまたは他のロジックが、ＡＰＤ１０４の機能を呼び出し得るアプリケーションプログラミングインタフェース（ＡＰＩ）を実装する。例えば、ＫＭＤ１１０は、ＣＰＵ１０２からのコマンドを、コマンドバッファ１２５にエンキューし得る。なお、ＡＰＤ１０４は、このコマンドバッファ１２５からコマンドを続けて取得することとなる。加えて、ＫＭＤ１１０は、ＡＰＤ１０４上で実行されるプロセスのスケジューリングを、ＳＷＳ１１２とともに実行する。ＳＷＳ１１２は、例えば、ＡＰＤ上で実行されるプロセスの優先度リストを保持するためのロジックを含み得る。
【００５８】
本発明の他の実施形態において、ＣＰＵ１０２上で実行するアプリケーションは、コマンドをエンキューするときに、ＫＭＤ１１０を完全にバイパスし得る。
【００５９】
いくつかの実施形態において、ＳＷＳ１１２は、ＡＰＤ１０４上で実行されるプロセスのアクティブリスト１５２を、メモリ１０６に保持する。ＳＷＳ１１２は、アクティブリスト１５２におけるプロセスのうち、ハードウェアのＨＷＳ１２８により管理される一部を選択する。各プロセスをＡＰＤ１０４上で実行することに関する情報は、ＣＰＵ１０２からプロセス制御ブロック（ＰＣＢ：ｐｒｏｃｅｓｓ  ｃｏｎｔｒｏｌ  ｂｌｏｃｋ）１５４を通して、ＡＰＤ１０４に伝えられる。
【００６０】
アプリケーション、ＯＳおよびシステムソフトウェアのための処理ロジックは、マスクワーク／フォトマスクの生成を通して最終的に製造プロセスを構成することで、本明細書において説明される本発明の態様を具体化するハードウェア装置を生成することを可能にするための、例えば、Ｃ言語等のプログラム言語および／またはＶｅｒｉｌｏｇ、ＲＴＬ等のハードウェア記述言語もしくはネットリストにおいて指定されるコマンドを含み得る。
【００６１】
当業者は、コンピューティングシステム１００が、図１Ａにおいて示されるコンポーネントよりも多数または少数のコンポーネントを含み得ることを、本明細書を読むことで理解するであろう。例えば、コンピューティングシステム１００は、１つ以上の入力インターフェースと、不揮発性ストレージと、１つ以上の出力インターフェースと、ネットワークインターフェースと、１つ以上のディスプレイまたはディスプレイインターフェースと、を含み得る。
【００６２】
図１Ｂは、図１Ａにおいて示されるＡＰＤ１０４のより詳細な例示を示す実施形態である。図１Ｂにおいて、ＣＰ１２４は、ＣＰパイプライン１２４ａ，１２４ｂ，１２４ｃを含み得る。ＣＰ１２４は、図１Ａにおいて示されるコマンドバッファ１２５から入力として提供されるコマンドリストを、処理するように構成され得る。図１Ｂの典型的な動作において、ＣＰ入力０（１２４ａ）は、コマンドをグラフィックスパイプライン１６２に駆動することを担当する。ＣＰ入力１および２（１２４ｂおよび１２４ｃ）は、コマンドを計算パイプライン１６０に伝える。ＨＷＳ１２８の動作を制御するためのコントローラ機構１６６も提供される。
【００６３】
図１Ｂにおいて、グラフィックスパイプライン１６２は、本明細書において順序化パイプライン１６４と称される、１セットのブロックを含み得る。例えば、順序化パイプライン１６４は、頂点グループ変換器（ＶＧＴ：ｖｅｒｔｅｘ  ｇｒｏｕｐ  ｔｒａｎｓｌａｔｏｒ）１６４ａと、プリミティブアセンブラ（ＰＡ：ｐｒｉｍｉｔｉｖｅ  ａｓｓｅｍｂｌｅｒ）１６４ｂと、スキャンコンバータ（ＳＣ：ｓｃａｎ  ｃｏｎｖｅｒｔｅｒ）１６４ｃと、シェーダエクスポート・レンダーバック・ユニット（ＳＸ／ＲＢ：ｓｈａｄｅｒ−ｅｘｐｏｒｔ，ｒｅｎｄｅｒ−ｂａｃｋ  ｕｎｉｔ）１７６とを含む。順序化パイプライン１６４内の各ブロックは、グラフィックスパイプライン１６２内の異なる段階のグラフィックス処理を表し得る。順序化パイプライン１６４は、固定機能ハードウェアパイプラインであり得る。本発明の精神および範囲に含まれ得る他の実装を用いることも可能である。
【００６４】
わずかな量のデータが、入力としてグラフィックスパイプライン１６２に提供されるが、このデータは、グラフィックスパイプライン１６２からの出力として提供される回数分だけ増幅されることとなるであろう。グラフィックスパイプライン１６２は、ＣＰパイプライン１２４ａから受け取ったワークアイテムグループ内の範囲にわたってカウントするためのＤＣ１６６も含む。ＤＣ１６６を通して提示された計算作業は、グラフィックスパイプライン１６２と準同期している。
【００６５】
計算パイプライン１６０は、シェーダＤＣ１６８，１７０を含む。ＤＣ１６８，１７０のそれぞれは、ＣＰパイプライン１２４ｂ，１２４ｃから受け取ったワークグループ内の計算範囲にわたってカウントするように構成されている。
【００６６】
図１Ｂにおいて示されるＤＣ１６６，１６８，１７０は、入力範囲を受け取り、入力範囲をワークグループに分割し、次いでこれらのワークグループをシェーダコア１２２に伝える。
【００６７】
グラフィックスパイプライン１６２は、一般に固定機能パイプラインであるため、その状態を保存および復元することは困難であり、そのためグラフィックスパイプライン１６２は、コンテキストスイッチが困難である。したがって、ほとんどの場合、本明細書において論じられるコンテキストスイッチは、グラフィックス処理におけるコンテキストスイッチに関係しない。例外は、シェーダコア１２２におけるグラフィックス作業であり、これはコンテキストスイッチされ得る。
【００６８】
グラフィックスパイプライン１６２内の作業の処理が完了した後に、完了した作業は、レンダーバックユニット１７６を通して処理される。レンダーバックユニット１７６は、デプス計算およびカラー計算を行い、次いでその最終結果をメモリ１３０に書き込む。
【００６９】
シェーダコア１２２は、グラフィックスパイプライン１６２および計算パイプライン１６０により共有され得る。シェーダコア１２２は、ウェーブフロントを実行するように構成された一般的なプロセッサである。１つの例において、計算パイプライン１６０内の全ての作業は、シェーダコア１２２内で処理される。シェーダコア１２２は、プログラム可能なソフトウェアコードを実行し、例えば状態データ等の様々な形態のデータを含む。
【００７０】
図２は、図１Ａのコンピューティングシステム１００の代替的実施形態であるコンピューティングシステム２００の例示的ブロック図である。コンピューティングシステム２００は、本発明の実施形態に係るシステムメモリマッピング構造と共に、ＣＰＵおよびＩ／ＯデバイスのためのＩＯＭＭＵアーキテクチャおよびメモリ管理を含む。しかし、上述のコンピューティングシステム１００のコンポーネントの多くの詳細は、コンピューティングシステム２００内の同様のコンポーネントにもあてはまる。したがって、これらの同様のコンポーネントの詳細は、コンピューティングシステム２００の説明において繰り返されない。
【００７１】
メモリマッピング構造は、メモリ２０６と、メモリコントローラ２４０と、ＩＯＭＭＵ２１６と、バス２７８を介して接続され、それぞれ番号２５０，２５２，２５４で表わされるＩ／ＯデバイスＡ，Ｂ，Ｃとの間で動作するように構成され得る。ＩＯＭＭＵ２１６は、ダイレクトメモリアクセス（ＤＭＡ）仮想アドレスを、システム物理アドレスに変換するように動作するハードウェア装置とすることができる。ＩＯＭＭＵ２１６は、１つ以上の固有のアドレス空間を構築し、固有のアドレス空間（単数または複数）を、装置のＤＭＡ動作がどのようにしてメモリにアクセスするのかを制御するために用いることができる。図２は、例示するために１つだけのＩＯＭＭＵを示しており、本発明の実施形態は、１つよりも多いＩＯＭＭＵを備え得る。
【００７２】
一般に、ＩＯＭＭＵは、独自の個別のバスおよびＩ／Ｏ装置（単数または複数）に接続され得る。図２において、バス２０９は、ＰＣＩバス、ＡＧＰバス、ＰＣＩ−Ｅバス（これはより正確にはポイントツーポイントプロトコルとして説明される）または現在利用可能であるか若しくは将来開発される任意の他のタイプのバスを含む、コンピュータシステムで用いられる任意のタイプのバスとすることができる。バス２０９は、インタラプトコントローラ２４８、カーネルモードドライバ２１０、ＳＷＳ２１２、アプリケーション２１１およびＯＳ２０８と、システム２００における他のコンポーネントとを相互接続し得る。
【００７３】
Ｉ／Ｏ装置Ｃは、メモリ管理Ｉ／Ｏ（ＭＭＩＯ）マップと、ホストデータパス（ＨＤＰ）２５６と、装置プロセッシングコンプレックス２５８と、プライベートメモリ管理ユニット（ＭＭＵ）２６０と、入力出力トランスレーションルックアサイドバッファ（ＩＯＴＬＢ：ｉｎｐｕｔ  ｏｕｔｐｕｔ  ｔｒａｎｓｌａｔｉｏｎ  ｌｏｏｋａｓｉｄｅ  ｂｕｆｆｅｒ）２６４と、アドレス変換サービス（ＡＴＳ：ａｄｄｒｅｓｓ  ｔｒａｎｓｌａｔｉｏｎ  ｓｅｒｖｉｃｅ）／ページ要求インターフェース（ＰＲＩ：ｐａｇｅ  ｒｅｑｕｅｓｔ  ｉｎｔｅｒｆａｃｅ）要求ブロック２６２と、ローカルメモリ２６８と、ローカルメモリ保護マップ２６６と、マルチプレクサ２７０，２７２，２７４，２７６，２８０とを含み得る。
【００７４】
ＩＯＭＭＵ２１６の実施形態は、装置テーブルベースレジスタ（ＤＴＢＲ）２４１と、コマンドバッファベースレジスタ（ＣＢＢＲ）２３８と、イベントログベースレジスタ（ＥＬＢＲ）２３６と、制御ロジック２４９と、周辺ページ要求レジスタ（ＰＰＲＲ）２４２とを含むように設定され得る。さらに、ＩＯＭＭＵ２１６は、Ｉ／Ｏページテーブルウォーカ２４４を呼び出して、例えばアドレス変換などでページテーブルを行き来するために、ゲスト制御レジスタテーブルセレクタ２４６を含み得る。また、ＩＯＭＭＵ２１６は、ページテーブルウォークを行う必要なしにその後の変換を果たすのに用いられるアドレス変換をキャッシュするための１つ以上のトランスレーションルックアサイドバッファ（ＴＬＢ）２１８と関連付けられ得る。装置テーブルからのアドレスは、バス２８２を介してＩＯＭＭＵと通信され得る。
【００７５】
本発明の実施形態は、ＩＯＭＭＵ２１６が、Ｉ／Ｏページテーブル２２４を用いて、Ｉ／Ｏ装置によってアクセスされるメモリ上で権限チェックおよびアドレス変換を提供することをもたらす。また、本発明の実施形態は、例として、ＡＭＤ６４ロングフォーマットで設計されたＩ／Ｏページテーブルを用いることができる。装置テーブル２２６は、Ｉ／Ｏ装置が特定のドメインに割り当てられることを可能にする。また、Ｉ／Ｏページテーブルは、Ｉ／Ｏ装置のページテーブルへのポインタを含むように構成され得る。
【００７６】
メモリ２０６は、インタラプト再マッピングテーブル（ＩＲＴ）２２８と、コマンドバッファ２２２と、イベントログ２２０と、仮想システム３００（より詳細に後述される）とをさらに備える。また、メモリ２０６は、同時に実行している１つ以上のゲストＯＳ（例えば、これらに限定されないが、符号２３０によって表わされるゲストＯＳ１および符号２３２によって表わされるゲストＯＳ２）と共に、ハイパーバイザ２３４のようなホスト変換モジュールを含む。
【００７７】
さらに、ＩＯＭＭＵ２１６およびメモリ２０６は、ＤＴＢＲ２４１が装置テーブル２２６の開始インデックスを指すように設定され得る。さらに、ＣＢＢＲ２３８は、コマンドバッファ２２２の開始インデックスを指す。ＥＬＢＲ２３６は、イベントログ２２０の開始インデックスを指す。ＰＰＲＲ２４２は、ＰＰＳＲテーブル２２７の開始インデックスを指す。
【００７８】
ＩＯＭＭＵ２１６は、ＩＯＭＭＵ２１６と、例えばＣＰＵ２０２のようなシステムプロセッサ（単数または複数）との間でコマンドおよびステータス情報を交換するために、メモリベースのキューを用いることができる。ＣＰＵ２０２は、ＭＭＵ２１４を含むことができる。
【００７９】
１つの例示的実施形態によれば、ＩＯＭＭＵ２１６は、（例えば、ＨｙｐｅｒＴｒａｎｓｐｏｒｔ（登録商標）リンクまたはＰＣＩベースのバスを用いて通信され得る）下流の装置から到着する要求をインターセプトし、当該要求に対して権限チェックおよびアドレス変換を行い、変換されたバージョンを上流のメモリ２０６空間に送信し得る。他の要求は、変更されない状態で渡され得る。
【００８０】
図３は、本発明の実施形態に係る図２に示された仮想システム３００のより詳細なブロック図である。システム３００は、Ｉ／Ｏ装置／アプリケーション／プロセス（Ｉ／Ｏ装置３０４）と、ランダムアクセスメモリ（ＲＡＭ）３０６とを含む。
【００８１】
例として、Ｉ／Ｏ装置３０４は、グラフィックス処理装置を含むことができる。Ｉ／Ｏ装置３０４は、ＩＯＭＭＵによって提供される二層アドレス変換を介して、仮想システム３００のメモリ３０６と相互作用する。
【００８２】
ゲスト仮想アドレス（ＧＶＡ）は、アドレス変換用の仮想システム３００のＩ／Ｏ装置３０４によって提供される。したがって、ＧＶＡは、ゲスト仮想アドレス空間３０８と関連付けられる。ＩＯＭＭＵは、ＧＶＡを、ゲスト物理アドレス空間３１２と関連付けられたゲスト物理アドレス（ＧＰＡ）に変換する第１変換層であるＩＯＭＭＵゲスト変換３１０を設けている。ＩＯＭＭＵゲスト変換３１０は、仮想システム３００にて動作するゲストＯＳによって管理され得る。
【００８３】
また、ＩＯＭＭＵは、ＧＰＡを、システム物理アドレス空間３１６と関連付けられたシステム物理アドレス（ＳＰＡ）に変換する第２変換層である、ＩＯＭＭＵネスト化変換３１４を設けている。ＩＯＭＭＵネスト化変換３１４は、仮想システム３００にて動作するハイパーバイザによって管理され得る。ＳＰＡは、メモリ３０６内の情報にアクセスするのに用いられ得る。
【００８４】
したがって、ＩＯＭＭＵは、ＧＶＡからＧＰＡ、およびＧＰＡからＳＰＡへの変換を達成するために、二層アドレッシングを設けている。ＩＯＭＭＵは、周辺機器および仮想ゲストＯＳに関係する変換を含む両方のアドレス変換層に対する改善された性能を有するハードウェアソリューションを設けている。
【００８５】
図４は、本発明の実施形態に係るＩＯＭＭＵ２１６およびメモリ２０６に関連するデータ構造の例示的ブロック図４００である。前述のように、ＩＯＭＭＵ２１６は、装置テーブルベースレジスタ２４１を含む種々のレジスタを含む。装置テーブルベースレジスタ２４１は、図２の装置テーブル２２６内に配置される装置テーブル４０４のルートへのポインタを含む。装置テーブル４０４は、装置テーブルエントリ（ＤＴＥ）４０８を含む。各ＤＴＥ４０８は、メモリ２０６のＩ／Ｏページテーブル２２４に関するデータ構造のルートへのポインタを含む。
【００８６】
ＤＴＥ４０８は、システムアドレス変換テーブル構造４１２のルートを指すシステムポインタ４１１と、ゲスト制御レジスタテーブル４１５／ゲストアドレス変換テーブル構造４１４のルートを指すゲストポインタ４１３とを含み得る。したがって、ＩＯＭＭＵ２１６は、二層アドレス変換を行うために、システム／ゲストアドレス変換テーブル構造４１２，４１４にアクセスし得る。ＧＶＡからＧＰＡへの変換を行うために、ＩＯＭＭＵ２１６は、ゲストポインタ４１３を用いてＩ／Ｏページテーブル２２４にアクセスし得る。ＧＰＡからＳＰＡへの変換を行うために、ＩＯＭＭＵ２１６は、システムポインタ４１１を用いてＩ／Ｏページテーブル２２４にアクセスする。
【００８７】
したがって、ＩＯＭＭＵ２１６は、二層のアドレス変換を、同時におよび／または独立して行い得る。また、ＩＯＭＭＵ２１６は、システムアドレス変換テーブル構造４２０のルートを指すシステムポインタ４１９を含むＤＴＥ４１８を用いて、単層変換を行い得る。ゲストアドレス変換テーブル構造４１４からのエントリは、ＧＰＡのフォーマットであってもよい。各ＧＰＡエントリは、カスケードされ／ネスト化されたウォークを用いて、システムアドレス変換テーブル構造４１２を通して変換され得る。
【００８８】
図５は、図２の例示的実施形態に係る二層アドレス変換に関連するデータ構造の例示的ブロック図５００である。Ｉ／Ｏ装置Ｃ２５４（図２参照）は、装置ＩＤ５２２と関連付けられている。装置ＩＤ５２２は、Ｉ／Ｏ装置を識別するのに用いられ得る。例えば、装置ＩＤ５２２は、ＰＣＩ−Ｅインターフェースにおいて用いられるバス、デバイス、ファンクション（ＢＤＦ（登録商標））指定であってもよい。Ｉ／Ｏ装置Ｃ２５４は、アドレス変換トランザクション５２４（例えば、ＰＣＩ−ＳＩＧ仕様に従うアドレス変換サービス（ＡＴＳ）を用いるＩ／ＯデバイスＣ２５４からの要求）を発行する。アドレス変換トランザクション５２４は、Ｉ／Ｏ装置Ｃ２５４が変換したことを必要とするＧＶＡ５２６を含み得る。アドレス変換トランザクション５２４は、装置ＩＤ５２２と、プロセスアドレス空間ＩＤ５２８とを含み得る。プロセスアドレス空間ＩＤ５２８は、ゲスト仮想マシン（ＶＭ）内のアプリケーションアドレス空間を識別するのに用いられてもよく、共有ローカルメモリに存在する並行コンテキストを分離するためにＩ／Ｏ装置Ｃ２５４上で用いられてもよい。共に、装置ＩＤ５２２とプロセスアドレス空間ＩＤ５２８とは、アプリケーションアドレス空間を固有に識別し得る。
【００８９】
アドレス変換トランザクション５２４は、ＩＯＭＭＵ２１６によって受信される。ＩＯＭＭＵ２１６は、装置テーブル４０４のルートを指すルートポインタを含む装置テーブルベースレジスタ２４１に基づいて、装置テーブル４０４にアクセスする。
【００９０】
装置テーブル４０４は、ＤＴＥ４０８にアクセスするために、アドレス変換トランザクション５２４からの装置ＩＤ５２２を用いて索引を付けられる。ＤＴＥ４０８は、ゲストポインタ５１３およびシステムポインタ５１１を含む。システムポインタ５１１は、システムアドレス変換テーブル構造４１２をウォークする（辿る）のに用いられる。ゲストポインタ５１３は、ゲスト制御レジスタテーブル４１５のルートにアクセスするのに用いられる。ゲスト制御レジスタテーブル４１５は、アドレス変換トランザクション５２４に対応するゲストアドレス変換テーブル構造４１４を指すゲスト制御レジスタテーブルエントリ５１７にアクセスするために、アドレス変換トランザクション５２４からのプロセスアドレス空間ＩＤ５２８を用いて索引を付けられる。ゲストアドレス変換テーブル構造４１４は、アドレス変換トランザクション５２４からのＧＶＡ５２６を用いてウォークされる。
【００９１】
図６Ａは、図２の例示的実施形態に係る二層アドレス変換システム６００Ａの例示的ブロック図である。システム６００Ａは、図４に示されるゲストアドレス変換テーブル構造４１４およびシステムアドレス変換テーブル構造４１２を含む。４レベルページテーブル構造が示されており、当該構造は、４Ｋｂｙｔｅ物理ページ６３１にアクセスするのに用いられる。実施形態は、より多くまたはより少ないレベル（例えば、２Ｍｂｙｔｅ物理ページを参照する３レベルページテーブル構造、１Ｇｂｙｔｅ物理ページを参照する２レベルページテーブル構造など）を用いて、ページテーブル構造を提供し得る。ＧＶＡ５２６は、アドレス変換トランザクション（例えば、ＡＴＳの要求）を発行するＩ／Ｏデバイスによって提供されてもよく、最終的にはデータバイト６３０にアクセスすることに関連するＳＰＡに変換されることになる。ゲスト制御レジスタテーブルエントリ５１７は、アドレス変換トランザクションによって提供される装置ＩＤおよびプロセスアドレス空間ＩＤを用いて、装置テーブルおよびゲスト制御レジスタテーブル（図５を参照して上記で説明される）をウォーキングする（辿る）ことによって得られてもよい。
【００９２】
ゲスト制御レジスタテーブルエントリ５１７は、ページマップレベル４（ＰＭＬ４）テーブルアドレス６３２を含む。ＰＭＬ４テーブルアドレス６３２は、ルートページテーブルポインタ６３４に対応するが、ＰＭＬ４テーブルアドレス６３２は、ＧＰＡのフォーマットである。システム６００Ａは、ＰＭＬ４テーブルアドレス６３２を、ＧＰＡフォーマットからＳＰＡフォーマットに変換するために、ネスト化されたウォーク６３６を行う。ＳＰＡは、レベル４ページテーブル６３８のルートのシステム物理アドレスに対応する。したがって、例えば、ルートページテーブルポインタ６３４に関連する黒い太線は、ネスト化されたウォーク６３６を用いて得られるＳＰＡを表し得る。レベル４ページテーブル６３８は、ルートページテーブルポインタ６３４を用いて識別され、レベル４ページテーブル６３８のエントリは、ページマップレベル４（ＰＭＬ４）オフセット６３７を用いて索引を付けられる。ＰＭＬ４オフセット６３７は、変換されるべきＧＶＡ５２６のビット３９〜４７と関連付けられる。したがって、ＰＭＬ４エントリ（ＰＭＬ４Ｅ）６３９は、ルートページテーブルポインタ６３４、レベル４ページテーブル６３８およびＰＭＬ４オフセット６３７を用いて配置される。ＰＭＬ４Ｅ６３９はＧＰＡであることから、システム６００Ａは、ネスト化されたウォーク６３６を用いて、ＰＭＬ４Ｅ６３９をＳＰＡにコンバートする。
【００９３】
ネスト化されたウォーク６３６は、ゲストアドレス変換テーブル構造４１４からのＧＰＡごとに、ＧＰＡからＳＰＡへの変換を行うために、システムアドレス変換テーブル構造４１２を用いて実装され得る。例えば、ＧＰＡ６４０は、ゲストアドレス変換テーブル構造４１４のルートページテーブルポインタ６４１用の対応するＳＰＡを得るために、変換用のＰＭＬ４Ｅ６３９とともにロードされ得る。ＧＰＡ６４０は、システムアドレス変換テーブル構造４１２の種々のテーブルに索引を付けるのに用いられるオフセットを含む。
【００９４】
ネスト化されたウォーク６３６は、ページマップレベル４（ＰＭＬ４）テーブル６４４のルートを配置するために、ＰＭＬ４Ｅ６３９と関連付けられたネスト化された制御レジスタ６４２を用いる。ＰＭＬ４オフセット６４６（ＧＰＡ６４０のビット３９〜４７）は、ＰＭＬ４テーブル６４４に索引を付け、エントリｎＰＭＬ４Ｅ６４８を得るのに用いられる。ｎＰＭＬ４Ｅ６４８は、ページディレクトリポインタ（ＰＤＰ）テーブル６５０のルートを指し、ＰＤＰオフセット６５２（ＧＰＡ６４０のビット３０〜３８）は、ＰＤＰテーブル６５０にインデックスを付け、エントリｎＰＤＰＥ６５４を得るのに用いられる。ｎＰＤＰＥ６５４は、ページディレクトリ（ＰＤ）テーブル６５６のルートを指し、ＰＤオフセット６５８（ＧＰＡ６４０のビット２１〜２９）は、ＰＤテーブル６５６に索引を付け、エントリｎＰＤＥ６６０を得るのに用いられる。ｎＰＤＥ６６０は、ページテーブル６６２のルートを指し、ＰＴオフセット６６４（ＧＰＡ６４０のビット１２〜２０）は、ページテーブル６６２に索引を付け、エントリｎＰＴＥ６６６を得るのに用いられる。ｎＰＴＥ６６６は、ゲスト４ＫＢメモリページ６６８のルートを指し、物理ページオフセット６７０（ＧＰＡ６４０のビット０〜１１）は、ゲスト４ＫＢメモリページ６６８に索引を付け、エントリｇＰＭＬ４Ｅ６７２を得るのに用いられる。ｇＰＭＬ４Ｅ６７２は、ＧＰＡ  ＰＭＬ４Ｅ６３９に対応するＳＰＡ値であり、ゲストアドレス変換テーブル構造４１４にレベル３ページテーブル６７４を配置するために、ルートページテーブルポインタ６４１に対して用いられる。
【００９５】
レベル３ページテーブル６７４は、ＰＤＰＥ６７６（ＧＰＡフォーマット）を得るために、ページディレクトリポインタ（ＰＤＰ）オフセット６７５を用いて索引を付けられる。ネスト化されたウォーク６３６は、ＧＰＡ  ＰＤＰＥ６７６を、ルートページテーブルポインタ６７７に対応するＳＰＡ値に変換するのに用いられる。ルートページテーブルポインタ６７７は、ＰＤＥ６８０（ＧＰＡフォーマット）を得るために、ページディレクトリオフセット６７９（ＧＶＡ５２６のビット２１〜２９）を用いて索引を付けられるレベル−２ページテーブル６７８を配置するのに用いられる。ネスト化されたウォーク６３６は、ＧＰＡ  ＰＤＥ６８０を、ルートページテーブルポインタ６８１に対応するＳＰＡ値に変換するのに用いられる。ルートページテーブルポインタ６８１は、ＰＴＥ６８４（ＧＰＡフォーマット）を得るために、ページテーブルオフセット６８３（ＧＶＡ５２６のビット１２〜２０）を用いて索引を付けられるレベル１ページテーブル６８２を配置するのに用いられる。ネスト化されたウォーク６３６は、ＧＰＡ  ＰＴＥ６８４を、ルートページテーブルポインタ６８５に対応するＳＰＡ値に変換するのに用いられる。ルートページテーブルポインタ６８５は、データバイト６３０を得るために、物理ページオフセット６８６（ＧＶＡ５２６のビット０〜１１）を用いて索引を付けられる４Ｋｂｙｔｅ物理ページ６３１を配置するのに用いられる。
【００９６】
したがって、システム６００Ａは、二層、すなわちＧＶＡからＧＰＡ、およびＧＰＡからＳＰＡへのアドレス変換を行うために、ページテーブルウォークのネスト化されたカスケードを用いる。二層のネスト化されたアドレス変換が示されるが、付加的な層は、同様のネスト化された／再帰的な呼び出しを用いて実装され得る。システムアドレス変換テーブル構造４１２およびゲストアドレス変換テーブル構造４１４に関連する変換は、ハードウェアで実装され得る。両方の変換の組に対して一組のハードウェアが用いられてもよいが、ゲスト／システム変換の組ごとに別個のハードウェアが提供されてもよい。
【００９７】
図６Ｂは、本発明の実施形態に係るＧＶＡからＳＰＡへのアドレス変換システム６００Ｂの例示的ブロック図である。図６Ｂは、ＧＶＡからＳＰＡへのアドレス変換を達成するために、図５および図６Ａのシステム／ゲストアドレス変換テーブル構造４１２／４１４の複数の呼び出しを用いる一連のネスト化された変換を表す。システム６００Ａに対応するシステム６００Ｂにおける要素は、同一または同様の参照番号を用いて表わされ、文字「ｂ」（例えば、４１４と６１４ｂ、５２６と６２６ｂ、６３７と６３７ｂなど）を含む。システム６００Ｂは、ゲストページテーブル６１４ｂおよびネスト化されたページテーブル６１２ｂを用いて、ネスト化されたページテーブルウォークを表す。ゲストページテーブル６１４ｂは、ＧＬ４６３８ｂ、ＧＬ３６７４ｂ、ＧＬ２６７８ｂ、ＧＬ１６８２ｂおよびＧＰＡ６３１ｂ（システム６００Ａのゲストアドレス変換テーブル構造４１４におけるページテーブルレベルに対応する）を含む。
【００９８】
また、ゲストページテーブル６１４ｂは、ｎＬ４６４４ｂ、ｎＬ３６５０ｂ、ｎＬ２６５６ｂ、ｎＬ１６６２ｂおよびＧ６６８ｂ（システム６００Ａのシステムアドレス変換テーブル構造４１２におけるページテーブルレベルに対応する）を含む。ＧＶＡからＳＰＡへの変換は、Ｉ／Ｏ装置からのアドレス変換トランザクションによって提供されるＧＶＡ６２６ｂを用いて、システム６００Ｂの左上で始まる。ゲスト制御レジスタポインタ６３４ｂは、ＧＬ４６３８ｂのルートを配置するのに用いられ、ＧＶＡ［４７：３９］６３７ｂは、ＧＬ４６３８ｂに索引を付け、ＧＰＡ６３９ｂを得るのに用いられる。ＳＰＡ６４８ｂを得るために、第１のネスト化されたルックアップ（ｎＬ４  １）が行われ、ＳＰＡ６４８ｂは、ＳＰＡ６５４ｂを得るために第２のネスト化されたルックアップ（ｎＬ３  ２）を指し、ＳＰＡ６５４ｂは、ＳＰＡ６６０ｂを得るために第３のネスト化されたルックアップ（ｎＬ２  ３）を指し、ＳＰＡ６６０ｂは、ＳＰＡ６６６ｂを得るために第４のネスト化されたルックアップ（ｎＬ１４）を指し、ＳＰＡ６６６ｂは、ＧＬ３６７４ｂのルートを指すルートページテーブルポインタ６４１ｂを得るのに用いられるＧＬ４５６７２ｂを指す。
【００９９】
ＧＶＡ［３８：３０］６７５ｂに対応する、ＧＶＡ６２６ｂからの次のビットセットは、ＧＬ３６７４ｂに索引を付け、ルートページテーブルポインタ６７７ｂを最終的にもたらす次のネスト化されたカスケード（ｎＬ４  ６〜ｎＬ１  ９）へのポインタを得るために、ルートページテーブルポインタ６４１ｂからのオフセットとして用いられる。ＧＶＡ［２９：２１］６７９ｂに対応する、ＧＶＡ６２６ｂからの次のビットセットは、ＧＬ２６７８ｂにインデックスを付け、ルートページテーブルポインタ６８１ｂを最終的にもたらす次のネスト化されたカスケード（ｎＬ４  １１〜ｎＬ１  １４）へのポインタを得るために、ルートページテーブルポインタ６７７ｂからのオフセットとして用いられる。ＧＶＡ［２０：１２］６８３ｂに対応する、ＧＶＡ６２６ｂからの次のビットセットは、ＧＬ１６８２ｂにインデックスを付け、ルートページテーブルポインタ６８５ｂを最終的にもたらす次のネスト化されたカスケード（ｎＬ４  １６〜ｎＬ１  １９）へのポインタを得るために、ルートページテーブルポインタ６８１ｂからのオフセットとして用いられる。
【０１００】
ＧＶＡ［１１：０］６８６ｂに対応する、ＧＶＡ６２６ｂからの最後のビットセットは、ＧＰＡ６３１ｂにインデックスを付け、は所望のＳＰＡ６９０ｂを最終的にもたらす次のネスト化されたカスケード（ｎＬ４  ２１〜ｎＬ１  ２４）へのポインタを得るために、ルートページテーブルポインタ６８５ｂからのオフセットとして用いられる。
【０１０１】
ＳＰＡ６９０ｂは、ＧＶＡからＳＰＡへのアドレス変換用のＩ／Ｏ装置トランザクション／要求によって提供されるＧＶＡ６２６ｂに対応する。ＳＰＡ６９０ｂは、図６Ａおよび図６Ｂに示されるようにページテーブルをウォーキングすることによって得られてもよい。加えて、ＳＰＡ６９０ｂは、トランスレーションルックアサイドバッファ（ＴＬＢ）エントリ値６９２ｂとしてキャッシュされ得る。したがって、ＧＶＡ５２６／６２６ｂを変換することに対する将来の要求は、ＧＶＡ５２６／６２６ｂに対応するＳＰＡ６９０ｂを迅速にもたらすために、ＴＬＢエントリ値６９２ｂにアクセスすることによって果たされてもよく、これによりページテーブルをウォークする必要性をなくす。ＴＬＢエントリ値６９２ｂは、ＩＯＭＭＵに関連するおよび／または組み込まれるＩＯＴＬＢに格納されてもよく、ＩＯＭＭＵの遠隔にあるＴＬＢに格納されてもよい。
【０１０２】
図７は、本発明の実施形態に係る二層アドレッシングを示すフローチャート７００の例示的ブロック図である。ステップ７１０において、ＧＶＡは、トランザクション用のＧＰＡに変換される。トランザクションは、例えば、ＰＣＩ−ＳＩＧ  ＰＡＳＩＤ  ＴＬＰ  Ｐｒｅｆｉｘ  ＥＣＮ仕様に従うＰＣＩｅバス用の標準化されたフォーマットを有し得るトランザクション層パケット（ＴＬＰ）プレフィックスを含み得る。ＩＯＭＭＵは、プロセスアドレス空間ＩＤがＴＬＰプレフィックスで運ばれることを識別してもよく、プロセスアドレス空間ＩＤは、ＧＶＡからＧＰＡへの変換用のゲストテーブルを選択するのに用いられ得る。
【０１０３】
ステップ７２０において、ＧＰＡは、システム物理アドレス（ＳＰＡ）に変換される。変換テーブルは、トランザクションによって運ばれる装置ＩＤに従って選択され得る。例えば、ＰＣＩｅトランザクションがＴＬＰプレフィックスを有していない場合には、システムは、パケットがＧＰＡを含むことを判定し得る。したがって、発信側の装置ＩＤは、ＧＰＡからＳＰＡへの変換テーブルを選択するのに用いられ得る。
【０１０４】
ＩＯＭＭＵは、ＴＬＰプレフィックス用のパケットを検査し、それに応じて挙動してもよい。ＰＣＩｅトランザクションが有効なプロセスアドレス空間ＩＤを含む場合には、パケットは、ＧＶＡを含む。プロセスアドレス空間ＩＤは、ＧＶＡからＧＰＡへの変換テーブルを選択するのに用いられ、装置ＩＤ（例えば、ＰＣＩ−Ｅバス上のＢＤＦ（登録商標））は、ＧＰＡからＳＰＡへのテーブルを選択するのに用いられる。ＩＯＭＭＵが有効なプロセスアドレス空間ＩＤを検出しない場合には、パケットは、ＧＰＡを含むように推定され、装置ＩＤは、ＧＰＡからＳＰＡへの変換テーブルを選択するのに用いられる。したがって、トランザクションにおける有効なプロセスアドレス空間ＩＤの存在または欠如は、一層（ＧＰＡ−ＳＰＡ）および二層（ＧＶＡからＧＰＡ、およびＧＰＡからＳＰＡ）のアドレス変換の何れかが要求される際に、ＩＯＭＭＵによって識別され得る。
【０１０５】
（結論）
本発明の実施形態の概要および要約においては、１つ以上ではあるが全てではない、本発明の代表的な実施形態が説明される。なお、係る実施形態は、発明者（単数または複数）により検討されたものであり、したがって、係る実施形態が、本発明および添付の特許請求項を制限することを意図するものではまったくない。
【０１０６】
本発明は、特定の機能および係る機能の関連性の実装を例示する機能的ビルディングブロックの支援により、上記で説明されてきた。これらの機能的ビルディングブロックの境界は、説明の簡便化のために本明細書においては任意に画定された。本発明の特定の機能および関連性が適切に実行される限り、代替的な境界が画定されてもよい。
【０１０７】
特定の実施形態の前述の説明は、本発明の全般的な性質を十分に明らかにすることであろう。なお、本発明の全般的な性質は、当該技術分野内の知識を適用することによって、必要以上の実験を行うことなく、本発明の全般的な概念から逸脱することなく、他者が特定の実施形態を容易に修正および／または様々な用途に適応させることが可能である。したがって、係る適応例および修正例は、本明細書において提示された教示およびガイダンスに基づいて開示された実施形態の均等物の意味および範囲に含まれることを意図するものである。本明細書における表現および用語は、本明細書の用語または表現が本教示およびガイダンスに照らして当業者により解釈されるよう、説明目的のためのものであり、制限目的のためのものではないことを理解すべきである。
【０１０８】
本発明の範囲は、上述の代表的な実施形態のいずれよっても制限されるものではなく、以下の特許請求項およびそれらの均等物にしたがって定められるべきである。
【図１Ａ】
2013546104.tif 000003
【図１Ｂ】
2013546104.tif 000004
【図２】
2013546104.tif 000005
【図３】
2013546104.tif 000006
【図４】
2013546104.tif 000007
【図５】
2013546104.tif 000008
【図６Ａ】
2013546104.tif 000009
【図６Ｂ】
2013546104.tif 000010
【図７】
2013546104.tif 000011
【国際調査報告】
2013546104.tif 000012
2013546104.tif 000013
2013546104.tif 000014