(57)【要約】  メモリコントローラが、マルチコアプロセッサのうちのＣＰＵ（＃０）で実行中のアプリ（＃０）からマルチコアプロセッサの各ＣＰＵで共有する共有メモリへのアクセスの傾向情報が許容範囲内であるか否かを判断する。アクセスの傾向情報が所定許容範囲内でない場合、アプリ（＃０）またはＣＰＵ（＃０）の処理が通常の処理と異なる処理を行っている可能性があるため、アプリ（＃０）またはＣＰＵ（＃０）がエラー状態である可能性がある。メモリコントローラが、アクセスの傾向情報が所定許容範囲内でないと判断した場合、ＣＰＵ（＃０）に割当済のアプリ（＃０）を除く他のアプリケーションアプリ（＃２）をＣＰＵ（＃０）からＣＰＵ（＃１）に移行させる移行処理を制御する。アプリ（＃０）またはＣＰＵ（＃０）のエラーによる影響がアプリ（＃２）に波及するのを防止できる。
2012101759.tif 000002
【特許請求の範囲】
【請求項１】
第１のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が実行中の第１アプリケーションが正常に動作しているか否かを前記第１アプリケーションの共有資源へのアクセスログに基づいて判断し、
前記第１アプリケーションが正常動作していないと判断されたときに、前記第１のＣＰＵによって実行される前記第１アプリケーション以外の第２アプリケーションを第２のＣＰＵに実行させること
を特徴とするプロセッサ処理方法。
【請求項２】
前記第１アプリケーションが正常に動作していないと判断されたときに、前記第１アプリケーションの前記共有資源へのアクセスの優先度を下げること
を特徴とする請求項１に記載のプロセッサ処理方法。
【請求項３】
前記第１アプリケーションが正常に動作していないと複数回判断されたときに、前記第２アプリケーションを前記第２のＣＰＵに実行させること
を特徴とする請求項１または請求項２に記載のプロセッサ処理方法。
【請求項４】
前記第１アプリケーションが正常に動作していると判断されたときに、前記第１アプリケーションが正常に動作していないと過去に判断されているときには、前記第１アプリケーションの前記共有資源へのアクセスの優先度を上げること
を特徴とする請求項１、請求項２または請求項３に記載のプロセッサ処理方法。
【請求項５】
前記第１アプリケーションが正常に動作していないと判断されたときに、前記第１のＣＰＵに信号が供給されること
を特徴とする請求項１乃至請求項４の何れか一に記載のプロセッサ処理方法。
【請求項６】
前記第１のＣＰＵが前記信号に対する応答を送信したときには、前記第１のＣＰＵが前記第２アプリケーションを前記第２のＣＰＵに受け渡すこと
を特徴とする請求項５に記載のプロセッサ処理方法。
【請求項７】
前記第１のＣＰＵが前記信号に対する応答を送信しないときには、前記第２のＣＰＵが前記第２アプリケーションを前記第２のＣＰＵに退避させること
を特徴とする請求項５に記載のプロセッサ処理方法。
【請求項８】
第１のＣＰＵが実行中の第１アプリケーションが正常に動作しているか否かを前記第１アプリケーションの共有資源へのアクセスログに基づいて判断し、
前記第１アプリケーションが正常に動作していないと判断されたときに、前記第１アプリケーションの前記共有資源へのアクセスの優先度を下げること
を特徴とするプロセッサ処理方法。
【請求項９】
複数のＣＰＵと、
前記複数のＣＰＵで共有される共有資源へのアクセスを制御する制御装置と、を備え、
前記制御装置が、
第１のＣＰＵが実行中の第１アプリケーションが正常に動作しているか否かを前記第１アプリケーションの前記共有資源へのアクセスログに基づいて判断し、
前記第１アプリケーションが正常動作していないと判断されたときに、前記第１のＣＰＵによって実行される前記第１アプリケーション以外の第２アプリケーションを第２のＣＰＵに実行させること
を特徴とするプロセッサシステム。
【請求項１０】
前記第１アプリケーションが正常に動作していないと判定されたときに、前記第１アプリケーションの前記共有資源へアクセスの優先度が下げられること
を特徴とする請求項９に記載のプロセッサシステム。
【請求項１１】
前記第１アプリケーションが正常に動作していると判定されたときに、前記第１アプリケーションが正常に動作していないと過去に判定されているときには、前記第１アプリケーションの前記共有資源へのアクセスの優先度が上げられること
を特徴とする請求項９または１０に記載のプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、共有資源へのアクセスを制御するプロセッサ処理方法、およびプロセッサシステムに関する。
【背景技術】
【０００２】
従来、マルチコアプロセッサシステムには、共有メモリアーキテクチャと分散メモリアーキテクチャとの２種類がある。共有メモリアーキテクチャでは、マルチコアプロセッサの複数のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）でメインメモリが共有される。分散メモリアーキテクチャでは、マルチコアプロセッサの各ＣＰＵにメインメモリが備えられている。組み込みシステムにおいては低コストで実装できる共有メモリアーキテクチャが主に用いられる。【０００３】
共有メモリアーキテクチャでは、各ＣＰＵでそれぞれアプリケーションを実行している状態において、２つのＣＰＵからメモリへのアクセスリクエストがコンフリクトすると、一方のＣＰＵはメモリへのアクセスを待ち、他方のＣＰＵはメモリにアクセスする。さらに、他方のＣＰＵが膨大な回数のメモリアクセスを行っている場合、一方のＣＰＵが待機し続けなければならない。そこで、各ＣＰＵからのメモリアクセス回数をカウントし、所定回数を超えた場合に、メモリアクセスを制限する技術が知られている（たとえば、下記特許文献１，２を参照。）。【０００４】
また、１ＣＰＵ上でアプリケーションの実行によって障害が発生し、無限に共有メモリへのアクセスを行う状況となると、１ＣＰＵ上でアプリケーションの実行によってバグが発生した場合、無限に共有メモリへのアクセスを行うことがある。そこで、各ＣＰＵが、該ＣＰＵに割り当てられたアプリケーションの実行時間に基づいてアプリケーションの実行に障害が発生したか否かを判断する技術（従来技術１）が知られている（たとえば、下記特許文献３を参照。）。【０００５】
さらに、共有メモリアーキテクチャにおいて、複数のＣＰＵが接続されるバス調停回路が各ＣＰＵから送信される信号に基づいてエラー状態であるＣＰＵを特定する技術（従来技術２）が知られている（たとえば、下記特許文献４，５を参照。）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平９−２８２２５２号公報
【特許文献２】特開２００４−１３３４９６号公報
【特許文献３】特開２００６−２０２０７６号公報
【特許文献４】特開２００４−１７１０７２号公報
【特許文献５】特開平６−１２４２４８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、従来技術１では、アプリケーションの割当先ＣＰＵがエラー状態である影響で、アプリケーションの実行時間が長くなる場合、あらたに割当先ＣＰＵに割り当てられるアプリケーションもすべてエラーとなってしまう問題点があった。また、割当先ＣＰＵに複数のアプリケーションが割り当てられている場合、それぞれの実行時間は長くなる。【０００８】
また、従来技術２では、バス調停回路によりエラーとなっているＣＰＵを特定することはできるが、ＣＰＵに割り当てられているアプリケーションのエラーと共にエラーとなってしまう問題点があった。【０００９】
本発明は、上述した従来技術による問題点を解消するため、アプリケーションまたは該アプリケーションの割当先ＣＰＵのエラーの影響が他のアプリケーションに波及するのを防止することができるプロセッサ処理方法、およびプロセッサシステムを提供することを目的とする。また、本発明は、アプリケーションまたは該アプリケーションの割当先ＣＰＵのエラーの影響が他のＣＰＵに波及するのを防止することができるプロセッサ処理方法、およびプロセッサシステムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明の一の観点によれば、第１のＣＰＵが実行中の第１アプリケーションが正常に動作しているか否かを第１アプリケーションの共有資源へのアクセスログに基づいて判断し、前記第１アプリケーションが正常動作していないと判断されたときに、前記第１のＣＰＵによって実行される前記第１アプリケーション以外の第２アプリケーションを第２のＣＰＵに実行させるプロセッサ処理方法、およびプロセッサシステムを提供する。【００１１】
本発明の他の観点によれば、第１のＣＰＵが実行中の第１アプリケーションが正常に動作しているか否かを第１アプリケーションの共有資源へのアクセスログに基づいて判断し、前記第１アプリケーションが正常に動作していないと判断されたときに、前記第１アプリケーションのメモリアクセスの優先度を下げるプロセッサ処理方法、およびプロセッサシステムを提供する。
【発明の効果】
【００１２】
本プロセッサ処理方法、およびプロセッサシステムによれば、アプリケーションまたは該アプリケーションの割当先ＣＰＵのエラーの影響が他のアプリケーションに波及するのを防止することができるという効果を奏する。また、本プロセッサ処理方法、およびプロセッサシステムによれば、アプリケーションまたは該アプリケーションの割当先ＣＰＵのエラーの影響が他のＣＰＵに波及するのを防止することができるという効果を奏する。
【図面の簡単な説明】
【００１３】
【図１】図１は、本発明の一の例を示す説明図である。
【図２】図２は、本発明の他の例を示す説明図である。
【図３】図３は、アクセスの傾向の一の例を示す説明図である。
【図４】図４は、アクセスの傾向の他の例を示す説明図である。
【図５】図５は、マルチコアプロセッサシステムのハードウェアを示すブロック図である。
【図６】図６は、管理テーブルの一例を示す説明図である。
【図７】図７は、負荷情報の一例を示す説明図である。
【図８】図８は、メモリコントローラ５０９のブロック図を示す説明図である。
【図９】図９は、アクセス回数に関するアクセスログの一例を示す説明図である。
【図１０】図１０は、実施例１にかかるアクセスログ９００の一例を示す説明図である。
【図１１】図１１は、アプリ＃２が移行される例を示す説明図である。
【図１２】図１２は、ソフトウェアリセットの一例を示す説明図である。
【図１３】図１３は、ハードウェアリセットの一例を示す説明図である。
【図１４】図１４は、アクセス回数に関するアクセスログの更新処理の更新処理手順例を示すフローチャートである。
【図１５】図１５は、実施例１にかかるメモリコントローラ５０９による制御処理の制御処理手順を示すフローチャートである。
【図１６】図１６は、実施例１にかかるメモリコントローラ５０９による制御処理の制御処理手順を示すフローチャートである。
【図１７】図１７は、メモリコントローラ５０９がアクセスの比率を下げる例を示す説明図である。
【図１８】図１８は、実施例２でのアクセスログ９００を示す説明図（その１）である。
【図１９】図１９は、実施例２でのアクセスログ９００を示す説明図（その２）である。
【図２０】図２０は、実施例２にかかるメモリコントローラ５０９による制御処理の制御処理手順を示すフローチャートである。
【図２１】図２１は、実施例２にかかるメモリコントローラ５０９による制御処理の制御処理手順を示すフローチャートである。
【図２２】図２２は、メモリ番地に関するアクセスログの一例を示す説明図である。
【図２３】図２３は、実施例３でのアクセスログ２２００を示す説明図である。
【図２４】図２４は、メモリ番地に関するアクセスログの更新処理の更新処理手順例を示すフローチャートである。
【図２５】図２５は、実施例４でのアクセスログを示す説明図（その１）である。
【図２６】図２６は、実施例４でのアクセスログを示す説明図（その２）である。
【発明を実施するための形態】
【００１４】
以下に、本発明にかかるプロセッサ処理方法、およびプロセッサシステムの好適な実施の形態を詳細に説明する。ここでは、プロセッサシステムとして、マルチコアプロセッサシステムを例に挙げる。マルチコアプロセッサシステムにおいて、マルチコアプロセッサとはコアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００１５】
また、本実施の形態では、マルチコアプロセッサの各ＣＰＵに共有される共有資源として共有メモリを例に挙げ、メモリコントローラがプロセッサ処理方法の各工程を実行する処理を例に挙げて説明する。ＣＰＵが本実施の形態で説明するプロセッサ処理を実行すると、該ＣＰＵに障害が発生している場合、該障害を検出することができない。そこで、周辺デバイスであり、マルチコアプロセッサで共有する共有メモリへのアクセスを制御するメモリコントローラが本実施の形態で説明するプロセッサ処理を行う。これにより、マルチコアプロセッサのうちのいずれのＣＰＵに障害が発生しても該障害を検出することができる。また、メモリコントローラの障害については、各ＣＰＵが共有メモリへのアクセスリクエストを行うことで、検出することができる。
【００１６】
図１は、本発明の一の例を示す説明図である。メモリコントローラが、ＣＰＵ＃０で実行中のアプリ＃０からマルチコアプロセッサの各ＣＰＵで共有する共有メモリへのアクセスの傾向情報が許容範囲内であるか否かを判断する。
【００１７】
メモリコントローラが、アクセスの傾向情報が許容範囲内でないと判断した場合、ＣＰＵ＃０に割当済のアプリ＃０を除く他のアプリケーション（アプリ＃２）を、ＣＰＵ＃０からマルチコアプロセッサのうちの他のＣＰＵであるＣＰＵ＃１に移行させる移行処理を制御する。
【００１８】
図２は、本発明の他の例を示す説明図である。メモリコントローラが、マルチコアプロセッサのうちのＣＰＵ＃０で実行中のアプリ＃０からマルチコアプロセッサの各ＣＰＵで共有する共有メモリへのアクセスの傾向情報が許容範囲内であるか否かを判断する。メモリコントローラが、アクセスの傾向情報が許容範囲内でないと判断した場合、アプリ＃０から共有メモリへのアクセスの比率を判断前よりも下げる。
【００１９】
図３は、アクセスの傾向の一の例を示す説明図である。図３では、あるアプリケーションの正常動作時に、所定時間以内に何回共有メモリへアクセスするかを示している。たとえば、ブラウザアプリケーションであれば、共有メモリへ１秒間に１０万回程度アクセスするなど、１秒間に何回程度共有メモリへアクセスするかはアプリケーションによってそれぞれ異なる。
【００２０】
たとえば、あるアプリケーションの正常動作時には、所定時間内に共有メモリへ平均１００〜３００回アクセスするとする。しかしながら、該アプリケーションを実行中の所定時間内に共有メモリへ５００回アクセスしていれば（図中（ａ））、該アプリケーションがエラー状態である可能性がある。
【００２１】
さらに、たとえば、該アプリケーションを実行中の所定時間内に共有メモリへアクセスしていなければ（アクセス回数が０回、図中（ｂ））、該アプリケーションがハング状態である可能性がある。たとえば、平均値から±１０［％］までのアクセス回数を許容範囲として、設計時に設計者が定義する。本実施の形態では、所定時間は、たとえば、一のタイマ割り込みから次のタイマ割り込みまでの時間である。
【００２２】
図４は、アクセスの傾向の他の例を示す説明図である。図４では、あるアプリケーションの正常動作時に、所定時間以内に各メモリ番地に何回アクセスするかの傾向を示している。ここで、メモリ番地とは、論理アドレスを示している。図４では、あるアプリケーションが正常動作時にアクセスするメモリ番地が０ｘ００００００００ＦＦＦＦ〜０ｘ０００ＦＦＦＦＦＦＦＦＦであることを示している。
【００２３】
たとえば、該アプリケーションを実行中に、０ｘ００００００００ＦＦＦＦ〜０ｘ０００ＦＦＦＦＦＦＦＦＦ以外のメモリ番地（図中（ａ），（ｂ））に何度もアクセスしていれば、該アプリケーションがエラーコードを読み出している可能性がある。すなわち、該アプリケーションがエラー状態である可能性がある。メモリ番地に関する許容範囲の定義については、後述する。
【００２４】
（マルチコアプロセッサシステムのハードウェア）
図５は、マルチコアプロセッサシステムのハードウェアを示すブロック図である。マルチコアプロセッサシステム５００は、ＣＰＵ＃０と、ＣＰＵ＃１と、ＣＰＵ＃２と、１次キャッシュ５０１と、１次キャッシュ５０２と、１次キャッシュ５０３と、スヌープ回路５０４と、２次キャッシュ５０５と、を有している。さらに、マルチコアプロセッサシステム５００は、ディスプレイ５０６と、キーボード５０７と、Ｉ／Ｆ５０８（ＩｎｔｅｒＦａｃｅ）と、メモリコントローラ５０９と、共有メモリ５１０と、ＰＭＵ５１１と、タイマ５１７と、を有している。
【００２５】
２次キャッシュ５０５と、Ｉ／Ｆ５０８と、メモリコントローラ５０９と、ＰＭＵ５１１とは、バス５１８を介して接続されている。キーボード５０７と、ディスプレイ５０６と、共有メモリ５１０とは、メモリコントローラ５０９を介して各部と接続されている。
【００２６】
まず、ＣＰＵ＃０とＣＰＵ＃１とＣＰＵ＃２とは、それぞれレジスタとコアとを有している。各レジスタには、ＰＣ（Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ）やリセットレジスタがある。リセットレジスタの値は通常０であり、１にセットされると該リセットレジスタを有するＣＰＵのリセット処理が行われる。ＣＰＵ＃０はマスタＣＰＵであり、マルチコアプロセッサシステム５００の全体の制御を司り、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）５２１を実行する。
【００２７】
ＯＳ５２１はマスタＯＳであり、アプリケーションをマルチコアプロセッサのうちのいずれのＣＰＵに割り当てるかを制御する。さらに、ＯＳ５２１は該ＣＰＵ＃０に割り当てられたアプリケーションを実行する。ＯＳ５２１はスケジューラを有し、該スケジューラはＣＰＵ＃０に割り当てられたアプリケーションを切り替えて実行する。
【００２８】
ＣＰＵ＃１はスレーブＣＰＵであり、ＯＳ５２２を実行する。ＯＳ５２２はスレーブＯＳであり、ＣＰＵ＃１に割り当てられたアプリケーションを実行する。ＯＳ５２２はスケジューラを有し、該スケジューラはＣＰＵ＃１に割り当てられたアプリケーションを切り替えて実行する。
【００２９】
ＣＰＵ＃２はスレーブＣＰＵであり、ＯＳ５２３を実行する。ＯＳ５２３はスレーブＯＳであり、ＣＰＵ＃２に割り当てられたアプリケーションを実行する。ＯＳ５２３はスケジューラを有し、該スケジューラはＣＰＵ＃２に割り当てられたアプリケーションを切り替えて実行する。
【００３０】
ＯＳ５２１とＯＳ５２２とＯＳ５２３とは、それぞれレディーキュー５３１とレディーキュー５３２とレディーキュー５３３とを有している。各レディーキューには各ＣＰＵに割り当てられたアプリケーションのコンテキスト情報のポインタが積まれる。コンテキスト情報とは、たとえば、ロードされたアプリケーションの実行状態や該アプリケーション内の変数などが含まれる情報である。各ＯＳはレディーキュー内のコンテキスト情報のポインタを取得し、アプリケーションのコンテキスト情報にアクセスすることで、アプリケーションを直ぐに実行することができる。
【００３１】
ここでは、ＣＰＵ＃０にアプリ＃２とアプリ＃０が割り当てられ、アプリ＃０が実行され、アプリ＃２のコンテキスト情報のポインタがレディーキュー５３１に積まれている。ＣＰＵ＃１にはアプリ＃１が割り当てられ、アプリ＃１が実行されている。ＣＰＵ＃２にはアプリ＃３が割り当てられ、アプリ＃３が実行されている。
【００３２】
ＣＰＵ＃０は、１次キャッシュ５０１とスヌープ回路５０４と２次キャッシュ５０５とを介して各部に接続されている。ＣＰＵ＃１は、１次キャッシュ５０２とスヌープ回路５０４と２次キャッシュ５０５とを介して各部に接続されている。ＣＰＵ＃２は、１次キャッシュ５０３とスヌープ回路５０４と２次キャッシュ５０５とを介して各部に接続されている。１次キャッシュ５０１と１次キャッシュ５０２と１次キャッシュ５０３とは、それぞれキャッシュメモリとキャッシュコントローラとを有している。
【００３３】
１次キャッシュ５０１はＯＳ５２１が実行するアプリケーションから共有メモリ５１０への書込処理を一時的に記憶する。１次キャッシュ５０１は、共有メモリ５１０から読み出されたデータを一時的に記憶する。また、１次キャッシュ５０２はＯＳ５２２が実行するアプリケーションから共有メモリ５１０への書込処理を一時的に記憶する。１次キャッシュ５０２は、共有メモリ５１０から読み出されたデータを一時的に記憶する。また、１次キャッシュ５０３はＯＳ５２３が実行するアプリケーションから共有メモリ５１０への書込処理を一時的に記憶する。１次キャッシュ５０３は、共有メモリ５１０から読み出されたデータを一時的に記憶する。
【００３４】
スヌープ回路５０４は、１次キャッシュ５０１〜１次キャッシュ５０３とで共有するデータがいずれかの１次キャッシュで更新された場合、該更新を検出し、他の１次キャッシュの該データも更新する。
【００３５】
２次キャッシュ５０５は、キャッシュメモリとキャッシュコントローラとを有している。２次キャッシュ５０５では、１次キャッシュ５０１や１次キャッシュ５０２から追い出されたデータを記憶する。２次キャッシュ５０５では、ＯＳ５２１とＯＳ５２２とで共有するデータを記憶する。２次キャッシュ５０５は、１次キャッシュ５０１や１次キャッシュ５０２よりも、記憶容量が大きくかつＣＰＵからのアクセス速度が遅い。２次キャッシュ５０５は共有メモリ５１０より、記憶容量が小さくかつＣＰＵからのアクセス速度が速い。
【００３６】
ディスプレイ５０６は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。さらに、ディスプレイ５０６は、タッチパネルであり、数字、各種指示などの入力のためのキーを有し、データの入力を行ってもよい。ディスプレイ５０６は、たとえば、ＴＦＴ液晶ディスプレイなどを採用することができる。
【００３７】
キーボード５０７は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード５０７は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００３８】
Ｉ／Ｆ５０８は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークに接続され、ネットワークを介して他の装置に接続される。そして、Ｉ／Ｆ５０８は、ネットワークと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ５０８には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００３９】
ＰＭＵ５１１は各部に電源電圧を供給する。ここで、たとえば、ＰＭＵ５１１は、各ＣＰＵやメモリコントローラ５０９からＣＰＵの識別情報を受信すると、受信したＣＰＵの識別情報に基づいて識別情報で示されるＣＰＵの電源を遮断し、その後、再投入する機能を有する。これにより、該ＣＰＵはハードウェアリセットされる。タイマ５１７は、時刻をカウントし、所定時間ごとにメモリコントローラ５０９へ割り込みを行う（タイマ割り込み）。
【００４０】
共有メモリ５１０は、ＣＰＵ＃０とＣＰＵ＃１とＣＰＵ＃２とに共有されるメモリであり、具体的には、たとえば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）５１３と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）５１２と、フラッシュＲＯＭ５１４と、フラッシュＲＯＭコントローラ５１５と、フラッシュＲＯＭ５１６と、などを有している。
【００４１】
ＲＯＭ５１３は、ブートシーケンスが記述されたブートローダなどのプログラムを記憶している。ＲＡＭ５１２は、ＣＰＵのワークエリアとして使用される。フラッシュＲＯＭ５１４は、ＯＳ５２１やＯＳ５２２などのシステムソフトウェアやアプリケーションソフトウェアや後述する管理テーブルや負荷情報などを記憶している。たとえば、各ＯＳを更新する場合、マルチコアプロセッサシステム５００は、Ｉ／Ｆ５０８によって新しいＯＳを受信し、フラッシュＲＯＭ５１４に格納されている古いＯＳを、受信した新しいＯＳに更新する。
【００４２】
フラッシュＲＯＭコントローラ５１５は、各ＣＰＵの制御に従ってフラッシュＲＯＭ５１６に対するデータのリード／ライトを制御する。フラッシュＲＯＭ５１６は、フラッシュＲＯＭコントローラ５１５の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム５００を使用するユーザがＩ／Ｆ５０８を通して取得した画像データ、映像データなどである。フラッシュＲＯＭ５１６は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００４３】
バス５１８は図示していないがバス調停回路を有し、バス調停回路は各部からのアクセスを調停する機能を有する。
【００４４】
図６は、管理テーブルの一例を示す説明図である。管理テーブル６００は、各ＣＰＵにいずれのアプリケーションが割り当てられているかを示す説明図である。管理テーブル６００は、ＣＰＵの識別情報の項目６０１と、アプリケーションの識別情報の項目６０２とを有している。ＣＰＵの識別情報の項目６０１には各ＣＰＵの識別情報が登録されている。アプリケーションの識別情報の項目６０２には、ＣＰＵの識別情報の項目６０１に識別情報が登録されているＣＰＵに割り当てられているアプリケーションの識別情報が登録される。
【００４５】
管理テーブル６００は、マスタＣＰＵがアプリケーションをいずれかのＣＰＵに割り当てる際にマスタＣＰＵにより更新される。管理テーブル６００は、各ＣＰＵがアプリケーションを他のＣＰＵにマイグレーションする際に該ＣＰＵによって更新される。管理テーブル６００は、割り当てられたアプリケーションを各ＣＰＵが終了する際に該ＣＰＵにより更新される。管理テーブル６００は、共有メモリ５１０、各ＣＰＵの１次キャッシュ、２次キャッシュ５０５などの記憶装置に記憶されていることとする。
【００４６】
図７は、負荷情報の一例を示す説明図である。負荷情報７００は、アプリケーションの識別情報の項目７０１と、実行時間の項目７０２とを有している。アプリケーションの識別情報の項目７０１には、アプリケーションの識別情報が登録される。実行時間の項目７０２には、アプリケーションの識別情報の項目７０１に識別情報が登録されているアプリケーションの実行時間が登録される。
【００４７】
ここでは、たとえば、メモリコントローラ５０９が、ＣＰＵごとに該ＣＰＵに割り当てられているアプリケーションの実行時間の合計値を負荷情報７００に基づいて算出し、最も合計値が小さいＣＰＵを最も負荷が小さいＣＰＵとして特定する。負荷情報７００は、共有メモリ５１０、各ＣＰＵの１次キャッシュ、２次キャッシュ５０５などの記憶装置に記憶されていることとする。
【００４８】
図５に戻って、メモリコントローラ５０９は、たとえば、ＣＰＵ＃０とＣＰＵ＃１からの共有メモリ５１０へのアクセスを調停する。図８を用いてメモリコントローラ５０９の詳細について説明する。
【００４９】
（メモリコントローラ５０９のブロック図）
図８は、メモリコントローラ５０９のブロック図を示す説明図である。メモリコントローラ５０９は、リクエスト制御部８０１と、アクセスログ解析部８０２と、優先度変更部８０３と、最小負荷ＣＰＵ特定部８０４と、メモリ制御部８０５と、Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）制御部８０６と、を有している。リクエスト制御部８０１〜Ｉ／Ｏ制御部８０６は、具体的には、たとえば、論理回路やＦＦ（Ｆｌｉｐ  Ｆｌｏｐ）などを用いて実現することができる。
【００５０】
また、メモリコントローラ５０９がＣＰＵや記憶装置を有し、リクエスト制御部８０１〜Ｉ／Ｏ制御部８０６の処理がコーディングされたプログラムがメモリコントローラ５０９内の記憶装置に記憶されていることとしてもよい。そして、メモリコントローラ５０９内のＣＰＵが該プログラムを読み出して、該プログラムにコーディングされている処理を実行することとしてもよい。該プログラムは、フラッシュＲＯＭ５１６などのマルチコアプロセッサのいずれかのＣＰＵが読み取り可能な記録媒体に記録され、マルチコアプロセッサのいずれかのＣＰＵによって記録媒体から読み出されることによって実行されてもよい。また、該プログラムは、インターネット等のネットワークを介して配布されてもよい。
【００５１】
リクエスト制御部８０１は、マルチコアプロセッサの各ＣＰＵからのメモリアクセスリクエストを受け付ける。さらに、リクエスト制御部８０１は、共有メモリ５１０から読み出したデータを各ＣＰＵに通知する。
【００５２】
アクセスログ解析部８０２は、第１のＣＰＵが実行中の第１アプリケーションが正常に動作しているか否かを第１アプリケーションのアクセスログに基づいて判断する。最小負荷ＣＰＵ特定部８０４は、マルチコアプロセッサの中から、最小負荷のＣＰＵを特定する。
【００５３】
優先度変更部８０３は、対象アプリケーションが正常に動作していないと判断されたときに、対象アプリケーションから共有メモリ５１０へのアクセスの優先度を判断前よりも下げる。優先度変更部８０３は、前回のタイマ割り込みで対象アプリケーションが正常に動作していないと判断されたが、今回のタイマ割り込みで対象アプリケーションが正常に動作していると判断された場合、該アクセスの優先度を判断前よりも上げる。
【００５４】
メモリ制御部８０５は、各ＣＰＵから受け付けたメモリアクセスリクエストに沿って、共有メモリ５１０にデータを書き込む。メモリ制御部８０５は、各ＣＰＵから受け付けたメモリアクセスリクエストに沿って、共有メモリ５１０からデータを読み出す。
【００５５】
Ｉ／Ｏ制御部８０６は、ディスプレイ５０６やキーボード５０７などのＩ／Ｏデバイスへの出力や該Ｉ／Ｏデバイスからの入力を制御する。具体的には、たとえば、Ｉ／Ｏ制御部８０６は、キーボード５０７から入力されたデータをいずれのＣＰＵへ通知するかを制御する。
【００５６】
メモリコントローラ５０９による共有メモリ５１０へのアクセスについては、公知（たとえば、特開２００５−２７６２３７参照。）であるため詳細な説明を省略する。
【００５７】
つぎに、詳細な処理について、実施例１〜４を用いて説明する。実施例１〜２では、アクセスの傾向情報が共有メモリ５１０へのアクセス回数である場合について説明する。実施例３〜４では、アクセスの傾向情報が共有メモリ５１０へのメモリ番地に関する情報である場合について説明する。
【００５８】
また、実施例１〜４では、タイマ５１７によるタイマ割り込みを検出する都度、各ＣＰＵに割当済のアプリケーションごとにアクセスログを解析することとする。そして、アクセスログに関しては、解析終了後にリセットする。
【００５９】
（実施例１）
実施例１では、メモリコントローラ５０９がマルチコアプロセッサのうちの一のＣＰＵで実行中の対象アプリケーションからマルチコアプロセッサの各ＣＰＵで共有する共有メモリ５１０へのアクセスの傾向情報が許容範囲内であるか否かを判断する。そして、実施例１では、アクセスの傾向情報が許容範囲内でないと判断された場合、一のＣＰＵに割当済の対象アプリケーションを除く他のアプリケーションを、一のＣＰＵからマルチコアプロセッサのうちの他のＣＰＵに移行させる移行処理を制御する。アクセスの傾向情報は、アプリケーションごとにアクセスログとして共有メモリ５１０、各ＣＰＵの１次キャッシュ、２次キャッシュ５０５などの記憶装置に記憶されることとする。
【００６０】
移行処理については、メモリコントローラ５０９が一のＣＰＵから他のアプリケーションを他のＣＰＵに移行させる移行指示を一のＣＰＵに通知する。そして、一のＣＰＵが他のアプリケーションを一のＣＰＵから他のＣＰＵに移行させる。または、移行処理については、メモリコントローラ５０９が一のＣＰＵから他のアプリケーションを他のＣＰＵに移行させる移行指示を他のＣＰＵに通知する。そして、他のＣＰＵが他のアプリケーションを一のＣＰＵから他のＣＰＵに移行させる。
【００６１】
または、移行処理については、メモリコントローラ５０９が、一のＣＰＵへ応答確認を通知し、通知後から所定時間以内に一のＣＰＵから応答がない場合、一のＣＰＵから他のアプリケーションを他のＣＰＵに移行させる移行指示を他のＣＰＵに通知する。そして、他のＣＰＵが他のアプリケーションを一のＣＰＵから他のＣＰＵに移行させる。
【００６２】
一のＣＰＵから応答がないと、一のＣＰＵがエラー状態で動作していない可能性がある。すなわち、一のＣＰＵが移行処理を実行できない可能性があるため、メモリコントローラ５０９は他のＣＰＵに移行処理を実行させる。一のＣＰＵから応答がある場合、メモリコントローラ５０９は一のＣＰＵと他のＣＰＵのいずれか一方に移行処理を実行させればよい。以下の詳細な例では、一のＣＰＵから応答がある場合、メモリコントローラ５０９は一のＣＰＵに移行処理を実行させる。
【００６３】
図９は、アクセス回数に関するアクセスログの一例を示す説明図である。図９では、アプリ＃０のアクセス回数に関するアクセスログ９００の一例を示す。アクセスログ９００は、平均アクセス回数の項目９０１と、許容範囲の項目９０２と、アクセス回数の項目９０３と、優先度の項目９０４と、を有している。
【００６４】
平均アクセス回数の項目９０１には、アプリ＃０が正常動作した場合に所定時間あたりで共有メモリ５１０へアクセスする平均の回数が登録されている。ここで、所定時間とは、解析終了後から次のタイマ割り込みの発生までの時間である。平均アクセス回数は、具体的には、たとえば、アプリ＃０の設計時にＥＳＬ（Ｅｌｅｃｔｒｏｎｉｃ  Ｓｙｓｔｅｍ  Ｌｅｖｅｌ）検証ツールを用いて検証することで特定することができる。図９では、１０００回が登録されている。
【００６５】
許容範囲の項目９０２には、平均アクセス回数の項目９０１に登録されている平均アクセス回数に基づいて、アプリ＃０から共有メモリ５１０へのアクセス回数が正常範囲内であると判断可能な範囲が登録されている。図９では、±１０［％］が登録されている。すなわち、所定時間あたりの平均合計アクセス回数が１０００回であるため、９００回から１１００回までが許容範囲である。
【００６６】
アクセス回数の項目９０３は、所定時間内の現実行でのアプリ＃０に関するアクセス回数が登録される。アクセス回数は、アプリ＃０が割り当てられたＣＰＵ＃０によってカウントされる。優先度の項目９０４は、アプリ＃０の共有メモリ５１０へのアクセスの優先度が登録される。ここでは、優先度の項目９０４には、ＤＥＦＡＵＬＴまたはＬＯＷのうちのいずれか一方が登録される。ＬＯＷはＤＥＦＡＵＬＴ時よりもアクセスの比率が低いことを示している。ＤＥＦＡＵＬＴのアクセス比率とＬＯＷのアクセス比率については、アプリケーションごとに決定されていてもよいし、同一値であってもよい。
【００６７】
まず、メモリコントローラ５０９は、タイマ割り込みを検出すると、各ＣＰＵに割当済のアプリケーションの中から、未解析のアプリケーションを１つ選択する。ここでは、ＣＰＵ＃０に割り当てられているアプリ＃０が選択されることとする。
【００６８】
図１０は、実施例１にかかるアクセスログ９００の一例を示す説明図である。メモリコントローラ５０９が、アクセスログ解析部８０２により、アプリ＃０に関するアクセスログ９００を参照し、アプリ＃０のアクセス回数が許容範囲内であるか否かを判断する。アクセスログ９００のアクセス回数の項目９０３に登録されている値が１２００回である。許容範囲が９００〜１１００である。
【００６９】
よって、アプリ＃０のアクセス回数は許容範囲内でないと判断される。メモリコントローラ５０９が、リクエスト制御部８０１により、アプリ＃０の割当先ＣＰＵを特定し、該割当先ＣＰＵに応答信号を送信して、指定時間以内に特定した割当先ＣＰＵから応答があるか否か判断する。ここでは、ＣＰＵ＃０がアプリ＃０の割当先ＣＰＵであり、メモリコントローラ５０９がＣＰＵ＃０に応答信号を送信する。
【００７０】
応答信号を送信後から所定時間以内にＣＰＵ＃０からメモリコントローラ５０９へ応答信号がある場合、ＣＰＵ＃０は動作可能な状態ではあるが、アプリ＃０またはＯＳ５２１がエラー状態である可能性がある。応答信号を送信後から所定時間以内にＣＰＵ＃０からメモリコントローラ５０９へ応答信号がない場合、ＣＰＵ＃０は動作不能なエラー状態である可能性がある。ここでは、ＣＰＵ＃０からメモリコントローラ５０９へ応答信号がある場合とない場合とを分けて説明する。
【００７１】
＜応答信号あり＞
まず、メモリコントローラ５０９が、応答信号を送信後から所定時間以内にＣＰＵ＃０からの応答信号を受け付けた場合、最小負荷ＣＰＵ特定部８０４により、マルチコアプロセッサのＣＰＵ＃０を除くＣＰＵ＃１とＣＰＵ＃２とから最小負荷のＣＰＵを特定する。具体的には、たとえば、メモリコントローラ５０９がＣＰＵごとに該ＣＰＵに割り当てられているアプリケーションの実行時間の合計値を算出し、最も合計値が小さいＣＰＵを最小負荷のＣＰＵとする。
【００７２】
ＣＰＵ＃１に割当済のアプリケーションの実行時間の合計値は２００［μｓ］であり、ＣＰＵ＃２に割当済のアプリケーションの実行時間の合計値は１［ｍｓ］であるため、ＣＰＵ＃１が最小負荷のＣＰＵとして特定される。ここでは、メモリコントローラ５０９が最小負荷のＣＰＵを特定するが、ＣＰＵ＃０に最小負荷のＣＰＵを特定させてもよい。
【００７３】
そして、メモリコントローラ５０９が、リクエスト制御部８０１により、ＣＰＵ＃０へＯＳ５２１に実行権を渡す割り込み信号を送信する。メモリコントローラ５０９が、割当済のアプリケーションの中でアプリ＃０を除くすべてのアプリケーションをＣＰＵ＃０からＣＰＵ＃１にマイグレーションさせる移行指示をＣＰＵ＃０に通知する。ここでは、アプリ＃２が移行対象となる。
【００７４】
図１１は、アプリ＃２が移行される例を示す説明図である。ＯＳ５２１が、移行指示を受け付けると、１次キャッシュ５０１に記憶されたアプリ＃２の実行データを１次キャッシュ５０２にスヌープ回路５０４を用いて移行させる。そして、ＯＳ５２１が、アプリ＃２のコンテキスト情報のポインタをＣＰＵ＃１のレディーキュー５３２に積むことにより、マイグレーションが終了する。ＯＳ５２１が、移行終了をメモリコントローラ５０９に通知する。メモリコントローラ５０９が、移行終了を受け付けると、リクエスト制御部８０１により、ＣＰＵ＃０をソフトウェアリセットさせるリセット処理を制御する。そして、メモリコントローラ５０９が、アプリ＃０に関するアクセスログ９００内のアクセス回数の項目９０３の値をクリアする。
【００７５】
図１２は、ソフトウェアリセットの一例を示す説明図である。ここで、ソフトウェアリセットとは、ＣＰＵ上で動作するＯＳをリブートさせることを示している。メモリコントローラ５０９がＣＰＵ＃０をソフトウェアリセットさせるリセット処理を制御するとは、具体的には、たとえば、メモリコントローラ５０９が、（１）ＣＰＵ＃０にリブートさせるリブート指示をＯＳ５２１へ通知する。
【００７６】
そして、ＯＳ５２１が、リブート指示を受け付けると、ブートシーケンスが記述されたブートローダを共有メモリ５１０のＲＯＭ５１３から読み出して、共有メモリ５１０のＲＡＭ５１２または１次キャッシュ５０１へ展開する。つぎに、ＯＳ５２１が、（２）ＲＡＭ５１２または１次キャッシュ５０１に展開したブートローダの読み出し先アドレスをＣＰＵ＃０のＰＣに格納する。ＯＳ５２１が、ＣＰＵ＃０のリセットレジスタの値をセットする。これにより、ＯＳ５２１がリブートする。
【００７７】
＜応答信号なし＞
つぎに、メモリコントローラ５０９が、応答信号を送信後から一定時間以内にＣＰＵ＃０からの応答信号を受け付けなかった場合、マルチコアプロセッサのＣＰＵ＃０を除くＣＰＵ＃１とＣＰＵ＃２とから最小負荷のＣＰＵを特定する。最小負荷のＣＰＵの特定処理については応答信号ありの場合で示した処理と同一であるため、ここでは、ＣＰＵ＃１が最小負荷のＣＰＵであるとして、詳細な説明を省略する。
【００７８】
そして、メモリコントローラ５０９が、ＣＰＵ＃１へＯＳ５２２に実行権を渡す割り込み信号を送信する。メモリコントローラ５０９が、割当済のアプリケーションの中でアプリ＃０を除くすべてのアプリケーションをＣＰＵ＃０からＣＰＵ＃１にマイグレーションさせる移行指示をＣＰＵ＃１に通知する。ここでは、アプリ＃２が移行対象となる。
【００７９】
ＯＳ５２２が、移行指示を受け付けると、１次キャッシュ５０１に記憶されたアプリ＃２の実行データを１次キャッシュ５０２にスヌープ回路５０４を用いて移行させる。そして、ＯＳ５２２が、アプリ＃２のコンテキスト情報のポインタをＣＰＵ＃１のレディーキュー５３２に積むことにより、マイグレーションが終了する。ＯＳ５２２が、移行終了をメモリコントローラ５０９に通知する。
【００８０】
メモリコントローラ５０９が、ＯＳ５２２から移行終了を受け付けると、ＣＰＵ＃０をハードウェアリセットする。そして、メモリコントローラ５０９が、アプリ＃０に関するアクセスログ９００内のアクセス回数の項目９０３の値をクリアする。
【００８１】
図１３は、ハードウェアリセットの一例を示す説明図である。ここで、メモリコントローラ５０９がハードウェアリセットするとは、たとえば、ＰＭＵ５１１にＣＰＵ＃０への電源を遮断させ、その後、再度電源電圧を供給させることである。ＰＭＵ５１１からＣＰＵ＃０への電源供給配線ＶＤＤ０の電圧変化を用いて詳細に説明する。具体的には、たとえば、メモリコントローラ５０９が、（１）ＰＭＵ５１１にＣＰＵ＃０の識別情報を通知する。ＰＭＵ５１１が、（２）該通知を受け付けると、（３）識別情報が示すＣＰＵ＃０への電源供給を所定時間遮断する。図１３での所定時間とは、ＣＰＵ＃０の内部状態をリセット可能な定義された時間である。
【００８２】
ＣＰＵ＃０は、電源供給が所定時間遮断されることにより、（４）１次キャッシュ５０１やレジスタの設定がリセットされる。その後、ＰＭＵ５１１が（５）再度電源電圧を供給し、（６）リセット完了をメモリコントローラ５０９に通知する。ＣＰＵ＃０に電源供給が再開されると、ＣＰＵ＃０が（７）ＯＳ５２１をブートする。
【００８３】
（アクセス回数に関するアクセスログの更新処理）
図１４は、アクセス回数に関するアクセスログの更新処理の更新処理手順例を示すフローチャートである。本更新処理手順は、ＯＳごとに行われる。まず、ＯＳが、共有メモリ５１０へのアクセスが発生したか否かを判断し（ステップＳ１４０１）、共有メモリ５１０へのアクセスが発生していないと判断した場合（ステップＳ１４０１：Ｎｏ）、ステップＳ１４０１へ戻る。ＯＳが、共有メモリ５１０へのアクセスが発生したと判断した場合（ステップＳ１４０１：Ｙｅｓ）、アクセスを発生したアプリケーションに関するアクセスログ内のアクセス回数をカウントアップし（ステップＳ１４０２）、ステップＳ１４０１へ戻る。
【００８４】
（実施例１にかかるメモリコントローラ５０９による制御処理）
図１５および図１６は、実施例１にかかるメモリコントローラ５０９による制御処理の制御処理手順を示すフローチャートである。まず、メモリコントローラ５０９が、タイマ割り込みが発生したか否かを判断する（ステップＳ１５０１）。メモリコントローラ５０９が、タイマ割り込みが発生していないと判断した場合（ステップＳ１５０１：Ｎｏ）、ステップＳ１５０１へ戻る。
【００８５】
メモリコントローラ５０９が、タイマ割り込みが発生したと判断した場合（ステップＳ１５０１：Ｙｅｓ）、実行中のアプリケーションの中で、未解析のアプリケーションがあるか否かを判断する（ステップＳ１５０２）。メモリコントローラ５０９が、未解析のアプリケーションがあると判断した場合（ステップＳ１５０２：Ｙｅｓ）、未解析のアプリケーションから、任意のアプリケーションを選択する（対象アプリケーション）（ステップＳ１５０３）。
【００８６】
つぎに、メモリコントローラ５０９が、アクセス回数が許容範囲内であるか否かを判断する（ステップＳ１５０４）。メモリコントローラ５０９が、アクセス回数が許容範囲内であると判断した場合（ステップＳ１５０４：Ｙｅｓ）、ステップＳ１５１７へ移行する。メモリコントローラ５０９が、アクセス回数が許容範囲内でないと判断した場合（ステップＳ１５０４：Ｎｏ）、対象アプリケーションの割当先ＣＰＵ（障害ＣＰＵ）に応答信号を送信する（ステップＳ１５０５）。メモリコントローラ５０９が、一定時間以内に障害ＣＰＵから応答有りか否かを判断する（ステップＳ１５０６）。メモリコントローラ５０９が、一定時間以内に障害ＣＰＵから応答あると判断した場合（ステップＳ１５０６：Ｙｅｓ）、マルチコアプロセッサのうちの障害ＣＰＵを除くＣＰＵから、最小負荷のＣＰＵを特定する（ステップＳ１５０７）。
【００８７】
つぎに、メモリコントローラ５０９が、障害ＣＰＵへＯＳに実行権を渡す割り込み信号を通知し（ステップＳ１５０８）、障害ＣＰＵに割当済アプリケーションの中で対象アプリケーションを除くアプリケーションを特定したＣＰＵへ移行させる移行指示を障害ＣＰＵへ通知する（ステップＳ１５０９）。そして、メモリコントローラ５０９が、移行終了したか否かを判断し（ステップＳ１５１０）、移行終了していないと判断した場合（ステップＳ１５１０：Ｎｏ）、ステップＳ１５１０へ戻る。メモリコントローラ５０９が、移行終了したと判断した場合（ステップＳ１５１０：Ｙｅｓ）、障害ＣＰＵをソフトウェアリセットさせ（ステップＳ１５１１）、ステップＳ１５１７へ移行する。
【００８８】
ステップＳ１５０６において、メモリコントローラ５０９が、一定時間以内に障害ＣＰＵから応答なしと判断した場合（ステップＳ１５０６：Ｎｏ）、マルチコアプロセッサのうちの障害ＣＰＵを除くＣＰＵから、最小負荷のＣＰＵを特定する（ステップＳ１５１２）。メモリコントローラ５０９が、特定したＣＰＵへＯＳに実行権を渡す割り込み信号を通知する（ステップＳ１５１３）。
【００８９】
つぎに、メモリコントローラ５０９が、障害ＣＰＵに割当済アプリケーションの中で対象アプリケーションを除くアプリケーションを障害ＣＰＵから特定したＣＰＵへ移行させる移行指示を特定したＣＰＵへ通知する（ステップＳ１５１４）。そして、メモリコントローラ５０９が、移行が終了したか否かを判断し（ステップＳ１５１５）、移行が終了していないと判断した場合（ステップＳ１５１５：Ｎｏ）、ステップＳ１５１５へ戻る。一方、メモリコントローラ５０９が、移行が終了したと判断した場合（ステップＳ１５１５：Ｙｅｓ）、障害ＣＰＵをハードウェアリセットし（ステップＳ１５１６）、ステップＳ１５１７へ移行する。
【００９０】
ステップＳ１５０４のＹｅｓの場合、ステップＳ１５１１、またはステップＳ１５１６のつぎに、対象アプリケーションに関するアクセスログから、対象アプリケーションのアクセス回数をクリアし（ステップＳ１５１７）、ステップＳ１５０２へ戻る。
【００９１】
（実施例２）
実施例２では、メモリコントローラ５０９がマルチコアプロセッサのうちの一のＣＰＵで実行中の対象アプリケーションからマルチコアプロセッサの各コアで共有する共有資源へのアクセスの傾向情報が許容範囲内であるか否かを判断する。そして、メモリコントローラ５０９が、アクセスの傾向情報が許容範囲内でないと判断した場合、対象アプリケーションから共有メモリ５１０へのアクセスの比率を判断前よりも下げる変更を行う。
【００９２】
さらに、メモリコントローラ５０９が、該判断から所定時間経過後、判断から所定時間以内におけるアクセス回数が許容範囲内であるか否かを判断する。すなわち、アクセス回数が継続して許容範囲内でないかを判断する。メモリコントローラ５０９が、該判断から所定時間内におけるアクセス回数が許容範囲内でないと判断された場合、一のＣＰＵに割当済の対象アプリケーションを除く他のアプリケーションを、一のＣＰＵから他のＣＰＵに移行させる。つぎに、詳細例を説明する。
【００９３】
まず、メモリコントローラ５０９は、タイマ割り込みを検出すると、各ＣＰＵに割当済のアプリケーションの中から、任意の未解析のアプリケーションを選択する。ここでは、ＣＰＵ＃０に割り当てられているアプリ＃０が選択されることとする。メモリコントローラ５０９が、アプリ＃０に関するアクセスログ９００を参照し、アプリ＃０のアクセス回数が許容範囲内であるか否かを判断する。
【００９４】
図１０で示したアクセスログ９００内のアクセス回数の項目９０３の値は１２００回であり、許容範囲が９００回〜１１００回であるため、アプリ＃０から共有メモリ５１０へのアクセス回数が許容範囲内でないと判断される。メモリコントローラ５０９は、アプリ＃０から共有メモリ５１０へのアクセスの比率を判断前よりも下げる。
【００９５】
ここで、アプリ＃０から共有メモリ５１０へのアクセスの比率を下げる例について２つ説明する。一の例では、アプリ＃０からメモリコントローラ５０９へのアクセスについては変更せずに、メモリコントローラ５０９がアプリ＃０から受け付けたアクセスを制御して、共有メモリ５１０へのアクセスの比率を下げる。
【００９６】
また、アクセスの比率を下げる他の例としては、アプリ＃０からメモリコントローラ５０９へのアクセスの比率をバス５１８のバス調停回路が下げることで、アプリ＃０から共有メモリ５１０へのアクセスの比率を判断前よりも下げることができる。メモリコントローラ５０９がバス５１８のバス調停回路へアプリ＃０の割当先ＣＰＵを通知する。
【００９７】
該バス調停回路は、該割当先ＣＰＵからバス５１８へのアクセスをバッファリングするアウトスタンディングバッファからメモリコントローラ５０９へのアクセスの頻度を下げる。これにより、アプリ＃０から共有メモリ５１０へのアクセスの比率を判断前よりも下げることができる。実施例２では、一の例を用いることとし、一の例について図１７を用いて詳細に説明する。
【００９８】
図１７は、メモリコントローラ５０９がアクセスの比率を下げる例を示す説明図である。メモリコントローラ５０９は、リクエストキュー１７００に登録されているアクセスのリクエスト順に各ＣＰＵからのアクセスを制御する。ここでは、たとえば、判断前の各ＣＰＵのアクセス比率が、下記であるとする。
・ＣＰＵ＃０の比率：ＣＰＵ＃１の比率：ＣＰＵ＃２の比率＝５：２：１
【００９９】
ここでは、各ＣＰＵのアクセス比率は、実行中のアプリケーションに基づいて決定されることとする。リクエストキュー１７００の中の各ボックスがアクセスリクエストである。メモリコントローラ５０９は、リクエストキュー１７００の右側からアクセスリクエストを受け付け、左側から順にアクセスリクエストを処理することとする。メモリコントローラ５０９が各ＣＰＵに対応するレジスタを有し、該レジスタに各ＣＰＵのアクセス比率を登録することとしてもよい。
【０１００】
リクエストキュー１７００内のボックスのうち、０が付されたボックスがＣＰＵ＃０からのアクセスリクエストであり、１が付されたボックスがＣＰＵ＃１からのアクセスリクエストであり、２が付されたボックスがＣＰＵ＃２からのアクセスリクエストである。
【０１０１】
判断前のリクエストキュー１７００（図上）内では、０が付されたボックスが５個並び、つぎに、１が付されたボックスが２個並び、２が付されたボックスが１個並び、再度、０が付されたボックスが５個並んでいる。すなわち、メモリコントローラ５０９は、ＣＰＵ＃０のアクセスリクエストを５回行い、つぎに、ＣＰＵ＃１のアクセスリクエストを２回行い、そして、ＣＰＵ＃２のアクセスリクエストを１回行う。
【０１０２】
判断後にメモリコントローラ５０９がアプリ＃０を実行するＣＰＵ＃０のアクセス比率を判断前よりも下げる。下げる量については限定しない。ここでは、たとえば、下げた後の各比率が、下記であるとする。
・ＣＰＵ＃０の比率：ＣＰＵ＃１の比率：ＣＰＵ＃２の比率＝２：２：１
【０１０３】
下げた後のリクエストキュー１７００（図下）内では、０が付されたボックスが２個並び、つぎに、１が付されたボックスが２個並び、２が付されたボックスが１個並び、再度、０が付されたボックスが２個並んでいる。すなわち、メモリコントローラ５０９は、ＣＰＵ＃０のアクセスリクエストを２回行い、つぎに、ＣＰＵ＃１のアクセスリクエストを２回行い、そして、ＣＰＵ＃２のアクセスリクエストを１回行う。本実施の形態では、ＤＥＦＡＵＬＴのアクセス比率と、ＬＯＷのアクセス比率とが決定されていることとする。
【０１０４】
図１８は、実施例２でのアクセスログ９００を示す説明図（その１）である。さらに、メモリコントローラ５０９は、アプリ＃０のアクセスログ９００内の優先度の項目９０４の値をＤＥＦＡＵＬＴからＬＯＷに変更する。そして、メモリコントローラ５０９が、アプリ＃０に関するアクセスログ９００内のアクセス回数の項目９０３の値をクリアする。そして、割当済のアプリケーションから、アプリ＃０を除くアプリケーションの中で、未解析のアプリケーションを選択し、解析する。
【０１０５】
つぎに、メモリコントローラ５０９は、つぎのタイマ割り込みを検出すると、各ＣＰＵに割当済のアプリケーションの中から、任意の未解析のアプリケーションを選択する。ここでは、ＣＰＵ＃０に割り当てられているアプリ＃０が選択されることとする。
【０１０６】
図１９は、実施例２でのアクセスログ９００を示す説明図（その２）である。メモリコントローラ５０９が、アプリ＃０に関するアクセスログ９００を参照し、アプリ＃０のアクセス回数が許容範囲内であるか否かを判断する。アクセスログ９００のアクセス回数の項目９０３に登録されている値が２０００回であり、許容範囲が９００回〜１１００回であるため、アプリ＃０のアクセス回数が許容範囲内でないと判断される。
【０１０７】
つぎに、メモリコントローラ５０９が、アプリ＃０のアクセス回数が許容範囲内でないことが継続されているか否かを判断する。具体的には、たとえば、メモリコントローラ５０９が、アクセスログ９００内の優先度の項目９０４の値がＬＯＷである否かを確認する。ＬＯＷであれば、前回のタイマ割り込み時に、アクセス回数が許容範囲内でないと判断されていることを示している。
【０１０８】
たとえば、前回のタイマ割り込みと今回のタイマ割り込みとで連続して、アクセス回数が許容範囲内でない場合、アプリ＃０またはアプリ＃０の割当先ＣＰＵであるＣＰＵ＃０がエラーである可能性が高い。たとえば、前回のタイマ割り込みでアクセス回数が許容範囲内でなく、今回のタイマ割り込みでアクセス回数が許容範囲内であれば、前回のタイマ割り込み時には、アプリ＃０またはＣＰＵ＃０の状態が不安定である。しかしながら、今回のタイマ割り込み時にはアプリ＃０またはＣＰＵ＃０の状態が正常であることを示している。
【０１０９】
ここでは、すでにアクセスログ９００内の優先度の項目９０４の値がＬＯＷであるため、アクセス回数が許容範囲内でない状態が継続していることを示している。つぎに、メモリコントローラ５０９が、アプリ＃０の割当先ＣＰＵを特定し、該割当先ＣＰＵに信号を送信して、指定時間以内に特定した割当先ＣＰＵから応答があるか否か判断する。ここでは、ＣＰＵ＃０がアプリ＃０の割当先ＣＰＵであり、メモリコントローラ５０９がＣＰＵ＃０に応答信号を送信する。
【０１１０】
メモリコントローラ５０９が、応答信号を送信後から一定時間以内にＣＰＵ＃０からの応答信号を受け付けた場合、マルチコアプロセッサのＣＰＵ＃０を除くＣＰＵ＃１とＣＰＵ＃２とから最小負荷のＣＰＵを特定する。具体的には、たとえば、メモリコントローラ５０９がＣＰＵごとに該ＣＰＵに割り当てられているアプリケーションの実行時間の合計値を算出し、最も合計値が小さいＣＰＵを最小負荷のＣＰＵとする。
【０１１１】
ＣＰＵ＃１に割当済のアプリケーションの実行時間の合計値は２００［μｓ］であり、ＣＰＵ＃２に割当済のアプリケーションの実行時間の合計値は１［ｍｓ］であるため、ＣＰＵ＃１が最小負荷のＣＰＵとして特定される。ここでは、メモリコントローラ５０９が最小負荷のＣＰＵを特定するが、ＣＰＵ＃０に最小負荷のＣＰＵを特定させてもよい。
【０１１２】
そして、メモリコントローラ５０９が、ＣＰＵ＃０へＯＳ５２１に実行権を渡す割り込み信号を送信し、割当済のアプリの中でアプリ＃０を除くすべてのアプリをＣＰＵ＃０からＣＰＵ＃１にマイグレーションさせる移行指示をＣＰＵ＃０に通知する。ここでは、アプリ＃２が移行対象となる。
【０１１３】
ＯＳ５２１が、移行指示を受け付けると、１次キャッシュ５０１に記憶されたアプリ＃２の実行データを１次キャッシュ５０２にスヌープ回路５０４を用いて移行させる。そして、ＯＳ５２１が、アプリ＃２のコンテキスト情報のポインタをＣＰＵ＃１のレディーキュー５３２に積むことにより、マイグレーションが終了する。ＯＳ５２１が、移行終了をメモリコントローラ５０９に通知する。
【０１１４】
メモリコントローラ５０９が移行終了を受け付けると、ＣＰＵ＃０をソフトウェアリセットする。ソフトウェアリセットについては、実施例１で示した例と同一であるため詳細な説明を省略する。そして、メモリコントローラ５０９が、アプリ＃０に関するアクセスログ９００内のアクセス回数の項目９０３の値をクリアし、優先度の項目９０４の値をＬＯＷからＤＥＦＡＵＬＴに変更する。
【０１１５】
また、メモリコントローラ５０９が、応答信号を送信後から一定時間以内にＣＰＵ＃０からの応答信号を受け付けなかった場合（応答信号なし）については実施例１で説明した処理と同一であるため、実施例２における応答信号なしの場合の詳細な説明を省略する。
【０１１６】
（実施例２にかかるメモリコントローラ５０９による制御処理）
図２０および図２１は、実施例２にかかるメモリコントローラ５０９による制御処理の制御処理手順を示すフローチャートである。ステップＳ２００１〜ステップＳ２００４はステップＳ１５０１〜ステップＳ１５０４と同一処理であり、ステップＳ２０１０〜ステップＳ２０２１はステップＳ１５０５〜ステップＳ１５１６と同一処理であるため、ここでの詳細な説明は省略する。
【０１１７】
ステップＳ２００４のＮｏの場合のつぎに、メモリコントローラ５０９が、前回のタイマ割り込み時に、対象アプリケーションのアクセス回数が許容範囲内であったか否かを判断する（ステップＳ２００５）。メモリコントローラ５０９が、前回のタイマ割り込み時に、対象アプリケーションのアクセス回数が許容範囲内であったと判断した場合（ステップＳ２００５：Ｙｅｓ）、対象アプリケーションのアクセスの優先度をＬＯＷに変更する（ステップＳ２００６）。メモリコントローラ５０９がステップＳ２００６のつぎにステップＳ２００９へ移行する。メモリコントローラ５０９が、前回のタイマ割り込み時に、対象アプリケーションのアクセス回数が許容範囲内でなかったと判断した場合（ステップＳ２００５：Ｎｏ）、ステップＳ２０１０へ移行する。
【０１１８】
ステップＳ２００４のＹｅｓの場合のつぎに、メモリコントローラ５０９が、前回のタイマ割り込み時に、対象アプリケーションのアクセス回数が許容範囲内であったか否かを判断する（ステップＳ２００７）。メモリコントローラ５０９が、前回のタイマ割り込み時に、対象アプリケーションのアクセス回数が許容範囲内でなかったと判断した場合（ステップＳ２００７：Ｎｏ）、対象アプリケーションのアクセスの優先度をＤＥＦＡＵＬＴに変更する（ステップＳ２００８）。そして、メモリコントローラ５０９が、対象アプリケーションに関するアクセスログ内のアクセス回数をクリアし（ステップＳ２００９）、ステップＳ２００２へ戻る。
【０１１９】
メモリコントローラ５０９が、前回のタイマ割り込み時に、対象アプリケーションのアクセス回数が許容範囲内であったと判断した場合（ステップＳ２００７：Ｙｅｓ）、ステップＳ２００９へ移行する。
【０１２０】
（実施例３）
実施例３では、実施例１で説明した詳細についてアクセス回数に代わってメモリ番地を用いて説明する。
【０１２１】
図２２は、メモリ番地に関するアクセスログの一例を示す説明図である。アプリ＃０に関するアクセスログ２２００では、スタートアドレスの項目２２０１と、エンドアドレスの項目２２０２と、アクセス割合の項目２２０３と、を有している。さらに、アプリ＃０に関するアクセスログ２２００では、許容範囲の項目２２０４と、平均アクセス回数の項目２２０５と、アクセス回数の項目２２０６と、優先度の項目２２０７と、を有している。
【０１２２】
スタートアドレスの項目２２０１と、エンドアドレスの項目２２０２とには、メモリ番地が登録されている。許容範囲の項目２２０４には、許容範囲が登録されている。アクセス割合の項目２２０３には、スタートアドレスの項目２２０１に登録されているメモリ番地からエンドアドレスの項目２２０２に登録されているメモリ番地までの領域に、アプリケーションの通常動作時にアクセスされる割合が登録されている。平均アクセス回数の項目２２０５には、アプリケーションの通常アクセス動作時に共有メモリ５１０へアクセスされる平均回数が登録されている。平均アクセス回数は、１０００回である。
【０１２３】
たとえば、図２２では、平均アクセス回数のうちの３０［％］が０ｘ００００００００〜０ｘ０００ＦＦＦＦＦにアクセスされることを示している。すなわち、１０００回×３０［％］で３００回は０ｘ００００００００〜０ｘ０００ＦＦＦＦＦにアクセスされることを示している。許容範囲が±１０［％］であるため、アクセス回数で許容範囲を表すと、２７０回〜３３０回までであり、アクセス割合で許容範囲を表すと、２７［％］〜３３［％］までである。
【０１２４】
アクセス回数の項目２２０６には、一のタイマ割り込みから次のタイマ割り込みまでの間に、各アドレス範囲にメモリアクセスが何回発生したかが登録される。優先度の項目２２０７には、アプリ＃０の共有メモリ５１０へのアクセスの優先度が登録される。ここでは、優先度の項目２２０７には、ＤＥＦＡＵＬＴまたはＬＯＷのうちのいずれか一方が登録される。ＬＯＷはＤＥＦＡＵＬＴ時よりもアクセスの比率が低いことを示している。
【０１２５】
まず、メモリコントローラ５０９は、タイマ割り込みを検出すると、各ＣＰＵに割当済のアプリケーションの中から、任意の未解析のアプリケーションを選択する。ここでは、ＣＰＵ＃０に割り当てられているアプリ＃０が選択されることとする。
【０１２６】
図２３は、実施例３でのアクセスログ２２００を示す説明図である。アクセスログ２２００では、アクセス回数の項目２２０６が更新されている。０ｘ００００００００〜０ｘ０００ＦＦＦＦＦには、１００回アクセスされている。０ｘ００００００００〜０ｘ０００ＦＦＦＦＦへのアクセスの割合は、１０００回／１００回で、１０［％］である。
【０１２７】
０ｘ００１０００００〜０ｘ００１ＦＦＦＦＦには、４００回アクセスされている。０ｘ００１０００００〜０ｘ００１ＦＦＦＦＦへのアクセスの割合は、１０００回／４００回で、４０［％］アクセスされている。０ｘＦＦＦ０００００〜０ｘＦＦＦＦＦＦＦＦには、５００回アクセスされている。０ｘＦＦＦ０００００〜０ｘＦＦＦＦＦＦＦＦへのアクセスの割合は、５０［％］である。
【０１２８】
そして、メモリコントローラ５０９が、アプリ＃０に関するアクセスログ２２００を参照し、各メモリ番地へのアクセスの割合が許容範囲内であるか否かを判断する。たとえば、０ｘＦＦＦ０００００〜０ｘＦＦＦＦＦＦＦＦへのアクセスの割合は０［％］であり、該タイミング割り込みでのアクセスの割合は５０［％］であるため、メモリコントローラ５０９が所定範囲内でないと判断する。
【０１２９】
よって、アプリ＃０のアクセス回数は許容範囲内でないと判断される。メモリコントローラ５０９が、アプリ＃０の割当先ＣＰＵを特定し、該割当先ＣＰＵに信号を送信して、指定時間以内に特定した割当先ＣＰＵから応答があるか否か判断する。ここでは、ＣＰＵ＃０がアプリ＃０の割当先ＣＰＵであり、メモリコントローラ５０９がＣＰＵ＃０に応答信号を送信する。
【０１３０】
メモリコントローラ５０９が、応答信号を送信後から一定時間以内にＣＰＵ＃０からの応答信号を受け付けた場合、メモリコントローラ５０９が、マルチコアプロセッサのＣＰＵ＃０を除くＣＰＵ＃１とＣＰＵ＃２とから最小負荷のＣＰＵを特定する。ここでは、メモリコントローラ５０９が最小負荷のＣＰＵを特定するが、ＣＰＵ＃０に最小負荷のＣＰＵを特定させてもよい。
【０１３１】
そして、メモリコントローラ５０９が、ＣＰＵ＃０へＯＳ５２１に実行権を渡す割り込み信号を送信し、割当済のアプリの中でアプリ＃０を除くすべてのアプリをＣＰＵ＃０からＣＰＵ＃１にマイグレーションさせる移行指示をＣＰＵ＃０に通知する。ここでは、アプリ＃２が移行対象となる。
【０１３２】
ＯＳ５２１が、移行指示を受け付けると、１次キャッシュ５０１に記憶されたアプリ＃２の実行データを１次キャッシュ５０２にスヌープ回路５０４を用いて移行させる。そして、ＯＳ５２１が、アプリ＃２のコンテキスト情報のポインタをＣＰＵ＃１のレディーキュー５３２に積むことにより、マイグレーションが終了する。ＯＳ５２１が、移行終了をメモリコントローラ５０９に通知する。メモリコントローラ５０９が移行終了を受け付けると、ＣＰＵ＃０をソフトウェアリセットする。そして、メモリコントローラ５０９が、アプリ＃０に関するアクセスログ２２００内のアクセス回数の項目２２０６の値をクリアする。
【０１３３】
また、ＣＰＵ＃０からメモリコントローラ５０９へ一定時間以内に応答指示がある場合については実施例１で詳細に説明しているため、省略する。また、実施例３にかかる詳細な制御処理手順は、実施例１にかかる詳細な制御処理手順とアクセスの傾向情報が異なるだけであるため、ここでの説明は省略する。
【０１３４】
（実施例３にかかるメモリ番地に関するアクセスログの更新処理）
図２４は、メモリ番地に関するアクセスログの更新処理の更新処理手順例を示すフローチャートである。本更新処理手順は、ＯＳごとに行われる。まず、ＯＳが、共有メモリ５１０へのアクセスが発生したか否かを判断し（ステップＳ２４０１）、共有メモリ５１０へのアクセスが発生していないと判断した場合（ステップＳ２４０１：Ｎｏ）、ステップＳ２４０１へ戻る。
【０１３５】
ＯＳが、共有メモリ５１０へのアクセスが発生したと判断した場合（ステップＳ２４０１：Ｙｅｓ）、アクセスするメモリ番地を特定する（ステップＳ２４０２）。書き込み命令・読み出し命令には、アクセスするメモリ番地が含まれている。そして、ＯＳが、アクセスを発生したアプリケーションに関するアクセスログ内の対応するメモリ番地のアクセス回数をカウントアップし（ステップＳ２４０３）、ステップＳ２４０１へ戻る。
【０１３６】
（実施例４）
実施例４では、実施例２で説明した詳細について、アクセス回数に代わってメモリ番地で説明する。まず、メモリコントローラ５０９は、タイマ割り込みを検出すると、各ＣＰＵに割当済のアプリケーションの中から、任意の未解析のアプリケーションを選択する。ここでは、ＣＰＵ＃０に割り当てられているアプリ＃０が選択されることとする。
【０１３７】
メモリコントローラ５０９が、アプリ＃０に関するアクセスログ２２００を参照し、各メモリ番地へのアクセスの割合が許容範囲内であるか否かを判断する。０ｘＦＦＦ０００００〜０ｘＦＦＦＦＦＦＦＦへのアクセスの割合は０［％］であり、該タイミング割り込みでのアクセスの割合は１５０［％］であるため、メモリコントローラ５０９が所定範囲内でないと判断する。メモリコントローラ５０９は、アプリ＃０から共有メモリ５１０へのアクセスの比率を判断前よりも下げる。アクセスの比率の下げ方については、実施例２で説明した例と同一例を用いることとする。
【０１３８】
図２５は、実施例４でのアクセスログを示す説明図（その１）である。さらに、メモリコントローラ５０９は、アプリ＃０のアクセスログ２２００内の優先度の項目２２０７の値をＤＥＦＡＵＬＴからＬＯＷに変更する。そして、メモリコントローラ５０９が、アプリ＃０に関するアクセスログ内のアクセス回数の項目２２０６の値をクリアする。そして、割当済のアプリケーションから、アプリ＃０を除くアプリケーションの中で、未解析のアプリケーションを選択し、解析する。
【０１３９】
つぎに、メモリコントローラ５０９は、つぎのタイマ割り込みを検出すると、各ＣＰＵに割当済のアプリケーションのうちの未解析のアプリケーションから任意のアプリケーションを選択する。ここでは、ＣＰＵ＃０に割り当てられているアプリ＃０が選択されることとする。
【０１４０】
図２６は、実施例４でのアクセスログを示す説明図（その２）である。メモリコントローラ５０９が、アプリ＃０に関するアクセスログ２２００を参照し、各アドレスの番地にアクセスされるアクセスの割合が許容範囲内か否かを判断する。０ｘＦＦＦ０００００〜０ｘＦＦＦＦＦＦＦＦへのアクセス回数が２０００回であり、アクセスの割合が２００［％］であるため、アクセスの割合が、許容範囲内でないと判断される。
【０１４１】
つぎに、メモリコントローラ５０９が、アプリ＃０のアクセス回数が許容範囲内でないことが継続されているか否かを判断する。具体的には、たとえば、メモリコントローラ５０９が、アクセスログ２２００内の優先度の項目２２０７の値がＬＯＷであるか否かを確認する。ＬＯＷであれば、前回のタイマ割り込み時に、アクセス回数が許容範囲内でないと判断されていることを示している。
【０１４２】
たとえば、前回のタイマ割り込みと今回のタイマ割り込みとで連続して、アクセス回数が許容範囲内でない場合、アプリ＃０またはアプリ＃０の割当先ＣＰＵであるＣＰＵ＃０がエラーである可能性が高い。たとえば、前回のタイマ割り込みでアクセス回数が許容範囲内でなく、今回のタイマ割り込みでアクセス回数が許容範囲内であれば、前回のタイマ割り込み時には、アプリ＃０またはＣＰＵ＃０の状態が不安定である。しかしながら、今回のタイマ割り込み時にはアプリ＃０またはＣＰＵ＃０の状態が正常であることを示している。
【０１４３】
ここでは、すでにアクセスログ２２００内の優先度の項目２２０７の値がＬＯＷであるため、アクセス回数が許容範囲内でない状態が継続していることを示している。つぎに、メモリコントローラ５０９が、アプリ＃０の割当先ＣＰＵを特定し、該割当先ＣＰＵに信号を送信して、指定時間以内に特定した割当先ＣＰＵから応答があるか否か判断する。ここでは、ＣＰＵ＃０がアプリ＃０の割当先ＣＰＵであり、メモリコントローラ５０９がＣＰＵ＃０に応答信号を送信する。
【０１４４】
メモリコントローラ５０９が、応答信号を送信後から一定時間以内にＣＰＵ＃０からの応答信号を受け付けた場合、メモリコントローラ５０９が、マルチコアプロセッサのＣＰＵ＃０を除くＣＰＵ＃１とＣＰＵ＃２とから最小負荷のＣＰＵを特定する。具体的には、たとえば、メモリコントローラ５０９がＣＰＵごとに該ＣＰＵに割り当てられているアプリケーションの実行時間の合計値を算出し、最も合計値が小さいＣＰＵを最小負荷のＣＰＵとする。ＣＰＵ＃１に割当済のアプリケーションの実行時間の合計値は２００［μｓ］であり、ＣＰＵ＃２に割当済のアプリケーションの実行時間の合計値は１［ｍｓ］であるため、ＣＰＵ＃１が最小負荷のＣＰＵとして特定される。ここでは、メモリコントローラ５０９が最小負荷のＣＰＵを特定するが、ＣＰＵ＃０に最小負荷のＣＰＵを特定させてもよい。
【０１４５】
そして、メモリコントローラ５０９が、ＣＰＵ＃０へＯＳ５２１に実行権を渡す割り込み信号を送信し、割当済のアプリの中でアプリ＃０を除くすべてのアプリをＣＰＵ＃０からＣＰＵ＃１にマイグレーションさせる移行指示をＣＰＵ＃０に通知する。ここでは、アプリ＃２が移行対象となる。
【０１４６】
ＯＳ５２１が、移行指示を受け付けると、１次キャッシュ５０１に記憶されたアプリ＃２の実行データを１次キャッシュ５０２にスヌープ回路５０４を用いて移行させる。そして、ＯＳ５２１が、アプリ＃２のコンテキスト情報のポインタをＣＰＵ＃１のレディーキュー５３２に積むことにより、アプリ＃２のマイグレーションが終了する。ＯＳ５２１が、移行終了をメモリコントローラ５０９に通知する。
【０１４７】
メモリコントローラ５０９が移行終了を受け付けると、ＣＰＵ＃０をソフトウェアリセットする。そして、メモリコントローラ５０９が、アプリ＃０に関するアクセスログ２２００内のアクセス回数の項目２２０６の値をクリアし、優先度の項目２２０７の値をＬＯＷからＤＥＦＡＵＬＴに変更する。
【０１４８】
また、実施例４にかかる詳細な制御処理手順は、実施例２にかかる詳細な制御処理手順とアクセスの傾向情報が異なるだけであるため、ここでの説明は省略する。
【０１４９】
以上実施例１，実施例３で説明したように、プロセッサ処理方法、および制御装置によれば、一のＣＰＵで実行中の対象アプリケーションのメモリアクセスの傾向情報が許容範囲内でない場合、一のＣＰＵに割当済の他のアプリケーションを他のＣＰＵに移行させる。すなわち、一のＣＰＵで実行中のアプリのメモリアクセスの傾向が、通常のアプリケーションの実行時と異なる場合、対象アプリケーションまたは一のＣＰＵにエラーの可能性がある。そこで、一のＣＰＵに割当済の他のアプリケーションを他のＣＰＵに避難させることにより、該エラーの影響を他のアプリケーションに波及させることを防止することができる。
【０１５０】
また、一のＣＰＵに割当済の他のアプリケーションを一のＣＰＵから他のＣＰＵに移行させる移行処理を一のＣＰＵに移行指示を通知することで、一のＣＰＵに移行処理を実行させる。これにより、割当済の他のアプリケーションを他のＣＰＵに避難させることができ、エラーの影響を他のアプリケーションに波及させることを防止することができる。
【０１５１】
また、一のＣＰＵに割当済の他のアプリケーションを一のＣＰＵから他のＣＰＵに移行させる移行処理を他のＣＰＵに移行指示を通知することで、他のＣＰＵに移行処理を実行させる。これにより、割当済の他のアプリケーションを他のＣＰＵに避難させることができ、エラーの影響を他のアプリケーションに波及させることを防止することができる。
【０１５２】
また、一のＣＰＵに応答確認を行い、応答がない場合、一のＣＰＵに割当済の他のアプリケーションを一のＣＰＵから他のＣＰＵに移行させる移行処理を他のＣＰＵに移行指示を通知することで、他のＣＰＵに移行処理を実行させる。これにより、一のＣＰＵがエラー状態で他のアプリケーションが実行されていないため、他のアプリケーションを実行させるために他のＣＰＵに移行させることで、他のアプリケーションを通常通り実行させることができる。
【０１５３】
また、他のアプリケーションを他のＣＰＵに移行後、一のＣＰＵをソフトウェアリセットさせることにより、共有メモリ内の一のＣＰＵが使用する領域がリセットされ、一のＣＰＵをエラー状態から回復させることができる。
【０１５４】
また、他のアプリケーションを他のＣＰＵに移行後、一のＣＰＵをハードウェアリセットさせることにより、共有メモリ内の一のＣＰＵが使用する領域と一のＣＰＵ内のレジスタの値がリセットされ、一のＣＰＵをエラー状態から回復させることができる。
【０１５５】
以上、実施例２，４で説明したように、一のＣＰＵで実行中の対象アプリケーションのメモリアクセスの傾向情報が許容範囲内であるか否かを判断する。共有メモリへのアクセスの傾向情報が許容範囲内でないとは、実行中の対象アプリのメモリアクセスの傾向が通常時の傾向と異なる場合である。すなわち、対象アプリまたは対象アプリの割当先コアにエラーの疑いがある。そして、対象アプリケーションから共有メモリへのアクセスの優先度を判断前よりも下げることで、他のＣＰＵで実行中のアプリケーションからのメモリアクセスに影響を与えるのを防止することができる。
【０１５６】
また、判断後から所定時間経過後に、一のＣＰＵで実行中の対象アプリケーションのメモリアクセスの傾向情報が許容範囲内であるか否かを判断する。すなわち、複数回に渡って、一のＣＰＵで実行中の対象アプリケーションのメモリアクセスの傾向情報が許容範囲内であるか否かを判断する。一のＣＰＵで実行中の対象アプリケーションのメモリアクセスの傾向情報が許容範囲内でないことが継続している場合、エラー状態である可能性が高くなるので、一のＣＰＵに割当済の他のアプリケーションを他のＣＰＵに移行させる。これにより、一のアプリケーションに割当済の他のアプリケーションにエラーの影響が波及するのを防止することができる。
【０１５７】
また、共有メモリへのアクセスの傾向情報が許容範囲内でないと過去に判断され、共有メモリへのアクセスの傾向情報が許容範囲内であると今回判断された場合、該アクセスの優先度を上げる。一のＣＰＵで実行中の対象アプリケーションのメモリアクセスの傾向情報が許容範囲内でないことが継続していない場合、エラー状態ではない可能性がある。これにより、エラー状態であるか否かの判断の精度を向上させることができる。
【０１５８】
また、他のアプリケーションを他のＣＰＵに移行後、一のＣＰＵをリセットさせることにより、一のＣＰＵをエラー状態から回復させることができる。
【０１５９】
また、他のアプリケーションを他のＣＰＵに移行後、一のＣＰＵをソフトウェアリセットさせることにより、共有メモリ内の一のＣＰＵが使用する領域がリセットされ、一のＣＰＵをエラー状態から回復させることができる。
【０１６０】
また、他のアプリケーションを他のＣＰＵに移行後、一のＣＰＵをハードウェアリセットさせることにより、共有メモリ内の一のＣＰＵが使用する領域と一のＣＰＵ内のレジスタの値がリセットされ、一のＣＰＵをエラー状態から回復させることができる。
【０１６１】
また、対象アプリケーションから共有メモリへのアクセスの傾向情報がアクセス回数に関する情報である。たとえば、通常動作時よりもアクセス回数が多ければ、異常状態であるため、他のＣＰＵから共有メモリへのアクセスの妨げになる。また、たとえば、アクセス回数が通常動作時よりも少なければ、すなわち、一定時間共有メモリへアクセスがなければ、対象アプリケーションがハングアップ状態である可能性がある。これにより、他のＣＰＵから共有メモリへのアクセスの妨げとなる状態やハングアップ状態を容易に検出することができる、マルチコアプロセッサシステム全体の演算性能の劣化を防止することができ、信頼性を向上させることができる。
【０１６２】
また、対象アプリケーションから共有メモリへのアクセスの傾向情報がアクセスするメモリ番地に関する情報である。たとえば、通常動作時のメモリ番地と異なるメモリ番地にアクセスしている場合、対象アプリケーションがエラー命令を実行している可能性がある。これにより、エラー状態を容易に検出することができ、マルチコアプロセッサシステム全体の演算性能の劣化を防止することができ、信頼性を向上させることができる。
【０１６３】
本プロセッサ処理方法は、リクエスト制御部８０１〜Ｉ／Ｏ制御部８０６を有するメモリコントローラ５０９によって実現することができる。
【符号の説明】
【０１６４】
５００  マルチコアプロセッサシステム
８０１  リクエスト制御部
８０２  アクセスログ解析部
８０３  優先度変更部
８０４  最小負荷ＣＰＵ特定部
８０５  メモリ制御部
【図１】
2012101759.tif 000003
【図２】
2012101759.tif 000004
【図３】
2012101759.tif 000005
【図４】
2012101759.tif 000006
【図５】
2012101759.tif 000007
【図６】
2012101759.tif 000008
【図７】
2012101759.tif 000009
【図８】
2012101759.tif 000010
【図９】
2012101759.tif 000011
【図１０】
2012101759.tif 000012
【図１１】
2012101759.tif 000013
【図１２】
2012101759.tif 000014
【図１３】
2012101759.tif 000015
【図１４】
2012101759.tif 000016
【図１５】
2012101759.tif 000017
【図１６】
2012101759.tif 000018
【図１７】
2012101759.tif 000019
【図１８】
2012101759.tif 000020
【図１９】
2012101759.tif 000021
【図２０】
2012101759.tif 000022
【図２１】
2012101759.tif 000023
【図２２】
2012101759.tif 000024
【図２３】
2012101759.tif 000025
【図２４】
2012101759.tif 000026
【図２５】
2012101759.tif 000027
【図２６】
2012101759.tif 000028
【国際調査報告】
2012101759.tif 000029
2012101759.tif 000030
2012101759.tif 000031
2012101759.tif 000032