(57)【要約】    【課題】  マルチプロセッサ上でシングルプロセッサ向けＯＳと既存のアプリケーションをそれらに改造を加えることなく動作させ、その既存のアプリケーションに対してマルチプロセッサによる並列処理を実現できるようにしたシングルプロセッサ向けＯＳによる並列処理システム上で、アプリケーションに改造を加えることなく、当該アプリケーションによるプロセッサ間におけるデータ転送を可能にするプロセッサ間通信システムを提供する。    【解決手段】  マルチプロセッサ上でシングルプロセッサ向けＯＳ及び既存のアプリケーションを動作させ、アプリケーションに対してマルチプロセッサによる並列処理を実現するシングルプロセッサ向けＯＳによる並列処理システム上で、  各プロセッサに、プロセッサ間にまたがるタスクどうしのデータ転送を代理で行う通信代理手段（３０００Ｐ０〜３０００Ｐｎ）を備え、送信側のタスクが動作するプロセッサ上の通信代理手段が、受信側のタスクのプロセッサ上におけるアドレス情報を保持し、受信側のタスクの代理として送信側のタスクからの転送データを受理する。【選択図】    図１
2005267118.tif 000002
【特許請求の範囲】
【請求項１】
マルチプロセッサ上でシングルプロセッサ向けＯＳ及びアプリケーションを動作させ、
前記マルチプロセッサを論理的に、第１のプロセッサ側と第２のプロセッサ側の二つに分け、
前記第１のプロセッサ側のプロセッサ上で動作する前記アプリケーション内で並列化が可能な処理単位を、前記第２のプロセッサ側のプロセッサ上で新たな処理単位として制御することにより、前記アプリケーションに対して前記マルチプロセッサによる並列処理を行う並列処理システム上で、
前記各プロセッサに、前記プロセッサ間にまたがる処理単位どうしのデータ転送を代理で行う通信代理手段を備えることを特徴とするシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信システム。
【請求項２】
マルチプロセッサ上でシングルプロセッサ向けＯＳ及びアプリケーションを動作させ、
一のプロセッサ上で動作する前記アプリケーション内で並列化が可能な処理単位を、他のプロセッサ上で新たな処理単位として制御することにより、前記アプリケーションに対して前記マルチプロセッサによる並列処理を行う並列処理システム上で、
前記各プロセッサに、前記プロセッサ間にまたがる処理単位どうしのデータ転送を代理で行う通信代理手段を備えることを特徴とするシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信システム。
【請求項３】
マルチプロセッサ上でシングルプロセッサ向けＯＳ及びタスクとしての処理単位を動作させる並列処理システム上で、
前記各プロセッサに、前記プロセッサ間にまたがる処理単位どうしのデータ転送を代理で行う通信代理手段を備えることを特徴とするシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信システム。
【請求項４】
送信側の処理単位が動作するプロセッサ上の前記通信代理手段が、前記受信側の処理単位のプロセッサ上におけるアドレス情報を保持し、前記受信側の処理単位の代理として前記送信側の処理単位からの転送データを受理することを特徴とする請求項１から請求項３の何れか1項に記載のシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信システム。
【請求項５】
受信側の処理単位が動作するプロセッサのアドレス情報と、前記処理単位のプロセッサにおける経路情報を含む処理情報を、他のプロセッサ上の前記通信代理手段にマルチキャストにより転送し、
前記他のプロセッサ上の前記通信代理手段は、前記処理情報を受理することにより、前記受信側の処理単位の代理でデータを受信する状態となることを特徴とする請求項１から請求項４の何れか1項に記載のシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信システム。
【請求項６】
送信側の処理単位が動作するプロセッサ上の前記通信代理手段が、
送信側の処理単位からの要求により、前記シングルプロセッサ向けＯＳから送信されるデータを、前記受信側の処理単位の代理で受信し、
受信したデータを、プロセッサ間で通信を行う所定のデータ転送手段を介して、前記受信側のプロセッサ上の前記通信代理手段に送信し、
前記データを受信した受信側のプロセッサ上の前記通信代理手段が、
受信側のプロセッサ上の前記シングルプロセッサ向けＯＳに対して、前記処理単位へのデータ転送を要求することを特徴とする請求項１から請求項５に記載のシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信システム。
【請求項７】
前記通信代理手段は、
ソケットを用いた通信方式により、プロセッサ間にまたがる処理単位どうしのデータ転送を代理で処理することを特徴とする請求項１から請求項６の何れか1項に記載のシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信システム。
【請求項８】
前記通信代理手段は、
メッセージキュー又はＦＩＦＯを用いた通信方式により、プロセッサ間にまたがる処理単位どうしのデータ転送を代理で処理することを特徴とする請求項１から請求項６の何れか1項に記載のシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信システム。
【請求項９】
受信側の処理単位によるバインド処理関数の呼び出しをフックして、代理で前記シングルプロセッサ向けＯＳに対してバインド処理を要求するＯＳ代理手段を有し、
前記ＯＳ代理手段が、前記受信側の処理単位の経路情報を含むバインド処理情報を、ブロードキャストにより他のプロセッサの前記通信代理手段に通知することを特徴とする請求項７に記載のシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信システム。
【請求項１０】
前記通信代理手段は、自プロセッサ内の処理単位と、自プロセッサ内のみで通信可能なプロセス間通信方式基づいて通信を行うことを特徴とする請求項７から請求項９に記載のシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信システム。
【請求項１１】
自プロセッサ内のみで通信可能な前記プロセス間通信方式が、ＵＮＩＸ(R)ドメインソケットであることを特徴とする請求項１０に記載のシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信システム。
【請求項１２】
マルチプロセッサ上でシングルプロセッサ向けＯＳ及びアプリケーションを動作させ、
前記マルチプロセッサを論理的に、第１のプロセッサ側と第２のプロセッサ側の二つに分け、
前記第１のプロセッサ側のプロセッサ上で動作する前記アプリケーション内で並列化が可能な処理単位を、前記第２のプロセッサ側のプロセッサ上で新たな処理単位として制御することにより、前記アプリケーションに対して前記マルチプロセッサによる並列処理を行う並列処理システム上で、
前記各プロセッサに、前記プロセッサ間にまたがる処理単位どうしのデータ転送を代理で行う通信代理機能を実行することを特徴とするシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信プログラム。
【請求項１３】
マルチプロセッサ上でシングルプロセッサ向けＯＳ及びアプリケーションを動作させ、
一のプロセッサ上で動作する前記アプリケーション内で並列化が可能な処理単位を、他のプロセッサ上で新たな処理単位として制御することにより、前記アプリケーションに対して前記マルチプロセッサによる並列処理を行う並列処理システム上で、
前記各プロセッサに、前記プロセッサ間にまたがる処理単位どうしのデータ転送を代理で行う通信代理機能を実行することを特徴とするシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信プログラム。
【請求項１４】
マルチプロセッサ上でシングルプロセッサ向けＯＳ及びタスクとしての処理単位を動作させる並列処理システム上で、
前記各プロセッサに、前記プロセッサ間にまたがる処理単位どうしのデータ転送を代理で行う通信代理機能を実行することを特徴とするシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信プログラム。
【請求項１５】
前記通信代理機能は、
ソケットを用いた通信方式により、プロセッサ間にまたがる処理単位どうしのデータ転送を代理で処理する機能を有することを特徴とする請求項１２から請求項１４の何れか1項に記載のシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信プログラム。
【請求項１６】
前記通信代理機能は、
メッセージキュー又はＦＩＦＯを用いた通信方式により、プロセッサ間にまたがる処理単位どうしのデータ転送を代理で処理することを特徴とする請求項１２から請求項１４の何れか1項に記載のシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信プログラム。
【請求項１７】
受信側の処理単位によるバインド処理関数の呼び出しをフックして、代理で前記シングルプロセッサ向けＯＳに対してバインド処理を要求するＯＳ代理機能を有し、
前記ＯＳ代理機能が、前記受信側の処理単位の経路情報を含むバインド処理情報を、ブロードキャストにより他のプロセッサの前記通信代理機能に通知することを特徴とする請求項１５に記載のシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信プログラム。
【請求項１８】
前記通信代理機能は、自プロセッサ内の処理単位と、自プロセッサ内のみで通信可能なプロセス間通信方式基づいて通信を行うことを特徴とする請求項１５から請求項１７に記載のシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信プログラム。
【請求項１９】
自プロセッサ内のみで通信可能な前記プロセス間通信方式が、ＵＮＩＸ(R)ドメインソケットであることを特徴とする請求項１８に記載のシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサによる並列処理システムにおけるプロセッサ間通信システムに関し、特に、マルチプロセッサ上でシングルプロセッサ向けＯＳ及び既存のアプリケーションを動作させ、アプリケーションに対してマルチプロセッサによる並列処理を実現するシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信システムに関する。
【背景技術】
【０００２】
携帯電話及び携帯ＰＣを含む携帯端末等のデータ処理装置においては、基本的にシングルプロセッサ上でシングルプロセッサ向けオペレーティングシステム（以下、シングルプロセッサ向けＯＳ）及びシングルプロセッサ向けのアプリケーション（以下、単にアプリケーションと称する）を実行させているのが現状である。
【０００３】
このような状況において、マルチプロセッサベースで上記アプリケーションそのままを使用したい場合には、上記シングルプロセッサ向けＯＳの代わりにマルチプロセッサ向けＯＳ上でアプリケーションを実行させる必要がある。
【０００４】
上記のようなマルチプロセッサシステム上でマルチプロセッサ向けＯＳとアプリケーションの実行を制御するシステムとしては、例えば、特開平３−２５７６５２号公報、特開平３−１１３５６３号公報に開示される従来技術がある。
【０００５】
特開平３−２５７６５２号公報（特許文献１）では、複数のプロセッサエレメントからなるマルチプロセッサシステムにおける各プロセッサエレメント間の割り込み制御方法を開示する。
【０００６】
特開平３−１１３５６３号公報（特許文献２）では、マルチプロセッサシステムにおける複数のプロセッサに割り当てるプロセスのスケジューリング方法を開示する。
【０００７】
また、特開２００３−０５８５１５号公報（特許文献３）では、複数のプロセッサエレメントで個別のプロセスを実行するための方法を開示している。
【特許文献１】特開平３−２５７６５２号公報
【特許文献２】特開平３−１１３５６３号公報
【特許文献３】特開２００３−０５８５１５号公報
【特許文献４】米国特許第５１４２６８４号明細書
【特許文献５】特開２００３−３４５６１４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
従来のように、マルチプロセッサ向けＯＳ上で既存のアプリケーションを動作させる場合、アプリケーションは複数のプロセッサのうちの一つしか使用しないにもかかわらず、マルチプロセッサ向けＯＳがマルチプロセッサ向けのサービスを行ったり、他のアプリケーションが動作していないのに他のプロセッサとの排他処理を続行するために、その余分な処理がオーバヘッドになってしまい、また上記アプリケーションをマルチプロセッサ用に改造するにも、改造に非常に手間とコストがかかるという問題点があった。
【０００９】
特に、携帯電話及び携帯ＰＣを含む携帯端末等の小型データ処理装置においてマルチプロセッサによる並列処理システムを実現する場合、マルチプロセッサ向けＯＳの処理のオーバヘッド、アプリケーションの改造が大きな障害となる。
【００１０】
このような状況において、アプリケーションがそのまま既存のシングルプロセッサ向けＯＳ上で利用されている場合には、既存のアプリケーションをそのままマルチプロセッサ上で動作させることのできるシングルプロセッサ向けＯＳによる並列処理システムの実現が望まれており、例えば、本願出願人によるシングルプロセッサ向けＯＳによる並列処理システムが特開２００３−３４５６１４号公報（特許文献５）として提案されている。
【００１１】
また、これまでのマルチＯＳによるマルチプロセッサシステムでは、同一プロセッサ内におけるタスク間の通信は、ＵＮＩＸ(R)ドメインソケットを用いた通信がなされ、各プロセッサ上で動作するタスクのプロセッサ間における通信は、ＴＣＰ／ＩＰプロトコルによる通信がなされている。すなわち、プロセッサ内での通信とプロセッサ間にわたる通信とで、異なる通信方式を利用してタスクどうしのデータ通信を行っている。
【００１２】
ところで、シングルプロセッサ向けＯＳが動作するプロセッサ内で実行されるアプリケーションは、当該ＯＳに備えられている専用の通信方式を用いることで、基本的に同一プロセッサ内のみでの通信が可能となっている。
【００１３】
よって、このようなアプリケーションをマルチプロセッサシステム上で異なるプロセッサ間で動作させ、マルチＯＳによるマルチプロセッサシステムと同様にプロセッサ間でのデータ転送を可能にするためには、プロセッサ間におけるデータ通信を可能とする機能を持たせるためにアプリケーションを改造する必要が生じる。
【００１４】
携帯電話及び携帯ＰＣを含む携帯端末等の小型データ処理装置において、マルチプロセッサの各プロセッサ上でシングルプロセッサ向けＯＳを動作させるような並列処理システムを実現する際、上記アプリケーション改造の必要性がシステム実現のネックとなる問題がある。
【００１５】
このような状況の元、マルチプロセッサの各プロセッサ上でシングルプロセッサ向けＯＳを動作させるような並列処理システムであって、かつ、シングルプロセッサ向けＯＳ用のアプリケーションを改造することなく、当該アプリケーションによるプロセッサ間通信を可能にするシステムの提供が待たれている。
【００１６】
本発明の目的は、マルチプロセッサ上でシングルプロセッサ向けＯＳと既存のアプリケーションをそれらに改造を加えることなく動作させ、その既存のアプリケーションに対してマルチプロセッサによる並列処理を実現できるようにしたシングルプロセッサ向けＯＳによる並列処理システム上で、アプリケーションに改造を加えることなく、当該アプリケーションによるプロセッサ間におけるデータ転送を可能にするプロセッサ間通信システムを提供することにある。
【課題を解決するための手段】
【００１７】
上記目的を達成するため本発明のシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信システムは、マルチプロセッサ上でシングルプロセッサ向けＯＳ及びアプリケーションを動作させ、前記マルチプロセッサを論理的に、第１のプロセッサ側と第２のプロセッサ側の二つに分け、前記第１のプロセッサ側のプロセッサ上で動作する前記アプリケーション内で並列化が可能な処理単位を、前記第２のプロセッサ側のプロセッサ上で新たな処理単位として制御することにより、前記アプリケーションに対して前記マルチプロセッサによる並列処理を行う並列処理システム上で、前記各プロセッサに、前記プロセッサ間にまたがる処理単位どうしのデータ転送を代理で行う通信代理手段を備えることを特徴とする。
【００１８】
請求項２の本発明のシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信システムは、マルチプロセッサ上でシングルプロセッサ向けＯＳ及びアプリケーションを動作させ、一のプロセッサ上で動作する前記アプリケーション内で並列化が可能な処理単位を、他のプロセッサ上で新たな処理単位として制御することにより、前記アプリケーションに対して前記マルチプロセッサによる並列処理を行う並列処理システム上で、前記各プロセッサに、前記プロセッサ間にまたがる処理単位どうしのデータ転送を代理で行う通信代理手段を備えることを特徴とする。
【００１９】
請求項３の本発明のシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信システムは、マルチプロセッサ上でシングルプロセッサ向けＯＳ及びタスクとしての処理単位を動作させる並列処理システム上で、
前記各プロセッサに、前記プロセッサ間にまたがる処理単位どうしのデータ転送を代理で行う通信代理手段を備えることを特徴とする。
【００２０】
請求項４の本発明のシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信システムは、送信側の処理単位が動作するプロセッサ上の前記通信代理手段が、前記受信側の処理単位のプロセッサ上におけるアドレス情報を保持し、前記受信側の処理単位の代理として前記送信側の処理単位からの転送データを受理することを特徴とする。
【００２１】
請求項５の本発明のシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信システムは、受信側の処理単位が動作するプロセッサのアドレス情報と、前記処理単位のプロセッサにおける経路情報を含む処理情報を、他のプロセッサ上の前記通信代理手段にマルチキャストにより転送し、
前記他のプロセッサ上の前記通信代理手段は、前記処理情報を受理することにより、前記受信側の処理単位の代理でデータを受信する状態となることを特徴とする。
【００２２】
請求項６の本発明のシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信システムは、送信側の処理単位が動作するプロセッサ上の前記通信代理手段が、送信側の処理単位からの要求により、前記シングルプロセッサ向けＯＳから送信されるデータを、前記受信側の処理単位の代理で受信し、受信したデータを、プロセッサ間で通信を行う所定のデータ転送手段を介して、前記受信側のプロセッサ上の前記通信代理手段に送信し、前記データを受信した受信側のプロセッサ上の前記通信代理手段が、受信側のプロセッサ上の前記シングルプロセッサ向けＯＳに対して、前記処理単位へのデータ転送を要求することを特徴とする。
【００２３】
請求項７の本発明のシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信システムは、前記通信代理手段は、ソケットを用いた通信方式により、プロセッサ間にまたがる処理単位どうしのデータ転送を代理で処理することを特徴とする。
【００２４】
請求項８の本発明のシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信システムは、前記通信代理手段は、メッセージキュー又はＦＩＦＯを用いた通信方式により、プロセッサ間にまたがる処理単位どうしのデータ転送を代理で処理することを特徴とする。
【００２５】
請求項９の本発明のシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信システムは、受信側の処理単位によるバインド処理関数の呼び出しをフックして、代理で前記シングルプロセッサ向けＯＳに対してバインド処理を要求するＯＳ代理手段を有し、前記ＯＳ代理手段が、前記受信側の処理単位の経路情報を含むバインド処理情報を、ブロードキャストにより他のプロセッサの前記通信代理手段に通知することを特徴とする。
【００２６】
請求項１０の本発明のシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信システムは、前記通信代理手段は、自プロセッサ内の処理単位と、自プロセッサ内のみで通信可能なプロセス間通信方式基づいて通信を行うことを特徴とする。
【００２７】
請求項１１の本発明のシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信システムは、自プロセッサ内のみで通信可能な前記プロセス間通信方式が、ＵＮＩＸ(R)ドメインソケットであることを特徴とする。
【００２８】
請求項１２の本発明のシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信プログラムは、マルチプロセッサ上でシングルプロセッサ向けＯＳ及びアプリケーションを動作させ、前記マルチプロセッサを論理的に、第１のプロセッサ側と第２のプロセッサ側の二つに分け、前記第１のプロセッサ側のプロセッサ上で動作する前記アプリケーション内で並列化が可能な処理単位を、前記第２のプロセッサ側のプロセッサ上で新たな処理単位として制御することにより、前記アプリケーションに対して前記マルチプロセッサによる並列処理を行う並列処理システム上で、前記各プロセッサに、前記プロセッサ間にまたがる処理単位どうしのデータ転送を代理で行う通信代理機能を実行することを特徴とする。
【００２９】
請求項１３の本発明のシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信プログラムは、マルチプロセッサ上でシングルプロセッサ向けＯＳ及びアプリケーションを動作させ、一のプロセッサ上で動作する前記アプリケーション内で並列化が可能な処理単位を、他のプロセッサ上で新たな処理単位として制御することにより、前記アプリケーションに対して前記マルチプロセッサによる並列処理を行う並列処理システム上で、前記各プロセッサに、前記プロセッサ間にまたがる処理単位どうしのデータ転送を代理で行う通信代理機能を実行することを特徴とする。
【００３０】
請求項１４の本発明のシングルプロセッサ向けＯＳによる並列処理システムにおけるプロセッサ間通信プログラムは、マルチプロセッサ上でシングルプロセッサ向けＯＳ及びタスクとしての処理単位を動作させる並列処理システム上で、前記各プロセッサに、前記プロセッサ間にまたがる処理単位どうしのデータ転送を代理で行う通信代理機能を実行することを特徴とする。
【発明の効果】
【００３１】
本発明のプロセッサ間通信システムによれば、以下に述べるような優れた効果が達成される。
【００３２】
第1に、各プロセッサ上のタスクにとっては、通信相手となるタスクが実行されるプロセッサに存在する通信代理手段が自身の代理としてプロセッサ間データ転送を行うため、プロセッサ間のデータ転送であっても、プロセッサ内におけるタスク間のデータ転送と同じ処理で、他のプロセッサ上のタスクとデータ転送が行えるようになる。
【００３３】
従って、シングルプロセッサ向けＯＳ上で動作するタスクであるアプリケーションにおいては、シングルプロセッサ向けＯＳの機能として備えているプロセッサ内におけるタスク間通信を利用して、他のプロセッサ上のタスクとの間でプロセッサ間データ転送を行うことができる。すなわち、シングルプロセッサ向けＯＳ上で動作するタスクであるアプリケーションを、プロセッサ間データ転送を行うために改造する必要がない。
【００３４】
上記のようにアプリケーションの改造が不要となることで、改造に伴うコスト及びメンテナンスに要するコストが不要となる。
【実施例】
【００３５】
まず、本発明のプロセッサ間通信システムを適用するシングルプロセッサ向けＯＳによる並列処理システムについて説明する。以下で説明する並列処理システムでは、従来のシングルプロセッサ向けＯＳに対して一切の改造を加えることなく、複数のプロセッサへの処理を依頼する機構や複数のプロセッサへのＯＳサービスの提供におけるクリティカルセクションの保護機構を付加することにより、マルチプロセッサ上での並列処理を実行する。
【００３６】
図１は第１例としての並列処理システムの構成を示すブロック図である。
【００３７】
図１に示すように、第１例の並列処理システムは、システムバス９１で接続される複数のプロセッサ（ＣＰＵ）Ｐ０〜Ｐｎ（ｎは１以上の整数）からなるマルチプロセッサを、論理的に第１プロセッサ側１０と第２プロセッサ側２０の二組に分け、第１プロセッサ側１０のプロセッサＰ０上で動作するシングルプロセッサ向けＯＳ３０を実装し、かつ第１プロセッサ側１０のプロセッサＰ０及び第２プロセッサ側２０のプロセッサＰ１〜Ｐｎのそれぞれに、並列処理を行うための並列処理手段４０Ｐ０〜４０Ｐｎ及びＯＳサービスを処理するためのＯＳサービス手段５０Ｐ０〜５０Ｐｎを実装して構成される。また、システムバス９１には、各プロセッサＰ０〜Ｐｎが共有する共有メモリとしての主記憶装置９２及びディスク装置等の外部記憶装置９３が接続される。
【００３８】
なお、上記マルチプロセッサには、同一種類のプロセッサを複数備える構成だけでなく、ＤＳＰやセキュリティエンジン等の異種の処理装置を複数備える構成も含む。
【００３９】
また、第１プロセッサ側１０と第２プロセッサ側２０間で、制御信号やデータのやり取りを行うための制御処理中継手段６０が独自に設けられ、かつ第１プロセッサ側１０には、シングルプロセッサ向けＯＳ３０が第２プロセッサ側２０で実行されるタスクと通信するための代理手段７０が設けられている。
【００４０】
上記第１プロセッサ側１０のプロセッサは、必ずしも単一である必要はなく複数のプロセッサからなっていてもよい。例えば、第１プロセッサ側１０を２つのプロセッサとし、それぞれに異なるシングルプロセッサ向けＯＳを実装するような構成とすることも可能である。
【００４１】
また、第１プロセッサ側１０のプロセッサで起動されるシングルプロセッサ向けＯＳ３０としては、既存のＯＳが利用される。例えば、リアルタイムＯＳやＵＮＩＸ(Ｒ)  ＯＳがそのまま利用される。
【００４２】
本明細書で使用するタスクとは、ＵＮＩＸ(Ｒ)  ＯＳにおけるプロセスやスレッド、リアルタイムＯＳにおけるタスク等の並列処理を行うための処理単位を意味している。
【００４３】
本並列処理システムにおいては、第１プロセッサ側１０のシングルプロセッサ向けＯＳ上でアプリケーションが動作し、そのアプリケーションの処理単位のうち、並列化を行えないタスク（逐次タスク）を第１プロセッサ側１０のプロセッサＰ０で処理し、アプリケーション内で並列化を行えるタスクを第２プロセッサ側２０において新たなタスクとして生成して並列処理をさせる。
【００４４】
並列処理手段４０Ｐ０及び並列処理手段４０Ｐ１〜４０Ｐｎは、タスクの生成、起動、停止、終了、削除、及びその他のタスクに関する制御を行う機能を有する。ここでは、第１プロセッサ側１０の並列処理手段４０Ｐ０から第２プロセッサ側２０の各プロセッサＰ１〜Ｐｎの並列処理手段４０Ｐ１〜４０Ｐｎに対して、制御処理中継手段６０を介してタスクの生成、起動、停止、終了、削除等の処理を行う。また、シグナル通知については、並列処理手段４０Ｐ０と並列処理手段４０Ｐ１〜４０Ｐｎの双方向から処理される。
【００４５】
ＯＳサービス手段５０Ｐ０及びＯＳサービス手段５０Ｐ１〜５０Ｐｎは、外部機器への各種のアクセスと制御を行うためのインタフェース、タスクどうしが共有するリソースへの各種アクセスと制御を行うためのインタフェースとして機能を有する。
【００４６】
制御処理中継手段６０は、第１プロセッサ側１０と第２プロセッサ側２０間で、制御信号やデータのやり取りを行うための手段であり、複数のプロセッサで並列処理される複数のタスク間の制御に使用される。
【００４７】
代理手段７０は、第２プロセッサ側２０で実行されるタスク（一部あるいは全部）に対応付けられ、第２プロセッサ側２０のタスクとシングルプロセッサ向けＯＳ３０間におけるシグナル通知（タスクを制御するための各種制御信号の通知）のために実装されている。
【００４８】
以下、上記のように構成される第１例の並列処理システムの動作について、図面を参照して詳しく説明する。
【００４９】
ここでは、第１プロセッサ側１０のシングルプロセッサ向けＯＳ上でアプリケーションが動作し、そのアプリケーションの処理単位のうち、第１プロセッサ側１０のプロセッサＰ０で処理する処理単位を逐次タスクＳＴとし、アプリケーション内で並列化を行えるタスクであって、第２プロセッサ側２０に対してタスクＰＴ−１〜ＰＴ−ｎとして並列処理をさせる処理単位を並列化タスクＰＴとする。
【００５０】
まず、並列処理手段４０Ｐ０、４０Ｐ１〜４０Ｐｎによる並列処理起動の動作について、図２と図３を用いて説明する。
【００５１】
（１）第１プロセッサ側１０の並列化タスクＰＴを、第２プロセッサ側２０のタスクＰＴ−１〜ＰＴ−ｎの何れかとして起動させる場合、並列処理手段４０Ｐ０に対して、第２プロセッサ側２０で起動させる処理単位としてのタスクＰＴ−１〜ＰＴ−ｎの何れかの生成を要求する。
【００５２】
並列処理手段４０Ｐ０、並列処理手段４０Ｐ１〜４０Ｐｎからの要求（command）としては、例えば、以下のようなものがある。create（タスクの生成）、delete（タスクの削除）、activate（タスクの起動）、terminate（タスクの終了）、signal（シグナル要求）等がある。このうち、create（タスクの生成）、delete（タスクの削除）、activate（タスクの起動）、terminate（タスクの終了）については、第１プロセッサ側１０から第２プロセッサ側２０へ送られる要求であり、signal（シグナル要求）は、第１プロセッサ側１０と第２プロセッサ側２０間で双方向から送られる。
【００５３】
この要求は、図３に示すようなメッセージによって行われる。すなわち、要求する内容（この場合は、タスク生成）を示す要求内容２０１、タスクを処理させる第２プロセッサ側２０のプロセッサＰ１〜Ｐｎを指定するプロセッサ番号２０２、新たに生成するタスクＰＴ−１〜ＰＴ−ｎを示すタスク番号、タスク生成を要求する並列化タスクＰＴを示す元タスク番号からなるメッセージを並列処理手段４０Ｐ０に対して送信することで、タスク生成の要求を行う。なお、タスク生成以外の要求についても、図３に示すメッセージに従った要求が送られる。
【００５４】
（２）これに対して、並列処理手段４０Ｐ０は、生成するタスクＰＴ−１〜ＰＴ−ｎに対応する代理手段７０を起動する。この代理手段７０は、第１プロセッサ側１０と第２プロセッサ側２０でタスクの管理内容を共有しないようにするため、かつ排他処理を第１プロセッサ側１０で完結させるために起動される。この時、代理手段７０にはタスクＰＴ−１〜ＰＴ−ｎのタスク番号が保持される。
【００５５】
（３）さらに、並列処理手段４０Ｐ０は、上述したタスク番号及び要求内容（第２プロセッサ側２０のプロセッサＰ１〜Ｐｎへのタスク生成）といったタスク生成に必要なデータと、「並列処理」を指定する通信理由情報とを制御処理中継手段６０に設定する。
【００５６】
これにより、制御処理中継手段６０に対して、後述する主記憶装置９２（共有メモリ）への通信内容の設定とプロセッサ間割り込みのための処理が行われる。
【００５７】
ここで、通信理由情報とは、制御処理中継手段６０に渡したデータの受け取り先（取得先）を示すものであり、上記の場合、指定されたプロセッサＰ１〜Ｐｎの並列処理手段４０Ｐ１〜４０Ｐｎによって、制御処理中継手段６０に設定されたデータが取得されることになる。
【００５８】
（４）第２プロセッサ側２０の指定されたプロセッサＰ１〜Ｐｎ上の並列処理手段４０Ｐ１〜４０Ｐｎは、制御処理中継手段６０から通信理由情報が「並列処理」の要求内容（タスク制御に必要なデータ）を取得する。
【００５９】
（５）そして、並列処理手段４０Ｐ１〜４０Ｐｎは、取得した要求内容に基づいてプロセッサＰ１〜Ｐｎ上でタスクＰＴ−１〜ＰＴ−ｎを生成・起動する。
【００６０】
以上により、第１プロセッサ側１０のシングルプロセッサ向けＯＳ上で動作するアプリケーションの処理単位である並列化タスクＰＴの処理単位をを、第２プロセッサ側２０上にタスクＰＴ−１〜ＰＴ−ｎとして並列処理をさせることが可能となる。
【００６１】
なお、上記の動作においては、並列処理手段４０Ｐ１〜４０Ｐｎは、取得した要求内容に基づいてプロセッサＰ１〜Ｐｎ上でタスクＰＴ−１〜ＰＴ−ｎを生成して起動する場合について述べたが、第１プロセッサ側１０の並列化タスクＰＴを、予め第２プロセッサ側２０のタスクＰＴ−１〜ＰＴ−ｎの何れかとして生成しておき、並列処理手段４０Ｐ１〜４０Ｐｎが、取得した要求内容に基づいてプロセッサＰ１〜Ｐｎ上でタスクＰＴ−１〜ＰＴ−ｎを起動するようにすることもできる。
【００６２】
次に、ＯＳサービス手段５０Ｐ０、５０Ｐ１〜５０ＰｎによるＯＳサービス処理動作について説明する。
【００６３】
ＯＳサービス手段５０Ｐ０、５０Ｐ１〜５０Ｐｎは、第２プロセッサ側２０のプロセッサＰ１〜Ｐｎ上に生成したタスクＰＴ−１〜ＰＴ−ｎからの要求に基づいて、シングルプロセッサ向けＯＳ３０によるサービスである、外部機器への各種アクセスと制御、他のタスクと共用するリソースへの各種アクセスと制御に関するサービスを提供するための機能を有する。シングルプロセッサ向けＯＳ３０によるサービスには、通常のＯＳが提供するシステムコールやＡＰＩに相当するものが主な対象となる。
【００６４】
第２プロセッサ側２０のプロセッサＰ１〜Ｐｎ上のタスクＰＴ−１〜ＰＴ−ｎからのファイルアクセス（例えば、外部記憶装置９３上のファイルに対する各種の処理）要求に対するＯＳサービス手段５０Ｐ０、５０Ｐ１〜５０Ｐｎの動作を図４を参照して説明する。
【００６５】
ここで、ファイルアクセスには、open（ファイルのオープン）、close（ファイルのクローズ）、read（ファイルの読み出し）、write（ファイルの書き込み）、seek（ファイル書き込み位置の移動）、remove（ファイルの削除）、rename（ファイルの名称変更）等の処理が含まれる。
【００６６】
（１）第２プロセッサ側２０のタスクＰＴ−１〜ＰＴ−ｎにおいてファイルアクセス処理の必要が発生すると、タスクＰＴ−１〜ＰＴ−ｎが、第２プロセッサ側２０のＯＳサービス手段５０Ｐ１〜５０Ｐｎに対してファイルアクセスのためのサービスを要求する。このファイルアクセスのサービス要求においては、例えば、ＯＳサービス手段５０Ｐ１〜５０Ｐｎのファイルへの書き込み処理として定義されたwrite関数やファイルの読み出し処理として定義されたread関数等が呼び出される。
【００６７】
ここで、ＯＳサービス手段５０Ｐ１〜５０Ｐｎは、第１プロセッサ側１０の処理（シングルプロセッサ向けＯＳ３０によるファイルアクセス処理）に必要なデータを設定する。ここで、必要なデータには、要求内容（例えば、write request）、アクセスするファイルの記述子（file descriptor）、文字列へのポインタ、文字列の長さ、タスク番号等の情報が含まれる。
【００６８】
（２）ＯＳサービス手段５０Ｐ１〜５０Ｐｎは、通信理由情報を「ＯＳサービス」として、要求内容を含む必要なデータを制御処理中継手段６０に対して設定することで、第１プロセッサ側１０に対してファイルアクセス要求を発行する。
【００６９】
その後、ファイルアクセスのサービス要求を行ったタスクＰＴ−１〜ＰＴ−ｎは、待ち状態となり、対応するプロセッサＰ１〜Ｐｎにおいては並列処理手段４０Ｐ１〜４０Ｐｎにより他のタスクへ処理が切り替わる（タスクのswitch：スイッチ）。
【００７０】
（３）第１プロセッサ側１０のＯＳサービス手段５０Ｐ０は、制御処理中継手段６０から「ＯＳサービス」という通信理由情報の上記ファイルアクセス要求を取得する。
【００７１】
（４）第１プロセッサ側１０のＯＳサービス手段５０Ｐ０は、取得した要求内容に従ってシングルプロセッサ向けＯＳ３０に対してファイルアクセスを要求する。
【００７２】
（５）これにより、シングルプロセッサ向けＯＳ３０は、要求に基づいて外部記憶装置９３等に対するファイルアクセス（writeやread等）を行う。このファイルアクセス処理は、シングルプロセッサ向けＯＳ３０が本来備えているファイルアクセスサービスをそのまま利用して実行される。
【００７３】
（６）要求されたファイルアクセス処理が終了すると、シングルプロセッサ向けＯＳ３０は、第１プロセッサ側１０のＯＳサービス手段５０Ｐ０にファイルアクセス要求に対する戻り値を返し、処理を戻す。
【００７４】
（７）さらに、ＯＳサービス手段５０Ｐ０は、その戻り値とファイルアクセス要求を行ったタスクＰＴ−１〜ＰＴ−ｎのタスク番号を含むデータである通信内容を、「ＯＳサービス」を通信理由情報として制御処理中継手段６０に設定することにより、第２プロセッサ側２０のプロセッサＰ１〜Ｐｎに対してファイルアクセスの完了を通知する。
【００７５】
（８）対応するプロセッサＰ１〜ＰｎのＯＳサービス手段５０Ｐ１〜５０Ｐｎは、制御処理中継手段６０から上記設定された戻り値と完了通知を受け取る。
【００７６】
（９）そして、第２プロセッサ側２０のＯＳサービス手段５０Ｐ１〜５０Ｐｎは、並列処理手段４０Ｐ１〜４０Ｐｎに対してファイルアクセス要求を行ったタスクＰＴ−１〜ＰＴ−ｎを起動するように依頼する。
【００７７】
これにより、待ち状態となっていたタスクＰＴ−１〜ＰＴ−ｎに処理が切り替わる。
【００７８】
（１０）並列処理手段４０Ｐ１〜４０Ｐｎから起動されたタスクＰＴ−１〜ＰＴ−ｎは、ＯＳサービス手段５０Ｐ１〜５０Ｐｎからファイルアクセスの戻り値を受け取り、処理を継続する。
【００７９】
以上により、第２プロセッサ側２０に個別にファイルアクセスのための処理手段を設けることなく、第２プロセッサ側２０におけるタスクＰＴ−１〜ＰＴ−ｎはシングルプロセッサ向けＯＳ３０のサービスをそのまま利用してファイルアクセスが可能となる。また、これにより、ファイルアクセスのための排他処理については、第１プロセッサ側１０で完結するため、マルチプロセッサ向けＯＳ上でアプリケーションを動作させる場合のような排他処理によるオーバヘッドが発生することなく並列処理を実現できる。
【００８０】
なお、第２プロセッサ側２０のプロセッサＰ１〜Ｐｎ上のタスクＰＴ−１〜ＰＴ−ｎが、例えば外部記憶装置９３上のリードオンリー（read only）のデータをファイルアクセスする場合には、上記のようにＯＳサービス手段５０Ｐ１〜５０Ｐｎによる処理を経ることなく、各プロセッサＰ１〜Ｐｎから外部記憶装置９３に直接アクセスするようにしてもよい。
【００８１】
ここで、第１プロセッサ側１０のプロセッサＰ０上の逐次タスクＳＴからのファイルアクセス要求については、ＯＳサービス手段によることなく直接シングルプロセッサ向けＯＳ３０によって処理がなされる。以下、図５を参照して説明する。
【００８２】
（１）プロセッサＰ０上の逐次タスクＳＴは、シングルプロセッサ向けＯＳ３０に対してファイルアクセスを要求する。
【００８３】
（２）これにより、シングルプロセッサ向けＯＳ３０は、要求に基づいて外部記憶装置９３等に対するファイルアクセス（writeやread等）を行う。このファイルアクセス処理は、シングルプロセッサ向けＯＳ３０が本来備えているファイルアクセスサービスをそのまま利用して実行される。
【００８４】
（３）ファイルアクセス処理が終了すると、シングルプロセッサ向けＯＳ３０は、逐次タスクＳＴに対してファイルアクセス要求に対する戻り値を返し、処理を戻す。
【００８５】
逐次タスクＳＴからのＯＳサービス要求に対しては排他制御等の必要がないので、余計なオーバヘッドが発生しない。
【００８６】
制御処理中継手段６０による処理動作について、図６及び図７を参照して説明する。
【００８７】
まず、制御処理中継手段６０の構成を図６に示す。図示のように、制御処理中継手段６０は、各プロセッサＰ０〜Ｐｎに対応した割り込み制御装置６１Ｐ０〜６１Ｐｎと、各プロセッサＰ０〜Ｐｎに対応した通信領域６２Ｐ０〜６２Ｐｎとを備えて構成される。ここで、通信領域６２Ｐ０〜６２Ｐｎは、主記憶装置９２内に確保される。
【００８８】
さらに、割り込み装置６１Ｐ０〜６１Ｐｎは、他のプロセッサに対して割り込みを指示する割込指示部６１ａ、割り込みの指示により割り込みがあった旨の情報を保持する割込状態保持部６１ｂ、割り込みをクリアする割込取消部６１ｃにより構成される。
【００８９】
また、通信領域６２Ｐ０〜６２Ｐｎは、通信元のプロセッサからの通信理由情報を保持する通信理由保持領域６２ａ、通信するための通信データを保持する通信データ保持領域６２ｂ、通信を確保するために通信領域に対してロックをかけるための排他制御領域６２ｃにより構成される。
【００９０】
ここで、通信データ持領域６２ｂには、通信する通信データ（要求内容を含む必要データ）が格納される主記憶装置９２へのポインタが格納されることになる。
【００９１】
第１プロセッサ側１０の並列処理手段４０Ｐ０から第２プロセッサ側２０のプロセッサＰ１への通信処理を例にとり、図７を参照してその動作を説明する。
【００９２】
（１）並列処理手段４０Ｐ０は、プロセッサＰ１用の通信領域６２Ｐ１の排他制御領域６２ｃにロックをかける。具体的には、排他制御領域６２ｃに格納されるlock変数をロック状態とすることにより、当該プロセッサＰ１用の通信領域６２Ｐ１が他のプロセッサで使用されるのを排する。
【００９３】
他のプロセッサによって既にロックされている場合には、ロックが解除されるのを待つ。
【００９４】
（２）通信領域６２Ｐ１のロックが取得できた場合、並列処理手段４０Ｐ０は、通信理由情報と通信データ（要求内容を含む必要データ）を、通信領域６２Ｐ１の通信理由保持領域６２ａと通信データ保持領域６２ｂのそれぞれに格納する。
【００９５】
格納される通信理由情報としては、上述したようにタスク生成のための通信処理であれば、「並列処理」を示す情報（例えば、並列処理に対応して予め定められている数値等のデータ）が格納される。
【００９６】
（３）並列処理手段４０Ｐ０は、自身の割込制御装置６１Ｐ０の割込指示部６１ａに対して、プロセッサＰ１への割り込みを指示する。
【００９７】
（４）割込制御装置６１Ｐ０の割込指示部６１ａは、プロセッサＰ１に対応する割込制御装置６１Ｐ１の割込状態保持部６１ｂに、割り込みを示す情報をセットする。これにより、プロセッサＰ１が割り込み状態となる。
【００９８】
（５）プロセッサＰ１の並列処理手段４０Ｐ１は、制御処理中継手段６０の割込制御装置６１Ｐ１の割込状態保持部６１ｂの状態より、割り込みがセットされたことを判別する。
【００９９】
（６）プロセッサＰ１の並列処理手段４０Ｐ１は、制御処理中継手段６０の自身の割込状態保持部６１ｂの割り込み情報をクリアすることにより、自身の割り込み状態を解除する。
【０１００】
（７）プロセッサＰ１の並列処理手段４０Ｐ１は、さらに、制御処理中継手段６０の自身の通信領域６２Ｐ１の通信理由保持領域６２ａと通信データ保持領域６２ｂから、通信理由情報と通信データ（要求内容を含む必要データ）をそれぞれ取得する。
【０１０１】
（８）プロセッサＰ１の並列処理手段４０Ｐ１は、次の通信を受理できるようになった後、自身の通信領域６２Ｐ１の排他制御領域６２ｃのロックを解除する。具体的には、排他制御領域６２ｃに格納されるlock変数をアンロック状態とすることにより、当該プロセッサＰ１用の通信領域６２Ｐ１が他のプロセッサから使用できるように解放する。
【０１０２】
以上のように、制御処理中継手段６０を用いることにより、第１プロセッサ側１０と第２プロセッサ側２０間で、制御信号やデータのやり取りが実現される。
【０１０３】
また、代理手段７０によるシグナル通知処理動作について、図８を参照して説明する。
【０１０４】
代理手段７０は、シングルプロセッサ向けＯＳ３０が第２プロセッサ側２０に生成したタスクＰＴ−１〜ＰＴ−ｎとシグナル（制御信号）による通信を行うための機能を有する。この代理手段７０には、対応するタスクＰＴ−１〜ＰＴ−ｎのタスク番号が保持されている。
【０１０５】
なお、複数のタスクＰＴ−１〜ＰＴ−ｎに一対一に代理手段７０を関連付けてもよいし、一つの代理手段７０に複数のタスクＰＴ−１〜ＰＴ−ｎを関連付けてもよい。
【０１０６】
（１）第１プロセッサ側１０の逐次タスクＳＴが、シングルプロセッサ向けＯＳ３０に対してシグナル通知のサービスを要求する。このシグナル通知によって通信されるシグナルは、シングルプロセッサ向けＯＳ３０が本来有するサービス機能により、第２プロセッサ側２０の各プロセッサＰ１〜Ｐｎ上で起動されているタスクＰＴ−１〜ＰＴ−ｎを制御するための制御信号である。
【０１０７】
（２）シングルプロセッサ向けＯＳ３０は、シグナルを対応する代理手段７０に通知する。
【０１０８】
（３）代理手段７０は、通知されたシグナルを制御処理中継手段６０を通じて、自身に対応する第２プロセッサ側２０のタスクＰＴ−１の存在するプロセッサＰ１〜Ｐｎへ通知する。ここで、通信理由情報としては、「並列処理」が設定される。
【０１０９】
（４）制御処理中継手段６０への通信理由情報が「並列処理」であることから、第２プロセッサ側２０の対応するプロセッサの並列処理手段４０Ｐ１〜４０Ｐｎは、制御処理中継手段６０からシグナル通知要求を取得する。
【０１１０】
（５）シグナル通知要求を取得した並列処理手段４０Ｐ１〜４０Ｐｎは、対応するタスクＰＴ−１〜ＰＴｎに対してシグナル（制御信号）を通知する。
【０１１１】
以上により、代理手段７０が第２プロセッサ側２０のプロセッサＰ０〜Ｐｎ上のタスクＰＴ−１〜ＰＴ−ｎとタスク番号によって関連付けられているので、第１プロセッサ側１０ではタスクＰＴ−１〜ＰＴ−ｎに対してシングルプロセッサ向けＯＳ３０によるシグナル通知のサービスを実行することが可能となる。
【０１１２】
最後に、第２プロセッサ側２０におけるタスク相互の連携動作について、図９と図１０を参照して説明する。
【０１１３】
タスク間の連携を取るための並列処理手段４０Ｐ１〜４０Ｐｎの構成を図９に示す。図示のように、並列処理手段４０Ｐ１〜４０Ｐｎは、相互排他手段４１Ｐ１〜４１Ｐｎを備えている。
【０１１４】
また、タスクの連携を取るため、主記憶装置９２内には、排他制御領域４３とタスク管理内容保持領域４４を有する。
【０１１５】
（１）プロセッサＰ１上のタスクＰＴ−１は、自身の並列処理手段４０Ｐ１に対して所望の並列処理を要求する。
【０１１６】
（２）プロセッサＰ１の並列処理手段４０Ｐ１は、相互排他手段４１Ｐ１に並列処理に用いる資源の確保のためにロック取得を要求する。
【０１１７】
（３）相互排他手段４１Ｐ１は、主記憶装置９２の排他制御領域４３を用いてロックを取得する。
【０１１８】
（４）相互排他手段４１Ｐ１は、並列処理手段４０Ｐ１に対してロック取得ができた旨を通知する。
【０１１９】
（５）並列処理手段４０Ｐ１は、タスク管理内容保持領域４４にプロセッサＰ１上の並列処理を要求したタスクＰＴ−１の管理内容（要求内容、タスク番号その他の必要なデータ）を保持する。
【０１２０】
（６）並列処理手段４０Ｐ１は、優先度の低いタスクを実行している他のプロセッサＰ２〜Ｐｎへ割り込みをかける。ここでは、プロセッサＰｎへの割り込みがかけられたものとする。
【０１２１】
（７）並列処理手段４０Ｐ１は、相互排他手段４１Ｐ１に対して上記確保したロックの解除を要求する。
【０１２２】
（８）相互排他手段４１Ｐ１は、主記憶装置９２の排他制御領域４３のロックを解除する。
【０１２３】
（９）相互排他手段４１Ｐ１は、並列処理手段４０Ｐ１に対してロックの解除完了を通知する。
【０１２４】
（１０）並列処理手段４０Ｐ１は、タスクＰＴ−１に処理を戻す。
【０１２５】
（１１）プロセッサＰｎの並列処理手段４０Ｐｎは、相互排他手段４１Ｐｎに対して並列処理に用いる資源の確保のためのロック取得を要求する。
【０１２６】
（１２）相互排他手段４１Ｐｎは、主記憶装置９２の排他制御領域４３を用いてロックを取得する。
【０１２７】
（１３）相互排他手段４１Ｐｎは、並列処理手段４０Ｐｎに対してロックの取得完了を通知する。
【０１２８】
（１４）並列処理手段４０Ｐｎは、タスク管理内容保持領域４４内に格納されているタスク管理内容を取得する。
【０１２９】
（１５）並列処理手段４０Ｐｎは、タスク管理内容に基づいて新たなタスクを生成起動する。
【０１３０】
（１６）並列処理手段４０Ｐｎは、相互排他手段４１Ｐｎに対して上記確保したロックの解除を要求する。
【０１３１】
（１７）相互排他手段４１Ｐｎは、主記憶装置９２の排他制御領域４３のロックを解除する。
【０１３２】
（１８）相互排他手段４１Ｐｎは、並列処理手段４０Ｐｎに対してロックの解除完了を通知する。
【０１３３】
以上のタスク連携動作により、あるプロセッサＰ１〜Ｐｎで起動しているタスクＰＴ−１〜ＰＴ−ｎが、自身の処理単位を他のプロセッサに対して並列処理させることが可能となる。
【０１３４】
上記のように構成される並列処理システムにおける適用例としては、例えばマルチプロセッサの携帯端末において、アプリケーションを動作させる場合を説明する。
【０１３５】
ここで、アプリケーションが携帯端末上で映像（動画）と音声を同時に再生する機能を有し、そのうち音声出力処理を逐次タスクＡとして、映像出力処理を並列化タスクＢとして第１プロセッサ側１０のプロセッサＰ０上で動作させる場合を想定して、図１１を参照して説明する。
【０１３６】
並列化タスクＢは、上述した並列処理手段によって、第２プロセッサ側２０のプロセッサＰ１〜Ｐｎの何れかにタスクＣとして生成され起動される。
【０１３７】
生成されたタスクＣは、ＯＳサービス手段のファイルアクセス処理によって映像の画面出力を実行する。
【０１３８】
また、逐次タスクＡによる音声出力は、シングルタスクＯＳ３０のサービスによって音声の出力が実行される。
【０１３９】
音声と映像の同期を定期的に取る場合には、上述した代理手段７０によるシグナル通知動作によって逐次タスクＡとタスクＣ間のシグナル通知を行うことで同期をとる。
【０１４０】
また、タスクＣにおいて、映像に編集を加える処理を実行する場合には、その編集処理をタスク連携処理によって他のプロセッサ上にタスクＤとして生成起動する。
【０１４１】
タスクＣによる映像出力処理が終了した場合には、タスクＣからファイルアクセス動作によってシングルプロセッサ向けＯＳに終了通知を行う。
【０１４２】
本並列処理システムにおいては、並列処理手段４０Ｐ０〜４０Ｐｎ、ＯＳサービス手段５０Ｐ０〜５０Ｐｎ、制御処理中継手段６０及び代理手段７０については、モジュールとして実装することにより、シングルプロセッサ向けＯＳ３０及びプロセッサＰ０上で実行されるアプリケーションに改造を加えることなく、マルチプロセッサのシステム構成上で、シングルプロセッサ向けＯＳ３０及びアプリケーションをオーバヘッドなく動作させることができると共に、マルチプロセッサによる並列処理の恩恵を受けることが可能となる。
【０１４３】
次に、本発明を適用する第２例の並列処理システムについて、図１２以下を参照して説明する。図１２は、この第２例の形態による並列処理システムの構成を示すブロック図であり、図１と共通の構成要素については同じ符号を用いている。図１２に示す第２例では、第１例における並列処理手段４０Ｐ０〜４０Ｐｎを、それぞれ並列処理通信手段４００Ｐ０〜４００Ｐｎと制御代理手段５００Ｐ０〜５００Ｐｎとで構成した場合を示している。
【０１４４】
図１２に示すように、本例の並列処理システムにおいて、システムバス９１で接続される複数のプロセッサ（ＣＰＵ）Ｐ０〜Ｐｎ（ｎは１以上の整数）からなるマルチプロセッサを、論理的に第１プロセッサ側１００と第２プロセッサ側２００の二組に分けて構成している点については、第１例と同様である。
【０１４５】
この第２例においては、第１プロセッサ側１００のプロセッサＰ０及び第２プロセッサ２００のプロセッサ（ＣＰＵ）Ｐ０〜Ｐｎの各プロセッサ上で動作するシングルプロセッサ向けＯＳ３００Ｐ０〜３００Ｐｎを実装している。
【０１４６】
また、第１プロセッサ側１００のプロセッサＰ０及び第２プロセッサ側２００のプロセッサＰ１〜Ｐｎのそれぞれに、並列処理を行うための並列処理通信手段４００Ｐ０〜４００Ｐｎと制御代理手段５００Ｐ０〜５００Ｐｎを実装して構成される。また、システムバス９１には、各プロセッサＰ０〜Ｐｎが共有する共有メモリとしての主記憶装置９２及びディスク装置等の外部記憶装置９３が接続されている。
【０１４７】
また、第１プロセッサ側１００と第２プロセッサ側２００間で、制御信号やデータのやり取りを行うための制御処理中継手段６００が独自に設けられている。
【０１４８】
なお、この第２例では、第１例で示した第１プロセッサ側１００のシングルプロセッサ向けＯＳ３００Ｐ０が第２プロセッサ側２００で実行されるプロセスと通信するための代理手段７０については、第１例と全く同じ機能を実行するため、便宜上省略している。
【０１４９】
また、第１例では、第２プロセッサ側２０のプロセッサＰ１〜Ｐｎ上のタスクからのファイルアクセス要求に対してタスクのswitch（スイッチ）がなされることを説明したが、本例においても、第２プロセッサ側２００からのファイルアクセスが可能であり、ファイルアクセス要求を行なった第２プロセッサ側２００のプロセスＰＰ−１〜ＰＰｎは、第２プロセッサ側２００のシングルプロセッサ向けＯＳ３００Ｐ１〜３００Ｐｎによってプロセスのswitch（スイッチ）が行なわれる。
【０１５０】
上記各プロセッサＰ０〜Ｐｎに実装されるシングルプロセッサ向けＯＳ３００Ｐ０〜３００Ｐｎについては、リアルタイムＯＳのようなメモリ保護機能を実現する仮想記憶機構を持たないＯＳだけではなく、既存のＯＳであるＬｉｎｕｘやＷｉｎｄｏｗｓ(R)等といった仮想記憶機構を備えるＯＳも用いることが可能であり、各プロセッサＰ０〜Ｐｎの全て、もしくは一部においてメモリ保護機構の実現が可能である点で第１例と相違する。
【０１５１】
なお、シングルプロセッサ向けＯＳ３００Ｐ０〜３００Ｐｎは、全部が同じ種類のＯＳである必要はなく、互いに異なる種類のＯＳであってもよい。
【０１５２】
この例では、並列処理を行うための処理単位であるタスクが互いのプロセッサ間でメモリ保護されており、その意味で第１例のタスクと区別するためにプロセスと称することとする。
【０１５３】
本例による並列処理システムにおいては、第１プロセッサ側１００のシングルプロセッサ向けＯＳ３００Ｐ０上で動作するアアプリケーションの処理単位のうち、並列化を行えないプロセス（逐次プロセスＳＰ）を第１プロセッサ側１００のプロセッサＰ０で処理し、アプリケーション内で並列化を行えるタスクを第２プロセッサ側２００において新たなプロセスＰＰ−１〜ＰＰ−ｎとして生成し並列処理をさせる。
【０１５４】
並列処理通信手段４００Ｐ０及び並列処理通信手段４００Ｐ１〜４００Ｐｎは、プロセスとシングルプロセッサ向けＯＳＯＳ３００Ｐ０〜３００Ｐｎとの間で、プロセスの生成、起動、停止、終了、削潤A及びその他のプロセスに関する制御情報の受け渡しを行う機能を有する。
【０１５５】
ここで、第１プロセッサ側１００と第２プロセッサ側２００間においては、制御処理中継手段６００を介してタスクの生成、起動、停止、終了、削除等に関する制御情報やデータをやり取りする。
【０１５６】
また、制御代理手段５００Ｐ０及び制御代理手段５００Ｐ１〜５００Ｐｎは、シングルプロセッサ向けＯＳＯＳ３００Ｐ０〜３００Ｐｎからプロセスへの処理要求を入手してプロセスを起動する機能を有する。
【０１５７】
制御処理中継手段６００は、第１プロセッサ側１０と第２プロセッサ側２０間で、制御信号やデータのやり取りを行うための手段であり、複数のプロセッサで並列処理される複数のプロセス間の制御に使用される。
【０１５８】
以下、上記のように構成される第２例の並列処理システムの動作について、図面を参照して詳しく説明する。
【０１５９】
ここでは、第１プロセッサ側１００のシングルプロセッサ向けＯＳ３００Ｐ０上でアプリケーションが動作し、そのアプリケーションの処理単位のうち、第１プロセッサ側１００のプロセッサＰ０で処理する処理単位を逐次プロセスＳＰとし、アプリケーション内で並列化を行えるプロセスであって、第２プロセッサ側２００に対してタスクＰＰ−１〜ＰＰ−ｎとして並列処理をさせる処理単位を並列化プロセスＰＰとする。
【０１６０】
この第２例の並列処理システムにおいては、あるプロセス（タスク）を起動した後に、呼び出し側のプロセス（タスク）である並列化プロセスＰＰが、起動したプロセスＰＰ−１〜ＰＰ−ｎの終了を待ち合わせる並列処理の同期起動と、呼び出し側のプロセス（タスク）である並列化プロセスＰＰが、起動したプロセスＰＰ−１〜ＰＰ−ｎの終了を待ち合わせなくとよい並列処理の非同期起動とが可能である。
【０１６１】
まず、プロセスの並列処理の同期起動の動作について、図１３を参照して説明する。
【０１６２】
ここでは、第１プロセッサ側１００の並列化プロセスＰＰが、第２プロセッサ側２００のプロセッサＰｋ（１≦ｋ≦ｎ）において、第２プロセッサ側２００で起動させる処理単位であるプロセスＰＰ−ｋとして予め生成されているものとする。
【０１６３】
（１）第２プロセッサ側２００のプロセッサＰｋ（１≦ｋ≦ｎ）上のプロセスＰＰ−ｋが、並列処理通信手段４００Ｐｋに対して、自プロセスに属する処理の情報を登録する。これにより、プロセスＰＰ−ｋは待機状態となっている。
【０１６４】
（２）並列処理通信手段４００Ｐｋは、シングルプロセッサ向けＯＳ３００Ｐｋ経由で主記憶装置９２（共有メモリ）上に必要なデータをアクセスする要求を行う。
【０１６５】
（３）これにより、プロセスＰＰ−ｋに属する処理の情報が主記憶装置９２（共有メモリ）に格納される。
【０１６６】
（４）プロセッサＰ０上のプロセスＰＰは、並列処理通信手段４００Ｐ０に対して同期的な処理を依頼する。その後、プロセスＰＰは待機状態となる。
【０１６７】
（５）依頼を受けた並列処理通信手段４００Ｐ０は、シングルプロセッサ向けＯＳ３００Ｐ０経由で主記憶装置９２（共有メモリ）上のデータに対するアクセス要求を行う。
【０１６８】
（６）シングルプロセッサ向けＯＳ３００Ｐ０により主記憶装置９２（共有メモリ）がアクセスされる。
【０１６９】
（７）並列処理通信手段４００Ｐ０は、主記憶装置９２（共有メモリ）からプロセスＰＰ−ｋに属する処理の情報を取得する。これにより、プロセスＰＰ−ｋを実行するプロセッサ番号とプロセス番号が取得される。
【０１７０】
（８）並列処理通信手段４００Ｐ０は、シングルプロセッサ向けＯＳ３００Ｐ０経由で主記憶装置９２（共有メモリ）から取得した情報に基づいて通信依頼を要求する。
【０１７１】
（９）シングルプロセッサ向けＯＳ３００Ｐ０により、通信に必要な情報が制御処理中継手段６００に設定される。
【０１７２】
（１０）これにより、制御処理中継手段６００からプロセッサＰｋのシングルプロセッサ向けＯＳ３００Ｐｋに対して処理要求が送信される。
【０１７３】
（１１）プロセッサＰｋの制御代理手段５００Ｐｋは、シングルプロセッサ向けＯＳ３００Ｐｋ経由で送信された処理要求を入手する。
【０１７４】
（１２）そして、制御代理手段５００Ｐｋは、入手した処理要求によりプロセスＰＰ−ｋを起動する。
【０１７５】
（１３）これにより、待機状態にあったプロセスＰＰ−ｋは処理を実行する。
【０１７６】
（１４）処理が終了後、プロセスＰＰ−ｋは、その旨の情報を並列処理通信手段４００Ｐｋに通知する。
【０１７７】
（１５）通知を受けた並列処理通信手段４００Ｐｋは、シングルプロセッサ向けＯＳ３００Ｐｋ経由で通知された情報に基づいて通信依頼を要求する。
【０１７８】
（１６）シングルプロセッサ向けＯＳ３００Ｐｋにより、通信に必要な情報が制御処理中継手段６００に設定される。
【０１７９】
（１７）これにより、制御処理中継手段６００からプロセッサＰ０のシングルプロセッサ向けＯＳ３００Ｐ０に対して処理要求が送信される。
【０１８０】
（１８）プロセッサＰ０の制御代理手段５００Ｐ０は、シングルプロセッサ向けＯＳ３００Ｐ０経由で送信された処理要求を入手する。
【０１８１】
（１９）そして、制御代理手段５００Ｐ０は、入手した処理要求によりプロセスＰＰを起動する。
【０１８２】
以上により、第１プロセッサ側１００のプロセッサＰ０上のプロセスＰＰと第２プロセッサ側２００のプロセッサＰＰ−ｋとの間での同期的な処理が実現される。
【０１８３】
次に、プロセスの並列処理の非同期起動の動作について、図１４を参照して説明する。
【０１８４】
ここでも、第１プロセッサ側１００の並列化プロセスＰＰが、第２プロセッサ側２００のプロセッサＰｋ（１≦ｋ≦ｎ）において、第２プロセッサ側２００で起動させる処理単位であるプロセスＰＰ−ｋとして予め生成されているものとする。
【０１８５】
（１）処理を行っていた第２プロセッサ側２００のプロセッサＰｋ（１≦ｋ≦ｎ）上のプロセスＰＰ−ｋが、並列処理通信手段４００Ｐｋに対して、自プロセスに属する処理の情報を登録する。これにより、プロセスＰＰ−ｋは待機状態となる。
【０１８６】
（２）並列処理通信手段４００Ｐｋは、シングルプロセッサ向けＯＳ３００Ｐｋ経由で主記憶装置９２（共有メモリ）上に必要なデータをアクセスする要求を行う。
【０１８７】
（３）これにより、プロセスＰＰ−ｋに属する処理の情報が主記憶装置９２（共有メモリ）に格納される。
【０１８８】
（４）プロセッサＰ０上のプロセスＰＰは、並列処理通信手段４００Ｐ０に対して非同期的な処理を依頼する。この場合、プロセスＰＰは待機状態となることなくその後も処理を継続する。
【０１８９】
（５）依頼を受けた並列処理通信手段４００Ｐ０は、シングルプロセッサ向けＯＳ３００Ｐ０経由で主記憶装置９２（共有メモリ）上のデータに対するアクセス要求を行う。
【０１９０】
（６）シングルプロセッサ向けＯＳ３００Ｐ０により主記憶装置９２（共有メモリ）がアクセスされる。
【０１９１】
（７）並列処理通信手段４００Ｐ０は、主記憶装置９２（共有メモリ）からプロセスＰＰ−ｋに属する処理の情報を取得する。これにより、プロセスＰＰ−ｋを実行するプロセッサ番号とプロセス番号が取得される。
【０１９２】
（８）並列処理通信手段４００Ｐ０は、シングルプロセッサ向けＯＳ３００Ｐ０経由で主記憶装置９２（共有メモリ）から取得した情報に基づいて通信依頼を要求する。
【０１９３】
（９）シングルプロセッサ向けＯＳ３００Ｐ０により、通信に必要な情報が制御処理中継手段６００に設定される。
【０１９４】
（１０）これにより、制御処理中継手段６００からプロセッサＰｋのシングルプロセッサ向けＯＳ３００Ｐｋに対して処理要求が送信される。
【０１９５】
（１１）プロセッサＰｋの制御代理手段５００Ｐｋは、シングルプロセッサ向けＯＳ３００Ｐｋ経由で送信された処理要求を入手する。
【０１９６】
（１２）そして、制御代理手段５００Ｐｋは、入手した処理要求によりプロセスＰＰ−ｋを起動する。
【０１９７】
（１３）これにより、待機状態にあったプロセスＰＰ−ｋは処理を実行する。
【０１９８】
以上により、第１プロセッサ側１００のプロセッサＰ０上のプロセスＰＰと第２プロセッサ側２００のプロセッサＰＰ−ｋとの間での非同期的な処理が実現される。
【０１９９】
さらに、第２例の並列処理システムにおける制御処理中継手段６００による処理動作について、図１５及び図１６を参照して説明する。
【０２００】
まず、制御処理中継手段６００の構成を図１５に示す。図示のように、制御処理中継手段６００は、各プロセッサＰ０〜Ｐｎに対応した割り込み制御装置６０１Ｐ０〜６０１Ｐｎと、各プロセッサＰ０〜Ｐｎに対応した通信領域６０２Ｐ０〜６０２Ｐｎとを備えて構成される。ここで、通信領域６０２Ｐ０〜６０２Ｐｎは、主記憶装置９２内に確保される。
【０２０１】
上記割り込み制御装置６０１Ｐ０〜６０１Ｐｎについては、図６に示した第１例の制御処理中継手段６０の構成と同様であり、割込指示部６０１ａ、割込状態保持部６０１ｂ、割込取消部６０１ｃにより構成される。
【０２０２】
また、通信領域６０２Ｐ０〜６０２Ｐｎについても、図６に示した第１例と基本的に同じ構成であり、図６の通信理由保持領域６２ａと通信データ保持領域６２ｂとを組み合わせた通信キュー６０２ａと、排他制御領域６０２ｃにより構成される。
【０２０３】
第１プロセッサ側１００の並列処理通信手段４００Ｐ０から第２プロセッサ側２０のプロセッサＰｎへの通信処理を例にとり、図１６を参照してその動作を説明する。
【０２０４】
（１）並列処理通信手段４００Ｐ０は、プロセッサＰ１用の通信領域６０２Ｐｎの排他制御領域６０２ｂにロックをかける。具体的には、排他制御領域６０２ｂに格納されるlock変数をロック状態とすることにより、当該プロセッサＰｎ用の通信領域６０２Ｐｎが他のプロセッサで使用されるのを排する。
【０２０５】
（２）並列処理通信手段４００Ｐ０は、通信理由情報と通信データ（要求内容を含む必要データ）を、通信領域６０２Ｐｎの通信キュー６０２ａに格納する。
【０２０６】
格納される通信理由情報としては、上述したようにプロセスの生成起動のための通信処理であれば、「プロセス起動」を示す情報（例えば、並列処理に対応して予め定められている数値等のデータ）が格納される。
【０２０７】
（３）（１）の時点で通信領域６０２Ｐｎの通信キュー６０２ａが空であった場合、並列処理通信手段４００Ｐ０は、自身の割込制御装置６０１Ｐ０の割込指示部６０１ａに対して、プロセッサＰｎへの割り込みを指示する。
【０２０８】
（４）プロセッサＰ０の並列処理通信手段４００Ｐ０は、プロセッサＰｎ用の通信領域６０２Ｐｎの排他制御領域６０２ｂをアンロック状態とする。（１）の時点で通信領域６０２Ｐｎの通信キュー６０２ａが空でない場合には、割り込みの必要がないので、ここで処理を終了する。
【０２０９】
（５）割込制御装置６０１Ｐ０の割込指示部６０１ａは、プロセッサＰｎに対応する割込制御装置６０１Ｐｎの割込状態保持部６０１ｂに、割り込みを示す情報をセットする。これにより、プロセッサＰｎが割り込み状態となる。
【０２１０】
（６）プロセッサＰｎのシングルプロセッサ向けＯＳ３００ｐｎは、プロセッサＰｎ用の割込制御装置６０１Ｐｎの割込状態保持部６０１ｂの状態より、割り込みを受理する。
【０２１１】
（７）プロセッサＰｎのシングルプロセッサ向けＯＳ３００ｐｎは、割込制御装置６０１Ｐｎの割込取消部６０１ｃによって自身の割込状態保持部６０１ｂの割り込み情報をクリアすることにより、自身の割り込み状態を解除する。
【０２１２】
（８）プロセッサＰｎのシングルプロセッサ向けＯＳ３００ｐｎは、自身の制御代理手段５００Ｐｎを起動する。
【０２１３】
（９）プロセッサＰｎの制御代理手段５００Ｐｎは、自身の通信領域６０２Ｐｎの排他制御領域６０２ｂにロックをセットする。
【０２１４】
（１０）プロセッサＰｎの制御代理手段５００Ｐｎは、さらに、自身の通信領域６０２Ｐｎの通信キュー６０２ａから、通信理由情報と通信データをそれぞれ削除する。
【０２１５】
（１１）プロセッサＰｎの制御代理手段５００Ｐｎが、プロセッサＰｎ用の通信領域６０２Ｐｎの排他制御領域６０２ｂをアンロックとする。これにより、当該プロセッサＰｎ用の通信領域６０２Ｐｎが他のプロセッサから使用できるようになる。
【０２１６】
以上のように、制御処理中継手段６００を用いることにより、第１プロセッサ側１００と第２プロセッサ側２００間で、制御信号やデータのやり取りが実現される。
【０２１７】
次に、本発明を適用する第３例による並列処理システムについて、図１７以下を参照して説明する。図１７は、この第３例の並列処理システムの構成を示すブロック図であり、図１３と共通の構成要素については同じ符号を用いている。
【０２１８】
上記説明した第２例における同期的な処理では、プロセス相互において、一方のプロセスが他方のプロセスによって主記憶装置９２上のデータが更新されたかどうかのチェックを繰り返す必要があり、その繰り返しの分だけ余計な処理が発生していたが、本例では、そのような余計な処理を必要としない高性能なプロセス間の同期とデータ受け渡しを可能にするものである。
【０２１９】
図１７に示すように、第３例の並列処理システムにおいては、第２例と同様に、システムバス９１で接続される複数のプロセッサ（ＣＰＵ）Ｐ０〜Ｐｎ（ｎは１以上の整数）からなるマルチプロセッサを、論理的に第１プロセッサ側１００と第２プロセッサ側２００の二組に分けて構成し、第１プロセッサ側１００のプロセッサＰ０及び第２プロセッサ２００のプロセッサ（ＣＰＵ）Ｐ０〜Ｐｎの各プロセッサ上で動作するシングルプロセッサ向けＯＳ３００Ｐ０〜３００Ｐｎを実装している。
【０２２０】
この第３例では、第２例において、第１プロセッサ側１００のプロセッサＰ０及び第２プロセッサ側２００のプロセッサＰ１〜Ｐｎの並列処理を行うための並列処理通信手段４００Ｐ０〜４００Ｐｎと制御代理手段５００Ｐ０〜５００Ｐｎに加えて、第１プロセッサ側１００のプロセッサＰ０及び第２プロセッサ側２００のプロセッサＰ１〜Ｐｎ上で実行される各プロセス間での通信を実現するためのプロセス間通信手段１０００Ｐ０〜１０００Ｐｎを新たに備えた点を特徴としている。
【０２２１】
すなわち、本例では、これまでマルチプロセッサ向けＯＳに実装されていたプロセス間通信の機能を、マルチプロセッサ上でシングルプロセッサ向けＯＳ及びアプリケーションを動作させるシングルプロセッサ向けＯＳによる並列処理システム上で実現するものであり、ユーザレベルによるプロセス間通信機能の実装を可能にしている。
【０２２２】
なお、この例でも、第１例で示した第１プロセッサ側１００のシングルプロセッサ向けＯＳ３００Ｐ０が第２プロセッサ側２００で実行されるプロセスと通信するための代理手段７０については、第１例と全く同じ機能を実行するため、便宜上省略している。
【０２２３】
上記プロセス間通信手段１０００Ｐ０〜１０００Ｐｎ以外の構成要素に関する構成及び動作については、上述した第２例と全く同じであるので、以下では、プロセス間通信手段１０００Ｐ０〜１０００Ｐｎについてのみ説明することとする。
【０２２４】
上記プロセス間通信手段１０００Ｐ０〜１０００Ｐｎは、セマフォ（semaphore）やメッセージキュー等の方式を用いることにより、プロセッサＰ１〜Ｐｎ上で実行される各プロセス間での通信を実現するものである。
【０２２５】
ここでは、プロセス間通信手段１０００Ｐ０〜１０００Ｐｎがセマフォ方式を用いてプロセス間通信を行なう場合について説明する。
【０２２６】
図１８に示すように、第２プロセッサ側２００のプロセッサＰｍとプロセッサＰｎ上でそれぞれプロセスＰＰ−ｍとプロセスＰＰ−ｎが実行されている場合において、プロセスＰＰ−ｍとプロセスＰＰ−ｎがプロセス間通信手段１０００Ｐｍと１０００Ｐｎによるセマフォ方式を用いて通信を行う場合について説明する。
【０２２７】
セマフォ方式とは、複数のプロセスが同時実行されるマルチタスクＯＳにおいて、複数プロセス間で通信して同期をとるための方式であり、セマフォは一種の共有フラグ（カウンタ）で、同期をとるプロセス同士がこのカウンタに注目し、カウンタの変化に応じて処理を行なうようにすることで通信（同期）を実現する。
【０２２８】
まず、図１８において、プロセッサＰｍ上のプロセスＰＰ−ｍが主記憶装置９２のセマフォ情報領域（共有フラグ）をｕｐ又はｄｏｗｎする場合の動作を説明する。ここで、セマフォｕｐは、セマフォ情報領域のカウンタ値をインクリメントし、セマフォｄｏｗｎは、セマフォ情報領域のカウンタ値をデクリメントする。セマフォｄｏｗｎできない場合、当該プロセスはスリープして待ち状態となり、セマフォｕｐによってウェイクアップされる。
【０２２９】
（１）プロセッサＰｍ上のプロセスＰＰ−ｍがセマフォ（セマフォカウンタ）をｕｐ又はｄｏｗｎする場合、プロセス間通信手段１０００Ｐｍにその旨を要求する。
【０２３０】
（２）要求を受けたプロセス間通信手段１０００Ｐｍは、主記憶装置９２に確保されているセマフォ番号で区別される共有フラグとしてのセマフォ情報領域＃Ｎ（このセマフォ情報領域は、システムによって予め決定される数だけ確保される）にアクセスすることにより、セマフォをｕｐ又はｄｏｗｎできることが判明する。
【０２３１】
次に、図１９において、プロセッサＰｍ上のプロセスＰＰ−ｍがセマフォ（セマフォフラグ）をｄｏｗｎする場合の動作を説明する。
【０２３２】
（１）プロセッサＰｍ上のプロセスＰＰ−ｍがセマフォ（セマフォフラグ）をｄｏｗｎしようとプロセス間通信手段１０００Ｐｍに要求する。
【０２３３】
（２）要求を受けたプロセス間通信手段１０００Ｐｍは、主記憶装置９２に確保されているセマフォ情報領域＃Ｎにアクセスする。ここでは、セマフォ情報領域＃Ｎには、セマフォのカウンタ値として初期値「０」が設定されており、ｄｏｗｎしようとしてもｄｏｗｎできないように予め定められている。よって、セマフォをｄｏｗｎできないことが判明する。
【０２３４】
（３）プロセス間通信手段１０００Ｐｍは、シングルプロセッサ向けＯＳ３００Ｐｍに対しシステムコールを用いて上記プロセスＰＰ−ｍをスリープさせるように要求する。
【０２３５】
（４）シングルプロセッサ向けＯＳ３００Ｐｍはシステムコールを用いてプロセスＰＰ−ｍをスリープさせ、ランキューから外す。
【０２３６】
すなわち、上記の場合、プロセスＰＰ−ｍはセマフォをｄｏｗｎできないのでスリープする。
【０２３７】
さらに、図２０において、上記のようにプロセスＰＰ−ｍがスリープした状態で、同じプロセッサＰｍ上のプロセスＰＰ−ｍ１がセマフォをｕｐする場合の動作を説明する。
【０２３８】
（１）プロセスＰＰ−ｍ１がセマフォのｕｐをプロセス間通信手段１０００Ｐｍに要求する。
【０２３９】
（２）プロセス間通信手段１０００Ｐｍは、主記憶装置９２に確保されているセマフォ情報領域＃Ｎにアクセスすることにより、セマフォ待ちのプロセスＰＰ−ｍが存在することが判明する。
【０２４０】
（３）さらに、プロセス間通信手段１０００Ｐｍは、制御処理中継手段６００に対してメッセージ（制御メッセージ）を送信することで、プロセスＰＰ−ｍのウェイクアップを要求する。
【０２４１】
（４）制御代理手段５００Ｐｍが、制御処理中継手段６００からメッセージを受信する。この制御処理中継手段６００によるメッセージの中継は、図１５、図１６で説明した動作に基づいて行われる。
【０２４２】
（５）制御代理手段５００Ｐｍは、メッセージからセマフォ待ちのプロセスのウェイクアップ要求であると判断し、シングルプロセッサ向けＯＳ３００Ｐｍに対しシステムコールを用いて待ち状態の上記プロセスＰＰ−ｍをウェイクアップさせるよう要求する。
【０２４３】
（６）シングルプロセッサ向けＯＳ３００Ｐｍは、システムコールを用いて要求されたプロセスＰＰ−ｍをウェイクアップし、ランキューへつなぐ。この場合、ウェイクアップされたプロセスＰＰ−ｍは再度セマフォをｄｏｗｎしようと試みる。
【０２４４】
なお、上記処理（３）、（４）における制御処理中継手段６００による制御メッセージの中継を利用することなく、シングルプロセッサ向けＯＳ３００Ｐｍの通信機能を用いて、プロセス間通信手段１０００Ｐｍから制御代理手段５００Ｐｍに対して直接プロセスＰＰ−ｍのウェイクアップを要求するようにすれば、処理（３）、（４）が簡略されて高速化が可能である。
【０２４５】
図２１において、上記のようにプロセッサＰｍ上のプロセスＰＰ−ｍがスリープした状態で、他のプロセッサＰｎ上のプロセスＰＰ−ｎがセマフォをｕｐする場合の動作を説明する。
【０２４６】
（１）プロセッサＰｎ上のプロセスＰＰ−ｎがセマフォのｕｐを自プロセッサＰｎのプロセス間通信手段１０００Ｐｎに要求する。
【０２４７】
（２）プロセス間通信手段１０００Ｐｎは、主記憶装置９２に確保されているセマフォ情報領域＃Ｎにアクセスすることにより、セマフォ待ちのプロセスＰＰ−ｍが存在することが判明する。
【０２４８】
（３）さらに、プロセス間通信手段１０００Ｐｎは、制御処理中継手段６００に対してメッセージ（制御メッセージ）を送信することで、プロセスＰＰ−ｍのウェイクアップを要求する。
【０２４９】
（４）次いで、プロセッサＰｍの制御代理手段５００Ｐｍが、制御処理中継手段６００からメッセージを受信する。この制御処理中継手段６００によるメッセージの中継は、図１５、図１６で説明した動作に基づいて行われる。
【０２５０】
（５）制御代理手段５００Ｐｍは、メッセージからセマフォ待ちのプロセスのウェイクアップ要求であると判断し、シングルプロセッサ向けＯＳ３００Ｐｍに対しシステムコールを用いて待ち状態の上記プロセスＰＰ−ｍをウェイクアップさせるよう要求する。
【０２５１】
（６）シングルプロセッサ向けＯＳ３００Ｐｍは、システムコールを用いて要求されたプロセスＰＰ−ｍをウェイクアップし、ランキューへつなぐ。この場合、ウェイクアップされたプロセスＰＰ−ｍは再度セマフォをｄｏｗｎしようと試みる。
【０２５２】
次に、図２２に示すように、第２プロセッサ側２００のプロセッサＰｍとプロセッサＰｎ上でそれぞれプロセスＰＰ−ｍとプロセスＰＰ−ｎが実行されている場合において、プロセスＰＰ−ｍとプロセスＰＰ−ｎがプロセス間通信手段１０００Ｐｍと１０００Ｐｎによるメッセージキュー方式を用いて通信を行う場合について説明する。
【０２５３】
メッセージキュー方式とは、複数のプロセス間で通信を行なう方法であって、名前の通り「キュー」を作成して、そこに情報としてのメッセージ（プロセス相互でやり取りされる処理データ）を格納していく方式である。メッセージキュー方式では、受け取り側のプロセスはそのメッセージを任意の順番で受け取ることができる。また、メッセージを何れかのプロセスが受け取るとそのメッセージはキューから消える。
【０２５４】
図２２において、プロセッサＰｍ上のプロセスＰＰ−ｍがメッセージキュー方式によってメッセージを受信する場合の動作を説明する。ここでは、取得すべきメッセージが主記憶装置９２に確保されているキュー番号で区別されるキュー情報領域＃Ｎ（このキュー情報領域は、システムによって予め決定される数だけ確保される）に存在する場合である。
【０２５５】
（１）プロセッサＰｍ上のプロセスＰＰ−ｍがメッセージの受信をするためにプロセス間通信手段１０００Ｐｍにその旨を要求する。
【０２５６】
（２）要求を受けたプロセス間通信手段１０００Ｐｍは、主記憶装置９２に確保されているキュー情報領域＃Ｎをアクセスし、メッセージを受信する。
【０２５７】
（３）そして、プロセス間通信手段１０００Ｐｍは、受信したメッセージを要求元のプロセスＰＰ−ｍにコピーする。この時点で当該メッセージは主記憶装置９２に確保されているキュー情報領域＃Ｎから消去される。
【０２５８】
次に、図２３において、プロセッサＰｍ上のプロセスＰＰ−ｍがメッセージキュー方式によってメッセージを受信する場合の第２の動作を説明する。ここでは、取得すべきメッセージが主記憶装置９２に確保されているキュー情報領域＃Ｎに存在しない場合である。
【０２５９】
（１）プロセッサＰｍ上のプロセスＰＰ−ｍがメッセージの受信をするためにプロセス間通信手段１０００Ｐｍにその旨を要求する。
【０２６０】
（２）要求を受けたプロセス間通信手段１０００Ｐｍは、主記憶装置９２に確保されているキュー情報領域＃Ｎにアクセスする。この場合、取得すべきメッセージがに確保されているキュー情報領域＃Ｎに存在せず、メッセージを受信できないことが判明する。
【０２６１】
（３）プロセス間通信手段１０００Ｐｍは、シングルプロセッサ向けＯＳ３００Ｐｍに対しシステムコールを用いて上記プロセスＰＰ−ｍをスリープさせるように要求する。
【０２６２】
（４）シングルプロセッサ向けＯＳ３００Ｐｍはシステムコールを用いてプロセスＰＰ−ｍをスリープさせ、ランキューから外す。
【０２６３】
すなわち、上記の場合、プロセスＰＰ−ｍはメッセージを受信できないのでスリープする。
【０２６４】
図２４において、プロセッサＰｍ上のプロセスＰＰ−ｍがメッセージキュー方式によってメッセージを送信する場合の動作を説明する。ここでは、送信しようとするメッセージ待ちのプロセスが存在せず、主記憶装置９２に確保されているキュー情報領域＃Ｎへのメッセージの送信のみを行なう場合である。
【０２６５】
（１）プロセッサＰｍ上のプロセスＰＰ−ｍがメッセージの送信するためにプロセス間通信手段１０００Ｐｍにその旨を要求する。
【０２６６】
（２）要求を受けたプロセス間通信手段１０００Ｐｍは、主記憶装置９２に確保されているキュー情報領域＃Ｎにアクセスし、プロセスＰＰ−ｍからのメッセージを格納する。
【０２６７】
さらに、図２５において、プロセッサＰｍ上のプロセスがメッセージキュー方式によってメッセージを送信する場合の動作を説明する。ここでは、送信しようとするメッセージ待ちのプロセスが存在する場合である。すなわち、図２３の例のように、プロセスＰＰ−ｍがメッセージを受信できずにスリープしている状態でプロセスＰＰ−ｍ１からメッセージが送信される場合である。
【０２６８】
（１）プロセスＰＰ−ｍ１がメッセージの送信をプロセス間通信手段１０００Ｐｍに要求する。
【０２６９】
（２）プロセス間通信手段１０００Ｐｍは、主記憶装置９２に確保されているキュー情報領域＃Ｎにアクセスし、プロセスＰＰ−ｍ１からのメッセージを格納する。ここで、メッセージ待ちのプロセスＰＰ−ｍが存在することが判明する。
【０２７０】
（３）さらに、プロセス間通信手段１０００Ｐｍは、制御処理中継手段６００に対して制御メッセージを送信することで、プロセスＰＰ−ｍのウェイクアップを要求する。
【０２７１】
（４）制御代理手段５００Ｐｍが、制御処理中継手段６００から制御メッセージを受信する。
【０２７２】
（５）制御代理手段５００Ｐｍは、制御メッセージからメッセージ待ちのプロセスのウェイクアップ要求であると判断し、シングルプロセッサ向けＯＳ３００Ｐｍに対しシステムコールを用いて待ち状態の上記プロセスＰＰ−ｍをウェイクアップさせるよう要求する。
【０２７３】
（６）シングルプロセッサ向けＯＳ３００Ｐｍは、システムコールを用いて要求されたプロセスＰＰ−ｍをウェイクアップし、ランキューへつなぐ。
【０２７４】
この場合、ウェイクアップされたプロセスＰＰ−ｍは再度メッセージの受信を試みる。これにより、プロセスＰＰ−ｍ１からのメッセージがプロセスＰＰ−ｍで受信される。
【０２７５】
なお、上記処理（３）、（４）における制御処理中継手段６００による制御メッセージの中継を利用することなく、シングルプロセッサ向けＯＳ３００Ｐｍの通信機能を用いて、プロセス間通信手段１０００Ｐｍから制御代理手段５００Ｐｍに対して直接プロセスＰＰ−ｍのウェイクアップを要求するようにすれば、処理（３）、（４）が簡略されて高速化が可能である。
【０２７６】
図２６において、図２３に示すようにプロセッサＰｍ上のプロセスＰＰ−ｍがスリープしてメッセージ待ちの状態で、他のプロセッサＰｎ上のプロセスＰＰ−ｎがメッセージを送信する場合の動作を説明する。
【０２７７】
（１）プロセッサＰｎ上のプロセスＰＰ−ｎがメッセージの送信を自プロセッサＰｎのプロセス間通信手段１０００Ｐｎに要求する。
【０２７８】
（２）プロセス間通信手段１０００Ｐｎは、主記憶装置９２に確保されているキュー情報領域＃Ｎにアクセスし、プロセスＰＰ−ｎからのメッセージを格納する。ここで、メッセージ待ちのプロセスＰＰ−ｍが存在することが判明する。
【０２７９】
（３）さらに、プロセス間通信手段１０００Ｐｎは、制御処理中継手段６００に対して制御メッセージを送信することで、プロセスＰＰ−ｍのウェイクアップを要求する。
【０２８０】
（４）次いで、プロセッサＰｍの制御代理手段５００Ｐｍが、制御処理中継手段６００から制御メッセージを受信する。
【０２８１】
（５）制御代理手段５００Ｐｍは、制御メッセージからメッセージ待ちのプロセスのウェイクアップ要求であると判断し、シングルプロセッサ向けＯＳ３００Ｐｍに対しシステムコールを用いて待ち状態の上記プロセスＰＰ−ｍをウェイクアップさせるよう要求する。
【０２８２】
（６）シングルプロセッサ向けＯＳ３００Ｐｍは、システムコールを用いて要求されたプロセスＰＰ−ｍをウェイクアップし、ランキューへつなぐ。
【０２８３】
この場合、ウェイクアップされたプロセスＰＰ−ｍは再度メッセージの受信を試みる。これにより、プロセスＰＰ−ｎからのメッセージがプロセスＰＰ−ｍで受信され、異なるプロセッサ相互でプロセス間の通信が実行される。
【０２８４】
本例の並列処理システムによれば、上記のようにプロセス間通信手段１０００Ｐ０〜Ｐｎによって、セマフォ方式又はメッセージキュー方式を用いた同一プロセッサ内又は異なるプロセッサ間のプロセス通信（同期又はメッセージの送受）を行うことにより、プロセス切り替えなどのプロセス制御やデータのやり取りを行うことが可能となる。
【０２８５】
シングルプロセッサ向けＯＳによるプロセス間通信は、同一プロセッサ内のプロセス間に限られ、異なるプロセッサ間でのプロセス通信は処理の重いネットワーク等を利用して行う必要があったが、ネットワーク通信に比べて処理の高速な制御処理中継手段６００とプロセス間通信手段１０００Ｐ０〜Ｐｎによるセマフォ方式又はメッセージキュー方式を用いることで、シングルプロセッサ向けＯＳを実装するマルチプロセッサシステムにおいても、処理の早いプロセス間通信が実現できる。
【０２８６】
同一プロセッサ内のプロセス間通信に関しては、シングルプロセッサ向けＯＳによるプロセスのスリープからウェイクアップに要する処理性能とほぼ同等の性能が得られる。
【０２８７】
また、マルチプロセッサ向けＯＳと異なり、プロセッサ毎に異なるシングルプロセッサ向けＯＳを実装していてもプロセッサ相互でのプロセス間通信が可能となる利点がある。
【０２８８】
次に、上記プロセス間通信手段１０００Ｐ０〜１０００Ｐｎによるセマフォ方式及びメッセージキュー方式を用いたプロセス間通信の具体例について、図２７を参照して説明する。
【０２８９】
図２７において、プロセッサＰ０上でプロセスＰＰ−０が、プロセッサＰｊ上でプロセスＰＰ−ｊが、プロセッサＰｋ上でプロセスＰＰ−ｋがそれぞれ実行されている。ここでは、プロセスＰＰ−０がブラウザ、プロセスＰＰ−ｊがｊａｖａアプレット、プロセスＰＰ−ｋがＭＰＥＧ４アプリケーションとして動作し、図２８に示すように、プロセスＰＰ−０によるブラウザ１１００に埋め込まれたウィンドウ内で、プロセスＰＰ−ｊによるｊａｖａアプレットのコンテンツ１２００と、プロセスＰＰ−ｋによるＭＰＥＧ４映像コンテンツ１３００とが同期して表示される。
【０２９０】
この例では、第１プロセッサ側１００のシングルプロセッサ向けＯＳ３００Ｐ０上で動作するアアプリケーションの処理単位のうち、プロセスＰＰ−０をプロセッサＰ０上で動作させ、アプリケーション内で並列化を行えるプロセスであるプロセスＰＰ−ｊとプロセスＰＰ−ｋを第２プロセッサ側２００のプロセッサＰｊとプロセッサＰｋにおいて並列処理する場合である。
【０２９１】
図２７において、ｊａｖａアプレット（プロセスＰＰ−ｊ）とＭＰＥＧ４アプリケーション（プロセスＰＰ−ｋ）は起動されると、共にブラウザ（プロセスＰＰ−０）からのｊａｖａアプリデータ及びＭＰＥＧ４映像データの受信を待つ（ステップＳ１０１、Ｓ２０１）。
【０２９２】
ここで、プロセッサＰ０のプロセスＰＰ−０からプロセス間通信手段１０００Ｐ０によるメッセージ送信を利用して、ｊａｖａアプリデータ及びＭＰＥＧ４映像データがメッセージとして送信され、ｊａｖａアプレット（プロセスＰＰ−ｊ）及びＭＰＥＧ４アプリケーション（プロセスＰＰ−ｋ）で受信される。
【０２９３】
これにより、ｊａｖａアプレット（プロセスＰＰ−ｊ）による動作が開始され（ステップＳ１０２）、ＭＰＥＧ４アプリケーション（プロセスＰＰ−ｋ）によるデコード処理が開始される（ステップＳ２０２）。
【０２９４】
この例では、ｊａｖａアプレット（プロセスＰＰ−ｊ）による動作の方がＭＰＥＧ４アプリケーション（プロセスＰＰ−ｋ）によるデコード処理より早く終了することが予め分かっており、ｊａｖａアプレット（プロセスＰＰ−ｊ）は動作終了後に、ＭＰＥＧ４アプリケーション（プロセスＰＰ−ｋ）の処理完了を待つように、セマフォのカウンタの初期値を「０」に設定し、早く終了したｊａｖａアプレット（プロセスＰＰ−ｊ）がセマフォｄｏｗｎできないようになっている。また、ＭＰＥＧ４アプリケーション（プロセスＰＰ−ｋ）は処理終了後にセマフォｕｐするように定義されている。
【０２９５】
ｊａｖａアプレット（プロセスＰＰ−ｊ）は、セマフォｄｏｗｎしようとするが（ステップＳ１０３）、カウンタの初期値が「０」であるためにｄｏｗｎできずにスリープされ、セマフォ待ちの状態となる。
【０２９６】
ＭＰＥＧ４アプリケーション（プロセスＰＰ−ｋ）が処理が終了すると（ステップＳ２０３）、セマフォｕｐを要求する（ステップＳ２０４）。これにより、セマフォ待ちのｊａｖａアプレット（プロセスＰＰ−ｊ）がウェイクアップされ、セマフォｄｏｗｎが可能となる。
【０２９７】
以上の動作を、フレーム毎に繰り返すことにより、プロセスＰＰ−０によるブラウザ１１００に埋め込まれたウィンドウ内で、プロセスＰＰ−ｊによるｊａｖａアプレットのコンテンツ１２００と、プロセスＰＰ−ｋによるＭＰＥＧ４映像コンテンツ１３００とが同期して表示される。
【０２９８】
次に、本発明の第４例の並列処理システムについて、図２９以下を参照して説明する。図２９は、この第４例の並列処理システムの構成を示すブロック図であり、図１３と共通の構成要素については同じ符号を用いている。
【０２９９】
図２９に示すように、第４例の並列処理システムにおいては、システムバス９１で接続される複数のプロセッサ（ＣＰＵ）Ｐ１〜Ｐｎ（ｎは２以上の整数）からなるマルチプロセッサを構成しており、プロセッサＰ１〜Ｐｎの各プロセッサ上で動作するシングルプロセッサ向けＯＳ３００Ｐ１〜３００Ｐｎを実装している。
【０３００】
すなわち、マルチプロセッサを、論理的に第１プロセッサ側と第２プロセッサ側の二組に分ける構成をとっていない点が、第１例から第３例と相違する。
【０３０１】
この第４例では、上記第３例と同様に、プロセッサＰ１〜Ｐｎの並列処理を行うための並列処理通信手段４００Ｐ１〜４００Ｐｎと制御代理手段５００Ｐ１〜５００Ｐｎに加えて、プロセッサＰ１〜Ｐｎ上で実行される各プロセス間での通信を実現するためのプロセス間通信手段１０００Ｐ１〜１０００Ｐｎを備えている。
【０３０２】
一方、第１例のようなＯＳサービス手段５０Ｐ１〜５０Ｐｎや、第１例から第３例のような並列処理通信手段４００Ｐ１〜４００Ｐｎを備えることなく、各プロセッサＰ１〜Ｐｎ上のプロセス制御が可能である。また、各プロセッサＰ１〜Ｐｎ上のシングルプロセッサ向けＯＳ３００Ｐ１〜３００Ｐｎについては、同じＯＳである必要はなく互いに異なっていてもよい。
【０３０３】
すなわち、本例でも、これまでマルチプロセッサ向けＯＳに実装されていたプロセス間通信の機能を、マルチプロセッサ上でシングルプロセッサ向けＯＳ及びアプリケーションを動作させるシングルプロセッサ向けＯＳによる並列処理システム上で実現するものであり、ユーザレベルによるプロセス間通信機能の実装を可能にしている。
【０３０４】
この各プロセッサＰ１〜プロセッサＰｎ内における各プロセスの実行については、他のプロセッサとの排他制御を必要とすることなく行われる。
【０３０５】
個々のプロセッサＰ１〜プロセッサＰｎ内におけるプロセス間通信及びプロセッサ相互におけるプロセス間通信については、第３例で説明したように、プロセス間通信手段１０００Ｐ１〜１０００Ｐｎによるセマフォ方式及びメッセージキュー方式を用いて行われ、プロセス相互の同期処理及びデータの受け渡しが実行される。
【０３０６】
上記のようなシングルプロセッサ向けＯＳによる並列処理システムに適用される本発明のプロセッサ間通信システムについて図３０を参照して説明する。本発明のプロセッサ間通信システムは、第１例から第４例として示した何れの並列処理システムに対しても適用することができる。
【０３０７】
上記第３例及び第４の並列処理システムにおいては、セマフォ方式及びメッセージキュー方式を利用したプロセス間の同期とデータ受け渡しを可能にするプロセス間通信システムであって、共有メモリである主記憶装置に確保されているキュー情報領域を利用してデータの受け渡しを行うのに対して、本発明のプロセッサ間通信システムでは、そのような共有メモリを利用することなくシングルプロセッサ向けＯＳのＡＰＩが提供する通信機能を利用して、かつアプリケーションに改造を加えることなく、他のプロセッサ上のタスクとの間におけるプロセッサ間データ転送を可能にしたことを特徴としている。
【０３０８】
シングルプロセッサ向けＯＳが備えるＡＰＩのうち、複雑なＡＰＩとして提供される通信機能としては、例えばネットワーク（ＴＣＰ／ＩＰ）があり、簡単なＡＰＩとして提供される通信機能としては、例えば、セマフォやメッセージキュー方式がある。
【０３０９】
本発明のプロセッサ間通信システムでは、何れの通信機能も利用することが可能である。
【０３１０】
ここでは、第３例として示した図１７の並列処理システムに対して本発明のプロセッサ間通信システムを適用した第１の実施例について説明する。
【０３１１】
図３０に示すように、第１の実施例によるプロセッサ間通信システムは、図１７に示した並列処理システムのプロセッサＰ０及びプロセッサＰ１〜Ｐｎに、それぞれ、ＯＳ代理手段２０００Ｐ０〜２０００Ｐｎと、通信代理手段３０００Ｐ０〜３０００Ｐｎと、データ転送手段７００を備えて構成されている。
【０３１２】
ここでは、本実施例によるプロセッサ間通信に必要な構成要素のみを示し、図１７に示したその他の構成要素については便宜上省略する。
【０３１３】
ＯＳ代理手段２０００Ｐ０〜２０００Ｐｎは、シングルプロセッサ向けＯＳ及びプロセッサＰ０上で実行されるモジュール（ライブラリ）として実装され、自プロセッサ上のタスクからのバインド処理関数の呼び出しを受け、代理でシングルプロセッサ向けＯＳに対してバインド処理を要求する機能と、自プロセッサ上のタスクからのバインド処理関数の呼び出しにより、バインド処理情報をデータ転送手段７００を介して他のプロセッサ上の通信代理手段に対して転送する機能を有する。
【０３１４】
通信代理手段３０００Ｐ０〜３０００Ｐｎは、シングルプロセッサ向けＯＳ及びプロセッサＰ０上で実行されるモジュール（タスク）として実装され、プロセッサ上のタスクによるプロセッサ間データ転送処理を代理で実行する機能と、代理受信のために、自プロセッサのシングルプロセッサ向けＯＳに対してバインド処理を要求する機能を有する。
【０３１５】
この前記通信代理手段３０００Ｐ０〜３０００Ｐｎとしては、自プロセッサ内のタスクどうしで自プロセッサ内のみで通信可能なプロセス間通信方式である、例えばＵＮＩＸ(R)ドメインソケットによって実現される。
【０３１６】
この通信代理手段３０００Ｐ０〜３０００Ｐｎを備えることで、各プロセッサ上のタスクは、プロセッサ内におけるタスク間のデータ転送の場合と同じ処理動作によって、他のプロセッサ上のタスクとの間で、プロセッサ間データ転送を行うことが可能となる。
【０３１７】
各プロセッサＰ０〜Ｐｎのアドレス情報（例えば、ＩＰアドレス）については、ＯＳ代理手段２０００Ｐ０〜２０００Ｐｎ及び通信代理手段３０００Ｐ０〜３０００Ｐｎに予め設定されている。
【０３１８】
データ転送手段７００は、プロセッサの通信代理手段間でデータの転送を行う機能を有し、このデータ転送手段７００については、ＴＣＰ／ＩＰのＩＮＥＴドメインや、メッセージキュー等の通信方式によって実現することができる。
【０３１９】
本実施例においては、通信代理手段２０００Ｐ０〜２０００ＰｎとＯＳ代理手段３０００Ｐ０〜３０００Ｐｎを実装することにより、例えば、ＵＮＩＸ(R)において、ＵＮＩＸ(R)ドメイン通信方式で記述されたアプリケーションを改造することなく、プロセッサ間のデータ転送を実現する。
【０３２０】
すなわち、タスク（アプリケーション）にてライブラリであるＯＳ代理手段３０００Ｐ０〜３０００Ｐｎをリンクするだけで、アプリケーションに改造を加えることなく、プロセッサ間における通信を可能とする。
【０３２１】
以下、本実施例によるプロセッサ間通信システムにおけるプロセス間データ転送の動作について説明する。
【０３２２】
ここでは、プロセッサＰｎ上のタスクＰＴ−ＢからプロセッサＰ０上のタスクＰＴ−Ａに対してプロセッサ間データ転送を行う場合の動作をついて説明する。
【０３２３】
この場合、プロセッサＰ０上のタスクＰＴ−ＡとプロセッサＰｎ上のタスクＰＴ−Ｂにおいては、図３２に示すようなプログラムがそれぞれ実行される。
【０３２４】
プロセッサのプロセッサ番号（アドレス）とポート番号を組み合わせたアドレス情報をデータ転送の入出力部として設定するソケット生成、バインド処理、生成したソケットに対するデータの送受信及び終了処理が実行される。
【０３２５】
タスクＰＴ−ＡとタスクＰＴ−Ｂで上記プログラムが実行されることで、ソケット生成が行われ、その後、各タスクＰＴ−Ａがバインド処理を実行する。
【０３２６】
このプロセッサＰ０のタスクＰＴ−Ａによるバインド処理について図３１を参照して説明する。
【０３２７】
ここで、バインド処理とは、通信用ソケットとプロセッサのアドレス（プロセッサ番号）を関連付けるための処理であり、タスクがシングルプロセッサ向けＯＳが備える通信機能（例えば、ＵＮＩＸ(R)ドメインソケットによる通信機能）を利用するためのバインド処理関数を呼び出すことで実行する。
【０３２８】
このバインド処理は、例えば、ＵＮＩＸ(R)ドメインソケットによるタスク間通信において従来から行われている処理である。
【０３２９】
（１）プロセッサＰ０のタスクＰＴ−Ａがバインド処理関数を呼び出す。
【０３３０】
（２）プロセッサＰ０のＯＳ代理手段２０００Ｐ０が、上記バインド処理関数の呼び出しをフックし、代理でプロセッサＰ０のシングルプロセッサ向けＯＳ３００Ｐ０へバインド処理を要求する。
【０３３１】
（３）プロセッサＰ０のＯＳ代理手段２０００Ｐ０は、データ転送手段７００によってバインド処理情報８００を他のプロセッサに対して転送する。これにより、プロセッサＰ０以外のプロセッサＰ１〜Ｐｎの通信代理手段３０００Ｐ１〜３０００Ｐｎに対してバインド処理情報８００がブロードキャストにより転送される。
【０３３２】
（４）プロセッサＰｎの通信代理手段３０００Ｐｎが、バインド処理情報８００を受理し、プロセッサＰ０のタスクＰＴ−Ａの代理として、タスクＰＴ−Ａに対するデータを受信する準備を行う。
【０３３３】
（５）プロセッサＰｎの通信代理手段３０００Ｐｎは、代理受信のために、プロセッサＰｎのシングルプロセッサ向けＯＳ３００Ｐｎに対してバインド処理の実行を要求し、データ受信状態となる。
【０３３４】
バインド処理において転送されるバインド処理情報８００の構成例を図３３に示す。図３３において、バインド処理情報８００は、代理データ受信準備要求８００Ａ、要求元プロセッサ番号８００Ｂ、経路情報８００Ｃを有してなる。
【０３３５】
代理データ受信準備要求８００Ａは、当該情報が代理でデータ受信を行うことを要求するものあることを示している。
【０３３６】
要求元プロセッサ番号８００Ｂは、プロセッサ間データ転送を行う上で必要となるプロセッサのアドレス情報となる番号である。この番号は、システム上でプロセッサを一意に識別できる番号が用いられる。
【０３３７】
経路情報８００Ｃは、プロセッサ内でシングルプロセッサ向けＯＳが管理する各タスクへの経路（データ入出力の経路）を示す情報である。この経路情報８００Ｃとしては、例えば、タスクが扱うファイル名等が用いられる。この経路情報８００Ｃは、同一のプロセッサ内において、当該経路を経由して送られるデータを受理する各タスクに対応している。
【０３３８】
上記において、バインド処理情報８００を受理したプロセッサＰｎの通信代理手段３０００Ｐｎは、バインド処理情報８００に含まれるタスクＰＴ−Ａの経路情報８００Ｃを認識することで、タスクＰＴ−Ａに対するデータを受信する準備を行う。
【０３３９】
ここで、プロセッサ間のデータ転送を説明する前に、本実施例のシステムにおける同一プロセッサ内でのタスク間のデータ転送について図３４を参照して説明する。
【０３４０】
プロセッサ内におけるタスク間のデータ転送処理については、従来行われている処理と同様の処理がなされる。
【０３４１】
ここでは、上記のようにタスクＰＴ−Ａがバインド処理を行い、データ受信待ちの状態にあるものとする。
【０３４２】
（１）プロセッサＰ０のタスクＰＴ−ＣがプロセッサＰ０のシングルプロセッサ向けＯＳ３００Ｐ０に対して、タスクＰＴ−Ａの有する経路情報に対するデータ転送要求を行う。
【０３４３】
（２）プロセッサＰ０のシングルプロセッサ向けＯＳ３００Ｐ０は、上記データ転送要求に基づいて、タスクＰＴ−ＣからのデータをタスクＰＴ−Ａに対して転送する。
【０３４４】
次に、プロセッサ間におけるデータ転送処理について図３５を参照して説明する。
【０３４５】
プロセッサ間のデータ転送においては、通信代理手段３０００Ｐ０〜３０００Ｐｎが各タスクの代理としてデータ転送を中継することで、プロセッサ間におけるタスクＰＴ−ＢからタスクＰＴ−Ａへのデータ転送が実行される。
【０３４６】
（１）プロセッサＰｎのタスクＰＴ−Ｂが、プロセッサＰｎのシングルプロセッサ向けＯＳ３００Ｐｎに対し、タスクＰＴ−Ａの経路情報に対するデータ転送要求を行う。
【０３４７】
（２）プロセッサＰｎのシングルプロセッサ向けＯＳ３００Ｐｎは、タスクＰＴ−Ａへのデータ転送の代理受信を行うプロセッサＰｎの通信代理手段３０００Ｐｎへデータを転送する。すなわち、シングルプロセッサ向けＯＳ３００Ｐｎは、通信代理手段３０００ＰｎをタスクＰＴ−Ａとみなしてデータを転送する。
【０３４８】
（３）プロセッサＰｎの通信代理手段３０００Ｐｎは、バインド処理情報８００の要求元プロセッサ番号８００Ｂに示された要求元のプロセッサＰ０の通信代理手段３０００Ｐ０に対してデータ転送手段７００を介してデータ転送情報８１０を転送する。
【０３４９】
（４）プロセッサＰ０の通信代理手段３０００Ｐ０は、データ転送手段７００から送られるデータ転送情報８１０を受理する。
【０３５０】
（５）プロセッサＰ０の通信代理手段３０００Ｐ０は、プロセッサＰ０のシングルプロセッサ向けＯＳ３００Ｐ０へ、タスクＰＴ−Ａの経路情報に対するデータ転送要求を行う。
【０３５１】
（６）プロセッサＰ０のシングルプロセッサ向けＯＳ３００Ｐ０は、タスクＰＴ−Ａへデータ転送要求されたデータを転送する。
【０３５２】
上記プロセッサ間データ転送で送信されるデータ転送情報８１０の構成例を図３６に示す。図３６において、データ転送情報８１０は、代理データ転送要求８１０Ａ、経路情報８１０Ｂ、データサイズ８１０Ｃ、データ８１０Ｄを有してなる。
【０３５３】
代理データ転送要求８１０Ａは、当該情報がデータ転送を要求するものであることを示している。
【０３５４】
経路情報８１０Ｂには、データを転送する転送先のタスクの経路情報が指定される。上記の例では、先のバインド処理情報８００で通知されたタスクＰＴ−Ａの経路情報が指定されている。
【０３５５】
データサイズ８１０Ｃには、当該情報に含まれるデータのサイズが指定される。データ８１０Ｄは、当該情報で転送されるデータの本体である。
【０３５６】
上記データ転送処理が完了した後に、終了処理が実行される。この終了処理について、図３７を参照して説明する。
【０３５７】
ここで、終了処理とは、データ転送に先立って生成された通信用のソケットを閉じる処理である。
【０３５８】
（１）プロセッサＰ０のタスクＰＴ−Ａが終了処理関数を呼び出す。
【０３５９】
（２）プロセッサＰ０のＯＳ代理手段２０００Ｐ０が、終了処理関数の呼び出しをフックし、代理でプロセッサＰ０のシングルプロセッサ向けＯＳ３００Ｐ０へ終了処理を要求する。
【０３６０】
（３）通信用のソケットを閉じる終了処理の要求であった場合、プロセッサＰ０のＯＳ代理手段２０００Ｐ０は、データ転送手段７００を介して終了処理情報８２０を転送する。これにより、プロセッサＰ０以外のプロセッサの通信代理手段３０００Ｐ１〜３０００Ｐｎに対して終了処理情報８２０がブロードキャストにより転送される。
【０３６１】
（４）プロセッサＰｎの通信代理手段３０００Ｐｎが、終了処理情報８２０を受理し、プロセッサＰ０のタスクＰＴ−Ａの代理処理を終了する準備を行う。これにより、上記のバインド処理によって通知されたタスクＰＴ−Ａに関する経路情報が破棄される。
【０３６２】
（５）プロセッサＰｎの通信代理手段３０００Ｐｎは、代理処理終了のために、プロセッサＰｎのシングルプロセッサ向けＯＳ３００Ｐｎへ終了処理を要求する。これにより、生成されたソケットが閉じられる。
【０３６３】
上記終了処理において転送される終了処理情報の構成例を図３８に示す。図３８において、終了処理情報８２０は、代理受信終了要求８２０Ａ、経路情報８２０Ｂを有してなる。
【０３６４】
代理受信終了要求８２０Ａは、当該情報が終了処理を要求するものであることを示している。経路情報８２０Ｂには、代理受信を終了する対象となる経路情報が指定される。上記の例の場合には、タスクＰＴ−Ａの経路情報が指定されることになる。
【０３６５】
以上の動作によって、プロセッサＰｎ上のタスクＰＴ−ＢからプロセッサＰ０上のタスクＰＴ−Ａへの、プロセッサ間データ転送が完了する。
【０３６６】
各プロセッサ上のタスクにとっては、通信相手となるタスクが実行されるプロセッサに存在する通信代理手段３０００Ｐ０〜３０００Ｐｎが自身の代理としてプロセッサ間データ転送を行うため、プロセッサ間のデータ転送であっても、プロセッサ内におけるタスク間のデータ転送と同じ処理で、他のプロセッサ上のタスクとデータ転送が行えるようになる。
【０３６７】
従って、シングルプロセッサ向けＯＳ上で動作するタスクであるアプリケーションにおいては、シングルプロセッサ向けＯＳの機能として備えているプロセッサ内におけるタスク間通信を利用して、他のプロセッサ上のタスクとの間でプロセッサ間データ転送を行うことができる。すなわち、シングルプロセッサ向けＯＳ上で動作するタスクであるアプリケーションを、プロセッサ間データ転送を行うために改造する必要がない。
【０３６８】
なお、上記実施例では、ソケット（例えば、ＵＮＩＸ(R)ドメインソケット）を用いた通信によって、プロセス間データ転送を行う場合を説明したが、図２２の第３例の並列処理システムにおいて示したメッセージキューによる通信を利用することも可能である。
【０３６９】
メッセージキューによる通信を利用する場合、キー（数値）をタスクの経路情報に、バインド処理をｍｓｇｇｅｔ処理に、終了処理をｍｓｇｃｔｌ処理によって置き換えることで同様の処理を実現することができる。
【０３７０】
また、ＦＩＦＯ方式による通信を利用することも可能であり、その場合、ファイル名（文字列）を経路情報に、バインド処理をｍｋｆｉｆｏ処理に、終了処理をｃｌｏｓｅ処理に置き換えることで同様の処理を実現することができる。
【０３７１】
なお、上記各実施例の並列処理システムは、並列処理手段、ＯＳサービス手段、制御処理中継手段、代理手段、プロセス間通信手段の各機能を有する並列処理プログラムによって実現することができ、プロセッサ間通信システムについても、ＯＳ代理手段、通信代理手段の機能を有するプログラムによって実現できる。これらのプログラムは、磁気ディスク、半導体メモリその他の記録媒体に格納され、その記録媒体からコンピュータ処理装置にロードされ、コンピュータ処理装置の動作を制御することにより、上述した各機能を実現する。
【０３７２】
以上好ましい実施例をあげて本発明を説明したが、本発明は必ずしも上記実施例に限定されるものではなく、その技術的思想の範囲内において様々に変形して実施することができる。
【図面の簡単な説明】
【０３７３】
【図１】本発明を適用する第１例の並列処理システムの構成を示すブロック図である。
【図２】第１例の並列処理システムの並列処理手段による並列処理起動の動作を説明するための図である。
【図３】並列処理システムの並列処理手段による並列処理起動における要求を行うためのメッセージの構成を示す図である。
【図４】第１例の並列処理システムにおける第２プロセッサ側のタスクからのファイルアクセス要求に対するＯＳサービス手段の動作を説明する図である。
【図５】第１プロセッサ側の逐次タスクからのファイルアクセス要求に対する動作を説明する図である。
【図６】第１例の並列処理システムにおける制御処理中継手段の内部構成を示すブロック図である。
【図７】第１例の並列処理システムにおける制御処理中継手段の処理動作を説明する図である。
【図８】第１例の並列処理システムにおける代理手段によるシグナル通知処理動作を説明する図である。
【図９】第１例の並列処理システムにおける第２プロセッサ側におけるタスク相互の連携動作を実現するための構成を示すブロック図である。
【図１０】第１例の並列処理システムにおける第２プロセッサ側におけるタスク相互の連携動作を説明する図である。
【図１１】並列処理システムにおける適用例としてのマルチプロセッサの携帯端末においてアプリケーションを動作させる場合の例を説明する図である。
【図１２】本発明を適用する第２例の並列処理システムの構成を示すブロック図である。
【図１３】第２例の並列処理システムにおけるプロセスの同期的な並列処理起動の動作を説明するための図である。
【図１４】第２例の並列処理システムにおけるプロセスの非同期的な並列処理起動の動作を説明するための図である。
【図１５】第２例の並列処理システムにおける制御処理中継手段の内部構成を示すブロック図である。
【図１６】第２例の並列処理システムにおける制御処理中継手段の処理動作を説明する図である。
【図１７】本発明を適用する第３例の並列処理システムの構成を示すブロック図である。
【図１８】第３例の並列処理システムにおいて、プロセッサ内のプロセスがプロセス間通信手段によるセマフォ方式を用いてセマフォｕｐ又はｄｏｗｎを行う場合の動作を説明するための図である。
【図１９】第３例の並列処理システムにおいて、プロセッサ内のプロセスがプロセス間通信手段によるセマフォ方式を用いてセマフォｄｏｗｎを行う場合の動作を説明するための図である。
【図２０】第３例の並列処理システムにおいて、同一プロセッサ内のプロセス間でプロセス間通信手段によるセマフォ方式を用いてセマフォｕｐを行う場合の動作を説明するための図である。
【図２１】第３例の並列処理システムにおいて、異なるプロセッサ相互のプロセス間でプロセス間通信手段によるセマフォ方式を用いてセマフォｕｐを行う場合の動作を説明するための図である。
【図２２】第３例の並列処理システムにおいて、プロセッサ内のプロセスがプロセス間通信手段によるメッセージキュー方式を用いてメッセージの受信を行う場合の動作を説明するための図である。
【図２３】第３例の並列処理システムにおいて、プロセッサ内のプロセスがプロセス間通信手段によるメッセージキュー方式を用いてメッセージの受信を行う場合の動作を説明するための図である。
【図２４】第３例の並列処理システムにおいて、プロセッサ内のプロセスがプロセス間通信手段によるメッセージキュー方式を用いてメッセージの送信を行う場合の動作を説明するための図である。
【図２５】第３例の並列処理システムにおいて、同一プロセッサ内のプロセス間でプロセス間通信手段によるメッセージキュー方式を用いてメッセージの送受信を行う場合の動作を説明するための図である。
【図２６】第３例の並列処理システムにおいて、異なるプロセッサ相互のプロセス間でプロセス間通信手段によるメッセージキュー方式を用いてメッセージの送受信を行う場合の動作を説明するための図である。
【図２７】第３例の並列処理システムにおいて、セマフォ方式及びメッセージキュー方式を用いたプロセス間通信の具体例を説明するための図である。
【図２８】図２７の具体例におけるブラウザ画面の表示内容を説明する図である。
【図２９】本発明を適用する第４例の並列処理システムの構成を示すブロック図である。
【図３０】本発明の第１の実施例による並列処理システムのプロセッサ間通信システムの構成を示すブロック図である。
【図３１】本発明の第１の実施例におけるバインド処理の動作を説明するための図である。
【図３２】本発明の第１の実施例におけるプロセッサ間データ転送を行うために、タスク上で実行されるプログラムの概要を示す図である。
【図３３】本発明の第１の実施例におけるバインド処理によって転送されるバインド処理情報の構成例を示す図である。
【図３４】本発明の第１の実施例におけるプロセッサ内のデータ転送動作を説明するための図である。
【図３５】本発明の第１の実施例によるプロセッサ間のデータ転送動作を説明するための図である。
【図３６】本発明の第１の実施例によるプロセッサ間のデータ転送において送信されるデータ転送情報の構成例を示す図である。
【図３７】本発明の第１の実施例による終了処理の動作を説明するための図である。
【図３８】本発明の第１の実施例による終了処理において転送される終了情報の構成例を示す図である。
【符号の説明】
【０３７４】
１０、１００：第１プロセッサ側
２０、２００：第２プロセッサ側
３０、３００Ｐ０、３００Ｐ１〜３００Ｐｎ：シングルプロセッサ向けＯＳ
４０Ｐ０〜４０Ｐｎ：並列処理手段
４００Ｐ０〜４００Ｐｎ：並列処理通信手段
５０Ｐ０〜５０Ｐｎ：ＯＳサービス手段
５００Ｐ０〜５００Ｐｎ：制御代理手段
６０、６００：制御処理中継手段
６１Ｐ０〜６１Ｐｎ、６０１Ｐ０〜６０１Ｐｎ：割込制御装置
６１ａ、６０１ａ：割込指示部
６１ｂ、６０１ｂ：割込状態保持部
６１ｃ、６０１ｃ：割込取消部
６２Ｐ０〜６２Ｐｎ、６０２Ｐ０〜６０２Ｐｎ：通信領域
６２ａ：通信理由保持領域
６２ｂ：通信データ保持領域
６２ｃ、６０２ｂ：排他制御領域
６０２ａ：通信キュー
７０：代理手段
９１：システムバス
９２：主記憶装置
９３：外部記憶装置
１０００Ｐ０〜１０００Ｐｎ：プロセス間通信手段
ＳＴ：逐次タスク
ＰＴ：並列化タスク
ＰＴ−１〜ＰＴ−ｎ：タスク
４１Ｐ１〜４１Ｐｎ：相互排他手段
４３  排他制御領域
４４：タスク管理内容保持領域
ＳＰ：逐次プロセス
ＰＰ：並列化プロセス
ＰＰ−１〜ＰＰ−ｎ：プロセス
７００：データ転送手段
８００：バインド処理情報
８１０：データ転送情報
８２０：終了情報
２０００Ｐ０〜２０００Ｐｎ：ＯＳ代理手段
３０００Ｐ０〜３０００Ｐｎ：通信代理手段
【図１】
2005267118.tif 000003
【図２】
2005267118.tif 000004
【図３】
2005267118.tif 000005
【図４】
2005267118.tif 000006
【図５】
2005267118.tif 000007
【図６】
2005267118.tif 000008
【図７】
2005267118.tif 000009
【図８】
2005267118.tif 000010
【図９】
2005267118.tif 000011
【図１０】
2005267118.tif 000012
【図１１】
2005267118.tif 000013
【図１２】
2005267118.tif 000014
【図１３】
2005267118.tif 000015
【図１４】
2005267118.tif 000016
【図１５】
2005267118.tif 000017
【図１６】
2005267118.tif 000018
【図１７】
2005267118.tif 000019
【図１８】
2005267118.tif 000020
【図１９】
2005267118.tif 000021
【図２０】
2005267118.tif 000022
【図２１】
2005267118.tif 000023
【図２２】
2005267118.tif 000024
【図２３】
2005267118.tif 000025
【図２４】
2005267118.tif 000026
【図２５】
2005267118.tif 000027
【図２６】
2005267118.tif 000028
【図２７】
2005267118.tif 000029
【図２８】
2005267118.tif 000030
【図２９】
2005267118.tif 000031
【図３０】
2005267118.tif 000032
【図３１】
2005267118.tif 000033
【図３２】
2005267118.tif 000034
【図３３】
2005267118.tif 000035
【図３４】
2005267118.tif 000036
【図３５】
2005267118.tif 000037
【図３６】
2005267118.tif 000038
【図３７】
2005267118.tif 000039
【図３８】
2005267118.tif 000040