JPH0744398A - 情報処理装置 - Google Patents
情報処理装置Info
- Publication number
- JPH0744398A JPH0744398A JP19012793A JP19012793A JPH0744398A JP H0744398 A JPH0744398 A JP H0744398A JP 19012793 A JP19012793 A JP 19012793A JP 19012793 A JP19012793 A JP 19012793A JP H0744398 A JPH0744398 A JP H0744398A
- Authority
- JP
- Japan
- Prior art keywords
- exception
- handler
- processing
- program
- execution
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
び複数の例外処理ハンドラのプログラム(例外ハンドラ
ブロック11)と共に、各例外処理ハンドラが選択され
て実行する必要のある通常処理プログラムの実行状態と
例外状況を予めコード化して各例外処理ハンドラ毎に用
意し、各例外処理ハンドラと結合してプログラムコード
中の情報として付加(例外ハンドラテーブル12)して
おく。 【効果】 例外処理プログラムを付加するための通常処
理プログラムに必要なオーバヘッドをゼロにすることが
可能となっている。すなわち例外処理の有無が通常処理
プログラムの処理量に全く影響を与えない例外処理機構
が実現可能となっている。
Description
るプログラム言語のコンパイラやインタプリタ、及びC
PU(中央処理ユニット)を有する情報処理装置に関す
るものである。
おいて例外的状況が検出された場合の処理プログラム
を、通常の処理プログラムとは別のプログラム、すなわ
ち例外ハンドラとして分離しておき、このハンドラを制
御する手段を言語やCPUが提供することで、プログラ
ムの頑強性や一般性、及び正しさを高め、複雑さを低減
させることに役立つことがよく知られている。
グラムの実行に伴って動的に定義し、プログラムが例外
状況に遭遇した場合に例外ハンドラが動的に選択されて
実行される制御形態がいくつかの言語のために提案さ
れ、実装も行われている。
化委員会では try、catch とthrowが提案され、また同
じくANSI X3J13 Common Lisp言語標準化委員会ではコン
ディションシステムが仕様として提案されている。
ion 7.0 が ANSI C++ での仕様を従来のC言語ライブラ
リにあるsetjmp/longjmp関数を使ってマクロとして実装
し、またC++ やLisp言語とは異なるが、ParcPlace Syst
ems 社のSmalltalk Release4 ではハンドラ定義メソッ
ドでブロッククロージャをコンテクストにリンクしてお
くことで同様な例外処理機構を実装している例が挙げら
れる。
うな従来の実装方法においては次のような欠点がある。
すなわち、setjmpや例外ハンドラを定義する関数等を呼
び出して例外時に制御を移す場所を保存し、例外が検出
されて例外ハンドラを実行する時に保存された制御移行
場所を復元する方法では、通常処理において実行状態と
例外ハンドラの結合と分離の処理とを行わなければなら
ず、実行されない可能性がある例外処理の準備のために
余分な処理を通常処理が行う必要がある。この余分な処
理は、例外処理が行われる確率は通常処理に比べて非常
に低いという性質を考慮すれば通常処理に負わせるオー
バヘッドとして好ましくない。
問題を解決するためのものであり、例外処理プログラム
を付加するための通常処理プログラムに必要なオーバヘ
ッドをゼロにすることを可能にすること、すなわち例外
処理の有無が通常処理プログラムの処理量に全く影響を
与えない例外処理機構を有する情報処理装置を提供する
ことを目的とするものである。
に、本発明の情報処理装置は、コンピュータプログラム
を通常処理プログラムと複数の例外処理ハンドラに分離
してコード化し、上記例外処理ハンドラの定義を上記通
常処理プログラムの実行により動的に行い、例外検出時
において上記通常処理プログラムの実行状態に基づいて
上記例外処理ハンドラを動的に選択して実行する制御を
行うものであり、所定の規則に則った第1の例外処理ハ
ンドラから第2の例外処理ハンドラへの制御の移動(す
なわち、第1の例外処理ハンドラから当該第1の例外処
理ハンドラよりも一般的な第2の例外処理ハンドラへの
制御の移動)の行程と、例外処理ハンドラの実行制御状
態の消去及び当該例外処理ハンドラを定義した実行環境
の回復の行程と、例外処理ハンドラから例外起動点への
制御の復帰の行程と、例外処理ハンドラと例外起動点の
パラメータ交換の行程と、例外処理ハンドラが定義され
た実行環境での当該例外処理ハンドラの実行の行程と、
例外処理を多重化する多重例外の行程とを行う制御手段
を有してなり、例外処理ハンドラの有無が通常処理プロ
グラムの処理量に影響を与えないことを特徴とするもの
である。
例外処理ハンドラを選択するために、各例外処理ハンド
ラに選択されるべき通常処理プログラムの実行状態情報
を付加し、コード化されたプログラムに予め情報として
含めておくようにしている。また、上記例外検出時に
は、例外検出時の通常プログラムの実行状態と各例外処
理ハンドラに付加された上記通常処理プログラムの実行
状態情報とを比較することにより例外処理ハンドラを選
択し、実行制御を行うようにする。さらに、上記制御手
段は、1本のスタックで制御するようにしている。
は、例外処理機構を実現するために、通常処理プログラ
ム及び複数の例外処理ハンドラのプログラムと共に、各
例外ハンドラが選択されて実行する必要のある通常処理
プログラムの実行状態と例外状況を予めコード化して各
例外ハンドラ毎に用意し、各例外ハンドラと結合してプ
ログラムコード中の情報として付加しておくようにして
いる。
理機構は、処理プログラムや例外ハンドラの実行状態を
保持して実行し制御する実行制御手段と、例外状況を検
出する検出手段と、例外検出時の通常処理プログラムの
実行状態及び例外状況と例外ハンドラにコード化されて
付加された実行状態及び例外状況を比較し複数の例外ハ
ンドラの中から実行すべき例外ハンドラを検索し選択す
る検索手段により実現されるものである。
複数準備されて動的に定義された例外処理ハンドラが通
常処理プログラムの実行状態に基づいて動的に選択され
るような動的スコープを持つ前述した例外処理形態のた
めのものであって、検出された例外状況は例外コードと
してコード化され、その例外コードに対応した例外ハン
ドラが例外検出時の通常処理プログラムの実行状態に応
じて選択され実行される形態のためのものである。
えば、C言語では、どの関数のどの式や文から呼び出さ
れた関数がその時点でどの式や文を実行しているかを表
し、CPUのレベルから見た場合はその時点のスタック
の内容やプログラムカウンタ(PC)の内容である。
上記の形態によりプログラムされた例外ハンドラは、通
常の処理プログラムの実行に伴って有効になったり無効
になったりする。
の例外処理ハンドラのプログラムと共に、各例外処理ハ
ンドラが選択されて実行する必要のある通常処理プログ
ラムの実行状態と例外状況を予めコード化して各例外処
理ハンドラ毎に用意し、各例外処理ハンドラと結合して
プログラムコード中の情報として付加しておくようにし
ており、例外検出時に、例外検出時の通常プログラムの
実行状態と各例外処理ハンドラに付加された通常処理プ
ログラムの実行状態情報とを比較することにより例外処
理ハンドラを選択し、実行制御を行うことで、例外処理
ハンドラの有無が通常処理プログラムの処理量に影響を
与えない。
ら説明する。
構成を示す。
ータプログラムを通常処理プログラムと複数の例外処理
ハンドラに分離してコード化し、上記例外処理ハンドラ
の定義を上記通常処理プログラムの実行により動的に行
い、例外検出時において上記通常処理プログラムの実行
状態に基づいて上記例外処理ハンドラを動的に選択して
実行する制御を行うものであり、図1に示す制御手段で
あるCPU100は、所定の規則に則った第1の例外処
理ハンドラから第2の例外処理ハンドラへの制御の移動
(すなわち例えば、第1の例外処理ハンドラから当該第
1の例外処理ハンドラよりも一般的な第2の例外処理ハ
ンドラへの制御の移動)の行程と、例外処理ハンドラの
実行制御状態の消去及び当該例外処理ハンドラを定義し
た実行環境の回復の行程と、例外処理ハンドラから例外
起動点への制御の復帰の行程と、例外処理ハンドラと例
外起動点のパラメータ交換の行程と、例外処理ハンドラ
が定義された実行環境での当該例外処理ハンドラの実行
の行程と、例外処理を多重化する多重例外の行程とを行
い、例外処理ハンドラの有無が通常処理プログラムの処
理量に影響を与えないことを特徴とするものである。
ち、本実施例の情報処理装置における例外処理機構の実
現方法について説明する。本発明実施例装置における例
外処理機構は、仮想CPUのアーキテクチャにおける例
外処理用の仮想CPU命令及び例外シーケンスとして実
現しており、その詳細について説明する。なお、以下の
説明では、本発明の理解のみを目的とし、無用な複雑さ
を避けるため、通常の汎用CPUなら必ず持っていると
考えられるようなCPUの機能及び、関数呼び出し等の
実現方法などについては詳細に説明していない。
ジスタ(図1のRAM130の仮想CPUメモリ格納領
域103に対応する)を示し、プログラミングモデルを
示している。
ットである。図2及び図3のように、仮想CPUは、1
個のスタック7とスタックポインタ(SP)1を持ち、
実行しているプログラムの命令をポイントするプログラ
ムカウンタ(PC)2を持つ。また、この仮想CPU
は、関数定義と呼び出しをサポートし、スタック上に関
数の呼び出し状態とローカル変数の保存場所を示すため
のフレームポインタ(FP)4を持っている。また、現
在実行が行われている関数のアドレスをポイントする関
数ワードフレームポインタ(WP)3をも持つ。例外状
態フレームポインタ(ES)5と例外引数フレームポイ
ンタ(EP)6は、例外処理のためのスタックフレーム
がスタックに置かれた場合に、その例外状態と例外引数
の保存場所をそれぞれポイントする。
構造について説明する。図4には関数ワードフレーム8
を、図5には関数命令フレーム9(例えばN個のハンド
ラ付き実行ブロックを持つ)を、図6には例外ハンドラ
テーブル12を示している。なお図4の関数ワードフレ
ーム8のextbleフィールド19のextblは例外ハンドラ
テーブルアドレスが格納されているフィールドのワード
オフセット値[I]であり、localsは関数の引数とロー
カル変数の個数の合計、lvars は関数のローカル変数の
数である。
ような構造でメモリに置かれ、関数が参照される場合
は、図4の関数ワードフレーム8のアドレスにより参照
される。図4の関数のワードフレーム8には関数が参照
するワード単位の定数が並んで配置され、図5の関数命
令フレーム9にはバイト単位でコード化された仮想CP
U命令による関数の命令列(instruction )が配置され
る。
常に図2のWPレジスタ(関数ワードフレームポイン
タ)3でポイントされ、実行中の命令は図2のPCレジ
スタ(プログラムカウンタ)2でポイントされている。
クすなわち図5の実行ブロック10と例外ハンドラブロ
ック11で構成する。実行ブロックの命令は、連続した
アドレスに置く。実行ブロックの命令を実行している途
中に例外が検出された場合、対応する例外ハンドラブロ
ックが起動対象となる。例外ハンドラブロックと実行ブ
ロックとは必ず同一関数内にある。
個の例外ハンドラブロックを持つため、2個合わせて例
外ハンドラ付きブロックと呼ぶ。1つの関数は複数の例
外ハンドラ付きブロックを持つことができる。例外ハン
ドラ付きブロックを持つ関数は、必ず1個の図6に示す
例外ハンドラテーブル12を持つ。例外ハンドラテーブ
ルのエントリ13は、実行ブロックの命令が置かれてい
るアドレスの範囲14,15とそれに対応する例外ハン
ドラブロックの先頭アドレス17及び処理する例外の例
外コード(処理受付可能な例外コード)16で構成され
る。1つの関数は、複数の例外ハンドラ付きブロックを
持つ場合、このハンドラテーブルエントリ13が複数配
置される。
ードフレーム8内の任意のオフセット[I]18にあるワ
ードにセットし、関数ワードフレーム8の0番目のワー
ドの下から16ビット目から23ビット目の8ビット
(extbl フィールド)19にテーブルアドレスをセット
したワードのオフセット値[I] をセットしておく。ま
た、例外ハンドラ付きブロックを持たない関数ではこの
extbleフィールド19にはゼロをセットする。
ことも可能である。1個の関数内でネストすることもで
き、また例外ハンドラ付きブロックを実行中に他の関数
の呼び出しを行い、その呼び出された関数内で例外ハン
ドラ付きブロックを実行することでもネストされる。1
個の関数内でネストする場合も例外ハンドラテーブルに
複数のハンドラエントリを保持し、エントリの順番はネ
ストの内側のものから外側のものになるように並べる。
ム20の構造は、図7のように、各ローカル変数,Call
er WP , Caller PC , Caller FP 等からなっている。
動された場合に作られるスタックフレーム21の構造
は、図8に示すように、例外引数フレームと、例外状態
フレームとからなり、上記例外引数フレームには例外引
数が、上記例外状態フレームには、Initiator ES, Init
iator EP, Initiator WP, Initiator PC, Initiator F
P, Catcher WP, Catcher PC, Catcher FP、予約(未使
用)、ハンドラエントリインデックス、例外コードから
なっている。
令として、以下に示す4個の命令が用意されている。
より起動されるか、あるいは、通常の命令実行時に仮想
CPUがCPU内部で例外検出を行って起動する場合も
あるが、両者とも例外処理のための部分の動作は同じで
あるため、ここでは、RaiseException での起動を例に
して説明する。
2), 3), 4)の命令は例外ハンドラ内だけで実行できる命
令であり、1)は通常処理プログラムと例外ハンドラのど
ちらにおいてでも実行できる命令である。
かの時点でのスタックスナップショットの例を示すもの
である。なお、図9については、図を見やすくするため
にこの図9を図中一点鎖線で4分割し、それぞれを拡大
して図10〜図13に示す。また、図14についても同
様に、図を見やすくするためにこの図14を図中一点鎖
線で4分割し、それぞれを拡大して図15〜図18に示
す。
プショットの例と、図19〜図24のフローチャートを
参照して各例外処理命令と例外シーケンスの詳細な動作
について説明する。
ーケンスフローを示す。先ず、ステップS17で例外ハ
ンドラへのパラメータとなる例外引数をスタックにプッ
シュし、ステップS18で例外の種類と理由を識別する
ための例外コードをスタックにプッシュする。そして、
ステップS19でRaise Exception 命令を実行する。こ
の時点でのスタックの状態とレジスタのポイント位置を
図9と図14の図中P1に示す。
れた時の仮想CPUの動作のフローチャートを示してい
る。この図20において、Raise Exception 命令が実行
開始されると、先ずステップS1において仮想CPU
は、例外スタックフレームをスタックにプッシュし、E
Sレジスタ(例外状態フレームポインタ5)は例外状態
フレームをポイントするように設定され、EPレジスタ
(例外引数フレームポインタ6)は例外引数フレームを
ポイントするように設定される。この段階ではフレーム
内のInitiatorES,Initiator EP,Initiator FP, Initi
ator PC, Initiator WPのフィールドにはRaise Excepti
on が実行された時点でのレジスタの内容がセーブされ
て設定が行われるが、ハンドラエントリインデックスと
Catcher FP, Catcher PC, Catcher WPには内容が設定さ
れず、フレーム内にその領域だけが確保されている状態
である。また、この時点でのWP,PC,FPレジスタ
(関数ワードフレームポインタ3,プログラムカウンタ
2,フレームポインタ4)はRaise Exception 命令を実
行した時点での関数の実行状態を示している。
む。このステップS2のステップS2Aにおいて、WP
(関数ワードフレームポインタ3)でポイントされてい
る関数が例外ハンドラテーブルを持っている場合(Ye
s)は、ステップS2Bに進む。このステップS2Bに
おいては、PCレジスタ(プログラムカウンタ2)の内
容が実行ブロックのアドレス範囲内にあって、かつ例外
コードを処理受付可能な例外コードして持っているか、
あるいはゼロの処理受付可能な例外コードを持つ例外ハ
ンドラのエントリがその例外ハンドラテーブルの先頭か
ら順番にサーチされる。その後、ステップS2Cに進
む。
数ワードフレームポインタ3)でポイントされている関
数が例外ハンドラテーブルを持たない(Noの場合)
か、或いはステップS2Bの次のステップS2Cにおい
てテーブル内をサーチしてもエントリが見つからなかっ
た場合(No)は、ステップS3にすすむ。仮想CPU
はこのステップS3において、現在実行中の関数を呼び
出した関数が関数からリターンするためにスタックに保
存している仮想CPUの実行状態を関数スタックフレー
ムからFPレジスタ(フレームポインタ4)をベースに
してアクセスし、WP,PC,FPレジスタ(関数ワー
ドフレームポインタ3,プログラムカウンタ2,フレー
ムポインタ4)に回復した後、ステップS2に戻ってハ
ンドラのサーチが繰り返される。関数の呼び出しチェイ
ンをたどってサーチを繰り返した結果、呼び出し元がな
くなった場合の動作についてはフローに示されていない
が、その場合の仮想CPUは致命的エラー状態となる。
ハンドラテーブルをサーチして条件を満たすハンドラエ
ントリが見つかった場合(Yes)は、ステップS4に
進む。仮想CPUは、このステップS4において、その
ハンドラを持つ関数が実行されていた時点のWP,P
C,FPレジスタ(関数ワードフレームポインタ3,プ
ログラムカウンタ2,フレームポインタ4)を、例外状
態フレームのCatcher WP,Catcher PC,Catcher FPの各フ
ィールドにセーブし、見つかったエントリのテーブル上
でのインデックスを同様に例外状態フレームのハンドラ
エントリインデックスに設定する。
プS5において、ハンドラエントリのハンドラブロック
先頭アドレスを参照してそれをPCレジスタ(プログラ
ムカウンタ2)に設定し、Raise Exception 命令の実行
は終了する。この時点でのスタックの状態とレジスタの
ポイント位置を図9と図14の図中P2に示す。その後
は、PC(プログラムカウンタ2)でポイントされたハ
ンドラブロックの先頭の仮想CPU命令から逐次実行が
開始される。
は、XXでポイントされているメモリの内容を表し、X
X.YYはメモリXXのYYというフィールドの内容を
表している。
理シーケンスフローを示している。この図21におい
て、ステップS21は例外ハンドラでの処理の本体で、
ここでは例外ハンドラのブロックがある関数と同じコン
テクストで実行されるので、その関数の引数とローカル
変数は例外起動時の内容を保持したままでアクセスで
き、その他EP, ESレジスタ(例外引数フレームポイ
ンタ6,例外状態フレームポインタ5)をベースにした
例外引数と例外状態フレームの参照も可能である。その
後、例外ハンドラブロックでの処理を終了するには、フ
ローチャートでは図示していないが例外ハンドラでの処
理結果や例外の種類による条件を判断をしたうえで、3
つの選択が可能である。
て、ステップS22を選択した場合は、Continue Excep
tion命令を実行する。
場合の仮想CPUの動作フローチャートを図22に示
す。この図22のフローチャートにおいて、Continue E
xception命令が実行開始されると、先ず、ステップS6
において仮想CPUは、ESレジスタ(例外状態フレー
ムポインタ5)でポイントされている例外状態フレーム
より、Catcher FP,Catcher PC, Catcher WPフィールド
の内容をそれぞれFP,PC,WPレジスタ(関数ワー
ドフレームポインタ3,プログラムカウンタ2,フレー
ムポインタ4)に回復し、ハンドラエントリインデック
スフィールドから、ハンドラテーブルのサーチ続行のた
めのテーブルインデックスを取り出す。
のステップS7Aにおいて、RaiseException 命令での
ハンドラ検索条件ステップS2Bと同じ条件に合致する
ハンドラエントリをWP(回数ワードフレームポインタ
3)でポイントされている関数の例外ハンドラテーブル
のテーブルインデックスで示される位置からからサーチ
する。
つからなかった場合(No)は、ステップS8に進む。
このステップS8において、ハンドラテーブルサーチの
ためのテーブルインデックスはゼロに設定し、次回のサ
ーチに備える。
プS9のステップS9Aにおいては、現在実行中の関数
を呼び出した関数が関数からリターンするためにスタッ
クに保存している仮想CPUの実行状態をFPレジスタ
(フレームポインタ)をベースにして関数スタックフレ
ームからアクセスし、WP,PC,FPレジスタ(関数
ワードフレームポインタ3,プログラムカウンタ2,フ
レームポインタ4)に回復し、次のステップS9Bでは
WP(関数ワードフレームポインタ3)でポイントされ
ている関数が例外ハンドラテーブルを持つ関数であるま
で関数呼び出しチェイン上でのサーチが行われる。この
ステップS9Bで、例外ハンドラテーブルが見つかった
場合(Yes)は、ステップS7に戻ってハンドラエン
トリのサーチが繰り返される。
テーブルをサーチして条件を満たすハンドラエントリが
見つかった場合(ステップS7BでYesとなる場
合)、仮想CPUはステップS10に進む。このステッ
プS10においては、そのハンドラを持つ関数が実行さ
れていた時点のWP,PC,FPレジスタ(関数ワード
フレームポインタ3,プログラムカウンタ2,フレーム
ポインタ4)を例外状態フレームのCatcher WP, Catche
r PC, Catcher FPの各フィールドにセーブし、見つかっ
たエントリのテーブル上でのインデックスを同様に例外
状態フレームのハンドラエントリインデックスに設定す
る。
ドラエントリのハンドラブロック先頭アドレスを参照し
てそれをPCレジスタ(プログラムカウンタ2)に設定
し、Continue Exception命令の実行は終了する。この時
点でのスタックの状態とレジスタのポイント位置を図9
と図14の図中P3に示す。その後は、PC8プログラ
ムカウンタ2)でポイントされた例外ハンドラブロック
の先頭の仮想CPU命令から新たな例外ハンドラシーケ
ンスとして逐次実行が開始される。
スにおいてステップS23を選択した場合、Unwind Sta
ck命令を実行する。
CPUの動作フローチャートを図23に示す。
ck命令が実行開始されると、ステップS12のステップ
S12AにおいてESとEPレジスタ(例外状態フレー
ムポインタ5と例外引数フレームポインタ6)をESレ
ジスタでポイントされている例外状態フレームのInitia
tor ES, Initiator EPフィールドから回復し、次のステ
ップS12Bで現在実行中の関数の実行の途中で生成さ
れた例外フレームをスタックからすべて取り除かれたか
否かの判断を行い、取り除かれていないときはすべてス
タックより取り除く。
行中の関数の局所的なスタックの状態を空にする。すな
わちここでは、スタックはこの関数が最初に呼び出され
た状態と同じに戻り、Unwind Stack命令の実行は終了す
る。この時点でのスタックの状態とレジスタのポイント
位置を図9の図中P4に示す。
ドラブロックの処理シーケンスに戻り、Unwind Stack命
令の次の仮想CPU命令から逐次実行が行われるが、ス
テップS24のように関数内のどこかの通常処理プログ
ラムにブランチを行うのが一般的である。このように、
例外ハンドリングシーケンスにおいてステップS23が
選択された場合、図19の例外起動シーケンスのステッ
プS20へ戻るための情報をすべて消滅させるので、決
して例外起動シーケンスが回復されて終了することはな
い。
タック内容をポップして削除するだけであったが、関数
スタックフレームをポップすることで制御の継続が消滅
してしまうと問題を生じる関数の後処理を行わせるた
め、Unwind Stackの実行時に起動されるUnwindプロテク
ションハンドラをその関数内に定義させておき、それを
Unwind Stack命令実行時に起動させることが、Raise Ex
ception命令でのハンドラのサーチと同様な機構をUnwin
d Stack命令においても同様に適用して付加することが
可能である。
いてステップS25を選択した場合、ハンドラのリター
ン値をスタックにプッシュし、ステップS26において
Return Exception命令を実行する。
仮想CPUの動作フローチャートを図24に示す。ま
た、Return Exception命令の実行直前でのスタックの状
態とレジスタのポイント位置を図14のP5に示す。
Exception命令が実行されると、仮想CPUはステップ
S14において、スタックのトップにある例外ハンドラ
のリターン値を取っておく。そして、ステップS15に
おいてES(例外状態フレームポインタ5)でポイント
されている例外状態フレームのInitiator WP, Initiato
r PC, Initiator FP, Initiator EP, Initiator ESフィ
ールドの内容をそれぞれWP,PC,FP,EP,ES
レジスタ(関数ワードフレームポインタ3,プログラム
カウンタ2,フレームポインタ4,例外引数フレームポ
インタ6,例外状態フレームポインタ5)に回復し、例
外状態フレームと例外引数フレームをスタックからポッ
プして取り除く。
14で取っておいた例外ハンドラのリターン値をスタッ
クのトップに置き、Return Exception命令の実行は終了
する。この時点でのスタックの状態とレジスタのポイン
ト位置を図14の図中P6に示す。その後は、例外ハン
ドラを起動したRaise Exception命令を実行した関数の
実行状態での例外起動シーケンスに戻るので図19のス
テップS20において、Raise Exception命令の次の仮
想CPU命令からの逐次実行が再開され、例外ハンドラ
のリターン値をポップして受け取り、例外起動シーケン
スが終了する。
合も、例外処理状態はスタックフレームとしてスタック
されるので、例外起動点に復帰も矛盾なく可能であり、
また、Unwind Stack命令では多重の例外スタックフレー
ムをまとめて消去することも可能となっている。
Mドライブ106は、装荷されたソフトウェアパッケー
ジのメディア(上記CD−ROMディスク111)から
データを読み出す。ここで、このディスク111に記録
されているデータには、前述した通常処理プログラム及
び複数の例外処理ハンドラのプログラムと共に、各例外
ハンドラが選択されて実行する必要のある通常処理プロ
グラムの実行状態と例外状況を予めコード化して各例外
処理ハンドラ毎に用意し、各例外処理ハンドラと結合し
てプログラムコード中の情報として付加しておくように
している。上記通常処理プログラム及び例外処理ハンド
ラのプログラムと、当該例外処理ハンドラに付加された
情報が、仮想CPU命令(仮想CPUプログラム)とし
て、例えばディスク111の最内周の上記仮想CPUプ
ログラム領域112に記録されている。当該仮想CPU
プログラムが、RAM130の仮想CPUメモリ格納領
域103に格納される。
ス108に接続された各装置(例えばキーボード等のキ
ー入力装置7、CD−ROMドライブ106、後述する
MPEGデコーダ105、CRTディスプレイコントロ
ーラ109等)の制御や、各種データの送受を中心的に
行う。このCPU100は、仮想CPUインタプリタプ
ログラム格納領域102に格納されている仮想CPUイ
ンタプリタプログラムに基づいて、上記バス108に接
続された上記RAM130の仮想CPUメモリ格納領域
103に格納された上記仮想CPUプログラムを解釈し
て実行することで前述したように例外処理機構を実現す
る。
108に接続された各装置の制御を高レベルで行い、C
D−ROM製作者の意図した制御が最終的に行われる。
(Moving Picture Expert Group)デコーダ105をも有
しており、上記CD−ROMディスク111上に記録さ
れた圧縮画像データを当該MPEGデコーダ105によ
ってデコードし、この画像データが画像バッファメモリ
104を介してCRTディスプレイコントローラ109
により制御されるCRTディスプレイ110に表示され
るようになっている。また、上記ディスプレイ110
は、CRT(陰極線管)のみならず、他の表示装置(例
えば液晶表示装置)を用いることも可能である。この場
合、コントローラ109はその表示装置に応じた制御を
行う。
外ハンドラが有効な処理プログラムのアドレス範囲とそ
れに対応する例外ハンドラのアドレスをテーブルにして
予め用意しておく。そして、例外が起動された時点にな
って初めてこのテーブルとスタックフレームのサーチが
行われる。従って、通常処理プログラムのCPU命令内
容は例外ハンドラの有無には全く無関係であり、例外ハ
ンドラの定義を有効にしたり無効にしたりする処理は、
通常処理プログラムでは行う必要がない。また、本実施
例で説明したような柔軟で多様な制御形態を持つ例外処
理機構を提供するような言語やCPUにおいて、通常処
理での例外処理付加のための処理オーバヘッドをゼロと
させることが本発明によって実現可能となる。
び出し機構を持つような言語及びCPUでの一実施例に
すぎないが、言語やCPUによって必要とされる実行状
態やその概念が異なるものであっても、実行状態の概念
を持つ言語やCPUであれば、同様な例外処理機構を実
現するために本発明を適用することはいくらでも可能で
ある。
処理プログラム及び複数の例外処理ハンドラのプログラ
ムと共に、各例外処理ハンドラが選択されて実行する必
要のある通常処理プログラムの実行状態と例外状況を予
めコード化して各例外処理ハンドラ毎に用意し、各例外
処理ハンドラと結合してプログラムコード中の情報とし
て付加しておくようにしているため、例外処理プログラ
ムを付加するための通常処理プログラムに必要なオーバ
ヘッドをゼロにすることが可能となっている。すなわち
例外処理の有無が通常処理プログラムの処理量に全く影
響を与えない例外処理機構が実現可能となっている。
ブロック回路図である。
するための図である。
図である。
構造を示す図である。
合に作られるスタックフレームの構造を示す図である。
の一例を示す図である。
て示す図である。
て示す図である。
て示す図である。
て示す図である。
トの他の例を示す図である。
して示す図である。
して示す図である。
して示す図である。
して示す図である。
示すフローチャートである。
CPUの動作を示すフローチャートである。
示すフローチャートである。
仮想CPUの動作を示すフローチャートである。
PUの動作を示すフローチャートである。
想CPUの動作を示すフローチャートである。
ラム格納領域 103・・・・・・・・仮想CPUメモリ格納領域 104・・・・・・・・画像バッファメモリ 105・・・・・・・・MPEGデコーダ 106・・・・・・・・CD−ROMドライブ 107・・・・・・・・キー入力装置 108・・・・・・・・バス 109・・・・・・・・CRTディスプレイコントロー
ラ 110・・・・・・・・CRTディスプレイ 111・・・・・・・・CD−ROMディスク 112・・・・・・・・仮想CPUプログラム領域 120・・・・・・・・ROM 130・・・・・・・・RAM
レジスタ(図1のRAM130の仮想CPUメモリ格納
領域103及びCPU100のレジスタの一部に対応す
る)を示し、プログラミングモデルを示している。
処理シーケンスフローを示している。この図21におい
て、ステップS21は例外ハンドラでの処理の本体で、
ここでは例外ハンドラのブロックがある関数と同じコン
テクストで実行されるので、その関数の引数とローカル
変数は例外起動時の内容を保持したままでアクセスで
き、その他EP,ESレジスタ(例外引数フレームポイ
ンタ6,例外状態フレームポインタ5)をベースにした
例外引数と例外状態フレームの参照も可能である。その
後、例外ハンドラブロックでの処理を終了するには、フ
ローチャートでは条件判断を図示していないが例外ハン
ドラでの処理結果や例外の種類による条件を判断をした
うえで、3つの選択が可能である。
を示すフローチャートである。
Claims (4)
- 【請求項1】 コンピュータプログラムを通常処理プロ
グラムと複数の例外処理ハンドラに分離してコード化
し、上記例外処理ハンドラの定義を上記通常処理プログ
ラムの実行により動的に行い、例外検出時において上記
通常処理プログラムの実行状態に基づいて上記例外処理
ハンドラを動的に選択して実行する制御を行う情報処理
装置であって、 所定の規則に則った第1の例外処理ハンドラから第2の
例外処理ハンドラへの制御の移動の行程と、 例外処理ハンドラの実行制御状態の消去及び当該例外処
理ハンドラを定義した実行環境の回復の行程と、 例外処理ハンドラから例外起動点への制御の復帰の行程
と、 例外処理ハンドラと例外起動点のパラメータ交換の行程
と、 例外処理ハンドラが定義された実行環境での当該例外処
理ハンドラの実行の行程と、 例外処理を多重化する多重例外の行程とを行う制御手段
を有してなることを特徴とする情報処理装置。 - 【請求項2】 上記例外処理ハンドラを選択するため
に、各例外処理ハンドラに選択されるべき通常処理プロ
グラムの実行状態情報を付加し、コード化されたプログ
ラムに予め情報として含めておくことを特徴とする請求
項1記載の情報処理装置。 - 【請求項3】 上記例外検出時に、例外検出時の通常プ
ログラムの実行状態と各例外処理ハンドラに付加された
上記通常処理プログラムの実行状態情報とを比較するこ
とにより例外処理ハンドラを選択し、実行制御を行うこ
とを特徴とする請求項2記載の情報処理装置。 - 【請求項4】 上記制御手段を、1本のスタックで制御
することを特徴とする請求項1記載の情報処理装置。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP19012793A JP3603314B2 (ja) | 1993-07-30 | 1993-07-30 | 情報処理装置及び方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP19012793A JP3603314B2 (ja) | 1993-07-30 | 1993-07-30 | 情報処理装置及び方法 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPH0744398A true JPH0744398A (ja) | 1995-02-14 |
| JP3603314B2 JP3603314B2 (ja) | 2004-12-22 |
Family
ID=16252849
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP19012793A Expired - Fee Related JP3603314B2 (ja) | 1993-07-30 | 1993-07-30 | 情報処理装置及び方法 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP3603314B2 (ja) |
Cited By (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO2012086288A1 (ja) * | 2010-12-20 | 2012-06-28 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 例外の制御方法、システムおよびプログラム |
| CN102570990A (zh) * | 2010-12-29 | 2012-07-11 | 安凯(广州)微电子技术有限公司 | 一种放大器输出级过流保护电路 |
| US9710270B2 (en) | 2010-12-20 | 2017-07-18 | International Business Machines Corporation | Exception control method, system, and program |
-
1993
- 1993-07-30 JP JP19012793A patent/JP3603314B2/ja not_active Expired - Fee Related
Cited By (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO2012086288A1 (ja) * | 2010-12-20 | 2012-06-28 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 例外の制御方法、システムおよびプログラム |
| JP5822848B2 (ja) * | 2010-12-20 | 2015-11-25 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | 例外の制御方法、システムおよびプログラム |
| US9710270B2 (en) | 2010-12-20 | 2017-07-18 | International Business Machines Corporation | Exception control method, system, and program |
| CN102570990A (zh) * | 2010-12-29 | 2012-07-11 | 安凯(广州)微电子技术有限公司 | 一种放大器输出级过流保护电路 |
Also Published As
| Publication number | Publication date |
|---|---|
| JP3603314B2 (ja) | 2004-12-22 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| WO2001055845A2 (en) | System and method for flexible software linking | |
| KR20020087384A (ko) | N-베이스형 산술식의 최적화 | |
| JP2000347872A (ja) | 例外を正規制御フローとして処理する方法及び装置 | |
| US6829719B2 (en) | Method and apparatus for handling nested faults | |
| JPH05204686A (ja) | オペレーティングシステムカーネル用受動回復方法およびシステム | |
| US6957367B2 (en) | System and method for controlling activity of temporary files in a computer system | |
| JP2005063435A (ja) | ソフトウェアフォールトを封じ込める方法およびシステム | |
| JPH05250182A (ja) | プログラム条件処理 | |
| JP3603314B2 (ja) | 情報処理装置及び方法 | |
| JPH09128267A (ja) | データ処理装置およびデータ処理方法 | |
| JP4155052B2 (ja) | エミュレータ、エミュレーション方法およびプログラム | |
| US5138617A (en) | Method for masking false bound faults in a central processing unit | |
| JPS5991551A (ja) | 分岐先アドレス予測を行なう命令先取り装置 | |
| JP2009230479A (ja) | マイクロプロセッサ | |
| CN120295841B (zh) | 一种基于函数调用图的中断控制方法及装置 | |
| JPH08249206A (ja) | スタック領域破壊検出機能付き計算機 | |
| JP2642788B2 (ja) | 実行監視点削減方式 | |
| CA1223079A (en) | Data processor having selective breakpoint capability with minimal overhead | |
| JP3021697B2 (ja) | プログラミング言語における例外処理方法 | |
| JP2002149417A (ja) | レジスタ退避・回復方法 | |
| JPH0248733A (ja) | 情報処理装置 | |
| JPH1021067A (ja) | プログラムの動的修正方法 | |
| JP3467167B2 (ja) | プログラミング言語処理系における割込処理方法、装置およびその記録媒体 | |
| JPS62247426A (ja) | 大量デ−タ処理命令の処理方式 | |
| JPH09282158A (ja) | マイクロプログラムのリトライ制御方式 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040224 |
|
| A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040426 |
|
| TRDD | Decision of grant or rejection written | ||
| A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20040907 |
|
| A61 | First payment of annual fees (during grant procedure) |
Effective date: 20040920 Free format text: JAPANESE INTERMEDIATE CODE: A61 |
|
| FPAY | Renewal fee payment (prs date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091008 Year of fee payment: 5 |
|
| LAPS | Cancellation because of no payment of annual fees |