(57)【要約】【課題】  複数のメモリ空間に対応していないマルチタスクプログラムの変更量を抑えて複数のメモリ空間に対応しているマルチタスクプログラムで動作させる。【解決手段】  複数のメモリ空間に対応していないマルチタスクプログラムの中間ファイルから予め前記入力手段により入力された共有シンボルを抽出し（ＳＴ１０２）、この抽出した共有シンボルから共有シンボル定義を中間ファイル毎に作成し（ＳＴ１０３）、この中間ファイル毎に作成した共有シンボル定義を新たな中間ファイルに割り当て（ＳＴ１０４）る。そして、共有シンボル定義と新たな中間ファイルとを利用して複数のメモリ空間に対応していないマルチタスクプログラムを複数のメモリ空間に対応しているマルチタスクプログラムで実行する。【選択図】図２
2008102915.tif 000002
【特許請求の範囲】
【請求項１】
複数のメモリ空間に対応しているマルチタスクプログラムと複数のメモリ空間に対応していないマルチタスクプログラムを有するとともにデータを入力する入力手段を有する情報処理装置において、
前記複数のメモリ空間に対応しているマルチタスクプログラムの第１の中間ファイルから予め前記入力手段により入力された共有シンボルを抽出する抽出手段と、
この抽出手段で抽出した共有シンボルから前記第１の中間ファイル毎に共有シンボル定義を作成する共通シンボル定義作成手段と、
この作成手段で前記第１の中間ファイル毎に作成した共有シンボル定義を第２の中間ファイルに割り当てる割当手段と、
前記共有シンボル定義と前記第２の中間ファイルとを利用して前記複数のメモリ空間に対応していないマルチタスクプログラムを前記複数のメモリ空間に対応しているマルチタスクプログラムで実行する実行手段とを具備することを特徴とする情報処理装置。
【請求項２】
前記抽出手段は、前記第１の中間ファイルから抽出される共有シンボルを固定の名前空間にて定義することを特徴とする請求項１記載の情報処理装置。
【請求項３】
コンピュータに、
複数のメモリ空間に対応しているマルチタスクプログラムの第１の中間ファイルから予め外部から入力された共有シンボルを抽出させる抽出機能と、
この抽出機能で抽出させた共有シンボルから前記第１の中間ファイル毎に共有シンボル定義を作成させる共通シンボル定義作成機能と、
この作成手機能で前記第１の中間ファイル毎に作成させた共有シンボル定義を第２の中間ファイルに割り当てさせる割当機能と、
前記共有シンボル定義と前記第２の中間ファイルとを利用して前記複数のメモリ空間に対応していないマルチタスクプログラムを前記複数のメモリ空間に対応しているマルチタスクプログラムで実行させる実行機能とを実現させる情報処理クプログラム。
【請求項４】
前記抽出機能は、前記中間第１のファイルから抽出させる共有シンボルを固定の名前空間にて定義するものである請求項３記載の情報処理プログラム。
【請求項５】
前記割当機能は、前記複数の共有シンボルを連続したメモリ空間に割り当てるものである請求項３記載の情報処理プログラム。
【請求項６】
前記実行機能は、複数のメモリ空間に対応しているマルチタスクプログラムの初期関数を実行する前に、前記共有シンボルを使用可能にするための関数を呼び出すものである請求項３記載の情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のメモリ空間に対応した共有シンボルを持つマルチタスクプログラムを有する情報処理装置及び情報処理プログラムに関する。
【背景技術】
【０００２】
従来、プロセス間でシンボルを共有するための手法として、プログラムリンク時に、仮想アドレス上での配置位置を決める仮想アドレス配置プラン生成部と、仮想メモリ空間にロードする配置プラン対応ローダを備えることにより、共通のシンボルを複数のプロセス間で共有することが可能となるものが知られている（例えば、特許文献１参照）。
【特許文献１】特開２００６―４８４３１
【発明の開示】
【発明が解決しようとする課題】
【０００３】
特許文献１に記載されたものでは、当初から複数のメモリ空間に対応しているマルチタスクプログラムを開発するためには有効であるが、複数のメモリ空間に対応していないマルチタスクプログラムを複数のメモリ空間に対応させるためにはソースコードに大きな変更を加える必要がある。
【０００４】
複数のメモリ空間に対応していないマルチタスクプログラムでは大域変数はすべてのタスクから参照することが出来る。しかし、複数のメモリ空間に対応しているマルチタスクプログラムでは、異なるメモリ空間上で動作するタスク間で、同一シンボルの大域変数を参照することが出来ない。
【０００５】
そのため、複数のメモリ空間に対応していないマルチタスクプログラムを複数のメモリ空間に対応しているマルチタスクプログラムに変更するためにはソースコードを大きく変更しなければならない。
【０００６】
しかし、プログラム開発において、開発期間を短縮するために既存のプログラムを出来るだけ利用することが重要となってくる。
【０００７】
本発明は上記事情に鑑みてなされたものであって、その目的は、複数のメモリ空間に対応していないマルチタスクプログラムのソースコードの変更量を抑えて、異なるメモリ空間で動作するマルチタスクプログラム間で、複数のメモリ空間に対応していないマルチタスクプログラムと同様に、同一シンボルの参照を可能にする情報処理装置及び情報処理プログラムを提供することにある。
【課題を解決するための手段】
【０００８】
本発明は、複数のメモリ空間に対応しているマルチタスクプログラムと複数のメモリ空間に対応していないマルチタスクプログラムを有するとともにデータを入力する入力手段を有する情報処理装置において、複数のメモリ空間に対応しているマルチタスクプログラムの第１の中間ファイルから予め前記入力手段により入力された共有シンボルを抽出し、この抽出した共有シンボルから前記第１の中間ファイル毎に共有シンボル定義を作成し、この第１の中間ファイル毎に作成した共有シンボル定義を第２の中間ファイルに割り当て、共有シンボル定義と第２の中間ファイルとを利用して複数のメモリ空間に対応していないマルチタスクプログラムを複数のメモリ空間に対応しているマルチタスクプログラムで実行するものである。
【発明の効果】
【０００９】
本発明によると、複数のメモリ空間に対応していないマルチタスクプログラムのソースコードの変更量を抑えることができる上、異なるメモリ空間で動作するマルチタスクプログラム間で、複数のメモリ空間に対応していないマルチタスクプログラムと同様に、同一シンボルの参照を可能にする情報処理装置及び情報処理プログラムを提供できる。
【発明を実施するための最良の形態】
【００１０】
以下、本発明の最良の実施の形態について図面を参照して説明する。この実施の形態は、複数のメモリ空間に対応しているマルチタスクプログラムと複数のメモリ空間に対応していないマルチタスクプログラムとを有する情報処理装置及びその情報処理プログラムに、本発明を適用した場合である。なお、プログラムの言語の一例としてGNU Cを用いた場合で説明するがこれに限るものではない。
【００１１】
図１は、情報処理装置１の要部構成を概略的に示す図である。図１に示すように、情報処理装置１は、キーボードなどからの外部信号を入力するための入力装置１０、ディスプレイなどの処理結果を出力するための出力装置１２、後述する複数のメモリ空間に対応していないマルチタスクプログラムを使用して共有シンボルを設定するためのプログラムやその共有シンボルが設定されたマルチタスクプログラムを複数のメモリ空間に対応しているマルチタスクプログラムで実行するためのプログラム等の各種プログラムやデータを保存するための外部記憶装置１３、外部記憶装置１３に記憶されたプログラムを実行するＣＰＵ１４、ＣＰＵ１４がプログラムを実行する際に必要となるデータを保存するメモリ１５から構成される。
【００１２】
次に複数のメモリ空間に対応していないマルチタスクプログラムを使用して共有シンボルを設定する処理について説明する。図２は、複数のメモリ空間に対応していないマルチタスクプログラムを使用して共有シンボルを設定するための処理の要部を示すフローチャートである。
【００１３】
先ずＣＰＵ１４は、ソースファイル（複数のメモリ空間に対応していないマルチタスクプログラム）のコンパイルを行い、複数のメモリ空間に対応しているマルチタスクプログラムの中間ファイルを作成する（ＳＴ１０１）。続いて、ＣＰＵ１４は作成された中間ファイルから共有したい共有シンボルを抽出する（ＳＴ１０２：抽出手段）。なお、抽出する共有シンボルは、予め入力装置１１を用いて情報処理装置１のオペレータにより入力され、メモリ１５の所定のエリアに記憶されている。このメモリ１５に記憶されている共有シンボルと同一のシンボルがステップＳＴ１０１で作成された中間ファイルから抽出される。
【００１４】
また、シンボルを抽出するために、既存のソースファイル中で、シンボルを共有したい共有シンボルだけ、宣言を以下のように変更する。
【００１５】
extern int shared_sym1;
と宣言されている場合は
__attribute__(section(“.sampleshared”), unused, weak) int shared_sym1;
と変更する。このように、定義することにより、図３に示すように、GNU Cで使われるセクションテーブルＴ１において、“sampleshaerd”が固定の名前空間として付されたsampleshaerdセクションが追加され、共有したいシンボルをsamplesharedセクションに集めることが可能となる。これにより、sampleshaerdセクションに集められたシンボルを全て抽出することにより、全ての共有したいシンボルを抽出することが可能となる。又、前述の宣言ではexternの代わりに、__attribute__(section(“.sampleshared”), unused, weak)を記述しているが、記述を簡単にするために、#defineで定義しておくことにより、更に簡単に記述することができる。
【００１６】
ここで、図４に示すように、中間ファイルＡに共有したいシンボルとしてshared_sym1, shared_sym5, shared_sym6が、中間ファイルＢに共有したいシンボルとしてshared_sym1, shared_sym2が、中間ファイルＣに共有したいシンボルとしてshared_sym1, shared_sym4, shared_sym5が、中間ファイルＤに共有したいシンボルとしてshared_sym2, shared_sym3, shared_sym6がステップＳＴ１０２により抽出されているとする。このときすべての中間ファイルＡからＤについてそれぞれ共有したいシンボルを定義して、共有シンボル定義を作成する（ＳＴ１０３：共通シンボル定義作成手段）。これにより、各中間ファイルＡからＤにおいて、共有シンボル定義が作成される。
【００１７】
次に抽出した共有シンボルのリンク先を同一にするために、新規中間ファイルを作成する、すなわち、中間ファイル毎に作成した共有シンボル定義を新規中間ファイルに割り当てる（ＳＴ１０４：割当手段）。なお、新規中間ファイルを作成するために、ソースファイル（プログラムＡからＤ）では次のように宣言が行われている。
【００１８】
__attribute__(section(“.sampleshared”), unused) int shared_sym1;
__attribute__(section(“.sampleshared”), unused) char shared_sym2;
__attribute__(section(“.sampleshared”), unused) long shaerd_sym3;
__attribute__(section(“.sampleshared”), unused) long shaerd_sym4;
__attribute__(section(“.sampleshared”), unused) char shaerd_sym5;
__attribute__(section(“.sampleshared”), unused) char shared_sym6;
図５は、このように定義された各ソースファイル（プログラムＡからＤ）の共有シンボルと新規中間ファイルにおける共有空間の共有シンボルとの関係を示すテーブルＴ２である。図４と対応して、異なるメモリ空間を用いるプログラムＡからＤ（中間ファイルＡからＤのソースプログラム）のそれぞれに抽出された共有シンボルが格納されている。なお、この際、各プログラムにおいて同じ共有シンボルが抽出されているときはテーブルＴ２内の同じ行に格納される。例えば、“shared_sym1”はプログラムＡとプログラムＣの中間ファイルで抽出されているため、同じ行に格納される。また“shared_sym2”はshared_sym1”とは異なるシンボルであるため、“shared_sym1”が格納された行とは異なる行に格納される。このように、同テーブルＴ２の共有空間のエリアに各中間ファイルから抽出した異なるシンボル“shared_sym1”から“shared_sym6”が連続したメモリ空間にそれぞれ格納される。
【００１９】
このように定義を行うことにより、例えば、図５に示すように、各プロセスが、shared_sym1にアクセスした場合に、同一の領域を参照することが可能となる。また、この新規中間ファイルはこの実施の形態ではシンボル定義だけを行っているので、全てのソースファイルから参照される定義ファイルがあるならば、そこで、定義しても構わない。さらに、全てのソースファイルから参照できるのであれば、どのファイルに定義しても構わない。尚、中間ファイルＡ乃至Ｄを第１の中間ファイル、新規中間ファイルを第２の中間ファイルと呼んでもよい。
【００２０】
次に、ソースファイル（プログラムＡからＤ）と、ステップＳＴ１０４で作成した新規中間ファイルのリンクを行い、複数のメモリ空間に対応してないマルチタスクプログラムを複数のメモリ空間に対応しているマルチタスクプログラムに対応させるための宣言を作成する（ＳＴ１０５）。ここで、共有シンボルのアドレスとサイズを指定するために、リンカスクリプトに、
.sampleshared 0x10000000( COPY ) :
{
shared_head = . ;
*(.sampleshared)
}
を追加する。これにより、samplesharedは0x10000000番地に定義される。また、shared_headを追加することにより、ソースファイルからシンボル指定で共有エリアの先頭にアクセスすることが可能となる。このリンカスクリプトの対応により、図６のテーブルＴ３に示すように、共有シンボルとなったシンボルのアドレスを“0x10000000”に集約することが出来る。また、共有空間をプログラムから利用するための、関数
void  __attribute__((constructor)) shared_define_start(void)
{
g_shm_id = shmget((key_t)0x12345678, 64, IPC_CREAT|0666);
g_shm_ptr = shmat(g_shm_id, (void *)&shared_head, SHM_REMAP);
return;
}
が実行されることにより、図５のテーブルＴ２に設定された共有空間を複数のメモリ空間に対応しているマルチタスクプログラムから利用可能とすることができる。また、この関数は後述する図７のフローチャートに示すとおり、main関数の前に呼び出されるようにリンクを行う。
【００２１】
次に共有シンボルが設定されたマルチタスクプログラムを複数のメモリ空間に対応しているマルチタスクプログラムで実行する処理について説明する。図７は、共有シンボルが設定されたマルチタスクプログラムを複数のメモリ空間に対応しているマルチタスクプログラムで実行する処理の要部を示すフローチャートである。
【００２２】
プログラム実行の指示を取得したときには、ＣＰＵ１４は、最初に共有空間を使用可能にするための関数呼び出しを行う（ＳＴ２０１）。そして、ＣＰＵ１４は実行するmain関数を呼び出し（ＳＴ２０２）、main関数の中の処理を実行する（ＳＴ２０３，実行手段）。
【００２３】
この実施の形態によると、既存のコード、すなわち、複数のメモリ空間に対応していないマルチタスクプログラム中に宣言していたシンボル定義の定義方法を変更するだけで、共有シンボルを利用するための関数を使用して、複数のメモリ空間に対応しているマルチタスクプログラムで、大域変数を相互に参照することが可能となる。すなわち、複数のメモリ空間に対応していないマルチタスクプログラムのソースコードの変更量を抑えて、異なる複数のメモリ空間で動作するマルチタスクプログラム間で、複数のメモリ空間に対応していないマルチタスクプログラムと同様に、同一シンボルの参照を可能にすることができる。
【００２４】
また、中間ファイルから抽出させる共有シンボルを固定の名前空間にて定義するため、簡単に共有シンボルを抽出することが可能となる。
【００２５】
さらに、複数の共有シンボルを連続したメモリ空間に割り当てるものであるため、共有シンボルを使用可能にするための機能を１つにすることが可能となる。
【００２６】
さらに、複数のメモリ空間に対応しているマルチタスクプログラムを実行する前に、複数のメモリ空間に対応していないマルチタスクプログラムの共有空間を使用可能にするための関数を呼び出すため、main関数の処理を気にすることなく、複数のメモリ空間に対応していない既存のマルチタスクプログラムを利用することが可能となる。
【００２７】
なお、本実施の形態では、複数のメモリ空間に対応しているマルチタスクプログラムとして、異なるメモリ空間で動作するプログラムを例示した。ここで、メモリ空間が異なるという意味は、同一メモリ上の名前空間が異なる場合と同意である。すなわち、同一のメモリ上であっても、プログラムから見た場合に、異なる空間であれば、実メモリであってもあるいは仮想メモリであっても本発明を適用できるものである。
【００２８】
また、本実施の形態では情報処理装置１内部に発明を実施する機能が予め記録されている場合で説明したが、これに限らず同様の機能をネットワークから装置にダウンロードしても良いし、同様の機能を記録媒体に記憶させたものを装置にインストールしても良い。記録媒体としては、ＣＤ−ＲＯＭ等プログラムを記憶でき、かつ、装置が読取り可能な記録媒体であれば、その形態は何れの形態であっても良い。またこのように、予めインストールやダウンロードにより得る機能は装置内部のオペレーティングシステム（ＯＳ）等と協同してその機能を実現させるものであっても良い。
【００２９】
なお、本発明は、上述した実施の形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できるものである。
【図面の簡単な説明】
【００３０】
【図１】本発明の実施の形態における情報処理装置の要部構成を概略的に示す図。
【図２】同実施の形態における複数のメモリ空間に対応しているマルチタスクプログラムに共有シンボルを設定するためのプログラムの処理の要部を示すフローチャート。
【図３】同実施の形態におけるプログラム言語で用いられるセクションテーブルの構成を示す図。
【図４】同実施の形態における中間ファイルから抽出した共有シンボルと新規中間ファイルに作成した共有シンボルとの関係を説明するための図。
【図５】同実施の形態における各プログラムにおける共有シンボルと共有空間における共有シンボルとの関係を説明するための図。
【図６】同実施の形態におけるアドレスとシンボル名との関係を示す図。
【図７】同実施の形態における共有シンボルが設定されたマルチタスクプログラムを複数のメモリ空間に対応しているマルチタスクプログラムで実行する処理の要部を示すフローチャート。
【符号の説明】
【００３１】
１…情報処理装置、１１…入力装置、１２…出力装置、１３…外部記憶装置、１４…ＣＰＵ、１５…メモリ、Ｔ１〜Ｔ３…テーブル
【図１】
2008102915.tif 000003
【図２】
2008102915.tif 000004
【図３】
2008102915.tif 000005
【図４】
2008102915.tif 000006
【図５】
2008102915.tif 000007
【図６】
2008102915.tif 000008
【図７】
2008102915.tif 000009