処理装置上で制御プログラムが動作し、該制御プログラムの制御下で複数のオペレーティングシステムOSの動作が可能であり、I/Oデバイスとの間で転送データを送受信するチャネルアダプタを具備し、該チャネルアダプタはPCIバスを介して前記処理装置に接続されると供にポートを介して前記I/Oデバイスに接続され、前記チャネルアダプタは該チャネルアダプタを制御するためのチャネル制御レジスタを有し、各OSのチャネルドライバが転送データの入出力処理を行うための入出力処理制御データを作成すると共に前記チャネルアダプタを制御するデータ処理システムであって、各OSのチャネルドライバの代わりに実際に前記チャネルアダプタを制御する仮想チャネルドライバを前記制御プログラム内に設け、各OSのチャネルドライバが前記チャネル制御レジスタにアクセスする時、前記制御プログラムが前記アクセスをインターセプトし、前記仮想チャネルドライバが実際に前記チャネル制御レジスタにアクセスすることを特徴とするデータ処理システム。前記チャネル制御レジスタはI/O処理を起動するためのI/O処理イネーブルレジスタを含み、各OSのチャネルドライバが前記I/O処理イネーブルレジスタに1をセットする時、前記制御プログラムが前記セットアクセスをインターセプトし、前記仮想チャネルドライバが実際に前記I/O処理イネーブルレジスタに1をセットすることを特徴とする請求項1記載のデータ処理システム。上記従来技術の場合、オープン系サーバにてサポートされているPCIバスインタフェースを持つPCII/Oデバイスに対する複数OSによる共用は実現されていない。また、メインフレームにおいてPCII/Oデバイスに対する複数OSによる共用は実現されているが、パッケージ上にデータバッファと入出力処理制御データ用にローカルメモリ、及び該データバッファと入出力処理制御データのコントローラを設けている。コントローラ、ローカルメモリを使用することにより、性能悪化、及びコストの増大を招いている。課題1PCIのような標準仕様のバスに対応し、複数のOSにて一つのチャネルアダプタを共用できるようにする。課題2PCIバスインタフェースを持つデバイスに対して、ハードウェアから成るコントローラ、ローカルメモリを設けることなく複数のOSにて一つのチャネルアダプタを共用できるようにする。処理装置上で制御プログラムが動作し、該制御プログラムの制御下で複数のオペレーティングシステムOSの動作が可能であり、I/Oデバイスとの間で転送データを送受信するチャネルアダプタを具備し、該チャネルアダプタはPCIバスを介して前記処理装置に接続されると供にポートを介して前記I/Oデバイスに接続され、前記チャネルアダプタは該チャネルアダプタを制御するためのチャネル制御レジスタを有し、各OSのチャネルドライバが転送データの入出力処理を行うための入出力処理制御データを作成すると共に前記チャネルアダプタを制御するデータ処理システムであって、各OSのチャネルドライバの代わりに実際に前記チャネルアダプタを制御する仮想チャネルドライバを前記制御プログラム内に設け、各OSのチャネルドライバが前記チャネル制御レジスタにアクセスする時、前記制御プログラムが前記アクセスをインターセプトし、前記仮想チャネルドライバが実際に前記チャネル制御レジスタにアクセスする。さらに、前記チャネル制御レジスタはI/O処理を起動するためのI/O処理イネーブルレジスタを含み、各OSのチャネルドライバが前記I/O処理イネーブルレジスタに1をセットする時、前記制御プログラムが前記セットアクセスをインターセプトし、前記仮想チャネルドライバが実際に前記I/O処理イネーブルレジスタに1をセットする。本発明によれば、複数のOSからの入出力I/O処理を同時に実行できるチャネルアダプタを提供できる。複数OSによるPCII/Oデバイスの共用を、PCII/Oデバイスを制御するためのコントローラとローカルメモリを必要とせず、ソフトウェアによって実現した。オープン系サーバがサポートしている業界標準規格のチャネルアダプタとして、ANSIAmericanNationalStandardsInstituteによって規格が作成されているファイバチャネル、さらにはIBTAInfiniBandTradeAssociationによって規格が作成されているInfiniBand等がある。ここでは、入出力処理を行うための入出力処理制御データとしてInfiniBand等にて使用しているSendQueueとReceiveQueueから成るQueuePair、CompletionQueueを使用し、そして、仮想アドレスと、該仮想アドレスを物理アドレスに変換するアドレス変換テーブルTPTを用いるチャネルアダプタを仮定する。まず、入出力処理の概要について説明する。図2はデータ処理システムの構成例を示す。メモリアクセス制御チップ203はプロセッサ204、205、あるいはチャネルアダプタ206からの主記憶MS200に対するメモリアクセスを主に制御し、メモリアクセス制御チップ203とチャネルアダプタ206はPCIバスにて接続し、メモリアクセス制御チップ203とプロセッサ204、205はシステム固有仕様のホストバスにて接続している。チャネルアダプタ206はポートを1つ持ち、スイッチ207を介して、I/Oデバイス208と接続する。LPAR機能をサポートしている該データ処理システムは、1つのMS200を、例えば各LPARに2MBずつメモリを割り当て、各LPAR上のOSは該割り当てられた2MBのメモリを使用してオペレーションを行う。該チャネルアダプタ206は、該データ処理システムに対して、PCIバスにて接続され、PCIバス接続するデバイスとして標準的に所有しているPCIコンフィギュレーションレジスタを含み、該チャネルアダプタを制御するための制御レジスタとしてチャネル制御レジスタを持っている。図3にチャネル制御レジスタの内容を示すが詳細については後述する。続いて、入出力処理I/O処理を行うためのソフトウェアとハードウェアのインタフェースについて述べる。各OSはSendQueueとReceiveQueueから成るQueuePairQP、及び処理を終了したQP識別子をキューイングするCompletionQueueを用いてデータ転送を行い、該QPの作成、CQの制御、チャネルアダプタに対するデータ転送処理の起動等の処理はOS内のチャネルドライバが行う。図4にQPとCQの概要を示す。SendQueue、及びReceiveQueueはそれぞれデータバッファを指すアドレスを含むDescriptorとデータバッファから成る。データを送信する場合、SendQueueのDescriptor401に送信するデータバッファ403の物理アドレスをセットする。データ受信の場合、ReceiveQueueのDescriptor404に受信データをストアするデータバッファ405の物理アドレスをセットする。各QueuePairは識別子を持ち、図4の例では100QP100の識別子を持っているものであり、チャネルアダプタは同時に複数のQPに対する処理が可能である。また、各Descriptorを指す物理アドレスはアドレス変換テーブルTPT406に保持する。TPTは一つの物理的に連続した領域であり、該チャネルアダプタが使用する全QPのSendQueue用Descriptorアドレス、及びReceiveQueue用Descriptorアドレスを保持する。ここで、TPT内の各SendQueue用、ReceiveQueue用Descriptorアドレスレジスタは16バイトからなり、最上位ビットの値が‘1’のとき、当該Descriptorアドレスが有効であることを示し、下位8バイトが当該Descriptorの物理アドレスを示す。CQもそれぞれ識別子を持ち、チャネルアダプタが処理を終えたQPの識別子と、SendQueue、あるいはReceiveQueueのどちらに対して処理を終えたかの情報を含む。ここではCQの各エントリーは16バイトから成り、上位8バイトの最上位ビットが‘1’のとき該エントリーが有効であることを示し、下位8バイト中の上位4バイトが処理を終えたQP識別子を示し、該下位8バイト中の下位4バイトが‘1’のときは、SendQueue、‘0’のときはReceiveQueueに対する処理を終えたことを示すものとする。図3のチャネル制御レジスタ300内に定義したTPTベースアドレスレジスタ303の値は、アドレス変換テーブルTPT406の先頭アドレス物理アドレスを指すものであり、チャネルドライバがセットする。チャネルアダプタはTPTベースアドレスレジスタ303の値を使用してアドレス変換テーブルTPT406へのアクセスを行う。図5にSendQueueの詳細データ構造を示す。図5において、DB_AD501はデータバッファアドレス領域の先頭アドレス物理アドレスを示す8バイトの領域から成り、FLAG503は、I/O処理が正常終了したかあるいはエラーにて終了したかを示す情報、エラー発生時のエラーの種類示すエラー情報、及び、次に処理すべき別のDescriptorが存在するかどうかを示す情報NextDescriptor有無、更に、データ転送を行う相手先のQP番号、関連するCQ識別子CQと該CQを指す物理アドレスを含む。次に処理すべきDescriptorが存在する場合、8バイト長から成るNextDescriptor502に次のDescriptorの先頭アドレス物理アドレスがセットされる。なお、本実施例においては、最初のDescriptorのDB_ADはコマンド領域を示し、2番目以降のDescriptorのDB_ADがデータバッファを示すものとする。図5はSendQueueの例を示すが、ReceiveQueueのフォーマットも同じであり、DB_ADが指すところに受信データをストアする。I/O処理における起動方法として、ここではチャネルドライバが、前記チャネル制御レジスタ300内に定義されたQPレジスタ302に処理を行うQP識別子QPを、Send/Receiveレジスタ306にSendQueue、あるいはReceiveQueueのどちらであるかを示す情報をセットする。また、TPTオフセットアドレスレジスタ304に仮想アドレスとして、当該QPのDescriptorアドレスを保持している領域を示す、TPTベースアドレスからのオフセットアドレスをセットし、I/O処理イネーブルレジスタ305に‘1’をwriteすることにより該チャネルアダプタにI/O起動を指示するものとする。I/O処理を行うとき、チャネルドライバはDB_AD501に物理アドレスをセットし、DB_ADの指しているところにコマンド256バイト領域504をセットする。該コマンド領域は、コマンドの他に、I/O処理を行う相手先ポートを示すターゲットID、及び該ポート配下に存在するデバイスを示すLUN等の情報も含む。なお、コマンド領域の256バイトに引き続く256バイトの領域を該コマンドに対する応答フレームをストアするコマンド応答情報領域505とする。続いて、FLAG503の情報をセットする。相手先のQP、及び該Descriptorに関連するCQとしてCQ1をセットし、該CQ1の先頭アドレス物理アドレスをセットする。また、別のDescriptor510を定義し、該Descriptor510の先頭アドレスをNextDescriptor502にセットし、該Descriptor510のDB_AD507のアドレスが示すところに送信用のデータバッファ506が存在する。データバッファを可変長にする場合は、セグメントFLAG509内にデータ長を示す情報を含めれば良いが、本実施例では説明簡略化のためデータバッファのサイズを4Kバイト固定長とし、データ長をセットしない。チャネルドライバは上記のようにSendQueueを作成し、I/O処理を起動する。なお、各Descriptor内にFLAGが定義されるが、相手先のQP番号、関連するCQ、及び該CQの物理アドレスは先頭Descriptor内のFLAGの値が有効であるものとする。チャネルアダプタはチャネルドライバからのI/O処理起動を認識すると、上記チャネル制御レジスタ内のTPTオフセットアドレスレジスタ304にセットされたオフセット仮想アドレスとアドレス変換テーブルTPT406から該当するDescriptorの先頭アドレス物理アドレスを得る。該物理アドレスを使用することによって、該当Descriptorのフェッチ処理を行い、フェッチしたDescriptor情報からコマンド504、及び、送信用データバッファ506のフェッチを行う。そして、コマンド領域504内に指定されているターゲットID、及びFLAG503内に指定された相手先のQPに向けてデータ転送を行う。プロトコルに基づきデータ転送を行い、相手先から処理終了を示す応答フレームを受信したとき、前記コマンド応答情報領域505に該応答フレームをストアする。該応答フレームのストアを完了した後、FLAG503内の情報に基づき該当するCompletionQueue1CQ1407に処理を終えたQP識別子、SendQueueを示す情報、当該エントリーの有効ビットをセットし、チャネル制御レジスタ内の完了CQレジスタ308にCQである‘1’をセットし、I/O処理終了を示すI/O割り込みをOSに対して上げる。なお、エラー発生時はFLAG503にエラー情報をセットする。該OS内のチャネルドライバは該I/O割り込みを認識することによって、完了CQレジスタ308をreadし、該当するCQ1の内容から該チャネルアダプタに対して起動したI/O処理の終了処理を行う。以上がI/O処理の動作概要である。図6はソフトウェアとチャネルアダプタの関係を示し、QP000~QP999604までの1000個のQP、CQ00~CQ99607までの100個のCQを使用して入出力処理を行う例を示す。続いて、本願の一実施例について説明する。図1は本願の特徴を示した、一実施例である。なお、本実施例では、2つのOSが1つのチャネルアダプタを共用する場合について説明する。図1のデータ処理システム上にて、LPAR制御プログラム101の制御の下でLPAR1とLPAR2の2つのLPARが立ち上がり、LPAR1においてOS1105が稼動し、LPAR2においてOS2106が稼動することを示す。各チャネルドライバはLPAR制御プログラム101から、該チャネルドライバが動作するLPARを取得できる関数を備えているものとする。本実施例では、チャネルドライバ112はLPAR1上において、チャネルドライバ113はLPAR2上において動作するという情報を得る。仮想チャネルドライバ102はチャネルアダプタ100を実際に制御するドライバであり、チャネルドライバ112、及びチャネルドライバ113がチャネルアダプタ100のチャネル制御レジスタ114のアクセス等を行うときは、該アクセスのための関数をLPAR制御プログラム101がインタセプトし、仮想チャネルドライバ102が実際のチャネル制御レジスタ114のアクセスを行う。本データ処理システムは図7に示すように各OS上において使用可能なQueuePairQPとCompletionQueueの識別子と個数を構成情報の一部として定義しておく。上記にて該チャネルアダプタは例として、QP000~QP9999までのQP1000個を処理可能であり、CQ00~CQ99までのCQ100個を処理可能と述べたが、これらの資源を各OSに分配し、異なるOS間において同じ識別子をもつQP、あるいはCQが共用されないように構成情報に定義する。図7の例ではLPAR1では、QP100から100個、つまりQP100~199まで使用可能、またCQはCQ1の1個のみ使用可能であることを示す。同様にLPAR2では、QP200から100個、つまりQP200~299まで使用可能であり、またCQはCQ2の1個のみ使用可能であることを示す。チャネルドライバは該チャネルドライバが動作するLPARから上記使用可能QP、及びCQの情報を前記構成情報からカーネル関数等を使用して得る。同様にLPAR制御プログラムもLPARと各LPARにおいて使用されるQP、及びCQの情報を前記構成情報からカーネル関数等を使用して得る。チャネルドライバ112はQP100~QP199までを制御し、TPT110に対して、QP100~QP199のSendQueue、及びReceiveQueueのDescriptorアドレスのみをセットし、最上位ビットのアドレス有効ビットを‘1’にセットする。チャネルドライバ112はTPT110に各Descriptorのアドレスをセットし終わると、チャネル制御レジスタ114内のTPTベースアドレスレジスタ303にTPTの先頭アドレスを書き込み、更にTPTが有効になったことを知らせるため、TPT有効レジスタ307に‘1’を書き込むよう処理を行う。ここで、LPAR制御プログラム101はチャネルドライバ112がTPTベースアドレスレジスタ303に値を書き込む関数をインタセプトし、仮想チャネルドライバ102がTPT110とは異なる仮想アドレス変換テーブルVTPT103の先頭アドレスを該チャネル制御レジスタ114のTPTベースアドレスレジスタ303に書き込む。また、LPAR制御プログラムはチャネルドライバ112がTPT有効レジスタ307に値を書き込む関数をインターセプトし、仮想チャネルドライバ102がTPT110のアドレス有効ビットが‘1’であることころの該当アドレスをVTPT103にコピーし、LPAR制御プログラム101がTPT有効レジスタ307に‘1’を書き込む。同様に、チャネルドライバ113はQP200~QP299までを制御し、TPT111に対して、QP200~QP299のSendQueue、及びReceiveQueueのDescriptorアドレスのみをセットし、最上位ビットのアドレス有効ビットを‘1’にセットする。チャネルドライバ113はTPT111に各Descriptorのアドレスをセットし終わると、チャネル制御レジスタ114内のTPTベースアドレスレジスタ303にTPTの先頭アドレスを書き込み、更にTPT有効レジスタにTPTが有効になったことを知らせるため、該TPT有効レジスタ307に‘1’を書き込むよう処理を行う。ここで上記と同様に、LPAR制御プログラム101は、チャネルドライバ113がTPTベースアドレスレジスタ303に値を書き込む関数をインタセプトし、仮想チャネルドライバ102がVTPT103の先頭アドレスを該チャネル制御レジスタ114のTPTベースアドレスレジスタに書き込む。既に値がセットされている場合、同じ値が上書きされる。また、LPAR制御プログラム101はチャネルドライバ113がTPT有効レジスタ307に値を書き込む前記関数をインターセプトし、仮想チャネルドライバ102がTPT111のアドレス有効ビットが‘1’であることころの該当アドレスをVTPT103にコピーし、LPAR制御プログラム101がTPT有効レジスタに‘1’を書き込む。図8に示すように、チャネルドライバ112はTPT110においてQP100~QP199のDescriptorに対してのみ値をセットし、またチャネルドライバ113はTPT111においてQP200~QP299のDescriptorに対してのみ値をセットするため、各OSが異なるDescriptorを使用することによって共用されることもなく、各TPT先頭からのオフセットがずれている。よって、仮想チャネルドライバ102がVTPT103を作成するとき、TPT110、111の値をTPTベースアドレスからのオフセットを変更することなく容易にコピーでき、該VTPT103を作成し直すのみで、転送用データのコピー、及び、Descriptor等の他の入出力制御データの変更を伴わない。なお、本実施例では、仮想チャネルドライバ102がLPAR制御プログラム101内に存在する方式を述べているが、別の方式として、図9に示すようにLPAR3にOS3901を立ち上げ、OS3901内にて仮想チャネルドライバ102を動作させ、VTPT103をOS3制御メモリ内に作成することも可能である。チャネルアダプタ100はTPT有効レジスタが‘1’にセットされたとき、VTPTをフェッチし、チャネルアダプタ内に保持して、最新のVTPTを使用する。チャネル制御レジスタ114内のTPTベースアドレスレジスタ303の値はVTPT103の先頭アドレスがセットされているため、チャネルアダプタ100はVTPT103を使用することになる。次に、OS1105のチャネルドライバ112が図4、及び図5に示すQP100、及びCQ1を使用してデータ送信処理を行う場合について述べる。該チャネルドライバ112はQP100のSendQueueにおいて、DB_AD501に物理アドレスをセットし、DB_AD501の指しているところにコマンド256バイト領域504をセットする。また、別のDescriptor510を定義し、該Descriptor510の先頭アドレスをNextDescriptor502にセットし、該Descriptor510のDB_AD507のアドレスが示すところに送信用のデータバッファ506が存在する。チャネルドライバ112はFLAG509内に関連するCQとして1、及び該CQ1の先頭アドレスをセットし、I/O処理起動のためチャネル制御レジスタ114内のTPTオフセットアドレスレジスタ304にカーネル関数を使用して値を書き込む。このとき、LPAR制御プログラム101は該関数をインタセプトし、仮想チャネルドライバ102がTPTオフセットアドレスレジスタ304に値を書き込む。続いて、チャネルドライバ112はカーネル関数を使用してチャネル制御レジスタ114内のQPレジスタ302にQPを、I/O処理イネーブルレジスタ305に‘1’をセットしようとする。このときLPAR制御プログラム101は該関数をインタセプトし、仮想チャネルドライバ102がQPレジスタ302にQPを、I/O処理イネーブルレジスタ305に‘1’を書き込む。チャネルアダプタ100は仮想チャネルドライバ102からのI/O処理起動を認識すると、上記チャネル制御レジスタ114内のTPTオフセットアドレスレジスタ304にセットされたオフセットとVTPT103から該当するDescriptorの先頭アドレスを得る。該先頭アドレスを使用することによって、該当Descriptorのフェッチ処理を行い、フェッチしたDescriptor情報からコマンド504、及び、送信用データバッファ506のフェッチを行い、コマンド領域504内に指定されているターゲットID、及びFLAG503内に指定された相手先のQPに向けてデータ転送を行う。プロトコルに基づきデータ転送を行い、相手先からの応答フレームを受信したとき、前記コマンド応答情報領域505に該応答フレームをストアする。該応答フレームのストアを完了した後、CQ1にQP100とSendQueueを示す情報をセットし、チャネル制御レジスタ114内の完了CQレジスタ308にCPである‘1’をセットした後、I/O処理終了を示すI/O割り込みをOSに対して上げる。LPAR制御プログラム101は該I/O割り込みをインタセプトし、仮想チャネルドライバ102がチャネル制御レジスタ内の完了CQレジスタ308の値をreadし、CQ1に対する処理が終わったことを認識し、該処理がLPAR1に対するものであることがわかるので、インタセプトしたI/O割り込みをOS1に対して上げる。OS1のチャネルドライバ112は該I/O割り込みを認識することによって、CQ1の内容をreadし、該I/O処理の終了処理を行う。OS2106のチャネルドライバ113はQP200~QP299、及びCQ2を使用してI/O処理を行う。その他のI/O処理の概要はOS1105が行うものと同様である。上記実施例では、データを送信する場合を述べているが、データを受信した場合、受信したフレームに指定されたQPが入っているため、該指定されたQPのReceiveQueueを使用してI/O処理を行うことによりデータの受信も可能である。以上、本発明にかかわる実施例を説明してきたが、PCIバスインタフェースを持つデバイスに対して、ハードウェアから成るコントローラ、ローカルメモリを設けることなく、チャネルドライバが動作する仮想計算機番号を制御プログラムから取得し、仮想アドレスを物理アドレスに変換するテーブルのみを作成しなおすことによって、転送用データのコピーを行うことも無く、入出力制御データを変更しないで、複数のOSから共用できるチャネル装置を提供できる。