JPH10232785A - 不連続な実行時スタックを動的にサイジングするための方法及び装置 - Google Patents

不連続な実行時スタックを動的にサイジングするための方法及び装置

Info

Publication number
JPH10232785A
JPH10232785A JP9295611A JP29561197A JPH10232785A JP H10232785 A JPH10232785 A JP H10232785A JP 9295611 A JP9295611 A JP 9295611A JP 29561197 A JP29561197 A JP 29561197A JP H10232785 A JPH10232785 A JP H10232785A
Authority
JP
Japan
Prior art keywords
stack
function
chunk
memory
compiled
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
JP9295611A
Other languages
English (en)
Inventor
Dean R E Long
アール. イー. ロング ディーン
Alan G Bishop
ジー. ビショップ アラン
Nedim Fresko
フレスコ ネディム
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.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
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 Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of JPH10232785A publication Critical patent/JPH10232785A/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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • G06F9/4486Formation of subprogram jump address
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99952Coherency, e.g. same view to multiple users
    • Y10S707/99953Recoverability
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99956File allocation

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)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 必要に応じて、あるいは、新規コンパイラを
必要とすることなく仮想メモリをサポートするために充
分なハードウェアが存在しないとき、追加スタックスペ
ースを有効に関数に割り当てること。 【解決手段】 コンパイルされた関数を実行するための
追加コンピュータメモリスタックスペース割当方法は、
コンパイルされた関数を含むスタック検出関数をコール
し、コンパイルされた関数を実行するために追加コンピ
ュータメモリスタックスペースが必要か否かを決定す
る。追加コンピュータメモリスタックスペースは必要な
いと決定した場合には、コンパイルされた関数がコール
され、実行される。しかしながら、追加コンピュータメ
モリスタックスペースが必要であると決定した場合に
は、コンピュータメモリスタックとは連続していないコ
ンパイルされた関数を実行するための追加コンピュータ
メモリスタックスペースを割り当てる。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、一般的に、コンピ
ュータメモリの割当てに用いるためのソフトウェア、方
法、及び装置に関する。さらに詳細には、本発明は、不
連続な(non-contiguoue)メモリスタック空間(スペー
ス、space)を動的に割り当てるためのソフトウェア、
方法、及び装置に関する。
【0002】
【従来の技術】コンピュータシステムの実行プログラ
ム、あるいはスレッド(thread)は、実行プログラムに
よって使用される引数、及びローカル変数を格納するた
めに、しばしば、ランダムアクセスメモリ(RAM)に
関連付けられているスタックスペースを要求する。プロ
グラムは、一般的に、「コール・チェイン(call chai
n)」、すなわち一連の関数コールを含んでいる。コー
ル・チェイン内の各関数(機能、function)は、一般的
に、メモリの「フレーム」、例えばページまたは領域を
スタック上に有している。コール・チェインの深さが増
加するに連れて、必要とされるスタックスペースの量も
増大する。すなわち、プログラムによって成された関数
コールの深さが増加するにつれて、プログラムによって
要求されるスタックメモリ量が増大する。
【0003】スタックスペースの割当のために一般的に
用いられる1つの方法は、予測される全てのコール・チ
ェインのために十分に大きい物理メモリの連続片(cont
iguous piece)の静的な割当を伴う。大きな物理メモリ
の連続片は、予測される全コール・チェインのための十
分なスタックスペースを提供する目的に役立つが、コー
ル・チェインが自身に割り当てられた全スタックを使用
することは希なので、大量の物理メモリの割り当てるこ
とは、スタックスペースを浪費する可能性がある。一般
的に、コンピュータシステムに関連付けられている物理
メモリ量は限られているので、特定のコール・チェイン
のための物理メモリ量を確保することは、しばしばシス
テムリソースの非効率的な使用であることを証明してい
る。
【0004】プログラムの即時の要求に適応させるため
にスタックサイズが変わるような動的なスタックのサイ
ジング(sizing)は、実質的なメモリの節約をもたらし
得る。スタックの動的なサイジング、あるいは「グロー
イング(growing)」の一般的な手法には、仮想メモリ
プロテクション(仮想記憶保護、virtual memory prote
ction)の使用が伴われる。仮想メモリプロテクション
を利用するスタックは、仮想(論理)メモリ内では連続
しているが、物理メモリ内では必ずしも連続していな
い。一般に、スタックが、未だアクセスされていない保
護されたページまたは保護されたフレームに対してアク
セスが要求されるポイントまで増加すると、障害(faul
t)が生じる。障害が発生すると、仮想メモリ内のペー
ジに対応する物理メモリが割り当てられ、ページに関連
する物理メモリを使用してプログラムの実行が起こり得
る。仮想メモリプロテクションを有するスタックは、特
定のコール・チェインに適応させるために動的に増加す
るが、一旦、ページがもはや必要とされなくなると、こ
のようなスタックページ、例えばスタックページに対応
する物理メモリをコンピュータシステムに常に戻すとは
限らない。したがって、一旦、所与の関数のために追加
のスタックスペースが動的に割り当てられると、その追
加スタックスペースが再び必要とされるか否かに関係な
く、その追加のスタックスペースは関数のために割り当
てられたまま残されることがあるので、このような手法
は、しばしば、非効率的な物理メモリの使用を証明して
いる。
【0005】
【発明が解決しようとする課題】一般的に、不連続なス
タックは、仮想メモリをサポートするために利用可能な
ハードウェアが充分に存在しない場合に用いられる。こ
れらのスタックはまた、しばしば、物理メモリの非効率
的な割当を低減するために用いられる。不連続メモリ内
で増加し得るスタックの使用は、また、コンパイラがス
タックのオーバフロー(overflow)を検出する追加コー
ドをプログラム内およびその関連する関数内に発生する
ように、プログラム及びそのプログラムに関連する関数
をコンパイルするために用いられるコンパイラの変更を
伴う。この追加コードは、特別な関数のプロローグコー
ド、またはエピローグコードであると考えられ、また改
良されたコンパイラを使用してコンパイルされた各関数
に追加される。ある場合には、いくつかの関数は追加の
スタックスペースを必要とすることが全く無いので、関
数に対するスタックオーバフローのための検出を追加す
ることは不要であり、したがって非効率的である。
【0006】スタックオーバフローが検出される場合、
または所与の関数についてスタックオーバフローが切迫
しているような場合には、新規なスタックチャンク(st
uckchunk)、例えば「カレント(current)」スタック
に関して隣接していない(non-contiguous)スタック部
分を割り当てるためにコードが実行される。一旦、新規
スタックチャンクが割り当てられると、新規スタックチ
ャンクを要求した関数の実行を新規スタック上で継続す
る。新規スタックチャンクは、もはや必要でなくなる
と、コンピュータシステム全体に(overall)戻され得
る。しかしながら、不連続メモリ内において増加する
(grow)スタックが、もはや必要でなくなるとそれらを
動的に割り当てできると共に、それらをコンピュターシ
ステム全体に対して容易に戻すことができる一方で、こ
れらスタックを可能にするために用いられるコンパイラ
の変更は、一般的に複雑である。さらに、コンパイラは
一般的にプラットフォームに固有なので、その上で不連
続スタックが実現されるべき各プラットフォームに関連
するコンパイラは、前述した追加コードを含むように修
正されなければならない。
【0007】本発明は、上記の従来技術の問題点を解決
するためになされたものであり、新規コンパイラを必要
とすることなく、必要に応じて、または仮想メモリをサ
ポートする充分でないハードウェアが存在するとき、追
加スタックスペースを関数に割り当てるための効率的な
方法、装置、及びプラットフォーム非依存型ソフトウェ
アを提供することを目的とする。
【0008】
【課題を解決するための手段】上記目的を達成するため
に請求項1に記載の発明に係る第1のコンピュータメモ
リスタックチャンク内に配置されているコンパイルされ
た関数を実行するための追加コンピュータメモリスタッ
クスペースを割り当てるための方法は、コンパイルされ
た関数を含むスタック検出関数コールステップを備え
る。そして、コンパイルされた関数を実行するために追
加コンピュータメモリスタックスペースが必要か否かが
決定される。コンパイルされた関数を実行するために追
加コンピュータメモリスタックスペースは必要ないと決
定された場合には、コンパイルされた関数がコールさ
れ、実行される。しかしながら、コンパイルされた関数
を実行するために追加コンピュータメモリスタックスペ
ースが必要であると決定された場合には、コンパイルさ
れた関数を実行するための、第1のコンピュータメモリ
スタックチャンクとは連続していない追加コンピュータ
メモリスタックスペースが割り当てられる。
【0009】また、追加コンピュータメモリスタックス
ペース割当ステップは、コンパイルされた関数のための
第2のスタックチャンクの割当てを含んでもよく、さら
に、第1のスタックチャンクと第2のスタックチャンク
との間に透過的な境界を生成するために構成されるバッ
ファフレーム関数をコールするステップと、第2のスタ
ックチャンクを使用してコンパイルされた関数をコール
するために構成されるトランポリン関数をコールするス
テップと、スタックチャンク上にてコンパイルされた関
数を実行するステップと、を備えてもよい。さらに、第
2のスタックチャンクと関連付けられているスタック保
護ロックを解除するステップと、を備えるてもよい。
【0010】また、請求項9に記載の発明に係る第1の
コンピュータメモリスタックチャンク内に配置されてい
るコンパイルされた関数を実行するための追加コンピュ
ータメモリスタックスペースを割り当てるためのプログ
ラムを記録した記録媒体は、コンパイルされた関数を含
むスタック検出関数をコールするステップと、コンパイ
ルされた関数を実行するために追加コンピュータメモリ
スタックスペースが必要か否かを決定するステップと、
コンパイルされた関数を実行するために追加コンピュー
タメモリスタックスペースは必要ないと決定された場
合、コンパイルされた関数をコールするステップと、コ
ンパイルされた関数を実行するために追加コンピュータ
メモリスタックスペースが必要であると決定された場
合、コンパイルされた関数を実行するための、コンピュ
ータメモリスタックと連続していない前記追加コンピュ
ータメモリスタックスペースを割り当てるステップと、
を備えるプログラムを記録する。
【0011】さらに、請求項17に記載の発明に係る第
1のコンピュータメモリスタックチャンク内に配置され
ているコンパイルされた関数を実行するための追加コン
ピュータメモリスタックスペースを割り当てるために構
成されているコンピュータシステムは、少なくとも1つ
の実行用コンパイルされた関数を格納すると共に、少な
くとも1つのメモリスタックチャンクを有する少なくと
も1つのメモリスタックスペース内に配列されるために
構成されているコンピュータメモリと、スタック検出関
数を形成するためにコンパイルされた関数にスタック検
出関数発生器と、スタック検出関数を実行すると共に、
コンパイルされた関数を実行するために追加メモリが必
要か否かを決定するメモリマネジャと、を備える。
【0012】ここで、メモリマネジャは、メモリマネジ
ャがコンパイルされた関数を実行するために追加メモリ
が必要であると決定した場合、第2のスタックチャンク
を割り当てるために構成されていることが好ましく、ま
た、第1のスタックチャンクと第2のスタックチャンク
との間に透過的な境界を生成するために適合されている
バッファフレームをメモリスタックスペース内に生成す
るために適合されていることが好ましい。さらに、メモ
リマネジャは、ロングジャンプが発生したと決定された
場合には、使用中でない前記第1のスタックチャンク上
に割り当てられたスタックチャンクを除去すると共に、
使用中でない第1のスタックチャンク上のスタックチャ
ンクをメモリアロケータに対して戻すために適合されて
いることが好ましい。
【0013】
【発明の実施の形態】以下、本発明に係るスタックスペ
ースを動的に割り当てるための方法及び装置のいくつか
の発明の実施の形態を図面を参照して説明する。
【0014】図1はコンピュータスタックの概念図であ
る。コンピュータスタック又はスタックチャンク100
は、一般的にコンピュータシステムに関連付けられてい
るコンピュータメモリの一部である。スタックチャンク
100は、通常、コンピュータシステムのランダムアク
セスメモリ(RAM)内に配置され、フレーム、例えば
フレーム102に含まれるデータのリストと考えられ得
る。スタックチャンク100は、スタックチャンク10
0に関連するコール・チェイン内の関数の数に依存し
て、任意の数のフレーム又はページを含み得る。フレー
ム102は、特定の関数に関連する、例えばローカル変
数のようなデータを含むスタックチャンク100上のメ
モリ領域である。例によれば、フレーム102は、図3
及び図4を参照して後述するように、スタック検出(st
ack-checking)関数に関連するローカル変数を含むこと
ができ、例えばフレーム102はスタック検出関数フレ
ームであり得る。
【0015】コンピュータシステムによって当初割り当
てられるようなスタックチャンク100は、所定のサイ
ズである。スタックチャンク100に対するメモリの割
当は、「コール・チェイン」又は一連の関数コールの予
測サイズに依存し得る。代わりに、スタックチャンク1
00のサイズは、利用可能な連続するメモリの量によっ
て制約を受け得る。関数のコールチェインが実行される
と、コールチェインに関連する各関数は、全ての当初割
り当てられたスタックスペース、例えば連続しているス
タックスペースが使用されるか、又は当初に割り当てら
れた全スタックスペースの使用が切迫するまで、スタッ
クチャンク100上の関連フレームを利用する。スタッ
クチャンク100がより多くのメモリを要求すると、不
連続メモリがスタックチャンク100に割り当てられ得
る。
【0016】図2は不連続スタック、すなわち不連続メ
モリ内に存在するスタックの概念図である。図1を参照
して既述したように、スタックチャンク100は、任意
の数のフレームを含み得る。しかしながら、スタックチ
ャンク100に対して当初に割り当てられているよりも
多くのメモリが要求されると、同様にRAM内に配置さ
れているメモリ104の不連続な部分がスタックチャン
ク100へ割り当てられ得る。スタックチャンク100
は、スタックチャンクであると同様に考えられるメモリ
104の不連続な部分と一緒に全体にわたりスタック1
10を形成する。
【0017】プログラムの一部である各関数がスタック
検出関数、すなわち追加のメモリをスタックのために確
保すべきか否かを決定するために用いられる関数をコー
ルするようにプログラムを調整できる一方で、プログラ
ムのコール・チェインの一部分である各関数を検出する
ことはしばしば非能率的である。いくつかの関数は、追
加のメモリを必要とする傾向に全くないので、追加のス
タックチャンクが割り当てられるベきか否かを決定する
ために全ての関数を検出することは必要ない。どのコー
ルチェインおよび関数が追加スタックスペースの割当を
要求しそうであるかに関して決定をなすために、あらゆ
る適した方法が用いられ得る。追加のスタックスペース
を要求しそうなコールチェイン内の関数は、スタック検
出関数に対するコールを含むために変更され得る。すな
わち、関数が関連付けられるコール・チェインのための
メモリを確保するために、十分なスタックスペースが必
要であるか否かの検出が特定の関数内に追加され得る。
より詳しく説明すると、スタックが増加する(grow)こ
とを要求しそうなコールチェイン内の関数は、残りの利
用可能なスタックスペース上で検出を実行するスタック
検出関数によって置き換えられ得る。これらの関数は、
異なるコールチェインに対する「フック(hook)」、ま
たはアクセスポイントとして役立ち得ることは理解され
るべきである。
【0018】発明の実施の形態の1つでは、スタック検
出関数は、ラッパ(wrapper)関数を形成するために、
他のコードと共に包まれ(wrap)得る。より多くのスタ
ックスペースを必要としそうなコールチェインのために
だけ利用可能な残存するスタックスペースを検出するこ
とによって、全関数の検出に関連する非能率性が大幅に
低減される。さらに、全関数がスタック検出コードを含
むように全関数を再コンパイルする代わりにスタック検
出関数を使用することによって、コンパイラが割り増し
の(extra)スタック検出コードを発生するようにコン
パイラを修正することに原因があると考えられる複雑さ
が軽減される。
【0019】次に図3及び図4を参照して、本発明に係
る実施の形態に従って不連続スタックスペースの割当を
潜在的に必要とし得る関数を実行するための方法を記述
する。「実際の」関数、すなわちプログラムに関連する
コールチェインの一部であるコンパイルされた関数(コ
ンパイル済関数)を実行するプロセスはステップ202
にて開始し、ステップ204にてスタック検出関数がコ
ールされる。発明の実施の形態の1つでは、スタック検
出関数は、実際の関数(actual function)、つまり目
標(target)関数のためのラッパ関数の一部である。実
際の関数がパラメータ又は引数と共に最初にコールされ
た場合には、スタック検出関数が同一パラメータと共に
コールされることは理解されるべきである。一般的に、
スタック検出関数は、スタック検出関数が関連付けられ
ている実際の関数に付随する情報を使用して構築され
る。発明の実施の形態の1つでは、実際の関数によって
要求されるスタックのサイズは、実際の関数のためのラ
ッパ関数を生成するためにマクロと共に用いられる。
【0020】ステップ206では、現在のところ利用可
能なスタックスペースが、実際の関数の実行に適当か否
かに関して決定がなされる。この決定は、実際の関数の
実行のみならず、実際の関数によってコールされ得る全
関数の実行に適当なスタックスペースがあるか否かを決
定するための検出を伴う。追加のスタックスペースは割
り当てられるべきではないと決定された場合、処理フロ
ーは実際の関数がコールされるステップ208に移行す
る。実際の関数がコールされた後、実際の関数実行する
処理がステップ210にて終了する。
【0021】ステップ206における決定が適当なスタ
ックスペースが存在しないということである場合には、
処理フローは、スタック検出関数に対するコールに渡さ
れる(passed)あらゆる引数またはパラメータを保持す
るためにデータ構造が生成されるステップ211に移行
する。データ構造はまた、実際の関数に関連付けられて
いるあらゆるリターン値を保持するように意図される。
ステップ211にてデータ構造が生成された後、スタッ
ク検出関数に対するコールに渡されるあらゆるパラメー
タがデータ構造内にコピーされる。いくつかの発明の実
施の形態において、実際の関数及びスタック検出関数
は、コールに渡されるパラメータを全く要求しないこと
は理解されるべきである。
【0022】ステップ213では、原スタックチャンク
と共に用いられる新しい離れてる(discontiguous)ス
タックスペース、すなわち新しいスタックチャンクが割
り当てられる。原スタックチャンクと新しいスタックチ
ャンクとの間におけるインタフェースのための1つの構
成が図5を参照して記述される。一般的に、割り当てら
れたスタックスペースの量は、実際の関数によって要求
されそうなスタックスペースの量に依存する。すなわ
ち、スタックスペースは、実際の関数の要求に基づき動
的にサイズが変更される。発明の実施の形態の1つで
は、割り当てられる新規スタックチャンクは、割り当て
られていないスタックチャンクのメモリアロケータまた
はフリーリスト(free list)から取得される。新規ス
タックスペースが割り当てられた後、「ロングジャン
プ」のためにジャンプバックポイント(jump-back poin
t)がステップ214にて設定される。当業者に周知で
あるように、ロングジャンプは、スタックのあるレベル
におけるコールからスタックの深いレベルにおけるコー
ルへのジャンプである。ジャンプバックポイントは、1
つのスタックチャンク、例えば実際の関数が関連付けら
れている原スタックに関連づけられたポイントであり、
新規スタックチャンクからそのポイントへそのスタック
チャンクに対するリターンがなされ得る。ジャンプバッ
クポイントは、当業者によって理解されるように、一般
的にスレッド固有の(thread-specific)データ構造、
または、スレッド専用の(thread-private、スレッド私
用の)データ構造に配置される。全てのコールチェイン
がジャンプバックポイントを要求するわけではないが、
ジャンプバックポイントは一般的に、必要とされる事象
内に生成されることは理解されるべきである。
【0023】ジャンプバックポイントがステップ214
にて生成された後、新規スタック上の実際の関数に対し
てコールがステップ216にてなされる。一般に、一
旦、実際の関数に対するコールがなされると、ステップ
211にて生成された構造内へコールからのあらゆるリ
ターン値がコピーされる。新規スタック上に実際の関数
のコールすることに関連するステップが図6を参照して
記述される。処理フローは、図4に図示するステップ2
16から、実際の関数に対するコールがなされたとき原
スタックチャンクに対するロングジャンプが生じるか否
かに関して決定がなされるステップ218に進行する。
原スタックチャンクに対するロングジャンプが生じたと
決定される場合には、ステップ220にて、当業者に周
知である方法を用いて、原スタックチャンクの上に(ab
ove)割り当てられた使用されていないスタックチャン
クが除去(clean up、かたづける)される。原スタック
チャンクの上に(above)割り当てられた使用されてい
ないスタックチャンクが除去された後、スタックチャン
クがステップ222にてメモリアロケータに戻される。
代わりに、スタックチャンクはフリーリストに戻されて
もよい。フリーリストのために割り当てられたメモリ
は、あらゆる適したアプリケーションに対して再割り当
てされ得るが、フリーリストは一般的にスタックチャン
ク内での使用のためにのみメモリを再割り当てするため
に用いられる。「遅延再生(lazy reclamation)」方式
または新規に割り当てられたスタックチャンクの全てが
除去されない選択除去(selective clean up)方式で
は、このステップにて除去が実行されるないことは理解
されるべきである。
【0024】ステップ222から、処理フローはステッ
プ224へ進み、そこでは実際の関数に所属する(appr
opriate)スタックチャンク内にあると共に、ユーザ提
供の(user-provided)コード内に格納される参照付け
られているユーザ生成の(user-created)ジャンプバッ
クポイントに、ジャンプがなされる。すなわち、ユーザ
生成のジャンプバックポイントを含むスタックチャンク
内のフレームへジャンプがなされる。先にステ ップ
218にて決定されたように、実際の目的地へロングジ
ャンプが要請される。しかしながら、使用されていない
スタックチャンク、つまりステップ213にて生成され
実際の目的地を含まないあらゆるスタックチャンクを除
去することを可能にするために、実際の目的地からジャ
ンプバックポイントまで迂回するためにロングジャンプ
がなされる。使用されていないスタックチャンクが除去
され、そして割当られたメモリに戻された後、実際の目
的地に対するジャンプがなされる。それから、スタック
検出に伴う実際の関数を実行する処理が、ステップ21
0で終了する。
【0025】ステップ218にて原スタックに対するロ
ングジャンプは生じなかったと決定される場合には、ス
テップ213にて割り当てられた新規なスタックチャン
クがステップ226に除去される。ある発明の実施の形
態では、全ての新規スタックチャンクが除去される。他
の実施の形態では、スタックチャンクを要求し得る別の
関数コールを見越して、いくつかのスタックチャンクは
除去されないことがある。除去されたスタックチャンク
は、ステップ228にてメモリアロケータ、フリーリス
ト等に戻される。一旦、スタックチャンクが戻される
と、ステップ230にて実際の関数からスタック検出関
数へのリターンがなされる。最後に、ステップ232に
て、実際の関数のあらゆるリターン値が、ステップ21
1にて生成された構造からコピーされる。そして、スタ
ック検出を含む実際の関数を実行する処理は、210に
て完了する。
【0026】原スタック及び原スタックが関連付けられ
ている新規スタックは、あらゆる適した構成を有し得
る。本発明の発明の実施の形態に従う不連続なコンピュ
ータスタックを模式的に示す、ふさわしい1つの構成が
図5に図示されている。コンピュータスタック302
は、原スタックチャンク306と新規スタックチャンク
308とを備えている。スタック302は、2つの離れ
ている部分、すなわち原スタック306及び新規スタッ
ク308により構成されるように図示されているが、あ
らゆる数の隣接しない部分を備え得ることは理解される
べきである。
【0027】原スタックチャンク306は、スタック検
出関数により使用されるローカル変数、すなわち原スタ
ックチャンク306に対してローカルである変数を保持
するスタック検出関数フレーム312を含む。図4を参
照して上述したように、スタック検出関数は、一般的に
スタックオーバフローが発生しているか、あるいは、切
迫しているか否かを決定するために用いられる。スタッ
ク検出関数は、一般的にスタックスペースを割り当てる
ために、使用中でないスタックチャンクの除去を実行す
るために用いられるコードを含む「スタックリフレクタ
(stack reflector)」関数にアクセスする。スタック
リフレクタ関数によって用いられるローカル変数は、ス
タックリフレクタフレーム314に含まれる。
【0028】既述の発明の実施の形態では、スタックリ
フレクタフレーム314内に含まれる変数は、ポインタ
が原スタックチャンク306と新規スタックチャンク3
08との間を移動しつつある間に、ロックに関連付けら
れているスタックに他のスレッドがアクセスすることを
一時的に防ぐロックである「スタック検出ロック」をロ
ックするために用いられる変数を含む。原スタックチャ
ンク306と新規スタックチャンク308との間を移動
させられる1つのポインタは、一般的にカレントスタッ
クチャンクポインタとして知られている。カレントスタ
ックチャンクポインタは、一般的に使用中のスタック、
例えばスタック302、を追跡する。スタックチャンク
に関連付けられているフレームポインタ、例えば新規ス
タックチャンク308、は使用中の新規スタックチャン
ク308のカレントフレームの位置を識別する。各スタ
ックチャンクのためのフレームポインタを含む実施の形
態では、使用中でないスタックチャンクに対して、その
スタックチャンクに関連づけられたフレームポインタ
は、スタックチャンクの「上部の(top)」フレーム又
は最も最近使用されたスタックチャンクのフレームを
「指し示す」、つまり識別する。さらに、各フレームは
フレーム内のカレントスタックポインタの最新位置を保
管する(save)フレームスタックポインタを含む。
【0029】いくつかのスタックチャンクが含まれてい
る実施の形態に対しては、スタックチャンクのコンテキ
スト構造は、現在使用中のスタックチャンクを含む全体
にわたるスタックの一部であるスタックチャンクを識別
するために用いられ得ることは理解されるべきである。
このスタックチャンクのコンテキスト構造は、カレント
スタックチャックポインタによって先に指し示されたス
タックチャンクを識別する。ロングジャンプがなされる
ポイントはまた、スタックチャンクのコンテキスト構造
内にて識別され得る。
【0030】あらゆる適切なロックであり得るスタック
保護ロック、例えばスケジューラロックは、カレントス
タックチャンクポインタを原スタックチャンク306と
新規スタックチャンク308との間で移動させている間
に、他のスレッドが新規スタック308及びスタックチ
ャンク306にアクセスすることを防止するという目的
にかなう(serve)。ロックがスケジューラロックであ
る実施の形態では、短期間、マルチスレッドされた(mu
lti-threaded)実行が防止される。
【0031】スタックリフレクタ関数がスタックチャン
クを割り当てると、スタックリフレクタ関数は不連続ス
タックチャンク、例えば新規スタックチャンク308、
を割り当てできる。新規スタックチャンク308及び原
スタックチャンク306が、実メモリ内で隣接していな
いが、バッファフレーム316は、新規スタックチャン
ク308と原スタックチャンク306との間の機能リン
ケージとして役に立つ。すなわち、バッファフレーム3
16は、基本的に新規スタックチャンク308と原スタ
ックチャンク306との間の境界を透過的に若しくは透
明に(トランスペアレント、trasparent)する。バッフ
ァフレーム316に関連するバッファフレーム関数は、
新規スタックチャンク308上で実行中である関数を呼
び出す(invoke)。このバッファフレーム関数は、カレ
ントスタックポインタと先のスタックポインタとの間に
おける隠された不連続性を持って実際の関数の実行を可
能にする。さらに、実際の関数は、不連続なスタック3
06、308間になされる区別なしに実行し得る。新規
スタックチャンク308の呼び出しプロセスには、原ス
タックチャンク306から新規スタックチャンク308
へスタックポインタを移動すること、及び新規スタック
チャンク308に関連するフレームポインタをバッファ
フレーム316へ移動することが含まれる。
【0032】トランポリン関数フレーム318に関連す
る「トランポリン」関数は、スケジューラロックを解除
するためにバッファフレーム関数によって呼び出され、
実際の関数フレーム322に関連する実際の関数が呼び
出されることを可能にする。トランポリン関数は、一般
的に、スタックリフレクタ関数の作業を続行する。図3
及び図4を参照して前述したように、引数はデータ構造
またはメモリ構造を使用して実際の関数に渡され得る。
データ構造は、実際の関数に対するあらゆる引数、及び
実際の関数に対するコールの結果得られるあらゆるリタ
ーン値のトランスポート(transport)として役立つ。
【0033】一般に、トランポリン関数は、プロローグ
及びエピローグを含む。プロローグはあらゆるコードを
含み得るが、既述の実施の形態では、プロローグは「ロ
ックコード」またはスタック保護ロックをロックするた
めに用いられるコードを含んでいる。同様にして、エピ
ローグもまたあらゆるコードを含み得るが、既述の実施
の形態では、エピローグは、スタック保護ロックをアン
ロックする(unlock)ために用いられるコードを含む。
【0034】既述の実施の形態では、一旦、トランポリ
ン関数がスタック保護ロックをアンロックするプロロー
グコードを実行すると、引数またはパラメータを実際の
関数に対するコール内へコピーするために、引数及びリ
ターン値コピー関数フレーム320に含まれるローカル
変数を使用する引数及びリターン値コピー関数が呼び出
される。実際の関数は、実際の関数フレーム322と関
連付けられる。いくつかの発明の実施の形態では、トラ
ンポリン関数と引数及びリターン値コピー関数は、単一
の関数を構成できることは理解されるべきである。
【0035】一旦、実際の関数がコールされると、コー
ルがリターン値を発生させる場合、既述のように、リタ
ーン値はデータ構造内にコピーされる。リターン値がコ
ピーされた後、プロセス制御はスタック保護ロックを再
ロックするコマンドを含み得るエピローグコードを実行
するためトランポリン関数に戻される。最後に、リター
ン値は既述のデータ構造を介してスタック検出関数に戻
される。
【0036】次に図6を参照して、本発明に係る発明の
実施の形態に従う新規スタック上の実際の関数をコール
することに関連するステップについて記述する。換言す
れば、図3のステップ216について詳述する。ステッ
プ404では、フレームポインタ及びカレントスタック
ポインタを同一の新規スタックチャンク内に置くため
に、既述のバッファフレーム関数がコールされる。バッ
ファフレーム関数はさらに、実際の関数に関連するあら
ゆる引数を新規スタックチャンクにコピーするために用
いられる。一般的に、スタック検出関数またはバッファ
フレーム関数によってコールされる関数、例えばスタッ
クリフレクタ関数が、バッファフレーム関数に対するコ
ールをする。
【0037】バッファフレーム関数がコールされた後、
ステップ406にて新規スタックチャンク上での実行に
必要なプロローグコードが実行される。プロローグコー
ドは、スタック保護ロックを解除、つまりアンロックす
るためのコマンドを有し得る。いくつかの実施の形態で
は、スタック保護ロックはスタックリフレクタ関数を使
用してロックされ、またトランポリン関数を使用してア
ンロックされ得る。既述のように、スタック保護ロック
は、一般的に、カレントプログラムまたはスレッド以外
のプログラムまたはスレッドによるスタックに対するア
クセスを防止する。他のスレッドについてカレントスタ
ックポインタを実行し、また検証するために、ステップ
406にてスタック保護ロックがアンロックされなけれ
ばならない。
【0038】ステップ408では、実際の関数は、この
目的のために生成されたデータ構造内に保持されている
パラメータ値を使用して実行される。すなわち、図3の
ステップ211にて生成されたデータ構造内に格納され
ているパラメータ値は、実際の関数に対するコールに用
いられる。いくつかの実施の形態では、トランポリン関
数に関連付けられているプロローグコードの実行が実際
の関数の実行に先立ち要求され、またエピローグコード
の実行がバッファフレームへのリターンに先立ち要求さ
れ得る。つまり、実際の関数の実行をトランポリン関数
に対するコールと共に介在させ得る。実際の関数を実行
した後、ステップ410にて、実際の関数の実行から生
じるあらゆるリターン値がデータ構造内に書き込まれ
る。いくつかの実施の形態では、実際の関数は値を戻さ
ず、この場合は、データ構造内にはリターン値が格納さ
れない。
【0039】プロセス制御はステップ410から、一般
的に、トランポリン関数と関連付けられている新規スタ
ックチャンクのためのエピローグコードが実行されるス
テップ412に進行する。既述の発明の実施の形態で
は、エピローグコードはスタック保護ロックを再ロック
するためのコマンドを含んでいる。エピローグコードの
実行された後、ステップ414にてバッファフレームに
対してリターンがなされる。続いて、ステップ416に
てスタックリフレクタフレームに対するリターンがなさ
れる。既述のように、スタックリフレクタフレームに関
連付けられているコードは、スタックの除去に用いられ
るコードを含む。スタックリフレクタに対するリターン
の後、新規スタック上の実際の関数をコールするプロセ
スは418にて終了する。
【0040】図7は本発明が適用される一般的なコンピ
ュータシステムを図示する。コンピュータシステム53
0は、任意の数のプロセッサ532(中央演算処理装
置、または、CPUともいう)を備えている。CPU5
32は、一次記憶装置534(一般的に、リードオンリ
メモリ、つまりROM)、及び一般的にスタックが存在
する一次記憶装置536(一般的に、ランダムアクセス
メモリ、つまりRAM)を含む記憶装置に結合されてい
る。当業者にとって周知のように、ROM534は、デ
ータ及び命令をCPUに対して単一方向に転送し、RA
M536は、一般的にデータ及び命令を双方向に転送す
る。一次記憶装置534、536は共に上述のあらゆる
適したコンピュータ読取り可能媒体を含み得る。大容量
記憶装置538もまた、双方向に転送可能であるように
CPU532と結合されており、また追加データ記憶容
量を提供する。大容量記憶装置538は、プログラム、
データ等を記憶するために用いられる、一般的に、一次
記憶装置534、536よりも遅いハードディスクのよ
うな二次記憶装置である。大容量記憶装置538は、磁
気若しくは紙テープのリーダまたは他の良く知られてい
る装置の形式を採ることができる。大容量記憶装置53
8内に保有されている情報を、適当な場合に、標準的な
方法により仮想メモリの形でRAM536の一部として
組み込みできることが理解される。CD−ROM534
といった特定の大容量記憶装置もまた、CPUに対して
データを単一方向に転送し(pass)得る。
【0041】CPU532はまた、以下のものに限定さ
れるものではないが、ビデオモニタ、トラックボール、
マウス、キーボード、マイクロホン、接触感応ディスプ
レイ、トランスジューサカードリーダ、磁気若しくは紙
テープのリーダ、タブレット(tablet)、スタイラス
(stylus)、音声又は手書き認識装置、当然のことなが
ら他のコンピュータといった他の周知の入力装置を含
む、1つ以上の入出力装置540と結合されている。最
後に、CPU532は、512において一般的に示され
ているネットワーク接続を使用して、コンピュータ又は
通信(telecommunucations)ネットワーク、例えばイン
ターネットワーク若しくはイントラネットワークと、任
意に接続され得る。このようなネットワーク接続を用い
て、CPUは上記方法のステップを実行するうちに、ネ
ットワークから情報を受け取り、またはネットワークに
向けて情報を出力できることが予想される。上述の装置
及び機器は、コンピュータハードウェア及びソフトウェ
アの技術分野における当業者に馴染みのあるものであろ
う。
【0042】したがって、本発明は、新規コンパイラの
設計、及び既存ソフトウェアの再コンパイルといった労
力及び出費を無くしてコンピュータシステムにおける効
率的なメモリ割当方法を提供することができる。本明細
書に記載した方法、装置、及びソフトウェアを使用する
ことにより、メモリ割当エラーの発生を防止するために
スタックオーバフロー状況の評価が可能になり、また必
要に応じて新規メモリスタックチャンクが再割り当てさ
れる。これは、既存コンパイラの再設計、及び既存ソフ
トウェアの再コンパイルを不要にするラップスタック検
出(wrap stackchecking)を使用して実行され得る。
【0043】以上、本発明のいくつかの実施の形態に基
づき本発明を説明したが、本発明の趣旨から逸脱しない
範囲で種々の変更改良が可能である。例えば、スタック
スペースの利用可能性を決定する能力を必要とする関数
の実行に関連するステップは、広く変更され得る。ステ
ップは、本発明の趣旨から逸脱しない範囲で追加、ある
いは、削除され得る。さらに、使用されていないスタッ
クチャンクの除去プロセスは、全てを除去するのではな
く選択的であり得る。本発明の趣旨を逸脱することな
く、例えば、不使用のスタックチャンク全てを除去する
のでなく、所定のスタックチャンクが除去され、残りの
スタックチャンクが将来の関数を見越して割り当てられ
たまま残され得る。
【0044】
【発明の効果】以上説明したように、本発明によれば、
必要に応じて、あるいは、新規コンパイラを必要とする
ことなく仮想メモリをサポートするために充分なハード
ウェアが存在しないとき、追加スタックスペースを有効
に関数に割り当てることができる。
【図面の簡単な説明】
【図1】 コンピュータスタックの概念図である。
【図2】 不連続なコンピュータスタックの概念図であ
る。
【図3】 本発明に係る発明の実施の形態に従うスタッ
クオーバフローの検出を含む関数に関連するステップを
示すフローチャートである。
【図4】 図3に続く、本発明に係る発明の実施の形態
に従うスタックオーバフローの検出を含む関数に関連す
るステップを示すフローチャートである。
【図5】 発明の実施の形態の1つに従うバッファフレ
ームを含む不連続なコンピュータスタックの概念図であ
る。
【図6】 発明の実施の形態の1つに従うスタック検出
関数のコールに関連するステップを示すフローチャート
である。
【図7】 発明の実施の形態において用いられる一般的
なコンピュータシステムのブロック構成図である。
【符号の説明】
100…スタックチャンク、102…フレーム、104
…メモリ、110…全スタック、302…コンピュータ
スタック、306…原スタックチャンク、308…新規
スタックチャンク、310…原スタック、312…スタ
ック検出機能フレーム、314…スタックリフレクタフ
レーム、316…バッファフレーム、318…トランポ
リン関数フレーム、320…引数及びリターン値コピー
関数フレーム、322…実際の関数フレーム、512…
ネットワーク接続回路、530…コンピュータシステ
ム、532…CPU、534…一次記憶装置(RO
M)、536…一次記憶装置(RAM)、538…大容
量記憶装置、540…入出力装置。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 アラン ジー. ビショップ アメリカ合衆国, カリフォルニア州, キャンプベル, ジェフリー アヴェニュ ー 725 (72)発明者 ネディム フレスコ アメリカ合衆国, カリフォルニア州, キャンプベル, ジェフリー アヴェニュ ー 725

Claims (20)

    【特許請求の範囲】
  1. 【請求項1】 第1のコンピュータメモリスタックチャ
    ンク内に配置されているコンパイルされた関数を実行す
    るための追加コンピュータメモリスタックスペースを割
    り当てるための方法であって、 a)前記コンパイルされた関数を含むスタック検出関数
    をコールするステップと、 b)前記コンパイルされた関数を実行するために追加コ
    ンピュータメモリスタックスペースが必要か否かを決定
    するステップと、 c)前記コンパイルされた関数を実行するために追加コ
    ンピュータメモリスタックスペースは必要ないと決定さ
    れた場合、前記コンパイルされた関数をコールするステ
    ップと、 d)前記コンパイルされた関数を実行するために前記追
    加コンピュータメモリスタックスペースが必要であると
    決定された場合、前記第1のコンピュータメモリスタッ
    クチャンクと連続していない、前記コンパイルされた関
    数を実行するための前記追加コンピュータメモリスタッ
    クスペースを割り当てるステップと、を備える追加コン
    ピュータメモリスタックスペース割当方法。
  2. 【請求項2】 請求項1に記載の方法において、前記追
    加コンピュータメモリスタックスペース割当ステップ
    は、前記コンパイルされた関数のための第2のスタック
    チャンクを割り当てることを含む、方法。
  3. 【請求項3】 請求項2に記載の方法において、さら
    に、 a)前記第1のスタックチャンクと前記第2のスタック
    チャンクとの間に透過的な境界を生成するために構成さ
    れるバッファフレーム関数をコールするステップと、 b)前記第2のスタックチャンクを使用して前記コンパ
    イルされた関数をコールするために構成されるトランポ
    リン関数をコールするステップと、 c)前記第2のスタックチャンク上にて前記コンパイル
    された関数を実行するステップと、を含む方法。
  4. 【請求項4】 請求項3に記載の方法において、前記第
    2スタックチャンクと関連付けられているスタック保護
    ロックを解除するステップを、更に含む方法。
  5. 【請求項5】 請求項4に記載の方法において、前記ス
    タック保護ロックをロックするステップを、更に含む方
    法。
  6. 【請求項6】 請求項1に記載の方法において、ロング
    ジャンプ操作のためのジャンプバックポイントを設定す
    るステップを、更に含む方法。
  7. 【請求項7】 請求項6に記載の方法において、ロング
    ジャンプが発生したか否かを決定するステップを、更に
    含む方法。
  8. 【請求項8】 請求項7に記載の方法において、ロング
    ジャンプが発生したと決定される場合には、使用中でな
    い前記第1のスタックチャンクの上に(above)割り当
    てられたスタックチャンクを除去すると共に、使用中で
    ない前記第1のスタックチャンクの上の(above)前記
    スタックチャンクをメモリアロケータへ戻すステップ
    を、更に含む方法。
  9. 【請求項9】 第1のコンピュータメモリスタックチャ
    ンク内に配置されているコンパイルされた関数を実行す
    るための追加コンピュータメモリスタックスペースを割
    り当てるためのプログラムを記録したコンピュータで読
    み取り可能な記録媒体であって、 a)前記コンパイルされた関数を含むスタック検出関数
    をコールするステップと、 b)前記コンパイルされた関数を実行するために追加コ
    ンピュータメモリスタックスペースが必要か否かを決定
    するステップと、 c)前記コンパイルされた関数を実行するために追加コ
    ンピュータメモリスタックスペースは必要ないと決定さ
    れた場合、前記コンパイルされた関数をコールするステ
    ップと、 d)前記コンパイルされた関数を実行するために追加コ
    ンピュータメモリスタックスペースが必要であると決定
    された場合、前記コンピュータメモリスタックと連続し
    ていない、前記コンパイルされた関数を実行するための
    前記追加コンピュータメモリスタックスペースを割り当
    てるステップと、を備える追加コンピュータメモリスタ
    ックスペース割当プログラムを記録した記録媒体。
  10. 【請求項10】 請求項9に記載の記録媒体において、
    前記追加コンピュータメモリスタックスペース割当ステ
    ップは、前記コンパイルされた関数のための第2のスタ
    ックチャンクの割り当てを含む、記録媒体。
  11. 【請求項11】 請求項10に記載の記録媒体におい
    て、前記プログラムは、 a)前記第1のスタックチャンクと前記第2のスタック
    チャンクとの間に透過的な境界を生成するために構成さ
    れるバッファフレーム関数をコールするステップと、 b)前記第2のスタックチャンクを使用して前記コンパ
    イルされた関数をコールするために構成されるトランポ
    リン関数をコールするステップと、 c)前記スタックチャンク上にて前記コンパイルされた
    関数を実行するステップと、を更に備える記録媒体。
  12. 【請求項12】 請求項11に記載の記録媒体におい
    て、前記プログラムは前記第2のスタックチャンクと関
    連付けられているスタック保護ロックを解除するステッ
    プを、更に備える記録媒体。
  13. 【請求項13】 請求項12に記載の記録媒体におい
    て、前記プログラムは前記スタック保護ロックをロック
    するステップを、更に備える記録媒体。
  14. 【請求項14】 請求項9に記載の記録媒体において、
    前記プログラムはロングジャンプ操作のためのジャンプ
    バックポイントを設定するステップを、更に備える記録
    媒体。
  15. 【請求項15】 請求項14に記載の記録媒体におい
    て、前記プログラムはロングジャンプが発生したか否か
    を決定するステップを、更に備える記録媒体。
  16. 【請求項16】 請求項15に記載の記録媒体におい
    て、前記プログラムは、ロングジャンプが発生したと決
    定された場合には、使用中でない前記第1のスタックチ
    ャンクの上に(above)割り当てられたスタックチャン
    クを除去すると共に、使用中でない前記第1のスタック
    チャンクの上の(above)前記スタックチャンクをメモ
    リアロケータへ戻すステップを、更に備える記録媒体。
  17. 【請求項17】 第1のコンピュータメモリスタックチ
    ャンク内に配置されているコンパイルされた関数を実行
    するための追加コンピュータメモリスタックスペースを
    割り当てるために構成されているコンピュータシステム
    であって、 a)1つ以上の実行用コンパイルされた関数を格納する
    と共に、1つ以上のメモリスタックチャンクを有する1
    つ以上のメモリスタックスペース内へ配列されるために
    構成されているコンピュータメモリと、 b)スタック検出関数を形成するために前記コンパイル
    された関数を適合させる(adapt)ことに有効なスタッ
    ク検出関数発生器と、 c)前記コンパイルされた関数を実行するために追加メ
    モリが必要か否かを決定すると共に、前記スタック検出
    関数を実行するために有効なメモリマネジャと、を備え
    るコンピュータシステム。
  18. 【請求項18】 請求項17に記載のコンピュータシス
    テムにおいて、前記メモリマネジャは、前記メモリマネ
    ジャが前記コンパイルされた関数を実行するために追加
    メモリが必要であると決定する場合、第2のスタックチ
    ャンクを割り当てるために構成されている、コンピュー
    タシステム。
  19. 【請求項19】 請求項18に記載のコンピュータシス
    テムにおいて、前記メモリマネジャは、前記第1のスタ
    ックチャンクと前記第2のスタックチャンクとの間に透
    過的な境界を生成するために適合されているバッファフ
    レームを前記メモリスタックスペース内に生成するため
    に適合されている、コンピュータシステム。
  20. 【請求項20】 請求項19に記載のコンピュータシス
    テムにおいて、前記メモリマネジャは、ロングジャンプ
    が発生したと決定された場合には、使用中でない前記第
    1のスタックチャンクの上に(above)割り当てられた
    スタックチャンクを除去するために、且つ再配置のため
    に使用中でない前記第1のスタックチャンクの上の(ab
    ove)前記スタックチャンクを戻すために適合されてい
    る、コンピュータシステム。
JP9295611A 1996-10-29 1997-10-28 不連続な実行時スタックを動的にサイジングするための方法及び装置 Pending JPH10232785A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/740,445 US5835958A (en) 1996-10-29 1996-10-29 Method and apparatus for dynamically sizing non-contiguous runtime stacks
US08/740445 1996-10-29

Publications (1)

Publication Number Publication Date
JPH10232785A true JPH10232785A (ja) 1998-09-02

Family

ID=24976549

Family Applications (1)

Application Number Title Priority Date Filing Date
JP9295611A Pending JPH10232785A (ja) 1996-10-29 1997-10-28 不連続な実行時スタックを動的にサイジングするための方法及び装置

Country Status (4)

Country Link
US (1) US5835958A (ja)
EP (1) EP0840210A3 (ja)
JP (1) JPH10232785A (ja)
SG (1) SG53110A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7685601B2 (en) 2005-02-28 2010-03-23 Sony Computer Entertainment Inc. Methods and apparatus for segmented stack management in a processor system

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5950231A (en) * 1996-11-25 1999-09-07 Northern Telecom Limited Memory manager system
US6928653B1 (en) * 1997-11-06 2005-08-09 United Video Properties, Inc. Interactive electronic television program guide with database configurability
US6070202A (en) * 1998-05-11 2000-05-30 Motorola, Inc. Reallocation of pools of fixed size buffers based on metrics collected for maximum number of concurrent requests for each distinct memory size
GB9825102D0 (en) * 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
US6286088B1 (en) 1999-06-28 2001-09-04 Hewlett-Packard Company Memory management system and method for relocating memory
US6928641B1 (en) * 1999-10-08 2005-08-09 Texas Instruments Incorporated Method and system for far branch and call instructions
US7219335B1 (en) * 1999-12-08 2007-05-15 Intel Corporation Method and apparatus for stack emulation during binary translation
US6895508B1 (en) * 2000-09-07 2005-05-17 International Business Machines Corporation Stack memory protection
WO2002071211A2 (en) * 2000-11-20 2002-09-12 Zucotto Wireless, Inc. Data processor having multiple operating modes
WO2002042911A2 (en) * 2000-11-20 2002-05-30 Zucotto Wireless, Inc. Stack chunking
US6968557B1 (en) 2000-12-18 2005-11-22 Stratum8 Corporation Reducing stack memory resources in a threaded computer system
US7409517B2 (en) * 2001-10-01 2008-08-05 Oracle International Corporation Dynamic and automatic memory management
US7499960B2 (en) * 2001-10-01 2009-03-03 Oracle International Corporation Adaptive memory allocation
JP2003271448A (ja) * 2002-03-18 2003-09-26 Fujitsu Ltd スタック管理方法及び情報処理装置
US6996677B2 (en) * 2002-11-25 2006-02-07 Nortel Networks Limited Method and apparatus for protecting memory stacks
DE10349200A1 (de) * 2003-10-23 2005-05-25 Daimlerchrysler Ag System und Verfahren zur Überwachung und Verwaltung prozessinterner Speicher einer Prozessausführungseinheit
US7792880B2 (en) * 2004-01-05 2010-09-07 International Business Machines Corporation Method and apparatus for efficient implementation of discontiguous objects
US7512738B2 (en) * 2004-09-30 2009-03-31 Intel Corporation Allocating call stack frame entries at different memory levels to functions in a program
US8005795B2 (en) * 2005-03-04 2011-08-23 Emc Corporation Techniques for recording file operations and consistency points for producing a consistent copy
KR100809293B1 (ko) * 2006-03-10 2008-03-04 삼성전자주식회사 가상 머신에서 스택을 관리하는 장치 및 그 방법
JP2008305337A (ja) * 2007-06-11 2008-12-18 Panasonic Corp プログラム変換装置、プログラム変換方法、プログラム、記憶媒体、デバッグ装置、デバッグ方法及びプログラム開発システム
US9256468B2 (en) * 2010-08-24 2016-02-09 Red Hat, Inc. Dynamic incremental memory allocation on program stack
US10089126B2 (en) * 2013-03-21 2018-10-02 Vmware, Inc. Function exit instrumentation for tail-call optimized code
CA2809516C (en) * 2013-03-13 2016-11-08 Khalid Nawaf Alharbi Preventing stack buffer overflow attacks
US9557917B2 (en) 2014-11-10 2017-01-31 International Business Machines Corporation Conditional stack frame allocation
US9864518B2 (en) 2014-11-10 2018-01-09 International Business Machines Corporation Assigning home memory addresses to function call parameters
US9250878B1 (en) * 2014-11-24 2016-02-02 Red Hat, Inc. Function attribute for dynamic stack allocation
CN105094991A (zh) * 2015-08-21 2015-11-25 北京经纬恒润科技有限公司 一种堆栈容量的设置方法及系统
CN106681692A (zh) * 2015-11-09 2017-05-17 联发科技(新加坡)私人有限公司 控制装置、集成电路及任务栈的管理方法
GB2546730B (en) * 2016-01-19 2018-03-21 Arm Ip Ltd A method for allocating memory
US10552321B2 (en) 2017-08-04 2020-02-04 Microsoft Technology Licensing, Llc Flexible buffer sizing in graphics processors
US11782762B2 (en) * 2019-02-27 2023-10-10 Qualcomm Incorporated Stack management

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2253428A5 (ja) * 1973-11-30 1975-06-27 Honeywell Bull Soc Ind
US4524416A (en) * 1980-04-15 1985-06-18 Honeywell Information Systems Inc. Stack mechanism with the ability to dynamically alter the size of a stack in a data processing system
US4445170A (en) * 1981-03-19 1984-04-24 Zilog, Inc. Computer segmented memory management technique wherein two expandable memory portions are contained within a single segment
US4454580A (en) * 1981-09-16 1984-06-12 International Business Machines Corporation Program call method and call instruction execution apparatus
US4530049A (en) * 1982-02-11 1985-07-16 At&T Bell Laboratories Stack cache with fixed size stack frames
US5043870A (en) * 1982-02-24 1991-08-27 At&T Bell Laboratories Computer with automatic mapping of memory contents into machine registers during program execution
DE3726192A1 (de) * 1987-08-06 1989-02-16 Otto Mueller Stacksteuerung
US4951194A (en) * 1989-01-23 1990-08-21 Tektronix, Inc. Method for reducing memory allocations and data copying operations during program calling sequences
US5107457A (en) * 1989-04-03 1992-04-21 The Johns Hopkins University Stack data cache having a stack management hardware with internal and external stack pointers and buffers for handling underflow and overflow stack
US5452456A (en) * 1992-12-18 1995-09-19 Apple Computer, Inc. Apparatus for executing a plurality of program segments having different object code types in a single program or processor environment
US5487158A (en) * 1993-04-06 1996-01-23 International Business Machines Corporation Method and procedure call mechanism for calling 16-bit functions from 32-bit functions
CA2093451C (en) * 1993-04-06 2000-03-14 David M. Mooney Method and mechanism for calling 32-bit functions from 16-bit functions
US5590329A (en) * 1994-02-04 1996-12-31 Lucent Technologies Inc. Method and apparatus for detecting memory access errors

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7685601B2 (en) 2005-02-28 2010-03-23 Sony Computer Entertainment Inc. Methods and apparatus for segmented stack management in a processor system

Also Published As

Publication number Publication date
US5835958A (en) 1998-11-10
EP0840210A2 (en) 1998-05-06
SG53110A1 (en) 1998-09-28
EP0840210A3 (en) 2000-05-17

Similar Documents

Publication Publication Date Title
JPH10232785A (ja) 不連続な実行時スタックを動的にサイジングするための方法及び装置
JP5255348B2 (ja) クラッシュダンプ用のメモリアロケーション
JP3027845B2 (ja) プログラム制御装置および方法
KR100640314B1 (ko) 혼합된 실행 스택 및 예외처리의 구현방법및 그 장치
US8589653B2 (en) Memory management method and computer using the method
US9183013B2 (en) System and method for redundant array copy removal in a pointer-free language
US20090172337A1 (en) Cooperative mechanism for efficient application memory allocation
US7934204B2 (en) Partitioning code in program code conversion
JPH1115726A (ja) コンピュータ制御方法、装置、システム、およびコンピュータプログラム製品
JP2008546086A (ja) 共有リソースのためのアクセス協調を伴うプログラムコードを変換する方法および装置
JP2004503863A (ja) スレッドを明示的に中断することなく整合状態とする方法及び装置
US20080059955A1 (en) Compiling method and storage medium therefor
JP2000347874A (ja) レジスタ割当器を用いた呼出規則プロローグ・エピローグコード構築方法及び装置
US8397045B2 (en) Memory management device, memory management method, and memory management program
KR100738777B1 (ko) 정보 처리 시스템에서 병렬 처리되는 작업들간의 데이터 종속성의 대략적인 결정을 위한 컴퓨터 시스템 동작 방법 및 장치
JP2000347872A (ja) 例外を正規制御フローとして処理する方法及び装置
US6985976B1 (en) System, method, and computer program product for memory management for defining class lists and node lists for allocation and deallocation of memory blocks
GB2404044A (en) Partitioning code in program code conversion to account for self-modifying code
Cranor et al. The UVM virtual memory system
JP2000039997A (ja) サブクラス及びサブタイプの高速チェックを実現する方法及び装置
US8296742B2 (en) Automatic native generation
Calderón et al. GMAI: Understanding and exploiting the internals of GPU resource allocation in critical systems
JPH11212798A (ja) 言語処理方法、言語処理装置及び言語処理プログラムを記録した記憶媒体
KR20060035077A (ko) 데이터 처리 장치 및 이를 이용한 레지스터 할당 방법
US20080034022A1 (en) System and method for updating references when incrementally compacting a heap

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20040927

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070904

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20080219