以下、添付図面を参照して、本発明による情報処理装置の実施の形態を詳細に説明する。以下の実施の形態では、挿抜可能な複数の処理モジュールを有するコンピュータ装置を一例に、本発明による情報処理装置を説明する。
(概要)
本発明による情報処理装置1には、入出力処理を妨げない所定の待機時間が設定され、この時間を、入出力処理モジュールの変更(移動)処理に利用することができる。詳細には、本発明では、入出力処理モジュールにおいてソフトウェアからの入出力要求を待機させ、その間に入出力処理に必要な制御情報(例えばIOカードを制御するための情報)を、切り替え先の入出力処理モジュールに転送する。これにより、入出力処理中においても入出力処理モジュールの切り替え処理を継続することができ、入出力処理モジュールの切り替えを短時間に実行することができる。
入出力処理モジュールの変更の際、診断処理モジュール200による制御に従い、入出力処理モジュール間における制御情報の転送や、IOカードの初期設定等が行なわれる。又、診断処理モジュール200によって、入出力要求先のIDが書き替えられる。このため、ソフトウェアは、入出力処理モジュールの変更を意識することなく入出力処理を実行することができる。すなわち、本発明によれば、ソフトウェアにおける入出力処理を停止させることなく障害対処や保守のために入出力処理モジュールを交換することができる。又、ソフトウェアは入出力処理モジュールの切り替え動作に関与しないため、障害処理やモジュール交換のための機能を追加する必要がない。
(構成)
図1から図15を参照して、本発明による情報処理装置1の実施の形態における構成の詳細を説明する。図1は、本発明による情報処理装置1の実施の形態における構成を示すブロック図である。
本発明による情報処理装置1は、コンピュータやサーバーに例示され、本発明によるファームウェアを実行することで後述する機能を実現する。図1を参照して、情報処理装置1は、機能毎にモジュールに分割されており、演算処理モジュール100、診断処理モジュール200、入出力処理モジュール300、400、IOモジュール500を具備する。各モジュールは、バス700によって接続され、情報処理装置1に対し挿抜可能に接続されている。又、IOモジュール500は複数の挿抜可能なスロットを持っており、IOカード600〜630を実装することにより周辺処理装置3等を接続することができる。ここでは、IOカード600を介して保守端末2が情報処理装置1に接続され、IOカード630を介して周辺処理装置3が情報処理装置1に接続される。保守端末2は、情報処理装置1は装置全体を制御し、保守するためのコンピュータ装置である。
入出力処理モジュール300、400は同じ構成であるが、本実施の形態では、初期設定として、入出力処理を行なうモジュールとして入出力処理モジュール300が使用され、入出力処理モジュール400は、その予備として使用される。以下、入出力処理モジュール400を予備入出力処理モジュールと称して説明する。
図2は、本発明による演算処理モジュール100の構成を示すブロック図である。図2を参照して、演算処理モジュール100は、複数のプロセッサ110〜140、ブリッジ150、メモリ160を備える。複数のプロセッサ110〜140のそれぞれの間及びブリッジ150との間はバス170を介して接続される。又、ブリッジ150とメモリ160との間は、バス180を介して接続される。ブリッジ150はバス700に接続される。これにより、複数のプロセッサ110〜140及びメモリ160は、ブリッジ150を介して他のモジュールと接続される。
メモリ160は、ソフトウェアメモリ領域810、ハードウェア制御領域820、演算処理モジュールファームウェア領域830を有している。プロセッサ110〜140は、ソフトウェアメモリ領域810に格納されたソフトウェア(OSや表計算などのアプリケーションプログラム)を実行する、所謂、演算処理プロセッサ(EPU)である。以下、プロセッサ110〜140をEPU110〜140と称す。
演算処理モジュール100は、情報処理装置1に依存した命令を実行するためのファームウェアを実装している。EPU110〜140は、演算処理モジュールファームウェア領域830に格納されたファームウェアを実行することで、図6に示す演算処理部101の機能を実現する。
図7は、本発明による演算処理部101の実施の形態における構成を示すブロック図である。図7を参照して、演算処理部101は、入出力要求処理部10、入出力終了処理部11を備える。演算処理部101は、従来と同様に他の演算処理に係る機能を有しているが、ここでは、入出力処理に関する機能のみを説明し、他の機能の説明は省略する。
入出力要求処理部10は、ソフトウェア側からの指示に応じて、入出力処理部モジュール300に対し、情報処理装置1と周辺処理装置3との間の入出力を指示する。入出力終了処理部11は、入出力処理モジュール300からの入出力終了通知に応じて、ソフトウェア側に対し入出力処理の終了を通知する。
図3は、本発明による診断処理モジュール200の構成を示すブロック図である。図3を参照して、診断処理モジュール200は、プロセッサ210、ブリッジ250、メモリ260を備える。プロセッサ210とブリッジ250との間はバス270を介して接続される。又、ブリッジ250とメモリ260との間は、バス280を介して接続される。ブリッジ250はバス700に接続される。これにより、プロセッサ210及びメモリ260は、ブリッジ250を介して他のモジュールと接続される。尚、診断処理モジュール200の処理量は、演算処理モジュール100に比べて小さいため、プロセッサの数は1つでよいが、複数実装されていても構わない。
診断処理モジュール200は、情報処理装置1の初期化処理や各モジュールの挿抜制御等の診断制御を行う。又、診断処理モジュール200は、保守端末2からの指示に応じて診断制御に係る処理を行なう。プロセッサ210は、診断処理を専門に行うため診断プロセッサ(DGP)と呼ばれる。以下、プロセッサ210をDGP210と称す。
診断処理モジュール200は、診断制御に係る各種制御を行うためのファームウェアを実装している。詳細には、メモリ260は、診断処理モジュールファームウェア領域840を有している。DGP210は、診断処理モジュールファームウェア領域840に格納されたファームウェアを実行することで、図7に示す診断処理部201の機能を実現する。
図8は、本発明による診断処理部201の実施の形態における構成を示すブロック図である。図8を参照して、診断処理部201は、モジュール移動処理部20、初期化処理部21、挿抜処理部22を備える。診断処理部201は、従来と同様に他の診断処理に係る機能を有しているが、ここでは、入出力処理モジュールの切り替え処理や初期化処理等に関する機能のみを説明し、他の機能の説明は省略する。
モジュール移動処理部20は入出力処理モジュール300の入出力処理中に、その機能(入出力処理機能)を予備入出力処理モジュール400に移動する。初期化処理部21は、ハードウェア制御領域820、演算処理モジュールファームウェア領域830、診断処理モジュールファームウェア領域840、入出力処理モジュールファームウェア領域850を初期化する。挿抜処理部22は、情報処理装置1から挿抜されるモジュールを監視し、挿抜されるモジュールや異常のあるモジュールを特定し、演算処理モジュール100に通知する。
図4は、本発明による入出力処理モジュール300の構成を示すブロック図である。図4を参照して、入出力処理モジュール300は、プロセッサ310、ブリッジ350、メモリ360を備える。プロセッサ310とブリッジ350との間はバス370を介して接続される。又、ブリッジ350とメモリ360との間は、バス380を介して接続される。ブリッジ350はバス700に接続される。これにより、プロセッサ310及びメモリ360は、ブリッジ350を介して他のモジュールと接続される。尚、入出力処理モジュール300の処理量は、演算処理モジュール100に比べて小さいため、プロセッサの数は1つでよいが、複数実装されていても構わない。
入出力処理モジュール300はEPU110〜140の指示に応じて、情報処理装置1と周辺処理装置3との間の入出力を制御する。プロセッサ310は入出力処理を専門に行うため入出力プロセッサ(IOP)と呼ばれる。以下、プロセッサ310をIOP310と称す。
入出力処理モジュール300は、入出力処理を行うためのファームウェアを実装している。詳細には、メモリ360は、入出力処理モジュールファームウェア領域850を有している。IOP310は、入出力処理モジュールファームウェア領域850に格納されたファームウェアを実行することで、図8に示す入出力処理部301の機能を実現する。
図9は、本発明による入出力処理部301の実施の形態における構成を示すブロック図である。図9を参照して、入出力処理部301は、IOPディスパッチャー30、タイマ処理部31、入出力開始処理部32、入出力終了処理部33、移動開始処理部34、制御情報送信処理部35、予備起動処理部36、予備組込処理部37、制御情報受信処理部38を備える。入出力処理部301は、従来と同様に、情報処理装置1と周辺処理装置3との間における入出力処理に係る機能を有しているが、ここでは、入出力処理モジュールの切り替え処理等に関する機能のみを説明し、他の機能の説明は省略する。
入出力処理モジュール300は、入出力処理を行なう際、IOPディスパッチャー30、タイマ処理部31、入出力開始処理部32、入出力終了処理部33、移動開始処理部34、制御情報送信処理部35の各機能を実現する。一方、予備として設定された場合、入出力処理モジュール300は、予備起動処理部36、予備組込処理部37、制御情報受信処理部38の各機能を実現する。
図5を参照して、予備入出力処理モジュール400は、入出力処理モジュール300と同様に、プロセッサ410、ブリッジ450、メモリ460を備える。プロセッサ410とブリッジ450との間はバス470を介して接続される。又、ブリッジ450とメモリ460との間は、バス480を介して接続される。ブリッジ450はバス700に接続される。これにより、プロセッサ410及びメモリ460は、ブリッジ450を介して他のモジュールと接続される。メモリ460は、予備入出力処理モジュールファームウェア領域860を有している。予備IOP410は、予備入出力処理モジュールファームウェア領域860に格納されたファームウェアを実行することで、図9に示す入出力処理部301を実現する。プロセッサ410は予備として用いられるため、以下では予備IOP410と称して説明する。
本実施の形態では、初期状態として、入出力処理モジュール300が入出力処理を行い、予備入出力処理モジュール400が予備として待機する。このため、当初、IOPディスパッチャー30、タイマ処理部31、入出力開始処理部32、入出力終了処理部33、移動開始処理部34の各機能は、入出力処理モジュール300によって実現され、予備起動処理部36、予備組込処理部37、制御情報受信処理部38の各機能は、予備入出力処理モジュール400によって実現される。
IOPディスパッチャー30は、EPU110〜140やDGP210からの指示(プロセッサ間割込)や、後述するIOカード610〜630からの割込に応じて、当該指示(割込)に対応する処理に分岐する。IOPディスパッチャー30は、通常モードか予備モードに応じて、分岐する処理を変更する。IOPディスパッチャー30によって分岐された処理は、入出力処理部301における他の機能ブロックによって実行される。
タイマ処理部31は、タイマ割込に応じて遅延タイマカウンタ85D−C−7を減算する。遅延タイマカウンタ85D−C−7は、後述する入出力処理(ステップS32)の開始時期を制御するタイマである。例えば、遅延タイマカウンタ85D−C−7の値が0のとき、タイムアウトとなり、入出力処理(ステップS32)が開始される。
入出力開始処理部32は、EPU110〜140からの入出力要求に応じて情報処理装置1と周辺処理装置3との間における入出力処理を開始する。入出力開始処理部32は、通常モードと遅延モードでその動作が異なる。入出力処理開始処理部32は、通常モードの場合、入出力要求に応じて直ちに入出力処理を開始するが、遅延モードの場合、遅延タイマカウンタ85D−C−7に応じて入出力開始処理を遅延する。
入出力終了処理部33は、IOカード(610〜630)からの割込に応じて情報処理装置1と周辺処理装置3との間における入出力処理の終了を制御する。又、入出力終了処理部33は、入出力処理の実行時間を求め、その最大値を記録する。
移動開始処理部34は、入出力処理に使用する入出力処理モジュールの切り替え処理の開始を制御する。詳細には、移動開始処理部34は、入出力処理モジュールの切り替えを開始する際、自身が属する入出力処理モジュール300を遅延モードに設定する。
制御情報送信処理部35は、入出力処理に必要な制御情報を予備入出力処理モジュール400に転送する。制御情報の転送は、移動開始処理部34からの転送指示や、入出力終了処理部33からの入出力処理終了通知に応じて行なわれる。又、制御情報の転送は、予備入出力処理モジュール400からの受信完了通知に応じて終了する。
予備起動処理部36、予備組込処理部37、制御情報受信処理部38は、予備として設定された予備入出力処理モジュール400によって実現される。予備起動処理部36は、DGP210からの予備起動指示に応じて、実装されているIOカード610〜630を使用できる状態に設定する。予備組込処理部37は、DGP(210)からの予備組込指示に応じて、IOカード610〜630からの割込通知先を予備IOP410に設定し、IOカード610〜630の初期設定を行う。すなわち、予備組込処理部37は、IOカード610〜630の通信先を予備入出力処理モジュール400に設定する組込処理を行なう。制御情報受信処理部38は、入出力処理モジュール300から制御情報の送信の通知に応じて、制御情報を受信(取得)する。
図6は、本発明によるIOモジュールの実施の形態における構成を示すブロック図である。IOモジュール500は、ブリッジ510を備え、バス700とバス520に接続している。バス520には複数の挿抜可能なスロットが接続され、IOカード600〜630を実装することができる。又、ブリッジ510およびIOカード600〜630は割込を通知するプロセッサを指定することができる。
以上のような構成により、情報処理装置1と周辺処理装置3との間の入出力処理を継続させながら、入出力処理機能を入出力処理モジュール300から予備入出力処理モジュール400に移動することができる。
次に、図10から図15を参照して、本発明による情報処理装置1のメモリ空間800の構造を説明する。図10は、本発明による情報処理装置1におけるメモリ空間800の一例を示す図である。情報処理装置1のメモリ空間800は各モジュール100、200、300、400のメモリ160、260、360、460が連結されることにより構成されている。メモリ空間800は、使用目的により、ソフトウェアメモリ領域810、ハードウェア制御領域820、演算処理モジュールファームウェア領域830、診断処理モジュールファームウェア領域840、入出力処理モジュールファームウェア領域850、予備入出力処理モジュールファームウェア領域860、予約領域870に分割されている。
図10を参照して、ソフトウェアメモリ領域810は、EPU110〜140上で動作するソフトウェア(OSや表計算などのアプリケーションプログラム)によって使用されるメモリ領域である。ソフトウェアを実行するEPU110〜140は、ソフトウェアメモリ領域810に自身のコードやデータを展開する。ソフトウェアメモリ領域810はメモリ160上に位置する。
ハードウェア制御領域820は、情報処理装置1に固有の情報を格納する領域である。ハードウェア制御領域820には、入出力要求キュー82R、入出力終了キュー82C、プロセッサIDテーブル82P、プロセッサ間通信領域82Dを含んでいる。ハードウェア制御領域820はメモリ160上に位置し、DGP210により初期化される。
演算処理モジュールファームウェア領域830は、EPU110〜140上で動作するファームウェアで使用される領域である。ファームウェアは、情報処理装置1においてソフトウェア側に対し固有の機能を提供するプログラムである。ソフトウェアは、定められた呼出手順によりファームウェアの機能(演算処理部101)を使用することができる。演算処理モジュールファームウェア領域830はファームウェアのコードを格納するファームウェアコード領域83Cと、ファームウェア(演算処理部101)によって使用されるデータを格納するデータ領域83Cに分割されている。演算処理モジュールファームウェア領域830はメモリ160上に位置し、DGP210により初期化される。
診断処理モジュールファームウェア領域840は、DGP210上で動作するファームウェアによって使用される領域である。ファームウェアは診断処理モジュール200の機能(診断処理部201)を実現するプログラムである。診断処理モジュールファームウェア領域840はファームウェアのコードを格納するファームウェアコード領域84Cと、ファームウェア(診断処理部201)によって使用されるデータを格納するデータ領域84Dに分割されている。診断処理モジュールファームウェア領域840はメモリ260上に位置し、DGP210によって初期化される。
入出力処理モジュールファームウェア領域850は、IOP310上で動作するファームウェアによって使用される領域である。ファームウェアは、入出力処理モジュール300の機能(入出力処理部301)を実現するプログラムである。入出力処理モジュールファームウェア領域850はファームウェアのファームウェアコードを格納するファームウェアコード領域85Cと、ファームウェア(入出力処理部301)によって使用されるデータを格納するデータ領域85Dに分割されている。入出力処理モジュールファームウェア領域850はメモリ360上に位置し、DGP210によって初期化される。
予備入出力処理モジュールファームウェア領域860は、予備IOP410上で動作するファームウェアによって使用される領域である。この領域は、入出力処理モジュールファームウェア領域850と同じである。違いは予備入出力処理モジュールファームウェア領域860は、予備IOP410によって使用されることと、メモリ460上に位置するだけである。
図11は、本発明に係る入出力要求キュー82Rの構造の一例を示す図である。図11を参照して、入出力要求キュー82RはEPU110〜140がIOP310に対して入出力要求を指示するためのものである。入出力要求キュー82Rは、EPU110〜140からの入出力要求情報(転送先アドレス、転送カウント、デバイス情報等)を格納したエントリ82R−mを、Headアドレス82R−HとTailアドレス82R−Tによってリンクされた構造となっている。EPU110〜140は、IOP310に入出力要求を行うとき、エントリ82R−mを作成し、Tailアドレス82R−Tにエントリ82R−mをエンキューする。IOP310はEPU110〜140から入出力要求を受け取ると、Headアドレス82R−Hよりエントリ82R−0をデキューする。入出力要求キュー82RはDGP210により初期化される。
図12は、本発明に係る入出力終了キュー82Cの構造に一例を示す図である。入出力終了キュー82Cの構造は基本的に入出力要求キュー82Rと同じである。入出力終了キュー82Cは、IOP310がEPU110〜140によって指示された入出力要求の結果をEPU110〜140に通知するためのもので、エントリ82C−mには入出力要求に対する終了情報(転送カウント、終了状態等)が格納される。IOP310は、入出力要求が終了したとき、エントリ82C−mを作成してTailアドレス82C−Tにエントリ82C−mをエンキューする。EPU110〜140は、IOP310より入出力終了を受け取ると、Headアドレス82C−Hよりエントリ82C−0をデキューする。入出力終了キュー82CはDGP210により初期化される。
図13は、本発明に係るプロセッサIDテーブル82Pの構造の一例を示す図である。図13を参照して、プロセッサIDテーブル82Pは、EPU110〜140、DGP210、IOP310、予備IOP410に対応づけられたプロセッサのIDを格納する。プロセッサIDテーブル82Pは、EPU110〜140からIOP310への入出力要求の通知などのプロセッサ間通信(プロセッサ間割込)に使用される。プロセッサIDテーブル82Pは、プロセッサの機能毎に固定のバイト82P−nを持っており、バイト82P−nにその機能に対応するプロセッサIDが格納されている。プロセッサIDテーブル82PはDGP210により初期化される。
図14は、本発明に係るプロセッサ間通信領域82Dの構造の一例を示す図である。図14を参照して、プロセッサ間通信領域82Dは、各プロセッサ毎に特定の領域82D−0〜82D−6を持ち、プロセッサ間でデータの送受信を行うの際に使用される。送信元プロセッサは、送信先プロセッサの通信領域82D−nに送信データを格納して送信先プロセッサに通知する(プロセッサ間割込)。送信先プロセッサは、その通知により通信領域82D−nを読み出すことでデータを受信する。このように、プロセッサ間のデータの送受信が行われる。各プロセッサ通信領域は、排他制御用のロックバイトを含み、指示のためのコマンドバイトなどを含んでいる。プロセッサ間通信領域82Dは、DGP210により初期化される。
図15は、本発明に係る入出力処理モジュールファームウェア領域850におけるデータ領域85Dの構造の一例を示す図である。図15を参照して、データ領域85Dはファームウェア(入出力処理部301)によって使用される内容に応じて分割された複数のエントリ85D−qを有している。各エントリ85D−qには、エントリの内容を示すID85D−q−1と、エントリ85D−rの内容をファームウェア(入出力処理部301)が変更したときに必要に応じて設定する変更フラグ85D−q−2を含んでいる。
又、使用する入出力処理モジュール300が複数ある場合、データ領域85Dは、複数の入出力処理モジュール300に共通な情報を格納するエントリ85D−Cを持つ。エントリ85D−Cは、予備モードフラグ85D−C−3、遅延モードフラグ85D−C−4、IO実行中カウンタ85D−C−5、最大IO実行時間85D−C−6、遅延タイマカウンタ85D−C−7を有する。予備モードフラグ85D−C−3は、入出力処理モジュール300が予備モジュールかどうかを示す。遅延モードフラグ85D−C−4は、遅延モードかどうかを示す。遅延モードの場合、移動処理(使用する入出力処理モジュールの切り替え処理)において入出力処理の開始が遅延される。IO実行中カウンタ85D−C−5は、現在実行中の入出力処理の処理時間のカウントに利用される。最大IO実行時間85D−C−6には、現在までに実行した入出力処理における最大処理時間が格納される。遅延タイマカウンタ85D−C−7は、入出力処理の開始を遅延させるための遅延タイマのカウントを格納する。
更に、データ領域85Dは、入出力処理単位にその情報を格納するエントリ85D−rを持つ。エントリ85D−rは、入出力処理を開始した時刻を格納する開始時間85D−r−8を含んでいる。
(入出力処理モジュールの動作)
次に、図16から図21を参照して、入出力処理モジュール300における動作の詳細を説明する。
図16は、本発明による入出力処理モジュール300におけるIOPディスパッチャー30の動作の一例を示すフローチャートである。図16を参照して、IOPディスパッチャー30は、EPU110〜140やDGP210からプロセッサ間割込や、IOカード610〜630からの割込等の要求を読み出す(ステップS1)。そして、要求の内容に応じた処理を入出力処理部301の他の機能ブロックに実行させる(ステップS2〜S10)。IOPディスパッチャー30における分岐処理は、予備モードかどうかに応じて対応する処理が異なる。
入出力処理モジュールが予備モードではない場合、すなわち、入出力処理モジュールが入出力処理モジュール300として使用される場合、ステップS3〜ステップS7の処理が行われる(ステップS2No)。詳細には、IOPディスパッチャー30は、遅延モードフラグ85D−C−4を参照し、予備モードか通常動作モードかを特定する(ステップS2)。ここで、入出力処理モジュールが通常動作モードである場合、IOPディスパッチャー30は、読みだした要求が、タイマ割込み、入出力処理の開始要求、入出力処理の終了要求、入出力処理モジュールの切替開始要求(移動開始要求)、制御情報送信要求のいずれかであるかを判定する。そして、読み出した要求の内容に応じた処理(ステップS31〜S35)に移行する。
一方、入出力処理モジュールが予備モードの場合、すなわち予備入出力処理モジュール400として使用される場合、ステップS8からS10の処理が行われる(ステップS2Yes)。詳細には、入出力処理モジュールが予備モードである場合、IOPディスパッチャー30は、読み出した要求が、予備起動要求、予備組込要求、制御情報受信要求のいずれかであるかを判定する。そして、読み出した要求の内容に応じた処理(ステップS36〜S38)に移行する。尚、図16に示すフローチャートに記述した処理は、本発明に関係する処理のみである。
図17は、本発明による入出力処理モジュール300におけるタイマ処理(ステップS31)の一例を示すフローチャートである。一般的にプロセッサは一定間隔でタイマ割込を発生させており、タイマ処理部31は、その割込により図17に示すタイマ処理(ステップS31)を実行する。タイマ処理部31は、遅延タイマが起動中の場合、遅延タイマカウンタ85D−C−7を減算する(ステップS101Yes、S102)。その後、タイマ処理部31は、遅延タイマカウンタ85D−C−7がタイムアウトしたかどうかを確認する(ステップS103)。ここで、タイムアウトが確認されると入出力開始処理に移行する(ステップS103Yes、S32)。一方、遅延タイマが停止している場合や遅延タイマがタイムアウトしている場合、タイマ処理部31は動作(タイマ処理)を停止する。
ここで、遅延タイマの起動、停止、タイムアウトは、遅延タイマカウンタ85D−C−7の値により判断できる。遅延タイマカウンタ85D−C−7の値が、0とALL Fh以外の値である場合“起動中”を示し、ALL Fhの場合“停止中”を示し、0の場合“タイムアウト”を示す。尚、フローチャートに記述した処理は本発明に関係する処理のみである。
図18は、本発明による入出力処理モジュール300における入出力開始処理(ステップS32)の一例を示すフローチャートである。入出力開始処理部32は、EPU110〜140からの入出力要求により情報処理装置1と周辺処理装置3との間で入出力を開始する。入出力開始処理部32は、遅延モードかどうかにより実行される処理が異なる。遅延モードでない場合、すなわち入出力処理モジュール300として機能する場合、入出力開始処理部32は、直ちに入出力処理を開始する(ステップS201No)。詳細には、通常動作モードの場合、入出力開始処理部32は、入出力要求キュー82Rにおける先頭エントリ82R−0をデキューする(ステップS202)。次に、入出力開始処理部32は、データ転送を制御するのに必要な情報をエントリ85D−rに格納する(ステップS203)。ここで、当該エントリ85D−rが、予備入出力処理モジュール400に切り替えるときに、情報を移動する必要があるエントリ85D−rである場合、入出力開始処理部32は変更フラグ85D−r−2を設定する。これは、ファームウェアに依存する動作であり、ファームウェア自身が変更フラグ85D−r−2を設定すべきかどうかの判断論理を持っている。
続いて、入出力開始処理部32は、入出力処理に使用するIOカード630に入出力要求を行う(ステップS204)。又、入出力開始処理部32は、エントリ85D−rの開始時刻85D−r−8に現在の時刻を設定する(ステップS205)。更に、入出力開始処理部32は、エントリ85D−CのIO実行中カウンタ85D−C−5に1を加算する(ステップS206)。尚、現在の時刻は一般的にプロセッサ310に実装された一定間隔でカウントアップされるタイマカウンタより取得される。入出力要求キュー82Rが空の場合、入出力開始処理部32は入出力開始処理処理を終了する(ステップS207Yes)。ここで、入出力要求キュー82Rに他のエントリがある場合、全てのエントリをデキューするまで、デキュー処理、エントリ85−rへの情報の格納、入出力要求、現在時刻の設定、及びエントリに対応するIO実行中カウンタの加算処理を繰り返す(ステップS207No)。
一方、入出力処理モジュールが遅延モードの場合、入出力開始処理部32は、入出力処理の実行状態と遅延タイマの動作状態を確認し、入出力処理の開始を最大IO実行時間(85D−C−6)に基づいて遅延させるよう処理する(ステップS201No、ステップS208〜S215)。詳細には、遅延モードである場合、入出力開始処理部32は、IO実行中カウンタ850−C−5を参照して入出力処理中であるかどうかを確認する(ステップS208)。ここでは、IO実行中カウンタ850−C−5が0か否かによって入出力処理中であるかが確認される。IO実行中カウンタ85D−C−5の値が0以外の値である場合、すなわち入出力処理中である場合ステップS202に移行し、通常の入出力開始処理に戻る(ステップS208No)。これは、入出力処理中に入出力処理の開始を遅延させても入出力処理の実行されていない十分な期間を確保できないためである。一方、IO実行中カウンタ85D−C−5の値が0であり、入出力処理が実行中でない場合、入出力開始処理部32は、遅延タイマカウンタ85D−C−7を参照して遅延タイマがタイムアウトしているかどうか確認する(ステップS208Yes、S209)。ここで、遅延タイマがタイムアウトしていた場合、入出力開始の遅延可能時間が経過したことになる。この場合、入出力開始処理部32は、遅延タイマカウンタ85D−C−7にALL Fhを格納して遅延タイマを停止させ、通常の入出力開始処理(ステップS202以降の処理)に戻る(ステップS209Yes、S210)。遅延タイマがタイムアウトしていない場合、入出力開始処理部32は、遅延タイマが既に起動しているかどうか確認する(ステップS209No、S211)。
遅延タイマが起動中は、入出力処理を遅延する遅延期間であるため、入出力開始処理部32は処理を停止する(ステップS211Yes)。一方、遅延タイマが起動していない場合、遅延タイマを起動して入出力処理を遅延する遅延期間に移行するため、入出力開始処理部32は、遅延タイマカウンタ85D−C−7に遅延時間をセットする(ステップS211No、S212〜S215)。詳細には、遅延タイマが起動していない場合、入出力開始処理部32は、予め定められているソフトウェアにおける入出力タイムアウト時間31−TO“TO”と最大IO実行時間85D−C−6“MAXIO”との差を、遅延可能な時間“nDelay”として算出する(ステップS212)。ここで、入力開始処理部32は、算出した遅延可能時間“nDelay”の長さに応じて、遅延タイマに設定する時間を決定する。遅延可能時間“nDelay”が、予め定められている標準IO開始遅延時間31−DL“sDelay”より短い場合、入出力開始処理部32は、“nDelay”を遅延タイマカウンタ85D−C−7に設定して遅延タイマを起動する(ステップS213Yes、S214)。すなわち、現時点における最大IO実行時間85D−C−6“MAXIO”が、所定の長さより長い場合、予め設定された遅延時間“sDelay”より短い時間“nDelay”が遅延時間として設定される。一方、遅延可能時間“nDelay”が、標準IO開始遅延時間31−DL“sDelay”以上である場合、入出力開始処理部32は、“sDelay”を遅延タイマカウンタ85D−C−7に設定して遅延タイマを起動する(ステップS213No、S215)。すなわち、現時点における最大IO実行時間85D−C−6“MAXIO”が、所定の長さより短くなると、予め設定された遅延時間“sDelay”が遅延時間として設定される。
これにより、少なくとも、予め設定された遅延時間“sDelay”より短い時間、入出力処理の開始を遅延することができる。又、最大IO実行時間85D−C−6が所定の時間より短い間は、最大IO実行時間85−C−6と入出力タイムアウト時間31−TOとの差が、入出力処理の開始を遅延する時間となる。従って、本発明では、EPU110〜140からの入出力要求に対し、所定の時間以上で最大IO実行時間に応じた時間、入出力処理の開始を遅延することができる。この期間中、IOP310から予備IOP410に対して制御情報を送信することが可能となる。又、入出力処理モジュール300から予備入出力処理モジュール400への移動(切り替え)が容易となる。
図19は、本発明による入出力処理モジュール300における入出力終了処理(ステップS33)の一例を示すフローチャートである。入出力終了処理部33は、IOカード610〜630からの割込に応じて、IOカード610〜630から終了情報を読み出す(ステップS301)。入出力終了処理部33は、終了情報に基づき必要な情報をエントリ85D−rに格納する(ステップS302)。ここで、当該エントリ85D−rが、予備入出力処理モジュール400の切り替える際、予備入出力処理モジュール400に移動する必要がある場合、変更フラグ85D−r−2を設定する。
次に、入出力終了処理部33は、エントリ85D−rの開始時刻85D−r−8と現在の時刻の差を入出力実行時間“dT”として算出する(ステップS303)。入出力実行時間“dT”が予め定められた入出力タイムアウト時間31−TO“TO”より長い場合、入出力終了処理部33は、入出力処理がタイムアウトしていると判定し、ステップS307以降の入出力終了処理に移行する(ステップS304No)。この場合、処理がタイムアウトしているため、最大IO実行時間85D−C−5の更新は行なわれない。又、入出力実行時間“dT”がエントリ85D−Cの最大IO実行時間85−C−2以下である場合も、入出力終了処理部33は、最大IO実行時間85D−C−5の更新を行なわずステップS307以降の入出力終了処理に移行する(ステップS304Yes、S305No)。
一方、入出力実行時間“dT”が入出力タイムアウト時間31−TO“TO”より短く、最大IO実行時間85−C−5“MAXIO”よりも大きい場合、入出力終了処理部33は、入力出力実行時間“dT”を最大IO実行時間85D−C−2に格納し、変更フラグ85D−C−2を設定する(ステップS304Yes、S305Yes、S306)。最大IO実行時間85D−C−2を更新するとステップS207以降の入出力終了処理に移行する。
実行時間dTが最大実行時間であるか否かの検証を終了すると、入出力終了処理部33は、IO実行中カウンタ85D−C−5を1減算する(ステップS307)。そして、入出力終了処理部33は、入出力終了情報エントリ82C−pを作成し、入出力終了キュー82CにエンキューしてEPU110〜140に入出力の終了を通知する(ステップS308、S309)。又、入出力終了処理部33は、IOカード610〜630の割込要因をリセットする(ステップS310)。ステップS307〜S310の処理は、この図19に示す順に限らず任意に変更できる。ステップS307〜S310の処理が終了すると、入出力終了処理部33は、遅延モードフラグ85D−C−4を参照して遅延モードかどうかを確認する(ステップS311)。ここで、遅延モードの場合、後述する制御情報送信処理(ステップS35)に移行し(ステップS311Yes)、遅延モードではない通常動作モードの場合、処理を終了する(ステップS311No)。
図20は、本発明による入出力処理モジュール300における移動開始処理(S34)の一例を示すフローチャートである。図20を参照して、使用する入出力処理モジュール300を予備入出力処理モジュール400に切り替える際、移動開始処理部34は、エントリ85D−Cの遅延モードフラグ85D−C−4を設定する(ステップS401)。これにより、情報処理装置1は遅延モードに設定される。この後、制御情報送信処理(ステップS35)に移行する。
図21は、本発明による入出力処理モジュール300における制御情報送信処理(ステップS35)の一例を示すフローチャートである。移動開始処理(ステップS35)によって遅延モードに設定されると、入出力処理モジュール300は、入出力処理モジュール300として機能するための制御情報を、予備入出力処理モジュール400に送信する。制御情報送信処理部35は、遅延モードである場合、IO実行中カウンタ85D−C−5を参照し、入出力処理中かどうか確認する(ステップS501)。ここで、入出力処理中である場合、制御情報送信処理部35は制御情報送信処理を終了する(ステップS501No)。これは、入出力処理中はエントリ85D−qの変更頻度が高いため、予備IOP410に制御情報を送信しても効率が悪いためである。一方、入出力処理が行われていない場合、制御情報送信処理部35は、データ領域85Dの全エントリ85D−qの変更フラグ85D−q−2を確認する(ステップS502)。ここで、変更フラグが設定されているエントリが存在する場合、制御情報送信処理部35は、当該エントリ85D−qの変更フラグ85D−q−2をクリアし、当該エントリ85D−qの内容を予備IOP通信領域82D−5に格納する(ステップS503No、S504)。そして、制御情報送信処理部35は、予備IOP410に制御情報の送信を通知する(ステップS505)。一方、変更フラグ85D−q−2が全てクリアされている場合、全ての必要な情報は予備IOP410に送信済みであるので、制御情報送信処理部35は、DGP210に移動完了を報告する(ステップS506)。これによりIOP310は、IOPとしての機能を停止し、EPU110〜140からの要求やIOカード610〜630からの割込を受け付けなくなる(ステップS507)。ただし、DGP210からの要求は受け付ける。
(予備入出力処理モジュールの動作)
次に、図22から図24を参照して、予備入出力処理モジュール400における動作の詳細を説明する。
図22は、本発明による予備入出力処理モジュール400における制御情報受信処理(ステップS38)の一例を示すフローチャートである。制御情報受信処理部38は、予備IOP通信領域82D−5から受信した制御情報(エントリ85D−q)を読み出してID85D−q−1を確認する(ステップS801)。制御情報受信処理部38は、予備IOP410側の同一ID86D−q−1を持つエントリ86D−1に、受信したエントリ85D−1を格納する(ステップS802)。そして、制御情報受信処理部38は、IOP310に受信完了を報告する(ステップS803)。ここで、予備IOP410のデータ領域86DとIOP310のデータ領域85Dの構造は同じであり、同一のエントリ85D−q、86D−qを持っている。IOP310は制御情報を送信するとき、エントリ85D−qそのものを予備IOP410の通信領域82D−5に格納しているので、予備IOP410はそれを読み出してID85D−q−1を確認し、自身の同一エントリ86D−qに格納する。
図23は、本発明による予備入出力処理モジュール410における予備起動処理(ステップS36)の一例を示すフローチャートである。予備起動処理部36は、入出力処理モジュールの移動(切り替え)に先がけて、DGP210からの予備起動指示に応じて予備データ領域86Dを初期化する(ステップS601)。予備起動処理部36は、初期化後、IOモジュール500をスキャンして実装されているIOカード610〜630の情報を読み出し、エントリ86D−qに設定する(ステップS601〜S603)。そして、予備起動処理部36は、DGP210に予備起動完了を通知する(ステップS604)。この処理はデータ領域86Dの初期化とIOカード610〜630からの情報の読み出しだけであるので、実行中の入出力に影響を与えない。尚、予備モードフラグ86D−C−3は、情報処理装置1の初期化時に設定されており、予備IOP410は情報処理装置1の初期化時より予備IOPとして動作している。
図24は、本発明による予備入出力処理モジュール400における予備組込処理(ステップS37)の一例を示すフローチャートである。予備組込処理部37は、DGP210からの予備組込指示に応じて、IOカード610〜630をリセットし、割込通知先を予備IOP410に設定する(ステップS701、S702)。予備組込処理部37は、データ領域86Dのエントリ86D−qに従ってIOカード610〜630の初期設定を行う(ステップS703)。そして、予備組込処理部37は、エントリ86D−Cの予備モードフラグ86D−C−3をクリアしてDGP210に予備起動の完了を通知する(ステップS704、S705)。予備起動が完了するとステップS32の入出力開始処理に移行する。
(演算処理モジュールの動作)
次に、図25及び図26を参照して、演算処理モジュール100における動作の詳細を説明する。
図25は、本発明による演算処理モジュール100における入出力要求処理(ステップS100)の一例を示すフローチャートである。入出力要求処理部10は、ソフトウェアからの入出力指示に応じてエントリ82R−mを作成する(ステップS111)。入出力要求処理部10は、作成したエントリ82R−mを入出力要求キュー82Rにエンキューする(ステップS112)。そして、入出力要求部10は、プロセッサIDテーブル82PよりIOP310のPID82P−4を読み出し、当該IOP310に対する入出力要求を行う(ステップS113、S114)。
図26は、本発明による演算処理モジュール100における入出力終了処理(ステップS110)の一例を示すフローチャートである。入出力終了処理部11は、IOP310からの入出力の終了通知に応じて、入出力終了キュー82Cが空かどうか確認し、空でない場合、入出力終了キュー82Cよりエントリ82C−0をデキューする(ステップS121No、S122)。この場合、入出力終了処理部11は、デキューしたエントリ82C−0に従ってソフトウェアに入出力の終了を通知する(ステップS123)。ステップS121〜S123の処理を入出力終了キュー82が空になるまで繰り返す。ソフトウェアは、入出力の終了通知に応じて入出力処理を終了する。
(診断処理モジュールの動作)
次に、図27を参照して、診断処理モジュール200における動作の詳細を説明する。
図27は、本発明による診断処理モジュール200における入出力処理モジュール移動処理(ステップS200)の一例を示すフローチャートである。モジュール移動処理部20は、予備入出力処理モジュール400を入出力処理モジュール300として機能させるための入出力処理モジュール移動処理を行う。モジュール移動処理部20は、保守端末2から入出力処理モジュールの移動指示に応じて、予備IOP410に予備起動を指示し、その起動完了を待ち合わせる(ステップS211、S212)。モジュール移動処理部20は、予備IOP410より予備起動の完了を通知されると、IOP310に移動開始を指示し、IOP310からの移動完了報告を待ち合わせる(ステップS213、S214)。モジュール移動処理部20は、IOP310より移動完了の通知を受けると、プロセッサIDテーブル82PのIOPエントリ82P−4と予備IOPエントリ82P−5のプロセッサIDを入れ替える(ステップS215)。これにより、EPU110〜140からは、予備IOP410が使用するIOP(IOP310)となったように見え、これ以降、入出力要求は予備IOP410に通知されるようになる。そして、モジュール移動処理部20は、予備IOP410に予備組込を指示してその完了を待ち合わせる(ステップS216、S217)。尚、モジュール移動処理部20は、入出力処理モジュールの挿抜や障害の予兆の発生に応じて予備IOP410に対して予備起動を指示しても良い。
(情報処理装置の動作)
先ず、本発明による情報処理装置1の初期化処理を説明する。電源投入により情報処理装置1は初期化される。詳細には、ソフトウェアメモリ領域810及びハードウェア制御領域820が初期化され、各ファームウェアコード領域83C〜86Cには対応するファームウェアコードが展開される。又、各ファームウェアコード領域83C〜86Cは、対応するプロセッサ210〜410によって実行され、各データ領域83D〜86Dが初期化される。更に、ソフトウェアメモリ領域810にはソフトウェアが周辺処理装置3などよりロードされ、プロセッサ110〜140によって実行される。これにより、情報処理装置1は各種処理を実行できる状態となる。以上のように情報処理装置1の初期化処理は一般的な処理装置と同様に行なわれる。
次に、図16から図28を参照して、本発明による情報処理装置1の入出力動作、及び入出力処理モジュールの移動(切り替え)動作の詳細を説明する。図28は、情報処理装置1における入出力動作(ステップS901〜S909)、入出力処理モジュールの移動動作(ステップS910〜S949)、入出力処理モジュールの移動後における入出力動作(ステップS950〜S958)を示すシーケンス図である。
図28を参照して、情報処理装置1の通常時における入出力動作について説明する。情報処理装置1と周辺処理装置3との間で入出力を行うとき、ソフトウェアはEPU110〜140に入出力指示を発行する。EPU110〜140はソフトウェアより入出力指示を受けると、図25に示す入出力要求処理(ステップS100)を実行する(ステップS901)。ここで、EPU110〜140は、エントリ82R−mを作成して入出力要求キュー82Rにエンキューし、プロセッサIDテーブル82PよりIOP310のPID82P−4を読み出して入出力要求を行う(ステップS902)。
IOP310はEPU110〜140より入出力要求を受けると、IOPディスパッチャー30を介して図18に示す入出力開始処理(ステップS32)を実行する(ステップS903)。ここでは、遅延モードではないため、IOP310は、入出力要求キュー82Rよりエントリ82R−0をデキューしてデータ転送を制御するのに必要な情報をデータ領域85Dのエントリ85D−rに格納する。続いて、IOP310は、対象となるIOカード610〜630に入出力開始指示を行う(ステップS904)。
IOカード610〜630は、IOP310より入出力の開始指示を受けると、その指示内容に従って情報処理装置1と周辺処理装置3との間における入出力処理を行う(ステップS905)。入出力処理が終了したIOカード610〜630は、IOP310に終了を示す割込(入出力終了割込)を通知する(ステップS906)。尚、IOカード610〜630がどのプロセッサに割込を通知するかは、情報処理装置1の初期化時にIOカード毎に設定される。この処理は一般的な技術と同様にIOP310が初期化時に行う。
IOP310はIOカード610〜630のいずれかより入出力の終了を通知されると、IOPディスパッチャー30を介して図19に示す入出力終了処理(ステップS33)を実行する(ステップS907)+。ここでは、終了通知の発行元であるIOカードから入出力の終了情報を読み出し、必要な情報をエントリ85D−rに格納する。この際、IOP310は、入出力開始指示を発行してから終了割込を受け付けるまでの入出力実行時間dTが、これまでの最大値を示す場合、当該入出力実行時間dTを最大IO実行時間85D−C−2に格納する。IOP310は、入出力終了割込に応じて、EPU110〜140に入出力の終了を通知する(ステップS908)。尚、本処理において情報処理装置1は、遅延モードではないため、IOP310は、入出力処理を終了する。
EPU110〜140は、IOP310から入出力の終了を通知されると、図26に示す入出力終了処理(S110)を実行する(ステップS909)。ここでは、入出力終了キュー82Cが空でない場合、入出力終了キュー82Cよりエントリ82C−0がデキューされ、当該エントリ82C−0に従ってソフトウェアに入出力の終了が通知される。これにより、ソフトウェアは入出力処理を終了する。
以上のように、通常時における情報処理装置1と周辺処理装置3との間のデータ転送が行われ、最大IO実行時間85D−C−6には現在までに実行した入出力処理における最大IO実行時間MAXIOが格納される。IOP310は、最大IO実行時間MAXIOと、予め定められているタイムアウト時間TOとの差分を、入出力の遅延が可能な時間(遅延可能時間)と予測することができる。又、IO実行中カウンタ85D−C−5は、入出力開始処理(ステップS903(S32))で1加算され、入出力終了処理(ステップS907(S33))で1減算される。IOP310は、IO実行中カウンタ85D−C−5を確認することにより入出力処理が実行中かどうか判断できる。尚、最大IO実行時間85D−C−6の初期値として、情報処理装置1の初期化時に予め情報処理装置の設計時に決定された値が設定されていることが好ましい。
次に、図28を参照して、入出力処理モジュール300を予備入出力処理モジュール400に移動する(切り替える)動作を説明する。入出力処理モジュール300を予備入出力処理モジュール400に移動させる場合、保守員が保守端末2を操作してDGP210に移動指示を行う(ステップS910、S911)。DGP210は移動指示を受けると、図27に示す入出力処理モジュール移動処理(ステップS200)を実行する(ステップS912、S913、S916、S917、S942、S943、S947)。先ず、DGP210は、予備IOP410に予備起動を指示し、その起動完了を待ち合わせる(ステップS913)。
予備IOP410は、DGP210より予備起動を指示されるとIOPディスパッチャー30を介して図23に示す予備起動処理(ステップS36)を実行する(ステップS914、S915)。ここで予備IOP410は、実装されているIOカードの情報を読み出してエントリ86D−qに設定し、DGP210に予備起動完了を通知する。
DGP210は予備IOP410から予備起動の完了を通知されると、IOP310に移動開始を指示し、IOP310からの移動完了報告を待ち合わせる(ステップS916、S917)。
IOP310は、DGP210から移動指示を受けるとIOPディスパッチャー30を介して図20に示す移動開始処理(ステップS34)を実行する(ステップS918)。ここで、IOP310は、入出力処理モジュール300を遅延モードに設定した後、図21に示す制御情報送信処理(ステップS35)を実行する。入出力処理中ではなく、変更フラグが設定されている場合、IOP310は、変更フラグが設定されているエントリ85D−qの内容を予備IOP通信領域82D−5に格納して予備IOP410に制御情報の送信を通知する(ステップS919)。
予備IOP410は、IOP310から制御情報の送信を通知されると、IOPディスパッチャー30を介して図22に示す制御情報受信処理(ステップS38)を実行する(ステップS914、S915)。ここで、予備IOP410は、制御情報(エントリ85D−q)を読み出してID(85D−q−1)を確認し、予備IOP410側の同一ID86D−q−1を持つエントリ86D−1に受信したエントリ85D−1を格納する。そして、予備IOP410は、IOP310に受信完了を報告する。
IOP310は、予備IOP410から制御情報の受信完了を通知されると、IOPディスパッチャー30を介して再度、図21に示す制御情報送信処理(ステップS35)を実行する(ステップS920〜S922)。そして、全ての制御情報がIOP310から予備IOP410に転送されるまで、上述と同様に制御情報送信処理(ステップS35)及び制御情報受信処理(ステップS38)が繰り返し実行される。
一方、入出力処理中に入出力処理モジュールの移動要求を指示される場合や、移動処理中にEPU110〜140から入出力要求を指示される場合がある。入出力処理中に移動要求を受けたIOP310は、移動開始処理(ステップS34)によって遅延モードに設定し、制御情報送信処理を行なわず入出力処理を優先的に実行する(図21、ステップS501No)。この場合、移動要求に応じて遅延モードに設定されるため、入出力処理が終了した後(図19、ステップS311Yes)に制御情報送信処理(ステップS35)が実行される。又、入出力処理モジュールの移動処理中に入出力要求が指示される場合、IOP301は、入出力処理を優先的に実行し、IO実行中カウンタの設定に応じて制御情報送信処理を終了する(図21、ステップS501No)。この場合も、既に遅延モードに設定されているため、入出力処理が終了した後(図19、ステップS311Yes)に制御情報送信処理(ステップS35)は再実行される。
本一例では、入出力処理モジュールの移動処理中に、入出力要求が発行されるものとして説明する。例えば、制御情報送信処理と制御情報受信処理が繰り返され(ステップS922〜ステップS926)、制御情報送信処理(ステップS926)の途中において、EPU110〜140から入力指示がIOP310に発行される(ステップS927、S928)。この場合、情報処理装置1は、既に遅延モードに設定され、且つIO実行中カウンタが0であるため、IOP310は、図18に示す入出力開始処理(ステップS32)におけるステップS208〜S215の処理によって、制御情報の送信に必要な期間を遅延期間として設定する(ステップS929)。設定された遅延時間の間、EPU110〜140からの入出力要求に対し入出力処理の開始が遅延され、この間、IOP310から予備IOP410に対して制御情報を送信する時間が確保される。
本発明では、EPU110〜140からの入出力要求指示を受けてから、所定の期間(遅延時間)待機した後、IOカード610〜630に対する入出力開始指示を発行している。この期間中、IOP310は制御情報を送信することができるため、予備IOP410への制御情報の送信を継続することができる。又、この期間中、EPU110〜140は、入出力要求指示を発行中であるため、次の入出力要求指示を待機する必要がある。通常、入出力要求指示は頻繁に発行され、この間、従来のIOPは、他の処理(例えば制御情報の送信)を中断してIOカード610〜630に対する入出力開始指示を発行する。しかし、本発明によるIOP310は、入出力要求指示から入力開始指示までの遅延時間中に制御情報の送信が可能であるため、入出力要求指示の頻度が高い間でも制御情報を予備IOP410に移動する時間を確保することができる。従って、本発明によれば、IOP310として機能させるための制御情報の移動速度を向上させることができる。又、遅延時間は、ソフトウェアのタイムアウト時間を超えないように設定されるため、ソフトウェアから要求される入出力処理を妨げることなく制御情報を移動する時間を確保することができる。
IOP310は、ステップS929からステップS933の間、設定された遅延時間だけIOカード610〜630への入出力開始指示の発行を待機する。その間、IOP310は、制御情報を予備IOP410に出力し、予備IOPから受信完了報告の通知を受ける(ステップS930〜S932)。IOP310は、遅延タイマがタイムアウトすると、入出力開始指示を対象となるIOカード610〜630に発行する(ステップS933、S934)。
IOカード610〜630は、IOP310より入出力の開始指示を受けると、その指示内容に従って情報処理装置1と周辺処理装置3との間における入出力処理を行う(ステップS935)。入出力処理が終了したIOカード610〜630は、IOP310に終了を示す割込(入出力終了割込)を通知する(ステップS936)。
IOP310はIOカード610〜630のいずれかより入出力の終了を通知されると、IOPディスパッチャー30を介して図19に示す入出力終了処理(ステップS33)を実行する(ステップS937)。その後、IOP310は、入出力終了割込に応じて、EPU110〜140に入出力の終了を通知する(ステップS938)。尚、本処理において情報処理装置1が遅延モードであるため、IOP310は、再度、制御情報送信処理(ステップS35)に移行し、全ての制御情報がIOP310から予備IOP410に転送されるまで、上述と同様に制御情報送信処理(ステップS35)及び制御情報受信処理(ステップS38)を繰り返す(ステップS940〜S943)。
一方、EPU110〜140は、IOP310から入出力の終了を通知されると、図26に示す入出力終了処理(ステップS110)を実行する(ステップS939)。ここでは、入出力終了キュー82Cが空でない場合、入出力終了キュー82Cよりエントリ82C−0がデキューされ、当該エントリ82C−0に従ってソフトウェアに入出力の終了が通知される。これにより、ソフトウェアは入出力処理を終了する。
IOP310は全ての制御情報を予備IOP410に転送すると、DGP210に移動完了を報告し、IOPとしての機能を終了する(ステップS944、S945)。DGP210は、IOP310から移動完了の通知を受けると、プロセッサIDテーブル82PのIOPエントリ82P−4と予備IOPエントリ82P−5のプロセッサIDを入れ替える(ステップS946)。これにより、EPU110〜140から見ると、予備IOP410がIOP310になったように見え、これ以降、入出力要求は予備IOP410に通知されるようになる。そして、DGP210は、予備IOP410に予備組込を指示してその完了を待ち合わせる(ステップS947)。
予備IOP410は、DGP210から予備組込を指示されると、図24に示す予備組込処理(ステップS37)を実行する(ステップS944〜S946)。詳細には、予備IOP410は、IOカード610〜630をリセットして割込通知先を予備IOP410に設定し、データ領域86Dのエントリ86D−qに従ってIOカード610〜630の初期設定を行う(ステップS947〜S949)。そして、予備IOP410は、DGP210に予備起動の完了を通知する(ステップS950)。DGP210は、予備IOP410より予備起動の完了を通知されると、保守端末2に対してIOP移動完了報告を通知し、処理を終了する(ステップS951、S952)。保守端末2は、IOP移動完了報告をユーザに対して視認可能に出力する(ステップS953)。
このように、予備IOP410は、IOP310から受信した制御情報でIOカード610〜630を初期化する。これにより、以降の入出力処理においてもIOP310から受信した制御情報に従って処理が行われる。すなわち、IOカード610〜630は、IOPが変更されたことを意識することなく入出力処理を継続する。一方、IOP310の機能は制御情報とともに予備IOP410に移動しているため、EPU110〜140もIOPの変更を意識することなく入出力要求を行なう。
次に、図28を参照して、IOPの移動処理後における入出力処理を説明する。ソフトウェアからEPU110〜140に入出力指示が発行されたEPU110〜140は、IOPの移動後も通常動作時と同様に、図25に示す入出力要求処理(ステップS100)を実行する(ステップS954)。ここで、EPU110〜140は、エントリ82R−mを作成して入出力要求キュー82Rにエンキューし、プロセッサIDテーブル82Pより予備IOP410のPID82P−4を読み出して入出力要求を行う(ステップS955)。
予備IOP410はEPU110〜140より入出力要求を受けると、IOPディスパッチャー30を介して図18に示す入出力開始処理(ステップS32)を実行する(ステップS956)。ここでは、遅延モードではないため、予備IOP410は、入出力要求キュー82Rよりエントリ82R−0をデキューしてデータ転送を制御するのに必要な情報をデータ領域86Dのエントリ86D−rに格納する。続いて、予備IOP410は、対象となるIOカード610〜630に入出力開始指示を行う(ステップS957)。
IOカード610〜630は、予備IOP410より入出力の開始指示を受けると、その指示内容に従って情報処理装置1と周辺処理装置3との間における入出力処理を行う(ステップS958)。入出力処理が終了したIOカード610〜630は、予備IOP410に終了を示す割込(入出力終了割込)を通知する(ステップS959)。尚、IOカード610〜630がどのプロセッサに割込を通知するかは、ステップS948における初期化設定により設定される。
予備IOP410はIOカード610〜630のいずれかより入出力の終了を通知されると、IOPディスパッチャー30を介して図19に示す入出力終了処理(ステップS33)を実行する(ステップS960)。ここでは、終了通知の発行元であるIOカードから入出力の終了情報を読み出し、必要な情報をエントリ86D−rに格納する。この際、予備IOP410は、入出力開始指示を発行してから終了割込みを受け付けるまでの入出力実行時間dTが、これまでの最大値を示す場合、当該入出力実行時間dTを最大IO実行時間86D−C−2に格納する。予備IOP410は、入出力終了割込に応じて、EPU110〜140に入出力の終了を通知する(ステップS961)。尚、本処理において情報処理装置1は、遅延モードではないため、予備IOP410は、入出力処理を終了する。
EPU110〜140は、予備IOP410から入出力の終了を通知されると、図26に示す入出力終了処理(S110)を実行する(ステップS962)。ここでは、入出力終了キュー82Cが空でない場合、入出力終了キュー82Cよりエントリ82C−0がデキューされ、当該エントリ82C−0に従ってソフトウェアに入出力の終了が通知される。これにより、ソフトウェアは入出力処理を終了する。
本発明では、入出力処理モジュールの移動(切り替え)後は、予備IOP410がIOP301と同様に入出力処理を行なう。IOPを変更しても、DGP210によって入出力処理の要求先となるIDが変更されているため、EPU110〜140及びソフトウェアは、入出力要求先を意識することなく通常動作と同様に入出力処理を実行できる。又、IOカード610〜630は、IOPの移動完了後にルーティング設定を変更されるため、通常動作と同様な入出力処理が可能である。
更に、IOP310は、入出力開始指示を所定の時間(遅延時間)待機させ、この間を利用してIOP310から予備IOP410に制御情報を転送する。これにより、入出力処理モジュールの移動(切り替え)速度が向上する。この遅延時間は、ソフトウェアで設定された入出力処理に要する時間(入出力タイムアウト時間)や最大IO実行時間を考慮して、IOP310において設定される。このため、演算処理モジュール100上で動作するソフトウェアから見ると、入出力処理は継続して行われているため入出力タイムアウトにはならない。すなわち、入出力処理モジュール300から予備入出力処理モジュール400への切り替えは、ソフトウェアからは意識されずに完了することができる。
以上のように、本発明によれば、入出力処理モジュール310で障害の予兆が検出されたとき、障害が発生する前に、入出力処理モジュール310を動作させたまま予備入出力処理モジュール410に切り替えることが可能となる。
以上、本発明の実施の形態を詳述してきたが、具体的な構成は上記実施の形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。図1の情報処理装置1において、演算処理モジュール100、入出力処理モジュール300、予備入出力処理モジュール400、IOモジュール500の台数は任意である。又、IOモジュール500におけるスロット数も任意である。又、入出力処理モジュール300の機能を予備入出力処理モジュール400に移動した後、入出力処理モジュール300又は図示しない他の入出力処理モジュールを予備入出力処理モジュールとして設定しても良い。