JPS59740A - 回帰呼び出しを含む呼び出しル−チンの共通メモリ領域管理方式 - Google Patents
回帰呼び出しを含む呼び出しル−チンの共通メモリ領域管理方式Info
- Publication number
- JPS59740A JPS59740A JP57110976A JP11097682A JPS59740A JP S59740 A JPS59740 A JP S59740A JP 57110976 A JP57110976 A JP 57110976A JP 11097682 A JP11097682 A JP 11097682A JP S59740 A JPS59740 A JP S59740A
- Authority
- JP
- Japan
- Prior art keywords
- routine
- stack
- memory area
- level
- common memory
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
- G06F9/4484—Executing subprograms
- G06F9/4486—Formation of subprogram jump address
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【発明の詳細な説明】
発明の技術分野
本発明は1機能単位にモジュール化されたプログラムル
ーチン、すなわち手続きを多重レベルで呼び出して、処
理を実行するようなデータ処理システム−において、各
ルーチンが呼び出し毎の処理において使用する共通メモ
リ領域の管理方式に関し、特に回帰呼び出しルーチンの
処理の几めの。
ーチン、すなわち手続きを多重レベルで呼び出して、処
理を実行するようなデータ処理システム−において、各
ルーチンが呼び出し毎の処理において使用する共通メモ
リ領域の管理方式に関し、特に回帰呼び出しルーチンの
処理の几めの。
呼び出しのレベル(深さ)毎にルーチンについての共通
メモリ域を管理するスタックの制御方式に関する。
メモリ域を管理するスタックの制御方式に関する。
技術の背景
ルーチンには、自分自身を呼び出すことが許される回帰
呼び出しルーチンと呼ばれるものがある。
呼び出しルーチンと呼ばれるものがある。
たとえば階乗” t ’it r回侍方程式の形式で演
算処理する場合のルーチンがそれである。
算処理する場合のルーチンがそれである。
回帰呼び出しルーチンの場合には、他のルーチンの呼び
出しの場合と異なり、自分自身を呼び出すことにより多
引数の値と前の呼び出しレベルが使用した共通メモリ領
域への戻り番地とが失われてしまうので、ルーチンの深
さに対応してその共通メモリ領域の先頭にレジスタを恒
久的に割り当てておく必要があっto 第1図に示すようなグログ2ム構造を例にとり。
出しの場合と異なり、自分自身を呼び出すことにより多
引数の値と前の呼び出しレベルが使用した共通メモリ領
域への戻り番地とが失われてしまうので、ルーチンの深
さに対応してその共通メモリ領域の先頭にレジスタを恒
久的に割り当てておく必要があっto 第1図に示すようなグログ2ム構造を例にとり。
更に具体的に説明する。同図において、プログラムブロ
ックの下に接続されている各ブロックは。
ックの下に接続されている各ブロックは。
プログラムにより呼び出されるルーチン(手続き)を表
わしている。I、n、mは、呼び出しのレベル(深さ)
を表わしており、たとえば、プログラムハ、ルーチンA
、B、C@呼び出し、呼び出さレタルーチンAはその処
理過程でルーチンAl、A2を呼び出し、ルーチンA1
は更にその内部においてルーチンA11 、 A12
f呼び出している。また、ルーチンA、 B、 A、、
A2.、 A1.、 A1□は2回帰呼び出し手続き
であり、各ブロックの横から出て頂部に戻る線は1回帰
呼び出しを示している。
わしている。I、n、mは、呼び出しのレベル(深さ)
を表わしており、たとえば、プログラムハ、ルーチンA
、B、C@呼び出し、呼び出さレタルーチンAはその処
理過程でルーチンAl、A2を呼び出し、ルーチンA1
は更にその内部においてルーチンA11 、 A12
f呼び出している。また、ルーチンA、 B、 A、、
A2.、 A1.、 A1□は2回帰呼び出し手続き
であり、各ブロックの横から出て頂部に戻る線は1回帰
呼び出しを示している。
このようなルーチン間の呼び出し関係を考えtとき、こ
れを実現する几めには、以下の(1)乃至(3)の問題
を解決しなければならない。
れを実現する几めには、以下の(1)乃至(3)の問題
を解決しなければならない。
(1) レベル間におけるデータの参照レベル■のル
ーチンA、B、C,・・・で確保したデータをレベル■
のルーチンA1.A、、・・・で参照可能にするための
方法、または同様にレベルHのルーチンで確保したデー
タをレベル■のルーチンで参照可能にするための方法を
用意すること。各レベルで確保するデータの記憶領域は
2回帰的に呼び出されるため、ルーチンの入口でその都
度動的に確保し、出口で解放しなければならない。その
ため、データ記憶領域の番地は、実行時にならないと決
めることができない。
ーチンA、B、C,・・・で確保したデータをレベル■
のルーチンA1.A、、・・・で参照可能にするための
方法、または同様にレベルHのルーチンで確保したデー
タをレベル■のルーチンで参照可能にするための方法を
用意すること。各レベルで確保するデータの記憶領域は
2回帰的に呼び出されるため、ルーチンの入口でその都
度動的に確保し、出口で解放しなければならない。その
ため、データ記憶領域の番地は、実行時にならないと決
めることができない。
(2)呼び出し元′の変更
友とえば、ルーチンA2がルーチンBからも呼び出され
るようになったとき、ルーチンBからルーチンA2が呼
び出し可能になるだけでは済まず、ルーチンAとBとの
両方のデータを、ルーチンA2から参照可能になってい
なげればならない。
るようになったとき、ルーチンBからルーチンA2が呼
び出し可能になるだけでは済まず、ルーチンAとBとの
両方のデータを、ルーチンA2から参照可能になってい
なげればならない。
(3)ルーチンのレベルの変更
tとえは、第2図に示すように、レベル■のルーチン八
を、レベル■のルーチンに変更しなげればならなくなっ
tとき、ルーチンA2ヲ呼び出しているルーチンと、A
2が呼び出しているルーチンとの間のデータ参照、およ
びそれらのルーチンと呼び出し関係のあるルーチン間の
データ参照を解決しなければならない。第2図の場合で
は、ルーチンAからルーチンA、ヲ呼び出すときには、
ルーチンA、t−経由しなければならな〜・。ま’fL
* ’21 t A22を呼び出すときもtA2?経由
しなげればならない。
を、レベル■のルーチンに変更しなげればならなくなっ
tとき、ルーチンA2ヲ呼び出しているルーチンと、A
2が呼び出しているルーチンとの間のデータ参照、およ
びそれらのルーチンと呼び出し関係のあるルーチン間の
データ参照を解決しなければならない。第2図の場合で
は、ルーチンAからルーチンA、ヲ呼び出すときには、
ルーチンA、t−経由しなければならな〜・。ま’fL
* ’21 t A22を呼び出すときもtA2?経由
しなげればならない。
P L / 1やPASCALのような言語では9回帰
呼び出しが可能であり、コンパイラが、上記のようなス
タックあるいはレジスタの管理が行なわれるようにコン
パイル時に処理してくれる。しかし。
呼び出しが可能であり、コンパイラが、上記のようなス
タックあるいはレジスタの管理が行なわれるようにコン
パイル時に処理してくれる。しかし。
SPL/100のような非回帰的な言語では2回帰呼び
出しのために共通メモリ領域への戻り番地管理をコンパ
イラに委ねることができないから。
出しのために共通メモリ領域への戻り番地管理をコンパ
イラに委ねることができないから。
これを、コーディングの際に記述しておかなげればなら
ない。この場合には、 (1)、(2)及び(3)の問
題があるためルーチンの呼び出しの深さやルーチン間の
参照関係を意識してコーディングしなければならず、特
に別の翻訳単位のルーチンとの間に参照関係をもつよう
なときには、構造的に複雑なものとなり9作成上の負担
が太きかつ友。
ない。この場合には、 (1)、(2)及び(3)の問
題があるためルーチンの呼び出しの深さやルーチン間の
参照関係を意識してコーディングしなければならず、特
に別の翻訳単位のルーチンとの間に参照関係をもつよう
なときには、構造的に複雑なものとなり9作成上の負担
が太きかつ友。
発明の目的および構成
本発明の目的は、呼び出しの深さやルーチン間の参照関
係を、コーディング時に意識する必要をなくシ、また共
通メモリ領域参照のためにレジスタが恒久的に占有され
ることをなくして2回帰的な呼び出しルーチンの処理を
簡単に実現することにある。
係を、コーディング時に意識する必要をなくシ、また共
通メモリ領域参照のためにレジスタが恒久的に占有され
ることをなくして2回帰的な呼び出しルーチンの処理を
簡単に実現することにある。
本発明は、そのための構成として9回帰呼出しを多レベ
ルで行なうプログラムの実行を制御する装置において、
ルーチンが呼び出される毎にそのルーチンが属するレベ
ルのルーチンが使用する共通メモリ領域を新たに設定す
る手段と、設定された共通メモリ領域を、ルーチン毎に
、かつ呼び出された順序で先入れ後出し法のスタックを
構成する手段とをそなえ、各スタックは、スタック内の
各共通メモリ領域の先頭アドレスを、直後の呼び出し時
の共通メモリ領域において保持することにより各共通メ
モリ領域間全リンクし、また各スタックの起点アドレス
はプログラムの共通メモリ領域において一括管理するこ
とにより、呼び出しルーチン間でその共通メモリ領域を
参照可能にすることを特徴とするものである。
ルで行なうプログラムの実行を制御する装置において、
ルーチンが呼び出される毎にそのルーチンが属するレベ
ルのルーチンが使用する共通メモリ領域を新たに設定す
る手段と、設定された共通メモリ領域を、ルーチン毎に
、かつ呼び出された順序で先入れ後出し法のスタックを
構成する手段とをそなえ、各スタックは、スタック内の
各共通メモリ領域の先頭アドレスを、直後の呼び出し時
の共通メモリ領域において保持することにより各共通メ
モリ領域間全リンクし、また各スタックの起点アドレス
はプログラムの共通メモリ領域において一括管理するこ
とにより、呼び出しルーチン間でその共通メモリ領域を
参照可能にすることを特徴とするものである。
発明の実施例
以下に9本発明を実施例にしたがって説明する。
第3図は2本発明の1実施例システムの構成図である。
同図において、1は中央処理装置、2はプログラム制御
部、3は記憶装置、4はプログラムA、 5 ハゲログ
2ムAが使用するルーチン群A、。
部、3は記憶装置、4はプログラムA、 5 ハゲログ
2ムAが使用するルーチン群A、。
A21 A119 A12・・・・・・、6はプログラ
ムAの共通域(共通メモリ領域以下同じ)、7はルーチ
ンA1の共通域スタック、8はルーチンA11の共通域
スタック、9はルーチンA、共通域スタックを参照する
几めの始点アドレス、10は同様なルーチンA1、共通
域スタックの始点アドレス、11乃至13は各スタック
内のステージをリンクするアドレスを表わしている。
ムAの共通域(共通メモリ領域以下同じ)、7はルーチ
ンA1の共通域スタック、8はルーチンA11の共通域
スタック、9はルーチンA、共通域スタックを参照する
几めの始点アドレス、10は同様なルーチンA1、共通
域スタックの始点アドレス、11乃至13は各スタック
内のステージをリンクするアドレスを表わしている。
ルーチン群5内の各ルーチンは、第1図で説明し友よう
な2回帰呼び出し可能なルーチンであってよい。各ルー
チンは、呼び出される毎に、その呼び出しレベルでの処
理を実行するための固有の共通域を新しく設定される。
な2回帰呼び出し可能なルーチンであってよい。各ルー
チンは、呼び出される毎に、その呼び出しレベルでの処
理を実行するための固有の共通域を新しく設定される。
設定された各レベルの共通域は、7,8で示すように、
ルーチン毎にまとめられ、一種のLIFO(Last−
in−First −0Ut )形式のスタックとして
形成される。比だし。
ルーチン毎にまとめられ、一種のLIFO(Last−
in−First −0Ut )形式のスタックとして
形成される。比だし。
このスタックは、最上部のステージのみでなく。
内部のステージも参照可能に構成されている。各スタッ
クの始点(入口)アドレスは、プログラムAの共通域6
内の所定位置に、9.10で示すように設定される。一
般に、始点アドレスは、非回帰呼び出しルーチンの共通
域に置くことができる。
クの始点(入口)アドレスは、プログラムAの共通域6
内の所定位置に、9.10で示すように設定される。一
般に、始点アドレスは、非回帰呼び出しルーチンの共通
域に置くことができる。
たとえば、ルーチンA、が■でプログラムAから呼び出
されて処理を進めるうち、ルーチンA12 k呼び出し
、ルーチンA12は更に■でルーチンA1ヲ呼び出す必
要が生じた場合、ルーチンAIのためにスタック7が設
定される。呼び出し■の処理で使用した共通域はスタッ
クの下部に置かれ、現在の処理すなわち呼び出し■の処
理に必要な共通域が、スタックの上部に置かれる。ルー
チンA1は、この呼び出し■共通域を、始点アドレス9
から求めて使用する。呼び出し■共通域は、呼び出し■
共通域に対するリンクアドレス11をもっており、呼び
出し■共通域のデータ、すなわち引数を必要に応じて参
照することができる。同様に、ルーチンA1は、他のル
ーチン、fcとえばA11の任意の共通域凱始点アドレ
ス10i経由して参照し、そのデータを使用することが
できる。
されて処理を進めるうち、ルーチンA12 k呼び出し
、ルーチンA12は更に■でルーチンA1ヲ呼び出す必
要が生じた場合、ルーチンAIのためにスタック7が設
定される。呼び出し■の処理で使用した共通域はスタッ
クの下部に置かれ、現在の処理すなわち呼び出し■の処
理に必要な共通域が、スタックの上部に置かれる。ルー
チンA1は、この呼び出し■共通域を、始点アドレス9
から求めて使用する。呼び出し■共通域は、呼び出し■
共通域に対するリンクアドレス11をもっており、呼び
出し■共通域のデータ、すなわち引数を必要に応じて参
照することができる。同様に、ルーチンA1は、他のル
ーチン、fcとえばA11の任意の共通域凱始点アドレ
ス10i経由して参照し、そのデータを使用することが
できる。
次に、上述した機能を実現するプログラム制御部2の動
作について説明する。プログラム制御部2は、プログラ
ムの実行全システム的にサポートするモニタ機能を果す
。
作について説明する。プログラム制御部2は、プログラ
ムの実行全システム的にサポートするモニタ機能を果す
。
プ□ログラムあるいはルーチンが実行され、その中で他
のルーチンを呼び出す命令、たとえばCALL命令に行
き当り逢とき@、そのルーチンに対して使用可能な共通
域を割当て設定しO9その先頭アドレスをプログラムの
共通域に、始点アドレス(たとえば、9.10)として
設定する■。またすでにそのルーチンにスタックが用意
されていた場合には、ルーチンに新しく割当てた共通域
内の所定位置に、以前にスタック最上部にあつ几共通域
の先頭アドレスをリンクアドレスとして設定し、スタッ
クをブツシュダウンする@。実行中の呼び出しレベルの
ルーチン処理が終了したとき■。
のルーチンを呼び出す命令、たとえばCALL命令に行
き当り逢とき@、そのルーチンに対して使用可能な共通
域を割当て設定しO9その先頭アドレスをプログラムの
共通域に、始点アドレス(たとえば、9.10)として
設定する■。またすでにそのルーチンにスタックが用意
されていた場合には、ルーチンに新しく割当てた共通域
内の所定位置に、以前にスタック最上部にあつ几共通域
の先頭アドレスをリンクアドレスとして設定し、スタッ
クをブツシュダウンする@。実行中の呼び出しレベルの
ルーチン処理が終了したとき■。
スタックをボッグアツブして、最上段の共通域を返却し
、ボッグアツブにより最上段に現われ友共通域の先頭ア
ドレスにより、先の始点アドレスを置き換えるの。
、ボッグアツブにより最上段に現われ友共通域の先頭ア
ドレスにより、先の始点アドレスを置き換えるの。
このよう罠、プログラムの共通域におかれ几始点アドレ
ス群により、各ルーチン毎の最新共通域を参照すること
ができ、また、各ルーチン毎のスタックにおいてそのリ
ンクアドレス金辿ることにより任意のレベルの共通域を
参照することができる。この場合9回帰呼び出しルーチ
ンであっても。
ス群により、各ルーチン毎の最新共通域を参照すること
ができ、また、各ルーチン毎のスタックにおいてそのリ
ンクアドレス金辿ることにより任意のレベルの共通域を
参照することができる。この場合9回帰呼び出しルーチ
ンであっても。
その呼び出しレベル毎に共通域がスタック化されるため
、参照に混乱が生じることは1.cい。
、参照に混乱が生じることは1.cい。
発明の効果
以上述べたように1本発明によれば、各ルーチンは、呼
び出しレベル毎の共通域スタツクに対する始点アドレ、
スから、常に最新の共通域を参照することができるので
、各ルーチンは、ルーチンのレベルやレベルに関する位
置付けを考えずにプログラムを組むことができる。また
、レベル毎の共通域は、第2図で説明したようなルーチ
ンレベルの変更によってもそれほど大きく変更されるこ
とはない。し友がって、これ2INOLUDgファイル
として共通に組み込むことにより、翻訳単位全意識しな
いでプログラムを組むことができる。
び出しレベル毎の共通域スタツクに対する始点アドレ、
スから、常に最新の共通域を参照することができるので
、各ルーチンは、ルーチンのレベルやレベルに関する位
置付けを考えずにプログラムを組むことができる。また
、レベル毎の共通域は、第2図で説明したようなルーチ
ンレベルの変更によってもそれほど大きく変更されるこ
とはない。し友がって、これ2INOLUDgファイル
として共通に組み込むことにより、翻訳単位全意識しな
いでプログラムを組むことができる。
第1図および第2図はプログラムのルーチン呼び出し関
係を示す説明図、第3図は本発明実施例システムの構成
図である。 図中、1は中央処理装置、2はグ四グラム制御部、3は
記憶装置、4はプログラムA、5はルーチン群、6はプ
ログラムAの共通域、7はルーチンA1の共通域、8は
ルーチンAllの共通域、9および10は始点アドレス
、11乃至13はリンクアドレスを表わしている。 特許出願人 富士通株式会社 代理人弁理士 長谷用 文 廣 (外1名) す1n 才2図 才3m
係を示す説明図、第3図は本発明実施例システムの構成
図である。 図中、1は中央処理装置、2はグ四グラム制御部、3は
記憶装置、4はプログラムA、5はルーチン群、6はプ
ログラムAの共通域、7はルーチンA1の共通域、8は
ルーチンAllの共通域、9および10は始点アドレス
、11乃至13はリンクアドレスを表わしている。 特許出願人 富士通株式会社 代理人弁理士 長谷用 文 廣 (外1名) す1n 才2図 才3m
Claims (1)
- 【特許請求の範囲】 回帰呼出しを多レベルで行なうプログラムの実行全制御
する装置において、ルーチンが呼び出される毎にそのル
ーチンが属するレベルのルーチンが使用する共通メモリ
領域を新たに設定する手段と、設定された共通メモリ領
域を、ルーチン毎に。 かつ呼び出され友順序で先入れ後出し法のスタックを構
成する手段と全そなえ、各スタックは、スタック内の各
共通メモリ領域の先頭アドレスを。 直後の呼び出し時の共通メモリ領域において保持するこ
とにより各共通メモリ領域間全リンクし。 47を各スタックの起点アドレスはプログラムの共通メ
モリ領域において一括管理することにより。 呼び出しルーチン間でその共通メモリ領域を参照可能圧
することを特aとする呼び出しルーチンの共通メモリ領
域管理方式。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP57110976A JPS59740A (ja) | 1982-06-28 | 1982-06-28 | 回帰呼び出しを含む呼び出しル−チンの共通メモリ領域管理方式 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP57110976A JPS59740A (ja) | 1982-06-28 | 1982-06-28 | 回帰呼び出しを含む呼び出しル−チンの共通メモリ領域管理方式 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPS59740A true JPS59740A (ja) | 1984-01-05 |
| JPS6156815B2 JPS6156815B2 (ja) | 1986-12-04 |
Family
ID=14549254
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP57110976A Granted JPS59740A (ja) | 1982-06-28 | 1982-06-28 | 回帰呼び出しを含む呼び出しル−チンの共通メモリ領域管理方式 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPS59740A (ja) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5205383A (en) * | 1990-12-11 | 1993-04-27 | Nissin Kocyo Co., Ltd. | Reaction force type disk brake |
-
1982
- 1982-06-28 JP JP57110976A patent/JPS59740A/ja active Granted
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5205383A (en) * | 1990-12-11 | 1993-04-27 | Nissin Kocyo Co., Ltd. | Reaction force type disk brake |
Also Published As
| Publication number | Publication date |
|---|---|
| JPS6156815B2 (ja) | 1986-12-04 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| EP0604431B1 (de) | Verfahren zur adaption einer objektorientierten applikation | |
| US5410703A (en) | System for changing software during computer operation | |
| EP0387172A2 (en) | Procedure call interface | |
| JPH02201653A (ja) | アプリケーシヨン・プログラム・インターフエース方法 | |
| Queinnec et al. | Design of a concurrent and distributed language | |
| Baker et al. | Implementing ada exceptions | |
| JPS6156815B2 (ja) | ||
| JPH0656581B2 (ja) | オブジェクト指向プログラミング方式 | |
| JP3060481B2 (ja) | セグメントのロールイン/ロールアウト方式 | |
| DE69219538T2 (de) | Verbessertes system und verfahren zum feststellen von kreuzweisen rufbefehlen und speicherdaten, insbesondere zur code-schnittstellen-ausführung im mehrfachen code-ausführungs- und fehlersuchsystem einer mehrrechnerarchitektur | |
| US20050005264A1 (en) | Computer programming object externalization | |
| JPS63145551A (ja) | フアイル属性定義変更方式 | |
| JPS59123939A (ja) | 関数呼出制御方式 | |
| JP2852402B2 (ja) | プログラム開発装置 | |
| Mitchell et al. | LC2: A language for conversational computing | |
| JPH04153737A (ja) | コンパイル更新情報出力方式 | |
| Elz et al. | An implementation of Janus | |
| JP2502162B2 (ja) | インライン展開処理方式 | |
| O'Kane | An expert systems facility for Mumps | |
| JPH0540631A (ja) | 型推論装置 | |
| JPS63180129A (ja) | プログラム結合方式 | |
| Lee et al. | First-class extents | |
| JPS62171036A (ja) | コンパイラのモジユ−ル共用方式 | |
| JPH02194439A (ja) | プログラム実行方式 | |
| JPH0370062A (ja) | 端末機リモートメンテナンスシステム |