(57)【要約】【課題】負荷分散のためＣＰＵ間でタスクを移行する場合の演算性能の低下を回避する。【解決手段】マイクロコンピュータ（１）は、第１ＣＰＵ（１０）と、第１バス（７０）と、第１メモリ（５０）と、第２ＣＰＵ（２０）と、第２バス（８０）と、第２メモリ（６０）とを含む。上記第１メモリ及び上記第２メモリは、それぞれ対応する上記第１ＣＰＵ及び上記第２ＣＰＵによって個別的に管理されるアドレス空間に配置される。そして、上記第１メモリ内にデータ領域を持つようにプログラムされたタスクが上記２メモリに転送されて上記第２ＣＰＵで実行される場合、上記タスクによる上記第１メモリへのアクセスが上記第２メモリへのアクセスとなるように、上記第２ＣＰＵから出力されたアドレスを変換するためのアドレス変換回路（１６０）を設ける。アクセスサイクル数を削減して、負荷分散のためＣＰＵ間でタスクを移行する場合の演算性能の低下を回避する。【選択図】図１
2009199414.tif 000002
【特許請求の範囲】
【請求項１】
所定のタスクを処理可能な第１ＣＰＵと、
上記第１ＣＰＵに結合された第１バスと、
上記第１バスを介して上記１ＣＰＵによってアクセス可能な第１メモリと、
所定のタスクを処理可能な第２ＣＰＵと、
上記第２ＣＰＵに結合された第２バスと、
上記第２バスを介して上記２ＣＰＵによってアクセス可能な第２メモリと、を含み、
上記第１メモリ及び上記第２メモリは、それぞれ対応する上記第１ＣＰＵ及び上記第２ＣＰＵによって個別的に管理されるアドレス空間に配置されて成るマイクロコンピュータであって、
上記第１メモリ内にデータ領域を持つようにプログラムされたタスクが上記２メモリに転送されて上記第２ＣＰＵで実行される場合、上記タスクによる上記第１メモリへのアクセスが上記第２メモリへのアクセスとなるように、上記第２ＣＰＵから出力されたアドレスを変換するためのアドレス変換回路を含むことを特徴とするマイクロコンピュータ。
【請求項２】
タスク毎にデータ領域のアドレス範囲を記憶するテーブルを含み、タスク実行において上記テーブルが参照される請求項１記載のマイクロコンピュータ。
【請求項３】
上記第１メモリ内にデータ領域を持つようにプログラムされたタスクが上記第２ＣＰＵで処理される場合、上記第１メモリ内のデータ領域が上記第２メモリ内に複写され、上記第２ＣＰＵで上記タスクの処理が終了された後、上記第１メモリ内のデータ領域が上記第２メモリ内のデータによって更新される請求項１又は２記載のマイクロコンピュータ。
【請求項４】
上記タスクのデータ領域の最新の値を保持するのが第１メモリであるか第２メモリであるかを識別可能なフラグを備え、実行するＣＰＵが自己のローカルメモリ内に有効なデータ領域を保持していない場合には、他方のＣＰＵのローカルメモリから自己のローカルメモリへとデータ領域の値を複写し、前記タスクを実行終了後、自己のローカルメモリのデータ領域が有効であるようにフラグを変更する請求項１又は２記載のマイクロコンピュータ。
【請求項５】
上記アドレス変換回路は、上記第１メモリにおけるタスク毎の先頭アドレスを保持可能な第１レジスタと、
上記タスクのサイズ情報を保持可能な第２レジスタと、
上記第２メモリにおけるタスク毎の先頭アドレスを保持可能な第３レジスタと、
上記第２ＣＰＵから出力されたアドレスが、上記第１レジスタの保持情報と上記第２レジスタの保持情報とによって決定されるアドレス範囲に入っているか否かの判定を行う判定部と、
上記第２ＣＰＵから出力されたアドレスが上記アドレス範囲に入っている場合に、上記第２ＣＰＵから出力されたアドレスに上記第３レジスタの保持情報を加算することで、アドレス変換を行う変換部と、を含んで成る請求項１記載のマイクロコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロコンピュータ、さらにはそれに含まれる複数のプロセッサが協調して処理を進める並列分散処理技術に関する。
【背景技術】
【０００２】
マイクロコンピュータはマイクロプロセッサとも称される。組込み機器の分野でも処理能力の向上にともない消費電力あたりの処理性能が高いマルチコア構成のマイクロプロセッサ（「マルチコアプロセッサ」と称される）に注目が集まっている。
【０００３】
マルチコア構成のマイクロプロセッサは、対称型プロセッサ(ＳＭＰ：Ｓｙｍｍｅｔｒｉｃ Ｍｕｌｔｉ Ｐｒｏｃｅｓｓｏｒ)と、非対称型プロセッサ(ＡＭＰ：Ａｓｙｍｍｅｔｒｉｃ Ｍｕｌｔｉ Ｐｒｏｃｅｓｓｏｒ)の構成に分けられる。対称型プロセッサ（ＳＭＰ）は、搭載されている複数ＣＰＵ毎の用途が完全に対等に動作し、どのＣＰＵでも同じような動作処理可能とされる。つまり、マスター動作のＣＰＵが存在せず、オペレーティングシステム（ＯＰ）機能などをすべてのＣＰＵが分担して動作処理するシステムである。対称型プロセッサＳＭＰは、タスクをスレッドに分けてプロセスを振り分けてどのプロセッサでも分散実行可能であるため、タスクの実行時間や実行順序に関して確実性に乏しく、リアルタイム性にかけるところがある。
【０００４】
対称型プロセッサを含むシステムでは、各スレッドをＣＰＵごとに割り当てて実行させることによって、ＣＰＵ個数に比例したスレッドを同時実行ができ、それによってシステム全体の処理向上を図ることができる。これに対して非対称型プロセッサ（ＡＭＰ）においては、予めＣＰＵ毎の用途が決められており、各ＣＰＵは、所定の用途以外には使用されない。
【０００５】
並列分散処理システムについて記載された文献の例としては、特許文献１を挙げることができる。特許文献１にかかる並列分散処理システムでは、各プロセッサのアドレス空間を、複数のスレッドが共有する空間と、スタック等のスレッド間で共有しない空間とに分割される。各プロセッサにＣＰＵアドレス／論理アドレス変換回路を設け、後者の非共有空間へのアクセスの場合には、そのアクセス要求アドレスにベース・レジスタの値を加えてアドレス変換を行うことにより、スタック等のアドレス空間を相対化して任意に平行移動できるようにしている。
【０００６】
【特許文献１】特開平９−１４６９０４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
非対称型プロセッサでは、事前にコア毎にタスクの割り振りを決める必要があり、その場合高負荷時には、一方のＣＰＵに負荷がかかりＣＰＵ処理性能が不足し所定時間内にタスクが実行できなくなる可能性がある。負荷を事前に予測し完璧にタスクの振り分けを行うことは困難である。そこで、第１ＣＰＵで所定時間内に処理しきれない可能性がある場合に、第２ＣＰＵにタスクの移動を行い実行(処理)させる方式が本願発明者によって検討された。それによれば、例えば第１ＣＰＵコアで実行されていたある周期タスクを次の周期から第２ＣＰＵで実行しようとする場合、タスクの静的変数は、第１ＣＰＵのローカルメモリにあるので、第２ＣＰＵから該タスクの第１ＣＰＵのローカルメモリに毎回アクセスしに行くことになり、第１ＣＰＵで実行する場合に比べて静的変数へのアクセスレイテンシが増大することになる。さらに、第１ＣＰＵと第２ＣＰＵの間で第１ローカルメモリへのアクセス競合が発生する可能性が増大し、演算性能の低下が想定される。このようにＣＰＵ毎にローカルメモリをもつマルチコアの非対称型プロセッサにおいて、負荷分散のためＣＰＵ間でタスクを移行する場合、アクセスレイテンシの大きい他のＣＰＵのローカルメモリに頻繁にアクセスすることや、片方のローカルメモリにアクセスが集中し競合が発生するために性能が劣化することが本願発明者によって見いだされた。
【０００８】
本発明の目的は、負荷分散のためＣＰＵ間でタスクを移行する場合の演算性能の低下を回避するための技術を提供することにある。
【０００９】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１０】
本願において開示される発明のうち代表的なものについて簡単に説明すれば下記のとおりである。
【００１１】
すなわち、マイクロコンピュータは、第１ＣＰＵと、第１バスと、第１メモリと、第２ＣＰＵと、第２バスと、第２メモリとを含む。上記第１メモリ及び上記第２メモリは、それぞれ対応する上記第１ＣＰＵ及び上記第２ＣＰＵによって個別的に管理されるアドレス空間に配置される。そして、上記第１メモリ内にデータ領域を持つようにプログラムされたタスクが上記２メモリに転送されて上記第２ＣＰＵで実行される場合、上記タスクによる上記第１メモリへのアクセスが上記第２メモリへのアクセスとなるように、上記第２ＣＰＵから出力されたアドレスを変換するためのアドレス変換回路（１６０）を設ける。アクセスサイクル数を削減して、負荷分散のためＣＰＵ間でタスクを移行する場合の演算性能の低下を回避する。
【発明の効果】
【００１２】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記の通りである。
【００１３】
すなわち、負荷分散のためＣＰＵ間でタスクを移行する場合の演算性能の低下を回避することができる。
【発明を実施するための最良の形態】
【００１４】
１．代表的な実施の形態
先ず、本願において開示される発明の代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【００１５】
〔１〕本発明の代表的な実施の形態に係るマイクロコンピュータ（１）は、所定のタスクを処理可能な第１ＣＰＵ（１０）と、上記第１ＣＰＵに結合された第１バス（７０）と、上記第１バスを介して上記１ＣＰＵによってアクセス可能な第１メモリ（５０）と、所定のタスクを処理可能な第２ＣＰＵ（２０）と、上記第２ＣＰＵに結合された第２バス（８０）と、上記第２バスを介して上記２ＣＰＵによってアクセス可能な第２メモリ（６０）とを含む。上記第１メモリ及び上記第２メモリは、それぞれ対応する上記第１ＣＰＵ及び上記第２ＣＰＵによって個別的に管理されるアドレス空間に配置される。そして、上記第１メモリ内にデータ領域を持つようにプログラムされたタスクが上記２メモリに転送されて上記第２ＣＰＵで実行される場合、上記タスクによる上記第１メモリへのアクセスが上記第２メモリへのアクセスとなるように、上記第２ＣＰＵから出力されたアドレスを変換するためのアドレス変換回路（１６０）を含む。
【００１６】
上記の構成によれば、上記第１メモリ内にデータ領域を持つようにプログラムされたタスクが上記２メモリに転送されて上記第２ＣＰＵで実行される場合、上記タスクによる上記第１メモリへのアクセスが上記第２メモリへのアクセスとなるように、上記第２ＣＰＵから出力されたアドレスが変換されるので、第１ＣＰＵと第２ＣＰＵとで共通のコードを使用しながら、第２ＣＰＵでタスク実行時も、静的変数へのアクセスは、第２メモリへのアクセスとすることができ、それによってアクセスサイクル数の削減ができる。このことが、負荷分散のためＣＰＵ間でタスクを移行する場合の演算性能の低下を回避する。
【００１７】
〔２〕タスク毎にデータ領域のアドレス範囲を記憶するテーブルを含み、タスク実行において上記テーブルを参照することができる。
【００１８】
〔３〕上記第１メモリ内にデータ領域を持つようにプログラムされたタスクが上記第２ＣＰＵで処理される場合、上記第１メモリ内のデータ領域が上記第２メモリ内に複写され、上記第２ＣＰＵで上記タスクの処理が終了された後、上記第１メモリ内のデータ領域が上記第２メモリ内のデータによって更新されるように構成することができる。
【００１９】
〔４〕上記タスクのデータ領域の最新の値を保持するのが第１メモリであるか第２メモリであるかを識別可能なフラグを備え、実行するＣＰＵが自己のローカルメモリ内に有効なデータ領域を保持していない場合には、他方のＣＰＵのローカルメモリから自己のローカルメモリへとデータ領域の値を複写し、前記タスクを実行終了後、自己のローカルメモリのデータ領域が有効であるようにフラグを変更するように構成することができる。
【００２０】
〔５〕上記アドレス変換回路は、上記第１メモリにおけるタスク毎の先頭アドレスを保持可能な第１レジスタ（１６３）と、上記タスクのサイズ情報を保持可能な第２レジスタ（１６４）と、上記第２メモリにおけるタスク毎の先頭アドレスを保持可能な第３レジスタ（１６５）と、上記第２ＣＰＵから出力されたアドレスが、上記第１レジスタの保持情報と上記第２レジスタの保持情報とによって決定されるアドレス範囲に入っているか否かの判定を行う判定部（１６１）と、上記第２ＣＰＵから出力されたアドレスが上記アドレス範囲に入っている場合に、上記第２ＣＰＵから出力されたアドレスに上記第３レジスタの保持情報を加算することで、アドレス変換を行う変換部（１６２）とを含んで構成することができる。
【００２１】
２．実施の形態の説明
次に、実施の形態について更に詳述する。
【００２２】
＜実施形態１＞
図１には、本発明にかかるマイクロコンピュータの構成例が示される。図１に示されるマイクロコンピュータ１は、いわゆるローカルメモリとメモリのアクセスコストが均一でないＮＵＭＡ(Ｎｏｎ-Ｕｎｉｆｏｒｍ Ｍｅｍｏｒｙ Ａｃｃｅｓｓ)タイプのマイクロコンピュータとされる。このマイクロコンピュータは、特に制限されないが、ＣＰＵ（中央処理装置）１０，２０、ＲＯＭ（リードオンリーメモリ）３０、Ｉ／Ｏポート４０、ＵＲＡＭ（ローカルメモリ）５０，６０、マルチプレクサ５１，５２、ＢＳＣ（バスステートコントローラ）１００，１１０、ＤＭＡＣ（ダイレクトメモリアクセスコントローラ）１３０、及びＡＤＴ（アドレス変換回路）１６０を含み、公知の半導体集積回路製造技術により、単結晶シリコン基板などの一つの半導体基板に形成される。
【００２３】
上記ＣＰＵ１０，２０は、それぞれ予め設定されたタスクを実行する。ＣＰＵ１０はＣＰＵバス７０に結合され、ＣＰＵ２０は、アドレス変換回路１６０を介してＣＰＵバス８０に結合される。アドレス変換回路１６０では、後に詳述するように、上記ＣＰＵ２０から出力されたアドレスを必要に応じて変換することができる。上記ＲＯＭ３０は、第１ポートと第２ポートを有し、上記ＣＰＵ１０，２０で実行されるタスクや、後に詳述するタスク変数テーブルなどが格納されている。上記ＲＯＭ３０の第１ポートは上記ＣＰＵバス７０に結合され、上記ＣＰＵ１０は、上記ＣＰＵバス７０を介して上記ＲＯＭ３０にアクセス可能とされる。上記ＲＯＭ３０の第２ポートは上記ＣＰＵバス８０に結合され、上記ＣＰＵ２０は、上記ＣＰＵバス８０を介して上記ＲＯＭ３０にアクセス可能とされる。上記ＵＲＡＭ５０は、マルチプレクサ５１を介してＣＰＵバス７０に結合され、上記ＵＲＡＭ６０は、マルチプレクサ５２を介してＣＰＵバス８０に結合される。上記ＵＲＡＭ５０，６０は、ランダムアクセス可能なスタティック型メモリとされる。上記ＵＲＡＭ５０は、上記ＣＰＵ１０によって管理されるアドレス空間に配置され、ＣＰＵ１０でのタスク実行に必要な各種情報の記憶領域として利用される。上記ＵＲＡＭ６０は、上記ＣＰＵ２０によって管理されるアドレス空間に配置され、ＣＰＵ２０でのタスク実行に必要な各種情報の記憶領域として利用される。また、上記ＵＲＡＭ５０，６０は、それぞれ経路選択のためのマルチプレクサ５１，５２を介してシステムバス９０に結合される。このシステムバス９０には、ＢＳＣ１００，１１０、ＤＭＡＣ１３０、及びＩ／Ｏポート４０が結合される。ＢＳＣ１００は、上記ＣＰＵバス７０とシステムバス９０との間でバスステートを制御する。ＢＳＣ１１０は、上記ＣＰＵバス８０とシステムバス９０との間でバスステートを制御する。ＤＭＡＣ１３０は、システムバス９０のバス権を獲得して、上記ＵＲＡＭ５０，６０間のＤＭＡ転送を制御する。上記Ｉ／Ｏポート４０は、このマイクロコンピュータ１の外部との間で各種データのやり取りを可能にする。
【００２４】
マイクロコンピュータでよく使われるプログラミング言語であるＣ言語では、メモリ空間がコード、データ、スタック、ヒープの４領域に分けられる。コード領域には、プログラム（タスク）が格納される。本例においてプログラム（タスク）はＲＯＭ３０に格納される。そして、ＵＲＡＭ（０）５０には、ＣＰＵ１０で実行されるプログラム（タスク）におけるデータ領域（ＤＡＴＡ）５０１、スタック領域（ＳＴＡＣＫ）５０２、ヒープ領域（ＨＥＡＰ）５０３が形成される。上記データ領域（ＤＡＴＡ）５０１には、タスクｎの変数５０４の記憶領域が含まれる。スタック領域（ＳＴＡＣＫ）５０２には、関数の戻り先や、自動変数(サブルーチン呼び出し時に内容が不定になる)が格納され、データ領域（ＤＡＴＡ）５０１には、静的変数(グローバル変数、ローカル変数)が格納され、ヒープ領域（ＨＥＡＰ）５０３には、ｍａｌｌｏｃ()等で確保される動的変数が格納される。尚、図示されないが、ＵＲＡＭ（１）６０には、ＣＰＵ２０で実行されるプログラム（タスク）におけるデータ領域（ＤＡＴＡ）、スタック領域（ＳＴＡＣＫ）、ヒープ領域（ＨＥＡＰ）が形成される。
【００２５】
図３には、タスク実行の際に参照されるタスク変数テーブル２００の構成例が示される。このタスク変数テーブル２００は、ＣＰＵ１０，２０間で移行対象のタスク毎にデータ領域の静的変数の割り当てられたアドレスとサイズが示される。図３に示されるタスク変数テーブル２００において、ＣＰＵ１０やＣＰＵ２０で実行されるタスクは、Ａ，Ｂ，Ｃ，Ｄ，…によって区別される。そしてこのタスク毎にＵＲＡＭ（０）５０の先頭アドレス（Ｒ１）、サイズ（Ｒ２）、ＵＲＡＭ６０の先頭アドレス、及び有効ＵＲＡＭの識別フラグ（ｆｌａｇ）が設定される。ここで、有効ＵＲＡＭの識別フラグ（ｆｌａｇ）は、前回のタスク実行に使用されたローカルメモリを示す。例えば有効ＵＲＡＭの識別フラグ（ｆｌａｇ）が論理値“０”であれば、前回のタスク実行にはＵＲＡＭ（０）５０が使用されたことを示し、有効ＵＲＡＭの識別フラグ（ｆｌａｇ）が論理値“１”であれば、前回のタスク実行にはＵＲＡＭ（１）６０が使用されたことを示す。特に制限されないが、上記タスク変数テーブル２００は、マイクロコンピュータ１の初期化によってＵＲＡＭ（０）５０に形成される。
【００２６】
図４には、上記アドレス変換回路１６０の構成例が示される。
【００２７】
上記アドレス変換回路１６０は、図４に示されるように、判定部（ＪＵＤ）１６１、変換部（ＣＨＧ）１６２、及びレジスタ１６３〜１６５を含む。レジスタ１６３には、ＵＲＡＭ（０）５０におけるタスク毎の先頭アドレス（Ｒ１）が設定される。レジスタ１６４には、タスク毎のサイズ（Ｒ２）が設定される。レジスタ１６５には、ＵＲＡＭ（１）６０におけるタスク毎の先頭アドレス（Ｒ３）が設定される。判定部１６１は、上記ＣＰＵ２０の出力アドレス（ａｄｄｒｅｓｓ）が、所定のアドレス範囲に入っているか否かの判定が行われる。ここで、「所定のアドレス範囲」とは、Ｒ１とＲ２とによって決定されるアドレス範囲を指す。上記ＣＰＵ２０の出力アドレスが、上記所定のアドレス範囲に入っていない場合には、判定部１６１の指示により、変換部１６２は、上記ＣＰＵ２０から伝達されたアドレス（ａｄｄｒｅｓｓ）をそのまま出力する（ａｄｄｒｅｓｓ  ｏｕｔ）。これに対して、上記ＣＰＵ２０の出力アドレスが、上記所定のアドレス範囲に入っている場合には、判定部１６１の指示により、変換部１６２は、上記ＣＰＵ２０から伝達されたアドレス（ａｄｄｒｅｓｓ）にオフセットアドレスを加算してそれを出力する（ａｄｄｒｅｓｓ  ｏｕｔ）。ここで、オフセットアドレスとは、ＵＲＡＭ（１）６０におけるタスク毎の先頭アドレスＲ３を指す。このオフセットアドレスが加算されることによって、上記ＣＰＵ２０の出力アドレスがＵＲＡＭ（１）６０の対応アドレスに変換される。
【００２８】
次に、上記構成の動作を説明する。
【００２９】
図５には、タスクスケジューラーがＣＰＵ１０での実行を決定する場合の動作が示される。
【００３０】
タスクスケジューラーはＣＰＵ１０で動いており、このタスクスケジューラーによってタスク管理が行われる。
【００３１】
処理３００でタスクスケジューラが次に呼び出すタスクの実行をＣＰＵ１０で実行させることに決定されると、処理３１０で図４に示されるタスク変数テーブル２００が参照され、処理３１５で先の実行ＣＰＵがＣＰＵ１０か否かの判定が行われる。ＣＰＵ１０で実行していた場合は、処理３２０へ分岐され、ＣＰＵ２０で実行していた場合は処理３３０で分岐される。処理３２０では、タスクの変数テーブル２００に従い、該タスク静的変数のＵＲＡＭ５０からＵＲＡＭ６０へのＤＭＡ転送設定が行われ、それに従ってＤＭＡ転送が行われる。これにより、ＵＲＡＭ５０内のデータ領域がＵＲＡＭ６０内に複写される。そして、タスク変数テーブル２００の該タスクの有効ＵＲＡＭのフラグがＵＲＡＭ（１）６０を示す値（論理値“１”）に変更される。処理３３０でアドレス変換回路１６０に、ＵＲＡＭ５０の静的変数領域をＵＲＡＭ６０へ変換するように設定される。これは、あるアドレス範囲へのアクセスに関しては、アドレスにオフセットを加えることである。処理３４０でタスクが実行される。呼び出されたタスクは、ＣＰＵ２０で実行される。このとき、ＣＰＵ１０とＣＰＵ２０で共通のコードが使用される。スタック領域は、ＵＲＡＭ６０のスタック領域にタスクの起動時に確保され、静的変数はＲＯＭ３０のコードはＵＲＡＭ５０のコード領域を示しているが、アドレス変換回路１６０のＵＲＡＭ６０にアクセスすることができる。これによりＣＰＵ２０とＣＰＵ１０で共通のコードを使用しながら、ＣＰＵ２０でタスク実行時も、静的変数(データ領域５０４)と自動変数(スタック領域５０２)は、ＣＰＵ２０のローカルメモリであるＵＲＡＭ６０へのアクセスとすることができ、アクセスサイクル数の削減ができる。処理３５０で、タスク変数テーブル２００の該タスクの有効ＵＲＡＭのフラグがＵＲＡＭ６０を示す値に変更される。処理３６０で、タスク変数テーブル２００に基づいて、ＵＲＡＭ６０からＵＲＡＭ５０へタスクの静的変数のＤＭＡ転送が行われ、ＣＰＵ移行の処理が完了する。
【００３２】
図６には、タスクスケジューラーがＣＰＵ２０での実行を決定する場合の動作が示される。
【００３３】
処理４００でタスクスケジューラが次に呼び出すタスクの実行をＣＰＵ２０で実行させることに決定されると、処理４１０で図４に示すようなタスクテーブル２００が参照され、処理４１５で先の実行ＣＰＵがＣＰＵ２０か否かの判定が行われる。ＣＰＵ２０で実行していなかった場合は、処理４２０へ分岐され、ＣＰＵ２０で実行していた場合は処理４３０に分岐される。処理４２０では、タスクの変数テーブル２００に従い、該タスク静的変数のＵＲＡＭ５０からＵＲＡＭ６０へのＤＭＡ転送設定が行われ、それに従ってＤＭＡ転送が行われる。処理４３０でアドレス変換回路１６０にＵＲＡＭ５０の静的変数領域へのアドレスへのＵＲＡＭ６０へ変換するように設定される。これは、あるアドレス範囲へのアクセスに関しては、アドレスにオフセットを加えることである。処理４４０でタスクが実行される。呼び出されたタスクは、ＣＰＵ２０で実行される。このとき、ＣＰＵ１０とＣＰＵ２０で共通のコードが使用される。スタック領域は、ＵＲＡＭ６０のスタック領域にタスクの起動時に確保され、静的変数はＲＯＭ３０のコードはＵＲＡＭ５０のコード領域を示しているが、アドレス変換回路１６０のＵＲＡＭ６０にアクセスすることができる。これによりＣＰＵ２０とＣＰＵ１０で共通のコードを使用しながら、ＣＰＵ２０でタスク実行時も、静的変数(データ領域)と自動変数(スタック領域)は、ＣＰＵ２０のローカルメモリであるＵＲＡＭ６０へのアクセスとすることができ、アクセスサイクル数の削減ができる。処理４５０で、タスク変数テーブル２００の該タスクの有効ＵＲＡＭのフラグをＵＲＡＭ６０を示す値に変更する。
【００３４】
上記例によれば、以下の作用効果を得ることができる。
【００３５】
ＣＰＵ２０とＣＰＵ１０で共通のコードを使用しながら、ＣＰＵ２０でタスク実行時も、静的変数(データ領域５０４)と自動変数(スタック領域５０２)へのアクセスは、ＣＰＵ２０のローカルメモリであるＵＲＡＭ６０へのアクセスとすることができ、それによってアクセスサイクル数の削減ができるので、負荷分散のためＣＰＵ間でタスクを移行する場合の演算性能の低下を回避することができる。
【００３６】
＜実施形態２＞
次に、実施形態２として、ＣＰＵ２０での実施時にＵＲＡＭ６０からＵＲＡＭ５０に毎回書き戻す場合について説明する。
【００３７】
図７に処理５００でタスクスケジューラが次に呼び出すタスクの実行をＣＰＵ１０で実行させることに決定すると、処理５４０でタスクを実行し、処理５５０でタスク変数テーブル２００のタスク有効ビットをＣＰＵ１０に設定する。
【００３８】
図８のフローチャートでタスクスケジューラが次に呼び出すタスクの実行をＣＰＵ２０で実行させる場合について述べる。処理６００でタスクスケジューラが次に呼び出すタスクの実行をＣＰＵ２０で実行させることに決定すると、処理６１０で図４に示すようなタスク変数テーブル２００が参照され、処理６１５で先の実行ＣＰＵがＣＰＵ２０か否かの判定が行われる。ＣＰＵ２０で実行していなかった場合は、処理６２０へ分岐され、ＣＰＵ２０で実行していた場合は処理６３０へ分岐される。処理６２０では、タスクの変数テーブル２００に従い該タスクの静的変数をＵＲＡＭ５０からＵＲＡＭ６０へのＤＭＡ転送設定が行われ、それに従ってＤＭＡ転送が行われる。処理６３０でアドレス変換回路１６０にＵＲＡＭ５０の静的変数領域へのアドレスへのアクセスをＵＲＡＭ６０の領域へ変換するように設定される。これは、あるアドレス範囲へのアクセスに関しては、アドレスにオフセットアドレスを加えることである。処理６４０でタスクの実行が行われる。呼び出されたタスクは、ＣＰＵ２０で実行される。このとき、ＣＰＵ１０とＣＰＵ２０で共通のコードを使用する。スタック領域は、ＵＲＡＭ６０のスタック領域にタスクの起動時に確保され、静的変数はＲＯＭ３０のコードはＵＲＡＭ５０のコード領域を示しているが、アドレス変換回路１６０のＵＲＡＭ６０にアクセスすることができる。これによりＣＰＵ２０とＣＰＵ１０で共通のコードを使用しながら、ＣＰＵ２０でタスク実行時も、静的変数(データ領域)と自動変数(スタック領域)へのアクセスは、ＣＰＵ２０のローカルメモリであるＵＲＡＭ６０へのアクセスとすることができ、アクセスサイクル数の削減ができる。処理６５０で、タスク変数テーブル２００の該タスクの有効ＵＲＡＭのフラグがＵＲＡＭ６０を示す値に変更される。処理６６０で、タスク変数テーブル２００に基づいて、ＵＲＡＭ６０からＵＲＡＭ５０へタスクの静的変数のＤＭＡ転送が行われる。これにより、ＵＲＡＭ５０の静的変数は常に最新の状態に更新され、またＣＰＵ２０で続けてタスクを再度実行する場合にはＵＲＡＭ５０からＵＲＡＭ６０へタスクの静的変数のＤＭＡ転送を行う必要が無くなる。
【００３９】
以上本発明者によってなされた発明を具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【００４０】
例えば、ＣＰＵ１０でタスク実行後に、ＵＲＡＭ５０からＵＲＡＭ６０へタスクの変数が最新になるようにＤＭＡ転送を必ず行うようにし、ＣＰＵ２０でタスク実行後に、ＵＲＡＭ６０からＵＲＡＭ５０へタスクの変数が最新になるようにＤＭＡ転送を必ず行うようにすることでタスク終了時に両方のＣＰＵのローカルメモリの値を同一にしておく。これにより、次にタスクを実行するＣＰＵがどちらであっても直ちに実行できるようになる。上記実施形態で示したように、ローカルメモリ間でタスクの演算に必要な静的変数をコピーすることで、他のＣＰＵのローカルメモリに頻繁にアクセスする必要が無くなり、それによって処理性能が向上する。また、同一のプログラムコードが両方のＣＰＵで使用可能なのでコードサイズの節約にもなる。
【００４１】
また、図３に示されるタスク変数テーブル２００は、互いに異なる記憶媒体に分けて格納することができる。例えばＵＲＡＭ（０）５０の先頭アドレスＲ１、サイズＲ２，ＵＲＡＭ（１）の先頭アドレスＲ３については、変更を要しないので、ＲＯＭ３０内に格納し、有効ＵＲＡＭについては、更新の必要があるので、ＵＲＡＭ５０内に格納するようにしても良い。
【図面の簡単な説明】
【００４２】
【図１】本発明にかかるマイクロコンピュータの構成例ブロック図である。
【図２】上記マイクロコンピュータに含まれるＵＲＡＭにおける記憶情報の説明図である。
【図３】上記マイクロコンピュータでのタスク実行の際に参照されるタスク変数テーブルの構成例説明図である。
【図４】上記マイクロコンピュータに含まれるアドレス変換回路の構成例ブロック図である。
【図５】上記マイクロコンピュータにおける主要動作のフローチャートである。
【図６】上記マイクロコンピュータにおける主要動作のフローチャートである。
【図７】上記マイクロコンピュータにおける主要動作のフローチャートである。
【図８】上記マイクロコンピュータにおける主要動作のフローチャートである。
【符号の説明】
【００４３】
１０、２０  ＣＰＵ
３０  ＲＯＭ
４０  Ｉ/Ｏポート
５０，６０  ＵＲＡＭ
７０、８０  ＣＰＵバス
９０  システムバス
１００，１１０  ＢＳＣ
１３０  ＤＭＡＣ
１６０  ＡＤＴ
２００  タスク変数テーブル
【図１】
2009199414.tif 000003
【図２】
2009199414.tif 000004
【図３】
2009199414.tif 000005
【図４】
2009199414.tif 000006
【図５】
2009199414.tif 000007
【図６】
2009199414.tif 000008
【図７】
2009199414.tif 000009
【図８】
2009199414.tif 000010