JP2002522844A - バーチャル・マシン環境でネイティブ・コードを変換し、実行する方法および装置 - Google Patents

バーチャル・マシン環境でネイティブ・コードを変換し、実行する方法および装置

Info

Publication number
JP2002522844A
JP2002522844A JP2000565460A JP2000565460A JP2002522844A JP 2002522844 A JP2002522844 A JP 2002522844A JP 2000565460 A JP2000565460 A JP 2000565460A JP 2000565460 A JP2000565460 A JP 2000565460A JP 2002522844 A JP2002522844 A JP 2002522844A
Authority
JP
Japan
Prior art keywords
computer
virtual machine
native code
native
memory access
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.)
Granted
Application number
JP2000565460A
Other languages
English (en)
Other versions
JP2002522844A5 (ja
JP4880121B2 (ja
Inventor
アンガー,デイビッド
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.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
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 Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of JP2002522844A publication Critical patent/JP2002522844A/ja
Publication of JP2002522844A5 publication Critical patent/JP2002522844A5/ja
Application granted granted Critical
Publication of JP4880121B2 publication Critical patent/JP4880121B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45529Embedded in an application, e.g. JavaScript in a Web browser

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Debugging And Monitoring (AREA)
  • Computer And Data Communications (AREA)
  • Machine Translation (AREA)
  • Apparatus For Radiation Diagnosis (AREA)

Abstract

(57)【要約】 バーチャルマシン環境においてネイティブコードを変換し、実行する方法と装置。バーチャルマシン実施デバッキングは、ネイティブ・コードのバイナリ変換によって容易になる。プラットフォーム独立性を高め、スレッド管理とスケジューリングに対する制御が向上し、ネイティブコードにおけるメモリアクセス・エラーの識別を提供する。バーチャルマシン内でネイティブ・コードが実行されると、ネイティブ・コードは中間フォームに変換される。この中間フォームは処理され、メモリアクセスとブロッキングシステムコールが生じる箇所を決定する。メモリアクセスされたコールに妥当性チェックが挿入され、各コールによってアクセスされるメモリの部分が許可範囲にあるかどうかが決定される。ネイティブコードに関連したワイルドポインタとメモリアクセスエラーの他のソースが識別される。ブロッキングシステムコールが非ブロッキング変数に置き換えられ、かつイールドオペレーションがシステムコールとループとに挿入される。リバイズされたネイティブコードが組み込まれたメモリアクセス妥当性チェックと非ブロッキングシステムコールがバーチャルマシンによってコンパイルされ、インタプリートされ、ネイティブコードで定義されたルーチンが実行される。リバイズされたネイティブコードは他のスレッドをブロックしないので、スレッドスケジューリングが基礎となるオペレーティングシステムではなくバーチャルマシンによって管理され、かつ協調的なスケジューリングが実施される。

Description

【発明の詳細な説明】
【0001】 (発明の背景) 1.発明の分野 本発明は、コンピュータ・システムの分野に関するものであり、より詳細には
、バーチャル・マシン実行環境に関する。
【0002】 Solaris、Sun、Sun Microsystems、Sunロゴ、
Java、およびJavaベースの商標およびロゴは、米国および他国のSun
Microsystems,Inc.の商標または登録商標である。
【0003】 2.背景技術 Sun Microsystems(登録商標)によって開発されたJava TM プログラミング言語は、「write once,run anywhere
TM言語であるという、他のプログラミング言語に優る利点を有している。Ja
vaプログラミング言語は、バイトコード・クラス・ファイルの形式で設計され
、配布され、実行される、実質的にアプリケーションのためのプラットフォーム
非依存な機構、つまり「アプレット」を用意している。Javaバーチャル・マ
シンは、Javaバーチャル・マシンを含んでいるすべてのコンピュータ・プラ
ットフォームが同じバイトコード・クラス・ファイルを実行することができるよ
うに、バイトコードを必要なプラットフォーム依存命令セットに還元する処理を
行う。Javaプログラミング言語によってサポートされていない機能が必要な
とき、バーチャル・マシン内で実行中のJavaアプリケーションは、リンクさ
れたライブラリ内で実装されるネイティブ・コード関数をコールすることができ
る。ネイティブ・コードは、Javaプログラミングおよびその実行の制約を受
けず、したがって、それほど制御の良くない実行動作という代償を払って、より
プラットフォームに固有なプログラム可能性を提供する。Javaアプリケーシ
ョンおよびJavaアプレットのための処理環境、ならびにネイティブ・コード
の使用について、下記でより十分な説明を行う。
【0004】 処理環境 Javaプログラミング言語は、各プログラムが1つまたは複数のオブジェク
ト・クラスおよびインターフェースを含んでいるオブジェクト指向プログラミン
グ言語である。プログラムがマシン依存の実行可能プログラム・コードにコンパ
イルされる多くのプログラミング言語とは異なり、Javaプログラミング言語
で書かれたクラスは、マシン非依存のバイトコード・クラス・ファイルにコンパ
イルされる。各クラスは、クラス・ファイル・フォーマットと呼ばれるプラット
フォーム非依存フォーマットのコードおよびデータを含む。実行ビークルとして
動作するコンピュータ・システムは、各クラス内のコードを実行することを担う
、バーチャル・マシンと呼ばれるプログラムを含む。
【0005】 アプリケーションは、独立型Javaアプリケーションとして、またはHTM
L(ハイパーテキスト・マークアップ言語)文書内のアプレット・タグによって
識別され、ブラウザ・アプリケーションによってロードされるJava「アプレ
ット」として設計することができる。アプリケーションまたはアプレットに関連
付けられたクラス・ファイルは、ローカル・コンピュータ・システム上に、また
はネットワークを介してアクセス可能なサーバ上に記憶することができる。各ク
ラスは、必要に応じて、「クラス・ローダ」によってJavaバーチャル・マシ
ンにロードされる。
【0006】 ネットワーク上で、サーバからクラスに対するアクセスをクライアントに提供
するために、サーバ上でウェブ・サーバ・アプリケーションが実行されて、「ウ
ェブ・ページ」とも呼ばれるHTML文書に対する、URL(ユニフォーム・リ
ソース・ロケータ)を含んだHTTP要求に応答する。クライアント・プラット
フォーム上で実行中のブラウザ・アプリケーションが、HTML文書を受け取っ
たとき(例えば、URLをウェブ・サーバに転送することによってHTML文書
を要求した結果として)、ブラウザ・アプリケーションは、そのHTMLを構文
解析して、そのHTML文書内でアプレット・タグに出会ったとき、指定のバイ
トコード・クラス・ファイルのダウンロードを自動的に開始する。
【0007】 Javaアプレットのクラスは、Javaアプレットの実行中に最初に参照さ
れたとき、オンデマンドで、ネットワークから(サーバ上に記憶されている)、
またはローカル・ファイル・システムからロードされる。バーチャル・マシンは
、各クラス・ファイルを探し出して、ロードし、クラス・ファイルの構文解析を
行って、クラスの様々な構成要素にメモリを割振り、そのクラスを他の既にロー
ドされているクラスとリンクする。この処理は、クラス内のコードが、バーチャ
ル・マシンによって容易に実行可能なようにする。
【0008】 JavaアプリケーションおよびJavaアプレットはしばしば、クラス・ラ
イブラリを使用する。クラス・ライブラリ内のクラスは、「ネイティブ・メソッ
ド」と呼ばれるものを含む。アプリケーションおよびアプレットは、時として、
ネイティブ・メソッドを有しているクラスを含む。ネイティブ・メソッドは、「
ネイティブ」というキーワード、スレッドの名前、メソッドの戻り値の型、およ
びメソッドに渡されるすべてのパラメータを指定する。Javaプログラミング
言語で書かれる「標準メソッド」(すなわち、非ネイティブ・メソッド)とは対
照的に、ネイティブ・メソッドには、それぞれのクラス内でのボディが存在しな
い。その代わりに、ネイティブ・メソッドのルーチンは、リンクされたライブラ
リをサポートする任意のプラットフォームに固有のリンク機能を使用して実行時
にバーチャル・マシン内の任意のクラスと動的にリンクされる、ネイティブ・コ
ード(例えば、CまたはC++プログラミング言語で書かれ、バイナリ・フォー
ムにコンパイルされたコード)によって実行される。
【0009】 例えば、SolarisTMまたはUNIX(登録商標)の環境では、バイナリ ・フォームのネイティブ・コードを含むリンクされたライブラリは、「so.」 ファイルとして書かれた「共有オブジェクト」ライブラリとして実装することが できる。Windows(登録商標)の環境では、リンクされたライブラリは、 「.dll」ファイルとして書かれた動的にリンクされた(または動的にロード 可能な)ライブラリのフォームを取ることが可能である。ネイティブ・コードは 、そうでなければ、Javaプログラミング言語によってサポートされない機能 、例えば、任意のプラットフォームの専用ハードウェア(例えば、表示ハードウ ェア)またはソフトウェア(例えば、データベース・ドライバ)とインターフェ ースをとることなどを実行するために使用することができる。ネイティブ・コー ドはまた、レンダリングなどの計算上インテンシブな機能をスピードアップする ために使用することもできる。
【0010】 ネイティブ・メソッドを含むクラスはまた、それれぞれのリンクされたライブ
ラリをロードするコールも含む。 System.LoadLibrary(“Sample”) ここで、「Sample」は、システムを動作させるホスト(例えば、UNIX
、Windows等)により、「libSample.so」または「Samp
le.dll」という名前が付けられたファイルに通常、格納されている、リン
クされたライブラリの名前である。通常、リンクされたライブラリは、関連付け
られたクラスがバーチャル・マシン内でインスタンス化された時点でロードされ
る。
【0011】 ネイティブ・コードのリンクされたライブラリは、リンクされたライブラリが
クラス内のネイティブ・メソッドのメソッド署名を認識できるようにするため、
関連付けられたクラスのスタブおよびヘッダ情報とともにコンパイルされる。次
に、ネイティブ・メソッドの実施が、リンクされたライブラリ内のネイティブ・
コード関数(C関数など)として行われる。実行時に、ネイティブ・メソッドに
対するコールが行われたとき、コールされたメソッドに対応するリンクされたラ
イブラリ内の機能に制御が渡される(例えば、ネイティブ・メソッド・スタック
上にネイティブ・メソッド・フレームを押し付けることを介して)。リンクされ
たライブラリ内のネイティブ・コードは、その機能を実行して、Javaアプリ
ケーションまたはJavaアプレットに制御を戻す。
【0012】 図1は、処理システムのためのコンパイル環境および実行環境を図示している
。コンパイル環境で、ソフトウェア開発者が、データ構造、メソッド実装、およ
び他のクラスに対する参照を含んだ、プログラマ可読クラス定義を含むソース・
ファイル100を作成する(例えば、Javaプログラミング言語で)。ソース
・ファイル100は、Javaコンパイラ101に提供され、これがソース・フ
ァイル100を、Javaバーチャル・マシンによって実行可能なバイトコード
を含むコンパイルされた「クラス」ファイル102にコンパイルする。バイトコ
ード・クラス・ファイル102は、サーバ上に記憶され(例えば、一時記憶また
は永久記憶で)、ネットワークを介してダウンロードのために利用可能である。
別法では、バイトコード・クラス・ファイル102は、ローカルに、クライアン
ト・プラットフォーム上のディレクトリ内に格納することができる。
【0013】 Java実行環境は、バイトコード・クラス・ファイルを実行することができ
、また実行中に必要なとき、オペレーティング・システム109に対してネイテ
ィブ・オペレーティング・システム(「O/S」)コールを実行することができ
る、Javaバーチャル・マシン(JVM)105を含む。Javaバーチャル
・マシン105は、バイトコード・クラスのマシン非依存性と基礎となっている
コンピュータ・ハードウェアのマシン依存命令セットならびにオペレーティング
・システム109のプラットフォーム依存コールとの間で抽象化のレベルを提供
している。
【0014】 クラス・ローダおよびバイトコード検証器(「クラス・ローダ」)103は、
必要に応じてJavaバーチャル・マシンに、バイトコード・クラス・ファイル
102をロードすること、ならびにクラス・ライブラリ104をサポートするこ
とを担う。クラス・ローダ103はまた、各クラスのバイトコードを検証して、
セキュリティ規則の適切な実行および実施を維持する。実行時システム108の
コンテキスト内では、バイトコードが、ハードウェア110内のプロセッサ(ま
たは複数のプロセッサ)によって実行され得るように、インタープリタ106が
バイトコードを直接に実行するか、または「ジャスト・イン・タイム」(JIT
)コンパイラ107がバイトコードをマシン・コードに変換するかのいずれかで
ある。例えば、リンクされたライブラリ111という形式のネイティブ・コード
は、関連付けられたネイティブ・メソッドを含むクラス(例えば、クラス・ライ
ブラリ104からの)がバーチャル・マシン内でインスタンス化されたときにロ
ードされる。
【0015】 バーチャル・マシン105の実行時システム108は、汎用スタック・アーキ
テクチャをサポートする。この汎用スタック・アーキテクチャが基礎となるハー
ドウェア110によってサポートされる方法は、バーチャル・マシンの特定の実
装によって決定され、バイトコードが解釈されるスレッド、またはJITコンパ
イルされるスレッドに反映される。実行時システムの他のエレメントは、スレッ
ド管理(例えば、スケジューリング)機構およびごみ収集機構を含む。
【0016】 図2は、実行時システム108内のスタック・アーキテクチャをサポートする
実行時データ・エリアを図示している。図2で、実行時データ・エリア200は
、1つまたは複数のスレッド・ベースのデータ・エリア207を含む。スレッド
・ベースの各データ・エリア207は、プログラム・カウンタ・レジスタ(PC
REG)208、ローカル変数ポインタレジスタ(VARS REG)209
、フレーム・レジスタ(FRAME REG)210、オペランド・スタック・
ポインタ・レジスタ(OPTOP REG)211、スタック212(例えば、
標準メソッドの場合)、およびオプションとして、ネイティブ・メソッド・スタ
ック216を含む。スタック212は、オペランド・スタック214およびロー
カル変数215を含んだ1つまたは複数のフレーム213を含む。ネイティブ・
メソッド・スタック216は、1つまたは複数のネイティブ・メソッド・フレー
ム217を含む。
【0017】 実行時データ・エリア200はさらに、共有ヒープ201を含む。ヒープ20
1は、そこからすべてのクラスのインスタンスおよび配列に対するメモリが割振
られる実行時データ・エリアである。共有ヒープ201は、すべてのスレッドの
間で有されるメソッド・エリア202を含む。メソッド・エリア202は、ロー
ドされた各クラス・ファイルから抽出された情報を記憶するための1つまたは複
数のクラス・ベースのデータ・エリア203を含む。例えば、クラス・ベースの
データ・エリア203は、コンスタント・プール204、フィールドおよびメソ
ッド・データ205、ならびにメソッドのためのコードおよびコンストラクタ2
06を含み得る。
【0018】 バーチャル・マシンは、一度に多くの実行のスレッドをサポートすることがで
きる。各スレッドは、それ自体のスレッド・ベースのデータ・エリア207を有
する。どの時点でも、各スレッドは、そのスレッドに対する「現行メソッド」で
ある、単一のスレッドのコードを実行している。「現行メソッド」がネイティブ
・メソッドではない場合、プログラム・カウンタ・レジスタ208は、現在、実
行されているバーチャル・マシン命令のアドレスを含む。「現行メソッド」がネ
イティブ・メソッドである場合、プログラム・カウンタ・レジスタ208の値は
、未定義となる。フレーム・レジスタ210が、メソッド・エリア202内の現
行メソッドのロケーションにポイントする。
【0019】 各スレッドは、そのスレッドと同時に作成されたプライベート・スタック21
2を有する。スタック212は、スレッドによって呼び出された標準メソッドに
関連付けられた1つまたは複数のフレーム213を格納する。フレーム213は
、データおよび部分的結果を格納するため、ならびにダイナミック・リンキング
、方法への戻り値、およびディスパッチ例外を実行するために使用される。標準
・メソッドが呼び出される度に新規フレームが作成され、スタックに押し上げら
れる。既存フレームは、そのメソッドが完了するとスタックから外され、破壊さ
れる。スレッドによって作成されるフレームはそのスレッドにとって局所的であ
り、通常、他のどのスレッドからも直接参照することはできない。
【0020】 現在実行中のメソッドのためのフレームである1つのフレームだけが、制御の
所与のスレッドのいずれかのポイントで活動中である。このフレームは、「現行
フレーム」と呼ばれ、そのメソッドは「現行メソッド」として知られている。フ
レームは、そのメソッドが別のメソッドを呼び出したり、そのメソッドが完了し
た場合は、現行でなくなる。メソッドが呼び出されると、新規フレームが作成さ
れ、制御がその新規フレームに移るとそれが現行となる。メソッドが戻ると、現
行フレームはそのメソッドの呼び出しの結果がいかなるものであれ、それを前フ
レームに返す。次いで、前フレームが現行フレームになると、現行フレームは破
棄される。
【0021】 各フレーム213は、一組の固有のローカル変数215と固有のオペランド・
スタック214とを有する。ローカル変数ポインタ・レジスタ209は、現行フ
レームのローカル変数215を含むワードの配列の基数を指すポインタを含む。
オペランド・スタック・ポインタ・レジスタ211は、現行フレームのオペラン
ド・スタック214のトップを指す。大部分のバーチャル・マシン命令は、現行
フレームのオペランド・スタックから値を取り、その上で動作し、同じオペラン
ド・スタックに結果を戻す。オペランド・スタック214は、メソッドに引数を
引き渡し、メソッドの結果を受け取ることにも使用される。
【0022】 ネイティブ・メソッド・スタック216は、ネイティブ・メソッドをサポート
してネイティブ・メソッド・フレーム217を格納する。各ネイティブ・メソッ
ド・フレームは、スレッド実行制御、メソッド引き数およびリンクされたライブ
ラリでネイティブ・コード関数として実行される標準メソッドとネイティブ・メ
ソッドとの間でやり取りされるメソッドの結果のための機構を提供する。
【0023】 ネイティブ・メソッドは、クラスの標準メソッドとしてではなくリンクされた
ライブラリ内のネイティブ・コードによって実行されるので、ネイティブ・メソ
ッドはJavaプログラム言語およびバイトコード検証器によって課される制限
を受けることがない。すなわち、コンパイルされたJavaアプリケーションお
よびアプレット用バイトコードと異なり、リンクされたライブラリにあるネイテ
ィブ・コードは、実行時にチェックなしで進行する、望まない、不正行為の対象
となりやすくなる場合がある。例えば、「ワイルド」ポインタ(例えば、8エレ
メント配列で9エレメントを指すポインタなど、禁止された範囲を値が超えたポ
インタ)の発生や不適切な(制限された、すなわち範囲外の)メモリ位置をアド
レス指定する可能性のあるメモリ・アクセス機構の使用により、メモリ・アクセ
ス・エラーが起こることがある。したがって、ネイティブ・メソッドの使用によ
り、大部分はポインタの使用に基づいて、特定バーチャル・マシンのデバッグの
実行をより困難にするプログラム・バグの分類が可能になる。
【0024】 さらに、ネイティブ・コードは、ブロッキング・システム・コール(すなわち
、未指定の期間、外部イベントの発生を待つことのできるコール)を含むことが
できる。バーチャル・マシンがその固有のスレッド管理とスケジューリングとを
実行するならば、リンクされたライブラリ内のネイティブ・コード関数に制御が
渡された時に発生するブロッキング・システム・コールは、バーチャル・マシン
全体の実行をブロックすることができる。
【0025】 大部分のバーチャル・マシンを実行すると、「ネイティブ・スレッディング」
を使用することによってネイティブ・コードに関連付けられたブロッキング問題
が回避される。すなわち、バーチャル・マシンの複数のスレッドと、バーチャル
・マシンが実行中の1つまたは複数のプログラム(例えば、アプリケーションお
よび/またはアプレット)が、基礎となるプラットフォームのスレッド、例えば
UNIXスレッドとして実行される。このメソッドでは、バーチャル・マシンの
スレッドを同時に実行することができる。ただし、ネイティブ・スレッディング
が使用されると、バーチャル・マシンは、計画中のスレッドに優先して基礎とな
るオペレーティング・システムに制御を引き渡さなければならない。したがって
、ネイティブ・スレッディングを使用すると、スレッドの挙動はオペレーティン
グ・システム依存およびハードウェア依存になる。バーチャル・マシン実行中の
並行性に関係したバグの効果的なデバッグは不確かなものとなる。それは、ネイ
ティブ・スレッディングを使用した、スレッドを実行する相対的なタイミングが
、異なるオペレーティング・システムおよびハードウェアのプラットフォームを
通して変化することがあるからである。
【0026】 図3Aおよび3Bは、実行環境下におけるスレッドの使用を示すブロック図で
ある。図3Aは、ネイティブ・スレッディングを使用しないバーチャル・マシン
を含む。図3Bは、ネイティブ・スレッディングを使用するバーチャル・マシン
を含む。
【0027】 図3Aで、オペレーティング・システム109はハードウェア110の上で実
行されており、バーチャル・マシン105はオペレーティング・システム109
の上で実行されている。バーチャル・マシン105では、アプレット1(300
)およびアプレット2(301)のような複数のアプリケーションおよび/また
はアプレットが実行されている。アプレット1およびアプレット2は、それぞれ
に1つまたは複数のバイトコード・クラス・ファイルを含むことができる。リン
クされたライブラリ(LIB)は、ネイティブ・メソッドをサポートするために
アプレット2に関連付けられている。ライブラリ302は、関連付けられたネイ
ティブ・メソッドを含むアプレット2のクラスがバーチャル・マシン105内に
インスタンス化される時にロードおよびリンクされる。ライブラリ302のネイ
ティブ・コードは、ライブラリ・リンキング機能をサポートするオペレーティン
グ・システム109およびハードウェア110の上で直接に実行される。
【0028】 実行の複数スレッドは、バーチャル・マシン105内で処理される。例えば、
アプレット1は2つのスレッドT1およびT2を有することができ、アプレット
2は2つのスレッドT5およびT6を有することができ、バーチャル・マシン自
体は、ごみ収集などのバーチャル・マシンのプロセスを実行する2つのスレッド
T3およびT4を有することができる。スレッドT1ないしT6は、バーチャル
・マシン105内のVMスレッド・スケジューラ303によって管理およびスケ
ジューリングされる。VMスレッド・スケジューラ303は、例えば優先順位お
よびタイム・スライシング方法に基づいて、オペレーティング・システム・レベ
ルで、グループT1ないしT6のどのスレッドが現在実行中のバーチャル・マシ
ンのスレッド、TVMであるかを選択する。
【0029】 Javaバーチャル・マシンは、通常、実行中のスレッドが処理中のリソース
を特定の間隔で他のスレッドに譲渡する「協調スケジューリング」をサポートす
るが、さもなければ現行スレッドの実行に関連付けられた遅延が起こる可能性が
ある。例えば、優先順位の高いスレッドは、譲渡操作を利用して現行スレッドに
取って代わることができる。プロセッサ・リソースの譲渡は、標準メソッドにお
いて明示的にプログラムされる必要はない。バーチャル・マシンは、協調してス
ケジューリングするために、解釈のプロセスやコンパイルされたコードの、メソ
ッドが呼び出した時やループの途中(例えば、逆方向ブランチ)のような実行に
適した時点で譲渡を挿入することができる。
【0030】 オペレーティング・システム109は、選択されたバーチャル・マシン・スレ
ッドTVMを含む多くのスレッドに対していつでも同時に働くことができる。例
えば、オペレーティング・システム109は、オペレーティング・システムの他
のアプリケーションまたは処理をサポートするスレッドTA−TZを含むことが
出来る。OSスレッド・スケジューラ304は、グループTA−TZのどのスレ
ッドおよびTVMが、所与の時間に基礎となるハードウェア110によって実行
されるかを決定する。ハードウェア110が複数のプロセッサをサポートしてい
るならば、複数のスレッドを異なるプロセッサで同時に実行するようにOSスレ
ッド・スケジューラ304によってスケジュールすることができる。
【0031】 図3Aの実施において、バーチャル・マシン・スレッド(例えば、T1−T6
)は、例えば、図に示すように、スレッドT6はライブラリ302のネイティブ
・コードによってサポートされているアプレット1のネイティブ・メソッドを呼
び出すように、ネイティブ・メソッドのための機能を実行するために実行制御を
リンクされたライブラリ(例えば、LIB302)に移すことができる。スレッ
ドT6は、スレッドT6が現行でバーチャル・マシン・スレッドTVMとしてオ
ペレーティング・システム109に渡されているので、制御をライブラリ302
に移すことができる。バーチャル・マシンの他のスレッドは、協調スケジューリ
ングに従ってスレッドT6がイールド(yield)するのを待たなければならない。
【0032】 ただし、ライブラリ302の制御の移動は、バーチャル・マシン実行の問題を
増加させることになる。バーチャル・マシンで実行中のクラスは、通常、他のク
ラスのメソッドのみを呼び出し、一般的にシステムを直接呼び出すことはしない
。ネイティブ・コードは、しかし、その機能依存であり、ブロッキング・システ
ム・コールを頻繁に行うことができる。ネイティブ・コードはリンクされたライ
ブラリでコンパイルされたコードとして独立に実行されるので、バーチャル・マ
シンのインタープリタおよびコンパイラはバイパスされ、制御が標準メソッドに
戻されるまで協調スケジューリングを強行することはできない。バーチャル・マ
シンは、したがって、ネイティブ・コードに明示的なyield()コールを与えるネ
イティブ・コード・プログラマーに依存する。
【0033】 ネイティブ・コード・ライブラリ302が、ファイルをダウンロードするため
のI/Oコールのようなシステムコールをブロックしたら、バーチャル・マシン
内のスレッドT6と、したがってオペレーティング・システム・レベルのスレッ
ドTVMは、システム・コールが完了するまで、例えばダウンロードが終了する
までブロックする。バーチャル・マシン全体の実行は、ライブラリ302のネイ
ティブ・コードによって実行制御が維持されているので、システムコールの期間
中もブロックされる。ブロッキング・システムコールが完了するのに比較的長時
間掛かるので、バーチャル・マシン109のすべてのスレッドを同様にブロック
されるのは好ましくない。アプレット1およびアプレット2ならびにバーチャル
・マシン105のパフォーマンスは、ライブラリ302のブロッキング・システ
ムコールによって低下する。このため、多くのバーチャル・マシンの実行におい
て、図3Bに示すようにネイティブ・スレッディングが使用される。
【0034】 図3Bでは、VMスレッド・スケジューラ303は、バーチャル・マシンの複
数のスレッドをオペレーティング・システム・レベルのスレッドとして実行する
。このスレッドは、スレッドTVM1ないしTVMnとしてラベリングされる。
VMスレッド・スケジューラ303は、どのバーチャル・マシン・スレッド(T
1−T6)がOSスレッドTVM1ないしTVnとして所与の時間にオペレーテ
ィング・システム109に渡されるのかを決定する。バーチャル・マシン105
の各スレッドが基礎となるオペレーティング・システム109の個別スレッドと
して実行されるような極端な場合には、バーチャル・マシン105はVMスレッ
ド・スケジューラ303の実行に先立つことができ、またスレッドのスケジュー
リングについてOSスレッド・スケジューラ304に完全に依存することができ
る。
【0035】 図3Bを実行すると、複数のスレッドがバーチャル・マシン105において同
時にアクティブになることができる。すなわち、ライブラリ302のネイティブ
・コードによるブロッキング・システム・コールは、バーチャル・マシン105
を完全にブロックすることができないということである。むしろ、グループTV
M1ないしTVMnの1つのスレッド、すなわちライブラリ302に制御を渡し
たスレッド(すなわち、バーチャル・マシンのスレッドT6に対応するオペレー
ティング・システムのスレッド)は、ブロックされるが、残りのスレッドTVM
1ないしTVMnは実行することができる。
【0036】 しかし、バーチャル・マシンの複数のスレッドをOSスレッドまたはネイティ
ブ・スレッドとして実行することによって、バーチャル・マシン105は、バー
チャル・マシンにおけるスレッドのスケジューリングを、VMスレッド・スケジ
ューラ303からスレッド・スケジューラ304に効果的に制御を譲渡する。V
Mスレッド・スケジューラ303に制御が比較的欠けているので、バーチャル・
マシンのスレッド間で同期エラーが発生することがある。複雑な問題については
、ネイティブ・スレッディングがOSスレッド・スケジューラ304に依存して
いるため、バーチャル・マシン105およびアプレット1およびアプレット2が
、異なるタイミング・パラメータおよびスケジューリング・プロセスを有する異
なるオペレーティング・システム109および/または異なるハードウェア11
0上で実行される場合には、同期エラーは起こる可能性がないか、または別の形
式で起こることがある。したがって、エラーは容易に反復することはできず、シ
ステムのデバッグはより複雑化する。
【0037】 オブジェクト指向プログラミング 下記で参照のためにオブジェクト指向プログラミングの一般的な説明を行う。
オブジェクト指向プログラミングは、ある種の基本的ビルディング・ブロックを
組み合わせ、そのビルディング・ブロック間に関係を築くことによりコンピュー
タ・プログラムを作る方法である。オブジェクト指向プログラミング・システム
におけるビルディング・ブロックは「オブジェクト」と呼ばれる。1つのオブジ
ェクトは、データ構造(1つまたはそれ以上のインスタンス変数)およびそのデ
ータを使用しまたはそのデータに影響を及ぼすオペレーション(メソッド)をグ
ループ化するプログラミング単位である。したがってオブジェクトは、データお
よびそのデータ上で実行される1つまたはそれ以上のオペレーションまたは手続
きから成る。データとオペレーションを単一のビルディング・ブロックに結合す
ることを「カプセル化」と呼ぶ。
【0038】 オブジェクトは「メッセージ」を受け取るとそのメソッドのうち1つを実行す
るように命令することができる。メッセージはあるメソッドを実行するためにオ
ブジェクトに送信されるコマンドまたは命令である。メッセージは、メソッド選
択(例えばメソッド名)およびゼロまたはそれ以上の引数からなる。メッセージ
は受信先のオブジェクトに、どのオペレーションを実行するのかを伝える。
【0039】 オブジェクト指向プログラミングの一利点はメソッドを呼び出すメソッドであ
る。メッセージがオブジェクトに送信される際、メッセージはオブジェクトに対
してあるメソッドをどのように実行するかを命令する必要がない。必要なのはオ
ブジェクトがメソッドを実行するよう要求することだけである。これによりプロ
グラム開発が非常に簡易になる。
【0040】 オブジェクト指向プログラミングの言語は主に「クラス」体系に基づく。クラ
スに基づくオブジェクト指向プログラミング体系の一例は、一般にアディソン・
ウェスレー出版社から1989年に出版されたアデル・ゴールドバーグおよびデ
ビッド・ロブソン著「Smalltalk−80:The Language」
で説明される。
【0041】 クラスは通常、クラスについてのフィールド(例えば変数)およびメソッドの
両方を含むオブジェクトのタイプを定義する。オブジェクト・クラスを使用して
オブジェクトの特定のインスタンスを生成することができる。オブジェクト・ク
ラスのインスタンスは、その変数およびクラスについて定義されたメソッドを含
む。同一クラスの複数のインスタンスは、オブジェクトクラスから生成すること
ができる。オブジェクト・クラスから生成された各インスタンスは、同一のタイ
プまたはクラスであるということになる。
【0042】 例として説明すると、従業員オブジェクト・クラスは「name」および「s
alary」インスタンス変数と「set_salary」メソッドを含むこと
ができる。従業員オブジェクト・クラスのインスタンスは、組織内の各従業員に
ついて生成すなわちインスタンス化することができる。各オブジェクト・インス
タンスは「employee」タイプであるということになる。各従業員オブジ
ェクト・インスタンスは、「name」および「salary」インスタンス変
数と「set_salary」メソッドを含む。各従業員オブジェクト・インス
タンス内で「name」および「salary」の変数と関連付けられた値は、
組織内の従業員の氏名および給料を含む。メッセージがある従業員の従業員オブ
ジェクト・インスタンスに送信されると、「set_salary」メソッドを
呼び出して、従業員の給料(すなわち、従業員の従業員オブジェクト内の「給料
」変数と関連付けられた値)を変更させることができる。
【0043】 クラスの階層は、オブジェクト・クラス定義が1つまたはそれ以上のサブクラ
スを持つように定義することができる。サブクラスはその親(およびそのまた親
などの)定義を継承する。階層中の各サブクラスは、その親のクラスが指定する
振る舞いを追加または変更することがある。オブジェクト指向プログラミング言
語の中には、サブクラスが1つ以上の親クラスからクラス定義を継承する多重継
承を支持するものもある。Javaプログラミング言語など他のプログラミング
言語は単一継承だけを支持し、その場合サブクラスは1つだけの親クラスのクラ
ス定義を継承するように制限される。Javaプログラミング言語は、定数およ
び抽象メソッド宣言のセットを含む「インターフェース」として知られるメカニ
ズムをも用意している。オブジェクト・クラスは、インターフェース内で定義さ
れた抽象メソッドを実施することができる。単一継承および多重継承はどちらも
インターフェースに使用することができる。すなわちインターフェースは、1つ
以上の親インターフェースからインターフェース定義を継承することができる。
【0044】 オブジェクトは、オブジェクト指向プログラミング環境において関連するコー
ドおよび変数を含むモジュールを指すのに使用される一般的な用語である。ソフ
トウェア・アプリケーションにはオブジェクト指向プログラミング言語を使用し
て書き込みをすることができ、その場合プログラムの機能性はオブジェクトを使
用して実施される。
【0045】 発明の概要 バーチャル・マシン環境においてネイティブ・コードを変換および実行するメ
ソッドおよび装置が提供され、ポインタ・チェッキング、スレッド制御、他の有
用な特性が可能になる。バーチャル・マシン実施のデバッグは、ネイティブ・コ
ードのバイナリ変換によって容易になる。バイナリ変換はプラットフォームの独
立性を高め、スレッド管理およびスケジューリングをより制御することができる
ようになり、ネイティブ・コード内のメモリ・アクセス・エラー識別に対する予
防手段をとる。バーチャル・マシン環境でネイティブ・コードが実行されると、
ネイティブ・コードは中間フォームに変換される。この中間フォームは処理され
、どこでメモリ・アクセスおよびブロッキング・システム・コールが発生してい
るのかを判断する。妥当性チェックがメモリ・アクセス・コールに挿入され、各
コールがアクセスすべき各メモリの一部が許容範囲内にあるかを判断する。すな
わちワイルド・ポインタおよびネイティブ・コードに関連するメモリ・アクセス
・エラーの他のソースが識別される。ブロッキング・システム・コールは非ブロ
ッキングの変形と入れ換えられ、「イールド(yield)」オペレーションが
システム・コールおよびループに挿入される。
【0046】 メモリ・アクセス妥当性チェックおよび非ブロッキング・システム・コールを
組み込む修正されたネイティブ・コードはバーチャル・マシンによりコンパイル
およびインタープリートされ、ネイティブ・コードが定義するルーチンを実行す
る。修正されたネイティブ・コードは他のスレッドをブロックしないので、スレ
ッドのスケジューリングは基本となるオペレーティング・システムではなくバー
チャル・マシンにより管理され、連携スケジューリングが実行される。
【0047】 発明の詳細な説明 本発明は、バーチャル・マシン環境でネイティブ・コードを変換し、実行する
メソッドと装置である。以下の説明では、本発明の実施形態をより完全に説明す
るために多くの特定の詳細が述べられる。しかしながら、当業者にはそれらの特
定の詳細なしでも本発明を実施できることは明らかである。他の例では良く知ら
れた要素は本発明を曖昧にしないようにその詳細については述べない。
【0048】 Javaプログラミング・ランゲージ及びJavaバーチャル・マシンに関し
て述べるが、本発明はネイティブ・メソッド又は関数を含むいかなるバーチャル
・マシンでも実施することができる。
【0049】 コンピュータ実行環境(ハードウエア)の実施形態 本発明実施形態は、図4に示されたコンピュータ400のような一般目的のコ
ンピュータで実行されるコンピュータ可読コードの形のコンピュータ・ソフトウ
エアとして実装することができ、またはそのようなコンピュータで走るJava
実行環境で実行可能なバイトコード・クラス・ファイルの形のコンピュータ・ソ
フトウエアとして実装することができる。キーボード410とマウス411が双
方向システムバス418に接続されている。キーボードとマウスはユーザ入力を
コンピュータ・システムへ送り、そのユーザ入力をプロセッサ413へ送るため
のものである。他の適切な入力デバイスがマウス411やキーボード410に追
加し又はそれらに代えて用いることも可能である。双方向システムバス418に
接続されたI/O(入出力)ユニット419はプリンタ、A/V(オーディオ/
ビデオ)I/OなどのI/O要素を代表している。
【0050】 コンピュータ400はビデオ・メモリ414、メイン・メモリ415及び大容
量記憶装置410を含む。それらはすべてキーボード410,マウス411及び
プロセッサ413とともに双方向システムバス418に接続されている。大容量
記憶装置は、磁気的、光学的又は光磁気的記憶システムまたはその他のいかなる
利用可能な大容量技術のような固定及び着脱自在なメディア双方を含む。バス4
18は、例えば、ビデオメモリ414やメインメモリ415をアドレスするアド
レス・ラインを含む。同様に、システムバス418は、例えば、プロセッサ41
3、メインメモリ415,ビデオメモリ414及び大容量記憶装置412のよう
な部材の間でデータを転送するデータバスをも含む。データとアドレス用の個々
のラインの代わりに多重化データ/アドレス・ラインを用いても良い。
【0051】 本発明の1実施形態では、プロセッサ413は、680X0プロセッサのよう
なモトローラによって製造されたマイクロプロセッサ、80X86又はペンティ
アム(登録商標)・プロセッサのようなインテルによって製造されたマイクロプ ロセッサ、又はサン・マイクロシステムズ・インコーポレーテッドからのSPA RCマイクロプロセッサである。しかしながら、他の適切なマイクロプロセッサ 又はマイクロ・コンピューを使用可能である。メインメモリ415は、ランダム ・アクセス・メモリ(DRAM)を含む。ビデオ・メモリ414は、二重ポート ・ビデオ・ランダム・アクセス・メモリである。ビデオ・メモリ414の一つの ポートはビデオ増幅器416に接続されている。ビデオ増幅器416は陰極線管 (CRT)ラスタ・モニタ417を駆動するために使用される。ビデオ増幅器4 16は従来良く知られており、任意の適切な装置によって実現できる。この回路 はビデオ・メモリ414に記憶されたピクセル・データをモニタ417によって 使用するのに適したにラスタ信号に変換する。代わりに、ビデオ・メモリはフラ ット・パネル又は液晶ディスプレイ(LCD)又はその他のデータを適切に表示 するデバイスを駆動するために用いられる。
【0052】 コンピュータ400はバス418へ接続された通信インターフェース420を
含む。通信インターフェース420は、ネットワーク421を介してローカル・
ネットワーク422へ接続し、2方向データ通信を行っている。例えば、通信イ
ンターフェース420が統合サービス・デジタル・ネットワーク(ISDN)カ
ード又はモデムである場合、通信インターフェース420は、ネットワーク・リ
ンク421の一部となっている、電話線の対応するタイプのデータ通信接続を構
成している。もし、通信インターフェース420がローカル・エリア・ネットワ
ーク(LAN)カードである場合、通信インターフェース420はネットワーク
・リンク421を介して適合するLANとデータ通信接続を行う。通信インター
フェースは、ケーブル・モデム又はワイヤレス・インターフェースでも良い。ど
のような実施形態においても、通信インターフェース420は、情報の多くのタ
イプを現しているデジタル・データ・ストリームを運ぶ電子的、電磁的又は光学
的信号を送りかつ受け取る。
【0053】 ネットワーク・リンク421は一つ又はより多くのネットワークを通して他の
データ・デバイスにデータを通信する。例えば、ネットワーク・リンク421は
、ローカル・ネットワーク422を通して、ローカル・サーバ・コンピュータ4
23へ又はインターネット・サービス・プロバイダ(ISP)424によって動
作させられるデータ装置へ接続されている。ISP424は、今一般に「インタ
ーネット」425といわれているワールド・ワイド・パケット・データ通信サー
ビスを通してデータ通信サービスを実施する。ローカル・ネットワーク422と
インターネット425の双方はデジタル・データ・ストリームを運ぶ電子的、電
磁的又は光学的信号を利用する。コンピュータへ及びコンピュータからデジタル
・データを運ぶ、多くのネットワークを通る信号やネットワーク・リンク421
上にあり通信インターフェースを通る信号は、典型的には情報を運ぶ搬送波の形
である。
【0054】 コンピュータ400は、ネットワーク、ネットワーク・リンク421及び通信イ
ンターフェース420を通してプログラム・コードを含むメッセージを送り、か
つデータを受け取る。例えば、インターネットでは、リモート・サーバ・コンピ
ュータ426が、インターネット425、ISP424、ローカルネットワーク
422及び通信インタフェース420を通してアプリケーション・プログラムに
対して要求されたコードを送る。
【0055】 受け取られたコードはプロセッサ413によって受け取ったときに実行されて
もよいが、後に実行するために大容量記憶装置412または他の不揮発性記憶装
置に記憶しても良い。また、実行して記憶しても良い。このようにして、コンピ
ュータ400はアプリケーション・コードを搬送波の形で獲得する。本発明の実
施形態においては、そのようなダウンロードされたアプリケーションの例には、
バーチャル・マシン、クラス・ローダ、クラス・バイトコード・ファイル、クラ
ス・ライブラリおよびここに述べられるネイティブ・コードを変換し、実行する
装置のような、実行環境の一つ以上の要素を含んでいる。
【0056】 アプリケーション・コードはコンピュータ・プログラム製品のいかなる形態に
も組み込むことができる。コンピュータ・プログラム製品は、コンピュータ可読
コード又はデータを記憶し、転送するように構成された、あるいはコンピュータ
可読コード又はデータメディアが組み込まれたメディアを含む。コンピュータ・
プログラム製品の例としては、CD−ROMディスク、ROMカード、フロッピ
ー(登録商標)・ディスク、磁気テープ、コンピュータ・ハードディスク、ネッ トワーク上のサーバ及び搬送波などである。
【0057】 上述したコンピュータ・システムは例示の目的だけである。本発明の実施形態
は、バーチャル・マシンをサポートする、組み込まれたデバイス(例えばウエブ
・ホーンなど)や「thin」クライアント処理環境(例えばネットワーク・コ
ンピュータ(NC)その他)を含むコンピュータ・システム又はプログラミング
環境、処理環境のいずれのタイプでも実施できる。
【0058】 ネイティブ・コードのバイナリ変換 先に述べたように、バーチャル・マシン内で実行されるクラスはリンクされた
ライブラリ内のネイティブ・コード関数によって実施されるネイティブ・メソッ
ドを含む。本発明の実施形態によれば、リンクされたライブラリのネイティブ・
コードはバーチャル・マシンのコンポーネントによって処理され、実行され、従
来技術のネイティブ・メソッド実行プロセスに対して共通スケジューリングが可
能で、強化したデバッキング能力を与える。ネイティブ・コードの処理は、バイ
ナリ変換手順の一部として、「ワイルド」ポインタによって引き起こされるよう
なメモリ・アクセス・バグに関するチェックを挿入すること、及びネイティブ・
スレッディングの必要なしに、ブロッキング・システム・コールをバーチャル・
マシンにおける共通スケジューリングを可能とする非ブロッキング・バリアント
で置き換えることを含む。
【0059】 バイナリ変換は典型的にはデバッキングオペレーションの間にバーチャル・マ
シンで可能で、通常の動作の間は不可能である。例えば、可能なとき、「System
.loadLibrary()」コールが、バーチャル・マシン内でインタプリートされた又は
コンパイルされた実行に関する指定されたライブラリのバイナリ変換となる。不
可能なとき、指定されたライブラリは標準のメソッドでロードされ、かつリンク
されれる。いくつかの実施形態では、デバッキング処理の間のみに実行できるの
ではなく、バイナリ変換がいつでも実行できる。
【0060】 図5は本発明実施形態によるバイナリ変換を実施するためのメソッドのフロー
図である。ステップ500で、リンクされたライブラリからそれぞれのネイティ
ブ・コードを獲得する。このステップは、例えば、それぞれのクラスがバーチャ
ル・マシン内でインスタンス化されるときリンクされたライブラリのソース・フ
ァイルを決定し、かつそのフォース・ファイルからネイティブ・コード(すなわ
ちマシン・コード)のバイナリ・フォームを読みとることを含む。バイナリ変換
はバーチャル・マシンにおける実行に先立って実施される。
【0061】 ステップ501では、ネイティブ・コードのバイナリ・フォームがバーチャル
・マシンのバイナリ変換コンポーネントによって、バイトコード、アブストラク
ト・シンタックス・ツリー又は制御フロー・グラフのような中間フォームに変換
される。バイトコードは、例えば、Javaコンパイラ(図1の要素101)に
よって生成された標準バイトコードと同じように実施される。アブストラクト・
シンタックス・ツリーや制御フロー・グラフは、ツリーやグラフのノードとして
の実行オペレーションを特定するプログラム実行を現している。典型的には、中
間フォーム(ここでは変換されたフォームともいう)はメモリ・アクセス・ポイ
ント及び/又はコール及びブランチ・オペレーションの識別を単純化するフォー
ムである。
【0062】 ステップ502では、メモリ・アクセス・コールの位置が決定され、かつ制限
されたまたは制限区域外のメモリの部分にアクセスしようとしているならば、メ
モリ・アクセス・コールが実行している間に信号にチェックが挿入される。信号
は、例えばエラー・メッセージを表示する(例えば、ダイアログボックスに)、
ログファイルにエラーをログする、例外をスローすることを含み、またはそれら
のアクションのいくつかの組み合わせを含む。実行中に、ワイルド・ポインタと
ネイティブ・コードに関連する他のメモリ・アクセス・バグのデバッキングが、
不法な各メモリ・アクセス・イベントが起こったときにそれを報告することによ
って決定される。メモリ・アクセス・チェックの一部として、ネイティブ・コー
ドの要素によって正規にアクセスできるメモリの部分がポインタ値と比較するた
めに追跡される。
【0063】 ステップ503で、ブロッキング・システム・コールが中間フォームで識別さ
れ、可能ならば、システム・コールの非ブロッキング・バリアントが挿入される
。ステップ504で、「yield()」関数がコールとループに挿入される。ループ
に対するイールド・ポイント(yield()関数が挿入されるポイント)が、例えば
、バックワード・ブランチ・オペレーションに基づいて決定される。ステップ5
03と504の効果は、可能な限り、バーチャル・マシン及びいかなる実行して
いるアプリケーション及び/又はアプレットの実行をネイティブ・コードのアク
ティビティに関する依存から自由にする。バーチャル・マシンの他のスレッドは
ネイティブ・コードのシステム・コールによってブロックされず、かつコールで
かつループ内で他の待機中のスレッドに処理リソースをイールドするためにイー
ルド・ポイントが確立される。バーチャル・マシンがすべての関連するスレッド
の共通スケジューリングを実行できる。この共通スケジューリングによって、同
期又は同時に関連しているバグを信頼性を持って識別し、かつ基礎となるオペレ
ーティング・システムやハードウエアと独立に修正する。
【0064】 ステップ505で、中間のすなわち変換されたフォームにおけるリバイズされ
たネイティブ・コードがバーチャル・マシンでコンパイルされ、インタプリート
され、関数をそこで実行する。いくつかの実施形態では、さらなる変換ステップ
が実施され、中間フォームを標準インタープリタ及びJITコンパイラでインタ
プリートしたりコンパイルするのに適切なバイトコードに変換する。ネイティブ
・コード関数の実行に関連するスレッドのスケジューリングがバーチャル・マシ
ンの他のあらゆるインタプリートされた又はコンパイルされたプロセスのように
、MVスレッド・スケジューリング・プロセスによって制御される。メモリ・ア
クセス・チェックが実施されると、違反がログされる。必要な分離された非同期
スレッドが生成され、バーチャル・マシンにおいて他のスレッドと独立に他の処
理が起こることができるようになる。
【0065】 場合により、ネイティブ・コードはステップ501において完全にはパース(
構文解析)を行えない。ルーチンの始め又は見込まれたブランチ(computed bran
ch) のようなコードのある部分(ないし側面)は、変換されたコードがステップ
505において実行される(例えば、ルーチンが現実にコールされた時)までは
知り得ないことがある。このために、変換プロセスは、ステップ505からステ
ップ501へと、フィードバックの矢印506で示されるように戻ることができ
る。このフィードバックは、それまではパース(構文解析)をされていないネイ
ティブ・コードをパース(構文解析)および変換(又は、既にパースをされたネ
イティブ・コードの再パース)を、実行過程で決定された新たな情報に基づいて
行う目的のものである。
【0066】 バイナリ変換を受けるネイティブ・メソッドの一般的な中間フォームが図6A
および図6Bに示されている。図6Aは、一例としての実行ブロックの一般化し
たコントロール・フローを示す図であって、本発明の実施形態に従ってネイティ
ブ・コードのブロックを中間フォームへと変換することが例示されている。図6
Bは、図6Aの一般化したコントロール・フローに本発明の実施形態に従って変
形を付加したものを示す。この実施形態では、ループ内でのイールド点の表示は
バックワード・ブランチ・オペレーションの発生に基づいている。
【0067】 例示したオペレーション(動作)の表示のために、図6Aおよび図6Bでは、
次の略号が用いられている。 RD =メモリ・リード・オペレーション WR =メモリ・ライト・オペレーション BR =ブランチ・オペレーション(例:if) MC =メソッド(関数)コール BSC=ブロッキング・システム・コール OP =他の一般的・オペレーション(その他) CHK=ポインタ・チェック・オペレーション YLD=イールド・オペレーション NBSC=非ブロッキング・システム・コール FLAG=信号処理アクセス違反
【0068】 図6Aにおいて、実行ブロックは、一般的オペレーション600から始まり、
続いてリード・オペレーション603が行われ、さらに、一般的オペレーション
605,606,607が順に続く。一般的オペレーション607の後で、ライ
ト・オペレーション610が遂行され、続けて、一般的オペレーション612,
613、そして、ブランチ・オペレーション614が行われる。このブランチ・
オペレーションでは、一般的オペレーション616へと進むか、一般的オペレー
ション606へと分岐して戻るかされる。一般的オペレーション616から、メ
ソッド・コール618が行われ、それに、一般的オペレーション619,ブロッ
キング・システム・コール621A,一般的オペレーション622が続く。
【0069】 バイナリ変換にとって興味あるオペレーションは、リード・オペレーション6
03,ライト・オペレーション610,ブランチ・オペレーション614,メソ
ッド・コール618,ブロッキング・システム・コール621Aであり、それら
は図中で強調されている。メモリ・アクセスに関するリード・オペレーション6
03およびライト・オペレーション610は、ポインタ・チェックの挿入のため
のセットである。ブランチ・オペレーション614およびメソッド・コール61
8は、yield() コールの挿入のためのセットである。ブロッキング・システム・
コール621Aは、非ブロッキング・システム・コール・バリアントで置換する
ためのセットである。
【0070】 図6Bには、図6Aの実行ブロックの中間フォームに対する変形が示されてい
る。リード・オペレーション603は、ポインタ・チェック・オペレーション6
01,ブランチ・オペレーション602,リード・オペレーション603および
フラッグ・オペレーション604で置換されている。チェック・オペレーション
601は、ポインタ値がリーガル(適法な)レンジ内か否かを決定し、それにブ
ランチ・オペレーション602が続く。ブランチ・オペレーション602は、ポ
インタが有効であればリード・オペレーション603を行い、さもなければ、ポ
インタ・チェックで無効なポインタが示されていることを知らせるフラグ・オペ
レーション604を遂行する。オペレーション603,604は何れもオペレー
ション605へ進む。
【0071】 ライト・オペレーション610は、リード・オペレーション603のために行
われた上述した挿入に類似のチェックおよびフラッグの挿入を受ける。ライト・
オペレーション610は、ポインタ・チェック・オペレーション608,ブラン
チ・オペレーション609,ライト・オペレーション610およびフラッグ・オ
ペレーション611で置換される。ポインタ・チェック・オペレーション608
は、ポインタ値がリーガル・レンジ内にあるか否かを決定するものであり、それ
にブランチ・オペレーション609が続く。ブランチ・オペレーション609は
、ポインタが有効であればライト・オペレーション610を実行し、さもなけれ
ば、ポインタ・チェックにより無効ポインタと示されたことを知らせるフラグ・
オペレーションを遂行する。オペレーション610,611は何れもオペレーシ
ョン612へ進む。
【0072】 バックワード・ブランチ・オペレーション614には、オペレーション606
へのリターン・ループ内に挿入されたイールド・オペレーション615が伴って
いる。挿入されたイールド・オペレーション615によって、他のスレッドには
、ブランチ・オペレーション614により形成されるループが今一度開始される
前にプロセッサ・リソースを得る機会が許される。これにより、長いループの再
帰プロセスのために、他のスレッドからプロセッサ・リソースが奪われることが
防止される。同様に、イールド・オペレーション617がメソッド・コール61
8の前に挿入され、他のスレッドは、もし必要であれば、カレント・スレッドに
よる新たなメソッドの開始前に実行を許される。
【0073】 ブロッキング・システム・コール621Aは、図6Bにおいて、非ブロッキン
グ・システム・コール621Bで置換されている。イールド・オペレーション(
620)を、任意的に、システム・コールの前に挿入してもよい。必要であれば
、非ブロッキング・システム・コール621Bは、新たな非同期スレッドを生成
して変換された関数の動作を独立的に実行されるスレッドとして遂行し得る。
【0074】 バーチャル・マシンによりインタープリートまたはコンパイルをされると、リ
バイズされた実行ブロック(図6B)は、従来技術でのネイティブ・メソッドの
実行に比べて、意味のあるデバッギングおよびスケジューリングの利点を提供す
る。
【0075】 図7は、本発明の実施形態に従ってバイナリ変換を実現する実行環境を示すブ
ロック図を示す。図7において、オペレーティング・システム109はハードウ
エア110でランし、バーチャル・マシン105はオペレーティング・システム
109上でランする。オペレーティング・システム109はハードウエア110
によってサポートされる。図3Aおよび図3Bに示されるように、バーチャル・
マシン105およびオペレーティング・システム109は、スレッド実行の管理
のために、VMスレッド・スケジューラ303およびOSスレッド・スケジュー
ラ304をそれぞれ有する。また、バーチャル・マシン105は、バイナリ変換
・プロセス701を有する。
【0076】 バーチャル・マシン105内で実行されるのは、アプレット1(300)およ
びアプレット2(301)のような複数のアプリケーション及び/又はアプレッ
トである。アプレット1およびアプレット2それぞれは、1以上のバイトコード
のクラス・ファイルを含むことができる。リンクされたライブラリ(LIB)3
02は、アプレット2に付随させられてネイティブ・メソッドをサポートする。
ライブラリ・ファイル302のネイティブ・コードは、バーチャル・マシン10
5のバイナリ変換・プロセス701によってパース(構文解析)および変換(ト
ランスレーション)されて、変換されたライブラリ700が発生される。
【0077】 変換されたライブラリ700は、ネイティブ・コードの中間フォーム(メモリ
・アクセス・チェック,イールド,非ブロッキング・システム・コール・バリア
ントを含んでいる)から成っている。アプレット2のネイティブ・メソッドがス
レッドT6によってコールされると、変換されたライブラリ700はバーチャル
・マシン105内でインタープリートまたはコンパイルをされて所望の関数が実
行される。変換されたライブラリ700の中間フォームに依存して、変換された
ライブラリを得るためのインタープリートまたはコンパイルのプロセスは、アプ
レット1およびアプレット2のクラスに適用されるインタープリートまたはコン
パイルのプロセスと異なることも、異ならないこともある。しかし、バーチャル
・マシン105によって、変換されたライブラリ700に対して行われる一般的
オペレーションや実行される管理は、アプレット1およびアプレット2のための
ものと一致している。実施形態によっては、変換されたライブラリ700は、ス
レッドT6において、ネイティブ・メソッド・スタック216を介するのではな
く、スタック212のフレームを介して、処理され得る。変換されたライブラリ
700は、あたかも、不変更のネイティブ・コード中の欠点を持たない追加のス
タンダード・メソッドを提供しているかのように、実行できる。
【0078】 リンクされたライブラリの変換されたネイティブ・コード関数は、オペレーテ
ィング・システム109で遂行される、リンクされたライブラリの独立したプロ
セスではなくして、バーチャル・マシン105を通して実行される故に、そして
、変換されたライブラリ700内にブロッキング・コールが存在しない故に、V
Mスレッド・スケジューラ303によって、共通スケジューリングを実行できる
。従って、図3Bで実現されるようなネイティブ・スレッディングは不要となる
。バーチャル・マシン105内でのスレッド・イベントの同期は、基礎にあるオ
ペレーティング・システムおよびハードウエアから独立しており、デバッギング
はオペレーティング・システムをベースとする同時発生事項の考慮なしに遂行可
能となる。
【0079】 以上にバーチャル・マシン環境においてネイティブ・コードの変換と実行を行
うメソッドおよび装置を、1またはそれ以上の実施の形態とともに、記載した。
本発明は、請求の範囲およびそれに均等な範囲によって定められるものである。
【図面の簡単な説明】
【図1】 コンパイルおよびランタイム環境のブロック図である。
【図2】 バーチャル・マシンの実施形態のランタイム・データ・アクセスのブロック図
である。
【図3A】 リンクされたライブラリを介して実装された多重アプレットおよびネイティブ
・コードをサポートするバーチャル・マシンを有するランタイム環境のブロック
図である。
【図3B】 ネイティブ・メソッド操作を使用するバーチャル・マシンを有するランタイム
環境のブロック図である。
【図4】 本発明の実施形態のために適切な実行環境を提供することができるコンピュー
タ・システムの実施形態のブロック図である。
【図5】 本発明の実施形態に従ったバイナリ変換プロセスの流れ図である。
【図6A】 本発明の実施形態に従ったネイティブ・コードのブロックの中間フォームへの
バイナリ変換を図示する例示的実行ブロックの汎用的な制御フロー図である。
【図6B】 本発明の実施形態に従って実行される変更を加えた図6Aの汎用的な制御フロ
ー図である。
【図7】 本発明の実施形態に従ってネイティブ・コードのバイナリ変換を実施するバー
チャル・マシンを有するコンピュータ・システムのブロック図である。
───────────────────────────────────────────────────── フロントページの続き (81)指定国 EP(AT,BE,CH,CY, DE,DK,ES,FI,FR,GB,GR,IE,I T,LU,MC,NL,PT,SE),OA(BF,BJ ,CF,CG,CI,CM,GA,GN,GW,ML, MR,NE,SN,TD,TG),AP(GH,GM,K E,LS,MW,SD,SL,SZ,UG,ZW),E A(AM,AZ,BY,KG,KZ,MD,RU,TJ ,TM),AE,AL,AM,AT,AU,AZ,BA ,BB,BG,BR,BY,CA,CH,CN,CR, CU,CZ,DE,DK,DM,EE,ES,FI,G B,GD,GE,GH,GM,HR,HU,ID,IL ,IN,IS,JP,KE,KG,KP,KR,KZ, LC,LK,LR,LS,LT,LU,LV,MD,M G,MK,MN,MW,MX,NO,NZ,PL,PT ,RO,RU,SD,SE,SG,SI,SK,SL, TJ,TM,TR,TT,UA,UG,UZ,VN,Y U,ZA,ZW (71)出願人 2550 Garcia Avenue,MS PAL1−521,Mountain V iew,California 94043− 1100,United States of America Fターム(参考) 5B081 DD00 5B098 HH00 【要約の続き】 ムコールがバーチャルマシンによってコンパイルされ、 インタプリートされ、ネイティブコードで定義されたル ーチンが実行される。リバイズされたネイティブコード は他のスレッドをブロックしないので、スレッドスケジ ューリングが基礎となるオペレーティングシステムでは なくバーチャルマシンによって管理され、かつ協調的な スケジューリングが実施される。

Claims (24)

    【特許請求の範囲】
  1. 【請求項1】 コンピュータにおいて、 ライブラリのネイティブ・コードを取得するステップと、 このネイティブ・コードを変換されたフォームに変換するステップと、 前記ネイティブ・コードの前記変換されたフォームを実行するステップと を有する方法。
  2. 【請求項2】 前記ネイティブ・コードの前記変換されたフォームを実行す
    るステップは、バーチャル・マシンにおいて実施される請求項1記載の方法。
  3. 【請求項3】 前記変換されたフォーム内のブロッキング・システム・コー
    ルを識別するステップと、 前記ブロッキング・システム・コールを非ブロッキング・システム・コールで
    置き換えるステップとをさらに有する請求項1記載の方法。
  4. 【請求項4】 前記変換されたフォーム内のメモリ・アクセス・オペレーシ
    ョンを識別するステップと、 このメモリ・アクセス・オペレーションにメモリ・アクセス違反のチェックを
    追加するステップとをさらに有する請求項1記載の方法。
  5. 【請求項5】 前記変換されたフォーム内のイールド・ポイントを識別する
    ステップと、 このイールド・ポイントにイールドを挿入するステップとをさらに有する請求
    項1記載の方法。
  6. 【請求項6】 前記変換されたフォーム内のイールド・ポイントを識別する
    ステップは、メソッド・コールを識別する請求項5記載の方法。
  7. 【請求項7】 前記変換されたフォーム内のイールド・ポイントを識別する
    ステップは、ループを識別する請求項5記載の方法。
  8. 【請求項8】 前記ループを識別するステップは、バックワード・ブランチ
    を識別することからなる請求項7記載の方法。
  9. 【請求項9】 コンピュータ読み取り可能なコードが記録されたコンピュー
    タで使用可能な媒体からなるコンピュータ・プログラム製品であって、 前記コンピュータ・プログラム製品は、 コンピュータにライブラリのネイティブ・コードを取得させるように構成され
    たコンピュータ読み取り可能なコードと、 コンピュータに前記ネイティブ・コードを変換されたフォームに変換させるよ
    うに構成されたコンピュータ読み取り可能なコードと、 コンピュータに前記ネイティブ・コードの前記変換されたフォームを実行させ
    るように構成されたコンピュータ読み取り可能なコードと を有するコンピュータ・プログラム製品。
  10. 【請求項10】 前記コンピュータ・プログラム製品は搬送波である請求項
    9記載のコンピュータ・プログラム製品。
  11. 【請求項11】 コンピュータに前記ネイティブ・コードの前記変換された
    フォームを実行させるように構成された前記コンピュータ読み取り可能なコード
    は、 バーチャル・マシンに前記変換されたフォームを実行させるように構成されて
    いる請求項9記載のコンピュータ・プログラム製品。
  12. 【請求項12】 コンピュータに前記変換されたフォーム内のブロッキング
    ・システム・コールを識別させるように構成されたコンピュータ読み取り可能な
    コードと、 コンピュータに前記ブロッキング・システム・コールを非ブロッキング・シス
    テム・コールで置き換えさせるように構成されたコンピュータ読み取り可能なコ
    ードと をさらに備える請求項9記載のコンピュータ・プログラム製品。
  13. 【請求項13】 コンピュータに前記変換されたフォーム内のメモリ・アク
    セス・オペレーションを識別させるように構成されたコンピュータ読み取り可能
    なコードと、 コンピュータに前記メモリ・アクセス・オペレーションにメモリ・アクセス違
    反のチェックを追加させるように構成されたコンピュータ読み取り可能なコード
    と をさらに備える請求項9記載のコンピュータ・プログラム製品。
  14. 【請求項14】 コンピュータに前記変換されたフォーム内のイールド・ポ
    イントを識別させるように構成されたコンピュータ読み取り可能なコードと コンピュータに前記イールド・ポイントにイールドを挿入させるように構成さ
    れたコンピュータ読み取り可能なコードと をさらに備える請求項9記載のコンピュータ・プログラム製品。
  15. 【請求項15】 コンピュータに前記変換されたフォーム内のイールド・ポ
    イントを識別させるように構成された前記コンピュータ読み取り可能なコードは
    、 コンピュータにメソッド・コールを識別させるように構成されたコンピュータ
    読み取り可能なコードからなる請求項14記載のコンピュータ・プログラム製品
  16. 【請求項16】 コンピュータに前記変換されたフォーム内のイールド・ポ
    イントを識別させるように構成された前記コンピュータ読み取り可能なコードは
    、 コンピュータにループを識別させるように構成されたコンピュータ読み取り可
    能なコードからなる請求項14記載のコンピュータ・プログラム製品。
  17. 【請求項17】 コンピュータにループを識別させるように構成された前記
    コンピュータ読み取り可能なコードは、 コンピュータにバックワード・ブランチを識別させるように構成されたコンピ
    ュータ読み取り可能なコードからなる請求項16記載のコンピュータ・プログラ
    ム製品。
  18. 【請求項18】 ネイティブ・メソッドからなるクラスと、 このクラスを処理するバーチャル・マシンとからなる装置であって、 前記ネイティブ・メソッドは、ライブラリのネイティブ・コードによってサポ
    ートされており、 前記バーチャル・マシンは、 前記ネイティブ・コードを変換されたフォームで実行するように構成されてお
    り、 共同スケジューリングをインプリメントするスレッド・スケジューラと、 前記ネイティブ・コードを前記変換されたフォームに変換するように構成され
    た変換プロセスと を備える装置。
  19. 【請求項19】 前記変換プロセスは、さらに、 前記変換されたフォーム内のブロッキング・システム・コールを非ブロッキン
    グ・システム・コールで置き換えるように構成されている請求項18記載の装置
  20. 【請求項20】 前記変換プロセスは、さらに、 前記変換されたフォーム内のメモリ・アクセス・オペレーションにメモリ・ア
    クセス・チェックを挿入するように構成されている請求項18記載の装置。
  21. 【請求項21】 前記変換プロセスは、さらに、 前記変換されたフォーム内のイールド・ポイントにイールド・オペレーション
    を挿入するように構成されている請求項18記載の装置。
  22. 【請求項22】 前記イールド・ポイントは、コールと関連付けられる請求
    項21記載の装置。
  23. 【請求項23】 前記イールド・ポイントは、ループと関連付けられる請求
    項21記載の装置。
  24. 【請求項24】 前記イールド・ポイントは、前記ループのバックワード・
    ブランチと関連付けられる請求項23記載の装置。
JP2000565460A 1998-08-13 1999-08-10 バーチャル・マシン環境でネイティブ・コードを変換し、実行する方法および装置 Expired - Lifetime JP4880121B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US09/134,073 US6282702B1 (en) 1998-08-13 1998-08-13 Method and apparatus of translating and executing native code in a virtual machine environment
US09/134,073 1998-08-13
PCT/US1999/018158 WO2000010081A2 (en) 1998-08-13 1999-08-10 Method and apparatus of translating and executing native code in a virtual machine environment

Publications (3)

Publication Number Publication Date
JP2002522844A true JP2002522844A (ja) 2002-07-23
JP2002522844A5 JP2002522844A5 (ja) 2006-12-28
JP4880121B2 JP4880121B2 (ja) 2012-02-22

Family

ID=22461658

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000565460A Expired - Lifetime JP4880121B2 (ja) 1998-08-13 1999-08-10 バーチャル・マシン環境でネイティブ・コードを変換し、実行する方法および装置

Country Status (8)

Country Link
US (1) US6282702B1 (ja)
EP (1) EP1104564B1 (ja)
JP (1) JP4880121B2 (ja)
KR (1) KR20010072477A (ja)
AT (1) ATE282854T1 (ja)
AU (1) AU5347499A (ja)
DE (1) DE69922015T2 (ja)
WO (1) WO2000010081A2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008071339A (ja) * 2006-08-21 2008-03-27 Intel Corp メモリ参照フィルタリングを実行する技術
JP2009509245A (ja) * 2005-09-15 2009-03-05 ビーアイエイピー・インコーポレーテッド デジタル・テレビジョン用の独立型ミニアプリケーション・システムおよび方法
JP2016528638A (ja) * 2013-08-15 2016-09-15 オラクル・インターナショナル・コーポレイション ランタイムメモリスロットリング

Families Citing this family (96)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6324685B1 (en) * 1998-03-18 2001-11-27 Becomm Corporation Applet server that provides applets in various forms
ATE293808T1 (de) * 1998-10-10 2005-05-15 Transitive Ltd Programm-kode-umwandlung
JP3470948B2 (ja) * 1999-01-28 2003-11-25 インターナショナル・ビジネス・マシーンズ・コーポレーション 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ
US6341338B1 (en) * 1999-02-04 2002-01-22 Sun Microsystems, Inc. Protocol for coordinating the distribution of shared memory
US6543011B1 (en) * 1999-07-15 2003-04-01 International Business Machines Corporation Method for event recording in java
US6854114B1 (en) * 1999-10-21 2005-02-08 Oracle International Corp. Using a virtual machine instance as the basic unit of user execution in a server environment
EP1109374A3 (de) * 1999-12-13 2001-06-27 TELEFONAKTIEBOLAGET LM ERICSSON (publ) Verfahren und Vorrichtung zur Durchführung von Netzwerkoperationen
US6738976B1 (en) * 1999-12-17 2004-05-18 Hewlett-Packard Development Company, L.P. Method, system, and apparatus to minimize exception handling overhead from invoked functions
US6484188B1 (en) * 1999-12-30 2002-11-19 Intel Corporation Optimization of garbage collection code in the context of raw native interface function calls in the java programming language
WO2001057654A2 (en) * 2000-02-07 2001-08-09 Insignia Solutions Plc Preprocessing of interfaces to allow fast call of native elements
US6813762B1 (en) * 2000-02-22 2004-11-02 Freescale Semiconductor, Inc. Method for processing program files in a programming language capable of dynamic loading
US6996829B2 (en) * 2000-02-25 2006-02-07 Oracle International Corporation Handling callouts made by a multi-threaded virtual machine to a single threaded environment
US7073033B2 (en) * 2000-02-25 2006-07-04 Oracle International Corporation Memory model for a run-time environment
US7133820B2 (en) * 2000-03-15 2006-11-07 Arc International Method and apparatus for debugging programs in a distributed environment
US6802057B1 (en) 2000-05-03 2004-10-05 Sun Microsystems, Inc. Automatic generation of fortran 90 interfaces to fortran 77 code
US6986130B1 (en) 2000-07-28 2006-01-10 Sun Microsystems, Inc. Methods and apparatus for compiling computer programs using partial function inlining
US6910107B1 (en) 2000-08-23 2005-06-21 Sun Microsystems, Inc. Method and apparatus for invalidation of data in computer systems
US6754889B1 (en) * 2000-10-04 2004-06-22 Compuware Corporation Java automation, testing, and analysis
US7406681B1 (en) 2000-10-12 2008-07-29 Sun Microsystems, Inc. Automatic conversion of source code from 32-bit to 64-bit
US7103877B1 (en) * 2000-11-01 2006-09-05 International Business Machines Corporation System and method for characterizing program behavior by sampling at selected program points
US6775820B2 (en) * 2000-11-29 2004-08-10 International Business Machines Corporation Web based application re-coded for OS/2 compatibility
US20040205705A1 (en) * 2000-12-14 2004-10-14 International Business Machines Corporation System support code
US7080373B2 (en) * 2001-03-07 2006-07-18 Freescale Semiconductor, Inc. Method and device for creating and using pre-internalized program files
US7543288B2 (en) 2001-03-27 2009-06-02 Sun Microsystems, Inc. Reduced instruction set for Java virtual machines
US6993751B2 (en) * 2001-05-14 2006-01-31 Microsoft Corporation Placing exception throwing instructions in compiled code
US6934946B2 (en) * 2001-05-15 2005-08-23 Sun Microsystems, Inc. Lightweight native method invocation interface for java computing environments
US7082597B2 (en) * 2001-06-20 2006-07-25 Sun Microsystems, Inc. Representation of objects in a Java programming environment
US7036120B2 (en) * 2001-07-31 2006-04-25 Sun Microsystems, Inc. Two tier clusters for representation of objects in Java programming environments
US7228533B2 (en) * 2001-08-24 2007-06-05 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for performing programming loops
US7058934B2 (en) * 2001-08-24 2006-06-06 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for instantiating Java objects
US6778194B2 (en) * 2001-10-09 2004-08-17 International Business Machines Corporation Method, apparatus and computer program product for eliminating unnecessary dialog box pop-ups
US20030093508A1 (en) * 2001-10-18 2003-05-15 Seiko Epson Corporation System for installing and launching network applications
GB0125176D0 (en) * 2001-10-19 2001-12-12 Koninkl Philips Electronics Nv A method of compiling bytecode to native code
JP2005506630A (ja) * 2001-10-25 2005-03-03 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 低オーバヘッドの例外チェック
US20030088860A1 (en) * 2001-11-02 2003-05-08 Fu-Hwa Wang Compiler annotation for binary translation tools
CA2376327C (en) * 2002-03-12 2009-04-28 Ibm Canada Limited-Ibm Canada Limitee Executing native code in place of non-native code
US7039911B2 (en) * 2002-05-17 2006-05-02 Naturalbridge, Inc. Hybrid threads for multiplexing virtual machine
US6912617B2 (en) * 2002-07-17 2005-06-28 Sun Microsystems, Inc. Altering virtual machine execution parameters at runtime
US7234080B2 (en) * 2002-10-18 2007-06-19 Computer Associates Think, Inc. Locating potential sources of memory leaks
US7086048B1 (en) 2002-11-04 2006-08-01 Savaje Technologies, Inc. Method and apparatus for combining operating system resource data and application program resource data in a shared object
US7082600B1 (en) * 2002-11-04 2006-07-25 Savaje Technologies, Inc. Method and apparatus for integrating a computer application programming language runtime environment with an operating system kernel
US7051324B2 (en) * 2003-01-16 2006-05-23 International Business Machines Corporation Externalized classloader information for application servers
US7360206B1 (en) * 2003-03-13 2008-04-15 Network Appliance, Inc. Method for an interpreter to control a native function call based on a signature of the native function
US20040221272A1 (en) * 2003-04-30 2004-11-04 Gansha Wu Apparatus and methods for desynchronizing object-oriented software applications in managed runtime environments
US7818729B1 (en) * 2003-09-15 2010-10-19 Thomas Plum Automated safe secure techniques for eliminating undefined behavior in computer software
CA2442800A1 (en) * 2003-09-26 2005-03-26 Ibm Canada Limited - Ibm Canada Limitee Transforming locks in software loops
US7313820B2 (en) * 2003-12-29 2007-12-25 International Business Machines Corporation Method and system for providing an authorization framework for applications
US7917898B2 (en) * 2004-02-02 2011-03-29 Intel Corporation Methods and apparatus to provide a modular native method invocation system
US7788653B2 (en) * 2004-03-02 2010-08-31 Intel Corporation Apparatus and methods for performing generational escape analysis in managed runtime environments
WO2006034023A2 (en) * 2004-09-16 2006-03-30 Ip Fabrics, Inc. Data plane technology including packet processing for network processors
US7685574B2 (en) * 2004-09-29 2010-03-23 Microsoft Corporation Constrained execution regions
KR100580071B1 (ko) 2004-10-05 2006-05-16 주식회사 팬택앤큐리텔 메모리 오류 검출방법
MY135555A (en) * 2004-12-14 2008-05-30 Axiomatic Solutions Sdn Bhd Compile time linking via hashing technique
US7581216B2 (en) * 2005-01-21 2009-08-25 International Business Machines Corporation Preserving platform independence with native accelerators for performance critical program objects
US7634768B2 (en) * 2005-02-17 2009-12-15 Intel Corporation Methods and apparatus to support mixed-mode execution within a single instruction set architecture process of a virtual machine
US7415701B2 (en) * 2005-02-17 2008-08-19 Intel Corporation Methods and apparatus to support mixed-mode execution within a single instruction set architecture process of a virtual machine
KR100703743B1 (ko) * 2005-02-18 2007-04-05 삼성전자주식회사 문자 코드 변환 장치 및 방법
US7490320B2 (en) * 2005-02-18 2009-02-10 International Business Machines Corporation Method and apparatus for transforming Java Native Interface function calls into simpler operations during just-in-time compilation
US7530059B2 (en) * 2005-02-18 2009-05-05 International Business Machines Corporation Method for inlining native functions into compiled java code
US7562349B2 (en) * 2005-04-25 2009-07-14 Sap Ag Version adaptation interface for integration of different virtual machines
US20060253271A1 (en) * 2005-04-26 2006-11-09 Newisys, Inc. Method for facilitating transformation of multi-threaded process-oriented object code to event-based object code
DE102005026384A1 (de) * 2005-06-08 2006-12-14 Giesecke & Devrient Gmbh Validierung eines zur nativen Ausführung durch einen Prozessor eines Datenträgers vorgesehenen Programms
US20070016893A1 (en) * 2005-07-14 2007-01-18 International Business Machines Corporation Tracking resource usage by applications
KR100790304B1 (ko) * 2006-11-10 2008-01-02 주식회사 대우일렉트로닉스 자바 가상 머신과 운영 체제의 스케줄링 실행방법
US8321849B2 (en) 2007-01-26 2012-11-27 Nvidia Corporation Virtual architecture and instruction set for parallel thread computing
US8918772B1 (en) * 2007-07-25 2014-12-23 Google Inc. Statically analyzing program correctness for a dynamic programming language
US20090070752A1 (en) * 2007-09-06 2009-03-12 International Business Machines Corporation Method and system for optimization of an application
US8185876B2 (en) * 2008-02-26 2012-05-22 International Business Machines Corporation Method and implementation for constructing of corrected java native code
US20090249311A1 (en) * 2008-03-31 2009-10-01 International Business Machines Corporation Sharing a native module of compiled code using an abstraction module of interpreted code in a virtual machine environment
US8266582B2 (en) * 2008-03-31 2012-09-11 Oracle America, Inc. Method for creating unified binary files
US9063765B2 (en) * 2008-04-28 2015-06-23 Kaazing Corporation System and methods for distributed execution of computer executable programs utilizing asymmetric translation
US9058483B2 (en) * 2008-05-08 2015-06-16 Google Inc. Method for validating an untrusted native code module
US8424082B2 (en) * 2008-05-08 2013-04-16 Google Inc. Safely executing an untrusted native code module on a computing device
US9594670B2 (en) * 2008-07-03 2017-03-14 International Business Machines Corporation Managing software dependencies during software testing and debugging
US9176754B2 (en) 2008-07-16 2015-11-03 Google Inc. Method and system for executing applications using native code modules
US20100088686A1 (en) * 2008-10-06 2010-04-08 Microsoft Corporation Programming language with extensible syntax
US8302076B2 (en) 2008-11-12 2012-10-30 Landmark Graphics Corporation Systems and methods for improved parallel ILU factorization in distributed sparse linear systems
DE102009006882A1 (de) * 2009-01-30 2010-08-05 Advanced Micro Devices, Inc., Sunnyvale Anwendung plattformabhängiger Routinen in virtuellen Maschinen durch Einbetten einer nativen Codierung in Klassendateien
CN101539868B (zh) * 2009-04-10 2010-12-08 北京大学 一种虚拟机管理器的客户操作系统内核代码动态替换方法
FR2953612A1 (fr) * 2009-12-03 2011-06-10 Flexycore Procede de mise au point d'application logicielle, systeme et produit programme d'ordinateur correspondant.
US8959496B2 (en) * 2010-04-21 2015-02-17 Microsoft Corporation Automatic parallelization in a tracing just-in-time compiler system
US8813051B2 (en) * 2011-04-14 2014-08-19 International Business Machines Corporation Running multiple copies of native code in a Java Virtual Machine
US9027075B2 (en) * 2011-09-29 2015-05-05 Oracle International Corporation Enforcing security rules at runtime
US9183113B2 (en) 2011-09-29 2015-11-10 Oracle International Corporation Debugging analysis in running multi-user systems
CN102455938B (zh) * 2011-11-16 2013-04-24 中标软件有限公司 一种在mips版本的linux操作系统上运行windows应用软件的方法
US9043586B2 (en) 2011-12-20 2015-05-26 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Memory training results corresponding to a plurality of memory modules
US8782620B2 (en) * 2012-06-12 2014-07-15 International Business Machines Corporation Processing reified generics in object-based programming environments
US9122794B2 (en) 2012-10-30 2015-09-01 Oracle International Corporation System and method for debugging domain specific languages
US9274819B2 (en) * 2013-03-19 2016-03-01 Hewlett Packard Enterprise Development Lp Performing garbage collection using a virtual thread in operating system without kernel thread support
US9146834B2 (en) 2013-08-22 2015-09-29 Oracle International Corporation Targeted cloud-based debugging
US9223550B1 (en) 2013-10-17 2015-12-29 Google Inc. Portable handling of primitives for concurrent execution
US9934128B2 (en) * 2013-11-14 2018-04-03 Red Hat, Inc. Dynamic per-method probing during runtime
US9542211B2 (en) 2014-03-26 2017-01-10 Intel Corporation Co-designed dynamic language accelerator for a processor
US9348625B2 (en) * 2014-05-23 2016-05-24 Google Inc. Application access to native and bundled libraries
CA3016684A1 (en) 2016-03-11 2017-09-14 Lzlabs Gmbh Load module compiler
US11200048B2 (en) * 2020-05-14 2021-12-14 International Business Machines Corporation Modification of codified infrastructure for orchestration in a multi-cloud environment

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5313614A (en) 1988-12-06 1994-05-17 At&T Bell Laboratories Method and apparatus for direct conversion of programs in object code form between different hardware architecture computer systems
US5428786A (en) * 1991-03-07 1995-06-27 Digital Equipment Corporation Branch resolution via backward symbolic execution
US5339422A (en) * 1991-03-07 1994-08-16 Digital Equipment Corporation System and method for jacketing cross-domain calls in a multi-code execution and debugging system within a multi-architecture environment
TW313282U (en) * 1991-03-07 1997-08-11 Digital Equipment Corp Apparatus for automatically interfacing call conventions between two dissimilar program units
US5561785A (en) * 1992-10-29 1996-10-01 International Business Machines Corporation System for allocating and returning storage and collecting garbage using subpool of available blocks
JPH06231003A (ja) * 1993-02-05 1994-08-19 Sharp Corp 実行可能ファイルのデバッガ
JPH06242942A (ja) * 1993-02-15 1994-09-02 Nec Corp ソースコードレベルデバッグ装置
CA2131406C (en) 1993-09-21 2002-11-12 David D'souza Preemptive multi-tasking with cooperative groups of tasks
JPH08161179A (ja) * 1994-12-09 1996-06-21 Hitachi Software Eng Co Ltd 一文実行方法
US6021272A (en) 1995-10-04 2000-02-01 Platinum Technology, Inc. Transforming and manipulating program object code
US5761477A (en) * 1995-12-04 1998-06-02 Microsoft Corporation Methods for safe and efficient implementations of virtual machines
JPH09171467A (ja) * 1995-12-21 1997-06-30 Nec Corp エミュレーション装置及びその方法
US5819067A (en) 1996-02-23 1998-10-06 Advanced Micro Devices, Inc. Computer system configured to translate a computer program into a second computer program prior to executing the computer program
US5805895A (en) * 1996-06-09 1998-09-08 Motorola, Inc. Method and apparatus for code translation optimization
US5946487A (en) * 1996-06-10 1999-08-31 Lsi Logic Corporation Object-oriented multi-media architecture
US5937187A (en) * 1996-07-01 1999-08-10 Sun Microsystems, Inc. Method and apparatus for execution and preemption control of computer process entities
US5923878A (en) * 1996-11-13 1999-07-13 Sun Microsystems, Inc. System, method and apparatus of directly executing an architecture-independent binary program
US5875336A (en) * 1997-03-31 1999-02-23 International Business Machines Corporation Method and system for translating a non-native bytecode to a set of codes native to a processor within a computer system
US5974256A (en) * 1997-09-29 1999-10-26 International Business Machines Corporation Method for translating graphical user interface (GUI) resource data into native java code

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009509245A (ja) * 2005-09-15 2009-03-05 ビーアイエイピー・インコーポレーテッド デジタル・テレビジョン用の独立型ミニアプリケーション・システムおよび方法
US8510779B2 (en) 2005-09-15 2013-08-13 Fourthwall Media, Inc. Self-contained mini-applications system and method for digital television
JP2008071339A (ja) * 2006-08-21 2008-03-27 Intel Corp メモリ参照フィルタリングを実行する技術
JP2016528638A (ja) * 2013-08-15 2016-09-15 オラクル・インターナショナル・コーポレイション ランタイムメモリスロットリング

Also Published As

Publication number Publication date
KR20010072477A (ko) 2001-07-31
AU5347499A (en) 2000-03-06
DE69922015T2 (de) 2005-12-01
ATE282854T1 (de) 2004-12-15
WO2000010081A2 (en) 2000-02-24
DE69922015D1 (de) 2004-12-23
EP1104564B1 (en) 2004-11-17
EP1104564A2 (en) 2001-06-06
JP4880121B2 (ja) 2012-02-22
US6282702B1 (en) 2001-08-28
WO2000010081A3 (en) 2000-06-15

Similar Documents

Publication Publication Date Title
JP4880121B2 (ja) バーチャル・マシン環境でネイティブ・コードを変換し、実行する方法および装置
US10367822B2 (en) Restrictive access control for modular reflection
JP4841787B2 (ja) 共用ライブラリファイル内のプログラムファイルへのアクセスを制限するための方法、システムおよび記憶媒体
US6772408B1 (en) Event model using fixed-format text strings to express event actions
US6327701B2 (en) Method and apparatus for finding bugs related to garbage collection in a virtual machine
US6557023B1 (en) Method and apparatus for avoiding array class creation in virtual machines
US10684827B2 (en) Generating dynamic modular proxies
US6877163B1 (en) Method and system for dynamic proxy classes
US7114152B2 (en) Method, apparatus, and program to determine the mutability of an object at loading time
JP2001518658A (ja) プラットフォームとアプリケーションとの間の互換性を評価する方法および装置
US20040268301A1 (en) Adding new compiler methods to an integrated development environment
US11922238B2 (en) Accessing a parametric field within a specialized context
US7555746B2 (en) System and method for registering native libraries with non-native enterprise program code
US6752836B1 (en) Method and apparatus for high-concurrency client locking with java in a data processing system
WO2001009715A2 (en) A single-compiler architecture
Eaddy C# versus Java
US11568047B2 (en) Distinguished nest-based access control
US11243876B2 (en) Techniques for accessing off-heap memory

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060810

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060810

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20061110

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20091027

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20100127

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20100203

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100226

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20101116

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110216

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20110224

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110309

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110802

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20111007

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20111013

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111025

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20111122

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20111201

R150 Certificate of patent or registration of utility model

Ref document number: 4880121

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20141209

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term