(57)【要約】【課題】周辺装置と情報処理装置の間の入出力を制御する入出力処理モジュールの切り替えをソフトウェアに意識させることなく行なう。【解決手段】本発明による情報処理装置１は、ソフトウェアを実行する演算処理モジュール１００と、ＩＯカード６１０〜６３０を介して周辺装置３と演算処理モジュール１との間の入出力処理を制御する入出力処理モジュール３００と、入出力処理モジュール３００の予備装置である予備入出力処理モジュール４００とを具備する。入出力処理モジュール３００は、演算処理モジュール１００からの入出力要求に応じたＩＯカード６１０〜６３０に対する入出力処理開始指示を、所定の期間待機し、この所定の期間において、予備入出力処理モジュール４００に対し、入出力処理を実行するための制御情報の少なくとも一部を転送する。【選択図】図１
2010244396.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアを実行する演算処理モジュールと、
ＩＯカードを介して周辺装置と前記演算処理モジュールとの間の入出力処理を制御する入出力処理モジュールと、
前記入出力処理モジュールの予備装置である予備入出力処理モジュールと、
を具備し、
前記入出力処理モジュールは、前記演算処理モジュールからの入出力要求に応じた前記ＩＯカードに対する入出力処理開始指示を、所定の期間待機し、前記所定の期間において、前記予備入出力処理モジュールに対し、入出力処理を実行するための制御情報の少なくとも一部を転送する
情報処理装置。
【請求項２】
請求項１に記載の情報処理装置において、
入出力処理モジュールの切り替えを指示する診断処理モジュールを更に具備し、
前記入出力処理モジュールは、前記診断処理モジュールからの指示に応じて前記制御情報の転送を開始する
情報処理装置。
【請求項３】
請求項２に記載の情報処理装置において、
前記演算処理モジュールは、プロセッサＩＤテーブルを参照して、入出力要求先を決定し、
前記制御情報の全てが前記予備入出力処理モジュールに転送された後、前記診断処理モジュールは、前記プロセッサＩＤテーブルにおける前記入出力処理モジュールの識別子と前記予備入出力処理モジュールの識別子と入れ替える
情報処理装置。
【請求項４】
請求項２又は３に記載の情報処理装置において、
前記制御情報の全てが前記予備入出力処理モジュールに転送された後、前記診断処理モジュールは、前記ＩＯカードを前記予備入出力処理モジュールに組み込む
情報処理装置。
【請求項５】
請求項１から４のいずれか１項に記載の情報処理装置において、
前記入出力処理モジュールは、ソフトウェアにおいて予め設定された入出力タイムアウト時間と、現在までの最大入出力実行時間とに応じた遅延時間を、前記所定の期間として設定する
情報処理装置。
【請求項６】
請求項５に記載の情報処理装置において、
前記入出力処理モジュールは、前記入出力タイムアウト時間と前記最大入出力実行時間との差を、前記所定の期間として設定する
情報処理装置。
【請求項７】
請求項５に記載の情報処理装置において、
前記入出力処理モジュールは、前記入出力タイムアウト時間と前記最大入出力時間との差が所定の遅延時間よりも長い場合、前記所定の遅延時間を前記所定の期間として設定する
情報処理装置。
【請求項８】
ソフトウェアを実行する演算処理モジュールと、
ＩＯカードを介して周辺装置と前記演算処理モジュールとの間の入出力処理を制御する入出力処理モジュールと、
前記入出力処理モジュールの予備装置である予備入出力処理モジュールと、
を具備する情報処理装置において実行される入出力処理モジュールの切替方法において、
前記入出力処理モジュールが、前記演算処理モジュールからの入出力要求に応じた前記ＩＯカードに対する入出力処理開始指示を、所定の期間待機するステップと、
前記入出力処理モジュールが、前記所定の期間において、前記予備入出力処理モジュールに対し、入出力処理を実行するための制御情報の少なくとも一部を転送するステップと
を具備する
入出力処理モジュールの切替方法。
【請求項９】
請求項８に記載の入出力処理モジュールの切替方法において、
前記制御情報を転送するステップは、
前記入出力処理モジュールは、診断処理モジュールからの指示に応じて前記制御情報の転送を開始するステップを備える
入出力処理モジュールの切替方法。
【請求項１０】
請求項９に記載の入出力処理モジュールの切替方法において、
前記制御情報の全てが前記予備入出力処理モジュールに転送された後、前記診断処理モジュールが、プロセッサＩＤテーブルにおける前記入出力処理モジュールの識別子と前記予備入出力処理モジュールの識別子と入れ替えるステップと、
前記演算処理モジュールが、前記プロセッサＩＤテーブルを参照して、入出力要求先を決定するステップと、
を更に具備する
入出力処理モジュールの切替方法。
【請求項１１】
請求項９又は１０に記載の入出力処理モジュールの切替方法において、
前記制御情報の全てが前記予備入出力処理モジュールに転送された後、前記診断処理モジュールが、前記ＩＯカードを前記予備入出力処理モジュールに組み込むステップを更に具備する
入出力処理モジュールの切替方法。
【請求項１２】
請求項８から１１のいずれか１項に記載の入出力処理モジュールの切替方法において、
前記入出力処理モジュールが、ソフトウェアにおいて予め設定された入出力タイムアウト時間と、現在までの最大入出力実行時間とに応じた遅延時間を、前記所定の期間として設定するステップを更に具備する
入出力処理モジュールの切替方法。
【請求項１３】
請求項１２に記載の入出力処理モジュールの切替方法において、
前記所定の期間を設定するステップは、前記入出力処理モジュールが、前記入出力タイムアウト時間と前記最大入出力実行時間との差を、前記所定の期間として設定するステップを備える
入出力処理モジュールの切替方法。
【請求項１４】
請求項１２に記載の入出力処理モジュールの切替方法において、
前記所定の期間を設定するステップは、前記入出力処理モジュールが、前記入出力タイムアウト時間と前記最大入出力時間との差が所定の遅延時間よりも長い場合、前記所定の遅延時間を前記所定の期間として設定するステップを備える
入出力処理モジュールの切替方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の入出力処理モジュールを有する情報処理装置、及び入出力処理モジュールの切替方法に関する。
【背景技術】
【０００２】
挿抜可能な複数の処理モジュールが搭載された情報処理装置（例示：コンピュータ装置、ブレードサーバ）は、現在のＩＴ社会の中で重要な役割を担っている。このような情報処理装置に障害が発生した場合、その利用者に対して悪影響を与えることが考えられる。このため、通常、情報処理装置は、処理モジュールで障害が発生した場合に予備の処理モジュールに切り替わる機能を持っている。
【０００３】
例えば、障害が発生した入出力処理モジュールを予備の入出力処理モジュールに切り替える情報処理装置が、特開２００６−２７７２５０に記載されている（特許文献１参照）。特許文献１に記載の情報処理装置は、診断処理装置と、外部の周辺装置とのデータの入出力を制御する入出力処理装置とを備える。診断処理装置は、入出力装置の障害を検出すると、チャネルカードを制御する入出力装置を、当該故障入出力装置から他の入出力装置に切り替える。この際、診断処理装置は、障害発生を演算処理装置に報告する。
【０００４】
あるいは、システムの稼動中に入出力制御装置の交換を行なう方法が、特開平８−３２８９８９に記載されている（特許文献２参照）。特許文献２に記載の方法では、入出力装置側からの交換要求に応じて入出力装置の交換が行なわれる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−２７７２５０
【特許文献２】特開平８−３２８９８９
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１に記載の方法では、障害検出に応じて入出力装置の切り替えが行なわれるため、入出力装置の障害時にしか他の入出力装置に切り替えることができない。このため、障害発生から入出力装置の交換までの間、入出力処理を行なうことができない機能停止期間が生じてしまう。例えば、保守のために入出力装置を交換する場合、入出力装置を情報処理装置から取り外す必要があり、障害発生時と同様に機能停止期間が生じてしまう。
【０００７】
又、特許文献１に記載の方法では、演算処理装置上で動作するソフトウェアに障害を報告している。このため、ソフトウェアは入出力装置の障害処理、例えば、入出力装置に固有の初期設定機能（ＩＯカードのＩＰアドレス等）や、入出力処理の再試行機能などを持つ必要がある。すなわち、ソフトウェアが入出力装置の切り離しや、組み込みに対応している必要があり、未対応な場合はその目的を果たせない。
【０００８】
一方、特許文献２に記載のシステムは、周辺装置に対し複数の入出力経路（入出力装置）を有し、その中で入出力要求先となる入出力装置を変更することで、障害を回避している。しかし、周辺装置に対し１つの入出力経路しか有していない場合、使用する入出力装置を変更する必要があるが、特許文献２には記載されていない。又、入出力経路の交換（入出力要求先の変更）は、ソフトウェア側で行なわれるため、ソフトウェアに障害対処の機能を組み込む必要がある。
【０００９】
従って、本発明の目的は、周辺装置との間の入出力を制御する入出力処理モジュールの切り替えをソフトウェアに意識させることなく行なう情報処理装置を提供することにある。
【００１０】
又、本発明の他の目的は、ソフトウェアに障害対処のための機能を追加することなく、入出力処理モジュールの障害を回避可能な情報処理装置を提供することにある。
【課題を解決するための手段】
【００１１】
以下に、［発明を実施するための形態］で使用される番号・符号を括弧付きで用いて、［課題を解決するための手段］を説明する。この番号・符号は、［特許請求の範囲］の記載と［発明を実施するための形態］の記載との対応関係を明らかにするために付加されたものであるが、［特許請求の範囲］に記載されている発明の技術的範囲の解釈に用いてはならない。
【００１２】
本発明による情報処理装置（１）は、ソフトウェアを実行する演算処理モジュール（１００）と、ＩＯカード（６１０〜６３０）を介して周辺装置（３）と演算処理モジュール（１）との間の入出力処理を制御する入出力処理モジュール（３００）と、入出力処理モジュール（３００）の予備装置である予備入出力処理モジュール（４００）とを具備する。
【００１３】
入出力処理モジュール（３００）は、演算処理モジュール（１００）からの入出力要求に応じたＩＯカード（６１０〜６３０）に対する入出力処理開始指示を、所定の期間待機し、この所定の期間において、予備入出力処理モジュール（４００）に対し、入出力処理を実行するための制御情報の少なくとも一部を転送する。
【００１４】
本発明による入出力処理モジュールの切替方法は、ソフトウェアを実行する演算処理モジュール（１００）と、ＩＯカード（６１０〜６３０）を介して周辺装置（３）と演算処理モジュール（１）との間の入出力処理を制御する入出力処理モジュール（３００）と、入出力処理モジュール（３００）の予備装置である予備入出力処理モジュール（４００）とを具備する情報処理装置（１）において実行される。
【００１５】
詳細には、入出力処理モジュール（３００）が、演算処理モジュール（１００）からの入出力要求に応じたＩＯカード（６１０〜６３０）に対する入出力処理開始指示を、所定の期間待機するステップと、入出力処理モジュール（３００）が、この所定の期間において、予備入出力処理モジュール（４００）に対し、入出力処理を実行するための制御情報の少なくとも一部を転送するステップとを具備する。
【発明の効果】
【００１６】
従って、本発明による情報処理装置によれば、周辺装置との間の入出力を制御する入出力処理モジュールの切り替えをソフトウェアに意識させることなく行なうことができる。
【００１７】
又、ソフトウェアに障害対処のための機能を追加することなく、入出力処理中に入出力処理モジュールを予備の入出力処理モジュールに切り替えることができる。
【図面の簡単な説明】
【００１８】
【図１】図１は、本発明による情報処理装置の実施の形態における構成を示すブロック図である。
【図２】図２は、本発明による演算処理モジュールの実施の形態における構成を示すブロック図である。
【図３】図３は、本発明による診断処理モジュールの実施の形態における構成を示すブロック図である。
【図４】図４は、本発明による入出力処理モジュールの実施の形態における構成を示すブロック図である。
【図５】図５は、本発明による予備入出力処理モジュールの実施の形態における構成を示すブロック図である。
【図６】図６は、本発明によるＩＯモジュールの実施の形態における構成を示すブロック図である。
【図７】図７は、本発明による演算処理部の実施の形態における構成を示すブロック図である。
【図８】図８は、本発明による診断処理部の実施の形態における構成を示すブロック図である。
【図９】図９は、本発明による入出力処理部の実施の形態における構成を示すブロック図である。
【図１０】図１０は、本発明による情報処理装置におけるメモリ空間の一例を示す図である。
【図１１】図１１は、本発明に係る入出力要求キューの構造の一例を示す図である。
【図１２】図１２は、本発明に係る入出力終了キューの構造に一例を示す図である。
【図１３】図１３は、本発明に係るプロセッサＩＤテーブルの構造の一例を示す図である。
【図１４】図１４は、本発明に係るプロセッサ間通信領域の構造の一例を示す図である。
【図１５】図１５は、本発明に係る入出力処理モジュールファームウェア領域におけるデータ領域の構造の一例を示す図である。
【図１６】図１６は、本発明による入出力処理モジュールにおけるＩＯＰディスパッチャーの動作の一例を示すフローチャートである。
【図１７】図１７は、本発明による入出力処理モジュールにおけるタイマ処理の一例を示すフローチャートである。
【図１８】図１８は、本発明による入出力処理モジュールにおける入出力開始処理の一例を示すフローチャートである。
【図１９】図１９は、本発明による入出力処理モジュールにおける入出力終了処理の一例を示すフローチャートである。
【図２０】図２０は、本発明による入出力処理モジュールにおける移動開始処理の一例を示すフローチャートである。
【図２１】図２１は、本発明による入出力処理モジュールにおける制御情報送信処理の一例を示すフローチャートである。
【図２２】図２２は、本発明による予備入出力処理モジュールにおける制御情報受信処理の一例を示すフローチャートである。
【図２３】図２３は、本発明による予備入出力処理モジュールにおける予備起動処理の一例を示すフローチャートである。
【図２４】図２４は、本発明による予備入出力処理モジュールにおける予備組込処理の一例を示すフローチャートである。
【図２５】図２５は、本発明による演算処理モジュールにおける入出力要求処理の一例を示すフローチャートである。
【図２６】図２６は、本発明による演算処理モジュールにおける入出力終了処理の一例を示すフローチャートである。
【図２７】図２７は、本発明による診断処理モジュールにおける入出力処理モジュール移動処理の一例を示すフローチャートである。
【図２８】図２８は、情報処理装置１における、入出力動作、入出力処理モジュールの移動動作、及び入出力処理モジュールの移動後における入出力動作を示すシーケンス図である。
【発明を実施するための形態】
【００１９】
以下、添付図面を参照して、本発明による情報処理装置の実施の形態を詳細に説明する。以下の実施の形態では、挿抜可能な複数の処理モジュールを有するコンピュータ装置を一例に、本発明による情報処理装置を説明する。
【００２０】
（概要）
本発明による情報処理装置１には、入出力処理を妨げない所定の待機時間が設定され、この時間を、入出力処理モジュールの変更（移動）処理に利用することができる。詳細には、本発明では、入出力処理モジュールにおいてソフトウェアからの入出力要求を待機させ、その間に入出力処理に必要な制御情報（例えばＩＯカードを制御するための情報）を、切り替え先の入出力処理モジュールに転送する。これにより、入出力処理中においても入出力処理モジュールの切り替え処理を継続することができ、入出力処理モジュールの切り替えを短時間に実行することができる。
【００２１】
入出力処理モジュールの変更の際、診断処理モジュール２００による制御に従い、入出力処理モジュール間における制御情報の転送や、ＩＯカードの初期設定等が行なわれる。又、診断処理モジュール２００によって、入出力要求先のＩＤが書き替えられる。このため、ソフトウェアは、入出力処理モジュールの変更を意識することなく入出力処理を実行することができる。すなわち、本発明によれば、ソフトウェアにおける入出力処理を停止させることなく障害対処や保守のために入出力処理モジュールを交換することができる。又、ソフトウェアは入出力処理モジュールの切り替え動作に関与しないため、障害処理やモジュール交換のための機能を追加する必要がない。
【００２２】
（構成）
図１から図１５を参照して、本発明による情報処理装置１の実施の形態における構成の詳細を説明する。図１は、本発明による情報処理装置１の実施の形態における構成を示すブロック図である。
【００２３】
本発明による情報処理装置１は、コンピュータやサーバーに例示され、本発明によるファームウェアを実行することで後述する機能を実現する。図１を参照して、情報処理装置１は、機能毎にモジュールに分割されており、演算処理モジュール１００、診断処理モジュール２００、入出力処理モジュール３００、４００、ＩＯモジュール５００を具備する。各モジュールは、バス７００によって接続され、情報処理装置１に対し挿抜可能に接続されている。又、ＩＯモジュール５００は複数の挿抜可能なスロットを持っており、ＩＯカード６００〜６３０を実装することにより周辺処理装置３等を接続することができる。ここでは、ＩＯカード６００を介して保守端末２が情報処理装置１に接続され、ＩＯカード６３０を介して周辺処理装置３が情報処理装置１に接続される。保守端末２は、情報処理装置１は装置全体を制御し、保守するためのコンピュータ装置である。
【００２４】
入出力処理モジュール３００、４００は同じ構成であるが、本実施の形態では、初期設定として、入出力処理を行なうモジュールとして入出力処理モジュール３００が使用され、入出力処理モジュール４００は、その予備として使用される。以下、入出力処理モジュール４００を予備入出力処理モジュールと称して説明する。
【００２５】
図２は、本発明による演算処理モジュール１００の構成を示すブロック図である。図２を参照して、演算処理モジュール１００は、複数のプロセッサ１１０〜１４０、ブリッジ１５０、メモリ１６０を備える。複数のプロセッサ１１０〜１４０のそれぞれの間及びブリッジ１５０との間はバス１７０を介して接続される。又、ブリッジ１５０とメモリ１６０との間は、バス１８０を介して接続される。ブリッジ１５０はバス７００に接続される。これにより、複数のプロセッサ１１０〜１４０及びメモリ１６０は、ブリッジ１５０を介して他のモジュールと接続される。
【００２６】
メモリ１６０は、ソフトウェアメモリ領域８１０、ハードウェア制御領域８２０、演算処理モジュールファームウェア領域８３０を有している。プロセッサ１１０〜１４０は、ソフトウェアメモリ領域８１０に格納されたソフトウェア（ＯＳや表計算などのアプリケーションプログラム）を実行する、所謂、演算処理プロセッサ（ＥＰＵ）である。以下、プロセッサ１１０〜１４０をＥＰＵ１１０〜１４０と称す。
【００２７】
演算処理モジュール１００は、情報処理装置１に依存した命令を実行するためのファームウェアを実装している。ＥＰＵ１１０〜１４０は、演算処理モジュールファームウェア領域８３０に格納されたファームウェアを実行することで、図６に示す演算処理部１０１の機能を実現する。
【００２８】
図７は、本発明による演算処理部１０１の実施の形態における構成を示すブロック図である。図７を参照して、演算処理部１０１は、入出力要求処理部１０、入出力終了処理部１１を備える。演算処理部１０１は、従来と同様に他の演算処理に係る機能を有しているが、ここでは、入出力処理に関する機能のみを説明し、他の機能の説明は省略する。
【００２９】
入出力要求処理部１０は、ソフトウェア側からの指示に応じて、入出力処理部モジュール３００に対し、情報処理装置１と周辺処理装置３との間の入出力を指示する。入出力終了処理部１１は、入出力処理モジュール３００からの入出力終了通知に応じて、ソフトウェア側に対し入出力処理の終了を通知する。
【００３０】
図３は、本発明による診断処理モジュール２００の構成を示すブロック図である。図３を参照して、診断処理モジュール２００は、プロセッサ２１０、ブリッジ２５０、メモリ２６０を備える。プロセッサ２１０とブリッジ２５０との間はバス２７０を介して接続される。又、ブリッジ２５０とメモリ２６０との間は、バス２８０を介して接続される。ブリッジ２５０はバス７００に接続される。これにより、プロセッサ２１０及びメモリ２６０は、ブリッジ２５０を介して他のモジュールと接続される。尚、診断処理モジュール２００の処理量は、演算処理モジュール１００に比べて小さいため、プロセッサの数は１つでよいが、複数実装されていても構わない。
【００３１】
診断処理モジュール２００は、情報処理装置１の初期化処理や各モジュールの挿抜制御等の診断制御を行う。又、診断処理モジュール２００は、保守端末２からの指示に応じて診断制御に係る処理を行なう。プロセッサ２１０は、診断処理を専門に行うため診断プロセッサ（ＤＧＰ）と呼ばれる。以下、プロセッサ２１０をＤＧＰ２１０と称す。
【００３２】
診断処理モジュール２００は、診断制御に係る各種制御を行うためのファームウェアを実装している。詳細には、メモリ２６０は、診断処理モジュールファームウェア領域８４０を有している。ＤＧＰ２１０は、診断処理モジュールファームウェア領域８４０に格納されたファームウェアを実行することで、図７に示す診断処理部２０１の機能を実現する。
【００３３】
図８は、本発明による診断処理部２０１の実施の形態における構成を示すブロック図である。図８を参照して、診断処理部２０１は、モジュール移動処理部２０、初期化処理部２１、挿抜処理部２２を備える。診断処理部２０１は、従来と同様に他の診断処理に係る機能を有しているが、ここでは、入出力処理モジュールの切り替え処理や初期化処理等に関する機能のみを説明し、他の機能の説明は省略する。
【００３４】
モジュール移動処理部２０は入出力処理モジュール３００の入出力処理中に、その機能（入出力処理機能）を予備入出力処理モジュール４００に移動する。初期化処理部２１は、ハードウェア制御領域８２０、演算処理モジュールファームウェア領域８３０、診断処理モジュールファームウェア領域８４０、入出力処理モジュールファームウェア領域８５０を初期化する。挿抜処理部２２は、情報処理装置１から挿抜されるモジュールを監視し、挿抜されるモジュールや異常のあるモジュールを特定し、演算処理モジュール１００に通知する。
【００３５】
図４は、本発明による入出力処理モジュール３００の構成を示すブロック図である。図４を参照して、入出力処理モジュール３００は、プロセッサ３１０、ブリッジ３５０、メモリ３６０を備える。プロセッサ３１０とブリッジ３５０との間はバス３７０を介して接続される。又、ブリッジ３５０とメモリ３６０との間は、バス３８０を介して接続される。ブリッジ３５０はバス７００に接続される。これにより、プロセッサ３１０及びメモリ３６０は、ブリッジ３５０を介して他のモジュールと接続される。尚、入出力処理モジュール３００の処理量は、演算処理モジュール１００に比べて小さいため、プロセッサの数は１つでよいが、複数実装されていても構わない。
【００３６】
入出力処理モジュール３００はＥＰＵ１１０〜１４０の指示に応じて、情報処理装置１と周辺処理装置３との間の入出力を制御する。プロセッサ３１０は入出力処理を専門に行うため入出力プロセッサ（ＩＯＰ）と呼ばれる。以下、プロセッサ３１０をＩＯＰ３１０と称す。
【００３７】
入出力処理モジュール３００は、入出力処理を行うためのファームウェアを実装している。詳細には、メモリ３６０は、入出力処理モジュールファームウェア領域８５０を有している。ＩＯＰ３１０は、入出力処理モジュールファームウェア領域８５０に格納されたファームウェアを実行することで、図８に示す入出力処理部３０１の機能を実現する。
【００３８】
図９は、本発明による入出力処理部３０１の実施の形態における構成を示すブロック図である。図９を参照して、入出力処理部３０１は、ＩＯＰディスパッチャー３０、タイマ処理部３１、入出力開始処理部３２、入出力終了処理部３３、移動開始処理部３４、制御情報送信処理部３５、予備起動処理部３６、予備組込処理部３７、制御情報受信処理部３８を備える。入出力処理部３０１は、従来と同様に、情報処理装置１と周辺処理装置３との間における入出力処理に係る機能を有しているが、ここでは、入出力処理モジュールの切り替え処理等に関する機能のみを説明し、他の機能の説明は省略する。
【００３９】
入出力処理モジュール３００は、入出力処理を行なう際、ＩＯＰディスパッチャー３０、タイマ処理部３１、入出力開始処理部３２、入出力終了処理部３３、移動開始処理部３４、制御情報送信処理部３５の各機能を実現する。一方、予備として設定された場合、入出力処理モジュール３００は、予備起動処理部３６、予備組込処理部３７、制御情報受信処理部３８の各機能を実現する。
【００４０】
図５を参照して、予備入出力処理モジュール４００は、入出力処理モジュール３００と同様に、プロセッサ４１０、ブリッジ４５０、メモリ４６０を備える。プロセッサ４１０とブリッジ４５０との間はバス４７０を介して接続される。又、ブリッジ４５０とメモリ４６０との間は、バス４８０を介して接続される。ブリッジ４５０はバス７００に接続される。これにより、プロセッサ４１０及びメモリ４６０は、ブリッジ４５０を介して他のモジュールと接続される。メモリ４６０は、予備入出力処理モジュールファームウェア領域８６０を有している。予備ＩＯＰ４１０は、予備入出力処理モジュールファームウェア領域８６０に格納されたファームウェアを実行することで、図９に示す入出力処理部３０１を実現する。プロセッサ４１０は予備として用いられるため、以下では予備ＩＯＰ４１０と称して説明する。
【００４１】
本実施の形態では、初期状態として、入出力処理モジュール３００が入出力処理を行い、予備入出力処理モジュール４００が予備として待機する。このため、当初、ＩＯＰディスパッチャー３０、タイマ処理部３１、入出力開始処理部３２、入出力終了処理部３３、移動開始処理部３４の各機能は、入出力処理モジュール３００によって実現され、予備起動処理部３６、予備組込処理部３７、制御情報受信処理部３８の各機能は、予備入出力処理モジュール４００によって実現される。
【００４２】
ＩＯＰディスパッチャー３０は、ＥＰＵ１１０〜１４０やＤＧＰ２１０からの指示（プロセッサ間割込）や、後述するＩＯカード６１０〜６３０からの割込に応じて、当該指示（割込）に対応する処理に分岐する。ＩＯＰディスパッチャー３０は、通常モードか予備モードに応じて、分岐する処理を変更する。ＩＯＰディスパッチャー３０によって分岐された処理は、入出力処理部３０１における他の機能ブロックによって実行される。
【００４３】
タイマ処理部３１は、タイマ割込に応じて遅延タイマカウンタ８５Ｄ−Ｃ−７を減算する。遅延タイマカウンタ８５Ｄ−Ｃ−７は、後述する入出力処理（ステップＳ３２）の開始時期を制御するタイマである。例えば、遅延タイマカウンタ８５Ｄ−Ｃ−７の値が０のとき、タイムアウトとなり、入出力処理（ステップＳ３２）が開始される。
【００４４】
入出力開始処理部３２は、ＥＰＵ１１０〜１４０からの入出力要求に応じて情報処理装置１と周辺処理装置３との間における入出力処理を開始する。入出力開始処理部３２は、通常モードと遅延モードでその動作が異なる。入出力処理開始処理部３２は、通常モードの場合、入出力要求に応じて直ちに入出力処理を開始するが、遅延モードの場合、遅延タイマカウンタ８５Ｄ−Ｃ−７に応じて入出力開始処理を遅延する。
【００４５】
入出力終了処理部３３は、ＩＯカード（６１０〜６３０）からの割込に応じて情報処理装置１と周辺処理装置３との間における入出力処理の終了を制御する。又、入出力終了処理部３３は、入出力処理の実行時間を求め、その最大値を記録する。
【００４６】
移動開始処理部３４は、入出力処理に使用する入出力処理モジュールの切り替え処理の開始を制御する。詳細には、移動開始処理部３４は、入出力処理モジュールの切り替えを開始する際、自身が属する入出力処理モジュール３００を遅延モードに設定する。
【００４７】
制御情報送信処理部３５は、入出力処理に必要な制御情報を予備入出力処理モジュール４００に転送する。制御情報の転送は、移動開始処理部３４からの転送指示や、入出力終了処理部３３からの入出力処理終了通知に応じて行なわれる。又、制御情報の転送は、予備入出力処理モジュール４００からの受信完了通知に応じて終了する。
【００４８】
予備起動処理部３６、予備組込処理部３７、制御情報受信処理部３８は、予備として設定された予備入出力処理モジュール４００によって実現される。予備起動処理部３６は、ＤＧＰ２１０からの予備起動指示に応じて、実装されているＩＯカード６１０〜６３０を使用できる状態に設定する。予備組込処理部３７は、ＤＧＰ（２１０）からの予備組込指示に応じて、ＩＯカード６１０〜６３０からの割込通知先を予備ＩＯＰ４１０に設定し、ＩＯカード６１０〜６３０の初期設定を行う。すなわち、予備組込処理部３７は、ＩＯカード６１０〜６３０の通信先を予備入出力処理モジュール４００に設定する組込処理を行なう。制御情報受信処理部３８は、入出力処理モジュール３００から制御情報の送信の通知に応じて、制御情報を受信（取得）する。
【００４９】
図６は、本発明によるＩＯモジュールの実施の形態における構成を示すブロック図である。ＩＯモジュール５００は、ブリッジ５１０を備え、バス７００とバス５２０に接続している。バス５２０には複数の挿抜可能なスロットが接続され、ＩＯカード６００〜６３０を実装することができる。又、ブリッジ５１０およびＩＯカード６００〜６３０は割込を通知するプロセッサを指定することができる。
【００５０】
以上のような構成により、情報処理装置１と周辺処理装置３との間の入出力処理を継続させながら、入出力処理機能を入出力処理モジュール３００から予備入出力処理モジュール４００に移動することができる。
【００５１】
次に、図１０から図１５を参照して、本発明による情報処理装置１のメモリ空間８００の構造を説明する。図１０は、本発明による情報処理装置１におけるメモリ空間８００の一例を示す図である。情報処理装置１のメモリ空間８００は各モジュール１００、２００、３００、４００のメモリ１６０、２６０、３６０、４６０が連結されることにより構成されている。メモリ空間８００は、使用目的により、ソフトウェアメモリ領域８１０、ハードウェア制御領域８２０、演算処理モジュールファームウェア領域８３０、診断処理モジュールファームウェア領域８４０、入出力処理モジュールファームウェア領域８５０、予備入出力処理モジュールファームウェア領域８６０、予約領域８７０に分割されている。
【００５２】
図１０を参照して、ソフトウェアメモリ領域８１０は、ＥＰＵ１１０〜１４０上で動作するソフトウェア（ＯＳや表計算などのアプリケーションプログラム）によって使用されるメモリ領域である。ソフトウェアを実行するＥＰＵ１１０〜１４０は、ソフトウェアメモリ領域８１０に自身のコードやデータを展開する。ソフトウェアメモリ領域８１０はメモリ１６０上に位置する。
【００５３】
ハードウェア制御領域８２０は、情報処理装置１に固有の情報を格納する領域である。ハードウェア制御領域８２０には、入出力要求キュー８２Ｒ、入出力終了キュー８２Ｃ、プロセッサＩＤテーブル８２Ｐ、プロセッサ間通信領域８２Ｄを含んでいる。ハードウェア制御領域８２０はメモリ１６０上に位置し、ＤＧＰ２１０により初期化される。
【００５４】
演算処理モジュールファームウェア領域８３０は、ＥＰＵ１１０〜１４０上で動作するファームウェアで使用される領域である。ファームウェアは、情報処理装置１においてソフトウェア側に対し固有の機能を提供するプログラムである。ソフトウェアは、定められた呼出手順によりファームウェアの機能（演算処理部１０１）を使用することができる。演算処理モジュールファームウェア領域８３０はファームウェアのコードを格納するファームウェアコード領域８３Ｃと、ファームウェア（演算処理部１０１）によって使用されるデータを格納するデータ領域８３Ｃに分割されている。演算処理モジュールファームウェア領域８３０はメモリ１６０上に位置し、ＤＧＰ２１０により初期化される。
【００５５】
診断処理モジュールファームウェア領域８４０は、ＤＧＰ２１０上で動作するファームウェアによって使用される領域である。ファームウェアは診断処理モジュール２００の機能（診断処理部２０１）を実現するプログラムである。診断処理モジュールファームウェア領域８４０はファームウェアのコードを格納するファームウェアコード領域８４Ｃと、ファームウェア（診断処理部２０１）によって使用されるデータを格納するデータ領域８４Ｄに分割されている。診断処理モジュールファームウェア領域８４０はメモリ２６０上に位置し、ＤＧＰ２１０によって初期化される。
【００５６】
入出力処理モジュールファームウェア領域８５０は、ＩＯＰ３１０上で動作するファームウェアによって使用される領域である。ファームウェアは、入出力処理モジュール３００の機能（入出力処理部３０１）を実現するプログラムである。入出力処理モジュールファームウェア領域８５０はファームウェアのファームウェアコードを格納するファームウェアコード領域８５Ｃと、ファームウェア（入出力処理部３０１）によって使用されるデータを格納するデータ領域８５Ｄに分割されている。入出力処理モジュールファームウェア領域８５０はメモリ３６０上に位置し、ＤＧＰ２１０によって初期化される。
【００５７】
予備入出力処理モジュールファームウェア領域８６０は、予備ＩＯＰ４１０上で動作するファームウェアによって使用される領域である。この領域は、入出力処理モジュールファームウェア領域８５０と同じである。違いは予備入出力処理モジュールファームウェア領域８６０は、予備ＩＯＰ４１０によって使用されることと、メモリ４６０上に位置するだけである。
【００５８】
図１１は、本発明に係る入出力要求キュー８２Ｒの構造の一例を示す図である。図１１を参照して、入出力要求キュー８２ＲはＥＰＵ１１０〜１４０がＩＯＰ３１０に対して入出力要求を指示するためのものである。入出力要求キュー８２Ｒは、ＥＰＵ１１０〜１４０からの入出力要求情報（転送先アドレス、転送カウント、デバイス情報等）を格納したエントリ８２Ｒ−ｍを、Ｈｅａｄアドレス８２Ｒ−ＨとＴａｉｌアドレス８２Ｒ−Ｔによってリンクされた構造となっている。ＥＰＵ１１０〜１４０は、ＩＯＰ３１０に入出力要求を行うとき、エントリ８２Ｒ−ｍを作成し、Ｔａｉｌアドレス８２Ｒ−Ｔにエントリ８２Ｒ−ｍをエンキューする。ＩＯＰ３１０はＥＰＵ１１０〜１４０から入出力要求を受け取ると、Ｈｅａｄアドレス８２Ｒ−Ｈよりエントリ８２Ｒ−０をデキューする。入出力要求キュー８２ＲはＤＧＰ２１０により初期化される。
【００５９】
図１２は、本発明に係る入出力終了キュー８２Ｃの構造に一例を示す図である。入出力終了キュー８２Ｃの構造は基本的に入出力要求キュー８２Ｒと同じである。入出力終了キュー８２Ｃは、ＩＯＰ３１０がＥＰＵ１１０〜１４０によって指示された入出力要求の結果をＥＰＵ１１０〜１４０に通知するためのもので、エントリ８２Ｃ−ｍには入出力要求に対する終了情報（転送カウント、終了状態等）が格納される。ＩＯＰ３１０は、入出力要求が終了したとき、エントリ８２Ｃ−ｍを作成してＴａｉｌアドレス８２Ｃ−Ｔにエントリ８２Ｃ−ｍをエンキューする。ＥＰＵ１１０〜１４０は、ＩＯＰ３１０より入出力終了を受け取ると、Ｈｅａｄアドレス８２Ｃ−Ｈよりエントリ８２Ｃ−０をデキューする。入出力終了キュー８２ＣはＤＧＰ２１０により初期化される。
【００６０】
図１３は、本発明に係るプロセッサＩＤテーブル８２Ｐの構造の一例を示す図である。図１３を参照して、プロセッサＩＤテーブル８２Ｐは、ＥＰＵ１１０〜１４０、ＤＧＰ２１０、ＩＯＰ３１０、予備ＩＯＰ４１０に対応づけられたプロセッサのＩＤを格納する。プロセッサＩＤテーブル８２Ｐは、ＥＰＵ１１０〜１４０からＩＯＰ３１０への入出力要求の通知などのプロセッサ間通信（プロセッサ間割込）に使用される。プロセッサＩＤテーブル８２Ｐは、プロセッサの機能毎に固定のバイト８２Ｐ−ｎを持っており、バイト８２Ｐ−ｎにその機能に対応するプロセッサＩＤが格納されている。プロセッサＩＤテーブル８２ＰはＤＧＰ２１０により初期化される。
【００６１】
図１４は、本発明に係るプロセッサ間通信領域８２Ｄの構造の一例を示す図である。図１４を参照して、プロセッサ間通信領域８２Ｄは、各プロセッサ毎に特定の領域８２Ｄ−０〜８２Ｄ−６を持ち、プロセッサ間でデータの送受信を行うの際に使用される。送信元プロセッサは、送信先プロセッサの通信領域８２Ｄ−ｎに送信データを格納して送信先プロセッサに通知する（プロセッサ間割込）。送信先プロセッサは、その通知により通信領域８２Ｄ−ｎを読み出すことでデータを受信する。このように、プロセッサ間のデータの送受信が行われる。各プロセッサ通信領域は、排他制御用のロックバイトを含み、指示のためのコマンドバイトなどを含んでいる。プロセッサ間通信領域８２Ｄは、ＤＧＰ２１０により初期化される。
【００６２】
図１５は、本発明に係る入出力処理モジュールファームウェア領域８５０におけるデータ領域８５Ｄの構造の一例を示す図である。図１５を参照して、データ領域８５Ｄはファームウェア（入出力処理部３０１）によって使用される内容に応じて分割された複数のエントリ８５Ｄ−ｑを有している。各エントリ８５Ｄ−ｑには、エントリの内容を示すＩＤ８５Ｄ−ｑ−１と、エントリ８５Ｄ−ｒの内容をファームウェア（入出力処理部３０１）が変更したときに必要に応じて設定する変更フラグ８５Ｄ−ｑ−２を含んでいる。
【００６３】
又、使用する入出力処理モジュール３００が複数ある場合、データ領域８５Ｄは、複数の入出力処理モジュール３００に共通な情報を格納するエントリ８５Ｄ−Ｃを持つ。エントリ８５Ｄ−Ｃは、予備モードフラグ８５Ｄ−Ｃ−３、遅延モードフラグ８５Ｄ−Ｃ−４、ＩＯ実行中カウンタ８５Ｄ−Ｃ−５、最大ＩＯ実行時間８５Ｄ−Ｃ−６、遅延タイマカウンタ８５Ｄ−Ｃ−７を有する。予備モードフラグ８５Ｄ−Ｃ−３は、入出力処理モジュール３００が予備モジュールかどうかを示す。遅延モードフラグ８５Ｄ−Ｃ−４は、遅延モードかどうかを示す。遅延モードの場合、移動処理（使用する入出力処理モジュールの切り替え処理）において入出力処理の開始が遅延される。ＩＯ実行中カウンタ８５Ｄ−Ｃ−５は、現在実行中の入出力処理の処理時間のカウントに利用される。最大ＩＯ実行時間８５Ｄ−Ｃ−６には、現在までに実行した入出力処理における最大処理時間が格納される。遅延タイマカウンタ８５Ｄ−Ｃ−７は、入出力処理の開始を遅延させるための遅延タイマのカウントを格納する。
【００６４】
更に、データ領域８５Ｄは、入出力処理単位にその情報を格納するエントリ８５Ｄ−ｒを持つ。エントリ８５Ｄ−ｒは、入出力処理を開始した時刻を格納する開始時間８５Ｄ−ｒ−８を含んでいる。
【００６５】
（入出力処理モジュールの動作）
次に、図１６から図２１を参照して、入出力処理モジュール３００における動作の詳細を説明する。
【００６６】
図１６は、本発明による入出力処理モジュール３００におけるＩＯＰディスパッチャー３０の動作の一例を示すフローチャートである。図１６を参照して、ＩＯＰディスパッチャー３０は、ＥＰＵ１１０〜１４０やＤＧＰ２１０からプロセッサ間割込や、ＩＯカード６１０〜６３０からの割込等の要求を読み出す（ステップＳ１）。そして、要求の内容に応じた処理を入出力処理部３０１の他の機能ブロックに実行させる（ステップＳ２〜Ｓ１０）。ＩＯＰディスパッチャー３０における分岐処理は、予備モードかどうかに応じて対応する処理が異なる。
【００６７】
入出力処理モジュールが予備モードではない場合、すなわち、入出力処理モジュールが入出力処理モジュール３００として使用される場合、ステップＳ３〜ステップＳ７の処理が行われる（ステップＳ２Ｎｏ）。詳細には、ＩＯＰディスパッチャー３０は、遅延モードフラグ８５Ｄ−Ｃ−４を参照し、予備モードか通常動作モードかを特定する（ステップＳ２）。ここで、入出力処理モジュールが通常動作モードである場合、ＩＯＰディスパッチャー３０は、読みだした要求が、タイマ割込み、入出力処理の開始要求、入出力処理の終了要求、入出力処理モジュールの切替開始要求（移動開始要求）、制御情報送信要求のいずれかであるかを判定する。そして、読み出した要求の内容に応じた処理（ステップＳ３１〜Ｓ３５）に移行する。
【００６８】
一方、入出力処理モジュールが予備モードの場合、すなわち予備入出力処理モジュール４００として使用される場合、ステップＳ８からＳ１０の処理が行われる（ステップＳ２Ｙｅｓ）。詳細には、入出力処理モジュールが予備モードである場合、ＩＯＰディスパッチャー３０は、読み出した要求が、予備起動要求、予備組込要求、制御情報受信要求のいずれかであるかを判定する。そして、読み出した要求の内容に応じた処理（ステップＳ３６〜Ｓ３８）に移行する。尚、図１６に示すフローチャートに記述した処理は、本発明に関係する処理のみである。
【００６９】
図１７は、本発明による入出力処理モジュール３００におけるタイマ処理（ステップＳ３１）の一例を示すフローチャートである。一般的にプロセッサは一定間隔でタイマ割込を発生させており、タイマ処理部３１は、その割込により図１７に示すタイマ処理（ステップＳ３１）を実行する。タイマ処理部３１は、遅延タイマが起動中の場合、遅延タイマカウンタ８５Ｄ−Ｃ−７を減算する（ステップＳ１０１Ｙｅｓ、Ｓ１０２）。その後、タイマ処理部３１は、遅延タイマカウンタ８５Ｄ−Ｃ−７がタイムアウトしたかどうかを確認する（ステップＳ１０３）。ここで、タイムアウトが確認されると入出力開始処理に移行する（ステップＳ１０３Ｙｅｓ、Ｓ３２）。一方、遅延タイマが停止している場合や遅延タイマがタイムアウトしている場合、タイマ処理部３１は動作（タイマ処理）を停止する。
【００７０】
ここで、遅延タイマの起動、停止、タイムアウトは、遅延タイマカウンタ８５Ｄ−Ｃ−７の値により判断できる。遅延タイマカウンタ８５Ｄ−Ｃ−７の値が、０とＡＬＬ  Ｆｈ以外の値である場合“起動中”を示し、ＡＬＬ  Ｆｈの場合“停止中”を示し、０の場合“タイムアウト”を示す。尚、フローチャートに記述した処理は本発明に関係する処理のみである。
【００７１】
図１８は、本発明による入出力処理モジュール３００における入出力開始処理（ステップＳ３２）の一例を示すフローチャートである。入出力開始処理部３２は、ＥＰＵ１１０〜１４０からの入出力要求により情報処理装置１と周辺処理装置３との間で入出力を開始する。入出力開始処理部３２は、遅延モードかどうかにより実行される処理が異なる。遅延モードでない場合、すなわち入出力処理モジュール３００として機能する場合、入出力開始処理部３２は、直ちに入出力処理を開始する（ステップＳ２０１Ｎｏ）。詳細には、通常動作モードの場合、入出力開始処理部３２は、入出力要求キュー８２Ｒにおける先頭エントリ８２Ｒ−０をデキューする（ステップＳ２０２）。次に、入出力開始処理部３２は、データ転送を制御するのに必要な情報をエントリ８５Ｄ−ｒに格納する（ステップＳ２０３）。ここで、当該エントリ８５Ｄ−ｒが、予備入出力処理モジュール４００に切り替えるときに、情報を移動する必要があるエントリ８５Ｄ−ｒである場合、入出力開始処理部３２は変更フラグ８５Ｄ−ｒ−２を設定する。これは、ファームウェアに依存する動作であり、ファームウェア自身が変更フラグ８５Ｄ−ｒ−２を設定すべきかどうかの判断論理を持っている。
【００７２】
続いて、入出力開始処理部３２は、入出力処理に使用するＩＯカード６３０に入出力要求を行う（ステップＳ２０４）。又、入出力開始処理部３２は、エントリ８５Ｄ−ｒの開始時刻８５Ｄ−ｒ−８に現在の時刻を設定する（ステップＳ２０５）。更に、入出力開始処理部３２は、エントリ８５Ｄ−ＣのＩＯ実行中カウンタ８５Ｄ−Ｃ−５に１を加算する（ステップＳ２０６）。尚、現在の時刻は一般的にプロセッサ３１０に実装された一定間隔でカウントアップされるタイマカウンタより取得される。入出力要求キュー８２Ｒが空の場合、入出力開始処理部３２は入出力開始処理処理を終了する（ステップＳ２０７Ｙｅｓ）。ここで、入出力要求キュー８２Ｒに他のエントリがある場合、全てのエントリをデキューするまで、デキュー処理、エントリ８５−ｒへの情報の格納、入出力要求、現在時刻の設定、及びエントリに対応するＩＯ実行中カウンタの加算処理を繰り返す（ステップＳ２０７Ｎｏ）。
【００７３】
一方、入出力処理モジュールが遅延モードの場合、入出力開始処理部３２は、入出力処理の実行状態と遅延タイマの動作状態を確認し、入出力処理の開始を最大ＩＯ実行時間（８５Ｄ−Ｃ−６）に基づいて遅延させるよう処理する（ステップＳ２０１Ｎｏ、ステップＳ２０８〜Ｓ２１５）。詳細には、遅延モードである場合、入出力開始処理部３２は、ＩＯ実行中カウンタ８５０−Ｃ−５を参照して入出力処理中であるかどうかを確認する（ステップＳ２０８）。ここでは、ＩＯ実行中カウンタ８５０−Ｃ−５が０か否かによって入出力処理中であるかが確認される。ＩＯ実行中カウンタ８５Ｄ−Ｃ−５の値が０以外の値である場合、すなわち入出力処理中である場合ステップＳ２０２に移行し、通常の入出力開始処理に戻る（ステップＳ２０８Ｎｏ）。これは、入出力処理中に入出力処理の開始を遅延させても入出力処理の実行されていない十分な期間を確保できないためである。一方、ＩＯ実行中カウンタ８５Ｄ−Ｃ−５の値が０であり、入出力処理が実行中でない場合、入出力開始処理部３２は、遅延タイマカウンタ８５Ｄ−Ｃ−７を参照して遅延タイマがタイムアウトしているかどうか確認する（ステップＳ２０８Ｙｅｓ、Ｓ２０９）。ここで、遅延タイマがタイムアウトしていた場合、入出力開始の遅延可能時間が経過したことになる。この場合、入出力開始処理部３２は、遅延タイマカウンタ８５Ｄ−Ｃ−７にＡＬＬ  Ｆｈを格納して遅延タイマを停止させ、通常の入出力開始処理（ステップＳ２０２以降の処理）に戻る（ステップＳ２０９Ｙｅｓ、Ｓ２１０）。遅延タイマがタイムアウトしていない場合、入出力開始処理部３２は、遅延タイマが既に起動しているかどうか確認する（ステップＳ２０９Ｎｏ、Ｓ２１１）。
【００７４】
遅延タイマが起動中は、入出力処理を遅延する遅延期間であるため、入出力開始処理部３２は処理を停止する（ステップＳ２１１Ｙｅｓ）。一方、遅延タイマが起動していない場合、遅延タイマを起動して入出力処理を遅延する遅延期間に移行するため、入出力開始処理部３２は、遅延タイマカウンタ８５Ｄ−Ｃ−７に遅延時間をセットする（ステップＳ２１１Ｎｏ、Ｓ２１２〜Ｓ２１５）。詳細には、遅延タイマが起動していない場合、入出力開始処理部３２は、予め定められているソフトウェアにおける入出力タイムアウト時間３１−ＴＯ“ＴＯ”と最大ＩＯ実行時間８５Ｄ−Ｃ−６“ＭＡＸＩＯ”との差を、遅延可能な時間“ｎＤｅｌａｙ”として算出する（ステップＳ２１２）。ここで、入力開始処理部３２は、算出した遅延可能時間“ｎＤｅｌａｙ”の長さに応じて、遅延タイマに設定する時間を決定する。遅延可能時間“ｎＤｅｌａｙ”が、予め定められている標準ＩＯ開始遅延時間３１−ＤＬ“ｓＤｅｌａｙ”より短い場合、入出力開始処理部３２は、“ｎＤｅｌａｙ”を遅延タイマカウンタ８５Ｄ−Ｃ−７に設定して遅延タイマを起動する（ステップＳ２１３Ｙｅｓ、Ｓ２１４）。すなわち、現時点における最大ＩＯ実行時間８５Ｄ−Ｃ−６“ＭＡＸＩＯ”が、所定の長さより長い場合、予め設定された遅延時間“ｓＤｅｌａｙ”より短い時間“ｎＤｅｌａｙ”が遅延時間として設定される。一方、遅延可能時間“ｎＤｅｌａｙ”が、標準ＩＯ開始遅延時間３１−ＤＬ“ｓＤｅｌａｙ”以上である場合、入出力開始処理部３２は、“ｓＤｅｌａｙ”を遅延タイマカウンタ８５Ｄ−Ｃ−７に設定して遅延タイマを起動する（ステップＳ２１３Ｎｏ、Ｓ２１５）。すなわち、現時点における最大ＩＯ実行時間８５Ｄ−Ｃ−６“ＭＡＸＩＯ”が、所定の長さより短くなると、予め設定された遅延時間“ｓＤｅｌａｙ”が遅延時間として設定される。
【００７５】
これにより、少なくとも、予め設定された遅延時間“ｓＤｅｌａｙ”より短い時間、入出力処理の開始を遅延することができる。又、最大ＩＯ実行時間８５Ｄ−Ｃ−６が所定の時間より短い間は、最大ＩＯ実行時間８５−Ｃ−６と入出力タイムアウト時間３１−ＴＯとの差が、入出力処理の開始を遅延する時間となる。従って、本発明では、ＥＰＵ１１０〜１４０からの入出力要求に対し、所定の時間以上で最大ＩＯ実行時間に応じた時間、入出力処理の開始を遅延することができる。この期間中、ＩＯＰ３１０から予備ＩＯＰ４１０に対して制御情報を送信することが可能となる。又、入出力処理モジュール３００から予備入出力処理モジュール４００への移動（切り替え）が容易となる。
【００７６】
図１９は、本発明による入出力処理モジュール３００における入出力終了処理（ステップＳ３３）の一例を示すフローチャートである。入出力終了処理部３３は、ＩＯカード６１０〜６３０からの割込に応じて、ＩＯカード６１０〜６３０から終了情報を読み出す（ステップＳ３０１）。入出力終了処理部３３は、終了情報に基づき必要な情報をエントリ８５Ｄ−ｒに格納する（ステップＳ３０２）。ここで、当該エントリ８５Ｄ−ｒが、予備入出力処理モジュール４００の切り替える際、予備入出力処理モジュール４００に移動する必要がある場合、変更フラグ８５Ｄ−ｒ−２を設定する。
【００７７】
次に、入出力終了処理部３３は、エントリ８５Ｄ−ｒの開始時刻８５Ｄ−ｒ−８と現在の時刻の差を入出力実行時間“ｄＴ”として算出する（ステップＳ３０３）。入出力実行時間“ｄＴ”が予め定められた入出力タイムアウト時間３１−ＴＯ“ＴＯ”より長い場合、入出力終了処理部３３は、入出力処理がタイムアウトしていると判定し、ステップＳ３０７以降の入出力終了処理に移行する（ステップＳ３０４Ｎｏ）。この場合、処理がタイムアウトしているため、最大ＩＯ実行時間８５Ｄ−Ｃ−５の更新は行なわれない。又、入出力実行時間“ｄＴ”がエントリ８５Ｄ−Ｃの最大ＩＯ実行時間８５−Ｃ−２以下である場合も、入出力終了処理部３３は、最大ＩＯ実行時間８５Ｄ−Ｃ−５の更新を行なわずステップＳ３０７以降の入出力終了処理に移行する（ステップＳ３０４Ｙｅｓ、Ｓ３０５Ｎｏ）。
【００７８】
一方、入出力実行時間“ｄＴ”が入出力タイムアウト時間３１−ＴＯ“ＴＯ”より短く、最大ＩＯ実行時間８５−Ｃ−５“ＭＡＸＩＯ”よりも大きい場合、入出力終了処理部３３は、入力出力実行時間“ｄＴ”を最大ＩＯ実行時間８５Ｄ−Ｃ−２に格納し、変更フラグ８５Ｄ−Ｃ−２を設定する（ステップＳ３０４Ｙｅｓ、Ｓ３０５Ｙｅｓ、Ｓ３０６）。最大ＩＯ実行時間８５Ｄ−Ｃ−２を更新するとステップＳ２０７以降の入出力終了処理に移行する。
【００７９】
実行時間ｄＴが最大実行時間であるか否かの検証を終了すると、入出力終了処理部３３は、ＩＯ実行中カウンタ８５Ｄ−Ｃ−５を１減算する（ステップＳ３０７）。そして、入出力終了処理部３３は、入出力終了情報エントリ８２Ｃ−ｐを作成し、入出力終了キュー８２ＣにエンキューしてＥＰＵ１１０〜１４０に入出力の終了を通知する（ステップＳ３０８、Ｓ３０９）。又、入出力終了処理部３３は、ＩＯカード６１０〜６３０の割込要因をリセットする（ステップＳ３１０）。ステップＳ３０７〜Ｓ３１０の処理は、この図１９に示す順に限らず任意に変更できる。ステップＳ３０７〜Ｓ３１０の処理が終了すると、入出力終了処理部３３は、遅延モードフラグ８５Ｄ−Ｃ−４を参照して遅延モードかどうかを確認する（ステップＳ３１１）。ここで、遅延モードの場合、後述する制御情報送信処理（ステップＳ３５）に移行し（ステップＳ３１１Ｙｅｓ）、遅延モードではない通常動作モードの場合、処理を終了する（ステップＳ３１１Ｎｏ）。
【００８０】
図２０は、本発明による入出力処理モジュール３００における移動開始処理（Ｓ３４）の一例を示すフローチャートである。図２０を参照して、使用する入出力処理モジュール３００を予備入出力処理モジュール４００に切り替える際、移動開始処理部３４は、エントリ８５Ｄ−Ｃの遅延モードフラグ８５Ｄ−Ｃ−４を設定する（ステップＳ４０１）。これにより、情報処理装置１は遅延モードに設定される。この後、制御情報送信処理（ステップＳ３５）に移行する。
【００８１】
図２１は、本発明による入出力処理モジュール３００における制御情報送信処理（ステップＳ３５）の一例を示すフローチャートである。移動開始処理（ステップＳ３５）によって遅延モードに設定されると、入出力処理モジュール３００は、入出力処理モジュール３００として機能するための制御情報を、予備入出力処理モジュール４００に送信する。制御情報送信処理部３５は、遅延モードである場合、ＩＯ実行中カウンタ８５Ｄ−Ｃ−５を参照し、入出力処理中かどうか確認する（ステップＳ５０１）。ここで、入出力処理中である場合、制御情報送信処理部３５は制御情報送信処理を終了する（ステップＳ５０１Ｎｏ）。これは、入出力処理中はエントリ８５Ｄ−ｑの変更頻度が高いため、予備ＩＯＰ４１０に制御情報を送信しても効率が悪いためである。一方、入出力処理が行われていない場合、制御情報送信処理部３５は、データ領域８５Ｄの全エントリ８５Ｄ−ｑの変更フラグ８５Ｄ−ｑ−２を確認する（ステップＳ５０２）。ここで、変更フラグが設定されているエントリが存在する場合、制御情報送信処理部３５は、当該エントリ８５Ｄ−ｑの変更フラグ８５Ｄ−ｑ−２をクリアし、当該エントリ８５Ｄ−ｑの内容を予備ＩＯＰ通信領域８２Ｄ−５に格納する（ステップＳ５０３Ｎｏ、Ｓ５０４）。そして、制御情報送信処理部３５は、予備ＩＯＰ４１０に制御情報の送信を通知する（ステップＳ５０５）。一方、変更フラグ８５Ｄ−ｑ−２が全てクリアされている場合、全ての必要な情報は予備ＩＯＰ４１０に送信済みであるので、制御情報送信処理部３５は、ＤＧＰ２１０に移動完了を報告する（ステップＳ５０６）。これによりＩＯＰ３１０は、ＩＯＰとしての機能を停止し、ＥＰＵ１１０〜１４０からの要求やＩＯカード６１０〜６３０からの割込を受け付けなくなる（ステップＳ５０７）。ただし、ＤＧＰ２１０からの要求は受け付ける。
【００８２】
（予備入出力処理モジュールの動作）
次に、図２２から図２４を参照して、予備入出力処理モジュール４００における動作の詳細を説明する。
【００８３】
図２２は、本発明による予備入出力処理モジュール４００における制御情報受信処理（ステップＳ３８）の一例を示すフローチャートである。制御情報受信処理部３８は、予備ＩＯＰ通信領域８２Ｄ−５から受信した制御情報（エントリ８５Ｄ−ｑ）を読み出してＩＤ８５Ｄ−ｑ−１を確認する（ステップＳ８０１）。制御情報受信処理部３８は、予備ＩＯＰ４１０側の同一ＩＤ８６Ｄ−ｑ−１を持つエントリ８６Ｄ−１に、受信したエントリ８５Ｄ−１を格納する（ステップＳ８０２）。そして、制御情報受信処理部３８は、ＩＯＰ３１０に受信完了を報告する（ステップＳ８０３）。ここで、予備ＩＯＰ４１０のデータ領域８６ＤとＩＯＰ３１０のデータ領域８５Ｄの構造は同じであり、同一のエントリ８５Ｄ−ｑ、８６Ｄ−ｑを持っている。ＩＯＰ３１０は制御情報を送信するとき、エントリ８５Ｄ−ｑそのものを予備ＩＯＰ４１０の通信領域８２Ｄ−５に格納しているので、予備ＩＯＰ４１０はそれを読み出してＩＤ８５Ｄ−ｑ−１を確認し、自身の同一エントリ８６Ｄ−ｑに格納する。
【００８４】
図２３は、本発明による予備入出力処理モジュール４１０における予備起動処理（ステップＳ３６）の一例を示すフローチャートである。予備起動処理部３６は、入出力処理モジュールの移動（切り替え）に先がけて、ＤＧＰ２１０からの予備起動指示に応じて予備データ領域８６Ｄを初期化する（ステップＳ６０１）。予備起動処理部３６は、初期化後、ＩＯモジュール５００をスキャンして実装されているＩＯカード６１０〜６３０の情報を読み出し、エントリ８６Ｄ−ｑに設定する（ステップＳ６０１〜Ｓ６０３）。そして、予備起動処理部３６は、ＤＧＰ２１０に予備起動完了を通知する（ステップＳ６０４）。この処理はデータ領域８６Ｄの初期化とＩＯカード６１０〜６３０からの情報の読み出しだけであるので、実行中の入出力に影響を与えない。尚、予備モードフラグ８６Ｄ−Ｃ−３は、情報処理装置１の初期化時に設定されており、予備ＩＯＰ４１０は情報処理装置１の初期化時より予備ＩＯＰとして動作している。
【００８５】
図２４は、本発明による予備入出力処理モジュール４００における予備組込処理（ステップＳ３７）の一例を示すフローチャートである。予備組込処理部３７は、ＤＧＰ２１０からの予備組込指示に応じて、ＩＯカード６１０〜６３０をリセットし、割込通知先を予備ＩＯＰ４１０に設定する（ステップＳ７０１、Ｓ７０２）。予備組込処理部３７は、データ領域８６Ｄのエントリ８６Ｄ−ｑに従ってＩＯカード６１０〜６３０の初期設定を行う（ステップＳ７０３）。そして、予備組込処理部３７は、エントリ８６Ｄ−Ｃの予備モードフラグ８６Ｄ−Ｃ−３をクリアしてＤＧＰ２１０に予備起動の完了を通知する（ステップＳ７０４、Ｓ７０５）。予備起動が完了するとステップＳ３２の入出力開始処理に移行する。
【００８６】
（演算処理モジュールの動作）
次に、図２５及び図２６を参照して、演算処理モジュール１００における動作の詳細を説明する。
【００８７】
図２５は、本発明による演算処理モジュール１００における入出力要求処理（ステップＳ１００）の一例を示すフローチャートである。入出力要求処理部１０は、ソフトウェアからの入出力指示に応じてエントリ８２Ｒ−ｍを作成する（ステップＳ１１１）。入出力要求処理部１０は、作成したエントリ８２Ｒ−ｍを入出力要求キュー８２Ｒにエンキューする（ステップＳ１１２）。そして、入出力要求部１０は、プロセッサＩＤテーブル８２ＰよりＩＯＰ３１０のＰＩＤ８２Ｐ−４を読み出し、当該ＩＯＰ３１０に対する入出力要求を行う（ステップＳ１１３、Ｓ１１４）。
【００８８】
図２６は、本発明による演算処理モジュール１００における入出力終了処理（ステップＳ１１０）の一例を示すフローチャートである。入出力終了処理部１１は、ＩＯＰ３１０からの入出力の終了通知に応じて、入出力終了キュー８２Ｃが空かどうか確認し、空でない場合、入出力終了キュー８２Ｃよりエントリ８２Ｃ−０をデキューする（ステップＳ１２１Ｎｏ、Ｓ１２２）。この場合、入出力終了処理部１１は、デキューしたエントリ８２Ｃ−０に従ってソフトウェアに入出力の終了を通知する（ステップＳ１２３）。ステップＳ１２１〜Ｓ１２３の処理を入出力終了キュー８２が空になるまで繰り返す。ソフトウェアは、入出力の終了通知に応じて入出力処理を終了する。
【００８９】
（診断処理モジュールの動作）
次に、図２７を参照して、診断処理モジュール２００における動作の詳細を説明する。
【００９０】
図２７は、本発明による診断処理モジュール２００における入出力処理モジュール移動処理（ステップＳ２００）の一例を示すフローチャートである。モジュール移動処理部２０は、予備入出力処理モジュール４００を入出力処理モジュール３００として機能させるための入出力処理モジュール移動処理を行う。モジュール移動処理部２０は、保守端末２から入出力処理モジュールの移動指示に応じて、予備ＩＯＰ４１０に予備起動を指示し、その起動完了を待ち合わせる（ステップＳ２１１、Ｓ２１２）。モジュール移動処理部２０は、予備ＩＯＰ４１０より予備起動の完了を通知されると、ＩＯＰ３１０に移動開始を指示し、ＩＯＰ３１０からの移動完了報告を待ち合わせる（ステップＳ２１３、Ｓ２１４）。モジュール移動処理部２０は、ＩＯＰ３１０より移動完了の通知を受けると、プロセッサＩＤテーブル８２ＰのＩＯＰエントリ８２Ｐ−４と予備ＩＯＰエントリ８２Ｐ−５のプロセッサＩＤを入れ替える（ステップＳ２１５）。これにより、ＥＰＵ１１０〜１４０からは、予備ＩＯＰ４１０が使用するＩＯＰ（ＩＯＰ３１０）となったように見え、これ以降、入出力要求は予備ＩＯＰ４１０に通知されるようになる。そして、モジュール移動処理部２０は、予備ＩＯＰ４１０に予備組込を指示してその完了を待ち合わせる（ステップＳ２１６、Ｓ２１７）。尚、モジュール移動処理部２０は、入出力処理モジュールの挿抜や障害の予兆の発生に応じて予備ＩＯＰ４１０に対して予備起動を指示しても良い。
【００９１】
（情報処理装置の動作）
先ず、本発明による情報処理装置１の初期化処理を説明する。電源投入により情報処理装置１は初期化される。詳細には、ソフトウェアメモリ領域８１０及びハードウェア制御領域８２０が初期化され、各ファームウェアコード領域８３Ｃ〜８６Ｃには対応するファームウェアコードが展開される。又、各ファームウェアコード領域８３Ｃ〜８６Ｃは、対応するプロセッサ２１０〜４１０によって実行され、各データ領域８３Ｄ〜８６Ｄが初期化される。更に、ソフトウェアメモリ領域８１０にはソフトウェアが周辺処理装置３などよりロードされ、プロセッサ１１０〜１４０によって実行される。これにより、情報処理装置１は各種処理を実行できる状態となる。以上のように情報処理装置１の初期化処理は一般的な処理装置と同様に行なわれる。
次に、図１６から図２８を参照して、本発明による情報処理装置１の入出力動作、及び入出力処理モジュールの移動（切り替え）動作の詳細を説明する。図２８は、情報処理装置１における入出力動作（ステップＳ９０１〜Ｓ９０９）、入出力処理モジュールの移動動作（ステップＳ９１０〜Ｓ９４９）、入出力処理モジュールの移動後における入出力動作（ステップＳ９５０〜Ｓ９５８）を示すシーケンス図である。
【００９２】
図２８を参照して、情報処理装置１の通常時における入出力動作について説明する。情報処理装置１と周辺処理装置３との間で入出力を行うとき、ソフトウェアはＥＰＵ１１０〜１４０に入出力指示を発行する。ＥＰＵ１１０〜１４０はソフトウェアより入出力指示を受けると、図２５に示す入出力要求処理（ステップＳ１００）を実行する（ステップＳ９０１）。ここで、ＥＰＵ１１０〜１４０は、エントリ８２Ｒ−ｍを作成して入出力要求キュー８２Ｒにエンキューし、プロセッサＩＤテーブル８２ＰよりＩＯＰ３１０のＰＩＤ８２Ｐ−４を読み出して入出力要求を行う（ステップＳ９０２）。
【００９３】
ＩＯＰ３１０はＥＰＵ１１０〜１４０より入出力要求を受けると、ＩＯＰディスパッチャー３０を介して図１８に示す入出力開始処理（ステップＳ３２）を実行する（ステップＳ９０３）。ここでは、遅延モードではないため、ＩＯＰ３１０は、入出力要求キュー８２Ｒよりエントリ８２Ｒ−０をデキューしてデータ転送を制御するのに必要な情報をデータ領域８５Ｄのエントリ８５Ｄ−ｒに格納する。続いて、ＩＯＰ３１０は、対象となるＩＯカード６１０〜６３０に入出力開始指示を行う（ステップＳ９０４）。
【００９４】
ＩＯカード６１０〜６３０は、ＩＯＰ３１０より入出力の開始指示を受けると、その指示内容に従って情報処理装置１と周辺処理装置３との間における入出力処理を行う（ステップＳ９０５）。入出力処理が終了したＩＯカード６１０〜６３０は、ＩＯＰ３１０に終了を示す割込（入出力終了割込）を通知する（ステップＳ９０６）。尚、ＩＯカード６１０〜６３０がどのプロセッサに割込を通知するかは、情報処理装置１の初期化時にＩＯカード毎に設定される。この処理は一般的な技術と同様にＩＯＰ３１０が初期化時に行う。
【００９５】
ＩＯＰ３１０はＩＯカード６１０〜６３０のいずれかより入出力の終了を通知されると、ＩＯＰディスパッチャー３０を介して図１９に示す入出力終了処理（ステップＳ３３）を実行する（ステップＳ９０７）＋。ここでは、終了通知の発行元であるＩＯカードから入出力の終了情報を読み出し、必要な情報をエントリ８５Ｄ−ｒに格納する。この際、ＩＯＰ３１０は、入出力開始指示を発行してから終了割込を受け付けるまでの入出力実行時間ｄＴが、これまでの最大値を示す場合、当該入出力実行時間ｄＴを最大ＩＯ実行時間８５Ｄ−Ｃ−２に格納する。ＩＯＰ３１０は、入出力終了割込に応じて、ＥＰＵ１１０〜１４０に入出力の終了を通知する（ステップＳ９０８）。尚、本処理において情報処理装置１は、遅延モードではないため、ＩＯＰ３１０は、入出力処理を終了する。
【００９６】
ＥＰＵ１１０〜１４０は、ＩＯＰ３１０から入出力の終了を通知されると、図２６に示す入出力終了処理（Ｓ１１０）を実行する（ステップＳ９０９）。ここでは、入出力終了キュー８２Ｃが空でない場合、入出力終了キュー８２Ｃよりエントリ８２Ｃ−０がデキューされ、当該エントリ８２Ｃ−０に従ってソフトウェアに入出力の終了が通知される。これにより、ソフトウェアは入出力処理を終了する。
【００９７】
以上のように、通常時における情報処理装置１と周辺処理装置３との間のデータ転送が行われ、最大ＩＯ実行時間８５Ｄ−Ｃ−６には現在までに実行した入出力処理における最大ＩＯ実行時間ＭＡＸＩＯが格納される。ＩＯＰ３１０は、最大ＩＯ実行時間ＭＡＸＩＯと、予め定められているタイムアウト時間ＴＯとの差分を、入出力の遅延が可能な時間（遅延可能時間）と予測することができる。又、ＩＯ実行中カウンタ８５Ｄ−Ｃ−５は、入出力開始処理（ステップＳ９０３（Ｓ３２））で１加算され、入出力終了処理（ステップＳ９０７（Ｓ３３））で１減算される。ＩＯＰ３１０は、ＩＯ実行中カウンタ８５Ｄ−Ｃ−５を確認することにより入出力処理が実行中かどうか判断できる。尚、最大ＩＯ実行時間８５Ｄ−Ｃ−６の初期値として、情報処理装置１の初期化時に予め情報処理装置の設計時に決定された値が設定されていることが好ましい。
【００９８】
次に、図２８を参照して、入出力処理モジュール３００を予備入出力処理モジュール４００に移動する（切り替える）動作を説明する。入出力処理モジュール３００を予備入出力処理モジュール４００に移動させる場合、保守員が保守端末２を操作してＤＧＰ２１０に移動指示を行う（ステップＳ９１０、Ｓ９１１）。ＤＧＰ２１０は移動指示を受けると、図２７に示す入出力処理モジュール移動処理（ステップＳ２００）を実行する（ステップＳ９１２、Ｓ９１３、Ｓ９１６、Ｓ９１７、Ｓ９４２、Ｓ９４３、Ｓ９４７）。先ず、ＤＧＰ２１０は、予備ＩＯＰ４１０に予備起動を指示し、その起動完了を待ち合わせる（ステップＳ９１３）。
【００９９】
予備ＩＯＰ４１０は、ＤＧＰ２１０より予備起動を指示されるとＩＯＰディスパッチャー３０を介して図２３に示す予備起動処理（ステップＳ３６）を実行する（ステップＳ９１４、Ｓ９１５）。ここで予備ＩＯＰ４１０は、実装されているＩＯカードの情報を読み出してエントリ８６Ｄ−ｑに設定し、ＤＧＰ２１０に予備起動完了を通知する。
【０１００】
ＤＧＰ２１０は予備ＩＯＰ４１０から予備起動の完了を通知されると、ＩＯＰ３１０に移動開始を指示し、ＩＯＰ３１０からの移動完了報告を待ち合わせる（ステップＳ９１６、Ｓ９１７）。
【０１０１】
ＩＯＰ３１０は、ＤＧＰ２１０から移動指示を受けるとＩＯＰディスパッチャー３０を介して図２０に示す移動開始処理（ステップＳ３４）を実行する（ステップＳ９１８）。ここで、ＩＯＰ３１０は、入出力処理モジュール３００を遅延モードに設定した後、図２１に示す制御情報送信処理（ステップＳ３５）を実行する。入出力処理中ではなく、変更フラグが設定されている場合、ＩＯＰ３１０は、変更フラグが設定されているエントリ８５Ｄ−ｑの内容を予備ＩＯＰ通信領域８２Ｄ−５に格納して予備ＩＯＰ４１０に制御情報の送信を通知する（ステップＳ９１９）。
【０１０２】
予備ＩＯＰ４１０は、ＩＯＰ３１０から制御情報の送信を通知されると、ＩＯＰディスパッチャー３０を介して図２２に示す制御情報受信処理（ステップＳ３８）を実行する（ステップＳ９１４、Ｓ９１５）。ここで、予備ＩＯＰ４１０は、制御情報（エントリ８５Ｄ−ｑ）を読み出してＩＤ（８５Ｄ−ｑ−１）を確認し、予備ＩＯＰ４１０側の同一ＩＤ８６Ｄ−ｑ−１を持つエントリ８６Ｄ−１に受信したエントリ８５Ｄ−１を格納する。そして、予備ＩＯＰ４１０は、ＩＯＰ３１０に受信完了を報告する。
【０１０３】
ＩＯＰ３１０は、予備ＩＯＰ４１０から制御情報の受信完了を通知されると、ＩＯＰディスパッチャー３０を介して再度、図２１に示す制御情報送信処理（ステップＳ３５）を実行する（ステップＳ９２０〜Ｓ９２２）。そして、全ての制御情報がＩＯＰ３１０から予備ＩＯＰ４１０に転送されるまで、上述と同様に制御情報送信処理（ステップＳ３５）及び制御情報受信処理（ステップＳ３８）が繰り返し実行される。
【０１０４】
一方、入出力処理中に入出力処理モジュールの移動要求を指示される場合や、移動処理中にＥＰＵ１１０〜１４０から入出力要求を指示される場合がある。入出力処理中に移動要求を受けたＩＯＰ３１０は、移動開始処理（ステップＳ３４）によって遅延モードに設定し、制御情報送信処理を行なわず入出力処理を優先的に実行する（図２１、ステップＳ５０１Ｎｏ）。この場合、移動要求に応じて遅延モードに設定されるため、入出力処理が終了した後（図１９、ステップＳ３１１Ｙｅｓ）に制御情報送信処理（ステップＳ３５）が実行される。又、入出力処理モジュールの移動処理中に入出力要求が指示される場合、ＩＯＰ３０１は、入出力処理を優先的に実行し、ＩＯ実行中カウンタの設定に応じて制御情報送信処理を終了する（図２１、ステップＳ５０１Ｎｏ）。この場合も、既に遅延モードに設定されているため、入出力処理が終了した後（図１９、ステップＳ３１１Ｙｅｓ）に制御情報送信処理（ステップＳ３５）は再実行される。
【０１０５】
本一例では、入出力処理モジュールの移動処理中に、入出力要求が発行されるものとして説明する。例えば、制御情報送信処理と制御情報受信処理が繰り返され（ステップＳ９２２〜ステップＳ９２６）、制御情報送信処理（ステップＳ９２６）の途中において、ＥＰＵ１１０〜１４０から入力指示がＩＯＰ３１０に発行される（ステップＳ９２７、Ｓ９２８）。この場合、情報処理装置１は、既に遅延モードに設定され、且つＩＯ実行中カウンタが０であるため、ＩＯＰ３１０は、図１８に示す入出力開始処理（ステップＳ３２）におけるステップＳ２０８〜Ｓ２１５の処理によって、制御情報の送信に必要な期間を遅延期間として設定する（ステップＳ９２９）。設定された遅延時間の間、ＥＰＵ１１０〜１４０からの入出力要求に対し入出力処理の開始が遅延され、この間、ＩＯＰ３１０から予備ＩＯＰ４１０に対して制御情報を送信する時間が確保される。
【０１０６】
本発明では、ＥＰＵ１１０〜１４０からの入出力要求指示を受けてから、所定の期間（遅延時間）待機した後、ＩＯカード６１０〜６３０に対する入出力開始指示を発行している。この期間中、ＩＯＰ３１０は制御情報を送信することができるため、予備ＩＯＰ４１０への制御情報の送信を継続することができる。又、この期間中、ＥＰＵ１１０〜１４０は、入出力要求指示を発行中であるため、次の入出力要求指示を待機する必要がある。通常、入出力要求指示は頻繁に発行され、この間、従来のＩＯＰは、他の処理（例えば制御情報の送信）を中断してＩＯカード６１０〜６３０に対する入出力開始指示を発行する。しかし、本発明によるＩＯＰ３１０は、入出力要求指示から入力開始指示までの遅延時間中に制御情報の送信が可能であるため、入出力要求指示の頻度が高い間でも制御情報を予備ＩＯＰ４１０に移動する時間を確保することができる。従って、本発明によれば、ＩＯＰ３１０として機能させるための制御情報の移動速度を向上させることができる。又、遅延時間は、ソフトウェアのタイムアウト時間を超えないように設定されるため、ソフトウェアから要求される入出力処理を妨げることなく制御情報を移動する時間を確保することができる。
【０１０７】
ＩＯＰ３１０は、ステップＳ９２９からステップＳ９３３の間、設定された遅延時間だけＩＯカード６１０〜６３０への入出力開始指示の発行を待機する。その間、ＩＯＰ３１０は、制御情報を予備ＩＯＰ４１０に出力し、予備ＩＯＰから受信完了報告の通知を受ける（ステップＳ９３０〜Ｓ９３２）。ＩＯＰ３１０は、遅延タイマがタイムアウトすると、入出力開始指示を対象となるＩＯカード６１０〜６３０に発行する（ステップＳ９３３、Ｓ９３４）。
【０１０８】
ＩＯカード６１０〜６３０は、ＩＯＰ３１０より入出力の開始指示を受けると、その指示内容に従って情報処理装置１と周辺処理装置３との間における入出力処理を行う（ステップＳ９３５）。入出力処理が終了したＩＯカード６１０〜６３０は、ＩＯＰ３１０に終了を示す割込（入出力終了割込）を通知する（ステップＳ９３６）。
【０１０９】
ＩＯＰ３１０はＩＯカード６１０〜６３０のいずれかより入出力の終了を通知されると、ＩＯＰディスパッチャー３０を介して図１９に示す入出力終了処理（ステップＳ３３）を実行する（ステップＳ９３７）。その後、ＩＯＰ３１０は、入出力終了割込に応じて、ＥＰＵ１１０〜１４０に入出力の終了を通知する（ステップＳ９３８）。尚、本処理において情報処理装置１が遅延モードであるため、ＩＯＰ３１０は、再度、制御情報送信処理（ステップＳ３５）に移行し、全ての制御情報がＩＯＰ３１０から予備ＩＯＰ４１０に転送されるまで、上述と同様に制御情報送信処理（ステップＳ３５）及び制御情報受信処理（ステップＳ３８）を繰り返す（ステップＳ９４０〜Ｓ９４３）。
【０１１０】
一方、ＥＰＵ１１０〜１４０は、ＩＯＰ３１０から入出力の終了を通知されると、図２６に示す入出力終了処理（ステップＳ１１０）を実行する（ステップＳ９３９）。ここでは、入出力終了キュー８２Ｃが空でない場合、入出力終了キュー８２Ｃよりエントリ８２Ｃ−０がデキューされ、当該エントリ８２Ｃ−０に従ってソフトウェアに入出力の終了が通知される。これにより、ソフトウェアは入出力処理を終了する。
【０１１１】
ＩＯＰ３１０は全ての制御情報を予備ＩＯＰ４１０に転送すると、ＤＧＰ２１０に移動完了を報告し、ＩＯＰとしての機能を終了する（ステップＳ９４４、Ｓ９４５）。ＤＧＰ２１０は、ＩＯＰ３１０から移動完了の通知を受けると、プロセッサＩＤテーブル８２ＰのＩＯＰエントリ８２Ｐ−４と予備ＩＯＰエントリ８２Ｐ−５のプロセッサＩＤを入れ替える（ステップＳ９４６）。これにより、ＥＰＵ１１０〜１４０から見ると、予備ＩＯＰ４１０がＩＯＰ３１０になったように見え、これ以降、入出力要求は予備ＩＯＰ４１０に通知されるようになる。そして、ＤＧＰ２１０は、予備ＩＯＰ４１０に予備組込を指示してその完了を待ち合わせる（ステップＳ９４７）。
【０１１２】
予備ＩＯＰ４１０は、ＤＧＰ２１０から予備組込を指示されると、図２４に示す予備組込処理（ステップＳ３７）を実行する（ステップＳ９４４〜Ｓ９４６）。詳細には、予備ＩＯＰ４１０は、ＩＯカード６１０〜６３０をリセットして割込通知先を予備ＩＯＰ４１０に設定し、データ領域８６Ｄのエントリ８６Ｄ−ｑに従ってＩＯカード６１０〜６３０の初期設定を行う（ステップＳ９４７〜Ｓ９４９）。そして、予備ＩＯＰ４１０は、ＤＧＰ２１０に予備起動の完了を通知する（ステップＳ９５０）。ＤＧＰ２１０は、予備ＩＯＰ４１０より予備起動の完了を通知されると、保守端末２に対してＩＯＰ移動完了報告を通知し、処理を終了する（ステップＳ９５１、Ｓ９５２）。保守端末２は、ＩＯＰ移動完了報告をユーザに対して視認可能に出力する（ステップＳ９５３）。
【０１１３】
このように、予備ＩＯＰ４１０は、ＩＯＰ３１０から受信した制御情報でＩＯカード６１０〜６３０を初期化する。これにより、以降の入出力処理においてもＩＯＰ３１０から受信した制御情報に従って処理が行われる。すなわち、ＩＯカード６１０〜６３０は、ＩＯＰが変更されたことを意識することなく入出力処理を継続する。一方、ＩＯＰ３１０の機能は制御情報とともに予備ＩＯＰ４１０に移動しているため、ＥＰＵ１１０〜１４０もＩＯＰの変更を意識することなく入出力要求を行なう。
【０１１４】
次に、図２８を参照して、ＩＯＰの移動処理後における入出力処理を説明する。ソフトウェアからＥＰＵ１１０〜１４０に入出力指示が発行されたＥＰＵ１１０〜１４０は、ＩＯＰの移動後も通常動作時と同様に、図２５に示す入出力要求処理（ステップＳ１００）を実行する（ステップＳ９５４）。ここで、ＥＰＵ１１０〜１４０は、エントリ８２Ｒ−ｍを作成して入出力要求キュー８２Ｒにエンキューし、プロセッサＩＤテーブル８２Ｐより予備ＩＯＰ４１０のＰＩＤ８２Ｐ−４を読み出して入出力要求を行う（ステップＳ９５５）。
【０１１５】
予備ＩＯＰ４１０はＥＰＵ１１０〜１４０より入出力要求を受けると、ＩＯＰディスパッチャー３０を介して図１８に示す入出力開始処理（ステップＳ３２）を実行する（ステップＳ９５６）。ここでは、遅延モードではないため、予備ＩＯＰ４１０は、入出力要求キュー８２Ｒよりエントリ８２Ｒ−０をデキューしてデータ転送を制御するのに必要な情報をデータ領域８６Ｄのエントリ８６Ｄ−ｒに格納する。続いて、予備ＩＯＰ４１０は、対象となるＩＯカード６１０〜６３０に入出力開始指示を行う（ステップＳ９５７）。
【０１１６】
ＩＯカード６１０〜６３０は、予備ＩＯＰ４１０より入出力の開始指示を受けると、その指示内容に従って情報処理装置１と周辺処理装置３との間における入出力処理を行う（ステップＳ９５８）。入出力処理が終了したＩＯカード６１０〜６３０は、予備ＩＯＰ４１０に終了を示す割込（入出力終了割込）を通知する（ステップＳ９５９）。尚、ＩＯカード６１０〜６３０がどのプロセッサに割込を通知するかは、ステップＳ９４８における初期化設定により設定される。
【０１１７】
予備ＩＯＰ４１０はＩＯカード６１０〜６３０のいずれかより入出力の終了を通知されると、ＩＯＰディスパッチャー３０を介して図１９に示す入出力終了処理（ステップＳ３３）を実行する（ステップＳ９６０）。ここでは、終了通知の発行元であるＩＯカードから入出力の終了情報を読み出し、必要な情報をエントリ８６Ｄ−ｒに格納する。この際、予備ＩＯＰ４１０は、入出力開始指示を発行してから終了割込みを受け付けるまでの入出力実行時間ｄＴが、これまでの最大値を示す場合、当該入出力実行時間ｄＴを最大ＩＯ実行時間８６Ｄ−Ｃ−２に格納する。予備ＩＯＰ４１０は、入出力終了割込に応じて、ＥＰＵ１１０〜１４０に入出力の終了を通知する（ステップＳ９６１）。尚、本処理において情報処理装置１は、遅延モードではないため、予備ＩＯＰ４１０は、入出力処理を終了する。
【０１１８】
ＥＰＵ１１０〜１４０は、予備ＩＯＰ４１０から入出力の終了を通知されると、図２６に示す入出力終了処理（Ｓ１１０）を実行する（ステップＳ９６２）。ここでは、入出力終了キュー８２Ｃが空でない場合、入出力終了キュー８２Ｃよりエントリ８２Ｃ−０がデキューされ、当該エントリ８２Ｃ−０に従ってソフトウェアに入出力の終了が通知される。これにより、ソフトウェアは入出力処理を終了する。
【０１１９】
本発明では、入出力処理モジュールの移動（切り替え）後は、予備ＩＯＰ４１０がＩＯＰ３０１と同様に入出力処理を行なう。ＩＯＰを変更しても、ＤＧＰ２１０によって入出力処理の要求先となるＩＤが変更されているため、ＥＰＵ１１０〜１４０及びソフトウェアは、入出力要求先を意識することなく通常動作と同様に入出力処理を実行できる。又、ＩＯカード６１０〜６３０は、ＩＯＰの移動完了後にルーティング設定を変更されるため、通常動作と同様な入出力処理が可能である。
【０１２０】
更に、ＩＯＰ３１０は、入出力開始指示を所定の時間（遅延時間）待機させ、この間を利用してＩＯＰ３１０から予備ＩＯＰ４１０に制御情報を転送する。これにより、入出力処理モジュールの移動（切り替え）速度が向上する。この遅延時間は、ソフトウェアで設定された入出力処理に要する時間（入出力タイムアウト時間）や最大ＩＯ実行時間を考慮して、ＩＯＰ３１０において設定される。このため、演算処理モジュール１００上で動作するソフトウェアから見ると、入出力処理は継続して行われているため入出力タイムアウトにはならない。すなわち、入出力処理モジュール３００から予備入出力処理モジュール４００への切り替えは、ソフトウェアからは意識されずに完了することができる。
【０１２１】
以上のように、本発明によれば、入出力処理モジュール３１０で障害の予兆が検出されたとき、障害が発生する前に、入出力処理モジュール３１０を動作させたまま予備入出力処理モジュール４１０に切り替えることが可能となる。
【０１２２】
以上、本発明の実施の形態を詳述してきたが、具体的な構成は上記実施の形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。図１の情報処理装置１において、演算処理モジュール１００、入出力処理モジュール３００、予備入出力処理モジュール４００、ＩＯモジュール５００の台数は任意である。又、ＩＯモジュール５００におけるスロット数も任意である。又、入出力処理モジュール３００の機能を予備入出力処理モジュール４００に移動した後、入出力処理モジュール３００又は図示しない他の入出力処理モジュールを予備入出力処理モジュールとして設定しても良い。
【符号の説明】
【０１２３】
１：情報処理装置
２：保守端末
３：周辺処理装置
１００：演算処理モジュール
２００：診断処理モジュール
３００：入出力処理モジュール
４００：予備入出力処理モジュール
５００：ＩＯモジュール
６００〜６３０：ＩＯカード
１０１：演算処理部
１０：入出力要求処理部
１１：入出力終了処理部
２０１：診断処理部
２０：モジュール移動処理部
２１：初期化処理部
２２：挿抜処理部
３０１：入出力処理部
３０：ＩＯＰディスパッチャー
３１：タイマ処理部
３２：入出力開始処理部
３３：入出力終了処理部
３４：移動開始処理部
３５：制御情報受信処理部
３６：予備起動処理部
３７：予備組込処理部
３８：制御情報受信処理部
【図１】
2010244396.tif 000003
【図２】
2010244396.tif 000004
【図３】
2010244396.tif 000005
【図４】
2010244396.tif 000006
【図５】
2010244396.tif 000007
【図６】
2010244396.tif 000008
【図７】
2010244396.tif 000009
【図８】
2010244396.tif 000010
【図９】
2010244396.tif 000011
【図１０】
2010244396.tif 000012
【図１１】
2010244396.tif 000013
【図１２】
2010244396.tif 000014
【図１３】
2010244396.tif 000015
【図１４】
2010244396.tif 000016
【図１５】
2010244396.tif 000017
【図１６】
2010244396.tif 000018
【図１７】
2010244396.tif 000019
【図１８】
2010244396.tif 000020
【図１９】
2010244396.tif 000021
【図２０】
2010244396.tif 000022
【図２１】
2010244396.tif 000023
【図２２】
2010244396.tif 000024
【図２３】
2010244396.tif 000025
【図２４】
2010244396.tif 000026
【図２５】
2010244396.tif 000027
【図２６】
2010244396.tif 000028
【図２７】
2010244396.tif 000029
【図２８】
2010244396.tif 000030