(57)【要約】【課題】  インプレース実行可能なファイルの仮想マシンへのロードを促進するシステムを提供する。【解決手段】  本発明のシステム（１００）は、インプレース実行可能なファイル（１０４）を仮想マシン（１０２）にロードすることにより作動する。仮想マシンにおいて、ファイル（１０４）は、ファイル１０４内でメモリ位置を示す内部ポインタおよびインプレース実行可能なファイルがロードされるように構成されるメモリにおいてターゲット位置を特定するターゲットメモリアドレスを含む。本システムはファイル（１０４）が実際にロードされる実際のメモリアドレスを決定する。実際のメモリアドレスおよびターゲットメモリアドレスが異なる場合、本システムはオフセット値を生成し、オフセット値によってファイル（１０４）内のそれぞれの内部ポインタを調整し、内部ポインタがファイル（１０４）内の意図する位置を示すことを可能にする。【選択図】  図１
2006018834.tif 000002
【特許請求の範囲】
【請求項１】
インプレース実行可能なファイルを仮想マシンにロードする方法であって、
該仮想マシンに該インプレース実行可能なファイルをロードすることであって、該インプレース実行可能なファイルは、該インプレース実行可能なファイル内のメモリ位置を示す内部ポインタと、該インプレース実行可能なファイルがロードするように構成されるメモリにおいてターゲット位置を特定するターゲットメモリアドレスとを含む、ことと、
該インプレース実行可能なファイルが実際にロードされる実際のメモリアドレスを決定することと、
該実際のメモリアドレスおよび該ターゲットメモリアドレスが異なる場合に、
該実際のメモリアドレスと該ターゲットメモリアドレスとの違いであるオフセット値を生成することと、該オフセット値によって該インプレース実行可能なファイル内のそれぞれの内部ポインタを調整して、該内部ポインタが該インプレース実行可能なファイル内の意図された位置を示すようにすることと
を包含する、方法。
【請求項２】
前記ターゲットメモリアドレスが、前記インプレース実行可能なファイルのヘッダに設置される、請求項１に記載の方法。
【請求項３】
前記インプレース実行可能なファイルが、該インプレース実行可能なファイル内で内部ポインタの位置を識別する再配置テーブルを含む、請求項１に記載の方法。
【請求項４】
前記再配置テーブルをロードすることは、
前記配置可能ファイルのヘッダから該再配置テーブルを示すポインタを取り出すことと、
該再配置テーブルにアクセスするために該ポインタを用いることと
を包含する、請求項３に記載の方法。
【請求項５】
それぞれの内部ポインタを調整した後に、前記方法は、前記再配置テーブルに占められる前記メモリを再利用することをさらに包含する、請求項３に記載の方法。
【請求項６】
それぞれの内部ポインタを調整した後に、前記方法は、
前記インプレース実行可能なファイルを前記再配置テーブルを有さない記憶媒体に（調整された内部ポインタを用いて）書き戻すことと、
再配置がすでに行われたことを示す該インプレース実行可能なファイルヘッダに再配置ビットを設置することとをさらに包含し、
それによって前記配置可能ファイルのその後の実行が、前記記憶媒体からの（調整されたポインタを有する）該インプレース実行可能なファイルにアクセスでき、それによって該ポインタの調整を回避できる、請求項３に記載の方法。
【請求項７】
前記再配置テーブルがオフセット範囲のリストとして構成され、それぞれのオフセット値が該インプレース実行可能なファイル内の内部ポインタの連続セットの開始アドレスおよび終了アドレスを含む、請求項３の方法。
【請求項８】
前記再配置テーブルがビットマップとして構成され、それぞれのビットが該インプレース実行可能なファイルにおける１つのワードに対応し、１つのセットビットが該ワードが内部ポインタを含むことを示す、請求項３に記載の方法。
【請求項９】
前記ビットマップが圧縮されてメモリ消費をさらに減少する、請求項８に記載の方法。
【請求項１０】
前記再配置テーブルがパックリストとして構成され、該パックリストにおけるそれぞれのエントリは、
前記配置可能ファイルにおける内部ポインタの範囲の開始オフセット（先のエントリの開始オフセットに関連する）と、
該開始オフセットで始まる連続して設置された内部ポインタの数と
を含む、請求項３に記載の方法。
【請求項１１】
前記仮想マシンがプラットフォームから独立した仮想マシンである、請求項１に記載の方法。
【請求項１２】
前記仮想マシンがＪａｖａ（登録商標）仮想マシンである、請求項１１に記載の方法。
【請求項１３】
コンピュータによって実行される場合、インプレース実行可能なファイルを仮想マシンにロードする方法をコンピュータに実行させる命令を格納するコンピュータ読み取り可能記憶媒体であって、該方法は、
該仮想マシンに該インプレース実行可能なファイルをロードすることとであって、該インプレース実行可能なファイルは、該インプレース実行可能なファイル内のメモリ位置を示す内部ポインタと、該インプレース実行可能なファイルがロードするように構成されるメモリにおいてターゲット位置を特定するターゲットメモリアドレスとを含む、ことと、
該インプレース実行可能なファイルが実際にロードされる実際のメモリアドレスを決定することと、
該実際のメモリアドレスと該ターゲットメモリアドレスとが異なる場合に、該実際のメモリアドレスと該ターゲットメモリアドレスとの違いであるオフセット値を生成することと、該オフセット値によって該インプレース実行可能なファイル内のそれぞれの内部ポインタを調整して該内部ポインタが該インプレース実行可能なファイル内の意図された位置を示すようにすることと
を包含する、コンピュータ読み取り可能記憶媒体。
【請求項１４】
前記ターゲットメモリアドレスが前記インプレース実行可能なファイルのヘッダに設置される、請求項１３に記載のコンピュータ読み取り可能な記憶媒体。
【請求項１５】
前記インプレース実行可能なファイルが、該インプレース実行可能なファイル内で内部ポインタの位置を識別する再配置テーブルを含む、請求項１３に記載のコンピュータ読み取り可能な記憶媒体。
【請求項１６】
前記再配置テーブルが、
前記インプレース実行可能なファイルヘッダから該再配置テーブルを示すポインタを取り出すことと、
該再配置テーブルにアクセスするために該ポインタを用いることと
を含む、請求項１５に記載のコンピュータ読み取り可能な記憶媒体。
【請求項１７】
それぞれの内部ポインタを調整した後に、前記方法は前記再配置テーブルに占められる前記メモリを再要求することをさらに包含する、請求項１５に記載のコンピュータ読み取り可能な記憶媒体。
【請求項１８】
それぞれの内部ポインタを調整した後に、前記方法は、
前記インプレース実行可能なファイルを前記再配置テーブルを有さない記憶媒体に（調整された内部ポインタを用いて）書き戻すことと、
再配置がすでに行われたことを示す該インプレース実行可能なファイルヘッダに再配置ビットを設置することとをさらに包含し、
それによって前記配置可能ファイルのその後の実行が、前記記憶媒体からの（調整されたポインタを有する）該インプレース実行可能なファイルにアクセスでき、それによって該ポインタの調整を回避できる、請求項１５に記載のコンピュータ読み取り可能な記憶媒体。
【請求項１９】
前記再配置テーブルがオフセット範囲のリストとして構成され、それぞれのオフセット値が該インプレース実行可能なファイル内の内部ポインタの連続セットの開始アドレスおよび終了アドレスを含む、請求項１５に記載のコンピュータ読み取り可能な記憶媒体。
【請求項２０】
前記再配置テーブルがビットマップとして構成され、それぞれのビットが該インプレース実行可能なファイルにおける１つのワードに対応し、１つのセットビットが該ワードが内部ポインタを含むことを示す、請求項１５に記載のコンピュータ読み取り可能な記憶媒体。
【請求項２１】
前記ビットマップが圧縮されてメモリ消費をさらに減少する、請求項２０に記載のコンピュータ読み取り可能な記憶媒体。
【請求項２２】
前記再配置テーブルがパックリストとして構成され、該パックリストにおけるそれぞれのエントリは、
前記配置可能ファイルにおける内部ポインタの範囲の開始オフセット（先のエントリの開始オフセットに関連する）と、
該開始オフセットで始まる連続して設置された内部ポインタの数と
を含む、請求項１５に記載のコンピュータ読み取り可能な記憶媒体。
【請求項２３】
前記仮想マシンがプラットフォームから独立した仮想マシンである、請求項１３に記載のコンピュータ読み取り可能な記憶媒体。
【請求項２４】
前記仮想マシンがＪａｖａ（登録商標）仮想マシンである、請求項２３に記載のコンピュータ読み取り可能な記憶媒体。
【請求項２５】
インプレース実行可能なファイルを仮想マシンにロードする装置であって、
該仮想マシンに該インプレース実行可能なファイルをロードするように構成されたロードメカニズムであって、該インプレース実行可能なファイルは、該インプレース実行可能なファイル内のメモリ位置を示す内部ポインタと、該インプレース実行可能なファイルがロードするように構成されるメモリにおいてターゲット位置を特定するターゲットメモリアドレスとを含む、ロードメカニズムと、
該インプレース実行可能なファイルが実際にロードされる実際のメモリアドレスを決定するように構成された決定メカニズムと、
該実際のメモリアドレスと該ターゲットメモリアドレスとが異なる場合に、該実際のメモリアドレスと該ターゲットメモリアドレスとの違いであるオフセット値を生成するように構成されたオフセットメカニズムと、
該実際のメモリアドレスと該ターゲットメモリアドレスとが異なる場合に、該オフセット値によって該インプレース実行可能なファイル内のそれぞれの内部ポインタを調整して該内部ポインタが該インプレース実行可能なファイル内の意図された位置を示すようにするように構成された調整メカニズムと
を備える、装置。
【請求項２６】
前記ターゲットメモリアドレスが前記インプレース実行可能なファイルのヘッダに設置される、請求項２５に記載の装置。
【請求項２７】
前記インプレース実行可能なファイルが、該インプレース実行可能なファイル内で内部ポインタの位置を識別する再配置テーブルを含む、請求項２５に記載の装置。
【請求項２８】
前記インプレース実行可能なファイルヘッダから該再配置テーブルを示すポインタを取り出すように構成された取り出す検索メカニズムと、
該再配置テーブルにアクセスするために該ポインタを用いるように構成されたアクセスメカニズムと
をさらに備える、請求項２７に記載の装置。
【請求項２９】
それぞれの内部ポインタを調整したあとに、前記再配置テーブルに占められる前記メモリを再要求するように構成されるメモリ再要求メカニズムをさらに備える、請求項２７に記載の装置。
【請求項３０】
それぞれの内部ポインタを調整した後に、前記インプレース実行可能なファイルを前記再配置テーブルを有さない記憶媒体に（調整された内部ポインタを用いて）書き戻すように構成された通達メカニズムと、
それぞれの内部ポインタを調整した後に、再配置がすでに行われたことを示す該インプレース実行可能なファイルヘッダに再配置ビットを設置するように構成されたビット設置メカニズムとをさらに備え、
それによって前記配置可能ファイルのその後の実行の間、前記装置が前記記憶媒体からの（調整されたポインタを有する）該インプレース実行可能なファイルにアクセスでき、それによって該ポインタの調整を回避できる、請求項２７に記載の装置。
【請求項３１】
前記再配置テーブルがオフセット範囲のリストとして構成され、それぞれおのオフセット値が該インプレース実行可能なファイル内の内部ポインタの連続セットの開始アドレスおよび終了アドレスを含む、請求項２７に記載の装置。
【請求項３２】
前記再配置テーブルがビットマップとして構成され、それぞれのビットが該インプレース実行可能なファイルにおける１つのワードに対応し、１つのセットビットが該ワードが内部ポインタを含むことを示す、請求項２７に記載の装置。
【請求項３３】
前記ビットマップが圧縮されてメモリ消費をさらに減少する、請求項３２に記載の装置。
【請求項３４】
前記再配置テーブルがパックリストとして構成され、該パックリストにおけるそれぞれのエントリは、
前記配置可能ファイルにおける内部ポインタの範囲の開始オフセット（先のエントリの開始オフセットに関連する）と、
該開始オフセットで始まる連続して設置された内部ポインタの数と
を含む、請求項２７に記載の装置。
【請求項３５】
前記仮想マシンがプラットフォームから独立した仮想マシンである、請求項２５に記載の装置。
【請求項３６】
前記仮想マシンがＪａｖａ（登録商標）仮想マシンである、請求項３５に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想マシン（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）をサポートするコンピュータシステムに関係する。より詳細には、本発明は、仮想マシンに配置された再配置可能な実行ファイルのローディングを促進する方法および装置に関係する。
【背景技術】
【０００２】
Ｔｈｅ  Ｊａｖａ  ２  Ｐｌａｔｆｏｒｍ，Ｍｉｃｒｏ  Ｅｄｉｔｉｏｎ（Ｊ２ＭＥＴＭ）は無線装置空間において非常に多く使用されるようになった。モトローラ、ノキア、ＮＴＴドコモ、ＲＩＭ、シーメンス、および無線装置産業における多くの他のキープレーヤーは、最近、Ｊ２ＭＥに有効な装置を大量に出荷し始めた。２００３年だけでも２億万台以上のＪ２ＭＥに有効な携帯電話が出荷されたと推定される。
【０００３】
しかしながら、Ｊ２ＭＥプラットフォームの成功にもかかわらず、ＪａｖａＴＭ技術への重要な挑戦がメモリ制限装置空間に残されている。Ｊ２ＭＥアプリケーション開発における１つの主要な限定要因はアプリケーションのサイズである。モバイル装置におけるより重要なＪ２ＭＥアプリケーションが開発されると、Ｊ２ＭＥアプリケーションのダウンロードはますます多くの無線ネットワーク帯域幅を消費する。さらに、小さなＪ２ＭＥアプリケーション以外に関係する実行時ダイナミックメモリ装置コストおよびアプリケーション起動コストは、大半の大量市場消費者装置およびＪａｖａ（登録商標）プログラム言語における重要なモバイルシステムソフトウエア開発にとって依然として過剰である。
【０００４】
ＪＶＭ（Ｊａｖａ（登録商標）仮想マシン：Ｊａｖａ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）のメモリ消費およびアプリケーション起動コストを最適化するためにさまざまな技術が用いられる。ＪＶＭのメモリ消費およびアプリケーション起動時間を大幅に縮小するための１つの最も有望なアプローチは、「インプレース（ｉｎ−ｐｌａｃｅ）実行」と呼ばれる技術である。
【０００５】
インプレース実行をサポートするＪａｖａ（登録商標）仮想マシンにおいて、標準的なＪａｖａ（登録商標）クラスファイル形式は、従来のコストのかかるクラスロードプロセスなしに、表示に置き換えられる。その表示は仮想マシンの実行時（ｒｕｎｔｉｍｅ）構造として直接用いられる。クラスのようなスタティックデータ構造、方法テーブル、フィールドテーブル、例外ハンドラ、シンボルは実際仮想マシンにロードしない。代わりに、スタティック表示から直接アクセスされる。スタティック表示がフラッシュメモリまたはＲＯＭに保存されるモバイル装置において、その結果、典型的に５倍〜１０倍のオーダーの大幅なＲＡＭ消費節約また電池保存になる。これらのアプリケーションのスタティックサイズは、典型的に通常のＪａｖａ（登録商標）クラスファイルまたはＪＡＲファイルよりずっと小さい。これは、Ｊａｖａ（登録商標）アプリケーションのシンボル情報またはダイナミックなリンク可能性が失われることなく達成される。
【０００６】
不都合にも、インプレース実行は、配置スピードに関しては不利な点を有する。例えば、インプレース実行可能なコードが不変であるため、実行時においてバイトコードを修正する能力に依存する、一般的にさまざまに用いられる実行時最適化は使用されない。さらに、インプレース実行可能なファイル（以下、「ＩＰＥファイル」すなわちＩＰＥＦと言及される）は携帯用にまた容易にメモリに再配置可能であるように意図されているので、ファイルの中のすべての参照、つまりポインタではなくシンボル参照はオフセットされなければならない。これによって、実行時間において、実行スピードを下げるさらなる間接化技法（ｉｎｄｉｒｅｃｔｉｏｎ）レベルを導入する。
【０００７】
シンボル参照（つまり、ポインタまたはオフセットではなく「名前の」参照）は特に問題がある。なぜなら、シンボル参照を解決することは、典型的に、コストのかかるシンボル自動参照（たとえば、文字列を基にした検索キーを用いるハッシュテーブル自動参照）を必要とするからである。ＩＰＥＦがターゲット装置にインストールされている場合にターゲット装置に存在するとすでにみなされるデータ構造または機能について言及する場合、シンボル参照はたとえばＩＰＥＦにおいてしばしば必要とされる。
【０００８】
これらの問題のために、そのような技術はそうでなければ携帯電話およびＪａｖａ  ２  Ｐｌａｔｆｏｒｍ，Ｍｉｃｒｏ  Ｅｄｉｔｉｏｎの他の典型的なターゲット装置に理想的であるにもかかわらず、インプレース実行はＪａｖａ（登録商標）仮想マシンにおいていまだに広く利用されていない。
【０００９】
そのため、必要とされるものは、上記に掲げられた問題のないインプレース実行を促進する方法および装置である。
【発明の開示】
【課題を解決するための手段】
【００１０】
本発明の一実施形態は、仮想マシンにインプレース実行可能なファイルのロードを促進するシステムを提供する。そのシステムは仮想マシンにインプレース実行可能なファイルをロードすることで稼動する。仮想マシンにおいて、インプレース実行可能なファイルは、インプレース実行可能なファイル内においてメモリ位置を示す内部ポインタ、およびインプレース実行可能なファイルがロードされるように構成されているメモリにおけるターゲット位置を特定するターゲットメモリアドレスを含む。そのシステムはそれから、インプレース実行可能なファイルが実際にロードされる実際のメモリアドレスを決定する。実際のメモリアドレスおよびターゲットメモリアドレスが異なる場合、システムは、実際のメモリアドレスとターゲットメモリアドレスの差であるオフセット値を算出する。最後に、システムはインプレース実行可能なファイル内の各内部ポインタをオフセット値によって調整し、内部ポインタがインプレース実行可能なファイル内の意図された位置を示せるようにする。
【００１１】
本実施態様における一変形において、ターゲットメモリアドレスはインプレース実行可能なファイルのヘッダに設置される。
【００１２】
本実施態様における一変形において、インプレース実行可能なファイルはインプレース実行可能なファイル内の内部ポインタの位置を識別する再配置テーブルを含む。
【００１３】
さらなる一変形において、インプレース実行可能なファイルのヘッダから再配置テーブルへのポインタを取り出すことによって、システムは再配置テーブルをロードする。ポインタを取り出すにあたって、システムは再配置テーブルにアクセスするためのポインタを用いる。
【００１４】
さらなる一変形において、それぞれの内部ポインタを調整した後で、システムは再配置テーブルに占められるメモリを再要求（ｒｅｃｌａｉｍ）する。
【００１５】
さらなる一変形において、それぞれの内部ポインタを調整した後で、システムは再配置テーブルなしで記憶媒体にインプレース実行可能なファイルを書いて応答する（調整された内部ポインタを用いて）。システムはまた、再配置がすでに行われたことを示すインプレース実行可能なファイルヘッダに再配置ビットを設定する。インプレース実行可能なファイルの引き続きの実行の間、システムは、記憶媒体からのインプレース実行可能なファイルにアクセスでき（調整されたポインタを用いて）、それによってポインタの調整を避けることができる。
【００１６】
さらなる一変形において、再配置テーブルはオフセット範囲のリストとして構造化され、それぞれのオフセット範囲はインプレース実行可能なファイル内の内部ポインタの連続セットの開始アドレスおよび終了アドレスを含む。
【００１７】
さらなる一変形において、再配置テーブルはビットマップとして構造化され、それぞれのビットはインプレース実行可能なファイルにおける１つのワードに対応する。セットビットはそのワードが内部ポインタを含むことを示す。さらなる変形において、ビットマップは圧縮され、メモリ消費をさらに減らす。
【００１８】
さらなる一変形において、再配置テーブルはパックリスト（ｐａｃｋｅｄ  ｌｉｓｔ）として構造化される。パックリストにおけるそれぞれのエントリは、インプレース実行可能なファイルにおける内部ポインタの範囲の開始オフセット（先のエントリの開始オフセットに関連する）および開始オフセットから始まる内部ポインタに連続して置かれる数を含む。
【００１９】
本実施態様における一変形において、仮想マシンはプラットフォームから独立した仮想マシンである。
【００２０】
さらなる一変形において、仮想マシンはＪａｖａ（登録商標）仮想マシンである。
【００２１】
（項目１）
インプレース実行可能なファイルを仮想マシンにロードする方法であって、
該仮想マシンに該インプレース実行可能なファイルをロードすることであって、該インプレース実行可能なファイルは、該インプレース実行可能なファイル内のメモリ位置を示す内部ポインタと、該インプレース実行可能なファイルがロードするように構成されるメモリにおいてターゲット位置を特定するターゲットメモリアドレスとを含む、ことと、
該インプレース実行可能なファイルが実際にロードされる実際のメモリアドレスを決定することと、
該実際のメモリアドレスおよび該ターゲットメモリアドレスが異なる場合に、
該実際のメモリアドレスと該ターゲットメモリアドレスとの違いであるオフセット値を生成することと、該オフセット値によって該インプレース実行可能なファイル内のそれぞれの内部ポインタを調整して、該内部ポインタが該インプレース実行可能なファイル内の意図された位置を示すようにすることと
を包含する、方法。
【００２２】
（項目２）
上記ターゲットメモリアドレスが、上記インプレース実行可能なファイルのヘッダに設置される、項目１に記載の方法。
【００２３】
（項目３）
上記インプレース実行可能なファイルが、該インプレース実行可能なファイル内で内部ポインタの位置を識別する再配置テーブルを含む、項目１に記載の方法。
【００２４】
（項目４）
上記再配置テーブルをロードすることは、
上記配置可能ファイルのヘッダから該再配置テーブルを示すポインタを取り出すことと、
該再配置テーブルにアクセスするために該ポインタを用いることと
を包含する、項目３に記載の方法。
【００２５】
（項目５）
それぞれの内部ポインタを調整した後に、上記方法は、上記再配置テーブルに占められる上記メモリを再利用することをさらに包含する、項目３に記載の方法。
【００２６】
（項目６）
それぞれの内部ポインタを調整した後に、上記方法は、
上記インプレース実行可能なファイルを上記再配置テーブルを有さない記憶媒体に（調整された内部ポインタを用いて）書き戻すことと、
再配置がすでに行われたことを示す該インプレース実行可能なファイルヘッダに再配置ビットを設置することとをさらに包含し、
それによって上記配置可能ファイルのその後の実行が、上記記憶媒体からの（調整されたポインタを有する）該インプレース実行可能なファイルにアクセスでき、それによって該ポインタの調整を回避できる、項目３に記載の方法。
【００２７】
（項目７）
上記再配置テーブルがオフセット範囲のリストとして構成され、それぞれのオフセット値が該インプレース実行可能なファイル内の内部ポインタの連続セットの開始アドレスおよび終了アドレスを含む、項目３の方法。
【００２８】
（項目８）
上記再配置テーブルがビットマップとして構成され、それぞれのビットが該インプレース実行可能なファイルにおける１つのワードに対応し、１つのセットビットが該ワードが内部ポインタを含むことを示す、項目３に記載の方法。
【００２９】
（項目９）  
上記ビットマップが圧縮されてメモリ消費をさらに減少する、項目８に記載の方法。
【００３０】
（項目１０）
上記再配置テーブルがパックリストとして構成され、該パックリストにおけるそれぞれのエントリは、
上記配置可能ファイルにおける内部ポインタの範囲の開始オフセット（先のエントリの開始オフセットに関連する）と、
該開始オフセットで始まる連続して設置された内部ポインタの数と
を含む、項目３に記載の方法。
【００３１】
（項目１１）
上記仮想マシンがプラットフォームから独立した仮想マシンである、項目１に記載の方法。
【００３２】
（項目１２）
上記仮想マシンがＪａｖａ（登録商標）仮想マシンである、項目１１に記載の方法。
【００３３】
（項目１３）
コンピュータによって実行される場合、インプレース実行可能なファイルを仮想マシンにロードする方法をコンピュータに実行させる命令を格納するコンピュータ読み取り可能記憶媒体であって、該方法は、
該仮想マシンに該インプレース実行可能なファイルをロードすることとであって、該インプレース実行可能なファイルは、該インプレース実行可能なファイル内のメモリ位置を示す内部ポインタと、該インプレース実行可能なファイルがロードするように構成されるメモリにおいてターゲット位置を特定するターゲットメモリアドレスとを含む、ことと、
該インプレース実行可能なファイルが実際にロードされる実際のメモリアドレスを決定することと、
該実際のメモリアドレスと該ターゲットメモリアドレスとが異なる場合に、該実際のメモリアドレスと該ターゲットメモリアドレスとの違いであるオフセット値を生成することと、該オフセット値によって該インプレース実行可能なファイル内のそれぞれの内部ポインタを調整して該内部ポインタが該インプレース実行可能なファイル内の意図された位置を示すようにすることと
を包含する、コンピュータ読み取り可能記憶媒体。
【００３４】
（項目１４）
上記ターゲットメモリアドレスが上記インプレース実行可能なファイルのヘッダに設置される、項目１３に記載のコンピュータ読み取り可能な記憶媒体。
【００３５】
（項目１５）
上記インプレース実行可能なファイルが、該インプレース実行可能なファイル内で内部ポインタの位置を識別する再配置テーブルを含む、項目１３に記載のコンピュータ読み取り可能な記憶媒体。
【００３６】
（項目１６）
上記再配置テーブルが、
上記インプレース実行可能なファイルヘッダから該再配置テーブルを示すポインタを取り出すことと、
該再配置テーブルにアクセスするために該ポインタを用いることと
を含む、項目１５に記載のコンピュータ読み取り可能な記憶媒体。
【００３７】
（項目１７）
それぞれの内部ポインタを調整した後に、上記方法は上記再配置テーブルに占められる上記メモリを再要求することをさらに包含する、項目１５に記載のコンピュータ読み取り可能な記憶媒体。
【００３８】
（項目１８）
それぞれの内部ポインタを調整した後に、上記方法は、
上記インプレース実行可能なファイルを上記再配置テーブルを有さない記憶媒体に（調整された内部ポインタを用いて）書き戻すことと、
再配置がすでに行われたことを示す該インプレース実行可能なファイルヘッダに再配置ビットを設置することとをさらに包含し、
それによって上記配置可能ファイルのその後の実行が、上記記憶媒体からの（調整されたポインタを有する）該インプレース実行可能なファイルにアクセスでき、それによって該ポインタの調整を回避できる、項目１５に記載のコンピュータ読み取り可能な記憶媒体。
【００３９】
（項目１９）
上記再配置テーブルがオフセット範囲のリストとして構成され、それぞれのオフセット値が該インプレース実行可能なファイル内の内部ポインタの連続セットの開始アドレスおよび終了アドレスを含む、項目１５に記載のコンピュータ読み取り可能な記憶媒体。
【００４０】
（項目２０）
上記再配置テーブルがビットマップとして構成され、それぞれのビットが該インプレース実行可能なファイルにおける１つのワードに対応し、１つのセットビットが該ワードが内部ポインタを含むことを示す、項目１５に記載のコンピュータ読み取り可能な記憶媒体。
【００４１】
（項目２１）
上記ビットマップが圧縮されてメモリ消費をさらに減少する、項目２０に記載のコンピュータ読み取り可能な記憶媒体。
【００４２】
（項目２２）
上記再配置テーブルがパックリストとして構成され、該パックリストにおけるそれぞれのエントリは、
上記配置可能ファイルにおける内部ポインタの範囲の開始オフセット（先のエントリの開始オフセットに関連する）と、
該開始オフセットで始まる連続して設置された内部ポインタの数と
を含む、項目１５に記載のコンピュータ読み取り可能な記憶媒体。
【００４３】
（項目２３）
上記仮想マシンがプラットフォームから独立した仮想マシンである、項目１３に記載のコンピュータ読み取り可能な記憶媒体。
【００４４】
（項目２４）
上記仮想マシンがＪａｖａ（登録商標）仮想マシンである、項目２３に記載のコンピュータ読み取り可能な記憶媒体。
【００４５】
（項目２５）
インプレース実行可能なファイルを仮想マシンにロードする装置であって、
該仮想マシンに該インプレース実行可能なファイルをロードするように構成されたロードメカニズムであって、該インプレース実行可能なファイルは、該インプレース実行可能なファイル内のメモリ位置を示す内部ポインタと、該インプレース実行可能なファイルがロードするように構成されるメモリにおいてターゲット位置を特定するターゲットメモリアドレスとを含む、ロードメカニズムと、
該インプレース実行可能なファイルが実際にロードされる実際のメモリアドレスを決定するように構成された決定メカニズムと、
該実際のメモリアドレスと該ターゲットメモリアドレスとが異なる場合に、該実際のメモリアドレスと該ターゲットメモリアドレスとの違いであるオフセット値を生成するように構成されたオフセットメカニズムと、
該実際のメモリアドレスと該ターゲットメモリアドレスとが異なる場合に、該オフセット値によって該インプレース実行可能なファイル内のそれぞれの内部ポインタを調整して該内部ポインタが該インプレース実行可能なファイル内の意図された位置を示すようにするように構成された調整メカニズムと
を備える、装置。
【００４６】
（項目２６）
上記ターゲットメモリアドレスが上記インプレース実行可能なファイルのヘッダに設置される、項目２５に記載の装置。
【００４７】
（項目２７）
上記インプレース実行可能なファイルが、該インプレース実行可能なファイル内で内部ポインタの位置を識別する再配置テーブルを含む、項目２５に記載の装置。
【００４８】
（項目２８）
上記インプレース実行可能なファイルヘッダから該再配置テーブルを示すポインタを取り出すように構成された取り出す検索メカニズムと、
該再配置テーブルにアクセスするために該ポインタを用いるように構成されたアクセスメカニズムと
をさらに備える、項目２７に記載の装置。
【００４９】
（項目２９）
それぞれの内部ポインタを調整したあとに、上記再配置テーブルに占められる上記メモリを再要求するように構成されるメモリ再要求メカニズムをさらに備える、項目２７に記載の装置。
【００５０】
（項目３０）
それぞれの内部ポインタを調整した後に、上記インプレース実行可能なファイルを上記再配置テーブルを有さない記憶媒体に（調整された内部ポインタを用いて）書き戻すように構成された通達メカニズムと、
それぞれの内部ポインタを調整した後に、再配置がすでに行われたことを示す該インプレース実行可能なファイルヘッダに再配置ビットを設置するように構成されたビット設置メカニズムとをさらに備え、
それによって上記配置可能ファイルのその後の実行の間、上記装置が上記記憶媒体からの（調整されたポインタを有する）該インプレース実行可能なファイルにアクセスでき、それによって該ポインタの調整を回避できる、項目２７に記載の装置。
【００５１】
（項目３１）
上記再配置テーブルがオフセット範囲のリストとして構成され、それぞれおのオフセット値が該インプレース実行可能なファイル内の内部ポインタの連続セットの開始アドレスおよび終了アドレスを含む、項目２７に記載の装置。
【００５２】
（項目３２）
上記再配置テーブルがビットマップとして構成され、それぞれのビットが該インプレース実行可能なファイルにおける１つのワードに対応し、１つのセットビットが該ワードが内部ポインタを含むことを示す、項目２７に記載の装置。
【００５３】
（項目３３）
上記ビットマップが圧縮されてメモリ消費をさらに減少する、項目３２に記載の装置。
【００５４】
（項目３４）
上記再配置テーブルがパックリストとして構成され、該パックリストにおけるそれぞれのエントリは、
上記配置可能ファイルにおける内部ポインタの範囲の開始オフセット（先のエントリの開始オフセットに関連する）と、
該開始オフセットで始まる連続して設置された内部ポインタの数と
を含む、項目２７に記載の装置。
【００５５】
（項目３５）  
上記仮想マシンがプラットフォームから独立した仮想マシンである、項目２５に記載の装置。
【００５６】
（項目３６）
上記仮想マシンがＪａｖａ（登録商標）仮想マシンである、項目３５に記載の装置。
（要約）
本発明の一実施形態はインプレース実行可能なファイルの仮想マシンへのロードを促進するシステムを提供する。このシステムはインプレース実行可能なファイルを仮想マシンにロードすることにより作動する。仮想マシンにおいて、インプレース実行可能なファイルは、インプレース実行可能なファイル内でメモリ位置を示す内部ポインタおよびインプレース実行可能なファイルがロードされるように構成されるメモリにおいてターゲット位置を特定するターゲットメモリアドレスを含む。それから、本システムはインプレース実行可能なファイルが実際にロードされる実際のメモリアドレスを決定する。実際のメモリアドレスおよびターゲットメモリアドレスが異なる場合、本システムはオフセット値を発生する。オフセット値は実際のメモリアドレスとターゲットメモリアドレスとの差である。最後に、本システムは、オフセット値によってインプレース実行可能なファイル内のそれぞれの内部ポインタを調整し、内部ポインタがインプレース実行可能なファイル内の意図する位置を示すことができるようにする。
【発明を実施するための最良の形態】
【００５７】
以下の記述は、いかなる当業者も本発明を製作し、用いることができるように提供され、また、特定のアプリケーションおよびその必要において提供される。開示された実施形態に対するさまざまな修正は当業者に容易に明らかとなり、ここに定義される一般的な原理は本発明の精神および範囲から逸脱することなく他の実施形態およびアプリケーションに適用され得る。このように、本発明は、示される実施形態に限定される意図はないが、ここに開示される原則および特徴に一貫した最も広い範囲に一致する。
【００５８】
ここの詳細に示されるデータ構造およびコードは、典型的にコンピュータ読み取り可能記憶媒体に格納される。コンピュータ読み取り可能記憶媒体は、コンピュータシステムによって使用されるコードおよび／またはデータを格納できるいかなる装置または媒体であり得る。これは、ディスク装置、磁気テープ、ＣＤ（コンパクトディスク）、ＤＶＤ（ｄｉｇｉｔａｌ  ｖｅｒｓａｔｉｌｅ  ｄｉｓｃまたはｄｉｇｉｔａｌ  ｖｉｄｅｏ  ｄｉｓｃ）のような磁気および光学格納装置、および伝達媒体（信号が変調される搬送波を備えるかまたは備えない）において具体化されるコンピュータ命令信号を含むが、これらに限定されない。たとえば、伝達媒体はインターネットのような通信ネットワークを含み得る。
【００５９】
メモリ制限（Ｍｅｍｏｒｙ−Ｃｏｎｓｔｒａｉｎｅｄ）計算装置
図１は本発明の実施形態に従ったメモリ制限計算装置１００を示す。メモリ制限計算装置１００はいかなるタイプの計算装置をも含むが、それらに限定されない。計算装置は携帯電話、マイクロプロセッサを基にしたコンピュータシステム、デジタル信号プロセッサ、携帯計算装置、個人用システム手帳、装置制御器、装置内の計算エンジンを含む。メモリ制限計算装置１００はＪａｖａ（登録商標）仮想マシン（ＪＶＭ）１０２を含む。Ｊａｖａ（登録商標）仮想マシン（ＪＶＭ）１０２はインプレース実行可能なファイル（ＩＰＥＦ）１０４の実行をサポートする。（ＪＡＶＡ（登録商標）、ＪＶＭ、ＪＡＶＡ  ＶＩＲＴＵＡＬ  ＭＡＣＨＩＮＥという用語はカリフォルニア州サンタクレアにあるＳＵＮ  Ｍｉｃｒｏｓｙｓｔｅｍｓ，Ｉｎｃ．の商標である。）ＪＶＭ１０２はいかなるタイプのプラットフォームから独立した仮想マシンであり得るが、Ｊａｖａ（登録商標）仮想マシンに限定される意図はないことを留意すべきである。
【００６０】
インプレース実行可能なファイル
図２は本発明の実施形態に従ったインプレース実行可能なファイル１０４を示す。ＩＰＥＦ１０４は、ヘッダ２０２、再配置テーブル２０３、複数の内部ポインタ（ＩＰ）２０４〜２１２を含む。従来のＩＰＥＦにおいて、ＩＰＥＦ内の位置に対するすべての参照はポインタではなくオフセットに基づいている。オフセットを用いることで、ＩＰＥＦの内容は位置から独立し、ＩＰＥＦはメモリのいかなる場所にも柔軟にロードされる（そして必要ならば後に別のメモリ位置に再配置される）。
【００６１】
オフセットの使用は、再配置の観点からすると有益であるが、間接化技法（ｉｎｄｉｒｅｃｔｉｏｎ）のさらなるレベルのために、実行（ｐｅｒｆｏｒｍａｎｃｅ）オーバーヘッドを増加させる。オフセットに基づいたデータ構造は、さまざまなデータ構造に効率的にアクセスするために仮想マシンがマシンコードを利用する高性能仮想マシンにおいて特に問題である。典型的なコンピュータアーキテクチャにおいて、マシン命令は、オフセットに基づくデータ構造よりもポインタに基づくデータ構造をより効率的に処理するために設計されている。
【００６２】
増加した実行オーバーヘッドは、オフセットの代わりにポインタを用いることで回避できる。しかし、ポインタが使用される場合、ＩＰＥＦの内容は特定のメモリ位置に固定され、ＩＰＥＦはメモリの固定された位置のみにロードされる。ターゲット装置におけるターゲットメモリ位置はすでに使用されているか使用可能でない可能性を考慮すると、前記の内容は問題である。たとえば、メモリ制限計算装置１００のような小さな具体化されたターゲット装置上では、ＩＰＥＦ１０４がもともと作成されたコンピュータ上におけるよりも、メモリ量はおそらく著しく少ないであろう。そのため、要求された位置は可能でないことがあり得る。
【００６３】
この問題を取り除くために、再配置テーブル２０３がＩＰＥＦ１０４に加えられた。再配置テーブル２０３はオフセットマップで、ＩＰＥＦ１０４における内部ポインタ２０４〜２１２についての情報を含み、メモリへのＩＰＥＦ１０４のロードに内部ポインタ２０４〜２１２が調整される。
【００６４】
本発明の一実施形態では、再配置テーブル２０３は「オフセット範囲」を含む。オフセット範囲はＩＰＥＦ１０４における内部ポインタ２０４〜２１２の位置を記録する。この実施態様において、再配置テーブル２０３におけるそれぞれの入口は、内部ポインタを含むＩＰＥＦ１０４における部分の開始位置および終了位置についての情報を格納する。この実施形態は、ＩＰＥＦ１０４におけるポインタの数がかなり低いおよび／または内部ポインタがＩＰＥＦ１０４におけるいくつかの連続部分に位置する状況に特によく適している。
【００６５】
実施形態における一変形では、再配置テーブル２０３はビット（またビットマップとして周知）のベクトルとして格納され、各ビットは、ＩＰＥＦ１０４における単一内部ポインタの位置をテーブルす。この実施形態は、多くの内部ポインタを含む状況によく適し、ＩＰＥＦ１０４は、ＩＰＥＦ１０４においてランダムに分配される多くの内部ポインタを含む。ビットマップは随意的に圧縮され、メモリ消費をさらに減らすことに留意すべきである。
【００６６】
本実施態様における別の変形において、パック表示が用いられ、再配置テーブル２０３におけるそれぞれのエントリは、内部ポインタの範囲が開始する部分の開始オフセット（再配置テーブル２０３における先のエントリの開始オフセットに関連する）、およびその位置から開始する連続に置かれたポインタの数を含む。再配置テーブル２０３におけるそれぞれの新しいエントリの開始オフセットは、先のエントリに関連してテーブルされている。これによって、開始オフセットを表すために小さい数（たとえば、１６ビットに適するような十分に小さい数）が用いられる。
【００６７】
上記のすべての実施形態において、再配置が行われた後に再配置テーブル２０３は必要ではない。よって、再配置テーブル２０３に占められるメモリはオペレーティングシステムに戻される。
【００６８】
さらに、本発明の一実施形態において、一度ＩＰＥＦ１０４が再配置されると、ＩＰＥＦ１０４は随意的に再配置された状態における記憶媒体に書き戻される。この実施形態において、ＩＰＥＦ１０４のヘッダにフラグが設定され、その後の実行において再配置が起こらないようにする。
【００６９】
インプレース実行可能なファイルのロード
図３は、本発明の実施形態に従ったＩＰＥＦ１０４をロードするプロセスを示すフローチャートを表す。システムは、ＩＰＥＦ１０４をＪＶＭ１０２（ステップ３０２）にロードする命令を受けることから開始する。この命令に応答して、システムはＩＰＥＦ１０４をＪＶＭ１０２にロードして、ＩＰＥＦ１０４がロードされた（ステップ３０４）実際のメモリ位置を決定する。システムはまた、ＩＰＥＦ１０４がロードされるために構成されるターゲットメモリ位置を獲得するためにヘッダ２０２を検査する（ステップ３０６）。次に、システムは実際のメモリ位置とターゲットメモリ位置を比較する（ステップ３０８）。ターゲットメモリ位置が実際のメモリ位置と同じ場合、システムはＩＰＥＦ１０４を実行する。
【００７０】
しかしながら、ターゲットメモリ位置が実際のメモリ位置と異なる場合、システムはターゲットメモリ位置と実際のメモリ位置の差を決定し、オフセット値（ステップ３１０）を生成する。それからシステムは、再配置テーブル２０３（ステップ３１２）の位置を示すポインタ２１４を獲得するためにＩＰＥＦ１０４のヘッダを検査する。一度システムが再配置テーブル２０３の位置を決定すると、システムは再配置テーブル２０３を用いてＩＰＥＦ１０４内のそれぞれのポインタの位置を決定する（ステップ３１４）。最後に、システムはオフセット値によってＩＰＥＦ１０４におけるそれぞれのポインタを調整する（ステップ３１６）。一度ポインタが調整された場合、システムは再配置テーブル２０３を取り除き、他のシステムプロセスによって使用されるメモリを要求することがあり得ることを留意すべきである。
【００７１】
本発明の実施形態のこれまでの記述は説明および記載目的のみのために提供されてきた。これらは、本発明を開示された形式に当てはめるまたは制限する意図はない。したがって、多くの修正および変形が同業者に明らかになるであろう。さらに、上記の開示は本発明を制限する意図はない。本発明の範囲は添付の請求項によって規定される。
【図面の簡単な説明】
【００７２】
【図１】本発明の実施形態に従ったメモリ制限計算装置を示す。
【図２】本発明の実施形態に従ったインプレース実行可能なファイルを示す。
【図３】本発明の実施形態に従ったインプレース実行可能なファイルのロードプロセスを示すフローチャートを表す。
【符号の説明】
【００７３】
１００  メモリ制限計算装置
１０２  Ｊａｖａ（登録商標）仮想マシン（ＪＶＭ）
１０４  インプレース実行可能なファイル
２０２  ヘッダ
２０３  再配置テーブル
【図１】
2006018834.tif 000003
【図２】
2006018834.tif 000004
【図３】
2006018834.tif 000005