JP2016527652A - 多数の異なるアドレス空間をサポートするプロセッサにおける効率的なアドレス変換キャッシング - Google Patents

多数の異なるアドレス空間をサポートするプロセッサにおける効率的なアドレス変換キャッシング Download PDF

Info

Publication number
JP2016527652A
JP2016527652A JP2016535541A JP2016535541A JP2016527652A JP 2016527652 A JP2016527652 A JP 2016527652A JP 2016535541 A JP2016535541 A JP 2016535541A JP 2016535541 A JP2016535541 A JP 2016535541A JP 2016527652 A JP2016527652 A JP 2016527652A
Authority
JP
Japan
Prior art keywords
identifier
architectural
architecture
local
block
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2016535541A
Other languages
English (en)
Other versions
JP6081672B2 (ja
Inventor
パーク,テリー
エディ,コーリン
モハン,ヴィスワナス
ディー バンダ,ジョン
ディー バンダ,ジョン
Original Assignee
ヴィア アライアンス セミコンダクター カンパニー リミテッド
ヴィア アライアンス セミコンダクター カンパニー リミテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ヴィア アライアンス セミコンダクター カンパニー リミテッド, ヴィア アライアンス セミコンダクター カンパニー リミテッド filed Critical ヴィア アライアンス セミコンダクター カンパニー リミテッド
Publication of JP2016527652A publication Critical patent/JP2016527652A/ja
Application granted granted Critical
Publication of JP6081672B2 publication Critical patent/JP6081672B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0891Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using clearing, invalidating or resetting means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • G06F12/1036Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • G06F12/1045Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache
    • G06F12/1063Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache the data cache being concurrently virtually addressed
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/109Address translation for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7839Architectures of general purpose stored program computers comprising a single central processing unit with memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/68Details of translation look-aside buffer [TLB]
    • G06F2212/683Invalidation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/68Details of translation look-aside buffer [TLB]
    • G06F2212/684TLB miss handling

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

プロセッサは、変換ルックアサイド・バッファ(TLB)及びマッピング・モジュールを備える。TLBは、複数のエントリを含み、複数のエントリの各エントリは、アドレス変換及び有効ビット・ベクトルを保持するよう構成され、有効ビット・ベクトルの各ビットは、それぞれのアドレス変換コンテキストについて、セットされている場合にはアドレス変換が有効であり、クリアされている場合にはアドレス変換が無効であることを示す。TLBはまた、複数のエントリの有効ビット・ベクトルのビットに対応するビットを有する無効化ビット・ベクトルを含み、無効化ビット・ベクトルのセットされているビットは、複数のエントリの各エントリの有効ビット・ベクトルの対応するビットを同時にクリアすることを示す。マッピング・モジュールは、無効化ビット・ベクトルを生成する。

Description

(関連出願の相互参照)
本出願は、参照によりその全体が本明細書に組み込まれる、2014年7月21日に出願された米国特許仮出願第62/026,830号に基づく優先権を主張する。
現代のプロセッサは、仮想メモリ機能をサポートしている。仮想メモリ・システムは、メモリをアドレッシングするために、プログラムにより使用される仮想アドレスを、ハードウェアにより使用される物理アドレスにマッピングすなわち変換する。仮想メモリは、プログラムから物理メモリのフラグメンテーションを隠蔽し、プログラムの再配置を円滑にし、プログラムがそのプログラムに利用可能な実物理メモリよりも大きいメモリ・アドレス空間を見ることを可能にするという利点を有する。このような利点は、複数のプログラム又はプロセスによるプロセッサのタイム・シェアリングをサポートする現代のシステムにおいて特に有益である。
オペレーティング・システムは、仮想アドレスを物理アドレスにマッピングする変換テーブル(ページング仮想メモリ・システム(paged virtual memory system)においてページ・テーブルとしばしば呼ばれる)を作成して、メモリに変換テーブルを保持する。変換テーブルは、テーブルの階層の形態をとることができ、その一部が、仮想アドレスを中間テーブル・アドレスにマッピングする。プログラムが、仮想アドレスを使用してメモリにアクセスするとき、仮想アドレスからその物理アドレスへの変換を実行するために、変換テーブルにアクセスしなければならない。これは、一般に、ページ・テーブル・ウォーク又はテーブル・ウォークと呼ばれる。変換テーブルにアクセスするためにさらにメモリ・アクセスがあると、プログラムにより要求されているデータ又は命令を取得するためのメモリへの最終的なアクセスを著しく遅らせる可能性がある。
現代のプロセッサは、この問題を解消して性能を向上させるために、変換ルックアサイド・バッファ(TLB)を備える。TLBは、変換テーブルにアクセスする必要がある可能性を大幅に低減させるために、仮想アドレスから物理アドレスへのアドレス変換をキャッシュするプロセッサのハードウェア構造である。変換される仮想アドレスが、TLB内で探索され、TLBは、仮想アドレスがTLB内でヒットした場合、テーブル・ウォークを実行するためにメモリ内の変換テーブルにアクセスするのに要するであろう時間よりもかなり短い時間で物理アドレスを提供する。TLBの効率(ヒット率)は、プロセッサ性能にとって重要である。
各プロセスすなわちコンテキストは、自身の固有のアドレス空間及び関連付けられているアドレス変換を有する。したがって、1つのプロセスに関するTLBエントリは、別のプロセスに対しては正しくないこともあり得る。すなわち、1つのプロセスに関して作成されたTLBエントリは、別のプロセスに対して陳腐化している(stale)こともあり得る。TLBの効率を低下させ得る現象の1つは、プロセッサが1つのプロセスの実行から異なるプロセスの実行に切り替えるときである。システムは、陳腐化したTLBエントリを使用して、古いプロセスのためにTLBにキャッシュされているアドレス変換を使用することにより、新しいプロセスの仮想アドレスを間違って変換することがないことを確実にしなければならない。
一態様において、本発明は、変換ルックアサイド・バッファ(TLB)を提供する。TLBは、複数のエントリを含み、複数のエントリの各エントリは、アドレス変換及び有効ビット・ベクトル(valid bit vector)を保持するよう構成され、有効ビット・ベクトルの各ビットは、それぞれのアドレス変換コンテキストについて、セットされている場合にはアドレス変換が有効であり、クリアされている場合にはアドレス変換が無効であることを示す。TLBはまた、複数のエントリの有効ビット・ベクトルのビットに対応するビットを有する無効化ビット・ベクトル(invalidation bit vector)を含み、無効化ビット・ベクトルのセットされているビットは、複数のエントリの各エントリの有効ビット・ベクトルの対応するビットを同時にクリアすることを示す。
別の態様において、本発明は、複数のエントリを含む変換ルックアサイド・バッファ(TLB)を動作させるための方法を提供する。複数のエントリの各エントリは、アドレス変換及び有効ビット・ベクトルを保持するよう構成され、有効ビット・ベクトルの各ビットは、それぞれのアドレス変換コンテキストについて、セットされている場合にはアドレス変換が有効であり、クリアされている場合にはアドレス変換が無効であることを示す。方法は、複数のエントリの有効ビット・ベクトルのビットに対応するビットを有する無効化ビット・ベクトルを受け取ることと、複数のエントリの各エントリの有効ビット・ベクトルの、無効化ビット・ベクトルのセットされているビットに対応するビットを同時にクリアすることと、を含む。
さらに別の態様において、本発明は、プロセッサを提供する。このプロセッサは、変換ルックアサイド・バッファ(TLB)及びマッピング・モジュールを備える。TLBは、複数のエントリを含み、複数のエントリの各エントリは、アドレス変換及び有効ビット・ベクトルを保持するよう構成され、有効ビット・ベクトルの各ビットは、それぞれのアドレス変換コンテキストについて、セットされている場合にはアドレス変換が有効であり、クリアされている場合にはアドレス変換が無効であることを示す。TLBはまた、複数のエントリの有効ビット・ベクトルのビットに対応するビットを有する無効化ビット・ベクトルを含み、無効化ビット・ベクトルのセットされているビットは、複数のエントリの各エントリの有効ビット・ベクトルの対応するビットを同時にクリアすることを示す。マッピング・モジュールは、無効化ビット・ベクトルを生成する。
プロセッサを示すブロック図である。 図1のプロセッサの一部をより詳細に示すブロック図である。 TLB内のエントリを示すブロック図である。 TLBのエントリにデータを投入する図1のプロセッサの動作を示すフローチャートである。 探索時にヒットが生じたかどうかを判定するためのTLB内のロジックを示すブロック図である。 図2のTLBの図3のエントリのLVALビット・ベクトルのビットを無効化するために使用されるロジックを示すブロック図である。 図1のプロセッサの制御レジスタを示すブロック図である。 図7の制御レジスタの様々なビットのセットに応答するマッピング・モジュールの動作を示すフローチャートである。 図2のローカル・コンテキスト・テーブルをより詳細に示すブロック図である。 図2のグローバル・コンテキスト・テーブルをより詳細に示すブロック図である。 複数のプロセス・コンテキスト識別子をサポートするプロセッサのアーキテクチャ機能を無効にする命令を実行する図1のプロセッサの動作を示すフローチャートである。 現在のアドレス変換コンテキストを変更する命令を実行する図1のプロセッサの動作を示すフローチャートである。 図12、図19、及び図21のブロック1206、ブロック1918、及びブロック2106においてそれぞれ呼び出されるMOV_CR3()ルーチンを実行する図1のプロセッサの動作を示すフローチャートである。 図13、図16、及び図17のブロック1308、ブロック1606、及びブロック1722においてそれぞれ呼び出されるALLOCATE_LOCAL_CONTEXT()ルーチンを実行する図1のプロセッサの動作を示すフローチャートである。 ハイパーバイザからゲストへの遷移が生じたときの図1のプロセッサの動作を示すフローチャートである。 MOVTOCR3NOVPIDルーチンを実行する図1のプロセッサの動作を示すフローチャートである。 MOVTOCR3VPIDルーチンを実行する図1のプロセッサの動作を示すフローチャートである。 図17のブロック1712において呼び出されるALLOCATE_GLOBAL_CONTEXT()ルーチンを実行する図1のプロセッサの動作を示すフローチャートである。 ゲストからハイパーバイザへの遷移が生じたときの図1のプロセッサの動作を示すフローチャートである。 システム管理モード(SMM)への遷移が生じたときの図1のプロセッサの動作を示すフローチャートである。 SMMから出る遷移が生じたときの図1のプロセッサの動作を示すフローチャートである。 プロセス・コンテキスト識別子に関連付けられているTLBアドレス変換を無効化する命令を実行するプロセッサの動作を示すフローチャートである。 仮想プロセッサ識別子に関連付けられているTLBアドレス変換を無効化する命令を実行するプロセッサの動作を示すフローチャートである。 仮想プロセッサ識別子に関連付けられているTLBアドレス変換を無効化する命令を実行するプロセッサの動作を示すフローチャートである。 拡張ページ・テーブル・ポインタに関連付けられているTLBアドレス変換を無効化する命令を実行するプロセッサの動作を示すフローチャートである。
用語解説
「アドレス変換コンテキスト」とは、第1のメモリ・アドレス空間から第2のメモリ・アドレス空間へのメモリ・アドレスの変換を可能にする情報のセットである。x86 ISAにおけるアドレス変換コンテキストの一例は、CR3レジスタ(及び他の制御レジスタ、たとえば、CR0及びCR4並びに関連するモデル固有レジスタ(MSR))、ページ・テーブル、ページ・ディレクトリ、ページ・ディレクトリ・ポインタ・テーブル、PML4テーブル、拡張ページ・テーブル・ポインタ(EPTP)、及び/又は線形アドレスから物理メモリ・アドレスへの変換を可能にする拡張ページ・テーブル(EPT)に含まれる情報のセットであり得る。x86 ISAの場合、変換は、プロセッサ内のハードウェアにより実行される。しかしながら、他のISA(たとえば、MIPS、SPARC)では、オペレーティング・システムが、変換を実行し得る。ARM ISAにおけるアドレス変換コンテキストの別の例は、変換テーブル・ベース・レジスタ(TTBR)(及び他の制御レジスタ、たとえば、変換制御レジスタ(TCR)、システム制御レジスタ(SCTLR)、及びHyp構成レジスタ(HCR))、及び/又は変換テーブルに含まれる情報のセットであり得る。
「アドレス変換」とは、メモリ・アドレスのペアであって、ペアの第1のものが変換されるアドレス(変換前のアドレス)であり、ペアの第2のものが変換されたアドレス(変換後のアドレス)である。
「ローカル・アドレス変換」とは、変換されるアドレス(変換前のアドレス)を変換されたアドレス(変換後のアドレス)に変換するために1つのアドレス変換コンテキストが使用されるアドレス変換である。
「グローバル・アドレス変換」とは、変換されるアドレス(変換前のアドレス)を変換されたアドレス(変換後のアドレス)に変換するために複数のアドレス変換コンテキストが使用されるアドレス変換である。
「ローカル・メモリ・ページ」又は「ローカル・ページ」とは、ローカル・アドレス変換を有するメモリ・ページである。
「グローバル・メモリ・ページ」又は「グローバル・ページ」とは、グローバル・アドレス変換を有するメモリ・ページである。
様々な周知の命令セット・アーキテクチャ(ISA)は、TLBの効率を向上させるよう設計された機能を含む。たとえば、x86 ISAは、PCID、VPID、及びEPTPに対するサポートを含む。x86 ISAはまた、所与のPCID、VPID、及び/又はEPTPに関連付けられているTLBエントリを無効化するようプロセッサに指示する命令を含む。関連付けられているTLBエントリを1つずつ無効化するプロセッサ実装は、特にTLBが比較的大きく、多くのエントリが無効化される必要がある場合、命令を実行するのに比較的長い時間を要することがある。有利なことに、無効化を必要とするTLBのエントリの同時無効化をサポートする実施形態について、本明細書で説明する。
さらに、プロセッサのISAによりサポートされているアドレス変換コンテキスト空間全体に必要とされる情報を記憶するために多数のビットを各TLBエントリ内に含めることを回避するために、大きい空間がかなり小さい非アーキテクチャ空間にマッピングされる実施形態について説明し、これは、有利なことに、TLBエントリがはるかに少ないビットを含むことを可能にする。しかしながら、これは、新しいアドレス変換コンテキストがより小さい非アーキテクチャ空間にマッピングされる必要がある場合に小さい非アーキテクチャ空間からアンマッピングされなければならないアドレス変換コンテキストに関連付けられているTLBエントリの無効化を必要とする。有利なことに、プロセッサがアンマッピングされるアドレス変換コンテキストに関連付けられているすべてのTLBエントリを同時に無効化することを可能にする実施形態について、本明細書で説明する。有利なことに、実施形態は、ローカル・アドレス変換及びグローバル・アドレス変換の性質、並びに2つのタイプのTLBエントリを無効化することに対するサポートの効率を考慮する。
次に図1を参照すると、プロセッサ100を示すブロック図が図示されている。プロセッサ100は、命令キャッシュ102、マイクロコード106を含む命令変換器104、実行ユニット112、アーキテクチャ・レジスタ114、メモリ・サブシステム122、キャッシュ・メモリ階層118、及びバス・インタフェース・ユニット116を備える。他の機能ユニット(図示せず)は、とりわけ、仮想アドレスから物理アドレスへのアドレス変換を生成するために変換テーブル・ウォークを実行するテーブル・ウォーク・エンジン、分岐予測器、リオーダ・ユニット、リオーダ・バッファ、予約ステーション、命令スケジューラ、及びデータ・プリフェッチ・ユニットを含み得る。一実施形態において、マイクロプロセッサ100は、命令がプログラム順序から外れた実行のために発行され得るアウト・オブ・オーダ実行マイクロアーキテクチャを有する。一実施形態において、マイクロプロセッサ100は、1クロックサイクル当たり複数の命令を実行ユニット112に発行して実行させることができるスーパースカラ・マイクロアーキテクチャを有する。一実施形態において、マイクロプロセッサ100は、x86命令セット・アーキテクチャ(ISA)に実質的に準拠するが、他のISAも企図されている。
命令キャッシュ102は、バス・インタフェース・ユニット116が通信するシステム・メモリからフェッチされたアーキテクチャ命令をキャッシュする。好ましくは、図2のTLB206などのTLBは、命令に対するアドレス変換をキャッシュする命令キャッシュ102に関連付けられる。一実施形態において、命令変換器104は、命令キャッシュ102からフェッチされたアーキテクチャ命令を、マイクロプロセッサ100のマイクロアーキテクチャのマイクロ命令セットのマイクロ命令に変換する。実行ユニット112は、マイクロ命令を実行する。アーキテクチャ命令が変換されるマイクロ命令は、アーキテクチャ命令を実装する。
実行ユニット112は、アーキテクチャ・レジスタ114(又はおそらくはリオーダ・バッファ若しくは転送バス)からソース・オペランドを受け取る。オペランドは、メモリからメモリ・サブシステム122を介してレジスタ114にロードされる。メモリ・サブシステム122は、キャッシュ・メモリ階層118(たとえば、レベル1データ・キャッシュ、レベル2キャッシュ、レベル3キャッシュ)にデータを書き込み、キャッシュ・メモリ階層118からデータを読み出す。好ましくは、各キャッシュ・メモリは、図2のTLB206などの、関連付けられているTLBを有する。キャッシュ階層118の最終レベル・キャッシュにキャッシュ・ミスが生じた場合、データ・キャッシュ・ライン又は命令キャッシュ・ラインが、バス・インタフェース・ユニット116からリクエストされ、これは、システム・メモリからキャッシュ・ラインをフェッチする。
また、図4を参照して以下でより詳細に説明するように、メモリ・サブシステム122(たとえば、テーブル・ウォーク・エンジン)は、システム・メモリ内の変換テーブル(たとえば、x86 ISAではページング構造と呼ばれる)にアクセスして、ページ・テーブル・ウォークを実行し、図2のTLB206などの、プロセッサ100のTLBにその後ロードされる、仮想アドレスから物理アドレスへのアドレス変換を生成する。変換テーブルは、ページをマッピングするテーブル(たとえば、x86 ISAページ・テーブル)、又は変換テーブル階層における他の変換テーブルを参照するテーブル(たとえば、x86 ISAページ・ディレクトリ、ページ・ディレクトリ・ポインタ・テーブル、PML4テーブル)を含み得る。変換テーブルはまた、仮想化された物理アドレス(たとえば、x86 ISAでは、仮想化された物理アドレスはゲスト物理アドレスと呼ばれ、変換テーブルは拡張ページ・テーブル(EPT)と呼ばれる)を真の物理アドレス(たとえば、x86 ISAでは、ホスト物理アドレスと呼ばれる)にマッピングするテーブルを含み得る。
好ましくは、プロセッサ100は、マイクロコード106又はマイクロコード・ルーチンを記憶するよう構成されたマイクロコード・メモリと、マイクロコード・メモリからマイクロコードの命令をフェッチするためのマイクロシーケンサと、を含むマイクロコード・ユニットを備える。一実施形態においては、マイクロコード命令は、マイクロ命令であり、一実施形態においては、マイクロコード命令は、マイクロ命令に変換される。マイクロコード106は、特に複雑なアーキテクチャ命令など、アーキテクチャ命令のうちのいくつかを実装する。一実施形態において、図11のMOV CR4命令、図12のMOV CR3命令、図15のVMLAUNCH/VMRESUME命令、図21のRSM命令、図22のINVPCID命令、図23のINVVPID命令、及び図24のINVEPT命令は、それぞれ、マイクロコード106で実装される。さらに、マイクロコード106は、プロセッサ100の他の機能を実行する。一実施形態において、マイクロコード106は、以下でより詳細に説明する、図19及び図20のVMイグジット及びSMIをそれぞれ処理する。
次に図2を参照すると、図1のプロセッサ100の一部をより詳細に示すブロック図が図示されている。プロセッサ100は、変換ルックアサイド・バッファ(TLB)206と、TLB206に結合されているマッピング・モジュール204と、TLB206及びマッピング・モジュール204に結合されているメモリ・サブシステム122と、マッピング・モジュール204に結合されているローカル・コンテキスト・テーブル212と、マッピング・モジュール204に結合されているグローバル・コンテキスト・テーブル214と、を備える。マッピング・モジュール204は、マイクロコード、ハードウェア状態機械、又はこれらの組合せを含む。マッピング・モジュール204は、プロセス・コンテキスト識別子(PCID)252と、仮想プロセッサ識別子(VPID)254と、拡張ページ・テーブル・ポインタ(EPTP)256と、を受け取る。マッピング・モジュール204は、現在のアドレス変換コンテキストを変更する命令及び/又はアドレス変換コンテキストを無効化する命令など、様々なイベントに応答して、PCID252と、VPID254と、EPTP256とを、受け取る。これらのうちのいくつかについては以下で説明する。PCID252と、VPID254と、EPTP256と、を受け取ったことに応答して、マッピング・モジュール204は、有利なことに、無効化ローカル(INV_LOCAL)ビット・ベクトル232及び/又は無効化グローバル(INV_GLOBAL)ビット・ベクトル234をそれぞれ生成することにより、TLB206内の複数のローカル・アドレス変換及び/又は複数のグローバル・アドレス変換を同時に無効化することができる。この動作については、たとえば、図6〜図8を参照して以下でさらに説明し、その使用については、たとえば、図11、図13〜14、図16、図18〜20、及び図22〜24を参照して以下で説明する。
さらに、PCID252と、VPID254と、EPTP256と、を受け取ったことに応答して、マッピング・モジュール204は、現在のローカル・コンテキスト識別子(CUR_LID)242及び/又は現在のグローバル・コンテキスト識別子(CUR_GID)244を更新することができる。CUR_LID242及びCUR_GID244は、現在のアドレス変換コンテキストを識別する。詳細には、CUR_LID242は、現在のアドレス変換コンテキストのローカル・メモリ・ページを識別し、CUR_GID244は、現在のアドレス変換コンテキストのグローバル・メモリ・ページを識別する。これらについては以下でより詳細に説明する。好ましくは、CUR_LID242は、符号化値であり、デコーダ262は、CUR_LID242を復号して、探索ローカル有効(LOOKUP_LVAL)復号1ホット・ビット・ベクトル272(すなわち、1つのビットがセットされ、他のビットはクリアされる)をTLB206に提供し、CUR_GID244は、符号化値であり、デコーダ264は、CUR_GID244を復号して、探索グローバル有効(LOOKUP_GVAL)復号1ホット・ビット・ベクトル274をTLB206に提供する。CUR_LID242及びCUR_GID244を表すための他の実施形態も企図される。たとえば、これらはそれ自体、復号された形態で記憶され、デコーダ262/264を必要とすることなくTLB206に直接提供されてもよい。
メモリ・サブシステム122が、TLB206内のメモリ・ページの仮想アドレスの探索を実行することを望むときに、メモリ・サブシステム122は、探索アドレス(LOOKUP_ADDR)276をTLB206に提供する。LOOKUP_LVAL272及びLOOKUP_GVAL274も、TLB206に提供され、探索に含まれる。TLB206は、ヒットが生じたかどうかを、ヒット・インジケータ224を介して示し、ヒットが生じた場合には、変換されたアドレス(TRANSLATED_ADDR)226をメモリ・サブシステム122に提供する。この動作については、図4を参照して以下でより詳細に説明する。
次に図3を参照すると、TLB206内のエントリ300を示すブロック図が図示されている。TLB206の各エントリ300は、ローカル有効ビット・ベクトル(LVAL)302と、グローバル有効ビット・ベクトル(GVAL)304と、仮想ページ・アドレス(VPADDR)306と、物理ページ・アドレス(PPADDR)308と、を含む。一実施形態において、LVAL302は、4ビットを含み、GVAL304は、4ビットを含む。LVAL302、GVAL304、及びVPADDR306は集合的に、エントリ300のタグと呼ばれる。VPADDR306及びPPADDR308は集合的に、エントリ300のアドレス変換と呼ばれる。図示されていないが、好ましくは、TLBエントリ300はまた、ページに関連付けられるパーミッションを指定するパーミッション・ビットも含む。
一実施形態において、マッピング・モジュール204は、(1)すべてのLIDが、一意的なVPID:EPTP:PCIDの組合せ(拡張ページ・テーブル機能が有効にされる)、VPID:PCIDの組合せ(拡張ページ・テーブル機能が無効にされる)、又はPCID(仮想プロセッサ識別子機能が無効にされる)からマッピングされること、(2)すべてのGIDが、一意的なVPID:EPTPの組合せ(拡張ページ・テーブル機能が有効にされる)、又はVPID(拡張ページ・テーブル機能が無効にされる)からマッピングされること、(3)TLB206のエントリ300が有効なグローバル・アドレス変換である(たとえば、GVAL304がゼロでない)場合、これは、有効なローカル・アドレス変換ではない(LVAL302がゼロである)こと、逆に、(4)TLB206のエントリ300が有効なローカル・アドレス変換である(たとえば、LVAL302がゼロでない)場合、これは、有効なグローバル・アドレス変換ではない(GVAL304がゼロである)ことを保証する。上記保証のいくつかの利点は、マッピング・モジュール204が、(1)TLB206のすべてのグローバル・アドレス変換を同時に無効化すること、及び(2)TLB206のすべてのローカル・アドレス変換を同時に無効化することができる点である。さらに、マッピング・モジュール204は、LIDが一意的なPCIDからマッピングされることを保証しない。すなわち、同じPCID値が、複数の仮想プロセッサにより指定され、したがって、異なるLIDにマッピングされる可能性がある。同様に、マッピング・モジュール204は、複数のLIDを所与のGIDに関連付けることができる。しかしながら、この逆は真ではない、すなわち、マッピング・モジュール204は、複数のGIDを所与のLIDに関連付けることをしない。しかしながら、プロセッサ100の動作のある時点において、すべてのLIDは、一意的なGIDに対応する可能性もある。たとえば、一実施形態では、GIDの数及びLIDの数が等しく(Nで表される)、その時点では、各々単一のPCIDを指定しているN個の仮想プロセッサが存在する。
次に図4を参照すると、TLB206のエントリ300にデータを投入する図1のプロセッサ100の動作を示すフローチャートが図示されている。フローは、ブロック402で始まる。
ブロック402において、メモリ・サブシステム122は、TLB206内のLOOKUP_ADDR276のミスを検出し、テーブル・ウォークを実行して、アドレス変換を生成する。すなわち、メモリ・サブシステム122は、現在のアドレス変換コンテキストを使用して、ミスしているLOOKUP_ADDR276を物理アドレスに変換する。メモリ・サブシステム122は、テーブル・ウォークを実行するテーブル・ウォーク・エンジン(図示せず)を有することができる。テーブル・ウォークは、レガシ・ページング構造(たとえば、x86 ISAページ・ディスクリプタ・ベース・アドレス、ページ・ディスクリプタ・テーブル、及びページ・テーブル・エントリ)、及びプロセッサ100の仮想マシン機能に関連付けられている拡張ページ・テーブル(たとえば、x86 ISA仮想マシン・エクステンション(VMX)拡張ページ・テーブル・ポインタ(EPTP)及び拡張ページ・テーブル(EPT))を使用する部分を含み得る。フローは、ブロック404に進む。
ブロック404において、メモリ・サブシステム122は、TLB206内の置換するエントリ300を選択する。一実施形態において、TLB206は、セット・アソシアティブ・キャッシュであり、TLB206の各セットは、最長時間未使用(LRU)情報又は疑似LRU情報などの置換情報を含み、メモリ・サブシステム122は、置換のため、置換情報により示されるインデックス付けされたセットのエントリ300を選択する。フローは、判定ブロック406に進む。
判定ブロック406において、メモリ・サブシステム122は、アドレス変換が、グローバル変換であるか、ローカル変換であるかを判定する。好ましくは、メモリ・サブシステム122は、ブロック402においてテーブル・ウォークを実行するときに、現在のアドレス変換コンテキスト内の情報に基づいてこの判定を行う。グローバルである場合、フローはブロック412に進み、ローカルである場合、フローはブロック408に進む。
ブロック408において、メモリ・サブシステム122は、ブロック404において選択されたTLB206のエントリ300に、0のGVAL304(アドレス変換がローカル・アドレス変換であるので)と、LOOKUP_LVAL272(CUR_LID242の一表現である)に等しいLVAL302と、ミスしているLOOKUP_ADDR276に等しいVPADDR306と、変換されたアドレス、すなわち、ブロック402においてテーブル・ウォークにより生成された物理アドレス、に等しいPPADDR308と、を投入する。フローは、ブロック408で終了する。
ブロック412において、メモリ・サブシステム122は、ブロック404において選択されたTLB206のエントリ300に、LOOKUP_GVAL274(CUR_GID244の一表現である)に等しいGVAL304と、0のLVAL302(アドレス変換がグローバル・アドレス変換であるので)と、ミスしているLOOKUP_ADDR276に等しいVPADDR306と、変換されたアドレス、すなわち、ブロック402においてテーブル・ウォークにより生成された物理アドレス、に等しいPPADDR308と、を投入する。フローは、ブロック412で終了する。
次に図5を参照すると、探索時にヒット224が生じたかどうかを判定するためのTLB206内のロジック500を示すブロック図が図示されている。図5に示されるロジック500(OR関数534を除く)は、ヒット524がエントリ300に関して生成されたかどうかを判定するために、TLB206の単一のエントリ300に対応する。しかしながら、フル・アソシアティブの実施形態については、ロジック500は、すべてのエントリ300に対してTLB206内に存在するが、簡潔且つ明瞭にするために図示されておらず、セット・アソシアティブの実施形態については、ロジック500は、方式(way)ごとに存在することを理解すべきである。TLB206のエントリ300のすべてのエントリのヒット・インジケータ524は、OR関数534によりブールOR演算され、図1のTLB206のヒット・インジケータ224が生成される。図5及び他の図に示される様々なブール関数は、合成され得るか、あるいはカスタム設計され得るブール・ゲート(たとえば、ANDゲート、ORゲート)に対応するものであってよいが、ロジック500は、図示されているブール関数を実行することが知られている他のハードウェア要素、たとえば、ワイヤードORを含んでもよく、静的ロジック又は動的ロジックを含む様々なロジック・タイプにより実装されてもよいことを理解すべきである。有利なことに、説明している実施形態は、基礎となるプロセス技術又はロジック・タイプに関係なく、TLB206のローカル・アドレス変換及び/又はグローバル・アドレス変換の同時無効化を可能にする。
ロジック500は、エントリ300のLVAL302とLOOKUP_LVAL272とを比較するための第1の比較関数522を含み、第1の比較関数522の出力が、ブールOR関数528への2つの入力のうちの第1の入力として提供される。ロジック500はまた、エントリ300のGVAL304とLOOKUP_GVAL274とを比較するための第2の比較関数524も含み、第2の比較関数の出力が、ブールOR関数528への2つの入力のうちの第2の入力として提供される。ブールOR関数528の出力は、ブールAND関数532への2つの入力のうちの第1の入力として提供される。ロジック500は、エントリ300のVPADDR306とLOOKUP_ADDR276とを比較するための第3の比較関数526を含み、第3の比較関数526の出力が、ブールAND関数532への2つの入力のうちの第2の入力として提供される。ブールAND関数532の出力は、ヒット・インジケータ524であり、ヒット・インジケータ524は、LOOKUP_LVAL272がLVAL302に合致し、LOOKUP_GVAL274がGVAL304に合致し、LOOKUP_ADDR276がVPADDR306に合致した場合には真となり、そうでない場合には偽となる。
図5から気付くように、TLB206内の各ローカル・アドレス変換は、そのローカル・コンテキスト識別子の一表現であるそれぞれのLVAL302により識別され、各グローバル・アドレス変換は、そのグローバル・コンテキスト識別子の一表現であるそれぞれのGVAL304により識別される。LOOKUP_LVAL272及びLOOKUP_GVAL274は、TLB 206の探索に含まれる。しかしながら、LOOKUP_ADDR276とVPADDR306との合致とともに、ヒットが生じるためには、LOOKUP_LVAL272がLVAL302に合致するか、あるいはLOOKUP_GVAL274がGVAL304に合致するかのいずれか一方のみが必要であり、両方ではない、すなわち、タグ全体ではない。したがって、図4及び図5を参照して説明している動作から気付くように、TLB206からのアドレス変換を使用するために、VPADDR306からPPADDR308を変換するために使用されるアドレス変換コンテキストは、CUR_LID242に関連付けられているアドレス変換コンテキスト又はCUR_GID244に関連付けられている複数のアドレス変換コンテキストのうちの1つでなければならない。
次に図6を参照すると、図2のTLB206の図3のエントリ300のLVALビット・ベクトル302のビットを無効化するために使用されるロジック600を示すブロック図が図示されている。図6は、LVALビット・ベクトル302の単一のビットを示している。ビットに対する記憶域は、フリップフロップ、メモリ・アレイ・ビット・セル、又は他のビット記憶デバイスであってよい。ブール反転(NOT)関数604は、LVALビット・ベクトル302のビットに対応するINV_LOCALビット・ベクトル232のビットを受け取る。たとえば、INV_LOCALビット・ベクトル232のビット[2]が、LVALビット・ベクトル302のビット[2]のために、反転関数604により受け取られる。反転関数604の出力は、ブールAND関数606への2つの入力のうちの第1の入力に提供される。ブールAND関数606の第2の入力は、LVALビット・ベクトル302の現在値を受け取る。ブールAND関数606の出力は、LVALビット・ベクトル302の新しい値としてクロックインされる。このようにして、マッピング・モジュール204は、INV_LOCALビット・ベクトル232の対応するビットをセットすることにより、LVALビット・ベクトル302の任意のビットをクリアすることができる。
図6は、単一のビットのためのロジック600を示しているが、ロジック600は、TLB206の各エントリ300に対するLVALビット・ベクトル302の各ビットについてTLB206内に複製される。有利なことに、INV_LOCALビット・ベクトル232のビットをセットすることにより、マッピング・モジュール204は、TLB206のすべてのエントリ300について、LVALビット・ベクトル302の対応するビットをクリアする。LVAL302の各ビット位置は、それぞれのアドレス変換コンテキストに関するすべてのローカル・アドレス変換に対する有効ビットであるので、無効化ロジック600は、マッピング・モジュール204が、それぞれのアドレス変換コンテキストについて、TLB206内のすべてのローカル・アドレス変換を同時に無効化することを可能にする。これは、それぞれのアドレス変換コンテキストについて、TLB206内のローカル・アドレス変換を順次無効化するよりも高速であるので有利である。実際、TLB206のサイズが増加するにつれ(たとえば、大きい最終レベルのTLB206に関して)、短縮される時間は、より著しいものとなり得る。
さらに、TLB206は、TLB206の各エントリ300に対するGVALビット・ベクトル304の各ビットについて類似のロジック600を含むが、このロジック600は、INV_LOCALビット・ベクトル232ではなく、INV_GLOBALビット・ベクトル234の対応するビットを受け取る。したがって、有利なことに、INV_GLOBALビット・ベクトル234のビットをセットすることにより、マッピング・モジュール204は、TLB206のすべてのエントリ300について、GVALビット・ベクトル304の対応するビットをクリアする。GVAL304の各ビット位置は、それぞれのアドレス変換コンテキストに関するすべてのグローバル・アドレス変換に対する有効ビットであるので、無効化ロジック600は、マッピング・モジュール204が、それぞれのアドレス変換コンテキストについて、TLB206内のすべてのグローバル・アドレス変換を同時に無効化することと、上述したローカル・アドレス変換の無効化に類似する性能上のメリットを評価することと、を可能にする。
図示されていないが、ロジック600は、ビットをセット又はクリアするための、LVAL/GVALビット・ベクトル302/304の各ビットのための他の機能を含む。たとえば、メモリ・サブシステム122は、ビットを、図4のブロック408及びブロック412における動作により必要とされるようないずれかの2値状態に書き込むことができる。さらに、メモリ・サブシステム122は、たとえば、図22及び図23のブロック2214又はブロック2308における動作によりそれぞれ必要とされるような、TLB206の特定のセット及び方式のLVALビット302をクリアすることができる。好ましくは、複数の入力のうちの1つでブールAND関数606の出力を受け取り、他の入力で、上述したが図示されてはいない他のロジックの出力を受け取る多重化機能が、ビット302の直前に存在する。
必要に応じて、LVAL302及びGVAL304のビットは、INV_LOCALビット・ベクトル232及びINV_GLOBALビット・ベクトル234内のビットをそれぞれセットすることにより同時にクリアされてもよいことに留意すべきである。たとえば、メモリ・サブシステム122は、ブロック1828、ブロック2318、ブロック2326、ブロック2408、及びブロック2414においてこれを行うことができる。最後に、必要に応じて、LVAL302及び/又はGVAL304のすべてのビットは、INV_LOCALビット・ベクトル232及び/又はINV_GLOBALビット・ベクトル234内のすべてのビットをそれぞれセットすることにより同時にクリアされてもよい。たとえば、メモリ・サブシステム122は、ブロック1602、ブロック1914、及びブロック2004においてこれを行うことができる。
次に図7を参照すると、図1のプロセッサ100の制御レジスタ700を示すブロック図が図示されている。一実施形態において、制御レジスタ700は、TLB206のアドレス変換を無効化するために、マイクロコード106により書き込まれ得る。制御レジスタ700は、INV_LOCALビット702と、INV_GLOBALビット704と、INV_ALL_LOCALSビット706と、INV_ALL_GLOBALSビット708と、INV_ALLビット712と、を含む。次に、これらのビットのセットに応答するマッピング・モジュール204の動作について、図8を参照して説明する。
次に図8を参照すると、図7の制御レジスタ700の様々なビットのセットに応答するマッピング・モジュール204の動作を示すフローチャートが図示されている。フローは、ブロック802で始まる。
ブロック802において、制御レジスタ700の1以上のビットが、たとえば、マイクロコード106によりセットされる。フローは、判定ブロック804に進む。
判定ブロック804において、INV_LOCALビット702がセットされている場合、フローはブロック806に進み、INV_LOCALビット702がセットされていない場合、フローは判定ブロック814に進む。
ブロック806において、マッピング・モジュール204は、CUR_LID242を復号して1ホット・ビット・ベクトル値を生成し、INV_LOCALビット・ベクトル232上にその値をアサートすると、これは、TLB206の各エントリ300について、INV_LOCALビット・ベクトル232内の1つのセットされているビットに対応するLVAL302のビットをクリアし、これは、現在のアドレス変換コンテキストを使用して変換されたTLB206内のすべてのローカル・アドレス変換を無効化する。フローは、判定ブロック814に進む。
判定ブロック814において、INV_GLOBALビット704がセットされている場合、フローはブロック816に進み、INV_GLOBALビット704がセットされていない場合、フローは判定ブロック824に進む。
ブロック816において、マッピング・モジュール204は、CUR_GID244を復号して1ホット・ビット・ベクトル値を生成し、INV_GLOBALビット・ベクトル234上にその値をアサートすると、これは、TLB206の各エントリ300について、INV_GLOBALビット・ベクトル234内の1つのセットされているビットに対応するGVAL304のビットをクリアし、これは、現在のアドレス変換コンテキストを使用して変換されたTLB206内のすべてのグローバル・アドレス変換を無効化する。フローは、判定ブロック824に進む。
判定ブロック824において、INV_ALL_LOCALSビット706がセットされている場合、フローはブロック826に進み、INV_ALL_LOCALSビット706がセットされていない場合、フローは判定ブロック834に進む。
ブロック826において、マッピング・モジュール204は、INV_LOCALビット・ベクトル232のすべてのビットをアサートすると、これは、TLB206の各エントリ300について、LVAL302のすべてのビットをクリアし、これは、アドレス変換コンテキストを使用して変換されたTLB206内のすべてのローカル・アドレス変換を無効化する。フローは、判定ブロック834に進む。
判定ブロック834において、INV_ALL_GLOBALSビット708がセットされている場合、フローはブロック836に進み、INV_ALL_GLOBALSビット708がセットされていない場合、フローは判定ブロック844に進む。
ブロック836において、マッピング・モジュール204は、INV_GLOBALビット・ベクトル234のすべてのビットをアサートすると、これは、TLB206の各エントリ300について、GVAL304のすべてのビットをクリアし、これは、アドレス変換コンテキストを使用して変換されたTLB206内のすべてのグローバル・アドレス変換を無効化する。フローは、判定ブロック844に進む。
判定ブロック844において、INV_ALLビット712がセットされている場合、フローはブロック846に進み、INV_ALLビット712がセットされていない場合、フローは終了する。
ブロック846において、マッピング・モジュール204は、INV_LOCALビット・ベクトル232のすべてのビットと、INV_GLOBALビット・ベクトル234のすべてのビットと、をアサートすると、これは、TLB206の各エントリ300について、LVAL302のすべてのビットと、GVAL304のすべてのビットと、をクリアし、これは、アドレス変換コンテキストを使用して変換されたTLB206内のすべてのアドレス変換を無効化する。フローは、ブロック846で終了する。
次に図9を参照すると、図2のローカル・コンテキスト・テーブル212をより詳細に示すブロック図が図示されている。各エントリは、有効ビット906と、グローバル・コンテキスト識別子(GID)904と、ローカル・コンテキスト識別子(LID)902と、プロセス・コンテキスト識別子(PCID)908と、アドレス変換コンテキスト・ベース・アドレス(ATCB)912と、を含む。ローカル・コンテキスト・テーブル212内の各エントリについて、GID904は、合致するGID1004値を有する、図10のグローバル・コンテキスト・テーブル214内の関連付けられているエントリを示す。マッピング・モジュール204は、ローカル・コンテキスト・テーブル212内の各有効なエントリが一意的なLID902値を有することと、グローバル・コンテキスト・テーブル214内の各有効なエントリが一意的なGID1004値を有することと、を保証する。例示的な一例として、x86 ISAの実施形態において、PCID908は、x86プロセス・コンテキスト識別子(PCID)に対応し、ATCB912は、CR3レジスタのビット[63:12]に対応し、これは、ページ・ディレクトリ・ベース・アドレスを指定するものである。一実施形態において、CR3のビット[63:36]は使用されない。図9の実施形態において、ローカル・コンテキスト・テーブル212は、4つのエントリを含み、各LID902は、2ビット符号化値であり、これは、サイズ4の非アーキテクチャ・ローカル・コンテキスト識別子空間を意味する。一実施形態において、これはまた、多くても4つのアドレス変換コンテキストに対するアドレス変換が、任意の所与の時点においてTLB206内で有効であり得ることも意味する。しかしながら、異なる数のエントリ及びLID902のビットを用いる他の実施形態も企図される。一実施形態において、マッピング・モジュール204は、有効ビット906をクリアし、一意的な値をローカル・コンテキスト・テーブル212のエントリの各々のLID902に割り当て、残りのフィールドをゼロで埋めることにより、ローカル・コンテキスト・テーブル212を初期化する。一実施形態において、マッピング・モジュール204は、ローカル・コンテキスト・テーブル212のエントリを、一番上のエントリが最も直近に使用されたエントリであり、一番下のエントリが最長時間未使用エントリであるスタックとして保持する。(一番下の)最長時間未使用エントリの割り当てが行われる。マッピング・モジュール204は、エントリを一番上のエントリにし、他のエントリを必要に応じて下に移動させることにより、エントリを最も直近に使用されたエントリにする。ローカル・コンテキスト・テーブル212及びそのフィールドの操作については、残りの図を参照して以下でより詳細に説明する。
次に図10を参照すると、図2のグローバル・コンテキスト・テーブル214をより詳細に示すブロック図が図示されている。各エントリは、有効ビット1006と、グローバル・コンテキスト識別子(GID)1004と、仮想プロセッサ識別子(VPID)1008と、拡張ページ・テーブル・ポインタ(EPTP)1012と、を含む。例示的な一例として、x86 ISAの実施形態において、VPID1008は、x86 VMX仮想プロセッサ識別子(VPID)に対応し、EPTP1012は、仮想マシン制御構造(VMCS)において指定されるVMX EPTPに対応する。図10の実施形態において、グローバル・コンテキスト・テーブル214は、4つのエントリを含み、各GID1004は、2ビット符号化値であり、これは、サイズ4の非アーキテクチャ・グローバル・コンテキスト識別子空間を意味する。しかしながら、異なる数のエントリ及びGID904のビットを用いる他の実施形態も企図される。一実施形態において、マッピング・モジュール204は、有効ビット1006をクリアし、一意的な値をグローバル・コンテキスト・テーブル214のエントリの各々のGID1004に割り当て、残りのフィールドをゼロで埋めることにより、グローバル・コンテキスト・テーブル214を初期化する。一実施形態において、マッピング・モジュール204は、ローカル・コンテキスト・テーブル212に関して上述した方法と同様に、グローバル・コンテキスト・テーブル214のエントリをスタックとして保持する。グローバル・コンテキスト・テーブル214及びそのフィールドの操作については、残りの図を参照して以下でより詳細に説明する。本明細書の説明から気付くように、LIDとGIDとの関連付けは、プロセッサ100の動作の進行とともに変化し得る。たとえば、図9及び図10の実施形態において、所与のGIDは、1個から4個の関連付けられているLIDを有することができる。しかしながら、複数のLIDがGIDに関連付けられている場合、これは、可能な現在有効なGIDの数を減らす。たとえば、2つのGIDのみが、各々2つの関連付けられているLIDを有する場合に有効であり得る。
x86 ISAの実施形態において、非VMX線形アドレス空間の場合、VPID及びEPTPは、ゼロに設定され、VMXホストの場合、VPID及びEPTPは、ゼロに設定される。したがって、x86 ISAの一実施形態では、マッピング・モジュール204は、グローバル・コンテキスト・テーブル214の1つのエントリ(トップ・エントリ、エントリ0)を特別なものとして扱う。なぜならば、このエントリは、常に有効であり(たとえば、Vビット1006は、セットされた値に初期化され、常にセットされたままである)、決して置換されず(たとえば、決して最長時間未使用エントリにならず)、VPID1008及びEPTP1012がゼロに設定されたまま常に保たれるからである。有利なことに、これは、多数のアドレス変換コンテキストがマッピングされる限られた数のLIDの結果として実行されなければならないTLB206のアドレス変換無効化の量を減らす。一実施形態において、ローカル・コンテキスト・テーブル212及びグローバル・コンテキスト・テーブル214は、プロセッサ100のプライベート・メモリ(PRAM)内に保持される。
次に図11を参照すると、複数のプロセス・コンテキスト識別子をサポートするプロセッサ100のアーキテクチャ機能を無効にする命令を実行する図1のプロセッサ100の動作を示すフローチャートが図示されている。フローは、ブロック1102で始まる。
ブロック1102において、プロセッサ100は、複数のプロセス・コンテキスト識別子をサポートするプロセッサ100のアーキテクチャ機能を無効にする命令に遭遇する。例示的な一例として、x86 ISAの実施形態において、この命令は、PCIDEビットをクリアするMOV CR4命令であり、これは、x86 PCID機能を無効にする。フローは、ブロック1104に進む。
ブロック1104において、ブロック1102において遭遇した命令に応答して、マッピング・モジュール204は、ゼロでないPCID値を有するすべての有効なエントリを見つけるために、ローカル・コンテキスト・テーブル212を探索する。フローは、ブロック1106に進む。
ブロック1106において、ブロック1104において見つけられたローカル・コンテキスト・テーブル212の各エントリについて、マッピング・モジュール204は、(1)ローカル・コンテキスト・テーブル212の合致するエントリのLID902に関連付けられているTLB206内のローカル・アドレス変換を無効化し(たとえば、LID902値を復号し、INV_LOCALビット・ベクトル232上に復号された値をアサートすることにより)、(2)ローカル・コンテキスト・テーブル212の合致するエントリを無効化する。この実施形態は、ゼロのPCIDが、常に有効な値である、すなわち、PCID機能が無効にされているときにPCIDがゼロであることを想定している。これは、ゼロのPCIDに関連付けられているTLB206のアドレス変換をそのままにする。フローは、ブロック1106で終了する。
次に図12を参照すると、現在のアドレス変換コンテキストを変更する命令を実行する図1のプロセッサ100の動作を示すフローチャートが図示されている。フローは、ブロック1202で始まる。
ブロック1202において、プロセッサ100は、現在のアドレス変換コンテキストを変更する命令に遭遇する。例示的な一例として、x86 ISAの実施形態において、この命令は、MOV CR3命令である。フローは、ブロック1204に進む。
ブロック1204において、ブロック1202において遭遇した命令に応答して、所定の条件が存在する場合に、プロセッサ100は、ハイパーバイザにイグジットする。一実施形態において、この命令は、マイクロコード106で実装される。例示的な一例として、x86 ISAの実施形態において、ハイパーバイザは、VMXホストであり、条件は、VMXゲストが、MOV CR3命令を実行して、エラーがあったこと、又は、VMXコントロール(control)が、MOV CR3命令に応答してVMイグジットを示すことである。フローは、ブロック1206に進む。
ブロック1206において、本明細書においてMOV_CR3()と呼ばれるルーチンが呼び出される。MOV_CR3()については図13を参照して説明する。ブロック1206における動作は、ルーチンの呼び出しと呼ばれるが(本明細書で説明する他の動作も同様)、図11〜図25で説明する機能は、ハードウェア、マイクロコード、又はハードウェアとマイクロコードとの組合せで実装されてもよい。フローは、ブロック1206で終了する。
次に図13を参照すると、図12のブロック1206(並びに、図19及び図21それぞれのブロック1918及びブロック2106)において呼び出されるMOV_CR3()ルーチンを実行する図1のプロセッサ100の動作を示すフローチャートが図示されている。フローは、ブロック1304で始まる。
ブロック1304において、マッピング・モジュール204は、MOV_CR3()ルーチン1300への入力として提供されたPCID値に合致する有効なエントリを見つけるために、ローカル・コンテキスト・テーブル212を探索する。ルーチンがブロック1206から呼び出される場合、PCID入力値は、ブロック1202の命令により指定された値である。ルーチンがブロック1918又はブロック2106から呼び出される場合、PCID入力値は、ハイパーバイザのPCID値であり、x86 VMXの実施形態の場合にはゼロである。フローは、判定ブロック1306に進む。
判定ブロック1306において、マッピング・モジュール204は、ブロック1304において合致するエントリがあったかどうかを判定する。合致するエントリがあった場合、フローはブロック1322に進み、合致するエントリがなかった場合、フローはブロック1308に進む。
ブロック1308において、ALLOCATE_LOCAL_CONTEXT()ルーチンが呼び出される。ALLOCATE_LOCAL_CONTEXT()ルーチンについては図14を参照して説明する。フローは、ブロック1312に進む。
ブロック1312において、アーキテクチャCR3レジスタが、MOV_CR3()ルーチンに渡されたCR3レジスタ入力値を用いてロードされる。ルーチンがブロック1206から呼び出される場合、CR3入力値は、ブロック1202の命令により指定された値である。ルーチンがブロック1918又はブロック2106から呼び出される場合、CR3入力値は、ハイパーバイザのCR3値である。x86でない実施形態の場合、CR3レジスタに類似するアーキテクチャ・レジスタがロードされる。フローは、ブロック1314に進む。
ブロック1314において、マッピング・モジュール204は、CUR_LID242及びCUR_GID244を、それぞれ、ブロック1308において割り当てられたローカル・コンテキスト・テーブル212のエントリのLID902及びGID904で更新する。次いで、ブロック1316において、フローは、MOV_CR3()ルーチンが呼び出された場所に戻る。
ブロック1322において、マッピング・モジュール204は、ローカル・コンテキスト・テーブル212の合致するエントリ(すなわち、ブロック1304における探索により見つけられたエントリ)を、最も直近に使用されたエントリにする。フローは、ブロック1324に進む。
ブロック1324において、マッピング・モジュール204は、CUR_LID242及びCUR_GID244を、それぞれ、ローカル・コンテキスト・テーブル212の合致するエントリのLID902及びGID904で更新する。フローは、判定ブロック1326に進む。
判定ブロック1326において、マッピング・モジュール204は、VMエントリ又はVMイグジットに応答してMOV_CR3()ルーチンが呼び出されたかどうかを判定する。VMエントリ又はVMイグジットに応答してMOV_CR3()ルーチンが呼び出された場合、フローは判定ブロック1328に進み、VMエントリ又はVMイグジットに応答してMOV_CR3()ルーチンが呼び出されたのではない場合、フローはブロック1334に進む。
判定ブロック1328において、マッピング・モジュール204は、VPID機能がオンであるかどうかを判定する。VPID機能がオンである場合、ブロック1322において、フローは、MOV_CR3()ルーチンが呼び出された場所に戻り、VPID機能がオンでない場合、フローはブロック1334に進む。
ブロック1334において、CR3レジスタのビット63の値がゼロである場合、マッピング・モジュール204は、CUR_LID242値に関連付けられているTLB206内のローカル・アドレス変換を無効化する(たとえば、CUR_LID242値を復号し、INV_LOCALビット・ベクトル232上に復号された値をアサートすることにより)。すなわち、マッピング・モジュール204は、現在のアドレス変換コンテキストに関するローカル・アドレス変換を無効化する。次いで、ブロック1336において、フローは、MOV_CR3()ルーチンが呼び出された場所に戻る。
次に図14を参照すると、図13のブロック1308(並びに、図16及び図17それぞれのブロック1606及びブロック1722)において呼び出されるALLOCATE_LOCAL_CONTEXT()ルーチンを実行する図1のプロセッサ100の動作を示すフローチャートが図示されている。フローは、ブロック1404で始まる。
ブロック1404において、マッピング・モジュール204は、ローカル・コンテキスト・テーブル212内の割り当てる最長時間未使用エントリを決定する。最長時間未使用以外の代替アルゴリズムを使用する他の実施形態も企図される。フローは、ブロック1406に進む。
ブロック1406において、マッピング・モジュール204は、ブロック1404において割り当てられたローカル・コンテキスト・テーブル212のエントリのLID902に関連付けられているTLB206内のローカル・アドレス変換を無効化する。すなわち、マッピング・モジュール204は、除去されようとしているアドレス変換コンテキストに関するローカル・アドレス変換を無効化する。フローは、ブロック1408に進む。
ブロック1408において、マッピング・モジュール204は、ローカル・コンテキスト・テーブル212のエントリに対する新しい値を計算する。詳細には、マッピング・モジュール204は、LID902フィールド内に値を保持し(すなわち、新しいエントリが、置換されるエントリのLID902値を継承し)、GID904フィールドに、CUR_GID244値を投入し(これは、ローカル・コンテキスト・テーブル212のエントリを、グローバル・コンテキスト・テーブル214の適切なエントリにリンクさせる)、PCID908フィールド及びATCB912フィールドに、ALLOCATE_LOCAL_CONTEXT()ルーチンに渡されたそれぞれの値を投入する。ルーチンが、RSMに応答して、MOVTOCR3VPID、MOVTOCR3NOVPID、又はMOV_CR3()から呼び出される場合(図21参照)、PCID値及びACTB値は、SMIにより割り込まれたプロセスのものとなる。ルーチンが、VMエントリに応答して、MOVTOCR3VPID又はMOVTOCR3NOVPIDから呼び出される場合(図15参照)、PCID値及びACTB値は、制御が移される先の仮想プロセッサのVMCSから取得された値となる。ルーチンが、VMイグジットに応答して、MOV_CR3()から呼び出される場合(図19参照)、PCID値及びACTB値は、ハイパーバイザのものとなる。ルーチンが、MOV CR3命令に応答して、MOV_CR3()から呼び出される場合(図12参照)、PCID値及びACTB値は、その命令により指定されたものとなる。次いで、マッピング・モジュール204は、計算された新しい値を用いて、ブロック1404において割り当てられたエントリをロードし、割り当てられたエントリを、最も直近に使用されたエントリにする。次いで、ブロック1412において、フローは、ALLOCATE_LOCAL_CONTEXT()ルーチンが呼び出された場所に戻る。
次に図15を参照すると、ハイパーバイザからゲストへの遷移が生じたときの図1のプロセッサ100の動作を示すフローチャートが図示されている。フローは、ブロック1502で始まる。
ブロック1502において、ハイパーバイザからゲストへの遷移が生じる。例示的な一例として、x86 ISAの実施形態において、この遷移は、VMエントリと呼ばれ、VMX VMLAUNCH命令又はVMRESUME命令の実行に応答して生じる。フローは、ブロック1504に進む。
ブロック1504において、マッピング・モジュール204は、VMCSから、新しいPCIDE値と、新しいPCID値を含むCR3レジスタの新しい値と、を取得する。フローは、判定ブロック1506に進む。
判定ブロック1506において、マッピング・モジュール204は、VPID機能がオンであるかどうかを判定する。VPID機能がオンである場合、フローはブロック1508に進み、VPID機能がオンでない場合、フローはブロック1512に進む。
ブロック1508において、フローは、ルーチンMOVTOCR3VPIDに移る。ルーチンMOVTOCR3VPIDについては図17を参照して説明する。
ブロック1512において、フローは、ルーチンMOVTOCR3NOVPIDに移る。ルーチンMOVTOCR3NOVPIDについては図16を参照して説明する。
次に図16を参照すると、MOVTOCR3NOVPIDルーチン1600を実行する図1のプロセッサ100の動作を示すフローチャートが図示されている。フローは、ブロック1602で始まる。
ブロック1602において、マッピング・モジュール204は、TLB206のすべてのアドレス変換を無効化する。フローは、ブロック1604に進む。
ブロック1604において、マッピング・モジュール204は、ローカル・コンテキスト・テーブル212及びグローバル・コンテキスト・テーブル214を初期化する。さらに、マッピング・モジュール204は、ALLOCATE_LOCAL_CONTEXT()ルーチンに渡すために、グローバル・コンテキスト識別子の一時的値をゼロに設定する(図14参照)。フローは、ブロック1606に進む。
ブロック1606において、マッピング・モジュール204は、ALLOCATE_LOCAL_CONTEXT()ルーチンを呼び出す。フローは、ブロック1608に進む。
ブロック1608において、アーキテクチャCR3レジスタが、SMIにより割り込まれたプロセスの値(RSMの場合)又は制御が移される先の仮想プロセッサのVMCSから取得された値(VMエントリの場合)となる、ALLOCATE_LOCAL_CONTEXT()ルーチンに渡されたCR3レジスタ入力値を用いてロードされる。フローは、ブロック1612に進む。
ブロック1612において、マッピング・モジュール204は、CUR_LID242及びCUR_GID244を、ゼロ値で更新する。フローは、ブロック1612で終了する。
次に図17を参照すると、MOVTOCR3VPIDルーチン1700を実行する図1のプロセッサ100の動作を示すフローチャートが図示されている。フローは、ブロック1712で始まる。
ブロック1712において、マッピング・モジュール204は、ALLOCATE_GLOBAL_CONTEXT()ルーチンを呼び出す。ALLOCATE_GLOBAL_CONTEXT()ルーチンについては図18を参照して説明する。フローは、ブロック1714に進む。
ブロック1714において、PCIDEビットがゼロである場合、マッピング・モジュール204は、新しいPCID値をゼロに設定する。フローは、ブロック1716に進む。
ブロック1716において、マッピング・モジュール204は、ブロック1712における呼び出しを介して取得されたグローバル・コンテキスト識別子と、ブロック1504において取得された新しいPCID値又は制御が図21のブロック2116から再開されるVMXゲストのVMCSから取得された新しいPCID値のいずれかである新しいPCID値と、に合致する有効なエントリを見つけるために、ローカル・コンテキスト・テーブル212を探索する。フローは、判定ブロック1718に進む。
判定ブロック1718において、ブロック1716における探索により合致するエントリが見つけられた場合、フローはブロック1724に進み、合致するエントリが見つけられなかった場合、フローはブロック1722に進む。
ブロック1722において、マッピング・モジュール204は、ALLOCATE_LOCAL_CONTEXT()ルーチンを呼び出す(図14参照)。フローは、ブロック1726に進む。
ブロック1724において、マッピング・モジュール204は、ローカル・コンテキスト・テーブル212の合致するエントリを、最も直近に使用されたエントリにする。マッピング・モジュール204はまた、新しいローカル・コンテキスト識別子を、ローカル・コンテキスト・テーブル212の合致するエントリのLID902に等しくなるようにもする。フローは、ブロック1726に進む。
ブロック1726において、アーキテクチャCR3レジスタが、ブロック1504において取得された新しいCR3値又は制御が図21のブロック2116から再開されるVMXゲストのVMCSから取得された新しいCR3値のいずれかであるCR3レジスタ値を用いてロードされる。フローは、ブロック1728に進む。
ブロック1728において、マッピング・モジュール204は、CUR_GID244を、ブロック1712において取得された新しいグローバル・コンテキスト識別子で更新し、CUR_LID242を、ブロック1722又はブロック1724のいずれかで取得された新しいローカル・コンテキスト識別子で更新する。フローは、ブロック1728で終了する。
次に図18を参照すると、図17のブロック1712において呼び出されるALLOCATE_GLOBAL_CONTEXT()ルーチン1800を実行する図1のプロセッサ100の動作を示すフローチャートが図示されている。フローは、ブロック1802で始まる。
ブロック1802において、マッピング・モジュール204は、制御が与えられているVMXゲストのVMCSから、VPID及びEPTPを取得する。フローは、ブロック1804に進む。
ブロック1804において、EPT機能がオフである場合、マッピング・モジュール204は、EPTPをゼロに設定する。フローは、ブロック1806に進む。
ブロック1806において、マッピング・モジュール204は、VPID及びEPTPに合致する有効なエントリを見つけるために、グローバル・コンテキスト・テーブル214を探索する。一番上のエントリが特別なものである図10を参照して上述した実施形態においては、ここでは特別でないエントリのみが探索される。なぜならば、特別なエントリは、再割り当てすることができず、特別なエントリは、VMXゲストに関連付けられないからである。フローは、判定ブロック1808に進む。
判定ブロック1808において、マッピング・モジュール204は、ブロック1806における探索により合致するエントリが見つけられたかどうかを判定する。合致するエントリが見つけられた場合、フローはブロック1812に進み、合致するエントリが見つけられなかった場合、フローはブロック1822に進む。
ブロック1812において、マッピング・モジュール204は、グローバル・コンテキスト・テーブル214の合致するエントリを、最も直近に使用されたエントリにする。フローは、ブロック1814に進む。
ブロック1814において、マッピング・モジュール204は、CUR_GID244を、グローバル・コンテキスト・テーブル214の合致するエントリのGID1004値で更新する。ブロック1816において、フローは、ALLOCATE_GLOBAL_CONTEXT()ルーチン1800を呼び出したルーチンに戻る。
ブロック1822において、マッピング・モジュール204は、グローバル・コンテキスト・テーブル214の最長時間未使用エントリを決定する。この最長時間未使用エントリは、実際除去されることになる。次いで、マッピング・モジュール204は、変数EVICTED_GIDに、除去されるエントリのGID1004の値を割り当てる。フローは、ブロック1824に進む。
ブロック1824において、マッピング・モジュール204は、グローバル・コンテキスト・テーブル214のエントリに対する新しい値を計算する。詳細には、マッピング・モジュール204は、GIDフィールド1004にEVICTED_GIDを投入し、VPID1008フィールド及びEPTP1012フィールドに、ALLOCATE_GLOBAL_CONTEXT()ルーチンに渡されたそれぞれの値を投入する。これらの値は、SMIにより割り込まれたプロセスの値(RSMの場合)又は制御が移される先の仮想プロセッサのVMCSから取得された値(VMエントリの場合)である。次いで、マッピング・モジュール204は、計算された新しい値を用いて、ブロック1822において割り当てられたエントリをロードする。次いで、マッピング・モジュール204は、割り当てられエントリを、最も直近に使用されたエントリにする。フローは、ブロック1826に進む。
ブロック1826において、マッピング・モジュール204は、EVICTED_GIDに合致する有効なエントリを見つけるために、ローカル・コンテキスト・テーブル212を探索する。フローは、ブロック1828に進む。
ブロック1828において、ブロック1826において見つけられたローカル・コンテキスト・テーブル212の各エントリについて、マッピング・モジュール204は、(1)合致するエントリのLID902に関連付けられているTLB206内のローカル・アドレス変換を無効化し、(2)EVICTED_GIDに関連付けられているTLB206内のグローバル・アドレス変換を無効化し(たとえば、EVICTED_GID値を復号し、INV_GLOBALビット・ベクトル234上に復号された値をアサートすることにより)、(3)ローカル・コンテキスト・テーブル212の合致するエントリを無効化する。次いで、ブロック1832において、フローは、ALLOCATE_GLOBAL_CONTEXT()ルーチンが呼び出された場所に戻る。
次に図19を参照すると、ゲストからハイパーバイザへの遷移が生じたときの図1のプロセッサ100の動作を示すフロー図が図示されている。フローは、ブロック1902で始まる。
ブロック1902において、ゲストからハイパーバイザへの遷移が生じる。例示的な一例として、x86 ISAの実施形態において、この遷移は、VMイグジットと呼ばれ、所定の命令の実行(所定の命令のうちのいくつかについては、VMイグジットは、制御フィールド内の設定に依存する)及びVMX非ルート動作における所定のイベント(例外、割り込み、タスク切り替え、及びプリエンプション・タイマ・ティック(preemption timer tick)など)に応答して生じる。フローは、ブロック1904に進む。
ブロック1904において、マッピング・モジュール204は、VMCSから、ハイパーバイザのPCID値である新しいPCID値を含むCR3レジスタの新しい値を取得する。フローは、ブロック1906に進む。
ブロック1906において、マッピング・モジュール204は、EPT機能を無効にし(ハイパーバイザにより使用されないので)、一時的グローバル・コンテキスト識別子変数をゼロに設定し、VPIDをゼロに設定する。これらの値は、ハイパーバイザに関連付けられている値である。フローは、ブロック1908に進む。
ブロック1908において、アーキテクチャCR3レジスタが、ブロック1904において取得されたCR3レジスタ値を用いてロードされる。フローは、判定ブロック1912に進む。
判定ブロック1912において、マッピング・モジュール204は、VPID機能がオンであるかどうかを判定する。VPID機能がオンである場合、フローはブロック1918に進み、VPID機能がオンでない場合、フローはブロック1914に進む。
ブロック1914において、マッピング・モジュール204は、TLB206のすべてのアドレス変換を無効化する。フローは、ブロック1916に進む。
ブロック1916において、マッピング・モジュール204は、ローカル・コンテキスト・テーブル212を初期化する。フローは、ブロック1918に進む。
ブロック1918において、MOV_CR3()ルーチンが呼び出される(図13参照)。フローは、ブロック1918で終了する。
次に図20を参照すると、システム管理モード(SMM)への遷移が生じたときの図1のプロセッサ100の動作を示すフローチャートが図示されている。フローは、ブロック2002で始まる。
ブロック2002において、SMMへの遷移が生じる。これは、SMMエントリとも呼ばれる。x86 ISAの実施形態において、たとえば、この遷移は、システム管理割り込み(SMI)を介して生じる。フローは、ブロック2004に進む。
ブロック2004において、マッピング・モジュール204は、TLB206のすべてのアドレス変換を無効化する。フローは、ブロック2006に進む。
ブロック2006において、マッピング・モジュール204は、ローカル・コンテキスト・テーブル212及びグローバル・コンテキスト・テーブル214を初期化する。フローは、ブロック2008に進む。
ブロック2008において、マッピング・モジュール204は、CUR_LID242及びCUR_GID244をゼロ値で更新する。フローは、ブロック2008で終了する。
次に図21を参照すると、SMMから出る遷移が生じたときの図1のプロセッサ100の動作を示すフローチャートが図示されている。フローは、ブロック2102で始まる。
ブロック2102において、SMMから出る遷移が生じる。x86 ISAの実施形態において、たとえば、この遷移は、SMMからの戻り(RSM)命令の実行を介して生じる。フローは、判定ブロック2104に進む。
判定ブロック2104において、マッピング・モジュール204は、VMX機能がオフにされているかどうかを判定する。VMX機能がオフである場合、フローはブロック2106に進み、VMX機能がオフでない場合、フローは判定ブロック2112に進む。
ブロック2106において、MOV_CR3()ルーチンが呼び出される(図13参照)。フローは、ブロック2108に進む。
ブロック2108において、MOVTOCR3NOVPIDへのジャンプが行われる(図16参照)。フローは、ブロック2108で終了する。
判定ブロック2112において、マッピング・モジュール204は、SMMからの戻りがハイパーバイザへの戻りであるかどうかを判定する。ハイパーバイザは、x86 ISAの実施形態の場合にはVMXホストである。ハイパーバイザへの戻りである場合、フローはブロック2106に進み、ハイパーバイザへの戻りでない場合、フローは判定ブロック2114に進む。
判定ブロック2114において、マッピング・モジュール204は、VPID機能がオンであるかどうかを判定する。VPID機能がオンである場合、フローはブロック2116に進み、VPID機能がオンでない場合、フローはブロック2108に進む。
ブロック2116において、MOVTOCR3VPIDへのジャンプが行われる(図17参照)。フローは、ブロック2116で終了する。
次に図22を参照すると、プロセス・コンテキスト識別子に関連付けられているTLB206のアドレス変換を無効化する命令を実行するプロセッサ100の動作を示すフローチャートが図示されている。フローは、ブロック2202で始まる。
ブロック2202において、プロセッサ100は、プロセス・コンテキスト識別子に関連付けられているTLB206のアドレス変換を無効化する命令に遭遇する。x86 ISAの実施形態において、たとえば、この命令は、INVPCID命令である。フローは、ブロック2204に進む。
ブロック2204において、マッピング・モジュール204は、現在のVPIDに合致する有効なエントリを見つけるために、グローバル・コンテキスト・テーブル214を探索する。合致するエントリが見つけられなかった場合、フローは終了する。合致するエントリが見つけられた場合、マッピング・モジュール204は、一時変数THIS_GIDに、グローバル・コンテキスト・テーブル214の合致するエントリのGID1004を割り当てる。フローは、判定ブロック2206に進む。
判定ブロック2206において、マッピング・モジュール204は、命令タイプ(たとえば、x86 INVPCID命令のレジスタ・オペランド)が0であるかどうかを判定する。命令タイプが0である場合、フローはブロック2208に進み、命令タイプが0でない場合、フローは判定ブロック2216に進む。
ブロック2208において、マッピング・モジュール204は、INVPCID命令において指定されているPCID及びTHIS_GIDに合致する有効なエントリを見つけるために、ローカル・コンテキスト・テーブル212を探索する。フローは、判定ブロック2212に進む。
判定ブロック2212において、マッピング・モジュール204は、ブロック2208において合致するエントリが見つけられたかどうかを判定する。合致するエントリが見つけられた場合、フローはブロック2214に進み、合致するエントリが見つけられなかった場合、フローは終了する。
ブロック2214において、マッピング・モジュール204は、一時変数THIS_LIDに、ブロック2208における探索により見つけられたローカル・コンテキスト・テーブル212の合致するエントリのLID902を割り当てる。次いで、マッピング・モジュール204は、THIS_LIDに関連付けられており、INVPCID命令において指定されている仮想アドレス(x86 ISAの実施形態では、線形アドレス)を有するTLB206内のローカル・アドレス変換を無効化する。TLB206はまた、読み出し又は書き込みのためのTLB206の行を選択するインデックス入力を含む。一実施形態において、TLB206は、複数の方式を有するセット・アソシアティブ・キャッシュであり、さらなる入力が、読み出される方式又は書き込まれる方式を指定する。一実施形態において、インデックス/方式入力を使用して、無効化されるべき特定のエントリ300を指定することができる。一実施形態において、メモリ・サブシステム122が、仮想アドレスを指定するマイクロコード無効化ページ・マイクロ命令を実行するときに、メモリ・サブシステム122は、仮想アドレスに合致するエントリを見つけるために、TLB206を探索し、仮想アドレスにヒットするインデックス/方式を受け取る。次いで、メモリ・サブシステムは、ヒットしたインデックス/方式でエントリを無効化する。さらに、メモリ・サブシステム122は、たとえば、最長時間未使用エントリのインデックス/方式を使用して、TLB206にエントリを割り当てる。フローは、ブロック2214で終了する。
判定ブロック2216において、マッピング・モジュール204は、命令タイプが1であるかどうかを判定する。命令タイプが1である場合、フローはブロック2218に進み、命令タイプが1でない場合、フローは判定ブロック2226に進む。
ブロック2218において、マッピング・モジュール204は、INVPCID命令において指定されているPCID及びTHIS_GIDに合致する有効なエントリを見つけるために、ローカル・コンテキスト・テーブル212を探索する。フローは、判定ブロック2222に進む。
判定ブロック2222において、マッピング・モジュール204は、ブロック2218において合致するエントリが見つけられたかどうかを判定する。合致するエントリが見つけられた場合、フローはブロック2224に進み、合致するエントリが見つけられなかった場合、フローは終了する。
ブロック2224において、マッピング・モジュール204は、一時変数THIS_LIDに、ブロック2218における探索により見つけられたローカル・コンテキスト・テーブル212の合致するエントリのLID902を割り当てる。次いで、マッピング・モジュール204は、THIS_LIDに関連付けられているTLB206内のローカル・アドレス変換を無効化する。フローは、ブロック2224で終了する。
判定ブロック2226において、マッピング・モジュール204は、命令タイプが2であるかどうかを判定する。命令タイプが2である場合、フローはブロック2228に進み、命令タイプが2でない場合、フローは判定ブロック2236に進む。
ブロック2228において、マッピング・モジュール204は、THIS_GIDに関連付けられているTLB206内のグローバル・アドレス変換を無効化する。フローは、ブロック2238に進む。
判定ブロック2236において、マッピング・モジュール204は、命令タイプが3であるかどうかを判定する。命令タイプが3である場合、フローはブロック2238に進み、命令タイプが3でない場合、フローはブロック2248に進む。
ブロック2238において、マッピング・モジュール204は、THIS_GIDに合致する有効なエントリを見つけるために、ローカル・コンテキスト・テーブル212を探索する。見つけられたローカル・コンテキスト・テーブル212の各合致するエントリについて、マッピング・モジュール204は、(1)一時変数THIS_LIDに、ローカル・コンテキスト・テーブル212の合致するエントリのLID902を割り当て、(2)THIS_LIDに関連付けられているTLB206内のローカル・アドレス変換を無効化する。フローは、ブロック2238で終了する。
ブロック2248において、マッピング・モジュール204は、プロセッサ100のフォールトを生成させる。x86 ISAの実施形態において、このフォールトは、たとえば、一般保護フォールトである。フローは、ブロック2248で終了する。
次に図23A及び図23B(集合的に図23)を参照すると、仮想プロセッサ識別子に関連付けられているTLB206のアドレス変換を無効化する命令を実行するプロセッサ100の動作を示すフローチャートが図示されている。フローは、ブロック2302で始まる。
ブロック2302において、プロセッサ100は、仮想プロセッサ識別子に関連付けられているTLB206のアドレス変換を無効化する命令に遭遇する。x86 ISAの実施形態において、たとえば、この命令は、INVVPID命令である。フローは、判定ブロック2304に進む。
判定ブロック2304において、マッピング・モジュール204は、命令タイプ(たとえば、x86 INVVPID命令のレジスタ・オペランド)が0であるかどうかを判定する。命令タイプが0である場合、フローはブロック2306に進み、命令タイプが0でない場合、フローは判定ブロック2314に進む。
ブロック2306において、マッピング・モジュール204は、現在のVPIDに合致する有効なエントリを見つけるために、グローバル・コンテキスト・テーブル214を探索する。合致するエントリが見つけられなかった場合、フローは終了する。合致するエントリが見つけられた場合、マッピング・モジュール204は、一時変数THIS_GIDに、グローバル・コンテキスト・テーブル214の合致するエントリのGID1004を割り当てる。フローは、ブロック2308に進む。
ブロック2308において、マッピング・モジュール204は、THIS_GIDに関連付けられているグローバル・アドレス変換を無効化する。マッピング・モジュール204はまた、THIS_GIDに合致する有効なエントリを見つけるために、ローカル・コンテキスト・テーブル212を探索する。見つけられたローカル・コンテキスト・テーブル212の各合致するエントリについて、マッピング・モジュール204は、(1)一時変数THIS_LIDに、ローカル・コンテキスト・テーブル212の合致するエントリのLID902を割り当て、(2)THIS_LIDに関連付けられており、INVPCID命令において指定されている仮想アドレス(x86 ISAの実施形態では、線形アドレス)を有するTLB206内のローカル・アドレス変換を無効化する。フローは、ブロック2308で終了する。
判定ブロック2314において、マッピング・モジュール204は、命令タイプが1であるかどうかを判定する。命令タイプが1である場合、フローはブロック2316に進み、命令タイプが1でない場合、フローは判定ブロック2324に進む。
ブロック2316において、マッピング・モジュール204は、現在のVPIDに合致する有効なエントリを見つけるために、グローバル・コンテキスト・テーブル214を探索する。合致するエントリが見つけられなかった場合、フローは終了する。合致するエントリが見つけられた場合、マッピング・モジュール204は、一時変数THIS_GIDに、グローバル・コンテキスト・テーブル214の合致するエントリのGID1004を割り当てる。フローは、ブロック2318に進む。
ブロック2318において、マッピング・モジュール204は、THIS_GIDに関連付けられているグローバル・アドレス変換を無効化する。マッピング・モジュール204はまた、THIS_GIDに合致する有効なエントリを見つけるために、ローカル・コンテキスト・テーブル212を探索する。見つけられたローカル・コンテキスト・テーブル212の各合致するエントリについて、マッピング・モジュール204は、(1)一時変数THIS_LIDに、ローカル・コンテキスト・テーブル212の合致するエントリのLID902を割り当て、(2)THIS_LIDに関連付けられているTLB206内のローカル・アドレス変換を無効化する。フローは、ブロック2318で終了する。
判定ブロック2324において、マッピング・モジュール204は、命令タイプが2であるかどうかを判定する。命令タイプが2である場合、フローはブロック2326に進み、命令タイプが2でない場合、フローは判定ブロック2334に進む。
ブロック2326において、マッピング・モジュール204は、すべてのゼロでないVPID値に合致する有効なエントリを見つけるために、グローバル・コンテキスト・テーブル214を探索する。合致するエントリが見つけられなかった場合、フローは終了する。合致するエントリが見つけられた場合、グローバル・コンテキスト・テーブル214の各合致するエントリについて、マッピング・モジュール204は、(1)一時変数THIS_GIDに、グローバル・コンテキスト・テーブル214の合致するエントリのGID1004を割り当て、(2)THIS_GIDに関連付けられているグローバル・アドレス変換を無効化し、(3)THIS_GIDに合致する有効なエントリを見つけるために、ローカル・コンテキスト・テーブル212を探索し、見つけられたローカル・コンテキスト・テーブル212の各合致するエントリについて、(A)一時変数THIS_LIDに、ローカル・コンテキスト・テーブル212の合致するエントリのLID902を割り当て、(B)THIS_LIDに関連付けられているTLB206内のローカル・アドレス変換を無効化する。フローは、ブロック2326で終了する。
判定ブロック2334において、マッピング・モジュール204は、命令タイプが3であるかどうかを判定する。命令タイプが3である場合、フローはブロック2336に進み、命令タイプが3でない場合、フローはブロック2342に進む。
ブロック2336において、マッピング・モジュール204は、現在のVPIDに合致する有効なエントリを見つけるために、グローバル・コンテキスト・テーブル214を探索する。合致するエントリが見つけられなかった場合、フローは終了する。合致するエントリが見つけられた場合、マッピング・モジュール204は、一時変数THIS_GIDに、グローバル・コンテキスト・テーブル214の合致するエントリのGID1004を割り当てる。フローは、ブロック2338に進む。
ブロック2338において、マッピング・モジュール204は、THIS_GIDに合致する有効なエントリを見つけるために、ローカル・コンテキスト・テーブル212を探索する。見つけられたローカル・コンテキスト・テーブル212の各合致するエントリについて、マッピング・モジュール204は、(1)一時変数THIS_LIDに、ローカル・コンテキスト・テーブル212の合致するエントリのLID902を割り当て、(2)THIS_LIDに関連付けられているTLB206内のローカル・アドレス変換を無効化する。フローは、ブロック2338で終了する。
ブロック2342において、マッピング・モジュール204は、プロセッサ100のフォールトを生成させる。x86 ISAの実施形態において、このフォールトは、たとえば、一般保護フォールトである。フローは、ブロック2342で終了する。
次に図24を参照すると、拡張ページ・テーブル・ポインタに関連付けられているTLB206のアドレス変換を無効化する命令を実行するプロセッサ100の動作を示すフローチャートが図示されている。フローは、ブロック2402で始まる。
ブロック2402において、プロセッサ100は、拡張ページ・テーブル・ポインタに関連付けられているTLB206のアドレス変換を無効化する命令に遭遇する。x86 ISAの実施形態において、たとえば、この命令は、INVEPT命令である。フローは、判定ブロック2404に進む。
判定ブロック2404において、マッピング・モジュール204は、命令タイプ(たとえば、x86 INVEPT命令のレジスタ・オペランド)が1であるかどうかを判定する。命令タイプが1である場合、フローはブロック2406に進み、命令タイプが1でない場合、フローは判定ブロック2412に進む。
ブロック2406において、マッピング・モジュール204は、INVEPT命令において指定されているEPTPに合致する有効なエントリを見つけるために、グローバル・コンテキスト・テーブル214を探索する。合致するエントリが見つけられなかった場合、フローは終了する。合致するエントリが見つけられた場合、マッピング・モジュール204は、一時変数THIS_GIDに、グローバル・コンテキスト・テーブル214の合致するエントリのGID1004を割り当てる。フローは、ブロック2408に進む。
ブロック2408において、マッピング・モジュール204は、THIS_GIDに関連付けられているグローバル・アドレス変換を無効化する。マッピング・モジュール204はまた、THIS_GIDに合致する有効なエントリを見つけるために、ローカル・コンテキスト・テーブル212を探索する。見つけられたローカル・コンテキスト・テーブル212の各合致するエントリについて、マッピング・モジュール204は、(1)一時変数THIS_LIDに、ローカル・コンテキスト・テーブル212の合致するエントリのLID902を割り当て、(2)THIS_LIDに関連付けられているTLB206内のローカル・アドレス変換を無効化する。フローは、ブロック2408で終了する。
判定ブロック2412において、マッピング・モジュール204は、命令タイプが2であるかどうかを判定する。命令タイプが2である場合、フローはブロック2414に進み、命令タイプが2でない場合、フローはブロック2442に進む。
ブロック2414において、マッピング・モジュール204は、すべてのゼロでないEPTP値に合致する有効なエントリを見つけるために、グローバル・コンテキスト・テーブル214を探索する。合致するエントリが見つけられなかった場合、フローは終了する。合致するエントリが見つけられた場合、グローバル・コンテキスト・テーブル214の各合致するエントリについて、マッピング・モジュール204は、(1)一時変数THIS_GIDに、グローバル・コンテキスト・テーブル214の合致するエントリのGID1004を割り当て、(2)THIS_GIDに関連付けられているグローバル・アドレス変換を無効化し、(3)THIS_GIDに合致する有効なエントリを見つけるために、ローカル・コンテキスト・テーブル212を探索し、見つけられたローカル・コンテキスト・テーブル212の各合致するエントリについて、(A)一時変数THIS_LIDに、ローカル・コンテキスト・テーブル212の合致するエントリのLID902を割り当て、(B)THIS_LIDに関連付けられているTLB206内のローカル・アドレス変換を無効化する。フローは、ブロック2414で終了する。
ブロック2442において、マッピング・モジュール204は、プロセッサ100のフォールトを生成させる。x86 ISAの実施形態において、このフォールトは、たとえば、一般保護フォールトである。フローは、ブロック2442で終了する。
ローカル・コンテキスト識別子空間(及びグローバル・コンテキスト識別子空間)のサイズが、予め定められたサイズ(たとえば、4)である実施形態について説明したが、ローカル・コンテキスト識別子空間(及びグローバル・コンテキスト識別子空間)のサイズが、性能、サイズ、及び電力消費量などの所望の設計目標に応じて異なる他の実施形態も企図される。さらに、単一のTLBに関して実施形態について説明したが、説明したメカニズムは、複数のTLBを有するプロセッサにおける各TLBに対して使用されてもよいことを理解すべきである。さらに、TLBに関して実施形態について説明したが、本明細書で説明したメカニズムは、たとえば、x86 ISAのPML4キャッシュ、PDPTEキャッシュ、及びPDEキャッシュといった、ページング構造キャッシュなどの他の変換キャッシュ構造において使用されてもよい。さらに、ビットが、セット若しくはクリア又は0若しくは1の特定の意味を有するように見える実施形態について説明したが、正論理及び負論理の実装が使用されてもよいことを理解すべきである。最後に、x86 ISAに関して様々な実施形態について説明したが、大きいアーキテクチャ・アドレス変換コンテキスト空間をより小さい非アーキテクチャ・アドレス変換コンテキスト空間にマッピングし、アドレス変換を同時に無効化するための本明細書で説明したメカニズムは、ARM ISA、MIPS ISA、又はSun ISAなどの他のISAにおいて使用されてもよい。
本明細書において本発明の様々な実施形態について説明したが、これらは、例としてのみ提示されており、限定を意図するものではないことを理解すべきである。本発明の範囲から逸脱することなく形態及び詳細の様々な変更が行われ得ることが、関連するコンピュータ分野の当業者には明らかであろう。たとえば、ソフトウェアは、たとえば、本明細書で説明した装置及び方法の機能、製造、モデリング、シミュレーション、記述、及び/又はテストを可能にすることができる。これは、一般的なプログラミング言語(たとえば、C、C++)、Verilogハードウェア記述言語(HDL)、VHDLなどを含むHDL、又は他の利用可能なプログラムを使用することにより実現することができる。そのようなソフトウェアは、磁気テープ、半導体、磁気ディスク、光ディスク(たとえば、CD−ROM、DVD−ROMなど)、ネットワーク通信媒体、有線通信媒体、無線通信媒体、又は他の通信媒体などの任意の既知のコンピュータ使用可能な媒体に配することができる。本明細書で説明した装置及び方法の実施形態は、マイクロプロセッサ・コアなどの半導体知的財産コアに含まれ(たとえば、HDLで具現化又は指定され)、集積回路の生産においてハードウェアに変換することができる。さらに、本明細書で説明した装置及び方法は、ハードウェアとソフトウェアとの組合せとして具現化することができる。したがって、本発明は、本明細書で説明した例示的な実施形態のいずれによっても限定されるべきでなく、請求項及びその均等物のみに従って定められるべきである。特に、本発明は、汎用コンピュータにおいて使用することができるマイクロプロセッサ・デバイス内に実装することができる。最後に、当業者は、請求項により定められる本発明の範囲から逸脱することなく、本発明の同じ目的を達成するために他の構造を設計又は修正する基礎として、開示したコンセプト及び特定の実施形態を容易に使用することができる、ということを理解すべきである。

Claims (20)

  1. アーキテクチャ仮想プロセッサ識別子を非アーキテクチャ・グローバル識別子にマッピングし、アーキテクチャ・プロセス・コンテキスト識別子を非アーキテクチャ・ローカル識別子にマッピングするマッピング・モジュールと、
    複数のアドレス変換を有する変換ルックアサイド・バッファ(TLB)であって、
    前記複数のアドレス変換の各アドレス変換について、
    前記アドレス変換がグローバル・アドレス変換である場合、前記アドレス変換は、前記マッピング・モジュールが前記アーキテクチャ仮想プロセッサ識別子のうちの1つのアーキテクチャ仮想プロセッサ識別子をマッピングした前記非アーキテクチャ・グローバル識別子のうちの1つの非アーキテクチャ・グローバル識別子の表現によりタグ付けされ、
    前記アドレス変換がローカル・アドレス変換である場合、前記アドレス変換は、前記マッピング・モジュールが前記アーキテクチャ・プロセス・コンテキスト識別子のうちの1つのアーキテクチャ・プロセス・コンテキスト識別子をマッピングした前記非アーキテクチャ・ローカル識別子のうちの1つの非アーキテクチャ・ローカル識別子の表現によりタグ付けされる、
    TLBと、
    を備えたプロセッサ。
  2. 当該プロセッサによりサポートされている前記アーキテクチャ・プロセス・コンテキスト識別子の空間は、当該プロセッサによりサポートされている前記非アーキテクチャ・ローカル識別子の空間よりも大きく、
    前記マッピング・モジュールは、前記非アーキテクチャ・ローカル識別子の前記表現によりタグ付けされている、前記TLBのすべてのアドレス変換を無効化することにより、非アーキテクチャ・ローカル識別子を再利用して、新しいアーキテクチャ・プロセス・コンテキスト識別子を前記非アーキテクチャ・ローカル識別子にマッピングする、請求項1に記載のプロセッサ。
  3. 当該プロセッサによりサポートされている前記アーキテクチャ仮想プロセッサ識別子の空間は、当該プロセッサによりサポートされている前記非アーキテクチャ・グローバル識別子の空間よりも大きく、
    前記マッピング・モジュールは、前記非アーキテクチャ・ローカル識別子の各々を、非アーキテクチャ・グローバル識別子に関連付け、
    前記マッピング・モジュールは、前記非アーキテクチャ・グローバル識別子の前記表現によりタグ付けされている、前記TLBのすべてのアドレス変換を無効化し、前記非アーキテクチャ・グローバル識別子に関連付けられている非アーキテクチャ・ローカル識別子の前記表現によりタグ付けされている、前記TLBのすべてのアドレス変換を無効化することにより、非アーキテクチャ・グローバル識別子を再利用して、新しいアーキテクチャ仮想プロセッサ識別子を前記非アーキテクチャ・グローバル識別子にマッピングする、請求項1に記載のプロセッサ。
  4. 前記アーキテクチャ仮想プロセッサ識別子は、x86命令セット・アーキテクチャ仮想プロセッサ識別子(VPID)である、請求項1に記載のプロセッサ。
  5. 前記アーキテクチャ・プロセス・コンテキスト識別子は、x86命令セット・アーキテクチャ・プロセス・コンテキスト識別子(PCID)である、請求項1に記載のプロセッサ。
  6. 前記TLBの前記グローバル・アドレス変換がタグ付けされている前記非アーキテクチャ・グローバル識別子の前記表現は、1ホット・ビット・ベクトルを含み、前記TLBの前記ローカル・アドレス変換がタグ付けされている前記非アーキテクチャ・ローカル識別子の前記表現は、1ホット・ビット・ベクトルを含む、請求項1に記載のプロセッサ。
  7. 複数の関連付けられているアーキテクチャ拡張ページ・テーブル・ポインタを有する仮想プロセッサ識別子について、前記マッピング・モジュールは、アーキテクチャ仮想プロセッサ識別子:アーキテクチャ拡張ページ・テーブル・ポインタのペアを前記非アーキテクチャ・グローバル識別子にマッピングする、請求項1に記載のプロセッサ。
  8. 前記非アーキテクチャ・グローバル識別子への前記アーキテクチャ仮想プロセッサ識別子のマッピングを保持するグローバル・コンテキスト・テーブルをさらに備えた、請求項1に記載のプロセッサ。
  9. 前記非アーキテクチャ・ローカル識別子への前記アーキテクチャ・プロセス・コンテキスト識別子のマッピングを保持するローカル・コンテキスト・テーブルをさらに備えた、請求項1に記載のプロセッサ。
  10. 前記マッピング・モジュールは、当該プロセッサのマイクロコードを含む、請求項1に記載のプロセッサ。
  11. 複数のアドレス変換を有する変換ルックアサイド・バッファ(TLB)を備えるプロセッサを動作させる方法であって、
    アーキテクチャ仮想プロセッサ識別子を非アーキテクチャ・グローバル識別子にマッピングし、アーキテクチャ・プロセス・コンテキスト識別子を非アーキテクチャ・ローカル識別子にマッピングするステップと、
    前記複数のアドレス変換の各アドレス変換について、
    前記アドレス変換がグローバル・アドレス変換である場合、前記アドレス変換を、マッピング・モジュールが前記アーキテクチャ仮想プロセッサ識別子のうちの1つのアーキテクチャ仮想プロセッサ識別子をマッピングした前記非アーキテクチャ・グローバル識別子のうちの1つの非アーキテクチャ・グローバル識別子の表現によりタグ付けするステップと、
    前記アドレス変換がローカル・アドレス変換である場合、前記アドレス変換を、前記マッピング・モジュールが前記アーキテクチャ・プロセス・コンテキスト識別子のうちの1つのアーキテクチャ・プロセス・コンテキスト識別子をマッピングした前記非アーキテクチャ・ローカル識別子のうちの1つの非アーキテクチャ・ローカル識別子の表現によりタグ付けするステップと、
    を含む方法。
  12. 前記プロセッサによりサポートされている前記アーキテクチャ・プロセス・コンテキスト識別子の空間は、前記プロセッサによりサポートされている前記非アーキテクチャ・ローカル識別子の空間よりも大きく、
    前記非アーキテクチャ・ローカル識別子の前記表現によりタグ付けされている、前記TLBのすべてのアドレス変換を無効化することにより、非アーキテクチャ・ローカル識別子を再利用して、新しいアーキテクチャ・プロセス・コンテキスト識別子を前記非アーキテクチャ・ローカル識別子にマッピングする、請求項11に記載の方法。
  13. 前記プロセッサによりサポートされている前記アーキテクチャ仮想プロセッサ識別子の空間は、前記プロセッサによりサポートされている前記非アーキテクチャ・グローバル識別子の空間よりも大きく、
    前記非アーキテクチャ・ローカル識別子の各々を非アーキテクチャ・グローバル識別子に関連付け、
    前記非アーキテクチャ・グローバル識別子の前記表現によりタグ付けされている、前記TLBのすべてのアドレス変換を無効化し、前記非アーキテクチャ・グローバル識別子に関連付けられている非アーキテクチャ・ローカル識別子の前記表現によりタグ付けされている、前記TLBのすべてのアドレス変換を無効化することにより、非アーキテクチャ・グローバル識別子を再利用して、新しいアーキテクチャ仮想プロセッサ識別子を前記非アーキテクチャ・グローバル識別子にマッピングする、請求項11に記載の方法。
  14. 前記アーキテクチャ仮想プロセッサ識別子は、x86命令セット・アーキテクチャ仮想プロセッサ識別子(VPID)である、請求項11に記載の方法。
  15. 前記アーキテクチャ・プロセス・コンテキスト識別子は、x86命令セット・アーキテクチャ・プロセス・コンテキスト識別子(PCID)である、請求項11に記載の方法。
  16. 前記TLBの前記グローバル・アドレス変換がタグ付けされている前記非アーキテクチャ・グローバル識別子の前記表現は、1ホット・ビット・ベクトルを含み、前記TLBの前記ローカル・アドレス変換がタグ付けされている前記非アーキテクチャ・ローカル識別子の前記表現は、1ホット・ビット・ベクトルを含む、請求項11に記載の方法。
  17. 複数の関連付けられているアーキテクチャ拡張ページ・テーブル・ポインタを有する仮想プロセッサ識別子について、アーキテクチャ仮想プロセッサ識別子を非アーキテクチャ・グローバル識別子に前記マッピングすることは、アーキテクチャ仮想プロセッサ識別子:アーキテクチャ拡張ページ・テーブル・ポインタのペアを前記非アーキテクチャ・グローバル識別子にマッピングすることを含む、請求項11に記載の方法。
  18. 前記マッピング及び前記タグ付けは、前記プロセッサのマイクロコードにより実行される、請求項11に記載の方法。
  19. コンピューティング・デバイスとともに使用するための少なくとも1つの非一時的なコンピュータ使用可能な媒体内に符号化されたコンピュータ・プログラム製品であって、
    プロセッサを指定するための、前記媒体内に具現化されたコンピュータ使用可能なプログラム・コードを含み、前記コンピュータ使用可能なプログラム・コードは、
    アーキテクチャ仮想プロセッサ識別子を非アーキテクチャ・グローバル識別子にマッピングし、アーキテクチャ・プロセス・コンテキスト識別子を非アーキテクチャ・ローカル識別子にマッピングするマッピング・モジュールを指定するための第1のプログラム・コードと、
    複数のアドレス変換を有する変換ルックアサイド・バッファ(TLB)を指定するための第2のプログラム・コードであって、前記複数のアドレス変換の各アドレス変換について、
    前記アドレス変換がグローバル・アドレス変換である場合、前記アドレス変換は、前記マッピング・モジュールが前記アーキテクチャ仮想プロセッサ識別子のうちの1つのアーキテクチャ仮想プロセッサ識別子をマッピングした前記非アーキテクチャ・グローバル識別子のうちの1つの非アーキテクチャ・グローバル識別子の表現によりタグ付けされ、
    前記アドレス変換がローカル・アドレス変換である場合、前記アドレス変換は、前記マッピング・モジュールが前記アーキテクチャ・プロセス・コンテキスト識別子のうちの1つのアーキテクチャ・プロセス・コンテキスト識別子をマッピングした前記非アーキテクチャ・ローカル識別子のうちの1つの非アーキテクチャ・ローカル識別子の表現によりタグ付けされる、
    第2のプログラム・コードと、を含む、
    コンピュータ・プログラム製品。
  20. 前記少なくとも1つの非一時的なコンピュータ使用可能な媒体は、ディスク、テープ、他の磁気記憶媒体、他の光記憶媒体、及び他の電子的記憶媒体からなる群から選択される、請求項19に記載のコンピュータ・プログラム製品。
JP2016535541A 2014-07-21 2014-11-26 多数の異なるアドレス空間をサポートするプロセッサにおける効率的なアドレス変換キャッシング Active JP6081672B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201462026830P 2014-07-21 2014-07-21
US62/026,830 2014-07-21
PCT/IB2014/003084 WO2016012830A1 (en) 2014-07-21 2014-11-26 Efficient address translation caching in processor that supports large number of different address spaces

Publications (2)

Publication Number Publication Date
JP2016527652A true JP2016527652A (ja) 2016-09-08
JP6081672B2 JP6081672B2 (ja) 2017-02-15

Family

ID=55162551

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016535541A Active JP6081672B2 (ja) 2014-07-21 2014-11-26 多数の異なるアドレス空間をサポートするプロセッサにおける効率的なアドレス変換キャッシング

Country Status (7)

Country Link
US (3) US9727480B2 (ja)
EP (2) EP2997478B1 (ja)
JP (1) JP6081672B2 (ja)
KR (2) KR101770495B1 (ja)
CN (3) CN105993005B (ja)
TW (3) TWI592867B (ja)
WO (3) WO2016012830A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2021533455A (ja) * 2018-07-31 2021-12-02 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドAdvanced Micro Devices Incorporated 仮想化用のgpuタスクコンテナとしてのvmid

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9727480B2 (en) 2014-07-21 2017-08-08 Via Alliance Semiconductor Co., Ltd. Efficient address translation caching in a processor that supports a large number of different address spaces
US9684606B2 (en) * 2014-11-14 2017-06-20 Cavium, Inc. Translation lookaside buffer invalidation suppression
US9697137B2 (en) 2014-11-14 2017-07-04 Cavium, Inc. Filtering translation lookaside buffer invalidations
US9672159B2 (en) * 2015-07-02 2017-06-06 Arm Limited Translation buffer unit management
US10509729B2 (en) * 2016-01-13 2019-12-17 Intel Corporation Address translation for scalable virtualization of input/output devices
US10042691B2 (en) * 2016-04-26 2018-08-07 International Business Machines Corporation Operation of a multi-slice processor implementing exception handling in a nested translation environment
DK3255550T3 (da) 2016-06-08 2019-07-15 Google Llc TLB shootdowns til lave omkostninger
US10540292B2 (en) 2016-06-08 2020-01-21 Google Llc TLB shootdowns for low overhead
US10108554B2 (en) * 2016-12-05 2018-10-23 Intel Corporation Apparatuses, methods, and systems to share translation lookaside buffer entries
WO2018107322A1 (en) * 2016-12-12 2018-06-21 Intel Corporation System and method to improve nested virtual machine monitor performance
US10725685B2 (en) 2017-01-19 2020-07-28 International Business Machines Corporation Load logical and shift guarded instruction
US10579377B2 (en) 2017-01-19 2020-03-03 International Business Machines Corporation Guarded storage event handling during transactional execution
US10496311B2 (en) 2017-01-19 2019-12-03 International Business Machines Corporation Run-time instrumentation of guarded storage event processing
US10452288B2 (en) 2017-01-19 2019-10-22 International Business Machines Corporation Identifying processor attributes based on detecting a guarded storage event
US10496292B2 (en) 2017-01-19 2019-12-03 International Business Machines Corporation Saving/restoring guarded storage controls in a virtualized environment
US10732858B2 (en) 2017-01-19 2020-08-04 International Business Machines Corporation Loading and storing controls regulating the operation of a guarded storage facility
US11409551B2 (en) 2017-02-27 2022-08-09 Red Hat, Inc. Emulating VPID correctly for a nested hypervisor
US10228981B2 (en) 2017-05-02 2019-03-12 Intel Corporation High-performance input-output devices supporting scalable virtualization
US10620955B2 (en) 2017-09-19 2020-04-14 International Business Machines Corporation Predicting a table of contents pointer value responsive to branching to a subroutine
US10725918B2 (en) 2017-09-19 2020-07-28 International Business Machines Corporation Table of contents cache entry having a pointer for a range of addresses
US11061575B2 (en) 2017-09-19 2021-07-13 International Business Machines Corporation Read-only table of contents register
US10705973B2 (en) 2017-09-19 2020-07-07 International Business Machines Corporation Initializing a data structure for use in predicting table of contents pointer values
US10884929B2 (en) 2017-09-19 2021-01-05 International Business Machines Corporation Set table of contents (TOC) register instruction
US10896030B2 (en) 2017-09-19 2021-01-19 International Business Machines Corporation Code generation relating to providing table of contents pointer values
US10713050B2 (en) 2017-09-19 2020-07-14 International Business Machines Corporation Replacing Table of Contents (TOC)-setting instructions in code with TOC predicting instructions
US11221957B2 (en) 2018-08-31 2022-01-11 International Business Machines Corporation Promotion of ERAT cache entries
US10769076B2 (en) 2018-11-21 2020-09-08 Nvidia Corporation Distributed address translation in a multi-node interconnect fabric
US11663118B2 (en) * 2021-03-10 2023-05-30 Infineon Technologies Ag Address vectors for data storage elements
US20220414016A1 (en) * 2021-06-23 2022-12-29 Advanced Micro Devices, Inc. Concurrent processing of memory mapping invalidation requests
US11947992B2 (en) 2022-05-09 2024-04-02 Alipay (Hangzhou) Information Technology Co., Ltd. Methods and apparatuses for managing TLB cache in virtualization platform
CN114595164B (zh) * 2022-05-09 2022-08-16 支付宝(杭州)信息技术有限公司 在虚拟化平台中管理tlb高速缓存的方法和装置

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04156638A (ja) * 1990-10-20 1992-05-29 Fujitsu Ltd 変換バッファを具備する情報処理装置
JP2000020399A (ja) * 1998-06-30 2000-01-21 Hitachi Ltd 仮想計算機システム
JP2006526203A (ja) * 2003-05-12 2006-11-16 インターナショナル・ビジネス・マシーンズ・コーポレーション ストレージの無効化、バッファ・エントリの消去
US20080016315A1 (en) * 2006-07-12 2008-01-17 Microsoft Corporation Tagged translation lookaside buffers in a hypervisor computing environment
JP2008077642A (ja) * 2006-08-15 2008-04-03 Intel Corp 翻訳ルックアサイドバッファと拡張ページングテーブルとの同期化
JP2009146344A (ja) * 2007-12-18 2009-07-02 Hitachi Ltd 計算機仮想化装置のtlb仮想化方法および計算機仮想化プログラム

Family Cites Families (54)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5430850A (en) 1991-07-22 1995-07-04 Massachusetts Institute Of Technology Data processing system with synchronization coprocessor for multiple threads
US5845331A (en) 1994-09-28 1998-12-01 Massachusetts Institute Of Technology Memory system including guarded pointers
US5926642A (en) * 1995-10-06 1999-07-20 Advanced Micro Devices, Inc. RISC86 instruction set
US5715427A (en) 1996-01-26 1998-02-03 International Business Machines Corporation Semi-associative cache with MRU/LRU replacement
US6041396A (en) * 1996-03-14 2000-03-21 Advanced Micro Devices, Inc. Segment descriptor cache addressed by part of the physical address of the desired descriptor
US5953520A (en) 1997-09-22 1999-09-14 International Business Machines Corporation Address translation buffer for data processing system emulation mode
US6047363A (en) * 1997-10-14 2000-04-04 Advanced Micro Devices, Inc. Prefetching data using profile of cache misses from earlier code executions
US8065504B2 (en) * 1999-01-28 2011-11-22 Ati International Srl Using on-chip and off-chip look-up tables indexed by instruction address to control instruction execution in a processor
US8074055B1 (en) 1999-01-28 2011-12-06 Ati Technologies Ulc Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code
US6212613B1 (en) 1999-03-22 2001-04-03 Cisco Technology, Inc. Methods and apparatus for reusing addresses in a computer
US6490671B1 (en) * 1999-05-28 2002-12-03 Oracle Corporation System for efficiently maintaining translation lockaside buffer consistency in a multi-threaded, multi-processor virtual memory system
US6412043B1 (en) * 1999-10-01 2002-06-25 Hitachi, Ltd. Microprocessor having improved memory management unit and cache memory
US6470437B1 (en) 1999-12-17 2002-10-22 Hewlett-Packard Company Updating and invalidating store data and removing stale cache lines in a prevalidated tag cache design
US6604187B1 (en) * 2000-06-19 2003-08-05 Advanced Micro Devices, Inc. Providing global translations with address space numbers
US6510506B2 (en) 2000-12-28 2003-01-21 Intel Corporation Error detection in cache tag array using valid vector
US7073044B2 (en) 2001-03-30 2006-07-04 Intel Corporation Method and apparatus for sharing TLB entries
US6662289B1 (en) 2001-05-15 2003-12-09 Hewlett-Packard Development Company, Lp. Method and apparatus for direct conveyance of physical addresses from user level code to peripheral devices in virtual memory systems
US6681311B2 (en) * 2001-07-18 2004-01-20 Ip-First, Llc Translation lookaside buffer that caches memory type information
US7089396B2 (en) 2002-10-10 2006-08-08 International Business Machines Corporation Method and profiling cache for management of virtual memory
US7363462B2 (en) 2003-04-04 2008-04-22 Sun Microsystems, Inc. Performing virtual to global address translation in processing subsystem
KR100591755B1 (ko) 2003-07-22 2006-06-22 삼성전자주식회사 복수의 스레드를 동시에 처리하는 장치 및 방법
US7167970B2 (en) * 2004-05-24 2007-01-23 Sun Microsystems, Inc. Translating loads for accelerating virtualized partition
US7234038B1 (en) 2004-05-28 2007-06-19 Sun Microsystems, Inc. Page mapping cookies
US7551614B2 (en) 2004-12-14 2009-06-23 Hewlett-Packard Development Company, L.P. Aggregation over multiple processing nodes of network resources each providing offloaded connections between applications over a network
US8522253B1 (en) 2005-03-31 2013-08-27 Guillermo Rozas Hardware support for virtual machine and operating system context switching in translation lookaside buffers and virtually tagged caches
US20070005933A1 (en) * 2005-06-29 2007-01-04 Kopec Brian J Preventing multiple translation lookaside buffer accesses for a same page in memory
US20080005528A1 (en) 2006-06-30 2008-01-03 Morris Robert P Methods, Systems, and Computer Program Products for Using a Structured Data Storage System to Provide Access to Addressable Entities in Virtual Address Space
US20080005529A1 (en) 2006-06-30 2008-01-03 Morris Robert P Methods, Systems, and Computer Program Products for Providing Access to Addressable Entities Using a Non-Sequential Virtual Address Space
US7490191B2 (en) 2006-09-22 2009-02-10 Intel Corporation Sharing information between guests in a virtual machine environment
US7836258B2 (en) * 2006-11-13 2010-11-16 International Business Machines Corporation Dynamic data cache invalidate with data dependent expiration
US8099559B2 (en) * 2007-09-11 2012-01-17 International Business Machines Corporation System and method for generating fast instruction and data interrupts for processor design verification and validation
US7937556B2 (en) 2008-04-30 2011-05-03 Oracle America, Inc. Minimizing TLB comparison size
JP5300407B2 (ja) 2008-10-20 2013-09-25 株式会社東芝 仮想アドレスキャッシュメモリ及び仮想アドレスキャッシュ方法
CN101398768B (zh) * 2008-10-28 2011-06-15 北京航空航天大学 一种分布式虚拟机监视器系统的构建方法
CN101794214B (zh) 2009-02-04 2013-11-20 世意法(北京)半导体研发有限责任公司 使用多块物理寄存器映射表的寄存器重命名系统及其方法
US8443156B2 (en) * 2009-03-27 2013-05-14 Vmware, Inc. Virtualization system using hardware assistance for shadow page table coherence
US8533437B2 (en) * 2009-06-01 2013-09-10 Via Technologies, Inc. Guaranteed prefetch instruction
US8412911B2 (en) 2009-06-29 2013-04-02 Oracle America, Inc. System and method to invalidate obsolete address translations
US8301865B2 (en) 2009-06-29 2012-10-30 Oracle America, Inc. System and method to manage address translation requests
US8930635B2 (en) 2009-12-14 2015-01-06 International Business Machines Corporation Page invalidation processing with setting of storage key to predefined value
US8386749B2 (en) * 2010-03-16 2013-02-26 Advanced Micro Devices, Inc. Address mapping in virtualized processing system
US9003171B2 (en) 2010-06-23 2015-04-07 Apple Inc. Page fault prediction for processing vector instructions
US8527736B1 (en) * 2010-09-07 2013-09-03 Adtran, Inc. Systems and methods for improving address translation speed
CN103620547B (zh) * 2011-01-27 2018-07-10 英特尔公司 使用处理器的转换后备缓冲器的基于客户指令到本机指令范围的映射
US8880851B2 (en) * 2011-04-07 2014-11-04 Via Technologies, Inc. Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
JP2013097671A (ja) 2011-11-02 2013-05-20 Fujitsu Ltd アドレス変換装置、アドレス変換装置の制御方法及び演算処理装置
CN104246692B (zh) 2012-03-30 2018-02-23 英特尔公司 用于实时指令跟踪的系统和方法
US8856789B2 (en) * 2012-09-06 2014-10-07 Assured Information Security, Inc. Facilitating execution of a self-modifying executable
US10310973B2 (en) * 2012-10-25 2019-06-04 Nvidia Corporation Efficient memory virtualization in multi-threaded processing units
US9311239B2 (en) 2013-03-14 2016-04-12 Intel Corporation Power efficient level one data cache access with pre-validated tags
US9507597B2 (en) * 2013-06-10 2016-11-29 Via Alliance Semiconductor Co., Ltd. Selective accumulation and use of predicting unit history
WO2014209269A1 (en) 2013-06-24 2014-12-31 Intel Corporation A protected memory view for nested page table access by virtual machine guests
CN104424034A (zh) * 2013-09-04 2015-03-18 华为技术有限公司 硬件资源访问方法及装置
US9727480B2 (en) * 2014-07-21 2017-08-08 Via Alliance Semiconductor Co., Ltd. Efficient address translation caching in a processor that supports a large number of different address spaces

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04156638A (ja) * 1990-10-20 1992-05-29 Fujitsu Ltd 変換バッファを具備する情報処理装置
JP2000020399A (ja) * 1998-06-30 2000-01-21 Hitachi Ltd 仮想計算機システム
JP2006526203A (ja) * 2003-05-12 2006-11-16 インターナショナル・ビジネス・マシーンズ・コーポレーション ストレージの無効化、バッファ・エントリの消去
US20080016315A1 (en) * 2006-07-12 2008-01-17 Microsoft Corporation Tagged translation lookaside buffers in a hypervisor computing environment
JP2008077642A (ja) * 2006-08-15 2008-04-03 Intel Corp 翻訳ルックアサイドバッファと拡張ページングテーブルとの同期化
JP2009146344A (ja) * 2007-12-18 2009-07-02 Hitachi Ltd 計算機仮想化装置のtlb仮想化方法および計算機仮想化プログラム

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2021533455A (ja) * 2018-07-31 2021-12-02 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドAdvanced Micro Devices Incorporated 仮想化用のgpuタスクコンテナとしてのvmid
JP7123235B2 (ja) 2018-07-31 2022-08-22 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド 仮想化用のgpuタスクコンテナとしてのvmid
US11467870B2 (en) 2018-07-31 2022-10-11 Advanced Micro Devices, Inc. VMID as a GPU task container for virtualization

Also Published As

Publication number Publication date
TW201617898A (zh) 2016-05-16
US20160179688A1 (en) 2016-06-23
EP3172673A1 (en) 2017-05-31
EP3172673B1 (en) 2020-09-02
TWI605339B (zh) 2017-11-11
EP2997478A1 (en) 2016-03-23
KR101770496B1 (ko) 2017-09-05
TWI581098B (zh) 2017-05-01
US9760496B2 (en) 2017-09-12
KR20160033653A (ko) 2016-03-28
TW201610837A (zh) 2016-03-16
EP2997478B1 (en) 2019-03-13
WO2016012830A1 (en) 2016-01-28
CN105993003A (zh) 2016-10-05
WO2016012831A1 (en) 2016-01-28
US20160179701A1 (en) 2016-06-23
KR101770495B1 (ko) 2017-08-22
TWI592867B (zh) 2017-07-21
CN105993003B (zh) 2019-04-09
US20160041922A1 (en) 2016-02-11
WO2016012832A1 (en) 2016-01-28
CN105993004A (zh) 2016-10-05
KR20160033654A (ko) 2016-03-28
EP2997478A4 (en) 2017-06-07
CN105993004B (zh) 2019-04-02
CN105993005A (zh) 2016-10-05
US9727480B2 (en) 2017-08-08
CN105993005B (zh) 2019-06-04
JP6081672B2 (ja) 2017-02-15
EP3172673A4 (en) 2018-03-28
US9842055B2 (en) 2017-12-12
TW201610683A (zh) 2016-03-16

Similar Documents

Publication Publication Date Title
JP6081672B2 (ja) 多数の異なるアドレス空間をサポートするプロセッサにおける効率的なアドレス変換キャッシング
CN109240950B (zh) 处理器、区分系统管理模式条目的方法以及存储介质
US9335943B2 (en) Method and apparatus for fine grain memory protection
US8386749B2 (en) Address mapping in virtualized processing system
KR100834362B1 (ko) 스토리지 무효화, 버퍼 엔트리 제거
KR101787851B1 (ko) 다중 페이지 크기 변환 색인 버퍼(tlb)용 장치 및 방법
US20190205261A1 (en) Systems, methods, and apparatuses for patching pages
WO2016055828A1 (en) Cache system with primary cache and overflow fifo cache
US10423537B2 (en) Address space resizing table for simulation of processing of target program code on a target data processing apparatus

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20151216

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20161011

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20161121

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20161220

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170118

R150 Certificate of patent or registration of utility model

Ref document number: 6081672

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250