JP3889227B2 - プログラム実行装置、プログラム実行方法、記録媒体、及び制御プログラム - Google Patents
プログラム実行装置、プログラム実行方法、記録媒体、及び制御プログラム Download PDFInfo
- Publication number
- JP3889227B2 JP3889227B2 JP2001010875A JP2001010875A JP3889227B2 JP 3889227 B2 JP3889227 B2 JP 3889227B2 JP 2001010875 A JP2001010875 A JP 2001010875A JP 2001010875 A JP2001010875 A JP 2001010875A JP 3889227 B2 JP3889227 B2 JP 3889227B2
- Authority
- JP
- Japan
- Prior art keywords
- program
- machine language
- execution
- translation
- stored
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Description
【発明の属する技術分野】
本発明は、高水準のプログラミング言語で記述されているプログラムを演算処理システムで実行させる技術に関し、特に、ジャスト・イン・タイム・コンパイラ方式により、原始プログラムを特定の演算処理システムのプラットホームで直接実行可能な機械語に翻訳して該機械語を実行させる技術に関する。
【0002】
【従来の技術】
異なる演算処理システムのプラットホーム上で同一のプログラムを動作させようとする多くの試みが以前から行なわれている。プログラミング言語Java(Javaは、サン・マイクロシステムズ・インコーポレイテッドの登録商標)はその回答のひとつである。Javaはプラットホーム独立を実現し、異種のプラットホーム間での可搬性に優れている。
【0003】
Javaで記述されたプログラムのソースコードは、構文解析などの処理が施され、バイトコードと呼ばれるバイナリファイルに変換されて配布されるのが一般的である。Javaバイトコードは演算処理システムのプラットホームに独立である汎用的な命令コードであり、Java VM(バーチャル・マシン)と呼ばれるJavaの実行系で解釈され実行されるコードである。Java VMに相当する環境を各々の演算処理システムが備えることによって、異なる演算処理システム上で同一のJavaバイトコードの実行が可能となる。
【0004】
以下、Javaバイトコードを演算処理システム上で実行させる技術について説明する。
Javaインタプリタは、Javaバイトコードを命令毎に逐次解釈(インタプリト)し、演算処理システムにその命令に対応する処理を行なわせるものである。Javaインタプリタは、Javaバイトコードで記述されたプログラムをそのまま解釈して処理できることが大きな利点ではあるが、命令解釈のための時間を要するために処理速度が遅いという短所がある。
【0005】
Javaバイトコードで記述されたプログラムの実行速度を向上させる手法として、処理させる演算処理システムで直接実行可能な機械語であるネイティブコードにJavaバイトコードを予め翻訳(コンパイル)しておく手法があり、このためのツールをネイティブ・コンパイラという。Javaバイトコードのネイティブコード化によりプログラムの実行速度は格段に向上するが、Javaの大きな利点である異種のプラットホーム間での可搬性が損なわれるという問題があり、更に、プログラムの変更によりJavaバイトコードが更新される度に、演算処理システムのオペレータがネイティブコードへの翻訳作業をシステムに行なわせるように指示しなければならない煩わしさもある。
【0006】
Javaの有する利点である異種のプラットホーム間での可搬性を維持しつつ、Javaインタプリタの抱える処理速度の問題を改善するためにジャスト・イン・タイム・コンパイラ(以下、「JITコンパイラ」という)が提案されている。
【0007】
JITコンパイラは、Javaバイトコードを実行する際に、そのバイトコードで用いられている関数 (Javaにおけるメソッド)を単位としてネイティブコードに翻訳しながら演算処理システムに逐次実行させる。ここで、翻訳されたネイティブコードをメインメモリに保持しておくようにする。Javaバイトコードの翻訳を進めていくうちに、既にネイティブコードに翻訳されている関数が出現したときは、その関数についての再度の翻訳は行なわずに、メインメモリに保持されているネイティブコードをそのまま演算処理システムに直接実行させるようにして翻訳処理に要する処理時間を削減する。一般的にプログラム全体の実行速度を低下させる大きな影響を与えている関数は繰り返し呼び出されていることが多々あるので、この手法を用いることによりJavaバイトコードの実行速度を向上させることができる。
【0008】
また、JITコンパイラは、インタプリタによる解釈処理では困難なJavaバイトコードで記述されている命令の最適化も行なうので、この最適化によっても処理速度が高速化される。しかも、ネイティブ・コンパイラでは必要となる、演算処理システムに対するオペレータによる煩雑な操作はJITコンパイラでは不要である。
【0009】
なお、JITコンパイラは、Javaバイトコードの実行に使用するものが特に広く普及しているが、他のプログラミング言語で記述されたプログラムや、プログラムに対して構文解析や最適化の処理が施されて得られる中間言語で記述されているプログラム(本明細書では、これらのプログラムを総称して「原始プログラム」と称することとする)を、特定のプラットホームが直接解釈できるネイティブコードに翻訳しながらそのプラットホーム上で実行させるように構成することも可能である。
【0010】
【発明が解決しようとする課題】
前述したように、JITコンパイラは、Javaの有する大きな利点である異種のプラットホーム間での可搬性を維持しつつ実行速度の問題を改善することが可能であり、更にオペレータによる操作作業の負担がネイティブ・コンパイラよりも少ない利点を有している。しかしながら、原始プログラムの実行開始時にネイティブコードへの翻訳処理が必ず行なわれるため、JITコンパイラを用いて行なう原始プログラムの実行では、その原始プログラムに記述されている処理が実際に開始されるまでにある程度のタイムラグが生じてしまう問題を有していた。
【0011】
以上の問題を鑑み、JITコンパイラを用いて原始プログラムを実行させるときの実行開始時の性能を向上させることが本発明が解決しようとする課題である。
【0012】
【課題を解決するための手段】
図1は本発明の基本構成図である。本発明に係る装置であるプログラム実行装置10は、機械語を実行する実行手段16を有し、ジャスト・イン・タイム・コンパイラ方式により、原始プログラム1を実行手段16で直接実行可能な機械語に翻訳して実行する装置を前提とする。
【0013】
本発明の第一の態様の装置では、プログラム実行装置10に、原始プログラム1に記述される関数の翻訳であって実行手段16で実行可能な機械語を該関数ごとに記憶する、電源電圧が消失しても記憶内容が保持される記憶手段11と、原始プログラム1を実行手段16で実行可能な機械語に翻訳する翻訳手段12と、翻訳手段12により翻訳された機械語を記憶手段11に記憶させる記憶制御手段13と、原始プログラム1で用いられている関数の翻訳である機械語が記憶手段11に記憶されているか否かの判定を行なう判定手段14と、判定手段14による判定結果に応じて、翻訳手段12の翻訳する機械語、または記憶手段11に記憶されている機械語、のどちらかを実行手段16に直接実行させる実行制御手段15とを有するように構成することによって前述した課題を解決する。
【0014】
この構成においては、記憶手段11としては、例えばハードディスク装置やフラッシュEEPROM(一括消去型電気的消去及び書き込み可能読み出し専用半導体メモリ)などを用いることができる。
【0015】
上記の構成では、記憶手段11が原始プログラム1に記述される関数の翻訳である機械語を記憶する。原始プログラム1で用いられている関数の翻訳である機械語が記憶手段11に記憶されていると判定手段14が判定すれば、実行制御手段15は翻訳手段12によるその関数の翻訳を待たずに、記憶手段11に記憶されているその関数の機械語を直接実行させるように実行手段16を制御するので、プログラム実行装置10は前述したJITコンパイラに相当する動作が行なわれる。従って、上記の構成によれば、JITコンパイラの有する前述した利点をそのまま有している。
【0016】
しかも、上記の構成における記憶手段11は、電源電圧が消失してもその記憶内容が保持される。従って、例えばオペレータが一日の仕事を終えてプログラム実行装置10の電源を切り、その翌日に仕事を再開するような場合、前日までに同一の原始プログラム1を一度でも実行していれば、記憶手段11に記憶されている、原始プログラム1に記述されている関数の翻訳である機械語をその日の最初の実行から利用することができるので、プログラム実行装置10はプログラムの翻訳処理に起因する実行開始時のタイムラグを生じさせずに原始プログラム1を実行させることができる。
【0017】
なお、上述した構成において、記憶手段11には、原始プログラム1で用いられることのあり得る関数の翻訳である機械語が予め記憶されているように構成しても良い。この構成では、プログラム実行装置10上での原始プログラム1の初めての実行の際に原始プログラム1に記述されている関数の翻訳である機械語が既に記憶されている場合があり、このような場合には原始プログラム1に記述されている関数の翻訳である機械語を記憶手段11から得ることができるので、プログラムの翻訳処理に起因する実行開始時のタイムラグを短縮することができる。
【0018】
また、上述した構成において、記憶手段11の記憶内容を複写して記憶する半導体メモリを更に有し、実行制御手段15は、記憶手段11に記憶されている機械語を実行手段16に実行させる代わりに、その半導体メモリに記憶されている、記憶手段11に記憶されている記憶内容の複写である機械語を実行手段16に実行させるように構成しても良い。例えば記憶手段11としてハードディスク装置を用いている場合などでは、ハードディスク装置から機械語を読み出すよりも、そのハードディスク装置と同一の記憶内容が複写されている半導体メモリから機械語を読み出す方が、機械語の検索・読み出しが高速に行なえるので、プログラム装置10による原始プログラム1の翻訳・実行の処理時間を更に短縮することができる。
【0019】
また、本発明の第二の態様の装置では、プログラム実行装置10に、原始プログラム1に記述される関数の翻訳であって実行手段16で実行可能な機械語を該関数ごとに記憶し、原始プログラム1の実行終了後も記憶内容を保持する記憶手段11と、原始プログラム1を実行手段16で実行可能な機械語に翻訳する翻訳手段12と、翻訳手段12により翻訳された機械語を、翻訳手段12により翻訳される原始プログラム1が更新された日時に対応付けて、記憶手段11に記憶させる記憶制御手段13と、原始プログラム1の更新された日時と、記憶手段11に記憶されている前記機械語に対応付けられている更新日時とが一致するか否かを判定する判定手段14と、判定手段14による判定結果に応じて、翻訳手段12の翻訳する機械語、または記憶手段11に記憶されている機械語、のどちらかを実行手段16に直接実行させる実行制御手段15とを有するように構成することによって前述した課題を解決する。
【0020】
上記の構成は、原始プログラム1が格納されているプログラムファイルを読み込む読込手段を更に有し、記憶制御手段13は、原始プログラム1が格納されているプログラムファイルに示されている該プログラムファイルの更新日時を前記機械語に対応付ける原始プログラム1の更新された日時とみなして、記憶手段11に該機械語を記憶させ、判定手段14は、そのプログラムファイルに示されている該プログラムファイルの更新日時と、前記機械語に対応させて記憶手段11に記憶されている更新日時とが一致するか否かを判定するように構成してもよい。
【0021】
上記の構成では、前述した本発明の第一の態様の装置と同様に、JITコンパイラの有する利点をそのまま有している。
更に、上記の構成では、原始プログラム1の実行終了後も記憶内容を保持しているので、同一の原始プログラム1を再度実行させる場合には、実行制御手段15は翻訳手段12による原始プログラム1の翻訳を待たずに、記憶手段11に記憶されているその関数の機械語を実行手段16に直接実行させることにより、プログラムの翻訳処理に起因する実行開始時のタイムラグを生じさせずに原始プログラム1を実行させることができる。ただし、この場合、後に実行される原始プログラム1と先に実行されたものとが、原始プログラムのバージョンアップによる修正等により、同一でないことがあり得る。そこで、記憶制御手段13が、翻訳手段12により翻訳された機械語と、翻訳手段12により翻訳される原始プログラム1が更新された日時とを対応付けて記憶手段11に記憶させ、判定手段14が、原始プログラム1の更新された日時と、機械語に対応付けて記憶手段11に記憶されている更新日時とが一致するか否かを判定する。そしてこの判定の結果、両者が一致しないのであれば、原始プログラム1で用いられている関数の翻訳である機械語が記憶手段11に記憶されていても、実行制御手段15は翻訳手段12により新たに翻訳された機械語を実行手段16に実行させる。こうすることによって、原始プログラム1に変更が加えられても、その変更に応じて正しく原始プログラム1を実行させることができる。
【0022】
なお、上記の構成においては、記憶手段11として、ハードディスク装置やフラッシュEEPROMなどの、電源電圧が消失しても記憶内容が保持されるものに限らず、他の読み書き可能な記憶媒体を使用することもできる。
【0023】
なお、上述した本発明の第一または第二の態様の装置において、原始プログラム1は、Javaのバイト・コードで記述されていてもよい。この場合、原始プログラム1に記述される関数とはJavaにおけるメソッドに相当する。
【0024】
また、本発明に係るプログラム実行方法は、ジャスト・イン・タイム・コンパイラ方式により、原始プログラムを特定の演算処理システムのプラットホームで直接実行可能な機械語に翻訳して該機械語を実行させる方法を前提とする。
【0025】
そして、本発明の第一の態様のプログラム実行方法では、前記原始プログラムの翻訳である前記機械語を、該原始プログラムに記述されている関数ごとに、電源電圧が消失しても記憶内容が保持される記憶部に記憶させ、前記原始プログラムに記述されている関数の翻訳である前記機械語が前記記憶部に記憶されているか否かの判定を行ない、前記判定結果に応じて、前記原始プログラムを翻訳して得る機械語、または前記記憶部に記憶されている機械語、のどちらかを特定の演算処理システムのプラットホームで直接実行させることによって前述した課題を解決する。そして、このプログラム実行方法によっても前述した本発明の第一の態様の装置と同様な作用・効果を奏する。
【0026】
また、本発明の第二の態様のプログラム実行方法では、前記原始プログラムの翻訳である前記機械語を、該原始プログラムに記述されている関数ごとに、該機械語の翻訳前の原始プログラムが更新された日時に対応付けて記憶し、前記原始プログラムの更新された日時と、記憶されている前記機械語に対応付けられている更新日時とが一致するか否かの判定を行ない、前記判定結果に応じて、前記原始プログラムを翻訳して得る機械語、または記憶されている機械語、のどちらかを特定の演算処理システムのプラットホームで直接実行させることによって前述した課題を解決する。そして、このプログラム実行方法によっても前述した本発明の第二の態様の装置と同様な作用・効果を奏する。
【0027】
なお、上述した本発明の各構成により行なわれる機能と同様の制御をコンピュータに行なわせる制御プログラムをコンピュータに実行させることによって、あるいは、その制御プログラムを記録したコンピュータ読み取り可能な記録媒体から、その制御プログラムをコンピュータに読み取らせて実行させることによっても、前述した課題を解決することができ、この構成によっても前述したプログラム実行装置と同様な作用・効果を奏する。
【0028】
【発明の実施の形態】
以下、本発明の実施の形態を図面に基づいて説明する。なお、ここでは、Javaのバイトコードを翻訳して実行するプログラム実行装置において本発明を実施する例について説明する。
【0029】
図2は本発明を実施するプログラム実行装置の全体構成を示す図である。同図に示すように、このプログラム実行装置(以下、「本装置」という)20は、入力部21、CPU22、出力部23、I/F部24、半導体メモリ25、ハードディスク装置26を有し、バス27を介して相互に接続されている。
【0030】
入力部21は、キーボード装置や、マウス等のポインティングデバイスなどを有し、本装置のオペレータからの各種指示の入力を取得する。また、フロッピーディスクや光磁気ディスク、磁気テープなどの記録媒体からデータを読み出すためのデータ読み出し装置を有するようにしてもよい。
【0031】
CPU22は半導体メモリ25に記憶された制御プログラムに従って本装置20全体の動作を制御する中央演算処理装置であり、機械語を直接実行する。
出力部23は、ディスプレイ装置やプリンタなどを有し、本装置20で行なった処理の結果等をオペレータに提示するものである。
【0032】
I/F部24は、本装置20を他の装置やネットワークに接続するためのインターフェースのための処理を司るものである。
半導体メモリ25は、本装置20全体の制御処理をCPU22に行なわせるための制御プログラムを予め記憶しておいたり、ハードディスク装置26の記憶内容を複写して記憶したり、あるいはCPU22により実行される処理のためのワークエリアとして用いられるものであり、ROM(リード・オンリ・メモリ)25−1及びRAM(ランダム・アクセス・メモリ)25−2を有している。
【0033】
ハードディスク装置26は、本装置20へ供給される電源電圧が消失しても記憶内容が保持されるデータ記憶装置である。
次に図3について説明する。図3は、本装置20における翻訳・実行処理の全体の流れを図で示したものである。
【0034】
プログラムソースモジュール41は、本装置20に翻訳・実行を行なわせるソフトウェアモジュールであり、本実施の形態ではJavaのバイトコードによって記述されている。プログラムソースモジュール41は、前述した記録媒体に格納されているプログラムファイルとして提供されたものを入力部21のデータ読み取り装置で読み取ることにより、あるいは、他の装置やネットワークからプログラムファイルとして送付されたものをI/F部24が受け取ることにより、本装置20に取り込まれる。
【0035】
本装置20に入力されたプログラムソースモジュール41は、JITコンパイラ30により翻訳・実行される。JITコンパイラ30は、CPU22が本装置20全体の制御プログラムを実行することにより実現される。
【0036】
JITコンパイラ30によって行なわれる処理の内容を機能別に分けると、プログラムロード部31、高速化判定部32、コンパイル(翻訳)部33、ファイルロード部34、プログラム実行部35の各機能ブロックに大別される。
【0037】
プログラムロード部31は、本装置20に取り込まれたプログラムファイルからプログラムソースモジュール41を取り出して、RAM25−2におけるCPU22がワークメモリとして使用している領域(ワークエリア)に格納する。
【0038】
高速化判定部32は、プログラムソースモジュール41の構文分析を行ない、そこに記述されているメソッドの定義の翻訳に相当するネイティブコード(コンパイル済み格納モジュール43)が、ハードディスク装置26に記憶されているか否かを、後述する管理簿42を参照することにより判定する。本実施の形態では、管理簿42はハードディスク装置26に記憶されている。
【0039】
コンパイル部33は、上述したメソッドの定義の翻訳に相当するコンパイル済み格納モジュール43がハードディスク装置26に記憶されていないと高速化判定部32が判定したときに、そのメソッドの定義の翻訳を行ない、その結果得られたCPU22で直接実行可能なネイティブコードを、RAM25−2における前述したワークエリアにコンパイル済み実行モジュール44として格納すると共に、コンパイル済み格納モジュール43としてハードディスク装置26に記憶させる。更に、管理簿42におけるその記憶させたコンパイル済み格納モジュール43についての管理情報を更新する。
【0040】
ファイルロード部34は、上述したメソッドの定義の翻訳に相当するコンパイル済み格納モジュール43がハードディスク装置26に記憶されていると高速化判定部32が判定したときに、そのコンパイル済み格納モジュール43をハードディスク装置26からロードし(読み出し)、RAM25−2のワークエリアにコンパイル済み実行モジュール44として格納する。
【0041】
プログラム実行部35は、コンパイル部33もしくはファイルロード部34によってRAM25−2のワークエリアに格納されたコンパイル済み実行モジュール44をCPU22で直接実行する。
【0042】
JITコンパイラ30は、これらの高速化判定部32、コンパイル(翻訳)部33、ファイルロード部34、プログラム実行部35の各機能ブロックで示される処理を繰り返し実行することによって、プログラムソースモジュール41を実行させる。
【0043】
次に管理簿42について説明する。図4は管理簿42の一例を表として示す図である。管理簿42は、ハードディスク装置26に記憶されているコンパイル済み格納モジュール43についての管理情報が記録されるものである。
【0044】
図4に示す表において、左側の欄には、ハードディスク装置26に記憶させたコンパイル済み格納モジュール43に対応する、そのコンパイル済み格納モジュール43が翻訳である翻訳前のメソッド定義のメソッド名が記録される。そして、同図に示す表の右側の欄には、左側の欄のメソッド名に対応するメソッド定義が記述されていたプログラムソースモジュール41の更新日時が記録される。この更新日時には、本実施の形態では、プログラムソースモジュール41が格納されていたプログラムファイルの管理情報として示されている更新日時を用いる。高速化判定部32では、プログラムロード部31がRAM25−2のワークエリアに格納したプログラムソースモジュール41を分析する。そして、そこに記述されているメソッド定義のメソッド名が管理簿42に記録されており、且つそのプログラムソースモジュール41の更新日時が管理簿42のそのメソッド名に対応する更新日時と一致するか否かを判定する。この判定結果が真であれば、そのメソッドの定義の翻訳に相当するコンパイル済み格納モジュール43がハードディスク装置26に記憶されていると判定する。
【0045】
次に図5について説明する。図5は、ROM25−1に格納されている、本装置20全体の制御プログラムをCPU22が実行することにより行なわれる制御処理のうち、本発明に関係する、プログラムソースモジュール41の翻訳・実行を行なう処理であるJITコンパイル処理の第一の例の処理内容をフローチャートで示した図である。以下、同図に沿ってCPU22が行なうJITコンパイル処理について説明する。
【0046】
まず、CPU22は本装置20に取り込まれたプログラムファイルからプログラムソースモジュール41を取り出し、RAM25−2のワークエリアに格納する(S101)。この処理は図3におけるプログラムロード部31の機能に相当する。
【0047】
続いて、CPU22は、RAM25−2のワークエリアに格納されているプログラムソースモジュール41の構文分析を行ない、そこに記述されているメソッドの定義をひとつ抽出する(S102)。ここで、CPU22は管理簿42を参照し(S103)、抽出されたメソッド定義のメソッド名が管理簿42の記録内容に含まれているか否かを判定する(S104)。この判定処理の結果がYesならばS105に進み、NoならばS107に進む。
【0048】
抽出されたメソッド定義のメソッド名が管理簿42の記録内容に含まれているのであれば、CPU22は、プログラムソースモジュール41が格納されていたプログラムファイルの管理情報を調べ、プログラムソースモジュール41の更新日時を取得する(S105)。そして、このプログラムソースモジュール41の更新日時と、抽出されたメソッド定義のメソッド名の記録に対応付けられて管理簿42に記録されている更新日時とが一致するか否かを判定する(S106)。この判定処理の結果がYesならばS111に進み、NoならばS107に進む。
【0049】
以上のS102からS106にかけて示されている処理は図3における高速化判定部32の機能に相当する。
前述したS104またはS106のどちらかの判定処理でその結果がNoであったときには、CPU22は、S102に示した処理で抽出されたメソッド定義のコンパイルを実行し(S107)、その結果得られた、CPU22で直接実行可能なネイティブコードをRAM25−2のワークエリアにコンパイル済み実行モジュール44として格納し(S108)、更にそのネイティブコードをハードディスク装置26にコンパイル済み格納モジュール43として記憶させる(S109)。このネイティブコードの記憶は、プログラムソースモジュール41の翻訳・実行が終了し、CPU22がこの図5に示したJITコンパイル処理の実行を一旦終了してもハードディスク装置26に保持されている。
【0050】
その後、CPU22は管理簿42を更新し、前述したS102でコンパイルしたメソッド定義のメソッド名と、そのメソッド定義が記述されていたプログラムソースモジュール41を格納していたプログラムファイルの管理情報に示されている更新日時とを対応付けて記録し(S110)、その後はS112に進む。
【0051】
これらのS107からS110にかけて示されている処理は図3におけるコンパイル部33の機能に相当する。
一方、前述したS106の判定処理でその結果がYesであったときには、CPU22は、S102に示した処理で抽出されたメソッド定義の翻訳であるネイティブコードをハードディスク装置26から読み出し、読み出したそのネイティブコードをRAM25−2のワークエリアにコンパイル済み実行モジュール44として格納する(S111)。この処理は図3におけるファイルロード部34の機能に相当する。
【0052】
その後、CPU22はRAM25−2のワークエリアにコンパイル済み実行モジュール44として格納されているネイティブコードを直接実行する(S112)。この処理は図3におけるプログラム実行部35の機能に相当する。
【0053】
コンパイル済み実行モジュール44を実行した後には、CPU22は、RAM25−2のワークエリアに格納されているプログラムソースモジュール41の実行処理を終了したか否かを判定する(S113)。この判定処理の結果がYesならば今回のJITコンパイル処理を終了する。一方、この判定処理の結果がNoならばS102へ戻り、プログラムソースモジュール41に次の実行順として記述されているメソッド定義について上述した処理を繰り返す。
【0054】
以上までの処理が図5に示されているJITコンパイル処理である。
次に、本発明を実施するプログラム実行装置の第二の例について説明する。
この第二の例では、図2におけるハードディスク装置26に、プログラムソースモジュール41で記述されることがあり得るメソッド定義の翻訳であるネイティブコードを予め格納しておくようにするものである。こうすることにより、そのプログラムソースモジュール41のプログラム実行装置10上での初めての実行の際でも、プログラムソースモジュール41に記述されているメソッド定義の翻訳であるネイティブコードをハードディスク装置26から得ることのできる場合があるので、メソッドの翻訳処理に起因する実行開始時のタイムラグを短縮することができる。
【0055】
本発明を実施するプログラム実行装置の第二の例の全体構成は図2に示したものと同様であるが、図2に示す構成要素のうち、ハードディスク装置26の記憶内容が前述した第一の例と異なっている。図6は、本発明を実施するプログラム実行装置の第二の例におけるハードディスク装置の記憶内容を示す図であり、ハードディスク装置26には、第一の例と同様のコンパイル済み格納モジュール43が記憶されるのに加え、プログラムソースモジュール41で記述されることがあり得るメソッド定義の翻訳であるコンパイル済み標準モジュール51が予め記憶されている。このような、その翻訳であるネイティブコードがコンパイル済み標準モジュール51としてハードディスク装置26に記憶されるメソッド定義としては、例えば、Javaの標準のクラスライブラリであるjavaパッケージに含まれるクラスに属するメソッド定義などの、任意のJava実行系で使用できることが保証されているメソッド定義が適用可能である。
【0056】
次に図7について説明する。図7は本発明を実施するプログラム実行装置の第二の例における管理簿42の例を表で示したものであり、ハードディスク装置26の記憶内容が図6に示した内容である場合に対応するものである。図7を、前述した本発明の第一の実施例における管理簿42の記録内容を示した図4と比較すると分かるように、図7においては、コンパイル済み格納モジュール43についての管理情報が管理簿42に記録される他に、コンパイル済み標準モジュール51についての管理情報が管理簿に予め記録されている。コンパイル済み標準モジュール51についての管理情報としては、そのコンパイル済み標準モジュール51が翻訳である翻訳前のメソッド定義のメソッド名が管理簿42に記録されている。
【0057】
次に、本発明を実施するプログラム実行装置の第二の例におけるCPU22により実行されるJITコンパイル処理の処理内容について、図8に示すフローチャートを参照しながら説明する。
【0058】
まず、図8におけるS201からS204にかけて示されている処理は、図5にフローチャートで示したJITコンパイル処理の第一の例におけるS101からS104にかけて示した処理と全く同一のものであり、その説明は省略する。
【0059】
S205において、CPU22は、S202で抽出されたメソッド定義のメソッド名が管理簿42のコンパイル済み標準モジュール51についての管理情報として記録されているか否かを判定する。この判定処理の結果がYesならばS212に進み、NoならばS206に進む。
【0060】
図8におけるS205以降の、S206からS214にかけて示されている処理も、図5にフローチャートで示したJITコンパイル処理の第一の例におけるS105からS113にかけて示した処理と全く同一のものである。
【0061】
次に、本発明を実施するプログラム実行装置の第三の例について説明する。
この第三の例では、プログラム実行装置に電源を投入して起動させたときに、ハードディスク装置26の記憶内容をRAM25−2に複写して格納する。そして、CPU22によって行なわれるJITコンパイル処理では、ハードディスク装置26の記憶内容に基づいて翻訳・実行の処理を進めるのではなく、ハードディスク装置26の記憶内容の複写であるRAM25−2の格納データに従ってその処理を進める。一般的に、記憶内容の読み出しは半導体メモリからの方がハードディスク装置よりも高速に行なえるので、こうすることにより、プログラム装置10によるプログラムソースモジュール41の翻訳・実行の処理時間を更に短縮することができる。
【0062】
本発明を実施するプログラム実行装置の第三の例の全体構成は図2に第一の例として示したものと同様であるが、図9に示すように、RAM25−2の記憶領域に、CPU22による処理の実行のために一時的に使用されるワークエリア61の領域の他に、ハードディスク装置26の記憶内容が複写されて格納されるキャッシュエリア62の領域を設けるようにする。そして、このキャッシュエリア62の領域は、CPU22が後述するJITコンパイル処理の実行を終了してもその記憶内容をクリアせずに保持するようにし、次にJITコンパイル処理を改めて実行しても、その処理においてその記憶内容が利用できるようにする。
【0063】
また、管理簿42の記録内容も図4に示したものと同様のものでよい。但し、前述した第一の例では管理簿42はハードディスク装置26に記憶されていたが、この第三の例では、ハードディスク装置26の管理簿42についての記録内容もRAM25−2に複写され、CPU22はRAM25−2上の管理簿42を参照して処理を行なうものとする。
【0064】
本発明を実施するプログラム実行装置の第三の例における、装置全体の制御処理の処理内容を図10にフローチャートで示す。この処理は、本装置20に電源を投入するとその直後にCPU22により直ちに実行される処理である。
【0065】
本装置に電源が投入されると、まず、CPU22は初期化処理を実行する(S301)。初期化処理はCPU22自身の有する各種のレジスタを初期化したり、RAM25−2の初期化などを行なう処理である。
【0066】
続いて、CPU22はハードディスク装置26の記憶内容をRAM25−2のキャッシュエリア62に複写する(S302)。
その後、CPU22は、本装置20の入力部21、出力部23、I/F部24の制御等を含む各種の制御処理を実行し(S303)、その後にJITコンパイル処理を実行する(S304)。この処理を終えた後にはS303へ戻り、以降の処理が繰り返される。
【0067】
次に図11について説明する。図11は、図10にS304として示されているJITコンパイル処理の処理内容を示すフローチャートである。
まず、図11におけるS311からS319にかけて示されている処理は、図5にフローチャートで示したJITコンパイル処理の第一の例におけるS101からS109にかけて示した処理と同様のものである。但し、S313において、CPU22は、RAM25−2のキャッシュエリア62に格納されている、ハードディスク装置26の複写である管理簿42を参照する。
【0068】
S320において、S317でのコンパイルにより得られたネイティブコードをRAM25−2のキャッシュエリア62にも格納し、このネイティブコードをS319において記憶させたハードディスク装置26の記憶内容とキャッシュエリア62の記憶内容とを一致させる。
【0069】
その後、CPU22は、ハードディスク装置26及びキャッシュエリア62双方の管理簿42を同様に更新し、S312でコンパイルしたメソッド定義のメソッド名と、そのメソッド定義が記述されていたプログラムソースモジュール41を格納していたプログラムファイルの管理情報に示されている更新日時とを対応付けて記録し(S321)、その後はS323に進む。
【0070】
一方、S316の判定処理でその結果がYesであったときには、CPU22は、S312に示した処理で抽出されたメソッド定義の翻訳であるネイティブコードをRAM25−2のキャッシュエリア62から読み出し、読み出したそのネイティブコードをRAM25−2のワークエリアにコンパイル済み実行モジュール44として格納する(S322)。
【0071】
図11におけるS322以降の、S323及びS324に示されている処理は、図5にフローチャートで示したJITコンパイル処理の第一の例におけるS112及びS113に示した処理と全く同一のものであり、説明は省略する。
【0072】
なお、前述した第二の例、すなわちハードディスク装置26に、プログラムソースモジュール41で記述されることがあり得るメソッド定義の翻訳であるネイティブコードを予め格納しておくようにしたプログラム実行装置で、この第三の例のように、ハードディスク装置26の記憶内容をRAM25−2に複写してJITコンパイル処理を実行することも可能である。
【0073】
なお、上述した本発明の各実施形態において説明したJITコンパイル処理を汎用的なコンピュータで実施させることも可能である。そのためには、本発明の各実施形態において説明した、図5、図8、あるいは図11のJITコンパイル処理に相当する処理をコンピュータに行なわせる制御プログラムをそのコンピュータで読み取り可能な記録媒体(記憶媒体)に予め記憶させておき、その記録媒体から読み出したその制御プログラムを読み出させてそのコンピュータのメインメモリに一旦格納させた後に、そのコンピュータの有する中央処理装置に格納されたこのプログラムを読み出させて実行させるように構成すればよい。
【0074】
上述した制御プログラムを格納し、且つそれをコンピュータで読み取ることの可能な記録媒体の例を図12に示す。このような記録媒体としては、例えば、コンピュータ71の本体に内蔵若しくは外付けされる半導体メモリやハードディスク装置などのメモリ72、CD−ROM、DVD−ROM、MO(光磁気ディスク)、フロッピーディスクなどといった可搬型記憶媒体73、あるいはコンピュータ71と回線74で接続されていてコンピュータ71がプログラムをダウンロードすることの可能なプログラムサーバ75の記憶装置76などがあるが、これらのいずれであってもよい。
【0075】
【発明の効果】
以上詳細に説明したように、本発明は、ジャスト・イン・タイム・コンパイラ方式により、原始プログラムを特定の演算処理システムのプラットホームで直接実行可能な機械語に翻訳して該機械語を実行させるときに、前記原始プログラムの翻訳である前記機械語を、該原始プログラムに記述されている関数ごとに、電源電圧が消失しても記憶内容が保持される記憶部に記憶させ、前記原始プログラムに記述されている関数の翻訳である前記機械語が前記記憶部に記憶されているか否かの判定を行ない、前記判定結果に応じて、前記原始プログラムを翻訳して得る機械語、または前記記憶部に記憶されている機械語、のどちらかを特定の演算処理システムのプラットホームで直接実行させるように構成する。そして、この構成により、電源を切った後に同一の原始プログラムを再度実行させるような場合には、プログラムの翻訳処理に起因する実行開始時のタイムラグを生じさせずに原始プログラムを実行させることができる。
【0076】
あるいは、本発明は、ジャスト・イン・タイム・コンパイラ方式により、原始プログラムを特定の演算処理システムのプラットホームで直接実行可能な機械語に翻訳して該機械語を実行させるときに、前記原始プログラムの翻訳である前記機械語を、該原始プログラムに記述されている関数ごとに、該機械語の翻訳前の原始プログラムが更新された日時に対応付けて記憶し、前記原始プログラムの更新された日時と、記憶されている前記機械語に対応付けられている更新日時とが一致するか否かの判定を行ない、前記判定結果に応じて、前記原始プログラムを翻訳して得る機械語、または記憶されている機械語、のどちらかを特定の演算処理システムのプラットホームで直接実行させるように構成する。そして、この構成により、原始プログラムに変更が加えられても、プログラムの翻訳処理に起因する実行開始時のタイムラグを生じさせずに、且つ、その変更に応じて正しく原始プログラムを実行させることができる。
【0077】
以上のように、本発明のいずれの構成によっても、JITコンパイラを用いて原始プログラムを実行させるときの実行開始時の性能を向上させることができるという効果を奏する。
【図面の簡単な説明】
【図1】本発明の基本構成図である。
【図2】本発明を実施するプログラム実行装置の全体構成を示す図である。
【図3】本発明を実施するプログラム実行装置における翻訳・実行処理の全体の流れを示した図である。
【図4】管理簿の一例を表で示した図である。
【図5】JITコンパイル処理の第一の例の処理内容をフローチャートで示した図である。
【図6】本発明を実施するプログラム実行装置の第二の例におけるハードディスク装置の記憶内容を示す図である。
【図7】プログラム実行装置の第二の例における管理簿の例を表で示した図である。
【図8】JITコンパイル処理の第二の例の処理内容をフローチャートで示した図である。
【図9】本発明を実施するプログラム実行装置の第三の例におけるRAMの記憶内容を示す図である。
【図10】本発明を実施するプログラム実行装置の第三の例における装置全体の制御処理の処理内容を示すフローチャートである。
【図11】図10におけるJITコンパイル処理の処理内容を示すフローチャートである。
【図12】記憶させた制御プログラムをコンピュータで読み取ることの可能な記録媒体の例を示す図である。
【符号の説明】
1 原始プログラム
10、20 プログラム実行装置
11 記憶手段
12 翻訳手段
13 記憶制御手段
14 判定手段
15 実行制御手段
16 実行手段
21 入力部
22 CPU
23 出力部
24 I/F部
25 半導体メモリ
25−1 ROM
25−2 RAM
26 ハードディスク装置
27 バス
30 JITコンパイラ
31 プログラムロード部
32 高速化判定部
33 コンパイル部
34 ファイルロード部
35 プログラム実行部
41 プログラムソースモジュール
42 管理簿
43 コンパイル済み格納モジュール
44 コンパイル済み実行モジュール
51 コンパイル済み標準モジュール
61 ワークエリア
62 キャッシュエリア
71 コンピュータ
72 メモリ
73 可搬型記憶媒体
74 回線
75 プログラムサーバ
76 記憶装置
Claims (6)
- 機械語を実行する実行手段を有し、ジャスト・イン・タイム・コンパイラ方式により、原始プログラムを該実行手段で直接実行可能な機械語に翻訳して実行するプログラム実行装置であって、
前記原始プログラムに記述される関数の翻訳であって前記実行手段で実行可能な機械語を該関数ごとに記憶し、該原始プログラムの実行終了後も記憶内容を保持する記憶手段と、
演算処理装置に所定の制御プログラムを実行させることによって、前記原始プログラムに記述されている関数を前記実行手段で実行可能な機械語に翻訳する翻訳手段と、
前記翻訳手段により翻訳された機械語を、該機械語の翻訳前の関数と該関数が記述されていた原始プログラムが更新された日時とに対応付けて、前記記憶手段に記憶させる記憶制御手段と、
前記原始プログラムで用いられている関数の翻訳である機械語が前記記憶手段に記憶されており、且つ、該原始プログラムの更新された日時と該記憶手段に記憶されている該機械語に対応付けられている更新日時とが一致するか否かの判定を、前記対応付けに基づいて該関数毎に行なう判定手段と、
前記判定手段による判定結果に応じて、前記翻訳手段の翻訳する機械語、または前記記憶手段に記憶されている機械語、のどちらかを前記関数の翻訳として選択し、選択された機械語を、前記原始プログラムで示されている該関数の実行順に即した順序で前記実行手段に直接実行させる実行制御手段と、
を有することを特徴とするプログラム実行装置。 - 前記記憶手段には、前記原始プログラムで用いられることのあり得る関数の翻訳である機械語が予め記憶されていることを特徴とする請求項1に記載のプログラム実行装置。
- 前記記憶手段の記憶内容を複写して記憶する半導体メモリを更に有し、
前記実行制御手段は、前記記憶手段に記憶されている機械語を前記実行手段に実行させる代わりに、前記半導体メモリに記憶されている、該記憶手段に記憶されている記憶内容の複写である機械語を該実行手段に実行させる、
ことを特徴とする請求項1に記載のプログラム実行装置。 - 前記原始プログラムが格納されているプログラムファイルを読み込む読込手段を更に有し、
前記記憶制御手段は、前記プログラムファイルに示されている該プログラムファイルの更新日時を前記機械語に対応付ける該原始プログラムの更新された日時とみなして、前記記憶手段に該機械語を記憶させ、
前記判定手段は、前記プログラムファイルに示されている該プログラムファイルの更新日時と、前記機械語に対応させて前記記憶手段に記憶されている更新日時とが一致するか否かを判定する、
ことを特徴とする請求項1に記載のプログラム実行装置。 - 機械語を実行する演算処理装置を有し、ジャスト・イン・タイム・コンパイラ方式により、原始プログラムを該演算処理装置で直接実行可能な機械語に翻訳して該演算処理装置に実行させるプログラム実行方法であって、
演算処理装置に所定の制御プログラムを実行させることによって実現される翻訳手段が、前記原始プログラムに記述されている関数を前記演算処理装置で実行可能な機械語に翻訳し、
前記原始プログラムに記述される関数の翻訳であって前記演算処理装置で実行可能な機械語を該関数ごとに記憶し、該原始プログラムの実行終了後も記憶内容を保持する記憶手段に、記憶制御手段が、前記翻訳手段により翻訳された機械語を、該機械語の翻訳前の関数と該関数が記述されていた原始プログラムが更新された日時とに対応付けて記憶させ、
判定手段が、前記原始プログラムで用いられている関数の翻訳である機械語が前記記憶 手段に記憶されており、且つ、該原始プログラムの更新された日時と該記憶手段に記憶されている該機械語に対応付けられている更新日時とが一致するか否かの判定を、前記対応付けに基づいて該関数毎に行ない、
実行制御手段が、前記判定手段による判定結果に応じて、前記翻訳手段の翻訳する機械語、または前記記憶手段に記憶されている機械語、のどちらかを前記関数の翻訳として選択し、選択された機械語を、前記原始プログラムで示されている該関数の実行順に即した順序で前記演算処理装置に直接実行させる、
ことを特徴とするプログラム実行方法。 - 機械語を実行する演算処理装置を有し、ジャスト・イン・タイム・コンパイラ方式により、原始プログラムを該演算処理装置で直接実行可能な機械語に翻訳して実行するプログラム実行装置としてコンピュータを機能させるためのプログラムであって、
前記原始プログラムに記述される関数の翻訳であって前記演算処理装置で実行可能な機械語を該関数ごとに記憶し、該原始プログラムの実行終了後も記憶内容を保持する記憶手段、
演算処理装置に所定の制御プログラムを実行させることによって、前記原始プログラムに記述されている関数を前記演算処理装置で実行可能な機械語に翻訳する翻訳手段、
前記翻訳手段により翻訳された機械語を、該機械語の翻訳前の関数と該関数が記述されていた原始プログラムが更新された日時とに対応付けて、前記記憶手段に記憶させる記憶制御手段、
前記原始プログラムで用いられている関数の翻訳である機械語が前記記憶手段に記憶されており、且つ、該原始プログラムの更新された日時と該記憶手段に記憶されている該機械語に対応付けられている更新日時とが一致するか否かの判定を、前記対応付けに基づいて該関数毎に行なう判定手段、及び
前記判定手段による判定結果に応じて、前記翻訳手段の翻訳する機械語、または前記記憶手段に記憶されている機械語、のどちらかを前記関数の翻訳として選択し、選択された機械語を、前記原始プログラムで示されている該関数の実行順に即した順序で前記演算処理装置に直接実行させる実行制御手段、
としてコンピュータを機能させるためのプログラム。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2001010875A JP3889227B2 (ja) | 2000-01-21 | 2001-01-18 | プログラム実行装置、プログラム実行方法、記録媒体、及び制御プログラム |
Applications Claiming Priority (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2000012599 | 2000-01-21 | ||
| JP2000-12599 | 2000-01-21 | ||
| JP2001010875A JP3889227B2 (ja) | 2000-01-21 | 2001-01-18 | プログラム実行装置、プログラム実行方法、記録媒体、及び制御プログラム |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JP2001273151A JP2001273151A (ja) | 2001-10-05 |
| JP3889227B2 true JP3889227B2 (ja) | 2007-03-07 |
Family
ID=26583909
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2001010875A Expired - Fee Related JP3889227B2 (ja) | 2000-01-21 | 2001-01-18 | プログラム実行装置、プログラム実行方法、記録媒体、及び制御プログラム |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP3889227B2 (ja) |
Families Citing this family (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| EP1515232A4 (en) | 2002-06-18 | 2007-09-05 | Matsushita Electric Industrial Co Ltd | PROGRAM EMBODIMENT DEVICE, PROGRAMMING METHOD AND PROGRAM |
| CN100346297C (zh) * | 2003-02-18 | 2007-10-31 | 株式会社爱可信 | 本地编译方法、本地编译预处理方法、服务器和通信系统 |
-
2001
- 2001-01-18 JP JP2001010875A patent/JP3889227B2/ja not_active Expired - Fee Related
Also Published As
| Publication number | Publication date |
|---|---|
| JP2001273151A (ja) | 2001-10-05 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US5230049A (en) | Program source code translator | |
| US20030101334A1 (en) | Systems and methods for integrating emulated and native code | |
| JP2004280795A (ja) | エクストリームパイプライン及び最適化再配列技術 | |
| US7124407B1 (en) | Method and apparatus for caching native code in a virtual machine interpreter | |
| EP1049011A2 (en) | Method and apparatus for handling exceptions as normal control flow | |
| US20240231864A9 (en) | Hybrid just in time load module compiler with performance optimizations | |
| US20030192035A1 (en) | Systems and methods for implementing efficient execution transfers between successive translations of stack-based program code in a virtual machine environment | |
| US20030033593A1 (en) | Dynamic execution layer interface for explicitly or transparently executing application or system binaries | |
| US7739674B2 (en) | Method and apparatus for selectively optimizing interpreted language code | |
| US20030110478A1 (en) | Portable run-time code synthesis in a caching dynamic translator | |
| US20010042241A1 (en) | Apparatus and method for executing program using just-in time-compiler system | |
| CN116931947A (zh) | 一种优化wasm字节码的方法及执行方法、计算机设备及存储介质 | |
| US6128590A (en) | Method for the migration of hardware-proximate, subprogram-independent programs with portable and non-portable program parts | |
| US5150474A (en) | Method for transferring arguments between object programs by switching address modes according to mode identifying flag | |
| US7581216B2 (en) | Preserving platform independence with native accelerators for performance critical program objects | |
| JP3889227B2 (ja) | プログラム実行装置、プログラム実行方法、記録媒体、及び制御プログラム | |
| EP1438644A2 (en) | Method for fast compilation of preverified java bytecode to high quality native machine code | |
| US20080077912A1 (en) | Software development methods, systems, and storage media storing software developed thereby | |
| CN112052047A (zh) | 一种指令处理方法、终端及存储介质 | |
| CN117251168A (zh) | 动态类型语言的提前编译方法、装置、智能汽车及介质 | |
| CN101593257B (zh) | 基于.Net虚拟机的软件保护系统和方法 | |
| JPH11212807A (ja) | プログラム実行方法 | |
| US6954926B1 (en) | Label address translating device | |
| JP3424596B2 (ja) | シンボル参照情報のキャッシュ方法ならびに装置 | |
| CN107562430A (zh) | 一种针对移动π演算语言的文件处理功能的编译方法 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060829 |
|
| A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20061025 |
|
| 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: 20061128 |
|
| A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20061129 |
|
| R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091208 Year of fee payment: 3 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101208 Year of fee payment: 4 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111208 Year of fee payment: 5 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111208 Year of fee payment: 5 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121208 Year of fee payment: 6 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121208 Year of fee payment: 6 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131208 Year of fee payment: 7 |
|
| LAPS | Cancellation because of no payment of annual fees |