(57)【特許請求の範囲】
【請求項１】
複数のスレッドがそれぞれ割り当てられる複数のコアと、
前記複数のスレッドの実行を切り替える所定の切り替え時間を記憶する記憶部と、
を有するマルチコアプロセッサシステムであって、前記複数のコアのうち第１のコアは、
前記複数のスレッドの処理を前記所定の切り替え時間に基づいて切り替え、前記複数のスレッドの実際の切り替え時間である実切り替え時間が前記所定の切り替え時間を超えた場合に、前記第１のコアを除く前記複数のコアのうちの第２のコアに通知し、
前記第１のコアから通知を受けた前記第２のコアは、前記所定の切り替え時間および前記実切り替え時間に基づき、前記記憶部に記憶された前記所定の切り替え時間を短くする
マルチコアプロセッサシステム。
【請求項２】
複数のスレッドがそれぞれ割り当てられる複数のコアを有するマルチコアプロセッサシステムの制御方法であって、
前記複数のコアのうち第１のコアに対し、前記複数のスレッドの処理を所定の切り替え時間に基づいて切り替えさせ、
前記複数のコアのうち第１のコアに対し、前記複数のスレッドの実際の切り替え時間である実切り替え時間が前記所定の切り替え時間を超えた場合に、前記第１のコアを除く前記複数のコアのうちの第２のコアに通知させ、
前記第２のコアに対し、前記所定の切り替え時間および前記実切り替え時間に基づき、前記所定の切り替え時間を短くさせる
マルチコアプロセッサシステムの制御方法。
【請求項３】
複数のスレッドがそれぞれ割り当てられる複数のコアを有するマルチコアプロセッサシステムの制御プログラムであって、
前記複数のコアのうち第１のコアに対し、前記複数のスレッドの処理を所定の切り替え時間に基づいて切り替えさせるステップと、
前記複数のコアのうち第１のコアに対し、前記複数のスレッドの実際の切り替え時間である実切り替え時間が前記所定の切り替え時間を超えた場合に、前記第１のコアを除く前記複数のコアのうちの第２のコアに通知させるステップと、
前記第２のコアに対し、前記所定の切り替え時間および前記実切り替え時間に基づき、前記所定の切り替え時間を短くさせるステップと
を有するマルチコアプロセッサシステムの制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スレッド切り替えを制御するマルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラムに関する。
【背景技術】
【０００２】
従来から、１つのＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）に対して、複数のプログラムを動作させるマルチプログラミング技術が存在する。具体的には、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）は、ＣＰＵの処理時間を分割する機能を有し、分割された時間にプロセスやスレッドを割り当てることにより、ＣＰＵが同時に複数のプロセスやスレッドを動作する。ここで、プロセスやスレッドはプログラムの実行単位である。ソフトウェアは、プロセスやスレッドの集まりにて構成されている。また一般的に、プロセス間ではメモリ空間が独立しており、スレッド間ではメモリ空間を共有する。
【０００３】
スレッドの切り替え時間の変更を使用する技術として、スレッド数が多いときに切り替え時間を短くするように変更することで、各スレッドの処理回数を増やし、ＣＰＵのリソースを各スレッドに配分するという技術が開示されている（たとえば、下記特許文献１を参照。）。
【０００４】
また、コンピュータシステムに複数のＣＰＵを搭載するマルチコアプロセッサシステムの技術も開示されている。これにより、前述のマルチプログラミング技術において、ＯＳは複数のプログラムを複数のＣＰＵに対して割り当てることができる。また、マルチコアプロセッサシステムの構成として、各ＣＰＵが専用のメモリを保持し、それ以外のデータが必要の場合には、共有メモリにアクセスを行うことを特徴とする、分散システムの構造を持ったマルチコアプロセッサシステムが開示されている。また、各ＣＰＵがキャッシュメモリのみを保持し、必要なデータは共有メモリに格納することを特徴とする、集中共用システムの構造を持ったマルチコアプロセッサシステムも開示されている。
【０００５】
マルチコアプロセッサシステムでのスレッドの切り替え技術として、タイムスライスで実行する特定のプロセスと高優先プロセスとの衝突後、再開した際に遅延分をタイムスライスに加算して特定のプロセスを再開するという技術が開示されている（たとえば、下記特許文献２を参照。）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平３−０１９０３６号公報
【特許文献２】特開平８−３１４７４０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上述した従来技術において、集中共用システムの構造を持つマルチコアプロセッサシステムは、アクセス競合によるコンテンション状態となると、リアルタイム処理の完了時間が決められた時間を超過するという問題があった。リアルタイム処理とは、設計上あらかじめ決められた時刻に処理を終了しなければならない処理、および割り込み動作における、割り込みイベント発生から割り込み処理本体の開始時間までの許容されるインターバル時間が定められた処理をさす。
【０００８】
特許文献１および２にかかる技術を適用しても、アクセス競合によるコンテンション状態の判断をしておらず、コンテンション状態ではリアルタイム処理の応答性能が破たんするという問題があった。
【０００９】
本発明は、上述した従来技術による問題点を解消するため、リアルタイム処理の応答性能を保証するマルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するため、開示のマルチコアプロセッサシステムは、複数のスレッドがそれぞれ割り当てられる複数のコアと、複数のスレッドの実行を切り替える所定の切り替え時間を記憶する記憶部と、を有し、複数のコアのうち第１のコアは、複数のスレッドの処理を所定の切り替え時間に基づいて切り替え、複数のスレッドの実際の切り替え時間である実切り替え時間が所定の切り替え時間を超えた場合に、第１のコアを除く複数のコアのうちの第２のコアに通知し、第１のコアから通知を受けた第２のコアは、所定の切り替え時間および実切り替え時間に基づき、記憶部に記憶された所定の切り替え時間を短くすることを要件とする。
【発明の効果】
【００１１】
本マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラムによれば、リアルタイム処理の応答性能を保証できるという効果を奏する。
【図面の簡単な説明】
【００１２】
【図１】本実施の形態にかかるマルチコアプロセッサシステム１００のハードウェア構成を示すブロック図である。
【図２】マルチコアプロセッサシステム１００の各ＣＰＵのハードウェア構成とソフトウェア構成を示すブロック図である。
【図３】マルチコアプロセッサシステム１００の機能的構成を示すブロック図である。
【図４】単一のＣＰＵで実行している場合のソフトウェアのディスパッチ状態を示す説明図である。
【図５】従来例におけるマルチコアプロセッサシステム１００にて、コンテンション状態によるリアルタイム応答の遅延を示す説明図である。
【図６】本実施の形態におけるマルチコアプロセッサシステム１００にて、タイムスライスを補正した後の状態を示す説明図である。
【図７】ソフトウェアテーブル３１０の記憶内容の一例を示す説明図である。
【図８】リアルタイム処理の一例を示す説明図である。
【図９】マルチコアプロセッサシステム１００でのスレッド切り替えを含むタイムスライス設定処理を示すフローチャートである。
【図１０】ハイパーバイザによるタイムスライス補正処理を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下に添付図面を参照して、本発明にかかるマルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラムの好適な実施の形態を詳細に説明する。
【００１４】
（マルチコアプロセッサシステムのハードウェア構成）
図１は、本実施の形態にかかるマルチコアプロセッサシステム１００のハードウェア構成を示すブロック図である。マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサであるＣＰＵが並列されているプロセッサ群を例にあげて説明する。
【００１５】
マルチコアプロセッサシステム１００は、ＣＰＵを複数搭載するＣＰＵｓ１０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）１０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０３と、フラッシュＲＯＭ１０４と、を備えている。また、マルチコアプロセッサシステム１００は、ユーザやその他の機器との入出力装置として、ディスプレイ１０５と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）１０６と、を備えている。また、各構成部はバス１０８によってそれぞれ接続されている。本実施の形態にかかるハードウェアの構成は、集中共用システムを適用した構成となっている。
【００１６】
ここで、ＣＰＵｓ１０１は、マルチコアプロセッサシステム１００の全体の制御を司る。また、ＣＰＵｓ１０１は、シングルコアのプロセッサを並列して接続したすべてのＣＰＵを指している。詳細は、図２にて後述する。ＲＯＭ１０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ１０３は、ＣＰＵｓ１０１のワークエリアとして使用される。
【００１７】
フラッシュＲＯＭ１０４は、書き換えが可能であり、電源を切ってもデータが消えないという特徴を持つ不揮発性の半導体メモリである。フラッシュＲＯＭ１０４は、ソフトウェアプログラムや、データを記憶している。フラッシュＲＯＭ１０４の代わりに、磁気ディスクであるＨＤＤ（ハードディスクドライブ）にて記憶してもよいが、フラッシュＲＯＭ１０４を使用することにより、機械的に動作するＨＤＤに比べて振動に強くすることができる。たとえば、マルチコアプロセッサシステム１００で構成する装置に対し、強い振動があった場合でも、フラッシュＲＯＭ１０４であればデータが消える可能性を低くすることができる。
【００１８】
ディスプレイ１０５は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ１０５は、たとえば、ＴＦＴ液晶ディスプレイなどを採用することができる。また、ディスプレイ１０５は、タッチパネル式で入力する形態でもよい。
【００１９】
Ｉ／Ｆ１０６は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク１０７に接続され、このネットワーク１０７を介して他の装置に接続される。そして、Ｉ／Ｆ１０６は、ネットワーク１０７と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ１０６には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２０】
図２は、マルチコアプロセッサシステム１００の各ＣＰＵのハードウェア構成とソフトウェア構成を示すブロック図である。マルチコアプロセッサシステム１００のハードウェア構成は、ＣＰＵｓ１０１と、共有メモリ２０３で構成される。ＣＰＵｓ１０１は、複数のＣＰＵとしてＣＰＵ２０１−１、ＣＰＵ２０１−２、・・・、ＣＰＵ２０１−ｎで構成される。
【００２１】
ＣＰＵ２０１−１、ＣＰＵ２０１−２、・・・、ＣＰＵ２０１−ｎは、それぞれ、キャッシュメモリ２０２−１、キャッシュメモリ２０２−２、・・・、キャッシュメモリ２０２−ｎを保持している。各ＣＰＵと共有メモリ２０３は、バス１０８によってそれぞれ接続されている。以下の記述では、ＣＰＵ２０１−１、ＣＰＵ２０１−２について記述する。
【００２２】
また、マルチコアプロセッサシステム１００のソフトウェア構成として、ＣＰＵ２０１−１は、ハイパーバイザ２０４−１、ＯＳ２０５−１を実行する。ＣＰＵ２０１−１は、ＯＳ２０５−１の制御により、ディスパッチャ２０６を実行する。同様に、ＣＰＵ２０１−１は、ＯＳ２０５−１の制御により、ソフトウェア２０７−１〜ソフトウェア２０７−ｍを実行する。同様にＣＰＵ２０１−２も、ハイパーバイザ２０４−２、ＯＳ２０５−２を実行する。ＣＰＵ２０１−１は、ＯＳ２０５−１の制御により、ディスパッチャ２０６を実行する。また、ハイパーバイザ２０４−１も、ディスパッチャ２０６の結果を用いて、本実施の形態での特徴である、タイムスライス補正処理を行う。ＣＰＵ２０１−２は、ＯＳ２０５−２の制御により、高優先度ソフトウェア２０９を実行する。
【００２３】
ＣＰＵ２０１−１がソフトウェア２０７−１〜ソフトウェア２０７−ｍを実行する際には、データへのアクセス先が２通りあり、アクセス経路２１０とアクセス経路２１１である。同様に、ＣＰＵ２０１−２が高優先度ソフトウェア２０９を実行する際にも、データへのアクセス先が２通りあり、アクセス経路２１２とアクセス経路２１３である。また、ハイパーバイザ２０４−１とハイパーバイザ２０４−２と、他のＣＰＵ上で動作しているハイパーバイザは、ハイパーバイザ間通信２１４を行う。
【００２４】
ＣＰＵ２０１−１、ＣＰＵ２０１−２、・・・、ＣＰＵ２０１−ｎは、マルチコアプロセッサシステム１００の制御を司る。ＣＰＵ２０１−１、ＣＰＵ２０１−２、・・・、ＣＰＵ２０１−ｎは、対称的、均一的に処理が割り付けられたＳＭＰ（Ｓｙｍｍｅｔｒｉｃ  Ｍｕｌｔｉ−ｐｒｏｃｅｓｓｉｎｇ）でもよい。また、ＣＰＵ２０１−１、ＣＰＵ２０１−２、・・・、ＣＰＵ２０１−ｎは、処理内容によって分担するＣＰＵを決めておくＡＳＭＰ（Ａｓｙｍｍｅｔｒｉｃ  Ｍｕｌｔｉ−Ｐｒｏｃｅｓｓｉｎｇ）でもよい。ＡＳＭＰの例として、本実施の形態にかかるマルチコアプロセッサシステム１００では、ＣＰＵ２０１−１にて決められた時間以内に処理を行う必要があるリアルタイム処理２０８を割り当てている。
【００２５】
共有メモリ２０３は、ＣＰＵ２０１−１、ＣＰＵ２０１−２、・・・、ＣＰＵ２０１−ｎからアクセス可能な記憶領域である。記憶領域とは、具体的には、たとえば、ＲＯＭ１０２、ＲＡＭ１０３、フラッシュＲＯＭ１０４である。また、たとえば、ＣＰＵ２０１−１が、ディスプレイ１０５に画像データの表示を要求する場合、ＲＡＭ１０３に含まれるＶＲＡＭ（Ｖｉｄｅｏ  ＲＡＭ）にアクセスし、画像データをＶＲＡＭに書き込むことになる。したがって、ＣＰＵ２０１−１が、ディスプレイ１０５へアクセスする場合も、共有メモリ２０３にアクセスすることに含める。
【００２６】
また、たとえば、ＣＰＵ２０１−１が、Ｉ／Ｆ１０６にアクセスする場合も同様である。たとえば、Ｉ／Ｆ１０６の具体例がＬＡＮアダプタとして、ＬＡＮアダプタにあるバッファにアクセスする形式か、ＲＡＭ１０３にアクセスし、その後ＬＡＮアダプタに転送する形式かのどちらかになる。どちらの場合であっても、ＣＰＵ２０１−１、ＣＰＵ２０１−２からみると共有メモリ２０３にアクセスしていることとなるため、ＣＰＵ２０１−１、ＣＰＵ２０１−２が、Ｉ／Ｆ１０６へアクセスする場合も、共有メモリ２０３にアクセスすることに含める。同様に、ＣＰＵ２０１−１が、Ｉ／Ｆ１０６にアクセスする場合も、Ｉ／Ｆ１０６を制御するデバイスドライバが用意する共有の記憶領域にアクセスすることになるため、結果、共有メモリ２０３にアクセスすることになる。
【００２７】
ハイパーバイザ２０４−１、ハイパーバイザ２０４−２は、それぞれＣＰＵ２０１−１、ＣＰＵ２０１−２にて動作するプログラムである。ハイパーバイザの機能は、ＯＳとＣＰＵの間にて位置し、ＯＳの監視を行い、ＯＳがハングアップした際にリセットをする他、ＯＳが何もスレッドを実行していない場合に、省電力設定にする。また、ハイパーバイザは、一般のプログラムでは操作できないプロセッサのキャッシュ制御やＩ／Ｏ操作を行うような特殊レジスタを操作する。また、ハイパーバイザは、一般のプログラムでは読み書きできないメモリ上の空間を用いて動作を行う。
【００２８】
ＯＳ２０５−１、ＯＳ２０５−２は、それぞれ、ＣＰＵ２０１−１、ＣＰＵ２０１−２にて動作するプログラムであり、ハイパーバイザ２０４−１、ハイパーバイザ２０４−２上で動作する。たとえば、ＯＳ２０５−１は、次に実行するソフトウェアを決めるスケジューラの機能を有する。
【００２９】
ディスパッチャ２０６は、現在動作中のソフトウェアに対して、スケジューラによって決定した次のソフトウェアに切り替える機能を有する。具体的には、たとえば、スケジューラは、ソフトウェア２０７−１からソフトウェア２０７−２に切り替える場合、ＣＰＵ２０１−１は、ソフトウェア２０７−１のプログラムカウンタ等を含むレジスタ情報を退避する。退避後、ＣＰＵ２０１−１は退避されてあったソフトウェア２０７−２のレジスタ情報を復帰する。復帰後、ＣＰＵ２０１−１は、ソフトウェア２０７−２の処理を前回の切り替えられた時点から継続することができる。
【００３０】
ソフトウェア２０７−１、・・・、ソフトウェア２０７−ｍは、実行コードをＣＰＵが実行することによりある機能を実現する。ソフトウェアは、１つ以上のスレッドで構成される。ソフトウェア２０７−１、・・・、ソフトウェア２０７−ｍは、終了時間に関係なく、処理を実行する。
【００３１】
リアルタイム処理２０８は、割り込み信号を受信した際に行う処理となる割り込みハンドラである。割り込みにはハードウェア割り込みとソフトウェア割り込みとがあり、たとえば、ハードウェア割り込みでは、通信デバイスがデータの受信を割り込み信号としてＣＰＵに通知する。通知を受けたＣＰＵは、通信デバイスのデータ受信に対応した割り込みハンドラを実行する。具体的な割り込みハンドラの処理内容としては、受信したデータを通信デバイスの記憶領域からＲＡＭ１０３、フラッシュＲＯＭ１０４に転送する処理である。割り込み信号を受信したＣＰＵは、割り込み禁止区間でなければ現在のスレッドの処理を退避し、割り込みハンドラを実行する。
【００３２】
高優先度ソフトウェア２０９は、ソフトウェアのうち高優先度属性が付与されているソフトウェアである。高優先度のソフトウェアは、ディスパッチ頻度が他のソフトウェアよりも高くなるといった特徴を持つ。また、メモリアクセスなどでリソース競合が起きたときに高優先度でアクセス権を獲得できるといった特徴を持つ。
【００３３】
本実施の形態では、ソフトウェア２０７−１、・・・、ソフトウェア２０７−ｍとリアルタイム処理２０８はＣＰＵ２０１−１にて実行され、高優先度ソフトウェア２０９はＣＰＵ２０１−２にて実行される。ソフトウェア２０７−１〜ソフトウェア２０７−ｍ、高優先度ソフトウェア２０９の具体例については、図７にて後述する。同様に、リアルタイム処理２０８の具体例については、図８にて後述する。
【００３４】
アクセス経路２１０は、ＣＰＵ２０１−１がキャッシュメモリ２０２−１にアクセスする経路である。アクセス経路２１１は、ＣＰＵ２０１−１が共有メモリ２０３にアクセスする経路である。アクセス経路２１０とアクセス経路２１１の違いとして、たとえば、ソフトウェア２０７−１がアクセスしたいデータがキャッシュメモリ２０２−１にあればアクセス経路２１０、なければアクセス経路２１１となる。アクセス経路２１２、アクセス経路２１３も同様で、アクセス経路２１２は、ＣＰＵ２０１−２がキャッシュメモリ２０２−２にアクセスする経路である。アクセス経路２１３は、ＣＰＵ２０１−２が共有メモリ２０３にアクセスする経路である。
【００３５】
アクセス競合によるコンテンションは、複数のＣＰＵが共有メモリ２０３にアクセスすることで発生する。たとえば、ＣＰＵ２０１−１のアクセス経路がアクセス経路２１１、ＣＰＵ２０１−２のアクセス経路がアクセス経路２１３であるときに、共有メモリ２０３へのアクセス競合によるコンテンションが発生する。
【００３６】
コンテンションが発生すると、ソフトウェアの処理が遅延することになり、ソフトウェアの処理内に存在する割り込み禁止区間も初期状態よりも長くなってしまう。割り込み禁止区間時に割り込み信号がＣＰＵに通知されても、割り込みハンドラであるリアルタイム処理２０８を実行できないため、リアルタイム処理２０８の応答性能の保証を行えない状態となる。コンテンション状態となり、リアルタイム処理２０８の応答時間の保証が行えない状態を後述する図５にて示す。
【００３７】
（マルチコアプロセッサシステム１００の機能的構成）
次に、マルチコアプロセッサシステム１００の機能的構成について説明する。図３は、マルチコアプロセッサシステム１００の機能的構成を示すブロック図である。マルチコアプロセッサシステム１００は、検出部３０３と、特定部３０４と、補正部３０５と、設定通知部３０６と、判断部３０７と、切替部３０８と、設定部３０９と、を含む構成である。この制御部となる機能（検出部３０３〜設定部３０９）は、具体的には、たとえば、図１に示したＲＯＭ１０２、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶装置に記憶されたプログラムをＣＰＵｓ１０１が実行することにより、その機能を実現する。または、Ｉ／Ｆ１０６を経由して他のＣＰＵが実行することにより、その機能を実現してもよい。
【００３８】
また、マルチコアプロセッサシステム１００は、ソフトウェアの優先度を判断するために、ソフトウェアテーブル３１０にアクセスする。ソフトウェアテーブル３１０は共有メモリ２０３に格納されており、たとえばＣＰＵ２０１−１がアクセスする。
【００３９】
また、ＣＰＵ２０１−１、ＣＰＵ２０１−２、・・・、ＣＰＵ２０１−ｎは、ハイパーバイザとＯＳ／ソフトウェアを実行する。さらに、一点破線で分割された領域のうち、領域３０１に図示している検出部３０３〜判断部３０７は、ＣＰＵ２０１−１がハイパーバイザ２０４−１の機能の一部として実行することにより実現する。同様に、領域３０２内に図示している切替部３０８、設定部３０９は、ＣＰＵ２０１−１が、ＯＳ２０５−１の機能の一部として実行することにより実現する。また、図示していないが、ＣＰＵ２０１−１以外のコアにも、検出部３０３〜設定部３０９の機能を有している。
【００４０】
検出部３０３は、複数のコアのうち、任意のスレッドが割り当てられたコアを検出する機能を有する。複数のコアとは、ＣＰＵ２０１−１〜ＣＰＵ２０１−ｎである。具体的には、たとえば、検出部３０３は、ＣＰＵ２０１−２に高優先度ソフトウェア２０９が割り当てられたことをハイパーバイザ間通信２１４によって検出する。なお、検出されたコアの情報は、キャッシュメモリ２０２−１、または、ＣＰＵ２０１−１の汎用レジスタなどの記憶領域に記憶される。
【００４１】
特定部３０４は、複数のコアのうち、切替部３０８によって所定の切り替え時間を越えて複数のスレッドの切り替えを行ったコアを特定する機能を有する。所定の切り替え時間とは、タイムスライスのことであり、スレッドを切り替える切替時間Δｔのことである。複数のスレッドとは、ＣＰＵ２０１−１上で実行されるソフトウェア２０７−１〜ソフトウェア２０７−ｍである。
【００４２】
また、特定部３０４は、検出部３０３によってコアが検出されたことをトリガーとしてコアを特定してもよい。また、特定部３０４は、検出部３０３によってコアが検出されたことをトリガーとし、切替部３０８によって切り替えられた後のスレッドの優先度より検出部３０３によって検出されたコアに割り当てられたスレッドの優先度が高い場合に、コアを特定してもよい。
【００４３】
具体的には、たとえば、特定部３０４は、切替部３０８によってＣＰＵ２０１−１に割り当てるソフトウェアをソフトウェア２０７−１〜ソフトウェア２０７−ｍに切り替えた場合を想定する。このとき、ソフトウェア２０７−１に割り当てられた時間ΔＣがΔｔを越えた場合に、所定の切り替え時間を越えて複数のスレッドの切り替えを行ったＣＰＵとして特定する。
【００４４】
また、ソフトウェア２０７−１に割り当てられた時間ΔＣの取得方法は、ソフトウェア２０７−１が割り当てられた時点でのクロックカウンタと、ソフトウェア２０７−２が割り当てられた時点でのクロックカウンタの差分から取得することができる。なお、特定されたコアの情報は、キャッシュメモリ２０２−１、または、ＣＰＵ２０１−１の汎用レジスタなどの記憶領域に記憶される。
【００４５】
補正部３０５は、特定部３０４によって特定されたコアにおいて複数のスレッドの切り替えを行った実切り替え時間と所定の切り替え時間との差分に基づいて、所定の切り替え時間が短縮するように補正する機能を有する。また、補正部３０５は、差分が所定の割り込み禁止時間を越えた場合に、差分に基づいて所定の切り替え時間が短縮するように補正してもよい。所定の割り込み禁止時間とは、実装規約で設定される禁止区間の最長パス時間ｌｃｋ（Ｌｏｃｋｅｄ  Ｃｒｉｔｉｃａｌ  Ｋｉｄｎａｐｐｉｎｇ−ｐｅｒｉｏｄ）である。ｌｃｋの詳細については、図４にて後述する。
【００４６】
差分に基づいて、短縮するように補正された切り替え時間の算出式の適用例としては、下記（１）式を適用してもよい。
【００４７】
補正された切り替え時間＝所定の切り替え時間−（実切り替え時間−所定の切り替え時間）  …（１）
【００４８】
（１）式では、コンテンション中となり遅延した時間をスレッド切り替えの短縮分に設定することになる。遅延した時間分が割り込みイベントの検出間隔の減少となり、割り込みイベントの検出頻度が増加した結果、リアルタイム処理の応答性能の保証ができるようになる。また、算出式は、差分が所定の割り込み禁止時間を越えた場合に、下記（２）式を適用してもよい。
【００４９】
補正された切り替え時間＝所定の切り替え時間−（（実切り替え時間−所定の切り替え時間）−所定の割り込み禁止時間）  …（２）
【００５０】
（２）式では、遅延時間が所定の割り込み禁止時間を越えなければ、実装規約によって、リアルタイム処理の応答性能を保証できることから、補正された切り替え時間の減少分を（１）式よりも抑えている。スレッドの切り替え時間を小さくしすぎると、スレッドのディスパッチオーバーヘッドによる性能劣化を伴うため、リアルタイム処理の応答性能を満たすことが可能ならば、（２）式を使用してもよい。算出式は、（１）式、（２）式に限らず、補正された切り替え時間が減少すればよい。
【００５１】
具体的には、たとえば、実切り替え時間が１３［マイクロ秒］であり、所定の切り替え時間が１０［マイクロ秒］であった場合、差分は３［マイクロ秒］となり、補正された切り替え時間は（１）式から、７［マイクロ秒］となる。なお、補正された切り替え時間は、キャッシュメモリ２０２−１、または、ＣＰＵ２０１−１の汎用レジスタなどの記憶領域に記憶される。
【００５２】
設定通知部３０６は、補正部３０５によって補正された切り替え時間をＯＳに通知する機能を有する。また、設定通知部３０６は、判断部３０７によって、アクセス競合中でないと判断された場合、補正された切り替え時間を補正前の切り替え時間に設定するように通知してもよい。また、通知内容の具体的として、設定通知部３０６は、（実切り替え時間−所定の切り替え時間）である差分を通知してもよい。また、判断部３０７によってアクセス競合中でないと判断された場合に、設定通知部３０６は、補正前の切り替え時間を通知してもよい。
【００５３】
具体的には、たとえば、設定通知部３０６は、補正部３０５によって補正された切り替え時間７［マイクロ秒］をＯＳに送信する。なお、通知された切り替え時間は、キャッシュメモリ２０２−１、または、ＣＰＵ２０１−１の汎用レジスタなどの記憶領域に記憶される。
【００５４】
判断部３０７は、特定部３０４によって特定されたコアがアクセスするメモリに関してアクセス競合中か否かを判断する機能を有する。具体的には、たとえば、ＣＰＵ２０１−１は、一定期間のＣＰＵが発行した発行命令数とクロックカウンタの記録を元にクロックカウンタ／発行命令数を算出する。ＣＰＵ２０１−１は、算出された値が一定値より大きい場合にアクセス競合中であると判断する。
【００５５】
具体的には、たとえば、（クロックカウンタ／発行命令数）＞１０００となった場合、１つの命令に１０００クロック消費していることになりアクセス競合を発生していると判断する。なお、判断結果は、キャッシュメモリ２０２−１、または、ＣＰＵ２０１−１の汎用レジスタなどの記憶領域に記憶される。
【００５６】
切替部３０８は、複数のコアのおのおのに割り当てた複数のスレッドを所定の切り替え時間で切り替える機能を有する。具体的には、たとえば、切替部３０８は、ソフトウェア２０７−１〜ソフトウェア２０７−ｍを所定の切り替え時間Δｔで切り替える。また、設定部３０９によって切り替え時間がΔｔからΔｔ’に短縮した場合、切替部３０８は、Δｔ’にてソフトウェア２０７−１〜ソフトウェア２０７−ｍを切り替える。なお、切り替えたソフトウェアの情報は、共有メモリ２０３などの記憶領域に記憶されてもよい。
【００５７】
設定部３０９は、設定通知部３０６によって通知された、補正された切り替え時間をスレッドの切り替え時間に設定する機能を有する。また、設定部３０９は、設定通知部３０６によって補正前の切り替え時間が通知されてきた場合に、補正前となる所定の切り替え時間に設定してもよい。
【００５８】
具体的には、たとえば、設定通知部３０６によって補正された切り替え時間Δｔ’が通知されてきた場合、設定部３０９は、スレッドの切り替え時間として補正された切り替え時間Δｔ’を設定する。なお、設定されたスレッドの切り替え時間は、共有メモリ２０３などの記憶領域に記憶されてもよい。
【００５９】
図４は、単一のＣＰＵで実行している場合のソフトウェアのディスパッチ状態を示す説明図である。図４では、マルチコアプロセッサシステム１００の中でＣＰＵ２０１−１が実行中であり、ＣＰＵ２０１−１は、ソフトウェア２０７−１〜ソフトウェア２０７−ｍを実行する。ＣＰＵ２０１−１は、スレッドの切り替え時間Δｔでソフトウェア２０７−１〜ソフトウェア２０７−ｍを順次実行しつつ、リアルタイム割り込みを受信したら割込みハンドラとしてリアルタイム処理２０８を実行する。
【００６０】
また、マルチコアプロセッサシステム１００がリアルタイム処理の応答性能を保証するには、以下の２つの時間以内にリアルタイム処理を行う必要がある。１つ目の条件として、割り込みイベントが発生後、ＣＰＵ２０１−１はリアルタイム割り込み間隔以内に割り込みイベントに対応したリアルタイム処理を実行する必要がある。２つ目の条件として、ＣＰＵ２０１−１はリアルタイム応答時間内に少なくとも１回リアルタイム処理を行う必要がある。割り込みイベントとは、割り込み信号を受信したイベントである。また、割り込みイベントが発生しても、ＣＰＵが割り込み禁止区間であるときはすぐにリアルタイム処理を実行することができず、割り込み禁止区間が終了した後に、ＣＰＵはリアルタイム処理が行えるようになる。
【００６１】
具体的に、図４の状態では、割り込みイベントの発生から現在時刻が割り込みイベントを拾うタイミング４０１となりリアルタイム処理２０８を行うまでの時間４０２が、リアルタイム割り込み間隔以内である必要がある。さらに、リアルタイム処理２０８を行う間隔となる時間４０３が、リアルタイム応答時間である必要がある。一般的にリアルタイム割り込み間隔はマイクロ秒オーダであり、リアルタイム応答時間は数ミリ秒である。数値例としては、リアルタイム割り込み間隔＝１０［マイクロ秒］、リアルタイム応答時間＝１０［ミリ秒］である。
【００６２】
また、ソフトウェア２０７−１〜ソフトウェア２０７−ｍの処理の中には、割り込み禁止区間が埋め込まれている。割込み禁止区間を埋め込む理由としては、たとえば、意図的なキャッシュ操作やレジスタの退避復元処理などは、他の処理が割り込まない状態で連続して処理を行う必要があるためである。割り込み禁止区間中のＣＰＵは、コンテキストスイッチなどのプリエンプションが実行できなくなる。割り込み禁止区間の設定については、システム設計の段階で、実装規約という形で禁止区間の最長パス時間ｌｃｋを設定し、実装者は、割り込み禁止区間がｌｃｋを越えないようにソフトウェアの実装を行う。
【００６３】
割り込み禁止区間がｌｃｋを越えない限り、割り込み禁止区間にて割り込みが発生したとしても、リアルタイム割り込み間隔、および、リアルタイム応答時間内でのリアルタイム処理を保証するように実装者はｌｃｋを設定する。したがって、単一のＣＰＵで実行している場合には、割り込み禁止区間中に割り込みイベントが発生しても、リアルタイム処理の応答性能を保証することができる。
【００６４】
図５は、従来例におけるマルチコアプロセッサシステム１００にて、コンテンション状態によるリアルタイム応答の遅延を示す説明図である。図５では、マルチコアプロセッサシステム１００の中でＣＰＵ２０１−１とＣＰＵ２０１−２が実行中であり、ＣＰＵ２０１−１は、ソフトウェア２０７−１〜ソフトウェア２０７−ｍを実行する。ＣＰＵ２０１−１は、スレッドの切り替え時間Δｔでソフトウェア２０７−１〜ソフトウェア２０７−ｍを順次実行しつつ、リアルタイム割り込みを受信したら割込みハンドラとしてリアルタイム処理２０８を実行する。ＣＰＵ２０１−２は、高優先度ソフトウェア２０９を実行する。
【００６５】
ＣＰＵ２０１−２にて、高優先度ソフトウェア２０９を実行しているため、マルチコアプロセッサシステム１００は、各種リソースを高優先度ソフトウェア２０９に優先的に割り当てる。具体的には、たとえば、ＣＰＵ２０１−１とＣＰＵ２０１−２が同時に共有メモリ２０３にアクセスした場合を想定する。このときマルチコアプロセッサシステム１００は、高優先度ソフトウェア２０９を実行しているＣＰＵ２０１−２が優先的に共有メモリ２０３にアクセスするように制御する。
【００６６】
したがって、ＣＰＵ２０１−１は、ＣＰＵ２０１−２のアクセス完了を待つことになり、アクセス競合におけるコンテンション状態となる。コンテンション状態となったＣＰＵ２０１−１は、処理が遅延することになる。処理が遅延すると、割り込み禁止区間も遅延することになる。遅延した結果、割り込み禁止区間がｌｃｋを越えた場合に、リアルタイム処理の応答性能を保証することができなくなる。
【００６７】
図５の例では、割り込みイベントが発生し、現在時刻が割り込みイベントを拾うタイミング５０１となった際、ＣＰＵ２０１−１は割り込み禁止区間となっている。したがって、ＣＰＵ２０１−１は、リアルタイム処理２０８をすぐに実行できず、割り込み禁止区間の終了後にリアルタイム処理２０８を実行する。
【００６８】
結果、割り込みイベント発生からリアルタイム処理２０８実行までの時間５０２がリアルタイム割り込み間隔を越えた場合に、マルチコアプロセッサシステム１００はリアルタイム処理の応答性能を保証できなくなる。また、リアルタイム処理２０８を行う間隔となる時間５０３がリアルタイム応答時間を越えた場合にも、マルチコアプロセッサシステム１００はリアルタイム処理の応答性能を保証できなくなる。
【００６９】
図６は、本実施の形態におけるマルチコアプロセッサシステム１００にて、タイムスライスを補正した後の状態を示す説明図である。図６では、ハードウェアとソフトウェアの実行状態は図５と等しいが、ＣＰＵ２０１−１にて、ΔｔからΔｔ’へと、スレッドの切り替え時間が短縮するように補正されている。
【００７０】
スレッドの切り替え時間が短縮された結果、マルチコアプロセッサシステム１００がリアルタイム処理の応答性能を保証しやすくなる。応答性能の保証を満たすには、図４にて前述したように、リアルタイム割り込み間隔以内にリアルタイム処理を行うことと、リアルタイム応答時間内にリアルタイム処理を行うことである。
【００７１】
リアルタイム割り込み間隔以内にリアルタイム処理を行えるようになる理由は、スレッドの切り替え時間が短縮することにより、割り込みイベントを検出する間隔が短くなり、割り込みイベントを検出する頻度があがるためである。したがって割り込みイベントの発生から、現在時刻が割り込みイベントを拾うタイミング６０１となり、リアルタイム処理２０８を実行するまでの時間６０２が短くなり、リアルタイム割り込み間隔より小さくすることができる。
【００７２】
リアルタイム応答時間以内にリアルタイム処理を行えるようになる理由は、スレッドの切り替え時間が短縮することにより、ＣＰＵ内で実行しているスレッドの処理回数が増えるためである。具体的には、たとえば、スレッドを２００個実行しているＣＰＵが存在し、スレッド１回の処理時間が１０［マイクロ秒］であったと想定する。また、リアルタイム処理を実行する契機となる割り込みイベントは、２００個のスレッドのうちの特定のスレッドの実行によって発生するものとする。
【００７３】
この場合、スレッドの優先度がすべて等しい場合、２［ミリ秒］に１回は、どのスレッドも処理を行えることになる。スレッド１回の処理時間がコンテンション状態により長くなった場合に、スレッドの切り替え時間が短縮することにより、特定のスレッドの処理が行われる回数が増えることになる。結果、リアルタイム処理２０８を行う間隔となる時間６０３はリアルタイム応答時間より小さくすることができる。
【００７４】
図７は、ソフトウェアテーブル３１０の記憶内容の一例を示す説明図である。ソフトウェアテーブル３１０はマルチコアプロセッサシステム１００にて実行されるソフトウェアの一覧を格納する。ソフトウェアテーブル３１０は、ソフトウェア名称と、優先度という２つのフィールドで構成する。
【００７５】
ソフトウェア名称フィールドは、ソフトウェアの名称を記述している。実際には、処理内容を記述したプログラムがＲＯＭ１０２、ＲＡＭ１０３、フラッシュＲＯＭ１０４のいずれかに存在し、たとえば、ＣＰＵ２０１−１は、プログラムをロードし、スレッドとして実行する。優先度フィールドは、対応するソフトウェアを実行する際の優先度を設定している。優先度が高いソフトウェアを検出すると、マルチコアプロセッサシステム１００は、バス１０８のアクセス権などを優先度が高いソフトウェアに優先的に渡す。
【００７６】
具体的には、たとえば、“動画像再生ソフトウェア”は、ユーザによって起動され、フォアグラウンドで実行している場合には、高優先度となる。また、“Ｗｅｂブラウザ”は低優先度となる。また、別のパターンとして、カメラユニットを持つマルチコアプロセッサシステム１００が連続して撮影を行うことを想定する。連続して撮影を行うため、カメラの画像を保存する“カメラ画像保存ソフトウェア”は高優先度となる。また、“カメラ撮影ソフトウェア”は低優先度となる。
【００７７】
図８は、リアルタイム処理の一例を示す説明図である。“通信割り込み処理”は、通信を司るハードウェア、たとえばＩ／Ｆ１０６からの割り込みイベントに対して実行されるリアルタイム処理である。また、通信は、たとえば“Ｗｅｂブラウザ”等のソフトウェアによって引き起こされる。Ｉ／Ｆ１０６はデータを受信した場合、データのプロトコルによっては受信したという応答通知を一定時間内にデータを送信した機器に送信する必要がある。一定時間内に処理を行わないと、データを送信した機器はタイムアウトと判断するため、マルチコアプロセッサシステム１００は、一定時間内に処理を行う必要がある。
【００７８】
また、“カメラユニット割り込み処理”は、カメラユニットにより実行されるリアルタイム処理である。カメラユニット割り込み処理は“カメラ撮影ソフトウェア”によって画像データを撮影し、バッファに格納する。ＣＰＵ２０１−１が、格納された映像データをバッファからたとえば共有メモリ２０３に転送しないと、データオーバーフローが発生し、画像データをとりこぼすことになる。
【００７９】
前述した“通信割り込み処理”、“カメラユニット割り込み処理”は、シングルコアでタスクスイッチしながら動作するシステムでは問題なく動作する。しかし、従来例におけるマルチコアプロセッサシステム１００では、リアルタイム処理を１つのＣＰＵが実行し、別のＣＰＵが高優先度ソフトウェアを実行している場合、アクセス競合によるコンテンション状態となり、リアルタイム処理の応答性能を保証できない。
【００８０】
図９は、マルチコアプロセッサシステム１００でのスレッド切り替えを含むタイムスライス設定処理を示すフローチャートである。ＣＰＵｓ１０１は、スレッドを次々と切り替えている。初期状態として、ＣＰＵ２０１−１は、ＯＳ２０５−１によって、スレッドの切り替え時間をΔｔに設定する（ステップＳ９０１）。図示していないが、ＣＰＵ２０１−２も同様にスレッドの切り替え時間をΔｔに設定する。
【００８１】
次に、ＣＰＵ２０１−１は、ハイパーバイザ２０４−１を起動する（ステップＳ９０２）。ハイパーバイザ２０４−１は一定周期で起動される。同様に、ＣＰＵ２０１−２も、ハイパーバイザ２０４−２を起動する（ステップＳ９０３）。スレッドの切り替え時間が経過した後に、ＣＰＵ２０１−１は、ＯＳ２０５−１によってスレッドを切り替える（ステップＳ９０４）。図示していないが、ＣＰＵ２０１−２も同様にスレッドを切り替える。
【００８２】
スレッドを切り替えると、ＣＰＵ２０１−１は、ハイパーバイザ２０４−１の機能によって、スレッド起動を検出する（ステップＳ９０５）。また、ＣＰＵ２０１−２では、高優先度ソフトウェア２０９が起動されることを想定する。高優先度ソフトウェア２０９の起動後、ＣＰＵ２０１−２は、ハイパーバイザ２０４−２の機能によって、高優先度スレッド起動を検出する（ステップＳ９０６）。検出後、ＣＰＵ２０１−２は、ハイパーバイザ間通信によって、高優先度スレッドの起動を検出したことをハイパーバイザ２０４−１を含むすべてのハイパーバイザに通知する（ステップＳ９０７）。ＣＰＵ２０１−１も同様に、ハイパーバイザ間通信によって、スレッドの起動を検出したことをハイパーバイザ２０４−２に通知する（ステップＳ９０８）。
【００８３】
通知後、ＣＰＵ２０１−１は、ハイパーバイザ２０４−１によってタイムスライス補正処理を実行する（ステップＳ９０９）。タイムスライス補正処理の詳細は、図１０にて後述する。ここで、ＣＰＵ２０１−１は、ＣＰＵ２０１−１以外のＣＰＵにて高優先度スレッドが起動しているため、コンテンション状態となる可能性がある。コンテンション状態となっていた場合、ＣＰＵ２０１−１は、タイムスライス補正処理内で、ＯＳ２０５−１に差分τを通知する。タイムスライス補正処理後、ＣＰＵ２０１−１は、ハイパーバイザ２０４−１によって通常のハイパーバイザ処理を実行し（ステップＳ９１１）、ハイパーバイザ２０４−１を実行終了する（ステップＳ９１３）。実行終了後、ＣＰＵ２０１−１は、一定周期後にステップＳ９０２の処理に移行する。
【００８４】
ＣＰＵ２０１−２も同様に、ハイパーバイザ２０４−２によってタイムスライス補正処理を実行する（ステップＳ９１０）。ＣＰＵ２０１−２は、ＣＰＵ２０１−２以外のＣＰＵにて高優先度スレッドが起動していないため、コンテンション状態とはならず、ＯＳ２０５−２に通知は行わない。タイムスライス補正処理後、ＣＰＵ２０１−２は、ハイパーバイザ２０４−２によって通常のハイパーバイザ処理を実行し（ステップＳ９１２）、ハイパーバイザ２０４−２を実行終了する（ステップＳ９１４）。実行終了後、ＣＰＵ２０１−２は、一定周期後にステップＳ９０３の処理に移行する。
【００８５】
ＣＰＵ２０１−１がハイパーバイザ２０４−１によって差分τを通知後、ＣＰＵ２０１−１は、ＯＳ・ハイパーバイザ間通信によって差分τを受信する（ステップＳ９１５）。続けて、ＣＰＵ２０１−１は、補正値Δｔ’＝Δｔ−τを算出する（ステップＳ９１６）。ステップＳ９１６での算出式は、（１）式を適用しているが、（２）式を適用してもよい。算出後、ＣＰＵ２０１−１は、ＯＳ２０５−１によってスレッドの切り替え時間を補正値Δｔ’に設定する（ステップＳ９１７）。Δｔ’時間経過後、ＣＰＵ２０１−１は、ステップＳ９０４の処理に移行する。
【００８６】
図１０は、ハイパーバイザによるタイムスライス補正処理を示すフローチャートである。タイムスライス補正処理は、ＣＰＵｓ１０１に属するどのＣＰＵでも実行されるが、図１０では、ＣＰＵ２０１−１にて実行される状態を説明する。また、タイムスライス補正処理は、ハイパーバイザの機能によって実行される。
【００８７】
ＣＰＵ２０１−１は、別ＣＰＵでスレッドが起動されたかを判断する（ステップＳ１００１）。スレッド起動の検出としては、ＣＰＵ２０１−１は、タイムスライス補正処理の前に行われたステップＳ９０８の処理であるハイパーバイザ間通信によって検出する。別ＣＰＵでスレッドが起動されたと判断された場合（ステップＳ１００１：Ｙｅｓ）、ＣＰＵ２０１−１は続けて、別ＣＰＵで起動されたスレッドの優先度が、本ＣＰＵのスレッドの優先度より高いかを判断する（ステップＳ１００２）。本ＣＰＵとは、実行主体となるＣＰＵのことで、図１０の説明ではＣＰＵ２０１−１に相当する。
【００８８】
別ＣＰＵで起動されたスレッドの優先度が本ＣＰＵのスレッドより高い場合（ステップＳ１００２：Ｙｅｓ）、ＣＰＵ２０１−１は、クロックカウンタから取得した処理時間ΔＣを取得する（ステップＳ１００３）。ΔＣを取得後、所定のスレッド切り替え時間Δｔが処理時間ΔＣより大きいかを判断する（ステップＳ１００４）。ΔｔがΔＣ以下の場合（ステップＳ１００４：Ｎｏ）、ＣＰＵ２０１−１は、差分τ＝ΔＣ−Δｔを算出する（ステップＳ１００６）。なお、ステップＳ１００４：Ｎｏとなった場合が、ＣＰＵ２０１−１にてアクセス競合によるコンテンション状態となった状態である。
【００８９】
別ＣＰＵでスレッドが起動していない場合（ステップＳ１００１：Ｎｏ）、ＣＰＵ２０１−１は、コンテンション状態が解消したかを判断する（ステップＳ１００５）。コンテンション状態が解消した場合（ステップＳ１００５：Ｙｅｓ）、ＣＰＵ２０１−１は、差分τに０を設定する（ステップＳ１００８）。アクセス競合によるコンテンション状態が解消したか否かの判断方法として、ＣＰＵは、一定期間のＣＰＵの発行命令数とクロックカウンタを記録しておく。続けて、ＣＰＵはクロックカウンタ／発行命令数を算出し、算出された値が一定値より大きい場合にコンテンション状態が継続中であると判断し、算出された値が一定値以下の場合にコンテンション状態が解消したと判断する。
【００９０】
別ＣＰＵで起動されたスレッドの優先度が本ＣＰＵのスレッドより高くない場合、または、ΔｔがΔＣより大きい場合（ステップＳ１００２：Ｎｏ、ステップＳ１００４：Ｙｅｓ）、ＣＰＵ２０１−１は、ステップＳ１００５の処理に移行する。
【００９１】
ステップＳ１００６の処理後、ＣＰＵ２０１−１は、算出した差分τが割り込み禁止区間の最長パス時間ｌｃｋより大きいかを判断する（ステップＳ１００７）。差分τがｌｃｋより大きい場合（ステップＳ１００７：Ｙｅｓ）、またはステップＳ１００７の処理終了後、ＣＰＵ２０１−１は、ＯＳに差分τを通知する（ステップＳ１００９）。差分τを通知後、ＣＰＵ２０１−１はタイムスライス補正処理を終了する。また、差分τがｌｃｋ以下である場合（ステップＳ１００７：Ｎｏ）、またはコンテンション状態が解消していない場合（ステップＳ１００５：Ｎｏ）、ＣＰＵ２０１−１は、タイムスライス補正処理を終了する。
【００９２】
本実施の形態におけるマルチコアプロセッサシステム１００の性能向上を測定するには、たとえば、プロファイラ、または、デバッガがあれば動作ログを解析して判別してもよい。また、プロファイラかデバッガがない場合、ソフトウェアを個別実行させた場合と、同時実行させた場合の実行性能を解析することにより判別してもよい。
【００９３】
以上説明したように、マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラムによれば、所定の切り替え時間を越えて複数のスレッドの切り替えを行ったＣＰＵを特定する。特定後、マルチコアプロセッサシステムは、スレッドの切り替えを行った実切り替え時間と所定の切り替え時間の差分によってスレッドの切り替え時間を設定する。これにより、割り込みイベントの検出間隔が減少する分検出頻度が増加するため、リアルタイム処理の応答性能を保証できる。
【００９４】
また、マルチコアプロセッサシステムは、任意のスレッドが割り当てられたＣＰＵの検出をトリガーにして、所定の切り替え時間を越えて複数のスレッドの切り替えを行ったＣＰＵを特定してもよい。アクセス競合によるコンテンションは、複数のＣＰＵでスレッドが割り当てられたときに発生するため、スレッドの割り当てをトリガーにすることにより、タイムスライスの補正を行う最もよいタイミングで実行することができる。
【００９５】
また、マルチコアプロセッサシステムは、任意のスレッドが割り当てられたＣＰＵの検出をトリガーにする。その後、マルチコアプロセッサシステムは、切り替えを行ったＣＰＵの切り替え後のスレッドの優先度より、検出されたＣＰＵに割り当てられたスレッドの優先度が高い場合、所定の切り替え時間を越えて複数のスレッドの切り替えを行ったＣＰＵを特定してもよい。
【００９６】
アクセス競合によるコンテンションは、複数のＣＰＵでスレッドが割り当てられており、さらに、一つのＣＰＵで高優先度のスレッドが割り当てられ、もう一方のＣＰＵでは低優先度のスレッドが割り当てられた場合に発生する。したがって、切り替えを行ったＣＰＵの切り替え後のスレッドの優先度より、検出されたＣＰＵに割り当てられたスレッドの優先度が高いかを確認することにより、タイムスライスの補正を行う対象のＣＰＵを最小限に絞ることができる。
【００９７】
また、マルチコアプロセッサシステムは、実切り替え時間と所定の切り替え時間との差分が所定の割り込み禁止時間を越えた場合に、所定の切り替え時間が短縮するように補正してもよい。マルチコアプロセッサシステムは、実切り替え時間と所定の切り替え時間との差分が所定の割り込み禁止時間を越えない限り、リアルタイム処理の応答性能を保証するように設計されている。したがって、差分が所定の割り込み禁止時間を越えた場合にタイムスライスの補正を行うことにより、リアルタイム処理の応答性能が破たんする可能性があるときに絞って、タイムスライスの補正を行うことができる。
【００９８】
また、マルチコアプロセッサシステムは、タイムスライスを補正したＣＰＵに対して、アクセス競合中でない場合に、補正された切り替え時間を補正前の切り替え時間に設定してもよい。これにより、実切り替え時間を取得し所定の切り替え時間との比較を行わなくとも、アクセス競合か否かを判断することで、タイムスライスの補正を解除することができる。
【００９９】
なお、本実施の形態で説明したマルチコアプロセッサシステムの制御方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本マルチコアプロセッサシステムの制御プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本マルチコアプロセッサシステムの制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０１００】
１０８  バス
２０１−１  ＣＰＵ
２０１−２  ＣＰＵ
２０７−１〜２０７−ｍ  ソフトウェア
２０９  高優先度ソフトウェア
３０１  領域
３０２  領域
３０３  検出部
３０４  特定部
３０５  補正部
３０６  設定通知部
３０７  判断部
３０８  切替部
３０９  設定部
３１０  ソフトウェアテーブル
【図１】
0005582241.tif 000002
【図２】
0005582241.tif 000003
【図３】
0005582241.tif 000004
【図４】
0005582241.tif 000005
【図５】
0005582241.tif 000006
【図６】
0005582241.tif 000007
【図７】
0005582241.tif 000008
【図８】
0005582241.tif 000009
【図９】
0005582241.tif 000010
【図１０】
0005582241.tif 000011