JP7177038B2 - コンピューティングデバイスのメモリ内のページに対するアクセス制御 - Google Patents

コンピューティングデバイスのメモリ内のページに対するアクセス制御 Download PDF

Info

Publication number
JP7177038B2
JP7177038B2 JP2019504712A JP2019504712A JP7177038B2 JP 7177038 B2 JP7177038 B2 JP 7177038B2 JP 2019504712 A JP2019504712 A JP 2019504712A JP 2019504712 A JP2019504712 A JP 2019504712A JP 7177038 B2 JP7177038 B2 JP 7177038B2
Authority
JP
Japan
Prior art keywords
page
rmt
virtual machine
entry
accessed
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.)
Active
Application number
JP2019504712A
Other languages
English (en)
Other versions
JP2019522298A (ja
Inventor
エイ. カプラン デイビッド
ダブリュー. パウエル ジェレミー
アール. ウォーラー トーマス
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
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
Priority claimed from US15/224,302 external-priority patent/US10169244B2/en
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JP2019522298A publication Critical patent/JP2019522298A/ja
Application granted granted Critical
Publication of JP7177038B2 publication Critical patent/JP7177038B2/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/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/1425Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • 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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0292User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation 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/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1458Protection against unauthorised use of memory or access to memory by checking the subject access rights
    • G06F12/1483Protection against unauthorised use of memory or access to memory by checking the subject access rights using an access-table, e.g. matrix or list
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45587Isolation or security of virtual machine instances
    • 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/1052Security 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/15Use in a specific computing environment
    • G06F2212/151Emulated environment, e.g. virtual machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/651Multi-level translation tables

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Mathematical Physics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Storage Device Security (AREA)

Description

いくつかのコンピューティングデバイスは、ソフトウェアプログラムを実行するためのサポートを提供するために、コンピューティングデバイスのハードウェアをエミュレートするかインタフェースするソフトウェアエンティティである仮想マシンを実行する。例えば、仮想マシンは、コンピューティングデバイス内のハードウェア要素(プロセッサ、メモリ、ネットワークインタフェース等)を用いて、オペレーティングシステムの1つ以上のインスタンス(「ゲスト」オペレーティングシステムと呼ばれる)を実行するためのサポートを提供することができる。ゲストオペレーティングシステムは、他のソフトウェアプログラム(例えば、アプリケーション、データベース等)の実行をサポートする。
いくつかのコンピューティングデバイスは、2つ以上の仮想マシンを同時に(例えば、対応するタイムスライスで、1つ以上のプロセッサコア上で並行して等)実行する。このようなコンピューティングデバイスでは、各仮想マシンは、仮想マシンを用いるために排他的に割り当てられたハードウェアリソースにアクセスすることができる。例えば、各仮想マシンには、コンピューティングデバイス内の対応するメモリ領域が仮想マシンの排他的使用のために割り当てられてもよい。これらのコンピューティングデバイスでは、第1仮想マシンが、第2仮想マシンに割り当てられたメモリ領域にアクセスするのを抑制することができ、その逆も同様である。これらのコンピューティングデバイスのいくつかは、ハイパーバイザが仮想マシン毎のアクセス制御を実行する。ハイパーバイザは、コンピューティングデバイス上で動作/実行されるソフトウェアエンティティであり、コンピューティングデバイス上で実行中の仮想マシンのマネージャ又はコントローラとして機能する。例えば、ハイパーバイザは、仮想マシンを開始又は初期化し、仮想マシンによるコンピューティングデバイスハードウェアのアクセスを制御し、仮想マシンを終了又はクローズすること等ができる。
ハイパーバイザは、仮想マシンのアクセス制御を提供すると想定されているが、ハイパーバイザが常に適切なアクセス制御を実施するとは限らない。例えば、ハイパーバイザのプログラムコードの一部又は全てが不正なプログラムコードに置き換えられたり、ハイパーバイザのプログラムコードが破損し又はエラーを含んだりすることがある。このような場合、ハイパーバイザは、仮想マシンが、別の仮想マシンに割り当てられたコンピューティングハードウェアにアクセスすることを故意又は意図せずに許可する場合がある。例えば、いくつかのコンピューティングデバイスでは、ハイパーバイザが、仮想マシンが対応するメモリ領域のデータにアクセスするのを可能にするアドレス情報を提供する役割を果たす。これらのコンピューティングデバイスでは、ハイパーバイザは、仮想マシン(又は、そこで実行されるソフトウェア)が用いるローカルアドレスと、メモリ内でデータが実際に配置されている物理アドレスと、の間の変換を提供する。ハイパーバイザが正しく機能していない場合、ハイパーバイザは、誤ったアドレス情報を提供し、これにより、仮想マシンに対して、予期しない又は不要なメモリ領域(例えば、他の仮想マシンに割り当てられたメモリ領域)内のデータにアクセスするように指示することがある。ハイパーバイザは、説明したように誤ったアドレス情報を提供することによって、1つ以上のアクセス制御又はルールに違反してデータにアクセスさせる可能性がある。
いくつかの実施形態による、仮想マシン及びハイパーバイザを示すブロック図である。 いくつかの実施形態による、コンピューティングデバイスを示すブロック図である。 いくつかの実施形態による、ゲストページテーブルを実装するために用いられるテーブルのセットを示すブロック図である。 いくつかの実施形態による、リバースマップテーブルを示すブロック図である。 いくつかの実施形態による、ゲストアクセスページテーブルを示すブロック図である。 いくつかの実施形態による、リバースマップテーブルを更新するプロセスを示すブロック図である。 いくつかの実施形態による、ゲストアクセスページテーブル内のインジケータをクリアするプロセスを示すブロック図である。 いくつかの実施形態による、リバースマップテーブル及びゲストアクセスページテーブルを用いるプロセスを示すブロック図である。 いくつかの実施形態による、仮想マシンが対応するページにアクセスしたか否かを判別するプロセスを示すブロック図である。 いくつかの実施形態による、リバースマップテーブルを初期化するプロセスを示すブロック図である。
図面及び説明を通して、同じ参照番号は同じ図面要素を示す。
以下の説明は、当業者が、説明する実施形態を製造及び使用可能にするために提示されており、特定の用途及びその要件という状況で提供されている。説明する実施形態に対する様々な変更が当業者には容易に明らかとなり、本明細書で定義された一般的な原理は、他の実施形態及び用途に適用されてもよい。したがって、説明する実施形態は、示された実施形態に限定されず、本明細書に開示された原理及び特徴と矛盾しない最も広い範囲が与えられるべきである。
(仮想メモリ)
説明する実施形態では、コンピューティングデバイスは、コンピューティングデバイス内で実行されているプログラムによるデータアクセスを処理するために仮想メモリ技術を用いている。例えば、プログラムは、アプリケーション、オペレーティングシステム、デバイスドライバ、仮想マシン、周辺機器によって実行されるソフトウェア等を含んでもよい。概して、データがコンピューティングデバイス内のプログラムによってアクセスされると、当該データを含む所定のサイズ(例えば、4kB、2MB等)のメモリのブロック又は「ページ」が、大容量ストレージ(例えば、ディスクドライブ若しくは半導体メモリ)からコンピューティングデバイスのメモリ内の利用可能な物理的位置にコピーされるか、メモリ内に新たに生成される。メモリ内のページの物理的位置を管理するためにプログラムが必要とされるのを回避するために、コンピューティングデバイスは、プログラムに関するページの物理的位置を管理する。プログラムは、ページの物理的位置に基づくアドレス(又は「物理アドレス」)を用いてメモリにアクセスする代わりに、対応するプログラムに固有のローカルアドレス空間である「仮想アドレス空間」内の「仮想アドレス」を用いてメモリにアクセスする。プログラムの観点からは、仮想アドレスは、データがメモリに記憶されている実際の物理的位置を示し、メモリアクセスは、これに従って仮想アドレスを用いてプログラムによって行われる。しかしながら、仮想アドレスは、メモリ内のページにデータが記憶されている物理的位置の物理アドレスに直接マッピングすることができない。ページの物理的位置を管理することの一部として、コンピューティングデバイスは、メモリアクセス要求においてプログラムが用いる仮想アドレスを、データが実際に配置されている物理アドレスに変換する。次に、コンピューティングデバイスは、物理アドレスを用いて、プログラムに対するメモリアクセスを実行する。
上述した仮想アドレスから物理アドレスへの変換を可能にするために、コンピューティングデバイスは、「ページテーブル」を含む。ページテーブルは、コンピューティングデバイスのメモリ内に記憶されたレコードであり、メモリに記憶されたデータのページについての仮想アドレスから物理アドレスへの変換情報を有するエントリ又は「ページテーブルエントリ」を含む。換言すれば、ページテーブルは、仮想アドレスと対応する物理アドレスとの「マッピング」を含む。コンピューティングデバイスは、所定の仮想アドレスでメモリにアクセスする要求をプログラムから受信すると、「ページテーブルウォーク」を実行することによって対応する物理アドレス情報をページテーブルから取得する。コンピューティングデバイスは、「ページテーブルウォーク」の間にページテーブルを検索して、仮想アドレスに関連する物理アドレスを提供するページテーブルエントリを探す。
上述したページテーブルウォークは比較的遅いので、ページテーブルウォークを実行しないことが望ましい。このため、コンピューティングデバイスは、変換索引バッファ(TLB)を含む。変換索引バッファは、ページテーブルウォークの間に取得されたページテーブルエントリ(又は、ページテーブルエントリに基づく情報)の限定された数のコピーを記憶するために用いられるローカルキャッシュである。動作中、コンピューティングデバイスは、最初に、仮想アドレスから物理アドレスへの変換を実行するために、キャッシュされたページテーブルエントリを対応するTLBから取得することを試みる。対応するページテーブルエントリのコピーがTLBに存在しない場合(すなわち、「ミス」が生じた場合)、コンピューティングデバイスは、ページテーブルウォークを実行して所望のページテーブルエントリを取得し、取得したページテーブルエントリのコピーをTLBにキャッシュする。
(仮想マシン、ハイパーバイザ及び階層的なページテーブル)
説明する実施形態では、コンピューティングデバイスは、ソフトウェアプログラムを実行するためのサポートを提供するために、コンピューティングデバイスのハードウェアをエミュレートするかインタフェースするソフトウェアエンティティである仮想マシンを実行する。例えば、仮想マシンは、コンピューティングデバイス内のハードウェア要素(プロセッサ、メモリ、ネットワークインタフェース等)を用いて、オペレーティングシステムのうち1つ以上のインスタンス(「ゲスト」オペレーティングシステムと呼ばれる)を実行するためのサポートを提供することができる。ゲストオペレーティングシステムは、他のソフトウェアプログラム(例えば、アプリケーション、データベース等)の実行をサポートする。
説明する実施形態では、コンピューティングデバイスは、2つ以上の仮想マシンを同時に実行してもよい(例えば、対応するタイムスライスで、1つ以上のプロセッサコアで並行して等)。これらの実施形態では、各仮想マシンは、仮想マシンの使用のために割り当てられる様々なハードウェアリソースと関連付けられてもよい。例えば、各仮想マシンには、割り当てられたメモリ領域(例えば、連続又は非連続メモリブロック)への排他的アクセスが提供されてもよい。換言すれば、第1仮想マシンが、第2仮想マシンに関連するメモリ領域内のデータのページにアクセスすることを抑制することができ、逆も同様である。説明する実施形態では、ハイパーバイザは、仮想マシン毎のアクセス制御を実行する。ハイパーバイザは、コンピューティングデバイス上で動作又は実行するソフトウェアエンティティであり、コンピューティングデバイス上で実行される仮想マシンのマネージャ又はコントローラとして機能する。例えば、ハイパーバイザは、仮想マシンを開始又は初期化すること、仮想マシンによるコンピューティングデバイスハードウェアのアクセスを制御すること、仮想マシンを終了又はクローズすること等を行ってもよい。
図1は、いくつかの実施形態による、仮想マシン及びハイパーバイザを示すブロック図である。図1に示すように、3つの仮想マシン(VM)100が存在し、各仮想マシンは、ゲストオペレーティングシステム(ゲストOS)102と、1つ以上のプログラム(PRGRMS)104(例えば、データベース、ソフトウェアアプリケーション等)と、を実行する。仮想マシン100は、ハイパーバイザ106と通信し、ハイパーバイザ106は、ホストオペレーティングシステム(ホストOS)108と、仮想マシン100との間をインタフェースする。ホストオペレーティングシステム108は、コンピューティングデバイスハードウェア110と、ハイパーバイザ106との間のインタフェースを提供する。図1に様々な要素を示しているが、いくつかの実施形態では、要素の異なる配列が存在する。例えば、いくつかの実施形態では、ホストオペレーティングシステム108が存在せず、ハイパーバイザ106は、コンピューティングデバイスハードウェア110とより直接的に通信する。別の例として、異なる数の仮想マシン100が存在してもよい。
説明した実施形態では、ゲストオペレーティングシステム及びハイパーバイザの両方が上述した仮想メモリ技術を使用する。したがって、ページテーブルの階層は、コンピューティングデバイスにおいて維持される。ページテーブルの階層内で、各ゲストオペレーティングシステムは、ローカルページテーブル(ゲストページテーブル)に関連付けられており、ハイパーバイザは、ネストページテーブル(nested page table)に関連付けられている。概して、ハードウェアテーブルウォーカ(すなわち、ページテーブルウォークを実行するように構成された回路)は、ゲストオペレーティングシステムの下で実行されるプログラムによって使用される仮想アドレスからシステム物理アドレスへの変換の要求をプロセッサから受信すると、ゲストページテーブル及びネストページテーブルを用いて変換を実行する。より具体的には、テーブルウォーカは、ゲストページテーブルを用いて、プログラムによって使用される仮想アドレスをゲスト物理アドレスに変換する。ゲスト物理アドレスは、ゲストオペレーティングシステムにとってローカルなアドレスである。ゲスト物理アドレスは、プログラムがアクセスするデータ(又は、命令等)が記憶されているメモリ内の場所に直接マッピングすることができないので、テーブルウォーカは、ネストページテーブルを使用して、ゲスト物理アドレスをシステム物理アドレスに変換する。システム物理アドレスは、データが記憶されているメモリ内の実際の場所を示すアドレスである。テーブルウォーカは、システム物理アドレスを取得すると、データにアクセスする際に使用するシステム物理アドレスを提供し、さらには、システム物理アドレスをTLBにキャッシュしてもよい。
説明する実施形態では、ハイパーバイザは、ネストページテーブル内の情報に対して様々な動作を実行することができる。例えば、ハイパーバイザは、ゲスト物理アドレスからシステム物理アドレス等へのマッピングを更新する(すなわち、上書きする)ことができる。後述するように、説明する実施形態では、ハイパーバイザによって不正確なマッピング/変換が提供されるような方法で、ネストページテーブル内の情報がハイパーバイザによって(不正に、誤って等)変更されないことを確実にするための動作を実行する。
(概要)
説明する実施形態は、コンピューティングデバイスのメモリ内のページへの仮想マシンによるアクセスを制御するためのメカニズムを含む。より具体的には、説明する実施形態は、とりわけ、ハイパーバイザ(及び/又はコンピューティングデバイス内の別のエンティティ)が、ネストページテーブル内のゲスト物理アドレスからシステム物理アドレスへの変換を再マッピングしないようにするために使用される一対のテーブルを含む。一対のテーブルは、(1)リバースマップテーブルと、(2)ゲストアクセスページテーブルと、を含む。リバースマップテーブルは、とりわけ、ゲスト物理アドレスについてのネストページテーブルのテーブルウォークの間に取得したシステム物理アドレスが以前に使用されたシステム物理アドレスと一致するか否かを判別するのに使用可能な情報を含む。換言すれば、リバースマップテーブルを使用して、メモリ内の所定のページのシステム物理アドレスが一度に1つのゲスト物理アドレスのみに一致するようにすることができる。ゲストアクセスページテーブルは、仮想マシンがメモリ領域内のページに以前にアクセスしたと記録されているか否かを判別するのに使用可能な情報を含む。
いくつかの実施形態では、ゲスト物理アドレスをシステム物理アドレスに変換するとき(例えば、対応する仮想マシンに代わってプロセッサ内のロード/ストアユニットからの要求に基づいて)、(例えば、メモリ管理ユニット内の)ハードウェアテーブルウォーカは、ネストページテーブルのテーブルウォークを行って、ネストページテーブル内の対応するエントリからシステム物理アドレスを取得する。ネストページテーブル、したがって対応するエントリが変更されたか否かは不明であるため、対応するエントリ内のマッピング/変換が対応するルールに違反するか否か(例えば、対応するページが複数のゲスト物理アドレスに関連付けられている等)は分からない。このため、テーブルウォーカは、ネストページテーブルからシステム物理アドレスを取得すると、リバースマップテーブル及び対応するゲストアクセスページテーブルのうち少なくとも一方をチェックして、仮想マシンがコンピューティングデバイスのメモリ内の対応するページにアクセスしたか否かを判別する。より具体的には、テーブルウォーカは、リバースマップテーブルをチェックして、(例えば、対応するページが不変ではないこと、システム物理アドレスに対応するリバースマップテーブル内のエントリがロックされていない等の)数ある中でも、システム物理アドレスに対応するエントリが有効であって、要求からのゲスト物理アドレスに一致する記録されたゲスト物理アドレスを有することを確実にする。これが当てはまる場合、システム物理アドレスがゲスト物理アドレスと一致する(すなわち、システム物理アドレスがゲスト物理アドレスのみにマッピングする)と判別することができる。次に、テーブルウォーカは、リバースマップテーブルのエントリ内のページアクセス情報をチェックして、仮想マシンが既にメモリのページにアクセスしたことをページアクセス情報が示しているか否かを判別する。示している場合には、テーブルウォーカは、システム物理アドレスをロード/ストアユニットに戻す。そうではなく、仮想マシンがメモリのページに未だアクセスしていないことをページアクセス情報が示している場合には、テーブルウォーカは、ゲストアクセスページテーブル内の検索を行って、ゲストアクセスページテーブル内のページアクセス情報が一致するか、そうでなければ同意(agree)する(すなわち、アクセスがなかったことを示す)か否かを判別する。リバースマップテーブルのチェック又はゲストアクセスページテーブルのチェックの何れかが不一致を戻すか、そうでなければ一致しない場合には、テーブルウォーカは、変換に失敗し、エラーメッセージをハイパーバイザに返してもよい。ハイパーバイザは、エラーを受信すると、是正措置(例えば、エラー処理コード、障害処理コードの実行等)を実行することができる。対照的に、リバースマップテーブル及びゲストアクセスページテーブルの両方におけるチェックが一致を戻すか、そうでなければ同意する(すなわち、対応するページが仮想マシンによってアクセスされたか否かについて同意する)場合には、テーブルウォーカは、システム物理アドレスをロード/ストアユニットに戻して、ロード/ストアユニットがシステム物理アドレスを用いてメモリアクセスを実行する(そしておそらく、テーブルウォークからのシステム物理アドレス及び/又は他の情報をTLBにキャッシュする等)ことを可能にする。
リバースマップテーブル及びゲストアクセスページテーブルを使用することによって、説明する実施形態は、ネストページテーブルの潜在的に不正な又は誤った変更を検出することができる。ネストページテーブルのこのような変更を回避することは、ハイパーバイザ(及び/又は別のエンティティ)が、ゲスト物理アドレスをシステム物理アドレスに不適切に再マッピングして、未知の、不要な又は不正確なメモリ領域(他の仮想マシンに割り当てられたメモリ領域を含む)内のデータにアクセスする(例えば、上書きする、実行する等)ように仮想マシンに指示するのを回避することによって、コンピューティングデバイス内の仮想マシンのデータのセキュリティを向上させることができる。換言すれば、説明する実施形態では、データのセキュリティを、ルールを実行することによって向上させることができる。このルールには、例えば、メモリ内の各ページは、単一/固有のゲスト物理アドレスに関連付けられることのみ許可され(ゲスト物理アドレスエイリアシングが許可されない)、使用中のプライベートゲストページは、本明細書で説明ように対応する仮想マシンを伴わずに再マッピングすることができない等が含まれる。また、単独で又は他の技術(例えば、仮想マシンメモリ領域の暗号化及び仮想マシンプロセッサ状態(例えば、レジスタ等)の保護)と組み合わせて、説明する実施形態は、ハイパーバイザにおける絶対の信頼の必要性を回避することができる。これにより、コンピューティングデバイスの管理を単純化し、セキュリティを向上させること等が可能になる。例えば、説明する実施形態は、(以下により詳細に説明するように)不変ページ(immutable pages)を用いることで、ハイパーバイザが「リプレイ」アタックを実行することを、(ハイパーバイザがメモリのページ内のデータの現在のバージョン(暗号化データを含む)を古いバージョンのデータを用いて不正に上書きするのを抑制することによって)回避することができる。したがって、説明する実施形態は、セキュリティ、動作安定性、及び、コンピューティングデバイスのコンシューマにとっての価値を向上させることができる。
(コンピューティングデバイス)
図2は、いくつかの実施形態による、コンピューティングデバイス200を示すブロック図である。図2に示すように、コンピューティングデバイス200は、プロセッサ202と、メモリ206と、大容量ストレージ216と、ダイレクトメモリアクセスメカニズム(DMA)218と、を含む。プロセッサ202は、コンピューティングデバイス200において計算動作を実行するデバイスである。プロセッサ202は、2つのコア(コア208,209)を含む。各コアは、1つ以上の計算メカニズム(例えば、中央処理ユニット(CPU)、グラフィックス処理ユニット(GPU)、組み込みプロセッサ、特定用途向け集積回路(ASIC)、及び/又は、他の計算メカニズム等)を含む。
また、プロセッサ202は、計算動作を行うためにコア208,209が用いるデータ及び命令をローカルに記憶するために用いられるキャッシュメモリ(又は、「キャッシュ」)を含む。図2に示すように、プロセッサ202内のキャッシュは、レベル1(L1)キャッシュ210,211(「L1210」及び「L1211」)を、コア208,209の各々に含む。各L1キャッシュは、メモリ回路(例えば、スタティックランダムアクセスメモリ(SRAM)、ダイナミックランダムアクセスメモリ(DRAM)、ダブルデータレートシンクロナスDRAM(DDR SDRAM)、及び/又は、他のタイプのメモリ回路であって、対応するコア208,209によって使用されるデータ及び命令を記憶する他のタイプのメモリ回路のうち1つ以上)と、メモリ回路に記憶されたデータ及び命令のアクセスを処理するための制御回路と、を含む。また、プロセッサ202は、共有されるレベル2(L2)キャッシュ212を含む。キャッシュ212は、メモリ回路(例えば、SRAM、DRAM、DDR SDRAM、及び/又は、他のタイプのメモリ回路であって、コア208,209の両方によって使用されるデータ及び命令を記憶する他のタイプのメモリ回路のうち1つ以上)と、にメモリ回路に記憶されたデータ及び命令のアクセスを処理するための制御回路と、を含む。さらに、プロセッサ202は、共有されるレベル3(L3)キャッシュ204を含む。キャッシュ204は、メモリ回路(例えば、SRAM、DRAM、DDR SDRAM、及び/又は、他のタイプのメモリ回路であって、コア208,209の両方によって使用されるデータ及び命令を記憶する他のタイプのメモリ回路のうち1つ以上)と、メモリ回路に記憶されたデータ及び命令のアクセスを処理するための制御回路と、を含む。
プロセッサ202は、プラットフォームセキュリティプロセッサ(PSP)232をさらに含む。プラットフォームセキュリティプロセッサ232は、プロセッサコア、ASIC、及び/又は、コンピューティングデバイス200内でセキュリティ実行する他の機能ブロックを含む。概して、プラットフォームセキュリティプロセッサ232は、ハードウェア及びソフトウェアエンティティの不正な又は誤った挙動に対して安全であることが知られているので、このような挙動の影響を受けやすい動作を保護するためにコンピューティングデバイス200内で使用することができる。例えば、プラットフォームセキュリティプロセッサ232は、コンピューティングデバイス200において信頼できる実行環境(例えば、暗号化動作(例えば、キー生成、データの暗号化/復号化等)、ハードウェア及びソフトウェアエンティティの登録及び/又は認証等)を可能にすることに関連する動作を実行してもよい。いくつかの実施形態では、プラットフォームセキュリティプロセッサ232は、コンピューティングデバイス200のメモリ206内のページに対する仮想マシンによるアクセスを制御するために、本明細書で説明する動作のうち少なくともいくつかを実行する。
メモリ206は、コンピューティングデバイス200の「メインメモリ」であり、メモリ回路(例えば、DRAM、DDR SDRAM、不揮発性ランダムアクセスメモリ(NVRAM)、及び/又は、コンピューティングデバイス200内の機能ブロックによって使用されるデータ及び命令を記憶する他のタイプのメモリ回路のうち1つ以上)と、メモリ回路内に記憶されたデータ及び命令のアクセスを処理するための制御回路と、を含む。コンピューティングデバイスによって実行される仮想マシンは、仮想マシンの排他的使用のために割り当てられた対応するメモリ領域を有することができるので、所定の仮想マシンは、対応する領域内のデータにアクセスする唯一の仮想マシンである。
大容量ストレージ216は、例えば、コンピューティングデバイス200内で用いられるデータ及び命令を記憶する大容量半導体メモリ(例えば、フラッシュメモリ、NVRAM等の不揮発性反動体メモリ)、ディスクドライブ(ハードドライブ等)、光学ドライブ等の大容量ストレージである。説明する実施形態では、大容量ストレージ216は、コンピューティングデバイス200内の機能ブロックによるその後の使用に備えてメモリ206内に記憶されるように取得されたデータ及び命令を保持する。例えば、データ及び/又は命令は、所定のサイズ(例えば、4kB、2MB、1GB等)のブロック又は「ページ」で大容量ストレージ216から取り出すことができ、ページは、メモリ206内に記憶することができる。また、ページは、メモリ206内の利用可能な物理的位置に(例えば、コンピュータの結果を記憶するため等に)新たに生成することができる。メモリ206内に記憶するために大容量ストレージ216から取り出されたページは、特定の仮想マシンの排他的アクセスのために予約(reserved)されてもよいし、仮想マシン間で共有されてもよい。
メモリ管理ユニット214は、プロセッサ202内のメモリアクセス要求を処理する機能ブロックである。データ及び命令がプロセッサ202内の機能ブロックによってアクセスされる(すなわち、コア208又は別の機能ブロックによる読み出し、書き込み、チェック/検証、削除、無効化等)場合、機能ブロックは、メモリアクセス要求をメモリ管理ユニット214に送信する。次に、メモリ管理ユニット214は、メモリアクセス要求の満足/解決のために、対応する要求をL2キャッシュ212、L3キャッシュ204及びメモリ206のうち1つ以上に送信する。例えば、メモリ管理ユニット214は、メモリアクセス要求に基づいてデータを取り出す場合、L2キャッシュ212、L3キャッシュ204又はメモリ206(又は、データがL2キャッシュ212、L3キャッシュ204若しくはメモリ206のうち1つに存在しない場合、大容量ストレージ216)からデータを取得し、データを、要求している機能ブロックに転送してもよい。
上述したように、コンピューティングデバイス200は、仮想メモリを使用して、(例えば、コア208,209によって実行される)ソフトウェアプログラムが、物理アドレスに変換されなければならない仮想アドレスを使用してメモリにアクセスできるようにする。メモリ管理ユニット214(例えば、メモリ管理ユニット214内のテーブルウォーカ機能ブロック)は、プログラムから仮想アドレスを有するメモリアクセス要求を受信すると、仮想アドレスを、メモリ206内でデータが配置されているページの物理アドレスに変換するための動作を実行する。
いくつかの実施形態では、メモリ管理ユニット214は、仮想アドレスから物理アドレスへの変換を実行するために2つのメカニズムを用いる。第1メカニズムは、各ゲストオペレーティングシステムに関連するページテーブルと、ハイパーバイザに関連するページテーブルと、を含むページテーブルの階層である。ページテーブルの例を、ゲストオペレーティングシステム及びハイパーバイザに関連するゲストページテーブル222及びネストページテーブル224として図2に示す。各ページテーブルは、メモリ206に記憶されたデータ構造(例えば、1つ以上のテーブル、配列、リスト等)である。例えば、ゲストページテーブル222は、対応する仮想マシンの排他的アクセスのために割り当てられたメモリ領域(例えば、予約メモリ領域226)に記憶されてもよい。いくつかの実施形態では、所定のページテーブルは、対応するプログラム、仮想マシン等によってメモリ206に記憶された、メモリ206に存在するページ毎に少なくとも1つの変換を記憶する。したがって、これらの実施形態では、ページが大容量ストレージ216からメモリ206にコピーされ又はメモリ206内に新たに生成され、メモリ206内で利用可能のままである場合、関連する仮想アドレスから物理アドレスへの変換は、対応するページテーブルに存在する必要がある。上述したように、テーブルウォーカは、ゲストページテーブル222及びネストページテーブル224を用いて仮想アドレスから物理アドレスへの変換を実行する。
仮想アドレスから物理アドレスへの変換を実行するための第2メカニズムは、変換索引バッファ220,221(「TLB220」及び「TLB221」)である。これらは、ページテーブルウォークの間に取得された仮想アドレスから物理アドレスへの変換情報を記憶/キャッシュするように構成されたコア208,209の各々におけるキャッシュである。コア208,209は、仮想アドレスから物理アドレスへの変換情報を対応するTLB220,221から取得し、可能であれば、ページテーブルウォークの実行を回避する。
ダイレクトメモリアクセスメカニズム218は、大容量ストレージ216からメモリ206へのデータの転送(逆も同様である)を実行するように構成された機能ブロックである。概して、ダイレクトメモリアクセスメカニズム218は、データ転送動作をプロセッサ202からオフロードし、これにより、プロセッサ202は、メモリ転送の実行に伴ういくつかの計算動作の実行を回避することができる。
コンピューティングデバイス200は、メモリ206に記憶されたリバースマップテーブル228を含む。リバースマップテーブル228は、多くのエントリを含むデータ構造(例えば、テーブル、リスト等)である。1つ以上の仮想マシンの使用に対して割り当てられ得るメモリ206内のメモリのページ毎に1つのエントリが存在する。例えば、メモリ206が、仮想マシンに対して4kBページで割り当てられ得る32GBのメモリを含む場合、リバースマップテーブルは、8,388,608エントリを含む。リバースマップテーブル228は、システム物理アドレスに関連するゲスト物理アドレスを示す情報を含むレコードを保持するため、不変ページのレコードを保持するため、及び、対応するページに関連する他の情報のレコードを保持するために、ハイパーバイザ及び他のエンティティによって使用される。このようにして、コンピューティングデバイス200は、ネストページテーブルにいつ変更が加えられたかを検出するのに使用可能なレコードを維持する。リバースマップテーブル228については、以下により詳細に説明する。
コンピューティングデバイス200は、メモリ206に記憶されたゲストアクセスページテーブル230を含む。ゲストアクセスページテーブル230は、多くのインジケータを含むデータ構造(例えば、ビットマスク、文字列、テーブル、リスト等)である。対応する仮想マシンのアクセス用に割り当てられたメモリのページ毎に1つのインジケータが存在する。例えば、対応する仮想マシンの排他的アクセスのためにメモリの4GB領域が割り当てられており、ページのサイズが4kBである場合には、ゲストアクセスページテーブル230がビットマスクである実施形態では、ゲストアクセスページテーブル230のサイズは、1,048,576ビットである。対応する仮想マシンが対応するページにアクセスしている場合(すなわち、読み出し、書き込み、及び/又は、他の方法で相互作用している場合)には、仮想マシン(及び/又は、例えばテーブルウォーカ等の別のエンティティ)は、対応するインジケータを所定値(例えば、1)に設定する。仮想マシンは、そうでなければインジケータをクリアしてもよいし、インジケータを0等の値に設定してもよい。例えば、ゲストアクセスページテーブル230がビットマスクである実施形態では、メモリ内の所定の位置のページがアクセスされている場合には、対応するビットを1に設定することができ、仮想マシンがページにアクセスしていない場合には、0に設定することができる。このようにして、仮想マシンは、仮想マシンによってアクセスされているページのレコードを保持する。ゲストアクセスページテーブル230については、以下により詳細に説明する。
いくつかの実施形態では、ハイパーバイザは、リバースマップテーブル228及びゲストアクセスページテーブル230に直接アクセスすることからブロックされている。例えば、リバースマップテーブル228及びゲストアクセスページテーブル230の一方又は両方は、ハイパーバイザが直接アクセスしないメモリ領域に記憶されてもよく、及び/又は、リバースマップテーブル228において不変としてマークされてもよい(すなわち、リバースマップテーブル228及びゲストアクセスページテーブル230が記憶されているページ自体が不変であるとマークされてもよい)。例えば、図2に示すように、ゲストアクセスページテーブル230は、対応する仮想マシンの排他的使用のために割り当てられた予約メモリ領域226に記憶されてもよい。別の例として、リバースマップテーブル228及びゲストアクセスページテーブル230の一方又は両方は、ハイパーバイザによって直接復号することができない形式に暗号化されてもよい。いくつかの実施形態では、リバースマップテーブル228及びゲストアクセスページテーブル230の一方又は両方は、ハイパーバイザが直接アクセスすることができない、暗号化されたメモリ領域に記憶される。例えば、いくつかの実施形態では、予約メモリ領域226は、対応する仮想マシンの排他的使用のために割り当てられ、且つ、暗号化されている。ハイパーバイザによるリバースマップテーブル228及びゲストアクセスページテーブル230への「直接」アクセスは許可されていないが、ハイパーバイザは、コンピューティングデバイス200内の他の要素又はエンティティ(例えば、プロセッサ等)に対して、テーブルに対する操作を実行させ、テーブル内の情報を使用させてもよい。かかる動作については、以下に説明する。
いくつかの実施形態では、通信経路(1つ以上のバス、ワイヤ、ガイド及び/又は他の接続を含む)は、要素間の矢印線で示すように、コンピューティングデバイス200内の様々な機能ブロック(プロセッサコア208,209、メモリ管理ユニット214、メモリ206等)の間に接続されている。通信経路は、コマンド、データ、制御信号及び/又は他の情報を機能ブロック間で送信するために使用される。
特定の構成のコアを用いた実施形態について説明しているが、いくつかの実施形態では、異なる数及び/又は構成のコアを含む。例えば、いくつかの実施形態では、1つのコアのみを有し、他の実施形態では、2つ、5つ、8つ又は別の数のコアを有する。概して、説明する実施形態では、本明細書で説明する動作を実行することができる任意の構成のコアを用いることができる。
特定の構成のキャッシュを用いた実施形態について説明しているが、いくつかの実施形態では、異なる数及び/又は構成のキャッシュを含む。例えば、キャッシュの一部又は全て(例えば、L1キャッシュ210,211等)は、別々の命令キャッシュとデータキャッシュとに分割されてもよい。また、L2キャッシュ212は共有されなくてもよく、したがって、単一のコアのみによって使用されてもよい(すなわち、プロセッサ202内に2つのL2キャッシュが存在してもよい)。別の例として、いくつかの実施形態では、異なるレベルのキャッシュ(1つのレベルのキャッシュから複数のレベルのキャッシュまで)を含み、これらのキャッシュは、プロセッサ202の内部及び/又はプロセッサ202の外部に配置されてもよい。概して、説明する実施形態では、本明細書で説明する動作を実行することができる任意の構成のキャッシュを用いることができる。
図2では、コンピューティングデバイス200及びプロセッサ202は、説明目的のために簡略化されているが、いくつかの実施形態では、コンピューティングデバイス200及び/又はプロセッサ202は、本明細書で説明する動作及び他の動作を実行するための追加の又は異なる要素及びメカニズムを含む。例えば、コンピューティングデバイス200及び/又はプロセッサ202は、パワーコントローラ、電池、メディアプロセッサ、入出力メカニズム、通信メカニズム、ネットワーキングメカニズム、ディスプレイメカニズム等を含んでもよい。
プロセッサ202、メモリ206、大容量ストレージ216及びダイレクトメモリアクセスメカニズム218は、図1のコンピューティングデバイスハードウェア110によって表すことができる「ハードウェア」のいくつかの例である。したがって、いくつかの実施形態では、ホストオペレーティングシステム108及び/又はハイパーバイザ106は、プロセッサ202と、メモリ206と、大容量ストレージ216と、ダイレクトメモリアクセスメカニズム218と、ゲストオペレーティングシステム102と、プログラム104と、の間でインタフェースをとる。これらの実施形態では、コンピューティングデバイス200(例えば、コア208~209等)は、ハイパーバイザ106と、仮想マシン100と、ゲストオペレーティングシステム102と、プログラム104と、ホストオペレーティングシステム108(ホストオペレーティングシステム108が存在する実施形態の場合)と、を実行する。また、この説明における「コンピューティングデバイス」及びコンピューティングデバイス内の要素への言及は、コンピューティングデバイス200及び関連する要素を指す場合がある。
コンピューティングデバイス200は、計算動作を実行する任意の電子デバイスとすることができ、その内部に含めることもできる。例えば、コンピューティングデバイス200は、デスクトップコンピュータ、ラップトップコンピュータ、ウェアラブルコンピューティングデバイス、タブレットコンピュータ、スマートフォン、サーバ、仮想若しくは拡張現実機器、ネットワーク機器、玩具、視聴覚機器、家電製品、コントローラ、車両、及び/又は、これらの組み合わせ等の電子デバイスであってもよいし、この電子デバイスに含まれてもよい。
(ページテーブル)
上述したように、コンピューティングデバイスは、アドレス変換を実行するためにページテーブルの階層を使用する。図3は、いくつかの実施形態による、ゲストページテーブルを実装するために用いられるテーブルのセットを示すブロック図である。ネストページテーブルは、図3に示す構成のテーブルと同様にして実施することができる。
図3に示すように、ゲストページテーブル300は、ページマップレベル4テーブル302と、ページディレクトリポインタテーブル(ページDIRPTRテーブル)304と、ページディレクトリテーブル(ページDIRテーブル)306と、ページテーブル308と、メモリページ310と、を含む。ページマップレベル4テーブル302、ページディレクトリポインタテーブル304、ページディレクトリテーブル306及びページテーブル308は、メモリに記憶されたデータ構造(例えば、テーブル、リンクリスト等)である。ページマップレベル4テーブル302、ページディレクトリポインタテーブル304及びページディレクトリテーブル306の各々は、仮想アドレス314に対応する物理アドレスを見つけるために、テーブルウォークの次のステップの間に検索(又は、「ウォーク」)される後続のテーブルに関する情報を含む。例えば、ページマップレベル4テーブル302は、多くのエントリを含む。各エントリは、仮想アドレス314からの対応するアドレスビットのサブセットを、ページディレクトリポインタテーブル(例えば、図3に示すページディレクトリポインタテーブル304)にマッピングする情報を含む。ゲストページテーブル300は、仮想アドレスの対応する部分に関連する特定のメモリページを示す物理アドレスを含む。メモリページ310は、仮想アドレス314によって示されるデータが配置されているメモリ内の特定のページである。
いくつかの実施形態では、ゲストページテーブル300内でテーブルウォークを実行して、仮想アドレス314に関連する物理アドレスを取得する場合、テーブルウォーカは、制御レジスタ(CR)312を読み出して、対応する仮想マシンに関連するページマップレベルテーブル(例えば、ページマップレベル4テーブル302)のメモリ内の位置を決定する。次に、テーブルウォーカは、次にウォークされるページディレクトリポインタテーブル(例えば、ページディレクトリポインタテーブル304)の位置を示すエントリ(「PML4E」と示されている)に対する仮想アドレス314からのビットのサブセット(例えば、64ビット仮想アドレスのうちビット39~47)を用いて、ページマップレベル4テーブル302を検索する(又は、「ウォークする」)。次いで、テーブルウォーカは、各テーブルをウォークし、ウォークされる次のテーブルを示すテーブル内のエントリ(「PDPE」及び「PDE」と示されている)を見つけるための仮想アドレス314からの対応するビットのサブセットを用いて、残りのテーブル(すなわち、ページディレクトリポインタテーブル304、ページディレクトリテーブル(例えば、ページディレクトリテーブル306)及びページテーブル(例えば、ページテーブル308))を進む。最終的に、テーブルウォーカは、ページテーブル308から取得した物理アドレス(ページテーブルエントリ又は「PTE」)を用いて、特定のメモリページ(例えば、メモリページ310)に到達する。テーブルウォーカは、仮想アドレス314のビットの対応する部分(例えば、64ビット仮想アドレスのビット0~11)を用いて、仮想アドレス314によって示されるデータを含むメモリページ310内のエントリ(データ)を決定する。テーブルウォーカが仮想アドレス314に対するアドレス変換を見つけることができない場合、エラー処理動作を実行する(例えば、ページフォルトを発行し、続いて処理する等)。
本明細書で説明するように、アドレス変換情報は、ゲストページテーブル300に追加された後に修正/変更、更新等されてもよい。例えば、ページがメモリ内の第1位置から第2位置へ移動され、第1仮想マシンから第2仮想マシンに再割り当てされた等の場合には、テーブルのセット内の1つ以上のテーブルがこれに応じて更新され得る。別の例として、ハイパーバイザは、例えばテーブルのセット内の1つ以上のテーブルに誤った情報又は古い/期限切れの情報を書き込むことによって、ゲストページテーブル300内のアドレスマッピングを不適切に(不正に、誤って等)更新することがある。説明する実施形態では、リバースマップテーブル228及びゲストアクセスページテーブル230を用いて、ゲストページテーブル300からの不適切に更新された情報を用いることを回避する。換言すれば、説明する実施形態では、例えば、メモリ内の各ページは、単一/固有のゲスト物理アドレスに関連することのみが許可され(ゲスト物理アドレスエイリアシングが認められない)、使用中のプライベートゲストページは、対応する仮想マシンを伴わずに再マッピングすることができない、不変ページは、本明細書で説明するようにコア208~209上で実行されているハイパーバイザ及び/又は他のソフトウェアエンティティによって書き込むことができない、等のルールを実行する。
図3には、特定の構成のテーブルが示されているが、いくつかの実施形態では、異なる数及び/又は構成のテーブルが用いられる。例えば、いくつかの実施形態では、単一のテーブルのみが用いられ、単一のテーブルが仮想アドレスを物理アドレスに(又は、例えば、仮想アドレスをゲスト物理アドレスに)マッピングする。
(リバースマップテーブル)
図4は、いくつかの実施形態による、リバースマップテーブル228を示すブロック図である。上述したように、リバースマップテーブル228は、とりわけ、ゲスト物理アドレスに対するネストページテーブル224のテーブルウォークが、以前用いられたシステム物理アドレスと一致するシステム物理アドレスを返すか否かを判別するために使用される情報を含む。
図4に示すように、リバースマップテーブル228は、多くのエントリ400を含む(図4において、エントリ400は、破線を用いて強調表示されている)。リバースマップテーブル228内の各エントリは、メモリ206内の対応するページに関する情報を含む(例えば、1つ以上の仮想マシンによる使用のために割り当てられ得るメモリ内の各4kBページ)。リバースマップテーブル228内のエントリは、各ページに関連付けられたシステム物理アドレスを用いてインデックスされ、これにより、各エントリは、特定のシステム物理アドレスに関連付けられる。例えば、4kBページの場合、リバースマップテーブル228内の第1エントリは、第1の又は最も低い割り当て可能なシステム物理アドレス(アドレスA)に関連付けられてもよく、第2エントリは、第2の割り当て可能なシステム物理アドレス(アドレスA+4kB)に関連付けられてもよい。このようにして、特定のシステム物理アドレスがリバースマップテーブル228内で検索される場合、リバースマップテーブル228内の対応するオフセットにおけるエントリが検索されてもよい。いくつかの実施形態では、リバースマップテーブル228のベースアドレスは、オフセットベースの検索を可能にするために、コンピューティングデバイス200内の指定された、おそらく安全な位置に記憶される。
リバースマップテーブル228では、各エントリ400は、グローバル共有ページインジケータ(GSP)402と、ゲスト識別子(ゲストID)404と、ゲスト物理アドレス(ゲストPHYADDR)406と、サブページカウント408と、アクセスインジケータ410と、サイズインジケータ412と、有効インジケータ414と、ロックインジケータ416と、不変インジケータ(IMMT)418と、を記憶するように構成されている。グローバル共有ページインジケータ402は、対応するページが2つ以上の仮想マシンによって共有されているか否かのインジケータである。共有ページについては、以下により詳細に説明する。
ゲスト識別子404は、対応するページが割り当てられた仮想マシンに関連付けられている識別子である。例えば、特定の仮想マシンの使用のために対応するページが割り当てられると、特定の仮想マシン用の識別子がゲスト識別子404に記憶される。ゲスト識別子404は、アドレス空間識別子(ASID)、ID文字列、名前、及び/又は、仮想マシンを具体的に識別する他の値を保持することができる。
ゲスト物理アドレス406は、エントリのシステム物理アドレスに関連付けられているゲスト物理アドレスを表す値である。例えば、所定のシステム物理アドレスのページが仮想マシンの使用のために割り当てられる場合、当該ページをアドレス指定するために仮想マシンによって使用されるゲスト物理アドレスは、リバースマップテーブル228内の対応するエントリ400内に記憶される。このようにして、各ページが割り当てられた仮想マシンによって使用される特定のゲスト物理アドレスのレコードが生成される。後述するように、この情報を記憶することによって、テーブルウォーカは、ネストページテーブルのウォークの間に取得されたシステム物理アドレスをいつチェックするのか、システム物理アドレスが、予想されるゲスト物理アドレスにマッピングされるか否か、すなわち、システム物理アドレスが2つの異なるゲスト物理アドレスに同時にマッピングさるか否かを判別することができる。これにより、ハイパーバイザ又は別のエンティティによってマッピングが不正に又は誤って変更されたか否かを検出することができる。
サブページカウント408は、大きいサイズのページ内の仮想マシンに割り当てられた、小さいサイズのページの数である。例えば、2MBページ及び4kBページをサポートするシステムでは、2MB境界上のページ(例えば、アドレスA、A+2MB、A+4MB等のページ)は、仮想マシンによる使用のために割り当てられた2MBページ内の4kBページの数を有することができる。大きいサイズのページ内で小さいページが割り当てられていることを前提として、すなわち、不適切なページサイズを用いて形成された許可されないアクセスを回避するために、サブページカウント値を用いて、大きいサイズのページへのアクセスが許可されないか否かを判別することができる。
アクセスインジケータ410は、対応するページが割り当てられている仮想マシンによって、対応するページがアクセスされた(読み出された、書き込まれた、更新された、及び/又は、他の方法でアクセスされた)か否かを示すインジケータである。所定のアクセスインジケータ410は、対応するページが割り当てられた仮想マシンによって当該対応するページが少なくとも1回アクセスされると、設定される。アクセスインジケータ410は、リバースマップテーブル228内のエントリがハイパーバイザによって更新されると、クリアされる。ゲストアクセスページテーブル230内の情報と、クリアされたアクセスビット410と、を用いて、対応するページが最後にアクセスされてからハイパーバイザがリバースマップテーブル228を更新したことを判別することができる。
サイズインジケータ412は、対応するページのアクセスに対する予想サイズである。例えば、コンピューティングデバイス200において4kBページ及び2MBページが使用されると想定すると、サイズインジケータ412は、何れのサイズのアクセスが要求されたかを示すことができる。サイズインジケータ412は、許容できないサイズのアクセス(例えば、実際には4kBページであるものの2MBのアクセス等)の検出が可能になる。
有効インジケータ414は、エントリ400が現在有効な情報を保持しているか否か、すなわち、エントリ400に現在存在する情報が古くなっているか、期限切れであるか又は利用可能であるか否かのインジケータである。有効インジケータ414は、リバースマップテーブル228内のエントリ400であって、失効しているが古い情報(削除されていない情報、ランダムビットパターン等)を依然として含み得るエントリ400であって、初期化されているが実際の情報を含まない等のエントリ400からの情報の使用を抑制するために用いられる。いくつかの実施形態では、ページが仮想マシン(又は、その上で実行されるゲストオペレーティングシステム)によって所有され、これにより、ページの変換されたアドレスがソフトウェアエンティティ(例えば、ハイパーバイザ等)に提供されていない(すなわち、可能な限り、テーブルウォーカがページにアクセスできないようになっている)場合に、有効インジケータ414が設定される。
ロックインジケータ416は、エントリ400がロックされているか否かを示すインジケータである。エントリ400は、ロックインジケータ416が設定されると「ロックされている」とみなされ、ロックインジケータ416がクリアされると「空き」又は「利用可能」とみなされる。エントリ400が所定のハードウェア又はソフトウェアエンティティによってロックされると、コンピューティングデバイス200内の他のハードウェア及びソフトウェアエンティティは、エントリ400にアクセスすること(例えば、エントリ400を読み出す、書き込む/更新する等)が抑制される。一方、任意のハードウェア及びソフトウェアエンティティは、(可能性としてロックインジケータ416を設定した後に)空き/利用可能なエントリにアクセスすることが許可され得る。例えば、ロックインジケータ416が単一ビットであり、最初はクリアされている(例えば、0に設定されている)実施形態では、エンティティは、ロックインジケータ416を(例えば、1に)設定することができ、エントリ400に1回以上アクセスすることができ、エントリ400へのアクセスが終了したらロックインジケータ416をクリアすることができる。説明する実施形態では、ロックインジケータ416を用いて、競合状態と、エントリ400に対して同時の読み出し及び/又は書き込みが生じ得る他の状態と、を回避することができる。
不変インジケータ418は、対応するページが不変であるか否かを示すインジケータである。ページが不変である(すなわち、対応する不変インジケータ418を用いて、不変であるとマークされた)場合、当該ページは、コア208~209上で実行されているソフトウェアエンティティによって書き込まれない。また、ページは、任意のコア208~209によって割り当て解除されることが許可されておらず、代わりにプラットフォームセキュリティプロセッサ232によって割り当て解除される。不変ページについては、以下により詳細に説明する。
リバースマップテーブル228は、各エントリ内の様々な情報を用いて説明されているが、いくつかの実施形態では、異なる構成又はタイプの情報が各エントリ内に存在してもよい。概して、リバースマップテーブル228内のエントリ400は、本明細書で説明する動作を実行するのに十分な情報を含む。
(ゲストアクセスページテーブル)
図5は、いくつかの実施形態による、ゲストアクセスページテーブル230を示すブロック図である。上述したように、ゲストアクセスページテーブル230は、対応する仮想マシンが、当該仮想マシンの使用のために割り当てられたメモリ領域に以前アクセスされたページを有するとして記憶されているか否かを判別するために用いられる情報を含む。
図5に示すように、ゲストアクセスページテーブル230は、多くのインジケータ500を含む(図5において、インジケータ500は、破線を用いて強調表示されている)。説明する実施形態では、各ゲストアクセスページテーブル230は、対応する仮想マシンの使用のために割り当てられたメモリの各ページ(例えば、4kBページ)に対するインジケータ500を含む。各インジケータ500は、仮想マシンが対応するページにアクセスしたか否かを判別するために使用される情報を含む。例えば、インジケータは、対応するページがアクセスされていないことを示すために0に設定され、対応するページがアクセスされたことを示すために1に設定される単一のビットを含んでもよい。
ゲストアクセスページテーブル230は多くのインジケータ500を有するものとして説明しているが、いくつかの実施形態では、ゲストアクセスページテーブル230には、異なる構成又はタイプの情報が存在する。概して、ゲストアクセスページテーブル230は、仮想マシンが特定のページにアクセスしたか否かの判別を可能にする十分な情報を含む。
(不変ページ)
説明する実施形態では、メモリのページを不変であるとして処理することができる。不変ページは、コア(例えば、コア208~209)上で実行されているソフトウェアエンティティ(例えば、ハイパーバイザ、ゲストオペレーティングシステム、アプリケーションプログラム等)によって書き込むことができないページである。換言すれば、不変ページは、何れかのソフトウェアエンティティによって全体的又は部分的に書き換えられ、更新され、修正され、追加され又は削除される等が抑制される。また、不変ページは、プラットフォームセキュリティプロセッサ(例えば、プラットフォームセキュリティプロセッサ232)によって割り当て解除され、例えば、コア208~209等のコア(例えば、実行されているソフトウェアエンティティ(例えば、ハイパーバイザ等)の代わりに又はソフトウェアエンティティの制御下で動作するコア)によって割り当て解除することができない。
いくつかの実施形態では、ページを不変であるとマークして、当該ページをソフトウェアエンティティによる不要な書き込み又は他の変更から保護することができる。例えば、通常、ハードウェアを介して(例えば、プラットフォームセキュリティプロセッサ232を介して)のみアクセスされるページを、不変であるとマークしてもよい。このようなページは、ゲストアクセスページテーブル230がメモリ206内に記憶されているページ及び/又は機密情報(例えば、保持された仮想マシンレジスタ状態等)を記憶するために用いられるページを含むことができる。説明したようにページを不変であるとマークすることは、以前のバージョン及びおそらく期限切れのバージョンのページ(暗号化されたページを含む)が所望/現在のページの場所に不正に又は誤って置き換えられる「リプレイ」アタックを抑制することができる。
いくつかの実施形態では、上述した不変インジケータ(すなわち、不変インジケータ418)を、有効インジケータ(すなわち、有効インジケータ414)と、ページのアクセスの共有/プライベートタイプの表示と共に用いて、アクセス仮想マシン(すなわち、その上で実行されるゲストオペレーティングシステム)に対して、ページの読み出し専用(RO)アクセス又は読み出し/書き込み(R/W)アクセスを行うことを許可するか否かを判別することができる。例えば、アクセス用の物理アドレス又はそうでなければアクセスに関連する物理アドレスに含まれる「cビット」を、ゲストオペレーティングシステムの共有/プライベートタイプのアクセスの指標として用いてもよい(例えば、cビット=0は共有アクセス用、cビット=1はプライベートアクセス用)。例えば、有効インジケータ及び不変インジケータが両方ともクリアされている場合(例えば、0に設定されている)、ページがゲストオペレーティングシステムによって所有されていない(すなわち、アクセスされている)ため、当該ページを「ハイパーバイザ所有」とみなすことができる。この場合、ハイパーバイザは、ページに対するR/Wアクセスを有し、ゲストオペレーティングシステムは、アクセスが共有ページに対する場合(例えば、cビット=0)にR/Wアクセスを有し、アクセスがプライベートページに対する場合(例えば、cビット=1)にROアクセスを有する。別の例として、有効インジケータが設定され、不変インジケータがクリアされている場合、ページをゲスト所有(すなわち、特定のゲストオペレーティングシステムが所有している)とみなすことができる。この場合、ハイパーバイザは、ROアクセスを有し、ゲストオペレーティングシステムは、アクセスが共有ページに対する場合(例えば、cビット=0)にR/Wアクセスを有し、アクセスがプライベートページに対する場合(例えば、cビット=1)であって、本明細書で説明するようにゲストアクセスページテーブルのチェックが、ゲストがページにアクセスしたことを示す場合に、R/Wアクセスを有する。別の例として、有効インジケータ及び不変インジケータが両方とも設定されている場合、ページは不変であるとみなされる。この場合、ハイパーバイザ及びゲストオペレーティングシステムは、共有/プライベートタイプのアクセスに関係なく、全てROアクセスを有する。
(リバースマップテーブルの初期化)
いくつかの実施形態では、コンピューティングデバイスが初期化されているときに(例えば、起動動作中に)、リバースマップテーブル228が初期化される。図10は、いくつかの実施形態による、リバースマップテーブル228を初期化するプロセスを示すブロック図である。図10に示す動作を、いくつかの実施形態で実行される動作の一般的な例として示す。他の実施形態によって実行される動作は、異なる動作、及び/又は、異なる順序で実行される動作を含む。さらに、動作を説明する際に特定のメカニズム/要素(例えば、プラットフォームセキュリティプロセッサ等)を用いているが、いくつかの実施形態では、他のメカニズムが動作を実行し、及び/又は、動作が他のメカニズム/要素上で実行される。
図10に示すプロセスは、ソフトウェアエンティティ(例えば、オペレーティングシステム、ハイパーバイザ等)が、リバースマップテーブル228を記憶するためにメモリ領域を割り当てる場合に開始する(ステップ1000)。例えば、ソフトウェアエンティティは、リバースマップテーブル228に対して、特定のサイズのメモリのブロック又は一部を見つけて予約するための1つ以上の動作を実行することができる。
次に、ソフトウェアエンティティは、リバースマップテーブル228内のエントリを初期値に設定する(ステップ1002)。例えば、ソフトウェアエンティティは、メモリ内の割り当てられた領域内のリバースマップテーブル228内の各エントリに0を書き込んでもよい。このようにエントリを設定することによって、ソフトウェアエンティティは、リバースマップテーブル228に依存する後続の動作に影響を及ぼし得る不正な又は誤った情報をリバースマップテーブル228が最初に含まないことを確実にする。換言すれば、この動作の間、ソフトウェアエンティティは、初期値のみを含むリバースマップテーブル228をメモリに生成する。
次いで、ソフトウェアエンティティは、メモリ内のリバースマップテーブル228の位置(例えば、開始アドレス及びサイズ)の指標を用いて、各コア(例えば、コア208~209)の対応するレジスタ(又は、他のメモリ位置)を更新する(ステップ1004)。いくつかの実施形態では、レジスタ(又は、他のメモリ位置)は、コンピューティングデバイスの後続の動作中の更新から保護されている。例えば、各コア内の専用レジスタ(例えば、マシンステートレジスタ(例えば、ロックビットを有するレジスタ等))を用いて、リバースマップテーブル228の位置の指標を保持することができる。
次に、ソフトウェアエンティティは、1つ以上の特定のページに対するリバースマップテーブルエントリ内の不変インジケータを設定する(ステップ1006)。例えば、リバースマップテーブル228自体がメモリに記憶されているページに関連するエントリに対して、ゲストアクセスページテーブルが記憶されるページに対して、仮想マシンレジスタ状態が記憶されるページに対して、不変インジケータを(例えば、1又は別の値に)設定することができる。この動作中に、ソフトウェアエンティティは、1つ以上のRMT_UPDATEコマンドを実行して、リバースマップテーブル228内の特定の不変インジケータを設定してもよい。説明したように不変インジケータを設定すると、ソフトウェアエンティティ(例えば、ハイパーバイザ等を含む)は、対応するページを後で更新することが抑制されることを思い出されたい。
次いで、ソフトウェアエンティティは、プラットフォームセキュリティプロセッサに対して、リバースマップテーブル内のエントリの内容の検証を行わせる(ステップ1008)。例えば、ソフトウェアエンティティは、リバースマップテーブル228を初期化した後のある時点でプラットフォームセキュリティプロセッサのINIT機能を呼び出してもよい。INIT機能は、プラットフォームセキュリティプロセッサに対して、リバースマップテーブル228をチェックさせて、特定のページのエントリにおいて不変インジケータが設定されていることと、リバースマップテーブル228内の他のエントリ(すなわち、特定のページのエントリとは別のエントリ)が初期値を含むことと、を検証させる。そうである場合には、プラットフォームセキュリティプロセッサは、是正措置を行うことなくINIT動作を完了してもよく、その結果、リバースマップテーブル228が、本明細書で説明したような使用に備えて解放される。そうでない場合には、プラットフォームセキュリティプロセッサは、1つ以上のエントリが誤った初期値に設定された場合に、是正措置(例えば、障害又はエラーをアサートする、ゲストオペレーティングシステムが起動するのを抑制する等)を実行してもよい。このようにして、プラットフォームセキュリティプロセッサは、リバースマップテーブル228の使用を可能にする前にリバースマップテーブル228が正しい状態にあることを確実にする。
いくつかの実施形態では、プラットフォームセキュリティプロセッサは、リバースマップテーブル228の初期化に関する上述のチェックに加えて他の役割を有する。例えば、いくつかの実施形態では、プラットフォームセキュリティプロセッサは、ゲストオペレーティングシステム(又は、仮想マシン)間でページを移動することと、ゲストオペレーティングシステムに対するリバースマップテーブル228間でリバースマップテーブル228内の対応するエントリの状態を転送することと、に関する動作(例えば、暗号化、パッケージング等)を行う。別の例として、いくつかの実施形態では、プラットフォームセキュリティプロセッサは、不変であるとマークされたページを割り当て解除する役割を果たし、このようなページの割り当て解除が許可された唯一のエンティティであってもよい。
(リバースマップテーブルの更新)
図6は、いくつかの実施形態による、リバースマップテーブル228を更新するプロセスを示すブロック図である。図6に示す動作を、いくつかの実施形態で実行される動作の一般的な例として示す。他の実施形態によって実行される動作は、異なる動作、及び/又は、異なる順序で実行される動作を含む。さらに、動作を説明する際に特定のメカニズム/要素(例えば、ハイパーバイザ等)を用いているが、いくつかの実施形態では、他のメカニズムが動作を実行し、及び/又は、動作が他のメカニズム/要素上で実行される。
図6に示すプロセスは、コンピューティングデバイス内のハイパーバイザが、メモリ内のページを仮想マシンに割り当てる場合に開始する(ステップ600)。例えば、ハイパーバイザは、仮想マシンの使用のためにメモリ領域を割り当てる際に、特定のページをメモリ領域内の他のページと共に割り当てることができる。割り当ては、仮想マシンが1つ以上のページの割り当て等を要求するときの仮想マシンの動作中に仮想マシンが新たに初期化される場合に実行することができる。割り当て中に、ハイパーバイザは、ネストページテーブルを、対応するゲスト物理アドレスを用いてシステム物理アドレス情報に更新することができる。
ページを割り当てると、ハイパーバイザは、当該ページに関連するRMT_UPDATE要求をコンピューティングデバイス内のプロセッサに送信する(ステップ602)。ハイパーバイザは、RMT_UPDATE要求をプロセッサに送信する場合、対応する命令(例えば、特別なCPU命令等)を実行し、専用レジスタ(例えば、モデル固有レジスタ等)にアクセスすること、及び/又は、別のメカニズムを用いることができる。プロセッサは、RMT_UPDATE要求によって、メモリのページに関連するリバースマップテーブル228内のエントリを更新するための動作を実行する。いくつかの実施形態では、RMT_UPDATE要求は、他の送信元(例えば、仮想マシン等)から情報を取得することなくリバースマップテーブル228内のエントリの更新を可能にするのに十分な情報を含む。例えば、RMT_UPDATE要求は、ページが配置されているシステム物理アドレス、ページをアドレス指定するために仮想マシンによって使用されるゲスト物理アドレス、仮想マシンの識別子、ページサイズ、ページが共有されているか否かの指標、ページを不変であるとマークする要求、リバースマップテーブル228内のエントリをロックする要求、及び/又は、他の情報を含むことができる。他の実施形態では、プロセッサは、この情報の一部又は全てを別の送信元から取得する。例えば、ハイパーバイザ及び/又は仮想マシンは、ページに関する情報を特定のメモリ素子(例えば、メモリ206、専用レジスタ等)に書き込むことができ、プロセッサは、当該情報を取得するためにメモリ素子を読み出すことができる。別の例として、プロセッサは、ハイパーバイザ及び/又は仮想マシンからの情報を要求してもよい。
次に、プロセッサは、リバースマップテーブル228内のエントリに対してロックを設定する(ステップ604)。この動作中、プロセッサは、エントリ内のロックインジケータを、エントリがロックされていることを示す値(例えば、1又は別の値)に設定する。このようにロックインジケータを設定することによって、プロセッサは、他のハードウェア又はソフトウェアエンティティが、リバースマップテーブル228内のエントリを更新又は他の方法で変更することができないように当該エントリを構成する。このようにして、例えばエンティティ間で競合状態が生じた場合のように、2つ以上のエンティティによるエントリの同時の及び場合によっては誤った変更を回避することができる。
次いで、プロセッサは、ページが不変ではないと判別する(ステップ606)。この動作中、プロセッサは、リバースマップテーブル228内のエントリから不変インジケータの値を取得し、不変インジケータが、ページが不変であることを示す値に設定されているか否かを判別する。この例の場合、ページは不変ではないため、上述したように書き込みが可能であると想定されている。エントリが不変であった場合、プロセッサは、当該エントリに対するロックを解除し(例えば、ロックインジケータを0に設定し)、RMT_UPDATE動作を失敗させる。これは是正措置を実行することを含んでもよい。
次に、プロセッサは、ページに関する情報に基づいてリバースマップテーブル228内のエントリを更新しても、リバースマップテーブル内に既に存在する情報と競合しないことを判別するする(ステップ608)。例えば、プロセッサは、ページのサイズを1つ以上の他のエントリ内のページサイズと比較して、当該ページの情報が、1つ以上の既存のページと重複するページを記述していないことを確実にしてもよい。例えば、プロセッサは、小さいページ(例えば、4kB)についての情報が、リバースマップテーブル228内のエントリであって、リバースマップテーブル228内の別の位置における大きいページ(例えば、2MB)に使用されるシステム物理アドレスのセット内にシステム物理アドレスが含まれるエントリに書き込まれないことを判別する。換言すれば、プロセッサは、小さいページが大きいページと重複しないと判別する。同様に、プロセッサは、大きいページが1つ以上の小さいページと重複しないと判別してもよい。競合が検出された場合、プロセッサは、是正措置(例えば、ハイパーバイザ及び/又は仮想マシンに障害を提起する、エラーを通知する等)を行ってもよい。
次いで、プロセッサは、ページに対するリバースマップテーブルの更新を行う(ステップ610)。リバースマップテーブル228の更新中に、プロセッサは、ページについての上述した情報(すなわち、システム物理アドレス、ゲスト物理アドレス、仮想マシンの識別子、ページサイズ等)の一部又は全てを、リバースマップテーブル228のエントリ内の対応するフィールドに書き込む。更新が完了すると、リバースマップテーブル228は、エントリ用のシステム物理アドレスが何れのゲスト物理アドレスにマッピングするか、ページにアクセスできる特定の仮想マシン等を決定するために、コンピューティングデバイス(例えば、テーブルウォーカ等)内の情報のコンシューマにとって十分な情報を当該エントリに含む。
プロセッサは、リバースマップテーブル228を更新する場合に、エントリに対するアクセスインジケータを、当該エントリが対応する仮想マシンによって未だアクセスされていないことを示す値(例えば、0)に設定する。このようにして、プロセッサは、リバースマップテーブル228内のエントリがハイパーバイザによって更新されたという情報をコンシューマに示すようにエントリを構成する。これは、ハイパーバイザが不正に、誤って等によりリバースマップテーブル228を変更するケースを回避するのを助けることができる。
いくつかの実施形態では、エントリが以前に有効であった場合、すなわち、リバースマップテーブル228内に既に存在していた情報が更新によって上書きされた場合、プロセッサは、コンピューティングデバイスのTLBから関連する情報をフラッシュすることができる(及び、単にTLBからの情報を全てフラッシュしてもよい)。このようにして、プロセッサは、上書きされているシステム物理アドレス及び/又はゲスト物理アドレスに関連する変換情報の古くなったコピーをTLBから削除する。
いくつかの実施形態では、プロセッサは、リバースマップテーブル228内のエントリを更新する場合に、1つ以上のエントリに対するサブページカウントを更新する。例えば、プロセッサは、所定の小さいページについて、当該小さいページが存在し得る1つ以上の大きいページのエントリを見つけて更新する。例えば、エントリが4kBページに関する情報で更新されると、プロセッサは、大きいページ(それ自体は割り当てられてなくてもよい)のエントリに関する情報を更新して、大きいページの領域が小さいページを含むことを反映する。このようにして、プロセッサは、ページの情報に基づくリバースマップテーブル228の更新が、リバースマップテーブル内に既に存在する情報と競合しないというステップ604での判別を単純にするために、テーブルに情報を追加する。すなわち、プロセッサは、リバースマップテーブル228内の対応する小さいページエントリの各々をチェックすることなく、サブページカウントからの情報だけを使用して、大きいページのエントリの更新を停止することができるように、サブページカウントを設定する。
プロセッサは、リバースマップテーブル228の更新を完了した後に、リバースマップテーブル228内のエントリに対するロックをクリアする(ステップ612)。この動作中、プロセッサは、エントリ内のロックインジケータを、エントリがロックされていないことを示す値(例えば、0又は別の値)にクリアする。更新後にこのようにロックインジケータをクリアすることによって、プロセッサは、他のハードウェア又はソフトウェアエンティティがロックを取得してエントリを更新する又は他の方法で変更可能となるように、エントリを再構成する。
後続の動作中に、ハイパーバイザは、ページのマッピングを更新するか否かを判別する(ステップ614)。例えば、対応する仮想マシンがもはやページを用いていないので、ハイパーバイザが当該ページを異なる仮想マシンに割り当てることにより、既存のシステム物理アドレスに関連するゲスト物理アドレスの更新が必要になる。判別をすると、ハイパーバイザは、ステップ602~612を実行して、リバースマップテーブル228内の対応するエントリを更新する。上述したように、更新中に、プロセッサは、ページに関する上述した情報(すなわち、システム物理アドレス、ゲスト物理アドレス、仮想マシンの識別子、ページサイズ等)の一部又は全てを、リバースマップテーブルのエントリ内の対応するフィールドに書き込む。また、プロセッサは、アクセスインジケータを0に設定して、リバースマップテーブル228内のエントリが更新されたことを示す。ページのマッピングを更新しない場合(ステップ614)、プロセスは終了する。
RMT_UPDATE動作は、対応するページの割り当てに関連するものとして説明しているが、RMT_UPDATE動作は、ページが割り当てられたときにのみ使用されることに限定されない。概して、RMT_UPDATE動作は、リバースマップテーブル内のエントリがハイパーバイザ(又は、コンピューティングデバイス内の別のソフトウェアエンティティ)によって更新されるときにはいつでも実行することができる。換言すれば、ステップ602~612の動作は、対応するページの割り当て以外の理由でリバースマップテーブル内のエントリを更新する場合に実行することができる。これは、単にリバースマップテーブル228に対する一般的な「更新」であるステップ614で示されている。
図6に示すように、ハイパーバイザ(及び、他のソフトウェアエンティティ)は、リバースマップテーブル228に「直接」アクセスできない。その代わりに、ハイパーバイザは、RMT_UPDATE要求を送信し、プロセッサは、上述したように更新を処理する(アクセスインジケータをクリアすることを含む)。リバースマップテーブル228に対するハイパーバイザのアクセスを、説明したRMT_UPDATE動作に限定することによって、説明する実施形態では、ハイパーバイザがネストページテーブル及びリバースマップテーブル228の両方を不正に、誤って等により更新することによって、場合によってはネストページテーブルの更新が隠れる状況を回避する。
いくつかの実施形態では、ハイパーバイザが特定の仮想マシンを終了させる場合には、ハイパーバイザは、仮想マシンに割り当てたページを回収し、続けて、ネストページテーブル及びリバースマップテーブル228を変更することによって、ページを再割り当てする。なお、不変ページの割り当て解除は、プラットフォームセキュリティプロセッサを介して行われることに留意されたい。プラットフォームセキュリティプロセッサは、ソフトウェアエンティティが、プラットフォームセキュリティプロセッサに対してページの割り当て解除の実施を要求することを可能にするように、ソフトウェアエンティティ(例えば、ハイパーバイザ)へのインタフェースを提供してもよい。
(ゲストアクセスページテーブル内のインジケータのクリア)
図7は、いくつかの実施形態による、ゲストアクセスページテーブル230内のインジケータをクリアするプロセスを示すブロック図である。図7に示す動作を、いくつかの実施形態で実行される動作の一般的な例として示す。他の実施形態によって実行される動作は、異なる動作、及び/又は、異なる順序で実行される動作を含む。さらに、動作を説明する際に特定のメカニズム/要素(例えば、仮想マシン等)を用いているが、いくつかの実施形態では、他のメカニズムが動作を実行し、及び/又は、動作が他のメカニズム/要素上で実行される。
図7の例の場合、図8~図9の動作が実行されたものと想定している。換言すれば、メモリのページは、既に、テーブルウォーカによってアクセスされたものとしてマークされている。
図7に示すプロセスは、メモリのページを解放することを仮想マシンが判別した場合に開始する(ステップ700)。例えば、仮想マシンは、割り当てられたページがもはや用いられておらず、したがってハイパーバイザによる再割り当てのために返してもよいと判別することができる。
次に、仮想マシンは、プロセッサに対して、ページに関連するGAP_FREE要求を送信する(ステップ702)。GAP_FREE要求によって、プロセッサは、仮想マシンに関連するゲストアクセスページテーブル230内のエントリを更新するための動作を実行する。いくつかの実施形態では、GAP_FREE要求は、ページ(例えば、ゲスト物理アドレス)、ページのサイズ、及び/又は、要求元の仮想マシン(例えば、ゲストID(例えば、仮想マシンのアドレス空間識別子))を識別する情報を含む。
次いで、プロセッサは、仮想マシンがリバースマップテーブル228内のページにアクセスしたものとして示されていると判別する(ステップ704)。例えば、プロセッサは、リバースマップテーブル228内の対応するエントリから情報を取得して、当該エントリが有効であること、当該エントリからのゲスト物理アドレスが、要求からのページを識別する情報と一致すること、(例えば、エントリ内のアクセスインジケータをチェックすることによって)ページがアクセスされたとリバースマップテーブル228が示していること、ゲストIDが要求元の仮想マシンのゲストIDと一致すること、エントリからのページサイズがGAP_FREEで示されたページのサイズと一致すること、を検証してもよく、及び/又は、他のチェックを行ってもよい。仮想マシンがページにアクセスしたと示されていない場合、プロセッサは、是正措置(例えば、仮想マシン及び/又はハイパーバイザに障害を提起する、エラーを通知する等)を行う。
次に、プロセッサは、ページに対するゲストアクセスページテーブル230の更新を行う(ステップ706)。ゲストアクセスページテーブル230の更新中に、プロセッサは、ページのインジケータを特定の値(例えば、0)に設定して、当該ページが仮想マシンによってアクセスされていないことを示す。更新が完了すると、ゲストアクセスページテーブル230は、仮想マシンが対応するページにアクセスしていないと判別するために、コンピューティングデバイス(例えば、テーブルウォーカ等)内の情報のコンシューマにとって十分な情報を、対応するインジケータ内に含む。
また、プロセッサは、説明したようにゲストアクセスページテーブル230を更新する場合、リバースマップテーブル228内の対応するエントリを更新して、ページが仮想マシンによってアクセスされていないことを示す。例えば、プロセッサは、RMT_UPDATE動作を介して、リバースマップテーブル228内の対応するエントリにおいて、アクセスインジケータを、ページがアクセスされていないことを示す値(例えば、0)に設定することができる。このようにして、プロセッサは、ページに対するゲストアクセスページテーブル230内のインジケータと、リバースマップテーブル228内のアクセスインジケータとが、ページがアクセスされていないか否かに関して互いに一致することを確実にする。いくつかの実施形態では、リバースマップテーブル228の更新が失敗するか拒否されると(例えば、リバースマップテーブル228内のロックされたエントリにより)、ゲストアクセスページテーブルの更新も失敗する。
いくつかの実施形態では、GAP_FREE動作は、ゲストアクセスページテーブル230にアクセスするために仮想マシンにとって利用可能な唯一のメカニズムである。換言すれば、これらの実施形態では、仮想マシンは、直接アクセスすることがブロックされ、したがってゲストアクセスページテーブル230に単純に値を書き込むことができない。仮想マシンにGAP_FREE動作を使用させることにより、例えば、仮想マシンがゲストアクセスページテーブル230を更新する場合に、上述したようにリバースマップテーブル228がチェック及び更新されることを確実にする。
(リバースマップテーブル及びゲストアクセスページテーブルの使用)
図8は、いくつかの実施形態による、リバースマップテーブル及びゲストアクセスページテーブルを用いるプロセスを示すブロック図である。図8に示す動作を、いくつかの実施形態で実行される動作の一般的な例として示す。他の実施形態によって実行される動作は、異なる動作、及び/又は、異なる順序で実行される動作を含む。さらに、動作を説明する際に特定のメカニズム/要素(例えば、プロセッサ等)を用いているが、いくつかの実施形態では、他のメカニズムが動作を実行し、及び/又は、動作が他のメカニズム/要素上で実行される。
図8に示すプロセスは、テーブルウォーカ(例えば、メモリ管理ユニット内のハードウェアテーブルウォーカ)が、所定の仮想アドレスからシステム物理アドレスに変換する要求をプロセッサ(例えば、プロセッサ内のロード/ストアユニット)から受信した場合に開始する(ステップ800)。例えば、プロセッサは、仮想マシン及び/又は対応するゲストオペレーティングシステムの実行中に、仮想マシンの所定の仮想アドレスでメモリアクセスを行う要求に遭遇することがある。次に、プロセッサは、所定の仮想アドレスからシステム物理アドレスへの変換の要求をテーブルウォーカに送信してもよい。
次に、テーブルウォーカは、対応するゲストページテーブル及びネストページテーブル内でテーブルウォークを実行し、最終的に仮想アドレスに関連するシステム物理アドレスを取得する(ステップ802)。テーブルウォーカは、ページテーブルウォーク中にシステム物理アドレスを取得する間に、ネストページテーブル(又は、他の場所)から他の情報(例えば、ページのサイズ等)を取得してもよい。また、プロセッサは、テーブルウォークの実行を回避するために、変換のキャッシュされたコピーを見つけるための試みにおいて1つ以上のTLBをチェックすることができる。しかし、この例では、変換のキャッシュされたコピーは使用できないと想定されている。
テーブルウォーカは、システム物理アドレスを取得すると、リバースマップテーブル及びゲストアクセスページテーブルのうち少なくとも一方をチェックして、仮想マシンが対応するページにアクセスしたか否かを判別する(ステップ804)。図9は、いくつかの実施形態による、リバースマップテーブル及びゲストアクセスページテーブルのうち少なくとも一方をチェックして、仮想マシンが対応するページにアクセスしたか否かを判別するプロセスを示すブロック図である。図9に示す動作を、いくつかの実施形態で実行される動作の一般的な例として示す。他の実施形態によって実行される動作は、異なる動作、及び/又は、異なる順序で実行される動作を含む。さらに、動作を説明する際に特定のメカニズム/要素(例えば、テーブルウォーカ等)を用いているが、いくつかの実施形態では、他のメカニズムが動作を実行し、及び/又は、動作が他のメカニズム/要素上で実行される。
図9に示すように、プロセスは、テーブルウォーカが、システム物理アドレスに関連するエントリ内のリバースマップテーブル228から情報を取得する場合に開始する(ステップ900)。例えば、テーブルウォーカは、システム物理アドレスに比例するか他の方法に基づくリバースマップテーブル228のベースアドレスからのオフセットにあるリバースマップテーブル228内のエントリから情報を取得することができる。上述したように、いくつかの実施形態では、エントリからの情報は、記憶されたゲストID、記憶されたゲスト物理アドレス、記憶されたサブページカウント、記憶されたアクセスインジケータ、記憶されたサイズ、及び、有効インジケータの一部又は全てを含む。
次に、テーブルウォーカは、取得した情報に基づいて、仮想マシンがページにアクセスしたか否かを判別する(ステップ902)。例えば、テーブルウォーカは、有効なインジケータによって示されるように、エントリが有効であるか否かを判別することができる。別の例として、テーブルウォーカは、エントリからの記憶されたゲスト物理アドレスが、仮想マシンからの要求に関連する(すなわち、対応するテーブルウォーク中にゲストページテーブルから取得された)ゲスト物理アドレスと一致するか否かを判別することができる。別の例として、テーブルウォーカは、ネストページテーブルから取得したページサイズが、エントリからの記憶されたページサイズと一致するか否かを判別することができる。別の例として、テーブルウォーカは、エントリからの記憶されたゲストIDが、要求元の仮想マシンに関連する識別子と一致するか否かを判別することができる。別の例として、テーブルウォーカは、エントリに対する読み出し/書き込み許可(又は、読み出し/書き込み許可を表す値)が、メモリアクセスのタイプと一致するか否かを判別することができる。別の例として、テーブルウォーカは、アクセスが書き込みアクセスである(すなわち、読み出し専用アクセスではない)場合に、エントリが不変であるとマークされているか否かを判別することができる。別の例として、テーブルウォーカは、エントリがロックされているとマークされている(したがって、更新中又は変更中である可能性がある)か否かを判別することができる。テーブルウォーカは、取得した情報が、仮想マシンがページにアクセスできないことを示す場合(ステップ904)、仮想マシンがページにアクセスできないと判別する(ステップ906)。
テーブルウォーカは、取得した情報が、仮想マシンがページにアクセスしたことを示す場合(ステップ904)、取得した情報が、ページがアクセスされたと示しているかどうかを判別する(ステップ908)。例えば、テーブルウォーカは、取得した情報からのアクセスインジケータが、ページがアクセスされたことを示す特定の値(例えば、1)に設定されているか否かを判別することができる。ページがアクセスされた場合(例えば、メモリ動作が仮想マシンによる対応するページの最初のアクセスではない場合)、テーブルウォーカは、仮想マシンが当該ページにアクセスしたと判別する(ステップ910)。換言すれば、リバースマップテーブル228内のエントリからの情報が、少なくとも1つ前のアクセスが仮想マシンによるそのページへのアクセスであったことを示す場合、テーブルウォーカは、仮想マシンが当該ページにアクセスしたと判別する。アクセスインジケータは、ハイパーバイザが(RMT_UPDATE動作を介して)エントリを更新する毎にページがアクセスされたわけではないことを示す値に設定されているので、ゲスト物理アドレスからシステム物理アドレスへのマッピングが変化したことが示されているのを思い出されたい。アクセスインジケータは、ページがアクセスされたことを示すので、ハイパーバイザは、エントリを変更していないことが分かる。仮想マシンがアクセスしたことも分かっているので(ステップ904より)、ゲスト物理アドレスからシステム物理アドレスへの変換が使用されるのを許可するのが安全であることが分かる。
取得した情報が、ページがアクセスされていないことを示す場合、テーブルウォーカは、ページについてのゲストアクセスページテーブルインジケータが一致するアクセス情報を有するか否かを判別する(ステップ912)。より具体的には、テーブルウォーカは、リバースマップテーブル及びゲストアクセスページテーブルの両方が、ページがアクセスされていないことを示すことを検証する。上述したように、これらの値に不一致があると、ハイパーバイザ(及び/又は、別のエンティティ)が、リバースマップテーブル228内のエントリを更新したこと、及び、マッピングがもはや信頼できないことを示す。したがって、不一致又は他の不一致が生じると、テーブルウォーカは、仮想マシンがページにアクセスしていないと判別する(ステップ906)。
ページがアクセスされていないことを示す際に、ページについてのゲストアクセスページテーブルインジケータが、エントリからのアクセスインジケータと一致する(又は、他の方法で一致する)場合(ステップ912)、テーブルウォーカは、仮想マシンがページにアクセスしたと判別する(ステップ910)。
説明した実施形態では、ページに対するゲストアクセスページテーブルインジケータと、エントリからのアクセスインジケータとの両方が、ページがアクセスされていないことを示し、仮想マシンのプロセッサによってページのアクセスが行われる場合には(すなわち、図8~図9の動作と共に)、テーブルウォーカ(及び/又は、別のエンティティ)は、ページについてのゲストアクセスページテーブルインジケータと、リバースマップテーブル228内のエントリにおけるアクセスインジケータとを、ページがアクセスされたことを示す値(例えば、1)に設定する。このようにして、テーブルウォーカ(又は、他のエンティティ)は、ページがアクセスされたことを記憶する。
図8に戻って、仮想マシンが対応するページにアクセスしていない場合(ステップ806)、テーブルウォーカは、ゲスト物理アドレスからシステム物理アドレスへの変換を終了する(ステップ808)。例えば、テーブルウォーカは、障害をアサートしてもよいし、別の是正措置を行ってもよいし、及び/又は、変換を終了してもよいし、システム物理アドレスをプロセッサに提供しなくてもよい。そうではなく、仮想マシンが対応するページにアクセスした場合には(ステップ806)、テーブルウォーカは、ゲスト物理アドレスからシステム物理アドレスへの変換を完了する(ステップ810)。変換を完了することは、システム物理アドレスをプロセッサに提供することを含み、システム物理アドレスは、メモリにアクセスするために用いられる等してもよい。また、プロセッサは、後続の検索のために、返された仮想アドレスから物理アドレスへの変換(すなわち、仮想アドレスからシステム物理アドレスへの変換)をTLBにキャッシュすることができる。
上述したチェック動作は、特定の仮想マシンに割り当てられた(例えば、共有されていない)ページに対して2つのルールに従うことが確実になる。第1ルールは、メモリ内の各ページは、一度に1つのゲストアドレスのみに関連付けられているということである。このルールは、上記のステップ902~904の間に実施される。第2ルールは、特定の仮想マシンにのみ割り当てられた使用中のページは、仮想マシンが関与していない限りハイパーバイザによって再マッピングされてはならないということである。このルールは、図6の上述したRMT_UPDATE動作と、ステップ908~912のリバースマップテーブル228及びゲストアクセスページテーブル230のチェックと、を用いて実施される。
いくつかの実施形態では、ホストアクセス(例えば、ハイパーバイザ)のために実行されたテーブルウォークは、仮想マシン及び/又はゲストオペレーティングシステムのためのテーブルウォークと異なる方法で処理されてもよい。例えば、要求をハイパーバイザ/ホストから来たものと識別し、アクセスが書き込み用である(すなわち、読み出し専用でもなく命令フェッチ用でもない)ことを示す識別子を有する仮想アドレスから物理アドレスへの変換要求を受信すると、テーブルウォーカは、リバースマップテーブル228内の対応するエントリに対する有効なインジケータが、ゲストオペレーティングシステムがそのページを所有することを示すように設定されている場合、ロックインジケータがエントリに設定されている場合、小さいページが、ハイパーバイザによってアクセス可能/書き込み可能な大きいページ内にない場合、及び/又は、大きいページが、ハイパーバイザによってアクセス可能/書き込み可能でない1つ以上の小さいページを含む場合に、ページフォルトをアサートしてもよいし、別の是正措置を実行してもよい。なお、これらのチェックのうち最初のもの(すなわち、リバースマップテーブル228内の有効なインジケータのチェック)は、ハイパーバイザが書き込みアクセスによってプライベートゲストオペレーティングシステムページにアクセスしていないことを確実にするために使用されることに留意されたい。換言すれば、ハイパーバイザは、有効ビット(不変ビットを設定してもよい)を用いて、ゲストオペレーティングシステムが所有するページに書き込みアクセスを行うことが抑制される。
(共有ページ)
いくつかの実施形態では、メモリ内のページを2つ以上の仮想マシンによって共有することができる。換言すれば、個々のページは、2つ以上の仮想マシンによってアクセス可能であってもよい。例えば、共通ライブラリ(stdlib.h等)からのプログラムコード、アプリケーション、カーネルルーチン等を含むページを共有することができる。別の例として、仮想マシンによって読み出されるデータのページを共有することができる。いくつかの実施形態では、ページが共通に使用され、したがって少なくともいくつかの及びおそらく全ての仮想マシンによって共有可能であるという点で、共有ページはグローバルに共有されたページであってもよい。これらの実施形態では、コンピューティングデバイスは、共有ページへのアクセスを制御するための様々なメカニズムを使用する。例えば、いくつかの実施形態では、リバースマップテーブル228内のページのエントリ内のグローバル共有ページインジケータは、ページが共有されていることを示すために特定の値(例えば、1)に設定され、不変インジケータは、ページが不変であることを示すように設定され得る。いくつかの実施形態では、共有ページは、全ての仮想マシン間で(又は、少なくともページへの共有アクセスが許可された仮想マシン間で)共有されるキーを用いて暗号化される。
いくつかの実施形態では、共有ページに対して特定のタイプのアクセスのみが許可されている。例えば、共有ページに対する書き込みが許可されなくてもよい。いくつかの実施形態では、リバースマップテーブル228及びゲストアクセスページテーブル230の上述したチェック中に(ステップ806)、システムは、許可されないメモリアクセス(例えば、書き込み等)が実行されていないことを確実にするために、1つ以上のチェックを実行する。これらの実施形態では、テーブルウォーカは、メモリアクセスが共有ページに対して許可されていない場合、仮想マシンがページにアクセスしていないと判別することができる。
(暗号化ページ)
いくつかの実施形態では、所定の仮想マシンに割り当てられたメモリ内のページは、(セキュリティ対策として)所定の仮想マシンに固有のキーを用いて暗号化される。これらの実施形態では、仮想マシンは、対応するページが暗号化されているか否かを示す各ページに関連するインジケータを含んでもよい。いくつかの実施形態では、リバースマップテーブル228及びゲストアクセスページテーブル230の上述したチェックは、暗号化されていないページに対して実行されない(これらのページは、全体的に安全でない/信頼できないと推定されるため)。共有ページは、暗号化されていなくてもよいし、及び/又は、全ての仮想マシンに認識されているキーを用いて暗号化されていてもよい。
(リバースマップテーブル及びゲストアクセスページテーブルのチェックの有効化/無効化)
いくつかの実施形態では、リバースマップテーブル228及びゲストアクセスページテーブル230の上述したチェックを有効化及び無効化するために、ハードウェア又はソフトウェアスイッチが利用可能である。例えば、各仮想マシンには、上述したチェックを有効にするためにフラグ、レジスタ等に特定の値(例えば、1)を書き込むことができるソフトウェア内のフラグ、レジスタ等が設けられてもよい。これらの実施形態では、フラグ、レジスタ等が別の値(例えば、0)に設定されている場合、チェックが実行されない。
(仮想マシン以外のエンティティのチェック)
仮想マシンにページが割り当てられる実施形態について上述したが、いくつかの実施形態では、仮想マシン以外のエンティティは、不正なページの再マッピングから同様の方法で保護される。例えば、入出力メモリ管理ユニットは、同様のチェックを、周辺デバイスに関連するテーブル(すなわち、リバースマップテーブル及びゲストアクセスページと同等であるがIOMMU以外のテーブル)について同様のチェックを実行することができる。概して、説明する実施形態は、メモリ内のページにアクセスすることができるコンピューティングデバイス内の任意のエンティティを用いて実施可能である。
(ページ移動及び分割)
いくつかの実施形態では、ハイパーバイザは、メモリ内のメモリのページを移動する理由を有することがある。例えば、ページは、ページ保証のアクセスとして、より高速で小容量のメモリからより低速で大容量のメモリに移動されてもよいし、不均一メモリアクセス(NUMA)システム等においてアクセスコアに近づくようにメモリ内で移動されてもよい。メモリ内のページを移動させるための動作の一部として、コンピューティングデバイス内のプロセッサは、リバースマップテーブル228のエントリが移動を反映するように更新されている間、上述したロックインジケータを用いて、移動元及び移動先のページのリバースマップテーブル228のエントリをロックしてもよい。また、プロセッサは、様々なチェックを行って、エントリ内の情報(ページカウント、サイズ等)が一致し及び/又は互換性があることを確実にし、その結果、移動先のページのエントリが、移動後のページに適していることを確実にしてもよい。
いくつかの実施形態では、ハイパーバイザは、大きいサイズ(例えば、2MB)のページを仮想マシンに割り当てることができるが、後で、大きいページを多くの小さいページ(例えば、4kB)に分割することによって、大きいページを分割する理由がある。例えば、ハイパーバイザは、小さい4kBページを別々に移動し及び/又は大きい2MBページ内の小さいページのページ属性を変更する理由を有することがある。ページを分割するための動作の一部として、コンピューティングデバイス内のプロセッサは、リバースマップテーブル228のエントリが分割を反映するように更新されている間(すなわち、大きい及び小さいページのサイズ情報が更新されている間)、上述したロックインジケータを用いて、大きいページのリバースマップテーブル228のエントリをロックしてもよい。また、プロセッサは、大きいページを分割できること(すなわち、大きいページが有効であるとマークされていること、不変ではないこと、グローバルに共有されていないこと等)を確実するために、チェックを実行してもよい。
いくつかの実施形態では、コンピューティングデバイス(例えば、図2のコンピューティングデバイス200及び/又はその一部)は、非一時的なコンピュータ可読記憶媒体に記憶されたコード及び/又はデータを用いて、本明細書で説明した動作の一部又は全てを実行する。より具体的には、コンピューティングデバイスは、コンピュータ可読記憶媒体からコード及び/又はデータを読み出し、説明した動作を実行するときにコードを実行し及び/又はデータを使用する。
コンピュータ可読記憶媒体は、コンピューティングデバイスによって使用されるコード及び/又はデータを記憶する任意のデバイス、媒体又はこれらの組み合わせとすることができる。例えば、コンピュータ可読記憶媒体は、揮発性メモリ若しくは不揮発性メモリ(例えば、フラッシュメモリ、ランダムアクセスメモリ(eDRAM、RAM、SRAM、DRAM、DDR、DDR2/DDR3/DDR4 SDRAM))、読み出し専用メモリ(ROM)、及び/又は、磁気若しくは光学的記憶媒体(例えば、ディスクドライブ、磁気テープ、CD、DVD)を含むことができるが、これらに限定されない。
いくつかの実施形態では、1つ以上のハードウェアモジュールは、本明細書で説明する動作を実行するように構成されている。例えば、ハードウェアモジュールは、1つ以上のプロセッサ/コア/中央処理ユニット(CPU)、特定用途向け集積回路(ASIC)チップ、フィールドプログラマブルゲートアレイ(FPGA)、キャッシュコントローラ、メモリ管理ユニット、計算ユニット、組み込みプロセッサ、グラフィックスプロセッサ(GPU)/グラフィックスコア、パイプライン、アクセラレーテッド処理ユニット(APU)、及び/又は、他のプログラマブルロジックデバイスを含むことができるが、これらに限定されない。このようなハードウェアモジュールが起動されると、ハードウェアモジュールは、動作の一部又は全てを実行する。いくつかの実施形態では、ハードウェアモジュールは、動作を実行するための命令(プログラムコード、ファームウェア等)を実行することによって構成された1つ以上の汎用回路を含む。
いくつかの実施形態では、本明細書で説明した構造及びメカニズム(例えば、コンピューティングデバイス及び/又はその一部)の一部又は全てを表すデータ構造は、コンピューティングデバイスが読み出すことができるデータベース又は他のデータ構造であって、構造及びメカニズムを含むハードウェアを製造するために直接的又は間接的に用いることができるデータベース又は他のデータ構造を含む非一時的なコンピュータ可読記憶媒体に記憶される。例えば、データ構造は、例えばVerilog又はVHDL等の高水準設計言語(HDL)におけるハードウェア機能の動作レベル記述又はレジスタ転送レベル(RTL)記述であってもよい。この記述は、上述した構造及びメカニズムを含むハードウェアの機能を表す合成ライブラリからゲート/回路素子のリストを含むネットリストを生成するために当該記述を合成することができる合成ツールによって読まれてもよい。次に、ネットリストを配置及びルーティングして、マスクに適用される幾何学的形状を記述するデータセットを生成することができる。次いで、マスクを様々な半導体製造工程で使用して、上述した構造及びメカニズムに対応する1つ以上の半導体回路を製造することができる。代替として、コンピュータアクセス可能な記憶媒体上のデータベースは、ネットリスト(合成ライブラリ有り若しくは無し)、データセット、又は、必要に応じてGDS(Graphic Data System)IIデータであってもよい。
この説明では、いくつかの実施形態を説明する際に機能ブロックに言及する場合がある。概して、機能ブロックは、説明した動作を実行する1つ以上の相互に関連する回路を含む。いくつかの実施形態では、機能ブロック内の回路は、説明した動作を実行するためにプログラムコード(例えば、マイクロコード、ファームウェア、アプリケーション等)を実行する回路を含む。また、いくつかの実施形態を説明する際にエンティティに言及する場合がある。概して、エンティティは、ハードウェア機能ブロック(例えば、個々の回路若しくは回路素子、複雑な回路、ASIC、プロセッサ等)及び/又はソフトウェアプログラム(例えば、ルーチン、アプリケーション、機能等)であって、エンティティに帰属又は関連する動作を実行可能なものを含むことができる。
実施形態の前述の説明は、単に例示及び説明の目的で示されている。これらは、網羅的であること、又は、実施形態を開示された形態に限定することを意図していない。したがって、多くの変更及び変形が当業者には明らかであろう。さらに、上記の開示は、実施形態を限定することを意図していない。実施形態の範囲は、添付の特許請求の範囲によって定義される。

Claims (19)

  1. コンピューティングデバイス内の仮想マシンによってメモリアクセスを処理する方法であって、前記コンピューティングデバイスは、リバースマップテーブル(RMT)及び仮想マシン毎に個別のゲストアクセスページテーブル(GAPT)を含み、前記RMTは、複数のエントリを含み、各エントリは、メモリ内のデータの関連するページにアクセスすることが許可された仮想マシンを識別するための情報を含み、各GAPTは、対応する仮想マシンによってアクセスされているページのレコードを含み、
    前記方法は、
    テーブルウォーカにおいて、仮想アドレスをシステム物理アドレスに変換する要求を受信することであって、前記要求は、所定の仮想マシンから発せられたものである、ことと、
    対応するゲストページテーブルから前記仮想アドレスに関連するゲスト物理アドレスを取得し、ネストページテーブルから前記仮想アドレスに関連するシステム物理アドレスを取得することと、
    前記ゲスト物理アドレス及び前記システム物理アドレスに基づいて、前記RMT及び対応するGAPTのうち少なくとも一方をチェックして、前記所定の仮想マシンが対応するページにアクセスしたか否かを判別することと、
    前記所定の仮想マシンが前記対応するページにアクセスしていない場合に、前記仮想アドレスから前記システム物理アドレスへの変換を終了することと、を含む、
    方法。
  2. 前記RMT及び対応するGAPTのうち少なくとも一方をチェックすることは、
    前記システム物理アドレスに対応する前記RMT内のエントリが、前記所定の仮想マシンが前記対応するページにアクセスしていないことを示す情報を含む場合に、前記所定の仮想マシンが前記対応するページにアクセスしていないと判別することと、
    前記RMT内の前記エントリが、前記所定の仮想マシンが前記対応するページにアクセスしたことを示す情報を含む場合に、
    前記RMT内の前記エントリ内のページアクセス情報が、前記対応するページがアクセスされていないことを示し、且つ、前記対応するGAPT内の前記対応するページに対するページアクセス情報が、前記対応するページがアクセスされたことを示す場合に、前記所定の仮想マシンが前記対応するページにアクセスしていないと判別し、
    前記RMT内の前記エントリ内のページアクセス情報、及び、前記対応するGAPT内の前記対応するページに対するページアクセス情報の両方が、前記対応するページがアクセスされていないことを示す場合に、前記所定の仮想マシンが前記対応するページにアクセスしたと判別することと、を含む、
    請求項1の方法。
  3. 前記RMT内の前記エントリが有効であるとマークされていないことと、前記RMT内の前記エントリ内に記憶されたゲスト物理アドレスが、前記ゲスト物理アドレスと一致していないことと、のうち少なくとも1つが真である場合に、
    前記RMT内の前記エントリは、前記所定の仮想マシンが前記対応するページにアクセスしていないことを示す情報を含む、
    請求項2の方法。
  4. 前記RMT内の前記エントリ内に記憶された仮想マシン識別子が、前記所定の仮想マシンの識別子と一致していないことと、前記RMT内の前記エントリ内に記憶されたページサイズが、前記システム物理アドレスに関連するページサイズと一致していないことと、前記RMT内の前記エントリ内に記憶された読み出し/書き込み許可が、前記メモリアクセスの読み出し/書き込みタイプと一致していないことと、のうち少なくとも1つが真である場合に、
    前記RMT内の前記エントリは、前記所定の仮想マシンが前記対応するページにアクセスしていないことを示す情報をさらに含む、
    請求項3の方法。
  5. 前記RMT内のエントリを更新する要求を受信することと、
    前記RMT内の別のエントリ内の情報との間で競合が生じる場合に前記要求を終了することと、
    前記RMT内の前記エントリが有効であるとマークされている場合に、1つ以上の対応する変換索引バッファをフラッシュすることと、
    前記RMT内の前記エントリを更新することであって、前記RMT内の前記エントリ内のページアクセス情報を、前記対応するページがアクセスされていないことを示すように設定することを含む、ことと、をさらに含む、
    請求項2の方法。
  6. 所定のゲスト物理アドレスにおける所定のページに対するページアクセス情報を前記対応するGAPT内でクリアする要求を、前記所定の仮想マシンから受信することと、
    前記RMT内の対応するレコードが存在し、当該レコードがページアクセス情報をクリアするための候補であることを確認することと、
    前記対応するGAPT及び前記RMT内の前記所定のページに対するページアクセス情報をクリアすることと、をさらに含む、
    請求項2の方法。
  7. 1つ以上のページは、2つ以上の仮想マシン間でアクセスを共有することができるグローバルな共有ページであり、前記対応するページは、グローバルな共有ページであり、
    前記RMT内の前記エントリが、前記対応するページがグローバルに共有されており、前記メモリアクセスが共有ページに対して許可されないメモリアクセスであることを示す場合に、
    前記RMT内の前記エントリは、前記所定の仮想マシンが前記対応するページにアクセスしていないことを示す情報を含む、
    請求項2の方法。
  8. 前記コンピューティングデバイスによって実行されるハイパーバイザに対して、前記RMT及び前記GAPTに対する直接アクセスをブロックすることをさらに含み、
    前記ブロックすることは、
    前記RMT及び前記GAPTの一方又は両方を暗号化することと、
    前記RMT及び前記GAPTの一方又は両方を、前記ハイパーバイザが直接アクセスできない対応するメモリ領域に記憶することと、
    のうち少なくとも一方を含む、
    請求項1の方法。
  9. 前記所定の仮想マシンが前記対応するページにアクセスした場合に、前記仮想アドレスを前記システム物理アドレスに変換することを完了することであって、前記要求に応じて前記システム物理アドレスを返すことを含む、ことをさらに含む、
    請求項1の方法。
  10. 前記対応するページが共有されている場合に、前記RMT及び前記対応するGAPTのうち少なくとも一方をチェックすることなく、前記所定の仮想マシンが前記対応するページにアクセスしたと判別することをさらに含む、
    請求項9の方法。
  11. 仮想マシンによるメモリアクセスを処理するコンピューティングデバイスであって、
    プロセッサと、
    ハードウェアテーブルウォーカと、
    リバースマップテーブル(RMT)及び仮想マシン毎に個別のゲストアクセスページテーブル(GAPT)を記憶するメモリであって、前記RMTは、複数のエントリを含み、各エントリは、メモリ内のデータの関連するページにアクセスすることが許可された仮想マシンを識別するための情報を含み、各GAPTは、対応する仮想マシンによってアクセスされているページのレコードを含む、メモリと、を備え、
    前記ハードウェアテーブルウォーカは、
    仮想アドレスをシステム物理アドレスに変換する要求を受信することであって、前記要求は、所定の仮想マシンから発せられたものである、ことと、
    対応するゲストページテーブルから前記仮想アドレスに関連するゲスト物理アドレスを取得し、ネストページテーブルから前記仮想アドレスに関連するシステム物理アドレスを取得することと、
    前記ゲスト物理アドレス及び前記システム物理アドレスに基づいて、前記RMT及び対応するGAPTのうち少なくとも一方をチェックして、前記所定の仮想マシンが対応するページにアクセスしたか否かを判別することと、
    前記所定の仮想マシンが前記対応するページにアクセスしていない場合に、前記仮想アドレスから前記システム物理アドレスへの変換を終了することと、
    を行うように構成されている、
    コンピューティングデバイス。
  12. 前記RMT及び対応するGAPTのうち少なくとも一方をチェックすることは、
    前記システム物理アドレスに対応する前記RMT内のエントリが、前記所定の仮想マシンが前記対応するページにアクセスしていないことを示す情報を含む場合に、前記所定の仮想マシンが前記対応するページにアクセスしていないと判別することと、
    前記RMT内の前記エントリが、前記所定の仮想マシンが前記対応するページにアクセスしたことを示す情報を含む場合に、
    前記RMT内の前記エントリ内のページアクセス情報が、前記対応するページがアクセスされていないことを示し、且つ、前記対応するGAPT内の前記対応するページに対するページアクセス情報が、前記対応するページがアクセスされたことを示す場合に、前記所定の仮想マシンが前記対応するページにアクセスしていないと判別し、
    前記RMT内の前記エントリ内のページアクセス情報、及び、前記対応するGAPT内の前記対応するページに対するページアクセス情報の両方が、前記対応するページがアクセスされていないことを示す場合に、前記所定の仮想マシンが前記対応するページにアクセスしたと判別することと、を含む、
    請求項11のコンピューティングデバイス。
  13. 前記RMT内の前記エントリが有効であるとマーキングされていないことと、前記RMT内の前記エントリ内に記憶されたゲスト物理アドレスが、前記ゲスト物理アドレスと一致していないことと、のうち少なくとも1つが真である場合に、
    前記RMT内の前記エントリは、前記所定の仮想マシンが前記対応するページにアクセスしていないことを示す情報を含む、
    請求項12のコンピューティングデバイス。
  14. 前記RMT内の前記エントリ内に記憶された仮想マシン識別子が、前記所定の仮想マシンの識別子と一致していないことと、前記RMT内の前記エントリ内に記憶されたページサイズが、前記システム物理アドレスに関連するページサイズと一致していないことと、前記RMT内の前記エントリ内に記憶された読み出し/書き込み許可が、前記メモリアクセスの読み出し/書き込みタイプと一致していないことと、のうち少なくとも1つが真である場合に、
    前記RMT内の前記エントリは、前記所定の仮想マシンが前記対応するページにアクセスしていないことを示す情報をさらに含む、
    請求項13のコンピューティングデバイス。
  15. 前記プロセッサは、
    前記RMT内のエントリを更新する要求を受信することと、
    前記RMT内の別のエントリ内の情報との間で競合が生じる場合に前記要求を終了することと、
    前記RMT内の前記エントリが有効であるとマークされている場合に、1つ以上の対応する変換索引バッファをフラッシュすることと、
    前記RMT内の前記エントリを更新することであって、前記RMT内の前記エントリ内のページアクセス情報を、前記対応するページがアクセスされていないことを示すように設定することを含む、ことと、
    を行うように構成されている、
    請求項12のコンピューティングデバイス。
  16. 前記プロセッサは、
    所定のゲスト物理アドレスにおける所定のページに対するページアクセス情報を前記対応するGAPT内でクリアする要求を、前記所定の仮想マシンから受信することと、
    前記RMT内の対応するレコードが存在し、当該レコードがページアクセス情報をクリアするための候補であることを確認することと、
    前記対応するGAPT及び前記RMT内の前記所定のページに対するページアクセス情報をクリアすることと、
    を行うように構成されている、
    請求項12のコンピューティングデバイス。
  17. 1つ以上のページは、2つ以上の仮想マシン間で共有されるグローバルな共有ページであり、前記対応するページは、グローバルな共有ページであり、
    前記RMT内の前記エントリが、前記対応するページがグローバルに共有されており、前記メモリアクセスが共有ページに対して許可されないメモリアクセスであることを示す場合に、
    前記RMT内の前記エントリは、前記所定の仮想マシンが前記対応するページにアクセスしていないことを示す情報を含む、
    請求項12のコンピューティングデバイス。
  18. 前記テーブルウォーカは、
    前記所定の仮想マシンが前記対応するページにアクセスした場合に、前記仮想アドレスを前記システム物理アドレスに変換することを完了することであって、前記要求に応じて前記システム物理アドレスを返すことを含む、ことを行うように構成されている、
    請求項11のコンピューティングデバイス。
  19. 前記テーブルウォーカは、
    前記対応するページが共有されている場合に、前記RMT及び前記対応するGAPTのうち少なくとも一方をチェックすることなく、前記所定の仮想マシンが前記対応するページにアクセスしたと判別するように構成されている、
    請求項18のコンピューティングデバイス。
JP2019504712A 2016-07-29 2017-05-24 コンピューティングデバイスのメモリ内のページに対するアクセス制御 Active JP7177038B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US15/224,302 US10169244B2 (en) 2016-07-29 2016-07-29 Controlling access to pages in a memory in a computing device
US15/224,302 2016-07-29
US15/417,632 US10241931B2 (en) 2016-07-29 2017-01-27 Controlling access to pages in a memory in a computing device
US15/417,632 2017-01-27
PCT/US2017/034196 WO2018022178A1 (en) 2016-07-29 2017-05-24 Controlling Access to Pages in a Memory in a Computing Device

Publications (2)

Publication Number Publication Date
JP2019522298A JP2019522298A (ja) 2019-08-08
JP7177038B2 true JP7177038B2 (ja) 2022-11-22

Family

ID=61009960

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019504712A Active JP7177038B2 (ja) 2016-07-29 2017-05-24 コンピューティングデバイスのメモリ内のページに対するアクセス制御

Country Status (6)

Country Link
US (1) US10241931B2 (ja)
EP (1) EP3491520B1 (ja)
JP (1) JP7177038B2 (ja)
KR (1) KR102435949B1 (ja)
CN (1) CN109564522B (ja)
WO (1) WO2018022178A1 (ja)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10083129B2 (en) * 2016-08-29 2018-09-25 Red Hat Israel, Ltd. Code loading hardening by hypervisor page table switching
US10509733B2 (en) 2017-03-24 2019-12-17 Red Hat, Inc. Kernel same-page merging for encrypted memory
CN108733311B (zh) * 2017-04-17 2021-09-10 伊姆西Ip控股有限责任公司 用于管理存储系统的方法和设备
US10209917B2 (en) 2017-04-20 2019-02-19 Red Hat, Inc. Physical memory migration for secure encrypted virtual machines
US10379764B2 (en) * 2017-05-11 2019-08-13 Red Hat, Inc. Virtual machine page movement for encrypted memory
US11783064B2 (en) * 2017-07-10 2023-10-10 Intel Corporation Techniques to provide hardware enforced protection environment for a system management mode
US11354420B2 (en) 2017-07-21 2022-06-07 Red Hat, Inc. Re-duplication of de-duplicated encrypted memory
US10318435B2 (en) * 2017-08-22 2019-06-11 International Business Machines Corporation Ensuring forward progress for nested translations in a memory management unit
CN111133416A (zh) 2017-09-26 2020-05-08 英特尔公司 处理来自虚拟机命令的方法和装置
US10686605B2 (en) * 2017-09-29 2020-06-16 Intel Corporation Technologies for implementing mutually distrusting domains
US10613990B2 (en) 2017-12-05 2020-04-07 Red Hat, Inc. Host address space identifier for non-uniform memory access locality in virtual machines
US10838637B2 (en) 2018-02-08 2020-11-17 Micron Technology, Inc. Status management in storage backed memory package
CN110489052B (zh) * 2018-05-14 2022-11-25 慧荣科技股份有限公司 数据储存装置
US11030112B2 (en) * 2018-05-25 2021-06-08 Red Hat, Inc. Enhanced address space layout randomization
US11144468B2 (en) * 2018-06-29 2021-10-12 Intel Corporation Hardware based technique to prevent critical fine-grained cache side-channel attacks
US11573904B2 (en) * 2018-10-12 2023-02-07 Vmware, Inc. Transparent self-replicating page tables in computing systems
US11099874B2 (en) * 2019-01-28 2021-08-24 Red Hat Israel, Ltd. Efficient userspace driver isolation by shallow virtual machines
US20200285501A1 (en) * 2019-03-08 2020-09-10 International Business Machines Corporation Communication interface of a secure interface control
CN110442425B (zh) * 2019-07-19 2022-04-08 南京芯驰半导体科技有限公司 一种虚拟化地址空间隔离系统及方法
US11061711B2 (en) 2019-09-23 2021-07-13 Red Hat, Inc. Storage deduplication for virtual machines with encrypted storage
US11232030B2 (en) * 2019-09-27 2022-01-25 Red Hat Inc. Storage deduplication for virtual machines with encrypted storage
US11656891B2 (en) 2019-09-27 2023-05-23 Red Hat, Inc. Copy-on-write for virtual machines with encrypted storage
US11614956B2 (en) 2019-12-06 2023-03-28 Red Hat, Inc. Multicast live migration for encrypted virtual machines
CN115516438A (zh) * 2020-05-15 2022-12-23 华为技术有限公司 内存管理装置及方法
CN113342711B (zh) * 2021-06-28 2024-02-09 海光信息技术股份有限公司 页表更新方法、装置及相关设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011011768A1 (en) 2009-07-24 2011-01-27 Advanced Micro Devices, Inc. Iommu using two-level address translation for i/o and computation offload devices on a peripheral interconnect
WO2012117465A1 (ja) 2011-03-02 2012-09-07 パナソニック株式会社 仮想計算機システム、仮想計算機制御方法、仮想計算機制御プログラム、及び半導体集積回路
WO2013031446A1 (ja) 2011-08-29 2013-03-07 インターナショナル・ビジネス・マシーンズ・コーポレーション 論理アドレスを物理アドレスに変換する装置及び方法
US20150370727A1 (en) 2014-06-20 2015-12-24 Kabushiki Kaisha Toshiba Memory management device and non-transitory computer readable storage medium

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7111145B1 (en) * 2003-03-25 2006-09-19 Vmware, Inc. TLB miss fault handler and method for accessing multiple page tables
US7886126B2 (en) * 2005-01-14 2011-02-08 Intel Corporation Extended paging tables to map guest physical memory addresses from virtual memory page tables to host physical memory addresses in a virtual machine system
US7334076B2 (en) * 2005-03-08 2008-02-19 Microsoft Corporation Method and system for a guest physical address virtualization in a virtual machine environment
US7636831B1 (en) * 2006-03-31 2009-12-22 Vmware, Inc. Optimization of reverse mappings for immutable guest physical pages of virtual memories in a virtualized computer system
US8443156B2 (en) * 2009-03-27 2013-05-14 Vmware, Inc. Virtualization system using hardware assistance for shadow page table coherence
US8601310B2 (en) * 2010-08-26 2013-12-03 Cisco Technology, Inc. Partial memory mirroring and error containment
KR101323858B1 (ko) * 2011-06-22 2013-11-21 한국과학기술원 가상화 시스템에서 메모리 접근을 제어하는 장치 및 방법
US8719546B2 (en) * 2012-01-04 2014-05-06 Intel Corporation Substitute virtualized-memory page tables
US9336158B2 (en) * 2013-02-26 2016-05-10 Oracle International Corporation Method and system for simplified address translation support for static infiniband host channel adaptor structures
US9639476B2 (en) * 2013-09-26 2017-05-02 Cavium, Inc. Merged TLB structure for multiple sequential address translations
CN103955399B (zh) * 2014-04-30 2017-06-20 华为技术有限公司 一种虚拟机迁移方法和装置及物理主机
US9335943B2 (en) * 2014-06-30 2016-05-10 Intel Corporation Method and apparatus for fine grain memory protection
US9390028B2 (en) * 2014-10-19 2016-07-12 Strato Scale Ltd. Coordination between memory-saving mechanisms in computers that run virtual machines
US9875047B2 (en) * 2015-05-27 2018-01-23 Red Hat Israel, Ltd. Exit-less host memory locking in a virtualized environment
CN105354155A (zh) * 2015-12-03 2016-02-24 上海高性能集成电路设计中心 一种基于页表检查机制的存储器访问权限控制方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011011768A1 (en) 2009-07-24 2011-01-27 Advanced Micro Devices, Inc. Iommu using two-level address translation for i/o and computation offload devices on a peripheral interconnect
WO2012117465A1 (ja) 2011-03-02 2012-09-07 パナソニック株式会社 仮想計算機システム、仮想計算機制御方法、仮想計算機制御プログラム、及び半導体集積回路
WO2013031446A1 (ja) 2011-08-29 2013-03-07 インターナショナル・ビジネス・マシーンズ・コーポレーション 論理アドレスを物理アドレスに変換する装置及び方法
US20150370727A1 (en) 2014-06-20 2015-12-24 Kabushiki Kaisha Toshiba Memory management device and non-transitory computer readable storage medium
JP2016021224A (ja) 2014-06-20 2016-02-04 株式会社東芝 メモリ管理装置、プログラム、及び方法

Also Published As

Publication number Publication date
EP3491520B1 (en) 2021-06-23
CN109564522B (zh) 2023-08-04
US20180032447A1 (en) 2018-02-01
US10241931B2 (en) 2019-03-26
WO2018022178A1 (en) 2018-02-01
CN109564522A (zh) 2019-04-02
KR102435949B1 (ko) 2022-08-25
EP3491520A1 (en) 2019-06-05
EP3491520A4 (en) 2020-04-01
JP2019522298A (ja) 2019-08-08
KR20190026909A (ko) 2019-03-13

Similar Documents

Publication Publication Date Title
JP7177038B2 (ja) コンピューティングデバイスのメモリ内のページに対するアクセス制御
US10509736B2 (en) Controlling access by IO devices to pages in a memory in a computing device
US10585805B2 (en) Controlling access to pages in a memory in a computing device
US10169244B2 (en) Controlling access to pages in a memory in a computing device
US7739466B2 (en) Method and apparatus for supporting immutable memory
JP6893479B2 (ja) 所有権テーブルを用いたデータ処理装置及び方法
JP5581403B2 (ja) メモリのセキュア領域および非セキュア領域へのセキュアモードページテーブルデータの格納
JP4237190B2 (ja) 仮想マシン環境内でのゲスト物理アドレスの仮想化の方法およびシステム
US7516247B2 (en) Avoiding silent data corruption and data leakage in a virtual environment with multiple guests
US7480784B2 (en) Ensuring deadlock free operation for peer to peer traffic in an input/output memory management unit (IOMMU)
US10733111B2 (en) Memory management
US20220308756A1 (en) Performing Memory Accesses for Input-Output Devices using Encryption Keys Associated with Owners of Pages of Memory
JP2023518482A (ja) 複数の物理アドレス空間を使用する装置及び方法
EP4315079A1 (en) Migrating pages of memory accessible by input-output devices
US11726693B2 (en) Migrating pages of memory accessible by input-output devices
US20200192825A1 (en) Security for virtualized device
JP2023526000A (ja) 変換テーブルアドレス記憶回路
US11188477B2 (en) Page protection layer
JP2023519322A (ja) 装置及び方法
JP2023518481A (ja) 複数の物理アドレス空間を使用する装置及び方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200511

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210331

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210601

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20210901

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20211029

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220329

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220617

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: 20221025

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20221110

R150 Certificate of patent or registration of utility model

Ref document number: 7177038

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150