(57)【要約】【課題】複数のＰＥをグループ化することで、高速かつ簡単に各ＰＥのメモリ帯域幅を設定することを可能とする。【解決手段】帯域設定部５１１は、メモリコントローラに複数のＰＥグループ毎のメモリ帯域幅を設定する。スケジューラ５１２は、処理されるべきタスクが発生した際に、当該発生されたタスクを複数のＰＥのうちの１つに割り当てる。グループ決定部５１４は、当該発生されたタスクの動作条件または動作状態に応じて、ＰＥが属すべきＰＥグループを決定する。グループ設定部５１３は、決定されたＰＥグループを示すグループ識別情報をＰＥに設定する。スケジューラ５１２は、ＰＥに設定されたグループ識別情報によって示されるＰＥグループに対して、帯域設定部５１１によってメモリコントローラに設定されたメモリ帯域幅で発生されたタスクを実行させる。【選択図】      図２
2008158687.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサ要素と、メモリと、当該複数のプロセッサ要素の各々が前記メモリにアクセス可能なメモリ帯域幅を制限するメモリコントローラとから構成されるマルチプロセッサシステムにおいて、前記複数のプロセッサ要素のうち、少なくとも１つのプロセッサ要素によって実行される帯域制御プログラムであって、
前記１つのプロセッサ要素に、
前記複数のプロセッサ要素の各々が属するプロセッサ要素グループ毎のメモリ帯域幅を、前記メモリコントローラに設定するステップと、
実行されるべきタスクが発生した際に、当該発生されたタスクを実行させるために、当該タスクを前記複数のプロセッサ要素のうちの１つに割り当てるステップと、
前記割り当てられたプロセッサ要素に前記発生されたタスクを実行させる際に、当該発生されたタスクの動作条件または動作状態に応じて、当該割り当てられたプロセッサ要素が属すべきプロセッサ要素グループを決定するステップと、
前記決定されたプロセッサ要素グループに属すべき前記割り当てられたプロセッサ要素に、前記メモリコントローラに設定された当該プロセッサ要素グループのメモリ帯域幅で前記発生されたタスクを実行させるステップと
を実行させることを特徴とする帯域制御プログラム。
【請求項２】
前記マルチプロセッサシステムは、当該マルチプロセッサシステムにおいて発生する複数のタスクの各々が実行される優先度を示す実行プライオリティ値及び当該タスクを実行するプロセッサ要素が属するプロセッサ要素グループを示す前記グループ識別情報を対応付けて予め保持するグループ・プライオリティ保持手段を有し、
前記実行されるべきタスクが発生した際に、予め定められている当該発生されたタスクが実行される優先度を示す実行プライオリティ値を当該タスクの動作条件として当該タスクに対応付けてタスク保持手段に保持するステップを前記１つのプロセッサ要素に更に実行させ、
前記決定するステップは、
前記割り当てられたプロセッサ要素が前記発生されたタスクを実行する際に、当該発生されたタスクに対応付けて前記タスク保持手段に保持されている実行プライオリティ値を取得するステップと、
取得された実行プライオリティ値に対応付けて前記グループ・プライオリティ保持手段に保持されているグループ識別情報によって示されるプロセッサ要素グループを、当該割り当てられたプロセッサ要素が属すべきプロセッサ要素グループとして決定するステップとを含む
ことを特徴とする請求項１記載の帯域制御プログラム。
【請求項３】
前記マルチプロセッサシステムは、当該マルチプロセッサシステムにおいて発生する複数のタスクの各々が実行される際の前記メモリへのアクセスの頻度を示すアクセスプライオリティ値及び当該タスクを実行するプロセッサ要素が属するプロセッサ要素グループを示す前記グループ識別情報を対応付けて予め保持するグループ・プライオリティ保持手段を有し、
前記実行されるべきタスクが発生した際に、予め定められている当該発生されたタスクが実行される際の前記メモリへのアクセスの頻度を示すアクセスプライオリティ値を当該タスクの動作状態として当該タスクに対応付けてタスク保持手段に保持するステップを前記１つのプロセッサ要素に更に実行させ、
前記決定するステップは、
前記割り当てられたプロセッサ要素が前記発生されたタスクを実行する際に、当該発生されたタスクに対応付けて前記タスク保持手段に保持されているアクセスプライオリティ値を取得するステップと、
前記取得されたアクセスプライオリティ値に対応付けて前記グループ・プライオリティ保持手段に保持されているグループ識別情報によって示されるプロセッサ要素グループを、当該割り当てられたプロセッサ要素が属すべきプロセッサ要素グループとして決定するステップとを含む
ことを特徴とする請求項１記載の帯域制御プログラム。
【請求項４】
前記実行すべきタスクが発生した際に、予め定められている当該発生されたタスクが実行される優先度を示す実行プライオリティ値及び予め定められている当該タスクが実行される際の前記メモリへのアクセスの頻度を示すアクセスプライオリティ値を、当該タスクに対応付けてタスク保持手段に保持するステップを前記１つのプロセッサ要素に更に実行させ、
前記決定するステップにおいて、前記割り当てられたプロセッサ要素が前記発生されたタスクを実行する際に、当該発生されたタスクに対応付けて前記タスク保持手段に保持されている実行プライオリティ値及びアクセスプライオリティ値に基づいて、前記割り当てられたプロセッサ要素が属すべきプロセッサ要素グループを決定する
ことを特徴とする請求項１記載の帯域制御プログラム。
【請求項５】
複数のプロセッサ要素と、
前記複数のプロセッサ要素の各々によってアクセスされるメモリと、
前記複数のプロセッサ要素の各々が前記メモリにアクセス可能なメモリ帯域幅を制限するメモリコントローラと、
前記複数のプロセッサ要素の各々が属するプロセッサ要素グループ毎のメモリ帯域幅を、前記メモリコントローラに設定する設定手段と、
実行されるべきタスクが発生した際に、当該発生されたタスクを実行させるために、当該タスクを前記複数のプロセッサ要素のうちの１つに割り当てる割当手段と、
前記割当手段によって前記発生されたタスクが割り当てられたプロセッサ要素に前記発生されたタスクを実行させる際に、当該発生されたタスクの動作条件または動作状態に応じて、当該割り当てられたプロセッサ要素が属すべきプロセッサ要素グループを決定する決定手段と、
前記決定手段によって決定されたプロセッサ要素グループに属すべき前記割り当てられたプロセッサ要素に、前記設定手段によって前記メモリコントローラに設定された当該プロセッサ要素グループのメモリ帯域幅で前記発生されたタスクを実行させる実行手段と
を具備することを特徴とするマルチプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセッサ・エレメントの各々がメモリにアクセスできるメモリ帯域幅を制御する帯域制御プログラム及びマルチプロセッサシステムに関する。
【背景技術】
【０００２】
昨今、複数のプロセッサ・エレメント（Processor Element：ＰＥ）を有し、当該複数のＰＥが例えば１つのメモリユニット（以下、単にメモリと表記）を共有して利用するコンピュータハードウェア（以下、マルチプロセッサシステムと表記）が存在する。
【０００３】
このようなマルチプロセッサシステム上では、少なくとも１つのＰＥ上でオペレーティングシステム（以下、ＯＳと表記）が動作する。
【０００４】
ＯＳには、スケジューラが含まれる。スケジューラは、当該ＯＳ自身やユーザアプリケーションによって発生する多数のタスクを各ＰＥに割り当てる処理を実行する。これにより、マルチプロセッサシステム全体が動作する。ここで、タスクは、各ＰＥに実行されるべき処理単位である。
【０００５】
通常、実行すべきタスクの数はＰＥの数よりも多いため、例えばＰＥの実行時間を分割してタスク毎に割り当てるようなスケジューリングを行う必要がある。更に、複数のタスクには、例えば比較的早く実行完了すべきもの、実行完了が遅れてもよいもの、またはそれらの中間的なもの等が存在する。複数のタスクのうち、早く実行完了すべきタスクには多くのＰＥの実行時間を、実行完了が遅れてもよいタスクには少ないＰＥの実行時間を、またはそれらの中間的なタスクには中間的なＰＥの実行時間を与えるようなスケジューリングが望ましい。
【０００６】
そこで、複数のタスクの各々には、プライオリティ値（処理優先度）が設定されている。このプライオリティ値は、例えば値が小さい程より多くのＰＥの実行時間が与えられる。例えばプライオリティ値が０または１のいずれかの場合では、プライオリティ値が１であるタスクよりプライオリティ値が０であるタスクの方が、より多くのＰＥの実行時間で実行される。以下、より多くのＰＥの実行時間が与えられるタスク（例えばプライオリティ値が０）を高いプライオリティ値のタスク、より少ないＰＥの実行時間が与えられるタスク（例えばプライオリティ値が１）を低いプライオリティ値のタスクと称する。
【０００７】
ＰＥの各々は、自身に割り当てられたタスクのうち、例えば高いプライオリティ値のタスクには多くの実行時間、低いプライオリティ値のタスクには少ない実行時間で動作する。
【０００８】
例えば予め固定された優先順位を用い、かつ当該優先順位の他には資源要求装置間の関係を関知することなく、各資源要求装置へのサービス品質を管理する技術が開示されている（例えば、特許文献１を参照）。
【特許文献１】特開２００４−５５８９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、上記したようにタスク毎のプライオリティ値に応じてＰＥの実行時間を割り当てる場合であっても、現実にはＰＥの実行時間を多くまたは少なくするだけではシステム全体の効率を向上させることができない要因が存在する。その要因の１つとして、メモリアクセス時の処理遅延がある。
【００１０】
上記したような複数のＰＥが同じメモリにアクセスするハードウェア構成では、当該ＰＥ同士のメモリアクセスが競合することによって大幅な処理遅延が発生する場合がある。例えば低いプライオリティ値のタスクを実行しているＰＥからメモリアクセスが集中することによって、高いプライオリティ値のタスクを実行しているＰＥのメモリアクセスが低速になる。これにより、各タスクに与えられたＰＥの実行時間に見合うだけの実質的な処理ができなくなるという非効率的な状態が生じる。
【００１１】
そこで、各ＰＥが例えばメモリ（またはバス）にアクセスできる帯域幅の制限値（最大値）または保証値（最小値）を設定可能なハードウェアが存在する。このようなハードウェア上では、ＰＥが低いプライオリティ値のタスクを実行する際には、ＯＳは当該ＰＥがメモリにアクセスできる帯域幅を狭く制限する。逆に、ＰＥが高いプライオリティ値のタスクを実行する際には、ＯＳは当該ＰＥがメモリにアクセスできる帯域幅を広く保証し、制限はしない。これにより、各ＰＥからのメモリアクセスの競合による非効率な状態を回避することができる。
【００１２】
しかしながら、タスク実行時に当該タスク（のプライオリティ値）に応じてＰＥ毎にメモリ帯域幅が設定される場合、プライオリティ値が最低ではないタスクが複数あるときに、それぞれのタスクを実行するＰＥ毎に適切な帯域幅を判別することは非常に複雑な処理を要する。すなわち、各ＰＥがタスクの実行を開始するときに、システム全体のＰＥ毎の帯域幅及び各ＰＥによって実行されるタスクのプライオリティ値を把握した上で、各ＰＥがメモリにアクセスできる帯域幅を決定し、必要ならば他のＰＥの帯域幅の変更を行う必要が生じる。このような複雑な処理を行うこと自体も当然ＰＥの実行時間を消費し、さらに、各ＰＥが実行するタスクのプライオリティ値が変化する度に当該各ＰＥの帯域幅を調整する必要が生じる。このため、システム全体のタスクの実行効率が低下するおそれがある。
【００１３】
一方、複数のＰＥをグループ化してメモリ帯域幅を管理できるハードウェアが存在する。これは、例えば１つのハードウェアを仮想的に複数のコンピュータに分割して使用する際などに、メモリを仮想的に分割する目的で使用されている。
【００１４】
本発明の目的は、複数のＰＥをグループ化することで、高速かつ簡単に各ＰＥのメモリ帯域幅を設定することが可能な帯域制御プログラム及びマルチプロセッサシステムを提供することにある。
【課題を解決するための手段】
【００１５】
本発明の１つの態様によれば、複数のプロセッサ要素と、当該複数のプロセッサ要素の各々にアクセスされるメモリと、当該複数のプロセッサ要素の各々が前記メモリにアクセス可能なメモリ帯域幅を制限するメモリコントローラとから構成されるマルチプロセッサシステムにおいて、前記複数のプロセッサ要素のうち、少なくとも１つのプロセッサ要素によって実行される帯域制御プログラムが提供される。この帯域制御プログラムは、前記１つのプロセッサ要素に、前記複数のプロセッサ要素の各々が属するプロセッサ要素グループ毎のメモリ帯域幅を、前記メモリコントローラに設定するステップと、実行されるべきタスクが発生した際に、当該発生されたタスクを実行させるために、当該タスクを前記複数のプロセッサ要素のうちの１つに割り当てるステップと、前記割り当てられたプロセッサ要素に前記発生されたタスクを実行させる際に、当該発生されたタスクの動作条件または動作状態に応じて、当該割り当てられたプロセッサ要素が属すべきプロセッサ要素グループを決定するステップと、前記決定されたプロセッサ要素グループに属すべき前記割り当てられたプロセッサ要素に、前記メモリコントローラに設定された当該プロセッサ要素グループのメモリ帯域幅で前記発生されたタスクを実行させるステップとを実行させる。
【発明の効果】
【００１６】
本発明によれば、複数のＰＥをグループ化することで、高速かつ簡単に各ＰＥのメモリ帯域幅を設定することができる。
【発明を実施するための最良の形態】
【００１７】
以下、図面を参照して、本発明の実施形態について説明する。
【００１８】
図１は、本実施形態に係るマルチプロセッサシステムのハードウェア構成を示すブロック図である。
【００１９】
図１のマルチプロセッサシステムは、主として、複数のプロセッサ要素（プロセッサ・エレメント：Processor Element）１０、メモリコントローラ２０、メモリ３０、Ｉ／Ｏコントローラ４０及び外部記憶装置５０から構成される。以下、プロセッサ要素は、単にＰＥと表記する。
【００２０】
複数のＰＥ１０の各々は、マルチプロセッサシステムの動作を制御するために設けられた例えばメインプロセッサまたはサブプロセッサである。複数のＰＥ１０は、ＰＥ（０）、ＰＥ（１）、ＰＥ（２）及びＰＥ（３）を含む。複数のＰＥ１０は、例えば外部記憶装置５０に格納されているオペレーティングシステム（以下、ＯＳと表記）５１及びユーザアプリケーションプログラムのような各種アプリケーションプログラムを実行する。また、複数のＰＥ１０は、メモリのアクセス制御を行うメモリコントローラ２０を介してメモリ３０と接続されている。複数のＰＥ１０は、例えば１つのメモリ３０を共有して利用する。
【００２１】
メモリコントローラ２０は、帯域制御部２１を含む。帯域制御部２１は、各ＰＥがメモリ３０にアクセスできる帯域幅の制限値（最大値）または保証値（最小値）を設定する。また、メモリコントローラ２０は、複数のＰＥ１０の各々をグループ化して、メモリ帯域幅を管理する。
【００２２】
また、複数のＰＥ１０は、各種デバイスとのやり取りを制御するＩ／Ｏコントローラ４０を介して、例えば外部記憶装置５０またはその他のデバイスと接続されている。
【００２３】
この外部記憶装置５０には、複数のＰＥ１０によって実行されるＯＳ５１が格納されている。ＯＳ５１は、例えばマルチプロセッサシステムのハードウェア資源およびソフトウェア資源の割り当て等を統合的に管理するためのプログラムである。また、ＯＳ５１は、複数のＰＥ１０のうち、少なくとも１つのＰＥ、例えばＰＥ（０）上で動作する。
【００２４】
ここで、例えば複数のＰＥ１０のうちの少なくとも１つのＰＥ上でＯＳ５１が実行されることによって、マルチプロセッサシステムのハードウェア資源およびソフトウェア資源の割り当て等の処理が実行される。しかし、以下の説明では、煩雑さを避けるために、ＯＳ５１が各種処理を行うものとする。
【００２５】
ＯＳ５１は、例えば複数のＰＥ１０に実行（処理）されるべきタスクを複数のＰＥ１０のうちの１つに割り当てる処理を実行する。このタスクは、ＯＳ５１やユーザアプリケーションによって多数発生する。発生されたタスクの各々は、ＯＳ５１によって複数のＰＥ１０の各々に割り当てられる。タスクの各々には、例えば動作条件が予め定められている。タスクは、動作条件として、例えば予め定められている当該タスクが実行される優先度を示す実行プライオリティ（Priority）値を有する。この実行プライオリティ値は小さいほど、実行プライオリティ値（優先度）が高いと表現する。例えば、実行プライオリティ値が０である場合には、実行プライオリティ値は最高となる。また、ＯＳ５１は、上記したメモリコントローラ２０の帯域制御部２１によって設定されるメモリ帯域幅の制御を行う。
【００２６】
なお、上記した複数のＰＥ１０、メモリコントローラ２０、メモリ３０、Ｉ／Ｏコントローラ４０及び外部記憶装置５０等は、それぞれ例えばバスを介して接続されている。
【００２７】
次に、図２は、図１に示すＯＳ５１の主として機能構成を示すブロック図である。ＯＳ５１は、帯域設定部５１１、スケジューラ５１２及びグループ設定部５１３を含む。これらの各部５１１乃至５１３は、図１に示される複数のＰＥ１０のうち、少なくとも１つのＰＥが外部記憶装置５０に格納されているＯＳ５１を実行することにより実現されるものとする。このＯＳ５１は、コンピュータ読み取り可能な記憶媒体に予め格納して頒布可能である。
【００２８】
また、図１に示す外部記憶装置５０には、グループ・帯域テーブル５２、グループ・プライオリティテーブル５３及びタスクテーブル５４が格納されている。
【００２９】
帯域設定部５１１は、例えばユーザによって入力された値に応じて、複数のＰＥ１０の各々が属する複数のＰＥグループの各々を識別するグループ識別情報及び当該グループ識別情報によって示されるＰＥグループに属するＰＥがメモリ３０にアクセス可能なメモリ帯域幅を示す帯域幅情報を対応付けて、グループ・帯域テーブル５２に登録する。帯域設定部５１１は、グループ・帯域テーブル５２を参照して、ＰＥグループ毎のメモリ帯域幅をメモリコントローラ２０（の帯域制御部２１）に設定する。なお、グループ・帯域テーブル５２には、システムの設定として、グループ識別情報及び帯域幅情報が予め登録されている構成であっても良い。
【００３０】
グループ・プライオリティテーブル５３には、上記したタスクの各々が実行される優先度を示す実行プライオリティ値及び当該タスクを実行するＰＥが属するＰＥグループを示すグループ識別情報が対応付けて予め保持されている。
【００３１】
タスクテーブル５４には、例えば発生されたタスク（に係わる情報）が登録される。このタスクテーブル５４には、例えばタスク毎に実行プライオリティ値が対応付けて保持される。
【００３２】
スケジューラ５１２は、例えばＯＳ５１の起動時に、タスクテーブル５４を作成する処理を実行する。スケジューラ５１２は、タスクが発生すると、タスクテーブル５４に当該タスクを登録する。スケジューラ５１２は、タスクテーブル５４に登録されているタスクを各ＰＥに割り当てる処理を実行する。これにより、スケジューラ５１２は、複数のＰＥ１０を利用して、複数のタスクを実行しようとする。スケジューラ５１２は、例えばＰＥの実行時間を分割してタスクに割り当てる。スケジューラ５１２は、例えば上記した実行プライオリティ値が高いタスクには多くの実行時間を、実行プライオリティ値が低いタスクには少ない実行時間を割り当てる。
【００３３】
また、スケジューラ５１２は、後述するグループ識別情報が設定されたＰＥに対して、当該グループ識別情報に対応付けてグループ・帯域テーブル５２に保持されている帯域幅情報によって示されるメモリ帯域幅でタスクを実行させる。つまり、スケジューラ５１２は、各ＰＥに対して、メモリコントローラ２０に設定されたＰＥグループ毎のメモリ帯域幅でタスクを実行させる。
【００３４】
スケジューラ５１２は、タスクテーブル５４に登録されているタスクを各ＰＥのタスクキュー（図示しない）に追加することで、タスクを各ＰＥに割り当てる。各ＰＥにタスクが割り当てられると、タスクテーブル５４には、当該タスクを実行するＰＥの識別子が当該タスク毎に対応付けて登録される。スケジューラ５１２は、例えば実行プライオリティが高い順に各ＰＥのタスクキューにタスクを追加する。このタスクキューは、外部記憶装置５０に格納されている。
【００３５】
複数のＰＥ１０の各々は、自身のタスクキューを参照して、例えば実行プライオリティが高いタスクには多くの実行時間を、実行プライオリティが低いタスクには少ない実行時間を与えながら動作（処理）する。
【００３６】
スケジューラ５１２は、グループ決定部５１４を含む。グループ決定部５１４は、各ＰＥが実行するタスクの例えば動作条件に応じて、各ＰＥが属すべきＰＥグループを決定する。グループ決定部５１４は、グループ・プライオリティテーブル５３及びタスクテーブル５４を参照して、各ＰＥが実行するタスクの実行プライオリティ値から当該各ＰＥのＰＥグループを決定する。グループ決定部５１４は、各ＰＥが実行するタスクに対応付けてタスクテーブル５４に保持されている実行プライオリティ値を取得する。また、グループ決定部５１４は、取得された実行プライオリティ値に対応付けてグループ・プライオリティテーブル５３に保持されているグループ識別情報によって示されるＰＥグループを、各ＰＥが属すべきＰＥグループとして決定する。
【００３７】
グループ設定部５１３は、グループ決定部５１４によって決定された各ＰＥのＰＥグループを示すグループ識別情報（ＰＥグループ番号）を、各ＰＥのＰＥグループレジスタに設定する。このＰＥグループレジスタは、各ＰＥに存在し、当該各ＰＥが属するＰＥグループのグループ識別情報（識別子）を設定する記憶領域である。
【００３８】
各ＰＥは、グループ識別情報が各ＰＥのＰＥグループレジスタに設定されることにより、帯域設定部５１１によってメモリコントローラ３０に設定された当該グループ識別情報によって示されるＰＥグループのメモリ帯域幅でタスクを実行する。
【００３９】
次に、図３のフローチャートを参照して、ＯＳ５１の帯域設定部５１１がグループ・帯域テーブル５２を作成（登録）する処理手順について説明する。なお、この処理は、例えばシステムの運用開始時または運用形態変更時に実行される。
【００４０】
まず、帯域設定部５１１は、例えばユーザによって入力されるＰＥグループ数の入力を受付ける（ステップＳ１）。ここで、ユーザによって入力されたＰＥグループ数は、Ｎ（Ｎは２以上の整数）であるものとする。
【００４１】
次に、帯域設定部５１１は、例えばグループｎ（ｎ＝０、１、２、…、Ｎ−１）の初期値として「０」を設定する（ステップＳ２）。
【００４２】
帯域設定部５１１は、例えばユーザによって入力されるＰＥグループｎに属するＰＥがメモリにアクセスするメモリ帯域幅の入力を受付ける（ステップＳ３）。ここで、ユーザによって入力されたメモリ帯域幅は、Ｂｎ％であるものとする。なお、Ｂｎは、１〜１００％であるものとする。
【００４３】
帯域設定部５１１は、ＰＥグループｎを示すグループ識別情報及びステップＳ３で入力されたメモリ帯域幅Ｂｎを示す帯域幅情報を外部記憶装置５０上のグループ・帯域テーブル５２に登録（設定）する（ステップＳ４）。ここでは、ＰＥグループ０を示すグループ識別情報及びメモリ帯域幅Ｂ０を示す帯域幅情報が対応付けて登録される。
【００４４】
帯域設定部５１１は、ＰＥグループｎの値に、１を加える（ステップＳ５）。帯域制御部５１１は、ＰＥグループｎの値がＮ−１であるか否かを判定する（ステップＳ６）。帯域制御部５１１は、ＰＥグループｎの値がＮ−１でないと判定した場合（ステップＳ６のＮＯ）、ステップＳ３に戻って、ステップＳ１で入力された全てのＰＥグループに対してメモリ帯域幅を登録する（ステップＳ６においてＰＥグループｎ＝Ｎ−１と判定される）まで処理が繰り返される。この場合、ステップＳ３に戻って、ＰＥグループ１のメモリ帯域幅Ｂ１をグループ・帯域幅テーブル５２に登録する処理が実行される。
【００４５】
なお、例えばＰＥグループ毎に登録されるメモリ帯域幅は、その合計が１００％となるように登録される。
【００４６】
一方、ステップＳ６において、ＰＥグループｎの値がＮ−１であると判定された場合、グループ・帯域テーブル５２の作成処理は終了される。
【００４７】
なお、上記したようにＰＥグループの初期値は０としているため、上記したようにＰＥグループＮ−１まで処理されると、実際にはグループ・帯域テーブル５２に登録されるＰＥグループ数は、Ｎとなる。
【００４８】
図４は、帯域設定部５１１によって作成（登録）されたグループ・帯域テーブル５２のデータ構造の一例を示す。
【００４９】
図４に示すように、グループ・帯域テーブル５２には、ＰＥグループを示すグループ識別情報及び当該ＰＥグループに対して設定されるメモリ帯域幅情報が対応付けて保持されている。図４の例では、ＰＥグループ０を示すグループ識別情報「０」に対応付けて保持されているメモリ帯域幅情報によって示されるメモリ帯域幅Ｂ０は、「９０％」である。また、ＰＥグループ１を示すグループ識別情報「１」に対応付けて保持されているメモリ帯域幅情報によって示されるメモリ帯域幅Ｂ１は、「１０％」である。この例では、ユーザによってＰＥグループ数として２（ＰＥグループ０及びＰＥグループ１）が入力されている。また、グループ識別情報「０」及び「１」に対応付けられているメモリ帯域幅の合計は１００％となっている。
【００５０】
次に、図５のフローチャートを参照して、帯域設定部５１１がメモリコントローラ２０にＰＥグループ毎のメモリ帯域幅を設定する処理手順について説明する。なお、このＰＥグループ毎のメモリ帯域幅を設定する処理は、例えばＯＳ５１のスケジューラが起動する際に実行される。
【００５１】
まず、帯域設定部５１１は、外部記憶装置５０からグループ・帯域テーブル５２を読み込む（ステップＳ１１）。
【００５２】
次に、帯域設定部５１１は、例えばＰＥグループｎ（ｎ＝０、１、２、…、Ｎ）の初期値として「０」を設定する（ステップＳ２）。
【００５３】
帯域設定部５１１は、グループ・帯域テーブル５２を参照して、ＰＥグループ０のメモリ帯域幅Ｂ０をメモリコントローラ２０に設定する（ステップＳ１３）。帯域設定部５１１は、ＰＥグループ０を示すグループ識別情報に対応付けてグループ・帯域テーブル５２に保持されているメモリ帯域情報によって示されるメモリ帯域幅Ｂ０を設定する。
【００５４】
帯域設定部５１１は、ＰＥグループｎの値に、１を加える（ステップＳ１４）。帯域制御部５１１は、ＰＥグループｎの値がＮ−１であるか否かを判定する（ステップＳ１５）。帯域制御部５１１は、ＰＥグループｎの値がＮ−１でないと判定した場合（ステップＳ１５のＮＯ）、ステップＳ１３に戻って、グループ・帯域テーブル５２に保持されている全てのＰＥグループに対してメモリ帯域幅を設定するまで処理が繰り返される。この場合、ステップＳ３に戻って、グループ１のメモリ帯域幅Ｂ１をメモリコントローラ２０に設定する処理が実行される。
【００５５】
一方、ステップＳ１５において、ＰＥグループｎの値がＮ−１であると判定された場合、ＰＥグループのメモリ帯域を設定する処理は終了され、初期タスクテーブル及びタスクキューを作成する処理が実行される。これにより、タスクテーブル５４に保持されている複数のタスクを各ＰＥに割り当てる処理（タスクディスパッチ）が実行される。
【００５６】
図６は、グループ・プライオリティテーブル５３のデータ構造の一例を示す。
【００５７】
図６に示すように、グループ・プライオリティテーブル５３には、実行プライオリティ値及びグループ識別情報が保持されている。なお、実行プライオリティ値の段階数は２（実行プライオリティ値０または１）、ＰＥグループ数は２（ＰＥグループ０または１）であるものとする。図６の例では、実行プライオリティ値「０」に対応付けて、ＰＥグループ０を示すグループ識別情報「０」が保持されている。また、実行プライオリティ値「１」に対応付けて、ＰＥグループ１を示すグループ識別情報「１」が保持されている。このグループ・プライオリティテーブル５３に保持されている実行プライオリティ値及びグループ識別情報は、例えばシステム運用開始時または運用形態変更時等に予め定められている。
【００５８】
図７は、タスクテーブル５４及び各ＰＥのタスクキュー（task queue）のデータ構造の一例を示す。図７に示すように、タスクテーブル５４には、タスク毎に、当該タスクの実行プライオリティ値が保持されている。また、タスクテーブル５４には、タスク毎に、スケジューラ５１２によって当該タスクが割り当てられたＰＥを示すＰＥ識別情報が保持されている。
【００５９】
図７の例では、タスクテーブル５４には、タスクＡ〜Ｃ、及びタスク１〜１０が保持されている。また、タスクＡ〜Ｃの実行プライオリティ値は０であり、タスク１〜１０の実行プライオリティ値は１である。なお、実行プライオリティ値は１よりも０の方がプライオリティ（処理優先度）が高いものとする。つまり、各ＰＥは、タスクＡ〜Ｃには、多い実行時間で動作し、タスク１〜１０には少ない実行時間で動作することになる。
【００６０】
また、各ＰＥのタスクキューには、スケジューラ５１２によって割り当てられたタスクが実行プライオリティ毎に登録されている。各ＰＥのタスクキューに登録されている複数のタスクは、例えば登録されている順に各ＰＥによって処理されることになる。
【００６１】
図７に示すように、ＰＥ（０）のタスクキューには、実行プライオリティ値「０」のタスクとしてタスクＡが割り当てられている。また、ＰＥ（０）のタスクキューには、実行プライオリティ値「１」のタスクとしてタスク３及び７が登録されている。
【００６２】
同様に、ＰＥ（１）のタスクキューには、実行プライオリティ値「０」のタスクとしてタスクＢが割り当てられている。また、ＰＥ（１）のタスクキューには、実行プライオリティ値「１」のタスクとしてタスク４及び８が登録されている。
【００６３】
同様に、ＰＥ（２）のタスクキューには、実行プライオリティ値「０」のタスクとしてタスクＣが割り当てられている。また、ＰＥ（２）のタスクキューには、実行プライオリティ値「１」のタスクとしてタスク５及び９が登録されている。
【００６４】
同様に、ＰＥ（３）のタスクキューには、実行プライオリティ値「１」のタスクとしてタスク１、２、６及び１０が登録されている。
【００６５】
なお、タスクテーブル５４に保持されている複数のタスクは、例えば実行プライオリティ値が高い順に各ＰＥに割り当てられる。
【００６６】
また、図７のタスクテーブル５４には、タスク毎に上記したように各タスクが割り当てられた各ＰＥを示すＰＥ識別情報が示されている。ここでは、ＰＥ（０）を示すＰＥ識別情報を「０」、ＰＥ（１）を示すＰＥ識別情報を「１」、ＰＥ（２）を示すＰＥ識別情報を「２」及びＰＥ（３）を示すＰＥ識別情報を「３」とする。
【００６７】
次に、図８のフローチャートを参照して、各ＰＥがタスクを実行する際に当該ＰＥが属すべきＰＥグループを設定する処理手順について説明する。ここでは、ＰＥ（０）がタスクＡを実行する際の処理について説明する。なお、他のＰＥについても同様であり、他のタスクを実行する際についても同様である。また、必要に応じて図４、図６及び図７を用いて説明する。
【００６８】
まず、スケジューラ５１２のグループ決定部５１４は、ＰＥ（０）がタスクＡを実行する際、図７に示すタスクテーブル５４を参照して、当該タスクＡに対応付けて保持されている実行プライオリティ値（ここでは、「０」）を取得する（ステップＳ２１）。
【００６９】
次に、グループ決定部５１４は、グループ・プライオリティテーブル５３を参照して、取得された実行プライオリティ値からＰＥグループを決定する（ステップＳ２２）。グループ決定部５１４は、取得された実行プライオリティ値に対応付けてグループ・プライオリティテーブル５３に保持されているグループ識別情報によって示されるＰＥグループを、ＰＥ（０）が属すべきＰＥグループとして決定する。例えば、グループ決定部５１４は、図６に示すグループ・プライオリティテーブル５３には実行プライオリティ値「０」に対応付けてグループ識別情報「０」が保持されているので、ＰＥ（０）のＰＥグループはＰＥグループ０であると決定する。
【００７０】
グループ設定部５１３は、グループ決定部５１４によって決定されたＰＥグループのＰＥグループ番号（グループ識別情報）をＰＥ（０）のＰＥグループレジスタに設定する（ステップＳ２３）。この場合、ＰＥ（０）のＰＥグループレジスタには、「０」が設定される。
【００７１】
ＰＥ（０）のＰＥグループレジスタに「０」が設定された場合、ＰＥ（０）は、グループ識別情報「０」に対応付けてグループ・帯域テーブル５２に保持されている帯域情報によって示されるメモリ帯域幅で、タスクＡを実行する。図４に示すグループ・帯域テーブル５２の例では、ＰＥ（０）は、メモリ帯域幅９０％でタスクＡを処理可能である。
【００７２】
図９は、ＰＥ（０）〜ＰＥ（３）が、割り当てられた複数のタスクを実時間ｔで実行する処理の流れを示す。なお、ＰＥ（０）〜ＰＥ（３）には、上記した図７に示すように複数のタスクが割り当てられている。図９に示すように、ＰＥ（０）〜ＰＥ（２）は、実行プライオリティ値「１」のタスク（タスク３〜５、タスク７〜９）に比べて、実行プライオリティ値「０」のタスク（タスクＡ〜Ｃ）の実行時間を多くし、かつ、実行回数も多く動作している。また、ＰＥ（３）は、実行すべきタスク（タスク１、２、６及び１０）が全て実行プライオリティ値「１」であるため、実行時間及び実行回数を均一的に各タスクを実行している。
【００７３】
図１０は、図９に示す実時間ｔがｔ０のときのＰＥ（０）〜ＰＥ（３）の各々が属するＰＥグループ及び当該ＰＥ（０）〜ＰＥ（３）の各々がメモリ３０にアクセスできるメモリ帯域幅の関係を示す。
【００７４】
図９の例では、実時間ｔ０のとき、ＰＥ（０）は、実行プライオリティ値「１」のタスク３を実行している。また、ＰＥ（１）は実行プライオリティ値「１」のタスク４を、ＰＥ（２）は実行プライオリティ値「１」のタスク５を、ＰＥ（３）は実行プライオリティ値「１」のタスク２を実行している。つまり、ＰＥ（０）〜ＰＥ（３）は、全て実行プライオリティ値「１」のタスクを実行している。
【００７５】
この場合、図１０に示すように、ＰＥ（０）〜ＰＥ（３）の各々が属すべきＰＥグループは、ＰＥグループ１であると決定されている。よって、ＰＥ（０）〜ＰＥ（３）のそれぞれのＰＥグループレジスタには、グループ識別情報（Ｇ）「１」が設定されている。これにより、図１０の例では、ＰＥ（０）〜ＰＥ（３）は、グループ識別情報「１」に対応付けてグループ・帯域テーブル５２に保持されている帯域幅情報によって示されるメモリ帯域幅でメモリ３０にアクセスすることが可能となる。つまり、図４に示すグループ・帯域テーブル５２の例では、ＰＥ（０）〜ＰＥ（３）は、メモリ帯域幅１０％でメモリ３０にアクセスできる。
ここで、図９に示す実時間ｔがｔ０からｔ１に経過した場合を想定する。この場合、ＰＥ（２）で実行されるタスクは、タスク５からタスクＣに切り替えられる。また、ＰＥ（３）で実行されるタスクは、タスク２からタスク６に切り替えられる。
【００７６】
図１１のフローチャートを参照して、例えばＰＥ（２）で実行されるタスクが、タスク５からタスクＣに切り替えられる際のＰＥ（２）が属すべきＰＥグループを設定する処理手順について説明する。なお、必要に応じて、図４、図６及び図７を用いて説明する。
【００７７】
まず、ＰＥ（２）がタスク５を実行中に、タスクＣによるタスク切り替え割込が発生したものとする（ステップＳ３１）。
【００７８】
タスク切り替え割り込みが発生すると、現在ＰＥ（２）が実行中のタスク５（前タスク）の停止（終了）処理が実行される（ステップＳ３２）。
【００７９】
次に、グループ決定部５１４は、ＰＥ（２）がタスク５の次に実行されるタスクＡ（新タスク）に対応付けてタスクテーブル５４に保持されている実行プライオリティ値を取得する（ステップＳ３３）。図７に示すタスクテーブル５４の場合、グループ決定部５１４は、実行プライオリティ値「０」を取得する。
【００８０】
グループ決定部５１４は、グループ・プライオリティテーブル５３を参照して、取得された実行プライオリティ値からＰＥグループを決定する（ステップＳ３４）。例えば、グループ決定部５１４は、図６に示すグループ・プライオリティテーブル５３には実行プライオリティ値「０」に対応付けてグループ識別情報「０」が保持されているので、ＰＥ（２）が属すべきＰＥグループはＰＥグループ０であると決定する。
【００８１】
グループ設定部５１３は、グループ決定部５１４によって決定されたＰＥグループのＰＥグループ番号（グループ識別情報）をＰＥ（２）のＰＥグループレジスタに設定する（ステップＳ３５）。この場合、ＰＥ（２）のＰＥグループレジスタには、「０」が設定される。
【００８２】
これにより、ＰＥ（２）がタスク５を実行している際には、グループ識別情報「１」が設定されていたＰＥ（２）のＰＥグループレジスタに、タスクＣを実行する際にはグループ識別情報「０」が設定される。このように、各ＰＥが実行するタスクのプライオリティ値に応じて、ＰＥグループレジスタのグループ識別情報を設定する（書き換える）ことができる。
【００８３】
ＰＥ（２）のＰＥグループレジスタに「０」が設定された場合、ＰＥ（２）はグループ識別情報「０」に対応付けてグループ・帯域テーブル５２に保持されている帯域情報によって示されるメモリ帯域幅で、タスクＣを実行する。図４に示すグループ・帯域テーブル５２の例では、ＰＥ（２）は、メモリ帯域幅９０％でタスクＣを処理可能である。
【００８４】
ＰＥ（２）のＰＥグループレジスタに、グループ識別情報「０」が設定されると、タスクＣ（新タスク）の実行を再開（起動）する処理が実行される（ステップＳ３６）。ここでは、例えば切替後のタスク（タスクＣ）のコンテキストリストア処理が実行される。具体的には、例えば主記憶上に保存されたタスクの実行状態（プログラムのアドレス、汎用レジスタの値等）をＰＥに設定する。これにより、切り替え後のタスクをＰＥに実行させるための準備を整える。
【００８５】
なお、上記したステップＳ３２からＳ３６の処理がタスク切替処理となる。タスク切替処理が終了すると、割込処理が完了する（ステップＳ３７）。割込処理が完了すると、ＰＥ（２）は、与えられた帯域幅（ここでは、メモリ帯域幅９０％）で切替後のタスク（ここでは、タスクＣ）を実行する。
【００８６】
また、図９に示す実時間ｔがｔ０からｔ１に経過した場合、ＰＥ（３）で実行されるタスクは、タスク２からタスク６に切り替えられる。この場合においても同様に、ＰＥ（３）のＰＥグループレジスタのグループ識別情報が設定される。なお、この場合では、タスク２及びタスク６の実行プライオリティ値は共に「１」であるため、結果的には、ＰＥ（３）のＰＥグループレジスタに設定されるグループ識別情報は変化しない。
【００８７】
図１２は、図９に示す実時間ｔがｔ１のときのＰＥ（０）〜ＰＥ（３）の各々が属するＰＥグループ及び当該ＰＥ（０）〜ＰＥ（３）の各々がメモリ３０にアクセスできるメモリ帯域幅の関係を示す。
【００８８】
図９の例では、実時間ｔ１のとき、ＰＥ（０）は、実行プライオリティ値「１」のタスク３を実行している。また、ＰＥ（１）は実行プライオリティ値「１」のタスク４を、ＰＥ（２）は実行プライオリティ値「０」のタスクＣを、ＰＥ（３）は実行プライオリティ値「１」のタスク６を実行している。
【００８９】
この場合、図１２に示すように、ＰＥ（０）、ＰＥ（１）及びＰＥ（３）の各々が属すべきＰＥグループは、ＰＥグループ１であると決定されている。また、ＰＥ（２）が属すべきＰＥグループは、ＰＥグループ０であると決定されている。よって、ＰＥ（０）、ＰＥ（１）及びＰＥ（３）のそれぞれのＰＥグループレジスタには、グループ識別情報「１」が設定されている。また、ＰＥ（２）のＰＥグループレジスタには、グループ識別情報「０」が設定されている。これにより、図１２の例では、ＰＥ（０）、ＰＥ（１）及びＰＥ（３）は、グループ識別情報「１」に対応付けてグループ・帯域テーブル５２に保持されている帯域幅情報によって示されるメモリ帯域幅でメモリ３０にアクセスすることが可能となる。また、ＰＥ（２）は、グループ識別情報「０」に対応付けてグループ・帯域テーブル５２に保持されている帯域幅情報によって示されるメモリ帯域幅でメモリ３０にアクセスすることが可能となる。つまり、図４に示すグループ・帯域テーブル５２の例では、ＰＥ（０）、ＰＥ（１）及びＰＥ（３）はメモリ帯域幅１０％、ＰＥ（２）はメモリ帯域幅９０％でメモリ３０にアクセスできる。
【００９０】
図１３は、図９に示す実時間ｔがｔ２のときのＰＥ（０）〜ＰＥ（３）の各々が属するＰＥグループ及び当該ＰＥ（０）〜ＰＥ（３）の各々がメモリ３０にアクセスできるメモリ帯域幅の関係を示す。なお、各ＰＥにおいて、タスク切り替え割込が発生した場合には、上記した図１１のような処理で各ＰＥのＰＥグループレジスタのグループ識別情報は設定される。
【００９１】
図９の例では、実時間ｔ２のとき、ＰＥ（０）は、実行プライオリティ値「０」のタスクＡを実行している。また、ＰＥ（１）は実行プライオリティ値「０」のタスクＢを、ＰＥ（２）は実行プライオリティ値「０」のタスクＣを、ＰＥ（３）は実行プライオリティ値「１」のタスク１０を実行している。
【００９２】
この場合、図１３に示すように、ＰＥ（０）〜ＰＥ（２）の各々が属すべきＰＥグループは、ＰＥグループ０であると決定されている。また、ＰＥ（３）が属すべきＰＥグループは、ＰＥグループ１であると決定されている。よって、ＰＥ（０）〜ＰＥ（２）のそれぞれのＰＥグループレジスタには、グループ識別情報「０」が設定されている。また、ＰＥ（３）のＰＥグループレジスタには、グループ識別情報「１」が設定されている。これにより、図１３の例では、ＰＥ（０）〜ＰＥ（２）はメモリ帯域幅９０％、ＰＥ（３）はメモリ帯域幅１０％でメモリ３０にアクセスできる。
【００９３】
図１４は、図９に示す実時間ｔがｔ３のときのＰＥ（０）〜ＰＥ（３）の各々が属するＰＥグループ及び当該ＰＥ（０）〜ＰＥ（３）の各々がメモリ３０にアクセスできるメモリ帯域幅の関係を示す。
【００９４】
図９の例では、実時間ｔ３のとき、ＰＥ（０）は、実行プライオリティ値「０」のタスクＡを実行している。また、ＰＥ（１）は実行プライオリティ値「０」のタスクＢを、ＰＥ（２）は実行プライオリティ値「１」のタスク９を、ＰＥ（３）は実行プライオリティ値「１」のタスク１０を実行している。
【００９５】
この場合、図１４に示すように、ＰＥ（０）及びＰＥ（１）の各々が属すべきＰＥグループは、ＰＥグループ０であると決定されている。また、ＰＥ（２）及びＰＥ（３）が属すべきＰＥグループは、ＰＥグループ１であると決定されている。よって、ＰＥ（０）ＰＥ（１）のそれぞれのＰＥグループレジスタには、グループ識別情報「０」が設定されている。また、ＰＥ（２）及びＰＥ（３）のＰＥグループレジスタには、グループ識別情報「１」が設定されている。これにより、図１４の例では、ＰＥ（０）及びＰＥ（１）はメモリ帯域幅９０％、ＰＥ（２）及びＰＥ（３）はメモリ帯域幅１０％でメモリ３０にアクセスできる。
【００９６】
上記したように本実施形態においては、複数のＰＥ１０をグループ化することで、タスクを実行する際に、当該タスクの実行プライオリティ値に応じて、当該タスクを実行するＰＥのＰＥグループレジスタにグループ識別情報を設定するという簡単な手順で、各ＰＥのメモリ帯域幅を設定することが可能となる。また、グループ毎にメモリ帯域幅をメモリコントローラに設定しているため、高い実行プライオリティのタスクを実行するＰＥは、低い実行プライオリティの男タスクを実行するＰＥとメモリ３０へのアクセスが競合することなく、タスクを実行することができる。
【００９７】
なお、上記した本実施形態においては、帯域制御部２１はメモリコントローラ２０に含まれるものとして説明したが、独立したハードウェアモジュールとして設けられる構成であっても構わない。
【００９８】
また、上記した本実施形態においては、帯域制御部２１はメモリ帯域幅を制御するものとして説明したが、例えば帯域制御部２１がバスコントローラに含まれており、当該帯域制御部２１が各ＰＥ及びメモリ３０間におけるバス帯域幅を制御する構成でも構わない。
【００９９】
［変形例］
次に、本実施形態の変形例について説明する。本変形例では、複数のタスクの各々には、予め動作状態が設定されている。各タスクは、上記した本実施形態で説明した実行プライオリティ値に加えて、当該タスクの動作状態として、メモリ３０へのアクセスの頻度を示すアクセスプライオリティ（Access Priority）値を有する。このアクセスプライオリティ値は、小さいほどアクセスプライオリティ値（アクセス頻度）が高いと表現する。例えば、アクセスプライオリティ値が０の場合は、アクセスプライオリティ値は最高である。
【０１００】
スケジューラ５１２のグループ決定部５１４は、各ＰＥが実行するタスクの実行プライオリティ値及びアクセスプライオリティ値から当該ＰＥが属すべきＰＥグループを決定する。
【０１０１】
なお、本変形例においては、本実施形態と異なり、便宜的にＰＥグループ数を３として設定されているものとして説明する。また、本変形例においては、実行プライオリティ値及びアクセスプライオリティ値から直接ＰＥグループを決定するため、本実施形態と異なり、グループ・プライオリティテーブル５３は存在しない。
【０１０２】
図１５は、本変形例のグループ・帯域テーブル５２のデータ構造の一例を示す。図１５に示すように、グループ・帯域テーブル５２には、ＰＥグループを示すグループ識別情報及びメモリ帯域幅情報が対応付けて保持されている。図１５の例では、ＰＥグループ０を示すグループ識別情報「０」に対応付けて保持されているメモリ帯域幅情報によって示されるメモリ帯域幅Ｂ０は、「６０％」である。また、ＰＥグループ１を示すグループ識別情報「１」に対応付けて保持されているメモリ帯域幅情報によって示されるメモリ帯域幅Ｂ１は、「３０％」である。また、ＰＥグループ２を示すグループ識別情報「２」に対応付けて保持されているメモリ帯域幅情報によって示されるメモリ帯域幅Ｂ２は、「１０％」である。
【０１０３】
図１６は、本変形例のタスクテーブル５４のデータ構造の一例を示す。図１６に示すように、タスクテーブル５４には、タスク毎に、当該タスクの実行プライオリティ値が及びアクセスプライオリティ値が保持されている。また、タスクテーブル５４には、タスク毎に、スケジューラ５１２によって当該タスクが割り当てられたＰＥを示すＰＥ識別情報が保持されている。なお、タスクテーブル５４に保持されている各タスク及び当該タスクに対応付けられている実行プライオリティ値は、図７に示すタスクテーブル５４と同様であるので、その詳しい説明は省略する。また、各タスクは、図７と同様に、各ＰＥに割り当てられたものとする。
【０１０４】
図１６の例では、タスクＡ、Ｂ、１〜４のアクセスプライオリティ値は０であり、タスクＣ、５〜１０のアクセスプライオリティ値は１である。なお、アクセスプライオリティ値は、１よりも０の方がメモリ３０へのアクセス頻度が高いものとする。
【０１０５】
また、タスクテーブル５４には、タスクの実行プライオリティ値及びアクセスプライオリティ値からＰＥグループが決定された場合、当該タスク毎に、当該決定されたＰＥグループを示すグループ識別情報が保持される。なお、実行プライオリティ値及びアクセスプライオリティ値からＰＥグループを決定する処理の詳細については、後述する。
【０１０６】
次に、図１７を参照して、各ＰＥがタスクを実行する際に当該ＰＥが属すべきＰＥグループを設定する処理手順について説明する。
【０１０７】
まず、スケジューラ５１２のグループ決定部５１４は、ＰＥがタスクを実行する際、タスクテーブル５４を参照して、当該タスクに対応付けて保持されている実行プライオリティ値及びアクセスプライオリティ値を取得する（ステップＳ４１）。
【０１０８】
次に、グループ決定部５１４は、取得された実行プライオリティ値及びアクセスプライオリティ値に基づいて、タスクを実行するＰＥが属すべきＰＥグループを決定（算出）する（ステップＳ４２）。
【０１０９】
ここで、実行プライオリティ値及びアクセスプライオリティ値の組合せからＰＥグループを決定する処理の具体例について説明する。なお、上記したように、実行プライオリティ値は０が最も優先度が高いものとし、アクセスプライオリティ値は０が最もメモリ３０にアクセスする頻度が高いものとする。また、実行プライオリティ値が大きいほど、実行プライオリティ値が低いとし、アクセスプライオリティ値についても同様とする。
【０１１０】
以下、タスクに対応付けてタスクテーブル５４に保持されている実行プライオリティ値をＰ、アクセスプライオリティ値をＡ、実行プライオリティ値の最大値（優先度が最低）をＰｍａｘ、アクセスプライオリティ値の最大値（アクセス頻度が最低）をＡｍａｘとする。また、決定されるＰＥグループを示すグループ番号（グループ識別情報）をＧまたはＧ（Ｐ、Ａ）と表記する。また、ＰＥグループにおいては、ＰＥグループ番号０によって示されるＰＥグループが最も広いメモリ帯域幅を有し、ＰＥグループ番号の最大値Ｇｍａｘによって示されるＰＥグループが最も狭いメモリ帯域幅を有するものとする。
【０１１１】
まず、第１の具体例（加算方式）について説明する。第１の具体例では、ＰとＡに予め定めた係数を乗じた上で加算することによってＧを決定することを特徴とする。一般式の例としては、Ｇ＝αＰ＋βＡ（α、βは予め定めた正の実数）となる。この式を用いた最も簡単な単純加算方式は、Ｇ＝Ｐ＋Ａである。
【０１１２】
具体的には、例えばＧｍａｘ＝２、Ｐｍａｘ＝Ａｍａｘ＝１（グループ数は３、プライオリティ値の段階数はそれぞれ２）である場合、例えば処理優先度が高く、メモリ３０へのアクセス頻度が高いタスクにはＰ＝０、Ａ＝０を設定することで、当該タスクを実行するＰＥが属すべきＰＥグループのＰＥグループ番号はＧ（０、０）＝０となり、当該ＰＥは、最も広い帯域幅を有するＰＥグループ０に割り当てられる。
【０１１３】
同様にＧ（０、１）＝１、Ｇ（１、０）＝１、Ｇ（１、１）＝２となる。このように、Ｇ＝０のＰＥグループに属するＰＥは、他のＰまたはＡが低いタスクを実行するＰＥに帯域を奪われることなく、タスクを実行できる。また、Ｇ＝２のＰＥグループに属するＰＥは、決してＧ＝１のＰＥグループに属するＰＥの帯域を妨害することなくタスクを実行する。
【０１１４】
また、上記したような単純加算方式は、例えばＧｍａｘ＝４、Ｐｍａｘ＝Ａｍａｘ＝２（グループ数５、プライオリティ値の段階数はそれぞれ３）のような多階層のグループ分けにも適用できる。
【０１１５】
また、実行プライオリティ値及びアクセスプライオリティ値の段階数が異なる場合、またはグループ数に対して実行プライオリティ値及びアクセスプライオリティ値の段階数が大きい場合等には、例えばＧ＝（Ｐ／Ｐｍａｘ＋Ａ／Ａｍａｘ）×Ｇｍａｘ／２のような正規化加算方式を用いることで対応することができる。
【０１１６】
また、特にシステム要件等によって実行プライオリティ値及びアクセスプライオリティ値に更に重みをつけたい場合には、正規化加算方式のＰまたはＡに更に重み係数を乗ずる等、適宜対応することができる。
【０１１７】
なお、上記したような計算式によって例えばＧ（Ｐ、Ａ）が０未満またはＧｍａｘを超えるような場合には、それぞれ０またはＧｍａｘとする。また、計算式によって例えばＧ（Ｐ、Ａ）が小数部分を含む場合は、当該小数部分を切り捨てるか切り上げるかを適宜決定するものとする。
【０１１８】
上記したような加算方式によると、最高の実行プライオリティ値（実行プライオリティ値が０）及びアクセスプライオリティ値が最高（アクセスプライオリティ値が０）のタスクは、当該タスクより低い実行プライオリティ値のタスクを実行するＰＥには決してメモリ帯域を妨害されずに実行される。また、実行プライオリティ値及びアクセスプライオリティ値のどちらかが最高でないタスクについてはバランスよくメモリ帯域が配分できるという利点がある。
【０１１９】
次に、第２の具体例（実行プライオリティ分離方式）について説明する。第２の具体例では、Ｐがより高いタスクを実行するＰＥほど、Ｐがより低いタスクを実行するＰＥに対して必ずメモリ帯域のより広い、もしくは同じＰＥグループに割り当てられるように、Ｇ（Ｐ、Ａ）が決定されることを特徴とする。
【０１２０】
具体的には、例えばＧｍａｘ＝３、Ｐｍａｘ＝Ａｍａｘ＝１（グループ数は４、プライオリティ値の段階数はそれぞれ２）である場合には、Ｇ（０、０）＝０、Ｇ（０、１）＝１、Ｇ（１、０）＝２、Ｇ（１、１）＝３のように配置する。このような線形な配置を行う場合は計算式でも表現可能であるが、実行プライオリティ分離方式は必ずしも線形式に配置する必要はない。例えばＧｍａｘ＝２、Ｐｍａｘ＝Ａｍａｘ＝１の場合に、Ｇ（０、０）＝０、Ｇ（０、１）＝１、Ｇ（１、０）＝Ｇ（１、１）＝２等の配置であっても構わない。
【０１２１】
このような実行プライオリティ分離方式によれば、Ｐを持つタスクの実行が、Ｐ＋１等のより低い実行プライオリティ値のタスクの実行によってメモリ帯域を妨害されることがないことを保証できる。更に、同じＰを持つタスク群を異なるＡによって細分化できるため、高いＰかつ低いＡのタスクが実行される際に、無駄なメモリ帯域が独占されることを軽減できる。
【０１２２】
なお、ＰｍａｘがＧｍａｘより大きい場合等に、連続するＰｍａｘの値をひとまとめとする方法も実行プライオリティ分離方式の拡張として実装可能である。例えばＧｍａｘ＝２、Ｐｍａｘ＝３、Ａｍａｘ＝１の場合に、Ｇ（０、０）＝０、Ｇ（０、１）＝１、Ｇ（１、０）＝２、Ｇ（１、１）＝２、Ｇ（２、０）＝２、Ｇ（２、１）＝２と配置すること等が考えられる。
【０１２３】
なお、上記したいずれの方式においても、同一のＰＥグループに異なる実行プライオリティ値またはアクセスプライオリティ値のタスクが存在する場合には、実行プライオリティ値またはアクセスプライオリティ値が高い方に長いＰＥ実行時間を与えるという方法を同時に適用するとしても良い。
【０１２４】
グループ決定部５１４は、上記したような方式に基づいて、タスクを実行するＰＥが属すべきＰＥグループを決定する。なお、決定されたＰＥグループは、タスク毎に対応付けてタスクテーブル５４に登録される。
【０１２５】
次に、グループ設定部５１３は、グループ決定部５１４によって決定されたＰＥグループのＰＥグループ番号（グループ識別情報）をＰＥグループレジスタに設定する（ステップＳ４３）。
【０１２６】
図１８は、ＰＥ（０）〜ＰＥ（３）が割り当てられた複数のタスクを実時間ｔで実行する処理の流れを示す。なお、ＰＥ（０）〜ＰＥ（３）には、上記した図１６に示すように複数のタスクが割り当てられている。なお、各タスクの実行時間については、例えば実行プライオリティ値に応じて定められており、上記した図９の説明と同様であるのでその説明は省略する。
【０１２７】
図１９は、図１８に示す実時間ｔがｔ０のときのＰＥ（０）からＰＥ（３）の各々が属するＰＥグループ及び当該ＰＥ（０）〜ＰＥ（３）の各々がメモリ３０にアクセスできるメモリ帯域幅の関係を示す。
【０１２８】
図１８の例では、実時間ｔ０のとき、ＰＥ（０）は、タスク３を実行しているので、ＰＥグループ１に属している。なお、このＰＥグループは、上記した図１６に示すタスクテーブル５４のタスク毎の実行プライオリティ値及びアクセスプライオリティ値から単純加算方式によって決定されたものとする。また、ＰＥ（１）は、タスク４を実行しているので、ＰＥグループ１に属している。また、ＰＥ（２）は、タスクＣを実行しているので、ＰＥグループ１に属している。また、ＰＥ（３）は、タスク６を実行しているので、ＰＥグループ２に属している。また、各ＰＥのＰＥグループレジスタには、各ＰＥが属するＰＥグループのグループ番号が設定されている。
【０１２９】
この場合、図１９に示すように、ＰＥ（０）〜ＰＥ（２）は、グループ番号（識別情報）１に対応付けてグループ・帯域テーブル５２に保持されている帯域幅情報によって示されるメモリ帯域幅でメモリ３０にアクセスすることが可能となる。また、ＰＥ（３）は、グループ番号２に対応付けてグループ・帯域テーブル５２に保持されている帯域幅情報によって示されるメモリ帯域幅でメモリ３０にアクセスすることが可能となる。つまり、図１５に示すグループ・帯域テーブル５２の例では、ＰＥ（０）〜ＰＥ（２）は、メモリ帯域幅３０％でメモリ３０にアクセスできる。また、ＰＥ（３）は、メモリ帯域１０％でメモリ３０にアクセスできる。
【０１３０】
図２０は、図１８に示す実時間ｔがｔ１のときのＰＥ（０）〜ＰＥ（３）の各々が属するＰＥグループ及び当該ＰＥ（０）〜ＰＥ（３）の各々がメモリ３０にアクセスできるメモリ帯域幅の関係を示す。なお、各ＰＥが実行するタスクが切り替えられる場合は、上述した本実施形態と同様にして、新タスクを実行する各ＰＥが属するＰＥグループのＰＥグループ番号を、当該ＰＥのＰＥグループレジスタに設定する処理が実行される。
【０１３１】
図１８の例では、実時間ｔ１のとき、ＰＥ（０）は、タスクＡを実行しているので、ＰＥグループ０に属している。また、ＰＥ（１）は、タスクＢを実行しているので、ＰＥグループ０に属している。また、ＰＥ（２）は、タスクＣを実行しているので、ＰＥグループ１に属している。また、ＰＥ（３）は、タスク６を実行しているので、ＰＥグループ２に属している。また、各ＰＥのＰＥグループレジスタには、各ＰＥが属するＰＥグループのグループ番号が設定されている。
【０１３２】
この場合、図２０に示すように、ＰＥ（０）及びＰＥ（１）は、グループ番号０に対応付けてグループ・帯域テーブル５２に保持されている帯域幅情報によって示されるメモリ帯域幅でメモリ３０にアクセスすることが可能となる。また、ＰＥ（２）は、グループ番号１に対応付けてグループ・帯域テーブル５２に保持されている帯域幅情報によって示されるメモリ帯域幅でメモリ３０にアクセスすることが可能となる。また、ＰＥ（３）は、グループ番号２に対応付けてグループ・帯域テーブル５２に保持されている帯域幅情報によって示されるメモリ帯域幅でメモリ３０にアクセスすることが可能となる。つまり、図１５に示すグループ・帯域テーブル５２の例では、ＰＥ（０）及びＰＥ（１）は、メモリ帯域幅６０％でメモリ３０にアクセスできる。また、ＰＥ（２）は、メモリ帯域幅３０％でメモリ３０にアクセスできる。また、ＰＥ（３）は、メモリ帯域１０％でメモリ３０にアクセスできる。
【０１３３】
上記したように本変形例においては、複数のＰＥ１０をグループ化することで、タスクを実行する際に、当該タスクの実行プライオリティ値及びアクセスプライオリティ値に応じて、当該タスクを実行するＰＥのＰＥグループレジスタにグループ識別情報（番号）を設定するという簡単な手順で、各ＰＥのメモリ帯域幅を設定することが可能となる。
【０１３４】
また、前述した本実施形態では、実行プライオリティ値のみに基づいてＰＥグループを決定するため、実行プライオリティ値が高いがメモリ３０にアクセスする頻度があまり高くないタスクを実行するＰＥと、実行プライオリティ値が高くメモリ３０にアクセスする頻度が高いタスクを実行するＰＥとが同一のＰＥグループに属することがあるため、かえって実行時間が長くなる場合が考えられる。しかしながら、本変形例では、実行プライオリティ値及びアクセスプライオリティ値に基づいてＰＥグループを決定するため、実行プライオリティ値及びアクセスプライオリティ値が共に高いタスクを実行するＰＥは、実行プライオリティ値は他界がアクセスプライオリティ値は低いタスクを実行するＰＥと異なるＰＥグループに属する。これにより、上記したような本実施形態において発生し得る非効率な状態を回避することができる。
【０１３５】
なお、前述した本実施形態では、各タスクの実行プライオリティ値のみを用いて当該タスクを実行するＰＥが属すべきＰＥグループを決定する構成を説明したが、同様に、本変形例で説明した各タスクのアクセスプライオリティ値のみを用いて当該タスクを実行するＰＥが属すべきＰＥグループを決定する構成としても構わない。この場合では、前述したグループ・プライオリティテーブル５３にアクセスプライオリティ値及びグループ識別情報が保持される構成とすると良い。
【０１３６】
また、本願発明は、上記実施形態または変形例そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態または変形例に開示されている複数の構成要素の適宜な組合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、実施形態または変形例に亘る構成要素を適宜組合せてもよい。
【図面の簡単な説明】
【０１３７】
【図１】本発明の実施形態に係るマルチプロセッサシステムのハードウェア構成を示すブロック図。
【図２】図１に示すＯＳ５１の主として機能構成を示すブロック図。
【図３】ＯＳ５１の帯域設定部５１１がグループ・帯域テーブル５２を作成する処理手順を示すフローチャート。
【図４】帯域設定部５１１によって作成されたグループ・帯域テーブル５２のデータ構造の一例を示す図。
【図５】帯域設定部５１１がメモリコントローラ２０にＰＥグループ毎のメモリ帯域幅を設定する処理手順を示すフローチャート。
【図６】グループ・プライオリティテーブル５３のデータ構造の一例を示す図。
【図７】タスクテーブル５４及びタスクキューのデータ構造の一例を示す図。
【図８】各ＰＥがタスクを実行する際に当該ＰＥが属すべきＰＥグループを設定する処理手順を示すフローチャート。
【図９】ＰＥ（０）〜ＰＥ（３）が割り当てられた複数のタスクを実時間ｔで実行する処理の流れを示す図。
【図１０】図９に示す実時間ｔがｔ０のときのＰＥ（０）〜ＰＥ（３）の各々が属するＰＥグループ及び当該ＰＥ（０）〜ＰＥ（３）の各々がメモリ３０にアクセスできるメモリ帯域幅の関係を示す図。
【図１１】ＰＥ（２）で実行されるタスクが、タスク５からタスクＣに切り替えられる際のＰＥ（２）が属すべきＰＥグループを設定する処理手順を示すフローチャート。
【図１２】図９に示す実時間ｔがｔ１のときのＰＥ（０）〜ＰＥ（３）の各々が属するＰＥグループ及び当該ＰＥ（０）〜ＰＥ（３）の各々がメモリ３０にアクセスできるメモリ帯域幅の関係を示す図。
【図１３】図９に示す実時間ｔがｔ２のときのＰＥ（０）〜ＰＥ（３）の各々が属するＰＥグループ及び当該ＰＥ（０）〜ＰＥ（３）の各々がメモリ３０にアクセスできるメモリ帯域幅の関係を示す図。
【図１４】図９に示す実時間ｔがｔ２のときのＰＥ（０）〜ＰＥ（３）の各々が属するＰＥグループ及び当該ＰＥ（０）〜ＰＥ（３）の各々がメモリ３０にアクセスできるメモリ帯域幅の関係を示す図。
【図１５】本実施形態の変形例のグループ・帯域テーブル５２のデータ構造の一例を示す図。
【図１６】タスクテーブル５４のデータ構造の一例を示す図。
【図１７】各ＰＥがタスクを実行する際に当該ＰＥが属すべきＰＥグループを設定する処理手順を示すフローチャート。
【図１８】ＰＥ（０）〜ＰＥ（３）が割り当てられた複数のタスクを実時間ｔで実行する処理の流れを示す図。
【図１９】図１８に示す実時間ｔがｔ０のときのＰＥ（０）〜ＰＥ（３）の各々が属するＰＥグループ及び当該ＰＥ（０）〜ＰＥ（３）の各々がメモリ３０にアクセスできるメモリ帯域幅の関係を示す図。
【図２０】図１８に示す実時間ｔがｔ１のときのＰＥ（０）〜ＰＥ（３）の各々が属するＰＥグループ及び当該ＰＥ（０）〜ＰＥ（３）の各々がメモリ３０にアクセスできるメモリ帯域幅の関係を示す図。
【符号の説明】
【０１３８】
１０…複数のＰＥ（プロセッサ要素）、２０…メモリコントローラ、２１…帯域制御部、３０…メモリ、４０…Ｉ／Ｏコントローラ、５０…外部記憶装置、５１…ＯＳ（オペレーティングシステム）、５２…グループ・帯域テーブル、５３…グループ・プライオリティテーブル、５４…タスクテーブル、５１１…帯域設定部、５１２…スケジューラ、５１３…グループ設定部、５１４…グループ決定部。
【図１】
2008158687.tif 000003
【図２】
2008158687.tif 000004
【図３】
2008158687.tif 000005
【図４】
2008158687.tif 000006
【図５】
2008158687.tif 000007
【図６】
2008158687.tif 000008
【図７】
2008158687.tif 000009
【図８】
2008158687.tif 000010
【図９】
2008158687.tif 000011
【図１０】
2008158687.tif 000012
【図１１】
2008158687.tif 000013
【図１２】
2008158687.tif 000014
【図１３】
2008158687.tif 000015
【図１４】
2008158687.tif 000016
【図１５】
2008158687.tif 000017
【図１６】
2008158687.tif 000018
【図１７】
2008158687.tif 000019
【図１８】
2008158687.tif 000020
【図１９】
2008158687.tif 000021
【図２０】
2008158687.tif 000022