JP3550151B2 - ロード・リンキング装置および方法 - Google Patents

ロード・リンキング装置および方法 Download PDF

Info

Publication number
JP3550151B2
JP3550151B2 JP52202494A JP52202494A JP3550151B2 JP 3550151 B2 JP3550151 B2 JP 3550151B2 JP 52202494 A JP52202494 A JP 52202494A JP 52202494 A JP52202494 A JP 52202494A JP 3550151 B2 JP3550151 B2 JP 3550151B2
Authority
JP
Japan
Prior art keywords
load
load module
item
address
modules
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.)
Expired - Lifetime
Application number
JP52202494A
Other languages
English (en)
Other versions
JPH08508593A (ja
Inventor
ナカノ,ラッセル,ティー.
ヘニンガー,アンドリュー,ジー.
Original Assignee
オブジェクト テクノロジー ライセンシング コーポレイション
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 オブジェクト テクノロジー ライセンシング コーポレイション filed Critical オブジェクト テクノロジー ライセンシング コーポレイション
Publication of JPH08508593A publication Critical patent/JPH08508593A/ja
Application granted granted Critical
Publication of JP3550151B2 publication Critical patent/JP3550151B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

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/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • 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/4488Object-oriented

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Description

著作権保有表記
本特許出願には、著作権保護の対象となる内容を含む。情報提供を目的とする限り、その内容の複製を妨げるものではないが、その他の全ての権利、特に、その内容を商業上利用する権利は留保する。
技術分野
本発明は、オブジェクト指向アプリケーションに関し、特に、オブジェクト指向アプリケーションのための新規なロード・アーキテクチャに関する。
背景技術
ワークステション・ソフトウェアのディベロパの間では、柔軟性のあるソフトウェア環境を提供し、その上、ユーザインタフェースの一貫性を維持することがますます重要になっている。この種のオペレーティング環境を提供しようとする初期の頃の試みは、米国特許第4,686,522号(Hernandez他)に開示されている。この特国には、グラフィックとテキストを結合した処理システムであって、ユーザがカーソル位置に動的メニューをインボークして、その動的メニューから種々の機能をインボークすることができる処理システムが記述されている。このようなユーザとの自然な対話により、ユーザ・インタフェースが改善され、アプリケーションが非常に直観的なものになった。オブジェクト指向アプリケーションは、どのアプリケーションが現在アクティブであるかとか、多数のユーザがアプリケーションを並行してどのように使っているかに関係なく、ユーザとの一貫したインタフェースを反映していなければならない。
An Approach to Genuine Dynamic Linking Software−Practice and Experience,Vol.21(4),pp.375−390(April 1991)には、オブジェクト・モジュール(ライブラリ・ファイルまたは個々のファイルのいずれかに位置する)を実行プログラムに動的にリンクするためのアプローチが開示されている。この文献は、アセンブリまたはコンパイルにより得られる「オブジェクト・モジュール」について記載されている。オブジェクト・モジュールはコンパイルの結果として用いられるものであって、OOP(object−oriented programming)でいうところのオブジェクトではない。この文献は、プログラミング言語ソースファイルをアセンブリまたはコンパイルして得られるオブジェクト・モジュールをどのように動的にリンクするかを教示している。
Relocating loader for MS−DOS.EXE executable files,vol.17,no.7,Microprocessors and Microsystems(Sept.1990)には、オブジェクト・ファイルをリンクし、ロード・モジュール(この文献でいうところの、バイナリ・ローダおよび再配置ローダ)を作成する2つの方法が開示されている。バイナリ・ローダは、特定のメモリ・アドレスに駐在するために、予めリンクされたロード・モジュールをメモリに読み込む。この開示によれば、ロード・モジュールは同一のメモリ・アドレスにロードしなければならない。再配置ローダは特定のフォーマットのロード・モジュールをメモリの任意の領域に読み込む。そのプロセスでは、再配置ローダは特定のアドレス・フィールドを再配置し、ロード・モジュール内に含まれたプログラムを、プログラムがロードされたメモリ領域で適正に実行することになる。この文献には、ローダ・プログラム、すなわち、実行可能なロード・モジュールをストリッジから読み出し、アドレシング・リンクを分析解決(resolve)し、そのプログラムの実行を開始するために用いられたローダ・プログラムのインプリメントが記載されている。このプログラムの目的は、MS−DOSを活用しないで、デベロップ・システム上で.EXEプログラムをロードし実行するための手段を提供することにある。
Run−Time Type Identification for C++(Revised),Usenix C++ Technical Conference Proceedings,pp.313−339(August 1992)には、ランタイム型識別を行ない、チェックされた型キャストを行なう手段が記載され、オブジェクトのランタイム型識別をインプリメントするために、可能な限りC++言語を拡張することが記載されている。この文献にも、ランタイム型識別を、C++の異なる環境に対して行なうことができる方法が説明されている。しかし、この文献には、ロード・モジュールさえも説明されていない。
A Trip to Object−Oriented Land,Microprocessing and Microprogramming,vol.35,pp.195−202(1992)には、OOPパラダイムに関する概念が開示されており、オブジェクト技法に関連する種々の高レベルな機能が説明されている。しかし、この文献では、クレームされた発明の構成要素を教示していないし、示唆していない。
Cross−Address space Dynamic Linking,Proceedings 2nd International Workshop Object Orientation in Operating Systems,pp.250−56(Sept.1992)には、カーネルモードで実行を必要としないクロス・アドレス空間動的リンクのインプリメントが開示されている。この文献では、個々にコンパイルされたモジュールを第1のメモリ・アドレス空間でリンクする方法を、第2のメモリ・アドレス空間で実行しているリンク・プログラムから利用する。このリンクは、カーネル実行状態にしないで行われる。これらの機能は、オブジェクト指向OS(operating system)、spring OS(operationg system)によりサポートされている。この文献には、コードを、第2のメモリ・アドレス空間に動的に挿入し、実行スレッドを第2のメモリ・アドレス空間でアクティブする方法が開示されている。本質的には、第1アドレス空間のプログラムによりパフォームされている第2アドレス空間でランタイム・リンクする手段を提供する。
GA−A−2 242 293(Apparatus and method for dynamic linking of computer software components)には、オブジェクトを動的にリンクする方法が開示されている。この文献では、本出願で用いているようなロード・モジュールには言及されていないが、オブジェクト指向のオブジェクトを動的にリンクすることには言及されている。オブジェクト環境のオブジェクトは、メッセージ・ストリームまたは通知を利用する情報を共有するように設計されている。しかし、オブジェクトはコンパイルされないし、クレームされた本発明のように、リンク・エディットしてロード・モジュールを作成しない。
本出願人が挙げた従来例では、新規なハードウェアも提供されないし、オブジェクト指向アプリケーションが一貫して機能することができるソフトウェア・システム機構も提供されていない。種々の開発環境と、ツールにより、種々のフォーマットとレイアウトを有するロード・モジュールが作成される。これらの環境では、オブジェクト指向技法を用いて、ロード・モジュールを単一のアプリケーションに統合することはできない。
発明の開示
本発明は、ラインタイムに、ロード・モジュールを動的にリンクするシステムおよび方法を提供することにより、従来例の問題点を解決する。好ましい実施態様では、異なる物理的なフォーマットを有するロード・モジュールのコレクションを採用しており、ロード・モジュールは、それぞれ、関数、静的データ、クラスを含み、ロード・モジュールが静的にリンクされたようにロード・モジュールを見せている。しかし、第1のロード・モジュールで実行するコードは、第2のロード・モジュール・コードに対するオペレーション、例えば、関数をコールするようなオペレーションをパフォームするか、あるいは、ある関数を指すポインタを得ることができ;静的データにアクセスするか、あるいは、その静的データを指すポインタを得ることができ;あるクラスの任意のパブリックまたはプロテクト・メンバ関数をコールして、ポインタを得るか、あるいは、そのクラスのパブリックまたはプロテクト・データ・メンバにアクセスすることができ;あるいは、あるクラスのオブジェクトの任意の基本クラスにキャストすることができる。
【図面の簡単な説明】
第1図は本発明の好ましい実施態様に係るパーソナル・コンピュータ・システムを示すブロック図である。
第2図は本発明の好ましい実施態様において、TLoadModuleがどのように関数、静的データ項目、クラスのコレクションとしてアクトするかを説明するための説明図である。
第3図は本発明の好ましい実施態様に係るコンピュータのメモリにアプリケーションのTLoadModuleが現れるとき、アプリケーションのTLoadModuleのメモリマップを示す図である。
第4図および第5図は、本発明の好ましい実施態様に係るロード・モジュールであって、オープンし、ロードし、アンロードし、クローズするロード・モジュールの論理的処理を示すフローチャートである。
第6図、第7図および第8図は、本発明の好ましい実施態様に係る処理であってフローチャートで実行される処理の概要を示す図である。
第9図は本発明の好ましい実施態様に係る、LibAによってエキスポートされた関数の再配置アドレスに対するシステム・ストリッジのメモリ・マップを示す図である。
発明の詳細な説明
本発明の好ましい実施態様は、パーソナルコンピュータ、例えば、IBM(登録商標)社のPS/2(登録商標)、またはアップル(登録商標)社のマッキントッシュ(登録商標)コンピュータ上に駐在するオペレーティング・システムのコンテキストで実施されるのが好ましい。代表的なハードウェア環境は第1図に示す。第1図は本発明の好ましい実施態様に係るワークステーションのハードウェア構成を示す。このハードウェア構成は、従来のマイクロプロセッサのようなCPU(central processing unit)10と、システム・バス12で相互に接続された数多くの他のユニットを有する。第1図に示すワークステーションは、RAM(random access memory)14、ROM(read only memory)、ディスク・ユニット20などの周辺デバイスをバスに接続するためのI/Oアダプタ18、キーボード24、マウス26、スピーカ28、マイクロホン32、および/またはタッチ・スクリーン・デバイス(図示せず)などの他のユーザ・インタフェース・デバイスをバスに接続するためのユーザ・インタフェース・アダプタ22と、ワークステーションをデータ処理ネットワークに接続するための通信アダプタ34と、バスをディスプレイ・デバイス38に接続するためのディスプレイ・アダプタ36とを含む。ワークステーションには、IBM OS/2(登録商標)オペレーティング・システムまたはアップルのSystem/7(登録商標)オペレーティング・システムが駐在しているのが典型的である。
ロード・モジュールは、関数と、静的データと、クラスを実装したものである。TLoadModule、すなわち、抽象クラスは、ロード・モジュールをロードしアクセスするプロトコルを定義する。TLoadModuleにより、サブクラスは大幅に異なるアプローチを用いて、関数と、静的データと、クラスを、表現し実装することができる。例えば、NuBusカード上のROMか、ディスク上のブート・パーティション(boot partition)か、あるいはディスク・ファイルは、いずれも、ロード・モジュールとして見ることができる。同様に、異なるプログラミング言語および開発環境は、事前に存在するTLoadModuleサブクラスを使用するか、あるいは、カスタム・サブクラスを設計して、特殊な要求に適合させることができる。TLoadModuleクラスは共通のプロトコルをローダに提供して、正反対の開発環境で構築された根本的に異なるデータ・コンテナをミックス・アンド・マッチさせることができる。
TIncrementalLoadModuleとTPublishedLoadModuleというクラスについて考察する。これらのサブクラスはTLoadModuleの実装とは全く異なって具現化され、目的も異なっている。TIncrementalLoadModuleは、コード開発時に、アプリケーションの実行が可能なまま、高速にインクリメンタル・リンクを行い、その上、ロード・モジュールを開発環境に繋ぎ止めておくように最適化されているが、サイズが大きくなるという犠牲を伴う虞がある。これに対して、TPublishedLoadModuleは実行速度を高速化し、ファイルサイズを最小化するように最適化されている。
ローダはロード・モジュールを使用する。ローダはロード・モジュールの仲介役の働きをする。ローダは関数と、静的データと、クラスを含むロード・モジュールのコレクションを受け取り、ロード・モジュールが相互に静的にリンクされているように見せる働きをする。あるロード・モジュールで実行されているコードは、それ自体の関数と、静的データと、クラスに対する同様のオペレーションと区別せずに、別のロード・モジュールからのエクスポートに対して次のオペレーションをパフォームすることができる。すなわち、
・ 関数をコールするか、あるいはその関数を指すポインタを取得すること。
・ エクスポートされた静的データをアクセスするか、あるいはそのデータを指すポインタを取得すること。
・ あるクラスのパブリックまたはプロテクトメンバ関数をコールするか(仮想的または非仮想的に)、あるいは、プロテクトメンバ関数を指すポインタ取得するか、あるいはそのクラスのパブリックまたはプロテクトデータメンバをアクセスすること。
・ あるクラスのあるオブジェクトが与えられているときに、任意の基本クラスにキャストすること(仮想的または非仮想的に)。
TLoadModuleは、関数と、静的データと、クラスからなる3つのコレクションと同じようにアクトする。ローダのようなクライアントは、第2図に示すように、名前によって(by name)これらの集合をインデックスすることになる。第2図は、TLoadModuleが、関数と、静的データ項目と、クラスのコレクションのようにどのようにアクトするかを示す。さらに、ロード・モジュールにより、クライアントはその関数とクラスのエクスポートを、全て、反復子により調べることができる。
好ましい実施態様では、「ローダ」とは、アプリケーションのグローバル状態に対してオペレートする少数のメソッドをいう。これらのメソッドが保証していることであるが、ロード・モジュールを明示的または暗示的にロードするタスクの数に関係なく、所定のロード・モジュールは1アプリケーションに対して1回だけロードされる。例えば、2つのタスクが同一のフラットオブジェクト(flattened object)を同時に復元するものとする。オブジェクトを復元することにより、好ましい実施態様では、フラットオブジェクトがメモリにロードされ、適正なリンケージが次に説明するローダに従って準備される。
各タスクに復元オペレーションを実装するコードは、ローダをインボークすることができるが、最初のインボークだけがTLoadModuleでのオペレーションをインボークする。2番目のタスクにおける制御のスレッドは、所望のロード・モジュールが既にロードされていることを確かめ、参照カウントをバンプ(bump)するだけである。ローダは、次のステップにより、ロード・モジュールの集合が静的に相互にリンクされているかのように見せる。まず、ディベロパが外部依存を解決するゼロ以上の他のロード・モジュールで、所定のロード・モジュールを構築するとき、この所定のロード・モジュールはロード・モジュールの直接必須セット(direct required set)になる。このロード・モジュールは、この直接必須セットから使用する、特定関数と、静的データ項目と、クラスをストアする。ロードタイムに、ローダはその直接必須セット内にロード・モジュールが存在するか否かを、名前で(by name)ロード・モジュールに照会する。ローダは、互換性をとるために課せられた制約を逸脱しないように、このようなセットを計算する。
ローダはロード・モジュールAをロードする必要がある場合、ロード・モジュールAに対する直接必須セットの他動のクロージャ(transitive closure)を計算する。ローダはこのクロージャ内の各ロード・モジュールの初期化を行って実行する。例えば、ローダは、全てのロード・モジュール上で外部リンケージを解放するメソッドをコールし、その後、全てのロード・モジュール上で静的コンストラクタをコールするメソッドをコールする。同様のシーケンスは、逆順であるが、アプリケーションがシャットダウンするときに生じる。
好ましい実施態様では、共用ライブラリであるロード・モジュールと、慣用の意味でのアプリケーションは交換可能である。「アプリケーション」はwell−known入口点、例えば、メインプログラムを定義するmainを持っているのが典型的である。「入口点」の概念はTTaskProgramクラスに抽象化されている。TLoadModuleRefはヘルパ・クラスである。これはインタフェースであり、そのインタフェースにより、TLoadModuleは、ローダが依存するのは他のどのロード・モジュールかをそのローダに通知する。TLibrarysearcherは、ロード・モジュールを構築するために使用されることになる特定のデータコンテナに、ライブラリ名をマッピングするフレームワークを提供する。
第3図は、アプリケーションのTLoadModuleがコンピュータのメモリにストアされたときのメモリマップである。アプリケーションは、特定の関数または静的データエクスポートのアドレスに関する照会に応答することができる。クライアントはエクスポートされるクラスと、関数と、静的データをブラウジングすることができる。
オープンし、ロードし、アンロードし、クローズするロード・モジュールから見たイベントの基本的シーケンスを、次に説明し、第4図および第5図のフローチャートに示す。後程、TLoadModuleサブクラスのディベロパが、どのようにキャッシング最適化をハンドルしているかを詳しく説明する。クローズされたロード・モジュールは、TLibrarySearcherから返された1次データコンテナから作られる。データコンテナとは、アプリケーション・プログラム用のファイルか、ROMか、メモリか、あるいは他のストリッジ機構をいう。ローダは1次データコンテナを、リードオンリモードで、アドレス空間にマッピングする。規則により、1次データコンテナは、TLoadModuleのフラット表現を含む一定サイズのストリームを、データ・コンテナの最初の部分に対して事前に定義されたロケーション(kFlattenedLoadModuleOffset)に収めてある。
Closed−−〉Opened
a.第1ステップにて、第4図の機能ブロック410に示すように、空のコンストラクタを用いてアプリケーションを構築する。
b.(operator〈〈=)そして、アプリケーションは、機能ブロック420にて、ストリームインされる。このストリームは、サイズの要件か、メタデータ用のフラットTFileか、コード用のTFileか、あるいはどのデータ・コンテナを使用すべきかを示す他のオブジェクトを含む。そのストリームはGetNameおよびGetContentIDコールに応えられるだけの情報を含むか、あるいはこの情報を収めているデータ構造を指している。
c.このアプリケーションが所定のデータコンテナをオープンする最初のアプリケーションである場合は、このアプリケーションは、機能ブロック430にて、次のような情報を提供しなければならない。このアプリケーションが所定のデータコンテナをオープンする最初のアプリケーションでない場合は、ローダはそのアプリケーションより前のアプリケーションにより提供された返答を使用する。従って、この返答は、データコンテナの内容のみに依存するか、あるいは、データコンテナの内容に関連するキャッシュにのみ依存する。
第3図のロードマップに示すように、アプリケーションは、(例えば、データ構造が前もって計算されキャッシュされたため、)最初に、アプリケーションの固定空間の所要量と、特定の再配置アドレスの優先権を示さなければならない。また、アプリケーションは、その1次データコンテナの上下にあるアドレス空間のブロックもそれぞれ要求する。それらのブロックは、それぞれ上位サイズ300および下位サイズ310という。1次データコンテナ315に、上位サイズと下位サイズを加えたものは、このロード・モジュールの1次アドレス空間という。アプリケーションは上位サイズと下位サイズの一方または両方をゼロに指定することができる。上位サイズと下位サイズの両方がゼロということは、アプリケーションは、1次データコンテナをマッピングするのに必要な最小空間を超えるアドレス空間を追加する必要がないということである。
d.(再配置)
アプリケーションは、機能ブロック440にて、再配置アドレス330を割り当て、その再配置アドレスに割り当てられた仮想アドレス空間を割り当てなければならない。これは注意すべきことであるが、アプリケーションは、アプリケーションに割り当てられたアドレス空間をどのように使用するかを選択することができる。特に、1次アドレス空間320内の1つ以上のセグメントをオープンすることは自由であり、選択された場合は、セグメント間にギャップを存在させることができる。可能であれば、当該ローダは、ステップCで要求されたアドレスを割り当てる。しかしながら、仮にメモリ管理制限によりこのようなアドレス割り当てが阻止される場合には、当該ローダは、代替アドレスを割り当てることになる。次に、アプリケーションは、ロードされる場合、ステップeへ進むことができ、クローズされる場合は、ステップnへ進むことができる。
e.Opened−−〉Loaded
(CreateDirectRequiredLoadModuleRefIterator)は他のどのロード・モジュールを必要とするかを示す。というのは、アプリケーションは、クラスか、関数か、あるいは静的データに対して、他のロード・モジュールに依存するからである。TLoadModuleRefは、第4図の機能ブロック450にて、リンケージのために必要な各ロード・モジュールの名前で作成され、反復子によりローダに渡される。ローダはロード・モジュールの他動のクロージャを計算し、ロード・モジュールをオープンし、モジュールに、TLoadModuleメソッドコールを行うためアクセスする。
f.(静的データの初期化)
第5図の機能ブロック510に示すようにアプリケーションの静的データを初期化する。
g.(リンク)
第5図の機能ブロック520に示すように、アプリケーションを、ステップfにて指定されたロード・モジュールとリンクさせる。例えば、アプリケーションが別のロード・モジュール内の関数への外部ジャンプを含んでいる場合は、そのロード・モジュールにその関数のアドレスが存在するか否かを照会し、結果に応じてアプリケーションにパッチを当てる。同様に、別のロード・モジュールによってエクスポートされたグローバル・データ項目を参照するコードが存在する場合は、そのロード・モジュールにそのアドレスが存在するか否かを照会する。最後に、アプリケーションが、別のロード・モジュールによってエクスポートされたクラスから直接または間接的に継承するクラスを含んでいる場合は、そのロード・モジュールに、そのクラスに対応するTClassHandleが存在するか否かを照会する。さらに、直接または間接必須とされるロード・モジュールに依存する計算を行う。
h.(静的コンストラクタのコール)
機能ブロック530に示すように、アプリケーションの静的コンストラクタをコールする。
i.(CallEnterProcs)
機能ブロック540に示すように、実行された静的コンストラクタに依存するが、ユーザ・コードの前に生じるプロシージャはどのプロシージャもコールする。アプリケーションはこの処理のこの時点でロードされる。クライアントは、アプリケーションがエクスポートするクラスか、関数か、あるいは静的データはどれでも使用することができる。アプリケーションはエクスポートについての参照をハンドルするためにレディになるが、それは、これらエクスポートの1つが存在するか否かを名前で(by name)直接に照会されるときか、あるいは、反復子が供給されることにより、クライアントが各エクスポートをテストすることができるときのいずれかである。
Loaded−−−〉Opened
j.(CallExitProcs)
そして、アプリケーションは、ユーザ・コードが完了した後で、静的デストラクタがランする前に、ランする必要のあるプロシージャはどのプロシージャもコールする。
k.(CallStaticDestructors)
ついで、アプリケーションは、機能ブロック550に示すように、そのアプリケーションに特定された静的デストラクタをコールする。
l.(アンリンク)
そして、機能ブロック560に示すように、アプリケーションはアンリンクする。実際には、このことは、アプリケーションを再ロードすることはできないにもかかわらず、再ロードの準備をすることを指している。アプリケーションは同一の再配置アドレスを保持しているが、そのアプリケーションが依存する他のロード・モジュールは変化する。例えば、アプリケーションがライブラリAに依存している場合は、ローダはアプリケーションに「アンリンク」するか否かを照会し、オープンを維持するだけの内部状態を保存するが、ライブラリAがアプリケーションに通知したものに依存する状態はどの状態も破壊するか否かを照会する。これには、関数と静的データのアドレスが含まれる。キャッシングの実装では、この点に注意する必要がある。さらに、アプリケーションは、ローダが直接および間接ロード・モジュールを切断する前に、オペレーションをパフォームする。
m.(FinalizeStaticData)
そして、アプリケーションは、機能ブロック570に示すように、その静的データを最終化する。今、アプリケーションは、オープン・ロード・モジュールに対して有効な任意のメソッドを処理できる。アプリケーションの処理は、第4図の機能ブロック450に示すステップeに移行するか、第5図の機能ブロック580に示すステップnに移行する。ステップeでは、アプリケーションは再ロードされ、ステップnでは、アプリケーションはクローズされる。
Figure 0003550151
n.自身の破壊
アプリケーションは機能ブロック580にてクローズされ、処理は機能ブロック590にて完了する。このフローチャートに示すステップは、第6図と、第7図と、第8図に示すテーブルに要約してある。
このセクションでは、TLoadModuleサブクラスの設計者が利用できる設計ラチチュードの例を挙げる。ロード・モジュールは1次アドレス空間がどれだけ必要であるかをローダに伝え、ローダはその要求をlibserverに渡す。ローダは連続ブロックを返す。そのブロックのサイズはGetRequiredLowerSpaceSizeおよびGetRequiredUpperSpaceSizeのサイズと、1次データ・コンテナのサイズとの総和と同じである。(例えば、以前に計算され、キャッシュされたデータ構造を再使用するために)ロード・モジュールも特定の再配置アドレスを要求することができるかもしれないが、ローダは異なるアドレスを割り当てることができる。再配置アドレスの割当てはRelocateメソッドにより生じる。
同一マシン上の2つのアプリケーションが、「同一の」データ・コンテナによってバックされたモジュールをロードする場合は、ロード・モジュールに同一の再配置アドレスを割り当てることを、ローダは保証する。さらに、ロード・モジュールの実装は、割り当てられたアドレス範囲を、異なるインスタンス間で一貫して使用する必要がある。(例えば、アプリケーションがロード・モジュールAをロードし、しかも、libseverがロード・モジュールAに再配置アドレスxを割り当てた場合は、所定の静的データ項目を、どのアプリケーションでも、「同一の」アドレスx+sに置くには、好ましい実施態様の約束により、TLoadModuleの全インスタンスが必要である。ロード・モジュールが上位サイズと下位サイズの両方に対してゼロを要求しても、それは有効である。この約束に違わなければ、ロード・モジュールには、1次データ・コンテナをマッピングできるだけの空間が割り当てられることになる。TLoadModuleを簡単に実装するには、このようにすることができる。
上位エリアと下位エリアがあるため、ロード・モジュールの設計者は、再配置アドレスに対して、正負の両方向に、アドレス範囲を柔軟に割り振ることができる。例えば、1つには、静的データ・エリアを下位エリアに割り当て、コードを1次データ・コンテナの一部としてマッピングするというアプローチがある。このようにした場合、ロード・モジュール(例えば、リンカ)の作成者は、再配置アドレスからの正のオフセットにコードを置くことができ、静的データ・アドレスを負のオフセットに割り当てることができる。コードと、静的データアドレスは、作成時に、互いに衝突することなく、無関係に大きくなる。
ゼロ個、1個、または多数のセグメント
割り当てられたアドレス空間内においては、ロード・モジュールは、上述したように一貫している限り、自由に、無制限に、セグメントを作成しマッピングすることができる。例えば、ある実装は、コード、静的データ、リンケージ、等々に対して別々のセグメントを使用することができる。ある実装は、より多くのセグメントをマッピングするか、あるいは、1つもマッピングしないかを選択することができる。特定の例では、静的データが含まれる。1つのロード・モジュールの実装は、前に存在し完全に初期化されたセグメントまたはファイルをマッピングすることを選択することができる。静的データ・エリアの非ゼロ部分用のセグメントをマッピングし、静的データ・エリアのゼロ部分をカバーする別のセグメントを作成することを選択することもできる。第3の実装により、初期化されていないセグメントを作成し、しかも、その内容を入れるためにDataInitスタイルのプログラムをコールすることが選択できる。
絶対アドレス
幾つかの言語(例えば、FORTRAN)では、メイン・ロード・モジュールを絶対アドレスにロードする方法が必要になることがある。言語がこの機能を必要とする場合や、リンカがこのことを想定している場合は、必須のTLoadModuleサブクラスはロードタイムにアドレスにパッチを当てる。これは、本発明の好ましい実施態様では、特定の再配置アドレスに割当てることを保証することができないからである。
キャッシングによる最適化
後続のロードで再使用できる1つのロードに対する計算結果をセーブすることにより、ロード・モジュールの実装には、パフォーマンスを向上させるだけの機会がある。前のロードからのキャッシュ情報が有効か否かの判断を援助するため、ロード・モジュールは次の質問に答える。
a. GetContentIDはロード・モジュールの内容に対応するIDを返す。2つのロード・モジュールが同一の内容IDを有する場合は、これら2つのロード・モジュールに対して、リードオンリコードと、初期化された静的データとが、ビット単位で等しいことを保証する。この保証は、Linkステップ時に、他のロード・モジュールからインポートされたアドレスにより後で埋められることになる静的データに対して行う必要はない。
b. GetRelocationIDは後でロード・モジュールからクライアントに返すことができるアドレスであって、全ての関数アドレスと、静的データ・アドレスからなるアドレスに対応するIDを返す。これらのアドレスはRelocateメソッドに渡されたIoadAddressに依存するのが典型的である。再配置IDがその前に返されていて、アドレスが同一である場合は、同一の再配置IDを再度返すことができる。逆に、仮に同一のIDが返された場合には、他のロード・モジュールは、再び当該アドレスを要求する代わりに、前に返されたアドレスを使用する。これは次のことを暗に示している。すなわち、ロード・モジュールというのは、自分が保証し続けられないアドレスは決して返さない。これらアドレスとしては、Link()メソッドを処理中にコールされているGetFunctionAddress()メソッド及びGetDataAddress()メソッドが返す関数及びスタチックデータアドレスが含まれる。すなわち、この保証を維持することができないアドレスであって、ロード・モジュールによりLinkステップ時に取得されたアドレスを含むアドレスを、ロード・モジュールは決して返さないことを暗に示している。要するに、再配置IDの目的はLinkステップ全体に関係する作業の大部分を完全に最適化することにある。次の点を考察する。
・ 内容ID
ロード・モジュールの内容IDが変わった場合は、内容IDを別にリリースするために構築されたキャッシュを再使用しても、おそらく意味がないであろう。
・ 再配置アドレス
ロード・モジュールの再配置アドレスが変わっていない場合は、そのロード・モジュールによってエクスポートされたアドレスの計算値を再使用することができる。同様に、再配置アドレスに依存する初期化済み静的データを使用することができる。内部に供給されたクラスのみから継承するクラスに対するvtablesは誰でも使用することができる。vtablesには、ライブラリ内のコードのみを参照するメンバ関数ポインタも入っている。
・ 必須または使用ロード・モジュールの内容ID
全ての必須ロード・モジュールが、他動のクロージャの意味において、前のロードで見られたような同一の内容IDである場合は、ロード・モジュールのアドレスには依存せず、ロード・モジュールの内容に依存するフィックスアップ(fixup)またはパッチを再使用することができる。例えば、仮想関数コールの実装に対する1つのアプローチでは、コードの小断片("thunks")を用いる。コードの小断片は仮想関数テーブルのインデックスである。ただし、インデックスはロードタイムに計算され、コードにパッチされる。これらのインデックスはクラス階層およびメンバ関数の数に依存するが、必須ロード・モジュールの再配置アドレスには依存しない。階層内のクラスに対する全てのロード・モジュールが同一内容IDをもっている場合は、メンバ関数の数は変更されず、パッチを当てた小断片(thunk)を再使用することができる。
・ 必須または使用ロード・モジュールの再配置ID
さらに、必須ロード・モジュールの再配置アドレスも同一である場合は、他のロード・モジュールからインポートされた関数と静的データに基づいて、リンケージを再使用することができる。これには、関数を指すポインタを含むvtableがある。次の典型的な場合では、ロード・モジュールのキャッシュ情報は、有効なものと仮定する。すなわち、i)ロード・モジュール自体が以前と同一の内容と再配置IDを持つ場合であって、しかも、ii)ロード・モジュールが使用するロード・モジュールに対して、ii.a)ロード・モジュールが同一再配置IDを持ち、ii.b)ロード・モジュールが同一内容IDを持つ場合。次のアルゴリズムは、Link時にコールされるものであり、次の条件を満足しているかどうかを判定する。
Figure 0003550151
Figure 0003550151
その他の種類のキャッシュは、好ましい実施態様で説明するIDプリミティブを用いて、キャッシュ自体の有効性をチェックすることができる。例えば、直接必須ロード・モジュールの再配置アドレスだけに依存するキャッシュは、その条件が存在するか否かを正確にチェックすることができる。これらの考え方を分かりやすく説明するため、関数fooをエクスポートするロード・モジュールLibAを考察する。ロード・モジュールLibBは関数fooをコールする。前のロード上に、LibBは関数fooのアドレスをセーブした。関数fooはLibAの1次データ・コンテナに駐在するので、このアドレスは、
a)A内の関数fooのオフセットの関数
b)LibAの再配置アドレスの関数
になる。
関数fooのアドレスがその後のロードにおいて再使用できるか否かを判断するためには、LibAが返したコンテント及び再配置IDを一時的にストアし、しかも、LibAが再ロードされたとき、これらストアされた値をチェックするだけで充分である。
第9図は、本発明の好ましい実施態様に従ってLibAによってエクスポートされた関数の再配置アドレスのシステム記憶機構におけるメモリ・マップである。再配置IDが再配置アドレスの概念をどのように一般化したかに注意されたい。再配置アドレスを知れば、1次アドレス空間に含まれた項目を知ることができ、再配置IDは1次アドレス範囲や、他のアドレス範囲、例えば、アプリケーションの大きさの静的データ・プールに駐在する項目にまで及ぶ。
キャッシュ
TLoadModuleのサブクラスはそのリンケージ・エリアのコピーをファイルとしてキャッシュするものとする。ただし、同一のロード・モジュールをロードする別のアプリケーションは、そのリンケージ・エリアの再使用を試みることができるものとする。このように共用には潜在能力があるので、キャッシュされたリンケージ・エリアは、共用書込み可能状態を表し、しかも、マルチアプリケーション・セーフになるように設計しなければならない。アプリケーションが異なると、異なるライブラリ・サーチャ(library searcher)を使用することができる。このことは、あるアプリケーションで有効なキャッシュされたリンケージ・エリアも、あるアプリケーションにとって、有効でないかもしれないことを暗に示している。このことから、TLoadModuleサブクラスは次のような状況をハンドルする必要があることが分かる。すなわち、a) 複数のアプリケーションがセーブされたリンケージ・エリアを同時に書き出そうとする。b) あるアプリケーションが、セーブされたリンケージ・エリアが有効か否かをチェックしようとし、それに並行して、別のアプリケーションがセーブされたリンケージ・エリアを無効にし、更新されたコピーを書き出そうとする。c) 2つ以上のアプリケーションが、(例えば、低レベル・ユーティリティ・ロード・モジュールの異なるリリースを使用しているため、)何かが有効なリンケージ・エリアを構成しているという衝突する概念を持ち、このため、キャッシュが「スラッシング」される。
追加のアドレス空間
ロード・モジュールは、その1次アドレス空間として獲得したアドレス空間より大きいアドレス空間を発見することができることもある(例えば、このようなことは、Linkフェーズで起こる)。TLoadModuleのアプリケーションは、再配置IDの保証を認識していなければならない。ロード・モジュールはLinkフェーズでその再配置IDが存在するか否かが照会されるのが典型的である。ここで、Linkフェーズとは、CreateDirectRequiredLoadModuleRefsの後で、しかも、CallStaticConstructorsの前のことである。ロード・モジュールは、Link時を含めて、CreateDirectRequiredLoadModuleRefsの後で獲得した追加のアドレス空間を、エクスポートアドレスとして供給することができない。追加のアドレス空間を、エクスポートアドレスとして供給することができる場合は、再配置IDの保証を維持することができない。
異種言語間のオペラビリティ
同一のCPUアーキテクチャ内では、異種言語によってまた異種開発環境によって作成されたロード・モジュールがミックス・アンド・マッチ(mix−and−match)される。本発明の好ましい実施態様では、エクスポートされた関数と静的データ項目に対応するアドレスは、特定のCPUのコール規則に従う必要がある。この特定のCPUのコール規則には、本発明のコール規則の好ましい実施態様と、規則の異なる内部セットとの間での変換に対応するアドレスを供給することを含むことができる。例えば、非ネィティブC++環境(例えば、Lisp)によって作成されたロード・モジュールは、次の場合には、自由にミックス・アンド・マッチすることができる。すなわち、
1) エクスポートされた関数の関数アドレスに対応するロード・モジュールへのコールは、コール規則が一貫しているコードを指している。
2) ロード・モジュールからのコールは、内部規則から、本発明の好ましい実施態様に対応する規則に変換するグルー・コード(glue code)を渡り歩く。
3) エクスポートされた静的データ項目の静的データアドレスに対するreadが行われたとき、正しい値がある特定のデスティネーションに現れる。
4) エクスポートされた静的データ項目の静的データアドレスに対するwriteが行われたとき、データ項目は、ある特定のソースから正しい値を獲得する。
5) さらに派生された派生クラスへのキャスティングと、基本クラスへのキャスティングは、階層内のクラスが全て同一のプログラミング言語によって定義されていなくても、共に実行する。
6) パブリック・データメンバまたはクラス静的データメンバへのアクセスがある場合は、そのアクセスを実行する。
7) エクスポートされたクラスか、関数か、あるいは静的データ項目のTClassHandleまたはTFunctionHandleオブジェクトへの仮想関数コールは、それぞれ、クラスのプロトコルに従っている。
例えば、TLoadModuleのサブクラスは、C++以外の環境と、任意の共用ライブラリ(例えば、RunTime,LowLevelToolbox)から作成されたものと仮定する。開発環境が充分に頑強であり、個々の宣言が元の共用ライブラリを構築するために使用された場合は、その共用ライブラリを他の開発環境で再実装することができる(勿論、開発環境の中には、選択により、それらのクラスを他の環境によってサブクラスにできる能力を制限することができるものもある。このような環境は、この定義によれば、「充分に頑強な環境」でない。)。この考察により、キャスティングと、仮想関数コールと、非仮想関数コールと、パブリック・データメンバへのアクセスに対して、共通オブジェクト・レイアウトを定義する各CPUアーキテクチャの重要性が強調される。
ロードタイムまたはランタイムのバインディング
効率を高くするため、大部分のロード・モジュールは、ロード時に、関数と静的データ名のバインディングをLinkステップで解決する。このストラテジは、関数と静的データ項目の数が、これらの使用回数に比べて少ないときか、あるいはキャッシングが生じたときに、最適である。
別のストラテジィも可能である。例えば、ロード・モジュールは別のロード・モジュールに、関数または静的データ項目名に対応するアドレスが存在するか否かを照会するのを、ランタイムまで延期することができる。関数の数が非常に多く、しかも、コールする可能性が低い場合には、名前とアドレスのバインディングを最初のコール時に解決することが、より良いストラテジである。このような状態は、1つ以上の中型から大型までのロード・モジュールを構築する開発環境のコンテクストで生じる。その場合、編集−再コンパイル−再ラウンチ−デバックのループでまとまった時間が費される。
並行性(concurrency)
TLoadModuleのサブクラスは再入可能性を必要としない。というのは、TLoadModuleオブジェクトがアプリケーション上の全てのタスクによって共用され、複数のタスクがローディングを並行して行うにも関わらず、ローダが「ローダ・セマフォア」に従ってオペレーションをパフォームするからである。
パック静的データ(packed static data)
幾つかのパフォーマンス測定で明らかになったことであるが、ロード・モジュール当たりのwrite可能な静的データの量が、1ページよりもはるかに少なくなることがよくある。このため、各ロード・モジュールがその静的データと無関係になると、フラグメント化が非常に多くなる。所定のマシン上のwrite可能な静的データ量は、アプリケーション当たりのロード・モジュール数にアプリケーションの数を掛けた積である。フラグメント化により、物理メモリに対する要求が大きくなり、パフォーマンスが損なわれる。この問題に対する1つの解決方法には、静的データを、アプリケーション上の全てのロード・モジュールから、1アプリケーションに対するメモリ・セグメントにパックする方法がある。
静的データ・アドレスはエクスポートとして渡されるので、パック静的データ技法を実装する人は再配置ID保証を遵守しなければならない。1つの技法には、共用システム空間メモリの所定のブロックが存在するか否かを、InitializeStaticDataステップで、登録する技法がある。前と同一のアドレスが獲得され、しかも、Relocateステップが以前と同一のロード・アドレスで渡す場合は、GetRelocationIDが前と同一のIDを返すことは有効である。
8.クラス記述
次のC++コードは、クラス記述の好ましい実施態様によるロジック(論理)を示す。
Figure 0003550151
Figure 0003550151
Figure 0003550151
Figure 0003550151
TLoadModule基本クラスをストリーム・アウトする。サブクラスは自身のスタッフ(stuff)をストリーム・アウトする前に、TLoadModule基本クラスをコールする必要がある。
Figure 0003550151
TLoadModule();
空のコンストラクタはストリーミングに適したオブジェクト状態を初期化する。
TStream& operator<<=(TStream& fromwhere);
TLoadModule基本クラスをストリームインする。サブクラスは自身のスタッフをストリームインする前に、TLoadModule基本クラスをコールする必要がある。
const voidGetPreferredRelocationAddress();
const size_t GetRequiredLowerSpaceSize();
const size_t GetRequiredUpperSpaceSize();
ロード・モジュールは、追加の1次アドレス空間のニーズを示す。優先アドレスは、ローダに、キャッシュを再使用するのに有利なアドレスが存在するか否かのヒントを供給する。ローダは優先アドレスに一致させようとすることになる。
void Relocate(const voidrelocationAddress,const TSurrogateMemory& primaryAddressSpace);
ローダは1次アドレス空間の起点とロケーションを示す。
Open−−−〉Loaded
ローダは、現在のバッチでロードされている全てのロード・モジュールに重ねてこれらのコールをインタリーブする。すなわち、全てのロード・モジュールには、各自の静的データを初期化する機会が与えられ、その後、各自の直接必須ロード・モジュール名が存在するか否かが、全てのロード・モジュールに照会され、その後、リンクするか否かが、全てのロード・モジュールに照会される。以下、同様に行われる。
void InitializeStaticData();
静的データを初期化する。
TIteratorCreateDirectRequiredLoadModuleRefIterator();
他のどのロード・モジュールにリンクする必要があるかを示している。反復子はTLoadModuleRefオブジェクトを返し、必須ロード・モジュールの名前をローダに通知する。
void Link();
TLoadModuleRef::GetLoadModuleメソッドを使用して、前のステップで供給された名前に対応する実ロード・モジュールを指すTLoadModule*ポインタを獲得する。TLoadModule::GetFunctionAddressまたはTLoadModule::GetStaticDataAddressのようなコールを行って、エクスポートアドレスを獲得する。
void CallStaticConstructors();
Call static constructors.
void CallEnterProcs();
入口プロシージャ(enter procedure)が存在する場合は、入口プロシージャをコールする。現在では、幾つかのセマフォアまたは他の初期化がここで行われるが、これらのオペレーションは結果的にはなくなることになる。
Loaded−−−〉Open
void CallExitProcs();
出口プロシージャ(exit procedure)が存在する場合は、出口プロシージャをコールする。入口プロシージャで獲得することができる資源の割振りを解除する。
void CallStaticDestructors();
静的デストラクタをコールする。
void Unlink();
これは、他のロード・モジュールを使用するか、あるいは、他のロード・モジュールが破壊される前にクリーンアップする、最後のチャンスである。
void FinalizeStaticData();
静的データを最終化する。これに伴い、セグメントをクローズすることができる。(デストラクタ以外では、ここで、静的データに対して使用されたセグメントをクローズするのは意味がある。というのは、ブラウジングはオープン状態で可能であり、しかも、ロード・モジュールをブラウジングするのは都合がよい。オープン・セグメントのオーバヘッドはない。)
情報のget
TMappableDataContainerCreateMappableDataContainer()const;
呼出し側によって削除されるオブジェクトを返す。このオブジェクトは、このロード・モジュールが作られたときの基礎となるデータ・コンテナを記述している。
voidGetName(TText& name)const=0;
このロード・モジュールの名前を返す。Plutoデータ・コンテナに基づくロード・モジュールの場合は、この名前はLibraryNameプロパティに対応している。
TGlobalID GetContentID()const;
ロード・モジュールの内容に対応するIDを返す。2つのロード・モジュールが同一の内容IDを持っている場合は、これらのロード・モジュールは、リードオンリコードと、初期化された静的データとがビットごとに等しいことが保証される。この保証は、Linkステップで、他のロード・モジュールからインポートされたアドレスで後で満たされることになる静的データに適用する必要はない。
TGlobalID GetRelocationID()const;
ロード・モジュールが後でクライアントに返すことができるアドレスに対応するIDを返す。これらのアドレスは、全ての関数アドレスと、静的データ・アドレスよりなる。典型的には、これらのアドレスは、Relocateメソッドに渡されたloadAddressに依存する。再配置IDが前に返され、しかも、アドレスが同一である場合は、同一の再配置IDを再び返すことができる。
voidGetFunctionAddress(const TText& export)const;
名前エクスポートにより指定された関数のアドレスを返す。
voidGetStaticDateAddress(const TText& export)const;
名前エクスポートにより指定された静的データ項目の開始アドレスを返す。
TRecyclingIteratorCreateAddressRangeIterator();
このロード・モジュールにより使用されるアドレス範囲に対応するTSurrogatedMemoryオブジェクトを返す反復子を返す。TSurrogatedMemoryオブジェクトはヒープ割振済み記憶機構を指すポインタを含むことができる。(これを、GarbageFinderのルートのソースとして使用することができる。)
Boolean DoesContainAddress(void*addr)const;
仮に当該指定されたアドレスが1次アドレス範囲にある場合か、あるいは仮に当該指定されたアドレスが、当該ロード・モジュールがコントロールする別のアドレス範囲にある場合には、TRUEを返す。例えば、仮にthunkが、当該1次アドレス領域外に割り振られ、しかもデバッガが当該thunkにブレークポイントを設定した場合には、当該デバッガは、自身が当該thunkの名前を判断するために当該ロード・モジュールにケリーすることができるように、当該thunkがどのモジュールに属しているか否かを判断しようとすることができる。
CompatibilityNumber GetRelease()const;
互換性番号を返す。他のロード・モジュールはこの番号を使用して、このロード・モジュールと互換性をもってランできるかどうかを判断する。
Boolean IsCompatibleWith(const CompatibilityNumber requiredRelease)const;
このロード・モジュールが、特定のリリースまたはそれ以前のリリースと互換性がある場合は、TRUEを返す。
TClassHandleCreateClassHandle(const TText& exportName);
TClassHandleを返す。
TFunctionHandleCreateFunctionHandle(const TText& functionSignatureName);
TFunctionHandleを返す。
TRecyclingIterator*CreateClasIterator();
TRecyclingIterator*CreateFunctionIterator();
クラスおよび関数ハンドルの反復子を返す。TRecyclingIteratorはTIteratorとは異なっている。ある反復から次の反復までの間に使用された記憶機構をリサイクルする権利を留保しているからである。例えば、Firstおよび連続するNextにより返されたTClassHandleの場合は、同一の記憶機構の可能性があるが、そこに書かれたデータは異なっている。そのため、コピーをキープしておきたいクライアントはそれをクローンにすべきである。
MCollectibleスタッフ
long Hash()const;
Boolean IsEqual(const MCollectible*other)const;
MCollectibleオブジェクトをベースオブジェクトとする2つのロード・モジュールは、仮にそれらを指し示すポインタが一致しているときは、等しいものと考えられる。というのは、同一アプリケーションの2つのロード・モジュールを、当該ローダがオープンしたりロードすることは、同一のデータコンテナである以上、エラーとなるからである。
TLoadModuleRefのメソッド記述
コンストラクタ、デストラクタ、割当て演算子
TLoadModuleRef();
復元のためにだけ使用する。
TLoadModuleRef(TText& name);
ロード・モジュールは、指定のされた名前を持つTLoadModuleRefオブジェクトを、当該ローダに供給する。これは、当該ロード・モジュールが、指定された名前を持つ別のロード・モジュールに動的にリンクしなければならないことを、当該ローダに知らせるためである。
TLoadModuleRef(const TLoadModuleRef& other);
コンストラクタをコピーする。
TLoadModuleRef& operator=(const TLoadModuleRef& other);
割当て演算子。
〜TLoadModuleRef():
デストラクタ
必須ロード・モジュールを識別する。
void GetName(TText& name)const=0;
ローダはこのメソッドを使用して、必須ロード・モジュールの名前を見け出す。
TLoadModule*GetLoadModule()const;
TLoadModuleRefをローダに与え、しかも、ローダが必須ロード・モジュールの他動のクロージャを計算した後、このコールを使用して実ロード・モジュールを獲得する。
CompatibilityNumer GetRequiredRelease()const;
このTLoadModuleRefを配分したロード・モジュールで、正しく実行するのに必要な最小の互換性番号を返す。

Claims (24)

  1. ストレージと、
    複数のロード・モジュールを前記ストレージの1次アドレス空間にロードする手段であって、このロードが完了した後、前記複数のロードモジュールをそれぞれ、本手段により決定した再配置アドレスに再配置するロード手段と、
    前記ロード・モジュール内の参照を、対応するアドレスと置換して、当該参照を解決するため、前記各ロード・モジュールをパースするパース手段と
    を有するコンピュータにおいて、複数のロードモジュールをロードしリンキングする装置において、
    前記パース手段は、プログラムコード関数項目と、データ項目と、クラス項目と、項目名参照を受け取り受け取った項目名参照に基づき参照した項目のアドレスを返すオブジェクト・メソッドとを含むソフトウェアプログラムオブジェクトであるロード・モジュールを、それぞれパースして、各ロード・モジュールからプログラムコード関数項目についての項目名参照を獲得し、獲得した項目名参照に基づき当該ロード・モジュール以外の別のロード・モジュールにおける項目が参照されていると判断した場合に、該別のロード・モジュールにおけるオブジェクト・メソッドを当該項目名参照を用いてコールし、該オブジェクト・メソッドにより項目名参照に基づき参照された項目のアドレスを獲得し、獲得したアドレスを前記当該モジュールにおけるプログラムコード関数項目にパッチする
    ことを特徴とする装置。
  2. 請求項1において、前記ロード・モジュールは、それぞれ、該ロード・モジュールに含まれるプログラムコード関数項目に対する名前参照を受け取り、該プログラムコード関数項目を指し示すポインタを返すオブジェクト・メソッドを含むことを特徴とする装置。
  3. 請求項1において、前記ロード・モジュールは、それぞれ、該ロード・モジュールに含まれるプログラムコード関数項目に対する名前参照を受け取り、該プログラムコード関数項目のアドレスを返すオブジェクト・メソッドを含むことを特徴とする装置。
  4. 請求項1において、前記ロード・モジュールは、それぞれ、該ロード・モジュールに含まれるデータ項目に対する名前参照を受け取り、該データ項目を指し示すポインタを返すオブジェクト・メソッドを含むことを特徴とする装置。
  5. 請求項1において、前記ロード・モジュールは、それぞれ、該ロード・モジュールに含まれるデータ項目に対する名前参照を受け取り、該データ項目のアドレスを返すオブジェクト・メソッドを含むことを特徴とする装置。
  6. 請求項1において、前記ロード・モジュールは、それぞれ、該ロード・モジュールに含まれるクラス項目に対する名前参照を受け取り、該クラス項目のハンドル識別子を返すオブジェクト・メソッドを含むことを特徴とする装置。
  7. 請求項1において、前記ロード・モジュールは、
    当該ロード・モジュールにより参照される項目である関数項目とデータ項目とクラス項目とを含む他のロード・モジュールの名前のリストと、
    該名前のリストをスキャンし得られた他のロード・モジュールの名前を返す反復子と
    を含むことを特徴とする装置。
  8. 請求項7において、前記ロード手段は、ロード・モジュールの反復子をコールし、得られた参照のセットを用いて、ロードされなければならない他のロード・モジュールを判定することを特徴とする装置。
  9. 請求項1において、前記ロード・モジュールは、それぞれ、該ロード・モジュールが前記ロード手段によりロードされているとき、該ロード・モジュールの必須のアドレス空間を指定するパラメータであって、前記アドレス空間のアドレス空間要件と、前記ロード・モジュールにより占有されるアドレスとを指定するパラメータを含むことを特徴とする装置。
  10. 請求項9において、前記ロード・モジュールは、それぞれ、ロード・モジュールにより必要とされるアドレス空間を指定するパラメータであって、該ロード・モジュールに含まれているアドレス空間パラメータを、前記ロード手段に返して、該ロード手段が前記ロード・モジュールをロードできるようにするオブジェクト・メソッドを含むことを特徴とする装置。
  11. 請求項1において、前記ストレージは、ロード・モジュールをリンキングしている間にコンピュートされたデータを、同一ロード・モジュールを再リンキングするときに再使用するためにセーブするためのキュッシュ領域を含むことを特徴とする装置。ほへ
  12. 請求項11において、前記ロード・モジュールは、それぞれ、セーブされたデータが有効であるかどうかを示す情報を含むことを特徴とする装置。
  13. ストレージと、
    複数のロード・モジュールを前記ストレージの1次アドレス空間にロードする手段であって、このロードが完了した後、前記複数のロードモジュールをそれぞれ、本手段により決定した再配置アドレスに再配置するロード手段と、
    前記ロード・モジュール内の参照を、対応するアドレスと置換して、当該参照を解決するため、前記各ロード・モジュールをパースするパース手段と
    を有するコンピュータにおいて、前記複数のロード・モジュールをロードしリンキングする方法において、
    プログラムコード関数項目と、データ項目と、クラス項目と、項目名参照を受け取り受け取った項目名参照に基づき参照した項目のアドレスを返すオブジェクト・メソッドとを含むソフトウェアプログラムオブジェクトであるロード・モジュールを前記パース手段によりそれぞれパースさせるステップと、
    各ロード・モジュールからプログラムコード関数項目についての項目名参照を前記パース手段により獲得させるステップと、
    獲得した項目名参照に基づき当該ロード・モジュール以外の別のロード・モジュールにおける項目が参照されていると判断した場合に、前記パース手段により、該別のロード・モジュールにおけるオブジェクト・メソッドを当該項目名参照を用いてコールさせ、該オブジェクト・メソッドにより項目名参照に基づき参照された項目のアドレスを獲得させ、獲得したアドレスを前記当該モジュールにおけるプログラムコード関数項目にパッチさせるステップと
    備えたことを特徴とする方法。
  14. 請求項13において、前記ロード・モジュールは、それぞれ、該ロード・モジュールに含まれるプログラムコード関数項目に対する名前参照を受け取り、該プログラムコード関数項目を指し示すポインタを返すオブジェクト・メソッドによりコンストラクトされることを特徴とする方法。
  15. 請求項13において、前記ロード・モジュールは、それぞれ、該ロード・モジュールに含まれるプログラムコード関数項目に対する名前参照を受け取り、該プログラムコード関数項目のアドレスを返すオブジェクト・メソッドによりコンストラクトされることを特徴とする方法。
  16. 請求項13において、前記ロード・モジュールは、それぞれ、該ロード・モジュールに含まれるデータ項目に対する名前参照を受け取り、該データ項目を指し示すポインタを返すオブジェクト・メソッドによりコンストラクトされることを特徴とする方法。
  17. 請求項13において、前記ロード・モジュールは、それぞれ、該ロード・モジュールに含まれるデータ項目に対する名前参照を受け取り、該データ項目のアドレスを返すオブジェクト・メソッドによりコンストラクトされることを特徴とする方法。
  18. 請求項13において、前記ロード・モジュールは、それぞれ、該ロード・モジュールに含まれるクラス項目に対する名前参照を受け取り、該クラス項目のハンドル識別子を返すオブジェクト・メソッドによりコンストラクトされることを特徴とする方法。
  19. 請求項13において、前記ロード・モジュールは、
    該ロード・モジュールにより参照される項目である関数項目とデータ項目とクラス項目とを含む他のロード・モジュールへの参照のリストと、
    該参照のリストをスキャンし得られた他のモジュールの名前を返す反復子と
    を含むようにコンストラクトされることを特徴とする方法。
  20. 請求項19において、ロード・モジュールの反復子を前記ロード手段によりコールさせ、得られた参照のセットを用いて、ロードされなければならない他のロード・モジュールを判定するステップをさらに備えたことを特徴とする方法。
  21. 請求項13において、前記ロード・モジュールは、それぞれ、該ロード・モジュールが前記ロード手段によりロードされているとき、該ロード・モジュールにより必要とされるアドレス空間を指定するパラメータであって、該アドレス空間におけるアドレス空間要件と、前記ロード・モジュールにより占有されるアドレスとを指定するパラメータによりコンストラクトされることを特徴とする方法。
  22. 請求項21において、前記ロード・モジュールは、それぞれ、該ロード・モジュールに含まれているアドレス空間パラメータを、前記ロード手段に返して、該ロード手段が前記ロード・モジュールをロードできるようにするオブジェクト・メソッドによりコンストラクトされることを特徴とする方法。
  23. 請求項13において、ロード・モジュールをリンキングしている間にコンピュートされたデータを、同一ロード・モジュールを再リンキングするときに再使用するためにセーブするためのキュッシュ領域を前記ストレージに割り当てることを特徴とする方法。
  24. 請求項23において、前記ロード・モジュールは、それぞれ、セーブされたデータが有効であるかどうかを示す情報を含むようにコンストラクトされることを特徴する方法。
JP52202494A 1993-03-25 1994-01-03 ロード・リンキング装置および方法 Expired - Lifetime JP3550151B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/037,054 US5369766A (en) 1993-03-25 1993-03-25 Object-oriented loader system with support for different load formats
US08/037,054 1993-03-25
PCT/US1994/000017 WO1994023363A2 (en) 1993-03-25 1994-01-03 Loader system

Publications (2)

Publication Number Publication Date
JPH08508593A JPH08508593A (ja) 1996-09-10
JP3550151B2 true JP3550151B2 (ja) 2004-08-04

Family

ID=21892194

Family Applications (1)

Application Number Title Priority Date Filing Date
JP52202494A Expired - Lifetime JP3550151B2 (ja) 1993-03-25 1994-01-03 ロード・リンキング装置および方法

Country Status (7)

Country Link
US (1) US5369766A (ja)
EP (1) EP0664903B1 (ja)
JP (1) JP3550151B2 (ja)
AU (1) AU6227594A (ja)
CA (1) CA2145674A1 (ja)
DE (1) DE69407560D1 (ja)
WO (1) WO1994023363A2 (ja)

Families Citing this family (137)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0578207B1 (en) * 1992-07-06 1999-12-01 Microsoft Corporation Method for naming and binding objects
US5519862A (en) * 1993-02-26 1996-05-21 Taligent, Inc. Concurrent processing apparatus with incremental command objects
US5459865A (en) * 1993-04-05 1995-10-17 Taligent Inc. Runtime loader
US6684261B1 (en) * 1993-07-19 2004-01-27 Object Technology Licensing Corporation Object-oriented operating system
US5379432A (en) * 1993-07-19 1995-01-03 Taligent, Inc. Object-oriented interface for a procedural operating system
US5799181A (en) * 1995-04-07 1998-08-25 Sofmap Future Design, Inc. Bossless architecture and digital cell technology for computer programs
CN1181141A (zh) 1995-04-07 1998-05-06 软体未来设计股份有限公司 数据处理系统和方法,以及计算机程序体系结构
US5790856A (en) * 1995-05-08 1998-08-04 Apple Computer, Inc. Methods, apparatus, and data structures for data driven computer patches and static analysis of same
US6260075B1 (en) 1995-06-19 2001-07-10 International Business Machines Corporation System and method for providing shared global offset table for common shared library in a computer system
US6449660B1 (en) 1995-07-31 2002-09-10 International Business Machines Corporation Object-oriented I/O device interface framework mechanism
US5812848A (en) * 1995-08-23 1998-09-22 Symantec Corporation Subclassing system for computer that operates with portable-executable (PE) modules
US5809302A (en) * 1995-08-31 1998-09-15 International Business Machines Corp. System and method for enabling pointers to be passed from computer programs written using computer programming languages that do not support pointers
US6226691B1 (en) * 1995-10-02 2001-05-01 International Business Machines Corporation System, method, and article of manufacture for adding object services to a binary class in an object oriented server
US6684259B1 (en) 1995-10-11 2004-01-27 Citrix Systems, Inc. Method for providing user global object name space in a multi-user operating system
US5864862A (en) * 1996-09-30 1999-01-26 Telefonaktiebolaget Lm Ericsson (Publ) System and method for creating reusable components in an object-oriented programming environment
US5872973A (en) * 1995-10-26 1999-02-16 Viewsoft, Inc. Method for managing dynamic relations between objects in dynamic object-oriented languages
US6532487B1 (en) 1995-12-04 2003-03-11 International Business Machines Corporation Method and system for managing semaphores in an object-oriented multi-tasking computer system
US6298476B1 (en) 1995-12-04 2001-10-02 International Business Machines Corporation Object oriented software build framework mechanism
US5797014A (en) * 1995-12-14 1998-08-18 International Business Machines Corporation Method for reducing processor cycles used for global offset table address computation in a position independent shared library
US5774722A (en) * 1995-12-14 1998-06-30 International Business Machines Corporation Method for efficient external reference resolution in dynamically linked shared code libraries in single address space operating systems
US5768505A (en) * 1995-12-19 1998-06-16 International Business Machines Corporation Object oriented mail server framework mechanism
US6526565B1 (en) * 1995-12-21 2003-02-25 International Business Machines Corporation Packaging algorithm for providing object oriented applications having reduced footprints
US6144967A (en) * 1996-01-25 2000-11-07 International Business Machines Corporation Object oriented processing log analysis tool framework mechanism
US5838972A (en) * 1996-02-09 1998-11-17 Sun Microsystems, Inc. Method and apparatus for dynamically loading an input run-time module and an output run-time module
US6434739B1 (en) 1996-04-22 2002-08-13 International Business Machines Corporation Object oriented framework mechanism for multi-target source code processing
US6081798A (en) * 1996-04-24 2000-06-27 International Business Machines Corp. Object oriented case-based reasoning framework mechanism
US5778378A (en) 1996-04-30 1998-07-07 International Business Machines Corporation Object oriented information retrieval framework mechanism
US5815718A (en) * 1996-05-30 1998-09-29 Sun Microsystems, Inc. Method and system for loading classes in read-only memory
US6424991B1 (en) 1996-07-01 2002-07-23 Sun Microsystems, Inc. Object-oriented system, method and article of manufacture for a client-server communication framework
US6304893B1 (en) 1996-07-01 2001-10-16 Sun Microsystems, Inc. Object-oriented system, method and article of manufacture for a client-server event driven message framework in an interprise computing framework system
US5848246A (en) * 1996-07-01 1998-12-08 Sun Microsystems, Inc. Object-oriented system, method and article of manufacture for a client-server session manager in an interprise computing framework system
US5999972A (en) * 1996-07-01 1999-12-07 Sun Microsystems, Inc. System, method and article of manufacture for a distributed computer system framework
US5987245A (en) * 1996-07-01 1999-11-16 Sun Microsystems, Inc. Object-oriented system, method and article of manufacture (#12) for a client-server state machine framework
US6434598B1 (en) 1996-07-01 2002-08-13 Sun Microsystems, Inc. Object-oriented system, method and article of manufacture for a client-server graphical user interface (#9) framework in an interprise computing framework system
US6266709B1 (en) 1996-07-01 2001-07-24 Sun Microsystems, Inc. Object-oriented system, method and article of manufacture for a client-server failure reporting process
US6272555B1 (en) 1996-07-01 2001-08-07 Sun Microsystems, Inc. Object-oriented system, method and article of manufacture for a client-server-centric interprise computing framework system
US6038590A (en) * 1996-07-01 2000-03-14 Sun Microsystems, Inc. Object-oriented system, method and article of manufacture for a client-server state machine in an interprise computing framework system
US5915252A (en) * 1996-09-30 1999-06-22 International Business Machines Corporation Object oriented framework mechanism for data transfer between a data source and a data target
US6104874A (en) * 1996-10-15 2000-08-15 International Business Machines Corporation Object oriented framework mechanism for order processing including pre-defined extensible classes for defining an order processing environment
US6003095A (en) * 1996-10-31 1999-12-14 International Business Machines Corporation Apparatus and method for demand loading a dynamic link library
US5937189A (en) * 1996-11-12 1999-08-10 International Business Machines Corporation Object oriented framework mechanism for determining configuration relations
US6401109B1 (en) 1996-11-18 2002-06-04 International Business Machines Corp. Virtual socket for JAVA interprocess communication
US6460058B2 (en) 1996-12-06 2002-10-01 Microsoft Corporation Object-oriented framework for hyperlink navigation
US6401099B1 (en) 1996-12-06 2002-06-04 Microsoft Corporation Asynchronous binding of named objects
US5970498A (en) * 1996-12-06 1999-10-19 International Business Machines Corporation Object oriented framework mechanism for metering objects
US5946486A (en) * 1996-12-10 1999-08-31 International Business Machines Corporation Apparatus and method for tracing entries to or exits from a dynamic link library
US6769126B1 (en) 1996-12-10 2004-07-27 International Business Machines Corporation Apparatus and method for demand load analysis
US6052778A (en) * 1997-01-13 2000-04-18 International Business Machines Corporation Embedded system having dynamically linked dynamic loader and method for linking dynamic loader shared libraries and application programs
US5961602A (en) * 1997-02-10 1999-10-05 International Business Machines Corporation Method for optimizing off-peak caching of web data
US5878263A (en) * 1997-03-05 1999-03-02 International Business Machines Corporation Internal chaining technique for fixup records
US5936860A (en) * 1997-03-28 1999-08-10 International Business Machines Corporation Object oriented technology framework for warehouse control
US6041312A (en) * 1997-03-28 2000-03-21 International Business Machines Corporation Object oriented technology framework for accounts receivable and accounts payable
US5987423A (en) * 1997-03-28 1999-11-16 International Business Machines Corporation Object oriented technology framework for order processing
US6014637A (en) * 1997-04-30 2000-01-11 International Business Machines Corporation Object oriented framework mechanism for fulfillment requirements management
CA2204971A1 (en) * 1997-05-09 1998-11-09 Michael Cheng Uniform access to and interchange between objects employing a plurality of access methods
US6335972B1 (en) 1997-05-23 2002-01-01 International Business Machines Corporation Framework-based cryptographic key recovery system
US6473893B1 (en) * 1997-05-30 2002-10-29 International Business Machines Corporation Information objects system, method, and computer program organization
US5920725A (en) * 1997-07-02 1999-07-06 Adaptivity Inc. Run-time object-synthesis and transparent client/server updating of distributed objects using a meta server of all object descriptors
US5893106A (en) * 1997-07-11 1999-04-06 International Business Machines Corporation Object oriented server process framework with interdependent-object creation
US6513152B1 (en) 1997-07-23 2003-01-28 International Business Machines Corporation Object oriented framework mechanism for customization of object oriented frameworks
US6378002B1 (en) 1997-08-05 2002-04-23 International Business Machines Corporation, Object oriented server process framework with implicit data handling registry for remote method invocations
US6052670A (en) * 1997-08-29 2000-04-18 International Business Machines Corporation Object oriented framework mechanism for an electronic catalog
US6016495A (en) * 1997-09-19 2000-01-18 International Business Machines Corporation Object-oriented framework mechanism for providing persistent storage
US6421827B1 (en) 1997-12-17 2002-07-16 International Business Machines Corporation System and method for detecting and reordering loading patterns
US5911073A (en) * 1997-12-23 1999-06-08 Hewlett-Packard Company Method and apparatus for dynamic process monitoring through an ancillary control code system
US20010044901A1 (en) * 1998-03-24 2001-11-22 Symantec Corporation Bubble-protected system for automatic decryption of file data on a per-use basis and automatic re-encryption
US6148437A (en) * 1998-05-04 2000-11-14 Hewlett-Packard Company System and method for jump-evaluated trace designation
US6164841A (en) * 1998-05-04 2000-12-26 Hewlett-Packard Company Method, apparatus, and product for dynamic software code translation system
US6189141B1 (en) 1998-05-04 2001-02-13 Hewlett-Packard Company Control path evaluating trace designator with dynamically adjustable thresholds for activation of tracing for high (hot) activity and low (cold) activity of flow control
US6430569B1 (en) 1998-08-14 2002-08-06 Sun Microsystems, Inc. Methods and apparatus for type safe, lazy, user-defined class loading
JP3837244B2 (ja) 1998-10-23 2006-10-25 松下電器産業株式会社 プログラムリンク装置及び方法
US6628305B1 (en) 1998-11-09 2003-09-30 International Business Machines Corporation Architecture and definition of an extensible, object-oriented graphical user interface framework for managing and administering heterogenous digital library datastores
CA2255042C (en) * 1998-11-30 2004-04-13 Leonard W. Theivendra Class loader
US6618769B1 (en) * 1999-05-27 2003-09-09 Sun Microsystems, Inc. Module-by-module verification
US6601114B1 (en) * 1999-05-27 2003-07-29 Sun Microsystems, Inc. Fully lazy linking with module-by-module verification
US6356933B2 (en) 1999-09-07 2002-03-12 Citrix Systems, Inc. Methods and apparatus for efficiently transmitting interactive application data between a client and a server using markup language
US6829761B1 (en) * 1999-10-21 2004-12-07 Oracle International Corporation Method and apparatus for managing shared memory in a run-time environment
US6874143B1 (en) 2000-06-21 2005-03-29 Microsoft Corporation Architectures for and methods of providing network-based software extensions
US7624356B1 (en) 2000-06-21 2009-11-24 Microsoft Corporation Task-sensitive methods and systems for displaying command sets
US7346848B1 (en) 2000-06-21 2008-03-18 Microsoft Corporation Single window navigation methods and systems
AU2001264895A1 (en) 2000-06-21 2002-01-02 Microsoft Corporation System and method for integrating spreadsheets and word processing tables
US7117435B1 (en) 2000-06-21 2006-10-03 Microsoft Corporation Spreadsheet fields in text
US7191394B1 (en) 2000-06-21 2007-03-13 Microsoft Corporation Authoring arbitrary XML documents using DHTML and XSLT
US6883168B1 (en) 2000-06-21 2005-04-19 Microsoft Corporation Methods, systems, architectures and data structures for delivering software via a network
US6948135B1 (en) 2000-06-21 2005-09-20 Microsoft Corporation Method and systems of providing information to computer users
US7000230B1 (en) 2000-06-21 2006-02-14 Microsoft Corporation Network-based software extensions
US7155667B1 (en) 2000-06-21 2006-12-26 Microsoft Corporation User interface for integrated spreadsheets and word processing tables
US7346842B1 (en) 2000-11-02 2008-03-18 Citrix Systems, Inc. Methods and apparatus for incorporating a partial page on a client
US20020105548A1 (en) 2000-12-12 2002-08-08 Richard Hayton Methods and apparatus for creating a user interface using property paths
US7322040B1 (en) * 2001-03-27 2008-01-22 Microsoft Corporation Authentication architecture
US7243346B1 (en) 2001-05-21 2007-07-10 Microsoft Corporation Customized library management system
US7389515B1 (en) * 2001-05-21 2008-06-17 Microsoft Corporation Application deflation system and method
US7246350B2 (en) * 2002-01-07 2007-07-17 Intel Corporation Dynamic composition and maintenance of applications
US7421418B2 (en) * 2003-02-19 2008-09-02 Nahava Inc. Method and apparatus for fundamental operations on token sequences: computing similarity, extracting term values, and searching efficiently
US7370066B1 (en) 2003-03-24 2008-05-06 Microsoft Corporation System and method for offline editing of data files
US7415672B1 (en) 2003-03-24 2008-08-19 Microsoft Corporation System and method for designing electronic forms
US7275216B2 (en) 2003-03-24 2007-09-25 Microsoft Corporation System and method for designing electronic forms and hierarchical schemas
US7296017B2 (en) 2003-03-28 2007-11-13 Microsoft Corporation Validation of XML data files
US7913159B2 (en) 2003-03-28 2011-03-22 Microsoft Corporation System and method for real-time validation of structured data files
US7516145B2 (en) 2003-03-31 2009-04-07 Microsoft Corporation System and method for incrementally transforming and rendering hierarchical data files
US7168035B1 (en) 2003-06-11 2007-01-23 Microsoft Corporation Building a view on markup language data through a set of components
US7451392B1 (en) 2003-06-30 2008-11-11 Microsoft Corporation Rendering an HTML electronic form by applying XSLT to XML using a solution
US7197515B2 (en) 2003-06-30 2007-03-27 Microsoft Corporation Declarative solution definition
US7406660B1 (en) 2003-08-01 2008-07-29 Microsoft Corporation Mapping between structured data and a visual surface
US7581177B1 (en) 2003-08-01 2009-08-25 Microsoft Corporation Conversion of structured documents
US7334187B1 (en) 2003-08-06 2008-02-19 Microsoft Corporation Electronic form aggregation
CN101119779A (zh) * 2003-10-01 2008-02-06 现金系统公司 用于整合玩家跟踪和现金存取的系统和方法
US7171649B1 (en) * 2004-01-12 2007-01-30 Sun Microsystems, Inc. Optimizing safe downcasting in an object-oriented programming language
US8819072B1 (en) 2004-02-02 2014-08-26 Microsoft Corporation Promoting data from structured data files
US7430711B2 (en) 2004-02-17 2008-09-30 Microsoft Corporation Systems and methods for editing XML documents
US7318063B2 (en) 2004-02-19 2008-01-08 Microsoft Corporation Managing XML documents containing hierarchical database information
US7437741B2 (en) 2004-03-08 2008-10-14 International Business Machines Corporation Method, system, and program for invoking methods between computer languages
US7496837B1 (en) 2004-04-29 2009-02-24 Microsoft Corporation Structural editing with schema awareness
US7568101B1 (en) 2004-05-13 2009-07-28 Microsoft Corporation Digital signatures with an embedded view
US7281018B1 (en) 2004-05-26 2007-10-09 Microsoft Corporation Form template data source change
US7774620B1 (en) 2004-05-27 2010-08-10 Microsoft Corporation Executing applications at appropriate trust levels
US7493609B2 (en) * 2004-08-30 2009-02-17 International Business Machines Corporation Method and apparatus for automatic second-order predictive commoning
US7692636B2 (en) 2004-09-30 2010-04-06 Microsoft Corporation Systems and methods for handwriting to a screen
US7516399B2 (en) 2004-09-30 2009-04-07 Microsoft Corporation Structured-document path-language expression methods and systems
US8487879B2 (en) 2004-10-29 2013-07-16 Microsoft Corporation Systems and methods for interacting with a computer through handwriting to a screen
US7712022B2 (en) 2004-11-15 2010-05-04 Microsoft Corporation Mutually exclusive options in electronic forms
US7584417B2 (en) 2004-11-15 2009-09-01 Microsoft Corporation Role-dependent action for an electronic form
US7509353B2 (en) 2004-11-16 2009-03-24 Microsoft Corporation Methods and systems for exchanging and rendering forms
US7721190B2 (en) 2004-11-16 2010-05-18 Microsoft Corporation Methods and systems for server side form processing
US7904801B2 (en) 2004-12-15 2011-03-08 Microsoft Corporation Recursive sections in electronic forms
US7437376B2 (en) 2004-12-20 2008-10-14 Microsoft Corporation Scalable object model
US7937651B2 (en) 2005-01-14 2011-05-03 Microsoft Corporation Structural editing operations for network forms
US7725834B2 (en) 2005-03-04 2010-05-25 Microsoft Corporation Designer-created aspect for an electronic form template
US8010515B2 (en) 2005-04-15 2011-08-30 Microsoft Corporation Query to an electronic form
US7543228B2 (en) 2005-06-27 2009-06-02 Microsoft Corporation Template for rendering an electronic form
US8200975B2 (en) 2005-06-29 2012-06-12 Microsoft Corporation Digital signatures for network forms
US7613996B2 (en) 2005-08-15 2009-11-03 Microsoft Corporation Enabling selection of an inferred schema part
US8001459B2 (en) 2005-12-05 2011-08-16 Microsoft Corporation Enabling electronic documents for limited-capability computing devices
US7779343B2 (en) 2006-01-30 2010-08-17 Microsoft Corporation Opening network-enabled electronic documents
US10410117B2 (en) 2008-09-21 2019-09-10 Brainchip, Inc. Method and a system for creating dynamic neural function libraries
US9747197B2 (en) * 2014-05-20 2017-08-29 Honeywell International Inc. Methods and apparatus to use an access triggered computer architecture
US10353681B2 (en) 2014-05-20 2019-07-16 Honeywell International Inc. Systems and methods for using error correction and pipelining techniques for an access triggered computer architecture

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63626A (ja) * 1986-06-19 1988-01-05 Casio Comput Co Ltd プログラム管理装置
US4821220A (en) * 1986-07-25 1989-04-11 Tektronix, Inc. System for animating program operation and displaying time-based relationships
US4885717A (en) * 1986-09-25 1989-12-05 Tektronix, Inc. System for graphically representing operation of object-oriented programs
US5261080A (en) * 1987-08-21 1993-11-09 Wang Laboratories, Inc. Matchmaker for assisting and executing the providing and conversion of data between objects in a data processing system storing data in typed objects having different data formats
US4891630A (en) * 1988-04-22 1990-01-02 Friedman Mark B Computer vision system with improved object orientation technique
US4953080A (en) * 1988-04-25 1990-08-28 Hewlett-Packard Company Object management facility for maintaining data in a computer system
EP0347162A3 (en) * 1988-06-14 1990-09-12 Tektronix, Inc. Apparatus and methods for controlling data flow processes by generated instruction sequences
US5041992A (en) * 1988-10-24 1991-08-20 University Of Pittsburgh Interactive method of developing software interfaces
US5133075A (en) * 1988-12-19 1992-07-21 Hewlett-Packard Company Method of monitoring changes in attribute values of object in an object-oriented database
US5050090A (en) * 1989-03-30 1991-09-17 R. J. Reynolds Tobacco Company Object placement method and apparatus
US5060276A (en) * 1989-05-31 1991-10-22 At&T Bell Laboratories Technique for object orientation detection using a feed-forward neural network
US5125091A (en) * 1989-06-08 1992-06-23 Hazox Corporation Object oriented control of real-time processing
US5257369A (en) * 1990-10-22 1993-10-26 Skeen Marion D Apparatus and method for providing decoupling of data exchange details for providing high performance communication between software processes
US5247678A (en) * 1989-10-12 1993-09-21 Texas Instruments Incorporated Load time linker for software used with a multiprocessor system
US5181162A (en) * 1989-12-06 1993-01-19 Eastman Kodak Company Document management and production system
US5093914A (en) * 1989-12-15 1992-03-03 At&T Bell Laboratories Method of controlling the execution of object-oriented programs
US5075848A (en) * 1989-12-22 1991-12-24 Intel Corporation Object lifetime control in an object-oriented memory protection mechanism
GB2242293A (en) * 1990-01-05 1991-09-25 Apple Computer Apparatus and method for dynamic linking of computer software components
US5151987A (en) * 1990-10-23 1992-09-29 International Business Machines Corporation Recovery objects in an object oriented computing environment
US5119475A (en) * 1991-03-13 1992-06-02 Schlumberger Technology Corporation Object-oriented framework for menu definition
US5303375A (en) * 1991-04-26 1994-04-12 Hewlett-Packard Company System and method for facilitating selection of running functional process in object-oriented environments

Also Published As

Publication number Publication date
WO1994023363A3 (en) 1995-01-12
AU6227594A (en) 1994-10-24
EP0664903A1 (en) 1995-08-02
JPH08508593A (ja) 1996-09-10
US5369766A (en) 1994-11-29
WO1994023363A2 (en) 1994-10-13
EP0664903B1 (en) 1997-12-29
CA2145674A1 (en) 1994-10-13
DE69407560D1 (de) 1998-02-05

Similar Documents

Publication Publication Date Title
JP3550151B2 (ja) ロード・リンキング装置および方法
US7225438B2 (en) Lazy compilation of template-generated classes in dynamic compilation execution environments
US5418964A (en) System and method for parent class shadowing in a statically linked object hierarchy
US6330709B1 (en) Virtual machine implementation for shared persistent objects
US5421016A (en) System and method for dynamically invoking object methods from an application designed for static method invocation
US5361350A (en) Object oriented method management system and software for managing class method names in a computer system
US5339438A (en) Version independence for object oriented programs
EP0546683B1 (en) Language neutral objects
US5493680A (en) Method for creating an object subclass with selective inheritance
US8434099B2 (en) Efficient linking and loading for late binding and platform retargeting
US7409694B2 (en) Highly componentized system architecture with loadable virtual memory manager
US7565665B2 (en) Efficient linking and loading for late binding and platform retargeting
US5692195A (en) Parent class shadowing
EP0706684B1 (en) System for object oriented dynamic linking based upon a catalog of registered function set or class identifiers
US7143421B2 (en) Highly componentized system architecture with a demand-loading namespace and programming model
US6728963B1 (en) Highly componentized system architecture with a loadable interprocess communication manager
US20070204259A1 (en) Protection Domains for a Computer Operating System
AU712005B2 (en) System and method for runtime optimization of private variable function calls in a secure interpreter
US20090133042A1 (en) Efficient linking and loading for late binding and platform retargeting
US6378003B1 (en) Method and system for deriving metaclasses in an object oriented system
US8464226B2 (en) System and method for interoperating with foreign objects from a host computing environment
US7703108B2 (en) Native code isolation in a multi-tasking Java virtual machine
Kempf et al. Cross-address space dynamic linking
Pizka et al. Evolving Software Tools for New Distributed Computing Environments.
McGachey et al. Pervasive load-time transformation for transparently distributed Java

Legal Events

Date Code Title Description
A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20040423

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090430

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090430

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100430

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110430

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110430

Year of fee payment: 7

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110430

Year of fee payment: 7

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120430

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120430

Year of fee payment: 8

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: R3D02

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: R3D04

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120430

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130430

Year of fee payment: 9

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130430

Year of fee payment: 9

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140430

Year of fee payment: 10

EXPY Cancellation because of completion of term