JP2003157170A - プログラムバイナリをデコードおよび実行する方法 - Google Patents

プログラムバイナリをデコードおよび実行する方法

Info

Publication number
JP2003157170A
JP2003157170A JP2002322121A JP2002322121A JP2003157170A JP 2003157170 A JP2003157170 A JP 2003157170A JP 2002322121 A JP2002322121 A JP 2002322121A JP 2002322121 A JP2002322121 A JP 2002322121A JP 2003157170 A JP2003157170 A JP 2003157170A
Authority
JP
Japan
Prior art keywords
code
deli
application
fragment
cache
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
JP2002322121A
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 JP2003157170A publication Critical patent/JP2003157170A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30178Runtime instruction translation, e.g. macros of compressed or encrypted instructions

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

(57)【要約】 【課題】圧縮されたプログラムバイナリを部分的にデコ
ードおよび実行する方法を提供すること。 【解決手段】本発明は、プログラムバイナリのデコード
に関するシステムと方法を開示する。一つの形態とし
て、本システムと方法は、プログラム命令(604)を
インターセプトし、関連付けられた命令がデコードされ
たかキャッシュされたかを判断し、関連する命令がキャ
ッシュされていないとき(612、614)プログラム
命令をデコードしコピーすることに関する。

Description

【発明の詳細な説明】 【0001】 【発明の属する技術分野】本開示は、概して、バイナリ
プログラムコードを実行する動的変換に関する。より詳
細には、本開示は、プログラムバイナリをデコードおよ
び実行するシステムおよび方法に関する。 【0002】 【従来の技術】近年、個人情報端末(PDA)および組
込みアプライアンス等のコンピューティング機器におい
て使用されるメモリの量を低減することにより、それら
のコストを低減することに関心が高まってきた。不都合
なことには、必要とされるメモリの量は一般に、提供さ
れる機能が増加するに伴って増大する。したがって、ユ
ーザがより多くの機能(例えば、アプリケーションの
数)を望むほど、一般に多くのメモリが必要となる。 【0003】この状況を考慮し、コンピューティング機
器に対して必要なメモリの量を低減するためにいくつか
の解決法が提案されてきた。かかる解決法の1つにおい
ては、高いコード密度を有するマイクロプロセッサを使
用することができる。この解決法は、必要なメモリの量
の低減を容易にするが、マイクロプロセッサによって実
現可能なパフォーマンスのレベルに悪影響を与える可能
性があり、したがって多くの用途に対して望ましくな
い。 【0004】より有望な解決法では、コード圧縮を使用
する。コード圧縮では、プログラムコードが、オフライ
ンで、すなわちコード構築時の間に圧縮される。圧縮さ
れると、プログラムコードに対して必要なメモリは低減
し、したがってコンピューティング機器において提供さ
れなければならないメモリの量を低減することが容易に
なる。圧縮コードは、例えば永久記憶装置(例えば、リ
ードオンリメモリ(ROM)、ハードディスク、フラッ
シュデバイス)に格納され、実行時に伸張される。 【0005】 【発明が解決しようとする課題】コンピューティング機
器のメモリが制限されている場合、一度にコードのブロ
ック(例えばページ)のみを伸張することが好ましい。
そのようにしないと、少なくともメモリ保存に関する限
り、第一に圧縮する目的にそぐわなくなる。伸張は、そ
の目的のために構成されるハードウェアまたはソフトウ
ェアを用いて達成することができる。ハードウェアソリ
ューションは適切に実行されるが、ハードウェアは、基
礎にあるシステムが変更される度に、変更されなければ
ならないか置き換えられがちなため、幾分か柔軟性がな
い。 【0006】ソフトウェアベースソリューションもまた
実行可能であるが、オペレーティングシステム(O/
S)を変更する必要がある点で問題があり、わずかな量
のコード(命令の数)のみが必要である場合であって
も、通常はコードの大部分を伸張しなければならいとい
う点でパフォーマンスが低下する。パフォーマンスを低
下させることに加えて、コードの大部分を伸張するため
には、さらに、伸張されたコードに対して比較的大容量
のメモリが利用可能であることが必要である。不都合な
ことには、コードのより少ない部分を伸張することは、
これを実現するために通常ハードウェアのサポートが必
要であるため困難である。しかしながら、かかるハード
ウェアが利用可能であったとしても、かかる形態の伸張
に伴うオーバヘッドのペナルティおよび効率の低下によ
って、かかる解決法は魅力の無いものになる。 【0007】上述したことから、例えば上述した問題の
うちの1つまたは複数を回避するコード伸張を提供する
ように、プログラムコードをデコードするシステムおよ
び方法を有することが望ましい、ということを認めるこ
とができる。 【0008】 【課題を解決するための手段】本開示は、プログラムバ
イナリをデコードおよび実行するシステムおよび方法に
関する。一構成では、本システムおよび方法は、プログ
ラム命令をインタセプトすること、関連する命令がデコ
ードされかつキャッシュされているか否かを判断するこ
と、および関連する命令がキャッシュされていない場
合、プログラム命令をデコードしコピーすることに関す
る。 【0009】本開示はまた、コンピュータ読取可能媒体
に格納されたデコーディングプログラムに関する。一構
成では、デコーディングプログラムは、プログラム命令
をインタセプトするように構成されたロジックと、関連
する命令がデコードされかつキャッシュされているか否
かを判断するロジックと、キャッシュされていないプロ
グラム命令をデコードしコピーするように構成されたロ
ジックとを備える。 【0010】さらに、本開示は、少なくとも1つのアプ
リケーションとコンピューティングシステムハードウェ
アとの間に存在するダイナミック・エグゼキューション
・レイヤ・インタフェース(dynamic execution layer
interface(DELI))に関する。一態様では、DE
LIは、いくつかのアプリケーションコードフラグメン
トをキャッシュおよび実行するように構成されたコア
と、コアのキャッシングおよび実行機能に対するアクセ
スを提供するように構成されたアプリケーションプログ
ラミングインタフェースと、コアの動作のためのポリシ
ーを提供するように構成されたシステム制御および構成
レイヤと、を備える。 【0011】本発明は、以下の図面を参照してより理解
することができる。 【0012】 【発明の実施の形態】プログラムバイナリをデコードお
よび実行するシステムおよび方法を開示する。以下に説
明するように、提供されるデコーディングサービスの性
質は、特定のアプリケーションによって異なることが可
能である。例として、このデコーディングは、プログラ
ムコードを伸張および/または解読することを含むこと
が可能である。本発明のシステムおよび方法の説明を容
易にするために、システム例を、図面を参照して説明す
る。これらシステムを詳細に説明するが、それらは例示
の目的のみのために提供され、発明の概念から逸脱する
ことなくあらゆる変更が可能である、ということが認め
られよう。他のシステム例は、2001年8月8日に出
願され、「Dynamic Execution Layer Interface for Ex
plicitly of Transparently Executing Application or
System Binaries」と題された米国特許出願第09/9
24,260号に述べられている。システム例の説明の
後に、システムの動作の例を提供することにより、プロ
グラムバイナリのデコーディングおよび実行を容易にす
ることができる方法を説明する。 【0013】ここで図1を参照すると、一例としてのダ
イナミック・エグゼキューション・レイヤ・インタフェ
ース(dynamic execution layer interface(DEL
I))100が示されている。概して、DELI100
は、オペレーティングシステム(O/S)を含むかまた
は含まないアプリケーションとハードウェアとの間に存
在することにより、ハードウェアからアプリケーション
バイナリコードを解く(untie)ための、高または低水
準言語で書かれた包括的ソフトウェアレイヤを構成す
る。この構成を通して、DELI100は、エミュレー
ション、動的変換および最適化、透過的リモートコード
実行、仮想ハードウェア環境プログラムのためのコンピ
ュータシステム機能の再マッピング、コード伸張、コー
ド解読等の多種多様の異なるアプリケーションにおいて
使用することができる、動的コンピュータプログラムコ
ード変換、キャッシングおよびリンキングサービスを提
供することができる。以下により詳細に説明するよう
に、DELI100は、透過モード、非透過モードまた
はその2つの組合せで動作する間にそのサービスを提供
することができる。透過モードでは、DELI100は
自動的に、実行プログラムを、実行プログラムが、自身
が直接コンピュータハードウェア上で実行していないと
いうことを知らない方法で制御する。非透過モードで
は、DELI100は、そのサービスをアプリケーショ
ンプログラミングインタフェース(API)を通してア
プリケーションにエクスポートすることにより、アプリ
ケーションが、DELI100がいくつかのシステムイ
ベントに対していかに反応するかを制御することができ
るようにする。 【0014】図1に示すように、DELI100は、少
なくとも1つのアプリケーション102とコンピュータ
ハードウェア104との間に存在する。特定の構成によ
っては、アプリケーション102は、DELIの存在を
知らない1つまたは複数のユーザアプリケーションおよ
び/またはDELI100の存在を知りDELIのサー
ビスを利用するように構成されたクライアント(例えば
エミュレータ)を有することができる。しかしながら、
より一般的には、アプリケーション102は、コンピュ
ータプロセッサによって実行される命令を含む任意のタ
イプのプログラムコードを含む。O/Sが使用される場
合、DELI100は、提供されるサービスの性質によ
って、O/S(図示せず)の上位かまたは下位のいずれ
に存在してもよい。例えば、DELI100は、O/S
の上位で動作する場合、アプリケーションの実行のみを
制御することができる。一方、DELI100は、O/
Sの下位で動作する場合、O/Sとアプリケーションと
の両方からのシステムおよびユーザコードの混合を含む
ことができる命令ストリームにアクセスすることができ
る。ハードウェア104は、あらゆる異なるコンピュー
タシステムコンポーネントを備えることができるが、一
般に少なくともコンピュータプロセッサを備える。 【0015】DELI100は、コア106と、アプリ
ケーションプログラミングインタフェース(API)1
08と、透過モードレイヤ110と、システム制御およ
び構成レイヤ112と、を含む4つの主なコンポーネン
トを含むことができる。概して、コア106は、API
108と透過モードレイヤ110との両方に対して2つ
の主なサービスをエクスポートする。これらサービスの
うちの第1のサービスは、ハードウェア104の命令セ
ットに対応するネイティブコードフラグメントまたはコ
ードフラグメントのキャッシングおよびリンキングに関
連する。第2のサービスは、先にキャッシュされたコー
ドフラグメントを実行することに関連する。API10
8は、アプリケーション102から、動作の非透過モー
ドでコア106のキャッシングおよびリンキングサービ
スへのアクセスを提供する機能をエクスポートする。透
過モードレイヤ110によって、コア106は、動作の
透過モードでのコード実行に対する制御を透過的に取得
するとともにキャッシュされるコードフラグメントをフ
ェッチすることができる。最後に、システム制御および
構成レイヤ112は、たとえばコードのキャッシング、
リンキングおよび最適化のためのポリシーを含む、コア
106の動作に対するポリシーを提供することによっ
て、DELI100の構成を可能にする。これらポリシ
ーは、例えば、アプリケーション102からAPI10
8を介してレイヤ112に提供することができる。シス
テム制御および構成レイヤ112はまた、DELI10
0の透過モードがイネーブルであるか否かを制御し、そ
れによってコア106がAPI108、透過モードレイ
ヤ110、または両方から入力を受取るか否かを判断す
る。 【0016】図1においてさらに示すように、システム
100は、アプリケーション102によってDELI1
00をバイパスするために使用することができるバイパ
ス114を含むことができ、それによってアプリケーシ
ョンは望ましい場合にハードウェア104に対して直接
実行することができる。なお、かかる動作は、DELI
100が利用されてもされなくてもよい任意の実行レイ
ヤであるため、可能とすることができる。 【0017】図1に示すように、コア106は、コアコ
ントローラ116と、キャッシュマネージャ118と、
フラグメントマネージャ120と、最適化マネージャ1
22と、を備える。コアコントローラ116は、タスク
を、それらタスクを完了する責任を有するコア106の
他のコンポーネントに割当てる、ディスパッチャとして
機能する。キャッシュマネージャ118は、フラグメン
トマネージャ120および最適化マネージャ122と共
に、システム制御および構成レイヤ112によって指定
されるポリシーにしたがって、1つまたは複数のコード
キャッシュ124(例えば、キャッシュ1〜n)内のコ
ードフラグメントのキャッシングを制御するメカニズム
(例えば、アルゴリズムのセット)を備える。コア10
6の1つまたは複数のコードキャッシュ124は、例え
ば、ハードウェア104の1つまたは複数のプロセッサ
のハードウェアキャッシュに配置することができ、ある
いは、ハードウェアのメインローカルメモリにおいて生
成することができる。コードキャッシュ124が、プロ
セッサ上のハードウェアキャッシュにマップされる場
合、命令キャッシュリフィルオーバヘッドの低減、メモ
リ帯域幅の増大等により、非常に増大したパフォーマン
スを得ることができる。フラグメントマネージャ120
は、コードキャッシュ124内のコードフラグメントの
処理とフラグメントに対して強いられる変換のタイプと
を指定する。最後に、最適化マネージャ122は、コー
ドフラグメントに対しそれらの実行を最適化するために
適用することができる最適化のセットを含む。 【0018】上述したように、API108は、アプリ
ケーション102から、DELIサービスへのアクセス
を提供する機能をエクスポートする。より詳細には、A
PI108は、一般にDELIの存在を知るクライアン
トを構成するアプリケーション120に対して、コア1
06のキャッシングおよびリンキングサービスをエクス
ポートする。API108によってエクスポートされる
これらサービスにより、アプリケーション102は、
(i)キャッシングのためにコードフラグメントをコア
106に明示的に放出することによりおよび/または
(ii)DELI100に対しそのコードキャッシュ1
24からの特定のコードフラグメントを実行するように
命令することにより、非透過モードでのDELI100
の動作を制御することができる。さらに、API108
はまた、DELI100の動作を初期化および中断する
機能もエクスポートすることができる。例えば、API
108は、DELI100の透過的な動作を開始するこ
とができ、さらにDELIがかかる動作を終了する時を
指示することができる。API108はまた、上述した
ように、アプリケーション102によって指定されるポ
リシーをコア106に(例えば、フラグメントマネージ
ャ102および/または最適化マネージャ122に)引
渡すことにより、DELI100の構成を容易にする。
非透過モードでの動作を容易にする際のAPI108の
使用は、図5に関して後述する。 【0019】図1をさらに参照すると、透過モードレイ
ヤ110は、概して、実行中のアプリケーション102
に対する制御を透過的に取得するために使用されるイン
ジェクタ(injector)126を有する。DELI100
が完全透過モードで動作する時(すなわち、アプリケー
ションがDELIの存在を知らない場合)、インジェク
タ126を使用して、アプリケーションが実行を開始す
る前にDELIをアプリケーション102に投入し(in
ject)、それによってアプリケーションがDELI制御
下で動作することができるようにする。かかる環境で
は、DELI100は、アプリケーション102の実行
可能イメージの変更を避けることにより、例外処理を妨
害することを避ける。制御は、インジェクタ126によ
りいくつかの異なる方法で取得することができ、それら
の各々は、アプリケーションバイナリを、バイナリがロ
ードされる仮想アドレスを変更することなくロードす
る。例として、O/Sカーネルローダを変更することが
でき、それによってDELI100(例えば、共有ライ
ブラリとしてコンパイルされる)が、カーネルローダに
よりアプリケーションの実行可能イメージをロードする
時に自動的にロードされる。代替的に、ユーザレベルロ
ーダを使用して、カーネルローダを変更することなく利
用してアプリケーション102をサスペンドモードでメ
モリにロードし、後にアプリケーションに(例えば、ア
プリケーションスタックに)命令を投入することがで
き、アプリケーションが再開される時に、DELI10
0共有ライブラリをロードする。 【0020】他の代替例では、アプリケーション102
にDELI100をアタッチするためにptraceを
使用することができる。本技術分野において周知である
ように、ptraceは、1つのプロセスが別のプロセ
スを制御することができるようにする、デバッガによっ
てしばしば使用されるメカニズムである。DELI10
0は、ptraceを介してアプリケーション102に
アタッチする別個のプロセスとして構成することがで
き、アプリケーションのバイナリイメージの最上部の実
行スタートアップコード(例えば、crt0)がアプリ
ケーションのエントリポイントを呼出そうとする時点ま
で、アプリケーションを実行する。その後、アプリケー
ション102の実行を中断することができ、DELI1
00を使用してアプリケーション命令をフェッチしアプ
リケーション102に代わってそのアプリケーション命
令を実行することができる。 【0021】さらに別の代替例では、アプリケーション
のテキストセグメントを、実行可能ファイルの別個のコ
ピーに展開することができる。特に、アプリケーション
のバイナリイメージを一時的な場所にコピーすることが
でき、DELIテキストセグメントを最後に追加するこ
とによりアプリケーションのテキストセグメントを拡張
することができ、開始シンボル(すなわち、crt0と
呼ばれるエントリポイント)をDELIエントリポイン
トに変更することができる。そして、結果としての実行
可能ファイルを、execを使用して実行することがで
きる。オリジナルアプリケーションのテキストセグメン
トは依然として、それが通常有するものと同じ仮想アド
レスにロードされているが、DELI100は、実際の
アプリケーション102が開始する前に制御を取得す
る。 【0022】別の実施例では、DELI100は、cr
t0の特別なバージョンを使用することによってアプリ
ケーション102に対する制御を取得することができ
る。本技術分野において周知であるように、crt0コ
ードは、コマンドライン引数をピックアップし、初期ス
タックおよびデータセグメントをセットアップし、その
後開始シンボル(通常、アプリケーション102のメイ
ン(main())関数)の値に対してコールする責任
を有する。アプリケーション102のエントリポイント
を呼出す前に、crt0は動的リンクローダ(dynamic
link loader)dldをマップし、その後、その動的リ
ンクローダが、アプリケーション102が参照する任意
の動的リンクライブラリ(dynamically linked librari
es(DLL))をロードする。crt0のカスタムバー
ジョンを使用して、さらに、DELIコード(それ自体
がDLLとしてコンパイルされる)をマップし、開始シ
ンボルによって定義されるものの代りにDELIのエン
トリポイントを呼出すことができる。 【0023】アプリケーション102に対する制御が取
得される方法に関り無く、その後命令フェッチコントロ
ーラ128を使用して、アプリケーションバイナリコー
ドのフラグメント(例えば、トレース)のコピーを抽出
し(すなわち、フェッチし)、それらをキャッシュする
ためにDELIコア106に渡し、コア106に対して
そのコードキャッシュ124から適当なキャッシュ済み
コピーを実行するよう命令することができる。かかる動
作を容易にするための透過モードレイヤ110の使用
を、図4に関連して以下に説明する。 【0024】本明細書では、DELI100を、透過モ
ードレイヤ110を有するように示し説明したが、当業
者は、本開示を全体として見ることにより、DELIの
動作がAPI108を介してアプリケーション102
(すなわち、クライアント)によってのみ制御される場
合、このレイヤを完全に省略してよい、ということを認
めるであろう。 【0025】上述したように、システム制御および構成
レイヤ112は、コードのキャッシングおよびリンキン
グのためのポリシーを提供することによりDELI10
0の構成を可能にする。DELI100はいかなる特定
のタイプのポリシーまたはポリシー内容にも限定されな
いが、ポリシーは一般に、DELIがいかに挙動するか
を確定する。例えば、レイヤ112は、コードのフラグ
メントがアプリケーション102からいかに抽出される
か、オリジナルコードからいかにフラグメントが生成さ
れるか、より大きいコードフラグメントを形成するため
にいかに複数のコードフラグメントを互いにリンクする
ことができるか等に関するポリシーを提供してよい。レ
イヤのポリシーは、静的とも動的ともすることができ
る。前者の場合、構築時に構成を固定することにより、
ポリシーをDELI100にハードコード化することが
できる。後者の場合、ポリシーを、アプリケーション1
02によりAPI108におけるファンクションコール
を介して動的に提供することができる。ポリシーの実現
は、DELI100が特定のシステムおよび/またはハ
ードウェアイベント(例えば、例外および割込み)に反
応する方法を制御する。上述したポリシーに加えて、シ
ステム制御および構成レイヤ112は、コードキャッシ
ュ124のサイズ、ログファイルが生成されるか否か、
コードフラグメントが最適化されるべきか等を指定する
ことができる。 【0026】システム制御および構成レイヤ112は、
さらに、システムおよびハードウェア機能に向けられた
アプリケーションバイナリコードの命令をインタセプト
することにより、システムおよびハードウェア機能の抽
象化をサポートする。そして、これら命令は、フラグメ
ントマネージャ120により、システム制御および構成
レイヤ112の命令下でフラグメント形成プロセスの一
部として置換えられる。システム制御および構成レイヤ
112は、欠損したまたは欠陥のあるハードウェアに向
けられた命令を識別し、フラグメントマネージャ120
に対してそれらを、同様であるが異なるハードウェア1
04に向けられた対応する命令か、あるいはオリジナル
ハードウェアのソフトウェアシミュレーションと置換え
させる。 【0027】上述したコンポーネントに加えて、DEL
I100は、任意に、例えば、何らかの方法でプログラ
ムバイナリをデコードする責任を有する1つまたは複数
アルゴリズムを備えたデコーディングマネージャ130
をさらに含むことができる。例えば、デコーディングマ
ネージャ130は、アプリケーション102に対して伸
張および/または解読サービスを提供することができ
る。デコーディングマネージャ130が提供される場合
のその使用については、図6を参照して以下に説明す
る。 【0028】図2は、コア106の構成例とその動作と
を示す。この図に示すように、コア106は、API1
08または透過モードレイヤ110から2つのタイプの
要求を受入れる。第1に、関数インタフェースを介して
コードフラグメントをキャッシュしリンクする要求20
0を受入れることができる。かかる要求は、例えば「D
ELI_emit_fragment(tag,fra
gbuf)」という形式の関数を含むことができる。こ
の関数は、コードフラグメントを、DELIキャッシュ
124に格納するためのそのパラメータおよび識別子
(例えば、タグ)として受取る。さらに、コア106
は、キャッシュ124に格納され実行するためにハード
ウェア104に渡されるコードフラグメントを識別す
る、「DELI_execute_fragment
(tag)」等の関数インタフェースを介して、特定の
コードフラグメントタグにおいて実行を開始する要求を
受入れる。 【0029】コアコントローラ116は、これら要求を
処理し、それらを適当なコアモジュールにディスパッチ
する。そして、所与の識別子を有するコードフラグメン
トの放出に対する要求202を、フラグメントマネージ
ャ120に渡すことができる。フラグメントマネージャ
120は、そのフラグメント形成ポリシー204にした
がってコードフラグメントを変換し、ことによると、そ
のインスツルメンテーション(instrumentation)ポリ
シー206にしたがってコードフラグメントをインスツ
ルメント(instrument)し、そのコードフラグメントを
そのフラグメントリンキングポリシー208にしたがっ
て先にキャッシュされたフラグメントとリンクする。例
えば、フラグメントマネージャ120は、キャッシュ1
24内で複数のコードフラグメントをリンクしてよく、
それによって実行がコードフラグメントの実行の最後に
別のコードフラグメントにジャンプするようになり、そ
のためキャッシュからの実行の長さが増大する。これを
達成するために、フラグメントマネージャ120は、キ
ャッシュマネージャ118に対してフラグメント割付命
令210を発行する。そして、フラグメントマネージャ
120は、キャッシュマネージャ118に対し、コード
キャッシュ124の処理済みコードフラグメントを割付
ける要求を送信する。 【0030】キャッシュマネージャ118は、コードフ
ラグメントの割付を制御するものであり、一般にキャッ
シュ空間を管理するためのそれ自体のキャッシュポリシ
ー212を備えている。しかしながら、フラグメントマ
ネージャ120はまた、キャッシュマネージャ118に
対して特定のフラグメント割付解除命令214も発行し
てもよい。例えば、フラグメントマネージャ120は、
現フラグメントを先に割付けたフラグメントと統合する
よう決定してよく、その場合、先のフラグメントは割付
解除される必要のある場合がある。構成によっては、キ
ャッシュマネージャ118とフラグメントマネージャ1
20とは、コードキャッシュ124およびコードフラグ
メントを、2001年5月22日に発行され、「Preemp
tive Replacement Strategy for a Caching Dynamic Tr
anslator Based on Changes in the Translation Rat
e」と題された米国特許第6,237,065号に示さ
れ述べられている方法で管理することができる。代替的
に、コードキャッシュ124およびコードフラグメント
は、2001年1月5日に出願され、「A Partitioned
Code Cache Organization to Exploit Program Localit
y」と題された米国特許出願第09/755,389号
に示され述べられている方法で実行されてもよい。 【0031】フラグメントマネージャ120は、フラグ
メントをキャッシュマネージャ118に渡す前に、フラ
グメントを最適化マネージャ122に渡すことにより
(216)、その最適化ポリシー218にしたがってコ
ードフラグメントの品質を向上させてよい。構成によっ
ては、最適化マネージャ122は、コードフラグメント
を、2001年1月5日に出願され、「A Fast Runtime
Scheme for Removing Dead Code Across Linked Fragm
ents」と題された米国特許出願第09/755,381
号に示され述べられている方法で最適化してよい。代替
的に、最適化マネージャ122は、2001年1月5日
に出願され、「A Memory DisambiguationScheme for Pa
rtially Redundant Load Removal」と題された米国特許
出願第09/755,774号に示され述べられている
方法でコードフラグメントを最適化してよい。特に、最
適化マネージャ122はまた、冗長計算の削除、冗長メ
モリアクセスの削除、プロシージャコール/リターンオ
ーバヘッドを除去するインライン化機能等、以前からあ
るコンパイラ最適化技術を使用して、コードフラグメン
トを最適化してもよい。 【0032】上述したように、フラグメントマネージャ
120は、そのフラグメント形成ポリシー204にした
がってコードフラグメントを変換する。フラグメントマ
ネージャ120によって実行される変換は、例えば、相
対アドレス、分岐アドレス等を変更することによりメモ
リアドレス参照を変化させることによって、コード再割
付を含むことができる。コードフラグメントのレイアウ
トはまた、コードの物理レイアウトをその機能(すなわ
ち、セマンティック)を変化させることなく変化させ
て、変更してもよい。これら変換は、フラグメントマネ
ージャ120により、API108を通しておよび命令
フェッチコントローラ128から受取られるフラグメン
トに対して実行される。 【0033】コードインスツルメンテーションを実行す
るために、フラグメントマネージャ120は、コードフ
ラグメントの実行の頻度、メモリアドレスがアクセスさ
れる頻度等に関するデータ等、コードプロファイリング
のためのインスツルメンテーションポリシー206にし
たがってデータを収集する。フラグメント形成または割
付解除を容易にするために、プログラムカウンタを使用
してこれら統計値を収集することができる。これらポリ
シーは、API108を介して送信されるかまたはDE
LI構築時に確立されるポリシー命令を受取る、システ
ム制御および構成レイヤ112によって構成される。ポ
リシーは、フラグメントを生成し、インスツルメント
し、最適化し、リンクするために、異なる方法に対する
オプションを含んでよく、あるいは、ポリシーは、単
に、これらタスクを実行するためのDELI100内の
ハードコード化アルゴリズムであってよい。 【0034】DELIコア106によって受入れられる
第2のタイプの要求は、所与の識別子(例えば、タグ)
によって識別されるフラグメントを実行する要求220
である。かかる場合、コアコントローラ116は、フラ
グメントマネージャ120に対してルックアップ要求2
22を発行し、フラグメントマネージャ120は、フラ
グメントが目下キャッシュ124に存在しアクティブで
ある場合、対応するコードキャッシュアドレス224を
返す。例として、フラグメントマネージャ120は、コ
ードフラグメントの位置を識別するためにタグを使用す
ることができる、存在しアクティブなコードフラグメン
トのルックアップテーブルを維持することができる。代
替的に、フラグメントマネージャ120またはキャッシ
ュマネージャ118は、コードフラグメントが存在しア
クティブであるか否かを追跡する他のいかなる適当な技
術も使用することができる。フラグメントが目下キャッ
シュ124に存在せずアクティブでない場合、フラグメ
ントマネージャ120は、コアコントローラ116に対
してエラーコードを返し、コアコントローラ116は、
最初の要求側にフラグメントタグをキャッシュミスアド
レスとして返す(226)。一方、フラグメントが目下
存在しアクティブである場合、コアコントローラ116
は、キャッシュマネージャ118に対し最初の要求をそ
のキャッシュアドレスとともにパッチする(228)。
それによって、キャッシュマネージャ118は、そのコ
ードキャッシュ124におけるアドレス指定されたコー
ドフラグメントに制御を引渡すことによって、アドレス
指定されたコードフラグメントを実行する。そして、キ
ャッシュミスが発生するまで、すなわち実行される次の
アプリケーションアドレスに対するコピーが目下キャッ
シュに存在しなくなるまで、実行はコードキャッシュ1
24に焦点を当て続ける。上記状態は、例えば実行中の
コードのコードキャッシュ124から退避しようとする
試みによって検出することができる。キャッシュミス
は、キャッシュマネージャ118からコアコントローラ
116に報告され(230)、その後最初の要求側に報
告される(226)。 【0035】図3は、DELI100が実行することが
できるコンピュータシステム300のアーキテクチャ例
を示す略図である。概して、コンピュータシステム30
0は、デスクトップコンピュータ、ポータブルコンピュ
ータ、専用サーバコンピュータ、マルチプロセッサコン
ピューティング機器、携帯電話、個人情報端末(PD
A)、ハンドヘルドまたはペンベースコンピュータ等、
多種多様の有線および/または無線コンピューティング
機器のうちの任意の1つを構成することができる。コン
ピュータシステム300は、その特定の構成に関らず、
例えば、処理装置302、メモリ304、1つまたは複
数のユーザインタフェース装置306、ディスプレイ3
08、1つまたは複数の入出力(I/O)装置310お
よび1つまたは複数のネットワーキング装置312を備
えることができ、それらは各々、ローカルインタフェー
ス314に接続される。 【0036】処理装置302は、カスタムメイドかまた
は市販のプロセッサと、コンピュータシステム300と
関連するいくつかのプロセッサの中の中央処理装置(C
PU)かまたは補助プロセッサと、半導体ベースのマイ
クロプロセッサ(マイクロチップの形態)と、マイクロ
プロセッサと、1つまたは複数の特定用途向け集積回路
(ASIC)と、複数の適当に構成されたデジタル論理
ゲートと、個別にかつあらゆる組合せでコンピューティ
ングシステムの動作全体を調整するための個別要素を備
えた、他の周知の電気的構成と、を含むことができる。 【0037】メモリ304は、揮発性メモリ素子(例え
ば、ランダムアクセスメモリ(DRAM、SRAM等の
RAM))と不揮発性メモリ素子(例えば、ROM、ハ
ードドライブ、テープ、CDROM等)との組合せのう
ちの任意の1つを含むことができる。一般に、メモリ3
04は、O/S316と、1つまたは複数のアプリケー
ション102(例えば、ユーザアプリケーションおよび
/またはクライアント)と、すでに詳細に説明したDE
LI100と、を含む。当業者は、メモリ304が簡潔
にする目的のために省略した他のコンポーネントを含む
ことができる(一般には含む)、ということを認めるで
あろう。 【0038】1つまたは複数のユーザインタフェース装
置306は、ユーザがコンピューティングシステム30
0と対話することができるコンポーネントを備える。例
えば、コンピューティングシステム300がパーソナル
コンピュータ(PC)を構成する場合、これらコンポー
ネントはキーボードとマウスを含むことができる。コン
ピューティングシステム300がハンドヘルド機器(例
えば、PDA、携帯電話)を構成する場合、これらコン
ポーネントは、ファンクションキーまたはボタン、タッ
チセンシティブスクリーン、スタイラス等を含むことが
できる。ディスプレイ308は、PCの場合はコンピュ
ータモニタまたはプラズマスクリーン、またはハンドヘ
ルド機器の場合は液晶ディスプレイ(LCD)を含むこ
とができる。 【0039】図3を参照すると、1つまたは複数のI/
O装置310は、コンピューティングシステム300の
別のシステムおよび/または機器への接続を容易にする
ように適合されており、したがって、1つまたは複数の
シリアル、パラレル、小型コンピュータ用周辺機器イン
タフェース(SCSI)、ユニバーサルシリアルバス
(USB)、IEEE1394(例えば、Firewi
re(登録商標))および/またはパーソナルエリアネ
ットワーク(PAN)コンポーネントを含んでよい。ネ
ットワークインタフェース装置312は、ネットワーク
を介してデータを送信および/または受信するために使
用されるあらゆるコンポーネントを備える。例として、
ネットワークインタフェース装置312は、入力と出力
とをともに通信することができる装置、例えば変調器/
復調器(例えば、モデム)、無線(例えば、無線周波数
(RF))送受信機、電話インタフェース、ブリッジ、
ルータ、ネットワークカード等を含む。 【0040】本明細書では、あらゆるソフトウェアおよ
び/またはファームウェアを説明した。このソフトウェ
アおよび/またはファームウェアを、任意のコンピュー
タ関連システムまたは方法によるかまたはそれと関連し
て使用するために、任意のコンピュータ読取可能媒体に
格納することができる、ということが理解される。この
文書のコンテキストにおいて、コンピュータ読取り可能
媒体は、コンピュータ関連システムまたは方法によるか
またはそれと関連して使用されるコンピュータプログラ
ムを内蔵するかまたは格納することができる、電子、磁
気、光あるいは他の物理装置または手段を示す。これら
プログラムは、コンピュータベースシステム、プロセッ
サ内蔵システム、あるいは命令実行システム、装置また
は機器からの命令をフェッチしそれら命令を実行するこ
とができる他のシステム等の、命令実行システム、機器
または装置によるかまたはそれと関連して使用されるた
めに、任意のコンピュータ読取可能媒体において具体化
することができる。本文書のコンテキストにおいて、
「コンピュータ読取可能媒体」は、命令実行システム、
機器または装置によるかまたはそれに関連して使用され
るプログラムを格納し、通信し、伝播し、または移送す
ることができるいかなる手段ともすることができる。 【0041】例えば、コンピュータ読取可能媒体は、限
定されないが、電子、磁気、光、電磁気、赤外線または
半導体のシステム、機器、装置または伝播媒体とするこ
とができる。コンピュータ読取可能媒体のより特定の例
(非網羅的リスト)には、1つまたは複数のワイヤを有
する電気的接続、ポータブルコンピュータディスケッ
ト、ランダムアクセスメモリ(RAM)、リードオンリ
メモリ(ROM)、消去可能プログラム可能リードオン
リメモリ(EPROM、EEPROMまたはフラッシュ
メモリ)、光ファイバおよびポータブルコンパクトディ
スクリードオンリメモリ(CDROM)が含まれる。な
お、コンピュータ読取可能媒体は、プログラムが印刷さ
れた用紙または他の適当な媒体とさえすることができ
る。それは、プログラムを、例えば用紙または他の媒体
の光学的走査により電子的に取込み、その後、コンパイ
ルし、解釈しまたは必要であれば他の適当な方法で処理
した後、コンピュータメモリに格納することができるた
めである。 【0042】DELI100の一般的な性質を上で説明
したが、ここで図4および図5を参照してDELIの動
作の実施例を説明する。上述したように、DELI10
0は、2つの一般的な動作モード、すなわち透過モード
および非透過モードと、それらの組合せと、において動
作する。これらモードでの動作を説明するために、フロ
ーチャートを提供する。これらフローチャートにおける
いずれのプロセスステップまたはブロックも、プロセス
における特定の論理機能またはステップを実現するため
の1つまたは複数の実行可能命令を含む、モジュール、
セグメントまたはコードの一部を表す、ということは理
解されなければならない。特定のプロセスステップ例を
示すが、代替実現も可能である、ということが認められ
よう。さらに、ステップは、関係する機能により、実質
的に同時かまたは逆の順序を含む、示しまたは説明する
順序ではない順序で実行されされてよい。 【0043】概して、DELI100が透過的にかまた
は非透過的にアプリケーション102の実行に対する制
御を取得したか否かに関らず、アプリケーションは、ハ
ードウェア104に対して直接には実行しない。むし
ろ、アプリケーションコードは、コードキャッシュ12
4に保持されてよいコードフラグメントの形式でDEL
I100を通して実行する。 【0044】図4は、透過モードでのDELI動作の簡
単な実施例を示す。より詳細には、図4は、アプリケー
ション102がDELIの存在を知らない完全透過モー
ドでのDELIの動作を示す。ブロック400から始ま
り、DELI100がまず開始される。透過モードで動
作している場合、この開始は、アプリケーション102
の開始からもたらすことができる。その開始時、DEL
I100は、ブロック402に示すように、透過モード
レイヤ110のインジェクタ126によってアプリケー
ション102に投入され、それによってDELIはアプ
リケーションとその実行とに対する制御を取得する。上
述したように、この制御を取得することができるあらゆ
る異なる方法がある。 【0045】DELI100がアプリケーション102
に対する制御を取得すると、DELIを使用して、上述
したもの等のいくつかの異なるサービスのうちの任意の
1つを提供することができる。例えば、DELI100
は、ハードウェアおよび/またはソフトウェアエミュレ
ーション、動的変換および最適化、透過的リモートコー
ド実行、仮想ハードウェア環境プログラムのためのコン
ピュータシステム機能の再マッピング、コード伸張、コ
ード解読等を容易にすることができる。これら異なるサ
ービスは、各々コードキャッシュ124内のプログラム
コードフラグメントのキャッシングおよびリンキングを
含む。アプリケーションバイナリからコピーされるコー
ドのいくつかのフラグメントをキャッシュし、それらを
何らかの方法で変換することにより、後にコードキャッ
シュ124からの変換済みコードを実行することによっ
て所望のサービスを提供することができる。 【0046】DELI100は、コードをキャッシュす
る前に、コードのいずれの特定のフラグメントをキャッ
シュするかを確定しなければならない。完全透過モード
で実行している場合、アプリケーション102はDEL
I100を知らないことから、DELIは、いずれのコ
ードフラグメントをキャッシュするかに関しアプリケー
ションから指示を受取らない。コードのキャッシング
を、DELI構築時に生成されたポリシーを通して指示
することができるが、より好ましくは、DELI100
は、少なくとも部分的にこれらの確定を単独で行う能力
を有する。DELI100は、これを、ブロック404
に示すように、アプリケーション102によるコードの
実行を監視することによって行うことができる。そのよ
うに行う際に、DELI100は、例えばいずれのフラ
グメントが最も頻繁に使用されるかを判断することによ
り、例えばいずれのコードフラグメントがアプリケーシ
ョン102に対して最も有用であるかに関する情報を収
集することができる。 【0047】DELI100の制御下でアプリケーショ
ン102によりあらゆるコードフラグメントが実行され
るため、DELIは、実行されるコードの各部を「見る
(sees)」。したがって、DELI100は、監視プロ
セスを通して、いずれのコードフラグメントが最も頻繁
に使用されるかを判断することができる。そして、DE
LI100は、コードのいずれの部分が「ホット(ho
t)」である、すなわち、システム制御および構成レイ
ヤ112によって提供されるポリシーに関してアプリケ
ーション実行に最も重要であるかの判断を行うことがで
きる。上述したように、この判断は、実行インスタンス
を追跡するプログラムカウンタを使用して行うことがで
きる。当業者は、コードのいずれの部分がホットである
かを判断するためにあらゆる他の方法を使用することが
できる、ということを認めるであろう。この判断を行う
ことができる方法の例は、1998年11月5日に出願
され、「Method for Selecting Active Code Traces fo
r Translation in a CachingDynamic Translator」と題
された、米国特許出願第09/186,945号と、1
999年5月14日に出願され、「Low Overhead Specu
lative Selection of Hot Traces in a Caching Dynami
c Translator」と題された米国特許出願第09/31
2,296号と、に述べられている。 【0048】図4をさらに参照すると、各コードフラグ
メントが実行される際に、DELI100は、判断要素
406に示すように、関連するコードフラグメントが先
にキャッシュされているか否かを判断することができ
る。そうである場合、DELI100は、キャッシュ済
み(一般に変換済み)コードを含むコードキャッシュ1
24にジャンプし、ブロック408に示すように、この
コードが、オリジナルアプリケーションコードの代りに
ハードウェア104によって実行される。コードがキャ
ッシュされているか否かの判断は、上述したように、ネ
イティブアプリケーションコードとコードキャッシュ1
24内でキャッシュされた類似物との関連を識別する識
別子(例えば、タグ)を参照して行うことができる。そ
して、キャッシュされていなかった(すなわち、キャッ
シュミス)コードに対して参照するまで、コードキャッ
シュ124に存在するコードのリンクされたフラグメン
トの実行を含む、キャッシュ済みコードの実行が継続す
る。判断要素410を参照すると、未キャッシュコード
に対する参照がある場合、DELI100はアプリケー
ションコードにジャンプして戻り、ブロック412に示
すようにそのコードの実行が再開される。この時、DE
LI100は、この実行の監視を再開することができる
(ブロック404)。 【0049】判断要素406に戻ると、DELI100
が、関連するコードフラグメントがコードキャッシュ1
24に存在していないと判断した場合、フローは判断要
素414に進み、所定のポリシーに関してコードフラグ
メントがホットであるか否かが判断される。コードがホ
ットでない場合、フローはブロック404に戻り、アプ
リケーションコード実行の監視を継続する。一方、コー
ドがホットである場合、ブロック416に示すように、
透過モードレイヤ110の命令フェッチコントローラ1
28を使用してフラグメントをフェッチすることによ
り、コードフラグメントがコピーされる。 【0050】この時点で、ブロック418に示すよう
に、コードフラグメントを何らかの方法で変換すること
ができる。さらに、キャッシュ124内のコードフラグ
メントを、コードリンキングのために確立されたポリシ
ーにしたがってリンクすることができる。コード変換の
性質は、DELI100が提供すべきサービスのタイプ
によって決まる。例えば、DELI100が単にアプリ
ケーション実行を最適化するものである場合、この変換
は、パフォーマンスを向上させるためにコードを再配置
および/または再構成することを含むことができる。提
供される変換の性質に関らず、コード構造は、基礎にあ
るセマンティックを変更することなくある程度変更され
る。コードフラグメントが変換されると、ブロック42
0に示すように、変換済みコードをコードキャッシュ1
24内にキャッシュすることができ、フローが上述した
ブロック408に進むことによって、DELI100内
で実行することができる。 【0051】上述したように、DELI100は、非透
過モードでは異なって動作する。概して、DELI10
0は、非透過モードで動作している場合、例えば、アプ
リケーション102がアクセスすることができるAPI
108の機能をエクスポートするDLLまたは静的リン
クモジュール(statically linked module)として動作
してよい。非透過モードでは、アプリケーション102
(すなわち、クライアント)は、DELI100を知っ
ており、DELIのサービスを利用するように構成され
る。最も簡単な場合、クライアント(例えば、エミュレ
ータ)は、API108を介してDELI動作のすべて
の態様を制御する。かかる場合、DELI100を利用
して、API108を介してクライアントによって提供
される明示的な命令にしたがってコードをキャッシュ
し、リンクし、最適化することができる。例えば、DE
LI100に対し、アプリケーション実行中に最も頻繁
に使用されると考えられるいくつかのコードフラグメン
トをキャッシュするように命令することができる。これ
は、例えば、タグを識別することによりDELI100
にコードの位置を提供することによって達成することが
できる。かかる場合、DELI100は、API108
によって命令されるようにコードフラグメントを監視す
るのではなく記録する。さらに、クライアントは、DE
LIに対して適用可能なタグを識別することにより、A
PI108を介していずれのキャッシュ済みフラグメン
トを実行すべきかに関し、DELI100に対して命令
することができる。 【0052】しかしながら、より一般的なシナリオで
は、クライアントはDELI100に対しそのサービス
を透過的に提供するように要求する。かかる場合、クラ
イアントは、DELI100の動作を呼出すと共に、D
ELIがいつその動作を停止するかに関する命令を提供
する。図5は、このように動作の実施例を提供する。 【0053】ブロック500で開始して、DELI10
0は開始される。非透過モードでは、この開始は、「D
ELI_START」等の開始コマンドが、DELI1
00を呼出すAPI108によって引渡される時に発生
する。開始されると、ブロック502に示すように、透
過モードレイヤ110を起動することができ、フローは
図4に関して上述した透過モードと同様に継続すること
ができる。したがって、DELI100は、アプリケー
ション(クライアント)によるコードの実行を監視し
(504)、コードフラグメントが先にキャッシュされ
ているか否かを判断し(506)、適用可能である場合
はキャッシュ済みコードを実行し(508)、ホットな
コードフラグメントをコピーし(516)、コピーされ
たコードフラグメントを変換し(518)、変換済みコ
ードフラグメントをキャッシュする(520)ことがで
きる。DELI100の動作は、このように、クライア
ントの要求にしたがってDELIに動作を停止させる状
況になるまで継続する。例として、この割込みは、AP
I108を介してDELI100に送信されるファンク
ションコールの最後に配置された「DELI_STO
P」コマンドによって達成することができる。 【0054】上述したように、DELI100を使用し
てプログラムバイナリのデコーディングを容易にするこ
とができる。例えば、DELI100を使用して、圧縮
プログラムコードを伸張および実行することができる。
上述したように、現伸張/実行ソリューションには、例
えばシステムパフォーマンスが低下することと相対的に
大容量のメモリが必要であることとを含む、いくつかの
問題がある。しかしながら、これら問題は、DELI1
00が使用される場合に回避することができる。それ
は、DELIが、コードフラグメントおよび個々の命令
等、コードの非常にわずかな部分を制御するためであ
る。動作時、DELI100を使用して、コードフラグ
メントを伸張すると共に、最も頻繁に使用されるコード
フラグメントをコードキャッシュ124内に伸張された
形式でキャッシュすることができる。かかる動作によ
り、アプリケーションコードのより小さい部分が伸張さ
れ、それによって伸張オーバヘッドが低減し必要な利用
可能システムメモリが低減される。さらに、最も頻繁に
使用されるコードフラグメントが伸張形式でキャッシュ
されるため、必要な動的伸張が著しく小さくなり、それ
によってパフォーマンスが向上する。 【0055】アプリケーションバイナリのデコーディン
グおよび実行を提供する際のDELI100の動作の一
実施例を図6に示す。この実施例では、デコーディング
サービスは、動作の透過モードで提供される。デコーデ
ィングを伸張という点で説明するが、当業者は、プログ
ラムコード解読等、デコーディングの他の形式を提供す
ることができる、ということを認めるであろう。ブロッ
ク600で開始して、DELI100は開始され、ブロ
ック602に示すように、その実行に対する制御を取得
するように開始する前にアプリケーション102に投入
される。この制御により、DELI100は、ブロック
604に示すように、最終的に実行されるあらゆる圧縮
されたアプリケーション命令をインタセプトすることが
できる。 【0056】図4に関して説明した動作のモードと同様
に、DELI100は、コードの実行を監視し、それに
よっていずれのコードフラグメントをキャッシュするか
を判断することができる。したがって、上述したよう
に、DELI100は、判断要素606に示すように、
関連するコードフラグメントが先に伸張されキャッシュ
されているか否かを判断することができる。そうである
場合、DELI100は、伸張コードを含むコードキャ
ッシュ124にジャンプし、ブロック608に示すよう
に、このコードがハードウェア104によりオリジナル
アプリケーションコードの代りに実行される。この場合
もまた、未キャッシュコードが参照されるまで、キャッ
シュ済みコードの実行が継続(610)し、かかるコー
ドが参照された時点で、DELI100はアプリケーシ
ョンコードとブロック604とに戻るようジャンプす
る。 【0057】再び判断要素606を参照すると、コード
キャッシュ124に関連するコードフラグメントが存在
しない場合、フローはブロック612に進み、命令がD
ELI100によって伸張され(すなわちデコードさ
れ)、それによって命令を評価することができる。例と
して、この伸張を、デコーディングマネージャ130に
よって提供することができる。この伸張(すなわちデコ
ーディング)を、DELI100のデコーディングマネ
ージャ130によって実行されるものとして説明する
が、当業者は、この機能を、代替的に、クライアントア
プリケーションのソフトウェアコンポーネントかまたは
基礎にあるコンピューティングシステムのハードウェア
コンポーネント等の別のコンポーネントによって実行す
ることができる、ということを認めるであろう。命令が
伸張されると、ブロック614に示すように、DELI
100は、例えば1つまたは複数の命令バッファに対し
命令のコピーを生成する。次いで、判断要素616を参
照すると、DELI100は、アプリケーション命令が
所定ポリシーに関してホットであるか否かを判断する。
命令がホットでない場合、フローはブロック618に進
み、コピーされた伸張命令が実行される。しかしながら
命令がホットである場合、伸張命令は所望に応じて変換
され(620)、次に特定機能が必要とされる時の実行
のために利用可能となるように、伸張形式でキャッシュ
される(622)。 【0058】かかる伸張および実行サービスもまた、D
ELI100によって非透過モードで動作中に提供する
ことができる。例えば、アプリケーション102(すな
わち、クライアント)かまたは別のコンポーネント(図
示せず)を、アプリケーションコードを伸張し、最も頻
繁に使用される伸張コードをキャッシュするためにDE
LI100を呼出すように構成することができる。かか
るシナリオでは、アプリケーション102によって実行
されるコードが先に圧縮されたコードであることを除い
て、フローは図5に示すものと類似する。 【0059】デコーディングサービスが、DELI10
0によって透過モードで提供されるか非透過モードで提
供されるかに関らず、システムパフォーマンスとメモリ
利用との両方の意味で、先の解決法に比較していくつか
の利点を達成することができる。例えば、伸張/実行サ
ービスが提供される場合、コードの多くの部分が伸張さ
れなければならないソフトウェアソリューションでもた
らされる50%程度のペナルティに比較して、およそ1
0%の伸張ペナルティが観察され得る。メモリの点で
は、アプリケーションコードの大部分が圧縮形式のまま
であるため、現ソフトウェアソリューションと比較して
実行中に必要なメモリが著しく少なくなる。この発明
は、例として次のような実施形態を含む。 【0060】(1)プログラム命令をデコードする方法
であって、プログラム命令をインタセプトするステップ
(604)と、関連する命令がデコードされかつキャッ
シュされているか否かを判断するステップ(606)
と、関連する命令がキャッシュされていない場合、該プ
ログラム命令をデコードしコピーするステップ(61
2、614)と、を含む方法。 【0061】(2)前記プログラム命令をデコードする
前記ステップは、該命令を伸張することを含む(1)記
載の方法。 【0062】(3)前記プログラム命令をデコードする
前記ステップは、該命令を解読することを含む(1)記
載の方法。 【0063】(4)関連する命令がデコードされかつキ
ャッシュされている場合、それらキャッシュされデコー
ドされた命令を実行するステップ(608)をさらに含
む(1)記載の方法。 【0064】(5)前記デコードされかつコピーされた
命令が頻繁に使用される命令であるか否かを判断するス
テップ(616)をさらに含む(1)記載の方法。 【0065】(6)前記デコードされかつコピーされた
命令が頻繁に使用される命令である場合、それら命令を
キャッシュするステップ(620)をさらに含む(5)
記載の方法。 【0066】(7)プログラム命令をデコードするシス
テムであって、プログラム命令をインタセプトする手段
と、関連する命令がデコードされかつキャッシュされて
いるか否かを判断する手段と、キャッシュされていない
前記プログラム命令をデコードしコピーする手段と、を
具備するシステム。 【0067】(8)前記デコードされかつコピーされた
命令が頻繁に使用される命令であるか否かを判断する手
段をさらに具備する(7)記載のシステム。 【0068】(9)少なくとも1つのアプリケーション
とコンピューティングシステムハードウェアとの間に存
在するダイナミック・エグゼキューション・レイヤ・イ
ンタフェース(DELI)であって、いくつかのアプリ
ケーションコードフラグメントをキャッシュおよび実行
するように構成されたコアと、該コアのキャッシングお
よび実行機能に対するアクセスを提供するように構成さ
れたアプリケーションプログラミングインタフェース
と、前記コアの動作のためのポリシーを提供するように
構成されたシステム制御および構成レイヤと、を具備す
るDELI。 【0069】(10)アプリケーション命令をデコード
するように構成されたデコーディングマネージャをさら
に具備する(9)記載のDELI。 【0070】本発明の特定の実施形態を、例示の目的の
ために上記説明および図面において詳細に開示したが、
当業者には、その変形および変更を、併出の特許請求の
範囲に示すような本発明の範囲から逸脱することなく行
うことができる、ということが理解されよう。例えば、
DELIを、デコーディングを提供しサービスを実行す
るのみであるものとして上に説明したが、あらゆる他の
サービスをDELIによって同時に提供することができ
ることに留意されたい。例えば、DELIによって提供
されるデコーディングおよび実行サービスを、例えばク
ライアントによって促進されるハードウェアまたはソフ
トウェアエミュレーションを含む他のタスクを実行する
時に利用することができる。本開示は、かかる応用を含
むように意図されている。
【図面の簡単な説明】 【図1】アプリケーションおよびオペレーティングシス
テムに動的変換サービスを提供するためにコンピュータ
システム上で実行するダイナミック・エグゼキューショ
ン・レイヤ・インタフェース(DELI)の実施例を示
すブロック図である。 【図2】図1に示すDELIのコアの構成および動作例
のブロック図である。 【図3】図1に示すDELIを実行することができるコ
ンピュータシステム例のブロック図である。 【図4】透過モードで動作中の図1に示すDELIの実
施例を示すフローチャートである。 【図5】非透過モードで動作中の図1に示すDELIの
実施例を示すフローチャートである。 【図6】デコーディングおよび実行サービスを提供する
ように動作中の図1に示すDELIの実施例を示すフロ
ーチャートである。
フロントページの続き Fターム(参考) 5B033 AA07 BA01 BA03 5B081 DD00

Claims (1)

  1. 【特許請求の範囲】 【請求項1】 プログラム命令をデコードする方法であ
    って、 プログラム命令をインタセプトするステップと、 関連する命令がデコードされかつキャッシュされている
    か否かを判断するステップと、 関連する命令がキャッシュされていない場合、該プログ
    ラム命令をデコードしコピーするステップと、を含む方
    法。
JP2002322121A 2001-11-15 2002-11-06 プログラムバイナリをデコードおよび実行する方法 Pending JP2003157170A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/999,451 US6920550B2 (en) 2001-11-15 2001-11-15 System and method for decoding and executing program binaries
US09/999,451 2001-11-15

Publications (1)

Publication Number Publication Date
JP2003157170A true JP2003157170A (ja) 2003-05-30

Family

ID=25546348

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002322121A Pending JP2003157170A (ja) 2001-11-15 2002-11-06 プログラムバイナリをデコードおよび実行する方法

Country Status (3)

Country Link
US (1) US6920550B2 (ja)
EP (1) EP1313008A1 (ja)
JP (1) JP2003157170A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8448158B2 (en) 2005-02-03 2013-05-21 Mitsubishi Electric Corporation Program code generation support device and method, program execution device and method, and program code compression processing device and method and program thereof
JP2019133579A (ja) * 2018-02-02 2019-08-08 富士通株式会社 処理プログラム、およびイベント処理方法

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6915513B2 (en) * 2001-11-29 2005-07-05 Hewlett-Packard Development Company, L.P. System and method for dynamically replacing code
US20030101381A1 (en) * 2001-11-29 2003-05-29 Nikolay Mateev System and method for virus checking software
US6907519B2 (en) 2001-11-29 2005-06-14 Hewlett-Packard Development Company, L.P. Systems and methods for integrating emulated and native code
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
US7051340B2 (en) * 2001-11-29 2006-05-23 Hewlett-Packard Development Company, L.P. System and method for isolating applications from each other
US20030135851A1 (en) * 2002-01-17 2003-07-17 Laura Dickey Method and system for concentration of applications during installation in target devices
US20030182653A1 (en) * 2002-03-22 2003-09-25 Giuseppe Desoli Systems and methods for verifying correct execution of emulated code via dynamic state verification
US8086438B2 (en) * 2002-03-27 2011-12-27 Synopsys, Inc. Method and system for instruction-set architecture simulation using just in time compilation
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
GB2393274B (en) * 2002-09-20 2006-03-15 Advanced Risc Mach Ltd Data processing system having an external instruction set and an internal instruction set
US20050003810A1 (en) * 2003-05-28 2005-01-06 Sun Microsystems, Inc. Method and system for optimizing software program start-up time
US7194732B2 (en) * 2003-06-26 2007-03-20 Hewlett-Packard Development Company, L.P. System and method for facilitating profiling an application
US8677312B1 (en) 2004-03-30 2014-03-18 Synopsys, Inc. Generation of compiler description from architecture description
US8689202B1 (en) 2004-03-30 2014-04-01 Synopsys, Inc. Scheduling of instructions
US9280326B1 (en) 2004-05-26 2016-03-08 Synopsys, Inc. Compiler retargeting based on instruction semantic models
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
US7945958B2 (en) * 2005-06-07 2011-05-17 Vmware, Inc. Constraint injection system for immunizing software programs against vulnerabilities and attacks
US8014726B1 (en) 2006-10-02 2011-09-06 The Nielsen Company (U.S.), Llc Method and system for collecting wireless information transparently and non-intrusively
US8260252B2 (en) 2006-10-02 2012-09-04 The Nielsen Company (Us), Llc Method and apparatus for collecting information about portable device usage
AU2008205545B2 (en) * 2007-01-17 2012-03-08 Intertrust Technologies Corporation Methods, systems, and apparatus for fragmented file sharing
US20080221968A1 (en) * 2007-03-07 2008-09-11 Tamara Gaffney Method and system for interacting with users of portable devices
US8321556B1 (en) 2007-07-09 2012-11-27 The Nielsen Company (Us), Llc Method and system for collecting data on a wireless device
US8424071B2 (en) * 2009-04-15 2013-04-16 International Business Machines Corporation Method and apparatus for secure and reliable computing
SG175917A1 (en) 2009-05-08 2011-12-29 Zokem Oy System and method for behavioural and contextual data analytics
CN103154928B (zh) 2010-06-24 2016-08-03 奥比融移动有限公司 网络服务器系统及其相关方法
US8340685B2 (en) 2010-08-25 2012-12-25 The Nielsen Company (Us), Llc Methods, systems and apparatus to generate market segmentation data with anonymous location data

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2293670A (en) * 1994-08-31 1996-04-03 Hewlett Packard Co Instruction cache
US5619665A (en) * 1995-04-13 1997-04-08 Intrnational Business Machines Corporation Method and apparatus for the transparent emulation of an existing instruction-set architecture by an arbitrary underlying instruction-set architecture
US5768593A (en) * 1996-03-22 1998-06-16 Connectix Corporation Dynamic cross-compilation system and method
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
US6223254B1 (en) * 1998-12-04 2001-04-24 Stmicroelectronics, Inc. Parcel cache
US6820255B2 (en) * 1999-02-17 2004-11-16 Elbrus International Method for fast execution of translated binary code utilizing database cache for low-level code correspondence
US6915513B2 (en) * 2001-11-29 2005-07-05 Hewlett-Packard Development Company, L.P. System and method for dynamically replacing code
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
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
US6907519B2 (en) * 2001-11-29 2005-06-14 Hewlett-Packard Development Company, L.P. Systems and methods for integrating emulated and 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
US20040025165A1 (en) * 2002-08-05 2004-02-05 Giuseppe Desoli Systems and methods for extending operating system functionality for an application

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8448158B2 (en) 2005-02-03 2013-05-21 Mitsubishi Electric Corporation Program code generation support device and method, program execution device and method, and program code compression processing device and method and program thereof
US8527967B2 (en) 2005-02-03 2013-09-03 Mitsubishi Electric Corporation Program code compression processing device and method and program thereof
US8572557B2 (en) 2005-02-03 2013-10-29 Mitsubishi Electric Corporation Program code generation support device and method, program execution device and method, and program code compression processing device and method and program thereof
JP2019133579A (ja) * 2018-02-02 2019-08-08 富士通株式会社 処理プログラム、およびイベント処理方法
JP7087420B2 (ja) 2018-02-02 2022-06-21 富士通株式会社 処理プログラム、およびイベント処理方法

Also Published As

Publication number Publication date
US6920550B2 (en) 2005-07-19
EP1313008A1 (en) 2003-05-21
US20030093650A1 (en) 2003-05-15

Similar Documents

Publication Publication Date Title
JP2003157170A (ja) プログラムバイナリをデコードおよび実行する方法
JP2004070944A (ja) アプリケーション向けにオペレーティングシステム機能を拡張するシステムおよび方法
US6928536B2 (en) Dynamic execution layer interface for replacing instructions requiring unavailable hardware functionality with patch code and caching
US7051340B2 (en) System and method for isolating applications from each other
US6907519B2 (en) Systems and methods for integrating emulated and native code
CN102279765B (zh) 预编译托存托管代码
KR102059219B1 (ko) 컴퓨터 시스템과 관련된 하드웨어 자원의 가상화를 위한 방법, 시스템 및 실행가능한 코드 조각
KR101702700B1 (ko) 고속 컴퓨터 시동
WO2020078314A1 (zh) 加速应用的冷启动的方法、装置和终端
US9052993B2 (en) Multi-core processor system, control program, and control method
JP2003196108A (ja) 動的コードキャッシングおよび変形を通してコンピュータシステムのエミュレーションをサポートするシステムおよび方法
US20040098724A1 (en) Associating a native resource with an application
JP5980916B2 (ja) コンピュータにより実行される方法及びコンピュータシステム
JP2010129080A (ja) ソフトウェア実行システムおよびソフトウェアの実行方法
JP2005216288A (ja) アプリケーション環境をクローニングするプロセスにおけるインクリメンタルプロファイリングデータを、ダイナミックかつ持続的にトラッキングするシステムおよび方法
KR20150070121A (ko) Bpram을 사용한 소프트웨어 애플리케이션들의 레이아웃 및 실행
CN104583948A (zh) 使用bpram来布局和执行操作系统
WO2012010419A1 (en) A string cache file for optimizing memory usage in a java virtual machine
US20160378452A1 (en) Policy-Based Compression of Machine Code Generated by a Virtual Machine
CN119376755A (zh) 一种应用程序优化方法及电子设备
CN108304248A (zh) 一种多系统虚拟化的移动设备
CN101322106A (zh) 用于在可控运行时环境中进行基于硬件的动态逸出检测的方法和装置
US10817224B2 (en) Preemptive decompression scheduling for a NAND storage device
KR100493893B1 (ko) 자바 프로그램에서 클래스 로딩 과정을 단축시키는 시스템및 방법
CN119668826A (zh) 预取参数配置与缓存预取方法、物理机及处理器

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20051104

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20060831

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060905

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20070417