JP2008516323A - プラットホーム独立の動的リンキング - Google Patents

プラットホーム独立の動的リンキング Download PDF

Info

Publication number
JP2008516323A
JP2008516323A JP2007535225A JP2007535225A JP2008516323A JP 2008516323 A JP2008516323 A JP 2008516323A JP 2007535225 A JP2007535225 A JP 2007535225A JP 2007535225 A JP2007535225 A JP 2007535225A JP 2008516323 A JP2008516323 A JP 2008516323A
Authority
JP
Japan
Prior art keywords
computing environment
computing
library
source code
code
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2007535225A
Other languages
English (en)
Other versions
JP5090169B2 (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
Priority claimed from US10/965,361 external-priority patent/US20060080680A1/en
Priority claimed from US10/964,272 external-priority patent/US20060080683A1/en
Priority claimed from US10/964,231 external-priority patent/US7444625B2/en
Priority claimed from US10/964,232 external-priority patent/US7533376B2/en
Priority claimed from US10/964,315 external-priority patent/US20060080681A1/en
Application filed by ピクセル(リサーチ)リミテッド filed Critical ピクセル(リサーチ)リミテッド
Publication of JP2008516323A publication Critical patent/JP2008516323A/ja
Application granted granted Critical
Publication of JP5090169B2 publication Critical patent/JP5090169B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

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
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • 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/44536Selecting among different versions
    • G06F9/44542Retargetable
    • G06F9/44547Fat binaries
    • 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

Abstract

再構築又は再ローディングを必要とせずに、選択されたハードウェアアーキテクチャを有する異種のコンピューティング環境において動作できるプラットホーム独立のバイナリオブジェクト(PIBO)が提供される。PIBOをパーズしてソースコードスタブファイルを生成することができる。PIBOは、スタブファイルを使用する例示的リンカー/ローダーによりロードして、協働するコンピューティングアプリケーションとリンクすることができる。また、PIBOは、次のものを含む(それらに限定されないが)種々の状況に使用することができ、即ち、ネイティブなファシリティを与えないプラットホームにおいて共有オブジェクトを動的にリンクするためのメカニズムとして使用でき、予め書き込まれるコードコンポーネントを、それがなければ、特定コード内のプラットホーム制約の違反のために不適合となるであろうプラットホームに利用するのに使用でき、コードに固有の複数の実行インスタンス及び繰り返し実行の制約を回避する非オブジェクト指向コードをロードするためのメカニズムとして使用でき、更に、閉じたプラットホームにファンクションをアドオンするためにバイナリオブジェクトの使用を許すメカニズムとして使用できる。
【選択図】 図7

Description

発明の分野
本発明は、バイナリオブジェクトの生成及び動作に関し、より詳細には、とりわけ、種々の非ネイティブなコンピューティング環境で動作を行えるように、異種のコンピューティング環境にわたって動作可能なプラットホーム独立のバイナリオブジェクト(Platform Independent Binary Object)を生成し、作動させ、配布することに関する。
発明の背景
コンピューティング環境は、コンピューティング環境のハードウェアコンポーネントが一又は複数の動作をできるようにするために、一又は複数のインストラクションを含むコンピュータコードを実行することができる。通常、コンピュータコードは、実行のためにコンピューティング環境へロードされる。物理的なロードの前に、コンピュータコードは、それが特定のコンピューティング環境(例えば、コンピューティング環境のオペレーティングシステム及び/又はコンピューティング環境のプラットホーム)で動作するようにコンパイルされる。コンピュータコードは、コンピューティング環境により、そのコンピューティング環境に存在する他のコンピュータコードとリンクされ、一又は複数の動作を実行することができる。所与のコンピュータコードについてのコンピューティング環境の取り扱いに基づいて、そのコンピューティング環境及び/又は他の協働するコンピュータコードに使用されるバイナリオブジェクトを生成することができる。バイナリオブジェクトは、一又は複数の協働するコンピューティングプログラム(コンピューティングプログラム)により望まれる情報、ファンクション及び/又はオペレーションを含んでもよい。
一又は複数のファンクションは、次いで、一又は複数の動作を実行するために、コンピューティングアプリケーション、他のライブラリ、又はコンピューティング環境によって使用されるように一又は複数のライブラリに集められる。一般的な慣例では、ライブラリは、特定のハードウェアアーキテクチャを有する単一のコンピューティング環境によって利用されるように設計及び実装される。ライブラリは、静的なベース又は動的なベースのいずれかで所与のコンピューティング環境により利用することができる。静的な状況では、ライブラリと所与のコンピューティングアプリケーションの他のコンポーネントとが、単一ファイルへと結合され、これがメモリにロードされて実行される。これに比して、動的な動作(例えば、コンポーネントの動的リンキング)では、コンピューティングアプリケーションが実行されるときに、ファンクション及びコンポーネント(例えば、オブジェクト及びライブラリ)が使用可能とされる。動的なコンポーネントは、コンピューティング環境で動作している複数のコンピューティングアプリケーションにより共有することができる。この理由は、動的にリンクされたコンポーネントは、それらの設計及び動作上、コンピューティングアプリケーションの主要部に縛られないからである。
しかしながら、現在の慣例では、異種のコンピューティング環境で動作するためのコンピュータコードを生成して実行するときに、問題が起こり得る。現在の慣例では、一般に、特定のコンピューティングハードウェアアーキテクチャを有する特定のコンピューティング環境(例えば、ソフトウェア開発キット−SDKによる)に対してコンピュータコードを生成して実行することを要求するので、複数の異種のコンピューティング環境(例えば、種々のオペレーティングシステム及び/又はコンピューティングプラットホームを有する)で動作するための単一のバイナリオブジェクトを生成することは困難である。特定のコンピューティング環境のためのコードを生成するとき、コンピュータコードは、それをコンピューティング環境へロードする前にコンパイルされ得ると共に、コンピュータコードを実行するときにコンピューティング環境によりリンクされ得る。これらの制約の下、コンピュータコードは、一般に、単一のコンピューティング環境(即ち、オペレーティングシステム及び/又はプラットホーム)で動作するように設計され生成される。
更に、コンピューティング環境は、コンピュータコードが所与のコンピューティング環境において適切に実行されるように、コンピュータコードを生成する方法について制約及びルールを課すことができる。例えば、プラットホーム及び/又はオペレーティングシステム(例えば、Symbian QuartzをランするSymbianOS)は、書き込み可能な静的変数及び/又はグローバル変数の使用を含む(これらに限定されない)、特定のプラットホーム及び/又はオペレーティングシステムで実行されるコンピュータコードに対して、多くの制約を維持することができる。換言すれば、プラットホーム及び/又はオペレーティングシステムは、書き込み可能な静的変数又はグローバル変数を有するコンピュータコードの動作を禁止し得る。
コンピュータコード開発者の中で共通の慣例は、これには限定されないが、同じ動作を行うが、オペレーティングシステム及びプラットホームの異種セットの各々に対して構築される種々のコードを開発することを含む。例えば、カレンダーコンピューティングアプリケーションは、Java、“C++”又はビジュアル・ベーシックのような単一の高水準プログラミング言語を使用して開発することができる。開発時間及びリソースを減少するための工夫として、コアのコンピューティングアプリケーションコードが開発者によって再使用される。しかしながら、現在の慣例では、異種のコンピューティング環境(例えば、オペレーティングシステム及び/又はプラットホーム)の各セットにおいてコンピューティングアプリケーションが動作することを保証するために、付加的なコンポーネント(例えば、ライブラリ、ファンクション、データ構造、等)を開発してカスタマイズする必要があるので、このような再使用の程度は制限される。
従来の慣例及びアプローチには、これに限定されないが、異種のコンピューティング環境の各々に対して再構築又は再コンパイルを必要とせずに複数の異種のコンピューティング環境にわたって動作できる単一のプラットホーム独立のバイナリオブジェクトを持てないという制限もある。更に、現在の慣例及びアプローチは、このようなネイティブなファシリティを与えないプラットホームにおいて共有オブジェクトを動的にリンクするためのメカニズムを提供するものではない。また、現在の慣例では、予め書き込まれたコードコンポーネントを、それがなければ特定コード内のプラットホーム制約に違反するために不適合となるであろうプラットホームに使用することができない。更に、現在の慣例は、複数の実行インスタンスの制約を回避してコード固有の実行を繰り返す非オブジェクト指向コードをロードするためのメカニズムを提供するものではない。また、現在の慣例及びアプローチは、閉じたプラットホーム(例えば、付加的なプログラムの実行を制約し得るプラットホーム)においてバイナリオブジェクトを動的にリンクしロードすることを許すメカニズムを提供するものでもない。
発明の概要
ここに説明するシステム及び方法は、再コンパイル、再構築、又は再ロードを必要とせずに、選択されたハードウェアアーキテクチャを有する異種のコンピューティング環境において動作できるプラットホーム独立のバイナリオブジェクト(PIBO)を提供する。ここに例示する実施形態では、選択された構造(例えば、オブジェクトファイルフォーマット)を有するバイナリオブジェクトファイルが設けられる。このバイナリオブジェクトファイルは、ソースコードがその生成時にプラットホーム依存性をもたないように、ソースコードをコンパイルすることにより生成できる。ここに例示する実施形態では、バイナリオブジェクトファイルは、ソースファイルについてのバイナリコード及びデータを含む。更に、ここに例示する実施形態では、ソースコードスタブファイルを生成するために例示的なバイナリオブジェクトファイルに対して動作する例示的なパーザが設けられる。更に、例示的なコンピューティングアプリケーションの一部として動作して、そのスタブファイルを使用してプラットホーム独立のバイナリオブジェクトをリンクしロードすると共に、異種のコンピューティング環境において協働するコンピューティングプログラムとの協働を許す例示的リンカー/ローダーが設けられる。また、協働するコンピューティングアプリケーションが例示的PIBOにアクセスするのを許す例示的インターフェイスを設けることもできる。
ここに例示する動作において、例示的なパーザがPIBOファイルをパーズして、スタブファイルをソースコードとして生成することができる。スタブファイルソースコードは、プラットホーム依存性を維持しないようにされる。例示的リンカー/ローダー及びスタブファイルは、異種のコンピューティング環境の1つに対して、協働するコンピューティングアプリケーションのメインソースコードと共にコンパイルして、異種のコンピューティング環境(及び/又はプラットホーム)の1つにおいて動作可能なバイナリ実行可能(binary executable)を生成することができる。ここに例示する実施形態では、例示的リンカー/ローダーは、協働するコンピューティングアプリケーションの実行中にその協働するコンピューティングアプリケーションでPIBOをリンクしロードするように動作できる。ここに例示する実施形態では、リンカー/ローダーは、シンボル分析及びリロケーションを取り扱い、協働するコンピューティングアプリケーションのバイナリ実行ファイル(binary executable)を、完全にラン可能なプロセスとして、PIBOと結合することができる。
ここに例示する実施形態では、PIBOは、これらに限定されないが次のものを含む種々の状況に使用することができる。即ち、ネイティブなファシリティを与えないプラットホームにおいて共有オブジェクトを動的にリンクするためのメカニズムとして使用でき、予め記述されたコードコンポーネントを、それがなければ特定コード内のプラットホーム制約の違反のために不適合となるであろうプラットホームに利用するのに使用でき、コードに固有の複数の実行インスタンス及び繰り返し実行の制約を回避する非オブジェクト指向コードをロードするためのメカニズムとして使用でき、更に、閉じたプラットホームにアドオンファンクションを設けるためにプラットホーム独立のバイナリオブジェクトの使用を許すメカニズムとして使用できる。
本発明の他の特徴については、以下に詳細に説明する。
プラットホーム独立の動的なオブジェクト及びその使用方法は、添付図面を参照して、一例として、以下に詳細に述べる。
詳細な説明
1.概略
コンピュータコードは、コンピュータシステム又は装置内の中央処理ユニット(CPU)又は他のコンピュータプロセッサにおいて実行することができる。CPUアーキテクチャの一般的な例としては、INTEL(登録商標)x86ファミリー、ARM(登録商標)RISC(リデュースドインストラクションセットコード)アーキテクチャ、SUN(登録商標)SPARC、及びMOTOROLA(登録商標)68000が挙げられるが、これらに限定されない。コードは、人間が理解できる“C”、“C++”、又はJAVA(登録商標)のような高水準言語で書くことができるが、最終的に、コードは、その後、コンピューティング環境により、例示的なコンピュータプロセッサで実行されるマシンインストラクションへとコンパイル及びアッセンブルされ得る。
CPUは、システムプラットホームとして一般的に知られたソフトウェア環境内に存在することができる。プラットホームは、大きなフォームファクタのコンピューティング環境(例えば、デスクトップ、ラップトップパーソナルコンピュータ)については、MICROSOFT(登録商標)WINDOWS(登録商標)やLinuxのようなオペレーティングシステムを含むことができる。より小さなフォームファクタのコンピューティング環境(例えば、移動及びテレコム装置)については、Linux、SymbianOS、WindowsCE(登録商標)、PalmOS、BREW、REX及びItronを含む(これらに限定されないが)種々のオペレーティングシステムが現在使用されている。
プラットホームは、多くの場合に、OSを特定の目的について拡張する付加的なファンクションを維持することができる。例えば、WinCE.NET、Smartphone、及びPocketPCプラットホームは、Windows CEオペレーティングシステムを使用するが、ユーザインターフェイスのような他の観点が異なり、即ち、WinCE.NETは、工業用装置をターゲットとすることができ、PocketPCは、タッチスクリーンをもつパーソナルデジタルアシスタント(PDA)をターゲットとすることができ、更に、Smartphoneは、キーパッドを経て動作する移動セルラー電話をターゲットとすることができる。また、プラットホームは、特定のコンピューティングアプリケーションに対して仕立てられた拡張されたファンクションを含むこともできる。ここに示す例では、PocketPCプラットホームは、PDAに対する個人的情報管理についてある範囲のファンクションを維持することができ、一方、Smartphoneプラットホームは、移動電話に適した通信ファンクションと共にパッケージすることができる。
従来のシステムでは、特定のプラットホームにおいてランできるバイナリコードの生成は、特定のプラットホーム(及び/又はオペレーティングシステム)に対して設けられたソフトウェア開発キット(SDK)のようなツールチェーンを通してコードをコンパイルし、構築することにより達成できる。所与のオペレーティングシステムで動作する異なるプラットホームのためのコードを開発するために、異なるSDKが要求される(例えば、Symbian Quartzは、Symbian Crystalとは異なるSDKを要求する)。特定のプラットホームのためのコードを開発するのに不適切なSDKが使用された場合には、それにより得られるバイナリが希望のプラットホームにおいて不作動になり得る。
ソースコードレベルにおいて、あるオペレーティングシステムは、コードを書き込む仕方に制約及びルールを課す。例えば、SymbianOSは、書き込み可能な静的又はグローバル変数を使用しないようにコードを生成することを要求する。このような制約の結果として、1つのOSについて最初に書かれたレガシーコードは、異なるコードルールを要求する別のOSにおいてコンパイルされないことがある。それにも関わらず、共通の慣例として、複数のプラットホーム向けにその後に構築され得る単一のソースコードプログラムを記述する。実装時に、共通のソースファイルが展開される。この共通のソースファイルは、選択されたプラットホームのツールチェーンを介して別々に処理して、複数の個別の、プラットホーム特有のバイナリ出力を単一のソースファイルから生成することができる。
2.動的リンキング及びローディング
コンピュータプログラムは、複数のコンポーネントで構成される。プログラムがランされるときに、これらのコンポーネントを一緒にして、完全なファンクションシステムを形成できると共に、プログラムを実行する協働するコンピューティング環境のメインメモリにロードすることができる。コンピュータプログラムのコンポーネントを結合するプロセスは、リンキングとして知られている。プログラムコンポーネントが1つの単一ファイルへと結合され、これをメモリにロードして実行できる場合には、このようなプロセスが「静的リンキング」として説明される。一般に、リンカーは、リンカーへの入力として働くことのできるコンポーネントオブジェクトファイルを連結できるツールチェーンの一部分であり、複数のオブジェクトファイルを一緒にリンクして単一の出力ファイルを形成することができる。プログラムが負空のサブプログラムで作り上げられるときには、あるプログラムの、別のプログラムへの参照を、シンボル(変数及びファンクション名のような)を介して行うことができる。他のファンクション及びオペレーションの中で、リンカーは、協働するコンピューティング環境のメモリにおけるシンボル(1つ又は複数)の位置にノートし、そして発呼側サブプログラムのオブジェクトコードをパッチして、コールインストラクションがそのノートしたメモリ位置を参照するようにすることで、参照を分析するように動作することができる。
「静的なリンキング」では、プログラムが、別のコンポーネントに記憶されたファンクションへコールを発するときに、その要求されたファンクションに対するコードを静的リンカーにより実行可能ファイル(エグズキュータブル)において合体することができる。実際に、静的なリンカーは、要求された全てのファンクションのコードを出力実行可能ファイルにコピーする。対照的に、「動的なリンキング」は、プログラムの実行中だけファンクション及びコンポーネントを使用可能にすることができる。動的にリンクされたコンポーネントは、一般に、プログラムのメイン部分に束縛されないので、複数の実行されるプログラムによりそれらを共有することができる。また、メインプログラムは、静的にリンクされる相手部分より著しく小さくすることもできる。というのは、実際のコードがプログラムの実行可能ファイル(エグズキュータブル)の一部分とならず、且つ動的にリンクされるコンポーネントが個別のファイルとして存在するからである。現在のコンピューティング環境の間では「動的なリンキング」が一般的である。例えば、MICROSOFT(登録商標)WINDOWS(登録商標)では、動的にリンクされるコンポーネントは、DLL(動的リンクライブラリ)と称され、そしてUnix/Linuxでは、それらは、共有オブジェクト(.so)ファイルと称される。
動的にリンクされたライブラリ中のファンクションへプログラムがコールを行なうインスタンスでは、コンパイラ及びリンカーは、ランタイムの際に、協働するコンピューティング環境がライブラリをロードすると共に、要求されたファンクションに対するコードを見つけるのを許すことのできる情報を含むリロケーションテーブルを生成することができる。動的にリンクされたライブラリでは、ライブラリを使用するプログラムがランを開始するまで(「ロードタイム動的リンキング」として知られている)、又はプログラムが第1コールを行なうまで(「ランタイム動的リンキング」)、シンボルが実際のアドレスに結合されない。
動的な実行可能ファイル(エグズキュータブル)は、動的なリンカー/ローダーの制御のもとで実行することができる。これらのアプリケーションは、ラン可能なプロセスを生成するように動的なリンカーにより探索して結合することのできる動的なライブラリ(又は共有オブジェクト)の形態の依存性を有する。また、共有オブジェクトは、これも動的なリンカーにより管理される他の共有オブジェクトに対する依存性を有する。従来の解決策では、結合された実行可能ファイル(エグズキュータブル)及び共有オブジェクトが完全なプログラムとしてランするのを可能とする結合、シンボル分析、及びコードリロケーションを取り扱う動的なリンキング及びローディングのためのルーチンは、一般に、コンピューティング環境のオペレーティングシステムの一部分である。
実際に、動的なライブラリは、ロード時にリンクすることができる。動的なライブラリが生成されると、小さなスタブファイル又はインポートライブラリが生成され、これは、動的なライブラリをロードすると共にそれがエクスポートするファンクションを探索するのに使用できる情報(シンボル及びリロケーションテーブルのような)を、コンピューティング環境に供給する。インポートライブラリ(又はスタブファイル)は、メインの実行可能なプログラムが生成されるときにリンクすることができ、従って、共有オブジェクトの実際のバイナリコードが別々のままであっても、共有オブジェクトライブラリ内の全てのファンクション位置が実行可能なプログラムに分かる。
2(a) 例示的コンピューティング環境
図1は、ここに述べるシステム及び方法に基づく例示的コンピューティングシステム100を示す。このコンピューティングシステム100は、種々のコンピューティングプログラム180を実行することができる。例示的コンピューティングシステム100は、主として、コンピュータ読み取り可能なインストラクションにより制御され、これらインストラクションは、ソフトウェアの形態でもよく、また、このようなソフトウェアをどこにどのように記憶し又はアクセスするかのインストラクションも与える。このようなソフトウェアは、中央処理ユニット(CPU)110内で実行されて、データ処理システム100を機能させる。多くの既知のコンピュータサーバー、ワークステーション、及びパーソナルコンピュータでは、中央処理ユニット110が、マイクロプロセッサと称するマイクロ電子チップCPUにより実施される。コプロセッサ115は、メインCPU110とは別の任意のプロセッサで、付加的なファンクションを遂行し、又はCPU110をアシストする。CPU110は、相互接続部112を経てコプロセッサ115に接続されてもよい。1つの通常の形式のコプロセッサは、ニューメリック又はマス(math)コプロセッサとも称されるフローティングポイントコプロセッサで、これは、数値計算を汎用CPU110より迅速且つ良好に遂行するように設計される。
例示的コンピューティング環境は、単一のCPU110を備えるように示されているが、このような説明は単なる例示に過ぎず、コンピューティング環境100は、複数のCPU110を備えてもよいことが明らかであろう。更に、コンピューティング環境100は、通信ネットワーク160又は他の何らかのデータ通信手段(図示せず)を通してリモートCPU(図示せず)のリソースを利用してもよい。
動作中に、CPU110は、インストラクションをフェッチし、デコードし、実行すると共に、コンピュータのメインデータ転送経路であるシステムバス105を経て他のリソースへ及び他のリソースから情報を転送する。このようなシステムバスは、コンピューティングシステム100内のコンポーネントを接続すると共に、データ交換のための媒体を定義する。システムバス105は、通常、データを送るためのデータライン、アドレスを送るためのアドレスライン、及び割り込みを送り且つシステムバスを動作するための制御ラインを備えている。このようなシステムバスは、例えば、PCI(周辺コンポーネント相互接続)バスである。今日の進歩したバスの幾つかは、拡張カード、コントローラ及びCPU110によるバスへのアクセスを調整するバスアービトレーションと称されるファンクションを与える。これらのバスにアタッチしてバスを引き継ぐようにアービトレーション(調停)する装置は、バスマスターと称される。また、バスマスターは、プロセッサ及びそのサポートチップを収容するバスマスターアダプタの追加により、バスのマルチプロセッサコンフィギュレーションが生成されるようにサポートする。
システムバス105に結合されるメモリ装置は、ランダムアクセスメモリ(RAM)125、及びリードオンリメモリ(ROM)130を含む。このようなメモリは、情報を記憶し検索するのを許す回路を備えている。ROM130は、一般に、変更できない記憶されたデータを含む。RAM125に記憶されるデータは、CPU110又は他のハードウェア装置により読み取り又は変更することができる。RAM125及び/又はROM130へのアクセスは、メモリコントローラ120により制御できる。このメモリコントローラ120は、インストラクションが実行されるときにバーチャルアドレスを物理的アドレスに変換するアドレス変換ファンクションを与えることができる。また、メモリコントローラ120は、システム内のプロセスを分離すると共に、システムプロセスをユーザプロセスから分離するメモリ保護ファンクションも与えることができる。従って、ユーザモードでランするプログラムは、通常、それ自身のプロセスのバーチャルアドレススペースによりマップされたメモリしかアクセスできない。換言すれば、プログラムは、プロセスとプロセスとの間のメモリ共有が設定されない限り、別のプロセスのバーチャルアドレススペース内のメモリにアクセスすることはできない。
更に、コンピューティングシステム100は、CPU110から、プリンタ140、キーボード145、マウス150及びデータ記憶ドライブ155のような周辺機器へインストラクションを通信する役割を果たす周辺機器コントローラ135を含むこともできる。
ディスプレイコントローラ163により制御されるディスプレイ165は、コンピューティングシステム100により生成されるビジュアル出力を表示するのに使用される。このようなビジュアル出力は、テキスト、グラフィック、アニメーショングラフィック、及びビデオを含むことができる。ディスプレイ165は、CRTベースのビデオディスプレイ、LCDベースのフラットパネルディスプレイ、ガスプラズマベースのフラットパネルディスプレイ、タッチパネル、又は種々のフォームファクタの他のディスプレイ形態で実施することができる。ディスプレイコントローラ163は、ディスプレイ165へ送信されるビデオ信号を生成するのに必要な電子コンポーネントを備えている。
更に、コンピューティングシステム100は、このコンピューティングシステム100を外部通信ネットワーク160に接続するのに使用できるネットワークアダプタ170も含むことができる。通信ネットワーク160は、ソフトウェア及び情報を電子的に通信し且つ転送する手段をコンピュータユーザに与えることができる。更に、通信ネットワーク160は、複数のコンピュータを伴うと共に、タスクの遂行にワークロードの分担や協力の努力を伴う分散型処理を与えることもできる。図示されたネットワーク接続は、例示に過ぎず、コンピュータ間に通信リンクを確立する他の手段を使用してもよいことが明らかである。
例示的コンピュータシステム100は、ここに述べるシステム及び方法が動作し得るコンピューティング環境を単に例示するもので、ここに述べる本発明の概念は、種々のコンポーネント及びコンフィギュレーションを有する種々のコンピューティング環境で実施できるので、ここに述べるシステム及び方法を、異なるコンポーネント及びコンフィギュレーションを有するコンピューティング環境で実施することを何ら制限するものでないことが明らかである。
2(b) 例示的コンピュータネットワーク環境
上述したコンピューティングシステム100は、コンピュータネットワークの一部分として配備することができる。一般に、コンピューティング環境についての上記説明は、ネットワーク環境に配備されるサーバーコンピュータ及びクライアントコンピュータの両方に適用される。図2は、例示的なネットワーク構成のコンピューティング環境200を示すもので、サーバー205は、ここに述べる装置及び方法を使用できる通信ネットワークを経てクライアントコンピュータと通信する。図2に示すように、サーバー205は、通信ネットワーク160(固定ワイヤ又はワイヤレスのLAN、WAN、イントラネット、エクストラネット、ピア対ピアネットワーク、インターネット、又は他の通信ネットワークのいずれか、又はその組み合せでよい)を経て、複数のクライアントコンピューティング環境、例えば、タブレットパーソナルコンピュータ210、移動電話215、電話220、パーソナルコンピュータ100、及びパーソナルデジタルアシスタント225に相互接続することができる。更に、ここに述べる装置及び方法は、通信ネットワーク160を経て、自動車のコンピューティング環境(図示せず)、消費者向け電子装置のコンピューティング環境(図示せず)、及びビルの自動制御のコンピューティング環境(図示せず)と協働することができる。例えば、通信ネットワーク160がインターネットであるネットワーク環境では、サーバー205は、複数の既知のプロトコル、例えば、ハイパーテキスト転送プロトコル(HTTP)、ファイル転送プロトコル(FTP)、シンプルオブジェクトアクセスプロトコル(SOAP)、又はワイヤレスアプリケーションプロトコル(WAP)のいずれかを経て、クライアントコンピューティング環境100、210、215、220及び225へ及びそこからデータを通信し処理するように動作できる専用のコンピューティング環境サーバーである。各クライアントコンピューティング環境100、210、215、220及び225は、サーバーコンピューティング環境205へのアクセスを得るために、一又は複数のコンピューティングプログラム180、例えば、ウェブブラウザ(図示せず)、又は移動デスクトップ環境(図示せず)を装備することができる。
動作中に、ユーザ(図示せず)は、クライアントコンピューティング環境でランしているコンピュータプログラムと対話して、希望のデータ及び/又はコンピューティングプログラムを得ることができる。データ及び/又はコンピューティングアプリケーションは、サーバーコンピューティング環境205に記憶することができると共に、クライアントコンピューティング環境100、210、215、220及び225を通り、例示的通信ネットワーク160を経て、協働するユーザへ通信することができる。参加するユーザは、サーバーコンピューティング環境205に全体的又は部分的に収容された特定データ及びアプリケーションへのアクセスを要求することができる。このようなデータ通信は、クライアントコンピューティング環境100、210、215、220及び225と、サーバーコンピューティング環境との間で処理及び記憶のために行うことができる。サーバーコンピューティング環境205は、データの生成、認証、暗号化及び通信のために、コンピューティングプログラム、プロセス、及びアプレットをホスト処理できると共に、他のサーバーコンピューティング環境(図示せず)、第三者のサービスプロバイダー(図示せず)、ネットワークアタッチ型記憶装置(NAS)、及び記憶エリアネットワーク(SAN)と協働して、このようなデータトランザクションを実現することができる。
従って、ここに述べる装置及び方法は、ネットワークにアクセスして対話するためのクライアントコンピューティング環境と、このクライアントコンピューティング環境と対話するためのサーバーコンピューティング環境とを有するコンピュータネットワーク環境に使用することができる。しかしながら、移動装置プラットホームを与える装置及び方法は、種々のネットワークベースのアーキテクチャで実施することができ、従って、ここに示す実施例に限定されるものではない。
3.プラットホーム依存リンキング
実行可能なプログラムは、一般に、プラットホーム依存である。換言すれば、所与のプログラムは、展開されたときに特定のプラットホームでランするように意図され、従って、その特定のプラットホームに対してコンパイルされ、リンクされ、構築されねばならない。また、このようなプロセスから生成されて得られるバイナリ実行可能ファイルは、一般に、異なるプラットホームではランされない。従来のシステムでは、各個々のオペレーティングシステムのために別々の動的ライブラリを構築することが必要となる。複数のオペレーティングシステムをサポートすべき場合には、専用のツールを使用して、ライブラリコードを複数の共有オブジェクト(動的ライブラリ)内に構築しなければならず、即ち各オペレーティングシステムに対して1つずつ構築しなければならない。コードが、個々のプラットホームに対して独特のアイテムを明確に参照しない場合には、所与の当該オペレーティングシステムに対して共有オブジェクトライブラリを生成して、そのオペレーティングシステムから導出される複数のプラットホーム上でファンクションさせるのに充分である。これとは対照的に、ライブラリコードがプラットホーム独特のファンクションに対して明確な依存性を有する場合には、共有オブジェクトを特に所与のプラットホームに対して構築しなければならず、この共有オブジェクトは、一般に、明確な依存性を持たない他のプラットホームでは動作しない。
オペレーティングシステムが複数のプラットホームをサポートするインスタンスでは、プログラムコンポーネントのセットは、通常、次のコンポーネントを含むが、これに限定されない。即ち、プラットホームに独特に拘束された実行可能なバイナリ、及びプラットホームの基礎となるオペレーティングシステムに対して構築された共有オブジェクト(動的ライブラリ)の任意のセットである。
図3は、「動的なリンキング」を遂行するときに例示的コンピューティング環境300により遂行されるプロセスを示す。図3に示すように、プログラムソースファイル350は、ブロック345においてオブジェクトファイルを生成するようにコンパイルされる。同様に、ライブラリソースファイル305は、ブロック310において動的ライブラリを生成するようにコンパイルされる。それにより得られる動的ライブラリオブジェクトファイル315は、インポートライブラリアン320への入力として働き、これは、動的ライブラリオブジェクトファイル315に対して動作して、インポートライブラリスタブファイル325を生成する。コンパイル345からのオブジェクトファイルは、スタブファイル325に静的にリンクされ、動的なバイナリ実行可能ファイル340を生成する。
図3に示すように、動的リンカー330は、動的に実行可能なオブジェクトファイル340及び動的ライブラリオブジェクトファイル315を入力として受け取り、完全にリンクされ且つ結合された実行可能なファイル335(例えば、ラン可能なプロセス)を生成する。動作中に、コンピューティングアプリケーション(例えば、プログラムソースファイル350)は、協働する動的リンクライブラリから一又は複数のファンクションをコールすることができる。ファンクションがコールされたとき、又はプログラムが実行されるとき(上述したように)、動的リンカー330は、プログラムアプリケーションによりコールされるファンクションを代表するメモリで見つかるシンボル又はプログラム実行に要求されるものを動的に探索するように動作する。
図4及び5は、従来の解決策により複数のオペレーティングシステム及びプラットホームでランさせるためにソースコードをどのように処理できるか示す。単一のオペレーティングシステムA 485が2つのプラットホームA1 475及びA2 480をサポートする図4を参照すれば、ライブラリソースファイル405及びプログラムソースファイル415を有する例示的な動的リンキングアーキテクチャ400が示されている。ライブラリソースファイル405は、ブロック410においてコンパイルされて、オペレーティングシステムA 485に対する動的ライブラリを生成する。それにより動的ライブラリA 430に対して得られる動的ライブラリオブジェクトファイルは、インポートライブラリアン445への入力として働き、これは、動的ライブラリA 430に対する動的ライブラリオブジェクトファイルを処理して、インポートライブラリスタブファイルA 450を生じさせる。
同様に、プログラムソースファイル415は、ブロック420においてコンパイルされて、プラットホームA1 475に対するオブジェクトファイルを生成し、また、ブロック425においてコンパイルされて、プラットホームA2 480に対するオブジェクトファイルを生成する。コンパイル420から生じるオブジェクトファイルは、スタブファイル450と静的にリンクされ、それにより、動的に実行可能なオブジェクトファイルA1exec435(例えば、プラットホームA1 475における実行可能ファイル)を生成する。また、図示されたように、コンパイル425から生じるオブジェクトファイルは、スタブファイル450に静的にリンクされて、それにより、動的に実行可能なオブジェクトファイルA2exec440(プラットホームA2 480における実行可能ファイル)を生成する。動的リンカー455は、動的ライブラリ430を、動的に実行可能なオブジェクトファイルA1exec435にリンクして、完全にリンクされた実行可能ファイル(エグズキュータブル)465を生成するように動作し、これは、オペレーティングシステムA 485のメモリへロードされ、プラットホームA1 475においてラン可能なプロセスを生成する。同様に、動的リンカー460は、動的ライブラリ430を、動的に実行可能なオブジェクトファイルA2exec440にリンクして、完全にリンクされた実行可能ファイル(エグズキュータブル)470を生成するように動作し、これは、オペレーティングシステムA 485のメモリへロードされ、プラットホームA2 480においてラン可能なプロセスを生成する。動作中に、完全にリンクされた実行可能ファイル465又は470のいずれかが、各々、動的ライブラリ430からファンクションをコールするか又はデータを検索することができる。
図5を参照すれば、ライブラリソースファイル505及びプログラムソースファイル515を有する例示的な動的リンキングアーキテクチャ500が示されている。ライブラリソースファイル505は、ブロック510においてコンパイルされて、オペレーティングシステムB 585に対する動的ライブラリを生成する。それによりオペレーティングシステムB 585に対して得られる動的ライブラリオブジェクトファイル530は、インポートライブラリアン545への入力として働き、これは、動的ライブラリオブジェクトファイル530を処理して、インポートライブラリスタブファイルB 550を生成する。
同様に、プログラムソースファイル515は、ブロック520においてコンパイルされて、プラットホームB1 575に対するオブジェクトファイルを生成し、また、ブロック525においてコンパイルされて、プラットホームB2 580に対するオブジェクトファイルを生成する。コンパイル520から生じるオブジェクトファイルは、スタブファイル550と静的にリンクされ、それにより、動的に実行可能なオブジェクトファイルB1exec535(例えば、プラットホームB1 575における実行可能ファイル(エグズキュータブル))を生成する。また、図示されたように、コンパイル525から生じるオブジェクトファイルは、スタブファイル550に静的にリンクされて、それにより、動的に実行可能なオブジェクトファイルB2exec540(プラットホームB2 580における実行可能ファイル)を生成する。動的リンカー555は、動的ライブラリ530を、動的に実行可能なオブジェクトファイルB1exec535にリンクして、完全にリンクされた実行可能ファイル565を生成するように動作し、これは、オペレーティングシステムB 585のメモリへロードされ、プラットホームB1 575においてラン可能なプロセスを生成する。同様に、動的リンカー560は、動的ライブラリ530を、動的に実行可能なオブジェクトファイルB2exec540にリンクして、完全にリンクされた実行可能ファイル(エグズキュータブル)570を生成するように動作し、これは、オペレーティングシステムB 585のメモリへロードされ、プラットホームB2 580においてラン可能なプロセスを生成する。動作中に、完全にリンクされた実行可能ファイル(エグズキュータブル)565又は570のいずれかが、各々、動的ライブラリ530からファンクションをコールするか又はデータを検索することができる。
図4及び5に示すように、アプリケーションプログラム各々415及び515と、ライブラリファイル各々405及び505とで構成されるソースコードの共通セットが存在する。ここに示す実施形態では、アプリケーションプログラムは、4つの別々のプラットホーム、即ち共通のオペレーティングシステムA 485から導出されるプラットホームA1 475及びA2 480と、オペレーティングシステムB 585から導出されるプラットホームB1 575及びB2 580とにおいてランするように書き込むことができる。アプリケーション415及び515のソースコードは、各プラットホーム、即ちプラットホームA1 475、プラットホームA2 480、プラットホームB1 575及びプラットホームB2 580に特有のインストラクションを維持できると共に、アプリケーション415及び515のソースコードがコンパイルされるときにプラットホーム依存性を識別できる仕方で書き込むことができる。
ここに示す実施形態では、ライブラリ405及び505に関するソースコードは、一般に、特定のプラットホーム依存性を維持しない。ここに例示する動作においては、ライブラリは、協働するアプリケーションプログラムによりコールすることができ、そして動的なライブラリとして動作することができる。図4に示すように、各プラットホーム(475及び480)は、それ自身の動的に実行可能なファイルA1exec435、A2exec440を要求することができ、これらは、プラットホーム特有のコンパイラツール(例えば、コンパイラブロック420及び425)を介して共通のアプリケーションソースファイル415をコンパイルすることにより生成することができる。ここに例示する実施形態では、協働する動的ライブラリ430は、一度生成されて、実行可能ファイルA1exec435又はA2exec440の両方に動的にリンクされ、各プラットホームA1 475及びA2 480においてラン可能なプロセスを各々生成することができる。
図5に示すように、プラットホームB1 575及びプラットホームB2 580においてアプリケーションをランさせるのを許すために、2つの付加的な実行可能なファイルB1exec535及びB2exec540がコンパイルされる。更に、新たな動的なライブラリ530が、エグズキュータブルB1exec535及びB2exec540にリンクするように生成される。というのは、実行可能なファイルB1exec535及びB2exec540は、オペレーティングシステムB585に対して構築されるからである。このような実施形態では、2つのオペレーティングシステム(各々、オペレーティングシステムA485及びオペレーティングシステムB585)で動作する4つのプラットホーム(プラットホームA1 475、プラットホームA2 480、プラットホームB1 575、及びプラットホームB2 580)にわたるライブラリの動的リンキングを実現するために、4つの動的に実行可能なファイル及び2つの動的なライブラリを構築することが要求される。従来の解決策では、異種のコンピューティング環境で動作可能なバイナリオブジェクトの開発は、リソース集中となることが明らかである。
図6は、例示的コンピューティング環境600のコンポーネントを示す。図6に示すように、ソースコード607とCPU670との間にレイヤ605、610及び615のヒエラルキーが存在することができる。このようなヒエラルキーは、最上位及び最下位レイヤには高度の共通性を示すが、それらの間には多様性を示す。最も高いレベル605では、ソースコード607が、幾つかの限定されたプラットホーム特有のエレメント620を伴う全ての協働するプラットホームに対して主として共通である。最も低いレベル615では、コードがCPU670においてランする。ここに示す実施形態では、CPU670のアーキテクチャが、複数の異種のコンピューティング環境(図示せず)の間で共通であるときには、低レベルのマシンインストラクションが同一であることが予想される。しかしながら、中間レイヤ610は、複数のプラットホーム変形630、635、645、650及び660を各々伴う複数のオペレーティングシステム640、655及び665を維持することができ、そしてそれらの個別の特性及びツールチェーンのために個々のバイナリを要求することができる。また、図示されたように、最上位レイヤ605は、プラットホーム及びオペレーティングシステムの両方について独立できるプラットホーム独立のソースコード625を含む。
ここに示す実施形態において、図6を参照すれば、3つのオペレーティングシステムにおいて5つのプラットホームが動作する。より詳細には、プラットホームA1 630、プラットホームA2 635がオペレーティングシステムA 640においてランし、プラットホームB1 645及びB2 650がオペレーティングシステムB 655においてランし、更に、プラットホームC1 660がオペレーティングシステムC 665においてランする。従来の方法では、コンピュータプログラムの適切な動作を確保するために、各アプリケーションプログラムの5つの異なるバージョン(各プラットホームに対して1つ)と、3つの別々の動的なライブラリ(各OSに対して1つ)とを生成することが要求される。ここに述べるシステム及び方法は、5つのプラットホーム及び2つのオペレーティングシステムにわたって機能する単一の動的なライブラリを設けることにより従来の慣例の欠点を改善することに向けられる。ここに示す実施形態では、CPUにおいてランするOSに関わらず、特定のCPUアーキテクチャを合体した全てのシステムに使用でき、従って、図6の最上位レイヤ605及び最下位レイヤ615における共通性の利点を取り入れた単一セットのバイナリライブラリを生成することができる。
ここに述べるシステム及び方法は、種々のコンピューティング環境に適用することができる。ここに示す実施形態では、ここに述べるシステム及び方法は、INTEL(登録商標)x86ファミリーからのプロセッサを一般的に含むデスクトップシステムに適用されてもよい。デスクトップPCにおける共通のオペレーティングシステムは、MICROSOFT(登録商標)WINDOWS(登録商標)及びLinuxであり、これらは、両方とも、動的リンキングのファンクションを有する。しかしながら、これらのオペレーティングシステムは、それらのバイナリオブジェクトに対して不適合のフォーマットを使用し、従って、Linux及びWINDOWS(登録商標)については、たとえそれらが同じCPUにおいてランできるとしても、個別のライブラリが設けられる。
移動及び埋め込み型装置については、多様性の問題が著しく大きなものになり得る。より詳細には、移動及び埋め込み型装置は、Linux、WINDOWS(登録商標)CE、PalmOS(登録商標)、SymbianOS(登録商標)、BREW(登録商標)、Itronを含む(これらに限定されないが)著しく多くのオペレーティングシステムを利用する。しかしながら、CPUレベル615では、ARM RISCアーキテクチャのような選択されたコンピュータハードウェアアーキテクチャに基づく相当の共通性が存在し得る。現在の慣例では、このような共通性が利用されず、むしろ、OS又はプラットホームレイヤ(例えば、610)に基づいて仕立てられたライブラリが生成される。
ここに示す実施形態では、ここに述べるシステム及び方法は、ソフトウェアプラットホームに関わらず、選択されたハードウェアアーキテクチャ(例えば、ARMプロセッサを含む装置)において動作するコンピューティング環境でランできる単一ソフトウェアライブラリを流通させるために、選択されたコンピューティング環境市場(例えば、移動装置市場)に適用することができる。このような解決策は、ソフトウェア開発者及び顧客の両方に、特定プラットホーム向けライブラリの複数のバージョンを開発して維持するコストの節減を含む(これに限定されないが)種々の商業的利益を提供することができる。更に、複数の設置にわたって同じコンポーネントを伴う経験の累積によりコードのクオリティを迅速に確立することができる。更に、このような解決策では、ライブラリに対する変更をより完全に且つ効率的にテストすることができる。装置メーカー(例えば、セルラー電話製造者)は、このようなライブラリが単一製品範囲において証明された場合には、それらの種々の製品範囲にわたって共通のライブラリを使用することができる。
図7は、例示的プラットホーム独立バイナリオブジェクト及びリンキングアーキテクチャ700を示す。図示されたように、プラットホーム独立バイナリオブジェクト及びリンキングアーキテクチャ700は、メインアプリケーションソースコード705を含むソースコードと、プラットホーム独立のソースコードコンポーネントとを備え、これらのコンポーネントは、プラットホーム独立の動的ライブラリ(PIDL)ソース725、コンパイラ730、PIDLオブジェクトファイル735、オブジェクトパーザ740、PIDLスタブファイルのソースコード765、PIDL動的ローダー/リンカーのソースコード720、定義されたアプリケーションプログラムインターフェイス(API)710、及びAPIパーザ715を含むが、これらに限定されない。
ここに示す動作においては、PIDLソース725が、ブロック730において、標準オブジェクトフォーマットへとコンパイルされ、PIDLオブジェクトファイル735を生成する。PIDLオブジェクトファイルは、次いで、オブジェクトパーザ740によりパーズされ、PIDLスタブファイル765に対するソースコードを生成することができる。同様に、アプリケーションプログラムインターフェイス(API)パーザ715は、API710において動作して、PIDL_getSymbolファンクションを生成し、PIDLオブジェクトファイル735による協働するメインアプリケーション705へのアクセスを可能とする。図7に示すように、メインアプリケーションソース705、動的ローダー/リンカーのソースコード720、PIDLスタブファイルのソースコード765、及びもし実行されれば、PIDL_getSymbolソースファンクション755(例えば、コンパイルコンポーネントのソースコードのセット745)は、ステップ770において、ターゲットプラットホームに対してコンパイルされ構築される。それにより生じる動的なバイナリ実行可能ファイル795は、メインアプリケーションファンクション775、PIDL_getSymbolファンクション780、及び動的なPIDLローダー/リンカーファンクション785を利用して、ファンクションをコールすると共に、PIDLオブジェクトファイル735からデータを検索する。
例示的なプラットホーム独立のバイナリオブジェクト及びリンキングアーキテクチャ700は、種々のコンポーネントを特定のコンフィギュレーションで有するように示され、特定のオペレーションを遂行するように説明されるが、ここに述べる本発明の概念は、種々のコンポーネント、コンフィギュレーション及びオペレーションを有するいかなるプラットホーム独立のバイナリオブジェクト及びリンキングアーキテクチャにも適用できるので、このような説明は、単なる例示に過ぎないことが明らかである。
ここに示す実施形態では、例示的なプラットホーム独立のバイナリオブジェクト及びリンキングアーキテクチャ700は、次の方法に基づいて動作することができる。PIDLオブジェクトファイル735は、その構造が充分に定義された標準的なオブジェクトファイルフォーマットで生成することができる。オブジェクトパーザ740は、標準的なPIDLオブジェクト構造体をパーズして、スタブファイル765を生成するように動作することができる。スタブファイル765は、ソースコードとして生成される。更に、スタブファイル765のソースコードは、プラットホーム依存性をもたない。動的ローダー/リンカー720は、これをメインアプリケーションプログラム705の一部分として含むことができるように書き込むことができる。更に、PIDLライブラリがメインアプリケーションをコールできるようにするインターフェイスであるAPI710は、これを指定して、ソースコードファンクション(PIDL_getSymbol)755へ変換し、メインアプリケーション705でコンパイルすることができる。ここに示す実施形態では、ターゲットプラットホームが既知である場合に、結合したソースコード(例えば、コンパイルコンポーネントソースコード745のセット)を、所与のプラットホーム(図示せず)に対するバイナリ実行可能795へとコンパイルすることができる。ランタイムに、動的ローダー/リンカー785(例えば、コンパイルされたローダー/リンカー)は、シンボル分析及びリロケーションを取り扱い、動的なバイナリ実行可能795及びPIDLファイル735を完全にラン可能なプロセスとして結合することができる。
上述したように、動的ライブラリのプラットホーム独立性は、最初に、ライブラリソース725のコードを既知のオブジェクトファイルフォーマット735へコンパイルすることにより達成できる。意図される実施形態においては、PIDLソース725は、特定のプラットホームに対する依存性を含まない。オブジェクトファイルフォーマット(図示せず)は、通常、コードのサイズのようなヘッダ情報、コンパイラ又はアッセンブラにより生成されるオブジェクトコード、オブジェクトコードのアドレスがリンカーによりジャッグルされたときにリンカー785により使用するためのリロケーション情報、及びこのモジュールからエクスポートされるか又は他のモジュールからインポートされるシンボルのシンボルテーブルを含む(これらに限定されないが)複数の形式の情報を収容することができる。
ここに例示する実施形態では、プラットホーム独立のバイナリオブジェクト及びリンキングアーキテクチャ700は、ELF(実行可能・リンキングフォーマット)、MICROSOFT(登録商標)ポータブル実行可能(Portable Executable)(PE)フォーマット、及び他のオブジェクトフォーマット(例えば、ここに述べるシステム及び方法のために特に設計されたオブジェクトフォーマット)を含む(これらに限定されないが)種々のオブジェクトファイルフォーマットを利用することができる。
従来、異なるオペレーティングシステム及びプラットホームは、異なるオブジェクトファイルフォーマットを使用している。これらプラットホームのためのリンカー及びローダーは、これらの予め定義されたフォーマットでリンク可能なオブジェクトを受け取ることを期待し、他のフォーマットは拒絶する。また、プラットホームが動的リンキングを与えるときには、動的リンカーがオペレーティングシステムの部分であり、独特のオブジェクトフォーマットに「ハードワイヤド」することができる。
ここに述べるシステム及び方法は、一般的なローダー/リンカー720を設けることによりこの欠点を改善する。ここに例示する実施形態では、この一般的ローダー/リンカー720は、選択されたオブジェクトファイルフォーマット(例えば、ELF、又は選択された他の何らかのオブジェクトフォーマット)でオブジェクトファイルを処理するように書き込むことができる。動作中に、一般的なローダー/リンカー785は、PIDLオブジェクトファイル735内のシンボル、リロケーション情報及び他の情報を探索するように動作する。図7に示すように、ローダー/リンカー720の展開は、協働するメインアプリケーション705のソースコードと共にコンパイルされるソースコードの生成によって達成される。この点について、リンキング及びローディング制御は、オペレーティングシステムから除去されて、ランしている実行可能ファイル(エグズキュータブル)に含まれる。また、動的なローダー/リンカー785は、非PIDLライブラリを処理するように動作することもできる。この点について、動的なローダー/リンカー785は、動的なライブラリがPIDL形式であるか、非PIDL形式であるか確かめ、それに応じてPIDL又は非PIDLライブラリを処理するように設計することができる。ここに例示する実施形態では、非PIDLライブラリが処理されるときに、リンキング及びローディングの制御は、基礎となるオペレーティングシステムへ戻すことができる。
ここに例示する実施形態では、PIDLオブジェクトファイルは、再構築又は再コンパイルの必要なく、異種のプラットホームにわたって使用することができる。この実施形態では、メインアプリケーションプログラムが、選択されたプラットホームの動的なリンカー/ローダーコードで一緒にコンパイルされると共に、リンキングの制御がプラットホームに依存せず、むしろ、実行可能ファイル(エグズキュータブル)内に配されるので、ランタイムにおけるPIDLのリンキングは、PIDLオブジェクトを再コンパイル又は再生成する必要なく、異種のプラットホームにおいて達成することができる。
図7に示すように、スタブファイル765は、ソースコードとして生成される。従来の慣例に比較して、図3を参照すれば、従来の解決策は、エクスポート及びインポートされる両グローバルシンボルを定義するオブジェクトファイル325としてライブラリスタブを生成することである。動作中に、スタブファイルは、一般的に小さく、結合/アッセンブルされたプログラムにおいてリンカーがシンボルを分析するのを許す。動作中に、メインプログラムは、動的ライブラリに存在する名前付きファンクションをコールすることができ、また、動的ライブラリも、メインプログラム内のファンクションをコールすることができる。適切に機能するための組み合せについては、ローダーが全てのオブジェクトコードコンポーネントをコンピューティング環境のメモリに配したときに、ファンクションコールを分析して適切なアドレスでリロケーションすることができる。
図8に示すように、ファンクション又はシンボルA及びBに対するコードは、メインプログラム810に配置することができ、また、ファンクションC、Dは、動的ライブラリ820に配置することができる。ここに例示する実施形態では、動的ライブラリ820がA及びBをコールし、或いはメインプログラム810がライブラリファンクションC又はDを使用するために、シンボルと、全ファンクションの位置が、結合されたプログラムにおいて分析される。ここに例示する実施形態では、この動作は、例示的リンカー(図示せず)により遂行することができる。従来の慣例では、スタブライブラリ(例えば、図3の325)は、ライブラリからエクスポートされるファンクション(例えば、C及びD)とそれによりコールされるファンクション(例えば、A、B)とを結合するのに必要な情報を保持することができる。図3を参照すれば、従来の慣例では、アーキテクチャ300が、ライブラリスタブ325を、静的リンキング段階においてメインプログラムの予めコンパイルされたオブジェクトファイルにリンクして、バイナリ実行可能ファイル340を生成する。その後、バイナリ実行可能ファイルが実行のためにロードされるときに、動的リンカー330の制御のもとで動的ライブラリ315と動的にリンクすることができる。従来の解決策では、動的リンカーは、一般に、オペレーティングシステムの部分である。このような状況では、異なるシステムがそれら自身のリンカー及びオブジェクトフォーマットを使用するので、プラットホーム依存のライブラリスタブファイルが得られることになる。従って、単一ライブラリは、異なるオペレーティングシステムに対して異なるスタブファイルを必要とする。
ここに述べるシステム及び方法は、スタブファイルをソースコードファイルとして設けることにより既存の慣習の欠点を改善することに向けられる。図7を参照すれば、スタブライブラリ765は、オブジェクトパーザ740を使用して生成される。オブジェクトパーザ740は、PIDLオブジェクトファイル735を通してパーズして、シンボル名及びプロパティを抽出すると共に、ソースファイル765(例えば、“C”言語又はそれと同等のものを含む(これに限定されないが)高水準言語において)をパーザの出力として生成する。ここに例示する実施形態では、図7に示すように、PIDLスタブファイル765に対して生成されるソースコードは、プラットホーム独立であると共に、その後、メインアプリケーションプログラムの部分としてコンパイルされる(動的リンカーコードと共に)。PIDLスタブ情報をコンパイル段階で含むことにより、PIDLからエクスポートされるシンボルは、それにより得られる動的実行可能ファイル(エグズキュータブル)において宣言することができる。
明らかなように、従来の解決策と同様に、スタブファイルをオブジェクトコードではなくソースコードとして生成することは、スタブに含まれたライブラリ情報を、構築プロセスのコンパイル段階に含ませねばならないことを示す。対照的に、従来の解決策は、メインアプリケーションが既にコンパイルされた後に、スタブを静的リンキング段階に合体させる。静的リンカーは、オペレーティングシステムの制御のもとにあり、これは、リンクされたオブジェクトが、オペレーティングシステム特有のオブジェクトフォーマットであることを要求し、このフォーマットは、一般に、異なるオペレーティングシステムのリンカーにより認識されない。プラットホーム独立の解決策を得るためには、リンキング段階に頼ることをなくす必要がある。ここに述べるシステム及び方法では、このような目標は、スタブファイルを、リンクすべきオブジェクトコードではなく、コンパイルすべきソースコードとして設けることにより、達成することができる。
明らかなように、ここに述べるシステム及び方法では、メインアプリケーションが動的リンカー及び適切なPIDLスタブファイルと共にコンパイルされるとすれば、メインアプリケーションが、PIDLオブジェクトとして展開された動的ライブラリにアクセスすることが許される。また、ここに述べるシステム及び方法は、PIDLがメインアプリケーションのファンクションへのアクセスを要求するときのインスタンスも考慮している(図8に示すように)。このような状況では、メインアプリケーションによりPIDLライブラリに露出されるファンクションのAPI(図7の710)(アプリケーションプログラミングインターフェイス)は、これを最初に指定してパブリッシュすることができる(PIDLがその露出されたファンクションを使用できるように)。次いで、API(図7の710)をパーズして、ソースコードファンクションPIDL_getSymbol(図7の755)を生成することができ、これは、メインアプリケーションの部分としてコンパイルすることができる(図7に示すように)。ここに例示する実施形態では、PIDL_getSymbolファンクションは、APIにより露出された名前付きシンボルのアドレスを返送できると共に、PIDLによりコールされたシンボルのアドレスに置き換わるようにリロケーション中に動的リンカーにより使用することができる。従って、PIDLがメインアプリケーション内のファンクションをコールするときには、リンケージ及びアドレスが動的リンカー(図7の785)により既に分析されている。
更に、動的リンカーは、PIDLオブジェクトのランタイムリンキングを可能とする。メインアプリケーションソースファイルは、図7に示すように、ターゲットプラットホームに対してコンパイルして、動的リンカー及びPIDL_getSymbolファンクション並びにメインプログラムを含むバイナリ実行可能ファイルを生成することができる。PIDLライブラリを生成することができ、これは、オブジェクトファイルとして利用できる。
ここに例示する実施形態の例示的動作においては、メインプログラムがランをスタートするときに、それをプラットホームローダーによりメモリに配置することができる。実行が始まるときに、メインプログラムは、それ自身に対して外部のシンボルへのコールを行うかどうか決定する。このようなコールは、PIDLリンカーを呼び出し、これは、最初に、被呼ファンクションを含むライブラリの名前及びパスを決定する。ライブラリが、WINDOWS(登録商標)DLLのような普通の特定プラットホーム向け動的ライブラリである(PIDLではない)場合には、リンカーは、普通のプラットホームライブラリローダーが存在するときにこれに制御を引き渡す。しかしながら、そうではなくて、被呼ファンクションがPIDL内にある場合には、それが露出するシンボルを含むと共にメインプログラムへとコンパイルされていて、従って、シンボル参照が定義されているPIDLスタブファイルを使用して、シンボル名によりそれを識別することができる。
リンカーは、ファンクションコールに応答して、PIDLオブジェクトを表すプログラムされたストラクチャを生成することができる。これは、次いで、オブジェクトにアクセスしてコードサイズ(例えば、オブジェクトファイルフォーマット内のフィールドに定義され、従って、容易に利用できる)を見出すことができ、適切なサイズのメモリの固定ブロックを割り当てることができ、そしてPIDLファイルをその割り当てられたメモリにロードすることができる。
次いで、リンカーは、メモリにおいてシンボルアドレスをリロケーションするように動作する。PIDL内の内部シンボルがリロケーションされる。動作中に、バイナリファイルは、オブジェクトコード内のシンボルのアドレスを含むが、一般的に、ライブラリコードに対してゼロのベーススタートアドレスがあるという仮定のもとで動作する。しかしながら、PIDLは、PIDLがメモリにロードされるので確認できる異なるアドレスに配置される。リンカーによるリロケーションは、メモリブロックの実際のスタートアドレスを考慮するためのシンボルアドレスの調整を含むことができる。
内部PIDLシンボルをリロケーションした後に、リンカーは、PIDLの外部にあってPIDLによりコールされる全てのシンボル、例えば、メインアプリケーションに含まれたファンクションをリロケーションすることができる。これらのシンボルに対して、リンカーは、引数としてリロケーションされるべき外部シンボルの名前でPIDL_getSymbolファンクションをコールすることができる。このファンクションは、アプリケーションAPIにより露出される全てのシンボルのリストを含むので、名前に一致させて、その名前付きシンボルの実際のアドレスを返送することができる。
この段階において、PIDLは、それがエクスポート又はインポートする内部及び外部シンボルの正しいアドレスを維持する。リロケーションが完了した後に、PIDLによりエクスポートされたシンボルのリロケーションされたアドレスをリンカーへ返送することができる。メインプログラムは、リロケーションされたシンボルにアクセスすることができ、PIDLの外側からPIDLシンボルの1つへコールがなされるときに、正しいシンボルアドレスが使用される。
ここに述べるシステム及び方法は、単一アプリケーションにリンクされた複数のライブラリ(例えば、PIDL)と共に使用することができる。これらのライブラリは、それらがエクスポートするファンクション及びシンボルを使用して、互いにコールを行うことができる。複数のライブラリが使用される状態では、リンキングメカニズムを均質に適用することができ、即ち動的ライブラリは、標準的なオブジェクトフォーマットでセーブされ、スタブは、ソースフォーマットで生成され、そしてメインプログラムは、それが使用するPIDLライブラリに対してスタブでコンパイルされる。動的ローダー/リンカーは、ロードタイム又はランタイムにそれがコールされたときに各ライブラリをロードし、更に、リロケーションを遂行し且つPIDLライブラリ間でメインプログラムと共にシンボルを分析するための情報は、プログラムにコンパイルされた動的ローダー/リンカー(例えば、図7の785)により取り扱われる。
4.プラットホーム独立の動的ライブラリ
図9は、一又は複数のPIDLのランタイムリンキングを実行するときに例示的コンピューティング環境により遂行される処理を示す。図示されたように、処理は、動的ライブラリ実行可能ファイルがコンパイルされ構築されるブロック900で始まる(図7において述べたように、例示的な動的バイナリ実行可能は、コンパイルされたメインアプリケーションソースコード、PIDLローダー/リンカーのソースコード、及びPIDLスタブソースコードを含むことができるが、これに限定されない)。ここから、処理は、ブロック910へ進み、例示的コンピューティング環境において動的実行可能ファイル(エグズキュータブル)がランされる。次いで、処理は、ブロック915へ進み、協働するコンピュータプログラムがライブラリファンクションにコールを発することが決定される。次いで、ブロック920において、被呼ファンクションが協働するPIDLにあるかどうか決定するためのチェックが遂行される。ブロック920のチェックが、被呼ファンクションが協働するPIDLにないことを指示すると、処理は、ブロック925へ進み、協働する動的ライブラリが通常のオペレーティングシステム/プラットホームリンカーを通してロードされる。これで処理は終了となる。
しかしながら、ブロック920において、被呼ファンクションが協働するPIDLにあると決定された場合には、処理がブロック930へ進み、ここで、PIDLオブジェクトについてプログラムされたストラクチャが生成され、所定のファイルフォーマットをもつPIDLオブジェクトファイルの情報を取得できるようにする。
次いで、PIDLオブジェクトのサイズがブロック935において決定される。そこから、処理は、ブロック940へ進み、メモリブロックが割り当てられると共に、PIDLオブジェクトファイルをその割り当てられたブロックへロードすることができる。次いで、PIDLの内部シンボルが、ブロック945において、オブジェクトファイルから抽出されたシンボルテーブル及びロードアドレスを使用してリロケーションされる。次いで、外部のPIDLシンボルが、ブロック950において、API(PIDL_getSymbol)ファンクションコールを使用してリロケーションされる。そこから、協働するコンピュータプログラムは、ブック955において、PIDLリンカーによりPIDLシンボルアドレスが通知される。そこから、ブロック960において、シンボル及びコールが分析されリロケーションされるときに、リンキングが完了したことになる。これで処理が終了する。
5.制約のある環境における動的リンキングのためのメカニズム
あるオペレーティングシステムは、動的なリンキング能力を備えていない。これらのシステムにライブラリが使用されるときには、ライブラリが静的にリンクされる。即ち、ライブラリがリンク時に実行可能バイナリに結合される。実行可能ファイルは、付加的なリンキングを行なわずに実行の準備ができるので、静的でもあり、更に、リンキングが完了した後に変更しなくてもよい。一般的に、静的にリンクされたライブラリは、それが結合された基礎となるプログラムに影響(例えば、切断又は停止)を与えずに変更することができない。また、ライブラリにおけるルーチン及びデータのアドレスはプログラムに結合されるので、これらのアドレスを変更すると、それに結合されたプログラムに機能不良を生じさせる。
ここに述べるシステム及び方法は、動的な実行をネイティブにサポートしないオペレーティングシステムにおいて動的な実行を与えることにより既存の慣例の欠点を改善する。ここに例示する実施形態では、動的リンキングには、ランタイム又はロードタイムまでリンキングを遅延させる特性、または、静的にリンクされないライブラリを実行可能プログラムが使用する特性があると考えることができる。更に、ここに述べるシステム及び方法は、所与のオペレーティングシステムによりネイティブにサポートされないバイナリオブジェクトフォーマットのリンキングを可能とする。
ここに例示する実施形態では、より大きなプログラムを、メインアプリケーションと、サポートファンクションを与えるセットコンポーネントライブラリとに仕切ることができる。従来の慣例では、プログラム全体が単一の静的な実行可能ファイルとして設けられる。従って、プログラムに対する変更が必要になった場合には、完全に新しい実行可能ファイルを構築して、非変更バージョンに置き換わるように配布される。これとは対照的に、ここに例示する実施形態では、コンポーネントを、それらを使用するアプリケーションとは独立して、一度だけ供給することができる。従って、アプリケーションは、より小さなサイズとすることができ、新たなアプリケーション又は変更されたアプリケーションが要求される場合には、それに関連したライブラリの再構築を必要とせずに、アプリケーションそれ自体だけの再構築が要求される。
反対に、ここに示す実施形態では、アプリケーションが不変のままであるが、コンポーネントの1つが変更される場合には、他のコンポーネントへ変更を施すことなく、新たなコンポーネントを以前のバージョンに代わって置き換えることができる。改訂バージョンのシンボル名が同じであるとすれば、新たなコンポーネントバージョンは、ランタイムに、オリジナルのアプリケーションプログラム及び他のコンポーネントにリンクすることができる。ここに例示する実施形態では、動的リンカーがアドレスリロケーションを処理する。シンボルが新たなコンポーネントバージョンにおいて異なるアドレスにある場合には、アドレスを、ランタイムに、依然、分析してリロケーションすることができる。
図10は、動的な実行をサポートしていないコンピューティング環境にPIDLを展開するときに遂行される処理を示す。図10に示すように、処理はブロック1000で始まり、ここで、プログラムは、メインアプリケーションと、動的なライブラリとしてランタイム展開されるよう意図された一又は複数のライブラリとに仕切られる。ライブラリは、次いで、ブロック1020において、既知の標準的ファイルフォーマットを有するPIDLオブジェクトファイルへとコンパイルすることができる。プラットホーム独立のソースコードを含むスタブファイルは、ブロック1030において、上述したようにPIDLオブジェクトファイルをパーズすることにより生成することができる。スタブファイルは、ブロック1010において、メインアプリケーションのためのソースコード及び動的リンカーローダーのためのソースコードと一緒にコンパイルされる。リンカー/ローダーコンポーネントは、既知の標準的ファイルフォーマットのPIDLオブジェクトファイルを解釈するための上述した機能を有し、それらをメモリにロードすることができ、更に、必要なリンキング動作を行って、シンボルを分析すると共に、ライブラリとその協働するアプリケーションとの間にリロケーションすることができる。
上述したブロック1000−1030で遂行される全てのファンクション及び/又はオペレーションは、プログラムを展開及び実行する前の構築タイムに遂行することができる。動的なリンキングをネイティブにサポートしない制約のある環境では、構築された実行可能ファイルと外部ライブラリとの間のその後の協働又は相互作用を一般的に達成できない。ここに例示する実施形態では、対照的に、ランタイムに動的なオペレーションを可能とするために、付加的なブロック1040から1080が設けられる。構築された実行可能ファイルは、ブロック1040において、実行を開始するように命令されると共に、ブロック1050において、通常、ネイティブなオペレーティングシステムの制御のもとでメモリにロードされる。ブロック1010の結果として実行可能ファイル内に含まれた動的リンカー/ローダーは、PIDLライブラリをロードしてラン中のアプリケーションに結合するように動作することができる。(図9のブロック915から960を参照されたい。)それにより得られるプログラムは、分析された全てのライブラリコールと完全に結合されるが、次いで、ブロック1080においてランすることができる。
制約のある環境における動的リンキングの動作は、ライブラリがプラットホーム独立であるように動作することが示されたが、ここに述べる本発明の概念は、プラットホーム依存性を有するライブラリにも適用できるので、このような説明は、単なる例示に過ぎないことが明らかである。
6.コードコンポーネントメカニズム
移動コンピュータに使用されるあるオペレーティングシステム(OS)(例えば、PalmOS、SymbianOS)は、グローバル変数及び静的な書き込み可能な変数の使用について制約を強いる。このような制約は、オペレーティングシステムがコードのリロケーション及びグローバル変数のアドレスマネージメントを完全に取り扱うのを回避できるようにするために存在し得る。静的変数は、グローバル変数と同じメモリセグメントに保持されるので、書き込み可能な静的変数も、オペレーティングシステムにより禁止されることがある。コンピュータプログラムコードが、このようなオペレーティングシステムを念頭において書き込まれるときには、当然、それらの制約に従い、適合するコードを生成することができる。しかしながら、ライブラリのようなコードの一部が、このような制約を伴わない異なるプラットホームのために記述されたときには、コードは、制約のあるオペレーティングシステムにおいてコンパイル又は構築する程度までルール違反となり得る。これは、第三者のライブラリ及び予め記述されたコードを、ある種のオペレーティングシステムで使用する能力に対して制限を招き、それらの融通性を低減させる。これは、生産的開発を低下させる。というのは、オペレーティングシステムの制約に従うように既存のコードを変更し、また、ある場合には、スクラッチからそれを完全に再記述するのに、時間を費やさねばならないからである。
ここに述べるシステム及び方法は、オペレーティングシステムの制約を回避できるようにする。ここに例示する実施形態では、ソースコードがオペレーティングシステムの制約に違反するライブラリを、PIDLフォーマットへとコンパイルし構築することができる。PIDLライブラリは、次いで、アプリケーションプログラムと結合し、制約のあるオペレーティングシステムにおいてランされる。ここに述べるシステム及び方法の独特の動的ローディング及びリンキングメカニズムは、PIDLのためにメモリブロックを割り当てる。更に、この実施形態では、グローバル変数が、PIDLのメモリ領域を越えるグローバルとしては処理されない。
このように、この実施形態では、ライブラリ内に定義されるグローバル変数は、このメモリブロック内に拘束され、オペレーティングシステムにはグローバル変数として見えない。また、静的変数も、割り当てられたメモリブロックに拘束することができ、オペレーティングシステムの介入に依存しない。その結果、このようなグローバル及び静的変数のリロケーションをオペレーティングシステムでなし得ないことが回避される。この実施形態では、PIDLローダー/リンカーは、ライブラリ変数のリロケーションを遂行して、それらを機能させることができる。
図11は、PIDLがコンピューティング環境の一又は複数の制約を回避できるようにPIDLを取り扱うために、制約のあるコンピューティング環境により遂行される処理を示す。図11に示すように、処理はブロック1100で始まり、ここでは、オペレーティングシステムにより課せられた一又は複数の制約にコードが違反するライブラリから、PIDLを生成することができる。ソースコードを含むスタブファイルを、ブロック1110において、上述したように生成することができ、また、ブロック1120において、そのスタブファイルを、動的リンカーローダー、及びライブラリと協働するコンピューティングアプリケーションと一緒にコンパイルし構築することができる。
ここに例示する実施形態では、ランタイムに、アプリケーションプログラムを実行するインストラクションをブロック1130において受け取ることができる。実行可能ファイルは、通常そうであるように、ブロック1140において、ホストコンピューティング環境によりロードすることができる。PIDLは、ブロック1160において、コンピューティング環境により使用するために設けることができる。アプリケーションプログラムとライブラリとの間の依存性を識別するときに、動的リンカー/ローダー(ブロック1120においてプログラムに組み込まれた)は、ブロック1150において、メモリブロックを割り当て、その割り当てたブロックにPIDLをロードすることができる。ブロック1170に示すように、ライブラリに定義されたグローバル及び書き込み可能な静的変数は、それらの範囲がその割り当てられたメモリブロックに制限されており、このメモリブロックを越えたところから名前ではアクセスすることができない。それらは、全てのライブラリファンクションに使用可能である。というのは、これらも、割り当てられたメモリブロック内に存在するようにできるからであり、従って、ライブラリは、コンピューティング環境の従来の動作のもとで課せられた制約に違反したとしても、その環境内で正しく動作することができる。次いで、PIDLのリンキングがブロック1180で完了され、完全に結合されたラン可能なプロセスが形成される。
コードコンポーネントの特徴は、ライブラリがプラットホーム独立であるように動作するものとして示されたが、ここに述べる本発明の概念は、プラットホーム依存性を有するライブラリにも適用できるので、そのような説明は、単なる例示に過ぎないことが明らかである。
7.コードローディングメカニズム
従来のソフトウェア開発では、オブジェクト指向の解決策をとることができる。特定のタスクを遂行するためのファンクションをコールするのではなく、オブジェクトを生成できると共に、オブジェクトのメソッドをコールして、希望のタスクを遂行することができる。このようなアプローチは、複数のオブジェクトを生成できると共に、複数のタスクを同時にアクティブにできるので、有益である。計算タスクの複数のインスタンスを実行することが有益な状況が複数ある。例えば、映画クリップをドキュメント内で再生しレンダリングするためのライブラリが存在するケースである。このようなドキュメントが2つのこのような映画クリップを含むときには、共通のコードオブジェクトの2つのインスタンスをランさせることによりそれらクリップを同時に再生することが便利である。オブジェクト指向のアプローチがない場合には、開発者は、オブジェクトがタスクを首尾良く遂行する状態に遭遇することがあるが、複数の同じオブジェクトを同時に実行させる際に困難に陥る。
開発者は、オブジェクト指向のスタイルで書き込むことを選択できるが、このような選択は、第三者のコードを一体化するときに無効になり得る。特に、これは、データを操作し、このデータへのアクセスファンクションを含むライブラリとして展開されるコードの場合があてはまる。ここに例示する実施例では、非オブジェクト指向のコードは、グローバル変数を使用し、また、静的変数の1回の初期化を使用できる。このような状況では、あるコンピューティング環境において、そのコンピューティング環境が同じプロセス内でライブラリオブジェクトの2回以上の呼び出しを実行することが阻止される。というのは、一つのプロセスが、モジュール又はライブラリにより使用される1セットのデータしか保持しないからである。より詳細には、同じオブジェクトの2回の呼び出しは、指定されたグローバル変数を共用することによって、互いに悪影響を与えることがある。或いは、ライブラリは、1回しか実行できないように書き込まれてもよいが、その実行が完了したときにも、2回目を実行する試みは失敗となる。というのは、静的に初期化された変数が必要な初期値をもはやもたないからである。これは、静的な変数は、ランタイムではなく、構築タイムに、コンパイラにより初期化されるためである。従って、初期化された変数が実行中に変更された場合には、その後の実行がその変更された値を含み、適切な動作に必要な初期化値とは異なる値でスタートする。
ここに述べるシステム及び方法は、上述したPIDLローディングメカニズムを設けることによりこれらの欠点の改善を図る。制限されたメモリブロック内でPIDLの複数のインスタンスがそれら自身の「プライベート」なデータコピーを使用できるようにし、これにより、従来のアプローチにおいて機能不良を生じさせる相互作用及び衝突を回避することにより、プロセス内にデータの一つのセットを使用する制約が排除される。この方法により、同じプロセス内でも複数のインスタンス及び繰り返しが実行可能となる。また、複数のプロセスを許さない環境でも複数の同時実行の可能性を広げる。ここに例示する実施形態では、PIDLは、グローバル変数を、動的に割り当てられたバッファ内のアドレスとして処理する。単一のPIDLを何回もロードすることができ、次いで、各コピーは、グローバル変数のそれ自身の個々の独立したコピーを有し、これにより、問題となる相互作用を回避する。同様に、ライブラリを実行するたびに、ファイルからコピーがロードされ、従って、それは静的変数の正しく初期化された値を含む。
図12は、ここに例示する実施形態において、PIDLを取り扱うときに、例示的コンピューティング環境により遂行される処理であって、PIDLを使用して、制約のあるコードコンポーネントの問題となる相互作用を回避できるようにする処理を示している。この処理は、ブロック1200で始まり、ここでは、繰り返し実行を禁止する一又は複数の制約にコードが違反するライブラリからPIDLを生成することができる。ソースコードを含むスタブファイルは、ブロック1210において、上述したように生成することができ、次いで、ブロック1220において、ライブラリと協働するコンピューティングアプリケーション及び動的リンカーローダーと一緒に、スタブファイルをコンパイルし構築することができる。
ここに例示する実施形態では、ランタイムに、アプリケーションプログラムを実行するインストラクションを、ブロック1230において、受け取ることができる。実行可能ファイルは、ブロック1240において、ホストコンピューティング環境によりロードすることができる。PIDLは、ブロック1260において、コンピューティング環境により使用するように設けることができる。アプリケーションプログラムとライブラリとの間の依存性を識別する際に、動的リンカー/ローダー(ブロック1220においてプログラムへと構築された)は、ブロック1250においてメモリブロックを割り当てることができ、その割り当てられたブロックへPIDLをロードすることができ、更に、PIDLを協働するアプリケーションとリンクすることができる。次いで、ブロック1270において、PIDLの新たなインスタンスをコンピューティング環境へロードすべきかどうか決定するためのチェックを遂行する。ブロック1270におけるチェックが、PIDLの新たなインスタンスをロードすべきであると指示する場合には、処理がブロック1280へ進み、ここで、PIDLの新たなインスタンスを個別のメモリブロックにロードできると共に、コンピュータプログラムにリンクすることができる。しかしながら、ブロック1270において、PIDLの新たなインスタンスをロードすべきでないと決定された場合には、処理がブロック1270の入力へ復帰し、そこから進められる。
コードローディングの特徴は、ライブラリがプラットホーム独立であるように動作するものとして示されたが、ここに述べる本発明の概念は、プラットホーム依存性を有するライブラリにも適用できるので、この説明は単なる例示に過ぎないことが明らかである。
8.閉じた又は制約のあるプラットホームのための拡張可能なランタイム環境
あるコンピューティング装置は、装置が装置製造者又は供給者から運搬されるときに常駐するプログラム及びアプリケーションしか実行できないように、閉じたコンピューティング環境として動作する。このような装置(例えば、移動ワイヤレス装置)は、常駐プログラムをホストするオペレーティングシステムを含むことがあるが、他のアプリケーションがそのホストオペレーティングシステムに対して生成されたときであっても、制約なしにそのアプリケーションを追加することができない。このような閉じたプラットホームは、例えば、音声に加えて、固定セットの特徴(例えば、カメラファクション)が設けられたフューチャーホン(Feature Phone)として知られた移動ハンドセットの大きなカテゴリーである。しかし、これらの特徴は、固定され、ユーザにより拡張することができない。装置は、コンピュータプラットホームが機能を追加できないか又は制約があるために、アフターマーケット(after-market)アプリケーションに対して閉じている。
対照的に、開いたコンピューティングプラットホームは、そのオペレーティングシステム向けに記述されたアプリケーションを、日常的な使用において追加して実行することができる。MICROSOFT(登録商標)WINDOWS(登録商標)プラットホームは、パーソナルコンピュータに対する開いたプラットホームの例として考えることができる。移動ハンドセットの領域では、開いたプラットホームの同等カテゴリーがスマートホンとして知られており、これは、制約を伴わずに、装置において実行するためのアプリケーションを追加できる環境を与える。スマートホンプラットホームは、例えば、MICROSOFT(登録商標)SmartPhone、Symbian UIQ、及びLinuxを含む。
移動ハンドセットの第3カテゴリーとして、ランタイム環境(RTE)が装備されたフューチャーホンが存在する。このようなランタイム環境は、例えば、Java J2ME(Java2マイクロエディション)、及びBREW(バイナリ・ランタイム・エンビロンメント・フォー・ワイヤレス)環境を含む。RTEは、RTEのために生成されたアプリケーションの形式、即ちJ2MEの場合にはJavaアプレット、及びBrew環境の場合にはBrew認証アプリケーション、の形態の新たなファンクションをハンドセットが追加することを可能とする。これらのアプリケーションは、開いたプラットホームでランするものとは異なる。というのは、これらアプリケーションは、RTEに対して構築され(例えば、あるインスタンスでは、RTEにより適切な動作について認証されねばならない)、スマートホンのようなネイティブなOSに対して構築されない。従って、RTEイネーブル型フューチャーホンは、スマートホンに比して制限を有し、そのあるものは、技術的な理由についてであり、一方、他の制約は、商業的な動機によるものである。
例えば、ハードウェア装置製造者、ネットワークオペレータ、又はRTEベンダーは、アプリケーションプロバイダーと共に排他的又は半排他的なアレンジメントをして、アプリケーション及び/又はアプリケーションに対する更新をそれらの各々のハードウェア装置に与えることができる。一般に、RTEでランするアプリケーションは、完全な装置ファンクションとインターフェイスするそれらの能力に制限がある。例えば、ネットワークスタックの制御、又は、装置の周辺記憶機器の制御を可能とするAPI(アプリケーションプログラミングインターフェイス)は、RTEからアクセスできないことがある。これは、時々、ネイティブコンピューティング環境内のそれ自身の「サンドボックス(sandbox)」において動作するRTEとして説明される。これに比して、開いたプラットホーム(例えば、SmartPhone)では、各実行可能ファイルがそれ自身のプロセスにおいてランすることができ、一般に、このような開いたプラットホームのオペレーティングシステムは、全ての装置ファンクションを、ラン中の各プロセスにさらすことができる。更に、ある環境(Brewがその一例)では、RTEアプリケーションをネットワークにわたってのみ追加することが許され、アプリケーションが記憶カードにより装置にロードされることが防止される。これは、ネットワークにわたってロードするために多量の帯域巾及び時間を必要とする大型のゲームのような大きなアプリケーションをロードするときに問題になり得る。
ここに述べるシステム及び方法は、閉じたプラットホームにファンクションを追加する手段を設けることにより既存の慣例の欠点を改善する。ここに例示する実施形態では、追加されるファンクションは、ハードウェア装置にPIDLとして与えられる。閉じたプラットホームは、「ランチャ」プログラムを含むように生成することができ、このプログラムは、上述した動的リンカー/ローダー及びPIDLスタブファイルを、PIDKと協働するアプリケーションと共に備えている。このランチャプログラムは、閉じた装置内のホストオペレーティングシステム向けに構築されその上で実行されると共に、出荷時に装置に常駐させることができる。ランチャアプリケーションとPIDLライブラリとの組み合せにより、装置の出荷時に新たなファンクションが存在しなくても、次のようにして、閉じた装置においてその新たなファンクションが動作することが可能となる。ランタイムにおいて、PIDLが装置で使用できるようにされ、ランチャアプリケーションがスタートされる。スタブファイルからの情報を使用して、ランチャアプリケーション内の動的リンカー/ローダーは、ハードウェア装置に常駐してその装置のOSでランする協働するランチャプログラムにPIDLをロードし、リンクし、結合させるように働くことができる。それ故、PIDL内の全てのファンクションを、装置内の実行中のプログラムにさらし、閉じた装置に新たなファンクションを使用できるようにするという望みの結果を達成することができる。この点について、PIDL側では、課せられたハードウェア装置の制約を歩進させると共に、動的な実行をなすように動作する(上述したように)。
「ランチャ」アプリケーションは、それ自身が、一連のファンクションを与えてもよく、その動作について、PIDLの存在に依存しないことを理解されたい。同様に、同じランチャアプリケーションが、そのランチャアプリケーションとコンパイルされるスタブが個別のPIDLライブラリに各々設けられた、非常に多くの異なる形式の新たなファンクションをイネーブルすることもできる。このような実施形態では、変更したファンクションを動的に追加できる一種のランタイム環境をシミュレーションすることができる。
例えば、ランチャアプリケーションは、ソフトウェアゲームコンソール、及び、一又は複数のゲームを含んでもよい。各異なるゲームに対して1つのPIDLというようにして、PIDLライブラリの形態で更に別のゲームが追加されてもよく、これらは、PIDLが装置にダウンロードされたときにランチャアプリケーションを通して再生できる。或いは、ランチャアプリケーションは、SMSのような基本的なメッセージングファンクションを与えてもよい。更に別のファンクション、例えば、eメール又はマルチメディアメッセージング、ビデオ及びオーディオプレーヤ、ブラウジングファンクション、ファイルビューイング、フォトアルバム、PIM(パーソナル情報マネージメント)、及び他の形式のファンクションを、ランチャと相互動作するPIDLライブラリとして装置に展開することができる。
ここに例示する別の実施形態では、閉じた装置は、PIDLライブラリの特定セットを認識するように各々構築された2つ以上の「ランチャ」アプリケーションと共に出荷されてもよい。このように、アドオン機能の範囲を顕著な仕方で拡張し編成することができる。
ここに述べる方法及びシステムは、これがなければ閉じたプラットホームであるプラットホームに使用されたときに既存の慣例を克服する。アフターマーケットソリューションを提供し得ると、装置ユーザには大きなユーティリティを、装置又はネットワークプロバイダーには売上増加の機会を与えることができる。この方法は、ファンクションを実行可能ファイルとして追加することを含まないので(例えば、PIDLライブラリは、データとして存在し、実行可能なプログラムとして存在しない)、プラットホームの「閉じていること(closed-ness)」を制御することができる。というのは、それが、装置のオペレーティングシステム向けに実行可能ファイルとして生成される通常のアプリケーションに対して閉じたままであるからである。装置プロバイダーは、与えられるべき付加的なファンクションの範囲を前もって決定することができる。というのは、PIDLスタブがランチャへとコンパイルされるファンクションしか動作しないからである。その結果、動的なセキュリティ及び商業的コントロールのセットを得ることができる。
ここに例示する実施形態では、PIDLは、ワイヤレス又はワイヤードネットワークにわたるダウンロードによるか、繋がれたPCからのデータ転送によるか、装置に挿入された記憶カードからのデータ転送によることを含む複数の仕方で装置に与えることができる。実行可能アプリケーションではなくPIDLオブジェクトとしてファンクションをロードすることの他の独自の利点は、デジタル権利マネージメント(Digital Rights management)(DRM)技術によりPIDLを保護できることである。データファイルとしてのPIDLは、実行可能プログラムとは異なり、DRM技術に従うことができる。この充分に確立されたセキュリティ構成は、商業的トランザクションのもとでファンクションを追加するときにオペレータ及びユーザの両方に融通性及び機密性を与える。
上述したように、PIDLオブジェクト及びリンキングスキームのプラットホーム独立特性と組み合わされたときには、装置メーカー又はネットワークプロバイダーは、全ての範囲の装置が異なるホストプラットホーム又はオペレーティングシステムを使用するときでも、それらの装置にわたって単一のPIDLオブジェクトとしてアドオン機能を与えることができる。各異なるプラットホームに対してアプリケーション又はライブラリをカスタマイズする必要性を回避し、全てのプラットホームにおいて等しく機能するプラットホーム独立の動的ライブラリ(PIDL)を単に与えることにより、スケールの効率及び経済性を実現するようにオペレータを配することができる。
また、閉じたプラットホーム(フューチャーホンのような)を参照して上述したこの方法及びシステムは、ランタイム環境(例えば、Java又はBrew)をサポートするプラットホームに使用することもできる。この構成は、装置がファンクションを追加するための2つの仕方を与える。即ち、アプレット又は認証されたアプリケーションをRTEで使用するためにダウンロードする従来の構成と、装置に常駐するランチャアプリケーションの制御のもとでPIDLライブラリとしてファンクションをロードする代替の態様がある。
互いに比較すると、PIDLベースのスキームは、従来のランタイム環境には存在し得ない追加特徴を与えることができる。換言すれば、ファンクションの複数の断片が、単一のランチャアプリケーション内に複数の個別のPIDLとして展開されたときに、それらを同時にランすることができる。この状況において、PIDL実施形態では、PIDLファンクションが共通のランチャプロセスのもとで実行でき、従って、同時に使用することができる。更に、PIDLローディングアプローチでは、ファンクションを装置にロードする手段に相当の柔軟性を得ることができ、これは、あるランタイム環境(例えば、Brew)のもとでは許されていない、記憶カードからロードすることを含む。DRMの状況において、DRMは、PIDLデータライブラリを展開するときに実現することができ、これは、実行可能アプリケーション又はアプレットをランタイム環境に展開するときには利用できない技術である。また、もし希望があれば、装置又はネットワークプロバイダーは、追加されるファンクションを、装置と共に出荷されるランチャアプリケーションにより認識されるファンクションに限定することもできる。
構築タイムにランチャが含められる厳密に閉じた環境とは異なり、ランタイム環境(RTE)を有する装置は、ランチャアプリケーションをアフターマーケットの手続としてダウンロードできる利点を有する。このように展開されるときには、上述した動的ライブラリ(DL)ベースのスキームをRTEと共存させながら、RTEがそれ自身では与えられない上述の利益を享受することができる。より詳細には、DLライブラリは、RTEを経てアクセスできない装置ファンクション及びAPI(記憶カードのような)にアクセスすることができる。従って、このような構成では、ランチャアプリケーションは、例示的通信ネットワークを介して装置RTEへダウンロードされ、そこで、ランチャがプロキシとして働いて、記憶カードのような他の手段により更に別の機能を追加することが可能となる。同様に、RTEは、アプリケーションがRTEのもとで実行するために最大サイズをしばしば課すことがある。この最大サイズは、より大きなプログラムを装置に展開できるようにするために回避され、これは、それ自体小さくて選択されたサイズ限界内にあるがその限界を越えるファンクションコードをDLライブラリに追加するランチャアプリケーションをダウンロードすることで行なわれる。DLライブラリは、RTEアプリケーションではなくバイナリデータオブジェクトとしてロードされるので、RTEサイズ限界はそれらに適用されない。
図13は、閉じたコンピューティング環境において動的な実行を実現するためにPIDLを取り扱うときに例示的コンピューティング環境により遂行される処理を示す。(閉じているが従来のランタイム環境が設けられた環境、及び開いたコンピューティング環境においても、同じ処理を遂行することができる。)図13に示すように、処理はブック1300で始まり、ここでは、ファンクションが、出荷時に装置(図示せず)に常駐する例示的ランチャアプリケーション内に設けられるもの、及び、アドオンファンクションとして設けることが可能なものに仕切られる。
ここに例示する実施形態では、図13に示すように、ブロック1320において、アドオンファンクションを含むPIDLライブラリオブジェクトを生成することができ、更に、ブロック1330において、スタブファイルがソースコードとして生成される。ブロック1310において、ブロック1300からの出荷時ファンクションを、スタブファイル1330及び動的リンカー/ローダーと一緒に含むランチャアプリケーションがコンパイルされ構築される。ブロック1340に示すように、装置が使用のために出荷されるときにランチャアプリケーションを装置に含ませることができる。
装置の出荷に続いて、ブロック1350において、アドオンファンクションを使用するための許可が与えられる。この許可は、装置を展開する環境に基づいて、商業的トランザクション又は他の基準を前提とできることが理解されよう。許可に続いて、PIDLライブラリは、ブロック1360において、装置メモリへのダウンロード、ネットワーク転送、又は装置に取り付けられた記憶装置又はカードからの供給を含む(それらに限定されないが)適切な手段により、装置に使用できるようにされる。次いで、ブロック1370において、装置に存在するランチャアプリケーションをランすることができる。そこから、ブロック1375において、PIDLオブジェクトが装置に使用できるかどうか決定するためのチェックを遂行することができる。このチェックは、ブロック1310においてコンパイルされたPIDLスタブファイルからの情報を使用して、ランチャアプリケーション内の動的リンカー/ローダーにより遂行することができる。ブロック1375におけるチェックが、PIDLが装置に使用できないことを示す場合には、処理はブロック1380へ進み、そこで、ランチャアプリケーションは、出荷時の装置のファンクションと同一のファンクションの範囲(即ち、PIDLに含まれた更に別のファンクションを除外する)で実行を継続する。
しかしながら、ブロック1375において、チェックが、PIDLライブラリが装置に使用できることを示す場合には、処理はブロック1390へ進み、そこで、PIDLがランチャアプリケーションにロードされ、リンクされ、結合される。このステップにより、ランチャアプリケーションからアクセスできるファンクションの範囲は、ブロック1395に示すように、PIDLに存在するファンクションを含むように拡張される。
図14は、ランチャアプリケーションのダウンロードにより付加的なファンクションを与えるときに遂行される処理を示す。このような処理は、開いた環境へダウンロードを行なうか、または、装置の既存のRTEに関連して動作するためにランチャアプリケーションをダウンロードする場合のように、例示的コンピューティング装置が出荷された後に起こり得る。また、このような処理は、ダウンロード動作に対して閉じたままであるか又は他のコンピューティングアプリケーション(例えば、ランチャとは別の)の追加に対して閉じたままである閉じた環境へアプリケーションをダウンロードする独特の事柄としても生じ得る。ランチャは、技術的又は商業的なコントロールの利用により、このように(例えば、ダウンロードするように)動作することができる。
図示されたように、処理はブロック1400において始まり、ここでは、プログラムが、ランチャアプリケーション及びアドオンファンクションに分割される。ここから、処理は、ブロック1415又は1405へ分岐する。ブロック1405では、アドオンファンクションのための動的ライブラリ(DL)オブジェクトが生成される。ブロック1415では、ランチャアプリケーション、リンカー/ローダー及びスタブファイルがコンパイルされ、構築される。ブロック1405から、処理は更に分岐する。ブロック1405から、処理はブロック1410へ進むことができ、ここでは、DLのスタブファイルがソースコードとして生成される。そこから、処理はブロック1425へ進み、そしてそこから更に進む。また、ブロック1405から、処理はブロック1445へ進むことができ、ここで、DLは、協働する装置(例えば、移動電話)に与えられる。ブロック1445から、処理は以下に述べるブロック1450へ進む。
ブロック1415から、処理はブロック1420へ進み、ここで、ランチャアプリケーションが装置へダウンロードされる。次いで、ブロック1425において、ダウンロードされたランチャアプリケーションが、それがダウンロードされた装置において動作することが許されるかどうか決定するためにチェックが行われる。ブロック1425におけるチェックが、ランチャアプリケーションが許可されなかったことを示す場合には、ブロック1440において処理が終了する。しかしながら、ブロック1425において、ランチャアプリケーションが装置で動作することが許可されたと決定された場合には、処理がブロック1430へ進み、ここで、ランチャアプリケーションがランされる。次いで、ブロック1435において、上述したようにブロック1445を経て装置にDLが使用できるかどうか決定するためのチェックが行われる。ブロック1435のチェックが、DLが装置に使用できないことを示す場合には、ランチャアプリケーションの範囲が出荷時のままとされ、DLにより与えられる付加的なファンクションへ拡張されない。しかしながら、ブロック1435において、DLが装置に使用できることをチェックが示す場合には、処理がブロック1450へ進み、ここで、リンカー/ローダーがDLをロードして、ラン中のアプリケーションと結合する。処理はブロック1455へ進み、そこから続けられる。次いで、ランチャアプリケーションの範囲が、ブロック1455においてDLファンクションを含むように拡張される。
図14に示す処理は、一つのランチャアプリケーションをダウンロードするか又は複数のランチャをダウンロードする際に適用されることが明らかであろう。このようなランチャは、ランチャアプリケーションの構築時に含ませることのできるライブラリスタブファイルに基づいて選択されたファンクションを追加するように動作できる。
要約すれば、ここに述べる装置及び方法は、種々のプラットホームを動作する異種のコンピューティング環境にわたって動作可能なプラットホーム独立のバイナリオブジェクトを提供する。しかしながら、本発明は、種々の変更や別の構造も受け容れることが理解されよう。本発明は、ここに述べる特定の構造に限定されるものではない。逆に、本発明は、本発明の範囲及び精神の中に包含される全ての変更、別の構造及び等効物を網羅するものとする。
また、本発明は、種々のコンピュータ環境(非ワイヤレス及びワイヤレスの両コンピュータ環境を含む)、部分的コンピューティング環境、及び実世界の環境において実施できることにも注意されたい。ここに述べる種々の技術は、ハードウェアでも、ソフトウェアでも、又はその両方の組み合せでも実施できる。好ましくは、これら技術は、プロセッサ、プロセッサにより読み取り可能な記憶媒体(揮発性及び不揮発性メモリ及び/又は記憶エレメントを含む)、少なくとも1つの入力装置、及び少なくとも1つの出力装置を含むプログラム可能なコンピュータを維持するコンピューティング環境において実施される。種々のインストラクションセットと協働するコンピューティングハードウェアロジックは、上述したファンクションを遂行すると共に出力情報を生成するようにデータに適用される。出力情報は、一又は複数の出力装置に適用される。例示的コンピューティングハードウェアにより使用されるプログラムは、コンピュータシステムと通信するために高レベル手順又はオブジェクト指向のプログラミング言語を含む種々のプログラミング言語で実装するのが好ましい。ここに例示する装置及び方法は、もし希望であれば、アッセンブリ言語又はマシン言語で実装することができる。いずれにせよ、言語は、コンパイル又はインタープリトされた言語でよい。このような各々のコンピュータプログラムは、汎用又は特殊目的のプログラム可能なコンピュータにより読み取ることのできる記憶媒体又は装置(例えば、ROM又は磁気ディスク)に記憶されて、上述した手順を遂行するようにコンピュータにより記憶媒体又は装置が読み取られたときにコンピュータを構成及び動作するのが好ましい。また、装置は、コンピュータプログラムと共に構成されたコンピュータ読み取り可能な記憶媒体として実装されると捉えることもでき、このように構成される記憶媒体は、特定のそして予め定義された仕方でコンピュータを動作させる。
本発明の実施形態を以上に詳細に述べたが、当業者であれば、本発明の新規な技術及び効果から実質上逸脱せずに複数の別の変形例も可能であることが容易に明らかであろう。従って、このような全ての変形例は、本発明の範囲内に包含されるものとする。本発明は、特許請求の範囲に規定される。
ここに述べるシステム及び方法の実施形態に基づく例示的コンピューティング環境のブロック図である。 例示的データ通信アーキテクチャの例示的コンポーネントの協働を示すブロック図である。 動的リンキングアーキテクチャのブロック図である。 異種のコンピューティングプラットホームを有する第1オペレーティングシステムにわたって同じライブラリをリンクするときの動的リンキングアーキテクチャのブロック図である。 異種のコンピューティングプラットホームを有する第2オペレーティングシステムにわたって同じライブラリをリンクするときの動的リンキングアーキテクチャのブロック図である。 ここに述べるシステム及び方法に基づいて複数のプラットホームをサポートする複数のオペレーティングシステムのブロック図である。 ここに述べるシステム及び方法に基づく例示的プラットホーム独立リンキングアーキテクチャの例示的コンポーネント間の相互作用を示すブロック図である。 ここに述べるシステム及び方法に基づくメインアプリケーションプログラムと動的ライブラリとの間の相互作用を示すブロック図である。 ここに述べるシステム及び方法に基づいて例示的プラットホーム独立リンキングアーキテクチャにより遂行される処理を示すフローチャートである。 動的リンキングを遂行するネイティブなファシリティをもたないコンピューティング環境においてプラットホーム独立のバイナリオブジェクトを使用するときに遂行される処理を示すフローチャートである。 制約のあるコンピューティング環境においてプラットホーム独立のバイナリオブジェクトを使用するときに遂行される処理を示すフローチャートである。 制約のあるコンピューティング環境において協働するコンピューティングアプリケーションの種々のインスタンスを実行するためにプラットホーム独立のバイナリオブジェクトを使用するときに実施される処理を示すフローチャートである。 アドオンファンクションを与える閉じたハードウェア環境で動作するプラットホーム独立のバイナリオブジェクトを使用するときに遂行される処理を示すフローチャートである。 ここに述べるシステム及び方法の実施形態に基づいて制約のあるコンピューティング環境に付加的なファンクションを与えるためにランチャアプリケーションのダウンロードを介して遂行される処理を示すフローチャートである。
符号の説明
100・・・コンピューティングシステム(コンピューティング環境)、105・・・システムバス、110・・・中央処理ユニット(CPU)、112・・・相互接続部、115・・・コプロセッサ、120・・・メモリコントローラ、125・・・ランダムアクセスメモリ(RAM)、130・・・リードオンリメモリ(ROM)、135・・・周辺機器コントローラ、140・・・プリンタ、145・・・キーボード、150・・・マウス、155・・・データ記憶ドライブ、160・・・通信ネットワーク、163・・・ディスプレイコントローラ、165・・・ディスプレイ、180・・・コンピューティングプログラム、200・・・ネットワーク構成のコンピューティング環境、205・・・サーバー、210・・・タブレットパーソナルコンピュータ、215・・・移動電話、220・・・電話、225・・・パーソナルデジタルアシスタント、

Claims (77)

  1. コンピューティング環境内で動作するソフトウェアプラットホーム上でバイナリオブジェクトファイルを動的にロードしてリンクするためのシステムであって、
    動的ライブラリ(DL)と、
    前記DLに対してソースコードとして生成されるスタブファイルと、
    前記ソフトウェアプラットホームで実行されるバイナリ実行可能プログラムを生成し、前記プログラムが前記DLにアクセスしてそれと協働するのを許すように、協働するコンピューティングアプリケーションのソースコード及び前記スタブファイルのソースコードでコンパイルされ構築される動的リンカー/ローダーと、
    を備えるシステム。
  2. 前記DLは、選択された構造を有するバイナリオブジェクトファイルを含む、請求項1に記載のシステム。
  3. 前記DLの選択された構造は、実行可能・リンキングフォーマット(ELF)、及びポータブル実行可能(PE)フォーマットのいずれかを含む、請求項2に記載のシステム。
  4. 前記動的リンカー/ローダーは、実行のための協働するコンピューティングアプリケーションを含むバイナリ実行可能プログラムをロードする間に前記ソフトウェアプラットホームにDLをロードするようにDLに対して動作する、請求項2に記載のシステム。
  5. 前記動的リンカー/ローダーは、前記DLオブジェクトファイルのサイズを決定する、請求項4に記載のシステム。
  6. 前記動的リンカー/ローダーは、前記ソフトウェアプラットホームにDLオブジェクトをロードするようにメモリを割り当てる、請求項5に記載のシステム。
  7. 前記動的リンカー/ローダーは、前記バイナリ実行可能プログラムをロードする間に前記協働するコンピューティングアプリケーションにDLをリンクするようにDLに対して動作する、請求項4に記載のシステム。
  8. 前記DLにおいて動作し、前記DLを協働するコンピューティングアプリケーションと動的にリンクするのに使用するために、エクスポートされるシンボル及びプロパティを記述するソースコードとして前記スタブファイルを生成するためのパーザを更に備える、請求項2に記載のシステム。
  9. バイナリオブジェクトファイルの再コンパイル又は再構築を必要とせずに、定義されたプロセッサアーキテクチャにおいて実行される複数のソフトウェアプラットホーム及びオペレーティングシステムにわたって単一のバイナリオブジェクトファイルが動的にロードされリンクされる、請求項2に記載のシステム。
  10. 前記DL、DLスタブファイルのソースコード、及び動的リンカー/ローダーのソースコードと協働するコンピューティングアプリケーションのソースコードが、前記複数のソフトウェアプラットホームのうちの選択されたソフトウェアプラットホームに対するバイナリ実行可能プログラムへとコンパイルされリンクされる、請求項9に記載のシステム。
  11. 前記DLは、そのDLのバイナリフォーマットをネイティブにサポートしないオペレーティングシステムで動作されるコンピューティング環境のコンピューティングアプリケーションへ動的にロードされリンクされる、請求項4又は7に記載のシステム。
  12. 前記DLは、バイナリオブジェクトの動的リンキングを遂行するためのネイティブな動的リンキングメカニズムをもたないオペレーティングシステムで動作される制約のあるコンピューティング環境のコンピューティングアプリケーションへ動的にロードされリンクされる、請求項1に記載のシステム。
  13. 前記協働するコンピューティングアプリケーションへのDLアクセスを与えるインターフェイスモジュールを更に備える、請求項2に記載のシステム。
  14. 前記インターフェイスモジュールは、前記DLが前記協働するコンピューティングアプリケーションにおける選択されたファンクションをコールするのを許すソースコードを備える、請求項13に記載のシステム。
  15. 前記インターフェイスモジュールのソースコードは、前記協働するコンピューティングアプリケーションのアプリケーションプログラミングインターフェイスをパーズすることにより生成される、請求項14に記載のシステム。
  16. 前記インターフェイスモジュールのソースコードは、前記DLによりインポートされるシンボルを識別するようにDLバイナリオブジェクトファイルをパーズすることにより生成される、請求項14に記載のシステム。
  17. 前記インターフェイスモジュールのソースコード、前記協働するコンピューティングアプリケーションのソースコード、前記スタブファイルのソースコード、及び前記動的リンカー/ローダーのソースコードは、前記ソフトウェアプラットホームに対してコンパイルされる、請求項14に記載のシステム。
  18. 前記動的リンカー/ローダーは、前記協働するコンピューティングアプリケーション及び前記DLを前記ソフトウェアプラットホーム上のラン可能なプロセスに結合するようにシンボルの分析及びリロケーションを取り扱う、請求項7に記載のシステム。
  19. 前記ラン可能なプロセスは、複数の動的ライブラリと協働してそれに結合するためのコンピューティングアプリケーションを含む、請求項18に記載のシステム。
  20. 前記動的リンカー/ローダーは、前記ファイルを前記協働するコンピューティングアプリケーションにリンクするときに、DLファイルと非DLファイルとを区別する、請求項18に記載のシステム。
  21. 前記ラン可能なプロセスは、前記協働するコンピューティングアプリケーションを、前記DLにリンクすると共に、前記ソフトウェアプラットホームに対してネイティブな動的にリンクされたライブラリにリンクする、請求項20に記載のシステム。
  22. バイナリコード及び/又はデータを含むDLを生成するようにライブラリソースコードがコンパイルされる、請求項1に記載のシステム。
  23. 前記DLは、前記ソフトウェアプラットホーム上で実行されるバイナリ実行可能プログラムに動的にロードされリンクされ、更に、前記ライブラリソースコードは、前記ソフトウェアプラットホームのプログラミング制約に違反するコードを含む、請求項22に記載のシステム。
  24. 前記プログラミング制約は、グローバル変数の使用に関する制約、又は書き込み可能な静的変数の使用に関する制約、又はポインタ変数の静的初期化に関する制約を含む、請求項23に記載のシステム。
  25. 前記動的リンカー/ローダーは、前記DLがリンクされるプログラムのロード中に前記ソフトウェアプラットホームに前記DLオブジェクトをロードするようにメモリブロックを割り当てる、請求項24に記載のシステム。
  26. 前記動的リンカー/ローダーは、前記ライブラリにおいて定義されたグローバル変数又は書き込み可能な静的変数の範囲を、前記DLにより占有されるメモリブロックに拘束するように動作する、請求項25に記載のシステム。
  27. 前記ライブラリソースコードは、コードの複数の実行インスタンス又は繰り返し実行を制約する仕方でデータを取り扱い且つデータにアクセスファンクションを与えるためのコードを含み、
    前記動的リンカー/ローダーは、前記ライブラリのインスタンスを、動的に割り当てられたメモリブロックにロードし、ここでは、前記ライブラリコードにおいて定義されたデータ変数の範囲が前記メモリブロックに拘束される、請求項17に記載のシステム。
  28. 同じライブラリの複数の非衝突インスタンスが前記コンピューティング環境において実行可能である、請求項27に記載のシステム。
  29. 前記DLにより使用されるデータは、前記コード内に定義されたグローバル変数又は静的変数により参照される、請求項27に記載のシステム。
  30. 単一のコンピューティング環境プロセス内に複数の実行インスタンスを許すために非オブジェクト指向のコードをロードする、請求項27に記載のシステム。
  31. ライブラリデータの複数のセットが単一のコンピューティング環境プロセス内で同時に動作して、各ライブラリデータセット間で衝突が軽減され及び/又は除去されるようにする、請求項30に記載のシステム。
  32. 単一のコンピューティング環境プロセス内にコードの繰り返し実行を許すために非オブジェクト指向のコードをロードする、請求項27に記載のシステム。
  33. 複数のプロセスをサポートしないコンピューティング環境においてコードの複数の実行インスタンス及び繰り返し実行を許すためにコードをロードする、請求項27に記載のシステム。
  34. 前記コンピューティング環境は、非常駐の実行可能プログラムを前記コンピューティング環境に展開することに関して制約を受け、更に、前記協働するコンピューティングアプリケーションは、前記DLを実行中のランチャアプリケーションに動的にリンクすることにより、前記制約のあるコンピューティング環境に使用できるファンクションを拡張するよう動作できるランチャアプリケーションを備える、請求項2に記載のシステム。
  35. 前記制約のあるコンピューティング環境は、前記コンピューティング環境に対しネイティブな実行可能プログラムの追加を許さない、請求項34に記載のシステム。
  36. 前記コンピューティング環境は、前記コンピューティング環境において実行できるプログラムの最大サイズについて制約を課する、請求項34に記載のシステム。
  37. 前記コンピューティング環境は、ランタイム環境(RTE)をサポートする、請求項34に記載のシステム。
  38. 前記RTE内でランするプログラムは、前記ネイティブなコンピューティング環境に使用できる一又は複数のファンクションへの制約のあるアクセスを有する、請求項37に記載のシステム。
  39. 前記RTEは、前記RTEにより認証されたプログラムしかランしないように動作を制約する、請求項37に記載のシステム。
  40. 前記RTEは、Java2モバイル・エディション(J2ME)RTE、及びバイナリ・ランタイム・エンビロンメント・フォー・ワイヤレス(BREW)RTEのいずれかを含む、請求項37に記載のシステム。
  41. 前記ランチャモジュールは、前記コンピューティング環境においてネイティブなコンピューティングアプリケーションとして動作するように書き込まれる、請求項34に記載のシステム。
  42. 前記ランチャは、前記コンピューティング環境の前記ランタイム環境内でコンピューティングアプリケーションとして動作するように書き込まれる、請求項37に記載のシステム。
  43. 少なくとも2つのランチャモジュールを更に備える、請求項41に記載のシステム。
  44. 前記DLは、フラッシュメモリユニット、固定メモリユニット、及びマイクロドライブのいずれかを含む前記コンピューティング環境から物理的に離れた記憶媒体に記憶される、請求項34に記載のシステム。
  45. 前記ランチャアプリケーションを含む前記バイナリ実行可能プログラムは、フラッシュメモリユニット、固定メモリ媒体ユニット、及びマイクロドライブのいずれかを含む前記コンピューティング環境から物理的に離れた記憶媒体に記憶される、請求項34に記載のシステム。
  46. 前記DLは、前記制約のあるコンピューティング環境へのコンテンツの安全な配布を促進するようにデジタル権利マネージメント構成で使用される、請求項34に記載のシステム。
  47. コンピューティング環境内で動作するソフトウェアプラットホーム上でバイナリオブジェクトを一体化する方法であって、
    ライブラリソースコードを用意するステップと、
    選択されたフォーマットをもつオブジェクトファイルを含むコードライブラリ(CL)を生成するように前記ライブラリソースコードをコンパイルするステップと、
    前記CLのためのスタブファイルをソースコードとして生成するステップと、
    動的リンカー/ローダーのソースコードを、前記ライブラリと協働するコンピューティングアプリケーションのソースコード、及び前記スタブファイルのソースコードと一緒にコンパイル及び構築して、前記ソフトウェアプラットホームで実行されるバイナリ実行可能プログラムを生成するステップと、
    前記ソフトウェアプラットホーム上で実行するために前記プログラムがロードされるときに、前記CLを動的にロードして前記協働するコンピューティングアプリケーションとリンクするステップと、
    を備える方法。
  48. ELFファイルフォーマット又はPEファイルフォーマットを含むオブジェクトファイルフォーマットを選択するステップを更に備える、請求項47に記載の方法。
  49. 前記CLを協働するコンピューティングアプリケーションと動的にリンクするのに使用するために、エクスポートされるシンボル及びプロパティを記述するソースコードとして前記スタブファイルを生成するように前記CLオブジェクトをパーズするステップを更に備える、請求項48に記載の方法。
  50. 前記CLを、ロード時に、コンピューティング環境のメモリに動的にロードするように、前記動的リンカー/ローダーによりメモリブロックを割り当てるステップを更に備える、請求項47に記載の方法。
  51. 協働するコンピューティングアプリケーションにより使用するためにCLシンボルを分析しリロケーションするように前記CLをリンクするステップを更に備える、請求項50に記載の方法。
  52. 前記協働するコンピューティングアプリケーションにおいて選択されたファンクションをコールするためのライブラリアクセスを与えるソースコードとしてインターフェイスモジュールを用意するステップを更に備える、請求項47に記載の方法。
  53. 前記インターフェイスモジュールのソースコード、前記協働するコンピューティングアプリケーションのソースコード、前記スタブファイルのソースコード、及び前記動的リンカー/ローダーのソースコードを、前記ソフトウェアプラットホームで実行されるバイナリ実行可能プログラムへとコンパイルするステップを更に備える、請求項52に記載の方法。
  54. 前記バイナリオブジェクトファイルを再コンパイル又は再構築する必要なく、定義されたプロセッサアーキテクチャで実行される複数のソフトウェアプラットホーム及びオペレーティングシステムにわたって単一のバイナリオブジェクトファイルを一体化するステップを更に備える、請求項47に記載の方法。
  55. 前記CLと協働するコンピューティングアプリケーションのソースコード、スタブファイルのソースコード、及び前記動的リンカー/ローダーのソースコードを、前記複数のソフトウェアプラットホームのうちの選択された1つに対するバイナリ実行可能プログラムへとコンパイルしリンクするステップを更に備える、請求項54に記載の方法。
  56. 前記コンピューティング環境は、前記選択されたオブジェクトフォーマットをネイティブにサポートしない、請求項47に記載の方法。
  57. バイナリオブジェクトの動的リンキングを遂行するためのネイティブな動的リンキングメカニズムをもたないオペレーティングシステムで動作される制約のあるコンピューティング環境において前記CLをロードしてそれをコンピューティングアプリケーションにリンクするステップを更に備える、請求項47に記載の方法。
  58. 前記ライブラリソースコードは、前記ソフトウェアプラットホームのプログラミング制約に違反するコードを含む、請求項50に記載の方法。
  59. 前記プログラミング制約は、グローバル変数の使用に関する制約、書き込み可能な静的変数の使用に関する制約、及びポインタ変数の静的初期化に関する制約のいずれかを含む、請求項58に記載の方法。
  60. 前記ライブラリにおいて定義されたグローバル変数又は書き込み可能な静的変数の範囲を、前記CLにより占有されるメモリブロックに拘束するステップを更に備える、請求項59に記載の方法。
  61. 前記ライブラリソースコードは、コードの複数の実行インスタンス又は繰り返し実行を制約する仕方でデータを取り扱い且つデータへのアクセスファンクションを与えるためのコードを含み、
    前記方法は、更に、前記ライブラリのインスタンスを、前記動的リンカー/ローダーにより、動的に割り当てられたメモリブロックにロードするステップを備え、ここでは、前記ライブラリコードにおいて定義されたデータ変数の範囲が前記メモリブロックに拘束される、請求項47に記載の方法。
  62. 単一のコンピューティング環境プロセス内で実行されるべき同じライブラリの複数の非衝突インスタンスをロードするステップを更に備える、請求項61に記載の方法。
  63. ライブラリデータの複数のセットが単一のコンピューティング環境プロセス内で同時に動作して、各ライブラリデータセット間で衝突が軽減され及び/又は除去されるようにする、請求項62に記載の方法。
  64. 単一のコンピューティング環境プロセス内でコードの実行を繰り返すために、非オブジェクト指向のコードをロードするステップを更に備える、請求項61に記載の方法。
  65. 前記コンピューティング環境は、複数のプロセスをサポートしない、請求項62又は64に記載の方法。
  66. 前記コンピューティング環境は、非常駐の実行可能プログラムを前記コンピューティング環境に展開することに関して制約を受け、
    前記方法は、更に、前記CLを、前記協働するコンピューティングアプリケーション内に含まれた実行中のランチャアプリケーションと動的にリンクすることにより、前記制約のあるコンピューティング環境に使用できるファンクションを拡張するステップを備える、請求項47に記載の方法。
  67. 前記コンピューティング環境は、一又は複数の制約を受け、これら制約は、
    前記コンピューティング環境がネイティブな実行可能プログラムの追加に対して閉じていること、
    前記コンピューティング環境が、実行を、プログラムサイズ限界内に入るプログラムに制限すること、
    前記コンピューティング環境がランタイム環境(RTE)を有し、このRTE内でランするプログラムが、ネイティブなコンピューティング環境に使用できる一又は複数のファンクションへの制約されたアクセスを有すること、
    前記コンピューティング環境のRTEが、そのRTEに対して認証されたプログラムしかランしないように動作を制約すること、及び
    前記コンピューティング環境が動的リンキングを許さないこと、
    の一又は複数を含む請求項66に記載の方法。
  68. 定義されたプロセッサアーキテクチャで動作する異種のコンピューティングソフトウェア環境にわたって使用するためのコンピューティングライブラリを配布する方法であって、
    選択された構造を有するバイナリオブジェクトファイルとして動的ライブラリ(DL)を生成するステップと、
    前記DLに対してソースコードとしてスタブファイルを生成するステップと、
    動的リンカーのソースコードを、前記DLスタブファイルのソースコード、及び少なくとも1つのコンピューティング環境で動作できる協働するコンピューティングアプリケーションのソースコードと一緒にコンパイルすることにより、バイナリ実行可能プログラムを構築するステップと、
    通信ネットワーク及び記憶媒体のいずれかを含む入力ソースから前記異種のコンピューティング環境へ前記DLを通信するステップと、
    を備える方法。
  69. 少なくとも1つのDLと協働する前記コンピューティングアプリケーションの新たなバージョンを通信するステップを更に備える、請求項68に記載の方法。
  70. 前記コンピューティングアプリケーションと協働する前記DLの新たなバージョンを通信するステップを更に備える、請求項68に記載の方法。
  71. コンピューティング環境で使用するためのコンピューティングライブラリを配布するもので、前記コンピューティング環境は、一又は複数の制約を受け、これらの制約は、
    前記コンピューティング環境がネイティブな実行可能プログラムの追加に対して閉じていること、
    前記コンピューティング環境が、実行を、プログラムサイズ限界内に入るプログラムに制限すること、
    前記コンピューティング環境がランタイム環境(RTE)を有し、このRTE内でランするプログラムが、ネイティブなコンピューティング環境に使用できる一又は複数のファンクションへの制約されたアクセスを有すること、
    前記コンピューティング環境のRTEが、そのRTEに対して認証されたプログラムしかランしないように動作を制約すること、及び
    前記コンピューティング環境が動的リンキングを許さないこと、
    の一又は複数を含む請求項68に記載の方法。
  72. プロキシとして動作できるコンピューティング装置に、協働するランチャアプリケーションをダウンロードし、通信ネットワーク及び記憶媒体のいずれかを含む入力ソースからそのコンピューティング装置に使用できる動的ライブラリへの前記ランチャプログラムによるアクセスを許すステップを更に備える、請求項71に記載の方法。
  73. スタブファイルが前記ランチャアプリケーションでコンパイルされる動的ライブラリが前記コンピューティング装置に使用できるようになったときに、前記ランチャアプリケーションの範囲を、協働する動的ライブラリの付加的なファンクションを含むように拡張するステップを更に備える、請求項72に記載の方法。
  74. 前記協働するコンピューティングアプリケーションは、コンピューティング装置をエンドユーザに販売するために出荷する前に、コンピューティング装置のコンピューティング環境に対して展開される、請求項68に記載の方法。
  75. 前記協働するコンピューティングアプリケーションは、コンピューティング装置をエンドユーザに販売するために出荷した後に、コンピューティング装置のコンピューティング環境に対して展開される、請求項68に記載の方法。
  76. 前記コンピューティング装置は、移動電話又はワイヤレスイネーブル型ハンドセットである、請求項74又は75に記載の方法。
  77. 前記DLは、前記コンピューティング環境へのコンテンツの安全な配布を促進するようにデジタル権利マネージメント構成で使用される、請求項68に記載の方法。
JP2007535225A 2004-10-12 2005-09-21 プラットホーム独立の動的リンキング Expired - Fee Related JP5090169B2 (ja)

Applications Claiming Priority (11)

Application Number Priority Date Filing Date Title
US10/965,361 2004-10-12
US10/965,361 US20060080680A1 (en) 2004-10-12 2004-10-12 Platform independent dynamic linking
US10/964,272 US20060080683A1 (en) 2004-10-12 2004-10-12 Mechanism to circumvent restrictions of pre-written code components
US10/964,232 2004-10-12
US10/964,231 US7444625B2 (en) 2004-10-12 2004-10-12 Concurrent code loading mechanism
US10/964,232 US7533376B2 (en) 2004-10-12 2004-10-12 Dynamic linking in constrained environment
US10/964,231 2004-10-12
US10/964,272 2004-10-12
US10/964,315 US20060080681A1 (en) 2004-10-12 2004-10-12 Mechanism to extend functionality in a restricted computing environment
US10/964,315 2004-10-12
PCT/GB2005/003617 WO2006040505A1 (en) 2004-10-12 2005-09-21 Platform-independent dynamic linking

Publications (2)

Publication Number Publication Date
JP2008516323A true JP2008516323A (ja) 2008-05-15
JP5090169B2 JP5090169B2 (ja) 2012-12-05

Family

ID=35478278

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007535225A Expired - Fee Related JP5090169B2 (ja) 2004-10-12 2005-09-21 プラットホーム独立の動的リンキング

Country Status (6)

Country Link
US (1) US20060080682A1 (ja)
EP (1) EP1810134B1 (ja)
JP (1) JP5090169B2 (ja)
KR (1) KR20070062606A (ja)
AT (1) ATE509312T1 (ja)
WO (1) WO2006040505A1 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010244516A (ja) * 2009-04-03 2010-10-28 Lsi Corp ダイナミックライブラリを有するインターフェースを単純化するための方法
WO2022102990A1 (ko) * 2020-11-12 2022-05-19 삼성전자주식회사 전자 장치 및 이의 제어 방법

Families Citing this family (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8026161B2 (en) 2001-08-30 2011-09-27 Micron Technology, Inc. Highly reliable amorphous high-K gate oxide ZrO2
US20060080680A1 (en) * 2004-10-12 2006-04-13 Majid Anwar Platform independent dynamic linking
US20060080681A1 (en) * 2004-10-12 2006-04-13 Majid Anwar Mechanism to extend functionality in a restricted computing environment
US7687409B2 (en) 2005-03-29 2010-03-30 Micron Technology, Inc. Atomic layer deposited titanium silicon oxide films
US9063725B2 (en) * 2005-06-24 2015-06-23 Oracle International Corporation Portable management
US9542175B2 (en) * 2005-06-24 2017-01-10 Oracle International Corporation Continuous deployment
US9075596B2 (en) * 2005-06-24 2015-07-07 Oracle International Corporation Deployment
US7886018B2 (en) 2005-06-24 2011-02-08 Oracle International Corporation Portable metadata service framework
US20070250828A1 (en) * 2005-11-16 2007-10-25 Tseitlin Ariel D Portable libraries
US20070226731A1 (en) * 2005-11-16 2007-09-27 Tseitlin Ariel D Modularity
US7709402B2 (en) 2006-02-16 2010-05-04 Micron Technology, Inc. Conductive layers for hafnium silicon oxynitride films
US20090199171A1 (en) * 2006-03-01 2009-08-06 Nokia Corporation Code Size Reduction by Outlining Specific Functions in a Library
JP4979287B2 (ja) * 2006-07-14 2012-07-18 富士ゼロックス株式会社 画像処理装置及びプログラム
GB2442495B (en) * 2006-10-02 2009-04-01 Transitive Ltd Method and apparatus for handling dynamically linked function cells with respect to program code conversion
KR100866211B1 (ko) 2007-01-03 2008-10-30 삼성전자주식회사 프로그램 개발 장치 및 방법과 이를 이용한 프로그램업데이트 방법
CN101546260B (zh) 2008-03-28 2012-07-11 国际商业机器公司 用于重构面向服务的应用的方法及其设备
US20090271436A1 (en) * 2008-04-23 2009-10-29 Josef Reisinger Techniques for Providing a Virtual-World Object Based on a Real-World Object Description
US8327316B2 (en) * 2008-09-30 2012-12-04 Ics Triplex Isagraf Inc. Compilation model
US8529346B1 (en) * 2008-12-30 2013-09-10 Lucasfilm Entertainment Company Ltd. Allocating and managing software assets
US20110113409A1 (en) * 2009-11-10 2011-05-12 Rodrick Evans Symbol capabilities support within elf
US8516455B2 (en) * 2011-06-14 2013-08-20 International Business Machines Corporation Dynamic loading of kernel extensions
KR101877841B1 (ko) * 2011-08-30 2018-08-10 대우조선해양 주식회사 아비바 마린(Aveva Marine) 캐드 시스템 내의 Add-in 프로그램 개발 방법
US9081594B1 (en) * 2011-09-30 2015-07-14 Emc Corporation Managing data storage systems in virtual systems based on storage awareness
US8615745B2 (en) 2011-10-03 2013-12-24 International Business Machines Corporation Compiling code for an enhanced application binary interface (ABI) with decode time instruction optimization
US8756591B2 (en) 2011-10-03 2014-06-17 International Business Machines Corporation Generating compiled code that indicates register liveness
US8612959B2 (en) 2011-10-03 2013-12-17 International Business Machines Corporation Linking code for an enhanced application binary interface (ABI) with decode time instruction optimization
US9436487B2 (en) * 2012-03-29 2016-09-06 Adobe Systems Incorporated Method and apparatus for creating a platform agnostic application file
US9569184B2 (en) * 2012-09-05 2017-02-14 Microsoft Technology Licensing, Llc Generating native code from intermediate language code for an application
US10481918B1 (en) * 2012-09-28 2019-11-19 Emc Corporation Execution path determination in a distributed environment
KR101649403B1 (ko) * 2014-04-25 2016-08-18 한양대학교 산학협력단 어플리케이션 로딩 장치 및 방법
US20160085604A1 (en) * 2014-09-24 2016-03-24 Unisys Corporation Dynamic method invocation via proxy framework
US10684984B2 (en) 2016-12-21 2020-06-16 Intel Corporation Computing devices and server systems with processing cores having different instruction set architectures
US10713213B2 (en) * 2016-12-21 2020-07-14 Intel Corporation Systems and methods for multi-architecture computing
US10552207B2 (en) 2016-12-21 2020-02-04 Intel Corporation Systems and methods for multi-architecture computing including program stack translation
US11275709B2 (en) 2017-05-02 2022-03-15 Intel Corporation Systems and methods for multi-architecture computing
US10606611B2 (en) 2017-06-02 2020-03-31 Apple Inc. Techniques for performing dynamic linking
CN107295573B (zh) * 2017-07-12 2019-08-02 网宿科技股份有限公司 一种业务应用流量的引导方法和系统
US10459825B2 (en) * 2017-08-18 2019-10-29 Red Hat, Inc. Intelligent expansion of system information collection
US10474479B1 (en) 2018-06-03 2019-11-12 Apple Inc. Preventing framework conflicts for multi-OS applications
JP6950665B2 (ja) * 2018-11-02 2021-10-13 横河電機株式会社 エンジニアリング装置、エンジニアリング装置の制御方法及びプログラム
US10908892B2 (en) * 2019-03-12 2021-02-02 International Business Machines Corporation Generating and deploying object code files compiled on build machines
CN111913762B (zh) * 2020-08-20 2024-04-19 北京机电工程研究所 一种预留运行内存空间的dsp动态加载方法
US11340914B2 (en) 2020-10-21 2022-05-24 Red Hat, Inc. Run-time identification of dependencies during dynamic linking
CN115082058B (zh) * 2022-07-25 2022-11-18 上海富友支付服务股份有限公司 一种基于动态控制的虚拟账户交易管理方法及系统
CN115390945B (zh) * 2022-09-06 2023-05-23 北京领雾科技有限公司 应用程序的运行方法、装置、电子设备及可读存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08339296A (ja) * 1995-02-27 1996-12-24 Internatl Business Mach Corp <Ibm> 動的リンク・ライブラリをプログラムにリンクする方法
JPH10228381A (ja) * 1997-01-27 1998-08-25 Internatl Business Mach Corp <Ibm> 組み込みシステムにライブラリをロードする方法及び装置
JP2004070944A (ja) * 2002-08-05 2004-03-04 Hewlett-Packard Development Co Lp アプリケーション向けにオペレーティングシステム機能を拡張するシステムおよび方法

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2077273C (en) * 1991-12-12 1996-12-03 Mike H. Conner Language neutral objects
JPH05257664A (ja) * 1991-12-12 1993-10-08 Internatl Business Mach Corp <Ibm> バージョン独立のオブジェクト指向アプリケーション・プログラムを生成するシステム及び方法
US5421016A (en) * 1991-12-12 1995-05-30 International Business Machines Corporation System and method for dynamically invoking object methods from an application designed for static method invocation
US5432937A (en) * 1993-08-20 1995-07-11 Next Computer, Inc. Method and apparatus for architecture independent executable files
US5732270A (en) * 1994-09-15 1998-03-24 Visual Edge Software Limited System and method for providing interoperability among heterogeneous object systems
US6091897A (en) * 1996-01-29 2000-07-18 Digital Equipment Corporation Fast translation and execution of a computer program on a non-native architecture by use of background translator
US6769126B1 (en) * 1996-12-10 2004-07-27 International Business Machines Corporation Apparatus and method for demand load analysis
US6499137B1 (en) * 1998-10-02 2002-12-24 Microsoft Corporation Reversible load-time dynamic linking
US6496843B1 (en) * 1999-03-31 2002-12-17 Verizon Laboratories Inc. Generic object for rapid integration of data changes
US6460178B1 (en) * 1999-06-30 2002-10-01 Microsoft Corporation Shared library optimization for heterogeneous programs
US6901588B1 (en) * 2000-04-17 2005-05-31 Codemesh, Inc. Sharing components between programming languages by use of polymorphic proxy
US6769115B1 (en) * 2000-05-01 2004-07-27 Emc Corporation Adaptive interface for a software development environment
US6708330B1 (en) * 2000-06-13 2004-03-16 Cisco Technology, Inc. Performance improvement of critical code execution
AU2002307080A1 (en) * 2001-04-23 2002-11-05 Atmel Corporation Microprocessor for executing byte compiled java code
US6986148B2 (en) * 2001-07-17 2006-01-10 Appforge, Inc. Methods and systems for providing platform-independent shared software components for mobile devices
US20030149743A1 (en) * 2002-02-06 2003-08-07 Shumeet Baluja Data logging for resident applications within portable electronic devices
US20040123308A1 (en) * 2002-12-20 2004-06-24 Siemens Information And Communication Networks, Inc. Hybird of implicit and explicit linkage of windows dynamic link labraries
US7472286B2 (en) * 2003-08-29 2008-12-30 Microsoft Corporation Selectively authorizing software functionality after installation of the software
US7412700B2 (en) * 2004-05-18 2008-08-12 Oracle International Corporation Product packaging and installation mechanism
US20060026584A1 (en) * 2004-07-27 2006-02-02 Muratori Richard D Explicit linking of dynamic link libraries
US20060080683A1 (en) * 2004-10-12 2006-04-13 Majid Anwar Mechanism to circumvent restrictions of pre-written code components
US7444625B2 (en) * 2004-10-12 2008-10-28 Picsel (Research) Limited Concurrent code loading mechanism
US7533376B2 (en) * 2004-10-12 2009-05-12 Picsel (Research) Limited Dynamic linking in constrained environment

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08339296A (ja) * 1995-02-27 1996-12-24 Internatl Business Mach Corp <Ibm> 動的リンク・ライブラリをプログラムにリンクする方法
JPH10228381A (ja) * 1997-01-27 1998-08-25 Internatl Business Mach Corp <Ibm> 組み込みシステムにライブラリをロードする方法及び装置
JP2004070944A (ja) * 2002-08-05 2004-03-04 Hewlett-Packard Development Co Lp アプリケーション向けにオペレーティングシステム機能を拡張するシステムおよび方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010244516A (ja) * 2009-04-03 2010-10-28 Lsi Corp ダイナミックライブラリを有するインターフェースを単純化するための方法
WO2022102990A1 (ko) * 2020-11-12 2022-05-19 삼성전자주식회사 전자 장치 및 이의 제어 방법

Also Published As

Publication number Publication date
ATE509312T1 (de) 2011-05-15
EP1810134A1 (en) 2007-07-25
WO2006040505A1 (en) 2006-04-20
EP1810134B1 (en) 2011-05-11
JP5090169B2 (ja) 2012-12-05
KR20070062606A (ko) 2007-06-15
US20060080682A1 (en) 2006-04-13

Similar Documents

Publication Publication Date Title
JP5090169B2 (ja) プラットホーム独立の動的リンキング
US7533376B2 (en) Dynamic linking in constrained environment
US7444625B2 (en) Concurrent code loading mechanism
US20060080680A1 (en) Platform independent dynamic linking
JP2008516324A (ja) ランタイム動的リンキング
US20060080681A1 (en) Mechanism to extend functionality in a restricted computing environment
US7337436B2 (en) System and method for cross platform and configuration build system
Richter Applied Microsoft. NET framework programming
US9459893B2 (en) Virtualization for diversified tamper resistance
US6484309B2 (en) Enabling software designed for one operating system to operate on another operating system
WO2022083316A1 (zh) 一种应用运行的方法、装置及计算机存储介质
US7730472B2 (en) Dynamic linking of modules in a pre-operating system environment
CN106605212A (zh) 在动态链接的运行时环境中的模块化共同版本管理
WO2007137403A1 (en) System and method of generating applications for mobile devices
US20060080683A1 (en) Mechanism to circumvent restrictions of pre-written code components
US20040083467A1 (en) System and method for executing intermediate code
CN106796521B (zh) 独立于产品发布的api版本控制
JP2012516483A (ja) クラスファイル内にネイティブコードを埋め込むことによる仮想メカニズム内でのプラットフォーム依存ルーチンの適用
Chakravarthy et al. Edicts: implementing features with flexible binding times
US20040157593A1 (en) Modularization for J2ME platform implementation
Choi et al. x86‐Android performance improvement for x86 smart mobile devices
CN112416418A (zh) 应用组件的生成方法、装置、计算机设备和可读存储介质
US20150052514A1 (en) Method and computer system of distributing a computer program product
US11720374B1 (en) Dynamically overriding a function based on a capability set
Daubaris Towards Adaptive WebAssembly Applications: Leveraging Capabilities of the Execution Environment

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080825

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111004

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20111226

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20120106

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20120301

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20120308

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120402

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120522

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120720

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120814

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120912

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

Free format text: PAYMENT UNTIL: 20150921

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees