(57)【特許請求の範囲】
【請求項１】
マルチコアプロセッサから、特定のプログラムをキャッシュに格納する一のコアよりもキャッシュミスヒット率が低い他のコアを各コアに割り当てられたタスクの情報量に基づいて特定する特定手段と、
前記特定のプログラムを前記一のコアのキャッシュから前記特定手段により特定された他のコアのキャッシュに移動させる移動手段と、
前記移動手段により前記特定のプログラムが前記他のコアのキャッシュに移動させられた後、前記他のコアのキャッシュのうち前記特定のプログラムが格納された領域を書き込み禁止領域に設定する設定手段と、
を備えることを特徴とするマルチコアプロセッサシステム。
【請求項２】
移動先コアのキャッシュと移動元コアのキャッシュと移動対象プログラムとの移動通知を受け付けると、前記移動元コアのキャッシュから前記移動先コアのキャッシュへ前記移動対象プログラムを移動させる制御回路にアクセス可能なマルチコアプロセッサに、
前記マルチコアプロセッサから、特定のプログラムをキャッシュに格納する一のコアよりもキャッシュミスヒット率が低い他のコアを各コアに割り当てられたタスクの情報量に基づいて特定する特定工程と、
前記制御回路に、前記特定のプログラムを前記一のコアのキャッシュから前記特定工程により特定された他のコアのキャッシュに移動させる移動処理工程と、
前記移動処理工程により前記特定のプログラムが前記他のコアのキャッシュに移動させられた後、前記他のコアのキャッシュのうち前記特定のプログラムが格納された領域を書き込み禁止領域に設定する設定工程と、
を実行させることを特徴とする制御プログラム。
【請求項３】
移動先コアのキャッシュと移動元コアのキャッシュと移動対象プログラムとの移動通知を受け付けると、前記移動元コアのキャッシュから前記移動先コアのキャッシュへ前記移動対象プログラムを移動させる制御回路にアクセス可能なマルチコアプロセッサが、
前記マルチコアプロセッサから、特定のプログラムをキャッシュに格納する一のコアよりもキャッシュミスヒット率が低い他のコアを各コアに割り当てられたタスクの情報量に基づいて特定する特定工程と、
前記制御回路に、前記特定のプログラムを前記一のコアのキャッシュから前記特定工程により特定された他のコアのキャッシュに移動させる移動処理工程と、
前記移動処理工程により前記特定のプログラムが前記他のコアのキャッシュに移動させられた後、前記他のコアのキャッシュのうち前記特定のプログラムが格納された領域を書き込み禁止領域に設定する設定工程と、
を実行することを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、タスクの割り当てを制御するマルチコアプロセッサシステム、制御プログラム、および制御方法に関する。
【背景技術】
【０００２】
従来からＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）はキャッシュを有しており、キャッシュには使用頻度の高いデータや実行頻度の高いプログラムの実行コードが格納されている（たとえば、下記特許文献１を参照。）。使用頻度の高いデータとは、たとえば、実行中のプログラム内で何度も参照されるデータである。実行頻度の高いプログラムとは、たとえば、一定時間ごとに実行される数ステップのプログラム（以下、「周期実行プログラム」と称する。）である。【０００３】
また、マルチコアプロセッサシステムにおいて、実行が中断されたタスクが再実行される場合、中断前に実行していたＣＰＵと同一のＣＰＵに該タスクをスケジューリングする技術が知られている（たとえば、下記特許文献２を参照。）。これにより、キャッシュミスを減らすことができる。さらに、ローカルメモリを有するマルチコアプロセッサシステムにおいて、ローカルメモリの有効活用度合いに基づいてどのローカルメモリにどのタスクを括り付けるかを決定する技術が知られている（たとえば、下記特許文献３を参照。）。これにより、データ転送によるオーバーヘッドの増加を防止することができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−１９２４０３号公報
【特許文献２】特開平０８−３０５６２号公報
【特許文献３】特開平０４−３３８８３７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、データロードが増加すると、キャッシュに格納されているデータやプログラムの実行コードの多くは追い出されてしまう。たとえば、ローカルメモリを有さないマルチコアプロセッサシステムにおいて、Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）処理を多く行うタスクが一のＣＰＵに割り当てられた場合、共有メモリからのデータロードが増加する。また、一のＣＰＵが多くのタスクを実行すると、命令キャッシュに格納されている命令が頻繁に追い出される。【０００６】
命令コードサイズの大きいタスクが割り当てられたＣＰＵや多くのタスクを実行するＣＰＵと同一のＣＰＵに周期実行プログラムが割り当てられた場合、周期実行プログラムの実行コードがキャッシュから追い出される確率が増加するという問題点があった。すなわち、ＣＰＵが周期実行プログラムの実行コードを共有メモリからキャッシュへ再ロードする回数が増加するという問題点があった。【０００７】
また、ＣＰＵが共有メモリから該実行コードを読み出す時間は該ＣＰＵがキャッシュから実行コードを読み出す時間よりも長いため、該ＣＰＵが該実行コードをキャッシュに再ロードせずに実行する場合、オーバーヘッドが増加してしまう問題点があった。【０００８】
そこで、たとえば、周期実行プログラムの実行コードが格納されているキャッシュの領域をロックすることにより、該実行コードがキャッシュから追い出されなくすることができる。しかしながら、該周期実行プログラムを実行するＣＰＵに割り当てられた他のタスクがキャッシュミスの大きいタスクであると、該他のタスクで使用できるキャッシュの領域が減るため、該他のタスクのキャッシュミスが増大する。その結果、ＣＰＵの性能が低下するという問題点があった。【０００９】
本発明は、上述した従来技術による問題点を解消するため、特定のプログラムがキャッシュから追い出されず、周期実行プログラムと同一のＣＰＵに割り当てられたタスクの実行に与える影響を小さくすることができるマルチコアプロセッサシステム、制御プログラム、および制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明の一観点によれば、マルチコアプロセッサから、特定のプログラムをキャッシュに格納する一のコアよりもキャッシュミスヒット率が低い他のコアを各コアに割り当てられたタスクの情報量に基づいて特定する特定手段と、前記特定のプログラムを前記一のコアのキャッシュから前記特定手段により特定された他のコアのキャッシュに移動させる移動手段と、前記移動手段により前記特定のプログラムが前記他のコアのキャッシュに移動させられた後、前記他のコアのキャッシュのうち前記特定のプログラムが格納された領域を書き込み禁止領域に設定する設定手段と、を備えるマルチコアプロセッサシステムが提供される。
【発明の効果】
【００１１】
本マルチコアプロセッサシステム、制御プログラム、および制御方法によれば、特定のプログラムがキャッシュから追い出されず、周期実行プログラムと同一のＣＰＵに割り当てられたタスクの実行に与える影響を小さくすることができるという効果を奏する。
【図面の簡単な説明】
【００１２】
【図１】マルチコアプロセッサシステムのハードウェアを示すブロック図である。
【図２】サイズテーブル１５２の一例を示す説明図である。
【図３】識別情報１５３の一例を示す説明図である。
【図４】マルチコアプロセッサシステム１００の機能ブロック図である。
【図５】周期実行プログラムの実行コード５０２がロードされた領域がロックされる例を示す説明図である。
【図６】周期実行プログラムが実行される例を示す説明図である。
【図７】周期実行プログラムでないタスクの割り当てを示す説明図である。
【図８】命令コードサイズの合計値の算出例を示す説明図である。
【図９】実行コード５０２の移動例を示す説明図である。
【図１０】実行コード５０２が格納されている領域をロックさせる例を示す説明図である。
【図１１】ＯＳ１４１の制御処理手順を示すフローチャート（その１）である。
【図１２】ＯＳ１４１の制御処理手順を示すフローチャート（その２）である。
【図１３】スヌープコントローラ１０５による移動処理を示すフローチャートである。
【図１４】次指定先ＣＰＵによる書き込み禁止設定処理を示すフローチャートである。
【図１５】現指定先ＣＰＵによる一時停止処理を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下に本マルチコアプロセッサシステム、制御プログラム、および制御方法の好適な実施の形態を詳細に説明する。
【００１４】
まず、ここで、上述の周期実行プログラムについて説明する。周期実行プログラムは一定時間ごとに実行されるプログラムであり、かつ他のイベントにより起動されるプログラムではない。一般的なタスクでは実行のタイミングと実行時間とが決まっていないが、周期実行プログラムでは実行のタイミングと実行時間とに変化がない。周期実行プログラムとしては、たとえば、携帯電話の通信待ち受けプログラムが挙げられる。携帯電話の通信待ち受けプログラムは携帯電話がどのようなタスク処理中であっても定期的に基地局に通信を問い合わせて通信を検出する。
【００１５】
また、本実施の形態のマルチコアプロセッサシステムにおいて、マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００１６】
（マルチコアプロセッサシステムのハードウェア）
図１は、マルチコアプロセッサシステムのハードウェアを示すブロック図である。図１において、マルチコアプロセッサシステム１００は、マスタＣＰＵ１０１と、スレーブＣＰＵ１０２〜スレーブＣＰＵ１０４と、共有メモリ１０７と、スヌープコントローラ１０５と、を有している。また、各ＣＰＵと共有メモリ１０７とはバス１０６を介してそれぞれ接続されている。各ＣＰＵとスヌープコントローラ１０５とは、バス１０６とは異なるバスを介してそれぞれ接続されている。
【００１７】
ここで、マスタＣＰＵ１０１とスレーブＣＰＵ１０２〜スレーブＣＰＵ１０４では、たとえば、それぞれコアとレジスタとキャッシュとを有している。マスタＣＰＵ１０１はＯＳを実行し、マルチコアプロセッサシステム１００の全体の制御を司る。ＯＳ１４１は、ソフトウェアの各プロセスをどのＣＰＵに割り当てるかを制御する制御プログラムを有し、マスタＣＰＵ１０１に割り当てられたタスクの切り替えを制御する機能を有している。
【００１８】
スレーブＣＰＵ１０２〜スレーブＣＰＵ１０４は、それぞれＯＳ１４２〜ＯＳ１４４を実行する。ＯＳ１４２〜ＯＳ１４４は各ＣＰＵに割り当てられたタスクの切り替えを制御する機能を有している。
【００１９】
各ＣＰＵのキャッシュは、命令キャッシュとデータキャッシュの２種類のキャッシュを有している。命令キャッシュはプログラムを保持するキャッシュであり、データキャッシュはプログラムが実行中に用いられるデータを保持するキャッシュである。
【００２０】
マスタＣＰＵ１０１はキャッシュとして命令キャッシュ１１１とデータキャッシュ１２１を有し、スレーブＣＰＵ１０２はキャッシュとして命令キャッシュ１１２とデータキャッシュ１２２を有している。スレーブＣＰＵ１０３はキャッシュとして命令キャッシュ１１３とデータキャッシュ１２３を有し、スレーブＣＰＵ１０４はキャッシュとして命令キャッシュ１１４とデータキャッシュ１２４を有している。
【００２１】
各ＣＰＵのキャッシュは更新状態を把握および管理し、他のキャッシュと更新状態の情報を交換することにより、各ＣＰＵのキャッシュはどのキャッシュに最新のデータが存在するかを把握することができる。スヌープコントローラ１０５がこの情報交換を行う。
【００２２】
また、各ＣＰＵはレジスタを有している。マスタＣＰＵ１０１はレジスタ１３１を有し、スレーブＣＰＵ１０２はレジスタ１３２を有している。スレーブＣＰＵ１０３はレジスタ１３３を有し、スレーブＣＰＵ１０４はレジスタ１３４を有している。
【００２３】
また、スヌープコントローラ１０５は、たとえば、移動元のキャッシュと移動先のキャッシュと移動対象とに関する情報を含む移動指示を受け付けると、移動元のキャッシュから移動対象を複製し、複製した移動対象を移動先のキャッシュに格納する。これにより、スヌープコントローラ１０５は移動元のキャッシュから移動先のキャッシュへ移動対象を移動させる。
【００２４】
また、本実施の形態では、周期実行プログラムの実行コードが格納されるキャッシュの領域はいずれのＣＰＵのキャッシュであっても同一アドレスの領域とする。たとえば、周期実行プログラムの実行コードはキャッシュの先頭の領域に格納させると利用者があらかじめ決定しておいても良い。
【００２５】
共有メモリ１０７は、たとえば、マスタＣＰＵ１０１とスレーブＣＰＵ１０２〜スレーブＣＰＵ１０４とに共有されるメモリである。共有メモリ１０７は、たとえば、プロセス管理テーブル１５１と、サイズテーブル１５２と、識別情報１５３と、ＯＳ１４１〜ＯＳ１４４のブートプログラムなどのプログラムと、を記憶している。共有メモリ１０７は、たとえば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）と、フラッシュＲＯＭなどを有している。
【００２６】
たとえば、ＲＯＭまたはフラッシュＲＯＭは該プログラムなどを記憶し、ＲＡＭはマスタＣＰＵ１０１とスレーブＣＰＵ１０２〜スレーブＣＰＵ１０４とのワークエリアとして使用される。共有メモリ１０７に記憶されている該プログラムは、各ＣＰＵにロードされることで、コーディングされている処理を各ＣＰＵに実行させることとなる。
【００２７】
プロセス管理テーブル１５１とは、たとえば、各タスクがどのＣＰＵに割り当てられているか、割り当てられているＣＰＵが該タスクを実行中であるか否かを示す情報である。各ＣＰＵは、プロセス管理テーブル１５１を読み出して各ＣＰＵのキャッシュに記憶しておく。ＯＳ１４１はマスタＣＰＵ１０１およびスレーブＣＰＵ１０２〜スレーブＣＰＵ１０４のうちのいずれかのＣＰＵにタスクを割り当てると、プロセス管理テーブル１５１に該タスクがどのＣＰＵに割り当てられたかを登録する。
【００２８】
さらに、タスクの切り替えが発生すると、各ＣＰＵはプロセス管理テーブル１５１にどのタスクが実行状態になったかを登録する。また、タスクの実行が完了すると、各ＣＰＵはプロセス管理テーブル１５１から該完了したタスクの情報を削除する。
【００２９】
図２は、サイズテーブル１５２の一例を示す説明図である。サイズテーブル１５２は、各タスクの命令コードサイズを示すテーブルである。サイズテーブル１５２はタスク名の項目２０１と命令コードサイズの項目２０２とを有している。タスク名の項目２０１にはタスク名が保持されており、命令コードサイズの項目２０２には、タスクの命令コードサイズが保持されている。命令コードサイズとは、たとえば、タスクのステップ数である。
【００３０】
たとえば、サイズテーブル１５２ではタスク名の項目２０１の値がタスクＡの場合、命令コードサイズの項目２０２の値が３００である。
【００３１】
図３は、識別情報１５３の一例を示す説明図である。識別情報１５３はどのタスクが周期実行プログラムのタスクであるかを示す情報である。識別情報１５３はタスク名の項目３０１を有している。たとえば、識別情報１５３によりタスクＧは周期実行プログラムのタスクであると判別される。
【００３２】
（マルチコアプロセッサシステム１００の機能ブロック）
図４は、マルチコアプロセッサシステム１００の機能ブロック図である。マルチコアプロセッサシステム１００は、たとえば、特定部４０１と移動部４０２と設定部４０３〜設定部４０６とを有している。特定部４０１と設定部４０３とはマスタＣＰＵ１０１に実行されるＯＳ１４１が有している。移動部４０２はスヌープコントローラ１０５が有している。設定部４０４はスレーブＣＰＵ１０２に実行されるＯＳ１４２が有している。設定部４０５はスレーブＣＰＵ１０３に実行されるＯＳ１４３が有している。設定部４０６はスレーブＣＰＵ１０４に実行されるＯＳ１４４が有している。
【００３３】
特定部４０１は、マルチコアプロセッサから、特定のプログラムをキャッシュに格納する一のＣＰＵよりもキャッシュミスヒット率が低い他のＣＰＵを各ＣＰＵに割り当てられたタスクの情報量に基づいて特定する。
【００３４】
本実施の形態では、各タスクの情報量を命令コードサイズと称し、命令コードサイズをタスクのステップ数としているが、これに限らず、たとえば、タスクのデータサイズとしてもよい。命令コードサイズやデータサイズが小さいと命令キャッシュを使用する領域が少ないため、キャッシュミスヒット率が小さくなる。また、本実施の形態では、周期実行プログラムを特定のプログラムとして挙げているが、これに限らず、利用者が選択したプログラムを特定のプログラムとしてもよい。
【００３５】
つぎに、移動部４０２は、特定のプログラムを前記一のコアのキャッシュから特定部４０１により特定された他のコアのキャッシュに移動させる。
【００３６】
特定されたＣＰＵで動作するＯＳが有する設定部は、移動部４０２により特定のプログラムが他のＣＰＵのキャッシュに移動させられた後、他のＣＰＵのキャッシュのうち特定のプログラムが格納された領域を書き込み禁止領域に設定する。さらに、移動元の設定部は、特定プログラムの移動後、書き込み禁止領域に設定していた特定プログラムの領域の禁止設定を解除する。
【００３７】
以上を踏まえて図を用いて実施例を説明する。実施例では、一のコアを現指定先ＣＰＵとし、他のコアを次指定先ＣＰＵとする。
【００３８】
図５は、周期実行プログラムの実行コード５０２がロードされた領域がロックされる例を示す説明図である。まず、ＯＳ１４１が、周期実行プログラムの実行コード５０２をマスタＣＰＵ１０１の命令キャッシュ１１１にロードする。そして、ＯＳ１４１が、該実行コード５０２がロードされた領域をレジスタ設定によりロックする。ロードされた領域をロックするとは、ロードされた領域を書き込み禁止領域に設定することを示す。
【００３９】
各ＣＰＵのレジスタはキャッシュに関するレジスタを有しており、キャッシュに関するレジスタにはキャッシュのワーク領域を設定することができる。よって、該ロードされた領域をキャッシュのワーク領域から外すことにより、該ロードされた領域がロックされる。また、ＯＳ１４１は、現指定先ＣＰＵと次指定先ＣＰＵとをマスタＣＰＵ１０１に設定する。
【００４０】
図６は、周期実行プログラムが実行される例を示す説明図である。周期実行プログラムの実行コード５０２がロックされると、ＯＳ１４１は実行待ちキュー５０１を監視し、実行待ちキュー５０１にタスクが積まれると、ＯＳ１４１は（１）タスクＧを取り出す。
【００４１】
ここで、実行待ちキュー５０１とは、マスタＯＳ１４１であるＯＳ１４１が有するキューである。たとえば、ユーザ操作により割り当て指示が発生したタスクは実行待ちキュー５０１に入れられ、ＯＳ１４１が実行待ちキュー５０１からタスクを取り出し、ＯＳ１４１がどのＣＰＵに割り当てるかを決定する。
【００４２】
そして、ＯＳ１４１はタスクＧが周期実行プログラムであるか否かを識別情報１５３に基づいて判断する。タスクＧは周期実行プログラムであるため、ＯＳ１４１は現指定先ＣＰＵへタスクＧを割り当て、ＯＳ１４１が（２）タスクＧを実行する。
【００４３】
図７は、周期実行プログラムでないタスクの割り当てを示す説明図である。図７では、マスタＣＰＵ１０１にタスクＡが割り当てられ、スレーブＣＰＵ１０２にタスクＢとタスクＥとが割り当てられ、スレーブＣＰＵ１０３にタスクＣが割り当てられ、スレーブＣＰＵ１０４にタスクＤが割り当てられる。
【００４４】
そして、ＯＳ１４１が、（１）実行待ちキュー５０１からタスクを取り出し、取り出したタスクが周期実行プログラムであるか否かを識別情報１５３に基づいて判断する。ここで、取り出したタスクがタスクＦであり、タスクＦは周期実行プログラムではない。ＯＳ１４１がタスクＦを任意のＣＰＵに割り当てる。ここでは、（２）タスクＦはマスタＣＰＵ１０１に割り当てられる。
【００４５】
図８は、命令コードサイズの合計値の算出例を示す説明図である。つぎに、ＯＳ１４１が、（３）各ＣＰＵの合計命令コードサイズをサイズテーブル１５２に基づいて算出する。タスクＡの命令コードサイズが３００であり、タスクＦの命令コードサイズが２５０であるため、マスタＣＰＵ１０１の合計命令コードサイズは５５０である。タスクＢの命令コードサイズが３００であり、タスクＥの命令コードサイズが１５０であるため、スレーブＣＰＵ１０２の合計命令コードサイズは４５０である。
【００４６】
タスクＣの命令コードサイズが４００であるため、スレーブＣＰＵ１０３の合計命令コードサイズは４００である。タスクＤの命令コードサイズが４５０であるため、スレーブＣＰＵ１０４の合計命令コードサイズは４５０である。
【００４７】
つぎに、ＯＳ１４１は合計命令コードサイズが現指定先ＣＰＵよりも小さいＣＰＵを特定する。すなわち、ＯＳ１４１はキャッシュミスヒット率が現指定先ＣＰＵよりも小さいＣＰＵを特定することができる。ここでは、スレーブＣＰＵ１０２〜スレーブＣＰＵ１０４が特定される。
【００４８】
特定されたＣＰＵが複数であるため、たとえば、ＯＳ１４１は合計命令コードサイズが最も低いスレーブＣＰＵ１０３を選択する。すなわち、ＯＳ１４１はキャッシュミスヒット率が現指定先ＣＰＵよりも小さいＣＰＵのうち、最もキャッシュミスヒット率が小さいスレーブＣＰＵ１０３を特定することができる。ＯＳ１４１は（４）特定したスレーブＣＰＵ１０３を次指定先ＣＰＵに設定する。
【００４９】
図９は、実行コード５０２の移動例を示す説明図である。つぎに、ＯＳ１４１が、（５）次指定先ＣＰＵであるスレーブＣＰＵ１０３に実行の一時停止を指示する。そして、ＯＳ１４３（次指定先ＣＰＵであるスレーブＣＰＵ１０３上で動作するＯＳ）がタスクＣの実行を一時停止する。
【００５０】
ＯＳ１４１が、（６）現指定先ＣＰＵの命令キャッシュから次指定先ＣＰＵの命令キャッシュに周期実行プログラムの実行コード５０２を移動させる移動指示をスヌープコントローラ１０５へ通知する。該移動指示では、移動元が現指定先ＣＰＵの命令キャッシュであり、移動先が次指定先ＣＰＵの命令キャッシュであり、移動対象が実行コード５０２である。
【００５１】
そして、スヌープコントローラ１０５が移動指示を受け付けると、スヌープコントローラ１０５は（７）周期実行プログラムの実行コード５０２を現指定先ＣＰＵの命令キャッシュから次指定先ＣＰＵの命令キャッシュに移動させる。スヌープコントローラ１０５は（８）ＯＳ１４１に移動完了を通知する。
【００５２】
図１０は、実行コード５０２が格納されている領域をロックさせる例を示す説明図である。つぎに、ＯＳ１４１が（９）次指定先ＣＰＵの命令キャッシュの領域のうち実行コード５０２が格納されている領域をロックさせるロック指示を次指定先ＣＰＵに通知する。ＯＳ１４３が（１０）レジスタ設定により実行オブジェクトをロックし、ＯＳ１４３が（１１）ロック完了をＯＳ１４１に通知する。
【００５３】
ＯＳ１４１が、ロック完了を受け付けると、（１２）一時停止解除指示を次指定先ＣＰＵへ通知する。そして、ＯＳ１４３がタスクＣの一時停止を解除する。ＯＳ１４１が（１３）レジスタ設定によりマスタＣＰＵ１０１の命令キャッシュ１１１のロックを解除する。ＯＳ１４１が（１４）現指定先ＣＰＵをスレーブＣＰＵ１０３に設定する。
【００５４】
（ＯＳ１４１の制御処理手順）
図１１および図１２は、ＯＳ１４１の制御処理手順を示すフローチャートである。まず、ＯＳ１４１が、サイズテーブル１５２と識別情報１５３とを取得し（ステップＳ１１０１）、現指定先ＣＰＵおよび次指定先ＣＰＵにマスタＣＰＵ１０１を設定する（ステップＳ１１０２）。つぎに、ＯＳ１４１が、マスタＣＰＵ１０１の命令キャッシュ１１１に周期実行プログラムの実行コードをロードし（ステップＳ１１０３）、ロードした実行コードの領域をロックする（ステップＳ１１０４）。
【００５５】
つぎに、ＯＳ１４１が、マスタＯＳの実行待ちキュー５０１が空か否かを判断し（ステップＳ１１０５）、マスタＯＳの実行待ちキュー５０１が空の場合（ステップＳ１１０５：Ｙｅｓ）、ステップＳ１１０５に戻る。なお、マスタＯＳはＯＳ１４１である。一方、ＯＳ１４１が、マスタＯＳの実行待ちキュー５０１が空でないと判断した場合（ステップＳ１１０５：Ｎｏ）、マスタＯＳの実行待ちキュー５０１からタスクを取り出す（ステップＳ１１０６）。
【００５６】
つぎに、ＯＳ１４１が、取り出したタスクが周期実行プログラムか否かを判断する。（ステップＳ１１０７）。ＯＳ１４１が、取り出したタスクが周期実行プログラムであると判断した場合（ステップＳ１１０７：Ｙｅｓ）、現指定先ＣＰＵへ取り出したタスクを割り当て（ステップＳ１１０８）、ステップＳ１１０５へ移行する。
【００５７】
一方、ＯＳ１４１が、取り出したタスクが周期実行プログラムでないと判断した場合（ステップＳ１１０７：Ｎｏ）、取り出したタスクを任意のＣＰＵへ割り当てる（ステップＳ１１０９）。そして、ＯＳ１４１が、ＣＰＵごとに割り当てられたタスクの命令コードサイズの合計値を算出する（ステップＳ１１１０）。
【００５８】
ＯＳ１４１が、算出結果が現指定先ＣＰＵよりも小さいＣＰＵを特定する（ステップＳ１１１１）。すなわち、キャッシュミスヒット率が現指定先ＣＰＵよりも低いＣＰＵを特定する。そして、ＯＳ１４１が、算出結果が現指定先ＣＰＵよりも小さいＣＰＵを特定したか否かを判断し（ステップＳ１１１２）、該小さいＣＰＵを特定していないと判断した場合（ステップＳ１１１２：Ｎｏ）、ステップＳ１１０５へ戻る。
【００５９】
一方、ＯＳ１４１が、該小さいＣＰＵを特定したと判断した場合（ステップＳ１１１２：Ｙｅｓ）、特定したＣＰＵを次指定先ＣＰＵに設定する（ステップＳ１１１３）。たとえば、複数のＣＰＵを特定した場合、最も算出結果が小さいＣＰＵを次指定先ＣＰＵに指定する。これにより、最もキャッシュ使用量が少ないＣＰＵに周期実行プログラムを格納することができる。これにより、他のタスクの実行への影響を最小限にすることができる。
【００６０】
そして、ＯＳ１４１が、次指定先ＣＰＵへ実行一時停止指示を通知する（ステップＳ１１１４）。つぎに、ＯＳ１４１が、現指定先ＣＰＵの命令キャッシュから次指定先ＣＰＵの命令キャッシュへの周期実行プログラムの移動指示をスヌープコントローラ１０５へ通知し（ステップＳ１１１５）、スヌープコントローラ１０５から移動完了の通知を受け付けたか否かを判断する（ステップＳ１１１６）。ＯＳ１４１が、スヌープコントローラ１０５から移動完了の通知を受け付けていないと判断した場合（ステップＳ１１１６：Ｎｏ）、ステップＳ１１１６に戻る。
【００６１】
ＯＳ１４１が、スヌープコントローラ１０５から移動完了の通知を受け付けたと判断した場合（ステップＳ１１１６：Ｙｅｓ）、周期実行プログラムがロードされた領域をロックさせる指示を次指定先ＣＰＵへ通知する（ステップＳ１１１７）。そして、ＯＳ１４１が、次指定先ＣＰＵからロック完了を受け付けたか否かを判断する（ステップＳ１１１８）。ＯＳ１４１が、次指定先ＣＰＵからロック完了を受け付けていないと判断した場合（ステップＳ１１１８：Ｎｏ）、ステップＳ１１１８へ戻る。
【００６２】
ＯＳ１４１が、次指定先ＣＰＵからロック完了を受け付けたと判断した場合（ステップＳ１１１８：Ｙｅｓ）、次指定先ＣＰＵへ一時停止解除指示を通知する（ステップＳ１１１９）。そして、ＯＳ１４１が、現指定先ＣＰＵの命令キャッシュのロックを解除させる解除指示を現指定先ＣＰＵへ通知する（ステップＳ１１２０）。
【００６３】
つぎに、ＯＳ１４１が、次指定先ＣＰＵからロック完了を受け付けたか否かを判断する（ステップＳ１１２１）。ＯＳ１４１が、次指定先ＣＰＵからロック完了を受け付けていないと判断した場合（ステップＳ１１２１：Ｎｏ）、ステップＳ１１２１へ戻る。ＯＳ１４１が、次指定先ＣＰＵからロック完了を受け付けたと判断した場合（ステップＳ１１２１：Ｙｅｓ）、現指定先ＣＰＵを次指定先ＣＰＵに設定し（ステップＳ１１２２）、ステップＳ１１０５へ戻る。
【００６４】
（スヌープコントローラ１０５による移動処理）
図１３は、スヌープコントローラ１０５による移動処理を示すフローチャートである。まず、スヌープコントローラ１０５が、移動指示を受け付けたか否かを判断し（ステップＳ１３０１）、移動指示を受け付けていないと判断した場合（ステップＳ１３０１：Ｎｏ）、ステップＳ１３０１へ戻る。
【００６５】
スヌープコントローラ１０５が、移動指示を受け付けたと判断した場合（ステップＳ１３０１：Ｙｅｓ）、現指定先ＣＰＵの命令キャッシュから次指定先ＣＰＵの命令キャッシュへ周期実行プログラムの実行コードを移動する（ステップＳ１３０２）。つぎに、スヌープコントローラ１０５が、移動完了をマスタＯＳへ通知し（ステップＳ１３０３）、ステップＳ１３０１へ戻る。
【００６６】
（次指定先ＣＰＵによる書き込み禁止設定処理）
図１４は、次指定先ＣＰＵによる書き込み禁止設定処理を示すフローチャートである。まず、次指定先ＣＰＵが、ロック指示を受け付けたか否かを判断する（ステップＳ１４０１）。次指定先ＣＰＵが、ロック指示を受け付けていないと判断した場合（ステップＳ１４０１：Ｎｏ）、ステップＳ１４０１へ戻る。
【００６７】
一方、次指定先ＣＰＵが、ロック指示を受け付けたと判断した場合（ステップＳ１４０１：Ｙｅｓ）、キャッシュに関するレジスタを設定することにより指定領域をロックする（ステップＳ１４０２）。そして、次指定先ＣＰＵが、ロック完了をマスタＯＳへ通知する（ステップＳ１４０３）。なお、マスタＯＳはＯＳ１４１である。
【００６８】
（現指定先ＣＰＵによる一時停止処理）
図１５は、現指定先ＣＰＵによる一時停止処理を示すフローチャートである。まず、現指定先ＣＰＵが、ロック解除指示を受け付けたか否かを判断する（ステップＳ１５０１）。現指定先ＣＰＵが、ロック解除指示を受け付けていないと判断した場合（ステップＳ１５０１：Ｎｏ）、ステップＳ１５０１へ戻る。
【００６９】
一方、現指定先ＣＰＵが、ロック解除指示を受け付けたと判断した場合（ステップＳ１５０１：Ｙｅｓ）、キャッシュに関するレジスタを設定することにより指定領域のロックを解除する（ステップＳ１５０２）。そして、現指定先ＣＰＵが、解除完了をマスタＯＳへ通知する（ステップＳ１５０３）。
【００７０】
以上説明したように、マルチコアプロセッサシステム、制御プログラム、および制御方法によれば、周期実行プログラムを格納しているＣＰＵよりもキャッシュミスヒット率が低いＣＰＵのキャッシュに周期実行プログラムを移動させる。さらに、該低いＣＰＵのキャッシュのうち、周期実行プログラムを格納した領域を書き込み禁止領域に設定する。これにより、周期実行プログラムがキャッシュに常駐し、キャッシュから追い出されないため、周期実行プログラムが再ロードされるのを防止することができる。さらに、周期実行プログラムがＣＰＵのキャッシュに常駐したままであっても、該ＣＰＵに割り当てられた他のタスクの実行に与える影響を小さくすることができる。すなわち、各ＣＰＵに割り当てられた周期実行プログラムと異なる他のタスクの実行時にキャッシュミスが発生するのを抑制することができ、ＣＰＵの性能が低下するのを防止することができる。
【符号の説明】
【００７１】
１００  マルチコアプロセッサシステム
１０５  スヌープコントローラ
１１１，１１２，１１３，１１４  命令キャッシュ
【図１】
0005516728.tif 000002
【図２】
0005516728.tif 000003
【図３】
0005516728.tif 000004
【図４】
0005516728.tif 000005
【図５】
0005516728.tif 000006
【図６】
0005516728.tif 000007
【図７】
0005516728.tif 000008
【図８】
0005516728.tif 000009
【図９】
0005516728.tif 000010
【図１０】
0005516728.tif 000011
【図１１】
0005516728.tif 000012
【図１２】
0005516728.tif 000013
【図１３】
0005516728.tif 000014
【図１４】
0005516728.tif 000015
【図１５】
0005516728.tif 000016