CPUと、前記CPUの電力を検出するセンサと、キャッシュメモリの状態を監視するキャッシュメモリ状態監視回路と、前記センサからのセンサ信号と前記キャッシュメモリ状態監視回路からの状態信号とに基づいて前記CPUが実行するプログラムのスピン状態を検出する検出回路と、を含むことを特徴とするシステム。前記スピン状態が検出されたときに前記プログラムのスピン状態を解除する解除回路を含むことを特徴とする請求項1に記載のシステム。前記センサ信号と閾値とを比較し、比較結果を前記検出回路に出力する比較回路を含むことを特徴とする請求項1または請求項2に記載のシステム。前記プログラムが実行する命令が所定命令であるか否かを判定し、判定結果を前記検出回路に出力する判定回路を含むことを特徴とする請求項1乃至請求項3の何れか一に記載のシステム。前記所定命令は、ジャンプ命令であることを特徴とする請求項4に記載のシステム。前記検出回路の検出結果に基づいて前記プログラムを制御するための情報を格納する制御レジスタを含むことを特徴とする請求項1乃至請求項5の何れか一に記載のシステム。CPUと、前記CPUの電力を検出してセンサ信号を出力するセンサと、キャッシュメモリの状態を監視して状態信号を出力するキャッシュメモリ状態監視回路と、を含み、前記センサ信号が閾値以上となる場合であって前記状態信号が前記キャッシュメモリの状態に変化がないことを示すときに、前記CPUが実行するプログラムのスピン状態が検出されることを特徴とするシステム。前記状態信号が前記キャッシュメモリの状態に変化がないことを示す場合であって、実行する前記プログラムの命令が所定命令であるとき、前記スピン状態が検出されることを特徴とする請求項7に記載のシステム。前記センサ信号が前記閾値未満であるとき、または、前記スピン状態である場合に前記状態信号が前記キャッシュメモリの状態に変化があることを示すときに、非スピン状態が検出されることを特徴とする請求項7または請求項8に記載のシステム。CPUの電力を検出し、キャッシュメモリの状態を監視し、検出された電力と前記キャッシュメモリの状態とに基づいて前記CPUが実行するプログラムのスピン状態を検出することを特徴とする検出方法。前記電力が閾値以上であるか否かを検出し、前記電力が前記閾値以上であるときは前記スピン状態を検出し、前記電力が前記閾値未満であるときは前記スピン状態の検出を行わないことを特徴とする請求項10に記載の検出方法。前記スピン状態が検出される場合に、前記スピン状態に対応する処理を所定の処理に置き換えて前記スピン状態を解除することを特徴とする請求項10または請求項11に記載の検出方法。前記スピン状態である時間が所定時間以上である場合、前記スピン状態に対応する処理の割当を停止させることを特徴とする請求項12に記載の検出方法。前記割当を停止させる処理は、さらに、前記スピン状態と非スピン状態とを反復した回数が所定回数以上である場合、前記スピン状態に対応する処理の割当を停止させることを特徴とする請求項13に記載の検出方法。しかしながら、上述した従来技術において、明示的に記述されたスピンウェイト命令を参照することでスピン状態を検出しているため、プログラム中に明示されてないループによって発生したスピン状態を検出することが困難であるという問題があった。たとえば、フラグの監視による状態遷移待ちするプログラムの命令群には、CPUのハード機能を利用する命令、またはOSのライブラリを呼び出す命令が存在しないため、該当のプログラムがスピン状態を引き起こす目印になる命令が存在しないことになる。したがって、従来技術にかかる技術では、このようなプログラムがスピン状態を引き起こすことを検出することが困難であった。また、上述した従来技術において、統計情報を用いることで明示的でないスピン状態をある程度予測することは可能ではある。しかしながら、統計情報収集時に発生しなかった箇所についてはスピン状態を検出できないため、明示的でないスピン状態を全て検出することは困難であるという問題があった。本発明は、上述した従来技術による問題点を解消するため、プログラム中に明示されてないループによって発生したスピン状態を検出できるシステム、および検出方法を提供することを目的とする。上述した課題を解決し、目的を達成するため、本発明の一側面によれば、CPUと、CPUの電力を検出するセンサと、キャッシュメモリの状態を監視するキャッシュメモリ状態監視回路と、センサからのセンサ信号とキャッシュメモリ状態監視回路からの状態信号とに基づいてCPUが実行するプログラムのスピン状態を検出する検出回路とを含むシステム、および検出方法が提案される。本発明の一側面によれば、プログラム中に明示されてないループによって発生したスピン状態を検出できるという効果を奏する。以下に添付図面を参照して、開示のシステム、および検出方法の実施の形態を詳細に説明する。なお、本実施の形態にかかるシステムの例として、複数のCPUを有するマルチコアプロセッサシステムにて説明を行う。マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。図1は、マルチコアプロセッサシステム100の動作例を示す説明図である。図1で示すマルチコアプロセッサシステム100は、CPU0、CPU1を含む。以下、接尾記号nが付随された記号は、n番目のCPUに対応する記号であることを示している。マルチコアプロセッサシステム100は、携帯電話といった携帯端末を想定している。符号101で示す説明図は、CPU0がスピン状態となった状態を示しており、符号102で示す説明図は、スピン状態となったCPU0が解除され、非スピン状態となった場合を示している。また、CPU0、CPU1は、キャッシュメモリ1030、キャッシュメモリ1031、を含む。さらに、CPU0、CPU1は、それぞれ、スピン状態になったことを検出するスピン回避機構1040、スピン回避機構1041を有している。符号101に示す説明図にて、CPU0は、実行コード105を含むスレッド0を実行している。実行コード105は、yの値を書き換えるのを待ってループを抜け出すアルゴリズムとなっている。このようなアルゴリズムの場合、ミューテックスのような専用命令により排他同期を行っていれば、明示的なロック状態をコンパイラが認識できる。しかし、実行コード105のようなコーディングを行っている場合、これがスピン状態を起こすかどうかをコンパイラ等が判定することはできない。スレッド0の実行によって、CPU0がスピン状態となると、CPU0の電力が上昇する。また、同一の処理を繰り返すため、キャッシュメモリ1030の状態が変化しない。スピン回避機構1040は、CPU0の電力とキャッシュメモリ1030の状態から、スピン状態を検出する。このように、スピン回避機構1040は、スピン状態におけるマルチコアプロセッサシステム100の状態を用いて検出することで、排他制御用の特別な命令を用いずに実装された排他制御によって発生したスピン状態を検出することができる。符号102に示す説明図では、スピン状態検出後のマルチコアプロセッサシステム100の状態である。CPU0は、スピン回避機構1040によるスピン状態の検出によって、スピン状態となっており、プログラム内に排他制御の記述が明示的にないスレッド0の特定が容易となる。したがって、CPU0は、特定できたスレッド0をディスパッチループから退避する。これにより、CPU0の電力が下降するため、マルチコアプロセッサシステム100は、消費電力を削減することができる。マルチコアプロセッサシステム100のハードウェア図2は、マルチコアプロセッサシステム100のハードウェア例を示すブロック図である。図2において、マルチコアプロセッサシステム100は、複数のCPUが含まれるCPUs201と、ROMRead‐OnlyMemory202と、RAMRandomAccessMemory203と、を含む。また、マルチコアプロセッサシステム100は、フラッシュROM204と、フラッシュROMコントローラ205と、フラッシュROM206と、を含む。また、マルチコアプロセッサシステム100は、ユーザやその他の機器との入出力装置として、ディスプレイ207と、I/FInterface208と、キーボード209と、を含む。また、各部はバス210によってそれぞれ接続されている。ここで、CPUs201は、マルチコアプロセッサシステム100の全体の制御を司る。CPUs201は、CPU0~CPUnを含む。nは、1以上の整数である。また、CPU0~CPUnには、図1で示したキャッシュメモリ103、スピン回避機構104、またその他のハードウェアが存在する。これらのハードウェアについては、図3にて後述する。ROM202は、ブートプログラムなどのプログラムを記憶している。RAM203は、CPUs201のワークエリアとして使用される。フラッシュROM204は、読出し速度が高速なフラッシュROMであり、たとえば、NOR型フラッシュメモリである。たとえば、フラッシュROM204は、OSなどのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、OSを更新する場合、マルチコアプロセッサシステム100は、I/F208によって新しいOSを受信し、フラッシュROM204に格納されている古いOSを、受信した新しいOSに更新する。フラッシュROMコントローラ205は、CPUs201の制御に従ってフラッシュROM206に対するデータのリード/ライトを制御する。フラッシュROM206は、データの保存、運搬を主に目的としたフラッシュROMであり、たとえば、NAND型フラッシュメモリである。フラッシュROM206は、フラッシュROMコントローラ205の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム100を使用するユーザがI/F208を通して取得した画像データ、映像データや、また本実施の形態にかかるスレッド処理方法を実行するプログラムなどである。フラッシュROM206は、たとえば、メモリカード、SDカードなどを採用することができる。ディスプレイ207は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ207は、たとえば、TFTThinFilmTransistor液晶ディスプレイなどを採用することができる。I/F208は、通信回線を通じてLAN、WANWideAreaNetwork、インターネットなどのネットワーク211に接続され、ネットワーク211を介して他の装置に接続される。そして、I/F208は、ネットワーク211と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F208には、たとえばモデムやLANアダプタなどを採用することができる。キーボード209は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード209は、タッチパネル式の入力パッドやテンキーなどであってもよい。図3は、マルチコアプロセッサシステム100のCPU周辺のハードウェアとソフトウェア例を示すブロック図である。初めに、マルチコアプロセッサシステム100は、ハードウェアとして、スヌープ機構301、サーモ電力検出部303、PMUPowerManagementUnit304、スピン回避機構104、を含む。スヌープ機構301は、CPU0~CPUnがアクセスするキャッシュメモリ103の整合性を取る装置である。たとえば、キャッシュメモリ1030が更新されると、スヌープ機構301が、キャッシュメモリ1031に更新内容を通知する。スヌープ機構301のプロトコルとしては、無効型プロトコルと更新型プロトコルが存在する。なお、キャッシュメモリ103の整合性を取る装置は、キャッシュコヒーレンシ機構に分類され、キャッシュコヒーレンシ機構の一例として、スヌープ機構が存在する。キャッシュコヒーレンシ機構は、大別してスヌープ方式を採用したスヌープ機構とディレクトリ方式とがある。本実施の形態にかかるスヌープ機構301は、ディレクトリ方式を採用したキャッシュコヒーレンシ機構であってもよい。メモリ302は、CPUs201からアクセス可能な共有の記憶装置である。なお、メモリ302は、RAM203の全てであってもよいし、または一部であってもよい。さらに、メモリ302は、ROM202、フラッシュROM204、フラッシュROM206を含んでいてもよい。なお、図3で説明するスヌープ機構301、メモリ302以外のハードウェア、ソフトウェアは、CPU0~CPUn全てが有する。したがって、以下の図3の説明では、CPU0に関するハードウェア、ソフトウェアについて説明を行い、さらに、接尾記号0を省略する。CPU0内のハードウェアとして、CPU0は、プログラムカウンタ311、タイマ312、キャッシュメモリ103を含む。また、CPU0で実行されるソフトウェアとして、CPU0は、OS321、スレッド331~スレッド333、アイドルスレッド334を実行する。OS321は、カーネル322、APIApplicationProgrammingInterface323、ディスパッチスケジューラ324、排他同期API検出部325を含む。サーモ電力検出部303は、CPUに付随している、温度調節を行うサーモスタットから電力、温度を検出する機能を有する。なお、サーモ電力検出部303は、CPUと配線接続はしておらず、基盤上で物理的に接続している。PMU304は、CPUの電源電圧、クロックを管理する装置である。スピン回避機構104は、サーモ電力検出部303、キャッシュメモリ103、排他同期API検出部325からの入力に基づいて、スピン状態を検出する。検出結果は、ディスパッチスケジューラ324に出力される。なお、スピン回避機構104の内部については、図4にて後述する。プログラムカウンタ311は、CPUのレジスタの一つであり、CPUが現在実行中の命令が格納されているメモリ302上のアドレスを格納する記憶領域である。タイマ312は、時間経過を通知する機能を有する。なお、タイマ312は、CPUのクロックカウンタ等で実装される。キャッシュメモリ103は、CPUがメモリ302のデータに高速にアクセス可能とするため、メモリ302のデータの一部をコピーした記憶領域である。また、キャッシュメモリ103は、データを記憶するデータキャッシュと、プログラム内の命令を記憶するインストラクションキャッシュを含む。OS321は、マルチコアプロセッサシステム100を制御するプログラムである。たとえば、OS321は、メモリ302を管理したり、またはファイルシステムをアプリに提供したりする。カーネル322は、OS321の中核となる機能を有する。たとえば、カーネル322は、フラッシュROMコントローラ205、キーボード209等といったハードウェアを制御するデバイスドライバを含む。API323は、スレッド331~スレッド333がOS321の提供するライブラリにアクセスするためのインターフェースである。たとえば、API323は、ファイルシステムの制御、画像処理、文字制御などを実行する関数として提供される。ディスパッチスケジューラ324は、スレッドの割当を制御する機能を有する。たとえば、ディスパッチスケジューラ324は、CPUに次に割り当てるスレッドを決定し、決定されたスレッドをCPUに割り当てる。ディスパッチスケジューラ324によって割り当てられるスレッドは、スレッド331~スレッド333、アイドルスレッド334である。また、ディスパッチスケジューラ324は、アイドルスレッド334をCPUに割り当てる場合、PMU304にCPUへのクロックの供給を停止するよう通知する。排他同期API検出部325は、スピン回避機構104を制御するAPIである。具体的に、排他同期API検出部325は、スピン状態であると設定するAPIと、スピン状態であったのを解除するAPIとが含まれる。スレッド331~スレッド333は、アプリケーションソフトウェア内の一機能を実行する。たとえば、アプリケーションソフトウェアが動画再生アプリであることを想定する。このとき、スレッド331がネットワーク211からダウンロードするダウンロードスレッド、スレッド332が動画コーデックに従ってデコードするデコードスレッド、スレッド333がディスプレイ207に表示する描画スレッドとなる。アイドルスレッド334は、何もしないスレッドである。たとえば、アイドルスレッドは、NOP命令を実行する。以下、図4~図6にて、スピン回避機構104のハードウェア例について説明を行う。図4~図6では、CPU0に対応するスピン回避機構1040を例にして説明を行い、スピン回避機構1041~スピン回避機構104nについては、等しいハードウェアであるため、説明を省略し、接尾記号nも省略する。図4は、スピン回避機構104のハードウェア例を示すブロック図である。スピン回避機構104は、記憶部401、スピン判定部402、キャッシュメモリ状態監視回路403、センサI/F404、発行命令バッファ405、を含む。また、スピン回避機構104は、センサ411からの入力を受け付ける。また、スピン回避機構104は、カーネル322内のスピン回避機構ドライバ412からの制御を受ける。記憶部401は、情報を記憶するレジスタ群であり、制御レジスタ421、スピン状態ステータスレジスタ422、センサ閾値格納レジスタ423を含む。制御レジスタ421は、スピン状態設定、スピン状態解除設定、スピン状態という3つのフィールドを含む。スピン状態設定フィールド、スピン状態解除設定フィールドは、スピン回避機構ドライバ412から設定されるフィールドである。スピン状態設定フィールドは、スピン回避機構ドライバ412からスピン状態であると指示された場合に、指示を示す識別子を格納する。たとえば、スピン状態設定フィールドは、スピン状態であると指示された場合、TRUEを格納し、指示されてないとき、FALSEを格納する。スピン状態解除設定フィールドは、スピン状態であったのを解除すると指示された場合に、指示を示す識別子を格納する。たとえば、スピン状態解除設定フィールドは、スピン状態を解除すると指示された場合、TRUEを格納し、指示されてないとき、FALSEを格納する。スピン状態フィールドは、スピン判定部402によって判定された結果に基づいて、スピン状態か否かを示す識別子を格納する。たとえば、スピン状態フィールドは、スピン判定部402によってスピン状態であると判定された場合、TRUEを格納し、非スピン状態であると判定されたとき、FALSEを格納する。また、スピン状態フィールドは、スピン回避機構ドライバ412に対してスピン状態か否かを示す割込信号を通知する。スピン状態ステータスレジスタ422は、スピン状態か、または非スピン状態かを、スピン回避機構104内部で使用するために用意されたレジスタである。具体的に、スピン状態ステータスレジスタ422は、スピン状態であればTRUEであり、非スピン状態であればFALSEを格納する。センサ閾値格納レジスタ423は、センサ411の値に対する閾値を格納する。具体的な閾値の値としては、図8にて後述する。スピン判定部402は、制御レジスタ421、センサI/F404、センサ閾値格納レジスタ423、スピン状態ステータスレジスタ422、発行命令バッファ405からの入力により、スピン状態かを判定し、制御レジスタ421に出力する。また、スピン判定部402は、スピン状態であることを検出するスピン状態検出回路431と、スピン状態が解除され、非スピン状態であることを検出するスピン状態解除回路432と、を含む。なお、スピン状態検出回路431の詳細については、図5にて後述する。また、スピン状態解除回路432の詳細については、図6にて後述する。キャッシュメモリ状態監視回路403は、キャッシュメモリ103の状態を監視する。具体的に、キャッシュメモリ状態監視回路403は、プログラムカウンタ3110を用いて、キャッシュメモリ103内の、インストラクションキャッシュに格納されている命令を取得し、発行命令バッファ405に格納する。また、キャッシュメモリ状態監視回路403は、キャッシュメモリ103の状態を示す状態信号をスピン判定部402に出力する。キャッシュメモリ状態監視回路403の動作については、図7にて後述する。センサI/F404は、センサ411に対するインターフェースである。センサI/F404は、センサ411から電力量を取得し、センサ信号として出力する。発行命令バッファ405は、CPUが実行した命令を蓄積する。センサ411は、サーモ電力検出部303といった電力センサである。また、センサ411は、温度センサであってもよい。前述したセンサ閾値格納レジスタ423は、センサ411に対応した閾値が格納されている。スピン回避機構ドライバ412は、スピン回避機構104を制御するドライバである。具体的に、スピン回避機構ドライバ412は、スピン状態設定フィールド、スピン状態解除設定フィールドに対して書き込みを行う。また、スピン回避機構ドライバ412は、タイマ312による一定周期ごとに、スピン状態フィールドの状態に対応した割込信号を取得し、スピン状態が悪化している状態であるかを判断し、さらにスピン状態に周期性があるか否かを判断する。判断結果は、ディスパッチスケジューラ324に通知される。図5は、スピン判定部402によるスピン状態検出の一例を示すブロック図である。図5では、スピン判定部402によるスピン状態検出時に用いる回路の例を示している。スピン判定部402は、スピン状態検出回路431と、比較回路501と、判定回路502とを用いて、スピン状態を検出する。また、スピン状態検出回路431は、AND回路511と、OR回路512とを含む。また、判定回路502は、判定回路503、抽出回路504、抽出回路505、比較回路506を含む。また、スピン判定部402は、スピン状態検出のため、制御レジスタ421、センサI/F404、センサ閾値格納レジスタ423、キャッシュメモリ状態監視回路403から出力されるキャッシュ状態信号521、プログラムカウンタ311の入力を受ける。さらに、スピン判定部402は、制御レジスタ421、スピン状態ステータスレジスタ422に検出したスピン状態を出力する。キャッシュ状態信号521は、キャッシュメモリ103の状態が変化したか否かを示す信号である。なお、キャッシュ状態信号521の詳細については、図7にて後述する。比較回路501は、センサI/F404とセンサ閾値格納レジスタ423とを比較し、比較結果をスピン状態検出回路431内のAND回路511に出力する。具体的に、比較回路501は、センサI/F404からのセンサ信号がセンサ閾値格納レジスタ423の値以上である場合、比較結果としてTRUEを出力する。また、比較回路501は、センサI/F404からのセンサ信号がセンサ閾値格納レジスタ423の値より小さい場合、比較結果としてFALSEを出力する。判定回路502は、プログラムが実行する命令が所定命令であるか否かを判定し、判定結果をスピン状態検出回路431のAND回路511に出力する。ここで、所定命令とは、ジャンプ命令である。または、所定命令を実行することでジャンプ命令となる命令であってもよい。たとえば、プログラムカウンタ311に、汎用レジスタの値や、メモリの値を設定するという命令があった場合、設定を行うことで、次の命令の実行位置が、設定された値となり、ジャンプ命令と同じ動作を行う。したがって、このような動作を行う命令も、所定命令として含めてもよい。判定回路503は、キャッシュ状態信号521がキャッシュ状態変化なしか否かを判定し、判定結果を抽出回路504に出力する。具体的に、判定回路503は、キャッシュ状態信号521が、キャッシュ状態変化なしを示す状態信号の場合、判定結果としてTRUEを出力し、キャッシュ状態変化ありを示す状態信号の場合、判定結果としてFALSEを出力する。抽出回路504は、判定結果がTRUEである場合、発行命令バッファ405に蓄積されていた命令から、ジャンプ先アドレスを抽出して比較回路506に出力する。たとえば、蓄積されていた命令がジャンプ命令ジャンプ先アドレスとなっていた場合、抽出回路504は、ジャンプ先アドレスを抽出する。また、蓄積されていた命令がプログラムカウンタ311にジャンプテーブル内のオフセット値のアドレスを設定する命令であれば、抽出回路504は、ジャンプテーブル内のオフセット値のアドレスをジャンプ先アドレスとして抽出する。抽出回路505は、プログラムカウンタ311が指すアドレスから、ジャンプ先アドレスを抽出して比較回路506に出力する。具体的なジャンプ先アドレスの抽出方法は、抽出回路504と同等であるため、説明を省略する。比較回路506は、抽出回路504と抽出回路505の抽出結果を比較し、判定結果をスピン状態検出回路431のAND回路511に出力する。ここで、所定命令とは、ジャンプ命令である。具体的に、比較回路506は、抽出回路504と抽出回路505の抽出結果が同じジャンプ先アドレスであれば、比較結果としてTRUEを出力し、異なるアドレスであれば、FALSEを出力する。AND回路511は、比較回路501と比較回路506の論理積をOR回路512に出力する。OR回路512は、制御レジスタ421のスピン状態設定フィールドとAND回路511との論理和を制御レジスタ421のスピン状態フィールドとスピン状態ステータスレジスタ422に出力する。なお、判定回路502は、比較回路501の比較結果がTRUEとなった後に、判定を行ってもよい。判定回路502では、キャッシュメモリ103の監視を行うため、処理負荷が増大するが、比較回路501の比較結果がTRUEとなったときに判定回路502を動作させることで、スピン回避機構104の処理効率をよくすることができる。図6は、スピン判定部402によるスピン状態解除検出の一例を示すブロック図である。図6では、スピン判定部402によるスピン状態解除検出時に用いる回路の例を示している。スピン判定部402は、スピン状態解除回路432と、比較回路601と、判定回路602と、スピン状態ステータスレジスタ422と、AND回路603とを用いて、スピン状態の解除を検出する。また、スピン状態解除回路432は、OR回路611を含む。また、スピン判定部402は、スピン状態解除検出のため、制御レジスタ421、センサI/F404、センサ閾値格納レジスタ423、キャッシュ状態信号521の入力を受ける。さらに、スピン判定部402は、制御レジスタ421、スピン状態ステータスレジスタ422に検出したスピン状態を出力する。比較回路601は、センサI/F404とセンサ閾値格納レジスタ423とを比較し、比較結果をスピン状態解除回路432内のOR回路611に出力する。具体的に、比較回路601は、センサI/F404からのセンサ信号がセンサ閾値格納レジスタ423の値未満である場合、比較結果としてTRUEを出力する。また、比較回路601は、センサI/F404からのセンサ信号がセンサ閾値格納レジスタ423の値以上である場合、比較結果としてFALSEを出力する。判定回路602は、キャッシュ状態信号521が、キャッシュ状態変化ありか否かを判定し、判定結果をAND回路603に出力する。具体的に、判定回路602は、キャッシュ状態信号521が、キャッシュ状態変化ありを示す状態信号の場合、判定結果としてTRUEを出力し、キャッシュ状態変化なしを示す状態信号の場合、判定結果としてFALSEを出力する。AND回路603は、判定回路602とスピン状態ステータスレジスタ422の論理積をOR回路611に出力する。具体的には、AND回路603は、判定回路602からの出力信号がTRUEであり、スピン状態ステータスレジスタ422がスピン状態を意味するTRUEであった場合に、TRUEをOR回路611に出力する。OR回路611は、制御レジスタ421のスピン状態解除設定フィールドと比較回路601による比較結果とAND回路603との論理和を制御レジスタ421のスピン状態フィールドとスピン状態ステータスレジスタ422に出力する。図7は、キャッシュメモリ状態監視回路403の動作例を示す説明図である。キャッシュメモリ103は、インストラクションキャッシュ701とデータキャッシュ702を含む。スヌープ機構301が動作している場合、キャッシュメモリ状態監視回路403は、キャッシュ状態信号521としてキャッシュメモリ103の状態が変化しているという状態信号を出力する。また、スヌープ機構301が動作していない場合、キャッシュメモリ状態監視回路403は、キャッシュ状態信号521としてキャッシュメモリ103の状態が変化していないという状態信号を出力する。さらに、キャッシュメモリ103の状態が変化していない場合、キャッシュメモリ状態監視回路403は、プログラムカウンタ311から発行された命令を取得し、発行命令バッファ405に格納する。続けて、ジャンプ命令が発行される場合のキャッシュメモリ状態監視回路403の動作について図7を用いて説明する。ループ1回目におけるアドレス:0x0012のジャンプ命令を実行する場合、CPU0は、インストラクションキャッシュ701に命令がないため、命令をメモリ302から読み出して実行する。一方で、CPU0は、読み出した命令をインストラクションキャッシュ701に格納する。ここで、0x0012番地から0x0000番地までの短い区間であるため、CPU0がアドレス:0x0012のジャンプ命令を実行する場合、2回目以降はインストラクションキャッシュ701にヒットする場合を想定する。ループ2回目以降におけるアドレス:0x0012のジャンプ命令を実行する場合、CPU0は、インストラクションキャッシュ701内でヒットした命令を取得し実行する。このとき、キャッシュメモリ103の状態が変化していないため、キャッシュメモリ状態監視回路403は、プログラムカウンタ311が指すアドレス:0x0012から、該当の命令Jump0x0000を取得する。取得後、キャッシュメモリ状態監視回路403は、発行命令バッファ405にジャンプ命令としてJumpとジャンプ先アドレス0x0000を格納する。ループ3回目以降におけるアドレス:0x0012のジャンプ命令を実行する場合、CPU0は、インストラクションキャッシュ701内でヒットした命令を取得し実行する。また、3回目以降において、抽出回路504がジャンプ先アドレスを抽出して比較回路506に出力し、比較回路506が、抽出回路504と抽出回路505を比較した結果、TRUEを出力する。図4~図7で示したハードウェア、動作によって、スピン回避機構104は、スピン状態の検出と、スピン状態の検出の解除を行う。続けて、図8、図9にて、スピン状態となった場合の電力特性と、スピン状態の解消のタイミングの判定方法について説明する。図8は、スピン状態の消費電力状態の一例を示す説明図である。符号801で示す説明図では、マルチコアプロセッサシステム100にてスピン状態となるスレッドの例を示しており、符号802で示す説明図では、電力特性の式を示しており、グラフ803は、スピン状態におけるCPUの消費電力の特性を示している。符号801の説明図に示すマルチコアプロセッサシステム100は、並列アプリに属するスレッド1およびスレッド2と、他のアプリに属するスレッド3、スレッド4を実行している。CPU0はスレッド1とスレッド3を実行しており、CPU1はスレッド2とスレッド4を実行している。このとき、スレッド2の指示によって、スレッド1が排他制御処理を実行することを想定する。スレッド1による排他制御処理は、フラグの監視による状態遷移待ちを実行することを想定する。このとき、スレッド1は、フラグ1を読み出し、フラグが条件に当てはまったか否かを判断し、条件に当てはまらない場合、再びフラグ1を読み出す。このような動作を行う場合、CPUは、Load、Compare、Jumpといった命令を実行し続けることになる。各命令は、キャッシュメモリ103に記憶されているため命令のフェッチ時間が最小となり、CPUの演算ユニットが動作し続けるため、CPUは、スピン状態に陥る。CPUは、膨大な演算を最高の効率で高速に実行しているかのような振る舞いとなるため、消費電力が最大の状態に陥ってしまう。符号802で示す説明図では、スピン状態の電力特性の式を示している。CPUにて、N個のスレッドが動作中に、1つのスレッドがスピン状態であると、CPUがスピン状態となる確率は、1/Nとなる。単位時間当たりのCPUがスピン状態になる時間は、1/N[秒]となる。続けて、スピン状態における電力特性がptである場合、CPUが消費する消費エネルギーは、下記1式となる。消費エネルギー=∫1Nptdt[J/秒]...1なお、1式は、低周波CPUや、命令リードレイテンシの長いチップでは、値が小さくなる。逆に、演算列が長いソフトウェアによる処理を実行する場合、1の値が大きくなる場合がある。グラフ803は、CPUの消費電力の特性を示している。グラフ803の横軸は時刻を示しており、縦軸は電力を示している。電力特性804は、CPUの演算命令ユニット動作時の電力特性を示しており、電力特性805は、CPUのJump/Compare命令発行によるスピン状態の電力特性を示している。電力特性804は、ほぼ一定となる。理由として、演算命令はメモリのロードストアなど、レイテンシのかかる処理と前後するため、常にCPU内に電気が流れているわけではなく、一つの演算処理が完結する間に、励起とスタンバイを繰り返すためである。したがって、単発の消費電力が高くても、連続実行しても、加速的に電力が上昇することがない。電力特性805は、初めは電力特性804より低い電力であるが、加速的に消費電力を増加する。理由として、初めの段階では、Jump/Compare命令は、プログラムカウンタ311の書き換えや、論理比較を行うといった処理のみであるため、電力特性805は、電力特性804より低い電力となるためである。しかし、時間が経過すると、ジャンプ命令は単発の命令で1つずつ動作可能であるため、CPUは、与えられたクロック周期で、レイテンシがかかることなく、常に動作することになる。その結果、CPUは高密度な命令実行がなされ、励起状態が続き、温度が上昇し、温度が上昇することで、リーク電流による消費電力が上昇することになる。なお、具体的な電力特性804、電力特性805の測定方法について、電力特性804については、CPUが単純計算を行うプログラムを動作し、この時の電力値を測定すればよい。あるいは、設計者がプロセッサの設計書、データシートから取得してもよい。電力特性805については、0x0000番地の命令コードとして、Jump0x0000というコードを実行し、電力値を測定すればよい。このように、スピン状態が始まって直後の段階では電力消費が低い状態であるためスピン状態を解消せず、電力特性805による消費エネルギーが、電力特性804による消費エネルギーを超えた場合にスピン状態を解消することで、消費電力を抑えることができる。具体的には、CPUは、下記2式による解となる時間Tにてスピン状態を解消することで、電力効率を向上させることができる。∫tptdt=Pct...2なお、Pcが演算命令ユニット動作時の消費電力であり、Pctは電力特性804の消費エネルギーとなる。たとえば、Pc=40[mW]となる。なお、Pcの値が、センサ閾値格納レジスタ423に格納される。たとえば、本実施の形態におけるCPUの電力特性ptが、下記3式で算出できる場合を想定する。pt=t^230[mW]...3CPUは、2式に3式を代入し、T=5.5[m秒]を得ることができる。したがって、CPUは、スピン状態が5.5[m秒]経過した際に、スピン状態を解消することで、電力効率を向上させることができる。設計者は、2式を解いたのち、スピン回避機構ドライバ412の設定項目となる所定時間として設定しておく。図9は、スピン状態の解消のタイミングの判定方法例を示す説明図である。図8にて、スピン状態が2式の解である所定時間以上あった場合に、スピン状態を解消することで、電力効率を向上させることができることを説明した。図9ではさらに、スピン状態が繰り返し発生する状態について説明する。図9で示すCPU0は、スピン状態であるスレッド5と、通常スレッド処理であるスレッド6と、を一定周期でディスパッチしながら実行している。このような動作を行っている場合、制御レジスタ421からの割込信号は、一定周期のパルスとなって通知される。なお、割込信号がHIGHレベルの時、スピン状態であり、LOWレベルの時、非スピン状態である場合を想定する。たとえば、CPU0は、割込信号がHIGHレベルである時間となる励起幅が、所定時間を超え、さらに、所定回数繰り返した場合に、スピン状態を解消してもよい。これにより、CPU0は、一過性の温度上昇や、パルス1回となる単発のスピン状態に対しては、スピン状態を解消せずに済むことができる。なお、所定回数の決定方法は、CPUの電力特性や、プロファイル結果等をもとに、設計者が予め決定しておく。図9の例では、2回のパルスが発生している。1回のパルスの励起幅が所定時間以上であり、所定回数が2回である場合、CPU0は、スピン状態を解消する。次に、図10、図11で示すシーケンス図は、スピン判定部402でのスピン状態検出判定とスピン状態解除判定のシーケンスを示す。図10、図11では、スピン回避機構1040が行うことを想定し、接尾記号0を省略する。図10は、スピン状態検出判定の一例を示すシーケンス図である。センサ閾値格納レジスタ423は、比較回路501に閾値を出力するステップS1001。また、センサI/F404は、比較回路501にセンサ信号を出力するステップS1002。比較回路501は、センサ信号が示す電力量が閾値以上となった場合、AND回路511に対する出力信号をFALSEからTRUEに変更するステップS1003。また、判定回路502は、プログラムが実行する命令がジャンプ命令であると判定した場合、AND回路511に対する出力信号をFALSEからTRUEに変更するステップS1004。AND回路511は、比較回路501と比較回路506の論理積をOR回路512に出力するステップS1005。たとえば、比較回路501がステップS1003を実行しており、判定回路502がステップS1004を実行していた場合、AND回路511は、OR回路512に対する出力信号をFALSEからTRUEに変更する。OR回路512は、ステップS1005が実行された場合、制御レジスタ421のスピン状態フィールドに対する出力信号を、FALSEからTRUEに変更するステップS1006。図11は、スピン状態解除判定の一例を示すシーケンス図である。センサ閾値格納レジスタ423は、比較回路601に閾値を出力するステップS1101。また、センサI/F404は、比較回路601にセンサ信号を出力するステップS1102。比較回路601は、センサ信号が示す電力量が閾値未満となった場合、OR回路611に対する出力信号を、FALSEからTRUEに変更するステップS1103。判定回路602は、キャッシュ状態が変化ありの場合、AND回路603に対する出力信号をFALSEからTRUEに変更するステップS1104。また、スピン状態ステータスレジスタ422は、スピン状態をAND回路603に出力するステップS1105。具体的に、スピン状態ステータスレジスタ422は、スピン状態であればTRUEをAND回路603に出力し、非スピン状態であればFALSEをAND回路603に出力する。AND回路603は、判定回路602とスピン状態ステータスレジスタ422の論理積をOR回路611に出力するステップS1106。たとえば、判定回路602がステップS1104を実行しており、スピン状態ステータスレジスタ422がステップS1105を実行していた場合、AND回路603は、OR回路611に対する信号をFALSEからTRUEに出力する。OR回路611は、比較回路601とAND回路603の論理和を制御レジスタ421のスピン状態フィールドに出力するステップS1107。たとえば、比較回路601がステップS1103を実行しているか、またはAND回路603がステップS1106を実行している場合、OR回路611は、制御レジスタ421のスピン状態フィールドに対する出力信号をFALSEからTRUEに出力する。次に、図12、図13では、CPU0で実行するフローチャートを示す。図12では、CPU0がスピン回避機構ドライバ4120の機能によってスピン状態周期性判断処理を実行し、図13では、CPU0がディスパッチスケジューラ3240の機能によってスレッド退避復帰処理を実行する。図12、図13では、CPU0が行うことを想定し、接尾記号0を省略する。図12は、スピン回避機構ドライバ412によるスピン状態周期性判断処理の一例を示すフローチャートである。スピン回避機構ドライバ412は、スピン状態周期性フラグを周期性なしに設定するステップS1201。設定後、スピン回避機構ドライバ412は、反復回数を0に設定しステップS1202、制御レジスタ421からの割込信号をディスパッチタイマを参照してサンプリングするステップS1203。具体的に、スピン回避機構ドライバ412は、ディスパッチタイマが示す時間の数十回分、割込信号を監視し続け、割込信号の波形を生成する。サンプリング後、スピン回避機構ドライバ412は、励起幅が所定時間以上であるか否かを判断するステップS1204。励起幅が所定時間以上である場合ステップS1204:Yes、スピン回避機構ドライバ412は、反復回数をインクリメントしステップS1205、反復回数が所定回数以上であるか否かを判断するステップS1206。反復回数が所定回数未満である場合ステップS1206:No、スピン回避機構ドライバ412は、ステップS1203の処理に移行する。反復回数が所定回数以上である場合ステップS1206:Yes、スピン回避機構ドライバ412は、スピン状態周期性フラグが周期性ありの状態か否かを判断するステップS1207。周期性ありの状態である場合ステップS1207:Yes、スピン回避機構ドライバ412は、ステップS1203の処理に移行する。周期性なしの状態である場合ステップS1207:No、スピン回避機構ドライバ412は、スピン状態周期性フラグを周期性ありに設定するステップS1208。設定後、スピン回避機構ドライバ412は、周期性ありをディスパッチスケジューラ324に通知しステップS1209、ステップS1203の処理に移行する。励起幅が所定時間未満である場合ステップS1204:No、スピン回避機構ドライバ412は、スピン状態周期性フラグが周期性なしの状態か否かを判断するステップS1210。周期性なしの状態である場合ステップS1210:Yes、スピン回避機構ドライバ412は、ステップS1202の処理に移行する。周期性ありの状態である場合ステップS1210:No、スピン回避機構ドライバ412は、スピン状態周期性フラグを周期性なしに設定するステップS1211。設定後、スピン回避機構ドライバ412は、周期性なしをディスパッチスケジューラ324に通知しステップS1212、ステップS1202の処理に移行する。これにより、スピン回避機構ドライバ412は、励起幅が所定時間以上あり、さらに、スピン状態と非スピン状態が所定回数繰り返されたときに、周期性ありと判断することができる。図13は、ディスパッチスケジューラ324によるスレッド退避復帰処理の一例を示すフローチャートである。ディスパッチスケジューラ324は、スピン回避機構ドライバ412から通知を受け付けたか否かを判断するステップS1301。通知を受け付けていない場合ステップS1301:通知なし、ディスパッチスケジューラ324は、一定時間経過後、ステップS1301の処理を再び実行する。周期性ありの通知を受け付けた場合ステップS1301:周期性あり、ディスパッチスケジューラ324は、実行中のスレッド以外に他スレッドが割り当てられているか否かを判断するステップS1302。他スレッドが割り当てられている場合ステップS1302:Yes、ディスパッチスケジューラ324は、ディスパッチループから実行中のスレッドを退避しステップS1303、ステップS1301の処理に移行する。他スレッドが割り当てられていない場合ステップS1302:No、ディスパッチスケジューラ324は、実行中のスレッドを退避しアイドルスレッドと入れ替えるステップS1304。入替後、ディスパッチスケジューラ324は、PMU304にCPUへのクロックの供給を停止するように通知しステップS1305、ステップS1301の処理に移行する。周期性なしの通知を受け付けた場合ステップS1301:周期性なし、ディスパッチスケジューラ324は、退避していたスレッドをディスパッチループに復帰しステップS1306、ステップS1301の処理に移行する。なお、退避していたスレッドが複数存在する場合、ディスパッチスケジューラ324は、退避していた全てのスレッドをディスパッチループに復帰する。これにより、ディスパッチスケジューラ324は、スピン状態となる原因となっていたスレッドを退避することができる。また、ディスパッチスケジューラ324は、非スピン状態となった場合、スレッドを復帰することで、退避されていたスレッドを続行することができる。また、上述した各フローチャートで示したステップは、具体的には、たとえば、図2に示したROM202、RAM203、フラッシュROM204、フラッシュROM206などの記憶装置に記憶された検索プログラムをCPUs201に実行させた処理である。また、実行させた実行結果は、その都度、記憶装置に書き込まれ、他の処理からの読込要求に応じて読み出される。以上説明したように、システム、および検出方法によれば、電力を検出するセンサからのセンサ信号とキャッシュメモリの状態を監視するキャッシュメモリ状態監視回路からの状態信号とによって、プログラムのスピン状態を検出する検出回路を含む。これにより、システムは、スピン状態の検出条件としてCPUの電力とキャッシュメモリの状態変化といった、スピン状態におけるシステムの状態を用いることで、排他制御用の命令を用いずに実装されたプログラムによって発生したスピン状態を検出できる。なお、スピン状態の検出には、センサからの信号とキャッシュメモリ状態監視回路からの状態信号の組合せであることが好ましい。理由として、センサからの信号のみでスピン状態を検出する場合、システムを有する携帯端末がユーザのポケットに入れられると、熱がこもってしまい、非スピン状態にも関わらず消費電力が上昇することがあるためである。また、キャッシュメモリの状態信号のみでスピン状態を検出する場合については、インストラクションキャッシュを書き換えないように実装されたプログラムが実行されていれば、非スピン状態であっても状態が変化しない、という状態になるためである。また、本実施の形態にかかるシステムは、スピン状態の検出、スピン状態解除の検出を行う際にメモリアクセスを行わないため、従来技術では検出できないスピン状態を、ほぼ無負荷で検出することができる。また、システムは、スピン状態が検出された場合にプログラムのスピン状態を解除する解除回路を含んでもよい。これにより、システムは、一旦スピン状態となっても非スピン状態に遷移することができる。また、システムは、センサ信号と閾値とを比較し、比較結果を検出回路に出力してもよい。これにより、スピン状態となりCPUの演算ユニットが動作し続けて消費電力、温度が上昇した可能性があるとして、システムは、スピン状態となった可能性があることを検出回路に出力することができる。また、システムは、プログラムが実行する命令が所定命令であるかを判定し、判定結果を検出回路に出力してもよい。なお、所定命令は、ジャンプ命令であってもよいし、プログラムカウンタにジャンプテーブルのアドレスをロードする命令であってもよい。これにより、同じジャンプ命令が実行され続けていることが検出されたため、システムは、スピン状態となった可能性があることを検出回路に出力することができる。また、システムは、検出回路の検出結果に基づいてCPUが実行するプログラムを制御するための情報を制御レジスタに保持してもよい。これにより、CPUは制御レジスタを参照することで、スピン状態か非スピン状態かを取得できる。また、システムは、センサ信号が閾値以上であり、キャッシュメモリの状態に変化がない場合、スピン状態を検出してもよい。これにより、システムは、スピン状態によって消費電力が加速するところまでを検出し、さらに、スピン状態によってキャッシュメモリに変更がなく同じ命令を実行し続けていることを検出したため、スピン状態であると特定することができる。また、システムは、キャッシュメモリの状態に変化がなく、プログラムの命令が所定命令である場合、スピン状態を検出してもよい。これにより、システムは、所定命令であるジャンプ命令が繰り返し実行されていることを検出したため、スピン状態であると特定することができる。また、システムは、センサ信号が閾値未満であるとき、または、スピン状態であるときにキャッシュメモリの状態に変化があった場合、非スピン状態を検出してもよい。これにより、システムは、スピン状態の検出条件の少なくともいずれか一方が解消されたこととなるため、非スピン状態であると特定することができる。また、システムは、スピン状態が検出される場合に、スピン状態に対応する処理を所定の処理に置き換えてスピン状態を解除してもよい。なお、所定の処理とは、アイドルスレッドである。これにより、システムは、スピン状態となり、消費電力が加速的に上昇してしまっている状態を解除でき、電力効率を向上させることができる。また、システムは、スピン状態である時間が所定時間以上である場合に、スピン状態に対応する処理の割当を停止してもよい。たとえば、スピン状態となっても、すぐにフラグ条件が満たされるスレッドも存在しており、このようなスレッドを退避してしまうと、本来すぐにスピン状態が解除すべきタイミングから処理の退避および復帰の分だけ処理性能が劣化することになる。また、スピン状態となった直後の消費電力は、一般的な演算ユニットより低いため、スピン状態となった直後に処理の割当を停止してしまうと、消費電力が増加してしまう。したがって、システムは、予め設定されている所定時間以上スピン状態が続いた場合に、処理の割当を停止することで、処理性能が維持でき、かつ、電力効率も向上させることができる。また、システムは、スピン状態である時間が所定時間以上であり、かつ、スピン状態と非スピン状態とを反復した回数が所定回数以上である場合、スピン状態に対応する処理の割当を停止してもよい。たとえば、反復した回数が少ない状態で処理の割当を停止すると、システムは、電力の過剰供給状態を削減することができるが、処理の割当の停止、また、割当の復帰の回数が増大するため、停止、復帰にかかるオーバーヘッドが大きくなる。したがって、システムは、予め設定されている所定回数以上であるときに処理の割当を停止することで、停止、復帰にかかるオーバーヘッドを抑えつつ、電力効率を向上させることができる。たとえば、従来例にかかるシステムが、TCPTransmissionControlProtocolパケットバッファのI/O排他ロックを行う場合、スピン状態の反復回数は、数千回から数百万回となる。そこで、本実施の形態にかかるシステムが、所定回数を数十回として、所定回数以上スピン状態と非スピン状態を反復した場合、スピン状態に対応する処理の割当を停止することで、従来例によるシステムに比べて、電力効率を向上することができる。なお、本実施の形態で説明した検出方法は、予め用意されたプログラムをパーソナルコンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本検出プログラムは、ハードディスク、フレキシブルディスク、CD-ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本検出プログラムは、インターネット等のネットワークを介して配布してもよい。また、本実施の形態で説明したスピン回避機構104は、スタンダードセルやストラクチャードASICApplicationSpecificIntegratedCircuitなどの特定用途向けIC以下、単にASICと称す。やFPGAなどのPLDProgrammableLogicDeviceによっても実現することができる。具体的には、たとえば、上述したスピン回避機構104の機能記憶部401~発行命令バッファ405をHDL記述によって機能定義し、そのHDL記述を論理合成してASICやPLDに与えることにより、スピン回避機構104を製造することができる。