(57)【要約】テーブルウォーカは、第１アドレスをメモリのページに関連する第２アドレスに変換する要求を要求元エンティティから受信する。対応するテーブルウォーク中に、ページのリバースマップテーブル（ＲＭＴ）内のエントリ内のロックインジケータが、ＲＭＴ内のエントリがロックされているとマークするように設定されている場合に、テーブルウォーカは、要求を処理することを停止して、是正措置を行う。また、要求がページの書き込みアクセスに関連しており、ＲＭＴ内のエントリ内の不変インジケータが、ページを不変であるとマークするように設定されている場合に、テーブルウォーカは、要求を処理することを停止して、是正措置を行う。そうではなく、ＲＭＴ内のエントリがロックされておらず、ページが書き込みアクセスに対して不変であるとマークされていない場合に、テーブルウォーカは、要求を処理し続ける。【選択図】図２
2019522298.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティングデバイス内の仮想マシンによってメモリアクセスを処理する方法であって、前記コンピューティングデバイスは、リバースマップテーブル（ＲＭＴ）及び仮想マシン毎に個別のゲストアクセスページテーブル（ＧＡＰＴ）を含み、前記ＲＭＴは、複数のエントリを含み、各エントリは、メモリ内のデータの関連するページにアクセスすることが許可された仮想マシンを識別するための情報を含み、各ＧＡＰＴは、対応する仮想マシンによってアクセスされているページのレコードを含み、
前記方法は、
テーブルウォーカにおいて、仮想アドレスをシステム物理アドレスに変換する要求を受信することであって、前記要求は、所定の仮想マシンから発せられたものである、ことと、
対応するゲストページテーブルから前記仮想アドレスに関連するゲスト物理アドレスを取得し、ネストページテーブルから前記仮想アドレスに関連するシステム物理アドレスを取得することと、
前記ゲスト物理アドレス及び前記システム物理アドレスに基づいて、前記ＲＭＴ及び対応するＧＡＰＴのうち少なくとも一方をチェックして、前記所定の仮想マシンが対応するページにアクセスしたか否かを判別することと、
前記所定の仮想マシンが前記対応するページにアクセスしていない場合に、前記仮想アドレスから前記システム物理アドレスへの変換を終了することと、を含む、
方法。
【請求項２】
前記ＲＭＴ及び対応するＧＡＰＴのうち少なくとも一方をチェックすることは、
前記システム物理アドレスに対応する前記ＲＭＴ内のエントリが、前記所定の仮想マシンが前記対応するページにアクセスしていないことを示す情報を含む場合に、前記所定の仮想マシンが前記対応するページにアクセスしていないと判別することと、
前記ＲＭＴ内の前記エントリが、前記所定の仮想マシンが前記対応するページにアクセスしたことを示す情報を含む場合に、
前記ＲＭＴ内の前記エントリ内のページアクセス情報が、前記対応するページがアクセスされていないことを示し、前記対応するＧＡＰＴ内の前記対応するページに対するページアクセス情報が、前記対応するページがアクセスされたことを示す場合に、前記所定の仮想マシンが前記対応するページにアクセスしていないと判別し、
前記ＲＭＴ内の前記エントリ内のページアクセス情報、及び、前記対応するＧＡＰＴ内の前記対応するページに対するページアクセス情報の両方が、前記対応するページがアクセスされていないことを示す場合に、前記所定の仮想マシンが前記対応するページにアクセスしたと判別することと、を含む、
請求項１の方法。
【請求項３】
前記ＲＭＴ内の前記エントリが有効であるとマークされていないことと、前記ＲＭＴ内の前記エントリ内に記憶されたゲスト物理アドレスが、前記ゲスト物理アドレスと一致していないことと、のうち少なくとも１つが真である場合に、
前記ＲＭＴ内の前記エントリは、前記所定の仮想マシンが前記対応するページにアクセスしていないことを示す情報を含む、
請求項２の方法。
【請求項４】
前記ＲＭＴ内の前記エントリ内に記憶された仮想マシン識別子が、前記所定の仮想マシンの識別子と一致していないことと、前記ＲＭＴ内の前記エントリ内に記憶されたページサイズが、前記システム物理アドレスに関連するページサイズと一致していないことと、前記ＲＭＴ内の前記エントリ内に記憶された読み出し／書き込み許可が、前記メモリアクセスの読み出し／書き込みタイプと一致していないことと、のうち少なくとも１つが真である場合に、
前記ＲＭＴ内の前記エントリは、前記所定の仮想マシンが前記対応するページにアクセスしていないことを示す情報をさらに含む、
請求項３の方法。
【請求項５】
前記ＲＭＴ内のエントリを更新する要求を受信することと、
前記ＲＭＴ内の別のエントリ内の情報との間で競合が生じる場合に前記要求を終了することと、
前記ＲＭＴ内の前記エントリが有効であるとマークされている場合に、１つ以上の対応する変換索引バッファをフラッシュすることと、
前記ＲＭＴ内の前記エントリを更新することであって、前記ＲＭＴ内の前記エントリ内のページアクセス情報を、前記対応するページがアクセスされていないことを示すように設定することを含む、ことと、をさらに含む、
請求項２の方法。
【請求項６】
所定のゲスト物理アドレスにおける所定のページに対するページアクセス情報を前記対応するＧＡＰＴ内でクリアする要求を、前記所定の仮想マシンから受信することと、
前記ＲＭＴ内の対応するレコードが存在し、当該レコードがページアクセス情報をクリアするための候補であることを確認することと、
前記対応するＧＡＰＴ及び前記ＲＭＴ内の前記所定のページに対するページアクセス情報をクリアすることと、をさらに含む、
請求項２の方法。
【請求項７】
１つ以上のページは、２つ以上の仮想マシン間でアクセスを共有することができるグローバルな共有ページであり、前記対応するページは、グローバルな共有ページであり、
前記ＲＭＴ内の前記エントリが、前記対応するページがグローバルに共有されており、前記メモリアクセスが共有ページに対して許可されないメモリアクセスであることを示す場合に、
前記ＲＭＴ内の前記エントリは、前記所定の仮想マシンが前記対応するページにアクセスしていないことを示す情報を含む、
請求項２の方法。
【請求項８】
前記コンピューティングデバイスによって実行されるハイパーバイザに対して、前記ＲＭＴ及び前記ＧＡＰＴに対する直接アクセスをブロックすることをさらに含み、
前記ブロックすることは、
前記ＲＭＴ及び前記ＧＡＰＴの一方又は両方を暗号化することと、
前記ＲＭＴ及び前記ＧＡＰＴの一方又は両方を、前記ハイパーバイザが直接アクセスできない対応するメモリ領域に記憶することと、
のうち少なくとも一方を含む、
請求項１の方法。
【請求項９】
前記所定の仮想マシンが前記対応するページにアクセスした場合に、前記仮想アドレスを前記システム物理アドレスに変換することを完了することであって、前記要求に応じて前記システム物理アドレスを返すことを含む、ことをさらに含む、
請求項１の方法。
【請求項１０】
前記対応するページが共有されている場合に、前記ＲＭＴ及び前記対応するＧＡＰＴのうち少なくとも一方をチェックすることなく、前記所定の仮想マシンが前記対応するページにアクセスしたと判別することをさらに含む、
請求項９の方法。
【請求項１１】
仮想マシンによるメモリアクセスを処理するコンピューティングデバイスであって、
プロセッサと、
ハードウェアテーブルウォーカと、
リバースマップテーブル（ＲＭＴ）及び仮想マシン毎に個別のゲストアクセスページテーブル（ＧＡＰＴ）を記憶するメモリであって、前記ＲＭＴは、複数のエントリを含み、各エントリは、メモリ内のデータの関連するページにアクセスすることが許可された仮想マシンを識別するための情報を含み、各ＧＡＰＴは、対応する仮想マシンによってアクセスされているページのレコードを含む、メモリと、を備え、
前記テーブルウォーカは、
仮想アドレスをシステム物理アドレスに変換する要求を受信することであって、前記要求は、所定の仮想マシンから発せられたものである、ことと、
対応するゲストページテーブルから前記仮想アドレスに関連するゲスト物理アドレスを取得し、ネストページテーブルから前記仮想アドレスに関連するシステム物理アドレスを取得することと、
前記ゲスト物理アドレス及び前記システム物理アドレスに基づいて、前記ＲＭＴ及び対応するＧＡＰＴのうち少なくとも一方をチェックして、前記所定の仮想マシンが対応するページにアクセスしたか否かを判別することと、
前記所定の仮想マシンが前記対応するページにアクセスしていない場合に、前記仮想アドレスから前記システム物理アドレスへの変換を終了することと、
を行うように構成されている、
コンピューティングデバイス。
【請求項１２】
前記ＲＭＴ及び対応するＧＡＰＴのうち少なくとも一方をチェックすることは、
前記システム物理アドレスに対応する前記ＲＭＴ内のエントリが、前記所定の仮想マシンが前記対応するページにアクセスしていないことを示す情報を含む場合に、前記所定の仮想マシンが前記対応するページにアクセスしていないと判別することと、
前記ＲＭＴ内の前記エントリが、前記所定の仮想マシンが前記対応するページにアクセスしたことを示す情報を含む場合に、
前記ＲＭＴ内の前記エントリ内のページアクセス情報が、前記対応するページがアクセスされていないことを示し、前記対応するＧＡＰＴ内の前記対応するページに対するページアクセス情報が、前記対応するページがアクセスされたことを示す場合に、前記所定の仮想マシンが前記対応するページにアクセスしていないと判別し、
前記ＲＭＴ内の前記エントリ内のページアクセス情報、及び、前記対応するＧＡＰＴ内の前記対応するページに対するページアクセス情報の両方が、前記対応するページがアクセスされていないことを示す場合に、前記所定の仮想マシンが前記対応するページにアクセスしたと判別することと、を含む、
請求項１１のコンピューティングデバイス。
【請求項１３】
前記ＲＭＴ内の前記エントリが有効であるとマーキングされていないことと、前記ＲＭＴ内の前記エントリ内に記憶されたゲスト物理アドレスが、前記ゲスト物理アドレスと一致していないことと、のうち少なくとも１つが真である場合に、
前記ＲＭＴ内の前記エントリは、前記所定の仮想マシンが前記対応するページにアクセスしていないことを示す情報を含む、
請求項１２のコンピューティングデバイス。
【請求項１４】
前記ＲＭＴ内の前記エントリ内に記憶された仮想マシン識別子が、前記所定の仮想マシンの識別子と一致していないことと、前記ＲＭＴ内の前記エントリ内に記憶されたページサイズが、前記システム物理アドレスに関連するページサイズと一致していないことと、前記ＲＭＴ内の前記エントリ内に記憶された読み出し／書き込み許可が、前記メモリアクセスの読み出し／書き込みタイプと一致していないことと、のうち少なくとも１つが真である場合に、
前記ＲＭＴ内の前記エントリは、前記所定の仮想マシンが前記対応するページにアクセスしていないことを示す情報をさらに含む、
請求項１３のコンピューティングデバイス。
【請求項１５】
前記プロセッサは、
前記ＲＭＴ内のエントリを更新する要求を受信することと、
前記ＲＭＴ内の別のエントリ内の情報との間で競合が生じる場合に前記要求を終了することと、
前記ＲＭＴ内の前記エントリが有効であるとマークされている場合に、１つ以上の対応する変換索引バッファをフラッシュすることと、
前記ＲＭＴ内の前記エントリを更新することであって、前記ＲＭＴ内の前記エントリ内のページアクセス情報を、前記対応するページがアクセスされていないことを示すように設定することを含む、ことと、
を行うように構成されている、
請求項１２のコンピューティングデバイス。
【請求項１６】
前記プロセッサは、
所定のゲスト物理アドレスにおける所定のページに対するページアクセス情報を前記対応するＧＡＰＴ内でクリアする要求を、前記所定の仮想マシンから受信することと、
前記ＲＭＴ内の対応するレコードが存在し、当該レコードがページアクセス情報をクリアするための候補であることを確認することと、
前記対応するＧＡＰＴ及び前記ＲＭＴ内の前記所定のページに対するページアクセス情報をクリアすることと、
を行うように構成されている、
請求項１２のコンピューティングデバイス。
【請求項１７】
１つ以上のページは、２つ以上の仮想マシン間で共有されるグローバルな共有ページであり、前記対応するページは、グローバルな共有ページであり、
前記ＲＭＴ内の前記エントリが、前記対応するページがグローバルに共有されており、前記メモリアクセスが共有ページに対して許可されないメモリアクセスであることを示す場合に、
前記ＲＭＴ内の前記エントリは、前記所定の仮想マシンが前記対応するページにアクセスしていないことを示す情報を含む、
請求項１２のコンピューティングデバイス。
【請求項１８】
前記テーブルウォーカは、
前記所定の仮想マシンが前記対応するページにアクセスした場合に、前記仮想アドレスを前記システム物理アドレスに変換することを完了することであって、前記要求に応じて前記システム物理アドレスを返すことを含む、ことを行うように構成されている、
請求項１１のコンピューティングデバイス。
【請求項１９】
前記テーブルウォーカは、
前記対応するページが共有されている場合に、前記ＲＭＴ及び前記対応するＧＡＰＴのうち少なくとも一方をチェックすることなく、前記所定の仮想マシンが前記対応するページにアクセスしたと判別するように構成されている、
請求項１８のコンピューティングデバイス。
【請求項２０】
仮想マシンを実行するコンピューティングデバイスによって読取可能な情報を記憶するコンピュータ可読記憶媒体であって、
前記情報は、
リバースマップテーブル（ＲＭＴ）であって、複数のエントリを含み、各エントリは、前記コンピューティングデバイス内のメモリ内のデータの関連するページにアクセスすることが許可された仮想マシンを識別するための情報を含む、ＲＭＴと、
仮想マシン毎に個別のゲストアクセスページテーブル（ＧＡＰＴ）であって、対応する仮想マシンによってアクセスされているページのレコードを含む、ＧＡＰＴと、を含む、
コンピュータ可読記憶媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
いくつかのコンピューティングデバイスは、ソフトウェアプログラムを実行するためのサポートを提供するために、コンピューティングデバイスのハードウェアをエミュレートするかインタフェースするソフトウェアエンティティである仮想マシンを実行する。例えば、仮想マシンは、コンピューティングデバイス内のハードウェア要素（プロセッサ、メモリ、ネットワークインタフェース等）を用いて、オペレーティングシステムの１つ以上のインスタンス（「ゲスト」オペレーティングシステムと呼ばれる）を実行するためのサポートを提供することができる。ゲストオペレーティングシステムは、他のソフトウェアプログラム（例えば、アプリケーション、データベース等）の実行をサポートする。
【０００２】
いくつかのコンピューティングデバイスは、２つ以上の仮想マシンを同時に（例えば、対応するタイムスライスで、１つ以上のプロセッサコア上で並行して等）実行する。このようなコンピューティングデバイスでは、各仮想マシンは、仮想マシンを用いるために排他的に割り当てられたハードウェアリソースにアクセスすることができる。例えば、各仮想マシンには、コンピューティングデバイス内の対応するメモリ領域が仮想マシンの排他的使用のために割り当てられてもよい。これらのコンピューティングデバイスでは、第１仮想マシンが、第２仮想マシンに割り当てられたメモリ領域にアクセスするのを抑制することができ、その逆も同様である。これらのコンピューティングデバイスのいくつかは、ハイパーバイザが仮想マシン毎のアクセス制御を実行する。ハイパーバイザは、コンピューティングデバイス上で動作／実行されるソフトウェアエンティティであり、コンピューティングデバイス上で実行中の仮想マシンのマネージャ又はコントローラとして機能する。例えば、ハイパーバイザは、仮想マシンを開始又は初期化し、仮想マシンによるコンピューティングデバイスハードウェアのアクセスを制御し、仮想マシンを終了又はクローズすること等ができる。
【０００３】
ハイパーバイザは、仮想マシンのアクセス制御を提供すると想定されているが、ハイパーバイザが常に適切なアクセス制御を実施するとは限らない。例えば、ハイパーバイザのプログラムコードの一部又は全てが不正なプログラムコードに置き換えられたり、ハイパーバイザのプログラムコードが破損し又はエラーを含んだりすることがある。このような場合、ハイパーバイザは、仮想マシンが、別の仮想マシンに割り当てられたコンピューティングハードウェアにアクセスすることを故意又は意図せずに許可する場合がある。例えば、いくつかのコンピューティングデバイスでは、ハイパーバイザが、仮想マシンが対応するメモリ領域のデータにアクセスするのを可能にするアドレス情報を提供する役割を果たす。これらのコンピューティングデバイスでは、ハイパーバイザは、仮想マシン（又は、そこで実行されるソフトウェア）が用いるローカルアドレスと、メモリ内でデータが実際に配置されている物理アドレスと、の間の変換を提供する。ハイパーバイザが正しく機能していない場合、ハイパーバイザは、誤ったアドレス情報を提供し、これにより、仮想マシンに対して、予期しない又は不要なメモリ領域（例えば、他の仮想マシンに割り当てられたメモリ領域）内のデータにアクセスするように指示することがある。ハイパーバイザは、説明したように誤ったアドレス情報を提供することによって、１つ以上のアクセス制御又はルールに違反してデータにアクセスさせる可能性がある。
【図面の簡単な説明】
【０００４】
【図１】いくつかの実施形態による、仮想マシン及びハイパーバイザを示すブロック図である。
【図２】いくつかの実施形態による、コンピューティングデバイスを示すブロック図である。
【図３】いくつかの実施形態による、ゲストページテーブルを実装するために用いられるテーブルのセットを示すブロック図である。
【図４】いくつかの実施形態による、リバースマップテーブルを示すブロック図である。
【図５】いくつかの実施形態による、ゲストアクセスページテーブルを示すブロック図である。
【図６】いくつかの実施形態による、リバースマップテーブルを更新するプロセスを示すブロック図である。
【図７】いくつかの実施形態による、ゲストアクセスページテーブル内のインジケータをクリアするプロセスを示すブロック図である。
【図８】いくつかの実施形態による、リバースマップテーブル及びゲストアクセスページテーブルを用いるプロセスを示すブロック図である。
【図９】いくつかの実施形態による、仮想マシンが対応するページにアクセスしたか否かを判別するプロセスを示すブロック図である。
【図１０】いくつかの実施形態による、リバースマップテーブルを初期化するプロセスを示すブロック図である。
【発明を実施するための形態】
【０００５】
図面及び説明を通して、同じ参照番号は同じ図面要素を示す。
【０００６】
以下の説明は、当業者が、説明する実施形態を製造及び使用可能にするために提示されており、特定の用途及びその要件という状況で提供されている。説明する実施形態に対する様々な変更が当業者には容易に明らかとなり、本明細書で定義された一般的な原理は、他の実施形態及び用途に適用されてもよい。したがって、説明する実施形態は、示された実施形態に限定されず、本明細書に開示された原理及び特徴と矛盾しない最も広い範囲が与えられるべきである。
【０００７】
（仮想メモリ）
説明する実施形態では、コンピューティングデバイスは、コンピューティングデバイス内で実行されているプログラムによるデータアクセスを処理するために仮想メモリ技術を用いている。例えば、プログラムは、アプリケーション、オペレーティングシステム、デバイスドライバ、仮想マシン、周辺機器によって実行されるソフトウェア等を含んでもよい。概して、データがコンピューティングデバイス内のプログラムによってアクセスされると、当該データを含む所定のサイズ（例えば、４ｋＢ、２ＭＢ等）のメモリのブロック又は「ページ」が、大容量ストレージ（例えば、ディスクドライブ若しくは半導体メモリ）からコンピューティングデバイスのメモリ内の利用可能な物理的位置にコピーされるか、メモリ内に新たに生成される。メモリ内のページの物理的位置を管理するためにプログラムが必要とされるのを回避するために、コンピューティングデバイスは、プログラムに関するページの物理的位置を管理する。プログラムは、ページの物理的位置に基づくアドレス（又は「物理アドレス」）を用いてメモリにアクセスする代わりに、対応するプログラムに固有のローカルアドレス空間である「仮想アドレス空間」内の「仮想アドレス」を用いてメモリにアクセスする。プログラムの観点からは、仮想アドレスは、データがメモリに記憶されている実際の物理的位置を示し、メモリアクセスは、これに従って仮想アドレスを用いてプログラムによって行われる。しかしながら、仮想アドレスは、メモリ内のページにデータが記憶されている物理的位置の物理アドレスに直接マッピングすることができない。ページの物理的位置を管理することの一部として、コンピューティングデバイスは、メモリアクセス要求においてプログラムが用いる仮想アドレスを、データが実際に配置されている物理アドレスに変換する。次に、コンピューティングデバイスは、物理アドレスを用いて、プログラムに対するメモリアクセスを実行する。
【０００８】
上述した仮想アドレスから物理アドレスへの変換を可能にするために、コンピューティングデバイスは、「ページテーブル」を含む。ページテーブルは、コンピューティングデバイスのメモリ内に記憶されたレコードであり、メモリに記憶されたデータのページについての仮想アドレスから物理アドレスへの変換情報を有するエントリ又は「ページテーブルエントリ」を含む。換言すれば、ページテーブルは、仮想アドレスと対応する物理アドレスとの「マッピング」を含む。コンピューティングデバイスは、所定の仮想アドレスでメモリにアクセスする要求をプログラムから受信すると、「ページテーブルウォーク」を実行することによって対応する物理アドレス情報をページテーブルから取得する。コンピューティングデバイスは、「ページテーブルウォーク」の間にページテーブルを検索して、仮想アドレスに関連する物理アドレスを提供するページテーブルエントリを探す。
【０００９】
上述したページテーブルウォークは比較的遅いので、ページテーブルウォークを実行しないことが望ましい。このため、コンピューティングデバイスは、変換索引バッファ（ＴＬＢ）を含む。変換索引バッファは、ページテーブルウォークの間に取得されたページテーブルエントリ（又は、ページテーブルエントリに基づく情報）の限定された数のコピーを記憶するために用いられるローカルキャッシュである。動作中、コンピューティングデバイスは、最初に、仮想アドレスから物理アドレスへの変換を実行するために、キャッシュされたページテーブルエントリを対応するＴＬＢから取得することを試みる。対応するページテーブルエントリのコピーがＴＬＢに存在しない場合（すなわち、「ミス」が生じた場合）、コンピューティングデバイスは、ページテーブルウォークを実行して所望のページテーブルエントリを取得し、取得したページテーブルエントリのコピーをＴＬＢにキャッシュする。
【００１０】
（仮想マシン、ハイパーバイザ及び階層的なページテーブル）
説明する実施形態では、コンピューティングデバイスは、ソフトウェアプログラムを実行するためのサポートを提供するために、コンピューティングデバイスのハードウェアをエミュレートするかインタフェースするソフトウェアエンティティである仮想マシンを実行する。例えば、仮想マシンは、コンピューティングデバイス内のハードウェア要素（プロセッサ、メモリ、ネットワークインタフェース等）を用いて、オペレーティングシステムのうち１つ以上のインスタンス（「ゲスト」オペレーティングシステムと呼ばれる）を実行するためのサポートを提供することができる。ゲストオペレーティングシステムは、他のソフトウェアプログラム（例えば、アプリケーション、データベース等）の実行をサポートする。
【００１１】
説明する実施形態では、コンピューティングデバイスは、２つ以上の仮想マシンを同時に実行してもよい（例えば、対応するタイムスライスで、１つ以上のプロセッサコアで並行して等）。これらの実施形態では、各仮想マシンは、仮想マシンの使用のために割り当てられる様々なハードウェアリソースと関連付けられてもよい。例えば、各仮想マシンには、割り当てられたメモリ領域（例えば、連続又は非連続メモリブロック）への排他的アクセスが提供されてもよい。換言すれば、第１仮想マシンが、第２仮想マシンに関連するメモリ領域内のデータのページにアクセスすることを抑制することができ、逆も同様である。説明する実施形態では、ハイパーバイザは、仮想マシン毎のアクセス制御を実行する。ハイパーバイザは、コンピューティングデバイス上で動作又は実行するソフトウェアエンティティであり、コンピューティングデバイス上で実行される仮想マシンのマネージャ又はコントローラとして機能する。例えば、ハイパーバイザは、仮想マシンを開始又は初期化すること、仮想マシンによるコンピューティングデバイスハードウェアのアクセスを制御すること、仮想マシンを終了又はクローズすること等を行ってもよい。
【００１２】
図１は、いくつかの実施形態による、仮想マシン及びハイパーバイザを示すブロック図である。図１に示すように、３つの仮想マシン（ＶＭ）１００が存在し、各仮想マシンは、ゲストオペレーティングシステム（ゲストＯＳ）１０２と、１つ以上のプログラム（ＰＲＧＲＭＳ）１０４（例えば、データベース、ソフトウェアアプリケーション等）と、を実行する。仮想マシン１００は、ハイパーバイザ１０６と通信し、ハイパーバイザ１０６は、ホストオペレーティングシステム（ホストＯＳ）１０８と、仮想マシン１００との間をインタフェースする。ホストオペレーティングシステム１０８は、コンピューティングデバイスハードウェア１１０と、ハイパーバイザ１０６との間のインタフェースを提供する。図１に様々な要素を示しているが、いくつかの実施形態では、要素の異なる配列が存在する。例えば、いくつかの実施形態では、ホストオペレーティングシステム１０８が存在せず、ハイパーバイザ１０６は、コンピューティングデバイスハードウェア１１０とより直接的に通信する。別の例として、異なる数の仮想マシン１００が存在してもよい。
【００１３】
説明した実施形態では、ゲストオペレーティングシステム及びハイパーバイザの両方が上述した仮想メモリ技術を使用する。したがって、ページテーブルの階層は、コンピューティングデバイスにおいて維持される。ページテーブルの階層内で、各ゲストオペレーティングシステムは、ローカルページテーブル（ゲストページテーブル）に関連付けられており、ハイパーバイザは、ネストページテーブル（nested page table）に関連付けられている。概して、ハードウェアテーブルウォーカ（すなわち、ページテーブルウォークを実行するように構成された回路）は、ゲストオペレーティングシステムの下で実行されるプログラムによって使用される仮想アドレスからシステム物理アドレスへの変換の要求をプロセッサから受信すると、ゲストページテーブル及びネストページテーブルを用いて変換を実行する。より具体的には、テーブルウォーカは、ゲストページテーブルを用いて、プログラムによって使用される仮想アドレスをゲスト物理アドレスに変換する。ゲスト物理アドレスは、ゲストオペレーティングシステムにとってローカルなアドレスである。ゲスト物理アドレスは、プログラムがアクセスするデータ（又は、命令等）が記憶されているメモリ内の場所に直接マッピングすることができないので、テーブルウォーカは、ネストページテーブルを使用して、ゲスト物理アドレスをシステム物理アドレスに変換する。システム物理アドレスは、データが記憶されているメモリ内の実際の場所を示すアドレスである。テーブルウォーカは、システム物理アドレスを取得すると、データにアクセスする際に使用するシステム物理アドレスを提供し、さらには、システム物理アドレスをＴＬＢにキャッシュしてもよい。
【００１４】
説明する実施形態では、ハイパーバイザは、ネストページテーブル内の情報に対して様々な動作を実行することができる。例えば、ハイパーバイザは、ゲスト物理アドレスからシステム物理アドレス等へのマッピングを更新する（すなわち、上書きする）ことができる。後述するように、説明する実施形態では、ハイパーバイザによって不正確なマッピング／変換が提供されるような方法で、ネストページテーブル内の情報がハイパーバイザによって（不正に、誤って等）変更されないことを確実にするための動作を実行する。
【００１５】
（概要）
説明する実施形態は、コンピューティングデバイスのメモリ内のページへの仮想マシンによるアクセスを制御するためのメカニズムを含む。より具体的には、説明する実施形態は、とりわけ、ハイパーバイザ（及び／又はコンピューティングデバイス内の別のエンティティ）が、ネストページテーブル内のゲスト物理アドレスからシステム物理アドレスへの変換を再マッピングしないようにするために使用される一対のテーブルを含む。一対のテーブルは、（１）リバースマップテーブルと、（２）ゲストアクセスページテーブルと、を含む。リバースマップテーブルは、とりわけ、ゲスト物理アドレスについてのネストページテーブルのテーブルウォークの間に取得したシステム物理アドレスが以前に使用されたシステム物理アドレスと一致するか否かを判別するのに使用可能な情報を含む。換言すれば、リバースマップテーブルを使用して、メモリ内の所定のページのシステム物理アドレスが一度に１つのゲスト物理アドレスのみに一致するようにすることができる。ゲストアクセスページテーブルは、仮想マシンがメモリ領域内のページに以前にアクセスしたと記録されているか否かを判別するのに使用可能な情報を含む。
【００１６】
いくつかの実施形態では、ゲスト物理アドレスをシステム物理アドレスに変換するとき（例えば、対応する仮想マシンに代わってプロセッサ内のロード／ストアユニットからの要求に基づいて）、（例えば、メモリ管理ユニット内の）ハードウェアテーブルウォーカは、ネストページテーブルのテーブルウォークを行って、ネストページテーブル内の対応するエントリからシステム物理アドレスを取得する。ネストページテーブル、したがって対応するエントリが変更されたか否かは不明であるため、対応するエントリ内のマッピング／変換が対応するルールに違反するか否か（例えば、対応するページが複数のゲスト物理アドレスに関連付けられている等）は分からない。このため、テーブルウォーカは、ネストページテーブルからシステム物理アドレスを取得すると、リバースマップテーブル及び対応するゲストアクセスページテーブルのうち少なくとも一方をチェックして、仮想マシンがコンピューティングデバイスのメモリ内の対応するページにアクセスしたか否かを判別する。より具体的には、テーブルウォーカは、リバースマップテーブルをチェックして、（例えば、対応するページが不変ではないこと、システム物理アドレスに対応するリバースマップテーブル内のエントリがロックされていない等の）数ある中でも、システム物理アドレスに対応するエントリが有効であって、要求からのゲスト物理アドレスに一致する記録されたゲスト物理アドレスを有することを確実にする。これが当てはまる場合、システム物理アドレスがゲスト物理アドレスと一致する（すなわち、システム物理アドレスがゲスト物理アドレスのみにマッピングする）と判別することができる。次に、テーブルウォーカは、リバースマップテーブルのエントリ内のページアクセス情報をチェックして、仮想マシンが既にメモリのページにアクセスしたことをページアクセス情報が示しているか否かを判別する。示している場合には、テーブルウォーカは、システム物理アドレスをロード／ストアユニットに戻す。そうではなく、仮想マシンがメモリのページに未だアクセスしていないことをページアクセス情報が示している場合には、テーブルウォーカは、ゲストアクセスページテーブル内の検索を行って、ゲストアクセスページテーブル内のページアクセス情報が一致するか、そうでなければ同意（agree）する（すなわち、アクセスがなかったことを示す）か否かを判別する。リバースマップテーブルのチェック又はゲストアクセスページテーブルのチェックの何れかが不一致を戻すか、そうでなければ一致しない場合には、テーブルウォーカは、変換に失敗し、エラーメッセージをハイパーバイザに返してもよい。ハイパーバイザは、エラーを受信すると、是正措置（例えば、エラー処理コード、障害処理コードの実行等）を実行することができる。対照的に、リバースマップテーブル及びゲストアクセスページテーブルの両方におけるチェックが一致を戻すか、そうでなければ同意する（すなわち、対応するページが仮想マシンによってアクセスされたか否かについて同意する）場合には、テーブルウォーカは、システム物理アドレスをロード／ストアユニットに戻して、ロード／ストアユニットがシステム物理アドレスを用いてメモリ���クセスを実行する（そしておそらく、テーブルウォークからのシステム物理アドレス及び／又は他の情報をＴＬＢにキャッシュする等）ことを可能にする。
【００１７】
リバースマップテーブル及びゲストアクセスページテーブルを使用することによって、説明する実施形態は、ネストページテーブルの潜在的に不正な又は誤った変更を検出することができる。ネストページテーブルのこのような変更を回避することは、ハイパーバイザ（及び／又は別のエンティティ）が、ゲスト物理アドレスをシステム物理アドレスに不適切に再マッピングして、未知の、不要な又は不正確なメモリ領域（他の仮想マシンに割り当てられたメモリ領域を含む）内のデータにアクセスする（例えば、上書きする、実行する等）ように仮想マシンに指示するのを回避することによって、コンピューティングデバイス内の仮想マシンのデータのセキュリティを向上させることができる。換言すれば、説明する実施形態では、データのセキュリティを、ルールを実行することによって向上させることができる。このルールには、例えば、メモリ内の各ページは、単一／固有のゲスト物理アドレスに関連付けられることのみ許可され（ゲスト物理アドレスエイリアシングが許可されない）、使用中のプライベートゲストページは、本明細書で説明ように対応する仮想マシンを伴わずに再マッピングすることができない等が含まれる。また、単独で又は他の技術（例えば、仮想マシンメモリ領域の暗号化及び仮想マシンプロセッサ状態（例えば、レジスタ等）の保護）と組み合わせて、説明する実施形態は、ハイパーバイザにおける絶対の信頼の必要性を回避することができる。これにより、コンピューティングデバイスの管理を単純化し、セキュリティを向上させること等が可能になる。例えば、説明する実施形態は、（以下により詳細に説明するように）不変ページ（immutable pages）を用いることで、ハイパーバイザが「リプレイ」アタックを実行することを、（ハイパーバイザがメモリのページ内のデータの現在のバージョン（暗号化データを含む）を古いバージョンのデータを用いて不正に上書きするのを抑制することによって）回避することができる。したがって、説明する実施形態は、セキュリティ、動作安定性、及び、コンピューティングデバイスのコンシューマにとっての価値を向上させることができる。
【００１８】
（コンピューティングデバイス）
図２は、いくつかの実施形態による、コンピューティングデバイス２００を示すブロック図である。図２に示すように、コンピューティングデバイス２００は、プロセッサ２０２と、メモリ２０６と、大容量ストレージ２１６と、ダイレクトメモリアクセスメカニズム（ＤＭＡ）２１８と、を含む。プロセッサ２０２は、コンピューティングデバイス２００において計算動作を実行するデバイスである。プロセッサ２０２は、２つのコア（コア２０８，２０９）を含む。各コアは、１つ以上の計算メカニズム（例えば、中央処理ユニット（ＣＰＵ）、グラフィックス処理ユニット（ＧＰＵ）、組み込みプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、及び／又は、他の計算メカニズム等）を含む。
【００１９】
また、プロセッサ２０２は、計算動作を行うためにコア２０８，２０９が用いるデータ及び命令をローカルに記憶するために用いられるキャッシュメモリ（又は、「キャッシュ」）を含む。図２に示すように、プロセッサ２０２内のキャッシュは、レベル１（Ｌ１）キャッシュ２１０，２１１（「Ｌ１２１０」及び「Ｌ１２１１」）を、コア２０８，２０９の各々に含む。各Ｌ１キャッシュは、メモリ回路（例えば、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、ダブルデータレートシンクロナスＤＲＡＭ（ＤＤＲ  ＳＤＲＡＭ）、及び／又は、他のタイプのメモリ回路であって、対応するコア２０８，２０９によって使用されるデータ及び命令を記憶する他のタイプのメモリ回路のうち１つ以上）と、メモリ回路に記憶されたデータ及び命令のアクセスを処理するための制御回路と、を含む。また、プロセッサ２０２は、共有されるレベル２（Ｌ２）キャッシュ２１２を含む。キャッシュ２１２は、メモリ回路（例えば、ＳＲＡＭ、ＤＲＡＭ、ＤＤＲ  ＳＤＲＡＭ、及び／又は、他のタイプのメモリ回路であって、コア２０８，２０９の両方によって使用されるデータ及び命令を記憶する他のタイプのメモリ回路のうち１つ以上）と、にメモリ回路に記憶されたデータ及び命令のアクセスを処理するための制御回路と、を含む。さらに、プロセッサ２０２は、共有されるレベル３（Ｌ３）キャッシュ２０４を含む。キャッシュ２０４は、メモリ回路（例えば、ＳＲＡＭ、ＤＲＡＭ、ＤＤＲ  ＳＤＲＡＭ、及び／又は、他のタイプのメモリ回路であって、コア２０８，２０９の両方によって使用されるデータ及び命令を記憶する他のタイプのメモリ回路のうち１つ以上）と、メモリ回路に記憶されたデータ及び命令のアクセスを処理するための制御回路と、を含む。
【００２０】
プロセッサ２０２は、プラットフォームセキュリティプロセッサ（ＰＳＰ）２３２をさらに含む。プラットフォームセキュリティプロセッサ２３２は、プロセッサコア、ＡＳＩＣ、及び／又は、コンピューティングデバイス２００内でセキュリティ実行する他の機能ブロックを含む。概して、プラットフォームセキュリティプロセッサ２３２は、ハードウェア及びソフトウェアエンティティの不正な又は誤った挙動に対して安全であることが知られているので、このような挙動の影響を受けやすい動作を保護するためにコンピューティングデバイス２００内で使用することができる。例えば、プラットフォームセキュリティプロセッサ２３２は、コンピューティングデバイス２００において信頼できる実行環境（例えば、暗号化動作（例えば、キー生成、データの暗号化／復号化等）、ハードウェア及びソフトウェアエンティティの登録及び／又は認証等）を可能にすることに関連する動作を実行してもよい。いくつかの実施形態では、プラットフォームセキュリティプロセッサ２３２は、コンピューティングデバイス２００のメモリ２０６内のページに対する仮想マシンによるアクセスを制御するために、本明細書で説明する動作のうち少なくともいくつかを実行する。
【００２１】
メモリ２０６は、コンピューティングデバイス２００の「メインメモリ」であり、メモリ回路（例えば、ＤＲＡＭ、ＤＤＲ  ＳＤＲＡＭ、不揮発性ランダムアクセスメモリ（ＮＶＲＡＭ）、及び／又は、コンピューティングデバイス２００内の機能ブロックによって使用されるデータ及び命令を記憶する他のタイプのメモリ回路のうち１つ以上）と、メモリ回路内に記憶されたデータ及び命令のアクセスを処理するための制御回路と、を含む。コンピューティングデバイスによって実行される仮想マシンは、仮想マシンの排他的使用のために割り当てられた対応するメモリ領域を有することができるので、所定の仮想マシンは、対応する領域内のデータにアクセスする唯一の仮想マシンである。
【００２２】
大容量ストレージ２１６は、例えば、コンピューティングデバイス２００内で用いられるデータ及び命令を記憶する大容量半導体メモリ（例えば、フラッシュメモリ、ＮＶＲＡＭ等の不揮発性反動体メモリ）、ディスクドライブ（ハードドライブ等）、光学ドライブ等の大容量ストレージである。説明する実施形態では、大容量ストレージ２１６は、コンピューティングデバイス２００内の機能ブロックによるその後の使用に備えてメモリ２０６内に記憶されるように取得されたデータ及び命令を保持する。例えば、データ及び／又は命令は、所定のサイズ（例えば、４ｋＢ、２ＭＢ、１ＧＢ等）のブロック又は「ページ」で大容量ストレージ２１６から取り出すことができ、ページは、メモリ２０６内に記憶することができる。また、ページは、メモリ２０６内の利用可能な物理的位置に（例えば、コンピュータの結果を記憶するため等に）新たに生成することができる。メモリ２０６内に記憶するために大容量ストレージ２１６から取り出されたページは、特定の仮想マシンの排他的アクセスのために予約（reserved）されてもよいし、仮想マシン間で共有されてもよい。
【００２３】
メモリ管理ユニット２１４は、プロセッサ２０２内のメモリアクセス要求を処理する機能ブロックである。データ及び命令がプロセッサ２０２内の機能ブロックによってアクセスされる（すなわち、コア２０８又は別の機能ブロックによる読み出し、書き込み、チェック／検証、削除、無効化等）場合、機能ブロックは、メモリアクセス要求をメモリ管理ユニット２１４に送信する。次に、メモリ管理ユニット２１４は、メモリアクセス要求の満足／解決のために、対応する要求をＬ２キャッシュ２１２、Ｌ３キャッシュ２０４及びメモリ２０６のうち１つ以上に送信する。例えば、メモリ管理ユニット２１４は、メモリアクセス要求に基づいてデータを取り出す場合、Ｌ２キャッシュ２１２、Ｌ３キャッシュ２０４又はメモリ２０６（又は、データがＬ２キャッシュ２１２、Ｌ３キャッシュ２０４若しくはメモリ２０６のうち１つに存在しない場合、大容量ストレージ２１６）からデータを取得し、データを、要求している機能ブロックに転送してもよい。
【００２４】
上述したように、コンピューティングデバイス２００は、仮想メモリを使用して、（例えば、コア２０８，２０９によって実行される）ソフトウェアプログラムが、物理アドレスに変換されなければならない仮想アドレスを使用してメモリにアクセスできるようにする。メモリ管理ユニット２１４（例えば、メモリ管理ユニット２１４内のテーブルウォーカ機能ブロック）は、プログラムから仮想アドレスを有するメモリアクセス要求を受信すると、仮想アドレスを、メモリ２０６内でデータが配置されているページの物理アドレスに変換するための動作を実行する。
【００２５】
いくつかの実施形態では、メモリ管理ユニット２１４は、仮想アドレスから物理アドレスへの変換を実行するために２つのメカニズムを用いる。第１メカニズムは、各ゲストオペレーティングシステムに関連するページテーブルと、ハイパーバイザに関連するページテーブルと、を含むページテーブルの階層である。ページテーブルの例を、ゲストオペレーティングシステム及びハイパーバイザに関連するゲストページテーブル２２２及びネストページテーブル２２４として図２に示す。各ページテーブルは、メモリ２０６に記憶されたデータ構造（例えば、１つ以上のテーブル、配列、リスト等）である。例えば、ゲストページテーブル２２２は、対応する仮想マシンの排他的アクセスのために割り当てられたメモリ領域（例えば、予約メモリ領域２２６）に記憶されてもよい。いくつかの実施形態では、所定のページテーブルは、対応するプログラム、仮想マシン等によってメモリ２０６に記憶された、メモリ２０６に存在するページ毎に少なくとも１つの変換を記憶する。したがって、これらの実施形態では、ページが大容量ストレージ２１６からメモリ２０６にコピーされ又はメモリ２０６内に新たに生成され、メモリ２０６内で利用可能のままである場合、関連する仮想アドレスから物理アドレスへの変換は、対応するページテーブルに存在する必要がある。上述したように、テーブルウォーカは、ゲストページテーブル２２２及びネストページテーブル２２４を用いて仮想アドレスから物理アドレスへの変換を実行する。
【００２６】
仮想アドレスから物理アドレスへの変換を実行するための第２メカニズムは、変換索引バッファ２２０，２２１（「ＴＬＢ２２０」及び「ＴＬＢ２２１」）である。これらは、ページテーブルウォークの間に取得された仮想アドレスから物理アドレスへの変換情報を記憶／キャッシュするように構成されたコア２０８，２０９の各々におけるキャッシュである。コア２０８，２０９は、仮想アドレスから物理アドレスへの変換情報を対応するＴＬＢ２２０，２２１から取得し、可能であれば、ページテーブルウォークの実行を回避する。
【００２７】
ダイレクトメモリアクセスメカニズム２１８は、大容量ストレージ２１６からメモリ２０６へのデータの転送（逆も同様である）を実行するように構成された機能ブロックである。概して、ダイレクトメモリアクセスメカニズム２１８は、データ転送動作をプロセッサ２０２からオフロードし、これにより、プロセッサ２０２は、メモリ転送の実行に伴ういくつかの計算動作の実行を回避することができる。
【００２８】
コンピューティングデバイス２００は、メモリ２０６に記憶されたリバースマップテーブル２２８を含む。リバースマップテーブル２２８は、多くのエントリを含むデータ構造（例えば、テーブル、リスト等）である。１つ以上の仮想マシンの使用に対して割り当てられ得るメモリ２０６内のメモリのページ毎に１つのエントリが存在する。例えば、メモリ２０６が、仮想マシンに対して４ｋＢページで割り当てられ得る３２ＧＢのメモリを含む場合、リバースマップテーブルは、８，３８８，６０８エントリを含む。リバースマップテーブル２２８は、システム物理アドレスに関連するゲスト物理アドレスを示す情報を含むレコードを保持するため、不変ページのレコードを保持するため、及び、対応するページに関連する他の情報のレコードを保持するために、ハイパーバイザ及び他のエンティティによって使用される。このようにして、コンピューティングデバイス２００は、ネストページテーブルにいつ変更が加えられたかを検出するのに使用可能なレコードを維持する。リバースマップテーブル２２８については、以下により詳細に説明する。
【００２９】
コンピューティングデバイス２００は、メモリ２０６に記憶されたゲストアクセスページテーブル２３０を含む。ゲストアクセスページテーブル２３０は、多くのインジケータを含むデータ構造（例えば、ビットマスク、文字列、テーブル、リスト等）である。対応する仮想マシンのアクセス用に割り当てられたメモリのページ毎に１つのインジケータが存在する。例えば、対応する仮想マシンの排他的アクセスのためにメモリの４ＧＢ領域が割り当てられており、ページのサイズが４ｋＢである場合には、ゲストアクセスページテーブル２３０がビットマスクである実施形態では、ゲストアクセスページテーブル２３０のサイズは、１，０４８，５７６ビットである。対応する仮想マシンが対応するページにアクセスしている場合（すなわち、読み出し、書き込み、及び／又は、他の方法で相互作用している場合）には、仮想マシン（及び／又は、例えばテーブルウォーカ等の別のエンティティ）は、対応するインジケータを所定値（例えば、１）に設定する。仮想マシンは、そうでなければインジケータをクリアしてもよいし、インジケータを０等の値に設定してもよい。例えば、ゲストアクセスページテーブル２３０がビットマスクである実施形態では、メモリ内の所定の位置のページがアクセスされている場合には、対応するビットを１に設定することができ、仮想マシンがページにアクセスしていない場合には、０に設定することができる。このようにして、仮想マシンは、仮想マシンによってアクセスされているページのレコードを保持する。ゲストアクセスページテーブル２３０については、以下により詳細に説明する。
【００３０】
いくつかの実施形態では、ハイパーバイザは、リバースマップテーブル２２８及びゲストアクセスページテーブル２３０に直接アクセスすることからブロックされている。例えば、リバースマップテーブル２２８及びゲストアクセスページテーブル２３０の一方又は両方は、ハイパーバイザが直接アクセスしないメモリ領域に記憶されてもよく、及び／又は、リバースマップテーブル２２８において不変としてマークされてもよい（すなわち、リバースマップテーブル２２８及びゲストアクセスページテーブル２３０が記憶されているページ自体が不変であるとマークされてもよい）。例えば、図２に示すように、ゲストアクセスページテーブル２３０は、対応する仮想マシンの排他的使用のために割り当てられた予約メモリ領域２２６に記憶されてもよい。別の例として、リバースマップテーブル２２８及びゲストアクセスページテーブル２３０の一方又は両方は、ハイパーバイザによって直接復号することができない形式に暗号化されてもよい。いくつかの実施形態では、リバースマップテーブル２２８及びゲストアクセスページテーブル２３０の一方又は両方は、ハイパーバイザが直接アクセスすることができない、暗号化されたメモリ領域に記憶される。例えば、いくつかの実施形態では、予約メモリ領域２２６は、対応する仮想マシンの排他的使用のために割り当てられ、且つ、暗号化されている。ハイパーバイザによるリバースマップテーブル２２８及びゲストアクセスページテーブル２３０への「直接」アクセスは許可されていないが、ハイパーバイザは、コンピューティングデバイス２００内の他の要素又はエンティティ（例えば、プロセッサ等）に対して、テーブルに対する操作を実行させ、テーブル内の情報を使用させてもよい。かかる動作については、以下に説明する。
【００３１】
いくつかの実施形態では、通信経路（１つ以上のバス、ワイヤ、ガイド及び／又は他の接続を含む）は、要素間の矢印線で示すように、コンピューティングデバイス２００内の様々な機能ブロック（プロセッサコア２０８，２０９、メモリ管理ユニット２１４、メモリ２０６等）の間に接続されている。通信経路は、コマンド、データ、制御信号及び／又は他の情報を機能ブロック間で送信するために使用される。
【００３２】
特定の構成のコアを用いた実施形態について説明しているが、いくつかの実施形態では、異なる数及び／又は構成のコアを含む。例えば、いくつかの実施形態では、１つのコアのみを有し、他の実施形態では、２つ、５つ、８つ又は別の数のコアを有する。概して、説明する実施形態では、本明細書で説明する動作を実行することができる任意の構成のコアを用いることができる。
【００３３】
特定の構成のキャッシュを用いた実施形態について説明しているが、いくつかの実施形態では、異なる数及び／又は構成のキャッシュを含む。例えば、キャッシュの一部又は全て（例えば、Ｌ１キャッシュ２１０，２１１等）は、別々の命令キャッシュとデータキャッシュとに分割されてもよい。また、Ｌ２キャッシュ２１２は共有されなくてもよく、したがって、単一のコアのみによって使用されてもよい（すなわち、プロセッサ２０２内に２つのＬ２キャッシュが存在してもよい）。別の例として、いくつかの実施形態では、異なるレベルのキャッシュ（１つのレベルのキャッシュから複数のレベルのキャッシュまで）を含み、これらのキャッシュは、プロセッサ２０２の内部及び／又はプロセッサ２０２の外部に配置されてもよい。概して、説明する実施形態では、本明細書で説明する動作を実行することができる任意の構成のキャッシュを用いることができる。
【００３４】
図２では、コンピューティングデバイス２００及びプロセッサ２０２は、説明目的のために簡略化されているが、いくつかの実施形態では、コンピューティングデバイス２００及び／又はプロセッサ２０２は、本明細書で説明する動作及び他の動作を実行するための追加の又は異なる要素及びメカニズムを含む。例えば、コンピューティングデバイス２００及び／又はプロセッサ２０２は、パワーコントローラ、電池、メディアプロセッサ、入出力メカニズム、通信メカニズム、ネットワーキングメカニズム、ディスプレイメカニズム等を含んでもよい。
【００３５】
プロセッサ２０２、メモリ２０６、大容量ストレージ２１６及びダイレクトメモリアクセスメカニズム２１８は、図１のコンピューティングデバイスハードウェア１１０によって表すことができる「ハードウェア」のいくつかの例である。したがって、いくつかの実施形態では、ホストオペレーティングシステム１０８及び／又はハイパーバイザ１０６は、プロセッサ２０２と、メモリ２０６と、大容量ストレージ２１６と、ダイレクトメモリアクセスメカニズム２１８と、ゲストオペレーティングシステム１０２と、プログラム１０４と、の間でインタフェースをとる。これらの実施形態では、コンピューティングデバイス２００（例えば、コア２０８〜２０９等）は、ハイパーバイザ１０６と、仮想マシン１００と、ゲストオペレーティングシステム１０２と、プログラム１０４と、ホストオペレーティングシステム１０８（ホストオペレーティングシステム１０８が存在する実施形態の場合）と、を実行する。また、この説明における「コンピューティングデバイス」及びコンピューティングデバイス内の要素への言及は、コンピューティングデバイス２００及び関連する要素を指す場合がある。
【００３６】
コンピューティングデバイス２００は、計算動作を実行する任意の電子デバイスとすることができ、その内部に含めることもできる。例えば、コンピューティングデバイス２００は、デスクトップコンピュータ、ラップトップコンピュータ、ウェアラブルコンピューティングデバイス、タブレットコンピュータ、スマートフォン、サーバ、仮想若しくは拡張現実機器、ネットワーク機器、玩具、視聴覚機器、家電製品、コントローラ、車両、及び／又は、これらの組み合わせ等の電子デバイスであってもよいし、この電子デバイスに含まれてもよい。
【００３７】
（ページテーブル）
上述したように、コンピューティングデバイスは、アドレス変換を実行するためにページテーブルの階層を使用する。図３は、いくつかの実施形態による、ゲストページテーブルを実装するために用いられるテーブルのセットを示すブロック図である。ネストページテーブルは、図３に示す構成のテーブルと同様にして実施することができる。
【００３８】
図３に示すように、ゲストページテーブル３００は、ページマップレベル４テーブル３０２と、ページディレクトリポインタテーブル（ページＤＩＲＰＴＲテーブル）３０４と、ページディレクトリテーブル（ページＤＩＲテーブル）３０６と、ページテーブル３０８と、メモリページ３１０と、を含む。ページマップレベル４テーブル３０２、ページディレクトリポインタテーブル３０４、ページディレクトリテーブル３０６及びページテーブル３０８は、メモリに記憶されたデータ構造（例えば、テーブル、リンクリスト等）である。ページマップレベル４テーブル３０２、ページディレクトリポインタテーブル３０４及びページディレクトリテーブル３０６の各々は、仮想アドレス３１４に対応する物理アドレスを見つけるために、テーブルウォークの次のステップの間に検索（又は、「ウォーク」）される後続のテーブルに関する情報を含む。例えば、ページマップレベル４テーブル３０２は、多くのエントリを含む。各エントリは、仮想アドレス３１４からの対応するアドレスビットのサブセットを、ページディレクトリポインタテーブル（例えば、図３に示すページディレクトリポインタテーブル３０４）にマッピングする情報を含む。ゲストページテーブル３００は、仮想アドレスの対応する部分に関連する特定のメモリページを示す物理アドレスを含む。メモリページ３１０は、仮想アドレス３１４によって示されるデータが配置されているメモリ内の特定のページである。
【００３９】
いくつかの実施形態では、ゲストページテーブル３００内でテーブルウォークを実行して、仮想アドレス３１４に関連する物理アドレスを取得する場合、テーブルウォーカは、制御レジスタ（ＣＲ）３１２を読み出して、対応する仮想マシンに関連するページマップレベルテーブル（例えば、ページマップレベル４テーブル３０２）のメモリ内の位置を決定する。次に、テーブルウォーカは、次にウォークされるページディレクトリポインタテーブル（例えば、ページディレクトリポインタテーブル３０４）の位置を示すエントリ（「ＰＭＬ４Ｅ」と示されている）に対する仮想アドレス３１４からのビットのサブセット（例えば、６４ビット仮想アドレスのうちビット３９〜４７）を用いて、ページマップレベル４テーブル３０２を検索する（又は、「ウォークする」）。次いで、テーブルウォーカは、各テーブルをウォークし、ウォークされる次のテーブルを示すテーブル内のエントリ（「ＰＤＰＥ」及び「ＰＤＥ」と示されている）を見つけるための仮想アドレス３１４からの対応するビットのサブセットを用いて、残りのテーブル（すなわち、ページディレクトリポインタテーブル３０４、ページディレクトリテーブル（例えば、ページディレクトリテーブル３０６）及びページテーブル（例えば、ページテーブル３０８））を進む。最終的に、テーブルウォーカは、ページテーブル３０８から取得した物理アドレス（ページテーブルエントリ又は「ＰＴＥ」）を用いて、特定のメモリページ（例えば、メモリページ３１０）に到達する。テーブルウォーカは、仮想アドレス３１４のビットの対応する部分（例えば、６４ビット仮想アドレスのビット０〜１１）を用いて、仮想アドレス３１４によって示されるデータを含むメモリページ３１０内のエントリ（データ）を決定する。テーブルウォーカが仮想アドレス３１４に対するアドレス変換を見つけることができない場合、エラー処理動作を実行する（例えば、ページフォルトを発行し、続いて処理する等）。
【００４０】
本明細書で説明するように、アドレス変換情報は、ゲストページテーブル３００に追加された後に修正／変更、更新等されてもよい。例えば、ページがメモリ内の第１位置から第２位置へ移動され、第１仮想マシンから第２仮想マシンに再割り当てされた等の場合には、テーブルのセット内の１つ以上のテーブルがこれに応じて更新され得る。別の例として、ハイパーバイザは、例えばテーブルのセット内の１つ以上のテーブルに誤った情報又は古い／期限切れの情報を書き込むことによって、ゲストページテーブル３００内のアドレスマッピングを不適切に（不正に、誤って等）更新することがある。説明する実施形態では、リバースマップテーブル２２８及びゲストアクセスページテーブル２３０を用いて、ゲストページテーブル３００からの不適切に更新された情報を用いることを回避する。換言すれば、説明する実施形態では、例えば、メモリ内の各ページは、単一／固有のゲスト物理アドレスに関連することのみが許可され（ゲスト物理アドレスエイリアシングが認められない）、使用中のプライベートゲストページは、対応する仮想マシンを伴わずに再マッピングすることができない、不変ページは、本明細書で説明するようにコア２０８〜２０９上で実行されているハイパーバイザ及び／又は他のソフトウェアエンティティによって書き込むことができない、等のルールを実行する。
【００４１】
図３には、特定の構成のテーブルが示されているが、いくつかの実施形態では、異なる数及び／又は構成のテーブルが用いられる。例えば、いくつかの実施形態では、単一のテーブルのみが用いられ、単一のテーブルが仮想アドレスを物理アドレスに（又は、例えば、仮想アドレスをゲスト物理アドレスに）マッピングする。
【００４２】
（リバースマップテーブル）
図４は、いくつかの実施形態による、リバースマップテーブル２２８を示すブロック図である。上述したように、リバースマップテーブル２２８は、とりわけ、ゲスト物理アドレスに対するネストページテーブル２２４のテーブルウォークが、以前用いられたシステム物理アドレスと一致するシステム物理アドレスを返すか否かを判別するために使用される情報を含む。
【００４３】
図４に示すように、リバースマップテーブル２２８は、多くのエントリ４００を含む（図４において、エントリ４００は、破線を用いて強調表示されている）。リバースマップテーブル２２８内の各エントリは、メモリ２０６内の対応するページに関する情報を含む（例えば、１つ以上の仮想マシンによる使用のために割り当てられ得るメモリ内の各４ｋＢページ）。リバースマップテーブル２２８内のエントリは、各ページに関連付けられたシステム物理アドレスを用いてインデックスされ、これにより、各エントリは、特定のシステム物理アドレスに関連付けられる。例えば、４ｋＢページの場合、リバースマップテーブル２２８内の第１エントリは、第１の又は最も低い割り当て可能なシステム物理アドレス（アドレスＡ）に関連付けられてもよく、第２エントリは、第２の割り当て可能なシステム物理アドレス（アドレスＡ＋４ｋＢ）に関連付けられてもよい。このようにして、特定のシステム物理アドレスがリバースマップテーブル２２８内で検索される場合、リバースマップテーブル２２８内の対応するオフセットにおけるエントリが検索されてもよい。いくつかの実施形態では、リバースマップテーブル２２８のベースアドレスは、オフセットベースの検索を可能にするために、コンピューティングデバイス２００内の指定された、おそらく安全な位置に記憶される。
【００４４】
リバースマップテーブル２２８では、各エントリ４００は、グローバル共有ページインジケータ（ＧＳＰ）４０２と、ゲスト識別子（ゲストＩＤ）４０４と、ゲスト物理アドレス（ゲストＰＨＹＡＤＤＲ）４０６と、サブページカウント４０８と、アクセスインジケータ４１０と、サイズインジケータ４１２と、有効インジケータ４１４と、ロックインジケータ４１６と、不変インジケータ（ＩＭＭＴ）４１８と、を記憶するように構成されている。グローバル共有ページインジケータ４０２は、対応するページが２つ以上の仮想マシンによって共有されているか否かのインジケータである。共有ページについては、以下により詳細に説明する。
【００４５】
ゲスト識別子４０４は、対応するページが割り当てられた仮想マシンに関連付けられている識別子である。例えば、特定の仮想マシンの使用のために対応するページが割り当てられると、特定の仮想マシン用の識別子がゲスト識別子４０４に記憶される。ゲスト識別子４０４は、アドレス空間識別子（ＡＳＩＤ）、ＩＤ文字列、名前、及び／又は、仮想マシンを具体的に識別する他の値を保持することができる。
【００４６】
ゲスト物理アドレス４０６は、エントリのシステム物理アドレスに関連付けられているゲスト物理アドレスを表す値である。例えば、所定のシステム物理アドレスのページが仮想マシンの使用のために割り当てられる場合、当該ページをアドレス指定するために仮想マシンによって使用されるゲスト物理アドレスは、リバースマップテーブル２２８内の対応するエントリ４００内に記憶される。このようにして、各ページが割り当てられた仮想マシンによって使用される特定のゲスト物理アドレスのレコードが生成される。後述するように、この情報を記憶することによって、テーブルウォーカは、ネストページテーブルのウォークの間に取得されたシステム物理アドレスをいつチェックするのか、システム物理アドレスが、予想されるゲスト物理アドレスにマッピングされるか否か、すなわち、システム物理アドレスが２つの異なるゲスト物理アドレスに同時にマッピングさるか否かを判別することができる。これにより、ハイパーバイザ又は別のエンティティによってマッピングが不正に又は誤って変更されたか否かを検出することができる。
【００４７】
サブページカウント４０８は、大きいサイズのページ内の仮想マシンに割り当てられた、小さいサイズのページの数である。例えば、２ＭＢページ及び４ｋＢページをサポートするシステムでは、２ＭＢ境界上のページ（例えば、アドレスＡ、Ａ＋２ＭＢ、Ａ＋４ＭＢ等のページ）は、仮想マシンによる使用のために割り当てられた２ＭＢページ内の４ｋＢページの数を有することができる。大きいサイズのページ内で小さいページが割り当てられていることを前提として、すなわち、不適切なページサイズを用いて形成された許可されないアクセスを回避するために、サブページカウント値を用いて、大きいサイズのページへのアクセスが許可されないか否かを判別することができる。
【００４８】
アクセスインジケータ４１０は、対応するページが割り当てられている仮想マシンによって、対応するページがアクセスされた（読み出された、書き込まれた、更新された、及び／又は、他の方法でアクセスされた）か否かを示すインジケータである。所定のアクセスインジケータ４１０は、対応するページが割り当てられた仮想マシンによって当該対応するページが少なくとも１回アクセスされると、設定される。アクセスインジケータ４１０は、リバースマップテーブル２２８内のエントリがハイパーバイザによって更新されると、クリアされる。ゲストアクセスページテーブル２３０内の情報と、クリアされたアクセスビット４１０と、を用いて、対応するページが最後にアクセスされてからハイパーバイザがリバースマップテーブル２２８を更新したことを判別することができる。
【００４９】
サイズインジケータ４１２は、対応するページのアクセスに対する予想サイズである。例えば、コンピューティングデバイス２００において４ｋＢページ及び２ＭＢページが使用されると想定すると、サイズインジケータ４１２は、何れのサイズのアクセスが要求されたかを示すことができる。サイズインジケータ４１２は、許容できないサイズのアクセス（例えば、実際には４ｋＢページであるものの２ＭＢのアクセス等）の検出が可能になる。
【００５０】
有効インジケータ４１４は、エントリ４００が現在有効な情報を保持しているか否か、すなわち、エントリ４００に現在存在する情報が古くなっているか、期限切れであるか又は利用可能であるか否かのインジケータである。有効インジケータ４１４は、リバースマップテーブル２２８内のエントリ４００であって、失効しているが古い情報（削除されていない情報、ランダムビットパターン等）を依然として含み得るエントリ４００であって、初期化されているが実際の情報を含まない等のエントリ４００からの情報の使用を抑制するために用いられる。いくつかの実施形態では、ページが仮想マシン（又は、その上で実行されるゲストオペレーティングシステム）によって所有され、これにより、ページの変換されたアドレスがソフトウェアエンティティ（例えば、ハイパーバイザ等）に提供されていない（すなわち、可能な限り、テーブルウォーカがページにアクセスできないようになっている）場合に、有効インジケータ４１４が設定される。
【００５１】
ロックインジケータ４１６は、エントリ４００がロックされているか否かを示すインジケータである。エントリ４００は、ロックインジケータ４１６が設定されると「ロックされている」とみなされ、ロックインジケータ４１６がクリアされると「空き」又は「利用可能」とみなされる。エントリ４００が所定のハードウェア又はソフトウェアエンティティによってロックされると、コンピューティングデバイス２００内の他のハードウェア及びソフトウェアエンティティは、エントリ４００にアクセスすること（例えば、エントリ４００を読み出す、書き込む／更新する等）が抑制される。一方、任意のハードウェア及びソフトウェアエンティティは、（可能性としてロックインジケータ４１６を設定した後に）空き／利用可能なエントリにアクセスすることが許可され得る。例えば、ロックインジケータ４１６が単一ビットであり、最初はクリアされている（例えば、０に設定されている）実施形態では、エンティティは、ロックインジケータ４１６を（例えば、１に）設定することができ、エントリ４００に１回以上アクセスすることができ、エントリ４００へのアクセスが終了したらロックインジケータ４１６をクリアすることができる。説明する実施形態では、ロックインジケータ４１６を用いて、競合状態と、エントリ４００に対して同時の読み出し及び／又は書き込みが生じ得る他の状態と、を回避することができる。
【００５２】
不変インジケータ４１８は、対応するページが不変であるか否かを示すインジケータである。ページが不変である（すなわち、対応する不変インジケータ４１８を用いて、不変であるとマークされた）場合、当該ページは、コア２０８〜２０９上で実行されているソフトウェアエンティティによって書き込まれない。また、ページは、任意のコア２０８〜２０９によって割り当て解除されることが許可されておらず、代わりにプラットフォームセキュリティプロセッサ２３２によって割り当て解除される。不変ページについては、以下により詳細に説明する。
【００５３】
リバースマップテーブル２２８は、各エントリ内の様々な情報を用いて説明されているが、いくつかの実施形態では、異なる構成又はタイプの情報が各エントリ内に存在してもよい。概して、リバースマップテーブル２２８内のエントリ４００は、本明細書で説明する動作を実行するのに十分な情報を含む。
【００５４】
（ゲストアクセスページテーブル）
図５は、いくつかの実施形態による、ゲストアクセスページテーブル２３０を示すブロック図である。上述したように、ゲストアクセスページテーブル２３０は、対応する仮想マシンが、当該仮想マシンの使用のために割り当てられたメモリ領域に以前アクセスされたページを有するとして記憶されているか否かを判別するために用いられる情報を含む。
【００５５】
図５に示すように、ゲストアクセスページテーブル２３０は、多くのインジケータ５００を含む（図５において、インジケータ５００は、破線を用いて強調表示されている）。説明する実施形態では、各ゲストアクセスページテーブル２３０は、対応する仮想マシンの使用のために割り当てられたメモリの各ページ（例えば、４ｋＢページ）に対するインジケータ５００を含む。各インジケータ５００は、仮想マシンが対応するページにアクセスしたか否かを判別するために使用される情報を含む。例えば、インジケータは、対応するページがアクセスされていないことを示すために０に設定され、対応するページがアクセスされたことを示すために１に設定される単一のビットを含んでもよい。
【００５６】
ゲストアクセスページテーブル２３０は多くのインジケータ５００を有するものとして説明しているが、いくつかの実施形態では、ゲストアクセスページテーブル２３０には、異なる構成又はタイプの情報が存在する。概して、ゲストアクセスページテーブル２３０は、仮想マシンが特定のページにアクセスしたか否かの判別を可能にする十分な情報を含む。
【００５７】
（不変ページ）
説明する実施形態では、メモリのページを不変であるとして処理することができる。不変ページは、コア（例えば、コア２０８〜２０９）上で実行されているソフトウェアエンティティ（例えば、ハイパーバイザ、ゲストオペレーティングシステム、アプリケーションプログラム等）によって書き込むことができないページである。換言すれば、不変ページは、何れかのソフトウェアエンティティによって全体的又は部分的に書き換えられ、更新され、修正され、追加され又は削除される等が抑制される。また、不変ページは、プラットフォームセキュリティプロセッサ（例えば、プラットフォームセキュリティプロセッサ２３２）によって割り当て解除され、例えば、コア２０８〜２０９等のコア（例えば、実行されているソフトウェアエンティティ（例えば、ハイパーバイザ等）の代わりに又はソフトウェアエンティティの制御下で動作するコア）によって割り当て解除することができない。
【００５８】
いくつかの実施形態では、ページを不変であるとマークして、当該ページをソフトウェアエンティティによる不要な書き込み又は他の変更から保護することができる。例えば、通常、ハードウェアを介して（例えば、プラットフォームセキュリティプロセッサ２３２を介して）のみアクセスされるページを、不変であるとマークしてもよい。このようなページは、ゲストアクセスページテーブル２３０がメモリ２０６内に記憶されているページ及び／又は機密情報（例えば、保持された仮想マシンレジスタ状態等）を記憶するために用いられるページを含むことができる。説明したようにページを不変であるとマークすることは、以前のバージョン及びおそらく期限切れのバージョンのページ（暗号化されたページを含む）が所望／現在のページの場所に不正に又は誤って置き換えられる「リプレイ」アタックを抑制することができる。
【００５９】
いくつかの実施形態では、上述した不変インジケータ（すなわち、不変インジケータ４１８）を、有効インジケータ（すなわち、有効インジケータ４１４）と、ページのアクセスの共有／プライベートタイプの表示と共に用いて、アクセス仮想マシン（すなわち、その上で実行されるゲストオペレーティングシステム）に対して、ページの読み出し専用（ＲＯ）アクセス又は読み出し／書き込み（Ｒ／Ｗ）アクセスを行うことを許可するか否かを判別することができる。例えば、アクセス用の物理アドレス又はそうでなければアクセスに関連する物理アドレスに含まれる「ｃビット」を、ゲストオペレーティングシステムの共有／プライベートタイプのアクセスの指標として用いてもよい（例えば、ｃビット＝０は共有アクセス用、ｃビット＝１はプライベートアクセス用）。例えば、有効インジケータ及び不変インジケータが両方ともクリアされている場合（例えば、０に設定されている）、ページがゲストオペレーティングシステムによって所有されていない（すなわち、アクセスされている）ため、当該ページを「ハイパーバイザ所有」とみなすことができる。この場合、ハイパーバイザは、ページに対するＲ／Ｗアクセスを有し、ゲストオペレーティングシステムは、アクセスが共有ページに対する場合（例えば、ｃビット＝０）にＲ／Ｗアクセスを有し、アクセスがプライベートページに対する場合（例えば、ｃビット＝１）にＲＯアクセスを有する。別の例として、有効インジケータが設定され、不変インジケータがクリアされている場合、ページをゲスト所有（すなわち、特定のゲストオペレーティングシステムが所有している）とみなすことができる。この場合、ハイパーバイザは、ＲＯアクセスを有し、ゲストオペレーティングシステムは、アクセスが共有ページに対する場合（例えば、ｃビット＝０）にＲ／Ｗアクセスを有し、アクセスがプライベートページに対する場合（例えば、ｃビット＝１）であって、本明細書で説明するようにゲストアクセスページテーブルのチェックが、ゲストがページにアクセスしたことを示す場合に、Ｒ／Ｗアクセスを有する。別の例として、有効インジケータ及び不変インジケータが両方とも設定されている場合、ページは不変であるとみなされる。この場合、ハイパーバイザ及びゲストオペレーティングシステムは、共有／プライベートタイプのアクセスに関係なく、全てＲＯアクセスを有する。
【００６０】
（リバースマップテーブルの初期化）
いくつかの実施形態では、コンピューティングデバイスが初期化されているときに（例えば、起動動作中に）、リバースマップテーブル２２８が初期化される。図１０は、いくつかの実施形態による、リバースマップテーブル２２８を初期化するプロセスを示すブロック図である。図１０に示す動作を、いくつかの実施形態で実行される動作の一般的な例として示す。他の実施形態によって実行される動作は、異なる動作、及び／又は、異なる順序で実行される動作を含む。さらに、動作を説明する際に特定のメカニズム／要素（例えば、プラットフォームセキュリティプロセッサ等）を用いているが、いくつかの実施形態では、他のメカニズムが動作を実行し、及び／又は、動作が他のメカニズム／要素上で実行される。
【００６１】
図１０に示すプロセスは、ソフトウェアエンティティ（例えば、オペレーティングシステム、ハイパーバイザ等）が、リバースマップテーブル２２８を記憶するためにメモリ領域を割り当てる場合に開始する（ステップ１０００）。例えば、ソフトウェアエンティティは、リバースマップテーブル２２８に対して、特定のサイズのメモリのブロック又は一部を見つけて予約するための１つ以上の動作を実行することができる。
【００６２】
次に、ソフトウェアエンティティは、リバースマップテーブル２２８内のエントリを初期値に設定する（ステップ１００２）。例えば、ソフトウェアエンティティは、メモリ内の割り当てられた領域内のリバースマップテーブル２２８内の各エントリに０を書き込んでもよい。このようにエントリを設定することによって、ソフトウェアエンティティは、リバースマップテーブル２２８に依存する後続の動作に影響を及ぼし得る不正な又は誤った情報をリバースマップテーブル２２８が最初に含まないことを確実にする。換言すれば、この動作の間、ソフトウェアエンティティは、初期値のみを含むリバースマップテーブル２２８をメモリに生成する。
【００６３】
次いで、ソフトウェアエンティティは、メモリ内のリバースマップテーブル２２８の位置（例えば、開始アドレス及びサイズ）の指標を用いて、各コア（例えば、コア２０８〜２０９）の対応するレジスタ（又は、他のメモリ位置）を更新する（ステップ１００４）。いくつかの実施形態では、レジスタ（又は、他のメモリ位置）は、コンピューティングデバイスの後続の動作中の更新から保護されている。例えば、各コア内の専用レジスタ（例えば、マシンステートレジスタ（例えば、ロックビットを有するレジスタ等））を用いて、リバースマップテーブル２２８の位置の指標を保持することができる。
【００６４】
次に、ソフトウェアエンティティは、１つ以上の特定のページに対するリバースマップテーブルエントリ内の不変インジケータを設定する（ステップ１００６）。例えば、リバースマップテーブル２２８自体がメモリに記憶されているページに関連するエントリに対して、ゲストアクセスページテーブルが記憶されるページに対して、仮想マシンレジスタ状態が記憶されるページに対して、不変インジケータを（例えば、１又は別の値に）設定することができる。この動作中に、ソフトウェアエンティティは、１つ以上のＲＭＴ＿ＵＰＤＡＴＥコマンドを実行して、リバースマップテーブル２２８内の特定の不変インジケータを設定してもよい。説明したように不変インジケータを設定すると、ソフトウェアエンティティ（例えば、ハイパーバイザ等を含む）は、対応するページを後で更新することが抑制されることを思い出されたい。
【００６５】
次いで、ソフトウェアエンティティは、プラットフォームセキュリティプロセッサに対して、リバースマップテーブル内のエントリの内容の検証を行わせる（ステップ１００８）。例えば、ソフトウェアエンティティは、リバースマップテーブル２２８を初期化した後のある時点でプラットフォームセキュリティプロセッサのＩＮＩＴ機能を呼び出してもよい。ＩＮＩＴ機能は、プラットフォームセキュリティプロセッサに対して、リバースマップテーブル２２８をチェックさせて、特定のページのエントリにおいて不変インジケータが設定されていることと、リバースマップテーブル２２８内の他のエントリ（すなわち、特定のページのエントリとは別のエントリ）が初期値を含むことと、を検証させる。そうである場合には、プラットフォームセキュリティプロセッサは、是正措置を行うことなくＩＮＩＴ動作を完了してもよく、その結果、リバースマップテーブル２２８が、本明細書で説明したような使用に備えて解放される。そうでない場合には、プラットフォームセキュリティプロセッサは、１つ以上のエントリが誤った初期値に設定された場合に、是正措置（例えば、障害又はエラーをアサートする、ゲストオペレーティングシステムが起動するのを抑制する等）を実行してもよい。このようにして、プラットフォームセキュリティプロセッサは、リバースマップテーブル２２８の使用を可能にする前にリバースマップテーブル２２８が正しい状態にあることを確実にする。
【００６６】
いくつかの実施形態では、プラットフォームセキュリティプロセッサは、リバースマップテーブル２２８の初期化に関する上述のチェックに加えて他の役割を有する。例えば、いくつかの実施形態では、プラットフォームセキュリティプロセッサは、ゲストオペレーティングシステム（又は、仮想マシン）間でページを移動することと、ゲストオペレーティングシステムに対するリバースマップテーブル２２８間でリバースマップテーブル２２８内の対応するエントリの状態を転送することと、に関する動作（例えば、暗号化、パッケージング等）を行う。別の例として、いくつかの実施形態では、プラットフォームセキュリティプロセッサは、不変であるとマークされたページを割り当て解除する役割を果たし、このようなページの割り当て解除が許可された唯一のエンティティであってもよい。
【００６７】
（リバースマップテーブルの更新）
図６は、いくつかの実施形態による、リバースマップテーブル２２８を更新するプロセスを示すブロック図である。図６に示す動作を、いくつかの実施形態で実行される動作の一般的な例として示す。他の実施形態によって実行される動作は、異なる動作、及び／又は、異なる順序で実行される動作を含む。さらに、動作を説明する際に特定のメカニズム／要素（例えば、ハイパーバイザ等）を用いているが、いくつかの実施形態では、他のメカニズムが動作を実行し、及び／又は、動作が他のメカニズム／要素上で実行される。
【００６８】
図６に示すプロセスは、コンピューティングデバイス内のハイパーバイザが、メモリ内のページを仮想マシンに割り当てる場合に開始する（ステップ６００）。例えば、ハイパーバイザは、仮想マシンの使用のためにメモリ領域を割り当てる際に、特定のページをメモリ領域内の他のページと共に割り当てることができる。割り当ては、仮想マシンが１つ以上のページの割り当て等を要求するときの仮想マシンの動作中に仮想マシンが新たに初期化される場合に実行することができる。割り当て中に、ハイパーバイザは、ネストページテーブルを、対応するゲスト物理アドレスを用いてシステム物理アドレス情報に更新することができる。
【００６９】
ページを割り当てると、ハイパーバイザは、当該ページに関連するＲＭＴ＿ＵＰＤＡＴＥ要求をコンピューティングデバイス内のプロセッサに送信する（ステップ６０２）。ハイパーバイザは、ＲＭＴ＿ＵＰＤＡＴＥ要求をプロセッサに送信する場合、対応する命令（例えば、特別なＣＰＵ命令等）を実行し、専用レジスタ（例えば、モデル固有レジスタ等）にアクセスすること、及び／又は、別のメカニズムを用いることができる。プロセッサは、ＲＭＴ＿ＵＰＤＡＴＥ要求によって、メモリのページに関連するリバースマップテーブル２２８内のエントリを更新するための動作を実行する。いくつかの実施形態では、ＲＭＴ＿ＵＰＤＡＴＥ要求は、他の送信元（例えば、仮想マシン等）から情報を取得することなくリバースマップテーブル２２８内のエントリの更新を可能にするのに十分な情報を含む。例えば、ＲＭＴ＿ＵＰＤＡＴＥ要求は、ページが配置されているシステム物理アドレス、ページをアドレス指定するために仮想マシンによって使用されるゲスト物理アドレス、仮想マシンの識別子、ページサイズ、ページが共有されているか否かの指標、ページを不変であるとマークする要求、リバースマップテーブル２２８内のエントリをロックする要求、及び／又は、他の情報を含むことができる。他の実施形態では、プロセッサは、この情報の一部又は全てを別の送信元から取得する。例えば、ハイパーバイザ及び／又は仮想マシンは、ページに関する情報を特定のメモリ素子（例えば、メモリ２０６、専用レジスタ等）に書き込むことができ、プロセッサは、当該情報を取得するためにメモリ素子を読み出すことができる。別の例として、プロセッサは、ハイパーバイザ及び／又は仮想マシンからの情報を要求してもよい。
【００７０】
次に、プロセッサは、リバースマップテーブル２２８内のエントリに対してロックを設定する（ステップ６０４）。この動作中、プロセッサは、エントリ内のロックインジケータを、エントリがロックされていることを示す値（例えば、１又は別の値）に設定する。このようにロックインジケータを設定することによって、プロセッサは、他のハードウェア又はソフトウェアエンティティが、リバースマップテーブル２２８内のエントリを更新又は他の方法で変更することができないように当該エントリを構成する。このようにして、例えばエンティティ間で競合状態が生じた場合のように、２つ以上のエンティティによるエントリの同時の及び場合によっては誤った変更を回避することができる。
【００７１】
次いで、プロセッサは、ページが不変ではないと判別する（ステップ６０６）。この動作中、プロセッサは、リバースマップテーブル２２８内のエントリから不変インジケータの値を取得し、不変インジケータが、ページが不変であることを示す値に設定されているか否かを判別する。この例の場合、ページは不変ではないため、上述したように書き込みが可能であると想定されている。エントリが不変であった場合、プロセッサは、当該エントリに対するロックを解除し（例えば、ロックインジケータを０に設定し）、ＲＭＴ＿ＵＰＤＡＴＥ動作を失敗させる。これは是正措置を実行することを含んでもよい。
【００７２】
次に、プロセッサは、ページに関する情報に基づいてリバースマップテーブル２２８内のエントリを更新しても、リバースマップテーブル内に既に存在する情報と競合しないことを判別するする（ステップ６０８）。例えば、プロセッサは、ページのサイズを１つ以上の他のエントリ内のページサイズと比較して、当該ページの情報が、１つ以上の既存のページと重複するページを記述していないことを確実にしてもよい。例えば、プロセッサは、小さいページ（例えば、４ｋＢ）についての情報が、リバースマップテーブル２２８内のエントリであって、リバースマップテーブル２２８内の別の位置における大きいページ（例えば、２ＭＢ）に使用されるシステム物理アドレスのセット内にシステム物理アドレスが含まれるエントリに書き込まれないことを判別する。換言すれば、プロセッサは、小さいページが大きいページと重複しないと判別する。同様に、プロセッサは、大きいページが１つ以上の小さいページと重複しないと判別してもよい。競合が検出された場合、プロセッサは、是正措置（例えば、ハイパーバイザ及び／又は仮想マシンに障害を提起する、エラーを通知する等）を行ってもよい。
【００７３】
次いで、プロセッサは、ページに対するリバースマップテーブルの更新を行う（ステップ６１０）。リバースマップテーブル２２８の更新中に、プロセッサは、ページについての上述した情報（すなわち、システム物理アドレス、ゲスト物理アドレス、仮想マシンの識別子、ページサイズ等）の一部又は全てを、リバースマップテーブル２２８のエントリ内の対応するフィールドに書き込む。更新が完了すると、リバースマップテーブル２２８は、エントリ用のシステム物理アドレスが何れのゲスト物理アドレスにマッピングするか、ページにアクセスできる特定の仮想マシン等を決定するために、コンピューティングデバイス（例えば、テーブルウォーカ等）内の情報のコンシューマにとって十分な情報を当該エントリに含む。
【００７４】
プロセッサは、リバースマップテーブル２２８を更新する場合に、エントリに対するアクセスインジケータを、当該エントリが対応する仮想マシンによって未だアクセスされていないことを示す値（例えば、０）に設定する。このようにして、プロセッサは、リバースマップテーブル２２８内のエントリがハイパーバイザによって更新されたという情報をコンシューマに示すようにエントリを構成する。これは、ハイパーバイザが不正に、誤って等によりリバースマップテーブル２２８を変更するケースを回避するのを助けることができる。
【００７５】
いくつかの実施形態では、エントリが以前に有効であった場合、すなわち、リバースマップテーブル２２８内に既に存在していた情報が更新によって上書きされた場合、プロセッサは、コンピューティングデバイスのＴＬＢから関連する情報をフラッシュすることができる（及び、単にＴＬＢからの情報を全てフラッシュしてもよい）。このようにして、プロセッサは、上書きされているシステム物理アドレス及び／又はゲスト物理アドレスに関連する変換情報の古くなったコピーをＴＬＢから削除する。
【００７６】
いくつかの実施形態では、プロセッサは、リバースマップテーブル２２８内のエントリを更新する場合に、１つ以上のエントリに対するサブページカウントを更新する。例えば、プロセッサは、所定の小さいページについて、当該小さいページが存在し得る１つ以上の大きいページのエントリを見つけて更新する。例えば、エントリが４ｋＢページに関する情報で更新されると、プロセッサは、大きいページ（それ自体は割り当てられてなくてもよい）のエントリに関する情報を更新して、大きいページの領域が小さいページを含むことを反映する。このようにして、プロセッサは、ページの情報に基づくリバースマップテーブル２２８の更新が、リバースマップテーブル内に既に存在する情報と競合しないというステップ６０４での判別を単純にするために、テーブルに情報を追加する。すなわち、プロセッサは、リバースマップテーブル２２８内の対応する小さいページエントリの各々をチェックすることなく、サブページカウントからの情報だけを使用して、大きいページのエントリの更新を停止することができるように、サブページカウントを設定する。
【００７７】
プロセッサは、リバースマップテーブル２２８の更新を完了した後に、リバースマップテーブル２２８内のエントリに対するロックをクリアする（ステップ６１２）。この動作中、プロセッサは、エントリ内のロックインジケータを、エントリがロックされていないことを示す値（例えば、０又は別の値）にクリアする。更新後にこのようにロックインジケータをクリアすることによって、プロセッサは、他のハードウェア又はソフトウェアエンティティがロックを取得してエントリを更新する又は他の方法で変更可能となるように、エントリを再構成する。
【００７８】
後続の動作中に、ハイパーバイザは、ページのマッピングを更新するか否かを判別する（ステップ６１４）。例えば、対応する仮想マシンがもはやページを用いていないので、ハイパーバイザが当該ページを異なる仮想マシンに割り当てることにより、既存のシステム物理アドレスに関連するゲスト物理アドレスの更新が必要になる。判別をすると、ハイパーバイザは、ステップ６０２〜６１２を実行して、リバースマップテーブル２２８内の対応するエントリを更新する。上述したように、更新中に、プロセッサは、ページに関する上述した情報（すなわち、システム物理アドレス、ゲスト物理アドレス、仮想マシンの識別子、ページサイズ等）の一部又は全てを、リバースマップテーブルのエントリ内の対応するフィールドに書き込む。また、プロセッサは、アクセスインジケータを０に設定して、リバースマップテーブル２２８内のエントリが更新されたことを示す。ページのマッピングを更新しない場合（ステップ６１４）、プロセスは終了する。
【００７９】
ＲＭＴ＿ＵＰＤＡＴＥ動作は、対応するページの割り当てに関連するものとして説明しているが、ＲＭＴ＿ＵＰＤＡＴＥ動作は、ページが割り当てられたときにのみ使用されることに限定されない。概して、ＲＭＴ＿ＵＰＤＡＴＥ動作は、リバースマップテーブル内のエントリがハイパーバイザ（又は、コンピューティングデバイス内の別のソフトウェアエンティティ）によって更新されるときにはいつでも実行することができる。換言すれば、ステップ６０２〜６１２の動作は、対応するページの割り当て以外の理由でリバースマップテーブル内のエントリを更新する場合に実行することができる。これは、単にリバースマップテーブル２２８に対する一般的な「更新」であるステップ６１４で示されている。
【００８０】
図６に示すように、ハイパーバイザ（及び、他のソフトウェアエンティティ）は、リバースマップテーブル２２８に「直接」アクセスできない。その代わりに、ハイパーバイザは、ＲＭＴ＿ＵＰＤＡＴＥ要求を送信し、プロセッサは、上述したように更新を処理する（アクセスインジケータをクリアすることを含む）。リバースマップテーブル２２８に対するハイパーバイザのアクセスを、説明したＲＭＴ＿ＵＰＤＡＴＥ動作に限定することによって、説明する実施形態では、ハイパーバイザがネストページテーブル及びリバースマップテーブル２２８の両方を不正に、誤って等により更新することによって、場合によってはネストページテーブルの更新が隠れる状況を回避する。
【００８１】
いくつかの実施形態では、ハイパーバイザが特定の仮想マシンを終了させる場合には、ハイパーバイザは、仮想マシンに割り当てたページを回収し、続けて、ネストページテーブル及びリバースマップテーブル２２８を変更することによって、ページを再割り当てする。なお、不変ページの割り当て解除は、プラットフォームセキュリティプロセッサを介して行われることに留意されたい。プラットフォームセキュリティプロセッサは、ソフトウェアエンティティが、プラットフォームセキュリティプロセッサに対してページの割り当て解除の実施を要求することを可能にするように、ソフトウェアエンティティ（例えば、ハイパーバイザ）へのインタフェースを提供してもよい。
【００８２】
（ゲストアクセスページテーブル内のインジケータのクリア）
図７は、いくつかの実施形態による、ゲストアクセスページテーブル２３０内のインジケータをクリアするプロセスを示すブロック図である。図７に示す動作を、いくつかの実施形態で実行される動作の一般的な例として示す。他の実施形態によって実行される動作は、異なる動作、及び／又は、異なる順序で実行される動作を含む。さらに、動作を説明する際に特定のメカニズム／要素（例えば、仮想マシン等）を用いているが、いくつかの実施形態では、他のメカニズムが動作を実行し、及び／又は、動作が他のメカニズム／要素上で実行される。
【００８３】
図７の例の場合、図８〜図９の動作が実行されたものと想定している。換言すれば、メモリのページは、既に、テーブルウォーカによってアクセスされたものとしてマークされている。
【００８４】
図７に示すプロセスは、メモリのページを解放することを仮想マシンが判別した場合に開始する（ステップ７００）。例えば、仮想マシンは、割り当てられたページがもはや用いられておらず、したがってハイパーバイザによる再割り当てのために返してもよいと判別することができる。
【００８５】
次に、仮想マシンは、プロセッサに対して、ページに関連するＧＡＰ＿ＦＲＥＥ要求を送信する（ステップ７０２）。ＧＡＰ＿ＦＲＥＥ要求によって、プロセッサは、仮想マシンに関連するゲストアクセスページテーブル２３０内のエントリを更新するための動作を実行する。いくつかの実施形態では、ＧＡＰ＿ＦＲＥＥ要求は、ページ（例えば、ゲスト物理アドレス）、ページのサイズ、及び／又は、要求元の仮想マシン（例えば、ゲストＩＤ（例えば、仮想マシンのアドレス空間識別子））を識別する情報を含む。
【００８６】
次いで、プロセッサは、仮想マシンがリバースマップテーブル２２８内のページにアクセスしたものとして示されていると判別する（ステップ７０４）。例えば、プロセッサは、リバースマップテーブル２２８内の対応するエントリから情報を取得して、当該エントリが有効であること、当該エントリからのゲスト物理アドレスが、要求からのページを識別する情報と一致すること、（例えば、エントリ内のアクセスインジケータをチェックすることによって）ページがアクセスされたとリバースマップテーブル２２８が示していること、ゲストＩＤが要求元の仮想マシンのゲストＩＤと一致すること、エントリからのページサイズがＧＡＰ＿ＦＲＥＥで示されたページのサイズと一致すること、を検証してもよく、及び／又は、他のチェックを行ってもよい。仮想マシンがページにアクセスしたと示されていない場合、プロセッサは、是正措置（例えば、仮想マシン及び／又はハイパーバイザに障害を提起する、エラーを通知する等）を行う。
【００８７】
次に、プロセッサは、ページに対するゲストアクセスページテーブル２３０の更新を行う（ステップ７０６）。ゲストアクセスページテーブル２３０の更新中に、プロセッサは、ページのインジケータを特定の値（例えば、０）に設定して、当該ページが仮想マシンによってアクセスされていないことを示す。更新が完了すると、ゲストアクセスページテーブル２３０は、仮想マシンが対応するページにアクセスしていないと判別するために、コンピューティングデバイス（例えば、テーブルウォーカ等）内の情報のコンシューマにとって十分な情報を、対応するインジケータ内に含む。
【００８８】
また、プロセッサは、説明したようにゲストアクセスページテーブル２３０を更新する場合、リバースマップテーブル２２８内の対応するエントリを更新して、ページが仮想マシンによってアクセスされていないことを示す。例えば、プロセッサは、ＲＭＴ＿ＵＰＤＡＴＥ動作を介して、リバースマップテーブル２２８内の対応するエントリにおいて、アクセスインジケータを、ページがアクセスされていないことを示す値（例えば、０）に設定することができる。このようにして、プロセッサは、ページに対するゲストアクセスページテーブル２３０内のインジケータと、リバースマップテーブル２２８内のアクセスインジケータとが、ページがアクセスされていないか否かに関して互いに一致することを確実にする。いくつかの実施形態では、リバースマップテーブル２２８の更新が失敗するか拒否されると（例えば、リバースマップテーブル２２８内のロックされたエントリにより）、ゲストアクセスページテーブルの更新も失敗する。
【００８９】
いくつかの実施形態では、ＧＡＰ＿ＦＲＥＥ動作は、ゲストアクセスページテーブル２３０にアクセスするために仮想マシンにとって利用可能な唯一のメカニズムである。換言すれば、これらの実施形態では、仮想マシンは、直接アクセスすることがブロックされ、したがってゲストアクセスページテーブル２３０に単純に値を書き込むことができない。仮想マシンにＧＡＰ＿ＦＲＥＥ動作を使用させることにより、例えば、仮想マシンがゲストアクセスページテーブル２３０を更新する場合に、上述したようにリバースマップテーブル２２８がチェック及び更新されることを確実にする。
【００９０】
（リバースマップテーブル及びゲストアクセスページテーブルの使用）
図８は、いくつかの実施形態による、リバースマップテーブル及びゲストアクセスページテーブルを用いるプロセスを示すブロック図である。図８に示す動作を、いくつかの実施形態で実行される動作の一般的な例として示す。他の実施形態によって実行される動作は、異なる動作、及び／又は、異なる順序で実行される動作を含む。さらに、動作を説明する際に特定のメカニズム／要素（例えば、プロセッサ等）を用いているが、いくつかの実施形態では、他のメカニズムが動作を実行し、及び／又は、動作が他のメカニズム／要素上で実行される。
【００９１】
図８に示すプロセスは、テーブルウォーカ（例えば、メモリ管理ユニット内のハードウェアテーブルウォーカ）が、所定の仮想アドレスからシステム物理アドレスに変換する要求をプロセッサ（例えば、プロセッサ内のロード／ストアユニット）から受信した場合に開始する（ステップ８００）。例えば、プロセッサは、仮想マシン及び／又は対応するゲストオペレーティングシステムの実行中に、仮想マシンの所定の仮想アドレスでメモリアクセスを行う要求に遭遇することがある。次に、プロセッサは、所定の仮想アドレスからシステム物理アドレスへの変換の要求をテーブルウォーカに送信してもよい。
【００９２】
次に、テーブルウォーカは、対応するゲストページテーブル及びネストページテーブル内でテーブルウォークを実行し、最終的に仮想アドレスに関連するシステム物理アドレスを取得する（ステップ８０２）。テーブルウォーカは、ページテーブルウォーク中にシステム物理アドレスを取得する間に、ネストページテーブル（又は、他の場所）から他の情報（例えば、ページのサイズ等）を取得してもよい。また、プロセッサは、テーブルウォークの実行を回避するために、変換のキャッシュされたコピーを見つけるための試みにおいて１つ以上のＴＬＢをチェックすることができる。しかし、この例では、変換のキャッシュされたコピーは使用できないと想定されている。
【００９３】
テーブルウォーカは、システム物理アドレスを取得すると、リバースマップテーブル及びゲストアクセスページテーブルのうち少なくとも一方をチェックして、仮想マシンが対応するページにアクセスしたか否かを判別する（ステップ８０４）。図９は、いくつかの実施形態による、リバースマップテーブル及びゲストアクセスページテーブルのうち少なくとも一方をチェックして、仮想マシンが対応するページにアクセスしたか否かを判別するプロセスを示すブロック図である。図９に示す動作を、いくつかの実施形態で実行される動作の一般的な例として示す。他の実施形態によって実行される動作は、異なる動作、及び／又は、異なる順序で実行される動作を含む。さらに、動作を説明する際に特定のメカニズム／要素（例えば、テーブルウォーカ等）を用いているが、いくつかの実施形態では、他のメカニズムが動作を実行し、及び／又は、動作が他のメカニズム／要素上で実行される。
【００９４】
図９に示すように、プロセスは、テーブルウォーカが、システム物理アドレスに関連するエントリ内のリバースマップテーブル２２８から情報を取得する場合に開始する（ステップ９００）。例えば、テーブルウォーカは、システム物理アドレスに比例するか他の方法に基づくリバースマップテーブル２２８のベースアドレスからのオフセットにあるリバースマップテーブル２２８内のエントリから情報を取得することができる。上述したように、いくつかの実施形態では、エントリからの情報は、記憶されたゲストＩＤ、記憶されたゲスト物理アドレス、記憶されたサブページカウント、記憶されたアクセスインジケータ、記憶されたサイズ、及び、有効インジケータの一部又は全てを含む。
【００９５】
次に、テーブルウォーカは、取得した情報に基づいて、仮想マシンがページにアクセスしたか否かを判別する（ステップ９０２）。例えば、テーブルウォーカは、有効なインジケータによって示されるように、エントリが有効であるか否かを判別することができる。別の例として、テーブルウォーカは、エントリからの記憶されたゲスト物理アドレスが、仮想マシンからの要求に関連する（すなわち、対応するテーブルウォーク中にゲストページテーブルから取得された）ゲスト物理アドレスと一致するか否かを判別することができる。別の例として、テーブルウォーカは、ネストページテーブルから取得したページサイズが、エントリからの記憶されたページサイズと一致するか否かを判別することができる。別の例として、テーブルウォーカは、エントリからの記憶されたゲストＩＤが、要求元の仮想マシンに関連する識別子と一致するか否かを判別することができる。別の例として、テーブルウォーカは、エントリに対する読み出し／書き込み許可（又は、読み出し／書き込み許可を表す値）が、メモリアクセスのタイプと一致するか否かを判別することができる。別の例として、テーブルウォーカは、アクセスが書き込みアクセスである（すなわち、読み出し専用アクセスではない）場合に、エントリが不変であるとマークされているか否かを判別することができる。別の例として、テーブルウォーカは、エントリがロックされているとマークされている（したがって、更新中又は変更中である可能性がある）か否かを判別することができる。テーブルウォーカは、取得した情報が、仮想マシンがページにアクセスできないことを示す場合（ステップ９０４）、仮想マシンがページにアクセスできないと判別する（ステップ９０６）。
【００９６】
テーブルウォーカは、取得した情報が、仮想マシンがページにアクセスしたことを示す場合（ステップ９０４）、取得した情報が、ページがアクセスされたと示しているかどうかを判別する（ステップ９０８）。例えば、テーブルウォーカは、取得した情報からのアクセスインジケータが、ページがアクセスされたことを示す特定の値（例えば、１）に設定されているか否かを判別することができる。ページがアクセスされた場合（例えば、メモリ動作が仮想マシンによる対応するページの最初のアクセスではない場合）、テーブルウォーカは、仮想マシンが当該ページにアクセスしたと判別する（ステップ９１０）。換言すれば、リバースマップテーブル２２８内のエントリからの情報が、少なくとも１つ前のアクセスが仮想マシンによるそのページへのアクセスであったことを示す場合、テーブルウォーカは、仮想マシンが当該ページにアクセスしたと判別する。アクセスインジケータは、ハイパーバイザが（ＲＭＴ＿ＵＰＤＡＴＥ動作を介して）エントリを更新する毎にページがアクセスされたわけではないことを示す値に設定されているので、ゲスト物理アドレスからシステム物理アドレスへのマッピングが変化したことが示されているのを思い出されたい。アクセスインジケータは、ページがアクセスされたことを示すので、ハイパーバイザは、エントリを変更していないことが分かる。仮想マシンがアクセスしたことも分かっているので（ステップ９０４より）、ゲスト物理アドレスからシステム物理アドレスへの変換が使用されるのを許可するのが安全であることが分かる。
【００９７】
取得した情報が、ページがアクセスされていないことを示す場合、テーブルウォーカは、ページについてのゲストアクセスページテーブルインジケータが一致するアクセス情報を有するか否かを判別する（ステップ９１２）。より具体的には、テーブルウォーカは、リバースマップテーブル及びゲストアクセスページテーブルの両方が、ページがアクセスされていないことを示すことを検証する。上述したように、これらの値に不一致があると、ハイパーバイザ（及び／又は、別のエンティティ）が、リバースマップテーブル２２８内のエントリを更新したこと、及び、マッピングがもはや信頼できないことを示す。したがって、不一致又は他の不一致が生じると、テーブルウォーカは、仮想マシンがページにアクセスしていないと判別する（ステップ９０６）。
【００９８】
ページがアクセスされていないことを示す際に、ページについてのゲストアクセスページテーブルインジケータが、エントリからのアクセスインジケータと一致する（又は、他の方法で一致する）場合（ステップ９１２）、テーブルウォーカは、仮想マシンがページにアクセスしたと判別する（ステップ９１０）。
【００９９】
説明した実施形態では、ページに対するゲストアクセスページテーブルインジケータと、エントリからのアクセスインジケータとの両方が、ページがアクセスされていないことを示し、仮想マシンのプロセッサによってページのアクセスが行われる場合には（すなわち、図８〜図９の動作と共に）、テーブルウォーカ（及び／又は、別のエンティティ）は、ページについてのゲストアクセスページテーブルインジケータと、リバースマップテーブル２２８内のエントリにおけるアクセスインジケータとを、ページがアクセスされたことを示す値（例えば、１）に設定する。このようにして、テーブルウォーカ（又は、他のエンティティ）は、ページがアクセスされたことを記憶する。
【０１００】
図８に戻って、仮想マシンが対応するページにアクセスしていない場合（ステップ８０６）、テーブルウォーカは、ゲスト物理アドレスからシステム物理アドレスへの変換を終了する（ステップ８０８）。例えば、テーブルウォーカは、障害をアサートしてもよいし、別の是正措置を行ってもよいし、及び／又は、変換を終了してもよいし、システム物理アドレスをプロセッサに提供しなくてもよい。そうではなく、仮想マシンが対応するページにアクセスした場合には（ステップ８０６）、テーブルウォーカは、ゲスト物理アドレスからシステム物理アドレスへの変換を完了する（ステップ８１０）。変換を完了することは、システム物理アドレスをプロセッサに提供することを含み、システム物理アドレスは、メモリにアクセスするために用いられる等してもよい。また、プロセッサは、後続の検索のために、返された仮想アドレスから物理アドレスへの変換（すなわち、仮想アドレスからシステム物理アドレスへの変換）をＴＬＢにキャッシュすることができる。
【０１０１】
上述したチェック動作は、特定の仮想マシンに割り当てられた（例えば、共有されていない）ページに対して２つのルールに従うことが確実になる。第１ルールは、メモリ内の各ページは、一度に１つのゲストアドレスのみに関連付けられているということである。このルールは、上記のステップ９０２〜９０４の間に実施される。第２ルールは、特定の仮想マシンにのみ割り当てられた使用中のページは、仮想マシンが関与していない限りハイパーバイザによって再マッピングされてはならないということである。このルールは、図６の上述したＲＭＴ＿ＵＰＤＡＴＥ動作と、ステップ９０８〜９１２のリバースマップテーブル２２８及びゲストアクセスページテーブル２３０のチェックと、を用いて実施される。
【０１０２】
いくつかの実施形態では、ホストアクセス（例えば、ハイパーバイザ）のために実行されたテーブルウォークは、仮想マシン及び／又はゲストオペレーティングシステムのためのテーブルウォークと異なる方法で処理されてもよい。例えば、要求をハイパーバイザ／ホストから来たものと識別し、アクセスが書き込み用である（すなわち、読み出し専用でもなく命令フェッチ用でもない）ことを示す識別子を有する仮想アドレスから物理アドレスへの変換要求を受信すると、テーブルウォーカは、リバースマップテーブル２２８内の対応するエントリに対する有効なインジケータが、ゲストオペレーティングシステムがそのページを所有することを示すように設定されている場合、ロックインジケータがエントリに設定されている場合、小さいページが、ハイパーバイザによってアクセス可能／書き込み可能な大きいページ内にない場合、及び／又は、大きいページが、ハイパーバイザによってアクセス可能／書き込み可能でない１つ以上の小さいページを含む場合に、ページフォルトをアサートしてもよいし、別の是正措置を実行してもよい。なお、これらのチェックのうち最初のもの（すなわち、リバースマップテーブル２２８内の有効なインジケータのチェック）は、ハイパーバイザが書き込みアクセスによってプライベートゲストオペレーティングシステムページにアクセスしていないことを確実にするために使用されることに留意されたい。換言すれば、ハイパーバイザは、有効ビット（不変ビットを設定してもよい）を用いて、ゲストオペレーティングシステムが所有するページに書き込みアクセスを行うことが抑制される。
【０１０３】
（共有ページ）
いくつかの実施形態では、メモリ内のページを２つ以上の仮想マシンによって共有することができる。換言すれば、個々のページは、２つ以上の仮想マシンによってアクセス可能であってもよい。例えば、共通ライブラリ（ｓｔｄｌｉｂ．ｈ等）からのプログラムコード、アプリケーション、カーネルルーチン等を含むページを共有することができる。別の例として、仮想マシンによって読み出されるデータのページを共有することができる。いくつかの実施形態では、ページが共通に使用され、したがって少なくともいくつかの及びおそらく全ての仮想マシンによって共有可能であるという点で、共有ページはグローバルに共有されたページであってもよい。これらの実施形態では、コンピューティングデバイスは、共有ページへのアクセスを制御するための様々なメカニズムを使用する。例えば、いくつかの実施形態では、リバースマップテーブル２２８内のページのエントリ内のグローバル共有ページインジケータは、ページが共有されていることを示すために特定の値（例えば、１）に設定され、不変インジケータは、ページが不変であることを示すように設定され得る。いくつかの実施形態では、共有ページは、全ての仮想マシン間で（又は、少なくともページへの共有アクセスが許可された仮想マシン間で）共有されるキーを用いて暗号化される。
【０１０４】
いくつかの実施形態では、共有ページに対して特定のタイプのアクセスのみが許可されている。例えば、共有ページに対する書き込みが許可されなくてもよい。いくつかの実施形態では、リバースマップテーブル２２８及びゲストアクセスページテーブル２３０の上述したチェック中に（ステップ８０６）、システムは、許可されないメモリアクセス（例えば、書き込み等）が実行されていないことを確実にするために、１つ以上のチェックを実行する。これらの実施形態では、テーブルウォーカは、メモリアクセスが共有ページに対して許可されていない場合、仮想マシンがページにアクセスしていないと判別することができる。
【０１０５】
（暗号化ページ）
いくつかの実施形態では、所定の仮想マシンに割り当てられたメモリ内のページは、（セキュリティ対策として）所定の仮想マシンに固有のキーを用いて暗号化される。これらの実施形態では、仮想マシンは、対応するページが暗号化されているか否かを示す各ページに関連するインジケータを含んでもよい。いくつかの実施形態では、リバースマップテーブル２２８及びゲストアクセスページテーブル２３０の上述したチェックは、暗号化されていないページに対して実行されない（これらのページは、全体的に安全でない／信頼できないと推定されるため）。共有ページは、暗号化されていなくてもよいし、及び／又は、全ての仮想マシンに認識されているキーを用いて暗号化されていてもよい。
【０１０６】
（リバースマップテーブル及びゲストアクセスページテーブルのチェックの有効化／無効化）
いくつかの実施形態では、リバースマップテーブル２２８及びゲストアクセスページテーブル２３０の上述したチェックを有効化及び無効化するために、ハードウェア又はソフトウェアスイッチが利用可能である。例えば、各仮想マシンには、上述したチェックを有効にするためにフラグ、レジスタ等に特定の値（例えば、１）を書き込むことができるソフトウェア内のフラグ、レジスタ等が設けられてもよい。これらの実施形態では、フラグ、レジスタ等が別の値（例えば、０）に設定されている場合、チェックが実行されない。
【０１０７】
（仮想マシン以外のエンティティのチェック）
仮想マシンにページが割り当てられる実施形態について上述したが、いくつかの実施形態では、仮想マシン以外のエンティティは、不正なページの再マッピングから同様の方法で保護される。例えば、入出力メモリ管理ユニットは、同様のチェックを、周辺デバイスに関連するテーブル（すなわち、リバースマップテーブル及びゲストアクセスページと同等であるがＩＯＭＭＵ以外のテーブル）について同様のチェックを実行することができる。概して、説明する実施形態は、メモリ内のページにアクセスすることができるコンピューティングデバイス内の任意のエンティティを用いて実施可能である。
【０１０８】
（ページ移動及び分割）
いくつかの実施形態では、ハイパーバイザは、メモリ内のメモリのページを移動する理由を有することがある。例えば、ページは、ページ保証のアクセスとして、より高速で小容量のメモリからより低速で大容量のメモリに移動されてもよいし、不均一メモリアクセス（ＮＵＭＡ）システム等においてアクセスコアに近づくようにメモリ内で移動されてもよい。メモリ内のページを移動させるための動作の一部として、コンピューティングデバイス内のプロセッサは、リバースマップテーブル２２８のエントリが移動を反映するように更新されている間、上述したロックインジケータを用いて、移動元及び移動先のページのリバースマップテーブル２２８のエントリをロックしてもよい。また、プロセッサは、様々なチェックを行って、エントリ内の情報（ページカウント、サイズ等）が一致し及び／又は互換性があることを確実にし、その結果、移動先のページのエントリが、移動後のページに適していることを確実にしてもよい。
【０１０９】
いくつかの実施形態では、ハイパーバイザは、大きいサイズ（例えば、２ＭＢ）のページを仮想マシンに割り当てることができるが、後で、大きいページを多くの小さいページ（例えば、４ｋＢ）に分割することによって、大きいページを分割する理由がある。例えば、ハイパーバイザは、小さい４ｋＢページを別々に移動し及び／又は大きい２ＭＢページ内の小さいページのページ属性を変更する理由を有することがある。ページを分割するための動作の一部として、コンピューティングデバイス内のプロセッサは、リバースマップテーブル２２８のエントリが分割を反映するように更新されている間（すなわち、大きい及び小さいページのサイズ情報が更新されている間）、上述したロックインジケータを用いて、大きいページのリバースマップテーブル２２８のエントリをロックしてもよい。また、プロセッサは、大きいページを分割できること（すなわち、大きいページが有効であるとマークされていること、不変ではないこと、グローバルに共有されていないこと等）を確実するために、チェックを実行してもよい。
【０１１０】
いくつかの実施形態では、コンピューティングデバイス（例えば、図２のコンピューティングデバイス２００及び／又はその一部）は、非一時的なコンピュータ可読記憶媒体に記憶されたコード及び／又はデータを用いて、本明細書で説明した動作の一部又は全てを実行する。より具体的には、コンピューティングデバイスは、コンピュータ可読記憶媒体からコード及び／又はデータを読み出し、説明した動作を実行するときにコードを実行し及び／又はデータを使用する。
【０１１１】
コンピュータ可読記憶媒体は、コンピューティングデバイスによって使用されるコード及び／又はデータを記憶する任意のデバイス、媒体又はこれらの組み合わせとすることができる。例えば、コンピュータ可読記憶媒体は、揮発性メモリ若しくは不揮発性メモリ（例えば、フラッシュメモリ、ランダムアクセスメモリ（ｅＤＲＡＭ、ＲＡＭ、ＳＲＡＭ、ＤＲＡＭ、ＤＤＲ、ＤＤＲ２／ＤＤＲ３／ＤＤＲ４  ＳＤＲＡＭ））、読み出し専用メモリ（ＲＯＭ）、及び／又は、磁気若しくは光学的記憶媒体（例えば、ディスクドライブ、磁気テープ、ＣＤ、ＤＶＤ）を含むことができるが、これらに限定されない。
【０１１２】
いくつかの実施形態では、１つ以上のハードウェアモジュールは、本明細書で説明する動作を実行するように構成されている。例えば、ハードウェアモジュールは、１つ以上のプロセッサ／コア／中央処理ユニット（ＣＰＵ）、特定用途向け集積回路（ＡＳＩＣ）チップ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、キャッシュコントローラ、メモリ管理ユニット、計算ユニット、組み込みプロセッサ、グラフィックスプロセッサ（ＧＰＵ）／グラフィックスコア、パイプライン、アクセラレーテッド処理ユニット（ＡＰＵ）、及び／又は、他のプログラマブルロジックデバイスを含むことができるが、これらに限定されない。このようなハードウェアモジュールが起動されると、ハードウェアモジュールは、動作の一部又は全てを実行する。いくつかの実施形態では、ハードウェアモジュールは、動作を実行するための命令（プログラムコード、ファームウェア等）を実行することによって構成された１つ以上の汎用回路を含む。
【０１１３】
いくつかの実施形態では、本明細書で説明した構造及びメカニズム（例えば、コンピューティングデバイス及び／又はその一部）の一部又は全てを表すデータ構造は、コンピューティングデバイスが読み出すことができるデータベース又は他のデータ構造であって、構造及びメカニズムを含むハードウェアを製造するために直接的又は間接的に用いることができるデータベース又は他のデータ構造を含む非一時的なコンピュータ可読記憶媒体に記憶される。例えば、データ構造は、例えばＶｅｒｉｌｏｇ又はＶＨＤＬ等の高水準設計言語（ＨＤＬ）におけるハードウェア機能の動作レベル記述又はレジスタ転送レベル（ＲＴＬ）記述であってもよい。この記述は、上述した構造及びメカニズムを含むハードウェアの機能を表す合成ライブラリからゲート／回路素子のリストを含むネットリストを生成するために当該記述を合成することができる合成ツールによって読まれてもよい。次に、ネットリストを配置及びルーティングして、マスクに適用される幾何学的形状を記述するデータセットを生成することができる。次いで、マスクを様々な半導体製造工程で使用して、上述した構造及びメカニズムに対応する１つ以上の半導体回路を製造することができる。代替として、コンピュータアクセス可能な記憶媒体上のデータベースは、ネットリスト（合成ライブラリ有り若しくは無し）、データセット、又は、必要に応じてＧＤＳ（Graphic Data System）ＩＩデータであってもよい。
【０１１４】
この説明では、いくつかの実施形態を説明する際に機能ブロックに言及する場合がある。概して、機能ブロックは、説明した動作を実行する１つ以上の相互に関連する回路を含む。いくつかの実施形態では、機能ブロック内の回路は、説明した動作を実行するためにプログラムコード（例えば、マイクロコード、ファームウェア、アプリケーション等）を実行する回路を含む。また、いくつかの実施形態を説明する際にエンティティに言及する場合がある。概して、エンティティは、ハードウェア機能ブロック（例えば、個々の回路若しくは回路素子、複雑な回路、ＡＳＩＣ、プロセッサ等）及び／又はソフトウェアプログラム（例えば、ルーチン、アプリケーション、機能等）であって、エンティティに帰属又は関連する動作を実行可能なものを含むことができる。
【０１１５】
実施形態の前述の説明は、単に例示及び説明の目的で示されている。これらは、網羅的であること、又は、実施形態を開示された形態に限定することを意図していない。したがって、多くの変更及び変形が当業者には明らかであろう。さらに、上記の開示は、実施形態を限定することを意図していない。実施形態の範囲は、添付の特許請求の範囲によって定義される。
【図１】
2019522298.tif 000003
【図２】
2019522298.tif 000004
【図３】
2019522298.tif 000005
【図４】
2019522298.tif 000006
【図５】
2019522298.tif 000007
【図６】
2019522298.tif 000008
【図７】
2019522298.tif 000009
【図８】
2019522298.tif 000010
【図９】
2019522298.tif 000011
【図１０】
2019522298.tif 000012
【国際調査報告】
2019522298.tif 000013
2019522298.tif 000014