JP2003196107A - エミュレートされるコードとネイティブコードとを統合するシステムおよび方法 - Google Patents

エミュレートされるコードとネイティブコードとを統合するシステムおよび方法

Info

Publication number
JP2003196107A
JP2003196107A JP2002337638A JP2002337638A JP2003196107A JP 2003196107 A JP2003196107 A JP 2003196107A JP 2002337638 A JP2002337638 A JP 2002337638A JP 2002337638 A JP2002337638 A JP 2002337638A JP 2003196107 A JP2003196107 A JP 2003196107A
Authority
JP
Japan
Prior art keywords
code
computer system
emulated
host computer
native
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.)
Pending
Application number
JP2002337638A
Other languages
English (en)
Inventor
Giuseppe Desoli
ジュセッペ・デソリ
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.)
HP Inc
Original Assignee
Hewlett Packard Co
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 Hewlett Packard Co filed Critical Hewlett Packard Co
Publication of JP2003196107A publication Critical patent/JP2003196107A/ja
Pending legal-status Critical Current

Links

Classifications

    • 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
    • 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/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms

Abstract

(57)【要約】 【課題】エミュレートされるコードとネイティブコード
とを統合するシステムおよび方法が提供される。 【解決手段】一実施形態は、ホストコンピュータシステ
ム上で元のコンピュータシステムからのコードをエミュ
レートする方法を含む。1つのこのような実施形態は、
ホストコンピュータシステム上でエミュレートすべきプ
ログラムコードに関連するプログラム命令をフェッチす
るステップ(200)と、プログラム命令をホストコン
ピュータシステム上でネイティブに実行すべきか、それ
ともホストコンピュータシステム上でエミュレートすべ
きかを決定するステップ(202)と、プログラム命令
をホストコンピュータシステム上でネイティブに実行す
べき場合、プログラム命令に関連するネイティブコード
フラグメントを動的実行レイヤインタフェース(10
4)に放出して実行するステップ(206)とを含む。

Description

【発明の詳細な説明】
【0001】[関連出願の相互参照]本出願は、200
1年11月29日付けで出願された「Systems and Meth
odsfor Integrating Emulated and Native Code」と題
する同時係属中の米国特許仮出願第60/334,23
4号(HP整理番号:10011521−1)の優先権
を主張するものであり、このすべてを参照により本明細
書に援用する。
【0002】
【発明の属する技術分野】本開示は、概して、ホストコ
ンピュータシステム上で元のコンピュータシステムをエ
ミュレートすることに関する。特に、本開示は、エミュ
レートされるコードとネイティブコードとを統合するシ
ステムおよび方法に関する。
【0003】
【従来の技術】オペレーティングシステムソフトウェア
およびユーザアプリケーションソフトウェアは、所与の
タイプのコンピュータシステム上で実行されるように書
かれる。すなわち、ソフトウェアは、コンピュータシス
テムにおける特定の命令セット、すなわちシステムが認
識し実行可能な命令セットに対応するように書かれる。
ソフトウェアは、オペレーティングシステムを備えない
コンピュータシステム上で実行される場合には、コンピ
ュータシステムにおける特定のコンポーネントおよび/
または周辺機器のセットにも対応するように書かれなけ
ればならない。
【0004】コンピュータハードウェア(たとえば、マ
イクロプロセッサ)およびその命令セットは、通常は向
上したパフォーマンスを提供するためにしばしばアップ
グレードされ、変更される。不都合なことに、コンピュ
ータハードウェアをアップグレードまたは交換すると、
相当なコストおよび努力を費して作成される既存のソフ
トウェアが旧式になることが多い。具体的には、ソフト
ウェアは、元のハードウェアの命令セットについて書か
れているため、新しいホストハードウェアが理解しない
命令を含む。
【0005】現在、上記問題に対処するために、様々な
解決策が用いられている。1つのこのような解決策は、
旧式になったコンピュータハードウェアをアップグレー
ドされたハードウェアと交換せずに維持するというもの
である。この代替策は、いくつかの理由から魅力的では
ない。第1に、このように旧式のハードウェアの維持に
はかなりの費用および努力を費やすことが必要とされ
る。第2に、新しいハードウェアがより強力である場
合、旧式のハードウェアを交換しないことは、コンピュ
ータシステムの場合によっては重要なパフォーマンス向
上を捨てることに等しい。
【0006】問題に対するさらなる解決策であって、か
つ最も一般的な解決策は、土台をなすハードウェアが交
換される都度、すべてのソフトウェアを単純に交換する
というものである。しかし、このような試みに求められ
る費用および努力、ならびに新しいソフトウェアを使用
する旧式ソフトウェアユーザのトレーニングに関連する
習熟曲線を考慮すると、この解決策も同様に魅力的では
ない。
【0007】問題に対する別の、ありうる解決策は、元
のソフトウェアを新しいホストシステム上で実行するこ
とのできる仮想マシン環境を提供するというものであ
る。この解決策は、旧式のハードウェアを維持する必要
もなければ元のソフトウェアを完全に交換する必要もな
いという利点を有する。しかし、不都合なことに、現在
のエミュレーションシステムは、元のハードウェアの各
アクションをエミュレートすることに関連する複雑性に
より、ハードウェアエミュレーションを現実世界のソフ
トウェアアプリケーションに提供する資源を欠く。たと
えば、オペレーティングシステムなど実際のプログラム
についてコンピュータシステムをエミュレートするに
は、エミュレーションシステムが、例外および割り込み
等発生し得る非同期のイベントを処理可能でなければな
らない。さらに、現在のシステムは高度にカスタマイズ
されており(たとえば、ポイントソリューション)、し
たがってプラットフォーム依存型である。
【0008】
【発明が解決しようとする課題】上記から、改良された
エミュレーションシステムを有することが望ましいこと
を理解することができる。
【0009】
【課題を解決するための手段】本開示は、エミュレート
されるコードとネイティブコードとを統合するシステム
および方法に関する。一実施形態は、ホストコンピュー
タシステム上で元のコンピュータシステムからのコード
をエミュレートする方法を含む。手短に述べると、1つ
のこのような実施形態は、ホストコンピュータシステム
上でエミュレートすべきプログラムコードに関連するプ
ログラム命令をフェッチするステップと、プログラム命
令をホストコンピュータシステム上でネイティブに実行
すべきか、それともホストコンピュータシステム上でエ
ミュレートすべきかを決定するステップと、プログラム
命令をホストコンピュータシステム上でネイティブに実
行すべき場合、プログラム命令に関連するネイティブコ
ードフラグメントを動的実行レイヤインタフェースに放
出して実行するステップとを含む。
【0010】別の実施形態は、コンピュータ読み取り可
能媒体で具現化され、プログラムが書かれた元のコンピ
ュータシステムをエミュレートするように構成されるエ
ミュレーションプログラムを含む。手短に述べると、1
つのこのような実施形態は、ホストコンピュータシステ
ム上でエミュレートすべきプログラムコードに関連する
プログラム命令をフェッチするように構成されるロジッ
クと、プログラム命令をホストコンピュータシステム上
でネイティブに実行すべきか、それともホストコンピュ
ータシステム上でエミュレートすべきかを決定するよう
に構成されるロジックと、プログラム命令をホストコン
ピュータシステム上でネイティブに実行すべき場合、プ
ログラム命令に関連するネイティブコードフラグメント
を動的実行レイヤインタフェースに放出して実行するよ
うに構成されるロジックと、を含む。
【0011】本発明の別の実施形態は、ホストコンピュ
ータシステム上で元のコンピュータシステムからのコー
ドをエミュレートするシステムを含む。手短に述べる
と、アーキテクチャにおいて、1つのこのようなシステ
ムは、エミュレータと、動的実行レイヤインタフェース
と、エミュレータと動的実行レイヤインタフェースをリ
ンクするアプリケーションプログラムインタフェースと
を備える。エミュレータは、元のコンピュータシステム
上で実行するように書かれたプログラムに関連する命令
をフェッチするように構成することができる。エミュレ
ータは、元のコンピュータシステムをエミュレートする
ことによって命令を実行するように構成されるエミュレ
ーションモジュールと、エミュレートされるのではなく
ネイティブに実行すべき命令を検出するように構成され
るネイティブコードインタセプタモジュールとを含むこ
とができる。動的実行レイヤインタフェースは、コード
フラグメントをキャッシュし実行することのできる少な
くとも1つのコードキャッシュを有するコアを含む。
【0012】添付の図面を参照することで本発明をより
よく理解することができる。
【0013】
【発明の実施の形態】仮想マシン環境においてエミュレ
ートされるコードとネイティブコードを統合するシステ
ムおよび方法を開示する。以下に説明するように、ネイ
ティブコードとエミュレートすべきコードとの統合は、
アプリケーションプログラムインタフェース(API)
を介して利用される動的実行レイヤインタフェースを使
用して促進される。本発明のシステムおよび方法の説明
を容易にするために、システム例について図を参照して
考察する。これらシステムについて詳細に説明するが、
これらは例示目的のみのために提供されるものであり、
本発明の概念から逸脱せずに様々な変更を行い得ること
が理解されよう。システムの説明後、システムの動作例
を提供して、システムエミュレーションを促進すること
のできる方法について説明する。
【0014】図1および図2を参照して、仮想マシン環
境においてネイティブコードとエミュレートされるコー
ドを統合するように構成される、本発明によるエミュレ
ーションシステム100の実施形態について説明する。
より詳細に後述するように、概して、エミュレーション
システム100は、仮想マシン環境において元のコンピ
ュータシステムをエミュレートすることにより、ホスト
コンピュータシステムとは異なるコンピュータシステム
用に書かれたソフトウェアを実行するように構成され
る。背景として、元のコンピュータシステムすなわち
“エミュレートされるシステム”は、1つのタイプの命
令セットアーキテクチャ(ISA)を有するマイクロプ
ロセッサ等のプロセッサを備えることができ、ホストコ
ンピュータシステムすなわち“ネイティブシステム”は
別のタイプのISAを有する、異なるプロセッサを備え
ることができる。プロセッサのISAは概して、特定の
タイプのプロセッサがソフトウェア命令を実行するため
に実行するバイナリ命令コードのセットまたはシーケン
スを指す。エミュレートされるシステム用に書かれるソ
フトウェアは“エミュレートされるコード”と呼ばれ、
ネイティブシステム用に書かれるソフトウェアは“ネイ
ティブコード”と呼ばれる。ネイティブシステム上でエ
ミュレートされるコードを実行するために、エミュレー
ションシステムは、仮想マシン環境と呼ばれるものを実
施するように採用することができる。
【0015】重要なことに、エミュレーションシステム
100は、エミュレートされるコードと統合されるネイ
ティブコードを実行するようにも構成される。図1に示
す実施形態では、エミュレーションシステム100は、
エミュレータ102と、動的実行レイヤインタフェース
(DELI)104と、ハードウェア106と、を備え
る。エミュレータ102は、インタフェース114を介
してDELI104に、インタフェース112を介して
ハードウェア106に、そしてインタフェース120を
介してエミュレートされるアプリケーション122およ
び/またはエミュレートされるオペレーティングシステ
ム124にリンクされる。DELI104は、インタフ
ェース115を介してハードウェア106にリンクされ
る。
【0016】一般に、DELI104は、ハードウェア
からアプリケーションバイナリコードを解放するよう
に、オペレーティングシステム(O/S)を含むかまた
は含まないアプリケーション(すなわち、エミュレータ
102)とハードウェアとの間に存在する高水準または
低水準言語で書かれた汎用ソフトウェアレイヤを備え
る。この構成を通して、DELI104は、エミュレー
ション、動的変換および最適化、トランスペアレントリ
モートコード実行、仮想化されたハードウェア環境プロ
グラムについてのコンピュータシステム機能(functiona
lity)の再マッピング、コード解凍、コード解読等、広
範な異なるアプリケーションで使用可能な動的コンピュ
ータプログラムコード変換、キャッシング、およびリン
キングサービスを提供することができる。より詳細に後
述するように、DELI104は、トランスペアレント
モード、非トランスペアレントモード、またはこれら2
つの組み合わせで動作している間にサービスを提供する
ことができる。トランスペアレントモードにおいて、D
ELI104は、実行中のプログラムが、コンピュータ
ハードウェア上で直接実行されていないことに気付かな
いように実行プログラムの制御を自動的に行う。非トラ
ンスペアレントモードでは、DELI104は、アプリ
ケーションプログラムインタフェース(API)を通し
てサービスをアプリケーション(クライアント)にエク
スポートして、どのようにDELI104が特定のシス
テムイベントに対して反応するかをアプリケーションが
制御できるようにする。
【0017】エミュレータ102は、ネイティブコード
インタセプタモジュール106およびエミュレーション
モジュール110を含む。一般的に、エミュレーション
モジュール110はエミュレートされるシステムのハー
ドウェアをエミュレートする。したがって、エミュレー
ションモジュール110は、エミュレーションシステム
100によって実行されるプログラムの観点から、元の
ハードウェアがプログラムをネイティブに実行する間に
実行するであろうすべてのアクションを実行する。当業
者は、エミュレーションモジュール110を様々なやり
方で構成し得ることを理解しよう。たとえば、エミュレ
ーションモジュール110は、エミュレーション機能、
インタプリタ機能、エミュレータ/トランスレータ機
能、および/またはジャストインタイム(JIT)コン
パイラの任意の組み合わせで実施することができる。し
たがって、エミュレーションモジュール110はインタ
プリタを実施して、エミュレートされるシステムのエミ
ュレーションを提供し得る。当業者には概して既知であ
るように、インタプリタはコードを受信し、コードに関
連する、土台をなすセマンティックスを決定することに
よってコードを解釈し、セマンティック・アクションを
実行する。エミュレータ/インタプリタ機能は、元のシ
ステムを適宜エミュレートするために必要な元のシステ
ムハードウェア(すなわち、エミュレート中の)の命令
セットについての情報を含む元のシステム記述を含み得
る。
【0018】JITコンパイラは、ソフトウェアのラン
タイムコンパイル(すなわち、変換)を提供するように
構成される。特に、JITコンパイラは、実行すべきプ
ログラムのバイナリ変換を提供する。動作する際、JI
Tコンパイラは、プログラム表現を受信し、ホストコン
ピュータシステムのターゲットハードウェア用の同等の
プログラム(すなわち、同じセマンティック機能を有す
るもの)に変換する。エミュレータ/インタプリタ機能
と同様に、JITコンパイラは、元のシステムハードウ
ェアの命令セットについての情報を含むシステム記述を
含む。しかし、システム記述は、JITコンパイラがコ
ードを所望の形態に適宜変換するために必要な情報を含
む。
【0019】より詳細に後述するように、ネイティブコ
ードインタセプタモジュール108は、エミュレートさ
れるコード116内に挿入されているネイティブコード
118を検出すると共に、エミュレーションする必要な
くハードウェア106上でネイティブコード118を実
行するように構成される。図2は、エミュレーションシ
ステム100の大まかな動作を示す流れ図である。ブロ
ック200に示すように、エミュレーションシステム1
00は、ネイティブコード118を含むエミュレートさ
れるコード116に対応する命令をフェッチする。決定
ブロック202において、エミュレーションシステム1
00は、特定のフェッチされた命令がハードウェア10
6上でネイティブに実行すべきコードに対応するかどう
かを決定する。換言すれば、エミュレーションシステム
100はネイティブコード118を検出するように構成
される。フェッチされた命令がエミュレートするコード
116に対応する場合、ブロック204において、エミ
ュレーションシステム100がそのコードをエミュレー
トする。しかし、エミュレーションシステム100がネ
イティブコード118を検出する場合は、ブロック20
6において、コードがエミュレーション、解釈、変換な
どを経ることなくハードウェア106上でネイティブに
実行される。DELI104を介してネイティブコード
118を実行することもできる。
【0020】ネイティブコード118と呼ぶが、ネイテ
ィブコード118は実行すべき実際のネイティブコード
を含む必要はないことが理解されよう。より詳細に後述
するように、ネイティブコード118は、ネイティブコ
ードインタセプタモジュール108が指定したネイティ
ブコード118をネイティブに実行すべきことを決定す
ることができるように適合される“特別な”命令(たと
えば、エミュレートされるシステムにおける違法な命
令)を含み得る。たとえば、この機能は、ラッパ機能、
ネイティブライブラリ、および/またはネイティブシス
テムおよびエミュレートされるシステムに関連する呼び
出し規定を橋渡しするように構成されるインタフェース
を使用して実施することができる。当業者は、他の様々
な既知のまたは後に開発されるプログラミング規則を実
施し得ることを理解しよう。たとえば、エミュレートさ
れるシステム用の既存のコンパイラツールチェインを、
ネイティブシステム用の既存のコンパイラツールチェイ
ンと統合することができる。このように、双方の場合に
おいて、ポストプロセッサが、ある規定(RTAすなわ
ちランタイムアーキテクチャとしても知られる)を別の
規定に変換するラッパを生成することができる。アプリ
ケーションプログラマは、たとえば、ハードウェア10
6上でネイティブに実行すべきアプリケーションプログ
ラムの特定の部分を指定することができる。ハードウェ
ア106上でネイティブにコンピュータプログラムの特
定の部分を実行するほうがパフォーマンス目的のために
は有利であり得る。
【0021】ネイティブハードウェア106が、特定種
類のアプリケーションを実行するにあたり非常に効率的
であり、エミュレートされるシステムよりも高速で、か
つ/または対応するコードのエミュレート、解釈、およ
び/または変換よりも高速である状況を考える。例とし
て、エミュレートされるアプリケーションは、ビデオプ
レーヤ等媒体ベースのアプリケーションを含むことがで
きる。このタイプのアプリケーションでは、非常に複雑
なフロントエンドグラフィカルユーザインタフェース
(GUI)が馴染みのあるプログラミング環境(すなわ
ち、SDK)に書き込まれることがあるが、アプリケー
ションの媒体処理部分がネイティブハードウェア106
と直接協働するように書かれる場合がある。換言すれ
ば、アプリケーションのGUI部分はエミュレートされ
るコード116として書かれ、エミュレートされるコー
ドと統合されるネイティブコード118として媒体処理
部分が書かれ得る場合がある。媒体ベースのアプリケー
ションがエミュレーションシステム100によって実行
される際に、GUIベースのコード(エミュレートされ
るコード116)はハードウェア106上でエミュレー
トされて実行され、媒体処理コードはネイティブに実行
される。
【0022】図3は、仮想マシン環境においてネイティ
ブコードとエミュレートされるコードを統合する本発明
によるエミュレーションシステム300の別の実施形態
のより詳細なブロック図である。図3に示すように、エ
ミュレーションシステム300は、元のシステム環境3
01(エミュレートされる環境)と、ホストシステム環
境302(ネイティブな環境)と、DELI104と、
ハードウェア106とを備える。エミュレートされる環
境301は、インタフェース114を介してDELI1
04に、またインタフェース112を介してハードウェ
ア106にリンクされる。ネイティブな環境302は、
インタフェース308を介してDELI104に、また
インタフェース310を介してハードウェア106にリ
ンクされる。したがって、ネイティブな環境302およ
びエミュレートされる環境301は、ハードウェア10
6上で関連コードを直接、あるいはDELI104にお
けるアプリケーションプログラムインタフェースを介し
て実行し得る。
【0023】上述したように、特定の実施形態では、エ
ミュレーションモジュール110はインタプリタを実装
してエミュレートされるシステムのエミュレーションを
提供することができる。当業者には概して既知であるよ
うに、インタプリタはコードを受信し、コードに関連す
る、土台をなすセマンティックスを決定することによっ
てコードを解釈し、セマンティック・アクションを実行
する。エミュレータ/インタプリタ機能は、元のシステ
ムを適宜エミュレートするために必要な元のシステムハ
ードウェア(すなわち、エミュレート中の)の命令セッ
トについての情報を含む元のシステム記述を含み得る。
【0024】一般に、インタプリタ/エミュレータ機能
は、エミュレーションシステム300上で実行されるソ
フトウェア(たとえば、プログラム)が書かれた対象で
ある元のコンピュータシステムのハードウェアをエミュ
レートする。したがって、インタプリタ/エミュレータ
機能は、エミュレーションシステム300によって実行
されるプログラムの観点から、元のハードウェアがプロ
グラムをネイティブに実行する間に実行するであろうす
べてのアクションを実行する。
【0025】名称から示唆されるように、インタプリタ
/エミュレータ機能は、インタプリタを実装して、元の
コンピュータシステムのエミュレーションを提供する。
当業者には概して既知であるように、インタプリタはコ
ードを受信し、コードに関連する、土台をなすセマンテ
ィックスを決定することによってコードを解釈し、セマ
ンティック・アクションを実行する。当業者には既知で
あるように、インタプリタ/エミュレータ機能は通常、
元のシステムを適宜エミュレートするために必要な元の
システムハードウェア(すなわち、エミュレート中の)
の命令セットについての情報を含む元のシステム記述を
含む。エミュレーションモジュール110はインタプリ
タ/エミュレータを実施し得るが、他の実施形態では、
エミュレーションモジュール110はトランスレータ/
エミュレータ等異なるタイプのエミュレータを含み得る
ことを理解されたい。さらに、エミュレーションシステ
ム300がこの機能を提供可能なJITコンパイラを含
んでもよいことを理解されたい。
【0026】これら実施形態では、インタプリタ/エミ
ュレータ機能は、インタフェースを使用してJITコン
パイラにリンクすることができる。名称から示唆される
ように、JITコンパイラは、ソフトウェアのランタイ
ムコンパイル(すなわち、変換)を提供するように構成
される。特に、JITコンパイラは、実行すべきプログ
ラムのバイナリ変換を提供する。動作する際、JITコ
ンパイラは、プログラム表現を受信し、ホストコンピュ
ータシステムのターゲットハードウェア用の同等のプロ
グラム(すなわち、同じセマンティック機能を有するも
の)に変換する。インタプリタ/エミュレータ機能と同
様に、JITコンパイラは、元のシステムハードウェア
の命令セットについての情報を含むシステム記述を含
む。しかし、システム記述は、JITコンパイラがコー
ドを所望の形態に適宜変換するために必要な情報を含
む。JITコンパイラ104は、システム記述に加え
て、後述するようにたとえばJITコンパイラに特定の
イベントの発生について通知するために、DELI10
4がコールバックメソッドをJITコンパイラに呼び出
せるようにするランタイムマネージャを含むことができ
る。このようなコールバックメソッドが呼び出される
と、ランタイムマネージャを使用してコールバックメソ
ッドを実施する。
【0027】エミュレートされるコード116のエミュ
レートを行うためにエミュレータ102が採用する特定
の方法に関係なく、エミュレータ102はAPIを使用
してDELI104にリンクされる。このAPIは、エ
ミュレータ102とDELI104の間の通信を促進す
る。したがって、エミュレータ102は、APIを使用
して、たとえば、DELI104のコードキャッシング
およびリンキングサービスにアクセスすることができ、
また、DELIがAPIを使用してコールバックメソッ
ドをエミュレータ102に呼び出すことができる。再び
図3を参照すると、DELI104は、アプリケーショ
ンプログラミングインタフェース(API)マネージャ
212、ホストシステム記述214、および最適化マネ
ージャ216を含むことができる。ホストシステム記述
214は、ハードウェア、命令セット等、ホストコンピ
ュータシステムについてDELI104が必要な情報を
含む。APIマネージャ212および最適化マネージャ
216の動作については、詳細に後述する。
【0028】図3には示していないが、エミュレーショ
ンシステム300は、エミュレートすべきコードのエミ
ュレーションを助けるために、ハードウェア抽象化モジ
ュール(HAM)を含むことができる。HAMの構成お
よび動作の詳細は本開示に特に関連しないため、HAM
の詳細な説明は本明細書において提供しない。しかし、
HAMは概して、ホストコンピュータシステム上で行わ
れ、かつホストコンピュータシステム上でエミュレート
すべき元のコンピュータシステムのコンテキストにおい
てコードの実行に関連するハードウェア関連イベント
(たとえば、例外および割り込み)を管理するように構
成されると言えば十分であろう。HAMのサービスは、
APIを介してDELI104が利用可能である。
【0029】システム300の大まかな構成について上
述したが、次に、図4A〜図4Cに関連してシステムの
動作例を提供する。図4Aのブロック400で開始さ
れ、エミュレートされるコード116に関連する1つま
たは複数のプログラム命令がまず、メモリからエミュレ
ータ102によってフェッチされる。これは、元のコン
ピュータシステムから元のメモリアドレスにアクセス
し、そのメモリアドレスを使用して、ホストコンピュー
タシステム上の命令(複数可)の実際のロケーションを
識別することを含み得る。
【0030】決定要素402を参照すると、エミュレー
ションシステム300は、フェッチした命令(複数可)
がエミュレートされるコード116に統合されたネイテ
ィブコード118に対応するかどうかを決定する。当業
者は、ネイティブコード118を検出するために、エミ
ュレーションシステム300が様々な既知のかつ/また
は後に開発されるプログラミング技術のいずれをも実施
し得ることを理解しよう。たとえば、この機能は、ラッ
パ機能、ネイティブライブラリ、および/またはネイテ
ィブシステムおよびエミュレートされるシステムに関連
する呼び出し規定を橋渡しするように構成されるインタ
フェースを使用して実施することができる。
【0031】例として、元のコンピュータシステム(エ
ミュレートされるシステム)がコンパイラツールチェイ
ンを含む状況を考える。この状況では、エミュレートさ
れるシステム300が、エミュレートされるシステムか
らのコンパイラツールチェインと統合し得るネイティブ
コンパイラツールチェインを含み得る。この統合される
ツールチェインは、エミュレートされるシステムとネイ
ティブシステムの間を通信可能にするインタフェースま
たは規定を提供するように構成することができる。たと
えば、エミュレートされるシステムによりプログラム
(「Main」)において呼び出され、エミュレートさ
れるコード116に埋め込まれる特定の関数(「Fo
o」)を、エミュレーションをサポートするホスト(ネ
イティブシステム)上でより効率的にネイティブに実施
することができる状況を考える。プログラムMainの
例示的な例は以下のように表現される。
【0032】 Main() { /*エミュレートされる元のシステム用のコンパイルされるコード*/ … … … Foo(parameters list); ……… …… …… } エミュレートされるシステムコンパイラは、明確に定義
された呼び出し規定を使用することで、このコードをコ
ンパイルしてエミュレートされるシステムのプロセッサ
用の一連の命令にすることができる。呼び出し規定は、
特に、関数へのパラメータの渡し方(たとえば、レジス
タにおいて、スタックにおいて、レジスタおよびスタッ
クの組み合わせを介してなど)を指定することができ
る。例示的なコンパイルされたコードの例は以下のよう
に表し得る。
【0033】_Main: #エミュレートされる元のシステム用のマシン命令 … … … call prolog instructions関数(たとえば、エミュレー
トされるシステム上の呼び出し規定に指定されるように
特定のレジスタにおける関数パラメータをセットアッ
プ、またはそれらをスタックにロード) Call_Foo call epilog instructions関数(たとえば、エミュレー
トされるシステム上の呼び出し規定に指定されるように
特定のレジスタにリターンパラメータをロード、または
スタックからロード) … … } 通常、関数Fooがエミュレートされるシステムのため
にコンパイルされている場合には、以下のように表し得
るマシン命令セットを含む。
【0034】_Foo: { prolog instructions関数(たとえば、スタックポイン
タ増分、使用レジスタのスタックへの流出など) body instructions関数 epilog instructions関数(たとえば、戻り値の特定のレ
ジスタへのロード、先に流出されたレジスタの回復、ス
タックポインタの回復など) } 関数Fooをネイティブシステム用のネイティブにコン
パイルされる(したがって最適化される)コード片で置
換するため、2つの呼び出し規定(一方はエミュレート
されるシステムのものであり、他方はエミュレーション
をサポートするネイティブシステムのもの)間の橋渡し
を行うインタフェースを実施し得る。上述したように、
これは、一方の呼び出し規定を他方の呼び出し規定(お
よび必要であればこの逆)に変換するラッパ関数によっ
て達成することができる。たとえば、エミュレートされ
るコンパイラツールチェインを1つまたは複数のツール
を用いて拡張することができる(たとえば、ネイティブ
システム用にコンパイルし、エミュレートされるシステ
ムが呼び出す必要のある関数に関数ラッパを生成するよ
うに構成されるプリプロセッサ。
【0035】一実施形態では、ホストシステム上で実行
されているエミュレータ/トランスレータに、エミュレ
ートされるシステムにおいて他の場合には無意味な特別
な命令すなわち「標識」を使用することによって、エミ
ュレートされる環境からのエミュレートおよび/または
変換プロセス中に特別なアクションをとる必要性につい
て気付かせることができる(たとえば、未定義の命令コ
ード、実行が「違法」」な命令など)。特別な「標識」
と共に、ラッパは、エミュレートされるシステムからネ
イティブ関数に渡すべきパラメータおよびそのロケーシ
ョン(たとえば、レジスタまたはメモリ)を指定する記
述子ブロックを含み得る。この記述は、エミュレートさ
れるシステムツールチェインサポートを使用してこれま
たは他のことを行うことにより、データとしてエミュレ
ートされるコードに埋め込むことができる。たとえば、
エミュレートされるシステムツールチェインアセンブラ
(一般にアセンブルレベルコードをマシンオブジェクト
コードに変換するユーティリティ)が、プログラマが埋
め込み定数を定義できるようにする「.data」ディ
レクティブを有する場合を考える。以下は、関数Foo
の例示的な関数ラッパである。
【0036】_Foo: #.data違法命令#どの関数をネイティブに呼び出すべき
かをエミュレータ/ト #ランスレータに教える標識またはゲートウェイ #.data Native_Foo#ネイティブにコンパイルされたFo
oのアドレス #.data3#最初のパラメータの関数記述レコードに渡すパ
ラメータの数 #.data4#このパラメータのサイズ(たとえば、整数) #.data5#このパラメータを渡すために使用されるエミュ
レートされるシステム#のCPUにおけるレジスタのイ
ンデックス #.data x#呼び出し規定をホストシステムに変換するた
めにさらに必要な情報 #.data y #.data z #第2のパラメータの記述レコード … … … #最後のパラメータの記述レコードなど エミュレーションシステム300は、この方式を組み込
んで、2つの呼び出し規定を統合し、エミュレートされ
るシステムの知識をネイティブシステムの呼び出し規定
およびランタイムアーキテクチャから切り離すことがで
きる。
【0037】上述したラッパ関数では、コードを適宜変
換するためにネイティブシステムの呼び出しを記述する
レコードは、関数(たとえば「Native_Fo
o」)への参照を含み得る。関数への参照は、エミュレ
ートされるシステムからは正常なデータ(すなわち、メ
モリにおける広域変数ストレージと同様)に見えるスト
レージエリアをポイントするエイリアス(たとえば、デ
ータ参照など)であり得る。この機能はここでも、エミ
ュレートされるコンパイラツールチェインに統合される
簡易ツールによって達成することができる。ツールは、
関数がネイティブコンパイラによってネイティブにコン
パイルされた(たとえば、位置から独立した実行可能バ
イナリコードの形態で)場合に、コンパイルされたコー
ドが、エミュレートされるシステムリンカの1つのデー
タのようにパッケージされるように構成し得る。このよ
うにして、関数(Native_Foo)への参照を、
データへの他の任意の参照と略同じようにメモリ中のロ
ケーションで置換することができる。たとえば、ネイテ
ィブコンパイラツールチェインは、特に、ネイティブシ
ステム上でネイティブに実行可能な関数(たとえば、F
oo)を含む、位置から独立したバイナリを生成するこ
とができる。関数がコンパイルされ、バイナリファイル
(たとえば「foo.bin」)に配置された状況を考
える。エミュレートされるコンパイラツールチェイン用
に書かれたツールは、このバイナリをとり、以下のよう
に表される例示的なソースファイルを生成することがで
きる。
【0038】 Native_Foo[]={ /*foo.binからとられたネイティブ命令を使用してこのアレイを初期化 */ … … … … }; 次に、エミュレートされるコンパイラツールチェインに
よってこのファイルをコンパイルし、上述した関数ラッ
パと共に残りのアプリケーションにリンクすることがで
きる。このようにして、たとえば実行可能ファイルの形
態で、エミュレートされるシステムアプリケーションコ
ードまたはエミュレートされるコードと共にネイティブ
コードを格納することができる。さらに、エミュレート
されるシステムリンカは、その中に含まれるシンボルN
ative_Fooを解決することができる。
【0039】ネイティブコードを元のシステムコードに
埋め込み統合する他の方法を採用し得ることが理解され
よう。たとえば、別の実施形態では、別の標識命令を使
用して、標識に続く命令がネイティブシステムハードウ
ェア106上で実行する必要のあるネイティブ命令であ
ることをエミュレーションシステムに通知することがで
きる。これら実施形態では、エミュレータ102は、イ
ベントが再び制御をエミュレータ102に戻すなどのと
きまで、これら命令を実行することによってハードウェ
ア106の制御を解放することができる。このようなイ
ベントは、この目的のために確保されているホストコン
ピュータ上の特定のハードウェア機構として定義し得
る。たとえば、特定の実施形態では、制御をエミュレー
タ102に戻してエミュレーションプロセスを再開する
必要があるとき、元のシステムアプリケーション(エミ
ュレートされるコード)に埋め込まれるネイティブコー
ドは、違法な命令、ソフトウェアブレークポイント、ま
たはトラップ命令を使用することができる。
【0040】当業者は、ネイティブインタフェースへの
エミュレートは、ネイティブに実行されているホストシ
ステムから、エミュレートされるシステムにおけるコー
ドを呼び出すときに、わずかな変更で別の方向において
も作動し得ることを理解しよう。
【0041】エミュレートされるシステムメモリにネイ
ティブコードがアクセスする必要がある代替の実施形態
では、かかるメモリへのアクセスに起因して例外が発生
するとき、エミュレートされるシステムと互換性をもっ
て例外が解決されるようにさらなる注意を払い得る。さ
らに、(たとえば、エミュレートされるシステムにおい
て例外ハンドラコードをエミュレートすることにより)
例外イベント(複数可)が処理された後、例外イベント
(複数可)がトリガされたとき実行されていたネイティ
ブコードに制御を戻すことができる。
【0042】たとえば、エミュレートされるシステムが
仮想メモリを使用し、(たとえば、ハードウェアTLB
(変換ルックアサイドバッファ)を使用することによ
り)仮想メモリアドレスの物理メモリアドレスへのマッ
ピングが可能なことを考える。上述した機構を通してエ
ミュレートされるシステムコードから呼び出されたネイ
ティブ関数を実行する過程において、このようなコード
により、変換がエミュレーションされるシステムによっ
て提供されていないこともある仮想メモリにアクセスを
引き起こす。これは、正しく処理するために、エミュレ
ートされるシステムと同等の例外に変換する必要のある
変換の例外の欠落につながり得る。問題は、この状況を
作り出すネイティブコードはエミュレートされるシステ
ムコードから変換したものではないことである。そのた
め、エミュレートされる例外ハンドラのエミュレートさ
れるコードは、エミュレートされるシステムにとって適
切なコンテキストを渡すことはできない。これは、エミ
ュレートされる例外ハンドラの「プレースホルダ」とし
て使用し得るエミュレートされるシステムの代理コンテ
キストの「振りをする」ことによって解決することがで
きる。この機構は、たとえば、例外時にネイティブコン
テキストを保存し、例外状況が解決されて後に制御が戻
されるときのためにネイティブコンテキストを格納して
おくことによって実施し得る。加えて、複数のネストさ
れた例外がエミュレートされるシステムにおいて可能で
ある場合、ネイティブコンテキストの複数のコピーを保
存し、後に復元して再入(reentrancy、リエントラン
シ)を処理することができる。
【0043】図4Cを参照すると、エミュレーションシ
ステム300の動作中、エミュレータ102は、ブロッ
ク428において、特別な命令のフェッチを検出し、エ
ミュレートされるメモリに割り当てられるストレージに
ロードされる(たとえば、エミュレートされるO/Sに
よってエミュレートされるアプリケーションコードと共
にロードされる)Native_Fooコードへのネイ
ティブ関数呼び出しと共に、エミュレートされるシステ
ムからの呼び出し規定をネイティブシステムの呼び出し
規定に変換する特別なコードフラグメントを生成するこ
とができる。
【0044】決定ブロック430ならびにブロック43
2および434に表すように、特別なフラグメントをD
ELI104のコードキャッシュに放出して実行し、場
合によってはコードキャッシュ内においてすでにアクテ
ィブな他のフラグメントとリンクすることができる。D
ELI104の動作について詳細に後述する。特別なフ
ラグメント(Native_Foo関数への呼び出しを
含む)を実行する前に、エミュレーションシステム30
0はDELI104に対して呼び出しを行うこともでき
る。たとえば、DELI104への呼び出しは、コード
キャッシュにおいて、関数Native_Foo(およ
びこれによって呼び出される他のネイティブ関数)から
のネイティブのコードフラグメントを自動的に挿入する
ように、DELIのトランスペアレントモードをアクテ
ィブ化し得る。DELI104に挿入されるネイティブ
のコードフラグメントはまた、詳細に後述するようにD
ELI104によって最適化することができる。
【0045】図4Aを再び参照して、エミュレーション
システム300のエミュレーション部分について述べ
る。決定ブロック402において、フェッチした命令が
ネイティブコードに関係ない場合、エミュレーションモ
ジュール110は、エミュレーションシステム300
が、様々なプログラム命令を一緒にリンクすることによ
ってコードフラグメントを現在成長させているかどうか
を決定する。当分野では既知のように、このようなリン
キングは通常、コードの実行効率を増大するために行わ
れる。システムが現在コードフラグメントを成長させて
いない場合、たとえば、エミュレータ102がフラグメ
ントを成長させることができないマシン状態にある場
合、流れは後述する決定ブロック412に続く。一方、
システム300がコードフラグメントを成長させている
場合、流れは決定ブロック406に続き、(フェッチし
た命令(複数可)をフラグメントに追加することによ
り)エミュレータ102が、コードフラグメントを成長
させ続けるか、それともコードフラグメントの成長を停
止するかを決定する。この決定は、特定の内部基準を鑑
みて行われる。たとえば、エミュレータ102は、分岐
(すなわち、フロー制御命令)を含むコードの基本ブロ
ックが得られるまで、フラグメントを成長させるように
構成することができる。
【0046】フラグメントの成長を停止させない(すな
わち、フラグメントを成長させ続ける)とエミュレータ
102が決定する場合、流れはブロック410に続き、
フラグメントを成長させ、すなわち、フェッチしたプロ
グラム命令(複数可)が成長中のフラグメントに追加さ
れる。しかし、フラグメントの成長を停止するとエミュ
レータ102が決定した場合、流れはブロック408に
続き、既存のコードフラグメントを変換したものが、A
PIを介してDELI104のコードキャッシュに放出
される。このようなコードフラグメントをDELI10
4に放出することのできる方法についての詳細な説明
は、以下に提供する。その説明の中で述べられるよう
に、コードフラグメントは、DELI104にキャッシ
ュされると、元のコードのセマンティック機能が要求さ
れるとき、DELIコードキャッシュ(複数可)からネ
イティブに実行することができる。このような動作によ
り、セマンティック機能が要求される次のときに、元の
コードの変換に関連するオーバーヘッドが回避されると
いう点において、ホストコンピュータ上でプログラムを
実行する際の効率を大幅に向上させることができる。コ
ードフラグメントをコードキャッシュ(複数可)に放出
することに加えて、エミュレータ102は、元のプログ
ラム命令(複数可)を変換したものがすでにDELI1
04のコードキャッシュ(複数可)に存在することがわ
かるように、タグなどの識別子を使用して元の命令(複
数可)を放出されたフラグメントに関連付ける。コード
は、キャッシュされると、DELI104に提供される
様々なポリシーに従ってリンクすることができ、システ
ムの効率がさらに増大する。
【0047】フラグメントの成長を続けるかどうか、ま
たはコードフラグメントを変換したものを放出するかど
うかに関係なく、次に流れは決定ブロック412に進
み、エミュレーションシステム300が、フェッチした
命令(複数可)を変換したものがキャッシュされている
かどうか、すなわちDELI104のコードキャッシュ
内に含まれるかどうかを決定する。キャッシュされてい
る場合、実行はDELI104のコードキャッシュ(複
数可)にジャンプし、ブロック414に示すように、変
換されたコードフラグメントがネイティブに実行され
る。キャッシュに含まれていないコードへの参照(たと
えば、キャッシュミス)に直面するようなときまで、実
行はコードキャッシュ(複数可)において続けられる。
この時点で流れはブロック400に戻り、次のプログラ
ム命令(複数可)がフェッチされる。
【0048】決定ブロック412に戻り、フェッチした
命令を変換したものがまだキャッシュされていない場
合、流れは、図4Bに示すエミュレータ102に戻る。
決定ブロック416で開始され、エミュレータ102
が、ブロック400において行われた命令フェッチアク
ションにより、エミュレートされるシステムにおいて例
外を作成したであろうかどうかを決定する。例として、
このような例外は、命令(複数可)が配置されたメモリ
の部分にアクセスする許可がなかった場合に生じ得る。
この決定は、上述したシステム記述内に含まれる情報を
参照して行われる。このような例外が生じた場合、流れ
はブロック426に続き、元のコンピュータシステムに
よってとられたであろう例外アクション(複数可)が、
プログラムのために、エミュレータ102によってエミ
ュレートされる。
【0049】決定ブロック416において例外が生じな
かったと仮定すると、流れはブロック418に進み、フ
ェッチした命令(複数可)がエミュレータ102によっ
てデコードされる。概して、このアクションは、命令
(複数可)の性質、すなわち命令(複数可)の土台をな
すセマンティックスを解釈することを含む。次に、決定
ブロック420を参照すると、エミュレートされるコン
ピュータシステムで例外が発生したであろうかどうかを
再び決定することができる。特に、命令(複数可)が元
のシステムにおいて違法であったかどうかが決定され
る。例外が発生したであろうという場合、流れはブロッ
ク426に進み、元のコンピュータシステムによってと
られたであろう例外アクションがエミュレートされる。
しかし、例外が発生していなかったであろうという場
合、流れはブロック422に続き、フェッチした命令
(複数可)のセマンティックスがエミュレータ102に
よって実行され、エミュレートされるコンピュータシス
テムによる命令(複数可)の実際の実行をエミュレート
する。この時点において、決定ブロック424を参照す
ると、エミュレートされるシステムにおいて例外が生じ
たであろうかどうかを再び決定することができる。特
に、エミュレートされるシステムにおいて命令の実行
(複数可)が違法であったであろうかどうかを決定する
ことができる。例外が発生したであろう場合、流れはブ
ロック426に続く。しかし、例外が発生しなかったで
あろう場合、流れはブロック400に進み、1つまたは
複数の新しいプログラム命令がフェッチされる。
【0050】特に、システム300の動作の初期段階に
おいて、すなわちエミュレーションがまずプログラムに
提供されるとき、DELI104のコードキャッシュ
(複数可)内に存在する(すなわち、コードキャッシュ
に放出された)コードはほんのわずかであるかもしくは
ないため、殆どの実行はエミュレータ102によって行
われる。しかし、比較的少ない時間内に、放出ステップ
(ブロック408)により、全部ではないとしても殆ど
の実行がDELI104のコードキャッシュ(複数可)
内で行われる。コードキャッシュ(複数可)内でコード
をネイティブに実行することにより、(すでに実行され
ているため)解釈およびエミュレートに関連するオーバ
ーヘッドが回避され、これによってエミュレーションの
効率が大幅に増大する。
【0051】上述したように、エミュレーションの効率
および/またはネイティブコード実行効率は、DELI
104を設けることによって大幅に増大する。図5は、
DELI104の構成例を示す。概して、DELI10
4は、ハードウェアからアプリケーションバイナリコー
ドを解放するように、オペレーティングシステム(O/
S)を含むかまたは含まないアプリケーションとハード
ウェアとの間に存在する高水準または低水準言語で書か
れた汎用ソフトウェアレイヤを備える。この構成を通し
て、DELI104は、エミュレーション、動的変換お
よび最適化、トランスペアレントリモートコード実行、
仮想化されたハードウェア環境プログラムについてのコ
ンピュータシステム機能の再マッピング、コード解凍、
コード解読等、広範な異なるアプリケーションで使用可
能な動的コンピュータプログラムコード変形、キャッシ
ング、およびリンキングサービスを提供することができ
る。概して、DELI104は、トランスペアレントモ
ード、非トランスペアレントモード、またはこれら2つ
の組み合わせで動作している間にサービスを提供するこ
とができる。トランスペアレントモードにおいて、DE
LI104は、実行中のプログラムが、DELI104
がコンピュータハードウェア上で直接実行されていない
ことに気付かないように実行プログラムの制御を自動的
に行う。非トランスペアレントモードでは、DELI1
04は、API508を通してサービスをエミュレータ
102等のアプリケーション(クライアント)にエクス
ポートして、どのようにDELIが特定のシステムイベ
ントに対して反応するかをアプリケーションが制御でき
るようにする。
【0052】図5に示すように、DELI104は、少
なくとも1つのアプリケーション(プログラム)とネイ
ティブシステムのコンピュータハードウェア106の間
に常駐する。アプリケーションは、エミュレート中の元
のコンピュータシステム用に書かれているため、DEL
Iの存在に気付かない。アプリケーションの下にはクラ
イアントが存在し、この場合クライアントは、エミュレ
ータ102を備える。クライアントは、アプリケーショ
ンと異なり、DELI104に気付いており、DELI
104のサービスを利用するように構成される。
【0053】DELI104は、コア506と、API
マネージャ212と、トランスペアレントモードレイヤ
510と、システム制御および構成レイヤ512とを含
む4つの主要なコンポーネントを含むことができる。概
して、コア506は、2つの主要なサービスをAPIマ
ネージャ122(ひいてはAPI508)およびトラン
スペアレントモードレイヤ510の双方にエクスポート
する。これらサービスのうち第1のサービスは、ネイテ
ィブのコードフラグメント、またはハードウェア106
の命令セットに対応するコードフラグメントのキャッシ
ングおよびリンキングに関連する。第2のサービスは、
先にキャッシュされたコードフラグメントの実行に関す
る。APIマネージャ212は、非トランスペアレント
動作モードにおいて、コア506のキャッシングおよび
リンキングサービスへのアクセスを提供するクライアン
ト(たとえば、エミュレータ102)に機能をエクスポ
ートする。トランスペアレントモードレイヤ510は、
設けられる場合、コア506が、トランスペアレント動
作モードにおいてコード実行に対する制御をトランスペ
アレントに獲得すると共に、キャッシュすべきコードフ
ラグメントをフェッチできるようにする。最後に、シス
テム制御および構成レイヤ512は、たとえば、コード
のキャッシング、リンキング、および最適化についての
ポリシーを含めたコア506の動作についてのポリシー
を提供することにより、DELI104の構成を可能に
する。たとえば、これらポリシーは、APIマネージャ
212を介してクライアントからレイヤ512に提供す
ることができる。システム制御および構成レイヤ512
はまた、DELI104のトランスペアレントモードが
イネーブルされるかどうかも制御し、したがって、コア
506がAPIマネージャ212から、トランスペアレ
ントモードレイヤ510から、それともこれら双方から
入力を受信したかどうかを決定する。図5にさらに示さ
れるように、システム300は、所望の場合、アプリケ
ーションをハードウェア104上で直接実行することが
できるように、DELI104をバイパスするようにア
プリケーションが使用することのできるバイパスパス1
12を備えることができる。
【0054】図5に示すように、コア506は、コアコ
ントローラ516、キャッシュマネージャ518、フラ
グメントマネージャ520、および最適化マネージャ2
16(図3)を含む。コアコントローラ516は、タス
クを遂行する責任を負うコア506のその他のコンポー
ネントにタスクを割り当てるディスパッチャとして機能
する。キャッシュマネージャ518は、フラグメントマ
ネージャ520および最適化マネージャ216と同様
に、システム制御および構成レイヤ512によって指定
されるポリシーに従って、1つまたは複数のコードキャ
ッシュ524(たとえば、キャッシュ1〜n)内のコー
ドフラグメントのキャッシングを制御する機構(たとえ
ば、アルゴリズムのセット)を含む。たとえば、コア5
06の1つまたは複数のコードキャッシュ524は、ハ
ードウェア106の1つまたは複数のプロセッサ上のハ
ードウェアキャッシュにあることもでき、また、ハード
ウェアのメインローカルメモリ内に作成することもでき
る。コードキャッシュ524がプロセッサ上のハードウ
ェアキャッシュにマッピングされる場合、命令キャッシ
ュ補充オーバーヘッドの低減、メモリ帯域の増大等によ
り、大幅に増大したパフォーマンスを得ることができ
る。フラグメントマネージャ520は、コードキャッシ
ュ524内のコードフラグメントの構成およびフラグメ
ントに課す変換のタイプを指定する。最後に、最適化マ
ネージャ216は、実行最適化のためにコードフラグメ
ントに適用することのできる最適化のセットを含む。
【0055】上述したように、APIマネージャ212
は、DELIサービスへのアクセスを提供するアプリケ
ーションに関数をエクスポートする。より具体的には、
APIマネージャ212は、API508を介してコア
506のキャッシングおよびリンキングサービスをクラ
イアント(たとえば、エミュレータ102)にエクスポ
ートする。これらエクスポートされるサービスは、たと
えば、キャッシングのためにコードフラグメントをコア
506に明示的に放出し、コードキャッシュ524から
特定のコードフラグメントを実行するようにDELI1
04に命令することにより、クライアントが、非トラン
スペアレントモードにおいてDELI104の動作を制
御できるようにする。加えて、APIマネージャ212
はまた、DELI104の動作を開始、停止する機能を
エクスポートすることもできる。たとえば、APIマネ
ージャ212は、DELI104のトランスペアレント
動作を開始し、さらに、DELIがいつその動作を停止
すべきかを指示することができる。さらに、APIマネ
ージャ212はまた、上述したように、クライアントに
よって指定されるポリシーをコア506(たとえば、フ
ラグメントマネージャ520および/または最適化マネ
ージャ216)に送ることによって、DELI104の
構成を促進する。
【0056】図5をさらに参照して、トランスペアレン
トモードレイヤ510は、通常、アプリケーションに対
する制御をトランスペアレントに得るために使用される
インジェクタ526を含むことができる。DELI10
4が完全なトランスペアレントモードで動作する場合、
インジェクタ526を使用して、アプリケーションをD
ELIの制御下で実行することができるように、アプリ
ケーションの実行を開始する前に、DELIをアプリケ
ーションに注入する。インジェクタ526は、バイナリ
がロードされる仮想アドレスを変更することなく、アプ
リケーションバイナリをそれぞれロードするいくつかの
異なる方法で制御を得ることができる。これら方法の例
は、2001年8月8日付けで出願された「Dynamic Ex
ecutionLayer Interface for Explicitly of Transpare
ntly Executing Application orSystem Binaries」(代
理人整理番号10011525−1)と題する米国特許
出願第09/924,260号に記載されており、この
特許出願を参照により本開示に援用する。しかし、エミ
ュレーションの文脈では、クライアントがDELIのサ
ービスを明示的に使用するように構成されるため、この
ように完全なトランスペアレント動作は通常使用されな
い。
【0057】上述したように、システム制御および構成
レイヤ512は、コードのキャッシングおよびリンキン
グなどの様々なアクションについてのポリシーを提供す
ることによってDELI104の構成を可能にする。よ
り一般的に、ポリシーは通常、DELI104がどのよ
うに振る舞うかを決定する。たとえば、レイヤ512
は、コードフラグメントをアプリケーションからどのよ
うに抽出するか、フラグメントを元のコードからどのよ
うにして作成するか、複数のコードフラグメントをどの
ように共にリンクしてより大きなコードフラグメントを
形成することができるか等についてのポリシーを提供し
得る。レイヤのポリシーは、静的であってもまた動的で
あってもよい。前者の場合、ポリシーをDELI104
にハードコードし、構築時に構成を固定することができ
る。後者の場合、ポリシーをAPI508における関数
呼び出しを通してクライアントによって動的に提供する
ことができる。ポリシーの実施は、DELI104が特
定のシステムおよび/またはハードウェアイベント(た
とえば、例外および割り込み)に反応する仕方を制御す
ることができる。上述したポリシーに加えて、システム
制御および構成レイヤ512は、コードキャッシュ52
4のサイズ、ログファイルを作成するかどうか、コード
フラグメントを最適化すべきかどうか等を指定すること
ができる。
【0058】図6は、コア506の構成および動作の例
を示す。図6に示すように、コア506は、主要な2つ
のタイプの要求をAPIマネージャ212またはトラン
スペアレントモードレイヤ510から受け入れる。ま
ず、関数インタフェースを通してコードフラグメントを
キャッシュしリンクする要求600を受け入れることが
できる。このような要求は、最も基本的な形態では、た
とえば、“Deli_emit_fragment(t
ag)”の形態の関数を含むことができる。この関数
は、コードフラグメントをパラメータおよび識別子(た
とえば、タグ)として受け取り、DELIキャッシュ5
24に格納する。別の例では、コア506は、実行のた
めにハードウェア106に渡すために、キャッシュ52
4に格納されているコードフラグメントを識別する、
“Deli_exec_fragment(tag)”
等関数インタフェースを通して特定のコードフラグメン
トタグにおいて実行を開始する要求を受け入れることが
できる。
【0059】コアコントローラ516は、これら要求を
処理し、適切なコアモジュールにディスパッチする。次
に、所与の識別子を有するコードフラグメントを出す要
求602をフラグメントマネージャ520に渡すことが
できる。フラグメントマネージャ520は、フラグメン
ト形成ポリシー604に従ってコードフラグメントを変
形し、おそらく、装備化ポリシー(instrumentation po
licy)606に従ってコードフラグメントを装備化し、
フラグメントリンキングポリシー408に従って先にキ
ャッシュされたフラグメントと共にコードフラグメント
をリンクする。たとえば、フラグメントマネージャ31
8は、あるコードフラグメントの実行が終了すると別の
コードフラグメントに実行がジャンプし、それによって
キャッシュからの実行の長さが増大するように、キャッ
シュ524中の複数のコードフラグメントをリンクする
ことができる。これを達成するために、フラグメントマ
ネージャ520は、フラグメント割り当て命令610を
キャッシュマネージャ518に発する。次に、フラグメ
ントマネージャ520は、コードキャッシュ524中の
処理されたコードフラグメントを割り当てる要求をキャ
ッシュマネージャ518に送信する。
【0060】キャッシュマネージャ518は、コードフ
ラグメントの割り当てを制御し、通常、キャッシュ空間
を管理するために、それぞれキャッシュポリシー612
を備える。しかし、フラグメントマネージャ520はま
た、特定のフラグメント割り当て解除命令614もキャ
ッシュマネージャ520に発することができる。たとえ
ば、フラグメントマネージャ520は、現フラグメント
を先に割り当てられたフラグメントと統合するように判
断することができ、この場合、先のフラグメントの割り
当てを解除する必要があり得る。構成によっては、キャ
ッシュマネージャ518およびフラグメントマネージャ
520が、2001年5月22日付けで出願された「A
preemptive Replacement Strategy for a Caching Dyna
mic Translator Based on Changes in the Translation
Rate」と題する米国特許第6,237,065号に図
示し記載される仕方で、コードキャッシュ524および
コードフラグメントを管理することができ、この特許を
参照により本開示に援用する。代替として、コードキャ
ッシュ320およびコードフラグメントの管理を、20
01年1月5日付けで出願された「A Partitioned Code
Cache Organization to Exploit Program Locality」
と題する米国特許出願第09/755,389号に図示
し記載される仕方で実行することも可能であり、この特
許出願を参照により本開示に援用する。
【0061】フラグメントをキャッシュマネージャ51
8に渡す前に、フラグメントマネージャ520は、フラ
グメントを最適化マネージャ212に渡して(61
6)、最適化ポリシー618に従ってコードフラグメン
トの質を高めることができる。構成によっては、最適化
マネージャ212は、2001年1月5日付けで出願さ
れた「A Fast Runtime Scheme for Removing Dead Code
Across Linked Fragments」と題する米国特許出願第0
9/755,381号に図示し記載される仕方で、コー
ドフラグメントを最適化することができ、この特許を参
照により本開示に援用する。代替として、最適化マネー
ジャ126は、2001年1月5日付けで出願された
「A Memory Disambiguation Scheme for Partially Red
undant Load Removal」と題する米国特許出願第09/
755,774号に図示し記載される仕方で、コードフ
ラグメントを最適化することができ、この特許出願もま
た参照により本開示に援用する。特に、最適化マネージ
ャ126は、冗長計算をなくす、冗長メモリアクセスを
なくす、関数をインライン化して手順呼び出し/リター
ンオーバーヘッドをなくす、デッドコードをなくす、ピ
ーホールを行うなど、古典的なコンパイラ最適化技術を
使用してコードフラグメントを最適化してもよい。通
常、最適化マネージャ212は、最適化すべきコードの
中間表現(IR)に対処する。このような構成におい
て、クライアントは、IRコードが必要であることに気
付き、API508に、最適化目的のためにコードをネ
イティブからIRに変換し、最適化が実行された後に再
びネイティブに戻すよう求めることができる。
【0062】上述したように、フラグメントマネージャ
520は、フラグメント形成ポリシー604に従ってコ
ードフラグメントを変形する。フラグメントマネージャ
520によって行われる変形は、コードの再配置、たと
えば、相対アドレス、分岐アドレス等を変更することに
よるメモリアドレス参照の変更を含むことができる。コ
ードフラグメントのレイアウトも変更し、機能(すなわ
ち、セマンティックス)を変更することなくコードの物
理的なレイアウトを変更することができる。これら変形
は、フラグメントマネージャ520により、API50
8を通して、トランスペアレントモードレイヤ510の
命令フェッチコントローラ528から受信するフラグメ
ントに対して行われる。
【0063】上述したように、DELIコア506が受
け入れる他方の主要な要求タイプは、所与の識別子(た
とえば、タグ)によって識別されるフラグメントを実行
する要求620である。このような場合、コアコントロ
ーラ516は、ルックアップ要求622をフラグメント
マネージャ520に発し、フラグメントマネージャ52
0は、フラグメントがキャッシュ524に現在存在しア
クティブである場合、対応するコードキャッシュアドレ
ス624を戻す。例として、フラグメントマネージャ5
20は、タグを使用してコードフラグメントのロケーシ
ョンを識別することができる、存在しアクティブなコー
ドフラグメントのルックアップテーブルを維持すること
ができる。代替として、フラグメントマネージャ520
またはキャッシュマネージャ518は、コードフラグメ
ントが存在しアクティブであるかどうかを追跡する他の
任意の適した技術を使用することができる。フラグメン
トがキャッシュ320に現在存在しておらずアクティブ
ではない場合、フラグメントマネージャ520はエラー
コードをコアコントローラ516に戻し、コアコントロ
ーラ516は、フラグメントタブをキャッシュミスアド
レスとして最初のリクエスタに戻す(626)。一方、
フラグメントがキャッシュに現在存在しアクティブであ
る場合、コアコントローラ516は、最初の要求をキャ
ッシュアドレスとともにキャッシュマネージャ518に
パッチする(628)。次に、キャッシュマネージャ5
18は、制御をコードキャッシュ524中のアドレス指
定されたコードフラグメントに渡し、ひいてはアドレス
指定されたコードフラグメントを実行する。そして実行
は、キャッシュミスが生じるまで、すなわち実行すべき
次のアプリケーションアドレスのコピーがキャッシュに
現在存在しなくなるまで、コードキャッシュ524にお
いて焦点を合わせたままである。この状況は、たとえ
ば、実行中のコードをコードキャッシュ524から逃す
ことによって検出することができる。キャッシュミスが
キャッシュマネージャ518からコアコントローラ51
6に報告され(630)、次に、最初の要求元に報告さ
れる(626)。
【0064】2つの主な要求(すなわち、放出および実
行)を図6に関連して上述したが、特にコンピュータシ
ステムを上述したようにエミュレートする場合、他の多
くのタイプの要求を行うことができることを理解された
い。
【0065】図7は、エミュレーションシステム100
および300を実行することのできる例示的なホストコ
ンピュータシステム700を示すブロック図である。概
して、コンピュータシステム700は、デスクトップコ
ンピュータ、ポータブルコンピュータ、専用サーバコン
ピュータ、マルチプロセッサ計算装置、セルラ電話、個
人情報端末(PDA)、ハンドヘルドまたはペンベース
のコンピュータ等、広範な有線および/または無線の計
算装置のいずれか1つを含むことができる。具体的な構
成に関係なく、コンピュータシステム700は、たとえ
ば、処理装置702、メモリ704、1つまたは複数の
ユーザインタフェース装置706、ディスプレイ70
8、1つまたは複数の入出力(I/O)装置710、お
よび1つまたは複数のネットワーキング装置712を含
むことができ、これらはそれぞれローカルインタフェー
ス714に接続される。
【0066】処理装置702は、コンピュータシステム
700に関連するいくつかのプロセッサからの任意のカ
スタムメイドのまたは市販のプロセッサ、中央演算処理
装置(CPU)、または補助プロセッサ、半導体ベース
のマイクロプロセッサ(マイクロチップの形態で)、マ
クロプロセッサ、1つまたは複数の特定用途向け集積回
路(ASIC)、複数の適宜構成されたデジタルロジッ
クゲート、および離散要素を個々におよび各種組み合わ
せで包含し、計算システムの全体的な動作を統制する他
の周知の電子構成を含むことができる。
【0067】メモリ704は、揮発性メモリ要素(たと
えば、ランダムアクセスメモリ(DRAM、SRAM等
のRAMなど)および不揮発性メモリ要素(ROM、ハ
ードドライブ、テープ、CD−ROM等)の組み合わせ
のうちのいずれか1つを含むことができる。メモリ70
4は通常、オペレーティングシステム714、1つまた
は複数のアプリケーション716、DELI104、お
よび上述したエミュレータ102を含む。当業者は、メ
モリ704が、簡明にする目的のために省略された他の
コンポーネントを含むことができ、通常は含むことを理
解しよう。
【0068】1つまたは複数のユーザインタフェース装
置706は、ユーザがコンピュータシステム700と対
話できるようにするコンポーネントを含む。たとえば、
コンピュータシステム700がパーソナルコンピュータ
(PC)を含む場合、これらコンポーネントはキーボー
ドおよびマウスを含むことができる。コンピュータシス
テム700がハンドヘルド装置(たとえば、PDA、携
帯電話)を含む場合、これらコンポーネントは、機能キ
ーまたはボタン、タッチスクリーン、スタイラス等を含
むことができる。ディスプレイ708は、PCの場合に
はコンピュータモニタもしくはプラズマスクリーン、ま
たはハンドヘルド装置の場合には液晶ディスプレイ(L
CD)を含むことができる。
【0069】図7をさらに参照すると、1つまたは複数
のI/O装置710は、コンピュータシステム700の
別のシステムおよび/または装置への接続を助けるよう
に適合されるため、1つまたは複数のシリアル、パラレ
ル、SCSI(small computer system interface)、
ユニバーサルシリアルバス(USB)、IEEE139
4(たとえば、Firewire(登録商標))、およ
び/またはパーソナルエリアネットワーク(PAN)コ
ンポーネントを含み得る。ネットワークインタフェース
装置712は、ネットワークを介してデータを送信かつ
/または受信するために使用される各種コンポーネント
を含む。例として、ネットワークインタフェース装置7
12は、入力および出力の双方を通信可能な装置、たと
えば、変調器/復調器(たとえば、モデム)、無線(た
とえば、無線周波数(RF))送受信器、電話インタフ
ェース、ブリッジ、ルータ、ネットワークカード等を含
む。
【0070】各種ソフトウェアおよび/またはファーム
ウェアを本明細書において述べた。このソフトウェアお
よび/またはファームウェアは、任意のコンピュータ関
連システムまたは方法が使用するまたはこれと併用する
任意のコンピュータ読み取り可能媒体に格納可能なこと
を理解されたい。本文書の文脈では、コンピュータ読み
取り可能媒体とは、コンピュータ関連システムまたは方
法が使用するまたはこれと併用するコンピュータプログ
ラムを含むまたは格納することのできる電子、磁気、光
学、または他の物理的な装置または手段を指す。これら
プログラムは、コンピュータベースのシステム、プロセ
ッサ包含システム、または命令実行システム、装置、ま
たはデバイスから命令をフェッチし、その命令を実行す
ることのできる他のシステム等、命令実行システム、装
置、またはデバイスが使用するまたはこれと併用する任
意のコンピュータ読み取り可能媒体で具現することがで
きる。本文書の文脈において、「コンピュータ読み取り
可能媒体」は、命令実行システム、装置、またはデバイ
スが使用するまたはこれと併用するプログラムを格納、
通信、伝播、または搬送することのできるあらゆる手段
であることができる。
【0071】コンピュータ読み取り可能媒体は、たとえ
ば、電子、磁気、光学、電磁、赤外線、または半導体シ
ステム、装置、デバイス、または伝播媒体であることが
できるが、これらに限定されない。コンピュータ読み取
り可能媒体のより具体的な例(非網羅的なリスト)とし
ては、1本または複数本のワイヤを有する電気接続、ポ
ータブルコンピュータ・フレキシブルディスク、ランダ
ムアクセスメモリ(RAM)、読み取り専用メモリ(R
OM)、電気的に消去(書き換え)可能なROM(EP
ROM、EEPROM、またはフラッシュメモリ)、光
ファイバ、およびポータブルコンパクトディスク読み取
り専用メモリ(CDROM)が挙げられる。コンピュー
タ読み出し可能媒体はさらに、プログラムが印刷され、
たとえば紙または他の媒体を光学走査することを介し
て、そのプログラムを電子的に取り込み、次いでコンパ
イル、解釈、あるいは必要であれば別様に適宜処理して
から、コンピュータメモリに格納することのできる紙ま
たは別の適した媒体であってもよいことに留意された
い。
【0072】本発明の特定の実施形態について例示を目
的として上記説明および図面において詳細に開示した
が、特許請求に記載の本発明の範囲から逸脱することな
く変形および変更を行い得ることが当業者により理解さ
れよう。
【図面の簡単な説明】
【図1】仮想マシン環境においてネイティブコードとエ
ミュレートされるコードとを統合する本発明によるエミ
ュレーションシステムの実施形態のブロック図である。
【図2】図1のエミュレーションシステムの動作を概し
て示す流れ図である。
【図3】仮想マシン環境においてネイティブコードとエ
ミュレートされるコードとを統合する本発明によるエミ
ュレーションシステムの別の実施形態のより詳細なブロ
ック図である。
【図4A】図3のエミュレーションシステムの動作を示
す流れ図である。
【図4B】図3のエミュレーションシステムの動作を示
す流れ図である。
【図4C】図3のエミュレーションシステムの動作を示
す流れ図である。
【図5】図1および図3の動的実行レイヤインタフェー
ス(DELI)の実施形態を示すブロック図である。
【図6】図5のDELIのコアの実施形態を示すブロッ
ク図である。
【図7】図1および図3のエミュレーションシステムを
実施するように構成されたホストコンピュータシステム
の実施形態のブロック図である。
─────────────────────────────────────────────────────
【手続補正書】
【提出日】平成15年1月16日(2003.1.1
6)
【手続補正1】
【補正対象書類名】明細書
【補正対象項目名】特許請求の範囲
【補正方法】変更
【補正内容】
【特許請求の範囲】

Claims (10)

    【特許請求の範囲】
  1. 【請求項1】 ホストコンピュータシステム上で元のコ
    ンピュータシステムからのコードをエミュレートする方
    法であって、 ホストコンピュータシステム上でエミュレートすべきプ
    ログラムコードに関連するプログラム命令をフェッチす
    るステップ(200)と、 前記プログラム命令を前記ホストコンピュータシステム
    上でネイティブに実行すべきか、それとも前記ホストコ
    ンピュータシステム上でエミュレートすべきかを決定す
    るステップ(202)と、 前記プログラム命令を前記ホストコンピュータシステム
    上でネイティブに実行すべきである場合、前記プログラ
    ム命令に関連するネイティブコードフラグメントを動的
    実行レイヤインタフェース(104)に放出して実行す
    るステップ(206)とを含む方法。
  2. 【請求項2】 前記プログラム命令をフェッチするステ
    ップ(200)は、エミュレータを使用してプログラム
    命令をフェッチすることを含む請求項1記載の方法。
  3. 【請求項3】 前記ネイティブコードフラグメントを放
    出するステップ(206)は、前記動的実行レイヤイン
    タフェース(104)に関連するアプリケーションプロ
    グラムインタフェース(508)を介して行われる請求
    項1記載の方法。
  4. 【請求項4】 前記プログラム命令を前記ホストコンピ
    ュータシステム上でネイティブに実行すべきかどうかを
    決定するステップ(202)は、元のコンピュータシス
    テムに関連する第1の呼び出し規定と前記ホストコンピ
    ュータシステムに関連する第2の呼び出し規定とをイン
    タフェースすることを含む請求項1記載の方法。
  5. 【請求項5】 前記プログラム命令を前記ホストコンピ
    ュータシステム上でネイティブに実行すべきかどうかを
    決定するステップ(202)は、標識命令を検出するこ
    とを含む請求項1記載の方法。
  6. 【請求項6】 ホストコンピュータシステム上で元のコ
    ンピュータシステムからのコードをエミュレートするシ
    ステムであって、 ホストコンピュータシステム上でエミュレートすべきプ
    ログラムコードに関連するプログラム命令をフェッチす
    る手段と、 前記プログラム命令を前記ホストコンピュータシステム
    上でネイティブに実行すべきか、それとも前記ホストコ
    ンピュータシステム上でエミュレートすべきかを決定す
    る手段と、 前記プログラム命令を前記ホストコンピュータシステム
    上でネイティブに実行すべきである場合、前記プログラ
    ム命令に関連するネイティブコードフラグメントを動的
    実行レイヤインタフェース(104)に放出して実行す
    る手段と、を備えるシステム。
  7. 【請求項7】 前記ネイティブコードフラグメントを放
    出する手段は、前記動的実行レイヤインタフェース(1
    04)に関連するアプリケーションプログラムインタフ
    ェース(508)を備える請求項6記載のシステム。
  8. 【請求項8】 前記ホストコンピュータシステム上でネ
    イティブに実行すべき関数を参照するデータを受信する
    手段をさらに備える請求項6記載のシステム。
  9. 【請求項9】 ホストコンピュータシステム上で元のコ
    ンピュータシステムからのコードをエミュレートするシ
    ステムであって、 元のコンピュータシステム上で実行するように書かれた
    プログラムに関連する命令をフェッチするように構成さ
    れるエミュレータ(102)であって、前記元のコンピ
    ュータシステムをエミュレートすることによって命令を
    実行するように構成されるエミュレーションモジュール
    (110)およびエミュレートするのではなくネイティ
    ブに実行すべき命令を検出するように構成されるネイテ
    ィブコードインタセプタモジュール(108)を含むエ
    ミュレータ(102)と、 コードフラグメントをキャッシュして実行することので
    きる少なくとも1つのコードキャッシュ(524)を有
    するコア(506)を含む動的実行レイヤインタフェー
    ス(104)と、 前記エミュレータ(102)と前記動的実行レイヤイン
    タフェース(104)をリンクするアプリケーションプ
    ログラミングインタフェース(508)と、を備えるシ
    ステム。
  10. 【請求項10】 前記アプリケーションプログラミング
    インタフェース(508)は、前記エミュレータ(10
    2)がコードフラグメントを前記少なくとも1つのコー
    ドキャッシュ(524)に放出できるようにするフラグ
    メント放出関数および前記エミュレータ(102)が前
    記少なくとも1つのコードキャッシュ(524)内に含
    まれる前記コードフラグメントの実行を要求することが
    できる実行関数を含む、前記エミュレータ(102)が
    利用可能な関数セットを含む請求項9記載のシステム。
JP2002337638A 2001-11-29 2002-11-21 エミュレートされるコードとネイティブコードとを統合するシステムおよび方法 Pending JP2003196107A (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US33423401P 2001-11-29 2001-11-29
US60/334,234 2001-11-29
US10/100,874 US6907519B2 (en) 2001-11-29 2002-03-19 Systems and methods for integrating emulated and native code
US10/100,874 2002-03-19

Publications (1)

Publication Number Publication Date
JP2003196107A true JP2003196107A (ja) 2003-07-11

Family

ID=26797642

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002337638A Pending JP2003196107A (ja) 2001-11-29 2002-11-21 エミュレートされるコードとネイティブコードとを統合するシステムおよび方法

Country Status (3)

Country Link
US (1) US6907519B2 (ja)
EP (1) EP1316882A3 (ja)
JP (1) JP2003196107A (ja)

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006268833A (ja) * 2005-03-24 2006-10-05 Microsoft Corp 制限的な呼び出し規約を有するコードをインストルメントする方法
JP2007529063A (ja) * 2003-07-15 2007-10-18 トランジティブ リミテッド ネイティブ結合を行なうための方法および装置
JP2008545179A (ja) * 2005-05-12 2008-12-11 マイクロソフト コーポレーション 複数の経路最適化を備える関数レベルジャストインタイム変換エンジン
JP2009527836A (ja) * 2006-02-21 2009-07-30 株式会社ソニー・コンピュータエンタテインメント データ処理
JP2009541834A (ja) * 2006-06-20 2009-11-26 インターナショナル・ビジネス・マシーンズ・コーポレーション ネイティブコードに結合中に例外処理するための例外処理システム、例外処理方法、変換装置、および記憶媒体
JP2011134315A (ja) * 2009-12-23 2011-07-07 Intel Corp 部分的なエミュレーション環境におけるソース命令セットアーキテクチャ(isa)コードから、変換済みコードへの遷移
JP2013200831A (ja) * 2012-03-26 2013-10-03 Fuji Xerox Co Ltd プログラム、及びプログラム保護装置
WO2014155684A1 (ja) * 2013-03-29 2014-10-02 富士通株式会社 プログラム、情報処理システム、およびプログラム移行方法
JP2015525922A (ja) * 2012-08-08 2015-09-07 インテル コーポレイション バーチャルファンクションを無効にするコールのためのサポートを含むisaブリッジング
US9405551B2 (en) 2013-03-12 2016-08-02 Intel Corporation Creating an isolated execution environment in a co-designed processor
US9891936B2 (en) 2013-09-27 2018-02-13 Intel Corporation Method and apparatus for page-level monitoring
US10621092B2 (en) 2008-11-24 2020-04-14 Intel Corporation Merging level cache and data cache units having indicator bits related to speculative execution
US10649746B2 (en) 2011-09-30 2020-05-12 Intel Corporation Instruction and logic to perform dynamic binary translation
US10725755B2 (en) 2008-11-24 2020-07-28 Intel Corporation Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
WO2024069678A1 (ja) * 2022-09-26 2024-04-04 日立Astemo株式会社 電子制御装置

Families Citing this family (64)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6920550B2 (en) * 2001-11-15 2005-07-19 Hewlett-Packard Development Company, L.P. System and method for decoding and executing program binaries
US6928536B2 (en) * 2001-11-29 2005-08-09 Hewlett-Packard Development Company, L.P. Dynamic execution layer interface for replacing instructions requiring unavailable hardware functionality with patch code and caching
US6915513B2 (en) * 2001-11-29 2005-07-05 Hewlett-Packard Development Company, L.P. System and method for dynamically replacing code
US7051340B2 (en) * 2001-11-29 2006-05-23 Hewlett-Packard Development Company, L.P. System and method for isolating applications from each other
US20030101439A1 (en) * 2001-11-29 2003-05-29 Giuseppe Desoli System and method for supporting emulation of a computer system through dynamic code caching and transformation
US20030101381A1 (en) * 2001-11-29 2003-05-29 Nikolay Mateev System and method for virus checking software
WO2003058446A1 (en) * 2002-01-11 2003-07-17 Sierra Wireless, Inc. Host extensible wireless application interface
CA2376327C (en) * 2002-03-12 2009-04-28 Ibm Canada Limited-Ibm Canada Limitee Executing native code in place of non-native code
US20030182653A1 (en) * 2002-03-22 2003-09-25 Giuseppe Desoli Systems and methods for verifying correct execution of emulated code via dynamic state verification
US20030192035A1 (en) * 2002-04-09 2003-10-09 Duesterwald Ald Evelyn Systems and methods for implementing efficient execution transfers between successive translations of stack-based program code in a virtual machine environment
US7506321B1 (en) * 2002-06-11 2009-03-17 Unisys Corporation Computer emulator employing direct execution of compiled functions
US20040025165A1 (en) * 2002-08-05 2004-02-05 Giuseppe Desoli Systems and methods for extending operating system functionality for an application
JP2004303114A (ja) * 2003-04-01 2004-10-28 Hitachi Ltd インタープリタおよびネイティブコード実行方法
US7546584B2 (en) * 2003-06-16 2009-06-09 American Megatrends, Inc. Method and system for remote software testing
US7194732B2 (en) * 2003-06-26 2007-03-20 Hewlett-Packard Development Company, L.P. System and method for facilitating profiling an application
US7543277B1 (en) 2003-06-27 2009-06-02 American Megatrends, Inc. Method and system for remote software debugging
US7434209B2 (en) 2003-07-15 2008-10-07 Transitive Limited Method and apparatus for performing native binding to execute native code
US8424023B2 (en) * 2003-10-24 2013-04-16 Hewlett-Packard Development Company, L.P. Program interface architecture
US20050138229A1 (en) * 2003-12-23 2005-06-23 Sartore Ronald H. Method and apparatus for remote operation of a USB peripheral
US7827258B1 (en) 2004-03-01 2010-11-02 American Megatrends, Inc. Method, system, and apparatus for communicating with a computer management device
US20060026510A1 (en) * 2004-07-30 2006-02-02 International Business Machines Corporation Method for optimizing markup language transformations using a fragment data cache
US7519749B1 (en) * 2004-08-25 2009-04-14 American Megatrends, Inc. Redirecting input and output for multiple computers
US7506338B2 (en) * 2004-08-30 2009-03-17 International Business Machines Corporation Method and apparatus for simplifying the deployment and serviceability of commercial software environments
US7634768B2 (en) * 2005-02-17 2009-12-15 Intel Corporation Methods and apparatus to support mixed-mode execution within a single instruction set architecture process of a virtual machine
US7415701B2 (en) * 2005-02-17 2008-08-19 Intel Corporation Methods and apparatus to support mixed-mode execution within a single instruction set architecture process of a virtual machine
TWI341992B (en) * 2005-02-22 2011-05-11 Lite On Technology Corp Method and system for quickly developing an embedded operating system through utilizing an automated building framework
GB2424092A (en) * 2005-03-11 2006-09-13 Transitive Ltd Switching between code translation and execution using a trampoline
WO2006095155A1 (en) 2005-03-11 2006-09-14 Transitive Limited Execution control during program code conversion
US7735136B2 (en) * 2005-04-18 2010-06-08 Vmware, Inc. 0-touch and 1-touch techniques for improving the availability of computer programs under protection without compromising security
EP1889158B1 (en) * 2005-06-04 2015-04-22 International Business Machines Corporation Method and apparatus for combined execution of native code and target code during program code conversion
GB2426840A (en) 2005-06-04 2006-12-06 Transitive Ltd Method of executing program code where a portion of the target code calls a native code portion which then calls a second target code portion.
US7945958B2 (en) * 2005-06-07 2011-05-17 Vmware, Inc. Constraint injection system for immunizing software programs against vulnerabilities and attacks
US20070016895A1 (en) * 2005-07-15 2007-01-18 Microsoft Corporation Selective omission of endian translation to enhance emulator performance
US20070083620A1 (en) * 2005-10-07 2007-04-12 Pedersen Bradley J Methods for selecting between a predetermined number of execution methods for an application program
US8108201B2 (en) * 2005-11-17 2012-01-31 International Business Machines Corporation Method for emulating a native device on a host computer system
US8010843B2 (en) 2005-12-14 2011-08-30 American Megatrends, Inc. System and method for debugging a target computer using SMBus
US8161501B2 (en) 2006-01-09 2012-04-17 Red Hat, Inc. Apparatus, method and computer program product for facilitating the interoperability of virtual machines
US7487341B2 (en) * 2006-06-29 2009-02-03 Intel Corporation Handling address translations and exceptions of a heterogeneous resource of a processor using another processor resource
US7783799B1 (en) 2006-08-31 2010-08-24 American Megatrends, Inc. Remotely controllable switch and testing methods using same
US8683453B2 (en) * 2006-11-30 2014-03-25 Motorola Mobility Llc System for overriding interpreted byte-code with native code
US20080235001A1 (en) * 2007-03-22 2008-09-25 Searete Llc, A Limited Liability Corporation Of The State Of Delaware Implementing emulation decisions in response to software evaluations or the like
US9378108B2 (en) 2007-03-22 2016-06-28 Invention Science Fund I, Llc Implementing performance-dependent transfer or execution decisions from service emulation indications
US8438609B2 (en) 2007-03-22 2013-05-07 The Invention Science Fund I, Llc Resource authorizations dependent on emulation environment isolation policies
US8874425B2 (en) 2007-03-22 2014-10-28 The Invention Science Fund I, Llc Implementing performance-dependent transfer or execution decisions from service emulation indications
US9558019B2 (en) 2007-03-22 2017-01-31 Invention Science Fund I, Llc Coordinating instances of a thread or other service in emulation
US8495708B2 (en) * 2007-03-22 2013-07-23 The Invention Science Fund I, Llc Resource authorizations dependent on emulation environment isolation policies
US8479178B2 (en) * 2008-06-27 2013-07-02 Microsoft Corporation Compiler in a managed application context
US8281296B2 (en) * 2008-08-12 2012-10-02 Oracle America, Inc. Cross-ISA inlining in a system virtual machine
CN101441566B (zh) * 2008-11-18 2012-04-25 腾讯科技(深圳)有限公司 一种在嵌入式平台上动态链接程序的方法
US8447583B2 (en) 2009-09-18 2013-05-21 International Business Machines Corporation Self initialized host cell spatially aware emulation of a computer instruction set
US8949106B2 (en) * 2009-09-18 2015-02-03 International Business Machines Corporation Just in time compiler in spatially aware emulation of a guest computer instruction set
US9158566B2 (en) 2009-09-18 2015-10-13 International Business Machines Corporation Page mapped spatially aware emulation of computer instruction set
US8719547B2 (en) 2009-09-18 2014-05-06 Intel Corporation Providing hardware support for shared virtual memory between local and remote physical memory
US8428930B2 (en) * 2009-09-18 2013-04-23 International Business Machines Corporation Page mapped spatially aware emulation of a computer instruction set
US8713540B2 (en) * 2010-07-29 2014-04-29 National Instruments Corporation Generating and modifying textual code interfaces from graphical programs
US20120143589A1 (en) * 2010-12-07 2012-06-07 Andrew Ward Beale Multi-modal compiling apparatus and method for generating a hybrid codefile
US9063760B2 (en) * 2011-10-13 2015-06-23 International Business Machines Corporation Employing native routines instead of emulated routines in an application being emulated
CN107408052B (zh) * 2015-04-10 2021-04-16 谷歌有限责任公司 共享对象层级上的二进制转换的方法、系统和介质
US9335982B1 (en) 2015-04-28 2016-05-10 Microsoft Technology Licensing, Llc Processor emulation using multiple translations
US9684492B2 (en) 2015-09-28 2017-06-20 Semmle Limited Automatic determination of compiler configuration
EP3427148B1 (en) 2016-03-11 2022-01-12 LZLabs GmbH Load module compiler
US10296338B2 (en) * 2016-12-09 2019-05-21 Intel Corporation System, apparatus and method for low overhead control transfer to alternate address space in a processor
US10503479B2 (en) * 2018-05-07 2019-12-10 International Business Machines Corporation System for modeling toolchains-based source repository analysis
US11461470B2 (en) 2020-06-26 2022-10-04 Bank Of America Corporation System and method for providing an application programming interface (API) based on performance and security

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0534597B1 (en) * 1991-09-23 2000-04-26 Intel Corporation Computer system having software interrupt (INTN) instructions selectively operating in a virtual mode
US5452456A (en) * 1992-12-18 1995-09-19 Apple Computer, Inc. Apparatus for executing a plurality of program segments having different object code types in a single program or processor environment
US5781758A (en) * 1995-03-23 1998-07-14 Apple Computer, Inc. Software emulation system with reduced memory requirements
US5768593A (en) 1996-03-22 1998-06-16 Connectix Corporation Dynamic cross-compilation system and method
US5907708A (en) * 1996-06-03 1999-05-25 Sun Microsystems, Inc. System and method for facilitating avoidance of an exception of a predetermined type in a digital computer system by providing fix-up code for an instruction in response to detection of an exception condition resulting from execution thereof
US5974549A (en) 1997-03-27 1999-10-26 Soliton Ltd. Security monitor
US6275938B1 (en) 1997-08-28 2001-08-14 Microsoft Corporation Security enhancement for untrusted executable code
US5953520A (en) * 1997-09-22 1999-09-14 International Business Machines Corporation Address translation buffer for data processing system emulation mode
US6480952B2 (en) * 1998-05-26 2002-11-12 Advanced Micro Devices, Inc. Emulation coprocessor
US6163764A (en) * 1998-10-12 2000-12-19 Intel Corporation Emulation of an instruction set on an instruction set architecture transition
US6920550B2 (en) 2001-11-15 2005-07-19 Hewlett-Packard Development Company, L.P. System and method for decoding and executing program binaries
US20030101439A1 (en) 2001-11-29 2003-05-29 Giuseppe Desoli System and method for supporting emulation of a computer system through dynamic code caching and transformation
US20030101381A1 (en) 2001-11-29 2003-05-29 Nikolay Mateev System and method for virus checking software
US6928536B2 (en) 2001-11-29 2005-08-09 Hewlett-Packard Development Company, L.P. Dynamic execution layer interface for replacing instructions requiring unavailable hardware functionality with patch code and caching
US6915513B2 (en) 2001-11-29 2005-07-05 Hewlett-Packard Development Company, L.P. System and method for dynamically replacing code
US7051340B2 (en) 2001-11-29 2006-05-23 Hewlett-Packard Development Company, L.P. System and method for isolating applications from each other
US20030182653A1 (en) 2002-03-22 2003-09-25 Giuseppe Desoli Systems and methods for verifying correct execution of emulated code via dynamic state verification
US20030192035A1 (en) 2002-04-09 2003-10-09 Duesterwald Ald Evelyn Systems and methods for implementing efficient execution transfers between successive translations of stack-based program code in a virtual machine environment
US20040025165A1 (en) 2002-08-05 2004-02-05 Giuseppe Desoli Systems and methods for extending operating system functionality for an application

Cited By (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007529063A (ja) * 2003-07-15 2007-10-18 トランジティブ リミテッド ネイティブ結合を行なうための方法および装置
JP2011123917A (ja) * 2003-07-15 2011-06-23 Internatl Business Mach Corp <Ibm> 対象プログラム・コードを目的プログラム・コードに変換するための方法、並びにコンピュータ・プログラム及びコンピュータ
JP4931583B2 (ja) * 2003-07-15 2012-05-16 インターナショナル・ビジネス・マシーンズ・コーポレーション ネイティブ結合を行なうための方法および装置
JP2006268833A (ja) * 2005-03-24 2006-10-05 Microsoft Corp 制限的な呼び出し規約を有するコードをインストルメントする方法
JP2008545179A (ja) * 2005-05-12 2008-12-11 マイクロソフト コーポレーション 複数の経路最適化を備える関数レベルジャストインタイム変換エンジン
JP2011227908A (ja) * 2006-02-21 2011-11-10 Sony Computer Entertainment Inc データ処理
JP2009527836A (ja) * 2006-02-21 2009-07-30 株式会社ソニー・コンピュータエンタテインメント データ処理
US8458674B2 (en) 2006-06-20 2013-06-04 International Business Machines Corporation Method and apparatus for handling exceptions during binding to native code
JP2009541834A (ja) * 2006-06-20 2009-11-26 インターナショナル・ビジネス・マシーンズ・コーポレーション ネイティブコードに結合中に例外処理するための例外処理システム、例外処理方法、変換装置、および記憶媒体
US10621092B2 (en) 2008-11-24 2020-04-14 Intel Corporation Merging level cache and data cache units having indicator bits related to speculative execution
US10725755B2 (en) 2008-11-24 2020-07-28 Intel Corporation Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
JP2011134315A (ja) * 2009-12-23 2011-07-07 Intel Corp 部分的なエミュレーション環境におけるソース命令セットアーキテクチャ(isa)コードから、変換済みコードへの遷移
US10649746B2 (en) 2011-09-30 2020-05-12 Intel Corporation Instruction and logic to perform dynamic binary translation
JP2013200831A (ja) * 2012-03-26 2013-10-03 Fuji Xerox Co Ltd プログラム、及びプログラム保護装置
JP2015525922A (ja) * 2012-08-08 2015-09-07 インテル コーポレイション バーチャルファンクションを無効にするコールのためのサポートを含むisaブリッジング
US9405551B2 (en) 2013-03-12 2016-08-02 Intel Corporation Creating an isolated execution environment in a co-designed processor
JPWO2014155684A1 (ja) * 2013-03-29 2017-02-16 富士通株式会社 プログラム、情報処理システム、およびプログラム移行方法
US9733990B2 (en) 2013-03-29 2017-08-15 Fujitsu Limited Information processing system and program migration method
WO2014155684A1 (ja) * 2013-03-29 2014-10-02 富士通株式会社 プログラム、情報処理システム、およびプログラム移行方法
US9891936B2 (en) 2013-09-27 2018-02-13 Intel Corporation Method and apparatus for page-level monitoring
WO2024069678A1 (ja) * 2022-09-26 2024-04-04 日立Astemo株式会社 電子制御装置

Also Published As

Publication number Publication date
EP1316882A2 (en) 2003-06-04
US20030101334A1 (en) 2003-05-29
US6907519B2 (en) 2005-06-14
EP1316882A3 (en) 2005-09-14

Similar Documents

Publication Publication Date Title
US6907519B2 (en) Systems and methods for integrating emulated and native code
US11385872B2 (en) Extending a virtual machine instruction set architecture
US7913240B2 (en) Method and apparatus for transforming java native interface function calls into simpler operations during just-in-time compilation
JP2003196108A (ja) 動的コードキャッシングおよび変形を通してコンピュータシステムのエミュレーションをサポートするシステムおよび方法
EP2340481B1 (en) Caching runtime generated code
US8312439B2 (en) Inlining native functions into compiled java code
US20030182653A1 (en) Systems and methods for verifying correct execution of emulated code via dynamic state verification
JP2004070944A (ja) アプリケーション向けにオペレーティングシステム機能を拡張するシステムおよび方法
JPH11327916A (ja) コンパイル済コ―ドにおけるダイナミッククラス初期化チェックのコスト低減技術
EP1313008A1 (en) System and method for decoding program instructions
WO2003048925A1 (en) System and method for isolating applications from each other
US20030033593A1 (en) Dynamic execution layer interface for explicitly or transparently executing application or system binaries
US9250865B2 (en) Selective speculative class-based optimization
US20110119659A1 (en) Runtime machine supported method level caching
WO2022237098A1 (zh) 一种异构程序执行方法、装置、计算设备及可读存储介质
US20040083467A1 (en) System and method for executing intermediate code
US8521760B2 (en) Dynamic translator for requests for system resources
JP5129904B2 (ja) 実行時における関数の実行性能を増大させるための方法、計算機システム、実行時における関数の実行性能を増大させるための、コンピュータプログラムを格納するコンピュータ読み取り可能媒体
Wen et al. BrowserVM: Running unmodified operating systems and applications in browsers
EP4298511A1 (en) Hybrid just in time load module compiler with performance optimizations
Deacon A Generic Approach to Object Migration using Specialised Methods