JPH06324885A - 例外条件処理方法及び装置 - Google Patents

例外条件処理方法及び装置

Info

Publication number
JPH06324885A
JPH06324885A JP6031210A JP3121094A JPH06324885A JP H06324885 A JPH06324885 A JP H06324885A JP 6031210 A JP6031210 A JP 6031210A JP 3121094 A JP3121094 A JP 3121094A JP H06324885 A JPH06324885 A JP H06324885A
Authority
JP
Japan
Prior art keywords
exception
handler
activation record
program
message
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
JP6031210A
Other languages
English (en)
Other versions
JP2526020B2 (ja
Inventor
Edward Benson Frank
フランク・エドワード・ベンソン
Daniel Rodman Hicks
ダニエル・ロッドマン・ヒックス
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.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of JPH06324885A publication Critical patent/JPH06324885A/ja
Application granted granted Critical
Publication of JP2526020B2 publication Critical patent/JP2526020B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

(57)【要約】 【目的】 本発明の主目的は、従来技術における「デッ
ド・ルーチン」の問題を解決しながら、「終了」言語モ
デルと「非終了」言語モデルをサポートする、機能強化
された方法及び装置を提供することである。 【構成】 従来技術の内部化の問題に関して、本発明で
使用する解決策は、システム・レベルの例外管理ルーチ
ンの局所記憶域から独立した、個々の例外事例に関する
情報をデータ構造内に維持する。これによって、例外処
理機構全体が、システム・レベルの例外管理ルーチンの
コール/リターン・フローから独立にこれらのデータ構
造の操作に関して記述し指定することができるようにな
るので、混乱やあいまいさがなくなる。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明はデータ処理の分野に関す
る。さらに詳しくは、本発明はコンピュータ・システム
内でのエラー/例外処理に関する。
【0002】
【従来の技術】本発明は、1991年9月6日出願の"P
rogram Condition Handling"と題する米国特許出願第7
55706号(対応する日本国特許出願平4−2226
52号)に関係する。これを以下関連出願Iと称する。
【0003】本発明はまた、1991年9月6日出願
の"Method and System for Representing and Signalin
g Run-Time Program Conditions"と題する米国特許出願
第755708号(対応する日本国特許出願平4−22
2640号)にも関係する。これを以下関連出願IIと称
する。
【0004】1948年のEDVACコンピュータ・シ
ステムの開発が、しばしばコンピュータ時代の始まりと
して引用されている。この時以来、コンピュータ・シス
テムは米国のライフ・スタイルのほぼあらゆる面に浸透
してきた。この普及の理由の一つは、コンピュータ・シ
ステムが様々なタスクを効率的に実行できることであ
る。コンピュータ・システムがこうしたタスクを実行す
るために使用する機構を、コンピュータ・プログラムと
呼ぶ。
【0005】「コール/リターン・スタック」が、コン
ピュータ・システムがコンピュータ・プログラムにそれ
ぞれのタスクを実行させ、それによってそうしたタスク
を実行するための基本的手段である。実行のためにコン
ピュータ・プログラムが実行されると、コンピュータ・
システムはその特定のコンピュータ・プログラムに関す
るクリティカルな情報を追跡するためのレコードを作成
する。これらのレコードを活動化レコードと呼ぶ。この
第1のコンピュータ・プログラムが別のコンピュータ・
プログラムを呼び出すと、コンピュータ・システムはそ
の第2のコンピュータ・プログラムを表す別の活動化レ
コードを作成する。さらに別のコンピュータ・プログラ
ムの呼出しが行われるたびに、このプロセスが繰り返さ
れる。この一連の呼出しの結果得られる活動化レコード
は、互いに論理的に「スタック」されると言われる
(「コール/リターン・スタック」の名前はそれに由来
する)。一般に新しい活動化レコードはこのコール/リ
ターン・スタック(以下スタックと称する)の一番上に
置かれると考えられる。その活動化レコードがスタック
の一番上にあるルーチンを、「走行プログラム」と呼
ぶ。
【0006】スタック上のコンピュータ・プログラムを
維持し操作するための機構の設計は比較的単純である
が、この枠組の内部でエラーを容易にかつ効率的に処理
する能力は以前から課題であった。この問題に対する従
来の解決策は、「リターン・コード」を使用するもので
ある。リターン・コードとは、他のルーチンの呼出しか
ら戻され、呼び出されたルーチンが首尾よく完了したか
否かを示すパラメータである。リターン・コードはま
た、障害が実際に発生した場合に障害の原因を示すこと
もできる。リターン・コード方式はある状況では有効な
解決策となるが、いくつかの重大な欠陥がある。こうし
た欠陥には、リターン・コード・パラメータの設定、受
渡し、検査に伴うコスト、(リターン・コード中で提供
される以外の)エラー情報の喪失、及びエラーを「オン
・ザ・フライ」で訂正し障害を発生したルーチンを続行
させる能力がないことがある。
【0007】こうしたリターン・コード方式に固有の諸
問題を解決するため、いくつかのマシン、オペレーティ
ング・システム及び言語は、何らかの種類の「例外」機
構を含んでいる。こうした機構は一般にいくつかの重要
な点で互いに異なるが、そのすべてが少くとも1つの基
本概念を共有している。すなわち、エラーが検出される
と、現(障害を発生した)ルーチンの実行が中断され、
多少とも「目に見えない」機構を介して「例外処理」ル
ーチンの呼出しが行われる。
【0008】このエラー報告・処理のための例外手法は
それ自体いくつかの欠点をもつものの、「リターン・コ
ード」手法の上記の欠陥の大部分を克服する。しかし、
例外手法の主要な欠陥は、2つの実施態様に同じものま
たは特に互いに原始言語互換性のあるものがないことで
ある。具体的に言うと、PL/1、ADA、Modul
a−3の各言語は定義済み例外モデルが相互に互換性が
なく、C言語は実際の言語構文/意味論の一部として定
義された例外モデルをもたないが、一般に、他の3者と
互換性のない例外モデルに対するライブラリ・サポート
を供給されている。したがって、こうした多様な言語を
サポートするのに十分な柔軟性を有し、かつこうした言
語が予測可能かつ妥当な形で相互に協働できる、抽象的
アーキテクチャ・モデルを定義することが、克服すべき
大きな課題である。
【0009】非互換性の主な原因は、モデルにおける終
了意味論の有無である。ADA言語は、例外ハンドラ
が、それが定義されているコードのルーチンまたはブロ
ックにされており、例外ハンドラの1つを呼び出す前
に、定義ルーチンから呼び出されるすべてのルーチンが
打ち切られるので、古典的な終了モデルをもつ。このこ
とは、とりわけ、ある例外が「処理」された後、元の例
外の時点から実行を再開できず、定義ルーチンまたはブ
ロックの出口点から再開しなければならないことを意味
する。
【0010】一方、標準C言語ライブラリ・サポート
は、「非終了(nonterminating)」例外モデルを有す
る。例外が発生したとき、既に呼び出されたルーチンは
呼び出された状態に残され、例外処理ルーチンが、多少
とも例外点から呼び出されたかのように呼び出される。
このモデルでは、例外が「処理」される場合、通常、元
の例外点から実行が再開され、ADAスタイルの「終了
(termination)」は明示的なプログラマの動作を介し
てしか可能でない。
【0011】非互換性の第2の原因は、「非終了」モデ
ルで、例外を「再信号表示」して、単一の例外に対して
再度例外を呼び出させることが可能かどうかである。P
L/1言語はその古典的な例である。未処理の例外は、
恐らくアプリケーション全体の実行が打ち切られる前に
何らかの量のクリーンアップを可能にするために、「障
害」例外として再信号表示される。しかし、この再信号
表示能力が、多くの例外モデルで問題を生じる。という
のは、例外モデルは本来「静的」であり、反復または再
入を容易にサポートしないからである。
【0012】非互換性の第3の原因は、「例外データ」
を例外と関連付けることができるかどうかである。たと
えば、指名されたファイルが存在しないためにファイル
「オープン」動作が失敗した場合、「オープン」ルーチ
ンに提示されたファイル名を「ファイルが見つからな
い」例外と関連付けるのが(診断の目的にも回復の目的
にも)有用である。大部分の例外モデルは、こうした例
外データに対するサポートをほとんど提供しない。技術
的には、例外データの管理と追跡は、特に再通知(リシ
グナリング)をサポートする非終了モデルの場合、難し
いタスクである。というのは、反復の可能性があるとい
うことは、任意の一時点で存在する個々の例外データの
数が無制限であることを暗示するからである。
【0013】上記の最初の2つの非互換性の問題点は、
原理的に、関連出願Iに記載の「2カーソル・モデル」
によって解決される。このモデルでは、各例外が一時に
スタック上の異なる可能性もある2つの活動化レコード
に関連付けられる。1つの被呼出ルーチンは、各例外の
発生に関連する「処理カーソル」によってアドレスされ
る。このルーチンは、例外が「処理された」場合にその
実行が再開されるものである。もう一方の被呼出ルーチ
ンは、各例外の発生に関連する「ハンドル・カーソル」
によってアドレスされる。このルーチンは、適切な例外
処理ルーチンを選択するために、その例外ハンドラ定義
が次に検査されるものである。
【0014】この「2カーソル・モデル」では、「ハン
ドル・カーソル」を比較的自由に操作することができ
る。ハンドル・カーソルをルーチンからその呼出側へ移
動することを「パーコレーション(回復機能委任)」と
称し、逆の方向に(最近に呼び出されたルーチンに向か
って)移動することを、例外の「再通知」と称する。一
方、「再開カーソル」は、その動きがより限定されてお
り、より以前に呼び出されたルーチンの方向に(すなわ
ち、被呼出側から呼出側に)しか移動できず、移動され
るたびに、「脱出済み」ルーチン(以前に再開カーソル
によってアドレスされた被呼出ルーチン)が、それによ
って定義される可能性のある「終了ハンドラ」(「出口
ハンドラ」とも称する)をもつかどうか検査される。
【0015】終了ハンドラの定義が見つかった場合、関
連するハンドラ・ルーチンが(例外ハンドラ・ルーチン
と類似の方式で)呼び出され、定義ルーチンに必要な
「クリーンアップ」を実行できるようになる。再開カー
ソルの操作に関するこれらの制限により、異常終了した
被呼出ルーチン用の終了ハンドラ・ルーチンが必ず一度
だけ呼び出されるようになる。これとは対照的に、例外
ハンドラ・ルーチンは複数回呼び出すことができ、ある
いはハンドル・カーソルの操作により全く飛び越すこと
もできる。
【0016】関連出願Iに記載の従来技術の解決策によ
れば、熟練したプログラマが、あらゆるエラー条件の総
体的知識を必要とせず、かつプログラムの部分中でエラ
ー処理を行わずに、そのエラー処理の際に「頑丈な」プ
ログラムを設計することが可能になるが、大きな主要な
問題が残る。
【0017】関連出願Iに記載の「2カーソル・モデ
ル」には、2つの基本的な問題がある。第一に、その記
述によればその機構は、大きな困難と複雑さなしでは、
モデルの潜在的反復/再入を管理し、なおかつ「カーソ
ル」の簡単で自由な操作を可能にすることができない。
具体的な1つの問題は、「デッド」被呼出ルーチン(カ
ーソル移動再開の結果打ち切られたルーチン)が終了し
てスタック中に留まり、せいぜい状況を「混乱させる」
だけであることがある。悪くすると、こうした「デッ
ド」被呼出ルーチンが非常に多くの記憶域を占有して、
使用可能な記憶資源がなくなってしまうこともある。
【0018】(関連出願I及びIIで述べられている)
「2カーソル・モデル」に伴う第2の問題は、例外デー
タの内部化である。この問題は、上述の第3の非互換性
の問題(すなわち、例外データの管理)に関係する。個
々の例外事例に関する問題は、基本的に(コール/リタ
ーン・フローとは独立な分離したデータ構造としてでは
なく)システム・レベルの例外管理ルーチンの局所記憶
域中に変数として維持されるので、自由にこの情報にア
クセスしそれを管理する能力が制限され、ある種の反復
的状況では情報の記憶位置があいまいになることさえあ
る。
【0019】
【発明が解決しようとする課題】本発明の主目的は、従
来技術の解決策に存在する「デッド・ルーチン」の問題
を解決しながら、「終了」言語モデルと「非終了」言語
モデルをサポートする、機能強化された方法及び装置を
提供することである。
【0020】本発明の他の目的は、例外データを対象活
動から切り離して、他のプロセスからそれにアクセスで
きるようにする、機能強化された方法及び装置を提供す
ることである。
【0021】
【課題を解決するための手段】上述の「デッド・ルーチ
ン」の問題を解決するために、本発明では、「トラッ
プ」機構を使って例外処理中の実行の流れを制御する。
本発明のトラップ機構は、特定の被呼出(ただし、現在
実行中でない)ルーチンに対してトラップをセットし
て、その被呼出ルーチンに戻るとき、直ちに制御が何ら
かのシステム・レベルの例外管理ルーチン(すなわち、
「トラップ・ハンドラ」)に戻るようにする。これは
(たとえば、あらゆる呼出しの戻り点で生成される明示
的テストを含めて)いくつかの方法で達成できるか、本
発明の機構は、被呼出ルーチンの「リターン・アドレ
ス」を、被呼出ルーチンに戻ろうと試みても、その代わ
りにシステム・レベルの例外管理コードに分岐するよう
に修正する。
【0022】本発明のトラップ・ハンドラを用いると、
後で通知される例外を、トラップされたルーチンに制御
が戻るような時まで「保留」状態に置くことができる。
このようにして、「デッド・ルーチン」の問題が回避さ
れる。この機構は、後続の例外が処理される前にこれら
のルーチンをスタックから除去する手段を提供するの
で、「デッド・ルーチン」がスタックを混乱させること
はない。
【0023】従来技術の内部化の問題に関して、本発明
で使用する解決策は、システム・レベルの例外管理ルー
チンの局所記憶域から独立した、個々の例外事例に関す
る情報をデータ構造内に維持するものである。これによ
って、例外処理機構全体が、システム・レベルの例外管
理ルーチンのコール/リターン・フローから独立にこれ
らのデータ構造の操作に関して記述し指定することがで
きるので、混乱やあいまいさがなくなる。
【0024】
【実施例】図1に、本発明のコンピュータ・システムの
構成図を示す。好ましい実施例のコンピュータ・システ
ムは、拡張IBM AS/400中型コンピュータ・シ
ステムである。ただし、高水準言語をサポートするコン
ピュータ・システムならどれでも使用できる。図1の分
解図に示すように、コンピュータ・システム100は主
演算処理装置または中央演算処理装置(CPU)105
を含んでいる。CPU 105は、システム・バス15
0を介してデータ記憶装置140と端末インターフェー
ス145に接続されている。端末インターフェース14
5は、システム管理者やコンピュータ・プログラマやユ
ーザが、通常はプログラマブル・ワークステーションを
介して、コンピュータ・システム100と通信できるよ
うにする。図1に示したシステムは、1つの主CPUと
1本のシステム・バスだけを含むが、本発明は、複数の
CPUと複数の入出力バスを有するコンピュータ・シス
テムにも同様に適用される。同様に、好ましい実施例の
バスは典型的ハードワイヤ式分岐バスであるが、両方向
通信をサポートする接続手段ならどんなものでも使用で
きる。
【0025】データ記憶装置140は、コンピュータ・
プログラム110(以下、プログラムと称する)、例外
ハンドラ115、終了ハンドラ117、トラップ・ハン
ドラ120、OSエラー・ハンドラ125、及びオペレ
ーティング・システム135を格納している。データ記
憶装置140は、図では単一の実体として示してある
が、図のすべてのプログラムやファイルを必ずしも1つ
の装置に格納する必要はない。たとえば、プログラム1
10とオペレーティング・システム135の一部分は通
常実行のため主メモリにロードされ、原始データ・ファ
イルは、通常磁気ディスクまたは光ディスク記憶装置に
記憶される。
【0026】図2に、呼出しのシナリオの一例を表す従
来技術のスタックを示す。スタック200は、活動化レ
コード205、210、215、220を含んでいる。
活動化レコード205は、従来技術の解決策のオペレー
ティング・システムを表し、活動化レコード210、2
15、220は、異なる3つのコンピュータ・プログラ
ムを表す。図2で、活動化レコード210、215、2
20は、それぞれ実行可能コンピュータ・プログラム
と、その特定のコンピュータ・プログラム用の例外ハン
ドラとを指すポインタを含んでいる。プログラムA、
B、Cの言語は、それぞれPL/1、ADA、C言語で
ある。
【0027】プログラムAは、活動化レコード210で
示される。活動化レコード210は、スタックに最初に
置かれるので、このシナリオでは、コンピュータ・シス
テム100上で最初に実行されたコンピュータ・プログ
ラム(すなわち、プログラムA)を表す。プログラムA
は、プログラムBを呼び出し、したがって活動化レコー
ド215(すなわち、プログラムBを表す活動化レコー
ド)がスタックの活動化レコード210の上に置かれ
た。この例では、プログラムBはプログラムCを呼び出
したので、図では活動化レコード220がスタック20
0の一番上にある。
【0028】図3に、従来技術の解決策の「デッド・ル
ーチン」の問題を例示的に示す。上述のように従来技術
の解決策では、各例外に2つのカーソルを関連付ける。
第1のタイプのカーソル、すなわちカーソル・ハンドル
は、現在例外を処理する責任を負っているコンピュータ
・プログラムを表す、スタック上の活動化レコードを指
し、第2のタイプのカーソル、すなわち再開カーソル
は、例外の処理後に実行が再開されるコンピュータ・プ
ログラムを表す、スタック上の活動化レコードを指す。
デッド・ルーチンの問題が発生するのは、例外を処理し
ているコンピュータ・プログラム(すなわち、ハンドル
・カーソルが指している例外ハンドラ)自体が例外を生
じる時である。これは、ステップ・バイ・ステップの例
で説明するのが最良である。
【0029】図3で、プログラムCは例外を生じる最初
のプログラムである。再開ポインタとハンドル・ポイン
タは、図3ではそれぞれRC及びHCとして示してあ
る。このカーソルの図には、例外数と対象カーソルの相
対移動を表す数値ポインタ識別子も示してある。たとえ
ば、HC1(P1)は、位置1における例外用のハンド
ル・カーソルを表す。その場合、最初、再開カーソルと
ハンドル・カーソルはどちらも、活動化レコード220
[HC1(P1)及びRC1(P1)]を指す。次にO
Sエラー・ハンドラを呼び出して、それがC言語用の適
切な例外ハンドラ(すなわち、活動化レコード220の
Cエラー・ハンドラ・ポインタが指す例外ハンドラ)を
呼び出すことができるようにする。これらのステップ
は、図に示してない。この例では、C言語例外ハンドラ
は、その例外を処理できないものとする。そうすると、
オペレーティング・システムのエラー・ハンドラに戻
り、それがハンドル・カーソルを下方へ活動化レコード
215の所まで移動し、そこでADA例外ハンドラが呼
び出される[HC1(P2)]。活動化レコード230
は、ADA例外ハンドラを表す。ADA言語は、終了例
外処理モデルを使用するので、ADA例外ハンドラは、
再開カーソルを活動化レコード220から下方へ活動化
レコード215の所まで移動する[RC1(P2)]。
この時点で、プログラムCが「デッド・ルーチン」にな
っている。次にADA例外ハンドラは、プログラムCの
後を「クリーンアップ」するために(活動化レコード2
35で表される)プログラムDを呼び出す。
【0030】第1の例外の場合と同様に、最初、この例
外用のハンドル・カーソルと再開カーソルも活動化レコ
ード235を指す[HC2(P1)及びRC2(P
1)]。この場合も(活動化レコード240で示される
ように)問題を処理するために、OSエラー・ハンドラ
が呼び出される。OSエラー・ハンドラは、プログラム
Dに関連する例外ハンドラがないと判定すると、ハンド
ル・カーソルを下方に活動化レコード230の所まで移
動し、再度ADA例外ハンドラを呼び出す[HC2(P
2)]。ADA例外ハンドラのこの事例は、活動化レコ
ード245で示される。終了モデルでは、次にADA例
外ハンドラは、プログラムDの後にクリーンアップする
ために別のプログラムを呼び出し、再開カーソルを適当
に(すなわち、活動化レコード235から下方に活動化
レコード230の所まで)移動する[RC2(P
2)]。もちろん、これによってプログラムDがもう1
つのデッド・ルーチンになる。問題が解決されずに続く
場合、スタックをサポートするのに使用されるメモリは
最終的に使い尽くされ、コンピュータ・システム自体が
停止することになる。
【0031】上述のように、従来技術の解決策に伴う第
2の問題は、例外データの管理である。図3に示すよう
に、従来技術の解決策の例外データは、その特定の例外
に対して責任を負うオペレーティング・システムに対し
て局所的に保たれる。図4に従来技術の例外データ・レ
コードの例を示す。例外データ・レコード255は、例
外原因フィールド260と他の例外データ・フィールド
265を含んでいる。例外原因フィールド260は、そ
の名前が示すように、例外の原因に関する情報を格納す
る。他の例外データ・フィールド265は、特定の例外
ハンドラにとって重要となる可能性のある他の例外デー
タ情報を格納するために使用する。その例としては、詳
細原因コード、例外を生じたプログラムのプログラムI
D、例外発生時のプロセス状態、例外に関する位置情報
などがある。
【0032】この情報は、その例外に対して責任を負う
OSエラー・ハンドラの事例に対して局所的に記憶され
るので、その情報を呼出しステートメント・パラメータ
を介して、またはオペレーティング・システム自体によ
って提供されるサービス・ルーチンを経て、後の例外ハ
ンドラに渡さなければならない。これにより2つの問題
が生じる。情報が呼出しステートメント自体を介して使
用可能になる場合、その情報は、現例外ハンドラが必要
とするのに、例外の故に呼び出された介在プログラムに
よって除去されてしまっている可能性がある。同様に、
OSエラー・ハンドラ自体が、最初の例外ハンドラがそ
の問題を処理するであろうと考えて、適切な情報を渡す
ことを必要と考える可能性もある。
【0033】特別のオペレーティング・システム・サー
ビス・ルーチンでルーチン間での情報の受渡しに固有の
問題の一部が解決されるが、これらは、その特定の例外
をその例外に対して責任を負うOSエラー・ハンドラの
事例と関連付ける能力をもたないという欠点がある。特
定の例外ハンドラの事例が複数あるときには、これは特
に難しい問題となる。
【0034】図5に、呼出しシナリオの例での本発明の
スタックを示す。スタック300は、活動レコード30
5、310、315、320、325を含んでいる。活
動化レコード305はオペレーティング・システム13
5を表し、活動化レコード310、315、320は異
なる3つのコンピュータ・プログラムを表す。活動化レ
コード310、315、320はそれぞれ、図では実行
可能コンピュータ・プログラム及び制御情報ブロックを
指すポインタを含んでいる。活動化レコード325は、
OSエラー・ハンドラ125を表す。
【0035】前の例(この場合は、活動化レコード21
0)と同様に、図では最初に活動化レコード310がス
タックに置かれる。したがって、活動化レコード310
は、この例ではコンピュータ・システム100上で最初
に実行されたコンピュータ・プログラム(すなわち、プ
ログラムA)を表す。プログラムAはプログラムBを呼
び出し、したがって活動化レコード315(すなわち、
プログラムBを表す活動化レコード)がスタックの活動
化レコード310の上に置かれた。この例では、プログ
ラムBはプログラムCを呼び出したので、活動化レコー
ド320が活動化レコード315の上にある。
【0036】図6に、本発明の制御情報ブロックを示
す。制御情報ブロック330は、終了フラグ335、前
回障害フラグ337、例外原因ポインタ340、呼出し
メッセージ待ち行列345、例外ハンドラ・ポインタ3
50、及び終了ハンドラ・ポインタ355を含んでい
る。これらのフィールドの意味については、後で図7な
いし図12に詳しく説明する。
【0037】活動化レコード325の存在(図5)は、
スタック300上の他の活動化レコードによって表され
るプログラムの1つによって例外が生じたことを示す。
例外が発生すると、オペレーティング・システム135
がOSエラー・ハンドラ125を呼び出す。OSエラー
・ハンドラ125は、そのリターン・アドレスを対象プ
ログラム以外のルーチンに戻るように修正することによ
り、その例外を生じたプログラムを「トラップ」する。
この異なるルーチンが、トラップ・ハンドラ120であ
る。さらに、OSエラー・ハンドラ125はまた、その
例外を生じたプログラムの活動化レコードに例外原因メ
ッセージをリンクする。
【0038】図7ないし図12は、図13及び図14と
あいまって、本発明のトラップ・ハンドラ120及び他
の機構の内部動作を説明するのに使用される。図7に
は、OSエラー・ハンドラ125(図5で活動化レコー
ド325によって表される)がその初期処理を実行した
後のスタック300を示す。図では、スタック300
は、先に論じた活動化レコード305、310、31
5、320に加えて、トラップ・ハンドラ425、呼出
しメッセージ待ち行列430、440、445、及び例
外原因メッセージ435も含んでいる。
【0039】本発明の機構は、終了例外モデルと非終了
例外モデルを平等に扱う。本発明の基本機構を、非終了
モデルのもとで動作するルーチンを使用した例によって
説明する。基本機構について考察した後、終了モデルの
もとで動作するルーチンを使用した例について述べる。
この後者の例は、本発明の機構が「デッド・ルーチン」
の問題を克服する手法をどのようにして提供するかを説
明するのに最も適している。
【0040】非終了モデルの処理 図13及び図14は、トラップ・ハンドラ120の流れ
図である。トラップ・ハンドラ120は呼び出される
と、ブロック515で、まずトラップされたルーチンが
「終了」のためにトラップされたのか、それとも「例外
のためにトラップされた」のかを判定する。トラップ・
ハンドラ120は、終了フラグ335(図6)を検査す
ることによってこの判定を行う。対象プログラムが終了
のためにトラップされていた場合、終了フラグ335は
論理1に設定される。これが起こるのは、終了例外モデ
ルのもとで動作するプログラム(たとえば、ADA)が
使用されるときである。このフラグは、それ自体が終了
したいプログラムによって、または特定のプログラムを
終了させたい例外ハンドラによってセットすることがで
きる。ただし、この例では、スタック300の諸プログ
ラムがC言語で書かれており、したがって非終了例外モ
デルのもとで動作するものと仮定する。その場合、終了
フラグ335はセットされない(すなわち、論理0の値
をとる)。
【0041】最初にプログラムCによって例外が通知さ
れると仮定すると、トラップ・ハンドラ120は先に進
んで、ブロック520で、プログラムCが例外のために
トラップされているかどうか判定する。これは、プログ
ラムCの制御情報を用いて関連する例外原因の位置決定
を試みることによって行われる。トラップ・ハンドラ1
20は、例外原因ポインタ340(図6)を使って、例
外原因メッセージ435(図7)の位置決定を試みる。
例外原因ポインタ340がNullである(すなわち、有効
値をもたない)場合、トラップ・ハンドラ120は、対
象プログラムをもはやトラップする必要がないことを知
り、先に進んでブロック525でトラップをクリアし、
ブロック580で対象プログラムに制御を戻す。
【0042】しかし、ここで例外原因ポインタ340が
有効なアドレスをもち、ブロック535でトラップ・ハ
ンドラ120が例外原因メッセージ435の位置決定を
行える。例外原因メッセージ435は、以前にOSエラ
ー・ハンドラ125によって活動化レコード320にリ
ンクされており、対象例外のために使用可能なすべての
情報を含んでいる。この情報には、詳細原因コード、そ
の例外を生じたプログラムのプログラムID、例外発生
時のプロセス状態、その例外に関する位置情報などが含
まれる。例外原因メッセージは、その他に、それが現在
入れられている特定の呼出しメッセージ待ち行列に関す
る位置情報も含んでいる。
【0043】例外原因メッセージ435は、最初に呼出
しメッセージ待ち行列430に入れられる。例外原因メ
ッセージ435の位置決定後、ブロック545でトラッ
プ・ハンドラ120は、例外原因メッセージ435内に
含まれる位置情報を使って、適切な(すなわち、ターゲ
ット呼出しのための)制御情報を位置決定する。最初
に、トラップ・ハンドラ120は、プログラムCに関連
する制御情報を位置決定する。このステップは、やや循
環的であるが、汎用機械の設計に必要である。
【0044】ブロック555で、トラップ・ハンドラ1
20は、この例外を処理するために特定のプログラムに
関連する例外ハンドラが既に呼び出されたかどうか(す
なわち、それが既に試みられ失敗したかどうか)を判定
する。トラップ・ハンドラ120は、前回失敗フラグ3
37(図5)を検査することによってこの判定を行う。
この例外ハンドラはまだ呼び出されていないので、トラ
ップ・ハンドラ120は前回失敗フラグ337を論理1
にセットし、ブロック565で例外ハンドラ・ポインタ
350(図5)で識別されるプログラムCに関連する例
外ハンドラを呼び出す。この例外ハンドラは、本明細書
に記載する他の例外ハンドラと同様に、コンピュータ・
システム100上では、図1の例外ハンドラ115によ
って論理的に表されることを理解されたい。この説明で
は、この例外ハンドラは、この特定の例外を処理できな
いものと仮定する。この例外ハンドラは、この例外を処
理できないので、トラップ・ハンドラ120に制御を戻
し、ブロック580でトラップ・ハンドラ120自体も
リターンする。
【0045】プログラムCはトラップされたままなの
で、トラップ・ハンドラ120は直ちに再呼出しされ
る。前回と同様に、トラップ・ハンドラ120はブロッ
ク515で終了フラグ335を検査し、ブロック520
で例外原因メッセージ・ポインタ340を検査し、ブロ
ック535で例外原因メッセージ435を位置決定し、
ブロック545で例外原因メッセージ435を使ってタ
ーゲット呼出しを位置決定する。ただし、先に進んでプ
ログラムC用の例外ハンドラを再呼出しする代わりに、
トラップ・ハンドラ120は、ブロック555で、(前
回失敗フラグ337を使って)この例外ハンドラが既に
問題の解決を試みて失敗したかどうかを判定する。その
後、トラップ・ハンドラ120は先に進んで、例外原因
メッセージを下方にスタック上の次の呼出しの呼出しメ
ッセージ待ち行列まで移動(すなわち、パーコレート)
する。図7に示すように、例外原因メッセージ435
は、下方にプログラムBと活動化レコード315に関連
する呼出しメッセージ待ち行列440まで移動されてい
る。次にブロック580で、トラップ・ハンドラ120
はリターンする。
【0046】プログラムCはトラップされたままなの
で、トラップ・ハンドラ120は再度再呼出しされる。
トラップ・ハンドラ120は、ブロック515でもう一
度終了フラグ335を検査し、ブロック520で例外原
因メッセージ・ポインタ340を検査し、ブロック53
5で例外原因メッセージ435を位置決定し、ブロック
545で例外原因メッセージ435を使ってターゲット
呼出しを位置決定する。しかし、今度は例外原因メッセ
ージ435内の位置情報は、トラップ・ハンドラ120
を、プログラムBに関連する制御情報(すなわち、活動
化レコード315)へと導く。ブロック555で、トラ
ップ・ハンドラ120は、この例外を処理するためにプ
ログラムBに関連する例外ハンドラが既に呼び出された
かどうか(すなわち、既に試みて失敗したかどうか)を
判定する。トラップ・ハンドラ120は、前回失敗フラ
グ337(図5)を検査することによってこの判定を行
う。この例外ハンドラはまだ呼び出されていないので、
トラップ・ハンドラ120は前回失敗フラグ337をセ
ットし、図13のブロック565で、例外ハンドラ・ポ
インタ350(図5)で識別される例外ハンドラを呼び
出す。この説明では、プログラムB用の例外ハンドラが
そのエラー条件を処理できるものと仮定する。そうであ
る場合、例外ハンドラは例外原因メッセージ435を削
除して、例外原因ポインタ340をクリアさせる。次に
例外ハンドラは、トラップ・ハンドラ120に制御を戻
し、トラップ・ハンドラ120はプログラムCに制御を
戻す。ただし、この時点でプログラムCはトラップされ
たままであり、したがって直ちにトラップ・ハンドラ1
20に制御が戻される。次いでブロック520でトラッ
プ・ハンドラ120は、プログラムCをもはやトラップ
する必要がないと判定し、先に進んでプログラムCのリ
ターン・アドレスを変更してその元の値525に戻すこ
とにより、トラップをクリアする。これが済むと、ブロ
ック580でトラップ・ハンドラ120はプログラムC
に制御を戻す。
【0047】終了モデルの処理 終了モデルのもとで動作するプログラムがどのように処
理されるか理解するために、もう一度、プログラムCが
実行中に例外を生じ、したがって前述のようにトラップ
されていると仮定する。図10ないし図14を参照する
と、エラーを処理するために同様にトラップ・ハンドラ
120が呼び出される(トラップ・ハンドラ120は、
図10では活動化レコード425で表される)。前と同
様に、トラップ・ハンドラ120は、終了フラグ335
がセットされていず、OSエラー・ハンドラ125が例
外原因メッセージ435を作成し、それを例外原因ポイ
ンタ340を介して活動化レコード320にリンクした
ことを発見する。上述のように、トラップ・ハンドラ1
20は問題を処理するために、最終的にプログラムCに
関連する例外ハンドラを呼び出す(図14のブロック5
65で、図10に活動化レコード450として示す)。
【0048】この時点で、プログラムC用の例外ハンド
ラがそれ自体例外を生じる。これによって、トラップ・
ハンドラ120の別の事例と第2の例外を処理するため
の別のプログラム(すなわち、例外ハンドラ用の例外ハ
ンドラ)が、スタック300上に置かれる(それぞれ図
11に活動化レコード460及び465として表す)。
後者のプログラムは、図11にプログラムDとして示さ
れている。
【0049】トラップ・ハンドラ120のこの設計によ
り、コンピュータ・プログラムは例外データをスタック
中で下方に移動して、別の例外ハンドラによって処理さ
せるようにする例外ハンドラをコーディングできるよう
になる。したがって、プログラムDは、トラップ・ハン
ドラ120によって呼び出される(図14のブロック5
65として示す)と、活動化レコード450用の終了フ
ラグ335をセットする他に、この例外に関連する例外
原因メッセージ(例外原因メッセージ452)を活動化
レコード450の呼出しメッセージ待ち行列から明示的
に除去し、代わりの例外原因メッセージ(例外原因メッ
セージ488)を別の例外ハンドラの呼出しメッセージ
待ち行列に入れることができる。ここで、この例外ハン
ドラが対象例外原因メッセージをプログラムCの呼出し
メッセージ待ち行列に入れると仮定する(図11参
照)。プログラムDも、活動化レコード320中の初期
例外原因メッセージ・ポインタ(すなわち、例外原因メ
ッセージ435を指すポインタ)を新しい例外原因メッ
セージ(すなわち、例外原因メッセージ488)で置き
換える。
【0050】次に例外ハンドラは、トラップ・ハンドラ
120に戻る。プログラムC用の例外ハンドラがトラッ
プされたままなので、トラップ・ハンドラ120が再呼
出しされる。トラップ・ハンドラ120は、ブロック5
15でプログラムC用の例外ハンドラが終了のためにト
ラップされていると判定し、ブロック530でこの例外
ハンドラに関連するある終了ハンドラがあればそれを実
行し、ブロック540で呼出しメッセージ待ち行列をク
リアし(図11の呼出しメッセージ待ち行列455)、
ブロック550で例外原因メッセージがまだ存在するか
どうか判定する。この場合、プログラムC用の例外ハン
ドラの第一の事例によって生じた例外を表す例外原因メ
ッセージは、プログラムによって明示的に除去された
(すなわち、例外原因メッセージ452)。したがっ
て、次にトラップ・ハンドラ120は、ブロック575
でスタック300から呼出し(すなわち、プログラムC
の例外ハンドラに関連する呼出し)を除去し、ブロック
580でリターンする。
【0051】トラップ・ハンドラ120がリターンする
とき、トラップされたままのプログラムCに戻る。した
がって、トラップ・ハンドラ120がもう一度再呼出し
される。上述のように、プログラムC用の例外ハンドラ
が、この新しい例外(すなわち、プログラムDによって
生成され、例外原因メッセージ488によって表される
代わりの例外)を処理するために、最終的に呼び出され
る。プログラムC用の例外ハンドラが、この例外はそれ
が処理できるものではないと直ちに認識するものと仮定
する。したがって、プログラムC用の例外ハンドラは、
例外原因メッセージ488を下方にプログラムBまでパ
ーコレートし(すなわち、活動化レコード315)、プ
ログラムCを終了することを決定する。そうするため
に、例外ハンドラは、例外原因メッセージ488を呼出
しメッセージ待ち行列430から下方に呼出しメッセー
ジ待ち行列440まで移動し、活動化レコード320用
の終了フラグ335をセットする。次に、例外ハンドラ
は制御をトラップ・ハンドラ120に戻し、ブロック5
80でトラップ・ハンドラがリターンする。しかし、ト
ラップ・ハンドラ120がプログラムCに制御を戻そう
と試みたとき、プログラムCがトラップされたままであ
ることを発見し、したがってそれが直ちに再呼出しされ
る。
【0052】プログラムC用の例外ハンドラと同様に、
トラップ・ハンドラ120は、ブロック515で終了フ
ラグ335がセットされたと判定し、ブロック530に
進んでプログラムC用の終了ハンドラを呼び出す。これ
は、活動化レコード320の制御情報ブロックの終了ハ
ンドラ・ポインタ・フィールド355を介して達成され
る。この終了ハンドラは、終了ハンドラ117の1つで
ある。対象終了ハンドラは次に先に進んでプログラムC
の後でクリーンアップする。このタスクには、メモリと
ロックを解放し、または他の一般的分解動作を実行し、
あるいはその両方を行うことが必要なことがある。
【0053】対象終了ハンドラがその処理を完了する
と、トラップ・ハンドラ120に制御を戻す。トラップ
・ハンドラ120は先に進んで、ブロック540でプロ
グラムC用に定義されている呼出しメッセージ待ち行列
をクリアし、ブロック550でプログラムC用の例外原
因メッセージが作成されているかどうか検査する。この
場合、例外原因メッセージ488は、活動化レコード3
20にリンクされたままとなる。したがって、ブロック
560でトラップ・ハンドラ120は、例外原因メッセ
ージ488を下方に活動化レコード315(すなわち、
プログラムB用の活動化レコード)に転送する。この時
点で、トラップ・ハンドラ120は、先に進んでブロッ
ク575でスタックからプログラムCを除去し、ブロッ
ク580でリターンする。次いで、プログラムBで処理
が続行し、トラップ・ハンドラ120が例外原因メッセ
ージ488によって表される例外を処理するためにプロ
グラムB用の例外ハンドラを呼び出す。従来技術の解決
策を使用している場合は、プログラムB用の例外ハンド
ラが強制的にこの第2の例外を処理してからでないと、
デッド・ルーチン(プログラムC、プログラムC用の例
外ハンドラ、及び恐らくはプログラムD)をスタックか
ら除去できないことになる。こうなるのは、従来技術の
解決策では、すべての例外データを、例外の処理を開始
するOSエラー・ハンドラにとって局所的に保つからで
ある(図3及び関連する本文を参照のこと)。しかし、
本発明の例外データは、走行中のどのプログラムにとっ
ても外部にあり、したがって走行中のすべてのプログラ
ムにとって使用可能である。
【0054】この時点で、処理は上述のように続行す
る。図12に示すようにデッド・ルーチン(プログラム
C)は、除去されている。第2の例外(すなわち、例外
原因メッセージ488によって表される例外)は、通常
の手順で処理される。
【0055】外部化された例外データ 「発明が解決しようとする課題」及び「課題を解決する
ための手段」の所で考察したように、本発明は従来技術
の例外データ管理の問題をも解決する。制御情報ブロッ
クのポインタ(図8)を介して、例外データが「外部
化」されており、したがって情報を必要とするプロセス
は、渡された変数や特別のシステム・コールに依存する
必要なく、その情報にアクセスすることができる。さら
に、例外データは、その例外を処理する責任を最終的に
負うルーチンの活動化レコードに直接結合されるので、
どの例外データがどの位置に記憶されるかについて混乱
はない。
【0056】本発明に関連して以下の事項について開示
する。 (1)スタック中の項目である活動化レコードによって
識別される走行中のプログラム内の例外条件を検出する
ステップと、エラー・ハンドラを呼び出すステップと、
前記エラー・ハンドラによって、前記走行中のプログラ
ムをトラップするステップと、前記エラー・ハンドラに
よって、例外原因メッセージを作成するステップと、前
記エラー・ハンドラによって、前記例外原因メッセージ
を前記活動化レコードにリンクするステップと、前記エ
ラー・ハンドラによって、前記例外原因メッセージを前
記活動化レコード中で参照されるメッセージ待ち行列に
入れるステップと、前記活動化レコードに含まれるポイ
ンタを介して例外ハンドラを呼び出すステップと、を含
む、コンピュータ・システム内で例外条件を処理する方
法。 (2)a)複数の活動化レコードを含み前記複数の活動
化レコードの1つが現活動化レコードである、タック・
フレーム内で識別され、最初に前記現活動化レコードで
ある走行中のプログラムを表す第1の活動化レコードを
有する、第1のプログラム内の例外条件を検出するステ
ップと、 b)エラー・ハンドラを呼び出すステップと、 c)前記エラー・ハンドラによって、前記第1プログラ
ムをトラップするステップと、 d)前記エラー・ハンドラによって、例外原因メッセー
ジを作成するステップと、 e)前記エラー・ハンドラによって、前記例外原因メッ
セージを前記第1活動化レコードにリンクするステップ
と、 f)前記エラー・ハンドラによって、前記例外原因メッ
セージを前記第1活動化レコードに含まれる第1メッセ
ージ待ち行列に入れるステップと、 g)前記現活動化レコード内のポインタ・フィールドを
検査することによって、前記第1プログラムがそれに関
連する例外ハンドラを有するかどうかを判定するステッ
プと、 h)前記判定ステップで、前記現活動化レコードに関連
する例外ハンドラがないことが示されたとき、前記第1
メッセージ待ち行列から前記例外原因メッセージを除去
し、前記例外原因メッセージを、第2プログラムに関連
し前記現活動化レコードになる第2活動化レコードに含
まれる、第2メッセージ待ち行列に入れるステップと、 i)前記ポインタ・フィールドが、前記現活動化レコー
ドにある例外ハンドラが関連することを示すまで、ステ
ップg)及びh)を繰り返すステップと、 j)前記例外ハンドラを呼び出すステップと、を含む、
コンピュータ・システム内で例外条件を処理する方法。 (3)スタック中の項目である活動化レコードによって
識別される走行中のプログラム内の例外条件を検出する
ステップと、エラー・ハンドラを呼び出すステップと、
前記エラー・ハンドラによって、前記走行中のプログラ
ムをトラップするステップと、前記エラー・ハンドラに
よって、例外原因メッセージを作成するステップと、前
記エラー・ハンドラによって、前記例外原因メッセージ
を前記活動化レコードにリンクするステップと、前記エ
ラー・ハンドラによって、前記例外原因メッセージを前
記活動化レコード中で参照されるメッセージ待ち行列に
入れるステップと、前記活動化レコードに含まれるポイ
ンタを介して例外ハンドラを呼び出すステップと、前記
走行中のプログラムを終了すべきことを指示するよう
に、前記活動化レコードにマークを付けるステップと、
前記活動化レコードを前記スタックから除去することに
よって、前記走行中のプログラムを終了するステップ
と、を含む、コンピュータ・システム内で例外条件を処
理する方法。 (4)a)複数の活動化レコードを含み前記複数の活動
化レコードの1つが現活動化レコードである、スタック
・フレーム内で識別され、最初に前記現活動化レコード
である走行中のプログラムを表す第1の活動化レコード
を有する、第1のプログラム内の例外条件を検出するス
テップと、 b)エラー・ハンドラを呼び出すステップと、 c)前記エラー・ハンドラによって、前記第1プログラ
ムをトラップするステップと、 d)前記エラー・ハンドラによって、例外原因メッセー
ジを作成するステップと、 e)前記エラー・ハンドラによって、前記例外原因メッ
セージを前記第1活動化レコードにリンクするステップ
と、 f)前記エラー・ハンドラによって、前記例外原因メッ
セージを前記第1活動化レコードに含まれる第1メッセ
ージ待ち行列に入れるステップと、 g)前記現活動化レコード内のポインタ・フィールドを
検査することによって、前記第1プログラムがそれに関
連する例外ハンドラを有するかどうかを判定するステッ
プと、 h)前記判定ステップで、前記現活動化レコードに関連
する例外ハンドラがないことが示されたとき、前記第1
メッセージ待ち行列から前記例外原因メッセージを除去
し、前記例外原因メッセージを、第2プログラムに関連
し前記現活動化レコードになる第2活動化レコードに含
まれる、第2メッセージ待ち行列に入れるステップと、 i)前記ポインタ・フィールドが、前記現活動化レコー
ドにある例外ハンドラが関連することを示すまで、ステ
ップg)及びh)を繰り返すステップと、 j)前記例外ハンドラを呼び出すステップと、 k)前記走行中のプログラムを終了すべきことを指示す
るように、前記活動化レコードにマークを付けるステッ
プと、 l)前記現活動化レコードを前記スタックから除去する
ことによって、前記走行中のプログラムを終了するステ
ップと、を含む、コンピュータ・システム内で例外条件
を処理する方法。 (5)スタック中の項目である活動化レコードによって
識別される走行中のプログラム内の例外条件を検出する
手段と、エラー・ハンドラを呼び出す手段と、前記エラ
ー・ハンドラによって、前記走行中のプログラムをトラ
ップする手段と、前記エラー・ハンドラによって、例外
原因メッセージを作成する手段と、前記エラー・ハンド
ラによって、前記例外原因メッセージを前記活動化レコ
ードにリンクする手段と、前記エラー・ハンドラによっ
て、前記例外原因メッセージを前記活動化レコード中で
参照されるメッセージ待ち行列に入れる手段と、前記活
動化レコードに含まれるポインタを介して例外ハンドラ
を呼び出す手段と、を含む、コンピュータ・システム内
で例外条件を処理するための装置。 (6)a)複数の活動化レコードを含み前記複数の活動
化レコードの1つが現活動化レコードである、スタック
・フレーム内で識別され、最初に前記現活動化レコード
である走行中のプログラムを表す第1の活動化レコード
を有する、第1のプログラム内の例外条件を検出する手
段と、 b)エラー・ハンドラを呼び出す手段と、 c)前記エラー・ハンドラによって、前記第1プログラ
ムをトラップする手段と、 d)前記エラー・ハンドラによって、例外原因メッセー
ジを作成する手段と、 e)前記エラー・ハンドラによって、前記例外原因メッ
セージを前記第1活動化レコードにリンクする手段と、 f)前記エラー・ハンドラによって、前記例外原因メッ
セージを前記第1活動化レコードに含まれる第1メッセ
ージ待ち行列に入れる手段と、 g)前記現活動化レコード内のポインタ・フィールドを
検査することによって、前記第1プログラムがそれに関
連する例外ハンドラを有するかどうかを判定する手段
と、 h)前記判定ステップで、前記現活動化レコードに関連
する例外ハンドラがないことが示されたとき、前記第1
メッセージ待ち行列から前記例外原因メッセージを除去
し、前記例外原因メッセージを、第2プログラムに関連
し前記現活動化レコードになる第2活動化レコードに含
まれる、第2メッセージ待ち行列に入れる手段と、 i)前記ポインタ・フィールドが、前記現活動化レコー
ドにある例外ハンドラが関連することを示すまで、前記
判定手段及び前記除去手段を繰り返す手段と、 j)前記例外ハンドラを呼び出す手段と、を含む、コン
ピュータ・システム内で例外条件を処理するための装
置。 (7)スタック中の項目である活動化レコードによって
識別される走行中のプログラム内の例外条件を検出する
手段と、エラー・ハンドラを呼び出す手段と、前記エラ
ー・ハンドラによって、前記走行中のプログラムをトラ
ップする手段と、前記エラー・ハンドラによって、例外
原因メッセージを作成する手段と、前記エラー・ハンド
ラによって、前記例外原因メッセージを前記活動化レコ
ードにリンクする手段と、前記エラー・ハンドラによっ
て、前記例外原因メッセージを前記活動化レコード中で
参照されるメッセージ待ち行列に入れる手段と、前記活
動化レコードに含まれるポインタを介して例外ハンドラ
を呼び出す手段と、前記走行中のプログラムを終了すべ
きことを指示するように、前記活動化レコードにマーク
を付ける手段と、前記活動化レコードを前記スタックか
ら除去することによって、前記走行中のプログラムを終
了する手段と、を含む、コンピュータ・システム内で例
外条件を処理するための装置。 (8)a)複数の活動化レコードを含み前記複数の活動
化レコードの1つが現活動化レコードである、スタック
・フレーム内で識別され、最初に前記現活動化レコード
である走行中のプログラムを表す第1の活動化レコード
を有する、第1のプログラム内の例外条件を検出する手
段と、 b)エラー・ハンドラを呼び出す手段と、 c)前記エラー・ハンドラによって、前記第1プログラ
ムをトラップする手段と、 d)前記エラー・ハンドラによって、例外原因メッセー
ジを作成する手段と、 e)前記エラー・ハンドラによって、前記例外原因メッ
セージを前記第1活動化レコードにリンクする手段と、 f)前記エラー・ハンドラによって、前記例外原因メッ
セージを前記第1活動化レコードに含まれる第1メッセ
ージ待ち行列に入れる手段と、 g)前記現活動化レコード内のポインタ・フィールドを
検査することによって、前記第1プログラムがそれに関
連する例外ハンドラを有するかどうかを判定する手段
と、 h)前記判定ステップで、前記現活動化レコードに関連
する例外ハンドラがないことが示されたとき、前記第1
メッセージ待ち行列から前記例外原因メッセージを除去
し、前記例外原因メッセージを、第2プログラムに関連
し前記現活動化レコードになる第2活動化レコードに含
まれる、第2メッセージ待ち行列に入れる手段と、 i)前記ポインタ・フィールドが、前記現活動化レコー
ドにある例外ハンドラが関連することを示すまで、前記
判定手段及び前記除去手段を繰り返す手段と、 j)前記例外ハンドラを呼び出す手段と、 k)前記走行中のプログラムを終了すべきことを指示す
るように、前記活動化レコードにマークを付ける手段
と、 l)前記現活動化レコードを前記スタックから除去する
ことによって、前記走行中のプログラムを終了する手段
と、を含む、コンピュータ・システム内で例外条件を処
理するための装置。
【図面の簡単な説明】
【図1】好ましい実施例のコンピュータ・システムを示
す図である。
【図2】従来技術のコール/リターン・スタックを示す
図である。
【図3】例外が生じた従来技術のコール/リターン・ス
タックを示す図である。
【図4】従来技術の例外データ・レコードを示す図であ
る。
【図5】本発明のコール/リターン・スタックの構造を
示す図である。
【図6】本発明の制御情報レコードの構造を示す図であ
る。
【図7】本発明によって例外がどのように処理されるか
を示す、コール/リターン・スタッフの例を示す図であ
る。
【図8】本発明によって例外がどのように処理されるか
を示す、コール/リターン・スタッフの例を示す図であ
る。
【図9】本発明によって例外がどのように処理されるか
を示す、コール/リターン・スタッフの例を示す図であ
る。
【図10】本発明によって例外がどのように処理される
かを示す、コール/リターン・スタッフの例を示す図で
ある。
【図11】本発明によって例外がどのように処理される
かを示す、コール/リターン・スタッフの例を示す図で
ある。
【図12】本発明によって例外がどのように処理される
かを示す、コール/リターン・スタッフの例を示す図で
ある。
【図13】本発明によって例外がどのように処理される
かを示す、トラップ・ハンドラの流れ図である。
【図14】本発明によって例外がどのように処理される
かを示す、トラップ・ハンドラの流れ図である。
【符号の説明】
100 コンピュータ・システム 105 中央演算処理装置(CPU) 110 コンピュータ・プログラム 115 例外ハンドラ 117 終了ハンドラ 120 トラップ・ハンドラ 125 OSエラー・ハンドラ 135 オペレーティング・システム 140 データ記憶装置 145 端末インターフェース 150 システム・バス
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ダニエル・ロッドマン・ヒックス アメリカ合衆国55920 ミネソタ州バイロ ン フォース・アベニュー ノース・イー スト513

Claims (8)

    【特許請求の範囲】
  1. 【請求項1】スタック中の項目である活動化レコードに
    よって識別される走行中のプログラム内の例外条件を検
    出するステップと、 エラー・ハンドラを呼び出すステップと、 前記エラー・ハンドラによって、前記走行中のプログラ
    ムをトラップするステップと、 前記エラー・ハンドラによって、例外原因メッセージを
    作成するステップと、 前記エラー・ハンドラによって、前記例外原因メッセー
    ジを前記活動化レコードにリンクするステップと、 前記エラー・ハンドラによって、前記例外原因メッセー
    ジを前記活動化レコード中で参照されるメッセージ待ち
    行列に入れるステップと、 前記活動化レコードに含まれるポインタを介して例外ハ
    ンドラを呼び出すステップと、 を含む、コンピュータ・システム内で例外条件を処理す
    る方法。
  2. 【請求項2】a)複数の活動化レコードを含み前記複数
    の活動化レコードの1つが現活動化レコードである、タ
    ック・フレーム内で識別され、最初に前記現活動化レコ
    ードである走行中のプログラムを表す第1の活動化レコ
    ードを有する、第1のプログラム内の例外条件を検出す
    るステップと、 b)エラー・ハンドラを呼び出すステップと、 c)前記エラー・ハンドラによって、前記第1プログラ
    ムをトラップするステップと、 d)前記エラー・ハンドラによって、例外原因メッセー
    ジを作成するステップと、 e)前記エラー・ハンドラによって、前記例外原因メッ
    セージを前記第1活動化レコードにリンクするステップ
    と、 f)前記エラー・ハンドラによって、前記例外原因メッ
    セージを前記第1活動化レコードに含まれる第1メッセ
    ージ待ち行列に入れるステップと、 g)前記現活動化レコード内のポインタ・フィールドを
    検査することによって、前記第1プログラムがそれに関
    連する例外ハンドラを有するかどうかを判定するステッ
    プと、 h)前記判定ステップで、前記現活動化レコードに関連
    する例外ハンドラがないことが示されたとき、前記第1
    メッセージ待ち行列から前記例外原因メッセージを除去
    し、前記例外原因メッセージを、第2プログラムに関連
    し前記現活動化レコードになる第2活動化レコードに含
    まれる、第2メッセージ待ち行列に入れるステップと、 i)前記ポインタ・フィールドが、前記現活動化レコー
    ドにある例外ハンドラが関連することを示すまで、ステ
    ップg)及びh)を繰り返すステップと、 j)前記例外ハンドラを呼び出すステップと、 を含む、コンピュータ・システム内で例外条件を処理す
    る方法。
  3. 【請求項3】スタック中の項目である活動化レコードに
    よって識別される走行中のプログラム内の例外条件を検
    出するステップと、 エラー・ハンドラを呼び出すステップと、 前記エラー・ハンドラによって、前記走行中のプログラ
    ムをトラップするステップと、 前記エラー・ハンドラによって、例外原因メッセージを
    作成するステップと、 前記エラー・ハンドラによって、前記例外原因メッセー
    ジを前記活動化レコードにリンクするステップと、 前記エラー・ハンドラによって、前記例外原因メッセー
    ジを前記活動化レコード中で参照されるメッセージ待ち
    行列に入れるステップと、 前記活動化レコードに含まれるポインタを介して例外ハ
    ンドラを呼び出すステップと、 前記走行中のプログラムを終了すべきことを指示するよ
    うに、前記活動化レコードにマークを付けるステップ
    と、 前記活動化レコードを前記スタックから除去することに
    よって、前記走行中のプログラムを終了するステップ
    と、 を含む、コンピュータ・システム内で例外条件を処理す
    る方法。
  4. 【請求項4】a)複数の活動化レコードを含み前記複数
    の活動化レコードの1つが現活動化レコードである、ス
    タック・フレーム内で識別され、最初に前記現活動化レ
    コードである走行中のプログラムを表す第1の活動化レ
    コードを有する、第1のプログラム内の例外条件を検出
    するステップと、 b)エラー・ハンドラを呼び出すステップと、 c)前記エラー・ハンドラによって、前記第1プログラ
    ムをトラップするステップと、 d)前記エラー・ハンドラによって、例外原因メッセー
    ジを作成するステップと、 e)前記エラー・ハンドラによって、前記例外原因メッ
    セージを前記第1活動化レコードにリンクするステップ
    と、 f)前記エラー・ハンドラによって、前記例外原因メッ
    セージを前記第1活動化レコードに含まれる第1メッセ
    ージ待ち行列に入れるステップと、 g)前記現活動化レコード内のポインタ・フィールドを
    検査することによって、前記第1プログラムがそれに関
    連する例外ハンドラを有するかどうかを判定するステッ
    プと、 h)前記判定ステップで、前記現活動化レコードに関連
    する例外ハンドラがないことが示されたとき、前記第1
    メッセージ待ち行列から前記例外原因メッセージを除去
    し、前記例外原因メッセージを、第2プログラムに関連
    し前記現活動化レコードになる第2活動化レコードに含
    まれる、第2メッセージ待ち行列に入れるステップと、 i)前記ポインタ・フィールドが、前記現活動化レコー
    ドにある例外ハンドラが関連することを示すまで、ステ
    ップg)及びh)を繰り返すステップと、 j)前記例外ハンドラを呼び出すステップと、 k)前記走行中のプログラムを終了すべきことを指示す
    るように、前記活動化レコードにマークを付けるステッ
    プと、 l)前記現活動化レコードを前記スタックから除去する
    ことによって、前記走行中のプログラムを終了するステ
    ップと、 を含む、コンピュータ・システム内で例外条件を処理す
    る方法。
  5. 【請求項5】スタック中の項目である活動化レコードに
    よって識別される走行中のプログラム内の例外条件を検
    出する手段と、 エラー・ハンドラを呼び出す手段と、 前記エラー・ハンドラによって、前記走行中のプログラ
    ムをトラップする手段と、 前記エラー・ハンドラによって、例外原因メッセージを
    作成する手段と、 前記エラー・ハンドラによって、前記例外原因メッセー
    ジを前記活動化レコードにリンクする手段と、 前記エラー・ハンドラによって、前記例外原因メッセー
    ジを前記活動化レコード中で参照されるメッセージ待ち
    行列に入れる手段と、 前記活動化レコードに含まれるポインタを介して例外ハ
    ンドラを呼び出す手段と、 を含む、コンピュータ・システム内で例外条件を処理す
    るための装置。
  6. 【請求項6】a)複数の活動化レコードを含み前記複数
    の活動化レコードの1つが現活動化レコードである、ス
    タック・フレーム内で識別され、最初に前記現活動化レ
    コードである走行中のプログラムを表す第1の活動化レ
    コードを有する、第1のプログラム内の例外条件を検出
    する手段と、 b)エラー・ハンドラを呼び出す手段と、 c)前記エラー・ハンドラによって、前記第1プログラ
    ムをトラップする手段と、 d)前記エラー・ハンドラによって、例外原因メッセー
    ジを作成する手段と、 e)前記エラー・ハンドラによって、前記例外原因メッ
    セージを前記第1活動化レコードにリンクする手段と、 f)前記エラー・ハンドラによって、前記例外原因メッ
    セージを前記第1活動化レコードに含まれる第1メッセ
    ージ待ち行列に入れる手段と、 g)前記現活動化レコード内のポインタ・フィールドを
    検査することによって、前記第1プログラムがそれに関
    連する例外ハンドラを有するかどうかを判定する手段
    と、 h)前記判定ステップで、前記現活動化レコードに関連
    する例外ハンドラがないことが示されたとき、前記第1
    メッセージ待ち行列から前記例外原因メッセージを除去
    し、前記例外原因メッセージを、第2プログラムに関連
    し前記現活動化レコードになる第2活動化レコードに含
    まれる、第2メッセージ待ち行列に入れる手段と、 i)前記ポインタ・フィールドが、前記現活動化レコー
    ドにある例外ハンドラが関連することを示すまで、前記
    判定手段及び前記除去手段を繰り返す手段と、 j)前記例外ハンドラを呼び出す手段と、 を含む、コンピュータ・システム内で例外条件を処理す
    るための装置。
  7. 【請求項7】スタック中の項目である活動化レコードに
    よって識別される走行中のプログラム内の例外条件を検
    出する手段と、 エラー・ハンドラを呼び出す手段と、 前記エラー・ハンドラによって、前記走行中のプログラ
    ムをトラップする手段と、 前記エラー・ハンドラによって、例外原因メッセージを
    作成する手段と、 前記エラー・ハンドラによって、前記例外原因メッセー
    ジを前記活動化レコードにリンクする手段と、 前記エラー・ハンドラによって、前記例外原因メッセー
    ジを前記活動化レコード中で参照されるメッセージ待ち
    行列に入れる手段と、 前記活動化レコードに含まれるポインタを介して例外ハ
    ンドラを呼び出す手段と、 前記走行中のプログラムを終了すべきことを指示するよ
    うに、前記活動化レコードにマークを付ける手段と、 前記活動化レコードを前記スタックから除去することに
    よって、前記走行中のプログラムを終了する手段と、 を含む、コンピュータ・システム内で例外条件を処理す
    るための装置。
  8. 【請求項8】a)複数の活動化レコードを含み前記複数
    の活動化レコードの1つが現活動化レコードである、ス
    タック・フレーム内で識別され、最初に前記現活動化レ
    コードである走行中のプログラムを表す第1の活動化レ
    コードを有する、第1のプログラム内の例外条件を検出
    する手段と、 b)エラー・ハンドラを呼び出す手段と、 c)前記エラー・ハンドラによって、前記第1プログラ
    ムをトラップする手段と、 d)前記エラー・ハンドラによって、例外原因メッセー
    ジを作成する手段と、 e)前記エラー・ハンドラによって、前記例外原因メッ
    セージを前記第1活動化レコードにリンクする手段と、 f)前記エラー・ハンドラによって、前記例外原因メッ
    セージを前記第1活動化レコードに含まれる第1メッセ
    ージ待ち行列に入れる手段と、 g)前記現活動化レコード内のポインタ・フィールドを
    検査することによって、前記第1プログラムがそれに関
    連する例外ハンドラを有するかどうかを判定する手段
    と、 h)前記判定ステップで、前記現活動化レコードに関連
    する例外ハンドラがないことが示されたとき、前記第1
    メッセージ待ち行列から前記例外原因メッセージを除去
    し、前記例外原因メッセージを、第2プログラムに関連
    し前記現活動化レコードになる第2活動化レコードに含
    まれる、第2メッセージ待ち行列に入れる手段と、 i)前記ポインタ・フィールドが、前記現活動化レコー
    ドにある例外ハンドラが関連することを示すまで、前記
    判定手段及び前記除去手段を繰り返す手段と、 j)前記例外ハンドラを呼び出す手段と、 k)前記走行中のプログラムを終了すべきことを指示す
    るように、前記活動化レコードにマークを付ける手段
    と、 l)前記現活動化レコードを前記スタックから除去する
    ことによって、前記走行中のプログラムを終了する手段
    と、 を含む、コンピュータ・システム内で例外条件を処理す
    るための装置。
JP6031210A 1993-03-15 1994-03-01 例外条件処理方法及び装置 Expired - Lifetime JP2526020B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US031741 1993-03-15
US08/031,741 US5761407A (en) 1993-03-15 1993-03-15 Message based exception handler

Publications (2)

Publication Number Publication Date
JPH06324885A true JPH06324885A (ja) 1994-11-25
JP2526020B2 JP2526020B2 (ja) 1996-08-21

Family

ID=21861143

Family Applications (1)

Application Number Title Priority Date Filing Date
JP6031210A Expired - Lifetime JP2526020B2 (ja) 1993-03-15 1994-03-01 例外条件処理方法及び装置

Country Status (2)

Country Link
US (1) US5761407A (ja)
JP (1) JP2526020B2 (ja)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7174352B2 (en) * 1993-06-03 2007-02-06 Network Appliance, Inc. File system image transfer
US6421740B1 (en) * 1995-12-27 2002-07-16 Apple Computer, Inc. Dynamic error lookup handler hierarchy
US6012129A (en) * 1997-03-31 2000-01-04 International Business Machines Corporation Apparatus and method allocating virtual memory upon demand
US6477665B1 (en) * 1999-08-31 2002-11-05 Accenture Llp System, method, and article of manufacture for environment services patterns in a netcentic environment
US7086066B2 (en) * 2000-03-31 2006-08-01 Schlumbergersema Telekom Gmbh & Co. Kg System and method for exception handling
CA2420008C (en) * 2000-09-08 2012-04-03 Network Appliance, Inc. Panic message analyzer
DK1402680T3 (en) 2001-05-23 2015-06-29 Sharestream Llc System and method for a commercial distribution system and multimedieleje-
WO2002095585A1 (en) * 2001-05-24 2002-11-28 Techtracker, Inc. Program execution stack signatures
US7003778B2 (en) * 2001-10-24 2006-02-21 Sun Microsystems, Inc. Exception handling in java computing environments
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
US7194744B2 (en) * 2002-12-17 2007-03-20 International Business Machines Corporation System and method for dynamic exception handling using an external exception handler
US7343529B1 (en) 2004-04-30 2008-03-11 Network Appliance, Inc. Automatic error and corrective action reporting system for a network storage appliance
US7984220B2 (en) * 2004-09-02 2011-07-19 International Business Machines Corporation Exception tracking
US20070294584A1 (en) * 2006-04-28 2007-12-20 Microsoft Corporation Detection and isolation of data items causing computer process crashes
US8074116B2 (en) * 2009-05-06 2011-12-06 Microsoft Corporation Exception raised notification
US11442739B2 (en) * 2019-09-16 2022-09-13 International Business Machines Carporation Exception handling

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4575817A (en) * 1983-06-27 1986-03-11 International Business Machines Corporation Switching of programming routine supporting storage stacks
JPS60136872A (ja) * 1983-12-26 1985-07-20 Hitachi Ltd ベクトル処理装置
JPS6280743A (ja) * 1985-10-01 1987-04-14 インタ−ナショナル ビジネス マシ−ンズ コ−ポレ−ション アドレス変換例外処理方法
JPH0682320B2 (ja) * 1988-06-08 1994-10-19 日本電気株式会社 データ処理装置
US5109514A (en) * 1988-07-28 1992-04-28 Sun Microsystems, Inc. Method and apparatus for executing concurrent CO processor operations and precisely handling related exceptions
US5241635A (en) * 1988-11-18 1993-08-31 Massachusetts Institute Of Technology Tagged token data processing system with operand matching in activation frames
US5197138A (en) * 1989-12-26 1993-03-23 Digital Equipment Corporation Reporting delayed coprocessor exceptions to code threads having caused the exceptions by saving and restoring exception state during code thread switching
US5237700A (en) * 1990-03-21 1993-08-17 Advanced Micro Devices, Inc. Exception handling processor for handling first and second level exceptions with reduced exception latency
US5305455A (en) * 1990-12-21 1994-04-19 International Business Machines Corp. Per thread exception management for multitasking multithreaded operating system

Also Published As

Publication number Publication date
US5761407A (en) 1998-06-02
JP2526020B2 (ja) 1996-08-21

Similar Documents

Publication Publication Date Title
JP2526020B2 (ja) 例外条件処理方法及び装置
US6832367B1 (en) Method and system for recording and replaying the execution of distributed java programs
US5774729A (en) Event handling in a high level programming language environment
US5748959A (en) Method of conducting asynchronous distributed collective operations
US7774636B2 (en) Method and system for kernel panic recovery
US6643802B1 (en) Coordinated multinode dump collection in response to a fault
RU2286595C2 (ru) Реализация компьютерной многозадачности через виртуальную организацию поточной обработки
US6658650B1 (en) Service entry point for use in debugging multi-job computer programs
JP3771589B2 (ja) コンピュータ・システム又はそれのプログラムの停止を必要としないオブジェクト指向メソッドを含むコンピュータ・システム、記録媒体、およびコンピュータ・プログラムの動作方法
US20060020858A1 (en) Method and system for minimizing loss in a computer application
US20090260011A1 (en) Command line transactions
US8112745B2 (en) Apparatus and method for capabilities verification and restriction of managed applications in an execution environment
JP2009516239A (ja) コンピュータアプリケーションの追跡及びモニタリングを行う汎用のマルチインスタンスメソッド及びgui検出システム
JPH02272627A (ja) デイジタル・コンピユータ・システムとその手続呼び出し方法
JPH05216692A (ja) プログラム実行を管理する方法およびシステム
CN1573713A (zh) 可插元件上的断点调试
US20080134199A1 (en) Method and Apparatus for Allowing Restarted Programs to Use Old Process Identifications and thread identifications
US7865883B1 (en) Parallel and asynchronous debugger and debugging method for multi-threaded programs
US7080374B2 (en) System and method for using native code interpretation to move threads to a safe state in a run-time environment
US20060117320A1 (en) Sharing dynamically changing resources in software systems
JPH0831041B2 (ja) プログラム条件処理方法およびコンピュータ・システム
US5862340A (en) Method operating in each node of a computer system providing and utilizing special records for collective communication commands to increase work efficiency at each node
US6012149A (en) Computer system with polymorphic fault processing
US5740359A (en) Program execution system having a plurality of program versions
US5758161A (en) Testing method for checking the completion of asynchronous distributed collective operations