JP2005122711A - プロセッサ仮想化を改良するための方法及び合成命令を処理するためのシステム - Google Patents

プロセッサ仮想化を改良するための方法及び合成命令を処理するためのシステム Download PDF

Info

Publication number
JP2005122711A
JP2005122711A JP2004267291A JP2004267291A JP2005122711A JP 2005122711 A JP2005122711 A JP 2005122711A JP 2004267291 A JP2004267291 A JP 2004267291A JP 2004267291 A JP2004267291 A JP 2004267291A JP 2005122711 A JP2005122711 A JP 2005122711A
Authority
JP
Japan
Prior art keywords
instruction
processor
composite
instructions
synthetic
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.)
Withdrawn
Application number
JP2004267291A
Other languages
English (en)
Other versions
JP2005122711A5 (ja
Inventor
Eric Traut
トラウト エリック
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.)
Microsoft Corp
Original Assignee
Microsoft Corp
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 Microsoft Corp filed Critical Microsoft Corp
Publication of JP2005122711A publication Critical patent/JP2005122711A/ja
Publication of JP2005122711A5 publication Critical patent/JP2005122711A5/ja
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • 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
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • 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/45554Instruction set architectures of guest OS and hypervisor or native processor differ, e.g. Bochs or VirtualPC on PowerPC MacOS
    • 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/45566Nested virtual machines

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Stored Programmes (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

【課題】 仮想マシンにおいて合成命令を使用するためのシステム及び方法を実現することにより、より改善された仮想化を可能とする。
【解決手段】 本発明は、トラップを生じさせる1組の「合成命令」を提供して、仮想マシン(VM)が命令を安全に処理する機会を提供することにより、x86プロセッサアーキテクチャの欠点を補償する。x86アーキテクチャには「イリーガル」であるが、それでも、仮想マシンが理解することができる命令を使用することにより、それらの合成命令を使用して、x86プロセッサに対する従来の命令によって実行された場合、問題があるが、x86プロセッサシステムに関するはるかに改良されたプロセッサ仮想化を提供する明確に定義されたアクションを仮想マシンにおいて実行する方法である。
【選択図】 図10

Description

本発明は、プロセッサ仮想化を改良するための方法及び合成命令を処理するためのシステムに関する。より詳細には、本発明は、一般にオペレーティングシステムの分野に関し、より具体的には、仮想マシン(またはプロセッサ仮想化)が理解することができるが、事前定義されたプロセッサアーキテクチャ(例えば、x86アーキテクチャ)によって「イリーガル」であると定義される命令の使用に関し、仮想マシン環境内で実行された場合、その命令を利用して明確に定義された正当なアクションを実行するようにする、プロセッサ仮想化を改良するための方法、オペレーティングシステムがそのオペレーティングシステムが仮想化されたプロセッサ上で実行されているかまたはx86プロセッサ上で直接に実行されているかを判定する方法、オペレーティングシステムコードを改良するための方法、合成命令を処理するためのシステム、記録媒体、合成命令を処理するためのシステム、及びプロセッサ仮想化を改良するようにゲストオペレーティングシステムを最適化するための方法に関する。ある意味で、本発明は、「合成」命令を既存の命令セットに追加する。
仮想マシン
コンピュータは、特定の1組のシステム命令を実行するように設計された汎用中央処理装置(CPU)を含む。同様のアーキテクチャ仕様または設計仕様を有する一群のプロセッサは、同一のプロセッサファミリのメンバと見なすことができる。現在のプロセッサファミリの例には、アリゾナ州フェニックス市のモトローラ株式会社によって製造されるMotorola680X0(商標)プロセッサファミリ、カリフォルニア州サニーベール市のインテルコーポレーションによって製造されるIntel(登録商標)80X86(商標)プロセッサファミリ、及びモトローラ株式会社によって製造され、カリフォルニア州キューパーティーノ市のアップルコンピュータ株式会社によって製造されるコンピュータの中で使用されるPowerPC(商標)プロセッサファミリが含まれる。一群のプロセッサが、同様のアーキテクチャ及び設計の考慮のため、同一のファミリに属していても、プロセッサは、クロック速度及びその他のパフォーマンスパラメータに従ってファミリ内で大幅に異なっていることが可能である。
マイクロプロセッサの各ファミリは、プロセッサファミリに固有の命令を実行する。プロセッサ、またはプロセッサのファミリが実行することができる全体的な命令セットが、プロセッサの命令セットとして知られている。例として、Intel(登録商標)80X86(商標)プロセッサファミリによって使用される命令セットは、PowerPC(商標)プロセッサファミリによって使用される命令セットと互換性がない。Intel(登録商標)80X86(商標)命令セットは、CISC(Complex Instruction Set Computer)フォーマットに基づく。Motorola PowerPC(商標)命令セットは、RISC(Reduced Instruction Set Computer)フォーマットに基づく。CISCプロセッサは、一部がかなり複雑な機能を実行することができるが、一般に、実行するのに多くのクロックサイクルを要する多数の命令を使用する。RISCプロセッサは、より少数の利用可能な命令を使用して、はるかに高い速度で実行されるより単純な機能セットを実行する。
また、コンピュータシステム間におけるプロセッサファミリの固有性により、通常、コンピュータシステムのハードウェアアーキテクチャのその他の要素間で互換性がないことも生じる。Intel(登録商標)80X86(商標)プロセッサファミリからのプロセッサを使用して製造されたコンピュータシステムは、PowerPC(商標)プロセッサファミリからのプロセッサを使用して製造されたコンピュータシステムのハードウェアアーキテクチャとは異なるハードウェアアーキテクチャを有する。プロセッサ命令セットの固有性、及びコンピュータシステムのハードウェアアーキテクチャのため、アプリケーションソフトウェアプログラムは、通常、特定のオペレーティングシステム上で実行されている特定のコンピュータシステム上で実行されるように書かれる。
コンピュータ製造業者は、コンピュータ製造業者の製品系列に関連するマイクロプロセッサファミリ上で、より少ないアプリケーションではなく、より多くのアプリケーションを実行させることにより、市場占有率を最大化することを望む。コンピュータシステム上で実行することができるオペレーティングシステム及びアプリケーションプログラムの数を拡大するため、ホストと呼ばれる1つのタイプのCPUを有する所与のコンピュータが、ゲストと呼ばれる無関係のタイプのCPUの命令をホストコンピュータがエミュレートすることを可能にするエミュレータプログラムを含む技術分野が開発されている。したがって、ホストコンピュータは、所与のゲスト命令に応答して1つまたは複数のホスト命令がコールされるようにするアプリケーションを実行する。したがって、ホストコンピュータは、独自のハードウェアアーキテクチャ向けのソフトウェア設計を実行することができるとともに、無関係のハードウェアアーキテクチャを有するコンピュータ向けに書かれたソフトウェアを実行することもできる。さらにより具体的な例として、例えば、アップルコンピュータによって製造されたコンピュータシステムは、PC(personal computer)ベースのコンピュータシステム向けに書かれたオペレーティングシステム及びプログラムを実行することができる。また、エミュレータプログラムを使用して、単一のCPU上で複数の互換性のないオペレーティングシステムを同時に動作させることも可能である。この構成では、各オペレーティングシステムは、互いに互換性がないが、エミュレータプログラムが、2つのオペレーティングシステムのどちらかをホストして、そうでなければ互換性のないオペレーティングシステムが同一のコンピュータシステム上で同時に実行されるのを可能にすることができる。
ゲストコンピュータがホストコンピュータシステム上でエミュレートされる場合、ゲストコンピュータシステムは、仮想マシンであるという言い方をされる。というのは、ホストコンピュータシステムは、ゲストコンピュータシステムのハードウェアアーキテクチャの動作のソフトウェア表現としてだけ存在するからである。エミュレータという用語と仮想マシンという用語は、ときとして、区別なく使用されて、コンピュータシステム全体のハードウェアアーキテクチャを模倣する、またはエミュレートする能力を表す。例として、カリフォルニア州サンマテオ市のコネクティクス(Connectix)コーポレーションによって作られたVirtual PC(商標)ソフトウェアは、Intel(登録商標) 80X86(商標) Pentium(登録商標)プロセッサ、ならびに様々なマザーボードコンポーネント及びカードを含むコンピュータ全体をエミュレートする。それらのコンポーネントの動作は、ホストマシン上で実行されている仮想マシンにおいてエミュレートされる。PowerPC(商標)プロセッサを有するコンピュータシステムなどのホストコンピュータのオペレーティングシステムソフトウェア及びハードウェアアーキテクチャ上で実行されているエミュレータプログラムは、ゲストコンピュータシステム全体の動作を模倣する。エミュレータプログラムは、ホストマシンのハードウェアアーキテクチャと、エミュレートされる環境内で実行されているソフトウェアによって伝送される命令の間のインターチェンジ(interchange)として動作する。
x86アーキテクチャ
「x86」は、x86命令セットアーキテクチャ(ISA;Instruction Set Architecture)を使用するシリーズすべてのマイクロプロセッサファミリの総称である。IA32は、x86ISAを使用するインテルによって開発された特定のプロセッサアーキテクチャである。x86は、インテルの8086(商標)マイクロプロセッサから始まる。x86プロセッサには、とりわけ、インテルの8086(商標)、286(商標)、386(商標)、486(商標)、Pentium(登録商標)、MMXを有するPentium(登録商標)、Pentium(登録商標)PRO、Pentium(登録商標)II、Pentium(登録商標)III、及びPentium(登録商標)4のプロセッサファミリ、ならびにアドバンストマイクロデバイス(Advanced Micro Device)(AMD)のK5(商標)、K6(商標)、K6−2(商標)、K6−3(商標)、Athlon(商標)、Enhanced Athlon(商標)(別名、「サンダーバード(thunderbird)(商標)」)、Athlon4(商標)、及びAthlonMP(商標)、Athlon64(商標)、Opteron(商標)が含まれるが、以上には限定されない。
仮想マシンモニタ(VMM)は、ハードウェアのすぐ上で実行されるソフトウェアレイヤであり、VMMは、VMMが仮想化しているハードウェアと同一であるインタフェースを公開することによってマシンのすべてのリソースを仮想化する(これにより、VMMが、VMMより上位で実行されているオペレーティングシステムレイヤに気付かれずに済むことが可能になる)。例えば、IA32アーキテクチャなどを含むx86アーキテクチャは、VMM実装に関するいくつかの課題をもたらす多くの仮想化の穴を含む。第1に、x86アーキテクチャは、すべてのプロセッサ状態を特権状態か、または使用状態に分けるわけではなく、ここで、とりわけ、特権状態は、現在の特権レベル、ならびにユーザレベルのアプリケーションインスタンス間でリソース制御及び保護障壁を実施するために基礎にあるオペレーティングシステム(または「監督レイヤ」)の制御下になければならない他のリソースを示す制御フィールドまたはステータスフィールドを含まなければならない。第2に、x86アーキテクチャは、特権状態へのアクセス(読み取りであれ、書き込みであれ)がユーザレベルで試みられたすべてのケースでトラップ(trap)を生じさせるわけではない。第3に、x86アーキテクチャは、ユーザレベルのコードが、仮想化されるべき非特権状態(例えば、タイマ値、パフォーマンスカウンタ、プロセッサ機能レジスタ)にアクセスしようと試みた際にトラップを生じさせるための手段を有さない。第4に、すべてのメモリ内のプロセッサ構造は、現在のアドレス空間の外部に格納されるか、またはVM内部の誤った、または悪意のあるメモリアクセスから保護可能でなければならないが、x86アーキテクチャは、それを可能にしない。最後に第5に、x86アーキテクチャは、割り込みまたはトラップの時点におけるすべてのプロセッサを、割り込みまたはトラップが処理された後にトラップ前の状態に復元することができない。
従来のシステムには上述したような種々の問題があり、さらなる改善が望まれている。
本発明は、このような状況に鑑みてなされたもので、その目的とするところは、仮想マシンにおいて合成命令を使用するためのシステム及び方法を実現することにより、より改善された仮想化を可能とする、プロセッサ仮想化を改良するための方法及び合成命令を処理するためのシステムを提供することにある。
x86アーキテクチャの前述した欠点及び限界の多くは、トラップが所望される場合にトラップを生じさせることができない命令によってもたらされる。つまり、その命令が、代わりにトラップを生じさせる場合、仮想マシンモニタ(VMM)は、その命令を正しく仮想化することができる。
本発明は、トラップを生じさせ、命令を安全な形で処理する機会を仮想マシン(VM)に与える「合成命令」を導入することにより、x86プロセッサアーキテクチャの欠点を補償する。x86アーキテクチャには「イリーガル」であるが、それでも、仮想マシンが理解することができる命令を使用することにより、本方法は、合成命令を使用して、x86プロセッサ上で実行される従来の命令によって実行された場合は問題のある明確に定義されたアクションを実行し、x86プロセッサシステムに関するはるかに改良されたプロセッサ仮想化を提供する。
以上の概要、及び好適実施形態の以下の詳細な説明は、添付の図面と併せて読むことでよりよく理解される。本発明を例示するため、図面には本発明の典型的な構成を示しているが、本発明は、開示する特定の方法及び手段(instrumentalities)に限定されない。
本発明によれば、仮想マシンにおいて合成命令を使用するためのシステム及び方法を実現することにより、より改善された仮想化を可能にできる。
以下、図面を参照して本発明を適用できる実施形態を詳細に説明する。本発明の主題は、法定要件を満たすように詳細に説明する。ただし、説明自体は、本特許の範囲を限定するものではない。むしろ、本発明者は、請求する主題が、本明細書で説明するものとは異なるステップ、または同様のステップの組み合わせを含むように、他の現在の技術、または将来の技術に関連する他の形でも実施できることを企図している。さらに、「ステップ」という用語は、本明細書で、使用される方法の異なる要素を意味するように使用される可能性があるが、この用語は、個々のステップの順序が明確に説明されていない限り、またそのような場合を除き、本明細書で開示する様々なステップの間における特定の順序を何ら暗示していると解釈してはならない。最後に、以下の説明は、ときとして、IA32アーキテクチャ及び/またはx86プロセッサファミリを中心に扱う可能性があるが、本明細書における開示のいずれの箇所も、これらの下位グループに限定されることを意図するものではなく、いずれのそのような説明も、すべてのx86プロセッサアーキテクチャ及び等価形態を含み、特にIA32アーキテクチャ及びIA64アーキテクチャ、ならびにその等価形態、拡張形態、及び派生形態を含むが、以上には限定されない、本発明の様々な実施形態が適用され、かつ/または利用されることが可能なすべての妥当なプロセッサアーキテクチャを明確に含む。
コンピュータマイクロプロセッサ
マイクロプロセッサは、マイクロチップ上のコンピュータプロセッサである。マイクロプロセッサは、レジスタと呼ばれる数を保持する小さい領域を使用する算術演算及び論理演算を実行するように設計されている。通常のマイクロプロセッサ動作には、加算、減算、2つの数を比較すること、及びある領域から別の領域に数をフェッチすることが含まれる。これらの動作は、マイクロプロセッサ設計の一部である命令セットの結果である。
命令は、コンピュータプログラムによってコンピュータプロセッサに与えられる命令である。最下レベルでは、各命令は、コンピュータが実行すべき物理的動作(「加算する」などの)、ならびに、特定の命令タイプに依存して、命令を実行するのに使用されるべきデータを含むことが可能なレジスタと呼ばれる特別な記憶域の指定、またはコンピュータメモリの中のデータの位置を記述する0と1の連続である。
レジスタは、コンピュータプロセッサの一部である小さな1組のデータ保持場所の1つである。レジスタは、コンピュータ命令、記憶アドレス、または任意の種類のデータ(ビットシーケンスまたは個々の文字などの)を保持することができる。一部の命令は、命令の一環としてレジスタを指定する。例えば、命令は、2つの定義されたレジスタの内容が足され、指定されたレジスタの中に入れられるべきことを指定することができる。レジスタは、命令を保持するだけ十分に大きくなければならず、例えば、32ビット命令のコンピュータでは、レジスタは、32ビットの長さでなければならない。一部のコンピュータ設計では、より短い命令用により小さいレジスタ、例えば、ハーフレジスタが存在する。プロセッサ設計及び言語規則に依存して、レジスタは、番号を付けられる、または任意の名前を有することが可能である。ただし、本明細書で使用する特定のレジスタ、特定の命令、ならびに本明細書で詳細に説明するその他の技術的要素は、x86アーキテクチャに基づき、このため、当業者には公知であり、よく理解されている。
仮想マシンアーキテクチャ
図1は、ハードウェア102のすぐ上で実行されている仮想マシンモニタ(VMM)ソフトウェアレイヤ104を含む仮想化されたコンピューティングシステムを示し、VMM104は、VMMが仮想化しているハードウェアと同一であるインタフェースを公開することによってマシンのすべてのリソースを仮想化する(これにより、VMMが、VMMより上位で実行されているオペレーティングシステムレイヤに気付かれずに済むことが可能になる)。VMM104の上には、2つの仮想マシン(VM)実施形態、仮想化されたIntel(登録商標)386(商標)プロセッサであるVMA108、及びMotorola680X0(商標)ファミリのプロセッサの1つまたは複数の仮想化されたバージョンであるVMB110が存在する。各VM108及び110の上には、それぞれ、ゲストオペレーティングシステム(OS)A112及びOSB114が存在する。ゲストOSA112の上では、2つのアプリケーション、アプリケーションA1116及びアプリケーションA2118が実行されており、ゲストOSB114の上では、アプリケーションB1120が実行されている。
図2は、同様に仮想化されているが、コンピュータハードウェア102と直接にインタフェースをとるホスト(ネイティブ)オペレーティングシステムX122を有するコンピューティングシステム環境を示しており、ネイティブOSX122の上では、アプリケーションX124が実行されている。
図3は、コンピュータシステム310におけるエミュレートされた動作環境用のハードウェアアーキテクチャ及びソフトウェアアーキテクチャの論理レイヤの図である。エミュレーションプログラム314が、ホストオペレーティングシステム及び/またはハードウェアアーキテクチャ312の上で実行される。エミュレーションプログラム314は、ゲストハードウェアアーキテクチャ316及びゲストオペレーティングシステム318をエミュレートする。ソフトウェアアプリケーション320が、ゲストオペレーティングシステム318の上で実行される。図3のエミュレートされた動作環境では、エミュレーションプログラム314の動作のため、ソフトウェアアプリケーション320が、ホストオペレーティングシステム及びハードウェアアーキテクチャ312と全体的に互換性のないオペレーティングシステム上で実行されるように設計されてはいるものの、コンピュータシステム310の上で実行されることが可能である。
プロセッサ仮想化
仮想マシン(VM)においてプロセッサ仮想化を提供するために次の2つの方法が存在する。すなわち、エミュレーション及び直接実行である。仮想マシンは、いずれかの方法、または両方の方法(「混成」)を使用してプロセッサ仮想化を提供することができる。
エミュレーションは、インタープリタ(interpreter)またはバイナリ変換機構の使用に関わり、ゲストプロセッサとホストプロセッサが大きく異なるシステム上でVMを実装する際の唯一の実行可能な選択肢でもある。例えば、Macintosh用のMicrosoft Virtual PC(商標)は、PowerPC(商標)ベースのMacintoshシステム上でx86ベースのVM(x86プロセッサアーキテクチャをエミュレートする)を実装する。エミュレーションは、ゲストプロセッサとホストプロセッサが同じであるが、プロセッサが、不十分な仮想化サポートを提供する状況に関しても必要である。x86アーキテクチャの一部の動作モードが、このカテゴリに入る。
ただし、エミュレーションは、最も柔軟性があり、互換性がある仮想化機構ではあるが、通常、最速ではない。エミュレーションは、解釈またはバイナリ変換により、ランタイムオーバーヘッドを課す。実施するのが比較的容易な解釈の場合、オーバーヘッドは、しばしば、90〜95%ぐらいである(つまり、もたらされるパフォーマンスは、「ネイティブ」パフォーマンスの5〜10%だけである)。他方、バイナリ変換機構は、インタープリタより複雑であり、したがって、実装するのがより困難であるが、そのような機構は、被るパフォーマンス損失がより少なく、25〜80%だけのオーバーヘッドを要することが可能である(すなわち、もたらされるパフォーマンスは、「ネイティブ」パフォーマンスの20〜75%である)。
一般に、直接実行の方が、いずれのアプローチを使用するエミュレーションよりも高速であり、効率的である。良好な直接実行の実施形態は、数パーセント点の差の範囲内で、ネイティブパフォーマンスとほぼ同等のパフォーマンスを実現することができる。ただし、当業者には周知であり、理解されるとおり、直接実行は、通常、プロセッサ保護機構を頼りにして仮想化されたコードがシステムを「乗っ取る(taking over)」のを防止する。より具体的には、直接実行は、プロセッサを頼りにしてユーザレベルの動作と特権レベルの動作(つまり、特権レベルのプロセッサリソースにアクセスするソフトウェア対ユーザレベルのリソースにアクセスするソフトウェア)を区別する。
特権モードで実行されるソフトウェア(つまり、信頼されたソフトウェア)は、レジスタ、モード、設定、メモリ内のデータ構造などを含む特権プロセッサリソースにアクセスすることができる。これとは対照的に、ユーザモードは、最新のシステムにおける計算作業の大半を実行する信頼されていないソフトウェア向けである。多くのプロセッサ(ただし、すべてではない)は、ユーザレベル状態と特権レベル状態(各モードに対応する)の厳密な区別を行い、プロセッサがユーザモードで動作している場合、特権レベル状態へのアクセスは許されない。この区別により、ホストオペレーティングシステム(または等価物)が、重要なリソースを保護し、バグのある、または悪意のあるユーザレベルソフトウェアが、システム全体をクラッシュさせるのを防止することができるようになる。
ユーザレベルコードの直接実行の場合、あらゆる特権違反は、VMMによって捕えられ、ゲストの例外処理ハンドラに送られる。ただし、特権レベルコードの直接実行には、特権レベルコードがプロセッサのすべての特権状態要素に完全なアクセスを有するという前提で特権レベルコードが書かれているという事実にもかかわらず、ユーザレベルで特権レベルコードを実行することが関わる。この不整合を解消するため、VMはプロセッサを頼りにして、すべての特権命令(すなわち、特権状態に直接に、または間接的にアクセスする命令)に関してトラップを生成する。特権違反トラップは、仮想マシンモニタ(VMM)内部のトラップハンドラを呼び出す。次に、VMMのトラップハンドラが、特権命令の暗示された状態変化をエミュレートし、制御を後続の命令に戻す。特権命令のこのエミュレーションには、しばしば、特定のVMインスタンスにプライベートなシャドー状態の使用が関わる。
例えば、プロセッサアーキテクチャが、特権モードでだけアクセスすることができる特権モードレジスタ(PMR)を含む場合、ユーザレベルコードからPMRからの読み取り、またはPMRへの書き込みを行おうとするいずれの試みも、トラップを生じさせる。VMMのトラップハンドラが、トラップの原因を特定し、関連するVMのインスタンスにプライベートなPMRシャドー値を参照する(このPMR値は、ホストプロセッサのPMRの中に現在、保持されている値と異なることが可能である)。
トラップ命令の頻度、及びトラップを処理することの費用に依存して、この技術により、比較的小さいが、顕著なパフォーマンスペナルティが課せられる可能性がある。例えば、IBM及びアムダール(Amdahl)によって開発された一部のVMMは、ネイティブ速度の80〜98%で動作し、したがって、このトラッピング(trapping)オーバーヘッドに起因して2〜15%のパフォーマンス損失がもたらされた。
x86/IA32の限界
仮想化向けの理想的なプロセッサは、厳密に仮想化可能(virtualizable)であると言われる。つまり、厳密に仮想化可能なプロセッサは、以下の要件を満たす直接実行仮想化機構の実装を可能にする。すなわち、
(a)VMMは、プロセッサリソース及びシステムリソースを「支配し(in control)」つづけることができなければならない。
(b)VM内部で実行されるソフトウェア(ユーザレベルでか、特権レベルでかにかかわらず)は、自らが仮想マシン内部で実行されていることを知ることができてはならない。
以上の要件を満たすため、厳密に仮想化可能なプロセッサは、以下の特性を示す。すなわち、
・メモリ管理装置(MMU)または同様のアドレス変換機構を組み込む
・2つ以上の特権レベルを提供する
・すべてのプロセッサ状態を特権状態またはユーザ状態に分け、特権状態は、現在の特権レベルを示すあらゆる制御フィールドまたはステータスフィールドを含まなければならない。
・特権レベルへのアクセス(読み取りであれ、書き込みであれ)がユーザレベルで試みられた場合、トラップを生じさせる
・ユーザレベルコードが、仮想化されるべき非特権状態(例えば、タイマ値、パフォーマンスカウンタ、プロセッサ機能レジスタ)にアクセスしようと試みた場合、オプションとしてトラップを生じさせる手段を有する
・すべてのメモリ内のプロセッサ構造が、現在のアドレス空間の外部に格納されるか、またはVM内部の誤った、または悪意のあるメモリアクセスから保護可能である。
・割り込み時またはトラップ時におけるいずれのプロセッサ状態も、割り込みまたはトラップが処理された後、トラップ前の状態に復元することができる
いくつかを挙げればPowerPC(商標)及びDEC Alpha(商標)を含むいくつかの最新のプロセッサは、以上の要件を満たす。ただし、IA32は、以上の要件を満たさない。すなわち、IA32は、初めの2つの要件だけを満たす。したがって、IA32アーキテクチャは、VMM実装に関するいくつかの課題をもたらす多くの仮想化の穴を含む。
第1に、IA32アーキテクチャは、いくつかの事例においてユーザ状態/特権状態分離の要件に違反し、その最も重大なものは、図4に示すとおりユーザ状態と特権状態をともに含むEFLAGSレジスタに関わる。次のEFLAGSフィールドが、特権的であると見なされなければならない。すなわち、VIP、VIF、VM、IOPL、及びIFである。(他のすべてのフィールドは、ユーザ状態を表し、特権的である必要はない。)しかし、IA32の場合、EFLAGSレジスタの特権フィールド(PUSHF/PUSHFD、POPF/POPFD、及びIRET)に対して読み取りを行う命令、及び書き込みを行う命令は、ユーザモードから実行される場合、トラップせず、IA32において、これらの命令がトラップするように強制する手段は存在しない。
さらに、IA32では、PUSHF命令及びPOPF命令が、しばしば、ゲストカーネル(リング0)コード内部で使用されて、IF(割り込み有効フラグ(interrupt enable flag))の状態が保存され、復元される。仮想マシン内部で、このカーネルコードは、より高いリングレベルで(例えば、リング1で)実行され、IOPLは、IN/OUT命令がトラップするように設定される。VM内部で実行されているオペレーティングシステム(OS)が、ホストプロセッサ上の割り込みを無効にすることを許されてはならないため、実際のIF値は、仮想マシンコードが実行されている間、仮想IFの状態にかかわらず、1に設定される。したがって、PUSHF命令は、IF=1でEFLAGS値を常にプッシュし、POPF命令は、ポップされたEFLAGS値のIFフィールドを常に無視する。
EFLAGSレジスタに加えて、特権状態及びユーザ状態が混ざる2つのさらなる領域が、CSレジスタ及びSSレジスタである。これらのレジスタの一番下の2ビットは、特権状態である現在の特権レベル(CPL)を含み、他方、これらのレジスタの上位14ビットは、特権的ではないセグメントインデックス−記述子テーブル選択子を含む。CS選択子またはSS選択子(SS及びPUSH SSからのCALLF、MOVを含む)に明示的、または暗示的にアクセスする命令は、ユーザモードから実行された場合、トラップしない。その他の命令は、CSまたはSSがスタック上にプッシュされるようにする(例えば、コールゲート(call gate)を介するINT、INTO、JMPF、コールゲートを介するCALLF)が、それらの命令は、トラップされることが可能であり、VMMが、プッシュされたCPL値を仮想化することを可能にするということに留意されたい。
ユーザレベルコードが特権プロセッサ状態に直接にアクセスすることを許すx86/IA32保護モデルのさらなる欠点には、次の命令が含まれる。すなわち、SGDT、SIDT、SLDT、SMSW、及びSTRである。様々な理由で、GDT、LDT、IDT、及びTRのシャドーイングが、正しい仮想化のために必要であり、これは、TR、GDTR、及びIDTRが、ゲストオペレーティングシステムによって指定されたテーブルではなく、VMMのシャドーテーブルをポイントすることを意味する。しかし、非特権コードが、それらのレジスタから読み取りを行うことができるため、それらのレジスタの内容を正しく仮想化することが不可能である。さらに、GDT内及びLDT内の記述子にアクセスするいくつかの命令は、LAR、LSL、VERR、及びVERWを含め、非特権状態から実行された場合、トラップしない。GDT/LDTシャドーイングが必要なため、これら4つの命令は、VM内部で誤って実行される可能性がある。さらに、CPUID命令は、トラップしない。仮想マシン内部で新たなプロセッサ機能をシミュレートするため、またはプロセッサ機能を無効にするため、非特権モードから実行される場合、CPUID上でトラップすることができることが重要である。
さらに、VM環境におけるコンテキスト切り替えは、プロセッサの状態全体を保存し、復元する能力に依拠するが、IA32アーキテクチャは、それを可能にしない。より具体的には、6つのセグメント(DS、ES、CS、SS、FS、及びGS)のそれぞれに関するキャッシュに入れられたセグメント記述子状態は、セグメント再読み込みの時点でプロセッサ内部に格納され、この情報には、いずれのアーキテクチャとして定義された機構を介してしてもアクセスすることができない。したがって、これは、正しい仮想化への大きな障害である。例えば、あるコードが、あるセグメントを読み込み、次に、そのセグメントに対応するメモリ内の記述子を変更した場合、後のコンテキスト切り替えは、元のセグメント記述子情報を正しく復元することができない。同様に、プロセッサが、リアルモードで動作しており、次に、保護モードに切り替わった場合、セグメントは、保護モードGDT/LDT内の記述子に対応する選択子を含まず、この時点におけるコンテキスト切り替えは、リアルモード内で最初に読み込まれたキャッシュに入れられた記述子を正しく復元することができない。
同様に、PAUSE命令(スピンロック実行に関するハイパースレッドプロセッサヒント(hyperthreaded processors hint)を提供するように最近、追加されたNOP(no operation)の接頭辞が付いた形態(prefixed form))も、マルチプロセッサ(MP)VM上でスピンロックとともに使用された場合、パフォーマンス問題を被る。例えば、1つの仮想プロセッサが、第2の仮想プロセッサによって保持されるロック上でスピンすることが可能であり、第2の仮想プロセッサが、現在、実行されていないスレッド上で実行されている場合、第1の仮想プロセッサは、長い間、スピンする可能性があり、その結果、プロセッササイクルが浪費される。VMMが、別のVMが実行されるようにスケジュール設定する、または第2の仮想プロセッサスレッドがスケジュール設定されるように合図することを可能にするため、仮想マシンモニタが、VMがスピンしているかどうかの通知を受けることができれば役に立つが、現在、利用できるそのような通知方法は存在しない。
一部のVM環境は、いくつかの異なる技術を使用して、以上の欠点に対処し、一般に、エミュレーションと直接実行をともに混成の形で使用する。特定の技術は、プロセッサモード、ならびにOS自体から導出された他の情報に基づいて選択される。そのようなシステムの場合、一般に、図5に示すとおり、VMMによって認識される4つの異なるプロセッサモード分類が存在する。リング0モード(ほとんどの最新のOSカーネルレベルコードに関して使用される)の場合、既定の動作を無効にすることが可能であり、望ましい。以下の説明の大部分は、直接実行機構を介してすべてのリング0コードを安全に実行するための要件を説明する。
多くのVM環境は、「リング圧縮」と呼ばれる技術(VAXアーキテクチャを仮想化するためにDEC技術者によって最初に使用された)を使用する。リング圧縮は、VMMが、仮想化されたリソースにアクセスする一部の特権レベル命令に対してトラップすることを可能にするため、より小さい特権のリング(例えば、リング1)内でリング0コードを実行することに関わる。例えば、IA32ページテーブルベースポインタが、CR3レジスタ内に格納される。CR3を読み取る命令は、リング0内でだけ実行可能である。リング1から実行される場合、この命令は、プロセッサが、トラップを生成するようにさせる(具体的には、タイプ6の「イリーガルな動作」の例外)。トラップの時点で、VMMは、命令を支配して、エミュレートし、VMM(ホストプロセッサの)CR3ではなく、仮想化された(ゲストプロセッサの)CR3を戻す。
おおむね、VMMは、リング0において実行されることが意図されたコードが、実際には、異なるリングレベル内で実行されているという事実を隠すことができる。前述の例では、CR3にアクセスしたコードは、命令に関連する重要な状態変化のすべてがエミュレートされたため、トラップが行われたという事実に気付かなかった。ただし、IA32仮想化の前述した欠点により、リング圧縮が完全に不透明になることが妨げられる。図6に示した命令群は、リング0コードが、より高いリングレベルで実行されていることを公開し、これらの命令を使用するコードは、問題があり、一般に、直接実行環境内で実行することが安全ではない。
さらに、IA32アーキテクチャは、グローバル記述子テーブルとローカル記述子テーブル(それぞれ、GDT及びLDT)をともに含む。これらのテーブルは、コードセグメント及びデータセグメント、ならびにリング間遷移を制御するゲートを含む。ゲストOSは、リング3とリング0の間の遷移を可能にするようにGDTまたはLDTをセットアップすることができる。しかし、VMMは、リング0への直接の遷移をまったく許すことができない。というのは、それにより、ホストプロセッサに対する直接の支配がゲストOSに与えられるからである。代わりに、VMMは、リング0へのいずれの遷移にも関与して、より低い特権リングレベルに実行を適切に向けなおすことができるようにしなければならない。これは、VMMが、ゲストのGDT及びLDTを直接に使用できないことを意味する。むしろ、VMMは、ゲストのGDT及びLDTの内容をプライベートテーブルにシャドーイング(shadow)して、いずれのリング0へ直接に向かう遷移も必要に応じて防止するように調整を行うことができなければならない。それらの調整は、DPL(記述子特権レベル)フィールド、ならびに記述子タイプフィールドのコードビットに制限される。これらのささいな変更のため、シャドーイングされた(shadowed)記述子テーブルは、ゲスト記述子テーブルとはわずかに異なる可能性がある。
ほとんどの場合、これらの違いは、ソフトウェアには見えないが、その違いを公開する図7に示したいくつかの命令がIA32アーキテクチャには存在する。例えば、VMMは、ゲストGDT及びLDTと重なり合う保護ページを書き、これらのテーブルを変更しようとするいずれの試みも、VMM内部で書き込み保護エラーをもたらすようにする。これに応答して、VMMは、ゲストGDTまたはLDTに対する変更が、内部シャドーテーブルの中で反映されることを確実にする。ただし、現在、読み込まれている選択子に対応するGDTエントリまたはLDTエントリが変更された場合、対応するメモリ内の記述子に対する変更は、不可逆である。というのは、IA32アーキテクチャは、現在、読み込まれているセグメント記述子を読み取る手段を提供しないからである。この状況では、VMMは、メモリ内の記述子が変更されることを許す前に、エミュレーションに頼らなければならない。
IA32仮想化の1つの特定の問題となる態様は、EFLAGSレジスタの中のIF(割り込みマスクフラグ)に関わり、それは、この状態が、明確に特権的でなければならないが、非特権コードによって容易に読み取られることが可能であるという点においてである。さらに、非特権コード内からIFを変更しようとする試みが、トラップを生成する代わりに、単に無視される。つまり、IFを操作する一部の命令(STI及びCLI)に対してトラップすることは可能であるが、IFにアクセスする他の命令は、トラップしない(non−trapping)。やはりトラップしない(ただし、仮想化の点からはトラップするべき)他の命令を図8に示している。
残念ながら、コードが仮想マシン内部で実行されている間、仮想化されたIFにおいて現実のIFをミラーリングすることは、実行可能ではない。というのは、それにより、ゲストOSが、割り込みを無期限にオフにすることが可能になる、つまり、バグのあるゲストOSが、ホストシステム全体をハングさせることが可能になるからである。この理由で、ゲストコードが実行されているとき、仮想化された(ゲスト)IFがクリアされている場合でも、ホストIFは、常時、有効なままにされる(すなわち、割り込みは、マスクされない)。
同様に、STI/CLI命令に対してトラップすることは、EFLAGSのIOPLフィールドを調整することを要し、IOPLは、IFに関連する欠点と同様の欠点を伴って非特権コードに対して容易に公開される特権フィールドのさらに別の例である。IFフィールド及びIOPLフィールドに関連する問題のある命令を図9に示している。
IA32アーキテクチャは、TSS、GDT、LDT、及びIDTを含め、プロセッサによって使用される一部のデータ構造も定義し、それらのデータ構造は、ページテーブルによって定義された論理アドレス空間内に配置される。ゲストOSが仮想マシン内部で実行されている場合、ページテーブルにより、アドレス空間のいずれの領域が、メモリ、フレームバッファ、メモリマップレジスタ(memory mapped register)などをマップするのに使用されるかが定義される。ほとんど常に、アドレス空間のいくらかの部分は、使用されないままにされる。ゲストOSが、独自のTSS、GDT、LDT、及びIDTを保持する一方で、VMMは、それらのデータ構造の独自のプライベートバージョンを提供する。ただし、それらの構造は、ゲストOSによって支配されるアドレス空間内のどこかにマップされなければならない。また、VMMのコード及び内部データ構造も、同一のアドレス空間内にマップされなければならない。したがって、VMMは、ゲストOSによって現在、使用中でないアドレス空間のいくらかの(比較的小さい)部分を見つける必要がある。この領域は、「VMM作業領域(working area)」と呼ばれる。VMMは、ゲストOSページテーブルを能動的に監視して、ゲストOSが、VMM作業領域によって現在、占められている領域にページをマップしようとしているかどうかを判定する。マップしようとしている場合、VMMは、アドレス空間の別の未使用部分を探し出し、自らを再配置する。
この技術により、広いゲストOSの互換性が可能になるが、ゲストアドレス空間全体が使用されている場合、この技術には問題がある。ゲストアドレス空間全体が使用されることは、大量の物理メモリが仮想マシンに割り当てられている場合、生じる可能性がある。この理由で、VMMは、ゲストOSが、特にVMM作業領域のためにアドレス空間の一部分を確保することができる機構を提供する。この空間が指定されると、VMMは、自らをこの空間に再配置し、変更を能動的に追跡することを止める(ゲストOSが、もはや確保された領域を使用しないという約束を守るという前提の下で)。
トラップ命令は、功罪相半ばする。一方で、命令は、トラップする場合、適切に仮想化することができる。他方で、トラップにより、非常に大きなパフォーマンスオーバーヘッドが課せられる。例えば、STI命令は、通常、実行されるのに1サイクルを要するが、STIがVM環境内で実行される場合、VMMによって処理されるトラップが生じさせられ、これは、Pentium(登録商標)4プロセッサ上で、しばしば、実行するのに500を超えるサイクルを要する。一部のVMは、高い頻度のトラップ命令を追跡し、可能な場合、仮想化された環境内で元の命令の意味を保つ等価の非トラップコードでそのトラップ命令をパッチする(patch)ことにより、このオーバーヘッドを軽減しようと試みている。これは、ゲストOSカーネル空間内で割り振られるページングできない(non−pageable)「パッチバッファ」の使用を介して行われる。
ただし、動作の際、パッチ可能なトラップ命令は、長いJMP命令を可能にするのに少なくとも5バイトの長さを要する。つまり、この必須の5バイトなしでは、VMMは、トラップ命令の後に続く命令または命令群を上書きする必要がある。というのは、パッチされる命令の長さが、5バイトに満たない可能性があるからである。
改良された仮想化(例えば、IA32)
IA32アーキテクチャの以上の欠点及び限界の多くは、トラップが所望される場合にトラップを生じさせることができない命令によってもたらされる。つまり、それらの命令が、代わりに、トラップを生じさせた場合、VMMは、それらの命令を正しくエミュレートすることができる。本発明は、それらの問題のある命令に関してトラップを効率的に生成する様々な実施形態を提供する。本発明の様々な実施形態は、OSコードを最適化し、「合成命令」(以下により詳細に説明する)を使用することにより、IA32アーキテクチャにおける仮想化を改良することを目的とする。本発明のいくつかの実施形態は、以下のとおりゲストOSを最適化する図10に示した一連のステップを含む。すなわち、
・ゲストOSにおいて、リング0コード内のSSまたはCALLFから、PUSH CS、PUSH SS、MOVのあらゆる使用を探し出し、削除し、かつ/または置き換える。前述したとおり、これらの命令は、仮想マシン内部で実行されているリング0コードが、実際には、より低い特権リングレベルで実行されているという事実を公開する。ただし、これらの命令は、ほとんどのオペレーティングシステムにおいて非常に稀であり、一般に、完全に削除すること、あるいは他の既存の命令、またはグループの既存の命令で置き換えることができる。
・ゲストOSにおいて、VERR、VERW、またはLARのあらゆる使用を探し出し、それらの使用が、記述子タイプのDPLまたはコードビットに依存しないことを確認する。やはり、これらの命令は、ほとんどのOSにおいて使用されない。
・ゲストOSにおいて、SGDT、SLDT、SIDT、またはSTRのあらゆる使用を探し出し、これらの命令を削除するか、または対応するVM合成命令で置き換える。このステップを実施するため、ゲストオペレーティングシステムにおける記述子テーブルエントリが、記述子テーブルエントリを更新する合成命令(例えば、VMWRDESC)で置き換えられ、シャドー記述子テーブルを保持することに関連するオーバーヘッドが回避される。
・ゲストOSにおいて、CPUIDのあらゆる使用を探し出し、つまり、システムのすべての部分がCPUID情報にアクセスするのに使用する共通サブルーチンによってOSにおいてCPUIDにアクセスが行われる場合を探し出し、CPUIDを直接に読み取る代わりに、合成命令を使用して仮想化されたCPUID情報にアクセスするようにCPUIDを読み取る共通サブルーチンを変更する。CPUID仮想化は、ホストプロセッサによって戻される特定のCPUID情報が、ゲスト機能と競合しない限り必要ないが、新たなプロセッサが、VMMがサポートを提供していなかった機能を実施する場合、仮想化されたCPUID値により、その機能が存在していなかったことが示されるが、仮想化されていないCPUID値は、その機能が存在していたことを示す。
・ゲストOSにおいて、あらゆるMPスピンロックを探し出し、それらを変更してVMSPLAF(スピンロック獲得失敗)合成命令を使用する。
・ゲストOSにおいて、PUSHF(D)及びPOPF(D)のあらゆるインスタンスを探し出し、それらの命令の使用が、プッシュされている、またはポップされているIFの値に依拠する場合、それらの命令を対応する合成命令で置き換える。このステップは、通常、OSを「VMクリーン」にすることに関わる作業の大部分である。
・ゲストOSにおいて、GDTエントリまたはLDTエントリが変更される位置を特定し、変更の数を最小限に抑え、残りの変更をVMWRDESC合成命令で置き換える。(現在、読み込まれている選択子が変更される状況を回避するように特に注意を払う。)
・ゲストOSにおいて、GDT及びLDTが、他のデータ構造をまったく含まないページ上に配置されていることを確認し、そうなっていない場合、そうなるようにする。
・ゲストOSにおいて、リング0コード内のSTI及びCLIのインスタンスを探し出し、それらを対応する5バイト長の合成命令で置き換える。合成形態を使用することにより、VMMは、コードをよりよくパッチして、トラップの必要性を減らすことができる。というのは、それぞれ5バイト未満の長さであるSTI命令及びCLI命令を直接にパッチすることは、通常のパッチ可能なトラップ命令が、長いJMP命令を可能にするのに少なくとも5バイトの長さを要することに起因して、VMMが、トラップ命令の後に続く命令または命令群を上書きすることを要求するからである。
・VMSETINFO合成命令を以下に記すとおり利用する。以上9つの命令により、「VMクリーニング」が完了しており、したがって、この合成命令は、リング0内で直接実行を有効にすることができる。
・「VM危険(unsafe)」のままであるリング0コードの大きいブロックのまわりで直接実行を無効にし、その後で再び有効にすることを動的に行う。ゲストオペレーティングシステムが、直接実行を無効にし(例えば、VMDXDSBL)、再び有効にする(VMDXENBL)ことを動的に行うための合成命令を提供することにより、ゲストオペレーティングシステムは、「VM危険」リング0コードの大きいブロックを回避することができる。
・VMMが「パッチバッファ」を使用することができるかどうかを確かめ、使用できる場合、カーネル空間内のパッチバッファを最良のパフォーマンスに割り当てる。このパッチバッファは、ページング不可能であり、リング0コードが実行されるすべてのアドレス空間コンテキストにマップされ、VMGETINFO合成命令によって示されるサイズでなければならない。パッチバッファの位置及びサイズは、以下に記すとおり、VMSETINFOを使用して設定することができる。パッチバッファは、各仮想プロセッサにではなく、システム全体に一度に割り当てられなければならない。
・VMMが、「VMM作業領域」を要するかどうかを判定し、要する場合、示されたサイズ及び配置のアドレス空間をゲストOS内で割り当て、確保する。以下に説明するとおり、VMSETINFO命令の使用を介して、この確保された領域のベースを設定する。
VM「合成命令」は、VMに対して特別な意味を有するさもなければイリーガルなプロセッサ命令である。このため、合成命令は、合成命令をサポートしないVM内部で、または非VM環境において実行される場合、タイプ6(イリーガルな動作)の例外を生じさせ、したがって、OSが、合成命令を使用する前に、合成命令サポートを確認することが重要である。VM合成命令サポートを確認するため、OSは、VMCPUID命令を実行し、この命令によりイリーガル命令エラーが生じた場合、合成命令がサポートされていないことが分かる。(VMCPUIDは、すべての特権レベルから実行することができ、したがって、ユーザレベルコードの中で使用して安全であることに留意されたい。)これと同じ試験を使用して、VM環境内で実行しているかどうかを判定することができ、そうである場合、その後、仮想マシンが、基礎にあるVMMの機能または動作にアクセスする、または変更するのを許すことができる。以下は、トライ/エクセプト(try/except)機構及び構造化された例外処理を使用してそのような試験を実行する典型的なコードである。
Figure 2005122711
合成命令を使用して、x86プロセッサ上の仮想化に悪影響を与えるx86ISA命令を、x86プロセッサにおいて例外を生じさせる合成命令で置き換える、または補足することができ、その例外は、前記x86プロセッサ上で実行される仮想マシンによって、前記仮想マシンによる処理のためにトラップされる。同様に、第1の仮想マシンが第2の仮想マシン上で実行される再帰的な仮想化の場合、x86プロセッサにおいて例外を生じさせる合成命令で置き換えられた、または補足された命令を第2の仮想マシンの中を通過させて、前記第1の仮想マシンによって処理のためにトラップされるようにすることができる。
本発明のいくつかの実施形態では、合成命令は、すべて5バイトの長さであり、合成命令をJMP命令でパッチしてトラップオーバーヘッドを小さくすることを可能にしている。(他の実施形態では、合成命令の長さは、より長いことも、より短いことも可能である。)合成命令の16進符号化は、次のフォーマットを使用する。すなわち、0FC7C8XXXX(ここで、「XX」は、特定の合成命令を識別するための2桁の16進変数である)。この命令は、CMPXCHG8B命令として復号化されるが、指定された宛先オペランドがレジスタである(したがって、トラップをもたらす)ため、「イリーガル」と見なされる。ただし、本発明のいくつかの実施形態では、合成命令は、いずれの形態の命令接頭辞(例えば、LOCK、REP、セグメントオーバーライド、オペランドサイズオーバーライド、アドレスサイズオーバーライド)もサポートせず、そのような実施形態において接頭辞を使用しようとする試みは、イリーガルな命令の例外(UD#)をもたらす。
合成命令
本発明の様々な実施形態に関する合成命令のサブセットを以下に詳細に説明する。以下にリストアップしないさらなる合成命令は、本明細書で前にも説明している。また、本明細書で明示的に説明しないさらなる合成命令は、それでも、本発明の様々な実施形態によって予期されており、本明細書のいずれの箇所も、本発明を明示的に明らかにする特定の合成命令に限定するものと受け止めてはならない。
VMGETINFO−VM情報を獲得する
VMGETINFOは、特定のVM情報をフェッチして、それをEDX:EAXの中に入れる。戻される情報は、ECXにおけるインデックスに依存する。指定されたインデックスが、仮想プロセッサによってサポートされていない情報を指している場合、GP(0)が生成される。インデックスが、サポートされている情報を指している場合、EDX:EAXは、その情報値に設定される。(この命令のために使用されるレジスタ規則は、RDMSR命令と同様であることに留意されたい。)この命令は、システム全体の状態に影響を与えることで、ほとんどのプロセッサ命令とは異なる。複数のプロセッサを有するシステム上で、VMGETINFOを使用してアクセスされる状態は、「グローバル」であると見なされる。例えば、1つのプロセッサ上でVMSETINFOを使用してVMM作業領域ベースを設定することにより、第2のプロセッサ上でVMGETINFOを使用して同一の値が読み返されることが可能になる。
VMSETINFO−VM情報を設定する
VMSETINFOは、EDX:EAXにおいて指定されるとおり特定のVM情報を設定する。設定される情報は、ECXにおけるインデックスに依存する。指定されたインデックスが、仮想プロセッサによってサポートされていない、または書き込み可能でない情報を指している場合、GP(0)が生成される。(この命令のために使用されるレジスタ規則は、WRMSR命令と同様であることに留意されたい。)この命令は、システム全体の状態に影響を与えることで、ほとんどのプロセッサ命令とは異なる。複数のプロセッサを有するシステム上で、VMSETINFOを使用して設定された状態は、「グローバル」であると見なされる。例えば、1つのプロセッサ上でVMSETINFOを使用してVMM作業領域ベースを設定することにより、第2のプロセッサ上でVMGETINFOを使用してそのデータを読み返すことができるようになる。
VMDXDSBL−直接実行を無効にする
VMDXDSBLは、VMDXENBLの使用を介して直接実行が次回に有効にされるまで、直接実行を無効にする。この命令は、リング0コード内からだけ実行することができ、直接実行が長期間にわたって無効にされるのを防止するように割り込み(または任意の形態の先取り(preemption))が無効にされている場合にだけ、実行されるべきである。この命令は、「VM安全」でない(すなわち、いくつかの仮想化可能でない命令、またはVM環境内で、直接実行で実行されている場合、破られる前提を含む)コードの小さいブロックを保護するのに使用することができる。この命令は、命令が実行されるプロセッサだけに影響を与える。この命令は、仮想マシンにおけるその他の仮想プロセッサに影響を与えない。直接実行が既に無効にされている場合、この命令は、何も行わない。
VMDXENBL−直接実行を有効にする
VMDXENBLは、可能な場合、直接実行を有効にする。この命令は、リング0コード内からだけ実行することができ、割り込み(または何らかの形態の先取り)が無効にされている場合にだけ、実行されるべきである。この命令は、VMDXDSBL命令と併せて使用して、「VM安全」でない(すなわち、いくつかの仮想化可能でない命令、またはVM環境内で、直接実行で実行されている場合、破られる前提を含む)コードの小さいブロックを保護することができる。この命令は、命令が実行されるプロセッサだけに影響を与える。この命令は、仮想マシンにおけるその他の仮想プロセッサに影響を与えない。直接実行が既に有効にされている場合、この命令は、何も行わない。
VMCPUID−仮想化されたCPU情報
VMCPUIDは、シャドーイングされた(shadowed)CPU情報を戻すこと以外は、現実のCPUID命令と同様である。
VMHLT−停止
VMHLTは、リング3及びv86モードを含め、任意のプロセッサモードから実行することができること以外は、通常のHLT命令と同様である。VMHLTを任意の「アイドルループ」の中に挿入して、仮想マシン内部のプロセッサ利用率を低減することができる。一部の実施形態では、プロセッサを停止させるためのこの合成命令(例えば、VMHALT)は、ユーザレベルのゲストコードとして実行することができる。
VMSPLAF−スピンロック獲得失敗
スピンロックは、しばしば、対称型マルチプロセシングをサポートするオペレーティングシステム内で使用される。これらのロックは、通常、プロセッサ間で共用される重要なリソースを保護する。これらのロックは、ロックが別のプロセッサによって比較的少ないサイクル間にわたって保持されることに依拠している。マルチプロセッサVMシステム内部では、他の仮想プロセッサが一時停止されたプロセッサによって保持されるリソースを待っている間、スピンロックを保持する仮想プロセッサに一時的に割り込みがかけられ、実行されていない場合、通常のスピンロック動作により、劣悪なパフォーマンス及び高いCPU利用率がもたらされる可能性がある。この状況を回避するため、VMSPLAF命令を使用して、OSが、獲得することに失敗したスピンロックを待っていることをVMMに通知することができる。これに応答して、VMMは、実行する別の仮想プロセッサをスケジュール設定するか、あるいは現在の仮想プロセッサを一時停止して、リソースが開放された時点で後に実行されるようにスケジュール設定することができる。
VMPUSHFD−仮想化されたフラグレジスタをプッシュする
VMPUSHFDは、「VM安全」であること以外は、通常のPUSHFD命令と同様である。VMPUSHFDは、32ビットのオペランドサイズと32ビットのスタックポインタの両方を前提にしている。CS及びSSが、現在、32ビットではない場合、VMPUSHFDの動作は、未定義である。また、VMPUSHFDは、セグメントバウンド(bound)または書き込み検査を現実のPUSHFD命令が行うのと同じ形で実行することも保証されていない。スタック上にプッシュされたEFLAGSレジスタの値は、シャドーイングされたIF値を含む。ただし、IOPLフィールドの値は、正しくない可能性がある。IOPLを読み取ることを要するコードは、INT命令、外部割込み、または例外に応答してスタック上にプッシュされたEFLAGSの値を使用しなければならない。この命令は、リング0コード内でだけ使用することができる。
VMPOPFD−仮想化されたフラグレジスタをポップする
VMPOPFDは、「VM安全」であること以外は、通常のPOPFD命令と同様である。VMPOPFDは、32ビットのオペランドサイズと32ビットのスタックポインタの両方を前提にしている。CS及びSSが、現在、32ビットではない場合、VMPOPFDの動作は、未定義である。また、VMPOPFDは、セグメントバウンドまたは書き込み検査を現実のPUSHFD命令が行うのと同じ形で実行することも保証されていない。ポップされたEFLAGS内のIFフィールドの値は、遵守される(honored)。ただし、IOPLフィールドの値は、無視される可能性がある。IOPLを調整することを要するコードは、IRETD命令またはVMIRETD命令を使用しなければならない。この命令は、リング0コード内でだけ使用することができる。
VMCLI−割り込みフラグをクリアする
VMCLIは、5バイト長であり、VMMの中にトラップすることを回避するようにパッチされることが可能であること以外は、通常のCLI命令と同様である。この命令は、リング0コード内でだけ使用することができる。
VMSTI−割り込みフラグを設定する
VMSTIは、5バイト長であり、VMMの中にトラップすることを回避するようにパッチされることが可能であること以外は、通常のSTI命令と同様である。VMSTIは、次の命令が完了する前に割り込みが行われることを防止しない点でも、通常のSTIと異なっている。この規則に対する唯一の例外は、VMSTIの後にSYSEXIT命令が続く場合だけであり、SYSEXIT命令は、VMSTIと一緒に原子として(atomically)実行される。この命令は、リング0コード内でだけ使用することができる。
VMIRETD−割り込みから戻る
VMIRETDは、「VM安全」であること以外は、通常のIRETD命令と同様である。通常のIRETD命令とは異なり、この命令は、32ビットのオペランドサイズ及び32ビットのスタックポインタを常に前提にしている。VMIRETDの動作は、CS及びSSの現在のサイズが32ビットではない場合、未定義である。この命令は、リング0コード内でだけ使用することができる。VMIRETDは、v86モードに戻るためにIRETDが使用される可能性がある場合には、いつでも使用されなければならない。VMIRETDの使用により、CPL>0からv86モードに戻る場合のIA32プロセッサの遺憾な動作が回避される。(リング圧縮により、リング0コードが、VM環境内で、より小さい特権のリングレベルにおいて実行されることになることに留意されたい。)
VMSGDT−グローバル記述子テーブルを格納する
VMSGDTは、シャドーイングされたGDTのベース及び長さを格納すること以外は、現実のSGDT命令と同様である。VMSGDTは、メモリオペランドに関するアドレス指定モードがDS:[EAX]であり、DSが、大きく開かれた書き込み可能なセグメントであることを前提にする。DSが大きく開かれた書き込み可能なセグメントではない場合、VMSGDTの動作は、未定義である。
VMSIDT−割り込み記述子テーブルを格納する
VMSIDTは、シャドーイングされたIDTのベース及び長さを格納すること以外は、現実のSIDTと同様である。VMSIDTは、メモリオペランドに関するアドレス指定モードがDS:[EAX]であり、DSが、大きく開かれた書き込み可能なセグメントであることを前提にする。DSが大きく開かれた書き込み可能なセグメントではない場合、VMSIDTの動作は、未定義である。
VMSLDT−ローカル記述子テーブルを格納する
VMSLDTは、シャドーイングされたLDT選択子を格納すること以外は、現実のSLDT命令と同様である。VMSLDTは、宛先オペランドが、EAXレジスタであることを前提とする。
VMSTR−タスクレジスタを格納する
VMSTRは、シャドーイングされたLDT選択子を格納すること以外は、現実のSTR命令と同様である。VMSTRは、宛先オペランドがEAXレジスタであることを前提とする。
VMSDTE−記述子テーブルエントリに格納する
VMSDTEは、GDT内またはLDT内の記述子エントリを更新するのに使用される。使用するには、選択子をECXに読み込む。ECXの上位の16ビット及び下位の2ビット(ビット0及び1)は、無視される。ECXのビット2により、選択子がグローバル記述子テーブルを指すか、またはローカル記述子テーブルを指すかが示される。残りの部分(ビット3ないし15)は、選択子、すなわち、オフセットを符号化して記述子テーブルに入れる。EDX:EAXが、指定された記述子テーブルエントリに書き込む値とともに読み込まれなければならない。この命令は、記述子テーブルを直接に変更する代わりに、VMMのシャドー記述子テーブルが同時に更新されることが可能であるように使用されなければならない。現在、読み込まれているセグメント選択子に対応する記述子エントリを変更してはならない。それにより未定義の動作がもたらされる。VMMによって推奨されない場合(VMGETINFO命令によって戻されるVMM情報ビット4によって示される)、この命令を使用してはならない。推奨されない場合にこの命令を使用することにより、将来のVMM実施形態上で実行している場合、劣悪なパフォーマンスがもたらされる可能性がある。この命令は、リング0コードからだけ使用することができる。
結論
本明細書で説明する様々なシステム、方法、及び技術は、ハードウェアで、またはソフトウェアで、または適切な場合、ハードウェアとソフトウェアの組み合わせで実施することができる。したがって、本発明の方法及び装置、または本発明の一部の態様または部分は、フロッピー(登録商標)ディスケット、CD(compact disc)−ROM(read only memory)、ハードドライブ、または他の任意のマシン可読記憶媒体などの実体のある媒体の中で実現されたプログラムコード(すなわち、命令)の形態をとることが可能であり、プログラムコードが、コンピュータなどのマシンに読み込まれ、マシンによって実行された場合、そのマシンが、本発明を実施するための装置になる。プログラマブルコンピュータ上のプログラムコード実行の場合、コンピュータは、一般に、プロセッサ、そのプロセッサによって読み取り可能な記憶媒体(揮発性のメモリ及び/または記憶要素、及び不揮発性のメモリ及び/または記憶要素を含む)、少なくとも1つの入力デバイス、及び少なくとも1つの出力デバイスを含む。1つまたは複数のプログラムは、好ましくは、コンピュータシステムと通信する高レベルの手続き言語、またはオブジェクト指向プログラミング言語で実装される。ただし、プログラムは、所望される場合、アセンブリ言語、または機械語で実装することもできる。いずれにしても、言語は、コンパイルされる言語、または解釈される言語であることが可能であり、ハードウェア実施形態と組み合わせることができる。
また、本発明の方法及び装置は、電気配線またはケーブル配線を介して、光ファイバを介して、または他の任意の形態の伝送を介してなど、何らかの伝送媒体を介して伝送されるプログラムコードの形態で実施してもよく、プログラムコードが、EPROM(erasable programmable read-only memory)、PLD(programmable logic device)、クライアントコンピュータ、ビデオレコーダなどのマシンによって受信され、読み込まれ、実行された際、そのマシンが、本発明を実施するための装置となる。汎用プロセッサ上に実装される場合、プログラムコードは、プロセッサと組み合わさって、本発明のインデックス作成(indexing)機能を実行するように動作する独特の装置を提供する。
本発明を様々な図の好適実施形態に関連して説明してきたが、本発明を逸脱することなく、本発明と同一の機能を実行するために、他の同様の実施形態を使用すること、または説明した実施形態に対して変更及び追加を行うことも可能であることを理解されたい。例えば、本発明の典型的な実施形態は、パーソナルコンピュータの機能をエミュレートするデジタルデバイスの状況で説明したが、本発明は、本明細書で説明したそのようなデジタルデバイスに限定されず、有線であれ、無線であれ、ゲームコンソール、ハンドヘルドコンピュータ、ポータブルコンピュータ、その他などのいくつもの既存の、または出現するコンピューティングデバイスまたはコンピューティング環境に適用することができ、通信ネットワークを介して接続され、そのネットワークを介して対話するいくつものそのようなコンピューティングデバイスに適用することができることが、当業者には認識されよう。さらに、特に無線ネットワーク化されたデバイスの数が増えつづけているので、ハンドヘルドデバイスオペレーティングシステム、及びその他のアプリケーション特有のハードウェア/ソフトウェアインタフェースシステムを含め、様々なコンピュータプラットフォームが、本明細書で企図されていることも強調されなければならない。したがって、本発明は、いずれの単一の実施形態にも限定されず、むしろ、特許請求の範囲に従う広さと範囲で解釈されなければならない。
最後に、本明細書で説明する開示した実施形態は、他のプロセッサアーキテクチャ、コンピュータベースのシステム、またはシステム仮想化における使用にも適合させることができ、そのような実施形態は、本明細書で行った開示によって明確に予期されており、したがって、本発明は、本明細書で説明した特定の実施形態に限定されず、代わりに、最も広く解釈されなければならない。同様に、プロセッサ仮想化以外の目的での合成命令の使用も、本明細書で行った開示によって予期されており、プロセッサ仮想化以外の状況における合成命令のいずれのそのような利用も、最も広い形で、本明細書で行った開示に読み込まれなければならない。
本発明を適用できる実施形態のコンピュータシステムを表すブロック図である。 本発明を適用できる実施形態のネットワークを表す概略図である。 ホストコンピュータシステムにおいて実行されているエミュレートされたコンピュータシステムの要素の論理関係を示す図である。 x86プロセッサ(特にIA32アーキテクチャに関する)のEFLAGSレジスタを示す図である。 仮想マシンモニタ(VMM)によって通常、認識される4つの異なるプロセッサモード分類を示す図である。 従来のx86プロセッサ仮想化アプローチが抱える問題である、リング0コードであるはずのものが実際にはより高いリングレベルで実行されていることを公開するx86命令を示すテーブルの図である。 仮想マシンがゲストオペレーティングシステムに関するあるx86レジスタ情報をシャドーイングしていることを公開する命令を示すテーブルの図である。 仮想化のためにはトラップすべきであるが、x86アーキテクチャではトラップしない命令を示すテーブルの図である。 x86アーキテクチャにおけるIFフィールド及びIOPLフィールドに関係する問題のある命令を示すテーブルの図である。 OSコードを最適化し、「合成命令」を使用することによってIA32アーキテクチャにおける仮想化を改良するための方法の一実施形態を示す流れ図である。
符号の説明
102 コンピュータハードウェア
104 仮想マシンモニタ
106 ホストオペレーティングシステム
108 仮想マシンA
110 仮想マシンB
112 ゲストOSA
114 ゲストOSB
116 アプリケーションA1
118 アプリケーションA2
120 アプリケーションB1
122 ネイティブOSX
124 アプリケーションX1
312 ホストオペレーティングシステムおよびハードウェアアーキテクチャ
314 エミュレーションプログラム
316 ゲストハードウェアアーキテクチャ
318 ゲストオペレーティングシステム
320 ソフトウェアアプリケーション

Claims (66)

  1. IA32アーキテクチャを含むが、該アーキテクチャには限定されないx86プロセッサアーキテクチャ及び同等のアーキテクチャにおけるプロセッサ仮想化を改良するための方法であって、
    x86プロセッサ上で動作する仮想マシンに関する仮想化に悪影響を与えるゲストオペレーティングシステムにおける1つまたは複数の事前定義された命令を削除する、置き換える、または補足するステップ
    を備えことを特徴とする方法。
  2. 前記1つまたは複数の命令は、PUSH CS、PUSH SS、SSからのMOV、CALLF、VERR、VERW、及びLARの命令グループのメンバを含む
    ことを特徴とする請求項1に記載の方法。
  3. x86プロセッサ上の仮想化に悪影響を与える命令は、前記x86プロセッサにおいて例外を生じさせる合成命令によって置き換えられるか、または補足され、該例外が、前記x86プロセッサ上で実行されている仮想マシンによって前記仮想マシンによる処理のためにトラップされる
    ことを特徴とする請求項1に記載の方法。
  4. 第2の仮想マシン上で実行されている第1の仮想マシンに関して、命令が、前記x86プロセッサにおいて例外を生じさせる合成命令によって置き換えられるか、または補足され、該例外が、前記第2の仮想マシンを実質的に迂回することにより、前記x86プロセッサ上で実行されている前記第1の仮想マシンによって前記仮想マシンによる処理のためにトラップされる
    ことを特徴とする請求項3に記載の方法。
  5. 前記合成命令は、ユーザモードと特権モードの両方で使用可能である
    ことを特徴とする請求項3に記載の方法。
  6. 前記合成命令は、既存のx86命令に対する帰結を有さない
    ことを特徴とする請求項3に記載の方法。
  7. 前記合成命令は、直接実行(例えば、VMDXDSBL)を無効にするための命令である
    ことを特徴とする請求項3に記載の方法。
  8. 前記合成命令は、直接実行(例えば、VMDXENBL)を有効にする(または再び有効にする)ための命令である
    ことを特徴とする請求項3に記載の方法。
  9. 合成命令で置き換えられる命令に関して、前記合成命令は、置き換えられる前記命令に意味的に類似している
    ことを特徴とする請求項3に記載の方法。
  10. 5バイト未満の長さの命令は、少なくとも5バイトの長さの合成命令で置き換えられる(例えば、パッチングを容易にするため)
    ことを特徴とする請求項9に記載の方法。
  11. STI命令は、少なくとも5バイトの長さの合成命令(例えば、VMSTI)で置き換えられる
    ことを特徴とする請求項10に記載の方法。
  12. CLI命令は、少なくとも5バイトの長さである合成命令(例えば、VMCLI)で置き換えられる
    ことを特徴とする請求項10に記載の方法。
  13. 前記ゲストオペレーティングシステムにおけるCPUID命令は、仮想化されたCPUID情報を読み取る合成命令(例えば、VMCPUID)で置き換えられる
    ことを特徴とする請求項3に記載の方法。
  14. 前記ゲストオペレーティングシステムにおける少なくとも1つのマルチプロセッサスピンロック命令は、スピンロック獲得が失敗した場合を特定するための合成命令(例えば、VMSPLAF)で補足される
    ことを特徴とする請求項3に記載の方法。
  15. 前記ゲストオペレーティングシステムにおけるPUSHF(D)命令は、IFをスタック上にプッシュする合成命令(例えば、VMPUSHFD)で置き換えられる
    ことを特徴とする請求項3に記載の方法。
  16. 前記ゲストオペレーティングシステムにおけるPOPF(D)命令は、IFをポップしてスタックから外す合成命令(例えば、VMPOPFD)で置き換えられる
    ことを特徴とする請求項3に記載の方法。
  17. 前記ゲストオペレーティングシステムにおいて記述子テーブルエントリを変更する命令は、前記記述子テーブルエントリを更新する合成命令(例えば、VMWRDESC)で置き換えられて、シャドー記述子テーブルを保持することに関連するオーバーヘッドが回避される
    ことを特徴とする請求項3に記載の方法。
  18. 前記ゲストオペレーティングシステムにおけるSGDT命令は、現在のGDTのベース及び長さをEAXに格納する合成命令(例えば、VMSGDT)で置き換えられる
    ことを特徴とする請求項3に記載の方法。
  19. 前記ゲストオペレーティングシステムにおけるSLDT命令は、現在のLDT選択子をEAXに格納する合成命令(例えば、VMSLDT)で置き換えられる
    ことを特徴とする請求項3に記載の方法。
  20. 前記ゲストオペレーティングシステムにおけるSIDT命令は、前記現在のIDTのベース及び長さをEAXに格納する合成命令(例えば、VMSIDT)で置き換えられる
    ことを特徴とする請求項3に記載の方法。
  21. 前記ゲストオペレーティングシステムにおけるSTR命令は、現在のTR選択子をEAXに格納する合成命令(例えば、VMSTR)で置き換えられる
    ことを特徴とする請求項3に記載の方法。
  22. 前記ゲストオペレーティングシステムにおけるCLI命令は、仮想化されたIFをクリアする合成命令(例えば、VMCLI)で置き換えられる
    ことを特徴とする請求項3に記載の方法。
  23. 前記ゲストオペレーティングシステムにおけるSTI命令は、仮想化されたIFを設定する合成命令(例えば、VMSTI)で置き換えられる
    ことを特徴とする請求項3に記載の方法。
  24. 前記プロセッサを停止させるための合成命令(例えば、VMHALT)は、ユーザレベルのゲストコードとして実行される
    ことを特徴とする請求項3に記載の方法。
  25. オペレーティングシステムが、該オペレーティングシステムが仮想化されたプロセッサ上で実行されているか、またはx86プロセッサ上で直接に実行されているかを判定する方法であって、
    中央処理装置のIDを表す値を戻すために合成命令(例えば、VMCPUID)を実行するステップと、
    値が戻された場合、前記オペレーティングシステムが、仮想化されたプロセッサ上で実行されていると結論付け、当該結論付けの後、合成命令を利用するステップと、
    例外が生じた場合、前記オペレーティングシステムが、x86プロセッサ上で直接に実行されていると結論付け、当該結論付けの後、合成命令を利用することを控えるステップと
    を備えることを特徴とする方法。
  26. 値が戻された場合、基礎にある仮想マシンモニタの機能または動作にアクセスするか、または該機能または該動作を変更するステップ
    をさらに備えることを特徴とする請求項25に記載の方法。
  27. 前記合成命令に関する16進演算コードは、0FC7C80100である
    ことを特徴とする請求項25に記載の方法。
  28. 長いJMP命令を使用してトラップ可能な命令を効率的にパッチするためにオペレーティングシステムコードを改良するための方法であって、
    ゲストオペレーティングシステムにおいて、5バイト未満の長さのトラップ可能な命令(例えば、リング0コード内で実行されるSTI命令及びCLI命令)のインスタンスを探し出し、該トラップ可能な命令を少なくとも5バイトの長さの対応する合成命令(例えば、それぞれVMSTI及びVMCLI)で置き換えるステップ
    を備えることを特徴とする方法。
  29. IA32アーキテクチャを含むが、該アーキテクチャには限定されないx86プロセッサアーキテクチャ上及び同等のアーキテクチャ上で合成命令を処理するためのシステムであって、
    前記合成命令が前記x86プロセッサにおいて例外を生じさせた後、ゲストオペレーティングシステムによって発行された前記合成命令をトラップするためのサブシステムと、
    前記ゲストオペレーティングシステムのために前記合成命令を処理するためのサブシステムと
    を備えたことを特徴とするシステム。
  30. スピンロック獲得が失敗した場合を特定するための合成命令(例えば、VMSPLAF)がトラップされ、処理されるサブシステム
    をさらに備えたことを特徴とする請求項29に記載のシステム。
  31. IFをスタック上にプッシュするための合成命令(例えば、VMPUSHFD)を処理するためのサブシステム
    をさらに備えたことを特徴とする請求項29に記載のシステム。
  32. IFをポップしてスタックから外すための合成命令(例えば、VMPOPFD)を処理するためのサブシステム
    をさらに備えたことを特徴とする請求項29に記載のシステム。
  33. 記述子テーブルエントリを更新する合成命令(例えば、VMWRDESC)を処理するためのサブシステムをさらに備え、シャドー記述子テーブルを保持することに関連するオーバーヘッドを回避する
    ことを特徴とする請求項29に記載のシステム。
  34. 現在のGDTのベース及び長さをEAXに格納するための合成命令(例えば、VMSGDT)を処理するためのサブシステム
    をさらに備えたことを特徴とする請求項29に記載のシステム。
  35. 現在のLDT選択子をEAXに格納するための合成命令(例えば、VMSLDT)を処理するためのサブシステム
    をさらに備えたことを特徴とする請求項29に記載のシステム。
  36. 現在のIDTのベース及び長さをEAXに格納するための合成命令(例えば、VMSIDT)を処理するためのサブシステム
    をさらに備えたことを特徴とする請求項29に記載のシステム。
  37. 現在のTR選択子をEAXに格納するための合成命令(例えば、VMSTR)を処理するためのサブシステム
    をさらに備えたことを特徴とする請求項29に記載のシステム。
  38. 仮想化されたIFをクリアするための合成命令(例えば、VMCLI)を処理するためのサブシステム
    をさらに備えたことを特徴とする請求項29に記載のシステム。
  39. 仮想化されたIFを設定するための合成命令(例えば、VMSTI)を処理するためのサブシステム
    をさらに備えたことを特徴とする請求項29に記載のシステム。
  40. ユーザレベルのゲストコードとして実行することができる前記プロセッサを停止させるための合成命令(例えば、VMHALT)を処理するためのサブシステム
    をさらに備えたことを特徴とする請求項29に記載のシステム。
  41. 前記システムが、仮想化されたプロセッサ上で実行されているか、またはx86プロセッサ上で直接に実行されているかを判定するためのサブシステムをさらに備え、
    前記サブシステムは、
    中央処理装置によってサポートされる機能のIDを表す値を戻すための合成命令(例えば、VMCPUID)を実行するためのサブシステムと、
    値が戻されたかどうかを判定し、(a)戻された場合、オペレーティングシステムが、仮想化されたプロセッサ上で実行されていると結論付け、当該結論付けの後、合成命令を使用し、(b)戻されない場合、オペレーティングシステムがx86プロセッサ上で直接に実行されていると結論付け、当該結論付けの後、合成命令を利用することを控えるためのサブシステムとを含む
    ことを特徴とする請求項29に記載のシステム。
  42. 値が戻された場合、基礎にある仮想マシンモニタの機能または動作にアクセスするか、または該機能または該動作を変更するためのサブシステム
    をさらに備えたことを特徴とする請求項41に記載のシステム。
  43. 前記合成命令に関する16進演算コードは、0FC7C80100である
    ことを特徴とする請求項41に記載のシステム。
  44. 前記合成命令は、直接実行を無効にするための合成命令(例えば、VMDXDSBL)を含む
    ことを特徴とする請求項29に記載のシステム。
  45. 前記合成命令は、直接実行を有効にする(または再び有効にする)ための合成命令(例えば、VMDXENBL)を含む
    ことを特徴とする請求項29に記載のシステム。
  46. 前記合成命令は、
    IFをスタック上にプッシュするための合成命令(例えば、VMPUSHFD)と、
    IFをポップしてスタックから外すための合成命令(例えば、VMPOPFD)とを含む
    ことを特徴とする請求項29に記載のシステム。
  47. 前記合成命令は、
    現在のGDTのベース及び長さをEAXに格納するための合成命令(例えば、VMSGDT)と、
    現在のLDT選択子をEAXに格納するための合成命令(例えば、VMSLDT)と、
    現在のIDTのベース及び長さをEAXに格納するための合成命令(例えば、VMSIDT)と、
    現在のTR選択子をEAXに格納するための合成命令(例えば、VMSTR)とをさらに含む
    ことを特徴とする請求項46に記載のシステム。
  48. 前記合成命令は、
    仮想化されたIFをクリアするための合成命令(例えば、VMCLI)と、
    仮想化されたIFを設定するための合成命令(例えば、VMSTI)とをさらに含む
    ことを特徴とする請求項46に記載のシステム。
  49. 前記合成命令は、トラップされ、処理されるスピンロック獲得が失敗した場合を特定するための合成命令をさらに含む
    ことを特徴とする請求項46に記載のシステム。
  50. 前記合成命令は、中央処理装置のIDを表す値を戻すための合成命令(例えば、VMCPUID)をさらに含む
    ことを特徴とする請求項46に記載のシステム。
  51. 前記合成命令に関する16進演算コードは、0FC7C80100である
    ことを特徴とする請求項50に記載のシステム。
  52. IA32アーキテクチャを含むが、該アーキテクチャには限定されないx86プロセッサアーキテクチャ及び同等のアーキテクチャにおけるプロセッサ仮想化を改良するためのコンピュータ可読命令を含むコンピュータ読み取り可能な記録媒体であって、
    前記コンピュータ可読命令は、前記x86プロセッサにおいて例外を生じさせる合成命令を含み、該例外が、前記x86プロセッサ上で実行されている仮想マシンモニタによって前記仮想マシンモニタによる処理のためにトラップされる
    ことを特徴とするコンピュータ読み取り可能な記録媒体。
  53. ゲストオペレーティングシステムにおける少なくとも1つマルチプロセッサスピンロック命令は、スピンロック獲得が失敗した場合を特定するための合成命令(例えば、VMSPLAF)で補足される
    ことを特徴とする請求項46に記載の方法。
  54. 中央処理装置のIDを表す値を戻すための合成命令(例えば、VMCPUID)をさらに含む
    ことを特徴とする請求項46に記載のコンピュータ可読命令。
  55. IFをスタック上にプッシュする合成命令(例えば、VMPUSHFD)をさらに含む
    ことを特徴とする請求項46に記載のコンピュータ可読命令。
  56. IFをポップしてスタックから外す合成命令(例えば、VMPOPFD)をさらに含む
    ことを特徴とする請求項46に記載のコンピュータ可読命令。
  57. 現在のGDTのベース及び長さをEAXに格納する合成命令(例えば、VMSGDT)をさらに含むことを特徴とする請求項46に記載のコンピュータ可読命令。
  58. 現在のLDT選択子をEAXに格納する合成命令(例えば、VMSLDT)をさらに
    含むことを特徴とする請求項46に記載のコンピュータ可読命令。
  59. 現在のLDTのベース及び長さをEAXに格納する合成命令(例えば、VMSIDT)をさらに含む
    ことを特徴とする請求項46に記載のコンピュータ可読命令。
  60. 現在のTR選択子をEAXに格納する合成命令(例えば、VMSTR)をさらに含む
    ことを特徴とする請求項46に記載のコンピュータ可読命令。
  61. 仮想化されたIFをクリアする合成命令(例えば、VMCLI)をさらに含む
    ことを特徴とする請求項46に記載のコンピュータ可読命令。
  62. 仮想化されたIFを設定する合成命令(例えば、VMSTI)をさらに含む
    ことを特徴とする請求項46に記載のコンピュータ可読命令。
  63. 前記命令が、仮想化されたプロセッサ上で実行されているか、またはx86プロセッサ上で直接に実行されているかを判定するための命令をさらに含み、
    該命令は、
    中央処理装置のIDを表す値を戻すための合成命令を実行するための命令と、
    中央処理装置のIDに相当する値が戻されたかどうかを判定し、(a)戻された場合、合成命令を利用し、(b)戻されない場合、合成命令の使用を中止するための命令とを含む
    ことを特徴とする請求項46に記載のコンピュータ可読命令。
  64. 前記合成命令に関する16進演算コードは、0FC7C80100である
    ことを特徴とする請求項46に記載のコンピュータ可読命令。
  65. IA32アーキテクチャを含むが、該アーキテクチャには限定されないx86プロセッサアーキテクチャ上及び同等のアーキテクチャ上で実行されている場合に合成命令を処理するためのシステムであって、
    方法は、ゲストオペレーティングシステムにおいて、PUSH CS、PUSH SS、SSからのMOV、CALLF、VERR、VERW、及びLARの事前定義された命令の1つまたは複数のインスタンスを削除する、置き換える、または補足するステップを含む
    ことを特徴とするシステム。
  66. IA32アーキテクチャを含むが、該アーキテクチャには限定されないx86プロセッサアーキテクチャ上及び同等のアーキテクチャ上で実行されている場合にプロセッサ仮想化を改良するようにゲストオペレーティングシステムを最適化するための方法であって、
    前記ゲストオペレーティングシステムにおいて、PUSH CS、PUSH SS、SSからのMOV、CALLF、VERR、VERW、及びLARの事前定義された命令の1つまたは複数のインスタンスを削除する、置き換える、または補足するステップと、
    前記ゲストオペレーティングシステムにおけるCPUID命令を仮想化されたCPUID情報を読み取る合成命令(例えば、VMCPUID)で置き換えるステップと、
    前記ゲストオペレーティングシステムにおけるスピンロック命令をスピンロック獲得が失敗した場合を特定する合成命令(例えば、VMSPLAF)で補足するステップと、
    前記ゲストオペレーティングシステムにおけるPUSHF(D)命令をIFをスタック上にプッシュするための合成命令(例えば、VMPUSHFD)で置き換えるステップと、
    前記ゲストオペレーティングシステムにおけるPOPF(D)命令をIFをポップしてスタックから外すための合成命令(例えば、VMPOPFD)で置き換えるステップと、
    前記ゲストオペレーティングシステムにおけるSGDT命令を現在のGDTのベース及び長さをEAXに格納するための合成命令(例えば、VMSGDT)で置き換えるステップと、
    前記ゲストオペレーティングシステムにおけるSLDT命令を現在のLDT選択子をEAXに格納するための合成命令(例えば、VMSLDT)で置き換えるステップと、
    前記ゲストオペレーティングシステムにおけるSIDT命令を現在のIDTのベース及び長さをEAXに格納するための合成命令(例えば、VMSIDT)で置き換えるステップと、
    前記ゲストオペレーティングシステムにおけるSTR命令を現在のTR選択子をEAXに格納するための合成命令(例えば、VMSTR)で置き換えるステップと、
    前記ゲストオペレーティングシステムにおけるCLI命令を仮想化されたIFをクリアするための合成命令(例えば、VMCLI)で置き換えるステップと、
    前記ゲストオペレーティングシステムにおけるSTI命令を仮想化されたIFを設定するための合成命令(例えば、VMSTI)で置き換えるステップと
    を備えることを特徴とする方法。
JP2004267291A 2003-10-14 2004-09-14 プロセッサ仮想化を改良するための方法及び合成命令を処理するためのシステム Withdrawn JP2005122711A (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US10/685,051 US7552426B2 (en) 2003-10-14 2003-10-14 Systems and methods for using synthetic instructions in a virtual machine

Publications (2)

Publication Number Publication Date
JP2005122711A true JP2005122711A (ja) 2005-05-12
JP2005122711A5 JP2005122711A5 (ja) 2007-11-01

Family

ID=34377613

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004267291A Withdrawn JP2005122711A (ja) 2003-10-14 2004-09-14 プロセッサ仮想化を改良するための方法及び合成命令を処理するためのシステム

Country Status (12)

Country Link
US (2) US7552426B2 (ja)
EP (1) EP1524596B1 (ja)
JP (1) JP2005122711A (ja)
KR (1) KR20050035833A (ja)
CN (1) CN1607503B (ja)
AU (1) AU2004212540A1 (ja)
BR (1) BRPI0406029A (ja)
CA (1) CA2482008A1 (ja)
MX (1) MXPA04010030A (ja)
RU (1) RU2374675C2 (ja)
TW (1) TW200519753A (ja)
ZA (1) ZA200407584B (ja)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009506462A (ja) * 2005-08-30 2009-02-12 マイクロソフト コーポレーション 多層仮想化メカニズムを用いた階層的な仮想化
JP2010500664A (ja) * 2006-08-08 2010-01-07 インテル・コーポレーション パフォーマンスカウンタの仮想化
US8732721B2 (en) 2008-02-27 2014-05-20 Nec Corporation Method for reducing trap overhead when executing a guest in a virtual machine
JP2014531088A (ja) * 2011-10-19 2014-11-20 グーグル・インコーポレーテッド コンピュータセキュリティを増強する防御技術
JP2017076369A (ja) * 2015-10-13 2017-04-20 ベイジン バイドゥ ネットコム サイエンス アンド テクノロジー カンパニー リミテッド コンテナに基づく仮想化システム用動作キャプチャ方法、および装置
JP2019016340A (ja) * 2017-07-03 2019-01-31 北京▲東▼土科技股▲分▼有限公司 インダストリアル・インターネットオペレーティングシステムに基づくマルチオペレーティングシステム運行方法および装置

Families Citing this family (89)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040186876A1 (en) * 2003-03-18 2004-09-23 Hob Electronic Gmbh & Co. Kg Processor system operable in a supervisor mode and a user mode
US7552426B2 (en) 2003-10-14 2009-06-23 Microsoft Corporation Systems and methods for using synthetic instructions in a virtual machine
US7356735B2 (en) * 2004-03-30 2008-04-08 Intel Corporation Providing support for single stepping a virtual machine in a virtual machine environment
US7770169B2 (en) * 2004-05-17 2010-08-03 Oracle America, Inc. Thread rendezvous for read-only code in an object-oriented computing environment
WO2006011994A2 (en) * 2004-06-26 2006-02-02 Transvirtual Systems, Llc System for emulating wang vs programs
US7500244B2 (en) * 2004-06-30 2009-03-03 Intel Corporation Adaptive algorithm for selecting a virtualization algorithm in virtual machine environments
US20060005190A1 (en) * 2004-06-30 2006-01-05 Microsoft Corporation Systems and methods for implementing an operating system in a virtual machine environment
US7827558B2 (en) * 2004-06-30 2010-11-02 Devicevm, Inc. Mechanism for enabling a program to be executed while the execution of an operating system is suspended
US7886293B2 (en) * 2004-07-07 2011-02-08 Intel Corporation Optimizing system behavior in a virtual machine environment
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
US7647589B1 (en) * 2005-02-07 2010-01-12 Parallels Software International, Inc. Methods and systems for safe execution of guest code in virtual machine context
JP4357442B2 (ja) * 2005-03-23 2009-11-04 株式会社東芝 プラン実行装置、プラン実行方法およびプログラム
US7707629B2 (en) * 2005-03-31 2010-04-27 Intel Corporation Platform configuration register virtualization apparatus, systems, and methods
US7363463B2 (en) * 2005-05-13 2008-04-22 Microsoft Corporation Method and system for caching address translations from multiple address spaces in virtual machines
US7904903B2 (en) * 2005-06-30 2011-03-08 Intel Corporation Selective register save and restore upon context switch using trap
US8839450B2 (en) * 2007-08-02 2014-09-16 Intel Corporation Secure vault service for software components within an execution environment
US7953980B2 (en) * 2005-06-30 2011-05-31 Intel Corporation Signed manifest for run-time verification of software program identity and integrity
US9785485B2 (en) * 2005-07-27 2017-10-10 Intel Corporation Virtualization event processing in a layered virtualization architecture
US7555592B1 (en) * 2005-08-23 2009-06-30 Parallels Software International, Inc. Kernel acceleration technology for virtual machine optimization
US8154385B2 (en) * 2005-08-31 2012-04-10 Impinj, Inc. Local processing of received RFID tag responses
US8001543B2 (en) * 2005-10-08 2011-08-16 International Business Machines Corporation Direct-memory access between input/output device and physical memory within virtual machine environment
US8909946B2 (en) 2005-11-15 2014-12-09 Microsoft Corporation Efficient power management of a system with virtual machines
WO2007115425A1 (en) 2006-03-30 2007-10-18 Intel Corporation Method and apparatus for supporting heterogeneous virtualization
US7845009B2 (en) * 2006-05-16 2010-11-30 Intel Corporation Method and apparatus to detect kernel mode rootkit events through virtualization traps
US7555628B2 (en) * 2006-08-15 2009-06-30 Intel Corporation Synchronizing a translation lookaside buffer to an extended paging table
US20080088636A1 (en) * 2006-10-13 2008-04-17 Nee Shen Ho System and method for the display and control of virtual environments in a single pipe graphics memory controller hub using picture-in-picture
US8694712B2 (en) * 2006-12-05 2014-04-08 Microsoft Corporation Reduction of operational costs of virtual TLBs
US8055951B2 (en) * 2007-04-10 2011-11-08 International Business Machines Corporation System, method and computer program product for evaluating a virtual machine
US8561060B2 (en) * 2007-04-26 2013-10-15 Advanced Micro Devices, Inc. Processor and method configured to determine an exit mechanism using an intercept configuration for a virtual machine
US8561061B2 (en) 2007-05-14 2013-10-15 Vmware, Inc. Adaptive dynamic selection and application of multiple virtualization techniques
US8479195B2 (en) 2007-05-16 2013-07-02 Vmware, Inc. Dynamic selection and application of multiple virtualization techniques
JP4864817B2 (ja) * 2007-06-22 2012-02-01 株式会社日立製作所 仮想化プログラム及び仮想計算機システム
US8307358B1 (en) * 2007-07-10 2012-11-06 Parallels IP Holdings GmbH Method and system for unattended installation of guest operating system
US8261284B2 (en) * 2007-09-13 2012-09-04 Microsoft Corporation Fast context switching using virtual cpus
CN101216778B (zh) * 2008-01-21 2011-04-13 中国科学院计算技术研究所 一种risc处理器装置及其指令地址转换查找方法
US20090187726A1 (en) * 2008-01-22 2009-07-23 Serebrin Benjamin C Alternate Address Space to Permit Virtual Machine Monitor Access to Guest Virtual Address Space
US8245236B2 (en) * 2008-02-27 2012-08-14 International Business Machines Corporation Lock based moving of threads in a shared processor partitioning environment
CN100555225C (zh) * 2008-03-17 2009-10-28 中国科学院计算技术研究所 一种支持x86虚拟机的risc处理器装置及方法
US8086822B2 (en) 2008-05-30 2011-12-27 Vmware, Inc. In-place shadow tables for virtualization
US20090322768A1 (en) * 2008-06-25 2009-12-31 Lalonde Paul A Compile-time type-safe composable state objects
US9201673B2 (en) * 2008-07-30 2015-12-01 Microsoft Technology Licensing, Llc Efficient detection and response to spin waits in multi-processor virtual machines
US8281296B2 (en) * 2008-08-12 2012-10-02 Oracle America, Inc. Cross-ISA inlining in a system virtual machine
US8387031B2 (en) * 2009-01-23 2013-02-26 International Business Machines Corporation Providing code improvements for nested virtual machines
CN101620547B (zh) * 2009-07-03 2012-05-30 中国人民解放军国防科学技术大学 X86计算机虚拟化的物理中断处理方法
US9086922B2 (en) * 2009-10-26 2015-07-21 Microsoft Technology Licensing, Llc Opportunistically scheduling and adjusting time slices
CN102141928A (zh) 2010-01-29 2011-08-03 国际商业机器公司 虚拟环境下的数据处理方法、系统以及系统的部署方法
EA019399B1 (ru) * 2010-03-19 2014-03-31 Закрытое Акционерное Общество "Ес-Лизинг" Способ реализации доверенных вычислений
US10521231B2 (en) * 2010-06-24 2019-12-31 International Business Machines Corporation Function virtualization facility for blocking instruction function of a multi-function instruction of a virtual processor
US8392625B2 (en) 2010-06-25 2013-03-05 Intel Corporation Methods and systems to implement a physical device to differentiate amongst multiple virtual machines of a host computer system
US8464104B2 (en) 2010-09-10 2013-06-11 International Business Machines Corporation Mobility of versioned workload partitions
US8789042B2 (en) * 2010-09-27 2014-07-22 Mips Technologies, Inc. Microprocessor system for virtual machine execution
US8490090B2 (en) 2011-02-17 2013-07-16 International Business Machines Corporation Multilevel support in a nested virtualization environment
RU2472215C1 (ru) 2011-12-28 2013-01-10 Закрытое акционерное общество "Лаборатория Касперского" Способ выявления неизвестных программ с использованием эмуляции процесса загрузки
US9292316B2 (en) * 2012-03-01 2016-03-22 International Business Machines Corporation Cloud of virtual clouds for increasing isolation among execution domains
US9524263B2 (en) * 2012-06-29 2016-12-20 Intel Corporation Method and apparatus for bus lock assistance
US9477505B2 (en) 2012-08-14 2016-10-25 Oracle International Corporation Method for reducing the overhead associated with a virtual machine exit when handling instructions related to descriptor tables
CN103677769B (zh) * 2012-09-06 2016-09-14 中天安泰(北京)信息技术有限公司 指令重组方法及装置
CN103677770B (zh) * 2012-09-06 2016-12-21 中天安泰(北京)信息技术有限公司 指令重组方法及装置
CN103677746B (zh) * 2012-09-06 2016-06-29 中天安泰(北京)信息技术有限公司 指令重组方法及装置
US9286131B2 (en) 2012-11-14 2016-03-15 Red Hat Israel, Ltd. Processor unplug in virtualized computer system
US9778943B2 (en) * 2013-05-28 2017-10-03 Red Hat Israel, Ltd. Timer based virtual processor scheduling and suspension on physical processor for use of physical processor by other processing
US9513924B2 (en) 2013-06-28 2016-12-06 Globalfoundries Inc. Predictor data structure for use in pipelined processing
US9619230B2 (en) 2013-06-28 2017-04-11 International Business Machines Corporation Predictive fetching and decoding for selected instructions
US9361144B2 (en) 2013-06-28 2016-06-07 Globalfoundries Inc. Predictive fetching and decoding for selected return instructions
US9916185B2 (en) 2014-03-18 2018-03-13 International Business Machines Corporation Managing processing associated with selected architectural facilities
US9582295B2 (en) 2014-03-18 2017-02-28 International Business Machines Corporation Architectural mode configuration
US9256467B1 (en) 2014-11-11 2016-02-09 Amazon Technologies, Inc. System for managing and scheduling containers
US9703703B2 (en) * 2014-12-23 2017-07-11 Intel Corporation Control of entry into protected memory views
US9286105B1 (en) 2015-03-16 2016-03-15 AO Kaspersky Lab System and method for facilitating joint operation of multiple hypervisors in a computer system
US9870275B2 (en) 2015-05-12 2018-01-16 International Business Machines Corporation Processor thread management
US9984231B2 (en) * 2015-11-11 2018-05-29 Qualcomm Incorporated Detecting program evasion of virtual machines or emulators
US10261782B2 (en) 2015-12-18 2019-04-16 Amazon Technologies, Inc. Software container registry service
US10963280B2 (en) 2016-02-03 2021-03-30 Advanced Micro Devices, Inc. Hypervisor post-write notification of control and debug register updates
US10135837B2 (en) 2016-05-17 2018-11-20 Amazon Technologies, Inc. Versatile autoscaling for containers
US10338135B2 (en) * 2016-09-28 2019-07-02 Amazon Technologies, Inc. Extracting debug information from FPGAs in multi-tenant environments
US11099894B2 (en) 2016-09-28 2021-08-24 Amazon Technologies, Inc. Intermediate host integrated circuit between virtual machine instance and customer programmable logic
US10250572B2 (en) 2016-09-29 2019-04-02 Amazon Technologies, Inc. Logic repository service using encrypted configuration data
US10282330B2 (en) 2016-09-29 2019-05-07 Amazon Technologies, Inc. Configurable logic platform with multiple reconfigurable regions
US10162921B2 (en) 2016-09-29 2018-12-25 Amazon Technologies, Inc. Logic repository service
US10642492B2 (en) 2016-09-30 2020-05-05 Amazon Technologies, Inc. Controlling access to previously-stored logic in a reconfigurable logic device
US11115293B2 (en) 2016-11-17 2021-09-07 Amazon Technologies, Inc. Networked programmable logic service provider
US10409642B1 (en) 2016-11-22 2019-09-10 Amazon Technologies, Inc. Customer resource monitoring for versatile scaling service scaling policy recommendations
US10635479B2 (en) 2016-12-19 2020-04-28 Bitdefender IPR Management Ltd. Event filtering for virtual machine security applications
US10706143B2 (en) * 2017-05-19 2020-07-07 Intel Corporation Techniques for secure-chip memory for trusted execution environments
RU2675045C1 (ru) * 2017-09-18 2018-12-14 Юрий Анатольевич Ткаченко Архитектура микропроцессора с функцией автоматического программирования микроконтроллеров
US11281495B2 (en) 2017-10-26 2022-03-22 Advanced Micro Devices, Inc. Trusted memory zone
US11086631B2 (en) 2018-11-30 2021-08-10 Western Digital Technologies, Inc. Illegal instruction exception handling
US11669365B1 (en) 2019-08-26 2023-06-06 Amazon Technologies, Inc. Task pool for managed compute instances
LU101621B1 (en) * 2020-01-30 2021-07-30 Microsoft Technology Licensing Llc Efficiently providing a guest context access to file content at a host content

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5539911A (en) * 1991-07-08 1996-07-23 Seiko Epson Corporation High-performance, superscalar-based computer system with out-of-order instruction execution
KR100280460B1 (ko) * 1998-04-08 2001-02-01 김영환 데이터 처리 장치 및 이의 복수의 스레드 처리 방법
US6397242B1 (en) * 1998-05-15 2002-05-28 Vmware, Inc. Virtualization system including a virtual machine monitor for a computer with a segmented architecture
GB9825102D0 (en) * 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
US6658657B1 (en) * 2000-03-31 2003-12-02 Intel Corporation Method and apparatus for reducing the overhead of virtual method invocations
EP1358550A1 (en) 2001-01-30 2003-11-05 Koninklijke Philips Electronics N.V. Synchronization of a main processor with an instruction path coprocessor
US7191440B2 (en) * 2001-08-15 2007-03-13 Intel Corporation Tracking operating system process and thread execution and virtual machine execution in hardware or in a virtual machine monitor
US7003778B2 (en) 2001-10-24 2006-02-21 Sun Microsystems, Inc. Exception handling in java computing environments
US7127548B2 (en) * 2002-04-16 2006-10-24 Intel Corporation Control register access virtualization performance improvement in the virtual-machine architecture
US7210144B2 (en) * 2002-08-02 2007-04-24 Microsoft Corporation Method for monitoring and emulating privileged instructions of programs in a virtual machine
US20050076186A1 (en) * 2003-10-03 2005-04-07 Microsoft Corporation Systems and methods for improving the x86 architecture for processor virtualization, and software systems and methods for utilizing the improvements
US7552426B2 (en) 2003-10-14 2009-06-23 Microsoft Corporation Systems and methods for using synthetic instructions in a virtual machine

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009506462A (ja) * 2005-08-30 2009-02-12 マイクロソフト コーポレーション 多層仮想化メカニズムを用いた階層的な仮想化
JP2010500664A (ja) * 2006-08-08 2010-01-07 インテル・コーポレーション パフォーマンスカウンタの仮想化
US8732721B2 (en) 2008-02-27 2014-05-20 Nec Corporation Method for reducing trap overhead when executing a guest in a virtual machine
JP2014531088A (ja) * 2011-10-19 2014-11-20 グーグル・インコーポレーテッド コンピュータセキュリティを増強する防御技術
JP6013640B2 (ja) * 2011-10-19 2016-10-25 グーグル インコーポレイテッド コンピュータセキュリティを増強する防御技術
JP2017037660A (ja) * 2011-10-19 2017-02-16 グーグル インコーポレイテッド コンピュータセキュリティを増強する防御技術
US9576129B2 (en) 2011-10-19 2017-02-21 Google Inc. Defensive techniques to increase computer security
JP2017076369A (ja) * 2015-10-13 2017-04-20 ベイジン バイドゥ ネットコム サイエンス アンド テクノロジー カンパニー リミテッド コンテナに基づく仮想化システム用動作キャプチャ方法、および装置
JP2019016340A (ja) * 2017-07-03 2019-01-31 北京▲東▼土科技股▲分▼有限公司 インダストリアル・インターネットオペレーティングシステムに基づくマルチオペレーティングシステム運行方法および装置

Also Published As

Publication number Publication date
TW200519753A (en) 2005-06-16
AU2004212540A1 (en) 2005-04-28
CN1607503B (zh) 2011-06-15
CA2482008A1 (en) 2005-04-14
RU2374675C2 (ru) 2009-11-27
EP1524596A2 (en) 2005-04-20
EP1524596A3 (en) 2007-11-21
US8504703B2 (en) 2013-08-06
CN1607503A (zh) 2005-04-20
BRPI0406029A (pt) 2005-08-02
RU2004129720A (ru) 2006-03-20
MXPA04010030A (es) 2005-04-19
ZA200407584B (en) 2005-05-25
EP1524596B1 (en) 2020-02-12
KR20050035833A (ko) 2005-04-19
US7552426B2 (en) 2009-06-23
US20050080753A1 (en) 2005-04-14
US20050081199A1 (en) 2005-04-14

Similar Documents

Publication Publication Date Title
JP2005122711A (ja) プロセッサ仮想化を改良するための方法及び合成命令を処理するためのシステム
US11200080B1 (en) Late load technique for deploying a virtualization layer underneath a running operating system
US10204220B1 (en) Thin hypervisor for native execution of unsafe code
US9529614B2 (en) Automatically bridging the semantic gap in machine introspection
JP4156611B2 (ja) 64ビットx86プロセッサ上でレガシ32ビットx86仮想マシンを実行するためのシステムおよび方法
JP6411494B2 (ja) 仮想マシンにおけるページフォールトインジェクション
US7434224B2 (en) Plural operating systems having interrupts for all operating systems processed by the highest priority operating system
US7818808B1 (en) Processor mode for limiting the operation of guest software running on a virtual machine supported by a virtual machine monitor
US9129106B2 (en) Systems and methods for secure in-VM monitoring
US20050076186A1 (en) Systems and methods for improving the x86 architecture for processor virtualization, and software systems and methods for utilizing the improvements
US20050204357A1 (en) Mechanism to protect extensible firmware interface runtime services utilizing virtualization technology
CA2577493A1 (en) Operating systems
US20180004943A1 (en) Systems and Methods of Asynchronous Analysis of Event Notifications for Computer Security Applications
US7581085B1 (en) Fast stub and frame technology for virtual machine optimization
NL2030804B1 (en) Flexible return and event delivery
Im et al. On-demand virtualization for live migration in bare metal cloud
US11550609B2 (en) Unified hypercall interface across processors in virtualized computing systems
Machado Self-Secured Devices: Securing shared device access on TrustZone-based systems
Bugnion et al. The Popek/Goldberg Theorem
CN113127936A (zh) 具有对保护环之间的特权资源和异常的可配置分配的处理器
Govindharajan Porting linux to a hypervisor based embedded system
CN114090273A (zh) 一种进程间通信的方法、装置及计算机存储介质
Steil et al. Inside VMware
CA2540658A1 (en) Operating systems

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070914

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070914

A761 Written withdrawal of application

Free format text: JAPANESE INTERMEDIATE CODE: A761

Effective date: 20090501