(57)【要約】  非同期ＪＩＴ（just-in-time）コンパイルが提供される。第二のプロセッサ上で実行する非同期コード翻訳スレッドが、同期スレッドにより呼び出され、又は自己呼び出しされ、ユーザ実行の前に実行してコードを事前翻訳する。同期及び非同期スレッドがコード実行スレッドに配信するための翻訳済みコードを預けるための、翻訳済みコードキャッシュが競合管理ストラクチャを有して存在する。
2009516296.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータプログラムコードを翻訳する方法であって、
コンピュータプログラムの実行が将来要求されうる少なくとも１つのコンピュータプログラムコードモジュールを検出するステップと、
前記コンピュータプログラムの少なくとも１つの既に翻訳済みのプログラムコードモジュールを実行する間、前記検出された他のプログラムコードモジュールを実行のために翻訳するステップと
を有することを特徴とする方法。
【請求項２】
前記コンピュータプログラムの実行が要求されるプログラムコードモジュールの将来の実行のために前記検出され翻訳されたプログラムコードモジュールを保存するステップを更に有することを特徴とする請求項１に記載の方法。
【請求項３】
前記翻訳するステップは、ユーザ実行の前に実行して前記検出されたプログラムコードを事前翻訳するために、同期コード翻訳スレッドにより非同期コード翻訳を呼び出すステップを有することを特徴とする請求項１に記載の方法。
【請求項４】
前記同期及び非同期の両方のスレッドによって、コード実行スレッドに対して配信するための翻訳済みコードを翻訳済みコードキャッシュに預けるステップを有し、
前記翻訳済みコードキャッシュは、競合管理ストラクチャを有すること
を特徴とする請求項３に記載の方法。
【請求項５】
ユーザ実行の前に実行して前記検出されたプログラムコードを事前翻訳するために、非同期コード翻訳スレッドを自己呼び出しするステップを有することを特徴とする請求項１に記載の方法。
【請求項６】
前記同期及び非同期の両方のコード翻訳スレッドによって、コード実行スレッドに対して配信するための翻訳済みコードを翻訳済みコードキャッシュに預けるステップを有し、
前記翻訳済みコードキャッシュは、競合管理ストラクチャを有すること
を特徴とする請求項５に記載の方法。
【請求項７】
前記コンピュータプログラムの可能な実行のブランチツリー表現に対応するバイナリーツリーを構文解析することによって、コード関数であるように見える前記コンピュータプログラムのセグメント特定するステップを有することを特徴とする請求項１に記載の方法。
【請求項８】
請求項１に記載の方法を実施するための命令を有するコンピュータ読み取り可能媒体。
【請求項９】
請求項２に記載の方法を実施するための命令を有するコンピュータ読み取り可能媒体。
【請求項１０】
請求項３に記載の方法を実施するための命令を有するコンピュータ読み取り可能媒体。
【請求項１１】
請求項４に記載の方法を実施するための命令を有するコンピュータ読み取り可能媒体。
【請求項１２】
請求項５に記載の方法を実施するための命令を有するコンピュータ読み取り可能媒体。
【請求項１３】
請求項６に記載の方法を実施するための命令を有するコンピュータ読み取り可能媒体。
【請求項１４】
請求項７に記載の方法を実施するための命令を有するコンピュータ読み取り可能媒体。
【請求項１５】
コンピュータプログラムの実行が将来要求されうる少なくとも１つのコンピュータプログラムコードモジュールを検出する手段と、
前記コンピュータプログラムの少なくとも１つの既に翻訳済みのプログラムコードモジュールを実行する間、前記検出された他のプログラムコードモジュールを実行のために翻訳する手段と
を有することを特徴とするコンピュータプログラムコードを翻訳するためのシステム。
【請求項１６】
前記コンピュータプログラムの実行が要求されるプログラムコードモジュールの将来の実行のために前記検出され翻訳されたプログラムコードモジュールを保存する手段を更に有することを特徴とする請求項１５に記載のシステム。
【請求項１７】
コンピュータプログラムのユーザ実行の前に実行して事前翻訳のために検出されたプログラムコードを事前翻訳するために、同期コード翻訳スレッドにより非同期コード翻訳スレッドを呼び出すための手段を有することを特徴とするコンピュータプログラムコードを翻訳するシステム。
【請求項１８】
前記同期及び非同期の両方のスレッドによって、コード実行スレッドに対して配信するための翻訳済みコードを翻訳済みコードキャッシュに預ける手段を有し、
前記翻訳済みコードキャッシュは、競合管理ストラクチャを有すること
を特徴とする請求項１７に記載のシステム。
【請求項１９】
ユーザ実行の前に実行して前記検出されたプログラムコードを事前翻訳するために、非同期コード翻訳スレッドを自己呼び出しする手段を有することを特徴とする請求項１７に記載のシステム。
【請求項２０】
前記同期及び非同期の両方のコード翻訳スレッドによって、コード実行スレッドに対して配信するための翻訳済みコードを翻訳済みコードキャッシュに預ける手段を有し、
前記翻訳済みコードキャッシュは、競合管理ストラクチャを有すること
を特徴とする請求項１９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、非同期ジャストインタイムコンパイルに関する。
【背景技術】
【０００２】
［著作権情報と許可］
この特許文書の開示の部分は、著作権保護の対象となる資料を含むことがある。著作権者は、特許商標庁の特許ファイル又は記録にあるように、特許文書又は特許開示のいずれかによる複製に異議はないが、それ以外は、全てのいかなる著作権も保持する。次の通知は、この文書に適用されるものとする：Copyright (c) 2005, 本件特許出願人
【０００３】
標準的なエミュレータ／ジャストインタイム（ＪＩＴ）コンパイラにおいて、コード実行及び同期コード翻訳スレッド（synchronous code translation threads）は通常、同じプロセッサ又はプロセッサコアに配置される。ユーザがプログラムを通じてナビゲートしたとき、コード実行スレッドは、変換されたコードキャッシュ内の要求された関数を探すことを試みる。それらの関数が存在するとき、スレッドはフルスピードでそれらの関数を実行し、ユーザは遅延がほとんど又は全くないと認識する。しかしながら、それらの関数が存在しないとき、コード実行スレッドは、その同期コード翻訳スレッドへのブロッキングリクエストを作成し、関数が翻訳されたことをそのスレッドが報告するまで待つ。これらの場合において、ユーザは、エミュレーション／ＪＩＴコンパイル（compilation）の典型であるプログラム実行における短い“ジッタ”を認識する。これは、コンピュータゲームのプレイヤにより要求されるような、スムーズで現実的な動作及びビジュアル効果をユーザが要求するプログラムにおいて特に問題となる。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
これに関して、エミュレータ／ＪＩＴコンパイラがプログラムモジュールのスムーズで迅速な実行を実現する必要がある。
【課題を解決するための手段】
【０００５】
この概要は、簡略化された形式で概念の抜粋を紹介するために提供されるもので、更に後で詳細に説明される。この概要は、特許請求された主題の主要な特徴や本質的な特徴を特定することを意図するものではなく、特許請求された主題の範囲を決定するのを支援するものとして使用されることも意図していない。
【０００６】
上記に示した技術の欠点を考慮して、非同期ＪＩＴコンパイルが提供される。いくつかの実施形態に関して、非同期ＪＩＴコンパイルは、コンピュータプログラムの将来の実行に必要とされ得る少なくとも１つのコンピュータプログラムコードモジュールを検出し、そしてその後、前記コンピュータプログラムのうち既に翻訳済みのプログラムコードモジュールの少なくとも他の１つを実行している間に、前記検出されたプログラムコードモジュールを実行のために翻訳することによって、一部で実行される。これは、例えば、コンピュータプログラムのユーザ実行の前に実行して事前翻訳のために検出されたプログラムコードを事前翻訳するために、同期コード翻訳スレッドにより非同期コード翻訳スレッドを呼び出すことによって、なされる。非同期スレッドは、翻訳し、その後、将来のユーザニーズの予測において発見された第二の関数をコードキャッシュ内に保存することを自由に続けることができる。この連携は、ユーザにより要求された次の関数が既に翻訳されている確率を増加させる。理想的な環境において、この方法は、より複雑な特徴をユーザが動作させるのに先立って、プログラム全体を翻訳することを可能にし、それにより、認識される“ジッタ”が減少し、平均パフォーマンスが向上する。
【０００７】
本発明の他の利点及び特徴が以下に記述される。
【発明を実施するための最良の形態】
【０００８】
ローカルセンスバリア（local sense barrier）を阻止することが図面を参照して更に説明される。
【０００９】
特定の詳細な説明が、以下の記述及び図面において説明され、本発明の様々な実施形態の完全な理解を提供する。コンピューティング及びソフトウェア技術に頻繁に関連付けられる特定の周知の詳細事項は、本発明の様々な実施形態を不必要に不明瞭にするのを避けるために、以下の開示においては説明されない。更に、関連する技術の当業者は理解するであろうが、１つ又は複数の以下に説明する詳細以外で本発明の他の実施形態を実施できる。最後に、様々な方法が以下の開示のステップ及びシーケンスと共に記述されるが、そのような記述は、本発明の実施形態の明確な実装を提供するためのものであり、そのステップ及びステップのシーケンスは、本発明を実施するために要求されるものとして捉えられるべきではない。
【００１０】
図１及び図２を参照すると、１つのプロセッサによる同期ジャストインタイム（ＪＴＩ）コンパイル（図１）、及び２つのプロセッサを利用する非同期ジャストインタイムコンパイル（図２）によるプロセスの例示的実装を説明するタイムチャートが示されている。示されているように、２つのプロセッサにより非同期ジャストインタイムコンパイルを利用するシステムのコンポーネントの例は、次のものが含まれる。  
１．ユーザ入力に応答して、翻訳されたコードをユーザのために実行するコード実行スレッド１０１。  
２．コード翻訳スレッド１０１が関数を翻訳することを初めて要求するイベント（１０３）において、コード実行スレッド１０１により呼び出すことができる同期コード翻訳スレッド１０２。悪化する（degenerate）場合として、コード実行スレッド１０１及び同期スレッド１０２が、同じプロセッサ又はプロセッサコア１０４で実行する。  
３．同期スレッド１０２により呼び出すことができ、又は自己呼び出しをしてユーザ実行及び事前翻訳コード１１７の前に実行することができる非同期コード翻訳スレッド１０５。  
４．同期１０２及び非同期１０５の両方のスレッドが、第二のスレッド（他のプロセッサ又はプロセッサコア１０６で実行する非同期コード翻訳スレッド１０５）の導入により、コード実行スレッド１０１へ配信するために翻訳されたコードを預ける競合管理ストラクチャ（contention-management structures）を有する翻訳済みコードキャッシュ（図示せず）。
【００１１】
図３を参照すると、非同期ジャストインタイム（ＪＩＴ）コンパイルによるプロセスの例示的実装を説明するフローチャートが示されている。ユーザがプログラムを通じてナビゲートしたとき、ユーザアクションは実行の準備がまだできていない（即ち、まだ翻訳又はコンパイルされていない）関数を要求するか否かが決定される（１０７）。ユーザアクションが実行の準備ができている関数を要求した場合、その関数は正常に動作する（１０８）。ユーザアクションが実行の準備ができていない関数を要求した場合、コード実行スレッド１０１は要求された関数を翻訳済みコードキャッシュから検出することを試みる（１０９）。それらの関数が存在するとき（１１０）、そのスレッドはそれらの関数をフルスピードで実行し、ユーザは遅延がほとんど又は全くないと認識する。しかしながら、それらの関数が存在しない場合、そのコード実行スレッドは同期コード翻訳スレッド１０２に対するブロッキングリクエスト１１１を作成し、関数が翻訳されたことをそのスレッドが報告するまで待つ（１１２）。これらの場合において、ユーザは、エミュレーション／ＪＩＴコンパイルの典型であるプログラム実行における短い“ジッタ”を認識するかもしれない。
【００１２】
この欠点は、第二の、例えば、他のプロセッサ又はプロセッサコア１０６で実行する非同期コード翻訳スレッド１０５の導入により取り扱われる。同期翻訳スレッド１０２が関数を処理するとき、ユーザによりその時点でまだ要求されていない他の関数への呼び出しの存在をコード内から検出する（１１３）。そのような呼び出しを識別するとき、同期翻訳スレッド１０２は、関数エントリポイントを非同期翻訳スレッド１０５へ渡す（１１４）。コード実行スレッド１０１のブロックを解除するために、同期スレッド１０２はできるだけ早く返し（１１２）、コードキャッシュ内に事前に保存された翻訳済み関数の実行を続ける。非同期スレッド１０５は、しかしながら、翻訳（１１５）を続け、その後、将来のユーザニーズの予測において発見された第二の関数をコードキャッシュ内に保存（１１６）することができる。この連携は、ユーザにより要求された次の関数が既に翻訳されている確率を増加させる。理想的な環境において、この方法は、より複雑な特徴をユーザが動作させるのに先立って、プログラム全体を翻訳することを可能にし、それにより、“ジッタ”が減少し、平均パフォーマンスが向上する。
【００１３】
この処理は、プログラムバイナリ内の未翻訳のコードを自発的に発見して処理できる非同期スレッド１０５で実行するロジックによって、更に最適化される。実際問題として、全ての関数が続くブランチツリー（branch trees）によって発見可能であるわけではなく、特に、“仮想的な”関数はこの方法で発見されない。例えば、一つの実装は、バイナリを構文解析（parse）してコード関数であるように見えるファイルのセグメント特定するロジックを含んでいる。そのようなセグメントが発見されたとき、それらはすぐに非同期翻訳スレッド１０５の翻訳キューに配置される。この方法の能力の現実世界での説明として、Ｈａｌｏ  ２（登録商標）などの複雑なゲームの９０％以上をゲームプレイの最初の１分以内に配置してコンパイルすることができる。
【００１４】
次に図４を参照すると、上述した処理の実装と連携した使用に適する例示的コンピューティングデバイスを表すブロック図が示されている。例えば、非同期ＪＩＴコンパイルのためのプロセス及び方法を実行するコンピュータ実行可能命令は、図４に示すようなコンピューティング環境などに存在し及び／又は実行されることがある。コンピューティングシステム環境２２０は、適切なコンピューティング環境の一例でしかなく、本発明の使用又は機能性の範囲に関するいかなる限定を示すことも意図していない。コンピューティング環境２２０は、例示的動作環境２２０に説明されたコンポーネントの１つ又はその組合せのいずれかに関するいかなる依存又は要求を持つものとして解釈されるべきではない。例えば、コンピュータゲームコンソールは、上述した処理の実装と連携した使用のために、以下に説明するようなアイテムを含むこともできる。
【００１５】
本発明の態様は、他の多くの汎用又は専用コンピューティングシステム環境又は構成と共に動作できる。本発明による使用に適した周知のコンピューティングシステム、環境、及び／又は構成の例は、これらに限定はされないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルド又はラップトップ装置、マルチプロセッサシステム、マイクロプロセッサベースシステム、セットトップボックス、プログラマブル家庭用電化製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上記システム又は装置のいずれかを含む分散コンピューティング環境、その他を含む。
【００１６】
本発明の態様は、コンピュータによって実行される、プログラムモジュールなどの、コンピュータ実行可能命令の一般的な文脈で実装することができる。一般に、プログラムモジュールは、特定のタスクを実施し又は特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。本発明の態様は、タスクが通信ネットワークを介してリンクされたリモートプロセッシングデバイスによって実行される分散コンピューティング環境において実施することもできる。分散コンピューティング環境において、プログラムモジュールは、メモリ記憶デバイスを含む、ローカル及びリモートの両方のコンピュータ記憶媒体に配置することができる。
【００１７】
本発明の態様を実装するための例示的システムは、汎用目的コンピューティング装置をコンピュータ２４１の形式で含む。コンピュータ２４１のコンポーネントは、限定はしないが、プロセッシングユニット２５９、システムメモリ２２２、及びシステムメモリを含む様々なシステムコンポーネントをプロセッシングユニット２５９へ接続するシステムバス２２１を含む。システムバス２２１は、メモリバス又はメモリコントローラ、周辺機器バス、及び様々なバスアーキテクチャのうちのいずれかを使用するローカルバスのいずれかであるかもしれない。一例として、限定はしないが、そのようなアーキテクチャには、業界標準アーキテクチャ（ＩＳＡ）バス、マイクロカーネルアーキテクチャ（ＭＣＡ）バス、拡張ＩＳＡ（ＥＩＳＡ）、ビデオエレクトロニクス規格協会（ＶＥＳＡ）ローカルバス、メザニン（Mezzanine）バスとしても知られるＰＣＩ（Peripheral Component Interconnect）バスが含まれる。
【００１８】
コンピュータ２４１は通常、コンピュータ可読媒体の多様性を含む。コンピュータ可読媒体は、コンピュータ２４１によりアクセス可能な任意の入手可能なものであり、揮発性及び不揮発性媒体、取外し可能及び取外し不可能なものを含む。一例として、限定はしないが、コンピュータ可読媒体には、コンピュータ記憶媒体及び通信媒体が含まれるかもしれない。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、又は他のデータなどの情報の記憶のための任意の方法又は技術で実装される、揮発性及び不揮発性の両方、取外し可能及び取外し不可能媒体を含む。コンピュータ記憶媒体は、限定はしないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ又は他のメモリ技術、ＣＤ−ＲＯＭ、ＤＶＤ（digital versatile disks）又は他の光学ディスクストレージ、磁器カセット、磁器テープ、磁器ディスクストレージ又は他の磁器ストレージ装置、又は所望の情報を記憶するために使用可能でコンピュータ２４１によりアクセス可能な他の任意の媒体が含まれる。通信媒体は通常、コンピュータ可読命令、データ構造、プログラムモジュール、又は搬送波や他の伝送メカニズムなどの変調データ信号内の他のデータを具現化し、いずれかの情報配信媒体を含む。
【００１９】
用語「変調データ信号」は、信号内に情報をエンコードするような方式で設定され又は変更された１又は複数の特性のセットを有する信号を意味する。一例として、限定はしないが、通信媒体は、有線ネットワークや直接有線接続などの有線媒体、並びに音声、ＲＰ、赤外線及び他の無線媒体などの無線媒体を含む。上記のいずれかの組合せもコンピュータ可読媒体の範囲に含まれるべきである。
【００２０】
システムメモリ２２２は、ＲＯＭ（read only memory）２２３及びＲＡＭ（random access memory）２６０などの揮発性及び／又は不揮発性メモリの形式でコンピュータ記憶媒体を含む。ＢＩＯＳ（basic input/output system）２２４は、スタートアップ中など、コンピュータ２４１内の要素間の情報の伝送を支援する基本ルーチンを含み、通常、ＲＯＭ２２３内に記憶されている。ＲＡＭ２６０は通常、プロセッシングユニット２５９によって直ぐにアクセス可能で、及び／又は現在動作しているデータ及び／又はプログラムモジュールを含んでいる。一例として、限定はしないが、図４は、オペレーティングシステム２２５、アプリケーションプログラム２２６、他のプログラムモジュール２２７、及びプログラムデータ２２８を図示している。
【００２１】
コンピュータ２４１は、他の取外し可能／取外し不可能、揮発性／不揮発性のコンピュータ記憶媒体を含んでも良い。一例にすぎないが、図４は、取外し不可能、不揮発性磁器媒体に対して読み込み又は書込むハードディスクドライブ２３８、取外し可能、不揮発性磁気ディスク２５４に対して読み込み又は書込む磁気ディスクドライブ２３９、及びＣＤ ＲＯＭや他の光学ディスクなどの取外し可能、不揮発性光学ディスク２５３に対して読み込み又は書込む光学ディスクドライブ２４０を図示する。例示的動作環境で使用可能な他の取外し可能／取外し不可能、揮発性／不揮発性コンピュータ記憶媒体は、限定はしないが、磁気テープカセット、フラッシュメモリカード、ＤＶＤ、デジタルビデオテープ、半導体ＲＡＭ、半導体ＲＯＭなどを含む。ハードディスクドライブ２３８は通常、インタフェース２３４などの取外し不可能メモリインタフェースを介してシステムバス２２１に接続されており、磁器ディスクドライブ２３９及び光学ディスクドライブ２４０は通常、インタフェース２３５などの取外し可能メモリインタフェースによりシステムバス２２１に接続されている。
【００２２】
上述され図４に図示されたドライブ及びそれらの関係するコンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール及びコンピュータ２４１のための他のデータの記憶を実現する。図４に、例えば、ハードディスクドライブ２３８は、オペレーティングシステム２５８、アプリケーションプログラム２５７、他のプログラムモジュール２５６、及びプログラムデータ２５５を保存するように図示されている。これらのコンポーネントは、オペレーティングシステム２２５、アプリケーションプログラム２２６、他のプログラムモジュール２２７、及びプログラムデータ２２８と同じ又は異なるものとなり得ることに留意する。オペレーティングシステム２５８、アプリケーションプログラム２５７、他のプログラムモジュール２５６、及びプログラムデータ２５５は、図示するためにここでは異なる符合が付与されており、少なくとも、それらは異なる複製である。ユーザは、コマンド及び情報をコンピュータ２４１に対して、キーボード２５１及び一般にマウス、トラックボール又はタッチパッドと称されるポインティングデバイス２５２などの入力デバイスを介して入力することができる。他の入力装置（図示せず）は、マイクロフォン、ジョイスティック、ゲームパッド、サテライトディッシュ（パラボラ・アンテナ）、スキャナなどを含みうる。これら及び他の入力デバイスはしばしば、システムバスに結合されたユーザ入力インタフェース２３６を介してプロセッシングユニット２５９に接続されるが、パラレルポート、ゲームポート、又はＵＳＢ（universal serial bus）などの他のインタフェース及びバス構造によって接続されても良い。モニタ２４２又は他の種類のディスプレイ装置も、ビデオインタフェース２３２などのインタフェースを介してシステムバス２２１に接続される。モニタに加えて、コンピュータは、スピーカ２４４及びプリンタ２４３などの他の周辺出力デバイスも含むことができ、出力周辺機器インタフェース２３３を介して接続される。
【００２３】
コンピュータ２４１は、リモートコンピュータ２４６などの１つ又は複数のリモートコンピュータへの論理接続を使用しているネットワーク環境において動作することができる。リモートコンピュータ２４６は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス又は他の共有のネットワークノードであり、通常、コンピュータ２４１に関係する上述の要素の多く又は全てを含むが、メモリ記憶デバイス２４７を図４に示したのみである。図４に示されている論理接続は、ＬＡＮ（local area network）２４５及びＷＡＮ（wide area network）２４９を含むが、他のネットワークも含むことができる。そのようなネットワーク環境は、オフィス、においてありふれており、事業規模のコンピュータネットワーク、イントラネット、及びインターネットである。
【００２４】
ＬＡＮのネットワーク環境において使用されたとき、コンピュータ２４１は、ＬＡＮ２４５に、ネットワークインタフェース又はアダプタ２３７を介して接続される。ＷＡＮのネットワーク環境において使用されたとき、コンピュータ２４１は通常、インターネットなどのＷＡＮ２４９を介した通信を確立するためのモデム２５０又は他の手段を含む。モデム２５０は、内臓又は外付けされていてもよく、ユーザ入力インタフェース２３６、又は他の適切なメカニズムを介して、システムバス２２１に接続されても良い。ネットワーク環境において、コンピュータ２４１に関連して、又はそれらの一部として描かれたプログラムモジュールは、リモートメモリ記憶デバイスに記憶されても良い。一例として、限定はしないが、図４は、メモリデバイス２４７上に存在するものとしてリモートアプリケーションプログラム２４８を図示している。当然のことながら、示されたネットワーク接続は、例示的なものであり、コンピュータ間の通信リンクを確立する他の手段が使用されても良い。
【００２５】
当然のことながら、ここに記述された様々な技術がハードウェア又はソフトウェアとの接続において実装されても良く、又は、適切に両者を組み合わせる。従って、本発明の方法及び装置、又は所定の態様又はそれらの一部は、実体のある媒体、例えば、フロッピー（登録商標）ディスクディスケット、ＣＤ−ＲＯＭ、ハードドライブ、又は他のマシン可読記憶媒体など、で具現化されたプログラムコード（すなわち、命令）の形式をとるかもしれない。ここで、プログラムコードがロードされ、コンピュータなどのマシンによって実行されたとき、そのマシンは、本発明を実施するための装置となる。プログラマブルコンピュータ上でのプログラムコードの実行の場合、コンピューティングデバイスは通常、プロセッサ、プロセッサにより読み取り可能な記憶媒体（揮発性及び不揮発性メモリ及び／又はストレージエレメントを含む）、少なくとも１つの入力デバイス、及び少なくとも１つの出力デバイスを含む。本発明に関連して記述されたプロセスを、例えば、ＡＰＩ、再利用可能なコントロールなどの使用を介して実装又は利用できる１つ又は複数のプログラム。そのようなプログラムは、好ましくは、高級手続き型、又はオブジェクト指向プログラミング言語で実装され、コンピュータシステムと通信する。しかしながら、プログラムは、望まれる場合、アセンブリ又はマシン語で実装することができる。いずれの場合においても、言語は、コンパイル言語又はインタプリタ言語であり、ハードウェア実装と結合する。
【００２６】
例示的実施形態は、１つ又は複数のスタンドアロンコンピュータシステムのコンテキストで本発明の態様を利用することに言及することができるが、本発明はそれに限定されず、むしろ、ネットワーク又は分散コンピューティング環境などの任意のコンピューティング環境と関連して実装することができる。更にまた、本発明の態様は、複数のプロセッシングチップ又はデバイスにおいて又はそれらを横断して実装できるが、ストレージが同様に複数のデバイスを横断して成立する。そのようなデバイスは、パーソナルコンピュータ、ネットワークサービス、ハンドヘルドデバイス、スーパーコンピュータ、又は車や飛行機などの他のシステムに統合されたコンピュータを含む。
【００２７】
次に図５を参照すると、多くのコンピュータ化されたプロセスを実装して上述した処理を実施可能な例示的ネットワークコンピューティング環境が示されている。例えば、パラレルコンピューティングは、非同期ＪＩＴコンパイルを使用及び／又は実装して、図５のネットワーク上に様々なクライアントを有するネットワーク環境などの一部となるかもしれない。本技術の通常のスキルを有する者には当然であるが、ネットワークは、任意のコンピュータ又は他のクライアント又はサーバデバイスを、或いは分散コンピューティング環境において接続することができる。これに関連して、任意の数のプロセッシング、メモリ、又はストレージユニット、並びに同時に発生する任意の数のアプリケーション及びプロセスを有する任意のコンピュータシステム又は環境は、提供されるシステム及び方法に関する使用のために適切に考慮される。
【００２８】
分散コンピューティングは、コンピューティングデバイス及びシステムの間の交換によるコンピュータリソース及びサービスの共有を実現する。これらのリソース及びサービスは、情報、キャッシュストレージ及びファイルのディスクストレージの交換を含む。分散コンピューティングは、ネットワークの接続性の利点を生かして、クライアントがその集約した力を利用して事業全体に利益をもたらすことができる。これに関連して、様々なデバイスは、上述したプロセスを実装可能なアプリケーション、オブジェクト又はリソースを有することができる。
【００２９】
図５は、例示的ネットワーク又は分散コンピューティング環境の概略図を提供する。この環境は、コンピューティングデバイス２７１、２７２、２７６、及び２７７、並びにオブジェクト２７３、２７４、及び２７５、並びにデータベース２７８を備える。エンティティ２７１、２７２、２７３、２７４、２７５、２７６、２７７及び２７８は、プログラム、メソッド、データストア、プログラマブルロジックなどを有し又は利用することができる。エンティティ２７１、２７２、２７３、２７４、２７５、２７６、２７７及び２７８は、例えば、ＰＤＡ、オーディオ／ビデオデバイス、ＭＰ３プレイヤ、パーソナルコンピュータなどの同一又は異なる装置の部分に及ぶかもしれない。エンティティ２７１、２７２、２７３、２７４、２７５、２７６、２７７及び２７８のそれぞれは、他のエンティティ２７１、２７２、２７３、２７４、２７５、２７６、２７７及び２７８と通信ネットワーク２７０を介して通信することができる。これに関して、任意のエンティティがデータベース２７８又は他のストレージ要素のメンテナンス及び更新について責任を持つ。
【００３０】
このネットワーク２７０はそれ自身が、図５のシステムに対してサービスを提供する他のエンティティを含むことができ、複数の相互接続ネットワークを表すことができる。本発明の態様に従って、エンティティ２７１、２７２、２７３、２７４、２７５、２７６、２７７及び２７８のそれぞれは、ＡＰＩ、他のオブジェクト、ソフトウェア、ファームウェア及び／又はハードウェアを使用して別々の機能的プログラムモジュールを含むことができ、他のエンティティ２７１、２７２、２７３、２７４、２７５、２７６、２７７及び２７８の１つ又は複数のサービスを要求することができる。
【００３１】
当然のことながら、２７５などのオブジェクトは、他のコンピューティングデバイス２７６にホストされている。従って、図示された物理的環境は、コンピュータとしての接続されたデバイスを示しており、そのような説明は例示に過ぎず、その物理的環境は、選択的に図示され又は記述され、ＰＤＡ、テレビジョン、ＭＰ３プレイヤなどの様々なデジタルデバイス、インタフェースなどのソフトウェアオブジェクト、ＣＯＭオブジェクトなどを含んでいる。
【００３２】
分散コンピューティング環境をサポートする様々なシステム、コンポーネント、及びネットワークコンフィギュレーションがある。例えば、コンピューティングシステムは、有線又は無線システムにより、ローカルネットワーク又は広域分散ネットワークによりお互いに接続されてもよい。現在、多くのネットワークがインターネットに接続されており、広域分散コンピューティングのためのインフラストラクチャを提供し、多くの異なるネットワークを包含する。インターネットに接続され又は接続されていないそのようなインフラストラクチャの任意のものが、提供されたシステム及び方法と共に使用されるかもしれない。
【００３３】
ネットワークインフラストラクチャは、クライアント／サーバ、ピアツーピア、又はハイブリッドアーキテクチャなどのネットワークトポロジのホストを可能にするかもしれない。「クライアント」は、関係しない他のクラス又はグループのサービスを使用するクラス又はグループのメンバである。コンピューティングにおいて、クライアントはプロセス、すなわち、おおよそ、他のプログラムにより提供されるサービスをリクエストする命令又はタスクのセットである。クライアントは、他のプログラム又はサービスについての動作の詳細を知ることなしに、リクエストされたサービスを利用する。クライアント／サーバアーキテクチャ、特にネットワークシステムにおいて、クライアントは通常、他のコンピュータ、例えばサーバにより提供された共有ネットワークリソースにアクセスするコンピュータである。図５の例において、エンティティ２７１、２７２、２７３、２７４、２７５、２７６、２７７及び２７８のいずれかは、クライアント、サーバ、又は両者とみなされ、それは状況に依存する。
【００３４】
サーバは通常、必ずしもではないが、リモート又はローカルのネットワーク、例えばインターネットなどを介して、リモートコンピュータシステムがアクセス可能である。クライアントプロセスは、第１のコンピュータシステムにおいてアクティブであるかもしれないし、サーバプロセスは第２のコンピュータシステムでアクティブであるかもしれず、通信媒体を介して他方と通信し、それ故に、分散機能を提供し、複数のクライアントがサーバの情報収集能力を利用することができる。任意のソフトウェアオブジェクトは、複数のコンピューティングデバイス又はオブジェクトを横断して分散されても良い。
【００３５】
クライアント及びサーバは、プロトコルの層により提供された機能性を利用して他方と通信する。例えば、ＨＴＴＰプロトコル（HyperText Transfer Protocol）は、ＷＷＷ（World Wide Web）、すなわち「Ｗｅｂ」と連携して使用される共通プロトコルである。通常、ＩＰ（Internet Protocol）アドレスなどのコンピュータネットワークアドレス、又はＵＲＬ（Universal Resource Locator）などの他のリファレンスは、サーバ又はクライアントのコンピュータがお互いを特定するために使用することができる。ネットワークアドレスは、ＵＲＬアドレスとして参照される。通信は、通信媒体を介して提供可能であり、例えば、クライアント及びサーバは、高速通信のためのＴＣＰ／ＩＴ接続を介して他方に接続されてもよい。
【００３６】
図５に提供された一般的なフレームワークに従って構築可能な様々なコンピューティング環境、及び図５のようなネットワーク環境における通信において発生し得る更なる多様性を考慮して、ここに提供されたシステム及び方法を、特定のコンピューティングアーキテクチャのいずかの方法に限定されるものとして構築することはできない。代わりに、本発明は、いずれかの単一の実施形態に限定されるべきではないが、むしろ、特許請求の範囲に従った幅及び範囲で構築されるべきである。
【図面の簡単な説明】
【００３７】
【図１】１つのプロセッサを用いた同期ＪＩＴ（just-in-time）コンパイルによるプロセスの例示的実装を示すタイムチャートである。
【図２】２つのプロセッサを用いた非同期ＪＩＴ（just-in-time）コンパイルによるプロセスの例示的実装を示すタイムチャートである。
【図３】非同期ＪＩＴ（just-in-time）コンパイルによるプロセスの例示的実装を示すフローチャートである。
【図４】図１から図３のＪＩＴコンパイルプロセスの実装と併せた使用に適した例示的コンピューティングデバイスを表すブロック図である。
【図５】多数のコンピュータ化されたプロセスが実装され図１から図３のＪＩＴコンパイルプロセスを実施する例示的ネットワークコンピューティング環境を示す。
【図１】
2009516296.tif 000003
【図２】
2009516296.tif 000004
【図３】
2009516296.tif 000005
【図４】
2009516296.tif 000006
【図５】
2009516296.tif 000007
【国際調査報告】
2009516296.tif 000008
2009516296.tif 000009