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
Application number
JP19012793A
Other languages
English (en)
Other versions
JP3603314B2 (ja
Inventor
Yasuyuki Kinoshita
康幸 木下
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

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【構成】 通常処理プログラム(実行ブロック10)及
び複数の例外処理ハンドラのプログラム(例外ハンドラ
ブロック11)と共に、各例外処理ハンドラが選択され
て実行する必要のある通常処理プログラムの実行状態と
例外状況を予めコード化して各例外処理ハンドラ毎に用
意し、各例外処理ハンドラと結合してプログラムコード
中の情報として付加(例外ハンドラテーブル12)して
おく。 【効果】 例外処理プログラムを付加するための通常処
理プログラムに必要なオーバヘッドをゼロにすることが
可能となっている。すなわち例外処理の有無が通常処理
プログラムの処理量に全く影響を与えない例外処理機構
が実現可能となっている。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、例外処理機構を実現す
るプログラム言語のコンパイラやインタプリタ、及びC
PU(中央処理ユニット)を有する情報処理装置に関す
るものである。
【0002】
【従来の技術】従来より、コンピュータのプログラムに
おいて例外的状況が検出された場合の処理プログラム
を、通常の処理プログラムとは別のプログラム、すなわ
ち例外ハンドラとして分離しておき、このハンドラを制
御する手段を言語やCPUが提供することで、プログラ
ムの頑強性や一般性、及び正しさを高め、複雑さを低減
させることに役立つことがよく知られている。
【0003】そのなかで、例外ハンドラを通常処理プロ
グラムの実行に伴って動的に定義し、プログラムが例外
状況に遭遇した場合に例外ハンドラが動的に選択されて
実行される制御形態がいくつかの言語のために提案さ
れ、実装も行われている。
【0004】その例としては、ANSI X3J16 C++言語標準
化委員会では try、catch とthrowが提案され、また同
じくANSI X3J13 Common Lisp言語標準化委員会ではコン
ディションシステムが仕様として提案されている。
【0005】実装としては、Microsoft 社のC/C++ Vers
ion 7.0 が ANSI C++ での仕様を従来のC言語ライブラ
リにあるsetjmp/longjmp関数を使ってマクロとして実装
し、またC++ やLisp言語とは異なるが、ParcPlace Syst
ems 社のSmalltalk Release4 ではハンドラ定義メソッ
ドでブロッククロージャをコンテクストにリンクしてお
くことで同様な例外処理機構を実装している例が挙げら
れる。
【0006】
【発明が解決しようとする課題】ところで、前述したよ
うな従来の実装方法においては次のような欠点がある。
すなわち、setjmpや例外ハンドラを定義する関数等を呼
び出して例外時に制御を移す場所を保存し、例外が検出
されて例外ハンドラを実行する時に保存された制御移行
場所を復元する方法では、通常処理において実行状態と
例外ハンドラの結合と分離の処理とを行わなければなら
ず、実行されない可能性がある例外処理の準備のために
余分な処理を通常処理が行う必要がある。この余分な処
理は、例外処理が行われる確率は通常処理に比べて非常
に低いという性質を考慮すれば通常処理に負わせるオー
バヘッドとして好ましくない。
【0007】そこで、本発明は、上記のオーバヘッドの
問題を解決するためのものであり、例外処理プログラム
を付加するための通常処理プログラムに必要なオーバヘ
ッドをゼロにすることを可能にすること、すなわち例外
処理の有無が通常処理プログラムの処理量に全く影響を
与えない例外処理機構を有する情報処理装置を提供する
ことを目的とするものである。
【0008】
【発明を解決するための手段】上記目的を達成するため
に、本発明の情報処理装置は、コンピュータプログラム
を通常処理プログラムと複数の例外処理ハンドラに分離
してコード化し、上記例外処理ハンドラの定義を上記通
常処理プログラムの実行により動的に行い、例外検出時
において上記通常処理プログラムの実行状態に基づいて
上記例外処理ハンドラを動的に選択して実行する制御を
行うものであり、所定の規則に則った第1の例外処理ハ
ンドラから第2の例外処理ハンドラへの制御の移動(す
なわち、第1の例外処理ハンドラから当該第1の例外処
理ハンドラよりも一般的な第2の例外処理ハンドラへの
制御の移動)の行程と、例外処理ハンドラの実行制御状
態の消去及び当該例外処理ハンドラを定義した実行環境
の回復の行程と、例外処理ハンドラから例外起動点への
制御の復帰の行程と、例外処理ハンドラと例外起動点の
パラメータ交換の行程と、例外処理ハンドラが定義され
た実行環境での当該例外処理ハンドラの実行の行程と、
例外処理を多重化する多重例外の行程とを行う制御手段
を有してなり、例外処理ハンドラの有無が通常処理プロ
グラムの処理量に影響を与えないことを特徴とするもの
である。
【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に対応する)を示し、プログラミングモデルを
示している。
【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にはバイト単位でコード化された仮想CP
U命令による関数の命令列(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のように、各ローカル変数,Call
er WP , Caller PC , Caller FP 等からなっている。
【0029】また、例外が検出され例外シーケンスが起
動された場合に作られるスタックフレーム21の構造
は、図8に示すように、例外引数フレームと、例外状態
フレームとからなり、上記例外引数フレームには例外引
数が、上記例外状態フレームには、Initiator ES, Init
iator EP, Initiator WP, Initiator PC, Initiator F
P, 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内部で例外検出を行って起動する場合も
あるが、両者とも例外処理のための部分の動作は同じで
あるため、ここでは、RaiseException での起動を例に
して説明する。
【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
は、例外スタックフレームをスタックにプッシュし、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 命令を実
行した時点での関数の実行状態を示している。
【0038】その後、仮想CPUはステップS2に進
む。このステップS2のステップS2Aにおいて、WP
(関数ワードフレームポインタ3)でポイントされてい
る関数が例外ハンドラテーブルを持っている場合(Ye
s)は、ステップ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,P
C,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でポイントされているメモリの内容を表し、X
X.YYはメモリXXのYYというフィールドの内容を
表している。
【0043】図21には、例外ハンドラブロックでの処
理シーケンスフローを示している。この図21におい
て、ステップS21は例外ハンドラでの処理の本体で、
ここでは例外ハンドラのブロックがある関数と同じコン
テクストで実行されるので、その関数の引数とローカル
変数は例外起動時の内容を保持したままでアクセスで
き、その他EP, ESレジスタ(例外引数フレームポイ
ンタ6,例外状態フレームポインタ5)をベースにした
例外引数と例外状態フレームの参照も可能である。その
後、例外ハンドラブロックでの処理を終了するには、フ
ローチャートでは図示していないが例外ハンドラでの処
理結果や例外の種類による条件を判断をしたうえで、3
つの選択が可能である。
【0044】この例外ハンドリングシーケンスにおい
て、ステップS22を選択した場合は、Continue Excep
tion命令を実行する。
【0045】上記Continue Exception命令が実行された
場合の仮想CPUの動作フローチャートを図22に示
す。この図22のフローチャートにおいて、Continue E
xception命令が実行開始されると、先ず、ステップS6
において仮想CPUは、ESレジスタ(例外状態フレー
ムポインタ5)でポイントされている例外状態フレーム
より、Catcher FP,Catcher PC, Catcher WPフィールド
の内容をそれぞれFP,PC,WPレジスタ(関数ワー
ドフレームポインタ3,プログラムカウンタ2,フレー
ムポインタ4)に回復し、ハンドラエントリインデック
スフィールドから、ハンドラテーブルのサーチ続行のた
めのテーブルインデックスを取り出す。
【0046】その後、上記仮想CPUはステップS7内
のステップS7Aにおいて、RaiseException 命令での
ハンドラ検索条件ステップ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, Catche
r PC, Catcher FPの各フィールドにセーブし、見つかっ
たエントリのテーブル上でのインデックスを同様に例外
状態フレームのハンドラエントリインデックスに設定す
る。
【0050】その後、ステップSS11において、ハン
ドラエントリのハンドラブロック先頭アドレスを参照し
てそれをPCレジスタ(プログラムカウンタ2)に設定
し、Continue Exception命令の実行は終了する。この時
点でのスタックの状態とレジスタのポイント位置を図9
と図14の図中P3に示す。その後は、PC8プログラ
ムカウンタ2)でポイントされた例外ハンドラブロック
の先頭の仮想CPU命令から新たな例外ハンドラシーケ
ンスとして逐次実行が開始される。
【0051】また、図21の例外ハンドリングシーケン
スにおいてステップS23を選択した場合、Unwind Sta
ck命令を実行する。
【0052】Unwind Stack命令が実行された場合の仮想
CPUの動作フローチャートを図23に示す。
【0053】このフローチャートにおいて、Unwind Sta
ck命令が実行開始されると、ステップS12のステップ
S12AにおいてESとEPレジスタ(例外状態フレー
ムポインタ5と例外引数フレームポインタ6)をESレ
ジスタでポイントされている例外状態フレームのInitia
tor 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 Ex
ception命令でのハンドラのサーチと同様な機構をUnwin
d 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, Initiato
r PC, Initiator FP, Initiator EP, Initiator ESフィ
ールドの内容をそれぞれWP,PC,FP,EP,ES
レジスタ(関数ワードフレームポインタ3,プログラム
カウンタ2,フレームポインタ4,例外引数フレームポ
インタ6,例外状態フレームポインタ5)に回復し、例
外状態フレームと例外引数フレームをスタックからポッ
プして取り除く。
【0060】次のステップS16において、ステップS
14で取っておいた例外ハンドラのリターン値をスタッ
クのトップに置き、Return Exception命令の実行は終了
する。この時点でのスタックの状態とレジスタのポイン
ト位置を図14の図中P6に示す。その後は、例外ハン
ドラを起動したRaise Exception命令を実行した関数の
実行状態での例外起動シーケンスに戻るので図19のス
テップS20において、Raise Exception命令の次の仮
想CPU命令からの逐次実行が再開され、例外ハンドラ
のリターン値をポップして受け取り、例外起動シーケン
スが終了する。
【0061】上述した本実施例で多重例外が発生した場
合も、例外処理状態はスタックフレームとしてスタック
されるので、例外起動点に復帰も矛盾なく可能であり、
また、Unwind Stack命令では多重の例外スタックフレー
ムをまとめて消去することも可能となっている。
【0062】図1に戻って、本実施例装置のCD−RO
Mドライブ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に接続された各装置の制御を高レベルで行い、C
D−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命令が実行された場合の仮想C
PUの動作を示すフローチャートである。
【図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
─────────────────────────────────────────────────────
【手続補正書】
【提出日】平成6年7月19日
【手続補正1】
【補正対象書類名】明細書
【補正対象項目名】特許請求の範囲
【補正方法】変更
【補正内容】
【特許請求の範囲】
【手続補正2】
【補正対象書類名】明細書
【補正対象項目名】0019
【補正方法】変更
【補正内容】
【0019】 図2及び図3には、仮想CPUにおける
レジスタ(図1のRAM130の仮想CPUメモリ格納
領域103及びCPU100のレジスタの一部に対応す
る)を示し、プログラミングモデルを示している。
【手続補正3】
【補正対象書類名】明細書
【補正対象項目名】0043
【補正方法】変更
【補正内容】
【0043】 図21には、例外ハンドラブロックでの
処理シーケンスフローを示している。この図21におい
て、ステップS21は例外ハンドラでの処理の本体で、
ここでは例外ハンドラのブロックがある関数と同じコン
テクストで実行されるので、その関数の引数とローカル
変数は例外起動時の内容を保持したままでアクセスで
き、その他EP,ESレジスタ(例外引数フレームポイ
ンタ6,例外状態フレームポインタ5)をベースにした
例外引数と例外状態フレームの参照も可能である。その
後、例外ハンドラブロックでの処理を終了するには、フ
ローチャートでは条件判断を図示していないが例外ハン
ドラでの処理結果や例外の種類による条件を判断をした
うえで、3つの選択が可能である。
【手続補正4】
【補正対象書類名】明細書
【補正対象項目名】図21
【補正方法】変更
【補正内容】
【図21】 例外ハンドラブロックでの処理シーケンス
を示すフローチャートである。
【手続補正5】
【補正対象書類名】図面
【補正対象項目名】図3
【補正方法】変更
【補正内容】
【図3】
【手続補正6】
【補正対象書類名】図面
【補正対象項目名】図4
【補正方法】変更
【補正内容】
【図4】
【手続補正7】
【補正対象書類名】図面
【補正対象項目名】図5
【補正方法】変更
【補正内容】
【図5】
【手続補正8】
【補正対象書類名】図面
【補正対象項目名】図7
【補正方法】変更
【補正内容】
【図7】
【手続補正9】
【補正対象書類名】図面
【補正対象項目名】図8
【補正方法】変更
【補正内容】
【図8】
【手続補正10】
【補正対象書類名】図面
【補正対象項目名】図14
【補正方法】変更
【補正内容】
【図14】
【手続補正11】
【補正対象書類名】図面
【補正対象項目名】図20
【補正方法】変更
【補正内容】
【図20】

Claims (4)

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

* Cited by examiner, † Cited by third party
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

Cited By (4)

* Cited by examiner, † Cited by third party
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