JPH05224931A - 実行時プログラム条件を表現し、信号で通知する方法及びシステム - Google Patents

実行時プログラム条件を表現し、信号で通知する方法及びシステム

Info

Publication number
JPH05224931A
JPH05224931A JP4222640A JP22264092A JPH05224931A JP H05224931 A JPH05224931 A JP H05224931A JP 4222640 A JP4222640 A JP 4222640A JP 22264092 A JP22264092 A JP 22264092A JP H05224931 A JPH05224931 A JP H05224931A
Authority
JP
Japan
Prior art keywords
condition
routine
code
token
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.)
Pending
Application number
JP4222640A
Other languages
English (en)
Inventor
Ralph O Conder
ラルフ・オスカー・コンダー
Jeffrey A Grantz
ジェフリー・アレン・グランツ
Scott A Plaetzer
スコット・アラン・プレッツァー
Robert M Smith
ロバート・ミルトン・スミス
William N J Tindall
ウィリアム・ニコラス・ジョン・ティンダル
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 JPH05224931A publication Critical patent/JPH05224931A/ja
Pending 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/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • G06F11/0775Content or structure details of the error report, e.g. specific table structure, specific error fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software

Abstract

(57)【要約】 【目的】 言語構文の修正なくして、多言語環境で多言
語条件マネージャとともに機能できる条件を信号を通知
するための機構を提供する。 【構成】 上記のような多言語環境におけるアプリケー
ションをリンクする機能を有する外部入口点のためのオ
ブジェクト・コードを有する信号処理ルーチンを使用す
ることによる。このような信号処理ルーチンを使用する
ことによって、種々のアプリケーションにおいてそのサ
ブルーチンが自動的に条件マネージャに対して正常な条
件を返信するようにコーディングされれば、その結果サ
ブルーチンからのリターン・コードをチェックする必要
がなくなる。また、この発明においてはこの条件を返信
するための表示フォーマットとして条件識別子、そのフ
ォーマット・コード、条件の重大度コード等を含むもの
を定義する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、コンピュータ化データ
処理の分野における方法及びシステムに関する。より具
体的にはコンピュータ・プログラムの実行中に生じる条
件(異常事態)の処理に関する。
【0002】
【従来の技術】一般に、コンピュータ・システムは、プ
ログラム実行中に生じる条件を検出し適切に応答するた
めに、組み合わせて使用される、ハードウェア及びソフ
トウェア機構を有する。条件及び例外という用語は、し
ばしば同義に使用される。こうした条件または例外とし
ては、例えば無効な機械語アドレスを使うとか、0で割
るなどのエラーがある。条件には、実際のエラーでない
かもしれないが、特別の注意を必要とする事象も含まれ
る。この種の条件の例としては、初期設定されていない
変数を参照しようとする試みがある。ハードウェアで検
出される条件は、一般に、ハードウェア割込み機構によ
って、CPUに、その条件を引き起こしたプログラムの
実行を停止させる。システムにおける低レベルのソフト
ウェアまたはファームウェアの割込み処理ルーチンに、
最初に制御が与えられる。次いで、ソフトウェア分岐及
び呼出し技法により、オペレーティング・システム、実
行時環境プログラム、適用業務プログラムなど現在実行
中のプログラムの様々な層中を制御がパスされる。一般
に、ソフトウェアで検出される条件は、条件処理ルーチ
ンと呼ばれるルーチンを呼び出す。プログラムが条件処
理ルーチンを実行させる場合、そのプログラムは、条件
を信号で通知すると言われる。
【0003】従来のシステムは、これらの条件に関する
情報を、例えばリターン・コードや例外など様々なやり
方で通信する。従来技術では、ソフトウェア製品及びオ
ペレーティング・システムを横断してこれらの条件に用
いられる使用、表現、あるいは通信の方法には、ほとん
ど共通性がない。
【0004】したがって、多言語適用業務、及び適用業
務のシステム間原始コード可搬性を促進するため、条件
を表現し、その存在の結果を処理するのに必要な情報を
通信するために、首尾一貫したデータ・タイプを定義す
ることが必要である。
【0005】システムにおける条件処理機構の直接的機
能は、エラーを診断し、次いで、そのエラーを選択的
に、おそらくはあるデータ値を復元してから、報告また
は許容しあるいはその両方を行うことである。これらの
処置は、特定の問題をシステム内で解決し、システムが
その目的を達成できるようにするために取られる。歴史
的に見ると、高水準言語での条件処理は、それぞれのプ
ログラミング言語の目的に適したものとして実施されて
きた。これらの個々の実施態様が互いに異なり、実際に
は、同じ適用業務で一緒に使用する場合、しばしば相互
に破壊的であることは驚くに当らない。
【0006】従来技術では、実行中のプログラムの原始
言語に基づいて、条件処理が実行される。つまり、CO
BOLコンパイラを用いて生成されたプログラムではあ
る1組の条件処理ルーチンを使用し、PL/Iで書かれ
たプログラムでは別の1組の条件処理ルーチンを使用す
る。ある適用業務における高水準言語の任意の混合物を
サポートすることが望ましくかつ必要であるとすると、
この混合環境を単一言語環境と並んで管理する条件処理
モデルを開発することが不可欠である。基本的要件は、
各個別言語用の標準を満足することである。完全に1言
語で実施されているどんな適用業務も、その言語の外部
標準で指定されたものとして動作しなければならない。
こうでなければ、条件処理モデルは全く実現不能であ
る。
【0007】現在存在する高水準言語(HLL)コンパ
イラは、条件処理機構に対するユーザ・アクセスの度合
が様々である。PL/I言語は、ユーザが「ON条件」
を用いて条件処理プロセスに分岐することのできる比較
的強力な1組の方法を提供する。他方、COBOL言語
は、条件が発生したとき、ユーザに制御を得させる機構
を実質上もっていない。今日、利用可能なコンピュータ
・プログラミング言語は多数存在する。条件処理に対す
る組込みユーザ・アクセスを実現するために、これらの
コンパイラの言語構文を大幅に修正する必要があるの
は、面倒な解決方法であろう。
【0008】プログラムの実行は、一般に、以下の4つ
の可能な結果のうちの1つをもたらす。 1.すべての入力が境界内にあり、プログラム中でエラ
ーに出会わず、ハードウェア及びオペレーティング・シ
ステムが正しく動作し、正しい結果がもたらされる。 2.入力、プログラム、ハードウェア、またはオペレー
ティング・システムにおけるエラーのため、不完全また
は不正確な結果がもたらされるが、エラーとは診断され
ない。 3.入力、プログラム、ハードウェア、またはオペレー
ティング・システムにおけるエラーのため、不完全また
は不正確な結果がもたらされる。しかし、エラーが発生
したことがプログラムに通知され、プログラムが、その
趣旨の通知(メッセージ、条件またはリターン・コー
ド)を生成する。 4.入力、プログラム、ハードウェア、またはオペレー
ティング・システムにおけるエラーのため、正しい結果
を得ることができない。しかし、エラーが発生したこと
がプログラムに通知され、プログラムは、そのエラー
が、エラーを伝播させる傾向のある副作用を引き起こす
のを阻止する。大抵の場合、これは、プログラムが、エ
ラーの通知以外の結果を生成することを拒絶することを
意味する。
【0009】これらの結果のそれぞれの場合に、所与の
結果を人またはプログラムあるいはその両方に通信する
必要がある。この通信は、「条件の通信」と定義でき
る。所与のプログラム実行状態の「条件」を正確に通信
するには、この通信を行うための機構(すなわち条件表
現)を定義することが必要である。
【0010】
【発明が解決しようとする課題】従来技術では、サブル
ーチンが呼び出される時、呼出しプログラムはしばしば
サブルーチンからのリターン・コードを検査して、サブ
ルーチンがうまく働かなかったかどうか、したがって、
訂正処置をとる必要があるかどうか、あるいは実行を停
止しなければならないかどうかを決定しなければならな
い。このプロセスでは、コードを書き込む際にもそれを
実行する際にも多くの時間と資源が消費される。矯正処
置を実行するコードにサブルーチンがアクセスできる場
合は、サブルーチンからのリターン・コードについて検
査するためのコードをなくすことができる。従来技術で
は、これを実行するための一般的な機構はない。PL/
I言語は、組込み言語構成体を用いて、条件を信号で通
知する能力を提供する。この言語構成体は、「ON条
件」実行用に定義されたルーチンを呼び出す。この手法
は、PL/I構文に結合されており、したがって、この
問題に対する一般的な解決方法ではない。この手法を、
例えば、FORTRAN、C言語、Pascal、CO
BOLのユーザに適用するには、新しい言語構文を定義
することが必要となる。
【0011】言語構文の修正を要せず、多言語環境で多
言語条件マネージャと一緒に機能できる、条件を信号で
通知するための一般的機構が必要であるが、従来技術で
は提供されない。具体的には、従来技術は、次のものを
提供しない。 ・使用中の広い範囲の原始言語を横断してユーザがアク
セスできる、条件を信号で通知するための連係可能なル
ーチン。 ・サブルーチン実行後にリターン・コードを検査する必
要からプログラマを解放する一般的機構。 ・必要な通信のための共通性を提供するだけでなく、次
の機能特性も提供する、条件を標準的な方式で条件トー
クン中で表す方法または手段。 −使用を据え置くことができ、確実な据置きが可能であ
る −インスタンス特有データを任意に参照できる −適当な条件のもとで、重大度が高水準言語プログラム
によって容易かつ有効にアクセスできる ・以上の各項目を組み合わせて、協働的システムにする
ための方法または手段。
【0012】
【課題を解決するための手段】本明細書では次の用語を
使用する。 CEECIB ある大域状況情報がそこに記憶される変数 条件重大度コード 0〜4の範囲で使用され、0が最も重大度が低い。 条件マネージャ 条件が発生した時にコンピュータ・システムの制御を獲
得し、様々なシステムまたはユーザ適用業務ルーチンあ
るいはその両方を実行することにより、その条件の処理
を管理する、何らかのプログラムまたは手段。これは、
オペレーティング・システム、実行時環境、または適用
業務プログラムの一部分であり得る。 カーソル 実行可能な命令を指す、アドレス・ポインタ。 デバッグ・プログラム 適用業務プログラムをテスト条件下で実行してエラーを
見つけるのに使用されるプログラム。 処理カーソル 処理ルーチン、ならびに処理ルーチンが呼び出される対
象のスタック・フレームを指示するカーソル。 イネーブル 条件を、他の条件処理ルーチンに提示する前に、インタ
ーセプトして、その条件を無視すべきか否かを決定する
能力。未認知の条件は、必ず、イネーブルされるものと
定義される。通常、イネーブルを用いて、ハードウェア
に、それがもっていない機能、ならびに言語の意味論の
言語実施を補足する。ハードウェアを補足する例として
は、言語指定に基づく浮動小数点オーバーフロー例外の
特殊処理がある(ある機械では、これは例外をマスクす
ることによって達成できる)。 エンクレーブ 主ルーチンと0個以上のサブルーチンの集合。主ルーチ
ンがまず実行される。スレッドは、エンクレーブに由来
する。 INT2及びINT4 それぞれ2バイト及び4バイトの整数を意味し、C構文
インターフェース定義の一部として使用される。 プラットフォーム オペレーティング・システムと、プログラムがその上で
実行されるコンピュータ・ハードウェアの組合せ。 再開カーソル 適用業務中の実行が再開される点を指定するカーソル。 再開 条件処理を終了し、再開始カーソルによって指定される
命令及びスタック・フレームに制御を移転すること。 安全条件 処理されない場合には無視できる、何らかの条件。 スタック・フレーム 割込みが発生する時、あるいは呼出しまたは分岐に対す
るレジスタが保管される時に、コンピュータのスタック
に押し込まれる、セット・レジスタ及び条件フラグ。 スタック・フレーム0 最初のルーチン用のスタック・フレームの直前の概念的
スタック・フレーム。これは、スレッドまたはタスクが
そこで初期設定され、第1プロシージャがそこから呼び
出され、終了がそこから開始される、理論的場所であ
る。条件処理の場合、スタック・フレーム0は、ある言
語に対する省略時処置が適用されるフレームである。 スレッド ルーチンにおける実行の基本行を表すのに使用される用
語。
【0013】本発明は、関連特許出願に記載されている
ような、複数言語で書かれたプログラムを処理する条件
マネージャを有するコンピュータ・システムにおいて、
プログラム実行中に発生する条件を処理するための一般
的方法及びシステムの改良である。この方法は、Pas
cal、FORTRAN、C言語、COBOLなど外部
呼出しをサポートする任意の言語で書かれた適用業務プ
ログラムに連係するのに適した、外部入口点用の目的コ
ードをもつ一般的信号ルーチンを生成し使用するもので
ある。信号ルーチンは、プログラムによって呼び出され
ると、条件マネージャに条件を信号で通知し、次いで、
呼出し側に戻る。信号ルーチン用の目的コードは、後で
適用業務プログラムに連係し反復使用するために、コン
ピュータ・システム内の持久メモリに記憶される。プロ
グラムがこの信号ルーチンを使って、条件に適切に応答
して予め登録されているユーザ定義条件処理ルーチンを
実行する条件マネージャに、適切な条件を自動的に信号
で通知するように、サブルーチンをコード化することに
より、サブルーチンからのリターン・コードを検査する
段階を省略することができる。フィードバック・トーク
ンとして働くことのできる一般的条件トークンが定義さ
れる。このトークンは、条件識別子、条件識別子用フォ
ーマット・コード、条件用重大度コード、ファシリティ
識別子用制御コード、ファシリティ識別子、及びインス
タンス特有情報を識別する任意選択のハンドルから構成
される。信号ルーチン及びフィードバック・トークン
は、フィードバック・トークンを記憶できるアドレスの
引渡しを任意選択で行うことのできるサブルーチンが使
用できる。実行中、このサブルーチンが条件の有無を監
視する。検出された条件の重大度が閾値よりも大きい場
合、サブルーチンは条件マネージャに条件を信号で通知
し、そうでない場合には、渡されたアドレスにフィード
バック・トークンを記憶する。
【0014】
【実施例】本発明は、条件マネージャ及び1組の呼出し
可能なサービスを含む共通条件処理ルーチン(CCH)
に関して実施される。CCHは、複数の高水準言語(H
LL)で書かれた適用業務プログラム用の、共通実行環
境(CEE)と呼ばれる、より大きな共通実行時環境の
一部分である。
【0015】本発明は、次の諸特性をもつ共通データ・
タイプを使用して条件を表す、共通の方法を提供する。 ・自己記述式 ・リターン・コードとして使用できる ・条件マネージャに信号で通知することができる ・使用が据置きできる ・パスできる ・各トークンが条件特有である ・条件を記述するメッセージと1対1で対応する ・任意選択で、インスタンス特有データを参照できる
【0016】本発明は、12バイト(96ビット)の条
件トークン・データ・タイプを用いて条件を通信するこ
とができる。呼出し可能なサービスからの戻り情報(フ
ィードバック・コード)は、このデータ・タイプの1イ
ンスタンスである。条件トークン・データ・タイプの利
点には、次のことが含まれる。 ・呼び出されたサービスからの戻り情報を処理するた
め、条件処理ルーチンが確立できる。この方法では、プ
ログラマが「呼込み後検査」タイプの呼出しをコード化
することから解放される。その代りに、集中位置を使っ
て戻り情報を処理することになる。 ・すべての呼出し可能サービス間の共用データ・タイプ
として、これらの構成要素を一つに結合する。 ・表示できる、あるいはファイルにログできるメッセー
ジが、条件の各インスタンスに関連づけられる。 ・後で処理するため、フィードバック・コードとして記
憶またはログできる。 ・プラットフォーム間でのコード可搬性をサポートする
ため、(記号名をサポートする言語による)記号名を、
定義済みのフィードバック・コード及びハードウェア条
件と等しくすることができる。
【0017】「呼込み後検査」型の従来の呼出し方法に
伴うオーバーヘッドの量及び完全性の欠如を軽減するた
め、条件トークン・データを入力として条件マネージャ
に送る方法が提供される。この方法は、次の通りであ
る。 ・サービス・ルーチンに対するCALL(呼出し)ステ
ートメントに応じて、呼出し側が、フィードバック・コ
ード用アドレス・パラメータをパスすることを選ぶこと
ができる。 ・重大条件(重大度=4)が、必ず、条件マネージャに
信号で通知される。 ・このパラメータが供給され、サービスの結果が重大で
ない場合には、フィードバック・コードが呼出し側に戻
される。 ・パラメータが供給されず、呼び出されたサービスの結
果が完全な成功ではない(条件=0)場合は、呼出し側
が、条件マネージャにその旨を信号で通知し、条件トー
クンを渡す。 ・パラメータが供給されず、呼び出されたサービスの結
果が完全な成功である場合は、サービスが戻されるだけ
である。
【0018】任意選択パラメータ法を使用するには、言
語は、CALLステートメント上の任意選択パラメータ
を許容しなければならない。言語が任意選択パラメータ
を許容しない場合、フィードバック・コード・パラメー
タは必ず呼出し側によってコード化される。この場合、
任意選択パラメータと同じ効果を達成するために、特別
な値を定義してもよい。例えば、アドレス・パラメータ
にゼロの値を入れることにより、すべての条件を信号で
通知する方法をトリガすることができる。この任意選択
パラメータを用いて、プログラマは、それが有利な場
合、信号方法の全能力を利用することが可能となり、ま
た従来の呼出し・検査シーケンスを使用し、条件トーク
ン使用の利益を得ることも可能となる。
【0019】次に、この条件を表すのに用いられるデー
タ・オブジェクトを定義する。
【0020】条件トークン・データ・タイプ(CEET
OK)は、メッセージ・サービス、条件マネージャ、呼
出し可能サービス、及びユーザ適用業務と通信するのに
使用される。インスタンスが動的に構築でき、より典型
的には、静的に構成できる。
【0021】条件トークンの1インスタンスは、長さが
12バイト(96ビット)であり、(C構文で表した)
次の情報を含んでいる。 ただし、 Condition_ID Facility_IDと共に条件を記述する、識別子の4バイト
・コード化であり、Caseフィールドが識別子のタイプを
決定する。2つの識別子が定義される。 ・ケース1−サービス条件 ケース1は、呼出し可能サービス及び大部分の適用業務
プログラムによって使用される。 ただし、 MsgSev 2バイトの2進整数で、次の値が可能である。 0(I)情報のみ(あるいは、トークン全体が0の場合
は、情報なし)。 1(W)警告−サービスがおそらくは正しく完了。 2(E)エラー検出−訂正が試みられ、サービスがおそ
らくは不正確に完了。 3(S)サービス・エラー−サービスが未完了。 4(C)重大エラー−サービスが完了せず、条件が信号
で通知される。このフィールドは明らかに他の値を含む
こともできるが、それらはアーキテクチャ構成されてい
ない。呼出し可能サービス中に重大なエラー(重大度=
4)が発生した場合には、それは同期的に呼出し側に戻
されるのでなく、必ず条件マネージャに信号で通知され
る。 注:メッセージを表示する際、CEECTOKからの重
大度指示が必ず使用される。 Msgno 条件に関連するメッセージを識別する、2バイトの2進
数。Facility_IDとMsgnoの組合せが、条件を一義的に識
別する。 ・ケース2−クラス/原因コード条件 ある種のオペレーティング・システム及びコンパイラ実
行時ライブラリによって使用できる。 ただし、 Class_Code 条件のクラスに関連するメッセージを識別する2バイト
の2進数(上記のMsgnoと同じタイプ) Cause_Code 条件の原因に関するメッセージを識別する2バイトの2
進数(上記のMsgnoと 同じタイプ) Facility_ID 製品または製品構成要素を識別する3文字の英数字スト
リング。Facility_IDは、実行時メッセージの格納場所
(例えば、ファイル)に関連し、メッセージ番号に関連
する時は、格納場所内のメッセージを一義的に識別す
る。ただし、メッセージ格納場所の命名規約はプラット
フォーム特有である。Facility_IDは システム内で一
義的である必要はなく、適用業務作成者が決定できる。
製品は、初期設定されると、そのメッセージ格納場所が
メッセージ・サービスによって位置決めできることを決
定する責任を負う。各プラットフォームは、メッセージ
格納場所を位置決めするそれ自体の方法を有する。例え
ば、OS/2では環境変数、VM/CMSではファイル
定義(FILEDEF)、MVSではddnanmeが使用で
きる。 注:Msgno/Facility_IDは、イネーブルされた製品の条
件を識別する。この識別 は、単一セッションの範囲を
越えて持続する必要がある。こうすると、条件を もた
らしたセッションが終了した後で条件及びその関連メッ
セージの意味が決 定できるようになる。 Case(ケース) トークンのCondition_ID部分のフォーマットを定義する
2ビットのフィールド。 値1はCase1の条件を識別
し、値2はCase2の条件を識別する。値0はプラット
フォーム特有の使用に留保され、値3は将来の使用に留
保される。 Severity(重大度) 条件の重大度を示す3ビットのフィールド。Sevirityの
値は、ケース1のCondition_IDの下で定義されるものと
同じである。重大度を評価する際、ケース2の条件を信
号で通知せるのにケース1の条件に対するものと同じ規
則が適用される。 注:このフィールドは、ケース1とケース2の両方の条
件にとって有効であり、 どちらかの条件トークンと共
に条件の重大度を評価するのに使用できる。ケース1条
件の場合、このフィールドはCondition_IDにおけるSeve
rityフィールドと同じ値を含む。 Control(制御) 条件処理の様々な態様を記述または制御するフラグを含
む、次のような3ビットのフィールド。 ..1 Facility_IDがシステム・ソフトウェア供給者によって
割り当てられたこと を示す。 .1. 留保 1.. 留保 I_S_Info それが含まれている条件トークンによって表される条件
の所与のインスタンスに関連するインスタンス特有情報
(ISI)を識別する4バイトのハンドル。ISIが所
与の条件トークンに関連していない場合、I_S_Infoフィ
ールドは2進0の値を含む。
【0022】構造CEECTOKの構成図については、
図9を参照のこと。ビット番号付けは、フィールドのサ
イズを示し、特定のビット位置方法を示すものではな
い。構造CEECTOKを宣言するCコードの1例は、
次の通りである。
【0023】フィードバック・コードは、条件トークン
(構造CEECTOK)の1インスタンスである。フィ
ードバック・コードは、呼出し側がそれを保持する区域
に参照をパスした場合に、サービス呼出しから戻され
る。
【0024】インスタンス特有情報(ISI) ISIの定義:インスタンス特有情報(ISI)は、ど
ちらも所定の条件の特定の発生に対して一義的である、
2種のデータから構成されている。このデータは、次の
ように定義される。 1.所与の条件に関連するメッセージに挿入される情報
(すなわち、メッセージ挿入データ)。 2.所与の条件(すなわち、データ"Q_Data"を修飾する
条件)を具体的に識別するためまたはこれに反応するた
めあるいはその両方のために、条件処理ルーチンによっ
て使用される情報。
【0025】これらの情報項目のどちらか一方または両
方の存在または使用あるいはその両方が、条件または言
語または適用業務あるいはそのいくつかに特有である。
すなわち、所与のメッセージは、挿入データに対する要
件を有することも有しないこともある。データを修飾す
る条件(Q_Data)の存在、フォーマット及び使用は、条
件の信号発信側と条件を処理する処理側との間の協力規
約による。条件トークンは、そのポインタ長が広範囲に
変動する可能性のある、複数のプラットフォームを横断
して使用されるように設計されているので、ISIハン
ドル用に使用される4バイトは、ポインタとして定義さ
れていないが、プラットフォームによっては実際にポイ
ンタとなることも可能である。例えば、非ESA MV
Sシステムでは、ハンドルは32ビットのポインタとす
ることができる。一般に、これはISIデータの記憶位
置を識別する情報であると定義される。間接的参照を行
うための様々な標準的プログラミング技法が使用でき
る。
【0026】ISIのフォーマット及び構造はプラット
フォーム特有であるが、ISIは次のデータ項目を含ん
でいなければならない: ただし、 ISI_Handle(INT4) 1から(2**31)−1までの範囲の単調に増加する数
であり、処理レベルで計算され、したがって新しいISI_
Handleを得る際には直列化が必要である。(注: 循環
は許されるが、重大度1の条件が信号で通知される) ISI_Flag(BITS:32) 次のように定義される標識を含む、32ビットのフィー
ルドである。 ・..........1 −適用業務保護フラグ ・..........1. −環境保護フラグ(このフラグは、条件マネージャによ
ってセットされ管理される。これは条件マネージャに入
るときに(条件マネージャ内で活動状態である条件に関
連するISIの重ね書きを防止するため)セットされ、
活動状態の条件処理から条件が出るときにリセットされ
る。) ・..........1.. −交差エンクレーブ遷移フラグ 注:このフラグがセットされると、関連する条件トーク
ン及びその関連するISIがエンクレーブ境界を横切っ
て渡されるよう指示する。 ・その他 −留保され、0の値をもつ。 Time−stamp(FLOAT8) ISIが生成された時点を示すタイムスタンプ。 Q_Data_Token(INT4) 条件処理ルーチンによって使用される32ビットのデー
タ・オブジェクト。この「データ・オブジェクト」は、
修飾データにアクセスするために使用される。 Insert_Seq_Num(INT4) 挿入順序番号(例えば、挿入1、挿入2)を含む4バイ
トの整数。これは、メッセージ原始ファイル内の挿入識
別子で指定されるものと対応する。 Insert_Data_Token(INT4) メッセージ・サービスによって使用される、32ビット
のデータ・オブジェクト。この「データ・オブジェク
ト」は、メッセージ挿入データにアクセスするのに使用
される32ビット項目である。(指される挿入データ
は、自己記述式でなければならない。)
【0027】条件トークン・データ・タイプの利点に
は、次のことがある。 ・フィードバック・コードとして、後で処理するため
に、記憶またはログすることができ、特有のメッセージ
を提供する。 ・指示される重大度が、ビット操作機能のない言語にと
って容易にアクセス可能である。
【0028】本発明の用途の1つは、CEECTOKの
インスタンスで表される条件に関連する実行時メッセー
ジの生成である。
【0029】メッセージ処理は、所与の適用業務によっ
て選択される条件処理モデルに密接に関連している。適
用業務プログラマが、サービスがどのように呼び出され
るかに応じて、2つの条件処理モデルのどちらかを選択
できる機能が提供される。これら2つの条件処理モデル
のそれぞれ及び条件を表す条件トークン(CEECTO
K)を使ってメッセージ処理がどのように行われるかの
概要は次の通りである。 ・FEEDBACD_CODEが呼出し側に戻されるメ
ッセージ処理:適用業務がFEEDBACK_CODE
をサービスから受け取るようにコード化され、呼び出さ
れたサービスによって条件が検出される時は、次のよう
な事象シーケンスが発生し得る。 −サービスが、呼出し可能サービスで条件トークン(構
造CEECTOK)を構築する。 −サービスが、呼出し可能サービスの使用によって、必
要なメッセージ挿入データまたは修飾データあるいはそ
の両方をインスタンス特有情報(ISI)域に入れる。 −検出された条件の重大度が重大(Sev=4)である場
合、その条件が条件マネージャに信号で通知され、信号
で通知された条件に対して下記のように処理が続行す
る。 −条件の重大度が重大でない(Sev≠4)場合は、次のよ
うに処理が続行する。 −構造CEECTOKが、FEEDBACK_CODE
としてサービスの呼出し側に戻される。 −適用業務は、FEEDBACK_CODEを調べる
際、次のうちから選択できる。 ・それを無視して、処理を続行する。 ・後で処理するため、条件表現(CEECTOK)を記
憶する。 ・条件を条件マネージャに信号で通知する。 ・条件を適用業務コードと調和して処理する。とりわ
け、これは、構造CEECTOKに関連するメッセージ
の処理を伴う。メッセージを処理する際、 適用業
務は次のうちから選択できる。 −呼出し可能サービスを用いて、表示のためにメッセー
ジを獲得しフォーマットし指名する。 −フォーマットされたメッセージを含めるのに十分なサ
イズの記憶域を獲得し、呼出し可能サイズを使ってメッ
セージを獲得し(挿入データで)フォーマットし記憶域
に記憶する。 −適用業務は、メッセージを処理するためにセーブし、
あるいは表示するために指名することができる。 ・CALLに対するFEEDBACK_CODEのない
メッセージ処理。検出された条件はすべて条件マネージ
ャに信号で通知される。適用業務がすべての条件を条件
マネージャに信号で通知することを選択した時、 ある
いは検出された条件が重大な重大度のものである時、あ
るいは適用業務が 明示的に条件を信号で通知する時
は、メッセージ処理に関して次の事象シーケ ンスが発
生し得る。 −条件を検出したサービスが、その条件用の構造CEE
CTOKを構築する。 −サービスが、呼出し可能サービスを使って、必要なメ
ッセージ挿入データまたは修飾データあるいはその両方
をインスタンス特有情報域(ISI)に入れる。 −検出された条件が条件マネージャに信号で通知され、
構造CEECTOKが条件マネージャに渡される。 −条件マネージャが条件を、適用業務によって記述され
るように処理する。 −条件マネージャまたは条件処理ルーチンが、現条件を
表すメッセージを検索しフォーマットし、表示するため
に指名すると決定した場合、それが、呼出し可能サービ
スを使って行われる。 −条件の処理中に新しい条件が検出された場合、条件マ
ネージャが、新しいまたは格上げされた条件用のISI
の新しいインスタンスを用いて、新しいCEECTOK
を構築し、それによって入れ子式のまたは格上げされた
条件用のメッセージ挿入データの喪失を防止する。その
後、呼出し可能サービスを使ってメッセージ処理が実行
できる。
【0030】同期条件用条件規約:CEE呼出し可能サ
ービスは、条件アーキテクチャと次のように相互作用す
る。 1.CEE呼出し可能サービスが、要求の成否に関する
情報をフィードバック・コード(構造CEECTOKデ
ータ・タイプ)の形で報告する。この情報は、CEE条
件マネージャまたはメッセージ・サービスが使用でき
る。 2.フィードバック・コード域が、そのサービスに対す
る参照によって最終引数としてパスできる。これは、C
ALLステートメント上の任意選択の引数であり、その
有無が次のように処理に影響する。 ・重大条件(重大度=4)は、必ず条件マネージャに直
接信号で通知される。 ・重大でない条件(重大度≦3)の場合、条件トークン
がフィードバック・コードとして呼出し側に戻すことが
できる。 ・フィードバック・コード域引数が渡されず、呼び出さ
れた機能の結果が完全な成功ではない(条件=0)場
合、条件を信号で通知することにより、条件トークンが
CEE条件マネージャに渡される。 注:任意選択引数法を用いるには、CEEによってイネ
ーブルされる言語が、 CALLステートメント上の
任意選択引数を許容しなければならない。言語 が任
意選択引数をサポートしない場合は、フィードバック・
コード引数は、 必ず呼出し側によってコード化され
る。 3.条件アーキテクチャは、条件のタイプに応じて、構
造CEECTOKのフォーマットの4つのケースをサポ
ートする。好ましい実施例では、次の2つのケースだけ
を定義する。 a.ケース1−サービス条件 b.ケース2−クラス/原因条件 4.4つのタイプの条件はすべて、次の特性をもつ。 5.トークンの最初の4バイト(Condition_ID)がすべ
て(2進)0の場合、次の8バイトも0である。この条
件トークンは、完全な成功を表す。条件トークンの2つ
以上のケースに出会う可能性がある場合は、まずトーク
ンの最初の4バイトを成功かどうか検査すべきである。
トークンが成功した条件を示していない場合は、次にC
aseフィールドを検討すべきである。 6.成功かどうかの検査を容易にできるように、呼出し
側は少なくとも最初の4バイトを2進数として定義すべ
きである。ただし、最初の4バイトだけを供給するのは
無効である。条件トークンを構造として定義できない言
語は、3成分1次元アレイを使用することもできる。
【0031】COBOLのCase1(ケース1)Co
ndition_IDの例 1 フィードバック Pic x(12) 1 Feedback-Detailがフィードバックを定義し直す。 2 重大度 Comp Pic 999 2 Message−Id Comp Pic 999
【0032】FORTRANのCase1(ケース1)
Condition_IDの例 Integer*2 Feedback(6)、Severity、Message_Id Equivalence(Severity, Feedback(1)),(Message_Id, F
eedback(2))
【0033】適用業務作成者インターフェース(AW
I) 呼出し可能サービスCEESGLは、条件を条件マネー
ジャに提起する、すなわち信号で通知し、この条件のイ
ンスタンス用の修飾データを提供し、任意選択でこの条
件用のインスタンス特有情報を作成する。イネーブルさ
れた各信号通知(重大度が2以上の)条件が、エラー・
カウントを1ずつ増分する。エラーが(ERRCOUN
T実行時オプションによって決定される)エラー・カウ
ント限界に等しいかまたはそれを越える場合は、条件マ
ネージャが、Termination-Imminentに信号で通知せず
に、エンクレーブを終了させる。格上げされた条件がエ
ラー・カウントを増分することはない。
【0034】重大度0及び1の条件は、それが処理され
ず、かつ条件が提起されたとき、フィードバック・トー
クンがパスされなかった場合は無視される条件であっ
て、「安全な」条件と見なされる。
【0035】CEESGL外部呼出し可能サブルーチン
・インターフェースは、C構文を用いて、次のように定
義される。 void CEESGL(cond_rep,[q_data_token],[fc]); FEED_BACK *cond_rep, INT4 *q_data_token, FEED_BACK *fc; ただし、 cond_rep(input) 参照によってパスされる条件表現 q_data_token(input/optional) 所与の条件のインスタンスに関連する修飾データにアク
セスするのに使用するために、インスタンス特有情報に
入れられる32ビットのデータ・オブジェクト。 fc(output/optional) 参照によってパスされ、CEESGLの成否を示す任意
選択条件。fc中で戻される条件は次の通りである。 CEE000 Severity=0 Msg_No=何でもよい Message=サービスが首尾よく完了。 CEE069 Severity=0 Msg_No=0201 Message=信号で通知された条件が処理されなかった。 CEE0EE Severity=3 Msg_No=0462 Message=入力条件トークンに関連するISIが見つから
なかった。 CEE0EB Severity=3 Msg_No=0459 Message=新しいISIを作成するのに使用可能な記憶域
が不十分 。 CEE0EC Severity=3 Msg_No=0460 Message=ISIリストが満杯で、新しいエントリが作成
できない 。 CEE0CE Severity=1 Msg_No=0398 Message=新しい入力で再開。 CEE0CF Severity=1 Msg_No=0399 Message=新しい出力で再開。
【0036】使用上の注意 1.CEESGLサービスの呼出し側は、このサービス
に対する呼出しを行う前に、ISIを(提起されている
条件に関連するメッセージをフォーマットするのに必要
な)何らかの挿入データで充填しなければならない。呼
出し可能サービスからフイードバック・コードを受け取
るとき、MIBはすでに充填済みである。 2.このサービスで提起される条件に対してイネーブル
が決定されている。 3.q_data_tokenは、CCHによって照会されず、4バイ
ト内に含めることのできる任意の値をとることができ
る。 4.条件が信号で通知されてCEESGLへの呼出しに
対してq_data_tokenの値を渡し、q_data_token値がすで
に関連するISI内に存在する場合は、ISI内のq_da
ta_tokenは重ね書きされる。 5.条件CEEOCE及びCEEOCFは、q_data_tok
enによって指示されるデータと一緒に、条件に出会った
ルーチンによってフィックスアップまたは再開あるいは
その両方を行うために使用される。
【0037】CEE条件表現は、次のAWI呼出し可能
サービスを提供する。 ・CEENCOD−条件トークン・データ・タイプの1
インスタンスを構築する。 ・CEEDCOD−条件トークン・データ・タイプをそ
の構成部分に分解する。
【0038】CEENCOD−条件トークン構築。 void CEENCOD(C-1,C-2,Case,Severity,Contro
l,Facility_ID, Cond_Token,[fc]); INT2 *C_1; INT2 *C_2; INT2 *Case; INT2 *Severity; INT2 *Control, char (*Facility_ID)[3]; INT2 *Control, struct CEECTOK *Cond_Token; FEED_BACK *fc; ただし、 C_1(入力) Condition_IDの最初の2バイトの値を表す2バイトの2
進整数。ケース1の場合、これは重大度であり、ケース
2の場合、Class_Codeである。 C_2(入力) Condition_IDの次の2バイトの値を表す2バイトの2進
整数。ケース1の場合、これはメッセージ番号であり、
ケース2の場合、Cause_Codeである。 Case(入力) トークンのCondition_ID部分のフォーマットを定義する
2バイトの2進整数。値1はケース1の条件を識別し、
2の値はケース2の条件を識別する。値0と3は留保さ
れている。 Severity(入力) 条件の重大度を示す2バイトの2進整数。ケース1の条
件では、このフィールドの値はCondition_IDにおける値
と同じである。ケース1及びケース2の条件では、この
フィールドは必ず条件の重大度をテストするのに使用で
きる。 Control(入力) 前に定義した条件の制御情報を含む2バイトの2進数。 Facility_ID(入力) この条件またはフィードバック情報を生成する製品を識
別する、3つの英数字を含む3文字フィールド。ケース
2の条件では、Condition_IDが2つのメッセージを示す
可能性があり、両方のメッセージが挿入データを必要と
する可能性があり、呼出し側が、第1メッセージ用の挿
入データと、それに続いて第2のメッセージに必要なデ
ータとを挿入順に記憶域にロードする。メッセージ・サ
ービスはこれらを1対のメッセージとして扱い、両方の
メッセージに同じメッセージ挿入ブロック(CEEMI
B)を使用する。 Cond_Token(出力) 組み立てられた条件またはフィードバック情報の8バイ
ト表現。 fc(出力/任意) 参照によってパスされる任意選択の8バイト・フィード
バック・コード。引数として指定される場合、フィード
バック情報(条件トークン)が呼出し側ルーチンに戻さ
れる。省略され、要求された動作が首尾よく完了しなか
った場合は、 その条件が条件マネージャに信号で通知
される。次の記号条件がこのサービスから得られる。 CEE000 Severity=0 Msg_No=何でもよい Message=サービスが首尾よく完了。 CEE0CH Severity=3 Msg_No=0401 Message=無効なケース・コードが見つかった。 CEE0CJ Severity=3 Msg_No=0403 Message=無効な重大度コードが見つかった。 CEE0CI Severity=3 Msg_No=0402 Message=無効な制御コードが見つかった。 CEE0E4 Severity=3 Msg_No=0452 Message=無効なファシリティ・コードが見つかった。
【0039】CEEDCOD−条件トークン分解。 void CEEDCOD(Cond_Token,C-1,C-2,Case,Sever
ity,Control,Facility_ID,[fc]); CEECTOK *Cond_Token, INT2 *C_1, INT2 *C_2, INT2 *Case, INT2 *Sererity, INT2 *Control, CHAR3 *Facility_ID, FEED_BACK *fc; ただし、 Cond_Token(入力) 現条件またはフィードバック情報を表す8バイトの条件
トークン(CEECTOK) C_1(出力) Condition_IDの最初の2バイトの値を表す2バイトの2
進整数。 C_2(出力) Condition_IDの次の2バイトの値を表す2バイトの2進
整数。 Case(出力) トークンのCondition_ID部分のフォーマットを定義する
2バイトの2進整数フィールド。1の値はケース1の条
件を識別し、2の値はケース2の条件を識別する。値0
と3は留保されている。 Severity(出力) 条件の重大度を表す2バイトの2進整数。 Control(出力) 条件の状態の態様を記述するフラグを含む、16ビット
のフィールド。 Facility_ID(出力) 条件またはフィードバック情報を生成する製品を識別す
る、3つの英数字を含む3文字フィールド。 fc(出力/任意選択) 参照によってパスされる任意選択の8バイト・フィード
バック・コード。引数として指定される場合、フィード
バック情報(条件トークン)が呼出し側ルーチンに戻さ
れる。引数として指定されず、要求された動作が首尾よ
く完了しなかった場合は、その条件が条件マネージャに
信号で通知される。次の記号条件がこのサービスから得
られる。 CEE000 Severity=0 Msg_No=何でもよい Message=サービスが首尾よく完了。 CEE036 Severity=3 Msg_No=0102 Message=無効な条件トークンがパスされた。
【0040】コンパイラ作成者インターフェース(CW
I) CEEは、ファシリティID及びメッセージ番号が与え
られると条件トークンを作成する、IBMシステム/3
70特有のCWIを提供する。このサービスの名前はC
EEGETFBである。
【0041】CEEGETFB−ファシリティID及び
メッセージ番号が与えられると、条件トークンを作成す
る。CEEGETFBは、ファシリティID及びメッセ
ージ番号が与えられると、ケース1の条件トークンを作
成する。重大度は、そのメッセージ番号を含む適当なメ
ッセージ・ファイルから検索される。 void CEEGETFB(facility_id,message_no,cond
_token[fc]); CHAR3 *facility_id, INT4 *message_no CEECTOK *cond_token, FEED_BACK *fc; ただし、 Cond_Token(出力) メッセージ定義を含む適当なファイルから得られるfaci
lity_id、message_no、 Severityから作成される、ケ
ース1のスタイルの8バイト条件トークン(CE EC
TOK) message_no(入力) 結果として得られる条件トークン用のメッセージ番号を
表す4バイトの2進整数。 facility_id(入力) 結果として得られる条件トークンに入れられる3文字の
ファシリティID。メッセージ定義及びメッセージ・テ
キストを含むファイルを決定するのに使用される。 fc(出力/任意選択) 参照によってパスされる任意選択の8バイト・フィード
バック・コード。引数として指定される場合、フィード
バック情報(条件トークン)が呼出し側ルーチンに戻さ
れる。引数として指定されておらず、要求された動作が
首尾よく完了しなかった場合は、その条件が条件マネー
ジャに信号で通知される。次の記号条件がこのサービス
から得られる。 CEE000 Severity=0 Msg_No=何でもよい Message=サービスが首尾よく完了。 CEE0EA Severity=3 Msg_No=0458 Message=メッセージ格納場所が見つからない。 CEE3CT Severity=3 Msg_No=3485 Message=指定されたライブラリ内にmessage_noが見つか
らなかった。 CEE0CJ Severity=3 Msg_No=0403 Message=無効な重大度コードが見つかった。
【0042】共通条件処理(CCH)の記述 本発明を完全に実施するために、1組のコンパイラ、条
件マネージャを含む共通条件処理ルーチン(CCH)、
及び1組の呼出し可能サービスが作成される。CCH
は、複数の高水準言語(HLL)で書かれている可能性
のある適用業務プログラム用のより大きな共通実行時環
境の一部分である。図1は、コンピュータ・システム・
ソフトウェア(またはファームウェア)階層におけるC
CHの大域的位置を示す。コンパイラ自体及びコンパイ
ラによって適用業務プログラム用に生成されたコード
が、CCHとインターフェースする。システムの最低レ
ベルは、ハードウェア条件検出手段106及びオペレー
ティング・システム105である。本明細書では、オペ
レーティング・システムは、IBMのMVSオペレーテ
ィング・システム内ではサブシステムと呼ばれているプ
ログラムを含む。CCH104は、オペレーティング・
システム105と適用業務プログラム101〜103を
インターフェースする。この完全な実行時環境を共通実
行環境(CEE)と呼ぶ。CEEは、問題プログラム状
態ではオペレーティング・システムから分離したプログ
ラムとして走行するが、先に指摘したように、本質的な
修正の必要なく、オペレーティング・システムの一部と
して含めることも容易にできる。条件モデルが定義され
る。条件マネージャが条件モデルを実施する。
【0043】当技術分野では通常のように、CEE内の
呼出し可能ルーチンには、CEEHDLRなどのラベル
名が割り当てられる。コンパイラ及び他のプログラム
は、その原始言語にかかわらず、CEEによって提供さ
れるサービスに連係し、そのサービスを使用するように
作成することができる。図2に、CCH自体110及び
適用業務プログラム111が、標準的なプログラミング
技法を用いて、入口または外部ラベル宣言と共に作成さ
れることを示す。これらの外部参照は、組込みオペレー
ティグ・システム手段または標準的連係編集プログラム
112の使用によって解決される。CCHは、通常、シ
ステム・ソフトウェア作成者によって連係可能な目的コ
ードにコンパイルされ、目的コードだけとして、適用業
務作成者またはコンパイラ作成者に売り渡される。した
がって、典型的な場合、ユーザは段階111及び112
を実行し、段階110は予めCCH作成者によって実行
済みである。オペレーティング・システムがCCHに類
似するコードをロードし実行する方式は色々ある。例え
ば、IBMのMVSオペレーティング・システムは、連
係パック域(LPA)を使用し、必要な時だけ、コード
をCCHからユーザのアドレス空間に動的にコピーす
る。連係に使用される特定のオペレーティング・システ
ムによって提供されるどの機構もうまく働く。
【0044】CCHは、条件マネージャとインターフェ
ースするのに必要なプロトコルに従う、高水準言語コン
パイラ、デバッガ、アセンブラ言語ユーザ・ルーチン用
のCEE実行時環境で、条件を処理する。適用業務、言
語ライブラリ・ルーチン、及びデバッガが、条件が発生
する時に条件マネージャが呼び込むことのできる出口を
確立する。これらの出口は従属条件処理ルーチンと呼ば
れる。
【0045】本明細書における条件マネージャの議論で
は、特に断らない限り、TRAP(ON)のIBMオペ
レーティング・システム実行時オプション設定を仮定す
る。
【0046】条件マネージャは、次の従属条件処理ルー
チンのいずれをもサポートする。 ・言語ライブラリ内の条件処理ルーチン。 ・適用業務の一部である条件処理ルーチン。 ・デバッグ・システムの一部である条件処理ルーチン。
【0047】条件マネージャによって提供される機能を
以下にリストする。一般に、条件マネージャは、リスト
されている段階をすべて実行する。条件に応じて、いく
つかの段階が省略されたり、繰り返されたりすることが
ある。 ・システム割込みのインターセプト システム割込みは、オペレーティング・システム特有の
出口及びインターフェースを用いて、条件マネージャに
よってインターセプトされる。プログラム例外、システ
ムABEND、及びソフトウェアによって検出された条
件は、すべてマネージャによって監視される。 ・条件に関する情報の収集 条件マネージャは、条件に関する情報を収集する。収集
された情報は、条件の記録である。 ・条件(割込み及び例外)のスクリーニング。 条件マネージャは、言語がそう要求する場合、条件を無
視する(それが発生した場所の後に続く命令から実行を
再開する)。言語によっては、その言語の意味論のため
に、割込みまたは例外を扱わないものもある。 ・従属条件処理ルーチンの呼出し 条件マネージャは、従属条件処理ルーチンとして確立さ
れているルーチンを呼び出す。従属条件処理ルーチン
は、取るべき処置を示すリターン・コードを条件マネー
ジャに提供する。 ・訂正不能な条件での終了 従属条件処理ルーチンがエラーを許容または訂正できな
い場合、条件マネージャは条件の重大度に基づいて、次
のいずれかを実行する。 −実行を再開する(「安全な」条件のみ) −スレッドを終了する(その他の全条件)
【0048】条件マネージャによって提供されるユーザ
外部機構は、各言語製品で供給される従来の条件処理ユ
ーザ外部機構にとって代わることはない。このため、未
修正の適用業務が以前と同様に走行することが可能とな
る。CCHは、製品のための共通の条件処理ベースを提
供するように意図されている。CCHによって提供され
る条件処理プリミティブを用いると、各高水準言語が、
それ自体の条件処理の意味論的処置を実施できる。
【0049】言語のCCHによってイネーブルされたバ
ージョンへの移行は、単一言語ユーザには見えないが、
CCHの下で使用可能なより強力な条件処理が利用でき
るように、単一言語ユーザが修正を望むことがある。た
だし、複数言語で書かれた適用業務はCCHの下で異な
る挙動を示す可能性がある。
【0050】基本的条件マネージャは次の特徴をもつ。 ・適当な条件処理動作が、この条件を引き起こした呼込
み(呼出しレベル)の特性に基づいて決定される。 ・条件処理ルーチンが条件を格上げする、すなわち異な
る意味をもつ新しい条件に変換するための手段が提供さ
れる。これは、PL/Iがスタック・フレーム0におけ
る未処理の条件をERROR(エラー)に格上げし、処
理カーソルを再開カーソルにリセットする場合、処理ル
ーチンが元の条件の原因を知っているかいないかに基づ
く可能性がある。この場合、この新しい条件が条件処理
ルーチンに提示されることが暗黙のうちに了解されてい
る。処理順序を修正する下記の能力が与えられていると
して、どの処理ルーチンに新しい条件が提示されるかを
定義する際、若干の裁量の余地がある。 ・呼込みに対する条件処理を呼出し側の呼込み用の処理
ルーチンに回復機能委任する(据置かせる)手段が提供
される。このプロセスは、スレッド内の複数の呼込みに
よって繰り返すことができる。 ・条件処理ルーチンは、CEEXTDを呼び出すことに
より、スレッドの終了を要求できる。 ・条件処理ルーチンが条件を引き起こすことがあり、そ
のための処理ルーチンが定義されている。 ・呼込み用条件処理は、論理的に、処理活動と脱出活動
に分けられる。これら2つの活動は異なる時に起こり得
る。HLL終了出口ルーチンは、スタック・フレームと
関連づけられ、したがって、処理が時機尚早に、条件処
理中にあるいはブロック処理からのGOTO中に終了す
る場合には、そのスタック・フレームの代りに処理を実
行することができる。 ・HLL特有の条件処理ルーチンは、空のこともある
が、各スタック・フレームと関連づけられ、言語設計者
によって供給される。これらの処理ルーチンは、目的コ
ードの形で供給され、関連するコンパイラを用いて作成
されたユーザ・プログラムの実行に繰り返し使用できる
ように、ディスク、テープまたは他の持久メモリに記憶
される。独自の各コンパイラは、それ自体の言語特有の
処理ルーチンを有する。各処理ルーチンは、下記のアー
キテクチャに合致する構造をもたなければならず、CC
HのResume、Percolate、Promote機能ならびにCCHの
その他の機能も利用する。 ・ユーザの条件処理ルーチン用の待ち行列が、各スタッ
ク・フレームごとに設けられる。この待ち行列には、C
CH呼出し可能サービスCEEHDLRの使用によっ
て、条件処理ルーチンの実行の対象となるスタック・フ
レーム内からエントリが挿入される。条件処理ルーチン
は、CEEHDLRを呼び出すことにより除去される。
この待ち行列は、空のことがある。 ・スタック・フレームから脱出する際、スタック・フレ
ームに関連するすべての条件処理ルーチンが暗黙のうち
に取り消される。 ・高水準言語またはユーザ条件処理ルーチンによって処
理されないすべての条件に対して定義された省略時条件
処理活動が存在する。どんな省略時指定が選択されるか
は重要ではないが、これらの省略時指定がコンパイラ及
び適用業務作成者にわかっており、それらの省略時指定
がいつ所望の結果を達成するか、及び特別の処理ルーチ
ンがいつ必要とされるかについて判断が下せるようにす
る必要がある。省略時指定を構成する1つの論理的方法
は、条件マネージャを安全条件で再開させ、他のすべて
の条件でスレッドを終了するものである。
【0051】「2カーソル・モデル」: 本発明の実行
環境条件処理モデルは、2カーソル・モデルで説明する
のが最もわかりやすい。このモデルでは、適用業務の呼
込みプロシージャーが後入れ先出し(LIFO)スタッ
クにあり、2つのポインタ(すなわち「カーソル」)が
スタックの様々な段を指すものと考えている。
【0052】2カーソル・モデルは、ある条件処理情報
が論理的に各スタック・フレームと関連づけられている
と仮定する。2カーソル・モデルでは、スタック中への
2つのポインタが(少なくとも概念的に)条件処理の状
態を追跡するのに用いられる。 ・処理カーソルは、次にその条件処理活動が実行され
る、スタック・フレーム内の特定の処理ルーチンを指
す。最初、処理カーソルは、例外が発生した、あるいは
そこから検出された条件が信号で通知された、スタック
・フレーム内の最初の処理ルーチンを指す。条件処理が
進行するにつれて、処理カーソルは、フレーム内の後の
処理ルーチンに、あるいは呼出しフレーム中の最初の処
理ルーチンに移動する。条件処理ルーチンは、処理カー
ソルを順序が次でない処理ルーチンに設定する若干の裁
量の余地がある。 ・再開カーソルは、実行を再開するのが適当であると条
件処理ルーチンが判断した場合に実行が再開される、ス
タック・フレームとブロック内の命令とを指す。 再開
カーソルはまた、その命令用のプラットフォーム特有の
機械状態も含んで いる。最初、再開カーソルは、例外
を引き起こした機械命令またはその後、あ るいはその
条件を信号で通知せたCEESGLへの呼出しの後の位
置にくる。 その後、条件処理ルーチンは、再開カーソ
ルを以前のスタック・フレーム中の ラベルまたは復帰
点に設定できる。
【0053】次に、resume(再開)、perco
late(回復機能委任)、promote(格上げ)
の各動作をこれら2つのカーソルに関して定義する。 resume(再開) 条件処理を終了し、制御を再開カーソルによって指定さ
れる命令及びスタック・フレームに移す。従属条件処理
ルーチンは、CEEMRCR呼出し可能サービスを使っ
て、再開カーソルを修正できる。 percolate(回復機能委任) 条件が変化しない場合に、条件処理ルーチンを据え置
く。条件処理ルーチンは、条件処理を続行するため、処
理カーソルを次の2つの場所のどちらか一方に設定する
ことができる。 1.現スタック・フレーム用の呼込み待ち行列内の次の
処理ルーチン 2.次の(呼出し側)スタック・フレーム用の待ち行列
内の最初の条件処理ルーチン promote(格上げ) 処理カーソルを次の3つの場所のうちの1つに設定する
ことによって、条件を別の条件に変換し、条件処理を続
行する。 1.現スタック・フレーム用の呼込み待ち行列内の次の
処理ルーチン 2.次の(呼出し側)スタック・フレーム用の待ち行列
内の最初の条件処理ルーチン 3.現スタック・フレーム用の最初の処理ルーチン(そ
れらの処理ルーチンを再駆動する)
【0054】スタック・フレームに関連する条件処理情
報は、論理的に、処理プロセス全体のいくつかの異なる
段階用の処理ルーチンを含んでいる。処理ルーチンとし
ては、次のものが含まれる。 ・言語特有の「イネーブル」処理ルーチン(システム特
有の「イネーブル」処理ルーチンが存在することがある
が、それはこのモデルには見えないことに留意された
い)。1つの言語特有のイネーブル処理ルーチンが、空
のことがあるが、 各スタック・フレームに関連づけら
れている。このルーチンには、高水準言語 条件処理ル
ーチン・インターフェースを介して入る。好ましい実施
例では、イ ネーブル機能は、条件処理を提供するのと
同じルーチンによって提供される。 ・デバッガ条件処理ルーチン。この処理ルーチンに入る
のは、デバッガが活動状態であるか、あるいは条件の重
大度がテスト・レベルに合致するかまたはそれを越える
場合である。 ・CCHユーザ条件処理ルーチン。この条件処理ルーチ
ンはCCHDLRインターフェースを介して登録され
る。ユーザ条件処理ルーチンの待ち行列は、各スタック
・フレームに関連づけられている。この待ち行列は、空
のこともある。このルーチンには、ユーザ条件処理ルー
チン・インターフェースを介して入る。 これは、CE
EHDLUインターフェースを介して登録されていない
こともあ る。 ・高水準言語特有の処理ルーチン。この処理ルーチンは
PL/I「ON−条件」処理ルーチンなど言語特有のユ
ーザ処理ルーチンにサービスすることができる。 ま
た、高水準言語またはユーザ処理ルーチンが条件を処理
できない場合に、何 らかの省略時処置をとることもで
きる。1つの高水準言語特有の条件処理ルー チンは、
空のこともあるが、各スタック・フレームに関連づけら
れている。未 確認条件は、変更なしに次の条件処理ル
ーチンに「パス」しなければならない。 このルーチン
には、高水準言語条件処理ルーチン・インターフェース
を介して 入る。 ・終了出口ルーチン。このルーチンは、呼込みから異常
脱出する時にとるべき処置を指定する。現言語は明示的
終了出口ルーチンをサポートしないので、これは言語に
よって供給されるルーチンとCCHによって登録された
ルーチンである。
【0055】巻戻しは、指定されたスタック・フレーム
用の登録されたすべての終了出口ルーチンを呼び出し、
次いでスタック・フレームに非活動状態のマークをつけ
る動作である。
【0056】従来の条件処理方式と比較して、上記のリ
ストについて留意すべきいくつかの重要な事柄がある。
まず、イネーブル処理ルーチンが概念上独立の範疇とし
て分離されていたことに留意されたい。前に触れたよう
に、これはシステム間での条件処理の一貫性を確保する
のに必要である。次に、CCHユーザ処理ルーチンの範
疇が加えられた。これは、すべての言語ユーザに条件処
理へのアクセス権を与え、既存の条件モデルをもつ言語
のユーザが本発明の実行環境条件モデルの全能力及び機
能にアクセスできるようにする。
【0057】しかし、上記リストの重要な一態様は、終
了脱出処理を別個の活動として分離することである。再
開カーソルとあいまって、終了脱出処理を残りの条件処
理からこう分離することは、本発明の一部である。
【0058】2カーソル・モデルの簡単な実例: 2カ
ーソル・モデルを、その最も簡単な形で、図3の例に関
して説明する。スタック201は、データをコンピュー
タのメモリに時間順に記憶する、一般に使用されている
方法である。スタックの下端は、図に示すように、最も
古いデータを含み、最新のデータは上端にある。このス
タックは、フレーム202〜205から構成されてい
る。各フレームは、レジスタ値、命令ポインタ及びフラ
グを含むデータ・ブロックを含んでいる。例えば、図4
は、プログラムAのスタック・フレームに、ユーザ条件
処理ルーチン210と高言語条件処理ルーチンの2つの
条件処理ルーチンが関連づけられていることを示してい
る。これらの処理ルーチンは物理的にはスタック上にな
いが、プログラムAがユーザ処理ルーチンをCCHで登
録し、HLL処理ルーチンはプログラムが開始された時
に自動的に登録されたので、スタック・フレームと関連
づけられている。したがって、CCHと相互動作するプ
ログラムは、プログラムが最初に初期設定される時、及
び異なる言語で書かれたサブルーチンを呼び出す時に、
CEEを通過しなければならない。これをどう行うか
は、本発明を実施するのに重要ではないが、その条件処
理が正確に機能すべき場合、各スタック・フレーム用の
固有のHLL処理ルーチンに関する情報をCCHにとっ
て利用可能にすべきである。 1.プログラムAの実行中にある条件が発生すると仮定
する。条件マネージャがオペレーティング・システムか
らシステムの制御を得る。再開カーソル208が、プロ
グラムAのスタック・フレーム205を指すように設定
される。プログラムAが、その条件が発生した呼込み、
すなわち「所有」スタック・フレームである。再開カー
ソルに関連する「命令アドレス・レジスタ」値は、条件
を引き起こした命令の後に続く命令あるいは条件を引き
起こした命令を論理的に指す。条件の「環境」も再生カ
ーソルと共にセーブされる。 2.処理カーソル209が指す呼込みは、「処理」呼込
みと見なされ、どんな条件処理ルーチンが指定されてい
るかを決定するためにそれが調べられる(この議論で、
条件の発生時に存在するスタック・フレームを参照する
ために、「処理呼込み」「呼び出された呼込み」「呼出
し側呼込み」の用語を使用することに留意されたい。条
件処理ルーチン自体の呼込みは参照しない)。 3.条件が「新鮮な」(すなわち、現呼込みに由来す
る)ものである場合は、高水準言語条件処理ルーチン2
11がイネーブルのために呼び出される(理由コード"
2"を使って、呼出しが、以下に見られるように、イネ
ーブル検査用だけのものであることを示す)。その言語
がその条件を「問題でない」と認める場合、ルーチンが
再開される。 4.デバッガが活動状態であるか、あるいは条件がテス
ト・レベルに合致するかまたはそれを越える場合には、
デバッガが呼び出される。 5.呼込みに関連するユーザ条件処理ルーチンが、この
スタック・フレームに関して、その1つがこのフレーム
を処理するまで、あるいはすべてが巡回されるまで、後
入れ先出し(LIFO)順に実行される。条件マネージ
ャはまずユーザ条件処理ルーチン210を実行する。ユ
ーザ処理ルーチンが存在しない場合、あるいはユーザ処
理ルーチンが条件を処理しない場合は、高水準言語(H
LL)条件処理ルーチン211が実行される。理由コー
ド"1"が、その呼出しが実際の条件処理のためのもので
あることを示すために使用される。 6.処理ルーチンのいずれかが、以下に定義されるよう
な再開コードを戻すことによって、条件が処理されたと
見なすべきことを条件処理ルーチンに示すことがある。
条件が処理されていない場合、処理ルーチンは、その条
件が回復機能委任されるべきである(すなわち、同じ条
件が異なる条件処理ルーチンに提示されるべきであ
る)、あるいは条件が格上げされるべきである(すなわ
ち、旧条件の代りに新しい条件を異なる条件処理ルーチ
ンに提示すべきである)と指定することができる。 7.条件が回復機能委任または格上げされた場合、処理
ルーチンはまた、次に呼び込む処理ルーチンを決定する
ために処理カーソルをどのように修正すべきかを(明示
的に定義された限界内で)指定することもできる。処理
カーソルを、それがスタック中で再開カーソルよりも最
近のスタック・フレームを指すように絶えず修正するこ
とは正しくない。省略時動作は、処理カーソルを呼出し
側呼込み(複数個が定義されている場合には、現呼込み
内の次の処理ルーチン)へと下に移動することである。
処理カーソルは条件マネージャによってだけ移動され
る。 8.上記のいずれの場合(再開、回復機能委任または格
上げ)でも、条件処理ルーチンはまた、再開カーソルを
どう修正すべきかを指定することもできる。再開カーソ
ルの修正は、「下方」移動(すなわち呼び出される呼込
みから呼出し側呼込みへ)だけに限定され、このような
修正は常に、カーソルが通過する呼込み用の終了出口処
理ルーチンの実行を強制する。再開カーソルを呼込みを
通り過ぎて移動すると、関連する条件処理ルーチンが登
録解除される(これらの動作は、実際には、条件処理ル
ーチンが条件マネージャに戻った後にだけ行われる)。
再開カーソルを0次スタック・フレームを指すように修
正することは許されない。 9.再開カーソルを修正する際に、処理ルーチンはま
た、再開カーソルに関連する(次の命令アドレスを含む
が、それだけには限定されない)機械状態も修正するこ
ともできる。1つの共通修正は、再開カーソルで表され
る呼込み中の特定の場所(ラベル)で実行を再開させる
ものであろう。ただし、不履行命令を再試行するように
再開カーソルを修正することは、IBMのOS/2オペ
レーティング・システムでは定義されていない。大部分
の場合、これは不可能である。実際に再開カーソルが示
す呼込み以外のどこかで実行を再開するように機械状態
を修正するのは(必ずしも検出されるエラーではない
が)エラーである。
【0059】通常条件処理シーケンスは、後のスタック
・フレームからより前のスタック・フレームへとスタッ
クを横断する。スタックがスタック・フレーム0まで横
断された時までに条件が処理されていない場合、条件処
理ルーチンは、0次スタック・フレーム用のHLL条件
処理ルーチンを呼び出す。処理がスタック・フレーム0
用のものであるという特定の指示が存在する。スタック
・フレーム0の処理後も条件が処理されていない場合に
は、条件マネージャの省略時動作が適用される。省略時
動作は、条件の重大度と、使用可能な追加情報に依存し
ている。いずれかの条件処理ルーチンがスレッドでなく
エンクレーブを終了させるのを望む場合は、CEETR
ENを呼び出さなければならない。
【0060】以下に、この1組の例を通じて使用される
いくつかの概念を提示する。ルーチンの入口で新しいス
タック・フレームが割り当てられる時、HLL条件処理
ルーチンが論理的にスタック・フレームに関連づけられ
る。ユーザもまた、任意選択で、そのスタック・フレー
ム用の1つまたは複数の追加の条件処理ルーチンを確立
することができる。ルーチンがその呼出し側に戻り、ス
タック・フレームが割当て解除される時、HLL条件処
理ルーチン及びユーザが確立する条件処理ルーチン(も
しあれば)が確立解除される。
【0061】0次スタック・フレームとは、第1ルーチ
ン用のスタック・フレームに先行するスタック・フレー
ムである。0次スタック・フレームに関連する条件処理
の意味論は、モデルによって定義される省略時動作であ
る。
【0062】呼出しシーケンスがProc1呼出しPr
oc2呼出しProc3であり、ルーチンProc3の
実行中にある条件が発生する場合、Proc3のスタッ
クは所有スタック・フレームと呼ばれる。すなわち、P
roc3のスタック・フレームがその条件を所有する。
【0063】条件が発生する時、条件マネージャ用にあ
るスタック・フレームが割り当てられる。その条件をも
っていたスタック・フレーム用の条件処理ルーチンが、
イネーブル段階用に呼び出される。スタック・フレーム
が有効だという応答の場合、条件マネージャは、所有ス
タック・フレームから始めて、スタック・フレームを1
つずつ0次スタック・フレームに向かって移動して、条
件が(何らかの形で)処理されるかあるいは現呼込みス
タックがなくなるまで、各スタック・フレームを巡回す
る。巡回された各スタック・フレームごとに、そのスタ
ック・フレームに関連するHLL条件処理ルーチンが呼
び込まれ、高水準言語エラーの意味論が実施される可能
性がある。(呼出し可能サービスを介して確立されるユ
ーザによって定義される条件処理ルーチンについては、
後で論じるが、これはHLL条件処理ルーチンより前に
実行される。ただし、これらは依然としてスタック・フ
レームに基づくモデルに従う)。ポインタである処理カ
ーソルは、現に制御されている条件処理ルーチンを有す
るスタック・フレームか、あるいはこれから制御を得よ
うとしているスタック・フレームを識別する。
【0064】各条件処理ルーチンは、次の応答のうちの
一つで条件に応答することができる。 ・handled(処理済み)(再開) ・percolate(回復機能委任) ・promote(格上げ)
【0065】定義されているモデルの意味論は、1パス
・スタック・フレームに基づく条件処理ルーチンのそれ
である。これは、適用業務によって作成された各スタッ
ク・フレームが所与の条件で一度だけ巡回されることを
意味する。各スタック・フレームに、条件に反応する機
会が1回与えられる。各スタック・フレームは、条件を
処理し、条件を回復機能委任し、あるいは条件を格上げ
することができる。
【0066】1パス・モデルに対する例外は、PL/I
が所有するスタック・フレームである。条件マネージャ
は、条件がスタック・フレーム0におけるPL/I条件
処理ルーチンに到達した場合、PL/Iコードを含むす
べてのスタック・フレームを再駆動する。
【0067】適用業務によって処理されない(すなわち
スタック・フレーム0まで回復機能委任される)どんな
条件も、定義された省略時動作の対象となる。
【0068】図5を用いて、詳細な一般例について論じ
る。この例では、次のような仮定を行う。 1.Proc1が「主」プロシージャであってProc
2を呼び出し、Proc2はProc3を呼び出す。 2.再開カーソルは移動されない。 3.現スタック・フレームは、現在動作中のプロシージ
ャに関連するスタック・フレームである。 4.「所有」スタック・フレームは、その条件が発生し
たスタック・フレームである。 5.Handle1及びResume1は第1条件に適
用され、Handle2及びResume2は第2条件
に属する。 6.あらゆる活動状態の条件について条件マネージャ・
スタック・フレームがスタック上に存在する。 7.すべてのユーザ条件処理ルーチンが、それらを導入
するルーチンと同じ言語で書かれている。これは、必要
条件でなく、この例で便宜上行われている。 8.開始スタックは次のように現れる。user1,u
ser2,user3,user4がユーザによって導
入された条件処理ルーチンである場合、CM1は条件マ
ネージャのHLL条件処理ルーチンであり、C言語処理
ルーチン、FORTRAN処理ルーチン、PL/I処理
ルーチンがそれぞれ当該のHLL条件処理ルーチンであ
る。 9.条件は、Proc3内で発生したか、あるいはPr
oc3によって信号で通知された。条件マネージャによ
るすべての応答はどちらの場合でも同じである。
【0069】この条件が、条件マネージャのスタック・
フレームをスタック上に置かせた。resume1カー
ソルは、条件が発生した点を「指す」。handel1
カーソルは、最後に導入されたユーザ条件処理ルーチン
を「指す」。この場合、それはuser4である。条件
を処理する際の段階のシーケンスは、次の通りである。 ・この例では、PL/Iの条件処理ルーチンがイネーブ
ルするために呼び出される。それが条件を認識していな
いと仮定しよう。したがって、その条件が有効であると
指示する。 ・この時点で、デバッガが走行中(あるいは少なくとも
初期設定されている)の場合、それに制御が与えられ
る。デバッガが存在する場合、それは条件を回復機能委
任すると仮定しよう。 ・Proc3用のスタック・フレームに関連するユーザ
条件処理ルーチンの待ち行列を起動する。user4
は、ルーチンProc3用の最も最近に導入されたユー
ザ条件処理ルーチンである。したがって、条件を処理す
るためにそれがまず呼び出される。そうでないと仮定し
よう。handle1カーソルを次のユーザ条件処理ル
ーチンに移動する。待ち行列内の次のユーザ条件処理ル
ーチンはuser3である。 ・user3は条件を何か他のものに格上げすると仮定
し、処理を次の条件処理ルーチンに進ませる。hand
le1カーソルを次の条件処理ルーチンに移動する。 ・user3は待ち行列内の最終ユーザ条件処理ルーチ
ンであるので、HLL処理ルーチン、この場合はPL/
I条件処理ルーチンが呼び出される。その条件がユーザ
条件であり、したがってHLL条件処理ルーチンによっ
て認識されないと仮定しよう。 ・この時、Proc3のスタック・フレームに関連する
すべての条件処理ルーチンが呼び出されており、したが
って、handle1カーソルをProc2の最初のユ
ーザ条件処理ルーチン、すなわちuser2に移動す
る。これでuser2が呼び出される。 ・user2は新しい条件を信号で通知する。この時、
スタック及びカーソルは図6のようになる。 ・resume2カーソル及びhandle2カーソル
が指示されているように配置されていることに注意され
たい。これから条件マネージャ(番号2)が走行し始め
るが、resume2カーソル及びhandle2カー
ソルで働くだけである。また、resume2がres
ume1よりもスタック・フレーム0により近づく場合
には、第1条件が「失われる」ことに留意されたい。こ
の例(通常の場合である)では、再開カーソルを移動し
ない。 ・条件マネージャ2が、イネーブルのため、user2
用のHLL条件処理ルーチンを呼び出す。これはuse
r信号なので、FORTRAN HLL条件処理ルーチ
ンは条件を認識せず、これをイネーブルする。 ・条件マネージャ2が、ユーザ条件処理ルーチンがある
かどうかuser2を検査するが、何も見つけない。次
いで、条件を処理しないuser2用のHLL条件処理
ルーチンを呼び出す。この時、handle2カーソル
は、次のスタック・フレーム、すなわち条件マネージャ
1のスタック・フレームに移動する。 条件マネージャ
1用のユーザ処理ルーチンはない。handle2カー
ソルが、 条件を処理しない条件マネージャ1のHLL
条件処理ルーチン(CM1)に移 動する。条件マネー
ジャ1のスタック・フレームはresume2カーソル
よ り前のスタック・フレーム中のスタック上にあるの
で、それを処理しなければ ならないことに留意された
い。 ・次に、handle2カーソルを、Proc3用の最
初のユーザ条件処理ルーチン、すなわちuser4に移
動する。そのスタックをスタック・フレーム0までずっ
と条件の処理を続けることはできないが、この例では、
user4が第2の条件を処理すると仮定している。 ・user4が条件を処理したので、その条件を「信号
で通知した」ルーチン、すなわちuser2に制御を戻
す。スタックは、条件マネージャ2、resume2カ
ーソル、handle2カーソルがなくなっている点を
除けば、図6と同じように見える。user2が次に、
条件を別の条件に格上げして戻ると仮定しよう。 ・次にhandle1が、次の条件処理ルーチン、すな
わちProc2のHLL条件処理ルーチン(FORTR
AN用)に移動する。FORTRAN条件処理ルーチン
は条件を回復機能委任し、handle1カーソルは次
の条件処理ルーチン、すなわちProc1のユーザ条件
処理ルーチン(user1)に移動する。user1は
その条件を承認せず、回復機能委任する。 ・handle1カーソルがProc1のHLL(例え
ばC言語)条件処理ルーチンに移動する。HLL条件処
理ルーチンは条件を承認せず、回復機能委任する。 ・Proc1はスタック・フレーム0より前の最初のス
タック・フレームなので、 この条件に対してとられる
処置が、省略時動作となる。
【0070】次に、本発明を実行時ライブラリ・ルーチ
ンと共に使用する例を図7を使って例示する。三角関数
を計算する数学ルーチンが、実行時ライブラリ・ルーチ
ンの1例である。実行時ライブラリ用の条件処理は、呼
出し側の言語環境の意味論を反映しなければならない。
プログラミング言語は、ライブラリ・ルーチンに関する
条件処理意味論動作の点で非常に様々である。条件が内
部でライブラリ・ルーチンによって発見されることもあ
り得(例えば、パラメータ検査が定義域エラーをもたら
す)、あるいは条件マネージャが最初に条件(ハードウ
ェア0除法例外)に気づくこともあり得る。その段階
は、次の通りである。 1.ライブラリ・ルーチンが条件を検出し、フィードバ
ック・コード(FC)なしで条件マネージャにその旨を
信号で通知する(71)。 2.条件マネージャが、イネーブルのために、(適用可
能ならば)ライブラリ・ルーチンが書かれている言語の
HLL処理ルーチンを呼び出す(72)。 3.条件マネージャが、ライブラリ・ルーチン用のルー
チン特有条件処理ルーチン(RSCH)を(もしあれ
ば)呼び出す(73)。 4.RSCHがその条件を再び、ただし今度はフィード
バック・コード(FC)付きで信号で通知する(74)
(これによって、すべてのフィックスアップ論理がRS
CH内に存在することが可能になる)。 5.次いで、条件マネージャが、イネーブルのため、ラ
イブラリ・ルーチンの呼出し側の言語用のHLL条件処
理ルーチンを呼び出す(75)。 6.次いで、条件処理が通常のように進行する(7
6)。
【0071】ライブラリ・ルーチンがそれ自体のスタッ
ク・フレーム上で走行する時: 条件がハードウェアに
よって検出された場合、次の処置が行われる。 1.制御が条件マネージャに渡され、続いて条件をさら
に定義または修飾しあるいはその両方を行うために、条
件マネージャがルーチン特有の条件処理ルーチンを呼び
出す。 2.次いで、ルーチン特有の条件処理ルーチンが、ハー
ドウェアで定義された条件を等価なソフトウェア条件に
変換する(これは、個々のライブラリ・ルーチンに対す
る定義されたインターフェースに特有であることがあ
る)。 3.次いで、ルーチン特有の条件処理ルーチンによっ
て、次の段階がとられる。 ・適当な情報を含むインスタンス特有情報ブロックが、
必要ならば構築される。 ・条件を完全に修飾するのに要するすべての必要なデー
タをアセンブルして修飾データ・ブロックにする。 ・フィードバック域を設けて、変換された条件を信号で
通知せる。
【0072】ライブラリ・ルーチン自体(すなわち、検
出されたソフトウェア)によって条件が発見された場
合、次の処置が行われる。 1.ライブラリ・ルーチンがフィードバック・コードで
呼び出された場合、適当な条件トークンがフィードバッ
ク域に入れられ、ライブラリ・ルーチンの呼出し側に戻
される。 2.ライブラリ・ルーチンへの呼出しの際にフィードバ
ック域が提供されていない場合、フィードバック域を提
供せずに、条件が条件マネージャに信号で通知される。 3.次いで、条件マネージャが、ハードウェアで検出さ
れた条件の場合と同じ処置をとる、ルーチン特有条件処
理ルーチンを呼び出す。条件特有修飾データは、条件を
理解しまたはフィックスアップ動作を行いあるいはその
両方を行うのに必要な何らかの追加データを指すアドレ
スのベクトルの形をとる。ルーチン特有条件処理ルーチ
ンが実行時に登録される。
【0073】どちらの場合にも、条件の処理は、その
後、下記のように進行する。フィードバック・トークン
として戻されないすべての条件では、次の処置が行われ
る。 1.ライブラリ・ルーチンが書かれている言語用の言語
特有条件処理ルーチンがある場合、イネーブルのため
に、それが呼び出される。 2.次いで、条件マネージャが、ルーチン特有条件処理
ルーチンを呼び出して、条件を処理する。各ライブラリ
・ルーチンは、ルーチン特有条件処理ルーチンを条件マ
ネージャで登録することができる。このルーチン特有条
件処理ルーチンは、事実上ユーザ処理ルーチンと同様で
ある。ルーチン特有条件処理ルーチンは「完全機能」条
件処理ルーチンであるが、その所期の動作は、再開しイ
ネーブルを回復機能委任すること、またはイネーブルを
回復機能委任し条件を変換することである。動作イネー
ブルを(変換して、または変換せずに)回復機能委任す
る際、ルーチン特有条件処理ルーチンが、条件の連続処
理を可能にするのに必要なメッセージ挿入データ及び条
件特有修飾データを提供する必要がある。 3.ルーチン特有条件処理ルーチンの応答がイネーブル
を回復機能委任することである場合、条件マネージャ
は、まず条件の以前のイネーブルをリセットし、次いで
イネーブルのためにライブラリ・ルーチンの呼出し側の
言語の言語特有条件処理ルーチンを呼び出す。次に、呼
出し側スタック・フレーム中で通常の条件処理が続行す
る。
【0074】ライブラリ・ルーチンに起因する条件の処
理中、有効な動作は、フィックスアップと再開である。
この目的で、ライブラリ・ルーチンのルーチン特有条件
処理ルーチンに戻ることのできる2つの条件が設けられ
ている。それは、新しい入力値でフィックスアップし、
新しい出力値で再開することである。定義されたどちら
かのフィックスアップ動作が要求された時、識別フィー
ドバック・トークンがライブラリ・ルーチン特有条件処
理ルーチンに戻される。この処理ルーチンは、ライブラ
リ・ルーチン及びその呼出し側と協同して働き、指示さ
れたフィックスアップ活動を適正に行うのに必要な論理
動作を提供することができる。
【0075】ライブラリ・ルーチンがその呼出し側のス
タック・フレーム上で走行する時:ライブラリ・コード
がその呼出し側の生成コードと「整列し」置かれた時、
コンパイラの明白な動作の結果として、コンパイラはま
た、生成されたコード内に含まれるライブラリ・ルーチ
ンの各インスタンスごとに、次の情報をモジュール・プ
ロローグに入れなければならない。 ・ライブラリ・ルーチンの開始オフセット ・ライブラリ・ルーチンの長さ ・ライブラリ・ルーチンに関連するルーチン特有条件処
理ルーチンを識別するハンドル
【0076】条件処理は、ライブラリ・ルーチンがそれ
自体のスタック・フレーム上で走行する場合と同じ一般
的プロセスをたどるが、図8に記載されているような相
違がある。処理段階は、次の通りである。 1.ライブラリ・ルーチンが、条件を検出し、フィード
バック・コードなしで条件マネージャにその旨を信号で
通知する(81)。 2.条件マネージャが、イネーブルのためにライブラリ
・ルーチンを含むスタック・フレームを所有する言語の
HLL処理ルーチンを呼び出す(82)。 3.条件マネージャが、モジュール・プロローグの探索
によって、そのライブラリ・ルーチン用のルーチン特有
条件処理ルーチンがある場合、それを呼び出して、割込
みの位置が、条件の発生時に実行がライブラリ・ルーチ
ン内であったことを示すかどうかを決定する(83)
(注:これは、ライブラリ・ルーチン内の実行時間に、
ルーチン特有条件処理ルーチンの偽静的登録が行われる
ことを示している)。 4.RSCHが条件を、今度はフィードバック・コード
付きで再度信号で通知する(84)(これによってすべ
てのフィックスアップ論理がRSCH中に存在すること
が可能になる)。 5.次いで条件マネージャが、新しい条件のイネーブル
のために所有フレームのHLL条件処理ルーチンを呼び
出す(85)。 6.HLL条件処理ルーチンは、条件がイネーブルされ
ていることを示し、条件マネージャが最初の「ユーザ」
処理ルーチンであるライブラリ・ルーチン特有条件処理
ルーチンを呼び出す(86)。 7.次いで、RSCHは条件を回復機能委任して、ユー
ザ条件処理ルーチン、UH1を呼び出させる(87)。 8.次いで、通常のように条件処理が進行する(8
8)。
【0077】スタック・フレーム0における処理の順
序: 通常の条件処理シーケンスは、スタックを後のフ
レームから前のフレームへと横断する。スタックをスタ
ック・フレーム0まで横断した時までに条件が処理され
ない場合、条件マネージャが予期された動作の制御を獲
得する。現言語省略時条件処理との互換性を保つため、
スタック・フレーム0用の言語特有条件処理ルーチンの
仮想待ち行列が維持される。
【0078】論理的に、各スレッドごとに1つのスタッ
ク・フレームが存在する。それは、スレッド上の最初の
適用業務ルーチンである。スレッドはそのスタック上に
非CCHスタック・フレームを有することがあり、CC
Hがそれを迂回するすべはないので、CCHは、これら
の非CCHスタック・フレームの一つに出会った時は
「仮想」スタック・フレーム0を仮定する。この時点
で、スタック・フレーム0の処理が、最後に処理された
CCHスタック・フレームから開始する。この仮想待ち
行列には、3つまでのHLL条件処理ルーチンが存在す
る。呼び出される最初の処理ルーチンは、非マルチパス
HLL条件処理ルーチンであり、スタック・フレーム0
で省略時処理を有したいと望むことがある。次のことが
行われる。 ・言語特有条件処理ルーチンがイネーブルのために呼び
出される通常の条件処理中、これは、そのファシリティ
IDをCEECIBのCond_Defaultフィー
ルドに入れる。 ・処理カーソルがスタック・フレーム0に到達すると、
条件マネージャが、CEECIBフィールドCond_
Default中のファシリティIDに対するHLL条
件処理ルーチンを呼び出す。次いで、この条件処理ルー
チンは、言語によって定義される省略時条件処理意味論
を適用することができる。これには通常のすべての処理
ルーチンの動作が含まれる。 ・このルーチンは、登録解除を受けるために、条件マネ
ージャに戻らなければならない。
【0079】2番目は、スタック上の最も古いPL/I
またはマルチパスの高水準言語である。次の動作が行わ
れる。 ・条件処理ルーチンがCCHによって導入される。 ・条件がこの導入されたスタック・フレーム0用条件処
理ルーチンに到達する場合、スタック・フレーム0の処
理のため、条件処理ルーチンが呼び出される。スタック
を再巡回することを条件処理ルーチンが決定する場合
は、マルチパス・スタック・フレームだけが再巡回さ
れ、次いでHLL条件処理ルーチンだけが呼び出され
る。 ・スレッド1用に導入された条件処理ルーチンが適用業
務中のすべてのスレッドに使用される。
【0080】この待ち行列中の最後の処理ルーチンは、
条件マネージャであり、未処理のすべての条件用の定義
された省略時指定を実施する。
【0081】未処理条件による終了: 重大度2、3ま
たは4の条件が未処理の場合にスレッドを終了させる条
件マネージャの省略時動作は、CEEEXTDサービス
を呼び出すことによって実行される。スレッドが未処理
条件のために終了する結果としてエンクレーブが終了す
る場合、リターン・コードのユーザ・リターン・コード
部分として0の値が使用される(すなわち、どのユーザ
・リターン・コードも無視される)。
【0082】処理カーソルの動き: 処理カーソルは、
高水準言語またはユーザ条件処理ルーチンによって明示
的に操作されない。その動きは、実際には条件マネージ
ャによって制御されるが、条件マネージャは条件処理ル
ーチンから戻される結果コードを使って、動作を決定す
る。この動きは、条件が格上げされる時以外は、0次ス
タック・フレームに向う。格上げされる場合は、処理カ
ーソルは、再開カーソルが指すスタック・フレーム、あ
るいは条件処理が現在行われているスタック・フレーム
用の現処理ルーチンまたは最初の処理ルーチンを指すこ
とができる。格上げされた条件の処理も、もちろん回復
機能委任された条件の場合と同様に、以前のフレームで
続行できる。
【0083】再開カーソルの動き: 再開カーソルは、
呼出し可能なサービスCEEMRCR及びCEEMRC
Eによって操作される。再開カーソルは、特定のスタッ
ク・フレームまで移動すると、以前の再開点から新しい
再開点まで、ただし後者を含まない、すべてのフレーム
を終了させる効果を有する。上記で指摘したように、こ
れは、こうした終了されたフレームのどれに対しても活
動状態であった条件処理を打ち切る効果をもつことがで
きる。
【0084】再開カーソルは、再開点を示すので、単に
呼込み(スタック・フレーム)を指すだけでなく、論理
的に、実行がそこから再開される、関連プロシージャ内
の命令をも指す。さらに、これは、論理的に、実行を再
開しようとする場合に適正な実行環境を確立するのに必
要となる1組の機械状態(例えばレジスタ)情報にも関
連している。
【0085】使用上の規約: 本節では、高水準言語ラ
イブラリ及び適用業務プログラマが従うべき、使用上の
規約について記述する。これらのガイドラインに従う
と、条件処理モデルの一貫したビューを生成するのに必
要な共同的相互作用が増進される。各グループ、すなわ
ち高水準言語ライブラリと適用業務プログラマについて
以下に別々に論じる。
【0086】高水準言語の規約、要件及び情報: 互い
に協調して働くために、HLL条件処理ルーチンが、1
組の規約を守らなければならない。また、条件処理モデ
ルが完成するように、現在の高水準言語エラー処理方式
に若干の拡張を加えることが必要である。そうすること
により、条件処理モデルの一貫した協同的なビューが生
成される。本節では、高水準言語に対するこれらの規約
及び要件、ならびに高水準言語作成者を助けるために提
供される若干の追加情報をリストする。
【0087】HLL条件処理モデルは、基本的に、スタ
ック・フレームに基づくモデル(例えばPL/I)と大
域エラー・テーブル(G.E.T.)モデル(例えばI
BMFORTRAN)の2種類に分かれる。両方のモデ
ルを含む可能性のある複数言語スレッドでの条件処理の
一貫したビューを確保するため、HLL条件処理ルーチ
ンの間の協同が必要である。
【0088】HLL条件処理の規則は、次の通りであ
る。 ・すべてのHLL条件処理ルーチンは、あらゆる未知の
条件を回復機能委任する。 未知の条件とは、高水準言
語がそれに対する定義済みの動作をもっていない条 件
である。 ・HLL条件処理ルーチンがイネーブルのために呼び込
まれる時、未知の条件がイネーブルされなければならな
い。 ・重大度0または1のすべての(イネーブルされた)条
件が、フィックスアップを必要とせず、次の順次命令で
の再開を可能にしなければならない。 ・所与の条件に対する動作が「無視」の時は、その条件
はディスエーブルされていると見なされ、それがイネー
ブルのために呼び込まれる時、HLL条件処理ルーチン
はイネーブルされずに戻らなければならない。例えば、
C言語では、signalへの呼出しの際にSIG_IGNを
指定することにより、条件が無視できる。 ・ハードウェア条件によっては、実際にハードウェア条
件を提起する前に、ソフトウェアを介して検出できるも
のである。例えば、ソフトウェアは0除数の有無を調べ
ることによって、ZeroDivide(0除法)条件の有無を検
出することができる。条件が高水準言語によってイネー
ブルされるものと定義され、ソフトウェアが潜在的ハー
ドウェア条件を検出する場合、CEESGLを用いて、
等価なCCH条件が信号で通知されなければならない。 ・上記のことにもかかわらず、ステートメント向き言語
構成体は、直接、高水準言語で処理するのが最も適当で
ある。対応するどんな条件もディスエーブルされるもの
と定義される。例えば、COBOL DIVIDE動詞
のON SIZEクローズ(実際に条件を提起すること
と論理的に等価なものを含んでいる) からである。 ・大域エラー・テーブル(G.E.T.)モデルを使用
する高水準言語では、G. E.T.モデルの高水準言
語とスタック・フレームに基づくモデルの高水準言 語
を共に含む複数言語適用業務において、この2つのモデ
ルが協調して働くこ とが可能となるように、いくつか
の規則を守らなければならない。これらの規 則には、
次のものがある。 −イネーブルされた条件では、G.E.T.中で定義さ
れている処置は次の2グループに分かれる。 1.フィックスアップ及び再開 2.フィックスアップと再開以外のこと 省略時処置が「フィックスアップ再開」である場合、所
有スタック・フレームでその処置を取らなければならな
い。 −ユーザが明示的に、G.E.T.内の特定の条件に対
してとる必要のある動作を変更する、例えば省略時動作
をとる代りに、その条件をさばくためにそれ自体の処理
ルーチンを登録する場合は、ユーザ指定の動作をしなけ
ればならない。 −条件が所有スタック・フレーム以外のスタック・フレ
ームに提示される(条件が非G.E.T.言語で発生し
たことを暗示する)か、あるいは省略時動作が「フィッ
クス及び再開」以外の何かである場合には、HLL条件
処理ルーチンはその条件を回復機能委任しなければなら
ない。具体的には、終了を指定する既存のG.E.T.
動作は回復機能委任に変更しなければならない。これら
の規則により、現意味論に従うことが可能になるが、
言語間の協力も可能になる。 −G.E.T.モデル用のHLL条件処理ルーチンが0
次スタック・フレームに対して呼び込まれる場合、「真
の」システム動作がこの時に実行されなければならな
い。 −すべてのHLL条件処理ルーチンには、反復して入る
ことができなければならず、したがって、ある条件の処
理中に条件が発生することが可能である。 −G.E.T.を用いる高水準言語は、条件を回復機能
委任することのできる機構を提供しなければならない。
ユーザが回復機能委任動作を指定できなければならな
い。例えば、C言語は条件を回復機能委任することを意
味するように_SIG_PERCを定義できるはずであ
る。FORTRANは、そのエラー任意選択テーブル用
の回復機能委任動作を定義できるはずである。 −各高水準言語は、論理的に0次スタック・フレームに
導入できる条件処理ルーチンを提供すべきである。これ
により、条件が適用業務内のどのスタック・フレームに
よっても処理されない時、第1ルーチンの高水準言語
が、 言語によって定義される省略時システム動作
を指令することが可能になる。 このことは、例え
ばPL/Iの最初のルーチンが与えられているとする
と、 PL/IがあらゆるPL/I条件に対してそ
のシステム動作を実施できる ことを暗示する。さ
らに、大域モデルを有する高水準言語が、0次スタッ
ク・フレームで条件に対する大域言語動作を実施で
きることも暗示する。
【0089】以下のリストに、高水準言語の実施者に役
立つように意図された、若干の情報及び提案を示す。 −ある条件は、高水準言語特有であると見なされる。例
えば、入出力関係の条件は、通常、高水準言語特有であ
る。その他の高水準言語特有の条件には、PL/Iにお
けるAREA、CONDITION、SIZE、Pascal
におけるrange errorsなどがある。 −条件は、高水準言語特有か、高水準言語及びプラット
フォームの全体にわたって「総称的」かのいずれかであ
る。 −イネーブル段階は、その出所、すなわち−ハードウェ
アかソフトウェアか(例えば、CEESGL)にかかわ
らず、すべての条件に対して実行される。 −イネーブル段階によって、高水準言語がPL/Iの前
置条件やCOBOLのON SIZEクローズなどの構
成体を実施することが可能となる。(COBOLは単に
これを検査するためのインライン・コードを生成し、O
N SIZEを尊重することができるだけで、条件を信
号で通知することはない)。 −高水準言語は、条件表現内に含まれる重大度を有利に
使用すべきである。例えば、PL/Iは、重大度1のP
L/I ENDPAGE条件を信号で通知することがで
きる。その条件に作用する処理ルーチンがなかった場合
には、条件マネージャは、その信号の後の次の順次命令
で再開される、未処理の重大度1に対する省略時動作を
とることになる。 −PL/Iは、ANYCONDITION条件をサポー
トできるはずである。これがないと、PL/Iは、第1
プロシージャがPL/Iでない適用業務でそのシステム
動作を実施することができなくなる。それは、条件処理
モデルが複数のスタック・フレームにわたって単一パス
を実行し、その条件を元の形で提示するからである。条
件がPL/IのERROR条件でない場合は、PL/I
のERRORオン・ユニットは駆動されない(PL/I
適用業務では、ある条件にシステム動作が適用される
時、PL/IのERROR条件が提起される)。ANY
CONDITIONを実施すると、PL/Iサブルーチ
ンが単一パス中にすべての条件をさばくことができるよ
うになる。
【0090】ユーザ条件処理ルーチンの規約: ユーザ
が作成した処理ルーチンも1組の規約及び制限を守らな
ければならない。 ・高水準言語のユーザが作成した条件処理ルーチンに
は、反復して入ることができなければならない。 ・ユーザが作成した条件処理ルーチンは、それが出会う
どんな条件にも渡される。したがって、それらは、すべ
ての未知の条件を回復機能委任すべきである。
【0091】上記で指摘したように、条件は、ハードウ
ェアまたはオペレーティング・システムによって検出さ
れた問題がない時、プログラムによって信号で通知され
ることがある。CCHは、信号を生成するための呼出し
可能CEESGLサービスを提供する。条件のソースが
ハードウェア、オペレーティング・システムまたはソフ
トウェア信号のいずれであろうと、条件はまず条件マネ
ージャに通信される。次いで、条件マネージャは、条件
処理の処理を続ける従属条件処理ルーチンに制御を渡す
ことができる。
【0092】従属条件処理ルーチンは、条件を処理する
ために条件マネージャによって呼び込むことができる。
従属条件処理ルーチンは、低水準エラー処理ルーチン、
イネーブル・ルーチン、条件処理ルーチンの3つの範疇
に分かれる。これらのルーチンは、CCH条件処理の異
なる段階で呼び出されるもので、以下で説明する。
【0093】低水準エラー処理ルーチン: 呼び込まれ
た場合、これらのルーチンが条件を処理する。条件マネ
ージャは、条件を引き起こしたプログラム中の(割込み
点の後の)次の順次命令から実行を再開することがで
き、また指定した場所から実行を再開することができ
る。これらのルーチンは低水準エラー処理ルーチンによ
って呼び出される。 ・エミュレート(プログラム・チェックのみ) システム・アーキテクチャによって特定機械での若干の
命令の使用可能性が制限されることがしばしばある。そ
うした機械用のCCH実施態様では、これらの制限され
た命令に対してエミュレーションを提供することを選ぶ
ことができる。そうした場合、エミュレーションは自動
的であり、割込みを引き起こしたプログラム中の(割込
み点の後の)次の順次命令から実行が再開される。例え
ば、条件マネージャは、拡張浮動小数点除算命令をS/
370でエミュレートする。 ・シャント(プログラム・チェック) シャント・ルーチンは、言語ライブラリ・ルーチン及び
デバッガ用に意図されている。シャント・ルーチンは、
通常、コードの高性能セグメントが、起こり得る例外か
らそれ自体を保護する必要のある時に使用される。この
ルーチンは、通常、ライブラリ・ルーチンまたはデバッ
ガが適用業務にサービスを提供している短い間に確立さ
れる。シャント・ルーチンが存在する場合、条件マネー
ジャは、シャント・ルーチンを呼び込んだ後、それ以上
処理を実行しない。
【0094】イネーブル・ルーチン: ある条件(ハー
ドウェアで検出されたエラー、オペレーティング・シス
テムによって検出されたエラー、またはソフトウェアに
よって信号で通知されたエラー)を条件として処理すべ
きかどうかを決定する。さらに、これらのルーチンは、
条件の低水準処理を提供することができる。イネーブル
・ルーチンは、イネーブル段階中に呼び出される。 ・言語特有イネーブル処理ルーチン 言語特有イネーブル処理ルーチンは、適用業務で使用さ
れている特定の言語に関連する。各スタック・フレーム
に1つの言語特有イネーブル処理ルーチンが論理的に関
連づけられている(スタック・フレームはDSA、すな
わち活動化連鎖上にあるレジスタ保管域である)。空の
言語特有イネーブル処理ルーチンも可能である。スタッ
ク・フレームに関連する言語特有イネーブル処理ルーチ
ンが、ある条件(割込みまたは例外)がCCH条件とし
て扱えるかどうかを決定する。この決定は、条件マネー
ジャのイネーブル段階中に行われる。換言すれば、これ
らのルーチンは、ハードウェア条件またはソフトウェア
条件がさらに何らかの処置を必要とするかどうかを決定
する。条件がさらに何の動作も必要としない場合は、条
件マネージャは、実行を再開する。すなわち、割込みが
発生した点に続く命令から実行が開始する。条件がさら
に動作を必要とする場合は、それが条件段階中に条件マ
ネージャによって(条件として)処理される。
【0095】条件処理ルーチン 条件処理ルーチンは、条件の原因を検討し、条件に対し
て必要な処置を実行する。条件マネージャは、条件段階
中に条件処理ルーチンを呼び込む。 ・デバッガ デバッガ・インターフェースは適用業務デバッグ製品へ
の特殊なインターフェースである。デバッガは条件を処
理し、あるいは条件処理が続行すべきことを指示するこ
とができる。条件管理中、デバッガは、条件がイネーブ
ルされると決定された後、及び条件が格上げされた場合
に、潜在的に呼び込まれる。 ・ユーザ条件処理ルーチン ユーザ条件処理ルーチンは、呼出し可能CEEHDLR
サービスで確立される(登録される)。CEEHDLR
サービスは、条件マネージャに、条件が発生する時、ユ
ーザが供給する条件処理ルーチンに制御を渡すよう動的
に要求する。ユーザ条件処理ルーチンは、それが確立さ
れた場所であるスタック・フレームに関連する。ユーザ
条件処理ルーチンの待ち行列を各スタック・フレームに
関連づけることができる。条件段階中、条件マネージャ
は、条件を処理するため、各スタック・フレームにおい
てユーザ条件処理ルーチンを(後入れ先出し順に)呼び
込む。確立されたユーザ条件処理ルーチンが、各スタッ
ク・フレームに関連する言語特有例外処理ルーチンの前
に呼び込まれる。ユーザ条件処理ルーチンは、CEEH
DLUサービスを用いて明示的に、あるいはユーザ条件
処理ルーチンを登録したルーチンがその呼出し側に戻る
とき明示的に確立解除(登録解除)される。各ユーザ条
件処理ルーチンは、何らかの許容可能な応答で条件マネ
ージャに戻ることができる。 ・言語特有例外処理ルーチン 一般に、言語は、その条件処理意味論を実施するため、
言語特有例外処理ルーチンを使用する。言語特有例外処
理ルーチンは、各スタック・フレームに関連づけること
ができる。言語特有例外処理ルーチンは、条件段階中に
呼び込まれる。条件段階中、条件マネージャは、条件を
処理するため、言語特有例外処理ルーチンを呼び込む。
条件マネージャは、処理カーソルが指すスタック・フレ
ームから始めてスタック・フレーム0に達するまで、次
々に言語特有例外処理ルーチンを呼び込む。各言語特有
例外処理ルーチンは、任意の定義された方式で応答する
ことができる。 ・出口ルーチン 言語は、呼込みから異常脱出する時、すなわち復帰プロ
セスを使用しない場合にとるべき処置を指定することが
できる。これは、出口ルーチンをスタック・フレームと
関連づけることによって行われる。スタック・フレーム
が、時期尚早に、例えば条件処理中に終了する場合、あ
るいは再開カーソルが関連するスタック・フレームを通
り越して移動する場合には、言語特有出口処理ルーチン
の呼込みは、即時には行われず、後続の処理中に行われ
る。
【0096】上記のリストから、条件マネージャの条件
処理方式の次のような特徴が認められる。 ・ユーザは、ユーザ条件処理ルーチンを用いて、それ自
身の条件処理を実施する。 ・言語は、次のルーチンを用いて、それ自体の条件処理
を実施する。 −シャント・ルーチン −言語特有イネーブル処理ルーチン −言語特有例外処理ルーチン ・イネーブル・ルーチンは、従属条件処理ルーチンの単
独の範疇として分離されている。これによってシステム
間の条件処理の一貫性が保証される。 ・ユーザ条件処理ルーチンの範疇が従属条件処理ルーチ
ンに追加されている。これによって、すべての言語ユー
ザが条件処理にアクセスすることができ、既存の条件モ
デルをもつ言語のユーザがCCH条件モデルの全能力及
び機能にアクセスすることが可能になる。 ・出口ルーチンの範疇が追加され、出口処理が独立した
活動になっている。この出口処理を条件処理の残りの部
分から分離することは、再開カーソルの概念とあいまっ
て、CCH条件処理モデルを以前のモデルから区別し、
これに現在の言語要件を満足するための力を与えなが
ら、同時により強力かつより頑丈な条件処理機構の実施
を可能にするものである。
【0097】条件に対する応答:従属条件処理ルーチン
は、条件に対して、resume(再開)、perco
late(回復機能委任)、またはpromote(格
上げ)で応答する。従属条件処理ルーチンは、要求され
た動作を実際に実行する条件マネージャに戻らなければ
ならない。再開カーソルは、まずCEEMRCR呼出し
可能サービスを使用することによって修正できる。条件
の回復機能委任は、従属条件処理ルーチンが条件を処理
するのを拒否する場合に起こり、呼出し側呼込みにその
条件を処理する機会を与える。このプロセスは、条件が
ある従属条件処理ルーチンによって最終的に処理される
まで、スレッド内で複数の呼込みによって繰り返すこと
ができる。従属条件処理ルーチンがその条件を異なる意
味をもつ新しい条件に変換する時、その条件は格上げさ
れる。従属条件処理ルーチンは、その従属条件処理ルー
チンが元の条件の原因を知っていることや、知っていな
いことを含めて、様々の原因で条件を格上げすることが
できる。後者のケースの例は、PL/Iがスタック・フ
レーム0における未処理条件をERRORに格上げし、
処理カーソルを再開カーソルにリセットする場合であ
る。また、通常なら異なるソースから来るはずの条件を
シミュレートするために、条件を格上げすることもでき
る。
【0098】条件が格上げされたあと、条件マネージャ
は、格上げされた条件を処理するために従属条件処理ル
ーチンを呼び込むことにより、処理を続行する。呼込み
の順序については、以下に述べる。さらに、条件マネー
ジャは元の条件に関する情報を保持する。
【0099】条件管理段階の概要: ある条件が発生す
る時、条件マネージャはその条件を処理するため、個々
の段階に入る。段階とは、従属条件処理ルーチン呼込み
のシーケンスである。特定のタイプのルーチンが各段階
中に呼び込まれる。ルーチンのタイプによっては、特定
の段階中に呼び込まれないことがある。
【0100】条件処理の諸段階について以下で論じる。 ・低水準エラー処理段階(プログラム・チェック及び異
常終了)。低水準エラー処理段階中、シャント・ルーチ
ンが確立されていた場合、条件マネージャは指示された
アドレスから実行を再開する。再開が行われると、この
条件での条件処理は完了し、残りの段階は行われない。 ・イネーブル段階 イネーブル段階中、条件マネージャは言語特有イネーブ
ル処理ルーチンを呼び込んで条件に作用すべきか、それ
ともそれ以上の動作は必要でないかを決定する。言語特
有イネーブル処理ルーチンは、言語特有の意味論を実施
する責任をもつ。この段階中に、ハードウェアと言語の
衝突が解決される。条件マネージャは、最も最近に活動
化されたDSAに、または構成要素が識別可能であるス
タック・フレームに関連する言語特有イネーブル処理ル
ーチンを呼び込む。イネーブル段階は、呼び込まれた言
語特有イネーブル処理ルーチンが戻る時に終了する。条
件がイネーブルされない場合は、条件処理の他の段階は
省略される。 ・デバッガ段階 実行時オプションの制御下で条件がイネーブルされると
決定された時、デバッガにその条件が通知される。 ・条件段階 条件段階中、ユーザ条件処理ルーチン及び言語特有例外
処理ルーチンが、その条件の原因を調べて、条件に対す
る必要な処置を実行するために呼び出される。より具体
的には、条件マネージャは、処理カーソルが指すスタッ
ク・フレームから始めて、スタック・フレーム0まで、
あるいはユーザ条件処理ルーチンまたは言語特有例外処
理ルーチンが条件を処理する時まで、スタックを(1つ
ずつ)横断する。各スタッフ・フレームで、条件マネー
ジャは、ユーザ条件処理ルーチンを(後入れ先出し順
で)呼び込み、それに続いて、そのスタック・フレーム
に関連する言語特有例外処理ルーチンを呼び込む。ユー
ザ条件処理ルーチン及び言語特有例外処理ルーチンは、
「条件に対する応答」として記載されているいずれかの
方法で条件に応答する。
【0101】条件マネージャ段階は、次の特性を有す
る。 ・条件マネージャは、割込み(ハードウェア・エラ
ー)、例外(ソフトウェア・エラー)、または信号通知
済み条件に応答して、これらの段階に入ることができ
る。 ・割込み(ハードウェア・エラー)及び例外(ソフトウ
ェア・エラー)の場合、条件マネージャは、イネーブル
段階の前に低水準エラー処理段階に入る。 ・割込み(ハードウェア・エラー)、例外(ソフトウェ
ア・エラー)及び条件の場合、条件マネージャは、条件
段階に入る前にイネーブル段階に入る。 ・条件が低水準エラー処理段階中に低水準エラー処理ル
ーチンによって処理される場合、条件マネージャは後続
の段階に入らない。 ・言語特有イネーブル処理ルーチンが、条件段階中にあ
る条件を条件として扱うべきでないと決定する場合、条
件マネージャは条件段階に入らない。
【0102】条件処理中に複数の条件が発生する時、あ
るいはそれが信号で通知される時、現条件の処理は保留
され、CEECIB中で維持されている条件処理の「状
態」に基づいて次の処置がとられる。入れ子式条件が許
容される場合は、条件マネージャは最近の条件の処理を
開始する。最近の条件に関する条件処理が終了する時、
再開カーソルが指す命令から実行が開始する。再開カー
ソルはその初期設定から移動することができる。
【0103】いずれの共通言語においても言語構文の変
更を強制することなく、本発明を実施することが可能で
あるが、好ましい実施例では、便宜上、COBOLコン
パイラの機能に新しい構成体が追加された。この変更
は、"PROCEDURE−POINTER"を次のよう
に宣言できるようにすることであった。 pgmptr usage is PROCEDURE−POINTER ユーザ条件処理ルーチンを登録するのに使用する時は、
以前に宣言された変数"pgmptr"が次のように使用
される。 Set pgmptr to entry "SIMHDLR". Call "CEEHDLR" using pgmptr token fbcod
e.
【0104】表1に、ユーザ条件処理ルーチンを登録
し、試験し、登録解除する、COBOL試験プログラム
(EXCOND)のサンプルを示す。表2に、COBO
Lで書かれたユーザ条件処理ルーチン(SIMHDL
R)のサンプルを示す。可変な現条件では、最初の8バ
イトが、IBMのシステム/370プログラム割込みコ
ードOC1〜OCF用の条件トークンとして宣言され
る。表3に、条件を引き起こすCOBOLルーチン(D
IVZERO)のサンプルを示す。プログラムEXCO
NDは、SIMHDLRを導入し、DIVZEROを呼
び出すことによってこれを試験する。 [表1] CBL C,RENT,Q,LIST,NODYNAM,TEST(SYM) ** ID DIVISION *** Identification Division. Program-id. EXCOND. Author. LEE. Installation. IBM - Santa Teresa Laboratory. ** ENVIRONMENT DEVISION *** Environment Division. Configuration Section. Input-Output Section. File-control. ** DATA DIVISION *** Data Division. File Section. Working-storage Section. 01 fbcode. 02 fb-severity pic 9(4) Binary. 02 fb-detail pic X(10). 77 divisor pic S9(9) Comp. ** ** Declares for condition handling ** 77 token pic X(4). 77 pgmptr usage is PROCEDURE-POINTER. 01 CEE000 PIC X(12). 88 fb-ok value x"000000000000000000000000". Linkage Section. ** PROC DIVISION *** Procedure Division. PARA-CND01A. ** ** Register a user condition handler. ** Set pgmptr to entry "SIMHDLR". Move ZERO to token. Call "CEEHDLR" using pgmptr token fbcode. Display "EXCOND: Registered SIMHDLR0." Upon console. ** ** Call DIVZERO to force a zero divide and drive SIMHDLR ** Move 00 to divisor. Call "DIVZERO" using divisor. Display "EXCOND: Resumption after DIVZERO." Upon console. ** Unregister the user condition handler. Call "CEEHDLU" using pgmptr fbcode. Display "EXCOND: Unregistered SIMHDLR." Upon console. Goback. End program EXCOND. [表2] Identification division. Program-id. SIMHDLR. Environment division. Data division. Working-storage section. 1 Misc-Variables. 02 move-type-0 pic s9(9) binary value zero. 01 Feedback. 02 Fb-severity pic 9(4) binary. 02 Fb-detail pic X(10). Linkage section. 1 Current-condition. 2 filler pic x(8). 88 CEE341 value x"00030C8159C3C5C5". 88 CEE342 value x"00030C8259C3C5C5". 88 CEE343 value x"00030C8359C3C5C5". 88 CEE344 value x"00030C8459C3C5C5". 88 CEE345 value x"00030C8559C3C5C5". 88 CEE346 value x"00030C8659C3C5C5". 88 CEE347 value x"00030C8759C3C5C5". 88 CEE348 value x"00030C8859C3C5C5". 88 CEE349 value x"00030C8959C3C5C5". 88 CEE34A value x"00030C8A59C3C5C5". 88 CEE34B value x"00030C8B59C3C5C5". 88 CEE34C value x"00030C8C59C3C5C5". 88 CEE34D value x"00030C8D59C3C5C5". 88 CEE34E value x"00030C8E59C3C5C5". 88 CEE34F value x"00030C8F59C3C5C5". 2 filler pic x(4). 1 Token pic x(4). 1 Result-code pic s9(9) binary. 88 resume value +10. 88 percolate value +20. 88 perc-sf value +21. 88 promote value +30. 88 promote-sf value +31. 1 New-condition pic x(12). Procedure division using current-condition token result-code new-condition. Display ">>> SIMHDLR: Entered User Handler " upon console. If CEE349 then Call "CEEMRCR" using move-type-0 feedback Set resume to true Display ">>> SIMHDLR: Resuming execution" upon console Else Set percolate to true Display ">>> SIMHDLR: Percolating it" upon console End-if. Goback. End program SIMHDLR. [表3] CBL C,RENT,Q,LIST,NODYNAM,TEST(SYM) *********************************************************** ** ID DIVISION *** *********************************************************** Identification division. Program-id. DIVZERO. Environment Division. *********************************************************** ** DATA DIVISION *** *********************************************************** Data division. Working-storage section. Linkage section. 1 Arg pic S9(9) Comp. *********************************************************** ** PROC DIVISION *** *********************************************************** Procedure division using Arg. Display "DIVZERO: Starting." Compute Arg = 1 / Arg. Display "DIVZERO: Returning to its caller." Goback. End program DIVZERO.
【0105】コンパイラ作成者インターフェース(CW
I): CCHによって提供されるこのインターフェー
スは、C言語サブルーチン定義構文を用いて、次のよう
に記載される。
【0106】言語特有処理ルーチンとの間のインターフ
ェース void condition_handler(reason,ceecib,results,new_c
ondition); INT4 *reason, void *ceecib, INT4 *result; FEEDBACK *new_condition; ただし、 reason(入力) 言語特有処理ルーチンが呼び出された理由。この値は、
参照によって渡される。これは、メンバ事象処理ルーチ
ン用の事象コードである。有効な値は次の通りである。 1.CEECIBが表す条件を(スタック・フレーム0
用でなく)処理する。 2.このスタック・フレームに対するイネーブルを実行
する。 3.この条件を、言語省略時指定に従って処理する(こ
れはスタック・フレーム0用のものである) CEECIB(入力) 条件処理ルーチンが呼び出される対象となるCEECI
B。この値は、参照によって渡される。conditi
on_token、及びその条件が発生したプロシージ
ャ用の機械環境がCEECIBの一部である。 results(出力) このフィールドは、言語特有処理ルーチンが条件マネー
ジャに条件を処理した結果としてとることを望む処置を
示す命令を含んでいる。このフィールドは参照によって
渡される。有効な応答は次の通りである。 resume 10 再開カーソルの所から再開する(条件は処理済
み)。 percolate 20 次の条件処理ルーチンに回復機能委任する。 21 次のスタック・フレーム用の最初のユーザ条件処
理ルーチンに回復機能委任する(これは、このスタック
・フレーム用の言語特有例外処理ルーチンならびにこの
スタック・フレームにおける待ち行列内の残りのユーザ
条件処理ルーチンをスキップすることができる)。 promote 30 次の条件処理ルーチンに格上げする。 31 次のスタック・フレームに格上げする(これは、
このスタック・フレーム用言語特有例外処理ルーチンな
らびにスタック・フレームにおける待ち行列内の残りの
ユーザ条件処理ルーチンをスキップすることができ
る)。 32 再開カーソル位置で指示されるスタック・フレー
ム用の条件処理を格上げし、再始動する。 33 条件処理を格上げして再駆動し、最初のPL/I
スタック・フレームはPL/1が所有するスタック・フ
レームだけを再駆動する(これは、PL/I専用に設け
られており、したがってPL/I言語エラー処理意味論
が尊重される)。 enablement 40 条件を無視する。割込みのあった所からスレッド
が再開される。 41 条件処理のため条件をイネーブルする。 42 条件をイネーブルし、条件を(new_cond
itionパラメータにより)変換する。 percolate enablement 50 イネーブルを呼出し側スタック・フレームに回復
機能委任する。 51 条件を(new_conditionパラメータ
により)変換し、イネーブルを呼出し側スタック・フレ
ームに回復機能委任する。 new_condition(出力) 格上げされた条件を表す新しい条件トークン。このフィ
ールドは、回復機能委任を指定する30、31、32、
33のresult値にのみ使用される。
【0107】使用上の注意 1.新しい条件トークンを返さずに、条件を格上げする
のは無効である。元の条件がnew_conditio
n中で返される場合、条件マネージャは、20の結果が
指定されているかのように動作する。 2.条件が格上げされる前に、メッセージ挿入ブロック
(MIB)を必要に応じて、格上げされた条件用の新し
い挿入物で充填しなければならない。 3.言語特有処理ルーチンは、スタック・フレームによ
って自動的に確立される。条件マネージャが所与のスタ
ック・フレームに関連する言語を決定し、次いでイネー
ブル、条件処理またはスタック・フレーム0の条件処理
のための適当な事象コードで、事象処理ルーチンを呼び
込む。 4.スタック・フレームが復帰、ブロックからのGOT
O、または再開カーソルの移動によって、スタックから
ポップオフされる時、言語特有処理ルーチンは、自動的
に確立解除される。 5.再開が要求される場合、目標スタック・フレームに
制御を渡す直前に、目標スタック・フレームを所有する
メンバが呼び込まれる。
【0108】再開のためのメンバへのインターフェース void resume_in_dsa(event_code,target_dsa); INT4 *event-code; void *target-dsa; ただし、 event_code(入力) 事象処理ルーチンに対するこの呼出しを、条件処理ルー
チンからの再開がtarget_dsa内で行われると
識別する、事象コード10 target_dsa(入力) 再開の目標であるDSA
【0109】使用上の注意 1.条件マネージャは、再開の目標であるスタック・フ
レームを所有するメンバを決定する。それが決定される
と、条件マネージャは、スタック・フレームへの再開操
作を実行する直前に、特定のメンバの事象処理ルーチン
を呼び込む。 2.再開がtarget_dsa内で行えるようにする
のに必要な処置を実行することはメンバの責任である。
【0110】CEEDHDL:CEEDHDLは、条件
が未処理のままである場合に、スタック・フレーム0で
呼び込まれる条件処理ルーチンを登録するのに使用され
る。このサービスは、PL/Iが使用するために提供さ
れており、したがってPL/Iは未処理条件に関してス
タック・フレーム0でその意味論動作を適用することが
できる。登録はエンクレーブ全体に影響し、CEEUD
HDを介して明示的に除去されるまで有効なままとな
る。 void CEEDHDL(routine,[token],[fc]); ENTRY *routine; INT4 *token; FEED_BACK *fc; ただし、 routine(入力) スタック・フレーム0で呼び込まれるルーチン用のエン
トリ変数。このルーチンはメンバ事象処理ルーチンであ
る。 token(入力/任意選択) 呼び込まれる時にルーチンに渡される任意選択の32ビ
ットの情報。これは、スタック・フレーム0処理事象用
の5番目のパラメータとしてメンバ事象処理ルーチンに
渡される。 fc(出力/任意選択) 参照によって渡される任意選択の条件トークン。呼出し
側への復帰は、条件が検出される時だけ行われる。fc
中で戻される条件には、次のものがある。 CEE000 Severity=0 Msg_No=0000 Message=成功 CEE080 Severity=2 Msg_No=0256 Message=ルーチンが既に登録済み。何の処置もとらな
い。
【0111】使用上の注意 1.初期設定中に、PL/Iは、そのエラー処理意味論
を実施するため、そのメンバ事象処理ルーチンをCEE
DHDLによって登録すると予想される。 2.PL/Iだけがこのサービスを呼び込むと予想され
る。
【0112】CEEUDHD:CEEUDHDは、CE
EDHDLによって登録された条件処理ルーチンを登録
解除するのに使用される。 void CEEUDHD(routine,[fc]); ENTRY *routine; FEED_BACK *fc; ただし、 routine(入力) 登録解除すべきルーチン用の入口変数。 fc(出力/任意選択) 参照によって渡される任意選択の条件トークン。呼出し
側への復帰は、条件が検出される時だけ行われる。fc
中で戻される条件には、次のものがある。 CEE000 Severity=0 Msg_No=0000 Message=成功 CEE07S Severity=2 Msg_No=0252 Message=ルーチンがスタック・フレーム0の処理ルーチ
ンとして登録されていない。
【0113】使用上の注意 1.初期設定中に、PL/Iは、そのエラー処理意味論
を実施するため、そのメンバ事象処理ルーチンをCEE
DHDLによって登録すると予想される。
【0114】適用業務作成者インターフェース(AW
I): 適用業務作成者インターフェースが下記にリス
トされており、次の節でより詳しく論じる。 ・CEEHDLR ユーザ条件処理ルーチンを登録す
る。 ・CEEHDLU ユーザ条件処理ルーチンを登録解除
する。 ・CEEMRCR 再開カーソルをより古いスタック・
フレーム中の復帰点に移動する。 ・CEESGL 条件を提起する。 ・ユーザが作成した条件処理ルーチン。
【0115】CEEHDLR:呼出し可能なサービスC
EEHDLRは、現スタック・フレーム用のユーザ条件
処理ルーチンを登録するという1つの機能をもつ。
【0116】これらのルーチンを収容するため、各スタ
ック・フレームごとに待ち行列が設けられている。待ち
行列が空のこともある。条件マネージャは待ち行列要素
に後入れ先出し順でアクセスする。
【0117】登録されているユーザ条件処理ルーチン
(CEEHDLRによって作成され、CEEHDLUに
よって登録解除されていない)がある場合、関連するス
タック・フレームがスタックから除去される時、CCH
によって自動的に登録解除される。ユーザが登録されて
いるユーザ条件処理ルーチンを除去することを覚えてい
る必要はない。 void CEEHDLR(routine,token,[fc]); ENTRY *routine, INT4 *token, FEED_BACK *fc; ただし、 routine(入力) 条件を処理するために「呼び出す」べきルーチン用の、
参照によって渡される入口変数または定数。 token(入力) 参照によって渡され、呼び出されるたびにユーザ条件処
理ルーチンに渡したい32ビットの情報。これは、ポイ
ンタ、またはユーザが望む他のどんな32ビットの項目
でもよい。 fc(出力/任意選択) 参照によって渡される任意選択条件トークン。fc中で
戻される条件には、次のものがある。 CEE000 Severity=0 Msg_No=何でもよい Message=サービスが首尾よく完了。 CEE080 Severity=2 Msg_No=0256 Message=指定されたルーチンがこのスタック・フレーム
用に既に登録 済み。 CEE081 Severity=2 Msg_No=0257 Message=ルーチンが無効なENTRY変数を含んでいる。
【0118】使用上の注意 1.CEEHDLRは、その関連するルーチンがCCH
スタイルのPPAをもち、PPA1 CEEフラグ中の
ビット6(PPA1中のオフセット2)が^1^Bに設定
された、スタック・フレーム上の条件処理ルーチンを確
立しない。このフラグは、条件管理のすべての段階が、
関連するDSAをスキップすることを示す。これによ
り、ユーザのコードとCEEHDLRルーチンの間にラ
イブラリ・ルーチンが介在することが可能になる。この
状況は、COBOLルーチンがCALL変数(または動
的呼出し)をCEEHDLRに出す時に発生した。CO
BOLライブラリ・ルーチンは、CALL変数を管理す
るため、ユーザのコードとCEEHDLRの間に置かれ
る。この特定のCOBOLライブラリ・ルーチンは、
「条件管理動作」用のPPAフラグを^1^Bに設定す
る。
【0119】CEEHDLU:呼出し可能なサービスC
EEHDLUは、現スタック・フレーム用のユーザ条件
処理ルーチンを登録解除する、1つの機能をもつ。
【0120】登録済みのユーザ条件処理ルーチン(CE
EHDLRによって作成され、CEEHDLUによって
登録解除されていない)がある場合、関連するスタック
・フレームがスタックから除去される時、自動的にCC
Hによって登録解除される。ユーザが登録済みユーザ条
件処理ルーチンを除去することを覚えている必要はな
い。 void CEEHDLU(routine,[fc]); ENTRY *entry_variable, FEED_BACK *fc; ただし、 routine(入力) ユーザ条件処理ルーチンとして登録解除すべきルーチン
用の、参照によって渡される入口変数または定数。この
ルーチンは、予めCEEHDLRによって登録されてい
なければならない。 fc(出力/任意選択) 参照によって渡される条件トークン。fc中で戻される
条件には、次のものがある。 CEE000 Severity=0 Msg_No=n/a Message=サービスが首尾よく完了。 CEE07S Severity=2 Msg_No=0252 Message=要求されたユーザ条件処理ルーチンが見つけら
れない。
【0121】CEEMRCR:呼び出し可能サービスC
EEMRCRは、再開カーソルを処理カーソルの現位置
に対して相対的に移動する。サポートされる動作には、
次のものがある。 1.再開カーソルを、それに代わって条件処理ルーチン
が実行中であるルーチンの呼出し復帰点に移動する。 2.再開カーソルを、それに代わって条件処理ルーチン
が実行中であるルーチンの呼出し側に移動する。
【0122】最初に、再開カーソルが、その条件を引き
起こした機械命令の後に置かれる。各スタック・フレー
ムが渡されるのに応じて再開カーソルが移動する時、関
連する出口ルーチンが呼び込まれる。この移動によっ
て、関連するユーザ条件処理ルーチンも「取り消さ」れ
る。移動の方向は、常に、より古いスタック・フレーム
に向かい、決してより新しいスタック・フレームに向か
わない。条件処理ルーチンが条件マネージャに戻ってか
ら初めてこの動作が行われる。CEEMRCRへの複数
の呼出しは、それらの呼出しの総合的結果をもたらす。
すなわち、2回の呼出しで再開カーソルが異なる場所に
移動する場合、最も限定的な(すなわち、スタック・フ
レーム0へ向かう)呼出しが用いられる。 void CEEMRCR(type_of_move,[fc]); INT4 *type_of_move; FEED_BACK *fc; ただし、 type_of_move(入力) 再開カーソルの移動目標を示す。 ・0−再開カーソルを処理カーソルのスタック・フレー
ムの呼出し復帰点に移動する。すなわち、CEEMRC
Rを呼び込む処理ルーチンを登録したスタック・フレー
ム。 ・1−再開カーソルを、処理カーソルのスタック・フレ
ームを進めるスタック・フレームの呼出し復帰点に移動
する。処理カーソルは、新しい再開カーソルの位置が指
すスタック・フレームの最初の条件処理ルーチンに移動
する。 fc(出力/任意選択) 参照によって渡される条件トークン。fc中で渡される
条件には、次のものがある。 CEE000 Severity=0 Msg_No=何でもよい Message=サービスが首尾よく完了。 CEE07U Severity=2 Msg_No=0254 Message=無効なtype_of_moveが発見された。 CEE080 Severity=1 Msg_No=0256 Message=処理カーソルと再開カーソルが同じスタック・
フレームを指す。type_of_move=0の場合、何の処置もと
られない。 CEE081 Severity=1 Msg_No=0257 Message=「主」ルーチンからの無効なタイプの移動。
【0123】使用上の注意 1.再開が要求される時、そのコードが再開ポインタの
目標となっているメンバの事象処理ルーチンが呼び込ま
れる。これによって、メンバが、再開が行える環境を確
立することが可能になる。
【0124】CEESGL: この呼出し可能なサービ
スは、条件を提起しまたは信号で通知し、条件のこのイ
ンスタンス用の修飾データを提供し、任意選択で、この
条件用のインスタンス特有情報を作成する。イネーブル
された各信号通知済み条件(重大度2以上)がエラー・
カウントを1ずつ増分する。エラー・カウントがエラー
・カウント限界(ERRCOUNT実行時オプションに
よって決定される)に等しくなるか、またはそれを越え
る場合、条件マネージャは、Termination_
Imminentを信号で通知することなく、エンクレ
ーブを終了させる。格上げされた条件は、エラー・カウ
ントを増分しない。
【0125】重大度0及び1の条件は、それが処理され
ない場合には無視される条件である、「安全な」条件と
見なされ、条件が提起されたとき、フィードバック・ト
ークンは渡されなかった。 void CEESGL (cond_rep,[q_data_token],[fc]); FEED_BACK *cond_rep, INT4 *q_data_token, FEED_BACK *fc; ただし、 cond_rep(入力) 参照によって渡される条件表現。 q_data_token(入力/任意選択) 条件の所与のインスタンスに関連する修飾データにアク
セスする際に使用するため、インスタンス特有情報に入
れられる32ビットのデータ・オブジェクト。 fc(出力/任意選択) 参照によって渡される、CEESGLの成否を示す任意
選択の条件トークン。fc中で戻される条件には、次の
ものがある。 CEE000 Severity=0 Msg_No=何でもよい Message=サービスが首尾よく完了。 CEE069 Severity=0 Msg_No=0201 Message=信号通知済み条件が処理されなかった。 CEE0EE Severity=3 Msg_No=0462 Message=入力条件トークンに関連するISIが見つから
なかった。 CEE0EB Severity=3 Msg_No=0459 Message=新しいISIを生成するのに使用できる記憶域
が不十分。 CEE0EC Severity=3 Msg_No=0460 Message=ISIリストが満杯で、新しいエントリが作成
できない。 CEE0CE Severity=1 Msg_No=0398 Message=新しい入力で再開。 CEE0CF Severity=1 Msg_No=0399 Message=新しい出力で再開。
【0126】使用上の注意 1.CEESGLサービスの呼出し側は、このサービス
を呼び出す前に、ISIを(提起されている条件に関連
するメッセージをフォーマットするのに必要な)何らか
の挿入データで充填しなければならない。フィードバッ
ク・コードを呼出し可能なサービスから受け取る時、M
IBは既に充填済みである。 2.イネーブルは、このサービスで提起された条件に対
して決定される。 3.q_data_tokenはCCHから照会されな
い。これは、4バイト内に含めることのできるどんな値
でもよい。 4.条件がCEESGLに対する呼出しの際にq_da
ta_tokenの値を渡して信号で通知され、q_d
ata_token値が既に関連するISI中に存在す
る場合には、ISI中のq_data_tokenが重
ね書きされる。 5.条件CEEOCE及びCEEOCFは、q_dat
a_tokenが指すデータと共に、その条件を経験し
たルーチンによって、フィックスアップまたは再開ある
いはその両方を行うために使用される。
【0127】ユーザ作成条件処理ルーチン: void condition_handler (C_CTOK,token,result_
code,new_condition); FEEDBACK *C_CTOK; INT4 *token; INT4 *results; FEED_BACK *new_condition; ただし、 C_CTOK(入力) 処理されている現条件を定義する。 token(入力) この条件処理ルーチンを登録したCEEHDLRへの呼
出しと共に条件マネージャに渡されたトークン。 result_code(出力) このフィールドは、ユーザ条件処理ルーチンが条件マネ
ージャにその条件を処理した結果としてとることを望ん
でいる処置を指示する命令を含んでいる。このフィール
ドは参照によって渡される。有効な応答は、次の通りで
ある。 resume 10 再開カーソルの所から再開する(条件が処理済
み)。 percolate 20 次の条件処理ルーチンに回復機能委任する。 21 次のスタック・フレーム用の最初のユーザ条件処
理ルーチンに回復機能委任する(これは、このスタック
・フレーム用の言語特有例外処理ルーチンならびにこの
スタック・フレームにおける待ち行列内の残りのユーザ
条件処理ルーチンをスキップできる)。 promote 30 次の条件処理ルーチンに格上げする。 31 次のスタック・フレームに格上げする(これは、
このスタック・フレーム用の言語特有例外処理ルーチン
ならびにこのスタック・フレームにおける待ち行列内の
残りのユーザ条件処理ルーチンをスキップできる)。 32 条件処理を格上げして、処理カーソルのスタック
・フレームの最初の条件処理ルーチンから再始動する。 fix−up and resume 60 フィックスアップして、再開する。60のres
ult_codeが使用される時、ユーザ条件処理ルー
チンから条件マネージャに戻されたnew_condi
tionフィールドの内容が、フィードバック・コード
としてCEESGLの呼出し側に戻される。CEESG
Lの呼出し側がフィードバック・コードなしに作られる
場合には、フィックスアップが定義されていないルーチ
ン上でフィックスアップを試みるために、条件が提起さ
れる。CEESGLの説明中のそれぞれ条件CEEOC
E及びCEEOCFの、 「新しい入力で再開」
及び「新しい出力で再開」説明を参照のこと。 注:60のresult_codeは、再開カーソルが
移動していない場合にのみ、有効である。 new_condition(出力) 格上げされた条件を表す新しい条件トークン。このフィ
ールドは、promoteを示す30、31、32なら
びにfix−up and resumeを示す60の
結果値用にのみ使用される。
【0128】使用上の注意 1.新しい条件トークンを戻さずに条件を格上げするこ
とは無効である。元の条件がnew_conditio
n中で戻される場合、条件マネージャは次の条件を信号
で通知する。 新=旧条件の条件を格上げする試み Symbolic name=CEE086 Severity=3 Msgno=0262 2.条件を格上げする前に、必要に応じて、ISIを格
上げされた条件用の新しい挿入物で充填しなければなら
ない。 3.ユーザ条件処理ルーチンは、CEEHDLRによっ
て登録される。 4.ユーザ条件処理ルーチンは明示的にCEEHDLU
によって登録解除される。 5.復帰、ブロックからのGOTO、または再開カーソ
ルの移動によって、スタック・フレームがスタックから
ポップオフされる時、ユーザ条件処理ルーチンは自動的
に登録解除される。 6.resumeが要求される場合、制御を目標スタッ
ク・フレームに渡す直前に、目標スタック・フレームを
所有するメンバが呼び込まれる。
【0129】条件マネージャに関する様々な話題 CEE3CNC−制御入れ子式条件(AWI): CE
E3NCサービスの機能は、条件処理ルーチンに、CE
EDLRによって登録されたユーザ特有条件処理ルーチ
ン内で入れ子式条件を可能とすることを許容または禁止
することである。条件処理ルーチンに最初に入る時、入
れ子式条件は許容されない。許容されていない時に入れ
子式条件が発生すると、適用業務がABEND408
7、理由コード2で終了される。ただし、ユーザ内で、
別のユーザ処理ルーチンが(CEEHDLRへの呼出し
によって)登録されている場合には、別のユーザ処理ル
ーチンが登録されたままになっているか、あるいは明示
的にCEE3CNCによって禁止されている限り、ユー
ザ処理ルーチン内で入れ子式条件が許容される。
【0130】このサービスのフォーマットは、次の通り
である。 void CEE3CNC(allow,[fc]) INT4 *allow; FEED_BACK *fc; ただし、 allow(入力) allowが非0の場合、入れ子式条件が許容される。
allowが0の場合、 入れ子条件は許容されない。 fc(出力/任意選択) 動作の成否を示すフィードバック・コード。次のメッセ
ージ識別子及び関連する重大度を、このサービスによっ
てィードバック・コードfc中で戻すことができる。 Success(成功) Symbolic name=CEE000 Severity=0(fc=0) Msgno=0000 No active condition(活動状態の
条件なし) Symbolic name=CEE35S Severity=1 Msgno=3260
【0131】CCHからの離脱とCCHへの復帰: M
VSの下で実行している間に、システム・エラー処理ト
ラップが確立された(ESTAE)要求ブロック(R
B)とは異なる要求ブロックの下で実行中に、例外が発
生することがある。これは、DF/SORT出口が呼び
込まれる時、あるいは入出力サブシステムで実行してい
る時に発生し得る。CCHによってシステム出口から再
開が要求される時、このような場合にMVSによって定
義される挙動は、ESTATE要求を出した要求ブロッ
クのレベルまでの要求ブロックを除去することである。
とりわけ、この潜在的な要求ブロックの不一致に対処す
るため、CCHに「CCHからの実行」及び「CCHへ
の復帰」を指示する1組のAWIサービスが提供され
る。そのサービスは、CEE3XIT及びCEE3RT
Nである。 void CEE3XIT; void CEE3RIT;
【0132】使用上の注意 1.CEE3XITは、非CCHコードへの呼出しが行
われていることをCCHに示す。 2.CEE3RTNは、非CCHルーチンがCCH実行
に戻りつつあることを示す。 3.CCHからの実行中に条件がシステムによって提起
される時、CCHは論理的に実行スレッドの状態をCE
E3XITが出された点にリセットする。 4.これらのサービスの所期の用途は、一貫した方式で
挙動しないこともあるサービスへの呼出しを、一括して
扱うことにある。例えば、このサービスは、別の要求ブ
ロック・レベルを生成するLINK SVCを発行する
ことができ、あるいはセーブ域がDCB出口の場合のよ
うに)呼出し側に戻して連鎖されない。 5.高水準言語は、(例えば)入出力サービス及びDF
/SORTを呼び込む前に、このサービスを呼び込むこ
とが期待される。 6.CEE3XITへの複数の呼出しはスタックされな
い。最後に発行された呼出しが現呼出しと見なされる。
【0133】CEERTX:CEERTXサービスによ
って提供される機能は、それが登録されるスタック・フ
レームが異常終了または崩壊する時に、実行すべきユー
ザ定義ルーチンを登録することである。 void CEERTX(routine,token,[fc]) CEE_ENTRY *routine; INT4 *token; FEED_BACK *fc; ただし、 routine(入力) このスタック・フレームが異常終了する場合に呼び出さ
れるルーチン用の入口変数及び定数。 token(入力) それが呼び出されるたびに、ユーザ出口に渡される32
ビットの情報。これは、 (そのポインタが32ビット
の量であるプラットフォーム上の)ポインタまた はユ
ーザが望む他のどんな32ビット項目でもよい。 fc(出力/任意) 次の条件を戻すことのできる任意選択の条件トークンで
ある。 Success(成功) Symbolic name=CEE000 Severity=0(fc=0) Msgno=0000 invalid routine reference
(無効ルーチン参照) Symbolic name=CEE081 Severity=3 Msgno=0257 CEERTXサービスは、ルーチンの開始時に適切なp
rolog定数を見つけることができなかった。
【0134】使用上の注意 1.複数ユーザ・スタック・フレーム終了ルーチンが、
各スタック・フレームごとに登録できる。 2.ユーザ・スタック・フレーム終了出口ルーチンの実
行は、後入れ先出し順である。
【0135】CEEUTX:CEEUTXによって提供
される機能は、それが登録されているスタック・フレー
ムが異常終了した時に実行される以前に登録されていた
ユーザ定義ルーチンを登録解除することである。CEE
UTXサービスは、CEEUTXサービスがそこから呼
び出されるスタック・フレームに対して登録されている
ユーザ・スタック・フレーム終了出口に作用する。 void CEEUTX(routine,[fc]) CEE_ENTRY *routine; FEED_BACK *fc; ただし、 routine(入力) このスタック・フレームに対して登録解除すべきルーチ
ン用の入口変数または定数である。 fc(出力/任意選択) 次の条件を返すことのできる任意選択の条件トークンで
ある。 Success(成功) Symbolic name=CEE000 Severity=0(fc=0) Msgno=0000 invalid routine reference
(無効なルーチン参照) Symbolic name=CEE081 Severity=3 Msgno=0257 Additional registrations
of routineremain in the q
ueue(ルーチンの追加登録が待ち行列中に残ってい
る) Symbolic name=CEE07T Severity=1 Msgno=0253 最も最近に追加された登録は除去されるが、以前の登録
は依然としてスタック・フレームの待ち行列中に残って
いる。
【0136】使用上の注意: ユーザが登録した終了ル
ーチンは、それらが登録されているスタック・フレーム
が崩壊する時、自動的に登録解除される。
【0137】ユーザ終了ルーチンへのインターフェー
ス:ユーザ・スタック・フレーム終了ルーチンへのイン
ターフェースは、次の通りである。 void termination_routine (Term_Token) INT4 *Term_Token; ただし、 Term_Token(入力) ユーザ・スタック・フレーム終了出口による使用のため
にデータへのアクセスを提供する1組のプラットフォー
ム特有の呼出し可能サービスへの入力として使用される
32ビットのトークン。
【0138】使用上の注意 1.ユーザが、終了されつつある適用業務に対する終結
処置、巻戻し及び回復の動作を実行できるようにするた
めの、ユーザ終了ルーチンが提供される。 2.適用業務の実行を終了処理ルーチンから再開するこ
とは違法である。
【0139】上記の諸技法を用いると、本発明を利用す
るプログラムを、下記のような現行の米国規格情報シス
テム(ANSI)の言語規格をサポートするコンパイラ
を使って書くことができる。 ・米国標準プログラミング言語−COBOL、ANSI
X3.23−1985 ・米国標準プログラミング言語−FORTRAN、AN
SI X3.9−1978及びX3.9−1990 ・米国標準プログラミング言語−COBOL用組込み関
数モジュール、ANSIX3.23a−1989 ・米国標準プログラミング言語−PL/I汎用サブセッ
ト、ANSI X3.74−1987 ・米国標準パスカル計算機プログラミング言語−ANS
I/IEEE 770X3.97−1983 ・米国標準プログラミング言語−C、ANSI X3.
159−1989
【0140】上記の仕様を用いて、標準プログラミング
技法を使って本発明を実施することができる。その結果
得られるプログラミングは、ディスク、ディケット、メ
モリ・カード、ROMまたはその他の何らかの記憶装置
に記憶することができる。実行のため、プログラムをコ
ンピュータのRAMにコピーすることができる。一時的
結果または中間結果はRAMに記憶される。コンピュー
タ科学の専門家なら、上記のように作成されたソフトウ
ェアを、適当な汎用または専用コンピュータ・ハードウ
ェアと組み合わせて、システムを容易に作成できるであ
ろう。本発明の好ましい実施例について詳細に例示して
きたが、当業者なら、頭記の特許請求の範囲に記載され
る本発明の範囲から逸脱することなく、その実施例に対
する修正及び適応を思いつくであろうことは明らかであ
る。
【図面の簡単な説明】
【図1】オペレーティング・システムと適用業務プログ
ラムの間でのCCHの機能上の関係を示す図である。
【図2】適用業務プログラムとCCHを連係する方法を
示す図である。
【図3】CCHにおけるスタック・フレームの使用を示
す図である。
【図4】CCHにおける処理ルーチン、カーソル及びス
タック・フレームの間の関係を示す図である。
【図5】第1の例の初期スタック及びカーソルのサンプ
ルを示す図である。
【図6】条件を信号で通知した後の第1の例の初期スタ
ック及びカーソルのサンプルを示す図である。
【図7】第2の例の初期スタック及びカーソルのサンプ
ルを示す図である。
【図8】呼出し側のスタック・フレームを使用するライ
ブラリ・ルーチン条件処理のスタック図である。
【図9】条件トークンの構成図である。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ジェフリー・アレン・グランツ アメリカ合衆国33431、フロリダ州ボカ・ ラトン、セント・クラウド・レーン 104 番地 (72)発明者 スコット・アラン・プレッツァー アメリカ合衆国55901、ミネソタ州ロチェ スター、ザンブロ・ドライブ、ノース・ウ ェスト 2732番地 (72)発明者 ロバート・ミルトン・スミス アメリカ合衆国95037、カリフォルニア州 モーガン・ヒル、コータ・カバニル 455 番地 (72)発明者 ウィリアム・ニコラス・ジョン・ティンダ ル カナダ エム5アール 3エイ6、トロン ト市ウェルズ・ヒル・アベニュー 20番地

Claims (10)

    【特許請求の範囲】
  1. 【請求項1】コンピュータ・システムにおいてプログラ
    ム実行中に生じる条件を処理するためのコンピュータ・
    プログラム・ルーチンを生成する方法であって、(1)
    外部呼出しをサポートする任意の言語で書かれた適用業
    務プログラムに連係するのに適した外部入口点用の目的
    コードを定義する段階と、(2)条件を条件マネージャ
    に信号で通知し、次いで適用業務プログラムに戻るため
    の目的コードを定義する段階と、(3)後で適用業務プ
    ログラムに連係するために、段階(1)及び(2)から
    の目的コードをコンピュータ・システム内の持久メモリ
    に入力する段階とを含み、 それによって、複数の言語で書かれた適用業務プログラ
    ムが使用できる、条件を条件マネージャに信号で通知す
    るための外部連係可能なルーチンを作成する、方法。
  2. 【請求項2】段階(2)がさらに、 Void CEESGL(cond_rep,[q_data_token],[fc]); FEED_BACK *cond_rep, INT4 *q_data_token, FEED_BACK *fc; を含む原始コードをコンパイルし、それによって、対応
    する目的コードを作成する段階を含む、請求項1の方
    法。
  3. 【請求項3】原始コードをコンパイルする段階が、
    (1)cond_repを、参照によって渡される条件表現の入
    力として定義する段階と、(2)q_data_tokenを、任意
    選択の入力32ビット・データ・オブジェクトとして定
    義する段階と、(3)CEESGLの成否を示すfc
    を、参照によって渡されるトークン用の任意選択の出力
    として定義する段階とを含む、請求項2の方法。
  4. 【請求項4】各条件が量子化された重大度を有する、コ
    ンピュータ・プログラムの実行中に発生する条件を処理
    する方法であって、(1)条件を記述するフィードバッ
    ク・トークンをそこに記憶することのできるアドレス
    を、サブルーチンに渡す段階と、(2)完了するまで、
    あるいは条件が検出されるまで、サブルーチンを実行す
    る段階と、(3)条件の重大度が閾値よりも大きい場合
    には、その条件を条件マネージャに信号で通知し、そう
    でない場合には、フィードバック・トークンをアドレス
    に記憶する段階とを含む方法。
  5. 【請求項5】フィードバック・トークンを記憶する段階
    が、さらに、(1)条件識別子を記憶する段階と、
    (2)条件識別子用のフォーマット・コードを記憶する
    段階と、(3)条件に関する重大度コードを記憶する段
    階と、(4)条件のファシリティ識別子用の制御コード
    を記憶する段階と、(5)条件に関するファシリティ識
    別子を記憶する段階とを含む、請求項4の方法。
  6. 【請求項6】フィードバック・トークンを記憶する段階
    が、さらに、(1)長さ4バイトの条件識別子を記憶す
    る段階と、(2)条件識別子用の長さ2ビットのフォー
    マット・コードを記憶する段階と、(3)条件に関する
    長さ3ビットの重大度コードを記憶する段階と、(4)
    条件のファシリティ識別子用の長さ3ビットの制御コー
    ドを記憶する段階と、(5)条件に関する長さ3文字の
    ファシリティ識別子を記憶する段階と、(6)条件に関
    するインスタンス特有情報用の長さ4バイトのハンドル
    を記憶する段階とを含む、請求項4の方法。
  7. 【請求項7】複数の言語によるプログラムを処理する条
    件マネージャを有するコンピュータ・システムにおいて
    障害を示すサブルーチンからのリターン・コードを検査
    する必要をなくして、プログラムを実行する方法であっ
    て、(1)条件が発生した時に実行するため、ユーザ処
    理ルーチンを条件マネージャで登録する段階と、(2)
    上記プログラム内のルーチンから、Pascal、FO
    RTRANまたはCOBOLで書かれたサブルーチンを
    呼び出す段階と、(3)条件の有無を検査しながら、完
    了するまで上記サブルーチンを実行する段階と、(4)
    外部連係ルーチンを呼び出すことによって、検出された
    条件を条件マネージャに信号で通知し、それによって条
    件マネージャに制御を移す段階と、(5)登録済みのユ
    ーザ処理ルーチンの実行とともに、条件マネージャを介
    して検出された条件を処理し、その後上記サブルーチン
    に制御を戻す段階と、(6)上記サブルーチンから上記
    プログラム内の上記ルーチンに制御を戻す段階とを含
    む、方法。
  8. 【請求項8】コンピュータ・システムにおいて条件を処
    理する方法であって、(1)条件を検出する段階と、
    (2)条件を記述するフィードバック・トークンを記憶
    する段階とを含み、上記トークンが、(a)条件識別子
    と、(b)条件識別子用のフォーマット・コードと、
    (c)条件に関する重大度コードと、(d)ファシリテ
    ィ識別子用の制御コードと、(e)ファシリティ識別子
    とを含み、それによって、後で使用するために条件に関
    する情報を記録する、方法。
  9. 【請求項9】さらに、プログラム内のルーチンからサブ
    ルーチンを呼び出す準備段階と、上記フィードバック・
    トークンを上記プログラム内の上記ルーチンに戻す最終
    ステップとを含む、請求項8の方法。
  10. 【請求項10】さらに、その条件に関するインスタンス
    特有情報を記憶するステップを含む、請求項8の方法。
JP4222640A 1991-09-06 1992-08-21 実行時プログラム条件を表現し、信号で通知する方法及びシステム Pending JPH05224931A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US07/755,708 US5455949A (en) 1991-09-06 1991-09-06 Method for representing and signaling run-time program conditions
US755708 1991-09-06

Publications (1)

Publication Number Publication Date
JPH05224931A true JPH05224931A (ja) 1993-09-03

Family

ID=25040311

Family Applications (1)

Application Number Title Priority Date Filing Date
JP4222640A Pending JPH05224931A (ja) 1991-09-06 1992-08-21 実行時プログラム条件を表現し、信号で通知する方法及びシステム

Country Status (3)

Country Link
US (2) US5455949A (ja)
EP (1) EP0531098A2 (ja)
JP (1) JPH05224931A (ja)

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5455949A (en) * 1991-09-06 1995-10-03 International Business Machines Corporation Method for representing and signaling run-time program conditions
JPH05233326A (ja) * 1991-12-19 1993-09-10 Internatl Business Mach Corp <Ibm> コンピュータシステムにおいて事象を取り扱う方法及びシステム
US5832265A (en) * 1993-03-22 1998-11-03 Siemens Nixdorf Informationssysteme Aktiengesellschaft Reentrant libraries
US5892944A (en) * 1993-07-20 1999-04-06 Kabushiki Kaisha Toshiba Program execution and operation right management system suitable for single virtual memory scheme
EP0667574A3 (en) * 1994-02-14 1997-02-12 Ibm Computer system.
US6199200B1 (en) * 1994-04-15 2001-03-06 International Business Machines Corporation Method and system for supporting dual conventions for methods that return structures
US5754855A (en) * 1994-04-21 1998-05-19 International Business Machines Corporation System and method for managing control flow of computer programs executing in a computer system
US5812759A (en) * 1996-11-08 1998-09-22 Allen Bradley Company, Inc. Fault handling with loaded functions
US5948107A (en) * 1997-05-28 1999-09-07 Intel Corporation Method of handling errors in complex inheritance hierarchies
JP3367385B2 (ja) * 1997-06-27 2003-01-14 日本電気株式会社 分散トランザクション整合方法及びプログラムを記録した機械読み取り可能な記録媒体
JP3507681B2 (ja) * 1998-01-08 2004-03-15 インターナショナル・ビジネス・マシーンズ・コーポレーション 情報処理方法及び情報処理装置、情報処理システム、情報処理装置を制御するプログラムを格納した記憶媒体
AU763141B2 (en) * 1999-04-19 2003-07-17 Motorola Australia Pty Ltd A method of detecting illegal sequences of code execution
US6772416B1 (en) * 1999-11-19 2004-08-03 General Dynamics Decision Systems, Inc. Separation kernel with memory allocation, remote procedure call and exception handling mechanisms
US6636991B1 (en) * 1999-12-23 2003-10-21 Intel Corporation Flexible method for satisfying complex system error handling requirements via error promotion/demotion
US6792562B1 (en) * 2000-03-06 2004-09-14 Pc-Doctor, Inc. Format for extensible error and event codes
US7099886B2 (en) 2000-07-20 2006-08-29 Microsoft Corporation Method and apparatus for identifying programming object attributes
US6934939B2 (en) * 2001-02-28 2005-08-23 International Business Machines Corporation Method for unwinding a program call stack
US7216261B2 (en) * 2001-03-29 2007-05-08 Heidelberger Druckmaschinen Ag Method for controlling a program run of a central data processor
US20020157002A1 (en) * 2001-04-18 2002-10-24 Messerges Thomas S. System and method for secure and convenient management of digital electronic content
US7003778B2 (en) * 2001-10-24 2006-02-21 Sun Microsystems, Inc. Exception handling in java computing environments
CA2365687A1 (en) * 2001-12-19 2003-06-19 Ibm Canada Limited-Ibm Canada Limitee Mechanism for invocation of user-defined routines in a multi-threaded database environment
US7275238B2 (en) * 2002-03-28 2007-09-25 International Business Machines Corporation Program event activated and configured debugger method, system, article of manufacture, computer program product, and data structure
EP1387258A3 (en) * 2002-07-31 2008-01-02 Texas Instruments Incorporated Processor-processor synchronization
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
US7003762B2 (en) * 2002-08-01 2006-02-21 Sas Institute Inc. Computer-implemented exception handling system and method
US20060089984A1 (en) * 2004-10-22 2006-04-27 International Business Machines Corporation Process and implementation for autonomous probe enablement
US20100064208A1 (en) * 2005-07-08 2010-03-11 Corizon Limited Method and apparatus for user interface modification
US7725882B1 (en) 2005-09-30 2010-05-25 Symantec Operating Corporation System and method for profiling processes in a computing system
US7805717B1 (en) 2005-10-17 2010-09-28 Symantec Operating Corporation Pre-computed dynamic instrumentation
US8176480B1 (en) 2006-02-27 2012-05-08 Symantec Operating Corporation Adaptive instrumentation through dynamic recompilation
US8201151B2 (en) * 2007-12-20 2012-06-12 International Business Machines Corporation Method and system for providing post-mortem service level debugging
US20110307904A1 (en) * 2010-06-14 2011-12-15 James Malnati Method and apparatus for automation language extension
CN104572451B (zh) * 2014-12-25 2019-01-11 北京京东尚科信息技术有限公司 一种代码效率检查方法及系统

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS58158746A (ja) * 1982-03-16 1983-09-21 Nec Corp 情報処理装置
JPS61187044A (ja) * 1985-02-15 1986-08-20 Nec Corp 情報処理装置
JPS62212732A (ja) * 1986-03-13 1987-09-18 Nec Corp 情報処理方式
JPS6358544A (ja) * 1986-08-29 1988-03-14 Nec Corp 電子計算機システム
JPS63106047A (ja) * 1986-10-23 1988-05-11 Nec Corp 動的サブル−チン呼び出し方式
JPS63254536A (ja) * 1987-04-10 1988-10-21 Fujitsu Ltd エラ−事象の一元管理方式
JPS6415831A (en) * 1987-07-10 1989-01-19 Canon Kk Character output device
JPH01159739A (ja) * 1987-12-16 1989-06-22 Fujitsu Ltd エラー処理方式
JPH01213723A (ja) * 1988-02-22 1989-08-28 Fanuc Ltd エラー処理方法
JPH02272627A (ja) * 1989-03-06 1990-11-07 Internatl Business Mach Corp <Ibm> デイジタル・コンピユータ・システムとその手続呼び出し方法

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS54107643A (en) * 1978-02-13 1979-08-23 Toshiba Corp Operation control method and unit executing structured program
US4493034A (en) * 1982-10-14 1985-01-08 Honeywell Information Systems Inc. Apparatus and method for an operating system supervisor in a data processing system
US4488227A (en) * 1982-12-03 1984-12-11 Honeywell Information Systems Inc. Program counter stacking method and apparatus for nested subroutines and interrupts
US4980820A (en) * 1985-02-28 1990-12-25 International Business Machines Corporation Interrupt driven prioritized queue
US4819233A (en) * 1987-04-08 1989-04-04 Westinghouse Electric Corp. Verification of computer software
US5175855A (en) * 1987-07-27 1992-12-29 Laboratory Technologies Corporation Method for communicating information between independently loaded, concurrently executing processes
US5103498A (en) * 1990-08-02 1992-04-07 Tandy Corporation Intelligent help system
US5455949A (en) * 1991-09-06 1995-10-03 International Business Machines Corporation Method for representing and signaling run-time program conditions

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS58158746A (ja) * 1982-03-16 1983-09-21 Nec Corp 情報処理装置
JPS61187044A (ja) * 1985-02-15 1986-08-20 Nec Corp 情報処理装置
JPS62212732A (ja) * 1986-03-13 1987-09-18 Nec Corp 情報処理方式
JPS6358544A (ja) * 1986-08-29 1988-03-14 Nec Corp 電子計算機システム
JPS63106047A (ja) * 1986-10-23 1988-05-11 Nec Corp 動的サブル−チン呼び出し方式
JPS63254536A (ja) * 1987-04-10 1988-10-21 Fujitsu Ltd エラ−事象の一元管理方式
JPS6415831A (en) * 1987-07-10 1989-01-19 Canon Kk Character output device
JPH01159739A (ja) * 1987-12-16 1989-06-22 Fujitsu Ltd エラー処理方式
JPH01213723A (ja) * 1988-02-22 1989-08-28 Fanuc Ltd エラー処理方法
JPH02272627A (ja) * 1989-03-06 1990-11-07 Internatl Business Mach Corp <Ibm> デイジタル・コンピユータ・システムとその手続呼び出し方法

Also Published As

Publication number Publication date
EP0531098A3 (ja) 1995-04-12
EP0531098A2 (en) 1993-03-10
US5455949A (en) 1995-10-03
US5724564A (en) 1998-03-03

Similar Documents

Publication Publication Date Title
JPH05224931A (ja) 実行時プログラム条件を表現し、信号で通知する方法及びシステム
US5774729A (en) Event handling in a high level programming language environment
US6351843B1 (en) Dynamically inserting a function into an application executable at runtime
US6289446B1 (en) Exception handling utilizing call instruction with context information
US5628016A (en) Systems and methods and implementing exception handling using exception registration records stored in stack memory
US6345382B1 (en) Run-time customization in object-oriented design
KR100640314B1 (ko) 혼합된 실행 스택 및 예외처리의 구현방법및 그 장치
US7559065B1 (en) Methods and apparatus providing an event service infrastructure
US8589889B2 (en) Apparatus and method of detecting errors in embedded software
US7810077B2 (en) Reifying generic types while maintaining migration compatibility
US8635595B2 (en) Method and system for managing non-compliant objects
EP0945792A2 (en) Techniques for implementing a framework for extensible applications
US9417931B2 (en) Unified metadata for external components
US20080244243A1 (en) Computer program product and system for altering execution flow of a computer program
EP0531107A2 (en) Program execution manager
US6834391B2 (en) Method and apparatus for automated native code isolation
US20050172302A1 (en) Method, system, program and data structure for controlling access to sensitive functions
US5630137A (en) Condition handling in a multi-language computer program
US20090235284A1 (en) Cross-platform compatibility framework for computer applications
US20090320007A1 (en) Local metadata for external components
US7607125B2 (en) Programming language support for integrating undo and exception handling
EP0784264B1 (en) A computer-implemented process for determining a minimum code set for an executable application in a data processing system
US7596780B2 (en) System and method for virtual catching of an exception
Buisson et al. Recaml: execution state as the cornerstone of reconfigurations
US20040015876A1 (en) Method and structure of implementing a safe pointer