(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-01-14
(45)【発行日】2025-01-22
(54)【発明の名称】入出力メモリ管理ユニットによるゲストオペレーティングシステムのバッファとログへのアクセス
(51)【国際特許分類】
G06F 12/109 20160101AFI20250115BHJP
G06F 9/455 20180101ALI20250115BHJP
【FI】
G06F12/109 110
G06F12/109 100
G06F9/455 150
(21)【出願番号】P 2021573410
(86)(22)【出願日】2020-06-01
(86)【国際出願番号】 US2020035506
(87)【国際公開番号】W WO2020251790
(87)【国際公開日】2020-12-17
【審査請求日】2023-05-10
(32)【優先日】2019-06-10
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】マギー チャン
(72)【発明者】
【氏名】フィリップ ン
(72)【発明者】
【氏名】ポール ブリンザー
【審査官】豊田 真弓
(56)【参考文献】
【文献】特表2013-514588(JP,A)
【文献】特表2015-500524(JP,A)
【文献】特表2013-515983(JP,A)
【文献】米国特許第10191861(US,B1)
【文献】米国特許第10140148(US,B1)
【文献】米国特許第10013388(US,B1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/109
G06F 9/455
(57)【特許請求の範囲】
【請求項1】
ゲストオペレーティングシステムを実行するプロセッサと、
前記ゲストオペレーティングシステムによってアクセスされるデータ及び情報を記憶するために予約されたゲスト部分を有するメモリと、
入出力メモリ管理ユニット(IOMMU)と、を備える電子デバイスであって、
前記IOMMUは、
前記ゲスト部分において、前記IOMMUから前記ゲストオペレーティングシステムへの情報の通信に用いられるゲストバッファ及び/又はログに情報を書き込むことと、
前記ゲストオペレーティングシステムから前記IOMMUへの情報の通信に用いられるゲストバッファ及び/又はログ内の情報を前記ゲスト部分から読み取ることと、
を行うように構成されている、
電子デバイス。
【請求項2】
前記IOMMUが、前記ゲスト部分において、所定のゲストバッファ又はログに情報を書き込むことは、
前記IOMMUが、前記メモリ内の前記所定のゲストバッファ又はログのシステム物理アドレスを決定することと、
前記IOMMUが、前記システム物理アドレスにおける前記メモリ内の前記所定のゲストバッファ又はログに情報を書き込むことと、
前記IOMMUが、前記IOMMUが前記情報を前記所定のゲストバッファ又はログに書き込んだという指標を、前記ゲストオペレーティングシステムに送信することと、を含む、
請求項1の電子デバイス。
【請求項3】
前記IOMMUが、前記ゲスト部分において、前記所定のゲストバッファ又はログに情報を書き込むことは、
前記IOMMUが、前記ゲストオペレーティングシステムの識別子に基づいて、IOMMUバッキングストア内の前記ゲストオペレーティングシステムのIOMMU MMIOレジスタのコピーのシステム物理アドレスを決定することと、
前記IOMMUが、前記IOMMUバッキングストア内の前記ゲストオペレーティングシステムの前記IOMMU MMIOレジスタのコピーから前記システム物理アドレスを取得することと、
前記IOMMUが、前記情報の前記ゲストバッファ又はログへの書き込み後に、前記IOMMUバッキングストア内の前記ゲストオペレーティングシステムの前記IOMMU MMIOレジスタのコピーを更新して、前記ゲストバッファ又はログへの書き込みを示すことと、を含む、
請求項2の電子デバイス。
【請求項4】
前記指標を前記ゲストオペレーティングシステムに送信することは、
前記IOMMUが、前記ゲストオペレーティングシステムの割り込みコントローラの仮想コピーを介して、内部割り込みを前記ゲストオペレーティングシステムに送信することを含み、
前記内部割り込みは、前記所定のゲストバッファ又はログを前記IOMMUが書き込んだことを前記ゲストオペレーティングシステムに通知する、
請求項2の電子デバイス。
【請求項5】
前記ゲストオペレーティングシステムは、前記指標に基づいて、前記情報を前記システム物理アドレスにおける前記ゲスト部分の前記ゲストバッファ又はログから読み取る、
請求項2の電子デバイス。
【請求項6】
前記ゲストオペレーティングシステムが、前記情報を前記ゲスト部分の前記ゲストバッファ又はログから読み取ることは、
前記ゲストオペレーティングシステムが、前記IOMMUを介して
、IOMMUバッキングストア内の前記ゲストオペレーティングシステム
のIOMMU MMIOレジスタのコピーから情報を取得することと、
前記ゲストオペレーティングシステムが、前記IOMMU MMIOレジスタのコピーからの前記情報を使用して、前記ゲスト部分の前記ゲストバッファ又はログから前記情報を読み取ることと、を含む、
請求項5の電子デバイス。
【請求項7】
前記IOMMUが、前記ゲスト部分の所定のゲストバッファ又はログから情報を読み取ることは、
前記IOMMUが、前記所定のゲストバッファ又はログに関連付けられているIOMMU MMIOレジスタを更新するためのメモリ書き込み要求を前記ゲストオペレーティングシステムから受信することであって、前記ゲストオペレーティングシステムは、前記所定のゲストバッファ又はログに個別に書き込みを行っている、ことと、
前記IOMMUが、前記更新に基づいて、前記ゲスト部分の前記所定のゲストバッファ又はログのシステム物理アドレスを決定することと、
前記IOMMUが、前記システム物理アドレスにおける前記メモリ内の前記所定のゲストバッファ又はログから情報を読み取ることと、を含む、
請求項1の電子デバイス。
【請求項8】
前記IOMMUは、
前記メモリ書き込み要求と前記ゲストオペレーティングシステムの識別子とに基づいて、IOMMUバッキングストア内の前記ゲストオペレーティングシステムの前記IOMMU MMIOレジスタのコピーのシステム物理アドレスを決定することと、
前記IOMMUバッキングストア内の前記ゲストオペレーティングシステムの前記IOMMU MMIOレジスタのコピーの対応する更新を実行することと、
を行うように構成されている、
請求項7の電子デバイス。
【請求項9】
前記ゲストバッファ及び/又はログは、
コマンドバッファと、
イベントログと、
周辺ページ要求(PPR)ログと、
のうち一部又は全てを含む、
請求項1の電子デバイス。
【請求項10】
前記プロセッサは、少なくとも1つの他のゲストオペレーティングシステムを実行し、
前記メモリは、前記少なくとも1つの他のゲストオペレーティングシステムによってアクセスされるデータ及び情報を記憶するために予約された個別のゲスト部分を有し、
前記IOMMUは、
対応するゲスト部分において、前記IOMMUから前記少なくとも1つの他のゲストオペレーティングシステムに情報を通信するために使用されるゲストバッファ及び/又はログに情報を書き込むことと、
前記少なくとも1つの他のゲストオペレーティングシステムから前記IOMMUに情報を通信するために使用されるゲストバッファ及び/又はログ内の情報を前記対応するゲスト部分から読み取ることと、
を行うように構成されている、
請求項1の電子デバイス。
【請求項11】
ゲストオペレーティングシステムを実行するプロセッサと、前記ゲストオペレーティングシステムによってアクセスされるデータ及び情報を記憶するために予約されたゲスト部分を有するメモリと、入出力メモリ管理ユニット(IOMMU)と、を備える電子デバイスにおいてゲストバッファ及びログにアクセスする方法であって、
前記IOMMUが、前記ゲスト部分において、前記IOMMUから前記ゲストオペレーティングシステムへの情報の通信に用いられるゲストバッファ及び/又はログに情報を書き込むことと、
前記IOMMUが、前記ゲストオペレーティングシステムから前記IOMMUへの情報の通信に用いられるゲストバッファ及び/又はログ内の情報を前記ゲスト部分から読み取ることと、を含む、
方法。
【請求項12】
前記IOMMUが、前記ゲスト部分において、所定のゲストバッファ又はログに情報を書き込むことは、
前記IOMMUが、前記メモリ内の前記所定のゲストバッファ又はログのシステム物理アドレスを決定することと、
前記IOMMUが、前記システム物理アドレスにおける前記メモリ内の前記所定のゲストバッファ又はログに情報を書き込むことと、
前記IOMMUが、前記IOMMUが前記情報を前記所定のゲストバッファ又はログに書き込んだという指標を、前記ゲストオペレーティングシステムに送信することと、を含む、
請求項11の方法。
【請求項13】
前記IOMMUが、前記ゲスト部分において、前記所定のゲストバッファ又はログに情報を書き込むことは、
前記IOMMUが、前記ゲストオペレーティングシステムの識別子に基づいて、IOMMUバッキングストア内の前記ゲストオペレーティングシステムのIOMMU MMIOレジスタのコピーのシステム物理アドレスを決定することと、
前記IOMMUが、前記IOMMUバッキングストア内の前記ゲストオペレーティングシステムの前記IOMMU MMIOレジスタのコピーから前記システム物理アドレスを取得することと、
前記IOMMUが、前記情報の前記ゲストバッファ又はログへの書き込み後に、前記IOMMUバッキングストア内の前記ゲストオペレーティングシステムの前記IOMMU MMIOレジスタのコピーを更新して、前記ゲストバッファ又はログへの書き込みを示すことと、を含む、
請求項12の方法。
【請求項14】
前記指標を前記ゲストオペレーティングシステムに送信することは、
前記IOMMUが、前記ゲストオペレーティングシステムの割り込みコントローラの仮想コピーを介して、内部割り込みを前記ゲストオペレーティングシステムに送信することを含み、
前記内部割り込みは、前記所定のゲストバッファ又はログを前記IOMMUが書き込んだことを前記ゲストオペレーティングシステムに通知する、
請求項12の方法。
【請求項15】
前記ゲストオペレーティングシステムが、前記指標に基づいて、前記情報を前記システム物理アドレスにおける前記ゲスト部分の前記ゲストバッファ又はログから読み取ることを含む、
請求項12の方法。
【請求項16】
前記ゲストオペレーティングシステムが、前記情報を前記ゲスト部分の前記ゲストバッファ又はログから読み取ることは、
前記ゲストオペレーティングシステムが、前記IOMMUを介して
、IOMMUバッキングストア内の前記ゲストオペレーティングシステム
のIOMMU MMIOレジスタのコピーから情報を取得することと、
前記ゲストオペレーティングシステムが、前記IOMMU MMIOレジスタのコピーからの前記情報を使用して、前記ゲスト部分の前記ゲストバッファ又はログから前記情報を読み取ることと、を含む、
請求項15の方法。
【請求項17】
前記IOMMUが、前記ゲスト部分の所定のゲストバッファ又はログから情報を読み取ることは、
前記IOMMUが、前記所定のゲストバッファ又はログに関連付けられているIOMMU MMIOレジスタを更新するためのメモリ書き込み要求を前記ゲストオペレーティングシステムから受信することであって、前記ゲストオペレーティングシステムは、前記所定のゲストバッファ又はログに個別に書き込みを行っている、ことと、
前記IOMMUが、前記更新に基づいて、前記ゲスト部分の前記所定のゲストバッファ又はログのシステム物理アドレスを決定することと、
前記IOMMUが、前記システム物理アドレスにおける前記メモリ内の前記所定のゲストバッファ又はログから情報を読み取ることと、を含む、
請求項11の方法。
【請求項18】
前記IOMMUは、
前記メモリ書き込み要求と前記ゲストオペレーティングシステムの識別子とに基づいて、IOMMUバッキングストア内の前記ゲストオペレーティングシステムの前記IOMMU MMIOレジスタのコピーのシステム物理アドレスを決定することと、
前記IOMMUバッキングストア内の前記ゲストオペレーティングシステムの前記IOMMU MMIOレジスタのコピーの対応する更新を実行することと、
を行うように構成されている、
請求項17の方法。
【請求項19】
前記ゲストバッファ及び/又はログは、
コマンドバッファと、
イベントログと、
周辺ページ要求(PPR)ログと、
のうち一部又は全てを含む、
請求項11の方法。
【請求項20】
前記プロセッサは、少なくとも1つの他のゲストオペレーティングシステムを実行し、
前記メモリは、前記少なくとも1つの他のゲストオペレーティングシステムによってアクセスされるデータ及び情報を記憶するために予約された個別のゲスト部分を有し、
前記IOMMUは、
対応するゲスト部分において、前記IOMMUから前記少なくとも1つの他のゲストオペレーティングシステムに情報を通信するために使用されるゲストバッファ及び/又はログに情報を書き込むことと、
前記少なくとも1つの他のゲストオペレーティングシステムから前記IOMMUに情報を通信するために使用されるゲストバッファ及び/又はログ内の情報を前記対応するゲスト部分から読み取ることと、
を行うように構成されている、
請求項11の方法。
【発明の詳細な説明】
【背景技術】
【0001】
(関連技術)
一部の電子デバイス(例えば、サーバやデスクトップコンピュータ等)は、入出力(I/O)デバイス等の電子デバイスハードウェアの「仮想化」をサポートする。仮想化は、電子デバイス上又は電子デバイス内の中間エンティティが、電子デバイス上で実行中のソフトウェアのインスタンス(例えばアプリケーションプログラム等)に対して、ソフトウェアのインスタンスが電子デバイスハードウェアに直接アクセス可能であるというような錯覚を与えるが、実際には、中間エンティティが、ソフトウェアのインスタンスが行うアクセスをインターセプト/リダイレクト又は他の方法で補助することを含む。例えば、一般的な中間エンティティの1つに「仮想マシン」がある。仮想マシンは、電子デバイスハードウェアを抽象化し、電子デバイスハードウェアへの既知のインタフェースをエミュレート又は提示するソフトウェアエンティティであり、それによって、ソフトウェアのインスタンスが様々なタイプ及び構成の電子デバイス上で実行することが可能になる。電子デバイスハードウェアの構成は、ソフトウェアのインスタンスが互換性を有しない電子デバイスハードウェアを含む可能性がある。一部の電子デバイスでは、仮想マシンは、メモリや中央処理装置(CPU)等の特定のマシンの(仮想化された)リソースの各々のビューを有する「ゲスト」オペレーティングシステムと呼ばれるオペレーティングシステムの1つ以上のインスタンスの実行をサポートする。一方、ゲストオペレーティングシステムは、生産性アプリケーション、データベース等のソフトウェアの他のインスタンスを実行するための環境を提供する。
【0002】
一部の電子デバイスでは、仮想マシンは、ハイパーバイザとして知られるソフトウェアエンティティによって管理及び制御される。ハイパーバイザは、仮想マシンを起動又は初期化すること、仮想マシンによる電子デバイスハードウェアのアクセスを制御、監視及び支援すること、仮想マシンを終了又はクローズすること、特定の仮想化リソースを予想される位置又は特定のハードウェアプログラミングモデルで提供すること、複数の仮想マシンに必要な物理リソースへのアクセスを調停すること、外部インタフェースの入力及び出力を(例えば、ユーザ又はネットワークから適切な仮想マシンへ)導くこと等を行うことができる。
図1は、仮想マシン及びハイパーバイザを示すブロック図である。
図1に見られるように、3つの仮想マシン(VM)100があり、その各々の下で、ゲストオペレーティングシステム(ゲストOS)102、データベース、ソフトウェアアプリケーション等の1つ以上のプログラム(PRGRMS)104が実行される。仮想マシン100は、ハイパーバイザ106と通信し、ハイパーバイザ106は、ホストオペレーティングシステム(ホストOS)108と仮想マシン100との間をインタフェースする。ホストオペレーティングシステム108は、電子デバイスハードウェア110とハイパーバイザ106との間のインタフェースを提供する。さらに、ハイパーバイザ106は、仮想マシン100と、メモリ管理ユニット及びIOデバイスハードウェア114のコントローラとして機能する入出力管理ユニット(IOMMU)112と、の間をインタフェースする。
【0003】
ハイパーバイザによって実行される動作は、電子デバイスハードウェアとゲストオペレーティングシステム(より広義には仮想マシン)との通信の処理を含む。例えば、ハイパーバイザは、仮想マシンが使用するメモリへの直接メモリアクセスのためのメモリアドレスを提供する等によって、ゲストオペレーティングシステムと入出力管理ユニット(IOMMU)とのの通信を変換し、リダイレクトし、又は、他の方法で支援し得る。ハイパーバイザによって処理される通信には、IOMMUによる周辺ページ要求(PPR)ログ及びイベントログの書き込み、並びに、ゲストオペレーティングシステムによるコマンドバッファの書き込み等の通信が含まれる。PPRログ、イベントログ及びコマンドバッファの書き込みについては、2016年12月のAMD I/O Virtualization Technology(IOMMU)Specification、rev.3.00で詳しく説明されており、その全体が参照により本明細書に援用される。
【0004】
図2は、ハイパーバイザによって処理される、ゲストオペレーティングシステムとIOMMUとの間の典型的な通信を示すブロック図である。
図2では、いくつかの要素が点線/点状で示されており、これらの要素は、メモリ(例えば、電子デバイスのメインメモリ)に記憶されるログ、バッファ等であり、したがって、典型的なメモリアクセス技術を介してアクセスされる。
図2の要素は、ゲストオペレーティングシステム102と、ハイパーバイザ106と、IOMMU112と共に、ゲスト周辺ページ要求(PPR)ログ200、ゲストコマンドバッファ(CMD BUF)202及びゲストイベントログ204を含み、これらは、ゲストオペレーティングシステム102からの通信及びオペレーティングシステム102宛ての通信を記憶するために用いられるメモリ内の構造(例えば、リスト、テーブ等)である。さらに、要素は、ゲストポインタ(PTRS)/ステータスレジスタ(REGS)206を含み、これは、ゲストオペレーティングシステム構造へのポインタ及びゲストオペレーティングシステムに関連するステータス情報を記憶するためのメモリ内の位置のセットである。さらに、要素は、IOMMU周辺ページ要求ログ208、IOMMUコマンドバッファ210及びIOMMUイベントログ212を含み、これらは、IOMMU112からの通信及びIOMMU112宛ての通信を記憶するために用いられるメモリ内の構造(例えば、リスト、テーブル等)である。また、要素は、IOMMU112内のIOMMUメモリマップド入出力(MMIO)ポインタ/ステータスレジスタ(REGS)214を含み、これは、様々なIOMMU112構造へのポインタ及びIOMMU112に関連するステータス情報を記憶するためのIOMMU112内のレジスタのセットである。
【0005】
動作中、例としてコマンドを用いると、ゲストオペレーティングシステム102は、IOMMU112宛てのコマンドをゲストコマンドバッファ202に(すなわち、ゲストオペレーティングシステム102からのコマンドが記憶されるメモリ内のバッファの次の利用可能な位置に)書き込む。
図2の点線で示すように、ハイパーバイザ106は、ゲストオペレーティングシステムのゲストコマンドバッファ202への書き込みを検出し、コマンドを取得及び処理(例えば、コマンド内のゲストドメインID及び/又はゲストデバイスIDを対応するホストドメインID及び/又はデバイスIDに置き換える等)する。処理されたコマンドは、IOMMUコマンドバッファ210に記憶される。又はイパーバイザ106は、IOMMU MMIOポインタ/ステータスレジスタ214内のテールポインタを、IOMMUコマンドバッファ210が新しく書き込まれたコマンドを表示するように更新する(例えば、テールポインタをIOMMUコマンドバッファ210内の次の位置にインクリメントする)。次に、IOMMU112は、コマンドバッファヘッドポインタ等を用いてIOMMUコマンドバッファ210からコマンドを取得し、コマンドを実行する。これにより、IOMMU112は、対応するアクションを実行する。ハイパーバイザ106は、IOMMU112に対して同様の動作を実行して、IOMMU周辺ページ要求ログ208及びIOMMUイベントログ212への(例えば、ホストデバイスIDをゲストデバイスIDで置き換える)書き込みを行う。メモリの読み取り及び書き込み、ポインタの更新、並びに、ハイパーバイザ106によって実行される他の動作は、レイテンシがより長い。このため、ハイパーバイザ106を用いてゲストオペレーティングシステム102とIOMMU112との間に介入することは、通信処理の遅延につながると共に、プロセッサがビジー状態となる原因となり、電子デバイス内のメモリバス上のトラフィックを増加させる。
【図面の簡単な説明】
【0006】
【
図1】仮想マシン及びハイパーバイザを示すブロック図である。
【
図2】ハイパーバイザによって処理されるゲストオペレーティングシステムとIOMMUとの間の通信を示すブロック図である。
【
図3】いくつかの実施形態による、仮想マシン及びハイパーバイザを示すブロック図である。
【
図4】いくつかの実施形態による、電子デバイスを示すブロック図である。
【
図5】いくつかの実施形態による、IOMMUによってアクセスされるメモリの一部を示すブロック図を提示する。
【
図6】いくつかの実施形態による、IOMMU MMIOレジスタのゲストコピーに記憶された値を示すブロック図を提示する。
【
図7】いくつかの実施形態による、IOMMUによって処理されるゲストオペレーティングシステムとIOMMUとの間の通信を示すブロック図である。
【
図8】いくつかの実施形態による、IOMMUが、ゲストオペレーティングシステムのためのメモリのゲスト部分のメモリ位置にアクセスする間のプロセスを示すフローチャートである。
【
図9】いくつかの実施形態による、IOMMUが、メモリのゲスト部分におけるゲストバッファ又はログから読み取りを行う間のプロセスを示すフローチャートである。
【
図10】いくつかの実施形態による、IOMMUが、メモリのゲスト部分におけるゲストバッファ又はログに書き込みを行う間のプロセスを示すフローチャートである。
【発明を実施するための形態】
【0007】
図面及び説明を通じて、同様の符号は同じ図面要素を指す。
【0008】
以下の説明は、当業者が、記載された実施形態を製造及び使用することを可能にするために示され、特定の用途及びその要件に照らして提供される。記載された実施形態に対する様々な変更は、当業者には容易に明らかであり、本明細書で定義される一般的原理は、他の実施形態及び用途に適用されてもよい。したがって、記載された実施形態は、示された実施形態に限定されず、本明細書で開示される原理及び特徴と一致する最も広い範囲が与えられるべきである。
【0009】
(用語)
以下の説明では、様々な用語が実施形態を説明するために用いられる。以下は、これらの用語の簡略化された一般的な説明である。この用語は、明確且つ簡潔にするために、本明細書に記載されていない重要な追加特徴を有していてもよく、したがって、この説明は用語を限定することを意図していないことに留意されたい。
【0010】
機能ブロック:機能ブロックは、集積回路要素、ディスクリート回路要素等のように、相互に関連する1つ以上の回路要素のグループ、集合、及び/又は、セットを指す。回路要素は、回路要素が少なくとも1つの特性を共有するという点で「相互に関連」している。例えば、相互に関連している回路要素は、特定の集積回路チップ又はその一部に含まれ、その上に組み立てられ、又は、他の方法で結合され得、所定の機能(計算又は処理機能、メモリ機能等)の性能に関与し得、共通の制御要素及び/又は共通のクロックによって制御され得る等である。機能ブロックは、単一の回路要素(例えば、単一の集積回路論理ゲート)から数百万又は数十億の回路要素(例えば、集積回路メモリ)に至るまでの任意の数の回路要素を含むことができる。
【0011】
(仮想化、仮想マシン及びハイパーバイザ)
記載された実施形態は、メモリ、入出力(IO)デバイス等の電子デバイスハードウェアの「仮想化」をサポートする。仮想化は、一般に、電子デバイス上又は電子デバイス内の中間エンティティが、電子デバイス上で実行中のソフトウェアのインスタンスに対して、ソフトウェアのインスタンスが電子デバイスハードウェアに直接アクセス可能であるというような錯覚を与えるが、実際には、中間エンティティが、ソフトウェアのインスタンスが行うアクセスをインターセプト/リダイレクト又は他の方法で補助することを含む。例えば、ソフトウェアのインスタンスは、中間エンティティによって、電子デバイスの実際のデバイスレジスタ、メモリ位置等としてソフトウェアのインスタンスに出現するが中間エンティティによって示される単なるコピーである電子デバイスレジスタ、メモリ位置、電子デバイス設定、及び、他の機能ブロックのセットを用いて提示され得る。この場合、中間エンティティは、電子デバイスハードウェアのコピーのアクセスを受信、傍受(インターセプト)又は他の方法で取得し、ソフトウェアのインスタンスに代わって実際の電子デバイスハードウェアと対応する相互作用を行う。電子デバイスハードウェアの仮想化は、様々な電子デバイスが様々な構成の電子デバイスハードウェア、電子デバイスハードウェアの様々等レス、位置又は識別子等を用いることを可能にし、ソフトウェアのインスタンスが、電子デバイスハードウェアへの同一のインタフェースを用いて中間エンティティを介して示される等の多くの利点がある。さらに、中間エンティティは、ソフトウェアの所定のインスタンスによる電子デバイスハードウェアのアクセスを許可するかブロックするかを決定することができ、したがって、電子デバイスハードウェアの仮想化により、電子デバイスハードウェア(又は、その一部)及び/又は電子デバイス上で実行中のソフトウェアのインスタンスの保護を可能にする。上述したようにアクセスを制御することによって、中間エンティティは、ソフトウェアのいくつかのインスタンス間で電子デバイスハードウェアを共有し、及び/又は、ソフトウェアの個々のインスタンスに、電子デバイスハードウェアの一部への排他的アクセスを提供することができる。
【0012】
記載された実施形態では、中間エンティティは、「仮想マシン」を含む。仮想マシンは、電子デバイスハードウェアを抽象化し、実際の又はエミュレートされた電子デバイスハードウェアへの既知のインタフェースをソフトウェアのインスタンスに示すソフトウェアエンティティである。ハードウェアを抽象化することによって、ソフトウェアのインスタンスが、様々なタイプ及び構成の電子デバイスハードウェア(ソフトウェアのインスタンスが互換性を有しない電子デバイスハードウェアを含む可能性がある)上で実行されることを可能にする。記載された実施形態では、仮想マシンは、「ゲスト」オペレーティングシステムと呼ばれるオペレーティングシステムの1つ以上のインスタンスの実行をサポートする。ゲストオペレーティングシステムは、アプリケーション、データベース等の他のソフトウェアプログラムを実行するための環境を提供する。
【0013】
記載された実施形態では、仮想マシンは、ハイパーバイザとして知られるソフトウェアエンティティによって管理及び制御される。ハイパーバイザは、仮想マシンを起動又は初期化すること、仮想マシンによる電子デバイスハードウェアのアクセスを制御、監視及び支援すること、仮想マシンを終了又はクローズすること等を行い得る。
図3は、いくつかの実施形態による、仮想マシン及びハイパーバイザを示すブロック図である。
図3に見られるように、3つの仮想マシン(VM)300があり、これらの各々の下で、ゲストオペレーティングシステム(ゲストOS)302及びデータベース、ソフトウェアアプリケーション等の1つ以上のプログラム(PRGRMS)304が実行される。仮想マシン300は、ハイパーバイザ306と通信し、ハイパーバイザ306は、ホストオペレーティングシステム(ホストOS)308と仮想マシン300との間をインタフェースする。ホストオペレーティングシステム308は、電子デバイスハードウェア310とハイパーバイザ306との間のインタフェースを提供する。既存の電子デバイスについて
図1に示したものとは異なり、
図3において、IOMMU312は、ハイパーバイザ306が介在することなく、ゲストオペレーティングシステム302とIOデバイスハードウェア314との間を直接インタフェースする(IOMMU312とゲストオペレーティングシステム302との間の太い線で示されるように)。したがって、既存の電子デバイスとは異なり、記載された実施形態では、ハイパーバイザ306は、本明細書で説明するように、ゲストオペレーティングシステム302とIOMMU312との間の通信を処理するための動作の少なくとも一部の実行に関与しない。しかしながら、ハイパーバイザ306とIOMMU312との間の線で示すように、IOMMU312とハイパーバイザ306との間で特定の通信が行われることに留意されたい。さらに、いくつかの実施形態では、ホストオペレーティングシステム308が存在せず、ハイパーバイザ306が電子デバイスハードウェア310とより直接的に通信することに留意されたい。
【0014】
(概要)
記載された実施形態では、電子デバイスは、プロセッサと、メモリ(例えば、メインメモリ)と、いくつかの入出力(IO)デバイス(例えば、ネットワークインタフェースデバイス、ディスクコントローラ等)と、プロセッサとIOデバイスとの間をインタフェースする入出力メモリ管理ユニット(IOMMU)と、を含む。プロセッサは、ハイパーバイザ、1つ以上の仮想マシン、及び、仮想マシンにおけるゲストオペレーティングシステムを実行する。各ゲストオペレーティングシステムは、そのゲストオペレーティングシステムがアクセスするデータ及び情報を記憶するために予約されたメモリのゲスト部分(連続若しくは非連続の領域又はメモリのブロック)が割り当てられる。記載された実施形態では、IOMMUは、ゲストオペレーティングシステムとIOMMUとの間の通信を処理するための動作を実行する。
【0015】
ゲストオペレーティングシステムとIOMMUとの間の通信処理の一環として、既存のシステムのように特定のバッファとログの単一のIOMMUコピーを使用する代わりに、IOMMUは、メモリの対応するゲスト部分にある各ゲストオペレーティングシステムのバッファとログに直接アクセスする。つまり、IOMMUは、既存のシステムのIOMMU(及び、ハイパーバイザ)によって維持されているバッファとログのコピーの代わりに、各ゲストオペレーティングシステムによって使用されるバッファとログの個別のコピーにアクセスする。例えば、いくつかの実施形態では、各ゲストオペレーティングシステムは、メモリの対応するゲスト部分において、コマンドバッファ、イベントログ及び/又は周辺ページ要求(PPR)ログを含むバッファ及びログを維持する。IOMMUは、メモリのうち当該ゲストオペレーティングシステム部分にある各ゲストオペレーティングシステムのバッファ及びログのメモリ位置(例えば、エントリ)から情報を直接読み取り/又はそこに情報を書き込むことができる。
【0016】
IOMMUがバッファとログの単一コピーを使用する既存のシステムでは、IOMMUは、バッファとログに関する情報を記憶するために使用されるIOMMUメモリマップ入出力(MMIO)レジスタのセットを維持する。例えば、IOMMU MMIOレジスタは、ポインタのセット(例えば、各ログやバッファのヘッドポインタ及び/又はテールポインタ等)や、バッファとログ用の制御値(例えば、各ログやバッファのサイズインジケータ及び/又は構成値等)等の情報を含む。説明する実施形態では、IOMMUは、メモリの異なるゲスト部分(すなわち、異なるメモリアドレスで、場合によっては異なる制御値で)のバッファ及びログに別々にアクセスするので、IOMMU MMIOレジスタの単一のセットは不十分である。したがって、説明する実施形態では、IOMMUは、メモリの対応するゲスト部分のバッファ及びログにアクセスするために使用される、ゲストオペレーティングシステム毎のIOMMU MMIOレジスタのセットの個別のコピーを備える。言い換えると、いくつかの実施形態では、N個のゲストオペレーティングシステムがシステムによってサポートされる場合、IOMMUは、IOMMU MMIOレジスタ(すなわち、バッファ及びログのポインタ及び制御値のセット)のN個のコピーを、ゲストオペレーティングシステム毎に1つ備える。
【0017】
考えられる全てのゲストオペレーティングシステムのバッファとログを追跡するために必要なレジスタの数(非常に大きくなる可能性がある)のため、IOMMU MMIOレジスタの個別のコピーは、IOMMU内に物理的に存在しない(つまり、IOMMUは、IOMMU MMIOレジスタのコピーのハードウェア回路を含まない)。代わりに、ゲストオペレーティングシステム用のIOMMU MMIOレジスタのセットの個別のコピーが、IOMMUのデータと情報を記憶するために予約されているメインメモリの一部であるIOMMUバッキングストアに記憶される。記載された実施形態では、IOMMUは、IOMMU MMIOレジスタを「仮想化」するか、ゲストオペレーティングシステム(及び、他のエンティティ(例えば、ハイパーバイザ等))が指定されたIOMMU MMIOアドレスを介してIOMMU MMIOレジスタにアクセスできるような外観(appearance)をゲストオペレーティングシステムに示す。しかしながら、IOMMU MMIOアドレスにはレジスタがない。代わりに、IOMMUは、IOMMU MMIOアドレスのIOMMU MMIOレジスタへのゲストオペレーティングシステムによるアクセスをインターセプトし、IOMMU MMIOレジスタのアクセスをIOMMUバッキングストア内の対応する位置にリダイレクトする。例えば、いくつかの実施形態では、IOMMU MMIOアドレスは、IOMMUインタフェース/アパーチャ内のIOMMUによって提供される特定の範囲のアドレスからのアドレスを含み、これらのアドレスは、通信をIOMMUバッキングストア内のIOMMUレジスタのコピーにマッピングするために使用される。
【0018】
動作中、IOMMUは、メモリのゲスト部分におけるゲストバッファ又はログ(又は、より一般的には、対応するメモリ位置)にアクセスするためのいくつかの動作を実行する。例えば、IOMMUは、ゲストオペレーティングシステム(又は、IOMMU自体を含む別のエンティティ)によってゲストバッファ又はログに書き込まれた情報を、ゲストバッファ又はログから読み取ることができる。いくつかの実施形態では、ゲストオペレーティングシステムがメモリの各々のゲスト部分におけるゲストバッファ又はログに情報を書き込む場合、IOMMUによってゲストバッファ又はログを読み取るための動作が開始される。例えば、ゲストオペレーティングシステムは、メモリのゲスト部分におけるコマンドバッファにコマンドを書き込むことができ、このコマンドは、IOMMUによって処理される場合に、対応するアクションをIOMMUに実行させる。次に、ゲストオペレーティングシステムは、IOMMU MMIOレジスタ(及び/又は、他のコマンドバッファIOMMU MMIOレジスタ)におけるコマンドバッファテールポインタを更新するためのメモリ書き込みを送信する。これは、IOMMUによって、受信、インターセプト又は他の方法で検出される。次に、IOMMUは、IOMMUバッキングストアにおいて、コマンドバッファテールポインタが記憶されているゲストオペレーティングシステムのIOMMU MMIOレジスタのコピーへの対応する書き込みを実行する。例を続けると、IOMMUは、IOMMUバッキングストア内のゲストオペレーティングシステムのコマンドバッファテールポインタレジスタのコピーに、コマンドバッファテールポインタの新しいアドレスやオフセット等の更新されたデータを書き込むことができる。さらに、IOMMUは、ゲストオペレーティングシステムからのこのような書き込みを監視(例えば、IOMMU MMIOレジスタへの書き込みを監視)する。次に、IOMMUは、コマンドバッファのヘッドポインタからの情報を直接又は間接的に使用して、メモリのゲスト部分におけるゲストコマンドバッファからコマンドを読み取る。次に、IOMMUは、コマンドを処理し、それによって、IOMMUに対応するアクションを実行させる。コマンドの処理後、IOMMUは、IOMMUバッキングストア内のゲストオペレーティングシステムのIOMMU MMIOレジスタのコピーにおいてコマンドバッファのヘッドポインタを更新し、IOMMUバッキングストア内のゲストオペレーティングシステムの他のコマンドバッファ情報を更新することができる。例えば、IOMMUは、IOMMU MMIOレジスタのコピー内のコマンドバッファのヘッドポインタを更新して(コマンドバッファのヘッドポインタを、コマンドバッファ内の次のエントリを示すように前進させることによって等)、コマンドが処理され、これにより、メモリのゲスト部分におけるコマンドバッファ内に存在しないことを示すことができる。
【0019】
情報をゲストバッファ又はログから読み取ることに加えて、IOMMUは、ゲストオペレーティングシステム(又は、IOMMU自体を含む別のエンティティ)によって読み取られる情報をゲストバッファ又はログに書き込むことができる。例えば、IOMMUは、ゲストオペレーティングシステムのメモリのゲスト部分におけるイベントログにイベントに関する情報を書き込むことができる。いくつかの実施形態では、所定のゲストオペレーティングシステムのゲストバッファ又はログに情報を書き込む場合、IOMMUは、最初に、所定のゲストオペレーティングシステムのメモリのゲスト部分におけるゲストバッファ又はログ(又は、その中のエントリ)の位置を決定する。この動作の場合、IOMMUは、ゲストオペレーティングシステムのIOMMU MMIOレジスタのコピーのシステム物理アドレスを決定する。これには、IOMMUバッキングストアにおけるゲストバッファ又はログの位置情報が含まれる。例を続けると、IOMMUは、イベントログのテールポインタが記憶されているIOMMUバッキングストア内のゲストオペレーティングシステムのIOMMU MMIOレジスタのコピーのシステム物理アドレスを決定する。次に、IOMMUは、システム物理アドレスにおけるIOMMU MMIOレジスタのコピーから、ゲストオペレーティングシステムのゲストバッファ又はログの位置情報(例えば、エントリのシステム物理アドレス、エントリカウンタ等)を取得する。次に、IOMMUは、位置情報を使用して、メモリ内の所定のゲストバッファ又はログに情報を書き込む。例えば、IOMMUは、位置情報を使用して、メモリのゲストオペレーティングシステムのゲスト部分におけるイベントログに、イベントに関する情報を書き込むことができる。次に、IOMMUは、IOMMUバッキングストア内の関連するIOMMU MMIOレジスタのコピーを更新して、書き込みが発生したことを示す(例えば、コマンドバッファテールポインタをメモリのゲスト部分におけるコマンドバッファ内の次のエントリに進める)。また、IOMMUは、IOMMUが情報をゲストバッファ又はログに書き込んだことを示す内部割り込みを、ゲストオペレーティングシステムに送信する。次に、ゲストオペレーティングシステムは、メモリのゲスト部分において、割り込みに基づいて、ゲストバッファ又はログから情報を読み取るための動作を実行する(これらの動作については、以下に詳細に説明する)。
【0020】
IOMMUは、ゲストオペレーティングシステムのメモリのゲスト部分におけるバッファ及びログへの直接のアクセス、つまり、メモリ読み取りと書き込みの実行により、既存のシステムのようなハイパーバイザによる介入/処理に依存したゲストバッファ及びログのアクセスを回避することできる。これらの動作をハイパーバイザ(ソフトウェアで実装)からIOMMU(ハードウェアで実装)に移動することにより、動作が高速化し、必要なメモリシステム帯域幅が縮小し、及び、プロセッサ計算機能ブロックの負荷が低減し、これにより、電子デバイスの総合的な性能が向上する。電子デバイスの性能向上はユーザのより高い満足度につながる。
【0021】
(電子デバイス)
図4は、いくつかの実施形態による、電子デバイス400を示すブロック図である。
図4に見られるように、電子デバイス400は、プロセッサ402と、メモリ404と、大容量記憶装置406と、入出力(IO)デバイス408~412と、入出力(IO)ハブ414と、メモリコントローラ416と、を含む。
【0022】
プロセッサ402は、電子デバイス400において計算動作を実行する機能ブロックである。プロセッサ402は、2つのコア418~420を含み、これらの各々は、中央処理装置(CPU)コア、グラフィックスプロセッシングユニット(GPU)コア、組み込みプロセッサ、特定用途向け集積回路(ASIC)、及び/又は、他の計算機構等の1つ以上の計算メカニズムを含む。また、プロセッサ402は、メモリ管理ユニット(MMU)422を含み、これは、アドレス変換に関連する動作(例えば、ページテーブルウォーク、変換ルックアサイドバッファルックアップ等)、コア418~420によるメモリアクセスのためのメモリアクセス保護等を実行する機能ブロックである。
【0023】
メモリ404は、電子デバイス400内のメモリ(例えば、「メイン」メモリ)の動作を実行する機能ブロックである。メモリ404は、ダイナミックランダムアクセスメモリ(DRAM)、ダブルデータレート同期DRAM(DDR SDRAM)、及び/又は、電子デバイス400内の他の機能ブロックによって用いられるデータ及び命令を記憶する他のタイプのメモリ回路のうち1つ以上のメモリ回路と、メモリ回路に記憶されたデータ及び命令のアクセス(例えば、読み取り、書き込み、チェック、削除、無効化等)を処理する制御回路と、を含む。
【0024】
大容量記憶装置406は、電子デバイス400の他の機能ブロックによって用いられるデータ及び命令を記憶するための大容量不揮発性記憶要素の動作を実行する機能ブロック及び/又はデバイスである。大容量記憶装置406は、大容量半導体メモリ(例えば、フラッシュメモリ等)、ディスクドライブ(ハードドライブ等)、光学ドライブ等であってもよく、又は、これらを含むことができる。大容量記憶装置406に記憶されたデータ及び命令のコピーは、電子デバイス400内の他の機能ブロックによって用いられるために、取得されメモリ404に記憶される。例えば、いくつかの実施形態において、データ及び/又は命令は、所定のサイズ(例えば、4kB、2MB等)のブロック又は「ページ」で大容量記憶装置406から取得され、ページは、他の機能ブロックによるアクセスのためにメモリ404に記憶される。さらに、ページは、メモリ404内の利用可能な位置に新たに生成され得る(例えば、計算結果を記憶するために)。
【0025】
IOデバイス408~412は、対応するIO動作を実行する機能ブロック及び/又はデバイスである。IOデバイス408~412の各々によって実行されるIO動作の特定の性質は、IOデバイスの性質に依存する。例えば、IOデバイス408~412は、ヒューマンインタフェースデバイス、ネットワークインタフェースデバイス、オーディオ/ビジュアル処理又は提供デバイス、GPU、センサデバイス、ディスクコントローラ、ペリフェラルコンポーネントインタフェース(PCI)デバイス、ユニバーサルシリアルバス(USB)デバイス等を含むことができ、各IOデバイスは、人間からの入力(例えば、キーボード、マウス等)の受信、ネットワーク上でのデータの受信又は送信等の関連する動作を実行する。IOデバイス408~412は、データ及び/又は命令を、電子デバイス400の他の機能ブロックに提供するか、これらからデータ及び/又は命令を消費する。例えば、いくつかの実施形態では、IOデバイス408~412は、ゲストメモリ428内のメモリページ内のデータ(つまり、所定のゲストオペレーティングシステム用に予約されているメモリの一部)にアクセス(すなわち、読み取り、書き込み、無効化等)する。
【0026】
IOハブ414は、IOデバイス408~412と電子デバイス400の他の機能ブロック(例えば、プロセッサ402、メモリ404等)との間をインタフェースする入出力ハブの動作を実行する機能ブロックである。IOハブ414によって実行される動作は、IOデバイス408~412宛の通信が目的のIOデバイスに到達すること、IOデバイス408~412からの通信が他の機能ブロックに適切に到達すること、他の機能ブロックがIOデバイス408~412によって許容できないアクセスから安全に守られること又はその逆等を保証するための動作を含む。いくつかの実施形態では、IOハブ414は、異なる通信規格を用いるバス間(例えば、ペリフェラルコンポーネントインタフェースエクスプレス(PCIe)バスとHyperTransport link(登録商標)との間)の関連する通信をインタフェースし、変換又は翻訳する。
【0027】
IOハブ414は、IOMMU424を含み、IOMMU424は、IOデバイス408~412がメモリ404内のデータ及び/又は命令にアクセスすることを可能とする動作を実行し、プロセッサ402(及び、それによって実行されるゲストオペレーティングシステム)と通信する等の機能ブロックである。これらの実施形態では、データ及び命令がメモリ404においてIOデバイス(例えば、IOデバイス408)によってアクセスされる場合、IOデバイスは、メモリアクセスリクエスト(例えば、直接メモリアクセスリクエスト又はDMA)をIOMMU424に送信する。次に、IOMMU424は、メモリアクセスリクエストを満たすために、対応するリクエストをメモリ404に送信する。例えば、いくつかの実施形態では、メモリアクセスリクエストに基づいてデータが取得される場合、IOMMU424は、メモリ404(又は、データがメモリ404に存在しない場合には大容量記憶装置406)からデータを取得し、データを、リクエストしているIOデバイスに転送する。いくつかの実施形態では、IOMMU424は、ページテーブル、変換ルックアサイドバッファ、及び/又は、IOデバイス408~412によって用いられる「仮想」若しくはローカルメモリアドレスを、データが実際に位置するメモリ404の物理アドレスに変換するために用いられる他の機能ブロックを含む。
【0028】
記載された実施形態では、IOMMU424は、仮想マシン内のコア418~420によって実行されるゲストオペレーティングシステムと通信し、その逆も同様である。例えば、いくつかの実施形態では、IOMMU424(又は、IOMMU424を介したIOデバイス408~412)は、イベント及び周辺ページ要求(PPR)をゲストオペレーティングシステムに通信する。これらの実施形態では、IOMMU424は、IOページフォールト(IOデバイス408~412に代わってページテーブルウォークに対して)、IOMMU424ハードウェアエラー等のイベントを、メモリ404内の共有ゲストイベントログを介してゲストオペレーティングシステムに報告する。さらに、これらの実施形態では、IOMMU424は、メモリ404内の共有ゲストPPRログを介して、メモリページ提供動作のために(すなわち、ゲストオペレーティングシステムによってアクセス可能な、メモリ404におけるページに関する動作を実行するために)、PPRを、周知のアドレス変換サービス又はATS規格を用いる周辺機器(IOデバイス)からゲストオペレーティングシステムに転送する。別の例として、いくつかの実施形態では、ゲストオペレーティングシステムは、コマンドをIOMMU424に通信する。これらの実施形態では、ゲストオペレーティングシステムは、メモリ404内の共有ゲストコマンドバッファを介して、完了待機(IOMMU424が続行する前に、前のコマンドを完了させるコマンドバリアとして機能する)、デバイステーブルエントリの無効化、IOMMU424変換ルックアサイドバッファエントリの無効化等のコマンドをIOMMU424に発行して、IOMMU424及び/又はIOデバイス408~412を制御する。
【0029】
いくつかの実施形態では、IOMMU424は、ゲストオペレーティングシステムへのインタフェースを提供し、このインタフェースは、IOMMU424と通信するために用いられるメモリマップ位置、レジスタ等を含む。例えば、いくつかの実施形態では、IOMMU424は、ゲストオペレーティングシステムが値を書き込むことができるメモリマップド入出力(MMIO)メモリロケーションのセットを提供し、値がIOMMU424によって受信されるようにする。いくつかの実施形態では、インタフェースが仮想化される。すなわち、メモリ位置、レジスタ等は、ゲストオペレーティングシステムによって想定されるように、値を記憶するために用いられず、代わりに、IOMMU424によって単に提示されるのみである。これらの実施形態では、IOMMU424は、ゲストオペレーティングシステムからインタフェースを介して値を受信し得るが、ゲストオペレーティングシステム(例えば、IOMMU MMIOアドレス等にアドレス指定される)毎に、メモリ位置、レジスタ等の値の別々のコピーを記憶するために、IOMMUバッキングストア426及び/又はメモリ404内の他の位置を用いる。ゲストオペレーティングシステム及び他のエンティティ(例えば、プロセッサ402等)と通信するためにIOMMU424によってアクセスされるメモリについては、以下により詳細に説明する。
【0030】
いくつかの実施形態では、
図4に示されていないが、IOMMU424は、IOMMU424のデータ又は情報のコピーを記憶するために使用されるローカルキャッシュメモリを含む。例えば、いくつかの実施形態では、キャッシュメモリは、所定のゲストオペレーティングシステムのIOMMU MMIOレジスタの値のセット及び/又はそこからの個々の値等のように、IOMMUバッキングストア426からの最近使用され又は頻繁に使用されるデータのコピーを記憶するために使用される。キャッシュメモリは、IOMMUバッキングストア426よりも小さいため、IOMMUバッキングストア426に記憶されたデータ及び情報の一部(及び、おそらくはごく一部)を記憶するための容量(すなわち、メモリ位置)のみを有し得る。
【0031】
ゲストメモリ428は、ゲストオペレーティングシステムによって用いられるデータ及び情報を記憶するために、対応するゲストオペレーティングシステムによって用いられるメモリ404の一部(例えば、1つ以上の連続又は非連続のページ又はメモリのブロック)である。一般に、ゲストメモリ428は、ゲストオペレーティングシステム及び/又は他のエンティティによって用いられる任意の形式のデータ及び情報を記憶するために、ゲストオペレーティングシステム及び/又は他のエンティティによって用いることができる。いくつかの実施形態では、ゲストメモリ428が保護され、特定のエンティティのみがゲストメモリ428にアクセスすることが許可されている。例えば、対応するゲストオペレーティングシステム、ハイパーバイザ、セキュリティプロセッサ、及び/又は、電子デバイス400内のオペレーティングシステムは、ゲストメモリ428のアクセスを、対応するゲストオペレーティングシステム並びに指定された他のデバイス及び/又は機能ブロックに制限することによって、ゲストメモリ428を「保護」することができる。いくつかの実施形態では、ゲストメモリ428は、暗号化されるか、さもなければ、望ましくないエンティティによってアクセス不能にされる。いくつかの実施形態では、ゲストメモリ428は、ゲストイベントログ、ゲストペリフェラルページリクエスト(PPR)ログ、及び、ゲストコマンドバッファを記憶するために用いられ、ゲストコマンドバッファは、ゲストオペレーティングシステムとIOMMUとの間で通信するために用いられるデータ構造(例えばテーブル、リスト等)である。ゲストイベントログ、ゲスト周辺ページ要求(PPR)ログ、及び、ゲストコマンドバッファについては、以下により詳細に説明する。
【0032】
いくつかの実施形態では、通信経路は、要素間の矢印線で示すように、電子デバイス400の様々な機能ブロック(プロセッサ402、メモリコントローラ416、メモリ404等)の間で結合される。通信経路には、1つ以上のバス、ワイヤ、ガイド、及び/又は、場合によってはコントローラ、ファブリック要素(スイッチ、ルータ等)、回路要素等とともに他の接続部が含まれる。通信経路は、コマンド、データ、制御信号、及び/又は、他の情報を機能ブロック間でルーティングするために用いられる。例えば、いくつかの実施形態において、コヒーレントバスファブリック又は相互接続部は、IOハブ414、プロセッサ402(例えば、MMU422)、メモリ404間で結合される。電子デバイス400内の一部の通信経路は、明確にするために
図4に示されていないことに留意されたい。
【0033】
いくつかの実施形態において、
図3の電子デバイスハードウェア310は、プロセッサ402及びメモリ404等の機能ブロック及びデバイスを含み、IOデバイスハードウェア314は、IOデバイス408~412等の機能ブロック及びデバイスを含む。これらの実施形態では、
図3のIOMMU312及び
図4のIOMMU424は、同じ動作の少なくとも一部を実行する。
【0034】
電子デバイス400は、特定の数及び構成の要素(例えば、プロセッサ402、メモリ404等の機能ブロック及びデバイス)及び通信経路を用いて示される。しかしながら、電子デバイス400は、例示の目的で簡略化されており、いくつかの実施形態では、電子デバイス400は、異なる数又は構成の要素及び/又は通信経路が存在する。例えば、電子デバイス400は、電力サブシステム、ディスプレイ等を含み得る。一般に、電子デバイス400は、本明細書で記載された動作を実行するのに十分な要素及び通信経路を含む。
【0035】
電子デバイス400は、計算動作を実行する任意の電子デバイスとすることができ、又は、それに含まれ得る。例えば、電子デバイス400は、デスクトップコンピュータ、ラップトップコンピュータ、ウェアラブル電子デバイス、タブレットコンピュータ、スマートフォン、サーバ、人工知能装置、仮想若しくは拡張現実装置、ネットワーク機器、玩具、音響映像機器、家庭用電気製品、コントローラ、乗り物等、及び/又は、これらの組み合わせ等の電子デバイスであってもよいし、これに含まれ得る。
【0036】
(IOMMUによってアクセスされるメモリの一部)
いくつかの実施形態では、IOMMUは、本明細書に記載される動作を実行するために、メモリ(例えば、メモリ404)の異なる部分におけるデータ及び情報にアクセスする。これらの実施形態のいくつかにおいて、メモリの一部は、IOMMUバッキングストア(例えば、IOMMUバッキングストア426)、ゲストメモリ(例えば、ゲストメモリ428)、及び/又は、ハイパーバイザメモリを含む。
図5は、いくつかの実施形態による、IOMMUによってアクセスされるメモリの一部を示すブロック図である。
図5は一例として示されているが、いくつかの実施形態では、メモリ及び/又はメモリの異なる部分は、異なるタイプ及び/又は構成の情報を記憶する。一般に、メモリは、本明細書で記載された動作を可能にするのに十分な情報を含む。
【0037】
図5に見られるように、IOMMUバッキングストア500は、ID変換テーブル502を含む。一般に、ID変換テーブル502は、ゲストオペレーティングシステムからIOMMUへの通信においてゲストドメインID及び/又はデバイスIDを、ホストドメインID及び/又はデバイスIDに翻訳又は変換するために、又は、その逆にIOMMUからゲストオペレーティングシステムへの通信のために、IOMMUによって用いられる情報を含む。ドメインID及びデバイスIDは、2016年12月のAMD I/O Virtualization Technology(IOMMU)Specification、rev.3.00でより詳しく説明されており、上述したように参照によって本明細書に援用される。
【0038】
いくつかの実施形態では、ID変換テーブル502は、ドメインIDマッピングテーブル504として示されるドメインID用の、及び、デバイスIDマッピングテーブル506として示されるデバイスID用の、別々のテーブルを含むが、別々のテーブルは必須ではない(したがって、全ての変換が単一のテーブルに含まれ得る)。ドメインIDマッピングテーブル504は、エントリのセットを含み、各エントリは、指定されたホストドメインIDに関連するか関係するゲストドメインIDの識別又は指標を記憶するために用いられる。デバイスIDマッピングテーブル506は、エントリのセットを含み、各エントリは、指定されたホストデバイスIDに関連するか関係するゲストデバイスIDの識別又は指標を記憶するために用いられる。動作中、ゲスト又はホストドメインID及び/又はデバイスIDが通信において翻訳又は変換される場合、IOMMUは、ID変換テーブル502(すなわち、ドメインIDマッピングテーブル504及び/又はデバイスIDマッピングテーブル506)でルックアップを実行して、対応する翻訳又は変換を取得する。
【0039】
IOMMUバッキングストア500は、ゲストコントロール508も含む。一般に、ゲストコントロール508は、電子デバイスにおけるゲストオペレーティングシステムのためのインタフェースレジスタ及び制御レジスタに記憶され又はそこからの値のコピーを含む。ゲストコントロール508は、サポートされているゲストオペレーティングシステム毎に、IOMMUとそのゲストオペレーティングシステムとの間の相互作用を制御するゲストインタフェースレジスタ及び/又はゲストオペレーティングシステム制御レジスタ(又は、少なくともその中の値)のコピーを含む。例えば、ゲストコントロール508は、ゲストオペレーティングシステム毎に、ゲストオペレーティングシステムに対するドメインID及び/又はデバイスIDマッピングをIOMMUに通信するために用いられるマップ制御レジスタを含み得る。
【0040】
IOMMUバッキングストア500は、ゲストメモリマップド入出力(MMIO)510をさらに含む。一般に、ゲストMMIO510は、メモリ404のゲスト部分(例えば、ゲストメモリ428)におけるゲストオペレーティングシステムに対するバッファ及びログ(例えば、ゲストコマンドバッファ、ゲストイベントログ及びゲストPPRログ)にアクセスするために用いられるポインタ及び制御情報を含む。より具体的には、ゲストMMIO510は、サポートされているゲストオペレーティングシステム毎に、メモリ404のゲスト部分におけるバッファ及びログのアクセスを制御するために使用される値のコピーを含む。例えば、いくつかの実施形態では、IOMMUは、2Nゲストオペレーティングシステムをサポートする(相互作用、通信を処理等することができる)。ここで、N=10、16、又は、別の値であり、ゲストMMIO510は、値の最大2Nのコピーを含み、各々はサポートされているゲストオペレーティングシステムに対するものである。記載された実施形態では、アクセスを制御するために用いられる値は、既存のデバイスのIOMMU MMIOレジスタに記憶されている値と同様であるが、値の別々のセットが、サポートされているゲストオペレーティングシステムごとに保持され、メモリ404のゲストオペレーティングシステムのゲスト部分を指す(既存のデバイスでのIOMMUにおける単一のコピーではない)。
【0041】
図6は、いくつかの実施形態による、ゲストMMIO510に記憶された値を示すブロック図である。
図6の例では、所定のゲストオペレーティングシステムのIOMMU MMIOレジスタの単一の完全なセットの値が、単一の完全な値のセットの上下にある2つの隣接するIOMMU MMIOレジスタのセットの一部の値とともに示されている。
図6は、上述したように、いくつかの実施形態では、IOMMUバッキングストア426が、所定のゲストオペレーティングシステムに関連付けられた値の各セットである複数の個別の値のセットを含むことを説明するために、このように示されている。
図6は例として示されており、いくつかの実施形態では、ゲストMMIO510は、異なる値又は異なる構成の値を記憶する。一般に、ゲストMMIO510及び/又は別のエンティティは、本明細書で説明しているように、メモリのゲスト部分にてバッファ及びログにアクセスするのに十分な情報を記憶する。
【0042】
ゲストMMIO510の値の各セットの値は、通常、ゲストオペレーティングシステムのゲストコマンド(CMD)バッファ、ゲストイベントログ及びゲストPPRログに関連付けられた値にグループ化できる。ゲストコマンドバッファの場合、値には、コマンドテールポインタ600が含まれ、これは、メモリ404の対応するゲスト部分におけるゲストコマンドバッファのテール又は最近書き込まれたエントリを示すポインタ又は他の参照である。言い換えれば、コマンドテールポインタ600は、メモリアドレス等のポインタ又は参照(例えば、コマンドバッファのテール又は最近書き込まれたエントリが位置する場所)を示す、メモリ404のゲスト部分における物理アドレスのビットの一部又は全てを保持している。ゲストコマンドバッファの値には、コマンドヘッドポインタ602も含まれる。これは、コマンドバッファのヘッド又はベース、すなわち、メモリ404の対応するゲスト部分においてコマンドバッファが開始する場所、及び/又は、バッファリングされたコマンドが開始する場所を示すポインタ又は他の参照である。ゲストコマンドバッファの値には、コマンド長604がさらに含まれる。これは、エントリ数やバイト数等のように、コマンドバッファの現在のサイズ又は最大サイズを示す値である。ゲストコマンドバッファの値は、ゲストオペレーティングシステム及び/又はメモリ404の対応するゲスト部分におけるコマンドバッファの構成を示すいくつかのビット(又は、それらの組み合わせ)を含むビットのセット又はシーケンスであるコマンド制御606をさらに含む。例えば、いくつかの実施形態では、コマンド制御606は、特定のコマンドバッファ関連の割り込みが有効であるかどうか、コマンドバッファリング又は処理が有効(又は、無効/停止中)であるかどうか、何れのタイプのコマンドがコマンドバッファに存在し、又は、存在が可能であるか等を示すビットを含む。例えば、いくつかの実施形態では、コマンド制御606は、AMD I/O Virtualization Technology (IOMMU) Specification, rev. 3.00に記載されているものと同様のコマンドバッファの制御値を含み、これは、上記のように、CmdWaitInt、CmdBufRun、CmdWaitInteEn、CmdBufEn、及び/又は、他の値等がある。
【0043】
いくつかの実施形態では、コマンドバッファは、コマンドヘッドポインタ602を使用してコマンドバッファ内の読み取られる次のエントリ/位置を指し、コマンドテールポインタ600を使用して最後/直近に追加されたエントリ/コマンドバッファ内の位置を示すことにより、リングバッファとして実装される(コマンドバッファに1つのコマンドのみが記憶されている場合には、同じエントリ/位置であり得る)。これらの実施形態では、コマンドがエントリから読み取られて処理されると、コマンドヘッドポインタ602は、コマンドヘッドポインタ602とコマンドテールポインタ600が同じエントリを示すまで、1つのエントリだけ進められる。これらの実施形態のいくつかでは、コマンド長604は、コマンドバッファの最大長を記憶する。ポインタを使用してリングバッファを実装することは、当技術分野で一般的に知られており、したがって、本明細書では詳細に説明しない。
【0044】
イベントログの場合、ゲストMMIO510の値、すなわち、イベントテールポインタ608、イベントヘッドポインタ610、イベント長612及びイベント制御614の機能は、上記でコマンドバッファについて説明した機能と同様であるが、これらの値は、メモリ404の対応するゲスト部分のイベントログへのアクセスに対して使用される。同じことがPPRログにも当てはまり、ゲストMMIO510、PPRテールポインタ616、PPRヘッドポインタ618、PPR長さ620及びPPR制御622の値が、上記でコマンドバッファについて説明した機能と同様である。ただし、これらの値は、メモリ404の対応するゲスト部分のPPRログへのアクセスに対して使用される。
【0045】
いくつかの実施形態では、サポートされている数より少ない数のゲストオペレーティングシステム(及び、場合によってははるかに少ない数)が、任意の時点で電子デバイス400において実行されもよい。これらの実施形態のいくつかでは、IOMMUバッキングストア500は、ゲストMMIO510等を記憶するのに十分なスペースを含むように動的に調整される。言い換えると、ゲストオペレーティングシステムが初期化され/アクティブになると、ハイパーバイザ及び/又は別のエンティティは、ゲストオペレーティングシステムのIOMMU MMIOレジスタ値を記憶するために、IOMMUバッキングストア500(つまり、ゲストMMIO510)におけるスペースを割り当て、追加又はアクティブ化することができる。これらの実施形態のいくつかでは、IOMMUバッキングストア500は、電子デバイス400内に未だ存在しない(すなわち、初期化されていない)仮想マシンに対しては、追加的に割り当てられた空/未使用スペースを有しない。
【0046】
いくつかの実施形態では、ハイパーバイザは、IOMMUバッキングストア500に対して少なくともいくつかの初期化操作を実行する。例えば、いくつかの実施形態では、ハイパーバイザは、IOMMUバッキングストアを記憶するために、メモリ、例えば、メモリの連続又は分散したページを、メモリ404に割り当てる。上記のように、メモリ404は、データ及び情報を記憶するために様々な機能ブロック(例えば、コア418~420等)によって使用される電子デバイス400内の汎用メモリであり、IOMMU内の単なるローカルメモリではない。したがって、この動作は、IOMMUバッキングストアを記憶するために、ハイパーバイザが電子デバイス400の「メイン」メモリ内にスペースを割り当てることを含む。別の例として、いくつかの実施形態では、ハイパーバイザは、IOMMUを介して、各アクティブゲストオペレーティングシステムのバッキングストア内のIOMMU MMIOレジスタのコピーに初期値を書き込む。したがって、ハイパーバイザは、ゲストオペレーティングシステムの起動時等に、IOMMUバッキングストアのIOMMU MMIOレジスタの各々のコピーに各アクティブゲストオペレーティングシステムのポインタの初期値と制御値を書き込む。
【0047】
いくつかの実施形態では、利用可能なIOMMU MMIOレジスタのサブセットのみが、IOMMUバッキングストア内のIOMMU MMIOレジスタのコピーに含まれる。これらの実施形態では、他のレジスタがIOMMU自体によって提供されてもよい。例えば、いくつかの実施形態では、IOMMU制御値(例えば、IOMMUの有効化/無効化等)、ページテーブルのベースアドレス等を記憶するIOMMU内のレジスタは、IOMMUによって提供される。一般に、ゲストオペレーティングシステムのメモリの一部のバッファ及びログへのアクセスに使用されないIOMMU MMIOレジスタはコピーとして表示されないが、代わりに、各レジスタの単一のコピーがIOMMUによって提供される。これらの実施形態のいくつかでは、ハイパーバイザは、ゲストオペレーティングシステム用にこれらのIOMMUレジスタをエミュレートするが、アクセスは、IOMMU内のレジスタ用にIOMMUによって受信され、処理される。
【0048】
図5に戻ると、ゲストメモリ512は、ゲストオペレーティングシステムのためのゲストイベントログ514、ゲスト周辺ページ要求(PPR)ログ516、及び、ゲストコマンドバッファ518を含む。概して、ゲストイベントログ514、ゲストPPRログ516、及び、ゲストコマンドバッファ518は、IOMMU及び/又はゲストオペレーティングシステムによってアクセスされる、対応するイベント、PPR要求及びコマンドを記憶するために用いられるメモリ構造(例えば、リスト、テーブル、バッファ等)である。例えば、ゲストイベントログ514は、いくつか(例えば、24個、50個等)のエントリを含むテーブル又はリングバッファであってもよく、各エントリは、対応するゲストオペレーティングシステムによって処理されることになるIOMMU内で発生した特定のイベントを表す情報(例えば、ビットのパターン)を保持するためのものである。動作中、IOMMUは、ゲストメモリ512内のゲストイベントログ514及びゲストPPRログ516の対応するログを介して、ゲストオペレーティングシステムにイベント及びPPRを通信する。さらに、ゲストオペレーティングシステムは、ゲストメモリ512内のゲストコマンドバッファ518における対応するコマンドバッファを介して、IOMMUにコマンドを通信する。
【0049】
いくつかの実施形態では、電子デバイス400でアクティブな各ゲストオペレーティングシステムは、そのゲストオペレーティングシステムによって用いられ、IOMMUによってアクセス可能なゲストイベントログ、ペリフェラルページリクエストログ及びゲストコマンドバッファを含む、メモリの対応する別々のゲストの部分(すなわち、メモリ404におけるいくつかのページ)に関連する。このことは、
図5に、ゲストメモリ512の後ろの追加のゲストメモリ520~522として示されている。
【0050】
ハイパーバイザメモリ524は、デバイステーブル526を含む。一般に、デバイステーブル526は、電子デバイスに関連及び/又は結合するデバイス(実際の/物理的なデバイス又は仮想デバイスであり得る)に関するデバイス関連情報が記憶されるテーブルである。デバイステーブル526は、エントリのセットを含み、各エントリは、ページテーブル及び割り込みテーブルへのポインタ、制御及び構成値、機能インジケータ、モードインジケータ、ドメインID、セキュリティ情報及び設定等のように、対応するデバイスに関する情報を記憶するのに使用可能である。さらに、記載された実施形態では、既存のデバイステーブルとは異なり、デバイステーブル526の各エントリは、デバイスID及びデバイスと通信する、関与する、又は、他の方法で関連するゲストオペレーティングシステムのゲスト識別子を含む。動作中、デバイスに関する情報を決定するためにデバイステーブルを用いることに加えて、IOMMUは、デバイスID及び/又はゲスト識別子を使用して、ゲストデバイスIDをホストデバイスIDに翻訳又は変換する。
【0051】
いくつかの実施形態では、IOMMUバッキングストア500、ゲストメモリ512及びハイパーバイザメモリ524の一部/又は全ては、連続的ではなく、その代わりに、メモリの異なる領域又は位置に記憶される。例えば、ゲストイベントログ514のベースアドレス(したがって、ゲストイベントログ自体)は、ゲストPPRログ516から離れたメモリ内に配置され得る。したがって、ゲストイベントログ514は、
図5に示すように、ゲストPPRログ516に隣接しない場合がある。
【0052】
いくつかの実施形態では、IOMMUは、IOMMUによってアクセスされるメモリにおける様々なデータ及び情報のメモリ内の位置へのポインタ、その参照、及び/又は、その他の指標を含むプライベートアドレスマップを含む。例えば、いくつかの実施形態では、IOMMUプライベートアドレスマップは、ゲストオペレーティングシステムのIOMMU MMIOレジスタの個々のコピーへのポインタ若しくは参照、及び/又は、IOMMUバッキングストア500内のIOMMU MMIOレジスタのコピーのセットの開始点/ベースアドレスを含む。これらの実施形態では、メモリ内のデータ及び情報にアクセスする前に、IOMMUは、データ及び情報の場所についてプライベートアドレスマップ内でルックアップを実行する。
【0053】
いくつかの実施形態では、IOMMUバッキングストア500及び/又はその一部(制御ビット等)は、IOMMUを介して(例えば、IOMMUにリクエストを送信することによって)電子デバイス400の他のエンティティによってアクセスされるか、他のエンティティによってアクセスすることができない。例えば、IOMMUバッキングストア500におけるデータ及び情報の少なくとも一部は、他のエンティティによって、対応するIOMMU MMIOレジスタへの書き込み及びそこからの読み取りを介してアクセスされ得る。
【0054】
(IOMMUとゲストオペレーティングシステムの通信)
記載された実施形態では、IOMMU(例えば、IOMMU424)は、IOMMU(又は、それによってサービスされるIOデバイス)とゲストオペレーティングシステムとの間の通信を処理する。
図7は、いくつかの実施形態による、IOMMU702によって処理される、ゲストオペレーティングシステム700とIOMMU702との間の通信を示すブロック図である。
図7には、いくつかの要素が特定の構成で示されているが、他の実施形態では、異なる数又は構成の要素を用いる。一般に、記載された実施形態では、IOMMU702は、本明細書に記載された動作を可能にするのに十分な要素を含むか、それらにアクセスする。
図7では、いくつかの要素が点線/点状で示されている。これらの要素は、メモリに(例えば、IOMMUバッキングストア500に、ゲストメモリ512に等)記憶され、IOMMU702、ゲストオペレーティングシステム700及び/又は他のエンティティによって典型的なメモリアクセス技術を用いてアクセスされるログ、バッファ等である。いくつかの実施形態では、ゲストオペレーティングシステム700、IOMMU702及びハイパーバイザ704は、
図3のゲストオペレーティングシステム302、IOMMU312及びハイパーバイザ306と同様に構成されるが、これは必須要件ではない。
【0055】
図7に見られるように、既存システムについて
図2に示すものとは異なり、記載された実施形態では、IOMMU702とゲストオペレーティングシステム700は、互いにより直接的に通信する。言い換えれば、IOMMU702とゲストオペレーティングシステム700は、メモリの(すなわちゲストオペレーティングシステム700のメモリのゲスト部分(例えば、ゲストメモリ428)の)ゲストイベントログ514、ゲストPPRログ516及びゲストコマンドバッファ(BUFF)518を介して互いに通信する。さらに、ゲストオペレーティングシステム700及びIOMMU702は、ゲストコントロール508及びゲストMMIO510を用いて、通信の実行方法を指示する。例えば、いくつかの実施形態では、IOMMU702は、ゲストMMIO510におけるポインタを用いて、ゲストオペレーティングシステム700のためのゲストイベントログ514、ゲストコマンドバッファ518及びゲストPPRログ516のメモリにおける位置を決定する。ハイパーバイザ704は、これらの通信を完了するための動作の一部又は全てに介入せず、それ以外の方法で関与しない。例えば、ハイパーバイザ704は、これらの通信のためのドメインID及びデバイスIDの変換、ゲストMMIO510のポインタへのアクセス、並びに/又は、メモリのゲスト部分におけるバッファ及びログへのアクセス等の動作を実行しない。代わりに、IOMMU702がこれらの動作を実行する。IOMMU702は、ドメインID及びデバイスIDを変換し、ゲストバッファ及びログ等にアクセスするので、記載された実施形態は、ゲストオペレーティングシステム700とIOMMU702との間の通信の少なくとも一部を処理するためにハイパーバイザ704を用いることを回避する。このことは、通信がより迅速に完了し、プロセッサ402及びメモリ404等への負荷が軽減されることを意味し得る。
【0056】
動作中、コマンドを例として使用すると、ゲストオペレーティングシステム700は、invalidate_IOMMU_pagesコマンドをゲストコマンドバッファ518に書き込む。コマンドは、IOMMU702によって処理されると、IOMMU702に、コマンド内のドメインIDで指定されたIOMMU変換キャッシュ内のエントリの範囲を無効にさせる。言い換えると、ゲストオペレーティングシステムは、メモリの対応するゲスト部分においてメモリ書き込みを実行し、ゲストコマンドバッファ518における次のオープン/利用可能なエントリがinvalidate_IOMMU_pagesコマンドの情報(すなわち、コマンドを表すビット)を含むように更新する。次に、ゲストオペレーティングシステム700は、書き込みコマンドをIOMMUに送信し、対応するIOMMU MMIOレジスタにおけるコマンドバッファテールポインタ(例えば、コマンドテールポインタ600)を更新して(例えば、進めて)、ゲストオペレーティングシステム700がコマンドバッファにコマンドを書き込んだことを示す。IOMMU702は、ゲストオペレーティングシステム700によるコマンドバッファテールポインタの書き込みを、例えば、対応するゲストコマンドバッファにおけるアドレスへの書き込みの監視(snooping)、バッファテールポインタの値の変化の検出、ゲストオペレーティングシステム700からの書き込みコマンドの受信等を介して検出する。コマンドバッファテールポインタの書き込みを検出すると、IOMMU702は、コマンドバッファヘッドポインタ(例えば、コマンドヘッドポインタ602)の値を用いて、メモリのゲスト部分におけるコマンドバッファからコマンドを取得し、コマンドを処理のために(例えば、コマンド内のゲストドメインIDに関連付けられたホストドメインIDを置換える等)準備する。次に、IOMMU702は、コマンドを処理し、これにより、IOMMU702に、ホストドメインIDによって示されるIOMMU702の変換キャッシュにおけるエントリの範囲を無効化させる。IOMMU702は、ゲストPPRログ516及びゲストイベントログ514へのIOMMU702の書き込みに対して少なくともいくつかの同様の動作を実行するが、逆に、IOMMU702が通常これらのログを書き込み、ゲストオペレーティングシステム700がログを読み取る。
【0057】
ハイパーバイザ704は、ゲストオペレーティングシステム700とIOMMU702との間の通信の特定の部分、例えば、ゲストドメインIDのホストドメインIDへの変換、には関与しないが、ハイパーバイザ704とゲストオペレーティングシステム700及び/又はIOMMU702は、ゲストオペレーティングシステム700とIOMMU702との間の通信に関連付けられた通信を、別々に交換することができる。又は、ハイパーバイザ704は、他の方法で、通信がゲストオペレーティングシステム700及び/又はIOMMU702によって適切に処理されることを確保することに関与し得る。例えば、ハイパーバイザ704は、IOMMU702又はゲストオペレーティングシステム700が指定された動作(例えば、バッファ又はログへの書き込み)を実行したことを直接的に(例えば、通信を介して)又は間接的に(例えば、メモリアクセスの監視を介して)判定することができ、また、ゲストオペレーティングシステム700及び/又はIOMMU702への割り込みのシグナリング、フラグとして機能する共有メモリ位置の更新等の動作を実行し得る。上記のように、ハイパーバイザ704はIOMMUバッキングストアを初期化することもできる。
【0058】
(メモリのゲスト部分におけるゲストバッファ及びログへのIOMMUのアクセスのプロセス)
説明された実施形態では、IOMMU(例えば、IOMMU702)は、IOMMUとゲストオペレーティングシステム(例えば、ゲストオペレーティングシステム700)との間で情報を通信するために使用されるメモリのゲスト部分におけるゲストバッファ及びログにアクセスする(例えば、読み取り及び書き込み)ための動作を実行する。例えば、いくつかの実施形態では、IOMMUは、ゲストオペレーティングシステムのメモリの各々のゲスト部分におけるゲストコマンドバッファ、ゲストイベントログ及び/又はゲスト周辺ページ要求(PPR)ログにおけるエントリにアクセスする。ハイパーバイザが、メモリアクセス動作を処理すること無しに、メモリの各ゲストオペレーティングシステムの部分におけるゲストバッファ及びログに、IOMMUが通常のメモリアクセス動作を使用してアクセスするという点において、IOMMUは、各ゲストオペレーティングシステムのゲストバッファとログに直接アクセスする。
図8は、いくつかの実施形態による、ゲストオペレーティングシステムのためのメモリのゲスト部分におけるバッファ又はログにIOMMUがアクセスする間のプロセスを示すフローチャートを示す。
図8に示す動作は、いくつかの実施形態によって実行される動作の一般的な例として示されていることに留意されたい。他の実施形態によって実施される動作には、異なる動作、異なる順序で実施される動作、及び/又は、異なるエンティティ若しくは機能ブロックによって実施される動作が含まれる。
【0059】
図8に示す動作の範囲は一般的なものである。より具体的な例が
図9~
図10に示されており、IOMMUがゲストオペレーティングシステムのためのメモリのゲスト部分におけるバッファ又はログから読み取りを行うこと(
図9)、及び、IOMMUがゲストオペレーティングシステムのためのメモリのゲスト部分におけるバッファ又はログに書き込みを行うこと(
図10)を含む。
【0060】
図8に示すように、IOMMUは、ゲストオペレーティングシステムのためのメモリのゲスト部分におけるゲストバッファ又はログにおいて情報へのアクセスを実行し、バッファ又はログは、IOMMUとゲストオペレーティングシステムとの間で情報を通信するために使用される(ステップ800)。この動作では、IOMMUが最初にアクセスを実行することを決定する。例えば、IOMMUは、情報がゲストオペレーティングシステム又は別のエンティティによってゲストバッファ又はログに書き込まれたという指標を受信した後、特定のゲストバッファ又はログから情報が読み取られることを決定することができる。次に、IOMMUは、メモリのゲスト部分におけるゲストバッファ又はログのアドレス(つまり、アクセスされるエントリの特定のメモリ位置)を決定する。次に、IOMMUは、メモリのゲスト部分におけるバッファ又はログへのアクセスを実行する。バッファ又はログにアクセスするために、IOMMUは、バッファ又はログのアドレスを用いて一般的なメモリアクセス動作を実行する。IOMMUは、それ自身のバッファとログのセット(例えば、IOMMU PPRログ208等のように、IOMMUバッファ及びログ)を使用する代わりに、メモリのゲスト部分のバッファ又はログに直接アクセスすることにより、ハイパーバイザの関与無しにゲストオペレーティングシステムとの通信を可能にする。
【0061】
図9は、いくつかの実施形態による、ゲストオペレーティングシステムがメモリのゲスト部分におけるゲストバッファ又はログに書き込みを行い、そこからIOMMUが読み取りを行う間のプロセスを示すフローチャートを示す。
図9に示す動作は、いくつかの実施形態によって実施される動作の一般的な例として示されていることに留意されたい。他の実施形態によって実施される動作には、異なる動作、異なる順序で実施される動作、及び/又は、異なるエンティティ若しくは機能ブロックによって実施される動作が含まれる。例えば、
図9は、例としてゲストコマンドバッファ内のコマンドを使用するが、他の実施形態では、IOMMUは、ゲストPPRログ又はゲストイベントログ等の異なるバッファ又はログから読み取る。これらの実施形態では、IOMMUは、異なるゲストバッファ又はログを読み取るための同じ動作の一部又は全てを実行することができる。
【0062】
図9の動作はゲストオペレーティングシステム(例えば、ゲストオペレーティングシステム700)が、メモリ(例えば、ゲストメモリ428)のゲスト部分のコマンドバッファ(例えば、ゲストコマンドバッファ518)にコマンドを書き込むときに開始する(ステップ900)。例えば、いくつかの実施形態では、ゲストコマンドバッファは、いくつかのエントリを含むメモリのゲスト部分における循環バッファであり、この動作は、ゲストオペレーティングシステムがコマンド(すなわち、コマンドを表すビットのシーケンス)をゲストコマンドバッファにおける次に使用可能なエントリに書き込むことを含む。
【0063】
ゲストオペレーティングシステムが、IOMMU(例えば、IOMMU702)による処理を必要とするコマンドをゲストコマンドバッファに追加したため、ゲストオペレーティングシステムは、IOMMUにコマンドを通知する。より具体的には、ゲストオペレーティングシステムは、コマンドバッファテールポインタを更新するための書き込み要求を送信し、書き込み要求は、コマンドバッファテールポインタが記憶されているIOMMU MMIOレジスタのゲスト仮想アドレスに向けられている(ステップ902)。記載された実施形態では、ゲストオペレーティングシステムは、IOMMU MMIOレジスタにアクセスするために、ローカル又は「仮想」アドレスを使用する(実際のIOMMUアドレスを認識しなくてもよい)。ゲスト仮想アドレスは、ゲストオペレーティングシステムを実行するプロセッサ内のメモリ管理ユニット(MMU)によって、MMIOレジスタが配置されているIOMMUにおけるシステム物理アドレス(つまり、IOMMU MMIOアドレス)に(例えば、ページテーブルウォークを、ゲストオペレーティングシステム等のページテーブルにおいて実行することによって)変換される。上記のように、IOMMUは、IOMMU MMIOレジスタを仮想化するため、MMUが使用するシステム物理アドレスは、ゲストオペレーティングシステムのIOMMU MMIOレジスタのコピーが配置されているアドレスではなく、代わりに、IOMMUによってMMIOレジスタのアクセスとして認識されるIOMMUのインタフェース/アパーチャにおけるアドレスである。したがって、MMUにおける変換に続いて、MMUは、ゲスト仮想アドレスに関連付けられたIOMMU MMIOアドレス(すなわち、システム物理アドレス)でIOMMUに書き込み要求を転送する(ステップ904)。
【0064】
IOMMU MMIOアドレスは、単に、ゲストオペレーティングシステムからアクセス要求を受信するためにIOMMUによって提供されるアドレスであるため、IOMMUは、書き込み要求に基づいて、ゲストオペレーティングシステムのためのコマンドバッファテールポインタのコピーが記憶されているメモリ内の物理アドレスを決定するための変換も実行する(ステップ906)。この動作中、IOMMUは、IOMMUバッキングストアにおいてIOMMU MMIOレジスタの何れのコピーがアクセスされるかを示すゲストオペレーティングシステムの識別情報を使用して、メモリ内の物理アドレスを決定する。このプロセスでは、IOMMUは、先ず、ゲストオペレーティングシステムの識別子とMMUによって提供されるシステムの物理アドレスに基づいて、アルゴリズムやテーブル等を使用して、ゲストオペレーティングシステムのIOMMU MMIOレジスタのコピーのIOMMU仮想アドレスを計算する。次に、IOMMUは、1つ以上のページテーブルを使用して、IOMMU仮想アドレスをシステム物理アドレスに変換する。ここで、ゲストオペレーティングシステムのIOMMU MMIOレジスタのコピーがIOMMUバッキングストアに記憶される。
【0065】
次に、IOMMUは、メモリ内の物理アドレスに、書き込み要求からのデータを記憶し、それによって、ゲストオペレーティングシステムのためのコマンドバッファテールポインタのコピーを更新する(ステップ908)。言い換えると、IOMMUは、コマンドバッファテールポインタ、エントリ識別子、実行カウント等の更新されたアドレスのうち1つ以上のビット等のデータを、ゲストオペレーティングシステムに関連付けられたコマンドバッファテールポインタのコピーがIOMMUバッキングストアに保存されているメモリ位置に記憶する。この更新により、コマンドバッファテールポインタは、コマンドがゲストコマンドバッファに書き込まれ、したがって、IOMMUによる処理を待機していることを直接又は間接的に示す。いくつかの実施形態では、IOMMU、ゲストオペレーティングシステム、及び/又は、別のエンティティは、コマンドがゲストコマンドバッファにおいて処理を待機していること、又は、ゲストオペレーティングシステムがコマンドを提供したことを示すために、他のポインタ又はインジケータを設定する。例えば、いくつかの実施形態では、IOMMUは、サポートされるゲストオペレーティングシステム毎に1つのコマンド待機ビットのセットを含み、コマンド待機ビットは、コマンドがゲストコマンドバッファにおいて処理待機中であることを示すために、ゲストオペレーティングシステムに対してセット(又は、クリア)される。
【0066】
IOMMUは、書き込み要求を検出すること(又は、他の方法でコマンドが処理を待機していると判断すること)に基づいて、コマンドバッファヘッドポインタのコピーからのデータを使用して、メモリのゲスト部分におけるゲストコマンドバッファからコマンドを取得する(ステップ910)。この動作では、IOMMUは、直接又は間接的に、コマンドバッファヘッドポインタのコピーからのデータを、場合によっては、バッキングストアからのゲストオペレーティングシステムのための、IOMMU MMIOレジスタのコピーからの他のポインタ又は他の情報(例えば、ゲストコマンドバッファベースのポインタ等)と共に使用して、コマンドが記憶されているゲストコマンドバッファ内のエントリのシステム物理アドレスを決定する。この動作のために、IOMMUは、アドレスを決定すると共に、ゲストコマンドバッファ内のエントリのシステム物理アドレスを決定するための変換等を(例えば、対応するページテーブルを使用して)実行することができる。次に、IOMMUは、システムの物理アドレスからコマンドを読み取る。これは、IOMMUがメモリのゲスト部分における特定のアドレスへのアクセスを許容されていることを前提として、オペレーティングシステム、ハイパーバイザ、メモリ管理ユニット等が、メモリ読み取りの発生を許容することを含み得る。この動作の完了時に、IOMMUは、メモリのゲスト部分から取得したコマンドを有し(例えば、コマンドの個々のビットを有し)、したがって、コマンドを実行する準備ができている。
【0067】
次に、IOMMUは通信を処理する(ステップ912)。この動作の場合、いくつかの実施形態では、IOMMU内のコマンド処理ロジックがコマンドを処理し、IOMMUにコマンドの動作を実行させる。
図9に示されていないが、コマンドを処理した後、IOMMUは、コマンドが処理されたことを示すようにシステム状態を更新する。例えば、いくつかの実施形態では、IOMMUは、IOMMUバッキングストア内のゲストオペレーティングシステムの対応するIOMMU MMIOレジスタのコピーにおけるコマンドバッファヘッドポインタを更新し、IOMMUバッキングストア内のゲストオペレーティングシステムの他のコマンドバッファ情報を更新することができる。
【0068】
図10は、いくつかの実施形態による、メモリのゲスト部分におけるゲストバッファ又はログにIOMMUが書き込みを行い、そこからゲストオペレーティングシステムが読み取りを行う間のプロセスを示すフローチャートである。
図10に示す動作は、いくつかの実施形態によって実行される動作の一般例として示されていることに留意されたい。他の実施形態によって実施される動作には、異なる動作、異なる順序で実施される動作、及び/又は、異なるエンティティ若しくは機能ブロックによって実施される動作が含まれる。例えば、
図10は、例としてゲストイベントログ内のイベントを使用するが、他の実施形態では、IOMMUは、ゲストPPRログ又はゲストコマンドバッファ等の異なるバッファ又はログに書き込む。これらの実施形態では、IOMMUは、異なるゲストバッファ又はログに書き込むための同じ動作の一部又は全てを実行することができる。
【0069】
図10の動作は、IOMMU(例えば、IOMMU702)が、ゲストオペレーティングシステム(例えば、ゲストメモリ428)のメモリのゲスト部分におけるゲストイベントログ(例えば、ゲストイベントログ514)のシステム物理アドレスを決定するときに開始する(ステップ1000)。この動作では、IOMMUは、ゲストオペレーティングシステムの識別子(例えば、ドメインID)に基づいて、ゲストイベントログのテールポインタを保持するIOMMUバッキングストアにおけるゲストオペレーティングシステムのIOMMU MMIOレジスタのコピーのシステム物理アドレスを計算、取得、又は、他の方法で決定する。次に、システムは、システムの物理アドレスからゲストイベントログのテールポインタを取得し、直接又は間接的に、ゲストイベントログのテールポインタの値(及び、場合によっては、イベントログベースポインタ等のゲストオペレーティングシステムのIOMMU MMIOレジスタの他のコピーからの値)をゲストイベントログのシステム物理アドレスとして使用する。いくつかの実施形態では、IOMMUは、イベントログテールポインタの値に基づいてシステム物理アドレスを計算するための、及び/又は、1つ以上のページテーブルを用いてイベントログテールポインタの値を変換するための1つ以上の動作を実行する。
【0070】
次に、IOMMUは、システム物理アドレスを使用して、ゲストオペレーティングシステムのメモリのゲスト部分におけるゲストイベントログにイベントを書き込む(ステップ1002)。例えば、いくつかの実施形態では、ゲストコマンドログは、いくつかのエントリを含むメモリのゲスト部分の循環バッファであり、この動作は、IOMMUがイベント(すなわち、イベントを表すビットのシーケンス)をゲストイベントログにおける次に使用可能なエントリに書き込むことを含む。IOMMUは、一般的なメモリアクセス動作を使用して、イベントをゲストイベントログに書き込む。いくつかの実施形態では、メモリのゲスト部分におけるシステム物理アドレスへの書き込みは、IOMMUがメモリのゲスト部分における特定のアドレスへのアクセスを許容されていることを前提として、オペレーティングシステム、ハイパーバイザ、メモリ管理ユニット等が、メモリ書き込みの発生を許容することを含み得る。
【0071】
IOMMUが、ゲストオペレーティングシステムによる処理を必要とするイベントをゲストイベントログに追加したため、IOMMUは、ゲストオペレーティングシステムにイベントを通知する。いくつかの実施形態では、ゲストオペレーティングシステムに通知することは、IOMMUバッキングストア内のゲストオペレーティングシステムのイベントログテールポインタのコピーを更新することと、ゲストオペレーティングシステムに通知するためにゲストオペレーティングシステムに割り込みを送信することと、の両方を含む。したがって、IOMMUは、IOMMUバッキングストア内のゲストオペレーティングシステムのイベントログテールポインタのコピーの物理アドレスを決定する(ステップ1004)。この動作中、IOMMUは、IOMMUバッキングストア並びに1つ以上のIOMMUプライベートアドレステーブル及び/又はページテーブルにおいてIOMMU MMIOレジスタの何れのコピーがアクセスされるかを示すゲストオペレーティングシステムの識別情報を使用して、メモリ内の物理アドレスを決定する。次に、IOMMUは、物理アドレスにおいて、ゲストオペレーティングシステムのイベントログテールポインタのコピーを更新するデータを記憶する(ステップ1006)。言い換えると、IOMMUは、イベントログテールポインタ、エントリ識別子、実行カウント等の更新されたアドレスのうち1つ以上のビット等のデータを、ゲストオペレーティングシステムが関連付けられたイベントログテールポインタのコピーがIOMMUバッキングストアに保存されているメモリ位置に記憶する。この更新により、イベントログのテールポインタは、イベントがイベントログに書き込まれ、したがって、ゲストオペレーティングシステムによる処理を待機していることを直接又は間接的に示す。
【0072】
また、IOMMUは、ゲストオペレーティングシステムに割り込みを送信し、割り込みは、イベントがゲストイベントログで待機していることを示す(ステップ1008)。この動作では、IOMMUは、ゲストオペレーティングシステムに関連付けられた仮想高度プログラマブル割り込みコントローラ(vAPIC)等を例として使用することにより、IOMMUと適切なゲストオペレーティングシステムとの間で割り込みが受け渡される内部割り込みメカニズムを使用することができる。
【0073】
割り込みの受信に応じて、ゲストオペレーティングシステムは、イベントログヘッドポインタからデータを読み取るための読み取り要求をIOMMUに送信する。読み取り要求は、イベントログヘッドポインタが記憶されているIOMMU MMIOレジスタのゲスト仮想アドレスに向けられる(ステップ1010)。記載された実施形態では、ゲストオペレーティングシステムは、IOMMU MMIOレジスタにアクセスするために、ローカル又は「仮想」アドレスを使用する(実際の及び/又は仮想のIOMMUアドレスを認識しなくてもよい)。ゲスト仮想アドレスは、ゲストオペレーティングシステムを実行するプロセッサにおけるメモリ管理ユニット(MMU)によって、MMIOレジスタが配置されているIOMMU内のシステム物理アドレス(つまり、IOMMU MMIOアドレス)に(例えば、ゲストオペレーティングシステムのページテーブルにおいてページテーブルウォークを実行することによって等)変換される。上記のように、IOMMUがIOMMU MMIOレジスタを仮想化するため、MMUが使用するシステム物理アドレスは、ゲストオペレーティングシステムのIOMMU MMIOレジスタのコピーが配置されているアドレスではなく、MMIOレジスタのアクセスとしてIOMMUによって認識されるIOMMUのインタフェース/アパーチャにおけるアドレスである。したがって、MMUにおける変換に続いて、MMUは、ゲスト仮想アドレスに関連付けられたIOMMU MMIOアドレス(すなわち、システム物理アドレス)でIOMMUに読み取り要求を転送する(ステップ1012)。
【0074】
IOMMU MMIOアドレスは、単に、ゲストオペレーティングシステムからのアクセス要求を受信するためにIOMMUによって提供されるアドレスであるため、IOMMUは、読み取り要求に基づいて、ゲストオペレーティングシステムのためのイベントログヘッドポインタのコピーが記憶されるメモリ内の物理アドレスを決定するための変換も実行する(ステップ1014)。この動作中、IOMMUは、IOMMUバッキングストアにおいてIOMMU MMIOレジスタの何れのコピーがアクセスされるかを示すゲストオペレーティングシステムの識別情報を使用して、メモリ内の物理アドレスを決定する。このプロセスでは、IOMMUは、先ず、ゲストオペレーティングシステムの識別子とMMUによって提供されるシステム物理アドレスに基づいて、アルゴリズム、テーブル等を使用して、ゲストオペレーティングシステムのIOMMU MMIOレジスタのコピーのIOMMU仮想アドレスを計算する。次に、IOMMUは、1つ以上のページテーブルを使用して、IOMMU仮想アドレスを、システム物理アドレスに変換する。ここで、ゲストオペレーティングシステムのIOMMU MMIOレジスタのコピーは、IOMMUバッキングストアに記憶される。
【0075】
次に、IOMMUは、メモリ内の物理アドレスのメモリ位置から、読み取り要求のデータを読み取る。言い換えると、IOMMUは、イベントログヘッドポインタ、エントリ識別子、実行カウント等のアドレスのうち1つ以上のビット等のデータを、ゲストオペレーティングシステムに関連付けられたイベントログヘッドポインタのコピーがIOMMUバッキングストアに保存されているメモリ位置において読み取る。イベントログヘッドポインタは、ゲストオペレーティングシステムによる処理を待機しているゲストイベントログに次に書き込まれるイベントを直接又は間接的に示す。いくつかの実施形態では、IOMMU、ゲストオペレーティングシステム、及び/又は、別のエンティティは、イベントがゲストイベントログで処理を待機していること又はIOMMUがイベントを提供したことを示すために、他のポインタ又はインジケータを設定する。例えば、いくつかの実施形態では、ゲストオペレーティングシステム及び/又はハイパーバイザは、サポートされるゲストオペレーティングシステム毎に1つのイベント待機ビットのセットを含み、イベント待機ビットは、イベントがゲストイベントログにおいて待機中であることを示すために、ゲストオペレーティングシステムに対してセット(又は、クリア)される。次に、IOMMUは、イベントログヘッドポインタからゲストオペレーティングシステムにデータを返す(ステップ1016)。
【0076】
次に、ゲストオペレーティングシステムは、ゲストイベントログ内のイベントを処理するための1つ以上の後続の動作を実行するためにデータを使用する(ステップ1018)。例えば、いくつかの実施形態では、ゲストオペレーティングシステムのイベントログヘッドポインタのコピーは、イベントログのエントリが配置されているメモリのゲスト部分の場所のアドレスを記憶する。ゲストオペレーティングシステムは、直接又は間接的にアドレスを使用して、イベントを処理する前にゲストイベントログからイベントを取得する。
【0077】
いくつかの実施形態では、電子デバイス(例えば、電子デバイス400及び/又はその一部)は、非一時的なコンピュータ可読記憶媒体に記憶されたコード及び/又はデータを使用して、本明細書で説明する動作の一部又は全てを実行する。より具体的には、電子デバイスは、コンピュータ可読記憶媒体からコード及び/又はデータを読み出し、説明した動作を実行する際にコードを実行し及び/又はデータを使用する。コンピュータ可読記憶媒体は、電子デバイスによって使用されるコード及び/又はデータを記憶する任意のデバイス、媒体又はこれらの組み合わせであってもよい。例えば、コンピュータ可読記憶媒体は、フラッシュメモリ、ランダムアクセスメモリ(例えば、eDRAM、RAM、SRAM、DRAM、DDR4 SDRAM等)、読み出し専用メモリ(ROM)、及び/又は、磁気若しくは光学記憶媒体(例えば、ディスクドライブ、磁気テープ、CD、DVD等)を含む揮発性メモリ及び/又は不揮発性メモリを含むことができるが、これらに限定されない。
【0078】
いくつかの実施形態では、1つ以上のハードウェアモジュールは、本明細書に説明される動作を実行する。例えば、ハードウェアモジュールは、1つ以上のプロセッサ/コア/中央処理ユニット(CPU)、特定用途向け集積回路(ASIC)チップ、ニューラルネットワークプロセッサ若しくはアクセラレータ、フィールドプログラマブルゲートアレイ(FPGA)、計算ユニット、組み込みプロセッサ、グラフィックスプロセッサ(GPU)/グラフィックスコア、パイプライン、加速処理ユニット(APU)、スパース性監視装置、機能ブロック、及び/又は、他のプログラマブルロジックデバイスを含めることができるが、これらに限定されない。このようなハードウェアモジュールが起動されると、ハードウェアモジュールは、動作の一部又は全てを実行する。いくつかの実施形態では、ハードウェアモジュールは、命令(プログラムコード、ファームウェア等)を実行することによって動作を実行するように構成された1つ以上の汎用回路を含む。
【0079】
いくつかの実施形態では、本明細書で説明する構造及びメカニズム(例えば、電子デバイス400、IOMMU424、及び/又は、これらの一部)の一部又は全てを表すデータ構造は、電子デバイスによって読み出すことができ、構造及びメカニズムを含むハードウェアを製造するために直接的又は間接的に使用することができるデータベース又は他のデータ構造を含む非一時的なコンピュータ可読記憶媒体に記憶されている。例えば、データ構造は、Verilog又はVHDL等の高レベル設計言語(HDL)におけるハードウェア機能の動作レベル記述又はレジスタ転送レベル(RTL)記述であってもよい。記述は、合成ツールにより読み出されてもよく、合成ツールは、記述を合成して、上述した構造及びメカニズムを含むハードウェアの機能を表すゲート/回路要素のリストを含むネットリストを、合成ライブラリから生成することができる。次に、ネットリストは、配置され、ルーティングされ、マスクに適用される幾何学形状を記述するデータセットが生成され得る。次いで、上述した構造及びメカニズムに対応する1つ以上の半導体回路(例えば、集積回路)を製造するために、様々な半導体製造ステップでマスクが使用され得る。或いは、コンピュータアクセス可能記憶媒体上のデータベースは、必要に応じて、ネットリスト(合成ライブラリの有無にかかわらず)若しくはデータセット又はグラフィックデータシステム(GDS)IIデータであってもよい。
【0080】
本明細書では、変数又は不特定の値(すなわち、値の特定のインスタンスを持たない、値の一般的な説明)は、N等の文字で表されている。同様の文字が本説明の他の箇所で使用され得るが、本明細書で使用されるように、各場合における変数及び不特定の値は、必ずしも同じではなく、すなわち、一般的な変数及び不特定値の一部又は全てに対して、異なる変数量及び値が存在してもよい。言い換えると、この説明において変数及び不特定値を表すために使用されるN及び他の文字は、必ずしも互いに関連するわけではない。
【0081】
本明細書で使用される「等(et cetra)」又は「等(etc.)」という表現は、「及び/又は」のケース、すなわち、「等」が関連するリスト内の要素のうち「少なくとも1つ」に相当するものを提示することを意図している。例えば、「電子デバイスは、第1の動作、第2の動作等を実行する」という文において、電子デバイスは、第1の動作、第2の動作、及び、他の動作のうち少なくとも1つを実行する。さらに、「等」に関連するリスト内の要素は、一組の実施例の中の単なる例であり、実施例の少なくともいくつかは、いくつかの実施形態では現れない場合がある。
【0082】
実施形態の上記の説明は、例示及び説明のためにのみ提示されている。これらは、網羅的であること、又は、実施形態を開示された形態に限定することを、意図していない。したがって、当業者は、多くの変更及び変形が明らかであろう。さらに、上記の開示は、実施形態を限定することを意図していない。実施形態の範囲は、添付の特許請求の範囲によって定義される。