JP3320358B2 - コンパイル方法、例外処理方法、及びコンピュータ - Google Patents
コンパイル方法、例外処理方法、及びコンピュータInfo
- Publication number
- JP3320358B2 JP3320358B2 JP17094598A JP17094598A JP3320358B2 JP 3320358 B2 JP3320358 B2 JP 3320358B2 JP 17094598 A JP17094598 A JP 17094598A JP 17094598 A JP17094598 A JP 17094598A JP 3320358 B2 JP3320358 B2 JP 3320358B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- interrupt
- section
- exception
- executed
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/445—Exploiting fine grain parallelism, i.e. parallelism at instruction level
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Description
【0001】
【発明の属する技術分野】本発明は、コンパイラに関
し、より詳しくは、Java(Sun Microsystems社の商
標)のジャスト・イン・タイム・コンパイラ(Just In
Time Compiler)に関する。
し、より詳しくは、Java(Sun Microsystems社の商
標)のジャスト・イン・タイム・コンパイラ(Just In
Time Compiler)に関する。
【0002】
【従来の技術】現在Javaは、ネットワーク・コンピ
ューティングの共通言語としてだけでなく、プラットフ
ォームに依存しない、オブジェクト指向言語の標準的な
言語という位置付けがなされている。Javaは記述性
については他言語に比べ高いが、実行速度に問題を残し
ている。
ューティングの共通言語としてだけでなく、プラットフ
ォームに依存しない、オブジェクト指向言語の標準的な
言語という位置付けがなされている。Javaは記述性
については他言語に比べ高いが、実行速度に問題を残し
ている。
【0003】Javaプログラムにおいて、プログラム
の実行単位であるスレッドの実行は、例外によって同期
又は非同期に中断され得るという特性を有している。例
外で中断した実行は、一般的にはその例外を処理できる
Javaのcatch又はfinallyブロックのコードから再開
しなければならない。ここでいう同期的例外とは、オブ
ジェクト操作の結果あるいは明示的に記述して発行され
る例外である。また、非同期的例外とは、スレッド間で
他方のスレッドに非同期に発行する例外である。
の実行単位であるスレッドの実行は、例外によって同期
又は非同期に中断され得るという特性を有している。例
外で中断した実行は、一般的にはその例外を処理できる
Javaのcatch又はfinallyブロックのコードから再開
しなければならない。ここでいう同期的例外とは、オブ
ジェクト操作の結果あるいは明示的に記述して発行され
る例外である。また、非同期的例外とは、スレッド間で
他方のスレッドに非同期に発行する例外である。
【0004】"The Java Language Specification 11.3.
1 "(James Goslimg, Bill Joy, Guy Steele, ADDISON-
WESLEY ISBN 0-201-63451-1, 1996)には、この例外が
起こるタイミングを規定している。すなわち、プログラ
ム中で例外が起きた地点より前の実行文は実行されてい
なければならず、起きた地点より後の実行文は実行され
てはならない。これを正確な例外(precise exception
s)という。この言語仕様と、オブジェクト(メモリ)
を参照するほとんど全ての命令が例外を起こし得ること
から、Javaプログラムのコンパイル時には、命令実
行順序やメモリ参照順序の変更、レジスタ利用によるメ
モリ参照の削減は大きく制約されていた。
1 "(James Goslimg, Bill Joy, Guy Steele, ADDISON-
WESLEY ISBN 0-201-63451-1, 1996)には、この例外が
起こるタイミングを規定している。すなわち、プログラ
ム中で例外が起きた地点より前の実行文は実行されてい
なければならず、起きた地点より後の実行文は実行され
てはならない。これを正確な例外(precise exception
s)という。この言語仕様と、オブジェクト(メモリ)
を参照するほとんど全ての命令が例外を起こし得ること
から、Javaプログラムのコンパイル時には、命令実
行順序やメモリ参照順序の変更、レジスタ利用によるメ
モリ参照の削減は大きく制約されていた。
【0005】一方、FORTRANやC言語のような正
確な例外を規定していない言語では、データ依存関係を
維持する限り命令実行順序、メモリ参照順序、メモリ参
照削減に関する制約はない。これらを行うことにより、
レジスタやデータキャッシュ中のデータの利用率を高め
たり、CPU資源の利用率を高め、システムの性能を最
大限引き出すことができる。このように、ハードウエア
性能を最大限引き出すための最適化手法は、Javaに
対しては適用範囲が狭くなるかあるいは適用できず、J
avaで書かれたアプリケーションはFORTRANや
C言語で書かれるよりも実行速度で見劣りすることが多
い。
確な例外を規定していない言語では、データ依存関係を
維持する限り命令実行順序、メモリ参照順序、メモリ参
照削減に関する制約はない。これらを行うことにより、
レジスタやデータキャッシュ中のデータの利用率を高め
たり、CPU資源の利用率を高め、システムの性能を最
大限引き出すことができる。このように、ハードウエア
性能を最大限引き出すための最適化手法は、Javaに
対しては適用範囲が狭くなるかあるいは適用できず、J
avaで書かれたアプリケーションはFORTRANや
C言語で書かれるよりも実行速度で見劣りすることが多
い。
【0006】非同期的例外において、正確な例外を保証
しつつある程度の最適化を行うために提案されている手
法はポーリングである(The Java Language Specificat
ion11.3.2)。一般的に、プログラムのある区間で命令
実行順序の変更が行われても、その区間では例外処理を
行わず、例外が起きた命令よりも本来前に実行されるべ
き命令をすべて実行してから例外処理を行えば、外部か
らは正確な例外が保証されているように見える(The Ja
va Language Specification 11.3.1)。このポーリング
による手法では、スレッドは自ら例外状態を検査し、例
外状態ならば例外処理を行う。
しつつある程度の最適化を行うために提案されている手
法はポーリングである(The Java Language Specificat
ion11.3.2)。一般的に、プログラムのある区間で命令
実行順序の変更が行われても、その区間では例外処理を
行わず、例外が起きた命令よりも本来前に実行されるべ
き命令をすべて実行してから例外処理を行えば、外部か
らは正確な例外が保証されているように見える(The Ja
va Language Specification 11.3.1)。このポーリング
による手法では、スレッドは自ら例外状態を検査し、例
外状態ならば例外処理を行う。
【0007】しかしポーリングによると、例外が起きな
くても例外の有無を検査するためにオーバーヘッドが大
きな問題となる。最適化のための実行順序の入れ替えは
頻繁に行われるので、このオーバーヘッドと最適化がト
レードオフとなる。例外検査には比較的コストがかかる
ので、結果的に最適化が行えずに、高処理能力を有する
CPUの性能を活かすことができない。
くても例外の有無を検査するためにオーバーヘッドが大
きな問題となる。最適化のための実行順序の入れ替えは
頻繁に行われるので、このオーバーヘッドと最適化がト
レードオフとなる。例外検査には比較的コストがかかる
ので、結果的に最適化が行えずに、高処理能力を有する
CPUの性能を活かすことができない。
【0008】ポーリングのような例外検査にオーバーヘ
ッドのない別の例外処理方法には、割込処理がある。割
込処理では、スレッドに関する例外はスレッドの割込ハ
ンドラで処理される。例えば、スレッドTが同期又は非
同期に例外を受けると、スレッドTのコンテキストで割
込ハンドラが起動され例外処理を実施する。スレッドの
コンテキストとは、プログラム・カウンタ、スタック・
ポインタを含むスレッドの実行に不可欠なレジスタの内
容の全てである。スレッドの実行が中断されると、次の
実行再開のためにそのコンテキストが保存される。
ッドのない別の例外処理方法には、割込処理がある。割
込処理では、スレッドに関する例外はスレッドの割込ハ
ンドラで処理される。例えば、スレッドTが同期又は非
同期に例外を受けると、スレッドTのコンテキストで割
込ハンドラが起動され例外処理を実施する。スレッドの
コンテキストとは、プログラム・カウンタ、スタック・
ポインタを含むスレッドの実行に不可欠なレジスタの内
容の全てである。スレッドの実行が中断されると、次の
実行再開のためにそのコンテキストが保存される。
【0009】ここで注意しなければならないことがあ
る。Javaプログラムは以下の2つの理由で例外が起
きた後も実行を継続しなければならない。例外を受けて
も即座にそのスレッドは実行をやめることはできない。
最初の理由は、例外が起きたときプログラムがJava
のtryで記述されていた例外処理のスコープにいる場合
に、プログラムは常に当該例外を処理できるcatch又はf
inallyで記述されたプログラム節から実行を再開しなけ
ればならないからである。もう1つの理由は、前述した
ように区間A−Bで実行順序の変更があり、区間A−B
で例外が起きている場合には、正確な例外を保証するた
めに区間A−Bをすべて実行した後に例外処理に入らな
ければならないからである。
る。Javaプログラムは以下の2つの理由で例外が起
きた後も実行を継続しなければならない。例外を受けて
も即座にそのスレッドは実行をやめることはできない。
最初の理由は、例外が起きたときプログラムがJava
のtryで記述されていた例外処理のスコープにいる場合
に、プログラムは常に当該例外を処理できるcatch又はf
inallyで記述されたプログラム節から実行を再開しなけ
ればならないからである。もう1つの理由は、前述した
ように区間A−Bで実行順序の変更があり、区間A−B
で例外が起きている場合には、正確な例外を保証するた
めに区間A−Bをすべて実行した後に例外処理に入らな
ければならないからである。
【0010】これまで考えられているような割込処理で
は、例外を受けた直後に例外処理を始めるので、上記の
第2の理由に示されるような場合に実行すべき命令が実
行されない。従って最適化コードでは正確な例外が保証
できない問題がある。
は、例外を受けた直後に例外処理を始めるので、上記の
第2の理由に示されるような場合に実行すべき命令が実
行されない。従って最適化コードでは正確な例外が保証
できない問題がある。
【0011】
【発明が解決しようとする課題】本発明では、正確な例
外を保証しつつ、割込処理方式により高速に例外処理を
実施することを目的とする。
外を保証しつつ、割込処理方式により高速に例外処理を
実施することを目的とする。
【0012】また、正確な例外を保証しつつ、命令実行
順序を入れ替えることができるようにすることも目的で
ある。
順序を入れ替えることができるようにすることも目的で
ある。
【0013】また、正確な例外を保証しつつ、高速な実
行を可能にするコンパイラを提供することも目的であ
る。
行を可能にするコンパイラを提供することも目的であ
る。
【0014】
【課題を解決するための手段】本発明におけるコンパイ
ラは、以下のような処理を実施する。すなわち、プログ
ラムに含まれる命令の順番を入れ替えるステップと、実
行時に外部から観測可能な作用を有する第1命令又は例
外を生じ得る第2命令が、本来の順番において当該第1
又は第2命令より前に実行すべき命令より先に実行され
るように入れ替えられた場合、入れ替え後の第1又は第
2命令から、入れ替え前の第1又は第2命令の順番より
前の所定の命令までの区間を割込禁止区間として登録す
るステップとを実行する。この登録は、プログラムに対
して行い、さらに詳しくはプログラムのルーチン(メソ
ッド)ごとに行う。これにより、例外発生時に、正確な
例外を保証するための処理が必要な区間かどうかという
情報が簡単に取得できるようになる。
ラは、以下のような処理を実施する。すなわち、プログ
ラムに含まれる命令の順番を入れ替えるステップと、実
行時に外部から観測可能な作用を有する第1命令又は例
外を生じ得る第2命令が、本来の順番において当該第1
又は第2命令より前に実行すべき命令より先に実行され
るように入れ替えられた場合、入れ替え後の第1又は第
2命令から、入れ替え前の第1又は第2命令の順番より
前の所定の命令までの区間を割込禁止区間として登録す
るステップとを実行する。この登録は、プログラムに対
して行い、さらに詳しくはプログラムのルーチン(メソ
ッド)ごとに行う。これにより、例外発生時に、正確な
例外を保証するための処理が必要な区間かどうかという
情報が簡単に取得できるようになる。
【0015】また、ある割込禁止区間の一部が当該ある
割込禁止区間に含まれる命令より後に実行される命令を
含む他の割込禁止区間と重なる場合、当該ある割込禁止
区間内で例外が発生した場合に無効とされる、当該ある
割込禁止区間内の命令を登録するステップを実行するよ
うにすることも可能である。実施例における「区間の追
加」の場合の処理である。この無効とされる命令を実行
してしまうと、正確な例外を保証できない。
割込禁止区間に含まれる命令より後に実行される命令を
含む他の割込禁止区間と重なる場合、当該ある割込禁止
区間内で例外が発生した場合に無効とされる、当該ある
割込禁止区間内の命令を登録するステップを実行するよ
うにすることも可能である。実施例における「区間の追
加」の場合の処理である。この無効とされる命令を実行
してしまうと、正確な例外を保証できない。
【0016】さらに、ある割込禁止区間が他の割込禁止
区間を包含する場合には、他の割込禁止区間を統合する
ステップをさらに実行する場合もある。これにより登録
すべき区間が減るという効果がある。
区間を包含する場合には、他の割込禁止区間を統合する
ステップをさらに実行する場合もある。これにより登録
すべき区間が減るという効果がある。
【0017】また、第1命令に関する2つの割込禁止区
間が一部重複する場合に、2つの割込禁止区間でカバー
される区間を1つの割込禁止区間として登録するステッ
プをさらに実行する場合もある。区間の数が多過ぎる場
合には、これにより統合して、区間の数を減ずる。
間が一部重複する場合に、2つの割込禁止区間でカバー
される区間を1つの割込禁止区間として登録するステッ
プをさらに実行する場合もある。区間の数が多過ぎる場
合には、これにより統合して、区間の数を減ずる。
【0018】また、上記登録ステップは、登録された割
込禁止区間を前記プログラムのルーチンごとにまとめ
て、割込禁止マップを作成するステップと、割込禁止マ
ップ及び当該割込禁止マップを使用する割込ハンドラを
ルーチンに登録するためのコードを生成するステップと
を含む場合もある。
込禁止区間を前記プログラムのルーチンごとにまとめ
て、割込禁止マップを作成するステップと、割込禁止マ
ップ及び当該割込禁止マップを使用する割込ハンドラを
ルーチンに登録するためのコードを生成するステップと
を含む場合もある。
【0019】なお、割込禁止区間の後端は先に用いた
「所定の命令」により決まるが、移動した第1又は第2
命令の一つ前に位置する、実行時に外部から観測可能な
作用を有する命令とすることも考えられる。単純に、移
動した第1又は第2命令の1つ前の命令とすることも可
能である。
「所定の命令」により決まるが、移動した第1又は第2
命令の一つ前に位置する、実行時に外部から観測可能な
作用を有する命令とすることも考えられる。単純に、移
動した第1又は第2命令の1つ前の命令とすることも可
能である。
【0020】一方、例外が起きた時の処理は、以下のよ
うに行う。すなわち、例外発生に応答して割込を発行す
るステップと、割込により中断した処理の状態から、中
断時点の命令が中断した処理に関連する割込禁止区間内
の命令であるか判断する判断ステップと、中断時点の命
令が中断した処理に関連する割込禁止区間内の命令であ
る場合には、割込禁止区間の後ろに例外処理コードへの
分岐コードを生成する生成ステップと、中断時点の命令
の次の命令から実行を再開するステップとを実行する。
これにより、例外を通常処理する場合と本発明の処理を
必要とする場合が簡単に判断でき、且つ正確な例外を保
証するための命令の実行の後に例外処理コードに分岐す
ることができる。
うに行う。すなわち、例外発生に応答して割込を発行す
るステップと、割込により中断した処理の状態から、中
断時点の命令が中断した処理に関連する割込禁止区間内
の命令であるか判断する判断ステップと、中断時点の命
令が中断した処理に関連する割込禁止区間内の命令であ
る場合には、割込禁止区間の後ろに例外処理コードへの
分岐コードを生成する生成ステップと、中断時点の命令
の次の命令から実行を再開するステップとを実行する。
これにより、例外を通常処理する場合と本発明の処理を
必要とする場合が簡単に判断でき、且つ正確な例外を保
証するための命令の実行の後に例外処理コードに分岐す
ることができる。
【0021】また、生成ステップが、割込禁止区間内の
コードを別領域にコピーするステップと、コピーされた
コードの後ろに、例外処理コードへの分岐コードを生成
するステップとを含むようにすることも可能である。特
別な処理をしているので、割込禁止区間内のコードを別
領域にコピーして実行した方が、他の処理への影響を減
ずることができる。
コードを別領域にコピーするステップと、コピーされた
コードの後ろに、例外処理コードへの分岐コードを生成
するステップとを含むようにすることも可能である。特
別な処理をしているので、割込禁止区間内のコードを別
領域にコピーして実行した方が、他の処理への影響を減
ずることができる。
【0022】さらに、生成ステップが、割込禁止区間内
に例外時無効命令が存在している場合には、当該例外時
無効命令を実行しないよう設定するステップを含むよう
にする。正確な例外を保証するためである。
に例外時無効命令が存在している場合には、当該例外時
無効命令を実行しないよう設定するステップを含むよう
にする。正確な例外を保証するためである。
【0023】また、判断ステップが、例外が第2命令実
行中に生じた場合には、第2命令に関連して登録された
割込禁止区間について判断するステップと、他の処理に
より割込が発行された場合には、第1命令に関連して登
録された割込禁止区間について判断するステップとを含
むようにすることも考えられる。割込禁止区間ごとに同
期的例外であるか非同期的例外であるかの情報を含ま
せ、例外がどのようにして発生したかによって判断に用
いる割込禁止区間を変えるものである。
行中に生じた場合には、第2命令に関連して登録された
割込禁止区間について判断するステップと、他の処理に
より割込が発行された場合には、第1命令に関連して登
録された割込禁止区間について判断するステップとを含
むようにすることも考えられる。割込禁止区間ごとに同
期的例外であるか非同期的例外であるかの情報を含ま
せ、例外がどのようにして発生したかによって判断に用
いる割込禁止区間を変えるものである。
【0024】また、割込禁止区間中の命令を実行中に、
第2命令に関する例外が生じた場合には、当該例外を処
理するルーチンに分岐するステップをさらに含むように
することも可能である。さらに、例外時無効命令は、正
確な例外を保証する上で問題の生じ得る、実行時に外部
から観測可能な作用を有する第1命令又は例外を生じ得
る第2命令とすることも考えられる。
第2命令に関する例外が生じた場合には、当該例外を処
理するルーチンに分岐するステップをさらに含むように
することも可能である。さらに、例外時無効命令は、正
確な例外を保証する上で問題の生じ得る、実行時に外部
から観測可能な作用を有する第1命令又は例外を生じ得
る第2命令とすることも考えられる。
【0025】以上、本発明を処理フローとして示してき
たが、このような処理を実行するコンピュータを実施す
ること、このような処理を実行するためのプログラムと
して実施することも可能である。なお、このような処理
を実施するためのプログラムは、MOディスクやフロッ
ピー・ディスクやCD−ROM等の記憶媒体に記憶され
る場合もある。
たが、このような処理を実行するコンピュータを実施す
ること、このような処理を実行するためのプログラムと
して実施することも可能である。なお、このような処理
を実施するためのプログラムは、MOディスクやフロッ
ピー・ディスクやCD−ROM等の記憶媒体に記憶され
る場合もある。
【0026】
【発明の実施の形態】本発明の装置構成を図1を用いて
説明する。サーバ・コンピュータ1及びクライアント・
コンピュータ5はネットワーク3を介して接続されてい
る。クライアント・コンピュータ5は、JavaVM
(Virtual Machine)52及びOS(Operating Syste
m)53及びハードウエア(CPU及びメモリを含む)
55を含む。さらに、JavaVM52は、Javaイ
ンタープリタ54又はJava JITコンパイラ5
6、例外処理ルーチン60、及び割込ハンドラ62を含
む。インタープリタ54及びJITコンパイラ56の両
者を有している場合もある。なお、クライアント・コン
ピュータ5は、通常のコンピュータの他、メモリの大き
さが小さかったり、ハードディスク等の補助記憶装置を
含まないような、いわゆるネットワーク・コンピュータ
や情報家電の場合もある。
説明する。サーバ・コンピュータ1及びクライアント・
コンピュータ5はネットワーク3を介して接続されてい
る。クライアント・コンピュータ5は、JavaVM
(Virtual Machine)52及びOS(Operating Syste
m)53及びハードウエア(CPU及びメモリを含む)
55を含む。さらに、JavaVM52は、Javaイ
ンタープリタ54又はJava JITコンパイラ5
6、例外処理ルーチン60、及び割込ハンドラ62を含
む。インタープリタ54及びJITコンパイラ56の両
者を有している場合もある。なお、クライアント・コン
ピュータ5は、通常のコンピュータの他、メモリの大き
さが小さかったり、ハードディスク等の補助記憶装置を
含まないような、いわゆるネットワーク・コンピュータ
や情報家電の場合もある。
【0027】サーバ・コンピュータ1では、Javaソ
ースコード10は、Javaコンパイラ12によりコン
パイルされる。このコンパイルの結果が、バイトコード
14である。このバイトコード14は、ネットワーク3
を介してクライアント・コンピュータ5に送信される。
バイトコード14は、クライアント・コンピュータ5内
のWWWブラウザ(World Wide Web Browser)などに設
けられたJava仮想マシン(Java VM)52にとって
ネイティブ・コードであり、実際ハードウエア55のC
PUにて実行する場合には、Javaインタープリタ5
4や、JavaJITコンパイラ56を用いる。インタ
ープリタ54は、実行時にバイトコード14をデコード
し、命令ごとに用意される処理ルーチンを呼び出して実
行する。一方、JITコンパイラ56は、バイトコード
を事前にあるいは実行する直前にコンパイラを用いてマ
シン・コード58に変換してそれをCPUで実行する。
ースコード10は、Javaコンパイラ12によりコン
パイルされる。このコンパイルの結果が、バイトコード
14である。このバイトコード14は、ネットワーク3
を介してクライアント・コンピュータ5に送信される。
バイトコード14は、クライアント・コンピュータ5内
のWWWブラウザ(World Wide Web Browser)などに設
けられたJava仮想マシン(Java VM)52にとって
ネイティブ・コードであり、実際ハードウエア55のC
PUにて実行する場合には、Javaインタープリタ5
4や、JavaJITコンパイラ56を用いる。インタ
ープリタ54は、実行時にバイトコード14をデコード
し、命令ごとに用意される処理ルーチンを呼び出して実
行する。一方、JITコンパイラ56は、バイトコード
を事前にあるいは実行する直前にコンパイラを用いてマ
シン・コード58に変換してそれをCPUで実行する。
【0028】では、まずJITコンパイラ56の動作を
図2で説明する。最初に、バイトコード14をJITコ
ンパイラ56が使用する中間コードに変換する(ステッ
プ103)。そして、中間コードについてプログラム構
造解析を実施する(ステップ105)。例えば、基本ブ
ロック(basic block)、制御フロー(control flo
w)、ループについて解析する。その後、最適化処理1
を実施する(ステップ107)。この最適化処理1は、
メモリアクセス順序を変える等実行順序の入れ替えを含
む中間コードの最適化である。ここでは、ループ変形等
が行われる。ここまでの処理では、従来技術と変わらな
い。
図2で説明する。最初に、バイトコード14をJITコ
ンパイラ56が使用する中間コードに変換する(ステッ
プ103)。そして、中間コードについてプログラム構
造解析を実施する(ステップ105)。例えば、基本ブ
ロック(basic block)、制御フロー(control flo
w)、ループについて解析する。その後、最適化処理1
を実施する(ステップ107)。この最適化処理1は、
メモリアクセス順序を変える等実行順序の入れ替えを含
む中間コードの最適化である。ここでは、ループ変形等
が行われる。ここまでの処理では、従来技術と変わらな
い。
【0029】そして、割込禁止区間の記録処理1を実施
する(ステップ109)。ステップ107において実施
した最適化処理1が、正確な例外を保証するための処理
を必要とする場合には、その処理を必要とする区間を割
込禁止区間として記録する。ここで、割込禁止区間につ
いて説明する。注目すべき命令は、例外を起こし得る命
令と、副作用のある命令である。副作用のある命令と
は、共有メモリへの書き込み等、他のスレッドから観測
可能な作用を有する命令である。ステップ107では、
計算機の資源を有効活用できるように命令の実行順序を
変える作業を行うが、有効活用のためにはどのように実
行順序を変えてもよいというわけではない。副作用を有
する命令Sが例外を起こし得る命令Eを越えてはならな
い。これは、このように実行順序の変更を行って、Eが
例外を起こした場合、実行されるべきでないSの副作用
を打ち消すことができなくなるためである。
する(ステップ109)。ステップ107において実施
した最適化処理1が、正確な例外を保証するための処理
を必要とする場合には、その処理を必要とする区間を割
込禁止区間として記録する。ここで、割込禁止区間につ
いて説明する。注目すべき命令は、例外を起こし得る命
令と、副作用のある命令である。副作用のある命令と
は、共有メモリへの書き込み等、他のスレッドから観測
可能な作用を有する命令である。ステップ107では、
計算機の資源を有効活用できるように命令の実行順序を
変える作業を行うが、有効活用のためにはどのように実
行順序を変えてもよいというわけではない。副作用を有
する命令Sが例外を起こし得る命令Eを越えてはならな
い。これは、このように実行順序の変更を行って、Eが
例外を起こした場合、実行されるべきでないSの副作用
を打ち消すことができなくなるためである。
【0030】もし、移動させる命令が副作用を有する命
令Snで、移動によって他の副作用を有する命令S1,S
2,...Sn-1を追い抜くならば、移動後のSnから追
い抜かれた副作用を有する命令の最後Sn-1までを割込
禁止区間Rとする。なお、移動後のS1,S2,...S
n-1、移動前のSnの各々の間に副作用も例外もない命令
があってもよい。図3に同様な例を示す。S3は点線で
示したボックスに位置していた、副作用を有する命令で
あって、最適化によりS1より前に移動した。この場
合、割込禁止区間Rは、S3からS2である。なお、S2
から点線のボックスまでは副作用もなく例外も起こさな
い命令が存在する場合もあるが、そのような命令は他に
影響を及ぼさないので、割込禁止区間Rに含めなくとも
よい。但し、点線のボックスの1つ前の命令(又はS2
から点線のボックスの1つ前の命令のいずれか)までを
割込禁止区間Rとすることも可能である。
令Snで、移動によって他の副作用を有する命令S1,S
2,...Sn-1を追い抜くならば、移動後のSnから追
い抜かれた副作用を有する命令の最後Sn-1までを割込
禁止区間Rとする。なお、移動後のS1,S2,...S
n-1、移動前のSnの各々の間に副作用も例外もない命令
があってもよい。図3に同様な例を示す。S3は点線で
示したボックスに位置していた、副作用を有する命令で
あって、最適化によりS1より前に移動した。この場
合、割込禁止区間Rは、S3からS2である。なお、S2
から点線のボックスまでは副作用もなく例外も起こさな
い命令が存在する場合もあるが、そのような命令は他に
影響を及ぼさないので、割込禁止区間Rに含めなくとも
よい。但し、点線のボックスの1つ前の命令(又はS2
から点線のボックスの1つ前の命令のいずれか)までを
割込禁止区間Rとすることも可能である。
【0031】この割込禁止区間の目的は、区間で非同期
例外が発生した時に、例外を処理する前にこの区間の命
令をすべて実行させることによって、元のS1乃至Snの
副作用を保持することである。このようにしてできた区
間を、非同期割込禁止区間とする。
例外が発生した時に、例外を処理する前にこの区間の命
令をすべて実行させることによって、元のS1乃至Snの
副作用を保持することである。このようにしてできた区
間を、非同期割込禁止区間とする。
【0032】また、移動させる命令が例外を起こし得る
命令Eで、移動によって他の副作用を有する命令S
1,...Snを追い抜くならば、移動後のEから追い抜
かれた副作用を有する命令の最後Snまでを割込禁止区
間とする。図4に同様な例を示す。例外を起こし得る命
令Eは副作用を有する命令S1乃至S3を追い抜いた。よ
って、ここではEからS3までが割込禁止区間Rであ
る。この割込禁止区間の目的は、区間でEによる同期例
外が発生した時、例外を処理する前に区間の命令をすべ
て実行させることにより、Eが実行される前のS1乃至
Snの副作用を保持することである。このようにしてで
きた区間を、同期割込禁止区間とする。なお、区間の後
端は非同期割込禁止区間のように変更可能である。
命令Eで、移動によって他の副作用を有する命令S
1,...Snを追い抜くならば、移動後のEから追い抜
かれた副作用を有する命令の最後Snまでを割込禁止区
間とする。図4に同様な例を示す。例外を起こし得る命
令Eは副作用を有する命令S1乃至S3を追い抜いた。よ
って、ここではEからS3までが割込禁止区間Rであ
る。この割込禁止区間の目的は、区間でEによる同期例
外が発生した時、例外を処理する前に区間の命令をすべ
て実行させることにより、Eが実行される前のS1乃至
Snの副作用を保持することである。このようにしてで
きた区間を、同期割込禁止区間とする。なお、区間の後
端は非同期割込禁止区間のように変更可能である。
【0033】この非同期割込禁止区間であるか同期割込
禁止区間であるかは、区間の記録の際に区別しておく。
禁止区間であるかは、区間の記録の際に区別しておく。
【0034】ステップ107では、図3及び図4のよう
な単純な命令の入れ替えだけでなく、区間が重なるよう
な命令の移動も実施される。区間の重ね合せには、大き
く2つの態様がある。追加と統合である。既にある区間
を包含する区間を設定する場合には、既にある区間は必
要なくなる。これが区間の統合である。既にある区間と
重なりを有する区間を設定した時には、区間の追加が生
じる。
な単純な命令の入れ替えだけでなく、区間が重なるよう
な命令の移動も実施される。区間の重ね合せには、大き
く2つの態様がある。追加と統合である。既にある区間
を包含する区間を設定する場合には、既にある区間は必
要なくなる。これが区間の統合である。既にある区間と
重なりを有する区間を設定した時には、区間の追加が生
じる。
【0035】同期割込禁止区間同士では区間の統合及び
区間の追加が有り得る。また、非同期割込禁止区間同士
では区間の統合及び区間の追加が有り得る。非同期割込
禁止区間と同期割込禁止区間では、区間の追加のみ有り
得る。
区間の追加が有り得る。また、非同期割込禁止区間同士
では区間の統合及び区間の追加が有り得る。非同期割込
禁止区間と同期割込禁止区間では、区間の追加のみ有り
得る。
【0036】区間の追加の場合には、例外時無効命令を
記録する(ステップ109)。この例外時無効命令と
は、その区間で例外が起きて区間内の命令を実行する際
に、その区間内の命令であるが、実行しない命令であ
る。例えば、図5の例のように、副作用を有する命令S
2をS1より前に移動した後、副作用を有する命令S4を
S1とS2の間に移動させた場合、S2乃至S1が非同期割
込禁止区間R1であり、S4乃至S3は非同期割込禁止区
間R2である。なお、最適化処理1の以前にはS1,S
2,S3,S4と並んでいた。このような状況下で、S4は
R1の例外時無効命令となる。なぜなら、R1の内部、R
2の外部、すなわちS2とS4の間で非同期例外が発生し
た場合には、副作用を有する命令S1及びS2のみが実行
されるべきであって、S4は実行すべきでないからであ
る。一般的に、既にあった区間に追加の区間の命令が挿
入される時、挿入される命令は既にあった区間の例外時
無効命令となる。
記録する(ステップ109)。この例外時無効命令と
は、その区間で例外が起きて区間内の命令を実行する際
に、その区間内の命令であるが、実行しない命令であ
る。例えば、図5の例のように、副作用を有する命令S
2をS1より前に移動した後、副作用を有する命令S4を
S1とS2の間に移動させた場合、S2乃至S1が非同期割
込禁止区間R1であり、S4乃至S3は非同期割込禁止区
間R2である。なお、最適化処理1の以前にはS1,S
2,S3,S4と並んでいた。このような状況下で、S4は
R1の例外時無効命令となる。なぜなら、R1の内部、R
2の外部、すなわちS2とS4の間で非同期例外が発生し
た場合には、副作用を有する命令S1及びS2のみが実行
されるべきであって、S4は実行すべきでないからであ
る。一般的に、既にあった区間に追加の区間の命令が挿
入される時、挿入される命令は既にあった区間の例外時
無効命令となる。
【0037】以上は非同期割込禁止区間同士の追加の場
合であるが、同期割込禁止区間同士の追加の場合でも同
様である。図6に一例を示す。図6から明らかなよう
に、S1,S2,E1,S3,E2の順番で並んでいたもの
である。このような状況下では、E2が例外時無効命令
となる。E1で例外が発生すると、元々の順番で実行し
ないはずのE2を実行してしまうからである。なお、E2
を例外時無効命令としないという方針も可能である。例
外を起こし得る命令E2は、副作用を及ぼさないからで
ある。この場合、E1で例外が発生し、同期割込禁止区
間R1を実行中、E2で例外が生じた場合にはこれを無視
する。但し、この無視して先の命令を実行するためにC
PUによってはコストがかかる場合もあるので、本実施
例では例外時無効命令とする。
合であるが、同期割込禁止区間同士の追加の場合でも同
様である。図6に一例を示す。図6から明らかなよう
に、S1,S2,E1,S3,E2の順番で並んでいたもの
である。このような状況下では、E2が例外時無効命令
となる。E1で例外が発生すると、元々の順番で実行し
ないはずのE2を実行してしまうからである。なお、E2
を例外時無効命令としないという方針も可能である。例
外を起こし得る命令E2は、副作用を及ぼさないからで
ある。この場合、E1で例外が発生し、同期割込禁止区
間R1を実行中、E2で例外が生じた場合にはこれを無視
する。但し、この無視して先の命令を実行するためにC
PUによってはコストがかかる場合もあるので、本実施
例では例外時無効命令とする。
【0038】非同期割込禁止区間と同期割込禁止区間の
追加の場合も同様である。図7に例を示す。S1,S2,
E1,S3,S4の順番で並んでいた。このような状況下
においては、S4が同期割込禁止区間R1の例外時無効命
令となる。
追加の場合も同様である。図7に例を示す。S1,S2,
E1,S3,S4の順番で並んでいた。このような状況下
においては、S4が同期割込禁止区間R1の例外時無効命
令となる。
【0039】図2に戻ると、ステップ109までが実行
されている。なお、ステップ109では割込禁止区間及
び例外時無効命令のアドレスは中間コードにおけるアド
レスである。次に、オブジェクト・コードの生成を行う
(ステップ111)。すなわち、中間コードに対応する
実行可能コードを生成する。これは従来の処理と変わり
がない。また、システムの割込処理方式に応じて、割込
ハンドラ62の登録/解除のためのコードを生成する。
例えば構造化例外をサポートしているOS/2(Intern
ational Business Machines Corp. の商標)では、例外
処理を必要とするJavaメソッドに対して、生成する
オブジェクト・コードのプロローグ及びエピローグ・コ
ードで、それぞれ割込ハンドラ62に登録及び解除を行
う。このステップ111では、合わせて記録されている
割込禁止区間及び例外時無効命令の中間コードにおける
アドレスを、オブジェクト・コードにおけるアドレスに
変換する。
されている。なお、ステップ109では割込禁止区間及
び例外時無効命令のアドレスは中間コードにおけるアド
レスである。次に、オブジェクト・コードの生成を行う
(ステップ111)。すなわち、中間コードに対応する
実行可能コードを生成する。これは従来の処理と変わり
がない。また、システムの割込処理方式に応じて、割込
ハンドラ62の登録/解除のためのコードを生成する。
例えば構造化例外をサポートしているOS/2(Intern
ational Business Machines Corp. の商標)では、例外
処理を必要とするJavaメソッドに対して、生成する
オブジェクト・コードのプロローグ及びエピローグ・コ
ードで、それぞれ割込ハンドラ62に登録及び解除を行
う。このステップ111では、合わせて記録されている
割込禁止区間及び例外時無効命令の中間コードにおける
アドレスを、オブジェクト・コードにおけるアドレスに
変換する。
【0040】さらに、最適化処理2を実施する(ステッ
プ113)。ここでは、メモリ・アクセス順序を変える
処理を含む、オブジェクト・コードの最適化、コードス
ケジュールなどが行われる。この処理も従来と変わりが
ない。但し、オブジェクト・コードの最適化を行ったの
で、記録されている割込禁止区間及び例外時無効命令の
アドレスを、最適化処理後のアドレスに変換する。
プ113)。ここでは、メモリ・アクセス順序を変える
処理を含む、オブジェクト・コードの最適化、コードス
ケジュールなどが行われる。この処理も従来と変わりが
ない。但し、オブジェクト・コードの最適化を行ったの
で、記録されている割込禁止区間及び例外時無効命令の
アドレスを、最適化処理後のアドレスに変換する。
【0041】その後ステップ113により正確な例外を
保証するために割込禁止区間を設定すべきであるなら
ば、ステップ113後のアドレスで割込禁止区間を記録
する(割込禁止区間記録処理2、ステップ115)。ま
た、区間の追加が発生した場合には、例外時無効命令も
記録する。
保証するために割込禁止区間を設定すべきであるなら
ば、ステップ113後のアドレスで割込禁止区間を記録
する(割込禁止区間記録処理2、ステップ115)。ま
た、区間の追加が発生した場合には、例外時無効命令も
記録する。
【0042】最後に、ステップ115までに記録された
割込禁止区間(非同期か同期かの区別を含む)をJav
aメソッド毎にまとめて、割込禁止マップとする(ステ
ップ117)。割込禁止マップには、そのメソッドに含
まれる割込禁止区間の例外時無効命令も含まれる。割込
禁止マップは、割込ハンドラが参照できる場所に登録す
る。例えばOS/2では、例外処理を必要とするJav
aメソッド毎に割込ハンドラ62の登録コードが生成さ
れ、登録コードには割込禁止マップのアドレスも含む。
これにより、実行時にメソッドに割込ハンドラ62と割
込禁止マップを登録する。
割込禁止区間(非同期か同期かの区別を含む)をJav
aメソッド毎にまとめて、割込禁止マップとする(ステ
ップ117)。割込禁止マップには、そのメソッドに含
まれる割込禁止区間の例外時無効命令も含まれる。割込
禁止マップは、割込ハンドラが参照できる場所に登録す
る。例えばOS/2では、例外処理を必要とするJav
aメソッド毎に割込ハンドラ62の登録コードが生成さ
れ、登録コードには割込禁止マップのアドレスも含む。
これにより、実行時にメソッドに割込ハンドラ62と割
込禁止マップを登録する。
【0043】ステップ117では、割込禁止マップを作
成する際に、可能ならば区間の統合を行う。区間の統合
は、先に説明したようにある区間が他の区間に包含され
るような場合が通常であるが、区間が多い場合には非同
期割込禁止区間同士の追加を統合にすることも可能であ
る。すなわち、図5のR1及びR2を合わせて1つの非同
期割込禁止区間とするのである。但し、このような場合
には例外時無効命令はなくなる。これは非同期に例外が
発生する場合には、スレッド1が例外をスレッド2に投
げる時間が多少遅れてもよいことになっているためであ
る(The Java Language Specification 11.3.2)。
成する際に、可能ならば区間の統合を行う。区間の統合
は、先に説明したようにある区間が他の区間に包含され
るような場合が通常であるが、区間が多い場合には非同
期割込禁止区間同士の追加を統合にすることも可能であ
る。すなわち、図5のR1及びR2を合わせて1つの非同
期割込禁止区間とするのである。但し、このような場合
には例外時無効命令はなくなる。これは非同期に例外が
発生する場合には、スレッド1が例外をスレッド2に投
げる時間が多少遅れてもよいことになっているためであ
る(The Java Language Specification 11.3.2)。
【0044】以上のように、割込禁止区間はメソッドご
とに登録され、割込ハンドラ62により用いられること
ができるようになった。
とに登録され、割込ハンドラ62により用いられること
ができるようになった。
【0045】次に、割込ハンドラ62の処理について説
明する。本実施例では例外が発生すると、割込が発行さ
れ、割込ハンドラ62が起動される。割込によりプログ
ラムの実行はそのプログラムの意図とは無関係に中断す
る。例外に応答して割込を発行する処理については、従
来と同様であり、オペレーティング・システム53にお
ける割込機構を使用する。
明する。本実施例では例外が発生すると、割込が発行さ
れ、割込ハンドラ62が起動される。割込によりプログ
ラムの実行はそのプログラムの意図とは無関係に中断す
る。例外に応答して割込を発行する処理については、従
来と同様であり、オペレーティング・システム53にお
ける割込機構を使用する。
【0046】割込が発行され割込ハンドラ62が起動さ
れると、割込により中断したスレッドのコンテキスト中
のプログラム・カウンタから、例外を起こした命令のア
ドレス(同期例外の場合)又は中断したスレッドの中断
時に実行していた命令のアドレス(非同期例外の場合)
を取得する(ステップ123)。そして、例外属性を参
照して、その命令アドレスが割込禁止区間内の命令であ
るか判断する(ステップ125)。その際、例外属性
が、非同期割込を示している場合には非同期割込禁止区
間を、同期割込を示している場合には同期割込禁止区間
を判断対象とする。もし、割込禁止区間でなければ、例
外をすぐに処理できるので、例外処理ルーチン60に移
行する(ステップ127)。
れると、割込により中断したスレッドのコンテキスト中
のプログラム・カウンタから、例外を起こした命令のア
ドレス(同期例外の場合)又は中断したスレッドの中断
時に実行していた命令のアドレス(非同期例外の場合)
を取得する(ステップ123)。そして、例外属性を参
照して、その命令アドレスが割込禁止区間内の命令であ
るか判断する(ステップ125)。その際、例外属性
が、非同期割込を示している場合には非同期割込禁止区
間を、同期割込を示している場合には同期割込禁止区間
を判断対象とする。もし、割込禁止区間でなければ、例
外をすぐに処理できるので、例外処理ルーチン60に移
行する(ステップ127)。
【0047】一方、割込禁止区間内の命令であった場合
には、当該割込禁止区間内の命令コードを別領域にコピ
ーする(ステップ129)。このコピーは行わなくても
よいが、特別な処理をしていることを区別可能にするた
めに行う。この際、その割込禁止区間に例外時無効命令
が登録されている場合には、ステップ133でスレッド
の実行を再開した際に実行しないように、例外時無効命
令のコードはコピーしない、又はNOPで置き換える等
の処置が必要である。そして、コピーの最後に例外処理
ルーチン60への分岐コードを糊コードとして付加す
る。よって、割込禁止区間内の命令を実行し終えると例
外処理ルーチン60を実行するようになる。次に、プロ
グラム・カウンタを、例外を起こした命令のコピー上に
おける次の命令(同期例外の場合)、又はスレッド中断
時に実行中の命令のコピー上における次の命令に修正す
る(ステップ131)。そして、スレッドの実行を再開
する(ステップ133)。なお、糊コードを生成して付
加したので、自動的に例外処理ルーチン60に移行する
(ステップ127)。
には、当該割込禁止区間内の命令コードを別領域にコピ
ーする(ステップ129)。このコピーは行わなくても
よいが、特別な処理をしていることを区別可能にするた
めに行う。この際、その割込禁止区間に例外時無効命令
が登録されている場合には、ステップ133でスレッド
の実行を再開した際に実行しないように、例外時無効命
令のコードはコピーしない、又はNOPで置き換える等
の処置が必要である。そして、コピーの最後に例外処理
ルーチン60への分岐コードを糊コードとして付加す
る。よって、割込禁止区間内の命令を実行し終えると例
外処理ルーチン60を実行するようになる。次に、プロ
グラム・カウンタを、例外を起こした命令のコピー上に
おける次の命令(同期例外の場合)、又はスレッド中断
時に実行中の命令のコピー上における次の命令に修正す
る(ステップ131)。そして、スレッドの実行を再開
する(ステップ133)。なお、糊コードを生成して付
加したので、自動的に例外処理ルーチン60に移行する
(ステップ127)。
【0048】例外処理ルーチン60は、例外を通常どお
り処理するためのルーチンであり、従来と変わらないの
でここでは説明を省略する。なお、別領域にコピーした
コードを実行中に他の例外が発生する場合もある。この
場合には、同期的例外ならば即座にその処理を実施し、
非同期的な例外であれば例外要求を待ち行列に入れ処理
を遅延させる。
り処理するためのルーチンであり、従来と変わらないの
でここでは説明を省略する。なお、別領域にコピーした
コードを実行中に他の例外が発生する場合もある。この
場合には、同期的例外ならば即座にその処理を実施し、
非同期的な例外であれば例外要求を待ち行列に入れ処理
を遅延させる。
【0049】以上のようにすれば、正確な例外を保証し
つつ、従来FORTRANやC言語において行われてき
たような最適化処理を実施することができるようにな
る。
つつ、従来FORTRANやC言語において行われてき
たような最適化処理を実施することができるようにな
る。
【0050】以上は一実施例であって、様々な変形が可
能である。特に正確な例外を必要とする他の言語にも適
用可能であり、その際にはJavaのようなバイトコー
ドが存在しない場合も考えられる。さらに中間コードを
取り扱わない場合も考えられる。そのような場合には、
図2のように最適化処理を2回に分けて行わないかもし
れない。一方、3回以上に分けて実施するかもしれな
い。
能である。特に正確な例外を必要とする他の言語にも適
用可能であり、その際にはJavaのようなバイトコー
ドが存在しない場合も考えられる。さらに中間コードを
取り扱わない場合も考えられる。そのような場合には、
図2のように最適化処理を2回に分けて行わないかもし
れない。一方、3回以上に分けて実施するかもしれな
い。
【0051】
【実施例】図9に一例を示す。各四角は命令を示す。I
1及びI4は例外を起こし得る命令である。また他の命令
は副作用を有している。矢印はデータ依存関係を示して
いる。従来ではI4を前方に移動すると正確な例外を保
証できないので、図9のような命令の最適化は不可能で
あった。しかし、通常のプロセッサでは実行ユニットが
複数あり、図9をそのまま実行すると1系統実行ユニッ
トしか用いられなくなってしまう。そこで、I1とI4、
I2とI5、I3とI6をペアリングして、2系統の実行ユ
ニットを使用することにする。そうすれば実行速度は単
純に2倍になる。
1及びI4は例外を起こし得る命令である。また他の命令
は副作用を有している。矢印はデータ依存関係を示して
いる。従来ではI4を前方に移動すると正確な例外を保
証できないので、図9のような命令の最適化は不可能で
あった。しかし、通常のプロセッサでは実行ユニットが
複数あり、図9をそのまま実行すると1系統実行ユニッ
トしか用いられなくなってしまう。そこで、I1とI4、
I2とI5、I3とI6をペアリングして、2系統の実行ユ
ニットを使用することにする。そうすれば実行速度は単
純に2倍になる。
【0052】但し、ペアリングの結果、図9が図10に
なるとI4乃至I3(I4,I2,I5及びI3:同期割込禁
止区間)及びI5乃至I3(I5及びI3:非同期割込禁止
区間)が割込禁止区間となる。I4が例外を起こすと、
割込禁止区間内の各命令はコピーされ、I2及びI3が実
行される。I5は例外時無効命令であるから実行されな
い。
なるとI4乃至I3(I4,I2,I5及びI3:同期割込禁
止区間)及びI5乃至I3(I5及びI3:非同期割込禁止
区間)が割込禁止区間となる。I4が例外を起こすと、
割込禁止区間内の各命令はコピーされ、I2及びI3が実
行される。I5は例外時無効命令であるから実行されな
い。
【0053】
【効果】正確な例外を保証しつつ、割込処理方式により
高速に例外処理を実施することができた。
高速に例外処理を実施することができた。
【0054】また、正確な例外を保証しつつ、命令実行
順序を入れ替えることができるようにすることもでき
た。
順序を入れ替えることができるようにすることもでき
た。
【0055】また、正確な例外を保証しつつ、高速な実
行を可能にするコンパイラを提供することもできた。
行を可能にするコンパイラを提供することもできた。
【図1】本願発明の装置構成を表す図である。
【図2】JITコンパイラの処理のフローを表す図であ
る。
る。
【図3】非同期割込禁止区間を説明するための図であ
る。
る。
【図4】同期割込禁止区間を説明するための図である。
【図5】非同期割込禁止区間の追加を説明するための図
である。
である。
【図6】同期割込禁止区間の追加を説明するための図で
ある。
ある。
【図7】非同期割込禁止区間と同期割込禁止区間の追加
を説明するための図である。
を説明するための図である。
【図8】割込ハンドラ62の処理フローを説明するため
の図である。
の図である。
【図9】命令列の例を説明するための図である。
【図10】2つ実行ユニットがある場合の命令列の処理
順番を示すための図である。
順番を示すための図である。
1 サーバ・コンピュータ 3 ネットワーク 5 クライアント・コンピュータ 52 JavaVM 54 Javaインタプリタ 56 Java JITコンパイラ 58 マシンコード 60 例外処理ルーチン 62 割込ハンドラ 53 OS 55 ハードウエア(CPU及びメモリを含む)
───────────────────────────────────────────────────── フロントページの続き (72)発明者 小 松 秀 昭 神奈川県大和市下鶴間1623番地14 日本 アイ・ビー・エム株式会社 東京基礎研 究所内 (56)参考文献 特開 平8−123685(JP,A) B.Steensgaard他,Ob ject and native co de thread mobility among heterogeneo us computers,Proce edings of the fift eenth ACM symposiu m on Operating sys tems principles, 1995,p.68−77 (58)調査した分野(Int.Cl.7,DB名) G06F 9/45 G06F 9/46
Claims (23)
- 【請求項1】プログラムをコンパイルする方法であっ
て、 前記プログラムに含まれる命令の順番を入れ替えるステ
ップと、 実行時に外部から観測可能な作用を有する第1命令又は
例外を生じ得る第2命令が、本来の順番において当該第
1又は第2命令より前に実行すべき命令より先に実行さ
れるように入れ替えられた場合、入れ替え後の前記第1
又は第2命令から、入れ替え前の前記第1又は第2命令
の順番より前の所定の命令までの区間を割込禁止区間と
して登録する登録ステップと、 を含むコンパイル方法。 - 【請求項2】ある割込禁止区間の一部が当該ある割込禁
止区間に含まれる命令より後に実行される命令を含む他
の割込禁止区間と重なる場合、前記ある割込禁止区間内
で例外が発生した場合に無効とされる、当該ある割込禁
止区間内の命令を登録するステップをさらに含む請求項
1記載のコンパイル方法。 - 【請求項3】ある割込禁止区間が他の割込禁止区間を包
含する場合には、他の割込禁止区間を統合するステップ
をさらに含む請求項1記載のコンパイル方法。 - 【請求項4】前記第1命令に関する2つの割込禁止区間
が一部重複する場合に、前記2つの割込禁止区間でカバ
ーされる区間を1つの割込禁止区間として登録するステ
ップをさらに含む請求項1記載のコンパイル方法。 - 【請求項5】前記登録ステップは、前記割込禁止区間を
前記プログラムのルーチンごとにまとめて、割込禁止マ
ップを作成するステップと、 前記割込禁止マップ及び当該割込禁止マップを使用する
割込ハンドラを前記ルーチンに登録するためのコードを
生成するステップと、 を含む請求項1記載のコンパイル方法。 - 【請求項6】前記所定の命令が、前記第1又は第2命令
の一つ前に位置する、実行時に外部から観測可能な作用
を有する命令であることを特徴とする請求項1記載のコ
ンパイル方法。 - 【請求項7】実行時に外部から観測可能な作用を有する
第1命令又は例外を生じ得る第2命令が、本来の順番に
おいて当該第1又は第2命令より前に実行すべき命令よ
り先に実行されるように入れ替えられた場合、入れ替え
後の前記第1又は第2命令から、入れ替え前の前記第1
又は第2命令の順番より前の所定の命令までの区間が割
込禁止区間として登録されたコードを実行中、発生した
例外を処理するための方法であって、 例外発生に応答して割込を発行するステップと、 前記割込により中断した処理の状態から、中断時点の命
令が前記中断した処理に関連する前記割込禁止区間内の
命令であるか判断する判断ステップと、 前記中断時点の命令が前記中断した処理に関連する前記
割込禁止区間内の命令である場合には、前記割込禁止区
間の後ろに例外処理コードへの分岐コードを生成する生
成ステップと、 前記中断時点の命令の次の命令から実行を再開するステ
ップとを含む例外処理方法。 - 【請求項8】前記生成ステップが、 前記割込禁止区間内のコードを別領域にコピーするステ
ップと、 コピーされたコードの後ろに、例外処理コードへの分岐
コードを生成するステップとを含む、請求項7記載の例
外処理方法。 - 【請求項9】前記生成ステップが、 前記割込禁止区間内に例外時無効命令が存在している場
合には、当該例外時無効命令を実行しないよう設定する
ステップをさらに含む請求項8記載の例外処理方法。 - 【請求項10】前記判断ステップが、 例外が前記第2命令実行中に生じた場合には、前記第2
命令に関連して登録された割込禁止区間について判断す
るステップと、 他の処理により割込が発行された場合には、前記第1命
令に関連して登録された割込禁止区間について判断する
ステップと、 を含む請求項7記載の例外処理方法。 - 【請求項11】前記割込禁止区間中の命令を実行中に、
前記第2命令に関する例外が生じた場合には、当該例外
を処理するルーチンに分岐するステップと、 をさらに含む請求項7記載の例外処理方法。 - 【請求項12】前記割込禁止区間内に例外時無効命令が
存在している場合には、当該例外時無効命令は、前記第
1命令又は第2命令であることを特徴とする請求項7記
載の例外処理方法。 - 【請求項13】コンピュータに格納されたコンパイラを
実行させる当該コンピュータであって、 前記コンパイラは、 前記プログラムに含まれる命令の順番を入れ替える最適
化処理手段と、 実行時に外部から観測可能な作用を有する第1命令又は
例外を生じ得る第2命令が、本来の順番において当該第
1又は第2命令より前に実行すべき命令より先に実行さ
れるように入れ替えられた場合、入れ替え後の前記第1
又は第2命令から、入れ替え前の前記第1又は第2命令
の順番より前の所定の命令までの区間を割込禁止区間と
して登録する登録処理手段と、 を含む、コンピュータ。 - 【請求項14】前記登録処理手段は、さらに、 ある割込禁止区間の一部が当該ある割込禁止区間に含ま
れる命令より後に実行される命令を含む他の割込禁止区
間と重なる場合、前記ある割込禁止区間内で例外が発生
した場合に無効とされる、当該ある割込禁止区間内の命
令を登録する請求項13記載のコンピュータ。 - 【請求項15】前記登録処理手段は、 前記割込禁止区間を前記プログラムのルーチンごとにま
とめて、割込禁止マップを作成する手段と、 前記割込禁止マップ及び当該割込禁止マップを使用する
割込ハンドラを前記ルーチンに登録するためのコードを
生成する手段と、 を含む、請求項13記載のコンピュータ。 - 【請求項16】実行時に外部から観測可能な作用を有す
る第1命令又は例外を生じ得る第2命令が、本来の順番
において当該第1又は第2命令より前に実行すべき命令
より先に実行されるように入れ替えられた場合、入れ替
え後の前記第1又は第2命令から、入れ替え前の前記第
1又は第2命令の順番より前の所定の命令までの区間が
割込禁止区間として登録されたコードを実行するコンピ
ュータであって、 例外発生に応答して割込を発行する手段と、 割込ハンドラと を有し、 前記割込ハンドラは、 前記割込により中断した処理の状態から、中断時点の命
令が前記中断した処理に関連する前記割込禁止区間内の
命令であるか判断する判断手段と、 前記中断時点の命令が前記中断した処理に関連する前記
割込禁止区間内の命令である場合には、前記割込禁止区
間の後ろに例外処理コードへの分岐コードを生成する生
成手段と、 前記中断時点の命令の次の命令から実行を再開させる手
段とを有する、コンピュータ。 - 【請求項17】前記生成手段は、 前記割込禁止区間内のコードを別領域にコピーするステ
ップと、 コピーされたコードの後ろに、例外処理コードへの分岐
コードを生成するステップとを実行する、請求項16記
載のコンピュータ。 - 【請求項18】前記生成手段は、 前記割込禁止区間内に例外時無効命令が存在している場
合には、当該例外時無効命令を実行しないよう設定する
ステップを実行する、請求項17記載のコンピュータ。 - 【請求項19】前記判断手段は、 例外が前記第2命令実行中に生じた場合には、前記第2
命令に関連して登録された割込禁止区間について判断す
るステップと、 他の処理により割込が発行された場合には、前記第1命
令に関連して登録された割込禁止区間について判断する
ステップと、 を実行する、請求項16記載のコンピュータ。 - 【請求項20】プログラムをコンピュータにコンパイル
させるコンパイラを格納した記憶媒体であって、 前記コンパイラは、前記コンピュータに、 前記プログラムに含まれる命令の順番を入れ替えるステ
ップと、 実行時に外部から観測可能な作用を有する第1命令又は
例外を生じ得る第2命令が、本来の順番において当該第
1又は第2命令より前に実行すべき命令より先に実行さ
れるように入れ替えられた場合、入れ替え後の前記第1
又は第2命令から、入れ替え前の前記第1又は第2命令
の順番より前の所定の命令までの区間を割込禁止区間と
して登録するステップと、 を実行させる、記憶媒体。 - 【請求項21】前記コンパイラは、 ある割込禁止区間の一部が当該ある割込禁止区間に含ま
れる命令より後に実行される命令を含む他の割込禁止区
間と重なる場合、前記ある割込禁止区間内で例外が発生
した場合に無効とされる、当該ある割込禁止区間内の命
令を登録するステップをさらに実行させる、請求項20
記載の記憶媒体。 - 【請求項22】実行時に外部から観測可能な作用を有す
る第1命令又は例外を生じ得る第2命令が、本来の順番
において当該第1又は第2命令より前に実行すべき命令
より先に実行されるように入れ替えられた場合、入れ替
え後の前記第1又は第2命令から、入れ替え前の前記第
1又は第2命令の順番より前の所定の命令までの区間が
割込禁止区間として登録されたコードを実行中、発生し
た例外を処理するためのプログラムを格納した記憶媒体
であって、 前記プログラムは、例外発生に応答して割込が発行され
た後、コンピュータに、 前記割込により中断した処理の状態から、中断時点の命
令が前記中断した処理に関連する前記割込禁止区間内の
命令であるか判断する判断ステップと、 前記中断時点の命令が前記中断した処理に関連する前記
割込禁止区間内の命令である場合には、前記割込禁止区
間の後ろに例外処理コードへの分岐コードを生成する生
成ステップと、 前記中断時点の命令の次の命令から実行を再開するステ
ップとを実行させる、記憶媒体。 - 【請求項23】前記生成ステップが、 前記割込禁止区間内のコードを別領域にコピーするステ
ップと、 コピーされたコードの後ろに、例外処理コードへの分岐
コードを生成するステップと を含む、請求項22記載の記録媒体。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP17094598A JP3320358B2 (ja) | 1998-06-18 | 1998-06-18 | コンパイル方法、例外処理方法、及びコンピュータ |
US09/334,789 US6634023B1 (en) | 1998-06-18 | 1999-06-16 | Compile method, exception handling method and computer |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP17094598A JP3320358B2 (ja) | 1998-06-18 | 1998-06-18 | コンパイル方法、例外処理方法、及びコンピュータ |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2000020320A JP2000020320A (ja) | 2000-01-21 |
JP3320358B2 true JP3320358B2 (ja) | 2002-09-03 |
Family
ID=15914297
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP17094598A Expired - Fee Related JP3320358B2 (ja) | 1998-06-18 | 1998-06-18 | コンパイル方法、例外処理方法、及びコンピュータ |
Country Status (2)
Country | Link |
---|---|
US (1) | US6634023B1 (ja) |
JP (1) | JP3320358B2 (ja) |
Families Citing this family (47)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6470493B1 (en) * | 1999-09-30 | 2002-10-22 | Compaq Information Technologies Group, L.P. | Computer method and apparatus for safe instrumentation of reverse executable program modules |
JP2001256062A (ja) * | 2000-03-09 | 2001-09-21 | Omron Corp | 割込処理方法およびその方法を用いた演算処理装置 |
JP3664478B2 (ja) * | 2001-03-29 | 2005-06-29 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンパイラ、変換プログラム、例外処理プログラム及びこれらを用いたコンピュータ装置 |
US20010029604A1 (en) * | 2001-04-27 | 2001-10-11 | Jacob Dreyband | Descriptive data construct mapping method and apparatus |
US6993751B2 (en) * | 2001-05-14 | 2006-01-31 | Microsoft Corporation | Placing exception throwing instructions in compiled code |
JP3790683B2 (ja) | 2001-07-05 | 2006-06-28 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンピュータ装置、その例外処理プログラム及びコンパイル方法 |
EP1310871A2 (en) * | 2001-10-23 | 2003-05-14 | Sun Microsystems, Inc. | System and method for asynchronous transfer of control |
US7036118B1 (en) * | 2001-12-20 | 2006-04-25 | Mindspeed Technologies, Inc. | System for executing computer programs on a limited-memory computing machine |
JP3900485B2 (ja) * | 2002-07-29 | 2007-04-04 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 最適化装置、コンパイラプログラム、最適化方法、及び記録媒体 |
US7296257B1 (en) * | 2002-08-01 | 2007-11-13 | Tymesys Corporation | Techniques for exception handling by rewriting dispatch table elements |
US7003762B2 (en) * | 2002-08-01 | 2006-02-21 | Sas Institute Inc. | Computer-implemented exception handling system and method |
US7320121B2 (en) * | 2002-08-01 | 2008-01-15 | Sas Institute Inc. | Computer-implemented system and method for generating embedded code to add functionality to a user application |
GB0220282D0 (en) * | 2002-08-31 | 2002-10-09 | Ibm | Improved just in time compilation of java software methods |
US7367022B2 (en) * | 2002-09-05 | 2008-04-29 | Intel Corporation | Methods and apparatus for optimizing the operating speed and size of a computer program |
US7107580B2 (en) * | 2003-01-07 | 2006-09-12 | Intel Corporation | Binary translation of self-modifying code |
US20040139424A1 (en) * | 2003-01-13 | 2004-07-15 | Velare Technologies Inc. | Method for execution context reification and serialization in a bytecode based run-time environment |
US7313790B2 (en) * | 2003-06-23 | 2007-12-25 | Intel Corporation | Methods and apparatus for preserving precise exceptions in code reordering by using control speculation |
US7559050B2 (en) * | 2003-06-30 | 2009-07-07 | Microsoft Corporation | Generating software development tools via target architecture specification |
US7305666B2 (en) * | 2003-07-23 | 2007-12-04 | Microsoft Corporation | Description language for an extensible compiler and tools infrastructure |
US7120898B2 (en) * | 2003-06-26 | 2006-10-10 | Microsoft Corporation | Intermediate representation for multiple exception handling models |
US7707566B2 (en) * | 2003-06-26 | 2010-04-27 | Microsoft Corporation | Software development infrastructure |
US7086041B2 (en) * | 2003-06-27 | 2006-08-01 | Microsoft Corporation | Extensible type system for representing and checking consistency of program components during the process of compilation |
US7685581B2 (en) * | 2003-06-27 | 2010-03-23 | Microsoft Corporation | Type system for representing and checking consistency of heterogeneous program components during the process of compilation |
US7788652B2 (en) * | 2003-06-27 | 2010-08-31 | Microsoft Corporation | Representing type information in a compiler and programming tools framework |
GB0320386D0 (en) * | 2003-08-30 | 2003-10-01 | Ibm | A method, apparatus and computer program for executing a program |
US7856624B2 (en) * | 2003-09-15 | 2010-12-21 | Thomas Plum | Automated safe secure techniques for eliminating undefined behavior in computer software |
US7810080B2 (en) * | 2003-09-15 | 2010-10-05 | Thomas Plum | Automated safe secure techniques for eliminating undefined behavior in computer software |
WO2005029241A2 (en) * | 2003-09-15 | 2005-03-31 | Plum Thomas S | Automated safe secure techniques for eliminating |
US7818729B1 (en) | 2003-09-15 | 2010-10-19 | Thomas Plum | Automated safe secure techniques for eliminating undefined behavior in computer software |
WO2005038630A2 (en) * | 2003-10-17 | 2005-04-28 | Plum Thomas S | Automated safe secure techniques for eliminating undefined behavior in computer software |
US20050183077A1 (en) * | 2004-02-12 | 2005-08-18 | International Business Machines Corporation | System and method for JIT memory footprint improvement for embedded java devices |
US7496897B1 (en) | 2004-03-17 | 2009-02-24 | Timesys Corporation | Multiple code sets for multiple execution contexts |
US7779238B2 (en) * | 2004-06-30 | 2010-08-17 | Oracle America, Inc. | Method and apparatus for precisely identifying effective addresses associated with hardware events |
US8640114B2 (en) | 2006-09-07 | 2014-01-28 | Oracle America, Inc. | Method and apparatus for specification and application of a user-specified filter in a data space profiler |
US7949551B2 (en) * | 2005-04-06 | 2011-05-24 | International Business Machines Corporation | Processing of compensation scopes in workflow management systems |
US7870544B2 (en) * | 2006-04-05 | 2011-01-11 | International Business Machines Corporation | Insuring maximum code motion of accesses to DMA buffers |
US8813055B2 (en) * | 2006-11-08 | 2014-08-19 | Oracle America, Inc. | Method and apparatus for associating user-specified data with events in a data space profiler |
US8762951B1 (en) | 2007-03-21 | 2014-06-24 | Oracle America, Inc. | Apparatus and method for profiling system events in a fine grain multi-threaded multi-core processor |
US7937695B2 (en) * | 2007-04-27 | 2011-05-03 | International Business Machines Corporation | Reducing number of exception checks |
US7761690B2 (en) * | 2007-07-26 | 2010-07-20 | International Business Machines Corporation | Method, apparatus and computer program product for dynamically selecting compiled instructions |
US8291393B2 (en) * | 2007-08-20 | 2012-10-16 | International Business Machines Corporation | Just-in-time compiler support for interruptible code |
US7865862B2 (en) * | 2007-11-08 | 2011-01-04 | International Business Machines Corporation | Design structure for dynamically selecting compiled instructions |
US9052984B2 (en) * | 2009-02-26 | 2015-06-09 | International Business Machines Corporation | Exception declaration refactoring to reduce memory footprint |
US9411560B2 (en) * | 2012-01-26 | 2016-08-09 | Oracle International Corporation | Error propagation |
CN105117269B (zh) * | 2015-10-09 | 2018-07-24 | 天津国芯科技有限公司 | 基于向量中断的编译器的优化方法 |
US9495138B1 (en) * | 2016-01-04 | 2016-11-15 | International Business Machines Corporation | Scheme for verifying the effects of program optimizations |
US9940218B2 (en) * | 2016-02-15 | 2018-04-10 | International Business Machines Corporation | Debugging optimized code using fat binary |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE4434895C2 (de) * | 1993-12-23 | 1998-12-24 | Hewlett Packard Co | Verfahren und Vorrichtung zur Behandlung von Ausnahmebedingungen |
US5926832A (en) * | 1996-09-26 | 1999-07-20 | Transmeta Corporation | Method and apparatus for aliasing memory data in an advanced microprocessor |
US5966537A (en) * | 1997-05-28 | 1999-10-12 | Sun Microsystems, Inc. | Method and apparatus for dynamically optimizing an executable computer program using input data |
US6128722A (en) * | 1998-02-13 | 2000-10-03 | International Business Machines Corporation | Data processing system having an apparatus for exception tracking during out-of-order operation and method therefor |
-
1998
- 1998-06-18 JP JP17094598A patent/JP3320358B2/ja not_active Expired - Fee Related
-
1999
- 1999-06-16 US US09/334,789 patent/US6634023B1/en not_active Expired - Lifetime
Non-Patent Citations (1)
Title |
---|
B.Steensgaard他,Object and native code thread mobility among heterogeneous computers,Proceedings of the fifteenth ACM symposium on Operating systems principles,1995,p.68−77 |
Also Published As
Publication number | Publication date |
---|---|
US6634023B1 (en) | 2003-10-14 |
JP2000020320A (ja) | 2000-01-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3320358B2 (ja) | コンパイル方法、例外処理方法、及びコンピュータ | |
US6895460B2 (en) | Synchronization of asynchronous emulated interrupts | |
US10318322B2 (en) | Binary translator with precise exception synchronization mechanism | |
US7428727B2 (en) | Debugging techniques in a multithreaded environment | |
US6711605B2 (en) | Multi OS configuration method and computer system | |
US7086053B2 (en) | Method and apparatus for enabling threads to reach a consistent state without explicit thread suspension | |
US7574588B2 (en) | Time-multiplexed speculative multi-threading to support single-threaded applications | |
EP0531107A2 (en) | Program execution manager | |
US7558724B2 (en) | Operation region describing a virtual device | |
GB2392998A (en) | Handling interrupts during multiple access program instructions | |
US6871173B1 (en) | Method and apparatus for handling masked exceptions in an instruction interpreter | |
US7552434B2 (en) | Method of performing kernel task upon initial execution of process at user level | |
JP3570442B2 (ja) | コンピュータ | |
US20050246708A1 (en) | Method of assigning virtual process identifier to process within process domain | |
US20090007124A1 (en) | Method and mechanism for memory access synchronization | |
JPH0810437B2 (ja) | 仮想計算機システムのゲスト実行制御方式 | |
JP4978914B2 (ja) | マイクロプロセッサ上での複数命令ストリーム/複数データストリームの拡張を可能にする方法およびシステム | |
Göckelmann et al. | Plurix, a distributed operating system extending the single system image concept | |
Buhr et al. | µSystem annotated reference manual | |
JP2000194668A (ja) | 計算機システム及び同システムに適用される中間コ―ド実行装置並びに中間コ―ド実行方法 | |
WO2009095917A1 (en) | A system and method for responding to virtual memory addresses | |
Craig et al. | Improving Java server performance with interruptlets | |
Goeckelmann et al. | Type-Safe Object Exchange Between Applications and a DSM Kernel | |
JPH07334374A (ja) | 割り込み検出処理装置 | |
JPH03233741A (ja) | マイクロプロセッサ処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
LAPS | Cancellation because of no payment of annual fees |