(57)【要約】【課題】並行処理を行う機能を有するプログラムを並行処理の機能を損なうことなく逐次処理を行う機能を有するプログラムに変換できるプログラム変換の技術を提供する。【解決手段】プログラム変換処理部５は、基本ブロックのリストを基本ブロック保持部１３から、メッセージ対応情報をオブジェクト情報保持部３から読み出す。メッセージ対応情報は、メッセージIDをメソッド呼び出しステートメントに対応付けるためのものである。読み出したメッセージ対応情報に基づき、基本ブロックを指示文に従って順次実行されるような基本ブロックに変換する。変換処理を行うことにより得られた基本ブロックのリストを、基本ブロック保持部１３に出力する。これにより、基本ブロック保持部１３に保持される基本ブロックのリストが更新されることになる。【選択図】図２
2009258962.tif 000002
【特許請求の範囲】
【請求項１】
第１のオブジェクトと第２のオブジェクトとが個別に処理を実行する並行処理が可能なプログラムを、前記第１のオブジェクトによる処理の終了に引続いて前記第２のオブジェクトによる処理を実行する逐次処理が可能なプログラムに変換する装置であって、
前記プログラムの実行に際して前記第１のオブジェクトと前記第２のオブジェクトとの間で行われるメッセージ通信において、前記第１のオブジェクトから前記第２のオブジェクトに送信される並行処理開始の要求メッセージ、及び予め前記プログラムに挿入されている、逐次処理が可能な箇所に係わる情報を保持する保持部と、
前記保持部に保持される前記逐次処理が可能な箇所に係わる情報により特定される前記プログラム中の箇所を、前記第２のオブジェクトによる逐次処理が可能な箇所かどうか識別する識別部と、
前記識別部が前記情報により特定される前記プログラム中の箇所を、前記第２のオブジェクトによる逐次処理が可能な箇所として識別した場合に、前記保持部に保持される前記並行処理開始の要求メッセージを、前記逐次処理開始の要求メッセージに変更するメッセージ変更処理部と、
少なくとも前記メッセージ変更処理部により変更された後のメッセージを、前記識別部により識別されたプログラムにおける前記箇所内の適宜な位置に含ませることにより、前記プログラムを前記逐次処理が可能なプログラムに変換する変換処理部と、
を備えるプログラム変換装置。
【請求項２】
請求項１記載のプログラム変換装置において、
前記並行処理が可能なプログラムの動的実行ステップ数の推定値と、前記逐次処理が可能な箇所として識別された前記プログラムの箇所の動的実行ステップ数の推定値と、を算出する動的実行ステップ数算出部と、
前記動的実行ステップ数算出部により算出された前記動的実行ステップ数の推定値に基づき、評価指標を算出する評価指標算出部と、
を更に備え、
前記評価指標算出部により算出された評価指標に基づき、前記変換を実行するかどうか判断するようにしたプログラム変換装置。
【請求項３】
請求項１記載のプログラム変換装置において、
前記並行処理が可能なプログラム、及び前記逐次処理が可能な箇所として識別された前記プログラムの箇所に予め付加された優先度を示す情報に基づき、前記箇所内における前記並行処理開始の要求メッセージを挿入するための適宜な位置を決定するようにしたプログラム変換装置。
【請求項４】
請求項３記載のプログラム変換装置において、
前記プログラムの前記箇所内における前記並行処理開始の要求メッセージの挿入位置を挟む位置に、前記並行処理が可能なプログラムを実行する可能性のあるスレッド同士による逐次処理を夫々挿入するようにしたプログラム変換装置。
【請求項５】
請求項３記載のプログラム変換装置において、
前記プログラムの前記箇所内における前記並行処理開始の要求メッセージの挿入位置を挟む位置に、前記プログラム、及び前記逐次処理が可能な箇所として識別された前記プログラムの箇所に付加された優先度を示す情報に基づき、実行優先度を変更する処理を挿入するようにしたプログラム変換装置。
【請求項６】
第１のオブジェクトと第２のオブジェクトとが個別に処理を実行する並行処理が可能なプログラムを、前記第１のオブジェクトによる処理の終了に引続いて前記第２のオブジェクトによる処理を実行する逐次処理が可能なプログラムに変換する装置において、
前記プログラムの実行に際して前記第１のオブジェクトと前記第２のオブジェクトとの間で行われるメッセージ通信において、前記第１のオブジェクトから前記第２のオブジェクトに送信される並行処理開始の要求メッセージ、及び予め前記プログラムに挿入された、逐次処理が可能な箇所に係わる情報を保持する第１のステップと、
前記第１のステップにおいて保持される前記逐次処理が可能な箇所に係わる情報により特定される前記プログラム中の箇所を、前記第２のオブジェクトによる逐次処理が可能な箇所かどうか識別する第２のステップと、
前記第２のステップにおいて前記情報により特定される前記プログラム中の箇所を、前記第２のオブジェクトによる逐次処理が可能な箇所として識別した場合に、前記第１のステップにおいて保持される前記並行処理開始の要求メッセージを、前記逐次処理開始の要求メッセージに変更する第３のステップと、
少なくとも前記第３のステップにおいて変更された後のメッセージを、前記第２のステップにおいて識別されたプログラムにおける前記箇所内の適宜な位置に含ませることにより、前記プログラムを前記逐次処理が可能なプログラムに変換する第４のステップと、
を備えるプログラム変換方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、第１のオブジェクトと第２のオブジェクトとが個別に処理を実行する並行処理が可能なプログラムを、上記第１のオブジェクトによる処理の終了に引続いて上記第２のオブジェクトによる処理を実行する逐次処理が可能なプログラムに変換する方法、及び装置に関する。
【背景技術】
【０００２】
従来、２以上のプログラムを並列に動作させるための並行処理システムにおいて、プログラマが通信方式や呼び出し方式を指定しなくても、最適な通信方式や最適な呼び出し方式を実行することができ、効率良い並行処理を行えるようにすることを目的とした提案がなされている。該提案には、オブジェクト（プログラムが記述したプログラムモジュールの１種で、オブジェクト指向プログラムのこと。後述する実行プログラム中に含まれる。）間でのメッセ−ジ通信に際し、メッセージ受信側オブジェクトと、メッセージ送信側オブジェクトとを同期させて実行するか、又は非同期で実行するかを決定する手法が開示されている（例えば特許文献１参照）。また、所謂マルチプロセス（複数のプロセスを適宜切り換えながら並行して実行することができる、OSの機能のこと。）環境下において、オブジェクト指向の概念における同期メッセージ通信、及び非同期メッセージ通信を容易に実現できるようにすることを目的とした提案もなされている。該提案には、メッセージに含まれる通信方式情報に基づき、メッセージ送信側オブジェクトとメッセージ受信側オブジェクトとの間で同期通信を行うか非同期通信を行うかを決定するためのメッセージ通信フレームワークについて開示されている（例えば特許文献２参照）。
【０００３】
【特許文献１】特開平8-123699号公報
【特許文献２】特開2001-154862号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
オブジェクト指向によるプログラミングにおいては、プログラミングの対象になるシステムが、データ（例えば、C言語では、構造体と呼ばれる変数の集合体のこと。）、及び手続き（例えば、C言語では、関数と呼ばれるプログラムモジュールで記述される。）を内包するオブジェクトの集合と見做されて記述される。プログラム（通常の記述によるソースプログラムを、汎用のコンパイルで変換した実行プログラムのこと。以下同じ）は、該プログラムに対応するプロセス（メモリ上の１つのプログラムに１つだけ対応するもので、タスクと呼ばれる。）により実行される。しかし、概念上では、１つのプログラムの実行は、（該１つのプログラムに含まれる）オブジェクト同士の間で行われるメッセージの送／受信により実行される。該メッセージの送／受信においては、メッセージ受信側オブジェクトは、メッセージ送信側オブジェクトと同期して実行されるか、或いは、非同期で実行される。
【０００５】
受信側オブジェクトが上記メッセージに基づく処理を行って生成した情報を、送信側オブジェクトが必要とする場合には、送信側オブジェクトと、受信側オブジェクトとが同期して実行される。この場合には、送信側オブジェクトは、上記メッセージを送信した後、受信側オブジェクトが上記情報の生成を完了するのを待つことになる。一方、上記情報を、送信側オブジェクトが必要としない場合には、送信側オブジェクトと、受信側オブジェクトとは非同期で実行される。この場合には、送信側オブジェクトは、上記メッセージを送信した後においても、送信側オブジェクト自身が実行すべき処理を継続することになる。（なお、オブジェクトの実行とは、スレッドがオブジェクトの関数（即ち、手続き）を実行することである。スレッドについては、後述する。）
実装上では、オブジェクト同士の間で行われるメッセージの送／受信は、受信側オブジェクトと、送信側オブジェクトとが同期して実行される場合には、手続き呼び出しによって実現されるのが一般的である。一方、非同期で実行される場合には、OS（Operating System）や、ミドルウェア等を備えるメッセージ通信機構によって実現されるのが一般的である。送信側オブジェクトと、受信側オブジェクトとを同期して実行するか、非同期で実行するかにより、オブジェクト同士の間のメッセージ送／受信を実現するための技術的な手法が異なる場合がある。この技術的な手法の相違が、プログラムの実行効率に影響を及ぼすので、上記各々のオブジェクトを同期して実行するか、非同期で実行するかの決定を適切に行うための技術的工夫や、或いは、上記決定が容易に行えるようにする技術的工夫が、検討されている。
【０００６】
ところで、同一のプログラム内における１つ以上のオブジェクトの集合に対し、夫々のオブジェクトにスレッド（資源をあまり消費しない軽量プロセスのこと。以下同じ）を割り当てて、該割り当てられたスレッドを跨ぐオブジェクト同士の間での機能の呼び出しを、メッセージ通信により非同期で行うシステムがある。該システムでは、ハードウェアやOS等のオブジェクトの実行環境が備える通信処理の性能差のために、プログラムの移植（或るプラットホームに適合するプログラムを、別のプラットホームに適合するように修正した上で、該別のプラットホームへ提供すること。）が困難になる場合がある。
【０００７】
例えば、オブジェクト同士の間で行われるメッセージ通信に起因して発生するコンテクストスイッチ（マルチタスクOSにおいて、あるプログラムから別のプログラムに（又はマルチスレッド環境下では、或るスレッドから別のスレッドに）処理を切り替えること。）のオーバーヘッドは、上記実行環境によって異なるので、同一の（実行）プログラムであってもメッセージ通信処理の実行性能が相違する。この実行性能の相違が原因となり、（実行）プログラムを移植するに際して、移植元（元のプラットホーム）におけるメッセージ送／受信手続を、該移植先（別のプラットホーム）の実行環境が備えるメッセージ送／受信手続と同等の機能を有するように単純に置換しただけでは、該（実行）プログラムがたとえ該移植先の実行環境が備える機能要件を満たしたとしても、実行性能や応答性等の非機能要件を満たせない場合がある。
【０００８】
このように、メッセージ通信の実行環境が備える機能が十分であったとしても、非機能面での（実行）プログラムの移植性が確保できるとは限らない。例えば、組み込みシステムのような利用可能なプロセッサ資源の限られた実行環境下では、（実行）プログラムの実行性能の低下により、想定された時間内に処理が完了しなくなる虞がある。（実行）プログラムの移植先の実行環境におけるメッセージ通信のオーバーヘッドが大きい場合、メッセージ通信によるオブジェクト同士の間での通信回数を減らす作業が必要になる。
【０００９】
例えば、異なるスレッドが割り当てられたオブジェクト同士の間においては、図１（ａ）に示すように、オブジェクト４に対し、オブジェクト２が実行開始を指示するメッセージ６を送信する場合、該オブジェクト２を実行するスレッド８とは別のスレッド１０により、オブジェクト４が実行される。この図１（ａ）で示したオブジェクト２、４の実行態様が、非同期（即ち、並行処理）によるオブジェクト（２、４）の実行である。これを、図１（ｂ）で示すように、スレッド８が、手続き呼び出し１２によってオブジェクト４を実行するように変更することになる。このように、通信先（送信先）オブジェクト４の処理を、通信元（送信元）オブジェクト２から手続き呼び出しするようプログラムを書き換え、呼び出し元のオブジェクト２と呼び出し先のオブジェクト４との間で実行コンテクストを共有するようにすれば、メッセージ通信におけるオブジェクト（２、４）同士の間での通信回数を減らすことが可能になる。この図１（ｂ）で示したオブジェクト２、４の実行態様が、同期（即ち、逐次処理）によるオブジェクト（２、４）の実行である。
【００１０】
しかし、上記のような（実行）プログラムの書き換えを実行すると、書き換え後の（実行）プログラムの動作が、元の（実行）プログラムの設計時における動作と相違することになり、上記オブジェクト同士の間の通信回数を減らすことが可能になる反面、上記オブジェクト同士の間で並行処理（非同期処理）が可能であるという情報が失われてしまうという問題が生じる。
【００１１】
特許文献１に開示される技術では、メッセージ送信処理の呼び出し形式に基づき、メッセージ通信を行おうとするオブジェクト同士の間において、オブジェクトの実行を同期（逐次処理）とするか、非同期（並行処理）とするかを選択するようになっている。しかし、呼び出し形式に基づいて上記選択が行われることを前提として作成された（実行）プログラムでなければ、上記のような（実行）プログラムの置き換えが可能かどうか判断するのは困難である。
【００１２】
また、特許文献２に開示される技術では、メッセージ通信に適用される通信方式情報に基づき、メッセージ通信を行おうとするオブジェクト同士の間において、オブジェクトの実行を同期（逐次処理）とするか、非同期（並行処理）とするかを選択するようになっている。このような選択の手法を採用することによって、送信側オブジェクトが受信側オブジェクトに対し、メッセージを送信した後に、受信側オブジェクトでの該メッセージに対する処理が完了するのを待つかどうか（待つ場合は同期（逐次処理）、待たない場合は非同期（並行処理））を容易に決定することができる。しかし、この手法は、メッセージ通信の仕組みそのものであり、メッセージ送信のステートメントを、手続き呼び出しのステートメントに変換するという目的を達成することができない。
【００１３】
従って本発明の目的は、並行処理を行う機能を有するプログラムを、該並行処理の機能を損なうことなく逐次処理を行う機能を有するプログラムに変換することが可能なプログラム変換の技術を提供することにある。
【００１４】
また、本発明の別の目的は、メッセージ通信処理におけるオーバーヘッドが無視できないほど処理時間が短い処理に係わるプログラムを優先的に変換対象にすることが可能なプログラム変換の技術を提供することにある。
【００１５】
また、本発明の別の目的は、変換処理が施された後のプログラムの実行順序を、変換処理が施される前のプログラムの実行順序と同一に保持した状態でプログラムの変換処理を行うことが可能なプログラム変換の技術を提供することにある。
【００１６】
また、本発明の別の目的は、同一のプログラムが複数のスレッドにおいて同時に実行されることを想定していない場合でも、該プログラムに対して変換処理を行うことが可能なプログラム変換の技術を提供することにある。
【００１７】
更に、本発明の別の目的は、優先度ベースのスケジューリングを行うシステムにおいて、プログラムに付加された優先度をOSによるスケジューリングに反映させることが可能なプログラム変換の技術を提供することにある。
【課題を解決するための手段】
【００１８】
本発明の第１の観点に従うプログラム変換装置は、第１のオブジェクトと第２のオブジェクトとが個別に処理を実行する並行処理が可能なプログラムを、上記第１のオブジェクトによる処理の終了に引続いて上記第２のオブジェクトによる処理を実行する逐次処理が可能なプログラムに変換するものであって、上記プログラムの実行に際して上記第１のオブジェクトと上記第２のオブジェクトとの間で行われるメッセージ通信において、上記第１のオブジェクトから上記第２のオブジェクトに送信される並行処理開始の要求メッセージ、及び予め上記プログラムに挿入された、逐次処理が可能な箇所に係わる情報を保持する保持部と、上記保持部に保持される上記逐次処理が可能な箇所に係わる情報により特定される上記プログラム中の箇所を、上記第２のオブジェクトによる逐次処理が可能な箇所かどうか識別する識別部と、上記識別部が上記情報により特定される上記プログラム中の箇所を、上記第２のオブジェクトによる逐次処理が可能な箇所として識別した場合に、上記保持部に保持される上記並行処理開始の要求メッセージを、上記逐次処理開始の要求メッセージに変更するメッセージ変更処理部と、少なくとも上記メッセージ変更処理部により変更された後のメッセージを、上記識別部により識別されたプログラムにおける上記箇所内の適宜な位置に含ませることにより、上記プログラムを上記逐次処理が可能なプログラムに変換する変換処理部と、を備える。
【００１９】
本発明の第１の観点に係る好適な実施形態では、上記並行処理が可能なプログラムの動的実行ステップ数の推定値と、上記逐次処理が可能な箇所として識別された上記プログラムの箇所の動的実行ステップ数の推定値と、を算出する動的実行ステップ数算出部と、上記動的実行ステップ数算出部により算出された上記動的実行ステップ数の推定値に基づき、評価指標を算出する評価指標算出部と、を更に備え、上記評価指標算出部により算出された評価指標に基づき、上記変換を実行するかどうか判断するようにしている。
【００２０】
上記とは別の実施形態では、上記並行処理が可能なプログラム、及び上記逐次処理が可能な箇所として識別された上記プログラムの箇所に予め付加された優先度を示す情報に基づき、上記箇所内における上記並行処理開始の要求メッセージを挿入するための適宜な位置を決定するようにしている。
【００２１】
また、上記とは別の実施形態では、上記プログラムの上記箇所内における上記並行処理開始の要求メッセージの挿入位置を挟む位置に、上記並行処理が可能なプログラムを実行する可能性のあるスレッド同士による逐次処理を夫々挿入するようにしている。
【００２２】
更に、上記とは別の実施形態では、上記プログラムの上記箇所内における上記並行処理開始の要求メッセージの挿入位置を挟む位置に、上記プログラム、及び上記逐次処理が可能な箇所として識別された上記プログラムの箇所に付加された優先度を示す情報に基づき、実行優先度を変更する処理を挿入するようにしている。
【００２３】
本発明の第２の観点に従うプログラム変換方法は、第１のオブジェクトと第２のオブジェクトとが個別に処理を実行する並行処理が可能なプログラムを、上記第１のオブジェクトによる処理の終了に引続いて上記第２のオブジェクトによる処理を実行する逐次処理が可能なプログラムに変換する装置において、上記プログラムの実行に際して上記第１のオブジェクトと上記第２のオブジェクトとの間で行われるメッセージ通信において、上記第１のオブジェクトから上記第２のオブジェクトに送信される並行処理開始の要求メッセージ、及び予め上記プログラムに挿入された、逐次処理が可能な箇所に係わる情報を保持する第１のステップと、上記第１のステップにおいて保持される上記逐次処理が可能な箇所に係わる情報により特定される上記プログラム中の箇所を、上記第２のオブジェクトによる逐次処理が可能な箇所かどうか識別する第２のステップと、上記第２のステップにおいて上記情報により特定される上記プログラム中の箇所を、上記第２のオブジェクトによる逐次処理が可能な箇所として識別した場合に、上記第１のステップにおいて保持される上記並行処理開始の要求メッセージを、上記逐次処理開始の要求メッセージに変更する第３のステップと、少なくとも上記第３のステップにおいて変更された後のメッセージを、上記第２のステップにおいて識別されたプログラムにおける上記箇所内の適宜な位置に含ませることにより、上記プログラムを上記逐次処理が可能なプログラムに変換する第４のステップと、を備える。
【発明の効果】
【００２４】
本発明によれば、並行処理を行う機能を有するプログラムを、該並行処理の機能を損なうことなく逐次処理を行う機能を有するプログラムに変換することが可能なプログラム変換の技術を提供することができる。
【００２５】
また、本発明によれば、メッセージ通信処理におけるオーバーヘッドが無視できないほど処理時間が短い処理に係わるプログラムを優先的に変換対象にすることが可能なプログラム変換の技術を提供することができる。
【００２６】
また、本発明によれば、変換処理が施された後のプログラムの実行順序を、変換処理が施される前のプログラムの実行順序と同一に保持した状態でプログラムの変換処理を行うことが可能なプログラム変換の技術を提供することができる。
【００２７】
また、本発明によれば、同一のプログラムが複数のスレッドにおいて同時に実行されることを想定していない場合でも、該プログラムに対して変換処理を行うことが可能なプログラム変換の技術を提供することができる。
【００２８】
更に、本発明によれば、優先度ベースのスケジューリングを行うシステムにおいて、プログラムに付加された優先度をOSによるスケジューリングに反映させることが可能なプログラム変換の技術を提供することができる。
【発明を実施するための最良の形態】
【００２９】
以下、本発明の実施の形態を、図面により詳細に説明する。
【００３０】
図２は、本発明の一実施形態に係るプログラム変換システムの全体構成を示す機能ブロック図である。
【００３１】
上記プログラム変換システムは、例えば、パーソナルコンピュータ等の情報処理装置がハードウェアとして用いられ、図２に示すように、プログラム変換装置１００と、記憶装置２００と、で構成される。プログラム変換装置１００の機能は、例えば、上記情報処理装置に内蔵されるCPU、若しくはMPU等の演算処理部上において実現される。即ち、プログラム変換装置１００は、ソースプログラム入力処理部１、オブジェクト情報保持部３、プログラム変換処理部５、字句解析処理部７、構文解析処理部９、基本ブロック抽出処理部１１、基本ブロック保持部１３、及びソースプログラム出力処理部１５の各々の機能ブロックにより実現される機能を備える。上記各々の機能ブロックにより実現される諸機能のうち、ソースプログラム入力処理部１、字句解析処理部７、構文解析処理部９、及び基本ブロック抽出処理部１１により夫々実現される機能は、コンパイラ（ソースコードをオブジェクトコードに変換するためのソフトウェア）が実行する処理機能である。
【００３２】
他方、記憶装置２００は、例えば、上記情報処理装置に内蔵される、指示文が挿入されたソースプログラム）、プログラム変換装置１００により変換された指示文を含まないソースプログラム、及びオブジェクトのメタ情報等を格納するものである。ここで、指示文には、該ソースプログラムにおける変換処理を所望する箇所が、変換可能かどうかを示す内容が含まれている。記憶装置２００の機能は、RAMやHDD（ハードディスク装置）等のメモリ上において実現される。上記ソースプログラムは、例えば、プログラムモジュール単位で分割された（複数の）ファイルとして記憶装置２００に格納されており、上記ソースプログラムは、複数のプログラムモジュールから構成される。１つのプログラムモジュールには、複数のオブジェクトが属しており、また、該１つのプログラムモジュールには、上記各々のオブジェクトの持つ処理を記述したプログラムが含まれている。また、各々のプログラムモジュールには、これら各々のプログラムモジュールに属するオブジェクトを実行するためのスレッドが、少なくとも１つ割り当てられている。そして、異なるプログラムモジュールに属するオブジェクト同士の間で、処理の呼び出しを行う際には、呼び出し元のオブジェクト（既述のメッセージ送信側オブジェクトに対応）から呼び出し先のオブジェクト（既述のメッセージ受信側オブジェクトに対応）へメッセージが送信される。
【００３３】
プログラム変換装置１００において、ソースプログラム入力処理部１は、記憶装置２００から、該記憶装置２００に格納されているソースプログラムを読み出すと共に、該読み出したソースプログラムを、字句解析処理部７に出力する。字句解析処理部７は、ソースプログラム入力処理部１から入力した上記ソースプログラムに対し、字句解析処理を行うと共に、該字句解析処理の結果を、構文解析処理部９に通知する。構文解析処理部９は、字句解析処理部７から通知された該ソースプログラムに係わる字句解析処理の結果に基づき、該ソースプログラムに対し、構文解析処理を行う。そして、該構文解析処理の結果得られる、該ソースプログラムに係わる構文木を、基本ブロック抽出処理部１１に出力する。
【００３４】
基本ブロック抽出処理部１１は、構文解析処理部９から出力された該ソースプログラムに係わる構文木に対し、フロー解析処理を行って該構文木から（該ソースプログラムの最小単位である）基本ブロック（即ち、最小単位のプログラムのこと。以下同じ）を抽出する。基本ブロック抽出処理部１１は、抽出した（該ソースプログラムの）構文木に係わる基本ブロックのリストを、基本ブロック保持部１３に格納する。基本ブロック保持部１３は、基本ブロック抽出処理部１１から出力された（該ソースプログラムの）構文木に係わる基本ブロックのリスト（即ち、該ソースプログラムを表現するための基本ブロックのリスト）を保持する。オブジェクト情報保持部３は、記憶装置２００から、該記憶装置２００に記憶されているオブジェクトの配置情報、該オブジェクトに割り当てられたスレッド（マルチスレッド対応OSにおいて、CPUに実行時間を割り当てる単位のこと。換言すれば、１つのプログラムの処理を実行するプロセスを、並行に複数の流れで処理する場合の、各処理の流れのことである。）の識別情報、及びメッセージ対応情報等のオブジェクトに関するメタ情報を読み出し、それらを保持する。
【００３５】
プログラム変換処理部５は、上述した基本ブロックのリストを、基本ブロック保持部１３から読み出すと共に、オブジェクト情報保持部３が保持するメッセージ対応情報を、オブジェクト情報保持部３から読み出す。該メッセージ対応情報は、メッセージIDをメソッド呼び出しステートメントに対応付けるためのものである。プログラム変換処理部５は、該読み出したメッセージ対応情報に基づき、上記基本ブロック（即ち、ソースプログラムにおける並行して実行される箇所の或る一部分）を、上記指示文（即ち、上記指示文を含むソースプログラムの該指示文）に従って順次実行されるような（ソースプログラムの）基本ブロックに変換する。プログラム変換処理部５は、上述した変換処理を行うことにより得られた（ソースプログラムにおける）基本ブロックのリストを、基本ブロック保持部１３に出力する。これにより、基本ブロック保持部１３に保持される基本ブロックのリストが更新されることになる。
【００３６】
ソースプログラム出力処理部１５は、プログラム変換処理部５により更新された後の基本ブロックのリストを、基本ブロック保持部１３から読み出す。そして、該読み出した基本ブロックのリストに基づき、ソースプログラムを再現するための所定の処理を実行する。ソースプログラム出力処理部１５は、上記再現したソースプログラムを、記憶装置２００へ出力する。
【００３７】
図３は、本発明の一実施形態に係るプログラム変換システムの処理対象になり得るソースプログラムの構成の一例を示す説明図である。図３で示した構成は、図２で示したプログラム変換装置１００（のソースプログラム入力処理部１）が、記憶装置２００から読み込んだソースプログラムに係わるものである。
【００３８】
図３において、上記ソースプログラム１７は、第１のプログラム１９、第２のプログラム２１、第３のプログラム２３、第４のプログラム２５、第５のプログラム２７、及び第６のプログラム２９の各プログラムを含む。上記各々のプログラム（１９乃至２９）のうち、♯pragma開始指示の記載がある第２のプログラム２１、SendMessage（オブジェクトID、メッセージID、パラメータ）の記載がある第３のプログラム２３、及び♯pragma終了指示の記載がある第５のプログラム２７は、何れのソースプログラムにも必須不可欠のプログラムである。上記第２のプログラム（♯pragma 開始指示）２１、第３のプログラム（SendMessage（オブジェクトID,メッセージID,パラメータ））２３、及び第５のプログラム（♯pragma 終了指示）２７は、何れも、後に（図６で）詳述するメッセージ対応情報のテンプレートに基づいて適宜書き換えられる。これに対して、“ステートメント；”の記載がある第１のプログラム１９、第４のプログラム２５、及び第６のプログラム２９は、必ずしも全てのソースプログラムに含まれるものではない、任意のプログラム（プログラマ等により任意に作成されるプログラム）である。従って、ソースプログラムによっては、上記第１、第４、及び第６のプログラム（１９、２５、２９）の全部又は一部を含まないものも存在し得る。
【００３９】
第３のプログラム２３において、SendMessageを構成するオブジェクトIDは、（メッセージの）送信先を指定するための情報である。同じくSendMessageを構成するメッセージIDは、送信先（メッセージの送信元であるオブジェクト）からオブジェクトＩＤにより指定された送信先（メッセージの送信先であるオブジェクト）に対して送信するメッセージの種類を特定するための情報である。また、SendMessageとは、該送信元、及び該送信先を指定するための情報と、該送信元から該送信先へ送信するメッセージの種類に係わる情報との組み合わせを持った呼び出しのステートメントのことである。
【００４０】
上記構成を有するソースプログラム１７が、図２で示した記憶装置２００に格納されており、該ソースプログラム１７が、同じく図２で示したソースプログラム入力処理部１により記憶装置２００から読み出されて、プログラム変換装置１００に入力されることになる。
【００４１】
図４は、図２に示した基本ブロック抽出処理部１１により、図３で示したソースプログラム１７から抽出された、プログラム変換処理部５による変換処理が施される前の基本ブロックのリストの一例を示す説明図である。
【００４２】
図４において、上記基本ブロックのリスト３１は、第１の基本ブロック３３、開始指示文に係わる第２の基本ブロック３５、メッセージ送信ステートメントに係わる第３の基本ブロック３７、第４の基本ブロック３９、終了指示文に係わる第５の基本ブロック４１、及び第６の基本ブロック４３を含む。開始指示文に係わる第２の基本ブロック３５は、直後のメッセージ通信ステートメントを、手続き呼び出しに変換する機能と、並行した処理動作が可能な区間（即ち、オブジェクト同士の間における、既述のような非同期処理が可能な箇所）の開始を指示する機能と、を有する。メッセージ送信ステートメントに係わる第３の基本ブロック３７は、呼び出し先（送信先）のプログラム、即ち、ソースプログラム１７とは別のソースプログラムを指定するためのものであり、呼び出し元（送信元）のプログラムでは、該呼び出し元（送信元）のプログラムと並行処理が可能に設定されている。終了指示文に係わる第５の基本ブロック４１は、上記のような並行した処理動作が可能な区間の終了を指示する機能を有する。なお、第１の基本ブロック３３、第４の基本ブロック３９、及び第６の基本ブロック４３は、何れも異なる任意の基本ブロック（プログラマ等により任意に作成されるプログラム）である。
【００４３】
図５は、図２に示したプログラム変換処理部５により、図４で示した基本ブロックのリスト３１が変換処理されることによって得られる基本ブロックのリストの一例を示す説明図である。
【００４４】
図５において、上記（変換処理が施された後の）基本ブロックのリスト４５は、第１の基本ブロック３３、手続き呼び出しステートメントに係わる第２の基本ブロック４７、第３の基本ブロック３９、及び第４の基本ブロック４３を含む。手続き呼び出しステートメントに係わる第２の基本ブロック４７は、プログラム変換処理部５が、図４で示した第３の基本ブロック３７のメッセージ送信ステートメントを、手続き呼び出しステートメントに変換することにより得られたものである。なお、第１の基本ブロック３３は、図４で示した第１の基本ブロック３３と、第３の基本ブロック３９は、図４で示した第４の基本ブロック３９と、第４の基本ブロック４３は、図４で示した第６の基本ブロック４３と、夫々同一であるので、何れも同一符号を付してそれらの詳細な説明を省略する。
【００４５】
プログラム変換処理部５（図２で示した）において、図４で示した第３の基本ブロック３７のメッセージ送信ステートメントが、図５で示した第２の基本ブロック４７の手続き呼び出しステートメントに変換される処理動作の詳細については、オブジェクトを実現する機構によって相違する。しかし、上記変換処理は、図３で示したソースプログラム１７に含まれるSendMessage（第３のプログラム２３）のメッセージIDを特定し、上記メッセージ送信ステートメントに対応する手続き呼び出しステートメント（のプログラム）に置換する処理を実行することで、実現可能である。
【００４６】
なお、手続き呼び出しステートメント（第２の基本ブロック４７）の、基本ブロックのリスト４３における配置位置は、図５で示した基本ブロックのリスト４５における第１の基本ブロック３３と、第３の基本ブロック４３との間の任意の箇所でよい。図５に示した例では、手続き呼び出しステートメントが、図示のように、第２の基本ブロック４７として基本ブロックのリスト４５中に配置されているが、例えば、該手続き呼び出しステートメントに係わる基本ブロック４７を、第３の基本ブロックとして上記リスト４５中に配置するようにしてもよい。
【００４７】
図６は、図２に記載のプログラム変換処理システムに適用されるメッセージ対応情報が登録されたテーブルの一例を示す説明図である。
【００４８】
上記メッセージ対応情報は、図３で示したSendMessage中のメッセージIDを、メソッド呼び出しステートメントに対応付けるためのもので、図６に示すように、メッセージIDを表すシンボル、及び手続き呼び出しのプログラムのテンプレート（雛形）を含む。そのため、上記メッセージ対応情報が登録されるテーブルには、図示のように、複数のメッセージID登録領域５３と、各々のメッセージID登録領域５３毎に対応付けられて設定されている複数のテンプレート登録領域５５と、が備えられる。図６に示した例では、メッセージID５３ａとしてOPERATION 1を有するメッセージ対応情報は、テンプレート５５ａとして、operation1（%1,%3）を有し、また、メッセージID５３ｂとしてOPERATION 2を有する、上記とは別のメッセージ対応情報は、テンプレート５５ｂとして、operation2（%1,%3）を有する。
【００４９】
（図２で示した）プログラム変換処理部５が、図４で示した基本ブロックのリスト３１の変換処理を実行する場合、図３で示したソースプログラム１７における第３のプログラム２３のSendMessage中のパラメータを、図６で示したテーブルにおけるテンプレート登録領域５５中のテンプレートに当てはめる処理を行うことになる。例えば、SendMessage（object,OPERATION1,param）;というメッセージ送信処理を呼び出すためのステートメントに対しては、テンプレート５５ａを適用してoperation1（object,param）;という手続き呼び出しを行うためのステートメントを対応させることになる。ここで、テンプレート登録領域５５中の%nという表記は、プログラム変換処理部５が基本ブロックのリスト３１に対し変換処理を施すに際し、（図３で示した）第３のプログラム２３中のパラメータを、第n番目のパラメータに置換すべきことを意味している。
【００５０】
上述したメッセージIDの特定は、図３で示したSendMessage（第３のプログラム２３）中のパラメータが、定数で与えられている場合には、該定数を読み出すことにより行うことができる。一方、上記パラメータが、変数で与えられている場合には、例えば、データフローを解析して、どのような定数が与えられる可能性があるかを調査することになる。
【００５１】
図７は、図２に記載のプログラム変換処理システムに適用されるオブジェクト配置情報が登録されたテーブルの一例を示す説明図である。オブジェクトの配置情報は、既述のように、（図２で示した）オブジェクト情報保持部３により記憶装置２００から読み出されたもので、オブジェクト情報保持部３に保持されている。
【００５２】
上記オブジェクト配置情報は、図７に示すように、プログラムモジュール（即ち、オブジェクトのこと。以下同じ）の名称、及び該プログラムモジュールの名称により示されるプログラムモジュールが配置されているプロセスの名称を含む。そのため、上記オブジェクト配置情報が登録されるテーブルには、図示のように、複数のプログラムモジュール名称登録領域５７と、各々のプログラムモジュール名称登録領域５７毎に対応付けられて設定されている複数のプロセス名称登録領域５９と、が備えられる。図７に示した例では、プログラムモジュール名称５７ａとしてModule 1を有するオブジェクト配置情報は、プロセス名称５９ａとしてProcess1を有する。また、プログラムモジュール名称５７ｂとしてModule 2を有する、上記とは別のオブジェクト配置情報は、プロセス名称５９ｂとしてProcess1を有する。更に、プログラムモジュール名称５７ｃとしてModule3を有する、更に上記とは別のオブジェクト配置情報は、プロセス名称５９ｃとしてProcess2を有する。
【００５３】
図７で示したテーブルの上記領域５７に登録される複数のプログラムモジュール名称中から、メッセージ送信ステートメント（図３で示したSendMessage）が属するソースプログラムに含まれるプログラムモジュールを示すプログラムモジュール名称が、プログラム変換処理部５により検索される。同じく、上記領域５７に登録される複数のプログラムモジュール名称中から、メッセージ送信先オブジェクト（即ち、プログラムモジュール）を示すプログラムモジュール名称がプログラム変換処理部５により検索される。そして、夫々検索されたプログラムモジュール名称から、図７で示したテーブルの上記領域５９に登録される複数のプロセス名称を参照することによって、プログラム変換処理部５により夫々のプログラムモジュールが配置されるプロセスを示すプロセス名称が検索されることになる。換言すれば、上記プログラムモジュール同士が、同一のプロセスに配置されているかどうかが検索されるわけである。
【００５４】
例えば、メッセージ送信元オブジェクト（即ち、プログラムモジュール）を示すプログラムモジュール名称が、Module1であり、メッセージ送信先オブジェクト（即ち、プログラムモジュール）を示すプログラムモジュール名称が、Module3であったとする。この場合、図７のテーブルを参照して明らかなように、Module1（プログラムモジュール名称５７ａ）に対応するプロセスはProcess1（プロセス名称５９ａ）で示されるプロセスであり、Module3（プログラムモジュール名称５７ｃ）に対応するプロセスはProcess2（プロセス名称５９ａ）で示されるプロセスである。よって、この場合は、メッセ−ジ送信元オブジェクトが配置されているプロセスと、メッセージ送信先オブジェクトが配置されているプロセスとは一致していないため、メッセージ送信ステートメントを、手続き呼び出しステートメントに置換することはできない。
【００５５】
図８は、図２に記載のプログラム変換装置１００が、ソースプログラムを別のソースプログラムに変換する処理を実行するに際しての、該プログラム変換装置１００を構成する各部の処理動作を示すフローチャートである。プログラム変換装置１００は、変換対象になるソースプログラムが指定され、変換処理動作の開始が指示されることにより、以下に説明する処理動作を実行する。
【００５６】
図８において、まず、ソースプログラム入力処理部１が、記憶装置２００より、プログラム変換処理の対象になるソースプログラムをプログラム変換装置１００に読み込むための処理を実行する（ステップS７１）。ステップS７１において、記憶装置２００より読み込まれたソースプログラムは、字句解析処理部７により字句解析の処理が施された後（ステップS７２）、構文解析処理部９により構文解析の処理が施される（ステップＳ７３）。ステップS７３において、構文解析の処理が施されると、次に上記ソースプログラムは、基本ブロック抽出処理部１１により上記ソースプログラムから基本ブロックを抽出するための処理が施され、該処理により上記ソースプログラムから抽出された基本ブロックのリストが生成される。そして、該リストが、基本ブロック抽出処理部１１により、基本ブロック保持部１３に書き込まれる（ステップS７４）。
【００５７】
ステップS７４で示した処理動作が終了すると、プログラム変換処理部５が、上記リストを、基本ブロック保持部１３から読み出すと共に、メッセージ対応情報を、オブジェクト情報保持部３から読み出す。そして、メッセージ対応情報に基づき、既述のように、上記リスト中の基本ブロックを、上述したソースプログラム中の指示文に従って順次実行されるような（ソースプログラムの）基本ブロック（換言すれば、逐次処理（所謂非同期処理）を行うソースプログラムの基本ブロック）に変換し、該基本ブロックのリストを、基本ブロック保持部１３に出力する（ステップS７５）。ステップS７５で示した処理動作が終了すると、ソースプログラム出力処理部１５が、基本ブロック保持部１３から読み出した基本ブロックのリストに基づき、ソースプログラムを再現するための処理を実行し、上記再現したソースプログラムを、記憶装置２００へ出力する（ステップS７６）。
【００５８】
図９は、図８に記載のフローチャートのサブルーチンを示すフローチャートである。図８で示した、プロフラム変換処理部５が実行するプログラム変換処理の動作は、図９においてステップS８１乃至ステップS８４で示す各々の処理動作を含む。
【００５９】
即ち、プログラム変換処理部５は、図９において、まず、基本ブロック抽出処理部１１により基本ブロック保持部１３に書き込まれた基本ブロックのリストを、読み出す。そして、該読み出した基本ブロックのリストに含まれる全ての基本ブロックについて、それらの基本ブロックを構成する要素が存在しているかどうかチェックする処理を実行する。ここで、基本ブロックを構成する要素とは、既述のように、ソースプログラムにおける変換処理を所望する箇所（例えば、図３では、ソースプログラム１７の一部分である第２のプログラム２１と第５のプログラム２７とによって挟まれた箇所：即ち、第３のプログラム２３と第４のプログラム２５）が、変換可能かどうかを示す内容が含まれている指示文のことである（ステップS８１）。該チェックの結果、全ての基本ブロックに指示文が存在しない場合（つまり、該基本ブロックのリストが空である場合）（ステップS８１でYES）には、図９に示す一連の処理動作を終了させる。ここで、全ての基本ブロックに指示文が存在しない場合とは、当初から全ての基本ブロックに指示文が含まれていない場合か、若しくは、何れかの基本ブロックに含まれていた指示文に係わる処理動作が、全て完了した場合の何れかである。
【００６０】
上記チェックの結果、基本ブロックの幾つかに（未処理の）指示文が含まれていれば（ステップS８１でNO）、プログラム変換処理部５は、上記基本ブロックの何れかより、未処理の指示文を１つ抽出し（ステップS８３）、（ソースプログラムにおける変換処理を所望する箇所が、）変換可能かどうかチェックする。このチェックは、メッセージ送信元側のオブジェクトと、メッセージ送信先側のオブジェクトとが、同一のプロセスに配置されているかどうか確認することにより行われる。送信元のオブジェクトが配置されているプロセスと、送信先のオブジェクトが配置されているプロセスとが異なる場合には、メッセージ送信ステートメントを、手続き呼び出しステートメントに置換することはできない（ステップS８３）。該チェックの結果、変換が可能でないと判断した場合には（ステップS８３でNO）、ステップS８１で示した処理動作に復帰する。一方、該チェックの結果、変換が可能であると判断すれば（ステップS８３でYES）、次の通信方式変換処理を実行し（ステップS８４）、該処理動作が終了すると、ステップS８１で示した処理動作に復帰する。なお、通信方式変換処理の詳細については、既に説明したので、ここでの詳細な説明は省略する。
【００６１】
図１０は、本発明の他の実施形態に係るプログラム変換システムの全体構成を示す機能ブロック図である。
【００６２】
図１０に示すように、本実施形態に係るプログラム変換装置３００は、図２に記載のプログラム変換装置１００が備える各部に加えて、更に、実行ステップ数算出処理部９１、評価指標算出処理部９３、及び評価指標保持部９５を備える点で、図２に記載のプログラム変換装置１００と構成が相違する。その他の構成については、図２に記載のものと同一であるので、図１０において、図２に記載の各部と同一物については、同一符号を付してそれらの詳細な説明を省略する。
【００６３】
図１０において、実行ステップ数算出処理部９１は、処理対象になっている指示文を有する基本ブロックを、基本ブロック保持部１３に保持されている基本ブロックのリストから読み出す。そして、該読み出した基本ブロック内に存在する指示文について、動的実行ステップ数を算出すると共に、該算出の結果得られた動的実行ステップ数を、評価指標算出処理部９３に通知する。評価指標算出処理部９３は、実行ステップ数算出処理部９１から通知される上記動的実行ステップ数の算出結果を入力する。これと共に、処理対象になっている指示文を有する基本ブロックを、基本ブロック保持部１３に保持されている基本ブロックのリストから読み出す。そして、上記入力した基本ブロックの指示文毎に、上記入力した動的実行ステップ数（の算出結果）に基づき評価指標を算出すると共に、該算出した評価指標と、上記指示文毎の動的実行ステップ数とを、評価指標保持部９５に出力する。
【００６４】
評価指標保持部９５は、評価指標算出処理部９３から出力される上記基本ブロックの指示文毎の評価指標と、上記指示文毎の動的実行ステップ数とを保持すると共に、プログラム変換処理部５からの読み出し要求に応じて、上記評価指標、上記動的ステップ数をプログラム変換処理部５へ出力する。
【００６５】
プログラム変換処理部５は、オブジェクト情報保持部３が保持するオブジェクト配置情報を、オブジェクト情報保持部３から、上述した評価指標、及び上記動的ステップ数を、評価指標保持部９５から、夫々読み出す。そして、各々の指示文が含まれる基本ブロックに対し、変換処理を実行するかどうかを、上記評価指標に基づきチェックする。該チェックの結果、変換処理を実行すべきであると判断した指示文が存在する場合には、プログラム変換処理部５は、該指示文が含まれる基本ブロックのリストを、基本ブロック保持部１３から読み出し、送信元のオブジェクトと、送信先のオブジェクトとの間で並行処理（所謂非同期処理）が実行可能なプログラムの箇所（例えば、図３の例では、第３のプログラム２３と、第４のプログラム２５）を、該指示文に従って順次実行されるように（所謂逐次処理：同期処理が可能なように）変換処理を実行する。そして、該変換処理が施された後の基本ブロックのリストを、基本ブロック保持部１３に格納する。
【００６６】
図１１は、図１０に記載のプログラム変換装置が、ソースプログラムを別のソースプログラムに変換する処理を実行するに際しての、該プログラム変換装置を構成する各部の処理動作を示すフローチャートである。
【００６７】
図１１に示すフローチャートと、図８で示したフローチャートとは、図１１に示すフローチャートがステップS１０５で示すステップを含む点において相違する。その他のステップについては、図１１に示すものと、図８で示したものとは処理内容が略同一である。即ち、図１１のステップS１０１は、図８のステップS７１と、図１１のステップS１０２は、図８のステップS７２と、図１１のステップS１０３は、図８のステップS７３と、夫々処理内容が略同一である。また、図１１のステップS１０４は、図８のステップS７４と、図１１のステップS１０６は、図８のステップS７５と、図１１のステップS１０７は、図８のステップS７６と、夫々処理内容が略同一である。
【００６８】
図１１において、ステップS１０５では、評価指標算出処理部９３が、上述したように、基本ブロック内に存在する指示文に係わる動的実行ステップ数の算出結果（実行ステップ数算出処理部９１から通知される）に基づき、評価指標を算出する。そして、該算出した評価指標と、指示文毎の動的実行ステップ数とを、評価指標保持部９５に出力する処理を実行する。次のステップS１０６で実行される処理動作は、図８のステップS７５で示したプログラム変換処理における処理動作と基本的に同一である。しかし、ステップS１０６では、プログラム変換処理部５が、オブジェクト情報保持部３からのオブジェクト配置情報に加えて、更に、評価指標保持部９５からの評価指標に基づき、上記基本ブロックのリストの変換処理を行うかどうか判断する点において、図８のステップS７５で示したプログラム変換処理における処理動作と相違する。即ち、プログラム変換処理部５は、評価指標保持部９５から読み出した評価指標に基づき、変換処理を実行すべきであると判断した指示文が存在する場合には、該指示文が含まれる基本ブロックのリストに対し変換処理を施す。そして、該変換処理後の基本ブロックのリストを、基本ブロック保持部１３に格納する処理を実行する。プログラム変換処理部５が、上記基本ブロックのリストに対し変換処理を実行すべきであると判断するのは、例えば、上記評価指標が、予め決められた（評価指標の）基準値以下である場合が挙げられる。或いは、上記とは異なり、最も評価指標の低い指示文から順に、予め決められた数に達するまで、該当する指示文の基本ブロックについて変換処理を実行するようにしても差し支えない。
【００６９】
図１２は、図１１に記載のフローチャートのサブルーチンを示すフローチャートである。
【００７０】
図１２に示すフローチャートは、図９のステップS８３で示す処理動作に代えて、ステップS１１３で示す処理動作を実行する点、及び図９で示す処理動作に代えて、ステップS１１４で示す処理動作を実行する点において、図９で示したフローチャートと相違する。上記以外のステップについては、図１２に示すものと、図９で示したものとは処理内容が略同一である。即ち、図１２のステップS１１１は、図９のステップS８１と、図１２のステップS１１２は、図９のステップS８２と、夫々処理内容が略同一である。
【００７１】
図１２において、ステップS１１３では、実行ステップ数算出処理部９１が、指示文で囲まれたプログラム（例えば、図４の例では、開始指示文３５と終了指示文４１とによって挟まれたメッセージ送信ステートメント３７と基本ブロック３９のこと。）と、要求された非同期処理を行うプログラムとの２つのプログラムから、実行に要する動的ステップ数の推定値を算出する。動的ステップ数の推定値の算出処理は、任意の手法を用いて行って差し支えない。該任意の手法には、例えば、最悪実行時間を求める手法が含まれる。次に、ステップS１１４では、評価指標算出処理部９３が、ステップS１１３で算出された動的ステップ数の推定値に基づき、プログラム変換処理部５が基本ブロックノリストを変換するかどうかを判断するための評価指標を算出し、該算出した評価指標を評価指標保持部９５に格納する。上記評価指標としては、例えば、ステップS１１３で算出された２つの値の最小値が挙げられる。
【００７２】
なお、上述した本発明の他の実施形態に係る変形例として、プログラム変換処理部５において、呼び出し先（送信先）オブジェクトに割り当てられたスレッドの優先度を考慮して、手続き呼び出しステートメントを挿入する手法も想到し得る。この場合、プログラム変換処理部５は、呼び出し元（送信元）オブジェクトに割り当てられたスレッドと、呼び出し先（送信先）オブジェクトに割り当てられたスレッドとの優先度（どちらを優先的に処理するか）を比較する。そして、呼び出し先（送信先）オブジェクトに割り当てられたスレッドの優先度の方が高い場合には、プログラムにおける指示文で囲まれた箇所の先頭に手続き呼び出しステートメントを挿入することになる（図５で示した例では、手続き呼び出しステートメント４７の挿入位置が相当する。）。これとは逆に、呼び出し元（送信元）オブジェクトに割り当てられたスレッドの優先度の方が高い場合には、プログラム変換処理部５は、プログラムにおける上記指示文で囲まれた箇所の最後に手続き呼び出しステートメントを挿入することになる。
【００７３】
プログラム変換処理部５は、スレッドの優先度や走行状態（処理状態）等を考慮して、手続き呼び出しステートメントの前後の位置に、処理を挿入すると共に、呼び出し先（送信先）オブジェクトに割り当てられたスレッドとの間で、処理が排他的に行われるよう、同期をとる処理をも挿入する。また、プログラム変換処理部５は、動的に優先度を変更できる場合には、呼び出し先（送信先）オブジェクトに付加された優先度と同一の優先度を設定する処理を、手続き呼び出しステートメントの実行前の位置に、元の優先度を設定する処理を手続き呼び出しステートメントの実行後の位置に、夫々挿入することになる。
【００７４】
以上、本発明の好適な実施形態を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
【図面の簡単な説明】
【００７５】
【図１】オブジェクト間でのメッセージ通信において、オブジェクト同士の間で実行される非同期処理、及び同期処理に係わる説明図。
【図２】本発明の一実施形態に係るプログラム変換システムの全体構成を示す機能ブロック図。
【図３】本発明の一実施形態に係るプログラム変換システムの処理対象になり得るソースプログラムの構成の一例を示す説明図。
【図４】図２に示した基本ブロック抽出処理部により、図３で示したソースプログラム１７から抽出された、プログラム変換処理部による変換処理が施される前の基本ブロックのリストの一例を示す説明図。
【図５】図２に示したプログラム変換処理部により、図４で示した基本ブロックのリストが変換処理されることによって得られる基本ブロックのリストの一例を示す説明図。
【図６】図２に記載したプログラム変換処理システムに適用されるメッセージ対応情報が登録されたテーブルの一例を示す説明図。
【図７】図２に記載したプログラム変換処理システムに適用されるオブジェクト配置情報が登録されたテーブルの一例を示す説明図。
【図８】図２に記載したプログラム変換装置が、ソースプログラムを別のソースプログラムに変換する処理を実行するに際しての、該プログラム変換装置を構成する各部の処理動作を示すフローチャート。
【図９】図８に記載したフローチャートのサブルーチンを示すフローチャート。
【図１０】本発明の他の実施形態に係るプログラム変換システムの全体構成を示す機能ブロック図。
【図１１】図１０に記載したプログラム変換装置が、ソースプログラムを別のソースプログラムに変換する処理を実行するに際しての、該プログラム変換装置を構成する各部の処理動作を示すフローチャート。
【図１２】図１１に記載したフローチャートのサブルーチンを示すフローチャート。
【符号の説明】
【００７６】
１  ソースプログラム入力処理部
３  オブジェクト情報保持部
５  プログラム変換処理部
７  字句解析処理部
９  構文解析処理部
１１  基本ブロック抽出処理部
１３  基本ブロック保持部
１５  ソースプログラム出力処理部
９１  実行ステップ数算出処理部
９３  評価指標算出処理部
９５  評価指標保持部
１００、３００  プログラム変換装置
２００  記憶装置
【図１】
2009258962.tif 000003
【図２】
2009258962.tif 000004
【図３】
2009258962.tif 000005
【図４】
2009258962.tif 000006
【図５】
2009258962.tif 000007
【図６】
2009258962.tif 000008
【図７】
2009258962.tif 000009
【図８】
2009258962.tif 000010
【図９】
2009258962.tif 000011
【図１０】
2009258962.tif 000012
【図１１】
2009258962.tif 000013
【図１２】
2009258962.tif 000014