(57)【要約】【課題】実行する必要性が低いタスクの実行を禁止することができる情報処理装置を提供すること。【解決手段】複数のタスクの実行タイミングが競合した場合、優先度順に実行する高いタスクをリソースに割り当てる情報処理装置１００において、周期起動タスク、及び、前記周期起動タスクよりも優先度の高い競合タスクが共有するデータ毎に、周期起動タスクと前記競合タスクの組が予め登録されたタスク登録テーブル３３と、前記周期起動タスクと、前記周期起動タスクに対応づけて前記タスク登録テーブルに登録された前記競合タスクの実行タイミングが競合した場合、前記競合タスクを優先して実行し、競合した周期における前記周期起動タスクの実行を禁止するスケジューリング制御手段３２と、を有することを特徴とする。【選択図】図２
2013152636.tif 000002
【特許請求の範囲】
【請求項１】
複数のタスクの実行タイミングが競合した場合、優先度順にタスクをリソースに割り当てる情報処理装置において、
周期起動タスク、及び、前記周期起動タスクよりも優先度の高い競合タスクが共有するデータ毎に、周期起動タスクと前記競合タスクの組が予め登録されたタスク登録テーブルと、
前記周期起動タスクと、前記周期起動タスクに対応づけて前記タスク登録テーブルに登録された前記競合タスクの実行タイミングが競合した場合、前記競合タスクを優先して実行し、競合した周期における前記周期起動タスクの実行を禁止するスケジューリング制御手段と、
を有することを特徴とする情報処理装置。
【請求項２】
前記周期起動タスクの実行が禁止されずに連続して実行された回数、及び、前記回数の下限値が登録された起動管理テーブルを有し、
前記スケジューリング制御手段は、前記周期起動タスクに対応づけて前記タスク登録テーブルに登録された前記競合タスクの実行タイミングが競合した場合、前記回数が前記下限値より大きい場合にのみ、競合した周期における前記周期起動タスクの実行を禁止する、
ことを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記周期起動タスクが生成した過去のデータが時系列に登録されたデータ登録テーブルと、
前記周期起動タスクが実行された場合に、前記周期起動タスクが生成したデータを前記データ登録テーブルに書き込むデータ書き込み手段と、を有し、
前記スケジューリング制御手段は、前記周期起動タスクと、前記周期起動タスクに対応づけて前記タスク登録テーブルに登録された前記競合タスクの実行タイミングが競合した場合、前記データ登録テーブルに登録された過去の１つ以上のデータから予測された予測値を、前記競合タスクに提供し、前記競合タスクを優先して実行する、
ことを特徴とする請求項２記載の情報処理装置。
【請求項４】
前記データ書き込み手段は、前記周期起動タスクが実行された周期情報を前記データ登録テーブルに書き込み、
前記起動管理テーブルに前記周期起動タスクの起動周期の上限値が登録されており、
前記スケジューリング制御手段は、前記データ登録テーブルの前記周期情報が前記上限値を上回っている場合、前記回数が前記下限値以下でも、競合した周期における前記周期起動タスクの実行を禁止する、
ことを特徴とする請求項３記載の情報処理装置。
【請求項５】
前記スケジューリング制御手段は、競合した周期における前記周期起動タスクの実行を禁止した回数を前記起動管理テーブルに記録する、
ことを特徴とする請求項１〜４いずれか１項記載の情報処理装置。
【請求項６】
前記スケジューリング制御手段は、前記周期起動タスクと、前記周期起動タスクに対応づけて前記タスク登録テーブルに登録された前記競合タスクの実行タイミングが競合した場合、前記データ登録テーブルにデータの補間指示がある場合にのみ、前記予測値を前記競合タスクに提供する、
ことを特徴とする請求項３記載の情報処理装置。
【請求項７】
前記周期起動タスクはタイマにより周期的に起床され、周辺回路から取得したデータに演算を施しメモリ上のデータを更新するタスクであり、前記競合タスクはセンサが検出したイベント信号により起床され、メモリからデータを読み出し装置を制御するタスクである、
ことを特徴とする請求項１〜６いずれか１項記載の情報処理装置。
【請求項８】
複数のタスクの実行タイミングが競合した場合、優先度順にタスクをリソースに割り当てる情報処理装置のタスクスケジューリング方法において、
スケジューリング制御手段が、周期起動タスク、及び、前記周期起動タスクよりも優先度の高い競合タスクが共有するデータ毎に、周期起動タスクと前記競合タスクの組が予め登録されたタスク登録テーブルを参照して、
前記周期起動タスクと、前記周期起動タスクに対応づけて前記タスク登録テーブルに登録された前記競合タスクの実行タイミングが競合した場合、前記競合タスクを優先して実行し、競合した周期における前記周期起動タスクの実行を禁止する、
ことを特徴とするタスクスケジューリング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のタスクの実行タイミングが競合した場合、優先度順に実行する高いタスクをリソースに割り当てる情報処理装置に関する。
【背景技術】
【０００２】
１つのマイコン上で複数のタスクやスレッド（以下、単にタスクという）がＣＰＵへ割り当てられ実行されるマルチタスク処理が知られている。この割り当て制御は主にＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）のスケジューラなどにより行われる。タスクには優先度の記述があり、スケジューラは原則的に優先度の高いタスクから先にＣＰＵへ割り当てる。ここで、スケジューラのタスクの割り当て方法には、ノンプリエンプティブとプリエンプティブがある。ノンプリエンプティブな割り当てでは、すでにＣＰＵが実行中のタスクに対し、実行待ち状態のタスクが発生した場合、スケジューラは実行中のタスクの終了を待つ。プリエンプティブな割り当てでは、実行中のタスクの優先度よりも実行待ち状態のタスクの優先度の方が高い場合に、スケジューラは実行中のタスクを強制的に終了して実行待ち状態のタスクをＣＰＵに割り当てる。プリエンプティブなマルチタスクでは、優先度の関係を維持できるのでリアルタイム性を保証しやすくできる。
【０００３】
しかしながら、プリエンプティブなマルチタスクでは、タスク切り替えのために必要なコンテキストの切り替え処理がオーバーヘッドとなる場合がある。そこで、従来からオーバーヘッドを低減する技術が考えられている（例えば、特許文献１参照。）。特許文献１には、競合する複数の周期駆動タスク用に専用のレジスタを用意しておき、タスクが競合した際、専用レジスタに格納された高優先度のタスク情報によりこのタスクをＣＰＵに割り当てる周期駆動タスク実行装置が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−１０２５６７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１ではオーバーヘッドを低減できる可能性があるが、優先度の低いタスクが、結局、優先度の高いタスクの実行終了後に実行されているので、ＣＰＵ負荷を増大させているという問題がある。また、特許文献１では専用レジスタが必要になるという問題もある。
【０００６】
図１は、優先度の低いタスクの実行による負荷の増大を説明する図の一例である。タスクＡは例えばタイマ割込みで定期的に実行されるタスクであり、タスクＢは例えばイベント発生により実行されるタスクである。ここではタスクＢの優先度＞タスクＡの優先度であるとする。なお、ＩＳＲ（Interrupt  Service  Routine）は割り込み処理を行うサービスで、割込みに対応したタスクを実行する処理などを行う。割り込みハンドラと呼ばれる場合もある。
【０００７】
タスクＡは例えばセンサからのデータ取得、演算、共有メモリへの書き出しを行う。タスクＢは共有メモリからデータを読み出し、車載装置を制御する。このように、タスクＡとタスクＢにはデータ依存性がある。タスクＢとしてはタスクＡが更新した（新しい）データを読み出すことが好ましい。
【０００８】
タスクＢの優先度＞タスクＡの優先度なので、２回目の周期のように、実行タイミングが競合した場合、スケジューラはタスクＡよりもタスクＢを優先してＣＰＵに割り当てる（図のマルの中）。したがって、この周期ではタスクＡは共有メモリのデータを更新できないことになり、タスクＢは１周期前のデータを共有メモリから読み出す。そして、タスクＢの終了後、スケジューラはタスクＡをＣＰＵに割り当てるので、タスクＡは共有メモリのデータを更新する。
【０００９】
タスクＡの周期は変わらないので、タスクＡは次の周期（図の３回目の周期）が到来すると、共有メモリのデータを更新する。したがって、データの更新周期が短くなり、タスクＢが実行された後に更新されたデータは、タスクＢに読み出されることなく更新される。このため、タスクＡのＣＰＵへの割り当て（２回目の周期の割り当て）が無駄になり、ＣＰＵ負荷が無駄に増大しているという問題がある。
【００１０】
本発明は,上記課題に鑑み、実行する必要性が低いタスクの実行を禁止することができる情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明は、複数のタスクの実行タイミングが競合した場合、優先度順にタスクをリソースに割り当てる情報処理装置において、周期起動タスク、及び、前記周期起動タスクよりも優先度の高い競合タスクが共有するデータ毎に、周期起動タスクと前記競合タスクの組が予め登録されたタスク登録テーブルと、前記周期起動タスクと、前記周期起動タスクに対応づけて前記タスク登録テーブルに登録された前記競合タスクの実行タイミングが競合した場合、前記競合タスクを優先して実行し、競合した周期における前記周期起動タスクの実行を禁止するスケジューリング制御手段と、を有することを特徴とする。
【発明の効果】
【００１２】
実行する必要性が低いタスクの実行を禁止することができる情報処理装置を提供することができる。
【図面の簡単な説明】
【００１３】
【図１】優先度の低いタスクの実行による負荷の増大を説明する図の一例である。
【図２】情報処理装置によるタスク割り当てを説明する図の一例である。
【図３】車両に搭載される情報処理装置のハードウェア構成図の一例である。
【図４】タスクのスケジューリング説明する図の一例である。
【図５】タスクの処理とその競合を説明する図の一例である。
【図６】タスクＡとタスクＢが競合するタイミングについて説明する図の一例である。
【図７】スケジューラの機能ブロック図とタスク排他登録テーブルの一例を示す図である。
【図８】スケジューリング制御部が、優先度の低いタスクの実行を禁止する手順を示すフローチャート図の一例である。
【図９】スケジューラの機能ブロック図、タスク排他登録テーブル、及び、タスク起動管理データ記録部の一例を示す図である（実施例２）。
【図１０】スケジューリング制御部が、優先度の低いタスクの実行を禁止する手順を示すフローチャート図の一例である（実施例２）。
【図１１】スケジューラの機能ブロック図、タスク排他登録テーブル、タスク起動管理データ記録部、及び、補間データ記録部の一例を示す図である（実施例３）。
【図１２】スケジューリング制御部が、優先度の低いタスクの実行を禁止する手順を示すフローチャート図の一例である（実施例３）。
【図１３】タスクＡと補間データ制御部の動作手順を示すフローチャート図の一例である。
【図１４】スケジューラの機能ブロック図、タスク排他登録テーブル、タスク起動管理データ記録部、及び、補間データ記録部の一例を示す図である（実施例４）。
【図１５】スケジューリング制御部が、優先度の低いタスクの実行を禁止する手順を示すフローチャート図の一例である（実施例４）。
【発明を実施するための形態】
【００１４】
以下、本発明を実施するための形態について図面を参照しながら説明する。
【実施例１】
【００１５】
図２は、本実施形態の情報処理装置１００によるタスク割り当てを説明する図の一例である。スケジューリング制御部３２は後述するスケジューラやＯＳの機能であり、ＣＰＵへのタスクの割り当てを制御する。
【００１６】
タスクＡはセンサからのデータ取得、演算、共有メモリへの書き出しを行う。タスクＢは共有メモリからデータを読み出し車載装置を制御する。このように、タスクＡとタスクＢにはデータ依存性がある。タスクＡは例えばタイマ割込みで定期的に実行されるタスクである。タスクＢは例えばイベント発生により実行されるタスクとするが、タスクＢも定周期で実行されるタスクであってもよい。
【００１７】
スケジューリング制御部３２は、タスクＡとタスクＢの実行タイミングが競合した場合排他登録テーブルを参照して、タスクＡの割り当てを制御する必要があるか否かを判定する。排他登録テーブルには、互いにデータ依存性のあるタスクが対応づけて登録されている。図の例では、競合タスクＢに対し制御対象としてタスクＡが登録されている。制御対象のタスクは競合タスクと競合すると、実行が禁止されるタスクである。
【００１８】
スケジューリング制御部３２は、タスクＡとタスクＢの実行タイミングが同時期に重なると、排他登録テーブルを参照して、タスクＡを実行する必要がないと判定する。そして、スケジューリング制御部３２は、タスクＡの実行を禁止する。すなわち、図示するように、タスクＡは定周期の実行タイミングが到来した場合に、競合した周期では実行されない。したがって、従来では、タスクＡはタスクＢの後に実行されていたが、本実施形態では実行されないのでＣＰＵなどの資源を無駄に使用することを防止できる。
【００１９】
〔構成例〕
図３は、車両に搭載される情報処理装置１００のハードウェア構成図の一例である。情報処理装置１００は、ＥＣＵ（Electronic  Control  Unit）に搭載されることが想定されているがその用途は車両に限定されない。車載されるＥＣＵには、その主要な機能により、エンジンＥＣＵ、ブレーキＥＣＵ、ボディＥＣＵ、ナビゲーションＥＣＵ（ＡＶ・情報処理ＥＣＵ）、ゲートウェイＥＣＵ等の種類がある。本実施例の情報処理装置１００はＥＣＵの機能の違いに影響されず搭載されることが可能である。また、複数の機能が１つに統合されたＥＣＵに情報処理装置１００を搭載してもよい。
【００２０】
情報処理装置１００は、メインバス２１に接続されたＣＰＵ１１、ＲＡＭ１２、ＲＯＭ１３、ＩＮＴＣ１４、ＷＤＴ１５、ＤＭＡＣ１６、並びに、ブリッジ１７を有し、ブリッジ１７には周辺バス２２を介してＡＤＣ（Analog  to  Digital  Converter）１９及びＣＡＮコントローラ２０が接続されている。
【００２１】
ＣＰＵ１１は１つ以上のコア１〜ｎを有する。すなわち、各コア１〜ｎは一般的な演算機能（例えば、ＡＬＵ等の演算装置、命令バッファ、命令デコーダ、レジスタセット等）を有している。１つのチップに複数のコア１〜ｎを有するＣＰＵ１１でなく、複数のＣＰＵ１１が独立にメインバス２１に接続されていてもよい。
【００２２】
ＲＯＭ１３はフラッシュメモリなどの不揮発メモリであり、ＣＰＵ１１が実行するプログラム３０や初期値、パラメータ等を記憶している。
【００２３】
ＩＮＴＣ１４はタイマなど、各種の割込み要求に応じてフラグがセットされる割込みレジスタを有している。ＩＮＴＣ１４は、タイマやＩ／Ｏ１８などの受信割込み、その他の割り込み端子を介して周辺機器から入力された割り込み要求を、周辺機器の優先順位に基づき調停してＣＰＵ１１に通知する。これによりＣＰＵ１１は、割り込みした周辺機器に応じて決まったアドレスの命令をＲＯＭ１３から読み出して処理を実行する。本実施例ではＩＳＲ３０が起動して割り込み処理を行う。ＷＤＴ１５は、カウント値がオーバーフローする前にクリアされないと、情報処理装置をリセットするなどのフェールセーフを行う。
【００２４】
ＲＡＭ１２は、ＣＰＵ１１がプログラム３０を実行するための作業領域である。ＣＰＵ１１はＲＯＭ１３からプログラム３０を読み込み、また、必要であればメインバス２１を介してＲＡＭ１２からデータを読み出しプログラム３０を実行する。ＤＭＡＣ１６は、ＣＰＵ１１からの指示によりＲＡＭ１２からブリッジ１７を介して周辺機器にデータを送信する。また、周辺機器から割り込みされたＣＰＵ１１から指示を受けて、ブリッジ１７を介して周辺機器からデータを受け取り、ＲＡＭ１２に書き込む。
【００２５】
ブリッジ１７は、メインバス２１と周辺バス２２との間の周波数等の違いを吸収し、メインバス側の回路と周辺バス側の回路のデータを互いに受け渡す。ブリッジ１７は、マルチプレクサやブリッジ回路などであり、チャネル毎に、１つ以上のＩ／Ｏ１８、ＡＤＣ１９、及び、ＣＡＮコントローラ２０とそれぞれ接続されており、これらの周辺機器とデータを送受信する。
【００２６】
Ｉ／Ｏ１８は、例えばシリアル通信の入出力インタフェースであり、アクチュエータ、スイッチ、監視回路、他のマイコンと通信するために使用される。通信規格はＩ２Ｃ、ＵＡＲＴ等が知られている。ＡＤＣ１９は、各種のセンサが検出したアナログ信号をデジタル信号に変換する。ＡＤＣ１９は変換の終了を、ＩＮＴＣ１４を介してＣＰＵ１１に通知する。ＣＡＮコントローラ２０は、車載ネットワークを介して接続された他のＥＣＵと通信するための通信装置である。ＣＡＮコントローラ２０は、ＣＰＵ１１から通信データの送信要求を受け付けるとフレームの各フィールドにＣＡＮ  ＩＤやデータを格納しＣＡＮバスに出力する。また、ＣＡＮコントローラ２０は、受信すべきＣＡＮ  ＩＤの通信データを検出するとそれを取り込みＩＮＴＣ１４を介してＣＰＵ１１に割り込んで通知する。
【００２７】
〔スケジューリングについて〕
図４は、タスクのスケジューリング説明する図の一例である。タスクとは、１つのプログラム（例えば、Ｍａｉｎ関数を１つのプログラムとして）に含まれるいくつかの機能を機能毎に抽出したものである。どのような機能を１つのタスクとするかは、開発者が設計できる。具体的には、Ｍａｉｎ関数内の関数、サブルーチンなどが相当する。割込みなどで実行される関数もタスクである。
【００２８】
タスクは一般に、休止状態、実行可能状態、実行状態、及び、待ち状態の各状態を経る。休止状態は生成直後又は実行が完了したタスクの状態である。実行状態は、コアにより現在、実行されているタスクの状態をいう。実行状態のタスクはコアの数以下しか存在しない。実行可能状態は、周辺機器の入出力などが完了し、実行の準備が整ったタスクの状態をいう。休止状態から実行可能状態への遷移を起床という。実行可能状態のタスクは、コアが実行状態のタスクを終了させれば（コアが空けば）、後述する優先度に従ってコアに割り当てられる（ディスパッチされる）。待ち状態は、周辺機器が入出力を完了させるなど、実行に必要な条件が整うまで待機しているタスクの状態をいう。
【００２９】
例えば、Ｍａｉｎ関数のようなプログラムは、割込みの種類に対応したタスクのタスクＩＤ、アドレス、優先度等を引数にしてシステムコールなどの仕組みを利用しタスクを生成しておく。これによりスケジューラ３１が呼び出され、スケジューラ３１がタスクコントロールブロック（ＴＣＢ）３８を作成する（ＩＳＲがＴＣＢを作成してもよい）。ＴＣＢ３８は、例えば、タスクＩＤ、タスク（関数）の開始アドレス、終了アドレス、コンテキスト（例えば、汎用レジスタ、プログラムカウンタ、スタックポインタ、ステータスフラグの状態など）、状態を表すステータス等の各情報が含まれる。これによりタスクは休止状態になっている。
【００３０】
割込みの発生により割込みに対応した（又は割込みの種類に関係なく共通した）ＩＳＲ３０が実行されると、ＩＳＲ３０は例えばタスクＩＤ等を引数にして、タスクを起床するシステムコールを行う。これにより、スケジューラ３１がＴＣＢ３８のステータスを変更してタスクが実行可能状態になる。以降、スケジューラ３１は、プリエンプティブな優先度制御を行う。
【００３１】
スケジューラ３１は優先度毎にレディーキューを管理している。レディーキューには、優先度毎に、実行順にタスクが配列されている。同じ優先度におけるタスクの順番は、タスクが実行可能状態になった順番である。レディーキューは、例えば、タスクＩＤがキュー構造に配列された構造体である。スケジューラ３１は、実行可能状態になったタスクの優先度に応じてレディーキューを選択し、そのレディーキューの末尾にタスクＩＤを登録する。そして、スケジューラ３１は例えば以下のようにして、ＣＰＵ１１などの資源に割り当てるタスクを決定する。
・最も優先度の高いレディーキューのタスクを検索する。タスクがある場合にはキュー内の配置順にタスクを割り当てると決定する。
・最も優先度の高いレディーキューにタスクがない場合、次に優先度が高いレディーキューのタスクを検索する。このレディーキューにタスクがある場合にはキュー内の順にタスクを割り当てると決定する。
【００３２】
このように、スケジューラ３１は、原則的に優先度が高いタスクから、同じ優先度の複数のタスクについては実行可能状態になった順からタスクを割り当てると決定する。また、このように優先度だけを考慮すると、長時間実行されないタスクが生じてしまう。そこで、スケジューラ３１は例外的に、所定時間、優先度１のタスクを実行したら優先度２のタスクを実行する、などラウンドロビン方式を併用する。
【００３３】
ＣＰＵ１１などの資源への割り当てはディスパッチャにより行われる。ディスパッチャは、ＴＣＢ３８の開始アドレスを参照してＰＣ（プログラムカウンタ）に配置するなどして、ＣＰＵ１１にタスクを割り当てる。なお、すでに、待ち状態を経たタスクの場合、直前の実行状態を再生するためコンテキストをレジスタ等に再設定する。
【００３４】
実行状態のタスクは、タスクの終了のシステムコールにより消滅し、起床待ちのシステムコールにより休止状態になる。また、周辺機器からのデータ待ちなどで（セマフォの状態を検出して）必要になれば、待ち状態になるためのシステムコールを実行する。これにより、スケジューラ３１は、このタスクのＴＣＢ３８のステータスを待ち状態にして、ディスパッチャが次に割り当てるタスクをＣＰＵ等に割り当てる。なお、スケジューラ３１は、待ち状態になった要因のセマフォを監視して、セマフォが変わると、待ち状態のタスクを自動的に実行可能状態に変更する。
【００３５】
本実施形態では、タスクの前にＩＳＲがＣＰＵを使用し、ＩＳＲがタスクを起床することでタスクが実行可能状態となる。複数のタスクの実行タイミングの競合は、どちらかのＩＳＲが実行されれば生じ得る。このため、以下では、ＩＳＲの契機である「タスクの割込みが発生する」ことを実行タイミングの競合の契機として説明する。なお、実行タイミングの競合については後述する。
【００３６】
〔タスクの競合の例〕
図５（ａ）は、タスクの処理とその競合を説明する図の一例である。
タスクＡ：定周期起動タスク
タスクＢ：イベント起動タスク（周期的に発生）
タスクＢの優先度＞タスクＡの優先度
タスクＡはセンサからのデータ取得、演算、共有メモリへの書き出しを行う。タスクＢは共有メモリからデータを読み出し、車載装置を制御する。２回目の周期において、タスクＡのＩＳＲが実行されている状態で、タスクＢの割込みが発生する。なお、タスクＡが実行状態になっていてもよい。
【００３７】
スケジューラ３１はタスクＡよりもタスクＢを優先してＣＰＵ１１に割り当てる。したがって、この周期ではタスクＡは共有メモリのデータを更新できないことになり、タスクＢは１周期前のデータを共有メモリから読み出す。この後、タスクＡが実行状態になっても、タスクＡが更新したデータは、タスクＢに読み出されることなく更新される。
【００３８】
そこで、後述するスケジューリング制御部３２は、タスクＡの実行を禁止する。こうすることで、タスクＡが無駄にＣＰＵ１１へ割り当てられることを防止できる。
【００３９】
なお、図５（ａ）のようにタスクＡ，Ｂが競合するのは、ＣＰＵ１１がコアを１つしか有さないシングルコアの場合である。ＣＰＵ１１がマルチコアの場合、優先度の高低だけでは、コア１がタスクＡを中断する必要がなくタスクＢが優先される必要がない。マルチコアの２つのタスクがデータ依存性を保つには、例えば、セマフォを用いて、タスクＢがタスクＡのデータ更新を待つことで、タスクＡを先に実行することも可能である。
【００４０】
しかしながら、本実施例では、データの整合性よりもタスクＢが遅延なく実行されることを優先するため、シングルコアかマルチコアかに関係なく、タスクＢを優先するものとする。データ依存性があるため、互いに競合するタスクはタスク排他登録テーブル３３に登録されている。したがって、本実施例のタスク制御はＣＰＵ１１がシングルコアかマルチコアかを問わず実現可能である。
【００４１】
図５（ｂ）は、タスクＡとタスクＢ（Ｃ）の競合を説明する図の一例である。タスクＡは、例えば２ミリ秒周期でタイマ割込みが発生することで実行される。タスクＢは、クランク角が４５度になるというイベント割込みが発生することで実行される。タスクＣは、クランク角が６０度になるというイベント割込みが発生することで実行される。したがって、例えば、図では４ミリ秒でタスクＡとタスクＢの競合が、１４ミリ秒でタスクＡとタスクＣの競合が発生している。
【００４２】
本実施例によれば、スケジューリング制御部は、４ミリ秒と１４ミリ秒でタスクＡを実行しないので、ＣＰＵ負荷を低減することができる。クランク角を含め、車両制御では車速やエンジン回転数が高速になるほど、制御のためのタスクが実行される頻度も増大する。このような状況に対応するには、ＣＰＵ１１の機能を増大させる（コスト増となる）などの必要があるが、本実施例では、競合してもタスクＡが実行されないのでＣＰＵ１１の機能を増大させる必要がない。
【００４３】
〔実行タイミングの競合について〕
図６によりタスクＡとタスクＢが競合するタイミングについて説明する。
（i）  タスクＢの割込みがタスクＡよりも先に発生した場合
優先度が高いタスクＢがそのまま（コンテキストスイッチなく）実行される。タスクＢの後にタスクＡが実行されるが、タスクＢはタスクＡが更新したデータを参照しないので、タスクＡの実行が無駄になる。このため、スケジューリング制御部３２はタスクＡを実行しないことが好ましい。
（ii）  タスクＢとタスクＡの割込みが同時に発生した場合
優先度によりタスクＢが先に実行される。したがって、この場合もタスクＢがタスクＡよりも先に実行可能状態となった場合と同様である。
（iii）  タスクＢの割込みがタスクＡよりも後に発生した場合（これまでの説明と同様）
タスクＡのＩＳＲ３０又はタスクＡの実行中にタスクＢの割込みが発生する。プリエンプションによりタスクＡは中止され、タスクＢがＣＰＵ１１に割り当てられる。この後、タスクＡがＣＰＵ１１に割り当てられても、タスクＢはタスクＡが更新したデータを参照しないので、タスクＡの実行が無駄になる。このため、スケジューリング制御部３２はタスクＡを実行しない。
【００４４】
したがって、タスクＡの実行が禁止されるべき状況としては、タスクＡの割込みが発生してからタスクＡが終了するまでの間にタスクＢの割込みが発生した場合、又は、タスクＢの割込みが発生してから、タスクＢが終了するまでの間にタスクＡの割込みが発生した場合である。よって、（i）〜（iii）の全ての場合、スケジューリング制御部３２はタスクＡの実行を禁止する。
【００４５】
なお、（iii）のような場合において、ＩＳＲが終了しタスクＡが実行状態になってから、タスクＢの割込みが生じる場合がある。この場合、タスクＡからタスクＢにコンテキストスイッチすることなく、タスクＡの実行を完了させることもできる。タスクＡの実行時間が短い場合は、コンテキストスイッチしない方が負荷の低減になるためである。
【００４６】
〔スケジューラの機能例〕
図７はスケジューラの機能ブロック図とタスク排他登録テーブル３３の一例を示す図である。スケジューラ３１はスケジューリング制御部３２を有し、ＲＡＭ１２にはタスク排他登録テーブル３３が記憶されている。
【００４７】
タスク排他登録テーブル３３には、データ競合が発生するタスクの優先度が登録されている。タスク排他登録テーブル３３は、開発者が予めスケジューラ３１などの一部として記述しておく。タスク排他登録テーブル３３は複数のセット（セット１〜ｎ）を有し、競合タスクと制御対象のタスクが登録されている。１つの競合タスクに制御対象のタスクが複数個、登録されていてもよい。競合タスクは優先して実行されるタスクであり、制御対象は競合タスクと競合すると、実行が禁止されるタスクである。多くの場合、競合タスクの優先度＞制御対象の優先度、である。例えばデータＸに対し競合するタスクがＡ，Ｂであることは開発者にとって既知であるので、各種の競合データについて図のようなセットを作成しておくことができる。
【００４８】
スケジューリング制御部３２はスケジューラ３１の機能の１つであり、競合タスクと競合した場合に、例えば実行可能状態のタスクから制御対象のタスクを検出し、該タスクの実行を禁止する。すなわち、スケジューリング制御部３２は、競合タスクの割込みが発生すると、タスク排他登録テーブル３３にて対応づけられた制御対象のタスクが実行可能状態や休止状態のタスクに含まれるか否かを判定する。制御対象のタスクが検出された場合（図６の（iii）の場合）、スケジューリング制御部３２は、レディーキューに登録されている場合はレディーキューから削除しまたＴＣＢ３８を消去する。レディーキューに登録されていない場合はレディーキューに登録することなくＴＣＢを削除する。これにより、タスクＡが実行状態になることを禁止する。
【００４９】
また、スケジューリング制御部３２は、制御対象のタスクＡの割込みが発生すると、タスク排他登録テーブル３３にて対応づけられた競合タスク（タスクＢ）が実行可能状態のタスクに含まれるか否か、又は、実行状態か否かを判定する。この場合（図６の（i）の場合）も、制御対象のタスクＡを実行する必要性が小さいので、スケジューリング制御部３２は、タスクＡのＴＣＢをレディーキューに登録することなく削除し、ＴＣＢ３８を消去する。
【００５０】
〔動作手順〕
図８は、スケジューリング制御部３２が、優先度の低いタスクの実行を禁止する手順を示すフローチャート図の一例である。図８の手順は、例えば新たに割込みが発生するとスタートする。
【００５１】
まず、スケジューリング制御部３２は割込みが生じたタスクに対し、制御対象のタスクがタスク排他登録テーブル３３に登録されているか否かを判定する（Ｓ１０）。
【００５２】
制御対象のタスクがタスク排他登録テーブル３３に登録されている場合（Ｓ１０のＹｅｓ）、スケジューリング制御部３２はレディーキューに制御対象のタスク（タスクＡのこと）があるか否かを判定する（Ｓ２０）。これにより、割込みが生じたタスクＢの実行により実行が不要になるタスクＡを特定できる。
【００５３】
レディーキューに制御対象のタスクがある場合（Ｓ２０のＹｅｓ）、スケジューリング制御部３２はレディーキューのタスクＡを実行禁止にする（Ｓ３０）。これにより、タスクＡが実行されることを防止する。
【００５４】
なお、レディーキューに制御対象のタスクがない場合（Ｓ２０のＮｏ）、制御対象のタスクを実行禁止にする必要がないので、スケジューラ３１がレディーキューにタスクＢを登録する（Ｓ６０）。これによりタスクＢが実行される。
【００５５】
制御対象のタスクがタスク排他登録テーブル３３に登録されていない場合（Ｓ１０のＮｏ）、スケジューリング制御部３２は、レディーキューに、割込みが生じたタスクから見て競合タスクがあるか否かを判定する（Ｓ４０）。これにより、割込みが生じたタスクＡの実行を不要にするタスクＢの有無を判定できる。
【００５６】
レディーキューに競合タスクがある場合（Ｓ４０のＹｅｓ）、スケジューリング制御部３２は、割込みが生じた制御対象のタスクであるタスクＡを実行禁止にする（Ｓ５０）。すなわち、タスクＡはレディーキューに登録されることなく消滅する。
【００５７】
なお、レディーキューに競合タスクがない場合（Ｓ４０のＮｏ）、割込みが生じたタスクＡは制御対象のタスクでないので、スケジューラ３１がレディーキューにタスクＡを登録する（Ｓ６０）。したがって、タスクＡは、タスクＢと実行タイミングが競合しなければ禁止されることなく実行される（この後、タスクＢの割込みが生じない限り）。
【００５８】
以上説明したように、本実施例の情報処理装置１００は、データ依存性がある２つのタスクの実行タイミングが競合した場合、優先度が低いタスクＡの実行を禁止するので、ＣＰＵ１１などの資源を無駄に使用することを防止できる。
【実施例２】
【００５９】
実施例１では、強制的にタスクＡの実行を禁止していたが、タスクＡの実行が高頻度に禁止されるとタスクＢが演算に用いるデータの信頼性が低下するおそれがある。そこで、本実施では、タスクＡの実行禁止の妥当性を判定する情報処理装置１００について説明する。
【００６０】
図９は、スケジューラ３１の機能ブロック図、タスク排他登録テーブル３３、及び、タスク起動管理データ記録部３４の一例を示す図である。図９において図７と同一部の説明は省略する。本実施例では、ＲＡＭ１２にタスク起動管理データ記録部３４が設けられている。タスク起動管理データ記録部３４は、競合対象となるデータ毎に「回数」「発動数」「しきい値」の各フィールドを有する。このうち、「しきい値」は固定値であり、開発者等が予めスケジューラ３１などの一部として記述しておく。
【００６１】
「回数」「発動数」はスケジューリング制御部３２が更新するフィールドである。「回数」は、タスクＡが禁止されることなく実行され、データＸを連続して更新した回数である。すなわち、スケジューリング制御部３２はタスクＡが終了する毎に「回数」を１つ大きくし、タスクＡの実行を禁止すると「回数」をゼロにする。
【００６２】
また、「発動数」は、スケジューリング制御部３２が制御対象であるタスクＡの実行を禁止した回数である。したがって、スケジューリング制御部３２は実施例１のようにタスクＡの実行を禁止する毎に「発動数」を１つ大きくする。
【００６３】
「しきい値」は、「回数」と比較される値である。つまり、「回数」が「しきい値」より大きければ、データＸは十分に更新されており、タスクＡが更新しなくてもタスクＢにとって支障は少ないと考えられる。また、「回数」が「しきい値」以下であれば、データＸの更新頻度が少ないので、タスクＡの実行を禁止すべきでないと考えられる。
【００６４】
このように、本実施例のスケジューリング制御部３２は、「回数」と「しきい値」を比較して、タスクＡの実行を禁止するか否かを判定する。
【００６５】
なお、「発動数」は、バッテリが外されるなどしてＲＡＭ１２が初期化されない限り、最後の値を保持する。「発動数」が多いことは、データの競合回数やタスクＡの実行禁止の回数が多いことを意味するので、「発動数」が極端に大きいことは好ましくない。そこで、ディーラなどでは、サービスマンがスキャンツールを車載ネットワークに接続することで「発動数」を読み出し車両の点検に利用することができる。なお、「発動数」は所定期間毎（例えばワントリップ、所定距離の走行毎）に初期化されてもよい。
【００６６】
図１０は、スケジューリング制御部３２が、優先度の低いタスクの実行を禁止する手順を示すフローチャート図の一例である。本実施例では、ステップＳ２５、Ｓ４５において、スケジューリング制御部３２が、「回数」＞「しきい値」か否かを判定している。
【００６７】
すなわち、レディーキューに制御対象のタスクがある場合（Ｓ２０のＹｅｓ）、スケジューリング制御部３２はタスク起動管理データ記録部３４の「回数」が「しきい値」より大きいか否かを判定する（Ｓ２５）。スケジューリング制御部３２は「回数」が「しきい値」より大きい場合にだけ（Ｓ２５のＹｅｓ）、レディーキューのタスクＡを実行禁止にする（Ｓ３０）。これにより、タスクＡがしきい値より多く連続して実行されている場合には、タスクＡが実行されることを禁止できる。
【００６８】
また、レディーキューに競合タスクがある場合（Ｓ４０のＹｅｓ）、スケジューリング制御部３２はタスク起動管理データ記録部３４の「回数」が「しきい値」より大きいか否かを判定する（Ｓ４５）。スケジューリング制御部３２は「回数」が「しきい値」より大きい場合にだけ（Ｓ４５のＹｅｓ）、制御対象のタスクＡを実行禁止にする（Ｓ５０）。すなわち、タスクＡがしきい値より多く連続して実行されている場合にだけ、タスクＡはレディーキューに登録されることなく消滅する。
【００６９】
ステップＳ２５、Ｓ４５で「回数」が「しきい値」より大きくない場合（Ｓ２５、Ｓ４５のＮｏ）、処理はステップＳ６０に進むので、スケジューリング制御部３２はタスクＢをレディーキューに登録し、タスクＡをレディーキューに登録する。したがって、この場合は、タスクＡが禁止されることなく実行される。
【００７０】
この後、スケジューリング制御部３２はタスク起動管理データ記録部３４を更新する（Ｓ７０）。タスクＡを実行した場合は「回数」を１つ大きくし、タスクＡの実行を禁止した場合は「発動数」を１つ大きくし「回数」をゼロに初期化する。
【００７１】
本実施例の情報処理装置１００によれば、実施例１の効果に加えて、タスクＡの実行頻度を判定して、タスクＢが演算に用いるデータの信頼性が低下するおそれがない場合にのみ、タスクＡの実行を禁止することができる。
【実施例３】
【００７２】
実施例１，２では、タスクＡよりも優先度が高いタスクＢは、タスクＡがデータを更新しないためやや時間的に古いデータを演算に使用している。本実施例では、この古いデータから、タスクＢが実行される時のデータを過去のデータの補間により求める情報処理装置１００について説明する。
【００７３】
図１１は、スケジューラ３１の機能ブロック図、タスク排他登録テーブル３３、タスク起動管理データ記録部３４、及び、補間データ記録部３６の一例を示す図である。図１１において図９と同一部の説明は省略する。本実施例では、スケジューラ３１が補間データ制御部３５を有し、ＲＡＭ１２に補間データ記録部３６が設けられている。
【００７４】
補間データ記録部３６には、過去の所定数のデータ（取得値）と、過去の取得値から求められた予測値が記録される。補間データ記録部３６には、タスクＡの起動周期である２ミリ秒ごとにタスクＡがＲＡＭ１２に書き込んだデータが記録される。タスクＡの実行が禁止された場合、タスクＢはこの予測値を車載装置の制御に利用する。具体的には、スケジューリング制御部３２が予測値を補間データ記録部３６から読み出し、タスクＡの代わりにＲＡＭ１２に書き込む。タスクＢはこの予測値をＲＡＭ１２から読み出して使用することができる。
【００７５】
補間データ制御部３５は、補間データ記録部３６に、タスクＡが読み出した取得値を登録する。補間データ記録部３６は、リングバッファであり、例えば、６個のデータが記録されると、最も古いデータから上書きされる。補間データ制御部３５は、補間データ記録部３６に新たにデータを記録すると、予測値を更新する。すなわち、次回、タスクＡが実行された場合に、タスクＡがＲＡＭ１２に書き込むであろうデータを予測して、補間データ記録部３６の予測値に書き込む。
【００７６】
予測のアルゴリズムはどのようなものでもよく、また、データによって異なることが多いので最適なアルゴリズムで予測する。例えば、時間と共に増大するデータであれば、補間データ制御部３５は、過去の数個のデータの差を算出し、その差の平均を最後のデータに加えた予測値とする。
例えば、３〜６回分のデータの差が「６，６，５」なので、平均は６（切り上げ）となる。よって予測値＝３１＋６＝３７となる。
【００７７】
また、時間と共に余り変化のないデータであれば、補間データ制御部３５は、過去の数個のデータの平均値を予測値とする。例えば、３〜６回分のデータの平均から、予測値＝２６となる。
【００７８】
また、最後のデータをそのまま予測値（３１）としてもよい。こうすることで、ＣＰＵ負荷を低減できる。
【００７９】
なお、「タイマー値」は、タスクＡがデータＸを処理した（演算した、又は、ＲＡＭ１２に書き込んだ）時刻を表す。「タイマー値」により、スケジューリング制御部３２はタスクＡの起動間隔を検出できる。当然ながら、タスクＡの実行が禁止されると、「タイマー値」の間隔が大きくなる。
【００８０】
また、タスク起動管理データ記録部３４は「補間有」のフィールドを有する。「補間有」のフィールドは、補間データ制御部３５が補間データ記録部３６を作成する必要があるか否かを制御するためのフラグである。また、スケジューリング制御部３２が、予測値を補間データ記録部３６から読み出し、タスクＡの代わりにＲＡＭ１２に書き込むか否かを制御するためのフラグでもある。
【００８１】
図１２は、スケジューリング制御部３２が、優先度の低いタスクの実行を禁止する手順を示すフローチャート図の一例である。本実施例では、ステップＳ３０、Ｓ５０において、タスクＡの実行が禁止された後、スケジューリング制御部３２が、タスク起動管理データ記録部３４を参照して、「補間」が“有り”か否かを判定する（Ｓ５５）。
【００８２】
「補間」が“有り”の場合（Ｓ５５のＹｅｓ）、スケジューリング制御部３２は補間データ記録部３６から予測値を読み出し、ＲＡＭ１２に書き込む（Ｓ５６）。この後、レディーキューが更新されタスクＢが実行されるので、タスクＢは予測値を使用して車載装置を制御できる。
【００８３】
図１３は、タスクＡと補間データ制御部３５の動作手順を示すフローチャート図の一例である。タスクＢと実行タイミングが競合せずに実行された場合、又は、タスクＢと実行タイミングが競合したが実行された場合、タスクＡはセンサ値の読み出し（Ｓ１０１）、演算（Ｓ１０２）、演算結果のＲＡＭ１２への書き込みを行う（Ｓ１０３）。
【００８４】
スケジューリング制御部３２はシステムコールによりタスクＡの終了を検出すると、タスク起動管理データ記録部３４の「補間有」が“有り”になっているため、補間データ制御部３５に予測値の補間を要求する。
【００８５】
これにより、補間データ制御部３５は以下の処理を開始する。補間データ制御部３５は、ＲＡＭ１２からデータＸを読み出し（Ｓ１１１）、読み出したデータＸを補間データ記録部３６に書き込む（Ｓ１１２）。補間データ記録部３６において更新されるデータは最も古いデータである。
【００８６】
補間データ制御部３５は、補間データ記録部の所定数個のデータを用いて予測値を更新する（Ｓ１１３）。これにより、次回、タスクＡの実行が禁止された場合、タスクＢは予測値を使用して車載装置を制御できる。
【００８７】
本実施例の情報処理装置１００によれば、実施例１，２の効果に加え、タスクＡが実行されない場合、過去のデータからタスクＡのデータを予測するので、タスクＢは信頼性のあるデータを用いて車載装置を制御できる。
【実施例４】
【００８８】
本実施例では、連続データ更新カウンタの「回数」が「しきい値」より小さい場合でも、データＸの更新が遅延している場合は、タスクＡの実行を禁止する情報処理装置１００について説明する。
【００８９】
図１４は、スケジューラ３１の機能ブロック図、タスク排他登録テーブル３３、タスク起動管理データ記録部３４、及び、補間データ記録部３６の一例を示す図である。図１４において図１１と同一部の説明は省略する。本実施例では、タスク起動管理データ記録部３４に、新たに「起動周期」「周期しきい値」のフィールドが設けられている。「起動周期」は、タスクＡの実際の起動周期である。「起動周期」はスケジューリング制御部３２が更新するデータであり、スケジューリング制御部３２は、補間データ記録部３６の「タイマー値」を参照して、「起動周期」に設定する。タスクＡの理想的な起動周期は予め既知なので（例えば、２ミリ秒）、「起動周期」によりどの程度、理想的な起動周期に対し遅れているかが検出される。
【００９０】
「周期しきい値」は、「起動周期」と比較される値であり、「起動周期＞周期しきい値」の場合、スケジューリング制御部３２はタスクＡの実行を禁止すべきと判定する。例えば、車速が高速なため、タスクＡの起動周期が遅れてきた場合、タスクＡの実行を停止しないデータの更新がさらに遅れてしまう。そこで、スケジューリング制御部３２は「起動周期＞周期しきい値」の場合、「回数（例えば、１０回）」が「しきい値（例えば、１２回）」より小さい場合でも、タスクＡの実行を禁止する。
【００９１】
図１５は、スケジューリング制御部３２が、優先度の低いタスクの実行を禁止する手順を示すフローチャート図の一例である。本実施例では、ステップＳ２６、Ｓ４６において、スケジューリング制御部３２が、「起動周期」が「周期しきい値」より大きいか否かを判定している。
【００９２】
すなわち、レディーキューに制御対象のタスクがある場合（Ｓ２０のＹｅｓ）、スケジューリング制御部３２は「回数」が「しきい値」より大きいか否かを判定する（Ｓ２５）。スケジューリング制御部３２は「回数」が「周期しきい値」以下の場合（Ｓ２５のＮｏ）、さらにタスク起動管理データ記録部３４の「起動周期」が「周期しきい値」より大きいか否かを判定する（Ｓ２６）。
【００９３】
スケジューリング制御部３２は「起動周期」が「周期しきい値」より大きい場合（Ｓ２６のＹｅｓ）、タスクＡを実行禁止として、処理をステップＳ６０に進める。これにより、タスクＡの起動周期が遅れ気味な場合は、タスクＡの実行を禁止し処理遅延の拡大を防止できる。
【００９４】
また、レディーキューに競合タスクがある場合（Ｓ４０のＹｅｓ）、スケジューリング制御部３２はタスク起動管理データ記録部３４の「回数」が「しきい値」より大きいか否かを判定する（Ｓ４５）。スケジューリング制御部３２は「回数」が「しきい値」以下の場合（Ｓ４５のＮｏ）、さらに「起動周期」が「周期しきい値」より大きいか否かを判定する（Ｓ４６）。
【００９５】
スケジューリング制御部３２は「起動周期」が「周期しきい値」より大きい場合（Ｓ４６のＹｅｓ）、タスクＡを実行禁止として、処理をステップＳ６０に進める。これにより、タスクＡの起動周期が遅れ気味な場合は、タスクＡの実行を禁止し処理遅延の拡大を防止できる。
【００９６】
本実施例によれば、実施例１〜３の効果に加え、連続データ更新カウンタの「回数」が「しきい値」より小さい場合でも、データＸの更新が遅延している場合は、タスクＡによるデータ更新を確実に行うことができる。
【符号の説明】
【００９７】
１１    ＣＰＵ
１２    ＲＡＭ
３１    スケジューラ
３２    スケジューリング制御部
３３    タスク排他登録テーブル
３４    タスク起動管理データ記録部
３５    補間データ制御部
３６    補間データ記録部
３８    ＴＣＢ
１００  情報処理装置
【図１】
2013152636.tif 000003
【図２】
2013152636.tif 000004
【図３】
2013152636.tif 000005
【図４】
2013152636.tif 000006
【図５】
2013152636.tif 000007
【図６】
2013152636.tif 000008
【図７】
2013152636.tif 000009
【図８】
2013152636.tif 000010
【図９】
2013152636.tif 000011
【図１０】
2013152636.tif 000012
【図１１】
2013152636.tif 000013
【図１２】
2013152636.tif 000014
【図１３】
2013152636.tif 000015
【図１４】
2013152636.tif 000016
【図１５】
2013152636.tif 000017