JPH04332055A - プログラム暴走検知方法 - Google Patents

プログラム暴走検知方法

Info

Publication number
JPH04332055A
JPH04332055A JP3101268A JP10126891A JPH04332055A JP H04332055 A JPH04332055 A JP H04332055A JP 3101268 A JP3101268 A JP 3101268A JP 10126891 A JP10126891 A JP 10126891A JP H04332055 A JPH04332055 A JP H04332055A
Authority
JP
Japan
Prior art keywords
program
stack
subroutine
processing
calling
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
JP3101268A
Other languages
English (en)
Inventor
Takuro Tokuyama
徳山 琢郎
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.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial Co Ltd
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 Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP3101268A priority Critical patent/JPH04332055A/ja
Publication of JPH04332055A publication Critical patent/JPH04332055A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、計算機システムにおい
て、メインルーチンとサブルーチンあるいはサブルーチ
ンとサブルーチンの間の連係処理を行う際のプログラム
暴走検知方法に関する。
【0002】
【従来の技術】コンピュータ処理に際しては、メインの
ルーチンを実行処理している途中でサブルーチンを呼び
出し、このサブルーチンを実行処理してから元のメイン
ルーチンへ戻って処理を継続する、という動作が採られ
ることがある。図4及び図5は、このようなサブルーチ
ンに入ることがある従来のプログラム連係処理を説明す
るための図である。図4はメインルーチンAがサブルー
チンBを呼び出し、さらにそのサブルーチンBがサブル
ーチンCを呼び出すようなプログラム連係処理の様子を
示している。図5は図4に示したプログラム連係処理が
行われたときのスタック変化の様子を簡略化して示した
図である。
【0003】以上のようなプログラムの連係処理につい
て、以下にその動作について説明する。まず、メインル
ーチンAがサブルーチンBを呼び出した時点でのプログ
ラムカウンタをスタック上に保存しスタックポインタの
値をプログラムカウンタを保存したアドレスに変更し、
サブルーチンBの処理を行う。そのサブルーチンBの処
理の中でサブルーチンCを呼び出した時点でのプログラ
ムカウンタをメインルーチンAがサブルーチンBを呼び
出した時点のプログラムカウンタの上に積み上げ、スタ
ックポインタの値をプログラムカウンタを保存したアド
レスに変更し、サブルーチンCの処理を行う。
【0004】そして、サブルーチンCがその処理を終了
してサブルーチンBに復帰する際にスタック上のサブル
ーチンCが呼び出された時点でのサブルーチンBのプロ
グラムカウンタを取り出して、スタックポインタの値を
サブルーチンCが呼び出される前の値に戻し、そのプロ
グラムカウンタのアドレスに制御を移す。次に、サブル
ーチンBがその処理を終了しメインルーチンAに復帰す
る際にスタック上のサブルーチンBが呼び出された時点
でのメインルーチンAのプログラムカウンタを取り出し
て、スタックポインタの値をサブルーチンBが呼び出さ
れる前の値に戻し、そのプログラムカウンタのアドレス
に制御を移す。
【0005】
【発明が解決しようとする課題】しかしながら前記従来
のプログラム連係処理にあっては、プログラムの誤り等
でスタックポインタの値が書き替わってしまった場合に
は、その時点でスタックポインタが指しているアドレス
に格納されている内容をリターンアドレスと誤った判断
するので、正常なアドレスに制御を戻すことができない
。そのため、いわゆるプログラムの暴走状態に陥ってし
まうという問題があった。
【0006】本発明は前記問題点に鑑みてなされたもの
で、その目的は、プログラムの連係処理を行う時点でプ
ログラムが暴走しているか否かを検出できる優れたプロ
グラム連係方法を提供することである。
【0007】
【課題を解決するための手段】図1は本発明のプログラ
ム暴走検知方法の動作原理を示す図である。この図に示
すように、メインルーチン11からサブルーチン12へ
入るに当たって、各プログラムに固有のプログラム番号
を付加し、このプログラム番号とプログラムがメモリ上
で占める領域の開始アドレスと領域の大きさの対応を検
索するための対応表13をもち、プログラムの呼び出し
動作に入るときに、先ずスタック14に呼出側プログラ
ムのプログラム番号を保存し(ステップ2a)、次いで
被呼出側プログラムのプログラム番号を保存し(ステッ
プ12b)、その後サブルーチン本来の処理を実行する
(ステップ12c)。次に、被呼出側プログラムから復
帰する時点で、スタック上の被呼出側プログラムのプロ
グラム番号と自プログラムのプログラム番号の比較をし
(ステップ12d)、また、スタック上の呼出側プログ
ラムのプログラム番号と前記対応表より求めたメモリ領
域とスタック上のリターンアドレスの比較を行い(ステ
ップ12e)、プログラムが暴走しているか否かを検出
するようにしたものである。
【0008】
【作用】したがって、本発明によれば、被呼出側プログ
ラムから呼出側プログラムに復帰する時点で、スタック
上の被呼出側プログラムのプログラム番号と自プログラ
ムのプログラム番号が比較される。また一方で、スタッ
ク上の呼出側プログラムのプログラム番号と前記対応表
より求めたメモリ領域とスタック上のリターンアドレス
の比較が行われる。そしてこれらの比較の結果、一致が
とられれば正しいプログラムの連係が行なわれていると
判断され、一致がとられなければプログラムが暴走状態
に陥っていると判断されるので、プログラムが致命的な
状態に陥る前に障害復旧処理を行うことができる。
【0009】
【実施例】図2は本発明の動作を実行するための計算機
システムの一実施例を示すブロック図である。この図に
おいて21はCPUであり、22はCPU21中の汎用
レジスタ(R1,R2,R3,と呼ぶ)であり、23は
CPU21中のスタックポインタであり、24はスタッ
ク領域であり、25はメモリ領域であり、26はメモリ
領域25に含まれるプログラム番号とプログラムの格納
されているメモリ領域の開始アドレスと領域の大きさと
の対応表である。
【0010】図3は前記実施例により本発明のプログラ
ム暴走検知を行なうプログラムのフローである。図3に
おいて、31はメインルーチンのプログラムであり、4
1はサブルーチンのプログラムである。
【0011】次に前記実施例の動作について説明する。 メインルーチンは処理1を実行した(ステップ32)後
、サブルーチンコールを実行し(ステップ33)、この
サブルーチンの終了に伴う復帰動作として、処理2を実
行する(ステップ34)。
【0012】一方、メインルーチンより呼び出されたサ
ブルーチン41は、スタック24上のリターンアドレス
と前記対応表26よりメインルーチン31のプログラム
番号(図中Pnumで示す)を求め(ステップ42)、
このプログラム番号をスタック24に積む(ステップ4
3)。さらに、自分のプログラム番号(図中、SPnu
mで示す)をスタック24に積み上げ(ステップ44)
、その後プログラム本来の処理を行う(ステップ45)
【0013】本来の処理が終了した後、スタック24上
の被呼出側プログラムのプログラム番号を汎用レジスタ
R1にポップし(ステップ46)、R1の値とサブルー
チンのプログラム番号を比較する(ステップ47)。こ
の比較処理において、両番号が異なる値の場合にはプロ
グラムが暴走していると判断し処理を中断する(ステッ
プ48)。ステップ47において、前記比較が正常だっ
た場合には、スタック24上の呼出側プログラムのプロ
グラム番号を汎用レジスタR1にポップし(ステップ4
9)、R1の値がプログラム番号として正常な値である
かどうかをチェックし(ステップ50)、異常な値であ
ると判定された場合にはプログラムが暴走していると判
断し処理を中断する(ステップ48)。他方、ステップ
50のチェック処理において判定が正常であった場合に
は、R1の値と前記対応表より読み出したプログラムの
開始番地をR2に代入し、プログラムへの領域の大きさ
をR3に代入し(ステップ51)、スタック24上の呼
出側プログラムへのリターンアドレスをR1にポップす
る。その後、R1の値からR2の値を減算した結果が0
より大きく且つR3より小さいか否かをチェックし(ス
テップ52)、これとは異なる場合にはプログラムが暴
走していると判断し処理を中断する。また前記チェック
の結果、表記の通りである場合にはプログラムは正常に
動作していると判断しメインプログラムへのリターンを
する。
【0014】このように、前記実施例によれば、プログ
ラムが暴走し、スタックポインタ23が異常な値になっ
たとすると、プログラムの復帰処理をする時点でスタッ
クポインタ23が異常な値になったことを検出できるた
め、プログラムが致命的な状態に陥る前にこのプログラ
ムの暴走を検出することができ、障害の復旧処理を実行
することができるという利点を有する。
【0015】
【発明の効果】本発明は、前記実施例より明らかなよう
に、プログラムが暴走し、スタックポインタの値が異常
な値になっていることをサブルーチンからの復帰処理の
時点で検出できるようにしたものであり、プログラムが
致命的な状態に陥る前にプログラムの暴走を検出するこ
とができるため、障害復帰処理を実行することができる
という効果を有する。
【図面の簡単な説明】
【図1】(a)  本発明の原理を示す説明図(b) 
 本発明における対応表の構成を示す図(c)  本発
明におけるスタックの構成を示す図
【図2】本発明の一
実施例における計算機システムの構成を示す概略ブロッ
ク図
【図3】前記実施例におけるプログラムのフローチャー
【図4】従来のプログラム連係処理のプログラムのフロ
ーチャート
【図5】従来のプログラム連係処理のスタック状態の遷
移を示す図
【符号の説明】
11  呼出側プログラム 12  被呼出側プログラム 12a  呼出側プログラム番号保存処理12b  被
呼出側プログラム番号保存処理12c  被呼出側プロ
グラム本来の処理12d  被呼出側プログラム番号の
チェック処理12e  呼出側プログラム番号とリター
ンアドレスのチェック処理 13  プログラム番号・プログラム開始アドレス・プ
ログラムサイズ対応表 14  スタック 15  スタックポインタ 21  CPU 22  汎用レジスタ 23  スタックポインタ 24  スタック 25  メモリ 26  プログラム番号・プログラム開始アドレス・プ
ログラムサイズ対応表 27  メインルーチン 28  サブルーチン 31  メインプログラム 32  サブプログラム

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】実行中のプログラムから他のプログラムを
    呼び出す際にリターンアドレスなどの復帰情報をスタッ
    クに退避して複数のプログラムの連係処理を行う計算機
    システムの、各プログラムに一意に決まるプログラム番
    号を付加し、各プログラムが占めるメモリ上の領域の開
    始番地と領域の大きさを記録しておく対応表をもち、被
    呼出側プログラムは、前記スタックからリターンアドレ
    スを読み出し、前記対応表から求めた呼出側プログラム
    のプログラム番号と被呼出側プログラムのプログラム番
    号をスタックに保存してから本来の処理を実行し、その
    本来の処理終了後に前記スタック上から被呼出側プログ
    ラムのプログラム番号を読み出し自プログラムのプログ
    ラム番号と比較し、一致し、かつ呼出側プログラムのプ
    ログラム番号と対応表より求めた呼出側プログラムのア
    ドレスの範囲にリターンアドレスが含まれている場合に
    のみ呼出側プログラムに動作復帰させるようにしたこと
    を特徴とするプログラム暴走検知方法。
JP3101268A 1991-05-07 1991-05-07 プログラム暴走検知方法 Pending JPH04332055A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP3101268A JPH04332055A (ja) 1991-05-07 1991-05-07 プログラム暴走検知方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP3101268A JPH04332055A (ja) 1991-05-07 1991-05-07 プログラム暴走検知方法

Publications (1)

Publication Number Publication Date
JPH04332055A true JPH04332055A (ja) 1992-11-19

Family

ID=14296142

Family Applications (1)

Application Number Title Priority Date Filing Date
JP3101268A Pending JPH04332055A (ja) 1991-05-07 1991-05-07 プログラム暴走検知方法

Country Status (1)

Country Link
JP (1) JPH04332055A (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011048850A (ja) * 2010-10-29 2011-03-10 Fujitsu Ltd ソフトウェアの改竄防止装置及び改竄防止方法
JP2011048851A (ja) * 2010-10-29 2011-03-10 Fujitsu Ltd ソフトウェアの改竄検出装置及び改竄検出方法
US8245197B2 (en) 2006-08-09 2012-08-14 Fujitsu Limited Program monitoring method, computer, and abnormal monitoring program product
JP2014035741A (ja) * 2012-08-10 2014-02-24 Denso Corp 電子制御装置
JP2018114181A (ja) * 2017-01-19 2018-07-26 株式会社オリンピア 遊技機

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8245197B2 (en) 2006-08-09 2012-08-14 Fujitsu Limited Program monitoring method, computer, and abnormal monitoring program product
JP2011048850A (ja) * 2010-10-29 2011-03-10 Fujitsu Ltd ソフトウェアの改竄防止装置及び改竄防止方法
JP2011048851A (ja) * 2010-10-29 2011-03-10 Fujitsu Ltd ソフトウェアの改竄検出装置及び改竄検出方法
JP2014035741A (ja) * 2012-08-10 2014-02-24 Denso Corp 電子制御装置
JP2018114181A (ja) * 2017-01-19 2018-07-26 株式会社オリンピア 遊技機

Similar Documents

Publication Publication Date Title
US4839895A (en) Early failure detection system for multiprocessor system
JPH04332055A (ja) プログラム暴走検知方法
JPH02304635A (ja) プログラム暴走検知方法
JPH01286029A (ja) マイクロプログラムのパッチ方式
JPH04266141A (ja) スタックオーバーフロー検出方式
JPH05189255A (ja) プログラム暴走検知方法
JPS61141047A (ja) 障害情報の退避方式
JP2735523B2 (ja) プロシージャ・ステップ処理方法
JPH07225681A (ja) 割込制御装置
JP2978658B2 (ja) プログラム開発支援装置
JPS63278147A (ja) レジスタ誤使用防止制御方式
JPS6270947A (ja) デバグ割込み制御方式
JPH0431930A (ja) データ処理装置
JPS619731A (ja) 割り込み処理方法
JPS6146535A (ja) 擬似エラ−設定制御方式
JPH0477826A (ja) マイクロプロセツサ
JPH05241903A (ja) プログラム障害の検出方式
JPS5935241A (ja) 割込み制御方式
JPH02244345A (ja) 情報処理装置
JPH01195541A (ja) 半導体集積回路
JPH04264625A (ja) レジスタ管理方式
JPH064356A (ja) ソフトウエアの異常動作検出方式
JPS6058491B2 (ja) エラ処理方式
JPH03166689A (ja) プログラムチェック方法
JPH05313916A (ja) 電子計算機における割込み処理方法及び電子計算機