(57)【要約】プロセッサは、変換ルックアサイド・バッファ（ＴＬＢ）及びマッピング・モジュールを備える。ＴＬＢは、複数のエントリを含み、複数のエントリの各エントリは、アドレス変換及び有効ビット・ベクトルを保持するよう構成され、有効ビット・ベクトルの各ビットは、それぞれのアドレス変換コンテキストについて、セットされている場合にはアドレス変換が有効であり、クリアされている場合にはアドレス変換が無効であることを示す。ＴＬＢはまた、複数のエントリの有効ビット・ベクトルのビットに対応するビットを有する無効化ビット・ベクトルを含み、無効化ビット・ベクトルのセットされているビットは、複数のエントリの各エントリの有効ビット・ベクトルの対応するビットを同時にクリアすることを示す。マッピング・モジュールは、無効化ビット・ベクトルを生成する。
2016527652.tif 000002
【特許請求の範囲】
【請求項１】
アーキテクチャ仮想プロセッサ識別子を非アーキテクチャ・グローバル識別子にマッピングし、アーキテクチャ・プロセス・コンテキスト識別子を非アーキテクチャ・ローカル識別子にマッピングするマッピング・モジュールと、
複数のアドレス変換を有する変換ルックアサイド・バッファ（ＴＬＢ）であって、
前記複数のアドレス変換の各アドレス変換について、
前記アドレス変換がグローバル・アドレス変換である場合、前記アドレス変換は、前記マッピング・モジュールが前記アーキテクチャ仮想プロセッサ識別子のうちの１つのアーキテクチャ仮想プロセッサ識別子をマッピングした前記非アーキテクチャ・グローバル識別子のうちの１つの非アーキテクチャ・グローバル識別子の表現によりタグ付けされ、
前記アドレス変換がローカル・アドレス変換である場合、前記アドレス変換は、前記マッピング・モジュールが前記アーキテクチャ・プロセス・コンテキスト識別子のうちの１つのアーキテクチャ・プロセス・コンテキスト識別子をマッピングした前記非アーキテクチャ・ローカル識別子のうちの１つの非アーキテクチャ・ローカル識別子の表現によりタグ付けされる、
ＴＬＢと、
を備えたプロセッサ。
【請求項２】
当該プロセッサによりサポートされている前記アーキテクチャ・プロセス・コンテキスト識別子の空間は、当該プロセッサによりサポートされている前記非アーキテクチャ・ローカル識別子の空間よりも大きく、
前記マッピング・モジュールは、前記非アーキテクチャ・ローカル識別子の前記表現によりタグ付けされている、前記ＴＬＢのすべてのアドレス変換を無効化することにより、非アーキテクチャ・ローカル識別子を再利用して、新しいアーキテクチャ・プロセス・コンテキスト識別子を前記非アーキテクチャ・ローカル識別子にマッピングする、請求項１に記載のプロセッサ。
【請求項３】
当該プロセッサによりサポートされている前記アーキテクチャ仮想プロセッサ識別子の空間は、当該プロセッサによりサポートされている前記非アーキテクチャ・グローバル識別子の空間よりも大きく、
前記マッピング・モジュールは、前記非アーキテクチャ・ローカル識別子の各々を、非アーキテクチャ・グローバル識別子に関連付け、
前記マッピング・モジュールは、前記非アーキテクチャ・グローバル識別子の前記表現によりタグ付けされている、前記ＴＬＢのすべてのアドレス変換を無効化し、前記非アーキテクチャ・グローバル識別子に関連付けられている非アーキテクチャ・ローカル識別子の前記表現によりタグ付けされている、前記ＴＬＢのすべてのアドレス変換を無効化することにより、非アーキテクチャ・グローバル識別子を再利用して、新しいアーキテクチャ仮想プロセッサ識別子を前記非アーキテクチャ・グローバル識別子にマッピングする、請求項１に記載のプロセッサ。
【請求項４】
前記アーキテクチャ仮想プロセッサ識別子は、ｘ８６命令セット・アーキテクチャ仮想プロセッサ識別子（ＶＰＩＤ）である、請求項１に記載のプロセッサ。
【請求項５】
前記アーキテクチャ・プロセス・コンテキスト識別子は、ｘ８６命令セット・アーキテクチャ・プロセス・コンテキスト識別子（ＰＣＩＤ）である、請求項１に記載のプロセッサ。
【請求項６】
前記ＴＬＢの前記グローバル・アドレス変換がタグ付けされている前記非アーキテクチャ・グローバル識別子の前記表現は、１ホット・ビット・ベクトルを含み、前記ＴＬＢの前記ローカル・アドレス変換がタグ付けされている前記非アーキテクチャ・ローカル識別子の前記表現は、１ホット・ビット・ベクトルを含む、請求項１に記載のプロセッサ。
【請求項７】
複数の関連付けられているアーキテクチャ拡張ページ・テーブル・ポインタを有する仮想プロセッサ識別子について、前記マッピング・モジュールは、アーキテクチャ仮想プロセッサ識別子：アーキテクチャ拡張ページ・テーブル・ポインタのペアを前記非アーキテクチャ・グローバル識別子にマッピングする、請求項１に記載のプロセッサ。
【請求項８】
前記非アーキテクチャ・グローバル識別子への前記アーキテクチャ仮想プロセッサ識別子のマッピングを保持するグローバル・コンテキスト・テーブルをさらに備えた、請求項１に記載のプロセッサ。
【請求項９】
前記非アーキテクチャ・ローカル識別子への前記アーキテクチャ・プロセス・コンテキスト識別子のマッピングを保持するローカル・コンテキスト・テーブルをさらに備えた、請求項１に記載のプロセッサ。
【請求項１０】
前記マッピング・モジュールは、当該プロセッサのマイクロコードを含む、請求項１に記載のプロセッサ。
【請求項１１】
複数のアドレス変換を有する変換ルックアサイド・バッファ（ＴＬＢ）を備えるプロセッサを動作させる方法であって、
アーキテクチャ仮想プロセッサ識別子を非アーキテクチャ・グローバル識別子にマッピングし、アーキテクチャ・プロセス・コンテキスト識別子を非アーキテクチャ・ローカル識別子にマッピングするステップと、
前記複数のアドレス変換の各アドレス変換について、
前記アドレス変換がグローバル・アドレス変換である場合、前記アドレス変換を、マッピング・モジュールが前記アーキテクチャ仮想プロセッサ識別子のうちの１つのアーキテクチャ仮想プロセッサ識別子をマッピングした前記非アーキテクチャ・グローバル識別子のうちの１つの非アーキテクチャ・グローバル識別子の表現によりタグ付けするステップと、
前記アドレス変換がローカル・アドレス変換である場合、前記アドレス変換を、前記マッピング・モジュールが前記アーキテクチャ・プロセス・コンテキスト識別子のうちの１つのアーキテクチャ・プロセス・コンテキスト識別子をマッピングした前記非アーキテクチャ・ローカル識別子のうちの１つの非アーキテクチャ・ローカル識別子の表現によりタグ付けするステップと、
を含む方法。
【請求項１２】
前記プロセッサによりサポートされている前記アーキテクチャ・プロセス・コンテキスト識別子の空間は、前記プロセッサによりサポートされている前記非アーキテクチャ・ローカル識別子の空間よりも大きく、
前記非アーキテクチャ・ローカル識別子の前記表現によりタグ付けされている、前記ＴＬＢのすべてのアドレス変換を無効化することにより、非アーキテクチャ・ローカル識別子を再利用して、新しいアーキテクチャ・プロセス・コンテキスト識別子を前記非アーキテクチャ・ローカル識別子にマッピングする、請求項１１に記載の方法。
【請求項１３】
前記プロセッサによりサポートされている前記アーキテクチャ仮想プロセッサ識別子の空間は、前記プロセッサによりサポートされている前記非アーキテクチャ・グローバル識別子の空間よりも大きく、
前記非アーキテクチャ・ローカル識別子の各々を非アーキテクチャ・グローバル識別子に関連付け、
前記非アーキテクチャ・グローバル識別子の前記表現によりタグ付けされている、前記ＴＬＢのすべてのアドレス変換を無効化し、前記非アーキテクチャ・グローバル識別子に関連付けられている非アーキテクチャ・ローカル識別子の前記表現によりタグ付けされている、前記ＴＬＢのすべてのアドレス変換を無効化することにより、非アーキテクチャ・グローバル識別子を再利用して、新しいアーキテクチャ仮想プロセッサ識別子を前記非アーキテクチャ・グローバル識別子にマッピングする、請求項１１に記載の方法。
【請求項１４】
前記アーキテクチャ仮想プロセッサ識別子は、ｘ８６命令セット・アーキテクチャ仮想プロセッサ識別子（ＶＰＩＤ）である、請求項１１に記載の方法。
【請求項１５】
前記アーキテクチャ・プロセス・コンテキスト識別子は、ｘ８６命令セット・アーキテクチャ・プロセス・コンテキスト識別子（ＰＣＩＤ）である、請求項１１に記載の方法。
【請求項１６】
前記ＴＬＢの前記グローバル・アドレス変換がタグ付けされている前記非アーキテクチャ・グローバル識別子の前記表現は、１ホット・ビット・ベクトルを含み、前記ＴＬＢの前記ローカル・アドレス変換がタグ付けされている前記非アーキテクチャ・ローカル識別子の前記表現は、１ホット・ビット・ベクトルを含む、請求項１１に記載の方法。
【請求項１７】
複数の関連付けられているアーキテクチャ拡張ページ・テーブル・ポインタを有する仮想プロセッサ識別子について、アーキテクチャ仮想プロセッサ識別子を非アーキテクチャ・グローバル識別子に前記マッピングすることは、アーキテクチャ仮想プロセッサ識別子：アーキテクチャ拡張ページ・テーブル・ポインタのペアを前記非アーキテクチャ・グローバル識別子にマッピングすることを含む、請求項１１に記載の方法。
【請求項１８】
前記マッピング及び前記タグ付けは、前記プロセッサのマイクロコードにより実行される、請求項１１に記載の方法。
【請求項１９】
コンピューティング・デバイスとともに使用するための少なくとも１つの非一時的なコンピュータ使用可能な媒体内に符号化されたコンピュータ・プログラム製品であって、
プロセッサを指定するための、前記媒体内に具現化されたコンピュータ使用可能なプログラム・コードを含み、前記コンピュータ使用可能なプログラム・コードは、
アーキテクチャ仮想プロセッサ識別子を非アーキテクチャ・グローバル識別子にマッピングし、アーキテクチャ・プロセス・コンテキスト識別子を非アーキテクチャ・ローカル識別子にマッピングするマッピング・モジュールを指定するための第１のプログラム・コードと、
複数のアドレス変換を有する変換ルックアサイド・バッファ（ＴＬＢ）を指定するための第２のプログラム・コードであって、前記複数のアドレス変換の各アドレス変換について、
前記アドレス変換がグローバル・アドレス変換である場合、前記アドレス変換は、前記マッピング・モジュールが前記アーキテクチャ仮想プロセッサ識別子のうちの１つのアーキテクチャ仮想プロセッサ識別子をマッピングした前記非アーキテクチャ・グローバル識別子のうちの１つの非アーキテクチャ・グローバル識別子の表現によりタグ付けされ、
前記アドレス変換がローカル・アドレス変換である場合、前記アドレス変換は、前記マッピング・モジュールが前記アーキテクチャ・プロセス・コンテキスト識別子のうちの１つのアーキテクチャ・プロセス・コンテキスト識別子をマッピングした前記非アーキテクチャ・ローカル識別子のうちの１つの非アーキテクチャ・ローカル識別子の表現によりタグ付けされる、
第２のプログラム・コードと、を含む、
コンピュータ・プログラム製品。
【請求項２０】
前記少なくとも１つの非一時的なコンピュータ使用可能な媒体は、ディスク、テープ、他の磁気記憶媒体、他の光記憶媒体、及び他の電子的記憶媒体からなる群から選択される、請求項１９に記載のコンピュータ・プログラム製品。
【発明の詳細な説明】
【背景技術】
【０００１】
（関連出願の相互参照）
本出願は、参照によりその全体が本明細書に組み込まれる、２０１４年７月２１日に出願された米国特許仮出願第６２／０２６，８３０号に基づく優先権を主張する。
【０００２】
現代のプロセッサは、仮想メモリ機能をサポートしている。仮想メモリ・システムは、メモリをアドレッシングするために、プログラムにより使用される仮想アドレスを、ハードウェアにより使用される物理アドレスにマッピングすなわち変換する。仮想メモリは、プログラムから物理メモリのフラグメンテーションを隠蔽し、プログラムの再配置を円滑にし、プログラムがそのプログラムに利用可能な実物理メモリよりも大きいメモリ・アドレス空間を見ることを可能にするという利点を有する。このような利点は、複数のプログラム又はプロセスによるプロセッサのタイム・シェアリングをサポートする現代のシステムにおいて特に有益である。
【０００３】
オペレーティング・システムは、仮想アドレスを物理アドレスにマッピングする変換テーブル（ページング仮想メモリ・システム（ｐａｇｅｄ  ｖｉｒｔｕａｌ  ｍｅｍｏｒｙ  ｓｙｓｔｅｍ）においてページ・テーブルとしばしば呼ばれる）を作成して、メモリに変換テーブルを保持する。変換テーブルは、テーブルの階層の形態をとることができ、その一部が、仮想アドレスを中間テーブル・アドレスにマッピングする。プログラムが、仮想アドレスを使用してメモリにアクセスするとき、仮想アドレスからその物理アドレスへの変換を実行するために、変換テーブルにアクセスしなければならない。これは、一般に、ページ・テーブル・ウォーク又はテーブル・ウォークと呼ばれる。変換テーブルにアクセスするためにさらにメモリ・アクセスがあると、プログラムにより要求されているデータ又は命令を取得するためのメモリへの最終的なアクセスを著しく遅らせる可能性がある。
【０００４】
現代のプロセッサは、この問題を解消して性能を向上させるために、変換ルックアサイド・バッファ（ＴＬＢ）を備える。ＴＬＢは、変換テーブルにアクセスする必要がある可能性を大幅に低減させるために、仮想アドレスから物理アドレスへのアドレス変換をキャッシュするプロセッサのハードウェア構造である。変換される仮想アドレスが、ＴＬＢ内で探索され、ＴＬＢは、仮想アドレスがＴＬＢ内でヒットした場合、テーブル・ウォークを実行するためにメモリ内の変換テーブルにアクセスするのに要するであろう時間よりもかなり短い時間で物理アドレスを提供する。ＴＬＢの効率（ヒット率）は、プロセッサ性能にとって重要である。
【０００５】
各プロセスすなわちコンテキストは、自身の固有のアドレス空間及び関連付けられているアドレス変換を有する。したがって、１つのプロセスに関するＴＬＢエントリは、別のプロセスに対しては正しくないこともあり得る。すなわち、１つのプロセスに関して作成されたＴＬＢエントリは、別のプロセスに対して陳腐化している（stale）こともあり得る。ＴＬＢの効率を低下させ得る現象の１つは、プロセッサが１つのプロセスの実行から異なるプロセスの実行に切り替えるときである。システムは、陳腐化したＴＬＢエントリを使用して、古いプロセスのためにＴＬＢにキャッシュされているアドレス変換を使用することにより、新しいプロセスの仮想アドレスを間違って変換することがないことを確実にしなければならない。
【発明の概要】
【課題を解決するための手段】
【０００６】
一態様において、本発明は、変換ルックアサイド・バッファ（ＴＬＢ）を提供する。ＴＬＢは、複数のエントリを含み、複数のエントリの各エントリは、アドレス変換及び有効ビット・ベクトル（ｖａｌｉｄ  ｂｉｔ  ｖｅｃｔｏｒ）を保持するよう構成され、有効ビット・ベクトルの各ビットは、それぞれのアドレス変換コンテキストについて、セットされている場合にはアドレス変換が有効であり、クリアされている場合にはアドレス変換が無効であることを示す。ＴＬＢはまた、複数のエントリの有効ビット・ベクトルのビットに対応するビットを有する無効化ビット・ベクトル（ｉｎｖａｌｉｄａｔｉｏｎ  ｂｉｔ  ｖｅｃｔｏｒ）を含み、無効化ビット・ベクトルのセットされているビットは、複数のエントリの各エントリの有効ビット・ベクトルの対応するビットを同時にクリアすることを示す。
【０００７】
別の態様において、本発明は、複数のエントリを含む変換ルックアサイド・バッファ（ＴＬＢ）を動作させるための方法を提供する。複数のエントリの各エントリは、アドレス変換及び有効ビット・ベクトルを保持するよう構成され、有効ビット・ベクトルの各ビットは、それぞれのアドレス変換コンテキストについて、セットされている場合にはアドレス変換が有効であり、クリアされている場合にはアドレス変換が無効であることを示す。方法は、複数のエントリの有効ビット・ベクトルのビットに対応するビットを有する無効化ビット・ベクトルを受け取ることと、複数のエントリの各エントリの有効ビット・ベクトルの、無効化ビット・ベクトルのセットされているビットに対応するビットを同時にクリアすることと、を含む。
【０００８】
さらに別の態様において、本発明は、プロセッサを提供する。このプロセッサは、変換ルックアサイド・バッファ（ＴＬＢ）及びマッピング・モジュールを備える。ＴＬＢは、複数のエントリを含み、複数のエントリの各エントリは、アドレス変換及び有効ビット・ベクトルを保持するよう構成され、有効ビット・ベクトルの各ビットは、それぞれのアドレス変換コンテキストについて、セットされている場合にはアドレス変換が有効であり、クリアされている場合にはアドレス変換が無効であることを示す。ＴＬＢはまた、複数のエントリの有効ビット・ベクトルのビットに対応するビットを有する無効化ビット・ベクトルを含み、無効化ビット・ベクトルのセットされているビットは、複数のエントリの各エントリの有効ビット・ベクトルの対応するビットを同時にクリアすることを示す。マッピング・モジュールは、無効化ビット・ベクトルを生成する。
【図面の簡単な説明】
【０００９】
【図１】プロセッサを示すブロック図である。
【図２】図１のプロセッサの一部をより詳細に示すブロック図である。
【図３】ＴＬＢ内のエントリを示すブロック図である。
【図４】ＴＬＢのエントリにデータを投入する図１のプロセッサの動作を示すフローチャートである。
【図５】探索時にヒットが生じたかどうかを判定するためのＴＬＢ内のロジックを示すブロック図である。
【図６】図２のＴＬＢの図３のエントリのＬＶＡＬビット・ベクトルのビットを無効化するために使用されるロジックを示すブロック図である。
【図７】図１のプロセッサの制御レジスタを示すブロック図である。
【図８】図７の制御レジスタの様々なビットのセットに応答するマッピング・モジュールの動作を示すフローチャートである。
【図９】図２のローカル・コンテキスト・テーブルをより詳細に示すブロック図である。
【図１０】図２のグローバル・コンテキスト・テーブルをより詳細に示すブロック図である。
【図１１】複数のプロセス・コンテキスト識別子をサポートするプロセッサのアーキテクチャ機能を無効にする命令を実行する図１のプロセッサの動作を示すフローチャートである。
【図１２】現在のアドレス変換コンテキストを変更する命令を実行する図１のプロセッサの動作を示すフローチャートである。
【図１３】図１２、図１９、及び図２１のブロック１２０６、ブロック１９１８、及びブロック２１０６においてそれぞれ呼び出されるＭＯＶ＿ＣＲ３（）ルーチンを実行する図１のプロセッサの動作を示すフローチャートである。
【図１４】図１３、図１６、及び図１７のブロック１３０８、ブロック１６０６、及びブロック１７２２においてそれぞれ呼び出されるＡＬＬＯＣＡＴＥ＿ＬＯＣＡＬ＿ＣＯＮＴＥＸＴ（）ルーチンを実行する図１のプロセッサの動作を示すフローチャートである。
【図１５】ハイパーバイザからゲストへの遷移が生じたときの図１のプロセッサの動作を示すフローチャートである。
【図１６】ＭＯＶＴＯＣＲ３ＮＯＶＰＩＤルーチンを実行する図１のプロセッサの動作を示すフローチャートである。
【図１７】ＭＯＶＴＯＣＲ３ＶＰＩＤルーチンを実行する図１のプロセッサの動作を示すフローチャートである。
【図１８】図１７のブロック１７１２において呼び出されるＡＬＬＯＣＡＴＥ＿ＧＬＯＢＡＬ＿ＣＯＮＴＥＸＴ（）ルーチンを実行する図１のプロセッサの動作を示すフローチャートである。
【図１９】ゲストからハイパーバイザへの遷移が生じたときの図１のプロセッサの動作を示すフローチャートである。
【図２０】システム管理モード（ＳＭＭ）への遷移が生じたときの図１のプロセッサの動作を示すフローチャートである。
【図２１】ＳＭＭから出る遷移が生じたときの図１のプロセッサの動作を示すフローチャートである。
【図２２】プロセス・コンテキスト識別子に関連付けられているＴＬＢアドレス変換を無効化する命令を実行するプロセッサの動作を示すフローチャートである。
【図２３Ａ】仮想プロセッサ識別子に関連付けられているＴＬＢアドレス変換を無効化する命令を実行するプロセッサの動作を示すフローチャートである。
【図２３Ｂ】仮想プロセッサ識別子に関連付けられているＴＬＢアドレス変換を無効化する命令を実行するプロセッサの動作を示すフローチャートである。
【図２４】拡張ページ・テーブル・ポインタに関連付けられているＴＬＢアドレス変換を無効化する命令を実行するプロセッサの動作を示すフローチャートである。
【発明を実施するための形態】
【００１０】
用語解説
「アドレス変換コンテキスト」とは、第１のメモリ・アドレス空間から第２のメモリ・アドレス空間へのメモリ・アドレスの変換を可能にする情報のセットである。ｘ８６  ＩＳＡにおけるアドレス変換コンテキストの一例は、ＣＲ３レジスタ（及び他の制御レジスタ、たとえば、ＣＲ０及びＣＲ４並びに関連するモデル固有レジスタ（ＭＳＲ））、ページ・テーブル、ページ・ディレクトリ、ページ・ディレクトリ・ポインタ・テーブル、ＰＭＬ４テーブル、拡張ページ・テーブル・ポインタ（ＥＰＴＰ）、及び／又は線形アドレスから物理メモリ・アドレスへの変換を可能にする拡張ページ・テーブル（ＥＰＴ）に含まれる情報のセットであり得る。ｘ８６  ＩＳＡの場合、変換は、プロセッサ内のハードウェアにより実行される。しかしながら、他のＩＳＡ（たとえば、ＭＩＰＳ、ＳＰＡＲＣ）では、オペレーティング・システムが、変換を実行し得る。ＡＲＭ  ＩＳＡにおけるアドレス変換コンテキストの別の例は、変換テーブル・ベース・レジスタ（ＴＴＢＲ）（及び他の制御レジスタ、たとえば、変換制御レジスタ（ＴＣＲ）、システム制御レジスタ（ＳＣＴＬＲ）、及びＨｙｐ構成レジスタ（ＨＣＲ））、及び／又は変換テーブルに含まれる情報のセットであり得る。
【００１１】
「アドレス変換」とは、メモリ・アドレスのペアであって、ペアの第１のものが変換されるアドレス（変換前のアドレス）であり、ペアの第２のものが変換されたアドレス（変換後のアドレス）である。
【００１２】
「ローカル・アドレス変換」とは、変換されるアドレス（変換前のアドレス）を変換されたアドレス（変換後のアドレス）に変換するために１つのアドレス変換コンテキストが使用されるアドレス変換である。
【００１３】
「グローバル・アドレス変換」とは、変換されるアドレス（変換前のアドレス）を変換されたアドレス（変換後のアドレス）に変換するために複数のアドレス変換コンテキストが使用されるアドレス変換である。
【００１４】
「ローカル・メモリ・ページ」又は「ローカル・ページ」とは、ローカル・アドレス変換を有するメモリ・ページである。
【００１５】
「グローバル・メモリ・ページ」又は「グローバル・ページ」とは、グローバル・アドレス変換を有するメモリ・ページである。
【００１６】
様々な周知の命令セット・アーキテクチャ（ＩＳＡ）は、ＴＬＢの効率を向上させるよう設計された機能を含む。たとえば、ｘ８６  ＩＳＡは、ＰＣＩＤ、ＶＰＩＤ、及びＥＰＴＰに対するサポートを含む。ｘ８６  ＩＳＡはまた、所与のＰＣＩＤ、ＶＰＩＤ、及び／又はＥＰＴＰに関連付けられているＴＬＢエントリを無効化するようプロセッサに指示する命令を含む。関連付けられているＴＬＢエントリを１つずつ無効化するプロセッサ実装は、特にＴＬＢが比較的大きく、多くのエントリが無効化される必要がある場合、命令を実行するのに比較的長い時間を要することがある。有利なことに、無効化を必要とするＴＬＢのエントリの同時無効化をサポートする実施形態について、本明細書で説明する。
【００１７】
さらに、プロセッサのＩＳＡによりサポートされているアドレス変換コンテキスト空間全体に必要とされる情報を記憶するために多数のビットを各ＴＬＢエントリ内に含めることを回避するために、大きい空間がかなり小さい非アーキテクチャ空間にマッピングされる実施形態について説明し、これは、有利なことに、ＴＬＢエントリがはるかに少ないビットを含むことを可能にする。しかしながら、これは、新しいアドレス変換コンテキストがより小さい非アーキテクチャ空間にマッピングされる必要がある場合に小さい非アーキテクチャ空間からアンマッピングされなければならないアドレス変換コンテキストに関連付けられているＴＬＢエントリの無効化を必要とする。有利なことに、プロセッサがアンマッピングされるアドレス変換コンテキストに関連付けられているすべてのＴＬＢエントリを同時に無効化することを可能にする実施形態について、本明細書で説明する。有利なことに、実施形態は、ローカル・アドレス変換及びグローバル・アドレス変換の性質、並びに２つのタイプのＴＬＢエントリを無効化することに対するサポートの効率を考慮する。
【００１８】
次に図１を参照すると、プロセッサ１００を示すブロック図が図示されている。プロセッサ１００は、命令キャッシュ１０２、マイクロコード１０６を含む命令変換器１０４、実行ユニット１１２、アーキテクチャ・レジスタ１１４、メモリ・サブシステム１２２、キャッシュ・メモリ階層１１８、及びバス・インタフェース・ユニット１１６を備える。他の機能ユニット（図示せず）は、とりわけ、仮想アドレスから物理アドレスへのアドレス変換を生成するために変換テーブル・ウォークを実行するテーブル・ウォーク・エンジン、分岐予測器、リオーダ・ユニット、リオーダ・バッファ、予約ステーション、命令スケジューラ、及びデータ・プリフェッチ・ユニットを含み得る。一実施形態において、マイクロプロセッサ１００は、命令がプログラム順序から外れた実行のために発行され得るアウト・オブ・オーダ実行マイクロアーキテクチャを有する。一実施形態において、マイクロプロセッサ１００は、１クロックサイクル当たり複数の命令を実行ユニット１１２に発行して実行させることができるスーパースカラ・マイクロアーキテクチャを有する。一実施形態において、マイクロプロセッサ１００は、ｘ８６命令セット・アーキテクチャ（ＩＳＡ）に実質的に準拠するが、他のＩＳＡも企図されている。
【００１９】
命令キャッシュ１０２は、バス・インタフェース・ユニット１１６が通信するシステム・メモリからフェッチされたアーキテクチャ命令をキャッシュする。好ましくは、図２のＴＬＢ２０６などのＴＬＢは、命令に対するアドレス変換をキャッシュする命令キャッシュ１０２に関連付けられる。一実施形態において、命令変換器１０４は、命令キャッシュ１０２からフェッチされたアーキテクチャ命令を、マイクロプロセッサ１００のマイクロアーキテクチャのマイクロ命令セットのマイクロ命令に変換する。実行ユニット１１２は、マイクロ命令を実行する。アーキテクチャ命令が変換されるマイクロ命令は、アーキテクチャ命令を実装する。
【００２０】
実行ユニット１１２は、アーキテクチャ・レジスタ１１４（又はおそらくはリオーダ・バッファ若しくは転送バス）からソース・オペランドを受け取る。オペランドは、メモリからメモリ・サブシステム１２２を介してレジスタ１１４にロードされる。メモリ・サブシステム１２２は、キャッシュ・メモリ階層１１８（たとえば、レベル１データ・キャッシュ、レベル２キャッシュ、レベル３キャッシュ）にデータを書き込み、キャッシュ・メモリ階層１１８からデータを読み出す。好ましくは、各キャッシュ・メモリは、図２のＴＬＢ２０６などの、関連付けられているＴＬＢを有する。キャッシュ階層１１８の最終レベル・キャッシュにキャッシュ・ミスが生じた場合、データ・キャッシュ・ライン又は命令キャッシュ・ラインが、バス・インタフェース・ユニット１１６からリクエストされ、これは、システム・メモリからキャッシュ・ラインをフェッチする。
【００２１】
また、図４を参照して以下でより詳細に説明するように、メモリ・サブシステム１２２（たとえば、テーブル・ウォーク・エンジン）は、システム・メモリ内の変換テーブル（たとえば、ｘ８６  ＩＳＡではページング構造と呼ばれる）にアクセスして、ページ・テーブル・ウォークを実行し、図２のＴＬＢ２０６などの、プロセッサ１００のＴＬＢにその後ロードされる、仮想アドレスから物理アドレスへのアドレス変換を生成する。変換テーブルは、ページをマッピングするテーブル（たとえば、ｘ８６  ＩＳＡページ・テーブル）、又は変換テーブル階層における他の変換テーブルを参照するテーブル（たとえば、ｘ８６  ＩＳＡページ・ディレクトリ、ページ・ディレクトリ・ポインタ・テーブル、ＰＭＬ４テーブル）を含み得る。変換テーブルはまた、仮想化された物理アドレス（たとえば、ｘ８６  ＩＳＡでは、仮想化された物理アドレスはゲスト物理アドレスと呼ばれ、変換テーブルは拡張ページ・テーブル（ＥＰＴ）と呼ばれる）を真の物理アドレス（たとえば、ｘ８６  ＩＳＡでは、ホスト物理アドレスと呼ばれる）にマッピングするテーブルを含み得る。
【００２２】
好ましくは、プロセッサ１００は、マイクロコード１０６又はマイクロコード・ルーチンを記憶するよう構成されたマイクロコード・メモリと、マイクロコード・メモリからマイクロコードの命令をフェッチするためのマイクロシーケンサと、を含むマイクロコード・ユニットを備える。一実施形態においては、マイクロコード命令は、マイクロ命令であり、一実施形態においては、マイクロコード命令は、マイクロ命令に変換される。マイクロコード１０６は、特に複雑なアーキテクチャ命令など、アーキテクチャ命令のうちのいくつかを実装する。一実施形態において、図１１のＭＯＶ  ＣＲ４命令、図１２のＭＯＶ  ＣＲ３命令、図１５のＶＭＬＡＵＮＣＨ／ＶＭＲＥＳＵＭＥ命令、図２１のＲＳＭ命令、図２２のＩＮＶＰＣＩＤ命令、図２３のＩＮＶＶＰＩＤ命令、及び図２４のＩＮＶＥＰＴ命令は、それぞれ、マイクロコード１０６で実装される。さらに、マイクロコード１０６は、プロセッサ１００の他の機能を実行する。一実施形態において、マイクロコード１０６は、以下でより詳細に説明する、図１９及び図２０のＶＭイグジット及びＳＭＩをそれぞれ処理する。
【００２３】
次に図２を参照すると、図１のプロセッサ１００の一部をより詳細に示すブロック図が図示されている。プロセッサ１００は、変換ルックアサイド・バッファ（ＴＬＢ）２０６と、ＴＬＢ２０６に結合されているマッピング・モジュール２０４と、ＴＬＢ２０６及びマッピング・モジュール２０４に結合されているメモリ・サブシステム１２２と、マッピング・モジュール２０４に結合されているローカル・コンテキスト・テーブル２１２と、マッピング・モジュール２０４に結合されているグローバル・コンテキスト・テーブル２１４と、を備える。マッピング・モジュール２０４は、マイクロコード、ハードウェア状態機械、又はこれらの組合せを含む。マッピング・モジュール２０４は、プロセス・コンテキスト識別子（ＰＣＩＤ）２５２と、仮想プロセッサ識別子（ＶＰＩＤ）２５４と、拡張ページ・テーブル・ポインタ（ＥＰＴＰ）２５６と、を受け取る。マッピング・モジュール２０４は、現在のアドレス変換コンテキストを変更する命令及び／又はアドレス変換コンテキストを無効化する命令など、様々なイベントに応答して、ＰＣＩＤ２５２と、ＶＰＩＤ２５４と、ＥＰＴＰ２５６とを、受け取る。これらのうちのいくつかについては以下で説明する。ＰＣＩＤ２５２と、ＶＰＩＤ２５４と、ＥＰＴＰ２５６と、を受け取ったことに応答して、マッピング・モジュール２０４は、有利なことに、無効化ローカル（ＩＮＶ＿ＬＯＣＡＬ）ビット・ベクトル２３２及び／又は無効化グローバル（ＩＮＶ＿ＧＬＯＢＡＬ）ビット・ベクトル２３４をそれぞれ生成することにより、ＴＬＢ２０６内の複数のローカル・アドレス変換及び／又は複数のグローバル・アドレス変換を同時に無効化することができる。この動作については、たとえば、図６〜図８を参照して以下でさらに説明し、その使用については、たとえば、図１１、図１３〜１４、図１６、図１８〜２０、及び図２２〜２４を参照して以下で説明する。
【００２４】
さらに、ＰＣＩＤ２５２と、ＶＰＩＤ２５４と、ＥＰＴＰ２５６と、を受け取ったことに応答して、マッピング・モジュール２０４は、現在のローカル・コンテキスト識別子（ＣＵＲ＿ＬＩＤ）２４２及び／又は現在のグローバル・コンテキスト識別子（ＣＵＲ＿ＧＩＤ）２４４を更新することができる。ＣＵＲ＿ＬＩＤ２４２及びＣＵＲ＿ＧＩＤ２４４は、現在のアドレス変換コンテキストを識別する。詳細には、ＣＵＲ＿ＬＩＤ２４２は、現在のアドレス変換コンテキストのローカル・メモリ・ページを識別し、ＣＵＲ＿ＧＩＤ２４４は、現在のアドレス変換コンテキストのグローバル・メモリ・ページを識別する。これらについては以下でより詳細に説明する。好ましくは、ＣＵＲ＿ＬＩＤ２４２は、符号化値であり、デコーダ２６２は、ＣＵＲ＿ＬＩＤ２４２を復号して、探索ローカル有効（ＬＯＯＫＵＰ＿ＬＶＡＬ）復号１ホット・ビット・ベクトル２７２（すなわち、１つのビットがセットされ、他のビットはクリアされる）をＴＬＢ２０６に提供し、ＣＵＲ＿ＧＩＤ２４４は、符号化値であり、デコーダ２６４は、ＣＵＲ＿ＧＩＤ２４４を復号して、探索グローバル有効（ＬＯＯＫＵＰ＿ＧＶＡＬ）復号１ホット・ビット・ベクトル２７４をＴＬＢ２０６に提供する。ＣＵＲ＿ＬＩＤ２４２及びＣＵＲ＿ＧＩＤ２４４を表すための他の実施形態も企図される。たとえば、これらはそれ自体、復号された形態で記憶され、デコーダ２６２／２６４を必要とすることなくＴＬＢ２０６に直接提供されてもよい。
【００２５】
メモリ・サブシステム１２２が、ＴＬＢ２０６内のメモリ・ページの仮想アドレスの探索を実行することを望むときに、メモリ・サブシステム１２２は、探索アドレス（ＬＯＯＫＵＰ＿ＡＤＤＲ）２７６をＴＬＢ２０６に提供する。ＬＯＯＫＵＰ＿ＬＶＡＬ２７２及びＬＯＯＫＵＰ＿ＧＶＡＬ２７４も、ＴＬＢ２０６に提供され、探索に含まれる。ＴＬＢ２０６は、ヒットが生じたかどうかを、ヒット・インジケータ２２４を介して示し、ヒットが生じた場合には、変換されたアドレス（ＴＲＡＮＳＬＡＴＥＤ＿ＡＤＤＲ）２２６をメモリ・サブシステム１２２に提供する。この動作については、図４を参照して以下でより詳細に説明する。
【００２６】
次に図３を参照すると、ＴＬＢ２０６内のエントリ３００を示すブロック図が図示されている。ＴＬＢ２０６の各エントリ３００は、ローカル有効ビット・ベクトル（ＬＶＡＬ）３０２と、グローバル有効ビット・ベクトル（ＧＶＡＬ）３０４と、仮想ページ・アドレス（ＶＰＡＤＤＲ）３０６と、物理ページ・アドレス（ＰＰＡＤＤＲ）３０８と、を含む。一実施形態において、ＬＶＡＬ３０２は、４ビットを含み、ＧＶＡＬ３０４は、４ビットを含む。ＬＶＡＬ３０２、ＧＶＡＬ３０４、及びＶＰＡＤＤＲ３０６は集合的に、エントリ３００のタグと呼ばれる。ＶＰＡＤＤＲ３０６及びＰＰＡＤＤＲ３０８は集合的に、エントリ３００のアドレス変換と呼ばれる。図示されていないが、好ましくは、ＴＬＢエントリ３００はまた、ページに関連付けられるパーミッションを指定するパーミッション・ビットも含む。
【００２７】
一実施形態において、マッピング・モジュール２０４は、（１）すべてのＬＩＤが、一意的なＶＰＩＤ：ＥＰＴＰ：ＰＣＩＤの組合せ（拡張ページ・テーブル機能が有効にされる）、ＶＰＩＤ：ＰＣＩＤの組合せ（拡張ページ・テーブル機能が無効にされる）、又はＰＣＩＤ（仮想プロセッサ識別子機能が無効にされる）からマッピングされること、（２）すべてのＧＩＤが、一意的なＶＰＩＤ：ＥＰＴＰの組合せ（拡張ページ・テーブル機能が有効にされる）、又はＶＰＩＤ（拡張ページ・テーブル機能が無効にされる）からマッピングされること、（３）ＴＬＢ２０６のエントリ３００が有効なグローバル・アドレス変換である（たとえば、ＧＶＡＬ３０４がゼロでない）場合、これは、有効なローカル・アドレス変換ではない（ＬＶＡＬ３０２がゼロである）こと、逆に、（４）ＴＬＢ２０６のエントリ３００が有効なローカル・アドレス変換である（たとえば、ＬＶＡＬ３０２がゼロでない）場合、これは、有効なグローバル・アドレス変換ではない（ＧＶＡＬ３０４がゼロである）ことを保証する。上記保証のいくつかの利点は、マッピング・モジュール２０４が、（１）ＴＬＢ２０６のすべてのグローバル・アドレス変換を同時に無効化すること、及び（２）ＴＬＢ２０６のすべてのローカル・アドレス変換を同時に無効化することができる点である。さらに、マッピング・モジュール２０４は、ＬＩＤが一意的なＰＣＩＤからマッピングされることを保証しない。すなわち、同じＰＣＩＤ値が、複数の仮想プロセッサにより指定され、したがって、異なるＬＩＤにマッピングされる可能性がある。同様に、マッピング・モジュール２０４は、複数のＬＩＤを所与のＧＩＤに関連付けることができる。しかしながら、この逆は真ではない、すなわち、マッピング・モジュール２０４は、複数のＧＩＤを所与のＬＩＤに関連付けることをしない。しかしながら、プロセッサ１００の動作のある時点において、すべてのＬＩＤは、一意的なＧＩＤに対応する可能性もある。たとえば、一実施形態では、ＧＩＤの数及びＬＩＤの数が等しく（Ｎで表される）、その時点では、各々単一のＰＣＩＤを指定しているＮ個の仮想プロセッサが存在する。
【００２８】
次に図４を参照すると、ＴＬＢ２０６のエントリ３００にデータを投入する図１のプロセッサ１００の動作を示すフローチャートが図示されている。フローは、ブロック４０２で始まる。
【００２９】
ブロック４０２において、メモリ・サブシステム１２２は、ＴＬＢ２０６内のＬＯＯＫＵＰ＿ＡＤＤＲ２７６のミスを検出し、テーブル・ウォークを実行して、アドレス変換を生成する。すなわち、メモリ・サブシステム１２２は、現在のアドレス変換コンテキストを使用して、ミスしているＬＯＯＫＵＰ＿ＡＤＤＲ２７６を物理アドレスに変換する。メモリ・サブシステム１２２は、テーブル・ウォークを実行するテーブル・ウォーク・エンジン（図示せず）を有することができる。テーブル・ウォークは、レガシ・ページング構造（たとえば、ｘ８６  ＩＳＡページ・ディスクリプタ・ベース・アドレス、ページ・ディスクリプタ・テーブル、及びページ・テーブル・エントリ）、及びプロセッサ１００の仮想マシン機能に関連付けられている拡張ページ・テーブル（たとえば、ｘ８６  ＩＳＡ仮想マシン・エクステンション（ＶＭＸ）拡張ページ・テーブル・ポインタ（ＥＰＴＰ）及び拡張ページ・テーブル（ＥＰＴ））を使用する部分を含み得る。フローは、ブロック４０４に進む。
【００３０】
ブロック４０４において、メモリ・サブシステム１２２は、ＴＬＢ２０６内の置換するエントリ３００を選択する。一実施形態において、ＴＬＢ２０６は、セット・アソシアティブ・キャッシュであり、ＴＬＢ２０６の各セットは、最長時間未使用（ＬＲＵ）情報又は疑似ＬＲＵ情報などの置換情報を含み、メモリ・サブシステム１２２は、置換のため、置換情報により示されるインデックス付けされたセットのエントリ３００を選択する。フローは、判定ブロック４０６に進む。
【００３１】
判定ブロック４０６において、メモリ・サブシステム１２２は、アドレス変換が、グローバル変換であるか、ローカル変換であるかを判定する。好ましくは、メモリ・サブシステム１２２は、ブロック４０２においてテーブル・ウォークを実行するときに、現在のアドレス変換コンテキスト内の情報に基づいてこの判定を行う。グローバルである場合、フローはブロック４１２に進み、ローカルである場合、フローはブロック４０８に進む。
【００３２】
ブロック４０８において、メモリ・サブシステム１２２は、ブロック４０４において選択されたＴＬＢ２０６のエントリ３００に、０のＧＶＡＬ３０４（アドレス変換がローカル・アドレス変換であるので）と、ＬＯＯＫＵＰ＿ＬＶＡＬ２７２（ＣＵＲ＿ＬＩＤ２４２の一表現である）に等しいＬＶＡＬ３０２と、ミスしているＬＯＯＫＵＰ＿ＡＤＤＲ２７６に等しいＶＰＡＤＤＲ３０６と、変換されたアドレス、すなわち、ブロック４０２においてテーブル・ウォークにより生成された物理アドレス、に等しいＰＰＡＤＤＲ３０８と、を投入する。フローは、ブロック４０８で終了する。
【００３３】
ブロック４１２において、メモリ・サブシステム１２２は、ブロック４０４において選択されたＴＬＢ２０６のエントリ３００に、ＬＯＯＫＵＰ＿ＧＶＡＬ２７４（ＣＵＲ＿ＧＩＤ２４４の一表現である）に等しいＧＶＡＬ３０４と、０のＬＶＡＬ３０２（アドレス変換がグローバル・アドレス変換であるので）と、ミスしているＬＯＯＫＵＰ＿ＡＤＤＲ２７６に等しいＶＰＡＤＤＲ３０６と、変換されたアドレス、すなわち、ブロック４０２においてテーブル・ウォークにより生成された物理アドレス、に等しいＰＰＡＤＤＲ３０８と、を投入する。フローは、ブロック４１２で終了する。
【００３４】
次に図５を参照すると、探索時にヒット２２４が生じたかどうかを判定するためのＴＬＢ２０６内のロジック５００を示すブロック図が図示されている。図５に示されるロジック５００（ＯＲ関数５３４を除く）は、ヒット５２４がエントリ３００に関して生成されたかどうかを判定するために、ＴＬＢ２０６の単一のエントリ３００に対応する。しかしながら、フル・アソシアティブの実施形態については、ロジック５００は、すべてのエントリ３００に対してＴＬＢ２０６内に存在するが、簡潔且つ明瞭にするために図示されておらず、セット・アソシアティブの実施形態については、ロジック５００は、方式（ｗａｙ）ごとに存在することを理解すべきである。ＴＬＢ２０６のエントリ３００のすべてのエントリのヒット・インジケータ５２４は、ＯＲ関数５３４によりブールＯＲ演算され、図１のＴＬＢ２０６のヒット・インジケータ２２４が生成される。図５及び他の図に示される様々なブール関数は、合成され得るか、あるいはカスタム設計され得るブール・ゲート（たとえば、ＡＮＤゲート、ＯＲゲート）に対応するものであってよいが、ロジック５００は、図示されているブール関数を実行することが知られている他のハードウェア要素、たとえば、ワイヤードＯＲを含んでもよく、静的ロジック又は動的ロジックを含む様々なロジック・タイプにより実装されてもよいことを理解すべきである。有利なことに、説明している実施形態は、基礎となるプロセス技術又はロジック・タイプに関係なく、ＴＬＢ２０６のローカル・アドレス変換及び／又はグローバル・アドレス変換の同時無効化を可能にする。
【００３５】
ロジック５００は、エントリ３００のＬＶＡＬ３０２とＬＯＯＫＵＰ＿ＬＶＡＬ２７２とを比較するための第１の比較関数５２２を含み、第１の比較関数５２２の出力が、ブールＯＲ関数５２８への２つの入力のうちの第１の入力として提供される。ロジック５００はまた、エントリ３００のＧＶＡＬ３０４とＬＯＯＫＵＰ＿ＧＶＡＬ２７４とを比較するための第２の比較関数５２４も含み、第２の比較関数の出力が、ブールＯＲ関数５２８への２つの入力のうちの第２の入力として提供される。ブールＯＲ関数５２８の出力は、ブールＡＮＤ関数５３２への２つの入力のうちの第１の入力として提供される。ロジック５００は、エントリ３００のＶＰＡＤＤＲ３０６とＬＯＯＫＵＰ＿ＡＤＤＲ２７６とを比較するための第３の比較関数５２６を含み、第３の比較関数５２６の出力が、ブールＡＮＤ関数５３２への２つの入力のうちの第２の入力として提供される。ブールＡＮＤ関数５３２の出力は、ヒット・インジケータ５２４であり、ヒット・インジケータ５２４は、ＬＯＯＫＵＰ＿ＬＶＡＬ２７２がＬＶＡＬ３０２に合致し、ＬＯＯＫＵＰ＿ＧＶＡＬ２７４がＧＶＡＬ３０４に合致し、ＬＯＯＫＵＰ＿ＡＤＤＲ２７６がＶＰＡＤＤＲ３０６に合致した場合には真となり、そうでない場合には偽となる。
【００３６】
図５から気付くように、ＴＬＢ２０６内の各ローカル・アドレス変換は、そのローカル・コンテキスト識別子の一表現であるそれぞれのＬＶＡＬ３０２により識別され、各グローバル・アドレス変換は、そのグローバル・コンテキスト識別子の一表現であるそれぞれのＧＶＡＬ３０４により識別される。ＬＯＯＫＵＰ＿ＬＶＡＬ２７２及びＬＯＯＫＵＰ＿ＧＶＡＬ２７４は、ＴＬＢ  ２０６の探索に含まれる。しかしながら、ＬＯＯＫＵＰ＿ＡＤＤＲ２７６とＶＰＡＤＤＲ３０６との合致とともに、ヒットが生じるためには、ＬＯＯＫＵＰ＿ＬＶＡＬ２７２がＬＶＡＬ３０２に合致するか、あるいはＬＯＯＫＵＰ＿ＧＶＡＬ２７４がＧＶＡＬ３０４に合致するかのいずれか一方のみが必要であり、両方ではない、すなわち、タグ全体ではない。したがって、図４及び図５を参照して説明している動作から気付くように、ＴＬＢ２０６からのアドレス変換を使用するために、ＶＰＡＤＤＲ３０６からＰＰＡＤＤＲ３０８を変換するために使用されるアドレス変換コンテキストは、ＣＵＲ＿ＬＩＤ２４２に関連付けられているアドレス変換コンテキスト又はＣＵＲ＿ＧＩＤ２４４に関連付けられている複数のアドレス変換コンテキストのうちの１つでなければならない。
【００３７】
次に図６を参照すると、図２のＴＬＢ２０６の図３のエントリ３００のＬＶＡＬビット・ベクトル３０２のビットを無効化するために使用されるロジック６００を示すブロック図が図示されている。図６は、ＬＶＡＬビット・ベクトル３０２の単一のビットを示している。ビットに対する記憶域は、フリップフロップ、メモリ・アレイ・ビット・セル、又は他のビット記憶デバイスであってよい。ブール反転（ＮＯＴ）関数６０４は、ＬＶＡＬビット・ベクトル３０２のビットに対応するＩＮＶ＿ＬＯＣＡＬビット・ベクトル２３２のビットを受け取る。たとえば、ＩＮＶ＿ＬＯＣＡＬビット・ベクトル２３２のビット［２］が、ＬＶＡＬビット・ベクトル３０２のビット［２］のために、反転関数６０４により受け取られる。反転関数６０４の出力は、ブールＡＮＤ関数６０６への２つの入力のうちの第１の入力に提供される。ブールＡＮＤ関数６０６の第２の入力は、ＬＶＡＬビット・ベクトル３０２の現在値を受け取る。ブールＡＮＤ関数６０６の出力は、ＬＶＡＬビット・ベクトル３０２の新しい値としてクロックインされる。このようにして、マッピング・モジュール２０４は、ＩＮＶ＿ＬＯＣＡＬビット・ベクトル２３２の対応するビットをセットすることにより、ＬＶＡＬビット・ベクトル３０２の任意のビットをクリアすることができる。
【００３８】
図６は、単一のビットのためのロジック６００を示しているが、ロジック６００は、ＴＬＢ２０６の各エントリ３００に対するＬＶＡＬビット・ベクトル３０２の各ビットについてＴＬＢ２０６内に複製される。有利なことに、ＩＮＶ＿ＬＯＣＡＬビット・ベクトル２３２のビットをセットすることにより、マッピング・モジュール２０４は、ＴＬＢ２０６のすべてのエントリ３００について、ＬＶＡＬビット・ベクトル３０２の対応するビットをクリアする。ＬＶＡＬ３０２の各ビット位置は、それぞれのアドレス変換コンテキストに関するすべてのローカル・アドレス変換に対する有効ビットであるので、無効化ロジック６００は、マッピング・モジュール２０４が、それぞれのアドレス変換コンテキストについて、ＴＬＢ２０６内のすべてのローカル・アドレス変換を同時に無効化することを可能にする。これは、それぞれのアドレス変換コンテキストについて、ＴＬＢ２０６内のローカル・アドレス変換を順次無効化するよりも高速であるので有利である。実際、ＴＬＢ２０６のサイズが増加するにつれ（たとえば、大きい最終レベルのＴＬＢ２０６に関して）、短縮される時間は、より著しいものとなり得る。
【００３９】
さらに、ＴＬＢ２０６は、ＴＬＢ２０６の各エントリ３００に対するＧＶＡＬビット・ベクトル３０４の各ビットについて類似のロジック６００を含むが、このロジック６００は、ＩＮＶ＿ＬＯＣＡＬビット・ベクトル２３２ではなく、ＩＮＶ＿ＧＬＯＢＡＬビット・ベクトル２３４の対応するビットを受け取る。したがって、有利なことに、ＩＮＶ＿ＧＬＯＢＡＬビット・ベクトル２３４のビットをセットすることにより、マッピング・モジュール２０４は、ＴＬＢ２０６のすべてのエントリ３００について、ＧＶＡＬビット・ベクトル３０４の対応するビットをクリアする。ＧＶＡＬ３０４の各ビット位置は、それぞれのアドレス変換コンテキストに関するすべてのグローバル・アドレス変換に対する有効ビットであるので、無効化ロジック６００は、マッピング・モジュール２０４が、それぞれのアドレス変換コンテキストについて、ＴＬＢ２０６内のすべてのグローバル・アドレス変換を同時に無効化することと、上述したローカル・アドレス変換の無効化に類似する性能上のメリットを評価することと、を可能にする。
【００４０】
図示されていないが、ロジック６００は、ビットをセット又はクリアするための、ＬＶＡＬ／ＧＶＡＬビット・ベクトル３０２／３０４の各ビットのための他の機能を含む。たとえば、メモリ・サブシステム１２２は、ビットを、図４のブロック４０８及びブロック４１２における動作により必要とされるようないずれかの２値状態に書き込むことができる。さらに、メモリ・サブシステム１２２は、たとえば、図２２及び図２３のブロック２２１４又はブロック２３０８における動作によりそれぞれ必要とされるような、ＴＬＢ２０６の特定のセット及び方式のＬＶＡＬビット３０２をクリアすることができる。好ましくは、複数の入力のうちの１つでブールＡＮＤ関数６０６の出力を受け取り、他の入力で、上述したが図示されてはいない他のロジックの出力を受け取る多重化機能が、ビット３０２の直前に存在する。
【００４１】
必要に応じて、ＬＶＡＬ３０２及びＧＶＡＬ３０４のビットは、ＩＮＶ＿ＬＯＣＡＬビット・ベクトル２３２及びＩＮＶ＿ＧＬＯＢＡＬビット・ベクトル２３４内のビットをそれぞれセットすることにより同時にクリアされてもよいことに留意すべきである。たとえば、メモリ・サブシステム１２２は、ブロック１８２８、ブロック２３１８、ブロック２３２６、ブロック２４０８、及びブロック２４１４においてこれを行うことができる。最後に、必要に応じて、ＬＶＡＬ３０２及び／又はＧＶＡＬ３０４のすべてのビットは、ＩＮＶ＿ＬＯＣＡＬビット・ベクトル２３２及び／又はＩＮＶ＿ＧＬＯＢＡＬビット・ベクトル２３４内のすべてのビットをそれぞれセットすることにより同時にクリアされてもよい。たとえば、メモリ・サブシステム１２２は、ブロック１６０２、ブロック１９１４、及びブロック２００４においてこれを行うことができる。
【００４２】
次に図７を参照すると、図１のプロセッサ１００の制御レジスタ７００を示すブロック図が図示されている。一実施形態において、制御レジスタ７００は、ＴＬＢ２０６のアドレス変換を無効化するために、マイクロコード１０６により書き込まれ得る。制御レジスタ７００は、ＩＮＶ＿ＬＯＣＡＬビット７０２と、ＩＮＶ＿ＧＬＯＢＡＬビット７０４と、ＩＮＶ＿ＡＬＬ＿ＬＯＣＡＬＳビット７０６と、ＩＮＶ＿ＡＬＬ＿ＧＬＯＢＡＬＳビット７０８と、ＩＮＶ＿ＡＬＬビット７１２と、を含む。次に、これらのビットのセットに応答するマッピング・モジュール２０４の動作について、図８を参照して説明する。
【００４３】
次に図８を参照すると、図７の制御レジスタ７００の様々なビットのセットに応答するマッピング・モジュール２０４の動作を示すフローチャートが図示されている。フローは、ブロック８０２で始まる。
【００４４】
ブロック８０２において、制御レジスタ７００の１以上のビットが、たとえば、マイクロコード１０６によりセットされる。フローは、判定ブロック８０４に進む。
【００４５】
判定ブロック８０４において、ＩＮＶ＿ＬＯＣＡＬビット７０２がセットされている場合、フローはブロック８０６に進み、ＩＮＶ＿ＬＯＣＡＬビット７０２がセットされていない場合、フローは判定ブロック８１４に進む。
【００４６】
ブロック８０６において、マッピング・モジュール２０４は、ＣＵＲ＿ＬＩＤ２４２を復号して１ホット・ビット・ベクトル値を生成し、ＩＮＶ＿ＬＯＣＡＬビット・ベクトル２３２上にその値をアサートすると、これは、ＴＬＢ２０６の各エントリ３００について、ＩＮＶ＿ＬＯＣＡＬビット・ベクトル２３２内の１つのセットされているビットに対応するＬＶＡＬ３０２のビットをクリアし、これは、現在のアドレス変換コンテキストを使用して変換されたＴＬＢ２０６内のすべてのローカル・アドレス変換を無効化する。フローは、判定ブロック８１４に進む。
【００４７】
判定ブロック８１４において、ＩＮＶ＿ＧＬＯＢＡＬビット７０４がセットされている場合、フローはブロック８１６に進み、ＩＮＶ＿ＧＬＯＢＡＬビット７０４がセットされていない場合、フローは判定ブロック８２４に進む。
【００４８】
ブロック８１６において、マッピング・モジュール２０４は、ＣＵＲ＿ＧＩＤ２４４を復号して１ホット・ビット・ベクトル値を生成し、ＩＮＶ＿ＧＬＯＢＡＬビット・ベクトル２３４上にその値をアサートすると、これは、ＴＬＢ２０６の各エントリ３００について、ＩＮＶ＿ＧＬＯＢＡＬビット・ベクトル２３４内の１つのセットされているビットに対応するＧＶＡＬ３０４のビットをクリアし、これは、現在のアドレス変換コンテキストを使用して変換されたＴＬＢ２０６内のすべてのグローバル・アドレス変換を無効化する。フローは、判定ブロック８２４に進む。
【００４９】
判定ブロック８２４において、ＩＮＶ＿ＡＬＬ＿ＬＯＣＡＬＳビット７０６がセットされている場合、フローはブロック８２６に進み、ＩＮＶ＿ＡＬＬ＿ＬＯＣＡＬＳビット７０６がセットされていない場合、フローは判定ブロック８３４に進む。
【００５０】
ブロック８２６において、マッピング・モジュール２０４は、ＩＮＶ＿ＬＯＣＡＬビット・ベクトル２３２のすべてのビットをアサートすると、これは、ＴＬＢ２０６の各エントリ３００について、ＬＶＡＬ３０２のすべてのビットをクリアし、これは、アドレス変換コンテキストを使用して変換されたＴＬＢ２０６内のすべてのローカル・アドレス変換を無効化する。フローは、判定ブロック８３４に進む。
【００５１】
判定ブロック８３４において、ＩＮＶ＿ＡＬＬ＿ＧＬＯＢＡＬＳビット７０８がセットされている場合、フローはブロック８３６に進み、ＩＮＶ＿ＡＬＬ＿ＧＬＯＢＡＬＳビット７０８がセットされていない場合、フローは判定ブロック８４４に進む。
【００５２】
ブロック８３６において、マッピング・モジュール２０４は、ＩＮＶ＿ＧＬＯＢＡＬビット・ベクトル２３４のすべてのビットをアサートすると、これは、ＴＬＢ２０６の各エントリ３００について、ＧＶＡＬ３０４のすべてのビットをクリアし、これは、アドレス変換コンテキストを使用して変換されたＴＬＢ２０６内のすべてのグローバル・アドレス変換を無効化する。フローは、判定ブロック８４４に進む。
【００５３】
判定ブロック８４４において、ＩＮＶ＿ＡＬＬビット７１２がセットされている場合、フローはブロック８４６に進み、ＩＮＶ＿ＡＬＬビット７１２がセットされていない場合、フローは終了する。
【００５４】
ブロック８４６において、マッピング・モジュール２０４は、ＩＮＶ＿ＬＯＣＡＬビット・ベクトル２３２のすべてのビットと、ＩＮＶ＿ＧＬＯＢＡＬビット・ベクトル２３４のすべてのビットと、をアサートすると、これは、ＴＬＢ２０６の各エントリ３００について、ＬＶＡＬ３０２のすべてのビットと、ＧＶＡＬ３０４のすべてのビットと、をクリアし、これは、アドレス変換コンテキストを使用して変換されたＴＬＢ２０６内のすべてのアドレス変換を無効化する。フローは、ブロック８４６で終了する。
【００５５】
次に図９を参照すると、図２のローカル・コンテキスト・テーブル２１２をより詳細に示すブロック図が図示されている。各エントリは、有効ビット９０６と、グローバル・コンテキスト識別子（ＧＩＤ）９０４と、ローカル・コンテキスト識別子（ＬＩＤ）９０２と、プロセス・コンテキスト識別子（ＰＣＩＤ）９０８と、アドレス変換コンテキスト・ベース・アドレス（ＡＴＣＢ）９１２と、を含む。ローカル・コンテキスト・テーブル２１２内の各エントリについて、ＧＩＤ９０４は、合致するＧＩＤ１００４値を有する、図１０のグローバル・コンテキスト・テーブル２１４内の関連付けられているエントリを示す。マッピング・モジュール２０４は、ローカル・コンテキスト・テーブル２１２内の各有効なエントリが一意的なＬＩＤ９０２値を有することと、グローバル・コンテキスト・テーブル２１４内の各有効なエントリが一意的なＧＩＤ１００４値を有することと、を保証する。例示的な一例として、ｘ８６  ＩＳＡの実施形態において、ＰＣＩＤ９０８は、ｘ８６プロセス・コンテキスト識別子（ＰＣＩＤ）に対応し、ＡＴＣＢ９１２は、ＣＲ３レジスタのビット［６３：１２］に対応し、これは、ページ・ディレクトリ・ベース・アドレスを指定するものである。一実施形態において、ＣＲ３のビット［６３：３６］は使用されない。図９の実施形態において、ローカル・コンテキスト・テーブル２１２は、４つのエントリを含み、各ＬＩＤ９０２は、２ビット符号化値であり、これは、サイズ４の非アーキテクチャ・ローカル・コンテキスト識別子空間を意味する。一実施形態において、これはまた、多くても４つのアドレス変換コンテキストに対するアドレス変換が、任意の所与の時点においてＴＬＢ２０６内で有効であり得ることも意味する。しかしながら、異なる数のエントリ及びＬＩＤ９０２のビットを用いる他の実施形態も企図される。一実施形態において、マッピング・モジュール２０４は、有効ビット９０６をクリアし、一意的な値をローカル・コンテキスト・テーブル２１２のエントリの各々のＬＩＤ９０２に割り当て、残りのフィールドをゼロで埋めることにより、ローカル・コンテキスト・テーブル２１２を初期化する。一実施形態において、マッピング・モジュール２０４は、ローカル・コンテキスト・テーブル２１２のエントリを、一番上のエントリが最も直近に使用されたエントリであり、一番下のエントリが最長時間未使用エントリであるスタックとして保持する。（一番下の）最長時間未使用エントリの割り当てが行われる。マッピング・モジュール２０４は、エントリを一番上のエントリにし、他のエントリを必要に応じて下に移動させることにより、エントリを最も直近に使用されたエントリにする。ローカル・コンテキスト・テーブル２１２及びそのフィールドの操作については、残りの図を参照して以下でより詳細に説明する。
【００５６】
次に図１０を参照すると、図２のグローバル・コンテキスト・テーブル２１４をより詳細に示すブロック図が図示されている。各エントリは、有効ビット１００６と、グローバル・コンテキスト識別子（ＧＩＤ）１００４と、仮想プロセッサ識別子（ＶＰＩＤ）１００８と、拡張ページ・テーブル・ポインタ（ＥＰＴＰ）１０１２と、を含む。例示的な一例として、ｘ８６  ＩＳＡの実施形態において、ＶＰＩＤ１００８は、ｘ８６  ＶＭＸ仮想プロセッサ識別子（ＶＰＩＤ）に対応し、ＥＰＴＰ１０１２は、仮想マシン制御構造（ＶＭＣＳ）において指定されるＶＭＸ  ＥＰＴＰに対応する。図１０の実施形態において、グローバル・コンテキスト・テーブル２１４は、４つのエントリを含み、各ＧＩＤ１００４は、２ビット符号化値であり、これは、サイズ４の非アーキテクチャ・グローバル・コンテキスト識別子空間を意味する。しかしながら、異なる数のエントリ及びＧＩＤ９０４のビットを用いる他の実施形態も企図される。一実施形態において、マッピング・モジュール２０４は、有効ビット１００６をクリアし、一意的な値をグローバル・コンテキスト・テーブル２１４のエントリの各々のＧＩＤ１００４に割り当て、残りのフィールドをゼロで埋めることにより、グローバル・コンテキスト・テーブル２１４を初期化する。一実施形態において、マッピング・モジュール２０４は、ローカル・コンテキスト・テーブル２１２に関して上述した方法と同様に、グローバル・コンテキスト・テーブル２１４のエントリをスタックとして保持する。グローバル・コンテキスト・テーブル２１４及びそのフィールドの操作については、残りの図を参照して以下でより詳細に説明する。本明細書の説明から気付くように、ＬＩＤとＧＩＤとの関連付けは、プロセッサ１００の動作の進行とともに変化し得る。たとえば、図９及び図１０の実施形態において、所与のＧＩＤは、１個から４個の関連付けられているＬＩＤを有することができる。しかしながら、複数のＬＩＤがＧＩＤに関連付けられている場合、これは、可能な現在有効なＧＩＤの数を減らす。たとえば、２つのＧＩＤのみが、各々２つの関連付けられているＬＩＤを有する場合に有効であり得る。
【００５７】
ｘ８６  ＩＳＡの実施形態において、非ＶＭＸ線形アドレス空間の場合、ＶＰＩＤ及びＥＰＴＰは、ゼロに設定され、ＶＭＸホストの場合、ＶＰＩＤ及びＥＰＴＰは、ゼロに設定される。したがって、ｘ８６  ＩＳＡの一実施形態では、マッピング・モジュール２０４は、グローバル・コンテキスト・テーブル２１４の１つのエントリ（トップ・エントリ、エントリ０）を特別なものとして扱う。なぜならば、このエントリは、常に有効であり（たとえば、Ｖビット１００６は、セットされた値に初期化され、常にセットされたままである）、決して置換されず（たとえば、決して最長時間未使用エントリにならず）、ＶＰＩＤ１００８及びＥＰＴＰ１０１２がゼロに設定されたまま常に保たれるからである。有利なことに、これは、多数のアドレス変換コンテキストがマッピングされる限られた数のＬＩＤの結果として実行されなければならないＴＬＢ２０６のアドレス変換無効化の量を減らす。一実施形態において、ローカル・コンテキスト・テーブル２１２及びグローバル・コンテキスト・テーブル２１４は、プロセッサ１００のプライベート・メモリ（ＰＲＡＭ）内に保持される。
【００５８】
次に図１１を参照すると、複数のプロセス・コンテキスト識別子をサポートするプロセッサ１００のアーキテクチャ機能を無効にする命令を実行する図１のプロセッサ１００の動作を示すフローチャートが図示されている。フローは、ブロック１１０２で始まる。
【００５９】
ブロック１１０２において、プロセッサ１００は、複数のプロセス・コンテキスト識別子をサポートするプロセッサ１００のアーキテクチャ機能を無効にする命令に遭遇する。例示的な一例として、ｘ８６  ＩＳＡの実施形態において、この命令は、ＰＣＩＤＥビットをクリアするＭＯＶ  ＣＲ４命令であり、これは、ｘ８６  ＰＣＩＤ機能を無効にする。フローは、ブロック１１０４に進む。
【００６０】
ブロック１１０４において、ブロック１１０２において遭遇した命令に応答して、マッピング・モジュール２０４は、ゼロでないＰＣＩＤ値を有するすべての有効なエントリを見つけるために、ローカル・コンテキスト・テーブル２１２を探索する。フローは、ブロック１１０６に進む。
【００６１】
ブロック１１０６において、ブロック１１０４において見つけられたローカル・コンテキスト・テーブル２１２の各エントリについて、マッピング・モジュール２０４は、（１）ローカル・コンテキスト・テーブル２１２の合致するエントリのＬＩＤ９０２に関連付けられているＴＬＢ２０６内のローカル・アドレス変換を無効化し（たとえば、ＬＩＤ９０２値を復号し、ＩＮＶ＿ＬＯＣＡＬビット・ベクトル２３２上に復号された値をアサートすることにより）、（２）ローカル・コンテキスト・テーブル２１２の合致するエントリを無効化する。この実施形態は、ゼロのＰＣＩＤが、常に有効な値である、すなわち、ＰＣＩＤ機能が無効にされているときにＰＣＩＤがゼロであることを想定している。これは、ゼロのＰＣＩＤに関連付けられているＴＬＢ２０６のアドレス変換をそのままにする。フローは、ブロック１１０６で終了する。
【００６２】
次に図１２を参照すると、現在のアドレス変換コンテキストを変更する命令を実行する図１のプロセッサ１００の動作を示すフローチャートが図示されている。フローは、ブロック１２０２で始まる。
【００６３】
ブロック１２０２において、プロセッサ１００は、現在のアドレス変換コンテキストを変更する命令に遭遇する。例示的な一例として、ｘ８６  ＩＳＡの実施形態において、この命令は、ＭＯＶ  ＣＲ３命令である。フローは、ブロック１２０４に進む。
【００６４】
ブロック１２０４において、ブロック１２０２において遭遇した命令に応答して、所定の条件が存在する場合に、プロセッサ１００は、ハイパーバイザにイグジットする。一実施形態において、この命令は、マイクロコード１０６で実装される。例示的な一例として、ｘ８６  ＩＳＡの実施形態において、ハイパーバイザは、ＶＭＸホストであり、条件は、ＶＭＸゲストが、ＭＯＶ  ＣＲ３命令を実行して、エラーがあったこと、又は、ＶＭＸコントロール（ｃｏｎｔｒｏｌ）が、ＭＯＶ  ＣＲ３命令に応答してＶＭイグジットを示すことである。フローは、ブロック１２０６に進む。
【００６５】
ブロック１２０６において、本明細書においてＭＯＶ＿ＣＲ３（）と呼ばれるルーチンが呼び出される。ＭＯＶ＿ＣＲ３（）については図１３を参照して説明する。ブロック１２０６における動作は、ルーチンの呼び出しと呼ばれるが（本明細書で説明する他の動作も同様）、図１１〜図２５で説明する機能は、ハードウェア、マイクロコード、又はハードウェアとマイクロコードとの組合せで実装されてもよい。フローは、ブロック１２０６で終了する。
【００６６】
次に図１３を参照すると、図１２のブロック１２０６（並びに、図１９及び図２１それぞれのブロック１９１８及びブロック２１０６）において呼び出されるＭＯＶ＿ＣＲ３（）ルーチンを実行する図１のプロセッサ１００の動作を示すフローチャートが図示されている。フローは、ブロック１３０４で始まる。
【００６７】
ブロック１３０４において、マッピング・モジュール２０４は、ＭＯＶ＿ＣＲ３（）ルーチン１３００への入力として提供されたＰＣＩＤ値に合致する有効なエントリを見つけるために、ローカル・コンテキスト・テーブル２１２を探索する。ルーチンがブロック１２０６から呼び出される場合、ＰＣＩＤ入力値は、ブロック１２０２の命令により指定された値である。ルーチンがブロック１９１８又はブロック２１０６から呼び出される場合、ＰＣＩＤ入力値は、ハイパーバイザのＰＣＩＤ値であり、ｘ８６  ＶＭＸの実施形態の場合にはゼロである。フローは、判定ブロック１３０６に進む。
【００６８】
判定ブロック１３０６において、マッピング・モジュール２０４は、ブロック１３０４において合致するエントリがあったかどうかを判定する。合致するエントリがあった場合、フローはブロック１３２２に進み、合致するエントリがなかった場合、フローはブロック１３０８に進む。
【００６９】
ブロック１３０８において、ＡＬＬＯＣＡＴＥ＿ＬＯＣＡＬ＿ＣＯＮＴＥＸＴ（）ルーチンが呼び出される。ＡＬＬＯＣＡＴＥ＿ＬＯＣＡＬ＿ＣＯＮＴＥＸＴ（）ルーチンについては図１４を参照して説明する。フローは、ブロック１３１２に進む。
【００７０】
ブロック１３１２において、アーキテクチャＣＲ３レジスタが、ＭＯＶ＿ＣＲ３（）ルーチンに渡されたＣＲ３レジスタ入力値を用いてロードされる。ルーチンがブロック１２０６から呼び出される場合、ＣＲ３入力値は、ブロック１２０２の命令により指定された値である。ルーチンがブロック１９１８又はブロック２１０６から呼び出される場合、ＣＲ３入力値は、ハイパーバイザのＣＲ３値である。ｘ８６でない実施形態の場合、ＣＲ３レジスタに類似するアーキテクチャ・レジスタがロードされる。フローは、ブロック１３１４に進む。
【００７１】
ブロック１３１４において、マッピング・モジュール２０４は、ＣＵＲ＿ＬＩＤ２４２及びＣＵＲ＿ＧＩＤ２４４を、それぞれ、ブロック１３０８において割り当てられたローカル・コンテキスト・テーブル２１２のエントリのＬＩＤ９０２及びＧＩＤ９０４で更新する。次いで、ブロック１３１６において、フローは、ＭＯＶ＿ＣＲ３（）ルーチンが呼び出された場所に戻る。
【００７２】
ブロック１３２２において、マッピング・モジュール２０４は、ローカル・コンテキスト・テーブル２１２の合致するエントリ（すなわち、ブロック１３０４における探索により見つけられたエントリ）を、最も直近に使用されたエントリにする。フローは、ブロック１３２４に進む。
【００７３】
ブロック１３２４において、マッピング・モジュール２０４は、ＣＵＲ＿ＬＩＤ２４２及びＣＵＲ＿ＧＩＤ２４４を、それぞれ、ローカル・コンテキスト・テーブル２１２の合致するエントリのＬＩＤ９０２及びＧＩＤ９０４で更新する。フローは、判定ブロック１３２６に進む。
【００７４】
判定ブロック１３２６において、マッピング・モジュール２０４は、ＶＭエントリ又はＶＭイグジットに応答してＭＯＶ＿ＣＲ３（）ルーチンが呼び出されたかどうかを判定する。ＶＭエントリ又はＶＭイグジットに応答してＭＯＶ＿ＣＲ３（）ルーチンが呼び出された場合、フローは判定ブロック１３２８に進み、ＶＭエントリ又はＶＭイグジットに応答してＭＯＶ＿ＣＲ３（）ルーチンが呼び出されたのではない場合、フローはブロック１３３４に進む。
【００７５】
判定ブロック１３２８において、マッピング・モジュール２０４は、ＶＰＩＤ機能がオンであるかどうかを判定する。ＶＰＩＤ機能がオンである場合、ブロック１３２２において、フローは、ＭＯＶ＿ＣＲ３（）ルーチンが呼び出された場所に戻り、ＶＰＩＤ機能がオンでない場合、フローはブロック１３３４に進む。
【００７６】
ブロック１３３４において、ＣＲ３レジスタのビット６３の値がゼロである場合、マッピング・モジュール２０４は、ＣＵＲ＿ＬＩＤ２４２値に関連付けられているＴＬＢ２０６内のローカル・アドレス変換を無効化する（たとえば、ＣＵＲ＿ＬＩＤ２４２値を復号し、ＩＮＶ＿ＬＯＣＡＬビット・ベクトル２３２上に復号された値をアサートすることにより）。すなわち、マッピング・モジュール２０４は、現在のアドレス変換コンテキストに関するローカル・アドレス変換を無効化する。次いで、ブロック１３３６において、フローは、ＭＯＶ＿ＣＲ３（）ルーチンが呼び出された場所に戻る。
【００７７】
次に図１４を参照すると、図１３のブロック１３０８（並びに、図１６及び図１７それぞれのブロック１６０６及びブロック１７２２）において呼び出されるＡＬＬＯＣＡＴＥ＿ＬＯＣＡＬ＿ＣＯＮＴＥＸＴ（）ルーチンを実行する図１のプロセッサ１００の動作を示すフローチャートが図示されている。フローは、ブロック１４０４で始まる。
【００７８】
ブロック１４０４において、マッピング・モジュール２０４は、ローカル・コンテキスト・テーブル２１２内の割り当てる最長時間未使用エントリを決定する。最長時間未使用以外の代替アルゴリズムを使用する他の実施形態も企図される。フローは、ブロック１４０６に進む。
【００７９】
ブロック１４０６において、マッピング・モジュール２０４は、ブロック１４０４において割り当てられたローカル・コンテキスト・テーブル２１２のエントリのＬＩＤ９０２に関連付けられているＴＬＢ２０６内のローカル・アドレス変換を無効化する。すなわち、マッピング・モジュール２０４は、除去されようとしているアドレス変換コンテキストに関するローカル・アドレス変換を無効化する。フローは、ブロック１４０８に進む。
【００８０】
ブロック１４０８において、マッピング・モジュール２０４は、ローカル・コンテキスト・テーブル２１２のエントリに対する新しい値を計算する。詳細には、マッピング・モジュール２０４は、ＬＩＤ９０２フィールド内に値を保持し（すなわち、新しいエントリが、置換されるエントリのＬＩＤ９０２値を継承し）、ＧＩＤ９０４フィールドに、ＣＵＲ＿ＧＩＤ２４４値を投入し（これは、ローカル・コンテキスト・テーブル２１２のエントリを、グローバル・コンテキスト・テーブル２１４の適切なエントリにリンクさせる）、ＰＣＩＤ９０８フィールド及びＡＴＣＢ９１２フィールドに、ＡＬＬＯＣＡＴＥ＿ＬＯＣＡＬ＿ＣＯＮＴＥＸＴ（）ルーチンに渡されたそれぞれの値を投入する。ルーチンが、ＲＳＭに応答して、ＭＯＶＴＯＣＲ３ＶＰＩＤ、ＭＯＶＴＯＣＲ３ＮＯＶＰＩＤ、又はＭＯＶ＿ＣＲ３（）から呼び出される場合（図２１参照）、ＰＣＩＤ値及びＡＣＴＢ値は、ＳＭＩにより割り込まれたプロセスのものとなる。ルーチンが、ＶＭエントリに応答して、ＭＯＶＴＯＣＲ３ＶＰＩＤ又はＭＯＶＴＯＣＲ３ＮＯＶＰＩＤから呼び出される場合（図１５参照）、ＰＣＩＤ値及びＡＣＴＢ値は、制御が移される先の仮想プロセッサのＶＭＣＳから取得された値となる。ルーチンが、ＶＭイグジットに応答して、ＭＯＶ＿ＣＲ３（）から呼び出される場合（図１９参照）、ＰＣＩＤ値及びＡＣＴＢ値は、ハイパーバイザのものとなる。ルーチンが、ＭＯＶ  ＣＲ３命令に応答して、ＭＯＶ＿ＣＲ３（）から呼び出される場合（図１２参照）、ＰＣＩＤ値及びＡＣＴＢ値は、その命令により指定されたものとなる。次いで、マッピング・モジュール２０４は、計算された新しい値を用いて、ブロック１４０４において割り当てられたエントリをロードし、割り当てられたエントリを、最も直近に使用されたエントリにする。次いで、ブロック１４１２において、フローは、ＡＬＬＯＣＡＴＥ＿ＬＯＣＡＬ＿ＣＯＮＴＥＸＴ（）ルーチンが呼び出された場所に戻る。
【００８１】
次に図１５を参照すると、ハイパーバイザからゲストへの遷移が生じたときの図１のプロセッサ１００の動作を示すフローチャートが図示されている。フローは、ブロック１５０２で始まる。
【００８２】
ブロック１５０２において、ハイパーバイザからゲストへの遷移が生じる。例示的な一例として、ｘ８６  ＩＳＡの実施形態において、この遷移は、ＶＭエントリと呼ばれ、ＶＭＸ  ＶＭＬＡＵＮＣＨ命令又はＶＭＲＥＳＵＭＥ命令の実行に応答して生じる。フローは、ブロック１５０４に進む。
【００８３】
ブロック１５０４において、マッピング・モジュール２０４は、ＶＭＣＳから、新しいＰＣＩＤＥ値と、新しいＰＣＩＤ値を含むＣＲ３レジスタの新しい値と、を取得する。フローは、判定ブロック１５０６に進む。
【００８４】
判定ブロック１５０６において、マッピング・モジュール２０４は、ＶＰＩＤ機能がオンであるかどうかを判定する。ＶＰＩＤ機能がオンである場合、フローはブロック１５０８に進み、ＶＰＩＤ機能がオンでない場合、フローはブロック１５１２に進む。
【００８５】
ブロック１５０８において、フローは、ルーチンＭＯＶＴＯＣＲ３ＶＰＩＤに移る。ルーチンＭＯＶＴＯＣＲ３ＶＰＩＤについては図１７を参照して説明する。
【００８６】
ブロック１５１２において、フローは、ルーチンＭＯＶＴＯＣＲ３ＮＯＶＰＩＤに移る。ルーチンＭＯＶＴＯＣＲ３ＮＯＶＰＩＤについては図１６を参照して説明する。
【００８７】
次に図１６を参照すると、ＭＯＶＴＯＣＲ３ＮＯＶＰＩＤルーチン１６００を実行する図１のプロセッサ１００の動作を示すフローチャートが図示されている。フローは、ブロック１６０２で始まる。
【００８８】
ブロック１６０２において、マッピング・モジュール２０４は、ＴＬＢ２０６のすべてのアドレス変換を無効化する。フローは、ブロック１６０４に進む。
【００８９】
ブロック１６０４において、マッピング・モジュール２０４は、ローカル・コンテキスト・テーブル２１２及びグローバル・コンテキスト・テーブル２１４を初期化する。さらに、マッピング・モジュール２０４は、ＡＬＬＯＣＡＴＥ＿ＬＯＣＡＬ＿ＣＯＮＴＥＸＴ（）ルーチンに渡すために、グローバル・コンテキスト識別子の一時的値をゼロに設定する（図１４参照）。フローは、ブロック１６０６に進む。
【００９０】
ブロック１６０６において、マッピング・モジュール２０４は、ＡＬＬＯＣＡＴＥ＿ＬＯＣＡＬ＿ＣＯＮＴＥＸＴ（）ルーチンを呼び出す。フローは、ブロック１６０８に進む。
【００９１】
ブロック１６０８において、アーキテクチャＣＲ３レジスタが、ＳＭＩにより割り込まれたプロセスの値（ＲＳＭの場合）又は制御が移される先の仮想プロセッサのＶＭＣＳから取得された値（ＶＭエントリの場合）となる、ＡＬＬＯＣＡＴＥ＿ＬＯＣＡＬ＿ＣＯＮＴＥＸＴ（）ルーチンに渡されたＣＲ３レジスタ入力値を用いてロードされる。フローは、ブロック１６１２に進む。
【００９２】
ブロック１６１２において、マッピング・モジュール２０４は、ＣＵＲ＿ＬＩＤ２４２及びＣＵＲ＿ＧＩＤ２４４を、ゼロ値で更新する。フローは、ブロック１６１２で終了する。
【００９３】
次に図１７を参照すると、ＭＯＶＴＯＣＲ３ＶＰＩＤルーチン１７００を実行する図１のプロセッサ１００の動作を示すフローチャートが図示されている。フローは、ブロック１７１２で始まる。
【００９４】
ブロック１７１２において、マッピング・モジュール２０４は、ＡＬＬＯＣＡＴＥ＿ＧＬＯＢＡＬ＿ＣＯＮＴＥＸＴ（）ルーチンを呼び出す。ＡＬＬＯＣＡＴＥ＿ＧＬＯＢＡＬ＿ＣＯＮＴＥＸＴ（）ルーチンについては図１８を参照して説明する。フローは、ブロック１７１４に進む。
【００９５】
ブロック１７１４において、ＰＣＩＤＥビットがゼロである場合、マッピング・モジュール２０４は、新しいＰＣＩＤ値をゼロに設定する。フローは、ブロック１７１６に進む。
【００９６】
ブロック１７１６において、マッピング・モジュール２０４は、ブロック１７１２における呼び出しを介して取得されたグローバル・コンテキスト識別子と、ブロック１５０４において取得された新しいＰＣＩＤ値又は制御が図２１のブロック２１１６から再開されるＶＭＸゲストのＶＭＣＳから取得された新しいＰＣＩＤ値のいずれかである新しいＰＣＩＤ値と、に合致する有効なエントリを見つけるために、ローカル・コンテキスト・テーブル２１２を探索する。フローは、判定ブロック１７１８に進む。
【００９７】
判定ブロック１７１８において、ブロック１７１６における探索により合致するエントリが見つけられた場合、フローはブロック１７２４に進み、合致するエントリが見つけられなかった場合、フローはブロック１７２２に進む。
【００９８】
ブロック１７２２において、マッピング・モジュール２０４は、ＡＬＬＯＣＡＴＥ＿ＬＯＣＡＬ＿ＣＯＮＴＥＸＴ（）ルーチンを呼び出す（図１４参照）。フローは、ブロック１７２６に進む。
【００９９】
ブロック１７２４において、マッピング・モジュール２０４は、ローカル・コンテキスト・テーブル２１２の合致するエントリを、最も直近に使用されたエントリにする。マッピング・モジュール２０４はまた、新しいローカル・コンテキスト識別子を、ローカル・コンテキスト・テーブル２１２の合致するエントリのＬＩＤ９０２に等しくなるようにもする。フローは、ブロック１７２６に進む。
【０１００】
ブロック１７２６において、アーキテクチャＣＲ３レジスタが、ブロック１５０４において取得された新しいＣＲ３値又は制御が図２１のブロック２１１６から再開されるＶＭＸゲストのＶＭＣＳから取得された新しいＣＲ３値のいずれかであるＣＲ３レジスタ値を用いてロードされる。フローは、ブロック１７２８に進む。
【０１０１】
ブロック１７２８において、マッピング・モジュール２０４は、ＣＵＲ＿ＧＩＤ２４４を、ブロック１７１２において取得された新しいグローバル・コンテキスト識別子で更新し、ＣＵＲ＿ＬＩＤ２４２を、ブロック１７２２又はブロック１７２４のいずれかで取得された新しいローカル・コンテキスト識別子で更新する。フローは、ブロック１７２８で終了する。
【０１０２】
次に図１８を参照すると、図１７のブロック１７１２において呼び出されるＡＬＬＯＣＡＴＥ＿ＧＬＯＢＡＬ＿ＣＯＮＴＥＸＴ（）ルーチン１８００を実行する図１のプロセッサ１００の動作を示すフローチャートが図示されている。フローは、ブロック１８０２で始まる。
【０１０３】
ブロック１８０２において、マッピング・モジュール２０４は、制御が与えられているＶＭＸゲストのＶＭＣＳから、ＶＰＩＤ及びＥＰＴＰを取得する。フローは、ブロック１８０４に進む。
【０１０４】
ブロック１８０４において、ＥＰＴ機能がオフである場合、マッピング・モジュール２０４は、ＥＰＴＰをゼロに設定する。フローは、ブロック１８０６に進む。
【０１０５】
ブロック１８０６において、マッピング・モジュール２０４は、ＶＰＩＤ及びＥＰＴＰに合致する有効なエントリを見つけるために、グローバル・コンテキスト・テーブル２１４を探索する。一番上のエントリが特別なものである図１０を参照して上述した実施形態においては、ここでは特別でないエントリのみが探索される。なぜならば、特別なエントリは、再割り当てすることができず、特別なエントリは、ＶＭＸゲストに関連付けられないからである。フローは、判定ブロック１８０８に進む。
【０１０６】
判定ブロック１８０８において、マッピング・モジュール２０４は、ブロック１８０６における探索により合致するエントリが見つけられたかどうかを判定する。合致するエントリが見つけられた場合、フローはブロック１８１２に進み、合致するエントリが見つけられなかった場合、フローはブロック１８２２に進む。
【０１０７】
ブロック１８１２において、マッピング・モジュール２０４は、グローバル・コンテキスト・テーブル２１４の合致するエントリを、最も直近に使用されたエントリにする。フローは、ブロック１８１４に進む。
【０１０８】
ブロック１８１４において、マッピング・モジュール２０４は、ＣＵＲ＿ＧＩＤ２４４を、グローバル・コンテキスト・テーブル２１４の合致するエントリのＧＩＤ１００４値で更新する。ブロック１８１６において、フローは、ＡＬＬＯＣＡＴＥ＿ＧＬＯＢＡＬ＿ＣＯＮＴＥＸＴ（）ルーチン１８００を呼び出したルーチンに戻る。
【０１０９】
ブロック１８２２において、マッピング・モジュール２０４は、グローバル・コンテキスト・テーブル２１４の最長時間未使用エントリを決定する。この最長時間未使用エントリは、実際除去されることになる。次いで、マッピング・モジュール２０４は、変数ＥＶＩＣＴＥＤ＿ＧＩＤに、除去されるエントリのＧＩＤ１００４の値を割り当てる。フローは、ブロック１８２４に進む。
【０１１０】
ブロック１８２４において、マッピング・モジュール２０４は、グローバル・コンテキスト・テーブル２１４のエントリに対する新しい値を計算する。詳細には、マッピング・モジュール２０４は、ＧＩＤフィールド１００４にＥＶＩＣＴＥＤ＿ＧＩＤを投入し、ＶＰＩＤ１００８フィールド及びＥＰＴＰ１０１２フィールドに、ＡＬＬＯＣＡＴＥ＿ＧＬＯＢＡＬ＿ＣＯＮＴＥＸＴ（）ルーチンに渡されたそれぞれの値を投入する。これらの値は、ＳＭＩにより割り込まれたプロセスの値（ＲＳＭの場合）又は制御が移される先の仮想プロセッサのＶＭＣＳから取得された値（ＶＭエントリの場合）である。次いで、マッピング・モジュール２０４は、計算された新しい値を用いて、ブロック１８２２において割り当てられたエントリをロードする。次いで、マッピング・モジュール２０４は、割り当てられエントリを、最も直近に使用されたエントリにする。フローは、ブロック１８２６に進む。
【０１１１】
ブロック１８２６において、マッピング・モジュール２０４は、ＥＶＩＣＴＥＤ＿ＧＩＤに合致する有効なエントリを見つけるために、ローカル・コンテキスト・テーブル２１２を探索する。フローは、ブロック１８２８に進む。
【０１１２】
ブロック１８２８において、ブロック１８２６において見つけられたローカル・コンテキスト・テーブル２１２の各エントリについて、マッピング・モジュール２０４は、（１）合致するエントリのＬＩＤ９０２に関連付けられているＴＬＢ２０６内のローカル・アドレス変換を無効化し、（２）ＥＶＩＣＴＥＤ＿ＧＩＤに関連付けられているＴＬＢ２０６内のグローバル・アドレス変換を無効化し（たとえば、ＥＶＩＣＴＥＤ＿ＧＩＤ値を復号し、ＩＮＶ＿ＧＬＯＢＡＬビット・ベクトル２３４上に復号された値をアサートすることにより）、（３）ローカル・コンテキスト・テーブル２１２の合致するエントリを無効化する。次いで、ブロック１８３２において、フローは、ＡＬＬＯＣＡＴＥ＿ＧＬＯＢＡＬ＿ＣＯＮＴＥＸＴ（）ルーチンが呼び出された場所に戻る。
【０１１３】
次に図１９を参照すると、ゲストからハイパーバイザへの遷移が生じたときの図１のプロセッサ１００の動作を示すフロー図が図示されている。フローは、ブロック１９０２で始まる。
【０１１４】
ブロック１９０２において、ゲストからハイパーバイザへの遷移が生じる。例示的な一例として、ｘ８６  ＩＳＡの実施形態において、この遷移は、ＶＭイグジットと呼ばれ、所定の命令の実行（所定の命令のうちのいくつかについては、ＶＭイグジットは、制御フィールド内の設定に依存する）及びＶＭＸ非ルート動作における所定のイベント（例外、割り込み、タスク切り替え、及びプリエンプション・タイマ・ティック（ｐｒｅｅｍｐｔｉｏｎ  ｔｉｍｅｒ  ｔｉｃｋ）など）に応答して生じる。フローは、ブロック１９０４に進む。
【０１１５】
ブロック１９０４において、マッピング・モジュール２０４は、ＶＭＣＳから、ハイパーバイザのＰＣＩＤ値である新しいＰＣＩＤ値を含むＣＲ３レジスタの新しい値を取得する。フローは、ブロック１９０６に進む。
【０１１６】
ブロック１９０６において、マッピング・モジュール２０４は、ＥＰＴ機能を無効にし（ハイパーバイザにより使用されないので）、一時的グローバル・コンテキスト識別子変数をゼロに設定し、ＶＰＩＤをゼロに設定する。これらの値は、ハイパーバイザに関連付けられている値である。フローは、ブロック１９０８に進む。
【０１１７】
ブロック１９０８において、アーキテクチャＣＲ３レジスタが、ブロック１９０４において取得されたＣＲ３レジスタ値を用いてロードされる。フローは、判定ブロック１９１２に進む。
【０１１８】
判定ブロック１９１２において、マッピング・モジュール２０４は、ＶＰＩＤ機能がオンであるかどうかを判定する。ＶＰＩＤ機能がオンである場合、フローはブロック１９１８に進み、ＶＰＩＤ機能がオンでない場合、フローはブロック１９１４に進む。
【０１１９】
ブロック１９１４において、マッピング・モジュール２０４は、ＴＬＢ２０６のすべてのアドレス変換を無効化する。フローは、ブロック１９１６に進む。
【０１２０】
ブロック１９１６において、マッピング・モジュール２０４は、ローカル・コンテキスト・テーブル２１２を初期化する。フローは、ブロック１９１８に進む。
【０１２１】
ブロック１９１８において、ＭＯＶ＿ＣＲ３（）ルーチンが呼び出される（図１３参照）。フローは、ブロック１９１８で終了する。
【０１２２】
次に図２０を参照すると、システム管理モード（ＳＭＭ）への遷移が生じたときの図１のプロセッサ１００の動作を示すフローチャートが図示されている。フローは、ブロック２００２で始まる。
【０１２３】
ブロック２００２において、ＳＭＭへの遷移が生じる。これは、ＳＭＭエントリとも呼ばれる。ｘ８６  ＩＳＡの実施形態において、たとえば、この遷移は、システム管理割り込み（ＳＭＩ）を介して生じる。フローは、ブロック２００４に進む。
【０１２４】
ブロック２００４において、マッピング・モジュール２０４は、ＴＬＢ２０６のすべてのアドレス変換を無効化する。フローは、ブロック２００６に進む。
【０１２５】
ブロック２００６において、マッピング・モジュール２０４は、ローカル・コンテキスト・テーブル２１２及びグローバル・コンテキスト・テーブル２１４を初期化する。フローは、ブロック２００８に進む。
【０１２６】
ブロック２００８において、マッピング・モジュール２０４は、ＣＵＲ＿ＬＩＤ２４２及びＣＵＲ＿ＧＩＤ２４４をゼロ値で更新する。フローは、ブロック２００８で終了する。
【０１２７】
次に図２１を参照すると、ＳＭＭから出る遷移が生じたときの図１のプロセッサ１００の動作を示すフローチャートが図示されている。フローは、ブロック２１０２で始まる。
【０１２８】
ブロック２１０２において、ＳＭＭから出る遷移が生じる。ｘ８６  ＩＳＡの実施形態において、たとえば、この遷移は、ＳＭＭからの戻り（ＲＳＭ）命令の実行を介して生じる。フローは、判定ブロック２１０４に進む。
【０１２９】
判定ブロック２１０４において、マッピング・モジュール２０４は、ＶＭＸ機能がオフにされているかどうかを判定する。ＶＭＸ機能がオフである場合、フローはブロック２１０６に進み、ＶＭＸ機能がオフでない場合、フローは判定ブロック２１１２に進む。
【０１３０】
ブロック２１０６において、ＭＯＶ＿ＣＲ３（）ルーチンが呼び出される（図１３参照）。フローは、ブロック２１０８に進む。
【０１３１】
ブロック２１０８において、ＭＯＶＴＯＣＲ３ＮＯＶＰＩＤへのジャンプが行われる（図１６参照）。フローは、ブロック２１０８で終了する。
【０１３２】
判定ブロック２１１２において、マッピング・モジュール２０４は、ＳＭＭからの戻りがハイパーバイザへの戻りであるかどうかを判定する。ハイパーバイザは、ｘ８６  ＩＳＡの実施形態の場合にはＶＭＸホストである。ハイパーバイザへの戻りである場合、フローはブロック２１０６に進み、ハイパーバイザへの戻りでない場合、フローは判定ブロック２１１４に進む。
【０１３３】
判定ブロック２１１４において、マッピング・モジュール２０４は、ＶＰＩＤ機能がオンであるかどうかを判定する。ＶＰＩＤ機能がオンである場合、フローはブロック２１１６に進み、ＶＰＩＤ機能がオンでない場合、フローはブロック２１０８に進む。
【０１３４】
ブロック２１１６において、ＭＯＶＴＯＣＲ３ＶＰＩＤへのジャンプが行われる（図１７参照）。フローは、ブロック２１１６で終了する。
【０１３５】
次に図２２を参照すると、プロセス・コンテキスト識別子に関連付けられているＴＬＢ２０６のアドレス変換を無効化する命令を実行するプロセッサ１００の動作を示すフローチャートが図示されている。フローは、ブロック２２０２で始まる。
【０１３６】
ブロック２２０２において、プロセッサ１００は、プロセス・コンテキスト識別子に関連付けられているＴＬＢ２０６のアドレス変換を無効化する命令に遭遇する。ｘ８６  ＩＳＡの実施形態において、たとえば、この命令は、ＩＮＶＰＣＩＤ命令である。フローは、ブロック２２０４に進む。
【０１３７】
ブロック２２０４において、マッピング・モジュール２０４は、現在のＶＰＩＤに合致する有効なエントリを見つけるために、グローバル・コンテキスト・テーブル２１４を探索する。合致するエントリが見つけられなかった場合、フローは終了する。合致するエントリが見つけられた場合、マッピング・モジュール２０４は、一時変数ＴＨＩＳ＿ＧＩＤに、グローバル・コンテキスト・テーブル２１４の合致するエントリのＧＩＤ１００４を割り当てる。フローは、判定ブロック２２０６に進む。
【０１３８】
判定ブロック２２０６において、マッピング・モジュール２０４は、命令タイプ（たとえば、ｘ８６  ＩＮＶＰＣＩＤ命令のレジスタ・オペランド）が０であるかどうかを判定する。命令タイプが０である場合、フローはブロック２２０８に進み、命令タイプが０でない場合、フローは判定ブロック２２１６に進む。
【０１３９】
ブロック２２０８において、マッピング・モジュール２０４は、ＩＮＶＰＣＩＤ命令において指定されているＰＣＩＤ及びＴＨＩＳ＿ＧＩＤに合致する有効なエントリを見つけるために、ローカル・コンテキスト・テーブル２１２を探索する。フローは、判定ブロック２２１２に進む。
【０１４０】
判定ブロック２２１２において、マッピング・モジュール２０４は、ブロック２２０８において合致するエントリが見つけられたかどうかを判定する。合致するエントリが見つけられた場合、フローはブロック２２１４に進み、合致するエントリが見つけられなかった場合、フローは終了する。
【０１４１】
ブロック２２１４において、マッピング・モジュール２０４は、一時変数ＴＨＩＳ＿ＬＩＤに、ブロック２２０８における探索により見つけられたローカル・コンテキスト・テーブル２１２の合致するエントリのＬＩＤ９０２を割り当てる。次いで、マッピング・モジュール２０４は、ＴＨＩＳ＿ＬＩＤに関連付けられており、ＩＮＶＰＣＩＤ命令において指定されている仮想アドレス（ｘ８６  ＩＳＡの実施形態では、線形アドレス）を有するＴＬＢ２０６内のローカル・アドレス変換を無効化する。ＴＬＢ２０６はまた、読み出し又は書き込みのためのＴＬＢ２０６の行を選択するインデックス入力を含む。一実施形態において、ＴＬＢ２０６は、複数の方式を有するセット・アソシアティブ・キャッシュであり、さらなる入力が、読み出される方式又は書き込まれる方式を指定する。一実施形態において、インデックス／方式入力を使用して、無効化されるべき特定のエントリ３００を指定することができる。一実施形態において、メモリ・サブシステム１２２が、仮想アドレスを指定するマイクロコード無効化ページ・マイクロ命令を実行するときに、メモリ・サブシステム１２２は、仮想アドレスに合致するエントリを見つけるために、ＴＬＢ２０６を探索し、仮想アドレスにヒットするインデックス／方式を受け取る。次いで、メモリ・サブシステムは、ヒットしたインデックス／方式でエントリを無効化する。さらに、メモリ・サブシステム１２２は、たとえば、最長時間未使用エントリのインデックス／方式を使用して、ＴＬＢ２０６にエントリを割り当てる。フローは、ブロック２２１４で終了する。
【０１４２】
判定ブロック２２１６において、マッピング・モジュール２０４は、命令タイプが１であるかどうかを判定する。命令タイプが１である場合、フローはブロック２２１８に進み、命令タイプが１でない場合、フローは判定ブロック２２２６に進む。
【０１４３】
ブロック２２１８において、マッピング・モジュール２０４は、ＩＮＶＰＣＩＤ命令において指定されているＰＣＩＤ及びＴＨＩＳ＿ＧＩＤに合致する有効なエントリを見つけるために、ローカル・コンテキスト・テーブル２１２を探索する。フローは、判定ブロック２２２２に進む。
【０１４４】
判定ブロック２２２２において、マッピング・モジュール２０４は、ブロック２２１８において合致するエントリが見つけられたかどうかを判定する。合致するエントリが見つけられた場合、フローはブロック２２２４に進み、合致するエントリが見つけられなかった場合、フローは終了する。
【０１４５】
ブロック２２２４において、マッピング・モジュール２０４は、一時変数ＴＨＩＳ＿ＬＩＤに、ブロック２２１８における探索により見つけられたローカル・コンテキスト・テーブル２１２の合致するエントリのＬＩＤ９０２を割り当てる。次いで、マッピング・モジュール２０４は、ＴＨＩＳ＿ＬＩＤに関連付けられているＴＬＢ２０６内のローカル・アドレス変換を無効化する。フローは、ブロック２２２４で終了する。
【０１４６】
判定ブロック２２２６において、マッピング・モジュール２０４は、命令タイプが２であるかどうかを判定する。命令タイプが２である場合、フローはブロック２２２８に進み、命令タイプが２でない場合、フローは判定ブロック２２３６に進む。
【０１４７】
ブロック２２２８において、マッピング・モジュール２０４は、ＴＨＩＳ＿ＧＩＤに関連付けられているＴＬＢ２０６内のグローバル・アドレス変換を無効化する。フローは、ブロック２２３８に進む。
【０１４８】
判定ブロック２２３６において、マッピング・モジュール２０４は、命令タイプが３であるかどうかを判定する。命令タイプが３である場合、フローはブロック２２３８に進み、命令タイプが３でない場合、フローはブロック２２４８に進む。
【０１４９】
ブロック２２３８において、マッピング・モジュール２０４は、ＴＨＩＳ＿ＧＩＤに合致する有効なエントリを見つけるために、ローカル・コンテキスト・テーブル２１２を探索する。見つけられたローカル・コンテキスト・テーブル２１２の各合致するエントリについて、マッピング・モジュール２０４は、（１）一時変数ＴＨＩＳ＿ＬＩＤに、ローカル・コンテキスト・テーブル２１２の合致するエントリのＬＩＤ９０２を割り当て、（２）ＴＨＩＳ＿ＬＩＤに関連付けられているＴＬＢ２０６内のローカル・アドレス変換を無効化する。フローは、ブロック２２３８で終了する。
【０１５０】
ブロック２２４８において、マッピング・モジュール２０４は、プロセッサ１００のフォールトを生成させる。ｘ８６  ＩＳＡの実施形態において、このフォールトは、たとえば、一般保護フォールトである。フローは、ブロック２２４８で終了する。
【０１５１】
次に図２３Ａ及び図２３Ｂ（集合的に図２３）を参照すると、仮想プロセッサ識別子に関連付けられているＴＬＢ２０６のアドレス変換を無効化する命令を実行するプロセッサ１００の動作を示すフローチャートが図示されている。フローは、ブロック２３０２で始まる。
【０１５２】
ブロック２３０２において、プロセッサ１００は、仮想プロセッサ識別子に関連付けられているＴＬＢ２０６のアドレス変換を無効化する命令に遭遇する。ｘ８６  ＩＳＡの実施形態において、たとえば、この命令は、ＩＮＶＶＰＩＤ命令である。フローは、判定ブロック２３０４に進む。
【０１５３】
判定ブロック２３０４において、マッピング・モジュール２０４は、命令タイプ（たとえば、ｘ８６  ＩＮＶＶＰＩＤ命令のレジスタ・オペランド）が０であるかどうかを判定する。命令タイプが０である場合、フローはブロック２３０６に進み、命令タイプが０でない場合、フローは判定ブロック２３１４に進む。
【０１５４】
ブロック２３０６において、マッピング・モジュール２０４は、現在のＶＰＩＤに合致する有効なエントリを見つけるために、グローバル・コンテキスト・テーブル２１４を探索する。合致するエントリが見つけられなかった場合、フローは終了する。合致するエントリが見つけられた場合、マッピング・モジュール２０４は、一時変数ＴＨＩＳ＿ＧＩＤに、グローバル・コンテキスト・テーブル２１４の合致するエントリのＧＩＤ１００４を割り当てる。フローは、ブロック２３０８に進む。
【０１５５】
ブロック２３０８において、マッピング・モジュール２０４は、ＴＨＩＳ＿ＧＩＤに関連付けられているグローバル・アドレス変換を無効化する。マッピング・モジュール２０４はまた、ＴＨＩＳ＿ＧＩＤに合致する有効なエントリを見つけるために、ローカル・コンテキスト・テーブル２１２を探索する。見つけられたローカル・コンテキスト・テーブル２１２の各合致するエントリについて、マッピング・モジュール２０４は、（１）一時変数ＴＨＩＳ＿ＬＩＤに、ローカル・コンテキスト・テーブル２１２の合致するエントリのＬＩＤ９０２を割り当て、（２）ＴＨＩＳ＿ＬＩＤに関連付けられており、ＩＮＶＰＣＩＤ命令において指定されている仮想アドレス（ｘ８６  ＩＳＡの実施形態では、線形アドレス）を有するＴＬＢ２０６内のローカル・アドレス変換を無効化する。フローは、ブロック２３０８で終了する。
【０１５６】
判定ブロック２３１４において、マッピング・モジュール２０４は、命令タイプが１であるかどうかを判定する。命令タイプが１である場合、フローはブロック２３１６に進み、命令タイプが１でない場合、フローは判定ブロック２３２４に進む。
【０１５７】
ブロック２３１６において、マッピング・モジュール２０４は、現在のＶＰＩＤに合致する有効なエントリを見つけるために、グローバル・コンテキスト・テーブル２１４を探索する。合致するエントリが見つけられなかった場合、フローは終了する。合致するエントリが見つけられた場合、マッピング・モジュール２０４は、一時変数ＴＨＩＳ＿ＧＩＤに、グローバル・コンテキスト・テーブル２１４の合致するエントリのＧＩＤ１００４を割り当てる。フローは、ブロック２３１８に進む。
【０１５８】
ブロック２３１８において、マッピング・モジュール２０４は、ＴＨＩＳ＿ＧＩＤに関連付けられているグローバル・アドレス変換を無効化する。マッピング・モジュール２０４はまた、ＴＨＩＳ＿ＧＩＤに合致する有効なエントリを見つけるために、ローカル・コンテキスト・テーブル２１２を探索する。見つけられたローカル・コンテキスト・テーブル２１２の各合致するエントリについて、マッピング・モジュール２０４は、（１）一時変数ＴＨＩＳ＿ＬＩＤに、ローカル・コンテキスト・テーブル２１２の合致するエントリのＬＩＤ９０２を割り当て、（２）ＴＨＩＳ＿ＬＩＤに関連付けられているＴＬＢ２０６内のローカル・アドレス変換を無効化する。フローは、ブロック２３１８で終了する。
【０１５９】
判定ブロック２３２４において、マッピング・モジュール２０４は、命令タイプが２であるかどうかを判定する。命令タイプが２である場合、フローはブロック２３２６に進み、命令タイプが２でない場合、フローは判定ブロック２３３４に進む。
【０１６０】
ブロック２３２６において、マッピング・モジュール２０４は、すべてのゼロでないＶＰＩＤ値に合致する有効なエントリを見つけるために、グローバル・コンテキスト・テーブル２１４を探索する。合致するエントリが見つけられなかった場合、フローは終了する。合致するエントリが見つけられた場合、グローバル・コンテキスト・テーブル２１４の各合致するエントリについて、マッピング・モジュール２０４は、（１）一時変数ＴＨＩＳ＿ＧＩＤに、グローバル・コンテキスト・テーブル２１４の合致するエントリのＧＩＤ１００４を割り当て、（２）ＴＨＩＳ＿ＧＩＤに関連付けられているグローバル・アドレス変換を無効化し、（３）ＴＨＩＳ＿ＧＩＤに合致する有効なエントリを見つけるために、ローカル・コンテキスト・テーブル２１２を探索し、見つけられたローカル・コンテキスト・テーブル２１２の各合致するエントリについて、（Ａ）一時変数ＴＨＩＳ＿ＬＩＤに、ローカル・コンテキスト・テーブル２１２の合致するエントリのＬＩＤ９０２を割り当て、（Ｂ）ＴＨＩＳ＿ＬＩＤに関連付けられているＴＬＢ２０６内のローカル・アドレス変換を無効化する。フローは、ブロック２３２６で終了する。
【０１６１】
判定ブロック２３３４において、マッピング・モジュール２０４は、命令タイプが３であるかどうかを判定する。命令タイプが３である場合、フローはブロック２３３６に進み、命令タイプが３でない場合、フローはブロック２３４２に進む。
【０１６２】
ブロック２３３６において、マッピング・モジュール２０４は、現在のＶＰＩＤに合致する有効なエントリを見つけるために、グローバル・コンテキスト・テーブル２１４を探索する。合致するエントリが見つけられなかった場合、フローは終了する。合致するエントリが見つけられた場合、マッピング・モジュール２０４は、一時変数ＴＨＩＳ＿ＧＩＤに、グローバル・コンテキスト・テーブル２１４の合致するエントリのＧＩＤ１００４を割り当てる。フローは、ブロック２３３８に進む。
【０１６３】
ブロック２３３８において、マッピング・モジュール２０４は、ＴＨＩＳ＿ＧＩＤに合致する有効なエントリを見つけるために、ローカル・コンテキスト・テーブル２１２を探索する。見つけられたローカル・コンテキスト・テーブル２１２の各合致するエントリについて、マッピング・モジュール２０４は、（１）一時変数ＴＨＩＳ＿ＬＩＤに、ローカル・コンテキスト・テーブル２１２の合致するエントリのＬＩＤ９０２を割り当て、（２）ＴＨＩＳ＿ＬＩＤに関連付けられているＴＬＢ２０６内のローカル・アドレス変換を無効化する。フローは、ブロック２３３８で終了する。
【０１６４】
ブロック２３４２において、マッピング・モジュール２０４は、プロセッサ１００のフォールトを生成させる。ｘ８６  ＩＳＡの実施形態において、このフォールトは、たとえば、一般保護フォールトである。フローは、ブロック２３４２で終了する。
【０１６５】
次に図２４を参照すると、拡張ページ・テーブル・ポインタに関連付けられているＴＬＢ２０６のアドレス変換を無効化する命令を実行するプロセッサ１００の動作を示すフローチャートが図示されている。フローは、ブロック２４０２で始まる。
【０１６６】
ブロック２４０２において、プロセッサ１００は、拡張ページ・テーブル・ポインタに関連付けられているＴＬＢ２０６のアドレス変換を無効化する命令に遭遇する。ｘ８６  ＩＳＡの実施形態において、たとえば、この命令は、ＩＮＶＥＰＴ命令である。フローは、判定ブロック２４０４に進む。
【０１６７】
判定ブロック２４０４において、マッピング・モジュール２０４は、命令タイプ（たとえば、ｘ８６  ＩＮＶＥＰＴ命令のレジスタ・オペランド）が１であるかどうかを判定する。命令タイプが１である場合、フローはブロック２４０６に進み、命令タイプが１でない場合、フローは判定ブロック２４１２に進む。
【０１６８】
ブロック２４０６において、マッピング・モジュール２０４は、ＩＮＶＥＰＴ命令において指定されているＥＰＴＰに合致する有効なエントリを見つけるために、グローバル・コンテキスト・テーブル２１４を探索する。合致するエントリが見つけられなかった場合、フローは終了する。合致するエントリが見つけられた場合、マッピング・モジュール２０４は、一時変数ＴＨＩＳ＿ＧＩＤに、グローバル・コンテキスト・テーブル２１４の合致するエントリのＧＩＤ１００４を割り当てる。フローは、ブロック２４０８に進む。
【０１６９】
ブロック２４０８において、マッピング・モジュール２０４は、ＴＨＩＳ＿ＧＩＤに関連付けられているグローバル・アドレス変換を無効化する。マッピング・モジュール２０４はまた、ＴＨＩＳ＿ＧＩＤに合致する有効なエントリを見つけるために、ローカル・コンテキスト・テーブル２１２を探索する。見つけられたローカル・コンテキスト・テーブル２１２の各合致するエントリについて、マッピング・モジュール２０４は、（１）一時変数ＴＨＩＳ＿ＬＩＤに、ローカル・コンテキスト・テーブル２１２の合致するエントリのＬＩＤ９０２を割り当て、（２）ＴＨＩＳ＿ＬＩＤに関連付けられているＴＬＢ２０６内のローカル・アドレス変換を無効化する。フローは、ブロック２４０８で終了する。
【０１７０】
判定ブロック２４１２において、マッピング・モジュール２０４は、命令タイプが２であるかどうかを判定する。命令タイプが２である場合、フローはブロック２４１４に進み、命令タイプが２でない場合、フローはブロック２４４２に進む。
【０１７１】
ブロック２４１４において、マッピング・モジュール２０４は、すべてのゼロでないＥＰＴＰ値に合致する有効なエントリを見つけるために、グローバル・コンテキスト・テーブル２１４を探索する。合致するエントリが見つけられなかった場合、フローは終了する。合致するエントリが見つけられた場合、グローバル・コンテキスト・テーブル２１４の各合致するエントリについて、マッピング・モジュール２０４は、（１）一時変数ＴＨＩＳ＿ＧＩＤに、グローバル・コンテキスト・テーブル２１４の合致するエントリのＧＩＤ１００４を割り当て、（２）ＴＨＩＳ＿ＧＩＤに関連付けられているグローバル・アドレス変換を無効化し、（３）ＴＨＩＳ＿ＧＩＤに合致する有効なエントリを見つけるために、ローカル・コンテキスト・テーブル２１２を探索し、見つけられたローカル・コンテキスト・テーブル２１２の各合致するエントリについて、（Ａ）一時変数ＴＨＩＳ＿ＬＩＤに、ローカル・コンテキスト・テーブル２１２の合致するエントリのＬＩＤ９０２を割り当て、（Ｂ）ＴＨＩＳ＿ＬＩＤに関連付けられているＴＬＢ２０６内のローカル・アドレス変換を無効化する。フローは、ブロック２４１４で終了する。
【０１７２】
ブロック２４４２において、マッピング・モジュール２０４は、プロセッサ１００のフォールトを生成させる。ｘ８６  ＩＳＡの実施形態において、このフォールトは、たとえば、一般保護フォールトである。フローは、ブロック２４４２で終了する。
【０１７３】
ローカル・コンテキスト識別子空間（及びグローバル・コンテキスト識別子空間）のサイズが、予め定められたサイズ（たとえば、４）である実施形態について説明したが、ローカル・コンテキスト識別子空間（及びグローバル・コンテキスト識別子空間）のサイズが、性能、サイズ、及び電力消費量などの所望の設計目標に応じて異なる他の実施形態も企図される。さらに、単一のＴＬＢに関して実施形態について説明したが、説明したメカニズムは、複数のＴＬＢを有するプロセッサにおける各ＴＬＢに対して使用されてもよいことを理解すべきである。さらに、ＴＬＢに関して実施形態について説明したが、本明細書で説明したメカニズムは、たとえば、ｘ８６  ＩＳＡのＰＭＬ４キャッシュ、ＰＤＰＴＥキャッシュ、及びＰＤＥキャッシュといった、ページング構造キャッシュなどの他の変換キャッシュ構造において使用されてもよい。さらに、ビットが、セット若しくはクリア又は０若しくは１の特定の意味を有するように見える実施形態について説明したが、正論理及び負論理の実装が使用されてもよいことを理解すべきである。最後に、ｘ８６  ＩＳＡに関して様々な実施形態について説明したが、大きいアーキテクチャ・アドレス変換コンテキスト空間をより小さい非アーキテクチャ・アドレス変換コンテキスト空間にマッピングし、アドレス変換を同時に無効化するための本明細書で説明したメカニズムは、ＡＲＭ  ＩＳＡ、ＭＩＰＳ  ＩＳＡ、又はＳｕｎ  ＩＳＡなどの他のＩＳＡにおいて使用されてもよい。
【０１７４】
本明細書において本発明の様々な実施形態について説明したが、これらは、例としてのみ提示されており、限定を意図するものではないことを理解すべきである。本発明の範囲から逸脱することなく形態及び詳細の様々な変更が行われ得ることが、関連するコンピュータ分野の当業者には明らかであろう。たとえば、ソフトウェアは、たとえば、本明細書で説明した装置及び方法の機能、製造、モデリング、シミュレーション、記述、及び／又はテストを可能にすることができる。これは、一般的なプログラミング言語（たとえば、Ｃ、Ｃ＋＋）、Ｖｅｒｉｌｏｇハードウェア記述言語（ＨＤＬ）、ＶＨＤＬなどを含むＨＤＬ、又は他の利用可能なプログラムを使用することにより実現することができる。そのようなソフトウェアは、磁気テープ、半導体、磁気ディスク、光ディスク（たとえば、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭなど）、ネットワーク通信媒体、有線通信媒体、無線通信媒体、又は他の通信媒体などの任意の既知のコンピュータ使用可能な媒体に配することができる。本明細書で説明した装置及び方法の実施形態は、マイクロプロセッサ・コアなどの半導体知的財産コアに含まれ（たとえば、ＨＤＬで具現化又は指定され）、集積回路の生産においてハードウェアに変換することができる。さらに、本明細書で説明した装置及び方法は、ハードウェアとソフトウェアとの組合せとして具現化することができる。したがって、本発明は、本明細書で説明した例示的な実施形態のいずれによっても限定されるべきでなく、請求項及びその均等物のみに従って定められるべきである。特に、本発明は、汎用コンピュータにおいて使用することができるマイクロプロセッサ・デバイス内に実装することができる。最後に、当業者は、請求項により定められる本発明の範囲から逸脱することなく、本発明の同じ目的を達成するために他の構造を設計又は修正する基礎として、開示したコンセプト及び特定の実施形態を容易に使用することができる、ということを理解すべきである。
【図１】
2016527652.tif 000003
【図２】
2016527652.tif 000004
【図３】
2016527652.tif 000005
【図４】
2016527652.tif 000006
【図５】
2016527652.tif 000007
【図６】
2016527652.tif 000008
【図７】
2016527652.tif 000009
【図８】
2016527652.tif 000010
【図９】
2016527652.tif 000011
【図１０】
2016527652.tif 000012
【図１１】
2016527652.tif 000013
【図１２】
2016527652.tif 000014
【図１３】
2016527652.tif 000015
【図１４】
2016527652.tif 000016
【図１５】
2016527652.tif 000017
【図１６】
2016527652.tif 000018
【図１７】
2016527652.tif 000019
【図１８】
2016527652.tif 000020
【図１９】
2016527652.tif 000021
【図２０】
2016527652.tif 000022
【図２１】
2016527652.tif 000023
【図２２】
2016527652.tif 000024
【図２３Ａ】
2016527652.tif 000025
【図２３Ｂ】
2016527652.tif 000026
【図２４】
2016527652.tif 000027
【国際調査報告】
2016527652.tif 000028
2016527652.tif 000029