(57)【特許請求の範囲】
【請求項１】
周期的に到来するタイミングを生成して基準サイクルとし、該基準サイクルの１周期であるタイムスライスにおいて、複数のタスクに順次実行権を付与する装置におけるスケジューリング方法であって、
それぞれの前記タスクには稼働時間が設定されており、前記タスクとして、それぞれの前記タイムスライスで前記稼働時間にわたり必ず前記実行権が付与される時間保証タスクと、それぞれの前記タイムスライスで前記稼働時間にわたり前記実行権が付与されるとは限らない非時間保証タスクとが存在し、それぞれの前記時間保証タスクに設定されている前記稼働時間の総和は、前記タイムスライスよりも小さく、
前記時間保証タスクには、前記実行権を付与する優先度である第一優先度が設定されていると共に、前記非時間保証タスクには、前記実行権を付与する優先度である第二優先度が設定されており、
前記タスクに前記実行権を付与した時間が前記稼働時間に達すると、該タスクから前記実行権を剥奪すると共に、最後に到来した前記基準サイクルから始まる前記タイムスライスである現タイムスライスにおける該タスクの動作が完了したものとする完了ステップと、
前記基準サイクルの到来時、或いは前記タスクの動作完了時に、前記現タイムスライスにおいて動作が完了していない前記時間保証タスクが存在する場合には、該時間保証タスクのうち前記第一優先度が最大のものを特定すると共に、該時間保証タスクが存在しない場合には、前記現タイムスライスにて動作が完了していない前記非時間保証タスクのうち、前記第二優先度が最大のものを特定する特定処理を行う特定ステップと、
前記特定ステップにて特定された前記タスクに前記実行権を付与する付与ステップと、
を有し、
前記時間保証タスクには、該時間保証タスクにより実現される機能を正常に稼動させるうえで許容される最長の動作周期である最長動作周期と、ぞれぞれの前記最長動作周期において、前記機能に稼動させるうえで最低限必要となる前記実行権の付与時間である必要動作時間とが個別に設定されており、
前記スケジューリング方法は、
スケジューリングの対象となる前記時間保証タスクの前記最長動作周期のうちの最短の前記最長動作周期を、前記タイムスライスとして設定するタイムスライス設定ステップと、
スケジューリングの対象となるそれぞれの前記時間保証タスクについて、該時間保証タスクに設定された前記必要動作時間を、該時間保証タスクに設定された前記最長動作周期で除算した値を算出し、さらに、該値に前記タイムスライスを乗算した値を最短動作時間として算出し、それぞれの前記時間保証タスクについて、該時間保証タスクの前記最短動作時間以上の時間を前記稼働時間として設定する稼働時間設定ステップと、
さらに有し、
前記稼働時間設定ステップでは、全ての前記時間保証タスクの前記稼働時間の総和が前記タイムスライスを越えない範囲で、それぞれの前記時間保証タスクの前記稼働時間を設定すること、
を特徴とし、
前記スケジューリング方法は、
スケジューリングの対象となっている前記タスクを、スケジューリングの対象から削除する削除ステップと、
スケジューリングの対象となっていない前記タスクを、スケジューリングの対象として新たに追加する追加ステップと、
をさらに有し、
前記タイムスライス設定ステップと、前記稼働時間設定ステップとは、定期的なタイミングで実施されること、
を特徴とするスケジューリング方法。
【請求項２】
請求項１に記載のスケジューリング方法において、
前記タスクは、該タスクに対し予め定められた放棄条件が成立すると、付与されている前記実行権を自発的に放棄し、
前記タスクが前記実行権を自発的に放棄すると、前記現タイムスライスにおいて、該タスクの動作が完了したものとする放棄ステップをさらに有すること、
を特徴とするスケジューリング方法。
【請求項３】
請求項１または請求項２に記載のスケジューリング方法において、
前記タスクは、該タスクに対し予め定められたイベント待ち条件が成立すると、付与されている前記実行権を自発的に手放すと共に、該タスクに対し予め定められたイベントの発生を待ち、
前記実行権が付与されている前記タスクが前記イベントの発生を待ち始めると、該タスクを前記実行権の付与の対象から除外して待機中とする除外ステップと、
前記イベントが発生すると、待機中の前記タスクを前記実行権の付与の対象として復帰させる復帰ステップと、
をさらに有し、
前記特定ステップにおいて、
待機中でない前記タスクを対象として、前記特定処理を行い、
さらに、前記除外ステップにて前記タスクが前記実行権の付与の対象から除外された時に、前記特定処理を行うこと、
を特徴とするスケジューリング方法。
【請求項４】
請求項３に記載のスケジューリング方法において、
前記特定ステップにおいて、さらに、前記復帰ステップにて待機中の前記タスクが前記実行権の付与の対象として復帰させられた時に前記特定処理を行い、
前記特定ステップにより、前記復帰ステップにて前記実行権を付与する対象として復帰させられた前記タスクが特定されると、前記実行権が付与されている前記タスクから前記実行権を剥奪する剥奪ステップをさらに有すること、
を特徴とするスケジューリング方法。
【請求項５】
請求項１から請求項４のうちのいずれか１項に記載のスケジューリング方法において、
それぞれの前記非時間保証タスクについて、前記現タイムスライスにて該非時間保証タスクが完了したか否かに応じて、該非時間保証タスクに設定されている前記第二優先度を更新する更新ステップをさらに有すること、
を特徴とするスケジューリング方法。
【請求項６】
請求項５に記載のスケジューリング方法において、
それぞれの前記非時間保証タスクに設定されている前記第二優先度は、前記実行権を付与する優先度を示す固定値である固定優先度と、該非時間保証タスクが、それぞれの前記タイムスライスにおいて動作が完了しなかった度合いを示す休止度とに基づき算出され、
前記更新ステップにおいて、それぞれの前記非時間保証タスクについて、前記現タイムスライスにて該非時間保証タスクの動作が完了したか否かに応じて、該非時間保証タスクに設定されている前記第二優先度に係る前記休止度を更新することにより、該第二優先度を更新すること、
を特徴とするスケジューリング方法。
【請求項７】
請求項１から請求項６のうちのいずれか１項に記載のスケジューリング方法において、
新たな前記時間保証タスクをスケジューリングの対象として追加する際に、該時間保証タスクの前記最長動作周期及び前記最短動作時間と、スケジューリングの対象となっている前記時間保証タスクの前記最長動作周期及び前記最短動作時間とに基づき、新たな前記時間保証タスクをスケジューリングの対象として追加可能か否かを判定する判定ステップをさらに有し、
前記追加ステップにおいて、前記判定ステップにて肯定判定が得られた場合に、該判定に係る新たな前記時間保証タスクをスケジューリングの対象として追加すること、
を特徴とするスケジューリング方法。
【請求項８】
請求項１から請求項７のうちのいずれか１項に記載のスケジューリング方法において、
前記タイムスライス設定ステップと前記稼働時間設定ステップとは、前記基準サイクルに係る前記タイミングが到来した際に実施されること、
を特徴とするスケジューリング方法。
【請求項９】
請求項１から請求項８のうちのいずれか１項に記載のスケジューリング方法において、
前記タスクのうちの少なくともいずれか一つは、ある装置において実現される機能を再現するためのプログラムである仮想マシンであること、
を特徴とするスケジューリング方法。
【請求項１０】
周期的に到来するタイミングを生成して基準サイクルとし、該基準サイクルの１周期であるタイムスライスにおいて、複数のタスクに順次実行権を付与するスケジューリングプログラムであって、
それぞれの前記タスクには稼働時間が設定されており、前記タスクとして、それぞれの前記タイムスライスで前記稼働時間にわたり必ず前記実行権が付与される時間保証タスクと、それぞれの前記タイムスライスで前記稼働時間にわたり前記実行権が付与されるとは限らない非時間保証タスクとが存在し、それぞれの前記時間保証タスクに設定されている前記稼働時間の総和は、前記タイムスライスよりも小さく、
前記時間保証タスクには、前記実行権を付与する優先度である第一優先度が設定されていると共に、前記非時間保証タスクには、前記実行権を付与する優先度である第二優先度が設定されており、
前記タスクに前記実行権を付与した時間が前記稼働時間に達すると、該タスクから前記実行権を剥奪すると共に、最後に到来した前記基準サイクルから始まる前記タイムスライスである現タイムスライスにおける該タスクの動作が完了したものとする完了ステップと、
前記基準サイクルの到来時、或いは前記タスクの動作完了時に、前記現タイムスライスにおいて動作が完了していない前記時間保証タスクが存在する場合には、該時間保証タスクのうち前記第一優先度が最大のものを特定すると共に、該時間保証タスクが存在しない場合には、前記現タイムスライスにて動作が完了していない前記非時間保証タスクのうち、前記第二優先度が最大のものを特定する特定処理を行う特定ステップと、
前記特定ステップにて特定された前記タスクに前記実行権を付与する付与ステップと、
をコンピュータに実行させ、
前記時間保証タスクには、該時間保証タスクにより実現される機能を正常に稼動させるうえで許容される最長の動作周期である最長動作周期と、ぞれぞれの前記最長動作周期において、前記機能に稼動させるうえで最低限必要となる前記実行権の付与時間である必要動作時間とが個別に設定されており、
前記スケジューリングプログラムは、
スケジューリングの対象となる前記時間保証タスクの前記最長動作周期のうちの最短の前記最長動作周期を、前記タイムスライスとして設定するタイムスライス設定ステップと、
スケジューリングの対象となるそれぞれの前記時間保証タスクについて、該時間保証タスクに設定された前記必要動作時間を、該時間保証タスクに設定された前記最長動作周期で除算した値を算出し、さらに、該値に前記タイムスライスを乗算した値を最短動作時間として算出し、それぞれの前記時間保証タスクについて、該時間保証タスクの前記最短動作時間以上の時間を前記稼働時間として設定する稼働時間設定ステップと、
をさらにコンピュータに実行させ、
前記稼働時間設定ステップでは、全ての前記時間保証タスクの前記稼働時間の総和が前記タイムスライスを越えない範囲で、それぞれの前記時間保証タスクの前記稼働時間を設定すること、
を特徴とし、
前記スケジューリングプログラムは、
スケジューリングの対象となっている前記タスクを、スケジューリングの対象から削除する削除ステップと、
スケジューリングの対象となっていない前記タスクを、スケジューリングの対象として新たに追加する追加ステップと、
をさらにコンピュータに実行させ、
前記タイムスライス設定ステップと、前記稼働時間設定ステップとは、定期的なタイミングで実施されること、
を特徴とするスケジューリングプログラム。
【請求項１１】
周期的に到来するタイミングを生成して基準サイクルとし、該基準サイクルの１周期であるタイムスライスにおいて、複数のタスクに順次実行権を付与するスケジューリング装置であって、
それぞれの前記タスクには稼働時間が設定されており、前記タスクとして、それぞれの前記タイムスライスで前記稼働時間にわたり必ず前記実行権が付与される時間保証タスクと、それぞれの前記タイムスライスで前記稼働時間にわたり前記実行権が付与されるとは
限らない非時間保証タスクとが存在し、それぞれの前記時間保証タスクに設定されている前記稼働時間の総和は、前記タイムスライスよりも小さく、
前記時間保証タスクには、前記実行権を付与する優先度である第一優先度が設定されていると共に、前記非時間保証タスクには、前記実行権を付与する優先度である第二優先度が設定されており、
前記タスクに前記実行権を付与した時間が前記稼働時間に達すると、該タスクから前記実行権を剥奪すると共に、最後に到来した前記基準サイクルから始まる前記タイムスライスである現タイムスライスにおける該タスクの動作が完了したものとする完了ステップと、
前記基準サイクルの到来時、或いは前記タスクの動作完了時に、前記現タイムスライスにおいて動作が完了していない前記時間保証タスクが存在する場合には、該時間保証タスクのうち前記第一優先度が最大のものを特定すると共に、該時間保証タスクが存在しない場合には、前記現タイムスライスにて動作が完了していない前記非時間保証タスクのうち、前記第二優先度が最大のものを特定する特定処理を行う特定ステップと、
前記特定ステップにて特定された前記タスクに前記実行権を付与する付与ステップと、
を実行し、
前記時間保証タスクには、該時間保証タスクにより実現される機能を正常に稼動させるうえで許容される最長の動作周期である最長動作周期と、ぞれぞれの前記最長動作周期において、前記機能に稼動させるうえで最低限必要となる前記実行権の付与時間である必要動作時間とが個別に設定されており、
前記スケジューリング装置は、
スケジューリングの対象となる前記時間保証タスクの前記最長動作周期のうちの最短の前記最長動作周期を、前記タイムスライスとして設定するタイムスライス設定ステップと、
スケジューリングの対象となるそれぞれの前記時間保証タスクについて、該時間保証タスクに設定された前記必要動作時間を、該時間保証タスクに設定された前記最長動作周期で除算した値を算出し、さらに、該値に前記タイムスライスを乗算した値を最短動作時間として算出し、それぞれの前記時間保証タスクについて、該時間保証タスクの前記最短動作時間以上の時間を前記稼働時間として設定する稼働時間設定ステップと、
さらに実行し、
前記稼働時間設定ステップでは、全ての前記時間保証タスクの前記稼働時間の総和が前記タイムスライスを越えない範囲で、それぞれの前記時間保証タスクの前記稼働時間を設定すること、
を特徴とし、
前記スケジューリング装置は、
スケジューリングの対象となっている前記タスクを、スケジューリングの対象から削除する削除ステップと、
スケジューリングの対象となっていない前記タスクを、スケジューリングの対象として新たに追加する追加ステップと、
をさらに実行し、
前記タイムスライス設定ステップと、前記稼働時間設定ステップとは、定期的なタイミングで実施されること、
を特徴とするスケジューリング装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、タスクのスケジューリング方法等に関する。
【背景技術】
【０００２】
仮想化したコンピュータ上でＯＳやアプリケーション等を動作させる仮想化技術が知られている。この仮想化技術を適用し、既存の装置を制御するコンピュータを仮想化すると共に、仮想化されたコンピュータ上で該装置の制御に用いられていたプログラムを動作させることで、該装置を容易に再現することができる。さらに、仮想化技術により、複数の既存の装置について、それぞれ、該装置を再現するプログラムである仮想マシン（仮想計算機とも記載）を作成すると共に、これらの仮想マシンを１台の装置で稼動させることで、複数の既存の装置を１台に統合することが可能となる。
【０００３】
また、複数の既存の装置を１台に統合すると同時に、該装置とは異なる新たな機能を追加するということも想定される。このような場合には、該機能を実現するための専用アプリケーションを新たに設け、仮想マシンと専用アプリケーションをタスクとしてスケジューリングを行い、これらを並行して稼動させることが考えられる。
【０００４】
このように、仮想マシンや専用アプリケーションをタスクとしてスケジューリングを行う場合には、各タスクの動作時間を適切に割り当てる必要がある。例えば、車両の制御を行う仮想マシンや専用アプリケーションがタスクとなっている場合等には、該タスクのリアルタイム性を確保する必要があり、そのためには、該タスクに対し一定期間につき割り当てられる動作時間を保証する必要がある。
【０００５】
ここで、特許文献１には、各仮想計算機のタスク及び割込みハンドラに統一的に優先度を付与し、割込みが発生した際には、動作中の仮想計算機のタスクの優先度と発生した割込みに対応する割込みハンドラの優先度とを比較し、該割込みハンドラを実行するか否かを判定する仮想計算機制御装置について記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００８−２３４１１６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１に記載の仮想計算機制御装置によれば、優先度の高い仮想計算機の稼動中に、優先度の低い仮想計算機に対応する割込みハンドラが実行されてしまうことを防ぐことができ、優先度の高い仮想計算機を滞りなく稼動させることができる。しかしながら、各タスクの優先度を設定したとしても、各仮想計算機に対し一定期間につき割り当てられる動作時間を保証することはできず、これらの仮想計算機のリアルタイム性が確保されるとは限らない。
【０００８】
本願発明は上記課題に鑑みてなされたものであり、スケジューリングの対象となるタスクのうち、特定のタスクについてはリアルタイム性を確保することができるスケジューリング方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記課題に鑑みてなされた請求項１に記載の発明は、周期的に到来するタイミングを生成して基準サイクルとし、該基準サイクルの１周期であるタイムスライスにおいて、複数のタスクに順次実行権を付与する装置におけるスケジューリング方法に関するものである。このスケジューリング方法では、それぞれのタスクには稼働時間が設定されており、タスクとして、それぞれのタイムスライスで稼働時間にわたり必ず実行権が付与される時間保証タスクと、それぞれのタイムスライスで稼働時間にわたり実行権が付与されるとは限らない非時間保証タスクとが存在し、それぞれの時間保証タスクに設定されている稼働時間の総和は、タイムスライスよりも小さい。また、時間保証タスクには、実行権を付与する優先度である第一優先度が設定されていると共に、非時間保証タスクには、実行権を付与する優先度である第二優先度が設定されている。
【００１０】
そして、このスケジューリング方法は、タスクに実行権を付与した時間が稼働時間に達すると、該タスクから実行権を剥奪すると共に、最後に到来した基準サイクルから始まるタイムスライスである現タイムスライスにおける該タスクの動作が完了したものとする完了ステップと、基準サイクルの到来時、或いはタスクの動作完了時に、現タイムスライスにおいて動作が完了していない時間保証タスクが存在する場合には、該時間保証タスクのうち第一優先度が最大のものを特定すると共に、該時間保証タスクが存在しない場合には、現タイムスライスにて動作が完了していない非時間保証タスクのうち、第二優先度が最大のものを特定する特定処理を行う特定ステップと、特定ステップにて特定されたタスクに実行権を付与する付与ステップと、を有することを特徴とする。
また、時間保証タスクには、該時間保証タスクにより実現される機能を正常に稼動させるうえで許容される最長の動作周期である最長動作周期と、ぞれぞれの最長動作周期において、機能に稼動させるうえで最低限必要となる実行権の付与時間である必要動作時間とが個別に設定されている。
そして、スケジューリング方法は、スケジューリングの対象となる時間保証タスクの最長動作周期のうちの最短の最長動作周期を、タイムスライスとして設定するタイムスライス設定ステップと、スケジューリングの対象となるそれぞれの時間保証タスクについて、該時間保証タスクに設定された必要動作時間を、該時間保証タスクに設定された最長動作周期で除算した値を算出し、さらに、該値にタイムスライスを乗算した値を最短動作時間として算出し、それぞれの時間保証タスクについて、該時間保証タスクの最短動作時間以上の時間を稼働時間として設定する稼働時間設定ステップと、さらに有する。
また、稼働時間設定ステップでは、全ての時間保証タスクの稼働時間の総和がタイムスライスを越えない範囲で、それぞれの時間保証タスクの稼働時間を設定すること、を特徴とする。
そして、スケジューリング方法は、スケジューリングの対象となっているタスクを、スケジューリングの対象から削除する削除ステップと、スケジューリングの対象となっていないタスクを、スケジューリングの対象として新たに追加する追加ステップと、をさらに有し、タイムスライス設定ステップと、稼働時間設定ステップとは、定期的なタイミングで実施されること、を特徴とする。
【００１１】
なお、タスクとは、ある装置にて実現される機能を再現するためのプログラムである仮想マシンとして構成されていても良いし、ある機能を実現するための１または複数の処理単位からなるアプリケーションとして構成されていても良い。
【００１２】
こうすることにより、時間保証タスクについては、各タイムスライスにおいて必ず稼働時間にわたり動作させることができ、一定周期あたりの動作時間を保証することができる。また、非時間保証タスクについては、全ての時間保証タスクの動作が完了した後、次の基準サイクルが到来するまでの期間に順次実行権が付与される。したがって、請求項１に記載のスケジューリング方法によれば、時間保証タスクと非時間保証タスクとを並行して動作させつつ、時間保証タスクについてのリアルタイム性を確保することができる。
【００１３】
なお、特定ステップは、必ずしも動作中のタスクから実行権が剥奪された後に行われる必要は無いということを念のため付言しておく。
ところで、時間保証タスクに関しては、正常な動作を保証するうえで許容される最長の動作周期と、正常な動作を保証するうえで必要となる、各動作周期における最短の動作時間とを定めることができる。そして、仮に、最長の動作周期が１ｍｓ，各動作周期における最短の動作時間が０．２ｍｓとして設定されている時間保証タスク１と、最長の動作周期が４ｍｓ，各動作周期における最短の動作時間が２ｍｓとして設定されている時間保証タスク２のスケジューリングを行うとする。このとき、時間保証タスク２の動作には少なくとも２ｍｓを要するため、時間保証タスク１を１ｍｓ周期で動作させることができなくなり、時間保証タスク１の正常な動作を保証できなくなってしまう。
これに対し、請求項１に記載のスケジューリング方法では、最長動作周期以下の時間であるタイムスライスを周期として各時間保証タスクが動作するため、各時間保証タスクが動作する間隔が最長動作周期よりも長い時間にわたって空いてしまうことを防ぐことができる。また、各時間保証タスクにつき、必要動作時間を最長動作周期で除算した値にタイムスライスを乗算した値である最短動作時間が算出され、各タイムスライスでは、少なくとも該最短動作時間にわたって各時間保証タスクが動作する。このため、タイムスライスより長い時間を最長動作周期とする時間保証タスクにおいても、最長動作周期につき、少なくとも必要動作時間分の動作時間を確保することが可能となる。したがって、時間保証タスクを正常な状態で並行して動作させることができる。
また、請求項１に記載のスケジューリング方法では、スケジューリングの対象となるタスクの追加或いは削除が行われた場合であっても、タイムスライスや、スケジューリングの対象となる各時間保証タスクの稼働時間を適切なものに更新することができる。
ところで、動作中のタスクにて何らかの条件が成立した場合には、現タイムスライスにて、これ以上、該タスクの動作を継続する必要が無くなるといった場合が想定される。
【００１４】
そこで、請求項２に記載のスケジューリング方法では、タスクは、該タスクに対し予め定められた放棄条件が成立すると、付与されている実行権を自発的に放棄し、タスクが実行権を自発的に放棄すると、現タイムスライスにおいて、該タスクの動作が完了したものとする放棄ステップをさらに有する。
【００１５】
こうすることにより、実行権が付与されているタスクが現タイムスライスにおいてこれ以上動作を継続する必要が無くなった場合には、該タスクの動作を終了し、該タスクの動作時間を他のタスクの動作時間として割り当てることができる。したがって、タイムスライスをより有効に活用してタスクを動作させることができる。
【００１６】
また、実行権が付与されているタスクは、何らかの条件の成立により処理を中断し、イベントの発生を待ち始めるといった場合が想定される。
そこで、請求項３に記載のスケジューリング方法では、タスクは、該タスクに対し予め定められたイベント待ち条件が成立すると、付与されている実行権を自発的に手放すと共に、該タスクに対し予め定められたイベントの発生を待ち、実行権が付与されているタスクがイベントの発生を待ち始めると、該タスクを実行権の付与の対象から除外して待機中とする除外ステップと、イベントが発生すると、待機中のタスクを実行権の付与の対象として復帰させる復帰ステップと、をさらに有する。そして、特定ステップにおいて、待機中でないタスクを対象として、特定処理を行い、  さらに、除外ステップにてタスクが実行権の付与の対象から除外された時に、特定処理を行う。
【００１７】
こうすることにより、タスクが動作を中断しイベントの発生を待ち始めた場合には、イベントが発生するまで該タスクを待機させ、該タスクの動作時間を他のタスクの動作時間として割り当てることができる。したがって、各タイムスライスをより有効に活用してタスクを動作させることができる。
【００１８】
また、請求項４では、特定ステップにおいて、さらに、復帰ステップにて待機中のタスクが実行権の付与の対象として復帰させられた時に特定処理を行い、特定ステップにより、復帰ステップにて実行権を付与する対象として復帰させられたタスクが特定されると、実行権が付与されているタスクから実行権を剥奪する剥奪ステップをさらに有することを特徴とする。
【００１９】
こうすることにより、待機中のタスクに対応するイベントが発生した際に、該タスクよりも優先度の低いタスクに実行権が付与されている場合には、動作中のタスク（実行権が付与されているタスク）に替えて、待機中のタスクを動作させることができる。したがって、発生したイベント応じた処理が実行されるまでの応答時間を短縮することが可能となる。
【００２０】
なお、いずれかのタスクに実行権が付与されている時に、待機中のタスクが実行権の付与の対象として復帰させられる場合が想定され、このとき、動作中のタスクは、当然、現タイムスライスにおける動作が未完了である。このような場合には、特定ステップにおける特定処理では、動作中のタスクも含む実行が未完了のタスクのうち、最も優先度の高いものが特定されるということを念のため付言しておく。
【００２１】
また、既に述べたように、非時間保証タスクは、時間保証タスクの動作が終了した後次の基準サイクルが到来するまでの期間に実行されるため、各タイムスライスにつき必ず動作時間が割り当てられるとは限らない。
【００２２】
そこで、請求項５に記載のスケジューリング方法は、それぞれの非時間保証タスクについて、現タイムスライスにて該非時間保証タスクが完了したか否かに応じて、該非時間保証タスクに設定されている第二優先度を更新する更新ステップをさらに有する。
【００２３】
こうすることにより、非時間保証タスクに稼働時間にわたり実行権が付与された場合には、第二優先度を下げて次以降のタイムスライスにおいて実行権が付与され難くすると共に、非時間保証タスクが稼働時間にわたり実行権が付与されなかった場合には、第二優先度を上げて次以降のタイムスライスにおいて実行権が付与され易くすることができる。したがって、複数のタイムスライスにわたる期間において、各非時間保証タスクの動作時間の配分をコントロールすることが可能となる。
【００２４】
また、第二優先度は、次のようにして算出されても良い。
すなわち、請求項６に記載されているように、それぞれの非時間保証タスクに設定されている第二優先度は、実行権を付与する優先度を示す固定値である固定優先度と、該非時間保証タスクが、それぞれのタイムスライスにおいて動作が完了しなかった度合いを示す休止度とに基づき算出され、更新ステップにおいて、それぞれの非時間保証タスクについて、現タイムスライスにて該非時間保証タスクの動作が完了したか否かに応じて、該非時間保証タスクに設定されている第二優先度に係る休止度を更新することにより、該第二優先度を更新しても良い。
【００２５】
こうすることにより、各非時間保証タスクの性質に応じて定められた固有の優先度を考慮して、複数のタイムスライスにわたる期間における各非時間保証タスクの動作時間の配分をコントロールすることができる。
【００３２】
また、スケジューリングの対象となる時間保証タスクの数が増えすぎると、タイムスライス中に全ての時間保証タスクを稼働時間にわたり動作させることができなくなってしまい、時間保証タスクのリアルタイム性が損なわれてしまう。
【００３３】
そこで、請求項７のスケジューリング方法は、新たな時間保証タスクをスケジューリングの対象として追加する際に、該時間保証タスクの最長動作周期及び最短動作時間と、スケジューリングの対象となっている時間保証タスクの最長動作周期及び最短動作時間とに基づき、新たな時間保証タスクをスケジューリングの対象として追加可能か否かを判定する判定ステップをさらに有し、追加ステップにおいて、判定ステップにて肯定判定が得られた場合に、新たな時間保証タスクをスケジューリングの対象として追加する。
【００３４】
こうすることにより、タイムスライスにおいて、スケジューリングの対象として追加する新たな時間保証タスクと、既にスケジューリングの対象となっている時間保証タスクとを稼働時間にわたり動作させることができる場合に限り、新たな時間保証タスクを追加することができる。このため、新たな時間保証タスクの追加により、時間保証タスクのリアルタイム性が損なわれてしまうことを防ぐことができる。
【００３５】
また、タスクが稼働時間にわたって動作している最中にタイムスライスや稼働時間等の更新がなされてしまうと、タスクの稼働時間を適切に確保できなくなってしまうおそれがある。
【００３６】
そこで、請求項８のスケジューリング方法は、タイムスライス設定ステップと稼働時間設定ステップとは、基準サイクルに係るタイミングが到来した際に実施される。
こうすることにより、各タスクの動作が一巡した時点でタイムスライスや各タスクの稼働時間を設定することができ、タスクの動作時間を適切に確保することが可能となる。
【００３７】
また、既に述べたように、タスクは、ある機能を実現するための１または複数の処理単位からなるアプリケーションとして構成されていても良い。
また、請求項９に記載されているように、タスクのうちの少なくともいずれか一つは、ある装置において実現される機能を再現するためのプログラムである仮想マシンとして構成されていても良い。
【００３８】
こうすることにより、例えば、仮想化技術を用いて複数の装置を１台に統合する場合等において、特定の仮想マシンについてはリアルタイム性を保証することが可能となる。
以上、請求項１〜９に記載されているスケジューリング方法について述べたが、このスケジューリング方法をコンピュータで実現させるための仮想マシン制御プログラムとして市場に流通させても良い（請求項１０）。また、このスケジューリング方法を実現するためのスケジューリング装置として市場に流通させても良い（請求項１１）。このような場合であっても、上述したスケジューリング方法と同様の効果を得ることができる。
【００３９】
ところで、車載装置のような一瞬でも時間要件が満たされなかった場合には致命的なダメージを受けるおそれがあるハードリアルタイムシステムにおいて、仮想マシン等として構成されたタスクのスケジューリングを行う場合について考える。このような場合、各タスクには、正常な動作を保証するうえで許容される最長の動作周期と、正常な動作を保証するうえで必要となる、各動作周期における最短の動作時間とを定めることができる。
【００４０】
そして、仮に、最長の動作周期が１ｍｓ，各動作周期における最短の動作時間が０．２ｍｓであるタスク１と、最長の動作周期が４ｍｓ，各動作周期における最短の動作時間が２ｍｓであるタスク２のスケジューリングを行うとする。このとき、タスク２の動作には少なくとも２ｍｓを要するため、タスク１を１ｍｓ周期で動作させることができなくなり、タスク１の正常な動作を保証できなくなってしまう。
【００４１】
そこで、タスクのスケジューリングに際して、周期的に到来するタイミングを生成して基準サイクルとし、該基準サイクルの１周期であるタイムスライスを分割してスケジューリングの対象となる複数のタスクに対し稼働時間として割り当て、各タイムスライスにつき、割り当てられた稼働時間にわたってスケジューリングの対象となるそれぞれのタスクを動作させる装置において、次のような方法でスケジューリングを行っても良い。
【００４２】
すなわち、タスクには、機能を正常な状態で再現する場合において許容される最長の動作周期である最長動作周期と、ぞれぞれの最長動作周期において、機能を正常な状態で再現するために最低限必要となる動作時間である必要動作時間とが設定されていても良い。
【００４３】
そして、このスケジューリングの方法は、スケジューリングの対象となる複数のタスクの最長動作周期のうちの最短の最長動作周期を、タイムスライスとして設定するタイムスライス設定ステップと、スケジューリングの対象となるそれぞれのタスクについて、該タスクに設定された必要動作時間を、該タスクに設定された最長動作周期で除算した値を算出し、さらに、該値にタイムスライスを乗算した値を最短動作時間として算出し、該最短動作時間以上の時間を稼働時間として設定する稼働時間設定ステップと、を有していても良い。
【００４４】
また、稼働時間設定ステップでは、稼働時間の総和がタイムスライスを超えない範囲で、各タスクの稼働時間を設定しても良い。
なお、タスクとは、上述した仮想マシンであっても良いし、所定の機能を実現するためのアプリケーションであっても良い。
【００４５】
こうすることにより、最長動作周期以下の時間であるタイムスライスを周期として各タスクが動作するため、各タスクが動作する間隔が最長動作周期よりも長い時間にわたって空いてしまうことを防ぐことができる。また、各タスクにつき、必要動作時間を最長動作周期で除算した値にタイムスライスを乗算した値である最短動作時間が算出され、各タイムスライスでは、少なくとも該最短動作時間にわたって各タスクが動作する。このため、タイムスライスより長い時間を最長動作周期とするタスクにおいても、最長動作周期につき、少なくとも必要動作時間分の動作時間を確保することが可能となる。したがって、複数のタスクを正常な状態で並行して動作させることができる。
【００４６】
ところで、仮に、スケジューリングの対象となる各タスクの稼働時間を最短動作時間として設定した場合には、各タイムスライスにおいて、いずれのタスクも実行されない空白期間が発生してしまうおそれがある。
【００４７】
そこで、上述のスケジューリング方法は、スケジューリングの対象となるタスクに設定されている最長動作周期の総和を最長動作周期総和時間とし、それぞれのタスクについて、該タスクに設定されている最長動作周期を最長動作周期総和時間で除算した値を算出し、さらに、該値にタイムスライスを乗算した値を仮稼働時間として算出する仮稼働時間算出ステップをさらに有していても良い。
【００４８】
そして、仮稼働時間が最短動作時間を下回るタスクを時間不足タスク、仮稼働時間が最短動作時間を上回るタスクを時間余剰タスクとし、さらに、時間不足タスクについて、仮稼働時間と最短動作時間との差分を不足時間とすると共に、時間余剰タスクについて、仮稼働時間と最短動作時間との差分を余剰時間としても良い。
【００４９】
また、稼働時間設定ステップは、いずれか一つの時間不足タスクに対応する、１または複数の時間余剰タスクを設定するタスク設定手順と、タスク設定手順に係る時間不足タスクについて、不足時間以上の時間を加算時間として設定する加算時間設定手順と、タスク設定手順にて設定された時間余剰タスクについて、それぞれ、余剰時間以下の時間である減算時間を、その総和が、タスク設定手順に係る時間不足タスクにおける加算時間となるように設定する減算時間設定手順と、を有していても良い。
【００５０】
さらに、稼働時間設定ステップにおいて、設定手順は、全ての時間不足タスクについて実施され、全ての時間不足タスクについて、それぞれ、仮稼働時間に加算時間を加算した時間を稼働時間とすると共に、全ての時間余剰タスクについて、それぞれ、仮稼働時間から減算時間を減算した時間を稼働時間としても良い。
【００５１】
このように、最長動作周期を最長動作周期総和時間で除算した値にタイムスライスを乗算した時間を各タスクの仮稼働時間とすることにより、余り時間を生じさせること無くタイムスライスを分割して各タスクに割り振ることができる。そして、仮稼働時間が最短動作時間を上回るタスクから仮稼働時間が最短動作時間を下回るタスクに仮稼働時間を分けることにより、各タスクに最短動作時間以上の時間が割り当てられる。このため、空白期間を生じさせること無く、タイムスライスを各タスクの動作時間として割り振ることができ、より効率良くタスクを稼動させることができる。
【００５２】
また、スケジューリングの対象となるタスクが動的に追加或いは削除される場合が想定されるが、そのような場合を想定して以下のように構成されていても良い。
すなわち、上述のスケジューリング方法は、スケジューリングの対象となっているタスクを、該対象から削除する削除ステップと、スケジューリングの対象となっていないタスクを、該対象として新たに追加する追加ステップと、をさらに有し、タイムスライス設定ステップと、稼働時間設定ステップとは、定期的なタイミングで実施されてもよい。
【００５３】
こうすることにより、スケジューリングの対象となるタスクの追加或いは削除が行われた場合であっても、タイムスライスや、スケジューリングの対象となる各タスクの稼働時間を適切なものに更新することができる。
【００５４】
また、スケジューリングの対象となるタスクの数が増えすぎてしまうと、タイムスライス中に全てのタスクを稼働時間にわたり動作させることができなくなってしまい、各タスクを正常な状態で稼動させることができなくなってしまう。
【００５５】
そこで、上述のスケジューリング方法では、新たなタスクをスケジューリングの対象として追加する際に、該タスクの最長動作周期及び最短動作時間と、スケジューリングの対象となっているタスクの最長動作周期及び最短動作時間とに基づき、新たなタスクをスケジューリングの対象として追加可能か否かを判定する判定ステップをさらに有し、追加ステップでは、判定ステップにて肯定判定が得られた場合に、新たなタスクをスケジューリングの対象として追加する。
【００５６】
こうすることにより、タイムスライスにおいて、スケジューリングの対象として追加する新たなタスクと、既にスケジューリングの対象となっているタスクとを稼働時間にわたり動作させることができる場合に限り、新たなタスクを追加することができる。このため、新たなタスクの追加により、タスクの正常な動作が損なわれてしまうことを防ぐことができる。
【００５７】
また、タスクが稼働時間にわたって動作している最中にタイムスライスや稼働時間等の更新がなされてしまうと、タスクの動作時間を適切に確保できなくなってしまうおそれがある。
【００５８】
そこで、上述のスケジューリング方法において、設定ステップは、基準サイクルに係るタイミングが到来した際に実施されても良い。
こうすることにより、各タスクの動作が一巡した時点でタイムスライスや各タスクの稼働時間を設定することができ、タスクの動作時間を適切に確保することが可能となる。
【００５９】
また、タスクにはリアルタイム性が要求されることが想定される。
そこで、上述のスケジューリング方法において、スケジューリングの対象となるタスクのうちの少なくともいずれか一つは、リアルタイム性が要求されるものであり、該タスクにおいて、最長動作周期とは、リアルタイム性を確保するうえで許容される最長の動作周期であり、必要動作時間とは、ぞれぞれの最長動作周期において、リアルタイム性を確保するために最低限必要となる動作時間であっても良い。
【００６０】
こうすることにより、複数のタスクを、リアルタイム性が保持された状態で並行して動作させることができる。
なお、上述のスケジューリング方法をコンピュータで実現させるためのスケジューリングプログラムや、該方法を実現する装置としてとして市場に流通させても良い。このような場合であっても、上述したスケジューリング方法と同様の効果を得ることができる。
【図面の簡単な説明】
【００６１】
【図１】第一実施形態の車載装置と制御プログラムの構成を示すブロック図と、仮想マシンとして構成されたＡタスクの構成を示すブロック図である。
【図２】外部サーバからタスクをダウンロードしてスケジューリングの対象として追加する際の様子を示す説明図である。
【図３】タスク管理テーブルを示す表である。
【図４】実行タスク特定処理についてのフローチャートである。
【図５】実行完了処理，放棄処理，イベント待ち処理，イベント発生処理についてのフローチャートである。
【図６】ＴＳ経過処理についてのフローチャートである。
【図７】スケジューラ初期化処理についてのフローチャートである。
【図８】タスク追加処理，タスク削除処理，定期見直し処理についてのフローチャートである。
【図９】Ａ〜Ｅタスクの動作時間を示すタイミングチャートである。
【図１０】タスク管理テーブルを示す表である。
【図１１】Ａ〜Ｅタスクの動作時間を示すタイミングチャートである。
【図１２】Ａ〜Ｅタスクの動作時間を示すタイミングチャートである。
【図１３】タスク管理テーブルを示す表である。
【図１４】タスクの追加や削除が行われた際の、タスク管理テーブルを示す表と、Ａ〜Ｅタスクの動作時間を示すタイミングチャートである。
【図１５】第二実施形態の車載装置と制御プログラムの構成を示すブロック図と、タスク管理テーブルを示す表である。
【図１６】スケジューラ初期化処理についてのフローチャートである。
【図１７】１ＴＳ内動作時間設定処理についてのフローチャートである。
【図１８】タスク追加処理についてのフローチャートである。
【発明を実施するための形態】
【００６２】
以下、本発明の実施形態について図面を用いて説明する。なお、本発明の実施の形態は、下記の実施形態に何ら限定されることはなく、本発明の技術的範囲に属する限り種々の形態を採りうる。
【００６３】
［第一実施形態］
［構成の説明］
第一実施形態の車載装置は、自車両と先行車両との距離を監視し、先行車両との車間距離が狭まった場合には、車速を低下させて車間距離を確保するＡＣＣ（Adaptive Cruise Control）機能と、自車両が走行中に道路の車線からはみだしそうになった場合に、ドライバへの警告や、ステアリング操作の補助を行うＬＫＡ（Lane Keeping Assist）機能と、カメラやレーダ等により自車両周辺を監視し、自車両周辺の障害物を検知してドライバに報知する周辺監視機能と、自車両の現在位置の報知や目的地までの経路案内を行うカーナビ機能と、音楽コンテンツや映像コンテンツの再生や、各種放送の視聴を行うためのオーディオ機能とを有している。
【００６４】
図１には、ＣＰＵ１１０や物理デバイス１２０等を備える第一実施形態の車載装置１００と、車載装置１００に搭載され、ＣＰＵ１１０により実行される制御プログラム１との構成を示すブロック図が記載されている。なお、制御プログラム１は、物理デバイス１２０における、フラッシュメモリ等の記憶保持動作が不要なデバイスから構成された記憶部（図示なし）に記憶されている。
【００６５】
制御プログラム１は、ＡＣＣ機能を実現するためのＡタスク１０と、ＬＫＡ機能を実現するためのＢタスク２０と、周辺監視機能を実現するためのＣタスク３０と、カーナビ機能を実現するためのＤタスク４０と、オーディオ機能を実現するためのＥタスク５０とを有していると共に、Ａ〜Ｅタスク１０〜５０を稼動させる制御管理部６０を有している。
【００６６】
ここで、Ａ〜Ｅタスク１０〜５０は、所定の装置において実現される機能の全部または一部を再現するためのプログラムである仮想マシンとして構成されていても良い。図１（ｂ）には、一例として、仮想マシンとして構成されたＡタスク１０の構成を示すブロック図が記載されている。
【００６７】
Ａタスク１０は、再現する機能に係る装置にて稼動していたプログラムをバイナリコードの状態で移植したものであるＡＰＬ１１，ＯＳ１２等と、ＡＰＬ１１，ＯＳ１２等をエミュレートするプログラムであり、いわゆる仮想化されたハードウェアに相当する仮想デバイス１３，仮想ＣＰＵ１４を有している。
【００６８】
また、ＯＳ１２は、ＡＰＬ１１を構成する第一スレッド１１ａ，第二スレッド１１ｂ等のスケジューリングを行う周知のＯＳである。
また、仮想ＣＰＵ１４は、ＡＰＬ１１，ＯＳ１２等のバイナリコードを解析し、これらの稼動させるプログラムである。
【００６９】
また、仮想デバイス１３は、ＡＰＬ１１，ＯＳ１２等と、車載装置１００の物理デバイス１２０との間のＩ／Ｆとなるプログラムであり、ＡＰＬ１１，ＯＳ１２等は、仮想デバイス１３にアクセスすることで物理デバイス１２０を制御する。
【００７０】
なお、Ａ〜Ｅタスク１０〜５０は必ずしも仮想マシンである必要は無く、対応する機能を実現するための単一の処理単位からなるプログラム、或いは複数の処理単位（つまり、複数のスレッド）からなるプログラムとして構成されていても良い。
【００７１】
また、本実施形態では、Ａ〜Ｃタスク１０〜３０は、外部からの入力に対する応答時間が一定の範囲内となるリアルタイム性が要求されるタスクであり、仮にこれらのタスクが仮想マシンとして構成されている場合には、該仮想マシンにおけるＯＳは、リアルタイムＯＳとして構成されている。
【００７２】
次に、制御管理部６０について説明する。
制御管理部６０は、Ａ〜Ｅタスク１０〜５０に対し順次実行権を付与し、これらのタスクのスケジューリングを行うスケジューリング部６１と、タスク（タスクが仮想マシンとして構成されている場合であれば該タスクの仮想デバイス）からの指示に応じて物理デバイス１２０を制御すると共に、物理デバイス１２０からの信号をタスク（或いは該タスクの仮想デバイス）に通知するデバイス制御部６２と、を有している。
【００７３】
そして、スケジューリング部６１は、タスクから実行権を放棄した旨等の通知を受け付けるタスク状態受付部６１ａと、タスク状態受付部６１ａが受け付けた通知等に基づきタスクの動作状態を設定すると共に、各タスクに対し実行権を付与するスケジューラ設定部６１ｂと、実行権が付与されているタスクを動作させるスケジューラ実行部６１ｃと、スケジューリングの対象となるタスクの追加や削除を行うタスク追加・削除受付部６１ｄとを有する。
【００７４】
なお、上述した構成の仮想マシンとして構成されたタスクに実行権が付与された場合には、仮想マシンでは、ＯＳによるスレッドのスケジューリングが行われ、スレッドが並行して稼動される。また、複数のスレッドから構成されているタスクに実行権が付与された場合においても、該タスクでは、同様にしてＯＳによる該スレッドのスケジューリングが行われる。
【００７５】
［動作の説明］
次に、第一実施形態の制御プログラム１の動作について説明する。
（１）概要について
（ａ）スケジューリングの概要について
まず、スケジューリング部６１にて行われる各タスクのスケジューリングの概要について説明する。
【００７６】
スケジューリング部６１のスケジューラ設定部６１ｂは、周期的に到来するタイミングを生成して基準サイクルとし、該基準サイクルの１周期であるタイムスライス（ＴＳ（Time Sliceの略）とも記載）においてＡ〜Ｅタスクに順次実行権を付与することで、これらのタスクを並行して動作させる。
【００７７】
また、既に述べたように、Ａ〜Ｃタスクにはリアルタイム性が要求されており、これらのタスクについては、所定周期につき一定の動作時間を付与することを保証する必要がある。このため、スケジューラ設定部６１ｂは、Ａ〜Ｃタスクに応じて適切なＴＳを設定し（詳細については後述する）、各ＴＳにおいて、Ａ〜Ｃタスクに対し、リアルタイム性を確保するために必要な時間にわたって順次実行権を付与する。なお、これらのタスクがリアルタイム性を確保するために各ＴＳにおいて必要となる動作時間を、１ＴＳ内動作時間と称する。また、リアルタイム性が要求されるタスクに対してのスケジューリングを、Definite Scheduling（ＤＳとも記載）と称する。
【００７８】
また、ＤＳの対象であるＡ〜Ｃタスクの１ＴＳ内動作時間の総和はＴＳよりも小さい値となっており、これらのタスクに対し１ＴＳ内動作時間にわたり実行権が付与された後、次のＴＳが開始されるまでには空き時間が生じる。そこで、スケジューラ設定部６１ｂは、この空き時間を利用してＤ，Ｅタスクに実行権を付与する。このようにして行うＤ，Ｅタスクに対してのスケジューリングを、Time Share Scheduling（ＴＳＳとも記載）と称する。なお、ＴＳＳの対象となるＤ，Ｅタスクについても、ＴＳにおいて実行権が付与される時間が定められており、この時間も１ＴＳ内動作時間と称する。しかしながら、ＤＳ終了後の空き時間がどの程度の長さとなるかは保証されておらず、ＴＳＳの対象となるタスクは、各ＴＳにおいて必ず１ＴＳ内動作時間にわたり実行権が付与されるとは限らない。
【００７９】
（ｂ）タスクについて
次に、タスクの挙動や動作状態について説明する。
スケジューラ設定部６１ｂによりタスクに実行権が付与されると、スケジューラ実行部６１ｃにより該タスクの動作が開始される。このとき、実行中のタスクは、予め定められた放棄条件が成立した場合には自発的に実行権を放棄する。なお、放棄条件とは、例えば、物理デバイス１２０から動作中のタスクに特定の信号が入力される等といったものでも良い。ここで、仮にこのタスクが仮想マシンである場合には、該仮想マシンの仮想デバイスが、デバイス制御部６２を経由して物理デバイス１２０から特定の信号を受け取ることで、該タスクへの特定の信号の入力が検知される。
【００８０】
また、このほかにも、動作中のタスクは、予め定められたイベント待ち条件が成立することにより自発的に実行権を放棄し、予め定められたイベントの発生を待ち始める。なお、イベント待ち条件やイベントとは、物理デバイス１２０から動作中のタスクに特定の信号が入力される等といったものでも良いし、他のタスクから特定の指示がなされる等といったものであっても良い。
【００８１】
また、タスクの動作状態として、ＴＳにおいて１ＴＳ内動作時間にわたり実行権が付与されていない実行可能状態と、実行権が付与されている実行中状態と、ＴＳにおいて１ＴＳ内動作時間にわたり実行権が付与され、該ＴＳにおける動作が完了した実行完了状態と、イベントの発生を待つイベント待ち状態とが設けられている。なお、タスクが一旦実行完了状態となると、スケジューラ設定部６１ｂは、同一のＴＳにおいて該タスクに再び実行権を付与することはない。また、スケジューラ設定部６１ｂは、イベント待ち状態であるタスクには実行権を付与しない。
【００８２】
（ｃ）ＴＳの設定について
次に、ＴＳの設定等について説明する。
図２に記載されているように、車載装置１００は、図示しない携帯電話等を介して外部サーバ１５０と無線通信を行い、外部サーバ１５０から新たなタスクをダウンロードして記憶部に記憶させると共に、ダウンロードしたタスクを、スケジューリングの対象に追加することができる。また、ユーザからの指示に応じて、記憶部に記憶されているタスクをスケジューリングの対象として新たに追加することや、スケジューリングの対象となっているタスクを対象から削除することができる。そして、スケジューリングの対象となるタスクの追加或いは削除が行われた場合には、ＴＳや、ＤＳの対象のタスクの１ＴＳ内動作時間が設定される。
【００８３】
また、リアルタイム性が要求されるタスク（ＤＳの対象となるタスク）には、該タスクのリアルタイム性を確保し、該タスクの機能を正常に稼動させるうえで許容される最長の動作周期である最長動作周期と、該タスクのリアルタイム性の確保、及び、該タスクの機能の正常な稼動のため最低限必要となる最長動作周期毎の動作時間である必要動作時間とが定められている。
【００８４】
ここで、周辺監視機能を実現する仮想マシンであるＡタスクを例に挙げて説明する。Ａタスクでは、カメラやレーダ等から収集した情報を解析して自車両周辺の障害物の有無を判定しているが、この判定処理の時間が不十分である場合、障害物の検知が遅れる、或いは検知ができないという可能性がある。このことを考慮し、Ａタスクを構成する仮想マシンにより再現される周辺監視装置を用いて判定処理を確実に実行するために必要な時間を測定し、測定した時間と、該周辺監視装置と車載装置１００の動作クロックの比等に基づき、必要動作時間を算出することが考えられる。
【００８５】
また、これ以外にも、最長動作周期や必要動作時間は、例えば、タスクに対してのエミュレーションやシミュレーションの結果に基づき定義されても良いし、タスクのアルゴリズム等に基づき定義されても良い。
【００８６】
そして、スケジューラ設定部６１ｂは、タスクの追加や削除が行われると、リアルタイム性が要求されるタスクの最長動作周期のうち最短のものをＴＳとして設定する。さらに、スケジューラ設定部６１ｂは、リアルタイム性が要求されるタスクの最長動作周期と必要動作時間とに基づき、該タスクの１ＴＳ内動作時間を設定する（詳細については後述する）。
【００８７】
（２）タスク管理テーブルについて
次に、Ａ〜Ｅタスクの１ＴＳ内動作時間等を示すタスク管理テーブルについて説明する。図３には、タスク管理テーブルの一例が記載されている。なお、このタスク管理テーブルは、スケジューリング部６１のスケジューラ設定部６１ｂが有している。
【００８８】
このタスク管理テーブルは、タスクの名称を示す項目である「名称」と、スケジューリングの態様（ＤＳの対象か、或いはＴＳＳの対象か）を示す項目である「タイプ」と、１ＴＳ内動作時間を示す項目である「１ＴＳ内動作時間」と、タスクの動作状態を示す項目である「動作状態」を有する。
【００８９】
また、ＤＳの対象となるタスク（リアルタイム性が要求されるタスク）に対応する項目として、最長動作周期を示す項目である「最長動作周期」と、必要動作時間を示す項目である「必要動作時間」と、ＤＳにおける実行権を付与する優先順位を示す「ＤＳ優先度」を有する。なお、詳細については後述するが、この「ＤＳ優先度」は、ＤＳの対象となるタスクの最長動作周期等に基づき設定される。また、「ＤＳ優先度」は、値が小さいほど優先順位が高くなる。
【００９０】
また、ＴＳＳの対象となるタスクに対応する項目として、ＴＳＳにおける実行権を付与する優先順位を示す「ＴＳＳ優先度」と、ＴＳＳ優先度を算出するために用いられる値であり、ＴＳＳにおける実行権を付与する優先順位の固定値を示す「ＴＳＳ固定優先度」と、ＴＳＳ優先度を算出するために用いられる値であり、ＴＳＳの対象となるタスクが各ＴＳにおいて実行完了状態とならなかった度合いを示す「ＴＳＳ休止度」を有する。
【００９１】
なお、「ＴＳＳ優先度」と「ＴＳＳ固定優先度」は、値が大きいほど優先順位が高くなり、「ＴＳＳ優先度」は、「ＴＳＳ固定優先度」と「ＴＳＳ休止度」の和により求められる。また、詳細については後述するが、各ＴＳにおいて、ＴＳＳの対象のタスクが１ＴＳ内動作時間にわたり動作した場合には、該タスクの「ＴＳＳ休止度」は減少し、１ＴＳ内動作時間にわたり動作しなかった場合には、該タスクの「ＴＳＳ休止度」は増加する。このため、各ＴＳにつき、ＴＳＳの対象のタスクが１ＴＳ内動作時間にわたり動作すると、「ＴＳＳ優先度」が減少して優先順位が下がり、該タスクが１ＴＳ内動作時間にわたり動作しないと、「ＴＳＳ優先度」が増加して優先順位が上がるのである。
【００９２】
（３）実行タスク特定処理について
次に、実行権を付与するタスクを定めるサブルーチンである実行タスク特定処理について、図４に記載のフローチャートを用いて説明する。本処理はスケジューリング部６１にて行われる処理であり、基準サイクルが到来した際（つまり、新たなＴＳが開始された際）や、タスクが実行完了状態やイベント待ち状態となった際等にコールされる。なお、以後、スケジューリング部６１を構成する各部位にてどのような処理が行われるかという観点で説明を行うが、これらの処理は、車載装置１００のＣＰＵ１１０が、プログラムである上記部位を実行することにより実現されるということを、念のため付言しておく。
【００９３】
Ｓ２０５では、スケジューリング部６１のスケジューラ設定部６１ｂにてタスク管理テーブルが参照され、実行可能状態であるタスクの有無が判定される。そして、実行可能状態であるタスクが存在する場合には（Ｓ２０５：Ｙｅｓ）、Ｓ２１０に処理が移行され、実行可能状態であるタスクが存在しない場合には（Ｓ２０５：Ｎｏ）、本処理は終了する。
【００９４】
Ｓ２１０では、スケジューラ設定部６１ｂによりタスク管理テーブルが参照され、ＤＳの対象となっているタスクに、実行中状態或いは実行可能状態であるものが存在するか判定される。そして、肯定判定の場合には（Ｓ２１０：Ｙｅｓ）、Ｓ２１５に処理が移行され、否定判定の場合には（Ｓ２１０：Ｎｏ）、Ｓ２２０に処理が移行される。
【００９５】
Ｓ２１５では、スケジューラ設定部６１ｂによりタスク管理テーブルが参照され、実行中状態或いは実行可能状態であるＤＳの対象のタスクのうち、優先順位が最も高い（つまり、「ＤＳ優先度」が示す値が最も小さい）タスクが特定される。そして、Ｓ２３０に処理が移行される。
【００９６】
Ｓ２２０では、スケジューラ設定部６１ｂによりタスク管理テーブルが参照され、ＴＳＳの対象となっているタスクに、実行中状態或いは実行可能状態であるものが存在するか判定される。そして、肯定判定の場合には（Ｓ２２０：Ｙｅｓ）、Ｓ２２５に処理が移行され、否定判定の場合には（Ｓ２２０：Ｎｏ）、Ｓ２３０に処理が移行される。
【００９７】
Ｓ２２５では、スケジューラ設定部６１ｂによりタスク管理テーブルが参照され、実行中状態或いは実行可能状態であるＴＳＳの対象のタスクのうち、優先順位が最も高い（つまり、「ＴＳＳ優先度」が示す値が最も大きい）タスクが特定される。そして、Ｓ２３０に処理が移行される。
【００９８】
Ｓ２３０では、スケジューラ設定部６１ｂによりタスク管理テーブルが参照され、Ｓ２１５或いはＳ２２５にて特定されたタスクが実行中状態であるか否かが判定される。そして、肯定判定の場合（Ｓ２３０：Ｙｅｓ）は本処理が終了し、否定判定の場合には（Ｓ２３０：Ｎｏ）、Ｓ２３５に処理が移行される。
【００９９】
Ｓ２３５では、スケジューラ設定部６１ｂによりタスク管理テーブルが参照され、実行中状態であるタスクの有無について判定される。そして、実行中状態であるタスクが有る場合には（Ｓ２３５：Ｙｅｓ）、Ｓ２４０に処理が移行され、実行中状態であるタスクが無い場合には（Ｓ２３５：Ｎｏ）、Ｓ２４５に処理が移行される。
【０１００】
Ｓ２４０では、スケジューラ設定部６１ｂにより、実行中状態であるタスクから実行権が剥奪され、該タスクの動作が終了する。また、スケジューラ設定部６１ｂにより、タスク管理テーブルにおける該タスクについての「動作状態」が実行可能状態に更新される。そして、Ｓ２４５に処理が移行される。
【０１０１】
Ｓ２４５では、スケジューラ設定部６１ｂにより、Ｓ２１５或いはＳ２２５にて特定されたタスクに対し実行権が付与され、以後、スケジューラ実行部６１ｃにより、該タスクの動作が開始される。また、スケジューラ設定部６１ｂにより、タスク管理テーブルにおける該タスクについての「動作状態」が実行中状態に更新される。そして、本処理は終了する。
【０１０２】
（４）実行完了処理について
次に、ＴＳにおける動作時間が１ＴＳ内動作時間に達したタスクから実行権を剥奪すると共に、他のタスクに対し新たに実行権を付与する実行完了処理について、図５（ａ）のフローチャートを用いて説明する。なお、本処理は、各ＴＳにおけるタスクの動作時間が１ＴＳ内動作時間に達した際に実行される処理である。
【０１０３】
Ｓ３０５では、スケジューラ設定部６１ｂにより、実行権が付与されているタスクから実行権が剥奪され、該タスクの動作が終了する。そして、スケジューラ設定部６１ｂにより、タスク管理テーブルにおける該タスクについての「動作状態」が実行完了状態に更新され、Ｓ３１０に処理が移行される。
【０１０４】
Ｓ３１０では、実行タスク特定処理がコールされ、実行可能状態のタスクに対し新たに実行権が付与される。そして、実行タスク特定処理が終了すると、本処理は終了する。
（５）放棄処理について
次に、タスクが実行権を自発的に放棄した際に他のタスクに対し新たに実行権を付与する放棄処理について、図５（ｂ）のフローチャートを用いて説明する。なお、本処理は、実行中状態のタスクにて放棄条件が成立し、スケジューリング部６１のタスク状態受付部６１ａが、該タスクから、自発的に実行権を放棄した旨の通知を受け取った際に実行される処理である。
【０１０５】
Ｓ３１５では、スケジューラ設定部６１ｂにより、実行権を放棄したタスクについてのタスク管理テーブルにおける「動作状態」が実行完了状態に更新される。そして、Ｓ３２０に処理が移行される。
【０１０６】
Ｓ３２０では、実行タスク特定処理がコールされ、実行可能状態のタスクに対し新たに実行権が付与される。そして、実行タスク特定処理が終了すると、本処理は終了する。
（６）イベント待ち処理について
次に、イベントの発生を待ち始めたタスクを実行権の付与の対象から除外すると共に、他のタスクに対し新たに実行権を付与するイベント待ち処理について、図５（ｃ）のフローチャートを用いて説明する。なお、本処理は、実行中のタスクにてイベント待ち条件が成立し、タスク状態受付部６１ａが、該タスクから、イベントの発生を待ち始めた旨の通知を受け取った際に実行される処理である。
【０１０７】
Ｓ３２５では、スケジューラ設定部６１ｂにより、実行権を放棄しイベントの発生を持ち始めたタスクについてのタスク管理テーブルにおける「動作状態」がイベント待ち状態に更新される。そして、Ｓ３３０に処理が移行される。
【０１０８】
Ｓ３３０では、実行タスク特定処理がコールされ、実行可能状態のタスクに対し新たに実行権が付与される。そして、実行タスク特定処理が終了すると、本処理は終了する。
（７）イベント発生処理について
次に、予め定められたイベントが発生した際に、該イベントの発生を待つタスクを実行権の付与の対象として復帰させる処理であるイベント発生処理について、図５（ｄ）のフローチャートを用いて説明する。なお、本処理は、イベント待ち状態であるタスクに対応するイベントが発生したことが検知された際に実行される処理である。
【０１０９】
Ｓ３３５では、スケジューラ設定部６１ｂにより、発生したイベントを待つタスクについてのタスク管理テーブルにおける「動作状態」が実行可能状態に更新される。そして、Ｓ３４０に処理が移行される。
【０１１０】
Ｓ３４０では、実行タスク特定処理がコールされ、実行中状態のタスクの動作がそのまま継続されるか、或いは、イベントの発生により実行可能となったタスクに新たに実行権が付与される。そして、実行タスク特定処理が終了すると、本処理は終了する。
【０１１１】
（８）ＴＳ経過処理について
次に、新たなＴＳが開始された際に実行権が付与されているタスクから実行権を剥奪すると共に、ＤＳの対象のタスクに対し新たに実行権を付与するＴＳ経過処理について、図６のフローチャートを用いて説明する。本処理は、新たなＴＳが開始された際に実行される処理である。
【０１１２】
Ｓ４０５では、スケジューラ設定部６１ｂによりタスク管理テーブルが参照され、ＴＳＳの対象のタスクの有無が判定される。ＴＳＳの対象となるタスクが有る場合には（Ｓ４０５：Ｙｅｓ）、Ｓ４１０に処理が移行され、ＴＳＳの対象となるタスクが無い場合には（Ｓ４０５：Ｎｏ）、Ｓ４５０に処理が移行される。
【０１１３】
Ｓ４１０では、スケジューラ設定部６１ｂによりタスク管理テーブルが参照され、タスク管理テーブルに登録されているＴＳＳの対象のタスクのうち、最も先頭側に登録されているタスクが選択される。そして、選択されたタスクの「動作状態」が実行完了状態であるか否かが判定され、肯定判定が得られた場合には（Ｓ４１０：Ｙｅｓ）、Ｓ４１５に処理が移行され、否定判定が得られた場合には（Ｓ４１０：Ｎｏ）、Ｓ４２０に処理が移行される。
【０１１４】
Ｓ４１５では、スケジューラ設定部６１ｂにより、選択中のタスクについてのタスク管理テーブルにおける「ＴＳＳ休止度」が減少される。具体的には、以下の式により新たなＴＳＳ休止度が算出され、タスク管理テーブルの「ＴＳＳ休止度」に設定される。
【０１１５】
新たなＴＳＳ休止度＝更新前のＴＳＳ休止度×（９／１０）
ＴＳＳ休止度が更新されると、Ｓ４３５に処理が移行される。
Ｓ４２０では、スケジューラ設定部６１ｂによりタスク管理テーブルが参照され、選択中のＴＳＳの対象のタスクの「動作状態」が、実行中状態或いは実行可能状態であるか否かが判定される。そして、肯定判定の場合は（Ｓ４２０：Ｙｅｓ）、Ｓ４２５に処理が移行され、否定判定の場合は（Ｓ４２０：Ｎｏ）、Ｓ４４０に処理が移行される。
【０１１６】
Ｓ４２５では、ＴＳＳの対象のタスクが実行中状態であるならば、スケジューラ設定部６１ｂにより該タスクの実行権が剥奪され、該タスクの動作が終了する。また、このとき、スケジューラ設定部６１ｂによりタスク管理テーブルがアクセスされ、選択中のＴＳＳの対象のタスクの「動作状態」が実行完了状態に設定される。そして、Ｓ４３０に処理が移行される。
【０１１７】
Ｓ４３０では、スケジューラ設定部６１ｂにより、選択中のタスクについてのタスク管理テーブルにおける「ＴＳＳ休止度」が増加される。具体的には、以下の式により新たなＴＳＳ休止度が算出され、タスク管理テーブルの「ＴＳＳ休止度」に設定される。
【０１１８】
新たなＴＳＳ休止度＝更新前のＴＳＳ休止度×（９／１０）＋５
ＴＳＳ休止度が更新されると、Ｓ４３５に処理が移行される。
Ｓ４３５では、スケジューラ設定部６１ｂにより、選択中のタスクについてのタスク管理テーブルにおける「ＴＳＳ優先度」が更新される。具体的には、該タスクの「ＴＳＳ固定優先度」が示す値と「ＴＳＳ休止度」が示す値との和が算出され、「ＴＳＳ優先度」に設定される。そして、Ｓ４４０に処理が移行される。
【０１１９】
Ｓ４４０では、スケジューラ設定部６１ｂにより、「ＴＳＳ優先度」の更新が完了していないＴＳＳの対象のタスクの有無が判定される。そして、「ＴＳＳ優先度」の更新が完了していないＴＳＳの対象のタスクが有ると判定された場合には（Ｓ４４０：Ｙｅｓ）、該タスクのうち、タスク管理テーブルの最も先頭側に登録されているタスクが新たに選択され、Ｓ４１０に処理が移行される。また、上記タスクが無いと判定された場合には（Ｓ４４０：Ｎｏ）、Ｓ４４５に処理が移行される。
【０１２０】
Ｓ４４５では、スケジューラ設定部６１ｂにより、イベント待ち状態でないタスクについてのタスク管理テーブルにおける「動作状態」が実行可能状態に設定される。そして、Ｓ４５０に処理が移行される。
【０１２１】
Ｓ４５０では、実行タスク特定処理がコールされ、ＤＳの対象のタスクのうち、ＤＳ優先度が最も高いタスクに実行権が付与される。そして、実行タスク特定処理が終了すると、本処理は終了する。
【０１２２】
（９）スケジューラ初期化処理について
次に、ＴＳや、タスク管理テーブルの「１ＴＳ内動作時間」等を設定する処理であるスケジューラ初期化処理について、図７に記載のフローチャートを用いて説明する。本処理は、制御プログラム１が起動された場合や、動作させるタスクの追加或いは削除が行われた場合に、スケジューラ設定部６１ｂにて実行される処理である。
【０１２３】
なお、制御プログラム１の起動時に本処理が実行される場合には、タスク管理テーブルは、スケジューリングの対象となるタスクのレコードが登録された状態となっており、これらのレコードは、「名称」，「タイプ」が設定されている。また、ＤＳの対象のタスクに対応するレコードについては、「最長動作周期」，「必要動作時間」が設定されており、ＴＳＳの対象となるタスクに対応するレコードについては、「ＴＳＳ優先度」，「ＴＳＳ固定優先度」，「ＴＳＳ休止度」が設定されている。
【０１２４】
Ｓ５０５では、スケジューラ設定部６１ｂは、タスク管理テーブルを参照し、ＤＳの対象のタスクに対応する「最長動作周期」のうち最も短いものを特定してこれをＴＳとして設定し、Ｓ５１０に処理を移行する。
【０１２５】
Ｓ５１０では、スケジューラ設定部６１ｂは、以下のようにして、タスク管理テーブルに登録されている各タスクの１ＴＳ内動作時間を算出する。
すなわち、ＤＳの対象のタスクについては、
１ＴＳ内動作時間＝（必要動作時間／最長動作時間）×ＴＳ
という式を用いて、１ＴＳ内動作時間を算出する。なお、（必要動作時間／最長動作時間）×ＴＳに対し所定のマージンを加えた値を１ＴＳ内動作時間としても良い。
【０１２６】
また、ＴＳＳの対象の各タスクについては、一律に所定の固定時間（例えば、０．１ｍｓ）を１ＴＳ内動作時間としても良い。また、ＴＳＳの対象の各タスクに個別に設定された固定時間を１ＴＳ内動作時間としても良く、このような場合であれば、該タスクを構成するバイナリデータに基づき該固定時間を特定しても良い。
【０１２７】
そして、各タスクについての１ＴＳ内動作時間をタスク管理テーブルの「１ＴＳ内動作時間」に設定し、Ｓ５１５に処理を移行する。
Ｓ５１５では、スケジューラ設定部６１ｂは、ＤＳの対象のタスクに関して、タスク管理テーブルの「ＤＳ優先度」を設定する。具体的には、以下のルールに従い「ＤＳ優先度」が設定される。
（ａ）ＤＳの対象のタスクのうち、最長動作周期が短いタスクから順に高い優先度を設定する。
（ｂ）最長動作周期が同じ場合は、必要動作時間が長いタスクから順に高い優先度を設定する。
（ｃ）最長動作周期，必要動作時間が同一である場合には、タスク管理テーブルにおける先頭側のレコードに対応するタスクから順に高い優先度を設定する。
【０１２８】
「ＤＳ優先度」の設定が終了すると、Ｓ５２０に処理を移行する。
Ｓ５２０では、スケジューラ設定部６１ｂは、スケジューラ初期化フラグをＯＦＦし、本処理を終了する。
【０１２９】
（１０）タスク追加処理について
次に、スケジューリングの対象となるタスクを新たに追加する処理であるタスク追加処理について、図８（ａ）に記載のフローチャートを用いて説明する。本処理は、例えば、ユーザから車載装置１００の記憶部に保存されていたタスクの追加が要求された場合や、既に述べたように新たなタスクがダウンロードされた際等に、タスク追加・削除受付部６１ｄにて実行される処理である。
【０１３０】
Ｓ６０５では、タスク追加・削除受付部６１ｄは、追加されるタスクがＤＳの対象のタスクかどうかを判定し、肯定判定の場合には（Ｓ６０５：Ｙｅｓ）、Ｓ６１０に処理を移行し、否定判定の場合には（Ｓ６０５：Ｎｏ）、Ｓ６１５に処理を移行する。
【０１３１】
Ｓ６１０では、タスク追加・削除受付部６１ｄは、新たなＤＳの対象のタスクの追加が可能であるか否かを判定し、肯定判定である場合には（Ｓ６１０：Ｙｅｓ）、Ｓ６１５に処理を移行し、否定判定である場合には（Ｓ６１０：Ｎｏ）、Ｓ６２５に処理を移行する。
【０１３２】
具体的には、新たなＤＳの対象のタスクを追加した場合の、各ＴＳにおけるＤＳに要する時間の割合に基づき、該タスクの追加の可否について判定する。すなわち、タスク管理テーブルを参照し、現状のＤＳの対象の各タスクの「最長動作周期」，「必要動作時間」を特定すると共に、新たなＤＳの対象のタスクを構成するバイナリデータに基づき、該タスクの「最長動作周期」，「必要動作時間」を特定する。そして、これらのタスクについて、それぞれ、必要動作時間を最長動作周期で除算した値を算出し、これらの値の総和が所定値（例えば１）未満である場合には、タスクの追加が可能と判定すると共に、該総和が所定値以上である場合には、タスクの追加が不可能と判定しても良い。
【０１３３】
Ｓ６１５では、タスク追加・削除受付部６１ｄは、新たに追加するタスクに対応するレコードをタスク管理テーブルの最後尾に追加すると共に、該レコードに対応する各項目を設定し、Ｓ６２０に処理を移行する。
【０１３４】
具体的には、該タスクを構成するバイナリデータに基づき、該タスクの名称とスケジューリングの態様（ＤＳの対象か、或いはＴＳＳの対象か）を特定し、追加したレコードの「名称」，「タイプ」に設定する。そして、該タスクがＤＳの対象である場合には、該バイナリデータに基づき最長動作周期，必要動作時間を特定し、追加したレコードの「最長動作周期」，「必要動作時間」を設定する。一方、該タスクがＴＳＳの対象である場合には、該バイナリデータに基づきＴＳＳ固定優先度を特定し、これを追加したレコードの「ＴＳＳ固定優先度」に設定する。また、該レコードの「ＴＳＳ休止度」に“０”を設定すると共に、「ＴＳＳ優先度」に「ＴＳＳ固定優先度」の値を設定する。
【０１３５】
Ｓ６２０では、タスク追加・削除受付部６１ｄは、スケジューラ初期化フラグをＯＮし、本処理を終了する。
タスクの追加が不可能である場合に移行するＳ６２５では、タスク追加・削除受付部６１ｄは、図示しない表示装置等を介してタスクの追加が不可能である旨を報知し、本処理を終了する。
【０１３６】
（１１）タスク削除処理について
次に、タスクをスケジューリングの対象から削除する処理であるタスク削除処理について、図８（ｂ）に記載のフローチャートを用いて説明する。本処理は、例えば、ユーザの操作や外部からの信号等に応じて、タスク追加・削除受付部６１ｄにて実行される処理である。
【０１３７】
Ｓ６４０では、タスク追加・削除受付部６１ｄは、スケジューリングの対象から削除するタスクに対応するレコードをタスク管理テーブルから削除し、Ｓ６４５に処理を移行する。
【０１３８】
Ｓ６４５では、タスク追加・削除受付部６１ｄは、スケジューラ初期化フラグをＯＮし、本処理を終了する。
（１２）定期見直し処理について
次に、タスク管理テーブルの設定を見直す処理である定期見直し処理について、図８（ｃ）に記載のフローチャートを用いて説明する。本処理は、基準サイクルに係るタイミングが到来した際に、スケジューラ設定部６１ｂにて実行される処理である。
【０１３９】
Ｓ６６０では、スケジューラ設定部６１ｂは、スケジューラ初期化フラグがＯＮになっているか判定する。そして、肯定判定の場合は（Ｓ６６０：Ｙｅｓ）、Ｓ６６５に処理を移行し、否定判定の場合は（Ｓ６６０：Ｎｏ）、本処理を終了する。
【０１４０】
Ｓ６６５は、スケジューラ設定部６１ｂは、スケジューラ初期化処理をサブルーチンとしてコールする。そして、スケジューラ初期化処理が終了した後に、本処理を終了する。
［具体例について］
次に、スケジューリング部６１によるＡ〜Ｅタスクのスケジューリングの具体例について説明する。
【０１４１】
（１）イベント待ち状態に遷移した場合の具体例
まず、Ｂタスクがイベント待ち状態に遷移した後から、イベントの発生により実行権を付与されるまでのＡ〜Ｅタスクの動作について、図９に記載のタイミングチャートと、図１０（ａ）〜（ｄ）に記載のタスク管理テーブルを用いて説明する。なお、ＴＳは１ｍｓに設定されているものとする。
【０１４２】
図１０のタスク管理テーブルに記載されているように、Ａ〜Ｅタスクの１ＴＳ内動作時間は、０．１ｍｓ，０．３ｍｓ，０．２ｍｓ，０．２ｍｓ，０．１ｍｓに設定されており、その総和がＴＳ（１ｍｓ）未満となっている。このため、Ａ〜Ｅタスクは、各ＴＳにつき、１ＴＳ内動作時間にわたり動作する。また、図１０（ａ）のタスク管理テーブルが示すように、最初のＴＳである第１周期の開始時点では、Ａ〜ＣタスクのＤＳ優先度は、１，２，３に設定されており、Ｄ，ＥタスクのＴＳＳ優先度は、２０，０となっている。このため、第１周期では、各タスクは、Ａ〜Ｅタスクの順番で、１ＴＳ内動作時間にわたり動作する（図９参照）。
【０１４３】
続いて第２周期では、Ｂタスクは、実行権が付与された後０．２ｍｓが経過した時点でイベント待ち条件が成立したため実行権を放棄し、イベント待ち状態に遷移する。また、これと同時に、Ｃタスクの動作が開始される（図９参照）。図１０（ｂ）には、Ｂタスクがイベント待ち状態に遷移した直後のタスク管理テーブルが記載されている。
【０１４４】
続いて第３周期では、イベント待ち状態であるＢタスクには実行権が付与されず、Ａタスク，Ｃ〜Ｅタスクは、該順番で１ＴＳ内動作時間にわたり動作する（図９参照）。なお、図１０（ｃ）には、第３周期開始時点におけるタスク管理テーブルが記載されている。
【０１４５】
続いて第４周期では、Ｃタスクの動作中に、Ｂタスクが発生を待っているイベントが発生する（図９参照）。このとき、ＣタスクからＢタスクに実行権が移行され、Ｂタスクが実行中状態に遷移すると共に、Ｃタスクは１ＴＳ内動作時間にわたり動作していないので、実行可能状態に遷移する。図１０（ｄ）には、上記イベントが発生しＢタスクの動作が開始された直後のタスク管理テーブルが記載されている。そして、Ｂタスクの動作時間が１ＴＳ内動作時間に達すると、Ｃタスクに実行権が移行し、Ｃタスクの動作時間がイベント発生前の動作時間と合わせて１ＴＳ内動作時間に達すると、Ｃタスクは実行完了状態となる。その後、Ｄタスク，Ｅタスクの順に実行権が付与される。
【０１４６】
なお、この具体例では、Ｂタスクよりも優先順位の低いＣタスクの動作中にイベントが発生したため、実行権がＣタスクからＢタスクに移行したが、Ｂタスクよりも優先順位の高いＡタスクの実行中に上記イベントが発生した場合には、Ｂタスクは実行可能状態に遷移し、Ａタスクの動作が完了した後に、Ｂタスクに実行権が付与される。
【０１４７】
また、ＴＳＳの対象であるＤタスク或いはＥタスクの動作中にイベントが発生した場合にも、同様に実行権がＢタスクに移行し、Ｂタスクの動作完了後に、イベント発生時に動作していたタスクに実行権が移行する。
【０１４８】
（２）実行権が放棄された場合の具体例
次に、Ｂタスクが実行権を放棄した場合のＡ〜Ｅタスクの動作について、図１１に記載のタイミングチャートを用いて説明する。なお、ここでは、Ａ〜Ｅタスクは、図１０（ａ）に記載のタスク管理テーブルに基づきスケジューリングがなされる。
【０１４９】
第１周期にて、放棄条件の成立によりＢタスクが実行権を放棄すると、実行権がＢタスクからＣタスクに移行し、Ｂタスクは、動作時間が１ＴＳ内動作時間に達していないが、実行完了状態に遷移する。そして、第２周期以降は、各タスクは、Ａタスク〜Ｅタスクの順番で１ＴＳ内動作時間にわたり動作する。
【０１５０】
（３）１ＴＳ内動作時間の総和がＴＳを超える場合の具体例
次に、Ａ〜Ｅタスクの１ＴＳ内動作時間の総和がＴＳを越える場合のＡ〜Ｅタスクの動作について、図１２に記載のタイミングチャートと、図１３（ａ）〜（ｄ）に記載のタスク管理テーブルを用いて説明する。
【０１５１】
図１３のタスク管理テーブルに記載されているように、Ａ〜Ｅタスクの１ＴＳ内動作時間は、０．２ｍｓ，０．３ｍｓ，０．３ｍｓ，０．２ｍｓ，０．１ｍｓに設定されていると共に、ＴＳが１ｍｓに設定されており、１ＴＳ内動作時間の総和がＴＳを越えている。このため、ＴＳＳの対象であるＤ，Ｅタスクは、ＤＳ終了から次のＴＳが到来するまでの空き時間である０．２ｍｓ間にスケジューリングが行われるため、各ＴＳにて必ず１ＴＳ内動作時間にわたり動作するとは限らない。
【０１５２】
まず、第１周期に関して説明する。図１３（ａ）に記載のタスク管理テーブルが示すように、第１周期開始時点では、Ｄ，Ｅタスクの「ＴＳＳ優先度」は“２０”，“０”に設定されている。このため、ＤＳの対象であるＡ〜Ｃタスクの実行完了後、Ｄタスクが１ＴＳ内動作時間にわたり実行され、Ｅタスクには実行権が付与されない（図１２参照）。
【０１５３】
その結果、第２周期開始時点では、図１３（ｂ）のタスク管理テーブルが示すように、Ｅタスクの「ＴＳＳ休止度」は“５”に増加し、「ＴＳＳ優先度」が“５”となる。一方、第１周期にて１ＴＳ内動作時間にわたり実行されたＤタスクの「ＴＳＳ休止度」は“０”のままであり、Ｄタスクの「ＴＳＳ優先度」は“２０”のままである。このため、ＤタスクはＥタスクより優先順位が高く、第２周期においても、Ｄタスクには１ＴＳ内動作時間にわたり実行権が付与されるが、Ｅタスクには実行権が付与されない（図１２参照）。
【０１５４】
そして、以後、Ｅタスクの「ＴＳＳ優先度」がＤタスクの「ＴＳＳ優先度」を越えるまでＥタスクは動作せず、第２周期以降のＴＳの開始時点では、Ｅタスクの「ＴＳＳ優先度」は、“１０”，“１４”，“１８”，“２１”と増加し、第６周期の開始時点で２０を越える。一方、Ｄタスクの「ＴＳＳ優先度」は、第２周期以降も“２０”のまま変わらない。このため、図１３（ｃ）に記載されているように、Ｅタスクは、第６周期の開始時点において初めてＥタスクの「ＴＳＳ優先度」がＤタスクの「ＴＳＳ優先度」を越え、第６周期では、Ｅタスクが１ＴＳ内動作時間にわたり動作した後にＤタスクが動作する。
【０１５５】
そして、第７周期の開始時点では、図１３（ｄ）に記載されているように、Ｄタスクの「ＴＳＳ優先度」は“２５”に増加すると共に、Ｅタスクの「ＴＳＳ優先度」は“１９”に減少する。このため、第７周期では、Ｄタスクは１ＴＳ内動作時間にわたり実行権が付与されるが、Ｅタスクには実行権が付与されない。
【０１５６】
以後、新たなＴＳが到来する度にＤ，Ｅタスクの「ＴＳＳ優先度」が増加或いは減少し、各ＴＳにおけるＴＳＳにおいて、これらのタスクのうち、「ＴＳＳ優先度」が示す値が大きいタスクから順に実行権が付与される。
【０１５７】
（４）タスクの追加，削除にいて
次に、スケジューリングの対象となるタスクの追加や削除が行われた場合における、各タスクの実行タイミングについて、図１４を用いて説明する。
【０１５８】
当初、Ｂ〜Ｅタスクがスケジューリングの対象となっており、タスク管理テーブルにはＢ〜Ｅタスクが登録されているとする（図１４（ａ−１）参照）。このとき、ＴＳはＢタスクの最長動作周期である２ｍｓとして設定され、Ｂ〜Ｅタスクの「１ＴＳ内動作時間」は、“０．６ｍｓ”，“０．４ｍｓ”，“０．２ｍｓ”，“０．１ｍｓ”に設定されている。そして、図１４（ｂ）のタイミングチャートの第一サイクル，第二サイクルにおけるタイミングで、Ｂ〜Ｅタスクが実行される。
【０１５９】
ここで、第二サイクルにおいてＤＳの対象のタスクであるＡタスクの追加要求が発生し、タスク追加処理が実行され、Ａタスクに対応するレコードがタスク管理テーブルの最後尾に追加されたとする。そうすると、第二サイクルが終了した際にスケジューラ初期化処理が実行され、タスク管理テーブルが図１４（ａ−２）に記載されているように更新される。このとき、ＴＳがＡタスクの最長動作周期である１ｍｓとして設定され、Ｂ〜Ｅタスク，Ａタスクの「１ＴＳ内動作時間」は、“０．３ｍｓ”，“０．２ｍｓ”，“０．２ｍｓ”，“０．１ｍｓ”，“０．１ｍｓ”に設定され、Ｂ，Ｃ，Ａタスクの「ＤＳ優先度」は、“２”，“３”，“１”に設定される。そして、図１４（ｂ）のタイミングチャートの第三，第四サイクルにおけるタイミングで、Ａ〜Ｅタスクが動作する。
【０１６０】
また、第四サイクルにおいて、Ａタスクの削除要求が発生し、タスク削除処理が実行されるとする。そうすると、第四サイクルが終了した際にスケジューラ初期化処理が実行され、Ａタスクに対応するレコードがタスク管理テーブルから削除されて、タスク管理テーブルが、再び、図１４（ａ−１）に記載されているように更新される（このとき、ＴＳは、Ｂタスクの最長動作周期である２ｍｓとして設定される）。そして、図１４（ｂ）のタイミングチャートの第五サイクルにおけるタイミングで、Ｂ〜Ｅタスクが動作する。
【０１６１】
［効果］
第一実施形態の制御プログラム１における制御管理部６０のスケジューリング部６１によれば、ＤＳの対象となるＡ〜Ｃタスクについては、各ＴＳにおいて必ず１ＴＳ内動作時間にわたり動作させることができ、一定周期あたりの動作時間を保証することができる。また、ＴＳＳの対象となるＤ，Ｅタスクについては、Ａ〜Ｃタスクの動作が全て完了した後、次の基準サイクルが到来するまでの期間に順次実行権が付与される。したがって、Ａ〜Ｅタスクを並行して動作させつつ、Ａ〜Ｃタスクについてのリアルタイム性を確保することができる。
【０１６２】
［第二実施形態］
［構成の説明］
次に、第二実施形態の車載装置について説明する。
【０１６３】
第二実施形態の車載装置は、第一実施形態と同様のＡＣＣ機能と、ＬＫＡ機能と、周辺監視機能とを有している。図１５には、第一実施形態と同様に構成された第二実施形態の車載装置８００の構成と、該車載装置８００に搭載され、ＣＰＵ８１０により実行される制御プログラム７００の構成を示すブロック図が記載されている。なお、制御プログラム７００は、物理デバイス８２０における、フラッシュメモリ等の記憶保持動作が不要なデバイスから構成された記憶部（図示なし）に記憶されている。
【０１６４】
制御プログラム７００は、第一実施形態と同様のＡタスク７１０，Ｂタスク７２０，Ｃタスク７３０を有していると共に、Ａ〜Ｃタスク７１０〜７３０を稼動させる制御管理部７４０を有している。なお、Ａ〜Ｃタスク７１０〜７３０は、第一実施形態と同様に、仮想マシンとして構成されていても良いし、対応する機能を実現するための単一の、或いは複数の処理単位（つまり、複数のスレッド）からなるプログラムとして構成されていても良い。
【０１６５】
また、制御管理部７４０は、Ａ〜Ｃタスク７１０〜７３０に対し順次実行権を付与し、これらのタスクのスケジューリングを行うスケジューリング部７４１と、第一実施形態と同様に構成されたデバイス制御部７４２と、を有している。
【０１６６】
また、スケジューリング部７４１は、スケジューリングの対象となるタスクの追加や削除を行うタスク追加・削除受付部７４１ａと、各タスクに対し実行権を付与するスケジューラ設定部７４１ｂと、実行権が付与されているタスクを動作させるスケジューラ実行部７４１ｃと、を有する。
【０１６７】
なお、上述した構成の仮想マシンとして構成されたタスクに実行権が付与された場合には、仮想マシンでは、ＯＳによるスレッドのスケジューリングが行われ、スレッドが並行して稼動される。また、複数のスレッドから構成されているタスクに実行権が付与された場合においても、該タスクでは、同様にしてＯＳによる該スレッドのスケジューリングが行われる。
【０１６８】
［動作の説明］
（１）概要について
スケジューリング部７４１のスケジューラ設定部７４１ｂは、周期的に到来するタイミングを生成して基準サイクルとすると共に、後述するタスク管理テーブルに基づき、該基準サイクルの１周期であるＴＳにおいて、Ａ〜Ｃタスク７１０〜７３０に順次実行権を付与することで、これらのタスクを並行して動作させる。
【０１６９】
（２）タスク管理テーブルについて
次に、上述のタスク管理テーブルについて説明する。図１５（ｂ）には、タスク管理テーブルの一例が記載されている。このタスク管理テーブルは、スケジューリング部７４１のスケジューラ設定部７４１ｂが有している。
【０１７０】
このタスク管理テーブルは、第一実施形態のタスク管理テーブルと同様に、タスクの名称を示す項目である「名称」と、第一実施形態と同様の最長動作周期，必要動作時間，１ＴＳ内動作時間を示す項目である「最長動作周期」，「必要動作時間」，「１ＴＳ内動作時間」を有する。また、これらに加え、各タスクに実行権を付与する優先順位を示す項目である「優先度」を有する。
【０１７１】
（３）スケジューリングについて
次に、タスク管理テーブルに登録されているタスクのスケジューリングについて説明する。
【０１７２】
スケジューラ設定部７４１ｂは、タスク管理テーブルに登録されているタスクの最長動作周期のうち最短のものをＴＳとして設定すると共に、各タスクについて、最長動作時間及び必要動作時間に基づき１ＴＳ内動作時間を算出し（詳細は後述する）、タスク管理テーブルに設定する。そして、スケジューラ設定部７４１ｂは、各ＴＳにおいて、タスク管理テーブルに基づき、優先度の高いタスクから順に各タスクの１ＴＳ内動作時間にわたり実行権を付与することで、各タスクのスケジューリングを行うのである。
【０１７３】
（４）スケジューラ初期化処理について
次に、ＴＳや、各タスクに実行権を割り当てる際に用いられるタスク管理テーブルの「１ＴＳ内動作時間」等を設定する処理であるスケジューラ初期化処理について、図１６に記載のフローチャートを用いて説明する。本処理は、制御プログラム７００が起動された場合や、スケジューリングの対象となるタスクの追加或いは削除が行われた場合に、スケジューラ設定部７４１ｂにて実行される処理である。
【０１７４】
なお、制御プログラム７００の起動時に本処理が実行される場合には、タスク管理テーブルは、スケジューリングの対象となるタスクのレコードが登録された状態となっており、これらのレコードは、「名称」，「最長動作周期」，「必要動作時間」が設定されている。
【０１７５】
Ｓ９０５では、スケジューラ設定部７４１ｂは、タスク管理テーブルを参照し、最も短い「最長動作周期」をＴＳとして設定し、Ｓ９１０に処理を移行する。
Ｓ９１０では、スケジューラ設定部７４１ｂは、サブルーチンである１ＴＳ内動作時間設定処理をコールし、タスク管理テーブルに登録されている各タスクの１ＴＳ内動作時間を算出する。そして、Ｓ９１５に処理を移行する。
【０１７６】
Ｓ９１５では、スケジューラ設定部７４１ｂは、タスク管理テーブルの「優先度」を設定する。具体的には、以下のルールに従い「優先度」が設定される。
（ａ）最長動作周期が短いタスクから順に高い優先度を設定する。
（ｂ）最長動作周期が同じ場合は、必要動作時間が長いタスクから順に高い優先度を設定する。
（ｃ）最長動作周期，必要動作時間が同一である場合には、タスク管理テーブルにおける先頭側のレコードに対応するタスクから順に高い優先度を設定する。
【０１７７】
「優先度」の設定が終了すると、Ｓ９２０に処理を移行する。
Ｓ９２０では、スケジューラ設定部７４１ｂは、スケジューラ初期化フラグをＯＦＦし、本処理を終了する。
【０１７８】
（５）１ＴＳ内動作時間設定処理について
次に、各タスクの１ＴＳ内動作時間を設定するサブルーチンである１ＴＳ内動作時間処理について、図１７に記載のフローチャートを用いて説明する。
【０１７９】
Ｓ１００５では、スケジューラ設定部７４１ｂは、以下の式を用いて、タスク管理テーブルに登録されている各タスクの最短動作時間を算出する。
最短動作時間＝（必要動作時間／最長動作時間）×ＴＳ
また、タスク管理テーブルに登録されている各タスクについて、以下の式を用いて仮動作時間を算出する。
【０１８０】
仮動作時間＝（最長動作周期／タスク管理テーブルに登録されているタスクの最長動作周期の総和）×ＴＳ
なお、このとき、例えば、ＴＳの数十分の１程度の時間をマージンとして設定し、最長動作周期を、上記最長動作周期の総和にマージンを加えた時間で除算しても良い。
【０１８１】
そして、Ｓ１０１０に処理を移行する。
Ｓ１０１０では、スケジューラ設定部７４１ｂは、仮動作時間が最短動作時間を下回るタスクを時間不足タスクとし、タスク管理テーブルに登録されている時間不足タスクのうち、対応するレコードが最も先頭側に配置された時間不足タスクを特定する。そして、この時間不足タスクについて、仮動作時間と最短動作時間との差分である不足時間を算出し、Ｓ１０１５に処理を移行する。
【０１８２】
Ｓ１０１５では、スケジューラ設定部７４１ｂは、Ｓ１０１０において時間不足タスクを特定できたか否かを判定する。そして、肯定判定が得られた場合（Ｓ１０１５：Ｙｅｓ）にはＳ１０２０に、否定判定が得られた場合（Ｓ１０１５：Ｎｏ）にはＳ１０５０に処理を移行する。
【０１８３】
Ｓ１０２０では、スケジューラ設定部７４１ｂは、仮動作時間が最短動作時間を上回るタスクを時間余剰タスクとし、タスク管理テーブルに登録されている時間余剰タスクのうち、対応するレコードが最も先頭側に配置された時間余剰タスクを特定すると共に、この時間余剰タスクについて、仮動作時間と最短動作時間との差分である余剰時間を算出する。そして、Ｓ１０２５に処理を移行する。
【０１８４】
Ｓ１０２５では、スケジューラ設定部７４１ｂは、Ｓ１０１０にて特定した時間不足タスクの不足時間の長さと、Ｓ１０２０にて特定した時間余剰タスクの余剰時間の長さとを比較する。そして、余剰時間が不足時間以上である場合には（Ｓ１０２５：Ｙｅｓ）、Ｓ１０３０に処理を移行し、余剰時間が不足時間未満である場合には（Ｓ１０２５：Ｎｏ）、Ｓ１０４０に処理を移行する。
【０１８５】
Ｓ１０３０では、スケジューラ設定部７４１ｂは、Ｓ１０１０にて特定した時間不足タスクについて、不足時間を補正時間とし、仮動作時間に補正時間を加算した時間を、新たに仮動作時間として設定する。なお、このとき、Ｓ１０２０にて特定した時間余剰タスクの余剰時間が不足時間を上回っている場合であれば、不足時間以上、且つ、余剰時間以下の時間を補正時間としても良い。そして、Ｓ１０３５に処理を移行する。
【０１８６】
Ｓ１０３５では、スケジューラ設定部７４１ｂは、Ｓ１０２０にて特定した時間余剰タスクについて、仮動作時間からＳ１０３０にて設定した補正時間を減算した時間を新たに仮動作時間とし、Ｓ１０１０に処理を移行する。
【０１８７】
Ｓ１０４０では、スケジューラ設定部７４１ｂは、Ｓ１０２０にて特定した時間余剰タスクの余剰時間を補正時間とし、Ｓ１０１０にて特定した時間不足タスクについて、仮動作時間に補正時間を加算した時間を、新たに仮動作時間として設定する。そして、Ｓ１０４５に処理を移行する。
【０１８８】
Ｓ１０４５では、スケジューラ設定部７４１ｂは、Ｓ１０２０にて特定した時間余剰タスクについて、仮動作時間からＳ１０４０にて設定した補正時間を減算した時間を新たに仮動作時間とし、Ｓ１０２０に処理を移行する。
【０１８９】
Ｓ１０１５において時間不足タスクを特定できなかった場合に移行するＳ１０５０では、スケジューラ設定部７４１ｂは、タスク管理テーブルに登録されている全てのタスクについて、仮動作時間を１ＴＳ内動作時間とし、タスク管理テーブルの「１ＴＳ内動作時間」を設定する。そして、本処理を終了する。
【０１９０】
（５）タスク追加処理について
次に、スケジューリングの対象となるタスクを新たに追加する処理であるタスク追加処理について、図１８に記載のフローチャートを用いて説明する。本処理は、例えば、ユーザから車載装置１００の記憶部に保存されていたタスクの追加が要求された場合や、第一実施形態で述べたように新たなタスクがダウンロードされた際等に、タスク追加・削除受付部７４１ａにて実行される処理である。
【０１９１】
Ｓ１１０５では、タスク追加・削除受付部７４１ａは、新たなタスクの追加が可能かどうかを判定し、肯定判定の場合には（Ｓ１１０５：Ｙｅｓ）、Ｓ１１１０に処理を移行すると共に、否定判定の場合には（Ｓ１１０５：Ｎｏ）、Ｓ１１２０に処理を移行する。
【０１９２】
具体的には、タスク管理テーブルを参照し、各タスクの「最長動作周期」，「必要動作時間」を特定すると共に、必要動作時間を最長動作周期で除算した値を算出し、さらにこの値の総和を算出する。そして、該総和が１以下である場合にはタスクの追加が可能と判定すると共に、該総和が１より大きい場合には、タスクの追加が不可能と判定する。
【０１９３】
Ｓ１１１０では、タスク追加・削除受付部７４１ａは、新たに追加するタスクに対応するレコードをタスク管理テーブルの最後尾に追加すると共に、該レコードに対応する各項目を設定し、Ｓ１１１５に処理を移行する。
【０１９４】
すなわち、該タスクを構成するバイナリデータに基づき、該タスクの名称を特定し、追加したレコードの「名称」に設定する。そして、該バイナリデータに基づき最長動作周期，必要動作時間を特定し、追加したレコードの「最長動作周期」，「必要動作時間」を設定する。
【０１９５】
Ｓ１１１５では、タスク追加・削除受付部７４１ａは、スケジューラ初期化フラグをＯＮし、本処理を終了する。
タスクの追加が不可能である場合に移行するＳ１１２０では、タスク追加・削除受付部７４１ａは、図示しない表示装置等を介してタスクの追加が不可能である旨を報知し、本処理を終了する。
【０１９６】
（６）タスク削除処理，定期見直し処理について
第二実施形態では、例えば、ユーザの操作や外部からの信号等に応じて、タスク追加・削除受付部７４１ａにより、第一実施形態と同様のタスク削除処理が行われる。また、基準サイクルに係るタイミングが到来した際に、スケジューラ設定部７４１ｂにより、第一実施形態と同様の定期見直し処理が行われる。なお、タスク削除処理，定期見直し処理の内容については、説明を省略する。
【０１９７】
［効果］
第二実施形態の制御プログラム７００における制御管理部７４０のスケジューリング部７４１では、最長動作周期を最長動作周期総和時間で除算した値にＴＳを乗算した時間を各タスクの仮動作時間とするため、余り時間を生じさせること無くＴＳを分割して各タスクに割り振ることができる。そして、仮動作時間が最短動作時間を上回るタスクから仮動作時間が最短動作時間を下回るタスクに仮動作時間を分けることにより、各タスクに最短動作時間以上の時間が割り当てられる。このため、いずれのタスクも実行されない空白期間を生じさせること無く、ＴＳを各タスクの動作時間として割り振ることができ、より効率良くタスクを稼動させることができる。
【０１９８】
［他の実施形態］
（１）第一実施形態のＴＳＳでは、ＤＳの終了後からＴＳの終了までの期間に、ＴＳＳの対象の各タスクに１回ずつ実行権が付与されるが、該期間においてこれらのタスクに対し繰り返し実行権を付与し、ＴＳが終了するまでＴＳＳの対象のタスクを常時動作させても良い。こうすることにより、各ＴＳにおいていずれのタスクも動作していない空白期間が生じてしまうことを防ぐことができ、より効率良くタスクを動作させることができる。
【０１９９】
（２）また、第一，第二実施形態では、仮想マシンにおけるＯＳやタスクは、再現する機能に係る他の装置にて稼動していたプログラムをバイナリコードの状態で移植したものとなっている。しかしながら、これに限定されるわけではなく、例えば、上記ＯＳ等は、他の装置にて稼動していたプログラムをソースコードの状態で移植したものに基づき生成されたものであっても良い。このような場合であっても、同様の効果を得ることができる。
【０２００】
（３）第二実施形態では、必要動作時間と最長動作周期の総和とを用いて算出された仮動作時間に基づき１ＴＳ内動作時間を設定することにより、各ＴＳにおいて、いずれのタスクも動作していない空白期間が生じてしまうことを防いでいる。
【０２０１】
しかしながら、スケジューラ設定部７４１ｂは、以下の（ａ）〜（ｃ）のステップに記載されているようにして１ＴＳ内動作時間を設定しても良い。
（ａ）タスク管理テーブルに登録されているタスクの最短動作時間を算出する。
（ｂ）各タスクの最短動作時間の総和とＴＳとの差分である余り時間を算出する。なお、このとき、例えば、ＴＳの数十分の１程度の時間をマージンとして設定し、各タスクの最短動作時間の総和とＴＳとの差分からマージンを減じた時間を、余り時間としても良い。
（ｃ）余り時間を、例えば、タスク管理テーブルに登録されているタスクの数で均等に分割し、各タスクについて、分割した時間と最短動作時間とを加算した時間を１ＴＳ内動作時間として設定する。
【０２０２】
なお、余り時間を分割する割合を、例えば、各タスクの優先度に応じて設定し、優先度の高いタスクにより多くの時間が割り当てられるようにしても良い。また、例えば、タスク管理テーブルに登録されているタスクのうち、優先度が最も高いタスクに余り時間を全て割り当てても良い。
【０２０３】
このような構成を有する場合であっても、各ＴＳを有効に活用し、効率良くタスクを動作させることができる。
（４）また、第一実施形態では、ＴＳＳの対象のタスクが１ＴＳ内動作時間にわたり動作したか否かに応じてＴＳＳ休止度が変更され、ＴＳＳ固定優先度とＴＳＳ休止度との和によりＴＳＳ優先度が算出されるが、ＴＳＳ優先度の算出方法は、これに限定されることは無い。例えば、ＴＳＳ休止度を更新するのではなく、ＴＳＳの対象のタスクが１ＴＳ内動作時間にわたり動作したか否かに応じてＴＳＳ優先度を増加或いは減少させても良い。このような場合であっても、同様の効果を得ることができる。
【０２０４】
［特許請求の範囲との対応］
上記実施形態の説明で用いた用語と、特許請求の範囲の記載に用いた用語との対応を示す。
【０２０５】
１ＴＳ内動作時間が稼働時間に、ＤＳの対象のタスクが時間保証タスクに、ＴＳＳの対象のタスクが非時間保証タスクに、ＤＳ優先度が第一優先度に、ＴＳＳ優先度が第二優先度に相当する。
【０２０６】
また、実行タスク特定処理のＳ２１５及びＳ２２５が特定処理，特定ステップに、Ｓ２４５が付与ステップに、Ｓ２４０が剥奪ステップに相当する。
実行完了処理のＳ３０５が完了ステップに、放棄処理のＳ３１５が放棄ステップに、イベント待ち処理のＳ３２５が除外ステップに、イベント発生処理のＳ３３５が復帰ステップに相当する。
【０２０７】
また、ＴＳ経過処理のＳ４１５，Ｓ４３０，Ｓ４３５が更新ステップに相当する。
また、スケジューラ初期化処理のＳ５０５がタイムスライス設定ステップに、Ｓ５１０が稼働時間設定ステップに相当する。
【０２０８】
また、タスク追加処理のＳ６１０が判定ステップに、Ｓ６１５が追加ステップに相当する。
また、タスク削除処理のＳ６４０が削除ステップに相当する。
【符号の説明】
【０２０９】
１…制御プログラム、１０…Ａタスク、１１…ＡＰＬ、１１ａ…第一スレッド、１１ｂ…第二スレッド、１２…ＯＳ、１３…仮想デバイス、１４…仮想ＣＰＵ、２０…Ｂタスク、３０…Ｃタスク、４０…Ｄタスク、５０…Ｅタスク、６０…制御管理部、６１…スケジューリング部、６１ａ…タスク状態受付部、６１ｂ…スケジューラ設定部、６１ｃ…スケジューラ実行部、６１ｄ…タスク追加・削除受付部、６２…デバイス制御部、１００…車載装置、１１０…ＣＰＵ、１２０…物理デバイス、１５０…外部サーバ、７００…制御プログラム、７１０…Ａタスク、７２０…Ｂタスク、７３０…Ｃタスク、７４０…制御管理部、７４１…スケジューリング部、７４１ａ…タスク追加・削除受付部、７４１ｂ…スケジューラ設定部、７４１ｃ…スケジューラ実行部、７４２…デバイス制御部、８００…車載装置、８１０…ＣＰＵ、８２０…物理デバイス。
【図１】
0005423635.tif 000002
【図２】
0005423635.tif 000003
【図３】
0005423635.tif 000004
【図４】
0005423635.tif 000005
【図５】
0005423635.tif 000006
【図６】
0005423635.tif 000007
【図７】
0005423635.tif 000008
【図８】
0005423635.tif 000009
【図９】
0005423635.tif 000010
【図１０】
0005423635.tif 000011
【図１１】
0005423635.tif 000012
【図１２】
0005423635.tif 000013
【図１３】
0005423635.tif 000014
【図１４】
0005423635.tif 000015
【図１５】
0005423635.tif 000016
【図１６】
0005423635.tif 000017
【図１７】
0005423635.tif 000018
【図１８】
0005423635.tif 000019