(57)【要約】【課題】  プログラムの指定区間に対して性能指標を与えることにより、該当区間を自動的にタスクに分割して性能指標を付加する、プログラム変換装置及び方法を提供する。【解決手段】  プログラムソースを変換するプログラム変換装置である。プログラムに埋め込まれた区間を表す区間コードと、この区間コードに関連付けてプログラムに埋め込まれた性能指標情報とを取得する区間及び指標取得手段１１と、取得した区間コードをタスクコードとして分離し、タスク先頭を示すコードとタスク終端を示すコードとを追加するタスクコード変換手段１２と、スケジューラに入力するための性能指標をタスクに付加するタスク指標付加手段１３とを備える。【選択図】        図１
2006126977.tif 000002
【特許請求の範囲】
【請求項１】
プログラムソースを変換するプログラム変換装置であって、
プログラムに埋め込まれた区間を表す区間コードと、この区間コードに関連付けてプログラムに埋め込まれた性能指標情報とを取得する区間及び指標取得手段と、
取得した区間コードをタスクコードとして分離し、タスク先頭を示すコードとタスク終端を示すコードとを追加するタスクコード変換手段と、
スケジューラに入力するための性能指標をタスクに付加するタスク指標付加手段と、
を備えたことを特徴するプログラム変換装置。
【請求項２】
タスクコード変換手段は、タスク先頭を示すコードとしてタスク開始コードを追加し、タスク終端を示すコードとしてタスク終了コードを追加するものであることを特徴とする請求項１のプログラム変換装置。
【請求項３】
タスクコード変換手段は、タスク先頭及びタスク終端を示すコードとしてプロセッサの特定の命令を追加するものであることを特徴とする請求項１または２記載のプログラム変換装置。
【請求項４】
タスクコード変換手段は、タスク生成コードを追加するものであるとともに、前記タスク生成コードに対して、付加された指標に従って起動することができない場合にエラーとして出力する、という動作からなるコードを追加するものであることを特徴とする請求項１から３までのいずれか１項記載のプログラム変換装置。
【請求項５】
性能指標情報は、単位時間内に処理することができる命令数を示す性能値であることを特徴とする請求項１から４までのいずれか１項記載のプログラム変換装置。
【請求項６】
性能指標情報は、処理可能な最大性能値に対する割合を示す値であることを特徴とする請求項１から４までのいずれか１項記載のプログラム変換装置。
【請求項７】
タスクコード変換手段は、区間コード開始点の境界及び区間コード終了点の境界で変数の再利用があることを検出し、変数の再利用がある場合は、タスク開始前のコードから分離したタスクコードへの変数の転送及び分離したタスクコードの終了前からタスク終了後のコードへの変数の転送を行うコードを付加するものであることを特徴とする請求項１から３までのいずれか１項記載のプログラム変換装置。
【請求項８】
区間及び指標取得手段は、性能指標情報とともにグループを示す符号を取得するものであり、タスクコード変換手段は、グループを示す符号が同じ区間コードを検出し、かつこれらの区間コードに依存関係がないことを判定した場合に、並列にタスクを生成するタスク生成コードを追加するものであることを特徴とする請求項１から３までのいずれか１項記載のプログラム変換装置。
【請求項９】
プログラムの実行順序を制御するスケジューラであって、
タスク生成コードを検出した際にタスクからタスク性能指標を入力するタスク性能指標入力手段と、
前記タスク性能指標に従って全体のスケジュールを行うスケジューリング手段と、
前記タスク性能指標を実行処理に割り当てる時間を処理時間として、前記処理時間を超過すると、別の処理可能なタスクに実行を移すタスク切換手段と、
を備えたことを特徴とするスケジューラ。
【請求項１０】
スケジューリング手段は、プロセッサが特定の命令を解読した際に、スケジューリングの開始または終了を行うものであることを特徴とする請求項９記載のスケジューラ。
【請求項１１】
外部からのプログラムを受け付けるプログラム受付手段と、
受け付けたプログラムを表示するプログラム表示手段と、
前記プログラム表示手段により表示されたプログラムの区間及びこの区間に関連付けた性能指標情報を入力として受け取るユーザ情報入力手段と、
請求項１から８までのいずれか１項に記載のプログラム変換装置であって、前記プログラム受付手段によって受け付けられたプログラムと、前記ユーザ情報入力手段によって受け取られたプログラムの区間及びこの区間に関連付けた性能指標情報とにもとづいて、前記プログラムを、性能指標情報を持つタスクに分割するプログラム変換装置と、
を備えることを特徴とするプログラム開発ツール。
【請求項１２】
請求項１から８までのいずれか１項に記載のプログラム変換装置で性能指標を付加されたタスクに変換されたプログラムを含むプログラムコードと、
請求項９または１０に記載のスケジューラを記憶したメモリと、
前記プログラムコード及び前記スケジューラを処理するプロセッサと
を備えることを特徴とする情報処理装置。
【請求項１３】
プログラムソースを変換するプログラム変換方法であって、
プログラムに埋め込まれた区間を表す区間コードと、この区間コードに関連付けてプログラムに埋め込まれた性能指標情報とを取得する区間及び指標取得ステップと、
取得した区間コードをタスクコードとして分離し、タスク先頭を示すコードとタスク終端を示すコードとを追加するタスクコード変換ステップと、
スケジューラに入力するための性能指標をタスクに付加するタスク指標付加ステップと、
を有することを特徴とするプログラム変換方法。
【請求項１４】
プログラムソースを変換するプログラム変換ソフトウェアであって、
プログラムに埋め込まれた区間を表す区間コードと、この区間コードに関連付けてプログラムに埋め込まれた性能指標情報とを取得する区間及び指標取得ステップと、
取得した区間コードをタスクコードとして分離し、タスク先頭を示すコードとタスク終端を示すコードとを追加するタスクコード変換ステップと、
スケジューラに入力するための性能指標をタスクに付加するタスク指標付加ステップと、
を実行させるものであることを特徴とするプログラム変換ソフトウェア。
【請求項１５】
請求項１４に記載のプログラム変換ソフトウェアを記録したものであることを特徴とする記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、与えられたプログラムの自動変換のためのプログラム変換装置及び方法に関し、特に、選択した区間に対して自動的に性能を確保できる形でプログラムを変換することを可能とするプログラム変換装置及び方法に関する。
【背景技術】
【０００２】
オペレーティングシステムの主な機能は、ハードウェア管理、タスク管理、データ管理及び入出力管理である。中でもタスク管理は、タスクの実行順序を管理するものであり、ＣＰＵやメモリ、入出力装置等を効率よく動作させるための重要な役割を担う。
【０００３】
タスクとは、プログラムの起動とその実行、終了などの流れを一括管理する制御単位のことである。オペレーティングシステムの管理下で動作するプログラムはタスクとして扱われ、プログラムの実行に関するオペレーティングシステムの操作はすべてタスクとして扱われる。タスクをプログラムとして記述する場合、従来では明示的にタスクの起動及び終了を記述する必要がある。
【０００４】
一方、並列化の観点では、プログラムの制御構造やデータの依存関係などを解析することにより、自動的に並列実行可能な処理単位を検出し、タスクに分割することで並列実行を行う方法が知られている(例えば、特許文献１参照)。
【０００５】
また、タスク分割を明示するのではなく、並列可能な領域を定義する並列コンパイラ指示文を明示することにより、該当部分を自動的にタスクに分割し、並列実行を行う方法が知られている(例えば、特許文献２参照)。
【特許文献１】特開平６−２５０９８８号公報
【特許文献２】特開２００４−９４５８１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
すなわち従来の手法では、明示的にタスク分割の記述を行うか、自動的に並列実行部分を検出してタスク分割を行っていたが、これらは並列化によって平均処理性能の向上を目的としたものである。
【０００７】
メディア処理の実行環境における並列化では、平均処理性能の向上よりも処理性能の保証が重要とされる。この環境においてはさまざまな処理が同時に実行され、処理の相対優先度を設定することが難しい。
【０００８】
本発明は、上記問題を解決するために、プログラムの指定区間に対して性能指標を与えることにより、該当区間を自動的にタスクに分割して性能指標を付加する、プログラム変換装置及び方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するために、本発明は、プログラムソースを変換するプログラム変換装置が、プログラムに埋め込まれた区間を表す区間コードと、この区間コードに関連付けてプログラムに埋め込まれた性能指標情報とを取得する区間及び指標取得手段と、取得した区間コードをタスクコードとして分離し、タスク先頭を示すコードとタスク終端を示すコードとを追加するタスクコード変換手段と、スケジューラに入力するための性能指標をタスクに付加するタスク指標付加手段とを備えたものである。
【００１０】
本発明によれば、上記において、タスクコード変換手段は、タスク先頭を示すコードとしてタスク開始コードを追加し、タスク終端を示すコードとしてタスク終了コードを追加するものであることが好適である。
【００１１】
本発明によれば、上記において、タスクコード変換手段は、タスク先頭及びタスク終端を示すコードとしてプロセッサの特定の命令を追加するものであることが好適である。
本発明によれば、上記において、タスクコード変換手段は、タスク生成コードを追加するものであるとともに、前記タスク生成コードに対して、付加された指標に従って起動することができない場合にエラーとして出力する、という動作からなるコードを追加するものであることが好適である。
【００１２】
本発明によれば、上記において、性能指標情報は、単位時間内に処理することができる命令数を示す性能値であることが好適である。
本発明によれば、上記において、性能指標情報は、処理可能な最大性能値に対する割合を示す値であることが好適である。
【００１３】
本発明によれば、上記において、タスクコード変換手段は、区間コード開始点の境界及び区間コード終了点の境界で変数の再利用があることを検出し、変数の再利用がある場合は、タスク開始前のコードから分離したタスクコードへの変数の転送及び分離したタスクコードの終了前からタスク終了後のコードへの変数の転送を行うコードを付加するものであることが好適である。
【００１４】
本発明によれば、上記において、区間及び指標取得手段は、性能指標情報とともにグループを示す符号を取得するものであり、タスクコード変換手段は、グループを示す符号が同じ区間コードを検出し、かつこれらの区間コードに依存関係がないことを判定した場合に、並列にタスクを生成するタスク生成コードを追加するものであることが好適である。
【００１５】
また本発明は、プログラムの実行順序を制御するスケジューラが、タスク生成コードを検出した際にタスクからタスク性能指標を入力するタスク性能指標入力手段と、前記タスク性能指標に従って全体のスケジュールを行うスケジューリング手段と、前記タスク性能指標を実行処理に割り当てる時間を処理時間として、前記処理時間を超過すると、別の処理可能なタスクに実行を移すタスク切換手段とを備えたものである。
【００１６】
本発明によれば、上記において、スケジューリング手段は、プロセッサが特定の命令を解読した際に、スケジューリングの開始または終了を行うものであることが好適である。
本発明のプログラム開発ツールは、外部からのプログラムを受け付けるプログラム受付手段と、受け付けたプログラムを表示するプログラム表示手段と、前記プログラム表示手段により表示されたプログラムの区間及びこの区間に関連付けた性能指標情報を入力として受け取るユーザ情報入力手段と、上述のプログラム変換装置であって、前記プログラム受付手段によって受け付けられたプログラムと、前記ユーザ情報入力手段によって受け取られたプログラムの区間及びこの区間に関連付けた性能指標情報とにもとづいて、前記プログラムを、性能指標情報を持つタスクに分割するプログラム変換装置とを備えたものである。
【００１７】
本発明の情報処理装置は、上述のプログラム変換装置で性能指標を付加されたタスクに変換されたプログラムを含むプログラムコードと、上述のスケジューラを記憶したメモリと、前記プログラムコード及び前記スケジューラを処理するプロセッサとを備えたものである。
【００１８】
本発明の、プログラムソースを変換するプログラム変換方法は、プログラムに埋め込まれた区間を表す区間コードと、この区間コードに関連付けてプログラムに埋め込まれた性能指標情報とを取得する区間及び指標取得ステップと、取得した区間コードをタスクコードとして分離し、タスク先頭を示すコードとタスク終端を示すコードとを追加するタスクコード変換ステップと、スケジューラに入力するための性能指標をタスクに付加するタスク指標付加ステップとを有するものである。
【００１９】
本発明の、プログラムソースを変換するプログラム変換ソフトウェアは、プログラムに埋め込まれた区間を表す区間コードと、この区間コードに関連付けてプログラムに埋め込まれた性能指標情報とを取得する区間及び指標取得ステップと、取得した区間コードをタスクコードとして分離し、タスク先頭を示すコードとタスク終端を示すコードとを追加するタスクコード変換ステップと、スケジューラに入力するための性能指標をタスクに付加するタスク指標付加ステップとを実行させるものである。
【００２０】
本発明の記録媒体は、上記プログラム変換ソフトウェアを記録したものである。
【発明の効果】
【００２１】
本発明により、プログラムの指定区間を実行する際にそのプログラムは独立したタスクとして動作し、スケジューラによって該当タスクが有する性能指標に基づいた時間割当を行うことで、他の処理に影響を与えることなく指定区間の性能保証を行うことを可能とする。
【発明を実施するための最良の形態】
【００２２】
［第１の実施の形態］
以下、本発明の第１の実施の形態のプログラム変換装置について、図面を用いて説明する。
【００２３】
図１は、本発明の第１の実施の形態のプログラム変換装置を示すブロック図である。このプログラム変換装置１は、区間及び指標取得手段１１と、タスクコード変換手段１２と、タスク指標付加手段１３とにより構成される。
１．区間及び指標取得手段１１
ここでは、入力されるプログラムソース２として、図２に示すようなＣ言語で記述されたものを例として説明する。ただし、本発明は言語や文法を規定するものではない。
【００２４】
区間及び指標取得手段１１は、入力されたプログラムソースの字句解析を行い、予め定められた予約語を検出した後、付随する指標値を取得する。ここではＣ言語のコンパイラへの指示行を示す“＃ｐｒａｇｍａ”を用いるものとし、予約語を仮に“＿ＰＥＲＦＯＲＭ”とする。図２のものを入力とした場合、“＃ｐｒａｇｍａ  ＿ＰＥＲＦＯＲＭ（数値）”の行を検出し、数値である「１００」を指標値として取得する。
【００２５】
さらに、検出行に続く“｛”から、対応する“｝”までを検出し、この区間のコードを性能保証コードとして取得する。
２．タスクコード変換手段１２
図１のタスクコード変換手段１２は、区間及び指標取得手段１１で取得した情報をもとに、入力プログラムソース２を変換し、目的プログラム３を出力する。
【００２６】
図３（ａ）に示されるプログラムを、タスクコード変換手段１２で変換する前のプログラムソースとする。ここでは、区間及び指標取得手段１１によって、性能指標値“１００”と性能保証コード４１とが取得されている。
【００２７】
図３（ｂ）（ｃ）に、タスクコード変換手段１２で変換した後のプログラムソースを示す。変換を行う過程を図４のフローを用いて説明する。
まず、図３（ａ）のコードＸと性能保証コード４１との間で有効な自動変数を検出し、同様に、性能保証コードとコード４１とコードＹとの間で有効な自動変数を検出する（ステップＳ５１）。これらの変数は、タスクとして分割された場合に変数の有効範囲が変化してしまうため、分割前の関数と分割後のタスク関数との間での受渡しが必要となる。
【００２８】
次に、図３（ａ）の入力ソースから、図１の区間及び指標取得手段１１によって検出した“＃ｐｒａｇｍａ  ＿ＰＥＲＦＯＲＭ（数値）”行と性能保証コード４１とを削除する（ステップＳ５２）。
【００２９】
この削除した部分(コードＸとコードＹとの間)に、予め準備済みのタスク生成コード４２（図３（ｂ））を挿入する（ステップＳ５３）。
最後に、図３（ｃ）に示すように新たに関数を作成する。関数名４５は、重ならないように一意であるものとする。この関数内に、性能保証コード４１、タスク開始コード４３、タスク終了コード４４を挿入する（ステップＳ５４）。
【００３０】
図３（ｂ）の変換例では、タスク生成コード４２は、以下のような構成としている。なお、ここで記述する割当時間値は、既に取得されている性能指標値“１００”ではなく、タスク指標付加手段１３で得られる値とするため、ここでは仮の値である定数ラベル “＿ＱＴＭ＿”を記述する。
【００３１】
まず、上述のステップＳ５１で検出した、「コードＸから性能保証コード４１へ」の自動変数の退避を行う（４２ａ）。
次に、現在割り当てられている時間の総和（変数  ｃｕｒ＿ｔｉｍｅ）に割当時間値（定数＿ＱＴＭ＿）  を加える処理を行う（４２ｂ）。その結果、予め設定されている最大値（変数  ｍａｘ＿ｔｉｍｅ）を超える場合は、エラー処理を行い、タスクの分割を行わない（４２ｃ）。タスクで共有される可能性のある変数は、必要ならば排他制御処理を行う。
【００３２】
エラーでない場合は、タスクの生成を行う。タスクの属性を初期化し（４２ｄ）、属性としてタスクに与える割当時間値を設定する（４２ｅ）。
次に、前述の属性を用いて、“ｔａｓｋ＿ｃｒｅａｔｅ”関数にてタスクの生成を行う（４２ｆ）。ステップＳ５３で作成する関数名がここで指定される。
【００３３】
この時点でタスクが割当時間を確保して実行を開始しているため、この部分の残りは、生成したタスクが終了し“ｔａｓｋ＿ｊｏｉｎ”関数にて合流するのを待つ（４２ｇ）。
タスク終了及びエラー処理が完了した時点で、割当時間の総和からタスクの割当時間値を引く処理を行い（４２ｈ）、ステップＳ５１で検出した「性能保証コード４１からコードＹへ」の自動変数の復帰を行う（４２ｉ）。
【００３４】
図３（ｃ）のタスク開始コード４３には、ステップＳ５１で検出した「コードＸから性能保証コード４１へ」の自動変数の復帰コード４３ａが含まれ、タスク終了コード４４には、ステップＳ５１で検出した「性能保証コード４１からコードＹへ」の自動変数の復帰コード４４ａと、タスクの終了を宣言する“ｔａｓｋ＿ｅｘｉｔ”関数４４ｂとが含まれる。
３．タスク指標付加手段１３
図１のタスク指標付加手段１３は、取得済みの性能指標値“１００”をもとに、タスクの割当時間を算出して、実際の値を、前述のタスクコード変換手段１２で設定したラベル“＿ＱＴＭ＿”に定義する。
【００３５】
割当時間の算出は，取得した性能指標値をもとに行う。本第１の実施の形態では、性能指標値を「１秒間に処理することができる命令数を示す性能値」とする。
タスク指標付加手段１３では、図５に示すフローに従い、性能指標値から実際の割当時間値を算出して（ステップＳ７１）、タスクコード変換手段１２で変換したプログラムコードに、図６に示すようなタスク指標情報や外部参照変数の宣言を含むプログラムコード６１を追加する（ステップＳ７２）。
【００３６】
プログラムコード６１では、図１のタスク指標付加手段１３で定義した割当時間値である定数＿ＱＴＭ＿の実際の値を定義している（６１ａ）。性能指標値を「１秒間に処理することができる命令数を示す性能値」としているため、ここでは１ステップにつき１命令の処理を行うプロセッサとして、「性能指標値 ÷ プロセッサ周波数 × 最大割当時間値」が＿ＱＴＭ＿の値となる。
【００３７】
プロセッサ周波数ｃｐｕ＿ｆｒｅｑ、最大割当時間値ｍａｘ＿ｔｉｍｅは、ここでは宣言のみとし（６１ｂ、６１ｃ）、実際の値は全体プログラム開始時に予め設定する必要がある。また、現在の全割当時間を保持する値ｃｕｒ＿ｔｉｍｅも、ここでは宣言のみとし（６１ｄ）、全体プログラム開始時に予め初期化しておく必要がある。
【００３８】
なお、性能指標値は、「全体に対する性能の割合を示す値」としてもよい。つまり、指定区間に対して３０％の性能を与えたいという場合に、０．３または３０という値を指定できるようにしてもよい。この場合は、割当時間値の算出は「性能指標値(割合)×最大割当時間値」とし、プロセッサ周波数ｃｐｕ＿ｆｒｅｑは不要である。
【００３９】
この第１の実施の形態によると、プログラムの指定区間を実行する際にそのプログラムは独立したタスクとして動作するため、他の処理に影響を与えることなく指定区間の性能保証を行うことができる。
［第２の実施の形態］
次に、本発明の第２の実施の形態のプログラム変換装置について説明する。
【００４０】
第２の実施の形態は、第１の実施の形態と同じ構成を取り、タスクコード変換手段１２を別の構成に置き換えたものである。
１．区間及び指標取得手段１１
第２の実施の形態では、区間及び指標取得手段１１は第１の実施の形態と同じ構成であるため、詳細な説明を省略する。
２．タスクコード変換手段１２
タスクコード変換手段１２は、区間及び指標取得手段１１で取得した情報をもとに、図１に示す入力プログラムソース２を変換し、プログラムを出力する。
【００４１】
図７（ａ）に、タスクコード変換手段１２で変換する前のプログラムソースを示す。区間及び指標取得手段１１によって、性能指標値“１００”と性能保証コード８１とが取得されている。
【００４２】
図７（ｂ）に、タスクコード変換手段１２で変換した後のプログラムソースを示す。変換を行う過程を図８のフローを用いて説明する。
まず、入力ソースから区間及び指標取得手段１１で検出した“＃ｐｒａｇｍａ  ＿ＰＥＲＦＯＲＭ（数値）”行を削除する（ステップＳ９１）。
【００４３】
次に、検出した性能保証コード８１の前後にｓｙｓｃａｌｌ命令を挿入する（ステップＳ９２）。ここで扱うｓｙｓｃａｌｌ命令はスケジューラ機能の呼出しを行うもので、実際の機能はスケジューラ内で処理される。実際の処理内容は、後述のスケジューラの項で説明する。
【００４４】
性能保証コード８１の前に挿入されるｓｙｓｃａｌｌ命令８２には、引数(オペランド)として性能指標値を示す定義ラベル＿ＱＴＭ＿を与え、性能保証コード８１の後に挿入されるｓｙｓｃａｌｌ命令８３には、引数(オペランド)として性能指標値を示さない、つまり区間終了を示す−１を与える。但し、性能指標値が−１値を使用しないという条件を要する。
３．タスク指標付加手段１３
第２の実施の形態では、タスク指標付加手段１３は、第１の実施の形態と同じ構成であるため、詳細な説明を省略する。
【００４５】
この第２の実施の形態によれば、適用するプログラムへは特定のプロセッサ命令の挿入だけでよく、タスクの生成や終了に関わるコードはプログラムと完全に分離することができるため、オペレーティングシステムの機能や形態に依存しないようにプログラムを作成できる。
［第３の実施の形態］
次に、第３の実施の形態のプログラム変換装置について説明する。
【００４６】
この第３の実施の形態も、上記した第２の実施の形態と同様に、第１の実施の形態と同じ構成をとる。ここでは、区間及び指標取得手段１１及びタスクコード変換手段１２を拡張し、並行に動作する複数のタスクに変換する。
１．区間及び指標取得手段１１
ここでは、入力されるプログラムソース２（図１）として、図９に示すようなＣ言語で記述されたものを例として説明する。
【００４７】
区間及び指標取得手段１１は、入力されたプログラムソースの字句解析を行い、予め定められた予約語を検出した後、付随する性能指標値を取得する。
図９に示すものを入力とした場合、“＃ｐｒａｇｍａ  ＿ＰＥＲＦＯＲＭ（数値、記号）”の行を検出する。検出行に続く“｛”から、対応する“｝”までを検出し、性能指標値とこの区間のコードとを性能保証コードとして取得する。さらに、“＃ｐｒａｇｍａ  ＿ＰＥＲＦＯＲＭ（数値、記号）”が続く場合、記号が同じならば同様に性能指標値と性能保証コードとを順次取得する。
【００４８】
但し、この性能保証コード間、つまり終端記号“｝”と次の“＃ｐｒａｇｍａ  ＿ＰＥＲＦＯＲＭ（数値、記号）”との間に一切コードを含んではならない。なぜなら、この第３の実施の形態では、２つ以上のコードが並行に実行されることを保証しなければならないが、間にコードをはさむことで、時間的順序関係が発生するためである。
【００４９】
また、性能指標値が０である性能保証コードを１つだけ含むことができる。これは、性能確保を行わないコードとして他と並行に実行されるものとする。
２．タスクコード変換手段１２
タスクコード変換手段１２は、区間及び指標取得手段１１で取得した情報をもとに、入力プログラムソース２を変換し、目的プログラム３を出力する。
【００５０】
図１０（ａ）に示されるプログラムを、タスクコード変換手段１２で変換する前のプログラムソースとする。区間及び指標取得手段１１によって、性能指標値“１００”と性能保証コード（Ａ）１０１、性能指標値“２００”と性能保証コード（Ｂ）１０２、性能指標値“０”と通常コード１０３、が取得されている。
【００５１】
図１０（ｂ）（ｃ）は、タスクコード変換手段１２で変換した後のプログラムソースを示す。変換を行う過程を図１１のフローを用いて説明する。
第１の実施の形態にあった自動変数の検出は行わない。これは、複数のコードが並行して動作する場合は、自動変数は、それぞれのコードに分配して実行した後にその変数を元に戻すことができないからである。そのため、ここでは、自動変数は通常コードが使用できるものとする。
【００５２】
図１１において、まず、図１０（ａ）の入力ソースから、区間及び指標取得手段１１で検出した“＃ｐｒａｇｍａ  ＿ＰＥＲＦＯＲＭ（数値、記号）”行と性能保証コード１０１とを削除する（ステップＳ１１１）。これを検出行分繰り返すので、性能保証コード（Ｂ）１０２、通常コード１０３もそれぞれ削除する。
【００５３】
この削除した部分（コードＸとコードＹとの間）に、予め準備済みのタスク生成コード１０４を挿入する（ステップＳ１１２）。
最後に、図１０（ｃ）に示すように、検出行分だけ新たに関数を作成する。但し、通常コードについては作成しない。関数名１０６は、重ならないように一意であるものとする。この関数内に性能保証コード１０１または１０２、タスク終了コード１０５を挿入する（ステップＳ１１３）。
【００５４】
図１０（ｂ）の変換例では、タスク起動コード１０４は以下のような構成としている。なお、ここで記述する割当時間値は、性能保証コード（Ａ）（Ｂ）それぞれに対応して、定数ラベル“＿ＱＴＭＡ＿”及び“＿ＱＴＭＢ＿”を記述する。
【００５５】
まず、現在割り当てられている時間の総和（変数ｃｕｒ＿ｔｉｍｅ）に割当時間値の和（＿ＱＴＭＡ＿＋＿ＱＴＭＢ＿）を加える処理を行い（１０４ａ）、予め設定されている最大値（変数  ｍａｘ＿ｔｉｍｅ）を超える場合はエラー処理を行い、タスクの分割を行わない（１０４ｂ）。タスクで共有される可能性のある変数は、必要ならば排他制御処理を行う。
【００５６】
エラーでない場合は、タスクの生成を行う。タスクの属性を初期化し（１０４ｃ）、属性としてタスクに与える割当時間値を設定する（１０４ｄ）。
次に、前述の属性を用いて“ｔａｓｋ＿ｃｒｅａｔｅ”関数にてタスクの生成を行う（１０４ｅ）。ステップＳ１１３で作成する関数名がここで指定される。
【００５７】
次に、割当時間値の設定とタスクの生成について、検出行分だけ行を追加する（１０４ｆ）。
この時点でタスクが割当時間を確保して実行を開始しているため、この部分の残りは通常コード１０３が存在すればそのコードを実行する（１０４ｇ）。コードが終了すれば、生成した全てのタスクが終了し“ｔａｓｋ＿ｊｏｉｎ”関数にて合流するのを待つ（１０４ｈ）。ただし、全てのタスクが既に終了していれば、この関数で待つことはない。
【００５８】
タスク終了及びエラー処理が完了した時点で、割当時間の総和から全てのタスクの割当時間値を引く処理を行う（１０４ｉ）。
また、タスク終了コード１０５には、タスクの終了を宣言する“ｔａｓｋ＿ｅｘｉｔ”関数が含まれる。
【００５９】
このような構成により、割当時間値を保持する複数のタスクを並行に実行することができる。
３．タスク指標付加手段１３
第３の実施の形態では、タスク指標付加手段１３は、第１の実施の形態と同じ構成であるため、詳細な説明を省略する。
【００６０】
この第３の実施の形態によれば、一連の処理によって、連続する区間指定及び対応する性能指標情報を、並行に動作する複数のタスクに変換することができる。
［第４の実施の形態］
次に、第４の実施の形態におけるスケジューラについて説明する。
【００６１】
図１２は、本発明にもとづくスケジューラとその周辺を含むプログラム実行装置を示すブロック図である。このプログラム実行装置は、タスクスケジューリング部すなわちスケジューラＸ１０と、プログラム記憶部Ｘ２０と、タイマ制御部Ｘ３０と、実行制御部Ｘ４０とを備える。以下、スケジューラＸ１０について説明する。
【００６２】
タスクスケジューリング部すなわちスケジューラＸ１０は、タスク受付部Ｘ１１と、タイムスロット記憶部Ｘ１２と、タイムスロット切換部Ｘ１３と、タスク選択部Ｘ１４とを有する。
【００６３】
タイムスロットとは、ＣＰＵによりプログラムを実行する時間をある時間ごとに区切ったものである。タイムスロットとタスクとを結びつけることにより、当該時間の間だけ当該タスクを実行することができる。
１．タスク受付部Ｘ１１
タスク受付部Ｘ１１は、ユーザプログラムからの指示に従って発生したタスクを受け付け、当該タスクをスケジューリングの対象となるようにタイムスロット記憶部Ｘ１２に出力する。タイムスロット記憶部Ｘ１２に出力する情報は、プログラム記憶部Ｘ２０から読み出されたタスク情報及び割当時間である。
【００６４】
タスク情報は、プログラム開始アドレスとスタックポインタとを含む。プログラム開始アドレスは、タスクが書き込まれた先頭のアドレスである。スタックポインタは、タスクの切換が生じた際にタスクの状態を一時的に記録する位置情報である。
【００６５】
割当時間は、タスクを受け付ける際にタスクに対応するタイムスロットの割当時間として設定する値であり、前記第１、第２、第３の実施の形態のプログラム変換装置にて性能指標情報を変換した値を設定する。また、タスク受付部Ｘ１１は、その内部に、周期値を保持する領域Ｘ１５を持っており、周期の入力が行われた際に当該周期値を保持することができる。
２．タイムスロット記憶部Ｘ１２
タイムスロット記憶部Ｘ１２は、図１３に示すようなタイムスロット情報Ｘ１００、Ｘ１１０、…を管理するためのものである。
【００６６】
タイムスロット情報Ｘ１００はタイムスロットの情報を含んでおり、具体的には、割当時間Ｘ１００ａ、フラグＸ１００ｂ、タスク管理情報Ｘ１００ｃを含む。
割当時間Ｘ１００ａは、タイムスロット生成と同時に設定され、当該タイムスロットに対応するタスクが実行することができる時間を示しており、当該時間を超えると次のタイムスロットに切り換える処理を行う。
【００６７】
実行フラグＸ１００ｂは、当該タイムスロットが有効であるかどうかを示す二値の整数である。
タスク管理情報Ｘ１００ｃは、タスクを管理するための管理情報を保持しており、１つのタスク情報ブロックが１つのタスクを示している。このタスク管理情報Ｘ１００ｃはプログラム開始アドレス及びスタックポインタを含んでおり、タスク生成時には、タスク受付部Ｘ１１によって入力された前記タスク情報を保持する。タスク切換時には、中断されたタスクの実行アドレス及び当該時点でのスタックポインタを保持する。
【００６８】
タイムスロット情報Ｘ１１０、Ｘ１２０も、同様に、割当時間Ｘ１１０ａ、Ｘ１２０ａ、実行フラグＸ１１０ｂ、Ｘ１２０ｂ、タスク管理情報Ｘ１１０ｃ、Ｘ１２０ｃを含む。
３．タイムスロット切換部Ｘ１３
タイムスロット切換部Ｘ１３は、タイムスロットに接続したタスクの実行時間が割当時間を超えたときに、タイムスロットの切換を行う。割当時間を超過したかどうかはタイマ制御部Ｘ３０によって知らされ、それにもとづき次に使用するタイムスロットを選択する。この第４の実施の形態では、前記タイムスロット情報は、タイムスロット情報Ｘ１００、タイムスロット情報Ｘ１１０、…の順に配列を構成しているものとする。よって、次に選択するタイムスロットは配列順により決定し、決定したタイムスロット情報から割当時間を取得してタイマ制御部Ｘ３０にセットする。
４．タスク選択部Ｘ１４
タスク選択部Ｘ１４は、タイムスロット切換部Ｘ１３の切り換え時及び実行中のプログラムからの指示に従って、現在実行中のタスクの情報をタイムスロット記憶部Ｘ１２に退避し、次に実行するタスクの情報をタスク記憶部Ｘ１２から取り出し、実行制御部Ｘ４０へ出力する。
＜処理の詳細＞
以下、第４の実施の形態のスケジューラにおける処理の詳細として、スケジューリング処理と、タスク追加処理と、タスク終了処理とについて説明する。
１．スケジューリング処理
スケジューリング処理について、図１４のフローチャートに基づいて説明する。
【００６９】
設定された時間を経過すると、タイマ制御部Ｘ３０からタイムスロット切換部Ｘ１３に信号が送信され、スケジューリング処理を開始する。
まず、現在実行しているタスクの状態をタスク管理ブロックに保存する（ステップＳ１４０１）。
【００７０】
次に、タイムスロットの切換処理を行う。タイムスロット情報配列における現在選択している要素の次の要素を、次に選択するタイムスロット情報とする。次の要素がない場合は、タイムスロット情報配列の先頭の要素を選択する。選択したタイムスロット情報に含まれる割当時間を取り出し、タイマ制御部Ｘ３０に出力する。この時点より割当時間だけ経過した後、タイマ制御部Ｘ３０より再び信号が送信される（ステップＳ１４０２）。
【００７１】
タイムスロットには通知を受け取る機構があるが、通知が無かった場合において（ステップＳ１４０３）、選択したタイムスロット情報に含まれるタスク管理ブロックへのポインタは、次に実行するタスクを示している。タイムスロットが保持する実行フラグが無効ならば（ステップＳ１４０４）、当該タイムスロットでは実行するタスクがないことを示しているので、次のタイムスロットに切り換えて、同様の処理を、有効なタイムスロットが見つかるまで行う（Ｓ１４０５）。
【００７２】
有効なタイムスロットが見つからなければ、実行するタスクがないことから、プロセッサ省電力状態に遷移する（ステップＳ１４１０）。
有効なタイムスロットがあれば（ステップＳ１４０４）、タイムスロットに対応するタスクのうち、中断していたタスクの状態を復帰して実行を再開する（ステップＳ１４０６ステップＳ１４１１）。
【００７３】
上述のようにタイムスロットには通知を受け取る機構があり、当該タイムスロットに通知があったならば（ステップＳ１４０３）、タイムスロット情報のポインタに接続されたタスクを取得する（ステップＳ１４０７）。
【００７４】
取得したタスクが存在し実行可能であれば（ステップＳ１４０８）、当該タスクに実行を切り換えてタスクの実行を再開し（ステップＳ１４０９、ステップＳ１４１１）、取得したタスクが無効ならば、次のタイムスロットに切り換える（ステップＳ１４０２）。一連の処理により、適切なスケジューリングを行うことができる。
２．タスク追加処理
タスク追加処理について、図１５のフローチャートに基づいて説明する。
【００７５】
タスク追加の要求は、タスク追加関数である“ｔａｓｋ＿ｃｒｅａｔｅ”関数か、ｓｙｓｃａｌｌ命令によって発生する。当該要求を受けて、タスク受付部Ｘ１１により追加するタスクの割当時間を取得する（ステップＳ１５０１）。
【００７６】
次に、タイムスロットの追加が可能かどうかを検査する。領域Ｘ１５に予め入力されている周期値がタスク受付部Ｘ１１に保持されており、全てのタイムスロットの総和をタイムスロット記憶部Ｘ１２より取得し、当該総和値に割当時間値を加えた値が周期値を超えなければ、当該タスクに対応するタイムスロットの追加が可能と判定する（ステップＳ１５０２）。当該周期値を超えている場合は、追加要求に対するエラーを返して（Ｓ１５０３）、処理を終わる。
【００７７】
ステップＳ１５０２においてタイムスロットが追加可能と判定されたならば、タイムスロット情報を生成して、割当時間をセットする（ステップＳ１５０４）。
当該タイムスロット上で実行するタスクの管理ブロックもあわせて生成し、タスク情報をセットする（ステップＳ１５０５）。
【００７８】
タイムスロット情報とタスク管理ブロックとが生成できたところで、対応を示すために、タスク管理ブロックの格納位置をタイムスロット情報のポインタにセットする（ステップＳ１５０６）。
【００７９】
最後に当該タイムスロットの実行フラグを有効にする（ステップＳ１５０７）。
これらの一連の処理により、追加要求されたタスクを、その種別に従い適切な位置に追加することができる。
３．タスク終了処理
タスク終了の要求は、タスク終了関数である“ｔａｓｋ＿ｅｘｉｔ”関数か、ｓｙｓｃａｌｌ命令によって発生する。
【００８０】
タスク終了処理は、当該タスクのタイムスロット情報に含まれる実行フラグを無効にし、タイムスロット切換部Ｘ１３に対して当該タスクが切換対象にならないようにするのみである。
【００８１】
この第４の実施の形態によれば、性能指標を持つ区間コードに対して、性能指標に応じた時間を割り当てて確実に実行することが可能となる。
［第５の実施の形態］
次に、本発明の第５の実施の形態にもとづく開発ツールについて説明する。
【００８２】
図１６に、前述のプログラム変換装置を用いた統合環境の概略図を示す。統合環境１６０１は、プログラム受付部１６１１と、ユーザ情報入力部１６１２と、プログラム表示部１６１３と、プログラム変換装置１６１４と、コンパイル装置１６１５と、ライブラリ１６１５とで構成される。
【００８３】
プログラム受付部１６１１は、プログラムソース１６０２を入力とするか、またはキーボードなどの入力装置１６０３を用いて直接プログラムの入力を受け付ける。受け付けたプログラムは、プログラム表示部１６１３を通して、画面表示装置１６０４に表示される。
【００８４】
ユーザ情報入力部１６１２は、マウスなどの入力装置１６０３を用いて、画面表示装置１６０４に表示されたプログラムの一部分を範囲指定する操作を受け付ける。これにより、プログラムの区間を設定することができる。また、当該プログラム区間に対応した値入力を促し、入力装置１６０３により入力された値を受け付ける。
【００８５】
ユーザ情報入力部１６１２が受け付けた値及びプログラム区間は、プログラム変換装置１６１４の入力となり、プログラム受付部６１１からのプログラムは性能指標値を持つタスクに分割される。変換されたプログラムはコンパイル装置１６１５により機械語に翻訳され、ライブラリ１６１６と結合されて、目的プログラム１６０５として出力される。ライブラリ１６１６にスケジューラプログラムが含まれてもよい。
【００８６】
この第５の実施の形態によれば、区間や情報を指示するためにプログラムに直接指示行を記入することが不要となり、性能指標と区間を直感的な操作で指定することが可能となる。
［第６の実施の形態］
次に、本発明の第６の実施の形態にもとづく情報処理装置について説明する。
【００８７】
図１７は、前述のプログラム変換装置にて変換された目的プログラム及び前記スケジューラを含む情報処理装置の概略を示す。
この情報処理装置１７は、ＣＰＵ１７０１、メモリ１７０２、Ｉ/Ｏブリッジ１７０３、キー入力回路１７０４、表示回路１７０５、音声入出力回路１７０６、通信回路１７０７、外部記憶装置１７０８を含む。
【００８８】
ＣＰＵ１７０１とメモリ１７０２とは、ＣＰＵバス１７０９ａを介して互いに接続される。キー入力回路１７０４と、表示回路１７０５と、音声入出力回路１７０６と、通信回路１７０７と、外部記憶装置１７０８とは、システムバス１７０９ｂを介して互いに接続される。ＣＰＵバス１７０９ａとシステムバス１７０９ｂとは、Ｉ／Ｏブリッジ１７０３を介して互いに接続される。
【００８９】
ＣＰＵ１７０１は、メモリ１７０２からプログラムを読み出し、解読して実行する。必要ならばメモリ１７０２からさらにデータを読み出し、実行した結果をメモリ１７０２に書き込む。
【００９０】
本第６の実施の形態では、前記プログラム変換装置にて変換された目的プログラム及び前記スケジューラがメモリ１７０２内に記録されており、ＣＰＵ１７０１によって実行される。
【００９１】
この目的プログラムとスケジューラとが実行されることで、予め指定された区間の実行は、性能指標に従って行われる。
この目的プログラムに画像表示処理、音声出力処理、通信処理が含まれている場合は、それぞれ処理が上記性能指標で示された割当時間で実行されることにより、これらの処理を、互いに影響されることなくリアルタイムで遂行することができる。
【産業上の利用可能性】
【００９２】
本発明にかかるプログラム変換装置は、プログラム該当区間に関連した性能指標を受け取り、その該当区間が実行される際に必要となる時間割当情報を出力する機能を有することから、たとえば映像再生処理プログラムにおいて、映像出力にかかる乱れやノイズを引き起こすことなく、処理を遂行することができるため、映像音声処理をリアルタイムに行う機器の開発環境などに適用可能である。
【図面の簡単な説明】
【００９３】
【図１】本発明の第１の実施の形態のプログラム変換装置の構成を示すブロック図
【図２】図１のプログラム変換装置が変換する前のプログラムの一例を示す図
【図３】図１のプログラム変換装置におけるタスクコード変換手段が変換した結果のプログラムの一例を示す図
【図４】図１のプログラム変換装置におけるタスクコード変換手段の動作を示すフローチャート
【図５】図１のプログラム変換装置におけるタスク指標付加手段の動作を示すフローチャート
【図６】図１のプログラム変換装置におけるタスク指標付加手段が変換した結果のプログラムの一例を示す図
【図７】本発明の第２の実施の形態のプログラム変換装置におけるタスクコード変換手段が変換した結果のプログラムの一例を示す図
【図８】本発明の第２の実施の形態のプログラム変換装置におけるタスクコード変換手順の動作を示すフローチャート
【図９】図１のプログラム変換装置が変換する前のプログラムの他の例を示す図
【図１０】本発明の第３の実施の形態のプログラム変換装置におけるタスクコード変換手段が変換した結果のプログラムの一例を示す図
【図１１】本発明の第３の実施の形態のプログラム変換装置におけるタスクコード変換手順の動作を示すフローチャート
【図１２】本発明の第４の実施の形態のスケジューラの構成を示すブロック図
【図１３】図１２のスケジューラにおけるタイムスロット記憶部の構成を示すブロック図
【図１４】図１２のスケジューラにおけるスケジューリング処理手順を示すフローチャート
【図１５】図１２のスケジューラにおけるタスク追加手順を示すフローチャート
【図１６】本発明の第５の実施の形態にもとづく開発ツールの構成を示すブロック図
【図１７】本発明の第６の実施の形態にもとづく情報処理装置の構成を示すブロック図
【符号の説明】
【００９４】
１１                          区間及び指標取得手段
１２                          タスクコード変換手段
１３                          タスク指標付加手段
４１、８１、１０１、１０２    性能保証コード
４２、１０４                  タスク生成コード
４３、８２                    タスク開始コード
４４、８３、１０５            タスク終了コード
【図１】
2006126977.tif 000003
【図２】
2006126977.tif 000004
【図３】
2006126977.tif 000005
【図４】
2006126977.tif 000006
【図５】
2006126977.tif 000007
【図６】
2006126977.tif 000008
【図７】
2006126977.tif 000009
【図８】
2006126977.tif 000010
【図９】
2006126977.tif 000011
【図１０】
2006126977.tif 000012
【図１１】
2006126977.tif 000013
【図１２】
2006126977.tif 000014
【図１３】
2006126977.tif 000015
【図１４】
2006126977.tif 000016
【図１５】
2006126977.tif 000017
【図１６】
2006126977.tif 000018
【図１７】
2006126977.tif 000019