(57)【要約】【課題】プロセッサからメモリにアクセスする性能に影響を与えることなく、メモリが消費する電力を大幅かつ確実に低減する計算機システムを提供する。【解決手段】制御用ノードと演算用ノードを備える計算機システムであって、制御用ノードは記憶装置に接続され、演算用ノードは、記憶装置に対する読み書きを制御用ノードに実行させるためにユーザ演算プログラムによって発行される処理要求を、制御用ノードに送信し、読み書き処理を完了したことを検出した場合、ユーザ演算プログラムの実行を再開する前に、ユーザ演算プログラムに割り当てられているメモリランクを活性状態にすることを特徴とする。【選択図】図２
2008165318.tif 000002
【特許請求の範囲】
【請求項１】
制御用ノードと演算用ノードとを備える計算機システムであって、
前記制御用ノードは、第一プロセッサと、前記第一プロセッサに接続され、ユーザ演算プログラムを記憶する記憶部と、他のノードに接続される第一インタフェースと、を備え、前記演算用ノードに実行させるユーザ演算プログラムを前記演算用ノードに送信し、
前記制御用ノードは、データを記憶する記憶装置に接続され、
前記演算用ノードは、前記制御用ノードによって送信されたユーザ演算プログラムを実行する第二プロセッサと、前記第二プロセッサに接続されるメモリと、前記第二プロセッサに接続され、前記制御用ノードに接続される第二インタフェースと、前記メモリに接続されるメモリコントローラと、を備え、
前記メモリの記憶領域は、前記メモリコントローラが独立に電力を制御可能な単位であるメモリランクに区分され、
前記メモリに供給される電力の状態は、前記メモリランク毎に、前記第二プロセッサから当該メモリランクに含まれる記憶領域にアクセスできる活性状態と、前記活性状態よりもアクセスに遅延が生じる不活性状態とのいずれかに制御され、
前記第二プロセッサは、
前記記憶装置に対する読み書きを前記第一プロセッサに実行させるために前記ユーザ演算プログラムによって発行される処理要求を、前記第二インタフェースを介して前記第一プロセッサに送信し、
前記処理要求の送信後に、前記ユーザ演算プログラムの実行を中断し、
前記第一プロセッサは、
前記処理要求を受信した場合、前記受信した処理要求に基づいて、前記記憶装置に対して読み書き処理を実行し、
前記第二プロセッサは、
前記第一プロセッサが読み書き処理を完了したことを検出した場合、前記ユーザ演算プログラムの実行を再開する前に、前記ユーザ演算プログラムに割り当てられているメモリランクを活性状態にすることを特徴とする計算機システム。
【請求項２】
前記制御用ノードと前記演算用ノードとは同一の筐体に収納され、
前記第一インタフェースと前記第二インタフェースとが接続されることによって、前記制御用ノードと前記演算用ノードとが接続されることを特徴とする請求項１に記載の計算機システム。
【請求項３】
前記制御用ノードと前記演算用ノードとは異なる筐体に収納され、
前記第一インタフェースと前記第二インタフェースとがネットワークを介して接続されることによって、前記制御用ノードと前記演算用ノードとが接続されることを特徴とする請求項１に記載の計算機システム。
【請求項４】
前記第一プロセッサは、データを前記記憶装置から読み出す要求が前記処理要求に含まれる場合、前記受信した処理要求に基づいて、前記記憶装置からデータを読み出し、
前記読み出されたデータを前記第一インタフェースを介して前記第二プロセッサに送信し、
前記第二プロセッサは、前記第一プロセッサが読み出し処理の完了を検出した場合、前記読み出されたデータの受信前に、前記読み出されたデータが一時的に記憶される受信バッファに割り当てられるメモリランクを活性状態にすることを特徴とする請求項１に記載の計算機システム。
【請求項５】
前記第二プロセッサは、データを前記記憶装置に書き込む要求を含む前記処理要求、及び前記処理要求に基づいて書き込まれるデータを前記第二インタフェースを介して前記第一プロセッサに送信し、
前記書き込まれるデータの送信後に、前記書き込まれるデータが一時的に記憶されていた送信バッファに割り当てられているメモリランクを不活性状態にすることを特徴とする請求項１に記載の計算機システム。
【請求項６】
前記第二プロセッサは、前記処理要求の送信後に、前記ユーザ演算プログラムに割り当てられているメモリランクを不活性状態にすることを特徴とする請求項１に記載の計算機システム。
【請求項７】
前記第二プロセッサは、前記第一プロセッサが読み書きするデータの容量と予め定められた閾値との比較結果に基づいて、前記読み書きされるデータの容量が大きいと判定された場合、前記ユーザ演算プログラムに割り当てられているメモリランクを不活性状態にすることを特徴とする請求項６に記載の計算機システム。
【請求項８】
前記第一プロセッサは、
前記読み書き処理が完了すると、処理完了情報を作成し、
前記作成された処理完了情報に、前記読み書き処理の実行結果を含め、前記作成された処理完了情報を前記第一インタフェースを介して前記第二プロセッサに送信し、
前記第二プロセッサは、
前記処理完了情報を受信することによって、前記第一プロセッサが前記読み書き処理を完了したことを検出し、
前記受信した処理完了情報に含まれる前記読み書き処理の実行結果に基づいて、前記閾値を変更することを特徴とする請求項７に記載の計算機システム。
【請求項９】
制御用ノードと演算用ノードとを備える計算機システムであって、
前記制御用ノードは、第一プロセッサと、前記第一プロセッサに接続され、ユーザ演算プログラムを記憶する記憶部と、他のノードに接続される第一インタフェースと、を備え、前記演算用ノードに実行させるユーザ演算プログラムを前記演算用ノードに送信し、
前記制御用ノードは、データを記憶する記憶装置に接続され、
前記演算用ノードは、前記制御用ノードによって送信されたユーザ演算プログラムを実行する第二プロセッサと、前記第二プロセッサに接続されるメモリと、前記第二プロセッサに接続され、前記制御用ノードに接続される第二インタフェースと、前記メモリに接続されるメモリコントローラと、を備え、
前記メモリの記憶領域は、前記メモリコントローラが独立に電力を制御可能な単位であるメモリランクに区分され、
前記メモリに供給される電力の状態は、前記メモリランク毎に、前記第二プロセッサから当該メモリランクに含まれる記憶領域にアクセスできる活性状態と、前記活性状態よりもアクセスに遅延が生じる不活性状態とのいずれかに制御され、
前記第二プロセッサは、前記記憶装置に対する読み書きを前記第一プロセッサに実行させるために前記ユーザ演算プログラムによって発行される処理要求を、前記第二インタフェースを介して第一プロセッサに送信し、
前記処理要求の送信後も、前記ユーザ演算プログラムの実行を続行し、
前記第一プロセッサは、
前記処理要求を受信し、データを前記記憶装置から読み出す要求が前記処理要求に含まれる場合、前記受信した処理要求に基づいて、前記記憶装置からデータを読み出し、
前記読み出されたデータを前記第一インタフェースを介して前記第二プロセッサに送信し、
前記第二プロセッサは、
前記第一プロセッサが読み出し処理の完了を検出した場合、前記読み出されたデータの受信前に、前記読み出されたデータが一時的に記憶される受信バッファに割り当てられるメモリランクを活性状態にすることを特徴とする計算機システム。
【請求項１０】
前記第二プロセッサは、データを前記記憶装置に書き込む要求を含む前記処理要求、及び前記処理要求に基づいて書き込まれるデータを前記第二インタフェースを介して前記第一プロセッサに送信し、
前記書き込まれるデータの送信後に、前記書き込まれるデータが一時的に記憶されていた送信バッファに割り当てられているメモリランクを不活性状態にすることを特徴とする請求項９に記載の計算機システム。
【請求項１１】
制御用ノードと演算用ノードとを備える計算機システムであって、
前記制御用ノードは、第一プロセッサと、前記第一プロセッサに接続され、ユーザ演算プログラムを記憶する記憶部と、他のノードに接続される第一インタフェースと、を備え前記演算用ノードに実行させるユーザ演算プログラムを前記演算用ノードに送信し、
前記制御用ノードは、データを記憶する記憶装置に接続され、
前記演算用ノードは、前記制御用ノードによって送信されたユーザ演算プログラムを実行する第二プロセッサと、前記第二プロセッサに接続されるメモリと、前記第二プロセッサに接続され、前記制御用ノードに接続される第二インタフェースと、前記メモリに接続されるメモリコントローラと、を備え、
前記メモリの記憶領域は、前記メモリコントローラが独立に電力を制御可能な単位であるメモリランクに区分され、
前記メモリに供給される電力の状態は、前記メモリランク毎に、前記第二プロセッサから当該メモリランクに含まれる記憶領域にアクセスできる活性状態と、前記活性状態よりもアクセスに遅延が生じる不活性状態とのいずれかに制御され、
前記第二プロセッサは、
前記記憶装置が読み書きの実行状態を前記第一プロセッサに監視させるための監視要求を、前記第二インタフェースを介して前記第一プロセッサに送信し、
前記監視要求の送信後に、前記ユーザ演算プログラムの実行を中断し、
前記第一プロセッサは、
前記監視要求を受信した場合、前記受信した処理要求に基づいて、前記監視処理を実行し、
前記第二プロセッサは、
前記記憶装置が読み書きの実行可能な状態であることを検出した場合、前記ユーザ演算プログラムの実行を再開する前に、前記ユーザ演算プログラムに割り当てられているメモリランクを活性状態にすることを特徴とする計算機システム。
【請求項１２】
前記第二プロセッサは、前記監視要求を送信後に、前記ユーザ演算プログラムに割り当てられているメモリランクを不活性状態にすることを特徴とする請求項１１に記載の計算機システム。
【請求項１３】
前記第二プロセッサは、前記ユーザ演算プログラムの実行再開後に、前記記憶装置に対する読み書きを前記第一プロセッサに実行させるための処理要求を、前記第二インタフェースを介して前記第一プロセッサに送信することを特徴とする請求項１１に記載の計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機システムのメモリ管理および入出力管理方法に関し、特に、プロセスの入出力処理を考慮しつつ主記憶装置の消費電力を低減する方法に関する。
【背景技術】
【０００２】
一般の計算機システムでは、計算機システムに備わるハードウェアが動作することによって、電力が消費される。ハードウェアは、例えば、処理装置（プロセッサ）、主記憶装置（メモリ）、二次記憶装置及び入出力装置等である。
【０００３】
計算機システムが大量に電力を消費する場合に、計算機システムには、同時に大量の熱が発生する。このため、計算機システムで発生した熱を除去するための冷却設備が設置されていなくてはならない。
【０００４】
計算機システムが消費する電力のコストの他に、冷却設備に関するコストもかかる。このため、計算機システムが消費する電力と計算機システムの性能と考慮した計算機システムの設計が求められている。なお、ハードウェアが動作することによって消費される電力を低減させることは、バッテリの容量を節約する観点からも、組み込み機器等においても重要である。
【０００５】
計算機システムに備わる主記憶装置は、一般に電力を大量に消費するハードウェアのひとつである。例えば、大規模計算機システム及び超並列計算機システム等の計算機システムは、膨大な容量の主記憶装置を備える。よって、計算機システムに備わる全ハードウェアが消費する電力のうち主記憶装置が消費する電力の割合が大きくなる。
また、今日では、計算機サーバ、パーソナルコンピュータ及び組み込み機器に備わる主記憶装置の容量も増加しつつある。
今日、プロセッサ及び周辺機器が消費する電力を低減させる制御は盛んである。しかし、主記憶装置が消費する電力を低減させる制御は、盛んではない。今後、主記憶装置が消費する電力も低減させなくてはならない。
【０００６】
一般に、主記憶装置は、プロセッサが処理を実行するための命令及びデータ等を記憶する。具体的には、プロセッサは、二次記憶装置に記憶されるオペレーティングシステム（以下、ＯＳという）及びアプリケーションソフトウェア等を主記憶装置にロードする。
そして、プロセッサは、主記憶装置にロードされたＯＳ及びアプリケーションソフトウェア等に含まれる命令を取り出し、処理を実行する。このとき、プロセッサが計算処理を実行する際に必要なデータ、計算処理によるデータ、計算処理の実行結果を記憶する手段としても主記憶装置は利用される。
プロセッサによって処理が実行されるために必要な命令及びデータ等は、二次記憶装置から主記憶装置に必ずしもロードされなくともよい。例えば、計算機システムに備わる複数の計算機がネットワークによって、相互に接続されている場合、プロセッサによって処理が実行されるために必要な命令及びデータ等は、ネットワークを介して、主記憶装置に記憶される。また、計算機システムに備わる計算機が高速入出力装置によって相互に接続される場合、プロセッサによって処理が実行されるために必要な命令及びデータ等は、高速入出力装置を介して、主記憶装置に記憶される。
【０００７】
計算機システムにおける主記憶装置は、キャパシタに電荷を蓄えるか否かによってデータを記録する方式が多く利用される。具体的には、キャパシタが電荷を蓄えている場合には、“１”を記憶し、キャパシタが電荷を蓄えていない場合には、“０”を記憶する。そして、主記憶装置に記憶されたデータを維持するための操作（リフレッシュ）がされなければならない。
【０００８】
また、主記憶装置は、通常、複数の電力制御モードを備え、メモリコントローラ等を介して別モードに遷移することができる。例えば、通常モードから低電力モードに遷移することができる。低電力モードでは、通常モード時と比べて、消費電力が低くなるが、プロセッサからメモリのアクセス速度性能が低下する。
計算機システムが消費する電力を低減させる技術としては、メモリコントローラが論理／物理アドレス変換テーブルを含み、メモリコントローラは、使用されているメモリの領域を任意メモリデバイスに集約するように変換テーブルを操作する。又は、オペレーティングシステムは、未使用メモリリストをメモリデバイスごとに管理し、未使用のメモリが少ない（メモリの使用度が高い）メモリデバイスからメモリを割り当てる。これによって、メモリコントローラは、未使用のメモリデバイスの電力モードを低電力モードに切り替える（例えば、特許文献１参照）。
【０００９】
また、データが記憶されたメモリデバイスのみが周期的にリフレッシュされ、メモリデバイスが消費する電力を低減させる技術が知られている（例えば、特許文献２参照）。
また、並列計算機システムにおいて、当該計算機システムに発生する熱に関する問題を解消する観点及び省エネルギ化の観点から、温度センサによって検出された温度情報に基づいて、温度分布情報が作成される。そして、作成された温度分布情報に基づいて並列計算機システムに備わる各計算機へのジョブスケジューリングを実施する方法が知られている（例えば、特許文献３参照）。
【００１０】
一方、プロセッサが消費する電力を低減させる技術において、演算回路を操作する命令が先行して検出され、その操作対象となる演算回路が先行して活性化される。そして、演算回路によって演算が終了した後、活性化された演算回路が不活性化される技術が知られている（例えば、特許文献４参照）。
【特許文献１】米国特許６９５４８３７号明細書
【特許文献２】米国特許６２１５７１４号明細書
【特許文献３】特開２００４−１２６９６８号公報
【特許文献４】特開２００５−２３５２０４号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
従来技術は、計算機に備わるプロセッサが消費する電力を低減させる技術がほとんどである。一方、計算機に備わる主記憶装置が消費する電力に関して、今日までほとんど制御されていなかった。
【００１２】
例えば、特許文献４に記載された技術は、プロセッサに備わる演算回路が消費する電力を低減させる技術である。
特許文献１及び特許文献２に記載された技術は、主記憶装置が消費する電力を低減化する制御をハードウェアレベルで実行する技術である。一般に、物理メモリ資源は、基本システムソフトウェア（オペレーティングシステム等）によって、直接管理される。さらに、基本システムソフトウェアは、物理メモリ資源を利用するプロセスおよび入出力処理を制御及び管理する。
【００１３】
よって、実用上、基本システムソフトウェアと連携なしに、ハードウェアレベルのみで、メモリが消費する電力を有効かつ効率的に低減させることは困難である。
【００１４】
複数の計算機が相互にネットワーク又は高速入出力装置によって接続され、複数の計算機が並列に処理を実行する並列計算機システムがある。この並列計算機システムでは、基本システムソフトウェアは、プログラム、計算ジョブ若しくはプロセスを実行させたい計算機に割り当てる。さらに、基本システムソフトウェアは、入出力処理についても同様に実行させたい計算機に割り当てる。よって、並列計算機システムの場合では、主記憶装置が消費する電力を低減させるために、基本システムソフトウェアとの連携が不可欠となる。
【００１５】
また、メモリによって消費される電力が低い電力モードから、メモリに書き込み／読み込み可能な通常の電力モード状態へ切り替える場合に、プロセッサからメモリへのアクセスに遅延（レイテンシ）が発生する。このため、プロセッサからメモリへのアクセス性能が低下してしまう課題がある。
【００１６】
特許文献１に記載された技術では、使用される頻度の高いメモリデバイスから実行されるプログラムに割り当てられ、未使用のメモリデバイスが消費する電力は低減できる。
【００１７】
また、特許文献１に記載された技術は、単一の計算機ノードから構成される計算機システムを対象とする技術である。よって、特許文献１に記載された技術は、ネットワーク接続又は高速入出力装置で相互接続された複数の計算機ノードを備える並列計算機システムに対応できない。
【００１８】
特に、特許文献１に記載された技術では、複数の計算機ノード間で、プログラム、計算ジョブ又はプロセス等の実行及び入出力処理等を考慮した主記憶装置の低電力制御方式ではない。また、特許文献１に記載された技術では、メモリの電力モードが切り替えられることによって生じるレイテンシが隠蔽できない。
【００１９】
一方、特許文献２に記載された技術では、使用されているメモリデバイスに記憶されたデータを維持するために、そのメモリデバイスの電力モードを消費される電量が少ないリフレッシュモードに切り替える。これによって、メモリデバイスが消費する電力が低減できる。
【００２０】
なお、プログラム、計算ジョブ又はプロセス等の実行及び入出力処理等を考慮した主記憶装置の低電力制御方式ではなく、メモリデバイスの電力モードを低電力モードに切り替えることができない場合が多い。よって、主記憶装置が消費する電力を低減させる確実性が低い。
【００２１】
また、特許文献２に記載された技術では、複数の計算機ノード間で、プログラム、計算ジョブ又はプロセス等の実行及び入出力処理等を考慮した主記憶装置の低電力制御方式ではない。また、特許文献２に記載された技術では、メモリの電力モードが切り替えられることによって生じるレイテンシが隠蔽できない。
【００２２】
特許文献３に記載されている技術では、並列計算機システムの温度の分布が均一になるように、計算ジョブをスケジューリングする。これによって、熱密度が増大することによって発生するシステム障害が回避できる。しかし、並列計算機システムに備わるハードウェア全体（主記憶装置を含む）が消費する電力を低減する技術ではない。
【課題を解決するための手段】
【００２３】
本発明の代表的な一形態によると、  制御用ノードと演算用ノードとを備える計算機システムであって、
前記制御用ノードは、第一プロセッサと、前記第一プロセッサに接続され、ユーザ演算プログラムを記憶する記憶部と、他のノードに接続される第一インタフェースと、を備え、前記演算用ノードに実行させるユーザ演算プログラムを前記演算用ノードに送信し、
前記制御用ノードは、データを記憶する記憶装置に接続され、
前記演算用ノードは、前記制御用ノードによって送信されたユーザ演算プログラムを実行する第二プロセッサと、前記第二プロセッサに接続されるメモリと、前記第二プロセッサに接続され、前記制御用ノードに接続される第二インタフェースと、前記メモリに接続されるメモリコントローラと、を備え、
前記メモリの記憶領域は、前記メモリコントローラが独立に電力を制御可能な単位であるメモリランクに区分され、
前記メモリに供給される電力の状態は、前記メモリランク毎に、前記第二プロセッサから当該メモリランクに含まれる記憶領域にアクセスできる活性状態と、前記活性状態よりもアクセスに遅延が生じる不活性状態とのいずれかに制御され、
前記第二プロセッサは、
前記記憶装置に対する読み書きを前記第一プロセッサに実行させるために前記ユーザ演算プログラムによって発行される処理要求を、前記第二インタフェースを介して前記第一プロセッサに送信し、
前記処理要求の送信後に、前記ユーザ演算プログラムの実行を中断し、
前記第一プロセッサは、
前記処理要求を受信した場合、前記受信した処理要求に基づいて、前記記憶装置に対して読み書き処理を実行し、
前記第二プロセッサは、
前記第一プロセッサが読み書き処理を完了したことを検出した場合、前記ユーザ演算プログラムの実行を再開する前に、前記ユーザ演算プログラムに割り当てられているメモリランクを活性状態にすることを特徴とする。
【発明の効果】
【００２４】
本発明の一形態によると、プロセッサからメモリにアクセスする性能に影響を与えることなく、メモリが消費する電力を大幅かつ確実に低減できる。
【発明を実施するための最良の形態】
【００２５】
（第一の実施形態）
本発明の第１の実施の形態を図１〜図１２を用いて説明する。
【００２６】
図１は、本発明の第１実施形態における計算機システムの構成を示す図である。
【００２７】
第１実施形態の計算機システムは、制御用計算機１０００及び演算用計算機１００１を備える。制御用計算機１０００及び演算用計算機１００１のハードウェア構成は、同じであるので、制御用計算機１０００のハードウェア構成を例に説明する。
【００２８】
制御用計算機１０００は、プロセッサ（以下、ＣＰＵという）１０１０ａ〜１０１０ｎ（以下、ＣＰＵ１０１０ａ〜１０１０ｎを総称して、ＣＰＵ１０１０という）、メモリコントローラ１０２０ａ〜１０２０ｎ（以下、メモリコントローラ１０２０ａ〜１０２０ｎを総称して、メモリコントローラ１０２０という）、メモリ１０３０ａ〜１０３０ｎ（以下、メモリ１０３０ａ〜１０３０ｎを総称してメモリ１０３０という）、システムＲＯＭ１０９０、ビデオアダプタ１１００、ネットワークインタフェース１１１０ａ〜１１１０ｎ（以下、ネットワークインタフェース１１１０ａ〜１１１０ｎを総称して、ネットワークインタフェース１１１０という）、二次記憶装置インタフェース１１２０ａ〜１１２０ｎ（以下、二次記憶装置インタフェース１１２０ａ〜１１２０ｎを総称して、二次記憶装置インタフェース１１２０という）、入力装置インタフェース１１３０及び高速入出力装置１１４０を備える。これらは、システムバス１１５０によって、各々接続される。
【００２９】
なお、メモリ１０３０ａ〜メモリ１０３０ｉは、チャネル１０７０ａを介して、メモリコントローラ１０２０ａに接続される。メモリ１０３０ｍ〜メモリ１０３０ｎは、チャネル１０３０ｎを介して、メモリコントローラ１０２０ｎに接続される。
【００３０】
ＣＰＵ１０１０は、メモリ１０３０に各種プログラムをロードし、各種プログラムを実行する。メモリコントローラ１０２０は、メモリ１０３０を制御する。システムＲＯＭ１０９０には、ファームウェアが格納される。なお、ファームウェアは、制御用計算機１０００に備わるハードウェアの基本的なデータを含む。また、ファームウェアは、制御用計算機１０００に備わるハードウェアの基本的な制御を実行する。
【００３１】
メモリ１０３０には、ＣＰＵ１０１０が各種プログラムを実行するために必要なデータが一時的に格納される。また、メモリ１０３０には、各種プログラムが実行された後のデータ及び各種プログラムの実行結果のデータが一時的に格納される。
【００３２】
メモリ１０３０は、メモリランク１０３１に区分される。メモリランク１０３１は、メモリコントローラ１０２０が独立に電力を制御できる最小の単位である。例えば、メモリ１０３０ａは、メモリランク１０３１ａ〜メモリランク１０３１ｉに区分される。
【００３３】
メモリコントローラ１０２０は、メモリ１０３０にメモリアドレスを定義するアドレッシング機能、及びＣＰＵ１０１０によってアクセスされるメモリアクセス機能を、少なくとも備える。また、メモリコントローラ１０２０は、メモリ１０３０の電力を制御するために用いるインタフェースを備える。
【００３４】
制御用計算機１０００は、入力装置インタフェース１１３０を介して、キーボード１１７０及びマウス１１８０に接続される。制御用計算機１０００は、ビデオアダプタ１１００を介して、ディスプレイ１２００に接続される。制御用計算機１０００は、二次記憶装置インタフェース１１２０を介して、二次記憶装置１１６０ａ〜１１６０ｎ（以下、二次記憶装置１１６０ａ〜１１６０ｎを総称して、二次記憶装置１１６０という）に接続される。
【００３５】
制御用計算機１０００は、ネットワークインタフェース１１１０を介して、ネットワーク１１９０に接続される。そして、制御用計算機１０００は、ネットワーク１１９０を介して演算用計算機１００１に接続される。これによって、複数の計算機で演算を並列的に実行する並列計算機システムが構成される。
【００３６】
また、制御用計算機１０００は、高速入出力装置１１４０を介して演算用計算機１００１に接続されてもよい。
【００３７】
なお、演算用計算機１００１は、ボード形状であってもよい。なお、演算用計算機１００１がボード形状である場合、演算用計算機１００１は、ＣＰＵ１０１０、メモリコントローラ１０２０、メモリ１０３０、システムＲＯＭ１０９０及び高速入出力装置１１４０を備える。この場合、演算用計算機１００１に備わる高速入出力装置１１４０が制御用計算機１０００に備わる高速入出力装置１１４０に差し込まれることによって、演算用計算機１００１が制御用計算機１０００に接続される。なお、演算用計算機１００１がボード形状である場合の例としては、アクセラレータボードがある。
【００３８】
また、制御用計算機１０００が、ネットワーク１１９０を介して演算用計算機１００１と接続されること、及び高速入出力装置１１４０を介して演算用計算機１００１と接続されることによって、並列計算機システムが構成されてもよい。
【００３９】
また、制御用計算機１０００は、ネットワークインタフェース１１１０を介して、ネットワーク１２１０に接続される。そして、制御用計算機１０００は、ネットワーク１２１０を介して、遠隔地に配置される計算機１２２０に接続される。例えば、遠隔地にいるユーザが、計算機１２２０を利用して、並列計算機システムを管理できる。
【００４０】
なお、図１には、ＣＰＵ１０１０、メモリコントローラ１０２０、メモリ１０３０、ネットワークインタフェース１１１０及び二次記憶装置インタフェース１１２０が複数図示されるが、単数であってもよい。また、制御用計算機１０００及び演算用計算機１００１の数は、単数であっても複数であってもよいが、制御用計算機１０００は少なくとも一つ以上なければならない。
【００４１】
図２は、本発明の第１実施形態の制御用計算機ノードソフトウェア２０００及び演算用計算機ノードソフトウェア２１００の構成を示す図である。
【００４２】
制御用計算機ノードソフトウェア２０００は、制御用計算機１０００によって実行される。また、演算用計算機ノードソフトウェア２１００は、演算用計算機１００１によって、実行される。
【００４３】
制御用計算機ノードソフトウェア２０００は、ユーザ演算プログラム２０１０をリモートプロセスとして演算用計算機１００１に実行させる機能、演算用計算機１００１によって実行されるリモートプロセスが発行するＩｎｐｕｔ／Ｏｕｔｐｕｔ処理（以下、ＩＯ処理という）を演算用計算機１００１に代わって実行する機能、及びリモートプロセスを管理する機能を、少なくとも備える。演算用計算機ノードソフトウェア２１００は、制御用計算機ノードソフトウェア２０００によって割り当てられたリモートプロセスを実行する機能、リモートプロセスが発行するＩＯ処理を制御用計算機１０００にリモートＩＯ処理として実行させる機能、及び演算用計算機１００１に備わるメモリ１０３０の電力を制御する機能を少なくとも備える。
【００４４】
ここで、演算用計算機１００１によってリモートプロセスとして実行されるユーザ演算プログラム２０１０が発行するＩＯ処理について説明する。
【００４５】
ＩＯ処理は、二次記憶装置等１１６０の周辺装置に記憶されたデータを読み出す処理又は二次記憶装置１１６０にデータを書き込む処理である。
【００４６】
演算用計算機１００１は、演算用計算機１００１によってリモートプロセスとして実行されるユーザ演算プログラム２０１０が発行したＩＯ処理を制御用計算機１０００にそのＩＯ処理を実行させる場合がある。このユーザ演算プログラム２０１０が発行するＩＯ処理を、制御用計算機１０００が実行する処理を、リモートＩＯ処理という。
【００４７】
この場合、演算用計算機１００１は、ＩＯ処理要求を制御用計算機１０００に送信する。そして、制御用計算機１０００は、ＩＯ処理要求を受信すると、制御用計算機１０００に備わる二次記憶装置１０６０に対してＩＯ処理を実行する。そして、ＩＯ処理要求にデータの読み出し要求が含まれる場合、制御用計算機１０００は、読み出したデータを演算用計算機１００１に送信する。
【００４８】
まず、制御用計算機ノードソフトウェア２０００について説明する。
【００４９】
制御用計算機ノードソフトウェア２０００は、制御用計算機１０００に備わるメモリ１０３０にロードされ、制御用計算機１０００に備わるＣＰＵ１０１０によって実行される。制御用計算機ノードソフトウェア２０００は、ユーザ演算プログラム２０１０、開発・インストールツール２０２０及び基本システムソフトウェア２０３０を含む。
【００５０】
ユーザ演算プログラム２０１０は、計算機システムを利用する利用者のアプリケーションプログラムである。開発・インストールツール２０２０は、ユーザ演算プログラム２０１０の開発に利用されるプログラムである。また、開発・インストールツール２０２０は、ユーザ演算プログラム２０１０のインストールに利用されるプログラムである。例えば、開発・インストールツール２０２０は、コンパイラ、リンカ及びファイルインストールプログラムである。
【００５１】
基本システムソフトウェア２０３０は、制御用計算機１０００に備わるハードウェアを管理する。また、基本システムソフトウェア２０３０は、利用者にソフトウェアインタフェースを提供する。例えば、基本システムソフトウェア２０３０は、オペレーティングシステム及びハイパーバイザである。
【００５２】
なお、制御用計算機ノードソフトウェア２０００は、制御用計算機１０００に接続される二次記憶装置１１６０に格納される。なお、二次記憶装置１１６０に障害が発生した場合を考慮し、制御用計算機ノードソフトウェア２０００は、複数台の二次記憶装置１１６０に格納されてもよい。また、制御用計算機ノードソフトウェア２０００は、制御用計算機１０００にネットワーク１２１０を介して接続される計算機１２２０によって、配布されてもよい。
【００５３】
また、制御用計算機ノードソフトウェア２０００は、演算用計算機１００１又は他の制御用計算機１０００に記憶されていてもよい。この場合、制御用計算機ノードソフトウェア２０００を記憶する演算用計算機１００１又は他の制御用計算機１０００は、起動されると、ネットワーク１１９０又は高速入出力装置１１４０を介して、制御用計算機ノードソフトウェア２０００を制御用計算機１０００に配布する。
【００５４】
基本システムソフトウェア２０３０は、リモートプロセス実行管理プログラム２０３１、ＩＯ管理プログラム２０３２及びリモートプロセス管理インタフェース２０３３を含む。
【００５５】
リモートプロセス実行管理プログラム２０３１は、演算用計算機１００１によって実行されるユーザ演算プログラム２０１０をリモートプロセスとして、演算用計算機１００１に割り当てる。
【００５６】
ＩＯ管理プログラム２０３２は、演算用計算機１００１によってリモートプロセスとして実行されるユーザ演算プログラム２０１０が発行するＩＯ処理を、演算用計算機１００１に代わって実行する。なお、ＩＯ管理プログラム２０３２は、図１１で詳細を説明する。
【００５７】
リモートプロセス管理インタフェース２０３３は、演算用計算機１００１によって実行されるリモートプロセスの管理に関するパラメータ及び演算用計算機１００１によって実行されるリモートプロセスの管理に関する設定の変更を可能にするインタフェースとして機能するプログラムである。
【００５８】
なお、ユーザ演算プログラム２０１０は、制御用計算機１０００によって起動される。そして、リモートプロセス実行管理プログラム２０３１によって割り当てられた演算用計算機１００１は、ユーザ演算プログラム２０１０の処理をリモートプロセスとして実行する。
【００５９】
次に、演算用計算機ノードソフトウェア２１００について説明する。
【００６０】
演算用計算機ノードソフトウェア２１００は、演算用計算機１００１に備わるメモリ１０３０にロードされ、演算用計算機１００１に備わるＣＰＵ１０１０によって実行される。
【００６１】
演算用計算機ノードソフトウェア２１００は、ファームウェア２１１０及び基本システムソフトウェア２１２０を含む。ファームウェア２１１０は、演算用計算機１００１に備わるハードウェアの基本的なデータを格納する。また、ファームウェア２１１０は、演算用計算機１００１に備わるハードウェアに基本的な制御を実行する。
【００６２】
基本システムソフトウェア２１２０は、演算用計算機１００１に備わるハードウェアを管理する。また、基本システムソフトウェア２１２０は、利用者にソフトウェアインタフェースを提供する。例えば、基本システムソフトウェア２１２０は、オペレーティングシステム及びハイパーバイザである。
【００６３】
なお、ファームウェア２１１０は、演算用計算機１００１に備わるシステムＲＯＭ１０９０に格納される。
【００６４】
また、基本システムソフトウェア２１２０は、演算用計算機１００１に接続される二次記憶装置１１６０に格納される。なお、二次記憶装置１１６０に障害が発生した場合を考慮し、基本システムソフトウェア２１２０は、複数台の二次記憶装置１１６０に格納されてもよい。
【００６５】
また、基本システムソフトウェア２１２０は、演算用計算機１００１にネットワーク１２１０を介して接続される計算機１２２０によって、配布されてもよい。また、基本システムソフトウェア２１２０は、制御用計算機１０００又は他の演算用計算機１００１によって、配布されてもよい。例えば、制御用計算機１０００が起動された後、起動された制御用計算機１０００がネットワーク１１９０を介して接続される演算用計算機１００１へ基本システムソフトウェア２１２０を配布してもよい。
【００６６】
ファームウェア２１１０は、ハードウェア構成テーブル２１１１、メモリ・アドレッシング・モード指定インタフェース２１１２、メモリ・アドレッシング・モードテーブル２１１３、電力ランクゾーン‐メモリランク対応管理テーブル２１１４及びメモリ電力モードテーブル２１１５を含む。
【００６７】
ハードウェア構成テーブル２１１１には、演算用計算機１００１に備わるハードウェアの構成に関する基本的なデータが登録される。メモリ・アドレッシング・モード指定インタフェース２１１２は、メモリアドレスがメモリ１０３０に割り振られる方法を、入力装置から指定するインタフェースとして機能するプログラムである。
【００６８】
メモリ・アドレッシング・モードテーブル２１１３には、メモリアドレスがメモリ１０３０に割り振られる方法が登録される。なお、メモリ・アドレッシング・モードテーブル２１１３は、図３で詳細に説明する。
【００６９】
電力ランクゾーン‐メモリランク対応管理テーブル２１１４には、演算用計算機１００１に備わるメモリコントローラ１０２０によって、電力モードが制御可能な連続するメモリアドレスを示す電力ランクゾーン、及びその電力ランクゾーンに属するメモリランク１０３１が登録される。なお、電力ランクゾーン‐メモリランク対応管理テーブル２１１４は、図４で詳細に説明する。
【００７０】
メモリ電力モードテーブル２１１５には、演算用計算機１００１に備わるメモリ１０３０が切り替え可能な電力モード、各電力モードでメモリ１０３０が消費する電力、及びメモリ１０３０が電力モードを切り替える場合に発生するＣＰＵ１０１０からのアクセスが遅延する時間が登録される。なお、メモリ電力モードテーブル２１１５は、図５で詳細に説明する。
【００７１】
基本システムソフトウェア２１２０は、メモリ管理初期化プログラム２１２１、メモリ管理プログラム２１２２、メモリ電力管理プログラム２１２３、リモートプロセス実行管理プログラム２１２４、ＩＯ管理プログラム２１２５、メモリ管理制御インタフェース２１２６、メモリゾーン‐電力ランクゾーン状態管理テーブル２１２７及びリモートＩＯ管理テーブル２１２８を含む。
【００７２】
メモリ管理初期化プログラム２１２１は、演算用計算機１００１に備わるメモリ１０３０の制御及び管理に必要なデータ等を初期化する。また、メモリ管理初期化プログラム２１２１は、演算用計算機１００１に備わるメモリ１０３０に関するインタフェースをユーザに提供する準備をする。なお、メモリ管理初期化プログラム２１２１の処理は、図８で詳細に説明する。
【００７３】
メモリ管理プログラム２１２２は、演算用計算機１００１に備わるメモリ１０３０の制御及び管理を実行する。また、メモリ管理プログラム２１２２は、演算用計算機１００１に備わるメモリ１０３０に関するインタフェースをユーザに提供する。
【００７４】
メモリ電力管理プログラム２１２３は、メモリランク１０３１の電力モードを、メモリコントローラ１０２０を介して制御する。リモートプロセス実行管理プログラム２１２４は、制御用計算機１０００によって割り当てられたユーザ演算プログラム２０１０を実行する。また、リモートプロセス実行管理プログラム２１２４は、リモートプロセスを管理する。
【００７５】
ＩＯ管理プログラム２１２５は、演算用計算機１００１によってリモートプロセスとして実行されるユーザ演算プログラム２０１０が発行するＩＯ処理を管理する。具体的には、ＩＯ管理プログラム２１２５は、演算用計算機１００１によってリモートプロセスとして実行されるユーザ演算プログラム２０１０が発行するＩＯ処理を、制御用計算機１０００に実行させる。
【００７６】
なお、ＩＯ管理プログラム２１２５は、リモートプロセスが発行する全てのＩＯ処理を制御用計算機１０００に実行させなくてもよい。ＩＯ管理プログラム２１２５は、リモートプロセスが発行するＩＯ処理の種類によって、リモートプロセスを実行している演算用計算機１００１又は他の演算用計算機１００１に、ＩＯ処理を実行させてもよい。なお、ＩＯ管理プログラム２１２５は、図９、図１０及び図１２で詳細に説明する。
【００７７】
メモリ管理制御インタフェース２１２６は、メモリ１０３０の管理に関するパラメータ及び設定の変更を可能にするインタフェースとして機能するプログラムである。
【００７８】
メモリゾーン‐電力ランクゾーン状態管理テーブル２１２７には、連続するメモリアドレスごとのメモリゾーン、各連続するメモリアドレスの範囲に含まれる電力ランクゾーン、各電力ランクゾーンによって消費される電力、及び各電力ランクゾーンによって使用される状態を管理する。なお、メモリゾーン‐電力ランクゾーン状態管理テーブル２１２７については、図６で詳細を説明する。
【００７９】
リモートＩＯ管理テーブル２１２８は、制御用計算機１０００に実行させるＩＯ処理の種類と、制御用計算機１０００にＩＯ処理を実行させた場合に、演算用計算機１００１に備わるメモリ１０３０が消費する電力を制御する方法に関するパラメータとが登録される。なお、リモートＩＯ管理テーブル２１２８は、図７で詳細に説明する。
【００８０】
なお、基本システムソフトウェア２１２０は、一つ以上のメモリランク１０３１をまとめた電力ランクゾーン単位でメモリ１０３０が消費する電力を制御する。
【００８１】
図３は、本発明の第１実施形態のメモリ・アドレッシング・モードテーブル２１１３の構成を示す図である。
【００８２】
メモリ・アドレッシング・モードテーブル２１１３は、ファームウェア２１１０によって管理される。
【００８３】
メモリ・アドレッシング・モードテーブル２１１３は、アドレッシング・モード３０００及びアドレッシング方法３１００を含む。
【００８４】
アドレッシング・モード３０００には、メモリアドレスがメモリ１０３０に割り振られる方法の一意な識別子が登録される。ユーザは、アドレッシング・モード３０００に登録された識別子に基づいて、メモリアドレスがメモリ１０３０に割り振られる方法を決定する。
【００８５】
アドレッシング方法３１００には、メモリアドレスがメモリ１０３０に割り振られる方法が登録される。ここで、メモリアドレスとは、ＣＰＵ１０１０がメモリ１０３０にアクセスする場所を示すための一意な識別子である。
【００８６】
次に、アドレッシング方法３１００に登録されるメモリアドレスがメモリ１０３０に割り振られる方法について説明する。
【００８７】
通常モード３２００では、メモリコントローラ１０２０は、チャネル１０７０ａによってメモリコントローラ１０２０に接続されたメモリ１０３０ａからメモリアドレスを割り振る。その後、メモリコントローラ１０２０は、チャネル１０７０ａによってメモリコントローラ１０２０に接続されたメモリ１０３０ｂにメモリアドレスを割り振る。次に、メモリコントローラ１０２０は、チャネル１０７０ｎによってメモリコントローラ１０２０に接続されたメモリ１０３０ｍから順にメモリアドレスを割り振る。
【００８８】
フル・インタリーブモード３３００では、メモリコントローラ１０２０は、全てのチャネル１０７０ａ〜１０７０ｎに対して、チャネル１０７０ａによってメモリコントローラ１０２０に接続されたメモリ１０３０ａ〜１０３０ｂと、チャネル１０７０ｎに接続されたメモリ１０３０ｍ〜１０３０ｎとの間で交互に、予め定められたインタリーブ・サイズごとにメモリアドレスを割り振る。
【００８９】
「交互に」とは、例えば、ある番号のメモリアドレスがメモリ１０３０ａに割り振られると、次の番号のメモリアドレスがメモリ１０３０ｂに割り振られることを意味する。以下の電力制御モードにおいても同じである。
【００９０】
ｍチャネル・インタリーブモード３４００では、メモリコントローラ１０２０は、ｍ個のチャネルを一つの単位として，チャネル１０７０ａによってメモリコントローラ１０２０に接続されたメモリ１０３０ａ〜１０３０ｂとチャネルｍ−１に接続されたメモリ１０３０との間で交互に、予め定められたインタリーブ・サイズごとにメモリアドレスを割り振り、これをチャネル１０７０ｎによってメモリコントローラ１０２０に接続されたメモリ１０３０ｍ〜１０３０ｎまで繰り返す。
【００９１】
フル・インタリーブ・電力制御モード３５００では、メモリコントローラ１０２０は、全てのチャネル１０７０ａ〜１０７０ｎに対して、チャネル１０７０ａによってメモリ１０３０に接続されたメモリ１０３０ａ〜１０３０ｂとチャネル１０７０ｎに接続されたメモリ１０３０ｍ〜１０３０ｎとの間で交互に、メモリランク１０３１のサイズごとにメモリアドレスを割り振る。
【００９２】
ｍチャネル・インタリーブ・電力制御モード３６００では、メモリコントローラ１０２０は、ｍ個のチャネルを一つの単位として、チャネル１０７０ａによってメモリコントローラ１０２０に接続されたメモリ１０３０ａ〜１０３０ｂと、チャネルｍ−１に接続されたメモリ１０３０との間で交互に、メモリランク１０３１のサイズごとにメモリアドレスを割り振り、これをチャネル１０７０ｎまで繰り返す。
【００９３】
なお、ここで、インタリーブとは、チャネル１０７０に接続されたメモリ１０３０にメモリアドレスが交互に割り振られることによって、複数のチャネル１０７０に跨って、メモリアドレスが連続に割り振られることをいう。これによって、ＣＰＵ１０１０は、連続するメモリアドレスへのアクセスを高速化できる。
【００９４】
また、インタリーブ・サイズとは、一つのチャネル１０７０に割り振るメモリアドレスの容量のことをいう。メモリコントローラ１０２０〜１０２１は、インタリーブ・サイズごとにインタリーブするようにメモリアドレスを割り振る。
【００９５】
通常、インタリーブ・サイズは、ＣＰＵ１０１０のキャッシュライン・サイズであることが多い。キャッシュ・ラインサイズであるインタリーブ・サイズは、メモリページフレームのサイズより小さい。このため、メモリアドレスは、複数のチャネル１０７０に跨るように割り振られているので、一つのメモリページフレームが複数のメモリアドレスに跨る。従って、一つのメモリページフレームが複数のメモリランク１０３１に跨るので、メモリ１０３０の電力の制御に関して効率的でない。
【００９６】
よって、インタリーブ・サイズごとにメモリアドレスが割り振られるフル・インタリーブモード３３００及びｍチャネル・インタリーブモード３４００は、メモリの低電力化には適当ではない。
【００９７】
また、フル・インタリーブ・電力制御モード３５００及びｍチャネル・インタリーブ・電力制御モード３６００のインタリーブ・サイズをメモリランク１０３１のサイズと等しい値に設定する。メモリランク１０３１のランクサイズは、メモリページフレームのサイズよりも大きいので、一つ又は複数のメモリページプレームは、一つのメモリランク１０３１内に含まれるので、メモリの効率的な電力制御ができる。
【００９８】
また、通常モード３２００は、メモリランク１０３１から順にメモリアドレスが割り振られる、すなわちメモリランク１０３１ごとにメモリアドレスが割り振られることによって、メモリの効率的な電力制御ができる。
【００９９】
メモリ・アドレッシング・モードテーブル２１１３のアドレッシング・モード３０００は、通常、ファームウェア２１１０によって通常モード３２００に予め設定されている。
【０１００】
また、ユーザが、アドレッシング・モード３０００を選択することもできる。具体的には、演算用計算機１００１が起動され、ファームウェア２１１０が実行されると、ユーザは、計算機１０００〜１００１のキーボード１１７０等の入力装置を用いて、メモリ・アドレッシング・モード指定インタフェース２１１２を介して、アドレッシング・モード３０００を選択できる。
【０１０１】
また、ユーザが、メモリ・アドレッシング・モードテーブル２１１３の設定の内容（インタリーブ・サイズ及びインタリーブのチャネル１０７０の数等）を変更することもできる、
なお、ユーザが、ネットワーク１２１０を介して演算用計算機１００１に接続される計算機１２２０を利用して、メモリ・アドレッシング・モード指定インタフェース２１１２を介して、アドレッシング・モード３０００を選択できるようにしてもよい。
【０１０２】
また、ユーザが、ネットワーク１２１０を介して演算用計算機１００１に接続される計算機１２２０を利用して、メモリ・アドレッシング・モード指定インタフェース２１１２を介して、メモリ・アドレッシング・モードテーブル２１１３に登録された内容を変更できるようにしてもよい。
【０１０３】
図４は、本発明の第１実施形態の電力ランクゾーン‐メモリランク対応管理テーブル２１１４の構成を示す図である。
【０１０４】
電力ランクゾーン‐メモリランク対応管理テーブル２１１４は、ファームウェア２１１０によって管理される。
【０１０５】
電力ランクゾーン‐メモリランク対応管理テーブル２１１４は、電力ランクゾーン４０００、メモリアドレス４１００及びメモリランク４２００を含む。
【０１０６】
電力ランクゾーン４０００には、連続するメモリアドレスの領域を構成するメモリランク１０３１の数が最小となるように構成される電力ランクゾーンの識別子が登録される。基本システムソフトウェア２１２０は、電力ランクゾーン４０００単位で、メモリ１０３０によって消費される電力を制御する。
【０１０７】
メモリアドレス４１００には、電力ランクゾーン４０００に属する連続するメモリアドレスの領域のメモリアドレスが登録される。メモリランク４２００には、電力ランクゾーン４０００に属するメモリランク１０３１の識別子が登録される。
【０１０８】
例えば、電力ランクゾーン０（ＰＲ0）４３００は、メモリアドレス０〜Ｘ0,0及びメモリ１０３０ａに備わるメモリランク１０３１ａによって構成されることを示す。
【０１０９】
電力ランクゾーン‐メモリランク対応管理テーブル２１１４は、基本システムソフトウェア２１２０が実行されると、例えばメモリ１０３０にロードされる。これによって、基本システムソフトウェア２１２０は、電力ランクゾーン‐メモリランク対応管理テーブル２１１４を参照できる。
【０１１０】
電力ランクゾーン‐メモリランク対応管理テーブル２１１４に登録される内容は、メモリ１０３０に割り振られたメモリアドレスに基づいて、ファームウェア２１１０によって予め設定される。なお、メモリアドレスは、メモリ・アドレッシング・モードテーブル２１１３で選択されたアドレッシング・モード３０００に基づいてメモリ１０３０に割り振られる。
【０１１１】
なお、メモリ・アドレッシング・モードテーブル２１１３に登録される内容がユーザによって変更された場合、メモリ１０３０に割り振られるメモリアドレスが変更される。よって、メモリアドレスが変更されるので、ファームウェア２１１０は変更された連続するメモリアドレスの領域を構成する最小のメモリランク１０３１を検出する。
【０１１２】
そして、ファームウェア２１１０は、変更された連続するメモリアドレスをメモリアドレス４１００に登録し、検出されたメモリランクの識別子をメモリランク４２００に登録する。これによって、ファームウェア２１１０は、電力ランクゾーン‐メモリランク対応管理テーブル２１１４を変更する。
【０１１３】
電力ランクゾーン‐メモリランク対応管理テーブル２１１４が変更される場合に、チャネル１０７０、メモリ１０３０及びメモリランク１０３１のデータが必要な場合には、ファームウェア２１１０は、これらのデータが登録されているハードウェア構成テーブル２１１１を参照する。
【０１１４】
なお、基本システムソフトウェア２１２０が、メモリ・アドレッシング・モードテーブル２１１３及びハードウェア構成テーブル２１１１を参照して、電力ランクゾーン‐メモリランク対応管理テーブル２１１４を作成するようにしてもよい。また、基本システムソフトウェア２１２０が、電力ランクゾーン‐メモリランク対応管理テーブル２１１４に新たなエントリを追加するようにしてもよい。また、基本システムソフトウェア２１２０が、電力ランクゾーン‐メモリランク対応管理テーブル２１１４に登録された内容を変更するようにしてもよい。
【０１１５】
また、電力ランクゾーン‐メモリランク対応管理テーブル２１１４は、メモリ・アドレッシング・モードテーブル２００３の各アドレッシングモード（３２００〜３６００）に対応して、アドレッシングモード（３２００〜３６００）ごとに作成されてもよい。
【０１１６】
図５は、本発明の第１実施形態のメモリ電力モードテーブル２１１５の構成図である。
【０１１７】
メモリ電力モードテーブル２１１５は、ファームウェア２１１０によって管理される。メモリ電力モードテーブル２１１５は、電力モード５０００、消費電力５１００及びモード切替レイテンシ５２００を含む。
【０１１８】
電力モード５０００には、メモリランク１０３１の切り替え可能な電力モードの識別子が登録される。消費電力５１００には、各電力モードのメモリランク１０３１が消費する電力の値が登録される。モード切替レイテンシ５２００には、メモリランク１０３１が電力モードを他の電力モードへ切り替える場合に生じるＣＰＵ１０１１からのアクセスが遅延する時間（レイテンシ）の値が登録される。
【０１１９】
例えば、図５に示すメモリ電力モードテーブル２１１５には、３つの電力モード（５３００〜５５００）が登録されている。メモリランク１０３１が電力モード０（Ｓｔａｎｂｙ）５３００の状態の場合には、メモリランク１０３１が時間当たりに消費する電力はＸ0である。また、電力モード０（Ｓｔａｎｂｙ）５３００のメモリランク１０３１が電力モード０に切り替わる場合には、切り替え先の電力モード０は、現在の電力モードであるため、レイテンシは生じない。また、電力モード０（Ｓｔａｎｂｙ）５３００のメモリランク１０３１が電力モード１に切り替わる場合に生じるレイテンシはＹ0,1である。また、電力モード０（Ｓｔａｎｂｙ）５３００のメモリランク１０３１が電力モード２に切り替わる場合に生じるレイテンシはＹ0,2である。
【０１２０】
なお、ＣＰＵ１０１０は、電力モード０（Ｓｔａｎｂｙ）５３００のメモリランク１０３１〜１０６２にアクセスできる。また、ＣＰＵ１０１０は、電力モード１（ＰｏｗｅｒＤｏｗｎ）５４００及び電力モード２（Ｓｅｌｆ‐ｒｅｆｒｅｓｈ）５５００のメモリランク１０３１には、遅延を生じさせることなくアクセスできない。
【０１２１】
すなわち、メモリランク１０３１の電力モード５０００が電力モード０（Ｓｔａｎｂｙ）５３００の状態に切り替わっていなければ、ＣＰＵ１０１０は、メモリランク１０３１に読み書きを実行できない。
【０１２２】
また、メモリランク１０３１〜１０６２によって消費される電力は、電力モード２（Ｓｅｌｆ‐ｒｅｆｒｅｓｈ）５５００のＸ2が最も低く、次いで、電力モード１（ＰｏｗｅｒＤｏｗｎ）が低く、電力モード０（Ｓｔａｎｂｙ）５３００のＸ0が最も高い。電力モード０（Ｓｔａｎｂｙ）５３００を活性状態といい、電力モード１（ＰｏｗｅｒＤｏｗｎ）５４００及び電力モード２（Ｓｅｌｆ‐ｒｅｆｒｅｓｈ）５５００を不活性状態という。
【０１２３】
メモリ電力モードテーブル２１１５の内容は、演算用計算機１００１に備わるメモリ１０３０を構成するデータに基づいて、ファームウェア２１１０によって、予め設定される。
【０１２４】
図６は、本発明の第１実施形態のメモリゾーン‐電力ランクゾーン状態管理テーブル２１２７の構成を示す図である。
【０１２５】
メモリゾーン‐電力ランクゾーン状態管理テーブル２１２７は、基本システムソフトウェア２１２０によって管理される。
【０１２６】
メモリゾーン‐電力ランクゾーン状態管理テーブル２１２７は、メモリゾーン６０００、アドレス範囲６０１０、電力ランクゾーン６０２０、電力ランクゾーンサイズ６０３０、電力状態６０４０及び未使用メモリページフレーム数６０５０を含む。
【０１２７】
メモリゾーン６０００には、メモリアドレスの範囲に応じて基本システムソフトウェア２１２０によって管理されるメモリゾーンの識別子が登録される。アドレス範囲６０１０には、各メモリゾーン６０００に含まれるメモリアドレスが登録される。電力ランクゾーン６０２０には、アドレス範囲６０１０に含まれる電力ランクゾーンの識別子が登録される。電力ランクゾーンサイズ６０３０には、各電力ランクゾーン６０２０に登録された識別子の電力ランクゾーンの容量が登録される。
【０１２８】
電力状態６０４０には、各電力ランクゾーン６０２０に登録された識別子の電力ランクゾーンに属するメモリランク１０３１の電力モードの識別子が登録される。未使用メモリページフレーム数６０５０には、各電力ランクゾーン６０２０に登録された識別子の電力ランクゾーンに属するメモリランク１０３１に備わるメモリページフレームのうち、演算用計算機１００１によって実行されるソフトウェアによって使用されていない未使用メモリページフレームの数の値が登録される。
【０１２９】
例えば、図６に示すメモリゾーン‐電力ランクゾーン状態管理テーブル２１２７は、３つのメモリゾーン（６０６０、６０７０、及び６０８０）、及び各メモリゾーンに含まれる電力ランクゾーン（６０６１〜６０６２、６０７１〜６０７２、及び６０８１〜６０８２）を管理する。
【０１３０】
メモリゾーンＺｏｎｅ０（６０６０）は、アドレス範囲０〜Ｘ0のメモリアドレスを含み、Ｚｏｎｅ０（６０６０）は、電力ランクゾーンＰＲ0〜ＰＲx0（６０６１〜６０６２）を含む。
【０１３１】
電力ランクゾーンＰＲ0（６０６１）は、容量がＲＳ0であり、電力ランクゾーンＰＲ0の電力モードはＰＳ0であり、電力ランクゾーンＰＲ0（６０８１）内の各ソフトウェアによって使用されていないメモリページフレーム数はＳｕ0である。
【０１３２】
なお、電力ランクゾーン６０２０には、電力ランクゾーン‐メモリランク対応管理テーブル２１１４に含まれるメモリアドレス４１００に登録されたメモリアドレスの範囲がアドレス範囲６１００に登録されたメモリアドレスの範囲内である電力ランクゾーン４００に登録された識別子が登録される。
【０１３３】
メモリゾーン‐電力ランクゾーン状態管理テーブル２１２７に登録される内容は、演算用計算機１００１が起動された時に、メモリ管理初期化プログラム２１２１によって設定される。また、演算用計算機１００１が動作中、メモリゾーン‐電力ランクゾーン状態管理テーブル２１２７に登録された内容は、メモリ管理プログラム２１２２によって更新される。
【０１３４】
図７は、本発明の第１実施形態のリモートＩＯ管理テーブル２１２８の構成を示す図である。
【０１３５】
リモートＩＯ管理テーブル２１２８は、基本システムソフトウェア２１２０によって管理される。
【０１３６】
リモートＩＯ管理テーブル２１２８は、リモートＩＯファンクション７０００、ＩＯ実行時条件７０１０、不活性化フラグ７０２０、ＩＯサイズ閾値７０３０、閾値確認数７０４０及びエントリ更新フラグ７０５０を含む。
【０１３７】
リモートＩＯファンクション７０００には、演算用計算機１００１によってリモートプロセスとして実行されるユーザ演算プログラム２０１０が発行するＩＯ処理のうち、制御用計算機１０００に実行させるリモートＩＯ処理の識別子が登録される。
【０１３８】
具体的には、リモートＩＯファンクション７０００には、演算用計算機１００１によってリモートプロセスとして実行されるユーザ演算プログラム２０１０が発行するＩＯ処理のうち、リモートＩＯ処理のシンボル又は関数名が登録される。なお、リモートＩＯ処理のシンボル又は関数名は、ＩＯ処理の種類を示す一意な識別子である。
【０１３９】
例えば、リモートＩＯファンクション７０００に登録されるリモートＩＯ処理のシンボルとしては、システムコールファンクション、ＶＦＳ（Ｖｉｒｔｕａｌ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）レイヤ・ファンクション及びデバイス・ドライバレイヤＩＯファンクション等がある。
【０１４０】
システムコールファンクションには、Ｒｅａｄシステムコールファンクション及びＷｒｉｔｅシステムコールファンクション等がある。
【０１４１】
ＶＦＳレイヤ・ファンクションには、メモリマップド・ファイルＩＯ機能において、ページフォールト処理が実行されることによって、ファイルを読み込むファンクションがある。
【０１４２】
さらに、ＶＦＳレイヤ・ファンクションには、メモリ１０３０に記憶されるファイルページキャッシュを二次記憶装置１１６０等に書き込むファンクションがある。
【０１４３】
ＩＯ実行時条件７０１０には、リモートＩＯファンクション７０００に登録された識別子によって識別されるリモートＩＯ処理が実行される際の条件が登録される。
【０１４４】
例えば、リモートＩＯファンクション７０００にＷｒｉｔｅシステムコールが登録された場合、ＩＯ実行時条件７０１０には、Ｓｙｎｃモードのファイルにのみデータを書き込むという条件、又はＲａｗモードのファイルにのみデータを書き込むという条件が登録される。
【０１４５】
さらに、ＩＯ実行時条件７０１０には、制御用計算機１０００の二次記憶装置１１６０から読み出されるＩＯデータ（受信ＩＯデータ）の数又は制御用計算機１０００の二次記憶装置１１６０に書き込まれるＩＯデータ（送信ＩＯデータ）の数が登録される。
【０１４６】
不活性化フラグ７０２０には、制御用計算機１０００によってＩＯ処理が実行されている間に、ＩＯ処理を発行したユーザ演算プログラム２０１０を実行している演算用計算機１００１が、その演算用計算機１００１のメモリ１０３０の電力状態を不活性状態に切り替えるか否かを示す値が登録される。
【０１４７】
具体的には、不活性化フラグ７０２０には、ＯＮ又はＯＦＦが登録される。不活性化フラグ７０２０にＯＮが登録された場合、メモリ１０３０の電力状態を不活性状態にする処理が実行される。一方、不活性化フラグ７０２０にＯＦＦが登録された場合、メモリ１０３０の電力状態を不活性状態にする処理は実行されない。
【０１４８】
不活性化フラグ７０２０には、通常、ＯＮが登録される。不活性化フラグ７０２０にＯＦＦが登録される場合の例としては、例えば、演算用計算機１００１がリモートプロセスのみを実行するように設定された場合、及びＩＯデータの容量が小さい場合等がある。
【０１４９】
なお、演算用計算機１００１がリモートプロセスのみを実行するように設定された場合とは、換言すると、演算用計算機１００１がリモートプロセス以外の処理を実行しないように設定された場合である。例えば、演算用計算機１００１がＯＳを実行することによって生じる外乱が、リモートプロセスとして実行されるユーザ演算プログラム２０１０の処理に影響しないようにするために、演算用計算機１００１がリモートプロセス以外の処理を実行しないように設定される。なお、リモートプロセス以外の処理には、例えば、メモリ電力管理プログラム２１２３の処理等がある。
【０１５０】
ＩＯサイズ閾値７０３０には、各ＩＯデータの容量の閾値が登録される。具体的には、ＩＯサイズ閾値７０３０には、該当するＩＯ処理で読み書きされる各ＩＯデータを要素として、各要素に対するＩＯデータの容量の閾値が登録される。閾値確認数７０４０には、ＩＯサイズ閾値７０３０に登録された閾値よりも大きい容量のＩＯデータの数の閾値が登録される。
【０１５１】
ＩＯサイズ閾値７０３０に登録された閾値よりも大きい容量のＩＯデータの数が、閾値確認数７０４０に登録された閾値以上の場合、演算用計算機１００１は、演算用計算機１００１のメモリ１０３０の電力状態が不活性状態に切り替えられる。
【０１５２】
一方、ＩＯサイズ閾値７０３０に登録された閾値よりも大きい容量のＩＯデータの数が、閾値確認数７０４０に登録された閾値よりも小さい場合、演算用計算機１００１は、演算用計算機１００１のメモリ１０３０の電力状態が不活性状態に切り替えない。
【０１５３】
したがって、制御用計算機１０００が、容量がある程度大きいＩＯデータに対して、ＩＯ処理を実行している場合に、演算用計算機１００１のメモリ１０３０の電力状態が不活性状態に切り替えられる。
【０１５４】
すなわち、ＩＯ処理が実行されている時間が短いＩＯ処理については、演算用計算機１００１に備わるメモリ１０３０の電力状態が不活性状態に切り替えられない。よって、ＩＯ処理が実行された後、演算用計算機１００１がリモートプロセスとしてユーザ演算プログラム２０１０を再度実行する場合に、不活性状態に切り替えられたメモリ１０３０が活性状態に切り替えられていないため、ユーザ演算プログラム２０１０が実行する処理に遅延が生じる事態を予防できる。
【０１５５】
ＩＯサイズ閾値７０３０には、通常、予め設定された値が登録される。なお、制御用計算機１０００がＩＯ処理を実行した場合、ＩＯ処理が終了した後、ＩＯサイズ閾値７０３０に登録された値が更新されてもよい。
【０１５６】
具体的には、ＩＯサイズ閾値７０３０には、制御用計算機１０００がＩＯ処理を実行するためにかかった時間が、演算用計算機１００１のメモリ１０３０が不活性状態から活性状態に切り替えられるためにかかった時間よりも十分に大きくなるようなＩＯデータの容量の閾値に更新される。
【０１５７】
なお、ＩＯサイズ閾値７０３０の要素数は、ＩＯファンクション７０００に登録された識別子よって識別されるリモートＩＯ処理の対象となるＩＯデータの数と対応する。ＩＯサイズ閾値７０３０の要素数は、通常、ＩＯファンクション７０００に登録された識別子によって識別されるリモートＩＯ処理の対象となるＩＯデータのバッファの数と一致する。また、ＩＯサイズ閾値７０３０の要素の順は、例えば、左から順に、ＩＯファンクション７０００に登録された識別子によって識別されるリモートＩＯ処理の引数のうちＩＯデータを扱う引数順としてよい。
【０１５８】
エントリ更新フラグ７０５０には、制御用計算機１０００によってＩＯ処理が実行された後、リモートＩＯ管理テーブル２１２８に含まれるエントリ（７０６１〜７０６２，７０７１及び７０８１〜７０８２）が更新されるか否かを示す値が登録される。
【０１５９】
エントリ更新フラグ７０５０には、通常、ＯＮが登録される。なお、エントリ更新フラグ７０５０に登録された値は、変更できる。
【０１６０】
リモートＩＯファンクションＦiのＩＯ実行時条件７０１０は、Ｏｉ,0〜Ｏotherがある。例えば、
リモートプロセスが発行したＩＯ処理のシンボルがＦｉであって、そのＩＯ処理の実行時条件がＩＯ実行時条件７０１０に登録されたＯi,0の実行時条件と一致する場合、当該エントリ（７０６１）の不活性化フラグ７０２０にはＯＮが登録され、ＩＯサイズ閾値７０３０にはＳｉ,0,0〜Ｓｉ,0,pが登録され
、閾値確認数７０４０にはＣｉ,0が登録され、エントリ更新フラグ７０５０にはＯＮが登録されている
。
【０１６１】
また、ＩＯ実行時条件７０１０に登録されたＯOtherの実行時条件は、リモートプロセスが発行したＩＯ処理の実行時条件がＩＯ実行時条件７０１０に登録されたＯi,0の実行時条件と一致しない場合を示す実行時条件である。
【０１６２】
ＩＯ実行時条件７０１０にＯallが登録されている場合、ＩＯ処理の実行時条件がどんな条件であっても、該当するエントリの設定が適用される。
【０１６３】
リモートＩＯ管理テーブル２１２８の各エントリには、演算用計算機１００１が起動されると、リモートプロセス実行管理プログラム２０４１によって、デフォルト値が予め登録される。
【０１６４】
なお、ユーザが、制御用計算機１０００に備わる入力装置（キーボード１１７０又はマウス１１８０）からリモートプロセス管理インタフェース２０３３を介して、リモートＩＯ管理テーブル２１２８に登録される内容を作成又は変更してもよい。同じく、ユーザが、制御用計算機１０００に備わる入力装置（キーボード１１７０又はマウス１１８０）からリモートプロセス管理インタフェース２０３３を介して、リモートＩＯ管理テーブル２１２８に新たなエントリを追加してもよい。
【０１６５】
また、ユーザが、遠隔地に配置された計算機１２２０に備わる入力装置からネットワーク１２１０を介して、リモートＩＯ管理テーブル２１２８を作成又は変更してもよい。同じく、ユーザが、遠隔地に配置された計算機１２２０に備わる入力装置からネットワーク１２１０を介して、リモートＩＯ管理テーブル２１２８に新たなエントリを追加してもよい。
【０１６６】
また、リモートＩＯ管理テーブル２１２８が記憶される演算用計算機１００１に、ネットワーク１１９０又は高速入出力装置１１４０を介して接続される制御用計算機１０００によって実行される基本システムソフトウェア２０３０が、リモートプロセス管理インタフェース２０３３を介して、リモートＩＯ管理テーブル２１２８を作成又は変更してもよい。同じく、リモートＩＯ管理テーブル２１２８が記憶される演算用計算機１００１に、ネットワーク１１９０又は高速入出力装置１１４０を介して接続される制御用計算機１０００によって実行される基本システムソフトウェア２０３０が、リモートプロセス管理インタフェース２０３３を介して、リモートＩＯ管理テーブル２１２８に新たなエントリを追加してもよい。
【０１６７】
また、演算用計算機１００１によって実行される基本システムソフトウェア２１２０が、リモートＩＯ管理テーブル２１２８を作成又は変更してもよい。同じく、演算用計算機１００１によって実行される基本システムソフトウェア２１２０が、リモートＩＯ管理テーブル２１２８に新たなエントリを追加してもよい。
【０１６８】
なお、リモートプロセスとして実行されるユーザ演算プログラム２０１０ごとに、リモートＩＯ管理テーブル２１２８を作成してもよい。
【０１６９】
図８は、本発明の第１実施形態のメモリ管理初期化プログラム２１２１のフローチャートである。
【０１７０】
まず、メモリ管理初期化プログラム２１２１は、基本システムソフトウェア２１２０が起動されると、ＣＰＵ１０１０によって実行される（８０００）。
【０１７１】
メモリ管理初期化プログラム２１２１は、メモリゾーン‐電力ランクゾーン状態管理テーブル２１２７に含まれるアドレス範囲６０１０に登録されたメモリアドレスの範囲ごとにメモリゾーン６０００にメモリゾーンの識別子を登録する（８００１）。
【０１７２】
例えば、メモリゾーン６０００には、メモリ１０３０がＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）（１６ＭＢ）、Ｎｏｒｍａｌ（４ＧＢ）及びＨｉｇｈ（４ＧＢ以上）の領域に区分されるような値が登録される。
【０１７３】
なお、図６に示すメモリゾーン‐電力ランクゾーン状態管理テーブル２１２７では、Ｚｏｎｅ０がＤＭＡに対応し、Ｚｏｎｅ１がＮｏｒｍａｌに対応し、Ｚｏｎｅ２がＨｉｇｈに対応する。
【０１７４】
また、複数の演算用計算機１００１がＮｕｍａシステムを構成する場合のメモリゾーン６０００の構成としては、各々の演算用計算機１００１ごとにメモリゾーンが区分される構成がある。
【０１７５】
メモリ管理初期化プログラム２１２１は、メモリ１０３０の構成に関するデータ及び他のハードウェアの構成に関するデータが必要な場合には、例えば、ファームウェア２１１０に含まれるハードウェア構成テーブル２１１１及び電力ランクゾーン‐メモリランク対応管理テーブル２１１４を参照する。
【０１７６】
次に、メモリ管理初期化プログラム２１２１は、ステップ８００１の処理で設定したメモリゾーン６０６０〜６０８０について、メモリゾーン‐電力ランクゾーン状態管理テーブル２１２７を初期化する処理（ステップ８００３〜ステップ８００７の処理）を繰り返す（８００２）。
【０１７７】
メモリ管理初期化プログラム２１２１は、電力ランクゾーン‐メモリランク対応管理テーブル２１１４を参照し、メモリゾーン‐電力ランクゾーン状態管理テーブル２１２７に含まれる電力ランクゾーン６０２０の各エントリを設定する（８００３）。
【０１７８】
具体的には、メモリ管理初期化プログラム２１２１は、ステップ８００１の処理で設定されたメモリゾーン６０００に対応するアドレス範囲６０１０に登録されたメモリアドレスの範囲を取得する。そして、メモリ管理初期化プログラム２１２１は、電力ランクゾーン‐メモリランク対応管理テーブル２１１４に含まれるメモリアドレス４１００に登録されたメモリアドレスの範囲が、取得されたメモリアドレス範囲内にある電力ランクゾーン４０００に登録された識別子を取得する。そして、メモリ管理初期化プログラム２１２１は、取得した電力ランクゾーンの識別子を電力ランクゾーン６０２０に登録する。
【０１７９】
なお、例えば、電力ランクゾーンＰＲxoがメモリゾーン０及びメモリゾーン１に跨る場合、すなわち、電力ランクゾーンＰＲxoのメモリアドレスの領域がＺｏｎｅ０のメモリアドレスの領域及びＺｏｎｅ１のメモリアドレスの領域の両方に含まれる場合には、メモリ管理初期化プログラム２１２１は、跨る複数のメモリゾーン（Ｚｏｎｅ０及びＺｏｎｅ１）の電力ランクゾーン６０２０に電力ランクゾーンＰＲxoの識別子（６０６２、６０７１）を登録する。
【０１８０】
また、メモリ管理初期化プログラム２１２１は、電力ランクゾーン‐メモリランク対応管理テーブル２１１４を参照し、メモリゾーン６０００に対応するアドレス範囲６０１０に含まれる電力ランクゾーン４０００の容量の値をメモリゾーン‐電力ランクゾーン状態管理テーブル２１２７の電力ランクゾーンサイズ６０３０に登録する（８００４）。
【０１８１】
例えば、電力ランクゾーンＰＲxoがＺｏｎｅ０及びＺｏｎｅ１に跨る場合には、メモリ管理初期化プログラム２１２１は、Ｚｏｎｅ０の電力ランクゾーンサイズ６０３０に、Ｚｏｎｅ０のメモリアドレスの領域に含まれる電力ランクゾーンＰＲx0のメモリアドレスの領域分の電力ランクゾーンＰＲxoのサイズＲＳx0-0（６０６２）を登録する。
【０１８２】
また、メモリ管理初期化プログラム２１２１は、Ｚｏｎｅ１の電力ランクゾーンサイズ６０３０に、Ｚｏｎｅ１のメモリアドレスの領域に含まれる電力ランクゾーンＰＲx0のメモリアドレスの領域分の電力ランクゾーンＰＲx0のサイズＲＳx0-1（６０７１）を登録する。
【０１８３】
すなわち、電力ランクゾーンが複数のメモリゾーンに跨る場合には、メモリ管理初期化プログラム２１２１は、電力ランクゾーンが跨るメモリゾーン内に属する容量の値を電力ランクゾーンサイズ６０３０に登録する。
【０１８４】
次に、メモリ管理初期化プログラム２１２１は、各電力ランクゾーン（６０６１〜６０６２、６０７１〜６０７２、６０８１〜６０８２）に、各電力ランクゾーンの電力モードの状態を電力状態６０４０に登録する（８００５）。
【０１８５】
例えば、メモリ管理初期化プログラム２１２１は、メモリコントローラ１０２０を介して、各メモリランク１０３１の電力状態を取得する。そして、メモリ管理初期化プログラム２１２１は、取得した電力状態を電力状態６０４０に登録する。
【０１８６】
また、メモリ管理初期化プログラム２１２１は、ハードウェア構成テーブル２１１１を参照し、各メモリランク１０３１の電力状態を電力状態６０４０に登録してもよい。
【０１８７】
ステップ８００５の処理の後、メモリ管理初期化プログラム２１２１は、各電力ランクゾーン（６０６１〜６０６２、６０７１〜６０７２、６０８１〜６０８２）に、各ソフトウェアによって使用されていないメモリページフレームの数を未使用メモリページフレーム数６０５０に登録する（８００６）。
【０１８８】
なお、メモリゾーン‐電力ランクゾーン状態管理テーブル２１２７が初期化された場合、各電力ランクゾーンの未使用メモリページフレーム数６０５０には、例えば、各電力ランクゾーン６０２０の電力ランクゾーンサイズ６０３０に含まれるメモリページフレーム数と、基本システムソフトウェア２１２０を初期化する処理及びコード／データ等によって使用される各電力ランクゾーン６０２０のメモリページフレーム数との差分値が登録される。
【０１８９】
ステップ８００６の処理の後、メモリ管理初期化プログラム２１２１は、電力ランクゾーン６０２０に含まれる全てのメモリページフレームが各ソフトウェアによって使用されていない全メモリランク１０３１の電力状態を不活性状態に切り替え、電力状態６０４０を更新する（８００７）。
【０１９０】
なお、メモリランク１０３１の電力モードの切り替えは、例えば、メモリコントローラ１０２０を介して実行される。
【０１９１】
ステップ８００７の処理を実行すると、メモリ管理初期化プログラム２１２１は、メモリゾーン６０００に登録された全ての識別子のメモリゾーンに対して、ステップ８００３〜ステップ８００７の処理を繰り返す（８００８）。メモリゾーン６０００に登録された全ての識別子のメモリゾーンに対して、ステップ８００３〜ステップ８００７の処理が繰り返されると、メモリ管理初期化プログラム２１２１は終了する（８０１０）。
【０１９２】
図９は、本発明の第１実施形態のＩＯ管理プログラム２１２５がリモートＩＯメッセージを送信する処理のフローチャートである。
【０１９３】
まず、演算用計算機１００１によってリモートプロセスとして実行されているユーザ演算プログラム２０１０が、ＩＯ処理を発行する。そして、発行されたＩＯ処理が制御用計算機１０００によって実行されるリモートＩＯ処理である場合に、演算用計算機１００１は、ＩＯ管理プログラム２１２５を実行する（９０００）。
【０１９４】
演算用計算機１００１は、リモートＩＯメッセージを作成する（９００１）。なお、作成されたリモートＩＯメッセージには、リモートＩＯ処理の一意な識別子及び発行されたリモートＩＯ処理の実行時条件情報が含まれる。なお、リモートＩＯ処理の一意な識別子は、例えば、リモートＩＯ処理のシンボルである。また、リモートＩＯ処理の実行時条件情報は、発行されたＩＯ処理が実行される際の条件を示す情報である。
【０１９５】
次に、演算用計算機１００１は、リモートＩＯ管理テーブル２１２８を参照し、リモートＩＯファンクション７０００に、リモートＩＯメッセージに含まれるリモートＩＯ処理の識別子と一致する識別子が登録されているか否かを判定する（９００２）。
【０１９６】
ステップ９００２の処理で、リモートＩＯファンクション７０００に、リモートＩＯメッセージに含まれるリモートＩＯ処理の識別子と一致する識別子が登録されていないと判定されると、ステップ９００９の処理に進む。
【０１９７】
一方、ステップ９００２の処理で、リモートＩＯファンクション７０００に、リモートＩＯメッセージに含まれるリモートＩＯ処理の識別子と一致する識別子が登録されていると判定されると、演算用計算機１００１は、リモートＩＯ管理テーブル２１２８を参照し、リモートＩＯ処理の識別子と一致する識別子が登録されたリモートＩＯファンクション７０００に含まれるＩＯ実行時条件７０１０に、ＩＯ処理の実行時条件情報と一致する実行時条件が登録されているか否かを判定する（９００３）。
【０１９８】
具体的には、ＩＯ実行時条件７０１０にＩＯデータの数が登録されている場合、演算用計算機１００１は、ＩＯ実行時条件７０１０に、発行されたＩＯ処理のＩＯデータの数と一致するＩＯデータの数が登録されているか否かを判定する。発行されたＩＯ処理のＩＯ属性（例えばＲＡＷ（Ｒｅａｄ  Ａｆｔｅｒ  Ｗｒｉｔｅ）モードＩＯ処理等）の実行時条件も同じく、登録内容と一致するか否か判定される。
【０１９９】
なお、ＩＯ実行時条件７０１０にＩＯデータの数の他に、ＩＯ実行時条件７０１０にＩＯ処理の他の実行時条件が登録されている場合、演算用計算機１００１は、ＩＯ処理を管理するテーブル及びファイルを管理するテーブルを参照し、ＩＯ実行時条件７０１０に、発行されたＩＯ処理の実行時条件情報と一致する実行時条件が登録されているか否かを判定する。
【０２００】
ステップ９００３の処理で、ＩＯ処理の実行時条件情報と一致する実行時条件がＩＯ実行時条件７０１０に登録されていないと判定された場合、ステップ９００９の処理に進む。
【０２０１】
一方、ステップ９００３の処理で、ＩＯ処理の実行時条件情報と一致する実行時条件がＩＯ実行時条件７０１０に登録されていると判定された場合、演算用計算機１００１は、ＩＯ処理の実行時条件情報と一致する実行時条件がＩＯ実行時条件７０１０のエントリを取得する。
【０２０２】
そして、演算用計算機１００１は、取得されたエントリに含まれる不活性化フラグ７０２０にＯＮが登録されているか否かを判定する（９００４）。
【０２０３】
ステップ９００４の処理で、不活性化フラグ７０２０にＯＮが登録されていると判定された場合、演算用計算機１００１は、電力制御フラグを有効に設定し（９００５）、ステップ９００７の処理に進む。
【０２０４】
一方、ステップ９００４の処理で、不活性化フラグ７０２０にＯＮが登録されていないと判定された場合、演算用計算機１００１は、電力制御フラグを無効に設定し（９００６）、ステップ９００７の処理に進む。なお、電力制御フラグは、ＩＯ管理プログラム２１２５によって保持される。
【０２０５】
次に、演算用計算機１００１は、取得されたエントリに含まれるエントリ更新フラグ７０５０にＯＮが登録されているか否かを判定する（ステップ９００７）。
【０２０６】
ステップ９００７の処理で、エントリ更新フラグ７０５０にＯＮが登録されていないと判定された場合、ステップ９００９の処理に進む。
【０２０７】
一方、ステップ９００７の処理で、エントリ更新フラグ７０５０にＯＮが登録されていると判定された場合、ステップ９００１の処理で作成されたリモートＩＯメッセージに、ＩＯ処理終了後にリモートＩＯ管理テーブル２１２８のエントリを更新する指令を含め（９００８）、ステップ９００９の処理に進む。
【０２０８】
次に、演算用計算機１００１は、ＩＯ処理を実行させる制御用計算機１０００に、作成されたリモートＩＯメッセージを送信する（９００９）。なお、リモートＩＯメッセージが送信される制御用計算機１０００は、通常、演算用計算機１００１にリモートプロセスとしてユーザ演算プログラム２０１０を実行させている制御用計算機１０００である。
【０２０９】
そして、演算用計算機１００１は、リモートＩＯメッセージの送信が完了したか否かを判定する（９０１０）。
【０２１０】
ステップ９０１０の処理で、リモートＩＯメッセージの送信が完了していないと判定された場合、ステップ９０１０の処理に戻る。
【０２１１】
一方、ステップ９０１０の処理で、リモートＩＯメッセージの送信が完了したと判定された場合、演算用計算機１００１は、リモートＩＯメッセージを送信する処理を終了する。
【０２１２】
図１０は、本発明の第１実施形態のＩＯ管理プログラム２１２５が演算用計算機１００１のメモリ１０３０の電力を制御する処理のフローチャートである。
【０２１３】
演算用計算機１００１のメモリ１０３０の電力を制御する処理は、演算用計算機１００１がリモートＩＯメッセージを送信する処理が終了した後に、リモートＩＯ処理の識別子及びリモートＩＯ処理の実行時条件情報が指定されて、呼び出される（１００００）。なお、リモートＩＯ処理の実行時条件情報は、少なくとも、ＩＯ実行時条件７０１０に登録された実行時条件に対応する実行時条件情報、制御用計算機１０００によって実行されるＩＯ処理の引数の情報、各ＩＯデータの容量及び制御用計算機１０００に送信する各ＩＯデータを一次的にメモリ１０３０に記憶する領域（送信バッファ）のメモリアドレス及び制御用計算機１０００から受信した各ＩＯデータを一次的にメモリ１０３０に記憶する領域（受信バッファ）のメモリアドレスを含む。
【０２１４】
なお、演算用計算機１００１のメモリ１０３０の記憶領域は、ユーザ演算プログラム２０１０及びユーザ演算プログラム２０１０以外のプログラム等（例えば、ＯＳ）に割り当てられる。
【０２１５】
なお、ユーザ演算プログラム２０１０に割り当てられた記憶領域は、受信バッファに割り当てられた記憶領域及び送信バッファに割り当てられた記憶領域を含む。
【０２１６】
具体的には、メモリ１０３０のメモリページフレームが、各プログラムに割り当てられることによって、メモリ１０３０の記憶領域が、各プログラムに割り当てられる。
【０２１７】
まず、演算用計算機１００１は、電力制御フラグが有効であるか否かを判定する（１０００１）。なお、電力制御フラグは、ステップ９００５又は９００６の処理で設定されている。
【０２１８】
ステップ１０００１の処理で、電力制御フラグが有効でないと判定された場合、演算用計算機１００１のメモリ１０３０の電力を制御する処理を終了する（１００２４）。
【０２１９】
一方、ステップ１０００１の処理で、電力制御フラグが有効であると判定された場合、ステップ１０００２の処理に進む。
【０２２０】
次に、演算用計算機１００１は、ＩＯ管理プログラム２１２５によって保持される閾値確認カウンタを０に設定する（１０００２）。
【０２２１】
そして、演算用計算機１００１は、各ＩＯデータに、ステップ１０００４〜１０００７の処理を繰り返す（１０００３）。具体的には、演算用計算機１００１は、ユーザ演算プログラム２０１０が発行したＩＯ処理の実行時条件と一致する実行時条件が登録されるＩＯ実行時条件７０１０を含むレコードのＩＯサイズ閾値７０３０に登録された各ＩＯデータ（要素）に、ステップ１０００４〜１０００７の処理を繰り返す。
【０２２２】
まず、演算用計算機１００１は、ＩＯサイズ閾値７０３０に登録された要素を一つ選択する。
【０２２３】
次に、演算用計算機１００１は、ＩＯ実行時条件情報を参照し、選択された要素に対応するＩＯデータの容量を取得する。そして、演算用計算機１００１は、取得されたＩＯデータの容量から、選択された要素に登録された閾値を減算することによって、ＩＯデータの容量とＩＯサイズ閾値７０３０に登録された閾値との差分値を計算する（１０００４）。
【０２２４】
次に、演算用計算機１００１は、ステップ１０００４の処理で計算された差分値が正であるか否かを判定する（１０００５）。
【０２２５】
ステップ１０００５の処理で、差分値が正でないと判定された場合、つまり、取得されたＩＯデータの容量がＩＯサイズ閾値７０３０に登録された値よりも小さいと判定された場合、ステップ１０００８の処理に進む。
【０２２６】
一方、ステップ１０００５の処理で、差分値が正と判定された場合、つまり、取得されたＩＯデータの容量がＩＯサイズ閾値７０３０に登録された値以上である場合、演算用計算機１００１は、閾値確認カウンタに１を加算する。
【０２２７】
そして、演算用計算機１００１は、閾値確認カウンタに格納されている値から閾値確認数７０４０に登録された値を減算することによって、差分値を計算する（１０００６）。
【０２２８】
次に、演算用計算機１００１は、ステップ１０００６の処理で計算された差分値が正であるか否かを判定する（１０００７）。
【０２２９】
ステップ１０００７の処理で、差分値が正と判定された場合、つまり、閾値確認カウンタに格納されている値が閾値確認数７０４０に登録された値以上の場合、ステップ１０００９の処理に進む。
【０２３０】
ステップ１０００７の処理で、差分値が正でないと判定された場合、つまり、閾値確認カウンタに格納されている値が閾値確認数７０４０に登録された値よりも小さい場合、全てのＩＯデータについて、ステップ１０００４〜１０００７の処理が実行されていれば、演算用計算機１００１のメモリ１０３０の電力を制御する処理を終了し（１００２４）、全てのＩＯデータについて、ステップ１０００４〜１０００７の処理が実行されていなければ、ステップ１０００４の処理に戻る。
【０２３１】
次に、演算用計算機１００１は、メモリゾーン‐電力ランクゾーン状態管理テーブル２１２７に登録された電力ランクゾーンの全てのエントリに対して、ステップ１００１０〜１００１４の処理を繰り返す（１０００９）。
【０２３２】
まず、演算用計算機１００１は、メモリゾーン‐電力ランクゾーン状態管理テーブル２１２７に登録された電力ランクゾーンのエントリから、一つの電力ランクゾーンのエントリを選択する。
【０２３３】
そして、演算用計算機１００１は、選択されたエントリの電力ランクゾーン６０２０に登録された識別子によって識別される電力ランクゾーンの全てのメモリページフレーム数から、その電力ランクゾーンのメモリページフレームにおいてユーザ演算プログラム２０１０に割り当てられたメモリページフレームのうち送信バッファに割り当てられていないメモリページフレーム数及び選択された電力ランクゾーンのエントリに含まれる未使用メモリページフレーム数６０５０に登録された値を減算して、差分値を計算する（１００１０）。
【０２３４】
そして、演算用計算機１００１は、ステップ１００１０の処理で計算された差分値が０か否かを判定する（１００１１）。
【０２３５】
ここで、ユーザ演算プログラム２０１０は、制御用計算機１０００にＩＯ処理を実行させている間、実行されない。そして、送信バッファは、送信ＩＯデータが存在する場合、送信ＩＯデータを制御用計算機１０００に送信するために使用される。
【０２３６】
ステップ１００１１の処理で、差分値が０と判定された場合、その電力ランクゾーンの全てのメモリページフレームは、制御用計算機１０００にＩＯ処理を実行させている間、使用されないので、演算用計算機１００１は、その電力ランクゾーンの電力状態を、不活性状態に切り替え（１００１２）、ステップ１００１３の処理に進む。
【０２３７】
ステップ１００１１の処理で、差分値が０でないと判定された場合、その電力ランクゾーンのメモリページフレームは、制御用計算機１０００にＩＯ処理を実行させている間、使用するメモリページフレームを含む場合があるので、その電力ランクゾーンの電力状態を不活性状態に切り替えないで、ステップ１００１３の処理に進む。
【０２３８】
次に、演算用計算機１００１は、リモートプロセスとして実行されるユーザ演算プログラム２０１０によって発行されたＩＯ処理の実行時条件を参照し、制御用計算機１０００に二次記憶装置等に書き込ませるために、制御用計算機１０００に送信する必要のある送信ＩＯデータが存在するか否かを判定する（１００１３）。
【０２３９】
ステップ１００１３の処理で、送信ＩＯデータが存在すると判定された場合、その送信ＩＯデータが一次的に記憶される送信バッファが必要なので、演算用計算機１００１は、選択された電力ランクゾーンのエントリに含まれる電力ランクゾーン６０２０に登録された識別子によって識別される電力ランクゾーンのメモリページフレームが、送信バッファに割り当てられたメモリページフレームの少なくとも一つを含む場合、その電力ランクゾーンの識別子を記憶し（１００１４）、ステップ１００１５の処理に進む。
【０２４０】
なお、例えば、送信バッファに割り当てられたメモリページフレームの少なくとも一つを含む電力ランクゾーンの識別子は、ＩＯ管理プログラム２１２７のデータ記憶領域に記憶される。
【０２４１】
一方、ステップ１００１３の処理で、送信ＩＯデータが存在しないと判定された場合、送信ＩＯデータを一時的に記憶する送信バッファが必要ないので、演算用計算機１００１は、ステップ１００１４の処理を実行しないで、ステップ１００１５の処理に進む。
【０２４２】
演算用計算機１００１は、メモリゾーン‐電力ランクゾーン状態管理テーブル２１２７に登録された全ての電力ランクゾーンのエントリに、ステップ１００１０〜１００１４の処理が実行されると、ステップ１００１６の処理に進む（１００１５）。
【０２４３】
次に、演算用計算機１００１は、リモートプロセスとして実行されるユーザ演算プログラム２０１０によって発行されたＩＯ処理の実行時条件を参照し、制御用計算機１０００に二次記憶装置等に書き込ませるために、制御用計算機１０００に送信する必要のある送信ＩＯデータが存在するか否かを判定する（１００１６）。
【０２４４】
ステップ１００１６の処理で、送信ＩＯデータが存在しない場合、ステップ１００１２の処理で、制御用計算機１０００がＩＯ処理を実行している間、不要となるメモリページフレームが属する電力ランクゾーンは全て電力状態が不活性状態に切り替えられている。よって、送信ＩＯデータの送信後に、電力ランクゾーンの電力状態を不活性状態に切り替える必要はないので、演算用計算機１００１のメモリ１０３０の電力を制御する処理を終了する（１００２４）。
【０２４５】
一方、ステップ１００１６の処理で、送信ＩＯデータが存在する場合、電力状態が活性状態である送信バッファとして割り当てられたメモリページフレームが属する電力ランクゾーンが存在し、送信ＩＯデータを送信後に、この電力ランクゾーンの電力状態を不活性状態に切り替えるために、ステップ１００１７の処理に進む。
【０２４６】
次に、演算用計算機１００１は、送信ＩＯデータを指定された制御用計算機１０００に送信する（１００１７）。なお、指定された制御用計算機１０００は、通常、リモートプロセスを実行する要求を演算用計算機１００１に送信した制御用計算機１０００である。
【０２４７】
そして、演算用計算機１００１は、送信ＩＯデータの送信が完了したか否かを判定する（１００１８）。
【０２４８】
ステップ１００１８の処理で、送信ＩＯデータの送信が完了していないと判定された場合、ステップ１００１７の処理に戻る。
【０２４９】
一方、ステップ１００１８の処理で、送信ＩＯデータの送信が完了したと判定された場合、ステップ１００１９の処理に進む。
【０２５０】
なお、送信ＩＯデータの送信が完了した場合、送信ＩＯデータを送信バッファに一時的に記憶させる必要がないので、送信バッファに使用されていたメモリページフレームの電力状態を不活性状態するために、ステップ１００１９〜１００２３の処理に進む。
【０２５１】
演算用計算機１００１は、送信ＩＯデータの送信が完了した場合、ステップ１００１４の処理で記憶された電力ランクゾーンの全ての識別子に対して、ステップ１００２０〜１００２２の処理を繰り返す（１００１９）。
【０２５２】
まず、演算用計算機１００１は、ステップ１００１４の処理で記憶された電力ランクゾーンの識別子から、一つの電力ランクゾーンの識別子を選択する。
【０２５３】
次に、演算用計算機１００１は、選択された識別子によって識別される電力ランクゾーンの全てのメモリページフレーム数から、その電力ランクゾーンのメモリページフレームのうちリモートプロセスとして実行されるユーザ演算プログラム２０１０に割り当てられたメモリページフレーム数及びその電力ランクゾーンの使用されていないメモリページフレーム数を減算して、差分値を計算する（１００２０）。
【０２５４】
なお、その電力ランクゾーンのメモリページフレームのうちリモートプロセスとして実行されるユーザ演算プログラム２０１０に割り当てられたメモリページフレーム数には、送信バッファに割り当てられたメモリページ数及び受信バッファに割り当てられたメモリページフレーム数を含む。
【０２５５】
また、その電力ランクゾーンの使用されていないメモリページフレーム数は、演算用計算機１００１がメモリゾーン‐電力ランクゾーン状態管理テーブル２１２７を参照し、電力ランクゾーン６０２０に登録された識別子のうち、選択された電力ランクゾーンの識別子と一致する識別子が登録されたエントリを選択する。そして、演算用計算機１００１は、選択されたエントリに含まれる未使用メモリページフレーム数６０５０に登録された値を取得することによって、使用されていないメモリページフレーム数を取得する。
【０２５６】
そして、演算用計算機１００１は、ステップ１００２１の処理で計算された差分値が０であるか否かを判定する（１００２１）。
【０２５７】
ステップ１００２１の処理で、差分値が０と判定された場合、選択された識別子によって識別される電力ランクゾーンの全てのメモリページフレームは、リモートプロセスとして実行されるユーザ演算プログラム２０１０以外のプログラム等によって使用されていない。
【０２５８】
また、制御用計算機１０００がＩＯ処理を実行している間、ユーザ演算プログラム２０１０に割り当てられたメモリページフレームは使用されない。したがって、ステップ１００２１の処理で、差分値が０と判定された場合、選択された識別子によって識別される電力ランクゾーンのメモリページフレームは、制御用計算機１０００がＩＯ処理を実行している間、不要になるので、その電力ランクゾーンの電力状態を不活性状態に切り替え（１００２２）、ステップ１００２３の処理に進む。
【０２５９】
一方、ステップ１００２１の処理で、差分値が０でないと判定された場合、選択された識別子によって識別される電力ランクゾーンのメモリページフレームは、リモートプロセスとして実行されるユーザ演算プログラム２０１０以外のプログラム等によって使用されている。よって、ステップ１００２１の処理で、差分値が０でないと判定された場合、制御用計算機１０００がＩＯ処理を実行している間、不要にならないので、その電力ランクゾーンの電力状態を不活性状態に切り替えずに、ステップ１００２３の処理に進む。
【０２６０】
そして、演算用計算機１００１は、ステップ１００１４の処理で、記憶された電力ランクゾーンの全ての識別子に対して、ステップ１００２０〜１００２２の処理が実行されると、演算用計算機１００１のメモリ１０３０の電力を制御する処理を終了する（１００２４）。
【０２６１】
以上の処理によって、制御用計算機１０００がＩＯ処理を実行している間、不要となる電力ランクゾーンが不活性状態に切り替えられるので、メモリ１０３０が消費する電力が低減できる。
【０２６２】
図１１は、本発明の第１実施形態のＩＯ管理プログラム２０３２によって実行されるＩＯ処理のフローチャートである。
【０２６３】
制御用計算機１０００は、演算用計算機１００１によって送信されたリモートＩＯメッセージを受信すると、ＩＯ管理プログラム２０３２を実行する（１１０００）。
【０２６４】
制御用計算機１０００は、リモートＩＯメッセージを受信すると、受信したリモートＩＯメッセージに含まれるリモートＩＯ処理の識別子及びリモートＩＯ処理の実行時条件情報を取得する（１１００１）。
【０２６５】
次に、制御用計算機１０００は、取得したリモートＩＯ処理の実行時条件情報を参照し、送信ＩＯデータが、演算用計算機１００１から送信されるか否かを判定する（１１００２）。
【０２６６】
ステップ１１００２の処理で、送信ＩＯデータが、演算用計算機１００１から送信されないと判定された場合、ステップ１１００４の処理に進む。
【０２６７】
一方、ステップ１１００２の処理で、送信ＩＯデータが、演算用計算機１００１から送信されると判定された場合、制御用計算機１０００は、演算用計算機１００１から送信ＩＯデータを受信する（ステップ１１００３）。
【０２６８】
次に、制御用計算機１０００は、受信したリモートＩＯメッセージに含まれるリモートＩＯ処理の実行時条件情報に基づいて、リモートＩＯ処理の識別子によって識別されるＩＯファンクションを実行し、制御用計算機１０００から二次記憶装置１１６０に、受信した送信データを書き込む。また、受信したリモートＩＯメッセージに受信ＩＯデータの読み出し要求が含まれる場合、制御用計算機１０００は、二次記憶装置１１６０から受信ＩＯデータを読み出す（１１００４）。
【０２６９】
制御用計算機１０００は、送信ＩＯデータを二次記憶装置１１６０等に書き込む処理及び受信ＩＯデータを二次記憶装置１１６０等から読み出す処理が完了した場合に、リモートＩＯファンクションの実行が完了したことを示すリモートＩＯファンクション完了メッセージを、演算用計算機１００１に送信する（１１００５）。
【０２７０】
次に、制御用計算機１０００は、リモートＩＯファンクション完了メッセージの送信が完了したか否かを判定する（１１００６）。
【０２７１】
ステップ１１００６の処理で、リモートＩＯファンクション完了メッセージの送信が完了していないと判定された場合、ステップ１１００６の処理に戻る。
【０２７２】
一方、ステップ１１００６の処理で、リモートＩＯファンクション完了メッセージの送信が完了したと判定された場合、制御用計算機１０００は、受信したリモートＩＯメッセージに含まれるＩＯ処理の実行時情報を参照し、二次記憶装置１１６０から読み出し、演算用計算機１００１に送信される受信ＩＯデータが存在するか否かを判定する（１１００７）。
【０２７３】
ステップ１１００７の処理で、受信ＩＯデータが存在しないと判定された場合、ステップ１１０１０の処理に進む。
【０２７４】
一方、ステップ１１００７の処理で、受信ＩＯデータが存在すると判定された場合、制御用計算機１０００は、受信ＩＯデータを演算用計算機１００１に送信する（１１００８）。
【０２７５】
次に、制御用計算機１０００は、受信ＩＯデータの送信が完了したか否かを判定する（１１００９）。
【０２７６】
ステップ１１００９の処理で、受信ＩＯデータの送信が完了していないと判定された場合、ステップ１１００９の処理に戻る。
【０２７７】
一方、ステップ１１００６の処理で、受信ＩＯデータの送信が完了したと判定された場合、制御用計算機１０００は、受信したリモートＩＯメッセージにエントリ更新指令が含まれているか否かを判定する（１１０１０）。
【０２７８】
ステップ１１０１０の処理で、受信したリモートＩＯメッセージにエントリ更新指令が含まれる場合、制御用計算機１０００は、ＩＯ処理が実行された結果であるＩＯ処理実行プロファイル情報を含むリモートＩＯ処理完了メッセージを作成する（１１０１１）。
【０２７９】
なお、リモートＩＯ処理完了メッセージは、制御用計算機１０００によって実行されるＩＯ処理（リモートＩＯ処理）が全て完了したことを示す。ＩＯ処理は、二次記憶装置１１６０へのＩＯデータが読み書きされる処理であり、リモートＩＯ処理は、ＩＯ処理及び受信ＩＯデータを送信する処理を含む処理である。
【０２８０】
ＩＯ処理実行プロファイル情報には、例えば、ＩＯ処理が実行されたＩＯデータの容量及びそのＩＯデータのＩＯ処理にかかった時間が含まれる。また、ＩＯ処理実行プロファイル情報には、制御用計算機１０００が受信ＩＯデータを読み出した場合に、制御用計算機１０００が二次記憶装置から読み出したデータの容量と、制御用計算機１０００がメモリ１０３０のキャッシュから読み出したデータの容量との割合が含まれてもよい。さらに、ＩＯ処理実行プロファイル情報には、制御用計算機１０００が受信ＩＯデータを読み出した場合に、二次記憶装置１１６０から読み出されたデータが、メモリ１０３０のキャッシュに記憶されたデータの容量の値が含まれてもよい。
【０２８１】
なお、ＩＯ処理実行プロファイル情報は、ＩＯ処理が完了した場合に、基本システムソフトウェア２０３０のＩＯ処理管理テーブルに格納される。
【０２８２】
一方、ステップ１１０１０の処理で、受信したリモートＩＯメッセージにエントリ更新指令が含まれていない場合、制御用計算機１０００は、リモートＩＯ処理完了メッセージが作成されていないので、リモートＩＯ処理完了メッセージを作成し、ステップ１１０１２の処理に進む。
【０２８３】
そして、作成されたリモートＩＯ処理完了メッセージを演算用計算機１００１に送信する（１１０１２）。
【０２８４】
制御用計算機１０００は、リモートＩＯ処理完了メッセージの送信が完了したか否かを判定する（１１０１３）。
【０２８５】
ステップ１１０１３の処理で、リモートＩＯ処理完了メッセージの送信が完了していないと判定された場合、ステップ１１０１３の処理に戻る。
【０２８６】
一方、ステップ１１０１３の処理で、リモートＩＯ処理完了メッセージの送信が完了したと判定された場合、ＩＯ処理管理プログラム２０２３を終了する（１１０１４）。
【０２８７】
図１２は、本発明の第１実施形態のＩＯ管理プログラム２１２５によって実行されるＩＯ処理完了処理のフローチャートである。
【０２８８】
演算用計算機１００１は、ステップ１１００５の処理で制御用計算機１０００が送信したＩＯ処理完了メッセージを受信した場合、ＩＯ管理プログラム２１２５を呼び出し、ＩＯ処理完了処理を実行する（１２０００）。
【０２８９】
まず、演算用計算機１００１は、リモートプロセスとして実行されるユーザ演算プログラム２０１０によって発行されたＩＯ処理の実行時条件を参照し、受信ＩＯデータが制御用計算機１０００から送信されるか否かを判定する（１２００１）。
【０２９０】
ステップ１２００１の処理で、受信ＩＯデータが制御用計算機１０００から送信されないと判定された場合、ステップ１２００５の処理に進む。
【０２９１】
一方、ステップ１２００１の処理で、受信ＩＯデータが制御用計算機１０００から送信されると判定された場合、演算用計算機１００１は、受信バッファに割り当てられたメモリページを含む電力ランクゾーンの電力状態を活性状態に切り替え（１２００２）、ステップ１２００３の処理に進む。
【０２９２】
そして、演算用計算機１００１は、受信ＩＯデータを受信するために待機する（１２００３）。
【０２９３】
ステップ１１００３の処理で、制御用計算機１０００が受信ＩＯデータの送信を開始すると、演算用計算機１００１は、受信ＩＯデータを受信し、受信した受信ＩＯデータを受信バッファに記憶する（１２００４）。
【０２９４】
受信ＩＯデータの受信が完了した場合、又はステップ１２００１の処理で受信ＩＯデータが制御用計算機１０００から送信されないと判定された場合、演算用計算機１００１は、ユーザ演算プログラム２０１０に割り当てられたメモリページフレームを含む電力ランクゾーンの電力状態を活性状態に切り替える（１２００５）。
【０２９５】
なお、受信ＩＯデータの受信が完了した場合でなくても、演算用計算機１００１が受信ＩＯデータの受信を開始した場合、演算用計算機１００１がステップ１２００５の処理を実行してもよい。また、受信ＩＯデータの受信の途中で、演算用計算機１００１がステップ１２００５の処理を実行してもよい。
【０２９６】
なお、ステップ１２００５の処理で電力状態が活性状態に切り替えられる電力ランクゾーンは、ステップ１００１２の処理で電力状態が不活性状態に切り替えられた電力ランクゾーンに対応する。
【０２９７】
ステップ１２００５の処理は、リモートＩＯ処理終了後、ユーザ演算プログラム２０１０の実行が再開される前に、ユーザ演算プログラム２０１０に割り当てられたメモリページフレームを含む電力ランクゾーンの電力状態を先行的に活性状態に切り替える処理である。
【０２９８】
そして、演算用計算機１００１は、ステップ１１０１２の処理で送信されたリモートＩＯ処理完了メッセージを受信すると（１２００６）、エントリ更新フラグが有効であるか否かを判定する（１２００７）。
【０２９９】
具体的には、演算用計算機１００１は、ステップ９００７の処理で電力制御フラグが有効に設定され、ステップ９００８の処理でエントリ更新指令を含むリモートＩＯメッセージが作成されたか否かによって、エントリ更新フラグが有効であるか否かを判定する。
【０３００】
ステップ１２００７の処理で、エントリ更新フラグが有効でないと判定された場合、演算用計算機１００１は、リモートＩＯ管理テーブル２１２８に登録されたエントリを更新しないので、ＩＯ処理完了処理を終了する（１２００９）。
【０３０１】
一方、ステップ１２００７の処理で、エントリ更新フラグが有効であると判定された場合、演算用計算機１００１は、受信したリモートＩＯ処理完了メッセージに含まれるＩＯ処理実行プロファイル情報に基づいて、リモートＩＯ管理テーブル２１２８に登録されたエントリを更新し（１２００８）、ＩＯ処理完了処理を終了する（１２００９）。
【０３０２】
具体的には、演算用計算機１００１は、電力ランクゾーンの電力状態を不活性状態から活性状態に切り替える時間が、制御用計算機１０００がＩＯ処理にかかる時間よりも短くならないように、ＩＯサイズ閾値７０３０に登録された閾値を更新する。
【０３０３】
例えば、演算用計算機１００１は、ＩＯ処理実行プロファイル情報に含まれるＩＯ処理が実行されたＩＯデータの容量及びそのＩＯデータのＩＯ処理にかかった時間を線形補間することによって、ＩＯ処理にかかる時間が、メモリ電力モードテーブル２１１５のモード切替レイテンシ５２００に登録された値よりも大きくなるような、ＩＯデータの容量の値を算出する。そして、演算用計算機１００１は、ＩＯサイズ閾値７０３０に登録された閾値を算出されたＩＯデータの容量の値に更新する。
【０３０４】
また、演算用計算機１００１は、ＩＯ処理実行プロファイル情報に含まれる制御用計算機１０００が二次記憶装置から読み出したデータの容量と、制御用計算機１０００がメモリ１０３０のキャッシュから読み出したデータの容量との割合を線形補間することによって、ＩＯ処理にかかる時間が、メモリ電力モードテーブル２１１５のモード切替レイテンシ５２００に登録された値よりも大きくなるような、ＩＯデータの容量の値を算出する。そして、演算用計算機１００１は、ＩＯサイズ閾値７０３０に登録された閾値を算出されたＩＯデータの容量の値に更新してもよい。
【０３０５】
演算用計算機１００１は、ＩＯ処理実行プロファイルに含まれる二次記憶装置１１６０から読み出されたデータがメモリ１０３０のキャッシュに記憶されたデータの容量の値を線形補間することによって、ＩＯ処理にかかる時間が、メモリ電力モードテーブル２１１５のモード切替レイテンシ５２００に登録された値よりも大きくなるような、ＩＯデータの容量の値を算出する。そして、演算用計算機１００１は、ＩＯサイズ閾値７０３０に登録された閾値を算出されたＩＯデータの容量の値に更新してもよい。
【０３０６】
図１３は、本発明の第１実施形態の計算機システムのシーケンス図である。
【０３０７】
まず、演算用計算機１００１は、ユーザ演算プログラム２０１０が発行したＩＯ処理を発行すると（１３０）、リモートＩＯメッセージを作成する。そして、演算用計算機１００１は、リモートＩＯメッセージを制御用計算機１０００に送信する（１３１）。
【０３０８】
演算用計算機１００１は、リモートＩＯメッセージを送信した後、ユーザ演算プログラム２０１０は実行されないので、ユーザ演算プログラム２０１０に割り当てられたメモリページフレームを含むメモリランクのうち、送信バッファに割り当てられたメモリページフレームを含むメモリランクを除くメモリランクの電力状態が不活性状態に切り替える（１３２）。なお、図１４の（Ｂ）は、ステップ１３２の処理の後のメモリ１０３０の電力状態を示す。
【０３０９】
次に、演算用計算機１００１は、送信ＩＯデータを制御用計算機１０００に送信する（１３３）。演算用計算機１００１は、送信ＩＯデータを送信後に、送信バッファに割り当てられたメモリページフレームを含むメモリランクの電力状態を不活性状態に切り替える（１３４）。なお、図１４の（Ｃ）は、ステップ１３４の処理の後のメモリ１０３０の電力状態を示す。
【０３１０】
次に、制御用計算機１０００は、送信ＩＯデータ受信後、ＩＯ処理を実行する（１３５）。なお、ＩＯ処理が、データの読み出し要求のみである場合、リモートＩＯメッセージを受信した後、すぐにＩＯ処理が実行されてもよい。
【０３１１】
そして、制御用計算機１０００は、ＩＯ処理の実行が完了すると、リモートＩＯファンクション完了メッセージを演算用計算機１００１に送信する（１３６）。
【０３１２】
演算用計算機１００１は、リモートＩＯファンクション完了メッセージを受信すると、受信ＩＯデータが制御用計算機１０００から送信される前に、ユーザ演算プログラム２０１０に割り当てられたメモリページを含むメモリランクのうち、受信バッファに割り当てられたメモリページフレームを含むメモリランクの電力状態を、先行的に活性状態に切り替える（１３７）。なお、図１４の（Ｄ）は、ステップ１３７の処理の後のメモリ１０３０の電力状態を示す。
【０３１３】
そして、演算用計算機１００１は、制御用計算機１０００が送信した受信ＩＯデータを受信すると（１３８）、ユーザ演算プログラム２０１０を実行する前に、ユーザ演算プログラムに割り当てられたメモリページフレームを含むメモリランクの電力状態を先行的に活性状態に切り替える（１３９）。なお、図１４の（Ｅ）は、ステップ１３９の処理の後のメモリ１０３０の電力状態を示す。
【０３１４】
演算用計算機１００１は、制御用計算機１０００が送信したリモートＩＯ処理完了メッセージを受信すると（１４０）、エントリ更新フラグにＯＮが登録されている場合、制御用計算機１０００がＩＯ処理を実行した結果に基づいて、リモートＩＯ管理テーブル２１２８を更新する（１４１）。
【０３１５】
図１４は、本発明の第１実施形態のメモリ１０３０の電力状態の遷移を説明する図である。
【０３１６】
図１４に示す（Ａ）は、ユーザ演算プログラム２０１０が演算用計算機１００１によって実行されている間のメモリ１０３０の電力状態を説明する図である。
【０３１７】
この場合、ＯＳ等のシステムプログラムに割り当てられたメモリページフレームを含むメモリランクの電力状態は、活性状態である。以降の（Ｂ）〜（Ｄ）でも、ＯＳ等のシステムプログラムに割り当てられたメモリページフレームを含むメモリランクの電力状態は、常に活性状態である。
【０３１８】
そして、ユーザ演算プログラム２０１０は実行されているので、ユーザ演算プログラム２０１０に割り当てられているメモリページフレームを含むメモリランクの電力状態は、活性状態である。なお、ユーザ演算プログラム２０１０に割り当てられているメモリページフレームを含むメモリランクは、ユーザ演算プログラム２０１０を実行するために割り当てられたメモリページフレームを含むメモリランク、受信バッファに割り当てられたメモリページフレームを含むメモリランク、及び送信バッファに割り当てられたメモリページフレームを含むメモリランクである。
【０３１９】
図１４に示す（Ｂ）は、ステップ１３２の処理が実行された後のメモリ１０３０の電力状態を説明する図である。
【０３２０】
この場合、ユーザ演算プログラム２０１０は実行されず、受信バッファもしようされない。また、送信バッファは、演算用計算機１００１が送信ＩＯデータを送信するために使用される。
【０３２１】
よって、ユーザ演算プログラム２０１０に割り当てられたメモリページフレームを含むメモリランクのうち、送信バッファに割り当てられたメモリページを含むメモリランク以外のメモリランクの電力状態は、不活性状態に切り替えられる。
【０３２２】
図１４に示す（Ｃ）は、ステップ１３４の処理が実行された後のメモリ１０３０の電力状態を説明する図である。
【０３２３】
この場合、演算用計算機１００１が送信ＩＯデータを送信した後なので、送信バッファは、使用されない。
【０３２４】
よって、ユーザ演算プログラム２０１０に割り当てられたメモリページフレームを含むメモリランクのうち、送信バッファに割り当てられたメモリページを含むメモリランクの電力状態は、不活性状態に切り替えられる。
【０３２５】
図１４に示す（Ｄ）は、ステップ１３７の処理が実行された後のメモリ１０３０の電力状態を説明する図である。
【０３２６】
この場合、ステップ１３８の処理で演算用計算機１００１が受信ＩＯデータを受信するので、受信バッファが使用される。よって、演算用計算機１００１が受信ＩＯデータを受信する前に、受信バッファに割り当てられたメモリページフレームを含むメモリランクの電力状態が先行的に活性状態に切り替えられる。
【０３２７】
図１４に示す（Ｅ）は、ステップ１３９の処理が実行された後のメモリ１０３０の電力状態を説明する図である。
【０３２８】
この場合、ステップ１４０の処理でリモートＩＯ処理完了メッセージを受信した後、ユーザ演算プログラム２０１０が実行される。よって、ユーザ演算プログラム２０１０が実行される前に、受信バッファに割り当てられたメモリページフレームを含むメモリランク以外のメモリランクの電力状態が先行的に活性状態に切り替えられる。
【０３２９】
これによって、演算用計算機１００１によってリモートプロセスとして実行されるユーザ演算プログラム２０１０が発行するＩＯ処理を制御用計算機１０００が実行する場合、制御用計算機１０００がＩＯ処理を実行している間、演算用計算機１００１に備わるメモリ１０３０のメモリランク１０３１において、不要なメモリランク１０３１の電力状態が不活性状態に切り替えられる。これによって、演算用計算機１００１に備わるメモリ１０３０が消費する電力を低減できる。
【０３３０】
また、制御用計算機１０００がＩＯ処理を完了した場合、演算用計算機１００１は、演算用計算機１００１に備わるメモリ１０３０のメモリランク１０３１において、受信バッファに割り当てられたメモリランク１０３１及びユーザ演算プログラム２０１０に割り当てられたメモリランク１０３１の電力状態を先行して活性状態に切り替える。これによって、ＩＯ処理が完了した場合に、演算用計算機１００１が、ユーザ演算プログラム２０１０の実行を再開しても、ＣＰＵ１０１０がメモリ１０３０にアクセスする性能に影響を与えずに、メモリ１０３０が消費する電力を低減できる。
【０３３１】
また、ユーザ演算プログラム２０１０が演算用計算機１００１によって実行される場合、外乱を排除できる。
【０３３２】
本発明の実施形態は、特に、ユーザ演算プログラム２０１０が大量のメモリ１０３０の記憶領域を使用する場合及びＩＯ処理が実行されるＩＯデータの容量が大きい場合（例えば、科学技術計算プログラムのＩＯ処理等）、メモリ１０３０が消費する電力をより効果的に低減できる。
【０３３３】
（第２実施形態）
次に、本発明の第２実施形態について、図１５〜図１６を用いて説明する。
【０３３４】
本発明の第２実施形態は、演算用計算機１００１が、制御用計算機１０００にＩＯ処理を実行させている間にも、リモートプロセスとしてユーザ演算プログラム２０１０を実行する場合の実施形態である。なお、このようなＩＯ処理を非同期ＩＯ処理という。
【０３３５】
これによって、演算用計算機１００１は、制御用計算機１０００にＩＯ処理要求を送信した後でも、リモートプロセスとしてユーザ演算プログラム２０１０を実行し続けることができる。
【０３３６】
非同期ＩＯ処理が実行される方法としては、ユーザの指示によって実行されるプロセスに含まれるスレッドを用いて実行される方法と、基本システムソフトウェア２１２０のプロセスに含まれるスレッドを用いて実行される方法とがある。なお、スレッドは、プロセスの実行単位である。また、スレッドは、メモリ１０３０等のリソースをプロセスと共有する。
【０３３７】
まず、非同期ＩＯ処理が、ユーザの指示によって実行されるプロセスに含まれるスレッドを用いて実行される方法について詳細に説明する。
【０３３８】
演算用計算機１００１は、ユーザ演算プログラム２０１０に割り当てられているメモリ１０３０の記憶領域の一部を、非同期ＩＯ処理を実行する作業用スレッドに割り当てる。そして、この作業用スレッドが、ユーザ演算プログラム２０１０に代わってＩＯ処理を実行する。
【０３３９】
作業用スレッドがＩＯ処理の実行を完了した場合、及び作業用スレッドがＩＯ処理を実行中に、エラーが発生した場合、演算用計算機１００１は、イベントシグナル等を利用して、ＩＯ処理の実行を完了した旨及びエラーが発生した旨を、ユーザ演算プログラム２０１０に通知する。
【０３４０】
ユーザ演算プログラム２０１０は、ＩＯ処理の実行が完了した旨及びエラーが発生した旨を受信した場合、シグナルハンドラを起動させる。そして、シグナルハンドラは、ＩＯ処理の結果を確認する。
【０３４１】
なお、作業用スレッドが発行する非同期ＩＯ処理は、第１実施形態のＩＯ処理と同じファンクションによって実行される。よって、非同期ＩＯ処理が、ユーザの指示によって実行されるプロセスに含まれるスレッドを用いて実行される場合、ユーザ演算プログラム２０１０の代わりに、作業用スレッドに割り当てられたメモリページフレームの電力ランクゾーンの電力状態を制御すればよい。
【０３４２】
具体的には、作業スレッド用スレッドに割り当てられたメモリ１０３０の記憶領域は、送信バッファに割り当てられた記憶領域及び受信バッファに割り当てられた記憶領域を含む。そして、演算用計算機１００１は、送信バッファに割り当てられた記憶領域及び受信バッファに割り当てられた記憶領域の電力状態を制御すればよい。
【０３４３】
また、非同期ＩＯ処理が基本システムソフトウェア２１２０のスレッドを用いて実行される場合、基本システムソフトウェア２１２０によって提供される非同期ＩＯファンクションの処理の延長で実行される同期ＩＯファンクションに対してメモリ１０３０の低消費電力制御を実施すればよい。
【０３４４】
以下、第２実施形態について、具体的に説明する。なお、第１実施形態と異なる部分についてのみ説明する。
【０３４５】
図１５は、本発明の第２実施形態のＩＯ管理プログラム２１２５が演算用計算機１００１のメモリ１０３０の電力を制御する処理のフローチャートである。
【０３４６】
本実施形態のＩＯ管理プログラム２１２５が演算用計算機１００１のメモリ１０３０の電力を制御する処理では、演算用計算機１００１は、第１実施形態のステップ１００１０の処理に代わって、ステップ１３０００の処理を実行する。また、演算用計算機１００１は、第１実施形態のステップ１００２０の処理に代わって、ステップ１３００１の処理を実行する。
【０３４７】
まず、ステップ１３０００の処理について説明する。
【０３４８】
演算用計算機１００１は、選択されたエントリの電力ランクゾーン６０２０に登録された識別子によって識別される電力ランクゾーンの全てのメモリページフレーム数から、その電力ランクゾーンのメモリページフレームにおいてユーザ演算プログラム２０１０に割り当てられたメモリページフレームのうち受信バッファに割り当てられたメモリページフレームの数及び選択された電力ランクゾーンのエントリに含まれる未使用メモリページフレーム数６０５０に登録された値を減算して、差分値を計算する（１３０００）。
【０３４９】
そして、演算用計算機１００１は、ステップ１００１０の処理で計算された差分値が０か否かを判定する（１００１１）。
【０３５０】
なお、制御用計算機１０００が作業用スレッドによって発行されたＩＯ処理を実行中に、演算用計算機１００１は、ユーザ演算プログラム２０１０を実行する。すなわち、演算用計算機１００１が、制御用計算機１０００にリモートＩＯメッセージを送信した後、ユーザ演算プログラム２０１０に割り当てられているメモリページフレームは使用され続ける。
【０３５１】
また、受信バッファに割り当てられているメモリページフレームは、演算用計算機１００１１が制御用計算機１０００から受信ＩＯデータを受信するまで、使用されない。
【０３５２】
よって、差分値が０と判定された場合、つまり受信バッファに割り当てられたメモリフレームのみが使用されている電力ランクゾーンの電力状態を不活性状態に切り替える（１００１２）。
【０３５３】
一方、差分値が０でないと判定された場合、ユーザ演算プログラム２０１０等に割り当てられたメモリページフレームも使用されているので、その電力ランクゾーンの電力状態を不活性状態に切り替えず、ステップ１００１３の処理に進む。
【０３５４】
次に、ステップ１３００１の処理について説明する。
【０３５５】
演算用計算機１００１は、選択された識別子によって識別される電力ランクゾーンの全てのメモリページフレーム数から、受信バッファに割り当てられたメモリページフレーム数、送信バッファに割り当てられたメモリページフレーム数、及びその電力ランクゾーンの使用されていないメモリページフレーム数を減算して、差分値を計算する（１３００１）。
【０３５６】
そして、演算用計算機１００１は、ステップ１００１０の処理で計算された差分値が０か否かを判定する（１００２１）。
【０３５７】
ステップ１００２１の処理で、差分値が０と判定された場合、選択された電力ランクゾーンのエントリに含まれる電力ランクゾーン６０２０に登録された識別子によって識別される電力ランクゾーンのメモリページフレームのうち、受信バッファに割り当てられたメモリページフレーム及び送信バッファに割り当てられたメモリページフレーム以外のメモリページフレームは、使用されていない。
【０３５８】
また、送信バッファに割り当てられているメモリページフレームは、演算用計算機１００１が送信ＩＯデータを送信後、使用されない。また、受信バッファに割り当てられているメモリページフレームは、演算用計算機１００１１が制御用計算機１０００から受信ＩＯデータを受信するまで、使用されない。
【０３５９】
よって、差分値が０と判定された場合、つまり受信バッファに割り当てられているメモリページフレーム及び送信バッファに割り当てられたメモリフレームのみが使用されている電力ランクゾーンの電力状態を不活性状態に切り替える（１００２２）。
【０３６０】
一方、差分値が０でないと判定された場合、ユーザ演算プログラム２０１０等に割り当てられたメモリページフレームも使用されているので、その電力ランクゾーンの電力状態を不活性状態に切り替えず、ステップ１００２３の処理に進む。
【０３６１】
図１６は、本発明の第２実施形態のＩＯ管理プログラム２１２５によって実行されるＩＯ処理完了処理のフローチャートである。
【０３６２】
本実施形態のＩＯ処理完了処理では、第１実施形態のステップ１２００５の処理に代わって、ステップ１４０００及び１４００１の処理を実行する。
【０３６３】
演算用計算機１００１は、送信ＩＯデータを制御用計算機１０００に送信したか否かを判定する（１４０００）。演算用計算機１００１は、例えば、リモートＩＯファンクション実行時情報を参照して、送信ＩＯデータを制御用計算機１０００に送信したか否かを判定する。
【０３６４】
ステップ１４０００の処理で、送信ＩＯデータを制御用計算機１０００に送信したと判定された場合、ステップ１００２２の処理、つまり、送信バッファに割り当てられたメモリページフレームの電力ランクゾーンの電力状態が不活性状態に切り替える処理は実行されている。よって、演算用計算機１００１は、送信バッファに割り当てられたメモリページフレームの電力ランクゾーンの電力状態を先行的に活性状態に切り替える（１４００１）。
【０３６５】
一方、ステップ１４０００の処理で、送信ＩＯデータを制御用計算機１０００に送信していないと判定された場合、ステップ１００２２の処理、つまり送信バッファに割り当てられたメモリページフレームの電力ランクゾーンの電力状態が不活性状態に切り替える処理は実行されていないので、送信バッファに割り当てられたメモリページフレームの電力ランクゾーンの電力状態を先行的に活性化する必要はない。よって、演算用計算機１００１は、ステップ１４００１の処理を実行しないで、ステップ１２００６の処理に進む。
【０３６６】
これによって、演算用計算機１００１が、ユーザ演算プログラム２０１０をリモートプロセスとして実行し、非同期ＩＯ処理を実行する場合、最低限必要なメモリランクの電力状態を活性状態としたまま、必要ないメモリランクの電力状態を不活性状態に切り替える。よって、メモリ１０３０が消費する電力を確実かつ効率的に低減できる。
【０３６７】
また、制御用計算機１０００がＩＯ処理を実行した後、演算用計算機１００１は、ＩＯ処理結果を確認するために必要なメモリランク１０３１の電力状態を先行して活性状態に切り替える。よって、メモリランク１０３１の電力状態が切り替えられる場合に発生するレイテンシを隠蔽できる。したがって、ＣＰＵ１０１０がメモリ１０３０にアクセスする性能に影響を与えずにメモリ１０３０が消費する電力を低減できる。
【０３６８】
また、ユーザ演算プログラム２０１０が演算用計算機１００１によって実行される場合、外乱を排除できる。
【０３６９】
本発明の実施形態は、特に、ユーザ演算プログラム２０１０が大量のメモリ１０３０の記憶領域を使用する場合及びＩＯ処理が実行されるＩＯデータの容量が大きい場合（例えば、科学技術計算プログラムのＩＯ処理等）、メモリ１０３０が消費する電力をより効果的に低減できる。
【０３７０】
（第３実施形態）
本発明の第３実施形態を図１７〜図２１を用いて説明する。
【０３７１】
本実施形態では、演算用計算機１００１によってリモートプロセスとして実行されるユーザ演算プログラム２０１０は、制御用計算機１０００及び演算用計算機１００１の少なくとも一方のＩＯ状態を監視する。そして、演算用計算機１００１は、ユーザ演算プログラム２０１０が監視している制御用計算機１０００及び演算用計算機１００１のうち、少なくとも一つのＩＯ状態がＩＯ処理を実行できる状態（ｒｅａｄｙ状態）になるまで待機する処理（多重ＩＯイベント監視処理）を実行する場合、ＩＯ処理を考慮して、メモリ１０３０が消費する電力を低減させる。
【０３７２】
なお、ｒｅａｄｙ状態とは、例えば、読み出し要求を受信した制御用計算機１０００が、対象となるファイルを読み出す準備ができた状態である。
【０３７３】
以下、第３実施形態について、具体的に説明する。なお、第１実施形態と異なる部分についてのみ説明する。
【０３７４】
図１７は、本発明の第３実施形態のＩＯ管理プログラム２１２５がリモートＩＯメッセージを送信する処理のフローチャートである。なお、第１実施形態と同じ処理については、同じ符号を付し、説明を省略する。
【０３７５】
まず、リモートＩＯメッセージを送信する処理は、演算用計算機１００１によってリモートプロセスとして実行されるユーザ演算プログラム２０１０が発行した多重ＩＯイベント同期処理のＩＯファンクションを制御用計算機１０００又は他の演算用計算機１００１が実行する場合、実行される処理である（９０００）。なお、本実施形態のＩＯファンクションは、演算用計算機１００１又は制御用計算機１０００が、その計算機のＩＯ状態を監視するファンクションである。
【０３７６】
演算用計算機１００１は、ＩＯ状態を監視する範囲に応じてステップ１５００１〜１６００３の処理のいずれかを実行する（１５０００）。なお、演算用計算機１００１は、演算用計算機１００１がＩＯ状態を監視する範囲を、例えば、ＩＯファンクションの識別子及び実行時情報（例えば、ＩＯファンクションの引数の情報）から取得できる。
【０３７７】
なお、演算用計算機１００１が、演算用計算機１００１のみのＩＯ状態を監視する場合、制御用計算機１０００にＩＯファンクションを実行させない。つまり、制御用計算機１０００はＩＯ状態を監視しない。
【０３７８】
また、演算用計算機１００１が制御用計算機１０００のＩＯ状態を監視する場合、演算用計算機１００１は、制御用計算機１０００にＩＯファンクションを実行させ、その制御用計算機１０００のＩＯ状態を監視させる。
【０３７９】
そして、演算用計算機１００１が、演算用計算機１００１のみのＩＯ状態を監視する場合、演算用計算機１００１が多重ＩＯイベント監視ファンクションを実行するために必要な引数情報を作成する（１５００１）。
【０３８０】
なお、演算用計算機１００１が、制御用計算機１０００のみのＩＯ状態を監視する場合、制御用計算機１０００が多重ＩＯイベント監視ファンクションを実行するために必要な引数情報を作成する（１５００２）。
【０３８１】
また、演算用計算機１００１が、演算用計算機１００１及び制御用計算機１０００のＩＯ状態を監視する場合、演算用計算機１００１が多重ＩＯイベント監視ファンクションを実行するために必要な引数情報を作成し、さらに制御用計算機１０００が多重ＩＯイベント監視ファンクションを実行するために必要な引数情報を作成する（１５００３）。
【０３８２】
なお、ステップ１５００３の処理で作成される引数情報は、演算用計算機１００１と制御用計算機１０００との間でＩＯ状態を通知する演算用計算機１００１及び制御用計算機１０００の情報を含む。
【０３８３】
また、ステップ１５００２又は１５００３の処理の実行後、演算用計算機１００１は、制御用計算機１０００にＩＯ処理を実行させるため、多重ＩＯイベント監視ファンクションの識別子及び多重ＩＯイベント監視ファンクションを実行する際の実行時条件情報を含むリモートＩＯメッセージを作成し（１５００４）、図９に示すステップ９００２の処理に進む。
【０３８４】
なお、多重ＩＯイベント監視ファンクションの識別子は、例えば、ＩＯファンクションのシンボル又はそのＩＯファンクションのシンボルのアドレス情報である。また、実行時条件情報は、例えば、ＩＯファンクションの引数情報等である。
【０３８５】
ステップ１５００１の処理の実行後、図９に示すステップ９００２の処理に進む。
【０３８６】
そして、ステップ９００７の処理で、取得されたエントリに含まれるエントリ更新フラグ７０５０にＯＮが登録されていると判定された場合、演算用計算機１００１は、制御用計算機１０００のＩＯ状態を監視するか否かを判定する（１５００５）。例えば、演算用計算機１００１は、ＩＯファンクションの識別子及び実行時情報（例えば、ＩＯファンクションの引数の情報）を参照し、制御用計算機１０００のＩＯ状態を監視するか否かを判定する。
【０３８７】
そして、ステップ１５００５の処理で、制御用計算機１０００のＩＯ状態を監視すると判定された場合、ステップ９００８の処理を実行後、ステップ１５００６の処理に進む。一方、ステップ１５００５の処理で、制御用計算機１０００のＩＯ状態を監視しないと判定された場合、制御用計算機１０００にその制御用計算機１０００のＩＯ状態を監視させないので、リモートＩＯ管理テーブル２１２８に含まれるエントリが更新されることはない。よって、演算用計算機１００１は、エントリ更新フラグ７０５０にＯＮが登録されている場合でも、エントリ更新指令を含むリモートＩＯメッセージを作成せずに、ステップ１５００６の処理に進む。
【０３８８】
演算用計算機１００１は、制御用計算機１０００のＩＯ状態を監視するか否かを判定する（１５００６）。
【０３８９】
ステップ１５００６の処理で、制御用計算機１０００のＩＯ状態を監視すると判定された場合、演算用計算機１００１は、制御用計算機１０００にＩＯ状態を監視させるので、リモートＩＯメッセージを制御用計算機１０００に送信するために、ステップ９００９の処理に進む。
【０３９０】
一方、ステップ１５００６の処理で、制御用計算機１０００のＩＯ状態を監視しないと判定された場合、演算用計算機１００１は、制御用計算機１０００にＩＯ状態を監視させないので、リモートＩＯメッセージを制御用計算機１０００に送信する必要がない。よって、演算用計算機１００１は、リモートＩＯメッセージを送信する処理を終了する（９０１１）。
【０３９１】
図１８は、本発明の第３実施形態のＩＯ管理プログラム２１２５が演算用計算機１００１のメモリ１０３０の電力を制御する処理のフローチャートである。なお、第１実施形態と同じ処理については、同じ符号を付し、説明を省略する。
【０３９２】
なお、本実施形態では、演算用計算機１００１は、制御用計算機１０００にＩＯ状態を監視させるのみで、制御用計算機１０００の二次記憶装置１１６０等にデータを読み書きするリモートＩＯ処理を制御用計算機１０００に実行させない。演算用計算機１００１は、受信ＩＯデータ及び送信ＩＯデータを送受信しない。よって、演算用計算機１００１は、演算用計算機１００１のメモリ１０３０の記憶領域のうち、受信バッファに割り当てられた記憶領域及び送信バッファに割り当てられた記憶領域を考慮せず、ユーザ演算プログラム２０１０に割り当てられた記憶領域が使用中か否かを考慮して、メモリ１０３０の電力を制御する。
【０３９３】
ステップ１０００１の処理で、電力制御フラグが有効であると判定された場合、演算用計算機１００１は、メモリゾーン‐電力ランクゾーン状態管理テーブル２１２７に登録された電力ランクゾーンの全てのエントリに対して、ステップ１００１０〜１００１４の処理を繰り返す（１０００９）。
【０３９４】
まず、演算用計算機１００１は、メモリゾーン‐電力ランクゾーン状態管理テーブル２１２７に登録された電力ランクゾーンのエントリから、一つの電力ランクゾーンのエントリを選択する。
【０３９５】
そして、演算用計算機１００１は、選択されたエントリの電力ランクゾーン６０２０に登録された識別子によって識別される電力ランクゾーンの全てのメモリページフレーム数から、その電力ランクゾーンのメモリページフレームにおいてユーザ演算プログラム２０１０に割り当てられたメモリページフレーム数及び選択された電力ランクゾーンのエントリに含まれる未使用メモリページフレーム数６０５０に登録された値を減算して、差分値を計算する（１６０００）。
【０３９６】
そして、演算用計算機１００１は、ステップ１００１０の処理で計算された差分値が０か否かを判定する（１００１１）。
【０３９７】
ステップ１００１１の処理で、差分値が０と判定された場合、選択された電力ランクゾーンのエントリに含まれる電力ランクゾーン６０２０に登録された識別子によって識別される電力ランクゾーンのメモリページフレームのうち、ユーザ演算プログラム２０１０に割り当てられたメモリページフレーム以外のメモリページフレームは使用されていない。
【０３９８】
ここで、ユーザ演算プログラム２０１０は、演算用計算機１００１が制御用計算機１０００にＩＯ状態を監視させている間、実行されない。
【０３９９】
よって、ステップ１００１１の処理で、差分値が０と判定された場合、その電力ランクゾーンの全てのメモリページフレームは、演算用計算機１００１が制御用計算機１０００にＩＯ状態を監視させている間、使用されないので、演算用計算機１００１は、その電力ランクゾーンの電力状態を、不活性状態に切り替え（１００１２）、ステップ１００１５の処理に進む。
【０４００】
ステップ１００１１の処理で、差分値が０でないと判定された場合、その電力ランクゾーンのメモリページフレームは、演算用計算機１００１が制御用計算機１０００にＩＯ状態を監視させている間、使用するメモリページフレームを含む場合があるので、その電力ランクゾーンの電力状態を不活性状態に切り替えないで、ステップ１００１５の処理に進む。
【０４０１】
演算用計算機１００１は、メモリゾーン‐電力ランクゾーン状態管理テーブル２１２７に登録された全ての電力ランクゾーンのエントリに、ステップ１６０００、１００１１〜１０１２、及び１００１５の処理が実行されると（１００１５）、演算用計算機１００１のメモリ１０３０の電力を制御する処理を終了する（１００２４）。
【０４０２】
図１９は、本発明の第３実施形態のＩＯ管理プログラム２０３２によって実行されるＩＯ処理のフローチャートである。なお、第１実施形態と同じ処理については、同じ符号を付し、説明を省略する。
【０４０３】
なお、図１９に示すＩＯ管理プログラム２０３２によって実行されるＩＯ処理は、制御用計算機１０００がリモートＩＯメッセージを受信後に実行される。よって、演算用計算機１００１のみのＩＯ状態を監視する場合、演算用計算機１００１は、リモートＩＯメッセージを制御用計算機１０００に送信しないので、図１９に示すＩＯ管理プログラム２０３２によって実行されるＩＯ処理は実行されない。
【０４０４】
制御用計算機１０００は、ステップ１１００１の処理を実行後、実行時条件情報を参照し、多重ＩＯイベント監視ファンクションを実行する（１７０００）。つまり。制御用計算機１０００は、その制御用計算機１０００のＩＯ状態を監視する。
【０４０５】
そして、制御用計算機１０００は、ＩＯイベントがｒｅａｄｙ状態になった場合、当該ｒｅａｄｙ状態になったＩＯイベントが制御用計算機１０００のＩＯイベントであるか否かを判定する（１７００２）。
【０４０６】
ステップ１７００２の処理で、制御用計算機１０００のＩＯイベントがｒｅａｄｙ状態でないと判定された場合、つまり、演算用計算機１００１のＩＯイベントがｒｅａｄｙ状態になった場合、ステップ１７００４の処理に進む。
【０４０７】
なお、この場合には、例えば、演算用計算機１００１が、その演算用計算機１００１のＩＯ状態を監視し、演算用計算機１００１において、ｒｅａｄｙ状態になったＩＯイベントが存在し、その旨が制御用計算機１０００に通知された場合等がある。
【０４０８】
一方、ステップ１７００２の処理で、ｒｅａｄｙ状態になった制御用計算機１０００のＩＯイベントが存在すると判定された場合、制御用計算機１０００は、多重ＩＯイベント監視ファンクションの実行を終了し、ノード間通知を使用して、ｒｅａｄｙ状態になったＩＯイベントが存在する旨を演算用計算機１００１に送信し（１７００３）。ステップ１７００４の処理に進む。
【０４０９】
制御用計算機１０００は、多重ＩＯイベント監視ファンクションが実行された結果を含むリモートＩＯファンクション完了メッセージを、演算用計算機１００１に送信する（１７００４）。なお、多重ＩＯイベント監視ファンクションが実行された結果には、ｒｅａｄｙ状態になったＩＯイベントが存在する場合には、そのＩＯイベントの識別子が含まれる。
【０４１０】
そして、制御用計算機１０００は、ステップ１７００４の処理を実行後、ステップ１１００６の処理を実行し、ステップ１１０１０の処理以降の処理を実行する。
【０４１１】
図２０は、本発明の第３実施形態の演算用計算機１００１に記憶されるＩＯ管理プログラム２１２５によって実行されるリモートＩＯ処理のフローチャートである。
【０４１２】
演算用計算機１００１は、図１８に示す演算用計算機１００１のメモリ１０３０の電力を制御する処理が実行された後に、多重ＩＯイベント監視ファンクションの識別子及び実行時条件情報が指定されて、実行される（１８０００）。なお、実行時条件情報には、ＩＯファンクションの引数情報が含まれる。
【０４１３】
まず、演算用計算機１００１は、その演算用計算機１００１のＩＯ状態を監視するか否かを判定する（１８００１）。演算用計算機１００１は、例えば、多重ＩＯイベント監視ファンクションの識別子、実行時条件情報（例えば、引数情報等）を参照し、その演算用計算機１００１のＩＯ状態を監視するか否かを判定する。
【０４１４】
ステップ１８００１の処理で、演算用計算機１００１は、その演算用計算機１００１のＩＯ状態を監視しないと判定された場合、リモートＩＯ処理を終了する。
【０４１５】
一方、ステップ１８００１の処理で、演算用計算機１００１は、その演算用計算機１００１のＩＯ状態を監視すると判定された場合、実行時条件情報に基づいて、多重ＩＯイベント監視ファンクションを実行する（１８００２）。つまり、演算用計算機１００１は、その演算用計算機１００１のＩＯ状態を監視する。
【０４１６】
そして、演算用計算機１００１は、演算用計算機１００１にＩＯイベントにおいて、ｒｅａｄｙ状態になったＩＯイベントが存在するか否かを判定する（１８００３）。
【０４１７】
ステップ１８００３の処理で、演算用計算機１００１にＩＯイベントにおいて、ｒｅａｄｙ状態になったＩＯイベントが存在しないと判定された場合、ステップ１８００５の処理に進む。
【０４１８】
一方、ステップ１８００３の処理で、ｒｅａｄｙ状態になったＩＯイベントが存在すると判定された場合、演算用計算機１００１は、多重ＩＯイベント監視ファンクションの実行を終了し、ノード間通知を使用して、ｒｅａｄｙ状態になったＩＯイベントが存在する旨を制御用計算機１０００に送信し（１８００４）、ステップ１８００５の処理に進む。
【０４１９】
次に、演算用計算機１００１は、多重ＩＯイベント監視処理によって監視されるＩＯ状態が、演算用計算機１００１のみのＩＯ状態であるか否かを判定する（１８００５）。なお、演算用計算機１００１は、多重ＩＯイベント監視ファンクションの識別子及び実行時条件情報を参照し、多重ＩＯイベント監視処理によって監視されるＩＯ状態が、演算用計算機１００１のみのＩＯ状態であるか否かを判定する。
【０４２０】
ステップ１８００５の処理で、多重ＩＯイベント監視処理によって監視されるＩＯ状態が、演算用計算機１００１のみのＩＯ状態でないと判定された場合、演算用計算機１００１は、制御用計算機１０００から送信されるリモートＩＯ処理管理メッセージに含まれるＩＯファンクション実行プロファイルに基づいて、リモートＩＯ管理テーブル２１２８に含まれるエントリを更新する。よって、演算用計算機１００１は、ステップ１１０１０〜ステップ１８００６の処理を実行せず、リモートＩＯ処理を終了する（１８００７）。
【０４２１】
一方、ステップ１８００５の処理で、多重ＩＯイベント監視処理によって監視されるＩＯ状態が、演算用計算機１００１のみのＩＯ状態であると判定された場合、演算用計算機１００１は、制御用計算機１０００からリモートＩＯ処理管理メッセージは送信されない。よって、作成されたリモートＩＯメッセージにエントリ更新指令が含まれている場合、演算用計算機１００１は、リモートＩＯ管理テーブル２１２８に含まれるエントリを更新するために必要なＩＯファンクション実行プロファイルを作成するために、ステップ１１０１０の処理以降の処理を実行する。
【０４２２】
まず、演算用計算機１００１は、作成されたリモートＩＯメッセージにエントリ更新指令が含まれているか否かを判定する（１１０１０）。
【０４２３】
ステップ１１０１０の処理で、作成されたリモートＩＯメッセージにエントリ更新指令が含まれていないと判定された場合、演算用計算機１００１は、リモートＩＯ管理テーブル２１２８に含まれるエントリを更新しないので、ＩＯファンクション実行プロファイル情報は必要ない。よって、ステップ１１０１１の処理を実行せず、ステップ１８００６の処理に進む。
【０４２４】
一方、ステップ１１０１０の処理で、作成されたリモートＩＯメッセージエントリ更新指令が含まれていると判定された場合、演算用計算機１００１は、リモートＩＯ管理テーブル２１２８に含まれるエントリを更新するために、ＩＯファンクション実行情報を記憶し（１１０１１）、ステップ１８００６処理に進む。
【０４２５】
そして、演算用計算機１００１は、リモートＩＯ処理が終了した後に、図２１に示すリモートＩＯ処理完了処理が呼び出されるように、ＩＯ管理プログラム２１２５を設定し（１８００６）、リモートＩＯ処理を終了する。
【０４２６】
図２１は、本発明の第３実施形態のＩＯ管理プログラム２１２５によって実行されるＩＯ処理完了処理のフローチャートである。なお、第１実施形態と同じ処理については、同じ符号を付し、説明を省略する。
【０４２７】
演算用計算機１００１がリモートＩＯ完了メッセージを受信した場合、又はステップ１８００７の処理でリモートＩＯ処理が終了した後に、リモートＩＯ完了処理が実行されるように設定された場合、リモートＩＯ処理を完了させる処理は、演算用計算機１００１によって実行される（１２０００）。
【０４２８】
次に、演算用計算機１００１は、ユーザ演算プログラム２０１０に割り当てられたメモリページフレームを含む電力ランクゾーンの電力状態を活性状態に切り替える（１２００５）。
【０４２９】
そして、演算用計算機１００１は、制御用計算機１０００に、その制御用計算機１０００のＩＯ状態を監視させたか否かを判定する（１９０００）。具体的には、演算用計算機１００１は、多重ＩＯイベント監視ファンクションの識別子及び実行時条件情報を参照し、制御用計算機１０００に、その制御用計算機１０００のＩＯ状態を監視させたか否かを判定する。
【０４３０】
ステップ１９０００の処理で、演算用計算機１００１は、制御用計算機１０００に、その制御用計算機１０００のＩＯ状態を監視させたと判定された場合、制御用計算機１０００からリモートＩＯ完了メッセージが送信されるため、演算用計算機１００１は、リモートＩＯ完了メッセージを受信し（１２００６）、ステップ１２００７の処理に進む。
【０４３１】
一方、ステップ１９０００の処理で、演算用計算機１００１は、制御用計算機１０００に、その制御用計算機１０００のＩＯ状態を監視させたと判定された場合、ステップ１２００７の処理に進む。
【０４３２】
演算用計算機１００１は、エントリ更新フラグが有効であるか否かを判定する（１２００７）。
【０４３３】
ステップ１２００７の処理で、エントリ更新フラグが有効であると判定された場合、演算用計算機１００１は、ＩＯファンクション実行プロファイルに基づいて、リモートＩＯ管理テーブル２１２８に含まれるエントリを更新し（１２００８）、ステップ１９００１の処理に進む。
【０４３４】
一方、ステップ１２００７の処理で、エントリ更新フラグが有効でないと判定された場合、ステップ１９００１の処理に進む。
【０４３５】
演算用計算機１００１は、リモート多重ＩＯファンクションの実行結果をまとめる（１９００１）。リモート多重ＩＯファンクションの実行結果は、具体的には、ｒｅａｄｙ状態になったＩＯイベントの識別子等である。
【０４３６】
ステップ１９００１の処理では、演算用計算機１００１は、例えば、制御用計算機１０００によって実行されたリモート多重ＩＯファンクションの実行結果と演算用計算機１００１によって実行されたリモート多重ＩＯファンクションの実行結果とをまとめる。
【０４３７】
そして、演算用計算機１００１は、ステップ１９００１の処理を実行した後、リモートＩＯ処理完了処理を終了し（１２００９）、ユーザ演算プログラム２０１０のリモートプロセスとしての実行を再開する。また、ユーザ演算プログラム２０１０は、ステップ１９００１の処理でまとめられたリモート多重ＩＯ監視ファンクションの実行結果を参照できる。
【０４３８】
これによって、演算用計算機１００１によって、リモートプロセスとしてユーザ演算プログラム２０１０を実行する場合、演算用計算機１００１がＩＯ状態を監視する計算機を考慮して、演算用計算機１００１のメモリ１０３０の電力を制御するので、演算用計算機１００１のメモリ１０３０が消費する電力を低減できる。
【０４３９】
また、演算用計算機１００１が制御用計算機１０００にＩＯ状態を監視させている間、又は演算用計算機１００１がその演算用計算機１００１のＩＯ状態を監視している間、演算用計算機１００１によって実行されないユーザ演算プログラム２０１０に割り当てられたメモリページフレームを含むメモリランク１０３１の電力状態を不活性状態に切り替える。よって、演算用計算機１００１のメモリ１０３０が消費する電力を低減できる。
【０４４０】
さらに、少なくとも一つのＩＯイベントのＩＯ状態がｒｅａｄｙ状態になった場合、演算用計算機１００１は、ユーザ演算プログラム２０１０に割り当てられたメモリページフレームを含むメモリランク１０３１の電力状態を先行して活性状態に切り替える。よって、メモリランク１０３１の電力状態が活性状態に切り替えられる場合に発生するレイテンシを隠蔽できる。したがって、ＣＰＵ１０１０がメモリ１０３０にアクセスする性能に影響を与えずにメモリ１０３０が消費する電力を低減できる。
【０４４１】
また、ユーザ演算プログラム２０１０が演算用計算機１００１によって実行される場合、外乱を排除できる。
【０４４２】
本発明の実施形態は、特に、ユーザ演算プログラム２０１０が大量のメモリ１０３０の記憶領域を使用する場合及びＩＯ処理が実行されるＩＯデータの容量が大きい場合（例えば、科学技術計算プログラムのＩＯ処理等）、メモリ１０３０が消費する電力をより効果的に低減できる。
【図面の簡単な説明】
【０４４３】
【図１】本発明の第１実施形態における計算機システムの構成を示す図である
【図２】本発明の第１の実施の形態の制御用計算機ノードソフトウェア及び演算用計算機ノードソフトウェアの構成を示す図である
【図３】本発明の第１実施形態のメモリ・アドレッシング・モード・テーブルの構成を示す図である
【図４】本発明の第１実施形態の電力ランクゾーン−メモリランク対応管理テーブルの構成を示す図である
【図５】本発明の第１実施形態のメモリ電力モードテーブルの構成を示す図である
【図６】本発明の第１実施形態のメモリゾーン−電力ランクゾーン状態管理テーブルの構成を示す図である
【図７】本発明の第１実施形態のリモートＩＯ管理テーブルの構成を示す図である
【図８】本発明の第１実施形態のメモリ管理初期化プログラムのフローチャートである
【図９】本発明の第１実施形態の演算用計算機ノードに記憶されるＩＯ管理プログラムにおけるリモートＩＯメッセージ送信処理のフローチャートである
【図１０】本発明の第１実施形態の演算用計算機ノードに記憶されるＩＯ管理プログラムにおける電力制御を実行する処理のフローチャートである
【図１１】本発明の第１実施形態の制御用計算機ノードに記憶されるＩＯ管理プログラムにおけるリモートＩＯ処理を実行する処理のフローチャートである
【図１２】本発明の第１実施形態の演算用計算機ノード記憶されるＩＯ管理プログラムにおけるリモートＩＯ完了処理を実行する処理のフローチャートである
【図１３】本発明の第１実施形態の計算機システムのシーケンス図である。
【図１４】本発明の第１実施形態のメモリの電力状態の遷移を説明する図である。
【図１５】本発明の第２の実施形態の演算用計算機ノードに記憶されるＩＯ管理プログラムにおける電力制御を実行する処理のフローチャートである
【図１６】本発明の第２の実施形態の演算用計算機ノード記憶されるＩＯ管理プログラムにおけるリモートＩＯ完了処理を実行する処理のフローチャートである
【図１７】本発明の第３の実施形態の演算用計算機ノードに記憶されるＩＯ管理プログラムにおけるリモートＩＯメッセージ送信を実行する処理のフローチャートである
【図１８】本発明の第３の実施形態の演算用計算機ノードに記憶されるＩＯ管理プログラムにおける電力制御処理を実行する処理のフローチャートである
【図１９】本発明の第３の実施形態の制御用計算機ノードに記憶されるＩＯ管理プログラムにおけるリモートＩＯ処理を実行する処理のフローチャートである
【図２０】本発明の第３の実施形態の演算用計算機ノードに記憶されるＩＯ管理プログラムにおけるリモートＩＯ処理を実行する処理のフローチャート
【図２１】本発明の第３実施形態の演算計算機に記憶されるＩＯ管理プログラムによって実行されるＩＯ処理完了処理のフローチャートである。
【符号の説明】
【０４４４】
１０００…制御用計算機
１０１０…ＣＰＵ
１０２０…メモリコントローラ
１０３０…メモリ
１０３１…メモリランク
１０７０…チャネル
１０９０…システムＲＯＭ
１１００…ビデオアダプタ
１１１０…ネットワークインタフェース、
１１２０…二次記憶装置インタフェース
１１３０…入力装置インタフェース
１１４０…高速入出力装置
１１５０…システムバス
１１６０…二次記憶装置
１１７０…キーボード
１１８０…マウス
１１９０…ネットワーク
１２００…ディスプレイ
１２１０…ネットワーク
１２２０…計算機
【図１】
2008165318.tif 000003
【図２】
2008165318.tif 000004
【図３】
2008165318.tif 000005
【図４】
2008165318.tif 000006
【図５】
2008165318.tif 000007
【図６】
2008165318.tif 000008
【図７】
2008165318.tif 000009
【図８】
2008165318.tif 000010
【図９】
2008165318.tif 000011
【図１０】
2008165318.tif 000012
【図１１】
2008165318.tif 000013
【図１２】
2008165318.tif 000014
【図１３】
2008165318.tif 000015
【図１４】
2008165318.tif 000016
【図１５】
2008165318.tif 000017
【図１６】
2008165318.tif 000018
【図１７】
2008165318.tif 000019
【図１８】
2008165318.tif 000020
【図１９】
2008165318.tif 000021
【図２０】
2008165318.tif 000022
【図２１】
2008165318.tif 000023