(57)【特許請求の範囲】
【請求項１】
情報端末装置のメモリをデータ領域とアドインソフトのプログラム格納領域とで共有するアドインソフト管理システムであって、
アドインソフトを実行するための関数群を１つにまとめたモジュールをダウンロードの最小単位とし、各モジュールは、モジュール内のアドレスが相対アドレスで記述され、各モジュールの先頭にはそのモジュール内で外部から参照可能な関数全てへ分岐できる関数分岐ルーチンが配置されるとともに、予め定められた関数名のアドインソフト実行関数群が配置されており、
前記情報端末装置に予め組み込まれたプログラムによって、ダウンロードされた全てのモジュールとその先頭アドレスとを前記メモリ内のデータ領域に登録して管理する手段と、前記情報端末装置に予め組み込まれたプログラムによって、ダウンロードされた全てのアドインソフト名とそのアドインソフトを構成するモジュールのモジュール名とを前記メモリ内のデータ領域に登録して管理する手段とを備えたことを特徴とする再配置可能なアドインソフト管理システム。
【請求項２】
呼び出したい関数のモジュール名と関数名と引数とを渡すことで、前記モジュールの先頭アドレス管理データを元に、前記モジュールの先頭に配置された関数分岐ルーチンに必要な引数を渡すことができる関数呼び出しルーチンを備え、任意のモジュールから任意の外部モジュールの関数をコールできる請求項１に記載のアドインソフト管理システム。
【請求項３】
前記アドインソフトが単一若しくは複数のモジュールで構成されるとともに、複数のアドインソフトで同一のモジュールが利用可能である請求項１又は２に記載のアドインソフト管理システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、情報端末装置において利用者が必要に応じてソフトを追加していく、アドインソフトの管理システムに関する。
【０００２】
【従来の技術】
従来より、プログラムを動的に配置する処理として、例えば特開平６−３３２６７５号公報に記載された共有ライブラリ管理機構や、フラッシュＲＯＭを用いたアドインソフト管理方式が提案されている。
【０００３】
図１５は、上記の共有ライブラリ管理機構において、プログラムを動的に配置する処理を示した図である。
【０００４】
同図において、ライブラリファイル７００は、ハードディスクなどの２次メモリ上に配置されている。このライブラリファイル７００の中には、ライブラリ関数７０１〜７０４を格納する領域と、関数アドレス表７１０を格納する領域とがあり、関数アドレス表７１０には、ライブラリ関数の関数名７１１とその関数のライブラリの先頭からの相対アドレス７１２とが登録されている。
【０００５】
一方、ライブラリ関数の呼び出しを含む関数８１０の中に、ライブラリ関数ａ（）の呼び出し８１１とライブラリ関数ｃ（）の呼び出し８１２とがあるとき、コンパイラによってスタブ関数ａ′（）８０１とｃ′（）８０２とが生成される。
【０００６】
また、メモリのデータ領域には関数リンクテーブル８２０があり、ライブラリ関数名８２１とその先頭アドレス８２２とが登録されている。ただし、関数リンクテーブル８２０は、初期状態ではアドレスが登録されておらず、ライブラリファイル７００がメモリ上に展開される際に、ダイナミックローダにより、ライブラリの展開先の先頭アドレスとライブラリ内の関数アドレス表とからアドレスを計算して登録するようになっている。
【０００７】
従って、実際のライブラリ関数の呼び出しの流れは、一度スタブ関数へジャンプし、スタブ関数内で関数リンクテーブル内のアドレスを参照して、ライブラリ関数を呼び出すといった流れとなる。
【０００８】
次に、上記のフラッシュＲＯＭを用いたアドインソフト管理方式について説明する。
【０００９】
図１６は、従来のアドインソフト管理方式でのフラッシュＲＯＭの一部を示した図である。
【００１０】
このフラッシュＲＯＭには、ページ０からページ１５まで格納されており、１つのページ６００は、ページヘッダ領域６１０とセクタ領域６３０とに分かれている。また、セクタ領域６３０はさらに複数のセクタに分かれており、各セクタは、データセクタ６３１、削除済みセクタ６３２、空きセクタ６３４のいずれかに分類される。
【００１１】
このような構成において、アドインソフトをダウンロードする際には、セクタ領域６３０をセクタに分割することなくアドインソフト６４０を書き込むため、アドインソフトはページ１４又はページ１５にしかダウンロードできない。
【００１２】
また、アドインソフト自体は絶対アドレスでジャップ命令等が記述されているので、同一の処理をするアドインソフトでもページ１４用とページ１５用とが用意されている。また、アドインソフトの呼び出しは、アドインの先頭アドレスが決まっているので、そのアドレスをコールする。また、アドインソフトの削除は、アドインの登録情報を削除した後、該当ページをリフレッシュする。
【００１３】
【発明が解決しようとする課題】
ところで、絶対アドレスを利用するアドインソフトでは、同じ機能のアドインソフトでもアドレスごとに別々のプログラムを用意しなくてはならず無駄が多い。また、情報端末装置間でのアドインソフトの転送は、転送先の情報端末装置の該当アドレスに別のアドインソフトが入っていると転送できなくなる。また、一度ダウンロードしたアドインソフトは、固定アドレスで動作するため、他のアドレスへ移動させることができず、ガベージコレクションを行うことができないといった問題がある。このような問題を解決するためには、アドインプログラムがどのアドレスにダウンロードされても動作するようにしなければならない。また、アドインソフトを開発する際には、情報端末装置にあらかじめ用意されているライブラリ以外にはライブラリを置くことができず、複数のアドインプログラムで同様の処理を行っているため、アドインソフトの開発労力やアドインプログラムのサイズが増大する。
【００１４】
また、上記のフラッシュＲＯＭを利用する情報端末装置では、１ページで１つ又は２ページで１つのアドインソフトを格納するといった使い方しかできない。そのため、１ページ未満の小さいアドインソフトでも１ページ全部を使用することになり、空き領域が有効利用できない。また、ページごとにページ管理のためのヘッダ領域等が設けられており、連続して確保できるメモリサイズはページサイズよりも小さくなってしまう。そのため、大規模なアドインソフトを作るには、１つのアドインソフトを複数のモジュールに分けて作り、モジュール単位でダウンロードできるようにする必要がある。
【００１５】
また、上記の共有ライブラリ管理機構では、他のモジュールのプログラムから呼び出されるライブラリ関数のアドレスを、メモリに転送される時点で決定して転送することができる。そこで、このライブラリをアドインソフトのモジュールに見立てた場合、どのアドレスにでもダウンロードすることが可能となりそうであるが、この方法ではモジュールから他のモジュールにある関数を呼び出すことができない。これは、ライブラリ関数に、他のライブラリ関数を呼び出すためのスタブ関数がないことが原因である。
【００１６】
また、仮に各ライブラリに他のライブラリ関数を呼び出すためのスタブ関数を付けても、あるライブラリが再配置された場合には、そのライブラリを参照している全てのライブラリのスタブ関数を変更する必要がある。しかしながら、フラッシュＲＯＭの場合、上書きができないので、スタブ関数を変更するためには、そのライブラリを別の場所に再配置させる必要があり、ライブラリの再配置の無限連鎖に陥ってしまうといった問題が発生する。
【００１７】
本発明はこのような問題点を解決すべく創案されたものであって、その目的は、再配置が可能で、かつ他のモジュール内の関数を呼び出すことのできるモジュール群を利用してアドインソフトを実現することで、アドインソフト開発にかかる労力の削減、アドインプログラム自体のサイズの削減、アドインソフトのダウンロードの際のメモリ資源の効率的利用、さらには情報端末装置間でのアドインソフトの転送を容易にすることのできる再配置可能なアドインソフト管理システムを提供することにある。
【００１８】
【課題を解決するための手段】
上記課題を解決するため、本発明は、情報端末装置のメモリをデータ領域とアドインソフトのプログラム格納領域とで共有するアドインソフト管理システムであって、アドインソフトを実行するための関数群を１つにまとめたモジュールをダウンロードの最小単位とし、各モジュールは、モジュール内のアドレスが相対アドレスで記述され、各モジュールの先頭にはそのモジュール内で外部から参照可能な関数全てへ分岐できる関数分岐ルーチンが配置されるとともに、予め定められた関数名のアドインソフト実行関数群が配置されており、前記情報端末装置に予め組み込まれたプログラムによって、ダウンロードされた全てのモジュールとその先頭アドレスとを前記メモリ内のデータ領域に登録して管理する手段と、前記情報端末装置に予め組み込まれたプログラムによって、ダウンロードされた全てのアドインソフト名とそのアドインソフトを構成するモジュールのモジュール名とを前記メモリ内のデータ領域に登録して管理する手段とを備えたことを特徴とする。
【００１９】
また、本発明は、呼び出したい関数のモジュール名と関数名と引数とを渡すことで、前記モジュールの先頭アドレス管理データを元に、前記モジュールの先頭に配置された関数分岐ルーチンに必要な引数を渡すことができる関数呼び出しルーチンを備え、任意のモジュールから任意の外部モジュールの関数をコールできることを特徴とする。
【００２０】
また、本発明は、アドインソフトが単一若しくは複数のモジュールで構成されるとともに、複数のアドインソフトで同一のモジュールが利用可能であることを特徴とする。
【００２２】
すなわち、本発明によるアドインソフト管理システムでは、パソコン等からアドインソフトをダウンロードする際、情報端末装置側がアドインソフトのモジュールサイズを元に、ダウンロード先のアドレスを決定して、ダウンロードを行う。そして、そのアドイン情報を、モジュール名と組にしてデータ領域に登録する。また、アドインソフト名と全ての構成モジュールとをデータ領域に登録する。さらに、アドインソフト名とアドインソフト実行関数を含むメインモジュールとの関連付けの情報もデータ領域に登録する。
【００２３】
そして、組み込まれたアドインプログラムを実行する際には、初期化やメイン処理等を行う関数があらかじめ決められた関数名で用意されているので、アドインソフト名からそれらの関数が含まれているモジュールの先頭アドレスを読み取り、実行したい処理に固有の関数名を引数にして、先程読み取ったアドレスをコールすることで、アドインソフトを起動できる。
【００２４】
また、アドインソフトのあるモジュールから他のモジュールの関数を呼び出す際には、あらかじめ本体側に用意されている関数呼び出しルーチンに、呼び出したい関数のモジュール名と関数名と引数とを渡すことで、関数の呼び出しを可能にする。
【００２５】
また、アドインソフトの情報端末装置間での送受信時、及びアドインソフトの削除時には、そのアドインソフトを構成している全モジュール名の情報を元にして送信、削除を行う。
【００２６】
さらに、モジュールをモジュールＩＤで管理し、データを管理するデータＩＤと識別するためのビットを設けることにより、モジュールＩＤをデータＩＤと同様に扱うことができ、それによってデータとモジュールとを無理なく混在させることが可能となる。
【００２７】
【発明の実施の形態】
以下、本発明の実施の形態について、図面を参照して説明する。
【００２８】
［実施の形態１］
本実施の形態１は、１つのアドインソフトを１つのモジュールで構成し、他のモジュールの関数の呼び出しは行えないように制限を持たせた場合の例である。
【００２９】
図１は、アドインソフトのダウンロードの様子を示した説明図、図２は、受信側の情報端末装置でのダウンロード処理を示すフローチャートである。
【００３０】
符号１で示すモジュールはアドインソフトのモジュールである。このアドインソフトのモジュール１は、関数分岐ルーチン１１と、関数１２〜１５とで構成されている。さらに関数１２〜１５は、モジュール外部から呼び出し可能な外部呼び出し用関数１２，１３と、モジュール内部からしか呼び出されない内部関数１４，１５とに分けられる。
【００３１】
外部呼び出し用関数１２，１３は、関数分岐ルーチン１１からジャンプできるが、内部関数１４，１５は関数分岐ルーチン１１からはジャンプできない。ただし、外部呼び出し用関数１２，１３は、本実施の形態では、アドインソフトを実行する際の呼び出し口として情報端末装置で指定された固有関数名のアドインソフト実行関数１２，１３と同一である。
【００３２】
関数分岐ルーチン１１はモジュールの先頭に配置され、引数で受け取った関数名とモジュール内の全ての外部呼び出し用関数１２，１３の関数名とを比較し、一致した関数へジャンプするように作成する。この作成は、対応するアドイン作成用のリンカで関数分岐ルーチンを自動生成できるようにしてもよい。なお、モジュール内は全て相対アドレスのみで構成されるようにコンパイルする。
【００３３】
また、図１（ａ）の符号２はモジュールアドレス表である。モジュールアドレス表２には、モジュール名２１と先頭アドレス２２とサイズ２３とが１組として登録される。なお、モジュールアドレス表２自体は、他のデータと同様の方式によりデータ領域に配置される。
【００３４】
また、図１（ａ）の符号３はアドインソフト表である。アドインソフト表３には、アドインソフト名３１とモジュール名３２とが１対１で登録される。なお、アドインソフト表３も、他のデータと同様の方式によりデータ領域に配置される。
【００３５】
図１（ａ）では、アドインソフトはダウンロードされていない。ダウンロード処理では、まずダウンロードするアドインソフト名を受信する（ステップＳ１１）。次に、ダウンロードするモジュール名を受信し（ステップＳ１２）、モジュールのサイズを受信する（ステップＳ１３）。そして、モジュールサイズ以上の連続した空き領域があるかどうかを調べ（ステップＳ１４）、空き領域があればその空き領域にモジュールをダウンロードする（ステップＳ１６）。一方、空き領域がなければガベージコレクションを行って連続した空き領域をつくり（ステップＳ１５）、その空き領域にモジュールをダウンロードする（ステップＳ１６）。そして、その先頭アドレスとサイズとをモジュールアドレス表２に登録する（ステップＳ１７）。また、アドインソフト名とモジュール名とをアドインソフト表３に登録する（ステップＳ１８）。この結果、メモリ内は図１（ｂ）に示す状態になる。
【００３６】
次に、アドインソフトの呼び出し処理について説明する。図３は、アドインソフトの呼び出し処理を示すフローチャートであり、図４（ａ）はアドインソフトの呼び出し処理の流れを模式的に示す説明図、同図（ｂ）は同図（ａ）の遷移時におけるスタックの内容を示す説明図である。以下これらを参照して説明する。
【００３７】
図４（ａ）中の符号４はアドインソフト呼び出しルーチンである。このルーチン４は、情報端末装置にあらかじめ組み込まれているプログラムの一部である。アドインソフトを呼び出す際には、まずモジュール名検索処理４１にてアドインソフト表３を参照して、呼び出すべきモジュール名を得る（ステップＳ２１）。次に、先頭アドレス取得処理４２にてモジュールアドレス表２からモジュールの先頭アドレスを求める（ステップＳ２２）。この時点（すなわち、図４（ａ）中の（１）、（２）で示す処理時点）では、スタックはアドインソフト呼び出しルーチンの処理の開始時点と同じ状態のままとなっている（図４（ｂ）の（１），（２）参照）。
【００３８】
次に、第１引数に実行したい関数名を渡し、第２引数以降に第１引数の関数の引数全てを渡して、モジュールの先頭アドレスを関数コールする（ステップＳ２３）。アドインソフトの制作に当たっては、初期化関数はＩｎｉｔ（）、メインの処理はＭａｉｎ（）というように、あらかじめ定められた関数名と引数とで処理を行うようにプログラムをつくる。従って、アドインソフト呼び出しルーチンは、呼び出すべき関数の関数名、及び引数の数や型は分かっている。
【００３９】
関数コールルーチン４３では、スタックに引数（末尾の引数から順に積む）と戻りアドレスとを積んでジャンプする。このとき、スタックの状態は図４（ｂ）の（３）のようになる。
【００４０】
関数コールがなされると、動的に配置されているアドインソフトモジュール１への処理が移ったことになる。そのため、アドインソフトモジュール１の先頭にある関数分岐ルーチン１１では、スタックから戻りアドレスと関数名とを取り出し、戻りアドレスをスタックに積み直す（ステップＳ２４）。なお、この関数分岐ルーチンでは、引数がいくつあるかは分かっていないが問題はない。この後、得られた関数名とアドインソフトモジュール１に登録されている外部呼び出し用関数の関数名とを比較して、該当する関数へと相対ジャンプを行う（ステップＳ２５）。このときのスタックの状態は、図４（ｂ）の（４）の状態となる。スタックポインタ（ＳＰ）より上にある戻りアドレスは不要となったゴミデータであり、割り込みなどの関係で違う値になっても構わない。
【００４１】
これにより、目的の関数が呼び出され、アドインソフトが起動される（ステップＳ２６）。この関数内では同一モジュール内の関数を相対アドレスで呼び出すことができる。また、あらかじめ情報処理装置に組み込まれている公開関数も絶対アドレスと関数スペックとが公開されているので、呼び出して利用することができる。
【００４２】
一連の処理が終わると、スタックに積まれていた戻りアドレスへリターンする（ステップＳ２７）。このときのスタックは、図４（ｂ）の（５）の状態となり、アドインソフト呼び出しルーチン４の処理を開始したときの状態となる。
【００４３】
図５は、アドインソフトの削除処理を示すフローチャートである。
アドインソフトを削除する際には、まず削除すべきアドインソフトを構成するアドインソフトモジュール１のモジュール名をアドインソフト表３から得た後（ステップＳ３１）、アドインソフト表３から該当アドインソフトの情報（アドインソフト名とモジュール名）を削除する（ステップＳ３２）。次に、得られたモジュール名から、モジュールアドレス表２を用いてモジュールの先頭アドレスとモジュールのサイズとを求めた後（ステップＳ３３，Ｓ３４）、モジュールアドレス表２から該当モジュールに関する情報（モジュール名、先頭アドレス、サイズ）を削除する（ステップＳ３５）。そして、最後に、得られたアドレスとサイズとを元に、該当するアドインソフトモジュール１を削除する（ステップＳ３６）。
【００４４】
［実施の形態２］
本実施の形態２は、１つのアドインソフトを複数のモジュールで構成できるようにし、あるモジュール内から外部のモジュール内の関数をコールできるようにした場合の例である。
【００４５】
図６は、本実施の形態でのアドインソフト表３を示している。実施の形態１でのアドインソフト表３（図１参照）と比較すると、１つのアドインソフト名３１に対してモジュール名３２が複数登録できるようになっている。この場合、モジュール名３２には、アドインソフト実行関数を含むモジュールを先頭に登録する。また、アドインソフト名３１を素早く検索するために、次の項へのポインタ３３を持っている。
【００４６】
図７は、受信側の情報端末装置でのダウンロード処理を示すフローチャートである。ここでは、図２に示すダウンロード処理と同じステップには同じステップ番号を付すこととし、違う処理のステップにのみ異なるステップ番号を付すこととする。
【００４７】
ダウンロード処理では、まずダウンロードするアドインソフト名を受信して（ステップＳ１１）、ダウンロードするモジュールの数を受信する（ステップＳ４１）。そして、モジュールの数の分だけ、その後の処理（ステップＳ１２〜ステップＳ１７、及びステップＳ４３）を繰り返す（ステップＳ４２）。すなわち、ダウンロードするモジュール名を受信し（ステップＳ１２）、すでに同じモジュール名が存在するか否かを、モジュールアドレス表２（図１参照）又はアドインソフト表３（図１参照）を用いて確認する（ステップＳ４３）。
【００４８】
ステップＳ４３において、同じモジュール名が存在しないと判断（ステップＳ４３でＮｏと判断）された場合には、次に、ダウンロードするモジュールのサイズを受信する（ステップＳ１３）。そして、モジュールサイズ以上の連続した空き領域があるかどうかを調べ（ステップＳ１４）、空き領域があればその空き領域にモジュールをダウンロードする（ステップＳ１６）。一方、空き領域がなければガベージコレクションを行って連続した空き領域をつくり（ステップＳ１５）、その空き領域にモジュールをダウンロードする（ステップＳ１６）。そして、その先頭アドレスとサイズとをモジュールアドレス表２に登録する（ステップＳ１７）。
【００４９】
以上の処理をモジュールの数だけ繰り返したら（ステップＳ４４）、最後に、アドインソフト名とモジュール名とをアドインソフト表３に登録する（ステップＳ１８）。
【００５０】
次に、アドインソフトの呼び出し処理について説明する。アドインソフトの呼び出し処理は、図３に示す実施の形態１での呼び出し処理と全く同様である。ただし、ステップＳ２１の処理において、アドインソフト実行関数が含まれているのは、アドインソフト表３（図６参照）の該当アドインソフトに対応するモジュールのうち先頭のモジュール名のモジュールである。
【００５１】
次に、あるモジュール内から外部のモジュール内の関数を呼び出す処理について説明する。図８は、外部モジュール内の関数の呼び出し処理を示すフローチャートであり、図９（ａ）は外部モジュール内の関数の呼び出し処理の流れを模式的に示す説明図、同図（ｂ）は同図（ａ）の遷移時におけるスタックの内容を示す説明図である。以下これらを参照して説明する。
【００５２】
図９（ａ）中の符号５は関数呼び出しルーチンである。このルーチン５は、情報端末装置にあらかじめ組み込まれているプログラムの一部である。
【００５３】
外部モジュールを呼び出す際には、まず第１引数に呼び出し先のモジュール名を渡し、第２引数に呼び出す関数名を渡し、第３引数以降に第２引数の関数の引数全てを渡して、組み込みプログラム中に用意されている関数呼び出しルーチン５をコールする（ステップＳ５１）。このときのスタックは、図９（ｂ）の（１）の状態となる。
【００５４】
関数呼び出しルーチン５では、まずスタック操作５１を行って、戻りアドレスとモジュール名とを取り出し、戻りアドレスをスタックに積み直す（ステップＳ５２）。なお、この関数呼び出しルーチンでは、引数がいくつあるかは分かっていないが問題はない。この時点で、スタックは図９（ｂ）の（２）の状態となる。
【００５５】
次に、先頭アドレスの取得処理５２にてモジュールアドレス表２からモジュールの先頭アドレスを求め（ステップＳ５３）、そのアドレスへジャンプする（ステップＳ５４）。この時点で、スタックは図９（ｂ）の（３），（４）の状態となる。つまり、（２）の状態のままである。
【００５６】
ジャンプがなされると、動的に配置されているアドインソフトモジュール１への処理が移ったことになる。つまり、呼び出し元であったアドインソフトモジュール１からは、呼び出し先のアドインソフトモジュール１ａのアドレスは分かっていなかったが、ジャンプできたことになる。この場合、上記実施の形態１とは異なり、アドインソフトモジュール１ａ内にある外部呼び出し用関数は、アドインソフト実行用関数１２，１３以外の関数１２ａ〜１５ａも存在することになる。
【００５７】
アドインソフトモジュール１ａの先頭にある関数分岐ルーチン１１ａでは、スタックから戻りアドレスと関数名とを取り出し、戻りアドレスをスタックに積み直す（ステップＳ５５）。なお、この関数分岐ルーチンでは、引数がいくつあるかは分かっていないが問題はない。この後、得られた関数名とアドインソフトモジュール１ａに登録されている外部呼び出し用関数１２ａ〜１５ａの関数名とを比較して、該当する関数へと相対ジャンプを行う（ステップＳ５６）。このときのスタックの状態は、図９（ｂ）の（５）の状態となる。スタックポインタ（ＳＰ）より上にある戻りアドレスは不要となったゴミデータであり、割り込みなどの関係で違う値になっても構わない。
【００５８】
これにより、目的の関数が呼び出される（ステップＳ５７）。この関数内では同一モジュール内の関数を相対アドレスで呼び出すことができる。また、あらかじめ情報処理装置に組み込まれている公開関数も絶対アドレスと関数スペックとが公開されているので、呼び出して利用することができる。もちろん、さらに別の外部モジュールの関数を呼び出すこともできる。
【００５９】
一連の処理が終わると、スタックに積まれていた戻りアドレスへリターンする（ステップＳ５８）。このときのスタックは、図９（ｂ）の（６）の状態となり、アドインソフト呼び出しルーチン４の処理を開始したときの状態となる。
【００６０】
図１０は、アドインソフトの削除処理を示すフローチャートである。
アドインソフトを削除する際には、まず削除すべきアドインソフトを構成するアドインソフトモジュールのモジュール名を全て調べ、バッファにコピーする（ステップＳ６１）。また、コピーしたモジュール名の数を求める（ステップＳ６２）。そして、アドインソフト表３から該当アドインソフトの情報（アドインソフト名とモジュール名）を削除する（ステップＳ６３）。
【００６１】
この後、モジュールの数の分だけ、その後の処理（ステップＳ６５〜ステップＳ７０）を繰り返す（ステップＳ６４）。すなわち、バッファから削除するモジュール名を取り出し（ステップＳ６５）、すでに同じモジュール名が存在するか否かを、モジュールアドレス表２又はアドインソフト表３を用いて確認する（ステップＳ６６）。
【００６２】
ステップＳ６６において、同じモジュール名が存在する場合（ステップＳ６６でＹｅｓと判断された場合）には、このモジュールは削除せずに次のループへと移る。
【００６３】
一方、ステップＳ６６において、同じモジュール名が存在しない場合（ステップＳ６６でＮｏと判断された場合）には、得られたモジュール名から、モジュールアドレス表２を用いてモジュールの先頭アドレスとモジュールのサイズとを求めた後（ステップＳ６７，Ｓ６８）、モジュールアドレス表３から該当モジュールに関する情報（モジュール名、先頭アドレス、サイズ）を削除する（ステップＳ６９）。そして、最後に、得られたアドレスとサイズとを元に、該当するアドインソフトモジュールを削除する（ステップＳ７０）。
【００６４】
以上の処理を、モジュールの数だけ繰り返して終了する（ステップＳ７１）。
［実施の形態３］
本実施の形態３は、フラッシュＲＯＭなどのページ単位でしかリフレッシュできないメモリ媒体の例である。
【００６５】
フラッシュＲＯＭは、ビットを１から０に落とすことは任意のビット単位で可能であるが、ビットを０から１にすることはページ単位でのみ可能となっている。従って、未使用のページは全バイトＦＦｈで埋まっており、ビット落としで有効なデータを書き込み、不要となったデータは００ｈを上書きすることで削除されていると見なすことができる。また、ページ内の全データが不要となったら、ページをリフレッシュすることで、全バイトＦＦｈの状態に戻る。
【００６６】
図１１は、モジュールアドレス表２ｂを示している。実施の形態１，２と異なり、アドレス情報を絶対アドレスで管理するのではなく、モジュールごとに一意に定めるモジュールＩＤ２４にて管理する。モジュールＩＤのＭＳＢは１とする。また、モジュールのサイズの情報は特に必要はない。
【００６７】
図１２は、フラッシュＲＯＭのページの構造とガベージコレクション後の状態とを示す説明図である。
【００６８】
ページ６は、ページヘッダ領域６１とセクタ管理領域６２とセクタ領域６３とに分かれている。使用中のページ６には論理ページ番号を１から順に割り当てていく。また、ページヘッダ領域６１には、論理ページ番号を書き込む領域を用意し、未使用ページならＦＦｈ、使用中のページなら論理ページ番号、削除済みのページなら００ｈをそれぞれ書き込むことで、ページを管理する。
【００６９】
セクタ領域６３は適当な数（６３１，６３２，・・・）に分割する。セクタ管理領域６２も同じ数（６２１，６２２，・・・）に分割する。ここでは、分割した要素をそれぞれセクタ、セクタ管理番号と呼ぶことにする。
【００７０】
セクタ６３１，６３２，・・・はデータ等を実際に格納する領域である。セクタ管理番号６２１，６２２，・・・は、対応するセクタを識別するためのものである。セクタ管理番号「００００ｈ」（６２２）は、対応するセクタ６３２が削除済みセクタであることを示している。ただし、削除済みセクタは全て「００ｈ」で埋まっているとは限らない。
【００７１】
セクタ管理番号「ＦＦＦＦｈ」（６２４）は、対応するセクタ６３４が空きセクタであることを示している。セクタ管理番号は、全データが一意に定まるデータＩＤと一致する。従って、同じデータＩＤのセクタが連続している場合には、１つのデータが複数セクタにまたがっていることを示している。
【００７２】
セクタ管理番号「８００１ｈ〜８ＦＦＦｈ」（６２３）は、対応するセクタ６３３がアドインソフトセクタであることを示している。セクタ管理番号は、モジュールＩＤである。同じモジュールＩＤのセクタが連続している場合は、セクタ管理番号「８０００ｈ」は使わない。
【００７３】
データＩＤから該当データの先頭セクタのアドレスを求める処理はどのような処理であっても構わない。この処理は、本発明に直接関係する部分ではないので、詳細な説明は省略するが、一例として情報端末装置の起動時に全ページのセクタ管理領域を調べ、ＲＡＭ上に対応テーブルを作るなどの方法がある。
【００７４】
モジュールＩＤのＭＳＢを０にした値は、すでに使用中のデータＩＤと同じ値にならないようにすると、この値をデータＩＤと見なすことで、上記の処理により該当モジュールの先頭セクタのアドレスを求めることができる。
【００７５】
このように構成すると、モジュールの先頭アドレスを求める処理を、モジュールアドレス表からモジュールＩＤを求め、求めたモジュールＩＤからモジュールの先頭アドレスを求める処理に置き換えることができる。また、モジュールアドレス表からサイズを求める処理を、セクタ管理番号の同じ番号の並ぶ数から計算する処理に置き換えることができる。つまり、モジュールの本体を削除するのではなく、セクタ管理番号を「００００ｈ」に書き換えることで、前記実施の形態１，２で説明した各処理が、同様の手順で行えることになる。
【００７６】
ところで、このフラッシュＲＯＭのシステムにおいては、削除済みセクタを空きセクタに戻さないと、セクタの再利用ができないので、必ずガベージコレクションを行う必要がある。
【００７７】
図１３は、このガベージコレクション処理を示すフローチャートである。
まず、転送元としてメモリ整理を行うページを探す（ステップＳ８１）。次に、転送先になる未使用ページを探し（ステップＳ８２）、未使用ページがあれば、その後の処理（ステップＳ８５〜ステップＳ８７）を、セクタの数だけ繰り返す（ステップＳ８４）。一方、未使用ページがなければ、削除済みページをリフレッシュして、未使用ページとした後（ステップＳ８３）、その後の処理（ステップＳ８５〜ステップＳ８７）を、セクタの数だけ繰り返す（ステップＳ８４）。
【００７８】
すなわち、転送元のセクタ管理番号が「００００ｈ」又は「ＦＦＦＦｈ」かどうかを調べる（ステップＳ８５）。ステップＳ８５において、転送元のセクタ管理番号が「００００ｈ」又は「ＦＦＦＦｈ」であれば、繰り返し処理を終了して（ステップＳ８８）、次のループへと移る。一方、ステップＳ８５において、転送元のセクタ管理番号が「００００ｈ」又は「ＦＦＦＦｈ」でなければ、転送元のセクタの内容を転送先のセクタへコピーする（ステップＳ８６）。また、転送元のセクタ管理番号を転送先へコピーする（ステップＳ８７）。ただし、転送先のセクタは端から詰めて使用していく。また、データＩＤから、対応する先頭セクタのアドレスを求めるためのテーブル等を必要に応じて更新する。
【００７９】
以上の処理を、セクタの数だけ繰り返した後（ステップＳ８８）、最後に、転送元の論理ページ番号を転送先にコピーし（ステップＳ８９）、転送元のページヘッダを削除済みの「００ｈ」にする（ステップＳ９０）。
【００８０】
このような一連の処理により、データとアドインソフトの違いを意識することなく、データのみを扱っていたときと同様の処理でガベージコレクションを行うことができる。
【００８１】
最後に、アドインソフトの情報端末装置間での転送について説明する。
図１４は、アドインソフトの転送処理を示すフローチャートである。
【００８２】
受信側の情報端末装置では、通常のダウンロード処理と同じ処理を行う。すなわち、送信先は、まずアドインソフト名を送信し（ステップＳ９１）、次にアドインソフトを構成するモジュールの数を求めて送信した後（ステップＳ９２）、その後の処理（ステップＳ９４〜ステップＳ９６）を、モジュールの数だけ繰り返す（ステップＳ９３）。
【００８３】
すなわち、モジュール名を送信し（ステップＳ９４）、次にモジュールサイズを求めて送信する（ステップＳ９５）。そして、モジュールの先頭アドレスを求めて、モジュールの内容を送信する（ステップＳ９６）。つまり、先頭アドレスは送信しない。以上の処理をモジュールの数だけ繰り返して終了する（ステップＳ９７）。
【００８４】
【発明の効果】
本発明の再配置可能なアドインソフト管理システムによれば、アドインソフトを開発する際に、１つのアドインソフトを複数のモジュールに分けて作成でき、また１つのモジュールを複数のアドインソフトで共用できるので、アドインソフトの開発に自由度を持たせることができ、開発労力を軽減することができる。また、アドインソフト間で処理の重複を減らすことができるので、プログラムサイズを小さくすることができる。また、アドインソフトが再配置可能であるため、アドインソフトを何度も入れ替えてもメモリの利用状況に隙間ができず、効率の良いメモリ使用が可能となる。また、情報端末装置間でメモリの使用状況の違いに関係なく、自由にアドインソフトを転送できるので、使用方法に制限の少ないアドインソフト管理システムを提供できる。また、ダウンロードできるアドインソフトの数やサイズ等の制約も少なく、データ領域を一杯まで利用することができる。また、フラッシュＲＯＭなどの、任意のデータの上書きができないメモリ媒体においても利用可能となり、情報端末装置の構成に自由度を持たせることができる。
【図面の簡単な説明】
【図１】本発明のアドインソフト管理システムにおいて、アドインソフトのダウンロードの様子を示した説明図である。
【図２】受信側の情報端末装置でのダウンロード処理を示すフローチャートである。
【図３】アドインソフトの呼び出し処理を示すフローチャートである。
【図４】（ａ）はアドインソフトの呼び出し処理の流れを模式的に示す説明図、（ｂ）は（ａ）の遷移時におけるスタックの内容を示す説明図である。
【図５】アドインソフトの削除処理を示すフローチャートである。
【図６】実施の形態２でのアドインソフト表を示す説明図である。
【図７】受信側の情報端末装置でのダウンロード処理を示すフローチャートである。
【図８】外部モジュール内の関数の呼び出し処理を示すフローチャートである。
【図９】（ａ）は外部モジュール内の関数の呼び出し処理の流れを模式的に示す説明図、（ｂ）は（ａ）の遷移時におけるスタックの内容を示す説明図である。
【図１０】アドインソフトの削除処理を示すフローチャートである。
【図１１】モジュールアドレス表を示す説明図である。
【図１２】フラッシュＲＯＭのページの構造とガベージコレクション後の状態とを示す説明図である。
【図１３】ガベージコレクション処理を示すフローチャートである。
【図１４】アドインソフトの転送処理を示すフローチャートである。
【図１５】従来の共有ライブラリ管理機構において、プログラムを動的に配置する処理を示した説明図である。
【図１６】従来のアドインソフト管理方式でのフラッシュＲＯＭの一部を示した説明図である。
【符号の説明】
１，１ａ  アドインソフトモジュール
１１，１１ａ  関数分岐ルーチン
１２，１３  外部呼び出し用関数（アドインソフト実行関数）
１２ａ〜１５ａ  外部呼び出し用関数
１４，１５  内部関数
２，２ａ，２ｂ  モジュールアドレス表
２１  モジュール名
２２  先頭アドレス
２３  サイズ
３  アドインソフト表
３１  アドインソフト名
３２  モジュール名
３３  次の項へのポインタ
４  アドインソフト呼び出しルーチン
４１  モジュール名検索処理
４２  先頭アドレス取得処理
４３  関数コール処理
５  関数呼び出しルーチン
５１  スタック操作処理
５２  先頭アドレス取得処理
５３  ジャンプ処理
６  ページ
６２  セクタ管理領域
６２１  データセクタを示すセクタ管理番号
６２２  削除済みセクタを示すセクタ管理番号
６２３  アドインソフトセクタを示すセクタ管理番号
６２４  空きセクタを示すセクタ管理番号
６３  セクタ領域
６３１  データセクタ
６３２  削除済みセクタ
６３３  アドインソフトセクタ
６３４  空きセクタ
【図１】
0003670162.tif 000002
【図２】
0003670162.tif 000003
【図３】
0003670162.tif 000004
【図４】
0003670162.tif 000005
【図５】
0003670162.tif 000006
【図６】
0003670162.tif 000007
【図７】
0003670162.tif 000008
【図８】
0003670162.tif 000009
【図９】
0003670162.tif 000010
【図１０】
0003670162.tif 000011
【図１１】
0003670162.tif 000012
【図１２】
0003670162.tif 000013
【図１３】
0003670162.tif 000014
【図１４】
0003670162.tif 000015
【図１５】
0003670162.tif 000016
【図１６】
0003670162.tif 000017