(57)【要約】  システム全体の処理速度を向上させる。マルチコアプロセッサシステム（１００）は、割込処理の回数が多いスレッド（０−０）、スレッド（０−２）、スレッド（１−０）、スレッド（１−１）を実行している。さらに、マルチコアプロセッサシステム（１００）は、割込処理の回数が少ないスレッド（０−１）、スレッド（１−２）、スレッド（２−０）、スレッド（３−０）を実行している。マルチコアプロセッサシステム１００は、割込処理の回数が多いスレッド群を、ＣＰＵ（＃０）〜ＣＰＵ（＃３）で分散するように割り当てることで、ＣＰＵ（＃０）〜ＣＰＵ（＃３）での割込回数を均等にする。マルチコアプロセッサシステム（１００）は、実行状況に応じて負荷に基づいたスケジューリングか、割込処理の回数に基づいたスケジューリングか、のうち、いずれか一つを選択する。
2013014767.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータ処理装置で実行される複数のスレッドの割込処理の回数をカウントする割込コントローラと、
カウントされた前記割込処理の回数に基づいて複数のスケジューリング方法から一のスケジューリング方法を選択するスケジューリング方法選択ユニットと、
を含むことを特徴とするデータ処理システム。
【請求項２】
前記複数のスケジューリング方法は、前記複数のデータ処理装置の負荷に基づいてスケジューリングを行う第１スケジューリング方法と、前記割込処理の回数に基づいてスケジューリングを行う第２スケジューリング方法とを含むこと
を特徴とする請求項１に記載のデータ処理システム。
【請求項３】
第１のデータ処理装置が、第１スケジューリング方法にて前記第１のデータ処理装置を含む複数のデータ処理装置に第１の複数の処理を割り当て、
新たな処理を前記複数のデータ処理装置に割り当てるとき、前記新たな処理と前記第１の複数の処理とを含めた第２の複数の処理を前記第１スケジューリング方法でスケジューリングしたときの第１実行時間を算出し、
前記第２の複数の処理を前記第１スケジューリング方法とは異なる第２スケジューリング方法でスケジューリングしたときの第２実行時間を算出し、
前記第２の複数の処理を前記複数のデータ処理装置に割り当てるために、前記第１実行時間と前記第２実行時間との比較結果に基づいて、前記第１スケジューリング方法または前記第２スケジューリング方法を選択すること
を特徴とするスケジューリング方法。
【請求項４】
前記第１スケジューリング方法においては前記複数のデータ処理装置の負荷に基づいてスケジューリングが行われ、
前記第２スケジューリング方法においては前記第２の複数の処理における割込処理の回数に基づいてスケジューリングが行われること
を特徴とする請求項３に記載のスケジューリング方法。
【請求項５】
前記第１実行時間を算出する処理は、
前記第１スケジューリング方法でスケジューリングしたときに、前記複数のデータ処理装置の各々のデータ処理装置に割り当てられる処理の負荷量と当該処理の実行中に発生する割込処理にかかる時間との前記データ処理装置ごとの合計値のうち、最大の合計値を前記第１実行時間として算出し、
前記第２実行時間を算出する処理は、
前記第２スケジューリング方法でスケジューリングしたときに、前記複数のデータ処理装置の各々のデータ処理装置に割り当てられる処理の負荷量と当該処理の実行中に発生する割込処理にかかる時間との前記データ処理装置ごとの合計値のうち、最大の合計値を前記第２実行時間として算出すること
を特徴とする請求項３に記載のスケジューリング方法。
【請求項６】
前記第２スケジューリング方法において、
前記第２の複数の処理の中で割込処理が第１頻度で発生する処理を第２の複数のデータ処理装置に割り当て、
前記第２の複数の処理の中で割込処理が第２頻度で発生する処理を前記処理と同じプロセスに含まれる処理が割り当てられた前記複数のデータ処理装置の中のデータ処理装置に割り当てること
を特徴とする請求項３乃至請求項５の何れか一に記載のスケジューリング方法。
【請求項７】
前記第１頻度は前記第２頻度よりも高いこと
を特徴とする請求項６に記載のスケジューリング方法。
【請求項８】
前記第２頻度で発生する処理が割り当てられた後に、前記第２の複数の処理の中で割り当てられていない処理を、前記複数のデータ処理装置の負荷が均等になるように前記複数のデータ処理装置に割り当てること
を特徴とする請求項６または請求項７に記載のスケジューリング方法。
【請求項９】
第１のデータ処理装置が前記第１のデータ処理装置を含む複数のデータ処理装置に複数のスレッドを割り当てるスケジューリング方法において、
前記複数のスレッドの中で割込処理が第１頻度で発生するスレッドを第２の複数のデータ処理装置に割り当て、
前記複数のスレッドの中で割込処理が前記第１頻度よりも低い第２頻度で発生するスレッドを前記スレッドと同じプロセスに含まれるスレッドが割り当てられた前記複数のデータ処理装置の中のデータ処理装置に割り当てること
を特徴とするスケジューリング方法。
【請求項１０】
前記第２頻度で発生する処理が割り当てられた後に、前記第２の複数の処理の中で割り当てられていない処理を、前記複数のデータ処理装置の負荷が均等になるように前記複数のデータ処理装置に割り当てること
を特徴とする請求項９に記載のスケジューリング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スレッドを割り当てるデータ処理システム、およびスケジューリング方法に関する。
【背景技術】
【０００２】
近年、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が１つ搭載されたコンピュータであるシングルコアプロセッサシステムに代わって、ＣＰＵが複数搭載されたコンピュータであるマルチコアプロセッサシステムをとる装置が増えている。複数のＣＰＵに複数のスレッドを並列に割り当てることで、マルチコアプロセッサシステムは、高速にデータ処理を実行することができる。ここで、スレッドはプログラムの実行単位である。スレッドをどのＣＰＵに割り当てるかを決定するスケジューリング方法として、たとえば、各ＣＰＵの負荷が均等になるようにスケジューリングする技術が存在する。【０００３】
また、従来から、コンピュータシステムにおいて、デバイスからの割込信号に対して、ＣＰＵで実行中のスレッドを退避し、割込信号に対する割込処理を行う技術が存在する。これにより、コンピュータシステムは、デバイスからの割込信号に対する応答速度を向上させることができる。【０００４】
割込処理を考慮したスケジューリング方法に関連する技術として、たとえば、割込処理を行うＣＰＵを、実行中のスレッドの優先順位が低いＣＰＵに決定する技術が開示されている。また、割込負荷の最も低いＣＰＵが高優先度のプロセスを実行する技術が開示されている（たとえば、下記特許文献１〜４を参照。）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００４−３０６６３号公報
【特許文献２】特開２００６−２４３８６４号公報
【特許文献３】特開平０９−２８２１８８号公報
【特許文献４】特開２００１−３３１４６１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した従来技術において、スレッドの負荷が均等になるようにスレッドを各ＣＰＵに割り当てた場合、割込が頻発するスレッドが多数割り当てられたＣＰＵでは、スレッドの処理が遅延するという問題があった。具体的に、スレッドが実行される場合、ＣＰＵは実行モードの一つであるユーザモードで動作するが、割込処理が実行される場合、ＣＰＵはカーネルモードで動作するため、割込処理の処理時間である割込処理時間はスレッドの処理時間に含まれない。したがって、割込が頻発するスレッドが多数割り当てられたＣＰＵでは、スレッドの処理が進みにくくなり、実行状況によっては処理が遅延し、全体の処理が遅延するという問題があった。【０００７】
本発明は、上述した従来技術による問題点を解消するため、システム全体の処理速度を向上させるデータ処理システム、およびスケジューリング方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、複数のデータ処理装置で実行される複数のスレッドの割込処理の回数をカウントする割込コントローラと、カウントされた割込処理の回数に基づいて複数のスケジューリング方法から一のスケジューリング方法を選択するスケジューリング方法選択ユニットとを含むデータ処理システム、およびスケジューリング方法が提案される。
【発明の効果】
【０００９】
本発明の一側面によれば、システム全体の処理速度を向上できるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】図１は、マルチコアプロセッサシステム１００が負荷優先スケジューリング方法に従ってスレッドを割り当てた場合の動作を示す説明図である。
【図２】図２は、マルチコアプロセッサシステム１００が割込平準化優先スケジューリング方法に従ってスレッドを割り当てた場合の動作を示す説明図である。
【図３】図３は、マルチコアプロセッサシステム１００のハードウェア例を示すブロック図である。
【図４】図４は、マルチコアプロセッサシステム１００のソフトウェア例を示すブロック図である。
【図５】図５は、スケジューリング方法選択部４２４とマスタスケジューラ４２５の機能を示すブロック図である。
【図６】図６は、割込回数テーブル４０３の記憶内容の一例を示す説明図である。
【図７】図７は、スケジューリング情報テーブル４０４の一例を示す説明図である。
【図８】図８は、割込平準化優先スケジューリング方法に従ったスレッドの割当方法例を示す説明図（その１）である。
【図９】図９は、割込平準化優先スケジューリング方法に従ったスレッドの割当方法例を示す説明図（その２）である。
【図１０】図１０は、割込平準化優先スケジューリング方法に従ったスレッドの割当方法例を示す説明図（その３）である。
【図１１】図１１は、負荷優先スケジューリング方法による実行結果の一例を示す説明図である。
【図１２】図１２は、割込平準化優先スケジューリング方法による実行結果の一例を示す説明図である。
【図１３】図１３は、負荷優先スケジューリング方法による実行結果の他の例を示す説明図である。
【図１４】図１４は、割込平準化優先スケジューリング方法による実行結果の他の例を示す説明図である。
【図１５】図１５は、スケジューリング方法切替の判断例を示す説明図である。
【図１６】図１６は、Ｏ（Ｍ）の設定例を示す説明図である。
【図１７】図１７は、マスタＯＳのスケジューリング方法切替処理手順の一例を示すフローチャートである。
【図１８】図１８は、スレーブＯＳのスケジューリング方法切替処理手順の一例を示すフローチャートである。
【図１９】図１９は、割込平準化優先スケジューリング方法に従った割当処理手順の一例を示すフローチャートである。
【図２０】図２０は、本実施の形態にかかるコンピュータを用いたシステムの適用例を示す説明図である。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して、開示のデータ処理システム、およびスケジューリング方法の実施の形態を詳細に説明する。なお、本実施の形態にかかるデータ処理システムの例として、複数のＣＰＵを有するマルチコアプロセッサシステムにて説明を行う。１つのＣＰＵが、１つのデータ処理装置となる。マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例にあげて説明する。
【００１２】
図１は、マルチコアプロセッサシステム１００が負荷優先スケジューリング方法に従ってスレッドを割り当てた場合の動作を示す説明図である。図１で示す、複数のＣＰＵを有するマルチコアプロセッサシステム１００は、複数のＣＰＵの負荷が均等になるようにスレッドが割り当てられている。グラフ１０１では、各スレッドの割込回数を示しており、符号１０２で示すマルチコアプロセッサシステム１００は、負荷優先スケジューリング方法に従った場合のスレッドの割当状態を示している。
【００１３】
図１で示すマルチコアプロセッサシステム１００で実行中のスレッドは、スレッド０−０、スレッド０−１、スレッド０−２、スレッド１−０、スレッド１−１、スレッド１−２、スレッド２−０、スレッド３−０である。このうち、スレッド０−０〜スレッド０−２は、プロセス０に属しており、スレッド１−０〜スレッド１−２は、プロセス１に属している。プロセスとは、ＯＳにおける管理単位で、一つのプロセスには複数のスレッドが属することができる。同一のプロセスに属するスレッドは、メモリなどのＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が管理する計算機資源を共有することができる。なお、説明を簡略化するため、図１におけるスレッドの負荷は全て同一とする。
【００１４】
また、ＣＰＵ＃０はスレッド０−０とスレッド３−０を実行し、ＣＰＵ＃１はスレッド０−１とスレッド１−０を実行し、ＣＰＵ＃２はスレッド０−２とスレッド１−１を実行し、ＣＰＵ＃３はスレッド２−０とスレッド１−２を実行している。さらに、スレッド０−０、スレッド０−２、スレッド１−０、スレッド１−１は、割込処理が頻繁に発生するスレッドである。割込処理が頻繁に発生するスレッドの例としては、ハードウェアリソースにアクセスするスレッド等がある。ハードウェアから割込信号が発生すると、割込コントローラが割込信号を受信し、ＣＰＵに通知する。ＣＰＵは、割込信号に対応した割込処理を実行する。
【００１５】
グラフ１０１は、負荷優先スケジューリング方法に従ってスレッドを割り当てた場合の各ＣＰＵの割込回数の多さを表示したグラフである。グラフ１０１は、割込回数が多いスレッドが２つ割り当てられたＣＰＵ＃２が最も割込処理が多いことを示している。なお、割込回数は、割込コントローラによって割込処理の回数をカウントする。具体的に、割込コントローラは、割込信号を受信した際にＣＰＵにて割込処理が１回実行されることとして回数をインクリメントしておき、ＣＰＵは、他のスレッドに切り替えるときに、回数を取得することで、スレッドごとの割込回数を取得することができる。
【００１６】
割込回数が多いＣＰＵ＃２は、スレッド１−１とスレッド０−２の処理が遅延することになる。このとき、スレッド０−２と同一プロセスであるスレッド０−０、スレッド０−１がスレッド０−２の処理を待ち合わせている場合、スレッド０−０、スレッド０−１の処理も停止し、マルチコアプロセッサシステム１００全体の処理が遅延することになる。同様に、スレッド１−０、スレッド１−２もスレッド１−１の処理を待ち合わせている場合、スレッド１−０、スレッド１−２の処理も停止する。
【００１７】
図２は、マルチコアプロセッサシステム１００が割込平準化優先スケジューリング方法に従ってスレッドを割り当てた場合の動作を示す説明図である。割込平準化優先スケジューリング方法に従った場合、各スレッドは、割込処理時間を含めたスレッドの実行時間が均等になるようにＣＰＵに割り当てられている。グラフ２０１では、各スレッドの割込回数を示しており、符号２０２で示すマルチコアプロセッサシステム１００は、割込平準化優先スケジューリング方法に従った場合のスレッドの割当状態を示している。なお、図２におけるスレッド、プロセスの関係については、図１と同様であるとし、説明を省略する。
【００１８】
図２において、ＣＰＵ＃０は、スレッド０−０とスレッド０−１を実行し、ＣＰＵ＃１は、スレッド１−０とスレッド３−０を実行し、ＣＰＵ＃２はスレッド０−２とスレッド２−０を実行し、ＣＰＵ＃３はスレッド１−１とスレッド１−２を実行している。このように、マルチコアプロセッサシステム１００は、割込処理の回数が多いスレッド群を、ＣＰＵ＃０〜ＣＰＵ＃３で分散するように割り当てることで、ＣＰＵ＃０〜ＣＰＵ＃３での割込回数を均等にしている。
【００１９】
グラフ２０１は、割込平準化優先スケジューリング方法に従ってスレッドを割り当てた場合の各ＣＰＵの割込回数の多さを表示したグラフである。グラフ２０１は、各ＣＰＵでの割込回数が均等となっていることを示している。
【００２０】
なお、スレッドの負荷が異なる場合、負荷優先スケジューリング方法に従ってスレッドの割当を行った方が効率がよいときもある。したがって、マルチコアプロセッサシステム１００は、割込処理の回数から予測される実行時間に基づいて、負荷優先スケジューリング方法と割込平準化優先スケジューリング方法のいずれかのスケジューリング方法を選択する。これにより、マルチコアプロセッサシステム１００は、実行状況に応じて効率のより良いスケジューリング方法を選ぶことで、システム全体の処理速度を向上することができる。
【００２１】
（マルチコアプロセッサシステム１００のハードウェア）
図３は、マルチコアプロセッサシステム１００のハードウェア例を示すブロック図である。本実施の形態におけるマルチコアプロセッサシステム１００は、携帯電話などの携帯端末を想定している。図３において、マルチコアプロセッサシステム１００は、ＣＰＵｓ３０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３０３と、を含む。また、マルチコアプロセッサシステム１００は、フラッシュＲＯＭ３０４と、フラッシュＲＯＭコントローラ３０５と、フラッシュＲＯＭ３０６と、を含む。また、マルチコアプロセッサシステム１００は、ユーザやその他の機器との入出力装置として、ディスプレイ３０７と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）３０８と、キーボード３０９と、を含む。また、各部はバス３１０によってそれぞれ接続されている。
【００２２】
ここで、ＣＰＵｓ３０１は、マルチコアプロセッサシステム１００の全体の制御を司る。ＣＰＵｓ３０１は、ＣＰＵ＃０〜ＣＰＵ＃３を含む。また、ＣＰＵｓ３０１は、専用のキャッシュメモリを有してもよい。また、マルチコアプロセッサシステム１００は、複数のコアを含むマルチコアプロセッサシステムであってもよい。なお、マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、シングルコアのプロセッサであるＣＰＵが並列されている形態を例にあげて説明する。
【００２３】
ＲＯＭ３０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ３０３は、ＣＰＵｓ３０１のワークエリアとして使用される。フラッシュＲＯＭ３０４は、読出し速度が高速なフラッシュＲＯＭであり、たとえば、ＮＯＲ型フラッシュメモリである。たとえば、フラッシュＲＯＭ３０４は、ＯＳなどのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、ＯＳを更新する場合、マルチコアプロセッサシステム１００は、Ｉ／Ｆ３０８によって新しいＯＳを受信し、フラッシュＲＯＭ３０４に格納されている古いＯＳを、受信した新しいＯＳに更新する。
【００２４】
フラッシュＲＯＭコントローラ３０５は、ＣＰＵｓ３０１の制御に従ってフラッシュＲＯＭ３０６に対するデータのリード／ライトを制御する。フラッシュＲＯＭ３０６は、データの保存、運搬を主に目的としたフラッシュＲＯＭであり、たとえば、ＮＡＮＤ型フラッシュメモリである。フラッシュＲＯＭ３０６は、フラッシュＲＯＭコントローラ３０５の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム１００を使用するユーザがＩ／Ｆ３０８を通して取得した画像データ、映像データや、また本実施の形態にかかるスケジューリング方法を実行するプログラムなどである。フラッシュＲＯＭ３０６は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００２５】
ディスプレイ３０７は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ３０７は、たとえば、ＴＦＴ（Ｔｈｉｎ  Ｆｉｌｍ  Ｔｒａｎｓｉｓｔｏｒ）液晶ディスプレイなどを採用することができる。
【００２６】
Ｉ／Ｆ３０８は、通信回線を通じてＬＡＮ、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク３１１に接続され、ネットワーク３１１を介して他の装置に接続される。そして、Ｉ／Ｆ３０８は、ネットワーク３１１と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ３０８には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２７】
キーボード３０９は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード３０９は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００２８】
図４は、マルチコアプロセッサシステム１００のソフトウェア例を示すブロック図である。図４で示すマルチコアプロセッサシステム１００は、ＣＰＵ＃０、ＣＰＵ＃１、共有メモリ４０１を含む。また、ＣＰＵ＃０、ＣＰＵ＃１は、それぞれ、割込コントローラ４０２＃０、割込コントローラ４０２＃１と通信可能である。また、ＣＰＵ＃０は、スレッド０−０、スレッド３−０を実行しており、ＣＰＵ＃１は、スレッド０−１、スレッド１−０を実行している。
【００２９】
共有メモリ４０１は、ＣＰＵｓ３０１からアクセス可能な記憶領域である。記憶領域とは、具体的には、たとえば、ＲＡＭ３０３、フラッシュＲＯＭ３０４、フラッシュＲＯＭ３０６である。また、共有メモリ４０１は、割込回数テーブル４０３とスケジューリング情報テーブル４０４を有する。割込回数テーブル４０３は、スレッドごとの割込回数を記憶するテーブルである。なお、割込回数テーブル４０３の詳細については、図６にて後述する。スケジューリング情報テーブル４０４は、スケジューリング情報を記憶するテーブルである。スケジューリング情報とは、ＣＰＵに割り当てられたスレッドの情報である。スケジューリング情報の具体例として、ＣＰＵ＃０にスレッド０−０が割り当てられているという情報である。なお、スケジューリング情報テーブル４０４の詳細については、図７にて後述する。
【００３０】
割込コントローラ４０２＃０は、フラッシュＲＯＭコントローラ３０５、ディスプレイ３０７、Ｉ／Ｆ３０８、キーボード３０９、といったデバイスからの割込信号を受信し、ＣＰＵ＃０に通知する。同様に、割込コントローラ４０２＃１は、デバイスからの割込信号を受信し、ＣＰＵ＃１に通知する。また、割込コントローラ４０２は、デバイスからの割込信号の回数を記録する。記録された情報は、たとえば、割込コントローラ４０２内部のステータスレジスタ等に記憶される。
【００３１】
なお、割込の種別として、デバイスからの割込信号によるハードウェア割込と、ＣＰＵ内部の要因で発生するソフトウェア割込とが存在する。ソフトウェア割込による割込処理が発生した場合も、ＣＰＵは、割込処理の回数を、たとえば、ＣＰＵのレジスタ、ＲＡＭ３０３等に記憶してもよい。
【００３２】
続けて、マルチコアプロセッサシステム１００で実行するソフトウェアについて説明する。ＣＰＵ＃０はマスタＯＳ４１１を実行し、ＣＰＵ＃１はスレーブＯＳ４１２を実行する。マスタＯＳ４１１は、スケジューラ４２１＃０、割込回数取得部４２２＃０、ＤＢ管理部４２３＃０、スケジューリング方法選択部４２４、マスタスケジューラ４２５を含む。スレーブＯＳ４１２は、スケジューラ４２１＃１、割込回数取得部４２２＃１、ＤＢ管理部４２３＃１を含む。スケジューラ４２１＃１〜ＤＢ管理部４２３＃１は、マスタＯＳ４１１、スレーブＯＳ４１２が共に含む機能である。
【００３３】
スケジューラ４２１は、スレッドの割当を制御する機能を有する。具体的に、スケジューラ４２１は、予めタイムスライスで決定された時刻の経過後に、ＣＰＵに次に割り当てるスレッドを決定し、決定されたスレッドをＣＰＵに割り当てる。たとえば、タイムスライスが２［ｍｓ］である場合、スケジューラ４２１＃０は、２［ｍｓ］経過する度に、スレッド０−０とスレッド３−０を切り替える。また、スケジューラ４２１は、スレッドの切替が発生した場合、スレッド切替が発生したことを割込回数取得部４２２に通知する。
【００３４】
また、スケジューラ４２１は、割込処理が発生した場合、ＣＰＵに割込処理に対応する割込ハンドラを実行するように設定する。割込処理終了後、スケジューラ４２１は、割込処理にかかった割込処理時間を取得する。スケジューラ４２１は、割込処理を実行する度に割込処理時間を更新する。具体的な更新方法として、たとえば、スケジューラ４２１は、レジスタ、ＲＡＭ３０３等の記憶領域に記憶されていた割込処理時間と、今回取得した割込処理時間を平均して得られた値を、再度記憶領域に記憶する。また、スケジューラ４２１は、スレッド切替時、記憶領域に記憶されていた割込処理時間を割込回数取得部４２２に通知する。
【００３５】
割込回数取得部４２２は、スレッド切替が通知された場合、スレッドごとの割込回数を取得する。たとえば、スレッド０−０からスレッド３−０に切り替わった場合、割込回数取得部４２２＃０は、割込コントローラ４０２＃０内部のステータスレジスタ等に記憶された割込回数を切替前スレッドとなるスレッド０−０の割込回数として取得する。また、割込回数取得部４２２は、ＣＰＵ内部の要因で発生したソフトウェア割込が存在する場合、ソフトウェア割込の回数も併せて割込回数を取得してもよい。この場合、割込回数取得部４２２は、ハードウェア割込の回数とソフトウェア割込の回数を合算して切替前スレッドの割込回数に設定する。取得後、割込回数取得部４２２は、切替前スレッドの割込回数と、スレッド切替時に併せて通知された割込処理時間とをＤＢ管理部４２３に通知する。
【００３６】
ＤＢ管理部４２３は、通知されたスレッドの割込回数、割込処理時間に基づいて、割込回数テーブル４０３を更新する機能を有する。具体的な更新方法として、ＤＢ管理部４２３は、通知された値をそのまま割込回数テーブル４０３に格納してもよいし、割込回数テーブル４０３にある値と通知された値とを平均して割込回数テーブル４０３に格納してもよい。
【００３７】
また、マスタＯＳ４１１上のＤＢ管理部４２３＃０は、マスタスケジューラ４２５から通知されたスケジューリング情報を用いて、スケジューリング情報テーブル４０４を更新する機能を有する。たとえば、ＤＢ管理部４２３＃０は、新たなスレッドがＣＰＵ＃０に割り当てられたというスケジューリング情報を、スケジューリング情報テーブル４０４に格納する。
【００３８】
また、ＤＢ管理部４２３＃０は、スケジューリング方法選択部４２４からスレッドごとの割込回数と割込処理時間、スケジューリング情報の参照要求があった場合、割込回数テーブル４０３、スケジューリング情報テーブル４０４から対応する情報を取得する。
【００３９】
スケジューリング方法選択部４２４は、ＤＢ管理部４２３から得たスレッドごとの割込回数と割込処理時間、スケジューリング情報に基づいて、負荷優先スケジューリング方法か割込平準化優先スケジューリング方法のいずれか一方を選択する機能を有する。具体的な選択方法は、図５にて後述する。また、スケジューリング方法選択部４２４は、選択されたスケジューリング方法をマスタスケジューラ４２５に通知する。
【００４０】
マスタスケジューラ４２５は、マルチコアプロセッサシステム１００で実行中のスレッドに対して、負荷優先スケジューリング方法か割込平準化優先スケジューリング方法かのうち、選択されたスケジューリング方法に従ったスケジューリングを行う機能を有する。たとえば、負荷優先スケジューリング方法が選択された場合、マスタスケジューラ４２５は、各スレッドの負荷に基づいて、各ＣＰＵの負荷が均等になるようにスケジューリングを行う。また、割込平準化優先スケジューリング方法が選択された場合、マスタスケジューラ４２５は、割込処理時間を含めたスレッドの実行時間が均等になるようにスケジューリングを行う。なお、割込平準化優先スケジューリング方法の詳細については、図８〜図１０にて後述する。
【００４１】
（スケジューリング方法選択部４２４の機能）
次に、スケジューリング方法選択部４２４とマスタスケジューラ４２５の機能について説明する。図５は、スケジューリング方法選択部４２４とマスタスケジューラ４２５の機能を示すブロック図である。スケジューリング方法選択部４２４は、算出部５０１と、算出部５０２と、比較部５０３と、選択部５０４と、を含む。また、マスタスケジューラ４２５は、割当部５０５を含む。この制御部となる機能（算出部５０１〜割当部５０５）は、記憶装置に記憶されたプログラムをＣＰＵ＃０が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図３に示したＲＯＭ３０２、ＲＡＭ３０３、フラッシュＲＯＭ３０４、フラッシュＲＯＭ３０６などである。
【００４２】
算出部５０１は、第１の複数の処理を第１スケジューリング方法でスケジューリングしたときの第１実行時間を算出する機能を有する。なお、第１の複数の処理とは、マルチコアプロセッサシステム１００で実行中のスレッドであり、第１スケジューリング方法とは、負荷優先スケジューリング方法である。なお、処理とは、スレッドのことであるが、スレッドの一部分であってもよい。また、算出部５０１は、新たな処理を複数のデータ処理装置に割り当てるとき、新たな処理と第１の複数の処理とを含めた第２の複数の処理を第１スケジューリング方法でスケジューリングしたときの第１実行時間を算出してもよい。
【００４３】
また、算出部５０１は、ＣＰＵに割り当てられた処理の負荷量と処理実行中に発生する割込処理にかかる割込処理時間とのＣＰＵごとの合計値のうち、最も大きい合計値を第１実行時間として算出してもよい。処理の負荷量は、処理が完了するまでの時間で示す。処理すべき量が多いほど、処理が完了するまでの時間が長くなり、負荷量が増大していくことになる。なお、負荷量、割込処理時間は、割込回数テーブル４０３に格納されている。具体的に、負荷量は、スレッドが完了するまでの時間であってもよいし、スレッドの一部分の処理が完了するまでの時間であってもよい。一部分の処理としては、たとえば、特定の同期ポイントまでの処理である。
【００４４】
たとえば、ＣＰＵ＃０にスレッド０−０とスレッド３−０が割り当てられており、ＣＰＵ＃１にスレッド０−１とスレッド１−０が割り当てられている場合を想定する。さらに、スレッド０−０、スレッド０−１、スレッド１−０、スレッド３−０の負荷量を、それぞれ、２［ｍｓ］、４［ｍｓ］、４［ｍｓ］、６［ｍｓ］であると想定する。また、割込処理にかかる割込処理時間について、５［ｍｓ］、０［ｍｓ］、４．８［ｍｓ］、０［ｍｓ］と想定する。このとき、算出部５０１は、ＣＰＵ＃０の合計値を、（２＋５）＋（６＋０）＝７＋６＝１３とし、ＣＰＵ＃１の合計値を、（４＋０）＋（４＋４．８）＝４＋８．８＝１２．８とし、第１実行時間を１３［ｍｓ］として算出する。
【００４５】
また、算出部５０１は、後述する（１）式によって合計時間を算出してもよい。なお、算出された第１実行時間は、ＣＰＵ＃０の汎用レジスタ、ＲＡＭ３０３、フラッシュＲＯＭ３０４、フラッシュＲＯＭ３０６などの記憶領域に格納される。
【００４６】
算出部５０２は、第１の複数の処理を第１スケジューリング方法とは異なる第２スケジューリング方法でスケジューリングしたときの第２実行時間を算出する機能を有する。なお、第２スケジューリング方法とは、割込平準化優先スケジューリング方法である。また、算出部５０２は、第２の複数の処理を第２スケジューリング方法でスケジューリングしたときの第２実行時間を算出する。なお、算出部５０２は、算出部５０１での説明において、第１スケジューリング方法を第２スケジューリング方法に置き換えた状態に対応するため、説明を省略する。また、算出された第２実行時間は、ＣＰＵ＃０の汎用レジスタ、ＲＡＭ３０３、フラッシュＲＯＭ３０４、フラッシュＲＯＭ３０６などの記憶領域に格納される。
【００４７】
比較部５０３は、第１実行時間と第２実行時間とを比較する機能を有する。また、比較部５０３は、現在のスケジューリング方法に対応する実行時間と、もう一方のスケジューリング方法に対応する実行時間と処理割当にかかる時間との和と、を比較してもよい。たとえば、現在のスケジューリング方法が負荷優先スケジューリング方法であり、第１実行時間が１２．８［ｍｓ］であり、割込平準化優先スケジューリング方法に対応する第２実行時間が１２．４［ｍｓ］であると想定する。さらに、処理割当にかかる時間が０．３［ｍｓ］であると想定する。このとき、比較部５０３は、１２．８［ｍｓ］と、１２．４＋０．３［ｍｓ］を比較する。なお、比較結果は、ＣＰＵ＃０の汎用レジスタ、ＲＡＭ３０３、フラッシュＲＯＭ３０４、フラッシュＲＯＭ３０６などの記憶領域に格納される。
【００４８】
選択部５０４は、第２の複数の処理を複数のデータ処理装置に割り当てるために、比較部５０３による第１実行時間と第２実行時間との比較結果に基づいて、第１スケジューリング方法または第２スケジューリング方法を選択する機能を有する。たとえば、選択部５０４は、比較結果が第２実行時間の方が小さいことを示す場合、第２スケジューリング方法を選択する。また、選択部５０４は、現在のスケジューリング方法に対応する実行時間ともう一方のスケジューリング方法に対応する実行時間と処理割当にかかる時間との和との比較結果に基づいてスケジューリング方法を選択してもよい。なお、選択結果は、ＣＰＵ＃０の汎用レジスタ、ＲＡＭ３０３、フラッシュＲＯＭ３０４、フラッシュＲＯＭ３０６などの記憶領域に格納される。
【００４９】
割当部５０５は、選択部５０４によって選択されたスケジューリング方法に従って各データ処理装置に処理を割り当てる機能を有する。たとえば、割当部５０５は、選択部５０４によって第２スケジューリング方法が選択された場合、第２スケジューリング方法に従って各ＣＰＵにスレッドを割り当てる。
【００５０】
また、割当部５０５は、第２スケジューリング方法が選択された場合、第２の複数の処理の中で割込処理が第１頻度で発生する処理を第２の複数のデータ処理装置に割り当てる。続けて、割当部５０５は、第２の複数の処理の中で割込処理が第２頻度で発生する処理を処理と同じプロセスに含まれる処理が割り当てられた複数のデータ処理装置の中のデータ処理装置に割り当てる。なお、第１頻度は、第２頻度より高い。また、割込処理の頻度は、単位時間当たりの割込回数で算出することができる。たとえば、割当部５０５は、割込処理が高頻度であるスレッドを、ＣＰＵ＃０〜ＣＰＵ＃３に割り当てる。続けて、割当部５０５は、低頻度のスレッドを、同じプロセスに含まれるスレッドが割り当てられたＣＰＵに割り当てる。
【００５１】
また、割当部５０５は、第２頻度で発生する処理が割り当てられた後に、第２の複数の処理の中で割り当てられていない処理を、複数のデータ処理装置の負荷が均等になるように複数のデータ処理装置に割り当てる。たとえば、割当部５０５は、割込処理が低頻度で未割当のスレッドを、ＣＰＵ＃０〜ＣＰＵ＃３の負荷が均等になるように割り当てる。なお、割当部５０５によって決定した各ＣＰＵへの割当情報は、スケジューリング情報として、スケジューリング情報テーブル４０４に格納される。
【００５２】
図６は、割込回数テーブル４０３の記憶内容の一例を示す説明図である。割込回数テーブル４０３は、スレッドごとに割込回数と割込処理時間を記憶するテーブルである。図６で示す割込回数テーブル４０３には、レコード４０３−１〜レコード４０３−８という８つのレコードが登録されている。割込回数テーブル４０３は、スレッドＩＤ、割込回数、割込処理時間、負荷量という４つのフィールドを含む。
【００５３】
スレッドＩＤフィールドには、スレッドを一意に識別可能な識別情報が格納される。具体的な識別情報としては、マルチコアプロセッサシステム１００が一意に採番した値や、スレッドコンテキストへのポインタ等が採用される。本実施の形態で示す割込回数テーブル４０３は、説明の簡略化のため、スレッドに付与した符号を識別情報として格納している。割込回数フィールドには、スレッド実行中に割込処理が実行された回数が格納される。割込処理時間フィールドには、割込処理１回分の平均時間が格納される。
【００５４】
たとえば、レコード４０３−１を例にあげると、レコード４０３−１は、負荷量が２［ｍｓ］であり、スレッド０−０が実行中の間に５回の割込処理が実行されており、割込処理１回分の平均時間が１［ｍｓ］であることを示している。
【００５５】
また、割込回数テーブル４０３への更新方法として、マルチコアプロセッサシステム１００は、一定期間ごとに初期化して、一定期間の割込回数、割込処理時間を更新してもよい。この場合、マルチコアプロセッサシステム１００は、割込の傾向が変わったときにすぐ対応することができる。また、マルチコアプロセッサシステム１００は、割込回数テーブル４０３に格納されている割込回数と割込処理時間と、一定期間の割込回数と割込処理時間とのそれぞれの平均を算出して割込回数テーブル４０３に格納してもよい。
【００５６】
なお、スケジューリング方法選択部４２４およびマスタスケジューラ４２５、とスレッドの開発元は異なる可能性がある。この場合、スケジューリング方法選択部４２４およびマスタスケジューラ４２５は、どのスレッドが高頻度で割込を受けるか判断することが困難である。したがって、図６のように、過去の履歴を記憶領域に記憶することで、スケジューリング方法選択部４２４およびマスタスケジューラ４２５は、高頻度で割込を受けるスレッドを判断することができる。
【００５７】
図７は、スケジューリング情報テーブル４０４の一例を示す説明図である。スケジューリング情報テーブル４０４は、ＣＰＵごとに割り当てられたスレッドを記憶するテーブルである。図７で示すスケジューリング情報テーブル４０４には、レコード４０４−１〜レコード４０４−４という４つのレコードが登録されている。スケジューリング情報テーブル４０４は、ＣＰＵＩＤ、スレッドＩＤという２つのフィールドを含む。
【００５８】
ＣＰＵＩＤフィールドには、ＣＰＵを一意に識別可能な識別情報が格納される。スレッドＩＤフィールドには、ＣＰＵに割り当てられたスレッドの識別情報が格納される。たとえば、レコード４０４−１を例にあげると、レコード４０４−１は、ＣＰＵ＃０にスレッド０−０とスレッド３−０が割り当てられていることを示している。
【００５９】
また、図７の状態で、たとえば、マスタスケジューラ４２５からスレッド３−０をＣＰＵ＃１に割り当てるというスケジューリング情報が通知された場合を想定する。このとき、ＤＢ管理部４２３は、レコード４０４−１のスレッドＩＤフィールドの値を、“０−０、３−０”から“０−０”に変更し、レコード４０４−２のスレッドＩＤフィールドの値を、“０−１、１−０”から“０−１、１−０、３−０”に変更する。
【００６０】
また、スレッドのＣＰＵ間の移行方法として、たとえば、移行元ＣＰＵが、スレッドの実行中の情報となるスレッドコンテキストを共有メモリ４０１に退避し、移行先ＣＰＵが退避されたスレッドコンテキストを読み込む、といった方法が存在する。
【００６１】
続けて、図８〜図１０にて、割込平準化優先スケジューリング方法によるスレッド割当方法の一例について説明する。割込平準化優先スケジューリング方法は、マスタスケジューラ４２５によって実行される。
【００６２】
図８は、割込平準化優先スケジューリング方法に従ったスレッドの割当方法例を示す説明図（その１）である。初めに、マスタスケジューラ４２５は、割込が高頻度となるスレッドを各ＣＰＵに割り当てる。割込が高頻度であるか否かの判断方法として、たとえば、スケジューリング方法選択部４２４は、スレッドごとの割込回数を取得した際に、所定の閾値以上である場合、該当のスレッドが高頻度であると判断して記憶領域に記憶する。続けて、マスタスケジューラ４２５は、記憶された判断結果を用いて割込が高頻度のスレッドを取得する。また、スケジューリング方法選択部４２４は、割込回数が最多となるスレッドから、所定の個数のスレッドを、割込が高頻度となるスレッドとして判断してもよい。
【００６３】
たとえば、図６に示した割込回数テーブル４０３にて、所定の閾値＝５回とすると、スケジューリング方法選択部４２４は、高頻度となるスレッド群がスレッド０−０、スレッド０−２、スレッド１−０、スレッド１−１であると判断する。マスタスケジューラ４２５は、高頻度のスレッド群を、ＣＰＵ＃０〜ＣＰＵ＃３に割り当てる。なお、高頻度のスレッド群のＣＰＵ＃０〜ＣＰＵ＃３への割当方法として、マスタスケジューラ４２５は、負荷優先スケジューリング方法を採用してもよい。
【００６４】
たとえば、マスタスケジューラ４２５は、高頻度となるスレッド群のうち、最も高負荷となったスレッドをＣＰＵ＃０に割り当て、次に負荷の高いスレッドをＣＰＵ＃１に割り当て、といったことを行う。全てのＣＰＵに割り当てを行った時点で、高頻度となるスレッド群のうち未割当のスレッドが存在する場合、マスタスケジューラ４２５は、最も負荷の低いＣＰＵから順に、未割当のスレッドを割り当てる。
【００６５】
図８の例では、マスタスケジューラ４２５は、スレッド０−０をＣＰＵ＃０に割り当て、スレッド１−０をＣＰＵ＃１に割り当て、スレッド０−２をＣＰＵ＃２に割り当て、スレッド１−１をＣＰＵ＃３に割り当てる。図８のように、高頻度となるスレッド群を最初に割り当てることで、マルチコアプロセッサシステム１００は、割込が高頻度のスレッドが一つのＣＰＵに偏って割り当てられることを防ぐことができる。
【００６６】
図９は、割込平準化優先スケジューリング方法に従ったスレッドの割当方法例を示す説明図（その２）である。図９で示す状態は、図８によって示した割込が高頻度のスレッドを割り当てた後の状態を示している。マスタスケジューラ４２５は、割込が低頻度のスレッドのうち、同一プロセスのスレッド数が最多となるスレッド群を選択する。選択後、マスタスケジューラ４２５は、選択されたスレッド群と同一プロセスであり、割込回数が高頻度のスレッドが存在するかを判断する。存在する場合、マスタスケジューラ４２５は、選択されたスレッド群を、同一プロセス内の割込回数が高頻度のスレッドが割り当てられたＣＰＵ群に割り当てる。
【００６７】
具体的には、低頻度のスレッドとなる、スレッド０−１、スレッド１−２、スレッド２−０、スレッド３−０について、マスタスケジューラ４２５は、同一プロセスのスレッド数が最多となるプロセス０のスレッド群を選択する。続けて、マスタスケジューラ４２５は、スレッド０−１を、同一プロセス内の割込回数が高頻度のスレッドであるスレッド０−０が割り当てられたＣＰＵ＃０、スレッド０−２が割り当てられたＣＰＵ＃２、のうちいずれか一方のＣＰＵに割り当てる。この時の割当方法として、マスタスケジューラ４２５は、負荷優先スケジューリング方法を採用してもよい。
【００６８】
たとえば、マスタスケジューラ４２５は、ＣＰＵ＃０とＣＰＵ＃２のうち、負荷の低いＣＰＵにスレッド０−１を割り当てる。スレッド１−２の割当についても同様に、マスタスケジューラ４２５は、ＣＰＵ＃１とＣＰＵ＃３のうち、負荷の低いＣＰＵにスレッド１−２を割り当てる。図９の例では、マスタスケジューラ４２５は、スレッド０−１をＣＰＵ＃０に割り当て、スレッド１−２をＣＰＵ＃３に割り当てる。
【００６９】
図９のように、割込が低頻度のスレッドを、同一プロセスの高頻度のスレッドが割り当てられたＣＰＵに割り当てることで、割込が高頻度のスレッドが割り当てられたＣＰＵに、他のプロセスグループのスレッドが割り当てられる可能性を減らすことになる。したがって、割込が高頻度のスレッドによって発生する処理の遅延による悪影響を、他のプロセスグループのスレッドに与えないようにすることができる。
【００７０】
図１０は、割込平準化優先スケジューリング方法に従ったスレッドの割当方法例を示す説明図（その３）である。図１０で示す状態は、図９によって示した割込が低頻度のスレッドを、同一プロセスの高頻度のスレッドが割り当てられたＣＰＵに割り当てた状態である。マスタスケジューラ４２５は、未割当のスレッドを、負荷優先スケジューリング方法に従って割り当てる。
【００７１】
たとえば、マスタスケジューラ４２５は、未割当であるスレッド２−０、スレッド３−０を、負荷優先スケジューリング方法に従って割り当てる。図１０の例では、マスタスケジューラ４２５は、スレッド３−０をＣＰＵ＃１に割り当て、スレッド２−０をＣＰＵ＃２に割り当てる。
【００７２】
次に、図１１〜図１４にて、マルチコアプロセッサシステム１００が負荷優先スケジューリング方法と割込平準化優先スケジューリング方法のいずれかの方法に従った場合のスレッドの実行結果について説明する。図１１〜図１４に共通する処理情報として、タイムスライスが２［ｍｓ］であり、各スレッドの負荷量として、スレッド０−０が２［ｍｓ］、スレッド０−１が４［ｍｓ］、スレッド０−２が４［ｍｓ］、スレッド２−０が４［ｍｓ］である。さらに、残りのスレッドの負荷量として、スレッド３−０が６［ｍｓ］、スレッド１−０が４［ｍｓ］、スレッド１−１が４［ｍｓ］、スレッド１−２が６［ｍｓ］となる。
【００７３】
また、図１１、図１２では、割込が高頻度のスレッドに関して、１［ｍｓ］に１回、処理時間が１．２［ｍｓ］となる割込処理が発生していることを想定している。また、図１３、図１４では、割込が高頻度のスレッドに関して、１［ｍｓ］に１回、処理時間が０．５［ｍｓ］となる割込処理が発生していることを想定している。
【００７４】
図１１は、負荷優先スケジューリング方法による実行結果の一例を示す説明図である。図１１では、負荷優先スケジューリング方法の割当状態を示すスレッド割当状態１１０１と、スレッドの処理状態を示す処理情報１１０２と、実行結果を示すタイムチャート１１０３とを表示している。スレッド割当状態１１０１で示すスレッドの割当状態は、図１と等しい状態であるため、説明を省略する。また、処理情報１１０２が示す値は、前述で説明済みであるため、説明を省略する。
【００７５】
タイムチャート１１０３にて、ＣＰＵ＃０は、スレッド０−０とスレッド３−０の処理を、７．２［ｍｓ］で行う。同様に、ＣＰＵ＃１はスレッド０−１とスレッド１−０の処理を、１０．４［ｍｓ］で行い、ＣＰＵ＃２はスレッド０−２とスレッド１−１の処理を、１２．８［ｍｓ］で行い、ＣＰＵ＃３はスレッド２−０とスレッド１−２の処理を、１０［ｍｓ］で行う。したがって、マルチコアプロセッサシステム１００は、負荷優先スケジューリング方法を実行した場合、処理情報１１０２で示されている各スレッドに与えられた負荷量を、１２．８［ｍｓ］で処理することが可能である。
【００７６】
図１２は、割込平準化優先スケジューリング方法による実行結果の一例を示す説明図である。図１２では、割込平準化優先スケジューリング方法の割当状態を示すスレッド割当状態１２０１と、処理情報１１０２と、実行結果を示すタイムチャート１２０２とを表示している。図１２で示すスレッド割当状態１２０１は、図２と等しい状態であるため、説明を省略する。
【００７７】
タイムチャート１２０２にて、ＣＰＵ＃０は、スレッド０−０とスレッド０−１の処理を、７．２［ｍｓ］で行う。同様に、ＣＰＵ＃１はスレッド１−０とスレッド３−０の処理を、１２．４［ｍｓ］で行い、ＣＰＵ＃２はスレッド０−２とスレッド２−０の処理を、１０．４［ｍｓ］で行い、ＣＰＵ＃３はスレッド１−１とスレッド１−２の処理を、１２．４［ｍｓ］で行う。したがって、マルチコアプロセッサシステム１００は、割込平準化優先スケジューリング方法を実行した場合、処理情報１１０２で示されている各スレッドに与えられた負荷量を、１２．４［ｍｓ］で処理することが可能である。
【００７８】
このように、マルチコアプロセッサシステム１００は、割込平準化優先スケジューリング方法を実行した場合、処理情報１１０２で示される状態に対する実行時間が１２．４［ｍｓ］となり、負荷優先スケジューリング方法より早く処理することになる。
【００７９】
図１３は、負荷優先スケジューリング方法による実行結果の他の例を示す説明図である。図１３では、負荷優先スケジューリング方法の割当状態を示すスレッド割当状態１１０１と、処理情報１３０１と、実行結果を示すタイムチャート１３０２とを表示している。処理情報１３０１で示す設定値は、前述で説明済みであるため、説明を省略する。
【００８０】
タイムチャート１３０２にて、ＣＰＵ＃０は、スレッド０−０とスレッド３−０の処理を、８．５［ｍｓ］で行う。同様に、ＣＰＵ＃１はスレッド０−１とスレッド１−０の処理を、９［ｍｓ］で行い、ＣＰＵ＃２はスレッド０−２とスレッド１−１の処理を、１０．５［ｍｓ］で行い、ＣＰＵ＃３はスレッド２−０とスレッド１−２の処理を、１０［ｍｓ］で行う。したがって、マルチコアプロセッサシステム１００は、負荷優先スケジューリング方法を実行した場合、処理情報１３０１で示されている各スレッドに与えられた負荷量を、１０．５［ｍｓ］で処理することが可能である。
【００８１】
図１４は、割込平準化優先スケジューリング方法による実行結果の他の例を示す説明図である。図１４では、割込平準化優先スケジューリングの割当状態を示すスレッド割当状態１２０１と、処理情報１３０１と、実行結果を示すタイムチャート１４０１とを表示している。
【００８２】
タイムチャート１４０１で示す説明図にて、ＣＰＵ＃０は、スレッド０−０とスレッド０−１の処理を、６．５［ｍｓ］で行う。同様に、ＣＰＵ＃１はスレッド１−０とスレッド３−０の処理を、１１［ｍｓ］で行い、ＣＰＵ＃２はスレッド０−２とスレッド２−０の処理を、９［ｍｓ］で行い、ＣＰＵ＃３はスレッド１−１とスレッド１−２の処理を、１１［ｍｓ］で行う。したがって、マルチコアプロセッサシステム１００は、割込平準化優先スケジューリング方法を実行した場合、処理情報１３０１で示されている各スレッドに与えられた負荷量を、１１［ｍｓ］で処理することが可能である。
【００８３】
したがって、マルチコアプロセッサシステム１００は、負荷優先スケジューリング方法を実行した場合、処理情報１３０１で示される負荷量に対する実行時間が１０．５［ｍｓ］となり、割込平準化優先スケジューリング方法より早く処理することになる。
【００８４】
このように、負荷優先スケジューリング方法と割込平準化優先スケジューリング方法とで処理が速くなるか否かは、スレッドの負荷量、割込の頻度、割込処理時間によって左右される。したがって、スケジューリング方法選択部４２４は、負荷優先スケジューリング方法と割込平準化優先スケジューリング方法とに従って動作した場合に予測される実行時間を算出し、算出された実行時間が短いスケジューリング方法を選択する。図１５にて、スケジューリング方法切替の判断例を説明する。
【００８５】
図１５は、スケジューリング方法切替の判断例を示す説明図である。図１５では、負荷優先スケジューリング方法と割込平準化優先スケジューリング方法を切り替える判断の一例を示している。スケジューリング方法選択部４２４は、負荷優先スケジューリング方法に従った場合、または割込平準化優先スケジューリング方法に従った場合の実行時間Ｔを下記（１）式にて算出する。
【００８６】
Ｔ＝Ｍａｘ（Ｔ（Ｎ））＝Ｍａｘ｛Σm｛Ｗ（Ｘ）＋Ｃ（Ｘ）×Ａ×Ｗ（Ｘ）／Ｙ｝｝  …（１）
【００８７】
ただし、ＮをＣＰＵ番号と定義し、Ｔ（Ｎ）をスレッドの処理に要する時間と定義し、ｍをＮ番目のＣＰＵに割り当てられたスレッドの個数と定義し、Ｗ（Ｘ）をスレッドＸの負荷量と定義する。また、タイムスライスをＹと定義し、Ｃ（Ｘ）をスレッドＸの１タイムスライス当たりの割込処理回数と定義し、Ａを割込処理に要する平均時間と定義する。なお、（１）式のΣ内の第１項が負荷量に相当し、第２項が割込処理時間に相当する。
【００８８】
スケジューリング方法選択部４２４は、（１）式によって負荷優先スケジューリング方法に従った場合の実行時間ＴＬと、割込平準化優先スケジューリング方法に従った場合の実行時間ＴＩを算出する。スケジューリング方法選択部４２４は、負荷優先スケジューリング方法選択中にスケジューリング判断式となる下記（２）式を満たす場合、割込平準化優先スケジューリング方法に切り替える。
【００８９】
ＴＬ＞ＴＩ＋Ｏ（Ｍ）  …（２）
【００９０】
ただし、Ｍをマルチコアプロセッサシステム１００内で実行中の総スレッド数とし、Ｏ（Ｍ）を総スレッド数がＭである場合の再スケジューリングに要する時間と定義する。また、スケジューリング方法選択部４２４は、割込平準化優先スケジューリング方法選択中にスケジューリング判断式となる下記（３）式を満たす場合、負荷優先スケジューリング方法に切り替える。
【００９１】
ＴＩ＞ＴＬ＋Ｏ（Ｍ）  …（３）
【００９２】
たとえば、マルチコアプロセッサシステム１００が符号１５０１で示す負荷優先スケジューリング方法であることを想定する。このとき、各スレッドの割当状態は、負荷分散スケジューリングに従っており、処理状態として処理情報１１０２に従っている。また、スレッド１−２は、起動要求を受けウェイトキュー１５０４に格納されている。なお、ウェイトキュー１５０４は、起動要求を受けたがＣＰＵにまだ割り当てていないスレッドを格納しておくキューである。
【００９３】
スレッド１−２がＣＰＵ＃０〜ＣＰＵ＃３のいずれかに割り当てられる場合、スケジューリング方法選択部４２４は、ＣＰＵ＃０〜ＣＰＵ＃３での実行時間ＴＬ＃０〜ＴＬ＃３を（１）式に従って以下のように算出する。
【００９４】
ＴＬ＃０＝Σm｛Ｗ（Ｘ）＋Ｃ（Ｘ）×Ａ×Ｗ（Ｘ）／Ｙ｝
⇔ＴＬ＃０＝（２＋１×１．２×２／２）＋（６＋０×１．２×６／２）
⇔ＴＬ＃０＝３．２＋６＝９．２［ｍｓ］
【００９５】
同様に、スケジューリング方法選択部４２４は、ＴＬ＃１〜ＴＬ＃３を（１）式に従って算出し、ＴＬ＃１＝１０．４［ｍｓ］、ＴＬ＃２＝１２．８［ｍｓ］、ＴＬ＃３＝１０．０［ｍｓ］を得る。続けて、スケジューリング方法選択部４２４は、負荷優先スケジューリング方法での実行時間ＴＬ＝Ｍａｘ（９．２、１０．４、１２．８、１０．０）＝１２．８を算出する。
【００９６】
また、スケジューリング方法選択部４２４は、割込平準化優先スケジューリング方法に従い、スレッドの割当状態を図１２のようになることを決定した後、ＣＰＵ＃０〜ＣＰＵ＃３での実行時間ＴＩ＃０〜ＴＩ＃３を（１）式に従って以下のように算出する。
【００９７】
ＴＩ＃０＝（２＋１×１．２×２／２）＋（４＋０×１．２×４／２）＝７．２［ｍｓ］
【００９８】
同様に、スケジューリング方法選択部４２４は、ＴＩ＃１〜ＴＩ＃３を（１）式に従って算出し、ＴＩ＃１＝１２．４［ｍｓ］、ＴＩ＃２＝１０．４［ｍｓ］、ＴＩ＃３＝１２．４［ｍｓ］を得る。続けて、スケジューリング方法選択部４２４は、負荷優先スケジューリング方法での実行時間ＴＩ＝Ｍａｘ（７．２、１２．４、１０．４、１２．４）＝１２．４を算出する。
【００９９】
ＴＬ、ＴＩの算出後、スケジューリング方法選択部４２４は、（２）式に従って割込平準化優先スケジューリング方法に切り替えるか負荷優先スケジューリング方法のままとするかを判断する。前述の算出結果を用いると、スケジューリング方法選択部４２４は、以下のように（２）式を実行する。
【０１００】
１２．８＞１２．４＋Ｏ（Ｍ）
【０１０１】
したがって、スケジューリング方法選択部４２４は、Ｏ（Ｍ）が０．４［ｍｓ］未満であるときに、割込平準化優先スケジューリング方法に従った状態である状態１５０２に切り替える。また、Ｏ（Ｍ）が０．４［ｍｓ］以上である場合、スケジューリング方法選択部４２４は、負荷優先スケジューリング方法に従った状態である状態１５０３に遷移する。続けて、図１６にてＯ（Ｍ）の設定例を示す。
【０１０２】
図１６は、Ｏ（Ｍ）の設定例を示す説明図である。再スケジューリングにかかるコストは、実行中のスレッドをレディーキューに再キューイングする際のコストとなる。スレッドをキューイングするために要するコストは、スケジューリングアルゴリズムとＯＳに依存する。
【０１０３】
Ｏ（Ｍ）の設定例として、スレッド数Ｍに対して静的に設定しておく方法と、動的に設定しておく方法とがある。初めに、静的に設定しておく場合、たとえば、マルチコアプロセッサシステム１００は、スレッド数Ｍが固定値の場合に再スケジューリングにかかる時間を設定しておく。固定値としては、たとえば、マルチコアプロセッサシステム１００内で最もよく取り得る値等を採用してもよいし、マルチコアプロセッサシステム１００内でスレッドが実行可能な最大値を採用してもよい。
【０１０４】
次に、動的に設定しておく場合、マルチコアプロセッサシステム１００は、シミュレータ等によりスレッド数を変化させたときのキューイングに要する時間を計測しておく。マルチコアプロセッサシステム１００は、計測結果を、スレッド数に依存したオーバーヘッド関数として、スケジューリング方法選択部４２４に保持させておく。
【０１０５】
計測結果は、たとえば、グラフ１６０１の通りになる。グラフ１６０１は、横軸がスレッド数であり、縦軸がオーバーヘッド時間を示している。グラフ１６０１では、スレッド数とオーバーヘッド時間が一次式となっているため、マルチコアプロセッサシステム１００は、たとえば、Ｏ（Ｍ）＝Ｂ×Ｍと設定する。Ｂは、ＯＳとスケジューリングアルゴリズムに依存する値である。
【０１０６】
以上説明した機能、記憶内容を使用して、マルチコアプロセッサシステム１００は、スケジューリング方法切替処理を実行する。図１７、図１８にて、スケジューリング方法切替処理の手順を示し、図１９では、割込平準化優先スケジューリング方法に従った割当処理手順の一例を示す。なお、図１７を実行するＣＰＵはＣＰＵ＃０であることを想定し、図１８を実行するＣＰＵはＣＰＵ＃１であることを想定する。
【０１０７】
図１７は、マスタＯＳのスケジューリング方法切替処理手順の一例を示すフローチャートである。ＣＰＵ＃０は、マスタスケジューラのウェイトキュー１５０４に新たなスレッドが存在するか否かを判断する（ステップＳ１７０１）。新たなスレッドが存在する場合（ステップＳ１７０１：Ｙｅｓ）、ＣＰＵ＃０は、負荷優先スケジューリング方法に従った場合の実行時間を算出する（ステップＳ１７０２）。さらに、ＣＰＵ＃０は、割込平準化優先スケジューリング方法に従った場合の実行時間を算出する（ステップＳ１７０３）。
【０１０８】
２つの実行時間の算出後、ＣＰＵ＃０は、スケジューリング方法判断式を基にスケジューリング方法を選択する（ステップＳ１７０４）。具体的に、ＣＰＵ＃０は、現在のスケジューリング方法として負荷優先スケジューリング方法が選択されている場合、スケジューリング方法判断式として（２）式を採用する。また、ＣＰＵ＃０は、割込平準化優先スケジューリング方法が選択されている場合、スケジューリング方法判断式として（３）式を採用する。
【０１０９】
スケジューリング方法の選択後、ＣＰＵ＃０は、現在選択しているスケジューリング方法とは異なる方法を選択したか否かを判断する（ステップＳ１７０５）。異なる方法を選択した場合（ステップＳ１７０５：Ｙｅｓ）、ＣＰＵ＃０は、選択したスケジューリング方法に基づいてウエイトキューに存在するスレッドを含めて再スケジューリングを行い（ステップＳ１７０６）、ステップＳ１７０１の処理に移行する。同じ方法を選択した場合（ステップＳ１７０５：Ｎｏ）、ＣＰＵ＃０は、現在選択しているスケジューリング方法に基づいてウェイトキューのスレッドのスケジューリングを行い（ステップＳ１７１２）、ステップＳ１７０１の処理に移行する。なお、実行中のスレッドが０の状態で、新たなスレッドが起動された場合、現在選択中のスケジューリング方法が存在しない状態である。この場合、ＣＰＵ＃０は、ステップＳ１７０５：Ｙｅｓのルートを通り、スケジューリングを行う。
【０１１０】
また、同じ方法を選択した場合（ステップＳ１７０５：Ｎｏ）、ＣＰＵ＃０は、ステップＳ１７０１の処理に移行する。新たなスレッドが存在しない場合（ステップＳ１７０１：Ｎｏ）、ＣＰＵ＃０は、マルチコアプロセッサシステム１００内の全スレッドが処理終了したか否かを判断する（ステップＳ１７０７）。全スレッドが処理終了した場合（ステップＳ１７０７：Ｙｅｓ）、ＣＰＵ＃０は、スケジューリング方法切替処理を終了する。
【０１１１】
全スレッドが処理終了していない場合（ステップＳ１７０７：Ｎｏ）、ＣＰＵ＃０は、実行中スレッドに割込処理が発生したか否かを判断する（ステップＳ１７０８）。割込処理が発生した場合（ステップＳ１７０８：Ｙｅｓ）、ＣＰＵ＃０は、割込回数、割込処理時間を計測する（ステップＳ１７０９）。計測後、ＣＰＵ＃０は、ステップＳ１７０１の処理に移行する。
【０１１２】
割込処理が発生していない場合（ステップＳ１７０８：Ｎｏ）、ＣＰＵ＃０は、スレッドスイッチが発生したか否かを判断する（ステップＳ１７１０）。スレッドスイッチが発生した場合（ステップＳ１７１０：Ｙｅｓ）、ＣＰＵ＃０は、計測した割込回数、割込処理時間を用いて、割込回数テーブル４０３を更新し（ステップＳ１７１１）、ステップＳ１７０１の処理に移行する。スレッドスイッチが発生していない場合（ステップＳ１７１０：Ｎｏ）、ＣＰＵ＃０は、ステップＳ１７０１の処理に移行する。
【０１１３】
図１８は、スレーブＯＳのスケジューリング方法切替処理手順の一例を示すフローチャートである。ＣＰＵ＃１は、マルチコアプロセッサシステム１００内の全スレッドが処理終了したか否かを判断する（ステップＳ１８０１）。全スレッドが処理終了した場合（ステップＳ１８０１：Ｙｅｓ）、ＣＰＵ＃１は、スケジューリング方法切替処理を終了する。
【０１１４】
全スレッドが処理終了していない場合（ステップＳ１８０１：Ｎｏ）、ＣＰＵ＃１は、実行中スレッドに割込処理が発生したか否かを判断する（ステップＳ１８０２）。割込処理が発生した場合（ステップＳ１８０２：Ｙｅｓ）、ＣＰＵ＃１は、割込回数、割込処理時間を計測する（ステップＳ１８０３）。計測後、ＣＰＵ＃１は、ステップＳ１８０１の処理に移行する。
【０１１５】
割込処理が発生していない場合（ステップＳ１８０２：Ｎｏ）、ＣＰＵ＃１は、スレッドスイッチが発生したか否かを判断する（ステップＳ１８０４）。スレッドスイッチが発生した場合（ステップＳ１８０４：Ｙｅｓ）、ＣＰＵ＃１は、計測した割込回数、割込処理時間を用いて、割込回数テーブル４０３を更新し（ステップＳ１８０５）、ステップＳ１８０１の処理に移行する。スレッドスイッチが発生していない場合（ステップＳ１８０４：Ｎｏ）、ＣＰＵ＃１は、ステップＳ１８０１の処理に移行する。
【０１１６】
図１９は、割込平準化優先スケジューリング方法に従った割当処理手順の一例を示すフローチャートである。なお、割込平準化優先スケジューリング方法を実行するタイミングとしては、ステップＳ１７０３にて割り込み平準化優先スケジューリング方法に従った場合の実行時間の算出を行う際に実施される。割込平準化優先スケジューリング方法を実行する実行主体は、マスタＣＰＵで実行中のマスタスケジューラ４２５である。
【０１１７】
ＣＰＵ＃０は、割込回数テーブル４０３より、割込回数が高頻度のスレッド群を選択する（ステップＳ１９０１）。次に、ＣＰＵ＃０は、負荷優先スケジューリング方法に従って、割込回数が高頻度のスレッド群をＣＰＵに割り当てる（ステップＳ１９０２）。続けて、ＣＰＵ＃０は、割込回数テーブル４０３より、割込回数が低頻度のスレッド群を選択する（ステップＳ１９０３）。選択後、ＣＰＵ＃０は、割込回数が低頻度のスレッド群のうち、同一プロセスのスレッド数が最多となるスレッド群を選択する（ステップＳ１９０４）。
【０１１８】
次に、ＣＰＵ＃０は、選択されたスレッド群と同一プロセスであり、割込回数が高頻度のスレッドが存在するか否かを判断する（ステップＳ１９０５）。割込回数が高頻度のスレッドが存在する場合（ステップＳ１９０５：Ｙｅｓ）、ＣＰＵ＃０は、選択されたスレッド群のＣＰＵの割当先を、同一プロセス内の割込回数が高頻度のスレッドが割り当てられたＣＰＵ群に決定する（ステップＳ１９０６）。決定後、ＣＰＵ＃０は、負荷優先スケジューリング方法に従って、選択されたスレッド群を決定されたＣＰＵ群に割り当てる（ステップＳ１９０７）。
【０１１９】
ＣＰＵへの割当、または、割込回数が高頻度のスレッドが存在しない場合（ステップＳ１９０５：Ｎｏ）、ＣＰＵ＃０は、割込回数が低頻度のスレッド群のうち、全てのスレッド群を選択したか否かを判断する（ステップＳ１９０８）。全てのスレッド群を選択していない場合（ステップＳ１９０８：Ｎｏ）、ＣＰＵ＃０は、同一プロセスのスレッド数が次に多いスレッド群を選択し（ステップＳ１９０９）、ステップＳ１９０５の処理に移行する。
【０１２０】
全てのスレッド群を選択している場合（ステップＳ１９０８：Ｙｅｓ）、ＣＰＵ＃０は、負荷優先スケジューリング方法に従って、未割当のスレッド群をＣＰＵに割り当て（ステップＳ１９１０）、割込平準化優先スケジューリング方法に従った割当処理を終了する。
【０１２１】
図２０は、本実施の形態にかかるコンピュータを用いたシステムの適用例を示す説明図である。図２０において、ネットワークＮＷは、サーバ２００１、サーバ２００２とクライアント２０３１〜クライアント２０３４とが通信可能なネットワークであり、たとえば、ＬＡＮ、ＷＡＮ、インターネット、携帯電話網などを含む。
【０１２２】
サーバ２００２は、クラウド２０２０を有するサーバ群（サーバ２０２１〜サーバ２０２５）の管理サーバである。クライアント２０３１はノート型ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）である。クライアント２０３２はデスクトップ型ＰＣ、クライアント２０３３は携帯電話機である。携帯電話機として、クライアント２０３３は、スマートフォンであってもよいし、ＰＨＳ（Ｐｅｒｓｏｎａｌ  Ｈａｎｄｙｐｈｏｎｅ  Ｓｙｓｔｅｍ）であってもよい。クライアント２０３４はタブレット型端末である。
【０１２３】
図２０のサーバ２００１、サーバ２００２、サーバ２０２１〜サーバ２０２５、クライアント２０３１〜クライアント２０３４は、たとえば、実施の形態で説明したデータ処理装置として、本実施の形態にかかるスケジューリング方法を実行する。たとえば、サーバ２００１が本実施の形態で説明したマスタＯＳ４１１の機能を有し、クライアント２０３１が本実施の形態で説明したスレーブＯＳ４１２の機能を有した状態で、スケジューリング方法を実行する。
【０１２４】
以上説明したように、データ処理システム、およびスケジューリング方法によれば、複数の割込処理の回数をカウントする割込コントローラと、割込回数に基づいて複数のスケジューリング方法のうち一つを選択するスケジューリング方法選択ユニットを含む。これにより、データ処理システムは、割込回数によって変化する実行状況に応じて、効率のより良いスケジューリング方法を選ぶことで、システム全体の処理速度を向上することができる。
【０１２５】
また、データ処理システムは、複数のスケジューリング方法として、複数のデータ処理装置の負荷に基づいてスケジューリングを行う第１スケジューリング方法と、割込処理の回数に基づいてスケジューリングを行う第２スケジューリング方法とを含む。これにより、データ処理システムは、第１スケジューリング方法と第２スケジューリング方法のいずれかを選択し、効率のより良いスケジューリング方法を選ぶことで、データ処理システム全体の処理速度を向上することができる。
【０１２６】
また、データ処理システムは、第１または第２スケジューリング方法に従ってデータ処理装置に処理を割り当てた場合のそれぞれの実行時間を算出し、実行時間の比較結果に基づいて、スケジューリング方法を選択してもよい。これにより、データ処理システムは、予測される実行時間が短いスケジューリング方法を選択できる。
【０１２７】
また、データ処理システムは、第１または第２スケジューリング方法に従った実行時間の算出のタイミングを新たな処理が追加された場合に実行してもよい。これにより、データ処理システムは、スケジューリング方法が変化する可能性があるときに実行時間の算出が行え、無駄なタイミングで実行時間の算出を行うことを避けることができる。同様に、データ処理システムは、システム内の処理が完了した場合に実行時間の算出を行ってもよい。また、データ処理システムは、割込処理の頻度が高い処理が起動された場合、または完了した場合に実行時間の算出を行ってもよい。これにより、データ処理システムは、よりスケジューリング方法が変化する可能性があるときにだけ実行時間の算出が行える。
【０１２８】
また、データ処理システムは、複数のデータ処理装置の各々のデータ処理装置に割り当てられる処理の負荷量と前述の処理の実行中に発生する割込処理にかかる時間とのデータ処理装置ごとの合計値のうち、最大の合計値を予測される実行時間として算出してもよい。これにより、データ処理システムは、割込処理が頻繁に処理される影響で処理時間が長くなってしまっているデータ処理装置を検出することができる。
【０１２９】
また、データ処理システムは、第２スケジューリング方法において、割込処理が高頻度で発生する処理を複数のデータ処理装置に割り当てて、低頻度の処理を、同じプロセスに含まれる処理が割り当てられたデータ処理装置に割り当ててもよい。このように、高頻度の処理が割り当てられたデータ処理装置に対して、同一プロセスに属する処理を割り当てることで、他のプロセスグループの処理が該当のデータ処理装置に割り当てられにくくなる。したがって、割込処理が高頻度の処理によって発生する処理遅延を、他のプロセスグループに与えにくくすることができる。
【０１３０】
また、データ処理システムは、低頻度の処理をデータ処理装置に割り当てた後、未割当の処理を、複数のデータ処理装置の負荷が均等になるように割り当ててもよい。これにより、データ処理システムは、各データ処理装置の割込処理を平準化しつつ、かつ負荷も均等になるように各処理を割り当てることができる。
【０１３１】
なお、本実施の形態で説明したスケジューリング方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本スケジューリング方法を実行するプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本スケジューリング方法を実行するプログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０１３２】
０−０〜２、１−０〜２、２−０、３−０  スレッド
４０２  割込コントローラ
４０３  割込回数テーブル
４２４  スケジューリング方法選択部
５０１、５０２  算出部
５０３  比較部
５０４  選択部
５０５  割当部
【図１】
2013014767.tif 000003
【図２】
2013014767.tif 000004
【図３】
2013014767.tif 000005
【図４】
2013014767.tif 000006
【図５】
2013014767.tif 000007
【図６】
2013014767.tif 000008
【図７】
2013014767.tif 000009
【図８】
2013014767.tif 000010
【図９】
2013014767.tif 000011
【図１０】
2013014767.tif 000012
【図１１】
2013014767.tif 000013
【図１２】
2013014767.tif 000014
【図１３】
2013014767.tif 000015
【図１４】
2013014767.tif 000016
【図１５】
2013014767.tif 000017
【図１６】
2013014767.tif 000018
【図１７】
2013014767.tif 000019
【図１８】
2013014767.tif 000020
【図１９】
2013014767.tif 000021
【図２０】
2013014767.tif 000022
【手続補正書】
【提出日】平成26年1月22日(2014.1.22)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のデータ処理装置で実行される複数のスレッドの割込処理の回数をカウントする割込コントローラと、
カウントされた前記割込処理の回数に基づいて複数のスケジューリング方法から一のスケジューリング方法を選択するスケジューリング方法選択ユニットと、
を含むことを特徴とするデータ処理システム。
【請求項２】
前記複数のスケジューリング方法は、前記複数のデータ処理装置の負荷に基づいてスケジューリングを行う第１スケジューリング方法と、前記割込処理の回数に基づいてスケジューリングを行う第２スケジューリング方法とを含むこと
を特徴とする請求項１に記載のデータ処理システム。
【請求項３】
第１のデータ処理装置が、第１スケジューリング方法にて前記第１のデータ処理装置を含む複数のデータ処理装置に第１の複数の処理を割り当て、
新たな処理を前記複数のデータ処理装置に割り当てるとき、前記新たな処理と前記第１の複数の処理とを含めた第２の複数の処理を前記第１スケジューリング方法でスケジューリングしたときの第１実行時間を算出し、
前記第２の複数の処理を前記第１スケジューリング方法とは異なる第２スケジューリング方法でスケジューリングしたときの第２実行時間を算出し、
前記第２の複数の処理を前記複数のデータ処理装置に割り当てるために、前記第１実行時間と前記第２実行時間との比較結果に基づいて、前記第１スケジューリング方法または前記第２スケジューリング方法を選択すること
を特徴とするスケジューリング方法。
【請求項４】
前記第１スケジューリング方法においては前記複数のデータ処理装置の負荷に基づいてスケジューリングが行われ、
前記第２スケジューリング方法においては前記第２の複数の処理における割込処理の回数に基づいてスケジューリングが行われること
を特徴とする請求項３に記載のスケジューリング方法。
【請求項５】
前記第２スケジューリング方法において、
前記第２の複数の処理の中で割込処理が第１頻度で発生する処理を第２の複数のデータ処理装置に割り当て、
前記第２の複数の処理の中で割込処理が第２頻度で発生する処理を前記処理と同じプロセスに含まれる処理が割り当てられた前記複数のデータ処理装置の中のデータ処理装置に割り当てること
を特徴とする請求項３または請求項４に記載のスケジューリング方法。
【請求項６】
前記第１頻度は前記第２頻度よりも高いこと
を特徴とする請求項５に記載のスケジューリング方法。
【請求項７】
前記第２頻度で発生する処理が割り当てられた後に、前記第２の複数の処理の中で割り当てられていない処理を、前記複数のデータ処理装置の負荷が均等になるように前記複数のデータ処理装置に割り当てること
を特徴とする請求項５または請求項６に記載のスケジューリング方法。
【請求項８】
第１のデータ処理装置が前記第１のデータ処理装置を含む複数のデータ処理装置に複数のスレッドを割り当てるスケジューリング方法において、
前記複数のスレッドの中で割込処理が第１頻度で発生するスレッドを第２の複数のデータ処理装置に割り当て、
前記複数のスレッドの中で割込処理が前記第１頻度よりも低い第２頻度で発生するスレッドを前記スレッドと同じプロセスに含まれるスレッドが割り当てられた前記複数のデータ処理装置の中のデータ処理装置に割り当てること
を特徴とするスケジューリング方法。
【請求項９】
前記第２頻度で発生するスレッドが割り当てられた後に、新たなスレッドと前記複数のスレッドとの中で割り当てられていないスレッドを、前記複数のデータ処理装置の負荷が均等になるように前記複数のデータ処理装置に割り当てること
を特徴とする請求項８に記載のスケジューリング方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スレッドを割り当てるデータ処理システム、およびスケジューリング方法に関する。
【背景技術】
【０００２】
近年、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が１つ搭載されたコンピュータであるシングルコアプロセッサシステムに代わって、ＣＰＵが複数搭載されたコンピュータであるマルチコアプロセッサシステムをとる装置が増えている。複数のＣＰＵに複数のスレッドを並列に割り当てることで、マルチコアプロセッサシステムは、高速にデータ処理を実行することができる。ここで、スレッドはプログラムの実行単位である。スレッドをどのＣＰＵに割り当てるかを決定するスケジューリング方法として、たとえば、各ＣＰＵの負荷が均等になるようにスケジューリングする技術が存在する。
【０００３】
また、従来から、コンピュータシステムにおいて、デバイスからの割込信号に対して、ＣＰＵで実行中のスレッドを退避し、割込信号に対する割込処理を行う技術が存在する。これにより、コンピュータシステムは、デバイスからの割込信号に対する応答速度を向上させることができる。
【０００４】
割込処理を考慮したスケジューリング方法に関連する技術として、たとえば、割込処理を行うＣＰＵを、実行中のスレッドの優先順位が低いＣＰＵに決定する技術が開示されている。また、割込負荷の最も低いＣＰＵが高優先度のプロセスを実行する技術が開示されている（たとえば、下記特許文献１〜４を参照。）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００４−３０６６３号公報
【特許文献２】特開２００６−２４３８６４号公報
【特許文献３】特開平０９−２８２１８８号公報
【特許文献４】特開２００１−３３１４６１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した従来技術において、スレッドの負荷が均等になるようにスレッドを各ＣＰＵに割り当てた場合、割込が頻発するスレッドが多数割り当てられたＣＰＵでは、スレッドの処理が遅延するという問題があった。具体的に、スレッドが実行される場合、ＣＰＵは実行モードの一つであるユーザモードで動作するが、割込処理が実行される場合、ＣＰＵはカーネルモードで動作するため、割込処理の処理時間である割込処理時間はスレッドの処理時間に含まれない。したがって、割込が頻発するスレッドが多数割り当てられたＣＰＵでは、スレッドの処理が進みにくくなり、実行状況によっては処理が遅延し、全体の処理が遅延するという問題があった。
【０００７】
本発明は、上述した従来技術による問題点を解消するため、システム全体の処理速度を向上させるデータ処理システム、およびスケジューリング方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、複数のデータ処理装置で実行される複数のスレッドの割込処理の回数をカウントする割込コントローラと、カウントされた割込処理の回数に基づいて複数のスケジューリング方法から一のスケジューリング方法を選択するスケジューリング方法選択ユニットとを含むデータ処理システム、およびスケジューリング方法が提案される。
【発明の効果】
【０００９】
本発明の一側面によれば、システム全体の処理速度を向上できるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】図１は、マルチコアプロセッサシステム１００が負荷優先スケジューリング方法に従ってスレッドを割り当てた場合の動作を示す説明図である。
【図２】図２は、マルチコアプロセッサシステム１００が割込平準化優先スケジューリング方法に従ってスレッドを割り当てた場合の動作を示す説明図である。
【図３】図３は、マルチコアプロセッサシステム１００のハードウェア例を示すブロック図である。
【図４】図４は、マルチコアプロセッサシステム１００のソフトウェア例を示すブロック図である。
【図５】図５は、スケジューリング方法選択部４２４とマスタスケジューラ４２５の機能を示すブロック図である。
【図６】図６は、割込回数テーブル４０３の記憶内容の一例を示す説明図である。
【図７】図７は、スケジューリング情報テーブル４０４の一例を示す説明図である。
【図８】図８は、割込平準化優先スケジューリング方法に従ったスレッドの割当方法例を示す説明図（その１）である。
【図９】図９は、割込平準化優先スケジューリング方法に従ったスレッドの割当方法例を示す説明図（その２）である。
【図１０】図１０は、割込平準化優先スケジューリング方法に従ったスレッドの割当方法例を示す説明図（その３）である。
【図１１】図１１は、負荷優先スケジューリング方法による実行結果の一例を示す説明図である。
【図１２】図１２は、割込平準化優先スケジューリング方法による実行結果の一例を示す説明図である。
【図１３】図１３は、負荷優先スケジューリング方法による実行結果の他の例を示す説明図である。
【図１４】図１４は、割込平準化優先スケジューリング方法による実行結果の他の例を示す説明図である。
【図１５】図１５は、スケジューリング方法切替の判断例を示す説明図である。
【図１６】図１６は、Ｏ（Ｍ）の設定例を示す説明図である。
【図１７】図１７は、マスタＯＳのスケジューリング方法切替処理手順の一例を示すフローチャートである。
【図１８】図１８は、スレーブＯＳのスケジューリング方法切替処理手順の一例を示すフローチャートである。
【図１９】図１９は、割込平準化優先スケジューリング方法に従った割当処理手順の一例を示すフローチャートである。
【図２０】図２０は、本実施の形態にかかるコンピュータを用いたシステムの適用例を示す説明図である。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して、開示のデータ処理システム、およびスケジューリング方法の実施の形態を詳細に説明する。なお、本実施の形態にかかるデータ処理システムの例として、複数のＣＰＵを有するマルチコアプロセッサシステムにて説明を行う。１つのＣＰＵが、１つのデータ処理装置となる。マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例にあげて説明する。
【００１２】
図１は、マルチコアプロセッサシステム１００が負荷優先スケジューリング方法に従ってスレッドを割り当てた場合の動作を示す説明図である。図１で示す、複数のＣＰＵを有するマルチコアプロセッサシステム１００は、複数のＣＰＵの負荷が均等になるようにスレッドが割り当てられている。グラフ１０１では、各スレッドの割込回数を示しており、符号１０２で示すマルチコアプロセッサシステム１００は、負荷優先スケジューリング方法に従った場合のスレッドの割当状態を示している。
【００１３】
図１で示すマルチコアプロセッサシステム１００で実行中のスレッドは、スレッド０−０、スレッド０−１、スレッド０−２、スレッド１−０、スレッド１−１、スレッド１−２、スレッド２−０、スレッド３−０である。このうち、スレッド０−０〜スレッド０−２は、プロセス０に属しており、スレッド１−０〜スレッド１−２は、プロセス１に属している。プロセスとは、ＯＳにおける管理単位で、一つのプロセスには複数のスレッドが属することができる。同一のプロセスに属するスレッドは、メモリなどのＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が管理する計算機資源を共有することができる。なお、説明を簡略化するため、図１におけるスレッドの負荷は全て同一とする。
【００１４】
また、ＣＰＵ＃０はスレッド０−０とスレッド３−０を実行し、ＣＰＵ＃１はスレッド０−１とスレッド１−０を実行し、ＣＰＵ＃２はスレッド０−２とスレッド１−１を実行し、ＣＰＵ＃３はスレッド２−０とスレッド１−２を実行している。さらに、スレッド０−０、スレッド０−２、スレッド１−０、スレッド１−１は、割込処理が頻繁に発生するスレッドである。割込処理が頻繁に発生するスレッドの例としては、ハードウェアリソースにアクセスするスレッド等がある。ハードウェアから割込信号が発生すると、割込コントローラが割込信号を受信し、ＣＰＵに通知する。ＣＰＵは、割込信号に対応した割込処理を実行する。
【００１５】
グラフ１０１は、負荷優先スケジューリング方法に従ってスレッドを割り当てた場合の各ＣＰＵの割込回数の多さを表示したグラフである。グラフ１０１は、割込回数が多いスレッドが２つ割り当てられたＣＰＵ＃２が最も割込処理が多いことを示している。なお、割込回数は、割込コントローラによって割込処理の回数をカウントする。具体的に、割込コントローラは、割込信号を受信した際にＣＰＵにて割込処理が１回実行されることとして回数をインクリメントしておき、ＣＰＵは、他のスレッドに切り替えるときに、回数を取得することで、スレッドごとの割込回数を取得することができる。
【００１６】
割込回数が多いＣＰＵ＃２は、スレッド１−１とスレッド０−２の処理が遅延することになる。このとき、スレッド０−２と同一プロセスであるスレッド０−０、スレッド０−１がスレッド０−２の処理を待ち合わせている場合、スレッド０−０、スレッド０−１の処理も停止し、マルチコアプロセッサシステム１００全体の処理が遅延することになる。同様に、スレッド１−０、スレッド１−２もスレッド１−１の処理を待ち合わせている場合、スレッド１−０、スレッド１−２の処理も停止する。
【００１７】
図２は、マルチコアプロセッサシステム１００が割込平準化優先スケジューリング方法に従ってスレッドを割り当てた場合の動作を示す説明図である。割込平準化優先スケジューリング方法に従った場合、各スレッドは、割込処理時間を含めたスレッドの実行時間が均等になるようにＣＰＵに割り当てられている。グラフ２０１では、各スレッドの割込回数を示しており、符号２０２で示すマルチコアプロセッサシステム１００は、割込平準化優先スケジューリング方法に従った場合のスレッドの割当状態を示している。なお、図２におけるスレッド、プロセスの関係については、図１と同様であるとし、説明を省略する。
【００１８】
図２において、ＣＰＵ＃０は、スレッド０−０とスレッド０−１を実行し、ＣＰＵ＃１は、スレッド１−０とスレッド３−０を実行し、ＣＰＵ＃２はスレッド０−２とスレッド２−０を実行し、ＣＰＵ＃３はスレッド１−１とスレッド１−２を実行している。このように、マルチコアプロセッサシステム１００は、割込処理の回数が多いスレッド群を、ＣＰＵ＃０〜ＣＰＵ＃３で分散するように割り当てることで、ＣＰＵ＃０〜ＣＰＵ＃３での割込回数を均等にしている。
【００１９】
グラフ２０１は、割込平準化優先スケジューリング方法に従ってスレッドを割り当てた場合の各ＣＰＵの割込回数の多さを表示したグラフである。グラフ２０１は、各ＣＰＵでの割込回数が均等となっていることを示している。
【００２０】
なお、スレッドの負荷が異なる場合、負荷優先スケジューリング方法に従ってスレッドの割当を行った方が効率がよいときもある。したがって、マルチコアプロセッサシステム１００は、割込処理の回数から予測される実行時間に基づいて、負荷優先スケジューリング方法と割込平準化優先スケジューリング方法のいずれかのスケジューリング方法を選択する。これにより、マルチコアプロセッサシステム１００は、実行状況に応じて効率のより良いスケジューリング方法を選ぶことで、システム全体の処理速度を向上することができる。
【００２１】
（マルチコアプロセッサシステム１００のハードウェア）
図３は、マルチコアプロセッサシステム１００のハードウェア例を示すブロック図である。本実施の形態におけるマルチコアプロセッサシステム１００は、携帯電話などの携帯端末を想定している。図３において、マルチコアプロセッサシステム１００は、ＣＰＵｓ３０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３０３と、を含む。また、マルチコアプロセッサシステム１００は、フラッシュＲＯＭ３０４と、フラッシュＲＯＭコントローラ３０５と、フラッシュＲＯＭ３０６と、を含む。また、マルチコアプロセッサシステム１００は、ユーザやその他の機器との入出力装置として、ディスプレイ３０７と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）３０８と、キーボード３０９と、を含む。また、各部はバス３１０によってそれぞれ接続されている。
【００２２】
ここで、ＣＰＵｓ３０１は、マルチコアプロセッサシステム１００の全体の制御を司る。ＣＰＵｓ３０１は、ＣＰＵ＃０〜ＣＰＵ＃３を含む。また、ＣＰＵｓ３０１は、専用のキャッシュメモリを有してもよい。また、マルチコアプロセッサシステム１００は、複数のコアを含むマルチコアプロセッサシステムであってもよい。なお、マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、シングルコアのプロセッサであるＣＰＵが並列されている形態を例にあげて説明する。
【００２３】
ＲＯＭ３０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ３０３は、ＣＰＵｓ３０１のワークエリアとして使用される。フラッシュＲＯＭ３０４は、読出し速度が高速なフラッシュＲＯＭであり、たとえば、ＮＯＲ型フラッシュメモリである。たとえば、フラッシュＲＯＭ３０４は、ＯＳなどのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、ＯＳを更新する場合、マルチコアプロセッサシステム１００は、Ｉ／Ｆ３０８によって新しいＯＳを受信し、フラッシュＲＯＭ３０４に格納されている古いＯＳを、受信した新しいＯＳに更新する。
【００２４】
フラッシュＲＯＭコントローラ３０５は、ＣＰＵｓ３０１の制御に従ってフラッシュＲＯＭ３０６に対するデータのリード／ライトを制御する。フラッシュＲＯＭ３０６は、データの保存、運搬を主に目的としたフラッシュＲＯＭであり、たとえば、ＮＡＮＤ型フラッシュメモリである。フラッシュＲＯＭ３０６は、フラッシュＲＯＭコントローラ３０５の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム１００を使用するユーザがＩ／Ｆ３０８を通して取得した画像データ、映像データや、また本実施の形態にかかるスケジューリング方法を実行するプログラムなどである。フラッシュＲＯＭ３０６は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００２５】
ディスプレイ３０７は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ３０７は、たとえば、ＴＦＴ（Ｔｈｉｎ  Ｆｉｌｍ  Ｔｒａｎｓｉｓｔｏｒ）液晶ディスプレイなどを採用することができる。
【００２６】
Ｉ／Ｆ３０８は、通信回線を通じてＬＡＮ、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク３１１に接続され、ネットワーク３１１を介して他の装置に接続される。そして、Ｉ／Ｆ３０８は、ネットワーク３１１と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ３０８には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２７】
キーボード３０９は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード３０９は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００２８】
図４は、マルチコアプロセッサシステム１００のソフトウェア例を示すブロック図である。図４で示すマルチコアプロセッサシステム１００は、ＣＰＵ＃０、ＣＰＵ＃１、共有メモリ４０１を含む。また、ＣＰＵ＃０、ＣＰＵ＃１は、それぞれ、割込コントローラ４０２＃０、割込コントローラ４０２＃１と通信可能である。また、ＣＰＵ＃０は、スレッド０−０、スレッド３−０を実行しており、ＣＰＵ＃１は、スレッド０−１、スレッド１−０を実行している。
【００２９】
共有メモリ４０１は、ＣＰＵｓ３０１からアクセス可能な記憶領域である。記憶領域とは、具体的には、たとえば、ＲＡＭ３０３、フラッシュＲＯＭ３０４、フラッシュＲＯＭ３０６である。また、共有メモリ４０１は、割込回数テーブル４０３とスケジューリング情報テーブル４０４を有する。割込回数テーブル４０３は、スレッドごとの割込回数を記憶するテーブルである。なお、割込回数テーブル４０３の詳細については、図６にて後述する。スケジューリング情報テーブル４０４は、スケジューリング情報を記憶するテーブルである。スケジューリング情報とは、ＣＰＵに割り当てられたスレッドの情報である。スケジューリング情報の具体例として、ＣＰＵ＃０にスレッド０−０が割り当てられているという情報である。なお、スケジューリング情報テーブル４０４の詳細については、図７にて後述する。
【００３０】
割込コントローラ４０２＃０は、フラッシュＲＯＭコントローラ３０５、ディスプレイ３０７、Ｉ／Ｆ３０８、キーボード３０９、といったデバイスからの割込信号を受信し、ＣＰＵ＃０に通知する。同様に、割込コントローラ４０２＃１は、デバイスからの割込信号を受信し、ＣＰＵ＃１に通知する。また、割込コントローラ４０２は、デバイスからの割込信号の回数を記録する。記録された情報は、たとえば、割込コントローラ４０２内部のステータスレジスタ等に記憶される。
【００３１】
なお、割込の種別として、デバイスからの割込信号によるハードウェア割込と、ＣＰＵ内部の要因で発生するソフトウェア割込とが存在する。ソフトウェア割込による割込処理が発生した場合も、ＣＰＵは、割込処理の回数を、たとえば、ＣＰＵのレジスタ、ＲＡＭ３０３等に記憶してもよい。
【００３２】
続けて、マルチコアプロセッサシステム１００で実行するソフトウェアについて説明する。ＣＰＵ＃０はマスタＯＳ４１１を実行し、ＣＰＵ＃１はスレーブＯＳ４１２を実行する。マスタＯＳ４１１は、スケジューラ４２１＃０、割込回数取得部４２２＃０、ＤＢ管理部４２３＃０、スケジューリング方法選択部４２４、マスタスケジューラ４２５を含む。スレーブＯＳ４１２は、スケジューラ４２１＃１、割込回数取得部４２２＃１、ＤＢ管理部４２３＃１を含む。スケジューラ４２１＃１〜ＤＢ管理部４２３＃１は、マスタＯＳ４１１、スレーブＯＳ４１２が共に含む機能である。
【００３３】
スケジューラ４２１は、スレッドの割当を制御する機能を有する。具体的に、スケジューラ４２１は、予めタイムスライスで決定された時刻の経過後に、ＣＰＵに次に割り当てるスレッドを決定し、決定されたスレッドをＣＰＵに割り当てる。たとえば、タイムスライスが２［ｍｓ］である場合、スケジューラ４２１＃０は、２［ｍｓ］経過する度に、スレッド０−０とスレッド３−０を切り替える。また、スケジューラ４２１は、スレッドの切替が発生した場合、スレッド切替が発生したことを割込回数取得部４２２に通知する。
【００３４】
また、スケジューラ４２１は、割込処理が発生した場合、ＣＰＵに割込処理に対応する割込ハンドラを実行するように設定する。割込処理終了後、スケジューラ４２１は、割込処理にかかった割込処理時間を取得する。スケジューラ４２１は、割込処理を実行する度に割込処理時間を更新する。具体的な更新方法として、たとえば、スケジューラ４２１は、レジスタ、ＲＡＭ３０３等の記憶領域に記憶されていた割込処理時間と、今回取得した割込処理時間を平均して得られた値を、再度記憶領域に記憶する。また、スケジューラ４２１は、スレッド切替時、記憶領域に記憶されていた割込処理時間を割込回数取得部４２２に通知する。
【００３５】
割込回数取得部４２２は、スレッド切替が通知された場合、スレッドごとの割込回数を取得する。たとえば、スレッド０−０からスレッド３−０に切り替わった場合、割込回数取得部４２２＃０は、割込コントローラ４０２＃０内部のステータスレジスタ等に記憶された割込回数を切替前スレッドとなるスレッド０−０の割込回数として取得する。また、割込回数取得部４２２は、ＣＰＵ内部の要因で発生したソフトウェア割込が存在する場合、ソフトウェア割込の回数も併せて割込回数を取得してもよい。この場合、割込回数取得部４２２は、ハードウェア割込の回数とソフトウェア割込の回数を合算して切替前スレッドの割込回数に設定する。取得後、割込回数取得部４２２は、切替前スレッドの割込回数と、スレッド切替時に併せて通知された割込処理時間とをＤＢ管理部４２３に通知する。
【００３６】
ＤＢ管理部４２３は、通知されたスレッドの割込回数、割込処理時間に基づいて、割込回数テーブル４０３を更新する機能を有する。具体的な更新方法として、ＤＢ管理部４２３は、通知された値をそのまま割込回数テーブル４０３に格納してもよいし、割込回数テーブル４０３にある値と通知された値とを平均して割込回数テーブル４０３に格納してもよい。
【００３７】
また、マスタＯＳ４１１上のＤＢ管理部４２３＃０は、マスタスケジューラ４２５から通知されたスケジューリング情報を用いて、スケジューリング情報テーブル４０４を更新する機能を有する。たとえば、ＤＢ管理部４２３＃０は、新たなスレッドがＣＰＵ＃０に割り当てられたというスケジューリング情報を、スケジューリング情報テーブル４０４に格納する。
【００３８】
また、ＤＢ管理部４２３＃０は、スケジューリング方法選択部４２４からスレッドごとの割込回数と割込処理時間、スケジューリング情報の参照要求があった場合、割込回数テーブル４０３、スケジューリング情報テーブル４０４から対応する情報を取得する。
【００３９】
スケジューリング方法選択部４２４は、ＤＢ管理部４２３から得たスレッドごとの割込回数と割込処理時間、スケジューリング情報に基づいて、負荷優先スケジューリング方法か割込平準化優先スケジューリング方法のいずれか一方を選択する機能を有する。具体的な選択方法は、図５にて後述する。また、スケジューリング方法選択部４２４は、選択されたスケジューリング方法をマスタスケジューラ４２５に通知する。
【００４０】
マスタスケジューラ４２５は、マルチコアプロセッサシステム１００で実行中のスレッドに対して、負荷優先スケジューリング方法か割込平準化優先スケジューリング方法かのうち、選択されたスケジューリング方法に従ったスケジューリングを行う機能を有する。たとえば、負荷優先スケジューリング方法が選択された場合、マスタスケジューラ４２５は、各スレッドの負荷に基づいて、各ＣＰＵの負荷が均等になるようにスケジューリングを行う。また、割込平準化優先スケジューリング方法が選択された場合、マスタスケジューラ４２５は、割込処理時間を含めたスレッドの実行時間が均等になるようにスケジューリングを行う。なお、割込平準化優先スケジューリング方法の詳細については、図８〜図１０にて後述する。
【００４１】
（スケジューリング方法選択部４２４の機能）
次に、スケジューリング方法選択部４２４とマスタスケジューラ４２５の機能について説明する。図５は、スケジューリング方法選択部４２４とマスタスケジューラ４２５の機能を示すブロック図である。スケジューリング方法選択部４２４は、算出部５０１と、算出部５０２と、比較部５０３と、選択部５０４と、を含む。また、マスタスケジューラ４２５は、割当部５０５を含む。この制御部となる機能（算出部５０１〜割当部５０５）は、記憶装置に記憶されたプログラムをＣＰＵ＃０が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図３に示したＲＯＭ３０２、ＲＡＭ３０３、フラッシュＲＯＭ３０４、フラッシュＲＯＭ３０６などである。
【００４２】
算出部５０１は、第１の複数の処理を第１スケジューリング方法でスケジューリングしたときの第１実行時間を算出する機能を有する。なお、第１の複数の処理とは、マルチコアプロセッサシステム１００で実行中のスレッドであり、第１スケジューリング方法とは、負荷優先スケジューリング方法である。なお、処理とは、スレッドのことであるが、スレッドの一部分であってもよい。また、算出部５０１は、新たな処理を複数のデータ処理装置に割り当てるとき、新たな処理と第１の複数の処理とを含めた第２の複数の処理を第１スケジューリング方法でスケジューリングしたときの第１実行時間を算出してもよい。
【００４３】
また、算出部５０１は、ＣＰＵに割り当てられた処理の負荷量と処理実行中に発生する割込処理にかかる割込処理時間とのＣＰＵごとの合計値のうち、最も大きい合計値を第１実行時間として算出してもよい。処理の負荷量は、処理が完了するまでの時間で示す。処理すべき量が多いほど、処理が完了するまでの時間が長くなり、負荷量が増大していくことになる。なお、負荷量、割込処理時間は、割込回数テーブル４０３に格納されている。具体的に、負荷量は、スレッドが完了するまでの時間であってもよいし、スレッドの一部分の処理が完了するまでの時間であってもよい。一部分の処理としては、たとえば、特定の同期ポイントまでの処理である。
【００４４】
たとえば、ＣＰＵ＃０にスレッド０−０とスレッド３−０が割り当てられており、ＣＰＵ＃１にスレッド０−１とスレッド１−０が割り当てられている場合を想定する。さらに、スレッド０−０、スレッド０−１、スレッド１−０、スレッド３−０の負荷量を、それぞれ、２［ｍｓ］、４［ｍｓ］、４［ｍｓ］、６［ｍｓ］であると想定する。また、割込処理にかかる割込処理時間について、５［ｍｓ］、０［ｍｓ］、４．８［ｍｓ］、０［ｍｓ］と想定する。このとき、算出部５０１は、ＣＰＵ＃０の合計値を、（２＋５）＋（６＋０）＝７＋６＝１３とし、ＣＰＵ＃１の合計値を、（４＋０）＋（４＋４．８）＝４＋８．８＝１２．８とし、第１実行時間を１３［ｍｓ］として算出する。
【００４５】
また、算出部５０１は、後述する（１）式によって合計時間を算出してもよい。なお、算出された第１実行時間は、ＣＰＵ＃０の汎用レジスタ、ＲＡＭ３０３、フラッシュＲＯＭ３０４、フラッシュＲＯＭ３０６などの記憶領域に格納される。
【００４６】
算出部５０２は、第１の複数の処理を第１スケジューリング方法とは異なる第２スケジューリング方法でスケジューリングしたときの第２実行時間を算出する機能を有する。なお、第２スケジューリング方法とは、割込平準化優先スケジューリング方法である。また、算出部５０２は、第２の複数の処理を第２スケジューリング方法でスケジューリングしたときの第２実行時間を算出する。なお、算出部５０２は、算出部５０１での説明において、第１スケジューリング方法を第２スケジューリング方法に置き換えた状態に対応するため、説明を省略する。また、算出された第２実行時間は、ＣＰＵ＃０の汎用レジスタ、ＲＡＭ３０３、フラッシュＲＯＭ３０４、フラッシュＲＯＭ３０６などの記憶領域に格納される。
【００４７】
比較部５０３は、第１実行時間と第２実行時間とを比較する機能を有する。また、比較部５０３は、現在のスケジューリング方法に対応する実行時間と、もう一方のスケジューリング方法に対応する実行時間と処理割当にかかる時間との和と、を比較してもよい。たとえば、現在のスケジューリング方法が負荷優先スケジューリング方法であり、第１実行時間が１２．８［ｍｓ］であり、割込平準化優先スケジューリング方法に対応する第２実行時間が１２．４［ｍｓ］であると想定する。さらに、処理割当にかかる時間が０．３［ｍｓ］であると想定する。このとき、比較部５０３は、１２．８［ｍｓ］と、１２．４＋０．３［ｍｓ］を比較する。なお、比較結果は、ＣＰＵ＃０の汎用レジスタ、ＲＡＭ３０３、フラッシュＲＯＭ３０４、フラッシュＲＯＭ３０６などの記憶領域に格納される。
【００４８】
選択部５０４は、第２の複数の処理を複数のデータ処理装置に割り当てるために、比較部５０３による第１実行時間と第２実行時間との比較結果に基づいて、第１スケジューリング方法または第２スケジューリング方法を選択する機能を有する。たとえば、選択部５０４は、比較結果が第２実行時間の方が小さいことを示す場合、第２スケジューリング方法を選択する。また、選択部５０４は、現在のスケジューリング方法に対応する実行時間ともう一方のスケジューリング方法に対応する実行時間と処理割当にかかる時間との和との比較結果に基づいてスケジューリング方法を選択してもよい。なお、選択結果は、ＣＰＵ＃０の汎用レジスタ、ＲＡＭ３０３、フラッシュＲＯＭ３０４、フラッシュＲＯＭ３０６などの記憶領域に格納される。
【００４９】
割当部５０５は、選択部５０４によって選択されたスケジューリング方法に従って各データ処理装置に処理を割り当てる機能を有する。たとえば、割当部５０５は、選択部５０４によって第２スケジューリング方法が選択された場合、第２スケジューリング方法に従って各ＣＰＵにスレッドを割り当てる。
【００５０】
また、割当部５０５は、第２スケジューリング方法が選択された場合、第２の複数の処理の中で割込処理が第１頻度で発生する処理を第２の複数のデータ処理装置に割り当てる。続けて、割当部５０５は、第２の複数の処理の中で割込処理が第２頻度で発生する処理を処理と同じプロセスに含まれる処理が割り当てられた複数のデータ処理装置の中のデータ処理装置に割り当てる。なお、第１頻度は、第２頻度より高い。また、割込処理の頻度は、単位時間当たりの割込回数で算出することができる。たとえば、割当部５０５は、割込処理が高頻度であるスレッドを、ＣＰＵ＃０〜ＣＰＵ＃３に割り当てる。続けて、割当部５０５は、低頻度のスレッドを、同じプロセスに含まれるスレッドが割り当てられたＣＰＵに割り当てる。
【００５１】
また、割当部５０５は、第２頻度で発生する処理が割り当てられた後に、第２の複数の処理の中で割り当てられていない処理を、複数のデータ処理装置の負荷が均等になるように複数のデータ処理装置に割り当てる。たとえば、割当部５０５は、割込処理が低頻度で未割当のスレッドを、ＣＰＵ＃０〜ＣＰＵ＃３の負荷が均等になるように割り当てる。なお、割当部５０５によって決定した各ＣＰＵへの割当情報は、スケジューリング情報として、スケジューリング情報テーブル４０４に格納される。
【００５２】
図６は、割込回数テーブル４０３の記憶内容の一例を示す説明図である。割込回数テーブル４０３は、スレッドごとに割込回数と割込処理時間を記憶するテーブルである。図６で示す割込回数テーブル４０３には、レコード４０３−１〜レコード４０３−８という８つのレコードが登録されている。割込回数テーブル４０３は、スレッドＩＤ、割込回数、割込処理時間、負荷量という４つのフィールドを含む。
【００５３】
スレッドＩＤフィールドには、スレッドを一意に識別可能な識別情報が格納される。具体的な識別情報としては、マルチコアプロセッサシステム１００が一意に採番した値や、スレッドコンテキストへのポインタ等が採用される。本実施の形態で示す割込回数テーブル４０３は、説明の簡略化のため、スレッドに付与した符号を識別情報として格納している。割込回数フィールドには、スレッド実行中に割込処理が実行された回数が格納される。割込処理時間フィールドには、割込処理１回分の平均時間が格納される。
【００５４】
たとえば、レコード４０３−１を例にあげると、レコード４０３−１は、負荷量が２［ｍｓ］であり、スレッド０−０が実行中の間に５回の割込処理が実行されており、割込処理１回分の平均時間が１［ｍｓ］であることを示している。
【００５５】
また、割込回数テーブル４０３への更新方法として、マルチコアプロセッサシステム１００は、一定期間ごとに初期化して、一定期間の割込回数、割込処理時間を更新してもよい。この場合、マルチコアプロセッサシステム１００は、割込の傾向が変わったときにすぐ対応することができる。また、マルチコアプロセッサシステム１００は、割込回数テーブル４０３に格納されている割込回数と割込処理時間と、一定期間の割込回数と割込処理時間とのそれぞれの平均を算出して割込回数テーブル４０３に格納してもよい。
【００５６】
なお、スケジューリング方法選択部４２４およびマスタスケジューラ４２５、とスレッドの開発元は異なる可能性がある。この場合、スケジューリング方法選択部４２４およびマスタスケジューラ４２５は、どのスレッドが高頻度で割込を受けるか判断することが困難である。したがって、図６のように、過去の履歴を記憶領域に記憶することで、スケジューリング方法選択部４２４およびマスタスケジューラ４２５は、高頻度で割込を受けるスレッドを判断することができる。
【００５７】
図７は、スケジューリング情報テーブル４０４の一例を示す説明図である。スケジューリング情報テーブル４０４は、ＣＰＵごとに割り当てられたスレッドを記憶するテーブルである。図７で示すスケジューリング情報テーブル４０４には、レコード４０４−１〜レコード４０４−４という４つのレコードが登録されている。スケジューリング情報テーブル４０４は、ＣＰＵＩＤ、スレッドＩＤという２つのフィールドを含む。
【００５８】
ＣＰＵＩＤフィールドには、ＣＰＵを一意に識別可能な識別情報が格納される。スレッドＩＤフィールドには、ＣＰＵに割り当てられたスレッドの識別情報が格納される。たとえば、レコード４０４−１を例にあげると、レコード４０４−１は、ＣＰＵ＃０にスレッド０−０とスレッド３−０が割り当てられていることを示している。
【００５９】
また、図７の状態で、たとえば、マスタスケジューラ４２５からスレッド３−０をＣＰＵ＃１に割り当てるというスケジューリング情報が通知された場合を想定する。このとき、ＤＢ管理部４２３は、レコード４０４−１のスレッドＩＤフィールドの値を、“０−０、３−０”から“０−０”に変更し、レコード４０４−２のスレッドＩＤフィールドの値を、“０−１、１−０”から“０−１、１−０、３−０”に変更する。
【００６０】
また、スレッドのＣＰＵ間の移行方法として、たとえば、移行元ＣＰＵが、スレッドの実行中の情報となるスレッドコンテキストを共有メモリ４０１に退避し、移行先ＣＰＵが退避されたスレッドコンテキストを読み込む、といった方法が存在する。
【００６１】
続けて、図８〜図１０にて、割込平準化優先スケジューリング方法によるスレッド割当方法の一例について説明する。割込平準化優先スケジューリング方法は、マスタスケジューラ４２５によって実行される。
【００６２】
図８は、割込平準化優先スケジューリング方法に従ったスレッドの割当方法例を示す説明図（その１）である。初めに、マスタスケジューラ４２５は、割込が高頻度となるスレッドを各ＣＰＵに割り当てる。割込が高頻度であるか否かの判断方法として、たとえば、スケジューリング方法選択部４２４は、スレッドごとの割込回数を取得した際に、所定の閾値以上である場合、該当のスレッドが高頻度であると判断して記憶領域に記憶する。続けて、マスタスケジューラ４２５は、記憶された判断結果を用いて割込が高頻度のスレッドを取得する。また、スケジューリング方法選択部４２４は、割込回数が最多となるスレッドから、所定の個数のスレッドを、割込が高頻度となるスレッドとして判断してもよい。
【００６３】
たとえば、図６に示した割込回数テーブル４０３にて、所定の閾値＝５回とすると、スケジューリング方法選択部４２４は、高頻度となるスレッド群がスレッド０−０、スレッド０−２、スレッド１−０、スレッド１−１であると判断する。マスタスケジューラ４２５は、高頻度のスレッド群を、ＣＰＵ＃０〜ＣＰＵ＃３に割り当てる。なお、高頻度のスレッド群のＣＰＵ＃０〜ＣＰＵ＃３への割当方法として、マスタスケジューラ４２５は、負荷優先スケジューリング方法を採用してもよい。
【００６４】
たとえば、マスタスケジューラ４２５は、高頻度となるスレッド群のうち、最も高負荷となったスレッドをＣＰＵ＃０に割り当て、次に負荷の高いスレッドをＣＰＵ＃１に割り当て、といったことを行う。全てのＣＰＵに割り当てを行った時点で、高頻度となるスレッド群のうち未割当のスレッドが存在する場合、マスタスケジューラ４２５は、最も負荷の低いＣＰＵから順に、未割当のスレッドを割り当てる。
【００６５】
図８の例では、マスタスケジューラ４２５は、スレッド０−０をＣＰＵ＃０に割り当て、スレッド１−０をＣＰＵ＃１に割り当て、スレッド０−２をＣＰＵ＃２に割り当て、スレッド１−１をＣＰＵ＃３に割り当てる。図８のように、高頻度となるスレッド群を最初に割り当てることで、マルチコアプロセッサシステム１００は、割込が高頻度のスレッドが一つのＣＰＵに偏って割り当てられることを防ぐことができる。
【００６６】
図９は、割込平準化優先スケジューリング方法に従ったスレッドの割当方法例を示す説明図（その２）である。図９で示す状態は、図８によって示した割込が高頻度のスレッドを割り当てた後の状態を示している。マスタスケジューラ４２５は、割込が低頻度のスレッドのうち、同一プロセスのスレッド数が最多となるスレッド群を選択する。選択後、マスタスケジューラ４２５は、選択されたスレッド群と同一プロセスであり、割込回数が高頻度のスレッドが存在するかを判断する。存在する場合、マスタスケジューラ４２５は、選択されたスレッド群を、同一プロセス内の割込回数が高頻度のスレッドが割り当てられたＣＰＵ群に割り当てる。
【００６７】
具体的には、低頻度のスレッドとなる、スレッド０−１、スレッド１−２、スレッド２−０、スレッド３−０について、マスタスケジューラ４２５は、同一プロセスのスレッド数が最多となるプロセス０のスレッド群を選択する。続けて、マスタスケジューラ４２５は、スレッド０−１を、同一プロセス内の割込回数が高頻度のスレッドであるスレッド０−０が割り当てられたＣＰＵ＃０、スレッド０−２が割り当てられたＣＰＵ＃２、のうちいずれか一方のＣＰＵに割り当てる。この時の割当方法として、マスタスケジューラ４２５は、負荷優先スケジューリング方法を採用してもよい。
【００６８】
たとえば、マスタスケジューラ４２５は、ＣＰＵ＃０とＣＰＵ＃２のうち、負荷の低いＣＰＵにスレッド０−１を割り当てる。スレッド１−２の割当についても同様に、マスタスケジューラ４２５は、ＣＰＵ＃１とＣＰＵ＃３のうち、負荷の低いＣＰＵにスレッド１−２を割り当てる。図９の例では、マスタスケジューラ４２５は、スレッド０−１をＣＰＵ＃０に割り当て、スレッド１−２をＣＰＵ＃３に割り当てる。
【００６９】
図９のように、割込が低頻度のスレッドを、同一プロセスの高頻度のスレッドが割り当てられたＣＰＵに割り当てることで、割込が高頻度のスレッドが割り当てられたＣＰＵに、他のプロセスグループのスレッドが割り当てられる可能性を減らすことになる。したがって、割込が高頻度のスレッドによって発生する処理の遅延による悪影響を、他のプロセスグループのスレッドに与えないようにすることができる。
【００７０】
図１０は、割込平準化優先スケジューリング方法に従ったスレッドの割当方法例を示す説明図（その３）である。図１０で示す状態は、図９によって示した割込が低頻度のスレッドを、同一プロセスの高頻度のスレッドが割り当てられたＣＰＵに割り当てた状態である。マスタスケジューラ４２５は、未割当のスレッドを、負荷優先スケジューリング方法に従って割り当てる。
【００７１】
たとえば、マスタスケジューラ４２５は、未割当であるスレッド２−０、スレッド３−０を、負荷優先スケジューリング方法に従って割り当てる。図１０の例では、マスタスケジューラ４２５は、スレッド３−０をＣＰＵ＃１に割り当て、スレッド２−０をＣＰＵ＃２に割り当てる。
【００７２】
次に、図１１〜図１４にて、マルチコアプロセッサシステム１００が負荷優先スケジューリング方法と割込平準化優先スケジューリング方法のいずれかの方法に従った場合のスレッドの実行結果について説明する。図１１〜図１４に共通する処理情報として、タイムスライスが２［ｍｓ］であり、各スレッドの負荷量として、スレッド０−０が２［ｍｓ］、スレッド０−１が４［ｍｓ］、スレッド０−２が４［ｍｓ］、スレッド２−０が４［ｍｓ］である。さらに、残りのスレッドの負荷量として、スレッド３−０が６［ｍｓ］、スレッド１−０が４［ｍｓ］、スレッド１−１が４［ｍｓ］、スレッド１−２が６［ｍｓ］となる。
【００７３】
また、図１１、図１２では、割込が高頻度のスレッドに関して、１［ｍｓ］に１回、処理時間が１．２［ｍｓ］となる割込処理が発生していることを想定している。また、図１３、図１４では、割込が高頻度のスレッドに関して、１［ｍｓ］に１回、処理時間が０．５［ｍｓ］となる割込処理が発生していることを想定している。
【００７４】
図１１は、負荷優先スケジューリング方法による実行結果の一例を示す説明図である。図１１では、負荷優先スケジューリング方法の割当状態を示すスレッド割当状態１１０１と、スレッドの処理状態を示す処理情報１１０２と、実行結果を示すタイムチャート１１０３とを表示している。スレッド割当状態１１０１で示すスレッドの割当状態は、図１と等しい状態であるため、説明を省略する。また、処理情報１１０２が示す値は、前述で説明済みであるため、説明を省略する。
【００７５】
タイムチャート１１０３にて、ＣＰＵ＃０は、スレッド０−０とスレッド３−０の処理を、７．２［ｍｓ］で行う。同様に、ＣＰＵ＃１はスレッド０−１とスレッド１−０の処理を、１０．４［ｍｓ］で行い、ＣＰＵ＃２はスレッド０−２とスレッド１−１の処理を、１２．８［ｍｓ］で行い、ＣＰＵ＃３はスレッド２−０とスレッド１−２の処理を、１０［ｍｓ］で行う。したがって、マルチコアプロセッサシステム１００は、負荷優先スケジューリング方法を実行した場合、処理情報１１０２で示されている各スレッドに与えられた負荷量を、１２．８［ｍｓ］で処理することが可能である。
【００７６】
図１２は、割込平準化優先スケジューリング方法による実行結果の一例を示す説明図である。図１２では、割込平準化優先スケジューリング方法の割当状態を示すスレッド割当状態１２０１と、処理情報１１０２と、実行結果を示すタイムチャート１２０２とを表示している。図１２で示すスレッド割当状態１２０１は、図２と等しい状態であるため、説明を省略する。
【００７７】
タイムチャート１２０２にて、ＣＰＵ＃０は、スレッド０−０とスレッド０−１の処理を、７．２［ｍｓ］で行う。同様に、ＣＰＵ＃１はスレッド１−０とスレッド３−０の処理を、１２．４［ｍｓ］で行い、ＣＰＵ＃２はスレッド０−２とスレッド２−０の処理を、１０．４［ｍｓ］で行い、ＣＰＵ＃３はスレッド１−１とスレッド１−２の処理を、１２．４［ｍｓ］で行う。したがって、マルチコアプロセッサシステム１００は、割込平準化優先スケジューリング方法を実行した場合、処理情報１１０２で示されている各スレッドに与えられた負荷量を、１２．４［ｍｓ］で処理することが可能である。
【００７８】
このように、マルチコアプロセッサシステム１００は、割込平準化優先スケジューリング方法を実行した場合、処理情報１１０２で示される状態に対する実行時間が１２．４［ｍｓ］となり、負荷優先スケジューリング方法より早く処理することになる。
【００７９】
図１３は、負荷優先スケジューリング方法による実行結果の他の例を示す説明図である。図１３では、負荷優先スケジューリング方法の割当状態を示すスレッド割当状態１１０１と、処理情報１３０１と、実行結果を示すタイムチャート１３０２とを表示している。処理情報１３０１で示す設定値は、前述で説明済みであるため、説明を省略する。
【００８０】
タイムチャート１３０２にて、ＣＰＵ＃０は、スレッド０−０とスレッド３−０の処理を、８．５［ｍｓ］で行う。同様に、ＣＰＵ＃１はスレッド０−１とスレッド１−０の処理を、９［ｍｓ］で行い、ＣＰＵ＃２はスレッド０−２とスレッド１−１の処理を、１０．５［ｍｓ］で行い、ＣＰＵ＃３はスレッド２−０とスレッド１−２の処理を、１０［ｍｓ］で行う。したがって、マルチコアプロセッサシステム１００は、負荷優先スケジューリング方法を実行した場合、処理情報１３０１で示されている各スレッドに与えられた負荷量を、１０．５［ｍｓ］で処理することが可能である。
【００８１】
図１４は、割込平準化優先スケジューリング方法による実行結果の他の例を示す説明図である。図１４では、割込平準化優先スケジューリングの割当状態を示すスレッド割当状態１２０１と、処理情報１３０１と、実行結果を示すタイムチャート１４０１とを表示している。
【００８２】
タイムチャート１４０１で示す説明図にて、ＣＰＵ＃０は、スレッド０−０とスレッド０−１の処理を、６．５［ｍｓ］で行う。同様に、ＣＰＵ＃１はスレッド１−０とスレッド３−０の処理を、１１［ｍｓ］で行い、ＣＰＵ＃２はスレッド０−２とスレッド２−０の処理を、９［ｍｓ］で行い、ＣＰＵ＃３はスレッド１−１とスレッド１−２の処理を、１１［ｍｓ］で行う。したがって、マルチコアプロセッサシステム１００は、割込平準化優先スケジューリング方法を実行した場合、処理情報１３０１で示されている各スレッドに与えられた負荷量を、１１［ｍｓ］で処理することが可能である。
【００８３】
したがって、マルチコアプロセッサシステム１００は、負荷優先スケジューリング方法を実行した場合、処理情報１３０１で示される負荷量に対する実行時間が１０．５［ｍｓ］となり、割込平準化優先スケジューリング方法より早く処理することになる。
【００８４】
このように、負荷優先スケジューリング方法と割込平準化優先スケジューリング方法とで処理が速くなるか否かは、スレッドの負荷量、割込の頻度、割込処理時間によって左右される。したがって、スケジューリング方法選択部４２４は、負荷優先スケジューリング方法と割込平準化優先スケジューリング方法とに従って動作した場合に予測される実行時間を算出し、算出された実行時間が短いスケジューリング方法を選択する。図１５にて、スケジューリング方法切替の判断例を説明する。
【００８５】
図１５は、スケジューリング方法切替の判断例を示す説明図である。図１５では、負荷優先スケジューリング方法と割込平準化優先スケジューリング方法を切り替える判断の一例を示している。スケジューリング方法選択部４２４は、負荷優先スケジューリング方法に従った場合、または割込平準化優先スケジューリング方法に従った場合の実行時間Ｔを下記（１）式にて算出する。
【００８６】
Ｔ＝Ｍａｘ（Ｔ（Ｎ））＝Ｍａｘ｛Σm｛Ｗ（Ｘ）＋Ｃ（Ｘ）×Ａ×Ｗ（Ｘ）／Ｙ｝｝  …（１）
【００８７】
ただし、ＮをＣＰＵ番号と定義し、Ｔ（Ｎ）をスレッドの処理に要する時間と定義し、ｍをＮ番目のＣＰＵに割り当てられたスレッドの個数と定義し、Ｗ（Ｘ）をスレッドＸの負荷量と定義する。また、タイムスライスをＹと定義し、Ｃ（Ｘ）をスレッドＸの１タイムスライス当たりの割込処理回数と定義し、Ａを割込処理に要する平均時間と定義する。なお、（１）式のΣ内の第１項が負荷量に相当し、第２項が割込処理時間に相当する。
【００８８】
スケジューリング方法選択部４２４は、（１）式によって負荷優先スケジューリング方法に従った場合の実行時間ＴＬと、割込平準化優先スケジューリング方法に従った場合の実行時間ＴＩを算出する。スケジューリング方法選択部４２４は、負荷優先スケジューリング方法選択中にスケジューリング判断式となる下記（２）式を満たす場合、割込平準化優先スケジューリング方法に切り替える。
【００８９】
ＴＬ＞ＴＩ＋Ｏ（Ｍ）  …（２）
【００９０】
ただし、Ｍをマルチコアプロセッサシステム１００内で実行中の総スレッド数とし、Ｏ（Ｍ）を総スレッド数がＭである場合の再スケジューリングに要する時間と定義する。また、スケジューリング方法選択部４２４は、割込平準化優先スケジューリング方法選択中にスケジューリング判断式となる下記（３）式を満たす場合、負荷優先スケジューリング方法に切り替える。
【００９１】
ＴＩ＞ＴＬ＋Ｏ（Ｍ）  …（３）
【００９２】
たとえば、マルチコアプロセッサシステム１００が符号１５０１で示す負荷優先スケジューリング方法であることを想定する。このとき、各スレッドの割当状態は、負荷分散スケジューリングに従っており、処理状態として処理情報１１０２に従っている。また、スレッド１−２は、起動要求を受けウェイトキュー１５０４に格納されている。なお、ウェイトキュー１５０４は、起動要求を受けたがＣＰＵにまだ割り当てていないスレッドを格納しておくキューである。
【００９３】
スレッド１−２がＣＰＵ＃０〜ＣＰＵ＃３のいずれかに割り当てられる場合、スケジューリング方法選択部４２４は、ＣＰＵ＃０〜ＣＰＵ＃３での実行時間ＴＬ＃０〜ＴＬ＃３を（１）式に従って以下のように算出する。
【００９４】
ＴＬ＃０＝Σm｛Ｗ（Ｘ）＋Ｃ（Ｘ）×Ａ×Ｗ（Ｘ）／Ｙ｝
⇔ＴＬ＃０＝（２＋１×１．２×２／２）＋（６＋０×１．２×６／２）
⇔ＴＬ＃０＝３．２＋６＝９．２［ｍｓ］
【００９５】
同様に、スケジューリング方法選択部４２４は、ＴＬ＃１〜ＴＬ＃３を（１）式に従って算出し、ＴＬ＃１＝１０．４［ｍｓ］、ＴＬ＃２＝１２．８［ｍｓ］、ＴＬ＃３＝１０．０［ｍｓ］を得る。続けて、スケジューリング方法選択部４２４は、負荷優先スケジューリング方法での実行時間ＴＬ＝Ｍａｘ（９．２、１０．４、１２．８、１０．０）＝１２．８を算出する。
【００９６】
また、スケジューリング方法選択部４２４は、割込平準化優先スケジューリング方法に従い、スレッドの割当状態を図１２のようになることを決定した後、ＣＰＵ＃０〜ＣＰＵ＃３での実行時間ＴＩ＃０〜ＴＩ＃３を（１）式に従って以下のように算出する。
【００９７】
ＴＩ＃０＝（２＋１×１．２×２／２）＋（４＋０×１．２×４／２）＝７．２［ｍｓ］
【００９８】
同様に、スケジューリング方法選択部４２４は、ＴＩ＃１〜ＴＩ＃３を（１）式に従って算出し、ＴＩ＃１＝１２．４［ｍｓ］、ＴＩ＃２＝１０．４［ｍｓ］、ＴＩ＃３＝１２．４［ｍｓ］を得る。続けて、スケジューリング方法選択部４２４は、負荷優先スケジューリング方法での実行時間ＴＩ＝Ｍａｘ（７．２、１２．４、１０．４、１２．４）＝１２．４を算出する。
【００９９】
ＴＬ、ＴＩの算出後、スケジューリング方法選択部４２４は、（２）式に従って割込平準化優先スケジューリング方法に切り替えるか負荷優先スケジューリング方法のままとするかを判断する。前述の算出結果を用いると、スケジューリング方法選択部４２４は、以下のように（２）式を実行する。
【０１００】
１２．８＞１２．４＋Ｏ（Ｍ）
【０１０１】
したがって、スケジューリング方法選択部４２４は、Ｏ（Ｍ）が０．４［ｍｓ］未満であるときに、割込平準化優先スケジューリング方法に従った状態である状態１５０２に切り替える。また、Ｏ（Ｍ）が０．４［ｍｓ］以上である場合、スケジューリング方法選択部４２４は、負荷優先スケジューリング方法に従った状態である状態１５０３に遷移する。続けて、図１６にてＯ（Ｍ）の設定例を示す。
【０１０２】
図１６は、Ｏ（Ｍ）の設定例を示す説明図である。再スケジューリングにかかるコストは、実行中のスレッドをレディーキューに再キューイングする際のコストとなる。スレッドをキューイングするために要するコストは、スケジューリングアルゴリズムとＯＳに依存する。
【０１０３】
Ｏ（Ｍ）の設定例として、スレッド数Ｍに対して静的に設定しておく方法と、動的に設定しておく方法とがある。初めに、静的に設定しておく場合、たとえば、マルチコアプロセッサシステム１００は、スレッド数Ｍが固定値の場合に再スケジューリングにかかる時間を設定しておく。固定値としては、たとえば、マルチコアプロセッサシステム１００内で最もよく取り得る値等を採用してもよいし、マルチコアプロセッサシステム１００内でスレッドが実行可能な最大値を採用してもよい。
【０１０４】
次に、動的に設定しておく場合、マルチコアプロセッサシステム１００は、シミュレータ等によりスレッド数を変化させたときのキューイングに要する時間を計測しておく。マルチコアプロセッサシステム１００は、計測結果を、スレッド数に依存したオーバーヘッド関数として、スケジューリング方法選択部４２４に保持させておく。
【０１０５】
計測結果は、たとえば、グラフ１６０１の通りになる。グラフ１６０１は、横軸がスレッド数であり、縦軸がオーバーヘッド時間を示している。グラフ１６０１では、スレッド数とオーバーヘッド時間が一次式となっているため、マルチコアプロセッサシステム１００は、たとえば、Ｏ（Ｍ）＝Ｂ×Ｍと設定する。Ｂは、ＯＳとスケジューリングアルゴリズムに依存する値である。
【０１０６】
以上説明した機能、記憶内容を使用して、マルチコアプロセッサシステム１００は、スケジューリング方法切替処理を実行する。図１７、図１８にて、スケジューリング方法切替処理の手順を示し、図１９では、割込平準化優先スケジューリング方法に従った割当処理手順の一例を示す。なお、図１７を実行するＣＰＵはＣＰＵ＃０であることを想定し、図１８を実行するＣＰＵはＣＰＵ＃１であることを想定する。
【０１０７】
図１７は、マスタＯＳのスケジューリング方法切替処理手順の一例を示すフローチャートである。ＣＰＵ＃０は、マスタスケジューラのウェイトキュー１５０４に新たなスレッドが存在するか否かを判断する（ステップＳ１７０１）。新たなスレッドが存在する場合（ステップＳ１７０１：Ｙｅｓ）、ＣＰＵ＃０は、負荷優先スケジューリング方法に従った場合の実行時間を算出する（ステップＳ１７０２）。さらに、ＣＰＵ＃０は、割込平準化優先スケジューリング方法に従った場合の実行時間を算出する（ステップＳ１７０３）。
【０１０８】
２つの実行時間の算出後、ＣＰＵ＃０は、スケジューリング方法判断式を基にスケジューリング方法を選択する（ステップＳ１７０４）。具体的に、ＣＰＵ＃０は、現在のスケジューリング方法として負荷優先スケジューリング方法が選択されている場合、スケジューリング方法判断式として（２）式を採用する。また、ＣＰＵ＃０は、割込平準化優先スケジューリング方法が選択されている場合、スケジューリング方法判断式として（３）式を採用する。
【０１０９】
スケジューリング方法の選択後、ＣＰＵ＃０は、現在選択しているスケジューリング方法とは異なる方法を選択したか否かを判断する（ステップＳ１７０５）。異なる方法を選択した場合（ステップＳ１７０５：Ｙｅｓ）、ＣＰＵ＃０は、選択したスケジューリング方法に基づいてウエイトキューに存在するスレッドを含めて再スケジューリングを行い（ステップＳ１７０６）、ステップＳ１７０１の処理に移行する。同じ方法を選択した場合（ステップＳ１７０５：Ｎｏ）、ＣＰＵ＃０は、現在選択しているスケジューリング方法に基づいてウェイトキューのスレッドのスケジューリングを行い（ステップＳ１７１２）、ステップＳ１７０１の処理に移行する。なお、実行中のスレッドが０の状態で、新たなスレッドが起動された場合、現在選択中のスケジューリング方法が存在しない状態である。この場合、ＣＰＵ＃０は、ステップＳ１７０５：Ｙｅｓのルートを通り、スケジューリングを行う。
【０１１０】
また、同じ方法を選択した場合（ステップＳ１７０５：Ｎｏ）、ＣＰＵ＃０は、ステップＳ１７０１の処理に移行する。新たなスレッドが存在しない場合（ステップＳ１７０１：Ｎｏ）、ＣＰＵ＃０は、マルチコアプロセッサシステム１００内の全スレッドが処理終了したか否かを判断する（ステップＳ１７０７）。全スレッドが処理終了した場合（ステップＳ１７０７：Ｙｅｓ）、ＣＰＵ＃０は、スケジューリング方法切替処理を終了する。
【０１１１】
全スレッドが処理終了していない場合（ステップＳ１７０７：Ｎｏ）、ＣＰＵ＃０は、実行中スレッドに割込処理が発生したか否かを判断する（ステップＳ１７０８）。割込処理が発生した場合（ステップＳ１７０８：Ｙｅｓ）、ＣＰＵ＃０は、割込回数、割込処理時間を計測する（ステップＳ１７０９）。計測後、ＣＰＵ＃０は、ステップＳ１７０１の処理に移行する。
【０１１２】
割込処理が発生していない場合（ステップＳ１７０８：Ｎｏ）、ＣＰＵ＃０は、スレッドスイッチが発生したか否かを判断する（ステップＳ１７１０）。スレッドスイッチが発生した場合（ステップＳ１７１０：Ｙｅｓ）、ＣＰＵ＃０は、計測した割込回数、割込処理時間を用いて、割込回数テーブル４０３を更新し（ステップＳ１７１１）、ステップＳ１７０１の処理に移行する。スレッドスイッチが発生していない場合（ステップＳ１７１０：Ｎｏ）、ＣＰＵ＃０は、ステップＳ１７０１の処理に移行する。
【０１１３】
図１８は、スレーブＯＳのスケジューリング方法切替処理手順の一例を示すフローチャートである。ＣＰＵ＃１は、マルチコアプロセッサシステム１００内の全スレッドが処理終了したか否かを判断する（ステップＳ１８０１）。全スレッドが処理終了した場合（ステップＳ１８０１：Ｙｅｓ）、ＣＰＵ＃１は、スケジューリング方法切替処理を終了する。
【０１１４】
全スレッドが処理終了していない場合（ステップＳ１８０１：Ｎｏ）、ＣＰＵ＃１は、実行中スレッドに割込処理が発生したか否かを判断する（ステップＳ１８０２）。割込処理が発生した場合（ステップＳ１８０２：Ｙｅｓ）、ＣＰＵ＃１は、割込回数、割込処理時間を計測する（ステップＳ１８０３）。計測後、ＣＰＵ＃１は、ステップＳ１８０１の処理に移行する。
【０１１５】
割込処理が発生していない場合（ステップＳ１８０２：Ｎｏ）、ＣＰＵ＃１は、スレッドスイッチが発生したか否かを判断する（ステップＳ１８０４）。スレッドスイッチが発生した場合（ステップＳ１８０４：Ｙｅｓ）、ＣＰＵ＃１は、計測した割込回数、割込処理時間を用いて、割込回数テーブル４０３を更新し（ステップＳ１８０５）、ステップＳ１８０１の処理に移行する。スレッドスイッチが発生していない場合（ステップＳ１８０４：Ｎｏ）、ＣＰＵ＃１は、ステップＳ１８０１の処理に移行する。
【０１１６】
図１９は、割込平準化優先スケジューリング方法に従った割当処理手順の一例を示すフローチャートである。なお、割込平準化優先スケジューリング方法を実行するタイミングとしては、ステップＳ１７０３にて割り込み平準化優先スケジューリング方法に従った場合の実行時間の算出を行う際に実施される。割込平準化優先スケジューリング方法を実行する実行主体は、マスタＣＰＵで実行中のマスタスケジューラ４２５である。
【０１１７】
ＣＰＵ＃０は、割込回数テーブル４０３より、割込回数が高頻度のスレッド群を選択する（ステップＳ１９０１）。次に、ＣＰＵ＃０は、負荷優先スケジューリング方法に従って、割込回数が高頻度のスレッド群をＣＰＵに割り当てる（ステップＳ１９０２）。続けて、ＣＰＵ＃０は、割込回数テーブル４０３より、割込回数が低頻度のスレッド群を選択する（ステップＳ１９０３）。選択後、ＣＰＵ＃０は、割込回数が低頻度のスレッド群のうち、同一プロセスのスレッド数が最多となるスレッド群を選択する（ステップＳ１９０４）。
【０１１８】
次に、ＣＰＵ＃０は、選択されたスレッド群と同一プロセスであり、割込回数が高頻度のスレッドが存在するか否かを判断する（ステップＳ１９０５）。割込回数が高頻度のスレッドが存在する場合（ステップＳ１９０５：Ｙｅｓ）、ＣＰＵ＃０は、選択されたスレッド群のＣＰＵの割当先を、同一プロセス内の割込回数が高頻度のスレッドが割り当てられたＣＰＵ群に決定する（ステップＳ１９０６）。決定後、ＣＰＵ＃０は、負荷優先スケジューリング方法に従って、選択されたスレッド群を決定されたＣＰＵ群に割り当てる（ステップＳ１９０７）。
【０１１９】
ＣＰＵへの割当、または、割込回数が高頻度のスレッドが存在しない場合（ステップＳ１９０５：Ｎｏ）、ＣＰＵ＃０は、割込回数が低頻度のスレッド群のうち、全てのスレッド群を選択したか否かを判断する（ステップＳ１９０８）。全てのスレッド群を選択していない場合（ステップＳ１９０８：Ｎｏ）、ＣＰＵ＃０は、同一プロセスのスレッド数が次に多いスレッド群を選択し（ステップＳ１９０９）、ステップＳ１９０５の処理に移行する。
【０１２０】
全てのスレッド群を選択している場合（ステップＳ１９０８：Ｙｅｓ）、ＣＰＵ＃０は、負荷優先スケジューリング方法に従って、未割当のスレッド群をＣＰＵに割り当て（ステップＳ１９１０）、割込平準化優先スケジューリング方法に従った割当処理を終了する。
【０１２１】
図２０は、本実施の形態にかかるコンピュータを用いたシステムの適用例を示す説明図である。図２０において、ネットワークＮＷは、サーバ２００１、サーバ２００２とクライアント２０３１〜クライアント２０３４とが通信可能なネットワークであり、たとえば、ＬＡＮ、ＷＡＮ、インターネット、携帯電話網などを含む。
【０１２２】
サーバ２００２は、クラウド２０２０を有するサーバ群（サーバ２０２１〜サーバ２０２５）の管理サーバである。クライアント２０３１はノート型ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）である。クライアント２０３２はデスクトップ型ＰＣ、クライアント２０３３は携帯電話機である。携帯電話機として、クライアント２０３３は、スマートフォンであってもよいし、ＰＨＳ（Ｐｅｒｓｏｎａｌ  Ｈａｎｄｙｐｈｏｎｅ  Ｓｙｓｔｅｍ）であってもよい。クライアント２０３４はタブレット型端末である。
【０１２３】
図２０のサーバ２００１、サーバ２００２、サーバ２０２１〜サーバ２０２５、クライアント２０３１〜クライアント２０３４は、たとえば、実施の形態で説明したデータ処理装置として、本実施の形態にかかるスケジューリング方法を実行する。たとえば、サーバ２００１が本実施の形態で説明したマスタＯＳ４１１の機能を有し、クライアント２０３１が本実施の形態で説明したスレーブＯＳ４１２の機能を有した状態で、スケジューリング方法を実行する。
【０１２４】
以上説明したように、データ処理システム、およびスケジューリング方法によれば、複数の割込処理の回数をカウントする割込コントローラと、割込回数に基づいて複数のスケジューリング方法のうち一つを選択するスケジューリング方法選択ユニットを含む。これにより、データ処理システムは、割込回数によって変化する実行状況に応じて、効率のより良いスケジューリング方法を選ぶことで、システム全体の処理速度を向上することができる。
【０１２５】
また、データ処理システムは、複数のスケジューリング方法として、複数のデータ処理装置の負荷に基づいてスケジューリングを行う第１スケジューリング方法と、割込処理の回数に基づいてスケジューリングを行う第２スケジューリング方法とを含む。これにより、データ処理システムは、第１スケジューリング方法と第２スケジューリング方法のいずれかを選択し、効率のより良いスケジューリング方法を選ぶことで、データ処理システム全体の処理速度を向上することができる。
【０１２６】
また、データ処理システムは、第１または第２スケジューリング方法に従ってデータ処理装置に処理を割り当てた場合のそれぞれの実行時間を算出し、実行時間の比較結果に基づいて、スケジューリング方法を選択してもよい。これにより、データ処理システムは、予測される実行時間が短いスケジューリング方法を選択できる。
【０１２７】
また、データ処理システムは、第１または第２スケジューリング方法に従った実行時間の算出のタイミングを新たな処理が追加された場合に実行してもよい。これにより、データ処理システムは、スケジューリング方法が変化する可能性があるときに実行時間の算出が行え、無駄なタイミングで実行時間の算出を行うことを避けることができる。同様に、データ処理システムは、システム内の処理が完了した場合に実行時間の算出を行ってもよい。また、データ処理システムは、割込処理の頻度が高い処理が起動された場合、または完了した場合に実行時間の算出を行ってもよい。これにより、データ処理システムは、よりスケジューリング方法が変化する可能性があるときにだけ実行時間の算出が行える。
【０１２８】
また、データ処理システムは、複数のデータ処理装置の各々のデータ処理装置に割り当てられる処理の負荷量と前述の処理の実行中に発生する割込処理にかかる時間とのデータ処理装置ごとの合計値のうち、最大の合計値を予測される実行時間として算出してもよい。これにより、データ処理システムは、割込処理が頻繁に処理される影響で処理時間が長くなってしまっているデータ処理装置を検出することができる。
【０１２９】
また、データ処理システムは、第２スケジューリング方法において、割込処理が高頻度で発生する処理を複数のデータ処理装置に割り当てて、低頻度の処理を、同じプロセスに含まれる処理が割り当てられたデータ処理装置に割り当ててもよい。このように、高頻度の処理が割り当てられたデータ処理装置に対して、同一プロセスに属する処理を割り当てることで、他のプロセスグループの処理が該当のデータ処理装置に割り当てられにくくなる。したがって、割込処理が高頻度の処理によって発生する処理遅延を、他のプロセスグループに与えにくくすることができる。
【０１３０】
また、データ処理システムは、低頻度の処理をデータ処理装置に割り当てた後、未割当の処理を、複数のデータ処理装置の負荷が均等になるように割り当ててもよい。これにより、データ処理システムは、各データ処理装置の割込処理を平準化しつつ、かつ負荷も均等になるように各処理を割り当てることができる。
【０１３１】
なお、本実施の形態で説明したスケジューリング方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本スケジューリング方法を実行するプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本スケジューリング方法を実行するプログラムは、インターネット等のネットワークを介して配布してもよい。
【０１３２】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１３３】
（付記１）複数のデータ処理装置で実行される複数のスレッドの割込処理の回数をカウントする割込コントローラと、
カウントされた前記割込処理の回数に基づいて複数のスケジューリング方法から一のスケジューリング方法を選択するスケジューリング方法選択ユニットと、
を含むことを特徴とするデータ処理システム。
【０１３４】
（付記２）前記複数のスケジューリング方法は、前記複数のデータ処理装置の負荷に基づいてスケジューリングを行う第１スケジューリング方法と、前記割込処理の回数に基づいてスケジューリングを行う第２スケジューリング方法とを含むこと
を特徴とする付記１に記載のデータ処理システム。
【０１３５】
（付記３）第１のデータ処理装置が、第１スケジューリング方法にて前記第１のデータ処理装置を含む複数のデータ処理装置に第１の複数の処理を割り当て、
新たな処理を前記複数のデータ処理装置に割り当てるとき、前記新たな処理と前記第１の複数の処理とを含めた第２の複数の処理を前記第１スケジューリング方法でスケジューリングしたときの第１実行時間を算出し、
前記第２の複数の処理を前記第１スケジューリング方法とは異なる第２スケジューリング方法でスケジューリングしたときの第２実行時間を算出し、
前記第２の複数の処理を前記複数のデータ処理装置に割り当てるために、前記第１実行時間と前記第２実行時間との比較結果に基づいて、前記第１スケジューリング方法または前記第２スケジューリング方法を選択すること
を特徴とするスケジューリング方法。
【０１３６】
（付記４）前記第１スケジューリング方法においては前記複数のデータ処理装置の負荷に基づいてスケジューリングが行われ、
前記第２スケジューリング方法においては前記第２の複数の処理における割込処理の回数に基づいてスケジューリングが行われること
を特徴とする付記３に記載のスケジューリング方法。
【０１３７】
（付記５）前記第１実行時間を算出する処理は、
前記第１スケジューリング方法でスケジューリングしたときに、前記複数のデータ処理装置の各々のデータ処理装置に割り当てられる処理の負荷量と当該処理の実行中に発生する割込処理にかかる時間との前記データ処理装置ごとの合計値のうち、最大の合計値を前記第１実行時間として算出し、
前記第２実行時間を算出する処理は、
前記第２スケジューリング方法でスケジューリングしたときに、前記複数のデータ処理装置の各々のデータ処理装置に割り当てられる処理の負荷量と当該処理の実行中に発生する割込処理にかかる時間との前記データ処理装置ごとの合計値のうち、最大の合計値を前記第２実行時間として算出すること
を特徴とする付記３に記載のスケジューリング方法。
【０１３８】
（付記６）前記第２スケジューリング方法において、
前記第２の複数の処理の中で割込処理が第１頻度で発生する処理を第２の複数のデータ処理装置に割り当て、
前記第２の複数の処理の中で割込処理が第２頻度で発生する処理を前記処理と同じプロセスに含まれる処理が割り当てられた前記複数のデータ処理装置の中のデータ処理装置に割り当てること
を特徴とする付記３乃至付記５の何れか一に記載のスケジューリング方法。
【０１３９】
（付記７）前記第１頻度は前記第２頻度よりも高いこと
を特徴とする付記６に記載のスケジューリング方法。
【０１４０】
（付記８）前記第２頻度で発生する処理が割り当てられた後に、前記第２の複数の処理の中で割り当てられていない処理を、前記複数のデータ処理装置の負荷が均等になるように前記複数のデータ処理装置に割り当てること
を特徴とする付記６または付記７に記載のスケジューリング方法。
【０１４１】
（付記９）第１のデータ処理装置が前記第１のデータ処理装置を含む複数のデータ処理装置に複数のスレッドを割り当てるスケジューリング方法において、
前記複数のスレッドの中で割込処理が第１頻度で発生するスレッドを第２の複数のデータ処理装置に割り当て、
前記複数のスレッドの中で割込処理が前記第１頻度よりも低い第２頻度で発生するスレッドを前記スレッドと同じプロセスに含まれるスレッドが割り当てられた前記複数のデータ処理装置の中のデータ処理装置に割り当てること
を特徴とするスケジューリング方法。
【０１４２】
（付記１０）前記第２頻度で発生するスレッドが割り当てられた後に、新たなスレッドと前記複数のスレッドとの中で割り当てられていないスレッドを、前記複数のデータ処理装置の負荷が均等になるように前記複数のデータ処理装置に割り当てること
を特徴とする付記９に記載のスケジューリング方法。
【符号の説明】
【０１４３】
０−０〜２、１−０〜２、２−０、３−０  スレッド
４０２  割込コントローラ
４０３  割込回数テーブル
４２４  スケジューリング方法選択部
５０１、５０２  算出部
５０３  比較部
５０４  選択部
５０５  割当部
【国際調査報告】
2013014767.tif 000023
2013014767.tif 000024