(57)【要約】      （修正有）【課題】プリエンプティブなマルチタスクOS上で、プログラムの指定した区間の処理の時間的制約を満足させるプログラム変換装置及びプログラム変換方法を提供する。【解決手段】プログラムソースを変換するプログラム変換装置５０が、プログラムソース外に記述された時間要求を表す時間コードとその対象区間を表す区間コード５２を取得する時間及び区間コード取得部５０１と、該当区間における実行プロファイル情報５３を取得する実行プロファイル取得部５０２と、クリティカルセクションの位置を解決するクリティカルセクション位置解決部５０３と、スケジューラを制御してクリティカルセクションを実現する手段を選択するスケジューラ制御手段選択部５０４と、スケジューラ制御コードをプログラムソースを変換して挿入し資源予約プログラムソースを生成するスケジューラ制御コード挿入変換部５０５とを備えた。【選択図】図３
2009238051.tif 000002
【特許請求の範囲】
【請求項１】
プリエンプティブなマルチタスクOS上で実行されるプログラムのコードを変換するプログラム変換装置であって、
前記プログラムを記憶する記憶部と、
前記プログラムに対して処理の区間ごとに処理時間要求を設定する記録部と、
前記プログラムの実行プロファイル情報を記録する記録部と、
前記記録部に記録された情報の基づいて、前記プログラムの所定区間ごとに当該区間がクリティカルセクション（資源占有区間）であるかリリースセクション（資源解放区間）であるかを判定し、判定結果により前記マルチタスクOSのスケジューラ制御コードを前記プログラムの所定区間ごとに挿入するスケジューラ制御コードの挿入処理部と、
前記挿入処理部によりスケジューラ制御コードが挿入されたプログラムを記憶する記憶部と、
を備えたことを特徴とするプログラム変換装置。
【請求項２】
プリエンプティブなマルチタスクOS上で実行されるプログラムのコードを変換するプログラム変換装置であって、
前記プログラムを記憶する第１の記憶部と、
前記プログラムに対して処理ステートメントの始点位置と終点位置から成る区間情報ごとに、処理時間の要求値の下限値と上限値を設定する第２の記録部と、
関数ステートメントの平時の処理時間と占有時の処理時間と前記処理時間の差である遅延時間とから成るプログラムの実行プロファイル情報を記録する第３の記録部と、
前記第１の記憶部に記録されたプログラムのステートメント区間ごとに、前記第２の記録部に記録される当該区間の要求処理時間から前記第３の記録を参照して、当該区間がクリティカルセクション（資源占有区間）であるかリリースセクション（資源解放区間）であるかを判定するスケジューラ制御位置解決部と、
前記スケジューラ制御位置解決部によりクリティカルセクションと判定された区間について、マルチタスクOSのスケジューラ制御コードを確定するスケジューラ制御手段選択部と、
クリティカルセクションと判定された区間について、前期第1の記録部に記録されたプログラムにスケジューラ制御開始コード及びスケジューラ制御終了コードを挿入するスケジューラ制御コード挿入変換部と、
を備えたことを特徴とするプログラム変換装置。
【請求項３】
請求項２に記載のプログラム変換装置において、
前記スケジューラ制御位置解決部は、前記区間の要求処理時間が前記第３の記録を参照して対象区間の平時の処理時間より小さい場合に当該区間はクリティカルセクションと判定し、
前記区間の要求処理時間が前記第３の記録を参照して対象区間の平時の処理時間より大きい場合に当該区間はリリースセクションと判定することを特徴とするプログラム変換装置。
【請求項４】
請求項２に記載のプログラム変換装置において、
前記スケジューラ制御コード挿入変換部は、スケジューラ制御開始コード及びスケジューラ制御終了コードに割り込み禁止及び許可のための関数を挿入することを特徴とするプログラム変換装置。
【請求項５】
請求項２に記載のプログラム変換装置において、
前記スケジューラ制御コード挿入変換部は、スケジューラ制御開始コード及びスケジューラ制御終了コードに優先度増加及び減少のための関数を挿入することを特徴とするプログラム変換装置。
【請求項６】
プリエンプティブなマルチタスクOS上で実行されるプログラムのコードを変換するプログラム変換方法であって、
前記プログラムの所定区間ごとの要求処理時間を取得するステップと、
前記ステップで取得した所定区間の要求処理時間と当該区間の平時の処理時間を比較するステップと、
前記プログラムの所定区間の要求処理時間が平時の処理時間より小さいときに当該区間をクリティカルセクションとしてスケジューラ制御コードを前記プログラムに挿入するステップとを有することを特徴とするプログラム変換方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プリエンプティブなマルチタスクOSにおいて、プログラムの指定した区間に対してスケジューリングを制御するために、プログラムを変換することを可能とするプログラム変換装置及びプログラム変換方法に関するものである。
【背景技術】
【０００２】
従来、プログラムにより時間的制約を持ったリアルタイム処理をおこなう際には、プログラムが試行錯誤を経て綿密な微調整が施された形でハードコーディングされる事が多かった。このため、その多くは最終的に性能要求や実装意図の読み取れない職人芸的プログラムになってしまうことがあった。このような可読性の悪い職人芸的プログラムは、バグ対応や性能チューニング等の保守作業において、プログラマに多大な労力を費やさせ、ソフトウェアの生産性・品質を低下させてしまう問題がある。
【０００３】
Linuxのようなプリエンプティブなマルチタスク機能をサポートするOSでは、これはより深刻であり、タスクスケジューリングを最適化しながら各タスクのリアルタイム性を満たさなければならない。そもそも、タイムシェアリング用のOSの場合、構造自体が時間的制約を満たしにくい事も指摘されている。
【０００４】
近年、リアルタイム性が重要である組み込みシステムにおいても、ますます時間的制約の保障が困難になってきている。従来の組み込み向けのリアルタイムOSを適用したシステムでは、システム内のタスクが予め固定されている事が多かった。そのため、熟練者が注意深く各タスクの時間的制約が満たされる優先関係を設定すれば、制約の違反を避けることができた。
【０００５】
しかしながら、最近では、組み込みシステムとはいえ、デジタル化、ネットワーク化によって、開放型システムになりつつあり加速度的に高機能化が進んでいる。そのようなシステム上では、動作するアプリケーションの種類や挙動を予め把握する事は非常に困難となる。
【０００６】
上記の問題に対応するため、近年、資源予約型システムが提案されている。資源予約型システムでは、明示的に設定されたプロセッサの実行時間を確実に割り当てる事で、必要な処理量を確保し、時間的制約を有するタスクを満足させる事ができる。
【０００７】
例えば、非特許文献１で報告された Resource Kernel では、周期とその周期のうちで割り当てるべき計算時間を明示して予約を行い、その予約に応じてプロセッサを割り当てることにより、デッドラインまでに処理が終了することを保障する。
【０００８】
また、特許文献１では、時間的制約を満たしたプロセス群の優先度組み合わせを記録し、その順序通りにタスクスケジュールを再現する手法が述べられている。しかしながら、これらの方法では、Linuxプロセスに対してCPU資源を予約するため、きめ細やかに資源を割り当てる事が難しい。プロセス単位の粗粒度な制御では、一部区間のCPU資源を予約するために、当該処理をプロセスへと再分割する必要が出てきてしまう。
【０００９】
また、特許文献２では、時間的制約を満たすように自動的に指定された処理のプログラムを並列化する方法が述べられている。しかし、当然ながら、適用対象が並列化によって性能向上が見込まれるプログラムに限定される。したがって、十分な並列度の内在しない又は効果の少ないプログラムでは、実行時間を大きく制御できない。
【００１０】
さらに、Resource Kernel のようなカーネルの改変を要求するシステムの場合、システムのプラットフォーム依存度が強くなるため移植性が損なわれてしまう。非特許文献２では、特別なプラットフォームを用意せず、プログラム変換器によって、特定スレッドの時間的制約の違反を回避する QoSWeaver が提案されている。
【００１１】
QoSWeaver は、特に J2EE アプリケーションサーバにおいて、オーバーロード時、過度にCPU 資源を占有するスレッドのプログラムに対して、静的に適度なプリエンプションコードを挿入する。しかし、このような間接的に特定のスレッドへの影響を抑えるアプローチでは、一部区間の時間的制約を満たすために、不要に多くの CPU 処理時間を与えてしまう場合が出てくる。
【００１２】
【特許文献１】特開平6-202884号公報
【特許文献２】特開2006-126977号公報
【非特許文献１】S. Oikawa and R. Rajkumar, “Portable RK: A Portable Resource Kernel for Guaranteed and Enforced Timing Behavior”, IEEE Real-Time Technology and Applications Symposium, 1996
【非特許文献２】K. Kourai, H. Hibino and K. Kourai, “A Dynamic Aspect-Oriented System for OS Kernels”, 6th International Conference on Aspect-Oriented Software Development, 2007
【発明の開示】
【発明が解決しようとする課題】
【００１３】
上記で述べたように従来の技術では、プリエンプティブなマルチタスクOS上で、プロセスやスレッドに捉われず、きめ細やかに処理の時間的制約を満足させる事が困難だった。一方、プログラムの並列化技術を用いて、順序依存で並列度の無い処理をプロセスやスレッドとして抜き出したとしても所期の目的は達成され得ない。
【００１４】
本発明は、上記の課題を解決し、プリエンプティブなマルチタスクOS上で、プログラムの指定した区間の処理の時間的制約を満足させるプログラム変換装置及びプログラム変換方法を提供することを目的とする。
【課題を解決するための手段】
【００１５】
上記目的を達成するために、本発明のプログラム変換装置及びプログラム変換方法は、プログラムに対して時間要求とその対象区間を、プログラム外から与え、時間要求を満たすよう該当区間にクリティカルセクション（資源占有区間）及びリリースセクション（資源解放区間）を設ける事でスケジューリングを制御する資源予約プログラムを生成することにした。
【００１６】
詳しくは、プログラムソース中で、要求時間の対象区間中に含まれるステートメント群の中で、要求時間を満たすためにクリティカルセクション及びリリースセクションにすべきステートメントのセットを選び出し、そのステートメントのセットに CPU を占有させるようなスケジューラ制御コードを挿入することによって、所定の要求時間内に処理を完遂することを保証するものである。
【００１７】
また、本発明の他の観点によれば、複数のプロセスを同時に処理するプリエンプティブなマルチタスクOSにおいて、所定の時間要求を持つ処理に対し、前期時間要求で前期処理を完遂することを保証させるプログラム変換装置であって、プログラムソース外に記述された時間要求を表す時間コードとその対象区間を表す区間コードを取得する時間及び区間コード取得部と、該当区間における実行プロファイル情報を取得する実行プロファイル取得部と、クリティカルセクション及びリリースセクションの位置を解決するスケジューラ制御位置解決部と、スケジューラを制御してクリティカルセクション及びリリースセクションを実現する手段を選択するスケジューラ制御手段選択部と、スケジューラ制御コードをプログラムソースを変換して挿入し資源予約プログラムソースを生成するスケジューラ制御コード挿入変換部とを備えたものである。
【発明の効果】
【００１８】
本発明により、プリエンプティブなマルチタスクOSにおいて、プログラムの任意の指定区間を処理する際、適切なステートメントのセットをクリティカルセクション及びリリースセクションとして実行することで、時間要求を保証することでき、かつそのようなプログラムを自動生成することが可能となる。
【発明を実施するための最良の形態】
【００１９】
以下、本発明を図面に示した具体的な実施の形態に沿って説明するが、本発明は、後述する実施の形態に限定されるものではない。図１は、本発明のプログラム変換装置を組み込んだシステム１０の実施例を示した図である。
【００２０】
図１には、リモートコントローラ２０と、デジタル放送アンテナ３０と、表示装置４０と、本発明のプログラム変換装置５０と、デジタル放送受信機６０とからなるシステム１０が示されている。
【００２１】
デジタル放送受信機６０には、変換プログラムが格納される記憶装置６１と、プロセッサ６２、リモートコントローラ２０からの信号を受信する信号受信部６３、デジタル放送アンテナ３０を介して映像データ、音声データ及び字幕データを受信するデジタル放送チューナー６４とデジタル放送受信機ソフトウェア６５が搭載され、さらに各種資源の管理及びアプリケーションがそれら資源を利用できるようにするためのＯＳ及びアプリケーションが格納されている。
【００２２】
デジタル放送受信機ソフトウェア６５は、リモートコントローラプロセス６５１と、チューナープロセス６５２と、描画プロセス６５３と、電子番組ガイドプロセス６５４及びデータ放送ブラウザプロセス６５５を備えている。
【００２３】
図１に示す実施の形態では、デジタル放送受信機ソフトウェア６５はプログラム変換装置５０により、資源予約プログラムへ変換され記憶装置６１へ格納される。記憶装置６１へ格納された資源予約プログラムは、プロセッサ６２によりデジタル放送受信機６５のOSへ読み込まれ、実行される。
【００２４】
プロセッサ６２は、リモートコントローラ２０使用したユーザ操作に対するリモートコントローラプロセス６５１による受信処理とその適切な応答処理を行っている。例えば、選局に伴うチューナープロセス６５２による放送局を切り替え、電子番組ガイド視聴に伴う電子番組ガイドプロセス６５４による電子番組ガイド取得及び複合化、データ放送視聴に伴うデータ放送ブラウズプロセス６５５によるデータ放送コンテンツ取得及び複合化を行い、変更された映像を描画プロセス６５３が合成して表示装置４０に出力している。
【００２５】
リモートコントローラプロセス６５１による受信処理は、確実に行わなければならず、常にプロセッサ６２によって稼動させられなければならない。しかし、同時に電子番組ガイドプロセス６５４による電子番組ガイドの取得及び複合化、データ放送ブラウズプロセス６５５によるデータ放送コンテンツの取得及び複合化においても、ユーザ操作に連動した処理の場合は、一定の時間内に処理を完遂させたいという要求がある。
【００２６】
しかしながら、これらの応答処理は、平時においては状態変化の通知等の重要で無い処理を行うため、従来は低い優先度で稼動するものとされていた。したがって、例えば、いざ電子番組ガイド及びデータ放送コンテンツを視聴したい場合でも、プロセッサ６２は、高優先度で稼動するリモートコントローラプロセス６５１や、チューナープロセス６５２及び描画プロセス６５３に処理時間を優先して与えていた。そうなると、一時的に時間的制約を持つ電子番組ガイドプロセス６５４及びデータ放送ブラウザ６５５には、十分な処理時間が確保されにくかった。
【００２７】
本発明のプログラム変換装置は、きめ細かい粒度で特定の処理区間における時間要求を保証できるだけの計算資源を与えるように、プログラムを変換する。言い換えればプログラム変換時の資源予約システムである。本実施例では、プロセッサによる処理時間を計算資源として説明する。
【００２８】
変換されたプログラムの時間要求の無い区間では、設定された優先度にしたがった計算資源がOSスケジューラにより与えられ、時間要求のある区間では、OSスケジューラに依らず制約を満たすのに十分な計算資源が与えられる。
【００２９】
具体的には、プログラム変換装置は、時間要求のある区間において、他のタスクの影響が全く無いとき（クリティカルセクションにした時）の実行時間と、マルチタスク実行時の実行時間のプロファイル情報から、他のタスクによって割り込まれたために生じる遅延時間を求める。ここで、クリティカルセクションでの実行時間に遅延時間を加えたものが、マルチタスク実行時、即ち平時の実行時間になる。
【００３０】
そこで、さらに、区間内での遅延時間の内訳をプログラム中の適当なステートメント単位に算出する。ステートメントは、プログラムの一文を表し、C 言語や Java(登録商標) 言語等多くの高水準言語ではセミコロンで区切られる。ステートメント単位の遅延時間が求められれば、平時の実行時間を要求時間内に抑えるために、クリティカルセクションにすべきステートメントセットが求められる。求められたステートメントセットに対しては、OSスケジューラを制御するためのコードを挿入し、アプリケーションレベルでのクリティカルセクションを実現できるようにする。
【００３１】
一方、要求時間が平時の実行時間よりも大きいならば、要求時間を越えるリリースセクションを実現するための OS スケジューラを制御するコードを挿入する。また、クリティカルセクション及びリリースセクションには、ステートメントだけでなく、ブロックやユーザの指定した任意の区間（セクション）を対象にできる。
【００３２】
図１を参照して説明すると、ユーザがデータ放送視聴用のリモートコントローラ信号を送信すると、その信号に応答して、プロセッサ６２で実行されているOSは、リモートコントローラプロセス６５１をディスパッチする。次に、データ放送ブラウズプロセス６５５がディスパッチされ、データ放送コンテンツの取得及び複合化処理が実行される。
【００３３】
当該処理区間には、予め要求時間及び平時の処理時間、クリティカルセクション時の処理時間が決められている。また、区間中のステートメント毎の平時の処理時間及びクリティカルセクション時の処理時間も決められている。
【００３４】
本発明のプログラム変換システムは、図２のように、プログラムソース５１及び時間要求コード及び対象区間コード５２、平時の処理時間とクリティカルセクション時の処理時間を保持する実行プロファイル情報５３から、対象区間中の適切なステートメントをクリティカルセクション５５にし、資源予約プログラムソース５４を出力する。
【００３５】
これにより、本発明のプログラム変換システム５０で資源予約プログラムへ変換されたデータ放送ブラウズプロセス６５５は、クリティカルセクションに設定されたステートメントの処理では、他のプロセスに割り込まれずに処理を行えるようになる。
【００３６】
また、本発明のプログラム変換装置５０は、クリティカルセクションにする適切なステートメントセットが求められない場合、判定コードと共にスケジューラ制御コードを挿入し、クリティカルセクションを動的に切り替えられるようにする。これによって、クリティカルセクションを処理する前に、余裕時間が確認された場合に、クリティカルセクションを狭める事ができる。
【００３７】
その一方で、クリティカルセクションを処理した後に、遅延時間が確認された場合に、クリティカルセクションを広める事ができる。余裕時間及び遅延時間は、クリティカルセクションを処理する前後での時刻と平時での処理時刻との差分から求められる。
【００３８】
同様に、本発明のプログラム変換装置５０は、リリースセクションの適切な位置や区間を求められない場合、判定コードと共にスケジューラ制御コードを挿入し、リリースセクションを動的に切り替えられるようにする。
【００３９】
図３により本発明のプログラム変換装置の実施例の構成をより詳細に説明する。本発明のプログラム変換装置５０は、複数のプロセスを同時に処理するプリエンプティブなマルチタスクOSにおいて、所定の時間要求を持つ処理に対し、前記時間要求で前記処理を完遂することを保証させるプログラム変換装置であって、プログラムソース外に記述された時間要求を表す時間コードとその対象区間を表す区間コードを取得する時間及び区間コード取得部５０１と、該当区間における実行プロファイル情報を取得する実行プロファイル取得部５０２と、クリティカルセクション及びリリースセクションの位置を解決するスケジューラ制御位置解決部５０３と、スケジューラを制御してクリティカルセクション及びリリースセクションを実現する手段を選択するスケジューラ制御手段選択部５０４と、プログラムソースを変換してスケジューラ制御コードを挿入し資源予約プログラムソース５４を生成するスケジューラ制御コード挿入変換部５０５とを備えたものである。
【００４０】
図４にて、入力として与えられる時間要求及び対象区間コード５２の記述例を示し説明する。ただし、本発明では、時間要求及び対象区間コード５２、さらには入力されるプログラムソース５１、出力される資源予約プログラムソース５４の言語や文法を規定するものではない。
【００４１】
図4に示すように、時間要求及び対象コード５２は、時間要求コード５２０及び対象区間コード５２１から構成される。時間要求コード５２０には、要求時間の下限、上限、相対時間及び絶対時間等を指定するコードが記述される。対象区間コード５２１には、プログラム中の区間を示すために、ファイル名、行番号、関数名、変数読み書き等の処理を指定するコードが記述される。
【００４２】
ここで、図４の時間要求及び対象区間コード５２では、名前が draw で始まり、戻り値が void である全ての関数呼び出し（５２１ａ）に対して、50ms 以内に処理する、という要求を表現している。また、同時に名前が updateBegin という関数の呼び出しから、updateEnd という関数の呼び出しまで（５２１ｂ）についても、50ms 以内に処理する、という要求を表現している。さらに、browser.c という名前のファイルの1行目から１４行目まで（５２１ｃ）について、30ms 以上90ms 以下で処理する、という要求を表現している。
【００４３】
時間及び区間コード取得部５０１は、図５に示す処理フローにしたがって、要求時間及び対象区間コード５２を字句解析し、要求時間及び対象区間を取得する。このとき、要求時間及び対象区間の情報を図６に示すような構造で保持する。
【００４４】
まず、要求時間及び対象区間コードに有効なコードがあるかどうかを調べ（５０１０）、時間コードを取得し記憶する（５０１１）。次に、区間コードを取得し記憶する（５０１４）。時間及び区間取得処理は、有効なコードをすべて記録するまで繰り返される。記憶される情報は、図６に示すような構造で、要求時間の下限（５２２０）、上限（５２２１）及び対象区間の始点（５２２２）、終点（５２２３）に整理されて保持される。図５に示す時間及び区間取得処理は、全ての要求時間及び対象区間コードを処理するまで繰り返される。
【００４５】
実行プロファイル取得部５０２は、図７に示す処理フローにしたがって、実行プロファイル情報５３を読み込む。このとき、実行プロファイル情報は、図８に示すような構造で保持される。
【００４６】
まず、実行プロファイル情報に有効なデータがあるかどうかを調べ（５０２０）、ステートメントの平時の処理時間を取得し記憶する（５０２１）。次に、ステートメントの資源占有時（クリティカルセクション時）の処理時間を取得し記憶する（５０２２）。また、平時の処理時間と占有時の処理時間の差分から、ステートメント毎の遅延時間を計算して記憶する（５０２３）。遅延時間は、他のタスクに割り込まれて、CPU 資源を明け渡す時間を表す。
【００４７】
記憶される情報は、図８に示すような構造で、関数名５３００、ステートメントのID５３０１、平時の処理時間５３０２、占有時の処理時間５３０３、ステートメントの遅延時間５３０４から構成される。図７に示す実行プロファイル取得処理は、全ての実行プロファイル情報を処理するまで繰り返される。
【００４８】
スケジューラ制御位置解決部５０３は、図９に示す処理フローにしたがって、プログラムソース５１中でのクリティカルセクション及びリリースセクションの位置を決定する。まず、対象区間において、要求時間と占有時（クリティカルセクション時）の処理時間を比較し、要求時間が大きい場合につぎに処理を進め、小さい場合にはエラーとなり、次の時間要求または対象区間の処理を行う（５０３０）。これは、占有時（クリティカルセクション時）の処理時間よりも小さい要求時間は満たす事ができないためである。
【００４９】
次に、対象区間において、要求時間と平時の処理時間を比較する（５０３１）。要求時間の方が小さければクリティカルセクションが適用される事が決定し（５０３２）、大きければリリースセクションが（５０３４）適用される事が決定する。
【００５０】
クリティカルセクションに決定した場合、合計の遅延時間が、平時の処理時間と要求時間の差分となるステートメントのセットが選択され記憶される（５０３３）。一方、リリースセクションに決定した場合、要求時間と平時の処理時間の差分が解放時間に設定される（５０３５）。そして、リリースセクション位置が決定され、解放時間と共に設定される（５０３６）。
【００５１】
図９に示すスケジューラ制御位置解決処理は、すべての時間要求及び対象区間について、スケジューラ制御位置を解決するまで繰り返される。
【００５２】
ここで、ステップ５０３３における遅延時間の合計が、平時の処理時間-要求時間となるステートメントセットの選定では、ステートメントは実行プロファイル情報の出現順に選択され、他のタスクとの通信を含むステートメントは除外される。また、ステートメントセットの選定では、ステートメント数が最小となるセットを選択しても良い。この場合、資源占有区間が小さくその影響が最小限に止められる。
【００５３】
また、ステートメントセットの選定では、ステートメント数が最大となるセットを選択しても良い。この場合、資源占有区間は大きいが、一度に占有する区間が小さい。また、クリティカルセクションの平均時間や分散が最小となるセットを選択しても良い。この場合、一度に資源を占有する区間が小さい。ただし、クリティカルセクションとするステートメントセットの選定は、これらの基準に限定されるものではない。
【００５４】
さらに、ステップ５０３６における、リリースセクション位置の決定では、時間要求の対象区間における先頭ステートメントが選択される。また、リリースセクションの位置は、時間要求の対象区間の全ステートメントの先頭へ等しく設定しても良い。その場合、一つのリリースセクションでの資源解放時間は、解放時間を対象区間中のステートメント数で割った値になる。ただし、リリースセクション位置の選定は、これらの基準に限定されるものではない。
【００５５】
スケジューラ制御手段選択部５０４は、図１０に示す処理フローにしたがって、スケジューラ制御位置解決部５０３で決定されたクリティカルセクション及びリリースセクションを実現する手段を選択する。スケジューラ制御手段選択部では、クリティカルセクションを実現するためのスケジューラ制御手段を選択する。
【００５６】
リリースセクションについては、多くの OS が提供している sleep のような CPU 解放コードを選択するものとする。したがって、まず、クリティカルセクションであるかどうかが判定される（５０４０）。
【００５７】
次に、クリティカルセクションに設定されたステートメントが、割り込み禁止可能かどうかを判定する（５０４１）。判定は、ステートメント中を割り込み禁止とする事で、他タスクとの通信ができなくなるかどうかを基準に決定される。
【００５８】
割り込み禁止可能な場合、スケジューラ制御手段に割り込み禁止が選択される（５０４２）。割り込み禁止が可能で無い場合、クリティカルセクションに設定されたステートメントが、優先度増加可能かどうかを判定する（５０４３）。
【００５９】
優先度増加可能な場合、スケジューラ制御手段に優先度増加が選択され、目的優先度が決定され記憶される（５０４４）。最後に、決定したスケジューラ制御手段を実現するためのスケジューラ制御開始コードとスケジューラ制御終了コードが確定される（５０４６）。
【００６０】
クリティカルセクションに設定されたステートメントが、割り込み禁止も優先度増加も可能でない場合、スケジューラ制御位置解決処理へ戻り、ステートメントセットの再選択がなされる（５０４５）。
【００６１】
図１０に示すスケジューラ制御手段選択処理は、クリティカルセクションに設定されたすべてのステートメントセットについて、スケジューラ制御手段が選択されるまで繰り返される。
【００６２】
また、目的優先度の設定は、他のプロセスの優先度及びステートメント中の通信相手の優先度を勘案して決定しても良い。その場合、実行プロファイル情報５３には、他のプロセスの優先度が含まれる。
【００６３】
また、他のタスクと通信するステートメントの場合、通信相手のプロセスの優先度も含まれる。該当ステートメントに対しては、通信相手と同等の優先度を設定する事で、割り込み禁止や優先度増加による通信相手とのデッドロック状態を回避することができる。
【００６４】
スケジューラ制御コード挿入変換部５０５は、図１１に示す処理フローにしたがって、プログラムソース５１を読み込み、スケジューラ制御位置解決部５０３で決定されたクリティカルセクション及びリリースセクションに対して、スケジューラ制御手段選択部５０４で選択されたスケジューラ制御開始コード及びスケジューラ制御終了コードを挿入するプログラム変換を行う。
【００６５】
スケジューラ制御コード挿入変換部５０５は、詳細を後述する手順により、プログラムソース５１を字句解析、構文解析し、ステートメント単位に分割して記憶する。まず、プログラムソースからステートメント単位でプログラムを読み込み（５０５０）、クリティカルセクションにすべきか否かを判定する（５０５１）。
【００６６】
当該ステートメントをクリティカルセクションにすべきか否かは、スケジューラ制御位置解決処理５０３において決定されている。クリティカルセクションであれば、スケジューラ制御開始コードを当該ステートメントの直前へ、スケジューラ制御終了コードを直後へ挿入する（５０５２、５０５３）。
【００６７】
スケジューラ制御開始コード及びスケジューラ制御終了コードは、スケジューラ制御手段選択処理５０４で選択されたコードが挿入される。図１２に、スケジューラ制御コード挿入変換処理５０５がクリティカルセクションを実現するスケジューラ制御コードを挿入した場合の、資源予約プログラムソースの１つの例を示す。
【００６８】
図１２では、プログラムソース５１０において、５５０、５５１のクリティカルセクションが決定されているものとする。本発明のプログラム変換装置５０によって出力された資源予約プログラムソース５４０には、スケジューラ制御開始コードとして、割り込み禁止のためのcli()関数（５４００、５４０２）、スケジューラ制御終了コードとして、割り込み許可のためのsti() 関数（５４０１、５４０３）が挿入されている。割り込み禁止から許可までの区間では、他のプロセスからの割り込みは禁止され、資源予約プログラムのプロセスが、CPU を占有して処理することができる。
【００６９】
一方、当該ステートメントにリリースセクションを挿入すると判定された場合（５０５１）についても、スケジューラ制御開始コードが当該ステートメントの直前へ、スケジューラ制御終了コードが直後へ挿入される（５０５２、５０５３）。図１３に、スケジューラ制御コード挿入変換処理５０５がリリースセクションを実現するスケジューラ制御コードを挿入した場合の、資源予約プログラムソースの１つの例を示す。
【００７０】
図１３では、プログラムソース５１０において、５５２のリリースセクションが決定されているものとする。本発明のプログラム変換装置５０によって、出力された資源予約プログラムソース５４０には、スケジューラ制御コードとして、CPU資源を解放するためのsleep()関数（５４０４）が挿入されている。
【００７１】
また、解放時間として、sleep()関数の引数に10msが与えられている。CPU資源が解放されている区間では、解放時間が経過するまでは、資源予約プログラムのプロセスは処理を進まない事になる。図１１に示すスケジューラ制御コード挿入変換処理は、すべてのクリティカルセクション及びリリースセクションを挿入するまで繰り返される。
【００７２】
図１４に示すように、図１１に示したスケジューラ制御コード挿入変換処理５０５では、ガード条件と共にスケジューラ制御開始コード及びスケジューラ制御終了コードを挿入しても良い。以下に詳細に説明する。
【００７３】
図１１と同様に、プログラムソースからステートメントを読み込み（５０５５）、ステートメントがクリティカルセクションかどうかを判定する（５０５６）。次に、ガード条件を挿入するかどうかを判定し（５０５７）、挿入する場合、スケジューラ制御開始コード及びスケジューラ制御終了コードへ予定処理時間と共に付加する（５０５８）。
【００７４】
ガード条件は、スケジューラ制御開始コード及びスケジューラ制御終了コードの直前に付加され、直後のステートメントをクリティカルセクションやリリースセクションにすべきか否かを検査するためのコードである。
【００７５】
スケジューラ制御位置解決処部５０３にて、クリティカルセクション及びリリースセクションと、リリースセクションの開放時間が決定しているため、すべてのステートメントに関する時間要求の対象区間における予定処理時間は判明しているものとする。こうして、ガード条件を付加したスケジューラ制御開始コード及びスケジューラ制御終了コードが当該ステートメントの前後へ挿入される（５０５９、５０６０）。
【００７６】
ガード条件が付加されたスケジューラ制御開始コード及びスケジューラ制御終了コードは、実行時に予定処理時間と実際の処理時間を比較し、スケジューラ制御を開始すべきか否か、終了すべきか否かを判定する。
【００７７】
ガード条件での処理は図１５、図１６に示した処理フローにしたがって行われる。図１５は、クリティカルセクションにおけるガード条件での処理を示している。まず、ガード条件が適用されるステートメントの予定開始・終了時間を取得し（５０６２）、実際の経過時間を取得する（５０６３）。経過時間と予定開始時間を比較する（５０６４）。
【００７８】
予定時間よりも進捗が進んでいる場合、当該ステートメントをクリティカルセクションにすべきか否かの判定を行う。判定は、当該ステートメントの遅延時間、即ち平時の処理時間とクリティカルセクション時の処理時間の差分、を経過時間に足し合わせた時間と予定終了時間との比較で行う（５０６５）。
【００７９】
つまり、当該ステートメントをクリティカルセクションに設定しないで、予定終了時間に間に合うようであれば、スケジューラ制御コードをスキップする（５０６７）。さもなければ、スケジューラ制御コードを実行する（５０６６）。
【００８０】
一方、図１６は、リリースセクションいおけるガード条件での処理を示している。同様に、ガード条件が適用されるステートメントの予定開始時間を取得し（５０６８）、実際の経過時間を取得する（５０６９）。経過時間と予定開始時間を比較し（５０７０）、その差分を CPU の解放時間に設定しなおす（５０７１、５０７２）。その後、スケジューラ制御コードを実行する（５０７３）。
【００８１】
ここまで、本発明を図面に示した実施の形態に基づいて説明してきたが、本発明は図面に示した実施の形態に限定されるものでなく、各部の機能を上述してきたようなプログラムを実行させることにより達成することができる。また、この場合、プログラムが記録された記録媒体として提供することも可能である。
【図面の簡単な説明】
【００８２】
【図１】プログラム変換装置が組み込まれたシステムの実施例を示した図である。
【図２】プログラムソースから資源予約プログラムソースへの変換を示した図である。
【図３】プログラム変換装置の１つの実施の形態を示した図である。
【図４】時間要求コード及び対象区間コードの１つの記述例を示した図である。
【図５】時間コード及び区間コード取得部５０１の処理フローを示した図である。
【図６】時間コード及び区間コード取得部５０１で保持する時間要求コード及び対象区間コードの１つの構造例を示した図である。
【図７】実行プロファイル取得部５０２の処理フローを示した図である。
【図８】実行プロファイル取得部５０２で保持する実行プロファイル情報の１つの構造例を示した図である。
【図９】スケジューラ制御位置解決部５０３の処理フローを示した図である。
【図１０】スケジューラ制御手段選択部５０４の処理フローを示した図である。
【図１１】スケジューラ制御コード挿入変換部５０５の処理フローを示した図である。
【図１２】本発明のプログラム変換装置が変換する資源予約プログラムソースのクリティカルセクションを実現するコードの１つの例を示した図である。
【図１３】本発明のプログラム変換装置が変換する資源予約プログラムソースのリリースセクションを実現するコードの１つの例を示した図である。
【図１４】スケジューラ制御コード挿入変換部５０５の処理フローの別の形態を示した図である。
【図１５】資源予約プログラムソース中のクリティカルセクションにおけるガード条件の処理を示した図である。
【図１６】資源予約プログラムソース中のリリースセクションにおけるガード条件の処理を示した図である。
【符号の説明】
【００８３】
１０…システム、２０…リモートコントローラ、３０…デジタル放送アンテナ、４０…表示装置、５０…プログラム変換装置、５０１…時間及び区間コード取得部、５０２…実行プロファイル取得部、５０３…スケジューラ制御位置解決部、５０４…スケジューラ制御手段選択部、５０５…スケジューラ制御コード挿入変換部、５１、５１０…プログラムソース、５２…時間要求コード及び対象区間コード、５２０…時間要求コード、５２１…対象区間コード、５２２…時間要求コード及び対象区間コードの構造例、５３…実行プロファイル情報、５３０…実行プロファイル情報の構造例、５４、５４０…資源予約プログラムソース、５５、５５０、５５１…クリティカルセクション、５５２…リリースセクション、６０…デジタル放送受信機、６１…記憶装置、６２…プロセッサ、６３…信号受信部、６４…デジタル放送チューナー、６５…デジタル放送受信機ソフトウェア、６５１…リモートコントローラプロセス、６５２…チューナープロセス、６５３…描画プロセス、６５４…電子番組ガイドプロセス、６５５…データ放送ブラウズプロセス
【図１】
2009238051.tif 000003
【図２】
2009238051.tif 000004
【図３】
2009238051.tif 000005
【図４】
2009238051.tif 000006
【図５】
2009238051.tif 000007
【図６】
2009238051.tif 000008
【図７】
2009238051.tif 000009
【図８】
2009238051.tif 000010
【図９】
2009238051.tif 000011
【図１０】
2009238051.tif 000012
【図１１】
2009238051.tif 000013
【図１２】
2009238051.tif 000014
【図１３】
2009238051.tif 000015
【図１４】
2009238051.tif 000016
【図１５】
2009238051.tif 000017
【図１６】
2009238051.tif 000018