(57)【要約】  イベント処理等の、非定常的に実行されるプログラムが実行されるプロセッサが偏ることを抑制して、マルチプロセッサシステムの性能を向上する。このため、マルチプロセッサシステム（１００）は、複数のプロセッサのいずれかで非定常的に実行されるプログラムのコンテキストデータを格納し、共有される第一のコンテキストメモリ（１１０）と、前記複数のプロセッサの個数と同じ個数設けられ、それぞれ、対応するプロセッサにプログラムの実行要求があった場合に、当該プログラムが前記非定常的に実行されるプログラムであれば前記第一のコンテキストメモリとの間でのコンテキストデータの退避及び復帰を行う退避復帰制御部（１０３）と、前記非定常的に実行されるプログラムの実行要求が発生するごとに、選択したプロセッサに対して当該プログラムの実行要求を行う選択要求部（１０９）とを備える。
2009150815.tif 000002
【特許請求の範囲】
【請求項１】
複数のプログラムを切り替えながら実行する複数のプロセッサと、
前記複数のプロセッサのいずれかにより非定常的に実行されるプログラムのコンテキストデータを格納し、前記複数のプロセッサにより共有される第一のコンテキストメモリと、
前記複数のプロセッサの個数と同じ個数設けられ、それぞれ、対応する前記プロセッサが定常的に実行するプログラムのコンテキストデータを格納し、当該プロセッサにより専有される第二のコンテキストメモリと、
同じく前記複数のプロセッサの個数と同じ個数設けられ、それぞれ、対応する前記プロセッサに対してプログラムの実行要求があった場合に、当該プログラムが前記非定常的に実行されるプログラムであれば前記第一のコンテキストメモリを選択すると共に、前記定常的に実行するプログラムであれば前記第二のコンテキストメモリを選択して、選択したコンテキストメモリと当該プロセッサとの間で当該プログラムのコンテキストデータの退避及び復帰を行い、当該プロセッサにより専有される退避復帰制御部と、
前記非定常的に実行されるプログラムの実行要求が発生するごとに、前記複数のプロセッサのいずれかを選択し、選択したプロセッサに対して当該プログラムの実行要求を行う選択要求部と、
を備えるマルチプロセッサシステム。
【請求項２】
前記複数のプロセッサに共有される主記憶メモリを備え、
前記複数のプロセッサは、それぞれ、当該主記憶メモリを用いて、前記非定常的に実行されるプログラム及び前記定常的に実行されるプログラムをそれぞれ実行する請求項１記載のマルチプロセッサシステム。
【請求項３】
前記複数のプロセッサは、それぞれ、
複数のレジスタ群と、
前記複数のレジスタ群のうちで何れかのレジスタ群を、プログラムの実行に当該プロセッサが利用する実行用のレジスタ群として選択すると共に、選択したレジスタ群以外の他の何れかのレジスタ群をコンテキストデータの退避復帰用のレジスタ群として選択するレジスタ群選択部と
を備え、
前記複数のプロセッサは、それぞれ、当該プロセッサの当該レジスタ群選択部が前記実行用のレジスタとして選択するレジスタ群を使用してプログラムを実行し、
前記退避復帰制御部は、当該プロセッサが、選択された前記実行用のレジスタ群を使用してプログラムを実行するのと同時に、選択された前記退避復帰用のレジスタ群に対し、コンテキストデータの退避及び復帰を行う請求項２に記載のマルチプロセッサシステム。
【請求項４】
当該マルチプロセッサシステムは、前記複数のプロセッサがそれぞれローカルキャッシュメモリを有する共有メモリ型マルチプロセッサシステムである請求項２に記載のマルチプロセッサシステム。
【請求項５】
前記選択要求部は、前記非定常的に実行されるプログラムの実行要求が発生するごとに、前記複数のプロセッサのうちで、前回の前記非定常的に実行されるプログラムの実行要求の発生に際して選択したプロセッサとは別のプロセッサを選択する請求項２に記載のマルチプロセッサシステム。
【請求項６】
前記選択要求部は、前記複数のプロセッサの動作状態を検出し、検出された動作状態に対して予め定められた対応関係を有するプロセッサを選択する請求項２に記載のマルチプロセッサシステム。
【請求項７】
前記複数のプロセッサは、それぞれ、
前記定常的に実行されるプログラムの、当該プロセッサによる実行を中断する事由が発生したこと、および、当該事由が解消したことを各々検出して、前記発生が検出された場合には当該実行を停止させ、前記解消が検出された場合には、停止された当該実行を再開させる停止再開制御部を備え、
前記選択要求部は、前記停止再開制御部から前記停止および再開の情報を取得し、取得された情報により、当該停止再開制御部を備えるプロセッサが前記実行を停止させた後であり、かつ、当該実行を再開させる前であることが示される場合に、当該プロセッサを選択する請求項６に記載のマルチプロセッサシステム。
【請求項８】
前記複数のプロセッサは、それぞれ、
前記定常的に実行されるプログラムの、当該プロセッサによる実行を中断する事由が発生したこと、および、当該事由が解消したことを各々検出して、前記発生が検出された場合には当該プログラムの実行を停止させ、前記解消が検出された場合には、停止された当該実行を再開させる停止再開制御部を備え、
前記選択要求部は、前記停止再開制御部から前記停止および再開の情報を取得し、取得された前記情報の履歴に基づいて、当該情報の取得された前記プロセッサを選択するか否かを決定する請求項６に記載のマルチプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサシステムにおいて、効率的に複数のプログラムを並列的に実行する技術に関する。
【背景技術】
【０００２】
従来のマルチプロセッサシステムでは、プログラムまたはタスクの切り替えはＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）で実行し、タスクに固有の情報であり、タスクを実行するのに必要となるプログラムカウンタやスタックなどのコンテキストの切り替えはＯＳが管理する方法があった（例えば、特許文献１参照）。【０００３】
また、プロセッサにおいて、ハードウェアによってコンテキストの切り替えを行っているものもある（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−０４３９５９号公報
【特許文献２】特開２００３−２７１３９９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、ＯＳでコンテキストの切り替えを実行する場合、コンテキストの退避および復帰によるオーバヘッドが発生し、性能劣化の原因となる。また、複数のプロセッサごとにハードウェアによるコンテキスト切り替えを実行する場合、非定常的に実行されるプログラムの実行要求による割込みを特定のプロセッサに対して行うと、当該プロセッサのみに非定常的に実行されるプログラムの割込みによるスケジューリングの阻害が発生する。このため、複数のプロセッサ間のバランスがとれず、特定のプロセッサの定常的に実行される複数のプログラムの必要性能に、単純に非定常的に実行されるプログラムの必要性能（に発生頻度を加味したもの）がプロセッサの要求性能となってしまう。【０００６】
そこで、上記の課題を解決し、コンテキスト退避復帰によるオーバヘッドを発生することなく、かつ複数のプロセッサでの性能バランスをとることで、各プロセッサでの必要性能を最小としつつ、システム全体として高い性能を得ることを目的とする。
【課題を解決するための手段】
【０００７】
上記の課題を解決するために本発明に係るマルチプロセッサシステムは、複数のプログラムを切り替えながら実行する複数のプロセッサと、前記複数のプロセッサのいずれかで、非定常的に実行されるプログラムのコンテキストデータを格納し、前記複数のプロセッサで共有される第一のコンテキストメモリと、前記複数のプロセッサの個数と同じ個数設けられ、それぞれ、対応する前記プロセッサが定常的に実行するプログラムのコンテキストデータを格納し、当該プロセッサにより専有される第二のコンテキストメモリと、同じく前記複数のプロセッサの個数と同じ個数設けられ、それぞれ、対応する前記プロセッサに対してプログラムの実行要求があった場合に、当該プログラムが前記非定常的に実行されるプログラムであれば前記第一のコンテキストメモリを選択すると共に、前記定常的に実行するプログラムであれば前記第二のコンテキストメモリを選択して、選択したコンテキストメモリと当該プロセッサとの間で当該プログラムのコンテキストデータの退避及び復帰を行い、当該プロセッサが専有する退避復帰制御部と、前記非定常的に実行されるプログラムの実行要求が発生するごとに、前記複数のプロセッサのいずれかを選択し、選択したプロセッサに対して当該プログラムの実行要求を行う選択要求部と、を備える。なお、「複数のＡのうちのそれぞれのＡが、Ｂする（Ｂである）」ことは、「複数のＡは、それぞれ、Ｂする（Ｂである）」と呼ばれる。複数の第二のコンテキストメモリのうちのそれぞれの第二のコンテキストメモリは、その第二のコンテキストメモリに対応するプロセッサが定常的に実行するプログラムのコンテキストデータを格納する。その第二のコンテキストメモリは、そのプロセッサにより専有される。【０００８】
この構成により、複数のプロセッサは、それぞれ、当該プロセッサが専有する第二のコンテキストメモリを用いて、他のプロセッサの動作にかかわりなく、自由に、定常的に実行するプログラムを実行できる。例えば、定常的に実行する複数のプログラムのうちで、いずれを実行するかを選ぶスケジューリングを、他のプロセッサの動作に阻害されずに自由にできたり、他のプロセッサからの当該プログラムのデータ転送などの大きなデータ転送が必要なくなったりする。一方で、例えば、ユーザ入力による割込みなどの非定常的な割込みにより複数のプロセッサの何れかにより非定常的に実行されるプログラムなどの、複数のプロセッサの何れかにより非定常的に実行されるプログラムは、当該プログラムを実行するプロセッサにより第二のコンテキストメモリが用いられることにより、何れのプロセッサでも実行できる。これにより、実行要求が発生するごとに、当該発生に際して選択されたプロセッサにより実行されて、実行されるプロセッサが例えば１つのプロセッサなどの少数のプロセッサに偏ってしまってマルチプロセッサシステムの性能が低下してしまうことを防ぐことができる。また、非定常的に実行されるプログラムを実行するプロセッサが、複数のプロセッサに十分に分散されることで、例えば、非定常的に実行されるプログラムの実行により、上記した、定常的に実行されるプログラムの実行が阻害されてしまうことを少なくしたり、逆に、定常的に実行されるプログラムの実行により、非定常的に実行されるプログラムの実行が阻害されてしまったりするのが防がれる。このため、マルチプロセッサシステムの性能が低下してしまうことを防ぎ、マルチプロセッサシステムの性能を向上できる。【０００９】
なお、定常的に実行されるプログラムは、例えば、いわゆるサービスプログラムであってもよいし、いわゆるデーモンプログラムであってもよいし、ＨＴＴＰ（HyperText Transfer Protocol）サーバ等のサーバ用のプログラムであってもよいし、対象を常時監視する監視プログラムであってもよい。【００１０】
他方、非定常的に実行されるプログラムは、例えば、キー入力などのユーザ入力や、通信による入力、０による除算の発生などの各種のイベントを処理するイベント処理用のプログラムであってもよい。【００１１】
ここで、当該マルチプロセッサは、前記複数のプロセッサに共有される主記憶メモリを備え、前記複数のプロセッサは、それぞれ、当該主記憶メモリを用いて、前記非定常的に実行されるプログラム及び前記定常的に実行されるプログラムをそれぞれ実行するものとしてもよい。【００１２】
この構成により、例えば、前記複数のプロセッサが、それぞれ、当該プロセッサが専有する専有メモリを用いてプログラムを実行する。これにより、選択されたプロセッサが、当該プロセッサ以外の他のプロセッサの当該専有メモリから、非定常的に実行されるプログラムによる処理の途中の中間データ等のデータを長い時間をかけて取得する場合などと比べて、非定常的に実行されるプログラムによる処理の途中のデータの取得の遅延をなくして、マルチプロセッサシステムがより高速に動作できる。【００１３】
ここで、当該マルチプロセッサは、前記複数のプロセッサが、それぞれ、複数のレジスタ群と、前記複数のレジスタ群のうちで何れかのレジスタ群を、プログラムの実行に当該プロセッサが利用する実行用のレジスタ群として選択すると共に、選択したレジスタ群以外の他の何れかのレジスタ群をコンテキストデータの退避復帰用のレジスタ群として選択するレジスタ群選択部とを備え、前記複数のプロセッサは、それぞれ、当該プロセッサの当該レジスタ群選択部が前記実行用のレジスタとして選択するレジスタ群を使用してプログラムを実行し、前記退避復帰制御部は、当該プロセッサが、選択された前記実行用のレジスタ群を使用してプログラムを実行するのと同時に、選択された前記退避復帰用のレジスタ群に対し、コンテキストデータの退避及び復帰を行うものとしてもよい。【００１４】
この構成により、例えば、実行用レジスタ群が使用されたプログラムの実行と並列にコンテキストデータの退避復帰が行われるなどして、当該実行と同時にコンテキストデータの退避復帰が行われることにより、退避及び復帰の処理や、プログラムの実行の処理にオーバヘッド（遅延時間）が生じるのを防ぎ、マルチプロセッサシステムを高速化できる。【００１５】
ここで、当該マルチプロセッサシステムは、前記複数のプロセッサがそれぞれローカルキャッシュメモリを有する共有メモリ型マルチプロセッサシステムであるものとしてもよい。【００１６】
この構成により、定常的に実行されるプログラムの処理が、当該プログラムを実行するプロセッサの外部で無駄な動作を生じさせることを回避したり、外部の動作により当該プログラムの処理のために当該プロセッサで無駄な動作が生じることを防いだりでき、マルチプロセッサシステムの動作を高速化できる。【００１７】
ここで、前記選択要求部は、前記非定常的に実行されるプログラムの実行要求が発生するごとに、前記複数のプロセッサのうちで、前回の前記非定常的に実行されるプログラムの実行要求の発生に際して選択したプロセッサとは別のプロセッサを選択するものとしてもよい。【００１８】
この構成により、何れのプロセッサも、非定常的に実行されるプログラムの処理を同じ処理の量ずつ行うようにでき、確実かつ十分に、非定常的に実行されるプログラムの処理が複数のプロセッサに分散され、十分かつ確実にマルチプロセッサシステムの性能を向上できる。【００１９】
なお、例えば、選択要求部は、複数のプロセッサのうちの１つを特定する特定データを保持し、保持する特定データにより特定されるプロセッサを選択すると共に、当該選択のたびに、保持する特定データを、選択した前記プロセッサ以外の他のプロセッサを特定する特定データに更新するものであってもよい。【００２０】
ここで、前記選択要求部は、前記複数のプロセッサの動作状態を検出し、検出された動作状態に対して予め定められた対応関係を有するプロセッサを選択するものとしてもよい。【００２１】
この構成であれば、例えば、各プロセッサのうちで何れがスリープ状態（空き状態）であるかなどの動作状態、つまり、何れのプロセッサが、非定常的に実行されるプログラムを実行するための余裕がある予め定められた状態であるかなどの各プロセッサの動作状態が検出される。そして、この検出に基づいて、スリープ状態であるプロセッサが選択されるなど、動作状態に対応する適切なプロセッサが選択でき、選択時の動作状態の実情に適するプロセッサを的確に選択し、十分かつ確実にマルチプロセッサシステムの性能を向上できる。【００２２】
また、前記課題を解決するにあたり、本発明に係る他のマルチプロセッサシステムは、次の構成を採ってもよい。すなわち、(ａ)複数のプログラムを切替えながら実行する複数のプロセッサと、前記複数のプロセッサに共有される主記憶メモリと、前記複数のプロセッサのそれぞれが専有し、定常的に実行される1つ以上のプログラムのコンテキストデータを格納するための第二のコンテキストメモリと、前記複数のプロセッサで共有され、前記複数のプロセッサのいずれかで、非定常的に実行される１つ以上のプログラムのコンテキストデータを格納するための第一のコンテキストメモリと、前記非定常的に実行される１つ以上のプログラムの実行要求が発生するごとに、前記複数のプロセッサのいずれかを選択するかを決定し、前記実行要求を選択したプロセッサに対し実行を要求する選択先切り替え手段と、前記複数のプロセッサのそれぞれが専有し、所定のプログラム切り替えタイミングまたは、前記選択先切り替え手段からの前記実行要求に応じて、前記第二のコンテキストメモリまたは前記第一のコンテキストメモリのいずれかを選択して、接続されるプロセッサに対しコンテキストデータの退避復帰を行う処理制御手段と、を有することとする。【００２３】
これによって、非定常的に実行されるプログラムの処理を複数のプロセッサに分散させることが可能となり、かつ定常的に実行されるプログラムはプロセッサごとにローカルタスクとして独立にスケジューリングすることが可能となる。これにより、スケジューリングの容易性を維持しつつ、効率的なプログラム実行により、プロセッサシステムの性能向上に寄与する。【００２４】
さらに、（ｂ）前記複数のプロセッサそれぞれは、複数のレジスタ群と、複数のレジスタ群のいずれかをプログラム実行対象として選択し、前記プログラム実行対象として選択されていないレジスタ群のいずれかをコンテキスト退避復帰対象として選択するレジスタ群選択手段とを備え、前記プロセッサは、前期レジスタ群選択手段が選択するレジスタ群を使用してプログラムを実行し、前記コンテキスト退避復帰対象として選択されたレジスタ群に対し、プログラムの実行と平行してコンテキストデータの退避復帰を行うこととしてもよい。【００２５】
これによって、退避復帰による処理のオーバヘッドなく、スケジューリングの容易性を維持しつつ、効率的なプログラム実行に寄与する。【００２６】
さらに、（ｃ）前記マルチプロセッサシステムは、複数のプロセッサのそれぞれがローカルキャッシュメモリを有する共有メモリ型マルチプロセッサシステムであるとしてもよい。【００２７】
これによって、定常的に実行されるプログラムは、プロセッサ間を移動することがないため、ローカルキャッシュに乗せられたプログラムの命令およびデータの一貫性を保つための、スヌープ動作等によるオーバヘッドを発生させることなくプログラムの実行が可能となり、プロセッサシステムの性能向上に寄与する。【００２８】
さらに、（ｄ）前記選択先切り替え手段は、予め定められた順序に従って、前記非定常的に実行される１つ以上のプログラムの実行要求が発生するごとに、前記複数のプロセッサの選択先を切り替えるとしてもよい。【００２９】
これによって、非定常的に実行されるプログラムのプロセッサの割当て回数を均等化することができ、効率的なプログラム実行が可能となり、プロセッサシステムの性能向上に寄与する。【００３０】
または、（ｅ）前期選択先切り替え手段は、前記複数のプロセッサの動作状態に基づいて選択先を決定するとしてもよい。【００３１】
これによって、非定常的に実行されるプログラムのプロセッサの割当てを、その時点で空き状態等の余裕のあるプロセッサに配分することが可能となり、プロセッサシステムの性能向上に寄与する。【００３２】
または、（ｆ）前記複数のプロセッサのそれぞれは、前記定常的に実行される１つ以上のプログラムの実行を中断する事由の発生および中断する事由が解消したことを検出してプログラム実行の停止・再開を制御するイベント検出手段を備え、前記選択先切り替え手段は前記イベント検出手段からのイベント情報に基づいて選択先を決定するとしてもよい。【００３３】
これによって、非定常的に実行されるプログラムのプロセッサの割当てを、各プロセッサのイベント情報に従って柔軟にプロセッサに配分することが可能となり、プロセッサシステムの性能向上に寄与する。【００３４】
または、（ｇ）前記複数のプロセッサのそれぞれは、前記定常的に実行される１つ以上のプログラムの実行を中断する事由の発生および中断する事由が解消したことを検出してプログラム実行の停止・再開を制御するイベント検出手段を備え、前記選択先切り替え手段は前記イベント検出手段からのイベント情報の所定の期間内での履歴に基づいて選択先を決定するとしてもよい。【００３５】
これによって、非定常的に実行されるプログラムのプロセッサの割当てを、各プロセッサの過去のイベント情報も含め柔軟にプロセッサに配分することが可能となり、プロセッサシステムの性能向上に寄与する。【００３６】
なお、次の構成を採ってもよい。すなわち、マルチプロセッサシステムであって、複数のプロセッサがそれぞれ専有し、定常的に実行されるプログラムのコンテキストデータを格納するローカルコンテキストメモリと、複数のプロセッサが共有し、非定常的に実行されるプログラムのコンテキストデータを格納する共有コンテキストメモリを持ち、定常実行されるプログラムはプロセッサごとのローカルスレッドとして実行し、非定常実行されるプログラムは、複数のプロセッサのいずれかに分配して実行することにより、リアルタイム性を維持しつつ、高速にイベント処理を実行可能なマルチプロセッサシステムの構成を採ってもよい。
【発明の効果】
【００３７】
本発明によれば、定常的に実行されるプログラムは特定のプロセッサで実行することで、キャッシュの一貫性保持のためのオーバヘッドを生じることなく、かつ非定常的に実行されるプログラムは複数のプロセッサに配分可能であることにより、非定常的に実行されるプログラムが要求する性能分を複数のプロセッサに分散させることが可能となり、プロセッサシステムの性能向上に寄与する。
【図面の簡単な説明】
【００３８】
【図１】図１は、実施の形態１におけるマルチプロセッサシステムの構成を示すブロック図である。
【図２】図２は、実施の形態１における処理制御部の構成を示すブロック図である。
【図３】図３は、実施の形態１における選択先切替部の構成を示すブロック図である。
【図４】図４は、実施の形態１におけるコンテキスト切り替えを説明するタイミングチャートである。
【図５】図５は、実施の形態１におけるプログラムの実行を説明するタイミングチャートである。
【図６】図６は、実施の形態１におけるプログラムの実行を説明するタイミングチャートである。
【図７】図７は、実施の形態２におけるマルチプロセッサシステムの構成を示すブロック図である。
【図８】図８は、実施の形態２における選択先切替部の構成を示すブロック図である。
【図９】図９は、実施の形態２における選択先切替部の構成を示すブロック図である。
【図１０】図１０は、実施の形態２におけるプログラムの実行を説明するタイミングチャートである。
【図１１】図１１は、実施の形態３におけるマルチプロセッサシステムの構成を示すブロック図である。
【図１２】図１２は、実施の形態３における選択先切替部の構成を示すブロック図である。
【図１３】図１３は、実施の形態３におけるプログラムの実行を説明するタイミングチャートである。
【発明を実施するための形態】
【００３９】
（実施の形態１）
以下、本発明に係る実施の形態１について、図面を参照しながら説明する。
【００４０】
図１は、本発明に係る実施の形態１におけるマルチプロセッサシステム１００の構成を示すブロック図である。
【００４１】
マルチプロセッサシステム１００は、図１に示されるように、２個のプロセッサエレメント１０１と、選択先切替部１０９と、共有コンテキストメモリ１１０と、コンテキストデータセレクタ１１１と、共有バス１５０と、メインメモリ１５１とを備える。
【００４２】
２個のプロセッサエレメント１０１は、それぞれ、ＣＰＵ１０２と、処理制御部１０３と、ローカルコンテキストメモリ１０４と、レジスタ群１０５と、レジスタ群１０６と、コンテキストデータセレクタ１０７と、コンテキストデータセレクタ１０８と、ローカルキャッシュメモリ１５２とを備える。なお、「複数のＡのうちのそれぞれのＡが、Ｂである（Ｂする）」ことは、「複数のＡは、それぞれ、Ｂである（Ｂする）」と呼ばれる。それぞれのプロセッサエレメント１０１は、そのプロセッサエレメント１０１のＣＰＵ１０２を備える（図１参照）。複数のプロセッサエレメント１０１は、複数のプロセッサエレメント１０１のなかに含まれるプロセッサエレメント１０１の個数（２個）と同じ個数（２個）だけのＣＰＵ１０２を備える。
【００４３】
以下、図１で左側のプロセッサエレメント１０１を、左側のプロセッサエレメント１０１と呼び、図１で右側のプロセッサエレメント１０１を、右側のプロセッサエレメント１０１と呼ぶ。
【００４４】
図２は、本発明に係る実施の形態１における各処理制御部１０３（図１）の内部構成を示すブロック図である。以下で説明する処理制御部１０３の内部構成は、例えば、左側のプロセッサエレメント１０１の内部構成であり、他方の右側のプロセッサエレメント１０１は、以下で説明する左側のプロセッサエレメント１０１の内部構成と同じ内部構成を有する。
【００４５】
処理制御部１０３は、図２に示されるように、コンテキスト切替制御部１２０と、サイクルカウンタ１２１と、ローカルイベント検出部１２２とを備える。
【００４６】
図３は、本発明に係る実施の形態１における選択先切替部１０９（図１）の内部構成を示すブロック図である。
【００４７】
選択先切替部１０９は、図３に示されるように、ＣＰＵ選択ステート１２３と、実行要求先選択部１２４とを備える。
【００４８】
図４は、プロセッサエレメント１０１における、レジスタ群１０５およびレジスタ群１０６のいずれかのデータを選択するコンテキストデータセレクタ１０７およびコンテキストデータセレクタ１０８から構成されるセレクタの動作と、当該セレクタにより選択されたデータが用いられた、ＣＰＵ１０２でのプログラムＡ〜Ｃの実行の処理について説明するタイミングチャートである。
【００４９】
なお、図４の説明においては、プログラムＡ〜Ｃは、例えば、左側のプロセッサエレメント１０１のＣＰＵ１０２により実行される複数のプログラムであり、他方の、右側のプロセッサエレメント１０１のＣＰＵ１０２は、図４の説明と同様における複数のプログラムの実行の処理と同様の処理により、複数のプログラムを実行する。
【００５０】
時刻ｔ３までの期間の間、ＣＰＵ１０２は、プログラムＡを実行する。
【００５１】
図４において、時刻ｔ３までの期間、コンテキストデータセレクタ１０７およびコンテキストデータセレクタ１０８から構成されるセレクタは、ＣＰＵ１０２でのプログラム実行による読出しおよび書込みアクセスについては、図１において上側に示されるレジスタ群１０５を、プログラム実行対象のレジスタ群として選択し、処理制御部１０３によるコンテキストデータの読出し（退避）および書込み（復帰）アクセスについては、他方の下側のレジスタ群１０６を、コンテキスト退避復帰対象レジスタ群として選択する。なお、当該レジスタは、図１に示されるようにマルチプロセッサシステム１００が、レジスタ群１０５とレジスタ群１０６との２つだけのレジスタ群を有するのでなく、３つ以上のレジスタ群を有する場合には、各レジスタ群のうちから、プログラム実行対象となっているレジスタ群以外の他のレジスタ群を、コンテキスト退避復帰対象レジスタ群として選択する。
【００５２】
時刻ｔ３までの期間の間、ＣＰＵ１０２は、コンテキストデータセレクタ１０７およびコンテキストデータセレクタ１０８が実行対象のレジスタ群として選択しているレジスタ群１０５に保持された、プログラムＡのコンテキストを使用して、プログラムＡを実行する。
【００５３】
そして、時刻ｔ１から時刻ｔ２までの期間の間、処理制御部１０３は、スケジューリングによってＣＰＵ１０２が次に実行予定となったプログラムＢのコンテキストデータを復帰するため、時刻ｔ１から時刻ｔ２までの期間において、セレクタによってコンテキスト退避復帰対象レジスタ群として選択されている、プログラム実行対象となっていない、下側のレジスタ群１０６に対し、ＣＰＵ１０２でのプログラム実行と並行して、当該退避復帰対象レジスタ群に格納された、既存のプログラムＮのコンテキストデータの退避および、当該退避復帰対象レジスタ群への、プログラムＢのコンテキストデータの復帰を行う。
【００５４】
時刻ｔ３において、コンテキストデータセレクタ１０７およびコンテキストデータセレクタ１０８は、ＣＰＵ１０２からのアクセスについては下側のレジスタ群１０６を選択し、処理制御部からのアクセスについては上側のレジスタ群１０５を選択するように選択先を切り替える。
【００５５】
これにより、ＣＰＵ１０２は、コンテキストの退避および復帰の処理によるオーバヘッドを発生させることなく、迅速に、時刻ｔ３からプログラムＢの実行を開始する。
【００５６】
図５は、定常的に実行される複数のプログラムをＣＰＵ１０２が実行する場合のマルチプロセッサシステム１００の動作を説明するタイミングチャートである。
【００５７】
図５に示されるように、各ＣＰＵ１０２は、それぞれ、非定常的に実行されるプログラムの実行要求がマルチプロセッサシステム１００にない場合は、２つあるローカルコンテキストメモリ１０４のうちで、当該ＣＰＵ１０２に対応するローカルコンテキストメモリ１０４に格納されている、定常的に実行される複数のプログラムを実行し、独立したスケジュール周期で、実行するプログラムを、それら定常的に実行される複数のプログラムのうちで切り替える。
【００５８】
ここでの例としては、一方のＣＰＵ１０２（例えば、左側のプロセッサエレメント１０１のＣＰＵ１０２）では定常的に実行されるプログラムＡ、Ｂ、Ｃを順次切り替えながら擬似並列的に実行し、他方のＣＰＵ１０２（例えば、右側のプロセッサエレメント１０１のＣＰＵ１０２）では定常的に実行されるプログラムＤ、Ｅ、Ｆを順次切り替えながら擬似並列的に実行する場合を示している。
【００５９】
コンテキスト切替制御部１２０は、実行されるプログラムが、実行中のプログラムから別のプログラムに切り替えられるタイミングとなると、ローカルコンテキストメモリ１０４に格納されている各プログラムのコンテキストデータに含まれるスケジューリング順序に基づき、次の実行対象プログラム（例えばプログラムＢ）を決定し、コンテキストデータの退避復帰を開始する。
【００６０】
そして、処理制御部１０３は、この退避復帰の完了後、コンテキストデータセレクタ１０７およびコンテキストデータセレクタ１０８から構成されるセレクタの選択先を切り替える。処理制御部１０３は、具体的には、上述した、プログラム実行対象のレジスタ群として、その切り替えの直前にコンテキストデータの退避復帰がされたレジスタ群、つまり直前にコンテキスト退避復帰対象レジスタ群として選択されていたレジスタ群を選択させ、これにより、直前に退避復帰がされたコンテキストデータのプログラム（プログラムＢ）の実行をＣＰＵ１０２に開始させる。
【００６１】
そして、コンテキスト切替制御部１２０（図２）は、このような、実行されるプログラムの切り替えが発生した時に、切り替えにより新たに実行が開始されるプログラム（例えばプログラムＢ）のコンテキストデータに含まれるカウンタ初期値を、サイクルカウンタ１２１（図２）へ通知する。
【００６２】
サイクルカウンタ１２１は、この通知がされると、通知されたカウンタ初期値を自己に設定すると共に、設定の後、クロックサイクルごとにダウンカウントし、カウンタ値が０となれば、０となったことをコンテキスト切替制御部１２０に通知することで、次のプログラム（例えばプログラムＣ）への切り替えをコンテキスト切替制御部１２０（処理制御部１０３）に開始させる。上述した、例えば、プログラムＡからプログラムＢへの切り替えや、プログラムＢからプログラムＣへの切り替えなどの、実行されるプログラムの切り替えのタイミングは、この通知があったタイミングである。処理制御部１０３は、この通知があると、実行されるプログラムを切り替える。
【００６３】
なお、上記に説明した、コンテキストデータの退避復帰をプログラム実行と並列的に実行することで、退避復帰のオーバヘッドなくプログラム実行を可能とすることや、さまざまなスケジューリング方法の技術についての様々な公知の技術をマルチプロセッサシステム１００に適用するものとしてもよい。公知の技術に関係する点に関しては、説明の便宜上、詳しい説明を省略する。
【００６４】
図６は、非定常的に実行されるプログラムの実行要求が発生した場合のＣＰＵ１０２の動作を説明するタイミングチャートである。
【００６５】
図６では、一方のＣＰＵ１０２（例えば左側のプロセッサエレメント１０１のＣＰＵ１０２）では定常的に実行されるプログラムＡ、Ｂ、Ｃを順次切り替えながら擬似並列的に実行し、他方のＣＰＵ１０２（例えば右側のプロセッサエレメント１０１のＣＰＵ１０２）では定常的に実行されるプログラムＤ、Ｅ、Ｆを順次切り替えながら擬似並列的に実行しているものとし、非定常的に実行されるプログラムの実行要求の要因として、各プログラムに依存しない共通の割込み要求が発生した場合の例を示す。例えば、この、共有の割り込み要求は、ユーザ入力によって発生する割込み要求や、通信の着信により発生する割込み要求が含まれる。
【００６６】
時刻ｔ１において、共有の割込み要求（図１の共通割込み要求信号１１２）が発生する時刻が示される。
【００６７】
実行要求先選択部１２４は、時刻ｔ１で共有の割込み要求が発生すると、ＣＰＵ選択ステート１２３（図３）の選択情報に基づいて、複数のＣＰＵ１０２のうちのひとつに対して、非定常的に実行されるプログラムの実行をするよう、対応する処理制御部１０３にプログラム実行要求を渡す。
【００６８】
ここで、ＣＰＵ選択ステート１２３は、レジスタ群１０５、レジスタ群１０６の何れか一方を、選択先切替部１０９による選択の選択先として特定するデータを保持するレジスタにより構成され、共通割込み要求を受けるごとに、保持するデータが特定する、ＣＰＵ１０２の選択先を更新し、各ＣＰＵ１０２を順次指定するように更新される。なお、例えば、ＣＰＵ選択ステート１２３は、共通割込み要求を受けると、更新を行う更新用の回路を有し、この更新用の回路を用いるなどして、共通割込み要求を受けた場合に、更新を行う。
【００６９】
処理制御部１０３は、プログラム実行用要求を受けると、つまり、上述した共有割り込みが発生して、選択先切替部１０９が当該処理制御部１０３に実行要求を行うと、定常的に実行しているプログラムのスケジューリングに割込んで、非定常的に実行されるプログラムＩを、次に実行するプログラムとして、既存の、定常的に実行されるプログラムのコンテキストデータをプログラム実行対象のレジスタ群からローカルコンテキストメモリ１０４に退避し、共有コンテキストメモリ１１０から、その、次に実行するプログラムの、非定常的に実行されるプログラムのコンテキストデータをコンテキスト退避復帰対象レジスタ群に復帰する。
【００７０】
コンテキスト切替制御部１２０（図２）は、上記のようにして処理制御部１０３によりコンテキストデータが、共有コンテキストメモリ１１０から復帰された後、コンテキストデータセレクタ１０７およびコンテキストデータセレクタ１０８の選択先を切り替え、この切り替えがされることにより、復帰されたコンテキストデータが書き込まれたレジスタ群がプログラム実行対象のレジスタ群として選択されて、ＣＰＵ１０２は、当該コンテキストデータを用いて、プログラムＩの実行を開始する。こうして、ＣＰＵ１０２は、図６の「Ｉ実行」の記号により示される期間の間、プログラムＩを実行する。
【００７１】
なお、サイクルカウンタ１２１は、こうして非定常的に実行されるプログラムが実行される途中は停止し、つまり、ダウンカウントを行わずに同じカウンタ値を維持し、次の切り替えタイミングは、プログラムＩの実行終了によって決定される。すなわち、本実施の形態の例では、割り込まれたプログラムＣは、プログラムＩが終了後、次のＣＰＵ１０２の実行対象として割り当てられることとしている（図６における「Ｉ実行」の後の「Ｃ実行」を参照）。
【００７２】
処理制御部１０３は、プログラムＩの実行が終了した後、プログラム実行対象外となったレジスタ群、つまりコンテキスト退避復帰対象レジスタ群に格納されているプログラムＩのコンテキストデータを復帰する場合は、共有コンテキストメモリ１１０へ復帰する。
【００７３】
２個のプロセッサエレメント１０１は、それぞれ、何れも、以上に説明したような処理を行う。これにより、ｔ２の時刻で共通割込み要求が発生した場合は、ＣＰＵ選択ステート１２３が、ｔ１の時刻に発生した共通割込み要求に基づくプログラム実行に際して、予め、当該プログラム実行を行ったＣＰＵ１０２（例えば、図１における左側のＣＰＵ１０２）とは異なる他方のＣＰＵ１０２（例えば、図１における右側のＣＰＵ１０２）に更新されていることから、当該他方のＣＰＵ１０２、つまり時刻ｔ１での実行に係るＣＰＵ１０２とは別のＣＰＵ１０２により、非定常的に実行されるプログラムの実行が行われる。
【００７４】
以上、本実施の形態におけるマルチプロセッサシステム１００によれば、定常的に実行されるプログラムは各プロセッサ（図１における左側のプロセッサエレメント１０１および右側のプロセッサエレメント１０１）で、それぞれ、個別にスケジューリングして実行される。このため、プロセッサごとに独立したスケジューリングが可能となる上、プロセッサ間での定常的に実行されるプログラムの移動（データ）がない。このため、共有バス１５０を介したキャッシュの一貫性保持のためのキャッシュスヌープ動作などによるオーバヘッドもなく、効率的なプログラム実行が可能となる。さらに、イベント処理等の非定常的に実行されるプログラムの実行については、複数のＣＰＵにその処理負荷を分散平均化させることができ、特定のプロセッサにイベント処理をさせる場合に比べ、プロセッサの必要最大処理性能を低減することが可能となる。
【００７５】
なお、本実施の形態では、２個のプロセッサの構成を示したが、本発明は２個のプロセッサを有するマルチプロセッサシステムに限定されるものではなく、３個以上のプロセッサを有するマルチプロセッサシステムにも適用可能である。
【００７６】
また、本実施の形態では、２つのレジスタ群（レジスタ群１０５、レジスタ群１０６：図１参照）の構成を示したが、複数のプログラムを切り替えて実行するスケジューリング方法などによっては、３個以上のレジスタ群で構成するほうが退避復帰の回数を減らすことができるような場合についても、本発明の適用は可能である。
【００７７】
こうして、複数のプログラムを切り替えながら実行する複数のプロセッサ（左側のプロセッサエレメント１０１、右側のプロセッサエレメント１０１：図１）と、前記複数のプロセッサのいずれかで、非定常的に実行されるプログラムのコンテキストデータを格納し、前記複数のプロセッサで共有される第一のコンテキストメモリ（共有コンテキストメモリ１１０）と、前記複数のプロセッサの個数と同じ個数設けられ、それぞれ、対応する前記プロセッサが定常的に実行するプログラムのコンテキストデータを格納し、当該プロセッサにより専有される第二のコンテキストメモリ（左側のプロセッサエレメント１０１が有するローカルコンテキストメモリ１０４、及び、右側のプロセッサエレメント１０１が有するローカルコンテキストメモリ１０４）と、同じく前記複数のプロセッサの個数と同じ個数設けられ、それぞれ、対応する前記プロセッサに対してプログラムの実行要求があった場合に、当該プログラムが前記非定常的に実行されるプログラムであれば前記第一のコンテキストメモリを選択すると共に、前記定常的に実行するプログラムであれば前記第二のコンテキストメモリを選択して、選択したコンテキストメモリと当該プロセッサとの間で当該プログラムのコンテキストデータの退避及び復帰を行い、当該プロセッサが専有する退避復帰制御部（左側のプロセッサエレメント１０１が有する処理制御部１０３、及び、右側のプロセッサエレメント１０１が有する処理制御部１０３）と、前記非定常的に実行されるプログラムの実行要求が発生するごとに、前記複数のプロセッサのいずれかを選択し、選択したプロセッサに対して当該プログラムの実行要求を行う選択要求部（選択先切替部１０９）と、を備えるマルチプロセッサシステム（マルチプロセッサシステム１００）が構成される。
【００７８】
これにより、複数のプロセッサは、それぞれ、自由に、定常的に実行するプログラムを実行でき、複数のプロセッサの何れかにより非定常的に実行されるプログラムは、何れのプロセッサでも実行できて、非定常的に実行されるプログラムを実行するプロセッサが、複数のプロセッサに十分に分散され、例えば、非定常的に実行されるプログラムの実行により、定常的に実行されるプログラムの実行が阻害されてしまうことを少なくしたり、逆に、定常的に実行されるプログラムの実行により、非定常的に実行されるプログラムの実行が阻害されてしまったりすることを防ぎ、性能を向上できる。
【００７９】
ここで、当該マルチプロセッサは、前記複数のプロセッサに共有される主記憶メモリ（メインメモリ１５１）を備え、前記複数のプロセッサは、それぞれ、当該主記憶メモリを用いて、前記非定常的に実行されるプログラム及び前記定常的に実行されるプログラムをそれぞれ実行する。
【００８０】
ここで、当該マルチプロセッサは、前記複数のプロセッサは、それぞれ、複数のレジスタ群（レジスタ群１０５と、レジスタ群１０６）と、前記複数のレジスタ群のうちで何れかのレジスタ群を、プログラムの実行に当該プロセッサが利用する実行用のレジスタ群として選択すると共に、選択したレジスタ群以外の他の何れかのレジスタ群をコンテキストデータの退避復帰用のレジスタ群として選択するレジスタ群選択部（コンテキストデータセレクタ１０７およびコンテキストデータセレクタ１０８から構成されるセレクタ）とを備え、前記複数のプロセッサは、それぞれ、当該プロセッサの当該レジスタ群選択部が前記実行用のレジスタとして選択するレジスタ群を使用してプログラムを実行し、前記退避復帰制御部は、当該プロセッサが、選択された前記実行用のレジスタ群を使用してプログラムを実行するのと同時に、選択された前記退避復帰用のレジスタ群に対し、コンテキストデータの退避及び復帰を行うものである。
【００８１】
ここで、当該マルチプロセッサシステムは、前記複数のプロセッサがそれぞれローカルキャッシュメモリ（左側のプロセッサエレメント１０１が有するローカルキャッシュメモリ１５２、及び、右側のプロセッサエレメント１０１が有するローカルキャッシュメモリ１５２）を有する共有メモリ型マルチプロセッサシステムである。
【００８２】
ここで、前記選択要求部は、前記非定常的に実行されるプログラムの実行要求が発生するごとに、前記複数のプロセッサのうちで、前回の前記非定常的に実行されるプログラムの実行要求の発生に際して選択したプロセッサとは別のプロセッサを選択する。
【００８３】
なお、選択要求部は、複数のプロセッサのうちの１つを特定する特定データ（ＣＰＵ選択ステート１２３（図３）の選択情報）を保持し、保持する特定データにより特定されるプロセッサ（例えば、図６の時刻ｔ１で選択される図６上段の方のプロセッサエレメント１０１）を選択すると共に、当該選択のたびに、保持する特定データを、選択した前記プロセッサ以外の他のプロセッサ（例えば、図６の時刻ｔ２で選択される図６下段の方のプロセッサエレメント１０１）を特定する特定データに更新するものである。
【００８４】
（実施の形態２）
以下、本発明に係る実施の形態２について、図面を参照しながら説明する。
【００８５】
図７は、本発明に係る実施の形態２におけるマルチプロセッサシステム２００の構成を示すブロック図である。なお、本発明に係る実施の形態１と同一の構成については、同一の番号を付与して説明を省略する。
【００８６】
マルチプロセッサシステム２００は、図７に示されるように、２個のプロセッサエレメント２０１と、選択先切替部２０９と、共有コンテキストメモリ１１０と、コンテキストデータセレクタ１１１と、共有バス１５０と、メインメモリ１５１とを備える。
【００８７】
そして、プロセッサエレメント２０１は、ＣＰＵ１０２と、処理制御部２０３と、ローカルコンテキストメモリ１０４と、レジスタ群１０５と、レジスタ群１０６と、コンテキストデータセレクタ１０７と、コンテキストデータセレクタ１０８と、ローカルキャッシュメモリ１５２とを備える。
【００８８】
図８は、本発明に係る実施の形態２における処理制御部２０３（図７）の内部構成を示すブロック図である。
【００８９】
処理制御部２０３は、図８に示されるように、コンテキスト切替制御部１２０と、サイクルカウンタ１２１と、ローカルイベント検出部２２２とを備える。
【００９０】
図９は、本発明に係る実施の形態２における選択先切替部２０９（図７参照）の構成を示すブロック図である。
【００９１】
選択先切替部２０９は、図９に示されるように、ＣＰＵ選択ステート２２３と、実行要求先選択部２２４とを備える。
【００９２】
図１０は、非定常的に実行されるプログラムの実行要求が発生した場合のＣＰＵ１０２の動作を説明するタイミングチャートである。
【００９３】
図１０では、一方のＣＰＵ１０２（例えば、図７における左側のプロセッサエレメント２０１）では定常的に実行されるプログラムＡ、Ｂ、Ｃを順次切り替えながら擬似並列的に実行し、他方のＣＰＵ１０２（例えば、図７における右側のプロセッサエレメント２０１）では定常的に実行されるプログラムＤ、Ｅ、Ｆを順次切り替えながら擬似並列的に実行しているものとし、非定常的に実行されるプログラムの実行要求の要因として、各プログラムに依存しない共通の割込み要求が発生した場合の例を示す。
【００９４】
ここで、各ＣＰＵ１０２は、それぞれ、プログラムを実行しているときに、実行しているプログラムがスリープ状態となると、そのプログラム実行で設定されたカウンタ値の残り分空き状態とし、カウンタ値が０となるまで、スリープ状態となったプログラム以外の他のプログラムのスケジューリングをしないこととする。例えば、図１０に示されるプログラムＡの実行で設定されたカウンタ値の残り分空き状態とし、カウンタ値が０となるまで他のプログラムのスケジューリングをしない。
【００９５】
時刻ｔ１は、共有の割込み要求が発生した第１の時刻を示す。また、時刻ｔ２は、共有の割込み要求が発生した第２の時刻を示す。
【００９６】
時刻ｔ１は、２つのＣＰＵ１０２の何れもスリープ状態ではない間において、共有の割込み要求が発生した時刻である。
【００９７】
実行要求先選択部２２４は、時刻ｔ１において、共有の割込み要求が発生すると、ＣＰＵ選択ステート２２３の選択情報に基づいて、複数のＣＰＵ１０２のうちの１つに対して、非定常的に実行されるプログラムの実行をするよう、当該ＣＰＵ１０２に対応する処理制御部２０３にプログラム実行要求を渡す。
【００９８】
なお、ＣＰＵ選択ステート２２３は、共通割込み要求を受けるごとにＣＰＵ１０２の選択先を更新し、各ＣＰＵ１０２を順次指定するように更新される。
【００９９】
処理制御部２０３は、プログラム実行用要求を受けると、定常的に実行しているプログラムのスケジューリングに割込んで、非定常的に実行されるプログラムＩを次に実行するプログラムとして、既存の定常的に実行されるプログラムのコンテキストデータをローカルコンテキストメモリ１０４に退避し、共有コンテキストメモリ１１０からコンテキストデータを復帰する。
【０１００】
コンテキスト切替制御部１２０は、共有コンテキストメモリ１１０からのコンテキストデータ復帰後、コンテキストデータセレクタ１０７およびコンテキストデータセレクタ１０８の選択先を切り替え、これにより、ＣＰＵ１０２は、プログラムＩの実行を開始する。
【０１０１】
なお、非定常的に実行されるプログラムの実行中、サイクルカウンタ１２１は停止し、次の切り替えタイミングはプログラムＩの実行終了によって決定する。すなわち、本実施の形態の例では、割り込まれたプログラムＣは、プログラムＩが終了後、次のＣＰＵ１０２実行対象として割り当てられることとしている。
【０１０２】
処理制御部１０３は、プログラムＩの実行が終了した後、プログラム実行対象外となったレジスタ群に格納されているプログラムＩのコンテキストデータを復帰する場合は、共有コンテキストメモリ１１０へ復帰する。
【０１０３】
一方、時刻ｔ２は、一方のＣＰＵ１０２がスリープ状態となっている間において、共有の割込み要求が発生した時刻である。
【０１０４】
ｔ２の時刻に共通割込み要求においては、その時点で一方のＣＰＵ１０２がスリープ状態となっており、ローカルイベント検出部２２２（図８）からスリープ状態を含むイベント検出信号（図８参照）を通知される実行要求先選択部２２４（図９参照）は、ＣＰＵ選択ステート１２３の状態より優先して、イベント検出に基づき、スリープ状態のＣＰＵ１０２で非定常的に実行されるプログラムの実行をするよう、スリープ状態である当該ＣＰＵ１０２に対応する処理制御部２０３に、プログラム実行要求を渡す。なお、ＣＰＵ選択ステート２２３は、実行要求先選択部２２４がイベント検出信号を受けて、イベント検出信号により特定されるＣＰＵ１０２に実行要求が渡された場合は、更新されない。
【０１０５】
以上、本実施の形態におけるマルチプロセッサシステム２００によれば、定常的に実行されるプログラムは各プロセッサ個別にスケジューリングして実行されるため、プロセッサごとに独立したスケジューリングが可能となる上、プロセッサ間での定常的に実行されるプログラムの移動がないため、共有バス１５０を介したキャッシュの一貫性保持のためのキャッシュスヌープ動作などによるオーバヘッドもなく、効率的なプログラム実行が可能となる。さらに、イベント処理等の非定常的に実行されるプログラムの実行については、複数のＣＰＵにその処理負荷を分散平均化させることができ、特定のプロセッサにイベント処理をさせる場合に比べ、プロセッサの必要最大処理性能を低減することが可能となる。
【０１０６】
しかも、複数のＣＰＵのいずれかに空き状態があるような場合、当該ＣＰＵでイベント処理を実行させることにより、さらに効率的なプログラム実行が可能となる。
【０１０７】
こうして、選択要求部（選択先切替部２０９）は、複数のプロセッサの動作状態を検出し、検出された動作状態に対して予め定められた対応関係を有するプロセッサを選択するマルチプロセッサシステム２００が構成される。
【０１０８】
ここで、複数のプロセッサは、それぞれ、定常的に実行されるプログラムの、当該プロセッサによる実行を中断する事由が発生したこと、および、当該事由が解消したことを各々検出して、前記発生が検出された場合には当該実行を停止させ、前記解消が検出された場合には、停止された当該実行を再開させる停止再開制御部（処理制御部２０３）を備え、前記選択要求部は、前記停止再開制御部から前記停止および再開の情報を取得し、取得された情報により、当該停止再開制御部を備えるプロセッサが前記実行を停止させた後であり、かつ、当該実行を再開させる前であることが示される場合に、当該プロセッサを選択するマルチプロセッサシステムが構成される。
【０１０９】
（実施の形態３）
以下、本発明に係る実施の形態３について、図面を参照しながら説明する。
【０１１０】
図１１は、本発明に係る実施の形態３におけるマルチプロセッサシステム３００の構成を示すブロック図である。なお、本発明に係る実施の形態１または本発明に係る実施の形態２と同一の構成については、同一の番号を付与して説明を省略する。
【０１１１】
マルチプロセッサシステム３００は、図１１に示されるように、２個のプロセッサエレメント２０１と、選択先切替部３０９と、共有コンテキストメモリ１１０と、コンテキストデータセレクタ１１１と、共有バス１５０と、メインメモリ１５１とを備える。
【０１１２】
図１２は、本発明に係る実施の形態３における選択先切替部３０９の構成を示すブロック図である。
【０１１３】
選択先切替部３０９は、図１２に示されるように、実行要求先選択部３２４と、２個のイベントカウンタ３２５と、タイマ３２６とを備える。
【０１１４】
イベントカウンタ３２５は、それぞれ、各処理制御部２０３がそれぞれ備える各ローカルイベント検出部（図８のローカルイベント検出部２２２を参照）のうちで、当該イベントカウンタ３２５に接続されるローカルイベント検出部からのイベント検出信号をカウントアップし、また、タイマ３２６からのオーバーフロー通知もしくは共通割込み要求によりカウント値をリセットする。
【０１１５】
図１３は、非定常的に実行されるプログラムの実行要求が発生した場合のＣＰＵ１０２の動作を説明するタイミングチャートである。
【０１１６】
図１３では、一方のＣＰＵ１０２（例えば、図１１における左側のプロセッサエレメント２０１）では定常的に実行されるプログラムＡ、Ｂ、Ｃ、Ｇを順次切り替えながら擬似並列的に実行する。そして、図１３では、他方のＣＰＵ１０２（例えば、図１１における右側のプロセッサエレメント２０１）では、定常的に実行されるプログラムＤ、Ｅ、Ｆ、Ｈを順次切り替えながら擬似並列的に実行している。そして、図１３では、非定常的に実行されるプログラムの実行要求の要因として、各プログラムに依存しない共通の割込み要求が発生した場合の例を示す。
【０１１７】
ここで、プログラムがスリープ状態となると、当該プログラムを実行していたＣＰＵ１０２は、実行していた当該プログラム以外の他のプログラムのスケジューリングを開始し、次のプログラム実行へ遷移することとする。例えば、図１３では、一方のＣＰＵ１０２が、プログラムＡがスリープ状態となった場合に、他のプログラムであるプログラムＢ、Ｃ、Ｇのスケジューリングを開始し、プログラムＢの実行へと遷移する等の動作が生じることを示している。
【０１１８】
時刻ｔ１は、共有の割込み要求が発生した時刻である。
【０１１９】
イベントカウンタ３２５は、各ＣＰＵ１０２のイベント検出の履歴をカウントアップし、時刻ｔ１までのイベント検出信号により通知されたスリープ状態への遷移をカウントしている。
【０１２０】
そして、実行要求先選択部３２４は、時刻ｔ１で共有の割込み要求が発生すると、その、イベントカウンタ３２５でのカウントされた値の大小に従って、複数のＣＰＵ１０２のうちのひとつに対し非定常的に実行されるプログラムの実行をするよう、対応する処理制御部２０３にプログラム実行要求を渡す。ここでの例では、実行要求先選択部３２４は、カウント値の大きいイベントカウンタ３２５に対応する処理制御部２０３に対し、プログラム実行要求を渡すこととしている。
【０１２１】
以上、本実施の形態におけるマルチプロセッサシステム３００によれば、定常的に実行されるプログラムは各プロセッサ個別にスケジューリングして実行される。このため、プロセッサごとに独立したスケジューリングが可能となる上、プロセッサ間での定常的に実行されるプログラムの移動がないため、共有バス１５０を介したキャッシュの一貫性保持のためのキャッシュスヌープ動作などによるオーバヘッドもなく、効率的なプログラム実行が可能となる。さらに、イベント処理等の非定常的に実行されるプログラムの実行については、複数のＣＰＵの状況に応じてさらに柔軟にその処理負荷を配分することが可能となる。
【０１２２】
しかも、非定常的に実行されるプログラムのプロセッサの割当てを、各プロセッサの過去のイベント情報も含め柔軟にプロセッサに配分することが可能となる。
【０１２３】
なお、本実施の形態では、プロセッサのローカルイベントのカウント値の大きいプロセッサを選択する例を示したが、ローカルイベントの種類によってはカウント値の小さいほうや、場合による組み合わせによってイベント処理を配分するプロセッサを決定するとしてもよい。
【０１２４】
（他の態様）
以下で説明する他の態様のマルチプロセッサシステムを構成してもよい。上記の各実施の形態のうちの何れかの実施の形態のマルチプロセッサシステムに対して、他の態様のマルチプロセッサシステムの一部が付加されてもよいし、他の態様のマルチプロセッサシステムに対して、上記の実施の形態のうちの何れかのマルチプロセッサシステムの一部が付加されてもよい。
【０１２５】
（１）他の態様のマルチプロセッサシステムは、第１のプロセッサおよび第２のプロセッサ（左側のプロセッサエレメント１０１、右側のプロセッサエレメント１０１：図１）と、例えばユーザ入力による割込みなどの非定常的な割込みにより、前記第１のプロセッサおよび第２のプロセッサのうちの何れかにより実行されるプログラムなどの、非定常的に実行されるプログラムのコンテキストデータを格納し、前記第１のプロセッサおよび第２のプロセッサが共有する共有のコンテキストデータ格納部（共有コンテキストメモリ１１０）とを備え、前記第１のプロセッサおよび第２のプロセッサにそれぞれ対応し、対応する前記プロセッサが定常的に実行するプログラムのコンテキストデータを格納する、対応する当該プロセッサにより専有される、２つのコンテキストデータ格納部（左側のプロセッサエレメント１０１が有するローカルコンテキストメモリ１０４、及び、右側のプロセッサエレメント１０１が有するローカルコンテキストメモリ１０４）と、前記第１のプロセッサおよび第２のプロセッサにそれぞれ対応し、対応する前記プロセッサと、前記共有のコンテキストデータ格納部との間で、前記非定常的に実行されるプログラムのコンテキストデータを退避及び復帰させると共に、対応する当該プロセッサの前記定常的に実行されるプログラムのコンテキストデータを、当該プロセッサと当該プロセッサに対応する前記専有のコンテキストデータ格納部との間で退避及び復帰させる退避復帰制御部（左側のプロセッサエレメント１０１が有する処理制御部１０３、及び、右側のプロセッサエレメント１０１が有する処理制御部１０３）と、予め定められた条件が満たされれば、前記非定常的に実行されるプログラムを前記第１のプロセッサに実行させる一方で、当該条件が満たされなければ当該非定常的に実行されるプログラムを前記第２のプロセッサに実行させる非定常的実行プロセッサ選択部（選択先切替部１０９）とを備えるマルチプロセッサシステム（マルチプロセッサシステム１００）である。
【０１２６】
なお、定常的に実行されるプログラムは、いわゆるサービスプログラムであってもよいし、いわゆるデーモンプログラムであってもよいし、ＨＴＴＰ（HyperText Transfer Protocol）サーバ等のサーバ用プログラムであってもよい。
【０１２７】
他方、非定常的に実行されるプログラムは、キー入力などのユーザ入力や、通信による入力、０による除算の発生などの各種の例外の発生などの、各種のイベントを処理するイベント処理用のプログラムであってもよい。
【０１２８】
（２）そして、他の態様のマルチプロセッサシステムは、前記退避復帰制御部は、それぞれ、当該退避復帰制御部に対応するプロセッサにより実行されるプログラムが前記非定常的に実行されるプログラムであれば、当該非定常的に実行されるプログラムの実行が開始される際に、前記共有のコンテキストデータ格納部により格納される、当該非定常的に実行されるプログラムのコンテキストデータを、当該プロセッサが実行するプログラムのコンテキストデータが格納される予め定められた実行時格納部（レジスタ群１０５と、レジスタ群１０６とのうちでプログラム実行対象のレジスタ群）に復帰すると共に、当該実行が終了する際には、当該実行が終了した後における、当該非定常的に実行されるプログラムのコンテキストデータを、当該実行時格納部から、前記共有のコンテキストデータ格納部に退避し、実行されるプログラムが前記定常的に実行されるプログラムであれば、当該定常的に実行されるプログラムの実行が開始される際に、当該プロセッサの前記専有のコンテキストデータ格納部により格納される、当該定常的に実行されるプログラムのコンテキストデータを前記実行時格納部に復帰すると共に、当該実行が終了する際には、当該実行が終了した後における、当該定常的に実行されるプログラムのコンテキストデータを当該実行時格納部から前記コンテキストデータ格納部に退避するマルチプロセッサシステムである。
【産業上の利用可能性】
【０１２９】
本発明は、リアルタイム処理およびイベント処理の両方を実行する、複数のプロセッサから構成されるマルチプロセッサシステムなどとして、利用することができる。
【符号の説明】
【０１３０】
１００、２００、３００  マルチプロセッサシステム
１０１、２０１  プロセッサエレメント
１０２  ＣＰＵ
１０３、２０３  処理制御部
１０４  ローカルコンテキストメモリ
１０５、１０６  レジスタ群
１０７、１０８  コンテキストデータセレクタ
１０９、２０９  選択先切替部
１１０  共有コンテキストメモリ
１１１  コンテキストデータセレクタ
１１２  共通割込み要求信号
１１３  プログラム実行要求信号
１２０  コンテキスト切替制御部
１２１  サイクルカウンタ
１２２  ローカルイベント検出部
１２３  ＣＰＵ選択ステート
１２４  実行要求先選択部
１５０  共有バス
１５１  メインメモリ
２１３、２１４  信号
３２５  イベントカウンタ
３２６  タイマ
【図１】
2009150815.tif 000003
【図２】
2009150815.tif 000004
【図３】
2009150815.tif 000005
【図４】
2009150815.tif 000006
【図５】
2009150815.tif 000007
【図６】
2009150815.tif 000008
【図７】
2009150815.tif 000009
【図８】
2009150815.tif 000010
【図９】
2009150815.tif 000011
【図１０】
2009150815.tif 000012
【図１１】
2009150815.tif 000013
【図１２】
2009150815.tif 000014
【図１３】
2009150815.tif 000015
【手続補正書】
【提出日】平成22年10月21日(2010.10.21)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサシステムにおいて、効率的に複数のプログラムを並列的に実行する技術に関する。
【背景技術】
【０００２】
従来のマルチプロセッサシステムでは、プログラムまたはタスクの切り替えはＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）で実行し、タスクに固有の情報であり、タスクを実行するのに必要となるプログラムカウンタやスタックなどのコンテキストの切り替えはＯＳが管理する方法があった（例えば、特許文献１参照）。
【０００３】
また、プロセッサにおいて、ハードウェアによってコンテキストの切り替えを行っているものもある（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−０４３９５９号公報
【特許文献２】特開２００３−２７１３９９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、ＯＳでコンテキストの切り替えを実行する場合、コンテキストの退避および復帰によるオーバヘッドが発生し、性能劣化の原因となる。また、複数のプロセッサごとにハードウェアによるコンテキスト切り替えを実行する場合、非定常的に実行されるプログラムの実行要求による割込みを特定のプロセッサに対して行うと、当該プロセッサのみに非定常的に実行されるプログラムの割込みによるスケジューリングの阻害が発生する。このため、複数のプロセッサ間のバランスがとれず、特定のプロセッサの定常的に実行される複数のプログラムの必要性能に、単純に非定常的に実行されるプログラムの必要性能（に発生頻度を加味したもの）がプロセッサの要求性能となってしまう。
【０００６】
そこで、上記の課題を解決し、コンテキスト退避復帰によるオーバヘッドを発生することなく、かつ複数のプロセッサでの性能バランスをとることで、各プロセッサでの必要性能を最小としつつ、システム全体として高い性能を得ることを目的とする。
【課題を解決するための手段】
【０００７】
上記の課題を解決するために本発明に係るマルチプロセッサシステムは、複数のプログラムを切り替えながら実行する複数のプロセッサと、前記複数のプロセッサのいずれかで、非定常的に実行されるプログラムのコンテキストデータを格納し、前記複数のプロセッサで共有される第一のコンテキストメモリと、前記複数のプロセッサの個数と同じ個数設けられ、それぞれ、対応する前記プロセッサが定常的に実行するプログラムのコンテキストデータを格納し、当該プロセッサにより専有される第二のコンテキストメモリと、同じく前記複数のプロセッサの個数と同じ個数設けられ、それぞれ、対応する前記プロセッサに対してプログラムの実行要求があった場合に、当該プログラムが前記非定常的に実行されるプログラムであれば前記第一のコンテキストメモリを選択すると共に、前記定常的に実行するプログラムであれば前記第二のコンテキストメモリを選択して、選択したコンテキストメモリと当該プロセッサとの間で当該プログラムのコンテキストデータの退避及び復帰を行い、当該プロセッサが専有する退避復帰制御部と、前記非定常的に実行されるプログラムの実行要求が発生するごとに、前記複数のプロセッサのいずれかを選択し、選択したプロセッサに対して当該プログラムの実行要求を行う選択要求部と、を備える。なお、「複数のＡのうちのそれぞれのＡが、Ｂする（Ｂである）」ことは、「複数のＡは、それぞれ、Ｂする（Ｂである）」と呼ばれる。複数の第二のコンテキストメモリのうちのそれぞれの第二のコンテキストメモリは、その第二のコンテキストメモリに対応するプロセッサが定常的に実行するプログラムのコンテキストデータを格納する。その第二のコンテキストメモリは、そのプロセッサにより専有される。
【０００８】
この構成により、複数のプロセッサは、それぞれ、当該プロセッサが専有する第二のコンテキストメモリを用いて、他のプロセッサの動作にかかわりなく、自由に、定常的に実行するプログラムを実行できる。例えば、定常的に実行する複数のプログラムのうちで、いずれを実行するかを選ぶスケジューリングを、他のプロセッサの動作に阻害されずに自由にできたり、他のプロセッサからの当該プログラムのデータ転送などの大きなデータ転送が必要なくなったりする。一方で、例えば、ユーザ入力による割込みなどの非定常的な割込みにより複数のプロセッサの何れかにより非定常的に実行されるプログラムなどの、複数のプロセッサの何れかにより非定常的に実行されるプログラムは、当該プログラムを実行するプロセッサにより第二のコンテキストメモリが用いられることにより、何れのプロセッサでも実行できる。これにより、実行要求が発生するごとに、当該発生に際して選択されたプロセッサにより実行されて、実行されるプロセッサが例えば１つのプロセッサなどの少数のプロセッサに偏ってしまってマルチプロセッサシステムの性能が低下してしまうことを防ぐことができる。また、非定常的に実行されるプログラムを実行するプロセッサが、複数のプロセッサに十分に分散されることで、例えば、非定常的に実行されるプログラムの実行により、上記した、定常的に実行されるプログラムの実行が阻害されてしまうことを少なくしたり、逆に、定常的に実行されるプログラムの実行により、非定常的に実行されるプログラムの実行が阻害されてしまったりするのが防がれる。このため、マルチプロセッサシステムの性能が低下してしまうことを防ぎ、マルチプロセッサシステムの性能を向上できる。
【０００９】
なお、定常的に実行されるプログラムは、例えば、いわゆるサービスプログラムであってもよいし、いわゆるデーモンプログラムであってもよいし、ＨＴＴＰ（HyperText Transfer Protocol）サーバ等のサーバ用のプログラムであってもよいし、対象を常時監視する監視プログラムであってもよい。
【００１０】
他方、非定常的に実行されるプログラムは、例えば、キー入力などのユーザ入力や、通信による入力、０による除算の発生などの各種のイベントを処理するイベント処理用のプログラムであってもよい。
【００１１】
ここで、当該マルチプロセッサは、前記複数のプロセッサに共有される主記憶メモリを備え、前記複数のプロセッサは、それぞれ、当該主記憶メモリを用いて、前記非定常的に実行されるプログラム及び前記定常的に実行されるプログラムをそれぞれ実行するものとしてもよい。
【００１２】
この構成により、例えば、前記複数のプロセッサが、それぞれ、当該プロセッサが専有する専有メモリを用いてプログラムを実行する。これにより、選択されたプロセッサが、当該プロセッサ以外の他のプロセッサの当該専有メモリから、非定常的に実行されるプログラムによる処理の途中の中間データ等のデータを長い時間をかけて取得する場合などと比べて、非定常的に実行されるプログラムによる処理の途中のデータの取得の遅延をなくして、マルチプロセッサシステムがより高速に動作できる。
【００１３】
ここで、当該マルチプロセッサは、前記複数のプロセッサが、それぞれ、複数のレジスタ群と、前記複数のレジスタ群のうちで何れかのレジスタ群を、プログラムの実行に当該プロセッサが利用する実行用のレジスタ群として選択すると共に、選択したレジスタ群以外の他の何れかのレジスタ群をコンテキストデータの退避復帰用のレジスタ群として選択するレジスタ群選択部とを備え、前記複数のプロセッサは、それぞれ、当該プロセッサの当該レジスタ群選択部が前記実行用のレジスタとして選択するレジスタ群を使用してプログラムを実行し、前記退避復帰制御部は、当該プロセッサが、選択された前記実行用のレジスタ群を使用してプログラムを実行するのと同時に、選択された前記退避復帰用のレジスタ群に対し、コンテキストデータの退避及び復帰を行うものとしてもよい。
【００１４】
この構成により、例えば、実行用レジスタ群が使用されたプログラムの実行と並列にコンテキストデータの退避復帰が行われるなどして、当該実行と同時にコンテキストデータの退避復帰が行われることにより、退避及び復帰の処理や、プログラムの実行の処理にオーバヘッド（遅延時間）が生じるのを防ぎ、マルチプロセッサシステムを高速化できる。
【００１５】
ここで、当該マルチプロセッサシステムは、前記複数のプロセッサがそれぞれローカルキャッシュメモリを有する共有メモリ型マルチプロセッサシステムであるものとしてもよい。
【００１６】
この構成により、定常的に実行されるプログラムの処理が、当該プログラムを実行するプロセッサの外部で無駄な動作を生じさせることを回避したり、外部の動作により当該プログラムの処理のために当該プロセッサで無駄な動作が生じることを防いだりでき、マルチプロセッサシステムの動作を高速化できる。
【００１７】
ここで、前記選択要求部は、前記非定常的に実行されるプログラムの実行要求が発生するごとに、前記複数のプロセッサのうちで、前回の前記非定常的に実行されるプログラムの実行要求の発生に際して選択したプロセッサとは別のプロセッサを選択するものとしてもよい。
【００１８】
この構成により、何れのプロセッサも、非定常的に実行されるプログラムの処理を同じ処理の量ずつ行うようにでき、確実かつ十分に、非定常的に実行されるプログラムの処理が複数のプロセッサに分散され、十分かつ確実にマルチプロセッサシステムの性能を向上できる。
【００１９】
なお、例えば、選択要求部は、複数のプロセッサのうちの１つを特定する特定データを保持し、保持する特定データにより特定されるプロセッサを選択すると共に、当該選択のたびに、保持する特定データを、選択した前記プロセッサ以外の他のプロセッサを特定する特定データに更新するものであってもよい。
【００２０】
ここで、前記選択要求部は、前記複数のプロセッサの動作状態を検出し、検出された動作状態に対して予め定められた対応関係を有するプロセッサを選択するものとしてもよい。
【００２１】
この構成であれば、例えば、各プロセッサのうちで何れがスリープ状態（空き状態）であるかなどの動作状態、つまり、何れのプロセッサが、非定常的に実行されるプログラムを実行するための余裕がある予め定められた状態であるかなどの各プロセッサの動作状態が検出される。そして、この検出に基づいて、スリープ状態であるプロセッサが選択されるなど、動作状態に対応する適切なプロセッサが選択でき、選択時の動作状態の実情に適するプロセッサを的確に選択し、十分かつ確実にマルチプロセッサシステムの性能を向上できる。
【００２２】
また、前記課題を解決するにあたり、本発明に係る他のマルチプロセッサシステムは、次の構成を採ってもよい。すなわち、(ａ)複数のプログラムを切替えながら実行する複数のプロセッサと、前記複数のプロセッサに共有される主記憶メモリと、前記複数のプロセッサのそれぞれが専有し、定常的に実行される1つ以上のプログラムのコンテキストデータを格納するための第二のコンテキストメモリと、前記複数のプロセッサで共有され、前記複数のプロセッサのいずれかで、非定常的に実行される１つ以上のプログラムのコンテキストデータを格納するための第一のコンテキストメモリと、前記非定常的に実行される１つ以上のプログラムの実行要求が発生するごとに、前記複数のプロセッサのいずれかを選択するかを決定し、前記実行要求を選択したプロセッサに対し実行を要求する選択先切り替え手段と、前記複数のプロセッサのそれぞれが専有し、所定のプログラム切り替えタイミングまたは、前記選択先切り替え手段からの前記実行要求に応じて、前記第二のコンテキストメモリまたは前記第一のコンテキストメモリのいずれかを選択して、接続されるプロセッサに対しコンテキストデータの退避復帰を行う処理制御手段と、を有することとする。
【００２３】
これによって、非定常的に実行されるプログラムの処理を複数のプロセッサに分散させることが可能となり、かつ定常的に実行されるプログラムはプロセッサごとにローカルタスクとして独立にスケジューリングすることが可能となる。これにより、スケジューリングの容易性を維持しつつ、効率的なプログラム実行により、プロセッサシステムの性能向上に寄与する。
【００２４】
さらに、（ｂ）前記複数のプロセッサそれぞれは、複数のレジスタ群と、複数のレジスタ群のいずれかをプログラム実行対象として選択し、前記プログラム実行対象として選択されていないレジスタ群のいずれかをコンテキスト退避復帰対象として選択するレジスタ群選択手段とを備え、前記プロセッサは、前期レジスタ群選択手段が選択するレジスタ群を使用してプログラムを実行し、前記コンテキスト退避復帰対象として選択されたレジスタ群に対し、プログラムの実行と平行してコンテキストデータの退避復帰を行うこととしてもよい。
【００２５】
これによって、退避復帰による処理のオーバヘッドなく、スケジューリングの容易性を維持しつつ、効率的なプログラム実行に寄与する。
【００２６】
さらに、（ｃ）前記マルチプロセッサシステムは、複数のプロセッサのそれぞれがローカルキャッシュメモリを有する共有メモリ型マルチプロセッサシステムであるとしてもよい。
【００２７】
これによって、定常的に実行されるプログラムは、プロセッサ間を移動することがないため、ローカルキャッシュに乗せられたプログラムの命令およびデータの一貫性を保つための、スヌープ動作等によるオーバヘッドを発生させることなくプログラムの実行が可能となり、プロセッサシステムの性能向上に寄与する。
【００２８】
さらに、（ｄ）前記選択先切り替え手段は、予め定められた順序に従って、前記非定常的に実行される１つ以上のプログラムの実行要求が発生するごとに、前記複数のプロセッサの選択先を切り替えるとしてもよい。
【００２９】
これによって、非定常的に実行されるプログラムのプロセッサの割当て回数を均等化することができ、効率的なプログラム実行が可能となり、プロセッサシステムの性能向上に寄与する。
【００３０】
または、（ｅ）前期選択先切り替え手段は、前記複数のプロセッサの動作状態に基づいて選択先を決定するとしてもよい。
【００３１】
これによって、非定常的に実行されるプログラムのプロセッサの割当てを、その時点で空き状態等の余裕のあるプロセッサに配分することが可能となり、プロセッサシステムの性能向上に寄与する。
【００３２】
または、（ｆ）前記複数のプロセッサのそれぞれは、前記定常的に実行される１つ以上のプログラムの実行を中断する事由の発生および中断する事由が解消したことを検出してプログラム実行の停止・再開を制御するイベント検出手段を備え、前記選択先切り替え手段は前記イベント検出手段からのイベント情報に基づいて選択先を決定するとしてもよい。
【００３３】
これによって、非定常的に実行されるプログラムのプロセッサの割当てを、各プロセッサのイベント情報に従って柔軟にプロセッサに配分することが可能となり、プロセッサシステムの性能向上に寄与する。
【００３４】
または、（ｇ）前記複数のプロセッサのそれぞれは、前記定常的に実行される１つ以上のプログラムの実行を中断する事由の発生および中断する事由が解消したことを検出してプログラム実行の停止・再開を制御するイベント検出手段を備え、前記選択先切り替え手段は前記イベント検出手段からのイベント情報の所定の期間内での履歴に基づいて選択先を決定するとしてもよい。
【００３５】
これによって、非定常的に実行されるプログラムのプロセッサの割当てを、各プロセッサの過去のイベント情報も含め柔軟にプロセッサに配分することが可能となり、プロセッサシステムの性能向上に寄与する。
【００３６】
なお、次の構成を採ってもよい。すなわち、マルチプロセッサシステムであって、複数のプロセッサがそれぞれ専有し、定常的に実行されるプログラムのコンテキストデータを格納するローカルコンテキストメモリと、複数のプロセッサが共有し、非定常的に実行されるプログラムのコンテキストデータを格納する共有コンテキストメモリを持ち、定常実行されるプログラムはプロセッサごとのローカルスレッドとして実行し、非定常実行されるプログラムは、複数のプロセッサのいずれかに分配して実行することにより、リアルタイム性を維持しつつ、高速にイベント処理を実行可能なマルチプロセッサシステムの構成を採ってもよい。
【発明の効果】
【００３７】
本発明によれば、定常的に実行されるプログラムは特定のプロセッサで実行することで、キャッシュの一貫性保持のためのオーバヘッドを生じることなく、かつ非定常的に実行されるプログラムは複数のプロセッサに配分可能であることにより、非定常的に実行されるプログラムが要求する性能分を複数のプロセッサに分散させることが可能となり、プロセッサシステムの性能向上に寄与する。
【図面の簡単な説明】
【００３８】
【図１】図１は、実施の形態１におけるマルチプロセッサシステムの構成を示すブロック図である。
【図２】図２は、実施の形態１における処理制御部の構成を示すブロック図である。
【図３】図３は、実施の形態１における選択先切替部の構成を示すブロック図である。
【図４】図４は、実施の形態１におけるコンテキスト切り替えを説明するタイミングチャートである。
【図５】図５は、実施の形態１におけるプログラムの実行を説明するタイミングチャートである。
【図６】図６は、実施の形態１におけるプログラムの実行を説明するタイミングチャートである。
【図７】図７は、実施の形態２におけるマルチプロセッサシステムの構成を示すブロック図である。
【図８】図８は、実施の形態２における選択先切替部の構成を示すブロック図である。
【図９】図９は、実施の形態２における選択先切替部の構成を示すブロック図である。
【図１０】図１０は、実施の形態２におけるプログラムの実行を説明するタイミングチャートである。
【図１１】図１１は、実施の形態３におけるマルチプロセッサシステムの構成を示すブロック図である。
【図１２】図１２は、実施の形態３における選択先切替部の構成を示すブロック図である。
【図１３】図１３は、実施の形態３におけるプログラムの実行を説明するタイミングチャートである。
【発明を実施するための形態】
【００３９】
（実施の形態１）
以下、本発明に係る実施の形態１について、図面を参照しながら説明する。
【００４０】
図１は、本発明に係る実施の形態１におけるマルチプロセッサシステム１００の構成を示すブロック図である。
【００４１】
マルチプロセッサシステム１００は、図１に示されるように、２個のプロセッサエレメント１０１と、選択先切替部１０９と、共有コンテキストメモリ１１０と、コンテキストデータセレクタ１１１と、共有バス１５０と、メインメモリ１５１とを備える。
【００４２】
２個のプロセッサエレメント１０１は、それぞれ、ＣＰＵ１０２と、処理制御部１０３と、ローカルコンテキストメモリ１０４と、レジスタ群１０５と、レジスタ群１０６と、コンテキストデータセレクタ１０７と、コンテキストデータセレクタ１０８と、ローカルキャッシュメモリ１５２とを備える。なお、「複数のＡのうちのそれぞれのＡが、Ｂである（Ｂする）」ことは、「複数のＡは、それぞれ、Ｂである（Ｂする）」と呼ばれる。それぞれのプロセッサエレメント１０１は、そのプロセッサエレメント１０１のＣＰＵ１０２を備える（図１参照）。複数のプロセッサエレメント１０１は、複数のプロセッサエレメント１０１のなかに含まれるプロセッサエレメント１０１の個数（２個）と同じ個数（２個）だけのＣＰＵ１０２を備える。
【００４３】
以下、図１で左側のプロセッサエレメント１０１を、左側のプロセッサエレメント１０１と呼び、図１で右側のプロセッサエレメント１０１を、右側のプロセッサエレメント１０１と呼ぶ。
【００４４】
図２は、本発明に係る実施の形態１における各処理制御部１０３（図１）の内部構成を示すブロック図である。以下で説明する処理制御部１０３の内部構成は、例えば、左側のプロセッサエレメント１０１の内部構成であり、他方の右側のプロセッサエレメント１０１は、以下で説明する左側のプロセッサエレメント１０１の内部構成と同じ内部構成を有する。
【００４５】
処理制御部１０３は、図２に示されるように、コンテキスト切替制御部１２０と、サイクルカウンタ１２１と、ローカルイベント検出部１２２とを備える。
【００４６】
図３は、本発明に係る実施の形態１における選択先切替部１０９（図１）の内部構成を示すブロック図である。
【００４７】
選択先切替部１０９は、図３に示されるように、ＣＰＵ選択ステート１２３と、実行要求先選択部１２４とを備える。
【００４８】
図４は、プロセッサエレメント１０１における、レジスタ群１０５およびレジスタ群１０６のいずれかのデータを選択するコンテキストデータセレクタ１０７およびコンテキストデータセレクタ１０８から構成されるセレクタの動作と、当該セレクタにより選択されたデータが用いられた、ＣＰＵ１０２でのプログラムＡ〜Ｃの実行の処理について説明するタイミングチャートである。
【００４９】
なお、図４の説明においては、プログラムＡ〜Ｃは、例えば、左側のプロセッサエレメント１０１のＣＰＵ１０２により実行される複数のプログラムであり、他方の、右側のプロセッサエレメント１０１のＣＰＵ１０２は、図４の説明と同様における複数のプログラムの実行の処理と同様の処理により、複数のプログラムを実行する。
【００５０】
時刻ｔ３までの期間の間、ＣＰＵ１０２は、プログラムＡを実行する。
【００５１】
図４において、時刻ｔ３までの期間、コンテキストデータセレクタ１０７およびコンテキストデータセレクタ１０８から構成されるセレクタは、ＣＰＵ１０２でのプログラム実行による読出しおよび書込みアクセスについては、図１において上側に示されるレジスタ群１０５を、プログラム実行対象のレジスタ群として選択し、処理制御部１０３によるコンテキストデータの読出し（退避）および書込み（復帰）アクセスについては、他方の下側のレジスタ群１０６を、コンテキスト退避復帰対象レジスタ群として選択する。なお、当該レジスタは、図１に示されるようにマルチプロセッサシステム１００が、レジスタ群１０５とレジスタ群１０６との２つだけのレジスタ群を有するのでなく、３つ以上のレジスタ群を有する場合には、各レジスタ群のうちから、プログラム実行対象となっているレジスタ群以外の他のレジスタ群を、コンテキスト退避復帰対象レジスタ群として選択する。
【００５２】
時刻ｔ３までの期間の間、ＣＰＵ１０２は、コンテキストデータセレクタ１０７およびコンテキストデータセレクタ１０８が実行対象のレジスタ群として選択しているレジスタ群１０５に保持された、プログラムＡのコンテキストを使用して、プログラムＡを実行する。
【００５３】
そして、時刻ｔ１から時刻ｔ２までの期間の間、処理制御部１０３は、スケジューリングによってＣＰＵ１０２が次に実行予定となったプログラムＢのコンテキストデータを復帰するため、時刻ｔ１から時刻ｔ２までの期間において、セレクタによってコンテキスト退避復帰対象レジスタ群として選択されている、プログラム実行対象となっていない、下側のレジスタ群１０６に対し、ＣＰＵ１０２でのプログラム実行と並行して、当該退避復帰対象レジスタ群に格納された、既存のプログラムＮのコンテキストデータの退避および、当該退避復帰対象レジスタ群への、プログラムＢのコンテキストデータの復帰を行う。
【００５４】
時刻ｔ３において、コンテキストデータセレクタ１０７およびコンテキストデータセレクタ１０８は、ＣＰＵ１０２からのアクセスについては下側のレジスタ群１０６を選択し、処理制御部からのアクセスについては上側のレジスタ群１０５を選択するように選択先を切り替える。
【００５５】
これにより、ＣＰＵ１０２は、コンテキストの退避および復帰の処理によるオーバヘッドを発生させることなく、迅速に、時刻ｔ３からプログラムＢの実行を開始する。
【００５６】
図５は、定常的に実行される複数のプログラムをＣＰＵ１０２が実行する場合のマルチプロセッサシステム１００の動作を説明するタイミングチャートである。
【００５７】
図５に示されるように、各ＣＰＵ１０２は、それぞれ、非定常的に実行されるプログラムの実行要求がマルチプロセッサシステム１００にない場合は、２つあるローカルコンテキストメモリ１０４のうちで、当該ＣＰＵ１０２に対応するローカルコンテキストメモリ１０４に格納されている、定常的に実行される複数のプログラムを実行し、独立したスケジュール周期で、実行するプログラムを、それら定常的に実行される複数のプログラムのうちで切り替える。
【００５８】
ここでの例としては、一方のＣＰＵ１０２（例えば、左側のプロセッサエレメント１０１のＣＰＵ１０２）では定常的に実行されるプログラムＡ、Ｂ、Ｃを順次切り替えながら擬似並列的に実行し、他方のＣＰＵ１０２（例えば、右側のプロセッサエレメント１０１のＣＰＵ１０２）では定常的に実行されるプログラムＤ、Ｅ、Ｆを順次切り替えながら擬似並列的に実行する場合を示している。
【００５９】
コンテキスト切替制御部１２０は、実行されるプログラムが、実行中のプログラムから別のプログラムに切り替えられるタイミングとなると、ローカルコンテキストメモリ１０４に格納されている各プログラムのコンテキストデータに含まれるスケジューリング順序に基づき、次の実行対象プログラム（例えばプログラムＢ）を決定し、コンテキストデータの退避復帰を開始する。
【００６０】
そして、処理制御部１０３は、この退避復帰の完了後、コンテキストデータセレクタ１０７およびコンテキストデータセレクタ１０８から構成されるセレクタの選択先を切り替える。処理制御部１０３は、具体的には、上述した、プログラム実行対象のレジスタ群として、その切り替えの直前にコンテキストデータの退避復帰がされたレジスタ群、つまり直前にコンテキスト退避復帰対象レジスタ群として選択されていたレジスタ群を選択させ、これにより、直前に退避復帰がされたコンテキストデータのプログラム（プログラムＢ）の実行をＣＰＵ１０２に開始させる。
【００６１】
そして、コンテキスト切替制御部１２０（図２）は、このような、実行されるプログラムの切り替えが発生した時に、切り替えにより新たに実行が開始されるプログラム（例えばプログラムＢ）のコンテキストデータに含まれるカウンタ初期値を、サイクルカウンタ１２１（図２）へ通知する。
【００６２】
サイクルカウンタ１２１は、この通知がされると、通知されたカウンタ初期値を自己に設定すると共に、設定の後、クロックサイクルごとにダウンカウントし、カウンタ値が０となれば、０となったことをコンテキスト切替制御部１２０に通知することで、次のプログラム（例えばプログラムＣ）への切り替えをコンテキスト切替制御部１２０（処理制御部１０３）に開始させる。上述した、例えば、プログラムＡからプログラムＢへの切り替えや、プログラムＢからプログラムＣへの切り替えなどの、実行されるプログラムの切り替えのタイミングは、この通知があったタイミングである。処理制御部１０３は、この通知があると、実行されるプログラムを切り替える。
【００６３】
なお、上記に説明した、コンテキストデータの退避復帰をプログラム実行と並列的に実行することで、退避復帰のオーバヘッドなくプログラム実行を可能とすることや、さまざまなスケジューリング方法の技術についての様々な公知の技術をマルチプロセッサシステム１００に適用するものとしてもよい。公知の技術に関係する点に関しては、説明の便宜上、詳しい説明を省略する。
【００６４】
図６は、非定常的に実行されるプログラムの実行要求が発生した場合のＣＰＵ１０２の動作を説明するタイミングチャートである。
【００６５】
図６では、一方のＣＰＵ１０２（例えば左側のプロセッサエレメント１０１のＣＰＵ１０２）では定常的に実行されるプログラムＡ、Ｂ、Ｃを順次切り替えながら擬似並列的に実行し、他方のＣＰＵ１０２（例えば右側のプロセッサエレメント１０１のＣＰＵ１０２）では定常的に実行されるプログラムＤ、Ｅ、Ｆを順次切り替えながら擬似並列的に実行しているものとし、非定常的に実行されるプログラムの実行要求の要因として、各プログラムに依存しない共通の割込み要求が発生した場合の例を示す。例えば、この、共有の割り込み要求は、ユーザ入力によって発生する割込み要求や、通信の着信により発生する割込み要求が含まれる。
【００６６】
時刻ｔ１において、共有の割込み要求（図１の共通割込み要求信号１１２）が発生する時刻が示される。
【００６７】
実行要求先選択部１２４は、時刻ｔ１で共有の割込み要求が発生すると、ＣＰＵ選択ステート１２３（図３）の選択情報に基づいて、複数のＣＰＵ１０２のうちのひとつに対して、非定常的に実行されるプログラムの実行をするよう、対応する処理制御部１０３にプログラム実行要求を渡す。
【００６８】
ここで、ＣＰＵ選択ステート１２３は、レジスタ群１０５、レジスタ群１０６の何れか一方を、選択先切替部１０９による選択の選択先として特定するデータを保持するレジスタにより構成され、共通割込み要求を受けるごとに、保持するデータが特定する、ＣＰＵ１０２の選択先を更新し、各ＣＰＵ１０２を順次指定するように更新される。なお、例えば、ＣＰＵ選択ステート１２３は、共通割込み要求を受けると、更新を行う更新用の回路を有し、この更新用の回路を用いるなどして、共通割込み要求を受けた場合に、更新を行う。
【００６９】
処理制御部１０３は、プログラム実行用要求を受けると、つまり、上述した共有割り込みが発生して、選択先切替部１０９が当該処理制御部１０３に実行要求を行うと、定常的に実行しているプログラムのスケジューリングに割込んで、非定常的に実行されるプログラムＩを、次に実行するプログラムとして、既存の、定常的に実行されるプログラムのコンテキストデータをプログラム実行対象のレジスタ群からローカルコンテキストメモリ１０４に退避し、共有コンテキストメモリ１１０から、その、次に実行するプログラムの、非定常的に実行されるプログラムのコンテキストデータをコンテキスト退避復帰対象レジスタ群に復帰する。
【００７０】
コンテキスト切替制御部１２０（図２）は、上記のようにして処理制御部１０３によりコンテキストデータが、共有コンテキストメモリ１１０から復帰された後、コンテキストデータセレクタ１０７およびコンテキストデータセレクタ１０８の選択先を切り替え、この切り替えがされることにより、復帰されたコンテキストデータが書き込まれたレジスタ群がプログラム実行対象のレジスタ群として選択されて、ＣＰＵ１０２は、当該コンテキストデータを用いて、プログラムＩの実行を開始する。こうして、ＣＰＵ１０２は、図６の「Ｉ実行」の記号により示される期間の間、プログラムＩを実行する。
【００７１】
なお、サイクルカウンタ１２１は、こうして非定常的に実行されるプログラムが実行される途中は停止し、つまり、ダウンカウントを行わずに同じカウンタ値を維持し、次の切り替えタイミングは、プログラムＩの実行終了によって決定される。すなわち、本実施の形態の例では、割り込まれたプログラムＣは、プログラムＩが終了後、次のＣＰＵ１０２の実行対象として割り当てられることとしている（図６における「Ｉ実行」の後の「Ｃ実行」を参照）。
【００７２】
処理制御部１０３は、プログラムＩの実行が終了した後、プログラム実行対象外となったレジスタ群、つまりコンテキスト退避復帰対象レジスタ群に格納されているプログラムＩのコンテキストデータを復帰する場合は、共有コンテキストメモリ１１０へ復帰する。
【００７３】
２個のプロセッサエレメント１０１は、それぞれ、何れも、以上に説明したような処理を行う。これにより、ｔ２の時刻で共通割込み要求が発生した場合は、ＣＰＵ選択ステート１２３が、ｔ１の時刻に発生した共通割込み要求に基づくプログラム実行に際して、予め、当該プログラム実行を行ったＣＰＵ１０２（例えば、図１における左側のＣＰＵ１０２）とは異なる他方のＣＰＵ１０２（例えば、図１における右側のＣＰＵ１０２）に更新されていることから、当該他方のＣＰＵ１０２、つまり時刻ｔ１での実行に係るＣＰＵ１０２とは別のＣＰＵ１０２により、非定常的に実行されるプログラムの実行が行われる。
【００７４】
以上、本実施の形態におけるマルチプロセッサシステム１００によれば、定常的に実行されるプログラムは各プロセッサ（図１における左側のプロセッサエレメント１０１および右側のプロセッサエレメント１０１）で、それぞれ、個別にスケジューリングして実行される。このため、プロセッサごとに独立したスケジューリングが可能となる上、プロセッサ間での定常的に実行されるプログラムの移動（データ）がない。このため、共有バス１５０を介したキャッシュの一貫性保持のためのキャッシュスヌープ動作などによるオーバヘッドもなく、効率的なプログラム実行が可能となる。さらに、イベント処理等の非定常的に実行されるプログラムの実行については、複数のＣＰＵにその処理負荷を分散平均化させることができ、特定のプロセッサにイベント処理をさせる場合に比べ、プロセッサの必要最大処理性能を低減することが可能となる。
【００７５】
なお、本実施の形態では、２個のプロセッサの構成を示したが、本発明は２個のプロセッサを有するマルチプロセッサシステムに限定されるものではなく、３個以上のプロセッサを有するマルチプロセッサシステムにも適用可能である。
【００７６】
また、本実施の形態では、２つのレジスタ群（レジスタ群１０５、レジスタ群１０６：図１参照）の構成を示したが、複数のプログラムを切り替えて実行するスケジューリング方法などによっては、３個以上のレジスタ群で構成するほうが退避復帰の回数を減らすことができるような場合についても、本発明の適用は可能である。
【００７７】
こうして、複数のプログラムを切り替えながら実行する複数のプロセッサ（左側のプロセッサエレメント１０１、右側のプロセッサエレメント１０１：図１）と、前記複数のプロセッサのいずれかで、非定常的に実行されるプログラムのコンテキストデータを格納し、前記複数のプロセッサで共有される第一のコンテキストメモリ（共有コンテキストメモリ１１０）と、前記複数のプロセッサの個数と同じ個数設けられ、それぞれ、対応する前記プロセッサが定常的に実行するプログラムのコンテキストデータを格納し、当該プロセッサにより専有される第二のコンテキストメモリ（左側のプロセッサエレメント１０１が有するローカルコンテキストメモリ１０４、及び、右側のプロセッサエレメント１０１が有するローカルコンテキストメモリ１０４）と、同じく前記複数のプロセッサの個数と同じ個数設けられ、それぞれ、対応する前記プロセッサに対してプログラムの実行要求があった場合に、当該プログラムが前記非定常的に実行されるプログラムであれば前記第一のコンテキストメモリを選択すると共に、前記定常的に実行するプログラムであれば前記第二のコンテキストメモリを選択して、選択したコンテキストメモリと当該プロセッサとの間で当該プログラムのコンテキストデータの退避及び復帰を行い、当該プロセッサが専有する退避復帰制御部（左側のプロセッサエレメント１０１が有する処理制御部１０３、及び、右側のプロセッサエレメント１０１が有する処理制御部１０３）と、前記非定常的に実行されるプログラムの実行要求が発生するごとに、前記複数のプロセッサのいずれかを選択し、選択したプロセッサに対して当該プログラムの実行要求を行う選択要求部（選択先切替部１０９）と、を備えるマルチプロセッサシステム（マルチプロセッサシステム１００）が構成される。
【００７８】
これにより、複数のプロセッサは、それぞれ、自由に、定常的に実行するプログラムを実行でき、複数のプロセッサの何れかにより非定常的に実行されるプログラムは、何れのプロセッサでも実行できて、非定常的に実行されるプログラムを実行するプロセッサが、複数のプロセッサに十分に分散され、例えば、非定常的に実行されるプログラムの実行により、定常的に実行されるプログラムの実行が阻害されてしまうことを少なくしたり、逆に、定常的に実行されるプログラムの実行により、非定常的に実行されるプログラムの実行が阻害されてしまったりすることを防ぎ、性能を向上できる。
【００７９】
ここで、当該マルチプロセッサは、前記複数のプロセッサに共有される主記憶メモリ（メインメモリ１５１）を備え、前記複数のプロセッサは、それぞれ、当該主記憶メモリを用いて、前記非定常的に実行されるプログラム及び前記定常的に実行されるプログラムをそれぞれ実行する。
【００８０】
ここで、当該マルチプロセッサは、前記複数のプロセッサは、それぞれ、複数のレジスタ群（レジスタ群１０５と、レジスタ群１０６）と、前記複数のレジスタ群のうちで何れかのレジスタ群を、プログラムの実行に当該プロセッサが利用する実行用のレジスタ群として選択すると共に、選択したレジスタ群以外の他の何れかのレジスタ群をコンテキストデータの退避復帰用のレジスタ群として選択するレジスタ群選択部（コンテキストデータセレクタ１０７およびコンテキストデータセレクタ１０８から構成されるセレクタ）とを備え、前記複数のプロセッサは、それぞれ、当該プロセッサの当該レジスタ群選択部が前記実行用のレジスタとして選択するレジスタ群を使用してプログラムを実行し、前記退避復帰制御部は、当該プロセッサが、選択された前記実行用のレジスタ群を使用してプログラムを実行するのと同時に、選択された前記退避復帰用のレジスタ群に対し、コンテキストデータの退避及び復帰を行うものである。
【００８１】
ここで、当該マルチプロセッサシステムは、前記複数のプロセッサがそれぞれローカルキャッシュメモリ（左側のプロセッサエレメント１０１が有するローカルキャッシュメモリ１５２、及び、右側のプロセッサエレメント１０１が有するローカルキャッシュメモリ１５２）を有する共有メモリ型マルチプロセッサシステムである。
【００８２】
ここで、前記選択要求部は、前記非定常的に実行されるプログラムの実行要求が発生するごとに、前記複数のプロセッサのうちで、前回の前記非定常的に実行されるプログラムの実行要求の発生に際して選択したプロセッサとは別のプロセッサを選択する。
【００８３】
なお、選択要求部は、複数のプロセッサのうちの１つを特定する特定データ（ＣＰＵ選択ステート１２３（図３）の選択情報）を保持し、保持する特定データにより特定されるプロセッサ（例えば、図６の時刻ｔ１で選択される図６上段の方のプロセッサエレメント１０１）を選択すると共に、当該選択のたびに、保持する特定データを、選択した前記プロセッサ以外の他のプロセッサ（例えば、図６の時刻ｔ２で選択される図６下段の方のプロセッサエレメント１０１）を特定する特定データに更新するものである。
【００８４】
（実施の形態２）
以下、本発明に係る実施の形態２について、図面を参照しながら説明する。
【００８５】
図７は、本発明に係る実施の形態２におけるマルチプロセッサシステム２００の構成を示すブロック図である。なお、本発明に係る実施の形態１と同一の構成については、同一の番号を付与して説明を省略する。
【００８６】
マルチプロセッサシステム２００は、図７に示されるように、２個のプロセッサエレメント２０１と、選択先切替部２０９と、共有コンテキストメモリ１１０と、コンテキストデータセレクタ１１１と、共有バス１５０と、メインメモリ１５１とを備える。
【００８７】
そして、プロセッサエレメント２０１は、ＣＰＵ１０２と、処理制御部２０３と、ローカルコンテキストメモリ１０４と、レジスタ群１０５と、レジスタ群１０６と、コンテキストデータセレクタ１０７と、コンテキストデータセレクタ１０８と、ローカルキャッシュメモリ１５２とを備える。
【００８８】
図８は、本発明に係る実施の形態２における処理制御部２０３（図７）の内部構成を示すブロック図である。
【００８９】
処理制御部２０３は、図８に示されるように、コンテキスト切替制御部１２０と、サイクルカウンタ１２１と、ローカルイベント検出部２２２とを備える。
【００９０】
図９は、本発明に係る実施の形態２における選択先切替部２０９（図７参照）の構成を示すブロック図である。
【００９１】
選択先切替部２０９は、図９に示されるように、ＣＰＵ選択ステート２２３と、実行要求先選択部２２４とを備える。
【００９２】
図１０は、非定常的に実行されるプログラムの実行要求が発生した場合のＣＰＵ１０２の動作を説明するタイミングチャートである。
【００９３】
図１０では、一方のＣＰＵ１０２（例えば、図７における左側のプロセッサエレメント２０１）では定常的に実行されるプログラムＡ、Ｂ、Ｃを順次切り替えながら擬似並列的に実行し、他方のＣＰＵ１０２（例えば、図７における右側のプロセッサエレメント２０１）では定常的に実行されるプログラムＤ、Ｅ、Ｆを順次切り替えながら擬似並列的に実行しているものとし、非定常的に実行されるプログラムの実行要求の要因として、各プログラムに依存しない共通の割込み要求が発生した場合の例を示す。
【００９４】
ここで、各ＣＰＵ１０２は、それぞれ、プログラムを実行しているときに、実行しているプログラムがスリープ状態となると、そのプログラム実行で設定されたカウンタ値の残り分空き状態とし、カウンタ値が０となるまで、スリープ状態となったプログラム以外の他のプログラムのスケジューリングをしないこととする。例えば、図１０に示されるプログラムＡの実行で設定されたカウンタ値の残り分空き状態とし、カウンタ値が０となるまで他のプログラムのスケジューリングをしない。
【００９５】
時刻ｔ１は、共有の割込み要求が発生した第１の時刻を示す。また、時刻ｔ２は、共有の割込み要求が発生した第２の時刻を示す。
【００９６】
時刻ｔ１は、２つのＣＰＵ１０２の何れもスリープ状態ではない間において、共有の割込み要求が発生した時刻である。
【００９７】
実行要求先選択部２２４は、時刻ｔ１において、共有の割込み要求が発生すると、ＣＰＵ選択ステート２２３の選択情報に基づいて、複数のＣＰＵ１０２のうちの１つに対して、非定常的に実行されるプログラムの実行をするよう、当該ＣＰＵ１０２に対応する処理制御部２０３にプログラム実行要求を渡す。
【００９８】
なお、ＣＰＵ選択ステート２２３は、共通割込み要求を受けるごとにＣＰＵ１０２の選択先を更新し、各ＣＰＵ１０２を順次指定するように更新される。
【００９９】
処理制御部２０３は、プログラム実行用要求を受けると、定常的に実行しているプログラムのスケジューリングに割込んで、非定常的に実行されるプログラムＩを次に実行するプログラムとして、既存の定常的に実行されるプログラムのコンテキストデータをローカルコンテキストメモリ１０４に退避し、共有コンテキストメモリ１１０からコンテキストデータを復帰する。
【０１００】
コンテキスト切替制御部１２０は、共有コンテキストメモリ１１０からのコンテキストデータ復帰後、コンテキストデータセレクタ１０７およびコンテキストデータセレクタ１０８の選択先を切り替え、これにより、ＣＰＵ１０２は、プログラムＩの実行を開始する。
【０１０１】
なお、非定常的に実行されるプログラムの実行中、サイクルカウンタ１２１は停止し、次の切り替えタイミングはプログラムＩの実行終了によって決定する。すなわち、本実施の形態の例では、割り込まれたプログラムＣは、プログラムＩが終了後、次のＣＰＵ１０２実行対象として割り当てられることとしている。
【０１０２】
処理制御部１０３は、プログラムＩの実行が終了した後、プログラム実行対象外となったレジスタ群に格納されているプログラムＩのコンテキストデータを復帰する場合は、共有コンテキストメモリ１１０へ復帰する。
【０１０３】
一方、時刻ｔ２は、一方のＣＰＵ１０２がスリープ状態となっている間において、共有の割込み要求が発生した時刻である。
【０１０４】
ｔ２の時刻に共通割込み要求においては、その時点で一方のＣＰＵ１０２がスリープ状態となっており、ローカルイベント検出部２２２（図８）からスリープ状態を含むイベント検出信号（図８参照）を通知される実行要求先選択部２２４（図９参照）は、ＣＰＵ選択ステート１２３の状態より優先して、イベント検出に基づき、スリープ状態のＣＰＵ１０２で非定常的に実行されるプログラムの実行をするよう、スリープ状態である当該ＣＰＵ１０２に対応する処理制御部２０３に、プログラム実行要求を渡す。なお、ＣＰＵ選択ステート２２３は、実行要求先選択部２２４がイベント検出信号を受けて、イベント検出信号により特定されるＣＰＵ１０２に実行要求が渡された場合は、更新されない。
【０１０５】
以上、本実施の形態におけるマルチプロセッサシステム２００によれば、定常的に実行されるプログラムは各プロセッサ個別にスケジューリングして実行されるため、プロセッサごとに独立したスケジューリングが可能となる上、プロセッサ間での定常的に実行されるプログラムの移動がないため、共有バス１５０を介したキャッシュの一貫性保持のためのキャッシュスヌープ動作などによるオーバヘッドもなく、効率的なプログラム実行が可能となる。さらに、イベント処理等の非定常的に実行されるプログラムの実行については、複数のＣＰＵにその処理負荷を分散平均化させることができ、特定のプロセッサにイベント処理をさせる場合に比べ、プロセッサの必要最大処理性能を低減することが可能となる。
【０１０６】
しかも、複数のＣＰＵのいずれかに空き状態があるような場合、当該ＣＰＵでイベント処理を実行させることにより、さらに効率的なプログラム実行が可能となる。
【０１０７】
こうして、選択要求部（選択先切替部２０９）は、複数のプロセッサの動作状態を検出し、検出された動作状態に対して予め定められた対応関係を有するプロセッサを選択するマルチプロセッサシステム２００が構成される。
【０１０８】
ここで、複数のプロセッサは、それぞれ、定常的に実行されるプログラムの、当該プロセッサによる実行を中断する事由が発生したこと、および、当該事由が解消したことを各々検出して、前記発生が検出された場合には当該実行を停止させ、前記解消が検出された場合には、停止された当該実行を再開させる停止再開制御部（処理制御部２０３）を備え、前記選択要求部は、前記停止再開制御部から前記停止および再開の情報を取得し、取得された情報により、当該停止再開制御部を備えるプロセッサが前記実行を停止させた後であり、かつ、当該実行を再開させる前であることが示される場合に、当該プロセッサを選択するマルチプロセッサシステムが構成される。
【０１０９】
（実施の形態３）
以下、本発明に係る実施の形態３について、図面を参照しながら説明する。
【０１１０】
図１１は、本発明に係る実施の形態３におけるマルチプロセッサシステム３００の構成を示すブロック図である。なお、本発明に係る実施の形態１または本発明に係る実施の形態２と同一の構成については、同一の番号を付与して説明を省略する。
【０１１１】
マルチプロセッサシステム３００は、図１１に示されるように、２個のプロセッサエレメント２０１と、選択先切替部３０９と、共有コンテキストメモリ１１０と、コンテキストデータセレクタ１１１と、共有バス１５０と、メインメモリ１５１とを備える。
【０１１２】
図１２は、本発明に係る実施の形態３における選択先切替部３０９の構成を示すブロック図である。
【０１１３】
選択先切替部３０９は、図１２に示されるように、実行要求先選択部３２４と、２個のイベントカウンタ３２５と、タイマ３２６とを備える。
【０１１４】
イベントカウンタ３２５は、それぞれ、各処理制御部２０３がそれぞれ備える各ローカルイベント検出部（図８のローカルイベント検出部２２２を参照）のうちで、当該イベントカウンタ３２５に接続されるローカルイベント検出部からのイベント検出信号をカウントアップし、また、タイマ３２６からのオーバーフロー通知もしくは共通割込み要求によりカウント値をリセットする。
【０１１５】
図１３は、非定常的に実行されるプログラムの実行要求が発生した場合のＣＰＵ１０２の動作を説明するタイミングチャートである。
【０１１６】
図１３では、一方のＣＰＵ１０２（例えば、図１１における左側のプロセッサエレメント２０１）では定常的に実行されるプログラムＡ、Ｂ、Ｃ、Ｇを順次切り替えながら擬似並列的に実行する。そして、図１３では、他方のＣＰＵ１０２（例えば、図１１における右側のプロセッサエレメント２０１）では、定常的に実行されるプログラムＤ、Ｅ、Ｆ、Ｈを順次切り替えながら擬似並列的に実行している。そして、図１３では、非定常的に実行されるプログラムの実行要求の要因として、各プログラムに依存しない共通の割込み要求が発生した場合の例を示す。
【０１１７】
ここで、プログラムがスリープ状態となると、当該プログラムを実行していたＣＰＵ１０２は、実行していた当該プログラム以外の他のプログラムのスケジューリングを開始し、次のプログラム実行へ遷移することとする。例えば、図１３では、一方のＣＰＵ１０２が、プログラムＡがスリープ状態となった場合に、他のプログラムであるプログラムＢ、Ｃ、Ｇのスケジューリングを開始し、プログラムＢの実行へと遷移する等の動作が生じることを示している。
【０１１８】
時刻ｔ１は、共有の割込み要求が発生した時刻である。
【０１１９】
イベントカウンタ３２５は、各ＣＰＵ１０２のイベント検出の履歴をカウントアップし、時刻ｔ１までのイベント検出信号により通知されたスリープ状態への遷移をカウントしている。
【０１２０】
そして、実行要求先選択部３２４は、時刻ｔ１で共有の割込み要求が発生すると、その、イベントカウンタ３２５でのカウントされた値の大小に従って、複数のＣＰＵ１０２のうちのひとつに対し非定常的に実行されるプログラムの実行をするよう、対応する処理制御部２０３にプログラム実行要求を渡す。ここでの例では、実行要求先選択部３２４は、カウント値の大きいイベントカウンタ３２５に対応する処理制御部２０３に対し、プログラム実行要求を渡すこととしている。
【０１２１】
以上、本実施の形態におけるマルチプロセッサシステム３００によれば、定常的に実行されるプログラムは各プロセッサ個別にスケジューリングして実行される。このため、プロセッサごとに独立したスケジューリングが可能となる上、プロセッサ間での定常的に実行されるプログラムの移動がないため、共有バス１５０を介したキャッシュの一貫性保持のためのキャッシュスヌープ動作などによるオーバヘッドもなく、効率的なプログラム実行が可能となる。さらに、イベント処理等の非定常的に実行されるプログラムの実行については、複数のＣＰＵの状況に応じてさらに柔軟にその処理負荷を配分することが可能となる。
【０１２２】
しかも、非定常的に実行されるプログラムのプロセッサの割当てを、各プロセッサの過去のイベント情報も含め柔軟にプロセッサに配分することが可能となる。
【０１２３】
なお、本実施の形態では、プロセッサのローカルイベントのカウント値の大きいプロセッサを選択する例を示したが、ローカルイベントの種類によってはカウント値の小さいほうや、場合による組み合わせによってイベント処理を配分するプロセッサを決定するとしてもよい。
【０１２４】
（他の態様）
以下で説明する他の態様のマルチプロセッサシステムを構成してもよい。上記の各実施の形態のうちの何れかの実施の形態のマルチプロセッサシステムに対して、他の態様のマルチプロセッサシステムの一部が付加されてもよいし、他の態様のマルチプロセッサシステムに対して、上記の実施の形態のうちの何れかのマルチプロセッサシステムの一部が付加されてもよい。
【０１２５】
（１）他の態様のマルチプロセッサシステムは、第１のプロセッサおよび第２のプロセッサ（左側のプロセッサエレメント１０１、右側のプロセッサエレメント１０１：図１）と、例えばユーザ入力による割込みなどの非定常的な割込みにより、前記第１のプロセッサおよび第２のプロセッサのうちの何れかにより実行されるプログラムなどの、非定常的に実行されるプログラムのコンテキストデータを格納し、前記第１のプロセッサおよび第２のプロセッサが共有する共有のコンテキストデータ格納部（共有コンテキストメモリ１１０）とを備え、前記第１のプロセッサおよび第２のプロセッサにそれぞれ対応し、対応する前記プロセッサが定常的に実行するプログラムのコンテキストデータを格納する、対応する当該プロセッサにより専有される、２つのコンテキストデータ格納部（左側のプロセッサエレメント１０１が有するローカルコンテキストメモリ１０４、及び、右側のプロセッサエレメント１０１が有するローカルコンテキストメモリ１０４）と、前記第１のプロセッサおよび第２のプロセッサにそれぞれ対応し、対応する前記プロセッサと、前記共有のコンテキストデータ格納部との間で、前記非定常的に実行されるプログラムのコンテキストデータを退避及び復帰させると共に、対応する当該プロセッサの前記定常的に実行されるプログラムのコンテキストデータを、当該プロセッサと当該プロセッサに対応する前記専有のコンテキストデータ格納部との間で退避及び復帰させる退避復帰制御部（左側のプロセッサエレメント１０１が有する処理制御部１０３、及び、右側のプロセッサエレメント１０１が有する処理制御部１０３）と、予め定められた条件が満たされれば、前記非定常的に実行されるプログラムを前記第１のプロセッサに実行させる一方で、当該条件が満たされなければ当該非定常的に実行されるプログラムを前記第２のプロセッサに実行させる非定常的実行プロセッサ選択部（選択先切替部１０９）とを備えるマルチプロセッサシステム（マルチプロセッサシステム１００）である。
【０１２６】
なお、定常的に実行されるプログラムは、いわゆるサービスプログラムであってもよいし、いわゆるデーモンプログラムであってもよいし、ＨＴＴＰ（HyperText Transfer Protocol）サーバ等のサーバ用プログラムであってもよい。
【０１２７】
他方、非定常的に実行されるプログラムは、キー入力などのユーザ入力や、通信による入力、０による除算の発生などの各種の例外の発生などの、各種のイベントを処理するイベント処理用のプログラムであってもよい。
【０１２８】
（２）そして、他の態様のマルチプロセッサシステムは、前記退避復帰制御部は、それぞれ、当該退避復帰制御部に対応するプロセッサにより実行されるプログラムが前記非定常的に実行されるプログラムであれば、当該非定常的に実行されるプログラムの実行が開始される際に、前記共有のコンテキストデータ格納部により格納される、当該非定常的に実行されるプログラムのコンテキストデータを、当該プロセッサが実行するプログラムのコンテキストデータが格納される予め定められた実行時格納部（レジスタ群１０５と、レジスタ群１０６とのうちでプログラム実行対象のレジスタ群）に復帰すると共に、当該実行が終了する際には、当該実行が終了した後における、当該非定常的に実行されるプログラムのコンテキストデータを、当該実行時格納部から、前記共有のコンテキストデータ格納部に退避し、実行されるプログラムが前記定常的に実行されるプログラムであれば、当該定常的に実行されるプログラムの実行が開始される際に、当該プロセッサの前記専有のコンテキストデータ格納部により格納される、当該定常的に実行されるプログラムのコンテキストデータを前記実行時格納部に復帰すると共に、当該実行が終了する際には、当該実行が終了した後における、当該定常的に実行されるプログラムのコンテキストデータを当該実行時格納部から前記コンテキストデータ格納部に退避するマルチプロセッサシステムである。
【産業上の利用可能性】
【０１２９】
本発明は、リアルタイム処理およびイベント処理の両方を実行する、複数のプロセッサから構成されるマルチプロセッサシステムなどとして、利用することができる。
【符号の説明】
【０１３０】
１００、２００、３００  マルチプロセッサシステム
１０１、２０１  プロセッサエレメント
１０２  ＣＰＵ
１０３、２０３  処理制御部
１０４  ローカルコンテキストメモリ
１０５、１０６  レジスタ群
１０７、１０８  コンテキストデータセレクタ
１０９、２０９  選択先切替部
１１０  共有コンテキストメモリ
１１１  コンテキストデータセレクタ
１１２  共通割込み要求信号
１１３  プログラム実行要求信号
１２０  コンテキスト切替制御部
１２１  サイクルカウンタ
１２２  ローカルイベント検出部
１２３  ＣＰＵ選択ステート
１２４  実行要求先選択部
１５０  共有バス
１５１  メインメモリ
２１３、２１４  信号
３２５  イベントカウンタ
３２６  タイマ
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のプログラムを切り替えながら実行する複数のプロセッサと、
前記複数のプロセッサのいずれかにより非定常的に実行されるプログラムのコンテキストデータを格納し、前記複数のプロセッサにより共有される第一のコンテキストメモリと、
前記複数のプロセッサの個数と同じ個数設けられ、それぞれ、対応する前記プロセッサが定常的に実行するプログラムのコンテキストデータを格納し、当該プロセッサにより専有される第二のコンテキストメモリと、
同じく前記複数のプロセッサの個数と同じ個数設けられ、それぞれ、対応する前記プロセッサに対してプログラムの実行要求があった場合に、当該プログラムが前記非定常的に実行されるプログラムであれば前記第一のコンテキストメモリを選択すると共に、前記定常的に実行するプログラムであれば前記第二のコンテキストメモリを選択して、選択したコンテキストメモリと当該プロセッサとの間で当該プログラムのコンテキストデータの退避及び復帰を行い、当該プロセッサにより専有される退避復帰制御部と、
前記非定常的に実行されるプログラムの実行要求が発生するごとに、前記複数のプロセッサのいずれかを選択し、選択したプロセッサに対して当該プログラムの実行要求を行う選択要求部と、
を備えるマルチプロセッサシステム。
【請求項２】
前記複数のプロセッサに共有される主記憶メモリを備え、
前記複数のプロセッサは、それぞれ、当該主記憶メモリを用いて、前記非定常的に実行されるプログラム及び前記定常的に実行されるプログラムをそれぞれ実行する請求項１記載のマルチプロセッサシステム。
【請求項３】
前記複数のプロセッサは、それぞれ、
複数のレジスタ群と、
前記複数のレジスタ群のうちで何れかのレジスタ群を、プログラムの実行に当該プロセッサが利用する実行用のレジスタ群として選択すると共に、選択したレジスタ群以外の他の何れかのレジスタ群をコンテキストデータの退避復帰用のレジスタ群として選択するレジスタ群選択部と
を備え、
前記複数のプロセッサは、それぞれ、当該プロセッサの当該レジスタ群選択部が前記実行用のレジスタとして選択するレジスタ群を使用してプログラムを実行し、
前記退避復帰制御部は、当該プロセッサが、選択された前記実行用のレジスタ群を使用してプログラムを実行するのと同時に、選択された前記退避復帰用のレジスタ群に対し、コンテキストデータの退避及び復帰を行う請求項２に記載のマルチプロセッサシステム。
【請求項４】
当該マルチプロセッサシステムは、前記複数のプロセッサがそれぞれローカルキャッシュメモリを有する共有メモリ型マルチプロセッサシステムである請求項２に記載のマルチプロセッサシステム。
【請求項５】
前記選択要求部は、前記非定常的に実行されるプログラムの実行要求が発生するごとに、前記複数のプロセッサのうちで、前回の前記非定常的に実行されるプログラムの実行要求の発生に際して選択したプロセッサとは別のプロセッサを選択する請求項２に記載のマルチプロセッサシステム。
【請求項６】
前記選択要求部は、前記複数のプロセッサの動作状態を検出し、検出された動作状態に対して予め定められた対応関係を有するプロセッサを選択する請求項２に記載のマルチプロセッサシステム。
【請求項７】
前記複数のプロセッサは、それぞれ、
前記定常的に実行されるプログラムの、当該プロセッサによる実行を中断する事由が発生したこと、および、当該事由が解消したことを各々検出して、前記発生が検出された場合には当該実行を停止させ、前記解消が検出された場合には、停止された当該実行を再開させる停止再開制御部を備え、
前記選択要求部は、前記停止再開制御部から前記停止および再開の情報を取得し、取得された情報により、当該停止再開制御部を備えるプロセッサが前記実行を停止させた後であり、かつ、当該実行を再開させる前であることが示される場合に、当該プロセッサを選択する請求項６に記載のマルチプロセッサシステム。
【請求項８】
前記複数のプロセッサは、それぞれ、
前記定常的に実行されるプログラムの、当該プロセッサによる実行を中断する事由が発生したこと、および、当該事由が解消したことを各々検出して、前記発生が検出された場合には当該プログラムの実行を停止させ、前記解消が検出された場合には、停止された当該実行を再開させる停止再開制御部を備え、
前記選択要求部は、前記停止再開制御部から前記停止および再開の情報を取得し、取得された前記情報の履歴に基づいて、当該情報の取得された前記プロセッサを選択するか否かを決定する請求項６に記載のマルチプロセッサシステム。
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正の内容】
【図１】
2009150815.tif 000016
【図２】
2009150815.tif 000017
【図３】
2009150815.tif 000018
【図４】
2009150815.tif 000019
【図５】
2009150815.tif 000020
【図６】
2009150815.tif 000021
【図７】
2009150815.tif 000022
【図８】
2009150815.tif 000023
【図９】
2009150815.tif 000024
【図１０】
2009150815.tif 000025
【図１１】
2009150815.tif 000026
【図１２】
2009150815.tif 000027
【図１３】
2009150815.tif 000028
【国際調査報告】
2009150815.tif 000029
2009150815.tif 000030
2009150815.tif 000031
2009150815.tif 000032