(57)【特許請求の範囲】
【請求項１】
複数のタスクを切り換えながら時分割実行させるためのタスク実行装置であって、
前記複数のタスクの各々には、割当時間が割り当てられており、
前記複数のタスクは、複数の第１タイプのタスクと、単一の第２タイプのタスクとを含み、
前記複数のタスクの割当時間の合計時間である周期時間を記憶する周期時間記憶手段と、
前記複数のタスクのうち、予め定められた順序に従いタスクを選択するタスク選択手段と、
選択されたタスクが第２タイプのタスクの場合には、前記割当時間内に前記複数の第１タイプのタスクの実行が過去に完了しなかったときに、前記単一の第２タイプのタスクについて割り当てられた割当時間の一部を、第１タイプのタスクが前記割当時間を超えた時間として割当てるように、前記第２タイプのタスクについて割り当てられた割当時間を修正する修正手段と、
選択されたタスクの実行が割り当てられたまたは修正された前記割当時間内に完了するように、当該タスクを実行させるタスク実行制御手段とを備える
ことを特徴とするタスク実行装置。
【請求項２】
前記修正手段は、前記複数の第１タイプのタスクのうち、実行状態にはなかったタスクの総割当時間である非実行時間を、前記第２タイプのタスクについて割り当てられた割当時間に加算することにより、当該割当時間を修正する
ことを特徴とする請求項１に記載のタスク実行装置。
【請求項３】
前記修正手段は、
前記複数の第１タイプのタスクの実行により消費された総消費時間を算出する総消費時間算出部と、
前記複数の第１タイプのタスクのうち、実行状態にはなかったタスクの総割当時間である非実行時間を算出する非実行時間算出部と、
前記非実行時間から、前記総消費時間と前記複数の第１タイプのタスクの総割当時間との差を減算し、減算の結果を前記第２タイプのタスクの割当時間に加算することにより、前記第２タイプに割り当てられた割当時間を修正する割当時間修正部とを有する
ことを特徴とする請求項２に記載のタスク実行装置。
【請求項４】
前記修正手段は、前記周期時間と前記複数の第１タイプのタスクの実行により消費された総消費時間との差を前記第２タイプのタスクについて割り当てられた割当時間とする
ことを特徴とする請求項１に記載のタスク実行装置。
【請求項５】
前記第２タイプのタスクについて割り当てられた割当時間は、当該タスクの実行時において最低限実行しなければならない時間である第１割当時間と、当該第１割当時間に予め定められた余裕時間を加算した第２割当時間との２種類の時間からなり、
前記修正手段は、
前記複数の第１タイプのタスクの実行により消費された総消費時間を算出する総消費時間算出部と、
前記余裕時間から、前記総消費時間と前記複数の第１タイプのタスクの総割当時間との差を減算し、減算の結果を前記第１割当時間に加算することにより、前記第２タイプに割り当てられた割当時間を修正する割当時間修正部とを有する
ことを特徴とする請求項１に記載のタスク実行装置。
【請求項６】
前記割当時間修正部は、前記総消費時間と前記総割当時間との差が、前記余裕時間よりも大きい場合には、前記複数のタスクを１回ずつ実行する区間を１周期とした場合に、前記周期時間を超えない範囲で、前記総消費時間と前記総割当時間との差から前記余裕時間を減じた時間を次の周期以降の前記第２タイプのタスクの第１割当時間に加算することにより、前記第２タイプに割り当てられた割当時間を修正する
ことを特徴とする請求項５に記載のタスク実行装置。
【請求項７】
さらに、前記単一の第２タイプのタスクが待ち状態に遷移した場合に、当該第２タイプのタスクの割当時間の間、当該第２タイプのタスクが実行されるプロセッサへの電力の供給を低減させる電力供給低減手段を備える
ことを特徴とする請求項１〜６のいずれか１項に記載のタスク実行装置。
【請求項８】
さらに、前記複数のタスクのすべてが待ち状態に遷移した場合に、当該タスクが実行されるプロセッサへの電力の供給を停止させる電力供給停止手段を備える
ことを特徴とする請求項１〜７のいずれか１項に記載のタスク実行装置。
【請求項９】
前記複数のタスクの各々に割り当てられた割当時間には最大値および最小値が設けられており、
前記周期時間記憶手段には、前記複数のタスクの割当時間の最大値の合計時間である周期時間が記憶されており、
前記タスク実行制御手段は、前記複数の第１タイプのタスクの各々が、当該タスクに割り当てられた割当時間の最大値または最小値内に実行が完了するように制御する
ことを特徴とする請求項１に記載のタスク実行装置。
【請求項１０】
前記タスク実行制御手段は、前記複数の第１タイプのタスクのすべてについて当該タスクの割当時間の最小値内に実行が完了するようにスケジューリングを行なう際には、当該タスクが実行されるプロセッサの動作周波数を下げる
ことを特徴とする請求項９に記載のタスク実行装置。
【請求項１１】
複数のタスクを切り換えながら時分割実行させるためのオペレーティングシステムであって、
前記複数のタスクの各々には、割当時間が割り当てられており、
前記複数のタスクは、複数の第１タイプのタスクと、単一の第２タイプのタスクとを含み、
前記複数のタスクのうち、予め定められた順序に従いタスクを選択するステップと、
選択されたタスクが第２タイプのタスクの場合には、前記割当時間内に前記複数の第１タイプのタスクの実行が過去に完了しなかったときに、前記単一の第２タイプのタスクについて割り当てられた割当時間の一部を、第１タイプのタスクが前記割当時間を超えた時間として割当てるように、前記第２タイプのタスクについて割り当てられた割当時間を修正するステップと、
選択されたタスクの実行が割り当てられたまたは修正された前記割当時間内に完了するように、当該タスクを実行させるステップとをコンピュータに実行させる
ことを特徴とするオペレーティングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＣＰＵ（Central Processing Unit）で実行されるタスクの実行時間を割り当てるタスク実行装置、すなわちＯＳ（Operating System）に関する。
【背景技術】
【０００２】
ＯＳの主な機能は、ハードウェア管理、タスク管理、データ管理および入出力管理である。中でもタスク管理はタスクの実行順序を管理するものであり、ＣＰＵ、メモリおよび入出力装置等を効率良く動作させるための重要な機能である。ここで、「タスク」とは、プログラムの起動、実行および終了などの一連の流れを一括管理する制御単位のことである。ＯＳの管理下で動作するプログラムはタスクとして扱われ、プログラムの実行に関するＯＳの操作はすべてタスクを単位として行われる。
【０００３】
タスクの実行順序を決定するアルゴリズムの一つとして、時分割スケジューリング法が知られている。時分割スケジューリング法は、各タスクに、ある実行時間を割り当て、割り当てられた時間の間は、ＣＰＵの実行権があるタスクに与えられ、当該タスクに割り当てられた時間が過ぎると別のタスクに実行権を移すタスクのスケジューリング方法である。これにより、すべてのタスクに平等かつ決められた時間で実行権が割り当てられる。
【０００４】
割当時間の決め方は、タスクの特性を鑑みて固定で与える方法や、タスクの実行状況にあわせて動的に決定する方法があり、例えば、優先度に基づいて実行権の割当時間を調整する方法などが知られている（例えば、特許文献１参照）。
【特許文献１】特開２００５−１８５６０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら従来のＯＳは、タスクがイベントを待つ必要がある際にタスクを待ち状態に遷移させた場合には、次のタスクに実行権を移すか、または待ち状態に遷移させたタスクの割当時間が消費するまで何の処理も実行しない。また、タスクとして、処理性能の保証を必要とするものと、イベント駆動処理などのように非同期に処理が発生するものとが混在する実行環境では、全体処理の周期を保持しながら処理性能を分配しつつ、非同期処理を実行しなければならない。このため、割当時間を常に調整して実行することにより、オーバーヘッドが発生し、処理性能が低下するという問題がある。
【０００６】
本発明は、上述の課題を解決するためになされたもので、一定の処理性能を保証しつつ、かつタスクの実行時間の割当調整に係る負担を軽減することができるタスク実行装置および方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するために、本発明に係るタスク実行装置は、複数のタスクを切り換えながら時分割実行させるためのタスク実行装置であって、前記複数のタスクの各々には、割当時間が割り当てられており、前記複数のタスクは、複数の第１タイプのタスクと、単一の第２タイプのタスクとを含み、前記複数のタスクの割当時間の合計時間である周期時間を記憶する周期時間記憶手段と、前記複数のタスクのうち、予め定められた順序に従いタスクを選択するタスク選択手段と、選択されたタスクが第２タイプのタスクの場合には、前記周期時間内に前記複数のタスクの実行が完了するように、前記第２タイプのタスクについて割り当てられた割当時間を修正する修正手段と、選択されたタスクの実行が割り当てられたまたは修正された前記割当時間内に完了するように、当該タスクを実行させるタスク実行制御手段とを備える。
【０００８】
この構成によると、プロセッサで実行されるタスクを、第１タイプのタスクと第２タイプのタスクとに分割し、第２タイプのタスクのみについて、複数のタスクが周期時間内に実行されるように割当時間の修正を行なっている。このため、一定の処理性能を保証しつつ、かつタスクの実行時間の割当調整に係る負担を軽減することができるタスクスケジューリング装置を提供することができる。なお、第１タイプのタスクがすべて待ち状態に遷移した場合には、第２タイプのタスクの割当時間の修正を行なわずに済む。
【０００９】
好ましくは、前記第２タイプのタスクについて割り当てられた割当時間は、当該タスクの実行時において最低限実行しなければならない時間である第１割当時間と、当該第１割当時間に予め定められた余裕時間を加算した第２割当時間との２種類の時間からなり、前記修正手段は、前記複数の第１タイプのタスクの実行により消費された総消費時間を算出する総消費時間算出部と、前記余裕時間から、前記総消費時間と前記複数の第１タイプのタスクの総割当時間との差を減算し、減算の結果を前記第１割当時間に加算することにより、前記第２タイプに割り当てられた割当時間を修正する割当時間修正部とを有する。より具体的には、前記割当時間修正部は、前記総消費時間と前記総割当時間との差が、前記余裕時間よりも大きい場合には、前記複数のタスクを１回ずつ実行する区間を１周期とした場合に、前記周期時間を超えない範囲で、前記総消費時間と前記総割当時間との差から前記余裕時間を減じた時間を次の周期以降の前記第２タイプのタスクの第１割当時間に加算することにより、前記第２タイプに割り当てられた割当時間を修正する。
【００１０】
このような構成にする事により、第２タイプのタスクに対しては、確実に第１割当時間を確保してタスク実行することができる。
【００１１】
さらに好ましくは、上述のタスク実行装置は、さらに、前記第２タイプのタスクが待ち状態に遷移した場合に、当該タスクの割当時間の間、当該タスクが実行されるプロセッサへの電力の供給を低減させる電力供給低減手段を備える。また、上述のタスク実行装置は、さらに、前記複数のタスクのすべてが待ち状態に遷移した場合に、当該タスクが実行されるプロセッサへの電力の供給を停止させる電力供給停止手段を備える。
【００１２】
タスクの実行状況を検出し、プロセッサへの電力の供給状態を変化させることにより、タスクの実行に要する消費電力を低減することができる。
【００１３】
なお、本発明は、このような特徴的な手段を備えるタスク実行装置として実現することができるだけでなく、タスク実行装置に含まれる特徴的な手段をステップとするタスク実行方法として実現したり、タスク実行装置に含まれる特徴的な手段としてコンピュータを機能させるＯＳとして実現したりすることもできる。そして、そのようなＯＳは、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）等の記録媒体やインターネット等の通信ネットワークを介して流通させることができるのは言うまでもない。
【発明の効果】
【００１４】
本発明によると、一定の処理性能を保証しつつ、かつタスクの実行時間の割当調整に係る負担を軽減することができるタスク実行装置および方法を提供することができる。
【発明を実施するための最良の形態】
【００１５】
〔全体構成〕
図１は本発明の実施の形態におけるタスク切換を行うプログラム実行装置の主要部の構成を示すブロック図である。同図は、プロセッサにおいてＯＳの一部の機能としてタスク切換を行うソフトウェアを実行することにより実現される機能を模式的に表している。プロセッサのハードウェア構成は、一般的なものでよい。
【００１６】
このプログラム実行装置は、各々が割当時間の指定を有する複数のタスクを１つのプロセッサ内で扱い、各タスクの必要性能を確保しながら実行するよう構成されている。
【００１７】
同図のようにプログラム実行装置は、タスクスケジューリング部１０、プログラム記憶部２０、タイマ制御部３０および実行制御部４０より構成される。
【００１８】
タスクスケジューリング部１０は、割当時間の指定を有するタスクのそれぞれに１つのタイムスロットを割り当て、予め定められた周期内において各タスクを少なくとも１回選択する時分割スケジューリングを行う。ここで、「タイムスロット」とは、プロセッサにおけるプログラムを実行する時間をあらかじめ定められた周期Ｔ内において割当時間ごとに区切ったものである。
【００１９】
プログラム記憶部２０は、タスクスケジューリング部１０によるスケジューリング対象となるタスクの本体であるプログラムとプログラムに関する情報とを記憶する。
【００２０】
タイマ制御部３０は、タスクスケジューリング部１０から割当時間を設定される毎に、時間のカウントを開始し、当該割当時間に達したときにタイムアウト信号を出力する。このタイムアウト信号は、タイムスロットの切り換えタイミングを知らせるために、タスクスケジューリング部１０に通知される。
【００２１】
実行制御部４０は、タスクスケジューリング部１０により選択されたタスクを実行する。実行制御部４０は、タスクを実行するＣＰＵ等のハードウェアに相当する。
【００２２】
〔タスクスケジューリング部１０の構成〕
タスクスケジューリング部１０は、タスク受付部１１、タイムスロット記憶部１２、タスク記憶部１３、タイムスロット切換部１４およびタスク選択部１５から構成される。
【００２３】
＜１．タスク受付部１１＞
タスク受付部１１は、ユーザ操作やユーザプログラム等からの指示に従ってタスクの追加要求を受け付け、プログラム記憶部２０から当該タスクに関する情報として、「タスク情報」および「割当時間」を読み出す。また、タスク受付部１１は、当該タスクがスケジューリングの対象となるように、タイム情報および割当時間よりタイムスロット情報１００（１１０）およびタスク管理ブロック２００（２１０）を生成し、タイムスロット記憶部１２およびタスク記憶部１３にそれぞれ設定する。
【００２４】
ここで、「タスク情報」は、「プログラム開始アドレス」と「スタックポインタ」とからなる。「プログラム開始アドレス」は、タスクが書き込まれた先頭のアドレスである。スタックポインタは、タスクの切換が生じた際にタスクの状態を一時的に退避する格納場所を示す位置情報である。
【００２５】
タスクは、タスクスケジューリング部１０において、タイムスロットに１対１に対応して割り当てられ、当該タイムスロットの割当時間の間は確実に実行される。
【００２６】
タスクは、実行特性に合わせて２つの種別（種別Ａおよび種別Ｂ）に分類される。
固定の処理性能を必要とするタスクを「種別Ａ」とする。いわゆるタイムドリブン型と呼ばれるタスクを種別Ａとすべきである。例えば、動画データのデコード／エンコード処理、音声データのデコード／エンコード処理など継続して一定の処理性能を必要とするタスクを種別Ａとすることが望ましい。
【００２７】
一方、固定の処理性能を必要としないタスクを「種別Ｂ」とする。いわゆるイベントドリブン型と呼ばれるタスクを種別Ｂとすべきである。例えば、ユーザ操作をイベントとして文字や静止画からなるメニュー表示を行う処理など継続して一定の処理性能を必要としないが不定期に随時発生するタスクを種別Ｂとすることが望ましい。
【００２８】
「割当時間」は、タスクに対応するタイムスロットの割当時間を指定する値である。この割当時間は、プログラムによって指定されるものとする。
【００２９】
なお、一周期で実行されるタスクの割当時間の合計が周期Ｔとして周期レジスタ１６に保持されている。
【００３０】
＜２．タイムスロット記憶部１２＞
タイムスロット記憶部１２は、タスクの切り換えの基準となるタイムスロットを生成するためのタイムスロット情報を記憶する。
【００３１】
図２は、タイムスロット記憶部１２内のタイムスロット情報と、タスク記憶部１３内のタスク管理ブロックとの具体例を示す図である。同図のように、タイムスロット記憶部１２は、複数のタイムスロット情報１００、１１０、…１２０、１３０を記憶する。タイムスロット情報１００〜１２０は、種別Ａのタスクが割り当てられたタイムスロットを示すものとする。また、残り１つのタイムスロット情報１３０は、種別Ｂのタスクが割り当てられたタイムスロットを示すものとする。
【００３２】
タイムスロット情報１００は、１つのタイムスロットに対応し、割当時間１００ａ、実行フラグ１００ｂおよびポインタ１００ｃからなる。他のタイムスロット情報も同様である。
【００３３】
割当時間１００ａは、タイムスロットに対応するタスクが実行することができる時間を示す。タスクが実際に実行された時間が割当時間に達すると次のタイムスロットに対応するタスクが実行される。種別Ａのタスクに対応する割当時間１００ａ〜１２０ａは、タイムスロット情報１００〜１２０の生成と同時にそれぞれタイマ制御部３０に設定される。種別Ｂの複数タスクに対応する割当時間１３０ａは、周期レジスタ１６に保持された一周期の時間Ｔから、他のタイムスロットの割当時間１００ａ〜１２０ａの合計時間を引いた残り時間としている。この残り時間はタスクスケジューリングによって変化する値である。なお、割当時間１３０ａの算出方法は、一例であり、その他の算出方法については後に詳述する。
【００３４】
「実行フラグ」は、当該タイムスロットが有効か無効かを示す。実行フラグは、タイムスロット情報の生成時には有効と設定され、タスク実行中にアクセス先の資源がロック状態にあって待ち状態になった時に無効と設定され、その後待ち状態から実行可能状態に戻った時に有効と設定される。実行フラグが無効を示す場合は、タイムスロット切換部１４によってタイムスロット情報が存在しないものとみなされる。
【００３５】
「ポインタ」は、当該タイムスロットに対応するタスク管理ブロックを示している。これらのタイムスロット情報１００、１１０、…、１２０、１３０は配列を構成し、その順序はタイムスロットの生成順を表すものとする。
【００３６】
＜３．タスク記憶部１３＞
タスク記憶部１３は、タイムスロットに割り当てられたタスクに対応するタスク管理ブロック２００、２１０、…、２２０、２３０を記憶する。タスク管理ブロック２００、２１０、…、２２０、２３０は、それぞれ１つのタスクに対応し、当該タスクを管理するための情報である。
【００３７】
タスク管理ブロック２００は、タスク情報２００ａからなる。タスク情報２００ａは、プログラム開始アドレス（またはプログラムを再開すべきアドレス）およびスタックポインタを含む。タスク管理ブロック２００の生成時には、タスク情報２００ａは、タスク受付部１１によって入力されたタスク情報そのものである。タスク切換時には、タスク情報２００ａは、中断されたタスクの実行アドレスおよび当該時点でのスタックポインタの値を示す。
【００３８】
＜４．タイムスロット切換部１４＞
タイムスロット切換部１４は、現在のタイムスロットにおいてタスクの実行時間が割当時間に達したときに、タイムスロットの切換を行う。割当時間に達したかどうかはタイマ制御部３０によるタイムアウト信号によって通知される。通知を受けたタイムスロット切換部１４は、次のタイムスロット情報を選択する。
【００３９】
本実施の形態では、次に選択されるタイムスロット情報は、その配列順によるものとする。すなわち、タイムスロット情報１００、１１０、…、１２０、１３０の順にタイムスロット情報が選択され、最後のタイムスロット情報１３０が選択された後は、最初のタイムスロット情報１００が再度選択されるものとする。
【００４０】
タイムスロット切換部１４は、選択したタイムスロット情報から割当時間を取得してタイマ制御部３０に設定する。これにより次のタイムスロットの割当時間のカウントが開始される。
【００４１】
＜５．タスク選択部１５＞
タスク選択部１５は、タイムスロット切換部１４によるタイムスロット切り換え時または実行中のプログラムからの指示があった時に、現在実行中のタスクの実行アドレスおよびスタックポインタ等を、当該タスクのタスク管理ブロックにタスク情報として退避し、次に実行すべきタスクのタスク管理ブロックからタスク情報を取り出して、実行制御部４０へ出力する。これと同時に、タスク選択部１５は、実行中のタスクのコンテキスト（レジスタデータ等）の退避と、次に実行すべきタスクのコンテキストの復帰も行なう。これにより次に実行すべきタスクが実行状態になる。
【００４２】
図３は、タイムスロット切換部１４およびタスク選択部１５によるタスク切換の様子を示す説明図である。
【００４３】
同図において、周期Ｔは周期レジスタ１６に保持された周期を示す。ｔ１〜ｔｎはそれぞれ種別Ａのｎ個のタスクに対応するｎ個のタイムスロット情報１００、１１０、…、１２０に対応するタイムスロットであり、その長さ（ｔ１〜ｔｎ）は、ｎ個のタスクの割当時間をそれぞれ示す。また、ｔ０は種別Ｂのタスクに対応するタイムスロット情報１３０に対応するタイムスロットであり、その長さ（ｔ０）は、当該タスクの割当時間を示す。
【００４４】
Ｓは、タイムスロット切換部１４およびタスク選択部１５によってタスク切換を行うスケジューリング処理を示す。
【００４５】
同図のように、タイムスロットｔ１の開始時のスケジューリング処理Ｓでは、タイムスロット情報１００に対応する種別ＡのタスクＡ１が選択され、実行される。タイムスロットｔ２〜ｔｎについても同様に種別Ａのタスクが実行される。また、最終タイムスロットｔ０におけるスケジューリング処理Ｓでは、種別ＢのタスクＢが選択され、実行される。このように全てのタスクは１つの周期Ｔの間に必ず１回は実行される。また、種別ＢのタスクＢは１つの周期Ｔの間に１回実行されるのみである。
【００４６】
〔処理の詳細〕
以下、本実施の形態におけるプログラム実行装置が実行するスケジューリング処理について説明する。
【００４７】
＜１．スケジューリング処理＞
スケジューリング処理について、図４のフローチャートに基づいて説明する。タイマ制御部３０が設定された時間を経過すると、タイムスロット切換部１４にタイムアウト信号が送信され、スケジューリング処理が開始される。まず、現在実行しているタスクの状態がタスク情報に退避される（Ｓ３０１）。次に、タイムスロット切換部１４は、タイムスロットの選択処理を行う（Ｓ３０２）。すなわち、タイムスロット情報の配列の現在選択されている要素の次の要素が、次に選択されるタイムスロット情報とされる。次の要素がない場合は、タイムスロット情報配列の先頭の要素を選択する。すなわち、タイムスロット切換部１４は、タイムスロットｔ１のタイムスロット情報１００から順にタイムスロットｔ０のタイムスロット情報１３０まで選択を行ない、その後、再度タイムスロットｔ１のタイムスロット情報１００から順に選択を行なう。
【００４８】
次に選択するタイムスロットがタイムスロットｔ０か否かにより、割当時間の扱いや、タイムスロット上のタスクが無効または待ち状態の場合の動作が異なる（Ｓ３０３）。
【００４９】
タイムスロットｔ０以外のタイムスロットが選択された場合（Ｓ３０３でＮｏ）、タイムスロット切換部１４は、選択したタイムスロットのタイムスロット情報に含まれる割当時間を取り出し、タイマ制御部３０に出力する（Ｓ３０４）。この時点より割当時間だけ経過した後、タイマ制御部３０より再びタイムアウト信号が送信される。
【００５０】
選択されたタイムスロットのタイムスロット情報が保持する実行フラグが無効であれば（Ｓ３０５でＮｏ）、当該タイムスロットでは実行するタスクがないかタスクが待ち状態であることを示している。このため、タイムスロット切換部１４は、次のタイムスロットに切り換えて同様の処理を有効なタイムスロットが見つかるまで行う。
【００５１】
有効なタイムスロットがあれば（Ｓ３０５でＹｅｓ）、タスク選択部１５は、当該タイムスロットに対応する中断していたタスクの状態を復帰させ、実行制御部４０がタスクの実行を再開する（Ｓ３０６）。
【００５２】
タイムスロット切換部１４がタイムスロットｔ０を選択する場合（Ｓ３０３でＹｅｓ）、タイムスロット切換部１４は、まずタイムスロットｔ０の割当時間を算出する（Ｓ３０７）。当該処理は多岐に渡るため、その詳細については後述する。タイムスロット切換部１４は、当該処理で算出された割当時間をタイマ制御部３０に出力する（Ｓ３０８）。
【００５３】
前記タイムスロットが保持する実行フラグが有効であれば（Ｓ３０９でＹｅｓ）、上記タイムスロットｔ０以外の場合と同様に、タスク選択部１５は、タイムスロットｔ０に対応する中断タスクの状態を復帰させ、実行制御部４０が当該タスクの実行を再開する（Ｓ３０６）。
【００５４】
前記タイムスロットが保持する実行フラグが無効ならば（Ｓ３０９でＮｏ）、タイムスロット切換部１４は、タイムスロットｔ０以外のタイムスロットの実行フラグが全て無効かどうかを調べる（Ｓ３１０）。全ての実行フラグが無効であれば（Ｓ３１０でＹｅｓ）、全てのタイムスロット上のタスクの有効な実行処理がない状態なので、タスク選択部１５は、ＣＰＵを停止状態に移行させる。停止状態から復帰するには割込みなどの外部信号を用いて行う。
【００５５】
有効なタイムスロットが１つでもあれば、ＣＰＵは動作させておくが、タイムスロットｔ０の割当時間の間はＣＰＵを動作させておく必要がないため、当該時間の間ＣＰＵを低電力状態に移行させる。
【００５６】
＜２．タイムスロットｔ０割当時間算出処理＞
次に、タイムスロットｔ０の割当時間を算出する処理（図４のＳ３０７）について、図５および図６のフローチャートに基づいて説明する。当該処理は３つのバリエーションがあり、それぞれについて説明する。
【００５７】
（ａ）待ち状態のタイムスロットの割当時間をタイムスロットｔ０に割り当てる場合
図５に示されるように、タイムスロットｔ１〜ｔｎのタイムスロットについて、過去１周分のタスクの実行で消費した総時間（総消費時間）と実行フラグが無効であるタイムスロットの総割当時間（非実行時間）とを計算する（Ｓ４０１〜Ｓ４０４）。
【００５８】
総消費時間がタイムスロットｔ１〜ｔｎの総割当時間より大きい場合は、割込みなどの外的要因の影響と考えられる。このため、実行フラグが無効のタイムスロットの総割当時間、すなわち非実行時間から、（総消費時間−総割当時間）を減算する（Ｓ４０５）。すなわち、外的要因によりオーバーした時間である（総消費時間−総割当時間）を、タイムスロットに割り当てられているもののタスクが実行されていない時間（非実行時間）から減算する。
【００５９】
この値にタイムスロットｔ０の割当時間を加えたものがタイムスロットｔ０の算出後の割当時間となる（Ｓ４０６）。
【００６０】
なお、前記総消費時間が前記総割当時間より小さい場合であっても、同じ式を使用することにより、タイムスロットｔ０の割当時間を算出することができる。
【００６１】
（ｂ）マージン時間を設定し、割当時間から伸びた分をマージン時間から減じる場合
図６に示されるように、タスク受付部１１よりマージン値１７が予め設定されるものとし、当該値をタスク受付部１１より取得する（Ｓ４１１）。マージン値１７とは、タイムスロットのｔ０の割当時間に割り当てられるマージン時間（余裕時間）Ｍのことである。すなわち、タイムスロットｔ０の割当時間には、ｔ０と（ｔ０＋Ｍ）の２段階あるものとする。
【００６２】
まず、タイムスロットｔ１〜ｔｎについて、過去１周分の実行で消費した時間の合計（総消費時間）を計算する（Ｓ４１２，Ｓ４１３）。
【００６３】
次に、総消費時間が総割当時間より多い場合は、マージン時間Ｍから（総消費時間−総割当時間）を減算する（Ｓ４１４）。ここで、総割当時間とは、タイムスロットｔ１〜ｔｎの総割当時間を指す。
【００６４】
減算後の値にタイムスロットｔ０の割当時間を加えたものがタイムスロットｔ０の算出後の割当時間となる（Ｓ４１５）。
【００６５】
なお、マージンＭ＜（総消費時間−総割当時間）の場合、すなわち、Ｓ４１４で求められた値が負の場合には、マージン時間Ｍを０にするとともに、（（総消費時間−総割当時間）−マージンＭ）を、次の周期のタイムスロットｔ０で実行するように時間調整する。これにより、この周期Ｔでは、タイムスロットｔ０の割当時間ｔ０は確保して実行することができる。
【００６６】
（ｃ）マージン値の代わりにタスク受付部１１より周期１５を取得し、周期Ｔ（割当時間の合計）から総消費時間を減算した値をタイムスロットｔ０の算出後の割当時間としてもよい。
【００６７】
以上説明したように、本実施の形態におけるプログラム実行装置によれば、特定のタイムスロットの割当時間のみを算出、設定することにより、他のタイムスロットの割当時間を再計算することなく、性能を確保することができる。その結果、状況が変化した場合の割当時間の再設定に要するオーバーヘッドを削減することが可能となる。
【００６８】
また、タイムスロットの実行状況を検出しＣＰＵ状態を変更することにより、実行にかかる消費電力の削減に寄与することができる。
【００６９】
なお、上記実施の形態では、種別Ａのタスクのタイムスロットについては、タスク情報ごとに１つの割当時間が固定値として指定されている場合について説明したが、すべてのタイムスロットについて割当時間の最大値および最小値を示す２つの固定値を保有し、全てのタイムスロットについての割当時間の最大値の合計を周期とし、実行状況に応じて各タイムスロットがどちらかの割当時間を選択しながら動作する構成としてもよい。
【００７０】
また、全てのタイムスロットが最小値を選択していることを検出した場合には、短時間で処理が終了してしまう。このため、設定された周期Ｔ内に１周期分の処理が終了する範囲内で、ＣＰＵの動作周波数を下げてタスクを実行させるようにしてもよい。その結果、タスクの実行に要する消費電力の削減にさらに寄与することができる。なお、割当時間の最大値を使用するか、最小値を使用するかは、これらのタスクを実行するプログラムにより決定される。
【産業上の利用可能性】
【００７１】
本発明にかかるプログラム実行装置は、処理性能を保証する固定の時間割当を行いつつ、処理性能によらない時間割当で全体の割当時間を調整する機能を有する。このことから、処理性能を保証する処理に対して割当時間の調整に掛かる負担を軽減することができ、例えば映像再生処理において、外部からのアクセスによって映像出力にかかるノイズや乱れの影響を受けることなく、処理を遂行することができる。特に、音声映像処理と非同期の制御処理をリアルタイムに行う機器や、当該機器の開発環境等として適用可能である。
【図面の簡単な説明】
【００７２】
【図１】本発明の実施の形態におけるタイムスロット切換を行うプログラム実行装置の主要部の構成を示すブロック図である。
【図２】タイムスロット記憶部内のタイムスロット情報と、タスク記憶部内のタスク管理ブロックとの具体例を示す図である。
【図３】タイムスロット切換部およびタスク選択部によるタスク切換の様子を説明するための図である。
【図４】タスクスケジューリング部によるスケジューリング処理のフローチャートである。
【図５】タスクスケジューリング部によるイベントドリブン型のタスクのタイムスロットへの割当時間を算出する処理のフローチャートである。
【図６】タスクスケジューリング部によるイベントドリブン型のタスクのタイムスロットへの割当時間を算出する処理のフローチャートである。
【符号の説明】
【００７３】
１０  タスクスケジューリング部
１１  タスク受付部
１２  タイムスロット記憶部
１３  タスク記憶部
１４  タイムスロット切換部
１５  タスク選択部
２０  プログラム記憶部
３０  タイマ制御部
４０  実行制御部
１００、１１０、１２０、１３０  タイムスロット情報
１００ａ、１１０ａ、１２０ａ、１３０ａ  割当時間
１００ｂ、１１０ｂ、１２０ｂ、１３０ｂ  実行フラグ
１００ｃ、１１０ｃ、１２０ｃ、１３０ｃ  ポインタ
２００、２１０、２２０、２３０  タスク管理ブロック
２００ａ、２１０ａ、２２０ａ、２３０ａ  タスク情報
【図１】
0004580845.tif 000002
【図２】
0004580845.tif 000003
【図３】
0004580845.tif 000004
【図４】
0004580845.tif 000005
【図５】
0004580845.tif 000006
【図６】
0004580845.tif 000007