JPH04266141A - スタックオーバーフロー検出方式 - Google Patents

スタックオーバーフロー検出方式

Info

Publication number
JPH04266141A
JPH04266141A JP3027230A JP2723091A JPH04266141A JP H04266141 A JPH04266141 A JP H04266141A JP 3027230 A JP3027230 A JP 3027230A JP 2723091 A JP2723091 A JP 2723091A JP H04266141 A JPH04266141 A JP H04266141A
Authority
JP
Japan
Prior art keywords
stack
upper limit
stack pointer
limit value
register
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.)
Withdrawn
Application number
JP3027230A
Other languages
English (en)
Inventor
Mitsuyo Hasegawa
長谷川 充世
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP3027230A priority Critical patent/JPH04266141A/ja
Publication of JPH04266141A publication Critical patent/JPH04266141A/ja
Withdrawn legal-status Critical Current

Links

Abstract

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

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、プロセッサにおいて、
スタックの最終書込位置を示すスタックポインタが所定
領域を越えたことを検出するスタックオーバーフロー検
出方式に関する。
【0002】
【従来の技術】現在、多くのプロセッサでは、割り込み
に応じたデータの退避処理、サブルーチンコール命令の
実行に伴う戻り番地の退避処理その他をその退避先の領
域の番地を逐次指定せずに円滑に行うために、スタック
ポインタの指示に応じてラストイン・ファーストアウト
方式でアクセス可能なスタックを備える。
【0003】このようなプロセッサでは、各プログラム
の実行時に使用されるスタックのサイズは、上述のよう
に、各プログラムにおけるサブルーチンコールのネステ
ィング回数、そのプログラムの処理と非同期に発生する
割り込み要因の数その他に応じて決定されるために、そ
の算定は容易ではない。また、近年、開発される多くの
プログラムでは、そのサイズが従来より大きいために、
このようなスタックのサイズの算定時に考慮すべき要因
も多くなり、その見積りが難しくなっている。
【0004】しかし、算定されたスタックのサイズが不
足であると、スタックに対するアクセス(以下、このア
クセスを行うプログラムを「自プログラム」という。)
が予め割り付けられた領域を超えた隣接メモリ領域に対
して行われる(本明細書では、このようなアクセス動作
を「スタックオーバーフロー」という。)。このような
場合には、その隣接メモリ領域に正規にアクセスする他
のプログラム(以下、「他プログラム」という。)が自
プログラムが不正規に書き込んだデータを参照したり、
自プログラムが他プログラムによって正規に書き込まれ
た領域の内容を参照するタイミングが生じ、各プログラ
ムが不正常に実行され得る。しかし、このようにして参
照されたデータが偶然にもソフトウエア上で矛盾を生じ
させないものである場合には、これらのプログラムは外
見上何ら異常なく動作する。さらに、このような外見上
のみの正常動作が高い確率で行われる場合には、スタッ
クの割り当てサイズ不足は、潜在的な障害として長期間
に渡って認識されずに放置されたり、上述の矛盾が生じ
て異常動作が行われてもその動作が突発的あるいは単発
的に発生するために、その実体は把握され難い場合が多
かった。
【0005】従来、このようなスタックオーバーフロー
の検出方法としては、第一に、運用中のシステムにおい
て、例えば、周期的に起動される監視タスクにより、ス
タックポインタの正否を監視する方法がある。また、第
二の方法として、運用中のシステムにおいて、専用のハ
ードウエアによりスタックポインタの正否を常時監視し
、不正メモリアクセスと同様の割り込み信号を用いて、
スタックオーバーフローをソフトウエアに通知する方法
がある。さらに、第三の方法として、デバッグ中その他
の非運用中のシステムにおいて、初期設定時にスタック
およびその周辺の領域に特定のビットパターンを書き込
み、所定のタイミングにプログラムの実行を停止させ、
そのスタック周辺のメモリの内容をダンプすることによ
り、そのスタックの全領域が更新されているか否かを判
断する方法がある。
【0006】
【発明が解決しようとする課題】ところで、このような
従来のスタックオーバーフローの検出方法の内、第一の
方法では、監視タスクの監視タイミングがプログラムの
実行に応じたスタックポインタの更新タイミングと非同
期であるために、短時間にのみ発生するスタックオーバ
ーフローを検出することが難しかった。また、その検出
確度は監視タスクの起動周期を短くすることによって向
上できるが、これに伴い頻繁に起動される監視タスクに
よってプロセッサの処理時間の多くが消費され、プログ
ラム(ソフトウエア)が過負荷状態に陥る場合が多かっ
た。
【0007】また、第二の方法では、スタックオーバー
フローの検出が、ほぼ実時間で確実に行われるが、その
検出を行うために専用のハードウエアが必要であり、か
つ不正メモリアクセスとして通知される割り込み要因に
対応して専用のエラー処理が必要となるために、ハード
ウエアおよびソフトウエアの両面でプロセッサの汎用性
を欠くものであった。
【0008】さらに、第三の方法では、スタックが最大
に消費された後でなければ、ダンプされたスタック周辺
のメモリの内容からスタックオーバーフローの発生の有
無を確実に判定できないために、事前にそのような実行
過程を正確に把握し、確実に実行させる必要があった。 しかし、そのような実行過程の算出、その実行過程に対
応した実行条件の設定その他に必要な操作は、必ずしも
容易ではなかった。また、オペレーティングシステムそ
の他によりスタックがダイナミックに割り付けられるシ
ステムでは、割り付けられたスタックの物理番地および
その境界点が容易に判別できないために、この方法を適
用できない場合が多かった。
【0009】本発明は、汎用のハードウエアを用い、ソ
フトウエアの過負荷を避けて確実にスタックオーバーフ
ローを検出できるスタックオーバーフロー検出方式を提
供することを目的とする。
【0010】
【課題を解決するための手段】図1は、本発明の原理ブ
ロック図である。本発明は、ラストインファーストアウ
ト方式によりアクセスされるスタック11と、スタック
11の最終書込位置を示すスタックポインタが、スタッ
ク11に予め割り付けられた領域を越えたか否かを検出
する検出手段13とを備えたスタックオーバーフロー検
出方式において、スタック11へのアクセス時に更新さ
れるスタックポインタがそれ以前のスタックポインタの
上限値を越えたときに、そのスタックポインタを新たな
上限値として保持する保持手段15を備え、検出手段1
3は、所定のタイミングで保持手段15に保持されてい
るスタックポインタの上限値を検査する構成であること
を特徴とする。
【0011】
【作用】本発明は、スタックポインタがスタック11に
書き込みが行われる度に更新され、保持手段15が、そ
のスタックポインタがそれ以前のスタックポインタの上
限値を越えると、そのスタックポインタを新たな上限値
として保持する。検出手段13は、所定のタイミングで
保持手段15に保持されているスタックポインタの上限
値を検査するので、従来例のように、スタックポインタ
を頻繁に監視せず、かつ割り込み機構その他の専用ハー
ドウエアを用いなくても、スタックポインタの値が予め
割り付けられた領域を越えたか否かを確実に検出できる
【0012】したがって、汎用のハードウエアを用いて
ソフトウエアの過負荷を避けつつ、確実にスタックオー
バーフローを検出することができる。
【0013】
【実施例】以下、図面に基づいて本発明の実施例につい
て詳細に説明する。図2は、本発明の一実施例を示す図
である。図において、プロセッサ20は、従来のプロセ
ッサと同様に、所定の命令セットに基づいて与えられた
プログラムを実行する演算回路、記憶回路、これらの制
御を行う制御回路その他を含む制御・演算部21と、上
述の記憶回路上に配置されたスタックにそのスタックポ
インタを与えるスタックポインタレジスタ(SP)22
とを備える。
【0014】本発明の特徴とする構成は、本実施例では
、スタックポインタレジスタ22の上限値としてその最
小値を保持するスタック上限値レジスタ(SPU)23
およびその内容とスタックポインタレジスタ22の内容
とを比較する比較部24が制御・演算部21の下に配置
され、比較部24の出力が、その出力に応じてスタック
ポインタレジスタ22とスタック上限値レジスタ23と
の何れか一方の内容を選択し、スタック上限値レジスタ
23に与える選択部25を備えた点にある。
【0015】なお、本実施例と図1に示すブロック図と
の対応関係については、制御・演算部21はスタック1
1および検出手段13に対応し、スタック上限値レジス
タ23、比較部24および選択部25は保持手段15に
対応する。このような構成のプロセッサ20では、制御
・演算部21は、その命令セットにスタック上限値レジ
スタ23と所定レジスタおよび記憶回路との間のデータ
転送命令が付加され、かつスタック上限値レジスタ23
を割り込み処理の起動およびその処理の終了に伴うデー
タの退避・復元の対象とする。すなわち、スタック上限
値レジスタ23は、ソフトウエア上において他のレジス
タとほぼ同様の取扱いを可能とすることにより、プログ
ラムによる制御の可能性とその汎用性が保たれる。
【0016】また、比較部24は、例えば、スタックポ
インタレジスタ22に対するデータの転送、サブルーチ
ンへの分岐、サブルーチンから上位ルーチンへの復帰、
割り込み処理の起動に伴う各レジスタの内容の退避・復
元処理のようなスタックポインタレジスタ22の内容が
更新される場合には、制御・演算部21から与えられる
指令に応じて、その更新後の内容とスタック上限値レジ
スタ23の内容との比較し、その結果を出力する。選択
部25は、その比較結果に応じてスタックポインタレジ
スタ22の値とスタック上限値レジスタ23の値との内
、小さい方をスタック上限値レジスタ23に転送し、そ
の内容を更新する。
【0017】すなわち、スタックポインタレジスタ22
の値はプログラムの実行に応じて図3に細線で示すよう
に変化するが、スタック上限値レジスタ23には、図3
に太線で示すように、スタックポインタレジスタ22の
上限値が常時設定される(図3t1 〜t12)。とこ
ろで、このような構成のプロセッサ上で動作するマルチ
タスクオペレーティングシステム(以下、「OS」とい
う。)では、そのOSによって起動されるタスク毎にス
タックが管理される。
【0018】図4は、スタック管理テーブルの構成例を
示す図である。図5は、OSの動作を説明する図である
。以下、図2〜図5を参照して、スタックオーバーフロ
ーの検出動作について説明する。OSは、システムの始
動に際して所定の初期化処理を行い(図5■)、その処
理において、例えば、図4に示すスタック管理テーブル
に、各タスクa、b、…に対応して、それぞれ割り付け
るべきスタックの先頭アドレスSAa、SAb、…と、
これらの領域のサイズSSa、SSb、…とを登録する
【0019】このような初期化処理が完了すると、OS
は、例えば、タスクaを起動して(図5■)システムの
運用を開始する。OSは、その起動処理において、上述
のスタック管理テーブルを参照し、起動されるタスクa
に割当られたスタックの先頭アドレスSAa をスタッ
クポインタレジスタ22およびスタック上限値レジスタ
23に設定する。また、タスクaの実行中におけるスタ
ック上限値レジスタ23には、上述のようにスタックポ
インタレジスタ22の上限値が逐次保持される。
【0020】タスクaの処理が何らかの要因により中断
(終了)する(図5■)と、OSは、タスクaに割り当
てたスタックの境界点のアドレス(=SAa−SSa)
を算出し、その値とタスクaの実行中にスタック上限値
レジスタ23に設定された最終値との大小判定を行う。 OSは、その判定結果に基づいて、スタックオーバーフ
ローの有無を認識する。
【0021】OSは、このような判定処理によりスタッ
クオーバーフローが検出されない場合には、各タスクの
プライオリティ、タスク相互間の同期関係その他に応じ
て選定される他のタスクb、c、…を逐次起動し(図5
■、■、…)、これらのタスクの処理が中断(終了)す
る(図5■、■、…)度に、同様の方法によりスタック
オーバーフローの有無を判定する。
【0022】このように、各タスクの実行中には、スタ
ック上限値レジスタ23は、スタックポインタレジスタ
22がとる値の上限値を漏れなく確実に検出して保持す
るので、例えば、タスクcの実行中に一時的にスタック
オーバーフローが発生した(図5■)場合には、OSは
、そのタスクの処理が中断(終了)してプロセッサ20
の制御権が回復した(図5■)状態でそのスタックオー
バーフローを確実に検出する。
【0023】なお、本実施例では、各タスクの実行が中
断(終了)してプロセッサの制御がOSに移行した時に
スタックオーバーフローの検出を行っているが、スタッ
クポインタレジスタ22の上限値が確実に保持されてい
るタイミングであれば、例えば、監視タスクその他によ
ってその検出処理を行ってもよい。また、スタックオー
バーフローに対応したOSの動作については、システム
の仕様に応じて種々の方法をとることができるが、例え
ば、図5■に示すように、所定の異常処理を行った後に
運用停止としてもよい。
【0024】さらに、スタックに対する書き込み・読み
出し動作に対応したスタックポインタレジスタ22の値
の変化はプロセッサの機種によって異なるので、例えば
、本実施例と反対に書き込み時にその値が増加する場合
には、スタック上限値レジスタ23にはスタックポイン
タレジスタ22の上限値としてその最大値を保持し、そ
の値と各タスクの実行中にスタック上限値レジスタ23
に設定された最終値との大小判定の結果を本実施例と反
対に解釈すればよい。
【0025】
【発明の効果】以上説明したように本発明では、保持手
段がスタックポインタの上限値を検出して保持し、検出
手段は、所定のタイミングでその上限値を検査するので
、従来例のようにスタックポインタを頻繁に監視せず、
かつ専用のハードウエアを用いなくても、スタックポイ
ンタがスタックに予め割り付けられた領域を越えたか否
かを確実に検出できる。
【0026】すなわち、ハードウエアの汎用性を保ち、
かつソフトウエアの過負荷状態を回避してスタックオー
バーフローを確実に検出できるので、デバック中のシス
テムではデバッグ作業の効率化がはかられ、運用中のシ
ステムではその信頼性を向上させることができる。
【図面の簡単な説明】
【図1】本発明の原理ブロック図である。
【図2】本発明の一実施例を示す図である。
【図3】スタックポインタレジスタとスタック上限値レ
ジスタの値の変化を示す図である。
【図4】スタック管理テーブルの構成例を示す図である
【図5】OSの動作を説明する図である。
【符号の説明】
11  スタック 13  検出手段 15  保持手段 20  プロセッサ 21  制御・演算部 22  スタックポインタレジスタ(SP)23  ス
タック上限値レジスタ(SPU)24  比較部 25  選択部

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】  ラストインファーストアウト方式によ
    りアクセスされるスタック(11)と、前記スタック(
    11)の最終書込位置を示すスタックポインタが、前記
    スタック(11)に予め割り付けられた領域を越えたか
    否かを検出する検出手段(13)とを備えたスタックオ
    ーバーフロー検出方式において、前記スタック(11)
    へのアクセス時に更新されるスタックポインタがそれ以
    前のスタックポインタの上限値を越えたときに、そのス
    タックポインタを新たな上限値として保持する保持手段
    (15)を備え、前記検出手段(13)は、所定のタイ
    ミングで前記保持手段(15)に保持されているスタッ
    クポインタの上限値を検査する構成であることを特徴と
    するスタックオーバーフロー検出方式。
JP3027230A 1991-02-21 1991-02-21 スタックオーバーフロー検出方式 Withdrawn JPH04266141A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP3027230A JPH04266141A (ja) 1991-02-21 1991-02-21 スタックオーバーフロー検出方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP3027230A JPH04266141A (ja) 1991-02-21 1991-02-21 スタックオーバーフロー検出方式

Publications (1)

Publication Number Publication Date
JPH04266141A true JPH04266141A (ja) 1992-09-22

Family

ID=12215280

Family Applications (1)

Application Number Title Priority Date Filing Date
JP3027230A Withdrawn JPH04266141A (ja) 1991-02-21 1991-02-21 スタックオーバーフロー検出方式

Country Status (1)

Country Link
JP (1) JPH04266141A (ja)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09114698A (ja) * 1995-10-16 1997-05-02 Nec Corp プログラム開発装置
KR20080036733A (ko) * 2006-10-24 2008-04-29 한국오므론전장주식회사 오동작을 방지하기 위한 임베디드 시스템에서의마이크로컨트롤유닛 및 그 저장공간에서의 스택관리방법
JP2008299665A (ja) * 2007-05-31 2008-12-11 Toshiba Corp 情報処理装置
JP2009020806A (ja) * 2007-07-13 2009-01-29 Fujitsu Component Ltd 情報処理装置、印刷装置、及び、情報処理装置のスタック領域使用状況認識方法
JP2009301259A (ja) * 2008-06-12 2009-12-24 Fujitsu Microelectronics Ltd 情報処理システム、スタックオーバーフローの発生検出方法及びプログラム
FR3068149A1 (fr) * 2017-06-26 2018-12-28 Continental Automotive France Procede de surveillance de l’espace libre d’une pile memoire

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09114698A (ja) * 1995-10-16 1997-05-02 Nec Corp プログラム開発装置
KR20080036733A (ko) * 2006-10-24 2008-04-29 한국오므론전장주식회사 오동작을 방지하기 위한 임베디드 시스템에서의마이크로컨트롤유닛 및 그 저장공간에서의 스택관리방법
JP2008299665A (ja) * 2007-05-31 2008-12-11 Toshiba Corp 情報処理装置
JP2009020806A (ja) * 2007-07-13 2009-01-29 Fujitsu Component Ltd 情報処理装置、印刷装置、及び、情報処理装置のスタック領域使用状況認識方法
JP2009301259A (ja) * 2008-06-12 2009-12-24 Fujitsu Microelectronics Ltd 情報処理システム、スタックオーバーフローの発生検出方法及びプログラム
FR3068149A1 (fr) * 2017-06-26 2018-12-28 Continental Automotive France Procede de surveillance de l’espace libre d’une pile memoire
WO2019002746A1 (fr) * 2017-06-26 2019-01-03 Continental Automotive France Procédé de surveillance de l'espace libre d'une pile mémoire
US11544171B2 (en) 2017-06-26 2023-01-03 Continental Automotive France Method for monitoring the free space of a memory stack

Similar Documents

Publication Publication Date Title
EP0534884B1 (en) Task timeout prevention in a multi-task, real-time system
US6269478B1 (en) Monitoring method for recognizing endless loops and blocked processes in a computer system using task state comparisons
US20050015672A1 (en) Identifying affected program threads and enabling error containment and recovery
US5828890A (en) System for interrupting program operation when an out-of-range value is encountered to correct a data value
JPH04266141A (ja) スタックオーバーフロー検出方式
JP2001318807A (ja) タスク切り替え制御方法及び装置
US5257269A (en) Error controller for use in debugging microprocessor
JPH0245838A (ja) プログラム実行状態監視方法
KR100304355B1 (ko) 실시간시스템을위한스택관리방법
JPH0668725B2 (ja) データ処理システムにおける割込条件に応答する装置及び非同期割込条件に応答する方法
JPH04332055A (ja) プログラム暴走検知方法
JP3124788B2 (ja) 組込型マルチタスクオペレーティングシステムの例外処理方法
JPS61141047A (ja) 障害情報の退避方式
JP2002251299A (ja) プログラムトレース装置
JP2511216Y2 (ja) プロセッサ識別子重複検出装置
JPH07210421A (ja) スレッド環境におけるデバッグ方法
JPH02138644A (ja) 暴走検出方式
KR100449693B1 (ko) Cpu내의쓰기버퍼데이터보존장치및그방법
WO1990005951A1 (en) Method of handling unintended software interrupt exceptions
JPH02239329A (ja) スタック管理システム
JPH0319574B2 (ja)
CN114443330A (zh) 看门狗重启故障确定方法、装置、电子设备及存储介质
JPS6113350A (ja) 中央制御装置の異常検出回路
JP2825589B2 (ja) バス制御方式
JPH03208132A (ja) シングルチツプマイクロコンピユータ

Legal Events

Date Code Title Description
A300 Application deemed to be withdrawn because no request for examination was validly filed

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 19980514