(54)【発明の名称】分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングのためのシステム、方法、およびコンピュータ・プログラム(分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリング)
(58)【調査した分野】(Int.Cl.,DB名)
リモート実行コンテナ(110)からのデータ・コンテナへの参照に対する初期要求の受信に応答して、分散型バーチャル・マシンの分散型エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネント(214)から、前記分散型バーチャル・マシンの分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネント(216)に、前記データ・コンテナへの前記参照に対する前記初期要求を送信することと、
前記データ・コンテナへの前記参照に対する前記初期要求に応答して、不変データおよび前記データ・コンテナへの前記参照を含むデータ・ミラー・データ構造を受信することと、
前記不変データおよび前記データ・コンテナへの前記参照を含む前記受信したデータ・ミラー・データ構造をローカル・メモリ記憶エリア内に記憶することと、
前記データ・コンテナへの前記参照に対する前記初期要求に応答して、前記ローカルに記憶したデータ・ミラー・データ構造への参照を、前記リモート実行コンテナに戻すことと、
を含む、方法。
前記ローカルに記憶したデータ・ミラー・データ構造を用いて、前記データ・コンテナに関連付けられた追加データ・アイテムに対する要求を処理することを更に含む、請求項1に記載の方法。
前記データ・コンテナに関連付けられた前記追加データ・アイテムに対する前記要求が不変データに対する前記要求を含まないという判定、および前記要求された不変データが前記ローカルに記憶したデータ・ミラー・データ構造内で利用可能でないという判定の一方を行うことと、
前記ローカルに記憶したデータ・ミラー・データ構造から、前記データ・ミラー・データ構造と共に戻された前記データ・コンテナへの前記参照を抽出することと、
前記データ・コンテナへの前記抽出した参照と共に、前記データ・コンテナに関連付けられた前記追加データ・アイテムに対する前記要求を、前記分散型バーチャル・マシンの前記分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネントに送信することと、
前記分散型バーチャル・マシンの前記分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネントから、前記要求された追加データ・アイテムおよび追加の不変データを受信することと、
前記追加の不変データを前記ローカルに記憶したデータ・ミラー・データ構造に記憶することと、
前記要求された追加データ・アイテムを前記リモート実行コンテナに戻すことと、
を更に含む、請求項3に記載の方法。
分散型バーチャル・マシンの分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネント(216)において、前記分散型バーチャル・マシンの分散型エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネント(214)から、データ・コンテナへの参照に対する初期要求を受信することと、
前記データ・コンテナへの前記参照に対する前記初期要求の受信に応答して、前記データ・コンテナ内の不変データを識別することと、
前記識別した不変データおよび前記データ・コンテナへの前記要求された参照を含むデータ・ミラー・データ構造を構築することと、
前記データ・コンテナへの前記参照に対する前記初期要求に応答して、前記識別した不変データおよび前記データ・コンテナへの前記要求された参照を含む前記データ・ミラー・データ構造を、前記分散型バーチャル・マシンの前記分散型エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネントに送信することと、
を含む、方法。
前記識別した不変データおよび前記データ・コンテナへの前記要求された参照を含む前記データ・ミラー・データ構造を構築することが、前記不変データの一部を用いて前記データ・ミラー・データ構造を構築することを含む、請求項10に記載の方法。
前記データ・コンテナ内の前記追加データ・アイテムに対する前記要求に応答して前記要求された追加データ・アイテムを送信することが、前記データ・コンテナから追加の非不変データ・アイテムを送信することを含む、請求項13に記載の方法。
前記データ・コンテナ内の前記追加データ・アイテムに対する前記要求に応答して前記要求された追加データ・アイテムを送信することが、追加の不変データ・アイテムを送信することを含む、請求項13に記載の方法。
前記データ・コンテナからの前記追加データ・アイテムに対する前記要求の受信に応答して、前記要求された追加データ・アイテムと共に送信するために追加の不変データが利用可能であるか否かを判定することと、
前記要求された追加データ・アイテムと共に送信するために前記追加の不変データが利用可能であるという判定に応答して、
前記追加の不変データを識別することと、
前記データ・コンテナから前記追加の不変データを抽出することと、
を含み、
前記データ・コンテナ内の前記追加データ・アイテムに対する前記要求に応答して前記要求された追加データ・アイテムを送信することが、前記データ・コンテナ内の前記追加データ・アイテムに対する前記要求に応答して前記抽出した追加の不変データおよび前記要求された追加データ・アイテムを送信することを含む、請求項13に記載の方法。
【発明を実施するための形態】
【0008】
以下に示す例は、当業者が本発明を実施し、本発明を実行する最良のモードを例示することを可能とするために必要な情報を提示する。添付図面を参照して以下の説明を読めば、当業者は、本発明の概念を理解し、本明細書に具体的に述べられていないこれらの概念の適用について認識するであろう。これらの概念および適用が本開示および添付図面の範囲内にあることは理解されよう。
【0009】
本明細書に述べる主題は、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングを提供する。分散型バーチャル・マシンのネイティブ・インタフェースは、エンハンス(enhanced)・リモート実行コンテナ(REC:remote execution container)・ネイティブ・インタフェース・コンポーネントおよびエンハンス・バーチャル・マシン(VM)・ネイティブ・インタフェース・コンポーネントに分割される。分散型エンハンスRECネイティブ・インタフェース・コンポーネントは、分散型バーチャル・マシンのリモート実行コンテナ・モジュールとインタフェースする。分散型エンハンスVMネイティブ・インタフェース・コンポーネントは、分散型バーチャル・マシンのバーチャル・マシン・モジュールとインタフェースする。これらの分散型ネイティブ・インタフェース・コンポーネントは、同一または異なるデバイス上で、それぞれリモート実行コンテナおよびバーチャル・マシンを用いて、別個のプロセスで実行される。リモート実行コンテナにおいて発行する要求に応答して、分散型エンハンスRECネィティブ・インタフェース・コンポーネントは、分散型エンハンスVMネイティブ・インタフェース・コンポーネントに、データ・コンテナ(例えばクラス)への参照についての最初の要求を発生する。分散型エンハンスVMネイティブ・インタフェース・コンポーネントは、このデータ・コンテナへの参照についての最初の要求に応答して、データ・コンテナを表すデータ・ミラー・データ構造内にカプセル化したデータ・コンテナに関連付けて要求された参照および不変データを与える。本記載の目的のため、「不変データ」は、変化しないデータを含む(例えばメソッド識別子(ID)またはメソッド名あるいはその両方、フィールド識別子(ID)またはフィールド名あるいはその両方、および「ファイナル(final)」データ値とマークされた静的ファイナル・フィールド識別子(ID)またはフィールド値あるいはその両方)。エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネントは、データ・ミラー・データ構造を記憶し、不変データに対する要求に応えてデータ・ミラー・データ構造から要求された不変データを検索する。このように、不変データを検索するための追加のプロセス間通信を無くすことができる。更に、利用可能な不変データの部分はデータ・ミラー・データ構造内に最初にカプセル化することができ、不変データは経時的に増大させることができる。このように、2つのエンハンス・ネイティブ・インタフェース・コンポーネント間の相互作用による処理は、プロセス間通信の効率を向上させるように動作する。
【0010】
本主題は、例えば分散型Java(TM)バーチャル・マシン(JVM(R))における分散型Java(TM)ネイティブ・インタフェース(JNI)に適用可能である。しかしながら本主題は、所与の実施に合わせて適宜、いかなる分散型バーチャル・マシンにおけるいかなるネイティブ・インタフェースにも適用可能である。JNIはアプリケーション・プログラミング・インタフェース(API)であり、このためJNIは本明細書において「JNIクライアント」または「JNIアプリケーション」と相互交換可能に称することができ、この理解および本明細書に記載するインタフェースの分散性の文脈において簡潔に「JNT」と称することができることは理解されよう。
【0011】
本主題は、分散型バーチャル・マシンにおいてJava(TM)ネイティブ・インタフェース(JNI)・クライアントとJava(TM)バーチャル・マシン(JVM(R))との間で発生するパターンを利用して、プロセス間通信の効率を高める。例えば、本主題が適用される状況は、JNIがデータ・コンテナへの参照に対する第1の要求(参照要求)をJVM(R)に発行し、この初期参照要求に応答してJVM(R)から戻された参照を用いてそのデータ・コンテナ内のデータに対する以降の要求(データ要求)を発行する場合等である。これらのような場合、分散型バーチャル・マシンのJVM(R)部分を実行するデバイス/プロセスは、初期参照要求に応答して動作して、データ・コンテナに関連した不変データ(例えば以下で詳述するような不変データの全てまたは一部)を識別し、参照要求に応答して分散型バーチャル・マシンのリモート実行コンテナ部分を実行するデバイス/プロセスに不変データを戻す。不変データは、分散型バーチャル・マシンのリモート実行コンテナ部分を実行するデバイス/プロセスに関連付けられたローカル記憶内にデータ・ミラー・データ構造として記憶され、データ・ミラー・データ構造のローカルに記憶したデータは他の分散型プロセスのデータ・コンテナに向けられた以降の要求のために利用可能となる。初期要求に応答して戻された参照を用いてデータに対する以降の要求が行われると、そのデータが不変である場合、これがローカル記憶内のデータ・ミラー・データ構造から戻される。このようにして、不変データを検索するための往復のプロセス間通信に関連した遅延、処理、および帯域幅をなくすことができる。
【0012】
不変データはJNI構造(constructs)内で用いられ、多数の不変値が単一のコンテナから要求される場合があるので、有意な数のリモート・コールをなくすことができる。本技法は、JNIインタフェースを介して戻される参照のライフサイクルの認識を利用し、リモート実行コンテナ・プロセスのためにミラーリングしたデータの複雑なキャッシュ管理を必要としない。
【0013】
JNIは、多数のリモート・コールを必要とするシーケンスで戻されるデータ要素の多くについて不透明なハンドルを戻す。本記載の目的のため、「不透明なハンドル」は、ハンドルが指し示すものが何であれ直接コールには見えず、以降のコールでは参照を返さなければならないような、アプリケーション・プログラミング・インタフェース(API)におけるコントラクトを表す。例えば「jclass」が返された場合、jclassはポインタのように処理することができず、オブジェクト/クラス内のデータは直接調べることができない。かかる状況では、jclassへの参照は別の関数に渡されて、要求されたデータを検索する。このように、不透明なハンドルは、本記載の目的のための間接的な参照とみなすことができる。これらの不透明なハンドルによって、従来のJVM(R)において戻されるものよりも多くの情報を含む参照をJNIに戻すことができ、しかも既存のアプリケーションの動作に影響を及ぼさない。本主題は、上述し更に以下で詳述するように、不透明なハンドルの使用を活かして分散型JVM(R)動作の向上を図る。
【0014】
不透明なハンドルは、現在のJNIメソッド・コールに限定された寿命を有する「ローカル参照」である。更に、不透明なハンドルを、単一のコールより長い寿命を有する「グローバル参照」にアップグレードするために定義された手順がある。第1のコールにおいて参照が戻されると、本技術は、以降のコールで要求され得る参照に関連した不変データ・セットを識別する。実施によるが、第1のコールにおいて要求されたよりも多くのデータを取得する/戻すコストは、JVM(R)とリモート実行コンテナとの間で追加の往復が行われることに比べて相当に、おそらく1桁以上は低い場合がある。
【0015】
本技術を適用可能であるコンテナ・オブジェクトの2つの例は、「jclass」および「jobject」のコンテナである。しかしながら、他のコンテナ・オブジェクトも存在し、本主題の範囲から逸脱することなく本主題をそのようなコンテナのいずれにも適用可能であることに留意すべきである。
【0016】
「jclass」は、Java(TM)プログラミング言語実施クラスを表す。いったんjclassへの参照を取得したら、以降のコールを行って、クラスの寿命にわたって変化しないデータ(すなわち不変データ)を取得することができる。以降のコールで取得可能なクラスの寿命にわたって変化しないデータの例は、メソッド識別子(ID)またはメソッド名あるいはその両方、フィールド識別子(ID)またはフィールド名あるいはその両方、および静的ファイナル・フィールド識別子(ID)またはフィールド値あるいはその両方を含む。
【0017】
「jobject」は、jclassを用いてインスタンス化したJava(TM)プログラミング言語実施オブジェクトを表す。いったんjobjectへの参照を取得したら、以降のコールを行って、オブジェクトの寿命にわたって変化しないデータ(すなわち不変データ)を取得することができる。以降のコールで取得可能なオブジェクトの寿命にわたって変化しないデータの例は、ファイナル・フィールド値(例えばデータ値)を含む。
【0018】
Java(TM)バーチャル・マシン・ツール・インタフェース(JVMTI)等のいくつかのデバッギング・プラットフォームの目的では、JVM(R)のためにJVMTIがイネーブルされている場合このデータの一部は不変でないことがあることに留意すべきである。かかる場合、正常動作中に不変であるデータについて最適化をディスエーブルしてよい。このように、本明細書に記載する動作は、JVM(R)の正常動作モード中の効率を維持しつつ、不変データがデバッグ動作中に不変のままであるか否かに基づいて柔軟にデバッギング目的で使用できるように構成可能である。
【0019】
本技術は、分散型バーチャル・マシンにおいてネイティブ・インタフェースの効率を高める3つの技法を含む。最初に、第1のコールを行ってデータ・コンテナに対する初期参照を取得する場合、JNIコールがJVM(R)において処理されると、参照のみを戻すのではなく、追加の動作を実行して、データ・コンテナから不変データ(構成の任意選択肢として全てまたは一部)も抽出し、この不変データを参照と共にデータ・ミラー内にパッケージ化する(DataMirror)。次いでデータ・ミラーがリモート実行コンテナに戻され、JVM(R)におけるJNIコールによって戻される参照でなく、データ・ミラーへの参照がJNIに戻される。
【0020】
第2に、ネイティブ・インタフェースによってJNIを介して処理するために参照が渡される全ての場合について、参照が通常の参照であるかまたはデータ・ミラーへの参照であるかを判定するために、JNI実施(JNIクライアントに対してトランスペアレント)内でインスペクションを実行する。これは所与の実施に合わせて適宜、例えば低ビット・タギングまたは他の技法を用いて実行可能である。例えば要求が非不変データまたは非データ関連要求に対するものである等、コールがリモート実行コンテナまで渡される場合、参照は抽出されデータ・ミラーで戻されるので、JVM(R)に転送される要求においてこれを用いることができる。要求されたデータが不変でありデータ・ミラー内に記憶されている場合、不変データをデータ・ミラーから抽出して戻し、リモート実行コンテナに対するコールは行わない。
【0021】
上述し更に以下でも詳述するように、不変データは、その各アイテムに対する最初の要求に応答して等、ある時間にわたって取得して、要求されていない不変データの収集に関連した処理負荷を削減することができる。初期参照要求時以外に、データ・ミラー内に不変データ収集を構成するような他の構成の任意選択肢も可能であり、全てのそのような選択肢は本主題の範囲内であると見なされる。
【0022】
本技術の第3の態様は、データ・ミラー寿命管理である。データ・ミラー内の不変データの寿命を構成および管理することができる。例えば、データ・ミラーへの参照をパラメータとして渡して「DeleteLocalreference」と呼ぶメソッド/手順がコールされた場合、JVM(R)オブジェクト内の各データの寿命とは無関係に、全データ・ミラーのためのメモリを解放することができる。更に、JNIメソッドの完了および戻りに応答して、全ての残りの非グローバル・データ・ミラーのためのメモリを解放することができる。更に、「NewGlobalRef」と呼ぶメソッド/手順がコールされ、データ・ミラーへの参照がパラメータとして渡された場合、リモート実行コンテナから戻されたグローバル参照および元のデータ・ミラーからの情報をカプセル化した新しい「グローバル」データ・ミラーを生成することができる。更に別の例として、「DeleteGlobalRef」と呼ぶメソッド/手順がコールされ、データ・ミラーへの参照がパラメータとして渡された場合、グローバル参照を抽出し、リモート実行コンテナに対するコールを行ってグローバル参照を削除し、次いでグローバル・データ・ミラーのためのメモリを解放することができる。寿命管理には他にも多くの可能性が存在し、それらは全て本主題の範囲内であると見なされる。
【0023】
本明細書に記載する技法は、いくつかの方法で更に最適化することができる。例えば、参照に対する第1の要求によって不変データの全てを返すのではなく、ある時間にわたって要求のあったデータを記録することで、システムが最初に戻すデータ・ミラー内にどのデータを含ませるかを学習することができる。このように、初期データ・ミラー内には最も用いられるデータまたは最も用いられるデータのサブセットを含ませることができる。更に、データ・ミラーをある時間にわたって構築することも可能であり、この場合は第1のコールで不変データの一部のみを返し、以降のコールで所与の実施に合わせて適宜データ・ミラーを充填する。各要求について送られるデータ量は、所与のネットワーク上での1パケット内の利用可能データ空間に基づいたものとすることで、最初に追加の送信を必要とすることなく利用可能ペイロード・エリアを利用することができる。以降の要求に対しては、追加のパケットをその容量まで充填することができ、パケット・ペイロードおよびネットワーク帯域幅を効率的に利用しながら、データ・ミラーをある時間にわたって構築することができる。更に、第1のコールでデータを全て返すのではなく、空のまたは部分的にのみ充填されたデータ・ミラーを最初に送信してポピュレートすることも可能である。この場合、不変データに対する以降のコールの実行においては、不変データのいずれかの部分に対する第2の要求が行われると、このデータ要求をデータ・ミラーからローカルに満足させることができる。これが特に有用であり得るのは、元の参照がグローバル参照にアップグレードされてキャッシュされ、これが例えば頻繁に用いられるクラスによって使用可能な場合である。本主題には他の多くの最適化も可能であり、それらは全て本主題の範囲内であると見なされる。
【0024】
本主題の概念は、分散型バーチャル・マシンにおけるネイティブ・インタフェースに関連したいくつかの制限を認識したことから得られたことに留意すべきである。例えば、分散型バーチャル・マシン(例えば分散型JVM(R))を構築する際に、ネイティブ・コード(例えばCまたはC++プログラミング言語で書かれるコード)を1つ以上のリモート実行コンテナにおいて実行し、これをJava(TM)プログラミング言語コードが実行される同一または異なるコンピューティング・デバイス(例えば分割されたバーチャル・マシン)上で別個のプロセスでホストすることができることが観察された。更に、分割されたバーチャル・マシンについては、ネイティブ・コードは、JVM(R)とは別個に実行していること、およびこの別個であることによって不正動作をするネイティブ・コードがJVM(R)を不安定化させるのを防ぐと共にネイティブ・コードをメインJVM(R)とは異なる環境で実行可能である(例えばセキュリティ・コンテキスト、ポインタ幅、エンディアン(endian)等)ことを認識していないことも観察された。しかしながら、かかる分割されたバーチャル・マシンにおいては、Java(TM)プログラミング言語コードとネイティブ・コードとの間のメソッド/手順コール(例えばプロセス間/マシン間コール)のコストは、非分散型バーチャル・マシンに比べて、実施にもよるが潜在的に1桁以上はオーバーヘッドおよびレイテンシが大きく、更に、分散型コード・セクション間の往復通信は、時間の消費、帯域幅の消費、および処理の遅延があることも観察された。また、標準化されたJava(TM)ネイティブ・インタフェース(JNI)では、アクションの完了に必要な情報を得るためにアプリケーションが多数のコールを実行しなければならないことが多いことも観察された。例えば、オブジェクト内のフィールドのコンテンツを得るため、アプリケーションは最初にオブジェクトのクラスを得るためのコールを行い、次いでクラスのフィールドの識別子(ID)を得るためのコールを行い、次いでフィールド自体のコンテンツを得るためのコールを行い、この結果プロセス間メッセージは6個となる。更に、分散型JVM(R)では、これらの6個のメッセージ/ステップの各々が時間のかかる往復を伴うことが観察された。これらのいくつかの観察を考慮して、通信のレイテンシ、帯域幅、および処理時間を低減するためにデータ・ミラーリングを使用可能であること、更に、データ・ミラーリングはアプリケーション・レベルの構造から隠すことができ、アプリケーションのためのアプリケーション・プログラミング・インタフェース(API)に変更を加えずに、かかるAPIを利用する今後および既存のアプリケーションに対してデータ・ミラーリングをトランスペアレントとすることができることが認識された。本主題は、上述し更に以下で詳述するように、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングを提供することによって、分散型バーチャル・マシン内でそのような処理に関連したオーバーヘッドおよびレイテンシを改善する。このように、本明細書に記載する技術を用いることで、分散型バーチャル・マシンのための動作改善を実現することができる。
【0025】
本明細書に記載する分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングは、リアルタイムで実行して、バーチャル・マシンの分散型プロセス間の迅速なデータ・ミラーリングを可能とすることができる。本記載の目的のため、リアルタイムは、ここに記載する主題のユーザにとって許容可能である情報処理の妥当な応答時間を与えることに関して、充分に短い持続時間のいずれかの期間を含むものとする。更に、「リアルタイム」という言葉は、一般に「準リアルタイム」と言われるものを含む。これは概ね、ここに記載する主題のユーザにとって許容可能であるオンデマンド情報処理の妥当な応答時間を与える充分に短い持続時間の任意の期間を意味する(例えば1秒の何分の1か、または数秒内)。これらの言葉は、正確に定義することは困難であるが、当業者には充分に理解されている。
【0026】
図1は、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングのためのシステム100の実施の一例のブロック図である。コンピューティング・デバイス_1 102は、ネットワーク104を介してコンピューティング・デバイス_2 106乃至コンピューティング・デバイス_N108と通信する。コンピューティング・デバイス_ 102はリモート実行コンテナ110を実行し、これはコンピューティング・デバイス_1 102乃至コンピューティング・デバイス_N108の1つが実行するバーチャル・マシン112とインタフェースして分散型バーチャル・マシンを形成する。バーチャル・マシン112は例えば、所与の実施に合わせて適宜、Java(TM)バーチャル・マシン(JVM(R))または他のJava(TM)プログラミング言語プロセスを含むことができる。リモート実行コンテナ110およびバーチャル・マシン112は、単一のコンピューティング・デバイス_1 102内に一緒に配置されるか、または異なるコンピューティング・デバイス間で物理的に分散されるか、いずれにしても異なるプロセス/スレッドによって動作される。
【0027】
リモート実行コンテナ110は、1つのプロセス/スレッドにおいて実行しているネイティブ・コード(例えばCまたはC++プログラミング言語コードあるいはその両方)を含み、これは、異なるプロセス/スレッド(または所与の実施に合わせて適宜、デバイス)において実行しているバーチャル・マシン112内のJava(TM)プログラミング言語コードとインタフェースする。ネイティブ・コード実施のために、C/C++プログラミング言語コール規則をサポート可能である任意の言語で書かれたコードを利用可能であることに留意すべきである。このように、本明細書において参照を容易にするためにCおよびC++を用い、CまたはC++プログラミング言語あるいはその両方に対するいずれかの参照を含む本明細書におけるネイティブ・コードに対するいずれかの参照は、他のそのような言語(複数の言語)のいかなるものに対する参照も含むとみなされる。また、コンピューティング・デバイス_2 106乃至コンピューティング・デバイス_N108の各々内のバーチャル・マシン112を点線で示すことでバーチャル・マシン112のロケーションに対する柔軟性を表すことに留意すべきである。また、本主題の範囲から逸脱することなく、リモート実行コンテナ110は、コンピューティング・デバイス_2 106乃至コンピューティング・デバイス_N108の1つ以上の内部でも動作可能であることも留意すべきである。
【0028】
各コンピューティング・デバイス102乃至108は、ユーザがコンピューティング・デバイスを異なる位置に移動させることができること、または各コンピューティング・デバイスが飛行機、電車、自動車、もしくは他の移動手段等の携帯型プラットフォームに関連付けられることのいずれかによって、携帯型コンピューティング・デバイスとすることができる。また、各コンピューティング・デバイスは、上述し更に以下でも詳述するような情報を処理することができるいずれかのコンピューティング・デバイスであり得ることに留意すべきである。例えばコンピューティング・デバイスは、パーソナル・コンピュータ(例えばデスクトップ、ラップトップ等)、またはハンドヘルド・デバイス(例えばセル式電話、パーソナル・デジタル・アシスタント(PDA)、電子メール・デバイス、音楽記録もしくは再生デバイス、時計等)、サーバ・デバイス、または以下で詳述するような情報を処理することができる他のいずれかのデバイス等のデバイスを含むことができる。
【0029】
ネットワーク104は、イントラネットまたはインターネット等の私的または公的ネットワーク、直接モジュール間相互接続、ダイヤルアップ、無線、または各デバイスを相互接続することができる他のいずれかの相互接続機構を含めて、意図する目的に適した相互接続のいずれかの形態を含むことができる。
【0030】
図2は、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングを実行可能なコア処理モジュール200の実施の一例のブロック図である。コア処理モジュール200は、所与の実施に合わせて適宜、コンピューティング・デバイス_1 102乃至コンピューティング・デバイス_N108の各々に関連付けることができる。更にコア処理モジュール200は、以下で詳述するように、各実施に関連付けられたデータ・ミラーリングの異なる処理および補足的な処理を提供することができる。
【0031】
このように、以下の例のいずれの場合であっても、ある1つのデバイスに関して記載された機能性の態様について(例えば送信する/送信している等)、そのデバイスが他のデバイスと組み合わせて記載されていれば、その他のデバイスの機能性(例えば受信する/受信している等)を同時に記載するものとして理解されることは理解されよう。更に、単一のデバイス上で異なるプロセス/スレッドを用いた分散型バーチャル・マシン実施では、送信および受信はそれらのプロセス/スレッド間で動作すると理解される。
【0032】
中央処理装置(CPU)202は、コンピュータ命令の実行、演算、およびコア処理モジュール200内の他の性能(capability)を提供する。ディスプレイ204はコア処理モジュール200のユーザに視覚情報を提供し、入力デバイス206はユーザに入力性能を提供する。
【0033】
ディスプレイ204は、ブラウン管(CRT)、液晶ディスプレイ(LCD)、発光ダイオード(LED)、電子インク・ディスプレイ、投影、タッチスクリーン、または他のディスプレイ要素もしくはパネル等、いずれかのディスプレイ・デバイスを含むことができる。入力デバイス206は、コンピュータ・キーボード、キーパッド、マウス、ペン、ジョイスティック、またはユーザがディスプレイ204と相互作用してディスプレイ204上の情報に応答することを可能とする他のいずれかのタイプの入力デバイスを含むことができる。
【0034】
図2内でディスプレイ204および入力デバイス206を点線表示で図示することで、いくつかの実施ではこれらがコア処理モジュール200の任意選択のコンポーネントであり得ることを示すことに留意すべきである。従ってコア処理モジュール200は、直接的なユーザによる構成可能性(configurability)もフィードバックも与えない完全自動化埋め込みデバイスとして動作する場合がある。しかしながら、コア処理モジュール200は、ディスプレイ204および入力デバイス206を介してユーザ・フィードバックおよび構成機能をそれぞれ提供することも可能である。
【0035】
通信モジュール208は、コア処理モジュール200がシステム100内の他のモジュールと通信することを可能とする相互接続性能を提供する。通信モジュール208は、相互接続性能を提供するために使用可能ないずれかの電気的性能、プロトコル性能、およびプロトコル変換性能を含むことができる。図示および記載を容易にする目的のために通信モジュール208をコンポーネント・レベルのモジュールとして示すが、通信モジュール208は、上述し更に以下でも詳述するような通信モジュール208の機能を実行するために用いられるいずれかのハードウェア、プログラムされたプロセッサ(複数のプロセッサ)、およびメモリを含むことも可能であることに留意すべきである。例えば通信モジュール208は、通信モジュール208に関連した通信および電気的制御アクティビティを実行するための特定用途向け集積回路(ASIC)、プロセッサ、アンテナ、またはディスクリート集積回路およびコンポーネントあるいはそれら全ての形態で追加のコントローラ回路を含むことができる。更に通信モジュール208は適宜、割込みレベル、スタック・レベル、およびアプリケーション・レベルのモジュールを含むこともある。更に通信モジュール208は、通信モジュール208に関連した処理アクティビティを実行するための記憶、実行、およびデータ処理に用いられるいずれかのメモリ・コンポーネントを含むことができる。また通信モジュール208は、本主題の範囲から逸脱することなく、記載する他の回路の一部を形成する場合もある。
【0036】
メモリ210は、リモート実行コンテナ110およびバーチャル・マシン112を含む。リモート実行コンテナ110およびバーチャル・マシン112の各々は、分散型エンハンスJava(TM)ネイティブ・インタフェース(JNI)・モジュール212とインタフェースする。分散型エンハンスJava(TM)ネイティブ・インタフェース(JNI)・モジュール212は2つのインタフェース・コンポーネントを含む。すなわち、分散型エンハンス・リモート実行コンテナ(REC)JNIコンポーネント214および分散型エンハンス・バーチャル・マシン(VM)JNIコンポーネント216であり、これらは相互作用して分散型エンハンスJNIモジュール212の機能性を提供する。分散型エンハンスREC JNIコンポーネント214は更にリモート実行コンテナ110とインタフェースし、分散型エンハンスVM JNIコンポーネント216は更にバーチャル・マシン112とインタフェースする。
【0037】
分散型エンハンスJNIモジュール212は、追加の不変データを用いて参照要求またはデータ要求あるいはその両方に応答することによって本主題を実施するように動作する。分散型エンハンスJNIモジュール212は、不変データのためのデータ・ミラーを生成してリモート実行コンテナ110とバーチャル・マシン112との間の通信相互作用を削減することによって本主題を実施するように動作する。データ・ミラー記憶エリア218は、上述し更に以下で詳述するように、生成したデータ・ミラーを記憶する。
【0038】
メモリ210は、意図する目的に適した揮発性および不揮発性メモリのいずれかの組み合わせを、分散型または局在型で適宜含むことができ、例示を容易にする目的のために本例に示していない他のメモリ・セグメントを含む場合もあることは理解されよう。例えばメモリ210は、本主題の範囲から逸脱することなく、コード記憶エリア、オペレーティング・システム記憶エリア、コード実行エリア、およびデータ・エリアを含むことができる。
【0039】
また、本明細書に記載する分散型エンハンスJNI機能性の代替的な実施として、分散型エンハンスJNIモジュール220を示している。分散型エンハンスJNIモジュール220は、分散型エンハンスJNIモジュール212のハードウェア・モジュールの実施を表す。このため、リモート実行コンテナ110およびバーチャル・マシン112は、分散型エンハンスJNIモジュール220を介してインタフェースして各モジュールに関連付けられた各処理を実行することができ、または、本主題の範囲から逸脱することなく分散型エンハンスJNIモジュール212をプロセス・レベルで実施することも可能である。
【0040】
分散型エンハンスJNIモジュール220は、単一プラットフォームの実施において、分散型エンハンスREC JNIコンポーネント214および分散型エンハンスVM JNIコンポーネント216の双方を実施することができる。あるいは、分散型エンハンスREC JNIコンポーネント214および分散型エンハンスVM JNIコンポーネント216の一方を各々が実施する多数の補足的な分散型エンハンスJNIモジュール220を、異なるデバイス上で利用して、多数のプラットフォームで分散型エンハンスJNIモジュール220を実施することができる。
【0041】
図示および記載を容易にする目的のため、分散型エンハンスJNIモジュール220をコンポーネント・レベルのモジュールとして示すが、分散型エンハンスJNIモジュール220は、上述し更に以下でも詳述するようなこのモジュールの機能を実行するために用いられるいずれかのハードウェア、プログラムされたプロセッサ(複数のプロセッサ)、およびメモリを含み得ることに留意すべきである。例えば分散型エンハンスJNIモジュール220は、各デバイスに関連した通信および電気的制御アクティビティを実行するための特定用途向け集積回路(ASIC)、プロセッサ、またはディスクリート集積回路およびコンポーネントあるいはそれら全ての形態で追加のコントローラ回路を含むことができる。更に分散型エンハンスJNIモジュール220は適宜、割込みレベル、スタック・レベル、およびアプリケーション・レベルのモジュールを含むこともある。更に分散型エンハンスJNIモジュール220は、モジュールに関連した処理アクティビティを実行するための記憶、実行、およびデータ処理に用いられるいずれかのメモリ・コンポーネントを含むことができる。
【0042】
分散型エンハンスJNIモジュール220は、本主題の範囲から逸脱することなく、記載する他の回路の一部を形成する場合もあることに留意すべきである。あるいは、分散型エンハンスJNIモジュール220を上述したもの等のメモリ210内に記憶されたアプリケーションとして実施することも可能である。かかる実施において、分散型エンハンスJNIモジュール220は、本明細書に記載する機能性を実行するためにCPU202が実行する命令を含むことができる。CPU202はこれらの命令を実行して、上述し更に以下でも詳述する処理性能をコア処理モジュール200に提供することができる。分散型エンハンスJNIモジュール220は、本主題の範囲から逸脱することなく、割込みサービス・ルーチン(ISR)の一部、オペレーティング・システムの一部、ブラウザ・アプリケーションの一部、または別個のアプリケーションの一部を形成することができる。
【0043】
CPU202、ディスプレイ204、入力デバイス206、通信モジュール208、メモリ210、および分散型エンハンスJNIモジュール220は、相互接続222を介して相互接続されている。相互接続222は、システム・バス、ネットワーク、または各目的のために適切な相互接続を各コンポーネントに提供することができる他のいずれかの相互接続を含むことができる。
【0044】
コア処理モジュール200は記載した特定のコンポーネントによって例示され、それらを有するが、本主題の範囲から逸脱することなく他のモジュールおよびコンポーネントをコア処理モジュール200に関連付けることができる。更に、例示を容易にするためにコア処理モジュール200を単一のデバイスとして記載するが、本主題の範囲から逸脱することなく、コア処理モジュール200内のコンポーネントを同一の場所に設置するか、または分散させてネットワークを介して相互接続する場合もあることに留意すべきである。分散型の配置では、ディスプレイ204および入力デバイス206を販売デバイス、キオスク、または他のロケーションに設置し、CPU202およびメモリ210をローカルまたはリモートのサーバに設置することができる。コア処理モジュール200のコンポーネントについて他の多くの配置も可能であり、全ては本主題の範囲内であるとみなされる。従って、コア処理モジュール200は多くの形態を取ることができ、多くのプラットフォームに関連付けることができる。
【0045】
本記載の目的のため、以下の疑似コード例は、分散型エンハンスJNIモジュール212または分散型エンハンスJNIモジュール220等の、リモート実行コンテナ110等のリモート実行コンテナと連携して動作するネイティブ・インタフェースにおいて発生するアクションを表す。以下の第1の例の疑似コードは、バーチャル・マシンに関連付けられたクラスを見出すためのリモート実行コンテナからバーチャル・マシンへのクエリを表す。
jclass cls = (*env) -> FindClass(env,“com/company/example/TestClass”);
【0046】
この第1の例の疑似コードを用いて、「TestClass」とう名前のクラスに対するクラス参照を検索することができる。このクラス参照に変数「cls」が割り当てられている。
【0047】
以下の第2の例の疑似コードは、「cls」変数が参照するクラスのデータ要素に関連付けられたフィールド識別子(ID)を取得するための要求を表す。
jfieldID a = (*env) -> GetFieldID(env, cls, “a”, “I”);
【0048】
この第2の例の疑似コードを用いて、「cls」変数で参照されるクラスのデータ要素のフィールド識別子(ID)を検索することができる。上述のように、フィールド識別子(ID)は、クラスの所与のインスタンス化に際して変化しないので不変データと見なされる。本例内では、フィールド識別子(ID)が参照するデータ要素は整数型であり、「final」とマークされていないので、実際のデータ要素の値は不変でなく経時的に変化し得るようになっていると想定されている。
【0049】
以下の第3の例の疑似コードは、取得したフィールド識別子が表す整数データ要素に割り当てた値を取得するための要求を表す。
jint avalue = (*env) ->GetIntField(env, allValues, a);
【0050】
上述のように、本主題の概念に通じる観察に基づいて、これらの3つの動作の各々の結果として、リモート実行コンテナとバーチャル・マシンとの間で1往復の通信が生じる。しかしながら、本主題に基づいて往復通信の数を減らすことができる。これについて以下で
図3に関連付けて述べる。
【0051】
図3は、クラス参照に対する要求に応答して分散型バーチャル・マシン・コンポーネントで構築されたデータ・ミラーを用いた、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングにおけるメッセージ・フロー300の実施の一例のメッセージ・フロー図である。分散型エンハンスJNIモジュール212(または所与の実施に合わせて適宜、分散型エンハンスJNIモジュール220)は、分散型エンハンスREC JNIコンポーネント214および分散型エンハンスVM JNIコンポーネント216を含むように図示され、これらはリモート実行コンテナ110がバーチャル・マシン112と相互作用することを可能とするように動作する。
【0052】
図面内が込み合うため、いくつかのインタフェース通信は明示的な図示なしで記載する。しかしながら、これらのインタフェース通信が図面の一部を形成することは理解されよう。本例の目的のため、例示の疑似コード・セグメントで上述したシーケンス等の処理シーケンスを、
図3内に示す各要素によって処理するものと想定する。更に、
図3内の処理を開始するには、第1の例の疑似コードに関連付けて上述したように、リモート実行コンテナ110におけるネイティブ・コードが、バーチャル・マシン112に関連付けられたクラスを識別するための要求(例えば「FindClass」要求)を、分散型エンハンスREC JNIコンポーネント214に発行することを想定する。
【0053】
ブロック302において、リモート実行コンテナ110に関連付けられた分散型エンハンスREC JNIコンポーネント214は、リモート実行コンテナ110から、バーチャル・マシン112に関連付けられたクラスへの参照に対する要求を受信し(例えば「Find Class」または「FindClass」要求)、バーチャル・マシン112に関連付けられたクラスを識別するクエリを発行するための処理を開始する。上述のようにバーチャル・マシン112は、同一のコンピューティング・デバイス上の別個のプロセス内で、またはリモート実行コンテナ110とは別個のコンピューティング・デバイス上で実行する別個のプロセスとして、分散させることができる。
【0054】
分散型エンハンスREC JNIコンポーネント214は、「Find Class」要求を発行する(ライン1)。ブロック304において、バーチャル・マシン112に関連付けられた分散型エンハンスVM JNIコンポーネント216は、この要求を受信してクラスを識別し、更にこのクラスに関連付けられた不変データを検索する。ブロック306において、分散型エンハンスVM JNI216は、分散型エンハンスVM JNI216を実行しているデバイスに関連付けられたメモリ210のデータ・ミラー記憶エリア218等のメモリ内において要求内で参照されたクラスのためのデータ・クラス・データ構造を構築する。これは、識別したクラスから識別され検索された全ての不変データを含む。データ・ミラー記憶エリア218は、プロセス間またはデバイス間の通信に関連付けられたパケット処理エリアの一部を形成することができる。分散型エンハンスVM JNIコンポーネント216は、不変データおよびクラス参照と共にデータ・ミラー・データ構造を、リモート実行コンテナ110に関連付けられた分散型エンハンスREC JNIコンポーネント214に戻す(ライン2)。
【0055】
あるいは、所与の実施に合わせて適宜、分散型エンハンスVM JNIコンポーネント216は、データ・パケット・ペイロード充填を用いて、不変データの一部を含むデータ・ミラー・データ構造を戻すことも可能であり、追加データの要求に応じて経時的に更に多くのデータを含むようにデータ・ミラー・データ構造を構築することも可能であることに留意すべきである。本例内では、少なくともクラスのデータ要素のためのフィールド識別子がクラスを参照してデータ・ミラー内で戻されると想定されている。例えば、メソッド名/識別子、フィールド名/識別子、および静的ファイナル・フィールド値/フィールド識別子を戻すことができる。
【0056】
データ・ミラー・データ構造の受信に応答して、データ・ミラー・データ構造は、メモリ210分散型エンハンスREC JNIコンポーネント214によってメモリ210のデータ・ミラー記憶エリア218内等に記憶される。データ・ミラーへの参照がリモート実行コンテナ110に戻される(図示せず)。
【0057】
ブロック308において、分散型エンハンスREC JNIコンポーネント214は、リモート実行コンテナ110から、データ・ミラー・データ構造が先に受信され記憶されたクラスに関連付けられたデータ・フィールド識別子に対する要求(例えば「Get Field Identifier」を受信する。しかしながら、バーチャル・マシン112に関連付けられた分散型エンハンスVM JNIコンポーネント216に要求を直接発行するのでなく、分散型エンハンスREC JNIコンポーネント214は、そのクラスについて記憶したデータ・ミラー・データ構造を調べて、要求に関連付けられたフィールド識別子がすでにデータ・ミラー・データ構造内に記憶されているか否かを判定する。本例内では上述のように、初期の要求に応答して全てのフィールド識別子がデータ・ミラー・データ構造に戻されて記憶されている。このためブロック310において、データ・フィールド識別子(ID)は記憶されたローカルのデータ・ミラー・データ構造内で識別されてそこから抽出され、リモート実行コンテナ110に戻される。従って、分散型エンハンスREC JNIコンポーネント214は、ローカルのデータ・ミラー・データ構造を用いることで、バーチャル・マシン112に関連付けられた分散型エンハンスVM JNIコンポーネント216に対する要求をなくすと共に、フィールド識別子の要求に関連した往復による遅延全部をなくす。
【0058】
本例の目的のため、要求されたフィールドIDは整数値を表し、この整数はクラスへの参照に対する初期要求時に「final」とマークされていなかったと想定する。このため、整数値は不変データでなく、分散型エンハンスVM JNIコンポーネント216が生成したデータ・ミラー内で戻されなかった。しかしながら、「final」とマークされたいかなる値または識別子も不変と見なすことができ、これをデータ・ミラー・データ構造に追加して、これらのファイナル値または識別子の要求に関連付けられたプロセス間通信を削減することができることに留意すべきである。
【0059】
ブロック312において、分散型エンハンスREC JNIコンポーネント214は、リモート実行コンテナ110から、記憶したローカルのデータ・ミラー・データ構造から検索したフィールド識別子に関連付けられた整数フィールド値に対する要求(例えば「Get Integer Field」)を受信する。分散型エンハンスREC JNIコンポーネント214は、「Get Integer Field」要求を、バーチャル・マシン112に関連付けられた分散型エンハンスVM JNIコンポーネント216に発行する(ライン3)。ブロック314において、分散型エンハンスVM JNIコンポーネント216は、整数値に対する要求を処理し、整数データ値を検索する。分散型エンハンスVM JNIコンポーネント216は、整数値を分散型エンハンスREC JNIコンポーネント214に戻す(ライン4)。ブロック316において、分散型エンハンスREC JNIコンポーネント214は、整数データを要求側のリモート実行コンテナ110に戻す。
【0060】
このように、メッセージ・フロー
図300によって、クラス参照に対する第1の要求に応答してデータ・ミラー・データ構造内で不変データを戻すことができること、および、不変データに対する以降の要求はローカルに記憶したデータ・ミラー・データ構造から処理することができることが示される。従って、不変データに対する別個のプロセス間要求をなくすことができる。上述のように、例えばデータ識別子の要求またはデータ値のファイナライズあるいはその両方に応じて等、ある時間にわたってデータ・ミラーを充填することによってプロセス間帯域幅使用を最適化することも可能である。
【0061】
図4は、メモリ210のデータ・ミラー記憶エリア218内に記憶されたデータ・ミラー・データ構造400の実施の一例のブロック図である。データ・ミラー・データ構造400はローカル・クラス参照402を含み、これは、データ・ミラー・データ構造400が表す特定のデータ・ミラー・データ構造に関連付けられたクラスを参照する。フィールド識別子(ID_1)404乃至フィールド識別子(ID_N)406は各々、参照されたクラス内のデータ・フィールドを表すフィールド識別子およびフィールド名/タイプ・データの対を含む。メソッド識別子(ID_1)408乃至メソッド識別子(ID_N)410は各々、参照されたクラス内のメソッドを表すメソッド識別子およびメソッド名/タイプ・データの対を含む。上述のように、追加の不変データ値をデータ・ミラー・データ内に記憶することができ、全てのそのようなフィールドは本主題の範囲内であるとみなされる。データ・ミラー・データ構造400を、上述し更に以下で詳述するように用いて、不変データにローカルにアクセスすると共に、プロセス間の往復通信を削減することができる。
【0062】
以下に記載する
図5から
図8は、コア処理モジュール200等のデバイスによって実行されて、本主題に関連した分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングを実行可能である例示のプロセスを表す。この例示のプロセスには他の多くの変形が可能であり、それらは全て本主題の範囲内であるとみなされる。例示のプロセスは、かかるデバイスに関連付けて、分散型エンハンスJNIモジュール220等のモジュールによって実行するか、またはCPU202もしくは分散型エンハンスJNIモジュール212のサブコンポーネントの一方もしくは双方によって実行するか、あるいはその両方とすることができる。例示を容易にする目的のため、以下で記載する例示のプロセス内にタイムアウト手順および他のエラー制御手順は示さないことに留意すべきである。しかしながら、全てのそのような手順が本主題の範囲内であるとみなされることは理解されよう。更に、記載するプロセスを組み合わせること、記載する処理シーケンスを変更すること、および更に処理を追加することを、本主題の範囲から逸脱することなく実行可能である。
【0063】
図5は、分散型エンハンス・リモート実行コンテナ(REC)・ネイティブ・インタフェース・モジュールにおける、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングのプロセス500の実施の一例のフローチャートである。ブロック502においてプロセス500は、リモート実行コンテナからデータ・コンテナへの参照に対する初期要求を受信したことに応答して、分散型バーチャル・マシンの分散型エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネントから、分散型バーチャル・マシンの分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネントに、データ・コンテナへの参照に対する初期要求を送信する。ブロック504においてプロセス500は、データ・コンテナへの参照に対する初期要求に応答して不変データおよびデータ・ンテナへの参照を含むデータ・ミラー・データ構造を受信する。ブロック506においてプロセス500は、不変データおよびデータ・コンテナへの参照を含む受信したデータ・ミラー・データ構造をローカル・メモリ記憶エリア内に記憶する。ブロック508においてプロセス500は、データ・コンテナへの参照に対する初期要求に応答して、ローカルに記憶したデータ・ミラー・データ構造への参照をリモート実行コンテナに戻す。
【0064】
図6は、分散型エンハンス・バーチャル・マシン(VM)・ネイティブ・インタフェース・モジュールにおける、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングのプロセス600の実施の一例のフローチャートである。ブロック602においてプロセス600は、分散型バーチャル・マシンの分散型エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネントから、分散型バーチャル・マシンの分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネントにおいて、データ・コンテナへの参照に対する初期要求を受信する。ブロック604においてプロセス600は、データ・コンテナへの参照に対する初期要求の受信に応答して、データ・コンテナ内の不変データを識別する。ブロック606においてプロセス600は、識別した不変データおよびデータ・コンテナへの要求された参照を含むデータ・ミラー・データ構造を構築する。ブロック608においてプロセスは、データ・コンテナへの参照に対する初期要求に応答して、識別した不変データおよびデータ・コンテナへの要求された参照を含むデータ・ミラー・データ構造を、分散型バーチャル・マシンの分散型エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネントに送信する。
【0065】
図7乃至
図8は、分散型エンハンスREC JNIコンポーネント214等の、分散型エンハンス・リモート実行コンテナ(REC)Java(TM)ネイティブ・インタフェース(JNI)・モジュールにおける、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングのプロセス700の実施の一例のフローチャートである。
図7はプロセス700内の初期プロセスである。上述のように、Java(TM)バーチャル・マシン・ツール・インタフェース(JVMTI)に関連付けて等、いくつかのデバッギング動作中に不変データの処理をディスエーブルする場合があることに留意すべきである。
図7および
図8の図面の空間内が込み合うので、不変データ処理のイネーブルおよびディスエーブルに関するこのデバッギング判定は図面から省略している。しかしながら、この処理がプロセス700の一部を形成することは理解されよう。デバッグ・イネーブル判定の例示的な処理については、参照のため
図8に関連付けて以下で述べる。
【0066】
決定点702においてプロセス700は、リモート実行コンテナ110等のリモート実行コンテナからデータ・コンテナへの参照に対する初期要求の受信が検出されたか否かの判定を行う。初期要求は例えば、クラス参照に対する初期要求とすることができる(例えば上述のようなFind Class要求)。データ・コンテナへの参照に対する初期要求が検出されたという判定に応答して、プロセス700はブロック704において、分散型エンハンスVM JNIコンポーネント216等の分散型バーチャル・マシンの分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネントに、データ・コンテナへの参照に対する初期要求を送信する。
【0067】
ブロック706においてプロセス700は、データ・コンテナへの参照に対する初期要求に応答して不変データおよびデータ・コンテナへの参照を含むデータ・ミラー・データ構造を受信する。データ・コンテナへの参照はデータ・ミラー・データ構造に埋め込み可能であることに留意すべきである。更に、上述のようにデータ・ミラー・データ構造は全ての不変データを含むことができるか、または、分散型エンハンス・バーチャル・マシン・コンポーネントによる帯域幅消費のために初期応答を最適化するように、例えば単一パケット内で配信され得るのと同量の不変データを送信するべくパケット・ペイロード充填を用いることによって、部分的なパケット・ペイロードを消費することなく、ある時間にわたってデータ・ミラー・データ構造を構築することも可能である。このように、不変データのある部分が要求されず、分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネントによって最初に送信されない場合、これらの部分はローカルに記憶したデータ・ミラー・データ構造内に送信も記憶もされない。
【0068】
ブロック708においてプロセス700は、不変データおよびデータ・コンテナへの参照を含む受信したデータ・ミラー・データ構造を、メモリ210のデータ・ミラー記憶エリア218等のローカル・メモリ記憶エリア内に記憶する。ブロック710においてプロセス700は、データ・コンテナへの参照に対する初期要求に応答してローカルに記憶したデータ・ミラー・データ構造への参照をリモート実行コンテナに戻す。このため、リモート実行コンテナはこの時点で、ローカルに記憶したデータ・ミラー・データ構造への参照を有し、これは、データ・コンテナに関連付けられたデータに対する以降の要求のために使用可能であり、データ・ミラー・データ構造内のいかなる不変データもローカル記憶から検索することができるので、データ・コンテナから不変データを検索するための追加の往復通信は必要でない。
【0069】
決定点702の説明に戻ると、リモート実行コンテナからのデータ・コンテナへの参照に対する初期要求の受信が検出されなかったことの判定に応答して、またはブロック710においてローカルに記憶したデータ・ミラー・データ構造への参照をリモート実行コンテナに戻すことが完了したことに応答して、プロセス700は決定点712において、リモート実行コンテナからの、データ・コンテナに関連付けられた追加データ・アイテムに対する要求が検出されたか否かの判定を行う。リモート実行コンテナからの、データ・コンテナに関連付けられた追加データ・アイテムに対する要求が検出されたという判定に応答して、プロセス700は、データ・コンテナに関連付けられた追加データ・アイテムに対する要求の処理を開始し、決定点714において、要求された追加データ・アイテムが不変データに対するものであるか否かの判定を行う。要求された追加データ・アイテムが不変データに対する要求であるという判定に応答して、プロセス700は決定点716において、要求された不変データがローカルに記憶したデータ・ミラー・データ構造内で利用可能であるか否かの判定を行う。
【0070】
決定点716における、データ・コンテナに関連付けられた追加データ・アイテムに対する要求が、ローカルに記憶したデータ・ミラー・データ構造内で利用可能な不変データに対する要求を含むという判定に応答して、決定点718においてプロセス700は、ローカルに記憶したデータ・ミラー・データ構造から要求された不変データを抽出する。要求されたデータが不変であり、不変データがデータ・ミラー・データ構造に記憶されている場合、分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネントにコールを返すことなく、ローカルに記憶したデータ・ミラー・データ構造からこの不変データが抽出されることに留意すべきである。ブロック720においてプロセス700は、追加データ・アイテムに対する要求に応答して要求された不変データをリモート実行コンテナに戻す。ブロック720の後のプロセス700内での追加処理については以下で詳細に説明する。
【0071】
決定点714の説明に戻ると、要求された追加データ・アイテムが不変データに対する要求でないという判定に応答して、または決定点716における要求された不変データがローカルに記憶したデータ・ミラー・データ構造内で利用可能でないという判定に応答して、プロセス700はブロック722において、ローカルに記憶したデータ・ミラー・データ構造から、データ・ミラー・データ構造と共に戻されたデータ・コンテナへの参照を抽出する。ブロック724においてプロセス700は、データ・コンテナへの抽出した参照と共に、データ・コンテナに関連付けられた追加データ・アイテムに対する要求を、分散型バーチャル・マシンの分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネントに送信する。ブロック726においてプロセス700は、分散型バーチャル・マシンの分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネントから、要求した追加データ・アイテムおよび追加の不変データを受信する。追加の不変データは、最初にデータ・ミラー・データ構造と共に受信されなかった不変データを含むことができ、更に、「final」データ値とマークされた変数等の他の不変データ・アイテムも含むことができる。
【0072】
ブロック728においてプロセス700は、追加の不変データをローカルに記憶したデータ・ミラー・データ構造に記憶する。ブロック730においてプロセス700は、要求された追加データ・アイテムをリモート実行コンテナに戻す。要求された追加データ・アイテムは不変または非不変データであり得るが、全ての不変データが初期データ・ミラー・データ構造と共に最初に送信されなかった場合には、応答帯域幅を利用して追加の不変データを送信して、ローカルに記憶したデータ・ミラー・データ構造を充填することも可能であることに留意すべきである。
【0073】
決定点712の説明に戻ると、リモート実行コンテナからの、データ・コンテナに関連付けられた追加データ・アイテムに対する要求が検出されなかったという判定に応答して、または、ブロック720または730あるいはその両方において、要求された追加データ・アイテムをリモート実行コンテナに戻したことに応答して、プロセス700は決定点732において、手順、ルーチン、またはメソッド・コール呼び出しによって等、いずれかのローカルに記憶したデータ・ミラー・データ構造の寿命管理を実行するための要求が検出されたか否かの判定を行う。いずれかのローカルに記憶したデータ・ミラー・データ構造の寿命管理を実行するための要求が検出されなかったという判定に応答して、プロセス700は決定点702に戻り、上述のように反復する。いずれかのローカルに記憶したデータ・ミラー・データ構造の寿命管理を実行するための要求が検出されたという判定に応答して、プロセス700は
図8に関連して図示し記載する処理に移行して、ローカルに記憶したデータ・ミラー・データ構造の要求された寿命管理の実行を開始する。
【0074】
図8は、分散型エンハンスREC JNIモジュールにおける、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングのプロセス700に関連付けられた追加プロセスを示す。決定点734においてプロセス700は、寿命管理を実行するための検出された要求が、ローカルに記憶したデータ・ミラー・データ構造への参照をパラメータとして含むDeleteLocalReferenceルーチンに対するコールの呼び出しの検出であったか否かの判定を行う。DeleteLocalReferenceルーチンに対するコールの呼び出しが検出されたという判定に応答して、プロセス700はブロック736において、データ・ミラー・データ構造への参照を用いてデータ・ミラー・データ構造に割り当てられたメモリを解放する。プロセス700は
図7に関連付けて記載したプロセスの決定点702に戻り、上述のように反復する。
【0075】
決定点734の説明に戻ると、寿命管理を実行するための検出された要求がDeleteLocalReferenceルーチンの呼び出しでなかったという判定に応答して、プロセス700は決定点738において、寿命管理を実行するための検出された要求がリモート実行コンテナにおけるネイティブ・メソッドの実行の完了の検出であったか否かの判定を行う。リモート実行コンテナにおけるネイティブ・メソッドの実行の完了が検出されたという判定に応答して、プロセス700はブロック740において、そのメソッドの範囲における全ての残りの非グローバルなローカルに記憶したデータ・ミラー・データ構造のためのメモリを解放する。プロセス700は
図7に関連付けて記載した処理の決定点702に戻り、上述のように反復する。
【0076】
決定点738の説明に戻ると、寿命管理を実行するための検出された要求がリモート実行コンテナにおけるネイティブ・メソッドの実行の完了の検出でなかったという判定に応答して、プロセス700は決定点742において、寿命管理を実行するための検出された要求が、ローカルに記憶したデータ・ミラー・データ構造への参照をパラメータとして含むNewGlobalRefルーチンに対するコールの呼び出しの検出であったか否かの判定を行う。NewGlobalRefルーチンに対するコールの呼び出しが検出されたという判定に応答して、プロセス700はブロック744において、ローカル・メモリ記憶エリア内に新しいグローバル・データ・ミラー・データ構造を生成する。新しいグローバル・データ・ミラー・データ構造の生成は図面のスペースが限られているためブロック744に示されているが、いくつかのサブステップを伴う。これらのサブステップは、グローバル参照を取得/獲得するために分散型バーチャル・マシンのバーチャル・マシン(VM)側に対して(分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェースを介した)リモート・コールを実行し、VM側からの新しいグローバル参照の受信に応答して新しいグローバル・データ・ミラー・データ構造を生成することを含む。このリモート・コールは他のJNIトラフィックに追加することができ、これによって各プロセス間の往復通信をなくすことができる。更に、新しいグローバル・データ・ミラー・データ構造を生成するためのこの処理は、ローカル・データ・ミラー・データ構造から新しいグローバル・データ・ミラー・データ構造を生成することを含む。ローカル・データ・ミラー・データ構造からグローバル・データ・ミラー・データ構造を生成するために、いくつかの代替案が存在する。例えば、ローカル・データ・ミラー・データ構造を新たに生成したグローバル・データ・ミラー・データ構造にコピーすることができる。あるいは、ローカル参照をグローバル参照で置き換えること等によって、ローカル・データ・ミラー・データ構造をグローバル・データ・ミラー・データ構造に拡張することも可能である。更に、ローカル参照をグローバル参照で置き換えてグローバル・データ・ミラー・データ構造を生成することに関連して、拡張したグローバル・データ・ミラー・データ構造をグローバル・リストに移すことができる。このように、多くの代替案が存在し、それらはすべて本主題の範囲内であると見なされる。実施には無関係に、生成されたグローバル・データ・ミラー・データ構造は、分散型バーチャル・マシンの分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネントから戻されたデータ・コンテナへの参照およびローカルに記憶したデータ・ミラー・データ構造からの不変データをカプセル化したものであることは理解されよう。ブロック746においてプロセス700は、新しいローカルに記憶したグローバル・データ・ミラー・データ構造へのグローバル参照をリモート実行コンテナに戻す。プロセス700は
図7に関連付けて記載した処理の決定点702に戻り、上述のように反復する。
【0077】
決定点742の説明に戻ると、寿命管理を実行するための検出された要求がNewGlobalRefルーチンに対するコールの呼び出しの検出でなかったという判定に応答して、プロセス700は決定点748において、寿命管理を実行するための検出された要求が、新しいローカルに記憶したグローバル・データ・ミラー・データ構造への参照をパラメータとして含むDeleteGlobalRefルーチンに対するコールの呼び出しの検出であったか否かの判定を行う。DeleteGlobalRefルーチンに対するコールの呼び出しが検出されたという判定に応答して、プロセス700はブロック750において、新しいローカルに記憶したグローバル・データ・ミラー・データ構造からグローバル参照を抽出する。ブロック752においてプロセス700は、グローバル参照を削除するためのバーチャル・マシンに対するコールを実行し、ローカルに記憶したグローバル・データ・ミラー・データ構造を削除する。ブロック754においてプロセス700は、ローカルに記憶したグローバル・データ・ミラー・データ構造に割り当てたメモリを解放する。プロセス700は
図7に関連付けて記載した処理の決定点702に戻り、上述のように反復する。本例の目的のため、記載した寿命管理アクションの少なくとも1つによって肯定的な判定および処理が行われるという結果が想定されている。このため、決定点748における否定分岐は実行されない場合があるけれども、決定点748における判定が否定である場合には、プロセス700は
図7に関連付けて記載した処理の決定点702に戻って上述のように反復することが想定されている。
【0078】
このように、プロセス700は、データ・コンテナへの参照に対する初期要求を分散型バーチャル・マシンの分散型エンハンス・バーチャル・マシン・ネイティブ・インタフェース・コンポーネントに送信したことに応答して、データ・ミラー・データ構造を受信し、これをローカルに記憶する。また、プロセス700は、不変データに対する以降の要求に応答してローカルに記憶したデータ・ミラー・データ構造を調べ、データがローカルに利用可能である場合にはローカルに記憶したデータ・ミラー・データ構造から要求された不変データを検索する。従ってプロセス700は、不変データのための往復通信を削減することができる。また、プロセス700は、ローカルに記憶したデータ・ミラー・データ構造の寿命管理を実行してローカル・メモリ割り当てを管理する。
【0079】
図9は、分散型エンハンスVM JNIコンポーネント216等の分散型エンハンス・バーチャル・マシン(VM)Java(TM)ネイティブ・インタフェース(JNI)・モジュールにおける、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングのプロセス800の実施の一例のフローチャートである。決定点802においてプロセス800は、分散型エンハンスREC JNIコンポーネント214等、分散型バーチャル・マシンの分散型エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネントからの、データ・コンテナへの参照に対する初期要求の受信が検出されたか否かの判定を行う。初期要求は例えば、クラス参照に対する初期要求(例えば上述のようなFind Class要求)とすることができる。データ・コンテナへの参照に対する初期要求が検出されたという判定に応答して、プロセス800は決定点814において、Java(TM)バーチャル・マシン・ツール・インタフェース(JVMTI)等によるデバッギングがイネーブルされているか否かの判定を行う。上述のように、参考として
図9の決定点804に示すこの一例の処理は1つのロケーションだけで実施される。しかしながらこのような処理は、所与の実施に合わせて適宜、処理に関連付けられた任意の適当なロケーションにおいても実施することができる。デバッギングがイネーブルされているという判定に応答して、プロセス800はブロック806において、要求された参照を抽出して送信する。要求された参照に対する送信が完了した後のプロセス800に関連付けられた追加処理については、後で更に詳しく述べる。
【0080】
決定点804の説明に戻ると、デバッギングがイネーブルされていないという判定に応答して、プロセス800はブロック808においてデータ・コンテナ内の不変データを識別する。決定点810においてプロセス800は、全ての利用可能な不変データを送信するか、または、パケット・ペイロード充填により帯域幅を節約する等のために利用可能な不変データの一部を送信するか否かの判定を行う。このため、不変データの一部は、プロセス間データ・パケット・ペイロード・サイズに基づいて選択された不変データ量を含むことができる。利用可能な不変データの一部を送信するという判定に応答して、プロセス800はブロック812において利用可能なプロセス間データ・パケット・ペイロード・サイズを決定する。ブロック814においてプロセス800は、帯域幅の使用を向上させるために、空のペイロード空間が最小となるようできる限り多くの利用可能ペイロードを充填するべく不変データを選択する。この処理は、例えばデータ・タイプ・サイズを考慮に入れて実行することができる。データ・コンテナ内に大きいアレイまたはデータ構造がある状況では、多数のパケットを用いてデータ・ミラー・データ構造を送信することができる。かかる状況では、第2またはそれ以降のパケットを追加の不変データ送信のために処理することにより、空のペイロード空間が最小となるよう最後に送信するパケット内の利用可能ペイロードを充填することができる。
【0081】
ブロック814において送信する不変データの選択が完了したことに応答して、または決定点810における全ての不変データを送信するという判定に応答して、プロセス800はブロック816において、識別/選択した不変データおよびデータ・コンテナへの要求された参照を含むデータ・ミラー・データ構造を構築する。この処理は、空のペイロード空間が最小となるようデータ・パケット1つ分以上の利用可能プロセス間データ・パケット・ペイロード・サイズを充填するのに充分なサイズのデータ・ミラー・データ構造を構築することを含むことができる。更に、データ・コンテナへの参照を、データ・ミラー・データ構造内に含ませる/埋め込むことができ、または送信のためにデータ・ミラー・データ構造と共にパッケージ化することができる。ブロック818においてプロセス800は、識別/選択した不変データおよびデータ・コンテナへの要求された参照を含むデータ・ミラー・データ構造を、分散型バーチャル・マシンの要求側の分散型エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネントに送信する。
【0082】
ブロック818におけるデータ・ミラー・データ構造を要求側の分散型エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネントへの送信が完了したことに応答して、決定点802においてデータ・コンテナへの参照に対する初期要求が検出されていないと判定したことに応答して、またはブロック806において要求された参照を抽出および送信したことに応答して(デバッグ・モードである場合)、プロセス800は決定点820において、データ・コンテナ内の追加データ・アイテムに対する要求が検出されたか否かの判定を行う。決定点820における肯定的な判定に応答してデバッグ・イネーブルに関する追加の判定を実行可能であること、およびこの追加の判定は図面内の空間が限られているために図面から省略したことに留意すべきである。データ・コンテナ内の追加データ・アイテムに対する要求が検出されていないという判定に応答して、プロセス800は決定点802に戻り、上述のように反復する。
【0083】
決定点820においてデータ・コンテナ内の追加データ・アイテムに対する要求が検出されたという判定に応答して、プロセス800はブロック820においてデータ・コンテナから要求された追加データ・アイテムを抽出する。データ・コンテナからの要求された追加データ・アイテムは不変または非不変データであり得ることに留意すべきである。
【0084】
決定点824においてプロセス800は、データ・コンテナからの要求された追加データ・アイテムと共に送信するために、追加の不変データが利用可能であるか否かの判定を行う。追加の不変データは例えば、データ・コンテナへの初期参照に対する要求に応答しては送信されなかった不変データ、(例えばパケット・ペイロード最適化のために)データ・コンテナからの追加データに対する前の要求に応答しては送信されなかった不変データ、「final」データ値としてマークされたデータ変数、および他の形態の不変データを含むことができる。
【0085】
要求された追加データ・アイテムと共に送信するために追加の不変データが利用可能であるという判定に応答して、プロセス800はブロック826において、追加の不変データを識別し、データ・コンテナから追加の不変データを抽出する。決定点824における、要求された追加データ・アイテムと共に送信するために追加の不変データが利用可能でないという判定に応答して、またはブロック826における追加の不変データの識別および抽出に応答して、プロセス800はブロック828において、データ・コンテナ内の追加データ・アイテムに対する要求に応答して、要求された追加データ・アイテムおよび抽出した追加の不変データを、分散型バーチャル・マシンの分散型エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネントに送信する。プロセス800は決定点802に戻り、上述のように反復する。
【0086】
このように、プロセス800はデータ・コンテナへの参照に対する初期要求に応答するため、データ・コンテナに関連付けられた不変データを識別し、データ・ミラー・データ構造を発生し、データ・ミラー・データ構造をデータ・コンテナへの参照と共に分散型バーチャル・マシンの分散型エンハンス・リモート実行コンテナ・ネイティブ・インタフェース・コンポーネントに送信する。プロセス800は、利用可能な不変データの一部をパッケージ化し、データ・コンテナからの追加データ・アイテムに対する1つ以上の要求に応答して残りの任意の不変データを送信することができる。
【0087】
図1から
図9に関連付けて上述したように、例示のシステムおよびプロセスは、分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングを提供する。分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングに関連して他の多くの変形および追加のアクティビティが可能であり、それらはすべて本主題の範囲内であると見なされる。
【0088】
上述の教示を検討すれば、上述の例のいくつかがCPU202等のプログラム化されたプロセッサの使用に基づくことは当業者には認められよう。しかしながら、本発明はかかる例示的な実施形態に限定されない。特殊目的ハードウェアまたは専用プロセッサあるいはその両方等のハードウェア・コンポーネント均等物を用いて、他の実施形態を実施可能であるからである。同様に、汎用コンピュータ、マイクロプロセッサ・ベースのコンピュータ、マイクロコントローラ、光コンピュータ、アナログ・コンピュータ、専用プロセッサ、特定用途向け回路または専用ハード・ワイヤード論理あるいはそれら全てを用いて、代替的な同等の実施形態を構築することができる。
【0089】
当業者によって認められるように、本発明の態様は、システム、方法、またはコンピュータ・プログラムとして具現化することができる。従って、本発明の態様は、全体的にハードウェアの実施形態、全体的にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコード等を含む)、または、ソフトウェアおよびハードウェアの態様を組み合わせた実施形態という形態を取ることができ、それらは全て本明細書において、「回路」、「モジュール」、または「システム」と一般的に称することができる。更に、本発明の態様は、具現化されたコンピュータ読み取り可能プログラム・コードを有する1つ以上のコンピュータ読み取り可能媒体において具現化されたコンピュータ・プログラムの形態を取ることも可能である。
【0090】
1つ以上のコンピュータ読み取り可能媒体のあらゆる組み合わせを利用することができる。コンピュータ読み取り可能媒体は、コンピュータ読み取り可能信号媒体またはコンピュータ読み取り可能記憶媒体とすることができる。コンピュータ読み取り可能記憶媒体は例えば、限定ではないが、電子、磁気、光、電磁、赤外線、または半導体のシステム、装置、またはデバイス、または前述のもののいずれかの適切な組み合わせとすることができる。コンピュータ読み取り可能記憶媒体の更に具体的な例(非網羅的な列挙)は、以下を含む。すなわち、1本以上のワイヤを含む電気的接続、携帯型コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み取り専用メモリ(ROM)、消去可能プログラマブル読み取り専用メモリ(EPROMまたはフラッシュ・メモリ)、携帯型コンパクト・ディスク読み取り専用メモリ(CD−ROM)、光記憶デバイス、磁気記憶デバイス、または前述のもののいずれかの適切な組み合わせである。この文書の文脈において、コンピュータ読み取り可能記憶媒体は、命令実行システム、装置、またはデバイスによってまたはそれと接続して用いるためにプログラムを含有または記憶することが可能ないずれかの有形の(tangible)媒体とすることができる。
【0091】
コンピュータ読み取り可能信号媒体は、例えばベースバンドにおいてまたは搬送波の一部として、具現化されたコンピュータ読み取り可能プログラム・コードを有する伝播データ信号を含むことができる。かかる伝播信号は様々な形態のいずれかを取ることができ、それらは限定ではないが、電磁、光、またはそれらのいずれかの適切な組み合わせを含む。コンピュータ読み取り可能信号媒体は、コンピュータ読み取り可能記憶媒体でないが、命令実行システム、装置、またはデバイスによってまたはそれと接続して用いるためにプログラムを伝達、伝播、または転送することが可能ないずれかのコンピュータ読み取り可能媒体とすることができる。
【0092】
コンピュータ読み取り可能媒体上で具現化されるプログラム・コードは、限定ではないが、無線、有線、光ファイバ・ケーブル、RF等、または前述のもののいずれかの適切な組み合わせを含むいずれかの適切な媒体を用いて伝送することができる。
【0093】
本発明の態様の動作を実行するためのコンピュータ・プログラム・コードは、Java(TM)、Smalltalk、C++等のオブジェクト指向プログラミング言語、および「C」プログラミング言語または同様のプログラミング言語等の従来の手順プログラミング言語を含む1つ以上のプログラミング言語のいずれかの組み合わせにおいて記述することができる。プログラム・コードは、全体的にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロンのソフトウェア・パッケージとして、部分的にユーザのコンピュータ上でおよび部分的にリモート・コンピュータ上で、または全体的にリモート・コンピュータもしくはサーバ上で、実行することができる。後者の場合、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)またはワイド・エリア・ネットワーク(WAN)を含むいずれかのタイプのネットワークを介してユーザのコンピュータに接続することができ、または、接続は、(例えばインターネット・サービス・プロバイダを用いてインターネットを介して)外部コンピュータに対して行うことができる。
【0094】
本発明の実施形態に従った方法、装置(システム)、およびコンピュータ・プログラムのフローチャート図またはブロック図あるいはその両方を参照して、本発明の態様について記載した。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方におけるブロックの組み合わせは、コンピュータ・プログラム命令によって実施可能であることは理解されよう。これらのコンピュータ・プログラム命令は、汎用コンピュータ、特殊目的コンピュータ、または他のプログラマブル・データ処理装置のプロセッサに提供されて機械を生成することができ、これによって、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサによって実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックまたは複数のブロックに規定された機能/行為を実施するための手段を生成するようになっている。
【0095】
また、これらのコンピュータ・プログラム命令はコンピュータ読み取り可能媒体に記憶することができ、これによって、コンピュータまたは他のプログラマブル・データ処理装置に特定の方法で機能するように指示することができ、これにより、コンピュータ読み取り可能媒体に記憶された命令が、フローチャートまたはブロック図あるいはその両方のブロックまたは複数のブロックに規定された機能/行為を実施する命令を含む製造品を生成するようになっている。
【0096】
また、コンピュータ・プログラム命令を、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイスにロードして、そのコンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを実行させてコンピュータ実施プロセスを生成することができ、これによって、コンピュータまたは他のプログラマブル装置上で実行する命令が、フローチャートまたはブロック図あるいはその両方のブロックまたは複数のブロックに規定された機能/行為を実施するためのプロセスを提供するようになっている。
【0097】
図面におけるフローチャートおよびブロック図は、本発明の様々な実施形態に従ったシステム、方法、およびコンピュータ・プログラムの可能な実施のアーキテクチャ、機能性、および動作を例示する。この点で、フローチャートまたはブロック図における各ブロックは、規定された論理機能(複数の機能)を実施するための1つ以上の実行可能命令を含むコードのモジュール、セグメント、または一部を表すことができる。また、いくつかの代替的な実施において、ブロックに明記した機能は、図面に明記した順序どおりでなく発生する場合があることに留意すべきである。例えば、関与する機能性に応じて、連続して示した2つのブロックは実際には実質的に同時に実行されることがあり、またはブロックは時に逆の順序で実行される場合がある。また、ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方におけるブロックの組み合わせは、規定された機能もしくは行為を実行する特殊目的ハードウェア・ベースのシステム、または特殊目的ハードウェアおよびコンピュータ命令の組み合わせによって実施可能であることに留意すべきである。
【0098】
プログラム・コードの記憶または実行あるいはその両方を行うのに適したデータ処理システムは、システム・バスを介してメモリ要素に直接または間接に結合された少なくとも1つのプロセッサを含む。メモリ要素は、プログラム・コードの実際の実行中に用いるローカル・メモリと、バルク記憶装置と、実行中にバルク記憶装置からコードを検索しなければならない回数を減らすために少なくとも何らかのプログラム・コードの一時的な記憶を提供するキャッシュ・メモリと、を含むことができる。
【0099】
入出力またはI/Oデバイス(限定ではないが、キーボード、ディスプレイ、ポインティング・デバイス等を含む)を、直接またはI/Oコントローラを介在させてのいずれかでシステムに結合することができる。
【0100】
また、システムにネットワーク・アダプタを結合することで、データ処理システムを、私的ネットワークまたは公的ネットワークを介在させて他のデータ処理システムまたはリモート・プリンタもしくは記憶デバイスに結合することができる。ネットワーク・アダプタの現在利用可能なタイプのいくつかの例として、モデム、ケーブル・モデム、およびイーサネット・カードがある。
【0101】
本明細書において用いた用語は、特定の実施形態を記載する目的のためだけのものであり、本開示を限定することは意図していない。本明細書において用いたように、単数形「1つの(a)、(an)、(the)」は、文脈によって明らかに他の場合が示されない限り、複数形を含むことが意図されている。また、「含む」または「含んでいる」という言葉あるいはその両方は、本明細書において用いられた場合、述べた特性、整数、ステップ、動作、要素、および/またはコンポーネントの存在を規定するが、1つ以上の他の特性、整数、ステップ、動作、要素、コンポーネント、および/またはそれらのグループの存在または追加を除外するものではないことは、理解されよう。
【0102】
以下の特許請求の範囲における全てのミーンズまたはステップ・プラス・ファンクション要素の対応する構造、材料、行為、および均等物は、特許請求の範囲に明記した要素と組み合わせて機能を実行するための任意の構造、材料、または行為を含むことが意図されている。本発明の記載は、例示および記述の目的のために提示したが、網羅的であることや、開示した形態に本発明を限定することは、意図していない。本発明の範囲および精神から逸脱することなく、当業者には多くの変更および変形が明らかであろう。実施形態は、本発明の原理および実際的な用途を最良に説明するため、更に、想定される特定の用途に適した様々な変更と共に様々な実施形態に関して当業者が本発明を理解することを可能とするために、選択し記載したものである。