JP3603314B2 - 情報処理装置及び方法 - Google Patents

情報処理装置及び方法 Download PDF

Info

Publication number
JP3603314B2
JP3603314B2 JP19012793A JP19012793A JP3603314B2 JP 3603314 B2 JP3603314 B2 JP 3603314B2 JP 19012793 A JP19012793 A JP 19012793A JP 19012793 A JP19012793 A JP 19012793A JP 3603314 B2 JP3603314 B2 JP 3603314B2
Authority
JP
Japan
Prior art keywords
exception
handler
execution
program
processing
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
Application number
JP19012793A
Other languages
English (en)
Other versions
JPH0744398A (ja
Inventor
康幸 木下
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sony Corp
Original Assignee
Sony Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Sony Corp filed Critical Sony Corp
Priority to JP19012793A priority Critical patent/JP3603314B2/ja
Publication of JPH0744398A publication Critical patent/JPH0744398A/ja
Application granted granted Critical
Publication of JP3603314B2 publication Critical patent/JP3603314B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

【0001】
【産業上の利用分野】
本発明は、例外処理機構を実現するプログラム言語のコンパイラやインタプリタ、及びCPU(中央処理ユニット)を有する情報処理装置とその情報処理方法に関するものである。
【0002】
【従来の技術】
従来より、コンピュータのプログラムにおいて例外的状況が検出された場合の処理プログラムを、通常の処理プログラムとは別のプログラム、すなわち例外ハンドラとして分離しておき、このハンドラを制御する手段を言語やCPUが提供することで、プログラムの頑強性や一般性、及び正しさを高め、複雑さを低減させることに役立つことがよく知られている。
【0003】
そのなかで、例外ハンドラを通常処理プログラムの実行に伴って動的に定義し、プログラムが例外状況に遭遇した場合に例外ハンドラが動的に選択されて実行される制御形態がいくつかの言語のために提案され、実装も行われている。
【0004】
その例としては、ANSI X3J16 C++言語標準化委員会では try、catch とthrow が提案され、また同じくANSI X3J13 Common Lisp言語標準化委員会ではコンディションシステムが仕様として提案されている。
【0005】
実装としては、Microsoft 社のC/C++ Version 7.0 が ANSI C++ での仕様を従来のC言語ライブラリにあるsetjmp/longjmp関数を使ってマクロとして実装し、またC++ やLisp言語とは異なるが、ParcPlace Systems 社のSmalltalk Release 4 ではハンドラ定義メソッドでブロッククロージャをコンテクストにリンクしておくことで同様な例外処理機構を実装している例が挙げられる。
【0006】
【発明が解決しようとする課題】
ところで、前述したような従来の実装方法においては次のような欠点がある。すなわち、setjmpや例外ハンドラを定義する関数等を呼び出して例外時に制御を移す場所を保存し、例外が検出されて例外ハンドラを実行する時に保存された制御移行場所を復元する方法では、通常処理において実行状態と例外ハンドラの結合と分離の処理とを行わなければならず、実行されない可能性がある例外処理の準備のために余分な処理を通常処理が行う必要がある。この余分な処理は、例外処理が行われる確率は通常処理に比べて非常に低いという性質を考慮すれば通常処理に負わせるオーバヘッドとして好ましくない。
【0007】そこで、本発明は、上記のオーバヘッドの問題を解決するためのものであり、例外処理プログラムを付加するための通常処理プログラムに必要なオーバヘッドをゼロにすることを可能にすること、すなわち例外処理の有無が通常処理プログラムの処理量に全く影響を与えない例外処理機能を実現する情報処理装置及び方法を提供することを目的とするものである。
【0008】
【課題を解決するための手段】
本発明に係る情報処理装置は、上述の課題を解決するために、コンピュータプログラムを通常処理プログラムと複数の例外処理ハンドラに分離してコード化し、例外検出時において上記通常処理プログラムの実行状態に基づいて上記例外処理ハンドラを動的に選択して実行する制御を行う情報処理装置であって、所定の規則に則った第1の例外処理ハンドラから第2の例外処理ハンドラへの制御の移動の行程と、例外処理ハンドラの実行制御状態の消去及び当該例外処理ハンドラを定義した実行環境の回復の行程と、例外処理ハンドラから例外起動点への制御の復帰の行程と、例外処理ハンドラと例外起動点のパラメータ交換の行程と、例外処理ハンドラが定義された実行環境での当該例外処理ハンドラの実行の行程と、例外処理を多重化する多重例外の行程とを行う制御手段を有し、上記例外処理ハンドラを選択するために、各例外処理ハンドラに選択されるべき通常処理プログラムの実行状態情報を付加し、コード化されたプログラムに予め情報として含めておき、上記例外検出時に、例外検出時の通常プログラムの実行状態と各例外処理ハンドラに付加された上記通常処理プログラムの実行状態情報とを比較することにより例外処理ハンドラを選択し、実行制御を行うことを特徴としている。
また、本発明に係る情報処理方法は、上述の課題を解決するために、コンピュータプログラムを通常処理プログラムと複数の例外処理ハンドラに分離してコード化し、例外検出時において上記通常処理プログラムの実行状態に基づいて上記例外処理ハンドラを動的に選択して実行する制御を行う情報処理方法であって、所定の規則に則った第1の例外処理ハンドラから第2の例外処理ハンドラへの制御の移動のステップと、例外処理ハンドラの実行制御状態の消去及び当該例外処理ハンドラを定義した実行環境の回復のステップと、例外処理ハンドラから例外起動点への制御の復帰のステップと、例外処理ハンドラと例外起動点のパラメータ交換のステップと、例外処理ハンドラが定義された実行環境での当該例外処理ハンドラの実行のステップと、例外処理を多重化する多重例外のステップとを行う制御ステップを有し、上記例外処理ハンドラを選択するために、各例外処理ハンドラに選択されるべき通常処理プログラムの実行状態情報を付加し、コード化されたプログラムに予め情報として含めておき、上記例外検出時に、例外検出時の通常プログラムの実行状態と各例外処理ハンドラに付加された上記通常処理プログラムの実行状態情報とを比較することにより例外処理ハンドラを選択し、実行制御を行うことを特徴としている。
ここで、上記例外検出時において上記通常処理プログラムの実行状態に基づいて上記例外処理ハンドラを動的に選択して実行する制御を行うとは、後述する Raise Exception命令の実行に対応し、上記所定の規則に則った第1の例外処理ハンドラから第2の例外処理ハンドラへの制御の移動の行程とは、後述するContinue Exception命令の実行に対応し、上記通常処理プログラムの実行状態情報を付加するとは、後述する例外ハンドラテーブルに実行ブロックの先頭命令アドレスと最終命令の次命令のアドレスとを付加することに対応し、上記例外検出時の通常プログラムの実行状態と各例外処理ハンドラに付加された上記通常処理プログラムの実行状態情報とを比較することにより例外処理ハンドラを選択することは、後述する Raise Exception命令の実行中に行われるものである。
【0009】
ここで、本発明の情報処理装置では、上記例外処理ハンドラを選択するために、各例外処理ハンドラに選択されるべき通常処理プログラムの実行状態情報を付加し、コード化されたプログラムに予め情報として含めておくようにしている。また、上記例外検出時には、例外検出時の通常プログラムの実行状態と各例外処理ハンドラに付加された上記通常処理プログラムの実行状態情報とを比較することにより例外処理ハンドラを選択し、実行制御を行うようにする。さらに、上記制御手段は、1本のスタックで制御するようにしている。
【0010】
言い換えれば、本発明の情報処理装置では、例外処理機構を実現するために、通常処理プログラム及び複数の例外処理ハンドラのプログラムと共に、各例外ハンドラが選択されて実行する必要のある通常処理プログラムの実行状態と例外状況を予めコード化して各例外ハンドラ毎に用意し、各例外ハンドラと結合してプログラムコード中の情報として付加しておくようにしている。
【0011】
より具体的に言うと、本発明による例外処理機構は、処理プログラムや例外ハンドラの実行状態を保持して実行し制御する実行制御手段と、例外状況を検出する検出手段と、例外検出時の通常処理プログラムの実行状態及び例外状況と例外ハンドラにコード化されて付加された実行状態及び例外状況を比較し複数の例外ハンドラの中から実行すべき例外ハンドラを検索し選択する検索手段により実現されるものである。
【0012】
すなわち、本発明による例外処理機構は、複数準備されて動的に定義された例外処理ハンドラが通常処理プログラムの実行状態に基づいて動的に選択されるような動的スコープを持つ前述した例外処理形態のためのものであって、検出された例外状況は例外コードとしてコード化され、その例外コードに対応した例外ハンドラが例外検出時の通常処理プログラムの実行状態に応じて選択され実行される形態のためのものである。
【0013】
なお、前記プログラムの実行状態とは、例えば、C言語では、どの関数のどの式や文から呼び出された関数がその時点でどの式や文を実行しているかを表し、CPUのレベルから見た場合はその時点のスタックの内容やプログラムカウンタ(PC)の内容である。 上記の形態によりプログラムされた例外ハンドラは、通常の処理プログラムの実行に伴って有効になったり無効になったりする。
【0014】
【作用】
本発明によれば、通常処理プログラム及び複数の例外処理ハンドラのプログラムと共に、各例外処理ハンドラが選択されて実行する必要のある通常処理プログラムの実行状態と例外状況を予めコード化して各例外処理ハンドラ毎に用意し、各例外処理ハンドラと結合してプログラムコード中の情報として付加しておくようにしており、例外検出時に、例外検出時の通常プログラムの実行状態と各例外処理ハンドラに付加された通常処理プログラムの実行状態情報とを比較することにより例外処理ハンドラを選択し、実行制御を行うことで、例外処理ハンドラの有無が通常処理プログラムの処理量に影響を与えない。
【0015】
【実施例】
以下、本発明の一実施例を図面を参照しながら説明する。
【0016】
図1には本発明の情報処理装置の概略的な構成を示す。
【0017】
本発明実施例の情報処理装置は、コンピュータプログラムを通常処理プログラムと複数の例外処理ハンドラに分離してコード化し、上記例外処理ハンドラの定義を上記通常処理プログラムの実行により動的に行い、例外検出時において上記通常処理プログラムの実行状態に基づいて上記例外処理ハンドラを動的に選択して実行する制御を行うものであり、図1に示す制御手段であるCPU100は、所定の規則に則った第1の例外処理ハンドラから第2の例外処理ハンドラへの制御の移動(すなわち例えば、第1の例外処理ハンドラから当該第1の例外処理ハンドラよりも一般的な第2の例外処理ハンドラへの制御の移動)の行程と、例外処理ハンドラの実行制御状態の消去及び当該例外処理ハンドラを定義した実行環境の回復の行程と、例外処理ハンドラから例外起動点への制御の復帰の行程と、例外処理ハンドラと例外起動点のパラメータ交換の行程と、例外処理ハンドラが定義された実行環境での当該例外処理ハンドラの実行の行程と、例外処理を多重化する多重例外の行程とを行い、例外処理ハンドラの有無が通常処理プログラムの処理量に影響を与えないことを特徴とするものである。
【0018】
先ず、図1の構成の具体的な説明に先立ち、本実施例の情報処理装置における例外処理機構の実現方法について説明する。
本発明実施例装置における例外処理機構は、仮想CPUのアーキテクチャにおける例外処理用の仮想CPU命令及び例外シーケンスとして実現しており、その詳細について説明する。なお、以下の説明では、本発明の理解のみを目的とし、無用な複雑さを避けるため、通常の汎用CPUなら必ず持っていると考えられるようなCPUの機能及び、関数呼び出し等の実現方法などについては詳細に説明していない。
【0019】図2及び図3には、仮想CPUにおけるレジスタ(図1のRAM130の仮想CPUメモリ格納領域103及びCPU100のレジスタの一部に対応する)を示し、プログラミングモデルを示している。
【0020】
この仮想CPUのワードサイズは、32ビットである。図2及び図3のように、仮想CPUは、1個のスタック7とスタックポインタ(SP)1を持ち、実行しているプログラムの命令をポイントするプログラムカウンタ(PC)2を持つ。また、この仮想CPUは、関数定義と呼び出しをサポートし、スタック上に関数の呼び出し状態とローカル変数の保存場所を示すためのフレームポインタ(FP)4を持っている。また、現在実行が行われている関数のアドレスをポイントする関数ワードフレームポインタ(WP)3をも持つ。例外状態フレームポインタ(ES)5と例外引数フレームポインタ(EP)6は、例外処理のためのスタックフレームがスタックに置かれた場合に、その例外状態と例外引数の保存場所をそれぞれポイントする。
【0021】
次に、図4〜図6を用いて、関数のデータ構造について説明する。
図4には関数ワードフレーム8を、図5には関数命令フレーム9(例えばN個のハンドラ付き実行ブロックを持つ)を、図6には例外ハンドラテーブル12を示している。なお図4の関数ワードフレーム8のextbleフィールド19のextbl は例外ハンドラテーブルアドレスが格納されているフィールドのワードオフセット値[I]であり、localsは関数の引数とローカル変数の個数の合計、lvars は関数のローカル変数の数である。
【0022】
定義された関数は、この図4〜図6で示すような構造でメモリに置かれ、関数が参照される場合は、図4の関数ワードフレーム8のアドレスにより参照される。図4の関数のワードフレーム8には関数が参照するワード単位の定数が並んで配置され、図5の関数命令フレーム9にはバイト単位でコード化された仮想CPU命令による関数の命令列(instruction )が配置される。
【0023】
実行中の関数の関数ワードフレーム8は、常に図2のWPレジスタ(関数ワードフレームポインタ)3でポイントされ、実行中の命令は図2のPCレジスタ(プログラムカウンタ)2でポイントされている。
【0024】
例外処理を行う部分は、2個の命令ブロックすなわち図5の実行ブロック10と例外ハンドラブロック11で構成する。実行ブロックの命令は、連続したアドレスに置く。実行ブロックの命令を実行している途中に例外が検出された場合、対応する例外ハンドラブロックが起動対象となる。例外ハンドラブロックと実行ブロックとは必ず同一関数内にある。
【0025】
1個の実行ブロックには、必ず対応する1個の例外ハンドラブロックを持つため、2個合わせて例外ハンドラ付きブロックと呼ぶ。1つの関数は複数の例外ハンドラ付きブロックを持つことができる。例外ハンドラ付きブロックを持つ関数は、必ず1個の図6に示す例外ハンドラテーブル12を持つ。例外ハンドラテーブルのエントリ13は、実行ブロックの命令が置かれているアドレスの範囲14,15とそれに対応する例外ハンドラブロックの先頭アドレス17及び処理する例外の例外コード(処理受付可能な例外コード)16で構成される。1つの関数は、複数の例外ハンドラ付きブロックを持つ場合、このハンドラテーブルエントリ13が複数配置される。
【0026】
例外ハンドラテーブルのアドレスは関数ワードフレーム8内の任意のオフセット[I]18にあるワードにセットし、関数ワードフレーム8の0番目のワードの 下から16ビット目から23ビット目の8ビット(extbl フィールド)19にテーブルアドレスをセットしたワードのオフセット値[I] をセットしておく。また、例外ハンドラ付きブロックを持たない関数ではこのextbleフィールド19にはゼロをセットする。
【0027】
例外ハンドラ付きブロックは、ネストすることも可能である。1個の関数内でネストすることもでき、また例外ハンドラ付きブロックを実行中に他の関数の呼び出しを行い、その呼び出された関数内で例外ハンドラ付きブロックを実行することでもネストされる。1個の関数内でネストする場合も例外ハンドラテーブルに複数のハンドラエントリを保持し、エントリの順番はネストの内側のものから外側のものになるように並べる。
【0028】
関数が呼び出された場合のスタックフレーム20の構造は、図7のように、各ローカル変数,Caller WP , Caller PC , Caller FP 等からなっている。
【0029】
また、例外が検出され例外シーケンスが起動された場合に作られるスタックフレーム21の構造は、図8に示すように、例外引数フレームと、例外状態フレームとからなり、上記例外引数フレームには例外引数が、上記例外状態フレームには、Initiator ES, Initiator EP, Initiator WP, Initiator PC, Initiator FP, Catcher WP, Catcher PC, Catcher FP、予約(未使用)、ハンドラエントリインデックス、例外コードからなっている。
【0030】
また、仮想CPUでの例外処理のための命令として、以下に示す4個の命令が用意されている。
【0031】
1) Raise Exception
2) Continue Exception
3) Return Exception
4) Unwind Stack
【0032】
例外シーケンスは Raise Exception命令により起動されるか、あるいは、通常の命令実行時に仮想CPUがCPU内部で例外検出を行って起動する場合もあるが、両者とも例外処理のための部分の動作は同じであるため、ここでは、Raise Exception での起動を例にして説明する。
【0033】
以上に示す4個の命令のなかで、1)を除く2), 3), 4)の命令は例外ハンドラ内だけで実行できる命令であり、1)は通常処理プログラムと例外ハンドラのどちらにおいてでも実行できる命令である。
【0034】
図9と図14は例外シーケンスでのいくつかの時点でのスタックスナップショットの例を示すものである。なお、図9については、図を見やすくするためにこの図9を図中一点鎖線で4分割し、それぞれを拡大して図10〜図13に示す。また、図14についても同様に、図を見やすくするためにこの図14を図中一点鎖線で4分割し、それぞれを拡大して図15〜図18に示す。
【0035】
以下、この図9と図14のスタックスナップショットの例と、図19〜図24のフローチャートを参照して各例外処理命令と例外シーケンスの詳細な動作について説明する。
【0036】
図19に例外の起動を行うプログラムのシーケンスフローを示す。
先ず、ステップS17で例外ハンドラへのパラメータとなる例外引数をスタックにプッシュし、ステップS18で例外の種類と理由を識別するための例外コードをスタックにプッシュする。そして、ステップS19でRaise Exception 命令を実行する。この時点でのスタックの状態とレジスタのポイント位置を図9と図14の図中P1に示す。
【0037】
図20は、Raise Exception 命令が実行された時の仮想CPUの動作のフローチャートを示している。
この図20において、Raise Exception 命令が実行開始されると、先ずステップS1において仮想CPUは、例外スタックフレームをスタックにプッシュし、ESレジスタ(例外状態フレームポインタ5)は例外状態フレームをポイントするように設定され、EPレジスタ(例外引数フレームポインタ6)は例外引数フレームをポイントするように設定される。この段階ではフレーム内のInitiator ES,Initiator EP,Initiator FP, Initiator PC, Initiator WPのフィールドにはRaise Exception が実行された時点でのレジスタの内容がセーブされて設定が行われるが、ハンドラエントリインデックスとCatcher FP, Catcher PC, Catcher WPには内容が設定されず、フレーム内にその領域だけが確保されている状態である。また、この時点でのWP,PC,FPレジスタ(関数ワードフレームポインタ3,プログラムカウンタ2,フレームポインタ4)はRaise Exception 命令を実行した時点での関数の実行状態を示している。
【0038】
その後、仮想CPUはステップS2に進む。このステップS2のステップS2Aにおいて、WP(関数ワードフレームポインタ3)でポイントされている関数が例外ハンドラテーブルを持っている場合(Yes)は、ステップS2Bに進む。このステップS2Bにおいては、PCレジスタ(プログラムカウンタ2)の内容が実行ブロックのアドレス範囲内にあって、かつ例外コードを処理受付可能な例外コードして持っているか、あるいはゼロの処理受付可能な例外コードを持つ例外ハンドラのエントリがその例外ハンドラテーブルの先頭から順番にサーチされる。その後、ステップS2Cに進む。
【0039】
また、ステップS2Aにおいて、WP(関数ワードフレームポインタ3)でポイントされている関数が例外ハンドラテーブルを持たない(Noの場合)か、或いはステップS2Bの次のステップS2Cにおいてテーブル内をサーチしてもエントリが見つからなかった場合(No)は、ステップS3にすすむ。仮想CPUはこのステップS3において、現在実行中の関数を呼び出した関数が関数からリターンするためにスタックに保存している仮想CPUの実行状態を関数スタックフレームからFPレジスタ(フレームポインタ4)をベースにしてアクセスし、WP,PC,FPレジスタ(関数ワードフレームポインタ3,プログラムカウンタ2,フレームポインタ4)に回復した後、ステップS2に戻ってハンドラのサーチが繰り返される。関数の呼び出しチェインをたどってサーチを繰り返した結果、呼び出し元がなくなった場合の動作についてはフローに示されていないが、その場合の仮想CPUは致命的エラー状態となる。
【0040】
また、上記ステップS2Cにおいて、例外ハンドラテーブルをサーチして条件を満たすハンドラエントリが見つかった場合(Yes)は、ステップS4に進む。仮想CPUは、このステップS4において、そのハンドラを持つ関数が実行されていた時点のWP,PC,FPレジスタ(関数ワードフレームポインタ3,プログラムカウンタ2,フレームポインタ4)を、例外状態フレームのCatcher WP,Catcher PC,Catcher FPの各フィールドにセーブし、見つかったエントリのテーブル上でのインデックスを同様に例外状態フレームのハンドラエントリインデックスに設定する。
【0041】
その後、ステップS5に進み、このステップS5において、ハンドラエントリのハンドラブロック先頭アドレスを参照してそれをPCレジスタ(プログラムカウンタ2)に設定し、Raise Exception 命令の実行は終了する。この時点でのスタックの状態とレジスタのポイント位置を図9と図14の図中P2に示す。その後は、PC(プログラムカウンタ2)でポイントされたハンドラブロックの先頭の仮想CPU命令から逐次実行が開始される。
【0042】
なお、図20のフローチャート中のXXは、XXでポイントされているメモリの内容を表し、XX.YYはメモリXXのYYというフィールドの内容を表している。
【0043】図21には、例外ハンドラブロックでの処理シーケンスフローを示している。
この図21において、ステップS21は例外ハンドラでの処理の本体で、ここでは例外ハンドラのブロックがある関数と同じコンテクストで実行されるので、その関数の引数とローカル変数は例外起動時の内容を保持したままでアクセスでき、その他EP,ESレジスタ(例外引数フレームポインタ6,例外状態フレームポインタ5)をベースにした例外引数と例外状態フレームの参照も可能である。その後、例外ハンドラブロックでの処理を終了するには、フローチャートでは条件判断を図示していないが例外ハンドラでの処理結果や例外の種類による条件を判断をしたうえで、3つの選択が可能である。
【0044】
この例外ハンドリングシーケンスにおいて、ステップS22を選択した場合は、Continue Exception命令を実行する。
【0045】
上記Continue Exception命令が実行された場合の仮想CPUの動作フローチャートを図22に示す。
この図22のフローチャートにおいて、Continue Exception命令が実行開始されると、先ず、ステップS6において仮想CPUは、ESレジスタ(例外状態フレームポインタ5)でポイントされている例外状態フレームより、Catcher FP, Catcher PC, Catcher WPフィールドの内容をそれぞれFP,PC,WPレジスタ(関数ワードフレームポインタ3,プログラムカウンタ2,フレームポインタ4)に回復し、ハンドラエントリインデックスフィールドから、ハンドラテーブルのサーチ続行のためのテーブルインデックスを取り出す。
【0046】
その後、上記仮想CPUはステップS7内のステップS7Aにおいて、Raise Exception 命令でのハンドラ検索条件ステップS2Bと同じ条件に合致するハンドラエントリをWP(回数ワードフレームポインタ3)でポイントされている関数の例外ハンドラテーブルのテーブルインデックスで示される位置からからサーチする。
【0047】
次のステップS7Bにおいてサーチして見つからなかった場合(No)は、ステップS8に進む。このステップS8において、ハンドラテーブルサーチのためのテーブルインデックスはゼロに設定し、次回のサーチに備える。
【0048】
その後、ステップS9に進む。このステップS9のステップS9Aにおいては、現在実行中の関数を呼び出した関数が関数からリターンするためにスタックに保存している仮想CPUの実行状態をFPレジスタ(フレームポインタ)をベースにして関数スタックフレームからアクセスし、WP,PC,FPレジスタ(関数ワードフレームポインタ3,プログラムカウンタ2,フレームポインタ4)に回復し、次のステップS9BではWP(関数ワードフレームポインタ3)でポイントされている関数が例外ハンドラテーブルを持つ関数であるまで関数呼び出しチェイン上でのサーチが行われる。このステップS9Bで、例外ハンドラテーブルが見つかった場合(Yes)は、ステップS7に戻ってハンドラエントリのサーチが繰り返される。
【0049】
また、ステップS7において例外ハンドラテーブルをサーチして条件を満たすハンドラエントリが見つかった場合(ステップS7BでYesとなる場合)、仮想CPUはステップS10に進む。このステップS10においては、そのハンドラを持つ関数が実行されていた時点のWP,PC,FPレジスタ(関数ワードフレームポインタ3,プログラムカウンタ2,フレームポインタ4)を例外状態フレームのCatcher WP, Catcher PC, Catcher FPの各フィールドにセーブし、見つかったエントリのテーブル上でのインデックスを同様に例外状態フレームのハンドラエントリインデックスに設定する。
【0050】
その後、ステップSS11において、ハンドラエントリのハンドラブロック先頭アドレスを参照してそれをPCレジスタ(プログラムカウンタ2)に設定し、Continue Exception命令の実行は終了する。この時点でのスタックの状態とレジスタのポイント位置を図9と図14の図中P3に示す。その後は、PC8プログラムカウンタ2)でポイントされた例外ハンドラブロックの先頭の仮想CPU命令から新たな例外ハンドラシーケンスとして逐次実行が開始される。
【0051】
また、図21の例外ハンドリングシーケンスにおいてステップS23を選択した場合、Unwind Stack命令を実行する。
【0052】
Unwind Stack命令が実行された場合の仮想CPUの動作フローチャートを図23に示す。
【0053】
このフローチャートにおいて、Unwind Stack命令が実行開始されると、ステップS12のステップS12AにおいてESとEPレジスタ(例外状態フレームポインタ5と例外引数フレームポインタ6)をESレジスタでポイントされている例外状態フレームのInitiator ES, Initiator EPフィールドから回復し、次のステップS12Bで現在実行中の関数の実行の途中で生成された例外フレームをスタックからすべて取り除かれたか否かの判断を行い、取り除かれていないときはすべてスタックより取り除く。
【0054】
その後、ステップS13において、現在実行中の関数の局所的なスタックの状態を空にする。すなわちここでは、スタックはこの関数が最初に呼び出された状態と同じに戻り、Unwind Stack命令の実行は終了する。この時点でのスタックの状態とレジスタのポイント位置を図9の図中P4に示す。
【0055】
その後は、図21において示した例外ハンドラブロックの処理シーケンスに戻り、Unwind Stack命令の次の仮想CPU命令から逐次実行が行われるが、ステップS24のように関数内のどこかの通常処理プログラムにブランチを行うのが一般的である。このように、例外ハンドリングシーケンスにおいてステップS23が選択された場合、図19の例外起動シーケンスのステップS20へ戻るための情報をすべて消滅させるので、決して例外起動シーケンスが回復されて終了することはない。
【0056】
上述のUnwind Stack命令の機構例では、スタック内容をポップして削除するだけであったが、関数スタックフレームをポップすることで制御の継続が消滅してしまうと問題を生じる関数の後処理を行わせるため、Unwind Stackの実行時に起動されるUnwindプロテクションハンドラをその関数内に定義させておき、それをUnwind Stack命令実行時に起動させることが、Raise Exception命令でのハンド ラのサーチと同様な機構をUnwind Stack命令においても同様に適用して付加することが可能である。
【0057】
図21の例外ハンドリングシーケンスにおいてステップS25を選択した場合、ハンドラのリターン値をスタックにプッシュし、ステップS26においてReturn Exception命令を実行する。
【0058】
Return Exception命令が実行された場合の仮想CPUの動作フローチャートを図24に示す。また、Return Exception命令の実行直前でのスタックの状態とレジスタのポイント位置を図14のP5に示す。
【0059】
図24のフローチャートにおいて、Return Exception命令が実行されると、仮想CPUはステップS14において、スタックのトップにある例外ハンドラのリターン値を取っておく。そして、ステップS15においてES(例外状態フレームポインタ5)でポイントされている例外状態フレームのInitiator WP, Initiator PC, Initiator FP, Initiator EP, Initiator ESフィールドの内容をそれぞれWP,PC,FP,EP,ESレジスタ(関数ワードフレームポインタ3,プログラムカウンタ2,フレームポインタ4,例外引数フレームポインタ6,例外状態フレームポインタ5)に回復し、例外状態フレームと例外引数フレームをスタックからポップして取り除く。
【0060】
次のステップS16において、ステップS14で取っておいた例外ハンドラのリターン値をスタックのトップに置き、Return Exception命令の実行は終了する。この時点でのスタックの状態とレジスタのポイント位置を図14の図中P6に示す。その後は、例外ハンドラを起動したRaise Exception命令を実行した関数 の実行状態での例外起動シーケンスに戻るので図19のステップS20において、Raise Exception命令の次の仮想CPU命令からの逐次実行が再開され、例外 ハンドラのリターン値をポップして受け取り、例外起動シーケンスが終了する。
【0061】
上述した本実施例で多重例外が発生した場合も、例外処理状態はスタックフレームとしてスタックされるので、例外起動点に復帰も矛盾なく可能であり、また、Unwind Stack命令では多重の例外スタックフレームをまとめて消去することも可能となっている。
【0062】
図1に戻って、本実施例装置のCD−ROMドライブ106は、装荷されたソフトウェアパッケージのメディア(上記CD−ROMディスク111)からデータを読み出す。ここで、このディスク111に記録されているデータには、前述した通常処理プログラム及び複数の例外処理ハンドラのプログラムと共に、各例外ハンドラが選択されて実行する必要のある通常処理プログラムの実行状態と例外状況を予めコード化して各例外処理ハンドラ毎に用意し、各例外処理ハンドラと結合してプログラムコード中の情報として付加しておくようにしている。上記通常処理プログラム及び例外処理ハンドラのプログラムと、当該例外処理ハンドラに付加された情報が、仮想CPU命令(仮想CPUプログラム)として、例えばディスク111の最内周の上記仮想CPUプログラム領域112に記録されている。当該仮想CPUプログラムが、RAM130の仮想CPUメモリ格納領域103に格納される。
【0063】
また、本実施例装置のCPU100は、バス108に接続された各装置(例えばキーボード等のキー入力装置7、CD−ROMドライブ106、後述するMPEGデコーダ105、CRTディスプレイコントローラ109等)の制御や、各種データの送受を中心的に行う。このCPU100は、仮想CPUインタプリタプログラム格納領域102に格納されている仮想CPUインタプリタプログラムに基づいて、上記バス108に接続された上記RAM130の仮想CPUメモリ格納領域103に格納された上記仮想CPUプログラムを解釈して実行することで前述したように例外処理機構を実現する。
【0064】
また、仮想CPUプログラムは、上記バス108に接続された各装置の制御を高レベルで行い、CD−ROM製作者の意図した制御が最終的に行われる。
【0065】
なお、本実施例装置は、いわゆるMPEG(Moving Picture Expert Group)デコーダ105をも有しており、上記CD−ROMディスク111上に記録された圧縮画像データを当該MPEGデコーダ105によってデコードし、この画像データが画像バッファメモリ104を介してCRTディスプレイコントローラ109により制御されるCRTディスプレイ110に表示されるようになっている。また、上記ディスプレイ110は、CRT(陰極線管)のみならず、他の表示装置(例えば液晶表示装置)を用いることも可能である。この場合、コントローラ109はその表示装置に応じた制御を行う。
【0066】
以上説明してきた本発明の実施例では、例外ハンドラが有効な処理プログラムのアドレス範囲とそれに対応する例外ハンドラのアドレスをテーブルにして予め用意しておく。そして、例外が起動された時点になって初めてこのテーブルとスタックフレームのサーチが行われる。従って、通常処理プログラムのCPU命令内容は例外ハンドラの有無には全く無関係であり、例外ハンドラの定義を有効にしたり無効にしたりする処理は、通常処理プログラムでは行う必要がない。また、本実施例で説明したような柔軟で多様な制御形態を持つ例外処理機構を提供するような言語やCPUにおいて、通常処理での例外処理付加のための処理オーバヘッドをゼロとさせることが本発明によって実現可能となる。
【0067】
さらに、以上の実施例は関数定義とその呼び出し機構を持つような言語及びCPUでの一実施例にすぎないが、言語やCPUによって必要とされる実行状態やその概念が異なるものであっても、実行状態の概念を持つ言語やCPUであれば、同様な例外処理機構を実現するために本発明を適用することはいくらでも可能である。
【0068】
【発明の効果】
本発明の情報処理装置及び方法においては、通常処理プログラム及び複数の例外処理ハンドラのプログラムと共に、各例外処理ハンドラが選択されて実行する必要のある通常処理プログラムの実行状態と例外状況を予めコード化して各例外処理ハンドラ毎に用意し、各例外処理ハンドラと結合してプログラムコード中の情報として付加しておくようにしているため、例外処理プログラムを付加するための通常処理プログラムに必要なオーバヘッドをゼロにすることが可能となっている。すなわち例外処理の有無が通常処理プログラムの処理量に全く影響を与えない例外処理機能が実現可能となっている。
【図面の簡単な説明】
【図1】本発明実施例の情報処理装置の概略構成を示すブロック回路図である。
【図2】仮想CPUが持っているレジスタについて説明するための図である。
【図3】仮想CPUのスタックについて説明するための図である。
【図4】関数ワードフレームの構造を示す図である。
【図5】関数命令フレームの構造を示す図である。
【図6】例外ハンドラテーブルの構造を示す図である。
【図7】関数が呼び出された場合のスタックフレームの構造を示す図である。
【図8】例外が検出され例外シーケンスが起動された場合に作られるスタックフレームの構造を示す図である。
【図9】例外シーケンスでのスタックスナップショットの一例を示す図である。
【図10】図9を4分割した場合の左上の部分を拡大して示す図である。
【図11】図9を4分割した場合の左下の部分を拡大して示す図である。
【図12】図9を4分割した場合の右上の部分を拡大して示す図である。
【図13】図9を4分割した場合の右下の部分を拡大して示す図である。
【図14】例外シーケンスでのスタックスナップショットの他の例を示す図である。
【図15】図14を4分割した場合の左上の部分を拡大して示す図である。
【図16】図14を4分割した場合の左下の部分を拡大して示す図である。
【図17】図14を4分割した場合の右上の部分を拡大して示す図である。
【図18】図14を4分割した場合の右下の部分を拡大して示す図である。
【図19】例外の起動を行うプログラムのシーケンスを示すフローチャートである。
【図20】Raise Exception 命令が実行された時の仮想CPUの動作を示すフローチャートである。
【図21】例外ハンドラブロックでの処理シーケンスを示すフローチャートである。
【図22】Continue Exception命令が実行された場合の仮想CPUの動作を示すフローチャートである。
【図23】Unwind Stack命令が実行された場合の仮想CPUの動作を示すフローチャートである。
【図24】Return Exception命令が実行された場合の仮想CPUの動作を示すフローチャートである。
【符号の説明】
1・・・・・・・・・・スタックポインタ
2・・・・・・・・・・プログラムカウンタ
3・・・・・・・・・・関数ワードフレームポインタ
5・・・・・・・・・・例外状態フレームポインタ
6・・・・・・・・・・例外引数フレームポインタ
7・・・・・・・・・・スタック
8・・・・・・・・・・関数ワードフレーム
9・・・・・・・・・・関数命令フレーム
12・・・・・・・・・例外ハンドラテーブル
20・・・・・・・・・関数スタックフレーム
21・・・・・・・・・例外スタックフレーム
100・・・・・・・・CPU
102・・・・・・・・仮想CPUインタプリタプログラム格納領域
103・・・・・・・・仮想CPUメモリ格納領域
104・・・・・・・・画像バッファメモリ
105・・・・・・・・MPEGデコーダ
106・・・・・・・・CD−ROMドライブ
107・・・・・・・・キー入力装置
108・・・・・・・・バス
109・・・・・・・・CRTディスプレイコントローラ
110・・・・・・・・CRTディスプレイ
111・・・・・・・・CD−ROMディスク
112・・・・・・・・仮想CPUプログラム領域
120・・・・・・・・ROM
130・・・・・・・・RAM

Claims (3)

  1. コンピュータプログラムを通常処理プログラムと複数の例外処理ハンドラに分離してコード化し、例外検出時において上記通常処理プログラムの実行状態に基づいて上記例外処理ハンドラを動的に選択して実行する制御を行う情報処理装置であって、
    所定の規則に則った第1の例外処理ハンドラから第2の例外処理ハンドラへの制御の移動の行程と、
    例外処理ハンドラの実行制御状態の消去及び当該例外処理ハンドラを定義した実行環境の回復の行程と、
    例外処理ハンドラから例外起動点への制御の復帰の行程と、
    例外処理ハンドラと例外起動点のパラメータ交換の行程と、
    例外処理ハンドラが定義された実行環境での当該例外処理ハンドラの実行の行程と、
    例外処理を多重化する多重例外の行程と
    を行う制御手段を有し、
    上記例外処理ハンドラを選択するために、各例外処理ハンドラに選択されるべき通常処理プログラムの実行状態情報を付加し、コード化されたプログラムに予め情報として含めておき、
    上記例外検出時に、例外検出時の通常プログラムの実行状態と各例外処理ハンドラに付加された上記通常処理プログラムの実行状態情報とを比較することにより例外処理ハンドラを選択し、実行制御を行う
    ことを特徴とする情報処理装置。
  2. 上記制御手段を、1本のスタックで制御することを特徴とする請求項1記載の情報処理装置。
  3. コンピュータプログラムを通常処理プログラムと複数の例外処理ハンドラに分離してコード化し、例外検出時において上記通常処理プログラムの実行状態に基づいて上記例外処理ハンドラを動的に選択して実行する制御を行う情報処理方法であって、
    所定の規則に則った第1の例外処理ハンドラから第2の例外処理ハンドラへの制御の移動のステップと、
    例外処理ハンドラの実行制御状態の消去及び当該例外処理ハンドラを定義した実行環境の回復のステップと、
    例外処理ハンドラから例外起動点への制御の復帰のステップと、
    例外処理ハンドラと例外起動点のパラメータ交換のステップと、
    例外処理ハンドラが定義された実行環境での当該例外処理ハンドラの実行のステップと、
    例外処理を多重化する多重例外のステップとを行う制御ステップを有し、
    上記例外処理ハンドラを選択するために、各例外処理ハンドラに選択されるべき通常処理プログラムの実行状態情報を付加し、コード化されたプログラムに予め情報として含めておき、
    上記例外検出時に、例外検出時の通常プログラムの実行状態と各例外処理ハンドラに付加された上記通常処理プログラムの実行状態情報とを比較することにより例外処理ハンドラを選択し、実行制御を行う
    ことを特徴とする情報処理方法。
JP19012793A 1993-07-30 1993-07-30 情報処理装置及び方法 Expired - Fee Related JP3603314B2 (ja)

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 JPH0744398A (ja) 1995-02-14
JP3603314B2 true 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)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
CN102570990B (zh) * 2010-12-29 2014-09-17 安凯(广州)微电子技术有限公司 一种放大器输出级过流保护电路

Also Published As

Publication number Publication date
JPH0744398A (ja) 1995-02-14

Similar Documents

Publication Publication Date Title
JP5680679B2 (ja) 例外イベントを取り扱うための装置および方法
US5742822A (en) Multithreaded processor which dynamically discriminates a parallel execution and a sequential execution of threads
EP2443548B1 (en) Data processing apparatus and method
US5634046A (en) General purpose use of a stack pointer register
RU2179331C2 (ru) Способ и устройство для выполнения команд с плавающей запятой и упакованных данных, используя одиночный файл регистра
KR100640314B1 (ko) 혼합된 실행 스택 및 예외처리의 구현방법및 그 장치
JP4954281B2 (ja) ネイティブコードに結合中に例外処理するための例外処理システム、例外処理方法、変換装置、および記憶媒体
RU98113914A (ru) Способ и устройство для выполнения команд с плавающей запятой и упакованных данных, используя одиночный файл регистра
US7080239B2 (en) Loop control circuit and loop control method
CN1099631C (zh) 双执行部件处理器的反回逻辑线路
US6892379B2 (en) Methods and apparatus for use in aiding stack unwinding
JPH01161442A (ja) レジスタ退避・回復方式
JPH05250182A (ja) プログラム条件処理
JP3603314B2 (ja) 情報処理装置及び方法
JP2850808B2 (ja) データ処理装置およびデータ処理方法
JPS61221936A (ja) データ処理装置
JPH1196002A (ja) データ処理装置
US5138617A (en) Method for masking false bound faults in a central processing unit
US7103880B1 (en) Floating-point data speculation across a procedure call using an advanced load address table
JPS58178464A (ja) 並列演算処理装置
JPH03184123A (ja) デジタルデータプロセッサのための手続き状態記述子システム
JP2876791B2 (ja) 例外処理装置および例外処理方法
JP2562838B2 (ja) プロセッサ及びストアバッファ制御方法
JPH11134202A (ja) タスク切替え装置
WO1990005951A1 (en) Method of handling unintended software interrupt exceptions

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)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20040920

FPAY Renewal fee payment (event 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