(57)【特許請求の範囲】
【請求項１】
少なくとも第１の処理デバイス及び第２の処理デバイスにタスクを実行させるための制御装置であって、
前記第１の処理デバイスに実行させるためのタスクを格納する第１のタスクキューと、
前記第２の処理デバイスに実行させるためのタスクを格納する第２のタスクキューと、
前記第１の処理デバイスが実行中のタスクの優先度より高い優先度のタスクが前記第１のタスクキューに挿入されると、前記第１の処理デバイスが実行中のタスクを中断させ、前記第１のタスクキュー内の前記優先度が高いタスクを前記第１の処理デバイスに実行させる第１のデバイスドライバと、
第１の場合には、前記中断されたタスクを前記第１の処理デバイスに実行させるために前記中断されたタスクを前記第１のタスクキューに挿入し、第２の場合には、前記中断されたタスクを前記第２の処理デバイスに実行させるために前記中断されたタスクを前記第２のタスクキューに挿入するスケジューラと
を有することを特徴とする制御装置。
【請求項２】
前記スケジューラは、前記中断されたタスクを前記第１の処理デバイスに実行させる場合に前記中断されたタスクの実行が完了するまでの処理時間、及び前記中断されたタスクを前記第２の処理デバイスに実行させる場合に前記中断されたタスクの実行が完了するまでの処理時間を予測し、前記第１の処理デバイスの予測処理時間が前記第２の処理デバイスの予測処理時間より短い場合には、前記中断されたタスクを前記第１のタスクキューに挿入し、前記第２の処理デバイスの予測処理時間が前記第１の処理デバイスの予測処理時間より短い場合には、前記中断されたタスクを前記第２のタスクキューに挿入することを特徴とする請求項１記載の制御装置。
【請求項３】
前記スケジューラは、前記中断されたタスクの処理を前記中断されたポイントから前記第１の処理デバイスに再開させるために前記中断されたタスクを前記第１のタスクキューに挿入、又は前記中断されたタスクの処理を前記中断されたポイントから前記第２の処理デバイスに再開させるために前記中断されたタスクを前記第２のタスクキューに挿入することを特徴とする請求項１又は２記載の制御装置。
【請求項４】
前記スケジューラは、前記中断されたタスクの処理を前記中断されたポイントから前記第１の処理デバイス又は前記第２の処理デバイスに再開させるために、前記中断されたタスクに対応する前記第１の処理デバイスのメモリの状態を保持することを特徴とする請求項３記載の制御装置。
【請求項５】
前記スケジューラは、前記中断されたタスクの処理を前記中断されたポイントから前記第１の処理デバイス又は前記第２の処理デバイスに再開させるために、前記中断されたタスクに対応する前記第１の処理デバイスの実行パイプラインの各ステージの状態を保持することを特徴とする請求項３又は４記載の制御装置。
【請求項６】
前記制御装置は、前記第１の処理デバイス及び前記第２の処理デバイスを含む複数の処理デバイスにタスクを実行させるための制御装置であって、
前記制御装置は、さらに、タスクの種類毎に、前記第１及び第２の処理デバイスを含む複数の処理デバイスの各々のタスク処理時間を記憶するデータベースを有し、
前記スケジューラは、前記データベースを参照し、入力されたタスクに対し、前記複数の処理デバイスの各々のタスク処理時間の中で、前記第１の処理デバイスのタスク処理時間が最も短く、かつ前記第１の処理デバイスが他のタスクを実行中でない場合には、前記入力されたタスクを前記第１のタスクキューに挿入することを特徴とする請求項１〜５のいずれか１項に記載の制御装置。
【請求項７】
前記スケジューラは、前記第１の処理デバイスが他のタスクを実行中である場合、前記入力されたタスクの優先度が前記第１の処理デバイスが実行中の他のタスクの優先度より高い場合には、前記入力されたタスクを前記第１のタスクキューに挿入することを特徴とする請求項６記載の制御装置。
【請求項８】
前記スケジューラは、プロセス毎のタスクディスクリプタを入力し、
前記タスクディスクリプタは、プロセス優先度及びタスク優先度を有し、
前記スケジューラは、
前記第１の処理デバイスが他のタスクを実行中である場合、
前記入力されたタスクの前記タスク優先度が前記第１の処理デバイスが実行中の他のタスクの前記タスク優先度より高い場合には、前記入力されたタスクを前記第１のタスクキューに挿入し、
前記入力されたタスクのタスク優先度が前記第１の処理デバイスが実行中の他のタスクのタスク優先度と同じ場合、前記入力されたタスクの前記プロセス優先度が前記第１の処理デバイスが実行中の他のタスクの前記プロセス優先度より高い場合には、前記入力されたタスクを前記第１のタスクキューに挿入することを特徴とする請求項６又は７記載の制御装置。
【請求項９】
前記タスクディスクリプタは、タスクの所望処理時間を有し、
前記スケジューラは、
前記入力されたタスクの前記プロセス優先度が前記第１の処理デバイスが実行中の他のタスクの前記プロセス優先度と同じ場合、前記入力されたタスクの前記所望処理時間が前記第１の処理デバイスが実行中の他のタスクの前記所望処理時間より短い場合には、前記入力されたタスクを前記第１のタスクキューに挿入することを特徴とする請求項８記載の制御装置。
【請求項１０】
第１のデバイスドライバにより、第１の処理デバイスが実行中のタスクの優先度より高い優先度のタスクが第１のタスクキューに挿入されると、前記第１の処理デバイスが実行中のタスクを中断させ、前記優先度が高いタスクを前記第１の処理デバイスに実行させ、
スケジューラにより、第１の場合には、前記中断されたタスクを前記第１の処理デバイスに実行させるために前記中断されたタスクを前記第１のタスクキューに挿入し、第２の場合には、前記中断されたタスクを第２の処理デバイスに実行させるために前記中断されたタスクを第２のタスクキューに挿入することを特徴とする制御方法。
【請求項１１】
第１の処理デバイスが実行中のタスクの優先度より高い優先度のタスクが第１のタスクキューに挿入されると、前記第１の処理デバイスが実行中のタスクを中断させ、前記優先度が高いタスクを前記第１の処理デバイスに実行させ、
第１の場合には、前記中断されたタスクを前記第１の処理デバイスに実行させるために前記中断されたタスクを前記第１のタスクキューに挿入し、第２の場合には、前記中断されたタスクを第２の処理デバイスに実行させるために前記中断されたタスクを第２のタスクキューに挿入する、
処理をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御装置、制御方法及びプログラムに関する。
【背景技術】
【０００２】
複数のマスタデバイス、スレーブデバイス及びメモリデバイスが互いにバス制御装置を介して接続された計算機システムが知られている（特許文献１参照）。その計算機システムは、各マスタデバイスの発行する転送要求パケットの内容に基づいて、バス制御装置が各デバイス間のデータ転送を制御する。転送要求パケットは、少なくともデータ転送の優先順位を示すフィールドを含み、かつこの優先順位が各マスタデバイス又はバス制御装置におけるハードウエアにて付加される。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平１１−９６１０８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
制御装置は、複数の処理デバイスにタスクを実行させることができる。しかし、複数の処理デバイスのうちで使用されていない処理デバイスがある場合には、処理デバイスの使用率が低下し、タスクの処理速度が低下してしまう。
【０００５】
本発明の目的は、処理デバイスの使用率を向上させ、タスクの処理速度を向上させることができる制御装置、制御方法及びプログラムを提供することである。
【課題を解決するための手段】
【０００６】
制御装置は、少なくとも第１の処理デバイス及び第２の処理デバイスにタスクを実行させるための制御装置であって、前記第１の処理デバイスに実行させるためのタスクを格納する第１のタスクキューと、前記第２の処理デバイスに実行させるためのタスクを格納する第２のタスクキューと、前記第１の処理デバイスが実行中のタスクの優先度より高い優先度のタスクが前記第１のタスクキューに挿入されると、前記第１の処理デバイスが実行中のタスクを中断させ、前記第１のタスクキュー内の前記優先度が高いタスクを前記第１の処理デバイスに実行させる第１のデバイスドライバと、第１の場合には、前記中断されたタスクを前記第１の処理デバイスに実行させるために前記中断されたタスクを前記第１のタスクキューに挿入し、第２の場合には、前記中断されたタスクを前記第２の処理デバイスに実行させるために前記中断されたタスクを前記第２のタスクキューに挿入するスケジューラとを有する。
【発明の効果】
【０００７】
処理デバイスの使用率を向上させ、タスクの処理速度を向上させることができる。
【図面の簡単な説明】
【０００８】
【図１】図１は、本実施形態による処理システムの構成例を示す図である。
【図２】図２は、タスクディスクリプタ、プログラム、データベース、デバイスモニタ、及びｎ個のデバイスドライバを示す図である。
【図３】図３は、タスクスケジューラの構成例を示す概念図である。
【図４】図４は、第２のデバイスがＦＰＧＡである場合の第２のデバイスの構成例を示す図である。
【図５】図５は、データベースの構成例を示す図である。
【図６】図６は、ＣＰＵが実行するタスクスケジューラの処理を示すフローチャートである。
【図７】図７は、ＣＰＵが実行する各デバイスドライバの処理を示すフローチャートである。
【図８】図８は、ＣＰＵが実行するタスクスケジューラの処理を示すフローチャートである。
【発明を実施するための形態】
【０００９】
図１は、本実施形態による処理システムの構成例を示す図である。処理システムは、ホストデバイス１００及びｎ個のデバイスＤＶ１〜ＤＶｎを有する。ホストデバイス１００は、バス１０１、中央処理ユニット（ＣＰＵ）１０２、メモリ１０３、ハードディスク装置１０４、コントローラ１０５、及びｎ個のインターフェースＩＦ１〜ＩＦｎを有する。バス１０１には、ＣＰＵ１０２、メモリ１０３、ハードディスク装置１０４及びコントローラ１０５が接続される。ｎ個のデバイスＤＶ１〜ＤＶｎは、それぞれ、ｎ個のインターフェースＩＦ１〜ＩＦｎに接続される。メモリ１０３及びハードディスク装置１０４には、プログラムが記憶される。ＣＰＵ１０２は、メモリ１０３及びハードディスク装置１０４に記憶されているプログラムを実行することにより、コントローラ１０５を制御する。コントローラ１０５は、ｎ個のインターフェースＩＦ１〜ＩＦｎを介して、ｎ個のデバイスＤＶ１〜ＤＶｎを制御する。具体的には、ホストデバイス１００は、ｎ個のデバイスＤＶ１〜ＤＶｎに対して、タスクを実行させるために、タスクを出力する。第１〜第ｎのデバイスＤＶ１〜ＤＶｎは、例えば、ＧＰＵ（graphics processing unit）、ＦＰＧＡ（field programmable gate array）、ＤＳＰ（digital signal processor）等であり、タスクの処理を実行する第１〜第ｎの処理デバイス（ハードウェアアクセラレータ）である。また、ホストデバイス１００も、タスクの処理を実行可能な第ｎ＋１の処理デバイスである。
【００１０】
図２は、ホストデバイス１００内のハードディスク装置１０４又はメモリ１０３に記憶されるタスクディスクリプタ２０１、プログラム２０２、データベース２０４、デバイスモニタ２０５、及びｎ個のデバイスドライバＤＲ１〜ＤＲｎを示す図である。
【００１１】
タスクディスクリプタ２０１は、デバイスＤＶ１〜ＤＶｎのいずれかに実行させるためのタスクである。タスクディスクリプタ２０１は、タスクプログラム２１１、プロセス優先度２１２、対象デバイス識別子２１３、所望処理時間２１４、元のタスク優先度２１５、現在のタスク優先度２１６、及びリルートフラグ２１７を有する。タスクプログラム２１１は、タスクの処理命令を示すプログラムである。
【００１２】
図３に示すように、第１のプロセス３０１は、第１のユーザによるタスクのグループであり、第１のプロセス３０１に属するタスクのプロセス優先度２１２（図２）は例えば「２」である。第２のプロセス３０２は、第２のユーザによるタスクのグループであり、第２のプロセス３０２に属するタスクのプロセス優先度２１２（図２）は例えば「１」である。すなわち、第１のプロセス３０１のプロセス優先度２１２は、第２のプロセス３０２のプロセス優先度２１２より高いので、第１のプロセス３０１のタスクは、第２のプロセス３０２のタスクに対して優先的に処理される。
【００１３】
図２の対象デバイス識別子２１３は、リルートフラグ２１７が「０」の場合に、デバイスＤＶ１〜ＤＶｎ及びホストデバイス１００の中で、自己のタスクが処理されるデバイスの識別子である。リルートフラグ２１７が「１」の場合、タスクスケジューラ２０３は、対象デバイス識別子２１３を無視し、デバイスＤＶ１〜ＤＶｎ及びホストデバイス１００の中で、自己のタスクが処理されるのに最適なデバイスを決定する。以下、リルートフラグ２１７が「１」の場合を説明する。
【００１４】
所望処理時間２１４は、自己のタスクの処理に要する所望所要時間を示す。元のタスク優先度２１５及び現在のタスク優先度２１６は、プロセス内の複数のタスクの中の自己のタスクの優先度を示す。元のタスク優先度２１５は、自己のタスクの優先度の初期値を示す。現在のタスク優先度２１６は、初期時には元のタスク優先度２１５と同じ優先度であり、その後に更新可能の現在の優先度である。
【００１５】
プログラム２０２、デバイスモニタ２０５及びデバイスドライバＤＲ１〜ＤＲｎは、プログラムである。図１のＣＰＵ１０２は、プログラム２０２、デバイスモニタ２０５及びデバイスドライバＤＲ１〜ＤＲｎの処理を実行することにより、後述の処理を実現する。
【００１６】
プログラム２０２は、例えば、ＯＳ（operating system）カーネル又はＯｐｅｎＣＬ  Ｒｕｎｔｉｍｅであり、タスクスケジューラ２０３を有する。タスクスケジューラ２０３は、プログラムであり、タスクディスクリプタ２０１、データベース２０４内のデータ、及びデバイスモニタ２０５の出力データを入力し、第１〜第ｎのデバイスドライバＤＲ１〜ＤＲｎを介して、第１〜第ｎのデバイスＤＶ１〜ＤＶｎを制御する。
【００１７】
第１〜第ｎのデバイスドライバＤＲ１〜ＤＲｎは、それぞれ、第１〜第ｎのデバイスＤＶ１〜ＤＶｎを制御するためのプログラムである。デバイスモニタ２０５は、第１〜第ｎのデバイスドライバＤＲ１〜ＤＲｎの出力データを入力し、第１〜第ｎのデバイスＤＶ１〜ＤＶｎのうちでタスクを実行中のデバイスをビジー状態としてタスクスケジューラ２０３に出力する。
【００１８】
図３は、タスクスケジューラ２０３の構成例を示す概念図である。第１のデバイスＤＶ１は、例えばＧＰＵである。第２のデバイスＤＶ２は、例えばＦＰＧＡである。第ｎのデバイスＤＶｎは、例えばＦＰＧＡである。
【００１９】
タスクスケジューラ２０３は、スケジューラ３０３及びタスクキューＱ１〜Ｑｎを有する。第１のタスクキューＱ１は、第１のデバイスＤＶ１に実行させるためのタスクを格納する。第１のデバイスＤＶ１は、第１のタスクキューＱ１に格納されているタスクを実行する。第２のタスクキューＱ２は、第２のデバイスＤＶ２に実行させるためのタスクを格納する。第２のデバイスＤＶ２は、第２のタスクキューＱ２に格納されているタスクを実行する。第ｎのタスクキューＱｎは、第ｎのデバイスＤＶｎに実行させるためのタスクを格納する。第ｎのデバイスＤＶｎは、第ｎのタスクキューＱｎに格納されているタスクを実行する。
【００２０】
第１のプロセス３０１は、第１のプロセス３０１に属するタスクのタスクディスクリプタ２０１（図２）をタスクスケジューラ２０２に出力する。第２のプロセス３０２は、第２のプロセス３０２に属するタスクのタスクディスクリプタ２０１（図２）をタスクスケジューラ２０２に出力する。スケジューラ３０３は、第１のプロセス３０１及び第２のプロセス３０２のタスクのタスクディスクリプタ２０１を入力し、タスクスケジューリングを行い、入力したタスクディスクリプタ２０１をタスクキューＱ１〜Ｑｎのうちのいずれかに挿入する。スケジューラ３０３は、プロセス毎のタスクディスクリプタ２０１を入力する。
【００２１】
図４は、第２のデバイスＤＶ２がＦＰＧＡである場合の第２のデバイスＤＶ２の構成例を示す図である。第２のデバイスＤＶ２は、インターフェース制御部４０１、メモリ制御部４０２、メモリ４０３、実行パイプライン４０４、及び実行環境記録部４０５を有する。インターフェース制御部４０１は、デバイスドライバＤＲ２を介して、タスクスケジューラ２０３に対して入出力を行う。実行パイプライン４０４は、ｍ個のステージＳＴ１〜ＳＴｍを有し、タスクをパイプライン実行する。メモリ４０３は、タスク及び実行結果等を記憶する。メモリ制御部４０２は、メモリ４０３の読み出し及び書き込みを制御する。
【００２２】
図２のタスクプログラム２１１の中には、複数のチェックポイントを組み込み可能である。例えば、タスクプログラム２１１のループ処理内にチェックポイントを組み込むことができる。タスクスケジューラ２０３は、第２のデバイスＤＶ２がタスクプログラム２１１を実行中に、タスクプログラム２１１内のチェックポイントで、タスクプログラム２１１の処理を中断させ、その後に、中断させたチェックポイントからタスクプログラム２１１の処理を再開させることができる。
【００２３】
実行環境記録部４０５は、タスクスケジューラ２０３から中断信号を入力すると、パイプライン制御信号４０６を実行パイプライン４０４に出力し、各ステージＳＴ１〜ＳＴｍの状態をメモリ４０３に記録する。そして、タスクスケジューラ２０３は、各ステージＳＴ１〜ＳＴｍの状態及びメモリ４０３の状態を退避（保持）する。
【００２４】
その後、タスクスケジューラ２０３は、タスクを再開させる場合、第２のデバイスＤＶ２に対して、退避させた各ステージＳＴ１〜ＳＴｍの状態及びメモリ４０３の状態に戻し、中断させたチェックポイントからタスクの処理を再開させる。
【００２５】
なお、ＦＰＧＡは、上記のように実行環境を記録する実行環境記録部４０５を有するが、ＧＰＵ及びＤＳＰは、実行環境を記録する実行環境記録部４０５を有しない。デバイスＤＶ１〜ＤＶｎは、インターフェース制御部４０１、メモリ制御部４０２、メモリ４０３及び実行部を有する。
【００２６】
図５は、データベース２０４の構成例を示す図である。データベース２０４は、ｎ＋１個のデバイスに対して、タスクのパターン記述毎のデータを記憶する。ｎ＋１個のデバイスは、第１〜第ｎのデバイスＤＶ１〜ＤＶｎ及び第ｎ＋１のデバイス（ホストデバイス）１００を有する。複数のタスクのパターン記述は、複数のタスクを種類を示す。
【００２７】
「処理時間」は、タスクの処理時間を示す。第１のパターン記述の場合、例えば、ｎ＋１個のデバイスの中で、第２のデバイスＤＶ２の処理時間（１２０ｍｓ）が最も短いので、第１のパターン記述のタスクは、第２のデバイスＤＶ２に実行させることが好ましい。
【００２８】
「環境セーブ」は、図４のように、実行環境を記録（セーブ）する実行環境記録部４０５の機能を有するか否かを示す。「処理中断可能タスク」は、実行中のタスクを中断可能なタスクであるか否かを示す。「チェックポイント組み込み」は、タスクプログラム２１１内にチェックポイントが組み込まれているか否かを示す。「次チェックポイントの時刻」は、タスクプログラム２１１内の次のチェックポイントの時刻を示し、例えば「２時５分２５秒２５０ｍ秒」である。
【００２９】
図６は、ＣＰＵ１０２が実行するタスクスケジューラ２０３の処理を示すフローチャートである。ステップＳ６０１では、ＣＰＵ１０２は、データベース２０４に基づいて、第１〜第ｎのデバイスＤＶ１〜ＤＶｎ及び第ｎ＋１のデバイス１００の中で、最も適切なデバイスを抽出する。例えば、ＣＰＵ１０２は、第１〜第ｎのデバイスＤＶ１〜ＤＶｎ及び第ｎ＋１のデバイス１００の中で、入力したタスクディスクリプタ２０１内のタスクプログラム２１１のパターン記述の「処理時間」が最も短いデバイスを抽出する。
【００３０】
次に、ステップＳ６０２では、ＣＰＵ１０２は、ステップＳ６０１で抽出したデバイスがビジー状態か否かを判定する。具体的には、ＣＰＵ１０２は、デバイスモニタ２０５の処理により、抽出したデバイスがタスクを実行中である場合にはビジー状態であると判定することができる。ビジー状態でない場合には、ステップＳ６０３に進み、ビジー状態である場合には、ステップＳ６０４に進む。
【００３１】
ステップＳ６０３では、ＣＰＵ１０２は、入力したタスクディスクリプタ２０１をそのまま、上記の抽出したデバイスに対応するタスクキューＱ１〜Ｑｎに挿入する。
【００３２】
ステップＳ６０４では、ＣＰＵ１０２は、データベース２０４を参照し、抽出したデバイスに対し、入力したタスクディスクリプタ２０１にチェックポイントが組み込まれているか否かを判定する。チェックポイントが組み込まれている場合には、ステップＳ６０５に進み、チェックポイントが組み込まれていない場合には、ステップＳ６１６に進む。
【００３３】
ステップＳ６０５では、ＣＰＵ１０２は、抽出したデバイスが実行中のタスクの現在のタスク優先度２１６と入力されたタスクの現在のタスク優先度２１６とを比較する。次に、ステップＳ６０６では、ＣＰＵ１０２は、入力されたタスクの現在のタスク優先度２１６が、抽出したデバイスが実行中のタスクの現在のタスク優先度２１６より高いか否かを判定する。入力されたタスクの現在のタスク優先度２１６が、抽出したデバイスが実行中のタスクの現在のタスク優先度２１６より高い場合には、ステップＳ６０７に進み、それ以外の場合には、ステップＳ６０８に進む。
【００３４】
ステップＳ６０７では、ＣＰＵ１０２は、入力したタスクディスクリプタ２０１をそのまま、上記の抽出したデバイスに対応するタスクキューＱ１〜Ｑｎに挿入する。
【００３５】
ステップＳ６０８では、ＣＰＵ１０２は、入力されたタスクの現在のタスク優先度２１６が、抽出したデバイスが実行中のタスクの現在のタスク優先度２１６と同じ優先度であるか否かを判定する。同じである場合には、ステップＳ６０９に進み、同じでない場合には、ステップＳ６１６に進む。
【００３６】
ステップＳ６０９では、ＣＰＵ１０２は、抽出したデバイスが実行中のタスクのプロセス優先度２１２と入力されたタスクのプロセス優先度２１２とを比較する。次に、ステップＳ６１０では、ＣＰＵ１０２は、入力されたタスクのプロセス優先度２１２が、抽出したデバイスが実行中のタスクのプロセス優先度２１２より高いか否かを判定する。入力されたタスクのプロセス優先度２１２が、抽出したデバイスが実行中のタスクのプロセス優先度２１２より高い場合には、ステップＳ６１１に進み、それ以外の場合には、ステップＳ６１３に進む。
【００３７】
ステップＳ６１３では、ＣＰＵ１０２は、入力されたタスクのプロセス優先度２１２が、抽出したデバイスが実行中のタスクのプロセス優先度２１２と同じ優先度であるか否かを判定する。同じである場合には、ステップＳ６１４に進み、同じでない場合には、ステップＳ６１６に進む。
【００３８】
ステップＳ６１４では、ＣＰＵ１０２は、抽出したデバイスが実行中のタスクの所望処理時間２１４と入力されたタスクの所望処理時間２１４とを比較する。次に、ステップＳ６１５では、ＣＰＵ１０２は、入力されたタスクの所望処理時間２１４が、抽出したデバイスが実行中のタスクの所望処理時間２１４より短いか否かを判定する。入力されたタスクの所望処理時間２１４が、抽出したデバイスが実行中のタスクの所望処理時間２１４より短い場合には、ステップＳ６１１に進み、それ以外の場合には、ステップＳ６１６に進む。
【００３９】
ステップＳ６１１では、ＣＰＵ１０２は、入力されたタスクの現在のタスク優先度２１６をインクリメントする。その後、ステップＳ６１２では、ＣＰＵ１０２は、ステップＳ６１１で更新された入力のタスクディスクリプタ２０１を、上記の抽出したデバイスに対応するタスクキューＱ１〜Ｑｎに挿入する。
【００４０】
ステップＳ６１６では、ＣＰＵ１０２は、データベース２０４を参照し、入力されたタスクを抽出されたデバイスに実行させる場合に、入力されたタスクの実行が完了するまでの処理時間を予測する。ここで、抽出されたデバイスはビジー状態であるので、ＣＰＵ１０２は、抽出されたデバイスが実行中のタスクが終了又は中断するまでの待ち時間を含む上記の処理時間を予測する。
【００４１】
その後、ステップＳ６１７では、ＣＰＵ１０２は、記録された予測処理時間があるか否かを判定する。初回では、未だ記録された予測処理時間はない。記録された予測処理時間がない場合には、ステップＳ６１８に進み、記録された予測処理時間がある場合には、ステップＳ６２０に進む。
【００４２】
ステップＳ６１８では、ＣＰＵ１０２は、抽出されたデバイスの識別子（ＩＤ）とステップＳ６１６で予測された処理時間を記録する。なお、この処理の後、次のステップＳ６１７の処理では、ＣＰＵ１０２は、記録された予測処理時間があると判定する。
【００４３】
その後、ステップＳ６１９では、ＣＰＵ１０２は、データベース２０４に基づいて、第１〜第ｎのデバイスＤＶ１〜ＤＶｎ及び第ｎ＋１のデバイス１００の中で、次に最も適切なデバイスを抽出する。例えば、ＣＰＵ１０２は、第１〜第ｎのデバイスＤＶ１〜ＤＶｎ及び第ｎ＋１のデバイス１００の中で、入力したタスクディスクリプタ２０１内のタスクプログラム２１１のパターン記述の「処理時間」が、上記の抽出されたデバイスの次に短いデバイスを抽出する。その後、ステップＳ６０２に戻る。
【００４４】
ステップＳ６２０では、ＣＰＵ１０２は、ステップＳ６１６で予測された新たな処理時間とステップＳ６１８で記録された処理時間とを比較する。次に、ステップＳ６２１では、ＣＰＵ１０２は、新たな処理時間が記録された処理時間より短いか否かを判定する。新たな処理時間が記録された処理時間より短い場合には、ステップＳ６２２に進み、それ以外の場合には、ステップＳ６２３に進む。
【００４５】
ステップＳ６２２では、ＣＰＵ１０２は、抽出されたデバイスの識別子（ＩＤ）とステップＳ６１６で予測された処理時間を、記録された予測処理時間として更新する。なお、この処理の後、次のステップＳ６２０の処理では、ＣＰＵ１０２は、ステップＳ６１６で予測された処理時間とステップＳ６２２で記録された予測処理時間とを比較する。その後、ステップＳ６２３に進む。
【００４６】
ステップＳ６２３では、ＣＰＵ１０２は、第１〜第ｎのデバイスＤＶ１〜ＤＶｎ及び第ｎ＋１のデバイス１００の中で、未だ抽出されていない他のデバイスが残っているか否かを判定する。残っている場合には、ステップＳ６２４に進み、残っていない場合には、ステップＳ６２５に進む。
【００４７】
ステップＳ６２４では、ＣＰＵ１０２は、データベース２０４に基づいて、第１〜第ｎのデバイスＤＶ１〜ＤＶｎ及び第ｎ＋１のデバイス１００の中で、次に最も適切なデバイスを抽出する。例えば、ＣＰＵ１０２は、第１〜第ｎのデバイスＤＶ１〜ＤＶｎ及び第ｎ＋１のデバイス１００の中で、入力したタスクディスクリプタ２０１内のタスクプログラム２１１のパターン記述の「処理時間」が、上記の抽出されたデバイスの次に短いデバイスを抽出する。その後、ステップＳ６０２に戻る。
【００４８】
ステップＳ６２５では、ＣＰＵ１０２は、入力のタスクディスクリプタ２０１を、記録されたデバイス識別子（ＩＤ）のデバイスに対応するタスクキューＱ１〜Ｑｎに挿入する。
【００４９】
図７は、ＣＰＵ１０２が実行する各デバイスドライバＤＲ１〜ＤＲｎの処理を示すフローチャートである。ステップＳ７０１では、ＣＰＵ１０２は、タスクキューＱ１〜Ｑｎの中身をそれぞれ確認する。
【００５０】
次に、ステップＳ７０２では、ＣＰＵ１０２は、タスクキューＱ１〜Ｑｎにタスクがあるか否かを判定する。タスクキューＱ１〜Ｑｎにタスクがある場合には、ステップＳ７０３に進み、タスクキューＱ１〜Ｑｎにタスクがない場合には、ステップＳ７０１に戻る。
【００５１】
ステップＳ７０３では、ＣＰＵ１０２は、タスクキューＱ１〜Ｑｎからタスクを引き出す。その後、ステップＳ７０４では、ＣＰＵ１０２は、引き出したタスクを、引き出したタスクキューに対応するデバイスＤＶ１〜ＤＶｎに実行させる。
【００５２】
次に、ステップＳ７０５では、ＣＰＵ１０２は、タスクを実行中のデバイスＤＶ１〜ＤＶｎが実行中のタスクプログラム２１１内のチェックポイントに至ったか否かを判定する。至った場合には、ステップＳ７０６に進み、至っていない場合には、ステップＳ７０９に進む。
【００５３】
ステップＳ７０６では、ＣＰＵ１０２は、デバイスＤＶ１〜ＤＶｎがタスクの実行を終了したか否かを判定する。終了している場合には、ステップＳ７０１に戻り、終了していない場合には、ステップＳ７０７に進む。
【００５４】
ステップＳ７０７では、ＣＰＵ１０２は、タスクキューＱ１〜Ｑｎに変化があったか否かを判定する。変化があった場合には、ステップＳ７０８に進み、変化がない場合には、ステップＳ７０９に進む。
【００５５】
ステップＳ７０８では、ＣＰＵ１０２は、デバイスＤＶ１〜ＤＶｎが実行中のタスクのタスク優先度２１６よりも、高いタスク優先度２１６のタスクがそのデバイスに対応するタスクキューの中にあるか否かを判定する。ある場合には、ステップＳ７１０に進み、ない場合には、ステップＳ７０９に進む。
【００５６】
ステップＳ７０９では、ＣＰＵ１０２は、デバイスＤＶ１〜ＤＶｎのタスクの実行を継続させる。その後、ステップＳ７０５に戻る。
【００５７】
ステップＳ７１０では、ＣＰＵ１０２は、タスク切り替え通知をタスクスケジューラ２０３の処理に送信する。
【００５８】
次に、ステップＳ７１１では、ＣＰＵ１０２は、ステップＳ７０８で判定されたデバイスが実行中のタスクの処理を中断させ、後述のタスク切り替え処理を行う。
【００５９】
次に、ステップＳ７１２では、ＣＰＵ１０２は、上記のタスクキュー内のタスク優先度２１６が高いタスクを、その中断させたデバイスに実行させる。その後、ステップＳ７０５に戻る。
【００６０】
図８は、ＣＰＵ１０２が実行するタスクスケジューラ２０３の処理を示すフローチャートであり、図７のステップＳ７１０のタスク切り替え通知を受信した場合のタスクスケジューラ２０３の処理を示す。
【００６１】
ステップＳ８０１では、ＣＰＵ１０２は、図７のステップＳ７１０のタスク切り替え通知を受信する。その後、ステップＳ８０２では、ＣＰＵ１０２は、図７のステップＳ７１１で中断されたタスクを再スケジューリングするため、その中断されたタスクを入力タスクとして、図６の処理を行う。
【００６２】
ステップＳ８０３では、ＣＰＵ１０２は、その再スケジューリングにより決定したレジューム方法を判定する。中断されたタスクが、中断されたデバイスと同じデバイスのタスクキューに挿入された場合には、ステップＳ８０４に進む。これに対し、中断されたタスクが、中断されたデバイスと異なるデバイスのタスクキューに挿入された場合には、ステップＳ８１１に進む。
【００６３】
ステップＳ８０４では、ＣＰＵ１０２は、中断されたデバイスがＦＰＧＡであるか否かを判定する。ＦＰＧＡである場合には、ステップＳ８０５に進み、ＦＰＧＡでない場合には、ステップＳ８０８に進む。
【００６４】
ステップＳ８０５では、ＣＰＵ１０２は、データベース２０４の「環境セーブ」を参照し、中断されたデバイスの実行環境をセーブ可能か否かを判定する。セーブ可能である場合には、ステップＳ８０６に進み、セーブ可能でない場合には、ステップＳ８０８に進む。
【００６５】
ステップＳ８０６では、ＣＰＵ１０２は、中断されたデバイス（ＦＰＧＡ）の実行環境（各ステージＳＴ１〜ＳＴｍの状態）をメモリ１０３の所定アドレスにセーブする。その後、ステップＳ８０７では、ＣＰＵ１０２は、上記のセーブした実行環境のアドレスを、中断したタスクのタスクディスクリプタ２０１に埋め込む。その後、ステップＳ８０８に進む。
【００６６】
ステップＳ８０８では、ＣＰＵ１０２は、中断されたデバイスのメモリ４０３の内容をホストデバイス１００のメモリ１０３にコピーする。その後、ステップＳ８０９では、ＣＰＵ１０２は、中断されたタスクの現在のタスク優先度２１６を元のタスク優先度２１５の値に戻す。その後、ステップＳ８１０では、ＣＰＵ１０２は、中断されたタスクのタスクディスクリプタ２０１を、中断されたデバイスに対応するタスクキューに挿入する。
【００６７】
その後、図７のステップＳ７１１では、ＣＰＵ１０２は、ステップＳ８０６でセーブされた実行環境を実行パイプライン４０４に戻し、ステップＳ８０８でコピーされたメモリ内容をメモリ４０３に戻す。その後、ステップＳ７１２では、ＣＰＵ１０２は、中断されたデバイスに対して、中断されたチェックポイントからタスクの処理を再開させる。なお、図８のステップＳ８０５において、実行環境をセーブ可能ではないと判定された場合、ステップＳ７１２では、ＣＰＵ１０２は、中断されたデバイスに対して、タスクを最初から実行させる。
【００６８】
図８のステップＳ８１１では、ＣＰＵ１０２は、中断されたデバイスのメモリ４０３の内容をホストデバイス１００のメモリ１０３にコピーする。その後、ステップＳ８１２では、ＣＰＵ１０２は、中断されたタスクが、ホストデバイス（第ｎ＋１のデバイス）１００のタスクキューに挿入されたか否かを判定する。ホストデバイス１００のタスクキューに挿入された場合には、ステップＳ８１３に進み、ホストデバイス１００のタスクキューに挿入されていない場合には、ステップＳ８１４へ進む。
【００６９】
ステップＳ８１３では、ＣＰＵ１０２は、ホストデバイス１００上で、レジュームのために、中断されたタスクの実行を再開させる。
【００７０】
ステップＳ８１４では、ＣＰＵ１０２は、ＦＰＧＡのデバイスのタスク実行を中断させ、中断されたタスクの処理を他のＦＰＧＡのデバイスに再開させるという条件を満たすか否かを判定する。その条件を満たす場合には、ステップＳ８１５に進み、その条件を満たさない場合には、ステップＳ８１８に進む。
【００７１】
ステップＳ８１５では、ＣＰＵ１０２は、データベース２０４の「環境セーブ」を参照し、中断されたデバイス（ＦＰＧＡ）の実行環境をセーブ可能か否かを判定する。セーブ可能である場合には、ステップＳ８１６に進み、セーブ可能でない場合には、ステップＳ８１８に進む。
【００７２】
ステップＳ８１６では、ＣＰＵ１０２は、中断されたデバイス（ＦＰＧＡ）の実行環境（各ステージＳＴ１〜ＳＴｍの状態）をメモリ１０３の所定アドレスにセーブする。その後、ステップＳ８１７では、ＣＰＵ１０２は、上記のセーブした実行環境のアドレスを、中断したタスクのタスクディスクリプタ２０１に埋め込む。その後、ステップＳ８１８に進む。
【００７３】
ステップＳ８１８では、ＣＰＵ１０２は、中断されたタスクの現在のタスク優先度２１６を元のタスク優先度２１５の値に戻す。その後、ステップＳ８１９では、ＣＰＵ１０２は、中断されたタスクのタスクディスクリプタ２０１を、再スケジューリングされた新たな他のデバイスに対応するタスクキューに挿入する。
【００７４】
その後、図７のステップＳ７１１では、ＣＰＵ１０２は、ステップＳ８１６でセーブされた実行環境を実行パイプライン４０４に戻し、ステップＳ８１１でコピーされたメモリ内容をメモリ４０３に戻す。その後、ステップＳ７１２では、ＣＰＵ１０２は、新たな他のデバイスに対して、中断されたチェックポイントからタスクの処理を再開させる。なお、図８のステップＳ８１５において、実行環境をセーブ可能ではないと判定された場合、ステップＳ７１２では、ＣＰＵ１０２は、中断されたデバイスに対して、タスクを最初から実行させる。
【００７５】
以上のように、図１の処理システムは、少なくとも第１のデバイスＤＶ１及び第２のデバイスＤＶ２を有する。ＣＰＵ１０２は、図７の第１のデバイスドライバＤＲ１の処理により、第１のデバイスＤＶ１が実行中のタスクのタスク優先度２１６より高いタスク優先度２１６のタスクが第１のタスクキューＱ１に挿入されると、第１のデバイスＤＶ１が実行中のタスクを中断させ、第１のタスクキューＱ１内の上記のタスク優先度が高いタスクを第１のデバイスＤＶ１に実行させる。
【００７６】
また、ＣＰＵ１０２は、図８のタスクスケジューラ２０３の処理により、中断されたタスクを第１のデバイスＤＶ１に実行させるために中断されたタスクを第１のタスクキューＱ１に挿入、又は中断されたタスクを第２のデバイスＤＶ２に実行させるために中断されたタスクを第２のタスクキューＱ２に挿入することができる。
【００７７】
具体的には、ＣＰＵ１０２は、図８のタスクスケジューラ２０３の処理により、中断されたタスクの処理を中断されたチェックポイントから第１のデバイスＤＶ１に再開させるために中断されたタスクを第１のタスクキューＱ１に挿入、又は中断されたタスクの処理を中断されたチェックポイントから第２のデバイスＤＶ２に再開させるために中断されたタスクを第２のタスクキューＱ２に挿入する。
【００７８】
また、ＣＰＵ１０２は、図８のタスクスケジューラ２０３の処理により、中断されたタスクの処理を中断されたチェックポイントから第１のデバイスＤＶ１又は第２のデバイスＤＶ２に再開させるために、中断されたタスクに対応する第１のデバイスＤＶ１のメモリ４０３の状態を保持する。
【００７９】
また、ＣＰＵ１０２は、図８のタスクスケジューラ２０３の処理により、中断されたタスクの処理を中断されたチェックポイントから第１のデバイスＤＶ１又は第２のデバイスＤＶ２に再開させるために、中断されたタスクに対応する第１のデバイスＤＶ１の実行パイプライン４０４の各ステージＳＴ１〜ＳＴｍの状態を保持する。
【００８０】
また、ＣＰＵ１０２は、図６のタスクスケジューラ２０３の処理により、中断されたタスクを第１のデバイスＤＶ１に実行させる場合に中断されたタスクの実行が完了するまでの処理時間、及び中断されたタスクを第２のデバイスＤＶ２に実行させる場合に中断されたタスクの実行が完了するまでの処理時間を予測する。そして、ＣＰＵ１０２は、第１のデバイスＤＶ１の予測処理時間が第２のデバイスＤＶ２の予測処理時間より短い場合には、中断されたタスクを第１のタスクキューＱ１に挿入する。また、ＣＰＵ１０２は、第２のデバイスＤＶ２の予測処理時間が第１のデバイスＤＶ１の予測処理時間より短い場合には、中断されたタスクを第２のタスクキューＱ２に挿入する。
【００８１】
データベース２０４は、タスクのパターン記述（タスクの種類）毎に、ｎ＋１個のデバイスＤＶ１〜ＤＶ２及び１００の各々のタスク処理時間を記憶する。ＣＰＵ１０２は、図６のタスクスケジューラ２０３の処理により、データベース２０４を参照し、入力されたタスクに対し、ｎ＋１個のデバイスＤＶ１〜ＤＶｎ及び１００の各々のタスク処理時間の中で、第１のデバイスＤＶ１のタスク処理時間が最も短く、かつ第１のデバイスＤＶ１が他のタスクを実行中でない場合には、入力されたタスクを第１のタスクキューＱ１に挿入する。
【００８２】
また、ＣＰＵ１０２は、図６のタスクスケジューラ２０３の処理により、第１のデバイスＤＶ１が他のタスクを実行中である場合、入力されたタスクのタスク優先度２１６が第１のデバイスＤＶ１が実行中の他のタスクのタスク優先度２１６より高い場合には、入力されたタスクを第１のタスクキューＱ１に挿入する。また、ＣＰＵ１０２は、入力されたタスクのタスク優先度２１６が第１のデバイスＤＶ１が実行中の他のタスクのタスク優先度２１６と同じ場合、入力されたタスクのプロセス優先度２１２が第１のデバイスＤＶ１が実行中の他のタスクのプロセス優先度２１２より高い場合には、入力されたタスクを第１のタスクキューＱ１に挿入する。
【００８３】
また、ＣＰＵ１０２は、図６のタスクスケジューラ２０３の処理により、入力されたタスクのプロセス優先度２１２が第１のデバイスＤＶ１が実行中の他のタスクのプロセス優先度２１２と同じ場合、入力されたタスクの所望処理時間２１４が第１のデバイスＤＶ１が実行中の他のタスクの所望処理時間２１４より短い場合には、入力されたタスクを第１のタスクキューＱ１に挿入する。
【００８４】
本実施形態によれば、第１〜第ｎのデバイスＤＶ１〜ＤＶ１及び第ｎ＋１のデバイス１００の状態を考慮した動的なタスクスケジューリングを行うことができるため、ｎ＋１個のデバイスのリソースを効率的に使用することができる。また、デバイスが実行中のタスクを中断し、優先度が高い他のタスクに切り替えて実行できるようになるため、リソースの使用率を向上させることができる。これにより、デバイスＤＶ１〜ＤＶｎの使用率を向上させ、タスクの処理速度を向上させることができる。
【００８５】
本実施形態は、コンピュータがプログラムを実行することによって実現することができる。また、上記のプログラムを記録したコンピュータ読み取り可能な記録媒体及び上記のプログラム等のコンピュータプログラムプロダクトも本発明の実施形態として適用することができる。記録媒体としては、例えばフレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、磁気テープ、不揮発性のメモリカード、ＲＯＭ等を用いることができる。
【００８６】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００８７】
１００  ホストデバイス
１０１  バス
１０２  中央処理ユニット（ＣＰＵ）
１０３  メモリ
１０４  ハードディスク装置
１０５  コントローラ
２０１  タスクディスクリプタ
２０２  プログラム
２０３  タスクスケジューラ
２０４  データベース
２０５  デバイスモニタ
ＤＶ１〜ＤＶｎ  デバイス
ＩＦ１〜ＩＦｎ  インターフェース
ＤＲ１〜ＤＲｎ  デバイスドライバ
【図１】
0006540294.tif 000002
【図２】
0006540294.tif 000003
【図３】
0006540294.tif 000004
【図４】
0006540294.tif 000005
【図５】
0006540294.tif 000006
【図６】
0006540294.tif 000007
【図７】
0006540294.tif 000008
【図８】
0006540294.tif 000009