(57)【要約】      （修正有）【課題】緊急時に優先的にプログラムを実行させることで可用性を高めた計算機及び演算処理方法を提供する。【解決手段】依頼元計算機１０４が他計算機１０５に対して負荷状態を問い合わせた際に、全ての計算機が高負荷状態である場合、問い合わせを行った依頼元計算機１０４はもう一度、他計算機１０５に対して負荷状態を問い合わせる。この時、問い合わせには「要求サスペンドレベル」を付加する。これに対し、問い合わせを受けた他計算機１０５は、実行中のプログラムのうち、要求サスペンドレベルに合致するプログラムをサスペンドする。そして、処理能力に余裕ができた計算機を依頼先計算機１０６と決定して、プログラムの実行を依頼する。【選択図】図１
2014206879.tif 000002
【特許請求の範囲】
【請求項１】
指示を受けて所定のプログラムを実行する機能と、指示を受けて実行中のプログラムにおけるＣＰＵに対する負荷を低減させる機能と、指示を受けて前記ＣＰＵに対する負荷を低減させた前記プログラムの、前記ＣＰＵに対する負荷を復旧させる機能とを備える、プログラム実行処理部と、
ネットワークに接続され、前記ネットワークを通じて他の計算機から所定のメッセージを受信したことに基づいて、実行中のプログラムにおけるＣＰＵに対する負荷を低減させる処理を前記プログラム実行処理部に指示し、前記他の計算機から受信した実行依頼プログラムの実行を前記プログラム実行処理部に指示し、前記実行依頼プログラムの実行が終了したことに基づいて前記実行依頼プログラムの実行結果を前記他の計算機に返信すると共に、前記ＣＰＵに対する負荷を低減させた前記プログラムの、前記ＣＰＵに対する負荷を復旧させる処理を前記プログラム実行処理部に指示する、入出力制御部と
を具備する計算機。
【請求項２】
更に、
実行中又は負荷低減中のプログラムの名称が格納されるプログラム名フィールドと、前記プログラムの優先順位が格納されるサスペンドレベルフィールドとを具備する実行中プログラム管理テーブルと
を具備し、
前記入出力制御部は、前記実行依頼プログラムの優先順位と前記実行中プログラム管理テーブルのサスペンドレベルフィールドの値とを比較して、前記ＣＰＵに対する負荷を低減させる処理を実施するプログラムを選ぶ、
請求項１記載の計算機。
【請求項３】
更に、
前記ＣＰＵの負荷状態を報告するシステムモニタと
を具備し、
前記入出力制御部は、前記他の計算機から所定のメッセージを受信したことに基づいて、前記システムモニタから得た前記ＣＰＵの負荷状態を前記他の計算機へ報告し、前記他の計算機から前記優先順位を伴う所定のメッセージを受信したことに基づいて、前記システムモニタから得た前記ＣＰＵの負荷状態から、前記ＣＰＵに対する負荷を低減させる処理を実施するプログラムを選んだ場合における、前記ＣＰＵの予想負荷状態を前記他の計算機へ報告する、
請求項２記載の計算機。
【請求項４】
前記入出力制御部は、前記実行依頼プログラムの優先順位と前記実行中プログラム管理テーブルのサスペンドレベルフィールドの値とが同じプログラムに対して、前記ＣＰＵに対する負荷を低減させる処理を実施する、
請求項３記載の計算機。
【請求項５】
前記入出力制御部は、前記実行依頼プログラムの優先順位に比べて前記実行中プログラム管理テーブルのサスペンドレベルフィールドの値が低いプログラムに対して、前記ＣＰＵに対する負荷を低減させる処理を実施する、
請求項３記載の計算機。
【請求項６】
計算機を一意に識別する情報が格納される計算機アドレスフィールドと、前記計算機のＣＰＵに対する負荷の値である計算機負荷値が格納される計算機負荷値フィールドと、前記計算機負荷値フィールドの値と所定の閾値とを比較して、所望の実行依頼プログラムを実行可能か否かを判定した判定結果が格納される判定結果フィールドとを具備するプログラム転送先計算機管理テーブルと、
ネットワークに接続され、前記実行依頼プログラムの実行を依頼するために、前記ネットワークを通じて他の計算機に前記計算機負荷値を問い合わせ、前記ネットワークを通じて前記他の計算機から受信した前記計算機負荷値を前記プログラム転送先計算機管理テーブルの前記計算機負荷値フィールドに格納し、前記判定結果フィールドに判定結果を格納して、前記プログラム転送先計算機管理テーブルの全レコードの前記判定結果フィールドが否定的結果であった場合に、前記ネットワークを通じて、前記実行依頼プログラムの優先順位を伴って再度前記計算機負荷値を問い合わせ、前記ネットワークを通じて他の計算機から受信した前記計算機負荷値を前記プログラム転送先計算機管理テーブルの前記計算機負荷値フィールドに格納し、前記判定結果フィールドに判定結果を格納して、前記プログラム転送先計算機管理テーブルの前記判定結果フィールドに肯定的結果のレコードがあった場合に、前記レコードに係る計算機に前記実行依頼プログラムを送信する、入出力制御部と
を具備する計算機。
【請求項７】
ネットワークを通じて他の計算機から受信した所定のメッセージに基づいて、実行中のプログラムにおけるＣＰＵに対する負荷を低減させる負荷低減ステップと、
前記他の計算機から受信した実行依頼プログラムを実行する実行依頼プログラム実行ステップと、
前記実行依頼プログラムの実行が終了したことによる前記実行依頼プログラムの実行結果を前記他の計算機に返信する実行結果返信ステップと、
前記ＣＰＵに対する負荷を低減させた前記プログラムの、前記ＣＰＵに対する負荷を復旧させる負荷復旧ステップと
を有する、演算処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークに接続される計算機及び、それら計算機の演算処理方法に関する。
【背景技術】
【０００２】
近年、電気、ガス、水道等の社会インフラストラクチャを効率良く且つ安全に運用するために、情報ネットワークの利用が広がっている。特に、電力設備においては、需要家の負荷変動に対して安定した電力を供給する必要があることから、情報ネットワークの活用が必要とされている。また、今後増加する可能性がある自然エネルギー由来の発電設備によって生じる電力供給量の変動に対しても、需要家に影響が及ばないように工夫しなければならなくなることが容易に予想される。このような、情報ネットワークを用いて高度に制御される電力設備網は、スマートグリッドと呼ばれる。
【０００３】
スマートグリッド等の社会インフラストラクチャに用いられる情報ネットワークシステムは、社会インフラストラクチャと同様に、高度な可用性（availability）が求められる。ネットワークに接続される計算機は、負荷が集中してスラッシングが発生し、演算結果が得られなくなるような状況を避けなければならない。そこで、ネットワークに接続される計算機同士で演算能力を融通し合い、負荷を分散させる仕組みが考えられている。
【０００４】
なお、本発明に近いと思われる技術が開示されている先行技術文献を、特許文献１に示す。特許文献１には、負荷分散を行うための監視用計算機システムを必要とせず、また、各計算機システムの負荷状態を監視することなく計算機システム間の負荷分散を制御する負荷分散制御システムが開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１１−１４３８３９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ネットワークに配置された複数の計算機に対して負荷分散を行う方法の一つは、負荷分散の対象となる計算機と同一のネットワーク上に、各計算機の負荷情報を監視する専用のシステムを設置し、各計算機の負荷情報を収集することで、負荷の分散制御を実施する方法がある。この方法では、負荷分散を行うための監視用計算機システムが別途必要になる。また、監視用計算機システムが各計算機の負荷情報を常時収集するため、ネットワークの通信トラフィックを高める恐れがあるという問題点がある。
【０００７】
このような監視用計算機システムを設けることによる問題点を解決した技術が、特許文献１に開示される技術である。特許文献１に開示される技術は、ある高負荷状態の計算機が他の計算機に問い合わせを実施する。そして、低負荷状態の計算機から応答を受信した高負荷状態の計算機は、応答した低負荷状態の計算機に対して目的のアプリケーションプログラムを転送する。その後、低負荷状態の計算機はアプリケーションプログラム処理を実施し、処理結果を高負荷状態の計算機へ返信する。
【０００８】
しかしながらこの方法では、他の計算機が全て高負荷状態であった場合は、他計算機にアプリケーションプログラムの処理を依頼できず、結果的に自計算機で行わなければならなくなる。例えば、緊急時において即時の処理応答を求められるアプリケーションのプログラム処理を行う必要がある場合に、高負荷状態によって要求が処理できず応答性を損ねてしまう問題がある。すなわち、緊急時に優先的にプログラムを実行させるといった冗長化が考慮されていない。
【０００９】
本発明は係る状況に鑑みてなされたものであり、可用性を高めた計算機及び演算処理方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記課題を解決するために、本発明の計算機は、指示を受けて所定のプログラムを実行する機能と、指示を受けて実行中のプログラムにおけるＣＰＵに対する負荷を低減させる機能と、指示を受けてＣＰＵに対する負荷を低減させたプログラムの、ＣＰＵに対する負荷を復旧させる機能とを備える、プログラム実行処理部とを有する。更に、ネットワークに接続され、ネットワークを通じて他の計算機から所定のメッセージを受信したことに基づいて、実行中のプログラムにおけるＣＰＵに対する負荷を低減させる処理をプログラム実行処理部に指示し、他の計算機から受信した実行依頼プログラムの実行をプログラム実行処理部に指示し、実行依頼プログラムの実行が終了したことに基づいて実行依頼プログラムの実行結果を他の計算機に返信すると共に、ＣＰＵに対する負荷を低減させたプログラムの、ＣＰＵに対する負荷を復旧させる処理をプログラム実行処理部に指示する、入出力制御部とを具備する。
【発明の効果】
【００１１】
本発明により、可用性を高めた計算機及び演算処理方法を提供できる。
上記した以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施形態であるネットワークシステムの模式図である。
【図２】計算機のハードウェア構成を示すブロック図である。
【図３】計算機のソフトウェア上における機能を示すブロック図である。
【図４】各種データの構成と内容の一例を示す図である。
【図５】依頼元計算機が依頼先計算機にサスペンドを伴わないプログラムの実行を依頼するタイムチャートである。
【図６】依頼元計算機が依頼先計算機にサスペンドを伴うプログラムの実行を依頼するタイムチャートである。
【図７】依頼元計算機が他計算機にプログラムの実行を依頼できず、自己実行するタイムチャートである。
【図８】依頼元計算機における動作の流れを示すフローチャートである。
【図９】依頼元計算機における負荷問い合わせ処理の流れを示すフローチャートである。
【図１０】依頼元計算機における問い合わせ応答受信処理の流れを示すフローチャートである。
【図１１】依頼元計算機における計算機選択処理の流れを示すフローチャートである。
【図１２】他計算機における動作の流れを示すフローチャートである。
【図１３】依頼先計算機におけるプログラム受信処理の流れを示すフローチャートである。
【図１４】依頼先計算機におけるサスペンド処理の流れを示すフローチャートである。
【図１５】依頼先計算機におけるサスペンド解除処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００１３】
本実施形態の概要を説明する。
ある計算機が他の計算機に対して負荷状態を問い合わせた際に、全ての計算機が高負荷状態である場合、問い合わせを行った計算機はもう一度、他の計算機に対して負荷状態を問い合わせる。この時、問い合わせには「要求サスペンドレベル」を付加する。これに対し、問い合わせを受けた計算機は、実行中のプログラムのうち、要求サスペンドレベルに合致するプログラムを一時停止（サスペンド：suspend）する。そして、処理能力に余裕ができた計算機を選択して、プログラムの実行を依頼する。
なお、プログラム、転じてプロセスを一時停止する機能は、一例としてＰＯＳＩＸ系ＯＳでは「kill -STOP」というコマンドで標準装備されている。
【００１４】
［ネットワークシステム１０１の全体構成］
図１は、本発明の実施形態であるネットワークシステム１０１の模式図である。
今、ネットワーク１０２には複数の計算機１０３が接続されている。これら計算機１０３は、その計算機１０３自身が置かれている状況に応じて、所定のプログラムを実行する。このうち、ある計算機１０３は、自身の負荷が重くなり、その処理能力を超えてしまいそうな状況に陥る。この計算機１０３は、ネットワーク１０２に接続されている他の計算機１０３に負荷の状況を問い合わせて、負荷が軽く、演算能力に余裕がある計算機１０３を見つける。そして、その負荷が軽い計算機１０３に、プログラムの実行を依頼する。
【００１５】
これ以降、負荷が重くなり、他の計算機１０３へプログラムの実行を依頼する計算機１０３を「依頼元計算機１０４」、依頼元計算機１０４以外の他の計算機１０３を「他計算機１０５」と称する。そして、他計算機１０５のうち、プログラムの実行を依頼された計算機１０３を「依頼先計算機１０６」と称する。
なお、説明を簡単にするため、ネットワーク１０２はＴＣＰ／ＩＰネットワークであり、図１のネットワーク１０２に接続されている依頼元計算機１０４及び他計算機１０５は、全て同一のサブネットに属するプライベートＩＰアドレスが付与されているものとする。
すなわち、依頼元計算機１０４はネットワーク１０２上に存在する全ての他計算機１０５に対し、負荷の状況を問い合わせる。そして、全ての他計算機１０５の中から依頼先計算機１０６を一台決定して、プログラムの実行を依頼する。
【００１６】
［計算機１０３のハードウェア構成］
図２は、計算機１０３のハードウェア構成を示すブロック図である。
計算機１０３は、ＣＰＵ２０１、ＲＯＭ２０２、ＲＡＭ２０３、不揮発性ストレージ２０４とＮＩＣ（Network Information Card）２０５が、バス２０６に接続されて構成される。なお、計算機１０３にパーソナルコンピュータを用いる場合、表示部２０７及び操作部２０８を伴うが、表示部２０７及び操作部２０８は必ずしも必要とはされない。
不揮発性ストレージ２０４にはネットワークＯＳと、本実施形態の計算機１０３を機能させるためのプログラムが格納されている。
【００１７】
［計算機１０３のソフトウェア機能］
図３は、計算機１０３のソフトウェア上における機能を示すブロック図である。
入出力制御部３０１は、ネットワーク１０２を通じて他計算機１０５或は依頼元計算機１０４との間で、メッセージ、プログラム、そしてプログラムの実行結果の送受信を行う。
なお、入出力制御部３０１が他計算機１０５或は依頼元計算機１０４との間で、メッセージ、プログラム、そしてプログラムの実行結果の送受信を行う際に用いるプロトコルには、特に限定される要素はない。したがって、実装が容易なＨＴＴＰ（Hyper Text Transfer Protocol）等、適切なものを用いればよい。
【００１８】
プログラム実行処理部３０２は、不揮発性ストレージ２０４内に設けられる、プログラム記憶領域３０３に格納されているプログラムを実行する。
タスクマネージャとも呼ばれるシステムモニタ３０４は、現在実行中のプログラムと、それらプログラムが使用しているＣＰＵの演算能力を逐一入出力制御部３０１に報告する。
【００１９】
プログラム転送先計算機管理テーブル３０５は、ネットワーク１０２上に存在する全ての計算機１０３のＩＰアドレスと、それら計算機１０３毎の負荷状態等に関する情報を格納する。このプログラム転送先計算機管理テーブル３０５は、計算機１０３が依頼元計算機１０４として動作する際に必要なテーブルである。
【００２０】
実行中プログラム管理テーブル３０６は、プログラム実行処理部３０２が現在実行しているプログラムに関する情報を格納する。但し、実行中プログラム管理テーブル３０６に登録されるプログラムは、計算機１０３が属する環境に起因するプログラムに限られ、ネットワークＯＳのカーネルやシェル等、計算機１０３自身が動作するために必要なプログラムは除外される。計算機１０３が属する環境に起因するプログラムとは、スマートグリッドやプラント設備等の制御対象に直接的に起因する、種々の演算プログラムであり、計算機負荷判断ルール４０３のサスペンドレベルが付与されている。これら、計算機負荷判断ルール４０３のサスペンドレベルが付与されている演算プログラムは、プログラム管理テーブル３０８に登録されている。
この実行中プログラム管理テーブル３０６は、計算機１０３が依頼先計算機１０６として動作する際に必要なテーブルである。
【００２１】
実行中依頼プログラム情報３０７はＲＡＭ２０３内に設けられる変数である。この実行中依頼プログラム情報３０７は、計算機１０３が依頼先計算機１０６として動作している状態において、依頼元計算機１０４のＩＰアドレスと、現在依頼元計算機１０４から受信して実行中のプログラムに関する情報を格納する。計算機１０３が依頼先計算機１０６として動作していない状態では、実行中依頼プログラム情報３０７は何れのフィールドも空（ＮＵＬＬ）になる。
【００２２】
改めて図１を参照して説明する。
ネットワーク１０２に接続される全ての計算機１０３は、依頼元計算機１０４であっても他計算機１０５であっても、そのハードウェア構成とソフトウェアの機能は殆ど変わらない。したがって、どの計算機１０３同士も絶対的な上下関係は存在しない。高負荷状態になった場合、その計算機１０３は依頼元計算機１０４になり、それ以外の計算機１０３は他計算機１０５となり、その中で依頼元計算機１０４から選ばれた一台の計算機１０３が依頼先計算機１０６になる。
【００２３】
［メッセージ、ルール、テーブルの構成］
図４は、各種データの構成と内容の一例を示す図である。
要求メッセージ４０１は、要求種別フィールドと、要求サスペンドレベルフィールドよりなる。
要求種別フィールドには、依頼元計算機１０４が他計算機１０５に対し、何を伝えたいのかを示す種別情報が格納される。この種別情報は、「負荷問い合わせ」と「プログラム実行依頼」の二種類である。
要求サスペンドレベルフィールドには、依頼元計算機１０４が他計算機１０５に対して、種別情報に伴うサスペンドレベルを示す情報が格納される。サスペンドレベルについては後述する計算機負荷判断ルールにて詳述する。
図４では、「負荷問い合わせ」と「プログラム実行依頼」を列挙して表示しているが、実際に送信されるメッセージはこれら二種類のメッセージのうちのいずれか片方である。
【００２４】
負荷応答メッセージ４０２は、計算機ＩＰアドレスフィールドと、計算機負荷値フィールドよりなる。
計算機ＩＰアドレスフィールドは、依頼元計算機１０４のＩＰアドレスが格納される。
計算機負荷値フィールドは、依頼元計算機１０４に返答する、現在のＣＰＵの負荷状態を示す値が格納される。
この負荷応答メッセージ４０２は、依頼元計算機１０４から受信した要求メッセージ４０１が「負荷問い合わせ」であった場合に、当該計算機１０３から依頼元計算機１０４へ返送されるメッセージである。
【００２５】
計算機負荷判断ルール４０３は、サスペンドレベルと、許容負荷閾値よりなる。図４中、計算機負荷判断ルール４０３はテーブルの形式にて示されているが、入出力制御部３０１を構成するプログラムに組み込まれていてもよい。
サスペンドレベルは、あるプログラムの優先順位或は重要度を示す。サスペンドレベルは「Ａ」が最も高く、「Ｂ」が「Ａ」の次に高く、「Ｃ」が最も低い。
許容負荷閾値は、あるサスペンドレベルに対応するプログラムを実行するに際し、許容されるＣＰＵの負荷状態の閾値である。
サスペンドレベル「Ａ」のプログラムの実行を許可できる場合は、ＣＰＵの許容負荷閾値は０％以上５％未満迄である。
サスペンドレベル「Ｂ」のプログラムの実行を許可できる場合は、ＣＰＵの許容負荷閾値は５％以上１０％未満迄である。
サスペンドレベル「Ｃ」のプログラムの実行を許可できる場合は、ＣＰＵの許容負荷閾値は１０％以上２０％未満迄である。
【００２６】
再び要求メッセージ４０１を説明する。
要求サスペンドレベルとは、サスペンド、すなわちプログラムの一時停止を要求する対象となるサスペンドレベルである。
本実施形態の計算機１０３は、実行を依頼するプログラムと同じサスペンドレベルのプログラムを一時停止の対象とする。
すなわち、依頼元計算機１０４が依頼先計算機１０６へサスペンドレベル「Ａ」のプログラムの実行を依頼する場合、依頼先計算機１０６は、実行中のプログラムのうち、サスペンドレベル「Ａ」のプログラムの実行を一時停止する。
同様に、依頼元計算機１０４が依頼先計算機１０６へサスペンドレベル「Ｂ」のプログラムの実行を依頼する場合、依頼先計算機１０６は、実行中のプログラムのうち、サスペンドレベル「Ｂ」のプログラムの実行を一時停止する。
同様に、依頼元計算機１０４が依頼先計算機１０６へサスペンドレベル「Ｃ」のプログラムの実行を依頼する場合、依頼先計算機１０６は、実行中のプログラムのうち、サスペンドレベル「Ｃ」のプログラムの実行を一時停止する。
なお、依頼元計算機１０４から送信される要求メッセージ４０１の要求サスペンドレベルが「ＮＵＬＬ」の場合、依頼先計算機１０６は実行中のプログラムに対して一時停止を行わない。
【００２７】
プログラム転送先計算機管理テーブル３０５は、計算機ＩＰアドレスフィールドと、計算機負荷値フィールドと、第一判定結果フィールドとを有する。更に、サスペンド時負荷値フィールドと、第二判定結果フィールドと、受信完了フラグフィールドと、計算機選択フラグフィールドよりなる。
計算機ＩＰアドレスフィールドには、計算機１０３のＩＰアドレスが格納される。なお、ＩＰアドレスは計算機１０３を一意に識別する情報であることを鑑みれば、本実施形態のネットワークシステム１０１がＴＣＰ／ＩＰネットワークでない場合であっても、計算機を一意に識別する情報がこのフィールドに格納される。そのような場合、このフィールドは「計算機アドレスフィールド」と呼ぶこともできる。
計算機負荷値フィールドには、計算機１０３の負荷値が格納される。
第一判定結果フィールドには、第一回目の判定結果が格納される。
サスペンド時負荷値フィールドには、仮に計算機１０３が依頼先計算機１０６となり、依頼元計算機１０４の要求メッセージ４０１を受けて、所定のサスペンドレベルに該当するプログラムの実行を一時停止した場合における、計算機１０３の負荷値が格納される。
第二判定結果フィールドには、第二回目の判定結果が格納される。
受信完了フラグフィールドには、他計算機１０５の負荷値を受信して、その負荷値に基いて第一判定結果フィールド又は第二判定結果フィールドに判定結果を格納したか否かを示すフラグが格納される。
計算機選択フラグフィールドには、プログラムの実行を依頼する対象となった計算機１０３を示すフラグが格納される。
【００２８】
実行中プログラム管理テーブル３０６は、プログラム名フィールドと、動作状態フィールドと、サスペンドレベルフィールドと、ＣＰＵ占有率フィールドよりなる。
プログラム名フィールドには、実行中又はサスペンド中のプログラムの名称が格納される。
動作状態フィールドには、プログラムの動作状態、すなわち当該プログラムが実行中であるのか、又はサスペンド中であるのかを示すフラグが格納される。
サスペンドレベルフィールドには、プログラムのサスペンドレベルが格納される。
ＣＰＵ占有率フィールドには、プログラムがＣＰＵの演算能力を占有している割合が格納される。
【００２９】
実行中依頼プログラム情報３０７は、プログラム名フィールドと、依頼元ＩＰアドレスフィールドよりなる。
プログラム名フィールドには、依頼元計算機１０４から依頼されて現在実行中であるプログラムの名称が格納される。
依頼元ＩＰアドレスフィールドには、依頼元計算機１０４のＩＰアドレスが格納される。
計算機１０３が依頼先計算機１０６として動作していない状態では、図４の矢印に示すように実行中依頼プログラム情報３０７は何れのフィールドも空（ＮＵＬＬ）になる。
【００３０】
プログラム管理テーブル３０８は、プログラム名フィールドと、サスペンドレベルフィールドよりなる。
プログラム名フィールドには、プログラムの名称が格納される。
サスペンドレベルフィールドには、プログラムのサスペンドレベルが格納される。
【００３１】
［依頼元計算機１０４と依頼先計算機１０６の動作の流れ］
図５は、依頼元計算機１０４が依頼先計算機１０６にサスペンドを伴わないプログラムの実行を依頼するタイムチャートである。
先ず、依頼元計算機１０４は他計算機１０５に要求メッセージ４０１を送信して、計算機１０３の負荷値を問い合わせる（Ｓ５０１）。この時、要求メッセージ４０１の要求種別は「負荷問い合わせ」であり、要求サスペンドレベルは無指定を意味する「ＮＵＬＬ」である。
すると、要求メッセージ４０１を受信した他計算機１０５は、システムモニタ３０４を通じて現在の自身の負荷状態、即ち計算機負荷値を取得して、依頼元計算機１０４へ負荷応答メッセージ４０２を返信する（Ｓ５０２）。
【００３２】
依頼元計算機１０４は、他計算機１０５から負荷応答メッセージ４０２を受信すると、負荷応答メッセージ４０２に含まれる計算機負荷値を見て、当該他計算機１０５がプログラムの実行を依頼できるものと判断する（Ｓ５０３のＹＥＳ）。そこで、依頼元計算機１０４は当該他計算機１０５を依頼先計算機１０６と認定し、依頼先計算機１０６に要求メッセージ４０１を送信して、プログラムの送信を要求する（Ｓ５０４）。この時、要求メッセージ４０１の要求種別は「プログラム実行依頼」であり、要求サスペンドレベルは無指定を意味する「ＮＵＬＬ」である。
すると、要求メッセージ４０１を受信した依頼先計算機１０６は、即座に依頼元計算機１０４へ準備が完了した旨を示す準備完了メッセージを返信する（Ｓ５０５）。
【００３３】
依頼元計算機１０４は、依頼先計算機１０６から準備完了メッセージを受信すると、実行を依頼するプログラムを依頼先計算機１０６へ送信する（Ｓ５０６）。
すると、プログラムを受信した依頼先計算機１０６は、当該プログラムを一旦プログラム記憶領域３０３に記憶した後、プログラムを実行する。そして、プログラムの実行が終了したら、その実行結果を依頼元計算機１０４へ返信する（Ｓ５０７）。
依頼元計算機１０４は、依頼先計算機１０６から実行結果を受信して、一連の処理を終了する（Ｓ５０８）。
【００３４】
図６は、依頼元計算機１０４が依頼先計算機１０６にサスペンドを伴うプログラムの実行を依頼するタイムチャートである。図６のタイムチャートは、図５のタイムチャートにおいて、ステップＳ５０３の判定結果がＮＯである場合の流れである。
先ず、依頼元計算機１０４は他計算機１０５に要求メッセージ４０１を送信して、計算機１０３の負荷値を問い合わせる（Ｓ６０１＝Ｓ５０１）。この時、要求メッセージ４０１の要求種別は「負荷問い合わせ」であり、要求サスペンドレベルは無指定を意味する「ＮＵＬＬ」である。
すると、要求メッセージ４０１を受信した他計算機１０５は、システムモニタ３０４を通じて現在の自身の負荷状態、即ち計算機負荷値を取得して、依頼元計算機１０４へ負荷応答メッセージ４０２を返信する（Ｓ６０２＝Ｓ５０２）。
【００３５】
依頼元計算機１０４は、他計算機１０５から負荷応答メッセージ４０２を受信すると、負荷応答メッセージ４０２に含まれる計算機負荷値を見て、当該他計算機１０５がプログラムの実行を依頼できないものと判断する（Ｓ６０３＝Ｓ５０３のＮＯ）。そこで、依頼元計算機１０４は他計算機１０５に再度要求メッセージ４０１を送信して、計算機１０３の負荷値を問い合わせる（Ｓ６０４）。この時、要求メッセージ４０１の要求種別は「負荷問い合わせ」であり、要求サスペンドレベルは実行を依頼したいプログラムのサスペンドレベルである。ここでは一例として「Ｂ」であるものとする。
すると、要求メッセージ４０１を受信した他計算機１０５は、要求サスペンドレベルが同じプログラムを一時停止させた状態における、自身の負荷状態、即ち「サスペンドを伴う計算機負荷値」を算出する。そして、依頼元計算機１０４へ負荷応答メッセージ４０２を返信する（Ｓ６０５）。
【００３６】
依頼元計算機１０４は、他計算機１０５から負荷応答メッセージ４０２を受信すると、負荷応答メッセージ４０２に含まれる「サスペンドを伴う計算機負荷値」を見て、当該他計算機１０５がプログラムの実行を依頼できるものと判断する（Ｓ６０６のＹＥＳ）。そこで、依頼元計算機１０４は当該他計算機１０５を依頼先計算機１０６と認定し、依頼先計算機１０６に要求メッセージ４０１を送信して、プログラムの送信を要求する（Ｓ６０７）。この時、要求メッセージ４０１の要求種別は「プログラム実行依頼」であり、要求サスペンドレベルは実行を依頼したいプログラムのサスペンドレベルである。ここでは前述の通り「Ｂ」である。
すると、要求メッセージ４０１を受信した依頼先計算機１０６は、要求サスペンドレベルが同じプログラムを全て一時停止させる（Ｓ６０８）。そして、依頼元計算機１０４へ準備が完了した旨を示す準備完了メッセージを返信する（Ｓ６０９）。
【００３７】
依頼元計算機１０４は、依頼先計算機１０６から準備完了メッセージを受信すると、実行を依頼するプログラムを依頼先計算機１０６へ送信する（Ｓ６１０）。
すると、プログラムを受信した依頼先計算機１０６は、当該プログラムを一旦プログラム記憶領域３０３に記憶した後、プログラムを実行する。そして、プログラムの実行が終了したら、その実行結果を依頼元計算機１０４へ返信する（Ｓ６１１）。更に、依頼先計算機１０６は依頼元計算機１０４に実行結果を送信したらサスペンドを解除し、一時停止していたプログラムを動作状態に復帰させる（Ｓ６１２）。
依頼元計算機１０４は、依頼先計算機１０６から実行結果を受信して（Ｓ６１３）、一連の処理を終了する。
【００３８】
図７は、依頼元計算機１０４が他計算機１０５にプログラムの実行を依頼できず、自己実行するタイムチャートである。図７のタイムチャートは、図６のタイムチャートにおいて、ステップＳ６０６の判定結果がＮＯである場合の流れである。
先ず、依頼元計算機１０４は他計算機１０５に要求メッセージ４０１を送信して、計算機１０３の負荷値を問い合わせる（Ｓ７０１＝Ｓ６０１）。この時、要求メッセージ４０１の要求種別は「負荷問い合わせ」であり、要求サスペンドレベルは無指定を意味する「ＮＵＬＬ」である。
すると、要求メッセージ４０１を受信した他計算機１０５は、システムモニタ３０４を通じて現在の自身の負荷状態、即ち計算機負荷値を取得して、依頼元計算機１０４へ負荷応答メッセージ４０２を返信する（Ｓ７０２＝Ｓ６０２）。
【００３９】
依頼元計算機１０４は、他計算機１０５から負荷応答メッセージ４０２を受信すると、負荷応答メッセージ４０２に含まれる計算機負荷値を見て、当該他計算機１０５がプログラムの実行を依頼できないものと判断する（Ｓ７０３＝Ｓ６０３のＮＯ）。そこで、依頼元計算機１０４は他計算機１０５に再度要求メッセージ４０１を送信して、計算機１０３の負荷値を問い合わせる（Ｓ７０４＝Ｓ６０４）。この時、要求メッセージ４０１の要求種別は「負荷問い合わせ」であり、要求サスペンドレベルは実行を依頼したいプログラムのサスペンドレベルである。ここでは一例として「Ｂ」であるものとする。
すると、要求メッセージ４０１を受信した他計算機１０５は、要求サスペンドレベルが同じプログラムを一時停止させた状態における、自身の負荷状態、即ち「サスペンドを伴う計算機負荷値」を算出して、依頼元計算機１０４へ負荷応答メッセージ４０２を返信する（Ｓ７０５＝Ｓ６０５）。
【００４０】
依頼元計算機１０４は、他計算機１０５から負荷応答メッセージ４０２を受信すると、負荷応答メッセージ４０２に含まれる計算機負荷値を見て、当該他計算機１０５がプログラムの実行を依頼できないものと判断する（Ｓ７０６＝Ｓ６０６のＮＯ）。そこで、依頼元計算機１０４は他計算機１０５にプログラムの実行依頼を諦め、自身で当該プログラムを実行して（Ｓ７０７）、一連の処理を終了する。
【００４１】
従来技術では、負荷問い合わせを一度きり行っていた。
本実施形態では、負荷問い合わせを二回行う。更に、二回目の負荷問い合わせは、実行中のプログラムを一時停止させた状態における計算機負荷値を問い合わせている。これにより、依頼元計算機１０４は他計算機１０５にプログラムの実行を依頼できる可能性が高まる。
【００４２】
［依頼元計算機１０４の動作の流れ］
図８は、依頼元計算機１０４における動作の流れを示すフローチャートである。
依頼元計算機１０４が処理を開始すると（Ｓ８０１）、依頼元計算機１０４の入出力制御部３０１はプログラム転送先計算機管理テーブル３０５に登録されている他計算機１０５に対し、負荷問い合わせ処理を行う（Ｓ８０２）。その結果、他計算機１０５の中にプログラムの実行を依頼できる計算機１０３が存在するなら（Ｓ８０３のＹＥＳ）、入出力制御部３０１は当該計算機１０３を依頼先計算機１０６と認定する。そして、依頼先計算機１０６に対してプログラムの送信を要求するメッセージ、すなわち要求種別フィールドが「プログラム実行依頼」である要求メッセージ４０１を送信する（Ｓ８０４）。その後、入出力制御部３０１は処理を依頼するプログラムを依頼先計算機１０６へ送信し、実行結果を受信して（Ｓ８０５）、一連の処理を終了する（Ｓ８０６）。
【００４３】
なお、ステップＳ８０５において、依頼先計算機１０６から実行結果を受信したら、入出力制御部３０１はプログラム転送先計算機管理テーブル３０５を初期化する。プログラム転送先計算機管理テーブル３０５は、全レコードの第一判定結果フィールド、第二判定結果フィールド、受信完了フラグフィールド及び計算機選択フラグフィールドが「偽」に書き換えられる。そして、計算値負荷値フィールド及びサスペンド時負荷値フィールドが「ＮＵＬＬ」に書き換えられる。
【００４４】
ステップＳ８０３にて、他計算機１０５の中にプログラムの実行を依頼できる計算機１０３が存在しないなら（Ｓ８０３のＮＯ）、次に入出力制御部３０１は先に送信した要求メッセージ４０１は要求サスペンドレベルを設定していたか否かを確認する（Ｓ８０７）。要求サスペンドレベルを設定していなかったならば（Ｓ８０７のＮＯ）、要求サスペンドレベルを設定して（Ｓ８０８）、再び要求サスペンドレベルを伴う負荷問い合わせを実行する（Ｓ８０２）。
【００４５】
ステップＳ８０７にて、要求サスペンドレベルを設定していたならば（Ｓ８０７のＹＥＳ）、もはや他計算機１０５の中にプログラムの実行を依頼できる計算機１０３は存在しない。そこで、依頼元計算機１０４は自身で当該プログラムを実行して（Ｓ８０９）、一連の処理を終了する（Ｓ８０６）。
【００４６】
図９は、依頼元計算機１０４における負荷問い合わせ処理の流れを示すフローチャートである。図８のステップＳ８０２に該当する。
なお、これ以降に説明するフローチャートにおいて、動作の判断に使用するカウンタ変数ｉが表記されるが、このカウンタ変数ｉは局所変数である。すなわち、他のフローチャートに用いられるカウンタ変数ｉとは独立しており、相互に影響しない。
依頼元計算機１０４が処理を開始すると（Ｓ９０１）、最初に依頼元計算機１０４の入出力制御部３０１はカウンタ変数ｉの値を「１」に初期化する。そしてこれと共に、入出力制御部３０１はプログラム転送先計算機管理テーブル３０５の全てのレコードの第一判定結果フィールド、第二判定結果フィールド及び受信完了フラグフィールドの値を「偽」に初期化する（Ｓ９０２）。
【００４７】
次に、入出力制御部３０１はプログラム転送先計算機管理テーブル３０５のｉ番目のレコードが存在するか否か、確認する（Ｓ９０３）。レコードが存在するなら（Ｓ９０３のＹＥＳ）、入出力制御部３０１はｉ番目のレコードの計算機ＩＰアドレスフィールドに記載されている他計算機１０５に対し、「負荷問い合わせ」の要求メッセージ４０１を送信する（Ｓ９０４）。そして、カウンタ変数ｉを１インクリメントする（Ｓ９０５）。なお、図９中「＋＋」はインクリメントの意味である。後述する図１１、図１４、図１５も同様である。その後、入出力制御部３０１は再びステップＳ９０３に戻って、処理を繰り返す。
【００４８】
ステップＳ９０３にて、プログラム転送先計算機管理テーブル３０５のｉ番目のレコードが存在しないなら（Ｓ９０３のＮＯ）、入出力制御部３０１はステップＳ９０６に推移する。すなわち、入出力制御部３０１はプログラム転送先計算機管理テーブル３０５の全てのレコードの受信完了フラグフィールドの値が「真」に変化するまで待つ（Ｓ９０６のＮＯ）。全てのレコードの受信完了フラグフィールドの値が「真」に変化したならば（Ｓ９０６のＹＥＳ）、入出力制御部３０１は計算機選択処理を実行して（Ｓ９０７）、一連の処理を終了する（Ｓ９０８）。
【００４９】
図１０は、依頼元計算機１０４における問い合わせ応答受信処理の流れを示すフローチャートである。図１０のフローチャートに示す処理は、他計算機１０５から負荷応答メッセージ４０２を受信した際に実行される処理である。すなわち、図９のステップＳ９０４において、依頼元計算機１０４がプログラム転送先計算機管理テーブル３０５に登録されている全ての他計算機１０５に対し、「負荷問い合わせ」の要求メッセージ４０１を送信した後に実行される。
依頼元計算機１０４が処理を開始すると（Ｓ１００１）、依頼元計算機１０４の入出力制御部３０１は他計算機１０５から受信した負荷応答メッセージ４０２に含まれている計算機ＩＰアドレスを用いて、プログラム転送先計算機管理テーブル３０５のレコードを特定する（Ｓ１００２）。そして、入出力制御部３０１は他計算機１０５から受信した計算機１０３の負荷値を計算機負荷値フィールド又はサスペンド時負荷値フィールドへ、また負荷値に基づく判定結果を第一判定結果フィールド又は第二判定結果フィールドへ書き込む。更に、入出力制御部３０１は当該レコードの受信完了フラグフィールドの値を「真」に設定して（Ｓ１００３）、一連の処理を終了する（Ｓ１００４）。
図１０の問い合わせ応答受信処理は、図９の負荷問い合わせ処理と並行して、他計算機１０５から負荷応答メッセージ４０２を受信したことに呼応して起動され、マルチタスク或はマルチスレッドにて実行される。
【００５０】
図１１は、依頼元計算機１０４における計算機選択処理の流れを示すフローチャートである。図９のステップＳ９０７に該当する。
依頼元計算機１０４が処理を開始すると（Ｓ１１０１）、依頼元計算機１０４の入出力制御部３０１は最初にカウンタ変数ｉを「１」に初期化する（Ｓ１１０２）。
次に、入出力制御部３０１はプログラム転送先計算機管理テーブル３０５のｉ番目のレコードが存在するか否か、確認する（Ｓ１１０３）。レコードが存在するなら（Ｓ１１０３のＹＥＳ）、入出力制御部３０１はｉ番目のレコードの第一判定結果フィールド及び第二判定結果フィールドの何れかの値が「真」であるか否かを確認する（Ｓ１１０４）。何れの値も共に「偽」であるなら（Ｓ１１０４のＮＯ）、入出力制御部３０１はカウンタ変数ｉを１インクリメントして（Ｓ１１０５）、再びステップＳ１１０３から処理を繰り返す。
【００５１】
ステップＳ１１０４にて、ｉ番目のレコードの第一判定結果フィールド及び第二判定結果フィールドの何れかの値が「真」であるなら（Ｓ１１０４のＹＥＳ）、入出力制御部３０１はｉ番目のレコードの計算機選択フラグフィールドを「真」に書き換える（Ｓ１１０６）。そして、一連の処理を終了する（Ｓ１１０７）。
この時点で、プログラム転送先計算機管理テーブル３０５には、計算機選択フラグフィールドが「真」であるレコードが一つだけ存在する。
【００５２】
ステップＳ１１０３にて、ｉ番目のレコードが存在しないなら（Ｓ１１０３のＮＯ）、入出力制御部３０１は一連の処理を終了する（Ｓ１１０７）。
この時点で、プログラム転送先計算機管理テーブル３０５には、計算機選択フラグフィールドが「真」であるレコードが一つもない。
【００５３】
［他計算機１０５の動作の流れ］
図１２は、他計算機１０５における動作の流れを示すフローチャートである。
他計算機１０５が依頼元計算機１０４から要求メッセージ４０１を受信すると（Ｓ１２０１）、他計算機１０５の入出力制御部３０１は、受信した要求メッセージ４０１の要求種別が「負荷問い合わせ」なのか「プログラム実行依頼」なのかを確認する（Ｓ１２０２）。
【００５４】
受信した要求メッセージ４０１の要求種別が「負荷問い合わせ」であれば（Ｓ１２０２のＹＥＳ）、入出力制御部３０１は次に要求メッセージ４０１の要求サスペンドレベルが「Ａ」、「Ｂ」又は「Ｃ」の有効な値であるか否かを確認する（Ｓ１２０３）。
要求メッセージ４０１の要求サスペンドレベルが「Ａ」、「Ｂ」又は「Ｃ」の有効な値でない「ＮＵＬＬ」ならば（Ｓ１２０３のＮＯ）、入出力制御部３０１はシステムモニタ３０４から現在の計算機１０３自身の負荷状態、すなわち計算機負荷値を取得する（Ｓ１２０４）。そして、依頼元計算機１０４へ負荷応答メッセージ４０２を返信し（Ｓ１２０５）、一連の処理を終了する（Ｓ１２０６）。
ステップＳ１２０７において算出する計算機負荷値は、サスペンドを行った場合ならＣＰＵ占有率はどうなるのかを予測する演算処理によって得られる「予想負荷状態」である。  
【００５５】
ステップＳ１２０３において、要求メッセージ４０１の要求サスペンドレベルが「Ａ」、「Ｂ」又は「Ｃ」のうちのいずれか有効な値であるならば（Ｓ１２０３のＹＥＳ）、入出力制御部３０１は先ず、システムモニタ３０４から現在の計算機１０３自身の計算機負荷値を取得する。次に、実行中プログラム管理テーブル３０６に登録されているプログラムの、要求サスペンドレベルに合致するサスペンドレベルのプログラムのＣＰＵ占有率を計算機負荷値から減算する。こうして、入出力制御部３０１はサスペンドが有効に機能している場合における計算機負荷値を算出する（Ｓ１２０７）。そして、入出力制御部３０１は依頼元計算機１０４へ負荷応答メッセージ４０２を返信し（Ｓ１２０５）、一連の処理を終了する（Ｓ１２０６）。
【００５６】
ステップＳ１２０２において、受信した要求メッセージ４０１の要求種別が「プログラム実行依頼」であれば（Ｓ１２０２のＮＯ）、この時点で他計算機１０５は依頼先計算機１０６となる。先ず、入出力制御部３０１は次に要求メッセージ４０１の要求サスペンドレベルが「Ａ」、「Ｂ」又は「Ｃ」の有効な値であるか否か、すなわちサスペンドの要求があるか否かを確認する（Ｓ１２０８）。
要求メッセージ４０１の要求サスペンドレベルが「ＮＵＬＬ」ならば（Ｓ１２０８のＮＯ）、入出力制御部３０１は依頼元計算機１０４へ準備完了メッセージを返信し（Ｓ１２０９）、プログラム受信処理を実行する（Ｓ１２１０）。その後、一連の処理を終了する（Ｓ１２０６）。
【００５７】
ステップＳ１２０８において、要求メッセージ４０１の要求サスペンドレベルが「Ａ」、「Ｂ」又は「Ｃ」のうちのいずれか有効な値であるならば（Ｓ１２０８のＹＥＳ）、入出力制御部３０１はサスペンド処理を実行する（Ｓ１２１１）。サスペンド処理が完了したら、入出力制御部３０１は依頼元計算機１０４へ準備完了メッセージを返信し（Ｓ１２０９）、プログラム受信処理を実行する（Ｓ１２１０）。その後、一連の処理を終了する（Ｓ１２０６）。
【００５８】
図１３は、依頼先計算機１０６におけるプログラム受信処理の流れを示すフローチャートである。図１２のステップＳ１２１０に該当する。
依頼先計算機１０６が処理を開始すると（Ｓ１３０１）、依頼先計算機１０６の入出力制御部３０１は依頼元計算機１０４から実行の依頼対象となるプログラムを受信する（Ｓ１３０２）。そして、プログラムを実行して（Ｓ１３０３）、実行結果を依頼元計算機１０４に送信して（Ｓ１３０４）、サスペンド解除処理を行い（Ｓ１３０５）、一連の処理を終了する（Ｓ１３０６）。
【００５９】
図１４は、依頼先計算機１０６におけるサスペンド処理の流れを示すフローチャートである。図１２のステップＳ１２１１に該当する。
依頼先計算機１０６が処理を開始すると（Ｓ１４０１）、依頼先計算機１０６の入出力制御部３０１は最初にカウンタ変数ｉを「１」に初期化する（Ｓ１４０２）。
次に、入出力制御部３０１は実行中プログラム管理テーブル３０６のｉ番目のレコードが存在するか否か、確認する（Ｓ１４０３）。レコードが存在するなら（Ｓ１４０３のＹＥＳ）、入出力制御部３０１は次にｉ番目のレコードのサスペンドレベルフィールドを見て、ｉ番目のレコードのプログラムはサスペンドの対象であるか否かを確認する（Ｓ１４０４）。
【００６０】
ステップＳ１４０４にて、ｉ番目のレコードのプログラムがサスペンドの対象であるなら（Ｓ１４０４のＹＥＳ）、入出力制御部３０１は次の処理を行う。すなわち、プログラム実行処理部３０２を通じて、ｉ番目のレコードのプログラム名フィールドに記載されているプログラムをサスペンド（一時停止）させる（Ｓ１４０５）。そして、入出力制御部３０１はｉ番目のレコードの動作状態フィールドの値を「サスペンド」に変更する（Ｓ１４０６）。
その後、入出力制御部３０１はカウンタ変数ｉを１インクリメントして（Ｓ１４０７）、再びステップＳ１４０３から処理を繰り返す。
【００６１】
ステップＳ１４０４にて、ｉ番目のレコードのプログラムがサスペンドの対象でないなら（Ｓ１４０４のＮＯ）、入出力制御部３０１はカウンタ変数ｉを１インクリメントして（Ｓ１４０７）、再びステップＳ１４０３から処理を繰り返す。
ステップＳ１４０３にて、ｉ番目のレコードが存在しないなら（Ｓ１４０３のＮＯ）、入出力制御部３０１は一連の処理を終了する（Ｓ１４０８）。
【００６２】
図１５は、依頼先計算機１０６におけるサスペンド解除処理の流れを示すフローチャートである。図１３のステップＳ１３０５に該当する。
依頼先計算機１０６が処理を開始すると（Ｓ１５０１）、依頼先計算機１０６の入出力制御部３０１は最初にカウンタ変数ｉを「１」に初期化する（Ｓ１５０２）。
次に、入出力制御部３０１は実行中プログラム管理テーブル３０６のｉ番目のレコードが存在するか否か、確認する（Ｓ１５０３）。レコードが存在するなら（Ｓ１５０３のＹＥＳ）、入出力制御部３０１は次にｉ番目のレコードのサスペンドレベルフィールドを見て、ｉ番目のレコードのプログラムは現在サスペンド中であるか否かを確認する（Ｓ１５０４）。
【００６３】
ステップＳ１５０４にて、ｉ番目のレコードのプログラムがサスペンド中であるなら（Ｓ１５０４のＹＥＳ）、入出力制御部３０１は次の処理を行う。すなわち、プログラム実行処理部３０２を通じて、ｉ番目のレコードのプログラム名フィールドに記載されているプログラムについて、サスペンド状態を解除（動作再開）させる（Ｓ１５０５）。そして、入出力制御部３０１はｉ番目のレコードの動作状態フィールドの値を「動作中」に変更する（Ｓ１５０６）。
その後、入出力制御部３０１はカウンタ変数ｉを１インクリメントして（Ｓ１５０７）、再びステップＳ１５０３から処理を繰り返す。
【００６４】
ステップＳ１５０４にて、ｉ番目のレコードのプログラムがサスペンド中でないなら（Ｓ１５０４のＮＯ）、入出力制御部３０１はカウンタ変数ｉを１インクリメントして（Ｓ１５０７）、再びステップＳ１５０３から処理を繰り返す。
ステップＳ１５０３にて、ｉ番目のレコードが存在しないなら（Ｓ１５０３のＮＯ）、入出力制御部３０１は一連の処理を終了する（Ｓ１５０８）。
【００６５】
計算機１０３は、負荷が重くなり、他の計算機１０３へプログラムの実行を依頼する必要が生じた時、依頼元計算機１０４になる。そして、依頼元計算機１０４以外の計算機１０３は他計算機１０５となり、その中で依頼元計算機１０４がプログラムの実行を依頼することと決定した計算機１０３が、依頼先計算機１０６となる。言い換えれば、計算機１０３は依頼元計算機１０４になった時に「クライアント」となり、その他の他計算機１０５と依頼先計算機１０６は「サーバ」となる。
入出力制御部３０１は、図８、図９、図１０及び図１１に示したフローチャートに従い、依頼元計算機１０４、すなわちクライアントとして動作して、他の計算機１０３へ種々のメッセージを送信する。
クライアントから種々のメッセージを受信した入出力制御部３０１は、図１２、図１３、図１４及び図１５に示したフローチャートに従い、他計算機１０５又は依頼先計算機１０６、すなわちサーバとして動作して、種々のメッセージを返信する。
すなわち、入出力制御部３０１はクライアントとしてもサーバとしても動作する。
【００６６】
以上説明した実施形態には、以下に記す応用例が可能である。
（１）例えば、ＰＯＳＩＸ系ＯＳにおける「kill -STOP」コマンドを実行すると、ＣＰＵの負荷は低減するが、ＲＡＭ２０３は開放されない。そこで、プログラム実行処理部３０２が所定のプログラムを実行する際、プログラムが利用するＲＡＭ２０３のアドレスを管理する。そして、当該プログラムを一時停止する際、プログラムが専有していたＲＡＭ２０３の内容を不揮発性ストレージ２０４に書き出し、一時停止から復帰する際に不揮発性ストレージ２０４からＲＡＭ２０３の内容を読み戻せば、ＲＡＭ２０３も余裕ができる。
【００６７】
（２）上記の実施形態では、サスペンドの対象にするプログラムは、実行を依頼されたプログラムのサスペンドレベルと等しいサスペンドレベルのプログラムを対象としていた。この、サスペンドするプログラムを選ぶ基準を、「プログラムの実行優先度」という観点で考えれば、実行を依頼されるプログラムの実行優先度に比べて、より低い実行優先度のプログラムをサスペンドする、という方法もある。
例えば、実行を依頼されるプログラムのサスペンドレベルが「Ａ」なら、サスペンドレベル「Ｂ」と「Ｃ」のプログラムをサスペンドする。
同様に、実行を依頼されるプログラムのサスペンドレベルが「Ｂ」なら、サスペンドレベル「Ｃ」のプログラムをサスペンドする。
同様に、実行を依頼されるプログラムのサスペンドレベルが「Ｂ」なら、何れのプログラムもサスペンドしない。
【００６８】
（３）上記の実施形態では、実行中依頼プログラム情報３０７が１レコードのみ保持する場合について説明した。すなわち、ある計算機１０３が他の依頼元計算機１０４からプログラムの実行を依頼された後、他の依頼元計算機１０４からプログラムの実行を依頼されても、そのプログラムを実行できない。しかし、実行中依頼プログラム情報３０７が複数のレコードを有することを許し、実行中依頼プログラム情報３０７に登録されているプログラムはサスペンドの対象外とすることで、複数の依頼元計算機１０４からプログラムの実行を受け付けることが可能になる。
また逆に、ある計算機１０３において、他の依頼元計算機１０４から実行を依頼されるプログラムが同時に実行される数を、厳密に一つだけに限定することもできる。これを実現するには、既に依頼元計算機１０４からプログラムの実行を受け付けている場合には、負荷応答メッセージのホスト負荷値をプログラムの実行の受付が不可能な値に、例えば１００％として報告する。こうすることで、既にプログラムの実行を受け付けた後から来るプログラムの実行依頼を拒否することができる。
【００６９】
（４）実行中プログラム管理テーブル３０６及び実行中依頼プログラム情報３０７は、プログラム名の代わりにプロセス番号を用いることができる。
【００７０】
（５）本実施形態では、プログラムを一時停止させたが、プログラムの実行優先度を低くしてもよい。例えばＰＯＳＩＸ系ＯＳでは、実行中のプログラムの優先度を操作する「renice」コマンドがある。このように、プログラムの実行優先度を操作することも、プログラムの実行を一時停止させることも、ＣＰＵに対する負荷を低減させる点では共通する。
【００７１】
（６）本実施形態ではわかり易さのために、プログラム転送先計算機管理テーブル３０５には、計算機負荷値フィールド、第一判定結果フィールド、サスペンド時負荷値フィールド及び第二判定結果フィールドが設けられていた。しかし、計算機負荷値フィールドとサスペンド時負荷値フィールドは共用が可能である。同様に、第一判定結果フィールドと第二判定結果フィールドも共用が可能である。すなわち、第一回目の判定において第一判定結果フィールドの値が全て「偽」であった場合、第二回目は計算値負荷値フィールドにサスペンド時負荷値を上書きし、第二判定結果は第一判定結果フィールドに上書きする。
この場合、プログラム転送先計算機管理テーブル３０５は、次の二つのフィールドを有する。一つは、サスペンドを伴わない計算値負荷値又はサスペンドを伴うサスペンド時負荷値が格納される「計算機負荷値フィールド」である。もう一つは、サスペンドを伴わない場合の第一判定結果又はサスペンドを伴う場合の第二判定結果が格納される「判定結果フィールド」である。
【００７２】
（７）図１１の計算機選択処理では、プログラム転送先計算機管理テーブル３０５のレコードを１番目から順に検証して（Ｓ１１０３及びＳ１１０４）、ステップＳ１１０４の検証に合致した最初のレコードを選択した。この処理に換えて、全レコードを検証し、条件に当てはまったレコードを計算機負荷値フィールド又はサスペンド時負荷値フィールドでソートして、最も負荷値が低い計算機を採用してもよい。
【００７３】
本実施形態では、ネットワークシステム１０１と、これを構成する計算機１０３を開示した。
依頼元計算機１０４が他計算機１０５に対して負荷状態を問い合わせた際に、全ての計算機が高負荷状態である場合、問い合わせを行った依頼元計算機１０４はもう一度、他計算機１０５に対して負荷状態を問い合わせる。この時、問い合わせには「要求サスペンドレベル」を付加する。これに対し、問い合わせを受けた他計算機１０５は、実行中のプログラムのうち、要求サスペンドレベルに合致するプログラムをサスペンドする。そして、処理能力に余裕ができた計算機を依頼先計算機１０６と決定して、プログラムの実行を依頼する。
このように、処理の優先度が高いプログラムを優先的にネットワークシステム１０１全体の演算能力へ割り当てることで、ネットワークシステム１０１全体の可用性が向上する。計算機１０３がこのような機能を備えることで、緊急性の高いプログラムは優先的に実行される。したがって、制御対象の安全性も向上する。
【００７４】
以上、本発明の実施形態例について説明したが、本発明は上記実施形態例に限定されるものではなく、特許請求の範囲に記載した本発明の要旨を逸脱しない限りにおいて、他の変形例、応用例を含む。
例えば、上記した実施形態例は本発明をわかりやすく説明するために装置及びシステムの構成を詳細且つ具体的に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることは可能であり、更にはある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることも可能である。
また、上記の各構成、機能、処理部等は、それらの一部又は全部を、例えば集積回路で設計するなどによりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行するためのソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Solid State Drive）等の揮発性或は不揮発性のストレージ、または、ＩＣカード、光ディスク等の記録媒体に保持することができる。
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【００７５】
１０１…ネットワークシステム、１０２…ネットワーク、１０３…計算機、１０４…依頼元計算機、１０５…他計算機、１０６…依頼先計算機、２０１…ＣＰＵ、３０１…入出力制御部、３０２…プログラム実行処理部、３０４…システムモニタ、３０５…プログラム転送先計算機管理テーブル、３０６…実行中プログラム管理テーブル、３０７…実行中依頼プログラム情報、４０１…要求メッセージ、４０２…負荷応答メッセージ、４０３…計算機負荷判断ルール
【図１】
2014206879.tif 000003
【図２】
2014206879.tif 000004
【図３】
2014206879.tif 000005
【図４】
2014206879.tif 000006
【図５】
2014206879.tif 000007
【図６】
2014206879.tif 000008
【図７】
2014206879.tif 000009
【図８】
2014206879.tif 000010
【図９】
2014206879.tif 000011
【図１０】
2014206879.tif 000012
【図１１】
2014206879.tif 000013
【図１２】
2014206879.tif 000014
【図１３】
2014206879.tif 000015
【図１４】
2014206879.tif 000016
【図１５】
2014206879.tif 000017