JP2000267861A - インタプリタの実装方法及びインタプリタプログラムを記録したコンピュータ読み取り可能な記録媒体 - Google Patents
インタプリタの実装方法及びインタプリタプログラムを記録したコンピュータ読み取り可能な記録媒体Info
- Publication number
- JP2000267861A JP2000267861A JP11073067A JP7306799A JP2000267861A JP 2000267861 A JP2000267861 A JP 2000267861A JP 11073067 A JP11073067 A JP 11073067A JP 7306799 A JP7306799 A JP 7306799A JP 2000267861 A JP2000267861 A JP 2000267861A
- Authority
- JP
- Japan
- Prior art keywords
- virtual instruction
- instruction
- processing unit
- virtual
- interpreter
- 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.)
- Pending
Links
Landscapes
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
(57)【要約】
【課題】インタプリタ実行時における命令キャッシュの
ヒット率の向上を図る。 【解決手段】主メモリ2に確保された命令処理単位領域
25における各仮想命令処理単位の配置を、例えば領域
252上の仮想命令aの処理単位Aと領域253上の仮
想命令xの処理単位XとをB1のように入れ替えるな
ど、対応する仮想命令の使用回数または使用頻度の順に
動的に入れ替えると共に、ジャンプテーブル24に登録
されている各仮想命令処理単位の配置先の情報を、仮想
命令aから指定されるエントリ中の0xab400と仮
想命令xから指定されるエントリ中の0xabcd0と
をB2のように入れ替えるなど、仮想命令処理単位の入
れ替えに連動して入れ替える。
ヒット率の向上を図る。 【解決手段】主メモリ2に確保された命令処理単位領域
25における各仮想命令処理単位の配置を、例えば領域
252上の仮想命令aの処理単位Aと領域253上の仮
想命令xの処理単位XとをB1のように入れ替えるな
ど、対応する仮想命令の使用回数または使用頻度の順に
動的に入れ替えると共に、ジャンプテーブル24に登録
されている各仮想命令処理単位の配置先の情報を、仮想
命令aから指定されるエントリ中の0xab400と仮
想命令xから指定されるエントリ中の0xabcd0と
をB2のように入れ替えるなど、仮想命令処理単位の入
れ替えに連動して入れ替える。
Description
【0001】
【発明の属する技術分野】本発明は、コンピュータ上で
動作して、仮想的な命令列を解釈し、実行するインタプ
リタの実装方法及びインタプリタプログラムを記録した
コンピュータ読み取り可能な記録媒体に関する。
動作して、仮想的な命令列を解釈し、実行するインタプ
リタの実装方法及びインタプリタプログラムを記録した
コンピュータ読み取り可能な記録媒体に関する。
【0002】
【従来の技術】インタプリタとは、仮想的な命令列(つ
まりコンピュータ上のCPUにより解釈・実行されない
命令列)をソフトウェアで解釈し、実行するプログラム
のことである。多くの場合、インタプリタは、仮想的な
命令(仮想命令)を解釈し、実行する1つのループ(命
令処理単位)によって実装される、このループの中に
は、命令(仮想命令)をメモリからロードし、命令の種
類を判別して、その命令に相当する処理へ分岐する部分
と、各命令毎に、命令の機能を実行する部分がある。
まりコンピュータ上のCPUにより解釈・実行されない
命令列)をソフトウェアで解釈し、実行するプログラム
のことである。多くの場合、インタプリタは、仮想的な
命令(仮想命令)を解釈し、実行する1つのループ(命
令処理単位)によって実装される、このループの中に
は、命令(仮想命令)をメモリからロードし、命令の種
類を判別して、その命令に相当する処理へ分岐する部分
と、各命令毎に、命令の機能を実行する部分がある。
【0003】これらインタプリタの処理部分が、メモリ
上のどの番地に配置されるかは、当該インタプリタのソ
ースプログラムがどういう順序でこれらの処理を記述し
ているかに依存している。また、インタプリタの対象と
なるプログラムの実体である仮想命令列のメモリ上の配
置も、当該インタプリタの対象となる各プログラムをメ
モリにロードするタイミングに依存している。
上のどの番地に配置されるかは、当該インタプリタのソ
ースプログラムがどういう順序でこれらの処理を記述し
ているかに依存している。また、インタプリタの対象と
なるプログラムの実体である仮想命令列のメモリ上の配
置も、当該インタプリタの対象となる各プログラムをメ
モリにロードするタイミングに依存している。
【0004】さて、インタプリタを、ダイレクトマップ
方式のみを適用するキャッシュメモリが実装されている
CPU上で動作させる場合、インタプリタのメインルー
プの実行において、命令キャッシュのヒット率を向上さ
せるには、使用頻度の高い仮想命令の処理単位から順番
にプログラムを記述して、メモリ上の配置を連続的に割
り付けるようにすればよい。C言語の場合、switc
h−case文によって、記述することになる。このプ
ログラム(インタプリタの実体)をコンパイルすると、
インタプリタの目的コード(機械語)には、ジャンプテ
ーブルという、(アドレスサイズ)×(仮想命令数)の
大きさのテーブルが生成され、このテーブルヘ仮想命令
コードによるオフセットでアクセスすると、その仮想命
令の処理が配置されている番地を求められるようになっ
ている。
方式のみを適用するキャッシュメモリが実装されている
CPU上で動作させる場合、インタプリタのメインルー
プの実行において、命令キャッシュのヒット率を向上さ
せるには、使用頻度の高い仮想命令の処理単位から順番
にプログラムを記述して、メモリ上の配置を連続的に割
り付けるようにすればよい。C言語の場合、switc
h−case文によって、記述することになる。このプ
ログラム(インタプリタの実体)をコンパイルすると、
インタプリタの目的コード(機械語)には、ジャンプテ
ーブルという、(アドレスサイズ)×(仮想命令数)の
大きさのテーブルが生成され、このテーブルヘ仮想命令
コードによるオフセットでアクセスすると、その仮想命
令の処理が配置されている番地を求められるようになっ
ている。
【0005】以下、このインタプリタのメインループの
処理手順の詳細を図7を参照して説明する。まず、仮想
命令列101へのプログラムカウンタ(PC)102を
使って仮想命令(仮想命令コード)xをロードする(ス
テップD1)。
処理手順の詳細を図7を参照して説明する。まず、仮想
命令列101へのプログラムカウンタ(PC)102を
使って仮想命令(仮想命令コード)xをロードする(ス
テップD1)。
【0006】次に、ロードした仮想命令xによってジャ
ンプテーブル104を引くことにより、インタプリタの
中心をなす命令処理単位領域105中の、当該仮想命令
xに対応する命令処理単位X、即ち当該仮想命令xを解
釈し、実行するための命令処理単位Xの格納先番地を得
る(ステップD2)。図7では、0xabcd0(先頭
の0xは16進表現であることを示す)が得られる。そ
して、上記ステップD2で得た番地、即ち現在インタプ
リタの対象となっている仮想命令xに対する、当該イン
タプリタにおける命令処理単位Xの格納先番地0xab
cd0ヘジャンプする(ステップD3)。以上のステッ
プD2,D3の処理はディスパッチ処理と呼ばれる。
ンプテーブル104を引くことにより、インタプリタの
中心をなす命令処理単位領域105中の、当該仮想命令
xに対応する命令処理単位X、即ち当該仮想命令xを解
釈し、実行するための命令処理単位Xの格納先番地を得
る(ステップD2)。図7では、0xabcd0(先頭
の0xは16進表現であることを示す)が得られる。そ
して、上記ステップD2で得た番地、即ち現在インタプ
リタの対象となっている仮想命令xに対する、当該イン
タプリタにおける命令処理単位Xの格納先番地0xab
cd0ヘジャンプする(ステップD3)。以上のステッ
プD2,D3の処理はディスパッチ処理と呼ばれる。
【0007】次に、ジャンプ先の命令処理単位Xによ
り、現在インタプリタの対象となっている仮想命令xの
処理を実行する(ステップD4)。
り、現在インタプリタの対象となっている仮想命令xの
処理を実行する(ステップD4)。
【0008】そして、仮想命令列101へのプログラム
カウンタ102を次の仮想命令へ進め(ステップD
5)、インタプリタのメインループの先頭(ステップD
1)へ戻る。
カウンタ102を次の仮想命令へ進め(ステップD
5)、インタプリタのメインループの先頭(ステップD
1)へ戻る。
【0009】
【発明が解決しようとする課題】前記した、従来のイン
タプリタの実装方式では、使用頻度の高い仮想命令が予
め分っている場合にはよいが、インタプリタ上で動作さ
せるプログラム(例えばアプリケーションプログラム)
の種類によっては、当該プログラム中の各仮想命令の使
用頻度が変化するので、命令キャッシュのヒット率に関
して全てのプログラムに最適なメモリ配置とするのは困
難であった。
タプリタの実装方式では、使用頻度の高い仮想命令が予
め分っている場合にはよいが、インタプリタ上で動作さ
せるプログラム(例えばアプリケーションプログラム)
の種類によっては、当該プログラム中の各仮想命令の使
用頻度が変化するので、命令キャッシュのヒット率に関
して全てのプログラムに最適なメモリ配置とするのは困
難であった。
【0010】また、ジャンプテーブルを使わない方法と
して、アセンブラでメインループを記述し、仮想命令
(仮想命令コード)の順番に、一定間隔Zで各仮想命令
の処理単位を記述し、命令コード×Zによって仮想命令
の処理単位の格納先番地を求めるようにするものも知ら
れている、しかし、この方式では、各仮想命令の処理単
位の順序は、仮想命令のデザインによって決定されてし
まい、プログラム毎に、命令キャッシュのヒット率が最
適となるようなメモリ配置にすることはできなかった。
して、アセンブラでメインループを記述し、仮想命令
(仮想命令コード)の順番に、一定間隔Zで各仮想命令
の処理単位を記述し、命令コード×Zによって仮想命令
の処理単位の格納先番地を求めるようにするものも知ら
れている、しかし、この方式では、各仮想命令の処理単
位の順序は、仮想命令のデザインによって決定されてし
まい、プログラム毎に、命令キャッシュのヒット率が最
適となるようなメモリ配置にすることはできなかった。
【0011】本発明は上記事情を考慮してなされたもの
でその目的は、キャッシュのヒット率を向上できるイン
タプリタの実装方法及びインタプリタプログラムを記録
したコンピュータ読み取り可能な記録媒体を提供するこ
とにある。
でその目的は、キャッシュのヒット率を向上できるイン
タプリタの実装方法及びインタプリタプログラムを記録
したコンピュータ読み取り可能な記録媒体を提供するこ
とにある。
【0012】
【課題を解決するための手段】本発明は、インタプリタ
(つまり、命令キャッシュを備えた情報処理機器上で動
作して、仮想命令列を解釈し、実行するインタプリタ)
の中枢をなす各仮想命令の処理単位のメモリ上の配置
を、対応する仮想命令の使用状況に応じて動的に入れ替
えると共に、ジャンプテーブルに登録されている各仮想
命令処理単位の配置先の情報を、上記仮想命令処理単位
の入れ替えに連動して入れ替えることを特徴とする。
(つまり、命令キャッシュを備えた情報処理機器上で動
作して、仮想命令列を解釈し、実行するインタプリタ)
の中枢をなす各仮想命令の処理単位のメモリ上の配置
を、対応する仮想命令の使用状況に応じて動的に入れ替
えると共に、ジャンプテーブルに登録されている各仮想
命令処理単位の配置先の情報を、上記仮想命令処理単位
の入れ替えに連動して入れ替えることを特徴とする。
【0013】ここで、上記各仮想命令の使用状況を表す
情報として、その仮想命令の使用回数の情報、或いは情
報処理機器内部で発生する任意の時間間隔(例えば、O
Sからのタイマ割り込みの時間間隔)もしくは外部から
指定される時間間隔で取得される使用頻度の情報を用い
るとよい。
情報として、その仮想命令の使用回数の情報、或いは情
報処理機器内部で発生する任意の時間間隔(例えば、O
Sからのタイマ割り込みの時間間隔)もしくは外部から
指定される時間間隔で取得される使用頻度の情報を用い
るとよい。
【0014】このような構成においては、各仮想命令処
理単位のメモリ上の配置を、対応する仮想命令の使用状
況に応じて動的に入れ替えることで、使用回数または使
用頻度の順位の高い各仮想命令の処理単位をメモリ領域
上に連続的に配置することが可能となる。これにより、
使用回数または使用頻度の順位の高い各仮想命令の処理
単位のメモリ配置で決まる命令キャッシュのラインアド
レス(ブロックアドレス)が同一となる状態を避けるこ
とができ、命令キャッシュのヒット率の向上を図って、
インタプリタの実行性能を向上させることが可能とな
る。
理単位のメモリ上の配置を、対応する仮想命令の使用状
況に応じて動的に入れ替えることで、使用回数または使
用頻度の順位の高い各仮想命令の処理単位をメモリ領域
上に連続的に配置することが可能となる。これにより、
使用回数または使用頻度の順位の高い各仮想命令の処理
単位のメモリ配置で決まる命令キャッシュのラインアド
レス(ブロックアドレス)が同一となる状態を避けるこ
とができ、命令キャッシュのヒット率の向上を図って、
インタプリタの実行性能を向上させることが可能とな
る。
【0015】ところで、組み込みシステムのように、R
OM等、書き換え不可能なメモリ上でインタプリタを実
行するシステムがある。この種のシステムでは、仮想命
令処理単位のメモリ配置を動的に入れ替えることは不可
能である。
OM等、書き換え不可能なメモリ上でインタプリタを実
行するシステムがある。この種のシステムでは、仮想命
令処理単位のメモリ配置を動的に入れ替えることは不可
能である。
【0016】そこで本発明は、仮想命令処理単位列が配
置される命令処理単位用メモリ領域がたとえROM等の
書き換え不可能なメモリ上に確保されている場合でも、
仮想命令処理単位のメモリ配置を変更できるように、仮
想命令処理単位列中の一部の仮想命令処理単位を配置す
るための、命令キャッシュと同一サイズのキャッシュ用
メモリ領域を書き換え可能なメモリ上に確保し、上記命
令処理単位用メモリ領域上の仮想命令処理単位列の中か
ら一部の仮想命令処理単位を各仮想命令の使用状況に応
じて選択して上記キャッシュ用メモリ領域に再配置する
と共に、ジャンプテーブル中の、上記再配置した仮想命
令処理単位に対応する仮想命令から指定されるエントリ
の内容を、当該仮想命令処理単位の再配置先を指すよう
に更新することをも特徴とする。
置される命令処理単位用メモリ領域がたとえROM等の
書き換え不可能なメモリ上に確保されている場合でも、
仮想命令処理単位のメモリ配置を変更できるように、仮
想命令処理単位列中の一部の仮想命令処理単位を配置す
るための、命令キャッシュと同一サイズのキャッシュ用
メモリ領域を書き換え可能なメモリ上に確保し、上記命
令処理単位用メモリ領域上の仮想命令処理単位列の中か
ら一部の仮想命令処理単位を各仮想命令の使用状況に応
じて選択して上記キャッシュ用メモリ領域に再配置する
と共に、ジャンプテーブル中の、上記再配置した仮想命
令処理単位に対応する仮想命令から指定されるエントリ
の内容を、当該仮想命令処理単位の再配置先を指すよう
に更新することをも特徴とする。
【0017】ここで、実行すべき仮想命令をロードし、
当該仮想命令で指定されるジャンプテーブルのエントリ
の内容から、当該仮想命令の処理単位にジャンプするた
めの処理(ロード、ディスパッチ処理)の手続きを、キ
ャッシュ用メモリ領域の先頭部分に配置するならば、当
該処理の実行時における命令キャッシュのヒット率を向
上させることができる。
当該仮想命令で指定されるジャンプテーブルのエントリ
の内容から、当該仮想命令の処理単位にジャンプするた
めの処理(ロード、ディスパッチ処理)の手続きを、キ
ャッシュ用メモリ領域の先頭部分に配置するならば、当
該処理の実行時における命令キャッシュのヒット率を向
上させることができる。
【0018】このような構成においては、命令処理単位
用メモリ領域上に配置されている仮想命令処理単位列の
うちの一部の仮想命令処理単位を各仮想命令の使用状況
に応じて選択してキャッシュ用メモリ領域に再配置する
ことで、使用回数または使用頻度の順位の高い各仮想命
令の処理単位を当該キャッシュ用メモリ領域上に連続的
に配置することが可能となる。つまり、使用回数または
使用頻度の順位の高い各仮想命令の処理単位について
は、キャッシュ用メモリ領域にその順位を反映するよう
に再配置できる。そして、この再配置に連動してジャン
プテーブルのエントリの内容も書き換えることにより、
使用回数または使用頻度の順位の高い各仮想命令の処理
単位は命令処理単位用メモリ領域からではなくてキャッ
シュ用メモリ領域から読み出される。ここで、キャッシ
ュ用メモリ領域は命令キャッシュと同一サイズであるた
め、使用回数または使用頻度の順位の高い各仮想命令の
処理単位のメモリ配置で決まる命令キャッシュのライン
アドレスが同一となる状態を確実に避けることができ、
命令キャッシュのヒット率の向上を図って、インタプリ
タの実行性能を向上させることが可能となる。ここで
は、命令処理単位用メモリ領域が確保されるメモリに、
書き換え可能なメモリは勿論、書き換え不可能なROM
等のメモリを適用できるため、システムの用途に適した
メモリ配置を得ることができる。
用メモリ領域上に配置されている仮想命令処理単位列の
うちの一部の仮想命令処理単位を各仮想命令の使用状況
に応じて選択してキャッシュ用メモリ領域に再配置する
ことで、使用回数または使用頻度の順位の高い各仮想命
令の処理単位を当該キャッシュ用メモリ領域上に連続的
に配置することが可能となる。つまり、使用回数または
使用頻度の順位の高い各仮想命令の処理単位について
は、キャッシュ用メモリ領域にその順位を反映するよう
に再配置できる。そして、この再配置に連動してジャン
プテーブルのエントリの内容も書き換えることにより、
使用回数または使用頻度の順位の高い各仮想命令の処理
単位は命令処理単位用メモリ領域からではなくてキャッ
シュ用メモリ領域から読み出される。ここで、キャッシ
ュ用メモリ領域は命令キャッシュと同一サイズであるた
め、使用回数または使用頻度の順位の高い各仮想命令の
処理単位のメモリ配置で決まる命令キャッシュのライン
アドレスが同一となる状態を確実に避けることができ、
命令キャッシュのヒット率の向上を図って、インタプリ
タの実行性能を向上させることが可能となる。ここで
は、命令処理単位用メモリ領域が確保されるメモリに、
書き換え可能なメモリは勿論、書き換え不可能なROM
等のメモリを適用できるため、システムの用途に適した
メモリ配置を得ることができる。
【0019】ここで、上記各仮想命令の使用状況を表す
情報として、その仮想命令の使用回数の情報を用いる構
成では、各仮想命令の使用回数の順序が入れ替わった場
合に、仮想命令処理単位の入れ替えまたは再配置を行う
とよい。また、各仮想命令の使用状況を表す情報とし
て、情報処理機器内部で発生する任意の時間間隔もしく
は外部から指定される時間間隔で取得される使用頻度の
情報を用いる構成では、その使用頻度の情報を取得する
時間間隔で、仮想命令処理単位の入れ替えまたは再配置
を行うとよい。このような構成においては、一連の手続
きの局所性を生かした仮想命令処理単位のメモリ配置が
実現可能となる。
情報として、その仮想命令の使用回数の情報を用いる構
成では、各仮想命令の使用回数の順序が入れ替わった場
合に、仮想命令処理単位の入れ替えまたは再配置を行う
とよい。また、各仮想命令の使用状況を表す情報とし
て、情報処理機器内部で発生する任意の時間間隔もしく
は外部から指定される時間間隔で取得される使用頻度の
情報を用いる構成では、その使用頻度の情報を取得する
時間間隔で、仮想命令処理単位の入れ替えまたは再配置
を行うとよい。このような構成においては、一連の手続
きの局所性を生かした仮想命令処理単位のメモリ配置が
実現可能となる。
【0020】また本発明は、仮想命令処理単位の入れ替
えまたは再配置による新しいメモリ配置の情報を、書き
換え可能な不揮発性記録媒体に保存することにより、再
利用可能なようにしたことをも特徴とする。
えまたは再配置による新しいメモリ配置の情報を、書き
換え可能な不揮発性記録媒体に保存することにより、再
利用可能なようにしたことをも特徴とする。
【0021】また本発明は、各仮想命令のメモリ配置を
手続き単位でその手続きの使用状況に応じて動的に入れ
替えることをも特徴とする。このような構成において
は、データキャッシュのヒット率も向上することが可能
となる。
手続き単位でその手続きの使用状況に応じて動的に入れ
替えることをも特徴とする。このような構成において
は、データキャッシュのヒット率も向上することが可能
となる。
【0022】また本発明は、各仮想命令をコンパイルし
てネイティブコードに変換し、CPUにより実行する場
合に、この変換したネイティブコードをコンパイルした
順序でメモリ上に連続的に配置することをも特徴とす
る。更に、各ネイティブコードのメモリ配置を手続き単
位でその手続きの使用状況に応じて動的に入れ替えるこ
とをも特徴とする。このような構成においては、各仮想
命令をインタプリタにより実行するのではなく、各仮想
命令をネイティブコードに変換してCPUにより実行す
る場合にも、命令キャッシュのヒット率を向上して、シ
ステムの実行性能の高速化を実現することができる。
てネイティブコードに変換し、CPUにより実行する場
合に、この変換したネイティブコードをコンパイルした
順序でメモリ上に連続的に配置することをも特徴とす
る。更に、各ネイティブコードのメモリ配置を手続き単
位でその手続きの使用状況に応じて動的に入れ替えるこ
とをも特徴とする。このような構成においては、各仮想
命令をインタプリタにより実行するのではなく、各仮想
命令をネイティブコードに変換してCPUにより実行す
る場合にも、命令キャッシュのヒット率を向上して、シ
ステムの実行性能の高速化を実現することができる。
【0023】
【発明の実施の形態】本発明では、インタプリタの実行
において、命令キャッシュのヒット率の向上を図る方法
として、2通りの方法が適用可能である。1つは、命令
キャッシュ及びインタプリタのコード(プログラム)が
格納されるメモリ領域(命令処理単位領域)とは別に、
キャッシュ用のメモリ領域を確保し、この領域に、使用
頻度の高い仮想命令の処理単位をコピーして、実行する
方法(第1の方法)である。もう1つは、命令処理単位
領域上で、仮想命令処理単位のコードを直接入れ替える
方法(第2の方法)である。以下、第1の方法を適用し
た第1の実施形態及び第2の方法を適用した第2の実施
形態につき、図面を参照して順に説明する。
において、命令キャッシュのヒット率の向上を図る方法
として、2通りの方法が適用可能である。1つは、命令
キャッシュ及びインタプリタのコード(プログラム)が
格納されるメモリ領域(命令処理単位領域)とは別に、
キャッシュ用のメモリ領域を確保し、この領域に、使用
頻度の高い仮想命令の処理単位をコピーして、実行する
方法(第1の方法)である。もう1つは、命令処理単位
領域上で、仮想命令処理単位のコードを直接入れ替える
方法(第2の方法)である。以下、第1の方法を適用し
た第1の実施形態及び第2の方法を適用した第2の実施
形態につき、図面を参照して順に説明する。
【0024】[第1の実施形態]図1は本発明の第1の
実施形態に係るキャッシュ機能付きインタプリタを備え
た情報処理機器のブロック構成図である。同図におい
て、1は情報処理機器の制御中枢となるCPU、2はイ
ンタプリタ等の各種プログラム、データが格納される主
メモリである。3はハードディスク装置等に代表される
外部記憶装置、4はキーボード、マウス等に代表される
入力装置である。これらCPU1、主メモリ2、外部記
憶装置3、入力装置4及び図示せぬ表示装置等は、バス
5により相互接続されている。
実施形態に係るキャッシュ機能付きインタプリタを備え
た情報処理機器のブロック構成図である。同図におい
て、1は情報処理機器の制御中枢となるCPU、2はイ
ンタプリタ等の各種プログラム、データが格納される主
メモリである。3はハードディスク装置等に代表される
外部記憶装置、4はキーボード、マウス等に代表される
入力装置である。これらCPU1、主メモリ2、外部記
憶装置3、入力装置4及び図示せぬ表示装置等は、バス
5により相互接続されている。
【0025】CPU1は、主メモリ2に格納されている
命令の一部の写しが置かれる命令キャッシュ11、及び
主メモリ2に格納されているデータの一部の写しが置か
れるデータキャッシュ12を有している。ここで、イン
タプリタによる解釈・実行の対象となる仮想命令列(か
らなる例えばアプリケーションプログラム)はデータと
して扱われ、データキャッシュ12への格納対象とな
る。
命令の一部の写しが置かれる命令キャッシュ11、及び
主メモリ2に格納されているデータの一部の写しが置か
れるデータキャッシュ12を有している。ここで、イン
タプリタによる解釈・実行の対象となる仮想命令列(か
らなる例えばアプリケーションプログラム)はデータと
して扱われ、データキャッシュ12への格納対象とな
る。
【0026】主メモリ2には、仮想命令列21(からな
る手続きであるアプリケーションプログラム)、プログ
ラムカウンタ(PC)22、及びジャンプテーブル24
が配置される領域が確保される。主メモリ2にはまた、
インタプリタの中心をなし、各種仮想命令を解釈し、実
行するための仮想命令処理単位群が配置される命令処理
単位領域25が確保される。
る手続きであるアプリケーションプログラム)、プログ
ラムカウンタ(PC)22、及びジャンプテーブル24
が配置される領域が確保される。主メモリ2にはまた、
インタプリタの中心をなし、各種仮想命令を解釈し、実
行するための仮想命令処理単位群が配置される命令処理
単位領域25が確保される。
【0027】主メモリ2にはまた、インタプリタ中の仮
想命令処理単位の写しが置かれるキャッシュ用メモリ領
域27が確保される。このキャッシュ用メモリ領域27
のサイズは、CPU1内の命令キャッシュ11、つまり
システムの命令キャッシュ11のサイズに一致する。キ
ャッシュ用メモリ領域27の先頭部271には、仮想命
令のロード、ディスパッチ処理、及び各仮想命令の使用
回数をカウントする処理のためのプログラム部分が配置
され、当該プログラム部分に対する十分な命令キャッシ
ュヒット率が確保されるになっている。
想命令処理単位の写しが置かれるキャッシュ用メモリ領
域27が確保される。このキャッシュ用メモリ領域27
のサイズは、CPU1内の命令キャッシュ11、つまり
システムの命令キャッシュ11のサイズに一致する。キ
ャッシュ用メモリ領域27の先頭部271には、仮想命
令のロード、ディスパッチ処理、及び各仮想命令の使用
回数をカウントする処理のためのプログラム部分が配置
され、当該プログラム部分に対する十分な命令キャッシ
ュヒット率が確保されるになっている。
【0028】主メモリ2には更に、インタプリタの一部
をなし、本発明に直接関係する命令処理単位再配置プロ
グラム28が配置される領域が確保される。この命令処
理単位再配置プログラム28は、命令処理単位領域25
上の仮想命令処理単位群を対象に使用回数の多い仮想命
令の処理単位から順に選択してキャッシュ用メモリ領域
27に順次コピーする(再配置する)動作と、ジャンプ
テーブル24内の該当する仮想命令処理単位へのアドレ
スを当該コピー先のアドレスに書き換える動作を行うた
めの処理手順を有する。
をなし、本発明に直接関係する命令処理単位再配置プロ
グラム28が配置される領域が確保される。この命令処
理単位再配置プログラム28は、命令処理単位領域25
上の仮想命令処理単位群を対象に使用回数の多い仮想命
令の処理単位から順に選択してキャッシュ用メモリ領域
27に順次コピーする(再配置する)動作と、ジャンプ
テーブル24内の該当する仮想命令処理単位へのアドレ
スを当該コピー先のアドレスに書き換える動作を行うた
めの処理手順を有する。
【0029】次に図1の構成の動作を説明する。インタ
プリタは、各仮想命令について、その仮想命令が使用さ
れる回数の情報を取得する。そのために本実施形態で
は、仮想命令の種類数分のエントリを持った整数配列
(テーブル)を主メモリ2上に確保し、仮想命令を実行
する都度(具体的には、ロード、ディスパッチする都
度)、その仮想命令に固有のエントリの値(使用回数カ
ウンタ値)を1だけカウントアップするようにしてい
る。
プリタは、各仮想命令について、その仮想命令が使用さ
れる回数の情報を取得する。そのために本実施形態で
は、仮想命令の種類数分のエントリを持った整数配列
(テーブル)を主メモリ2上に確保し、仮想命令を実行
する都度(具体的には、ロード、ディスパッチする都
度)、その仮想命令に固有のエントリの値(使用回数カ
ウンタ値)を1だけカウントアップするようにしてい
る。
【0030】インタプリタは、上記整数配列の各エント
リに保持されている各仮想命令の使用回数(総使用回
数)の順位が入れ替わった場合に、キャッシュ用メモリ
領域27に対する仮想命令処理単位の配置(再配置)を
行う。この場合、最初の段階では、1仮想命令が実行さ
れる都度、仮想命令処理単位の再配置処理が行われる可
能性があるものの、ある程度の時間が経過した後は、各
仮想命令の使用回数の順位はほぼ固定されるため、仮想
命令処理単位の再配置処理の頻度は低下する。なお、上
記整数配列の各エントリの内容は、システム立ち上げ
時、或いは(仮想命令列21からなる)アプリケーショ
ンプログラムの起動もしくは終了時にゼロクリアされる
ものとする。
リに保持されている各仮想命令の使用回数(総使用回
数)の順位が入れ替わった場合に、キャッシュ用メモリ
領域27に対する仮想命令処理単位の配置(再配置)を
行う。この場合、最初の段階では、1仮想命令が実行さ
れる都度、仮想命令処理単位の再配置処理が行われる可
能性があるものの、ある程度の時間が経過した後は、各
仮想命令の使用回数の順位はほぼ固定されるため、仮想
命令処理単位の再配置処理の頻度は低下する。なお、上
記整数配列の各エントリの内容は、システム立ち上げ
時、或いは(仮想命令列21からなる)アプリケーショ
ンプログラムの起動もしくは終了時にゼロクリアされる
ものとする。
【0031】以下、この仮想命令処理単位の再配置処理
について、図2のフローチャートを参照して説明する。
について、図2のフローチャートを参照して説明する。
【0032】図1の情報処理機器では、インタプリタの
命令処理単位再配置プログラム28により、まずキャッ
シュ用メモリ領域27に対する書き込みアドレスAとし
て、当該領域27の先頭部271の直後のアドレス、即
ち仮想命令のロード、ディスパッチ処理等(のためのプ
ログラム部分)が配置されている部分に後続する領域
(仮想命令の処理単位用のメモリ領域)の先頭アドレス
を設定する(ステップS1)。次に、各仮想命令の使用
回数の情報に従って、未配置(未再配置)の仮想命令処
理単位に対応する仮想命令の中で最も使用回数の多い仮
想命令を選択する(ステップS2)。そして、アドレス
Aに、選択した仮想命令に固有のインタプリタの処理単
位(仮想命令処理単位)のサイズZを加算し、その加算
後のアドレスA+Zが、キャッシュ用メモリ領域27の
終端アドレスを超えているか否かをチェックする(ステ
ップS3,S4)。
命令処理単位再配置プログラム28により、まずキャッ
シュ用メモリ領域27に対する書き込みアドレスAとし
て、当該領域27の先頭部271の直後のアドレス、即
ち仮想命令のロード、ディスパッチ処理等(のためのプ
ログラム部分)が配置されている部分に後続する領域
(仮想命令の処理単位用のメモリ領域)の先頭アドレス
を設定する(ステップS1)。次に、各仮想命令の使用
回数の情報に従って、未配置(未再配置)の仮想命令処
理単位に対応する仮想命令の中で最も使用回数の多い仮
想命令を選択する(ステップS2)。そして、アドレス
Aに、選択した仮想命令に固有のインタプリタの処理単
位(仮想命令処理単位)のサイズZを加算し、その加算
後のアドレスA+Zが、キャッシュ用メモリ領域27の
終端アドレスを超えているか否かをチェックする(ステ
ップS3,S4)。
【0033】もし、A+Zがキャッシュ用メモリ領域2
7の終端を超えていないならば、キャッシュ用メモリ領
域27内のアドレスAからアドレスA+Z−1の範囲
に、命令処理単位領域25に配置されている上記選択し
た仮想命令の処理単位をコピーする(ステップS5)。
7の終端を超えていないならば、キャッシュ用メモリ領
域27内のアドレスAからアドレスA+Z−1の範囲
に、命令処理単位領域25に配置されている上記選択し
た仮想命令の処理単位をコピーする(ステップS5)。
【0034】そして、仮想命令処理単位の配置場所が変
わってもインタプリタが正しく動作可能なように、仮想
命令のディスパッチ処理で使用するジャンプテーブル2
4内の上記選択した仮想命令で指定されるエントリの内
容(つまり、該当する仮想命令処理単位へのアドレス)
を、上記書き込みアドレスAの値に書き換える(ステッ
プS6)。ここでは、選択した仮想命令が図1に示す仮
想命令xであり、当該仮想命令xで指定されるジャンプ
テーブル24のエントリ位置が3であり、当該仮想命令
xの処理単位Xの命令処理単位領域25上での格納先ア
ドレスが0xabcd0であり、そして当該処理単位X
のキャッシュ用メモリ領域27上でのコピー先アドレス
(コピー先先頭アドレス)が0x12340であるもの
とすると、上記ステップS6では、ジャンプテーブル2
4の3番目のエントリの内容が、0xabcd0から、
図1に示すように0x12340に更新される。
わってもインタプリタが正しく動作可能なように、仮想
命令のディスパッチ処理で使用するジャンプテーブル2
4内の上記選択した仮想命令で指定されるエントリの内
容(つまり、該当する仮想命令処理単位へのアドレス)
を、上記書き込みアドレスAの値に書き換える(ステッ
プS6)。ここでは、選択した仮想命令が図1に示す仮
想命令xであり、当該仮想命令xで指定されるジャンプ
テーブル24のエントリ位置が3であり、当該仮想命令
xの処理単位Xの命令処理単位領域25上での格納先ア
ドレスが0xabcd0であり、そして当該処理単位X
のキャッシュ用メモリ領域27上でのコピー先アドレス
(コピー先先頭アドレス)が0x12340であるもの
とすると、上記ステップS6では、ジャンプテーブル2
4の3番目のエントリの内容が、0xabcd0から、
図1に示すように0x12340に更新される。
【0035】次に、上記書き込みアドレスAをA+Zに
更新し(ステップS7)、ステップS2に戻る。上記の
動作は、上記ステップS4で、A+Zの値がキャッシュ
用メモリ領域27の終端アドレスを超えたことを検出す
るまで、即ちキャッシュ用メモリ領域27に新たな仮想
命令処理単位が配置(再配置)可能な空き部分がなくな
るまで繰り返される。
更新し(ステップS7)、ステップS2に戻る。上記の
動作は、上記ステップS4で、A+Zの値がキャッシュ
用メモリ領域27の終端アドレスを超えたことを検出す
るまで、即ちキャッシュ用メモリ領域27に新たな仮想
命令処理単位が配置(再配置)可能な空き部分がなくな
るまで繰り返される。
【0036】以上により、キャッシュ用メモリ領域27
には、各仮想命令の最新の使用回数の順に、対応する仮
想命令処理単位が連続的に配置(再配置)される。つま
り、前回の命令処理単位再配置プログラム28に従う仮
想命令処理単位の配置時点と比べて、各仮想命令の使用
回数の順位が変化した結果、最新の各仮想命令の使用回
数の順位を反映するように、キャッシュ用メモリ領域2
7に対する仮想命令処理単位の再配置が発生する。
には、各仮想命令の最新の使用回数の順に、対応する仮
想命令処理単位が連続的に配置(再配置)される。つま
り、前回の命令処理単位再配置プログラム28に従う仮
想命令処理単位の配置時点と比べて、各仮想命令の使用
回数の順位が変化した結果、最新の各仮想命令の使用回
数の順位を反映するように、キャッシュ用メモリ領域2
7に対する仮想命令処理単位の再配置が発生する。
【0037】このように本実施形態においては、システ
ムが実装しているCPU1内の命令キャッシュ11と同
じサイズのメモリ領域(キャッシュ用メモリ領域27)
を主メモリ2上に確保して、この領域(キャッシュ用メ
モリ領域27)の先頭部分(先頭部271)に、仮想命
令のロード、ディスパッチ処理を配置し、残りの部分を
仮想命令処理単位を再配置する領域として使用し、イン
タプリタ実行時に、使用回数の多い仮想命令の処理単位
から順に、この領域に連続的に再配置するようにした。
ムが実装しているCPU1内の命令キャッシュ11と同
じサイズのメモリ領域(キャッシュ用メモリ領域27)
を主メモリ2上に確保して、この領域(キャッシュ用メ
モリ領域27)の先頭部分(先頭部271)に、仮想命
令のロード、ディスパッチ処理を配置し、残りの部分を
仮想命令処理単位を再配置する領域として使用し、イン
タプリタ実行時に、使用回数の多い仮想命令の処理単位
から順に、この領域に連続的に再配置するようにした。
【0038】このため、命令キャッシュ11がダイレク
トマップ方式のみを適用するものであるとしても、キャ
ッシュ用メモリ領域27上に再配置された使用回数の多
い仮想命令の処理単位同士が、命令キャッシュ11の同
一ライン(ブロック)に位置付けられる虞がないため、
インタプリタ実行における命令キャッシュのヒット率を
向上することができる。この理由を図3を参照して説明
する。
トマップ方式のみを適用するものであるとしても、キャ
ッシュ用メモリ領域27上に再配置された使用回数の多
い仮想命令の処理単位同士が、命令キャッシュ11の同
一ライン(ブロック)に位置付けられる虞がないため、
インタプリタ実行における命令キャッシュのヒット率を
向上することができる。この理由を図3を参照して説明
する。
【0039】今、命令処理単位領域25に配置されてい
る仮想命令処理単位X,Y,Zに対応する仮想命令の使
用回数が多く、且つ当該処理単位X,Y,Zの格納先ア
ドレスの下位フィールドで決まるラインアドレス(ブロ
ックアドレス)がいずれもi、つまり同一であるものと
する。この場合、処理単位Xが命令キャッシュ11のラ
インiに記憶されている状態で、命令処理単位領域25
から処理単位Y(またはZ)が読み出されて実行される
と、命令キャッシュ11のラインiの内容が処理単位X
から処理単位Y(またはZ)に置き換えられてしまう。
したがって、次に処理単位Xにより対応する仮想命令の
処理を実行しようとするとキャッシュミスヒットとな
り、当該処理単位Xを命令処理単位領域25から読み出
さなくてはならない。しかも今度は、命令キャッシュ1
1のラインiの内容が処理単位Y(またはZ)から処理
単位Xに置き換えられるため、次に処理単位Y(または
Z)をアクセスしようとすると、再びキャッシュミスヒ
ットとなる。
る仮想命令処理単位X,Y,Zに対応する仮想命令の使
用回数が多く、且つ当該処理単位X,Y,Zの格納先ア
ドレスの下位フィールドで決まるラインアドレス(ブロ
ックアドレス)がいずれもi、つまり同一であるものと
する。この場合、処理単位Xが命令キャッシュ11のラ
インiに記憶されている状態で、命令処理単位領域25
から処理単位Y(またはZ)が読み出されて実行される
と、命令キャッシュ11のラインiの内容が処理単位X
から処理単位Y(またはZ)に置き換えられてしまう。
したがって、次に処理単位Xにより対応する仮想命令の
処理を実行しようとするとキャッシュミスヒットとな
り、当該処理単位Xを命令処理単位領域25から読み出
さなくてはならない。しかも今度は、命令キャッシュ1
1のラインiの内容が処理単位Y(またはZ)から処理
単位Xに置き換えられるため、次に処理単位Y(または
Z)をアクセスしようとすると、再びキャッシュミスヒ
ットとなる。
【0040】これに対して本実施形態では、上記仮想命
令処理単位X,Y,Zは命令キャッシュ11と同一サイ
ズのキャッシュ用メモリ領域27上に再配置され、ジャ
ンプテーブル24の該当するエントリの内容も、その再
配置先を示すように書き換えられているため、当該処理
単位X,Y,Zは最初はキャッシュ用メモリ領域27か
ら読み出される。その結果、命令キャッシュ11の異な
るライン、例えばラインj,j+1,j+2にその写し
が置かれることから、以後の処理単位X,Y,Zへのア
クセスはキャッシュヒットとなり、命令キャッシュヒッ
ト率が向上する。
令処理単位X,Y,Zは命令キャッシュ11と同一サイ
ズのキャッシュ用メモリ領域27上に再配置され、ジャ
ンプテーブル24の該当するエントリの内容も、その再
配置先を示すように書き換えられているため、当該処理
単位X,Y,Zは最初はキャッシュ用メモリ領域27か
ら読み出される。その結果、命令キャッシュ11の異な
るライン、例えばラインj,j+1,j+2にその写し
が置かれることから、以後の処理単位X,Y,Zへのア
クセスはキャッシュヒットとなり、命令キャッシュヒッ
ト率が向上する。
【0041】なお、ラインアドレスがj,j+1,j+
2のいずれかに一致する命令処理単位領域25の位置か
ら、使用回数の少ない仮想命令の処理単位、例えば仮想
命令処理単位Wが読み出された場合には、その処理単位
Wにより命令キャッシュ11上の処理単位X,Y,Zの
いずれかが置き換えられる可能性がある。しかし、その
処理単位Wにより処理される仮想命令の使用回数は少な
いことから、このような状態が発生する確率は低い。し
かも、たとえ処理単位X,Y,Zのいずれかが処理単位
Wに置き換えられたとしても、それは極めて一時的であ
り、問題とはならない。
2のいずれかに一致する命令処理単位領域25の位置か
ら、使用回数の少ない仮想命令の処理単位、例えば仮想
命令処理単位Wが読み出された場合には、その処理単位
Wにより命令キャッシュ11上の処理単位X,Y,Zの
いずれかが置き換えられる可能性がある。しかし、その
処理単位Wにより処理される仮想命令の使用回数は少な
いことから、このような状態が発生する確率は低い。し
かも、たとえ処理単位X,Y,Zのいずれかが処理単位
Wに置き換えられたとしても、それは極めて一時的であ
り、問題とはならない。
【0042】ここで、仮想命令処理単位の再配置後にお
けるインタプリタのメインループの処理手順について図
1を参照して説明する。まず、プログラムカウンタ22
を使って仮想命令列21(からなる手続き)中の仮想命
令(仮想命令コード)xをロードする(ステップA
1)。
けるインタプリタのメインループの処理手順について図
1を参照して説明する。まず、プログラムカウンタ22
を使って仮想命令列21(からなる手続き)中の仮想命
令(仮想命令コード)xをロードする(ステップA
1)。
【0043】次に、ロードした仮想命令xによってジャ
ンプテーブル24を引くことにより、当該仮想命令xの
処理単位Xの格納先番地を得る(ステップA2)。ここ
では、処理単位Xの格納先番地は、0xabcd0から
0x12340に更新されているため、0x12340が
得られる。
ンプテーブル24を引くことにより、当該仮想命令xの
処理単位Xの格納先番地を得る(ステップA2)。ここ
では、処理単位Xの格納先番地は、0xabcd0から
0x12340に更新されているため、0x12340が
得られる。
【0044】そして、上記ステップA2で得た、現在イ
ンタプリタの対象となっている仮想命令xの処理単位X
の格納先番地0x12340ヘジャンプする(ステップ
A3)。これにより、処理単位Xは、命令処理単位領域
25ではなくてキャッシュ用メモリ領域27から読み出
される(番地0x12340が命令キャッシュ11にヒ
ットしなかった場合)。また、処理単位Xの写しが命令
キャッシュ11内にあるならば、つまり番地0x123
40が命令キャッシュ11にヒットしたならば、当該処
理単位Xは命令キャッシュ11から高速に読み出され
る。
ンタプリタの対象となっている仮想命令xの処理単位X
の格納先番地0x12340ヘジャンプする(ステップ
A3)。これにより、処理単位Xは、命令処理単位領域
25ではなくてキャッシュ用メモリ領域27から読み出
される(番地0x12340が命令キャッシュ11にヒ
ットしなかった場合)。また、処理単位Xの写しが命令
キャッシュ11内にあるならば、つまり番地0x123
40が命令キャッシュ11にヒットしたならば、当該処
理単位Xは命令キャッシュ11から高速に読み出され
る。
【0045】以上のステップA1〜A3は、キャッシュ
用メモリ領域27の先頭部271に配置されている仮想
命令のロード、ディスパッチ処理(のためのプログラム
部分)に従って実行される。
用メモリ領域27の先頭部271に配置されている仮想
命令のロード、ディスパッチ処理(のためのプログラム
部分)に従って実行される。
【0046】次に、ジャンプ先の仮想命令処理単位Xに
より、現在インタプリタの対象となっている仮想命令x
の処理を実行する(ステップA4)。
より、現在インタプリタの対象となっている仮想命令x
の処理を実行する(ステップA4)。
【0047】そして、プログラムカウンタ22を次の仮
想命令へ進め(ステップA5)、インタプリタのメイン
ループの先頭(ステップA1)へ戻る。
想命令へ進め(ステップA5)、インタプリタのメイン
ループの先頭(ステップA1)へ戻る。
【0048】本実施形態において、システムの電源がオ
フされる際には、キャッシュ用メモリ領域27の内容
(即ち仮想命令処理単位の新たなメモリ配置の情報)及
びジャンプテーブル24の内容を外部記憶装置3に保存
するようにしている。これにより、次の電源オン時にキ
ャッシュ用メモリ領域27及びジャンプテーブル24
を、電源オフ前の状態に復元して再利用できる。
フされる際には、キャッシュ用メモリ領域27の内容
(即ち仮想命令処理単位の新たなメモリ配置の情報)及
びジャンプテーブル24の内容を外部記憶装置3に保存
するようにしている。これにより、次の電源オン時にキ
ャッシュ用メモリ領域27及びジャンプテーブル24
を、電源オフ前の状態に復元して再利用できる。
【0049】ところで本実施形態では、インタプリタは
主メモリ2上に配置されている、つまり主メモリ2上で
動作するようになっている。しかし、命令処理単位領域
25及び命令処理単位再配置プログラム28がROM上
に固定配置されている実装、つまりインタプリタがRO
M上で動作する実装にも適用可能である。
主メモリ2上に配置されている、つまり主メモリ2上で
動作するようになっている。しかし、命令処理単位領域
25及び命令処理単位再配置プログラム28がROM上
に固定配置されている実装、つまりインタプリタがRO
M上で動作する実装にも適用可能である。
【0050】なお、以上の説明では、仮想命令のロー
ド、ディスパッチ毎に、整数配列上の対応するエントリ
の値を1カウントアップすることで、各仮想命令の総使
用回数を採取し、その回数の順位が入れ替わった場合
に、キャッシュ用メモリ領域27に対する仮想命令処理
単位の再配置を行うものとしたが、これに限るものでは
ない。
ド、ディスパッチ毎に、整数配列上の対応するエントリ
の値を1カウントアップすることで、各仮想命令の総使
用回数を採取し、その回数の順位が入れ替わった場合
に、キャッシュ用メモリ領域27に対する仮想命令処理
単位の再配置を行うものとしたが、これに限るものでは
ない。
【0051】例えば、情報処理機器内部で発生する時間
間隔である、OS(オペレーティングシステム)からの
第1のタイマ割り込みの時間間隔(第1の時間間隔)
で、その間の各仮想命令の使用回数の変化の情報、つま
り各仮想命令の使用頻度の統計情報を採取し、その時間
間隔で(つまり使用頻度の統計情報の採取タイミング毎
に)、その使用頻度の統計情報に基づいて、使用頻度の
高い仮想命令の処理単位から順にキャッシュ用メモリ領
域27への再配置を行うようにしても構わない。また、
ユーザ指定のタイミングの都度、各仮想命令の使用頻度
の統計情報を採取するようにしても構わない。
間隔である、OS(オペレーティングシステム)からの
第1のタイマ割り込みの時間間隔(第1の時間間隔)
で、その間の各仮想命令の使用回数の変化の情報、つま
り各仮想命令の使用頻度の統計情報を採取し、その時間
間隔で(つまり使用頻度の統計情報の採取タイミング毎
に)、その使用頻度の統計情報に基づいて、使用頻度の
高い仮想命令の処理単位から順にキャッシュ用メモリ領
域27への再配置を行うようにしても構わない。また、
ユーザ指定のタイミングの都度、各仮想命令の使用頻度
の統計情報を採取するようにしても構わない。
【0052】更に、各仮想命令の使用回数も、仮想命令
のロード、ディスパッチ毎ではなくて、OSからの(上
記第1のタイマ割り込みより十分短い)第2のタイマ割
り込みの時間間隔(第2の時間間隔)で、その際に実行
されている仮想命令を判別し、上記整数配列上の対応す
るエントリの値を1カウントアップすることで取得する
ようにしても構わない。この場合、各仮想命令の使用回
数の情報、及び当該情報に基づいて採取される使用頻度
の統計情報の精度は、先に述べた仮想命令のロード、デ
ィスパッチ毎にカウントを行う場合に比べて低くなるも
のの、処理の負荷は少なくて済む。
のロード、ディスパッチ毎ではなくて、OSからの(上
記第1のタイマ割り込みより十分短い)第2のタイマ割
り込みの時間間隔(第2の時間間隔)で、その際に実行
されている仮想命令を判別し、上記整数配列上の対応す
るエントリの値を1カウントアップすることで取得する
ようにしても構わない。この場合、各仮想命令の使用回
数の情報、及び当該情報に基づいて採取される使用頻度
の統計情報の精度は、先に述べた仮想命令のロード、デ
ィスパッチ毎にカウントを行う場合に比べて低くなるも
のの、処理の負荷は少なくて済む。
【0053】[第2の実施形態]図4は本発明の第2の
実施形態に係るキャッシュ機能付きインタプリタを備え
た情報処理機器のブロック構成図であり、図1と同一部
分には同一符号を付してある。
実施形態に係るキャッシュ機能付きインタプリタを備え
た情報処理機器のブロック構成図であり、図1と同一部
分には同一符号を付してある。
【0054】本実施形態の特徴は、命令処理単位領域2
5上で仮想命令処理単位の入れ替え(再配置)を行っ
て、使用回数(使用頻度)の高い仮想命令の順に再配置
することにより、命令キャッシュ11のヒット率を向上
しながら、前記第1の実施形態とは異なってキャッシュ
用メモリ領域27を確保するのを不要とした点にある。
そのため本実施形態では、前記第1の実施形態で適用し
た命令処理単位再配置プログラム28に代えて、命令処
理単位領域25上で仮想命令処理単位の入れ替え(再配
置)を行うための命令処理単位再配置プログラム38
を、主メモリ2上に配置するようにしている。
5上で仮想命令処理単位の入れ替え(再配置)を行っ
て、使用回数(使用頻度)の高い仮想命令の順に再配置
することにより、命令キャッシュ11のヒット率を向上
しながら、前記第1の実施形態とは異なってキャッシュ
用メモリ領域27を確保するのを不要とした点にある。
そのため本実施形態では、前記第1の実施形態で適用し
た命令処理単位再配置プログラム28に代えて、命令処
理単位領域25上で仮想命令処理単位の入れ替え(再配
置)を行うための命令処理単位再配置プログラム38
を、主メモリ2上に配置するようにしている。
【0055】このように本実施形態は、命令処理単位領
域25上で仮想命令処理単位の入れ替えを行うことか
ら、前記第1の実施形態と異なって、インタプリタがR
OM上で動作する実装には適用できない。
域25上で仮想命令処理単位の入れ替えを行うことか
ら、前記第1の実施形態と異なって、インタプリタがR
OM上で動作する実装には適用できない。
【0056】また本実施形態では、仮想命令処理単位の
入れ替えを可能とするため、仮想命令処理単位のコード
サイズを固定サイズLとすることを基本としている。こ
こでは、固定サイズLに満たないコードサイズの仮想命
令処理単位も、サイズLの領域を単位に配置される。ま
た、サイズLを超える仮想命令処理単位については、そ
のサイズLを超える残りのコード部分を、命令処理単位
領域25上の入れ替えの対象とならない特定の領域に配
置し、サイズLのコード部分からジャンプして、当該残
りのコード部分の処理が行われる構成とする。この特定
領域は、命令処理単位領域25の始端から命令キャッシ
ュ11のサイズ(命令キャッシュサイズ)分を除く領
域、例えば命令処理単位領域25の終端側の領域に割り
当てられる。また、固定サイズLは、使用回数または使
用頻度の順位が高い仮想命令の処理単位が収まるよう
な、可能な限り小さい2のべき乗の値(例えば64バイ
ト)に設定される。
入れ替えを可能とするため、仮想命令処理単位のコード
サイズを固定サイズLとすることを基本としている。こ
こでは、固定サイズLに満たないコードサイズの仮想命
令処理単位も、サイズLの領域を単位に配置される。ま
た、サイズLを超える仮想命令処理単位については、そ
のサイズLを超える残りのコード部分を、命令処理単位
領域25上の入れ替えの対象とならない特定の領域に配
置し、サイズLのコード部分からジャンプして、当該残
りのコード部分の処理が行われる構成とする。この特定
領域は、命令処理単位領域25の始端から命令キャッシ
ュ11のサイズ(命令キャッシュサイズ)分を除く領
域、例えば命令処理単位領域25の終端側の領域に割り
当てられる。また、固定サイズLは、使用回数または使
用頻度の順位が高い仮想命令の処理単位が収まるよう
な、可能な限り小さい2のべき乗の値(例えば64バイ
ト)に設定される。
【0057】また、命令処理単位領域25の先頭部25
1には、仮想命令のロード、ディスパッチ処理等のプロ
グラム部分が配置され、当該プログラム部分に対する十
分な命令キャッシュヒット率が確保されるようになって
いる。
1には、仮想命令のロード、ディスパッチ処理等のプロ
グラム部分が配置され、当該プログラム部分に対する十
分な命令キャッシュヒット率が確保されるようになって
いる。
【0058】以下、インタプリタの命令処理単位再配置
プログラム38に従う、命令処理単位領域25上での仮
想命令処理単位の入れ替え処理について、図5を参照し
て説明する。まず、図5(a)に示すように、命令処理
単位領域25の先頭部251の直後のアドレス0xab
400から始まるサイズLの領域252には仮想命令a
の処理単位Aが配置され、アドレス0xabcd0から
始まるサイズLの領域253には仮想命令xの処理単位
Xが配置されているものとする。このとき、(仮想命令
処理単位Xの対象とする)仮想命令xの使用回数または
使用頻度の順位は最も高いものとする。
プログラム38に従う、命令処理単位領域25上での仮
想命令処理単位の入れ替え処理について、図5を参照し
て説明する。まず、図5(a)に示すように、命令処理
単位領域25の先頭部251の直後のアドレス0xab
400から始まるサイズLの領域252には仮想命令a
の処理単位Aが配置され、アドレス0xabcd0から
始まるサイズLの領域253には仮想命令xの処理単位
Xが配置されているものとする。このとき、(仮想命令
処理単位Xの対象とする)仮想命令xの使用回数または
使用頻度の順位は最も高いものとする。
【0059】本実施形態において、命令処理単位再配置
プログラム38による入れ替え(再配置)の対象となる
仮想命令処理単位は、前記第1の実施形態と同様に、対
象となる仮想命令の使用回数または使用頻度の順に決定
される。
プログラム38による入れ替え(再配置)の対象となる
仮想命令処理単位は、前記第1の実施形態と同様に、対
象となる仮想命令の使用回数または使用頻度の順に決定
される。
【0060】今、仮想命令処理単位の入れ替え処理が開
始され、まず使用回数または使用頻度の順位が最も高い
仮想命令xの処理単位Xが入れ替え処理の対象として決
定されたものとする。この場合、仮想命令処理単位X
を、命令処理単位領域25の先頭部251の直後の領域
252に再配置するために、現在当該領域252に配置
されている仮想命令処理単位Aを、図5(b)に示すよ
うに作業領域36に退避する。次に、命令処理単位領域
25の領域253に配置されていた仮想命令処理単位X
を、図5(c)に示すように、(仮想命令処理単位Aが
配置されていた)領域252に再配置する。そして、作
業領域36に退避しておいた仮想命令処理単位Aを、図
5(d)に示すように、(仮想命令処理単位Xが配置さ
れていた)領域253に再配置する。
始され、まず使用回数または使用頻度の順位が最も高い
仮想命令xの処理単位Xが入れ替え処理の対象として決
定されたものとする。この場合、仮想命令処理単位X
を、命令処理単位領域25の先頭部251の直後の領域
252に再配置するために、現在当該領域252に配置
されている仮想命令処理単位Aを、図5(b)に示すよ
うに作業領域36に退避する。次に、命令処理単位領域
25の領域253に配置されていた仮想命令処理単位X
を、図5(c)に示すように、(仮想命令処理単位Aが
配置されていた)領域252に再配置する。そして、作
業領域36に退避しておいた仮想命令処理単位Aを、図
5(d)に示すように、(仮想命令処理単位Xが配置さ
れていた)領域253に再配置する。
【0061】以上により、使用回数または使用頻度の順
位が最も高い仮想命令xの処理単位X、即ち領域253
に配置されていた仮想命令処理単位Xが、命令処理単位
領域25の先頭部251の直後の領域252に配置され
ていた仮想命令処理単位A(仮想命令aの処理単位A)
と、図4において符号B1で示すように入れ替えられた
ことになる。
位が最も高い仮想命令xの処理単位X、即ち領域253
に配置されていた仮想命令処理単位Xが、命令処理単位
領域25の先頭部251の直後の領域252に配置され
ていた仮想命令処理単位A(仮想命令aの処理単位A)
と、図4において符号B1で示すように入れ替えられた
ことになる。
【0062】同様にして、ジャンプテーブル24におけ
る仮想命令x及びaで指定される両エントリの内容を、
図4において符号B2で示すように入れ替える。これに
より、仮想命令xで指定されるエントリの内容は0xa
bcd0から0xab400に書き換えられ、仮想命令
aで指定されるエントリの内容は0xab400から0x
abcd0に書き換えられることになる。
る仮想命令x及びaで指定される両エントリの内容を、
図4において符号B2で示すように入れ替える。これに
より、仮想命令xで指定されるエントリの内容は0xa
bcd0から0xab400に書き換えられ、仮想命令
aで指定されるエントリの内容は0xab400から0x
abcd0に書き換えられることになる。
【0063】以下、同様にして、後続の順位の各仮想命
令の処理単位について、順位の高い順に、領域252に
後続するサイズLの各領域に配置されている仮想命令処
理単位とそれぞれ入れ替えられる。この処理は、命令処
理単位領域25の始端から始まる命令キャッシュサイズ
分の領域の終端に至るまで続けられる。
令の処理単位について、順位の高い順に、領域252に
後続するサイズLの各領域に配置されている仮想命令処
理単位とそれぞれ入れ替えられる。この処理は、命令処
理単位領域25の始端から始まる命令キャッシュサイズ
分の領域の終端に至るまで続けられる。
【0064】以上により、命令処理単位領域25の始端
から始まる命令キャッシュサイズ分の領域のうち、先頭
部251を除く残りの領域には、仮想命令の使用回数ま
たは使用頻度の順位が高い順に、その仮想命令の処理単
位(のコード)が連続的に再配置される。この結果、イ
ンタプリタ実行における命令キャッシュのヒット率を向
上することができる。
から始まる命令キャッシュサイズ分の領域のうち、先頭
部251を除く残りの領域には、仮想命令の使用回数ま
たは使用頻度の順位が高い順に、その仮想命令の処理単
位(のコード)が連続的に再配置される。この結果、イ
ンタプリタ実行における命令キャッシュのヒット率を向
上することができる。
【0065】なお、各仮想命令処理単位は、上記の命令
処理単位領域25上での配置の入れ替えを可能とするた
めに、ポジションインディペンデントなコード(配置位
置に依存しないコード)にするとよい。
処理単位領域25上での配置の入れ替えを可能とするた
めに、ポジションインディペンデントなコード(配置位
置に依存しないコード)にするとよい。
【0066】ここで、仮想命令処理単位の再配置後にお
けるインタプリタのメインループの処理手順について図
4を参照して説明する。まず、プログラムカウンタ22
を使って仮想命令列21(からなる手続き)中の仮想命
令(仮想命令コード)xをロードする(ステップC
1)。
けるインタプリタのメインループの処理手順について図
4を参照して説明する。まず、プログラムカウンタ22
を使って仮想命令列21(からなる手続き)中の仮想命
令(仮想命令コード)xをロードする(ステップC
1)。
【0067】次に、ロードした仮想命令xによってジャ
ンプテーブル24を引くことにより、当該仮想命令xの
処理単位Xの格納先番地を得る(ステップC2)。ここ
では、処理単位Xの格納先番地は、0xabcd0から
0xab400に書き換えられているため、0xab40
0が得られる。
ンプテーブル24を引くことにより、当該仮想命令xの
処理単位Xの格納先番地を得る(ステップC2)。ここ
では、処理単位Xの格納先番地は、0xabcd0から
0xab400に書き換えられているため、0xab40
0が得られる。
【0068】そして、上記ステップC2で得た、現在イ
ンタプリタの対象となっている仮想命令xの処理単位X
の格納先番地0xab400ジャンプする(ステップC
3)。これにより、処理単位Xは、命令処理単位領域2
5の番地0xabcd0からではなくて番地0xab40
0から読み出される(番地0xab400が命令キャッ
シュ11にヒットしなかった場合)。また、処理単位X
の写しが命令キャッシュ11内にあるならば、つまり番
地0xab400が命令キャッシュ11にヒットしたな
らば、当該処理単位Xは命令キャッシュ11から高速に
読み出される。
ンタプリタの対象となっている仮想命令xの処理単位X
の格納先番地0xab400ジャンプする(ステップC
3)。これにより、処理単位Xは、命令処理単位領域2
5の番地0xabcd0からではなくて番地0xab40
0から読み出される(番地0xab400が命令キャッ
シュ11にヒットしなかった場合)。また、処理単位X
の写しが命令キャッシュ11内にあるならば、つまり番
地0xab400が命令キャッシュ11にヒットしたな
らば、当該処理単位Xは命令キャッシュ11から高速に
読み出される。
【0069】次に、ジャンプ先の仮想命令処理単位Xに
より、現在インタプリタの対象となっている仮想命令x
の処理を実行する(ステップC4)。
より、現在インタプリタの対象となっている仮想命令x
の処理を実行する(ステップC4)。
【0070】そして、プログラムカウンタ22を次の仮
想命令へ進め(ステップC5)、インタプリタのメイン
ループの先頭(ステップC1)へ戻る。
想命令へ進め(ステップC5)、インタプリタのメイン
ループの先頭(ステップC1)へ戻る。
【0071】以上に述べたように、前記第1及び第2の
実施形態では、仮想命令処理単位のメモリ配置を動的に
入れ替えることで、命令キャッシュ11のヒット率を向
上して、インタプリタの実行性能を向上させている。こ
の手法は、各仮想命令列(仮想命令コード列)からなる
各手続き(アプリケーションプログラム)にも応用する
ことができる。即ち、各仮想命令列からなる各手続きの
メモリ配置を、その手続きが呼ばれる回数(使用回数)
または頻度(使用頻度)の順位が高い方から順に動的に
再配置する。これにより、データキャッシュ12のヒッ
ト率を向上させることができる。
実施形態では、仮想命令処理単位のメモリ配置を動的に
入れ替えることで、命令キャッシュ11のヒット率を向
上して、インタプリタの実行性能を向上させている。こ
の手法は、各仮想命令列(仮想命令コード列)からなる
各手続き(アプリケーションプログラム)にも応用する
ことができる。即ち、各仮想命令列からなる各手続きの
メモリ配置を、その手続きが呼ばれる回数(使用回数)
または頻度(使用頻度)の順位が高い方から順に動的に
再配置する。これにより、データキャッシュ12のヒッ
ト率を向上させることができる。
【0072】ここで、各手続き(仮想命令列)の使用回
数の情報を採取するには、各手続きに対応するエントリ
(カウンタ領域)を持つ整数配列を用意し、手続きが呼
び出される毎に、或いはOSからの第1のタイマ割り込
みの時間間隔で、対応するエントリの内容を1カウント
アップすればよい。同様に、各手続き(仮想命令列)の
使用頻度の情報も、例えばOSからの(上記第1のタイ
マ割り込みより十分短い)第2のタイマ割り込みの時間
間隔で、或いはユーザが指定したタイミングの都度、上
記整数配列上の各手続き毎のカウント値に基づいて採取
すればよい。これにより、一連の手続きの局所性を活か
したメモリ配置が可能となる。
数の情報を採取するには、各手続きに対応するエントリ
(カウンタ領域)を持つ整数配列を用意し、手続きが呼
び出される毎に、或いはOSからの第1のタイマ割り込
みの時間間隔で、対応するエントリの内容を1カウント
アップすればよい。同様に、各手続き(仮想命令列)の
使用頻度の情報も、例えばOSからの(上記第1のタイ
マ割り込みより十分短い)第2のタイマ割り込みの時間
間隔で、或いはユーザが指定したタイミングの都度、上
記整数配列上の各手続き毎のカウント値に基づいて採取
すればよい。これにより、一連の手続きの局所性を活か
したメモリ配置が可能となる。
【0073】ところで本実施形態では、システムの電源
がオフされる際には、命令処理単位領域25の内容(即
ち仮想命令処理単位の新たなメモリ配置の情報)及びジ
ャンプテーブル24の内容を外部記憶装置3に保存する
ようにしている。これにより、次の電源オン時に命令処
理単位領域25及びジャンプテーブル24を、電源オフ
前の状態に復元して再利用できる。
がオフされる際には、命令処理単位領域25の内容(即
ち仮想命令処理単位の新たなメモリ配置の情報)及びジ
ャンプテーブル24の内容を外部記憶装置3に保存する
ようにしている。これにより、次の電源オン時に命令処
理単位領域25及びジャンプテーブル24を、電源オフ
前の状態に復元して再利用できる。
【0074】[第3の実施形態]次に、本発明の第3の
実施形態について図面を参照して説明する。まず、仮想
命令を扱う情報処理機器が持つ仮想命令実行環境には、
呼び出された手続き(アプリケーションプログラム)を
なす仮想命令列をインタプリタで解釈・実行する機能の
他に、当該仮想命令列(仮想命令コード列)をコンパイ
ルしてCPUで処理可能なネイティブコード(機械語)
に変換する機能が備えられているのが一般的である。
実施形態について図面を参照して説明する。まず、仮想
命令を扱う情報処理機器が持つ仮想命令実行環境には、
呼び出された手続き(アプリケーションプログラム)を
なす仮想命令列をインタプリタで解釈・実行する機能の
他に、当該仮想命令列(仮想命令コード列)をコンパイ
ルしてCPUで処理可能なネイティブコード(機械語)
に変換する機能が備えられているのが一般的である。
【0075】この種の情報処理機器において、従来は、
各手続きの記述順に対応する仮想命令列に対するコンパ
イルの結果としてのネイティブコード列を配置してい
た。しかし、この記述順が実際に呼び出されて実行され
る順番に一致するとは限らないために、一定レベル以上
の命令キャッシュヒット率を確保することは困難であっ
た。
各手続きの記述順に対応する仮想命令列に対するコンパ
イルの結果としてのネイティブコード列を配置してい
た。しかし、この記述順が実際に呼び出されて実行され
る順番に一致するとは限らないために、一定レベル以上
の命令キャッシュヒット率を確保することは困難であっ
た。
【0076】そこで、この種の情報処理機器において、
仮想命令コードをコンパイルしてネイティブコードに変
換してメモり領域に配置して、CPUによる読み取り・
実行に供する場合のメモリ領域への好ましい配置方法に
ついて、図6を参照して説明する。
仮想命令コードをコンパイルしてネイティブコードに変
換してメモり領域に配置して、CPUによる読み取り・
実行に供する場合のメモリ領域への好ましい配置方法に
ついて、図6を参照して説明する。
【0077】図6(a)において、仮想命令列からなる
各手続き(アプリケーションプログラム)P1,P2,
P3…Pnのうち、例えば手続きP1,P2,PnがP
2→P1→Pnの順番で呼び出されたものとする。な
お、各手続きP1〜Pnの記述順は、P1→P2→P3
→…→Pnのようになっているものとする。
各手続き(アプリケーションプログラム)P1,P2,
P3…Pnのうち、例えば手続きP1,P2,PnがP
2→P1→Pnの順番で呼び出されたものとする。な
お、各手続きP1〜Pnの記述順は、P1→P2→P3
→…→Pnのようになっているものとする。
【0078】仮想命令実行環境60中のコンパイラ62
は、各手続きが呼び出された際に、対応する仮想命令列
をコンパイルしてネイティブコード列に変換する。そし
てコンパイラ62は、変換したネイティブコード列をコ
ンパイルした順序で、主メモリ上のネイティブコード領
域63に連続的に配置する。ここでは、図6(a)に示
すように、手続きP2,P1,Pnに対応するネイティ
ブコード列NP2,NP1,NPnがNP2→NP1→
NPnの順に配置される。この並びは、対応する手続き
が呼び出された順に一致するから、つまり各手続きの使
用状況を反映していることから、従来のように各手続き
P1〜Pnの記述順に対応するネイティブコード列を配
置するのと異なって、命令キャッシュのヒット率を向上
することができる。なお、呼ばれた手続きに対応するネ
イティブコードが既にネイティブコード領域63に存在
する場合には、コンパイラ62によるコンパイル動作は
行われない。
は、各手続きが呼び出された際に、対応する仮想命令列
をコンパイルしてネイティブコード列に変換する。そし
てコンパイラ62は、変換したネイティブコード列をコ
ンパイルした順序で、主メモリ上のネイティブコード領
域63に連続的に配置する。ここでは、図6(a)に示
すように、手続きP2,P1,Pnに対応するネイティ
ブコード列NP2,NP1,NPnがNP2→NP1→
NPnの順に配置される。この並びは、対応する手続き
が呼び出された順に一致するから、つまり各手続きの使
用状況を反映していることから、従来のように各手続き
P1〜Pnの記述順に対応するネイティブコード列を配
置するのと異なって、命令キャッシュのヒット率を向上
することができる。なお、呼ばれた手続きに対応するネ
イティブコードが既にネイティブコード領域63に存在
する場合には、コンパイラ62によるコンパイル動作は
行われない。
【0079】ところで、各手続きの使用状況は時間経過
と共に変化する可能性がある。そこで本実施形態では、
前記した方法で各手続きの使用頻度の統計情報を採取
し、例えば最も高い使用頻度が予め定められた基準値
(閾値)を超えた場合には、それ以降、使用頻度の統計
情報の採取のタイミングで、各手続きの使用頻度順に、
ネイティブコード領域63上の対応するネイティブコー
ド列の配置を入れ替えるようにしている。
と共に変化する可能性がある。そこで本実施形態では、
前記した方法で各手続きの使用頻度の統計情報を採取
し、例えば最も高い使用頻度が予め定められた基準値
(閾値)を超えた場合には、それ以降、使用頻度の統計
情報の採取のタイミングで、各手続きの使用頻度順に、
ネイティブコード領域63上の対応するネイティブコー
ド列の配置を入れ替えるようにしている。
【0080】このように、ネイティブコード列の配置を
使用頻度順となるように動的に入れ替えることで、ネイ
ティブコードの命令キャッシュヒット率を向上すること
ができる。図6(b)には、上記の入れ替え(再配置)
処理により、P1,P2,Pnの使用頻度がP2>Pn
>P1のために、ネイティブコード領域63上でのネイ
ティブコード列の配置が、図6(a)のNP2→NP1
→NPnの順から、NP2→NPn→NP1の順となる
ように入れ替えられた様子が示されている。
使用頻度順となるように動的に入れ替えることで、ネイ
ティブコードの命令キャッシュヒット率を向上すること
ができる。図6(b)には、上記の入れ替え(再配置)
処理により、P1,P2,Pnの使用頻度がP2>Pn
>P1のために、ネイティブコード領域63上でのネイ
ティブコード列の配置が、図6(a)のNP2→NP1
→NPnの順から、NP2→NPn→NP1の順となる
ように入れ替えられた様子が示されている。
【0081】ところで、情報処理機器上で呼び出される
各手続き(をなす仮想命令列)に対応するネイティブコ
ード列の総量は、命令処理単位領域25に用意される命
令処理単位の総量に比べて著しく多い。このため、各手
続きが呼び出される都度、その仮想命令列をネイティブ
コード列に変換してネイティブコード領域63に配置し
たのでは、当該ネイティブコード領域63に大きなメモ
リサイズを割り当てなければならない。
各手続き(をなす仮想命令列)に対応するネイティブコ
ード列の総量は、命令処理単位領域25に用意される命
令処理単位の総量に比べて著しく多い。このため、各手
続きが呼び出される都度、その仮想命令列をネイティブ
コード列に変換してネイティブコード領域63に配置し
たのでは、当該ネイティブコード領域63に大きなメモ
リサイズを割り当てなければならない。
【0082】そこで最初は、呼び出された手続きをなす
仮想命令列を、全て実行環境60中のインタプリタ61
により解釈・実行し、呼び出された手続きの使用頻度が
基準値を超える毎に、その手続きについてのみ、コンパ
イラ62によりコンパイルしてネイティブコード列に変
換して、順次ネイティブコード領域63に配置して、C
PUにより解釈・実行するとよい。また、このようにし
たネイティブコード領域63上に配置された、使用頻度
が基準値を超える各手続きのネイティブコード列を、当
該各手続きの使用頻度順の配置となるように、使用頻度
の統計情報の採取のタイミングで、入れ替える。これに
より、一連の手続きの局所性を生かしたメモリ配置が可
能となる。
仮想命令列を、全て実行環境60中のインタプリタ61
により解釈・実行し、呼び出された手続きの使用頻度が
基準値を超える毎に、その手続きについてのみ、コンパ
イラ62によりコンパイルしてネイティブコード列に変
換して、順次ネイティブコード領域63に配置して、C
PUにより解釈・実行するとよい。また、このようにし
たネイティブコード領域63上に配置された、使用頻度
が基準値を超える各手続きのネイティブコード列を、当
該各手続きの使用頻度順の配置となるように、使用頻度
の統計情報の採取のタイミングで、入れ替える。これに
より、一連の手続きの局所性を生かしたメモリ配置が可
能となる。
【0083】
【発明の効果】以上詳述したように本発明によれば、仮
想命令の処理単位のメモリ配置を仮想命令の使用状況に
応じて動的に入れ替えることで、或いは仮想命令の処理
単位を命令キャッシュと同一サイズのメモリ領域(キャ
ッシュ用メモリ領域)上に仮想命令の使用状況に応じて
再配置することにより、命令キャッシュのヒット率の向
上を実現し、インタプリタの実行性能を向上させること
ができる。
想命令の処理単位のメモリ配置を仮想命令の使用状況に
応じて動的に入れ替えることで、或いは仮想命令の処理
単位を命令キャッシュと同一サイズのメモリ領域(キャ
ッシュ用メモリ領域)上に仮想命令の使用状況に応じて
再配置することにより、命令キャッシュのヒット率の向
上を実現し、インタプリタの実行性能を向上させること
ができる。
【0084】また本発明によれば、各仮想命令(仮想命
令コード)のメモリ配置も動的に入れ替えることによ
り、データキャッシュのヒット率の向上も実現すること
ができる。
令コード)のメモリ配置も動的に入れ替えることによ
り、データキャッシュのヒット率の向上も実現すること
ができる。
【0085】更に本発明によれば、各仮想命令をネイテ
ィブコードに変換して実行する場合にも、変換したネイ
ティブコードをコンパイルした順序でメモリに連続的に
配置するか、或いは変換したネイティブコードのメモリ
配置を動的に入れ替えることにより、ネイティブコード
の実行時における命令キャッシュヒット率を向上して、
システムの実行性能の高速化を実現することができる。
ィブコードに変換して実行する場合にも、変換したネイ
ティブコードをコンパイルした順序でメモリに連続的に
配置するか、或いは変換したネイティブコードのメモリ
配置を動的に入れ替えることにより、ネイティブコード
の実行時における命令キャッシュヒット率を向上して、
システムの実行性能の高速化を実現することができる。
【図1】本発明の第1の実施形態に係るキャッシュ機能
付きインタプリタを備えた情報処理機器のブロック構成
図。
付きインタプリタを備えた情報処理機器のブロック構成
図。
【図2】同実施形態における仮想命令処理単位の再配置
処理の手順を示すフローチャート。
処理の手順を示すフローチャート。
【図3】同実施形態におけるインタプリタ実行で命令キ
ャッシュのヒット率が向上する理由を説明するための
図。
ャッシュのヒット率が向上する理由を説明するための
図。
【図4】本発明の第2の実施形態に係るキャッシュ機能
付きインタプリタを備えた情報処理機器のブロック構成
図。
付きインタプリタを備えた情報処理機器のブロック構成
図。
【図5】同実施形態における仮想命令処理単位の入れ替
え処理を説明するための図。
え処理を説明するための図。
【図6】本発明の第3の実施形態に係るネイティブコー
ド列のメモリ配置方法を説明するための図。
ド列のメモリ配置方法を説明するための図。
【図7】従来のインタプリタのメインループの処理手順
を説明するための図。
を説明するための図。
1…CPU 2…主メモリ 3…外部記憶装置 4…入力装置 11…命令キャッシュ 12…データキャッシュ 21…仮想命令列 24…ジャンプテーブル 25…命令処理単位領域(命令処理単位用メモリ領域) 27…キャッシュ用メモリ領域 28,38…命令処理単位再配置プログラム 60…仮想命令実行環境 61…インタプリタ 62…コンパイラ 63…ネイティブコード領域
Claims (11)
- 【請求項1】 命令キャッシュを備えた情報処理機器上
で動作して、仮想命令列を解釈し、実行するインタプリ
タの実装方法であって、 前記インタプリタの中枢をなす各仮想命令の処理単位の
メモリ上の配置を、対応する仮想命令の使用状況に応じ
て動的に入れ替えると共に、 実行の対象となる仮想命令からその仮想命令の処理単位
の配置先にジャンプすることを可能とするジャンプテー
ブルに登録されている各仮想命令処理単位の配置先の情
報を、前記仮想命令処理単位の入れ替えに連動して入れ
替えることを特徴とするインタプリタの実装方法。 - 【請求項2】 命令キャッシュを備えた情報処理機器上
で動作して、仮想命令列を解釈し、実行するインタプリ
タの実装方法であって、 前記インタプリタの中枢をなす仮想命令の処理単位の列
が配置された命令処理単位用メモリ領域とは別に、前記
仮想命令処理単位列中の一部の仮想命令処理単位を配置
するための、前記命令キャッシュと同一サイズのキャッ
シュ用メモリ領域を書き換え可能なメモリ上に確保し、 前記命令処理単位用メモリ領域上の前記仮想命令処理単
位列の中から一部の仮想命令処理単位を前記各仮想命令
の使用状況に応じて選択して前記キャッシュ用メモリ領
域に再配置すると共に、 実行の対象となる仮想命令からその仮想命令の処理単位
の配置先にジャンプすることを可能とするジャンプテー
ブル中の、前記再配置した仮想命令処理単位に対応する
仮想命令から指定されるエントリの内容を、当該仮想命
令処理単位の再配置先を指すように更新することを特徴
とするインタプリタの実装方法。 - 【請求項3】 前記各仮想命令の使用状況を表す情報
は、その仮想命令の使用回数の情報、或いは前記情報処
理機器内部で発生する任意の時間間隔もしくは外部から
指定される時間間隔で取得される使用頻度の情報であ
り、 前記各仮想命令の使用回数の順序が入れ替わった場合
に、または前記使用頻度の情報を取得する時間間隔で、
前記仮想命令処理単位の入れ替えまたは再配置を行うこ
とを特徴とする請求項1または請求項2記載のインタプ
リタの実装方法。 - 【請求項4】 前記仮想命令処理単位の入れ替えまたは
再配置による新しいメモリ配置の情報を、再利用可能な
ように、書き換え可能な不揮発性記録媒体に保存するこ
とを特徴とする請求項1または請求項2記載のインタプ
リタの実装方法。 - 【請求項5】 前記各仮想命令のメモリ配置を手続き単
位でその手続きの使用状況に応じて動的に入れ替えるこ
とを特徴とする請求項1または請求項2記載のインタプ
リタの実装方法。 - 【請求項6】 前記各仮想命令をコンパイルしてネイテ
ィブコードに変換し、CPUにより実行する場合に、前
記変換したネイティブコードをコンパイルした順序で前
記メモリ上に連続的に配置することを特徴とする請求項
1または請求項2記載のインタプリタの実装方法。 - 【請求項7】 前記各仮想命令をコンパイルしてネイテ
ィブコードに変換し、CPUにより実行する場合に、前
記変換したネイティブコードを前記メモリ上に配置し、
その各ネイティブコードのメモリ配置を手続き単位でそ
の手続きの使用状況に応じて動的に入れ替えることを特
徴とする請求項1または請求項2記載のインタプリタの
実装方法。 - 【請求項8】 命令キャッシュを備えた情報処理機器上
で動作して、仮想命令列を解釈し、実行するインタプリ
タプログラムを記録したコンピュータ読み取り可能な記
録媒体であって、 前記情報処理機器に、 前記インタプリタプログラムの中枢をなす各仮想命令の
処理単位のメモリ上の配置を、対応する仮想命令の使用
状況に応じて動的に入れ替える機能と、 実行の対象となる仮想命令からその仮想命令の処理単位
の配置先にジャンプすることを可能とするためのジャン
プテーブルに登録されている各仮想命令処理単位の配置
先の情報を、前記仮想命令処理単位の入れ替えに連動し
て入れ替える機能とを実現させるための命令処理単位再
配置プログラムを含むインタプリタプログラムを記録し
たコンピュータ読み取り可能な記録媒体。 - 【請求項9】 命令キャッシュを備えた情報処理機器上
で動作して、仮想命令列を解釈し、実行するインタプリ
タプログラムを記録したコンピュータ読み取り可能な記
録媒体であって、 前記情報処理機器に、 前記インタプリタの中枢をなす仮想命令の処理単位の列
が配置された命令処理単位用メモリ領域とは別に、前記
仮想命令処理単位列中の一部の仮想命令処理単位を配置
するための、前記命令キャッシュと同一サイズのキャッ
シュ用メモリ領域を書き換え可能なメモリ上に確保する
機能と、 前記命令処理単位用メモリ領域上の前記仮想命令処理単
位列の中から一部の仮想命令処理単位を前記各仮想命令
の使用状況に応じて選択して前記キャッシュ用メモリ領
域に再配置する機能と、 実行の対象となる仮想命令からその仮想命令の処理単位
の配置先にジャンプすることを可能とするジャンプテー
ブル中の、前記再配置した仮想命令処理単位に対応する
仮想命令から指定されるエントリの内容を、当該仮想命
令処理単位の再配置先を指すように更新する機能とを実
現させるための命令処理単位再配置プログラムを含むイ
ンタプリタプログラムを記録したコンピュータ読み取り
可能な記録媒体。 - 【請求項10】 命令キャッシュを備えた情報処理機器
において、 仮想命令列を解釈し、実行するための、各仮想命令の処
理単位を含むインタプリタと、 前記各仮想命令処理単位が配置される領域が確保される
書き換え可能なメモリと、 各仮想命令から指定可能なエントリを有し、そのエント
リには、対応する仮想命令の処理単位の配置先情報が登
録されたジャンプテーブルとを具備し、 前記インタプリタは、 前記各仮想命令処理単位の前記メモリ上の配置を、対応
する仮想命令の使用状況に応じて動的に入れ替える第1
の入れ替え手段と、 前記ジャンプテーブルに登録されている各仮想命令処理
単位の配置先情報を、前記第1の入れ替え手段による仮
想命令処理単位の入れ替えに連動して入れ替える第2の
入れ替え手段とを備えたことを特徴とする情報処理機
器。 - 【請求項11】 命令キャッシュを備えた情報処理機器
において、 仮想命令列を解釈し、実行するための、各仮想命令の処
理単位を含むインタプリタと、 前記各仮想命令処理単位が配置される命令処理単位記憶
手段と、 前記命令処理単位記憶手段に配置されている全ての仮想
命令処理単位中の一部の仮想命令処理単位を配置するた
めの、前記命令キャッシュと同一サイズのキャッシュ用
メモリ領域が確保された書き換え可能なメモリと、 各仮想命令から指定可能なエントリを有し、そのエント
リには、対応する仮想命令の処理単位の配置先情報が登
録されたジャンプテーブルとを具備し、 前記インタプリタは、 前記命令処理単位記憶手段から一部の仮想命令処理単位
を前記各仮想命令の使用状況に応じて選択して前記キャ
ッシュ用メモリ領域に再配置する再配置手段と、 前記ジャンプテーブル中の、前記再配置手段による再配
置の対象となる仮想命令処理単位に対応する仮想命令か
ら指定されるエントリの内容を、当該仮想命令処理単位
の再配置先を指すように更新する更新手段とを備えたこ
とを特徴とする情報処理機器。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP11073067A JP2000267861A (ja) | 1999-03-18 | 1999-03-18 | インタプリタの実装方法及びインタプリタプログラムを記録したコンピュータ読み取り可能な記録媒体 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP11073067A JP2000267861A (ja) | 1999-03-18 | 1999-03-18 | インタプリタの実装方法及びインタプリタプログラムを記録したコンピュータ読み取り可能な記録媒体 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JP2000267861A true JP2000267861A (ja) | 2000-09-29 |
Family
ID=13507634
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP11073067A Pending JP2000267861A (ja) | 1999-03-18 | 1999-03-18 | インタプリタの実装方法及びインタプリタプログラムを記録したコンピュータ読み取り可能な記録媒体 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP2000267861A (ja) |
Cited By (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2003202993A (ja) * | 2001-10-31 | 2003-07-18 | Aplix Corp | 中間コード実行システム、中間コード実行方法および中間コード実行プログラム |
| JP2005267640A (ja) * | 2004-03-18 | 2005-09-29 | Arm Ltd | 機能を呼び出す方法と装置 |
| JP2006092532A (ja) * | 2004-09-10 | 2006-04-06 | Microsoft Corp | 最近アクセスしたリソースのデータ局所性の増加 |
-
1999
- 1999-03-18 JP JP11073067A patent/JP2000267861A/ja active Pending
Cited By (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2003202993A (ja) * | 2001-10-31 | 2003-07-18 | Aplix Corp | 中間コード実行システム、中間コード実行方法および中間コード実行プログラム |
| JP3472775B2 (ja) | 2001-10-31 | 2003-12-02 | 株式会社アプリックス | 中間コード実行システム、中間コード実行方法および中間コード実行プログラム |
| JP2005267640A (ja) * | 2004-03-18 | 2005-09-29 | Arm Ltd | 機能を呼び出す方法と装置 |
| JP2006092532A (ja) * | 2004-09-10 | 2006-04-06 | Microsoft Corp | 最近アクセスしたリソースのデータ局所性の増加 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP4783471B2 (ja) | クラスが有するメソッドを呼出して実行するコンピュータ・システムが行う方法 | |
| US7398521B2 (en) | Methods and apparatuses for thread management of multi-threading | |
| US7010555B2 (en) | System and method for compacting a computer system heap | |
| US6223339B1 (en) | System, method, and product for memory management in a dynamic translator | |
| US8832672B2 (en) | Ensuring register availability for dynamic binary optimization | |
| RU2271565C2 (ru) | Запоминание операндов стека в регистре | |
| JP5147280B2 (ja) | 異機種マルチプロセッサ・システムにおけるガーベッジ・コレクションのためのシステムおよび方法 | |
| TWI377502B (en) | Method and apparatus for performing interpreter optimizations during program code conversion | |
| US6363522B1 (en) | Method and apparatus for handling exceptions as normal control flow | |
| US7036118B1 (en) | System for executing computer programs on a limited-memory computing machine | |
| EP1920331A1 (en) | Adaptive process dispatch in a computer system having a plurality of processors | |
| US20180276120A1 (en) | Manual memory management using lazy patching | |
| JPH1115674A (ja) | 異なるランタイム環境において実行するための実行可能プログラムにおいて機能的に類似したコードシーケンスを発生するコンパイラ | |
| JP2000035893A (ja) | デ―タ処理システムの配列の静的初期化方法、デ―タ処理方法、並びにデ―タ処理システム及びその制御手順をコンピュ―タに実行させるプログラムを記憶したコンピュ―タ読み取り可能な記憶媒体 | |
| JPH113269A (ja) | スタックの内容をサブスタックに分離することによる正確なガーベイジ・コレクションを補助するシステムと方法 | |
| US6260191B1 (en) | User controlled relaxation of optimization constraints related to volatile memory references | |
| JPH1115673A (ja) | 異なるランタイム環境において実行するための実行可能プログラムにおけるコードシーケンスを機能的に類似したコードシーケンスと条件付きで置き換えるローダ | |
| US20090037501A1 (en) | Method and system for managing memory for a program using area | |
| KR20020088063A (ko) | 정보 처리 시스템에서 병렬 처리되는 작업들간의 데이터종속성의 대략적인 결정 | |
| US7913243B2 (en) | Method and system for generating and applying patches to a computer program concurrently with its execution | |
| JP4704357B2 (ja) | ハードウェア資源衝突を軽減するためのデータ配置機構 | |
| JP2000267861A (ja) | インタプリタの実装方法及びインタプリタプログラムを記録したコンピュータ読み取り可能な記録媒体 | |
| KR100725393B1 (ko) | 자바 가상 머신에서 바이트 코드의 수행 시간을 줄이는시스템 및 방법 | |
| US7185324B2 (en) | Compiler apparatus and method for determining locations for data in memory area | |
| US7028292B1 (en) | Program executing apparatus, control method therefor, and storage medium for interpreting and executing intermediate codes |