(57)【要約】【課題】ネイティブコードの呼び出し機能を備える従来のインタープリタ型システムでは、ネイティブコードの実行に関してインタープリタの制御が及ばないため、ネイティブコード部分からの不正アクセスが可能であった。また、ネイティブコード部分の実行状態を退避・回復することも困難であった。【解決手段】上記課題を解決するため、インタープリタから呼び出されるネイティブコードを、実ハードウェアのエミュレーションを行うエミュレーションレイヤによって行う。エミュレーションレイヤによって不正参照のチェックや、退避・回復に必要となる実行状態の管理を行うことにより、上記課題が解決される。【選択図】  図１
2004303114.tif 000002
【特許請求の範囲】
【請求項１】
ネイティブコードの呼び出し機能を備え、処理装置と協働してプログラミング言語の実行を行うインタープリタであって、ネイティブコードをネイティブコードエミュレータによるハードウェアエミュレーションによって実行することを特徴とするインタープリタ。
【請求項２】
請求項１において、前記ネイティブコードによるメモリ参照命令の監視を行うことを特徴とするインタープリタ。
【請求項３】
請求項２において、前記メモリ参照命令の監視は、当該インタープリタの管理するメモリ領域に関して、ネイティブコードからの読み出し／書き込み／実行の可／不可の表を記録しておき、前記ネイティブコードエミュレータによるネイティブコードの実行時に前記表を参照して命令実行における不正参照検出を実施することを特徴とするインタープリタ。
【請求項４】
請求項１において、プログラムの実行対象コードが、インタープリタコードとネイティブコードのいずれに属するかを判定し、前記実行対象コードがネイティブコードであると判定された場合にエミュレータにて処理を行うことを特徴とするインタープリタ。
【請求項５】
請求項４において、ネイティブメソッド呼び出しにてインタープリタコードの実行とネイティブコードの実行の遷移が行われる場合に、ネイティブメソッド呼び出しが発生するまでは前記判定処理を実行しないことを特徴とするインタープリタ。
【請求項６】
ネイティブコードの呼び出し機能を備え、処理装置と協働してプログラミング言語の実行を行うインタープリタであって、ネイティブコードによるメモリ参照命令の監視処理を行うことを特徴とするインタープリタ。
【請求項７】
請求項６において、前記メモリ参照命令の監視は、当該インタープリタの管理するメモリ領域に関して、ネイティブコードからの読み出し／書き込み／実行の可／不可の表を記録しておき、前記ネイティブコードエミュレータによるネイティブコードの実行時に前記表を参照して命令実行における不正参照検出を実施することを特徴とするインタープリタ。
【請求項８】
ネイティブコードの呼び出し機能を備え、処理装置と協働してプログラミング言語の実行を行うインタープリタにおいて、ネイティブコード部分をハードウェアで直接実行するのではなく、ネイティブコードエミュレータによるハードウェアエミュレーションによって実行することを特徴とするネイティブコード実行方法。
【請求項９】
請求項８において、インタープリタからネイティブコードの呼出を実施する際に、インタープリタの管理する各々のメモリ領域に関して、ネイティブコードからの読み出し／書き込み／実行の可／不可の表を記録しておき、前記ネイティブコードエミュレータによってネイティブコードの実行を行う際に、前記表を参照して、命令実行における不正参照検出を実施するネイティブコード実行方法。
【請求項１０】
請求項１のインタープリタにおいて、前記ネイティブコード部分の実行状態をネイティブコードエミュレータ内部に記憶しておき、プログラムの実行状態の退避を行う際に、インタープリタの内部状態と共にネイティブコード部分の実行状態を退避することを特徴とするインタープリタ。
【請求項１１】
請求項１０のインタープリタにおいて、退避したプログラムの実行状態を読み出し、プログラムの停止点からプログラム実行を再開することを特徴とするインタープリタ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はネイティブコードの呼び出し機能を持つインタープリタ型の実行を行うプログラミング言語におけるプログラムの実行方法に関する。
【０００２】
【従来の技術】
プログラミング言語の実行方法として、コンパイラと呼ばれるプログラムによってソースプログラムを実行対象計算機の機械語コードに変換する方法と、ソースプログラム、あるいは、それを中間表現に変換したプログラムを、インタープリタと呼ばれるプログラムによって、解釈実行する方式がよく知られている。
【０００３】
インタープリタは、別のプログラムを解釈実行するプログラムの総称であり、プログラムの可搬性を高めるためにインタープリタによる実行方式が採用されることが多い。インタープリタ型の言語では、プログラムの実行がインタープリタと呼ばれるプログラムによって行われるため、インタープリタ実行されるプログラムで発生した不正メモリ参照などの問題を検出することが容易である。このようなプログラミング言語の代表として、Ｊａｖａ（Ｒ）（非特許文献１：  Ｊ．  Ｇｏｓｌｉｎｇ他，  Ｊａｖａ  Ｌａｎｇｕａｇｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ，  Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ，  ２０００．）を挙げることができる。Ｊａｖａで記述されたアプリケーションは、一旦バイトコードと呼ばれる中間表現に変換されＪａｖａ仮想マシンと呼ばれるソフトウェアによってバイトコードが解釈実行される。
【０００４】
Ｊａｖａでは、配列外メモリ参照、ｎｕｌｌポインタ参照などを実行時に検出する機能を持ち、不正なメモリ破壊が生じ得ないことを特徴としている。一方、Ｃ言語やＣ＋＋などネイティブコード実行を行うプログラムでは、言語の機能としてメモリを保護する機能を備えていないため、ＯＳが保護を行っている領域外のメモリを不正に参照することができる。
【０００５】
こういった、Ｊａｖａなどのインタープリタ型言語では、一般にＩ／Ｏなど低レベルのライブラリ機能をそれ自身で記述することが難しい。そこで、こういった低レベル機能に関しては、Ｃ言語やＣ＋＋などによって記述されたネイティブコードを利用して実装する方式が広く用いられている。例えば、Ｊａｖａではユーザがプログラム中から呼び出したいメソッドをネイティブコードによって記述するためのＪＮＩ（非特許文献２：Ｓ．  Ｌｉａｎｇ，  Ｊａｖａ  Ｎａｔｉｖｅ  Ｉｎｔｅｒｆａｃｅ：  Ｐｒｏｇｒａｍｍｅｒ’ｓ  Ｇｕｉｄｅ  ａｎｄ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ，  Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ，  １９９９．）と呼ばれる仕様を定めている。ＪＮＩでは、Ｊａｖａからネイティブコードの呼び出しだけではなく、ネイティブコードからＪａｖａプログラムを呼び出すための仕様も定めている。
【０００６】
一方、このようなプログラムの実行において、プログラムそのものやハードウェアの保守・管理などの目的で、実行中のアプリケーションプログラムを一時的に中断してファイル上に退避しておき後ほど実行したい場合がある（ｃｈｅｃｋｐｏｉｎｔ／ｒｅｓｔａｒｔ）。また、同様の目的で、あるハードウェア上で実行しているアプリケーションを別のハードウェアに移動して実行継続したいというケース（ｍｉｇｒａｔｉｏｎ）がある。このようなケースでは、プログラムの実行中の状態を取り出して、退避・回復できる必要がある。
【０００７】
Ｊａｖａにおいてこのようなプログラムの実行状態の退避・回復を実現するための方式として、バイトコードを解析し、退避を行いたいプログラム点に関して、スタック上の値などの情報を取得するためのコードをバイトコード列に挿入し、プログラム実行状態の回復を行う場合は、退避したプログラム状態を再構成するようにバイトコードを変換する方式が知られている（非特許文献３：  Ｅ．  Ｔｒｕｙｅｎ他、Ｐｏｒｔａｂｌｅ  Ｓｕｐｐｏｒｔ  ｆｏｒ  Ｔｒａｎｓｐａｒｅｎｔ  Ｔｈｒｅａｄ  Ｍｉｇｒａｔｉｏｎ  ｉｎ  Ｊａｖａ，  Ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ａｇｅｎｔ  Ｓｙｓｔｅｍｓ  ａｎｄ  Ａｐｐｌｉｃａｔｉｏｎｓ／Ｍｏｂｉｌｅ  Ａｇｅｎｔｓ，２０００）。
【０００８】
【非特許文献１】Ｊ．  Ｇｏｓｌｉｎｇ他，  Ｊａｖａ  Ｌａｎｇｕａｇｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ，  Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ，  ２０００
【非特許文献２】Ｓ．  Ｌｉａｎｇ，  Ｊａｖａ  Ｎａｔｉｖｅ  Ｉｎｔｅｒｆａｃｅ：  Ｐｒｏｇｒａｍｍｅｒ’ｓ  Ｇｕｉｄｅ  ａｎｄ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ，  Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ，  １９９９
【非特許文献３】Ｅ．  Ｔｒｕｙｅｎ他、Ｐｏｒｔａｂｌｅ  Ｓｕｐｐｏｒｔ  ｆｏｒ  Ｔｒａｎｓｐａｒｅｎｔ  Ｔｈｒｅａｄ  Ｍｉｇｒａｔｉｏｎ  ｉｎ  Ｊａｖａ，  Ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ａｇｅｎｔ  Ｓｙｓｔｅｍｓ  ａｎｄ  Ａｐｐｌｉｃａｔｉｏｎｓ／Ｍｏｂｉｌｅ  Ａｇｅｎｔｓ，２０００
【０００９】
【発明が解決しようとする課題】
ネイティブコードによってプログラムの一部を実装する機能は、インタープリタのみで実装できない機能を実現するために必須であるが、次のような問題がある。
（１）  安全性の保障が不十分
ネイティブコード部分のプログラムからは、インタープリタ内のメモリを自由に参照可能である。よって、インタープリタ部分で不正メモリ参照の検査を行っているとしても、ネイティブコード部分のプログラムに誤りがあった場合、プログラムの安定性／安全性が保証できなくなる。
（２）  状態の退避・回復が困難
インタープリタ実行を行っている部分に関しては、インタープリタがプログラムの実行途中の状態（メモリ上のデータ値、実行中の命令アドレスなど）を管理しているため、実行状態を退避・回復することは容易である。一方、インタープリタから呼び出されたネイティブコード実行部分に関しては、インタープリタの管理外で実行が行われているため、実行状態を退避・回復することが困難である。
【００１０】
例えば、上記の従来技術では、プログラムの実行状態の退避・回復は純粋なＪａｖａ実行を行っているアプリケーションのみに限られている。一般には、Ｊａｖａのライブラリ中にはネイティブコードとして実現されている部分が多数存在するため、プログラム実行状態の退避・回復を行う上での大きな制約となる。
【００１１】
【課題を解決するための手段】
上記の問題は、ネイティブコード部分の実行がインタープリタの制御とは無関係に行なわれることによる。そこで、本発明ではインタープリタから呼び出されるネイティブコード部分に関しては、ハードウェアで直接実行を行うのではなく、ハードウェアの機能のエミュレーション実行を行うエミュレータにより実行するようにした。こうすることでネイティブコードの処理をインタープリタによりコントロールすることが可能になる。
【００１２】
このエミュレータにより、ネイティブコード部分でのメモリ参照のチェックを行うことにより、ネイティブコード実行における不正メモリ参照の発生を検出することが可能となる。
【００１３】
同様に、ネイティブコード部分のプログラム実行状態に関し、エミュレーショタによって状態変化を記録しておくことで、実行状態の退避・回復を行うことが可能となる。
【００１４】
【発明の実施の形態】
以下、本発明の一実施例を図面を参照しながら説明する。
【００１５】
図１１は本実施例でインタープリタを実行するシステムのハードウェア構成例を示す。改良されたインタープリタは、ディスク装置１１０３から主記憶装置１１０３上に読み込まれ、プロセッサ１１０１上で実行される。インタープリタが実行するアプリケーションに関しても同様にディスク装置１１０３に格納され、主記憶１１０３に読み込まれ、プロセッサ  １１０１上で動作するインタープリタにより実行が行なわれる。インタープリタはＦＤやＣＤ−Ｒ等の記憶媒体に格納されて取引され、実行前に図示していない媒体読取装置から読み込まれてディスク装置１１０３に格納されているものとする。
【００１６】
図２は従来のインタープリタシステムの例である。アプリケーションプログラム１０１は、インタープリタコード１０２と、ネイティブコード１０３から構成される。インタープリタコード１０２はプロセッサ１０６上でインタープリタ１０４により解釈実行される。
【００１７】
図１は本発明を適用したインタープリタシステムを模式的に示した図である。アプリケーションプログラム１０１は、インタープリタコード１０２と、ネイティブコード１０３から構成される。インタープリタコード１０２はプロセッサ１０６上でインタープリタ１０４により従来から行われている方法で解釈実行される。一方、ネイティブコード１０３は、ネイティブコードエミュレータ１０５を介して実行される。ネイティブコードをエミュレータにより実行する場合は、プロセッサ上で直接実行する場合と比較して、実行速度が低下する可能性があるが、エミュレーションを高速に行うための技術として、実行時に動的に機械語コードの生成を行うバイナリトランスレーションなどの技術を利用することにより、性能の低下を低く押えることも可能である。以下の実施例ではインタープリタがネイティブコードエミュレータを備えた例で説明するが、インタープリタにはネイティブコードエミュレータの呼び出し機能だけを備えさせて、インタープリタとネイティブコードエミュレータがそれぞれ独立したプログラムとしてもよい。
【００１８】
図３に本実施例のインタープリタによるプログラム実行処理のフローを示す。プログラム実行が処理３０１で開始されると、処理３０２で実行対象のコードがインタープリタコードであるか、ネイティブコードであるかの判定を行う。インタープリタコードである場合は、処理３０３に制御を移し、処理対象のコードをメモリから読み込む。次に、処理３０４において読み込んだインタープリタコードを実行し、処理３０５でプログラムの実行が完了したかどうかを判定する。プログラムの実行が完了であれば、処理３０６に制御を移し、プログラムの実行を終了する。完了で無い場合は、処理３０２に戻り次のコードの実行を行う。
【００１９】
処理３０２における判定において、当該コードがネイティブコードである場合は、処理３０７に制御を移し、ネイティブコードでのメモリ領域参照の可／不可の情報を表す領域表を作成する。次に、処理３０８に制御を移す。処理３０８では、ネイティブコードをメモリから読み出し、上記３０７で作成した領域表を参照してメモリ参照の可／不可などの検査を付加的に行う。検査の結果参照エラーがなければ処理３０９において、処理３０８で読み出したネイティブコードの実行を行う。続いて、処理３１０においてプログラムの実行が完了したか否かを判定し、処理が完了していれば処理３０６に制御を移してプログラムの実行を終了する。処理が完了していなければ、処理３０２に戻って次のコードを実行する。
【００２０】
なお、図３のフローでは、領域表の生成はネイティブコードの実行前に行うこととしたが、プログラムの起動時に初期設定しておき、プログラムの実行に伴ってネイティブコードから参照可能な領域が変化する毎に更新する方式にしてもよい。
【００２１】
ここで、領域表の生成をネイティブコードの実行前に行う方式は、領域表に利用するメモリをネイティブコードの呼び出しを行わない場合は必要としないという利点があるが、一回あたりのネイティブコード呼び出しのオーバヘッドが大きくなる。逆に、プログラムの実行に伴って領域表を構築する後者の方式では、一回あたりのネイティブコード呼び出しオーバヘッドは低くなるが、領域表のデータをプログラム実行中に保持しておかなくてはならない。
【００２２】
また、図３のフローでは、各インタープリタコードおよびネイティブコードに関して、次の実行対象コードがいずれに属するかを各命令の実行毎に確認している例を示したが、インタープリタ実行とネイティブコード実行の間の遷移が特定の命令で実施される場合など、次の対象命令の種別が特定可能な場合には、これを省略することが可能である。例えば、Ｊａｖａではインタープリタからネイティブコードへの遷移はネイティブメソッド呼び出しに限定されるので、ネイティブメソッド呼び出しが発生するまでは、インタープリタ実行であることを仮定し、処理３０２の検査を省略できる。
【００２３】
本実施例の特徴的な機能である、ネイティブコード実行部分におけるネイティブプログラム実行時の安全性の保障、プログラム実行状態の退避・回復のための状態の記録は主に処理３０８において実施される。
【００２４】
図４は図３の処理３０８のネイティブコード命令読み出し処理で不正なメモリ参照や破壊の検出処理を実施する例の詳細を示す。まず、処理４０１で処理を開始し、処理４０２において変数Ｉに実行対象の命令を求める。次に、実行対象の命令Ｉがメモリ参照命令であるか否かを確認する。メモリ参照命令でない場合は、処理４１０に制御を移して処理を完了する（即ち、ステップ３０８の処理を終えステップ３０９に移ってネイティブコードの実行を行う）。メモリ参照命令の場合は、処理４０４に制御を移し、変数Ａに命令Ｉが参照するアドレスを、変数Ｔに参照可能なメモリ領域の情報を表す領域表を求める。次に、処理４０５で領域表が空か否かを確認する。空の場合は、対応するアドレスが登録されていないので、処理４０８に制御を移して参照エラーを報告する。空でない場合は、処理４０６に制御を移し、領域表Ｔからエントリを１つ取り出し、変数Ｒに格納する。次に、領域情報Ｒに関して、アドレスＡがＲに含まれるか否かを確認する。参照しなければ処理４０５に制御を移し、次の領域の検査を継続する。参照を行う場合は、処理４０８に制御を移し、アドレスＡの参照が不正か否かを確認する。参照が不正であれば、処理４０８に制御を移し処理を終了する。不正でなければ処理４１０に制御を移して処理を完了する。
【００２５】
上記処理で利用するメモリ領域に関する情報を定義する領域表は、インタープリタの実行状態から定義される。Ｊａｖａインタープリタの場合であれば、ネイティブコード実行部分においては、インタープリタ管理下にあるメモリ領域に対する読み書きを行う事は基本的にできない。ただし、ＪＮＩ関数を介した場合には、読み書き可能である。
【００２６】
図５に領域表の例を示す。表の各エントリは、開始アドレス５０１、終了アドレス５０２、参照可能モード５０３の３つのエントリからなる。なお、図５の参照モードにおいて、「ｒ」は読み出し可、「ｗ」は書き込み可を表すものとする。従って「−−」は読み出しも書き込みも不可を表す。例えば、ストア命令がアドレス００３１００００に対して書き込みを行う場合を考える。この場合、図４の処理４０５〜４０７によって、図５の領域表のエントリ５０４〜５０６が順に検査され、エントリ５０６でアドレス００３１００００の所属する領域が書き込み不可なので、処理４０８でエラーが報告される。また、次に、ロード命令がアドレス００２２００００から読出しを行う場合を考える。先の例と同様に、図４の処理４０５〜４０７によって、図５の領域表のエントリ５０４〜５０６が順に検査され、領域が読み出し可能であるので処理４０９で正常に処理が終了する。
【００２７】
この検査は、すべてのメモリ参照に関して行う必要は無く、不正参照でないことが自明であるケースあるいは冗長な検査を除くことも可能である。
【００２８】
このような不正参照を行うＪａｖａプログラムの例を図６に示す。図６（ａ）のＪａｖａプログラムでは、ネイティブメソッドｆｏｏにオブジェクトのリファレンス（アドレス）を受け渡している。図６（ｂ）のｎａｔｉｖｅメソッドでは、受け渡されたオブジェクトのアドレスをｉｎｔ型のポインタにキャストし、（１）においてオブジェクトへ不正なオブジェクトへの書き込みを行っている。書き込み対象のオブジェクトはインタープリタの管理下にあるため、上記のようにネイティブコード部分からは参照できない。よって、ネイティブコード実行部分においてエラー検出が行なわれる。
【００２９】
次に、プログラム実行状態の退避・回復の実施例について説明する。
【００３０】
図７は状態退避の処理を示している。状態退避では、処理７０１で処理を開始する。次に、処理７０２でインタープリタの実行状態の退避を行ない、処理７０３でネイティブ実行部分の実行状態を退避し、処理７０４で退避処理を完了する。図８は退避した状態の回復処理を表している。回復処理も退避処理と同様の手順であり、まず処理８０１で処理を開始、次に処理８０２でインタープリタの実行状態の退避を行ない、続いて処理８０３でネイティブ実行部分の実行状態を回復し、処理７０５で処理を終了する。
【００３１】
図１２に処理７０３で退避するための情報を記録する命令エミュレーション処理を示す。命令エミュレーション処理は、処理１２０１で処理を開始し、続いて処理１２０２で実行対象の命令を変数Ｉに求める。次に、処理１２０３では命令Ｉが更新する状態集合を変数Ｔに求める。一般に、命令Ｉが更新する状態集合はエミュレーション対象のプロセッサの命令仕様により定義される。次に、処理１２０４により命令Ｉをエミュレーション実行する。これにより、処理１２０３で求めた状態集合が更新される。命令の実行後、処理１２０５で状態集合Ｔが空か否かを確かめ、空であれば処理１２０６に制御を移し処理を完了する。Ｔが空でなければ、処理１２０７に制御を移し、状態集合Ｔから状態を１つ取り出す。続いて、処理１２０８で取り出した状態の更新値を状態表に記録する。これにより、ネイティブコード実行により変更される状態の最新地が状態表に記録されることになる。続いて、処理１２０５に制御を移し、次の状態の処理を継続する。なお、図１２に示した例では、状態表への保存を１命令の実行毎に行っているが、状態表への記録は最終値のみでよいので、複数命令を一括して処理してもよい。
【００３２】
次に、処理７０３の状態の退避処理の詳細を図１３に示す。図１３に示す処理は、処理１３０１で処理を開始し、処理１３０２で状態表を変数Ｔに求める。次に、処理１３０３で状態表がからかい中を確認する。空であれば処理１３０６に制御を移して処理を完了する。空でなければ、処理１３０４に制御を移し、状態表Ｔからエントリを１つ取り出し、変数ｒに格納する。続いて、処理１３０５で状態の識別子と状態表に格納されたその最新値を退避する。次に、処理１３０３に制御を移して次の状態を処理する。
【００３３】
図８の処理８０３の状態の回復処理では、この逆に、退避した状態表を読み出して、状態識別子の示す状態の最新値とすればよい。
【００３４】
以上の処理により、ネイティブコード実行時の最新状態を状態表に記憶できるようになり、ネイティブコード実行部分に関しても状態の退避・回復が可能となる。
【００３５】
図９に退避／回復の対象とするＪａｖａプログラムの例を示す。この例では、図９（ａ）のＪａｖａプログラムから図９（ｂ）のネイティブコードを呼び出している。ここで、Ｊａｖａコードのループの３度目、ネイティブコード部分のループの１０度目の繰返しの開始時点でプログラムの実行状態を退避／回復することを考える。
【００３６】
この時退避される情報の例を図１０に示す。なお、この例では簡単のため変数の値のみを示しているが、実際にはプログラムの実行アドレスなど種々の情報を付加する必要がある。ここで、従来の方式では、インタープリタ部分の変数の値に関しては停止時点での値を検出することが可能であるが、ネイティブコード部分に関しては、状態が不明であった。ネイティブコード部分の実行をエミュレータによって実施することにより、図１０に示すような状態値を退避することが可能となる。プログラムの状態回復を行う場合は、図１０の値を適宜読み込んで状態の回復を行えば良い。
【００３７】
【発明の効果】
本発明によれば、インタープリタ実行されるプログラムから呼び出されるネイティブコードによって生じる不正メモリ参照を検出できる。またネイティブコードの呼び出しを伴うプログラムの実行状態を退避・回復することが可能となる。
【図面の簡単な説明】
【図１】本発明を適用したインタープリタシステムを模式的に示した図。
【図２】従来のインタープリタシステムを模式的に示した図。
【図３】本実施例のインタープリタによるプログラム実行処理のフローを示す図。
【図４】図３の処理３０８の詳細を示すフローチャート。
【図５】領域表の例を示す図。
【図６】プログラム例を示す図。
【図７】状態退避の処理を示すフローチャート。
【図８】退避した状態の回復処理を示すフローチャート
【図９】退避／回復の対象とするＪａｖａプログラムの例を示す図。
【図１０】退避された情報の例を示す図。
【図１１】インタープリタを実行するシステムのハードウェア構成を示す図。
【図１２】命令エミュレーション時の状態退避処理を示すフローチャート。
【図１３】図７の処理７０３の詳細を示すフローチャート。
【符号の説明】
１０１…アプリケーションプログラム、１０２…インタープリタコード、１０３…ネイティブコード、
１０４…インタープリタ、１０６…プロセッサ。
【図１】
2004303114.tif 000003
【図２】
2004303114.tif 000004
【図３】
2004303114.tif 000005
【図４】
2004303114.tif 000006
【図５】
2004303114.tif 000007
【図６】
2004303114.tif 000008
【図７】
2004303114.tif 000009
【図８】
2004303114.tif 000010
【図９】
2004303114.tif 000011
【図１０】
2004303114.tif 000012
【図１１】
2004303114.tif 000013
【図１２】
2004303114.tif 000014
【図１３】
2004303114.tif 000015