(57)【要約】      （修正有）【課題】仮想アドレスを物理アドレスに変換する。【解決手段】デバイスは、仮想アドレスを特定するダイレクトメモリアクセス要求を受信する。仮想アドレスが、仮想アドレスの特定の範囲内に存在するか否かを判別する。仮想アドレスが、仮想アドレスの特定の範囲内に存在するか否かを判別することに基づいて、第１アクション又は第２アクションを選択的に実行する。第１アクションは、仮想アドレスが、仮想アドレスの特定の範囲内に存在しない場合に、第１アドレス変換アルゴリズムを実行して、仮想アドレスを、メモリデバイスに関連付けられた物理アドレスに変換することを含む。第２アクションは、仮想アドレスが、仮想アドレスの特定の範囲内に存在する場合に、第２アドレス変換アルゴリズムを実行して、仮想アドレスを物理アドレスに変換することを含む。第２アドレス変換アルゴリズムは、第１アドレス変換アルゴリズムと異なる。【選択図】図５
2018198088.tif 000002
【特許請求の範囲】
【請求項１】
受信した仮想アドレスに基づいて物理アドレスを計算する方法であって、
デバイスが、前記受信した仮想アドレスに基づいてオフセット値を計算するステップであって、前記オフセット値は、前記受信した仮想アドレスからベースアドレスを減算した値に等しい、ステップと、
前記デバイスが、前記オフセット値が負である場合に、前記受信した仮想アドレスが所定の範囲外であると判別するステップと、
前記デバイスが、前記オフセット値がゼロ又は正である場合に、前記オフセット値を長さ値と比較するステップであって、前記オフセット値が前記長さ値よりも大きい場合に、前記受信した仮想アドレスは前記所定の範囲外であり、前記オフセット値がゼロに等しい場合又は前記オフセット値が前記長さ値よりも小さい場合に、前記受信した仮想アドレスは前記所定の範囲内である、ステップと、
前記デバイスが、前記受信した仮想アドレスが前記所定の範囲内にある場合に、前記受信した仮想アドレスに関連するアクセスタイプが許可されているか否かを判別するステップと、
前記デバイスが、前記アクセスタイプが許可されていない場合又は前記受信した仮想アドレスが前記所定の範囲外である場合に、第１処理経路を介して前記物理アドレスを計算するステップと、
前記デバイスが、前記アクセスタイプが許可されている場合に、前記オフセット値とリロケーション値とに基づいて、第２処理経路を介して前記物理アドレスを計算するステップであって、前記第２処理経路は前記第１処理経路よりも高速である、ステップと、を含む、
方法。
【請求項２】
前記受信した仮想アドレスは、受信したダイレクトメモリアクセス要求に含まれている、
請求項１の方法。
【請求項３】
前記第１処理経路は、ページテーブルを用いて、前記受信した仮想アドレスを前記物理アドレスに変換するアドレス変換アルゴリズムを含む、請求項１の方法。
【請求項４】
前記所定の範囲は、第１閾値と、前記第１閾値とは異なる第２閾値とによって定められている、請求項１の方法。
【請求項５】
前記物理アドレスは、前記第２処理経路を介して、前記オフセット値と前記リロケーション値とを組み合わせることによって計算される、請求項１の方法。
【請求項６】
前記第１処理経路は入出力メモリ管理ユニット（ＩＯＭＭＵ）を含み、前記第２処理経路は前記ＩＯＭＭＵを含まない、請求項１の方法。
【請求項７】
前記物理アドレスはメモリデバイスに関連付けられている、請求項１の方法。
【請求項８】
プロセッサによってロードされ実行されると請求項１〜７の何れかの方法を前記プロセッサに実行させる機械実行可能命令を記憶するコンピュータ可読記憶媒体。
【請求項９】
コントローラを備えるデバイスであって、
前記コントローラは、
受信した仮想アドレスに基づいてオフセット値を計算することであって、前記オフセット値は、前記受信した仮想アドレスからベースアドレスを減算した値に等しい、ことと、
前記オフセット値が負である場合に、前記受信した仮想アドレスが所定の範囲外であると判別することと、
前記オフセット値がゼロ又は正である場合に、前記オフセット値を長さ値と比較することであって、前記オフセット値が前記長さ値よりも大きい場合に、前記受信した仮想アドレスは前記所定の範囲外であり、前記オフセット値がゼロに等しい場合又は前記オフセット値が前記長さ値よりも小さい場合に、前記受信した仮想アドレスは前記所定の範囲内である、ことと、
前記受信した仮想アドレスが前記所定の範囲内にある場合に、前記受信した仮想アドレスに関連するアクセスタイプが許可されているか否かを判別することと、
前記アクセスタイプが許可されていない場合又は前記受信した仮想アドレスが前記所定の範囲外である場合に、第１処理経路を介して前記物理アドレスを計算することと、
前記アクセスタイプが許可されている場合に、前記オフセット値とリロケーション値とに基づいて、第２処理経路を介して前記物理アドレスを計算することであって、前記第２処理経路は前記第１処理経路よりも高速である、ことと、を行うように構成されている、
デバイス。
【請求項１０】
前記受信した仮想アドレスは、受信したダイレクトメモリアクセス要求に含まれている、
請求項９のデバイス。
【請求項１１】
前記第１処理経路は、ページテーブルを用いて、前記受信した仮想アドレスを前記物理アドレスに変換するアドレス変換アルゴリズムを含む、請求項９のデバイス。
【請求項１２】
前記所定の範囲は、第１閾値と、前記第１閾値とは異なる第２閾値とによって定められている、請求項９のデバイス。
【請求項１３】
前記物理アドレスは、前記第２処理経路を介して、前記オフセット値と前記リロケーション値とを組み合わせることによって計算される、請求項９のデバイス。
【請求項１４】
前記第１処理経路は入出力メモリ管理ユニット（ＩＯＭＭＵ）を含み、前記第２処理経路は前記ＩＯＭＭＵを含まない、請求項９のデバイス。
【請求項１５】
前記所定の範囲は、仮想アドレス値の複数の範囲のうちの１つであり、
前記コントローラは、仮想アドレス値の前記複数の範囲から前記所定の範囲を選択するように構成されている、請求項９のデバイス。
【発明の詳細な説明】
【背景技術】
【０００１】
入出力メモリ管理ユニット（ＩＯＭＭＵ）は、ダイレクトメモリアクセス（ＤＭＡ）対応デバイス（例えば、グラフィックスカード、ネットワークカード、サウンドカード等）とメインメモリとの間の通信を提供することができる。ＩＯＭＭＵは、ＤＭＡ対応デバイスから受信したダイレクトメモリアクセス要求で特定される仮想メモリアドレスを、メインメモリの物理アドレスに変換することができる。ＩＯＭＭＵは、中央処理装置（ＣＰＵ）を介してルーティングされることなく、メモリアクセスがＤＭＡ対応デバイスに提供されるように構成することができる。例えば、ＩＯＭＭＵは、仮想メモリアドレスを特定するメモリアクセス要求をＤＭＡ対応デバイスから受信し、仮想メモリアドレスを物理メモリアドレスにマッピングするページテーブル内の仮想メモリアドレスをルックアップすることができる。次に、物理メモリアドレスに記憶された情報は、ＤＭＡ対応デバイスによって読み書きされる。
【発明の概要】
【課題を解決するための手段】
【０００２】
いくつかの可能な実施形態によれば、方法は、デバイスが、仮想アドレスを特定するダイレクトメモリアクセス要求を受信するステップを含むことができる。この方法は、デバイスが、仮想アドレスが仮想アドレスの特定の範囲内に存在するか否かを判別するステップを含むことができる。方法は、デバイスが、仮想アドレスが仮想アドレスの特定の範囲内に存在するか否かを判別するステップに基づいて、第１アクション又は第２アクションを選択的に実行するステップを含むことができる。第１アクションは、仮想アドレスが仮想アドレスの特定の範囲内に存在しない場合に、仮想アドレスをメモリデバイスに関連付けられた物理アドレスに変換するための第１アドレス変換アルゴリズムを実行するステップを含むことができる。第２アクションは、仮想アドレスが仮想アドレスの特定の範囲内に存在する場合に、仮想アドレスをメモリデバイスに関連付けられた物理アドレスに変換するための第２アドレス変換アルゴリズムを実行するステップを含むことができる。第２アドレス変換アルゴリズムは、第１アドレス変換アルゴリズムと異なっていてもよい。
【０００３】
いくつかの可能な実施形態によれば、デバイスは、コントローラを備えてもよい。コントローラは、仮想アドレス値を特定するメモリアクセス要求を周辺デバイスから受信することができる。コントローラは、コントローラがアクセス可能なメモリに記憶された情報に基づいて、仮想アドレス値が仮想アドレス値の特定の範囲に含まれるか否かを判別することができる。コントローラは、仮想アドレス値が仮想アドレス値の特定の範囲に含まれるか否かを判別することに基づいて、第１アクション又は第２アクションを選択的に実行することができる。コントローラは、仮想アドレス値が仮想アドレス値の特定の範囲に含まれない場合に、第１アクションを実行することができる。第１アクションは、仮想アドレス値を、メモリデバイス内のメモリ位置を特定する物理アドレス値に変換するための第１アドレス変換アルゴリズムを実行することを含むことができる。コントローラは、仮想アドレス値が仮想アドレス値の特定の範囲に含まれる場合に、第２アクションを実行することができる。第２アクションは、仮想アドレス値を物理アドレス値に変換するための第２アドレス変換アルゴリズムを実行することを含むことができる。第２アドレス変換アルゴリズムは、第１アドレス変換アルゴリズムと異なっていてもよい。
【０００４】
いくつかの可能な実施形態によれば、システムは、仮想アドレス値を特定するメモリアクセス要求を受信することができる。システムは、仮想アドレス値が仮想アドレス値の特定の範囲に含まれるか否かを判別することができる。システムは、仮想アドレス値が仮想アドレス値の特定の範囲に含まれるか否かを判別することに基づいて、第１アドレス変換アルゴリズム又は第２アドレス変換アルゴリズムを選択的に実行して、仮想アドレス値を、メモリデバイスに関連付けられた物理アドレス値に変換することができる。システムは、仮想アドレス値が仮想アドレス値の特定の範囲に含まれない場合に、第１アドレス変換アルゴリズムを実行することができる。システムは、仮想アドレス値が仮想アドレス値の特定の範囲に含まれる場合に、第２アドレス変換アルゴリズムを実行することができる。第２アドレス変換アルゴリズムは、第１アドレス変換アルゴリズムと異なっていてもよい。システムは、第１アドレス変換アルゴリズム又は第２アドレス変換アルゴリズムを選択的に実行することに基づいて、メモリアクセス要求と、物理アドレス値を特定する情報と、をメモリデバイスに向けてルーティングすることができる。
【図面の簡単な説明】
【０００５】
【図１】本明細書で説明される例示的な実施形態の概要を示す図である。
【図２】本明細書で説明される実施形態を実装することができる例示的なシステムの図である。
【図３】仮想化されたコンピューティング環境においてダイレクトメモリアクセス要求をルーティングする場合に用いられるメモリレジスタを割り当てるための例示的なプロセスのフローチャートである。
【図４Ａ】図３に示す例示的なプロセスに関する例示的な実施形態の図である。
【図４Ｂ】図３に示す例示的なプロセスに関する例示的な実施形態の図である。
【図５】仮想化されたコンピューティング環境においてダイレクトメモリアクセス要求をルーティングする例示的なプロセスのフローチャートである。
【図６Ａ】図５に示す例示的なプロセスに関する例示的な実施形態の図である。
【図６Ｂ】図５に示す例示的なプロセスに関する例示的な実施形態の図である。
【図６Ｃ】図５に示す例示的なプロセスに関する例示的な実施形態の図である。
【図６Ｄ】図５に示す例示的なプロセスに関する例示的な実施形態の図である。
【図６Ｅ】図５に示す例示的なプロセスに関する例示的な実施形態の図である。
【図７Ａ】図５に示す例示的なプロセスに関する他の例示的な実施形態の図である。
【図７Ｂ】図５に示す例示的なプロセスに関する他の例示的な実施形態の図である。
【発明を実施するための形態】
【０００６】
例示的な実施形態の以下の詳細な説明は、添付図面を参照する。異なる図面における同一の参照番号は、同一又は類似の要素を特定し得る。
【０００７】
ダイレクトメモリアドレス（ＤＭＡ）機能を有する周辺デバイスは、メモリアクセス要求を入出力メモリ管理ユニット（ＩＯＭＭＵ）に提供することによって、仮想化されたコンピューティング環境で動作することができる。ＩＯＭＭＵは、メモリアクセス要求で特定される仮想アドレスを、メインメモリブロックに関連付けられた物理アドレスに変換することができる。このようにして、ＩＯＭＭＵは、仮想化されたコンピューティング環境で動作する周辺デバイスと、メインメモリとの間の通信を提供することができる。しかし、ＩＯＭＭＵを介してメモリアクセス要求をルーティングすることは、アドレス変換アルゴリズムを実行するのにＩＯＭＭＵが必要とする演算能力の量、及び、様々な他のＩＯＭＭＵプロセスを実行するのに必要な演算能力の量のために、低速及び／又はコストがかかる可能性がある。
【０００８】
メモリアクセス要求のルーティングを高速化するために、ＩＯＭＭＵ処理から特定の要求を除外する場合がある。例えば、ディスプレイデバイスのピクセルをリフレッシュするのに用いられるフレームバッファに関連付けられたアドレスを特定する要求は、ＩＯＭＭＵ処理から除外されてもよい。しかしながら、このような除外は、セキュリティ問題を引き起こし、仮想化されたコンピューティング環境において周辺デバイスを動作させるのに必要なメモリアドレス変換を提供しない可能性がある。本明細書で説明する実施形態は、或る条件を満たす場合に、高速ルートを介してメモリアクセス要求をメインメモリにルーティングし、条件を満たさない場合に、低速ルートを介してメモリアクセス要求をメインメモリにルーティングするメカニズムを提供する。両方のルートは、メモリアドレス変換を提供し、これにより、周辺デバイスの性能を向上させながら、仮想化されたコンピューティング環境で周辺デバイスが動作することを可能にする。
【０００９】
図１は、本明細書で説明する例示的な実施形態の概要１００を示す図である。図１に示すように、ＤＭＡ対応デバイス（例えば、周辺デバイス）は、仮想アドレスを特定するＤＭＡ要求を、ルーティングコントローラに提供することができる。ルーティングコントローラは、ＤＭＡ要求が、ＩＯＭＭＵを用いて当該要求を処理する第１ルート又はＩＯＭＭＵを用いずに当該要求を処理する第２ルートを介してルーティングされるか否かを決定するルーティング決定を行うデバイスを含むことができる。ルーティングコントローラは、要求を分析して、１つ以上の条件を満たすか否かを判別することができる。例えば、ルーティングコントローラは、第２ルートを介するルーティングが有効であるか否か、仮想アドレスが第２ルートを介してルーティングされる仮想アドレスの範囲内にあるか否か、要求されたアクセスタイプ（例えば、読み出しアクセス、書き込みアクセス等）が許可されているか否か等を判別することができる。ルーティングコントローラは、割り当てられたレジスタセットを用いてこの分析を実行してもよい。
【００１０】
さらに図１に示すように、条件を満たさない場合に、ルーティングコントローラは、第１ルートを介してＤＭＡ要求をルーティングしてもよい。第１ルートは、ＩＯＭＭＵを含んでもよく、及び／又は、第１アドレス変換アルゴリズムを用いてメモリアクセス要求を処理して、仮想アドレスを、メインメモリに関連付けられた物理アドレスに変換することを含んでもよい。ＩＯＭＭＵは、アドレス変換を実行した後に、物理アドレスを特定する情報を含むダイレクトメモリアクセス要求を、メインメモリにルーティングするためのメモリコントローラにルーティングしてもよい。
【００１１】
一方、条件を満たす場合に、ルーティングコントローラは、第２ルートを介してＤＭＡ要求をルーティングしてもよい。第２ルートは、ＩＯＭＭＵを含まなくてもよく、及び／又は、第１アドレス変換アルゴリズムと異なる（より高速な）第２アドレス変換アルゴリズムを用いてメモリアクセス要求を処理することを含んでもよい。この場合、ルーティングコントローラは、割り当てられたレジスタセットを用いて仮想アドレスから物理アドレスを判別してもよく、物理アドレスを用いてメインメモリにルーティングするためにＤＭＡ要求をメモリコントローラにルーティングしてもよい。
【００１２】
第２アドレス変換アルゴリズムは、第１アドレス変換アルゴリズムよりも複雑でなく、より高速に実行されてもよい。さらに、又は代替として、第２ルートは、第１ルートでＩＯＭＭＵが実行するいくつかの処理を除外してもよい。これにより、第２ルートは、ＤＭＡ要求を、第１ルートより早くメインメモリに提供することができる。このようにして、ルーティングコントローラは、仮想化されたコンピューティング環境で動作するＤＭＡ対応デバイスの性能を向上させるとともに、ＤＭＡ要求を分析することによってセキュリティを強化することができる。
【００１３】
図２は、本明細書で説明する実施形態を実装し得る例示的なシステム２００を示す図である。図２に示すように、システム２００は、１つ以上の周辺デバイス２１０−１〜２１０−Ｎ（Ｎ≧１）（以下、「周辺デバイス２１０」と総称する）と、ルーティングコントローラ２２０と、ＩＯＭＭＵ２３０と、メモリコントローラ２４０と、メインメモリ２５０と、を含む。システム２００の各デバイスは、有線接続、無線接続等を介して接続されてもよい。
【００１４】
周辺デバイス２１０は、中央処理装置から独立して、ダイレクトメモリアクセスを介してメインメモリ２５０にアクセス可能な１つ以上のデバイスを含んでもよい。例えば、周辺デバイス２１０は、グラフィックス処理ユニット（ＧＰＵ）、加速処理ユニット（ＡＰＵ）、ネットワークインタフェースカード、サウンドカード、ディスクドライブ、マザーボード等のＤＭＡ対応デバイスを含んでもよい。いくつかの実施形態では、周辺デバイス２１０は、他のコンピューティングデバイスのメインメモリ２５０へのリモートＤＭＡアクセスを有するコンピューティングデバイスである。他の例として、周辺デバイス２１０は、他のプロセッサコアのメインメモリ２５０へのＤＭＡアクセスを有するプロセッサコアを含んでもよい。周辺デバイス２１０は、（例えば、入力及び／又は命令に基づいて）ＤＭＡ要求を生成してもよく、ＤＭＡ要求をルーティングコントローラ２２０に提供してもよい。
【００１５】
ルーティングコントローラ２２０は、ＤＭＡ要求を受信、処理、ルーティング、及び／又は、提供可能な１つ以上のデバイスを含んでもよい。例えば、ルーティングコントローラ２２０は、周辺デバイス２１０からＤＭＡ要求を受信してもよく、ＤＭＡ要求を分析して、当該ＤＭＡ要求を第１ルート又は第２ルートを介してメモリコントローラ２４０及び／又はメインメモリ２５０にルーティングするか否かを判別してもよい。上述したように、第１ルートはＩＯＭＭＵ２３０を含んでもよく、第２ルートはＩＯＭＭＵ２３０を含まなくてもよい。さらに、又は代替として、第１ルートは、第２ルートよりも多くＤＭＡ要求を処理することを含んでもよい。このため、第１ルートは、第２ルートよりも低速なルートであってもよい。ルーティングコントローラ２２０は、ＤＭＡ要求の分析に基づいて、ＤＭＡ要求をＩＯＭＭＵ２３０又はメモリコントローラ２４０に提供してもよい。いくつかの実施形態では、ルーティングコントローラ２２０は、ＤＭＡ要求に含まれる仮想アドレスから物理アドレスを決定する。さらに、又は代替として、ルーティングコントローラ２２０は、ＤＭＡ要求を他のデバイスに提供して、物理アドレスを決定してもよい。いくつかの実施形態では、周辺デバイス２１０の外部に存在するように示されているが、ルーティングコントローラ２２０は、周辺デバイス２１０内に統合されてもよい。さらに、又は代替として、システム２００は、１つ以上の周辺デバイス２１０に関連付けられたルーティングをそれぞれ制御する複数のルーティングコントローラ２２０を含んでもよい。
【００１６】
ＩＯＭＭＵ２３０は、ＤＭＡ要求を受信、処理、及び／又は、提供可能な１つ以上のデバイスを含んでもよい。例えば、ＩＯＭＭＵ２３０は、ルーティングコントローラ２２０からＤＭＡ要求を受信してもよく、ＤＭＡ要求をメモリコントローラ２４０及び／又はメインメモリ２５０に提供する前に当該ＤＭＡ要求を処理してもよい。ＩＯＭＭＵ２３０は、例えば、仮想アドレスを物理アドレスに変換すること、ＤＭＡ要求で要求されたアクセス及び／又はアクセスタイプを許可するのを検証すること等によって、ＤＭＡ要求を処理してもよい。いくつかの実施形態では、ＩＯＭＭＵ２３０は、第１ルートを介してルーティングされたＤＭＡ要求を処理する（例えば、アドレス変換を実行する）ために、ＤＭＡ要求が第２ルートを介してルーティングされる場合にルーティングコントローラ２２０及び／又は他のデバイスによって用いられた第２アルゴリズムとは異なる第１アルゴリズムを使用する。いくつかの実施形態では、ＩＯＭＭＵ２３０は、周辺機器相互接続（ＰＣＩ）バス、ＰＣＩ  ｅｘｐｒｅｓｓバス等を介して周辺デバイス２１０に電気的に接続される。
【００１７】
メモリコントローラ２４０は、メインメモリ２５０との間で行き来する情報のフローを管理することができ、並びに／又は、メインメモリ２５０からの読み出し及び／若しくはメインメモリ２５０への書き込みが可能な１つ以上のデバイスを含むことができる。例えば、メモリコントローラ２４０は、ＩＯＭＭＵ２３０からのメモリアクセス要求を、周辺デバイス２１０から第１ルートを介して受信してもよいし、ルーティングコントローラ２２０からのメモリアクセス要求を、周辺デバイス２１０から第２ルートを介して受信してもよい。メモリアクセス要求は、メインメモリ２５０の物理アドレスを特定してもよく、物理アドレスに関連して実行される動作（例えば、読み出し動作、書き込み動作等）を特定してもよく、並びに／又は、当該物理アドレスから読み出され及び／若しくは当該物理アドレスに書き込まれる情報（例えば、データ、命令等）を特定してもよい。メモリコントローラ２４０は、メモリアクセス要求に基づいて、メインメモリ２５０から情報を読み出してもよいし、メインメモリ２５０に情報を書き込んでもよい。
【００１８】
メインメモリ２５０は、情報を記憶する１つ以上のデバイスを含んでもよい。例えば、メインメモリ２５０は、ランダムアクセスメモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）等を含んでもよい。メインメモリ２５０は、物理メモリアドレスによって特定された情報を記憶することができる。
【００１９】
システム２００は、本明細書で説明する１つ以上のプロセスを実行してもよい。システム２００は、メインメモリ２５０等のコンピュータ可読媒体に記憶された命令（例えば、ソフトウェア命令）を実行するプロセッサに応じて、これらのプロセスを実行してもよい。コンピュータ可読媒体は、本明細書では、非一時的なメモリデバイスとして定義される。メモリデバイスは、単一の物理的な記憶装置のメモリ空間、又は、複数の物理的な記憶装置間に亘るメモリ空間を含む。
【００２０】
図２に示すデバイスの数は、一例として提供されている。実際には、システム２００は、追加のデバイス、より少ないデバイス、異なるデバイス、又は、図２に示すデバイスとは配置の異なるデバイスを含んでもよい。また、システム２００の１つ以上のデバイスは、システム２００の１つ以上の他のデバイスによって実行されるように、上述した１つ以上の機能を実行してもよい。
【００２１】
図３は、仮想化されたコンピューティング環境においてダイレクトメモリアクセス要求をルーティングする場合に用いられるメモリレジスタを割り当てるための例示的なプロセス３００のフローチャートである。いくつかの実施形態では、図３の１つ以上のプロセスブロックは、ルーティングコントローラ２２０によって実行される。いくつかの実施形態では、図３の１つ以上のプロセスブロックは、周辺デバイス２１０、ＩＯＭＭＵ２３０、メモリコントローラ２４０及び／又はメインメモリ２５０等のような、他のデバイス、又は、ルーティングコントローラ２２０から分離した、若しくはルーティングコントローラ２２０を含むデバイスのグループによって実行される。
【００２２】
図３に示すように、プロセス３００は、メモリアクセス要求に関連するルーティング決定を行うために用いられる仮想アドレスの範囲を定義するベースアドレスレジスタ及び長さレジスタを割り当てること（ブロック３１０）を含んでもよい。例えば、ルーティングコントローラ２２０は、ベースアドレスレジスタ及び長さレジスタを割り当ててもよい。ベースアドレスレジスタは、仮想アドレスの範囲に関連するベースアドレスを特定する情報（例えば、仮想アドレスの範囲の一端を特定するベース仮想アドレス）を記憶してもよく、長さレジスタは、当該範囲の長さ（例えば、当該範囲に含まれる仮想アドレスの量）を特定する情報を記憶してもよい。同時に、ベースアドレス及びアドレスの量は、メモリアクセス要求に関連するルーティング決定を行うために、ルーティングコントローラ２２０によって用いられる仮想アドレスの範囲を定義することができる。
【００２３】
（単純なアドレス値を用いる）一例として、ベースアドレスレジスタがベースアドレスを１，００１として特定すると仮定する。さらに、長さレジスタが５００個の仮想アドレスの量を特定すると仮定する。これらの２つの値に基づいて、ルーティングコントローラ２２０は、１，００１から１，５００までの５００の仮想アドレスの範囲を決定することができる。ルーティングコントローラ２２０は、この範囲に含まれない仮想アドレスを特定するメモリアクセス要求を受信すると、ＩＯＭＭＵ２３０を含む第１ルートを介してメモリアクセス要求をルーティングしてもよい。一方、ルーティングコントローラ２２０は、この範囲に含まれる仮想アドレスを特定するメモリアクセス要求を受信すると、ＩＯＭＭＵ２３０を含まない第２ルートを介してメモリアクセス要求をルーティングしてもよい。
【００２４】
いくつかの実施形態では、仮想アドレスの範囲は、メインメモリ２５０に記憶されたフレームバッファを表す物理アドレスの範囲にマッピングされる。フレームバッファは、ディスプレイデバイス上に提供されるピクセルのカラー値を記憶してもよく、周辺デバイス２１０（例えば、ＧＰＵ）によってアクセスされて、（例えば、ピクセルのカラー値を取得し、カラー値に基づいてピクセルを表示することができるディスプレイデバイスに値を提供することによって）ピクセルを周期的にリフレッシュしてもよい。
【００２５】
さらに図３に示すように、プロセス３００は、仮想アドレスを物理アドレスに変換するために用いられるリロケーションレジスタを割り当てること（ブロック３２０）を含んでもよい。例えば、ルーティングコントローラ２２０は、リロケーションレジスタを割り当ててもよい。リロケーションレジスタは、リロケーション値を特定する情報を記憶してもよい。ルーティングコントローラ２２０は、リロケーション値を用いて、メモリアクセス要求で特定された仮想アドレスをメインメモリ２５０に関連する物理アドレスに変換してもよい。
【００２６】
いくつかの実施形態では、ルーティングコントローラ２２０は、ベースアドレス値、長さ値及び／又はリロケーション値を変更してもよい。例えば、ルーティングコントローラ２２０は、仮想アドレスの範囲及び／又は当該範囲の一部がエラー（例えば、メモリエラー）に関連付けられているという指標を受信してもよい。この場合、ルーティングコントローラ２２０は、（例えば、エラーが仮想メモリに関連付けられている場合等に）ベースアドレス及び／又は長さを変更してもよい。さらに、又は代替として、ルーティングコントローラ２２０は、（例えば、エラーが物理メモリに関連付けられている場合に）リロケーション値を変更してもよい。ルーティングコントローラ２２０は、変更を他のデバイス（例えば、周辺デバイス２１０、ＩＯＭＭＵ２３０等）に通知してもよい。
【００２７】
ベースアドレスレジスタ、長さレジスタ及びリロケーションレジスタを含むレジスタセット（例えば、トリプレット）は、メモリアクセス要求に関連するルーティング決定を行う場合にルーティングコントローラ２２０をサポートするために共に動作してもよい。いくつかの実施形態では、ルーティングコントローラ２２０は、（例えば、０セットのレジスタ、４セットのレジスタ、８セットのレジスタ等の）複数のセットのレジスタを割り当てる。この場合、（例えば、特定の周辺デバイス２１０、周辺デバイス２１０のセット、全ての周辺デバイス２１０等の）ルーティング決定を有効又は無効にするために、複数のセットのグループ全体が（例えば、ＩＯＭＭＵ２３０に関連するルーティングコントロールフィールドを用いて）有効又は無効にされてもよい。
【００２８】
さらに、又は代替として、特定のレジスタセットは、ブロック３３０に関連して本明細書で説明するように、（例えば、１つ以上の周辺デバイス２１０の）ルーティング決定を行う場合に特定のレジスタセットの使用を有効又は無効にするために、イネーブルフィールドを用いて有効又は無効にされてもよい。さらに、又は代替として、ルーティングコントローラ２２０は、ブロック３４０に関連して本明細書で説明するように、アクセスコントロールフィールドを用いて、特定のレジスタセット及び／又は特定の周辺デバイス２１０のセットについてのアクセスコントロールを設定してもよい。
【００２９】
ルーティングコントローラ２２０は、ベースアドレスレジスタ、長さレジスタ及びリロケーションレジスタ（例えば、レジスタセット）間の関係の指標を記憶してもよい。例えば、ルーティングコントローラ２２０は、レジスタセットセット内の各レジスタを、（例えば、メモリマップされた入出力（ＭＭＩＯ）アドレスページ内の）隣接するメモリアドレスに記憶してもよい。
【００３０】
さらに図３に示すように、プロセス３００は、異なるルートを介してメモリアクセス要求のルーティングを有効又は無効にするためにイネーブルフィールドを割り当てること（ブロック３３０）を含んでもよい。例えば、ルーティングコントローラ２２０は、イネーブルフィールドを割り当ててもよい。いくつかの実施形態では、イネーブルフィールドは、リロケーションレジスタに含まれる。ルーティングコントローラ２２０は、イネーブルフィールドを用いて、メモリアクセス要求のルーティング決定を行う（例えば、複数のルートのうち１つのルートを選択する）か否か、単一のルートを介してメモリアクセス要求を転送するか否かを判別してもよい。例えば、イネーブルフィールドがルーティング無効であることを示す場合、ルーティングコントローラ２２０は、ＩＯＭＭＵ２３０を含む第１ルートを介してメモリアクセス要求を転送してもよい。一方、イネーブルフィールドがルーティング有効であることを示す場合、ルーティングコントローラ２２０は、メモリアクセス要求を分析して、第１ルート又はＩＯＭＭＵ２３０を含まない第２ルートを介してメモリアクセス要求をルーティングするか否かを判別してもよい。
【００３１】
いくつかの実施形態では、ルーティングコントローラ２２０は、複数の周辺デバイス２１０のルーティングを制御する。この場合、ルーティングコントローラ２２０は、ルーティング決定に関連する周辺デバイス２１０を示すイネーブルフィールドのセットを割り当ててもよい。例えば、ルーティングコントローラ２２０は、周辺デバイス２１０の第１セットから受信したメモリアクセス要求のルーティング決定を行ってもよく、周辺デバイス２１０の第２セットから受信したメモリアクセス要求のルーティング決定を行わなくてもよい（例えば、周辺デバイス２１０の第２セットから受信した要求をＩＯＭＭＵ２３０に転送してもよい）。ルーティングコントローラ２２０は、イネーブルフィールドのセットに記憶された情報に基づいて、特定の周辺デバイス２１０から受信したメモリアクセス要求のルーティング決定を行うか否かを判別してもよい。
【００３２】
さらに図３に示すように、プロセス３００は、要求されたアクセスタイプを許可又は拒否するためにアクセスコントロールフィールドを割り当てること（ブロック３４０）を含んでもよい。例えば、ルーティングコントローラ２２０は、アクセスコントロールフィールドを割り当ててもよい。いくつかの実施形態では、アクセスコントロールフィールドは、リロケーションレジスタに含まれてもよい。ルーティングコントローラ２２０は、アクセスコントロールフィールドを用いて、メモリアクセス要求によって特定される、要求されたアクセスタイプ（例えば、読み出しアクセス、書き込みアクセス、アクセス不可等）を許可又は拒否するかどうかを判別してもよい。
【００３３】
いくつかの実施形態では、ルーティングコントローラ２２０は、複数の周辺デバイス２１０のルーティングを制御する。この場合、ルーティングコントローラ２２０は、周辺デバイス２１０のセットに関連するアクセスタイプを許可又は拒否するかどうかを示すアクセスコントロールフィールドのセットを割り当ててもよい。例えば、ルーティングコントローラ２２０は、周辺デバイス２１０の第１セットから受信したメモリアクセス要求に対して第１アクセスタイプ（例えば、読み出しアクセス）を適用し、周辺デバイス２１０の第２セットから受信したメモリアクセス要求に対して第２アクセスタイプ（例えば、読み出し／書き込みアクセス）を適用してもよい。ルーティングコントローラ２２０は、アクセスコントロールフィールドのセットに記憶された情報に基づいて、特定の周辺デバイス２１０から受信したメモリアクセス要求に適用されるアクセスタイプを判別してもよい。
【００３４】
さらに図３に示すように、プロセス３００は、割り当てられたレジスタを検証すること（ブロック３５０）を含んでもよい。例えば、ルーティングコントローラ２２０は、ベースアドレスレジスタ、長さレジスタ及び／又はリロケーションレジスタを検証してもよい。いくつかの実施形態では、ルーティングコントローラ２２０は、（例えば、ＩＯＭＭＵ２３０を含む、及び／又は、ページテーブルを用いてアドレス変換を実行する）第１ルートを介してルーティングされる場合、並びに、（例えば、ＩＯＭＭＵ２３０を含まない、及び／又は、メモリリロケーションアルゴリズムを用いてアドレス変換を実行する）第２ルートを介してルーティングされる場合に、特定の仮想アドレスが同一の物理アドレスに変換されるのを確実にすることによって、割り当てられたレジスタを検証する。
【００３５】
いくつかの実施形態では、ルーティングコントローラ２２０は、仮想アドレスの複数の範囲を設定するプロセス３００を繰り返す。異なる範囲は、異なるベースアドレス値、異なる長さの値、異なるリロケーション値等に関連してもよい。いくつかの実施形態では、ルーティングコントローラ２２０は、異なる範囲に対して、（例えば、同一のリロケーションレジスタに記憶された）同一のリロケーション値を用いる。さらに、又は代替として、ルーティングコントローラ２２０は、異なる範囲に対して同一のイネーブルフィールド及び／又はアクセスコントロールフィールドを用いてもよいし、異なる範囲に対して異なるイネーブルフィールド及び／又はアクセスコントロールフィールドを用いてもよい。このようにして、ルーティングコントローラ２２０は、メモリアクセス要求（例えば、仮想化されたコンピューティング環境におけるグラフィックス処理に関連するメモリアクセス要求）のより高速なルーティングのために、物理メモリの非連続範囲を設定してもよい。
【００３６】
ルーティングコントローラ２２０が仮想アドレスの複数の範囲を割り当てる場合、ルーティングコントローラ２２０は、レジスタによって特定される複数の仮想アドレス範囲が重複しないことを確実にすることによって、割り当てられたレジスタを検証してもよい。例えば、ルーティングコントローラ２２０は、複数のベースアドレスレジスタ及び各々の長さレジスタを用いて、複数の仮想アドレス範囲を定義してもよい。ルーティングコントローラ２２０は、特定の仮想アドレスが複数の範囲に含まれるか否かを判別することによって、複数の範囲が重複しないことを確実にしてもよい。複数の範囲が重複しているとルーティングコントローラ２２０が判別した場合には、ルーティングコントローラ２２０は、エラー通知を提供し、及び／又は、これらの範囲が重複しないように１つ以上のレジスタを再割り当てしてもよい。
【００３７】
図３はプロセス３００の例示的なブロックを示しているが、いくつかの実施形態では、プロセス３００は、図３に示されたブロックの追加ブロック、より少ないブロック、異なるブロック、異なる配置のブロックを含んでもよい。さらに、又は代替として、プロセス３００のブロックのうち２つ以上のブロックは、並行して実行されてもよい。
【００３８】
図４Ａ及び図４Ｂは、図３に示す例示的なプロセス３００に関する例示的な実施形態４００を示す図である。図４Ａ及び図４Ｂは、仮想化されたコンピューティング環境においてダイレクトメモリアクセス要求をルーティングする場合に用いられるメモリレジスタを割り当てる例を示している。
【００３９】
図４Ａに示すように、ルーティングコントローラ２２０がベースアドレスレジスタ４０５を割り当てると仮定する。図示するように、ベースアドレスレジスタ４０５が６４ビットレジスタ（例えば、ビット０〜６３）を含むと仮定する。さらに、ビット０〜１１及び５２〜６３が予約されていると仮定する。いくつかの実施形態では、予約されたビットは、デバッグ目的で用いられる。最後に、ビット１２〜５１（例えば、合計４０ビット）を用いて、２００の値を有するベースアドレスを特定すると仮定する。
【００４０】
さらに図４Ａに示すように、ルーティングコントローラ２２０が長さレジスタ４１０を割り当てると仮定する。図示するように、長さレジスタ４１０が６４ビットレジスタ（例えば、ビット０〜６３）を含むと仮定する。さらに、ビット０〜１１及び５２〜６３が予約されていると仮定する。最後に、ビット１２〜５１（例えば、合計４０ビット）を用いて、５００の値の長さを特定すると仮定する。
【００４１】
さらに図４Ａに示すように、ベースアドレスレジスタ４０５及び長さレジスタ４１０に記憶された値が、ＩＯＭＭＵ２３０を含まないルートを介してルーティングされる仮想アドレス空間４１５内の仮想アドレスの範囲を定義すると仮定する。符号４２０で示すように、ベースアドレスは、仮想アドレスの範囲の開始を特定する。仮想アドレスの範囲は、２００の仮想アドレスで開始する。符号４２５で示すように、長さは、その範囲に含まれる仮想アドレスの数を特定する。この場合、符号４３０で示すように、２００〜６９９の仮想アドレス範囲に５００個の仮想アドレスが含まれる。
【００４２】
いくつかの実施形態では、仮想アドレス空間４１５は、メインメモリ２５０に記憶されたフレームバッファに対応する仮想アドレスの範囲を表す。フレームバッファは、ディスプレイデバイスのピクセルのカラー値を記憶してもよく、ピクセルを周期的にリフレッシュするＧＰＵによってアクセスされてもよい。フレームバッファに関連するメモリアクセス要求を、ＩＯＭＭＵ２３０を含まないより高速なルートを介してルーティングすることによって、ルーティングコントローラ２２０は、ＩＯＭＭＵ２３０を含むより低速なルートを介してメモリアクセス要求をルーティングする場合と比較して、より迅速にディスプレイリフレッシュを実行することができる。
【００４３】
図４Ｂに示すように、ルーティングコントローラ２２０がリロケーションレジスタ４３５を割り当てると仮定する。図示するように、リロケーションレジスタ４３５が６４ビットレジスタ（例えば、ビット０〜６３）を含むと仮定する。さらに、ビット２〜１１及び５２〜６３が予約されていると仮定する。符号４４０で示すように、ビット１２〜５１（例えば、合計４０ビット）を用いて、値が４００のリロケーション値を特定すると仮定する。符号４４５で示すように、ルーティングコントローラ２２０がメモリアクセス要求のルーティング決定を行うか否かを示すイネーブルビットとして、ビット０を用いると仮定する。符号４５０で示すように、メモリアクセス要求（例えば、読み出しアクセス、書き込みアクセス、読み出し及び書き込みアクセス等）について許可されたアクセスタイプを特定するアクセスコントロールビットとして、ビット１を用いると仮定する。
【００４４】
上述したように、図４Ａ及び図４Ｂは単なる一例である。他の例も可能であり、図４Ａ及び図４Ｂに関して説明したものとは異なっていてもよい。
【００４５】
図５は、仮想化されたコンピューティング環境においてダイレクトメモリアクセス要求をルーティングするための例示的なプロセス５００のフローチャートである。いくつかの実施形態では、図５の１つ以上のプロセスブロックは、ルーティングコントローラ２２０によって実行される。いくつかの実施形態では、図５の１つ以上のプロセスブロックは、周辺デバイス２１０、ＩＯＭＭＵ２３０、メモリコントローラ２４０及び／又はメインメモリ２５０等のような、他のデバイス、又は、ルーティングコントローラ２２０から分離した、若しくはルーティングコントローラ２２０を含むデバイスのグループによって実行される。
【００４６】
図５に示すように、プロセス５００は、仮想アドレスを特定するメモリアクセス要求を周辺デバイスから受信すること（ブロック５１０）を含んでもよい。例えば、ルーティングコントローラ２２０は、メモリアクセス要求を周辺デバイス２１０から受信してもよい。メモリアクセス要求は、いくつかの実施形態において、ダイレクトメモリアクセス要求を含む。さらに、又は代替として、メモリアクセス要求は、周辺デバイス２１０に関連するゲスト物理アドレス等の仮想アドレスを特定してもよい。
【００４７】
いくつかの実施形態では、メモリアクセス要求は、メモリアクセス要求に関連するアクセスタイプを特定する。例えば、メモリアクセス要求は、メインメモリ２５０から情報を読み出す要求、メインメモリ２５０に情報を書き込む要求等を含んでもよい。さらに、又は代替として、メモリアクセス要求は、メインメモリ２５０から読み出される情報、及び／又は、メインメモリ２５０に書き込まれる情報を特定してもよい。
【００４８】
さらに図５に示すように、プロセス５００は、ルーティングが有効であるか否かを判別すること（ブロック５２０）を含んでもよい。例えば、ルーティングコントローラ２２０は、（例えば、リロケーションレジスタに含まれる）イネーブルビットを読み出すことによって、ルーティングが有効であるか否かを判別してもよい。イネーブルビットの値は、ルーティングが、（例えば、イネーブルビットが例えば１という第１値を含む場合）有効であり、（例えば、イネーブルビットが例えば０という第２値を含む場合）無効であるという指標を提供してもよい。
【００４９】
ルーティングが有効でない場合（ブロック５２０：いいえ）、プロセス５００は、メモリアクセス要求を、第１ルートを介してメインメモリにルーティングすること（ブロック５３０）を含んでもよい。例えば、ルーティングコントローラ２２０は、ルーティングが有効でないと判別した場合に（例えば、イネーブルビットが、ルーティングが有効でないことを示す場合に）、メモリアクセス要求を、第１ルートを介してメモリコントローラ２４０及び／又はメインメモリ２５０にルーティングしてもよい。
【００５０】
いくつかの実施形態では、メモリコントローラ２４０及び／又はメインメモリ２５０への第１ルートはＩＯＭＭＵ２３０を含み、メモリコントローラ２４０及び／又はメインメモリ２５０への第２ルートはＩＯＭＭＵ２３０を含まない。さらに、又は代替として、第１ルートは、第２ルートよりも（例えば、ＩＯＭＭＵ２３０による）メモリアクセス要求のさらなる処理を含んでもよい。さらに、又は代替として、第１ルートは、第２ルートと比べて、メモリコントローラ２４０及び／又はメインメモリ２５０に対するより高いレイテンシ（例えば、より高い平均レイテンシ）を有してもよい。
【００５１】
さらに、又は代替として、第１ルートを介してルーティングされたメモリアクセス要求は、第２ルートを介してルーティングされたメモリアクセス要求に関連して使用されたアルゴリズムとは異なるアルゴリズムを介してアドレス変換されてもよい。例えば、第１ルートにおけるアドレス変換は、１つ以上のページテーブルを用いて、仮想アドレスを物理アドレスに変換してもよい。いくつかの実施形態では、第１ルートは、複数のページテーブルを用いてアドレス変換を実行する。逆に、第２ルートにおけるアドレス変換は、何れのページテーブルも用いないことがある。むしろ、第２ルートにおけるアドレス変換は、別の値（例えば、仮想アドレス値、仮想アドレス値とベースアドレス値とに基づいて判別されたオフセット値等）に値を加えることによって、又は、当該別の値から値を引くことによって物理アドレスを判別する、メモリリロケーションアルゴリズムを用いてもよい。このようにして、第２ルートにおけるアドレス変換は、（例えば、メモリリロケーションが、ページテーブルを用いるよりも高速であるため）第１ルートにおけるアドレス変換よりも高速となり得る。
【００５２】
ルーティングが有効である場合（ブロック５２０：はい）、プロセス５００は、仮想アドレス及びベースアドレスを比較することによってオフセット値を計算すること（ブロック５４０）を含んでもよい。例えば、ルーティングコントローラ２２０は、ルーティングが有効であると判別した場合に（例えば、イネーブルビットが、ルーティングが有効であることを示す場合に）、メモリアクセス要求で特定された仮想アドレスとベースアドレスとを比較することによって、オフセット値を計算してもよい。
【００５３】
いくつかの実施形態では、ルーティングコントローラ２２０は、仮想アドレスとベースアドレスとの差としてオフセット値を計算する。例えば、ルーティングコントローラ２２０は、仮想アドレス（例えば、仮想アドレスを表す値）からベースアドレス（例えば、ベースアドレスを表す値）を減算して、オフセット値を計算してもよい。一例として、ベースアドレス値が１，０００であり、仮想アドレス値が１，３００であると仮定すると、ルーティングコントローラ２２０は、３００（１，３００−１，０００＝３００）というオフセット値を計算してもよい。
【００５４】
さらに図５に示すように、プロセス５００は、仮想アドレスが、メモリアクセス要求のルーティングに関連する仮想アドレスの範囲内に存在するか否かを判別すること（ブロック５５０）を含んでもよい。例えば、ルーティングコントローラ２２０は、仮想アドレスが、図３に関連して本明細書で説明したように決定された範囲内に存在するか否かを判別してもよい。いくつかの実施形態では、ルーティングコントローラ２２０は、仮想アドレスが、オフセット値に基づく範囲内に存在するか否かを判別する。例えば、ルーティングコントローラ２２０は、オフセット値を第１閾値（例えば、０）及び／又は第２閾値（例えば、長さレジスタで特定される長さ値）と比較して、仮想アドレスが当該範囲内に存在するか否かを判別することができる。
【００５５】
ルーティングコントローラ２２０は、いくつかの実施形態において、メモリアクセス要求に適用する、割り当てられたレジスタのセットを判別する。例えば、複数のレジスタセットが割り当てられてもよく、ルーティングコントローラ２２０は、メモリアクセス要求に適用するレジスタセットを選択してもよい。さらに、又は代替として、ルーティングコントローラ２２０は、メモリアクセス要求で特定される仮想アドレスが特定のレジスタセットに関連する仮想アドレスの範囲内に存在すると判別されるまで、複数のレジスタセットをメモリアクセス要求に適用してもよい。この場合、ルーティングコントローラ２２０は、特定のレジスタセットをメモリアクセス要求に適用してもよい。仮想アドレスが何れの範囲内に存在しない場合に、ルーティングコントローラ２２０は、第１ルートを介してメモリアクセス要求をルーティングしてもよい。
【００５６】
いくつかの実施形態では、仮想アドレスの第１範囲は、仮想アドレスの第２範囲と重複する。この場合、ルーティングコントローラ２２０は、これらの範囲のうち１つの範囲を選択し、選択された範囲に関連するレジスタセットをメモリアクセス要求に適用してもよい。
【００５７】
仮想アドレスが範囲内に存在しない場合（ブロック５５０：いいえ）、プロセス５００は、メモリアクセス要求を、第１ルートを介してメインメモリにルーティングすること（ブロック５３０）を含んでもよい。例えば、ルーティングコントローラ２２０は、仮想アドレスが範囲内に存在しないと判別した場合、ブロック５３０に関連して本明細書で説明したように、メモリアクセス要求を、第１ルートを介してメモリコントローラ２４０及び／又はメインメモリ２５０にルーティングしてもよい。
【００５８】
いくつかの実施形態では、ルーティングコントローラ２２０は、オフセット値が第１閾値又は第２閾値を満たす場合に、仮想アドレスが範囲内に存在しないと判別する。第１閾値は０と等しくてもよく、第２閾値は長さ値に対応してもよい。例えば、ルーティングコントローラ２２０は、オフセット値が０よりも小さい場合に、仮想アドレスが範囲内に存在しないと判別してもよい。例えば、ルーティングコントローラ２２０が、９００という仮想アドレスを特定するメモリアクセス要求を受信すると仮定する。さらに、ベースアドレス値が１，０００であると仮定する。この例において、オフセット値は、−１００（９００−１，０００＝−１００）である。−１００は０より小さいため、このオフセット値は、（例えば、範囲が１，０００で開始するため）９００という仮想アドレスが範囲外であることを示す。
【００５９】
さらに、又は代替として、ルーティングコントローラ２２０は、オフセット値が長さ値以上である場合、仮想アドレスが範囲内に存在しないと判別してもよい。例えば、オフセット値が３００であり、長さ値が２００であると仮定する。オフセット値が長さ値よりも大きいため、ルーティングコントローラ２２０は、仮想アドレスが範囲内に存在しないと判別して、第１ルートを介してメモリアクセス要求をルーティングする。この例では、１，０００というベースアドレス値は、範囲の開始アドレス１，０００を示し、２００という長さ値は、（例えば、１，０００〜１，１９９まで２００の値がある）範囲の終了値１，１９９を示す。オフセット値３００（１，３００−１，０００）を生成した１，３００という仮想アドレスは、範囲外にある。同様に、長さ値に等しいオフセット値２００を生成する１，２００という仮想アドレスは、範囲外にある。
【００６０】
このようにして、ルーティングコントローラ２２０は、オフセット値が０未満である場合、又は、オフセット値が長さ値以上である場合に、仮想アドレスが範囲内に存在しないと判別することができる。ルーティングコントローラ２２０は、オフセット値を用いて仮想アドレスが範囲内に存在するか否かを判別することによって、仮想アドレスを範囲の終了値と直接比較することに対して、仮想アドレスが範囲内に存在するか否かを判別するのに必要な計算資源の量を低減することができる。
【００６１】
仮想アドレスが範囲内に存在する場合（ブロック５５０：はい）、プロセス５００は、要求されたアクセスタイプが許可されているか否かを判別する（ブロック５６０）ことを含んでもよい。例えば、ルーティングコントローラ２２０は、仮想アドレスが範囲内に存在すると判別した場合に、メモリアクセス要求で特定されたアクセスタイプが許可されているか否かを判別してもよい。
【００６２】
いくつかの実施形態では、ルーティングコントローラ２２０は、オフセット値が第１閾値及び第２閾値を満たす場合に、仮想アドレスが範囲内に存在すると判別する。第１閾値は０であってもよく、第２閾値は長さ値に対応してもよい。例えば、ルーティングコントローラ２２０は、オフセット値が０以上である場合、及び、オフセット値が長さ値よりも小さい場合に、仮想アドレスが範囲内に存在する判別してもよい。例えば、ルーティングコントローラ２２０が、１，３００という仮想アドレスを特定するメモリアクセス要求を受信すると仮定する。また、ベースアドレス値が１，０００であると仮定する。この例では、オフセット値は３００（１，３００−１，０００＝３００）である。３００は０より大きいため、このオフセット値は、１，３００という仮想アドレスが（例えば、長さ値に依拠する）範囲内に存在することを示す。
【００６３】
オフセット値が３００である上記の例を続けると、長さ値が５００であると仮定する。オフセット値が長さ値よりも小さいので、ルーティングコントローラ２２０は、仮想アドレスが範囲内に存在すると判別する。この例では、ベースアドレス値１，０００は、範囲の開始アドレスを１，０００と特定し、長さ値５００は、（例えば、１，０００〜１，４９９までに５００の値がある）範囲について１，４９９という終了値を特定する。オフセット値３００（１，３００−１，０００）を生成した１，３００という仮想アドレスは、この範囲内に存在する。
【００６４】
ルーティングコントローラ２２０は、いくつかの実施形態では、要求されたアクセスタイプが許可されるか否かを、（例えば、リロケーションレジスタに含まれる）アクセスコントロールビットを読み出すことによって判別する。アクセスコントロールビットの値は、特定のアクセスタイプ（例えば、読み出しアクセス、書き込みアクセス等）を許可又は拒否するか否かの指標を提供してもよい。
【００６５】
要求されたアクセスタイプが許可されていない場合（ブロック５６０：いいえ）、プロセス５００は、メモリアクセス要求を、第１ルートを介してメインメモリにルーティングすること（ブロック５３０）を含んでもよい。例えば、ルーティングコントローラ２２０は、（例えば、アクセスコントロールビットの読み出しに基づいて）要求されたアクセスタイプが許可されていないと判別した場合に、ブロック５３０に関連して本明細書で説明したように、メモリアクセス要求を、第１ルートを介してメモリコントローラ２４０及び／又はメインメモリ２５０にルーティングしてもよい。さらに、又は代替として、ルーティングコントローラ２２０は、要求されたアクセスタイプが許可されていない場合に、エラー表示を提供してもよい。
【００６６】
一例として、特定の仮想アドレスを特定するメモリアクセス要求が、メインメモリ２５０に書き込む要求を含むと仮定する。さらに、アクセスコントロールビットが、特定の仮想アドレス又は当該特定の仮想アドレスに関連する物理アドレスが読み出し専用であることを示すと仮定する。この場合、ルーティングコントローラ２２０は、メモリアクセス要求を、第１ルートを介して（例えば、ＩＯＭＭＵ２３０を含む）メインメモリ２５０に向けてルーティングする。ＩＯＭＭＵ２３０は、アクセスを拒否してもよいし、エラーを提供する等してもよい。
【００６７】
要求されたアクセスタイプが許可された場合（ブロック５６０：はい）、プロセス５００は、オフセット値及びリロケーション値を組み合わせることによって、仮想アドレスに対応する物理アドレスを判別すること（ブロック５７０）を含んでもよい。例えば、ルーティングコントローラ２２０は、（例えば、アクセスコントロールビットを読み出すことに基づいて、）要求されたアクセスタイプを許可すると判別した場合に、オフセット値と、リロケーションレジスタで特定されたリロケーション値と、を組み合わせて、仮想アドレスに対応する物理アドレス判別してもよい。
【００６８】
一例として、メモリアクセス要求は、読み出し要求を含んでもよく、アクセスコントロールビットは、読み出し要求が許可されることを示してもよい。さらに、又は代替として、メモリアクセス要求は、書き込み要求を含んでもよく、アクセスコントロールビットは、書き込み要求が許可されることを示してもよい。これらの場合、ルーティングコントローラ２２０は、仮想アドレスと、リロケーションレジスタで特定されたリロケーション値とに基づいて、仮想アドレスに対応する物理アドレスを計算してもよい。
【００６９】
いくつかの実施形態では、ルーティングコントローラ２２０は、オフセット値及びリロケーション値を（例えば、加算、減算等で）組み合わせることによって、物理アドレスを判別する。たとえば、本明細書の他の箇所で説明したように、ルーティングコントローラ２２０は、３００というオフセット値を判別したと仮定する。さらに、ルーティングコントローラ２２０は、リロケーションレジスタにおいて４００というリロケーション値を特定すると仮定する。ルーティングコントローラ２２０は、これらの値を加算して、７００（３００＋４００＝７００）という物理アドレス値を判別し得る。
【００７０】
さらに図５に示すように、プロセス５００は、物理アドレスを含むメモリアクセス要求を、第２ルートを介してメインメモリにルーティングすること（ブロック５８０）を含んでもよい。例えば、ルーティングコントローラ２２０は、メモリアクセス要求を、メインメモリ２５０に関連する判別された物理アドレスに向けてルーティングしてもよい。いくつかの実施形態では、ルーティングコントローラ２２０は、メモリアクセス要求を、第２ルートを介してメインメモリ２５０にルーティングする。
【００７１】
本明細書の他の箇所で説明したように、メモリコントローラ２４０及び／又はメインメモリ２５０への第２ルートは、ＩＯＭＭＵ２３０を含まなくてもよい。さらに、又は代替として、第２ルートは、第１ルートよりも少ないメモリアクセス要求の処理を必要としてもよい。さらに、又は代替として、第２ルートは、第１ルートと比べて、メモリコントローラ２４０及び／又はメインメモリ２５０への小さいレイテンシ（例えば、より小さい平均レイテンシ）を有してもよい。さらに、又は代替として、第２ルートを介してルーティングされたメモリアクセス要求は、第１ルートを介してルーティングされたメモリアクセス要求に関連して用いられたアルゴリズムとは異なるアルゴリズムを介して、アドレス変換されてもよい。さらに、又は代替として、第２ルートは、１つ以上の予測アルゴリズム（例えば、バッファリング、ルックアヘッド等）を用いて、第１ルートに比べて性能を向上させることができる。さらに、又は代替として、第１ルートは、メモリアクセス要求に基づいて、１セットの動作を実行させてもよく、第２ルートは、メモリアクセス要求に基づいて、当該１セットの動作のサブセットを実行させてもよい。
【００７２】
メインメモリ２５０へメモリアクセス要求をルーティングすることは、メモリアクセス要求で特定された仮想アドレスに対応する物理アドレスから情報を読み出させ、及び／又は、当該物理アドレスに情報を書き込ませてもよい。いくつかの実施形態では、ルーティングコントローラ２２０及び／又はメモリコントローラ２４０は、複数の周辺デバイス２１０と中央処理装置との間、及び／又は、１つの周辺デバイス２１０と中央処理装置との間のキャッシュコヒーレンシを提供する。例えば、メモリコントローラ２４０は、第２デバイスがメインメモリ２５０の特定の物理アドレスに書き込んだ指標を、第１デバイスのキャッシュコントローラに提供してもよい。キャッシュコントローラは、第１デバイスに関連するキャッシュを変更して、キャッシュコヒーレンシを確保してもよい。例えば、キャッシュコントローラは、特定の物理アドレスに関連する、キャッシュされた書き込み動作を無効としてマークしてもよいし、特定の物理アドレスに関連する、キャッシュされた読み出し動作をフラッシュしてもよい。
【００７３】
このようにして、ルーティングコントローラ２２０は、フレームバッファ等の特定のメモリリソースに関連するメモリアクセス要求を高速化する方法を提供することができる。また、ルーティングコントローラ２２０は、非仮想化コンピューティング環境に近いレベルで実行しながら、仮想化されたコンピューティング環境においてグラフィックスプロセッシングユニット等の周辺デバイスが動作するのを可能にすることができる。
【００７４】
図５は、プロセス５００の例示的なブロックを示しているが、いくつかの実施形態では、プロセス５００は、図５で示されたものに対して追加のブロック、より少ないブロック、異なるブロック、又は、これらと異なる配置のブロックを含む。さらに、又は代替として、プロセス５００のブロックのうち２つ以上のブロックは、並行して実行されてもよい。
【００７５】
図６Ａ〜図６Ｅは、図５に示す例示的なプロセス５００に関する例示的な実施形態６００を示す図である。図６Ａ〜図６Ｅは、ＩＯＭＭＵ２３０を含む第１ルートを介してメモリアクセス要求をルーティングする様々なルーティング決定の例を示している。
【００７６】
図６Ａにおいて符号６０５で示すように、ＧＰＵ２１０は、メモリアクセス要求をルーティングコントローラ２２０に提供すると仮定する。図示するように、メモリアクセス要求は、１００という仮想アドレスを特定し、書き込みのアクセスタイプを特定し、１００という仮想アドレスに対応する物理メモリアドレスに書き込まれるいくつかの情報を特定すると仮定する。ルーティングコントローラ２２０は、要求を受信し、リロケーションレジスタ４３５に記憶されたイネーブルビットの値を判別すると仮定する。符号６１０で示すように、イネーブルビットは、メモリアクセス要求を第２ルート（例えば、ＩＯＭＭＵ２３０を含まないルート）を介してメインメモリ２５０にルーティングすることが無効であることを示す０の値を記憶していると仮定する。このようにして、符号６１５で示すように、ルーティングコントローラ２２０は、メモリアクセスを、ＩＯＭＭＵ２３０を含む第１ルートを介してメモリコントローラ２４０にルーティングする。
【００７７】
図６Ｂの目的のために、ルーティングコントローラ２２０がＧＰＵ２１０から同一のメモリアクセス要求を受信すると仮定する。しかしながら、この場合、ルーティングコントローラ２２０が、第２ルートを介するルーティングが有効であると判別する（例えば、イネーブルビットが１という値を記憶していると判別する）と仮定する。符号６２０で示すように、ルーティングコントローラ２２０が、ベースアドレスレジスタ４０５に記憶された２００というベースアドレス値を判別すると仮定する。符号６２５で示すように、ルーティングコントローラ２２０は、１００という仮想アドレス値から２００というベースアドレス値を減算し、−１００（１００−２００＝−１００）というオフセット値を生成する。符号６３０で示すように、ルーティングコントローラ２２０は、オフセット値が０未満であると判別するため、１００という仮想アドレスは、第２ルートを介するルーティングに関連する仮想アドレスの範囲外に存在する。このようにして、符号６３５に示すように、ルーティングコントローラ２２０は、メモリアクセスを、ＩＯＭＭＵ２３０を含む第１ルートを介してメモリコントローラ２４０にルーティングする。
【００７８】
図６Ｃにおいて符号６４０で示すように、ＧＰＵ２１０が、他のメモリアクセス要求をルーティングコントローラ２２０に提供すると仮定する。図示するように、メモリアクセス要求は、８００という仮想アドレスを特定し、書き込みというアクセスタイプを特定し、８００という仮想アドレスに対応する物理メモリアドレスに書き込まれるいくつかの情報を特定すると仮定する。図６Ｃの目的のために、第２ルートを介するルーティングが有効であり、（例えば、図６Ｂに示すように、）ベースアドレス値が２００であると仮定する。
【００７９】
符号６４５で示すように、ルーティングコントローラ２２０が、８００という仮想アドレス値から２００というベースアドレス値を減算し、６００（８００−２００＝６００）というオフセット値を生成すると仮定する。オフセット値が０よりも大きいので、ルーティングコントローラ２２０は、オフセット値を、長さレジスタ４１０に記憶された長さ値と比較することを決定する。符号６５０で示すように、ルーティングコントローラ２２０は、長さレジスタ４１０に記憶された５００という長さ値を判別すると仮定する。符号６５５で示すように、ルーティングコントローラ２２０は、オフセット値と長さ値とを比較し、オフセット値が長さ値より大きいと判別し、これにより、８００という仮想アドレスが、第２ルートを介してルーティングされる仮想アドレスの範囲内に存在しないと判別する。結果として、ルーティングコントローラ２２０は、符号６６０で示すように、メモリアクセスを、ＩＯＭＭＵ２３０を含む第１ルートを介してメモリコントローラ２４０にルーティングする。
【００８０】
図６Ｄにおいて符号６６５で示すように、ＧＰＵ２１０が他のメモリアクセス要求をルーティングコントローラ２２０に提供すると仮定する。図示するように、メモリアクセス要求が、６００という仮想アドレスを特定し、書き込みというアクセスタイプを特定し、６００という仮想アドレスに対応する物理メモリアドレスに書き込まれるいくつかの情報を特定すると仮定する。図６Ｄの目的のために、第２ルートを介するルーティングが有効であり、ベースアドレス値が２００であり、長さ値が５００であると仮定する。
【００８１】
符号６７０で示すように、ルーティングコントローラ２２０は、６００という仮想アドレス値から２００というベースアドレス値を減算して、４００（６００−２００＝４００）というオフセット値を計算する。符号６７５で示すように、ルーティングコントローラ２２０は、４００というオフセット値が５００という長さ値よりも小さいと判別する。この判別に基づき、ルーティングコントローラ２２０は、６００という仮想アドレスが、第２ルートを介するルーティングに関連する仮想アドレスの範囲内に存在すると判別する。
【００８２】
図６Ｅでは、図６Ｄに示す例を続けて、ルーティングコントローラ２２０が受信したメモリアクセス要求で特定される６００という仮想アドレスが、第２ルートを介するルーティングに関連する仮想アドレスの範囲内に存在すると仮定する。図６Ｅにおいて符号６８０で示すように、ルーティングコントローラ２２０は、リロケーションレジスタ４３５に記憶されたアクセスコントロールビットが、読み出し専用アクセスコントロールが有効であることを示す１という値を記憶している、と判別すると仮定する。メモリアクセス要求が、書き込み動作を特定すると仮定する。結果として、符号６８５で示すように、ルーティングコントローラ２２０は、メモリアクセスを、ＩＯＭＭＵ２３０を含む第１ルートを介してメモリコントローラ２４０にルーティングする。しかしながら、メモリアクセス要求が読み出し動作を特定した場合には、ルーティングコントローラ２２０は、６００という仮想アドレスに対応する物理アドレスを判別して、メモリアクセス要求を、第２ルート（例えば、ＩＯＭＭＵ２３０を含まないルート）を介してメモリコントローラ２４０にルーティングする。
【００８３】
上述したように、図６Ａ〜図６Ｅは単なる一例である。他の例も可能であり、図６Ａ〜図６Ｅに関して説明したものとは異なっていてもよい。
【００８４】
図７Ａ及び図７Ｂは、図５に示す例示的なプロセス５００に関する他の例示的な実施形態７００を示す図である。図７Ａ及び図７Ｂは、ＩＯＭＭＵ２３０を含まない第２ルートを介してメモリアクセス要求をルーティングするルーティング決定の一例を示している。
【００８５】
図７Ａにおいて符号７０５で示すように、ＧＰＵ２１０が、メモリアクセス要求をルーティングコントローラ２２０に提供すると仮定する。図示するように、メモリアクセス要求が、６９９という仮想アドレスを特定し、書き込みというアクセスタイプを特定し、６９９という仮想アドレスに対応する物理メモリアドレスに書き込まれるいくつかの情報を特定すると仮定する。符号７１０で示すように、第２ルートを介するルーティングが有効であり、書き込みアクセスが有効であると仮定する。符号７１５で示すように、ルーティングコントローラ２２０は、６９９という仮想アドレス値から２００というベースアドレス値を減算して、４９９（６９９−２００＝４９９）というオフセット値を計算する。符号７２０で示すように、ルーティングコントローラ２２０は、４９９というオフセット値が０よりも大きく、且つ、５００という長さ値よりも小さいと判別する。この判別に基づき、ルーティングコントローラ２２０は、６９９という仮想アドレスが、第２ルートを介するルーティングに関連する仮想アドレスの範囲内に存在すると判別する。
【００８６】
図７Ｂにおいて符号７２５で示すように、ルーティングコントローラ２２０が、リロケーションレジスタ４３５に記憶された４００というリロケーション値を判別すると仮定する。符号７３０で示すように、ルーティングコントローラ２２０は、４００というリロケーション値を４９９というオフセット値に加算して、８９９（４９９＋４００＝８９９）という物理アドレス値を生成する。符号７３５で示すように、ルーティングコントローラ２２０は、８９９という物理アドレスを特定する情報を含むメモリアクセス要求を、ＩＯＭＭＵ２３０を含まない第２ルートを介してメモリコントローラ２４０にルーティングする。
【００８７】
上述したように、図７Ａ及び図７Ｂは単なる一例である。他の例も可能であり、図７Ａ及び７Ｂに関して説明したものとは異なっていてもよい。
【００８８】
上記の開示は、例示及び説明を提供するが、網羅的であること又は開示された正確な形態に実施形態を限定することを意図していない。修正及び変形が、上記の開示に照らして可能であり、実施形態の実施から得ることができる。
【００８９】
本明細書で用いられる場合、デバイス又はコンポーネントは、ハードウェア、ファームウェア、又は、ハードウェア及びソフトウェアの組み合わせとして広く解釈されることを意図している。
【００９０】
いくつかの実施形態では、閾値に関して記載されている。本明細書で用いられる場合、閾値を満たすことは、閾値より大きい（greater than）値、閾値以上（more than）の値、閾値より高い（higher than）値、閾値より大きいか等しい（greater than or equal to）値、閾値より小さい（less than）値、閾値以下（fewer than）の値、閾値より低い（lower than）値、閾値より小さいか等しい（less than or equal to）値、閾値に等しい値等に言及することができる。
【００９１】
本明細書で説明するシステム及び／又は方法は、図面に示された実施形態において、ソフトウェア、ファームウェア及びハードウェアの多くの異なる形態で実施可能であることが明らかであろう。これらのシステム及び／又は方法を実装するために使用される実際のソフトウェアコード又は専用の制御ハードウェアは、実施形態を限定するものではない。したがって、システム及び／又は方法の動作及び挙動は、特定のソフトウェアコードに言及することなく説明されている。すなわち、ソフトウェア及びハードウェアは、本明細書の説明に基づいて、システム及び／又は方法を実装するように設計可能であることが理解される。
【００９２】
特徴の特定の組み合わせは、特許請求の範囲に記載及び／又は本明細書に開示されるが、これらの組み合わせは、可能な実施形態の開示を限定することを意図してしない。実際、これらの特徴の多くは、具体的に特許請求の範囲に記載されない方法、及び／又は、本明細書に開示されない方法で組み合わせることができる。下記の各従属請求項は１つの請求項のみに直接従属してもよいが、可能な実施形態の開示は請求項内の全ての他の請求項と組み合わせた各従属請求項を含む。
【００９３】
本明細書で用いられた要素、動作又は命令は、明示的に記載されない限り、重要又は必須であると解釈されるべきではない。また、本明細書で用いられる冠詞「ａ」及び「ａｎ」は、１つ以上の項目を含むことを意図し、「１つ以上」と互換的に用いられてもよい。同様に、「セット」は、１つ以上の項目を含むことを意図しており、「１つ以上」と互換的に用いられてもよい。１つの項目のみを意図する場合、「ｏｎｅ」という用語又は同様の言語を使用する。また、本明細書で用いられるように、「有する」という用語は、オープンエンドの用語であることを意図している。さらに、「基づいて」という表現は、特に明示的に記載のない限り、「少なくとも部分的に基づいて」を意味することを意図している。
【図１】
2018198088.tif 000003
【図２】
2018198088.tif 000004
【図３】
2018198088.tif 000005
【図４Ａ】
2018198088.tif 000006
【図４Ｂ】
2018198088.tif 000007
【図５】
2018198088.tif 000008
【図６Ａ】
2018198088.tif 000009
【図６Ｂ】
2018198088.tif 000010
【図６Ｃ】
2018198088.tif 000011
【図６Ｄ】
2018198088.tif 000012
【図６Ｅ】
2018198088.tif 000013
【図７Ａ】
2018198088.tif 000014
【図７Ｂ】
2018198088.tif 000015