(57)【要約】データ処理システムにおけるアプリケーションの異なる機能による広域変数へのアクセスによって生ずるデータ非整合性を回避する方法であって、ａ）データ処理システム内で実行されるべき機能グループ（Ｏ１、…、Ｏｍ）の記号的なオブジェクトコードを準備し、干渉する機能と称され、かつ同一の広域変数にアクセスする機能（Ｏ１、Ｏ２、Ｏｎ、Ｏｍ）を識別し、ｂ）少なくとも１つの干渉する機能を選択し、ｃ）広域変数の値によって補助変数を初期化するステップ（Ｉ）を、ステップｂ）で選択された各機能のオブジェクトコード内に挿入し、または選択された機能を呼出す機能のオブジェクトコード内に呼出し前に挿入し、ｄ）選択された機能のオブジェクトコード内における広域変数の記号を、補助変数の記憶領域への参照に置換える方法。【選択図】図１
2007531946.tif 000002
【特許請求の範囲】
【請求項１】
データ処理システムにおけるアプリケーションの異なる機能による広域変数へのアクセスによって生ずるデータ非整合性を回避する方法であって、
ａ）前記データ処理システム内で実行されるべき機能グループ（Ｏ１、…、Ｏｍ）の記号的なオブジェクトコードを準備し、干渉する機能と称され、かつ同一の広域変数にアクセスする前記機能（Ｏ１、Ｏ２、Ｏｎ、Ｏｍ）を識別し、
ｂ）少なくとも１つの前記干渉する機能を選択し、
ｃ）前記広域変数の値によって補助変数を初期化するステップ（Ｉ）を、ステップｂ）で選択された各機能の前記オブジェクトコード内に挿入し、または選択された機能を呼出す機能内に呼出し前に挿入し、
ｄ）前記選択された機能の前記オブジェクトコード内における前記広域変数の記号を、前記補助変数の記憶領域への参照に置換える、
ステップを含むことを特徴とする、データ非整合性を回避する方法。
【請求項２】
ステップｄ）において、前記選択された機能の記号的なオブジェクトコード内で、前記広域変数の記号が前記補助変数の記号に置換えられ、続いて、前記補助変数の記号が前記補助変数の記憶領域への参照に置換えられることを特徴とする、請求項１に記載の方法。
【請求項３】
ステップｄ）において、リンカーが前記広域変数の記号を直接的に前記補助変数の記憶領域への参照に置換えることを特徴とする、請求項１に記載の方法。
【請求項４】
前記リンカーが、少なくとも１つの選択されていない干渉する機能内で、前記広域変数の記号を前記広域変数の記憶領域への参照に置換えることを特徴とする、請求項３に記載の方法。
【請求項５】
少なくとも１つの前記選択された機能で行われた置換えが記録されることを特徴とする、請求項１〜４のいずれか１項に記載の方法。
【請求項６】
少なくとも１つの前記選択された機能で行われた置換えが書込みアクセスに該当する場合には、前記補助変数の値によって前記広域変数を上書するステップが挿入されることを特徴とする、請求項１〜５のいずれか１項に記載の方法。
【請求項７】
ステップａ）における前記干渉する機能の前記識別が前記機能のオブジェクトコードに付加的に準備された情報（ＤＥＳＣＲ、ＶＡＲ）を用いて行われることを特徴とする、請求項１〜６のいずれか１項に記載の方法。
【請求項８】
データ処理システムにおけるアプリケーションの異なる機能による広域変数へのアクセスによって生ずるデータ非整合性を回避する方法であって、
ａ）前記データ処理システム内で実行されるべき機能グループ（Ｏ１、…、Ｏｍ）の記号的なオブジェクトコードを準備し、干渉する機能と称され、かつ同一の広域変数（Ｇ１、Ｇ２）にアクセスする前記機能（Ｏ１、Ｏ２、Ｏｎ、Ｏｍ）を識別し、その際には、前記広域変数（Ｇ１、Ｇ２）が、それらにアクセスする各々の機能の記号的なオブジェクトコード内で、その機能に固有の記号（Ｇ１＿Ｆｉ；Ｇ２＿Ｆｉ）で各々に表されており；
ｂ）少なくとも１つの前記干渉する機能を選択し；
ｃ）前記広域変数（Ｇ１、Ｇ２）を前記機能に固有の記号（Ｇ１＿Ｆｉ；Ｇ２＿Ｆｉ）に対応づけられた記憶領域にコピーする命令（Ｉ）を、ステップｂ）で選択された各機能内に挿入し、または選択された機能を呼出す機能内に呼出し前に挿入し、
ｄ）ステップｂ）で選択されていない各機能のために、各機能に固有の記号を前記広域変数（Ｇ１、Ｇ２）に対応づけられた記憶領域に結合する、
ステップを含むことを特徴とする、データ非整合性を回避する方法。
【請求項９】
前記干渉する機能が前記機能内で前記広域変数のために使用される記号を含むテーブル（ＶＡＲ）を用いて識別されることを特徴とする、請求項８に記載の方法。
【請求項１０】
複数の前記干渉する機能の前記オブジェクトコードがソースコード（Ｓ１、Ｓ２、…、Ｓｎ）からコンパイルされ、コンパイラ（ＣＯＭＰ）は、コンパイルに際して、前記機能のソースコード内に含まれる前記広域変数の同一の名称（Ｇ１；Ｇ２）を、各機能に固有の記号（Ｇ１＿Ｆｉ；Ｇ２＿Ｆｉ）に置換え、前記テーブル（ＶＡＲ）を作成することを特徴とする、請求項９に記載の方法。
【請求項１１】
前記選択された機能が前記機能に固有の記号に対応づけられた記憶領域に書込みアクセスする場合には、前記広域変数を前記コピーの値で上書きするステップＣが挿入されることを特徴とする、請求項８〜１０のいずれか１項に記載の方法。
【請求項１２】
ａ’）前記干渉する機能から他の機能によって中断されうる機能を識別する、ステップを含み、その際には、ステップｂ）において、ステップａ’）で識別された機能のみが選択されることを特徴とする、請求項１〜１１のいずれか１項に記載の方法。
【請求項１３】
ステップａ’）の前記識別が、前記機能の記号的なオブジェクトコードに付加的に準備された情報（ＤＥＳＣＲ、ＶＡＲ）を用いて行われることを特徴とする、請求項１２に記載の方法。
【請求項１４】
相互に中断されるという前記機能の可能性が、付加的に準備された前記情報（ＤＥＳＣＲ、ＶＡＲ）内に記述されている、前記機能の優先順位値を用いて認識されることを特徴とする、請求項１３に記載の方法。
【請求項１５】
請求項１に属する範囲内において、請求項１〜７のいずれか１項または請求項１２〜１４のいずれか１項に記載の方法を実施するための開発ツールであって、前記機能（Ｏ１、…、Ｏｍ）の前記記号的なオブジェクトコードを受取る入力インターフェイス（ＯＰ）と、同一の広域変数にアクセスする、いわゆる干渉する機能（Ｏ１、Ｏ２、Ｏｎ、Ｏｍ）を識別する論理ユニット（ＯＰ）と、前記広域変数の記号を、前記干渉する機能（Ｏ１、Ｏ２、Ｏｎ、Ｏｍ）から選択された少なくとも１つの機能に係る前記オブジェクトコード内における補助変数の、前記広域変数の値で初期化された記憶領域への参照に置換えるオブジェクトコード処理ユニット（ＯＰ、ＶＬＩＮＫ）と、前記機能グループの前記オブジェクトコードを、前記オブジェクトコード処理ユニット（ＯＰ、ＶＬＩＮＫ）による処理の後に実行可能なアプリケーションにリンクするリンカーと、を備えることを特徴とする、開発ツール。
【請求項１６】
請求項８〜１１のいずれか１項、または請求項７に属する範囲内で請求項１２〜１４のいずれか１項に記載の方法を実施するための開発ツールであって、前記機能（Ｏ１、…、Ｏｍ）の前記記号的なオブジェクトコードを受取る入力インターフェイスと、同一の広域変数にアクセスする、いわゆる干渉する機能（Ｏ１、Ｏ２、Ｏｎ、Ｏｍ）を識別する論理ユニットであって、前記広域変数が自らにアクセスする各機能の前記オブジェクトコード内で異なる記号で表されている前記論理ユニットと、選択された機能の前記機能に固有の記号に対応づけられた記憶領域に、前記広域変数をコピーする命令（Ｉ）を挿入するオブジェクトコード処理ユニット（ＬＩＮＫ）と、前記機能グループの前記オブジェクトコードを、前記オブジェクトコード処理ユニットによる処理の後に実行可能なアプリケーションにリンクするリンカー（ＬＩＮＫ）と、を備え、前記リンカーが、前記選択された機能によって前記広域変数のために使用される記号（Ｇ１＿Ｆｉ；Ｇ２＿Ｆｉ）を、前記記号に対応づけられた記憶領域に結合し、かつ前記選択されていない機能によって前記広域変数のために使用される記号を、前記広域変数（Ｇ１；Ｇ２）の記憶領域に結合するように、形成されることを特徴とする、開発ツール。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、リアルタイムアプリケーションが実行されるデータ処理装置におけるデータ整合性の問題に関する。この種のアプリケーションは、一般に複数の機能からなり、それらの機能は、時間的に固定され互いに調整されることなく、広域変数とも称される共通に利用される変数に／を書込み／読取るようにアクセスする。この種の機能が計算を実行するためにこの種の変数を相次いで複数回に亘って読取り、特に２つのこの種の読取りアクセスの間に他の機能によって変数が変更された場合には、計算の結果がエラーを伴うものになると推定されうる。計算が広域変数に複数回の書込みアクセスを必要とし、それに際して暫定的な中間結果が変数に記憶され、他の機能がこの種の中間結果にアクセスする場合には、全く同様にしてエラーが生ずる。
【０００２】
本願の範囲内において、同一の広域変数にアクセスする機能は、個々のケースで機能間の衝突が実際に生じうるか否かに係らず、干渉する機能と称される。
【０００３】
（背景技術）
データ処理システムにおいて広域変数の整合性を保証するための既知の技術は、干渉する機能の重複するアクセスによって妨げられうる広域変数に機能がアクセスする場合には、常に他の全ての機能を同一の変数へのアクセスから除外することである。しかし、この種の方法は、一般にリアルタイムアプリケーションには適さない。というのは、アクセスから除外された変数にアクセスしなければならない機能の実行は、変数へのアクセスが再び許可されるまで停止してしまうからであって、それら機能の実行に際して予測不能な遅延をもたらしうる。
【０００４】
データ整合性を保証するための他の既知の方法は、個々の機能のために広域変数のコピーを各々に使用することである。すなわち、干渉する機能は、その開始に際して、必要とされる広域変数の局所コピーを各々に作成し、続いて、そのコピーによって処理し、機能が変数を変更しうる場合には、その終了前に局所変数を広域変数にコピーバックし、その場合にはコピープロセスが各々に他の機能によって中断されることがない。
【０００５】
複雑なプログラムシステムにおいては、データ非整合性をもたらしうるアクセス衝突の発生箇所が開発の当初には往々にして不明である、という問題がある。この問題は、機能に必要とされる全ての広域変数の局所コピーが各機能内に作成されることで対処されうる。しかし、この種の措置は、記憶領域および処理能力の必要性を著しく増大させる。
【０００６】
システム統合の時点では、どの機能にどの広域変量のコピーが必要とされるか、が常に説明されうる。というのは、この時点では、全ての機能とその実行頻度および優先順位（他の機能を中断する権利）が認識されているからである。システム統合を容易にするために、存在するソースコード内で付加情報を用いてデータ整合性を保証するためにコピーによって処理しなければならない機能を識別し、かつオリジナル変量の代りに対応するコピーによって処理するように当該機能を変更する、例えばＯＬＴ（Off Line Tool）またはＥＳＣＡＰＥ（www.etas.com）のような種々のソフトウェアツールが存在する。さらに、対応するコピープロセスも生成される。これらのコピープロセスは、静的な駆動システム構成に応じて、（相互に中断されないため、共通のコピーが使用されうる。）１つまたは複数の機能のオリジナル変量にコピーを各々に同期させる。これらのツールは、個々の機能の優先順位および分類を確定するために駆動システム構成を読取ることで、機能または機能グループの前後の駆動システム構成内に必要とされるコピープロセスを自動的に挿入しうる。
【０００７】
これらのツールの適用性は、それらがソースコードの変更に依存しているという事実によって制限される。しかし、このソースコードは、必ずしも常には提供されない。特に開発パートナーが第三者から機能を提供される場合には、第三者は、機密保持の理由から往々にして機能をソースコードの形式ではなく、場合によってはオブジェクトコードとして提供する。この種の機能は、既知のツールでは処理されえないので、衝突のないことを保証するために、広範で自動化不能であり、よって高コストでエラーを生じ易い変更がソースコード内に存在する機能に必要となりうる。
【０００８】
さらに、ソースコードへの介入は、変更されたコードの新たな翻訳を毎回必要とする。特に機能（例えば、駆動システム構成）の優先順位の変更は、他の多数の機能のソースコードに広範な変更をもたらしうる。膨大なプログラムシステムにおいては、これが非常に長い翻訳時間をもたらし、開発プロセスを著しく遅延させうる。
【０００９】
他の問題は、既知の開発ツールが、各々に所定の高水準言語に適応されており、すなわち様々な高水準言語で記述された機能を処理するための使用には適していないことである。
【００１０】
（発明の利点）
本発明によれば、データ非整合性を回避する方法とその方法を適用するための開発ツールとが提供され、それらは、そのソースコードが記述される高水準言語に依存せずに、またはソースコードの提供の可能性に係らずに、任意の機能への適用を可能とし、遅滞のない開発を可能にする。
【００１１】
第１の利点は、請求項１に記載の方法において、補助変数の使用に必要とされるその初期化が、ソースコード内に挿入されて続いてオブジェクトコードに変換される代わりに、そこに存在するオブジェクトコード内に直接的に挿入されることでなされる。本発明によれば、初期化に必要とされるプログラムステップが、識別された機能内に直接的に挿入され、または識別された機能を呼出す機能内にその呼出し前に直接的に挿入され、あるいは初期化を引受る補助機能へのジャンプ命令が挿入される。
【００１２】
補助変数は、それを使用する機能の局所変数であって、すなわち、その機能内でのみ定義されてアクセス可能な変数である。実際的には、補助変数が望ましくは広域に定義される。というのは、その際には、互いに衝突しないことが認識されている、複数の干渉する機能が同一の補助変数を使用しうるからである。
【００１３】
選択された機能による広域変数へのアクセスを、補助変数へのアクセスに置換えるには、２つの方法がある。第１の方法においては、まず、選択された機能のうち未だ記号的な形式で存在するオブジェクトコード内で、例えば書込みまたは読取り命令の独立変数として生じうる個々の広域変数の記号を各々に識別し、補助変数の記号に置換える。第２の方法においては、オブジェクトコードをリンクする場合、すなわちオブジェクトコード内で全ての記号を具体的な領域アドレスへの参照に置換える場合には、広域変数の記号を各々にそれに置換えられる補助変数の領域アドレスへの参照に直接的に置換え、書込み／読取りアクセスをいわば「ゆがめ」る。
【００１４】
置換えまたは「ゆがめ」は、望ましくは特殊なツールによって実行され、そのツールはオブジェクトコードデータファイルを読取り、その中で記号を置換え、またはリンカーに該当する命令を挿入し、続いてそれをまた適切な形式のオブジェクトコードデータファイルとして記述しうる。
【００１５】
広域変数の代わりに補助変数を使用する機能の数を必要以上に多くしないために、本方法は、望ましくは、干渉する機能のうち相互に中断されうる機能を識別するステップｃ’）を含み、その際には、補助変数の導入と、そのようにして識別された少なくとも１つの機能のみへのアクセスの置換えとが適用される。他の機能によって中断されず、かつ他の機能を中断しない機能では、データ非整合性を生ずる恐れがないので、置換えが不要である。
【００１６】
このステップｃ’）は、望ましくは前述されたツールによって実行され、そのツールは入力データファイルとして、本来のオブジェクトデータファイルの他に望ましくは付加情報を、望ましくは複数の干渉する機能のうち他の機能によって中断されうるために、広域変数の代わりに補助変数によって処理されねばならないか否か、を示す制御データファイルの１つとして受取る。
【００１７】
相互に中断されるという干渉する機能の可能性は、付加情報内で、望ましくは機能に対応づけられた優先順位値によって定められる。
【００１８】
さらに、望ましくは、例えば実行可能なオブジェクトデータファイルの記述部分への制御データファイルの単純な挿入によって、少なくとも１つの選択された機能内で行われる置換えが記録され、その情報がデバッガーに提供される。この付加情報は、実行された置換えをトレースし、よってツールによって実行された変更をデバッガーの使用者に対して透過的にする可能性を、デバッガーに提供する。これは、特に、ソフトウェアの所定の実行時点でオリジナル変数とコピーとが異なる値を示し、テストされた機能がオリジナル変数または所定のコピーのいずれにアクセスするかをトレースすることを使用者に可能にする場合に、有益となる。
【００１９】
選択された機能で行われる置換えの少なくとも１つが書込みアクセスである場合、すなわち機能が補助変数の値を変更しうる場合には、広域変数を補助変数の値で上書きするステップが、選択された機能のオブジェクトコード内に挿入され、または選択された機能を呼出す機能内にその呼出し後に挿入され、その種の変更が広域に提供可能となる。
【００２０】
他の利点は、請求項８に従って、データ処理システム内で実行されるべき機能グループの記号的なオブジェクトコードが準備され、干渉する機能が識別され、その際には、広域変数が、それらにアクセスする各機能の記号的なオブジェクトコード内で、その機能に固有の記号で各々に表されており、少なくとも１つの干渉する機能が選択され、広域変数を機能に固有の記号に対応づけられた記憶領域にコピーする命令が、選択された各機能内に挿入され、または選択された機能を呼出す機能内にその呼出し前に挿入され、かつ選択されていない各機能のために各機能に固有の記号が広域変数に対応づけられた記憶領域に結合される、ことで得られる。
【００２１】
前述のように定義された方法を実施するツールにおいて、機能に固有の記号に応じて同一の広域変数を各々に識別することを容易にするために、望ましくは、機能内で広域変数のために使用される記号を含むテーブルが準備される。
【００２２】
複数の干渉する機能のオブジェクトコードがソースコードからコンパイルされる際には、望ましくは、そのために使用されるコンパイラが、機能のソースコード内に含まれる広域変数の同一の名称を、各機能に固有の記号に置換えて、テーブルを作成するように定められる。
【００２３】
本発明の他の特徴と利点は、添付図面を参照しながら以下の実施形態を説明することで明らかにされる。
【００２４】
（実施形態の説明）
図１に示される開発ツールは、第１のステップとしてコンパイラＣＯＭＰを備え、それは、開発中のアプリケーションの機能に関する例えばＣのような高水準言語で記述されたソードコードＳ１、Ｓ２、…、Ｓｎを、記号的なオブジェクトコード機能Ｏ１、Ｏ２、…Ｏｎに変換する。記号的なオブジェクトコードは、各々の命令に１：１に対応する命令からなり、それらの命令は、コンパイルすべきソースコードが定められているターゲットプロセッサによって実行可能である。しかし、オブジェクトコードは、直接的に実行可能なコードとは異なり、書込みまたは読取りアクセスおよびジャンプ命令のために領域アドレスではなく記号で表されるアドレスを使用し、そのアドレスには処理の後のステップで初めてリンカーＬＩＮＫによって固定値が割り当てられる。
【００２５】
コンパイラＣＯＭＰの後ステップには、オブジェクトコードプロセッサＯＰが配置されており、それは、コンパイラによって生成された、個々の機能のオブジェクトコードＯ１、Ｏ２、…、Ｏｎと、場合によっては、コンパイラＣＯＭＰによってコンパイルされていない、他の機能のオブジェクトコードＯｎ＋１、…、Ｏｍとを、それらの機能の複数によって使用される広域変数の整合性を保証するために改訂する。オブジェクトコードＯｎ＋１、…、Ｏｍは、例えば元々ソースコードＳ１、Ｓ２、…Ｓｎの言語とは異なる言語で記述された機能、または、アプリケーションの開発者によって追加的に入手された機能であって、そのソースコードが提供されない機能に属することもある。
【００２６】
オブジェクトコードプロセッサＯＰは、開発者によって準備されたデータファイルＤＥＳＣＲにアクセスし、そのデータファイルには、オブジェクトコード機能Ｏ１、…、Ｏｍの各々について、機能がアクセスする広域変数と、機能に割り当てられた優先順位とが詳細に記述されている。
【００２７】
図２は、オブジェクトコードプロセッサＯＰによって実行される処理をフローチャートを用いて示している。ステップ１において、オブジェクトコード機能の１つであるＯｉ（１≦ｉ≦ｍ）が選択される。ステップ２において、データファイルＤＥＳＣＲ内でオブジェクトコード機能Ｏｉのために記述されている広域変数が選択され、ステップ３において、同様にデータファイルＤＥＳＣＲを用いて、選択された機能Ｏｉに干渉する機能、すなわち同一の広域変数にアクセスする機能Ｏｊ（１≦ｊ≦ｍ、ｊ≠ｉ）が存在するか、が調査される。肯定である場合には、ステップＳ４において、どの機能がより高い優先順位を伴うか、が調査される。機能Ｏｉの優先順位が低い場合には、選択された機能Ｏｉが他の機能Ｏｊによって中断される可能性があり、よって、第１の機能Ｏｉによる２つの読取りアクセスの間に、優先順位のより高い他の機能Ｏｊが広域変数を変更させ、または広域変数の定義されていない中間値を読取る場合には、データ非整合性を生ずる恐れがあることを意味している。この場合には、オブジェクトプロセッサは、機能Ｏｉのオブジェクトコード内では、該当する広域変数への最初のアクセスの前に、または機能Ｏｉを呼出す機能では、その呼出しの前に、それらの変数を補助変数にコピーする命令を挿入し、オブジェクトコードＯｉ内の後続する全ての広域変数へのアクセスを補助変数へのアクセスに置換えさせる。この置換えにおいて、アクセスの少なくとも１つが書込みアクセスであることが検出された場合には、さらに、その終了前に実行されるべき、補助変数の値を広域変数にコピーする命令が各々に機能Ｏｉ内に挿入される。代替的に、この種の命令は、呼出しの後に、呼出す機能内に挿入されうる。
【００２８】
ステップ４の調査によって、機能Ｏｉが他の機能Ｏｊと同一またはより高い優先順位を伴うという結果が明らかにされれば、この第１の機能Ｏｉが他の機能Ｏｊによって中断される恐れはなく、コピーの使用は必要ない。この場合には、処理はステップ４からステップ６に直接移行する。
【００２９】
ステップ６は、ステップ１で選択された機能ＯｉについてデータファイルＤＥＳＣＲ内に他の広域変数が記述されているか、を調査し、肯定である場合には、処理は、ステップ２に復帰し、それらの変数の１つを選択する。否定である場合には、ステップ７において、処理すべき機能が未だ存在するか、が調査され、それがなければ処理が終了される。
【００３０】
このようにして、オブジェクトプロセッサは、データ整合性を伴うオブジェクトコード機能のグループＯ’１、…、Ｏ’ｍを生成し、それらに広域変数へのアクセスの種類に応じて広域変数を局所補助変数にコピーする命令のみ（機能が読取りアクセスのみである場合であって、機能Ｏ’１、Ｏ’ｎにおける単一の網掛けブロックＩによって記号的に表されている）、または広域変数を局所変数にコピーし、かつコピーバックする命令（機能が書込みおよび読取りアクセスである場合であって、機能Ｏ’２、Ｏ’ｍにおける２つの網掛けブロックＩ、Ｃによって記号的に表されている）が挿入され、あるいは、当該機能が、該当する広域変数にアクセスする機能に割り当てられる最高の優先順位を伴う場合には、機能Ｏ’ｎ＋１の場合のように命令は挿入されない。
【００３１】
このようにして得られた整合性を伴うオブジェクト機能が、既知の方法でリンカーＬＩＮＫによって実行可能なアプリケーションに結合され、それによって、オブジェクトコードの全ての記号が記憶領域の明確なアドレスに置換えられる。
【００３２】
開発ツールの望ましい発展またはその処理方法が図３を用いて説明される。コンパイラＣＯＭＰと、それによってソースコード機能Ｓ１、…、Ｓｎから生成されたオブジェクトコード機能Ｏ１、…、Ｏｎと、外部のオブジェクト機能Ｏｎ＋１、…、Ｏｍとについては、図１と同様である。しかし、図１とは異なり、これらの機能は、データに整合性を伴わせるために、オブジェクトコードプロセッサＯＰによって処理されずに、オブジェクトコードブロックＯ”１、…、Ｏ”ｐを生成するコードリンカーＣＬＩＮＫを経る。これらのブロックの数は、オブジェクトコード機能に割り当てられ、コードリンカーＣＬＩＮＫによって読取られる、個々のオブジェクトコード機能Ｏ１、Ｏｍのために詳しく定められた優先順位レベルのデータＰＲＩＯの数に相当する。各オブジェクトコードブロックＯ”１〜Ｏ”ｐは、同一の優先順位レベルの機能を含む。最高の優先順位レベルを伴う機能がブロックＯ”１に集約されており、それらの機能はリスクを伴わずに広域変数に直接的にアクセス可能であり、オブジェクトコードプロセッサＯＰで処理される必要はない。他の全てのブロックＯ”２〜Ｏ”ｐは、オブジェクトコードプロセッサＯＰによって、図１および２を参照して説明された整合性処理を施される。機能をより大きなブロックに集約することによって、オブジェクトコードプロセッサＯＰ内の処理が効率化される。個々のブロックの各々の機能は、相互に中断されないため、それらは各広域変数について共通の局所コピーを使用可能であり、それによって記憶領域が節約される。
【００３３】
整合性処理されるブロックＯ”１〜Ｏ”ｐは、続いて、変数リンカーＶＬＩＮＫと称される他のリンクステップ、すなわち、記憶領域への記号的な参照の全てを明確な領域アドレスに置換するリンカーを経ることで、ブロック間のジャンプを示しておりコードリンカーによっては明確なアドレスに置換え不能なジャンプアドレスを解決できる。すなわち、最終的に完成された実行可能なアプリケーションが得られる。
【００３４】
図４に示される実施形態においては、オブジェクトコードブロックＯ”１、…、Ｏ”ｐの生成までの構成と処理は、図３に示される実施形態と区別されない。しｋし、オブジェクトコードプロセッサが省略され、その代わりに変数リンカーＶＬＩＮＫの処理方法が変更されている。この変数リンカーは、各機能について各機能がアクセスする広域変数を詳細に記述しているデータファイルＶＡＲを読取り、その情報を用いてオブジェクトコードブロックＯ”２〜Ｏ”ｐの各々で使用される広域変数を確定する。これら広域変数の各々は、オブジェクトコードブロックのリンク形成に際して、各ブロックに他の明確な領域アドレスを各々に割り当てる。続いて、変数リンカーＶＬＩＮＫは、個々のオブジェクトコードブロックの各々の機能に、ライブラリから読取られたコピー機能を結合することで、機能の最初または最後の各々でコピー機能が実行されるようにし、その際には、それらのコピー機能が当該機能によって使用される各々の広域変数を、当該機能のオブジェクトコードグループＯ”１、…Ｏ”ｐに割り当てられている記憶領域にコピーまたはコピーバックする。これによって、他の実施形態においては、オブジェクトコードプロセッサＯＰによって実行されるオブジェクトコードの操作が不要となり、それにもかかわらず、優先順位の高い機能によって中断の恐れがある全ての機能は、オリジナルにアクセスすることなしに、広域変数のコピーにのみアクセスすることが常に達成される。
【００３５】
図５は、本発明の第４の実施形態に基づく処理のステップを概略的に示している。前述された実施形態のように、第１ステップは、コンパイラＣＯＭＰであって、ソースコードで記述されている機能Ｓ１、Ｓ２、…Ｓｎを記号的なオブジェクトコードＯ１、…、Ｏｎに変換する。図５のコンパイラの特徴は、記号的なオブジェクトコード内で複数の機能によって使用され、かつ、そのソースコード内で同一の名称で表される広域変数については、そのソースコード名称を、それらに干渉する機能の全ての記号的なオブジェクトコード内では、広域変数用の記号として統一的に使用せず、各機能のオブジェクトコード内では、個々の変数用の該当する機能に固有の記号として使用することである。これは、例えば、ソースコードの機能内で呼出す変数を呼出された機能の名称に結合して、コンパイラがオブジェクトコードの記号を各々に生成することで行われうる。すなわち、コンパイラによって生成された、該当する機能のオブジェクトコードＯ１、Ｏ２では、機能Ｆ１、Ｆ２のソースコードＳ１、Ｓ２内でＧ１と称される広域変数に、各々に記号Ｇ１＿Ｆ１またはＧ１＿Ｆ２が対応づけられる。
【００３６】
コンパイルの間に、コンパイラＣＯＭＰは、制御データファイルＶＡＲを生成し、それには、図６に示されるように、各オブジェクトコード機能Ｏｉについて、例えばＧ１、Ｇ２のように、そのオブジェクトコード内で広域変数のために使用される記号、ここではＧ１＿ＦｉまたはＧ２＿Ｆｉが記述されている。制御データファイルＶＡＲが望ましくは従来のテキストエディタによって編集可能な形式を有することで、コンパイラＣＯＭＰによってコンパイルされずに、最初から記号的なオブジェクトコードの形式で存在する、機能Ｏｎ＋１〜Ｏｍのための制御データファイルの入力を、ソースコードＳ１〜Ｓｎ内で使用されている広域変数の名称とオブジェクトコードＯｎ＋１、…、Ｏｍ内におけるそれらの名称との間の対応づけを、開発者が手動で補足できる。
【００３７】
第２の制御データファイルＰＲＩＯは、図６で示されるのと同様に、各オブジェクトコード機能Ｏｉ（ｉ＝１、…、ｍ）について、当該機能による他の機能の実行を中断する権利を表す優先値ＰＲＩＯ（Ｏｉ）を記述している。
【００３８】
リンカーＬＩＮＫは、実行可能なアプリケーションを生成するために、記号的なオブジェクトコードＯ１、…、Ｏｎ内において記号を明確な記憶領域への参照に置換える。この際に、リンカーは制御データファイルＶＡＲおよびＰＲＩＯの内容を考慮する。リンカーは、最高レベルの優先順位レベルを伴う機能でのみ、その機能内で広域変数のために使用されている記号を、それらの変数の実際の記憶領域への参照に置換える。リンカーは、最高レベルの優先順位レベルとは異なる優先順位レベルを伴う機能を呼出す前に、機能によって使用される広域変数のコピーを作成するコピー機能Ｉの呼出しを挿入し、当該機能のオブジェクトコード内において機能内で広域変数のために使用される記号を、コピー機能によって作成されたコピーのアドレスへの参照に置換える。機能が広域変数に書込みアクセスする際には、機能の終了後に、付加的にコピーバック（Ruckkopier）する機能Ｃが挿入され、それが広域変数のコピー値をその実際の記憶領域にコピーバックする。
【００３９】
よって、リンカーによって生成された実行可能なアプリケーションにおいて、ｋが機能Ｏ１〜Ｏｍにおける優先順位レベルの数である場合には、広域変数のｋ−１までのコピーが作成され、相互に中断されえない同一の優先順位レベルを伴う機能は、各々に同一のコピーにアクセスする。そして、ここでは、図３および４の実施形態と同様に、コピーの作成に必要とされる記憶領域が最小限に限定される。
【図面の簡単な説明】
【００４０】
【図１】本発明に基づく開発ツールの図式的ステップと、それらの間で交換されるデータオブジェクトを示す。
【図２】図１のオブジェクトプロセス内で実行される処理方法のフローチャートである。
【図３】本発明の第２の実施形態を図１と同様に示す。
【図４】第３の実施形態を同様に示す。
【図５】第４の実施形態を同様に示す。
【図６】第４の形態において使用される制御データファイルの内容を示す。
【符号の説明】
【００４１】
Ｓ１．．．Ｓｎ    ソースコード機能
Ｏ１．．．Ｏｍ    オブジェクトコード機能
Ｏ’１．．．Ｏ’ｍ    整合性処理を施されたオブジェクトコード機能
Ｏ’’１．．．Ｏ’’ｐ    整合性処理を施されたオブジェクトコード機能のブロック
ＣＯＭＰ    コンパイラ
ＯＰ    オブジェクトコードプロセッサ
ＬＩＮＫ    リンカー
ＣＬＩＮＫ    コードリンカー
ＶＬＩＮＫ    変数リンカー
Ｄｅｓｃｒ    データファイル
ＶＡＲ    第１の制御データファイル
ＰＲＩＯ    第２の制御データファイル
Ｋｏｐ．    コピー
【図１】
2007531946.tif 000003
【図２】
2007531946.tif 000004
【図３】
2007531946.tif 000005
【図４】
2007531946.tif 000006
【図５】
2007531946.tif 000007
【図６】
2007531946.tif 000008
【国際調査報告】
2007531946.tif 000009
2007531946.tif 000010
2007531946.tif 000011
2007531946.tif 000012