JP2008545179A - 複数の経路最適化を備える関数レベルジャストインタイム変換エンジン - Google Patents

複数の経路最適化を備える関数レベルジャストインタイム変換エンジン Download PDF

Info

Publication number
JP2008545179A
JP2008545179A JP2008511153A JP2008511153A JP2008545179A JP 2008545179 A JP2008545179 A JP 2008545179A JP 2008511153 A JP2008511153 A JP 2008511153A JP 2008511153 A JP2008511153 A JP 2008511153A JP 2008545179 A JP2008545179 A JP 2008545179A
Authority
JP
Japan
Prior art keywords
cpu type
computer
instructions
executable code
code
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2008511153A
Other languages
English (en)
Other versions
JP5139975B2 (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.)
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 JP2008545179A publication Critical patent/JP2008545179A/ja
Application granted granted Critical
Publication of JP5139975B2 publication Critical patent/JP5139975B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • 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/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)
  • Debugging And Monitoring (AREA)

Abstract

JITバイナリトランスレータは、命令コードレベルというよりもむしろ関数レベルにおいてコードを変換する。本発明のJITバイナリトランスレータは、命令ではなく、ソースストリームからx86関数全体を取り込み、関数全体をターゲットプロセッサの同等の関数に変換し、ソースストリームに戻す前に一度にその関数全てを実行し、そうすることによって文脈切り替えを削減する。また、JITバイナリトランスレータは、ソースコード関数文脈全体を一度に参照するので、ソフトウェアエミュレータは、コード変換を最適化することができる。例えば、JITバイナリトランスレータは、x86命令のシーケンスを、効率的なPPC同等のシーケンスに変換することを決定することができる。多くのそのような最適化は、よりタイト(tighter)なエミュレートされたバイナリをもたらす。

Description

本発明は一般に、レガシーコンピュータシステムによって使用されるコードをホストコンピュータシステムによって実行されるコードへ変換することによって、ホストハードウェア環境においてレガシーハードウェア環境を仮想化するシステム及び方法に関し、より詳細には、命令レベルというよりもむしろ関数レベルにおいてコード変換を実施し、一連のレガシーコード命令を、対応する一連のホストコード命令に変換することによって、結果として生じるコードを最適化するジャストインタイム変換エンジンに関する。
ゲームコンソールのようなコンピュータシステムのハードウェアアーキテクチャを最新のものにして、より速く、より機能が豊富なハードウェアを実装する場合、開発者は、レガシーコンピュータシステムプラットフォーム用に開発されたアプリケーションプログラムまたはゲームについて、レガシーコンピュータシステムに対する互換性の問題に直面する。特に、最新のハードウェアアーキテクチャは、レガシーハードウェアアーキテクチャ用に開発されたアプリケーションプログラムまたはゲームをサポートすることが商業的に望ましい。しかしながら、最新のハードウェアアーキテクチャは、基本的に、または根本的に、レガシーハードウェアアーキテクチャとは異なり、2つのシステム間のアーキテクチャの違いは、レガシーアプリケーションプログラムまたはゲームを、十分なハードウェア修正および/またはソフトウェアパッチなしで新しいハードウェアアーキテクチャ上で動作させることを、たとえ可能であったとしても、非常に困難にする。ユーザは一般的に、そのような互換性の問題を予想するので、これらの問題を解決することは、最新のハードウェアアーキテクチャの成功にとってとても重要である。
PCアーキテクチャおよびソフトウェアエミュレーションの近年の進歩は、コンピュータやゲームコンソールに対して、ハードウェアというよりもむしろソフトウェアにおいてレガシーアプリケーションプログラムまたはゲームのエミュレーションを可能にするために十分にパワーのあるハードウェアアーキテクチャを提供している。そのようなソフトウェアエミュレータは、アプリケーションプログラムまたはゲームのタイトル命令(title instructions)をオンザフライ(on the fly)で、新しいハードウェアアーキテクチャが理解可能なデバイス命令に変換する。このソフトウェアエミュレーションによるアプローチは、ゲームコンソールの開発者がハードウェアとソフトウェアの両方のプラットフォームに対する制御を維持することができ、レガシーゲームに極めて精通しているので、コンピュータゲームコンソールの互換性の問題に対して特に有用である。
そのようなソフトウェアエミュレータのほとんどが、コードワンCPU命令(code one CPU instructions)を一度に変換する。例えば、ソフトウェアエミュレータは、シングルx86命令をソースストリームから引き出し、それをターゲットプロセッサ(例えば、パワーPC(PPC))の命令セットからオンザフライで1つまたは複数の事前定義された同等物に変換し、ターゲットプロセッサ上でそれらのPPC命令を実行し、次いでそれらを次の命令のためにソースストリームに戻すことができる。このアプローチは、概念的にシンプルであるが、欠点がある。例えば、このアプローチは、多くの遅い文脈切り替え(slow context switches back)、およびソフトウェアエミュレータとx86命令セットを使用して書かれたレガシーアプリケーションまたはゲームシステムを実装する仮想マシン(VM)との間のフォース(forth)を必要とする。また、このアプローチは、命令を変換する際に任意の文脈のソフトウェアエミュレータを奪い、ソフトウェアエミュレータをシンプルな命令−マッピングテーブルに依存するように強制する。これは、性能の大きなデメリットである。すなわち、ソフトウェアエミュレータが文脈において命令を考慮することができた場合、次いでソフトウェアエミュレータは、命令よりもむしろコードブロックを命令によって変換することができ、そうすることによって大いに変換性能(performance)を向上させることができるからである。
したがって、文脈において考慮されるように変換されるべき命令に対するメカニズムを提供することによって、命令変換の性能を向上させる技術が望まれている。
本発明は、命令コードレベルというよりもむしろ、ソースコードの関数レベルにおいてコードを変換することによって、上述した技術の必要性に対処する。本発明のソフトウェアエミュレータは、ソースストリームからx86命令全体を取り込み、関数全体をターゲットプロセッサの等価な関数に変換し、ソースストリームに戻す前に一度にその関数全てを実行する。この技術は文脈切り替えを低減するだけでなく、一度にx86関数の文脈全てを参照することによって、ソフトウェアエミュレータがコード変換を最適化することができる。例えば、ソフトウェアエミュレータは、一連のx86命令を効率的なPPC透過物に変換することを決定することができる。そのような最適化の多くは、ソフトウェアエミュレータ、特に、コードを素早く実行しなければならないゲームエミュレータにとって望ましい、より堅固な(tighter)エミュレートされたバイナリをもたらす。
本発明の例示的な実施形態は、本件特許出願人から入手可能なXボックスコンピュータゲームシステム、コンピュータゲームコンソール、またはその他のコード変換が使用されるコンピュータシステムにおいて実装され、本発明の関数レベルコード変換技術から利益を得ることができることを、当業者は理解するだろう。本発明の他の特徴は、以下の説明に基づいて、当業者に明らかになるだろう。
(概要)
本発明は、命令コードレベルというよりもむしろソースコードの関数レベルにおいてコードを変換するシステム及び方法を提供する。本発明のソフトウェアエミュレータは、命令というよりもむしろ、ソースストリームからx86関数全体を取り込み、関数全体をターゲットプロセッサの等価な関数に変換し、ソースストリームに戻す前に一度にその関数全体を実行し、そうすることによって文脈切り替えを低減させる。また、ソフトウェアエミュレータが一度にソースコード関数文脈全体を参照するので、ソフトウェアエミュレータは、コード変換を最適化することができる。例えば、ソフトウェアエミュレータは、一連のx86命令を効率的なPPC等価物に変換することを決定することができる。そのような最適化の多くは、より堅固なエミュレートされたバイナリをもたらす。
本発明のその他のより詳細な側面を以下に説明するが、まず最初に、オペレーティングシステムおよびホストプロセッサ(CPU)仮想化技術に関する用語が理解されるように、仮想マシン、エミュレータ、および関連する用語について概要を説明する。そうすることで、当業者が、本発明の技術によるソースコードの関数レベルにおいてコードを変換する装置、システム、及び方法についての説明に利点を見つけられるように、一組の用語が説明される。
(仮想マシンの概要)
コンピュータは、汎用中央処理装置(CPU)、または特定のシステム命令を実行するように設計された「プロセッサ」を含む。同様のアーキテクチャまたは設計仕様を有する一群のプロセッサは、同じプロセッサファミリの1つとみなすことができる。プロセッサファミリの例には、アリゾナ州フェニックス在のモトローラ社によって製造されているモトローラ680X0プロセッサファミリ、カリフォルニア州サニーベール在のインテル社によって製造されているインテル80X86プロセッサファミリ、並びにIBM社およびモトローラ社によって製造され、カリフォルニア州クパチーノ在のアップル社によって製造されたコンピュータで使用されているパワーPCプロセッサファミリが含まれる。一群のプロセッサは、同様のアーキテクチャおよび設計仕様により、同じファミリ内にあるとすることができ、プロセッサは、クロック速度やその他の性能パラメータにより、ファミリ内で大きく異なる。
マイクロプロセッサのそれぞれのファミリは、そのプロセッサファミリ独自の命令を実行する。プロセッサまたはプロセッサファミリが実行できる命令は、プロセッサの命令セットとして知られている。例えば、インテル80X86プロセッサファミリによって使用されている命令セットは、パワーPCプロセッサファミリによって使用されている命令セットと互換性がある。インテル80X86命令セットは、CISC形式に基づき、モトローラパワーPC命令セットは、RISC形式に基づく。CISCプロセッサは、大量の命令を使用し、その一部は、より複雑な関数を処理することができるが、一般的に、実行するためには多くのクロックサイクルを必要とする。一方、RISCプロセッサは、より少ない数の命令を使用し、より高速に実行される比較的シンプルな関数を処理する。
コンピュータシステム間のプロセッサファミリの独自性は、一般的に、コンピュータシステムのハードウェアアーキテクチャのその他の要素間で非互換性をもたらす。インテル80X86プロセッサファミリのプロセッサで製造されたコンピュータシステムは、パワーPCプロセッサファミリのプロセッサで製造されたコンピュータシステムのハードウェアアーキテクチャとは異なるハードウェアアーキテクチャを有するだろう。プロセッサ命令セットとコンピュータシステムのハードウェアアーキテクチャの独自性のために、アプリケーションソフトウェアプログラムは一般的に、特定のオペレーティングシステムを実行する特定のコンピュータシステム上で実行されるように作成される。
一般的に言えば、コンピュータの製造者は、自社の製造ラインに関連するマイクロプロセッサファミリ上で実行される、少ないアプリケーションよりも多くのアプリケーションを持つことによって、市場占有率を最大化しようとする。コンピュータシステム上で実行することができるオペレーティングシステム及びアプリケーションプログラムの数を増やすために、ホストと呼ばれるあるタイプのCPUを有する所与のコンピュータが、ホストコンピュータに、ゲストと呼ばれる関連のないCPUの命令をエミュレートさせることができるバーチャライザプログラム(virtualizer program)を含むように開発されている。したがって、ホストコンピュータは、所与のゲスト命令に応答して呼び出されるべき1つまたは複数のホスト命令を生じさせるアプリケーションを実行するだろう。このようにして、ホストコンピュータは自身のハードウェアアーキテクチャ用に設計されたソフトウェアと、関連のないハードウェアアーキテクチャを有するコンピュータ用に作成されたソフトウェアとの双方を実行する。
より具体的な例として、例えば、アップルコンピュータによって製造されたコンピュータシステムは、PCベースのコンピュータシステム用に作成されたオペレーティングシステム及びプログラムを実行することができる。バーチャライザプログラムを使用して、1つのCPU上で同時に、互換性のない複数のオペレーティングシステムを実行することも可能である。後者において、それぞれのオペレーティングシステムはその他のものと互換性がないのにも関わらず、バーチャライザプログラムは、いくつかのオペレーティングシステムをホストすることができ、そうすることによって、互換性のないオペレーティングシステムを同時に同一のホストコンピュータシステム上で実行することができる。
ゲストコンピュータシステムがホストコンピュータシステム上でエミュレートされると、ゲストコンピュータシステムは、ある特定のハードウェアアーキテクチャの動作の純粋なソフトウェア表現としてホストコンピュータシステム内にだけ存在するゲストコンピュータシステムとして、「仮想マシン」であると言われる。したがって、本件特許出願人によるバーチャルPCのような、仮想マシンソフトウェア内で稼動しているオペレーティングシステムは、「ゲスト」および/または「仮想マシン」と呼ぶことができ、一方、仮想マシンソフトウェアを実行しているオペレーティングシステムは、「ホスト」と呼ぶことができる。同様に、仮想マシン内で稼動しているレガシーゲームシステムにおけるオペレーティングシステムや、新しいゲームシステム内のエミュレーションソフトウェアは、「ゲスト」と呼ばれ、仮想マシンを実行している新しいゲームシステムのオペレーティングシステムや、エミュレーションソフトウェアは、「ホスト」と呼ばれる。用語「バーチャライザ(virtualizer)」、「エミュレータ」、「ダイレクト−エグゼキュータ(direct-executor)」、「仮想マシン」、及び「プロセッサエミュレーション」はしばしば、当業者によって知られており、理解されている1つまたはいくつかのアプローチを使用した、コンピュータシステム全体のハードウェアアーキテクチャを模倣し、エミュレートする能力を示すために交互に用いられる。さらに、任意の形式における用語「エミュレーション」の全ての使用は、広い意味を伝えることを意図するものであり、エミュレーションの命令実行概念と仮想マシンにおけるオペレーティングシステム命令の直接実行とを区別することを意図しない。したがって、例えば、本件特許出願人より入手可能な仮想PCソフトウェアは、インテル80X86ペンティアム(登録商標)プロセッサ並びに様々なマザーボードコンポーネントおよびカードを含むコンピュータ全体を、(命令実行エミュレーションおよび/または直接実行によって)「エミュレート」し、これらのコンポーネントの動作は、ホストマシン上で実行される仮想マシン内で「エミュレート」される。パワーPCプロセッサを有するコンピュータシステムのようなホストコンピュータのオペレーティングシステムソフトウェア及びハードウェアアーキテクチャ上で稼動しているバーチャライザプログラムは、ゲストコンピュータシステム全体の動作を模倣する。
仮想化の一般的なケースは、1つのプロセッサアーキテクチャに、その他のプロセッサアーキテクチャ(例えば、x86Windows(登録商標)上のパワーPCMacプログラム)からのOSやプログラムを実行することを可能にさせるが、特別なケースは、基礎をなすプロセッサアーキテクチャが同じ(x86上でx86Linuxの様々なバージョンまたはx86Windows(登録商標)の異なるバージョンを実行する)場合である。後者のケースでは、基礎をなす命令セットが同一であるため、ゲストOSおよびそのアプリケーションをより効果的に実行する可能性がある。そのような場合、制御を失わないで、またはシステムを攻撃に対してオープンのままにしないで(すなわち、ゲストOSはサンドボックスである)、ゲスト命令をプロセッサ上で直接実行することが可能になる。これは、特権を持つか持たないかの分離であり、メモリに対するアクセスを制御する技術が作用する。アーキテクチャのミスマッチ(パワーPC<−>x86)がある場合の仮想化では、2つのアプローチが従来使用されている。あるアプローチでは、命令による命令(instruction-by-instruction)エミュレーション(比較的遅い)またはゲスト命令からの変換が元の命令セットにセットされる(より効果的には、変換ステップを使用する)。命令エミュレーションが使用される場合、環境の堅牢さを作り出すことは比較的容易である。もう一方のアプローチでは、変換が使用される場合、プロセッサが同じであるという特別なケースに合致する。
本発明によると、ゲストオペレーティングシステムが仮想化され、次いで本発明による例示的なシナリオが、本件特許出願人により入手可能な仮想サーバ上のWindows(登録商標)95、Windows(登録商標)98、Windows(登録商標)3.1、またはWindows(登録商標)NT4.0オペレーティングシステム、若しくは、Xボックスゲームコンソール上のXボックスオペレーティングシステムのエミュレーションとなる。様々な実施形態において、本発明は、一部または全てのホストコンピュータの、基礎をなす物理リソースに対するゲストアクセスを制御するシステム及び方法を表す。
バーチャライザプログラムは、ホストマシンのハードウェアアーキテクチャと、エミュレートされた環境内で稼動しているソフトウェア(例えば、オペレーティングシステム、アプリケーションなど)によって転送された命令との間のインターチェンジとしての機能を果たす。このバーチャライザプログラムは、物理コンピュータハードウェア上で直接実行されているオペレーティングシステムである(ハイパーバイザ(hypervisor)を備えることができる)、ホストオペレーティングシステム(HOS)とすることができる。あるいは、エミュレートされた環境は、仮想マシンモニタ(VMM)であることもできる。仮想マシンモニタは、隣り合って実行され、ホストオペレーティングシステムに関連して動作している、ハードウェア上で直接実行されるソフトウェアレイヤであり、VMMが仮想化しているハードウェアと同じインターフェースを公開することによって、ホストマシン(および、ある仮想リソース)の全てのリソースを仮想化することができる。この仮想化は、バーチャライザ(および、ホストコンピュータシステム自身)が、その上で実行されているオペレーティングシステムレイヤによって気づかれずに済むようにすることができる。
よって、プロセッサエミュレーションは、ゲストオペレーティングシステムが、物理ハードウェアとホストオペレーティングシステムとを両方とも備えるホストコンピュータシステム上で実行されているバーチャライザによって作成された仮想マシン上で実行されることを可能にする。概念からは、コンピュータシステムは一般的に、ハードウェアの基礎的なレイヤ上で実行されているソフトウェアの、1つまたは複数のレイヤを備える。このレイヤ構造は、抽象理由(reason of abstraction)のためになされる。ソフトウェアの所与のレイヤに対するインターフェースを定義することによって、そのレイヤは、その上の他のレイヤによって異なって実装されることができる。上手く設計されたコンピュータシステムでは、それぞれのレイヤだけが、その下にある隣接するレイヤについて知っている(また、それだけに依存している)。このことは、レイヤまたは「スタック」(隣接している複数のレイヤ)が、レイヤまたはスタック上のレイヤにネガティブな影響を及ぼさずに置き換えられることを可能にする。例えば、ソフトウェアアプリケーション(上側のレイヤ)は一般的に、オペレーティングシステム(下側のレイヤ)のより低いレベルに依存して、ある形態の永久記録媒体にファイルを書込み、これらのアプリケーションは、フロッピー(登録商標)ディスク、ハードドライブ、またはネットワークフォルダにデータを書込むことの違いを理解する必要はない。この下側のレイヤがファイルを書込む新しいオペレーティングシステムコンポーネントに置き換えられた場合、上側のレイヤのソフトウェアアプリケーションの動作は、影響を受けないままである。
レイヤ構造のソフトウェアの柔軟性は、仮想マシン(VMM)が、実際はもう1つのソフトウェアレイヤである仮想ハードウェアレイヤを提供することを可能にする。このように、VMは、その上にあるソフトウェアレイヤに対して、ソフトウェアレイヤが自身のプライベートコンピュータシステム上で実行されているという幻想を作り出すことができ、VMは、複数の「ゲストシステム」が、1つの「ホストシステム」上で同時に実行されることを可能にすることができる。この抽象レベルは、図1Aによって示される。
図1Aは、コンピュータシステムにおけるエミュレートされたオペレーティング環境について、ハードウェアおよびソフトウェアアーキテクチャの論理レイヤ構造を示す図である。図1Aでは、エミュレーションプログラム54は、物理ハードウェアアーキテクチャ52上で、直接または間接的に実行される。エミュレーションプログラム54は、(a)ホストオペレーティングシステムと同時に実行される仮想マシンモニタ、(b)ネイティブなエミュレーション機能を有する専門の(specialized)ホストオペレーティングシステム、または、(c)エミュレーションを実施するハイパーバイザコンポーネントを有するホストオペレーティングシステムとすることができる。エミュレーションプログラム54は、ゲストハードウェアアーキテクチャ56(このコンポーネントは「仮想マシン」、すなわち、実際には存在しないが、その代わりにエミュレーションプログラム54によってエミュレートされるハードウェアであるということが、破線で示されている)をエミュレートする。ゲストオペレーティングシステム58は、ゲストハードウェアアーキテクチャ56上で実行され、ソフトウェアアプリケーション60は、ゲストオペレーティングシステム58上で実行される。図1Aのエミュレートされたオペレーティング環境では、エミュレーションプログラム54の動作のために、ソフトウェアアプリケーション60が、一般的にホストオペレーティングシステム及びハードウェアアーキテクチャ52と互換性のないオペレーティングシステム上で実行されるように設計されたとしても、ソフトウェアアプリケーション60はコンピュータシステム50において実行されることができる。
図1Bは、物理コンピュータハードウェア62上で直接実行されているホストオペレーティングシステムソフトウェアレイヤ64を備える仮想化されたコンピュータシステムを示す。ホストオペレーティングシステム(ホストOS)64は、ホストOS64が、その上で実行されているオペレーティングシステムレイヤによって気づかれずに済ますことができる、ホストOSがエミュレートされている(または、「仮想化されている」)ハードウェアと同じインターフェースを示すことによって、物理コンピュータハードウェア62のリソースに対するアクセスを提供する。また、エミュレーションを実施するために、ホストOS64は、ネイティブなエミュレーション機能を有する、特別に設計されたオペレーティングシステムとすることができ、あるいは、エミュレーションを実施する組み込まれたハイパーバイザコンポーネント(図示せず)とすることができる。
図1Bに示されるように、ホストOS64の上には、2つの仮想マシン(VM)実装、例えば、仮想化されたインテル386プロセッサとすることができるVM A66、および、例えば、モトローラ680X0ファミリのプロセッサのうちの1つの仮想化されたバージョンとすることができるVM B68がある。VM66および68の上には、それぞれゲストオペレーティングシステム(ゲストOS)A70およびB72がある。ゲストOS A70上で実行されているのは、2つのアプリケーション、アプリケーションA1 74およびアプリケーションA2 76であり、ゲストOS B72上で実行されているのは、アプリケーションB1 78である。
図1Bに関して、(破線で示されている)VM A66およびVM B68は、ソフトウェア構成として存在するだけであり、VM A66およびVM B68をそれぞれゲストOS A70およびゲストOS B72に提供するだけでなく、ゲストOS A70およびゲストOS B72が実際の物理コンピュータハードウェア62と間接的にやりとりするために必要な全てのソフトウェアステップを実施する特別なエミュレーションソフトウェアの実行により可能となった、仮想化されたコンピュータハードウェア表現であることに気づくことが重要である。
図1Cは、ホストオペレーティングシステム64’’と同時に実行されている仮想マシンモニタ(VMM)64’によってエミュレーションが実施される、代替の仮想化されたコンピューティングシステムを示す。一実施形態では、VMM64’は、ホストオペレーティングシステム64’’上で実行され、ホストオペレーティングシステム64’’だけを介して物理コンピュータハードウェア62とやりとりしているアプリケーションとすることができる。その他の実施形態では、図1Cに示されるように、VMM64’は、あるレベルではホストオペレーティングシステム64’’を介してコンピュータハードウェア62と間接的にやりとりし、その他のレベルでは(ホストオペレーティングシステムがコンピュータハードウェアと直接的にやりとりする方法と同様に)VMM64’がコンピュータハードウェア62と直接的にやりとりする、部分的に独立したソフトウェアシステムを代わりに備えることができる。
仮想マシンを実装するこれらのバリエーションの全てが、本明細書で説明されるように本発明のその他の実施形態を形成するように期待され、本発明を特定のエミュレーション形態に限定するように解釈されるべきではない。また、(おそらくはハードウェアエミュレーションシナリオにおける)VM A66および/またはVM B68それぞれを介したアプリケーション74、76、および78の間のやりとりへの言及は、実際は、アプリケーション74、76、および78と、仮想化を作り出しているバーチャライザとの間のやりとりであると解釈されるべきである。同様に、(おそらくはコンピュータハードウェア62上で直接的にまたは間接的にコンピュータ命令を実行するための)ホストオペレーティングシステム64および/またはコンピュータハードウェア62との、アプリケーションVM A66およびVM B68の間のやりとりへの言及は、実際は、仮想化を作り出しているバーチャライザと、ホストオペレーティングシステム64および/またはコンピュータハードウェア62との間のやりとりであると解釈されるべきである。
(複数の経路最適化を備える関数レベルジャストインタイム変換エンジン)
本発明は、レガシーゲームシステムプラットフォーム(legacy game system platform)の最新版であるホストゲームシステムプラットフォーム上で、Xボックスのようなレガシーゲームシステムプラットフォームを仮想化するためのソフトウェアエミュレータを使用するシステムの機能に関する。ソフトウェアエミュレータは、ホストゲームシステムプラットフォームが、シームレスな方法でレガシーゲームを実行することを可能にする。上述したように、本発明は、関数レベルでコードを変換し、変換を仮想化して、コード変換効率を向上させるジャストインタイム変換エンジンを有するソフトウェアエミュレータを提供する。本発明の技術を、図2〜4を参照して以下に説明する。
本発明によると、ホストゲームシステムコンソールのメディアローダ(media loader)がレガシーコンピュータゲームを含むメディアを受け取り、ホストゲームシステムのオペレーティングシステムにレガシーコンピュータゲームを起動するように要求されると、メディアローダはその代わりに、レガシーコンピュータゲームの動作のための互換性を提供する、本発明に係るソフトウェアエミュレータを起動する。ソフトウェアエミュレータは、ホストゲームシステムのネイティブなコンピュータゲームと同じ権利(right)および同じ制約(restriction)を有する標準的なゲームのように、レガシーコンピュータゲームをロード(load)し、実行する。起動時に、ソフトウェアエミュレータは、2つの物理メモリチャンク、すなわち、仮想化されたレガシーコンピュータゲームをホストするための64MBセグメント、および、レガシーコンピュータゲームを実装する仮想マシンとホストコンピュータゲームシステムとの間のルート(conduit)を提供するための64MBセグメントを要求する。
図2は、仮想マシン内に実装されたレガシーゲームシステムの仮想メモリとホストゲームシステムの仮想メモリとの間の関係を示す。この例では、レガシーゲームシステムは、本件特許出願人より入手可能なXボックスである。図示されるように、レガシーXボックスゲームシステムは、仮想マシン環境内に実装され、4GBの仮想アドレス空間80が利用可能であるとする。図示されるように、レガシー4GB仮想アドレス空間は、レガシーXボックスゲームシステムが、挿入されたレガシーゲームの仮想タイトル専用のメモリ82、仮想レガシーXボックスカーネル専用のメモリ84、ホストゲームシステムの物理RAM88内の64MB共有メモリに直接マップ(map)する64MB共有メモリ86、および、4GB仮想アドレス空間の上側の領域内の仮想MMIOアドレス空間90というセクションを有する。レガシーXボックスゲームシステム内のMMIOアドレス空間90は、Xボックスゲームシステムコンソールのオペレーティングシステムのドライバによって呼び出される実際のハードウェアデバイスへのポインタを備えることが、当業者には理解されるだろう。仮想マシン環境内に実装されるようなレガシーXボックスゲームによってアクセスされる仮想アドレス空間は、ネイティブなレガシーXボックスゲームシステム環境内の仮想アドレス空間と同様に構成され、レガシーXボックスゲームシステムがネイティブなレガシーXボックスゲームシステム環境内で動作していると勘違いさせる。
一方、ネイティブなホストXボックスゲームシステムの仮想アドレス空間92は、エミュレータバイナリメモリ94、ネイティブなホストXボックスカーネル96、レガシーXボックス仮想マシンをホストする64MB物理メモリセグメント98によって特徴付けられる。64MB共有メモリ100は、ネイティブなホストXボックスゲームシステムの物理RAM88内の64MB共有メモリ直接マップするように提供される。図3を参照して以下に詳細に説明されるように、x86Xボックスカーネル84の再作成されたコピーとゲームローダに渡されたx86タイトルバイナリは、仮想Xボックスゲームシステム用意された64MB空間98内にロードされる。一方、64MB共有メモリ空間100において、ネイティブなホストXボックスゲームシステムは、そのディスパッチャ(dispatcher)プログラムをロードし、最適化された(hand-optimized)「glue」関数(function)をロードし、仮想マシン(VM)状態および変換されたコードキャッシュのための構造を作成する(図3)。これらの機能は、実際は、レガシーXボックスを実装している仮想マシンとネイティブなホストXボックスオペレーティングシステムとの両方にアクセス可能なRAMの物理共有セクションである共有メモリ88を介して、仮想マシン上で実行されているレガシーXボックスゲームと共有される。
図3は、本発明の技術を使用して、仮想マシン内に実装されたレガシーゲームシステムのx86コードを、ホストゲームシステムのPPCコードに変換するソフトウェアエミュレーションシステムを示す。図示されるように、本発明のソフトウェアエミュレーションシステムは、4つの主要なコンポーネントを含む。
・レガシーXボックスゲームシステムのx86コードの、PPCコードまたはネイティブなホストXボックスゲームシステムのその他のプロセッサコードへのジャストインタイムバイナリ変換を提供するジャストインタイム(JIT)バイナリトランスレータ(translator)102
・複製されたx86Xボックスカーネル106および変換されていないタイトルコードストア108内のほとんどのレガシーXボックス環境、並びに格納されたタイトルリソースおよび状態ストア内のレガシータイトル環境を再作成するレガシーXボックス仮想マシン(VM)104
・ネイティブなホストXボックスゲームシステムのオペレーティングシステムとVM104との間のやりとり(communication)を可能にし、ディスパッチャ112および変換されたコードキャッシュ114をホストし、VM状態116を追跡(track)する共有メモリ88
・XボックスVM104で使用するために、ネイティブなXボックスカーネル122上で、デバイスエミュレーション120を使用して、レガシーXボックスゲームを実行しているネイティブなホストXボックスシステムのハードウェアデバイスをエミュレートするXボックス例外ハンドラ118
レガシーXボックス仮想マシン104内のレガシーXボックスゲームを初期化した後、ネイティブなホストXボックスゲームシステムのオペレーティングシステムは、共有メモリ88内にあるディスパッチャ112に制御を渡す。基本的に、ディスパッチャ112は、仮想化されたレガシーXボックスゲームについてのコード実行を指示する。ディスパッチャ112は、ハッシュテーブル(hash table)における、x86空間内で参照された全てのx86関数と、対応する、変換されたコードキャッシュ114内の変換されたPPC(またはその他のホストプロセッサ)関数との間のマッピング(mapping)を維持する。ディスパッチャ112のジョブは、仮想化されたx86レガシーXボックスタイトルに期待されるシーケンスにおいて、変換されたPPC(またはその他のホストプロセッサ)関数を共に繋ぐ(chain)ことである。ディスパッチャ112の第1のタスクは、レガシーx86Xボックスカーネル106およびタイトルメモリ110内のレガシーx86タイトルの起動をシミュレートすることである。ネイティブなホストXボックスゲームシステムのホストOSが、エミュレートされたバイナリのかなりの(significant)事前変換を実施しない場合、ディスパッチャ112は、要求されたx86関数に対してキャッシュされたPPC(またはその他のホストプロセッサ)同等物(equivalent)を有さない。これらのギャップ(gap)を満たすために、ディスパッチャ112は、ジャストインタイム関数変換のためにJITバイナリトランスレータ102にコール(call)する。
例えば、x86コードをPPCコードへ変換することは、ある意味では問題である(problematic)ことが当業者には理解されるだろう。一つには、x86ISAは、シンプルなPPC ISA同等物を有さない、いくつかの複雑な関数を含む。さらに、ネイティブなホストXボックスゲームシステムのPPCプロセッサは、レガシーXボックスタイトルがリトルエンディアン(Little-Endian)解釈を期待するのに対して、データをビッグエンディアン(Big-Endian)として解釈するように構成されることができる。また、レガシーXボックスx86コードの単純(naive)な変換は、ネイティブなホストXボックスシステムハードウェア上で、命令の非常に大きな拡大(huge magnification)およびキャッシュミス(cash miss)をもたらすことになる。本発明のJITバイナリトランスレータは、以下に説明されるように、この「変換膨張(translation bloat)」を軽減させるステップを有する。
図3に示されるように、本発明のJITバイナリトランスレータは、5つのステップ(102a、102b、102c、102d、102e)で実装される。それぞれのステップを順番に説明する。
ステップ1:x86フェッチ(fetch)およびパース(parse)。ステップ102aにおいて、JITバイナリトランスレータ102は、ディスパッチャ112に呼び出され、仮想マシン104の4GBアドレス空間80内のx86コードを参照している拡張命令ポインタ(EIP)112bを渡される。バイナリ変換のこの第1段階において、アドレス変換が実施され、ソフトウェアエミュレータの4GB仮想アドレス空間92内の、対応するメモリアドレスを決める。次いで、ソフトウェアエミュレータは、4GBアドレス空間80からx86コード関数に対応する構造(structure)にx86関数命令コードを解析(parse)する。関数が、仮想アドレス空間92内の事前割り当てされた構造空間よりも大きいことが分かった場合、JITバイナリトランスレータ102は、実行を中止(halt)する。
ステップ2:x86コード最適化。JITバイナリトランスレータ102がターゲットx86関数をロードすると、ステップ102bにおいて、最初の最適化が実施される。PPCの効率の悪さを生み出すことで知られている一連のx86コードは、後で参照するためにフラッグされる(flagged)。例えば、オプティマイザ(optimizer)は、エンディアンバイト反転(endian byte reversal)を要求しない、不揮発性のストア/ロード動作を記憶する。
ステップ3:PPCデスクリプタ生成(descriptor generation)。102cにおいて、オプティマイザはその生成物を、対応する一群のPPC命令への、最適化されたx86命令の単純な変換を実施するJIT中間階層(middle tier)に渡す。一般的に、1つのx86命令は、複数のPPC命令に対応する。fsinのようなとても複雑なx86命令は、共有メモリ88に格納された、コード化した(hand-coded)PPC「glue」関数によって置き換えられる。
ステップ4:PPCバイナリ実行可能最適化(binary executable optimization)。ステップ102dにおいて、PPCバイナリ実行可能(BE)オプティマイザは、ステップ102cにおいて生成された一連のPPC命令を受け取り、命令数、サイクル数、およびキャッシュミスレート(cash miss rate)をできる限り減らそうとする。この段階の後にPPCコード内に残存する「変換膨張」は、ホストコンピュータシステムのCPU速度によってのみ補償することができる。
ステップ5:PPCコンパイル(compilation)および格納(store)。最後に、ステップ102eにおいて、JITバイナリトランスレータ102は、PPCデスクリプション(description)を32ビットPPCマシン命令にマップする。変換された関数の全ては、共有メモリ88内の変換されたコードキャッシュ114内に格納され、関数の開始アドレスは、ディスパッチャ112のハッシュテーブル内の元のEIP112bの隣の命令アドレスレジスタ(IAR)112aとして格納される。これは、ソフトウェアエミュレータが、変換されたコードブロックへの入力コードブロックのマッピングを記憶することができるようにして、JITバイナリトランスレータ102を呼び出す前にディスパッチャ112のハッシュテーブルをチェックすることによって、同じコードブロックのリコンパイルを避けることができるようにする。次いで、ソフトウェアエミュレータは制御を譲り、スレッドは仮想マシン104に戻される。
仮想マシン104が再開すると、ディスパッチャ112は再び、所望のEIPをIARにマップしようとする。今回は、ルックアップが成功し、ディスパッチャ112は、コード実行を、指名されたIARにジャンプさせる。レガシーXボックスコマンドシーケンスにおいて、1つまたは複数のx86命令に対応する所望のPPC関数は実行され、レガシーXボックス仮想マシン104の4GBメモリ空間内のリソース上で動作する。レガシーXボックス仮想マシンが所望のPPC関数の処理を完了すると、次のx86関数に対するリクエストを有する割込みによって、制御はディスパッチャ112に戻り(jump back)、全体のJITバイナリ変換サイクルが再び始まる。コンピュータゲームは一般的に膨大なループ(enormous loop)としてコード化されるので、実行の数秒後には、ほとんどのx86関数が変換されて、最適化されたPPCコード(または、ネイティブなホストXボックスゲームシステムが異なるプロセッサを使う場合は、その他のプロセッサコード)として変換されたコードキャッシュ114内に存在する。
JITバイナリトランスレータ102は、ジャストインタイムコンパイラ(just-in-time compiler)であり、それらの関数が必要とされるまで、x86関数をPPCコードに変換しないことが、当業者には理解されるだろう。本発明の技術は、JITバイナリトランスレータ102が初めて多くの関数に出くわした場合に、認識された(perceived)遅れを避けるように設計される。一組のオプションが、この問題に対処すると考えることができる。
・バイナリ内で多くの関数を事前コンパイル(pre-compile)する。アプリケーションプログラムまたはゲームを起動して、問題のある関数を認識する前に、ソフトウェアエミュレータには時間があり、ゲームが始まる前にそれらをコンパイルすることができる。これは、認識されたジッタ(jitter)を除去することができるが、より長い起動の遅れを意味する。
・一部の関数の2段階コンパイルを実施する。JITバイナリトランスレータ102は、一部の関数についてパフォーマンスの最適化をスキップして、それらをすばやく実行することができる。第2のCPU上で実行されているスレッドが、ちょうどよいときにそのコードを最適化し、コードキャッシュ内の命令コードを置き換えることができる。
仮想化されたレガシーXボックスゲームがレガシーXボックスハードウェアとの対話を望むが、ネイティブなホストXボックスゲームシステムのプラットフォーム上でそれが動作していることに気づかない場合、レガシーXボックスゲームによるデバイスリクエストおよびシステム呼び出しは、例外を作成する。多くのオペレーティングシステムと同様に、レガシーXボックスオペレーティングシステムでは、ゲームは、周知のメモリマップドI/O(MMIO)領域に対する書込みによって、ほとんどのデバイスと対話(communicate)する。図2に示されるように、Xボックスオペレーティングシステムの場合、これらのMMIO領域は、4GB仮想メモリ空間の上側の領域90内にあった。アクセスコントロールリスト(ACL)は、ページ許可(page permission)(すなわち、読むだけ、または読み書き不可)を制限し、および/または、削減するために使用することができ、レガシーXボックスゲームを実装している仮想マシン104が、メモリ90内のこれらのMMIOアドレスに対する読み書き権限を欠くようにする(米国特許出願(本件特許出願人整理番号第312634.01号)参照)。その結果、仮想マシン104内で実行されているレガシーXボックスゲームが、その期待されたデバイスメモリ90にアクセスしようとすると、ホストXボックスオペレーティングシステムは、126において無効なXボックスMMIOデバイスアドレスを検出し、そのスレッドを中止する。メモリアクセス違反メッセージは、VM状態情報をXボックス例外ハンドラ118に順次渡して、メモリアクセス違反を解決するハイパーバイザ128に送信される。
ハイパーバイザ128によってXボックス例外ハンドラ118に送信されたメモリアクセス違反および意図的なシステム呼び出しは、レガシーXボックスゲームから、MMIO書込み(write)内に提供されたMMIOアドレスを使用する所望のターゲットデバイスを判定するために処理される。メモリアクセス違反はしばしば仮想デバイスリクエストを示すので、Xボックス例外ハンドラ118は、(VM状態レジスタ116からの)ハイパーバイザ128によって提供される仮想マシン状態を簡単にチェックし、所望のターゲットデバイスを判定する。次いで制御は、Xボックス例外ハンドラ118内の適切なXボックスデバイスエミュレータ120に与えられる。Xボックスデバイスエミュレータは、仮想マシン104のリクエストを変換し、Xボックスカーネル122の適切な関数、またはネイティブなホストXボックスライブラリに中継する。ネイティブなホストXボックスシステムは、レガシーXボックスシステムとハードウェアを共有すると考えることはできないので、シンプルな命令転送(simple instruction forwarding)はオプションである。もちろん、ハードウェアが共有される場合は、命令転送を使用することができる。
図3に示されるように、ハードドライブI/Oのような、Xボックス物理デバイス124に対する一部のネイティブなハードウェアリクエストは、デバイス割込み130の形式で非同期コールバックを生成する。ネイティブなホストXボックスカーネル122が割込みなどを受信すると、JITバイナリトランスレータ102を中止し、順次応答を変換し、それを共有メモリ空間88内に格納するXボックス例外ハンドラ118内の適切なXボックスデバイスエミュレータ120に対する、割込みデータを供給する。次いで、制御は、レガシーXボックス割込みをシミュレートすることによって仮想マシン104に戻され、仮想マシン104が新しいデータを処理することができるようにする。
図4は、本発明のJITバイナリトランスレータ102の動作を示す。図示されるように、JITバイナリトランスレータ102は、与えられたアドレスにおいて開始することによって、ステップ132において、入力ソースコードのコンパイルを開始する。JITバイナリトランスレータ102は、実行のために、マシン実行可能コードの流れ(stream)のビルドを開始する。一方、本発明によると、JITバイナリトランスレータ102のパーサ102aは、コードパターンを認識し、それに応じて動作することによって、ステップ134において、マシンコード内の関数を識別する。例えば、ソース関数は、タスクを処理し、処理された変数(variables)を戻す、プロローグ、ボディ、およびエピローグを有するものとして定義することができる。プロローグは、関数を導入し、変数を定義し、エピローグは、関数を終了させて、適切な制御フローを戻し、変数値(variable value)を戻す。一般的に、エピローグは、RETまたはIRET関数である。一方、ボディは、条件分岐を含む、ネストされるかどうかはわからないその他の記述(statement)を実行するために、コード文およびコードコンディション(code statements and conditions)を含む。
パーサ102aが、シンプルな関数を解析する方法の例をコードリストから以下に示す。
A.整数の加算
int add(int i, intj) : prolog

{ : mov eax, i
return (i+j); : add eax,j
} : epilog

B.整数の乗算
int multiply(int i, intj) : prolog
{ : mov eax, i
return (i*j); : imul eax,j
} : epilog

C.整数 i,j についてのj+(i*j)の計算
int multiplyadd(int i, intj) : prolog
{ : pushj
: push i
return add(multiply(i j), j); : call multiply
: push eax
: pushj
: call add
} : epilog
D.条件付き分岐を有する例
以下の例は、関数が完了したとみなされる前に決定(resolution)を必要とする未解決の(outstanding)条件分岐を示す。
int arithmetic (int i, int j, int operation)
{ : prolog
if (operation == ADD) : cmp operation,ADD
{ : jnz NotAdd
return (i+j); : mov eax,i
: add eax,j
: ret
} : NotAdd:
else if (operation == SUBTRACT) : cmp operation,SUBTRACT
{ : jnz NotSubtract
return (i-j); : mov eax,i
: sub eaxj
: ret
} : NotSubtract:
else if (operation == MULTIPLY) : cmp operation,MULTIPLY
{ : jnz NotMultiply
return (i*j); : mov eax,i
: imul eax,j
: ret
} : NotMultiply:
else if (operation == DIVIDE) : cmp operation,DIVIDE
{ : jnz NotDivide
return (i/j); : mov eax,i
: idiv eax j
: ret
} : NotDivide:
} : epilog
上述した例で示されるように、パーサ102aは、プロローグ、ボディ、およびエピローグを、1つの機能ブロックとして処理する。ブロックは、コードを分析することによって識別され、プロローブおよびエピローグを識別し、分岐操作を識別する。ステップ134において示されるように、関数は、エピローグに到達して、未解決の条件分岐がない場合に、終了されることがわかる。言い換えると、RETまたはIRETがパーサ102aに出くわして、未解決の条件分岐がない場合に、JITバイナリトランスレータ102は、マシンコード関数の最後に到達したことがわかる。
パーサ102aによって提供されるコードの、結果として生じる機能ブロックは、ステップ136においてJITバイナリトランスレータ102のオプティマイザ102bによって最適することができ、処理効率を向上させることができる。例えば、パワーPCプロセッサは元々(natively)ビッグエンディアンであり、ビッグエンディアン形式でロードされるデータは、1つ(または最高2つ)のパワーPC命令を必要とするのに対して、x86は元々リトルエンディアンであり、リトルエンディアン形式でロードされるデータは、1つまたは複数(最大7)のパワーPC命令を必要とする。したがって、オプティマイザ102bによって実施されることができる1つの明らかな最適化は、できる限りビッグエンディアン形式でデータを格納し、データをリトルエンディアン形式に変換することは避けることである。この最適化は、実行時に処理されなければならない命令をより少なくする。
その他のシンプルな例として、ソースコードのブロックのサポートは、iの値を計算するように記述される。ここで、i=jkである。コードは、以下のように書くことができる。
k=0
jump to routine to calculate value of j
return value of j
i=j*k
この例では、k=0なので、結果は、たとえ計算された値がjのためであっても、ゼロとなる。したがって、このコードは、i=0に最適化することができる。それぞれの命令が別々に変換される従来のシステムでは、命令の文脈がわからないので、ジャンプルーチン(jump routine)は解決されなければならないだろう。
関数が識別され、コードが最適化されると、ステップ138において、入力マシンコード内で関数を作り出すプロセッサ命令が、ターゲットプロセッサのマシンコードに変換される(例えば、x86からパワーPC)。次いで、ステップ140において、生成されたマシンコードが、例えば、命令数、サイクル数、およびキャッシュミスレートをできる限り削減することによって最適化される。結果として生じる、ターゲットプロセッサについて最適化されたマシンコードは、ステップ142における実行のために、変換されたコードキャッシュ114内に格納される。最後に、ステップ144において、エントリ(entry)が、最適化されたコードブロックを識別するディスパッチャハッシュテーブル内に置かれ、入力コードストリーム内で機能ブロックに出くわす次のときに、同じ機能ブロックをリコンパイルすることが避けられるようにする。
このように、本発明は、JITバイナリトランスレータがより効率的に、第1のプロセッサ用に書かれた命令を、受信した命令の文脈に基づいて、第2のプロセッサ用の命令に変換することができるメカニズムを提供する。特に、バイナリトランスレータは、コードの機能ブロックに対して実施され、バイナリ変換動作をスピードアップできるように最適化する。本発明によるJITバイナリトランスレータは、高速な変換が円滑な動作にとって重要である仮想マシン環境内で実行されているプログラムまたはゲームに用いられる場合に、特に有利である。このような技術は、単にゲームシステムだけではなく、あらゆるアプリケーションに拡大適用できることが、当業者には理解されるだろう。さらに、本発明の技術を使用して、ソフトウェアエミュレーション技術を実装しているその他のコンピュータシステムにバイナリ変換を提供することができる。
(ネットワーク化され、分散された例示的環境)
本発明の例示的実施形態は、Xボックスゲームシステムアーキテクチャに関連して実装することができるが、本発明は、コンピュータネットワークの一部として、または分散コンピューティング環境内で使用することができる、任意の適切なホストコンピュータ、若しくはその他のクライアントまたはサーバデバイスに関連して実装することができることは、当業者には理解できるだろう。この点において、本発明は、本発明によるゲストOSを仮想化することに関連して使用することができる、複数のメモリまたは記憶装置、並びに複数のアプリケーションおよび複数の記憶装置またはボリュームにわたって生じるプロセスを有するコンピュータシステムまたはコンピュータ環境にも適している。本発明は、リモートまたはローカルストレージを有する、ネットワーク化された環境または分散コンピューティング環境で使用することができるサーバコンピュータおよびクライアントコンピュータを有する環境に適用することができる。本発明は、プログラミング言語機能、ならびに、リモートまたはローカルサービスに関連する情報を生成し、受信し、送信する割込み及び実行機能を有する、スタンドアロンコンピューティングデバイスにも適用することができる。
分散コンピューティングは、コンピューティングデバイスとシステムとの間の交換(exchange)によって、コンピュータリソースとサービスを共有することを提供する。これらのリソースおよびサービスは、情報の交換、キャッシュストレージ(cache storage)、およびファイル用のディスクストレージを含む。分散されたコンピューティングは、クライアントが、それらの集合したパワーを利用することができるようにして、全体の活動(entire enterprise)のためになるネットワーク接続をうまく利用することができる。
図5Aは、ネットワーク化された、または分散された例示的コンピューティング環境の概念図を示す。分散コンピューティング環境は、コンピューティングオブジェクト145a、145bなど、並びに、コンピューティングオブジェクトまたはデバイス146a、146b、146cなどを備える。これらのオブジェクトは、プログラム、方法、データストア、プログラム可能ロジックなどを備えることができる。オブジェクトは、PDA、オーディオ/ビデオデバイス、MP3プレーヤ、パーソナルコンピュータなどのような、同一または異なるデバイスの部分を備えることができる。オブジェクトはそれぞれ、コミュニケーションネットワーク147を介して、その他のオブジェクトと通信することができる。このネットワークは、図5Aのシステムにサービスを提供するその他のコンピューティングオブジェクトおよびコンピューティングデバイスを備えることができ、複数の相互接続したネットワークを表わすことができる。本発明の一側面によると、オブジェクト145a、145bなど、または146a、146b、146cなどのそれぞれは、API、その他のオブジェクト、ソフトウェア、ファームウェア、および/またはハードウェアを利用するアプリケーションを含み、本発明の仮想化プロセスの使用を要求することができる。
146cのようなオブジェクトは、その他のコンピューティングデバイス145a、145bなど、または146a、146bなどで、ホストされることができることは理解されるだろう。したがって、図示された物理環境は、接続されたデバイスをコンピュータとして表わすことができるが、そのような描写は単なる例示であり、物理環境はその代わりに、PDA、テレビジョン、MP3プレーヤなどの様々なデジタルデバイス、並びに、インターフェース、COMオブジェクトなどのようなソフトウェアオブジェクトを備えるものとして描写し、説明することができる。
分散コンピューティング環境をサポートする様々なシステム、コンポーネント、およびネットワーク構成がある。例えば、コンピューティングシステムは、有線または無線システムによって、若しくは、ローカルネットワークまたは広く分散されたネットワークによって、相互に接続することができる。現在、多くのネットワークが、広く分散されたコンピューティングのために通信インフラ(infrastructure)を提供し、多くの様々なネットワーク含むインターネットとつながっている。通信インフラは、本発明の仮想化プロセスから生じる例示的な相互通信のために使用することができる。
ホームネットワーキング環境では、電力線(power line)、データ(無線および有線の両方)、音声(例えば電話)、娯楽メディアなどのような、それぞれ独自のプロトコルをサポートすることができる少なくとも4つの異なるネットワーク転送媒体がある。光スイッチおよび電気器具などのようなほとんどのホームコントロールデバイス(home control device)は、接続のために電力線を使用することができる。データサービスは、ブロードバンド(例えば、DSLまたはケーブルモデム)として家に入ることができ、無線(例えば、ホームRFまたは802.11B)または有線(例えば、ホームPNA、Cat5、イーサネット(登録商標)、電力線)接続を使用する家の中でアクセス可能である。音声トラフィックは、有線(例えばCat3)または無線(例えば携帯電話)として家に入ることができ、Cat3配線を使用する家の中に分配することができる。娯楽メディアまたはその他のグラフィカルデータは、衛星またはケーブルを介して家に入ることができ、一般的に同軸ケーブルを使用する家の中に分配することができる。IEEE1394およびDVIも、メディアデバイスのクラスタ用のデジタル相互接続である。これら全てのネットワーク環境、および、プロトコル標準として現れることができるその他のものは、インターネットによって外の世界に接続されることができるイントラネットなどのようなネットワークを形成するために相互接続されることができる。要するに、多様なソースが、データの記憶および転送のために存在し、コンピューティングデバイスは、本発明による仮想化されたサービスを利用するプログラムオブジェクトから生じ、アクセスされ、利用されるデータなどのようなデータを共有する方法を必要とする。
インターネットは一般に、コンピュータネットワーキングの分野ではよく知られているTCP/IPプロトコルを利用するネットワークおよびゲートウェイの集合に言及する。TCP/IPは、「Transmission Control Protocol/Internet Protocol」の頭文字である。インターネットは、ユーザが、ネットワークを介して情報を相互通信し、共有することができるようにするネットワーキングプロトコルを実行するコンピュータによって相互接続された、地理的に分散されたリモートコンピュータネットワークのシステムとして説明することができる。そのような幅広い情報共有のために、インターネットなどのリモートネットワークは一般的に、開発者が、特別な動作またはサービスを実施するためのソフトウェアアプリケーションを、基本的には制限なしで設計することができるオープンシステムに進化している。
したがって、ネットワークインフラは、クライアント/サーバ、ピアツーピア、またはハイブリッドアーキテクチャなどのようなネットワークトポロジーのホストを可能にする。「クライアント」は、それに関連しないその他のクラスまたはグループのサービスを使用するクラスまたはグループの一員である。したがって、コンピューティングにおいて、クライアントはプロセス、すなわち、大まかには、その他のプログラムによって提供されるサービスを要求する一組の命令またはタスクである。クライアントプロセスは、その他のプログラムまたはサービス自身についての詳細を知ることなしに、要求されたサービスを利用することができる。クライアント/サーバアーキテクチャ、特にネットワーク化されたシステムでは、クライアントは通常、例えばサーバなどのその他のコンピュータによって提供される共有ネットワークリソースにアクセスするコンピュータである。図5Aの例では、任意のコンピュータは、状況次第でクライアント、サーバ、またはその双方とみなすことができるが、コンピュータ146a、146bなどは、クライアントとして考えることができ、コンピュータ145a、145bなどは、クライアントコンピュータ146a、146bなどで複製されるデータを保持するサーバとして考えることができる。これらのコンピューティングデバイスは、データを処理し、または、本発明の仮想化プロセスの実装に関係させることができるサービスまたはタスクを要求することができる。
サーバは一般的に、インターネットなどのリモートまたはローカルネットワークを介してアクセス可能なリモートコンピュータシステムである。クライアントプロセスは、第1のコンピュータシステム内でアクティブであり、サーバプロセスは、第2のコンピュータシステム内でアクティブである。コンピュータシステムは通信媒体を介して互いに通信し、分散機能を提供し、複数のクライアントがサーバの情報収集能力を活用できるようにする。本発明の仮想化アーキテクチャを使用することによって利用されるソフトウェアオブジェクトは、複数のコンピューティングデバイスまたはオブジェクトにわたって分散することができる。
クライアントおよびサーバは、プロトコルレイヤによって提供される機能を利用して、互いに通信する。例えば、ハイパーテキストトランスファープロトコル(HTTP)は、ワールドワイドウェブ(WWW)または「ウェブ」に関連して使用される共通プロトコルである。一般的に、インターネットプロトコル(IP)アドレスまたはユニバーサルリソースロケータ(URL)などのコンピュータネットワークアドレスを使用して、サーバまたはクライアントコンピュータを識別する。ネットワークアドレスは、URLアドレスとして呼ばれることができる。通信は、通信媒体を介して提供することができ、例えば、クライアントまたはサーバは、高容量通信用のTCP/IP接続を介して互いにつながることができる。
図5Aは、本発明を使用することができる、ネットワーク/バスを介してクライアントコンピュータと接続されるサーバを有する、ネットワーク化された、または分散された例示的環境を示す。より詳細には、複数のサーバ145a、145bなどは、通信ネットワーク/バス147を介して、複数のクライアントまたはリモートコンピューティングデバイス146a、146b、146c、146d、146eなどと相互接続される。通信ネットワーク/バス147は、LAN、WAN、イントラネット、インターネットなどとすることができる。クライアントまたはリモートコンピューティングデバイス146a、146b、146c、146d、146eなどは、ポータブルコンピュータ、ハンドヘルドコンピュータ、シンクライアント、ネットワーク化された家電製品、または、VCR、TM、オーブン、ライト、ヒータなどのようなその他のデバイスとすることができる。したがって、本発明は、本発明によるゲストインターフェースおよびオペレーティングシステムを実装することが望まれる、任意のコンピューティングデバイスに適用することができる。通信ネットワーク/バス147がインターネットであるネットワーク化された環境では、例えば、サーバ145a、145bなどは、クライアント146a、146b、146c、146d、146eなどがHTTPのような複数の周知のプロトコルを介して通信する、Webサーバとすることができる。サーバ145a、145bなどは、クライアント146a、146b、146c、146d、146eなどとしての機能を果たすこともできる。これは、分散コンピューティング環境の特徴ということができる。
通信は、無線でも有線でもよい。クライアントデバイス146a、146b、146c、146d、146eなどは、通信ネットワーク/バス147を介して、通信してもしなくてもよく、それに関連する独自の通信を有してもよい。例えば、TVまたはVCRの場合、それらの制御は、ネットワーク化されてもされなくてもよい。クライアントコンピュータ146a、146b、146c、146d、146eなどのそれぞれは、様々なアプリケーションプログラムモジュールまたはオブジェクト148を備えることができ、様々なタイプのストレージ要素またはオブジェクトに対する接続またはアクセスを備えることができる。それらには、ファイルまたはデータストリームを格納することができ、ファイルまたはデータストリームの一部をダウンロードし、転送し、移動させることができる。1つまたは複数のコンピュータ145a、145b、146a、146bなどは、データベース149、または本発明により処理されたデータを格納するデータベースまたはメモリ149のようなその他のストレージ要素の維持および更新に関与する。したがって、本発明は、コンピュータネットワーク/バス147を介してアクセスし、相互通信することができるクライアントコンピュータ146a、146bなど、並びに、クライアントコンピュータ146a、146bなど、およびデータベース149と相互通信することができるサーバコンピュータ145a、145bなどを有するコンピュータネットワーク環境で利用することができる。
(例示的コンピューティングデバイス)
図5Bおよび以下の説明は、本発明を実装することができる適切なホストコンピューティング環境の簡単な概要説明を提供することを目的とする。一方、ハンドヘルド、ポータブルおよびその他のコンピューティングデバイス、ポータブルおよび固定ゲームデバイス、並びに全ての種類のコンピューティングオブジェクトが、本発明に関連する使用を意図されていることが理解されるべきである。汎用コンピュータが以下に説明されるが、これは一例に過ぎず、本発明は、ネットワーク/バス相互運用および相互通信を有するシンクライアントに実装することもできる。したがって、本発明は、とても小さいまたは最小限のクライアントリソースに実装されるネットワーク化ホストサービス(networked hosted service)の環境内に実装することができる。それは例えば、家電製品内に配置されたオブジェクトのような、クライアントデバイスが、単にネットワーク/バスに対するインターフェースとしての役割を果たすに過ぎないネットワーク化環境である。基本的には、本発明による仮想化技術の動作には、データが格納される、若しくは、データが抽出され、他のコンピュータに転送されるところが、望ましいまたは適切な環境である。
必要とされるわけではないが、本発明は、デバイスまたはオブジェクトに対するサービスの開発者が使用するために、オペレーティングシステムを介してその全体または一部が実装され、および/または、本発明の仮想化OSに関連して動作するアプリケーションソフトウェア内に含めることができる。ソフトウェアは、クライアントワークステーション、サーバ、またはその他のデバイスのような1つまたは複数のコンピュータによって実行されるプログラムモジュールのような、コンピュータ実行可能命令の一般的な文脈において説明することができる。一般的に、プログラムモジュールは、特定のタスクを処理し、特定の抽象データタイプを実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。一般的に、プログラムモジュールの機能は、様々な形態で組み合わせられ、または分散される。さらに、本発明は、その他のコンピュータシステム設定およびプロトコルで実装することもできることが、当業者には理解されるだろう。その他の周知のコンピューティングシステム、環境、および/または、本発明の使用に適切なその他の構成は、限定するわけではないが、パーソナルコンピュータ(PC)、ATM、サーバコンピュータ、ハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースシステム、プログラム可能電化製品(consumer)、ネットワークPC、家電製品(appliance)、ライト、環境制御要素、ミニコンピュータ、メインフレームコンピュータなどを含む。上述したように、本発明は、通信ネットワーク/バスまたはその他のデータ伝送媒体を介してリンクされるリモートプロセッシングデバイスによってタスクが処理される分散コンピューティング環境に実装することもできる。分散コンピューティング環境では、プログラムモジュールは、メモリストレージデバイスを含むローカルまたはリモートコンピュータストレージ媒体に配置することができ、クライアントノードは、順次サーバノードとして動作する。
図5Bは、本発明を実装することができる適切なホストコンピューティングシステム環境150の例を示す。ホストコンピューティングシステム環境150は適切なコンピューティング環境の一例に過ぎず、本発明の使用または機能の範囲を限定するものではない。コンピューティング環境150は、例示的動作環境150に示されたコンポーネントの1つまたは組み合わせに関して依存するとも、必要とするとも解釈されるべきではない。
図5Bを参照すると、本発明を実装する例示的システムは、コンピュータ160の形式の汎用コンピューティングデバイスを含む。コンピュータ160のコンポーネントは、限定するわけではないが、処理装置162、システムメモリ164、および、処理装置162に対するシステムメモリを含む様々なシステムコンポーネントにつながるシステムバス166を含む。システムバス166は、メモリバスまたはメモリコントローラ、ペリフェラルバス、および様々なバスアーキテクチャを使用するローカルバスを含む、任意のタイプのバス構造とすることができる。一例として、限定するわけではないが、そのようなアーキテクチャは、ISAバス、MCAバス、EISAバス、VESAローカルバス、(メザニンバスとも呼ばれる)PCIバス、およびPCIeを含む。
コンピュータ160は一般的に、様々なタイプのコンピュータ読取り可能媒体を含む。コンピュータ読取り可能媒体は、コンピュータ160によってアクセス可能とすることができ、揮発性および不揮発性の双方、取外し可能および取外し不可能な媒体を含む。一例として、限定ではないが、コンピュータ読取り可能媒体は、コンピュータストレージ媒体および通信媒体を含む。コンピュータストレージ媒体は、コンピュータ読取り可能命令、データ構造、プログラムモジュール、またはその他のデータなどの情報の記憶のための方法または技術で実装された、揮発性および不揮発性、取外し可能および取外し不可能な媒体を含む。コンピュータストレージ媒体は、限定ではないが、RAM、ROM、EEPROM、フラッシュメモリまたはその他のメモリ技術、CDROM、DVDまたはその他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたはその他の磁気ストレージデバイス、若しくは、コンピュータ160によってアクセスすることができ、所望の情報を格納するために使用することができるその他の媒体を含む。通信媒体は一般的に、コンピュータ読取り可能命令、データ構造、プログラムモジュール、若しくは、搬送波またはその他の移送機構などの符号化されたデータ信号内のその他のデータを具現し、任意の情報伝達媒体を含む。用語「被変調データ信号」は、信号内で情報を符号化するような方式で設定され、変更された1つまたは複数の特徴を有する信号を意味する。一例として、限定ではないが、通信媒体は、有線ネットワークまたは直接配線接続などの有線媒体、音響、RF、赤外線、およびその他の無線媒体などの無線媒体を含む。上述したものの任意の組み合わせも、コンピュータ読取り可能媒体の範囲内に含まれるべきである。
システムメモリ164は、ROM168およびRAM170などの、揮発性または不揮発性メモリの形式のコンピュータストレージ媒体を含む。起動時などに、コンピュータ160内の要素間での情報の転送を助ける基本ルーチンを含むBIOS172は、一般的に、ROM168に格納される。RAM170は一般的に、処理装置162によって即座にアクセス可能な、および/または、現在動作しているデータおよび/またはプログラムモジュールを含む。一例として、限定ではないが、図5Bは、オペレーティングシステム174、アプリケーションプログラム176、その他のプログラムモジュール178、およびプログラムデータ180を示す。
コンピュータ160は、その他の取外し可能/取外し不可能、揮発性/不揮発性コンピュータストレージ媒体も含むことができる。一例として、図5Bは、取外し不可能不揮発性磁気媒体に読み書きするハードディスクドライブ182、取外し可能不揮発性磁気ディスク186に読み書きする磁気ディスクドライブ184、および、CD−ROMまたはその他の光学媒体などの取外し可能不揮発性光ディスク190に読み書きする光ディスクドライブ188を示す。例示的動作環境で使用することができるその他の取外し可能/取外し不可能、揮発性/不揮発性コンピュータストレージ媒体は、限定ではないが、磁気テープカセット、フラッシュメモリカード、DVD、デジタルビデオテープ、固体RAM、固体ROMなどを含む。ハードディスクドライブ182は一般的に、インターフェース192などの取外し不可能メモリインターフェースを介してシステムバス166に接続され、磁気ディスクドライブ184および光ディスクドライブ188は一般的に、インターフェース194などの取外し可能メモリインターフェースによってシステムバス166に接続される。
上述され、図5Bに示されたドライブおよびそれに関連するコンピュータストレージは、コンピュータ160に対して、コンピュータ読取り可能命令、データ構造、プログラムモジュール、およびその他のデータのストレージを提供する。図5Bにおいて、例えば、ハードディスクドライブ182は、オペレーティングシステム196、アプリケーションプログラム198、その他のプログラムモジュール200、およびプログラムデータ202を格納するように示される。これらのコンポーネントは、オペレーティングシステム174、アプリケーションプログラム176、その他のプログラムモジュール178、およびプログラムデータ180と同じでも異なってもよいことに留意されたい。オペレーティングシステム196、アプリケーションプログラム198、その他のプログラムモジュール200、およびプログラムデータ200は、それらが異なるコピーであることが示されるように、異なって与えられている。ユーザは、キーボード204、マウス、トラックボール、またはタッチパッドと呼ばれるポインティングデバイス206などの入力デバイスを介して、コンピュータ160にコマンドおよび情報を入力することができる。その他の入力デバイス(不図示)には、マイクロフォン、ジョイスティック、ゲームパッド、衛星アンテナ、スキャナなどが含まれる。これらおよびその他の入力デバイスはしばしば、システムバス166に接続されるユーザ入力インターフェース208を介して、処理装置162に接続されるが、パラレルポート、ゲームポート、またはUSBなどのその他のインターフェースおよびバス構造によって接続することもできる。これらは、本発明のアーキテクチャによって仮想化される種類の構造である。ノースブリッジによって実装されるインターフェースなどのグラフィックインターフェース210も、システムバス166に接続することができる。ノースブリッジは、CPUまたはホスト処理装置162と通信するチップセットであり、PCI、PCIe、およびAGP通信などの通信に関与するとみなされる。1つまたは複数のグラフィック処理装置(GPU)212は、グラフィックインターフェース210と通信することができる。この点において、GPU212は一般的に、ビデオメモリ214と通信するレジスタストレージおよびGPU212などのオンチップメモリストレージを含む。一方、GPU212はコプロセッサの一例であり、したがって、様々なコプロセスデバイスをコンピュータ160に含めることができ、ピクセルおよびバーテックスシェイダ(pixel and vertex shader)などの様々な手続シェイダ(procedural shader)を含むことができる。モニタ216またはその他のタイプのディスプレイデバイスも、ビデオメモリ214と順次通信することができるビデオインターフェース218などのインターフェースを介して、システムバス166に接続される。モニタ216に加えて、コンピュータは、出力周辺インターフェース224を介して接続することができる、スピーカ220およびプリンタ222などのその他の出力周辺デバイスも含むことができる。
コンピュータ160は、リモートコンピュータ226などの、1つまたは複数のリモートコンピュータに対する論理接続を使用して、ネットワーク化または分散環境内で動作することができる。リモートコンピュータ226は、パーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ピアデバイスまたはその他の共通ネットワークノードとすることができ、図5Bにはメモリストレージデバイス228しか示されていないが、一般的には、コンピュータ160に関連して上述された多くのまたは全ての要素を含むことができる。図5Bに示された論理接続は、LAN230およびWAN232を含むが、その他のネットワーク/バスを含むこともできる。このようなネットワーク環境は、住宅、オフィス、企業規模のネットワーク、イントラネット、およびインターネットでは一般的である。
LANネットワーキング環境で使用される場合、コンピュータ160は、ネットワークインターフェースまたはアダプタ234を介してLAN230に接続される。WANネットワーキング環境で使用される場合、コンピュータ160は一般的に、モデム236またはインターネットなどのWAN232を介して通信を確立するその他の手段を含む。外部または内部にあるモデム236は、ユーザ入力インターフェース208またはその他の適切な機構を介して、システムバス166に接続することができる。ネットワーク化環境では、コンピュータ160またはその部分に関連して示されるプログラムモジュールは、リモートメモリストレージデバイスに格納することができる。一例として、限定ではないが、図5Bは、メモリデバイス228上にあるようにリモートアプリケーションプログラム238を示している。示されたネットワーク接続は例であり、コンピュータ間で通信リンクを確立するその他の手段を使用することができることも理解されるだろう。
本発明を実装する複数の方法があり、それらは、アプリケーションおよびサービスが、本発明の仮想化アーキテクチャ、システム、および方法使用することを可能にする適切なAPI、ツールキット、ドライバコード、オペレーティングシステム、制御、スタンドアロンまたはダウロード可能オブジェクトなどである。本発明は、API(またはその他のソフトウェアオブジェクト)の観点から、並びに、本発明による上述した技術を受け取るソフトウェアまたはハードウェアから、本発明の使用を考えることができる。したがって、本明細書で説明される本発明の様々な実装は、ハードウェア全体、ハードウェアの部分とソフトウェアの部分、ならびにソフトウェアであるという側面を有する。
上述したように、本発明の例示的実施形態を、様々なコンピューティングデバイスおよびネットワークアーキテクチャに関連して説明したが、基礎をなすコンセプトは、ゲストソフトウェアをエミュレートすることが望まれる任意のコンピューティングデバイスまたはシステムに適用することができる。例えば、本発明の様々なアルゴリズムおよびハードウェア実装は、デバイス上の別々のオブジェクトとして、その他のオブジェクトの部分として、再利用可能な制御として、サーバからダウンロード可能なオブジェクトとして、ハードウェアとして、メモリ内では、上述したものの組み合わせとして提供される、コンピューティングデバイスのオペレーティングシステムに適用することができる。オブジェクトコードを提供する方法、および、本発明の様々な実施形態によって達成される同一、類似、または同等の機能を達成する方法が多数あることが、当業者には理解されるだろう。
上述したように、本明細書で説明された様々な技術は、ハードウェアまたはソフトウェエア、若しくはそれらの組み合わせに関連して実装することができる。したがって、本発明の方法および装置、ある側面またはその部分は、フロッピー(登録商標)ディスク、CD−ROM,ハードドライブ、またはその他の機械読取り可能ストレージ媒体などの有形媒体に具現されるプログラムコード(例えば、命令)の形態をとることができる。プログラムコードは、コンピュータなどのマシンにロードされ、マシンによって実行され、マシンは本発明を実施する装置となる。プログラム可能なコンピュータ上でのプログラムコード実行の場合、コンピューティングデバイスは一般的に、プロセッサ、(揮発性および不揮発性メモリおよび/またはストレージ要素を含む)プロセッサによって読取り可能なストレージ媒体、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを含む。例えば、データプロセシングAPI、再利用可能な制御などを介して、本発明の仮想化技術を実装し、利用することができる1つまたは複数のプログラムは、好ましくは、高レベル手続き型またはオブジェクト指向型プログラミング言語で実装され、コンピュータシステムと通信する。しかしながら、プログラムは、望むのであればアセンブリまたは機械言語で実装することもできる。いずれにしても、言語は、コンパイルされ、または解釈された言語となり、ハードウェア実装に組み込まれる。
本発明の方法および装置は、転送媒体を介して転送されるプログラムコードの形態に具現される通信を介して実施されることもできる。通信媒体は、例えば、電気配線またはケーブル、光ファイバ、転送のその他の形態である。プログラムコードは、EPROM、ゲートアレイ、プログラム可能な論理デバイス(PLD)、クライアントコンピュータなどのマシンにロードされ、マシンによって実行され、そのマシンは、本発明を実施する装置となる。汎用プロセッサ上で実装される場合、プログラムコードは、プロセッサと組み合わせて、本発明の機能を呼び出すように動作する独自の装置を提供する。また、本発明に関連して使用される任意のストレージ技術は常に、ハードウェアとソフトウェアの組み合わせである。
望ましい実施形態に関連して本発明を説明したが、本発明の趣旨を逸脱せずに、その他の類似の実施形態を使用することができ、修正および追加が、説明された実施形態になされることができることが理解されるべきである。例えば、本発明の例示的ネットワーク環境が、ピアツーピアネットワーク化環境などのネットワーク化環境の文脈において説明されたが、本発明はそれらに限定されず、本出願で説明されたような方法は、ゲームコンソール、ハンドヘルドコンピュータ、ポータブルコンピュータなどのコンピューティングデバイスまたは環境に適用することができ、通信ネットワークを介して接続され、ネットワークを介して相互通信する、複数のコンピューティングデバイスに適用することができることが、当業者には理解されるだろう。さらに、ハンドヘルドデバイスオペレーティングシステムおよびその他のアプリケーションに特化したオペレーティングシステムを含む様々なコンピュータプラットフォームを考慮することができ、特に複数の無線ネットワークデバイスが増え続けていることは強調されるべきである。
例示的実施形態が、ホストOS上で仮想化されたゲストOSの文脈において本発明を利用することに言及したが、本発明はそれに限定されず、メインプロセッサと共に動作する第2のプロセッサを仮想化するように実装することもできる。さらに、本発明は、OSの同一のバージョンまたはリリースの複数のインスタンスが、本発明による別個の仮想マシンにおいて動作しているシナリオを考慮する。本発明の仮想化は、ゲストOSを使用するための動作とは独立していることが理解できるだろう。本発明は、Windows(登録商標)またはXボックスアーキテクチャだけでなく、全てのコンピュータアーキテクチャに適用することも意図されている。さらに、本発明は、複数のプロセシングチップまたはデバイス内に、またはそれらにわたって実装することができ、ストレージは同様に、複数のデバイスにわたって有効である。したがって、本発明は、いかなる単一の実施形態にも限定されるべきではなく、添付の特許請求の範囲による広さおよび範囲で解釈されるべきである。
コンピュータシステム内のエミュレートされた動作環境についての、ハードウェアおよびソフトウェアアーキテクチャの論理階層化を示すブロック図である。 エミュレーションが、(直接的にまたはハイパーバイザを介して)ホストオペレーティングシステムによって実施される仮想化コンピューティングシステムを示すブロック図である。 エミュレーションが、ホストオペレーティングシステムと隣り合って実行されている仮想マシンモニタによって実施される、別の仮想化されたコンピューティングシステムを示すブロック図である。 仮想マシン内に実装されたレガシーゲームシステムの仮想メモリと、ホストゲームシステムの仮想メモリとの間の関係を示す図である。 本発明の技術を使用して、仮想マシン内に実装されたレガシーゲームシステムのx86コードを、ホストゲームシステムのPPCコードに変換するシステムを示す図である。 本発明のJITバイナリトランスレータの動作を示す流れ図である。 本発明を実装することができる様々なコンピューティングデバイスを有する例示的なネットワーク化環境を示すブロック図である。 本発明を実装することができる例示的な限定しないホストコンピューティングデバイスを示すブロック図である。

Claims (20)

  1. 第1のCPUタイプのコンピュータ実行可能コードを、第2のCPUタイプのコンピュータ実行可能コードへ変換する方法であって、
    前記第1のCPUタイプの前記コンピュータ実行可能コードのストリームを解析して、前記第1のCPUタイプの前記コンピュータ実行可能コード内の関数に対応する、前記第1のCPUタイプの前記コンピュータ実行可能コードの前記ストリーム内のCPUコード命令のシーケンスを識別するステップと、
    前記関数に対応する前記ストリーム内のCPUコード命令の前記シーケンスから、第2のCPUタイプの前記実行可能コードのシーケンスを生成するステップと
    を備えることを特徴とする方法。
  2. 前記第1のCPUタイプはx86であり、前記第2のCPUタイプはパワーPCであることを特徴とする請求項1に記載の方法。
  3. 前記解析するステップは、コンパイラに、前記第1のCPUタイプの前記コンピュータ実行可能コードの前記ストリーム内の関数の最初に始まる、前記第1のCPUタイプの命令のリストを作成するように指示するステップと、関数命令の最後に到達し、前記第1のCPUタイプの命令の前記リスト内に未解決の条件分岐がない場合に、前記第1のCPUタイプの前記コンピュータ実行可能命令の前記ストリーム内のある地点で、前記第1のCPUタイプの命令の前記リストを終了させるステップとを備えることを特徴とする請求項1に記載の方法。
  4. 命令の前記リストを分析して、最適化を見いだすステップと、前記生成するステップの前に、前記最適化を実行するステップとをさらに備えることを特徴とする請求項3に記載の方法。
  5. 前記第2のCPUタイプの実行可能コードの前記生成されたシーケンスを分析して、最適化を見いだすステップと、前記最適化を実行するステップとをさらに備えることを特徴とする請求項4に記載の方法。
  6. 前記第2のCPUタイプの前記実行可能コードの前記シーケンスをコンパイルし、格納するステップと、前記コンパイルされたシーケンスが格納されるメモリアドレスを、前記第1のCPUタイプの前記関数の前記最初のメモリアドレスに関連付けるステップとをさらに備えることを特徴とする請求項3に記載の方法。
  7. 第1のCPUタイプのコンピュータ実行可能コードを、第2のCPUタイプのコンピュータ実行可能コードに変換するバイナリ変換システムであって、
    前記第1のCPUタイプの前記コンピュータ実行可能コードのストリームを解析して、前記第1のCPUタイプの前記コンピュータ実行可能コード内の関数に対応する、前記第1のCPUタイプの前記コンピュータ実行可能コードの前記ストリーム内のCPUコード命令のシーケンスを識別するパーサと、
    前記関数に対応する前記ストリーム内のCPUコード命令の前記シーケンスから、前記第2のCPUタイプの前記実行可能コードのシーケンスを生成するコードジェネレータと
    を備えることを特徴とするバイナリ変換システム。
  8. 前記第1のCPUタイプはx86であり、前記第2のCPUタイプはパワーPCであることを特徴とする請求項7に記載のバイナリ変換システム。
  9. 前記パーサは、前記第1のCPUタイプの前記コンピュータ実行可能コードの前記ストリーム内の関数の最初に始まる、前記第1のCPUタイプの命令のリストを作成し、関数命令の最後に到達し、前記第1のCPUタイプの命令の前記リスト内に未解決の条件分岐がない場合に、前記第1のCPUタイプの前記コンピュータ実行可能コードの前記ストリーム内のある地点で、前記第1のCPUタイプの命令の前記リストを終了させることを特徴とする請求項7に記載のバイナリ変換システム。
  10. 命令の前記リストを分析して、最適化を見いだし、前記コードジェネレータに命令の前記リストを提供する前に、前記最適化を実行するオプティマイザをさらに備えることを特徴とする請求項9に記載のバイナリ変換システム。
  11. 前記第2のCPUタイプの実行可能コードの前記生成されたシーケンスを分析して、最適化を見いだし、前記最適化を実行する第2のオプティマイザをさらに備えることを特徴とする請求項10に記載のバイナリ変換システム。
  12. 前記第2のCPUタイプの前記実行可能コードの前記シーケンスをコンパイルし、格納するコンパイラをさらに備えることを特徴とする請求項9に記載のバイナリ変換システム。
  13. 前記コンパイルされたシーケンスが格納されるメモリアドレスと、前記第1のCPUタイプの前記関数の前記最初のメモリアドレスとを格納するテーブルをさらに備え、該テーブルは、前記メモリアドレスを互いに関連付けることを特徴とする請求項12に記載のバイナリ変換システム。
  14. ホストコンピュータシステムに挿入されると、第1のCPUタイプのコンピュータ実行可能コードを第2のCPUタイプのコンピュータ実行可能コードに変換するバイナリ変換システムを作り出すコンピュータ読取り可能媒体であって、
    前記第1のCPUタイプの前記コンピュータ実行可能コードのストリームを解析して、前記第1のCPUタイプの前記コンピュータ実行可能コード内の関数に対応する、前記第1のCPUタイプの前記コンピュータ実行可能コード前記ストリーム内のCPUコード命令のシーケンスを識別するパーサソフトウェアと、
    前記関数に対応する前記ストリーム内のCPUコード命令の前記シーケンスから、前記第2のCPUタイプの前記実行可能コードのシーケンスを生成するコードジェネレータソフトウェアと
    を備えることを特徴とするコンピュータ読取り可能媒体。
  15. 前記第1のCPUタイプはx86であり、前記第2のCPUタイプはパワーPCであることを特徴とする請求項14に記載のコンピュータ読取り可能媒体。
  16. 前記パーサソフトウェアは、前記第1のCPUタイプの前記コンピュータ実行可能コードの前記ストリーム内の関数の最初に始まる、前記第1のCPUタイプの命令のリストを作成し、関数命令の最後に到達し、前記第1のCPUタイプの命令の前記リスト内に未解決の条件分岐がない場合に、前記第1のCPUタイプの前記コンピュータ実行可能コードの前記ストリーム内のある地点で、前記第1のCPUタイプの命令の前記リストを終了させることを特徴とする請求項14に記載のコンピュータ読取り可能媒体。
  17. 命令の前記リストを分析して、最適化を見いだし、前記コードジェネレータソフトウェアに命令の前記リストを提供する前に、前記最適化を実行するオプティマイザソフトウェアをさらに備えることを特徴とする請求項16に記載のコンピュータ読取り可能媒体。
  18. 前記第2のCPUタイプの実行可能コードの前記生成されたシーケンスを分析して、最適化を見いだし、前記最適化を実行することを特徴とする請求項17に記載のコンピュータ読取り可能媒体。
  19. 前記第2のCPUタイプの前記実行可能コードの前記シーケンスをコンパイルし、格納するコンパイラをさらに備えることを特徴とする請求項16に記載のコンピュータ読取り可能媒体。
  20. 前記コンパイルされたシーケンスが格納されるメモリアドレスと、前記第1のCPUタイプの前記関数の前記最初のメモリアドレスとを格納するテーブルをさらに備え、該テーブルは、前記メモリアドレスを互いに関連付けることを特徴とする請求項19に記載のコンピュータ読取り可能媒体。
JP2008511153A 2005-05-12 2006-04-28 複数の経路最適化を備える関数レベルジャストインタイム変換エンジン Expired - Fee Related JP5139975B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/128,699 2005-05-12
US11/128,699 US20070006178A1 (en) 2005-05-12 2005-05-12 Function-level just-in-time translation engine with multiple pass optimization
PCT/US2006/016274 WO2006124242A2 (en) 2005-05-12 2006-04-28 Function-level just-in-time translation engine with multiple pass optimization

Publications (2)

Publication Number Publication Date
JP2008545179A true JP2008545179A (ja) 2008-12-11
JP5139975B2 JP5139975B2 (ja) 2013-02-06

Family

ID=37431763

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008511153A Expired - Fee Related JP5139975B2 (ja) 2005-05-12 2006-04-28 複数の経路最適化を備える関数レベルジャストインタイム変換エンジン

Country Status (6)

Country Link
US (1) US20070006178A1 (ja)
EP (1) EP1869852A4 (ja)
JP (1) JP5139975B2 (ja)
KR (1) KR101293868B1 (ja)
CN (1) CN101517536B (ja)
WO (1) WO2006124242A2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015525922A (ja) * 2012-08-08 2015-09-07 インテル コーポレイション バーチャルファンクションを無効にするコールのためのサポートを含むisaブリッジング
JP2023021045A (ja) * 2021-07-28 2023-02-09 ソニー・インタラクティブエンタテインメント エルエルシー レガシーゲーム用aotコンパイラ

Families Citing this family (67)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2397665A (en) * 2003-01-27 2004-07-28 Hewlett Packard Co Operating system data management
US20060259896A1 (en) * 2005-05-16 2006-11-16 Microsoft Corporation Maintaining reproducibility across multiple software builds
US8423824B2 (en) 2005-08-29 2013-04-16 The Invention Science Fund I, Llc Power sparing synchronous apparatus
US7739524B2 (en) * 2005-08-29 2010-06-15 The Invention Science Fund I, Inc Power consumption management
US8209524B2 (en) * 2005-08-29 2012-06-26 The Invention Science Fund I, Llc Cross-architecture optimization
US8516300B2 (en) 2005-08-29 2013-08-20 The Invention Science Fund I, Llc Multi-votage synchronous systems
US7627739B2 (en) * 2005-08-29 2009-12-01 Searete, Llc Optimization of a hardware resource shared by a multiprocessor
US7493516B2 (en) * 2005-08-29 2009-02-17 Searete Llc Hardware-error tolerant computing
US7877584B2 (en) * 2005-08-29 2011-01-25 The Invention Science Fund I, Llc Predictive processor resource management
US8255745B2 (en) * 2005-08-29 2012-08-28 The Invention Science Fund I, Llc Hardware-error tolerant computing
US20070050608A1 (en) * 2005-08-29 2007-03-01 Searete Llc, A Limited Liability Corporatin Of The State Of Delaware Hardware-generated and historically-based execution optimization
US7647487B2 (en) * 2005-08-29 2010-01-12 Searete, Llc Instruction-associated processor resource optimization
US7779213B2 (en) * 2005-08-29 2010-08-17 The Invention Science Fund I, Inc Optimization of instruction group execution through hardware resource management policies
US7725693B2 (en) * 2005-08-29 2010-05-25 Searete, Llc Execution optimization using a processor resource management policy saved in an association with an instruction group
US8214191B2 (en) * 2005-08-29 2012-07-03 The Invention Science Fund I, Llc Cross-architecture execution optimization
US8181004B2 (en) * 2005-08-29 2012-05-15 The Invention Science Fund I, Llc Selecting a resource management policy for a resource available to a processor
US7774558B2 (en) * 2005-08-29 2010-08-10 The Invention Science Fund I, Inc Multiprocessor resource optimization
US7653834B2 (en) * 2005-08-29 2010-01-26 Searete, Llc Power sparing synchronous apparatus
US8108201B2 (en) * 2005-11-17 2012-01-31 International Business Machines Corporation Method for emulating a native device on a host computer system
US20070234307A1 (en) * 2006-03-06 2007-10-04 Chi-Keung Luk Methods and apparatus to inline conditional software instrumentation
US8413125B2 (en) * 2007-01-26 2013-04-02 Oracle International Corporation Asynchronous dynamic compilation based on multi-session profiling to produce shared native code
JP2008276735A (ja) * 2007-04-03 2008-11-13 Toshiba Corp プログラムコード変換装置及びプログラムコード変換方法
US20080250231A1 (en) * 2007-04-03 2008-10-09 Kabushiki Kaisha Toshiba Program code conversion apparatus, program code conversion method and recording medium
CN101295265A (zh) * 2007-04-25 2008-10-29 国际商业机器公司 全系统isa仿真系统及其识别进程的方法
CN101689106B (zh) * 2007-06-12 2013-10-09 松下电器产业株式会社 多处理器控制装置、多处理器控制方法以及多处理器控制电路
US8782618B1 (en) * 2008-01-08 2014-07-15 The Mathworks, Inc. Instrument based processing
US8886675B2 (en) * 2008-01-23 2014-11-11 Sap Se Method and system for managing data clusters
US7979260B1 (en) * 2008-03-31 2011-07-12 Symantec Corporation Simulating PXE booting for virtualized machines
US8117346B2 (en) * 2008-10-03 2012-02-14 Microsoft Corporation Configuration space virtualization
US20100188412A1 (en) * 2009-01-28 2010-07-29 Microsoft Corporation Content based cache for graphics resource management
US8711159B2 (en) * 2009-02-23 2014-04-29 Microsoft Corporation VGPU: a real time GPU emulator
US8327358B2 (en) * 2009-12-10 2012-12-04 Empire Technology Development Llc Hypervisor driver management in virtual machine environments
US8683451B1 (en) * 2010-04-30 2014-03-25 The United States Of America As Represented By The Secretary Of The Navy System and method for translating software code
US8479176B2 (en) * 2010-06-14 2013-07-02 Intel Corporation Register mapping techniques for efficient dynamic binary translation
US9053053B2 (en) * 2010-11-29 2015-06-09 International Business Machines Corporation Efficiently determining identical pieces of memory used by virtual machines
US9201678B2 (en) 2010-11-29 2015-12-01 International Business Machines Corporation Placing a virtual machine on a target hypervisor
EP2668565B1 (en) 2011-01-27 2019-11-06 Intel Corporation Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor
WO2012103245A2 (en) 2011-01-27 2012-08-02 Soft Machines Inc. Guest instruction block with near branching and far branching sequence construction to native instruction block
WO2012103367A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest to native block address mappings and management of native code storage
WO2012103373A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Variable caching structure for managing physical storage
WO2012103359A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Hardware acceleration components for translating guest instructions to native instructions
WO2012103253A2 (en) * 2011-01-27 2012-08-02 Soft Machines, Inc. Multilevel conversion table cache for translating guest instructions to native instructions
US8468600B1 (en) * 2011-03-04 2013-06-18 Adobe Systems Incorporated Handling instruction received from a sandboxed thread of execution
US8984478B2 (en) 2011-10-03 2015-03-17 Cisco Technology, Inc. Reorganization of virtualized computer programs
JP5961971B2 (ja) * 2011-10-12 2016-08-03 富士通株式会社 シミュレーション装置,方法,およびプログラム
CN103186414A (zh) * 2011-12-27 2013-07-03 联想(北京)有限公司 一种程序执行方法、程序管理器和虚拟机
US10437591B2 (en) * 2013-02-26 2019-10-08 Qualcomm Incorporated Executing an operating system on processors having different instruction set architectures
US9110723B2 (en) * 2013-03-13 2015-08-18 Intel Corporation Multi-core binary translation task processing
EP2972798B1 (en) 2013-03-15 2020-06-17 Intel Corporation Method and apparatus for guest return address stack emulation supporting speculation
US9525586B2 (en) * 2013-03-15 2016-12-20 Intel Corporation QoS based binary translation and application streaming
WO2014151652A1 (en) 2013-03-15 2014-09-25 Soft Machines Inc Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor
CN103365665A (zh) * 2013-07-25 2013-10-23 成都品果科技有限公司 一种基于虚拟指令的应用程序移植方法
US10120681B2 (en) 2014-03-14 2018-11-06 International Business Machines Corporation Compare and delay instructions
US9558032B2 (en) 2014-03-14 2017-01-31 International Business Machines Corporation Conditional instruction end operation
US9454370B2 (en) * 2014-03-14 2016-09-27 International Business Machines Corporation Conditional transaction end instruction
US10311227B2 (en) * 2014-09-30 2019-06-04 Apple Inc. Obfuscation of an address space layout randomization mapping in a data processing system
US10311228B2 (en) 2014-09-30 2019-06-04 Apple Inc. Using a fine-grained address space layout randomization to mitigate potential security exploits
WO2016162720A1 (en) * 2015-04-10 2016-10-13 Google Inc. Binary translation into native client
KR102023668B1 (ko) * 2015-04-10 2019-09-20 구글 엘엘씨 공유된 객체 레벨에 대한 이진 트랜슬레이션
US9335982B1 (en) 2015-04-28 2016-05-10 Microsoft Technology Licensing, Llc Processor emulation using multiple translations
FR3036206B1 (fr) * 2015-05-11 2017-06-09 Thales Sa Procede de reutilisation de moyens certifies de mise en oeuvre d'une fonction embarquee notamment a bord d'un aeronef
US9786026B2 (en) 2015-06-15 2017-10-10 Microsoft Technology Licensing, Llc Asynchronous translation of computer program resources in graphics processing unit emulation
US9881351B2 (en) 2015-06-15 2018-01-30 Microsoft Technology Licensing, Llc Remote translation, aggregation and distribution of computer program resources in graphics processing unit emulation
EP3235549A1 (en) * 2016-04-21 2017-10-25 KooJoo Ltd Gameplay trigger detection
US10133655B1 (en) 2017-06-12 2018-11-20 Sony Interactive Entertainment Inc. Emulation of target system using JIT compiler and bypassing translation of selected target code blocks
US11487565B2 (en) * 2020-10-29 2022-11-01 Hewlett Packard Enterprise Development Lp Instances of just-in-time (JIT) compilation of code using different compilation settings
US11900104B2 (en) 2021-10-26 2024-02-13 Vfunction, Inc. Method and system for identifying and removing dead codes from a computer program

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS51853A (ja) * 1974-06-21 1976-01-07 Hitachi Ltd Deetashorishisutemuno meireigoseisochi
JPS6314240A (ja) * 1986-07-07 1988-01-21 インタ−ナショナル ビジネス マシ−ンズ コ−ポレ−ション コンピュータ・プログラムの変換方法
JPH09212370A (ja) * 1996-01-25 1997-08-15 Internatl Business Mach Corp <Ibm> ゲスト命令をエミュレートするプロセッサの性能改善方法及びシステム
JPH11175349A (ja) * 1997-11-11 1999-07-02 Internatl Business Mach Corp <Ibm> データ列生成方法及び装置、変換方法、及びコンピュータ
JP2003196107A (ja) * 2001-11-29 2003-07-11 Hewlett Packard Co <Hp> エミュレートされるコードとネイティブコードとを統合するシステムおよび方法
JP2004280795A (ja) * 2003-03-13 2004-10-07 Northrop Grumman Corp エクストリームパイプライン及び最適化再配列技術
WO2005008478A2 (en) * 2003-07-15 2005-01-27 Transitive Limited Method and apparatus for performing native binding

Family Cites Families (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4456954A (en) * 1981-06-15 1984-06-26 International Business Machines Corporation Virtual machine system with guest architecture emulation using hardware TLB's for plural level address translations
US4974159A (en) * 1988-09-13 1990-11-27 Microsoft Corporation Method of transferring control in a multitasking computer system
US5437033A (en) * 1990-11-16 1995-07-25 Hitachi, Ltd. System for recovery from a virtual machine monitor failure with a continuous guest dispatched to a nonguest mode
US5507030A (en) * 1991-03-07 1996-04-09 Digitial Equipment Corporation Successive translation, execution and interpretation of computer program having code at unknown locations due to execution transfer instructions having computed destination addresses
US5307504A (en) * 1991-03-07 1994-04-26 Digital Equipment Corporation System and method for preserving instruction granularity when translating program code from a computer having a first architecture to a computer having a second reduced architecture during the occurrence of interrupts due to asynchronous events
US5781750A (en) * 1994-01-11 1998-07-14 Exponential Technology, Inc. Dual-instruction-set architecture CPU with hidden software emulation mode
US5842017A (en) * 1996-01-29 1998-11-24 Digital Equipment Corporation Method and apparatus for forming a translation unit
US6330691B1 (en) * 1996-02-23 2001-12-11 Institute For The Development Of Emerging Architectures Llc Use of dynamic translation to provide breakpoints in non-writeable object code
US6282657B1 (en) * 1997-09-16 2001-08-28 Safenet, Inc. Kernel mode protection
US6397242B1 (en) * 1998-05-15 2002-05-28 Vmware, Inc. Virtualization system including a virtual machine monitor for a computer with a segmented architecture
US6496847B1 (en) * 1998-05-15 2002-12-17 Vmware, Inc. System and method for virtualizing computer systems
US6704925B1 (en) * 1998-09-10 2004-03-09 Vmware, Inc. Dynamic binary translator with a system and method for updating and maintaining coherency of a translation cache
US6732220B2 (en) * 1999-02-17 2004-05-04 Elbrus International Method for emulating hardware features of a foreign architecture in a host operating system environment
US6321314B1 (en) * 1999-06-09 2001-11-20 Ati International S.R.L. Method and apparatus for restricting memory access
US6802056B1 (en) * 1999-06-30 2004-10-05 Microsoft Corporation Translation and transformation of heterogeneous programs
US6868387B1 (en) * 2000-06-23 2005-03-15 Abb Vetco Gray, Inc. Automated notification of part revisions for outside suppliers
US6651132B1 (en) * 2000-07-17 2003-11-18 Microsoft Corporation System and method for emulating the operation of a translation look-aside buffer
JP2002041305A (ja) * 2000-07-26 2002-02-08 Hitachi Ltd 仮想計算機システムにおける計算機資源の割当て方法および仮想計算機システム
US7085705B2 (en) * 2000-12-21 2006-08-01 Microsoft Corporation System and method for the logical substitution of processor control in an emulated computing environment
US7035963B2 (en) * 2000-12-27 2006-04-25 Intel Corporation Method for resolving address space conflicts between a virtual machine monitor and a guest operating system
US6643759B2 (en) * 2001-03-30 2003-11-04 Mips Technologies, Inc. Mechanism to extend computer memory protection schemes
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
US7103529B2 (en) * 2001-09-27 2006-09-05 Intel Corporation Method for providing system integrity and legacy environment emulation
US7213240B2 (en) * 2001-10-05 2007-05-01 Sun Microsystems, Inc. Platform-independent selective ahead-of-time compilation
US20030088860A1 (en) * 2001-11-02 2003-05-08 Fu-Hwa Wang Compiler annotation for binary translation tools
US7124273B2 (en) * 2002-02-25 2006-10-17 Intel Corporation Method and apparatus for translating guest physical addresses in a virtual machine environment
US7127548B2 (en) * 2002-04-16 2006-10-24 Intel Corporation Control register access virtualization performance improvement in the virtual-machine architecture
US7296267B2 (en) * 2002-07-12 2007-11-13 Intel Corporation System and method for binding virtual machines to hardware contexts
US20040083467A1 (en) * 2002-10-29 2004-04-29 Sharp Laboratories Of America, Inc. System and method for executing intermediate code
US7318141B2 (en) * 2002-12-17 2008-01-08 Intel Corporation Methods and systems to control virtual machines
US7100154B2 (en) * 2003-01-16 2006-08-29 International Business Machines Corporation Dynamic compiler apparatus and method that stores and uses persistent execution statistics
US7162617B2 (en) * 2003-02-14 2007-01-09 Fine Arc Incorporated Data processor with changeable architecture
US7111145B1 (en) * 2003-03-25 2006-09-19 Vmware, Inc. TLB miss fault handler and method for accessing multiple page tables
US7543284B2 (en) * 2003-04-22 2009-06-02 Transitive Limited Partial dead code elimination optimizations for program code conversion
US7299460B2 (en) * 2003-05-29 2007-11-20 Nec Corporation Method and computer program for converting an assembly language program for one processor to another
US7421698B2 (en) * 2003-12-22 2008-09-02 Sun Microsystems, Inc. System and method for dynamically and persistently tracking incremental profiling data in a process cloning application environment
US7565631B1 (en) * 2004-07-02 2009-07-21 Northwestern University Method and system for translating software binaries and assembly code onto hardware
US7213125B2 (en) * 2004-07-31 2007-05-01 Hewlett-Packard Development Company, L.P. Method for patching virtually aliased pages by a virtual-machine monitor
US7752030B2 (en) * 2004-08-03 2010-07-06 Intel Corporation Virtualization as emulation support
US7624384B2 (en) * 2004-11-30 2009-11-24 Intel Corporation Apparatus, system, and method of dynamic binary translation with translation reuse
US7496495B2 (en) * 2005-05-12 2009-02-24 Microsoft Corporation Virtual operating system device communication relying on memory access violations
US20070016895A1 (en) * 2005-07-15 2007-01-18 Microsoft Corporation Selective omission of endian translation to enhance emulator performance

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS51853A (ja) * 1974-06-21 1976-01-07 Hitachi Ltd Deetashorishisutemuno meireigoseisochi
JPS6314240A (ja) * 1986-07-07 1988-01-21 インタ−ナショナル ビジネス マシ−ンズ コ−ポレ−ション コンピュータ・プログラムの変換方法
JPH09212370A (ja) * 1996-01-25 1997-08-15 Internatl Business Mach Corp <Ibm> ゲスト命令をエミュレートするプロセッサの性能改善方法及びシステム
JPH11175349A (ja) * 1997-11-11 1999-07-02 Internatl Business Mach Corp <Ibm> データ列生成方法及び装置、変換方法、及びコンピュータ
JP2003196107A (ja) * 2001-11-29 2003-07-11 Hewlett Packard Co <Hp> エミュレートされるコードとネイティブコードとを統合するシステムおよび方法
JP2004280795A (ja) * 2003-03-13 2004-10-07 Northrop Grumman Corp エクストリームパイプライン及び最適化再配列技術
WO2005008478A2 (en) * 2003-07-15 2005-01-27 Transitive Limited Method and apparatus for performing native binding

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015525922A (ja) * 2012-08-08 2015-09-07 インテル コーポレイション バーチャルファンクションを無効にするコールのためのサポートを含むisaブリッジング
JP2023021045A (ja) * 2021-07-28 2023-02-09 ソニー・インタラクティブエンタテインメント エルエルシー レガシーゲーム用aotコンパイラ
JP7436579B2 (ja) 2021-07-28 2024-02-21 ソニー・インタラクティブエンタテインメント エルエルシー レガシーゲーム用aotコンパイラ

Also Published As

Publication number Publication date
KR101293868B1 (ko) 2013-08-07
CN101517536A (zh) 2009-08-26
EP1869852A2 (en) 2007-12-26
JP5139975B2 (ja) 2013-02-06
US20070006178A1 (en) 2007-01-04
CN101517536B (zh) 2015-08-19
KR20080000638A (ko) 2008-01-02
WO2006124242A3 (en) 2009-05-14
EP1869852A4 (en) 2010-07-21
WO2006124242A2 (en) 2006-11-23

Similar Documents

Publication Publication Date Title
JP5139975B2 (ja) 複数の経路最適化を備える関数レベルジャストインタイム変換エンジン
US7496495B2 (en) Virtual operating system device communication relying on memory access violations
CN108762815B (zh) 一种基于非虚拟化体系架构的Android运行环境实现方法
Smith et al. The architecture of virtual machines
Heiser et al. The OKL4 Microvisor: Convergence point of microkernels and hypervisors
EP1209564B1 (en) Kernel emulator for non-native program modules
Chiueh et al. A survey on virtualization technologies
US20070016895A1 (en) Selective omission of endian translation to enhance emulator performance
EP3350696B1 (en) Overriding a migrated method of an updated type
US20180074843A1 (en) System, method, and computer program product for linking devices for coordinated operation
Donovan et al. PNaCl: Portable native client executables
EP2076863A2 (en) Virtualization for diversified tamper resistance
US7069412B2 (en) Method of using a plurality of virtual memory spaces for providing efficient binary compatibility between a plurality of source architectures and a single target architecture
JP2005507114A (ja) ネイティブおよび非ネイティブの共有データ構造の間でのデータ整列
CN117369993A (zh) 在Linux环境下兼容运行不同业务系统的方法及信创服务器
Murray et al. Privilege separation made easy: trusting small libraries not big processes
Okafor et al. Eliminating the operating system via the bare machine computing paradigm
US9081646B2 (en) Building packages of functionally different programs from source code of a single program
Wen et al. WasmAndroid: a cross-platform runtime for native programming languages on Android (WIP paper)
Rogers et al. JikesNODE and PearColator: A Jikes RVM operating system and legacy code execution environment
Smith et al. Introduction to virtual Machines
Singh et al. Getting Started with WSL
Tijms Binary translation: Classification of emulators
Ramlot Optimising memory usage of Kubernetes operators
CN114860382A (zh) 数据处理方法及装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090323

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20111212

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120106

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120406

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120706

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121005

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

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121116

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151122

Year of fee payment: 3

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees