コンピュータによって実行されるスレッドを管理するスケジューラが、処理される第1スレッドから第2スレッドが生成されるときに負荷が低いCPUを選択し、前記第2スレッドが前記第1スレッドと排他的動作を行うか否かを判定し、前記第2スレッドが排他的動作を行うときに前記第1スレッドがアクセスする第1記憶領域を前記CPUが管理する第2記憶領域に複写し、前記第2記憶領域のアドレスと所定値とに基づいて、前記第2スレッドが前記第1記憶領域にアクセスするための第2アドレスへのオフセットを算出し、第1アドレスを、前記第2記憶領域にアクセスするための第3アドレスに変換するために前記第2アドレスへのオフセットを前記CPUに通知することを特徴とするスケジューリング方法。前記第2スレッドにおいて前記第3アドレスに基づいて前記第2記憶領域がアクセスされることを特徴とする請求項1に記載のスケジューリング方法。前記第1記憶領域のアドレスと前記所定値に基づいて、前記第1アドレスへのオフセットを算出し、前記第2記憶領域へのアクセスのレスポンスに対して、前記第1アドレスへのオフセットと前記所定値に基づいて、前記第3アドレスを前記第1記憶領域内を示す第4アドレスに変換するために前記第1アドレスへのオフセットを前記CPUに通知することを特徴とする請求項1に記載のスケジューリング方法。前記第1記憶領域が前記第2記憶領域に複写された後に、前記第1スレッドを退避させることを特徴とする請求項1または請求項2に記載のスケジューリング方法。前記第1スレッドが排他的動作を行わないとき、キャッシュメモリを同期させるためのフラグをオンすることを特徴とする請求項1に記載のスケジューリング方法。前記第1記憶領域が前記第2記憶領域に複写された後に、キャッシュメモリを同期させるためのフラグをオフすることを特徴とする請求項1、請求項2または請求項4に記載のスケジューリング方法。前記第2スレッドが終了したときに、前記第2記憶領域内の更新部分を前記第1記憶領域に反映して、前記第1スレッドを復帰させることを特徴とする請求項1乃至請求項6の何れか一に記載のスケジューリング方法。第1CPUと第2CPUとを含む複数のCPUと、前記第1CPUに対応するスケジューラと、前記複数のCPUにバスを介して接続されるとともに、第1記憶領域と第2記憶領域とを含むメモリと、前記複数のCPUのうちの少なくとも一のCPUと前記メモリとの間に配置されるアドレス変換装置と、を含み、前記アドレス変換装置は、前記第1CPUが管理する前記第1記憶領域にアクセスするためのアドレスを前記第2CPUが管理する前記第2記憶領域にアクセスするためのアドレスに変換することを特徴とするマルチコアプロセッサシステム。前記アドレス変換装置は、前記第1記憶領域のアドレスと前記第1CPUにおいて実行される第1スレッドに基づいて生成される第2スレッドが前記第1記憶領域にアクセスするためのアドレスとのオフセットに基づいて、アドレスを変換することを特徴とする請求項8に記載のマルチコアプロセッサシステム。前記アドレス変換装置は、前記第2記憶領域へのアクセスのレスポンスに対して、前記第1記憶領域へのオフセットと所定値に基づいて、前記第2記憶領域のアドレスを前記第1領域のアドレスに変換することを特徴とする請求項8に記載のマルチコアプロセッサシステム。前記アドレス変換装置は、フラグがオン設定されているときにアドレスを変換し、前記フラグがオフ設定されているときにアドレスを変換しないことを特徴とする請求項8または請求項9に記載のマルチコアプロセッサシステム。前記フラグは、前記第1CPUにおいて実行される第1スレッドに基づいて生成される第2スレッドの種類に基づいて設定されることを特徴とする請求項11に記載にマルチコアプロセッサシステム。前記第2スレッドが前記第1スレッドと排他的動作を行う場合に前記フラグがオン設定されることを特徴とする請求項12に記載のマルチコアプロセッサシステム。上述した従来技術において、従来技術1にかかる技術では、並列動作させる際にはソースコードに排他処理、または同期処理を挿入する。しかしながら、人為的に検索した場合は、排他処理、または同期処理の挿入漏れが発生し、プログラム内に不具合が発生してしまうという問題があった。また、コンパイラが並列性を抽出する場合、ソフトウェア内の様々な動作状態を判断することが困難であり、適切な排他処理、または同期処理を選択することが困難であるという問題があった。また、人為的に検索した場合、またはコンパイラが並列性を抽出する場合のいずれの方法であっても、生成される実行オブジェクトは、シングルコアプロセッサシステム用の実行オブジェクトから変更されている。したがって、検証工数の減少はほとんどなく、マルチコアプロセッサシステム用の実行オブジェクトに対する膨大な検証工程が発生するという問題があった。また、従来技術2にかかる技術では、1つのアプリに着目すると、シングルコアプロセッサシステムと同速度で実行することになり、マルチコアプロセッサの恩恵を受けていないという問題があった。また、1つのアプリに着目した場合、複数のコアが存在するにも関わらず、1つのコアに負荷が集中するという問題があった。また、従来技術3にかかる技術は、スレッドが別のコアに移行可能であることを要求する。しかしながら、子スレッドがブロッキングスレッドの場合、子スレッドが親スレッドをブロッキングするために移行することが困難であるという問題があった。本発明は、上述した従来技術による問題点を解消するため、シングルコア向けの実行オブジェクトを変更せずに、複数のコアに負荷分散できるスケジューリング方法、およびマルチコアプロセッサシステムを提供することを目的とする。上述した課題を解決し、目的を達成するため、開示のスケジューリング方法は、処理される第1スレッドから第2スレッドが生成されるときに負荷が低いCPUを選択し、第2スレッドが第1スレッドと排他的動作を行うか否かを判定し、第2スレッドが排他的動作を行うときに第1スレッドがアクセスする第1記憶領域を負荷が低いCPUが管理する第2記憶領域に複写し、第2記憶領域のアドレスと所定値とに基づいて、第2スレッドが第1記憶領域にアクセスするための第2アドレスへのオフセットを算出し、第1アドレスを、第2記憶領域にアクセスするための第3アドレスに変換するために第2アドレスへのオフセットをCPUに通知する。本スケジューリング方法、およびマルチコアプロセッサシステムによれば、シングルコア向けの実行オブジェクトを変更せずに、複数のコアに負荷分散できるという効果を奏する。以下に添付図面を参照して、開示のスケジューリング方法、およびマルチコアプロセッサシステムの好適な実施の形態を詳細に説明する。図1は、マルチコアプロセッサシステム100の動作を示す説明図である。図1におけるマルチコアプロセッサシステム100は、複数のコアとなるCPUsCentralProcessingUnit101と、メモリ102とを含む。マルチコアプロセッサシステム100は、携帯電話といった携帯端末を想定している。CPUs101には、CPU0とCPU1が含まれる。CPUs101とメモリ102は、バス103で接続されている。また、CPU0、CPU1は、それぞれ、アドレス変換装置1040、アドレス変換装置1041と通信可能である。アドレス変換装置104は、CPUのアクセス先アドレスを変換する機能を有する。また、CPU0は、メモリ102内の0x1000~0x1fffをCPU0管理領域として使用し、CPU1は、メモリ102内の0x2000~0x2fffをCPU1管理領域として使用する。なお、CPUs101の各CPUは、自身の管理領域以外の領域にもアクセスできる。また、CPU0は、プロセス0、プロセス1を実行している。CPU0は、プロセス0のデータを格納するプロセス0コンテキスト領域と、プロセス1のデータを格納するプロセス1コンテキスト領域とを、CPU0管理領域に確保する。なお、プロセス0は、メモリ102に格納されている実行オブジェクト105が読み込まれた結果、生成されている。実行オブジェクト105は、シングルコア向けに生成された実行オブジェクトである。プロセス0内の親スレッドがブロッキング子スレッド1の生成要求を行うと、マルチコアプロセッサシステム100は、プロセス0の親スレッドコンテキスト領域106をCPU1管理領域に複写する。複写後、ブロッキング子スレッド1が割り当てられるCPU1は、複写先の親スレッドコンテキスト領域107内に、子スレッド1コンテキスト領域108を生成する。続けて、プロセス0のブロッキング子スレッド1が実行されるタイミングにあわせて、マルチコアプロセッサシステム100は、アドレス変換装置1041に対して、アドレス変換を行うように設定する。具体的には、アドレス変換装置1041は、ブロッキング子スレッド1からのアクセスに対し、CPU1によるシングルコア時の子スレッド1コンテキスト領域109のアドレスから、子スレッド1コンテキスト領域108のアドレスに変換する。また、アドレス変換装置1041は、子スレッド1コンテキスト領域108から取得されたアクセスに対するレスポンスに対して、子スレッド1コンテキスト領域108のアドレスから、シングルコア時の子スレッド1コンテキスト領域109のアドレスに変換する。このように、マルチコアプロセッサシステム100は、ブロッキングスレッドを実行する場合、親スレッドのコンテキスト領域を複写し、ブロッキング子スレッドを実行するCPUが複写先のコンテキスト領域にアクセスするようにアドレス変換する。これにより、マルチコアプロセッサシステム100は、それぞれのCPUが異なるアドレスにアクセスするために、ブロッキングスレッドを親スレッドのCPUとは別のCPUで実行できるため、シングルコア用のプロセスを負荷分散可能となる。マルチコアプロセッサシステムのハードウェア図2は、実施の形態にかかるマルチコアプロセッサシステムのハードウェアを示すブロック図である。図2において、マルチコアプロセッサシステム100は、CPUを複数搭載するCPUs101と、ROMRead‐OnlyMemory201と、RAMRandomAccessMemory202と、を含む。また、マルチコアプロセッサシステム100は、フラッシュROM203と、フラッシュROMコントローラ204と、フラッシュROM205と、を含む。また、マルチコアプロセッサシステム100は、ユーザやその他の機器との入出力装置として、ディスプレイ206と、I/FInterface207と、キーボード208と、を含む。また、各部はバス103によってそれぞれ接続されている。ここで、CPUs101は、マルチコアプロセッサシステム100の全体の制御を司る。CPUs101は、シングルコアのプロセッサを並列して接続した全てのCPUを指している。CPUs101は、CPU0~CPUNを含む。なお、Nは1以上の整数である。また、マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、シングルコアのプロセッサであるCPUが並列されている形態を例にあげて説明する。また、CPU0~CPUNは、それぞれ、アドレス変換装置104と通信可能である。さらに、CPU0~CPUNは、それぞれ専用のキャッシュメモリを有する。また、CPU0~CPUNは、専用のキャッシュメモリのコヒーレンシを取るため、スヌープ機構2100~スヌープ機構210Nを有する。スヌープ機構210は、CPU0~CPUNがアクセスするキャッシュメモリの整合性を取る装置である。スヌープ機構2100~スヌープ機構210Nは、それぞれ通信を行っており、たとえば、CPU0のキャッシュメモリが更新されると、スヌープ機構2100が、スヌープ機構2101~スヌープ機構210Nに更新内容を通知する。スヌープ機構210のプロトコルとしては、無効型プロトコルと更新型プロトコルが存在する。いずれのプロトコルであっても、スヌープ機構2101~スヌープ機構210Nは、自身のキャッシュメモリと他のキャッシュメモリと更新状態の情報を交換する。なお、キャッシュメモリの整合性を取る装置は、キャッシュコヒーレンシ機構に分類され、キャッシュコヒーレンシ機構の一例として、スヌープ機構が存在する。キャッシュコヒーレンシ機構は、大別してスヌープ方式を採用したスヌープ機構とディレクトリ方式とがある。本実施の形態にかかるスヌープ機構210は、ディレクトリ方式を採用したキャッシュコヒーレンシ機構であってもよい。また、スヌープ機構210は、アドレス変換装置104とバス103の間に設置される。ROM201は、ブートプログラムなどのプログラムを記憶している。RAM202は、CPUs101のワークエリアとして使用される。フラッシュROM203は、OSOperatingSystemなどのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、OSを更新する場合、マルチコアプロセッサシステム100は、I/F207によって新しいOSを受信し、フラッシュROM203に格納されている古いOSを、受信した新しいOSに更新する。フラッシュROMコントローラ204は、CPUs101の制御にしたがってフラッシュROM205に対するデータのリード/ライトを制御する。フラッシュROM205は、フラッシュROMコントローラ204の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム100を使用するユーザがI/F207を通して取得した画像データ、映像データや、本実施の形態であるスケジューリング方法を実行するプログラムが格納されていてもよい。フラッシュROM205は、たとえば、メモリカード、SDカードなどを採用することができる。ディスプレイ206は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。たとえば、ディスプレイ206は、TFT液晶ディスプレイなどを採用することができる。I/F207は、通信回線を通じてLANLocalAreaNetwork、WANWideAreaNetwork、インターネットなどのネットワーク209に接続され、ネットワーク209を介して他の装置に接続される。そして、I/F207は、ネットワーク209と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F207には、たとえばモデムやLANアダプタなどを採用することができる。キーボード208は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード208は、タッチパネル式の入力パッドやテンキーなどであってもよい。マルチコアプロセッサシステム100の機能次に、マルチコアプロセッサシステム100の機能について説明する。図3は、マルチコアプロセッサシステム100の機能を示すブロック図である。マルチコアプロセッサシステム100は、検出部303と、判定部304と、複写部305と、算出部306と、通知部307と、設定部308と、変換部309と、を含む。この制御部となる機能のうち、検出部303~通知部307は、記憶装置に記憶されたプログラムをCPU0が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図2に示したROM201、RAM202、フラッシュROM203、フラッシュROM205などである。または、I/F207を経由して他のCPUが実行することにより、その機能を実現してもよい。なお、CPU0は、ハイパーバイザ0、OS0を実行する。ハイパーバイザ0は、CPU0などのハードウェア上で直接動作するプログラムである。ハイパーバイザ0は、CPU0内のレジスタを直接参照したり、CPU0内のレジスタの情報を読み出したり、CPU0内のレジスタの情報を書き換えたりする特権命令を実行することができるプログラムである。OS0は、ハイパーバイザ0上で動作するソフトウェアである。OS0は、具体的には、スレッド、プロセスが利用するライブラリ群を提供する。また、OS0は、スレッド、プロセスをCPU0に割り当てるディスパッチャ、また、割り当てるスレッドを決定するスケジューラ310を有する。なお、図3にて示しているように、CPU1も、ハイパーバイザ1、OS1を実行する。さらに、図示していないが、CPU2~CPUNも、ハイパーバイザ、OSを実行する。検出部303~通知部307は、OS0の機能に含まれ、設定部308はハイパーバイザ1の機能に含まれ、変換部309は、アドレス変換装置1041の機能に含まれる。なお、検出部303~通知部307は、スケジューラ310の機能に含まれてもよい。また、検出部303~通知部307がスケジューラ310の機能に含まれない場合、スケジューラ310がスレッド割当を行うことを通知する。また、図3では、CPU2が、プロセス0の親スレッド301を実行し、CPU1が子スレッド302を実行すると想定する。CPU2は、親スレッド301の処理によって、親スレッドコンテキスト領域311にアクセスする。また、図3では、検出部303~通知部307が、CPU0の機能であるように図示されているが、CPU1~CPUNの機能であってもよい。また、設定部308、変換部309は、子スレッドが割り当てられたCPUに対応する機能である。したがって、たとえば、子スレッドがCPU0に割り当てられた場合に対応するため、ハイパーバイザ0とアドレス変換装置1040は、設定部308、変換部309と同等の機能を有していてもよい。同様に、CPU2~CPUNに対応するハイパーバイザ2~ハイパーバイザN、アドレス変換装置1042~アドレス変換装置104Nも、設定部308、変換部309と同等の機能を有していてもよい。検出部303は、複数のコアのうち第1コアに割り当てられた第1スレッドから生成される第2スレッドを第2コアに割り当てることを検出する機能を有する。たとえば、検出部303は、CPUs101のうちCPU2に割り当てられた第1スレッドとなる親スレッドから生成される子スレッド302をCPU1に割り当てることを検出する。なお、検出されたという情報は、CPU0のレジスタまたはキャッシュメモリ、RAM202などの記憶領域に記憶される。判定部304は、第1および第2スレッドが排他的に動作するか否かを判定する機能を有する。たとえば、判定部304は、子スレッド302がブロッキングスレッドである場合、第1および第2スレッドが排他的に動作すると判定し、子スレッド302がノンブロッキングスレッドである場合、第1および第2スレッドが排他的に動作しないと判定する。なお、判定結果は、CPU0のレジスタまたはキャッシュメモリ、RAM202などの記憶領域に記憶される。また、具体的な判定方法としては、OSが、実行オブジェクトに親スレッドが実行停止するコードが記載されているか否かで判定することができる。たとえば、OSが、POSIXPortableOperatingSystemInterfaceに準拠したOSである場合を想定する。ブロッキングスレッドが生成される場合、実行オブジェクトの親スレッドのコードには、スレッドの生成を行うpthread_create関数への命令が記載された後、スレッドの終了を待つpthread_join関数への命令が記載されている。このような記載がされている場合、判定部304は、第2スレッドがブロッキングスレッドであると判定する。複写部305は、判定部304によって第1および第2スレッドが排他的に動作すると判定された場合、第1スレッドがアクセスする複写元データを、複写元データが記憶される第1記憶領域とは異なる第2記憶領域へ複写する機能を有する。たとえば、複写部305は、子スレッド302がブロッキングスレッドである場合、親スレッドがアクセスする第1記憶領域となる親スレッドコンテキスト領域311内の複写元データを、第2記憶領域となる複写先の親スレッドコンテキスト領域312へ複写する。なお、複写を行ったという情報は、CPU0のレジスタまたはキャッシュメモリ、RAM202などの記憶領域に記憶される。算出部306は、複写部305によって複写された複写先データのアドレスとなる第2アドレスと所定値とに基づいて、第2アドレスへのオフセット値を算出する機能を有する。なお、所定値とは、スレッドのアクセスするメモリ範囲を示すマスク値である。たとえば、スレッドがアクセスするメモリ範囲が0x1000~0x10ff、または0x3100~0x31ffのように、0x0100[バイト]である場合、マスク値は0x00ffとなる。メモリ範囲の大きさは、OSが有するメモリ管理機能によって決定される。また、算出部306は、複写先データのアドレスとなる第2アドレスと、所定値となるマスク値に対して反転した値と、の論理積を算出して、第2アドレスのオフセット値を算出してもよい。たとえば、算出部306は、複写先データのアドレスが0x2000で、マスク値が0x00ffである場合、複写先データへのアドレスのオフセット値を、0x2000NOT0x00ff=0x2000として算出する。なお、NOTは、引数内のビットを反転する機能を有する関数とする。また、算出部306は、複写元データのアドレスとなる第1アドレスと所定値とに基づいて、複写元データのアドレスへのオフセット値を算出してもよい。また、算出部306は、複写元データのアドレスと、マスク値に対して反転した値と、の論理積を算出して、複写元データへのアドレスのオフセット値を算出してもよい。たとえば、算出部306は、複写元データのアドレスが0x3000で、マスク値が0x00ffである場合、複写元データへのアドレスのオフセット値を、0x3000NOT0x00ff=0x3000として算出する。なお、算出結果は、CPU0のレジスタまたはキャッシュメモリ、RAM202などの記憶領域に記憶される。通知部307は、第1および第2スレッドが排他的に動作すると判定された場合、複写先データのアドレスへのオフセット値を通知する機能を有する。また、通知部307は、さらに第2スレッドの情報と所定値と複写元データのアドレスへのオフセット値とを第2コアに通知してもよい。たとえば、通知部307は、子スレッドがブロッキングスレッドか、ノンブロッキングスレッドかのうちいずれかという情報と、マスク値と、複写先データのアドレスへのオフセット値と、複写元データのアドレスへのオフセット値と、をCPU1に通知する。また、通知部307は、第1および第2スレッドが排他的に動作しないと判定された場合、第2スレッドの情報を第2コアに通知してもよい。設定部308は、第2スレッドが実行される場合、通知された情報を、第2スレッドを実行するコアに対応するアドレス変換装置104とスヌープ機構210に設定する機能を有する。たとえば、設定部308は、第2スレッドがブロッキングスレッドである場合、アドレス変換装置1041に対しアドレス変換を行う設定にする。また、設定部308は、変換を行う情報として、所定値と複写先データのアドレスへのオフセット値と複写元データのアドレスへのオフセット値とをアドレス変換装置1041に設定する。あわせて、設定部308は、コヒーレンシオフの設定をスヌープ機構2101に設定する。また、設定部308は、第2スレッドがノンブロッキングスレッドである場合、アドレス変換装置1041に対しアドレス変換を行わない設定にし、コヒーレンシオンの設定をスヌープ機構2101に設定する。変換部309は、第2スレッドを割り当てることが検出された後、第2コアによる複写元データへのアクセスに対して、複写元データを示す第1アドレスを複写先データへのオフセット値と所定値とに応じて複写先データを示す第3アドレスに変換する機能を有する。たとえば、複写元データとなるシングルコア時の子スレッドコンテキスト領域313のアドレスを0x3010とし、複写先データとなる子スレッドコンテキスト領域314のアドレスを0x2010と想定する。このとき、変換部309は、複写元データとなるシングルコア時の子スレッドコンテキスト領域313へのアクセスに対して、アクセス先となるアドレス0x3010を0x2010に変換する。また、変換部309は、第3アドレスから取得されたアクセスに対するレスポンスに対して、第3アドレスを複写元データへのオフセット値と所定値とに応じて複写元データを示す第4アドレスに変換してもよい。たとえば、第3アドレスを0x2010とし、複写元データとなるシングルコア時の子スレッドコンテキスト領域313のアドレスを0x3010と想定する。このとき、変換部309は、レスポンス元のアドレス0x2010を0x3010に変換する。なお、具体的な変換方法は、図7に後述する。スケジューラ310は、マルチコアプロセッサシステム100内のスレッドの割当を制御する機能を有する。たとえば、スケジューラ310は、マルチコアプロセッサシステム100で実行中のスレッドのうち、親スレッド301をCPU2に割り当て、子スレッド302をCPU1に割り当てる。図4は、ブロッキングスレッドを別CPUで実行する場合のマルチコアプロセッサシステム100の状態を示す説明図である。図4で示すマルチコアプロセッサシステム100は、CPUs101内にCPU0~CPU2を含んでいる。CPU0は、プロセス0の親スレッドを実行し、CPU1はプロセス0のブロッキング子スレッド1を実行し、CPU2はプロセス0のブロッキング子スレッド2を実行する。ブロッキング子スレッド1とブロッキング子スレッド2の実行開始時に、CPU0は、CPU0管理領域内に存在する親スレッドコンテキスト領域401を、CPU1管理領域、CPU2管理領域に複写する。複写後、CPU1は、複写先の親スレッドコンテキスト領域402に、子スレッド1コンテキスト領域403を生成する。同様に、CPU2は、複写先の親スレッドコンテキスト領域404に、子スレッド2コンテキスト領域405を生成する。また、ブロッキング子スレッド1とブロッキング子スレッド2が実行されるタイミングにあわせて、マルチコアプロセッサシステム100は、スヌープ機構2101とスヌープ機構2102を、コヒーレンシオフに設定する。スヌープ機構210の設定と同時に、マルチコアプロセッサシステム100は、アドレス変換装置1041とアドレス変換装置1042に対して、アドレス変換を行うように設定する。なお、コヒーレンシオフとなったスヌープ機構2101とスヌープ機構2102は、キャッシュメモリの整合性を取ることを停止する。具体的に、スヌープ機構2101とスヌープ機構2102は、他のスヌープ機構210にキャッシュメモリの更新内容を通知しない。具体的には、アドレス変換装置1041は、CPU1によるメモリ102へのアクセスのアドレスを、シングルコア時の子スレッド1コンテキスト領域406のアドレスから、子スレッド1コンテキスト領域403に変換する。たとえば、アドレス変換装置1041は、シングルコア時の子スレッド1コンテキスト領域406の先頭アドレスである0x1010を、子スレッド1コンテキスト領域403の先頭アドレス0x2010に変換する。同様に、アドレス変換装置1042は、CPU2によるメモリ102へのアクセスのアドレスを、シングルコア時の子スレッド2コンテキスト領域407のアドレスから、子スレッド2コンテキスト領域405に変換する。たとえば、アドレス変換装置1042は、シングルコア時の子スレッド2コンテキスト領域407の先頭アドレスである0x1020を、子スレッド2コンテキスト領域405の先頭アドレス0x3020に変換する。なお、ブロッキング子スレッド1は、子スレッド1コンテキスト領域403へのアクセスの他に、複写先の親スレッドコンテキスト領域402にもアクセスする場合がある。親スレッドコンテキスト領域には、たとえば、他の子スレッドの情報が格納されている。たとえば、ブロッキング子スレッド1が他の子スレッドの停止、再開といったような制御を行う場合、CPU1は、複写先の親スレッドコンテキスト領域402内に存在する他の子スレッドの状態情報を変更する。ブロッキング子スレッド1の終了後、CPU1は、複写先の親スレッドコンテキスト領域402の更新部分を複写元となる親スレッドコンテキスト領域401に反映する。同様に、ブロッキング子スレッド2の終了後、CPU2は、複写先の親スレッドコンテキスト領域404の更新部分を複写元となる親スレッドコンテキスト領域401に反映する。また、図4で示すマルチコアプロセッサシステム100において、ブロッキング子スレッドを実行するCPU1とCPU2は、別々の記憶領域にアクセスするようになるため、メモリアクセスの効率化が行われる。図5は、ノンブロッキングスレッドを別CPUで実行する場合のマルチコアプロセッサシステム100の状態を示す説明図である。図5で示すマルチコアプロセッサシステム100は、CPUs101内にCPU0~CPU2を含んでいる。CPU0は、プロセス1の親スレッドを実行し、CPU1はプロセス1のノンブロッキング子スレッド1を実行し、CPU2はプロセス1のノンブロッキング子スレッド2を実行する。ノンブロッキングスレッドが生成される場合、CPU1、CPU2は、親スレッドコンテキスト領域501内に、子スレッド1コンテキスト領域502、子スレッド2コンテキスト領域503を生成する。また、ノンブロッキング子スレッド1とノンブロッキング子スレッド2が実行されるタイミングにあわせて、マルチコアプロセッサシステム100は、スヌープ機構2101とスヌープ機構2102を、コヒーレンシオンに設定する。図6は、アドレス変換装置104の機能を示す説明図である。図6では、アドレス変換装置1041を例にして説明を行うが、アドレス変換装置1040、アドレス変換装置1042~アドレス変換装置104Nも、アドレス変換装置1041と同様の機能となる。アドレス変換装置1041は、記憶部601、判定部602、変換部309を含む。記憶部601は、所定値と複写先データのアドレスへのオフセット値と複写元データのアドレスへのオフセット値を記憶する機能を有する。また、記憶部601は、所定値と複写先データのアドレスへのオフセット値と複写元データのアドレスへのオフセット値の組み合わせを複数記憶し、アドレス変換を行うかという情報と、複数の組み合わせのうち、適用する組み合わせを指定する情報を記憶してもよい。具体的に、記憶部601は、制御レジスタ603と設定レジスタ6041~設定レジスタ604Mを含む。Mは1以上の整数である。なお、具体的なMの値としては、マルチコアプロセッサシステム100が同時実行可能なアプリの数の最大値でよい。本実施の形態にかかるマルチコアプロセッサシステム100は、携帯電話等を想定しており、パーソナルコンピュータのように多数のアプリを同時実行することを想定していない。たとえば、Mは8、または16といった値となる。制御レジスタは、変換ビット、設定レジスタ管理番号という2つのフィールドを含む。変換ビットフィールドには、アドレス変換を行うか否かを示すビットが格納される。設定レジスタ管理番号フィールドには、変換を行う場合、設定レジスタ6041~設定レジスタ604Mのうち、どの設定レジスタを適用するかが格納される。続けて、設定レジスタ604の各フィールドについて説明を行う。設定レジスタ604は、有効ビット、マスク値、オフセット値1、オフセット値2という4つのフィールドを含む。有効ビットフィールドには、該当の設定レジスタ604が有効か否かを示すビットが格納される。マスク値フィールドには、アドレス変換装置1041に入力されたアドレスのうち、スレッドの情報を抽出するために使用するマスクの値が格納される。オフセット値1フィールドには、複写先データのアドレスへのオフセット値となる、複写先に生成された子スレッドコンテキスト領域へのオフセットの値が格納される。オフセット値2フィールドには、複写元データのアドレスへのオフセット値となる、CPUが想定している子スレッドコンテキスト領域へのオフセットの値が格納される。なお、制御レジスタ603、設定レジスタ604の具体的な設定例は、図7にて後述する。判定部602は、記憶部601に記憶された情報に応じてアドレス変換を行うか否かを判定する機能を有する。具体的には、判定部602は、変換ビットフィールドが有効であれば、アドレス変換を行い、変換ビットフィールドが無効であればアドレス変換を行わず、アドレススルーする。なお、変換部309は、判定部602によりアドレス変換を行うと判定された場合、アドレス変換を行う機能を有する。図7は、ブロッキングスレッドを別CPUで実行する場合のアドレス変換装置104の設定例を示す説明図である。図7に示すマルチコアプロセッサシステム100は、CPU0がプロセス0を実行し、CPU2がプロセス1を実行している状態である。なお、図7で示すマルチコアプロセッサシステム100は、スヌープ機構210の表示を省略している。さらに、CPU0は、プロセス0の親スレッド0から生成要求があったブロッキング子スレッド0をCPU1に割り当てている。また、割当とあわせて、CPU0は、親スレッド0コンテキスト領域701をCPU1管理領域に複写する。CPU1は、複写先の親スレッド0コンテキスト領域702内に、子スレッド0コンテキスト領域703を生成する。同様に、CPU2は、プロセス1の親スレッド1から生成要求があったブロッキング子スレッド1をCPU1に割り当てている。また、割当とあわせて、CPU2は、親スレッド1コンテキスト領域704をCPU1管理領域に複写する。CPU1は、複写先の親スレッド1コンテキスト領域705内に、子スレッド1コンテキスト領域706を生成する。このような状態で、アドレス変換装置1041は、ブロッキング子スレッド0がアクセスしようとするシングルコア時の子スレッド0コンテキスト領域707を、実領域である子スレッド0コンテキスト領域703に変換する。アドレス変換装置104は、下記1式によって入力された変換前のアドレスを変換後のアドレスに変換する。変換後のアドレス=変換前のアドレスマスク値オフセット値1...1たとえば、図7に示すようにブロッキング子スレッド0によるアクセスが通知される場合を想定する。ハイパーバイザ1は、CPU1にブロッキングキング子スレッド0が実行されることを検出して、制御レジスタ603の変換ビットに変換を示す1、設定レジスタ管理番号に1を設定する。設定レジスタ6041は、有効ビットに有効を示す1、マスク値に0x00ff、オフセット値1に0x2000、オフセット値2に0x1000を格納している。したがって、アドレス変換装置1041は、変換前のアドレス=0x1010を1式にしたがって、以下のように変換する。変換後のアドレス=0x10100x00ff0x2000⇔変換後のアドレス=0x00100x2000⇔変換後のアドレス=0x2010このように、アドレス変換装置1041の変換により、ブロッキング子スレッド0によるアクセス先が、シングルコア時の子スレッド0コンテキスト領域707から、子スレッド0コンテキスト領域703に変換される。また、子スレッド0コンテキスト領域703から取得されたアクセスに対するレスポンスに対して、アドレス変換装置1041は、実領域である子スレッド0コンテキスト領域703をシングルコア時の子スレッド0コンテキスト領域707に変換する。アドレス変換装置1041は、下記2式によって入力された変換前のアドレスを変換後のアドレスに変換する。変換後のアドレス=変換前のアドレスマスク値オフセット値2...2したがって、アドレス変換装置1041は、変換前のアドレス=0x2010を2式にしたがって、以下のように変換する。変換後のアドレス=0x20100x00ff0x1000⇔変換後のアドレス=0x00100x1000⇔変換後のアドレス=0x10102式によるアドレス変換装置1041の変換により、アクセスに対するレスポンス元のアドレスは、子スレッド0コンテキスト領域703から、シングルコア時の子スレッド0コンテキスト領域707に変換される。変換により、1式の変換前のアドレスと2式の変換後のアドレスが一致するため、CPU1は、ブロッキング子スレッド0によるアクセスに対するレスポンスが返却されたことを検出できる。続けて、ブロッキング子スレッド1によるアクセスが通知される場合を想定する。このとき、アドレス変換装置1041は、ブロッキング子スレッド1がアクセスしようとするシングルコア時の子スレッド1コンテキスト領域708を、実領域である子スレッド1コンテキスト領域706に変換する。ハイパーバイザ1は、CPU1にブロッキングキング子スレッド1が割り当てられたことを検出して、制御レジスタ603の変換ビットに変換を示す1、設定レジスタ管理番号に2を設定する。設定レジスタ6042は、有効ビットに有効を示す1、マスク値に0x00ff、オフセット値1に0x2100、オフセット値2に0x3000を格納している。したがって、アドレス変換装置1041は、変換前のアドレス=0x3010を1式にしたがって、以下のように変換する。変換後のアドレス=0x30100x00ff0x2100⇔変換後のアドレス=0x00100x2100⇔変換後のアドレス=0x2110このように、アドレス変換装置1041の変換により、ブロッキング子スレッド1によるアクセス先が、シングルコア時の子スレッド1コンテキスト領域708から、子スレッド1コンテキスト領域706に変換される。また、子スレッド1コンテキスト領域706から取得されたアクセスに対するレスポンスに対して、アドレス変換装置1041は、実領域である子スレッド1コンテキスト領域706をシングルコア時の子スレッド1コンテキスト領域708に変換する。したがって、アドレス変換装置1041は、変換前のアドレス=0x2110を2式にしたがって、以下のように変換する。変換後のアドレス=0x21100x00ff0x3000⇔変換後のアドレス=0x00100x3000⇔変換後のアドレス=0x30102式によるアドレス変換装置1041の変換により、アクセスに対するレスポンス元のアドレスは、子スレッド1コンテキスト領域706から、シングルコア時の子スレッド1コンテキスト領域708に変換される。変換により、1式の変換前のアドレスと2式の変換後のアドレスが一致するため、CPU1は、ブロッキング子スレッド1によるアクセスに対するレスポンスが返却されたことを検出できる。図8は、シングルコア実行時におけるブロッキングスレッドとノンブロッキングスレッドの実行タイミングを示す説明図である。符号801に示す説明図では、ブロッキングスレッドの実行タイミングを示し、符号802に示す説明図では、ノンブロッキングスレッドの実行タイミングを示す。なお、符号801に示す説明図、符号802に示す説明図にて、ディスパッチ間隔となる時刻tx~時刻tx1の間隔は、1プロセスの割当時間となるτと設定する。また、ディスパッチを行う時刻が、ハイパーバイザ0と通信可能な時刻である。なお、親スレッド、プロセス1、プロセス2は、CPU0のディスパッチテーブルに格納されている。ディスパッチテーブルとは、実行可能なスレッド、プロセスを格納するテーブルである。OS0は、ディスパッチテーブルに格納されているスレッドまたはプロセスのいずれか一つをCPU0にディスパッチする。符号801に示す説明図では、CPU0が、ブロッキング子スレッドの生成要求を行う親スレッドを含むプロセス0と、プロセス1、プロセス2を実行している。時刻t0にて、CPU0が、OS0内のディスパッチャにより、プロセス0内の親スレッドをディスパッチし、親スレッドを実行する。τを経過した時刻t1にて、CPU0は、プロセス1をディスパッチする。プロセス1を実行後、さらにτを経過した時刻t2にて、CPU0は、プロセス2をディスパッチする。プロセス2を実行後、さらにτを経過した時刻t3にて、CPU0は、プロセス0の親スレッドをディスパッチする。時刻t3からτの経過前となる時刻t3’にて、親スレッドがブロッキング子スレッドの生成要求を行うと、CPU0は、親スレッドからブロッキング子スレッドにディスパッチする。なお、ブロッキング子スレッドは、親スレッドをブロッキングするため、ブロッキング子スレッドが終了するまでは、親スレッドが実行されない。続けて、時刻t3からτ経過した時刻t4にて、CPU0は、プロセス1をディスパッチする。時刻t4以降、時刻t4~時刻t5、時刻t7~時刻t8、時刻t10~時刻t11にて、CPU0はプロセス1を実行する。同様に、時刻t5~時刻t6、時刻t8~時刻t9、時刻t11~時刻t12にて、CPU0はプロセス2を実行する。また、時刻t6~時刻t7、時刻t9~時刻t10にて、CPU0はブロッキング子スレッドを実行する。時刻t12からτの経過前となる時刻t12’に、ブロッキング子スレッドが終了すると、CPU0は、親スレッドをディスパッチし、時刻t13まで実行する。このように、親スレッドとブロッキングスレッドをシングルコアで実行する場合、親スレッドが実行していても、子スレッドが実行していても、他のプロセスのCPUの割当時間は変更しない。説明図となる符号801の例では、親スレッドが実行している時刻t0~時刻t3の期間では、プロセス1、プロセス2のCPU割当時間は、全体の1/3となっている。続けて、ブロッキング子スレッドが実行している時刻t4~時刻t12の期間でも、プロセス1、プロセス2のCPU割当時間は、全体の1/3となっている。また、ブロッキングスレッドによって停止していた親スレッドの復帰時間としては、時刻t3’から時刻t12’となる。時刻t3~時刻t3’、時刻t12~時刻t12’が合わせてτと想定すると、親スレッドの復帰時間は、9τとなる。続けて、符号802に示す説明図では、CPU0が、ノンブロッキング子スレッドの生成要求を行う親スレッドを含むプロセス0と、プロセス1、プロセス2を実行している。時刻t0~時刻t3までは、プロセス0~プロセス2は、符号801に示す説明図と等しいタイミングで動作するため、説明を省略する。時刻t3からτの経過前となる時刻t3’にて、親スレッドがノンブロッキング子スレッドの生成要求を行うと、CPU0は、親スレッドからノンブロッキング子スレッドにディスパッチする。なお、ノンブロッキング子スレッドは、親スレッドをブロッキングせず、ノンブロッキング子スレッドが実行中も、親スレッドが実行され続ける。続けて、時刻t3からτ経過した時刻t4にて、CPU0は、プロセス1をディスパッチする。時刻t4以降、時刻t4~時刻t5、時刻t7~時刻t8、時刻t10~時刻t11にて、CPU0はプロセス1を実行する。同様に、時刻t5~時刻t6、時刻t8~時刻t9、時刻t11~時刻t12にて、CPU0はプロセス2を実行する。また、時刻t6からτの経過前となる時刻t6’まで、CPU0は親スレッドを実行し、時刻t6’から時刻t7まで、CPU0はノンブロッキング子スレッドを実行する。同様に、時刻t9からτの経過前となる時刻t9’、時刻t12からτの経過前となる時刻t12’にて、CPU0は親スレッドを実行する。さらに、時刻t9’~時刻t10、時刻t12’~時刻t13にて、CPU0はノンブロッキング子スレッドを実行する。このように、親スレッドとノンブロッキングスレッドをシングルコアで実行する場合も、ブロッキングスレッドと同様に、親スレッドが実行していても、子スレッドが実行していても、他のプロセスのCPUの割当時間は変更しない。また、親スレッドとノンブロッキング子スレッドのCPU割当時間は、合計して1プロセス分であるτに等しくなる。次に、図9、図10にて、ブロッキング子スレッド、または、ノンブロッキング子スレッドをCPU1に割り当てる場合の実行タイミングを示す。なお、図9、図10にて、CPU0のディスパッチ間隔となる時刻tx~時刻tx1の間隔と、CPU1のディスパッチ間隔となる時刻t’x~時刻t’x1の間隔は、1プロセスの割当時間となるτであると想定する。図9は、ブロッキング子スレッドをCPU1に割り当てる場合の実行タイミングを示す説明図である。図9に示す説明図では、CPU0がブロッキング子スレッドの生成要求を行う親スレッドを含むプロセス0と、プロセス1、プロセス2を実行し、CPU1が、プロセス0内のブロッキング子スレッドと、プロセス3を実行する。時刻t0にて、CPU0のディスパッチテーブルには、プロセス0の親スレッド、プロセス1、プロセス2が格納されており、CPU1のディスパッチテーブルには、プロセス3が格納されている。時刻t0~時刻t1にて、CPU0は、プロセス0の親スレッドを実行し、時刻t1~時刻t2にて、プロセス1を実行し、時刻t2~時刻t3にて、プロセス2を実行する。続けて、時刻t3にて、CPU0は、親スレッドをディスパッチする。また、時刻t’0~時刻t’2にて、CPU1は、プロセス3を実行する。時刻t3からτの経過前となる時刻t3’にて、親スレッドがブロッキング子スレッドの生成要求を行うと、CPU0は、生成されるブロッキング子スレッドをCPU1にディスパッチする。具体的には、時刻t’2にて、CPU1のディスパッチテーブルに、ブロッキング子スレッドが格納される。続けて、CPU1は、ディスパッチテーブルからブロッキング子スレッドを取得して、CPU1にディスパッチする。なお、ブロッキング子スレッドは、親スレッドをブロッキングするため、ブロッキング子スレッドが終了するまでは、親スレッドが実行されない。したがって、CPU0は、親スレッドをCPU0のディスパッチテーブルから退避する。これにより、親スレッドはディスパッチされなくなったため、実行されなくなる。続けて、時刻t3からτ経過した時刻t4にて、CPU0は、プロセス1をディスパッチする。時刻t4以降、時刻t4~時刻t5、時刻t6~時刻t7、時刻t8~時刻t9にて、CPU0はプロセス1を実行する。同様に、時刻t5~時刻t6、時刻t7~時刻t8にて、CPU0はプロセス2を実行する。また、時刻t’2~時刻t’3、時刻t’4~時刻t’5にて、CPU1は、ブロッキング子スレッドを実行し、時刻t’3~時刻t’4、時刻t’5~時刻t’6にて、プロセス3を実行する。時刻t’6からτの経過前となる時刻t’6’にて、ブロッキング子スレッドが終了すると、CPU1は、親スレッドをCPU0のディスパッチテーブルに復帰するようCPU0に通知する。通知を受けたCPU0は、時刻t9にて親スレッドをディスパッチする。時刻t9以降、時刻t9~時刻t10、時刻t12~時刻t13にて、CPU0は親スレッドを実行する。時刻t10~時刻t11にて、CPU0はプロセス2を実行する。時刻t11~時刻t12にて、CPU0はプロセス1を実行する。また、時刻t’7~時刻t’10にて、CPU1はプロセス3を実行する。このように、親スレッドとブロッキングスレッドをマルチコアで実行する場合、他のCPUの割当時間がシングルコア時より増加することになる。図9の例では、親スレッドが実行している時刻t0~時刻t3の期間では、プロセス1、プロセス2のCPU割当時間は、全体の1/3となっている。続けて、ブロッキング子スレッドがCPU1で実行している時刻t4~時刻t9の期間では、プロセス1、プロセス2のCPU割当時間は1/2となり、CPU割当時間が増加している。また、ブロッキングスレッドによって停止していた親スレッドの復帰時間としては、時刻t3’から時刻t9となる。時刻t3~時刻t3’が0.5τと想定すると、親スレッドの復帰時間が5.5τとなり、親スレッドとブロッキングスレッドをマルチコアで実行する場合は、シングルコアで実行する場合より、復帰時間を短縮することができる。図10は、ノンブロッキング子スレッドをCPU1に割り当てる場合の実行タイミングを示す説明図である。図10に示す説明図では、CPU0がノンブロッキング子スレッドの生成要求を行う親スレッドを含むプロセス0と、プロセス1、プロセス2を実行し、CPU1が、プロセス0内のノンブロッキング子スレッドと、プロセス3を実行する。時刻t0にて、CPU0のディスパッチテーブルには、プロセス0の親スレッド、プロセス1、プロセス2が格納されており、CPU1のディスパッチテーブルには、プロセス3が格納されている。時刻t0~時刻t1にて、CPU0は、プロセス0の親スレッドを実行し、時刻t1~時刻t2にて、プロセス1を実行し、時刻t2~時刻t3にて、プロセス1を実行する。続けて、時刻t3にて、CPU0は、親スレッドをディスパッチする。また、時刻t’0~時刻t’2にて、CPU1は、プロセス3を実行する。また、時刻t’2~時刻t’3にて、CPU1は、プロセス3を実行する。時刻t3からτの経過前にて、親スレッドがノンブロッキング子スレッドの生成要求を行うと、CPU0は、ノンブロッキング子スレッドをCPU1にディスパッチする。具体的には、時刻t’3にて、CPU1のディスパッチテーブルに、ノンブロッキング子スレッドが格納される。続けて、CPU1は、ディスパッチテーブルからノンブロッキング子スレッドを取得して、CPU1にディスパッチする。なお、ノンブロッキング子スレッドは、親スレッドをブロッキングせず、ノンブロッキング子スレッドが実行中も、親スレッドが実行され続ける。したがって、CPU0は、親スレッドを時刻t4まで実行する。時刻t4以降、時刻t4~時刻t5、時刻t7~時刻t8、時刻t10~時刻t11にて、CPU0はプロセス1を実行する。同様に、時刻t5~時刻t6、時刻t8~時刻t9、時刻t11~時刻t12にて、CPU0はプロセス2を実行する。また、時刻t’3~時刻t’4、時刻t’5~時刻t’6にて、CPU1は、ノンブロッキング子スレッドを実行し、時刻t’4~時刻t’5、時刻t’6~時刻t’7にて、プロセス3を実行する。時刻t’7からτの経過前となる時刻t’7’にて、ノンブロッキング子スレッドが終了すると、CPU0は、時刻t’8にて、プロセス3をディスパッチする。続けて、時刻t’8~時刻t’10にて、CPU1は、プロセス3を実行する。このように、親スレッドとノンブロッキングスレッドをマルチコアで実行する場合、親スレッドとノンブロッキング子スレッドのCPU割当時間は、それぞれ1プロセス分であるτとなり、シングルコア時の割当時間より増加する。これにより、ノンブロッキングスレッドが、シングルコア時に比べてより早く終了することになる。図3、図6に示した機能を用いて、マルチコアプロセッサシステム100は、シングルコア用の実行オブジェクトを、マルチコアで実行する。以下、図11~図14にて、他CPUに割り当てる割当対象スレッドの実行開始時の設定処理と、実行時の処理、終了時の処理を説明する。図11~図14では、CPU0で実行しているOS0が割当対象スレッドの生成を検出しているが、他のCPUとなるCPU1~CPUNで実行しているOSが検出してもよい。図11は、他CPUに割り当てる子スレッドの実行開始時における設定処理を示すフローチャートその1である。OS0は、子スレッドの生成イベントを検出するステップS1101。検出後、OS0は、CPUs101のうち、低負荷CPUを検索するステップS1102。検索した結果CPUxを低負荷CPUとして発見した場合、OS0は、発見されたCPUxの識別情報を設定情報として記憶するステップS1103。なお、設定情報の記憶先は、メモリ102内である。記憶後、OS0は、生成される子スレッドがブロッキングスレッドかを判断するステップS1104。ノンブロッキングスレッドである場合ステップS1104:No、OS0は、コヒーレンシオン設定をスヌープ機構210x設定情報として、設定情報に追加するステップS1105。ブロッキングスレッドである場合ステップS1104:Yes、OS0は、CPUxが管理するCPUx管理領域に、生成される子スレッドの親スレッドのコンテキスト領域を複写するステップS1106。複写後、OS0は、親スレッドをディスパッチテーブルから退避するステップS1107。退避後、OS0は、コヒーレンシオフ設定をスヌープ機構210x設定情報として、設定情報に追加するステップS1108。ステップS1105、または、ステップS1108にてスヌープ機構210の設定情報を追加した後、OS0は、子スレッド生成要求をOSxに通知するステップS1109。通知後、OS0は、図12に示すステップS1201の処理に移行する。また、通知を受けたOSxは、子スレッドのコンテキストを生成するステップS1110。子スレッドのコンテキスト生成を行うことで、子スレッドが生成されたことになる。なお、子スレッドのコンテキストの生成先は、生成される子スレッドがブロッキングスレッドであれば、CPUx管理領域内に複写された親スレッドのコンテキスト領域内となる。生成される子スレッドがノンブロッキングスレッドであれば、CPU0管理領域内に存在する親スレッドのコンテキスト領域内となる。生成後、CPUxは、獲得されたコンテキスト領域のアドレスをOS0に通知するステップS1111。通知後、OSxは、図12に示すステップS1211のOS0からの通知まで待機する。図12は、他CPUに割り当てる子スレッドの実行開始時における設定処理を示すフローチャートその2である。ステップS1111の処理にてOSxから通知を受けた後、OS0は、通知されたアドレスを取得するステップS1201。取得後、OS0は、生成された子スレッドがブロッキングスレッドか否かを判断するステップS1202。ブロッキングスレッドである場合ステップS1202:Yes、OS0は、取得されたアドレスとマスク値からオフセット値1を算出するステップS1203。なお、具体的なオフセット値1の算出方法として、たとえば、OS0が、取得されたアドレスと、所定値となるスレッドのアクセスするメモリ範囲のマスク値に対して反転した値と、の論理積を算出し、算出結果をオフセット値1とする。具体的に、取得されたアドレスが0x2010であり、マスク値が0x00ffである場合、OS0は、オフセット値1として、0x2010NOT0x00ff=0x2000を得る。続けて、OS0は、親スレッドのコンテキスト領域のアドレスとマスク値からオフセット値2を算出するステップS1204。なお、具体的なオフセット値2の算出方法として、たとえば、オフセット値1の算出方法と同様に、OS0が、親スレッドのコンテキスト領域のアドレスと、所定値となるマスク値の反転した値との論理積を算出し、算出結果をオフセット値2とする。具体的に、親スレッドのコンテキスト領域のアドレスが0x1000であり、マスク値が0x00ffである場合、OS0は、オフセット値2として、0x1000NOT0x00ff=0x1000を得る。算出後、OS0は、生成された子スレッドの識別情報とマスク値とオフセット値1とオフセット値2を設定情報に追加するステップS1205。追加後、または、子スレッドがノンブロッキングスレッドである場合ステップS1202:No、OS0は、ハイパーバイザxに設定情報を通知するステップS1206。なお、OS0から直接ハイパーバイザxに通知できない場合は、OS0が設定情報を一旦ハイパーバイザ0に通知し、ハイパーバイザ0からハイパーバイザxに対してハイパーバイザ間通信を行って設定情報を通知してもよい。または、OS0がOSxに設定情報を通知し、さらにOSxがハイパーバイザxに設定情報を通知してもよい。また、設定情報は、メモリ102内に記憶されているため、OS0は、ハイパーバイザxに設定情報へのポインタを通知してもよい。通知を受けたハイパーバイザxは、アドレス変換装置104xの有効ビットが無効になっている設定レジスタ604yを検索するステップS1207。なお、検索方法として、ハイパーバイザxは、設定レジスタ6041~設定レジスタ604Mのうち、番号の小さい設定レジスタ604から順に検索してよい。発見後、ハイパーバイザxは、設定情報に管理番号yを追加するステップS1208。追加後、ハイパーバイザxは、設定レジスタ604yの有効ビットフィールドを有効に設定するステップS1209。設定後、ハイパーバイザxは、設定情報内のマスク値とオフセット値1とオフセット値2を、設定レジスタ604yのマスク値フィールドとオフセット値1フィールドとオフセット値2フィールドに設定するステップS1210。設定終了後、ハイパーバイザxは、子スレッドの実行開始時における設定処理を終了する。ハイパーバイザxに通知を行ったOS0は、生成された子スレッドの実行開始要求をOSxに通知しステップS1211、OS0は、子スレッドの実行開始時における設定処理を終了する。通知を受けたOSxは、生成された子スレッドを実行開始しステップS1212、子スレッドの実行開始時における設定処理を終了する。なお、ステップS1207の処理にて、有効ビットが無効になっている設定レジスタ604が存在しない場合、ハイパーバイザxは、OS0に失敗したという通知を行ってもよい。失敗したという通知を受けたOS0は、たとえば、OSxに生成させた子スレッドのコンテキストを破棄させた後、CPUxとは異なる低負荷CPUを再度検索してもよい。図13は、子スレッドの実行時の処理および終了時の処理を示すフローチャートその1である。なお、設定情報については、図11、図12に示したフローチャートにより、CPU識別情報、スレッド識別情報、スヌープ機構210x設定情報が含まれる。また、スレッド識別情報として設定された子スレッドがブロッキングスレッドである場合、設定情報には、さらに、管理番号y、マスク値、オフセット値1、オフセット値2が含まれる。図13では、子スレッドの実行時の処理を示す。OSxは、子スレッドがディスパッチされることを検出するステップS1301。検出後、OSxは、ハイパーバイザxに、ディスパッチされる子スレッドの識別情報を通知するステップS1302。通知を受けたハイパーバイザxは、子スレッドがブロッキングスレッドか否かを判断するステップS1303。ブロッキングスレッドである場合ステップS1303:Yes、ハイパーバイザxは、スレッド識別情報に対応する管理番号yと変換ビットをアドレス変換装置104xの制御レジスタ603に設定するステップS1304。設定後、または、ブロッキングスレッドでない場合ステップS1303:No、ハイパーバイザxは、スレッド識別情報に対応するスヌープ機構210x設定情報に基づいて、スヌープ機構210xを設定するステップS1305。ハイパーバイザxによる設定の完了後、OSxは、ハイパーバイザxと同期を取って、子スレッドを実行するステップS1306。具体的には、OSxは、ハイパーバイザxによる設定が完了するまで待機し、設定の完了後に子スレッドを実行する。子スレッド実行後、OSxは、子スレッドが終了したかを判断するステップS1307。子スレッドが終了していない場合ステップS1307:No、OSxは、ステップS1301の処理に移行する。子スレッドが終了した場合ステップS1307:Yes、OSxは、図14に示すステップS1401の処理に移行する。また、ハイパーバイザxは、ステップS1302によるOSxによるスレッドの識別情報の通知を受けるたびに、ステップS1303~ステップS1305の処理を行う。図14は、子スレッドの実行時の処理および終了時の処理を示すフローチャートその2である。図14では、子スレッドの終了時の処理を示す。子スレッドが終了した場合、OSxは、子スレッドがブロッキングスレッドか否かを判断するステップS1401。ブロッキングスレッドである場合ステップS1401:Yes、OSxは、複写先の親スレッドのコンテキスト領域の更新部分を、複写元の親スレッドのコンテキスト領域に反映するステップS1402。反映後、OSxは、親スレッドのディスパッチテーブル復帰要求をOS0に通知するステップS1403。通知を受けたOS0は、親スレッドをディスパッチテーブルに復帰しステップS1404、子スレッドの終了時の処理を終了する。OS0に通知後、または、子スレッドがノンブロッキングスレッドである場合ステップS1401:No、OSxは、ハイパーバイザxに管理番号の消去要求を通知するステップS1405。通知を受けたハイパーバイザxは、アドレス変換装置104xの設定レジスタ604yの有効ビットを無効に設定しステップS1406、子スレッドの終了時の処理を終了する。ハイパーバイザxに通知後、OSxは、設定情報を消去しステップS1407、子スレッドの終了時の処理を終了する。以上説明したように、スケジューリング方法、およびマルチコアプロセッサシステムによれば、親スレッドのコンテキスト領域を複写し、ブロッキング子スレッドを実行するCPUが複写先のコンテキスト領域をアクセスするようなオフセット値を変換する。これにより、マルチコアプロセッサシステムは、それぞれのCPUが異なるアドレスをアクセスするために、ブロッキング子スレッドを親スレッドのCPUとは他のCPUで実行できるため、シングルコア用のプロセスを負荷分散することができる。また、マルチコアプロセッサシステムは、シングルコア用の実行オブジェクトを変更せずに、マルチコアで並列処理が可能となり、ソフトウェアの検証工数を削減することができる。また、本実施の形態にかかるマルチコアプロセッサシステムは、ブロッキングスレッドが他CPUに移行可能となり、各CPUの負荷量を、従来例にかかるマルチコアプロセッサシステムより均衡状態に近づけることができる。たとえば、親スレッドが実行しており、負荷量の大きいブロッキング子スレッドが未実行の状態で、従来技術3にかかる技術による負荷分散が行われ、その後負荷量の大きいブロッキング子スレッドが実行された場合を想定する。このとき、従来例にかかるマルチコアプロセッサシステムでは、ブロッキング子スレッドを移行することができないため、親スレッドを実行するCPUに負荷が偏る結果となる。本実施の形態にかかるマルチコアプロセッサシステムでは、ブロッキング子スレッドを負荷量の低いCPUに移行可能であるため、負荷量をより均衡状態にすることができる。また、マルチコアプロセッサシステムは、複数のCPUのうち、負荷の低いCPUにブロッキング子スレッドを実行させてもよい。これにより、マルチコアプロセッサシステムは、全体の負荷を均等にすることができる。また、マルチコアプロセッサシステムは、ブロッキング子スレッドを負荷の低いCPUで実行させることで、ブロッキング子スレッドの割当時間が増加されるため、子スレッドの終了時間が短縮され、同時に親スレッドの復帰時間を短縮することができる。また、マルチコアプロセッサシステムは、ブロッキング子スレッドを他のCPUに割り当てる場合、親スレッドを、親スレッドを実行するCPUのディスパッチテーブルから退避してもよい。これにより、マルチコアプロセッサシステムは、親スレッドがCPUに割り当てられなくなり、他のプロセス、または他のスレッドのCPUの割当時間を増加することができる。また、マルチコアプロセッサシステムは、ノンブロッキングスレッドを他のCPUに実行する場合、キャッシュメモリのコヒーレンシ設定をオンにしてもよい。これにより、マルチコアプロセッサシステムは、同一の領域にアクセスを行うデータの整合性を保つことができる。また、マルチコアプロセッサシステムは、ブロッキングスレッドを他のCPUに実行する場合、キャッシュメモリのコヒーレンシ設定をオフにしてもよい。子スレッドがブロッキングスレッドである場合、他のCPUは、複写先の親スレッドコンテキスト領域にアクセスする。したがって、複数のCPU間で、同一のアドレスにアクセスが行われることがないため、キャッシュメモリのコヒーレンシを行わなくてよい。これにより、マルチコアプロセッサシステムは、メモリアクセスを行うたびに発生していたスヌープ機構の機能を停止できメモリアクセスの処理を高速化できる。また、マルチコアプロセッサシステムは、スヌープ機構を停止するために、消費電力を削減することができる。また、マルチコアプロセッサシステムは、ブロッキングスレッドが終了した場合、複写先の親スレッドコンテキスト領域の更新部分を複写元の親スレッドコンテキスト領域に反映し、親スレッドをディスパッチ周期に復帰させてもよい。これにより、マルチコアプロセッサシステムは、シングルコアにて実行した状態と等しい状態にすることができる。なお、本実施の形態で説明したスケジューリング方法は、予め用意されたプログラムをパーソナルコンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本スケジューリング方法を実行するプログラムは、ハードディスク、フレキシブルディスク、CD-ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本スケジューリング方法を実行するプログラムは、インターネット等のネットワークを介して配布してもよい。また、本実施の形態で説明したアドレス変換装置104は、スタンダードセルやストラクチャードASICApplicationSpecificIntegratedCircuitなどの特定用途向けIC以下、単にASICと称す。やFPGAなどのPLDProgrammableLogicDeviceによっても実現することができる。具体的には、たとえば、上述したアドレス変換装置104の機能記憶部601、判定部602、変換部309をHDL記述によって機能定義し、そのHDL記述を論理合成してASICやPLDに与えることにより、アドレス変換装置104を製造することができる。