(57)【特許請求の範囲】
【請求項１】
入出力（Ｉ／Ｏ）デバイスが、システムメモリに存在するデータを示すマッピングされたポインタであって、入出力メモリ管理ユニット（ＩＯＭＭＵ）を介して受信されるマッピングされたポインタを受信することと、
前記Ｉ／Ｏデバイスが、前記データを前記Ｉ／Ｏデバイスのローカルメモリにコピーすることなく、前記ＩＯＭＭＵを介して前記システムメモリ内の前記データにアクセスすることと、
前記Ｉ／Ｏデバイスが、前記マッピングされたポインタに基づく前記システムメモリ内の前記データに関する直接操作と、前記ＩＯＭＭＵから提供されたネスト型ページングトランザクションとを行うことと、を含む、
方法。
【請求項２】
前記ＩＯＭＭＵは、ハイパーバイザ又はゲストオペレーティングシステム（ＯＳ）による介入を必要とすることなく、前記マッピングされたポインタを送るように構成されている、請求項１に記載の方法。
【請求項３】
前記マッピングされたポインタは、前記Ｉ／Ｏデバイスによって使用できるように構成されており、プロセスは、前記ポインタを再構成することなく、仮想マシンにおいて作動する、請求項１に記載の方法。
【請求項４】
前記データは、画像データを含む、請求項１に記載の方法。
【請求項５】
前記システムメモリ及び前記Ｉ／Ｏデバイスは、同じゲスト仮想アドレス空間から動作して、前記ゲストＯＳによる前記システムメモリ内の前記データの直接操作を提供する、請求項１に記載の方法。
【請求項６】
前記行うことは、
ゲスト変換レイヤを用いることなく、前記ネスト型ページングトランザクションからのネスト型変換情報を用いることを含み、
前記ゲスト変換レイヤは、ゲストプロセスと前記Ｉ／Ｏデバイスとを分離するために実装されている、請求項１に記載の方法。
【請求項７】
入出力メモリ管理ユニット（ＩＯＭＭＵ）を備え、
前記ＩＯＭＭＵは、
システムメモリに存在するデータを示すマッピングされたポインタを、入出力（Ｉ／Ｏ）デバイスに送ることであって、前記Ｉ／Ｏデバイスは、前記データをローカルＩ／Ｏデバイスメモリにコピーすることなく、前記ＩＯＭＭＵを介して前記システムメモリ内の前記データにアクセスすることと、
ネスト型ページングトランザクションを前記Ｉ／Ｏデバイスに提供することと、を行うように構成されており、
前記マッピングされたポインタ及びネスト型ページングトランザクションは、前記Ｉ／Ｏデバイスが前記システムメモリ内の前記データに関する操作を行うことを可能にするように構成されている、
装置。
【請求項８】
前記ＩＯＭＭＵは、ハイパーバイザ又はゲストオペレーティングシステム（ＯＳ）による介入を必要とすることなく、前記マッピングされたポインタを送るように構成されている、請求項７に記載の装置。
【請求項９】
前記マッピングされたポインタは、前記Ｉ／Ｏデバイスによって使用できるように構成されており、プロセスは、前記マッピングされたポインタを再構成することなく、仮想マシンにおいて作動する、請求項７に記載の装置。
【請求項１０】
前記システムメモリ内の前記データは、画像データを含む、請求項７に記載の装置。
【請求項１１】
前記システムメモリ及び前記Ｉ／Ｏデバイスは、同じゲスト仮想アドレス空間から動作して、前記ゲストＯＳによる前記システムメモリ内の前記データの直接操作を提供する、請求項７に記載の装置。
【請求項１２】
前記ネスト型ページングトランザクションからのネスト型変換情報は、ゲスト変換レイヤを用いることなく使用され、
前記ゲスト変換レイヤは、ゲストプロセスと前記Ｉ／Ｏデバイスとを分離するために実装されている、請求項７に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、コンピューティングシステムに関する。より具体的には、本発明は、コンピューティングシステム内の仮想アドレス空間の共有に関する。
【背景技術】
【０００２】
グラフィックスプロセッシングユニット（ＧＰＵ）を通常のコンピュータ操作に使用することに対する要望が、ＧＰＵの単位電力及び／又は単位経費当たりの模範的な性能により、最近、増々顕著になっている。ＧＰＵの計算能力は、概して、対応する中央処理装置（ＣＰＵ）のプラットフォームの計算能力を超えた比率で成長している。この成長は、モバイルコンピューティング市場及びこれに必要な支援サーバ／エンタープライズシステムの急激な拡大と相まって、所望のユーザ経験の特定された質を提供するために利用されている。その結果、データ並列コンテンツを伴うワークロードを実行するためのＣＰＵ及びＧＰＵの組み合わせの使用は、ボリューム技術となりつつある。
【０００３】
しかしながら、ＧＰＵは、従来、グラフィックスの高速化のみに利用可能な、制約されたプログラム環境で機能してきた。このような制約は、ＧＰＵのプログラムエコシステムがが、ＣＰＵほど豊富でなかったという事実から生じていた。したがって、ＧＰＵの使用のほとんどは、二次元（２Ｄ）及び三次元（３Ｄ）のグラフィックスに限られ、そして、グラフィックス及びビデオのアプリケーションプログラミングインターフェース（ＡＰＩ）を扱うことにすでに慣れている、数少ない最先端のマルチメディアのアプリケーションに限られている。
【０００４】
マルチベンダがサポートする標準ＡＰＩ及び支援ツールであるＯｐｅｎＣＬ（登録商標）やＤｉｒｅｃｔＣｏｍｐｕｔｅ（登録商標）の出現により、従来のアプリケーションにおけるＧＰＵの制限は、従来のグラフィックスを越えて拡大されている。ＯｐｅｎＣＬ（登録商標）及びＤｉｒｅｃｔＣｏｍｐｕｔｅ（登録商標）は、将来性のある出発点ではあるが、ＣＰＵ及びＧＰＵの組み合わせが、ＣＰＵと同様に、大多数のプログラムタスク用に流動的に用いられることを可能にする環境及びエコシステムを生成することに対して、多くの障害が残されている。
【０００５】
現行のコンピューティングシステムは、多くの場合、複数の処理デバイスを含んでいる。例えば、コンピューティングシステムによっては、ＣＰＵ及びＧＰＵの両方は、個別のチップ（例えば、ＣＰＵはマザーボードに配置され、ＧＰＵはグラフィックカードに配置され得る）に含まれており、又は、単一のチップのパッケージに含まれている。しかしながら、これらの配置の何れも、（ｉ）効率的なスケジューリング、（ｉｉ）プロセス間にサービス品質（ＱｏＳ）保証を提供すること、（ｉｉｉ）プログラミングモデル、（ｉｖ）複数のターゲットの命令セットアーキテクチャ（ＩＳＡ）にコンパイルすること、及び、（ｖ）個別のメモリシステム、の各々を、電力消費を最小限にしつつ行う、ということに関連する大きな課題を依然として含んでいる。
【０００６】
例えば、個々のチップの配置は、各プロセッサがメモリにアクセスするために、チップ間のインターフェースの利用を、システム及びソフトウェアアーキテクトに対して強いることになる。これらの外部インターフェース（例えば、チップ間）は、協働する異種のプロセッサのメモリ待ち時間及び電力消費に悪影響を及ぼすと同時に、個別のメモリシステム（すなわち、個別のアドレス空間）及びドライバにより管理される共有メモリによって、きめ細やか（ｆｉｎｅ  ｇｒａｉｎ）なオフロードには許容不可能となるオーバーヘッドがもたらされる。
【０００７】
別の例において、複数のプロセッサによってアクセスされるメモリに記憶された一部の画像は、所望のレベルの品質で記憶されていない場合がある。例えば、画像の画質、コントラスト、配向（例えば、回転）等が正しくない場合がある。典型的に、表示される前に操作を要する画像データがメモリ内に存在する場合には、その画像データは、それを操作することの可能なＩ／Ｏデバイスのメモリにコピーされ、その後で、印刷できるようにメモリにコピーバックされる必要がある。このプロセスは、時間がかかり、且つ、例えば、記憶された画像データの品質を低減させ得る。
【発明の概要】
【０００８】
したがって、共有メモリに記憶されたデータに複数のプロセッサがアクセスするための効率的な様式が必要である。
【０００９】
ＧＰＵ、アクセラレイテッドプロセシングユニット（ＡＰＵ）、及び、ＧＰＵによる汎目的計算（ＧＰＧＰＵ）は、この分野では共通に使用されている用語であるが、「アクセラレイテッド処理デバイス（ＡＰＤ）」という表現は、より広い表現とみなされている。例えば、ＡＰＤは、従来のＣＰＵ、従来のＧＰＵ及び／又はこれらの組み合わせなどのリソースに関して、アクセラレイティンググラフィックス処理タスク、データ並列タスク、ネステッドデータ並列タスクに関連した機能及び計算を加速した形で実行する、ハードウェア及び／又はソフトウェアの協働集団を指している。
【課題を解決するための手段】
【００１０】
より具体的には、本発明の実施形態は、ＩＯＭＭＵの効率的なメモリ及びリソース管理のための方法、システム及びコンピュータ可読記憶媒体に関する。一実施形態では、メモリ内のデータへのアクセスに関連するポインタが、入出力メモリ管理ユニット（ＩＯＭＭＵ）を介して、入出力（Ｉ／Ｏ）デバイスに送られる。Ｉ／Ｏデバイスは、データをローカルＩ／Ｏデバイスメモリにコピーすることなく、ＩＯＭＭＵを介してメモリ内のデータにアクセスする。Ｉ／Ｏデバイスは、ポインタに基づいて、メモリ内のデータに操作を行う。
【００１１】
本発明のさらなる特徴及び利点、並びに、本発明の様々な実施形態の構造及び動作を、添付の図面を参照して、以下に詳細に説明する。本発明は、本明細書に記載された特定の実施形態に限定されないことに留意されたい。そのような実施形態は、例示目的のみのために本明細書に開示される。本明細書に含まれている教示に基づく追加的な実施形態が、当業者によって明らかとなるであろう。
【００１２】
本明細書に組み込まれ、本明細書の一部を形成する添付の図面は、本発明を例示し、さらに、説明とともに本発明の原理を説明するように機能し、当業者が本発明を実施することを可能にする。本発明の様々な実施形態が、図面を参照して以下に記載され、同様の参照番号が、全体を通じて同様の構成要素を指して使用される。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施形態による処理システムの例示的なブロック図である。
【図２】図１に例示されているＡＰＤの例示的なブロック図である。
【図３Ａ】本発明の実施形態によるＩＯＭＭＵネスト型ページングトランザクションシステムの第１のレイヤの例示的なブロック図である。
【図３Ｂ】実施形態によるＩＯＭＭＵネスト型ページングトランザクションの第２のレイヤの例示的なブロック図である。
【図４】本発明の実施形態が適用され得る、従来のメモリとＩ／Ｏデバイスとの関係についてのブロック図である。
【図５】本発明の実施形態が適用され得る、直接デバイス割り当てスキームのブロック図である。
【図６】本発明の実施形態が適用され得る、Ｉ／Ｏデバイスのページフォルト及び解決体系についての例示である。
【図７】本発明による効率的なメモリ及びリソース管理を例示するフローチャートである。
【発明を実施するための形態】
【００１４】
以下の詳細な説明において、「一実施形態」、「実施形態」、「例示的な実施形態」等への言及は、記載の実施形態が、特定の特徴、構造又は特性を含み得ることを示すが、あらゆる実施形態が、特定の特徴、構造又は特性を必ずしも含むわけではない場合がある。さらに、このような語句は、必ずしも同じ実施形態を指すわけではない。さらに、特定の特徴、構造又は特性が、実施形態に関連して記載される場合には、かかる特徴、構造又は特性を他の実施形態に関連して達成することは、明確に記載されているか否かにかかわらず、当業者の知識の範囲内であると考えられる。
【００１５】
「本発明の実施形態」という用語は、本発明の全ての実施形態が、提案されている特徴、利点又は操作のモードを含むことを要するものではない。本発明の範囲から逸脱することなく、代替の実施形態を創作することができ、本発明における周知の要素は、詳細には記述されないか、又は、本発明に関連する細部を曖昧にしないために割愛される場合がある。さらに、本明細書に使用される用語は、特定の実施形態を説明する目的のみであり、制限するように意図するものではない。例えば、本明細書に使用される際、単数形「１つの（ａ）」、「１つの（ａｎ）」、及び、「その（ｔｈｅ）」は、文脈により別途明確に示されない限り、複数形を含むことを意図する。「備える（ｃｏｍｐｒｉｓｅｓ）」、「備えている（ｃｏｍｐｒｉｓｉｎｇ）」、「含む（ｉｎｃｌｕｄｅｓ）」及び／又は「含んでいる（ｉｎｃｌｕｄｉｎｇ）」という用語は、本明細書で使用される際、言及される特徴、完全体、ステップ、操作、要素及び／又は構成要素の存在を明示するが、１つ以上の他の特徴、完全体、ステップ、操作、要素、構成要素及び／又はこれらの群の存在を排除するものではない。
【００１６】
図１は、ＣＰＵ１０２及びＡＰＤ１０４を含む、統合されたコンピューティングシステム１００の例示的な図である。ＣＰＵ１０２は、１つ以上の単一コア、又は、マルチコアのＣＰＵを含み得る。本発明の一実施形態において、システム１００は、統合されたプログラム及び実行環境を提供するために、ＣＰＵ１０２及びＡＰＤ１０４を組み合わせて、単一のシリコンダイ又はパッケージ上に形成される。この環境は、ＡＰＤ１０４が、いくつかのプログラムタスクについてＣＰＵ１０２と同程度に流動的に使用されることを可能にする。しかしながら、ＣＰＵ１０２及びＡＰＤ１０４が単一のシリコンダイ上に形成されることは、本発明の絶対的な要件ではない。いくつかの実施形態においては、それらが別個に形成され、同じ基板上又は異なる基板上に取り付けられることが可能である。
【００１７】
また、一実施形態では、システム１００は、メモリ１０６、オペレーティングシステム（ＯＳ）１０８及び通信基盤１０９を含む。ＯＳ１０８及び通信基盤１０９は、以下に、より詳細に説明される。
【００１８】
また、システム１００は、カーネルモードドライバ（ＫＭＤ）１１０と、ソフトウェアスケジューラ（ＳＷＳ）１１２と、例えば入出力メモリ管理ユニット（ＩＯＭＭＵ）などのメモリ管理ユニット１１６と、を含む。システム１００の構成要素は、ハードウェア、ファームウェア又はこれらの任意の組み合わせとして実装され得る。当業者であれば、システム１００が、図１に示された実施形態で示されているものに加えて、又は、これらと異なる１つ以上のソフトウェア、ハードウェア及びファームウェア構成要素を含んでもよいことを理解するであろう。
【００１９】
一実施形態では、ＫＭＤ１１０等のドライバは、典型的に、ハードウェアが接続するコンピュータバス又は通信サブシステムを通じて、デバイスと通信する。コールプログラムがドライバ内のルーチンを呼び出す場合には、ドライバは、デバイスにコマンドを発行する。デバイスがドライバにデータを送り返すと、ドライバは、当初のコールプログラムにルーチンを呼び出す。一実施形態では、ドライバは、ハードウェア依存及びオペレーティングシステム固有である。これらは、通常、任意の必要な非同期時間依存ハードウェアインターフェースに必要とされる割り込み処理を提供する。デバイスドライバは、特に最新のＷｉｎｄｏｗｓ（登録商標）プラットフォーム上では、カーネルモード（Ｒｉｎｇ０）又はユーザモード（Ｒｉｎｇ３）で作動し得る。ユーザモードでドライバを作動させる主な利点は、うまく書かれていないユーザモードデバイスドライバがカーネルメモリを上書きすることによって、システムの機能を停止させることが不可能であることから、安定性を向上させる点にある。一方、ユーザ／カーネル−モードの移行は、通常、相当な性能オーバーヘッドを課し、それによって、ユーザモードドライバに対して待ち時間が短く高いスループットの要件を禁止する。カーネル空間は、システムコールの使用を通じてのみユーザモジュールによってアクセスされ得る。ＵＮＩＸ（登録商標）シェル又は他のＧＵＩに基づくアプリケーションなどのエンドユーザ用プログラムは、ユーザ空間の一部である。これらのアプリケーションは、カーネルサポート機能を通じて、ハードウェアとやりとりする。
【００２０】
ＣＰＵ１０２は、制御プロセッサ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）、又は、デジタル信号プロセッサ（ＤＳＰ）のうちの１つ以上（図示されない）を含み得る。ＣＰＵ１０２は、例えば、コンピューティングシステム１００の操作を制御するＯＳ１０８、ＫＭＤ１１０、ＳＷＳ１１２及びアプリケーション１１１を含む、制御論理を実行する。この例示的な実施形態において、ＣＰＵ１０２は、一実施形態によれば、例えば、そのアプリケーションに関連する処理を、ＣＰＵ１０２と、ＡＰＤ１０４等の他の処理リソースとにわたって分配することによって、アプリケーション１１１の実行を開始及び制御する。
【００２１】
ＡＰＤ１０４は、とりわけ、例えば、特に並列処理に適し得るグラフィックス操作及び他の操作等の、選択された機能のためのコマンド及びプログラムを実行する。一般に、ＡＰＤ１０４は、例えばピクセル操作や、幾何学的計算や、画像をディスプレイにレンダリングすること等のグラフィックスパイプライン操作を実行するために、頻繁に使用され得る。また、本発明の様々な実施形態において、ＡＰＤ１０４は、ＣＰＵ１０２から受け取ったコマンド又は命令に基づいて、計算処理操作を実行し得る。
【００２２】
例えば、コマンドは、命令セットアーキテクチャ（ＩＳＡ）内で定義されない特別な命令とみなされ、通常、所与のＩＳＡ又はハードウェアの固有の部分からの命令セットによって達成され得る。１つのコマンドは、ディスパッチプロセッサ、コマンドプロセッサ又はネットワークコントローラ等の特別なプロセッサによって実行されてもよい。一方、命令は、例えば、コンピュータアーキテクチャ内のプロセッサの単一の操作とみなされ得る。一実施形態では、２つのＩＳＡセットを使用する場合に、一部の命令がｘ８６プログラムを実行するために使用され、一部の命令がＡＰＤ／ＧＰＵ計算ユニット上でカーネルを実行するために使用される。
【００２３】
例示的な実施形態において、ＣＰＵ１０２は、選択されたコマンドをＡＰＤ１０４に伝送する。選択されたコマンドは、並列実行に適切なグラフィックスコマンド及び他のコマンドを含み得る。選択されたコマンドは、コンピュータ処理コマンドを含んでもよく、ＣＰＵ１０２から実質的に独立して実行され得る。
【００２４】
ＡＰＤ１０４は、限定されないが、１つ以上の単一命令複数データ（ＳＩＭＤ）プロセシングコア等の独自の計算ユニット（図示されない）を含み得る。本明細書に示される場合、ＳＩＭＤは、独自のデータ及び共有のプログラムカウンタをそれぞれ有する複数の処理要素上でカーネルが同時に実行される、数学パイプライン（ｍａｔｈ  ｐｉｐｅｌｉｎｅ）又はプログラミングモデルである。全ての処理要素は、厳密に同一な命令セットを実行する。条件付き実行制御の使用により、ワークアイテムを、発行されたコマンドごとに参加させるか否かを可能ならしめる。
【００２５】
一実施形態では、各ＡＰＤ１０４計算ユニットは、１つ以上のスカラー及び／若しくはベクトル浮動小数点数演算ユニット並びに／又は算術論理ユニット（ＡＬＵ）を含み得る。また、ＡＰＤ計算ユニットは、逆二乗根ユニット及びサイン／コサインユニット等の特別な目的の処理ユニット（図示されない）を含み得る。一実施形態では、ＡＰＤ計算ユニットは、本明細書において、集合的にシェーダコア１２２と称される。
【００２６】
一般的に、１つ以上のＳＩＭＤを有することは、ＡＰＤ１０４を、例えば、グラフィックス処理において一般的なものである等のように、データ並列タスクの実行に理想的に適したものにする。
【００２７】
ピクセル処理等の一部のグラフィックスパイプライン操作や他の並列計算操作は、同じコマンドの流れ又は計算カーネルが、入力データ要素の流れ又は集団上で行われることを必要とし得る。同じ計算カーネルの各々のインスタンス化は、そのようなデータ要素を並列に処理するために、シェーダコア１２２内の複数の計算ユニット上で同時に実行され得る。本明細書で参照される場合、例えば、計算カーネルは、プログラム内で宣言される命令であって、ＡＰＤ／ＧＰＵ計算ユニット上で実行される命令を含む関数である。また、この関数は、カーネル、シェーダ、シェーダプログラム又はプログラムとも称される。
【００２８】
例示的な実施形態において、各計算ユニット（例えば、ＳＩＭＤプロセシングコア）は、受信データを処理するために、特定のワークアイテムの各々のインスタンスの作成を実行し得る。ワークアイテムは、コマンドによってデバイス上で呼び出されたカーネルの並列実行の集団の１つである。ワークアイテムは、計算ユニット上で実行するワークグループの一部として、１つ以上の処理要素によって実行され得る。
【００２９】
ワークアイテムは、自身のグローバルＩＤ及びローカルＩＤにより、集団内の他の実行と区別される。一実施例において、単一のＳＩＭＤエンジン上で同時に実行するワークグループ内のワークアイテムのサブセットは、ウェーブフロント１３６と称され得る。ウェーブフロントの幅は、ハードウェアＳＩＭＤエンジンの特徴である。本明細書で参照される場合、１つのワークグループとは、単一の計算ユニット上で実行する関連ワークアイテムの集団である。グループ内のワークアイテムは、同じカーネルを実行し、ローカルメモリ及びワークグループバリアを共有する。
【００３０】
１つのワークグループからの全てのウェーブフロントは、同じＳＩＭＤエンジン上で処理される。ウェーブフロント全体にわたる命令が１つずつ発行され、全てのワークアイテムが同じ制御フローに従う場合、各ワークアイテムは同じプログラムを実行する。各ワークアイテムがカーネルを通じて固有のコードパスを実際に取得することの可能なウェーブフロント内で、分散した制御フローを可能にするために、実行マスク及びワークアイテム条件付き実行制御が用いられる。ウェーブフロント開始時に完全なワークアイテムセットが利用可能でない場合には、部分実装ウェーブフロントが処理され得る。また、ウェーブフロントは、ワープ、ベクトル又はスレッドと称され得る。
【００３１】
コマンドは、ウェーブフロントに対して１つずつ発行され得る。全てのワークアイテムが同じ制御フローに従う場合、各ワークアイテムは、同じプログラムを実行し得る。一実施形態では、各ワークアイテムがカーネルドライバを通じて固有のコードパスを実際に取得することができる分散制御フローを可能にするために、実行マスク及びワークアイテムの条件付き実行制御が用いられる。開始時に完全なワークアイテムセットが利用可能でない場合、部分ウェーブフロントが処理され得る。例えば、シェーダコア１２２は、所定数のウェーブフロント１３６を同時に実行することができ、各ウェーブフロント１３６は所定数のワークアイテムを含む。
【００３２】
システム１００内において、ＡＰＤ１０４は、グラフィックスメモリ１３０等の独自のメモリを含む。グラフィックスメモリ１３０は、ＡＰＤ１０４内での計算時に使用するためのローカルメモリを提供する。シェーダコア１２２内の個別の計算ユニット（図示されない）は、独自のローカルデータストア（図示されない）を有し得る。一実施形態において、ＡＰＤ１０４は、ローカルグラフィックスメモリ１３０へのアクセス、及び、メモリ１０６へのアクセスを含む。別の実施形態において、ＡＰＤ１０４は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）へのアクセス、又は、ＡＰＤ１０４に直接取り付けられ、且つ、メモリ１０６から分離した他のメモリ（図示されない）へのアクセスを含み得る。
【００３３】
示された実施形態では、ＡＰＤ１０４は、１つ又は「ｎ」個のコマンドプロセッサ（ＣＰ）１２４を含む。ＣＰ１２４は、ＡＰＤ１０４内の処理を制御する。また、ＣＰ１２４は、実行されるコマンドを、メモリ１０６内のコマンドバッファ１２５から取り出し、取り出したコマンドのＡＰＤ１０４上での実行を調整する。
【００３４】
一実施形態では、ＣＰＵ１０２は、アプリケーション１１１に基づいて、コマンドを適切なコマンドバッファ１２５に入力する。本明細書で参照される場合、アプリケーションとは、ＣＰＵ及びＡＰＤ内の計算ユニット上で実行することになるプログラム部分の組み合わせである。
【００３５】
複数のコマンドバッファ１２５は、ＡＰＤ１０４上で各プロセスの実行が予定されている状態で、維持され得る。
【００３６】
ＣＰ１２４は、ハードウェア、ファームウェア、ソフトウェア又はこれらの組み合わせで実装され得る。一実施形態において、ＣＰ１２４は、スケジューリング論理を含む論理を実装するためのマイクロコードを有する縮小命令セットコンピュータ（ＲＩＳＣ）エンジンとして、実装され得る。
【００３７】
また、ＡＰＤ１０４は、１つ又は「ｎ」個のディスパッチコントローラ（ＤＣ）１２６を含む。本願では、ディスパッチという用語は、ディスパッチコントローラによって実行されるコマンドを指す。ディスパッチコントローラは、１セットの計算ユニット上の１セットのワークグループに対するカーネルの実行を開始するために、コンテキスト状態を使用する。ＤＣ１２６は、シェーダコア１２２内でワークグループを開始するための論理を含む。いくつかの実施形態において、ＤＣ１２６は、ＣＰ１２４の一部として実装され得る。
【００３８】
また、システム１００は、ＡＰＤ１０４上での作動のためのランリスト１５０からプロセスを選択するためのハードウェアスケジューラ（ＨＷＳ）１２８を含む。ＨＷＳ１２８は、ラウンドロビン方式、優先レベルを使用して、又は、他のスケジューリング方針に基づいて、ランリスト１５０からプロセスを選択し得る。優先レベルは、例えば、動的に判定され得る。ＨＷＳ１２８は、例えば、新たなプロセスを追加することによって、及び、ランリスト１５０から現行のプロセスを削除することによって、ランリスト１５０を管理するための機能を含む。ＨＷＳ１２８のランリスト管理論理は、時には、ランリストコントローラ（ＲＬＣ）と称される。
【００３９】
本発明の様々な実施形態において、ＨＷＳ１２８がＲＬＣ１５０からプロセスの実行を開始するとき、ＣＰ１２４は、対応するコマンドバッファ１２５からのコマンドの取り出し及び実行を開始する。いくつかの場合において、ＣＰ１２４は、ＣＰＵ１０２から受信したコマンドに対応するコマンドであって、ＡＰＤ１０４内で実行される１つ以上のコマンドを生成し得る。一実施形態において、ＣＰ１２４は、他の構成要素とともに、ＡＰＤ１０４及び／又はシステム１００のリソースの利用を改善または最大化する様式で、ＡＰＤ１０４上でコマンドの優先順位化およびスケジューリングを実施する。
【００４０】
ＡＰＤ１０４は、割り込みジェネレータ１４６へのアクセスを有することができ、又は、割り込みジェネレータ１４６を含んでもよい。割り込みジェネレータ１４６は、ＡＰＤ１０４がページフォルト等の割り込みイベントにあった場合に、ＯＳ１０８に割り込むようにＡＰＤ１０４によって構成され得る。例えば、ＡＰＤ１０４は、上記のページフォルト割り込みを生成するために、ＩＯＭＭＵ１１６内の割り込み生成論理に依存し得る。
【００４１】
また、ＡＰＤ１０４は、シェーダコア１２２内で作動しているプロセスに先制するために、先制及びコンテキストスイッチ論理（ｌｏｇｉｃ）１２０を含み得る。コンテキストスイッチ論理１２０は、例えば、プロセスを停止させ、その現在の状態（例えば、シェーダコア１２２の状態及びＣＰ１２４の状態）を保存するための機能性を含む。
【００４２】
本明細書で参照される場合、状態という用語は、初期状態、中間状態及び最終状態を含み得る。初期状態は、マシンが、出力データセットを生成するために、プログラムに従って入力データセットの処理を開始する時点である。例えば、処理が進行することを可能にするために、いくつかの時点で記憶することが必要な中間状態が存在する。この中間状態は、何らかの他のプロセスによる割り込みの際に、後で実行を継続することを可能にするために、記憶される場合がある。出力データセットの一部として記録され得る最終状態も存在する。
【００４３】
また、先制及びコンテキストスイッチ論理１２０は、別のプロセスをＡＰＤ１０４にコンテキストスイッチするための論理を含み得る。別のプロセスをＡＰＤ１０４上での作動状態にコンテキストスイッチするための機能は、例えば、そのプロセス用に前に保存された状態を回復させ、その実行を開始して、ＡＰＤ１０４上で作動するためのＣＰ１２４及びＤＣ１２６を通じて、そのプロセスのインスタンスを作成することを含んでもよい。
【００４４】
メモリ１０６は、ＤＲＡＭ（図示されない）等の非永続的メモリを含み得る。メモリ１０６は、アプリケーション又は他の処理論理の部分の実行中に、例えば、処理論理命令、定数及び変数を記憶し得る。例えば、一実施形態において、ＣＰＵ１０２上で１つ以上の操作を行う制御論理の一部は、ＣＰＵ１０２による操作のそれぞれの部分の実行中に、メモリ１０６内に存在し得る。本明細書に使用される「処理論理」又は「論理」という用語は、制御フローコマンド、計算を行うためのコマンド、及び、リソースへの関連アクセスのためのコマンドを指す。
【００４５】
実行中、個別のアプリケーション、ＯＳ機能、処理論理コマンド及びシステムソフトウェアは、メモリ１０６内に存在し得る。ＯＳ１０８にとって必須の制御論理コマンドは、通常、実行中にメモリ１０６内に存在する。例えば、ＫＭＤ１１０及びソフトウェアスケジューラ１１２を含む他のソフトウェアコマンドも、システム１００の実行中にメモリ１０６内に存在し得る。
【００４６】
この実施形態では、メモリ１０６は、ＡＰＤ１０４にコマンドを送信するためにＣＰＵ１０２によって使用されるコマンドバッファ１２５を含む。また、メモリ１０６は、プロセスリスト及びプロセス情報（例えば、アクティブリスト１５２及びプロセス制御ブロック１５４）を含む。これらのリスト及び情報は、ＡＰＤ１０４及び／又は関連するスケジューリングハードウェアにスケジューリング情報を伝達するために、ＣＰＵ１０２上で実行するスケジューリングソフトウェアによって使用される。メモリ１０６へのアクセスは、メモリ１０６に連結されているメモリコントローラ１４０によって管理され得る。例えば、メモリ１０６に対する読み書きを行うための、ＣＰＵ１０２又は他のデバイスからの要求は、メモリコントローラ１４０によって管理される。
【００４７】
システム１００の他の態様に戻って参照すると、ＩＯＭＭＵ１１６は、マルチコンテキストメモリ管理ユニットである。
【００４８】
本明細書に使用される際、コンテキスト（しばしば、プロセスと称される）は、カーネルが実行される環境、並びに、同期及びメモリ管理が定義されるドメインとみなされ得る。コンテキストは、１セットのデバイスと、これらのデバイスにアクセス可能なメモリと、対応するメモリ特性と、カーネルの実行又はメモリオブジェクト上の動作を計画するために使用される１つ以上のコマンドキューとを含む。一方、プロセスは、コンピュータを作動させるプロセスを生成することになる、アプリケーションのプログラムの実行とみなされ得る。ＯＳは、プログラムが実行するためのデータ記録及び仮想メモリアドレス空間を生成し得る。メモリ及びプログラム実行の現在の状態は、プロセスと称され得る。ＯＳは、プロセスがメモリ上で初期状態から最終状態へと動作するためのタスクをスケジュールすることになる。
【００４９】
図１に示される実施形態に戻って参照すると、ＩＯＭＭＵ１１６は、ＡＰＤ１０４を含むデバイスに対するメモリページアクセスのための仮想アドレスから物理アドレスへの変換を行うための論理を含む。また、ＩＯＭＭＵ１１６は、例えば、ＡＰＤ１０４等のデバイスによるページアクセスがページフォルトとなった場合に、割り込みを生成する論理を含んでもよい。さらに、ＩＯＭＭＵ１１６は、変換索引バッファ（ＴＬＢ）１１８を含んでもよいし、ＴＬＢへのアクセスを有してもよい。ＴＬＢ１１８は、１つの例として、メモリ１０６内のデータに対するＡＰＤ１０４による要求のための論理（すなわち、仮想）メモリアドレスから物理メモリアドレスへの変換を加速させるための内容アドレスメモリ（ＣＡＭ）において、実装され得る。
【００５０】
示される実施形態において、通信基盤１０９は、必要に応じて、システム１００の構成要素を相互接続する。通信基盤１０９は、１つ以上のペリフェラルコンポーネント相互接続（ＰＣＩ）バス、拡張ＰＣＩ（ＰＣＩ−Ｅ）バス、アドバンストマイクロコントローラバスアーキテクチャ（ＡＭＢＡ）バス、アクセラレイテッドグラフィックスポート（ＡＧＰ）又はそのような通信基盤を含み得る（図示されない）。また、通信基盤１０９は、イーサネット（登録商標）、イーサネット（登録商標）と同様のネットワーク、又は、アプリケーションのデータ変換率要件を満たす任意の好適な物理的通信基盤、を含み得る。通信基盤１０９は、コンピューティングシステム１００の構成要素を含む構成要素を相互接続するための機能性を含む。
【００５１】
この実施形態では、ＯＳ１０８は、システム１００のハードウェア構成要素を管理し、共通のサービスを提供するための機能を含む。様々な実施形態において、ＯＳ１０８は、ＣＰＵ１０２上で実行し、共通のサービスを提供し得る。これらの共通のサービスは、例えば、ＣＰＵ１０２内での実行のためのスケジューリングアプリケーション、フォルト管理、割り込みサービス、及び、他のアプリケーションの入出力を処理することを含み得る。
【００５２】
いくつかの実施形態において、割り込みコントローラ１４８等の割り込みコントローラによって生成される割り込みに基づいて、ＯＳ１０８は、適切な割り込み処理ルーチンを呼び出す。例えば、ページフォルト割り込みを検出すると、ＯＳ１０８は、割り込みハンドラを呼び出し、関連ページのメモリ１０６内へのロードを開始し、対応するページテーブルを更新することができる。
【００５３】
また、ＯＳ１０８は、ハードウェア構成要素へのアクセスが、ＯＳによって管理されるカーネル機能を通じて仲介されるのを確実にすることによって、システム１００を保護するための機能を含み得る。実際には、ＯＳ１０８は、アプリケーション１１１等のアプリケーションが、ＣＰＵ１０２上で、ユーザ空間において作動することを確実にする。また、ＯＳ１０８は、アプリケーション１１１が、ハードウェア及び／又は入出力機能にアクセスするために、ＯＳによって提供されるカーネル機能を呼び出すことを確実にする。
【００５４】
例として、アプリケーション１１１は、ＣＰＵ１０２上で実行されるユーザ計算を行うための様々なプログラム又はコマンドを含む。この統合コンセプトは、ＣＰＵ１０２が、ＡＰＤ１０４での処理のための選択されたコマンドを、途切れることなく送信することを可能にし得る。この統合型ＡＰＤ／ＣＰＵフレームワークの下では、アプリケーション１１１からの入出力要求は、対応するＯＳ機能を通じて処理される。
【００５５】
一実施形態において、ＫＭＤ１１０は、アプリケーションプログラムインターフェース（ＡＰＩ）を実装し、それを通じて、ＣＰＵ１０２、又は、ＣＰＵ１０２若しくは他の論理上で実行するアプリケーションが、ＡＰＤ１０４の機能を呼び出し得る。例えば、ＫＭＤ１１０は、ＣＰＵ１０２からのコマンドをコマンドバッファ１２５のキューに入れることができ、ＡＰＤ１０４はその後にコマンドを取り出す。さらに、ＫＭＤ１１０は、ＳＷＳ１１２とともに、ＡＰＤ１０４上で実行されるプロセスのスケジューリングを行うことができる。ＳＷＳ１１２は、例えば、ＡＰＤ上で実行されるプロセスの優先順位化されたリストを維持するための論理を含み得る。
【００５６】
本発明の他の実施形態において、ＣＰＵ１０２上で実行するアプリケーションは、コマンドをキューに入れるときに、ＫＭＤ１１０を完全にバイパスし得る。
【００５７】
いくつかの実施形態において、ＳＷＳ１１２は、ＡＰＤ１０４上で実行されるプロセスのアクティブリスト１５２をメモリ１０６内に維持する。また、ＳＷＳ１１２は、ハードウェア内のＨＷＳ１２８によって管理されるアクティブリスト１５２内のプロセスのサブセットを選択する。ＡＰＤ１０４上で各プロセスを作動させることに関する情報は、ＣＰＵ１０２からプロセス制御ブロック（ＰＣＢ）１５４を通じてＡＰＤ１０４に伝達される。
【００５８】
アプリケーション、ＯＳ及びシステムソフトウェアのための処理論理は、マスクワーク／フォトマスクの生成を通じた製造プロセスを最終的に構成して、本明細書に記載される発明の態様を具現化するハードウェアデバイスを生成することを可能にするために、Ｃ等のプログラミング言語、及び／又は、Ｖｅｒｉｌｏｇ、ＲＴＬ若しくはネットリスト等のハードウェア記述言語で指定されるコマンドを含み得る。
【００５９】
当業者であれば、本明細書を読むことにより、コンピューティングシステム１００が図１に示されるものよりも多い又は少ない構成要素を含み得ることを理解するであろう。例えば、コンピューティングシステム１００は、１つ以上の入力インターフェースと、不揮発性記憶域と、１つ以上の出力インターフェースと、ネットワークインターフェースと、１つ以上のディスプレイ又はディスプレイインターフェースとを含み得る。
【００６０】
図２は、ＣＰＵ２０２及びメモリ２０６を備えるＩ／Ｏデバイスインターフェースアーキテクチャを例示する図であって、図１のより詳細な図を例示するブロック図である。さらに、図２は、メモリ２０６と、ＩＯＭＭＵ２１６と、バス２７８を介して接続された、符号２５０，２５２，２５４で表されるＩ／ＯデバイスＡ，Ｂ，Ｃとの間で動作するように構成されたメモリマッピング構造を例示している。ＩＯＭＭＵ２１６等のＩＯＭＭＵは、直接メモリアクセス（ＤＭＡ）仮想アドレスをシステム物理アドレスに変換するように操作するハードウェアデバイスであり得る。一般に、ＩＯＭＭＵ２１６等のＩＯＭＭＵは、１つ以上の一意アドレス空間を構築し、その一意アドレス空間（複数可）を使用して、デバイスのＤＭＡ操作がどのようにメモリにアクセスするかを制御する。図２は、例示目的で１つのＩＯＭＭＵのみを示すが、本発明の実施形態は１つより多いＩＯＭＭＵを含んでもよい。
【００６１】
通常、ＩＯＭＭＵは、独自の個別のバス及びＩ／Ｏデバイス（複数可）に接続され得る。図２において、バス２０９は、ＰＣＩバス、ＡＧＰバス、ＰＣＩ−Ｅバス（より正確にはポイントツーポイント接続）、又は、現在利用可能であるか若しくは将来開発される任意の他の種類のバス若しくは通信チャネルを含む、コンピュータシステムにおいて使用される任意の種類のバスであり得る。バス２０９は、割り込みコントローラ２４８、ＫＭＤ２１０、ＳＷＳ２１２、アプリケーション２１１及びＯＳ２０８を、システム２００内の他の構成要素と相互接続させ得る。さらに、相互接続割り込みコントローラ２４８、ＫＭＤ２１０、ＳＷＳ２１２、アプリケーション２１１及びＯＳ２０８は、本明細書に記載される割り込みコントローラ１４８、ＫＭＤ１１０、ＳＷＳ１１２、アプリケーション１１１及びＯＳ１０８と実質的に同様であり、再度説明は行わない。
【００６２】
ＩＯＭＭＵ２１６に接続され得るＩ／Ｏデバイスを、図２にさらに例示する。Ｉ／Ｏデバイスインターフェースアーキテクチャは、符号２５０，２５２，２５４により表示されるＩ／ＯデバイスＡ，Ｂ，Ｃを含む。また、Ｉ／ＯデバイスＣは、メモリ管理Ｉ／Ｏ（ＭＭＩＯ）マップ及びホストデ−タパス（ＨＤＰ）２５６と、デバイスプロセッシングコンプレックス２５８と、プライベートＭＭＵ２６０と、ＩＯＴＬＢ２６４と、アドレス変換サービス（ＡＴＳ）／周辺要求インターフェース（ＰＲＩ）要求ブロック２６２と、ローカルメモリ２６８と、ローカルメモリ保護マップ２６６と、マルチプレクサ２７０，２７２，２７４，２７６とを含む。
【００６３】
Ｉ／ＯデバイスＡ，Ｂ，Ｃは、限定されないが、ＡＰＤ、拡張カード、周辺カード、広範なオフロード能力を持つネットワークインターフェースコントローラ（ＮＩＣ）カード、ＷＡＮインターフェースカード、音声インターフェースカード、及び、ネットワークモニタリングカードを含む、多くの種類のＩ／Ｏデバイスを表す。２つ以上のＩ／Ｏデバイスが、様々なバス構成を通じて、各ＩＯＭＭＵに接続され得る。
【００６４】
システム２００は、本システムの高レベルの機能を示しており、実際の物理的な実装形態は、多くの形態をとり得る。例えば、ＭＭＵ２１４は、一般に、各プロセッサ２０２に統合される。図２に示される実施形態は、プロセッサ２０２のノード間のＨｙｐｅｒＴｒａｎｓｐｏｒｔ（ＨＴ）（登録商標）のコヒーレントファブリックと、プロセッサ２０２のノードとＩ／Ｏデバイス２５０，２５２，２５４又は他のＩ／Ｏデバイスの相互接続を橋渡しする任意のＩ／Ｏハブ（示されない）との間のＨＴ  Ｉ／Ｏリンクと、に基づくものであり得る。
【００６５】
あるいは、任意の他のコヒーレント相互接続がプロセッサ２０２のノード間に使用されてもよく、及び／又は、任意の他のＩ／Ｏ相互接続がプロセッサノードとＩ／Ｏデバイスとの間で使用されてもよい。さらに、別の実施形態では、従来のＰＣ設計において、メモリ２０６及び１つ以上のＩ／Ｏ相互接続にさらに連結される、ノースブリッジに連結されたプロセッサ２０２を含んでもよい。
【００６６】
Ｉ／Ｏデバイス２５０，２５２，２５４の何れも、ＤＭＡ操作が処理されるＩＯＭＭＵ２１６を通って上向きにフローするＤＭＡ操作（すなわち、割り込み）を発行してもよい。その後、このフローは、内部に組み込まれたメモリコントローラ２１４を含み得るプロセッサ２０２へと続く。
【００６７】
Ｉ／Ｏデバイスの接続時にＩＯＭＭＵ２１６が検出された場合、ソフトウェアは、必要な制御及びデータ構造を確立するプロセスを開始する。例えば、ＩＯＭＭＵ２１６が設定される場合、ＩＯＭＭＵ２１６は、デバイステーブルベースレジスタ（ＤＴＢＲ）２４１、コマンドバッファベースレジスタ（ＣＢＢＲ）２３８、イベントログベースレジスタ（ＥＬＢＲ）２３６、制御論理２４９、及び、周辺ページ要求レジスタ（ＰＰＲＲ）２４２を含み得る。さらに、初期設定中に、ＩＯＭＭＵ２１６は、適切なゲストページテーブルのベースポインタレジスタテーブルを選択するためのオペレータ２４６を含み得る。ベースポインタレジスタテーブルは、例えば、現在のタスクのページディレクトリ及びページテーブルの両方を配置することによって仮想アドレスから物理アドレスに変換するために、ｘ８６マイクロプロセッサ処理によって使用される制御レジスタ３（ＣＲ３）であり得る。
【００６８】
ゲストＣＲ３（ＧＣＲ３）の変更は、新たなセットの変換を確立してもよく、したがって、プロセッサは、以前のコンテキストに関連したＴＬＢ２１８のエントリを自動的に無効にし得る。ＧＣＲ３レジスタは、必要であれば、表題「Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ  Ｔｗｏ−Ｌａｙｅｒ  Ａｄｄｒｅｓｓｉｎｇ」の米国特許出願第６１／４２３，０６２号に記載された、Ｉ／Ｏページテーブルウォーカ２４４を始めるように動作する。米国特許出願第６１／４２３，０６２号は、参照によりその全体が本明細書に組み込まれる。また、ＩＯＭＭＵ２１６は、ページテーブルウォークを行う必要なく、その後の変換を履行するために使用されるアドレス変換をキャッシュするために、１つ以上のＴＬＢ２１８と関連付けられ得る。デバイステーブルからのアドレスは、バス２８２を介して、ＩＯＭＭＵ２１６に伝達され得る。
【００６９】
データ構造が設定されると、ＩＯＭＭＵ２１６は、ＤＭＡ操作アクセス、割り込み再マッピング及びアドレス変換を開始することができる。
【００７０】
ＩＯＭＭＵ２１６は、２レベルの変換がサポートされていることを示すために、メモリ管理Ｉ／Ｏ（ＭＭＩＯ）を使用し得る。２レベルの変換がサポートされると判定されたときには、２レベルの変換は、適切なデバイステーブルエントリ（ＤＴＥ）をプログラムすることによって、有効にされる。
【００７１】
ネスト型ページングにおいては、ＤＴＥと関連するトランザクションは、メモリ２０６内のＩ／Ｏページテーブル２２４のためのデータ構造のルートを指し示すページテーブルルートポインタを含み得る。
【００７２】
したがって、ＩＯＭＭＵ２１６は、マッピングされたゲストポインタを使用して、ＧＶＡからＧＰＡへのアドレス変換を含むようにデバイステーブルエントリを拡張することによって、Ｉ／Ｏページテーブルにアクセスすることができる。ＧＶＡからＧＰＡへの変換は、ゲストＯＳによって管理される（以降、「Ｌ１」変換という）。
【００７３】
さらに、ＩＯＭＭＵ２１６は、マッピングされたシステムポインタを使用して、Ｉ／Ｏページテーブルにアクセスし、ＧＶＡからＳＰＡへの変換を行うことができる。ＧＰＡからＳＰＡへの変換は、ハイパーバイザ２３４によって管理され得る（以降、「Ｌ２」変換という）。
【００７４】
したがって、両方の種類のポインタを備えるＤＴＥを使用して、カスケードアドレス変換ウォークの２つのレイヤを実行することができる。
【００７５】
Ｌ２及びＬ１の変換処理によって生成されたネスト型アドレス空間は、コンピュータオフロード、ユーザレベルＩ／Ｏ及びアクセラレイテッドＩ／Ｏデバイス等の仮想化システムにおける先進の計算アーキテクチャを可能にする。
【００７６】
図２に示されているとおり、ＩＯＭＭＵ２１６は、メモリ２０６と、Ｉ／Ｏデバイス２５０，２５２，２５４との間に接続されている。さらに、ＩＯＭＭＵ２１６は、メモリ２０６、メモリコントローラ２４０及びＩ／Ｏデバイス２５０，２５２，２５４とは別個のチップ上に配置され得る。ＩＯＭＭＵ２１６は、主なシステムリソースを管理するように設計されてもよく、Ｉ／Ｏデバイスによってアクセスされるメモリ上でパーミッションチェック及びアドレス変換を提供するためにＩ／Ｏページテーブル２２４を使用し得る。また、Ｉ／Ｏページテーブルは、ＡＭＤ６４のロング形式で設計されてもよい。デバイステーブル２２６は、Ｉ／Ｏデバイスが特定の領域に割り当てられるのを許可する。また、Ｉ／Ｏページテーブル２２４は、Ｉ／Ｏデバイスのページテーブルへのポインタを含むように構成されてもよい。
【００７７】
ＩＯＭＭＵ２１６は、許可されていないＤＭＡ要求を再度マッピングすることにより、セキュリティ及びパーミッションチェック対策として、悪質なＤＭＡ要求を阻むよう構成され得る。さらに、割り込み再マッピングに関して、ＩＯＭＭＵ２１６は、（ｉ）ＤＭＡ要求を正しいメモリ位置にリダイレクトすること、及び、（ｉｉ）ＤＭＡ要求を、ゲストＶＭを作動させる正しい仮想または物理ＣＰＵにリダイレクトすること、を行うように構成され得る。また、ＩＯＭＭＵ２１６は、Ｉ／Ｏデバイスの確実な直接割り当てを効率的に管理する。さらに、ＩＯＭＭＵ２１６は、Ｉ／Ｏデバイスの割り込みのためのパーミッションチェック及び割り込み再マッピングを提供するために割り込み再マッピングテーブルを使用する。
【００７８】
一実施形態において、ＩＯＭＭＵ２１６は、ゲスト仮想アドバンストプログラムバブル割り込みコントローラ（ＡＰＩＣ）構造（図示されない）を含む。別の実施形態では、仮想化されたＡＰＩＣをサポートするように設計されたアーキテクチャ特性を有するＩＯＭＭＵを含む。
【００７９】
ＩＯＭＭＵ２１６は、ハイパーバイザの介入なしに、同時に作動している１つ以上のゲスト（例えば、ゲストＶＭ）に対して直接的に、割り込みの引き渡しをサポートする。言い換えれば、ＩＯＭＭＵ２１６は、ハイパーバイザ２３４を必要とすることなく、変換サービスを提供し得る。例示的なＩＯＭＭＵ２１６は、標準的なＰＣＩ  ＩＮＴｘ、ＭＳＩ又はＭＳＩ−Ｘ割り込みを使用して、割り込みを信号で知らせる。
【００８０】
また、システム２００は、追加のメモリブロック（図示されない）を含むメモリ２０６を含む。メモリコントローラ２４０は、別個のチップ上にあってもよいし、プロセッサ２０２シリコン内に統合されてもよい。メモリ２０６は、ＤＭＡ及びプロセッサアクティビティがメモリコントローラ２４０と通信するように構成されている。
【００８１】
メモリ２０６は、Ｉ／Ｏページテーブル２２４と、デバイステーブル２２６と、割り込み再マッピングテーブル（ＩＲＴ）２２８と、コマンドバッファ２２２と、イベントログ２２０と、ハイバーバイザ２３４等のホスト変換モジュールとを含む。また、メモリ２０６は、例えば符号２３０で表示されるゲストＯＳ１とゲストＯＳ２（２３２）等のように同時に作動している１つ以上のＯＳを含み得る。ハイバーバイザ２３４及びゲストＯＳ２３０，２３２は、本システムを仮想化するための作業を行うソフトウェア構成体である。
【００８２】
ハードウェアデバイスであるＩＯＭＭＵ２１６が、従来の手法の下ではハイパーバイザ２３４が行う必要のある作業を行うことが許可されているため、ゲストＯＳ２３０，２３２等のゲストＯＳは、本システム２００内のＩ／Ｏデバイス２５０，２５２，２５４等のＩ／Ｏデバイスにより直接的に接続されている。
【００８３】
さらに、ＩＯＭＭＵ２１６及びメモリ２０６は、ＤＴＢＲ２４１がデバイステーブル２２６の開始インデックスを指し示すように、初期化されてもよい。さらに、ＣＢＢＲ２３８は、ＩＯＭＭＵ２１６がコマンドバッファ２２２に記憶されているコマンドを読み込み且つ実行するように、コマンドバッファ２２２の開始インデックスに関連付けられている。ＥＬＢＲ２３６は、イベントログ２２０の開始インデックスを指し示している。ＰＰＲＲ２４２は、周辺ページサービス要求（ＰＰＳＲ）テーブル２２７の開始インデックスを指し示している。
【００８４】
ＩＯＭＭＵ２１６は、ＩＯＭＭＵ２１６と、ＣＰＵ２０２等のシステムプロセッサとの間でコマンド及び状態情報を交換するために、メモリベースのキューを使用する。コマンドキューは、図２においてコマンドバッファ２２２によって示されている。コマンドバッファ２２２及びイベントログ２２０は、アクティブなＩＯＭＭＵ２１６によって実装される。また、ＩＯＭＭＵ２１６は、Ｉ／Ｏページサービス要求キューを実装してもよい。
【００８５】
ＩＯＭＭＵ２１６は、有効となった場合に、下流デバイスから到達する要求（例えば、ＨｙｐｅｒＴｒａｎｓｐｏｒｔ（登録商標）リンク又はＰＣＩベースの通信を使用して伝達され得る）を遮断し、要求に対してパーミッションチェック及びアドレス変換を行い、変換されたバージョンを、ＨｙｐｅｒＴｒａｎｓｐｏｒｔ（登録商標）を介して上流方向のメモリ２０６空間に送信する。他の要求は、変更されずに送られてもよい。
【００８６】
ＩＯＭＭＵ２１６は、パーミッションチェック、割り込み再マッピング及びアドレス変換を行うために、メモリ２０６内のテーブルから読み取ることができる。デッドロックフリー動作を確実にするために、デバイステーブル２２６、Ｉ／Ｏページテーブル２２４及び割り込み再マッピングテーブル２２８に対するＩＯＭＭＵ２１６によるメモリアクセスは、アイソクロナス仮想チャネルを使用し、メモリ２０６内のアドレスのみを参照し得る。
【００８７】
ＩＯＭＭＵ２１６により始められるコマンドバッファ２２２、イベントログエントリ２２０及び任意の要求キューエントリ（図示されない）へのメモリ読み取りは、通常の仮想チャネルを使用し得る。
【００８８】
ＩＯＭＭＵ２１６が、自ら処理するあらゆるデバイス要求に対して完全なテーブルルックアップ処理を行う場合には、システム性能は実質的に低下する可能性がある。したがって、ＩＯＭＭＵ２１６の実装は、ＩＯＭＭＵ２１６のインメモリテーブルの内容に対する内部キャッシュを維持することが期待される。動作中に、ＩＯＭＭＵ２１６は、ＩＯＭＭＵ２１６によってキャッシュされたテーブルエントリを更新するときに、適切な無効コマンドを送信するためのシステムソフトウェアを使用し得る。
【００８９】
ＩＯＭＭＵ２１６は、イベントログ２２０を、通常の仮想チャネルを使用することが可能なメモリ２０６内に書き込む。ＩＯＭＭＵ２１６は、任意の方法で、メモリ２０６内の周辺ページサービス要求キュー２２７に書き込むことができる。メモリ内の周辺ページサービス要求キュー２２７への書き込みも、通常の仮想チャネルを使用し得る。
【００９０】
システムプロセッサＣＰＵ２０２がフォルト機構を使用する一方で、ＩＯＭＭＵ２１６は、周辺ページ要求に情報提供するために、メモリ内に要求キューを提供する。Ｉ／Ｏデバイス２５０，２５２，２５４の何れも、ＩＯＭＭＵ２１６から変換を要求することができ、ＩＯＭＭＵ２１６は、成功した変換又はページフォルトで応答し得る。
【００９１】
本発明の実施形態において、ＩＯＭＭＵ２１６は、ページテーブルにより管理されるネスト型ページテーブルのための、２レベルのアドレス変換をサポートし得る。ゲスト変換の例は、４Ｋバイト、２Ｍバイト及び１ＧバイトページをサポートするＡＭＤ６４のロングページテーブルと直接互換性がある。
【００９２】
ＩＯＭＭＵ２１６は、メモリアクセスの要求を処理し、メモリ保護がＩＯＭＭＵ２１６に対して変換テーブルデータを共有することを許可するように、実装される。この変換テーブルデータは、ＩＯＭＭＵ２１６及び／又はＭＭＵ２１４によって使用されるネスト型ページテーブルデータを含み得る。また、ＩＯＭＭＵ２１６は、変換テーブルの共有がＩＯＭＭＵ２１６とＭＭＵ２１４との間で許可されないように、実装され得る。
【００９３】
また、ホストＯＳは、Ｉ／Ｏデバイス主導アクセスに対する変換を行うことができる。ＩＯＭＭＵ２１６は、Ｉ／Ｏデバイスによってアクセスされるメモリアドレスを変換する一方で、ホストＯＳは、所望の変換を特定するＩ／Ｏページテーブルを構築することによって、それ独自のページテーブルを設定してもよい。ホストＯＳは、新たに構築されたＩ／Ｏページテーブルを指し示すデバイステーブルにエントリを生成してもよく、新たに更新されたデバイスエントリをＩＯＭＭＵに通知し得る。この時点で、対応するＩＯＭＭＵ  Ｉ／Ｏテーブル（例えば、グラフィックス又は他のＩ／Ｏデバイス）及びホストＯＳ  Ｉ／Ｏテーブルは、同じテーブルにマッピングされる。
【００９４】
ホストＯＳがページの保護又は変換に行う何れの変更も、プロセッサＩ／Ｏページテーブル及びメモリＩ／Ｏページテーブルの両方で更新され得る。
【００９５】
ＩＯＭＭＵ２１６は、模範的なハイパーバイザ２３４によって従来的に行われるＩ／Ｏタスクを行うように構成されている。このような設定が、保護、隔離、割り込み再マッピング、及び、アドレス変換のためのハイパーバイザの介入の必要性を排除する。しかしながら、ＩＯＭＭＵ２１６によって処理することができないページフォルトが生じたときには、ＩＯＭＭＵ２１６は、解決のためにハイパーバイザ２３４の介入を要求してもよい。しかしながら、コンフリクトが解決されると、ＩＯＭＭＵ２１６は、再びハイパーバイザの介入なしで、元のタスクを継続し得る。
【００９６】
ハイパーバイザ２３４は、仮想マシンモニタ（ＶＭＭ）としても知られており、ゲストＶＭ２３０，２３２を分離及び隔離するために、ネスト型変換レイヤを使用する。Ｉ／Ｏデバイス２５０，２５２，２５４等のＩ／Ｏデバイスは、Ｉ／Ｏデバイス２５０，２５２，２５４が、それぞれのＶＭの何れか１つのメモリ空間に含まれるように、同時に作動しているゲストＶＭの何れかに直接割り当てられ得る。さらに、Ｉ／Ｏデバイス２５０，２５２，２５４等のＩ／Ｏデバイスは、ハイパーバイザ２３４又は別のＶＭに属するメモリ又は他のＩ／Ｏデバイスを破損又は検査することができない。ゲストＶＭ内には、１つのカーネルアドレス空間及びいくつかのプロセス（ユーザ）アドレス空間がある。ゲスト変換レイヤを使用せず、ネスト型変換情報を使用して、Ｉ／Ｏデバイスにカーネル特権が与えられてもよく、その結果、ゲストＶＭメモリの全内容に比較的自由なアクセスを有することになる。
【００９７】
ユーザレベル（プロセス）Ｉ／Ｏおよび先進の計算モデルを有効にするために、ゲスト変換レイヤは、ゲストプロセス及びＩ／Ｏの分離及び隔離のために実装される。ＩＯＭＭＵ２１６内でゲスト変換を使用して、Ｉ／Ｏデバイスの何れも、例えばＡＰＤ１０４又はＩ／Ｏデバイス２５０，２５２，２５４等のゲストＶＭ又はＩ／Ｏデバイス内のプロセスに直接割り当てられてもよく、ユーザプロセスと同じアドレス空間内で計算を実行し得る。プロセスアドレス空間は、ＩＯＭＭＵ２１６に対して識別されてもよく、その結果、適切な変換テーブルが使用される。すなわち、各メモリ変換は、プロセスアドレス空間ＩＤ（ＰＡＳＩＤ）でタグ付けされ得る。より具体的には、ＰＡＳＩＤの一例が、ｘ８６キャノニカルゲストＶＭ内でアプリケーションアドレス空間を識別するために使用されてもよい。ＰＡＳＩＤは、共有ローカルメモリ２６８内に存在している同時使用のコンテキストを隔離するために、Ｉ／Ｏデバイス２５０，２５２，２５４等のＩ／Ｏデバイス上で使用され得る。
【００９８】
デバイスＩＤは、アドレス変換又は割り込み再マッピング操作のためのネスト型マッピングテーブルを選定するために、ＩＯＭＭＵ２１６によって使用され得る。ＰＡＳＩＤ及びデバイスＩＤは、アプリケーションアドレス空間を一意に識別するために使用される。
【００９９】
Ｉ／Ｏバスを使用してＩ／Ｏデバイスを接続するシステムにおいて、バスプロトコルは、デバイスＩＤ、アドレス及びアクセスタイプと同様に、開始するＰＡＳＩＤを保持するように拡張され得る。ＰＣＩ−ＳＩＧ  ＰＣＩ−Ｅ仕様においては、バスパケットのＰＡＳＩＤのトランザクションレイヤパケット（ＴＬＰ）のプレフィックスは、符号２４６によって表示され、上述した米国特許出願第６１／４２３，０６２号で考察されている、適切なゲストＣＲ３  ＧＣＲ３テーブルを選定するために、ＩＯＭＭＵ２１６によってその後に使用され得るＰＡＳＩＤ情報を保持する。これにより、プロセス及びＶＭ間のメモリ隔離を確実にする。
【０１００】
プロセッサダイ上にＩ／Ｏデバイスを統合させるシステムにおいては、Ｉ／Ｏデバイスをメモリに接続するためのＩ／Ｏバスを使う必要がない。これらの場合、ＰＡＳＩＤは、有線で、又は、統合されたＩ／Ｏデバイスと統合されたＩＯＭＭＵとの間のタグとして、簡単に運ばれ得る。ソフトウェア互換性のために、統合されたＩ／Ｏデバイスは、ＡＴＳビヘイビア及びセマンティクスをエミュレートすることが推奨される。何れの場合でも、メモリ隔離は、プロセス及びＶＭ間で保証される。
【０１０１】
パフォーマンス又はセキュリティのためにローカルメモリ２６８等のローカルメモリを含む高性能のマルチコンテキストＩ／Ｏデバイスは、ＩＯＭＭＵ２１６によって提供される同様のメモリ隔離及び分離の保証を提供し得る。
【０１０２】
そのようなデバイスの一般的なアーキテクチャについては、システム構成要素ＣＰＵ２０２及びＩＯＭＭＵ２１６を例示している図２が再び参照される。Ｉ／Ｏデバイスの多くの部分が任意であり、そのため、機能がバイパスされる場合にはマルチプレクサ２７０，２７２，２７４，２７６が示される。例えば、システムアドレス空間へのアクセスは、ＡＴＳ／ＰＲＩユニット２６２とともに機能するＩＯＴＬＢ２６４を通じてフローするか、又は、サービス用のＩＯＭＭＵ２１６に直接フローするかの何れかであり得る。デバイスプロセッシングコンプレックス２５８は、本明細書に記載されるように、ＡＰＤ１０４等の汎用ＡＰＤ、Ｉ／Ｏデバイス２５０，２５２，２５４等のＩ／Ｏデバイス、又は、他の特別な計算エンジンを示し得る。
【０１０３】
本発明の実施形態において、データアクセスは、ＣＰＵ２０２又はデバイスプロセッシングコンプレックス２５８により開始し得る。データアクセスは、ローカルメモリ２６８からのローカルメモリアクセス、又は、メモリ２０６からのシステムアクセスで終了し得る。例示的な実施形態において、変換効率化のためにＡＴＳを使用するＩＯＴＬＢ２６４の機能性が追加されてもよい。高度な機能及び効率性のために、ＰＰＲ／ＰＲＩサポートが追加され得る。ＡＴＳ／ＰＲＩの高度な機能性は、符号２６２によって表示されている。周辺装置は、カスタムアドレス変換及びアクセス制御のために、プライベートＭＭＵ２６０等のプライベートＭＭＵを提供してもよい。
【０１０４】
例として、周辺ローカルメモリ２６８の実装は、各デバイスにとって固有であり得る。しかしながら、一般的には、この実装は、望ましくは、各デバイスが以下のような特性を維持することを確保する：
【０１０５】
１．デバイスプロセッシングコンプレックス２５８からメモリ２０６へのアクセスは、ゲスト変換に必要とされる方針を実施するために、プライベートＭＭＵ２６０又はＩＯＭＭＵ２１６によって処理される。
【０１０６】
２．デバイスプロセッシングコンプレックス２５８からメモリ２０６へのアクセスは、ネスト型変換に必要とされる方針を実施するために、ＩＯＴＬＢ２６４（ＡＴＳ及び／又はＰＲＩ要求２６２を使用してもよい）又はＩＯＭＭＵ２１６によって処理される。
【０１０７】
３．ＣＰＵ２０２又はデバイスプロセッシングコンプレックス２５８から周辺ローカルメモリ２６８へのアクセスは、ゲスト変換に必要とされる方針を実施するために、プライベートＭＭＵ２６０によって処理される。
【０１０８】
４．ＣＰＵ２０２又はデバイスプロセッシングコンプレックス２５８から周辺ローカルメモリ２６８へのアクセスは、ネスト型変換に必要とされる方針を実施するために、ローカルメモリ保護マップ２６６によって処理される。
【０１０９】
符号３１４，３１２によって表示されている図３Ａ及び３Ｂは、図２の例示的な実施形態に従った２レイヤアドレス変換システムの例示的なブロック図のとおり、ともに機能する。さらに具体的には、本システムは、Ｉ／Ｏページテーブル２２４のデータ構造に設定されているとおり、ゲストアドレス変換テーブル構造３１４及びシステムアドレス変換テーブル構造３１２を含む。４レベルのページテーブル構造が例示され、４Ｋバイトの物理ページ３３１にアクセスするために使用される。本発明の実施形態は、より多い又はより少ないレベル（例えば、３レベルのページテーブル構造は２Ｍバイトの物理ページを指し、２レベルのページテーブル構造は１Ｇバイトの物理ページを指す等）を使用するページテーブル構造を提供する。
【０１１０】
ＧＶＡは、アドレス変換トランザクション（例えば、ＡＴＳに対する要求）を発行するＩ／Ｏデバイスによって提供されてもよい。最終的に、ＧＶＡは、アクセスするデータバイト３３０に関連したＳＰＡに変換されてもよい。
【０１１１】
ＧＣＲ３テーブルエントリ３１７は、ページマップレベル４（ＰＭＬ４）テーブルアドレス３３２を含む。ＰＭＬ４テーブルアドレス３３２は、ルートページテーブルポインタ３３４に対応しているが、ＧＰＡの形式である。システム３１４，３１２は、ＰＭＬ４テーブルアドレス３３２をＧＰＡ形式からＳＰＡ形式に転換させるネスト型ウォーク３３６を行うように、ともに機能する。ＳＰＡは、レベル４ページテーブル３３８のルートのシステム物理アドレスに対応する。このように、例えばルートページテーブルポインタ３３４に関連付けられた太い黒線は、ネスト型ウォーク３３６を使用して取得されるＳＰＡを示し得る。
【０１１２】
レベル４ページテーブル３３８は、ルートページテーブルポインタ３３４を使用して識別され、レベル４ページテーブル３３８のエントリは、ページマップレベル４（ＰＭＬ４）オフセット３３７を使用して、インデックス化される。ＰＭＬ４のオフセット３３７は、変換されることになるＧＶＡ３２６の３９〜４７ビットと関連付けられている。したがって、ＰＭＬ４のエントリ（ＰＭＬ４Ｅ）３３９は、ルートページテーブルポインタ３３４、レベル４ページテーブル３３８及びＰＭＬ４オフセット３３７を使用して配置される。ゲストがＧＶＡ３２６を使用してメモリの参照を試みるとき、ＰＭＬ４Ｅ３３９がＧＰＡであることから、システム３１４，３１２は、ネスト型ウォーク３３６を使用してＰＭＬ４Ｅ３３９をＳＰＡに変換するように、ともに機能する。
【０１１３】
ネスト型ウォーク３３６を完了するために、システム３１２は、メモリ２０６内に設定されたＩ／Ｏページテーブル２２４構造を使用して実装されてもよく、これにより、ゲストアドレス変換テーブル構造３１４からＧＰＡごとにＧＰＡからＳＰＡへの転換を遂行する。例えば、ＧＰＡ３４０は、ルートページテーブルポインタ３４１に対応するＳＰＡを取得するために、変換用のＰＭＬ４Ｅ３３９とともにロードされてもよい。ＧＰＡ３４０は、システムアドレス変換テーブル構造３１２の様々なテーブルをインデックス化するために使用されるオフセットを含む。
【０１１４】
ネスト型ウォーク３３６は、ページマップレベル４（ＰＭＬ４）テーブル３４４のルートを配置するために、ＰＭＬ４Ｅ３３９に関連付けられたｎＣＲ３  ３４２を使用する。ＰＭＬ４オフセット３４６（ＧＰＡ３４０の３９〜４７ビット）がＰＭＬ４テーブル３４４へのインデックス化するために使用され、エントリｎＰＭＬ４Ｅ３４８を取得する。ｎＰＭＬ４Ｅ３４８は、ページディレクトリポインタ（ＰＤＰ）テーブル３５０のルートを指し示し、ＰＤＰオフセット３５２（ＧＰＡ３４０の３０〜３８ビット）がＰＤＰテーブル３５０へのインデックス化するために使用され、エントリｎＰＤＰＥ３５４を取得する。
【０１１５】
ｎＰＤＰＥ３５４は、ページディレクトリ（ＰＤ）テーブル３５６のルートを指し示し、ＰＤオフセット３５８（ＧＰＡ３４０の２１〜２９ビット）がＰＤテーブル３５６へのインデックス化するために使用され、エントリｎＰＤＥ３６０を取得する。ｎＰＤＥ３６０は、ページテーブル３６２のルートを指し示し、ＰＴオフセット３６４（ＧＰＡ３４０の１２〜２０ビット）がページテーブル３６２へのインデックス化するために使用され、エントリｎＰＴＥ３６６を取得する。ｎＰＴＥ３６６は、ゲスト４ＫＢメモリページ３６８のルートを指し示し、物理ページオフセット３７０（ＧＰＡ３４０の０〜１１ビット）がゲスト４ＫＢメモリページ３６８へのインデックス化するために使用され、エントリｇＰＭＬ４Ｅ３７２を取得する。ｇＰＭＬ４Ｅ３７２は、ＧＰＡのＰＭＬ４Ｅ３３９に対応するＳＰＡ値であり、レベル３ページテーブル３７４をゲストアドレス変換テーブル構造３１４内に配置するために、ルートページテーブルポインタ３４１によって使用される。
【０１１６】
レベル３ページテーブル３７４は、ＰＤＰＥ３７６（ＧＰＡ形式）を取得するために、ＰＤＰオフセット３７５を使用してインデックス化される。ネスト型ウォーク３３６は、ＧＰＡのＰＤＰＥ３７６を、ルートページテーブルポインタ３７７に対応するＳＰＡ値に転換するために使用される。ルートページテーブルポインタ３７７は、ＰＤＥ３８０（ＧＰＡ形式）を取得するためにページディレクトリオフセット３７９（ＧＶＡ３２６の２１〜２９ビット）を使用してインデックス化されたレベル２ページテーブル３７８を配置するために使用される。ネスト型ウォーク３３６は、ＧＰＡのＰＤＥ３８０を、ルートページテーブルポインタ３８１に対応するＳＰＡ値に転換するために使用される。
【０１１７】
本発明の実施形態において、ルートページテーブルポインタ３８１は、ＰＴＥ３８４（ＧＰＡ形式）を取得するためのページテーブルオフセット３８３（ＧＶＡ３２６の１２〜２０ビット）を使用してインデックス化されたレベル１ページテーブル３８２を配置するために使用される。ネスト型ウォーク３３６は、ＧＰＡのＰＴＥ３８４を、ルートページテーブルポインタ３８５に対応するＳＰＡ値に転換するために使用される。ルートページテーブルポインタ３８５は、データバイト３３０を取得するために物理ページオフセット３８６（ＧＶＡ３２６の０〜１１ビット）を使用してインデックス化された４Ｋバイト物理ページ３３１を配置するために使用される。
【０１１８】
このように、システム３１４，３１２は、２レイヤのＧＶＡからＧＰＡへのアドレス変換及びＧＰＡからＳＰＡへのアドレス変換を行うために、ページテーブルウォークのネスト型カスケードを使用する。ネスト型アドレス処理の２つのレイヤが示されているが、同様のネスト型／再帰コールを使用して、追加的なレイヤを実装してもよい。システムアドレス変換テーブル構造３１２及びゲストアドレス変換テーブル構造３１４に関連付けられた変換は、ハードウェア内で実装されてもよい。別個のハードウェアがゲスト／システム変換の各セットに提供されてもよいが、１セットのハードウェアが両方のセットの変換に使用されてもよい。
【０１１９】
上記のとおり、従来的な複数の処理デバイスコンピューティングシステムに関連した課題の１つは、別個のメモリシステムを維持すること、及び／又は、共有メモリシステムに関するドライバ管理に関連するオーバーヘッドである。従来的な複数の処理デバイスシステムにおけるこのオーバーヘッドの一例は、複数の処理デバイス間で１セットのデータを共有するとき、２つ以上のコピーコマンドを用意する要件である。
【０１２０】
図４は、２つの別個のコピーコマンドを使用した従来のシステムにおけるメモリコピー変換のブロック図４００を例示している。便宜上、メモリ４０２及びＡＰＤ又はその他のＩ／Ｏデバイス４０６は、メモリ２０６及びＡＰＤ１０４又は他のＩ／Ｏデバイス２５０，２５２，２５４と実質的に類似であり、再度記述されない。
【０１２１】
アドレス変換に加えて、ＩＯＭＭＵ２１６は、Ｉ／ＯデバイスによるＤＭＡ転送に対するアクセス保護を提供する。さらに、ＩＯＭＭＵ２１６は、Ｉ／Ｏデバイスを選定するための安全なユーザレベルアプリケーションを提供する。また、ＩＯＭＭＵ２１６は、Ｉ／Ｏデバイスを選定するための安全なＶＭＶＭゲストＯＳアクセスを提供する。
【０１２２】
図４に例示されているとおり、複数のコピーコマンドを行うための要件は、不必要なシステムのオーバーヘッドを作り出す。例えば、ソフトウェア構成体とみなされ得る個別のバウンスバッファが、通常、複数のコピーコマンドを用意するために必要とされる。従来的には、バウンスバッファは、６４ビットのアドレス指定をサポートしていないデバイスのために、ＤＭＡトラフィック用の低システムメモリ内に配置される。ＯＳは、Ｉ／Ｏドライバによって使用される高メモリ内の実際のバッファに、又はそこから、ＤＭＡデータをコピーすることができる。一実施例において、この手法は、システムメモリが、１つの処理デバイスから受信したデータ（例えば、画像データ）を、それが操作され得る別の処理デバイス（またはローカルＩ／Ｏデバイス）メモリ４０６にコピーすることを必要とする。ローカルデバイスメモリ４０６へのコピーは、番号４０４で表示されている。番号４０８は、画像データ上で行われる動作（例えば、計算、サブルーチン実行、またはいくつかの機能）を表す。番号４１０に表示されているとおり、操作が完了すると、画像データは、次いで、システムメモリ４０２にコピーし戻される必要がある。
【０１２３】
ＩＯＭＭＵ２１６は、システムレベルのソフトウェアに大幅な増強を可能とし得る。例えば、１つの増強は、６４ビットシステムにレガシ３２ビットＩ／Ｏデバイスのサポートを提供する。この増強は、バウンスバッファ及び高価なメモリコピーを必要としない。したがって、コピーコマンドに関連したオーバーヘッドが低減される。
【０１２４】
図５は、図４に例示されている個別のコピーコマンドの必要性を排除する効率的なメモリ管理システムの例示的なブロック図５００である。
【０１２５】
図５において、ＩＯＭＭＵ５１６、メモリ５０６、ゲストＯＳ５３０，５３２、及び、ハイバーバイザ５３４は、ＩＯＭＭＵ２１６、メモリ２０６、ゲストＯＳ２３０および２３２、およびハイパーバイザ２３５と、それぞれ実質的に同様である。さらに、Ｉ／Ｏデバイス５５０，５５２，５５４は、ＡＰＤ１０４又は他のＩ／Ｏデバイス２５０，２５２，２５４と実質的に同様である。したがって、便宜上、図２及び図５における同様の要素の記述は、繰り返されない。
【０１２６】
また図５において、符号５９０，５９２，５９４の各々は、例示的なＩ／Ｏデバイス５９０，５５２，５５４によって送信されるＤＭＡ要求を表す。ＩＯＭＭＵ５１６によって提供されるネスト型ページングトランザクションは、１つの動作（例えば、計算、サブルーチン実行又はいくつかの機能）のある要素を取り出して、システムが直接操作を通じて動作を効率的に適応させるために、例示的なＩ／Ｏデバイス５５０，５５２，５５４を提供する。
【０１２７】
例示的実施形態では、ＡＰＤ又は他のＩ／Ｏデバイスの直接操作を通じて、画像データを含み得るメモリ５０６を直接操作し得るが、画像データは、依然としてメモリ５０６内にある。メモリ５０６のこの直接的な操作によって、メモリ５０６及びＩ／Ｏデバイス５５０，５５２，５５４は、同じゲスト仮想アドレス空間から離れて動作することが可能となる。この実施形態では、ＩＯＭＭＵ５１６は、Ｉ／Ｏデバイス５５０，５５２，５５４によるメモリ５０６への直接アクセスを容易にするために、マッピングされたゲストポインタを使用することができる。これにより、データ操作の前、又は、データへの任意の操作の完了後に、メモリ５０６が、まずデータ（画像データ）をＩ／Ｏデバイス５５０，５５２，５５４にコピーする必要性を排除する。直接メモリ操作及び本明細書に記載される他の拡張を介して、これらの追加的なコピー手順を排除することにより、改善された効率性及びデータコピーに関連するオーバーヘッドの低減を可能にする。
【０１２８】
図６は、本発明の別の態様による動作フロー図６００である。示される実施例において、システム６００は、メモリ６０６と、ＩＯＭＭＵ６１６と、周辺デバイス６８７とを含み、これらは、メモリ２０６と、ＩＯＭＭＵ２１６と、Ｉ／Ｏデバイス２５４と実質的に同様である。
【０１２９】
一実施形態では、メモリ６０６は、イベントログ６２０と、コマンドバッファ６２２と、Ｉ／Ｏページテーブル６２４と、デバイステーブル６２６と、ＰＰＳＲキュー６２７と、割り込み再マッピングテーブル６２８と、ゲストＯＳ６３０と、ゲストＯＳ６３２と、ハイパーバイザ６３４とを含む。これらの要素は図２に記述されているものと同様である。ＡＴＳ要求６８０、ＡＴＳ応答６８２、ＰＲＩ要求６８４及びＰＲＩ応答６８６は、例示的な図２に従って導入されたＡＴＳ／ＰＲＩ２６２のさらに詳細な例示である。周辺装置６８７は、符号６８８によって表示されているようにＡＴＳ応答を評価するように構成されてもよく、符号６８９によって表示されているようにＰＲＩ応答を評価するように構成されてもよい。
【０１３０】
本発明の別の態様は、ＧＰＡをＳＰＡに変換するために周辺装置６８７によって使用されるＡＴＳを提供する。図６において、ＡＴＳは、仮想化のための安全なデバイス主導のアドレス変換を提供する。ＧＰＡをＳＰＡに変換するために、ＰＣＩ−Ｅ接続されている周辺装置６８７は、ＩＯＭＭＵ６１６によって認識されるＰＡＳＩＤのＴＬＰプリフィックス有り又は無しで、ＡＴＳ要求６８０（ＰＣＩのＳＩＧ仕様）を発行する。ＩＯＭＭＵ６１６は、必要なときには、ＩＯＴＬＢ２６４からのキャッシュされた情報を使用して、及び／又は、テーブルウォーカ２４４を使用して、ページテーブルをウォークすることによって、アクセス特権を評価する。ＩＯＭＭＵ６１６は、ＡＴＳ６８０要求の結果を判定し（６８１）、結果として得られるアクセス特権は、プロセッサ及び／又はハイパーバイザ６３４による介入を必要とすることなくＡＴＳ応答６８２に戻される。
【０１３１】
さらに、アドレス変換サービスは、ＧＶＡ又はＧＰＡをＳＰＡに変換するために、周辺装置６８７によって要求され得る。ＧＶＡをＳＰＡに変換するために、ＰＣＩｅによって接続されている周辺装置６８７は、フラグ（例えば、アクセス及びダーティビット状態）及びカノニカル仮想アドレスを提示するための有効なＰＡＳＩＤを含むＡＴＳ要求６８０を発行する。統合型周辺装置６８７は、フラグ及び仮想アドレスを提示するために、有線信号等、ＡＴＳプロトコル以外の手段を使用してもよい。ＩＯＭＭＵ６１６は、効率化のために、ＩＯＴＬＢ２６４にキャッシュされた情報を使用して、アクセス特権を評価し、必要なときには、テーブルウォーカ２４４を使用してページテーブルをウォークすることができる。ＡＭＤ６４セマンティクスにマッチさせるために、ＩＯＭＭＵは、以前にキャッシュされた情報がそのアクセスに対して不十分な権利を指摘した場合には、そのゲストページテーブル、Ｉ／Ｏページテーブル６２４を再度ウォークすることができる。結果として得られるアクセス特権は、ＡＴＳ応答６８２に戻される（６８１）。ゲストアドレスのための追加情報を有するために、ＩＯＭＭＵ６１６は、有効なＰＡＳＩＤを含むＰＣＩｅのＴＬＰのプレフィックスを使用する。
【０１３２】
ＩＯＭＭＵ６１６は、周辺装置６８７があたかも実際にメモリにアクセスしたかのようにＡＴＳ要求６８０に対応しながら、ＧＶＡページテーブル、Ｉ／Ｏページテーブル６２４内のアクセストビット及びダーティビット（図示されない）を更新する必要がある。ＧＶＡのアクセストビット及びダーティビットを評価する目的で、ＩＯＭＭＵ６１６は、ＡＴＳ要求６８０のＡＴＳパケット（図示されない）内に示されるアクセスレベルを使用し得る。読み取り専用アクセスのためのＡＴＳ要求６８０は、アクセストビット設定を判定してもよく、読み書きアクセスのためのＡＴＳ要求６８０は、ダーティビット設定を判定し得る。ＧＰＡを処理するとき、ＩＯＭＭＵ６１６は、ページテーブルを読み取り専用として扱い得る。
【０１３３】
さらに、ソフトウェアは、ＩＯＭＭＵ６１６に周辺装置６８７への無効化要求を生成させるためのＩＮＶＡＬＩＤＡＴＥ＿ＩＯＴＬＢ＿ＰＡＧＥＳコマンドを発行する。周辺装置６８７に下流送信される無効化要求は、内容がＧＰＡの場合、有効なＰＡＳＩＤプリフィックスを欠いている。周辺装置６８７に下流送信される無効化要求は、内容がＧＶＡであり、ＰＡＳＩＤがＰＡＳＩＤのＴＬＰのプリフィックス内にある場合、有効なＰＡＳＩＤのプリフィックスを有する。
【０１３４】
ＩＯＴＬＢ２６４を有する周辺装置６８７が、不十分な特権による不履行の原因となるキャッシュされた変換エントリを無効にし、ＡＴＳを使用して新たな変換を取得しなければならない状況について、以下に説明する。
【０１３５】
周辺装置６８７は、ネスト型（ホスト）アクセスのためのアクセス特権を判定するために、ＩＯＴＬＢ２６４からのアドレス変換情報、又は、ＡＴＳを介して取得されたアドレス変換情報を使用し得る。ＡＭＤ拡張として、ＩＯＴＬＢ２６４を有する周辺装置６８７は、アクセスビット及びダーティビットの両方がゲストアクセス用のＩＯＴＬＢエントリ内で「１」に設定されている場合、不十分な特権による不履行の原因となるキャッシュされたエントリを無効化し得る。周辺装置６８７は、次いで、ＡＴＳを使用して変換情報を要求し、アクセスを再試行しなければならない。修正された特権が再試行にとって不十分である場合、周辺装置６８７は、そのアクセスを放棄するか又は権限昇格のためのＰＣＩ−Ｅ  ＰＲＩ要求６８４を発行するために適切な措置を取らなければならない。
【０１３６】
ＡＴＳの場合、ＩＯＭＭＵ６１６は、ＡＴＳ応答６８２で送り返す結果を判定する６８１ために必要な全ての情報を有する。しかしながら、ＰＲＩの場合、ＰＲＩ要求は、ゲストＯＳ６３０，６３２、ハイパーバイザ６３４、及び／又は、ソフトウェア（ＳＷ）に送られ、ＰＲＩ応答６８６の結果を判定すること（６８３）を補助する。例えば、ＰＲＩ要求６８４は、ソフトウェア方針決定が、ゲストＯＳ６３０，６３２及び／又はハイパーバイザ６３４によって行われることを必要とする。ＰＲＩ、ＰＣＩ−Ｓｉｇ仕様は、周辺装置６８７が、例示的なＶＭブロック６２９（例えば、ソフトウェア）からメモリ管理サービスを要求することを許可する。
【０１３７】
さらに、ＩＯＭＭＵ６１６は、任意に、ＰＣＩ−ＳＩＧ  ＡＴＳ仕様を補完するものとして、ＰＲＩ仕様をサポートする。ＰＲＩは、ＡＴＳと併せて、周辺ページフォルトサポートを提供する。ＰＲＩに対するＩＯＭＭＵ６１６のサポートは、ＰＰＲサービスである。
【０１３８】
従来のシステムにおいて、ＯＳは、Ｉ／Ｏに使用されるメモリページを固定することを必要とされる。固定されたメモリとは、常時、実メモリに維持されるメモリページを指す。メモリページを固定することで、ページャが他の利用のためにメモリページを盗むことを禁止する。メモリページは、通常、ＤＭＡの開始前に固定されなければならず、ＤＭＡの完了時に、固定解除されてもよい。固定されたページは、多くの場合、制限された容量の別個のメモリプールから割り付けられる。
【０１３９】
ＡＴＳ及びＰＲＩは、周辺装置６８７が、Ｉ／Ｏに固定されていないページを使用できるようにするために、ともに使用され得る。ＡＴＳ要求６８０を処理する際、ＩＯＭＭＵ６１６は、不十分なアクセス特権又は存在しないページが検出されたときに、エラーを信号で伝えない。その代わりに、ＩＯＭＭＵ６１６は、Ｉ／Ｏページテーブル６２４から算定されたパーミッションを返す。周辺装置６８７は、適切なアクション（例えば、Ｉ／Ｏページテーブル６２４にページテーブルエントリをサービスするためのシステムソフトウェアを要求するためにＰＲＩを使用する）を判定するために、ＰＲＩ応答６８６を検討する。周辺ページ要求サービス（ＰＰＲ）／ＰＲＩの使用は、周辺装置６８７が、Ｉ／Ｏページテーブル６２４のページのアクセス特権を変更することを、ＯＳに対して要求できるようにする。ＰＰＲ付きのＡＴＳの使用は、システムが、低減されたメモリフットプリントで、効率的に動作することを可能にし得る。
【０１４０】
本発明の例示的な操作において、ＩＯＭＭＵ６１６は、全てのメモリ６０６がＤＭＡジョブ要求を処理するために物理的に利用できない場合、メモリを周辺装置６８７に提供するよう実装される。例えば、周辺装置６８７がＡＴＳ要求６８０を送信し、メモリがメモリ６０６内で物理的に利用できない場合には、一般的に、ページフォルトの結果となり得る。ページフォルトは、ＡＴＳ＿Ｃａｌｃ６２３を介したメモリアクセス試行に応答したコマンドバッファ６２２からＩＯＭＭＵ６１６への信号によって示され得る。
【０１４１】
また、周辺装置６８７がＡＴＳ対応である場合、周辺装置６８７は、ＩＯＭＭＵ６１６に対してＰＲＩ要求６８４を発行し得る。ＰＲＩ要求６８４は、ＩＯＭＭＵ６１６によって受信され、ＩＯＭＭＵ６１６は、ソフトウェア方針６８３がＰＲＩ応答６８６を算定するために必要とされるため、ＰＲＩ要求６８４に応答して、ゲストＯＳ６３０、ゲストＯＳ６３２及びハイパーバイザ６３４を含むシステムブロック６２９に信号６３１を送信する。ハイパーバイザ６３４は、ＩＯＭＭＵ信号ＰＲＩ＿Ｃａｌｃ６３１を処理することに関してゲストＯＳ６３０，６３２よりも優先され、ＰＲＩ＿Ｃａｌｃ６３１の処理をゲストＯＳ６３０，６３２に送る前に、ＰＲＩ＿Ｃａｌｃ６３１を処理することの第１の拒否権を有する。周辺装置６８７がＰＲＩ要求６８４を送信し、メモリがメモリ６０６内で物理的に利用できない場合には、通常、ページフォルトの結果となり得る。ページフォルトは、ＰＲＩ＿Ｃａｌｃ６３１を介したメモリアクセス試行に応答したコマンドバッファ６２２からＩＯＭＭＵ６１６への信号によって示され得る。
【０１４２】
ページフォルトの結果となった場合、ＩＯＭＭＵ６１６は、ＡＴＳ＿Ｃａｌｃ６２３又はＰＲＩ＿Ｃａｌｃ６３１を、ＰＰＳＲテーブル６２７（例えば、ＰＰＲキュー）に送信するよう構成されている。これは、ＩＯＭＭＵ６１６が、有効なＰＲＩ要求６８４を受信すると、仮想アドレス空間に対する変更を要求するためのＰＰＲメッセージを生成するためである。ＶＭブロック６２９内に設定されているソフトウェア方針は、ページ内でのスワッピング、新たなページの割り付け、要求の拒否、セキュリティ権限の更新、コピーオンライト操作の提供、又は、決定的なページフォルトを防ぐための任意の他の便宜によって、ページフォルト問題を解決することができる。
【０１４３】
ＰＰＲに対応するＩＯＭＭＵ６１６は、メモリ６０６内の共有サーキュラーバッファ（図示されない）によって、ＰＰＩ要求をホストソフトウェア６８３に報告してもよい。ＩＯＭＭＵ６１６は、有効となったときに、Ｉ／ＯデバイスのＰＰＲレコードをバッファに書き込んでもよい。ホストソフトウェア６８３は、ホストソフトウェア６８３がＰＰＲ要求ログエントリを使い果たしたということをＩＯＭＭＵ６１６に示すために、ＩＯＭＭＵ２１６のＰＰＲ要求ログのヘッドポインタ（図示されない）をインクリメントする。ソフトウェア６８３がＰＰＲ要求６０１の処理を完了したとき、ＰＰＲキュー６２７は、Ｉ／Ｏデバイス６８７に結果を通知するために、ＩＯＭＭＵジョブ完了コマンドを使用する。
【０１４４】
より多くのメモリについての、メモリ６０６へのＩＯＭＭＵ６１６の要求が受け入れられると、仮想ブロック６２９内のゲストＯＳ６３０，６３２のうちの１つが、メモリ６０６内に物理的に存在しない（すなわち、Ｉ／Ｏページテーブル６２４のページがＯＳによって未だにロードされていない）メモリ６０６内のページへのアクセスが試みられた場合にのみ、ディスクページ（すなわち、物理メモリ）をメモリ６０６内にコピーし得る。
【０１４５】
通常、アプリケーション２１１が処理を開始するときには、アプリケーション２１１のページはメモリ内に存在していない。その結果、ＤＭＡ操作を実行するために必要なアプリケーション２１１の重要なページがＰＲＩ応答６８６に関連してメモリ６０６にロードされる前に、多くのページフォルトが生じる可能性がある。仮想メモリブロック６２９がＤＭＡ動作のために必要なページのみをロードするように動作する場合、結果として、仮想ブロック６２９内のより多くのプロセッサが、ロードされることを許可されることになる。より多くのプロセッサが、仮想ブロック６２９にロードされることが可能である場合、ＧＣＲ３レジスタをロードするために必要な時間の量は、前述の表題「Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ  Ｔｗｏ−Ｌａｙｅｒ  Ａｄｄｒｅｓｓｉｎｇ」の米国特許出願第６１／４２３，０６２号に記載されるように、低減される。
【０１４６】
ソフトウェア方針６８３がＶＭブロック６２９によって開始されると、コマンドバッファ６２２は、矢印６２５によって表示されているように、ＩＯＭＭＵ６１６に通知を行う。ＩＯＭＭＵ６１６は、ＡＴＳ応答６８２又はＰＲＩ応答６８６を、ＩＯＭＭＵ６１６に送信する。周辺装置６８７は、符号６８８，６８９でそれぞれ表示されているとおり、結果としてのＡＴＳ応答６８２及びＰＲＩ応答６８６を評価する。あるいは、ＩＯＭＭＵ６１６は、解決がない場合、イベントログ６２０に書き込みを行ってもよく、結果として決定的なページフォルトが生じる。
【０１４７】
図７は、本発明の実施形態を実施する例示的な方法７００のフロー図である。方法７００において、ステップ７０２は、メモリ４０２内のデータへのアクセスと関連付けられたポインタを、ＩＯＭＭＵ２１６を介してＩ／Ｏデバイス４０６に送ることを示している。Ｉ／Ｏデバイスは、そのＩ／Ｏデバイスに対してローカルであるＩ／Ｏデバイスメモリ内にデータをコピーする必要なく、ＩＯＭＭＵを介してメモリ内のデータにアクセスする。
【０１４８】
ステップ７０４は、Ｉ／Ｏデバイスによって、ポインタに基づいてメモリ内のデータに操作を行うことを示している。ＩＯＭＭＵ２１６は、ＩＯＭＭＵ２１６によって送られたポインタに基づいて、Ｉ／Ｏデバイス４０６を制御することができる。Ｉ／Ｏデバイス４０６は、メモリ４０２にアクセスする。この動作は、Ｉ／Ｏデバイス４０６のローカルメモリ２６６に、メモリ４０２内のデータをコピーする動作４０４を行うことを必要としない。また、４１０で操作されたデータをメモリ４０２にコピーバックするコピー動作４１２の必要もない。
【０１４９】
（結論）
発明の概要及び要約は、本発明者によって企図される本発明の１つ以上ではあるが全てではない例示的な実施形態を示しており、したがって、本発明及び添付の特許請求の範囲を如何様にも限定することを意図するものではない。
【０１５０】
本発明は、その特定の機能の実現及び関係を示す機能的な構成要素を用いて上述されている。これらの機能の構成要素の境界線は、説明の便宜のために本明細書に恣意的に定義されている。その特定の機能の実現及び関係が適切に行われる限り、代替的な境界線が定義されてもよい。
【０１５１】
特定の実施形態について上述した説明は、当業者の範囲内の知識を適用することにより、他者が、様々な応用のために、このような特定の実施形態を、過度な実験をすることなく、本発明の概括的な概念から逸脱することなく、容易に変更及び／又は改造し得る、本発明の概括的な特徴を十分に公表するであろう。したがって、そのような改造及び変更は、本明細書に提示される教示及び指導に基づいて、開示される実施形態の等価物の意味及び範囲内に含まれることが意図される。本明細書の語法又は用語法は、教示及び指導に鑑み、当業者により理解されるべきものであるように、本明細書における語法又は用語法は、説明目的であって制限する目的ではないことを理解されたい。
【０１５２】
本発明の広がりや範囲は、上記の例示的な実施形態の何れによっても限定されるべきではなく、以下の特許請求の範囲及びそれらの均等物によってのみ定義されるべきである。
【図１】
0005870206.tif 000002
【図２】
0005870206.tif 000003
【図３Ａ】
0005870206.tif 000004
【図３Ｂ】
0005870206.tif 000005
【図４】
0005870206.tif 000006
【図５】
0005870206.tif 000007
【図６】
0005870206.tif 000008
【図７】
0005870206.tif 000009