説明

非同期ジャストインタイムコンパイル

非同期JIT(just-in-time)コンパイルが提供される。第二のプロセッサ上で実行する非同期コード翻訳スレッドが、同期スレッドにより呼び出され、又は自己呼び出しされ、ユーザ実行の前に実行してコードを事前翻訳する。同期及び非同期スレッドがコード実行スレッドに配信するための翻訳済みコードを預けるための、翻訳済みコードキャッシュが競合管理ストラクチャを有して存在する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、非同期ジャストインタイムコンパイルに関する。
【背景技術】
【0002】
[著作権情報と許可]
この特許文書の開示の部分は、著作権保護の対象となる資料を含むことがある。著作権者は、特許商標庁の特許ファイル又は記録にあるように、特許文書又は特許開示のいずれかによる複製に異議はないが、それ以外は、全てのいかなる著作権も保持する。次の通知は、この文書に適用されるものとする:Copyright (c) 2005, 本件特許出願人
【0003】
標準的なエミュレータ/ジャストインタイム(JIT)コンパイラにおいて、コード実行及び同期コード翻訳スレッド(synchronous code translation threads)は通常、同じプロセッサ又はプロセッサコアに配置される。ユーザがプログラムを通じてナビゲートしたとき、コード実行スレッドは、変換されたコードキャッシュ内の要求された関数を探すことを試みる。それらの関数が存在するとき、スレッドはフルスピードでそれらの関数を実行し、ユーザは遅延がほとんど又は全くないと認識する。しかしながら、それらの関数が存在しないとき、コード実行スレッドは、その同期コード翻訳スレッドへのブロッキングリクエストを作成し、関数が翻訳されたことをそのスレッドが報告するまで待つ。これらの場合において、ユーザは、エミュレーション/JITコンパイル(compilation)の典型であるプログラム実行における短い“ジッタ”を認識する。これは、コンピュータゲームのプレイヤにより要求されるような、スムーズで現実的な動作及びビジュアル効果をユーザが要求するプログラムにおいて特に問題となる。
【発明の開示】
【発明が解決しようとする課題】
【0004】
これに関して、エミュレータ/JITコンパイラがプログラムモジュールのスムーズで迅速な実行を実現する必要がある。
【課題を解決するための手段】
【0005】
この概要は、簡略化された形式で概念の抜粋を紹介するために提供されるもので、更に後で詳細に説明される。この概要は、特許請求された主題の主要な特徴や本質的な特徴を特定することを意図するものではなく、特許請求された主題の範囲を決定するのを支援するものとして使用されることも意図していない。
【0006】
上記に示した技術の欠点を考慮して、非同期JITコンパイルが提供される。いくつかの実施形態に関して、非同期JITコンパイルは、コンピュータプログラムの将来の実行に必要とされ得る少なくとも1つのコンピュータプログラムコードモジュールを検出し、そしてその後、前記コンピュータプログラムのうち既に翻訳済みのプログラムコードモジュールの少なくとも他の1つを実行している間に、前記検出されたプログラムコードモジュールを実行のために翻訳することによって、一部で実行される。これは、例えば、コンピュータプログラムのユーザ実行の前に実行して事前翻訳のために検出されたプログラムコードを事前翻訳するために、同期コード翻訳スレッドにより非同期コード翻訳スレッドを呼び出すことによって、なされる。非同期スレッドは、翻訳し、その後、将来のユーザニーズの予測において発見された第二の関数をコードキャッシュ内に保存することを自由に続けることができる。この連携は、ユーザにより要求された次の関数が既に翻訳されている確率を増加させる。理想的な環境において、この方法は、より複雑な特徴をユーザが動作させるのに先立って、プログラム全体を翻訳することを可能にし、それにより、認識される“ジッタ”が減少し、平均パフォーマンスが向上する。
【0007】
本発明の他の利点及び特徴が以下に記述される。
【発明を実施するための最良の形態】
【0008】
ローカルセンスバリア(local sense barrier)を阻止することが図面を参照して更に説明される。
【0009】
特定の詳細な説明が、以下の記述及び図面において説明され、本発明の様々な実施形態の完全な理解を提供する。コンピューティング及びソフトウェア技術に頻繁に関連付けられる特定の周知の詳細事項は、本発明の様々な実施形態を不必要に不明瞭にするのを避けるために、以下の開示においては説明されない。更に、関連する技術の当業者は理解するであろうが、1つ又は複数の以下に説明する詳細以外で本発明の他の実施形態を実施できる。最後に、様々な方法が以下の開示のステップ及びシーケンスと共に記述されるが、そのような記述は、本発明の実施形態の明確な実装を提供するためのものであり、そのステップ及びステップのシーケンスは、本発明を実施するために要求されるものとして捉えられるべきではない。
【0010】
図1及び図2を参照すると、1つのプロセッサによる同期ジャストインタイム(JTI)コンパイル(図1)、及び2つのプロセッサを利用する非同期ジャストインタイムコンパイル(図2)によるプロセスの例示的実装を説明するタイムチャートが示されている。示されているように、2つのプロセッサにより非同期ジャストインタイムコンパイルを利用するシステムのコンポーネントの例は、次のものが含まれる。
1.ユーザ入力に応答して、翻訳されたコードをユーザのために実行するコード実行スレッド101。
2.コード翻訳スレッド101が関数を翻訳することを初めて要求するイベント(103)において、コード実行スレッド101により呼び出すことができる同期コード翻訳スレッド102。悪化する(degenerate)場合として、コード実行スレッド101及び同期スレッド102が、同じプロセッサ又はプロセッサコア104で実行する。
3.同期スレッド102により呼び出すことができ、又は自己呼び出しをしてユーザ実行及び事前翻訳コード117の前に実行することができる非同期コード翻訳スレッド105。
4.同期102及び非同期105の両方のスレッドが、第二のスレッド(他のプロセッサ又はプロセッサコア106で実行する非同期コード翻訳スレッド105)の導入により、コード実行スレッド101へ配信するために翻訳されたコードを預ける競合管理ストラクチャ(contention-management structures)を有する翻訳済みコードキャッシュ(図示せず)。
【0011】
図3を参照すると、非同期ジャストインタイム(JIT)コンパイルによるプロセスの例示的実装を説明するフローチャートが示されている。ユーザがプログラムを通じてナビゲートしたとき、ユーザアクションは実行の準備がまだできていない(即ち、まだ翻訳又はコンパイルされていない)関数を要求するか否かが決定される(107)。ユーザアクションが実行の準備ができている関数を要求した場合、その関数は正常に動作する(108)。ユーザアクションが実行の準備ができていない関数を要求した場合、コード実行スレッド101は要求された関数を翻訳済みコードキャッシュから検出することを試みる(109)。それらの関数が存在するとき(110)、そのスレッドはそれらの関数をフルスピードで実行し、ユーザは遅延がほとんど又は全くないと認識する。しかしながら、それらの関数が存在しない場合、そのコード実行スレッドは同期コード翻訳スレッド102に対するブロッキングリクエスト111を作成し、関数が翻訳されたことをそのスレッドが報告するまで待つ(112)。これらの場合において、ユーザは、エミュレーション/JITコンパイルの典型であるプログラム実行における短い“ジッタ”を認識するかもしれない。
【0012】
この欠点は、第二の、例えば、他のプロセッサ又はプロセッサコア106で実行する非同期コード翻訳スレッド105の導入により取り扱われる。同期翻訳スレッド102が関数を処理するとき、ユーザによりその時点でまだ要求されていない他の関数への呼び出しの存在をコード内から検出する(113)。そのような呼び出しを識別するとき、同期翻訳スレッド102は、関数エントリポイントを非同期翻訳スレッド105へ渡す(114)。コード実行スレッド101のブロックを解除するために、同期スレッド102はできるだけ早く返し(112)、コードキャッシュ内に事前に保存された翻訳済み関数の実行を続ける。非同期スレッド105は、しかしながら、翻訳(115)を続け、その後、将来のユーザニーズの予測において発見された第二の関数をコードキャッシュ内に保存(116)することができる。この連携は、ユーザにより要求された次の関数が既に翻訳されている確率を増加させる。理想的な環境において、この方法は、より複雑な特徴をユーザが動作させるのに先立って、プログラム全体を翻訳することを可能にし、それにより、“ジッタ”が減少し、平均パフォーマンスが向上する。
【0013】
この処理は、プログラムバイナリ内の未翻訳のコードを自発的に発見して処理できる非同期スレッド105で実行するロジックによって、更に最適化される。実際問題として、全ての関数が続くブランチツリー(branch trees)によって発見可能であるわけではなく、特に、“仮想的な”関数はこの方法で発見されない。例えば、一つの実装は、バイナリを構文解析(parse)してコード関数であるように見えるファイルのセグメント特定するロジックを含んでいる。そのようなセグメントが発見されたとき、それらはすぐに非同期翻訳スレッド105の翻訳キューに配置される。この方法の能力の現実世界での説明として、Halo 2(登録商標)などの複雑なゲームの90%以上をゲームプレイの最初の1分以内に配置してコンパイルすることができる。
【0014】
次に図4を参照すると、上述した処理の実装と連携した使用に適する例示的コンピューティングデバイスを表すブロック図が示されている。例えば、非同期JITコンパイルのためのプロセス及び方法を実行するコンピュータ実行可能命令は、図4に示すようなコンピューティング環境などに存在し及び/又は実行されることがある。コンピューティングシステム環境220は、適切なコンピューティング環境の一例でしかなく、本発明の使用又は機能性の範囲に関するいかなる限定を示すことも意図していない。コンピューティング環境220は、例示的動作環境220に説明されたコンポーネントの1つ又はその組合せのいずれかに関するいかなる依存又は要求を持つものとして解釈されるべきではない。例えば、コンピュータゲームコンソールは、上述した処理の実装と連携した使用のために、以下に説明するようなアイテムを含むこともできる。
【0015】
本発明の態様は、他の多くの汎用又は専用コンピューティングシステム環境又は構成と共に動作できる。本発明による使用に適した周知のコンピューティングシステム、環境、及び/又は構成の例は、これらに限定はされないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルド又はラップトップ装置、マルチプロセッサシステム、マイクロプロセッサベースシステム、セットトップボックス、プログラマブル家庭用電化製品、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、上記システム又は装置のいずれかを含む分散コンピューティング環境、その他を含む。
【0016】
本発明の態様は、コンピュータによって実行される、プログラムモジュールなどの、コンピュータ実行可能命令の一般的な文脈で実装することができる。一般に、プログラムモジュールは、特定のタスクを実施し又は特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。本発明の態様は、タスクが通信ネットワークを介してリンクされたリモートプロセッシングデバイスによって実行される分散コンピューティング環境において実施することもできる。分散コンピューティング環境において、プログラムモジュールは、メモリ記憶デバイスを含む、ローカル及びリモートの両方のコンピュータ記憶媒体に配置することができる。
【0017】
本発明の態様を実装するための例示的システムは、汎用目的コンピューティング装置をコンピュータ241の形式で含む。コンピュータ241のコンポーネントは、限定はしないが、プロセッシングユニット259、システムメモリ222、及びシステムメモリを含む様々なシステムコンポーネントをプロセッシングユニット259へ接続するシステムバス221を含む。システムバス221は、メモリバス又はメモリコントローラ、周辺機器バス、及び様々なバスアーキテクチャのうちのいずれかを使用するローカルバスのいずれかであるかもしれない。一例として、限定はしないが、そのようなアーキテクチャには、業界標準アーキテクチャ(ISA)バス、マイクロカーネルアーキテクチャ(MCA)バス、拡張ISA(EISA)、ビデオエレクトロニクス規格協会(VESA)ローカルバス、メザニン(Mezzanine)バスとしても知られるPCI(Peripheral Component Interconnect)バスが含まれる。
【0018】
コンピュータ241は通常、コンピュータ可読媒体の多様性を含む。コンピュータ可読媒体は、コンピュータ241によりアクセス可能な任意の入手可能なものであり、揮発性及び不揮発性媒体、取外し可能及び取外し不可能なものを含む。一例として、限定はしないが、コンピュータ可読媒体には、コンピュータ記憶媒体及び通信媒体が含まれるかもしれない。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、又は他のデータなどの情報の記憶のための任意の方法又は技術で実装される、揮発性及び不揮発性の両方、取外し可能及び取外し不可能媒体を含む。コンピュータ記憶媒体は、限定はしないが、RAM、ROM、EEPROM、フラッシュメモリ又は他のメモリ技術、CD−ROM、DVD(digital versatile disks)又は他の光学ディスクストレージ、磁器カセット、磁器テープ、磁器ディスクストレージ又は他の磁器ストレージ装置、又は所望の情報を記憶するために使用可能でコンピュータ241によりアクセス可能な他の任意の媒体が含まれる。通信媒体は通常、コンピュータ可読命令、データ構造、プログラムモジュール、又は搬送波や他の伝送メカニズムなどの変調データ信号内の他のデータを具現化し、いずれかの情報配信媒体を含む。
【0019】
用語「変調データ信号」は、信号内に情報をエンコードするような方式で設定され又は変更された1又は複数の特性のセットを有する信号を意味する。一例として、限定はしないが、通信媒体は、有線ネットワークや直接有線接続などの有線媒体、並びに音声、RP、赤外線及び他の無線媒体などの無線媒体を含む。上記のいずれかの組合せもコンピュータ可読媒体の範囲に含まれるべきである。
【0020】
システムメモリ222は、ROM(read only memory)223及びRAM(random access memory)260などの揮発性及び/又は不揮発性メモリの形式でコンピュータ記憶媒体を含む。BIOS(basic input/output system)224は、スタートアップ中など、コンピュータ241内の要素間の情報の伝送を支援する基本ルーチンを含み、通常、ROM223内に記憶されている。RAM260は通常、プロセッシングユニット259によって直ぐにアクセス可能で、及び/又は現在動作しているデータ及び/又はプログラムモジュールを含んでいる。一例として、限定はしないが、図4は、オペレーティングシステム225、アプリケーションプログラム226、他のプログラムモジュール227、及びプログラムデータ228を図示している。
【0021】
コンピュータ241は、他の取外し可能/取外し不可能、揮発性/不揮発性のコンピュータ記憶媒体を含んでも良い。一例にすぎないが、図4は、取外し不可能、不揮発性磁器媒体に対して読み込み又は書込むハードディスクドライブ238、取外し可能、不揮発性磁気ディスク254に対して読み込み又は書込む磁気ディスクドライブ239、及びCD ROMや他の光学ディスクなどの取外し可能、不揮発性光学ディスク253に対して読み込み又は書込む光学ディスクドライブ240を図示する。例示的動作環境で使用可能な他の取外し可能/取外し不可能、揮発性/不揮発性コンピュータ記憶媒体は、限定はしないが、磁気テープカセット、フラッシュメモリカード、DVD、デジタルビデオテープ、半導体RAM、半導体ROMなどを含む。ハードディスクドライブ238は通常、インタフェース234などの取外し不可能メモリインタフェースを介してシステムバス221に接続されており、磁器ディスクドライブ239及び光学ディスクドライブ240は通常、インタフェース235などの取外し可能メモリインタフェースによりシステムバス221に接続されている。
【0022】
上述され図4に図示されたドライブ及びそれらの関係するコンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール及びコンピュータ241のための他のデータの記憶を実現する。図4に、例えば、ハードディスクドライブ238は、オペレーティングシステム258、アプリケーションプログラム257、他のプログラムモジュール256、及びプログラムデータ255を保存するように図示されている。これらのコンポーネントは、オペレーティングシステム225、アプリケーションプログラム226、他のプログラムモジュール227、及びプログラムデータ228と同じ又は異なるものとなり得ることに留意する。オペレーティングシステム258、アプリケーションプログラム257、他のプログラムモジュール256、及びプログラムデータ255は、図示するためにここでは異なる符合が付与されており、少なくとも、それらは異なる複製である。ユーザは、コマンド及び情報をコンピュータ241に対して、キーボード251及び一般にマウス、トラックボール又はタッチパッドと称されるポインティングデバイス252などの入力デバイスを介して入力することができる。他の入力装置(図示せず)は、マイクロフォン、ジョイスティック、ゲームパッド、サテライトディッシュ(パラボラ・アンテナ)、スキャナなどを含みうる。これら及び他の入力デバイスはしばしば、システムバスに結合されたユーザ入力インタフェース236を介してプロセッシングユニット259に接続されるが、パラレルポート、ゲームポート、又はUSB(universal serial bus)などの他のインタフェース及びバス構造によって接続されても良い。モニタ242又は他の種類のディスプレイ装置も、ビデオインタフェース232などのインタフェースを介してシステムバス221に接続される。モニタに加えて、コンピュータは、スピーカ244及びプリンタ243などの他の周辺出力デバイスも含むことができ、出力周辺機器インタフェース233を介して接続される。
【0023】
コンピュータ241は、リモートコンピュータ246などの1つ又は複数のリモートコンピュータへの論理接続を使用しているネットワーク環境において動作することができる。リモートコンピュータ246は、パーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ピアデバイス又は他の共有のネットワークノードであり、通常、コンピュータ241に関係する上述の要素の多く又は全てを含むが、メモリ記憶デバイス247を図4に示したのみである。図4に示されている論理接続は、LAN(local area network)245及びWAN(wide area network)249を含むが、他のネットワークも含むことができる。そのようなネットワーク環境は、オフィス、においてありふれており、事業規模のコンピュータネットワーク、イントラネット、及びインターネットである。
【0024】
LANのネットワーク環境において使用されたとき、コンピュータ241は、LAN245に、ネットワークインタフェース又はアダプタ237を介して接続される。WANのネットワーク環境において使用されたとき、コンピュータ241は通常、インターネットなどのWAN249を介した通信を確立するためのモデム250又は他の手段を含む。モデム250は、内臓又は外付けされていてもよく、ユーザ入力インタフェース236、又は他の適切なメカニズムを介して、システムバス221に接続されても良い。ネットワーク環境において、コンピュータ241に関連して、又はそれらの一部として描かれたプログラムモジュールは、リモートメモリ記憶デバイスに記憶されても良い。一例として、限定はしないが、図4は、メモリデバイス247上に存在するものとしてリモートアプリケーションプログラム248を図示している。当然のことながら、示されたネットワーク接続は、例示的なものであり、コンピュータ間の通信リンクを確立する他の手段が使用されても良い。
【0025】
当然のことながら、ここに記述された様々な技術がハードウェア又はソフトウェアとの接続において実装されても良く、又は、適切に両者を組み合わせる。従って、本発明の方法及び装置、又は所定の態様又はそれらの一部は、実体のある媒体、例えば、フロッピー(登録商標)ディスクディスケット、CD−ROM、ハードドライブ、又は他のマシン可読記憶媒体など、で具現化されたプログラムコード(すなわち、命令)の形式をとるかもしれない。ここで、プログラムコードがロードされ、コンピュータなどのマシンによって実行されたとき、そのマシンは、本発明を実施するための装置となる。プログラマブルコンピュータ上でのプログラムコードの実行の場合、コンピューティングデバイスは通常、プロセッサ、プロセッサにより読み取り可能な記憶媒体(揮発性及び不揮発性メモリ及び/又はストレージエレメントを含む)、少なくとも1つの入力デバイス、及び少なくとも1つの出力デバイスを含む。本発明に関連して記述されたプロセスを、例えば、API、再利用可能なコントロールなどの使用を介して実装又は利用できる1つ又は複数のプログラム。そのようなプログラムは、好ましくは、高級手続き型、又はオブジェクト指向プログラミング言語で実装され、コンピュータシステムと通信する。しかしながら、プログラムは、望まれる場合、アセンブリ又はマシン語で実装することができる。いずれの場合においても、言語は、コンパイル言語又はインタプリタ言語であり、ハードウェア実装と結合する。
【0026】
例示的実施形態は、1つ又は複数のスタンドアロンコンピュータシステムのコンテキストで本発明の態様を利用することに言及することができるが、本発明はそれに限定されず、むしろ、ネットワーク又は分散コンピューティング環境などの任意のコンピューティング環境と関連して実装することができる。更にまた、本発明の態様は、複数のプロセッシングチップ又はデバイスにおいて又はそれらを横断して実装できるが、ストレージが同様に複数のデバイスを横断して成立する。そのようなデバイスは、パーソナルコンピュータ、ネットワークサービス、ハンドヘルドデバイス、スーパーコンピュータ、又は車や飛行機などの他のシステムに統合されたコンピュータを含む。
【0027】
次に図5を参照すると、多くのコンピュータ化されたプロセスを実装して上述した処理を実施可能な例示的ネットワークコンピューティング環境が示されている。例えば、パラレルコンピューティングは、非同期JITコンパイルを使用及び/又は実装して、図5のネットワーク上に様々なクライアントを有するネットワーク環境などの一部となるかもしれない。本技術の通常のスキルを有する者には当然であるが、ネットワークは、任意のコンピュータ又は他のクライアント又はサーバデバイスを、或いは分散コンピューティング環境において接続することができる。これに関連して、任意の数のプロセッシング、メモリ、又はストレージユニット、並びに同時に発生する任意の数のアプリケーション及びプロセスを有する任意のコンピュータシステム又は環境は、提供されるシステム及び方法に関する使用のために適切に考慮される。
【0028】
分散コンピューティングは、コンピューティングデバイス及びシステムの間の交換によるコンピュータリソース及びサービスの共有を実現する。これらのリソース及びサービスは、情報、キャッシュストレージ及びファイルのディスクストレージの交換を含む。分散コンピューティングは、ネットワークの接続性の利点を生かして、クライアントがその集約した力を利用して事業全体に利益をもたらすことができる。これに関連して、様々なデバイスは、上述したプロセスを実装可能なアプリケーション、オブジェクト又はリソースを有することができる。
【0029】
図5は、例示的ネットワーク又は分散コンピューティング環境の概略図を提供する。この環境は、コンピューティングデバイス271、272、276、及び277、並びにオブジェクト273、274、及び275、並びにデータベース278を備える。エンティティ271、272、273、274、275、276、277及び278は、プログラム、メソッド、データストア、プログラマブルロジックなどを有し又は利用することができる。エンティティ271、272、273、274、275、276、277及び278は、例えば、PDA、オーディオ/ビデオデバイス、MP3プレイヤ、パーソナルコンピュータなどの同一又は異なる装置の部分に及ぶかもしれない。エンティティ271、272、273、274、275、276、277及び278のそれぞれは、他のエンティティ271、272、273、274、275、276、277及び278と通信ネットワーク270を介して通信することができる。これに関して、任意のエンティティがデータベース278又は他のストレージ要素のメンテナンス及び更新について責任を持つ。
【0030】
このネットワーク270はそれ自身が、図5のシステムに対してサービスを提供する他のエンティティを含むことができ、複数の相互接続ネットワークを表すことができる。本発明の態様に従って、エンティティ271、272、273、274、275、276、277及び278のそれぞれは、API、他のオブジェクト、ソフトウェア、ファームウェア及び/又はハードウェアを使用して別々の機能的プログラムモジュールを含むことができ、他のエンティティ271、272、273、274、275、276、277及び278の1つ又は複数のサービスを要求することができる。
【0031】
当然のことながら、275などのオブジェクトは、他のコンピューティングデバイス276にホストされている。従って、図示された物理的環境は、コンピュータとしての接続されたデバイスを示しており、そのような説明は例示に過ぎず、その物理的環境は、選択的に図示され又は記述され、PDA、テレビジョン、MP3プレイヤなどの様々なデジタルデバイス、インタフェースなどのソフトウェアオブジェクト、COMオブジェクトなどを含んでいる。
【0032】
分散コンピューティング環境をサポートする様々なシステム、コンポーネント、及びネットワークコンフィギュレーションがある。例えば、コンピューティングシステムは、有線又は無線システムにより、ローカルネットワーク又は広域分散ネットワークによりお互いに接続されてもよい。現在、多くのネットワークがインターネットに接続されており、広域分散コンピューティングのためのインフラストラクチャを提供し、多くの異なるネットワークを包含する。インターネットに接続され又は接続されていないそのようなインフラストラクチャの任意のものが、提供されたシステム及び方法と共に使用されるかもしれない。
【0033】
ネットワークインフラストラクチャは、クライアント/サーバ、ピアツーピア、又はハイブリッドアーキテクチャなどのネットワークトポロジのホストを可能にするかもしれない。「クライアント」は、関係しない他のクラス又はグループのサービスを使用するクラス又はグループのメンバである。コンピューティングにおいて、クライアントはプロセス、すなわち、おおよそ、他のプログラムにより提供されるサービスをリクエストする命令又はタスクのセットである。クライアントは、他のプログラム又はサービスについての動作の詳細を知ることなしに、リクエストされたサービスを利用する。クライアント/サーバアーキテクチャ、特にネットワークシステムにおいて、クライアントは通常、他のコンピュータ、例えばサーバにより提供された共有ネットワークリソースにアクセスするコンピュータである。図5の例において、エンティティ271、272、273、274、275、276、277及び278のいずれかは、クライアント、サーバ、又は両者とみなされ、それは状況に依存する。
【0034】
サーバは通常、必ずしもではないが、リモート又はローカルのネットワーク、例えばインターネットなどを介して、リモートコンピュータシステムがアクセス可能である。クライアントプロセスは、第1のコンピュータシステムにおいてアクティブであるかもしれないし、サーバプロセスは第2のコンピュータシステムでアクティブであるかもしれず、通信媒体を介して他方と通信し、それ故に、分散機能を提供し、複数のクライアントがサーバの情報収集能力を利用することができる。任意のソフトウェアオブジェクトは、複数のコンピューティングデバイス又はオブジェクトを横断して分散されても良い。
【0035】
クライアント及びサーバは、プロトコルの層により提供された機能性を利用して他方と通信する。例えば、HTTPプロトコル(HyperText Transfer Protocol)は、WWW(World Wide Web)、すなわち「Web」と連携して使用される共通プロトコルである。通常、IP(Internet Protocol)アドレスなどのコンピュータネットワークアドレス、又はURL(Universal Resource Locator)などの他のリファレンスは、サーバ又はクライアントのコンピュータがお互いを特定するために使用することができる。ネットワークアドレスは、URLアドレスとして参照される。通信は、通信媒体を介して提供可能であり、例えば、クライアント及びサーバは、高速通信のためのTCP/IT接続を介して他方に接続されてもよい。
【0036】
図5に提供された一般的なフレームワークに従って構築可能な様々なコンピューティング環境、及び図5のようなネットワーク環境における通信において発生し得る更なる多様性を考慮して、ここに提供されたシステム及び方法を、特定のコンピューティングアーキテクチャのいずかの方法に限定されるものとして構築することはできない。代わりに、本発明は、いずれかの単一の実施形態に限定されるべきではないが、むしろ、特許請求の範囲に従った幅及び範囲で構築されるべきである。
【図面の簡単な説明】
【0037】
【図1】1つのプロセッサを用いた同期JIT(just-in-time)コンパイルによるプロセスの例示的実装を示すタイムチャートである。
【図2】2つのプロセッサを用いた非同期JIT(just-in-time)コンパイルによるプロセスの例示的実装を示すタイムチャートである。
【図3】非同期JIT(just-in-time)コンパイルによるプロセスの例示的実装を示すフローチャートである。
【図4】図1から図3のJITコンパイルプロセスの実装と併せた使用に適した例示的コンピューティングデバイスを表すブロック図である。
【図5】多数のコンピュータ化されたプロセスが実装され図1から図3のJITコンパイルプロセスを実施する例示的ネットワークコンピューティング環境を示す。

【特許請求の範囲】
【請求項1】
コンピュータプログラムコードを翻訳する方法であって、
コンピュータプログラムの実行が将来要求されうる少なくとも1つのコンピュータプログラムコードモジュールを検出するステップと、
前記コンピュータプログラムの少なくとも1つの既に翻訳済みのプログラムコードモジュールを実行する間、前記検出された他のプログラムコードモジュールを実行のために翻訳するステップと
を有することを特徴とする方法。
【請求項2】
前記コンピュータプログラムの実行が要求されるプログラムコードモジュールの将来の実行のために前記検出され翻訳されたプログラムコードモジュールを保存するステップを更に有することを特徴とする請求項1に記載の方法。
【請求項3】
前記翻訳するステップは、ユーザ実行の前に実行して前記検出されたプログラムコードを事前翻訳するために、同期コード翻訳スレッドにより非同期コード翻訳を呼び出すステップを有することを特徴とする請求項1に記載の方法。
【請求項4】
前記同期及び非同期の両方のスレッドによって、コード実行スレッドに対して配信するための翻訳済みコードを翻訳済みコードキャッシュに預けるステップを有し、
前記翻訳済みコードキャッシュは、競合管理ストラクチャを有すること
を特徴とする請求項3に記載の方法。
【請求項5】
ユーザ実行の前に実行して前記検出されたプログラムコードを事前翻訳するために、非同期コード翻訳スレッドを自己呼び出しするステップを有することを特徴とする請求項1に記載の方法。
【請求項6】
前記同期及び非同期の両方のコード翻訳スレッドによって、コード実行スレッドに対して配信するための翻訳済みコードを翻訳済みコードキャッシュに預けるステップを有し、
前記翻訳済みコードキャッシュは、競合管理ストラクチャを有すること
を特徴とする請求項5に記載の方法。
【請求項7】
前記コンピュータプログラムの可能な実行のブランチツリー表現に対応するバイナリーツリーを構文解析することによって、コード関数であるように見える前記コンピュータプログラムのセグメント特定するステップを有することを特徴とする請求項1に記載の方法。
【請求項8】
請求項1に記載の方法を実施するための命令を有するコンピュータ読み取り可能媒体。
【請求項9】
請求項2に記載の方法を実施するための命令を有するコンピュータ読み取り可能媒体。
【請求項10】
請求項3に記載の方法を実施するための命令を有するコンピュータ読み取り可能媒体。
【請求項11】
請求項4に記載の方法を実施するための命令を有するコンピュータ読み取り可能媒体。
【請求項12】
請求項5に記載の方法を実施するための命令を有するコンピュータ読み取り可能媒体。
【請求項13】
請求項6に記載の方法を実施するための命令を有するコンピュータ読み取り可能媒体。
【請求項14】
請求項7に記載の方法を実施するための命令を有するコンピュータ読み取り可能媒体。
【請求項15】
コンピュータプログラムの実行が将来要求されうる少なくとも1つのコンピュータプログラムコードモジュールを検出する手段と、
前記コンピュータプログラムの少なくとも1つの既に翻訳済みのプログラムコードモジュールを実行する間、前記検出された他のプログラムコードモジュールを実行のために翻訳する手段と
を有することを特徴とするコンピュータプログラムコードを翻訳するためのシステム。
【請求項16】
前記コンピュータプログラムの実行が要求されるプログラムコードモジュールの将来の実行のために前記検出され翻訳されたプログラムコードモジュールを保存する手段を更に有することを特徴とする請求項15に記載のシステム。
【請求項17】
コンピュータプログラムのユーザ実行の前に実行して事前翻訳のために検出されたプログラムコードを事前翻訳するために、同期コード翻訳スレッドにより非同期コード翻訳スレッドを呼び出すための手段を有することを特徴とするコンピュータプログラムコードを翻訳するシステム。
【請求項18】
前記同期及び非同期の両方のスレッドによって、コード実行スレッドに対して配信するための翻訳済みコードを翻訳済みコードキャッシュに預ける手段を有し、
前記翻訳済みコードキャッシュは、競合管理ストラクチャを有すること
を特徴とする請求項17に記載のシステム。
【請求項19】
ユーザ実行の前に実行して前記検出されたプログラムコードを事前翻訳するために、非同期コード翻訳スレッドを自己呼び出しする手段を有することを特徴とする請求項17に記載のシステム。
【請求項20】
前記同期及び非同期の両方のコード翻訳スレッドによって、コード実行スレッドに対して配信するための翻訳済みコードを翻訳済みコードキャッシュに預ける手段を有し、
前記翻訳済みコードキャッシュは、競合管理ストラクチャを有すること
を特徴とする請求項19に記載のシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate


【公表番号】特表2009−516296(P2009−516296A)
【公表日】平成21年4月16日(2009.4.16)
【国際特許分類】
【出願番号】特願2008−541175(P2008−541175)
【出願日】平成18年10月18日(2006.10.18)
【国際出願番号】PCT/US2006/040838
【国際公開番号】WO2007/055883
【国際公開日】平成19年5月18日(2007.5.18)
【出願人】(500046438)マイクロソフト コーポレーション (3,165)
【Fターム(参考)】