(57)【特許請求の範囲】
【請求項１】
データを送信する送信側ＣＰＵ（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ：中央処理装置）とデータを受信する受信側ＣＰＵとにより共有されるメモリを介して、前記送信側ＣＰＵと前記受信側ＣＰＵとの間でデータの通信を行うＣＰＵ間通信システムにおいて、
前記送信側ＣＰＵは、
前記メモリに空き領域があるか否かを判定するメモリ領域判定部と、
前記メモリ領域判定部により前記メモリに空き領域があると判定された場合に、前記メモリにデータを書き込むデータ書き込み処理を実行するデータ書き込み部と、
前記メモリ領域判定部が前記メモリに空き領域がないと判定した場合に、前記受信側ＣＰＵの状態を判定する受信側ＣＰＵ判定部と、
前記受信側ＣＰＵ判定部により前記受信側ＣＰＵの状態が前記メモリからデータを読み出すデータ読み出し処理の実行状態であると判定された場合に、前記メモリに空き領域ができるまで前記データ書き込み部をデータ書き込み処理の待ち状態とし、前記受信側ＣＰＵ判定部により前記受信側ＣＰＵの状態がデータ読み出し処理の実行状態でないと判定された場合に、前記受信側ＣＰＵにデータ読み出し処理の実行を開始させるための読み出し開始要求を前記受信側ＣＰＵへ送信する送信側制御部と
を備えることを特徴とするＣＰＵ間通信システム。
【請求項２】
前記ＣＰＵ間通信システムは、
前記受信側ＣＰＵの状態を示す受信側状態フラグを備え、
前記受信側ＣＰＵ判定部は、
前記受信側状態フラグの値に基づいて、前記受信側ＣＰＵの状態を判定することを特徴とする請求項１に記載のＣＰＵ間通信システム。
【請求項３】
前記送信側制御部は、
予め第１のタイムアウト時間を記憶装置に記憶する第１のタイムアウト時間記憶部と、
前記受信側ＣＰＵ判定部により前記受信側ＣＰＵの状態がデータ読み出し処理の実行状態であると判定された場合に、前記データ書き込み部をデータ書き込み処理の待ち状態とし、前記データ書き込み処理の待ち状態の開始時点から前記第１のタイムアウト時間記憶部により記憶された第１のタイムアウト時間が経過したか否かを判定し、前記第１のタイムアウト時間が経過していない場合は、前記メモリに空き領域ができるまで前記データ書き込み処理の待ち状態を継続し、前記第１のタイムアウト時間が経過した場合は、前記読み出し開始要求を前記受信側ＣＰＵへ送信する送信側スケジューリング部と
を備えることを特徴とする請求項１または２に記載のＣＰＵ間通信システム。
【請求項４】
前記送信側制御部は、
予め第３のタイムアウト時間を記憶装置に記憶する第３のタイムアウト時間記憶部と、
予め第４のタイムアウト時間を記憶装置に記憶する第４のタイムアウト時間記憶部と、
前記受信側ＣＰＵ判定部により前記受信側ＣＰＵの状態がデータ読み出し処理の実行状態であると判定された場合に、前記送信側ＣＰＵをスケジューリングロックしてから前記データ書き込み部をデータ書き込み処理の第１の待ち状態とし、前記データ書き込み処理の第１の待ち状態の開始時点から第３のタイムアウト時間記憶部により記憶された第３のタイムアウト時間が経過したか否かを判定し、前記第３のタイムアウト時間が経過していない場合は、前記メモリに空き領域ができるまで前記データ書き込み処理の第１の待ち状態を継続する第１のスケジューリング部と、
前記第３のタイムアウト時間が経過した場合に、前記データ書き込み処理の第１の待ち状態を終了し、前記スケジューリングロックを解除してから前記データ書き込み部をデータ書き込み処理の第２の待ち状態とし、前記データ書き込み処理の第２の待ち状態の開始時点から第４のタイムアウト時間記憶部により記憶された前記第４のタイムアウト時間が経過したか否かを判定し、前記第４のタイムアウト時間が経過していない場合は、前記メモリに空き領域ができるまで前記データ書き込み処理の第２の待ち状態を継続し、前記第４のタイムアウト時間が経過した場合に、前記読み出し開始要求を前記受信側ＣＰＵへ送信する第２のスケジューリング部と
を備えることを特徴とする請求項１または２に記載のＣＰＵ間通信システム。
【請求項５】
前記受信側ＣＰＵは、
前記メモリにデータが格納されているか否かを判定するメモリ状態判定部と、
前記メモリ状態判定部により前記メモリにデータが格納されていると判定された場合に、前記メモリからデータを読み出すデータ読み出し処理を実行するデータ読み出し部と、
前記メモリ状態判定部により前記メモリにデータが格納されていないと判定された場合に、前記送信側ＣＰＵの状態を判定する送信側ＣＰＵ判定部と、
前記送信側ＣＰＵ判定部により前記送信側ＣＰＵの状態がデータ書き込み処理の実行状態であると判定された場合に、前記メモリにデータが格納されるまで前記データ読み出し部をデータ読み出し処理の待ち状態とし、前記送信側ＣＰＵ判定部により送信側ＣＰＵの状態がデータ書き込み処理の実行状態でないと判定された場合に、前記データ書き込み部にデータ書き込み処理の実行を開始させるための書き込み開始要求を前記送信側ＣＰＵへ送信する受信側制御部と
を備えることを特徴とする請求項１〜４のいずれかに記載のＣＰＵ間通信システム。
【請求項６】
前記受信側ＣＰＵは、
前記メモリにデータが格納されているか否かを判定するメモリ状態判定部と、
前記メモリ状態判定部により前記メモリにデータが格納されていると判定された場合に、前記メモリからデータを読み出すデータ読み出し処理を実行するデータ読み出し部と、
前記メモリ状態判定部により前記メモリにデータが格納されていないと判定された場合に、前記送信側ＣＰＵの状態を判定する送信側ＣＰＵ判定部と、
前記送信側ＣＰＵ判定部により前記送信側ＣＰＵの状態がデータ書き込み処理の実行状態であると判定された場合に、前記メモリにデータが格納されるまで前記データ読み出し部をデータ読み出し処理の待ち状態とする受信側制御部とを備え、
前記受信側制御部は、
予め第２のタイムアウト時間を記憶装置に記憶する第２のタイムアウト時間記憶部と、
前記送信側ＣＰＵ判定部により前記送信側ＣＰＵの状態がデータ書き込み処理の実行状態でないと判定された場合に、前記メモリ状態判定部により前記メモリにデータが格納されていないと判定された時点から前記第２のタイムアウト時間が経過したか否かを判定し、前記第２のタイムアウト時間が経過していない場合は、前記メモリにデータが格納されるまで前記データ読み出し部をデータ読み出し処理の待ち状態とし、前記第２のタイムアウト時間が経過した場合は、前記データ書き込み部にデータ書き込み処理の実行を開始させるための書き込み開始要求を前記送信側ＣＰＵへ送信する受信側スケジューリング部と
を備えることを特徴とする請求項１〜４のいずれかに記載のＣＰＵ間通信システム。
【請求項７】
前記受信側ＣＰＵは、
前記メモリにデータが格納されているか否かを判定するメモリ状態判定部と、
前記メモリ状態判定部により前記メモリにデータが格納されていると判定された場合に、前記メモリからデータを読み出すデータ読み出し処理を実行するデータ読み出し部と、
前記メモリ状態判定部により前記メモリにデータが格納されていないと判定された場合に、前記送信側ＣＰＵの状態を判定する送信側ＣＰＵ判定部と、
前記送信側ＣＰＵ判定部により前記送信側ＣＰＵの状態がデータ書き込み処理の実行状態であると判定された場合に、前記メモリにデータが格納されるまで前記データ読み出し部をデータ読み出し処理の待ち状態とする受信側制御部とを備え、
前記受信側制御部は、
予め第５のタイムアウト時間を記憶装置に記憶する第５のタイムアウト時間記憶部と、
予め第６のタイムアウト時間を記憶装置に記憶する第６のタイムアウト時間記憶部と、
前記送信側ＣＰＵ判定部により前記送信側ＣＰＵの状態がデータ書き込み処理の実行状態でないと判定された場合に、前記受信側ＣＰＵをスケジューリングロックしてから前記データ読み出し部をデータ読み出し処理の第３の待ち状態とし、前記データ読み出し処理の第３の待ち状態の開始時点から第５のタイムアウト時間記憶部により記憶された第５のタイムアウト時間が経過したか否かを判定し、前記第５のタイムアウト時間が経過していない場合は、前記メモリにデータが格納されるまで前記データ読み出し処理の第３の待ち状態を継続する第３のスケジューリング部と、
前記第５のタイムアウト時間が経過した場合に、前記データ読み出し処理の第３の待ち状態を終了し、前記スケジューリングロックを解除してから前記データ読み出し部をデータ読み出し処理の第４の待ち状態とし、前記データ読み出し処理の第４の待ち状態の開始時点から第６のタイムアウト時間記憶部により記憶された前記第６のタイムアウト時間が経過したか否かを判定し、前記第６のタイムアウト時間が経過していない場合は、前記メモリにデータが格納されるまで前記データ読み出し処理の第４の待ち状態を継続し、前記第６のタイムアウト時間が経過した場合に、前記データ書き込み部にデータ書き込み処理の実行を開始させるための書き込み開始要求を前記送信側ＣＰＵへ送信する第４のスケジューリング部と
を備えることを特徴とする請求項１〜４のいずれかに記載のＣＰＵ間通信システム。
【請求項８】
前記ＣＰＵ間通信システムは、さらに、
前記送信側ＣＰＵの状態を示す送信側状態フラグを備え、
前記送信側ＣＰＵ判定部は、
前記送信側状態フラグに基づいて、前記送信側ＣＰＵの状態を判定する
ことを特徴とする請求項５〜７のいずれかに記載のＣＰＵ間通信システム。
【請求項９】
データを送信する送信側ＣＰＵ（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ：中央処理装置）とデータを受信する受信側ＣＰＵとにより共有されるメモリを介して、前記送信側ＣＰＵと前記受信側ＣＰＵとの間でデータの通信を行うＣＰＵ間通信システムのＣＰＵ間通信方法において、
送信側ＣＰＵのメモリ領域判定部が、前記メモリに空き領域があるか否かを判定するメモリ領域判定工程と、
送信側ＣＰＵのデータ書き込み部が、前記メモリ領域判定工程により前記メモリに空き領域があると判定された場合に、前記メモリにデータを書き込むデータ書き込み処理を実行するデータ書き込み工程と、
送信側ＣＰＵの受信側ＣＰＵ判定部が、前記メモリ領域判定工程により前記メモリに空き領域がないと判定された場合に、前記受信側ＣＰＵの状態を判定する受信側ＣＰＵ判定工程と、
送信側ＣＰＵの送信側制御部が、前記受信側ＣＰＵ判定工程により前記受信側ＣＰＵの状態が前記メモリからデータを読み出すデータ読み出し処理の実行状態であると判定された場合に、前記メモリに空き領域ができるまで前記データ書き込み工程をデータ書き込み処理の待ち状態とし、前記受信側ＣＰＵ判定工程により前記受信側ＣＰＵの状態がデータ読み出し処理の実行状態でないと判定された場合に、前記受信側ＣＰＵにデータ読み出し処理の実行を開始させるための読み出し開始要求を前記受信側ＣＰＵへ送信する送信側制御工程と
を備えることを特徴とするＣＰＵ間通信システムのＣＰＵ間通信方法。
【請求項１０】
前記ＣＰＵ間通信システムのＣＰＵ間通信方法は、
受信側ＣＰＵのメモリ状態判定部が、前記メモリにデータが格納されているか否かを判定するメモリ状態判定工程と、
受信側ＣＰＵのデータ読み出し部が、前記メモリ状態判定工程により前記メモリにデータが格納されていると判定された場合に、前記メモリからデータを読み出すデータ読み出し処理を実行するデータ読み出し工程と、
受信側ＣＰＵの送信側ＣＰＵ判定部が、前記メモリ状態判定工程により前記メモリにデータが格納されていないと判定された場合に、前記送信側ＣＰＵの状態を判定する送信側ＣＰＵ判定工程と、
受信側ＣＰＵの受信側制御部が、前記送信側ＣＰＵ判定工程により前記送信側ＣＰＵの状態がデータ書き込み処理の実行状態であると判定された場合に、前記メモリにデータが格納されるまで前記データ読み出し工程をデータ読み出し処理の待ち状態とし、前記送信側ＣＰＵ判定工程により送信側ＣＰＵの状態がデータ書き込み処理の実行状態でないと判定された場合に、前記データ書き込み工程にデータ書き込み処理の実行を開始させるための書き込み開始要求を前記送信側ＣＰＵへ送信する受信側制御工程と
を備えることを特徴とする請求項９に記載のＣＰＵ間通信システムのＣＰＵ間通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のＣＰＵ（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ：中央処理装置）がメモリを介して通信するＣＰＵ間通信システム及びＣＰＵ間通信方法に関する。
【背景技術】
【０００２】
従来、複数のＣＰＵがメモリを介してデータ通信を行うＣＰＵ間通信方式では、ＣＰＵ間に専用のＦＩＦＯメモリを付加することにより、ＣＰＵ間通信の制御を簡略化する方式が提案されている（例えば、特許文献１）。また、ＣＰＵ間通信に使用する共有メモリの使用状態を示すフラグを付加することにより、送信開始および受信完了に必要となる２回のＣＰＵ間割込を、１回のＣＰＵ間割込のみにする方式も提案されている（例えば、特許文献２）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開昭５８−１６９２７７号公報
【特許文献２】特開平０５−０８１１８５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
従来の方式では、ＦＩＦＯ（Ｆｉｒｓｔ−Ｉｎ・Ｆｉｒｓｔ−Ｏｕｔ）メモリを使用した場合でも、共有メモリを使用した場合でも、ＣＰＵ間で同期を取るためにＣＰＵ間割込を使用する。半導体技術の進歩によるＣＰＵ数の増加、ＣＰＵクロックの向上、メモリ速度の向上で、ＣＰＵの演算処理自体は極めて高速に実行されるようになった。しかし、ＣＰＵの演算処理と比較して割込処理は高速化できていない。そのため、ＣＰＵ間通信の同期にＣＰＵ間割込を使うと大きな遅延が発生し、複数ＣＰＵの並行実行による高速性が活かせないという課題がある。また、ＣＰＵ間の同期に割込でなくビジーループを使用すると、ＣＰＵ間通信以外の他の処理を行うことができなくなるという課題がある。
【０００５】
本発明は、上記のような課題を解決するためになされたもので、ＣＰＵ間通信による遅延時間を短縮すると共に、同期の待ち時間に応じて段階的にウェイト処理を最適に制御できるようにすることを目的とする。
【課題を解決するための手段】
【０００６】
本発明に係るＣＰＵ間通信システムは、データを送信する送信側ＣＰＵとデータを受信する受信側ＣＰＵとにより共有されるメモリを介して、前記送信側ＣＰＵと前記受信側ＣＰＵとの間でデータの通信を行うＣＰＵ間通信システムにおいて、
前記送信側ＣＰＵは、
前記メモリに空き領域があるか否かを判定するメモリ領域判定部と、
前記メモリ領域判定部により前記メモリに空き領域があると判定された場合に、前記メモリにデータを書き込むデータ書き込み処理を実行するデータ書き込み部と、
前記メモリ領域判定部が前記メモリに空き領域がないと判定した場合に、前記受信側ＣＰＵの状態を判定する受信側ＣＰＵ判定部と、
前記受信側ＣＰＵ判定部により前記受信側ＣＰＵの状態が前記メモリからデータを読み出すデータ読み出し処理の実行状態であると判定された場合に、前記メモリに空き領域ができるまで前記データ書き込み部をデータ書き込み処理の待ち状態とし、前記受信側ＣＰＵ判定部により前記受信側ＣＰＵの状態がデータ読み出し処理の実行状態でないと判定された場合に、前記受信側ＣＰＵにデータ読み出し処理の実行を開始させるための読み出し開始要求を前記受信側ＣＰＵへ送信する送信側制御部と
を備えることを特徴とする。
【発明の効果】
【０００７】
送信側ＣＰＵと受信側ＣＰＵとがメモリを介して通信を行うＣＰＵ間通信システムにおいて、送信側ＣＰＵは、メモリに空き領域があるかを判定するメモリ領域判定部と、空き領域がある場合に、メモリにデータを書き込むデータ書き込み部と、空き領域がない場合に、受信側ＣＰＵの状態を判定する受信側ＣＰＵ判定部と、受信側ＣＰＵの状態がデータ読み出し処理の実行状態である場合に、メモリに空き領域ができるまでデータ書き込み部を待ち状態とし、受信側ＣＰＵの状態がデータ読み出し処理の実行状態でない場合に、受信側ＣＰＵにデータ読み出し処理の実行を開始させるための読み出し開始要求を受信側ＣＰＵへ送信する送信側制御部とを備えるので、受信側ＣＰＵの状態に応じてメモリの空き領域待ちの待ち状態を選択することができるので、ＣＰＵ間通信時の待ち状態による遅延時間を短縮することができる。
【図面の簡単な説明】
【０００８】
【図１】実施の形態１に係るＣＰＵ間通信システム８００のシステム構成図である。
【図２】実施の形態１に係るＣＰＵ間通信システム８００の機能ブロック図である。
【図３】実施の形態１に係るＣＰＵ間通信システム８００のハードウェア構成の一例を示す図である。
【図４】実施の形態１に係るＣＰＵ間通信システム８００における送信側ＣＰＵの送信側ＣＰＵ間通信制御処理（データ送信処理）を示すフローチャートである。
【図５】実施の形態１に係るＣＰＵ間通信システム８００における送信側ＣＰＵの送信側ＣＰＵ間通信制御処理（データ送信処理）の他の例を示すフローチャートである。
【図６】実施の形態１に係る受信側ＣＰＵのＣＰＵ間通信制御部３２１による受信側ＣＰＵ間通信制御処理を示すフローチャートである。
【図７】実施の形態２に係るＣＰＵ間通信制御部３２１の送信側ＣＰＵ通信制御処理を示すフローチャートである。
【図８】実施の形態２のＣＰＵ間通信制御部３２１の送信側ＣＰＵ間通信制御処理がビジーループによるウェイト状態の場合のみに継続フラグ３１１がセットされる処理である場合を示すフローチャートである。
【図９】実施の形態３におけるＣＰＵ間通信システム８００のブロック構成図である。
【図１０】実施の形態３に係るＣＰＵ間通信システム８００の送信側スケジューリング制御方法（送信側スケジューリング制御処理）のフローチャートである。
【図１１】実施の形態３に係るＣＰＵ間通信システム８００の受信側スケジューリング制御方法（受信側スケジューリング制御処理）のフローチャートである。
【図１２】実施の形態３に係るタイムアウト時間決定処理の動作を示すフロー図である。
【図１３】実施の形態４におけるＣＰＵ間通信システム８００の機能ブロック図である。
【図１４】実施の形態４におけるＣＰＵ間通信システム８００の送信側ＣＰＵ間通信方法の一例を示すフロー図である。
【図１５】実施の形態４におけるＣＰＵ間通信システム８００の受信側ＣＰＵ間通信方法の一例を示すフロー図である。
【図１６】実施の形態５に係る非対称型マルチＣＰＵ構成を備えるＣＰＵ間通信システムの構成図である。
【発明を実施するための形態】
【０００９】
実施の形態１．
図１は、実施の形態１に係るＣＰＵ間通信システム８００のシステム構成図である。図１を用いて、ＣＰＵ間通信システム８００のシステム構成について説明する。本実施の形態では、ＣＰＵ間通信システム８００は、複数のＣＰＵがメモリを介してデータ通信を行う対称型マルチＣＰＵシステムである。また、ＣＰＵ間通信システム８００を備える装置（計算機、コンピュータ装置）を想定している。
【００１０】
ＣＰＵ間通信システム８００は、複数のＣＰＵ（ＣＰＵ１０１（ＣＰＵ＃０），ＣＰＵ１０２（ＣＰＵ＃１），ＣＰＵ１０３（ＣＰＵ＃ｎ））、メモリ１０４、ＩＯデバイス１０５、バス１１１を備えている。図１では、ＣＰＵ間通信システム８００は、３個のＣＰＵ１０１，１０２，１０３を備えているが、これに限られず、２個以上の複数個のＣＰＵであればＣＰＵをいくつ備えていてもよい。メモリ１０４は、ＣＰＵ間通信システム８００の備える全てのＣＰＵからアクセスすることができる共有メモリである。また、ＩＯデバイス１０５は、ＣＰＵ間通信システム８００の備える全てのＣＰＵからアクセスすることができる共有のＩＯデバイスである。バス１１１は、ＣＰＵ間通信システム８００の備える全てのＣＰＵ１０１，１０２，１０３、メモリ１０４、ＩＯデバイス１０５を接続するバスである。
【００１１】
ＣＰＵ間通信システム８００の備える複数のＣＰＵ１０１，１０２，１０３は、メモリ１０４を介して互いにデータのやりとりを行う。ＣＰＵ間通信システム８００は、データを送信する送信側ＣＰＵとデータを受信する受信側ＣＰＵとにより共有されるメモリ１０４を介して、送信側ＣＰＵと受信側ＣＰＵとの間でデータの通信を行うＣＰＵ間通信システムの一例である。ＣＰＵ間通信システム８００（ＣＰＵ間通信システム）は、後述するＣＰＵ間通信方式が動作するシステムである。
【００１２】
図２は、実施の形態１に係るＣＰＵ間通信システム８００の機能ブロック図である。図２を用いて、ＣＰＵ１０１及びメモリ１０４の機能ブロックについて説明する。ＣＰＵ間通信システム８００の備えるＣＰＵ１０１，１０２，１０３は、全て同様の構成（ＣＰＵ１０１と同様の構成）を備えるものとする。ＣＰＵ１０１は、データを送信する場合は送信側ＣＰＵとして動作し、データを受信する場合は受信側ＣＰＵとして動作する。
【００１３】
ＣＰＵ１０１は、ＣＰＵ１０１で動作するオペレーションシステム（ＯＳ３０１）、ＯＳ３０１により動作するタスク３０２，３０３，３０４、ＣＰＵ間割込レジスタ３０８、タイマレジスタ３０９、ＣＰＵ間通信制御部３２１を備える。
【００１４】
ＣＰＵ間割込レジスタ３０８は、後述するＣＰＵ間割込を発生させる処理に使用される。タイマレジスタ３０９は、後述する時間計測および指定時間経過割込を発生させる処理に使用される。
【００１５】
ＣＰＵ間通信制御部３２１は、メモリ１０４を介して行われるＣＰＵ間のデータ通信を制御する。ＣＰＵ間通信制御部３２１は、ハングオン制御部３２２を備える。
【００１６】
ハングオン制御部３２２は、ＣＰＵ１０１がデータを送信する側のＣＰＵ（以下、送信側ＣＰＵという）となる場合、すなわちＣＰＵ１０１が送信側ＣＰＵとなる場合に次のような機能を実行する。すなわち、ハングオン制御部３２２は、以下の機能ブロックを備える。
【００１７】
送信側ＣＰＵは、
（１）メモリ１０４に空き領域があるか否かを判定するメモリ領域判定部３５１；
（２）メモリ領域判定部３５１によりメモリ１０４に空き領域があると判定された場合に、メモリ１０４にデータを書き込むデータ書き込み処理を実行するデータ書き込み部３５２；
（３）メモリ領域判定部３５１がメモリ１０４に空き領域がないと判定した場合に、受信側のＣＰＵ（受信側ＣＰＵ）の状態を判定する受信側ＣＰＵ判定部３５３；
（４）受信側ＣＰＵ判定部３５３により受信側ＣＰＵの状態がメモリ１０４からデータを読み出すデータ読み出し処理の実行状態であると判定された場合に、メモリ１０４に空き領域ができるまでデータ書き込み部３５２をデータ書き込み処理の待ち状態とし、受信側ＣＰＵ判定部３５３により受信側ＣＰＵの状態がデータ読み出し処理の実行状態でないと判定された場合に、受信側ＣＰＵにデータ読み出し処理の実行を開始させるための読み出し開始要求を受信側のＣＰＵへ送信する送信側制御部３５４；
を備える。
【００１８】
送信側制御部３５４は、受信側ＣＰＵ判定部３５３により受信側ＣＰＵの状態がデータ読み出し処理の実行状態であると判定された場合に、メモリ１０４に空き領域ができるまでデータ書き込み部３５２をビジーウェイトさせる（ビジーループさせる）ことによりデータ書き込み処理の待ち状態とする。また、送信側制御部３５４は、受信側ＣＰＵ判定部３５３により受信側ＣＰＵの状態がデータ読み出し処理の実行状態でないと判定された場合に、受信側ＣＰＵにデータ読み出し処理の実行を開始させるための読み出し開始要求を受信側ＣＰＵへＣＰＵ間割込により送信する。送信側制御部３５４は、読み出し開始要求を受信側ＣＰＵへＣＰＵ間割込で送信した後、データ書き込み処理をＣＰＵ間割込でウェイトする状態（すなわち、後述する送信待ちセマフォ３０６によるウェイト状態）とする。
【００１９】
また、ハングオン制御部３２２は、ＣＰＵ１０１がデータを受信する側のＣＰＵ（以下、受信側ＣＰＵという）となる場合、すなわちＣＰＵ１０１が受信側ＣＰＵとなる場合に次のような機能を実行する。すなわち、ハングオン制御部３２２は、以下の機能ブロックを備える。
【００２０】
受信側ＣＰＵは、
（１）メモリ１０４にデータが格納されているか否かを判定するメモリ状態判定部３６１；
（２）メモリ状態判定部３６１によりメモリ１０４にデータが格納されていると判定された場合に、メモリ１０４からデータを読み出すデータ読み出し処理を実行するデータ読み出し部３６２；
（３）メモリ状態判定部３６１によりメモリ１０４にデータが格納されていないと判定された場合に、送信側ＣＰＵの状態を判定する送信側ＣＰＵ判定部３６３；
（４）送信側ＣＰＵ判定部３６３により送信側ＣＰＵの状態がデータ書き込み処理の実行状態であると判定された場合に、メモリ１０４にデータが格納されるまでデータ読み出し部３６２をデータ読み出し処理の待ち状態とし、送信側ＣＰＵ判定部３６３により送信側ＣＰＵの状態がデータ書き込み処理の実行状態でないと判定された場合に、データ書き込み部３５２にデータ書き込み処理の実行を開始させるための書き込み開始要求を送信側ＣＰＵへ送信する受信側制御部３６４；
を備える。
【００２１】
受信側制御部３６４は、送信側ＣＰＵ判定部３６３により送信側ＣＰＵの状態がデータ書き込み処理の実行状態であると判定された場合に、メモリ１０４にデータが格納されるまでデータ読み出し部３６２をビジーウェイトさせる（ビジーループさせる）ことによりデータ読み出し処理の待ち状態とする。また、受信側制御部３６４は、送信側ＣＰＵ判定部３６３により送信側ＣＰＵの状態がデータ書き込み処理の実行状態でないと判定された場合に、データ書き込み部３５２にデータ書き込み処理の実行を開始させるための書き込み開始要求を送信側ＣＰＵへＣＰＵ間割込により送信する。受信側制御部３６４は、書き込み開始要求を送信側ＣＰＵへＣＰＵ間割込で送信した後、データ読み出し処理をＣＰＵ間割込でウェイトする状態（すなわち、後述する受信待ちセマフォ３０７によるウェイト状態）とする。
【００２２】
送信側制御部３５４及び受信側制御部３６４は、通信相手が通信処理実行中の場合は早期に待ち状態が解除になると見込んでビジーループで待ち、通信相手がスリープ状態かセマフォによるウェイト状態（すなわち、スリープ状態）の場合は、ＣＰＵ間割込により通知してから自己をセマフォによるウェイト状態とする。これにより、データフル解除までの時間やデータエンプティ解除までの時間が短時間と予想されるときはビジーループで待ち、データフル解除までの時間やデータエンプティ解除までの時間に遅延が生じると見込まれるときは、ＣＰＵ間割込でウェイトする状態（セマフォによるウェイト状態）となるように制御することができる。ここで、データフル解除とは、メモリに空き領域ができることであり、データエンプティ解除とはメモリにデータが格納されることである。
【００２３】
メモリ１０４は、通信用メモリ３０５、送信待ちセマフォ３０６、受信待ちセマフォ３０７、継続フラグ３１１、レディフラグ３１２を備える。
【００２４】
通信用メモリ３０５は、メモリ１０４上のメモリであって、ＣＰＵ間のデータ通信のためのメモリである。送信側ＣＰＵは送信するデータをメモリ１０４に書き込むことにより送信し、受信側ＣＰＵはメモリ１０４に書き込まれたデータを読み出すことにより受信する。つまり、送信側ＣＰＵと受信側ＣＰＵとはメモリ１０４を介してデータの送受信（通信）を行う。
【００２５】
送信待ちセマフォ３０６は、通信用メモリに空き領域がなくなった（データフル状態）場合に、送信側ＣＰＵがＣＰＵ間割込（受信側ＣＰＵから送信側ＣＰＵに送信されるデータ書き込み処理をさせるための割込）を受信するまでデータ書き込み処理をウェイトするために使用するセマフォ変数である。
【００２６】
受信待ちセマフォ３０７は、通信用メモリにデータが格納されていない（データエンプティ状態）場合に、受信側ＣＰＵがＣＰＵ間割込（送信側ＣＰＵから受信側ＣＰＵに送信されるデータ読み出し処理をさせるための割込）を受信するまでデータ読み出し処理をウェイトするために使用するセマフォ変数である。
【００２７】
送信待ちセマフォ３０６あるいは受信待ちセマフォ３０７を用いたセマフォによるウェイトの場合、ウェイトするタスクは一旦ＣＰＵを放棄し、他の実行可能なタスクに実行をスイッチする。このとき、セマフォ（送信待ちセマフォ３０６あるいは受信待ちセマフォ３０７）はデータ書き込み処理、あるいは、データ読み出し処理を実行できないことを示す値（例えば、値ゼロ）に設定されている。この状態でＣＰＵ間割込を受信すると、対応するセマフォ（送信待ちセマフォ３０６あるいは受信待ちセマフォ３０７）がカウントアップされ、対応するセマフォでウェイトしているタスク（データ書き込み処理のタスク、あるいは、データ読み出し処理のタスク）が実行可能状態になり、ＯＳ３０１により再スケジューリングされ再開される。タスクが処理待ち状態であるか否かはＯＳ３０１が管理している。
【００２８】
継続フラグ３１１は、データ送信を継続的に行うことを示すフラグである。継続フラグ３１１は、送信側ＣＰＵの状態を示す送信側状態フラグの一例である。送信側ＣＰＵ判定部３６３は、継続フラグ３１１に基づいて、送信側ＣＰＵの状態を判定する。送信側ＣＰＵ判定部３６３は、例えば、継続フラグ３１１がオンの場合（継続フラグ３１１がセットされている場合）に送信側ＣＰＵがデータ書き込み処理の実行中（すなわち、データ送信を継続的に実行中）であると判定する。送信側ＣＰＵがデータ書き込み処理の実行中（すなわち、データ送信を継続的に実行中）であるとは、送信側ＣＰＵがビジーループでデータ書き込み処理の待ち状態である場合を含むものとする。
【００２９】
また、送信側ＣＰＵ判定部３６３は、例えば、継続フラグ３１１がオフの場合（継続フラグ３１１がクリアされている場合）に、送信側ＣＰＵがデータ書き込み処理の実行中でないと判定する。送信側ＣＰＵがデータ書き込み処理の実行中でないとは、データ書き込み部（データ書き込み処理）がスリープ中であるか、あるいは、データ書き込み部（データ書き込み処理）が送信待ちセマフォ３０６によるウェイト状態で他のタスクが実行中である場合を示している。ここでいう他のタスクとは、ＣＰＵ間通信制御部３２１以外のタスク（例えば、タスク３０２，３０３，３０４等）を意味する。
【００３０】
レディフラグ３１２は、データ受信をビジーループでウェイトすることを示すフラグである。レディフラグ３１２は、受信側ＣＰＵの状態を示す受信側状態フラグの一例である。受信側ＣＰＵ判定部３５３は、レディフラグ３１２に基づいて、受信側ＣＰＵの状態を判定する。受信側ＣＰＵ判定部３５３は、例えば、レディフラグ３１２がオンの場合に受信側ＣＰＵがデータ読み出し処理の実行中（すなわち、データ受信を実行中）であると判定する。受信側ＣＰＵがデータ読み出し処理の実行中（すなわち、データ受信を実行中）であるとは、受信側ＣＰＵがビジーループでデータ読み出し処理の待ち状態である場合を含むものとする。
【００３１】
また、受信側ＣＰＵ判定部３５３は、例えば、レディフラグ３１２がオフの場合に、受信側ＣＰＵがデータ読み出し処理の実行中でないと判定する。受信側ＣＰＵがデータ読み出し処理の実行中でないとは、データ読み出し部（データ読み出し処理）がスリープ中であるか、あるいは、データ読み出し部（データ読み出し処理）が受信待ちセマフォ３０７によるウェイト状態で他のタスクが実行中である場合を示している。
【００３２】
ビジーループとは、連続ループによる所定の値（例えば、メモリ１０４の状態を示すフラグ等の値）のチェックにより、上記所定の値の変更をウェイトする処理である。
【００３３】
図３は、本実施の形態１に係るＣＰＵ間通信システム８００のハードウェア構成の一例を示す図である。
【００３４】
図３は、以下の実施の形態に係るＣＰＵ間通信システム８００を備える装置８９０のハードウェア資源の一例を示す図である。図３において、ＣＰＵ間通信システム８００を備える装置８９０は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう）を複数（ＣＰＵ９１１（１０１），ＣＰＵ９１１（１０２），ＣＰＵ９１１（１０３））備えている。ＣＰＵ９１１は、バス１１１を介してＲＯＭ９１３、ＲＡＭ９１４、通信ボード９１５、表示装置９０１、キーボード９０２、マウス９０３、ＦＤＤ９０４、ＣＤＤ９０５、プリンタ装置９０６、スキャナ装置９０７、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。これらのハードウェアデバイス（ＲＯＭ９１３、ＲＡＭ９１４、通信ボード９１５、表示装置９０１、キーボード９０２、マウス９０３、ＦＤＤ９０４、ＣＤＤ９０５、プリンタ装置９０６、スキャナ装置９０７、磁気ディスク装置９２０等）は、ＩＯデバイス１０５の一例である。磁気ディスク装置９２０の代わりに、光ディスク装置、メモリカード読み書き装置などの記憶装置でもよい。
【００３５】
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、磁気ディスク装置９２０の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部の一例である。
【００３６】
通信ボード９１５、キーボード９０２、スキャナ装置９０７、ＦＤＤ９０４、表示装置９０１などは、入力部、入力装置の一例である。また、入力装置としてタッチパネル等を備えていてもよい。また、通信ボード９１５、表示装置９０１、プリンタ装置９０６などは、出力部、出力装置の一例である。
【００３７】
通信ボード９１５は、ファクシミリ機、電話器、ＬＡＮ等に接続されている。通信ボード９１５は、ＬＡＮに限らず、インターネット、ＩＳＤＮ等のＷＡＮ（ワイドエリアネットワーク）などに接続されていても構わない。
【００３８】
磁気ディスク装置９２０には、オペレーティングシステム９２１（ＯＳ３０１）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３のプログラムは、ＣＰＵ９１１、オペレーティングシステム９２１、ウィンドウシステム９２２により実行される。
【００３９】
上記プログラム群９２３には、以下に述べる実施の形態の説明において「〜部」、「〜手段」として説明する機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。ファイル群９２４には、以下に述べる実施の形態の説明において、「〜の判定結果」、「〜の計算結果」、「〜の処理結果」として説明する情報やデータや信号値や変数値やパラメータが、「〜ファイル」、「〜データベース」、「〜データ」の各項目として記憶されている。「〜ファイル」、「〜データベース」、「〜データ」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリになどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示などのＣＰＵの動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
【００４０】
また、以下に述べる実施の形態の説明において説明するフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、ＲＡＭ９１４のメモリ、ＦＤＤ９０４のフレキシブルディスク、ＣＤＤ９０５のコンパクトディスク、磁気ディスク装置９２０の磁気ディスク、その他光ディスク、ミニディスク、ＤＶＤ（Ｄｉｇｉｔａｌ・Ｖｅｒｓａｔｉｌｅ・Ｄｉｓｋ）等の記録媒体に記録される。また、データや信号は、バス１１１や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【００４１】
また、以下に述べる実施の形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」、「手段」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明するものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。すなわち、プログラムは、以下に述べる「〜部」としてコンピュータを機能させるものである。あるいは、以下に述べる「〜部」の手順や方法をコンピュータに実行させるものである。
【００４２】
次に、本実施の形態に係るＣＰＵ間通信システム８００のＣＰＵ間通信制御方法の動作について説明する。
【００４３】
図４は、実施の形態１に係る送信側ＣＰＵのＣＰＵ間通信制御部３２１による送信側ＣＰＵ間通信制御処理（データ送信処理ともいう）を示すフローチャートである。図４において、送信側ＣＰＵ間通信制御処理は、ＣＰＵ１０１において実行される処理であるものとする。以下で説明する機能ブロック（ハングオン制御部３２２（メモリ領域判定部３５１，データ書き込み部３５２，受信側ＣＰＵ判定部３５３，送信側制御部３５４等））は、記憶装置に記憶されており、ＣＰＵ１０１により読み出されてＣＰＵ１０１により実行される。
【００４４】
ＣＰＵ１０１でＣＰＵ間通信のデータ送信処理が開始すると、ハングオン制御部３２２は、Ｓ４０１ａにおいて継続フラグ３１１をセットする。Ｓ４０１において、ハングオン制御部３２２（データ書き込み部３５２）は、送信するデータをメモリ１０４の通信用メモリ３０５に書き込む。この場合、ＣＰＵ１０１は送信側ＣＰＵの一例である。
【００４５】
Ｓ４０２において、ハングオン制御部３２２（受信側ＣＰＵ判定部３５３）は、レディフラグ３１２を判定する。ハングオン制御部３２２（受信側ＣＰＵ判定部３５３）によりレディフラグ３１２がセットされていないと判定されると（Ｓ４０２でＮｏ）、処理はＳ４０３へ進む。
【００４６】
ハングオン制御部３２２（受信側ＣＰＵ判定部３５３）によりレディフラグ３１２がセットされていると判定されると（Ｓ４０２でＹｅｓ）、処理はＳ４０４へ進む。
【００４７】
Ｓ４０２においてレディフラグ３１２がセットされていないということは、通信データを受信するタスク（受信側ＣＰＵのデータ読み出し部３６２）が起動していないスリープ状態であるか、あるいは、受信待ちセマフォ３０７によるウェイト状態（スリープ状態）であることを意味する。したがって、Ｓ４０３において、ハングオン制御部３２２は、ＣＰＵ間通信の通信データを受信するタスク（受信側ＣＰＵのデータ読み出し部３６２）を起床するためのデータ読み出し開始要求を受信側ＣＰＵにＣＰＵ間割込（データ読み出し開始要求Ｘ１）として送信する。受信側ＣＰＵでは、ＣＰＵ間割込（データ読み出し開始要求Ｘ１）により、受信タスク（受信側ＣＰＵのデータ読み出し部３６２）が起床されるか、あるいは、受信待ちセマフォ３０７がカウントアップされ受信タスク（受信側ＣＰＵのデータ読み出し部３６２）のウェイト状態が解除される（後述するＳ４６１）。ここで、タスクあるいは「〜部」を起床するとは、タスクあるいは「〜部」を起動する（ウェイクアップさせる）ことを意味する（以下同じ）。
【００４８】
Ｓ４０２においてレディフラグ３１２がセットされているということは、通信データを受信するタスク（受信側ＣＰＵのデータ読み出し部３６２）が実行中（ビジーループでウェイト状態である場合も含む）であることを意味する。したがって、ハングオン制御部３２２による受信側ＣＰＵへの通知（ＣＰＵ間割込（データ読み出し開始要求Ｘ１））は不要となる。
【００４９】
Ｓ４０４において、ハングオン制御部３２２は、全データの送信が完了したか否かをチェックする。全データの送信が完了した場合（Ｓ４０４でＹｅｓ）は、処理はＳ４１１に進む。全データの送信が完了していない場合（Ｓ４０４でＮｏ）は、処理はＳ４０５に進む。
【００５０】
全データの送信が完了した場合（Ｓ４０４でＹｅｓ）は、ハングオン制御部３２２は、Ｓ４１１において継続フラグ３１１をクリアし、送信側ＣＰＵ間通信制御処理を完了する。
【００５１】
全データの送信が完了していない場合（Ｓ４０４でＮｏ）は、Ｓ４０５において、ハングオン制御部３２２（メモリ領域判定部３５１）は、メモリ１０４の通信用メモリ３０５にデータフルが発生していないかチェックする。すなわち、メモリ領域判定部３５１は、メモリ１０４の通信用メモリ３０５に空き領域があるか否かを判定する。
【００５２】
メモリ１０４の通信用メモリ３０５にデータフルが発生していない場合（Ｓ４０５でＮｏ）、処理はＳ４０１に戻りデータ送信処理を繰り返す。メモリ１０４の通信用メモリ３０５にデータフルが発生している場合は、ハングオン制御部３２２（データ書き込み部３５２）は続けてデータ送信（書き込み）ができない。メモリ１０４の通信用メモリ３０５にデータフルが発生している場合（Ｓ４０５でＹｅｓ）、処理はＳ４０６へ進む。
【００５３】
Ｓ４０６において、ハングオン制御部３２２（受信側ＣＰＵ判定部３５３）は、レディフラグ３１２を判定する。すなわち、ハングオン制御部３２２（受信側ＣＰＵ判定部３５３）は、受信側ＣＰＵの状態を判定する。
【００５４】
ハングオン制御部３２２（受信側ＣＰＵ判定部３５３）によりレディフラグ３１２がセットされていないと判定されると（Ｓ４０６でＮｏ）、処理はＳ４０６ａへ進む。ハングオン制御部３２２（受信側ＣＰＵ判定部３５３）によりレディフラグ３１２がセットされていると判定されると（Ｓ４０６でＹｅｓ）、処理はＳ４１０へ進む。
【００５５】
レディフラグ３１２がセットされているということは、受信側ＣＰＵは連続してデータを受信しようとしている（すなわち、受信側ＣＰＵのデータ読み出し処理の実行中、あるいは、受信側ＣＰＵのデータ読み出し処理のビジーウェイト中）であることを意味する。このように受信側ＣＰＵのデータ読み出し処理が実行中であるので、短時間でメモリ１０４の通信用メモリ３０５に空き領域ができるはずと推定される。
【００５６】
Ｓ４１０において、ハングオン制御部３２２（送信側制御部３５４）は、メモリに空き領域ができるまでデータ書き込み部３５２をデータ書き込み処理の待ち状態とする。すなわち、ハングオン制御部３２２（送信側制御部３５４）は、ビジーループで通信用メモリ３０５に空きができることをウェイトする。ハングオン制御部３２２（送信側制御部３５４）は、通信用メモリ３０５のデータフルが解消されるまでループを回る。
【００５７】
ハングオン制御部３２２（受信側制御部３５４）は、Ｓ４１０にて通信用メモリ３０５に空き領域ができたと判定すると、ビジーウェイト状態を解除し、処理はＳ４０１に戻りデータ送信処理を実行する。
【００５８】
Ｓ４０６においてレディフラグ３１２がセットされていないということは、通信データを受信するタスク（受信側ＣＰＵのデータ読み出し部３６２）が受信待ちセマフォ３０７によるウェイト状態（スリープ状態）であることを意味する。通信データを受信するタスク（受信側ＣＰＵの受信データ読み出し部３６２）が受信待ちセマフォ３０７によるウェイト状態（スリープ状態）である場合は、受信側ＣＰＵではハングオン制御部３２２（受信データ読み出し部３６２）以外の他タスクが実行中であるので、データ受信処理（データ読み出し処理）開始までの時間が長くなると推定される。つまり、レディフラグ３１２がセットされている場合（受信データ読み出し部３６２が実行中、あるいはビジーウェイト中）の方が、レディフラグ３１２がセットされていない場合（受信データ読み出し部３６２がスリープ中、あるいは受信待ちセマフォによりウェイト中のためスリープ中））であるよりデータ読み出し部３６２によるデータ読み出し処理開始までの時間が短い。
【００５９】
したがって、レディフラグ３１２がセットされていない場合は、ハングオン制御部３２２（送信側制御部３５４）は、データ書き込み処理をビジーウェイトせずに、受信側ＣＰＵの受信データ読み出し処理を開始するためのＣＰＵ間割込を実行するとともに、自らのデータ書き込み処理（データ送信処理）は送信待ちセマフォ３０６によるウェイト状態とし、送信側ＣＰＵの処理を他のタスクにスイッチする処理を実行する。
【００６０】
Ｓ４０６ａにおいて、ハングオン制御部３２２（送信側制御部３５４）は、継続フラグ３１１をクリアする。
【００６１】
Ｓ４０６ｂにおいて、ハングオン制御部３２２（送信側制御部３５４）は、ＣＰＵ間通信の通信データを受信するタスク（受信側ＣＰＵのデータ読み出し部３６２）を起床するためのデータ読み出し開始要求を受信側ＣＰＵにＣＰＵ間割込（データ読み出し開始要求Ｘ１）として送信する。
【００６２】
Ｓ４０７において、ハングオン制御部３２２（送信側制御部３５４）は、データ書き込み処理を送信待ちセマフォ３０６によるウェイト状態とする。ハングオン制御部３２２（送信側制御部３５４）は、受信側ＣＰＵからのＣＰＵ間割込（データ書き込み要求Ｘ２）を受信すると（Ｓ４０９）、データ書き込み処理の送信待ちセマフォ３０６によるウェイト状態を解除してＳ４０１に戻りデータ送信処理を実行する。
【００６３】
Ｓ４０９ａにおいて、ハングオン制御部３２２（送信側制御部３５４）は、継続フラグ３１１をセットし、処理をＳ４０１に戻し、データ送信処理を続ける。
【００６４】
図４に示す送信側ＣＰＵ間通信制御方法では、ＣＰＵ間通信制御部３２１が実行中（ＣＰＵ間通信制御部３２１がビジーループによるウェイト状態の場合も含む）の場合に継続フラグ３１１がセットされ、ＣＰＵ間通信制御部３２１が送信待ちセマフォ３０６によりウェイト状態の場合には、継続フラグ３１１がクリアされるとした。
【００６５】
しかし、例えば、送信側ＣＰＵ間通信制御処理では、ＣＰＵ間通信制御部３２１がビジーループによるウェイト状態の場合のみに継続フラグ３１１がセットされる処理としてもよい。上記処理の場合には、Ｓ４０１ａ（継続フラグのセット処理）、Ｓ４０６ａ（継続フラグのクリア処理）、Ｓ４０９ａ（継続フラグのセット処理）は不要となる。そして、ハングオン制御部３２２（送信側制御部３５４）は、Ｓ４０６でＹｅｓの場合（レディフラグ３１２がセットされている場合）に継続フラグ３１１をセットした後、Ｓ４１０のビジーループの処理を開始することになる（図５参照）。
【００６６】
以上で、送信側ＣＰＵ間通信制御処理の説明を終わる。次に、受信側ＣＰＵの受信側ＣＰＵ間通信制御処理について説明する。
【００６７】
図６は、本実施の形態に係る受信側ＣＰＵのＣＰＵ間通信制御部３２１による受信側ＣＰＵ間通信制御処理を示すフローチャートである。図６において、受信側ＣＰＵ間通信制御処理は、ＣＰＵ１０１において実行される処理であるものとする。以下で説明する機能ブロック（ハングオン制御部３２２（メモリ状態判定部３６１，データ読み出し部３６２，送信側ＣＰＵ判定部３６３，受信側制御部３６４等））は、記憶装置に記憶されており、ＣＰＵ１０１により読み出されてＣＰＵ１０１により実行される。
【００６８】
ＣＰＵ１０１でＣＰＵ間通信のデータ受信処理（受信側ＣＰＵ間通信制御処理）が開始すると、Ｓ４５１において、ハングオン制御部３２２は、レディフラグ３１２をセットする（オンにする）。この場合、ＣＰＵ１０１は受信側ＣＰＵの一例である。
【００６９】
Ｓ４５２において、ハングオン制御部３２２（メモリ状態判定部３６１）は、メモリ１０４の通信用メモリ３０５にデータフルが発生しているかチェックする。つまり、ハングオン制御部３２２（メモリ状態判定部３６１）は、メモリ１０４の通信用メモリ３０５に空き領域があるか否かをチェックする。ハングオン制御部３２２（メモリ状態判定部３６１）によりメモリ１０４（通信用メモリ３０５）がデータフルであると判定された場合は（Ｓ４５２でＹｅｓ）、処理はＳ４５３へ進む。ハングオン制御部３２２（メモリ状態判定部３６１）によりメモリ１０４（通信用メモリ３０５）がデータフルでないと判定された場合は（Ｓ４５２でＮｏ）、処理はＳ４５６へ進む。
【００７０】
Ｓ４５３において、ハングオン制御部３２２（データ読み出し部３６２）は、通信用メモリ３０５からデータの受信（読み出し）をするデータ受信処理を実行する。次に、Ｓ４５４において、ハングオン制御部３２２（送信側ＣＰＵ判定部３６３）は、継続フラグ３１１がセットされているか否かをチェックする。
【００７１】
ハングオン制御部３２２（送信側ＣＰＵ判定部３６３）により継続フラグ３１１がセットされていると判定された場合は（Ｓ４５４でＹｅｓ）、処理はＳ４６３へ進む。ハングオン制御部３２２（送信側ＣＰＵ判定部３６３）により継続フラグ３１１がセットされていないと判定された場合は（Ｓ４５４でＮｏ）、処理はＳ４５５へ進む。
【００７２】
Ｓ４５４において、継続フラグ３１１がセットされていないということは、通信データを送信するタスク（送信側ＣＰＵのハングオン制御部３２２（データ書き込み部３５２））が起動されていないスリープ状態であるか、あるいは、送信待ちセマフォ３０６によるウェイト状態（スリープ状態）であることを意味する。
【００７３】
したがって、Ｓ４５５において、ハングオン制御部３２２は、ＣＰＵ間通信の通信データを送信するタスク（送信側ＣＰＵのデータ書き込み部３５２）を起床するためのデータ書き込み開始要求をＣＰＵ間割込（データ書き込み開始要求Ｘ２）として送信側ＣＰＵに送信する。送信側ＣＰＵでは、ＣＰＵ間割込（データ書き込み開始要求Ｘ２）により、送信タスク（送信側ＣＰＵのデータ書き込み部３５２）が起床されるか、あるいは、送信待ちセマフォ３０６がカウントアップされ送信タスク（送信側ＣＰＵのデータ書き込み部３５２）のウェイト状態が解除される（Ｓ４０９参照）。
【００７４】
Ｓ４５５において、ハングオン制御部３２２が送信側ＣＰＵに対してＣＰＵ間割込（データ書き込み開始要求Ｘ２）を実行した後、処理はＳ４６３へ進む。
【００７５】
Ｓ４５４において継続フラグ３１１がセットされているということは、送信側ＣＰＵにおいて通信データを送信するタスク（送信側ＣＰＵのデータ書き込み部３５２）がウェイクアップ状態ではあるものの、メモリ１０４がデータフルのためビジーループによりデータ書き込み処理のウェイト状態中であることを意味する。したがって、ハングオン制御部３２２による送信側ＣＰＵへの通知（ＣＰＵ間割込（データ書き込み開始要求Ｘ２））は不要となる。すなわち、Ｓ４５４において継続フラグ３１１がセットされているということは、送信側ＣＰＵは通信用メモリ３０５に空きができるのをビジーループで待っている状態である。このとき、処理はＳ４６３に進む。
【００７６】
Ｓ４６３において、ハングオン制御部３２２（データ読み出し部３６２）は、全データの受信が完了したかチェックする。ハングオン制御部３２２（データ読み出し部３６２）により全データの受信が完了したと判断された場合は（Ｓ４６３でＹｅｓ）、処理はＳ４６４へ進む。ハングオン制御部３２２（データ読み出し部３６２）により全データの受信が完了していないと判断された場合は（Ｓ４６３でＮｏ）、処理はＳ４５２へ戻る。
【００７７】
Ｓ４６４において、全データの受信が完了したので、ハングオン制御部３２２は、レディフラグ３１２をクリアして、受信側ＣＰＵ間通信制御処理を終了する。
【００７８】
上述したように、ハングオン制御部３２２によりメモリ１０４（通信用メモリ３０５）がデータフルでないと判定された場合は（Ｓ４５２でＮｏ）、処理はＳ４５６へ進む。Ｓ４５６において、ハングオン制御部３２２（メモリ状態判定部３６１）は、メモリ１０４の通信用メモリ３０５に、データが格納されているか否かを判定する。すなわち、ハングオン制御部３２２（メモリ状態判定部３６１）は、メモリ１０４（通信用メモリ３０５）がデータエンプティであるか否かを判定する。
【００７９】
Ｓ４５６において、ハングオン制御部３２２（メモリ状態判定部３６１）によりデータエンプティであると判定された場合は（Ｓ４５６でＹｅｓ）、処理はＳ４５７へ進む。ハングオン制御部３２２（メモリ状態判定部３６１）によりデータエンプティでないと判定された場合は（Ｓ４５６でＮｏ）、処理はＳ４６２へ進み、ハングオン制御部３２２（データ読み出し部３６２）によりデータ受信処理が実行される。
【００８０】
Ｓ４５７において、ハングオン制御部３２２（送信側ＣＰＵ判定部３６３）は、送信側ＣＰＵの状態を判定する。すなわち、ハングオン制御部３２２（送信側ＣＰＵ判定部３６３）は、継続フラグ３１１がセットされているか否かをチェックする。Ｓ４５７において、ハングオン制御部３２２（送信側ＣＰＵ判定部３６３）により継続フラグ３１１がセットされていると判定された場合は（Ｓ４５７でＹｅｓ）、処理はＳ４５６へ戻る。ハングオン制御部３２２（送信側ＣＰＵ判定部３６３）により継続フラグ３１１がセットされていないと判定された場合は（Ｓ４５７でＮｏ）、処理はＳ４５８へ進む。
【００８１】
Ｓ４５６において継続フラグ３１１がセットされているということは、メモリ１０４はデータエンプティであっても送信側ＣＰＵのデータ書き込み部３５２（データ送信処理）は、継続的に実行中であることを示している。したがって、短時間のうちにメモリ１０４のデータエンプティが解消すると推定されるので、ハングオン制御部３２２（受信側制御部３６４）は、メモリ１０４（通信メモリ３０５）のデータエンプティが解消されるまでビジーループによりデータ受信処理（データ読み出し処理）をウェイト状態とする。
【００８２】
すなわち、ハングオン制御部３２２（受信側制御部３６４）は、継続フラグ３１１がセットされていると判定すると、メモリ１０４（通信メモリ３０５）のデータエンプティが解消されるまでビジーループによりデータ受信処理（データ読み出し処理）をウェイト状態とする。
【００８３】
Ｓ４５７において継続フラグ３１１がセットされていないということは、メモリ１０４はデータエンプティであって、通信データを送信するタスク（送信側ＣＰＵのデータ書き込み部３５２）が起動されていないスリープ状態であるか、あるいは、送信待ちセマフォ３０６によるウェイト状態（スリープ状態）であることを意味する。通信データを送信するタスク（送信側ＣＰＵのデータ書き込み部３５２）が起動されていないスリープ状態か、あるいは、送信待ちセマフォ３０６によるウェイト状態（スリープ状態）である場合は、送信側ＣＰＵにおいてデータ送信処理（データ書き込み処理）開始までの時間が長くなると推定される。そこで、受信側ＣＰＵでは、次のような手順（Ｓ４５８〜Ｓ４６１）により、所定の時間の経過を待って受信待ちセマフォ３０７によるウェイト状態へ移り、ＣＰＵ１０１の処理をデータ受信処理から他のタスクの処理にスイッチして、データ受信処理はウェイト状態とする。
【００８４】
受信側ＣＰＵ（受信側制御部３６４（第２のタイムアウト時間記憶部））は、予め第２のタイムアウト時間を記憶装置に記憶している。第２のタイムアウト時間は、Ｓ４５６からＳ４５８までのビジーループの連続実行時間の上限を定めるものである。
【００８５】
上述したように、Ｓ４５７において、送信側ＣＰＵ判定部３６３により送信側ＣＰＵの状態がデータ書き込み処理の実行状態でない（継続フラグ３１１がセットされていない）と判定された場合に、Ｓ４５８において、ハングオン制御部３２２（受信側制御部３６４）は、最初にＳ４５６においてメモリがデータエンプティであると判定された時点から第２のタイムアウト時間が経過したか否かを判定する。つまり、Ｓ４５８において、ハングオン制御部３２２（受信側制御部３６４）は、記憶装置に記憶された指定時間（第２のタイムアウト時間）を用いて、タイムアウトが発生しているか否かチェックする。
【００８６】
Ｓ４５８において第２のタイムアウト時間が経過していない場合（タイムアウトが発生していない場合）（Ｓ４５８でＮｏ）は、ハングオン制御部３２２（受信側制御部３６４）は、処理をＳ４５６に戻し、メモリ１０４（通信用メモリ３０５）にデータが格納されるまでビジーループによりデータ読み出し部３６２をデータ読み出し処理の待ち状態（ビジーウェイト状態）とする。
【００８７】
Ｓ４５８において第２のタイムアウト時間が経過した場合（タイムアウトが発生した場合）（Ｓ４５８でＹｅｓ）は、ハングオン制御部３２２（受信側制御部３６４）は、処理をＳ４５９に進める。
【００８８】
Ｓ４５９において、ハングオン制御部３２２（受信側制御部３６４）は、レディフラグ３１２をクリアする。Ｓ４５９ａにおいて、ハングオン制御部３２２（受信側制御部３６４）は、ＣＰＵ間通信の通信データを送信するタスク（送信側ＣＰＵのデータ書き込み部３５２）を起床するためのデータ書き込み開始要求を送信側ＣＰＵにＣＰＵ間割込（データ書き込み開始要求Ｘ２）として送信する。
【００８９】
Ｓ４６０において、ハングオン制御部３２２（受信側制御部３６４）は、データ読み出し処理を受信待ちセマフォ３０７によるウェイト状態とする。ハングオン制御部３２２（受信側制御部３６４）は、データ読み出し処理の受信待ちセマフォ３０７によるウェイト状態で、送信側ＣＰＵからＣＰＵ間割込（データ読み出し開始要求Ｘ１）を受信すると（Ｓ４６１）、データ読み出し処理の受信待ちセマフォ３０７によるウェイト状態を解除し、処理をＳ４６１ａに進める。Ｓ４６１ａにおいて、ハングオン制御部３２２（受信側制御部３６４）は、レディフラグ３１２をセットし、Ｓ４６２に進む。受信側制御部３６４は、受信側スケジューリング部の一例である。
【００９０】
Ｓ４６２において、ハングオン制御部３２２（データ読み出し部３６２）は、メモリ１０４（通信用メモリ３０５）からデータを読み出すデータ読み出し処理（データ受信処理）を実行する。
【００９１】
Ｓ４５７〜Ｓ４５８において、継続フラグ３１１がセットされておらず、かつ、タイムアウトが発生したということは、メモリ１０４がデータエンプティであるのに送信側ＣＰＵのデータ書き込み処理はスリープ中であり、かつ、所定時間（第２のタイムアウト時間）の経過を待ったがメモリ１０４にデータが格納されなかったことを意味する。このように、通信データを送信するタスク（送信側ＣＰＵのデータ書き込み部３５２）が起動されていないスリープ状態か、あるいは、送信待ちセマフォ３０６によるウェイト状態（スリープ状態）である場合は、通信データの送信（書き込み）処理開始までの時間が長くなる可能性が高いと推定される。
【００９２】
したがって、Ｓ４５９ａ〜Ｓ４６０において、ハングオン制御部３２２（受信側制御部３６４）は、送信側ＣＰＵのデータ書き込み処理を開始するためのＣＰＵ間割込を実行するとともに、自らのデータ受信処理は受信待ちセマフォ３０７によるウェイト状態とし、受信側ＣＰＵのデータ読み出し処理を他のタスクの処理にスイッチする。
【００９３】
上述したように、ハングオン制御部３２２は、Ｓ４６３で全データの受信が完了した場合は、Ｓ４６４でレディフラグ３１２をクリアし、ＣＰＵ間通信のデータ受信処理を完了する。
【００９４】
ハングオン制御部３２２は、次のＣＰＵ間通信のデータ受信処理をすぐに始めることができる場合は、Ｓ４６４におけるレディフラグ３１２のクリアの処理を行わないことにより、受信側ＣＰＵからのＣＰＵ間割込（データ読み出し開始要求Ｘ１）を送らせないようにすることもできる。
【００９５】
本実施の形態では、以下のようなＣＰＵ間通信方式（ＣＰＵ間通信システム８００）について説明した。
【００９６】
本実施の形態に係るＣＰＵ間通信方式は、２個以上の複数のＣＰＵ（１０１，１０２，１０３，・・・）が、メモリ１０４を介してデータ通信を行うＣＰＵ間通信方式において、以下の手段を備えること特徴とする。
（ａ）ＣＰＵ間通信による送信側のデータフル解消待ち、受信側のデータエンプティ待ちを、ＣＰＵ間割込によりウェイトするか、ビジーループによりウェイトするかを制御するハングオン制御手段（ハングオン制御部３２２）を持つＣＰＵ間通信制御手段（ＣＰＵ間通信制御部３２１）。
（ｂ）データ送信を継続的に行うことを示す継続フラグ３１１。
（ｃ）データ受信をビジーループで待つことを示すレディフラグ３１２。
【００９７】
本実施の形態に係るＣＰＵ間通信方式は、ハングオン制御手段（ハングオン制御部３２２）が、第２のタイムアウト時間を用いたタイムアウト時間の設定により、タイムアウトの発生までビジーループでウェイトし、タイムアウトの発生以降はＣＰＵ間割込によりウェイトするように自動的に切り換えることを特徴とする。
【００９８】
以上のように、本実施の形態のＣＰＵ間通信システム８００によれば、ＣＰＵ間通信制御手段（ＣＰＵ間通信制御部３２１）内のハングオン制御手段（ハングオン制御部３２２）が、継続フラグ３１１とレディフラグ３１２との値に基づいて、ビジーループによるウェイトとＣＰＵ間割込によるウェイトとを切り替えて制御する。したがって、ＣＰＵ（送信側ＣＰＵ，受信側ＣＰＵ）が連続的にデータ送受信を行う場合は、ＣＰＵ間割込による遅延を受けずに、高速なＣＰＵ間通信を行うことができる。
【００９９】
また、データ連続処理が連続する場合には、Ｓ４６４においてレディフラグ（３１２）をクリアしないことにより、次に行われるＣＰＵ間通信もＣＰＵ間割込を使わずに続けることがでる。したがって、短時間で次のＣＰＵ間通信のデータ受信を開始することを見込んだ制御を行うことができるので、ＣＰＵ間割込による遅延をなくすことができる。
【０１００】
本実施の形態では、ハングオン制御部３２２の備えるメモリ領域判定部３５１、データ書き込み部３５２、受信側ＣＰＵ判定部３５３、送信側制御部３５４、メモリ状態判定部３６１、データ読み出し部３６２、送信側ＣＰＵ判定部３６３、受信側制御部３６４は、それぞれ独立した機能ブロックとして構成されているものとして説明した。しかし、上記機能ブロックは、ひとつの機能ブロックとして構成されていてもよい。また、メモリ領域判定部３５１とデータ書き込み部３５２と受信側ＣＰＵ判定部３５３と送信側制御部３５４とをひとつの機能ブロックとし、メモリ状態判定部３６１とデータ読み出し部３６２と送信側ＣＰＵ判定部３６３と受信側制御部３６４とをひとつの機能ブロックとして構成してもよい。あるいは、全ての機能ブロックを独立した機能ブロックとしても良い。あるいは、これらの機能ブロックを、他のどのような組み合わせで構成しても構わない。
【０１０１】
実施の形態２．
実施の形態１では、受信側ＣＰＵ間通信制御手段（ＣＰＵ間通信制御部３２１）のハングオン制御手段（ハングオン制御部３２２の受信側ＣＰＵ間通信制御処理）にタイムアウト処理（図６のＳ４５８）を入れて、レディフラグ３１２のセット、クリアを制御するようにしたものである。すなわち、受信側ＣＰＵ間通信制御処理では、タイムアウト処理によりビジーループの実行継続時間の上限を制御し、受信側ＣＰＵが主体となってビジーループの実行を制御する処理とした。
【０１０２】
本実施の形態では、送信側のＣＰＵ間通信制御手段（ＣＰＵ間通信制御部３２１）のハングオン制御手段（ハングオン制御部３２２の送信側ＣＰＵ間通信制御処理）でタイムアウト処理を実行する場合について説明する。
【０１０３】
本実施の形態に係るＣＰＵ間通信システム８００（ＣＰＵ間通信システム、ＣＰＵ間通信方式）の構成は図２と同様であるため、説明を省略する。
【０１０４】
本実施の形態では、ＣＰＵ間通信制御部３２１の送信側ＣＰＵ通信制御処理は、実施の形態１の図４の送信側ＣＰＵ間通信制御処理の一部の動作を変更したものである。図７は、本実施の形態に係るＣＰＵ間通信制御部３２１の送信側ＣＰＵ通信制御処理を示すフローチャートである。図７において、図４と同様の動作には同一の符号を付し、その説明を省略する。
【０１０５】
図７において、Ｓ４０１〜Ｓ４０５間での処理は図４と同様である。また、本実施の形態に係るＣＰＵ間通信制御部３２１のハングオン制御部３２２（送信側制御部３５４（第１のタイムアウト時間記憶部））は、予め第１のタイムアウト時間を記憶装置に記憶する。Ｓ４０５において、ハングオン制御部３２２は、メモリ１０４（通信用メモリ３０５）がデータフルであると判定すると、Ｓ５０１へ進む。
【０１０６】
Ｓ５０１において、ハングオン制御部３２２（受信側ＣＰＵ判定部３５３）は、レディフラグ３１２を判定する。すなわち、ハングオン制御部３２２（受信側ＣＰＵ判定部３５３）は、受信側ＣＰＵの状態を判定する。
【０１０７】
ハングオン制御部３２２（受信側ＣＰＵ判定部３５３）によりレディフラグ３１２がセットされていないと判定されると（Ｓ５０１でＮｏ）、処理はＳ４０６ａへ進む。Ｓ４０６ａからＳ４０９ａまでの処理は図４と同様である。
【０１０８】
ハングオン制御部３２２（受信側ＣＰＵ判定部３５３）によりレディフラグ３１２がセットされていると判定されると（Ｓ５０１でＹｅｓ）、処理はＳ５０３へ進む。
【０１０９】
Ｓ５０３において、ハングオン制御部３２２（送信側制御部３５４）は、データフル解消待ちのビジーループを継続するタイムアウト時間として、記憶装置に記憶されている第１のタイムアウト時間を設定する。
【０１１０】
Ｓ５０４において、ハングオン制御部３２２（送信側制御部３５４）は、メモリ１０４（通信用メモリ３０５）のデータフルが解消したか否かを判定する。データフルが解消したと判定された場合は（Ｓ５０４でＹｅｓ）、Ｓ４０１へ戻りデータ送信処理（データ書き込み処理）を実行する。データフルが解消していないと判定された場合は（Ｓ５０４でＮｏ）、Ｓ５０５へ進む。
【０１１１】
Ｓ５０５において、ハングオン制御部３２２（送信側制御部３５４）は、第１のタイムアウト時間によるデータフル解消待ちタイムアウトが発生したか否かを判定する。すなわち、ハングオン制御部３２２（送信側制御部３５４）は、受信側ＣＰＵの状態がデータ読み出し処理の実行状態である（レディフラグ３１２がセットされている）と判定された場合に、データ書き込み処理の待ち状態とし、データ書き込み処理の待ち状態の開始時点から第１のタイムアウト時間が経過したか否かを判定する。
【０１１２】
データフル解消待ちタイムアウトが発生していないと判定された場合は（Ｓ５０５でＮｏ）、Ｓ５０４へ戻り、メモリ１０４（通信用メモリ３０５）のデータフルが解消するまでＳ５０４からＳ５０５の処理を繰り返す。すなわち、ハングオン制御部３２２（送信側制御部３５４）は、受信側ＣＰＵのデータ書き込み処理の実行中（データ書き込み処理のビジーウェイト中も含む）であるため、短時間でデータフルが解消すると見込んで、データ書き込み処理（データ送信処理）を第１のタイムアウト時間が経過するまでビジーループする。
【０１１３】
データフル解消待ちタイムアウトが発生したと判定された場合は（Ｓ５０５でＹｅｓ）、Ｓ４０６ａに進み、ハングオン制御部３２２（送信側制御部３５４）は送信側ＣＰＵ間通信制御処理（データ書き込み処理（データ送信処理））を送信待ちセマフォ３０６によるウェイト状態とする。
【０１１４】
本実施の形態のＣＰＵ間通信制御部３２１は、次のような特徴を備える。送信側制御部３５４は、予め第１のタイムアウト時間を記憶装置に記憶する。受信側ＣＰＵ判定部３５３により受信側ＣＰＵの状態がデータ読み出し処理の実行状態でないと判定された場合（Ｓ５０１でＮｏ）に、データ読み出し開始要求Ｘ１を受信側ＣＰＵへ送信し（Ｓ４０６ｂ）、送信待ちセマフォ３０６によりデータ書き込み処理を待ち状態とする。受信側ＣＰＵ判定部３５３により受信側ＣＰＵの状態がデータ読み出し処理の実行状態であると判定された場合（Ｓ５０１でＹｅｓ）、送信側制御部３５４は、第１のタイムアウト時間が経過したか否かを判定し、第１のタイムアウト時間が経過していない場合は、メモリ１０４に空き領域ができるまでデータ書き込み処理の待ち状態（ビジーループ）とし、第１のタイムアウト時間が経過した場合は、データ読み出し開始要求Ｘ１を受信側ＣＰＵへ送信し（Ｓ４０６ｂ）、送信待ちセマフォ３０６によるデータ書き込み処理の待ち状態とする。送信側制御部３５４は、送信側スケジューリング部の一例である。
【０１１５】
図７に示す送信側ＣＰＵ間通信方法では、ＣＰＵ間通信制御部３２１が実行中（ＣＰＵ間通信制御部３２１がビジーループによるウェイト状態の場合も含む）の場合に継続フラグ３１１がセットされ、ＣＰＵ間通信制御部３２１が送信待ちセマフォ３０６によりウェイト状態の場合には、継続フラグ３１１がクリアされるとした。
【０１１６】
しかし、例えば、送信側ＣＰＵ間通信制御処理では、ＣＰＵ間通信制御部３２１がビジーループによるウェイト状態の場合のみに継続フラグ３１１がセットされる処理（すなわち、図５の処理）としてもよい。図８は、本実施の形態のＣＰＵ間通信制御部３２１の送信側ＣＰＵ間通信制御処理がビジーループによるウェイト状態の場合のみに継続フラグ３１１がセットされる処理である場合を示すフローチャートである。すなわち、図８は図５の一部が変更となった処理を示すフロー図である。
【０１１７】
上記処理の場合には、図７におけるＳ４０６ａ（継続フラグのクリア処理）、Ｓ４０９ａ（継続フラグのセット処理）は不要となる。そして、ハングオン制御部３２２（送信側制御部３５４）は、Ｓ５０１でＹｅｓの場合（レディフラグ３１２がセットされている場合）に継続フラグ３１１をセットし（Ｓ５０２）、その後Ｓ５０４〜Ｓ５０５のビジーループの処理を実行する。ハングオン制御部３２２（送信側制御部３５４）は、Ｓ５０４〜Ｓ５０５においてビジーループの処理を第１のタイムアウト時間経過（タイムアウト発生）により抜けると、Ｓ５０６において継続フラグ３１１をクリアする。
【０１１８】
以上のように、本実施の形態では、送信側ＣＰＵ間通信制御手段にタイムアウト処理を入れたので、送信側ＣＰＵにおいて、ビジーループの実行・終了を制御することができる。
【０１１９】
実施の形態３．
上述した実施の形態１及び実施の形態２では、継続フラグ３１１とレディフラグ３１２とに基づいて、ビジーループによるウェイトとセマフォ待ちによるウェイトとを切り替えるものであった。本実施の形態では、ビジーループ実行時のＯＳ３０１のスケジューリングを制御する方式について説明する。
【０１２０】
図９は、本実施の形態におけるＣＰＵ間通信システム８００のブロック構成図である。図９において、実施の形態１で説明した図２と同様の機能ブロックについては同一の符号を付し、その説明を省略する。
【０１２１】
図９では、図２の構成に加えて、ＣＰＵ間通信制御部３２１が、スケジューリング制御部６０１、割込・コンテキストスイッチ遅延計測部６０２、ビジーループ時間設定部６０３を備える。また、ビジーループのスケジューリング制御時間のタイムアウト時間として、データフル解消待ち第３タイムアウト時間６１１（第３のタイムアウト時間）、データフル解消待ち第４タイムアウト時間６１２（第４のタイムアウト時間）、データエンプティ待ち第５タイムアウト時間６１３（第５のタイムアウト時間）、データエンプティ待ち第６タイムアウト時間６１４（第６のタイムアウト時間）を予め備える。すなわち、ＣＰＵ間通信システム８００のＣＰＵ間通信制御部３２１は、予め、データフル解消待ち第３タイムアウト時間６１１、データフル解消待ち第４タイムアウト時間６１２、データエンプティ待ち第５タイムアウト時間６１３、データエンプティ待ち第６タイムアウト時間６１４を決定し、記憶装置（ＣＰＵ１０１のローカルメモリでもよい）に記憶する。ＣＰＵ間通信制御部３２１は、第３のタイムアウト時間記憶部、第４のタイムアウト時間記憶部、第５のタイムアウト時間記憶部、第６のタイムアウト時間記憶部の一例である。
【０１２２】
図１０は、本実施の形態に係るＣＰＵ間通信システムの送信側スケジューリング制御方法（送信側スケジューリング制御処理）である。図１０を用いて、ＣＰＵ間通信システムのスケジューリング制御部６０１による送信側スケジューリング制御方法の動作について説明する。
【０１２３】
本実施の形態で説明するＣＰＵ間通信方法は、継続フラグ３１１は受信側ＣＰＵのデータ書き込み処理のビジーループ時にセットされる方式（すなわち、図５あるいは図８の方式）であるものとする。したがって実施の形態２で説明した図８を一部変更した場合について説明し、図８において説明した処理と同様の処理には同一の符号を付し、その説明を省略する。
【０１２４】
図１０においてＳ４０１からＳ５０２までは図８の処理と同様である。Ｓ５０２において、ハングオン制御部３２２は、継続フラグ３１１をセットするとＳ７０１に進む。
【０１２５】
Ｓ７０１において、スケジューリング制御部６０１は、データフル解消待ち第３タイムアウト時間６１１を設定する。また、スケジューリング制御部６０１は、Ｓ７０２で、データフル解消待ち第４タイムアウト時間６１２を設定する。ＣＰＵ間通信制御システム８０１におけるＣＰＵ間通信制御方法において、データフル解消待ち第３タイムアウト時間６１１、データフル解消待ち第４タイムアウト時間６１２に設定する時間を決定する方法は、後述する。スケジューリング制御部６０１は、送信側制御部３５４の一例であってもよい。
【０１２６】
Ｓ７０３において、スケジューリング制御部６０１は、ＯＳ３０１にスケジューリングロックの指示を出し、他のタスクへのスイッチを禁止する。次に、Ｓ７０４において、スケジューリング制御部６０１は、メモリ１０４（通信用メモリ３０５）のデータフルが解消したかチェックする。このとき、スケジューリング制御部６０１は、メモリ領域判定部３５１でもよい。データフルが解消していない場合は（Ｓ７０４でＮｏ）、スケジューリング制御部６０１は、Ｓ７０５に進む。
【０１２７】
Ｓ７０５において、スケジューリング制御部６０１は、データフル解消待ち第３タイムアウトが発生したかチェックし、タイムアウトが発生していない場合はＳ７０４に戻り、データフルが解消するまでビジーループでウェイトする第１の待ち状態とする。つまり、Ｓ７０３で実行したスケジューリングロック状態のまま、ビジーループによりデータフル解消をウェイトする。なお、スケジューリングロック状態でも割込は受信できるものとする。
【０１２８】
スケジューリング制御部６０１は、Ｓ７０５において、第１の待ち状態が発生してからデータフル解消待ち第３タイムアウト時間が経過したか否かを判定する。Ｓ７０５でデータフル解消待ち第３タイムアウト時間６１１によるデータフル解消待ち第３タイムアウトが発生した場合は、スケジューリング制御部６０１は、Ｓ７０６で、ＯＳ３０１にスケジューリングロック解除指示を出し、ＯＳ３０１によるタスクスイッチを可能にする。続いて、スケジューリング制御部６０１は、ビジーループのスケジューリングを、ＯＳ３０１内の同一優先度のタスク間で再スケジューリングを繰り返すＹｉｅｌｄスケジューリングに切り替える。スケジューリング制御部６０１は、Ｓ７０７に進む。
【０１２９】
Ｓ７０７において、スケジューリング制御部６０１は、データフルが解消したかチェックする。データフルが解消していない場合は、スケジューリング制御部６０１は、Ｓ７０８で、データフル解消待ち第４タイムアウト時間６１２によるデータフル解消待ち第４タイムアウトが発生したかチェックし、タイムアウトが発生していない場合はＳ７０７に戻り、Ｙｉｅｌｄスケジューリングによるビジーループでデータフル解消をウェイトする第２の待ち状態とする。つまり、Ｓ７０６で実行したスケジューリングロック解除状態のまま、ビジーループによりデータフル解消をウェイトする（第２の待ち状態）。
【０１３０】
Ｓ７０４またはＳ７０７で、スケジューリング制御部６０１は、データフルが解消した場合は、Ｓ４０１に戻り、データ送信を行う。Ｓ４０１以降の処理は図５あるいは図８にて説明した処理と同様である。
【０１３１】
スケジューリング制御部６０１は、Ｓ７０８において、第２の待ち状態が発生してからデータフル解消待ち第４タイムアウト時間が経過したか否かを判定する。Ｓ７０８でデータフル解消待ち第４タイムアウト時間６１２によるデータフル解消待ち第４タイムアウトが発生した場合は、スケジューリング制御部６０１は、図８のＳ５０６に戻り、継続フラグ３１１をクリアして、ビジーループによるウェイト（第２の待ち状態）を終了する。
【０１３２】
以上で、本実施の形態に係る送信側ＣＰＵ間通信方法の送信側スケジューリング制御方法の説明を終了する。スケジューリング制御部６０１は、第１のスケジューリング部、第２のスケジューリング部の一例である。
【０１３３】
図１１は、本実施の形態に係るＣＰＵ間通信システム８００の受信側スケジューリング制御方法（受信側スケジューリング制御処理）のフロー図である。図１１を用いて、本実施の形態に係るＣＰＵ間通信システム８００のスケジューリング制御部６０１における受信側スケジューリング制御方法の動作について説明する。
【０１３４】
図１１では、実施の形態１で説明した図６の処理を一部変更した処理であり、図６と異なる処理について説明し、図６において説明した処理と同様の処理には同一の符号を付し、その説明を省略する。
【０１３５】
図１１においてＳ４５１からＳ４５２までは図５の処理と同様である。Ｓ４５２において、ハングオン制御部３２２がメモリ１０４（通信用メモリ３０５）にデータフルが発生していないと判断すると（Ｓ４５２でＮｏ）、Ｓ７５２に進む。
【０１３６】
Ｓ７５２において、受信側のスケジューリング制御部６０１は、データエンプティ待ち第５タイムアウト時間６１３を設定する。Ｓ７５３において、受信側のスケジューリング制御部６０１は、データエンプティ待ち第６タイムアウト時間６１４を設定する。ＣＰＵ間通信システム８００におけるＣＰＵ間通信方法において、データエンプティ待ち第５タイムアウト時間６１３、データエンプティ待ち第６タイムアウト時間６１４に設定する時間を決定する方法は、後述する。スケジューリング制御部６０１は、受信側制御部３６４であってもよい。
【０１３７】
次に、Ｓ７５４で、受信側のスケジューリング制御部６０１は、ＯＳ３０１対してスケジューリングロックの指示を出し、ＯＳ３０１による他のタスクへのスイッチを禁止する。次に、Ｓ７５５で、受信側のスケジューリング制御部６０１は、データエンプティであるかチェックする。スケジューリング制御部６０１は、メモリ状態判定部３６１であってもよい。
【０１３８】
データエンプティでない場合は（Ｓ７５５でＮｏ）、受信側のスケジューリング制御部６０１は、Ｓ４６２へ進む。Ｓ４６２以降の処理は図６の処理と同様である。
【０１３９】
データエンプティの場合は（Ｓ７５５でＹｅｓ）、受信側のスケジューリング制御部６０１は、Ｓ７５６で、データエンプティ待ち第５タイムアウト時間６１３によるデータエンプティ待ち第５タイムアウトが発生したかチェックする。データエンプティ待ち第５タイムアウトが発生していない場合は（Ｓ７５６でＮｏ）、受信側のスケジューリング制御部６０１は、Ｓ７５５に戻る。すなわち、受信側のスケジューリング制御部６０１は、Ｓ７５４で指示したＯＳ３０１のスケジューリングロック状態のまま、ビジーループによりデータエンプティでなくなるのをウェイトする第３の待ち状態とする。送信側ＣＰＵの場合と同様に、スケジューリングロック状態でも割込は受信できるものとする。
【０１４０】
受信側のスケジューリング制御部６０１は、Ｓ７５６において、第３の待ち状態が発生してからデータフル解消待ち第５タイムアウト時間が経過したか否かを判定する。Ｓ７５６でデータフル解消待ち第５タイムアウト時間６１３によるデータフル解消待ち第５タイムアウトが発生した場合は、受信側のスケジューリング制御部６０１は、Ｓ７５７で、ＯＳ３０１にスケジューリングロック解除指示を出し、ＯＳ３０１によるタスクスイッチを可能にする。
【０１４１】
データエンプティ待ち第５タイムアウトが発生した場合は（Ｓ７５６でＹｅｓ）、Ｓ７５７に進む。Ｓ７５７において、受信側のスケジューリング制御部６０１は、ＯＳ３０１にスケジューリングロックを解除させるためのスケジューリングロック解除指示を出し、タスクスイッチを可能にする。そして、受信側のスケジューリング制御部６０１は、ビジーループのスケジューリングを、ＯＳ３０１内の同一優先度のタスク間で再スケジューリングを繰り返すＹｉｅｌｄスケジューリングに切り替える。
【０１４２】
Ｓ７５８において、受信側のスケジューリング制御部６０１は、メモリ１０４（通信用メモリ３０５）がデータエンプティであるかチェックする。データエンプティでない場合は（Ｓ７５８でＮｏ）、受信側のスケジューリング制御部６０１は、Ｓ４６２へ進む。Ｓ４６２以降の処理は図６の処理と同様である。
【０１４３】
データエンプティの場合は（Ｓ７５８でＹｅｓ）、受信側のスケジューリング制御部６０１は、Ｓ７５９で、データエンプティ待ち第６タイムアウト時間６１４によるデータエンプティ待ち第６タイムアウトが発生したかチェックする。データエンプティ待ち第６タイムアウトが発生していない場合は（Ｓ７５９でＮｏ）、受信側のスケジューリング制御部６０１は、Ｓ７５８に戻る。すなわち、受信側のスケジューリング制御部６０１は、Ｙｉｅｌｄスケジューリングによるビジーループでデータエンプティでなくなるのをウェイトする第４の待ち状態とする。
【０１４４】
データエンプティ待ち第６タイムアウトが発生した場合は（Ｓ７５９でＹｅｓ）、受信側のスケジューリング制御部６０１は、図６のＳ４５９ヘ進み、レディフラグ３１２をクリアして、ビジーループによるウェイトを終了する。Ｓ４５９以降の処理は、図６の処理と同様である。スケジューリング制御部６０１は、第３のスケジューリング部、第４のスケジューリング部の一例である。
【０１４５】
次に、タイムアウト時間を決定する処理について説明する。図１２は、本実施の形態３に係るタイムアウト時間決定処理の動作を示すフロー図である。
【０１４６】
図１２を用いて、データフル解消待ち第３タイムアウト時間６１１、データフル解消待ち第４タイムアウト時間６１２、データエンプティ待ち第５タイムアウト時間６１３、データエンプティ待ち第６タイムアウト時間６１４に設定するタイムアウト時間の決定方法（算出方法）を説明する。図１２は、タイムアウト時間を決定する割込・コンテキストスイッチ遅延計測部６０２、及び、ビジーループ時間設定部６０３の動作を示すものである。
【０１４７】
割込・コンテキストスイッチ遅延計測部６０２及びビジーループ時間設定部６０３は、システム起動時に１回だけ動作し、タイムアウト時間を決定し記憶装置に記憶する。あるいは、割込・コンテキストスイッチ遅延計測部６０２及びビジーループ時間設定部６０３は、定期的に動作して、記憶装置に記憶されたタイムアウト時間を定期的に更新するとしてもよい。
【０１４８】
Ｓ８０１において、割込・コンテキストスイッチ遅延計測部６０２は、割込による遅延時間の測定用のタイマ割込を発生させるための設定を行う。割込・コンテキストスイッチ遅延計測部６０２による割込・コンテキストスイッチ遅延時間計測方法では、タイマ割込を発生させた時刻である「タイマ割込発生時刻７５１」と、実際に割込ハンドラが呼び出された「割込ハンドラ呼出時刻７５２」との差を割込遅延時間７０１とする。
【０１４９】
割込・コンテキストスイッチ遅延計測部６０２は、Ｓ８０２において、タイマ割込を発生させタイマ割込発生時刻７５１を記憶装置に記憶する。Ｓ８０３において、ＯＳ３０１によりタイマ割込の発生に起因する割込ハンドラが呼び出されると、割込・コンテキストスイッチ遅延計測部６０２は、割込ハンドラが呼び出された時刻を、割込ハンドラ呼出時刻７５２として記憶装置に記憶する。
【０１５０】
Ｓ８０４において、割込・コンテキストスイッチ遅延計測部６０２は、記憶装置に記憶されたタイマ割込発生時刻７５１と割込ハンドラ呼出時刻７５２との差を算出し、算出した差を「割込遅延時間７０１」として記憶装置に記憶する。
【０１５１】
Ｓ８０５において、ＯＳ３０１により割込ハンドラからタスクへコンテキストスイッチする。Ｓ８０６において、割込・コンテキストスイッチ遅延計測部６０２は、割込ハンドラからタスクへコンテキストスイッチする時間を計測して「コンテキストスイッチ時間７０２」として記憶装置に記憶するとともに、コンテキストスイッチした時刻をコンテキストスイッチ時刻７５３として記憶装置に記憶する。
【０１５２】
ビジーループ時間設定部６０３は、以下の処理により各タイムアウト時間（データフル解消待ち第３タイムアウト時間６１１、データフル解消待ち第４タイムアウト時間６１２、データエンプティ待ち第５タイムアウト時間６１３、データエンプティ待ち第６タイムアウト時間６１４）を決定し、記憶装置に記憶する。
【０１５３】
Ｓ８０７において、ビジーループ時間設定部６０３は、Ｓ８０４で算出された「割込遅延時間７０１」と、Ｓ８０６で算出された「コンテキストスイッチ時間７０２」との差分の２倍の値を算出し、データフル解消待ち第３タイムアウト時間６１１として設定する。これは、コンテキストスイッチを２回行って元のタスクにスイッチする時間よりも短い時間でＣＰＵ間通信が行われるならば、スケジューリングロックで状態変更をウェイトした方が効率的なため、「割込遅延時間７０１」と「コンテキストスイッチ時間７０２」との差分の２倍の値をスケジューリングロック状態でのタイムアウト時間（データフル解消待ち第３タイムアウト時間６１１）とした例である。
【０１５４】
また、ビジーループ時間設定部６０３は、データエンプティ待ち第５タイムアウト時間６１３も、データフル解消待ち第３タイムアウト時間６１１と同じ決定方法により時間を決定する。すなわち、ビジーループ時間設定部６０３は、割込遅延時間７０１とコンテキストスイッチ時間７０２との差分の２倍の値を、スケジューリングロック状態でのタイムアウト時間（データフル解消待ち第５タイムアウト時間６１３）として設定する。
【０１５５】
次に、Ｓ８０８において、ビジーループ時間設定部６０３は、Ｓ８０６のコンテキストスイッチ時刻７５３と、Ｓ８０２のタイマ割込発生時刻７５１との差分の２倍の値を、データフル解消待ち第４タイムアウト時間６１２として設定する。これは、タイマ割込を受けてからコンテキストスイッチする時間に相当する時間でＣＰＵ間通信が行われるならば、ビジーループで状態変更をウェイトした方が効率的なため、コンテキストスイッチ時刻７５３とタイマ割込発生時刻７５１の差分の２倍の値をビジーループのタイムアウト時間（データフル解消待ち第４タイムアウト時間６１２）とした例である。また、ビジーループ時間設定部６０３は、データエンプティ待ち第６タイムアウト時間６１４も、データフル解消待ち第４タイムアウト時間６１２と同じ時間に設定する。
【０１５６】
以上のように、ＣＰＵ間通信制御部３２１は、スケジューリング制御部６０１を備えているので、ＣＰＵ間通信のウェイト方法を段階的に変更することができる。また、遅延時間に合わせて適切なウェイト方法をとることができるようになる。また、割込・コンテキストスイッチ遅延計測手段（割込・コンテキストスイッチ遅延計測部６０２）とビジーループ時間設定手段（ビジーループ時間設定部６０３）とにより、それぞれのウェイト時間（タイムアウト時間）をシステムのハードウェア性能、ＯＳ３０１の性能に合わせて適切な時間を自動的に設定することができるようになる。
【０１５７】
本実施の形態では、以下のような特徴を有するＣＰＵ間通信システム８００について説明した。
【０１５８】
ＣＰＵ間通信制御手段（ＣＰＵ間通信制御部３２１）内に、ハングオン制御部３２２に加えて、以下の手段を備えることを特徴とするＣＰＵ間通信方式（ＣＰＵ間通信システム８００）。
（ａ）ＣＰＵ間通信による送信側のデータフル解消待ちをビジーループでウェイトする場合に、一定時間ＯＳ３０１のスケジューリングをロックすることにより他のタスクにスイッチしないようにしてウェイトする送信側スケジューリング制御手段（スケジューリング制御部６０１）。
（ｂ）前記（ａ）のＯＳ３０１のスケジューリングロックの間に送信側のデータフルが解消しなかった場合、ＯＳ３０１内の同一優先度のタスク間で再スケジューリングを繰り返すＹｉｅｌｄスケジューリングによりウェイトすることにより、段階的にビジーループの優先性を制御する送信側スケジューリング制御手段（スケジューリング制御部６０１）。
（ｃ）ＣＰＵ間通信による受信側のデータエンプティ待ちをビジーループでウェイトする場合に、送信の場合と同様に、一定時間ＯＳ３０１のスケジューリングをロックすることにより他のタスクにスイッチしないようにしてウェイトする受信側スケジューリング制御手段（スケジューリング制御部６０１）。
（ｄ）前記（ｃ）のＯＳ３０１のスケジューリングロックの間に受信側のデータエンプティが解消しなかった場合、ＯＳ３０１内の同一優先度のタスク間で再スケジューリングを繰り返すＹｉｅｌｄスケジューリングによりウェイトすることにより、段階的にビジーループの優先性を制御する受信側スケジューリング制御手段（スケジューリング制御部６０１）。
【０１５９】
前記のＣＰＵ間通信制御手段内（ＣＰＵ間通信制御部３２１）に、ハングオン制御手段（ハングオン制御部３２２）、スケジューリング制御手段（スケジューリング制御部６０１）に加えて、以下の手段を備えることを特徴とするＣＰＵ間通信方式（ＣＰＵ間通信システム８００）。
（ａ）タイマ割込発生からＯＳ３０１の割込ハンドラ呼出しまでの割込応答遅延時間（割込遅延時間７０１）を測定する割込遅延計測手段（割込み・コンテキストスイッチ遅延計測部６０２）。
（ｂ）ＯＳ３０１のタスク間のコンテキストスイッチ遅延時間（コンテキストスイッチ時間７０２）を計測するコンテキストスイッチ計測手段（割込み・コンテキストスイッチ遅延計測部６０２）。
（ｃ）前記（ａ）、（ｂ）で計測した割込応答遅延時間（割込遅延時間７０１）とコンテキストスイッチ遅延時間（コンテキストスイッチ時間７０２）とに基づいて、ビジーループのタイムアウト時間を決定するビジーループ時間設定手段（ビジーループ時間設定部６０３）。
【０１６０】
実施の形態４．
実施の形態１で説明したＣＰＵ間通信システム８００のＣＰＵ間割込処理を変更することにより、ＣＰＵ間通信の遅延時間を短縮する方法について説明する。
【０１６１】
図１３は、本実施の形態４におけるＣＰＵ間通信システムの機能ブロック図である。図１３において、上述した図９と同様の機能ブロックについては同一の符号を付し、その説明を省略する。図１３では、図９の構成に加えて、ＣＰＵ間通信制御部３２１がプレＣＰＵ間割込部６５０を備えている。
【０１６２】
図１４は、本実施の形態４におけるＣＰＵ間通信システムのＣＰＵ間通信方法の一部を示すフロー図である。図１４に示すフローは、上述した図４に示すフローを一部変更したものである。図１４を用いて、本実施の形態に係るＣＰＵ間通信システム８００の送信側のプレＣＰＵ間割込手段（プレＣＰＵ間割込部６５０）の動作を示す。
【０１６３】
図４のＳ４０１〜Ｓ４０３で説明したように、ＣＰＵ間割込（データ読み出し開始要求Ｘ１）は、送信側ＣＰＵから受信側ＣＰＵへデータ送信が行われたことを通知するためのＣＰＵ間割込であった。
【０１６４】
本実施の形態では、Ｓ４０１ａにて、ハングオン制御部３２２により継続フラグ３１１がセットされると、Ｓ１００２において、プレＣＰＵ間割込部６５０は、レディフラグ３１２がセットされているかをチェックする。レディフラグ３１２１がセットされている場合は（Ｓ１００２でＹｅｓ）、Ｓ１００４に進み、ハングオン制御部３２２は、データ送信処理を実行する。レディフラグ３１２１がセットされていない場合は（Ｓ１００２でＮｏ）、Ｓ１００３に進む。
【０１６５】
Ｓ１００３において、プレＣＰＵ間割込部６５０は、受信側ＣＰＵへＣＰＵ間割込（データ読み出し開始要求Ｘ１）を送信する。その後、Ｓ１００４に進み、ハングオン制御部３２２は、データ送信処理を実行する。ハングオン制御部３２２は、Ｓ１００４でデータ送信を行った後、Ｓ４０４に進む。Ｓ４０４以降の処理は、図４において説明した処理と同様に、全データ送信完了チェック以降の手順を行う。
【０１６６】
上記の処理により、ＣＰＵ間割込（データ読み出し開始要求Ｘ１）がデータ送信前に受信側ＣＰＵに処理されても、受信側タスクはビジーループでデータエンプティ待ちするため、ＣＰＵ間通信を行うことができる。
【０１６７】
図１５は、本実施の形態４におけるＣＰＵ間通信システムのＣＰＵ間通信方法の一部を示すフロー図である。図１５に示すフローは、上述した図６に示すフローを一部変更したものである。図１５を用いて、本実施の形態に係るＣＰＵ間通信システム８００の受信側のプレＣＰＵ間割込手段（プレＣＰＵ間割込部６５０）の動作を示す。
【０１６８】
図６のＳ４５３〜Ｓ４５５で説明したように、ＣＰＵ間割込（データ書き込み開始要求Ｘ２）は、受信側ＣＰＵから送信側ＣＰＵへデータ受信が行われたことを通知するためのＣＰＵ間割込であった。
【０１６９】
本実施の形態では、Ｓ４５２にてデータフルが発生したと判断されると（Ｓ４５２でＹｅｓ）、プレＣＰＵ間割込部６５０は、継続フラグ３１１がセットされているかチェックする（Ｓ１０５１）。継続フラグ３１１がセットされている場合は（Ｓ１０５１でＹｅｓ）、Ｓ１０５３に進み、ハングオン制御部３２２は、データ受信処理を実行する。継続フラグ３１１がセットされていない場合は（Ｓ１０５１でＮｏ）、Ｓ１０５２に進む。
【０１７０】
Ｓ１０５２において、プレＣＰＵ間割込部６５０は、送信側ＣＰＵへＣＰＵ間割込（データ書き込み開始要求Ｘ２）を送信する。その後、Ｓ１０５３に進み、ハングオン制御部３２２は、データ受信処理を実行する。ハングオン制御部３２２は、Ｓ１０５３でデータ受信（データ読み出し処理）を行った後、Ｓ４６３に進む。Ｓ４６３以降の処理は、図６において説明した処理と同様に、全データ受信完了チェック以降の手順を行う。
【０１７１】
上記処理により、ＣＰＵ間割込（データ書き込み開始要求Ｘ２）がデータ受信前に送信側ＣＰＵに処理されても、送信側タスクはビジーループでデータフル解消待ちするため、ＣＰＵ間通信を行うことができる。
【０１７２】
本実施の形態では、以下の特徴と備えるＣＰＵ間通信システム８００について説明した。
【０１７３】
ＣＰＵ間通信制御手段（ＣＰＵ間通信制御部３２１）内に、ハングオン制御手段（ハングオン制御部３２２）に加えて、以下の手段を備えることを特徴とするＣＰＵ間通信方式（ＣＰＵ間通信システム８００）。
（ａ）ＣＰＵ間通信において、受信側タスクを起床するＣＰＵ間割込を、データ送信処理後ではなく、データ送信処理前に送る送信側プレＣＰＵ間割込手段（プレＣＰＵ間割込部６５０）。
（ｂ）ＣＰＵ間通信において、送信側タスクを起床するＣＰＵ間割込を、データ受信処理後ではなく、データ受信処理前に送る受信側プレＣＰＵ間割込手段（プレＣＰＵ間割込部６５０）。
【０１７４】
以上のように、本実施の形態に係るＣＰＵ間通信システム８００は、ＣＰＵ間通信制御手段（ＣＰＵ間通信制御部３２１）内にプレＣＰＵ間割込手段（プレＣＰＵ間割込部６５０）を持つことにより、遅延時間の大きいＣＰＵ間割込を事前に相手側ＣＰＵに送ることができ、ＣＰＵ間割込を受けてビジーループでＣＰＵ間通信の送受信をウェイトするので、高速なＣＰＵ間通信を行うことができる。
【０１７５】
実施の形態５．
実施の形態１〜４では、図１のような対称型マルチＣＰＵ構成のＣＰＵ間通信システム８００におけるＣＰＵ間通信方式（ＣＰＵ間通信制御方法）を示した。本実施の形態では、２ポートメモリやＦＩＦＯメモリによりＣＰＵ間を接続する非対称型マルチＣＰＵ構成のＣＰＵ間通信システム８０１でも、実施の形態１〜４で説明したＣＰＵ間通信方式（ＣＰＵ間通信制御方法）を適用することができることについて説明する。
【０１７６】
図１６は、本実施の形態に係る非対称型マルチＣＰＵ構成を備えるＣＰＵ間通信システム８０１の構成図である。各ＣＰＵ（１０１、１０２、１０３）は、自ＣＰＵ用のローカルメモリ（２２１、２２２、２２３）と、自ＣＰＵ用のバス（２１１、２１２、２１３）を備える。
【０１７７】
各ＣＰＵ（１０１、１０２、１０３）間は、各ＣＰＵの持つバス（自ＣＰＵ用のバス（２１１、２１２、２１３））を介して、２ポートメモリもしくはＦＩＦＯメモリ（２０４、２０５）により接続される。ＣＰＵ間通信システム８０１では、２ポートメモリもしくはＦＩＦＯメモリ（２０４、２０５）上に、図２の通信用メモリ３０５、送信待ちセマフォ３０６、受信待ちセマフォ３０７、継続フラグ３１１、レディフラグ３１２を備える。
【０１７８】
以上の構成とすることにより、上述した実施の形態１〜４のＣＰＵ間通信制御手段（ＣＰＵ間通信制御部３２１）に、上述した実施の形態１〜４と同じ動作をさせることができる。すなわち、非対称型マルチＣＰＵ構成のシステム（装置）においても、上述した実施の形態１〜４のＣＰＵ間通信方式（ＣＰＵ間通信制御方法）を適用することにより、高速なＣＰＵ間通信を行うことができる。
【０１７９】
本実施の形態のＣＰＵ間通信システム８０１は、上述した実施の形態１〜４のＣＰＵ間通信方式（ＣＰＵ間通信制御方法）を、同一ＣＰＵバス内にあるメモリを使ったデータ通信ではなく、異なるバス間を接続する２ポートメモリもしくはＦＩＦＯメモリを使ったデータ通信に適用することを特徴とする。
【０１８０】
以上、実施の形態１〜５について説明したが、これらのうち、２つ以上の実施の形態を組み合わせて実施しても構わない。あるいは、これらのうち、１つの実施の形態を部分的に実施しても構わない。あるいは、これらのうち、２つ以上の実施の形態を部分的に組み合わせて実施しても構わない。
【０１８１】
また、実施の形態１〜５の説明において、ＣＰＵ間通信制御部３２１内のハングオン制御部３２２の備えるメモリ領域判定部３５１、データ書き込み部３５２、受信側ＣＰＵ判定部３５３、送信側制御部３５４、メモリ状態判定部３６１、データ読み出し部３６２、送信側ＣＰＵ判定部３６３、受信側制御部３６４は、それぞれ独立した機能ブロックとして構成されているものとして説明した。また、さらに、ＣＰＵ間通信制御部３２１内のスケジューリング制御部６０１、割込・コンテキストスイッチ遅延計測部６０２、ビジーループ時間設定部６０３、プレＣＰＵ間割込部６５０が独立した機能ブロックであるとして説明した。しかし、上記機能ブロックは、例えば、ひとつの機能ブロックとして構成されていてもよいし、上述した機能ブロックを組み合わせることにより３つの機能ブロックとしてもよい。上述した機能をどのように組み合わせて機能ブロックを構成しても構わない。
【符号の説明】
【０１８２】
１０１，１０２，１０３  ＣＰＵ、１０４  メモリ、１０５  ＩＯデバイス、１１１  バス、２０４，２０５  ２ポートメモリもしくはＦＩＦＯメモリ、２２１，２２２，２２３  自ＣＰＵ用のローカルメモリ、２１１，２１２，２１３  自ＣＰＵ用のバス、３０１  ＯＳ、３０２，３０３，３０４  タスク、３０５  通信用メモリ、３０６  送信待ちセマフォ、３０７  受信待ちセマフォ、３０８  ＣＰＵ間割込レジスタ、３０９  タイマレジスタ、３１１  継続フラグ、３１２  レディフラグ、３２１  ＣＰＵ間通信制御部、３２２  ハングオン制御部、３５１  メモリ領域判定部、３５２  データ書き込み部、３５３  受信側ＣＰＵ判定部、３５４  送信側制御部、３６１  メモリ状態判定部、３６２  データ読み出し部、３６３  送信側ＣＰＵ判定部、３６４  受信側制御部、６０１  スケジューリング制御部、６０２  割込・コンテキストスイッチ遅延計測部、６０３  ビジーループ時間設定部、６１１  データフル解消待ち第３タイムアウト時間、６１２  データフル解消待ち第４タイムアウト時間、６１３  データエンプティ待ち第５タイムアウト時間、６１４  データエンプティ待ち第６タイムアウト時間、６５０  プレＣＰＵ間割込部、７０１  割込遅延時間、７０２  コンテキストスイッチ時間、７５１  タイマ割込発生時刻、７５２  割込ハンドラ呼出時刻、７５３  コンテキストスイッチ時刻、８００  ＣＰＵ間通信システム、８９０  装置、９０１  表示装置、９０２  キーボード、９０３  マウス、９０４  ＦＤＤ、９０５  ＣＤＤ、９０６  プリンタ装置、９０７  スキャナ装置、９１１  ＣＰＵ、９１３  ＲＯＭ、９１４  ＲＡＭ、９１５  通信ボード、９２０  磁気ディスク装置、９２１  オペレーティングシステム、９２２  ウィンドウシステム、９２３  プログラム群、９２４  ファイル群、Ｘ１  データ読み出し開始要求、Ｘ２  データ書き込み開始要求。
【図１】
0005511538.tif 000002
【図２】
0005511538.tif 000003
【図３】
0005511538.tif 000004
【図４】
0005511538.tif 000005
【図５】
0005511538.tif 000006
【図６】
0005511538.tif 000007
【図７】
0005511538.tif 000008
【図８】
0005511538.tif 000009
【図９】
0005511538.tif 000010
【図１０】
0005511538.tif 000011
【図１１】
0005511538.tif 000012
【図１２】
0005511538.tif 000013
【図１３】
0005511538.tif 000014
【図１４】
0005511538.tif 000015
【図１５】
0005511538.tif 000016
【図１６】
0005511538.tif 000017