(57)【特許請求の範囲】
【請求項１】
少なくとも１つのプロセッサと、メモリと、入出力装置とを含み、パラメータがプロシージャに渡されるソフトウェア・プログラムを実行するコンピュータ・システムであって、
より効率的なオペレーションのために、スタックを使用することなく、前記パラメータをプロシージャに渡すための呼び出しマップ・データ構造を生成する手段を含み、
前期呼び出しマップ・データ構造を生成する手段は、該呼び出しマップ・データを固有のマップ識別子と共に前記メモリ上に作成する際、前記呼び出しマップ・データを、プロシージャ名、インスタンスＩＤ、呼び出しマップ識別子、使用フラグ、保管フラグ、保管済みプログラム・カウンタ、パラメトリック・データを指し示すポインタ、専用データを指し示すポインタ、兄弟呼び出しマップを指し示すポインタ、子呼び出しマップを指し示すポインタ、同一のプロシージャにおいて、次の呼び出しマップを指し示すポインタ、親呼び出しマップを指し示すポインタを用いて構造化し、
前記プロセッサは、子の関係にあるプロシージャを呼び出すとき、子呼び出しマップを示すポインタによって呼び出し先プロシージャの呼び出しマップデータを特定し、特定されたマップデータのパラメトリックデータを指し示すポインタに基づいて変更することを特徴とするコンピュータ・システム。
【請求項２】
前記呼び出しマップ・データ構造を生成する手段が、繰り返し使用される機構を有する、請求項１記載のシステム。
【請求項３】
前記呼び出しマップ・データ構造を生成する手段が、幾つかのプロシージャのための共用データ・レポジトリである、請求項１記載のシステム。
【請求項４】
前記呼び出しマップ・データ構造を生成する手段が、ネスト化プロシージャに渡って共用される機構を含む、請求項１記載のシステム。
【請求項５】
前記呼び出しマップ・データ構造を生成する手段が、プロシージャ間の呼び出し関係にもとづき、階層宣言マップ手段から導出され、プロシージャ呼び出し階層内の各レベルにレベル番号を割当てる、請求項１記載のシステム。
【請求項６】
前記呼び出しマップ・データ構造を生成する手段が、プロシージャ間の完全な階層関係を捕獲するように構成される、請求項１記載のシステム。
【請求項７】
既存の前記呼び出しマップ・データ構造を生成する手段が使用中で、並行実行が所望される場合、新たな呼び出しマップ・データ構造を生成する手段が作成されて、使用される、請求項１記載のシステム。
【請求項８】
プロシージャ再帰が要求される場合、新たな呼び出しマップ・データ構造を生成する手段が作成されるか、フリー呼び出しマップ・データ構造を生成する手段が使用される、請求項１記載のシステム。
【請求項９】
プロシージャ呼び出しマップ・データ構造を生成する手段の使用フラグが、プロシージャの実行の開始時に１にセットされ、前記プロシージャの実行の終了時にリセットされる、請求項１記載のシステム。
【請求項１０】
前記呼び出しマップ・データ構造を生成する手段の保管フラグが、プロシージャの続く呼び出しによる再利用のために、前記パラメータを保管する、請求項１記載のシステム。
【請求項１１】
前記呼び出しマップ・データ構造を生成する手段が、囲まれたプロシージャ階層内の任意のパラメータを初期化し、前記パラメータの複数のコピーの作成を回避するように構成され、前記初期化が構造レベルでの呼び出し以前の初期化を含む、請求項１記載のシステム。
【請求項１２】
前記呼び出しマップ・データ構造を生成する手段が、プロシージャの再帰及び反復をサポートし、前記プロシージャが呼び出される回数がランタイムの間にだけ知れる、請求項１記載のシステム。
【請求項１３】
前記呼び出しマップ・データ構造を生成する手段のデータ領域が事前に割当てられ、プログラム実行と共に成長し得る、請求項１記載のシステム。
【請求項１４】
前記呼び出しマップ・データ構造を生成する手段が、階層宣言マップを用いて１度だけ宣言され、どこからも参照される、請求項１記載のシステム。
【請求項１５】
前記呼び出しマップ・データ構造を生成する手段が、プロシージャ・コンパイルの間に.imapファイルとして作成され、それ自身の階層マップ内にプロシージャの宣言を含む、請求項１記載のシステム。
【請求項１６】
前記呼び出しマップ・データ構造を生成する手段が、関連プロシージャの範囲内でのみ見ることができる、請求項４記載のシステム。
【請求項１７】
前記呼び出しマップ・データ構造を生成する手段の各呼び出しが、その所有スレッドによってのみアクセス可能な別々のデータ領域を割当てられ、前記データ領域が、各割当て領域を分離するガード・ページと共に割当てられ、それにより有り得るオーバラップを回避する、請求項７記載のシステム。
【請求項１８】
少なくとも１つのプロセッサと、メモリと、入出力装置とを含むコンピュータ・システムにおいて、パラメータをプロシージャに渡す方法であって、
より効率的なオペレーションのために、スタックを使用することなく、前記パラメータをプロシージャに渡すための呼び出しマップ・データ構造を生成するステップを含み、
前期呼び出しマップ・データ構造を生成するステップは、該呼び出しマップ・データを固有のマップ識別子と共に前記メモリ上に作成する際、前記呼び出しマップ・データを、プロシージャ名、インスタンスＩＤ、呼び出しマップ識別子、使用フラグ、保管フラグ、保管済みプログラム・カウンタ、パラメトリック・データを指し示すポインタ、専用データを指し示すポインタ、兄弟呼び出しマップを指し示すポインタ、子呼び出しマップを指し示すポインタ、同一のプロシージャにおいて、次の呼び出しマップを指し示すポインタ、親呼び出しマップを指し示すポインタを用いて構造化し、
前記プロセッサは、子の関係にあるプロシージャを呼び出すとき、子呼び出しマップを示すポインタによって呼び出し先プロシージャの呼び出しマップデータを特定し、特定されたマップデータのパラメトリックデータを指し示すポインタに基づいて変更することを特徴とする方法。
【請求項１９】
前記呼び出しマップ・データ構造が、繰り返し使用される機構を有する、請求項１８記載の方法。
【請求項２０】
前記呼び出しマップ・データ構造が、幾つかのプロシージャのための共用データ・レポジトリである、請求項１８記載の方法。
【請求項２１】
前記呼び出しマップ・データ構造が、ネスト化プロシージャに渡って共用される機構を含む、請求項１８記載の方法。
【請求項２２】
前記呼び出しマップ・データ構造を生成するステップが、プロシージャ間の呼び出し関係にもとづき、階層宣言マップステップから導出され、プロシージャ呼び出し階層内の各レベルにレベル番号を割当てる、請求項１８記載の方法。
【請求項２３】
前記呼び出しマップ・データ構造が、プロシージャ間の完全な階層関係を捕獲するように構成される、請求項１８記載の方法。
【請求項２４】
既存の前記呼び出しマップ・データ構造が使用中で、並行実行が所望される場合、新たな呼び出しマップ・データ構造を生成するステップが作成されて、使用される、請求項１８記載の方法。
【請求項２５】
プロシージャ再帰が要求される場合、新たな呼び出しマップ・データ構造を生成するステップが作成されるか、フリー呼び出しマップ・データ構造を生成するステップが使用される、請求項１８記載の方法。
【請求項２６】
プロシージャ呼び出しマップ・データ構造を生成するステップの使用フラグが、プロシージャの実行の開始時に１にセットされ、前記プロシージャの実行の終了時にリセットされる、請求項１８記載の方法。
【請求項２７】
前記呼び出しマップ・データ構造を生成するステップの保管フラグが、プロシージャの続く呼び出しによる再利用のために、前記パラメータを保管する、請求項１８記載の方法。
【請求項２８】
前記呼び出しマップ・データ構造を生成するステップが、囲まれたプロシージャ階層内の任意のパラメータを初期化し、前記パラメータの複数のコピーの作成を回避するように構成され、前記初期化が構造レベルでの呼び出し以前の初期化を含む、請求項１８記載の方法。
【請求項２９】
前記呼び出しマップ・データ構造を生成するステップが、プロシージャの再帰及び反復をサポートし、前記プロシージャが呼び出される回数がランタイムの間にだけ知れる、請求項１８記載の方法。
【請求項３０】
前記呼び出しマップ・データ構造のデータ領域が事前に割当てられ、プログラム実行と共に成長し得る、請求項１８記載の方法。
【請求項３１】
前記呼び出しマップ・データ構造が、階層宣言マップを用いて１度だけ宣言され、どこからも参照される、請求項１８記載の方法。
【請求項３２】
前記呼び出しマップ・データ構造が、プロシージャ・コンパイルの間に.imapファイルとして作成され、それ自身の階層マップ内にプロシージャの宣言を含む、請求項１８記載の方法。
【請求項３３】
前記呼び出しマップ・データ構造が、関連プロシージャの範囲内でのみ見ることができる、請求項２１記載の方法。
【請求項３４】
前記呼び出しマップ・データ構造の各呼び出しが、その所有スレッドによってのみアクセス可能な別々のデータ領域を割当てられ、前記データ領域が、各割当て領域を分離するガード・ページと共に割当てられ、それにより有り得るオーバラップを回避する、請求項２４記載の方法。
【請求項３５】
少なくとも１つのプロセッサと、メモリと、入出力装置とを含むコンピュータ・システムにおいて、パラメータをプロシージャに渡すソフトウェア・プログラムを記録したコンピュータ可読記録媒体であって、前記ソフトウェア・プログラムは、
より効率的なオペレーションのために、スタックを使用することなく、前記パラメータをプロシージャに渡すための呼び出しマップ・データ構造を生成するステップを含み、
前期呼び出しマップ・データ構造を生成するステップは、該呼び出しマップ・データを固有のマップ識別子と共に前記メモリ上に作成する際、前記呼び出しマップ・データを、プロシージャ名、インスタンスＩＤ、呼び出しマップ識別子、使用フラグ、保管フラグ、保管済みプログラム・カウンタ、パラメトリック・データを指し示すポインタ、専用データを指し示すポインタ、兄弟呼び出しマップを指し示すポインタ、子呼び出しマップを指し示すポインタ、同一のプロシージャにおいて、次の呼び出しマップを指し示すポインタ、親呼び出しマップを指し示すポインタを用いて構造化し、
前記プロセッサは、子の関係にあるプロシージャを呼び出すとき、子呼び出しマップを示すポインタによって呼び出し先プロシージャの呼び出しマップデータを特定し、特定されたマップデータのパラメトリックデータを指し示すポインタに基づいて変更することを特徴とするコンピュータ可読記録媒体。
【請求項３６】
前記呼び出しマップ・データ構造が、繰り返し使用される機構を有する、請求項３５記載のコンピュータ可読記録媒体。
【請求項３７】
前記呼び出しマップ・データ構造が、幾つかのプロシージャのための共用データ・レポジトリである、請求項３５記載のコンピュータ可読記録媒体。
【請求項３８】
前記呼び出しマップ・データ構造が、ネスト化プロシージャに渡って共用される機構を含む、請求項３５記載のコンピュータ可読記録媒体。
【請求項３９】
前記呼び出しマップ・データ構造を生成するステップが、プロシージャ間の呼び出し関係にもとづき、階層宣言マップステップから導出され、プロシージャ呼び出し階層内の各レベルにレベル番号を割当てる、請求項３５記載のコンピュータ可読記録媒体。
【請求項４０】
前記呼び出しマップ・データ構造が、プロシージャ間の完全な階層関係を捕獲するように構成される、請求項３５記載のコンピュータ可読記録媒体。
【請求項４１】
既存の前記呼び出しマップ・データ構造が使用中で、並行実行が所望される場合、新たな呼び出しマップ・データ構造を生成するステップが作成されて、使用される、請求項３５記載のコンピュータ可読記録媒体。
【請求項４２】
プロシージャ再帰が要求される場合、新たな呼び出しマップ・データ構造を生成するステップが作成されるか、フリー呼び出しマップ・データ構造を生成するステップが使用される、請求項３５記載のコンピュータ可読記録媒体。
【請求項４３】
プロシージャ呼び出しマップ・データ構造を生成するステップの使用フラグが、プロシージャの実行の開始時に１にセットされ、前記プロシージャの実行の終了時にリセットされる、請求項３５記載のコンピュータ可読記録媒体。
【請求項４４】
前記呼び出しマップ・データ構造を生成するステップの保管フラグが、プロシージャの続く呼び出しによる再利用のために、前記パラメータを保管する、請求項３５記載のコンピュータ可読記録媒体。
【請求項４５】
前記呼び出しマップ・データ構造を生成するステップが、囲まれたプロシージャ階層内の任意のパラメータを初期化し、前記パラメータの複数のコピーの作成を回避するように構成され、前記初期化が構造レベルでの呼び出し以前の初期化を含む、請求項３５記載のコンピュータ可読記録媒体。
【請求項４６】
前記呼び出しマップ・データ構造を生成するステップが、プロシージャの再帰及び反復をサポートし、前記プロシージャが呼び出される回数がランタイムの間にだけ知れる、請求項３５記載のコンピュータ可読記録媒体。
【請求項４７】
前記呼び出しマップ・データ構造のデータ領域が事前に割当てられ、プログラム実行と共に成長し得る、請求項３５記載のコンピュータ可読記録媒体。
【請求項４８】
前記呼び出しマップ・データ構造が、階層宣言マップを用いて１度だけ宣言され、どこからも参照される、請求項３５記載のコンピュータ可読記録媒体。
【請求項４９】
前記呼び出しマップ・データ構造が、プロシージャ・コンパイルの間に.imapファイルとして作成され、それ自身の階層マップ内にプロシージャの宣言を含む、請求項３５記載のコンピュータ可読記録媒体。
【請求項５０】
前記呼び出しマップ・データ構造が、関連プロシージャの範囲内でのみ見ることができる、請求項３８記載のコンピュータ可読記録媒体。
【請求項５１】
前記呼び出しマップ・データ構造の各呼び出しが、その所有スレッドによってのみアクセス可能な別々のデータ領域を割当てられ、前記データ領域が、各割当て領域を分離するガード・ページと共に割当てられ、それにより有り得るオーバラップを回避する、請求項４１記載のコンピュータ可読記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はプログラム実行のための、呼び出しマップにもとづくアーキテクチャに関する。
【０００２】
【従来の技術】
現在一般的なソフトウェア・システムは、２つの主要概念、すなわちプロセス及びプロシージャ呼び出しを用いて、要求機能を実現する。オペレーティング・システム及び関連ミドルウェアは、一般に、システム・プロシージャ呼び出しのセットとして実現される。アプリケーションはプロセスのセットとして実現され、プロセスの各々は、アプリケーション・レベル・コードを実行する間に、他のプロセスによってアクセス不能な専用データ領域を有する。また特権レベルも存在し、これは全システム・レベル・メモリに対するアクセスと共に、実行中のアプリケーションのアドレス空間に対するアクセスを許可する。プロセス間通信に役立つ共用メモリやプロセス間メッセージなど、他の機構も存在する。オペレーティング・システム自身は階層化アーキテクチャを使用し、そこではメッセージまたは共用メモリの機構が、異なる層間の通信に使用される。他のケースでは、オペレーティング・システムが、所望の機能を達成するために互いに呼び出し合う、分類されたプロシージャ呼び出しを含むモジュールのセットとして設計される。
【０００３】
前述のように、典型的な成熟したソフトウェア・システムは、かなり重要な用途を有し、ソフトウェアの幾つかの層を含む。オペレーティング・システムの階層化構造は、カーネル・サービスを含み、その上にデバイス・ドライバ、ファイル・システム、データベース・エンジン、トランザクション・モニタ、及びメッセージ・キューイング・システムが階層化され、更にこれらの上に、ウィンドウ及びＧＵＩ関連ソフトウェアが存在する。複雑なアプリケーションはそれらの内部に、多くのモジュール及び階層化を有する。任意のタスクは、幾つかのソフトウェア層を通じて、情報を往来させることにより達成される。各層はできるだけ多目的且つ汎用的に設計されるので、次善のインプリメンテーション及び性能的な不利益を被る可能性がある。また、オブジェクト指向技術の利用の増加に伴い、データのカプセル化及び情報隠蔽が益々普及しつつある。このことは、異なるコードの実行ユニット間でのメッセージの拡張利用を要求する。オブジェクト指向インプリメンテーションは再度、性能低下の余地がある相当量のメッセージの受け渡しを利用する。
【０００４】
大部分のプロシージャ呼び出しはスタックを利用し、このことは入力を提供するプロシージャから始まり、処理の最後の部分を実行するプロシージャに至るまで、パラメータの繰り返しコピーを意味する。
【０００５】
考慮すべき別の点は、典型的なエンドユーザは、彼自身のシステム上において、ブラウザ、ワードプロセッサ、スプレッドシート・プログラム、或いはメール・クライアントなどの、頻繁に使用される関連アプリケーションのセットを実行することである。より簡単なデータの共用化を通じて、より緊密な統合及び協働実行を可能にする機構が存在すれば、システム性能が多大に向上されることであろう。
【０００６】
業界で有力なアプリケーションであっても、特定の実行パスがより頻繁に使用されるので、関連モジュール間のより緊密な統合が、より高い実行効率をもたらすことになる。統合が緩い場合、異なるモジュール内に類似の機能の多くの複製が存在することになり、フィーチャ・セットの圧倒的な拡張により、ソフトウェアのサイズが大きくなる傾向がある。このことは、大量の希に使用されるコードのオーバヘッドを、実行イメージの一部としてもたらすので、頻繁に使用されるオペレーションを非効率的にする。
【０００７】
並列対称マルチプロセッサ、ＮＵＭＡ及びクラスタ技術の可用性により、アプリケーションをクライアント／サーバ環境から、システムの異なる要素の緊密な統合を１カ所で利用する高性能サーバ中枢環境へ移行することが可能になった。また、巨大なメモリ・プールの可用性が、再度アーキテクチャの革新のための新たな機会を切り開く。より大きなマシン・ワードを有するマシンの可用性は、ローエンド・マシン上で実行されるプログラムにおいても、より高いライナ（仮想）アドレスを達成可能にする。
【０００８】
要するに、プロシージャ間で受け渡しされるスタック指向パラメータにもとづく既存のシステム・アーキテクチャは、以下の制限を被る。
i）プロシージャ呼び出しの各インスタンスに対して、スタック上にパラメータをロードし、スタックからパラメータをアンロードするオーバヘッドによる性能上の不利益
ii）実行効率の低下につながる、アプリケーションの異なるモジュール内での類似の機能の不要な複製
iii）頻繁に使用される関連アプリケーション間の不十分な統合
iv）性能向上のための対称マルチプロセッサ、並列コンピュータ、ＮＵＭＡ及びクラスタ技術の非効率的なサポート
【０００９】
【発明が解決しようとする課題】
本発明の目的は、前述の欠点を除去すると共に、機能の不要な複製を回避し、アプリケーション及び多重処理環境の有効な統合をサポートする、パラメータ受け渡しの効率的なシステムを提供することである。
【００１０】
【課題を解決するための手段】
前記目的を達成するために、本発明は少なくとも１つのプロセッサと、メモリ及び記憶装置と、入出力装置とを含み、パラメータがプロシージャに渡されるソフトウェア・プログラムを実行するコンピュータ・システムにおいて、より効率的なオペレーションのために、スタックを使用することなく、パラメータをプロシージャに渡す呼び出しマップ・データ構造手段を含むことを特徴とする。
【００１１】
呼び出しマップ・データ構造手段は、繰り返し使用される機構を有する。
【００１２】
呼び出しマップ・データ構造手段は、幾つかのプロシージャのための共用データ・レポジトリである。
【００１３】
呼び出しマップ・データ構造手段は、ネスト化プロシージャに渡って共用される機構を含む。
【００１４】
呼び出しマップ・データ構造手段は、プロシージャ間の呼び出し関係にもとづき、階層宣言マップ手段から導出され、プロシージャ呼び出し階層内の各レベルにレベル番号を割当てる。
【００１５】
呼び出しマップ・データ構造手段は、プロシージャ間の完全な階層関係を捕獲するように構成される。
【００１６】
既存の呼び出しマップ・データ構造手段が使用中で、並行実行が所望される場合、新たな呼び出しマップ・データ構造手段が作成され使用される。
【００１７】
プロシージャ再帰が要求される場合、新たな呼び出しマップ・データ構造手段が作成されるか、フリー呼び出しマップ・データ構造手段が使用される。
【００１８】
呼び出しマップ・データ構造手段は固有のマップ識別子を有して作成され、次のように構造化される。すなわち、
0003689358.tif 000002
【００１９】
プロシージャ呼び出しマップ・データ構造手段の"使用フラグ"（Use-flag）は、プロシージャの実行の開始時に"１"にセットされ、プロシージャの実行の終了時にリセットされる。
【００２０】
呼び出しマップ・データ構造手段の"保管フラグ"（Save-flag）は、プロシージャの続く呼び出しによる再利用のために、パラメータを保管する。
【００２１】
呼び出しマップ・データ構造手段は、パラメータの複数のコピーの作成を回避するために、囲まれたプロシージャ階層内の任意のパラメータを初期化するように構成され、初期化が構造レベルでの呼び出し以前の初期化を含む。
【００２２】
呼び出しマップ・データ構造手段は、プロシージャの再帰及び反復をサポートし、プロシージャが呼び出される回数はランタイムの間にだけ知れる。
【００２３】
呼び出しマップ・データ構造手段のデータ領域が事前に割当てられ、プログラム実行と共に成長し得る。
【００２４】
呼び出しマップ・データ構造手段が、階層宣言マップを用いて１度だけ宣言され、どこからも参照される。
【００２５】
呼び出しマップ・データ構造手段が、プロシージャ・コンパイルの間に.imapファイルとして作成され、それ自身の階層マップ内にプロシージャの宣言を含む。
【００２６】
呼び出しマップ・データ構造手段が、関連プロシージャの範囲内でのみ見ることができる。
【００２７】
呼び出しマップ・データ構造手段の各呼び出しが、その所有スレッドによってのみアクセス可能な別々のデータ領域を割当てられる。また、こうしたデータ領域は、各割当て領域を分離するガード・ページと共に割当てられ、それにより有り得るオーバラップを回避する。
【００２８】
本発明はまた、パラメータをプロシージャに渡す方法を提供し、この方法は、呼び出しマップ・データ構造を使用することにより、スタックを使用することなく、パラメータをプロシージャに渡し、より効率的なオペレーションを達成することを特徴とする。
【００２９】
呼び出しマップ・データ構造は、繰り返し使用される。
【００３０】
呼び出しマップ・データ構造は、幾つかのプロシージャのための共用データ・レポジトリである。
【００３１】
呼び出しマップ・データ構造は、ネスト化プロシージャに渡って共用され得る。
【００３２】
この方法は、呼び出しマップ・データ構造を、プロシージャ間の呼び出し関係にもとづき、階層宣言マップから導出し、プロシージャ呼び出し階層内の各レベルにレベル番号を割当てるステップを含む。
【００３３】
この方法は、プロシージャ間の完全な階層関係を捕獲する呼び出しマップ・データ構造を構成するステップを含む。
【００３４】
既存の呼び出しマップ・データ構造が使用中で、並行実行が所望される場合、新たな呼び出しマップを作成し、使用するステップを含む。
【００３５】
この方法は、プロシージャ再帰が要求される場合、新たな呼び出しマップを作成するか、フリー呼び出しマップを使用するステップを含む。
【００３６】
この方法は、固有のマップ識別子を有する呼び出しマップ・データ構造を作成し、次のように構造化するステップを含む。
0003689358.tif 000003
【００３７】
この方法は、プロシージャの実行の開始時に、プロシージャ呼び出しマップの"使用フラグ"（Use-flag）を"１"にセットし、プロシージャの実行の終了時にリセットするステップを含む。
【００３８】
この方法は、呼び出しマップ内の"保管フラグ"（Save-flag）をセットして、プロシージャの続く呼び出しによる再利用のために、パラメータを保管するステップを含む。
【００３９】
この方法は、パラメータの複数のコピーの作成を回避するために、囲まれたプロシージャ階層内の任意のパラメータを初期化するように、呼び出しマップを構成するステップを含み、初期化が構造レベルでの呼び出し以前の初期化を含む。
【００４０】
この方法は、プロシージャの再帰及び反復をサポートし、プロシージャが呼び出される回数はランタイムの間にだけ知れる。
【００４１】
この方法は、呼び出しマップのデータ領域を事前に割当てるステップを含み、データ領域がプログラム実行と共に成長し得る。
【００４２】
この方法は、階層宣言マップを用いて、呼び出しマップ・データ構造を１度だけ宣言するステップを含み、呼び出しマップ・データ構造をどこからでも参照する機能を含む。
【００４３】
この方法は、プロシージャ・コンパイルの間に、呼び出しマップ・データ構造を.imapファイルとして作成するステップを含み、それ自身の階層マップ内にプロシージャの宣言を含む。
【００４４】
この方法は、呼び出しマップ・データ構造手段を関連プロシージャの範囲内でのみ見えるようにするステップを含む。
【００４５】
この方法は、呼び出しマップの各呼び出しに対して、その所有スレッドによってのみアクセス可能な別々のデータ領域を割当てるステップを含み、こうしたデータ領域が、各割当て領域を分離するガード・ページと共に割当てられ、それにより有り得るオーバラップを回避する。
【００４６】
本発明は更に、コンピュータ・システムに、パラメータをプロシージャに渡すように指示するコンピュータ可読コードを有する、コンピュータ可読記憶媒体を含むコンピュータ・プログラム製品を提供し、このコンピュータ・プログラム製品は、前記コンピュータに、スタックを使用することなく、呼び出しマップ・データ構造を用いてパラメータを渡すように指示するコンピュータ可読コード手段を含み、より効率的なオペレーションを達成することを特徴とする。
【００４７】
コンピュータ・プログラム製品は、呼び出しマップ・データ構造が繰り返し使用されることを可能にするコンピュータ可読コード手段を含む。
【００４８】
コンピュータ・プログラム製品は、呼び出しマップ・データ構造を幾つかのプロシージャのための共用データ・レポジトリとして機能させるコンピュータ可読コード手段を含む。
【００４９】
コンピュータ・プログラム製品は、呼び出しマップ・データ構造がネスト化プロシージャに渡って共用されることを可能にするコンピュータ可読コード手段を含む。
【００５０】
コンピュータ・プログラム製品は、呼び出しマップ・データ構造を、プロシージャ間の呼び出し関係にもとづき、階層宣言マップ手段から導出するコンピュータ可読コード手段を含み、プロシージャ呼び出し階層内の各レベルにレベル番号が割当てられる。
【００５１】
コンピュータ・プログラム製品は、呼び出しマップ・データ構造を、プロシージャ間の完全な階層関係を捕獲するように構成するコンピュータ可読コード手段を含む。
【００５２】
コンピュータ・プログラム製品は、既存の呼び出しマップ・データ構造が使用中で、並行実行が所望される場合、新たな呼び出しマップを作成し使用するコンピュータ可読コード手段を含む。
【００５３】
コンピュータ・プログラム製品は、プロシージャ再帰が要求される場合、新たな呼び出しマップを作成するか、或いはフリー呼び出しマップを使用するコンピュータ可読コード手段を含む。
【００５４】
コンピュータ・プログラム製品は、呼び出しマップ・データ構造を固有のマップ識別子を有して作成するコンピュータ可読コード手段を含み、呼び出しマップ・データ構造が次のように構造化される。
0003689358.tif 000004
【００５５】
コンピュータ・プログラム製品は、プロシージャの実行の開始時に、プロシージャ呼び出しマップの"使用フラグ"（Use-flag）を"１"にセットし、プロシージャの実行の終了時にリセットするコンピュータ可読コード手段を含む。
【００５６】
コンピュータ・プログラム製品は、呼び出しマップ内の"保管フラグ"（Save-flag）をセットして、プロシージャの続く呼び出しによる再利用のためにパラメータを保管するコンピュータ可読コード手段を含む。
【００５７】
コンピュータ・プログラム製品は、パラメータの複数のコピーの作成を回避するために、囲まれたプロシージャ階層内の任意のパラメータを初期化するように、呼び出しマップを構成するコンピュータ可読コード手段を含み、構造レベルでの呼び出し以前の初期化が含まれる。
【００５８】
コンピュータ・プログラム製品は、プロシージャの再帰及び反復をサポートするコンピュータ可読コード手段を含み、プロシージャが呼び出される回数はランタイムの間にだけ知れる。
【００５９】
コンピュータ・プログラム製品は、呼び出しマップのデータ領域を事前に割当て、データ領域がプログラム実行と共に成長することを可能にするコンピュータ可読コード手段を含む。
【００６０】
コンピュータ・プログラム製品は、階層宣言マップを用いて、呼び出しマップ・データ構造を１度だけ宣言し、呼び出しマップ・データ構造をどこからでも参照可能にするコンピュータ可読コード手段を含む。
【００６１】
コンピュータ・プログラム製品は、プロシージャ・コンパイルの間に、呼び出しマップ・データ構造を.imapファイルとして作成し、それ自身の階層マップ内にプロシージャの宣言を含ませるコンピュータ可読コード手段を含む。
【００６２】
コンピュータ・プログラム製品は、呼び出しマップ・データ構造を関連プロシージャの範囲内でのみ見えるようにするコンピュータ可読コード手段を含む。
【００６３】
コンピュータ・プログラム製品は、呼び出しマップの各呼び出しに対して、その所有スレッドによってのみアクセス可能な別々のデータ領域を割当てるコンピュータ可読コード手段を含み、こうしたデータ領域が、各割当て領域を分離するガード・ページと共に割当てられ、それにより有り得るオーバラップを回避する。
【００６４】
【発明の実施の形態】
図１は、典型的なプロシージャ階層を示す。ここではノードはプロシージャを表す。プロシージャ間の線は、線のルートにあるプロシージャが、その端部にあるプロシージャを呼び出すことを示す。実線はプロシージャのサービスの最も有力な消費者を示す。
【００６５】
図２は、図１に示されるプロシージャ階層の階層宣言マップを示す。プロシージャはプロシージャ階層に従いネスト化される。各プロシージャ宣言は、それ自身内にデータ宣言ブロックを含む。階層宣言マップはコンパイラにより、*.imapバイナリ・ファイルを生成するために使用される。
【００６６】
プロシージャ２.１１がプロシージャ１によっても呼び出される状況を考慮し、再定義文が、プロシージャ２.１１の呼び出しを表すダミー・プロシージャ１.１を追加することにより使用される。再定義の場合、データ・ブロック定義が繰り返される必要がない。
【００６７】
図３は、典型的なデータ宣言ブロックを示す。３つのタイプのデータが存在する。すなわち、
i）パーシスタント：
このデータはプロシージャの完了後にも持続し、結果が保管され、プロシージャの次の呼び出しの間に使用可能である。各パーシスタント・データ項目はプログラムのインスタンスに結合される必要がある。
ii）専用：
このデータはプロシージャの呼び出しの間に初期化され、プロシージャの実行の終わりに無効化される。
iii）パラメトリック：
このデータは一般に、情報を呼び出し側と呼び出し先のプロシージャとの間で交換するために使用される入出力パラメータである。パラメトリック・データの範囲は、そのブロック内でネスト化されるプロシージャにより使用可能なデータを含む。
【００６８】
図４は、呼び出しマップを用いる実行可能コードの作成に要求されるステップを示す。これは２つのフェーズに分割される。すなわち、
i）事前コンパイル・フェーズ
ii）コンパイル・フェーズ
【００６９】
事前コンパイル・フェーズでは、各モジュールを識別し（１）、システムは特殊目的の、または一般に使用可能なプログラミング言語を用いて、ソース及びヘッダ・ファイルを作成する（２）。ソース及びヘッダ・ファイルが次に、手動式にまたはツールの支援により、階層宣言マップ・ファイルを作成するために使用される（３）。コンパイル・フェーズでは、階層宣言マップ・ファイルがバイナリ*.IMAPファイルに変換される（４）。コンピュータは次に、共用パラメトリック領域を通じてのデータの複製の除去や、保管された呼び出しマップの再利用、及び計算ステップの最適化など、コード最適化機会を識別する（５）。最適化に続き、データ領域の構築、及びモジュールの呼び出しマップの構築が行われる（６）。バイナリ実行可能の最終生成が次に実行されて（７）、コード内のデータ・ロケーションが呼び出しマップ内のアドレスを参照し、反復及び再帰を処理する論理が含まれる。
【００７０】
図５は、プログラムの実行の間の呼び出しマップのステータスを示す。最初に、実行の範囲が定義され（８）、続いて呼び出しマップがロードされ初期化される（９）。その間、各プロシージャのパーシスタント・データが、実行インスタンス及び呼び出しマップとリンクされる。コードが次に実行され（１０）、次のステップが含まれる。
i）各レベルの"使用フラグ"をセット
ii）呼び出しマップを移植
iii）実行後に各レベルの"使用フラグ"をリセット、または"保管フラグ"をセット
iv）実行結果にもとづき、変更をパーシスタント・データに伝達
v）必要に応じて、増分呼び出しマップの追加のコピーを作成
vi）可能な場合、呼び出しマップを再利用
これでプロセスが完了する（１１）。
【００７１】
注意：
反復実行の処理：
プロシージャの呼び出しマップの使用フラグは、プロシージャの実行の開始時に"１"にセットされ、実行の終了時にリセットされる。同じデータ領域がパラメータをロードし、専用データを初期化するために再利用され得る。
【００７２】
並行（マルチスレッド）実行の処理：
既存の呼び出しマップが使用中の場合に、並行実行が試行されるとき、新たなマップが作成され使用される。
【００７３】
再帰の処理：
呼び出し元のマップとは異なる新たなマップが作成される（またはフリー・マップが使用される）。
【００７４】
再利用：
パラメータをロードする過去の努力が、次の呼び出しにおいて、ロード済みのパラメトリック領域の再利用により活用される。これは呼び出しマップ内の保管フラグにより達成される。（これは使用フラグのチェックが保管フラグのチェックと併せて実行されるべきことを意味する。）
【００７５】
パーシスタント・データ・インスタンス化：
パーシスタント・データは、呼び出しマップに対して、別々にインスタンス化される必要がある。なぜなら、パーシスタント・データはプロシージャの実行の終了後にも、存続すると思われるからである。これは次のデータ構造を用いて達成される。すなわち、
0003689358.tif 000005
【００７６】
インスタンスＩＤは場合に応じて、プログラムの所与のインスタンスに関連付けられるパーシスタント・データ・ブロックを独自に識別する。各モジュールに対して、子ノードのための共通のパーシスタント・データを保持するルート・プロシージャが存在し得る。イニット・フラグ（Init-flag）は、データ・アイテムが既に初期化されているか否かを示す。
【００７７】
図６は、従来のプログラミング・システムにおけるパラメータ受け渡しのモードを示す。
【００７８】
注意：
実行されると予想されるステップのセットが、次の仮の中間コード言語を用いて表される。
Procedure1：
Procedure2.param1=p1;
Procedure3.param2=p2;
Call Procedure2;
Printf(The output is %d“,Procedure2.param2);
Printf(“The output is %d..”,Procedure1.param3);
End Call Procedure2;/*これは再利用に有効な呼び出しマップを生成する*/
Return
Procedure2:
Procedure2.param1=p1+q2;
Call Procedure3;
Return;
Procedure3:
Procedure1.param3=Procedure3.param2*q5;
Return;
【００７９】
パラメータ１及びパラメータ２は、呼び出し側プロシージャ１から呼び出し先プロシージャ２に渡され、パラメータ２は更にプロシージャ２により、それにより呼び出されるプロシージャ３に渡される。プロシージャ３は結果をパラメータ３として返却する。プロシージャ２はパラメータ３を呼び出し側プロシージャ１に受け渡す。
【００８０】
図７は、図６と同様のパラメータ受け渡しが、呼び出しマップ・ベースのアーキテクチャにおいて、より効率的に行われる様子を示す。順方向矢印は入力パラメータを示し、逆方向矢印は出力パラメータを示す。破線は考慮対象の矢印に沿って、パラメータに変化がないことを示し、実線は変化があることを示す。
【００８１】
図８は、反復プログラムが従来のプログラム実行モデルにおいて実行される様子を示す。考慮対象のコードの一部が以下のように与えられる。
@Out_buf-ptr=@Out_buf_start
For I:=1 to 4 do begin
Write(File_Handle, 256, @Out_buf_ptr);
@Out_buf_ptr:=@Out_buf_ptr+256;
end
【００８２】
書込みのための各呼び出しにより、３つの内部プロシージャの全てが４回呼び出される。図９は、図８と同様の反復プログラムが、呼び出しマップ・ベースのアーキテクチャを用いて最適化される様子を示す。図９において、１度目の実行の結果は保管されると予想され、プロシージャFile_handle_to_File_Nameは１度だけ呼び出される。再度、既に割当てられたパラメータが保管され、パラメータ値に変化がある場合にのみ、追加の計算ステップが実行される。
【００８３】
図１０は、プログラム実行データのメモリ・レイアウトを示す。
【００８４】
データの記憶は、次のようにヒープ（heap）上で割当てられる。これは専用データ領域と共用データ領域を分離する役目をするだけである。コンパイラは、専用データについては、許可されたときにだけアクセスされること、また共用データについては、特定のプロシージャによってのみアクセスされることをチェックすると予想される。
【００８５】
注意：
全てのプロセス・データは任意の他のプロセスによるアクセスから保護される。なぜなら、こうしたアクセスは、一般保護障害または類似のエラーを生成すると予想されるからである。プロセスにおいて、複数のスレッドによりアクセス可能なプロシージャのパーシスタント・データは、複数のスレッドがそれを同時にアクセスし得る場合、共用資源をアクセスする場合のように、調整機構により保護される必要がある。
【００８６】
各呼び出しは別々の領域を割当てられるので、こうした呼び出しのデータ領域はその所有スレッドによってのみアクセスされる。呼び出しマップは再度、メモリ内に割当てられ、ガード・ページが異なる割当て領域を分離する。これは呼び出しマップが互いにステップ・オーバすることなく、成長することを可能にする。
【００８７】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００８８】
（１）少なくとも１つのプロセッサと、メモリ及び記憶装置と、入出力装置とを含み、パラメータがプロシージャに渡されるソフトウェア・プログラムを実行するコンピュータ・システムであって、より効率的なオペレーションのために、スタックを使用することなく、前記パラメータをプロシージャに渡すための呼び出しマップ・データ構造手段を含むシステム。
（２）前記呼び出しマップ・データ構造手段が、繰り返し使用される機構を有する、前記（１）記載のシステム。
（３）前記呼び出しマップ・データ構造手段が、幾つかのプロシージャのための共用データ・レポジトリである、前記（１）記載のシステム。
（４）前記呼び出しマップ・データ構造手段が、ネスト化プロシージャに渡って共用される機構を含む、前記（１）記載のシステム。
（５）前記呼び出しマップ・データ構造手段が、プロシージャ間の呼び出し関係にもとづき、階層宣言マップ手段から導出され、プロシージャ呼び出し階層内の各レベルにレベル番号を割当てる、前記（１）記載のシステム。
（６）前記呼び出しマップ・データ構造手段が、プロシージャ間の完全な階層関係を捕獲するように構成される、前記（１）記載のシステム。
（７）既存の前記呼び出しマップ・データ構造手段が使用中で、並行実行が所望される場合、新たな呼び出しマップ・データ構造手段が作成されて、使用される、前記（１）記載のシステム。
（８）プロシージャ再帰が要求される場合、新たな呼び出しマップ・データ構造手段が作成されるか、フリー呼び出しマップ・データ構造手段が使用される、前記（１）記載のシステム。
（９）前記呼び出しマップ・データ構造手段が固有のマップ識別子と共に作成され、前記呼び出しマップ・データ構造手段が、プロシージャ名、インスタンスＩＤ、呼び出しマップ識別子、使用フラグ、保管フラグ、保管済みプログラム・カウンタ、パラメトリック・データを指し示すポインタ、専用データを指し示すポインタ、兄弟呼び出しマップを指し示すポインタ、子呼び出しマップを指し示すポインタ、同一のプロシージャにおいて、次の呼び出しマップを指し示すポインタ、親呼び出しマップを指し示すポインタを用いて構造化される、前記（１）記載のシステム。
（１０）プロシージャ呼び出しマップ・データ構造手段の使用フラグが、プロシージャの実行の開始時に１にセットされ、前記プロシージャの実行の終了時にリセットされる、前記（９）記載のシステム。
（１１）前記呼び出しマップ・データ構造手段の保管フラグが、プロシージャの続く呼び出しによる再利用のために、前記パラメータを保管する、前記（９）記載のシステム。
（１２）前記呼び出しマップ・データ構造手段が、囲まれたプロシージャ階層内の任意のパラメータを初期化し、前記パラメータの複数のコピーの作成を回避するように構成され、前記初期化が構造レベルでの呼び出し以前の初期化を含む、前記（９）記載のシステム。
（１３）前記呼び出しマップ・データ構造手段が、プロシージャの再帰及び反復をサポートし、前記プロシージャが呼び出される回数がランタイムの間にだけ知れる、前記（１）記載のシステム。
（１４）前記呼び出しマップ・データ構造手段のデータ領域が事前に割当てられ、プログラム実行と共に成長し得る、前記（１）記載のシステム。
（１５）前記呼び出しマップ・データ構造手段が、階層宣言マップを用いて１度だけ宣言され、どこからも参照される、前記（１）記載のシステム。
（１６）前記呼び出しマップ・データ構造手段が、プロシージャ・コンパイルの間に.imapファイルとして作成され、それ自身の階層マップ内にプロシージャの宣言を含む、前記（１）記載のシステム。
（１７）前記呼び出しマップ・データ構造手段が、関連プロシージャの範囲内でのみ見ることができる、前記（４）記載のシステム。
（１８）前記呼び出しマップ・データ構造手段の各呼び出しが、その所有スレッドによってのみアクセス可能な別々のデータ領域を割当てられ、前記データ領域が、各割当て領域を分離するガード・ページと共に割当てられ、それにより有り得るオーバラップを回避する、前記（７）記載のシステム。
（１９）パラメータをプロシージャに渡す方法であって、呼び出しマップ・データ構造を用いることにより、スタックを使用することなく、パラメータをプロシージャに渡し、より効率的なオペレーションを達成する方法。
（２０）前記呼び出しマップ・データ構造が繰り返し使用される、前記（１９）記載の方法。
（２１）前記呼び出しマップ・データ構造が、幾つかのプロシージャのための共用データ・レポジトリである、前記（１９）記載の方法。
（２２）前記呼び出しマップ・データ構造が、ネスト化プロシージャに渡って共用され得る、前記（１９）記載の方法。
（２３）前記呼び出しマップ・データ構造を、プロシージャ間の呼び出し関係にもとづき、階層宣言マップから導出し、プロシージャ呼び出し階層内の各レベルにレベル番号を割当てるステップを含む、前記（１９）記載の方法。
（２４）プロシージャ間の完全な階層関係を捕獲する前記呼び出しマップ・データ構造を構成するステップを含む、前記（１９）記載の方法。
（２５）既存の前記呼び出しマップ・データ構造が使用中で、並行実行が所望される場合、新たな呼び出しマップを作成し、使用するステップを含む、前記（１９）記載の方法。
（２６）プロシージャ再帰が要求される場合、新たな呼び出しマップを作成するか、フリー呼び出しマップを使用するステップを含む、前記（１９）記載の方法。
（２７）前記呼び出しマップ・データ構造を固有のマップ識別子と共に作成し、前記呼び出しマップ・データ構造を、プロシージャ名、インスタンスＩＤ、呼び出しマップ識別子、使用フラグ、保管フラグ、保管済みプログラム・カウンタ、パラメトリック・データを指し示すポインタ、専用データを指し示すポインタ、兄弟呼び出しマップを指し示すポインタ、子呼び出しマップを指し示すポインタ、同一のプロシージャにおいて、次の呼び出しマップを指し示すポインタ、親呼び出しマップを指し示すポインタを用いて構造化するステップを含む、前記（１９）記載の方法。
（２８）プロシージャの実行の開始時に、プロシージャ呼び出しマップの使用フラグを１にセットし、前記プロシージャの実行の終了時にリセットするステップを含む、前記（２７）記載の方法。
（２９）前記呼び出しマップ内の保管フラグをセットして、プロシージャの続く呼び出しによる再利用のために、前記パラメータを保管するステップを含む、前記（２７）記載の方法。
（３０）囲まれたプロシージャ階層内の任意のパラメータを初期化し、前記パラメータの複数のコピーの作成を回避するように、前記呼び出しマップを構成するステップを含み、前記初期化が構造レベルでの呼び出し以前の初期化を含む、前記（２７）記載の方法。
（３１）プロシージャの再帰及び反復をサポートするステップを含み、前記プロシージャが呼び出される回数がランタイムの間にだけ知れる、前記（１９）記載の方法。
（３２）前記呼び出しマップのデータ領域を事前に割当てるステップを含み、前記データ領域がプログラム実行と共に成長し得る、前記（１９）記載の方法。
（３３）階層宣言マップを用いて、前記呼び出しマップ・データ構造を１度だけ宣言するステップを含み、前記呼び出しマップ・データ構造をどこからでも参照する機能を含む、前記（１９）記載の方法。
（３４）プロシージャ・コンパイルの間に、前記呼び出しマップ・データ構造を.imapファイルとして作成するステップを含み、それ自身の階層マップ内にプロシージャの宣言を含む、前記（１９）記載の方法。
（３５）前記呼び出しマップ・データ構造手段を関連プロシージャの範囲内でのみ見えるようにするステップを含む、前記（２２）記載の方法。
（３６）前記呼び出しマップの各呼び出しに対して、その所有スレッドによってのみアクセス可能な別々のデータ領域を割当てるステップを含み、前記データ領域が、各割当て領域を分離するガード・ページと共に割当てられ、それにより有り得るオーバラップを回避する、前記（２５）記載の方法。
（３７）コンピュータ・システムに、パラメータをプロシージャに渡すように指示するコンピュータ可読コードを有する、コンピュータ可読記憶媒体を含むコンピュータ・プログラム製品であって、前記コンピュータ・プログラム製品が、前記コンピュータに、スタックを使用することなく、呼び出しマップ・データ構造を用いてパラメータを渡すように指示するコンピュータ可読コード手段を含み、より効率的なオペレーションを達成するコンピュータ・プログラム製品。
（３８）前記呼び出しマップ・データ構造が繰り返し使用されることを可能にするコンピュータ可読コード手段を含む、前記（３７）記載のコンピュータ・プログラム製品。
（３９）前記呼び出しマップ・データ構造を幾つかのプロシージャのための共用データ・レポジトリとして機能させるコンピュータ可読コード手段を含む、前記（３７）記載のコンピュータ・プログラム製品。
（４０）前記呼び出しマップ・データ構造がネスト化プロシージャに渡って共用されることを可能にするコンピュータ可読コード手段を含む、前記（３７）記載のコンピュータ・プログラム製品。
（４１）前記呼び出しマップ・データ構造を、プロシージャ間の呼び出し関係にもとづき、階層宣言マップ手段から導出し、プロシージャ呼び出し階層内の各レベルにレベル番号を割当てるコンピュータ可読コード手段を含む、前記（３７）記載のコンピュータ・プログラム製品。
（４２）前記呼び出しマップ・データ構造を、プロシージャ間の完全な階層関係を捕獲するように構成するコンピュータ可読コード手段を含む、前記（３７）記載のコンピュータ・プログラム製品。
（４３）既存の前記呼び出しマップ・データ構造が使用中で、並行実行が所望される場合、新たな呼び出しマップを作成し使用するコンピュータ可読コード手段を含む、前記（３７）記載のコンピュータ・プログラム製品。
（４４）プロシージャ再帰が要求される場合、新たな呼び出しマップを作成するか、或いはフリー呼び出しマップを使用するコンピュータ可読コード手段を含む、前記（３７）記載のコンピュータ・プログラム製品。
（４５）前記呼び出しマップ・データ構造を固有のマップ識別子と共に作成し、前記呼び出しマップ・データ構造を、プロシージャ名、インスタンスＩＤ、呼び出しマップ識別子、使用フラグ、保管フラグ、保管済みプログラム・カウンタ、パラメトリック・データを指し示すポインタ、専用データを指し示すポインタ、兄弟呼び出しマップを指し示すポインタ、子呼び出しマップを指し示すポインタ、同一のプロシージャにおいて、次の呼び出しマップを指し示すポインタ、親呼び出しマップを指し示すポインタを用いて構造化するコンピュータ可読コード手段を含む、前記（３７）記載のコンピュータ・プログラム製品。
（４６）プロシージャの実行の開始時に、プロシージャ呼び出しマップの使用フラグを１にセットし、前記プロシージャの実行の終了時にリセットするコンピュータ可読コード手段を含む、前記（４５）記載のコンピュータ・プログラム製品。
（４７）前記呼び出しマップ内の保管フラグをセットして、プロシージャの続く呼び出しによる再利用のために、パラメータを保管するコンピュータ可読コード手段を含む、前記（４５）記載のコンピュータ・プログラム製品。
（４８）囲まれたプロシージャ階層内の任意のパラメータを初期化し、前記パラメータの複数のコピーの作成を回避するように、前記呼び出しマップを構成するコンピュータ可読コード手段を含み、前記初期化が構造レベルでの呼び出し以前の初期化を含む、前記（４５）記載のコンピュータ・プログラム製品。
（４９）プロシージャの再帰及び反復をサポートするコンピュータ可読コード手段を含み、プロシージャが呼び出される回数がランタイムの間にだけ知れる、前記（３７）記載のコンピュータ・プログラム製品。
（５０）前記呼び出しマップのデータ領域を事前に割当て、前記データ領域がプログラム実行と共に成長することを可能にするコンピュータ可読コード手段を含む、前記（３７）記載のコンピュータ・プログラム製品。
（５１）階層宣言マップを用いて、前記呼び出しマップ・データ構造を１度だけ宣言し、前記呼び出しマップ・データ構造をどこからでも参照可能にするコンピュータ可読コード手段を含む、前記（３７）記載のコンピュータ・プログラム製品。
（５２）プロシージャ・コンパイルの間に、前記呼び出しマップ・データ構造を.imapファイルとして作成し、それ自身の階層マップ内にプロシージャの宣言を含ませるコンピュータ可読コード手段を含む、前記（３７）記載のコンピュータ・プログラム製品。
（５３）前記呼び出しマップ・データ構造を関連プロシージャの範囲内でのみ見えるようにするコンピュータ可読コード手段を含む、前記（４０）記載のコンピュータ・プログラム製品。
（５４）前記呼び出しマップの各呼び出しに対して、その所有スレッドによってのみアクセス可能な別々のデータ領域を割当てるコンピュータ可読コード手段を含み、前記データ領域が、各割当て領域を分離するガード・ページと共に割当てられ、それにより有り得るオーバラップを回避する、前記（４３）記載のコンピュータ・プログラム製品。
【図面の簡単な説明】
【図１】典型的なプロシージャ階層を示す図である。
【図２】図１のプロシージャ階層の階層宣言マップを示す図である。
【図３】典型的なデータ宣言ブロックを示す図である。
【図４】呼び出しマップを用いる実行可能コードの作成に要求されるステップを示す図である。
【図５】プログラムの実行の間の呼び出しマップのステータスを示す図である。
【図６】従来のプログラミング・システムにおけるパラメータ受け渡しのモードを示す図である。
【図７】図６と同様のパラメータ受け渡しが、呼び出しマップを用いて効率的に行われる様子を示す図である。
【図８】反復プログラムが従来のプログラミング・システムにおいて実行される様子を示す図である。
【図９】図８と同様の反復プログラムが、呼び出しマップを用いて最適化される様子を示す図である。
【図１０】プログラム実行データのメモリ・レイアウトを示す図である。
【図１】
0003689358.tif 000006
【図２】
0003689358.tif 000007
【図３】
0003689358.tif 000008
【図４】
0003689358.tif 000009
【図５】
0003689358.tif 000010
【図６】
0003689358.tif 000011
【図７】
0003689358.tif 000012
【図８】
0003689358.tif 000013
【図９】
0003689358.tif 000014
【図１０】
0003689358.tif 000015