(57)【要約】【課題】  再起動時に、再度動的結合を実施することなく、速やかな再起動が可能な動的結合を実現する動的結合方式を提供することを目的とする。【解決手段】  オブジェクトモジュール１２０中のコード領域と初期値領域とデータ領域に対応するコード領域と初期値領域とデータ領域をＲＡＭ３２０上に確保する確保工程３１１と、確保したコード領域と初期値領域にそれぞれ、オブジェクトモジュール１２０中のコードと初期値を転送する転送工程３１２と、複数のオブジェクトモジュール１２０間の参照を解決した間接参照アドレスを確保した初期値領域に設定することにより、複数のオブジェクトモジュール１２０を結合する結合工程３１３と、結合工程３１３で設定された間接参照アドレスを含む初期値を用いて確保したデータ領域を初期化する初期化工程３１４を順に実行するＣＰＵ（動的結合装置）３１０を備える。【選択図】      図３
2006277156.tif 000002
【特許請求の範囲】
【請求項１】
複数のオブジェクトモジュール間の参照を間接参照形式で表現し、間接参照アドレスを解決することにより、前記複数のオブジェクトモジュールを結合する方式であって、
前記オブジェクトモジュール中のコード領域と初期値領域とデータ領域に対応するコード領域と初期値領域とデータ領域を確保する確保工程と、
前記確保したコード領域と初期値領域にそれぞれ、前記オブジェクトモジュール中のコードと初期値を転送する転送工程と、
前記複数のオブジェクトモジュール間の参照を解決した間接参照アドレスを前記確保した初期値領域に設定することにより、前記複数のオブジェクトモジュールを結合する結合工程と、
前記結合工程で設定された間接参照アドレスを含む初期値を用いて前記確保したデータ領域を初期化する初期化工程と
を備えることを特徴とするオブジェクトモジュール動的結合方法。
【請求項２】
複数のオブジェクトモジュール間の参照を間接参照形式で表現し、間接参照アドレスを解決することにより、前記複数のオブジェクトモジュールを結合するプログラムであって、
前記オブジェクトモジュール中のコード領域と初期値領域とデータ領域に対応するコード領域と初期値領域とデータ領域を確保する確保工程と、
前記確保したコード領域と初期値領域にそれぞれ、前記オブジェクトモジュール中のコードと初期値を転送する転送工程と、
前記複数のオブジェクトモジュール間の参照を解決した間接参照アドレスを前記確保した初期値領域に設定することにより、前記複数のオブジェクトモジュールを結合する結合工程と、
前記結合工程で設定された間接参照アドレスを含む初期値を用いて前記確保したデータ領域を初期化する初期化工程と
を実行することを特徴とするオブジェクトモジュール結合プログラム。
【請求項３】
請求項２に記載のオブジェクトモジュール結合プログラムを記録したこと
を特徴とするコンピュータ読み取り可能な記録媒体。
【請求項４】
オブジェクトモジュールを格納するストレージと、プログラムおよびデータを格納するメモリに接続され、請求項１に記載のオブジェクトモジュール動的結合方法を実行する動的結合装置であって、
前記ストレージより供給されるオブジェクトモジュール中のコード領域と初期値領域とデータ領域に対応するコード領域と初期値領域とデータ領域を前記メモリに確保する確保手段と、
前記確保手段により確保したメモリのコード領域と初期値領域にそれぞれ、前記ストレージのオブジェクトモジュールの前記コードと前記初期値を転送する転送手段と、
前記複数のオブジェクトモジュール間の参照を解決した間接参照アドレスを前記メモリの初期値領域に設定することにより、前記複数のオブジェクトモジュールを結合する結合手段と、
前記結合手段で設定された間接参照アドレスを含む初期値を用いて、前記メモリのデータ領域を初期化する初期化手段と
を備えることを特徴とするオブジェクトモジュール動的結合装置。
【請求項５】
複数のオブジェクトモジュール間の参照を間接参照形式で表現し、間接参照アドレスを解決することにより、前記複数のオブジェクトモジュールを結合する方式であって、
前記オブジェクトモジュール中のコード領域とデータ領域に対応するコード領域とデータ領域を確保する確保工程と、
前記確保したコード領域に、前記オブジェクトモジュール中のコードを転送する転送工程と、
前記複数のオブジェクトモジュール間の参照を解決した間接参照アドレスを前記オブジェクトモジュール中の実体領域内の初期値領域に設定することにより、前記複数のオブジェクトモジュールを結合する結合工程と、
前記オブジェクトモジュール中の前記結合工程で設定された間接参照アドレスを含む初期値データを用いて、前記確保したデータ領域を初期化する初期化工程と
を備えることを特徴とするオブジェクトモジュール動的結合方法。
【請求項６】
複数のオブジェクトモジュール間の参照を間接参照形式で表現し、間接参照アドレスを解決することにより、前記複数のオブジェクトモジュールを結合するプログラムであって、
前記オブジェクトモジュール中のコード領域とデータ領域に対応するコード領域とデータ領域を確保する確保工程と、
前記確保したコード領域に、前記オブジェクトモジュール中のコードを転送する転送工程と、
前記複数のオブジェクトモジュール間の参照を解決した間接参照アドレスを前記オブジェクトモジュール中の実体領域内の初期値領域に設定することにより、前記複数のオブジェクトモジュールを結合する結合工程と、
前記オブジェクトモジュール中の前記結合工程で設定された間接参照アドレスを含む初期値データを用いて、前記確保したデータ領域を初期化する初期化工程と
を実行すること特徴とするオブジェクトモジュール結合プログラム。
【請求項７】
請求項６に記載のオブジェクトモジュール結合プログラムを記録したこと
を特徴とするコンピュータ読み取り可能な記録媒体。
【請求項８】
オブジェクトモジュールを格納するストレージと、プログラムおよびデータを格納するメモリに接続され、請求項５のオブジェクトモジュール動的結合方法を実行する動的結合装置であって、
前記ストレージより供給されるオブジェクトモジュール中のコード領域とデータ領域に対応するコード領域とデータ領域を前記メモリに確保する確保手段と、
前記確保手段により確保したメモリのコード領域に、前記ストレージのオブジェクトモジュール中の前記コードを転送する転送手段と、
前記複数のオブジェクトモジュール間の参照を解決した間接参照アドレスを前記オブジェクトモジュール中の実体領域内の初期値領域に設定することにより、前記複数のオブジェクトモジュールを結合する結合手段と、
前記オブジェクトモジュール中の前記結合手段で設定された間接参照アドレスを含む初期値データを用いて、前記メモリのデータ領域を初期化する初期化手段と
を備えたことを特徴とするオブジェクトモジュール動的結合装置。
【請求項９】
請求項１または請求項５の動的結合方法で用いるオブジェクトモジュールを作成するためのプログラム変換方法であって、
高級言語で記述されたソースコードを、オブジェクトコードに変換するコンパイル工程を備え、
前記コンパイル工程は、
前記ソースコード中に、前記オブジェクトモジュール外への参照が存在する場合に、前記参照を、ポインタ変数を介した間接参照に変換する変換工程と、
前記ポインタ変数の定義を生成する生成工程と、
を具備すること
を特徴とするプログラム変換方法。
【請求項１０】
請求項１または請求項５の動的結合方法で用いるオブジェクトモジュールを作成するためのプログラム変換方法であって、
前記オブジェクトモジュール外への参照を持つソースコードを、ポインタ変数を介した間接参照に変換するソースコード変換工程と、
前記変換されたソースコードを、オブジェクトコードに変換するコンパイル工程
を備え、
前記ソースコード変換工程は、
前記ソースコード中に、前記オブジェクトモジュール外への参照が存在する場合に、前記参照を、ポインタ変数を介した間接参照に変換する変換工程と、
前記ポインタ変数の定義を生成する生成工程と、
を具備すること
を特徴とするプログラム変換方法。
【請求項１１】
請求項１または請求項５の動的結合方法で用いるオブジェクトモジュールであって、
前記オブジェクトモジュール外への参照を表現するためのポインタ変数領域と、
前記ポインタ変数の初期値を格納するためのポインタ変数初期値領域と
を備え、
前記ポインタ変数領域を、通常の変数領域に格納し、
前記ポインタ変数初期値領域を、通常の初期値領域に格納すること
を特徴とするオブジェクトモジュール。
【請求項１２】
請求項４または請求項８に記載の動的結合装置と、
オブジェクトモジュールを格納し、前記動的結合装置に供給するストレージと、
前記動的結合装置から使用され、プログラム及びデータを格納するメモリと、
を有することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアモジュールの結合方式に関し、特にモジュール開発時より後の段階で、プログラム全体を結合する方式（動的結合方式）に関するものである。
【背景技術】
【０００２】
プログラムを作成する場合に、一般に、プログラムをあるまとまった単位（以下モジュール）に分割・開発し、これを最終的に結合して実行する。この結合方式には、大別して、モジュール開発時に全てのモジュールを静的に結合を行う場合（静的結合）と、モジュール開発時より後の段階（モジュールロード時、実行時）に行う場合（動的結合）が知られている。
【０００３】
動的結合方式を用いた場合、プログラム開発後にあるモジュールに変更が生じた場合でも、そのモジュールのみを変更すればよく、プログラム全体の修正や静的結合のやりなおしをする必要がないという利点がある（例えば、特許文献１，２参照）。これらの技術は大型コンピュータやＷＳ、ＰＣを前提としており、ディスク等の外部記憶領域からのロード後、ユーザプログラムの実行直前、もしくは実行中に動的結合を行う（例えば、特許文献３参照）。
【０００４】
また、動的結合に用いられる間接ポインタは特別の領域（例えば、ＧＯＴ＝ＧＬＯＢＡＬ ＯＦＦＳＥＴ ＴＡＢＬＥ）に格納され、動的結合時にこの領域が設置される（例えば、非特許文献１）。これらの機器では一般にプログラムを再度実行する際には、ロードから再実行することになる。
【特許文献１】特開昭５９−１１９４４７号公報
【特許文献２】特開平１−１８４５３１号公報
【特許文献３】特開平８−３３９２９６号公報
【非特許文献１】「Ｌｉｎｋｅｒｓ＆Ｌｏａｄｅｒｓ」  John R. Levine著、榊原  一矢 監訳、ポジティブエッジ 訳、２００１年９月発行、オーム社
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来の動的結合方式では、プログラムの実行直前もしくは実行中に結合作業を行っているため、プログラムを再実行する場合に、動的結合自体をやり直す必要があり、プログラムの実行開始に時間がかかるという問題があった。これは、再実行のためにはデータ領域の初期化が必要であるが、ＷＳ、ＰＣ用途の場合これら初期化の作業はロードと一体化しているため、ロード後に動的結合を行う従来の技術では、必然的に再実行の為に動的結合を行う必要がある。
【０００６】
また、動的結合のために、動的結合を行うことをプログラム実行手順に組み込む必要が有り、プログラムを実行する機器において、静的結合のプログラムを実行する場合と、動的結合のプログラムを実行する場合で、プログラム実行手順を異なるものにする必要があった。
【０００７】
更に、動的結合を実現するためには、開発環境（コンパイラやリンカ等）に於いて、動的結合に適応するための変更が必要で有るという課題があった。
そこで、本発明は、プログラムを再実行するまでの時間を短縮でき、プログラム実行手順を静的結合のプログラムを実行する場合と動的結合のプログラムを実行する場合で同じとすることができる動的結合方式を提供し、また開発環境（コンパイラやリンカ等）に於いて、動的結合に適応するための変更が必要ではないプログラム変換方法を提供することを目的としたものである。
【課題を解決するための手段】
【０００８】
前述した目的を達成するために、本発明の動的結合方式は、複数のオブジェクトモジュール間の参照を間接参照形式で表現し、間接参照アドレスを解決することにより、前記複数のオブジェクトモジュールを結合する方式であって、
前記オブジェクトモジュール中のコード領域と初期値領域とデータ領域に対応するコード領域と初期値領域とデータ領域を確保する確保工程と、前記確保したコード領域と初期値領域にそれぞれ、前記オブジェクトモジュール中のコードと初期値を転送する転送工程と、前記複数のオブジェクトモジュール間の参照を解決した間接参照アドレスを前記確保した初期値領域に設定することにより、前記複数のオブジェクトモジュールを結合する結合工程と、前記結合工程で設定された間接参照アドレスを含む初期値を用いて前記確保したデータ領域を初期化する初期化工程とを備えることを特徴とするものである。
【０００９】
上記方法によれば、プログラムモジュール間の結合は、結合工程が終わった段階で完了していることとなる。一方、プログラムの（再）実行には変数の初期化が必要であるが、これは、結合工程に続く初期化工程で行われる。従って、メモリ内容を保持したままのプログラム再実行（ホットスタート）の際には、初期化工程から行えば良く、結合工程を再度実行する必要はなくなり、プログラム再実行時間が短縮される。また、初期化工程の動作は、従来の初期化と何らかわるところがなく、静的結合方式を用いたプログラムと、本方式による動的結合方式を用いたプログラムとで、初期化シークエンスを換える必要がない。
【００１０】
また本発明の動的結合方式は、複数のオブジェクトモジュール間の参照を間接参照形式で表現し、間接参照アドレスを解決することにより、前記複数のオブジェクトモジュールを結合する方式であって、
前記オブジェクトモジュール中のコード領域とデータ領域に対応するコード領域とデータ領域を確保する確保工程と、前記確保したコード領域に、前記オブジェクトモジュール中のコードを転送する転送工程と、前記複数のオブジェクトモジュール間の参照を解決した間接参照アドレスを前記オブジェクトモジュール中の実体領域内の初期値領域に設定することにより、前記複数のオブジェクトモジュールを結合する結合工程と、前記オブジェクトモジュール中の前記結合工程で設定された間接参照アドレスを含む初期値データを用いて、前記確保したデータ領域を初期化する初期化工程とを備えることを特徴とするものである。
【００１１】
上記方法によれば、オブジェクトモジュール間の結合を表現する間接参照アドレスはメモリ上とは異なる領域に存在するオブジェクトモジュール中に格納される。これにより、電源断を伴う再実行（コールドスタート）の際にも、初期化工程から再実行を行うだけで良く、プログラム再実行時間が短縮される。
【００１２】
また本発明のプログラム変換方法は、動的結合方法で用いるオブジェクトモジュールを作成するためのプログラム変換方法であって、
前記オブジェクトモジュール外への参照を持つソースコードを、ポインタ変数を介した間接参照に変換するソースコード変換工程と、前記変換されたソースコードを、オブジェクトコードに変換するコンパイル工程を備え、前記ソースコード変換工程は、前記ソースコード中に、前記オブジェクトモジュール外への参照が存在する場合に、前記参照を、ポインタ変数を介した間接参照に変換する変換工程と、前記ポインタ変数の定義を生成する生成工程とを具備することを特徴とするものである。
【００１３】
上記方法によれば、標準的なコンパイラをそのまま利用して、本発明による動的変換方式の利益を享受できる。
【発明の効果】
【００１４】
本発明の動的結合方式は、オブジェクトモジュール間の結合は、結合工程が終わった段階で完了していることとなり、一方、プログラムの（再）実行には変数の初期化が必要であるが、これは、結合工程に続く初期化工程で行われることにより、メモリ内容を保持したままのプログラム再実行（ホットスタート）の際には、初期化工程から行えば良く、結合工程を再度実行する必要はなくなり、プログラム再実行時間を短縮することができ、また初期化工程の動作は、従来の初期化と何らかわるところがなく、静的結合方式を用いたプログラムと、本方式による動的結合方式を用いたプログラムとで、初期化シークエンスを変える必要がない、という効果を有している。
【発明を実施するための最良の形態】
【００１５】
以下、本発明の実施の形態を、図面を参照しながら説明する。
［実施の形態１］
まず、本発明で処理対象とするオブジェクトモジュールを作成する開発環境について説明する。
【００１６】
図１は本発明で使用するオブジェクトモジュールを作成する開発環境を表したものであり、１００は高級言語で記述されたソースコード、１１０はオブジェクトコードである。また１３０はコンパイラであり、高級言語で記述されたソースコード１００を、オブジェクトコード１１０に変換するコンパイル工程を実行する。１４０はリンカであり、単数もしくは複数のオブジェクトコード１１０からオブジェクトモジュール１２０を作成する。
【００１７】
前記コンパイラ１３０が実行するコンパイル工程は、順に、上流工程１３１、間接参照変換工程（変換工程の一例）１３２、ポインタ変数定義生成工程（生成工程の一例）１３３、下流工程１３４より形成される。
【００１８】
上流工程１３１は、ソースコードを入力として受け付け、中間コードに変換する。
次の間接参照変換工程１３２は、ソースコード１００中に、モジュール外への参照が存在する場合に、前記参照をポインタ変数を介した間接参照に変換する。
【００１９】
続いてポインタ変数定義生成工程１３３は、間接参照変換工程１３２で生じたポインタ変数の定義を生成し中間コードに追加する。
下流工程１３４は、中間コードからオブジェクトコード１２０を生成する。
【００２０】
このように、コンパイラ１３０によりオブジェクトコード１２０が生成されると、リンカ１４０によりこのオブジェクトコード１２０から、本発明の動的結合方式で使用するオブジェクトモジュール１２０が作成される（コンパイラ１３０とリンカ１４０により動的結合方式で使用するプログラム変換方式が実行され、オブジェクトモジュール１２０が形成される）。
【００２１】
次にオブジェクトモジュールの構成について説明する。図２はオブジェクトモジュールの内部構成を示す概念図である。オブジェクトモジュールはヘッダ領域２００と実体領域２１０に大別される。ヘッダ領域２００には、図５に示すように、コード領域（ＴＥＸＴ）、初期値領域（ＲＯＭＤＡＴＡ）、初期値付きデータ領域（ＤＡＴＡ）、初期値なし付きデータ領域（ＢＳＳ）が含まれ、オブジェクトモジュールに含まれる各セクションの情報（セクション名、セクション属性、サイズ等）が含まれる。実体領域２１０には、各セクションの内容が記述される。また通常の変数領域である、初期値付きデータ領域（ＤＡＴＡ）または初期値なし付きデータ領域（ＢＳＳ）に、オブジェクトモジュール１２０外への参照を表現するためのポインタ変数領域が格納され、通常の初期値領域である初期値領域（ＲＯＭＤＡＴＡ）に、ポインタ変数（間接参照アドレス）の初期値を格納するためのポインタ変数初期値領域が格納されている。
【００２２】
続いて、本発明の動的結合方式について説明する。図３は本発明の動的結合方式が動作するシステムを表したものであり、３００は、上記形成されたオブジェクトモジュール１２０が格納されているストレージ（例えば、磁気ディスク装置、不揮発性メモリ等）である。３１０はＣＰＵ（動的結合装置の一例）であり、ここで動的結合方式の各工程が実行される。３２０はＲＡＭ（メモリの一例）であり、コード、データ領域が確保される。これらＣＰＵ３１０とストレージ３００とＲＡＭ３２０により情報処理装置が構成されている。
【００２３】
ＣＰＵ３１０において、確保手段による確保工程３１１、転送手段による転送工程３１２、結合手段による結合工程３１３、初期化手段による初期化工程３１４が順に実行される。なお、この記ＣＰＵ３１０において実行される確保工程３１１、転送工程３１２、結合工程３１３、初期化工程３１４は、オブジェクトモジュール結合プログラムとして形成されており、コンピュータ読み取り可能な記録媒体に記録されている。
【００２４】
まず、確保工程３１１が実行される。確保工程３１１では、ストレージ３００より供給されるオブジェクトモジュール１２０のヘッダ領域に記憶された情報から、メモリ配置の有無、サイズ等が取得され、メモリ確保が必要な領域について、必要なサイズのメモリ領域がＲＡＭ３２０に確保される。具体的には、オブジェクトモジュール１２０の中のコード領域（ＴＥＸＴ）と初期値領域（ＲＯＭＤＡＴＡ）に対応するコード領域３２１と初期値領域３２２、および初期値付きデータ領域（ＤＡＴＡ）と初期値なし付きデータ領域（ＢＳＳ）に対応し、実行時に必要となる初期値付きデータ領域３２３、初期値なしデータ領域３２４をＲＡＭ３２０上に確保する。初期値領域３２２には、初期値領域（ＲＯＭＤＡＴＡ）に格納されたポインタ変数初期値領域に対応する結合用初期値領域（モジュール結合用変数の初期値領域）３２２ａが含まれ、また初期値付きデータ領域３２３には、初期値付きデータ領域（ＤＡＴＡ）に格納されたポインタ変数領域に対応する結合用データ領域３２３ａが含まれる。また初期値なしデータ領域３２４には、初期値なし付きデータ領域（ＢＳＳ）に格納されたポインタ変数領域に対応する結合用データ領域（図示せず）が含まれる。
【００２５】
次に、転送工程３１２が実行される。転送工程３１２では、確保工程３１１で確保された領域に対し、オブジェクトモジュール１２０が転送される。具体的には、確保したＲＡＭ３２０のコード領域３２１と初期値領域３２２にそれぞれ、オブジェクトモジュール１２０のヘッダ領域のコード領域（ＴＥＸＴ）、および初期値領域（ＲＯＭＤＡＴＡ）を転送する。なお、他にも定数領域（ＲＯＤＡＴＡ）など転送される領域が存在するが、本発明の動作と無関係であるため以降、特に言及しない。
【００２６】
続いて、結合工程３１３が実行される。結合工程３１３では、複数のオブジェクトモジュール１２０間の参照を解決した間接参照アドレスを、確保工程３１１により確保した初期値領域３２２に設定することにより、複数のオブジェクトモジュール１２０が結合される。具体的には、確保工程３１１で決定したモジュールの領域配置に基づき、個々の間接参照ポインタの値（間接参照アドレス）を決定し、これを初期値領域３２２に格納された結合用初期値領域（間接参照ポインタ初期値領域）３２２ａに設定する。
【００２７】
最後に、初期化工程３１４が実行される。初期化ステップ３１４では、結合工程３１３で設定された間接参照アドレスを含む初期値を用いて確保したデータ領域３２３が初期化される。具体的には、初期値領域３２２の初期値と個々の間接参照ポインタの値（間接参照アドレス）を、初期値付きデータ領域３２３およびこのデータ領域３２３に格納された結合用データ領域３２３ａに複写し、初期値無しデータ領域３２４を０でクリアすることで変数初期化を実行する。
【００２８】
以上の処理により、オブジェクトモジュール１２０は結合され、一つのプログラムとして実行可能となる。また、上記ステップ順序から明らかなように、本プログラムを再実行する際には、最後の初期化工程３１４から実行を始めれば良く、オブジェクトモジュール１２０の結合を再度行う必要はないため、プログラムの再実行開始時間を短縮することができる。
＜動作＞
次に例を用いて、本発明の動的結合方式の動作を説明する。
＜開発時＞
図４はＣ言語ソースコードの一例である。図４（ａ）は初期値付き整数型変数ａ、及び、副プログラムｆｕｎｃの定義を持つモジュールＡである。一方図４（ｂ）は、初期値無し整数型変数ｘ、初期値付き整数型変数ｙ、及び、副プログラムｍａｉｎの定義を持つモジュールＢである。モジュールＢでは、モジュールＡで定義された整数型変数ａを参照し、副プログラムｆｕｎｃを呼び出している。図４のＣ言語プログラムモジュールは、開発環境により、オブジェクトモジュールに変換される。この際、前述の通り、モジュール外への参照は、ポインタ変数を介した間接参照に変換される。図５が変換後のオブジェクトモジュールである。
【００２９】
図５（ａ）は図４（ａ）に対応するオブジェクトモジュールである。当該オブジェクトモジュールＡは、ヘッダ領域２００にコード領域（ＴＥＸＴ）、初期値領域（ＲＯＭＤＡＴＡ）、初期値付きデータ領域（ＤＡＴＡ）の３領域を持ち、実体データとして、コード、初期値を持つ。
【００３０】
図５（ｂ）は図４（ｂ）に対応するオブジェクトモジュールである。当該オブジェクトモジュールＢは、ヘッダ領域２００にコード領域（ＴＥＸＴ）、初期値領域（ＲＯＭＤＡＴＡ）、初期値付きデータ領域（ＤＡＴＡ）、初期値無しデータ領域（ＢＳＳ）の４領域を持ち、実体データとして、コード、初期値を持つ。実体データとは、オブジェクトモジュール中に実際に確保される領域のことである。ここでモジュールＢから見て外部参照となる、変数ａ、副プログラムｆｕｎｃについては、其々ポインタ変数＿ｒｅｆ＿ａ、＿ｒｅｆ＿ｆｕｎｃを介した間接参照に変換され、この間接参照化により生じた２つのポインタ変数用の領域（上記ポインタ変数初期値領域とポインタ変数領域）が、初期値領域（ＲＯＭＤＡＴＡ）、初期値付きデータ領域（ＤＡＴＡ）に確保される。
＜実行時＞
実行時には、開発時に作成されたオブジェクトモジュール１２０はストレージ３００に格納されている。これは、例えば、ダウンロードに依ってもよいし、磁気ディスクや不揮発性メモリとして提供されても良い。
【００３１】
まず、確保工程３１１が起動される。確保工程３１１はストレージ３００に含まれるオブジェクトモジュール１２０についてＲＡＭ３２０上に領域の確保を行う。例では２つのオブジェクトモジュールＡ，Ｂが有り、それぞれメモリ確保が必要な領域を上記３領域、４領域を持つので、計７つの領域を確保する。確保された結果のＲＡＭ３２０上のメモリ配置を図６に示す。オブジェクトモジュールＡに対応して、コード領域３２１、初期値領域３２２、初期値付きデータ領域３２３が確保され、オブジェクトモジュールＢに対応して、コード領域３２１、結合用初期値領域３２２ａが格納された初期値領域３２２、結合用データ領域３２３が格納された初期値付きデータ領域３２３、初期値なしデータ領域３２４が確保されている。図６左端の数値は、各領域が配置されたアドレスを示す。図６中央は、各領域の配置を、図６右端は各領域の内容とその意味（括弧内）を示す。
【００３２】
次に、転送工程３１２が起動される。転送工程３１２では、オブジェクトモジュール１２０に実体を持つ領域の転送を行う。例では、２つのオブジェクトモジュールＡ，Ｂ中のコード領域、初期値領域がこれにあたるので、計４つの領域をストレージ３００からＲＡＭ３２０上の該当領域に転送する。転送された領域を図７中に網掛けで示す。初期値領域３２２には、結合用初期値領域３２２ａも含まれるが、初期値領域３２２として扱う場合には、特に区別せず、結合用初期値領域３２２ａを含むか否かには関わらず全体として転送を行う。
【００３３】
続いて、結合工程３１３が起動される。結合工程３１３では、結合用初期値領域３２２ａに含まれる間接参照ポインタを設定する。これは間接参照ポインタに対応する実体データが配置されたアドレスを、結合用初期値領域３２２ａに設定することで行う。例では、該当するポインタ変数は＿ｒｅｆ＿ａ、＿ｒｅｆ＿ｆｕｎｃの２つであるので、これに対応する実体、変数ａ、副プログラムｆｕｎｃの配置されたアドレス（それぞれ、0x10000104、0x10000000）を、ポインタ変数＿ｒｅｆ＿ａ、＿ｒｅｆ＿ｆｕｎｃの結合用初期値領域３２２ａ（アドレスとしては、それぞれ0x10001204、0x10001208）に設定する（図８）。縦線で、設定される領域を示す。
【００３４】
最後に、初期化工程３１４が起動される。初期化工程３１４では、初期値領域３２２の内容を初期値付きデータ領域３２３に複写し、初期値無しデータ領域３２４を０でクリアする。これにより、結合用データ領域３２３ａに、モジュールＡ，Ｂを結び付けるアドレスデータが書き込まれ、２つのモジュールが結合されたプログラムとして動作する（図９）。図９中の矢印は、ポインタ変数が指している実体を示している。
【００３５】
以上のように、本実施の形態１によれば、動的結合方法が実行されると、複数のプログラムモジュール１２０が結合され、実行可能な状態となる。本工程の実行順序から明らかなように、メモリ内容を保持したまま結合されたプログラムを再実行（ホットスタート）する場合には、初期化工程３１４から実行を開始すれば良く、再度結合工程３１３を実行する必要がないため、再実行にかかる時間を短縮できる。また、初期化工程３１４の動作は従来からのプログラム起動シークエンスと同様で有り、静的結合方式においても全く同様に適用することができる。
【００３６】
なお、本実施の形態１では、モジュール間結合用の間接参照ポインタ初期値領域（ポインタ変数初期値領域）、データ領域（ポインタ変数領域）を、それぞれ（一般変数の）初期値領域３２２、初期値付きデータ領域３２３に置くとしたが、これらとは別の領域としても良い。この場合、初期化工程３１４で、別途モジュール間結合用の間接参照ポインタの初期化領域からデータ領域への複写が必要となる。
［実施の形態２］
実施の形態２では、初期値領域をＲＡＭ３２０上に確保しない構成について記述する。
【００３７】
図１０は、実施の形態２における動的結合方式が動作するシステムを表したものである。１０００はオブジェクトモジュール１２０が格納されているストレージ（例えば、磁気ディスク装置、不揮発性メモリ等）である。１０１０はＣＰＵ（動的結合装置の一例）であり、ここで動的結合方式の各工程が実行される。１０２０はＲＡＭ（メモリの一例）であり、プログラムコード、データ領域が確保される。これらＣＰＵ１０１０とストレージ１０００とＲＡＭ１０２０により情報処理装置が構成されている。
【００３８】
ＣＰＵ１０１０において、確保手段による確保工程１０１１、転送手段による転送工程１０１２、結合手段による結合工程１０１３、初期化手段による初期化工程１０１４が順に実行される。なお、このＣＰＵ１０１０において実行される確保工程１０１１、転送工程１０１２、結合工程１０１３、初期化工程１０１４は、オブジェクトモジュール結合プログラムとして形成されており、コンピュータ読み取り可能な記録媒体に記録されている。
【００３９】
まず、確保工程１０１１が実行される。確保工程１０１１では、オブジェクトモジュール中の情報に基づいて、領域が確保される。この際、領域としてはコード領域、及び、データ領域についてのみ領域を確保し、初期化領域は確保しない。具体的には、オブジェクトモジュール１２０の中のコード領域（ＴＥＸＴ）に対応するコード領域１０２１、および初期値付きデータ領域（ＤＡＴＡ）と初期値なし付きデータ領域（ＢＳＳ）に対応し、実行時に必要となる初期値付きデータ領域１０２３、初期値なしデータ領域１０２４をＲＡＭ１０２０上に確保する。初期値付きデータ領域１０２３には、初期値付きデータ領域（ＤＡＴＡ）に格納されたポインタ変数領域に対応する結合用データ領域１０２３ａが含まれる。また初期値なしデータ領域１０２４には、初期値なし付きデータ領域（ＢＳＳ）に格納されたポインタ変数領域に対応する結合用データ領域（図示せず）が含まれる。
【００４０】
次に、転送工程１０１２が実行される。転送工程１０１２では、確保工程１０１１で確保されたＲＡＭ１０２０のコード領域１０２１に対し、オブジェクトモジュール１２０を転送する。具体的には、ストレージ１０００のオブジェクトモジュール１２０中のコード領域（ＴＥＸＴ）が転送される。
【００４１】
続いて、結合工程１０１３が実行される。結合工程１０１３では、確保工程１０１１で決定したモジュール１２０の領域配置に基づき、個々の間接参照ポインタの値が決定され、この複数のオブジェクトモジュール１２０間の参照を解決した間接参照アドレスが、ストレージ１０００中のオブジェクトモジュール１２０の実体領域２１０内の該当する間接参照ポインタ初期値（初期値領域）に設定され、複数のオブジェクトモジュール１２０が結合される。
【００４２】
最後に、初期化工程１０１４が実行される。初期化工程１０１４では、ストレージ中のオブジェクトモジュール１２０の実体領域２１０内の初期値領域から、間接参照アドレスを含む初期値データが、初期値付きデータ領域１０２３およびこのデータ領域１０２３に格納された結合用データ領域１０２３ａに複写され、初期値無しデータ領域１０２４が０でクリアされることで変数初期化が実行される。
【００４３】
例として、実施の形態１と同様のオブジェクトモジュールＡ，Ｂを用いた場合について説明する。開発時の動作は実施の形態１と同様であるので省略する。続いて実行時について、確保工程１０１１、転送工程１０１２が実行される。この２工程についても、初期値領域を確保・転送しない点を除き実施の形態１と同様である。結果ＲＡＭ上の配置は図１１のようになる。なおここでは説明の都合上、図７における初期値領域の部分を開けた配置としたが、実施の形態２ではＲＡＭ上への初期値領域の確保・転送は不要であるため、この部分を詰めて配置してもよいことは言うまでもない。
【００４４】
続いて結合工程１０１３が実行される。この例では、モジュールＢからモジュールＡへの外部参照が存在し、参照を表現する間接参照ポインタの初期値は図５中の＿ｒｅｆ＿ａの初期値及び＿ｒｅｆ＿ｆｕｎｃ＿の初期値である。結合工程１０１３では、ストレージ１０００に格納されているオブジェクトモジュールＢ中の実体領域２１０内の前記２つの初期値領域に、それぞれ、0x10000104、0x10000000を書き込む。
【００４５】
最後に、初期化工程１０１４が実行される。初期化工程１０１４では、オブジェクトモジュールＢ中の実体領域２１０内の初期値領域の内容を初期値付きデータ領域１０２３に複写し、初期値無しデータ領域を０でクリアする。これにより、結合用データ領域１０２３ａに、モジュールＡ、Ｂを結び付けるアドレスデータが書き込まれ、２つのモジュールが結合されたプログラムとして動作する（図１２）。図１２中の矢印は、ポインタ変数が指している実体を示している。
【００４６】
以上の処理により、本実施の形態２によれば、オブジェクトモジュールＡ，Ｂは結合され、一つのプログラムとして実行可能となる。また、上記ステップ順序から明らかなように、本プログラムを再実行（ホットスタート）する際には、最後の初期化ステップ１０１４から実行を始めれば良く、モジュールの結合を再度行う必要はない。更に、結合のための間接参照ポインタ設定値がストレージ１０００のオブジェクトモジュール１２０中に設定されるため、本システムが動作する機器をコールドスタート（電源断後の再起動）した場合でも、再度結合を実行する必要がなく、プログラムの再実行開始時間を短縮することができる。
【００４７】
なお、本実施の形態２では、コード領域はＲＡＭ１０２０上に領域を確保・転送するとしたが、ストレージ１０００がフラッシュメモリであり、ＣＰＵ１０１０から直接アクセスできるようにアドレシングされている場合には、コード領域も初期値領域と同様に領域確保・転送しないとしてもよい。この場合、ＲＡＭ１０２０の容量、及び、コード領域の確保・転送に要する時間を節約することができる。
［実施の形態３］
実施の形態３では、特に開発環境（コンパイラ）が動的結合に対応していない場合の構成について記述する。
【００４８】
図１３は本発明で使用するオブジェクトモジュールを作成する開発環境を表したものである。１３００は高級言語で記述されたソースコードである。１３４０はオブジェクトモジュール１２０外への参照を持つソースコード１３００を、ポインタ変数を介した間接参照に変換するソースコード変換工程を実行する外部参照変換噐であり、当該モジュール外を参照するコードを、間接参照ポインタ変数を用いた間接参照コードに変換すると共に、間接参照ポインタの定義を生成する。１３１０は外部参照変換器１３４０で変換された変換後ソースコード（ソースモジュール）である。
【００４９】
前記外部参照変換噐１３４０が実行するソースコード変換工程は、順に、上流工程１３４１、間接参照変換工程（変換工程の一例）１３４２、ポインタ変数定義生成工程（生成工程の一例）１３４３、下流工程１３４４より形成される。
【００５０】
上流工程１３４１は、ソースコード１３００を入力として受け付け、中間コードに変換する。
間接参照変換工程１３４２は、ソースコード１３００中に、オブジェクトモジュール１２０外への参照が存在する場合に、前記参照を、ポインタ変数を介した間接参照に変換する。
【００５１】
ポインタ変数定義生成工程１３４３は、間接参照変換工程１３４２で生じたポインタ変数の定義を生成し中間コードに追加する。
下流工程１３４４は、中間コードから変換後ソースコード１３１０を生成する。
【００５２】
１３５０はコンパイラであり、外部参照変換噐で変換された変換後ソースコード１３１０をオブジェクトコード１３２０に変換する。１３６０はリンカであり、単数もしくは複数のオブジェクトコード１３２０からオブジェクトモジュール１３３０を作成する。
【００５３】
図４（ｂ）のＣ言語プログラムモジュール（ソースコード）を例にとり、オブジェクトモジュールへの変換処理を述べる。図４（ｂ）のＣ言語プログラムモジュール（ソースコード）は、外部参照変換噐１３４０により、図１４に示すＣ言語プログラムモジュール（変換後ソースコード）１３１０に変換される。このソースコード変換工程の際、モジュール外への参照は、ポインタ変数を介した間接参照に変換され、当該ポインタ変数の定義も合わせて生成される。この例では、モジュール外への参照は、整数型変数ａの参照、及び、副プログラムｆｕｎｃの呼び出しである。これが其々、ポインタ変数を介した参照＊＿ｒｅｆ＿ａ、及び、（＊＿ｒｅｆ＿ｆｕｎｃ）（）に変換される。このＣ言語プログラムモジュール（変換後ソースコード）１３１０は、更にコンパイラ１３５０およびリンカ１３６０でオブジェクトモジュール１３３０に変換される。図１５が変換後のオブジェクトモジュールである。
【００５４】
以降の処理は実施の形態１と同様であるので省略する。
本実施の形態３では、オブジェクトモジュール間の接続の為の外部参照ポインタ変数は、コンパイラから見て入力ソースコード（変換後ソースコード）上に表れる、明示的なポインタ変数となるので、必然的に、他の変数と同じデータ領域に配置されることとなる。このため、初期化が行われると、データ領域が初期値データにより上書きされることとなるが、本実施の形態３によれば、外部参照ポインタ変数の初期値データが、対応するオブジェクトモジュールの初期値領域に設定・格納されるため、従来の起動シークエンスのまま、変更なしに使用できると共に、再起動時も、初期化より再実行するのみで良い。もしも、本実施の形態３によらずに外部参照ポインタ変数の設定値をデータ領域中に直接書き込んでいると、初期化処理によりこの領域が上書きされてしまうため、再度結合処理が必要となってしまう。
【産業上の利用可能性】
【００５５】
本発明にかかる動的結合方式は、電源断を伴わない再起動、電源断を伴う再起動いずれにおいても、再起動完了までの時間を短縮するという効果を有し、動的結合方式を用いる可能性のある、デジタル家電機器、携帯電話、携帯情報端末、携帯ＡＶ機器、デジタルスチルカメラ等に有用である。
【図面の簡単な説明】
【００５６】
【図１】本発明の実施の形態１における、オブジェクトモジュール開発環境を示す図である。
【図２】オブジェクトモジュールの構成図である。
【図３】動的結合方式が動作するシステムの一例を示す図である。
【図４】Ｃ言語ソースコードの一例を示す図である。
【図５】オブジェクトモジュールの一例を示す図である。
【図６】確保工程実行後のメモリマップである。
【図７】転送工程実行後のメモリマップである。
【図８】結合工程実行後のメモリマップである。
【図９】初期化工程実行後のメモリマップである。
【図１０】本発明の実施の形態２における、動的結合方式が動作するシステムの一例を示す図である。
【図１１】転送工程実行後のメモリマップである。
【図１２】初期化工程実行後のメモリマップである。
【図１３】本発明の実施の形態３における、オブジェクトモジュール開発環境を示す図である。
【図１４】外部参照変換器で変換後のＣ言語ソースコードの一例を示す図である。
【図１５】オブジェクトモジュールの一例を示す図である。
【符号の説明】
【００５７】
１００，１３００  ソースコード
１１０，１３２０  オブジェクトコード
１２０，１３３０  オブジェクトモジュール
１３０，１３５０  コンパイラ
１３１  上流工程
１３２  間接参照変換工程
１３３  ポインタ変数定義生成工程
１３４  下流工程
１４０，１３６０  リンカ
２００  ヘッダ領域
２１０  実体領域
３００，１０００  ストレージ
３１０，１０１０  ＣＰＵ
３１１，１０１１  領域確保工程
３１２，１０１２  転送工程
３１３，１０１３  結合工程
３１４，１０１４  初期化工程
３２０，１０２０  ＲＡＭ
１３１０  変換後ソースコード
１３４０  外部参照変換器
１３４１  上流工程
１３４２  間接参照変換工程
１３４３  ポインタ変数定義生成工程
１３４４  下流工程
【図１】
2006277156.tif 000003
【図２】
2006277156.tif 000004
【図３】
2006277156.tif 000005
【図４】
2006277156.tif 000006
【図５】
2006277156.tif 000007
【図６】
2006277156.tif 000008
【図７】
2006277156.tif 000009
【図８】
2006277156.tif 000010
【図９】
2006277156.tif 000011
【図１０】
2006277156.tif 000012
【図１１】
2006277156.tif 000013
【図１２】
2006277156.tif 000014
【図１３】
2006277156.tif 000015
【図１４】
2006277156.tif 000016
【図１５】
2006277156.tif 000017