マルチタスクスケジューリング方法において、第1スレッドを第1のCPUCentralProcessingUnitに割り当て、前記第1スレッドの後に実行される第2スレッドを検出し、前記第2スレッドを生成する第3スレッドが割り当てられたCPUの負荷に基づいて前記第2スレッドが開始されるまでの第1時間を算出し、前記第1スレッドの実行が終了するまでの第2時間を算出し、前記第2時間が前記第1時間よりも大きいときに前記第1のCPUの第1タイムスライスを第2タイムスライスに変更すること、を特徴とするマルチタスクスケジューリング方法。前記第1時間が前記第2時間と実質的に等しくなるように前記第2タイムスライスが計算されること、を特徴とする請求項1に記載のマルチタスクスケジューリング方法。前記計算によって前記第2タイムスライスが得られないときには前記第2スレッドを前記第1のCPUに割り当てること、を特徴とする請求項2に記載のマルチタスクスケジューリング方法。前記第2スレッドを負荷が最小であるCPUに割り当てること、を特徴とする請求項1または請求項2に記載のマルチタスクスケジューリング方法。前記第1スレッドが実行される間、クロック周波数を変更すること、を特徴とする請求項1、請求項2および請求項4の何れか一に記載のマルチタスクスケジューリング方法。スレッド依存関係情報に基づいて前記第2スレッドが検出されること、を特徴とする請求項1乃至請求項4の何れか一に記載のマルチタスクスケジューリング方法。第1スレッドを第1のCPUに割り当てる割当手段と、前記割当手段によって前記第1のCPUに割り当てられた第1スレッドの後に実行される第2スレッドを検出する検出手段と、前記検出手段により検出された第2スレッドを生成する第3スレッドが割り当てられたCPUの負荷に基づいて前記第2スレッドが開始されるまでの第1時間を算出する第1の算出手段と、前記第1スレッドの実行が終了するまでの第2時間を算出する第2の算出手段と、前記第2の算出手段により算出された第2時間が前記第1の算出手段により算出された第1時間よりも大きいときに前記第1のCPUの第1タイムスライスを第2タイムスライスに設定する設定手段と、を備えることを特徴とするマルチコアプロセッサシステム。しかしながら、従来のプログラムコードは膨大な規模であり、コードの埋め込みおよび品質保証を行うと、開発コストが大幅に増大してしまう。タイミングクリティカルな箇所などはアセンブラ言語で書かれていることもあり、その箇所に対しても同期コードを埋め込むと、埋め込みによる性能劣化が要求性能に対して大きくなるという問題点があった。本発明は、上述した従来技術による問題点を解消するため、コードを変更することなく、スレッド間の実行順序を遵守することができるマルチタスクスケジューリング方法、およびマルチコアプロセッサシステムを提供することを目的とする。本発明の一観点によれば、第1スレッドを第1のCPUに割り当て、第1スレッドの後に実行される第2スレッドを検出し、第2スレッドを生成する第3スレッドが割り当てられたCPUの負荷に基づいて第2スレッドが開始されるまでの第1時間を算出し、第1スレッドの実行が終了するまでの第2時間を算出し、第2時間が第1時間よりも大きいときに第1のCPUの第1タイムスライスを第2タイムスライスに変更するマルチタスクスケジューリング方法、およびマルチコアプロセッサシステムが提供される。本マルチタスクスケジューリング方法、およびマルチコアプロセッサシステムによれば、コードを変更することなく、スレッド間の実行順序を遵守することができるという効果を奏する。以下に添付図面を参照して、本発明にかかるマルチタスクスケジューリング方法、およびマルチコアプロセッサシステムの好適な実施の形態を詳細に説明する。ここで、マルチコアプロセッサシステムにおいて、マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。図1は、本発明の一実施例を示す説明図である。マルチコアプロセッサのうちのCPU0には、他のスレッド1と他のスレッド2とが割り当てられている。マルチコアプロセッサのうちのCPU1には、対象スレッドに後続して実行されると定義された後続スレッドの生成元スレッドと他のスレッド3とが割り当てられている。CPU0のタイムスライスは30[ms]であり、CPU1のタイムスライスは90[ms]である。タイムスライスとは、各CPUにおいて、該CPUに割り当てられた複数のスレッドを切り替えて実行する際に、各スレッドの1実行あたりの処理時間である。対象スレッドの割当先CPUのタイムスライスをt1とし、生成元スレッドの割当先CPUのタイムスライスをt0とする。対象スレッドがCPU0に割り当てられると、CPU0が、対象スレッドの後続スレッドを検出する。対象スレッドの実行終了予定時刻が後続スレッドの実行開始時刻以前であるか否かを判断する。ここでは、後続スレッドの実行開始時刻は該後続スレッドを生成する生成元スレッドの実行終了予定時刻とする。対象スレッドの生成時刻から生成元スレッドの実行終了予定時刻までの第1時間T0が250[ms]である。対象スレッドの生成時刻から対象スレッドの実行終了予定時刻までの第2時間T1が280[ms]である。よって、生成元スレッドの実行終了予定時刻が先行スレッドの実行終了予定時刻より前であると判断されるため、CPU0が、生成元スレッドの実行終了予定時刻が対象スレッドの実行終了予定時刻以降となるようにCPU0のタイムスライスを調整する。具体的には、たとえば、CPU0が、CPU0に割り当てられたスレッドの処理時間と、対象スレッドが実行終了までに実行される実行回数とに基づいてCPU0のタイムスライスを算出する。なお、生成元スレッドの実行終了予定時刻が対象スレッドの実行終了予定時刻以降となる対象スレッドの割当先CPUのタイムスライスをt1’とする。CPU0のタイムスライスが30[ms]の場合、対象スレッドの実行回数は4回である。ここでは、対象スレッドの実行回数n1’を1回として算出されるタイムスライスをt1’とする。詳細な算出式については実施例1で後述する。他のスレッド1の処理時間が50[ms]であり、他のスレッド2の処理時間が150[ms]であり、対象スレッドの処理時間が100[ms]である。そして、CPU0が、CPU0のタイムスライスを下記のように算出する。T0=他のスレッド1の処理時間n1’×t1’対象スレッドの処理時間250[ms]=50[ms]t1’100t1’=100[ms]そして、CPU0が、対象スレッドの割当先CPUであるCPU0のタイムスライスを100[ms]に設定する。これにより、生成元スレッドの実行終了予定時刻が対象スレッドの実行終了予定時刻以降となるため、後続スレッドの実行を対象スレッドの実行終了後に開始させることができる。また、図1で説明した例では、対象スレッドの割当先CPUのタイムスライスが調整されているが、これに限らず、後続スレッドを生成する生成元スレッドの割当先CPUのタイムスライスが調整されてもよい。マルチコアプロセッサシステムのハードウェア図2は、マルチコアプロセッサシステムのハードウェアを示すブロック図である。図2において、マルチコアプロセッサシステム200は、CPU0と、CPU1と、1次キャッシュ201と、1次キャッシュ202と、スヌープ回路203と、2次キャッシュ204と、を有している。さらに、マルチコアプロセッサシステム200は、キーボード206と、ディスプレイ205と、I/F207InterFaceと、メモリコントローラ208と、共有メモリ209と、クロック供給回路210と、を有している。2次キャッシュ204と、キーボード206と、ディスプレイ205と、I/F207と、メモリコントローラ208と、クロック供給回路210とは、バス216を介して接続されている。まず、CPU0とCPU1とは、それぞれレジスタとコアとを有している。CPU0はマスタCPUであり、マルチコアプロセッサシステム200の全体の制御を司り、OS221OperatingSystemを実行する。OS221はマスタOSであり、生成されたスレッドをどのマルチコアプロセッサのうちのいずれのCPUに割り当てるかを制御する機能を有し、該CPU0に割り当てられたスレッドを実行する。OS221はスケジューラ231を有し、スケジューラ231はCPU0に割り当てられたスレッドをタイムスライスごとに切り替えて実行する機能を有する。CPU1はスレーブCPUであり、OS222を実行する。OS222は、スレーブOSであり、該CPU1に割り当てられたスレッドを実行する。OS222はスケジューラ232を有し、スケジューラ232はCPU1に割り当てられたスレッドをタイムスライスごとに切り替えて実行する機能を有する。CPU0は、1次キャッシュ201とスヌープ回路203と2次キャッシュ204とを介して各部に接続されている。1次キャッシュ201と1次キャッシュ202とは、それぞれキャッシュメモリとキャッシュコントローラとを有している。1次キャッシュ201はOS221が実行するスレッドから共有メモリ209への書込処理を一時的に記憶する。また、1次キャッシュ201は、共有メモリ209から読み出されたデータを一時的に記憶する。1次キャッシュ202はOS222が実行するスレッドから共有メモリ209への書込処理を一時的に記憶する。また、1次キャッシュ202は、共有メモリ209から読み出されたデータを一時的に記憶する。スヌープ回路203は、1次キャッシュ201と1次キャッシュ202とで共有するデータがいずれか一方のキャッシュで更新された場合、該更新を検出し、他方のキャッシュも更新する。2次キャッシュ204は、キャッシュメモリとキャッシュコントローラとを有している。2次キャッシュ204では、1次キャッシュ201や1次キャッシュ202から追い出されたデータを記憶する。2次キャッシュ204では、OS221とOS222とで共有するデータを記憶する。2次キャッシュ204は、1次キャッシュ201や1次キャッシュ202よりも、記憶容量が大きくかつCPUからのアクセス速度が遅い。2次キャッシュ204は共有メモリ209より、記憶容量が小さくかつCPUからのアクセス速度が速い。ディスプレイ205は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ205は、たとえば、TFT液晶ディスプレイなどを採用することができる。キーボード206は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード206は、タッチパネル式の入力パッドやテンキーなどであってもよい。I/F207は、通信回線を通じてLANLocalAreaNetwork、WANWideAreaNetwork、インターネットなどのネットワークに接続され、ネットワークを介して他の装置に接続される。そして、I/F207は、ネットワークと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F207には、たとえばモデムやLANアダプタなどを採用することができる。共有メモリ209は、CPU0とCPU1に共有されるメモリであり、具体的には、たとえば、ROM212ReadOnlyMemoryと、RAM211RandomAccessMemoryと、フラッシュROM213と、フラッシュROMコントローラ214と、フラッシュROM215と、などを有している。ROM212は、ブートプログラムなどのプログラムを記憶している。RAM211は、CPUのワークエリアとして使用される。フラッシュROM213は、OS221やOS222などのシステムソフトウェアやアプリケーションソフトウェアや後述するスレッド管理テーブルおよびスレッド依存関係情報などを記憶している。たとえば、各OSを更新する場合、マルチコアプロセッサシステム200は、I/F207によって新しいOSを受信し、フラッシュROM213に格納されている古いOSを、受信した新しいOSに更新する。フラッシュROMコントローラ214は、各CPUの制御に従ってフラッシュROM215に対するデータのリード/ライトを制御する。フラッシュROM215は、フラッシュROMコントローラ214の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム200を使用するユーザがI/F207を通して取得した画像データ、映像データなどである。フラッシュROM215は、たとえば、メモリカード、SDカードなどを採用することができる。クロック供給回路210は各部にクロックを供給する。ここで、本実施の形態では、各CPUへは、500[MHz]と1[GHz]のうちのいずれか一方の周波数のクロックを供給できることとする。たとえば、クロック供給回路210はCPUごとにフラグを有している。該フラグは1ビットであり、クロック供給回路210は、フラグが0であれば500[MHz]のクロックを該フラグに対応するCPUに供給し、フラグが1であれば1[GHz]のクロックを該フラグに対応するCPUに供給する。たとえば、クロック供給回路210は、各CPUからCPUの識別情報とフラグの設定値との通知クロック周波数の設定通知と称する。を受信すると、受信したCPUの識別情報に対応するフラグを受信したフラグの設定値に設定する。そして、設定後、クロック供給回路210は、変更完了をクロック周波数の設定通知の送信元CPUに送信する。図3は、スレッド依存関係情報の一例を示す説明図である。スレッド依存関係情報300は、スレッド間で定義された実行順序を示す情報と各スレッドの処理時間とを有する情報である。スレッド依存関係情報300は、プロセスIDの項目301と、スレッドIDの項目302と、処理時間の項目303と、先行スレッドの項目304と、後続スレッドの項目305と、生成元スレッドの項目306と、を有している。プロセスIDの項目301にはプロセスの識別情報が記憶されている。スレッドIDの項目302にはプロセスIDの項目301に識別情報が記憶されているプロセスが有するスレッドの識別情報が記憶されている。ここで、スレッドは、周知のようにアプリケーションプログラム内で行われる処理の実行単位である。そして、プロセスは少なくとも1以上のスレッドを含む実行単位である。スレッドを1のみしか含まないプロセスは、実質的にスレッドである。よって、スレッドIDの項目302に識別情報が記憶されていないプロセスはスレッドを1のみしか含まないことを示している。処理時間の項目303には各スレッドの処理時間が記憶されている。ここでは、処理時間は、開発者がESLElectronicSystemLevelなどの検証ツールを用いて各CPUの基準となるクロック周波数基準クロック周波数と称する。を用いて算出した時間である。先行スレッドの項目304は、スレッドIDの項目302に識別情報が記憶されているスレッドと出力順序に依存関係があり、該スレッドよりも先行して実行されるスレッドの識別情報が記憶されている。後続スレッドの項目305は、スレッドIDの項目302に識別情報が記憶されているスレッドと出力順序に依存関係があり、該スレッドに後続して実行されるスレッドの識別情報が記憶されている。生成元スレッドの項目306は、スレッドIDの項目302に識別情報が記憶されているスレッドを生成する生成元スレッドの識別情報が記憶されている。たとえば、プロセス0は、スレッド0~スレッド3を有している。プロセス0のスレッド0はプロセス0のスレッド1とプロセス0のスレッド2とを生成し、プロセス0のスレッド1はプロセス0のスレッド3を生成する。プロセス0のスレッド2とプロセス0のスレッド3とには出力依存関係があり、プロセス0のスレッド2の実行終了後に、プロセス0のスレッド3が後続して実行される。プロセス0のスレッド0と、プロセス0のスレッド1と、プロセス1と、プロセス2とは、出力依存関係が他のスレッドとない。また、上述のようにスレッド依存関係情報300は共有メモリ209に記憶されているが、2次キャッシュ204にも記憶されていてもよい。図4は、スレッド管理テーブルの一例を示す説明図である。スレッド管理テーブル400は、各プロセスのスレッドがどのCPUにわりあてられているかが登録される情報である。スレッド管理テーブル400では、プロセスが起動されると、マスタOSであるOS221によってプロセスごとにスレッドの識別情報が登録される。スレッド管理テーブル400は、プロセスIDの項目401と、スレッドIDの項目402と、割当先CPUの項目403と、クロック周波数の項目404と、実行開始時刻の項目405と、実行終了予定時刻の項目406と、を有している。プロセスIDの項目401にはプロセスの識別情報が記憶されている。スレッドIDの項目402にはプロセスIDの項目401に識別情報が記憶されているプロセスが有するスレッドの識別情報が記憶されている。スレッドIDの項目402に識別情報が記憶されていないプロセスはスレッドを1のみしか含まないことを示している。割当先CPUの項目403には、スレッドIDの項目402に識別情報が記憶されているスレッドの割当先CPUの識別情報が記憶されている。また、スレッドの生成時に、該スレッドに対応する割当先CPUの項目403にCPUの識別情報が登録されている場合、該CPUにスレッドが割り当てられることとする。クロック周波数の項目404には、スレッドIDの項目402に識別情報が記憶されたスレッドを実行するときのCPUのクロック周波数が記憶されている。本実施の形態では基準クロック周波数を500[MHz]とする。実行開始時刻の項目405には、スレッドIDの項目402に識別情報が記憶されたスレッドの生成時刻が登録される。実行終了予定時刻の項目406は、スレッドの生成時刻に本実施の形態で算出する第2時間が加算された時刻が記憶される。マルチコアプロセッサシステム200の機能ブロック図図5は、マルチコアプロセッサシステム200の機能ブロック図である。マルチコアプロセッサシステム200は、割当部501と、検出部502と、第1の算出部503と、第2の算出部504と、タイムスライス算出部505と、設定部506と、変更部507507と、を有している。具体的には、割当部501~変更部507を有するプログラムが共有メモリ209などの記憶装置に記憶されている。CPU0やCPU1が該記憶装置にアクセスして該プログラムを読み出し、該プログラム内にコーディングされている処理を実行することにより、該割当部501から変更部507の処理が実行される。割当部501は、第1スレッドを第1のCPUに割り当てる。検出部502は、第1スレッドの後に実行される第2スレッドを検出する。さらに、検出部502は、スレッド依存関係情報に基づいて第2スレッドを検出する。第1スレッドが対象スレッドであり、第2スレッドが後続スレッドである。第1の算出部503は、第2スレッドを生成する第3スレッドが割り当てられたCPUの負荷に基づいて第2スレッドが開始されるまでの第1時間を算出する。第3スレッドが後続スレッドの生成元スレッドである。第2の算出部504は、第1スレッドの実行が終了するまでの第2時間を算出する。設定部506は、第2時間が第1時間よりも大きいときに第1のCPUの第1タイムスライスを第2タイムスライスに変更する。第1のCPUの第1タイムスライスは設定済のタイムスライスである。タイムスライス算出部505は、第1時間が第2時間と実質的に等しくなるように第2タイムスライスを算出する。また、設定部506は、第2時間が第1時間よりも大きいときに第1のCPUの第1タイムスライスをタイムスライス算出部505により算出された第2タイムスライスに変更する。変更部507は、第1スレッドが実行される間、クロック周波数を変更する。さらに、割当部501は、第2スレッドを負荷が最小であるCPUに割り当てる。また、割当部501は、タイムスライス算出部505によって第2タイムスライスが得られないときには第2スレッドを第1のCPUに割り当てる。以上を踏まえて、詳細を実施例1と実施例2を用いて説明する。実施例1実施例1では、実行順序が定義されたスレッドのうちの、先行スレッドが割り当てられた場合の例について説明する。具体的には、マルチコアプロセッサシステム200が、マルチコアプロセッサのうちの第1のCPUに先行スレッドが割り当てられたことを検出する。そして、マルチコアプロセッサシステム200が、第1のCPUと異なる第2のCPUに割り当てられ、先行スレッドに後続する後続スレッドの生成元スレッドの実行終了予定時刻が先行スレッドの実行終了予定時刻より前であるか否かを判断する。そして、マルチコアプロセッサシステム200が、生成元スレッドの実行終了予定時刻が先行スレッドの実行終了予定時刻より前であると判断した場合、第1のコアまたは第2のコアのうちの少なくとも一方のコアのタイムスライスを生成元スレッドの実行終了予定時刻が先行スレッドの実行終了予定時刻以降となるように調整する。具体的には、マルチコアプロセッサシステム200が、該一方のコアのタイムスライスを、一方のコアに割り当てられたスレッドの処理時間と、先行スレッドまたは生成元スレッドの処理が終了するまでに実行する実行回数とに基づいて算出する。マルチコアプロセッサシステム200が、一方のコアのタイムスライスを算出されたタイムスライスに設定する。マルチコアプロセッサシステム200が、生成元スレッドの実行終了予定時刻が先行スレッドの実行終了予定時刻以降となる一方のCPUのタイムスライスが算出できなかった場合、対象スレッドを第2のCPUに割り当てる。そして、マルチコアプロセッサシステム200が、対象スレッドが第2のCPUに割り当てられた場合、一方のコアのタイムスライスを変更しない。さらに、対象スレッドが第2のCPUに割り当てられた場合、後続スレッドが生成されると、マルチコアプロセッサシステム200が、後続スレッドを第2のCPUに割り当てる。また、マルチコアプロセッサシステム200が、生成元スレッドの実行終了予定時刻が先行スレッドの実行終了予定時刻以降であると判断された場合、一方のコアのタイムスライスを変更しない。詳細については図6~図8を用いて説明する。図6は、各スレッドの割り当て例を示す説明図である。図6では、CPU0にプロセス0のスレッド1が割り当てられ、CPU1にプロセス1とプロセス2とが割り当てられている。まず、OS221が、プロセス0のスレッド2の生成を検出する。そして、OS221が、プロセス0のスレッド2の生成時刻を特定する。OS221が、プロセス0のスレッド2の後続スレッドをスレッド依存関係情報300に基づいて検出する。具体的には、たとえば、OS221が、スレッド依存関係情報300内のプロセス0のスレッド2に対応する後続スレッドの項目305に登録されているスレッドの識別情報を参照することにより、後続スレッドを検出することができる。ここでは、スレッド依存関係情報300内のプロセス0のスレッド2に対応する後続スレッドの項目305から、プロセス0のスレッド2の後続スレッドとして、プロセス0のスレッド3が検出される。そして、OS221が、スレッド依存関係情報300に基づいて各CPUに割り当てられているスレッドの処理時間の合計を算出することにより、最も負荷が小さいCPUを特定する。ここでは、CPU0に割り当てられているスレッドの処理時間の合計は250[ms]であり、CPU1に割り当てられているスレッドの処理時間の合計は200[ms]である。よって、最も負荷が小さいCPUとしてCPU1が特定される。つぎに、OS221が、特定したCPU1をプロセス0のスレッド2の仮割当先CPUとし、OS221がOS222へスヌープ回路203を介してプロセス0のスレッド2の仮割当を通知する。OS222がプロセス0のスレッド2の仮割当を受け付けると、OS222がプロセス0のスレッド2の生成時刻からプロセス0のスレッド2の実行終了予定時刻までの第2時間T1を算出する。OS222が下記式1を用いてT1を算出する。ここで、Nは、仮割当先CPUここではCPU1に割当済のスレッドと対象スレッドとのスレッドの総数である。n番目のスレッドとは、仮割当先CPUここではCPU1に割当済のスレッドと対象スレッドとのうちのスレッドから、順に選択されたスレッドを示している。t1は仮割当先CPUのタイムスライスである。n1は対象スレッドが処理終了するまでに他のスレッドと切り替えられることにより実行される実行回数である。n1については下記式2によって算出される。n1は小数点以下を切り上げている。n1=対象スレッドの処理時間/t12OS222が、プロセス0のスレッド2の生成時刻から、プロセス0のスレッド2の後続スレッドであるプロセス0のスレッド3を生成する生成元スレッドの実行終了予定時刻までの第1時間T0を算出する。ここで、プロセス0のスレッド3を生成する生成元スレッドは、プロセス0のスレッド1である。OS222が下記式3を用いてT0を算出する。ここで、Mは、後続スレッドを生成する生成元スレッドの割当先CPUここではCPU0に割当済のスレッドのスレッド数である。m番目のスレッドとは、生成元スレッドの割当先CPUここではCPU0に割当済のスレッドから、順に選択されたスレッドを示している。t0は生成元スレッドの割当先CPUのタイムスライスである。n0は対象スレッドが実行終了するまでに切り替えられる切り替え回数であり、下記式4によって算出される。n0は小数点以下を切り上げている。n0=生成元スレッドの処理時間/t04図7は、T0とT1とを示す説明図である。ここで、対象スレッドの仮割当先CPUであるCPU1と、後続スレッドを生成する生成元スレッドの割当先CPUであるCPU0と、それぞれのタイムスライスが30[ms]であるとする。CPU0にはプロセス0のスレッド1のみが割り当てられているため、T0は250[ms]である。つぎに、T1の算出について説明する。T1=0n1=プロセス0のスレッド2の処理時間/CPU1のタイムスライス=100[ms]/30[ms]=4n1×t1=4×30[ms]=120[ms]すなわち、n1が4であるため、4回に分割されてプロセス0のスレッド2が実行される。CPU1にはプロセス1とプロセス2が割り当てられている。プロセス1の処理時間は50[ms]であり、プロセス0のスレッド2の処理時間は100[ms]であるため、プロセス1の処理時間が対象スレッドであるプロセス0のスレッド2以下である。よって、T1にプロセス1の処理時間が加算される。プロセス2の処理時間は150[ms]であり、プロセス0のスレッド2の処理時間は100[ms]であるため、プロセス2の処理時間が対象スレッドであるプロセス0のスレッド2より大きい。よって、T1にn1×t1が加算される。さらに、対象スレッドであるプロセス0のスレッド2の処理時間がT1に加算される。T1=プロセス1の処理時間n1×t1プロセス0のスレッド2の処理時間=50[ms]120[ms]100[ms]=270[ms]OS222が、算出したT1が算出したT0以下であるか否かを判断する。T0が250[ms]であり、T1が270[ms]であるため、OS222がT1はT0以下でないと判断する。T1がT0以下でないとは、プロセス0のスレッド2が終了する前に、プロセス0のスレッド1の実行が終了してしまい、プロセス0のスレッド2の後続スレッドであるプロセス0のスレッド3の実行が開始されてしまうことを示している。そして、OS222が、下記式5を用いてT1’とT0が一致するタイムスライスt1’を算出する。ここで、n1’については1から順にt1’の値がt1以下となるまで算出する。n1’=1T1’=プロセス1の処理時間n1’×t1’プロセス0のスレッド2の処理時間=T050[ms]t1’100[ms]=250[ms]t1’=250[ms]-150[ms]t1’=100[ms]図8は、n1’が1の場合のt1’を示す説明図である。T0は250[ms]のままである。n1’が1であると、t1’が100[ms]となり、T0とT1とが一致する。すなわち、プロセス0のスレッド2の実行が終了すると共に、プロセス0のスレッド1の実行が終了するため、プロセス0のスレッド2に後続する後続スレッドとの実行順序を保つことができる。つぎに、n1’が2の場合について説明する。n1’=2T1’=プロセス1の処理時間n1’×t1’プロセス0のスレッド2の処理時間=T050[ms]2×t1’100[ms]=250[ms]2×t1’=250[ms]-150[ms]t1’=50[ms]つぎに、n1’が3の場合について説明する。n1’=3T1’=プロセス1の処理時間n1’×t1’プロセス0のスレッド2の処理時間=T050[ms]3×t1’100[ms]=250[ms]3t1’=250[ms]-150[ms]t1’=33.33[ms]つぎに、n1’が4の場合について説明する。n1’=4T1’=プロセス1の処理時間n1’×t1’プロセス0のスレッド2の処理時間=T050[ms]4×t1’100[ms]=250[ms]250[ms]-150[ms]=4t1’t1’=25[ms]n1’が4の場合、t1’がt1よりも小さくなるため、OS222が、n1’が1~3のうちのいずれかのt1’をあらたなCPU1のタイムスライスに決定する。OS222が、t1’と対象スレッドの割当許可をマスタOSであるOS221へスヌープ回路203を介して通知する。そして、マスタOSであるOS221が、t1’と対象スレッドの割当許可を受け付けると、OS221が、対象スレッドを対象CPUに割り当て、対象CPUのタイムスライスをt1からt1’に変更する。実施例2つぎに、実施例2では、後続スレッドを有するスレッドの実行時にクロック周波数を変更する例について説明する。基準クロック周波数は上述の500[MHz]であり、後続スレッドを有するスレッドを実行する場合のクロック周波数オーバークロック周波数と称する。は1[GHz]とする。T0とT1の算出における実施例1との違いについて説明する。後続スレッドを有するスレッドの実処理時間は、スレッド依存関係情報300に記憶されている処理時間に基準クロック周波数/オーバークロック周波数を掛けた値である。後続スレッドを有するスレッドの実処理時間=スレッド依存関係情報300内の処理時間×基準クロック周波数/オーバークロック周波数T1=0プロセス0のスレッド2の実処理時間=プロセス0のスレッド2の処理時間×500[MHz]/1[GHz]=100[ms]×1/2=50[ms]n1=プロセス0のスレッド2の実処理時間/CPU1のタイムスライス=50[ms]/30[ms]=2小数点以下切り上げn1×t1=2×30[ms]=60[ms]CPU1にはプロセス1とプロセス2が割り当てられている。プロセス1の処理時間は50[ms]であり、プロセス0のスレッド2の実処理時間が50[ms]であるため、プロセス1の処理時間がプロセス0のスレッド2の実処理時間以下である。よって、T1にプロセス1の処理時間が加算される。プロセス2の処理時間は150[ms]であり、プロセス0のスレッド2の実処理時間が50[ms]であるため、プロセス2の処理時間がプロセス0のスレッド2の実処理時間より大きい。よって、T1にn1×t1が加算される。さらに、プロセス0のスレッド2の実処理時間がT1に加算される。T1=プロセス1の処理時間n1×t1プロセス0のスレッド2の実処理時間=50[ms]60[ms]50[ms]=160[ms]T0は250[ms]であり、T1が160[ms]であるため、OSが、T0>T1であると判断し、OSが、割当許可をマスタOSであるOSへ通知する。OSが、割当許可を受け付けると、対象スレッドをCPU1に割り当てる。OSが、対象スレッドに後続スレッドがある場合、対象スレッドの識別情報に対応するスレッド管理テーブル400のクロック周波数の項目404に1[GHz]を登録する。スケジュール処理手順つぎに、マスタCPUと対象スレッドの仮割当先である対象CPUによる対象スレッドのスケジュール処理手順について図9から図14を用いて説明する。図9から図14は上述の実施例1に対応するフローチャートであり、図9から図14は上述の実施例2に対応するフローチャートである。図9および図10は、マスタCPUによるスケジュール処理手順を示すフローチャートである。まず、マスタCPUであるCPU0が、スレッドの生成を検出したか否かを判断しステップS901、スレッドの生成を検出していないと判断した場合ステップS901:No、ステップS901へ戻る。CPU0が、スレッドの生成を検出したと判断した場合ステップS901:Yes、生成されたスレッドの生成時刻を特定しステップS902、対象スレッドの割当先CPUが決定済か否かを判断するステップS903。CPU0が、対象スレッドの割当先CPUが決定済であると判断した場合ステップS903:Yes、割当部501により、決定済の割当先CPUに対象スレッドを割り当てるステップS904。そして、CPU0が、割当結果と対象スレッドの生成時刻を出力しステップS905、一連の処理を終了する。対象スレッドの割当先CPUが決定済であるとは、スレッド管理テーブル400内の対象スレッドに対応する割当先CPUの項目403にCPUの識別情報が登録されていることを示している。ここで、対象スレッドの割手先CPUが決定されている場合について説明する。たとえば、対象スレッドに先行スレッドがあるとする。該先行スレッドの生成時に、該先行スレッドの実行終了予定時刻が該対象スレッドの実行開始予定時刻より後であると判断された場合、対象スレッドが該先行スレッドと同一のCPUに割り当てる。そのため、先行スレッドの割り当て時に、対象スレッドの割当先が先行スレッドの割当先CPUに決定される。ステップS903において、CPU0が、対象スレッドの割当先CPUが決定済でないと判断した場合ステップS903:No、最小負荷のCPUを対象CPUとして特定するステップS906。つぎに、CPU0が、検出部502により、対象スレッドの後続スレッドを検出しステップS907、後続スレッドが検出されたか否かを判断するステップS908。具体的には、CPU0が、スレッド依存関係情報300内の対象スレッドに対応する後続スレッドの項目305を参照することにより、後続スレッドを検出する。CPU0が、後続スレッドが検出されなかったと判断した場合ステップS908:No、ステップS911へ移行する。後続スレッドが検出されないとは、対象スレッドに後続スレッドがないことを示し、スレッド依存関係情報300内の対象スレッドに対応する後続スレッドの項目305にスレッドの識別情報が登録されていないことを示している。CPU0が、後続スレッドが検出されたと判断した場合ステップS908:Yes、対象CPUに対象スレッドの仮割当を通知しステップS909、対象CPUから割当許可または割当不可を受け付けたか否かを判断するステップS910。CPU0が、対象CPUから割当許可または割当不可を受け付けていないと判断した場合ステップS910:No、ステップS910に戻る。CPU0が、対象CPUから割当許可を受け付けたと判断した場合ステップS910:割当許可、対象CPUに対象スレッドを割り当てステップS911、割当結果を出力しステップS912、一連の処理を終了する。ステップS910において、CPU0が、対象CPUから割当不可を受け付けたと判断した場合ステップS919:割当不可、後続スレッドの生成元スレッドの割当先CPUに対象スレッドを割り当てるステップS913。CPU0が、対象スレッドの後続スレッドの割当先CPUを該後続スレッドの生成元スレッドの割当先CPUに決定しステップS914、割当結果および決定結果を出力するステップS915。具体的には、たとえば、CPU0が、共有メモリ209に記憶されたスレッド管理テーブル400内において識別情報が一致するスレッドの割当先CPUの項目403へ決定した割当先CPUの識別情報を登録する。図11は、対象CPUによる算出処理手順を示す説明図である。図11において、対象スレッドの仮割当先CPUとされた対象CPUが、対象スレッドの仮割当を受け付けたか否かを判断するステップS1101。対象CPUが、対象スレッドの仮割当を受け付けていないと判断した場合ステップS1101:No、ステップS1101へ戻る。対象CPUが、対象スレッドの仮割当を受け付けたと判断した場合ステップS1101:Yes、後続スレッドを生成する生成元スレッドを特定する。ステップS1102。具体的には、対象CPUが、スレッド依存関係情報300内の後続スレッドに対応する生成元スレッドの項目305を参照することにより、生成元スレッドを特定する。そして、対象CPUが、第2の算出部504により、T1の算出処理を実行するステップS1103。T1は対象スレッドの生成時刻から対象スレッドの実行終了予定時刻までの第2時間である。対象CPUが、第1の算出部503により、T0の算出処理を実行するステップS1104。T0は対象スレッドの生成時刻から後続スレッドの実行開始時刻までの第1時間である。そして、対象CPUが、T0>T1であるか否かを判断しステップS1105、T0>T1であると判断した場合ステップS1105:Yes、割当許可をマスタCPUに通知しステップS1106、ステップS1113へ移行する。ステップS1105において、対象CPUが、T0>T1でないと判断した場合ステップS1105:No、タイムスライス算出部505により、タイムスライスt1’の算出処理を実行するステップS1107。対象CPUが、対象スレッドと後続スレッドとの依存関係を満たすt1’が算出されたか否かを判断するステップS1108。対象CPUが、対象スレッドと後続スレッドとの依存関係を満たすt1’を算出されたと判断した場合ステップS1108:Yes、設定部506により、対象CPUのタイムスライス=t1’とするステップS1109。対象CPUが、割当許可をマスタCPUに通知しステップS1110、対象スレッドの生成時刻および実行終了予定時刻を出力しステップS1111、一連の処理を終了する。具体的には、対象CPUが、スレッド依存関係情報300内の対象スレッドに該当する識別情報の実行開始時刻の項目405に生成時刻を登録し、該識別情報の実行終了予定時刻の項目406に実行終了予定時刻を登録する。実行終了予定時刻は生成時刻にT1’が加算された時刻である。ステップS1108において、対象CPUが、対象スレッドと後続スレッドとの依存関係を満たすt1’が算出されなかったと判断した場合ステップS1108:No、割当不可をマスタCPUに通知するステップS1112。そして、対象CPUが、対象スレッドの生成時刻を出力しステップS1113、一連の処理を終了する。図12は、図11で示したT1の算出処理ステップS1103の詳細な一例を示すフローチャートである。対象CPUが、対象スレッドの仮割当先CPUに割当済のスレッドを特定するステップS1201。対象CPUが、t1=仮割当先CPUのタイムスライスとしステップS1202、n1小数点以下切り上げ=対象スレッドの処理時間/t1としステップS1203、T1=0とするステップS1204。対象スレッドの処理時間は、スレッド依存関係情報300から対象スレッドの識別情報に基づいて特定される。対象CPUが、仮割当先CPUに割当済のスレッドおよび対象スレッドのうち、未選択のスレッドがあるか否かを判断するステップS1205。対象CPUが、仮割当先CPUに割当済のスレッドおよび対象スレッドのうち、未選択のスレッドがあると判断した場合ステップS1205:Yes、未選択のスレッドから任意のスレッド選択スレッドを選択するステップS1206。対象CPUが、対象スレッドの処理時間>選択スレッドの処理時間であるか否かを判断するステップS1207。選択スレッドの処理時間は、スレッド依存関係情報300から選択スレッドの識別情報に基づいて特定される。対象CPUが、対象スレッドの処理時間>選択スレッドの処理時間であると判断した場合ステップS1207:Yes、T1=T1選択スレッドの処理時間としステップS1208、ステップS1205へ戻る。対象CPUが、対象スレッドの処理時間>選択スレッドの処理時間でないと判断した場合ステップS1207:No、T1=T1n1×t1としステップS1209、ステップS1205へ戻る。ステップS1205において、対象CPUが、未選択のスレッドがないと判断した場合ステップS1205:No、T1を出力しステップS1210、ステップS1104へ移行する。出力形式としては、たとえば、対象CPUが、アクセス可能な記憶装置に記憶する。図13は、図11で示した処理ステップS1104の詳細な一例を示すフローチャートである。まず、対象CPUが、対象スレッドの後続スレッドを生成する生成元スレッドの割当先CPUを特定するステップS1301。対象CPUが、生成元スレッドの割当先CPUに割当済のスレッドを特定するステップS1302。対象CPUが、t0=生成元スレッドの割当先CPUのタイムスライスとしステップS1303、n0小数点以下切り上げ=生成元スレッドの処理時間/t0とするステップS1304。生成元スレッドの処理時間は、スレッド依存関係情報300から生成元スレッドの識別情報に基づいて特定される。対象CPUが、T0=0としステップS1305、生成元スレッドの割当先CPUに割当済のスレッドのうち、未選択のスレッドがあるか否かを判断するステップS1306。対象CPUが、未選択のスレッドがあると判断した場合ステップS1306:Yes、未選択のスレッドから任意のスレッド選択スレッドを選択しステップS1307、生成元スレッドの処理時間>選択スレッドの処理時間であるか否かを判断するステップS1308。選択スレッドの処理時間は、スレッド依存関係情報300から選択スレッドの識別情報に基づいて特定される。対象CPUが、生成元スレッドの処理時間>選択スレッドの処理時間であると判断した場合ステップS1308:Yes、T0=T0選択スレッドの処理時間としステップS1309、ステップS1306へ戻る。対象CPUが、生成元スレッドの処理時間>選択スレッドの処理時間でないと判断した場合ステップS1308:No、T0=T0n0×t0としステップS1310、ステップS1306へ戻る。また、ステップS1306において、対象CPUが、生成元スレッドの割当先CPUに割当済のスレッドのうち、未選択のスレッドがないと判断した場合ステップS1306:No、T0を出力しステップS1311、ステップS1105へ移行する。出力形式としては、たとえば、対象CPUがアクセス可能な記憶装置に記憶する。図14および図15は、図11で示したタイムスライスの算出処理ステップS1107の詳細な一例を示すフローチャートである。まず、対象CPUが、対象スレッドの仮割当先CPUに割当済のスレッドを特定しステップS1401、n1’=1としステップS1402、T1’=0とするステップS1403。ここで、n1’は対象スレッドが処理終了までに実行される実行回数を示している。対象CPUが、仮割当先CPUに割当済のスレッドおよび対象スレッドのうち、未選択のスレッドがあるか否かを判断するステップS1404。対象CPUが、仮割当先CPUに割当済のスレッドおよび対象スレッドのうち、未選択のスレッドがあると判断した場合ステップS1404:Yes、未選択のスレッドから任意のスレッド選択スレッドを選択するステップS1405。つぎに、対象CPUが、対象スレッドの処理時間>選択スレッドの処理時間であるか否かを判断するステップS1406。対象スレッドの処理時間は、スレッド依存関係情報300から対象スレッドの識別情報に基づいて特定される。選択スレッドの処理時間は、スレッド依存関係情報300から選択スレッドの識別情報に基づいて特定される。対象CPUが、対象スレッドの処理時間>選択スレッドの処理時間でないと判断した場合ステップS1406:No、T1’=T1’n1’×t1’としステップS1408、ステップS1403へ戻る。対象CPUが、対象スレッドの処理時間>選択スレッドの処理時間であると判断した場合ステップS1406:Yes、T1’=T1’選択スレッドの処理時間としステップS1407、ステップS1403へ戻る。ステップS1404において、対象CPUが、仮割当先CPUに割当済のスレッドおよび対象スレッドのうち、未選択のスレッドがないと判断した場合ステップS1404:No、T1’=T0となるt1’を算出しステップS1409、解があるか否かを判断するステップS1410。T1’=T0となるt1’を算出するとは、具体的には、たとえば、上記式5=T0の一次方程式の解を算出することである。対象CPUが、解があると判断した場合ステップS1410:Yes、t1’<t1であるか否かを判断するステップS1411。対象CPUが、t1’<t1でないと判断した場合ステップS1411:No、n1’とt1’とを関連付けて出力しステップS1412、n1’=n1’1としステップS1413、ステップS1403へ戻る。出力形式としては、たとえば、対象CPUがアクセス可能な記憶装置に記憶する。ステップS1410において、解がないと判断した場合ステップS1410:No、実行回数が1からn1’-1の算出したタイムスライスから、任意のタイムスライスをt1’として選択しステップS1414、ステップS1108へ移行する。ただし、n1’=1において、解が無い場合、何も選択されていないこととする。1からn1’-1の実行回数のうちのいずれの実行回数のタイムスライスが選択されるかについては任意であり、設計者が決定することとしてよい。ステップS1411において、対象CPUが、t1’<t1であると判断した場合ステップS1411:Yes、ステップS1414に移行する。つぎに、上述の実施例2に対応するフローチャートについて説明する。上述したように、実施例2では、後続スレッドを有するスレッドを実行中には該スレッドが割り当てられたCPUのクロック周波数をオーバークロック周波数に設定する。実施例1と実施例2との違いは、図11で示したステップS1103とステップS1104とステップS1107である。実施例2ではステップS1103に代わってステップS1114が実行され、ステップS1104に代わってステップS1115が実行され、ステップS1107に代わってステップS1116が実行される。図16および図17は、図11で示したT1の算出処理ステップS1114の詳細な一例を示すフローチャートである。対象CPUが、対象スレッドの仮割当先CPUに割当済のスレッドを特定するステップS1601。対象CPUが、t1=仮割当先CPUのタイムスライスとしステップS1602、対象スレッドに後続スレッドがあるか否かを判断するステップS1603。対象CPUが、対象スレッドに後続スレッドがあると判断した場合ステップS1603:Yes、対象スレッドの実処理時間=対象スレッドの処理時間×基準クロック周波数/オーバークロック周波数としステップS1604、ステップS1606へ移行する。対象スレッドの処理時間は、スレッド依存関係情報300から対象スレッドの識別情報に基づいて特定される。対象CPUが、対象スレッドに後続スレッドがないと判断した場合ステップS1603:No、対象スレッドの実処理時間=対象スレッドの処理時間としステップS1605、ステップS1606へ移行する。ステップS1604またはステップS1605のつぎに、対象CPUが、n1=対象スレッドの実処理時間/t1とするステップS1606。対象CPUが、T1=0としステップS1607、割当先CPUに割当済のスレッドおよび対象スレッドのうち、未選択のスレッドがあるか否かを判断するステップS1608。対象CPUが、仮割当先CPUに割当済のスレッドおよび対象スレッドのうち、未選択のスレッドがあると判断した場合ステップS1608:Yes、未選択のスレッドから任意のスレッド選択スレッドを選択するステップS1609。そして、対象CPUが、選択スレッドに後続スレッドがあるか否かを判断するステップS1610。対象CPUが、選択スレッドに後続スレッドがあると判断した場合ステップS1610:Yes、選択スレッドの実処理時間=選択スレッドの処理時間×基準クロック周波数/オーバークロック周波数としステップS1611、ステップS1613へ移行する。選択スレッドの処理時間は、スレッド依存関係情報300から選択スレッドの識別情報に基づいて特定される。対象CPUが、選択スレッドに後続スレッドがないと判断した場合ステップS1610:No、選択スレッドの実処理時間=選択スレッドの処理時間としステップS1612、ステップS1613へ移行する。ステップS1611またはステップS1612のつぎに、対象CPUが、対象スレッドの実処理時間>選択スレッドの実処理時間であるか否かを判断するステップS1613。対象CPUが、対象スレッドの実処理時間>選択スレッドの実処理時間であると判断した場合ステップS1613:Yes、T1=T1選択スレッドの実処理時間としステップS1614、ステップS1608へ戻る。対象CPUが、対象スレッドの実処理時間>選択スレッドの実処理時間でないと判断した場合ステップS1613:No、T1=T1n1×t1としステップS1615、ステップS1608へ戻る。ステップS1608において、対象CPUが、割当先CPUに割当済のスレッドおよび対象スレッドのうち、未選択のスレッドがないと判断した場合ステップS1608:No、T1を出力しステップS1616、ステップS1115へ移行する。出力形式としては、たとえば、対象CPUが、アクセス可能な記憶装置に記憶する。図18および図19は、図11で示したT0の算出処理ステップS1115の詳細な一例を示すフローチャートである。対象CPUが、対象スレッドの後続スレッドを生成する生成元スレッドの割当先CPUを特定しステップS1801、生成元スレッドの割当先CPUに割当済のスレッドを特定するステップS1802。対象CPUが、t0=生成元スレッドの割当先CPUのタイムスライスとしステップS1803、対象スレッドに後続スレッドがあるか否かを判断するステップS1804。対象CPUが、対象スレッドに後続スレッドがあると判断した場合ステップS1804:Yes、生成元スレッドの実処理時間=生成元スレッドの処理時間×基準クロック周波数/オーバークロック周波数としステップS1805、ステップS1807へ移行する。生成元スレッドの処理時間は、スレッド依存関係情報300から生成元スレッドの識別情報に基づいて特定される。対象CPUが、対象スレッドに後続スレッドがないと判断した場合ステップS1804:No、生成元スレッドの実処理時間=生成元スレッドの処理時間としステップS1806、ステップS1807へ移行する。ステップS1805またはステップS1806のつぎに、n0小数点以下切り上げ=生成元スレッドの実処理時間/t0とするステップS1807。n0は生成元スレッドが処理終了までに実行される実行回数である。対象CPUが、T0=0としステップS1808、割当先CPUに割当済のスレッドのうち、未選択のスレッドがあるか否かを判断するステップS1809。対象CPUが、割当先CPUに割当済のスレッドおよび対象スレッドのうち、未選択のスレッドがあると判断した場合ステップS1809:Yes、未選択のスレッドから任意のスレッド選択スレッドを選択するステップS1810。そして、対象CPUが、選択スレッドに後続スレッドがあるか否かを判断するステップS1811。対象CPUが、選択スレッドに後続スレッドがあると判断した場合ステップS1811:Yes、選択スレッドの実処理時間=選択スレッドの処理時間×基準クロック周波数/オーバークロック周波数としステップS1812、ステップS1814へ移行する。選択スレッドの処理時間は、スレッド依存関係情報300から選択スレッドの識別情報に基づいて特定される。対象CPUが、選択スレッドに後続スレッドがないと判断した場合ステップS1811:No、選択スレッドの実処理時間=選択スレッドの処理時間としステップS1813、ステップS1814へ移行する。ステップS1812またはステップS1813のつぎに、対象CPUが、生成元スレッドの実処理時間>選択スレッドの実処理時間であるか否かを判断するステップS1814。対象CPUが、生成元スレッドの実処理時間>選択スレッドの実処理時間であると判断した場合ステップS1814:Yes、T0=T0選択スレッドの実処理時間としステップS1815、ステップS1809へ戻る。対象CPUが、生成元スレッドの実処理時間>選択スレッドの実処理時間でないと判断した場合ステップS1814:No、T0=T0n0×t0としステップS1816、ステップS1809へ戻る。ステップS1809において、対象CPUが、割当先CPUに割当済のスレッドおよび対象スレッドのうち、未選択のスレッドがないと判断した場合ステップS1809:No、T1を出力しステップS1817、ステップS1105へ移行する。出力形式としては、たとえば、対象CPUが、アクセス可能な記憶装置に記憶する。また、スレッドごとに該スレッドの実行時のクロック周波数が異なるため、各CPUではタスクスイッチ、タスクディスパッチ、処理終了ごとにクロックの周波数が変更される。クロック周波数が変更される例を図20と図21を用いて説明する。図20および図21は、図11で示したタイムスライスの算出処理ステップS1116の詳細な一例を示すフローチャートである。まず、対象CPUが、対象スレッドの仮割当先CPUに割当済のスレッドを特定しステップS2001、n1’=1としステップS2002、T1’=0とするステップS2003。ここで、n1’は対象スレッドが処理終了までに実行される実行回数を示している。対象CPUが、仮割当先CPUに割当済のスレッドおよび対象スレッドのうち、未選択のスレッドがあるか否かを判断するステップS2004。対象CPUが、仮割当先CPUに割当済のスレッドおよび対象スレッドのうち、未選択のスレッドがあると判断した場合ステップS2004:Yes、未選択のスレッドから任意のスレッド選択スレッドを選択するステップS2005。つぎに、対象CPUが、選択スレッドに後続スレッドがあるか否かを判断するステップS2006。対象CPUが、選択スレッドに後続スレッドがあると判断した場合ステップS2006:Yes、選択スレッドの実処理時間=選択スレッドの処理時間×基準クロック周波数/オーバークロック周波数としステップS2007、ステップS2009へ移行する。選択スレッドの処理時間は、スレッド依存関係情報300から選択スレッドの識別情報に基づいて特定される。対象CPUが、選択スレッドに後続スレッドがないと判断した場合ステップS2006:No、選択スレッドの実処理時間=選択スレッドの処理時間としステップS2008、ステップS2009へ移行する。ステップS2007またはステップS2008のつぎに、対象CPUが、対象スレッドの処理時間×基準クロック周波数/オーバークロック周波数>選択スレッドの実処理時間であるか否かを判断するステップS2009。対象CPUが、対象スレッドの処理時間×基準クロック周波数/オーバークロック周波数>選択スレッドの処理時間でないと判断した場合ステップS2009:No、T1’=T1’n1’×t1’としステップS2010、ステップS2003へ戻る。対象スレッドの処理時間は、スレッド依存関係情報300から対象スレッドの識別情報に基づいて特定される。対象CPUが、対象スレッドの処理時間×基準クロック周波数/オーバークロック周波数>選択スレッドの処理時間であると判断した場合ステップS2009:Yes、T1’=T1’選択スレッドの処理時間としステップS2011、ステップS2003へ戻る。ステップS2004において、対象CPUが、仮割当先CPUに割当済のスレッドおよび対象スレッドのうち、未選択のスレッドがないと判断した場合ステップS2004:No、T1’=T0となるt1’を算出しステップS2012、解があるか否かを判断するステップS2013。T1’=T0となるt1’を算出するとは、具体的には、たとえば、上記式5=T0の一次方程式の解を算出することである。対象CPUが、解があると判断した場合ステップS2013:Yes、t1’<t1であるか否かを判断するステップS2014。対象CPUが、t1’<t1でないと判断した場合ステップS2014:No、n1’とt1’とを関連付けて出力しステップS2015、n1’=n1’1としステップS2016、ステップS2003へ戻る。出力形式としては、たとえば、対象CPUがアクセス可能な記憶装置に記憶する。ステップS2013において、解があると判断した場合ステップS2013:No、ステップS2017へ移行する。ステップS2014において、対象CPUが、t1’<t1であると判断した場合ステップS2014:Yes、ステップS2017に移行する。ステップS2013のNoの場合またはステップS2014のYesの場合のつぎに、実行回数が1からn1’-1の算出したタイムスライスから、任意のタイムスライスをt1’として選択しステップS2017、ステップS1108へ移行する。ただし、n1’=1において、解が無い場合、何も選択されていないこととする。1からn1’-1の実行回数のうちのいずれの実行回数のタイムスライスが選択されるかについては任意であり、設計者が決定することとしてよい。図22は、各CPUによる情報処理手順を示すフローチャートである。各CPUによる処理であるが、代表してCPU0を例に挙げて説明する。CPU0が、イベントを検出したか否かを判断するステップS2201。CPU0が、イベントを検出していないと判断した場合ステップS2201:No、ステップS2201へ戻る。CPU0が、スレッドの処理終了を検出したと判断した場合ステップS2201:スレッドの処理終了、実行可能なスレッドがあるか否かを判断するステップS2202。CPU0が、実行可能なスレッドがないと判断した場合ステップS2202:No、ステップS2201へ戻る。CPU0が、実行可能なスレッドがあると判断した場合ステップS2202:Yes、実行可能なスレッドから任意のスレッドを選択しステップS2203、ステップS2204へ移行する。CPU0が、タスクディスパッチまたはタスクスイッチを検出したと判断した場合ステップS2201:タスクディスパッチまたはタスクスイッチ、イベントが検出されたスレッドまたは選択したスレッドが後続スレッドを有するか否かを判断するステップS2204。CPU0が、イベントが検出されたスレッドまたは選択したスレッドが後続スレッドを有すると判断した場合ステップS2204:Yes、クロック供給回路210にオーバークロック周波数の設定を通知するステップS2205。CPU0が、イベントが検出されたスレッドまたは選択したスレッドが後続スレッドを有さないと判断した場合ステップS2204:No、変更部507により、クロック供給回路210に基準クロック周波数の設定を通知するステップS2206。周波数の設定通知については、具体的には、CPUの識別情報と、周波数と、を関連付けてクロック供給回路210に送信する。ステップS2205またはステップS2206のつぎに、CPU0が、周波数の変更完了を受信したか否かを判断するステップS2207。CPU0が、周波数の変更完了を受信していないと判断した場合ステップS2207:No、ステップS2207へ戻る。CPU0が、周波数の変更完了を受信したと判断した場合ステップS2207:Yes、実行開始しステップS2208、ステップS2201へ戻る。図23は、クロック供給回路210による設定処理手順を示すフローチャートである。クロック供給回路210が、周波数の設定通知を受信したか否かを判断するステップS2301。そして、クロック供給回路210が、周波数の設定通知を受信していないと判断した場合ステップS2301:No、ステップS2301へ戻る。一方、クロック供給回路210が、周波数の設定通知を受信したと判断した場合ステップS2301:Yes、設定通知の送信元CPUへ供給する周波数を該設定通知に含まれる周波数に設定するステップS2302。クロック周波数の設定については、上述したように、クロック供給回路210が各CPUからクロック周波数の設定通知を受信すると、受信したCPUの識別情報に対応するフラグを受信したフラグの設定値に設定する。そして、クロック供給回路210が、周波数の変更完了を通知するステップS2303。また、実施例1および実施例2ではT0とT1とが一致するタイムスライスは計算式で算出されているが、これに限らず、タイムスライスを所定時間ごとに変化させながら、T0とT1が一致するタイムスライスが特定されてもよい。以上説明したように、マルチタスクスケジューリング方法、およびマルチコアプロセッサシステムによれば、第1のCPUに割り当てられた先行スレッドの実行終了が第2のCPUに割り当てられた、後続スレッドの生成元スレッドの実行終了以前か否かを判断する。すなわち、後続スレッドの実行開始を生成元スレッドの実行終了として、第1のCPUに割り当てられた先行スレッドの実行終了が生成元スレッドの実行終了以前となるように、各CPUのタイムスライスを調整する。これにより、プログラムコードが不要となり、実行待ちによって性能劣化させずにスレッド間で定義された実行順序を保つことができる。また、第1時間が第2時間と実質的に等しくなるように第1のCPUのタイムスライスを計算することにより、先行スレッドの処理終了後に、後続スレッドを実行させることができるため、実行順序を保つことができる。また、第1時間が第2時間と実質的に等しくなる第1のCPUのタイムスライスが計算により得られなかった場合、後続スレッドを先行スレッドと同様に第1のCPUに割り当てる。これにより、先行スレッドと後続スレッドとをシングルコアプロセッサシステムで実行させることと同一となり、実行順序を保つことができる。また、第1時間が第2時間と実質的に等しくなるように第1のCPUのタイムスライスが調整された場合、後続スレッドを負荷が最小であるCPUに割り当てる。これにより、先行スレッドと後続スレッドと生成元スレッドとを含むプロセスの処理時間を短縮させることができる。また、先行スレッドが実行される間、第1のCPUに供給するクロックのクロック周波数を他のスレッドを実行時のクロック周波数よりも早くする。これにより、先行スレッドの実処理時間を短縮させることができる。さらに、先行スレッドが実行される間のみクロック周波数を早くし、他のスレッドが実行される間はクロック周波数を早くしないことで、省電力化を図ることができる。また、スレッド依存関係情報に基づいて後続スレッドを検出する。これにより、スケジューリング時に後続スレッドを有するプロセスのコードを解析する処理を省くことができ、該プロセスの処理時間を短縮させることができる。なお、マルチタスクスケジューリング方法は、予め用意されたプログラムをマルチコアプロセッサのうちのいずれかのコアで実行することにより実現することができる。また、該プログラムは、フラッシュROMなどのCPU0またはCPU1が読み取り可能な記録媒体に記録され、CPU0またはCPU1によって記録媒体から読み出されることによって実行されてもよい。また、該プログラムは、インターネット等のネットワークを介して配布されてもよい。