(57)【要約】【課題】標準ＯＳによりプロセッサ間の接続制御を行えるようにしたマルチプロセッサシステムの実現。【解決手段】割込み機能を有するマスタプロセッサ31Aと、割込み機能を有する少なくとも１個のスレーブプロセッサ31B-31Cと、共有メモリ35と、共有バス34と、を備えるマルチプロセッサシステムであって、マスタ及びスレーブが処理を実行するためのプログラムは共有メモリに記憶されており、マスタは、ＯＳを実行し、スレーブで実行するスレッド処理を関数の形でスレーブに送信し、スレーブはスレッド処理プログラムを共有メモリからロードして実行して終了を通知し、プロセッサ間接続回路32と、バス調停回路33と、を更に備え、スレーブでのスレッド送信通知及びマスタでのスレッド処理終了通知は、割込み機能を利用して行われる。【選択図】図２
2007219816.tif 000002
【特許請求の範囲】
【請求項１】
割込み機能を有するマスタプロセッサと、
割込み機能を有する少なくとも１個のスレーブプロセッサと、
共有メモリと、
前記マスタプロセッサ及び前記少なくとも１個のスレーブプロセッサが、前記共有メモリにアクセスするための共有バスと、を備えるマルチプロセッサシステムであって、
前記マスタプロセッサ及び前記少なくとも１個のスレーブプロセッサが処理を実行するためのプログラムは、前記共有メモリに記憶されており、
当該マルチプロセッサシステムのオペレーティングシステム処理は、前記マスタプロセッサにより実行され、
前記マスタプロセッサは、前記少なくとも１個のスレーブプロセッサで実行するスレッド処理プログラムを示すスレッド処理関数を生成して、前記スレッド処理関数を実行するための起動要求を前記少なくとも１個のスレーブプロセッサのいずれかに送信し、
前記少なくとも１個のスレーブプロセッサは、前記起動要求を受信すると、前記共有メモリに記憶された前記スレッド処理プログラムをロードして処理を行い、前記マスタプロセッサに前記スレッド処理の終了を通知し、
前記マスタプロセッサから前記少なくとも１個のスレーブプロセッサへの前記起動要求の送信、及び前記少なくとも１個のスレーブプロセッサから前記マスタプロセッサへの前記スレッド処理の終了通知を行うプロセッサ間接続回路と、
前記マスタプロセッサ及び前記少なくとも１個のスレーブプロセッサが、前記共有メモリにアクセスする時の調停を行うバス調停回路と、を更に備え、
前記プロセッサ間接続回路から前記少なくとも１個のスレーブプロセッサへの前記起動要求の送信通知は、前記少なくとも１個のスレーブプロセッサの前記割込み機能を利用して行われ、
前記プロセッサ間接続回路から前記マスタプロセッサへの前記スレッド処理の前記終了通知は、前記マスタプロセッサの前記割込み機能を利用して行われることを特徴とするマルチプロセッサシステム。
【請求項２】
前記少なくとも１個のスレーブプロセッサは、前記スレッド処理が終了した後スリープ状態になる請求項１に記載のマルチプロセッサシステム。
【請求項３】
前記マスタプロセッサは、前記起動要求後、前記スレッド処理が終了するまで待ち状態の場合にスリープ状態になる請求項１に記載のマルチプロセッサシステム。
【請求項４】
前記マスタプロセッサと前記少なくとも１個のスレーブプロセッサは、同じ構成を有する請求項１に記載のマルチプロセッサシステム。
【請求項５】
前記マスタプロセッサと前記少なくとも１個のスレーブプロセッサは、異なる構成を有する請求項１に記載のマルチプロセッサシステム。
【請求項６】
前記マスタプロセッサと前記少なくとも１個のスレーブプロセッサは、１チップに設けられている請求項１から５のいずれか１項に記載のマルチプロセッサシステム。
【請求項７】
前記１チップには、前記共有メモリも設けられている請求項６に記載のマルチプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサシステムに関し、特に複数のプロセッサのうちの１個がマスタプロセッサとして、残りのプロセッサがスレーブプロセッサとして動作するマルチプロセッサシステムに関する。
【背景技術】
【０００２】
コンピュータシステムにおいて、複数のプロセッサを設けて並行して処理を進めることにより、処理速度を向上することが従来から行われている。
【０００３】
図１の（Ａ）は、通常のＣＰＵなどで構成される主（マスタ）プロセッサ１１と、マスタプロセッサ１１の制御により動作するコプロセッサ１２Ａ〜１２Ｃと、を有するコプロセッサ方式のマルチプロセッサの概略構成図である。マスタプロセッサ１１のみが主メモリ１３に記憶されたオペレーティングシステム（ＯＳ）の処理を実行し、コプロセッサ１２Ａ〜１２Ｃは浮動小数点演算や入出力処理などのマスタプロセッサ１１で行うのが適当でないそれぞれの特定の処理を実行する。マスタプロセッサ１１は、コプロセッサ１２Ａ〜１２Ｃのいずれかに処理を行わせる時には、コマンド／データ転送バス１４を通じて対応するコプロセッサにその処理の実行を指定するコマンドを送出する。各コプロセッサは、コマンド／データ転送バス１４上に送出されたコマンドを解読して、必要なデータを受信する。図１の（Ａ）では、コプロセッサ１２Ａ〜１２Ｃは、直接主メモリ１３にはアクセスできないが、入出力処理などを行うコプロセッサは、マスタプロセッサと同じバスを介して直接主メモリ１３にアクセスできるように構成されている。
【０００４】
各コプロセッサが行う処理は固定されており、各コプロセッサは特定の処理を高速に実行するように構成されている。例えば、浮動小数点演算を行うコプロセッサは浮動小数点演算処理のみを行い、入出力処理を行うコプロセッサは入出力処理のみを行う。コプロセッサは、処理量は多いが特定の処理を繰り返す処理に使用されるので、処理シーケンスなどはハードウエアで規定されているものが多い。しかし、プログラムを必要とする複雑な処理を実行するコプロセッサが用いられる場合には、各コプロセッサ内に、プログラムメモリを設ける場合もある。この場合、プログラムメモリは、ＲＯＭなどの不揮発性メモリを用いることが多いが、ＳＲＡＭやＤＲＡＭなどの揮発性メモリを用い、システムの立ち上がり時に、ＤＭＡ動作により主メモリ１３からプログラムＰＧをロードする場合もある。主メモリ１３からコプロセッサへのプログラムＰＧのロードは、マスタプロセッサ及びコマンド／データバス１４を介して行う場合もあるが、コプロセッサが直接主メモリ１３に接続されている場合には直接ロードされる。いずれにしろ、システムが立ち上がった後は、コプロセッサのプログラムメモリに記憶されたプログラムが書き換えられることはない。
【０００５】
コマンドで指定された処理が終了したコプロセッサは、マスタプロセッサ１１に処理の終了を報告する。この処理の終了報告は、コマンド／データバス１４を介して行われる場合もあるが、図示のように割込み処理によってマスタプロセッサ１１に処理終了を報告する場合もある。
【０００６】
図１の（Ａ）に示した従来例のように、特定の処理を行うように特化したコプロセッサを組み合わせるのではなく、複数個の同じプロセッサと共有メモリを組み合わせたＳＭＰ(Symmetric Multi-Processor)方式のマルチプロセッサシステムも提案されている。図１の（Ｂ）は、ＳＭＰ方式のマルチプロセッサシステムの概略構成を示す図である。
【０００７】
すべてのプロセッサ２１Ａ〜２１Ｄは、等価な関係にあり、共有メモリ２３に共有バス及びバス調停回路２２を介して接続されている。プロセッサ２１Ａ〜２１Ｄは、それぞれ、共有メモリ２３に配置されるＯＳの下で、あらかじめ各プロセッサでの実行が決められているプログラムＰＧ０〜ＰＧ３を実行する。各プロセッサでのＯＳ、プログラム実行時に生じる共有メモリ２３へのアクセスの競合は、共有バス及びバス調停回路２２により調停され、プロセッサ間の同期や交信は共有メモリ２３内のＯＳ領域の一部またはあらかじめ定められた共有領域を通じて行う。また、個々のプロセッサでの割込み機能は、それぞれに所属する入出力機器などの制御に用いられる。従って、個々のプロセッサのプログラム起動は、入出力機器からの割込み、及び共有メモリ２３内のＯＳ領域の一部またはあらかじめ定められた共有領域でのセマフォにより行われる。
【０００８】
なお、図１の（Ｂ）の構成で、各プロセッサが実行するプログラムを固定せずに、付加状況に応じて動的にタスクを割当てる場合もある。更に、図１の（Ｂ）のマルチプロセッサ構成に、図１の（Ａ）のコプロセッサ方式の構成を加えた構成も可能である。
【０００９】
本発明は、各プロセッサの実行する処理内容が固定されない、図１の（Ｂ）に示すような構成を対象とする。
【００１０】
【特許文献１】米国特許第５００３４６６号
【特許文献２】米国特許第５３６１３６２号
【発明の開示】
【発明が解決しようとする課題】
【００１１】
従来のマルチプロセッサシステムでは、複数のプロセッサへの処理（スレッド（小プログラム））の割当てにはオペレーティングシステム（ＯＳ）が強く関与している。通常のコンピュータシステムで広く使用される標準ＯＳは、マルチプロセッサシステムには対応していない非マルチ対応である。そのため、図１の（Ｂ）に示した従来のマルチプロセッサシステムでは、マルチ専用のＯＳを使用する必要があった。しかし、マルチ専用ＯＳは、複雑で大規模であるため、民生用携帯情報機器などに装備するのに適していない。
【００１２】
その上、図１の（Ｂ）の従来のマルチプロセッサシステムでは、すべてのプロセッサがＯＳの処理を実行する必要があるため、メモリ規模も増大すると共に、プログラムが複数のプロセッサに振り分けられて実行されることを想定したプログラミングも必要となり、ソフトウエア生産性が低いという問題があった。
【００１３】
また、マルチ対応ＯＳは標準ＯＳとは互換性がないため、標準ＯＳ用の既存のソフトウエアが使用できないといった問題もあった。
【００１４】
本発明は、上記問題点に鑑みてなされたものであり、民生用携帯情報機器に向けて、現在広く普及している簡易な標準ＯＳによりプロセッサ間の接続制御を行えるようにしたマルチプロセッサシステムの実現を目的とする。
【課題を解決するための手段】
【００１５】
本発明のマルチプロセッサシステムは、図１の（Ｂ）に示したような複数のプロセッサが共有メモリにアクセスし、各プロセッサは共有メモリに格納されたＯＳ及びプログラムをロードして動作を行い、プロセッサの処理内容が固定されないマルチプロセッサシステムである。そして、本発明のマルチプロセッサシステムは、上記目的を実現するため、複数のプロセッサのうちの１つがマスタプロセッサとして動作し、他のプロセッサはスレーブプロセッサとして動作し、マスタプロセッサのみがＯＳの処理を実行し、マスタプロセッサは関数によりスレーブプロセッサへのスレッド処理の割当てを行い、マスタプロセッサとスレーブプロセッサ間の起動要求及び処理終了の通知は各プロセッサの割込み機能を利用して行う。これにより、従来の標準ＯＳがそのまま使用できる。
【００１６】
すなわち、本発明のマルチプロセッサシステムは、割込み機能を有するマスタプロセッサと、割込み機能を有する少なくとも１個のスレーブプロセッサと、共有メモリと、前記マスタプロセッサ及び前記少なくとも１個のスレーブプロセッサが、前記共有メモリにアクセスするための共有バスと、を備えるマルチプロセッサシステムであって、前記マスタプロセッサ及び前記少なくとも１個のスレーブプロセッサが処理を実行するためのプログラムは、前記共有メモリに記憶されており、当該マルチプロセッサシステムのオペレーティングシステム処理は、前記マスタプロセッサにより実行され、前記マスタプロセッサは、前記少なくとも１個のスレーブプロセッサで実行するスレッド処理プログラムを示すデータを含むスレッド処理関数を生成して、前記スレッド処理関数の起動要求を前記少なくとも１個のスレーブプロセッサのいずれかに送信し、前記少なくとも１個のスレーブプロセッサは、前記起動要求を受信すると、前記共有メモリに記憶された前記スレッド処理プログラムをロードして処理を行い、前記マスタプロセッサに前記スレッド処理の終了を通知し、前記マスタプロセッサから前記少なくとも１個のスレーブプロセッサへの前記起動要求の送信、及び前記少なくとも１個のスレーブプロセッサから前記マスタプロセッサへの前記スレッド処理の終了通知を行うプロセッサ間接続回路と、前記マスタプロセッサ及び前記少なくとも１個のスレーブプロセッサが、前記共有メモリにアクセスする時の調停を行うバス調停回路と、を更に備え、前記プロセッサ間接続回路から前記少なくとも１個のスレーブプロセッサへの前記スレッド処理関数の起動要求の送信通知は、前記少なくとも１個のスレーブプロセッサの前記割込み機能を利用して行われ、前記プロセッサ間接続回路から前記マスタプロセッサへの前記スレッド処理の前記終了通知は、前記マスタプロセッサの前記割込み機能を利用して行われることを特徴とする。
【００１７】
本発明によれば、標準ＯＳを使用してマルチプロセッサシステムが構成できるようになる。
【００１８】
少なくとも１個のスレーブプロセッサは、スレッド処理が終了した後、すなわち処理を行わない時にはスリープ状態になることにより、消費電力を低減できる。さらに、マスタプロセッサにおいても、スレーブプロセッサへのスレッド割当て後にスレーブプロセッサでのスレッド処理待ち、すなわち処理を行わない時にはスリープ状態になることにより、消費電力をより低減できる。
【００１９】
各プロセッサの処理内容は固定されず、共有メモリに格納されたＯＳ及びプログラムにより決定されるので、マスタプロセッサと少なくとも１個のスレーブプロセッサは、同じ構成を有することも、異なる構成を有することも可能であるが、実際にシステムを構成する上では、同じ構成を有することが望ましい。
【００２０】
高集積化が進められているので、マスタプロセッサと少なくとも１個のスレーブプロセッサを１チップに設けてマルチコア構成にすることも可能であり、更に共有メモリを同じチップに設けることも可能である。
【発明の効果】
【００２１】
本発明によれば、マルチ機能を有さない標準ＯＳを使用してマルチプロセッサシステムが実現でき、標準ＯＳとの互換性が得られると共に、マスタプロセッサにおける管理ソフトウエアだけで柔軟性の高いスケジューリング機能を実現できるので、ソフトウエア生産性が低下しない。
【発明を実施するための最良の形態】
【００２２】
図２は、本発明の実施例のマルチプロセッサシステムの全体構成を示すブロック図である。図示のように、本システムは、５個のプロセッサ３１Ａ〜３１Ｅと、プロセッサ間接続回路３２と、バス調停回路３３と、共有バス３４と、共有メモリ３５と、を有する。各プロセッサは、個別にキャッシュメモリなどを有しているが、ここでは図示を省略している。上記の構成要素のうち、共有メモリ３５を除く部分は、１個のチップに実装されており、マルチコア方式のチップとなっている。なお、共有メモリ３５を同一チップ内に設けることも可能であり、逆に各プロセッサ３１Ａ〜３１Ｅ、プロセッサ接続回路３２、バス調停回路３３の任意の組合せを複数のチップに実装することも可能である。
【００２３】
プロセッサ３１Ａ〜３１Ｅは、すべて同じ構成で、通常のマイクロプロセッサと同様の構成を有しており、共有バス３４を介して共有メモリ３５と接続するバス（アドレスバス及びデータバス）０〜４と、これらのバスが共有バス３４の占有権を獲得するための信号であるバス制御０〜４（ｂｒｅｑ０〜４，ｂａｃｋ０〜４）と、割込み信号（ｉｒｅｑ０〜４，ｉａｃｋ０〜４）と、周辺機器などとの接続バス（ｉｂｕｓ０〜４）と、を有する。
【００２４】
プロセッサ３１Ａ〜３１Ｅのうちの１個（ここではプロセッサ３１Ａ）が、マスタプロセッサとして動作し、他のプロセッサ（ここではプロセッサ３１Ｂ〜３１Ｅ）はスレーブプロセッサとして動作する。マスタプロセッサ３１Ａは、プロセッサ間接続回路３２を介して、スレーブプロセッサ群３１Ｂ〜３１Ｅへのスレッド（小プログラム）処理の起動を行う。スレーブプロセッサ群３１Ｂ〜３１Ｅは、スレッド処理が終了すると、プロセッサ間接続回路３２を介して、マスタプロセッサ３１Ａに対して該当スレッドの終了通知を行う。この間、プロセッサ３１Ａ〜３１Ｅのうち動作中のものは、バス調停回路３３の調停に基づいて、共有バス３４を介して共有メモリ３５へのアクセスを行う。同時に複数のスレーブプロセッサに対してスレッド処理を割当てることができるが、説明を簡単にするために、以下スレーブプロセッサ３１Ｂに対してスレッド処理が割当てられるとして説明する。
【００２５】
マスタプロセッサ３１Ａは、接続バスｉｂｕｓ０を介して所望のデータをプロセッサ間接続回路３２に送出し、プロセッサ間接続回路３２はこのデータを割込み信号ｉｒｅｑ１〜４（ここではｉｒｅｑ１）に変換して、対応するスレーブプロセッサ３１Ｂに起動をかける。この割込み信号を受信したスレーブプロセッサ３１Ｂは、割込み信号応答信号ｉａｃｋ１により、マスタプロセッサ３１Ａからの起動の受信を、プロセッサ間接続回路３２を介してマスタプロセッサ３１Ａに通知する。次に、スレーブプロセッサ３１Ｂは、割込み処理を開始し、実行すべきスレッド処理に関する情報（プログラム、データ）を共有メモリ３５上の所定のアドレスから読み出し、これを使用して割当てられたスレッド処理を実行する。
【００２６】
次に、スレーブプロセッサ３１Ｂがスレッド処理の実行を終了した場合、スレーブプロセッサ３１Ｂは、接続バスｉｂｕｓ１を介して一定のデータをプロセッサ間接続回路３２に送出し、プロセッサ間接続回路３２はこのデータを割込み信号ｉｒｅｑ０に変換して、マスタプロセッサ３１Ａに割込みをかける。この割込み信号を受信したマスタプロセッサ３１Ａは、割込み（受信応答）信号ｉａｃｋ０により、マスタプロセッサ３１Ａにおける終了受信をプロセッサ間接続回路３２を介してスレーブプロセッサ３１Ｂに通知する。次に、マスタプロセッサ３１Ａは、終了処理、例えば、次のスレッド処理の起動などを行う。ここではスレーブプロセッサ３１Ｂにスレッド処理を割当てる場合を例として説明したが、他のスレーブプロセッサ３１Ｃ〜３１Ｅにスレッド処理を割当てる場合も、それぞれのスレーブプロセッサが有する接続バスｉｂｕｓ２〜４を使用して同様の処理を行う。
【００２７】
この間、マスタプロセッサ３１Ａ及びスレーブプロセッサ３１Ｂ〜３１Ｅは、待機中のものを除いて、バス制御信号０〜４（ｂｒｅｑ０〜４，ｂａｃｋ０〜４）により、バス調停回路３４を介して、共有バス占有権の調停を受けて、バス０〜４を通じて共有バス３４に接続され、共有メモリ３５を必要に応じて順次アクセスする。
【００２８】
図３は、実施例におけるマスタプロセッサ３１Ａの構成を示す図である。図示のように、マスタプロセッサ３１Ａは、演算ユニット４１と、アドレス変換ユニット４２と、キャッシュメモリ４３と、メモリ・インターフェース４４と、以上の構成要素を制御する制御ユニット４５と、を有する。制御ユニット４５の制御に基づき、演算ユニット４１内にあるプログラムカウンタにより実行すべき命令語のアドレスがアドレス変換ユニット４２に送出されて物理アドレスに変換される。この物理アドレスに対応する命令語がキャッシュメモリ４３内にあれば、命令語はそこから読み出され、演算ユニット４１のデータポート及び命令ポートを経由して、制御ユニット４５内の命令レジスタに記憶される。この命令レジスタの内容に応じて、制御ユニット４５は、演算ユニット４１などの構成要素を制御する。この過程で、キャッシュメモリに該当する命令語が存在しない場合には、メモリ・インターフェース４４を介して、アドレスバスにより共有メモリ３５をアクセスし、データバスを通じてこの命令語を含む部分をキャッシュメモリ４３にロードする。この場合、バス制御０信号により、共有メモリ３５に接続された共有バス３４のバス占有権を確保した上でロードを行う。
【００２９】
また、演算ユニット４１からの周辺バスｉｂｕｓ０は、スレーブプロセッサ３１Ｂ〜３１Ｅの起動及び割当てたスレッドの終了のためのデータ設定に使用される。
【００３０】
また、マスタプロセッサ３１Ａにおける割込み端子は、割込み信号０、割込み信号Ｎという具合に、複数の外部機器からの割込みを受け付けられるように複数存在するが、ここで示した割込み信号０は、スレーブプロセッサ３１Ｂ〜３１Ｅからのスレッド処理の終了報告を受けるために使用される。他の割込み信号Ｎは、例えば、図１の（Ａ）に示したような接続されるコプロセッサ用に使用することが可能である。
【００３１】
図４は、実施例におけるスレーブプロセッサ（Ｂ）３１Ｂの構成を示す図であり、他のスレーブプロセッサ３１Ｃ〜３１Ｅも同様の構成を有し、その構成は図３に示したマスタプロセッサ３１Ａの構成とも同じである。
【００３２】
図示のように、スレーブプロセッサ３１Ｂは、演算ユニット５１と、アドレス変換ユニット５２と、キャッシュメモリ５３と、メモリ・インターフェース５４と、以上の構成要素を制御する制御ユニット５５と、を有する。制御ユニット５５の制御に基づき、演算ユニット５１内にあるプログラムカウンタにより実行すべき命令語のアドレスがアドレス変換ユニット５２に送出されて物理アドレスに変換される。この物理アドレスに対応する命令語がキャッシュメモリ５３内にあれば、命令語はそこから読み出され、演算ユニット５１のデータポート及び命令ポートを経由して、制御ユニット５５内の命令レジスタに記憶される。この命令レジスタの内容に応じて、制御ユニット５５は、演算ユニット５１などの構成要素を制御する。この過程で、キャッシュメモリに該当する命令語が存在しない場合には、メモリ・インターフェース５４を介して、アドレスバスにより共有メモリ３５をアクセスし、データバスを通じてこの命令語を含む部分をキャッシュメモリ５３にロードする。この場合、バス制御１信号により、共有メモリ３５に接続された共有バス３４のバス占有権を確保した上でロードを行う。
【００３３】
また、演算ユニット５１からの周辺バスｉｂｕｓ１は、マスタプロセッサ３１Ａへのスレッドの終了通知のために割込みを発生するデータ設定に使用される。
【００３４】
また、スレーブプロセッサ３１Ｂにおける割込み端子は、外部機器からの割込みを受け付ける必要がなく、マスタプロセッサ３１Ａからのスレッド処理の起動を受けるために割込み信号１だけが使用される。さらに、スレーブプロセッサ３１Ｂで実行されるスレッド処理が物理アドレス空間に限定されるようにすれば、アドレス変換ユニット４２は不要となる。
【００３５】
図５は実施例におけるプロセッサ間接続回路３２の構成図であり、図６はプロセッサ間接続回路３２を構成するマスタ割込み回路６１の構成図であり、図７はマスタ割込み回路６１を構成する起動処理回路６３の構成図であり、図８はマスタ割込み回路６１を構成する終了処理回路６４の構成図であり、図９はプロセッサ間接続回路３２を構成するスレーブ割込み回路６２の構成図である。図５から図９を参照してプロセッサ間接続回路３２を説明する。
【００３６】
図５に示すように、プロセッサ間接続回路３２は、マスタプロセッサ３１Ａに接続されるマスタ割込み回路６１と、スレーブプロセッサ３１Ｂ〜３１Ｅにそれぞれ接続されるスレーブ割込み回路６２Ｂ〜６２Ｅと、を有する。この構成では、プロセッサ間の接続のための信号線は、プロセッサ当たり４本で済むので、配線数の増加は少ない。
【００３７】
それぞれの回路の動作を、マスタプロセッサによるスレーブプロセッサへのスレッド処理の起動時と、スレーブプロセッサからマスタプロセッサへのスレッド処理の終了時に分けて説明する。スレッド処理の起動・終了は、４個のスレーブプロセッサのうちの複数のスレーブプロセッサに対して可能であるが、ここでは説明を簡単にするために、スレーブプロセッサ３１Ｂにスレッド処理が割当てられるとして説明する。
【００３８】
まず、スレッド起動時の動作を説明する。マスタプロセッサ３１Ａは、周辺バスｉｂｕｓ０を介して所望のデータ（スレーブプロセッサ３１Ｂにスレッド処理が割当てるデータ）をマスタ割込み回路３４に送出する。これに応じて、マスタ割込み回路３４は、起動割込み信号ｉｒｅｑ１をスレーブプロセッサ３１Ｂへ送出する。スレーブプロセッサ３１Ｂは、この起動割込み信号ｉｒｅｑ１を受信すると割込み処理を開始し、起動割込み信号ｉｒｅｑ１の受付をマスタプロセッサ３１Ａに通知するための信号ｉａｃｋ１がマスタ割込み回路６１に送出される。マスタプロセッサ３１Ａは、マスタ割込み回路６１における信号ｉａｃｋ１の受付をｉｂｕｓ０を介して読み込むことにより、スレーブプロセッサ３１Ｂにおけるスレッド処理の起動が受け付けられたことを確認する。
【００３９】
一方、スレーブプロセッサ３１Ｂは、信号ｉａｃｋ１をマスタ割込み回路６１に送出した後、共有メモリ３５の所定のアドレスから実行すべきスレッド処理に必要な情報（プログラム及びデータ）を読み出して、キャッシュメモリ５３にロードする。もし、すでにキャッシュメモリ５３に必要な情報がロードされていれば（例えば、前回使用したのと同じ場合）、この動作は不要である。そして、ロードした情報に基づいてスレッド処理を実行する。実行中に更にプログラムやデータが必要になれば適宜共有メモリ３５にアクセスして入手し、処理結果はキャッシュメモリ５３に記憶し、処理が終了した時や途中で出力する必要が生じた時には、適宜共有メモリ３５にアクセスして出力する。
【００４０】
次に、スレッド処理の終了時の動作を説明する。スレーブプロセッサ３１Ｂは、割当てられたスレッド処理が終了すると、周辺バスｉｂｕｓ１を介してマスタプロセッサ３１Ａに割込みを発生するための一定のデータをスレーブ割込み回路６２Ｂに送出する。スレーブ割込み回路６２Ｂは、このデータに応じて、マスタ割込み回路６１への終了割込み信号ｉｒｅｑ１を送出する。マスタ割込み回路６１は、この終了割込み信号ｉｒｅｑ１を受けると、マスタプロセッサ３１Ａに対して割込み信号ｉｒｅｑ０を送出する。マスタプロセッサ３１Ａは、割込み信号ｉｒｅｑ０に応じて割込み処理を開始し、バスｉｂｕｓ０を介してマスタ割込み回路６１のレジスタを確認して、スレーブプロセッサ３１Ｂのスレッド処理が終了したことを知る。そして、マスタプロセッサ３１Ａは、割込み受信信号ｉａｃｋ０をマスタ割込み回路６１に送出する。マスタ割込み回路６１は、これに応じて対応するスレーブ割込み回路６２Ｂに信号ｉａｃｋ１を送出する。スレーブプロセッサ３１Ｂは、ｉｂｕｓ１を介してこれを読み込むことにより、マスタプロセッサ３１Ａへのスレッド処理の終了の通知が成功したことを知る。一方、マスタプロセッサ３１Ａは、割込み受信信号ｉａｃｋ０の送出を行ったあと、スレッド終了のための処理を開始する。
【００４１】
図６に示すように、マスタ割込み回路６１は、図７に示す起動処理回路６３と、図８に示す終了処理回路６４とで構成される。
【００４２】
図７に示すように、起動処理回路６３は、起動要求レジスタ６５と、起動完了レジスタ６６とで構成される。これらのレジスタは８ビット構成で、スレーブプロセッサが４個のため、そのうちの下位４ビットを使用するが、スレーブプロセッサの個数に応じて使用するビット数をｉｂｕｓ０のビット幅まで増加させることが可能であり、更に増加させる必要である場合には、複数のレジスタを配置することも可能である。従って、本実施例では、マスタプロセッサが１個、スレーブプロセッサが４個の構成となっているが、例えばスレーブプロセッサを２５５個以上も受ける構成も可能である。
【００４３】
図７の起動処理回路６３においては、マスタプロセッサ３１Ａが、バスｉｂｕｓ０を介して起動すべきスレーブプロセッサ（３１Ｂ〜３１Ｅのいずれか）に対応するビット位置に”１”を立てた所望のデータを起動要求レジスタ６５に書込む。例えば、スレーブプロセッサ３１Ｂのみを起動する場合には、８ビットデータとして”０００００００１”を書き込み、すべてのスレーブプロセッサを起動する場合には、８ビットデータとして”００００１１１１”を書込む。上位４ビットは、対応するスレーブプロセッサが存在しないため”００００”としてある。
【００４４】
上記のような書き込み動作により、スレーブプロセッサ３１Ｂのみが起動する場合、起動割込み信号のうち、対応する信号ｉｒｅｑ１のみが”１”となり、スレーブプロセッサ３１Ｂに割込み信号として送出される。スレーブプロセッサ３１Ｂは、信号ｉｒｅｑ１を受け取ると起動処理を開始すると共に、起動要求に対する返答信号ｉａｃｋ１を送出する。この返答信号ｉａｃｋ１は、起動完了レジスタ６６に読み込まれ、これをマスタプロセッサ３１Ａがｉｂｕｓ０を介して読み込み、このレジスタの内容が”０００００００１”であることから、スレーブプロセッサ３１Ｂへの起動が成功したことを知る。
【００４５】
なお、起動要求レジスタ６５の内容は、マスタプロセッサ３１Ａの割込みインターフェース規定を守る必要があるので、適当なタイミングでリセットされる。
【００４６】
図８に示すように、終了処理回路６４は、終了報告レジスタ６７と、終了完了レジスタ６８とで構成される。これらのレジスタは８ビット構成で、そのうちの下位４ビットを使用するが、起動処理回路と同様に、任意のビット幅を使用することが可能である。
【００４７】
図８の終了処理回路６４においては、スレーブプロセッサ３１Ｂ〜３１Ｅに付属するスレーブ割込み回路６２Ｂ〜６２Ｅが、スレッド処理の終了を知らせる信号ｉｒｑ１〜４を終了報告レジスタ６７に送出する。この信号ｉｒｑ１〜４はさらにＯＲ回路６９に入力され、それに応じてマスタプロセッサ３１Ａに割込み信号ｉｒｅｑ０が送出される。この割込みにより、マスタプロセッサ３１Ａは、割込み動作に入り、ｉｂｕｓ０を介して終了報告レジスタ６７の内容を読み込む。例えば、スレーブプロセッサ３１Ｂのみが終了を通知している場合には、８ビットデータとして”０００００００１”が読み込まれ、すべてのスレーブプロセッサが終了を通知している場合には、８ビットデータとして”００００１１１１”が読み込まれる。上位４ビットは、対応するスレーブプロセッサが存在しないため”００００”としてある。
【００４８】
スレーブプロセッサ３１Ｂのみの終了通知の場合、上記のような読み込み動作により、終了割込み信号のうち、対応する信号ｉｒｑ１のみが”１”となり、マスタプロセッサ３１Ａに割込み信号として送出される。マスタプロセッサ３１Ａは、信号ｉｒｅｑ０を受け取ると終了処理を開始すると共に、割込みに対する返答信号ｉａｃｋ０を送出し、終了完了レジスタ６８にｉｂｕｓ０を介して”０００００００１”を書込む。終了完了レジスタ６８の出力とＡＮＤ回路７０Ｂ〜７０Ｅにより、対応するスレーブプロセッサ３１Ｂ〜３１Ｅにｉｒｑ１に対する返答信号ｉａｋ１を送出する。これにより、スレーブプロセッサ３１Ｂは、スレッド終了通知がマスタプロセッサ３１Ａに正しく受信されたことを知る。
【００４９】
なお、終了要求レジスタ６７の内容は、マスタプロセッサ３１Ａの割込みインターフェース規定を守る必要があるので、適当なタイミングでリセットされる。
【００５０】
図９に示すように、スレーブ割込み回路６２は、終了報告レジスタ７１と、受付完了レジスタ７２と、から構成される。これらのレジスタは、８ビット構成で、その下位１ビットを使用する例を示している。
【００５１】
スレーブプロセッサ３１Ｂ〜３１Ｅは、スレッド処理が終了すると、終了をマスタプロセッサ３１Ａに通知して、マスタプロセッサ３１Ａが終了処理に入る必要がある。スレーブプロセッサ３１Ｂ〜３１Ｅは、独立に同様の動作が行われるので、以下においては、スレーブプロセッサ３１Ｂから終了通知を行う場合について説明する。
【００５２】
まず、スレーブプロセッサ３１Ｂは、ｉｂｕｓ１を介して終了報告レジスタ７１に”０００００００１”を書込む。これにより、終了割込み信号ｉｒｑ１がマスタ割込み回路６１に送出される。その後のマスタ割込み回路６１及びマスタプロセッサ３１Ａの動作についてはすでに説明したので、ここでは省略する。終了報告がマスタプロセッサ３１Ａで受け付けられると、マスタ割込み回路６１を介して受付返答信号ｉａｋ１がスレーブ割込み回路６２に送出され、スレーブ割込み回路６２はこの信号を受付完了レジスタ７２の最下位ビットに”１”を設定する。
【００５３】
スレーブプロセッサ３１Ｂは、ｉｂｕｓ１を通じて受付完了レジスタ７２を読み込み、その内容が”０００００００１”であれば、終了通知信号ｉｒｑ１に対する返答信号ｉａｋ１が返信されたかを知る。これにより、スレーブプロセッサ３１Ｂは、スレッド終了通知が正しくマスタプロセッサ３１Ａに受信されたことを知る。
【００５４】
以上のように、マスタプロセッサ３１Ａとスレーブプロセッサ３１Ｂ〜３１Ｅは、前記した構成を有していれば、これにプロセッサ間接続回路を付加することにより所望のマルチプロセッサ機能を果たすことができる。したがって、マスタプロセッサ３１Ａとスレーブプロセッサ３１Ｂ〜３１Ｅ、さらにスレーブプロセッサ３１Ｂ〜３１Ｅそれぞれの命令体系が異なる場合においても同様に動作させることができる効果を有する。
以上で、プロセッサ間接続回路３２の説明を終了する。次に、バス調停回路３３を説明する。
【００５５】
図１０の（Ａ）は、実施例のバス調停回路３３の構成を示す図である。この回路は、マスタプロセッサ３１Ａ及び４個のスレーブプロセッサ３１Ｂ〜３１Ｅからのバス制御０〜４の信号の間のバス占有権を調停する。
【００５６】
このバス調停回路３３は、ラウンドロビン方式と呼ばれる調停方式に基づいて調停を行うが、これに限定されるものではない。バス調停回路３３は、共有バス３４の占有を要求する信号ｂｒｅｑ０〜４を常時受け付けるため、クロック信号ｃｌｋ０によりトリガーされる５個のフリップフロップ（ＦＦ００−４０）８１Ａ〜８１Ｅと、バス占有権の優先度を示す５個のフリップフロップ（ＦＦ０１−４１）８２Ａ〜８２Ｅと、ＦＦ８１Ａ〜８１ＥとＦＦ８２Ａ〜８２Ｅの対応する２個のＦＦの組の出力が”１”の場合に占有権を与えるための５個のＡＮＤ回路８３Ａ〜８３Ｅから構成される。なお、１０個のフリップフロップ（ＦＦｉｊ）の入出力端子について、ＦＦ８２Ａ〜８２Ｅの図示したＳ及びＲ端子以外の端子を図１０（Ｂ）に示す。
【００５７】
実施例のマルチプロセッサシステムが電源投入により立ち上がる時に、ｒｅｓｅｔ信号が、ＦＦ８２Ａに”１”をセットするためにＳ（セット）端子に入力し、ＦＦ８２Ｂ〜８２Ｅに”０”をセットするためにＲ（リセット）端子に入力する。これにより、マルチプロセッサシステムの立ち上がり直後は、マスタプロセッサ３１Ａが最優先のバス占有権を有することになる。この状態で、マスタプロセッサ３１Ａからバス要求信号ｂｒｅｑ０が送出されると、ＦＦ８１Ａの出力が”１”となり、すでにＦＦ８２Ａの出力も”１”になっているため、ＡＮＤ回路８３Ａによりバス占有許可信号ｂａｃｋ０は”１”となり、マスタプロセッサ３１Ａが共有バス３４を占有する。マスタプロセッサ３１Ａによる共有バス３４の占有は、図３の制御ユニット４５からメモリ・インターフェース４４に送出されるバス駆動信号によって、バス０（アドレスバス、データバス）がアクティブになることによって行われる。
【００５８】
この間、スレーブプロセッサ３１Ｂ〜３１Ｅからのバス要求信号があり、ＦＦ８１Ｂ〜８１Ｅの出力が”１”であっても、ＦＦ８２Ｂ〜８２Ｅの出力は”０”であるので、ＡＮＤ回路８３Ｂ〜８３Ｅによりバス占有許可信号ｂａｃｋ１〜４は”０”となっており、スレーブプロセッサ３１Ｂ〜３１Ｅではバス１〜４はアクティブとはならないので、スレーブプロセッサ３１Ｂ〜３１Ｅは共有バス３４からは切り離されている。
【００５９】
マスタプロセッサ３１Ａのバス占有が終了すると、クロックｃｌｋｍにより、ＦＦ８２Ａ〜８２Ｅがトリガーされ、ＦＦ８２Ａの出力がＦＦ８２Ｂの入力に、以下前段のＦＦの出力が後段のＦＦの入力に、そしてＦＦ８２Ｅの出力がＦＦ８２Ａの入力に接続されているので、ＦＦ８２Ｂの出力が”１”に、ＦＦ８２Ａの出力が”０”となり、バス占有の優先権はＦＦ８２Ｂ、すなわちスレーブプロセッサ３１Ｂに移る。このようにして、共有バス３４を占有するたびに優先権を隣接する未占有のプロセッサに移していくことにより、プロセッサ間で均等な共有バスの占有が行える。
【００６０】
なお、図示していないが、バス占有権を有するプロセッサに隣接するプロセッサが共有バスの占有を要求していない場合には、さらにそのプロセッサに隣接するプロセッサへと占有権を移すという方法をとることもある。また、ＦＩＦＯ(First In First Out)を使用してバス占有を要求した順に優先権を割当てる方法や、マスタプロセッサが優先権を管理する方法などの各種の変形例も可能である。
【００６１】
図１１は、本実施例のマルチプロセッサにおけるソフトウエア動作を、各部へのアクセスに関連させて説明する図である。
【００６２】
まず、応用プログラムにおけるメインプログラムをマスタプロセッサ３１Ａで実行中に、スレーブプロセッサ３１Ｂ〜３１Ｅのいずれかにスレッド処理を要求する場合、（１）関数コールによりこれを実行する。関数コールが発生すると、（２）制御がＯＳ（オペレーティングシステム）に渡され、（３）関数処理と共にスレーブプロセッサの空き状態などを管理するマスタ管理プログラムに制御が移る。その後、スレーブプロセッサ３１Ｂ〜３１Ｅのいずれかが選択され、（４）プロセッサ間接続回路３２により、例えばスレーブプロセッサ３１Ｂが起動される。この時点で、マスタプロセッサ３１Ａは応用プログラムのメインプログラムの続行が可能となる。
【００６３】
スレーブプロセッサ３１Ｂは、スレーブ管理プログラムを実行し、（５）スレッド起動情報の読み込み、（６）読み込んだ起動情報により対応するスレッド＃ｎの実行を行う。
【００６４】
次に、スレッド＃ｎの終了の際に、実行結果のデータを共有メモリ３５のスレッドごとに割当ててある所定の場所に書き込み、これが終了すると、（７）スレーブ管理プログラムに戻り、（８）このプログラムの実行によりプロセッサ間接続回路を通じて、マスタ管理プログラムに制御が渡される。マスタ管理プログラムは、終了したスレーブプロセッサ３１Ｂを解放する手続きを行う。スレーブプロセッサ３１Ｂにおけるスレッド実行結果は、メインプログラム中で指定される時期に、共有メモリ３５中の前記所定の場所から読み出し、これを利用する。複数のスレッド処理が実行された場合、すべてのスレッド処理が終了した後に、それぞれのスレッド処理の実行結果を読み出し、処理する場合もある。
【００６５】
図１２は、実施例のマルチプロセッサシステムにおける、マスタプロセッサ３１Ａからスレーブプロセッサ３１Ｂ、３１Ｃへのスレッド処理の割当てを説明する図である。ここでは、スレーブプロセッサ３１Ｂ、３１Ｃが空き状態にあり、スレーブプロセッサ３１Ｄ、３１Ｅがすでに他のスレッド処理を実行しているとする。
【００６６】
図１２の（Ａ）は、Ｃ言語でプログラムされた１つのアプリケーションタスク（プログラムＡ）と、そのプログラム中の複数のスレッド処理１〜４をスレーブプロセッサ３１Ｂ〜３１Ｅに割当てる様子を示している。また、図１２の（Ｂ）は、図１１に示したマスタ管理ソフトウエアによるスレーブプロセッサ管理の様子をスレーブ管理テーブルにより示したものである。
【００６７】
マスタプロセッサ３１Ａが、プログラム中の関数thread create()を実行する場合、関数処理のため、まずＯＳにリンクし、関数thread create()の実行過程で、マスタ管理ソフトウエアの管理下にあるスレーブ管理テーブルを用いて、スレーブプロセッサ３１Ｂ〜３１Ｅへのスレッド処理の割当てを以下のように行う。スレーブ管理テーブルは、”０”の時に空き状態を、”１”の時に動作中を示すとする。スレーブ管理テーブルは、マルチプロセッサシステムの立ち上がり時に該当するメモリ番地に、”０”を書込むことにより初期化される。
【００６８】
（１）スレーブ管理テーブルの初期状態
初期状態は、スレーブプロセッサ３１Ｂ、３１Ｃが共に空き状態で、スレーブプロセッサ３１Ｄ、３１Ｅは他のスレッド処理をすでに実行中であるとする。空き状態が”０”の時には、タスク番号、スレッド番号は無意味であるため、テーブル中には”−”が示されている。
【００６９】
（２）スレッド１の割当て
スレーブプロセッサ３１Ｂ、３１Ｄが空き状態であることがわかると、マスタ管理ソフトウエアは、スレーブプロセッサ３１Ｂを確保し、空き状態を示す該当メモリ番地に”１”を書込む。さらに、割当てるスレッド１のタスク番号（仮に”５”）、そのスレッド番号”１”を該当メモリ番地に書き込み、スレーブプロセッサ３１Ｂに前述したように起動割込みをかける。これにより、スレーブ管理テーブルは図１２の（Ｂ）のように変化する。
【００７０】
（３）スレッド２の割当て
（２）と同様に、スレーブプロセッサ３１Ｃにスレッド２を割当てるため、空き状態に”１”、タスク番号に”５”、スレッド番号に”２”を書き込み、スレーブプロセッサ３１Ｃに起動割込みをかける。以後、スレーブプロセッサには空きがないため、マスタプロセッサ３１Ａは、スレッド番号３以上のスレッド処理は、動作中のスレーブプロセッサ３１Ｂ〜３１Ｅのいずれかが実行中のスレッド処理を終了するまで待ち状態となる。これにより、スレーブ管理テーブルは図１２の（Ｂ）のように変化する。この状態で、マスタプロセッサ３１Ａで他の処理を必要としない場合に、マスタプロセッサ３１Ａをスリープ状態とすることが可能となる。
【００７１】
（４）スレッド終了処理
スレーブプロセッサのいずれかでスレッド処理が終了すると、スレーブプロセッサは、スレッド終了割込みを発生させる共にスリープ状態になる。スレーブプロセッサからのスレッド終了割込みにより、マスタプロセッサ３１Ａはスレーブ管理テーブルの対応するプロセッサの空き状態部分に”０”を書き込み、待機しているスレッド処理（ここではスレッド３）があれば、（２）又は（３）と同様にして、待ち状態にあったスレッド３を割当てる。
【００７２】
以上説明したように、本発明のマルチプロセッサシステムは、標準のプロセッサ、及び標準のＯＳを使用して、マルチプロセッサシステムが容易に構成でき、処理速度を向上させることができる。
【００７３】
以上、本実施例のマルチプロセッサシステムを説明したが、各種の変形例があり得るのはいうまでもない。
【産業上の利用可能性】
【００７４】
本発明は、マルチプロセッサシステムに適用可能であり、特に１チップに複数のプロセッサを搭載したマルチコア型チップを使用した小型機器への応用に適している。
【図面の簡単な説明】
【００７５】
【図１】マルチプロセッサシステムの従来例の概略構成を示す図である。
【図２】本発明の実施例のマルチプロセッサシステムの全体構成を示す図である。
【図３】実施例のマルチプロセッサシステムにおけるマスタプロセッサの構成を示す図である。
【図４】実施例のマルチプロセッサシステムにおけるスレーブプロセッサの構成を示す図である。
【図５】実施例のマルチプロセッサシステムにおけるプロセッサ間接続回路の構成を示す図である。
【図６】実施例のマルチプロセッサシステムのプロセッサ間接続回路におけるマスタ割込み回路の構成を示す図である。
【図７】実施例のマスタ割込み回路における起動処理回路の構成を示す図である。
【図８】実施例のマスタ割込み回路における終了処理回路の構成を示す図である。
【図９】実施例のマルチプロセッサシステムのプロセッサ間接続回路におけるスレーブ割込み回路の構成を示す図である。
【図１０】実施例のマルチプロセッサシステムのバス調停回路の構成を示す図である。
【図１１】実施例のマルチプロセッサシステムにおけるメモリアクセスと関連させたソフトウエア動作を説明する図である。
【図１２】実施例のマルチプロセッサシステムにおけるスレッド処理の割当て動作を説明する図である。
【符号の説明】
【００７６】
３１Ａ    マスタプロセッサ
３１Ｂ〜３１Ｅ    スレーブプロセッサ
３２    プロセッサ間接続回路
３３    バス調停回路
３４    共有バス
３５    共有メモリ
【図１】
2007219816.tif 000003
【図２】
2007219816.tif 000004
【図３】
2007219816.tif 000005
【図４】
2007219816.tif 000006
【図５】
2007219816.tif 000007
【図６】
2007219816.tif 000008
【図７】
2007219816.tif 000009
【図８】
2007219816.tif 000010
【図９】
2007219816.tif 000011
【図１０】
2007219816.tif 000012
【図１１】
2007219816.tif 000013
【図１２】
2007219816.tif 000014