(57)【要約】【課題】  イベント、複数の異なる周期、依存関係を考慮してタスクを複数のコアに最適に割り当てることのできる並列タスクスケジューリングを提供すること。【解決手段】  本発明のタスクスケジューリング方法は、制御ソフトウェアの仕様書とそのプログラムを参照して、依存関係の強いタスクをグループとしてまとめ、複数のタスクグループ情報を生成する手順と、タスクグループ情報を参照して、タスクグループに含まれるタスクの依存関係を表したタスクグラフを作成する手順と、制御ソフトウェアの仕様書とそのプログラムを参照して、タスクグループ間時間制約を作成する手順と、タスクグラフと前記タスクグループ間時間制約を参照して、全体タスクグラフを作成する手順と、全体タスクグラフを参照して、タスクの優先度を定義した優先度テーブルを作成する手順と、優先度テーブルを参照してタスクをマルチコアに割り当てる手順と、を有する。【選択図】  図１
2020173622.tif 000002
【特許請求の範囲】
【請求項１】
複数のタスクからなる制御ソフトウェアをマルチコアにスケジューリングする方法であって、
制御ソフトウェアの仕様書とそのプログラムを参照して、依存関係の強いタスクをグループとしてまとめ、複数のタスクグループ情報を生成する手順と、
前記タスクグループ情報を参照して、タスクグループに含まれるタスクの依存関係を表したタスクグラフを作成する手順と、
前記制御ソフトウェアの仕様書とそのプログラムを参照して、タスクグループ間時間制約を作成する手順と、
前記タスクグラフと前記タスクグループ間時間制約を参照して、全体タスクグラフを作成する手順と、
前記全体タスクグラフを参照して、タスクの優先度を定義した優先度テーブルを作成する手順と、
前記優先度テーブルを参照してタスクをマルチコアに割り当てる手順と、を有することを特長とする並列タスクスケジューリング方法。
【請求項２】
複数のタスクからなる制御ソフトウェアをマルチコアにスケジューリングする方法であって、
制御ソフトウェアの仕様書とそのプログラムを入力して、依存関係の強いタスクをグループとしてまとめ、複数のタスクグループ情報を生成する手段と、
前記タスクグループ情報を入力して、タスクグループに含まれるタスクの依存関係を表したタスクグラフを作成する手段と、
前記制御ソフトウェアの仕様書とそのプログラムを入力して、タスクグループ間時間制約を作成する手段と、
前記タスクグラフと前記タスクグループ間時間制約を入力して、全体タスクグラフを作成する手段と、
前記全体タスクグラフを入力して、タスクの優先度を定義した優先度テーブルを作成する手段と、
前記優先度テーブルを入力してタスクをマルチコアに割り当てる手段と、を有することを特長とする並列タスクスケジューリングシステム。
【請求項３】
請求項１に記載の並列タスクスケジューリング方法において、
前記タスクグループ情報は、タスクのグループ名、タスクの数、周期タスクかイベントかを示すタスクの種類、周期、タスクグループに含まれるタスクのタスク名、タスクグループに含まれるタスクの処理時間、各タスクについてその直前に処理が行われるタスク名を先行タスクとして定義することを特長とする並列タスクスケジューリング方法。
【請求項４】
請求項２に記載の並列タスクスケジューリングシステムにおいて、
前記タスクグループ情報は、タスクのグループ名、タスクの数、周期タスクかイベントかを示すタスクの種類、周期、タスクグループに含まれるタスクのタスク名、タスクグループに含まれるタスクの処理時間、各タスクについてその直前に処理が行われるタスク名を先行タスクとして定義することを特長とする並列タスクスケジューリングシステム。
【請求項５】
請求項１に記載の並列タスクスケジューリング方法において、
前記タスクグループ間時間制約は、異なるタスクグループ間で時間制約のある２つにタスクについて、先に処理するタスクを先行タスクとし、後で処理するタスクを後続タスクとして定義することを特長とする並列タスクスケジューリング方法。
【請求項６】
請求項２に記載の並列タスクスケジューリングシステムにおいて、
前記タスクグループ間時間制約は、異なるタスクグループ間で時間制約のある２つにタスクについて、先に処理するタスクを先行タスクとし、後で処理するタスクを後続タスクとして定義することを特長とする並列タスクスケジューリングシステム。
【請求項７】
請求項１に記載の並列タスクスケジューリング方法において、
前記タスクグループ情報は、タスクグループごとに整数倍の異なる周期を定義でき、
前記タスクをコアに割り当てる手順は、周期の短いタスクグループのタスクを優先してコアに割り当て、そのタスクグループのコア割り当てが終了し、周期内に時間が残っている場合には次に周期の短いタスクグループのタスクを割り当てることを特長とする並列タスクスケジューリング方法。
【請求項８】
請求項２に記載の並列タスクスケジューリングシステムにおいて、
前記タスクグループ情報は、タスクグループごとに整数倍の異なる周期を定義でき、
前記タスクをコアに割り当てる手段は、周期の短いタスクグループのタスクを優先してコアに割り当て、そのタスクグループのコア割り当てが終了し、周期内に時間が残っている場合には次に周期の短いタスクグループのタスクを割り当てることを特長とする並列タスクスケジューリングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチコア組み込みシステムにおける制御ソフトウェアの並列タスクスケジューリング技術に関する。
【背景技術】
【０００２】
近年、マイクロプロセッサやマイクロコントローラでは、消費電力と発熱量の問題から、クロック周波数の上昇ではなく、並列処理によって性能向上が達成されるようになった。サーバー、パーソナルコンピュータ、スマートフォンでも、複数のプロセッサコアを搭載したマルチコア／メニーコアのＬＳＩが普及している。車載組込みシステムにおいても、マルチコアのマイクロコントローラが普及し始めている。
【０００３】
マルチコアの能力を引き出すためには、並列タスクスケジューリングが重要となる。リアルタイムシステムにはイベントタスクと周期タスクがあり、周期タスクは複数の異なる周期を持つ場合がある。また、制御依存やデータ依存といった依存関係があるタスクには実行の順番が決まっている。このように、イベント、複数の異なる周期、依存関係を考慮して、タスクをどのコアに割り当て、スケジューリングするかを決定しなくてはならない。それぞれのタスクの実行時間制約を保証しつつ、タスク全体の処理を最適化できる手法が必要である。
【０００４】
並列タスクスケジューリングの従来技術として次のようなものがある。特許文献１には、プログラムを逐次処理するものと並列処理するものに分類し、逐次処理するプログラムをスケジューリングした後、並列処理するプログラムを不均一となるようにスケジューリングする方法が示されている。逐次処理プログラムをスケジューリングした後、各コアにプログラムが割り当てられていない時間、すなわち並列処理するプログラムを割り当てることのできる時間は、コアごとに不均一になる可能性がある。そこで、並列処理するプログラムを各コアに割り当てることのできる時間に応じて不均一に割り当てるというものである。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１６−２１８５０３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来技術は並列処理するプログラムを不均一に割り当てることによって、各コアに割り当てるプログラムの処理量を平均化することができる。しかしながら、イベント、複数の異なる周期、依存関係を考慮してタスクスケジューリングを行うことについては言及されていない。
【０００７】
本発明は上記課題を鑑みて考案したものであり、その目的は、イベント、複数の異なる周期、依存関係を考慮してタスクを複数のコアに最適に割り当てることのできる並列タスクスケジューリングを提供することにある。
【課題を解決するための手段】
【０００８】
本発明のタスクスケジューリング方法は、制御ソフトウェアの仕様書とそのプログラムを参照して、依存関係の強いタスクをグループとしてまとめ、複数のタスクグループ情報を生成する手順と、タスクグループ情報を参照して、タスクグループに含まれるタスクの依存関係を表したタスクグラフを作成する手順と、制御ソフトウェアの仕様書とそのプログラムを参照して、タスクグループ間時間制約を作成する手順と、タスクグラフと前記タスクグループ間時間制約を参照して、全体タスクグラフを作成する手順と、全体タスクグラフを参照して、タスクの優先度を定義した優先度テーブルを作成する手順と、優先度テーブルを参照してタスクをマルチコアに割り当てる手順と、を有する。
【０００９】
さらに、本発明のタスクスケジューリング方法は、制御ソフトウェアの仕様書とそのプログラムを入力して、依存関係の強いタスクをグループとしてまとめ、複数のタスクグループ情報を生成する手段と、タスクグループ情報を入力して、タスクグループに含まれるタスクの依存関係を表したタスクグラフを作成する手段と、制御ソフトウェアの仕様書とそのプログラムを入力して、タスクグループ間時間制約を作成する手段と、タスクグラフとタスクグループ間時間制約を入力して、全体タスクグラフを作成する手段と、全体タスクグラフを入力して、タスクの優先度を定義した優先度テーブルを作成する手段と、優先度テーブルを入力してタスクをマルチコアに割り当てる手段を有する。
【発明の効果】
【００１０】
本発明によれば、タスク全体をタスクグループ情報とタスクグループ間時間制約の形で表現するので、依存関係のある部分がタスクグループの内部と、タスクグループ間の限られたパスに限定されるため、タスクの優先度を決定するのが容易になり、その結果、タスクのコア割り当てを最適に行えるようになる。
【００１１】
また、本発明によれば、タスク全体をタスクグループ情報とタスクグループ間時間制約の形で表現するので、タスクグループ間時間制約の変更への対応が容易になる。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施例の並列タスクスケジューリング方法である。
【図２】タスクグループ情報の例である。
【図３】タスクグラフの例である。
【図４】優先度テーブルの例である。
【図５】タスクスケジューリングの例である。
【図６】３つのタスクグループＡ、Ｂ、Ｃのタスクグラフと優先度テーブルの例である。
【図７】タスクグループ間時間制約の第１の例である。
【図８】図６のタスクグラフと図７のタスクグループ間時間制約から作成した全体タスクグラフである。
【図９】図８の全体タスクグラフから作成した優先度テーブルである。
【図１０】図９の優先度テーブルに基づいてタスクをコアに割り当てたスケジューリング結果である。
【図１１】タスクグループ間時間制約の第２の例である。
【図１２】図６のタスクグラフと図１１のタスクグループ間時間制約から作成した全体タスクグラフである。
【図１３】図１２の全体タスクグラフから作成した優先度テーブルである。
【図１４】図１３の優先度テーブルに基づいてタスクをコアに割り当てたスケジューリング結果である。
【図１５】タスクグループ間時間制約の第３の例である。
【図１６】図６のタスクグラフと図１５のタスクグループ間時間制約から作成した全体タスクグラフである。
【図１７】図１６の全体タスクグラフから作成した優先度テーブルである。
【図１８】図１７の優先度テーブルに基づいてタスクをコアに割り当てたスケジューリング結果である。
【図１９】図６の３つのタスクグループＡ、Ｂ、Ｃが異なる周期を持つ場合のタスクグループ情報の例である。
【図２０】図１９のタスクグループＡ、Ｂ、Ｃの実行時間の関係を表す図である。
【図２１】図１９のタスクグループＡ、Ｂ、Ｃのコア割り当ての手順を表すフローチャートである。
【図２２】図１９のタスクグループＡ、Ｂ、Ｃにおけるタスクの処理時間とクリティカルパスを表すテーブルである。
【図２３】図１９のタスクグループＡ、Ｂ、Ｃを、図２１のフローチャートと図２２のテーブルに基づいてコアに割り当てを行ったスケジューリング結果である。
【図２４】イベントであるタスクグループＤのタスクグループ情報である。
【図２５】図６の２つのタスクグループＡ、Ｂと図１１のタスクグループ間時間制約と図２４のタスクグループＤから作成した全体タスクグラフである。
【図２６】図２５の全体タスクグラフから作成した優先度テーブルである。
【図２７】図２６の優先度テーブルに基づいてタスクをコアに割り当てたスケジューリング結果である。
【発明を実施するための形態】
【実施例】
【００１３】
図１は本発明の実施例の並列タスクスケジューリング方法である。
【００１４】
１０は制御ソフトウェアの仕様書であり、１１はそのプログラムである。タスクグループ情報作成１２は、制御ソフトウェアの仕様書１０とそのプログラム１１を入力して、依存関係の強いタスクをグループとしてまとめ、複数のタスクグループ情報を生成する。ここでは、３つのタスクグループ情報Ａ（１３−Ａ）、Ｂ（１３−Ｂ）、Ｃ（１３−Ｃ）を生成するものとする。タスクグループ情報作成１２は、制御ソフトウェアの開発者などが人手で行うか、ツールを開発して自動化することも考えられる。タスクグループ情報の説明は後で行う。
【００１５】
タスクグラフ作成１４は、タスクグループ情報Ａ（１３−Ａ）を入力して、タスクグループＡに含まれるタスクの依存関係を表したタスクグラフＡ（１５−Ａ）を作成する。タスクグラフ作成１４はまた、タスクグループ情報Ｂ（１３−Ｂ）を入力して、タスクグループＢに含まれるタスクの依存関係を表したタスクグラフＢ（１５−Ｂ）を作成する。タスクグラフ作成１４はさらに、タスクグループ情報Ｃ（１３−Ｃ）を入力して、タスクグループＣに含まれるタスクの依存関係を表したタスクグラフＣ（１５−Ｃ）を作成する。タスクグラフ作成１４は、制御ソフトウェアの開発者などが人手で行うか、ツールを開発して自動化することも考えられる。タスクグラフの説明は後で行う。
【００１６】
タスクグループ間時間制約作成１６は、制御ソフトウェアの仕様書１０とそのプログラム１１を入力して、タスクグループ間時間制約１７を作成する。タスクグループ間時間制約作成１６は、制御ソフトウェアの開発者などが人手で行うか、ツールを開発して自動化することも考えられる。
【００１７】
全体タスクグラフ作成１８は、タスクグラフＡ（１５−Ａ）、タスクグラフＢ（１５−Ｂ）、タスクグラフＣ（１５−Ｃ）とタスクグループ間時間制約１７を入力して、全体タスクグラフ１９を作成する。全体タスクグラフ作成１８は、制御ソフトウェアの開発者などが人手で行うか、ツールを開発して自動化することも考えられる。全体タスクグラフの説明は後で行う。
【００１８】
優先度テーブル作成２０は、全体タスクグラフ１９を入力して、優先度テーブル２１を作成する。優先度テーブル作成２０は、制御ソフトウェアの開発者などが人手で行うか、ツールを開発して自動化することも考えられる。優先度テーブルの説明は後で行う。
【００１９】
コア割り当て２２は、優先度テーブル２１を入力して、タスクをマルチコアに割り当てるスケジューリングを行う。ここでは２つのコアを使い、コア０スケジューリング（２３−０）とコア１スケジューリング（２３−１）を生成するものとする。スケジューリングの説明は後で行う。
【００２０】
図２はタスクグループ情報の例である。タスクグループ名はＴであり、そのタスク数は７である。種類は少なくとも周期タスクとイベントの二種類があり、タスクグループＴの種類は周期タスクである。また、タスクグループＴの周期は１０である。周期の時間単位は実際のタスクグループの周期に則した値であっても良いし、そうでなくても良い。ただし、後で説明する処理時間と同じにする必要がある。
【００２１】
タスク名は、タスクグループＴに含まれる７つのタスクの名称である。ここではタスクグループ名のＴの後に、数字の０から連続する７つの正の整数を付加している。処理時間はそのタスクを処理するのに必要な時間である。
【００２２】
開始タスクＴ０は７つのタスクの中で、処理の開始を意味するタスクである。ただし、開始タスクＴ０には処理の実体はなく、そのため開始タスクＴ０の処理時間は０となっている。
【００２３】
終了タスクＴ６は７つのタスクの中で、処理の終了を意味するタスクである。ただし、終了タスクＴ６には処理の実体はなく、そのため終了タスクＴ６の処理時間は０となっている。
【００２４】
先行タスク数は７つのタスクについて、そのタスクの直前に処理が行われるタスクの数を意味する。タスクＴ０は開始タスクであるためその先行タスク数は０である。タスクＴ１からタスクＴ４までは先行タスク数が１であり、タスクＴ５は２、タスクＴ６は３である。
【００２５】
先行タスクは７つのタスクについてその直前に処理が行われるタスクのタスク名を意味する。タスクＴ１からタスクＴ３までは、その先行タスクがＴ０であり、タスクＴ４はその先行タスクがタスクＴ１、タスクＴ５はその先行タスクがタスクＴ１とタスクＴ３、終了タスクＴ６の先行タスクは、タスクＴ２、Ｔ４とＴ５である。
【００２６】
図３はタスクグラフの例である。図２のタスクグループ情報に基づいて作成したものである。図３において符号３０のついた円は開始タスクＴ０を表す。他の円も同様に、円の中にかかれたタスク名のタスクを表す。タスクＴ０（３０）の左にある符号３１のついた０はタスクＴ０（３０）の処理時間を表す。他の円の左にある数も同様に、それらの右にあるタスクの処理時間を表す。タスクＴ０（３０）からタスクＴ２（３３）に向かっている矢印（３２）は、タスクの依存関係を表す。矢印の元にあるタスクの処理が終了しないと矢印の先にあるタスクは処理を開始できないことを意味する。
【００２７】
図４は優先度テーブルの例である。図３のタスクグラフに基づいて作成したものである。優先度テーブルは、処理実体のあるタスクＴ１からＴ５までについて作成する。処理時間にはそれぞれのタスクの処理時間が入力されている。クリティカルパスは、そのタスクから終了タスクＴ６までの経路のうちで、処理時間の合計が最も大きくなるものの値を意味する。例えば、タスクＴ１のパスは、Ｔ１→Ｔ４→Ｔ６という処理時間の合計が４のパスと、Ｔ１→Ｔ５→Ｔ６という処理時間の合計が３のパスの２つが存在する。この２つのパスのうち、Ｔ１→Ｔ４→Ｔ６のパスの処理時間が最も大きくなるため、その時間４がタスクＴ１のクリティカルパスとなる。他のタスクについても同様にしてクリティカルパスを得ることができる。優先度はタスクの実行順番を意味する。ここでは、優先度はタスクのクリティカルパスの大きい順番になっている。タスクＴ２とタスクＴ３はクリティカルパスが同じであるため、それらの優先度はタスク名に付けられている数の小さい順番にしている。
【００２８】
図５はタスクスケジューリングの例である。図４の優先度テーブルに基づいて作成したものである。ここではＰ１とＰ２という２つのコアにタスクを割り当てる例を示している。空きのあるコアに優先度の高い順番にタスクを割り当てる。まず時間０では、タスクＴ１をコアＰ１に割り当て、タスクＴ２をコアＰ２に割り当てる。次に時間２では、コアＰ１に割り当てていたタスクＴ１の処理が終了したため、タスクＴ３をコアＰ１に割り当てる。次に時間３では、コアＰ２に割り当てていたタスクＴ２の処理が終了したため、タスクＴ４をコアＰ２に割り当てる。次に時間４では、コアＰ１に割り当てていたタスクＴ３の処理が終了したため、タスクＴ５をコアＰ１に割り当てる。そして時間５で、コアＰ１に割り当てていたタスクＴ５の処理が終了し、コアＰ２に割り当てていたタスクＴ４の処理が終了する。
【００２９】
図６は３つのタスクグループＡ、Ｂ、Ｃのタスクグラフと優先度テーブルの例である。タスクグループＡは６つのタスクを含み、タスクグループＢは７つのタスクを含み、タスクグループＣは７つのタスクを含む。
【００３０】
図７はタスクグループ間時間制約の第１の例である。ここで、タスクグループ間時間制約数が０とは、タスクグループ間に時間制約が無いことを意味する。すなわち、タスクグループＡ、Ｂ、Ｃの間には依存関係が無いことになる。
【００３１】
図８は図６のタスクグラフと図７のタスクグループ間時間制約から作成した全体タスクグラフである。タスクグループＡ、Ｂ、Ｃの間には依存関係が無いため、３つのタスクグラフは完全に独立している。
【００３２】
図９は図８の全体タスクグラフから作成した優先度テーブルである。ここで処理時間とクリティカルパスの値は、図６の優先度テーブルに書かれた値と同じである。優先度はタスクグループＡ、Ｂ、Ｃのタスクをまとめて、クリティカルパスの大きい順番になっている。クリティカルパスが同じ場合は、クリティカルパス表の左から右に優先度を付けている。
【００３３】
図１０は図９の優先度テーブルに基づいてタスクをコアに割り当てたスケジューリング結果である。タスクグループＡ、Ｂ、Ｃの間には依存関係が無いため、時間０から時間１３の間に、各タスクグループのタスクが交互に割り当てられている様子が分かる。
【００３４】
図１１はタスクグループ間時間制約の第２の例である。ここで、タスクグループ間時間制約数が２とは、タスクグループ間に時間制約が２つあることを意味する。
【００３５】
時間制約１の先行タスクと時間制約１の後続タスクは、１つ目の時間制約における依存関係のあるタスクを意味し、先行タスクは先に処理されるタスク、後続タスクは後に処理されるタスクを意味する。ここでは、タスクグループＡのタスクＡ５が処理を終了した後、タスクグループＢのタスクＢ０が処理を開始できることを意味する。
【００３６】
時間制約２の先行タスクと時間制約２の後続タスクは、２つ目の時間制約における依存関係のあるタスクを意味し、先行タスクは先に処理されるタスク、後続タスクは後に処理されるタスクを意味する。ここでは、タスクグループＢのタスクＢ６が処理を終了した後、タスクグループＣのタスクＣ０が処理を開始できることを意味する。
【００３７】
図１２は図６のタスクグラフと図１１のタスクグループ間時間制約から作成した全体タスクグラフである。タスクグループＡとタスクグループＢの間には、タスクＡ５が終了した後にタスクＢ０を開始できるという時間制約がある。またタスクグループＢとタスクグループＣの間には、タスクＢ６が終了した後にタスクＣ０を開始できるという時間制約がある。タスクグループＢのタスクＢ６の先には、タスクグループＣのタスクＣ０のパスがある。そこで、タスクＢ６からタスクＣ０への矢印の元にタスクＣ０のクリティカルパス（４０−Ｂ）を表記する。同様に、タスクグループＡのタスクＡ５の先には、タスクグループＢのタスクＢ０のパスがある。そこで、タスクＡ５からタスクＢ０への矢印の元にタスクＢ０のクリティカルパス（４０−Ａ）を表記する。
【００３８】
図１３は図１２の全体タスクグラフから作成した優先度テーブルである。ここで処理時間の値は、図６の優先度テーブルに書かれた値と同じである。クリティカルパスの値は、図１２の全体タスクグラフに基づいて作成し直している。すなわち、タスクＡ１からＡ４までは、元のクリティカルパスに対して９大きい値となっており、これは図１２の符号４０−Ａが付けられた値である。タスクＢ１からＢ５までは、元のクリティカルパスに対して５大きい値となっており、これは図１２の符号４０−Ｂが付けられた値である。タスクＣ１からＣ５までは、元のクリティカルパスと同じ値である。優先度はタスクグループＡ、Ｂ、Ｃのタスクをまとめて、クリティカルパスの大きい順番になっている。クリティカルパスが同じ場合は、クリティカルパス表の左から右に優先度を付けている。
【００３９】
図１４は図１３の優先度テーブルに基づいてタスクをコアに割り当てたスケジューリング結果である。タスクグループＡ、Ｂ、Ｃの間には依存関係があり、タスクグループＡの処理が終了した後にタスクグループＢの処理を開始し、タスクグループＢの処理が終了した後にタスクグループＣの処理を開始する。時間０から時間１４の間に、各タスクグループＡ、Ｂ、Ｃの順番にタスクが割り当てられている様子が分かる。
【００４０】
図１５はタスクグループ間時間制約の第３の例である。ここで、タスクグループ間時間制約数は２つある。時間制約１の先行タスクと時間制約１の後続タスクの情報から、タスクグループＡのタスクＡ４が処理を終了した後、タスクグループＢのタスクＢ３が処理を開始できることを意味する。また、時間制約２の先行タスクと時間制約２の後続タスクの情報から、タスクグループＢのタスクＢ５が処理を終了した後、タスクグループＣのタスクＣ０が処理を開始できることを意味する。
【００４１】
図１６は図６のタスクグラフと図１５のタスクグループ間時間制約から作成した全体タスクグラフである。タスクグループＡとタスクグループＢの間には、タスクＡ４が終了した後にタスクＢ３を開始できるという時間制約がある。またタスクグループＢとタスクグループＣの間には、タスクＢ５が終了した後にタスクＣ０を開始できるという時間制約がある。タスクグループＢのタスクＢ５の先には、タスクグループＣのタスクＣ０のパスがある。そこで、タスクＢ５からタスクＣ０への矢印の元にタスクＣ０のクリティカルパス（４１−Ｂ）を表記する。同様に、タスクグループＡのタスクＡ４の先には、タスクグループＢのタスクＢ３のパスがある。そこで、タスクＡ４からタスクＢ３への矢印の元にタスクＢ３のクリティカルパス（４１−Ａ）を表記する。
【００４２】
図１７は図１６の全体タスクグラフから作成した優先度テーブルである。ここで処理時間の値は、図６の優先度テーブルに書かれた値と同じである。クリティカルパスの値は、図１６の全体タスクグラフに基づいて作成し直している。すなわち、タスクＡ１、Ａ２、Ａ４は、元のクリティカルパスに対して４大きい値となっており、これは図１６の符号４１−Ａが付けられた値である。タスクＢ１、Ｂ２、Ｂ５は、元のクリティカルパスに対して５大きい値となっており、これは図１６の符号４１−Ｂが付けられた値である。その他のタスクは、元のクリティカルパスと同じ値である。優先度はタスクグループＡ、Ｂ、Ｃのタスクをまとめて、クリティカルパスの大きい順番になっている。クリティカルパスが同じ場合は、クリティカルパス表の左から右に優先度を付けている。
【００４３】
図１８は図１７の優先度テーブルに基づいてタスクをコアに割り当てたスケジューリング結果である。タスクグループＡ、Ｂ、Ｃの間には依存関係があり、タスクグループＡのタスクＡ４処理が終了した後にタスクグループＢのタスクＢ３の処理を開始し、タスクグループＢのタスクＢ５の処理が終了した後にタスクグループＣの処理を開始する。時間０から時間１３の間に、上記タスクグループ間時間制約を満たしつつ、各タスクグループのタスクが交互に割り当てられている様子が分かる。
【００４４】
図１９は図６の３つのタスクグループＡ、Ｂ、Ｃが異なる周期を持つ場合のタスクグループ情報の例である。タスクグループＡの周期は８、タスクグループＢの周期は１６、タスクグループＣの周期は３２である。
【００４５】
図２０は図１９のタスクグループＡ、Ｂ、Ｃの実行時間の関係を表す図である。時間０から３２の間に、タスクグループＡ（５０−Ａ）を４回、タスクグループＢ（５０−Ｂ）を２回、タスクグループＣ（５０−Ｃ）を１回実行する。タスクグループＡは、各周期において時間８以内に処理を終了させる必要がある。タスクグループＢは、各周期において時間１６以内に処理を終了させる必要がある。タスクグループＣは、各周期において時間３２以内に処理を終了させる必要がある。すなわち、周期のより短いタスクを優先して実行し、周期の短いタスクの実行が終わったら次に周期の短いタスクを実行する。
【００４６】
図２１は図１９のタスクグループＡ、Ｂ、Ｃのコア割り当ての手順を表すフローチャートである。まず、ステップ６０でタスクグループＡをコアに割り当てる。これは１周期目の処理である。タスクグループＡのコア割り当てが終わったら、ステップ６１で残り時間にタスクグループＢをコアに割り当てる。これは１周期目の処理である。
【００４７】
次にステップ６２でタスクグループＡをコアに割り当てる。これは２周期目の処理である。タスクグループＡのコア割り当てが終わったら、ステップ６３で残り時間にタスクグループＢをコアに割り当てる。これはタスクグループＢの１周期目の処理である。タスクグループＢのコア割り当てが終わったら、ステップ６４で残り時間にタスクグループＣをコアに割り当てる。
【００４８】
次にステップ６５でタスクグループＡをコアに割り当てる。これは３周期目の処理である。タスクグループＡのコア割り当てが終わったら、ステップ６６で残り時間にタスクグループＢをコアに割り当てる。これはタスクグループＢの２周期目の処理である。
【００４９】
次にステップ６７でタスクグループＡをコアに割り当てる。これは４周期目の処理である。タスクグループＡのコア割り当てが終わったら、ステップ６８で残り時間にタスクグループＢをコアに割り当てる。これはタスクグループＢの２周期目の処理である。タスクグループＢのコア割り当てが終わったら、ステップ６９で残り時間にタスクグループＣをコアに割り当てる。
【００５０】
図２２は図１９のタスクグループＡ、Ｂ、Ｃにおけるタスクの処理時間とクリティカルパスを表すテーブルである。
【００５１】
図２３は図１９のタスクグループＡ、Ｂ、Ｃを、図２１のフローチャートと図２２のテーブルに基づいてコアに割り当てを行ったスケジューリング結果である。（１）はタスクグループＡの１周期目のスケジューリングである。タスクＡ１、Ａ２、Ａ４をコアに割り当てた後、時間３でタスクＡ３をコアＰ１に割り当てると、タスクグループＡのコア割り当ては終了する。そこで、次に周期の短いタスクグループＢのコア割り当てを行う。タスクＢ１、Ｂ３、Ｂ２をコアに割り当てると、次にコアが空く時間が８になり、それはタスクグループＡの次の周期の開始時間になる。そこで、タスクグループＢのコア割り当てはここで中断となる。
【００５２】
（２）はタスクグループＡの２周期目のスケジューリングである。タスクＡ１、Ａ２、Ａ４をコアに割り当てた後、時間１１でタスクＡ３をコアＰ１に割り当てると、タスクグループＡのコア割り当ては終了する。そこで、中断していたタスクグループＢのコア割り当てを再開する。タスクＢ５をコアＰ１に割り当てると、タスクグループＢのコア割り当ては終了する。そこでタスクグループＣのコア割り当てを行う。タスクＣ２、Ｃ１、Ｃ４、Ｃ３をコアに割り当てると、次にコアが空く時間が１６になり、それはタスクグループＡの次の周期の開始時間になる。そこで、タスクグループＣのコア割り当てはここで中断となる。
【００５３】
（３）はタスクグループＡの３周期目のスケジューリングである。タスクＡ１、Ａ２、Ａ４をコアに割り当てた後、時間１９でタスクＡ３をコアＰ１に割り当てると、タスクグループＡのコア割り当ては終了する。そこで、次に周期の短いタスクグループＢのコア割り当てを行う。タスクＢ１、Ｂ３、Ｂ２をコアに割り当てると、次にコアが空く時間が２４になり、それはタスクグループＡの次の周期の開始時間になる。そこで、タスクグループＢのコア割り当てはここで中断となる。
【００５４】
（４）はタスクグループＡの４周期目のスケジューリングである。タスクＡ１、Ａ２、Ａ４をコアに割り当てた後、時間２７でタスクＡ３をコアＰ１に割り当てると、タスクグループＡのコア割り当ては終了する。そこで、中断していたタスクグループＢのコア割り当てを再開する。タスクＢ５をコアＰ１に割り当てると、タスクグループＢのコア割り当ては終了する。そこで中断していたタスクグループＣのコア割り当てを行う。タスクＣ５をコアＰ２に割り当てると、タスクグループＣのコア割り当ては終了する。以上で、タスクグループＡ、Ｂ、Ｃのスケジューリングは終了する。
【００５５】
図２４はイベントであるタスクグループＤのタスクグループ情報である。タスクグループ名はＤであり、そのタスク数は３である。タスクグループＤの種類はイベントである。また、タスクグループＤの周期は４である。これは、イベントであるタスクグループＤの発生頻度が最も多い場合の値としている。
【００５６】
タスク名は、タスクグループＤに含まれる３つのタスクの名称である。ここではタスクグループ名のＤの後に、数字の０から連続する３つの正の整数を付加している。処理時間はそのタスクを処理するのに必要な時間である。
【００５７】
開始タスクはＤ０、終了タスクはＤ２である。先行タスク数は、タスクＤ０が０、タスクＤ１とタスクＤ２が１である。先行タスクはタスクＤ１の先行タスクがＤ０、タスクＤ２の先行タスクがＤ１である。
【００５８】
図２５は図６の２つのタスクグループＡ、Ｂと図１１のタスクグループ間時間制約と図２４のタスクグループＤから作成した全体タスクグラフである。タスクグループＡとＢの間には依存関係が無いため、２つのタスクグラフは完全に独立している。また、タスクグループＡとＢの周期は１６であるとする。イベントＤは周期が４であるため、タスクグループＡとＢの処理に対して４回発生することになる。イベントＤのタスクグラフは、処理時間が１のタスクＤ１が４つ（７０、７１、７２、７３）である。
【００５９】
図２６は図２５の全体タスクグラフから作成した優先度テーブルである。ここでタスクグループＡとＢについては、処理時間とクリティカルパスの値は、図６の優先度テーブルに書かれた値と同じである。イベントＤについては、４回発生するタスクＤ１をＤ１−１、Ｄ１−２、Ｄ１−３、Ｄ１−４と表している。タスクＤ１のクリティカルパスは、次のようにして計算した。タスクグループＡとＢのうち最も大きいクリティカルパス５をタスクＤ１−１のクリティカルパスの値とする。そして、それを発生回数４で割った値１．２５をタスクＤ１のクリティカルパスの減少値とする。タスクＤ１−２のクリティカルパスの値はタスクＤ１−１のクリティカルパスの値５から減少値１．２５を引いた３．７５とする。同様にして、タスクＤ１−３とＤ１−４のクリティカルパスの値はそれぞれ２．５、１．２５となる。優先度はタスクグループＡ、ＢとイベントＤのタスクをまとめて、クリティカルパスの大きい順番になっている。クリティカルパスが同じ場合は、クリティカルパス表の左から右に優先度を付けている。
【００６０】
図２７は図２６の優先度テーブルに基づいてタスクをコアに割り当てたスケジューリング結果である。タスクグループＡとＢの間には依存関係が無いため、時間０から時間１１の間にそれぞれのタスクが交互に割り当てられている様子が分かる。また、４回のイベントＤ１−１、Ｄ１−２、Ｄ１−３、Ｄ１−４が、時間０から時間１１の間に分散して割り当てられている様子が分かる
【符号の説明】
【００６１】
１０  仕様書
１１  プログラム
１２  タスクグループ情報作成
１３−Ａ、１３−Ｂ、１３−Ｃ  タスクグループ情報
１４  タスクグラフ作成
１５−Ａ、１５−Ｂ、１５−Ｃ  タスクグラフ
１６  タスクグループ間時間制約作成
１７  タスクグループ間時間制約
１８  全体タスクグラフ作成
１９  全体タスクグラフ
２０  優先度テーブル作成
２１  優先度テーブル
２２  コア割り当て
２３−０、２３−１  コアスケジューリング
３０  タスクＴ０
３１  タスクの処理時間
３２  タスクの依存関係
３３  タスクＴ２
４０−Ａ  タスクＢ０のクリティカルパス
４０−Ｂ  タスクＣ０のクリティカルパス
４１−Ａ  タスクＢ３のクリティカルパス
４１−Ｂ  タスクＣ０のクリティカルパス
５０−Ａ  タスクグループＡの実行
５０−Ｂ  タスクグループＢの実行
５０−Ｃ  タスクグループＣの実行
６０〜６９  タスクグループＡ、Ｂ、Ｃのコア割り当ての手順
７０、７１、７２、７３  タスクＤ１
【図１】
2020173622.tif 000003
【図２】
2020173622.tif 000004
【図３】
2020173622.tif 000005
【図４】
2020173622.tif 000006
【図５】
2020173622.tif 000007
【図６】
2020173622.tif 000008
【図７】
2020173622.tif 000009
【図８】
2020173622.tif 000010
【図９】
2020173622.tif 000011
【図１０】
2020173622.tif 000012
【図１１】
2020173622.tif 000013
【図１２】
2020173622.tif 000014
【図１３】
2020173622.tif 000015
【図１４】
2020173622.tif 000016
【図１５】
2020173622.tif 000017
【図１６】
2020173622.tif 000018
【図１７】
2020173622.tif 000019
【図１８】
2020173622.tif 000020
【図１９】
2020173622.tif 000021
【図２０】
2020173622.tif 000022
【図２１】
2020173622.tif 000023
【図２２】
2020173622.tif 000024
【図２３】
2020173622.tif 000025
【図２４】
2020173622.tif 000026
【図２５】
2020173622.tif 000027
【図２６】
2020173622.tif 000028
【図２７】
2020173622.tif 000029