(57)【要約】【課題】複数のＯＳが稼動するデータ処理システムにおいて、入出力処理を行うための制御データを変更することなく、アドレス変換テーブルを作成するのみで複数のＯＳから共用できるチャネルアダプタを提供する。【解決手段】１個のチャネルアダプタに対して複数のＯＳがそれぞれ識別子の異なる入出力処理制御データを使用し、異なるＯＳ間において前記チャネルアダプタに対する入出力処理制御データを共用することなく入出力処理を行う。また、データ処理システムが、各ＯＳが作成した複数のアドレス変換テーブルを一つの仮想アドレス変換テーブルに作成し直し、チャネルアダプタが、該仮想アドレス変換テーブルを使用して複数のＯＳ上の入出力処理制御データを処理する。【選択図】図１
2006085400.tif 000002
【特許請求の範囲】
【請求項１】
中央処理装置上で制御プログラムが動作し、該制御プログラムの制御下で複数のオペレーティングシステム（ＯＳ）の動作が可能であり、データを送受信するチャネルアダプタを具備したデータ処理システムにおいて、該データ処理システムは、前記各ＯＳと前記チャネルアダプタとの間でそれぞれに識別子を持った入出力処理制御データを用いて入出力処理を行うデータ処理システムであり、前記各ＯＳ対応に各ＯＳが使用可能な入出力処理制御データの識別子を排他的に定義した構成情報を備え、前記チャネルアダプタは複数の入出力処理制御データを処理可能であり、前記各ＯＳは、前記構成情報に定義された使用可能な識別子に対応した入出力処理制御データを使用することにより、１個の前記チャネルアダプタにて複数のＯＳがそれぞれ識別子の異なる入出力処理制御データを制御し、異なるＯＳ間において前記チャネルアダプタに対する入出力処理制御データを共用することなく入出力処理を行うことを特徴としたデータ処理システム。
【請求項２】
前記各ＯＳ上において、前記チャネルアダプタとＯＳのインタフェースである前記入出力処理制御データを制御するチャネルドライバが動作し、該チャネルドライバは、該チャネルドライバが動作するＯＳのシステム上の識別子を示す仮想計算機番号を前記制御プログラムから得る手段を具備し、前記構成情報には前記仮想計算機番号と使用可能な入出力処理制御データの識別子との対応が定義され、前記各チャネルドライバが、前記構成情報に定義された使用可能な識別子に対応した入出力処理制御データを使用することを特徴とした請求項1記載のデータ処理システム。
【請求項３】
前記チャネルドライバと前記チャネルアダプタ間インターフェースにおいて、前記入出力処理制御データを指し示すアドレスが仮想アドレスであり、該仮想アドレスを物理アドレスに変換するためにアドレス変換テーブルを使用することにより入出力処理を行うデータ処理システムであり、前記チャネルドライバが前記制御プログラムから得た仮想計算機番号と前記構成情報から得た使用可能な入出力処理制御データの識別子により、該使用可能な入出力処理制御データに対するアドレス変換テーブルを作成し、該データ処理システムは、各ＯＳのチャネルドライバが作成した複数の該アドレス変換テーブルを一つの仮想アドレス変換テーブルに作成する手段を備え、前記チャネルアダプタが、前記仮想アドレス変換テーブルを使用して複数のＯＳ上の入出力処理制御データを処理することにより、各ＯＳ上に作成された入出力処理制御データの変更を行わないで前記チャネルアダプタが、複数のＯＳに対する入出力処理を行うことを特徴とした請求項２記載のデータ処理システム。
【請求項４】
前記入出力処理制御データは複数のキューから構成され、各キューはデータバッファと該データバッファを指すアドレスを含むディスクプリタから成ることを特徴とした請求項１記載のデータ処理システム。
【請求項５】
前記キューはデータ送信用の送信キューとデータ受信用の受信キューから成ることを特徴とした請求項４記載のデータ処理システム。
【請求項６】
前記各キューのディスクプリタを指すアドレスを格納するアドレス変換テーブルを備えることを特徴とした請求項４記載のデータ処理システム。
【請求項７】
前記アドレス変換テーブルの先頭アドレスをセットするアドレスレジスタが前記チャネルアダプタに設けられていることを特徴とした請求項６記載のデータ処理システム。
【請求項８】
前記各ＯＳの各チャネルドライバは当該ＯＳ用の前記アドレス変換テーブルの先頭アドレスを前記チャネルアダプタの前記アドレスレジスタにセットした後に前記チャネルアダプタにＩ／Ｏ起動を指示することを特徴とした請求項７記載のデータ処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ転送を行うデータ処理システムに関するものであり、特に、一つのシステム上にて複数のＯＳが稼動し、一つのチャネルアダプタにて複数のＯＳに対する処理を同時に行うコンピュータ装置に関するものである。
【背景技術】
【０００２】
これまで、メインフレームでは、一つのシステム上において制御プログラムの下で複数のＯＳを動作させるＬＰＡＲ（Ｌｏｇｉｃａｌ Ｐａｒｔｉｔｉｏｎ）機能をサポートしてきたが、今般、該ＬＰＡＲ機能をメインフレームだけではなく、オープン系サーバもサポートし始めている。オープン系サーバにて該ＬＰＡＲ機能をサポートするにあたり、入出力処理を行うチャネルアダプタをサーバのスロットに挿入し、ホスト・プロセッサと接続する業界標準規格の手段として、ＰＣＩ−ＳＩＧにて策定されたＰＣＩ（Peripheral Component Interchange）バスを用いる構成が広く用いられている。ＰＣＩバスの場合、チャネルアダプタのようなデバイス一つに対して、標準的に所持しているＰＣＩコンフィギュレーションレジスタを含み、該デバイスを制御するための制御レジスタを一つしか保持しておらず、該理由からも複数のＯＳによって共用することは困難であった。
【０００３】
上記のような、ＬＰＡＲ機能をサポートしたシステムの例として特開２００２−４１３０６がある。一つのシステム上において複数のＯＳが動作可能であるが、ＰＣＩバスをインタフェースにもつＰＣＩ  Ｉ／Ｏアダプタに対しては複数ＯＳによる共用は実現されておらず、各ＰＣＩ  Ｉ／Ｏアダプタに対してそれぞれ一つのＯＳを割り当てるものである。
【０００４】
その他の例としてメインフレーム等でＬＰＡＲ機能を実現している特開２００２−９９４３７がある。概要を図１０に示す。メインフレームにおいて、ＰＣＩ  Ｉ／ＯデバイスのようなＬＡＮアダプタ１００３を制御するため、該ＬＡＮアダプタを搭載するＬＡＮパッケージ１０００内にハードウェアコントローラ１００１と、ローカルメモリ１００２を設けることによって複数ＯＳによる共用を実現している。コントローラ１００１内において該ＬＡＮアダプタ用ドライバ１００５が動作する。コントローラ１００１はＰＣＩバス又はシステム固有仕様バス１００７に接続され、ＬＡＮアダプタ１００３とＰＣＩバス１００４で接続されている。
【０００５】
図１１に実装について詳細に述べる。該コントローラ１００１がＯＳ１からの入出力起動を受け付けると、システムメモリ上の転送用データ１１０５をＬＡＮパッケージ内のローカルメモリ１００２に該ＯＳ１に対する転送データ１１０５をバッファリングし、また、該ＯＳ１の入出力処理制御データ１１０３に対して、ＬＡＮアダプタ用の入出力処理制御データを該ローカルメモリ１００２に作成する。同様にＯＳ２から起動された入出力処理に対する制御データと転送データをローカルメモリ１００２に作成する。該ＬＡＮアダプタ１００３はシステムメモリではなく、該ローカルメモリをアクセスすることによってデータ転送を行っている。ＬＡＮパッケージ上のローカルメモリに制御データを作成し直し、転送データのバッファリングしているため、性能に影響を及ぼし、また開発コストも掛かる。
【０００６】
オープン系サーバにおいてＬＰＡＲ機能がサポートされ始めているが、搭載できるスロット数に制限があるため、一つのチャネルアダプタを複数のＯＳから共用することが求められている。
【０００７】
また、コストを低く抑えるためにもハードウェアから成るコントローラ、ローカルメモリを使用しないでチャネルアダプタの共用を実現することが期待されている。
【０００８】
【特許文献１】特開２００２−４１３０６
【特許文献２】特開２００２−９９４３７
【発明の開示】
【発明が解決しようとする課題】
【０００９】
上記従来技術の場合、オープン系サーバにてサポートされているＰＣＩバスインタフェースを持つＰＣＩ  Ｉ／Ｏデバイスに対する複数ＯＳによる共用は実現されていない。また、メインフレームにおいてＰＣＩ  Ｉ／Ｏデバイスに対する複数ＯＳによる共用は実現されているが、パッケージ上にデータバッファと入出力処理制御データ用にローカルメモリ、及び該データバッファと入出力処理制御データのコントローラを設けている。コントローラ、ローカルメモリを使用することにより、性能悪化、及びコストの増大を招いている。
（課題１）
ＰＣＩのような標準仕様のバスに対応し、複数のＯＳにて一つのチャネルアダプタを共用できるようにする。
（課題２）
ＰＣＩバスインタフェースを持つデバイスに対して、ハードウェアから成るコントローラ、ローカルメモリを設けることなく複数のＯＳにて一つのチャネルアダプタを共用できるようにする。
【課題を解決するための手段】
【００１０】
各ＯＳとチャネルアダプタとの間でそれぞれに識別子を持った入出力処理制御データを用いて入出力処理を行うデータ処理システムにおいて、チャネルアダプタとＯＳのインタフェースである前記入出力処理制御データを制御するチャネルドライバが、該チャネルドライバが動作するＯＳのシステム上識別子を示す仮想計算機番号を制御プログラムから取得し、該チャネルドライバは、該仮想計算機番号と、システム構成情報において該仮想計算機番号に対して使用可能と決めた識別子を持つ入出力処理制御データを使用することにより、１個のチャネルアダプタにて複数のＯＳがそれぞれ識別子の異なる入出力処理制御データを使用し、異なるＯＳ間において前記チャネルアダプタに対する入出力処理制御データを共用することなく入出力処理を行う。
【００１１】
また、チャネルドライバと前記チャネルアダプタ間インターフェースにおいて、入出力処理制御データを指し示すアドレスが仮想アドレスであり、該仮想アドレスを物理アドレスに変換するためにアドレス変換テーブルを使用するデータ処理システムにおいて、チャネルドライバが前記制御プログラムから得た仮想計算機番号と構成情報から得た使用可能な入出力処理制御データの識別子により、該使用可能な入出力処理制御データに対するアドレス変換テーブルを作成し、該データ処理システムが、各ＯＳが作成した複数の該アドレス変換テーブルを一つの仮想アドレス変換テーブルに作成し直す手段を備え、チャネルアダプタが、該仮想アドレス変換テーブルを使用することにより、複数のＯＳ上の入出力処理制御データを処理することにより、各ＯＳ上に作成された入出力処理制御データの変更を行わないで前記チャネルアダプタが、複数のＯＳに対する入出力処理を行うことを特徴としたデータ処理システム。
【発明の効果】
【００１２】
本発明によれば、複数のＯＳからの入出力（Ｉ／Ｏ）処理を同時に実行できるチャネルアダプタを提供できる。
【発明を実施するための最良の形態】
【００１３】
複数ＯＳによるＰＣＩ  Ｉ／Ｏデバイスの共用を、ＰＣＩ  Ｉ／Ｏデバイスを制御するためのコントローラとローカルメモリを必要とせず、ソフトウェアによって実現した。
【００１４】
オープン系サーバがサポートしている業界標準規格のチャネルアダプタとして、ＡＮＳＩ（American National Standards Institute）によって規格が作成されているファイバチャネル、さらにはＩＢＴＡ（InfiniBand  Trade  Association）によって規格が作成されているInfiniBand等がある。
【００１５】
ここでは、入出力処理を行うための入出力処理制御データとしてＩｎｆｉｎｉＢａｎｄ等にて使用しているＳｅｎｄ  ＱｕｅｕｅとＲｅｃｅｉｖｅ  Ｑｕｅｕｅから成るＱｕｅｕｅ  Ｐａｉｒ、Ｃｏｍｐｌｅｔｉｏｎ  Ｑｕｅｕｅを使用し、そして、仮想アドレスと、該仮想アドレスを物理アドレスに変換するアドレス変換テーブル（ＴＰＴ）を用いるチャネルアダプタを仮定する。
【００１６】
まず、入出力処理の概要について説明する。
【００１７】
図２はデータ処理システムの構成例を示す。メモリアクセス制御チップ２０３はプロセッサ２０４、２０５、あるいはチャネルアダプタ２０６からの主記憶（ＭＳ）２００に対するメモリアクセスを主に制御し、メモリアクセス制御チップ２０３とチャネルアダプタ２０６はＰＣＩバスにて接続し、メモリアクセス制御チップ２０３とプロセッサ２０４、２０５はシステム固有仕様のホストバスにて接続している。チャネルアダプタ２０６はポートを１つ持ち、スイッチ２０７を介して、Ｉ／Ｏデバイス２０８と接続する。ＬＰＡＲ機能をサポートしている該データ処理システムは、１つのＭＳ２００を、例えば各ＬＰＡＲに２ＭＢずつメモリを割り当て、各ＬＰＡＲ上のＯＳは該割り当てられた２ＭＢのメモリを使用してオペレーションを行う。
【００１８】
該チャネルアダプタ２０６は、該データ処理システムに対して、ＰＣＩバスにて接続され、ＰＣＩバス接続するデバイスとして標準的に所有しているＰＣＩコンフィギュレーションレジスタを含み、該チャネルアダプタを制御するための制御レジスタとしてチャネル制御レジスタを持っている。図３にチャネル制御レジスタの内容を示すが詳細については後述する。
【００１９】
続いて、入出力処理（Ｉ／Ｏ処理）を行うためのソフトウェアとハードウェアのインタフェースについて述べる。
【００２０】
各ＯＳはＳｅｎｄ  ＱｕｅｕｅとＲｅｃｅｉｖｅ  Ｑｕｅｕｅから成るＱｕｅｕｅ  Ｐａｉｒ（ＱＰ）、及び処理を終了したＱＰ識別子をキューイングするＣｏｍｐｌｅｔｉｏｎ  Ｑｕｅｕｅ(ＣＱ)を用いてデータ転送を行い、該ＱＰの作成、ＣＱの制御、チャネルアダプタに対するデータ転送処理の起動等の処理はＯＳ内のチャネルドライバが行う。図４にＱＰとＣＱの概要を示す。Ｓｅｎｄ  Ｑｕｅｕｅ、及びＲｅｃｅｉｖｅ  Ｑｕｅｕｅはそれぞれデータバッファを指すアドレスを含むＤｅｓｃｒｉｐｔｏｒとデータバッファから成る。データを送信する場合、Ｓｅｎｄ  ＱｕｅｕｅのＤｅｓｃｒｉｐｔｏｒ４０１に送信するデータバッファ４０３の物理アドレスをセットする。データ受信の場合、Ｒｅｃｅｉｖｅ  ＱｕｅｕｅのＤｅｓｃｒｉｐｔｏｒ４０４に受信データをストアするデータバッファ４０５の物理アドレスをセットする。各Ｑｕｅｕｅ  Ｐａｉｒは識別子を持ち、図４の例では＃１００（ＱＰ１００）の識別子を持っているものであり、チャネルアダプタは同時に複数のＱＰに対する処理が可能である。
【００２１】
また、各Ｄｅｓｃｒｉｐｔｏｒを指す物理アドレスはアドレス変換テーブル（ＴＰＴ）４０６に保持する。ＴＰＴは一つの物理的に連続した領域であり、該チャネルアダプタが使用する全ＱＰのＳｅｎｄ  Ｑｕｅｕｅ用Ｄｅｓｃｒｉｐｔｏｒアドレス、及びＲｅｃｅｉｖｅ  Ｑｕｅｕｅ用Ｄｅｓｃｒｉｐｔｏｒアドレスを保持する。ここで、ＴＰＴ内の各Ｓｅｎｄ  Ｑｕｅｕｅ用、Ｒｅｃｅｉｖｅ  Ｑｕｅｕｅ用Ｄｅｓｃｒｉｐｔｏｒアドレスレジスタは１６バイトからなり、最上位ビットの値が‘１’のとき、当該Ｄｅｓｃｒｉｐｔｏｒアドレスが有効であることを示し、下位８バイトが当該Ｄｅｓｃｒｉｐｔｏｒの物理アドレスを示す。
【００２２】
ＣＱもそれぞれ識別子を持ち、チャネルアダプタが処理を終えたＱＰの識別子と、Ｓｅｎｄ  Ｑｕｅｕｅ、あるいはＲｅｃｅｉｖｅ  Ｑｕｅｕｅのどちらに対して処理を終えたかの情報を含む。ここではＣＱの各エントリーは１６バイトから成り、上位８バイトの最上位ビットが‘１’のとき該エントリーが有効であることを示し、下位８バイト中の上位４バイトが処理を終えたＱＰ識別子を示し、該下位８バイト中の下位４バイトが‘１’のときは、Ｓｅｎｄ  Ｑｕｅｕｅ、‘０’のときはＲｅｃｅｉｖｅ  Ｑｕｅｕｅに対する処理を終えたことを示すものとする。
【００２３】
図３のチャネル制御レジスタ３００内に定義したＴＰＴベースアドレスレジスタ３０３の値は、アドレス変換テーブル（ＴＰＴ）４０６の先頭アドレス（物理アドレス）を指すものであり、チャネルドライバがセットする。チャネルアダプタはＴＰＴベースアドレスレジスタ３０３の値を使用してアドレス変換テーブル（ＴＰＴ）４０６へのアクセスを行う。
【００２４】
図５にＳｅｎｄ  Ｑｕｅｕｅの詳細データ構造を示す。図５において、ＤＢ＿ＡＤ５０１はデータバッファアドレス領域の先頭アドレス（物理アドレス）を示す８バイトの領域から成り、ＦＬＡＧ５０３は、Ｉ／Ｏ処理が正常終了したかあるいはエラーにて終了したかを示す情報、エラー発生時のエラーの種類示すエラー情報、及び、次に処理すべき別のＤｅｓｃｒｉｐｔｏｒが存在するかどうかを示す情報（Ｎｅｘｔ  Ｄｅｓｃｒｉｐｔｏｒ有無）、更に、データ転送を行う相手先のＱＰ番号、関連するＣＱ識別子（ＣＱ＃）と該ＣＱを指す物理アドレスを含む。次に処理すべきＤｅｓｃｒｉｐｔｏｒが存在する場合、８バイト長から成るＮｅｘｔ  Ｄｅｓｃｒｉｐｔｏｒ５０２に次のＤｅｓｃｒｉｐｔｏｒの先頭アドレス（物理アドレス）がセットされる。なお、本実施例においては、最初のＤｅｓｃｒｉｐｔｏｒのＤＢ＿ＡＤはコマンド領域を示し、２番目以降のＤｅｓｃｒｉｐｔｏｒのＤＢ＿ＡＤがデータバッファを示すものとする。図５はＳｅｎｄ  Ｑｕｅｕｅの例を示すが、Ｒｅｃｅｉｖｅ  Ｑｕｅｕｅのフォーマットも同じであり、ＤＢ＿ＡＤが指すところに受信データをストアする。
【００２５】
Ｉ／Ｏ処理における起動方法として、ここではチャネルドライバが、前記チャネル制御レジスタ３００内に定義されたＱＰ＃レジスタ３０２に処理を行うＱＰ識別子（ＱＰ＃）を、Ｓｅｎｄ／Ｒｅｃｅｉｖｅレジスタ３０６にＳｅｎｄ  Ｑｕｅｕｅ、あるいはＲｅｃｅｉｖｅ  Ｑｕｅｕｅのどちらであるかを示す情報をセットする。また、ＴＰＴオフセットアドレスレジスタ３０４に仮想アドレスとして、当該ＱＰのＤｅｓｃｒｉｐｔｏｒアドレスを保持している領域を示す、ＴＰＴベースアドレスからのオフセットアドレスをセットし、Ｉ／Ｏ処理イネーブルレジスタ３０５に‘１’をｗｒｉｔｅすることにより該チャネルアダプタにＩ／Ｏ起動を指示するものとする。
【００２６】
Ｉ／Ｏ処理を行うとき、チャネルドライバはＤＢ＿ＡＤ５０１に物理アドレスをセットし、ＤＢ＿ＡＤの指しているところにコマンド（２５６バイト）領域５０４をセットする。該コマンド領域は、コマンドの他に、Ｉ／Ｏ処理を行う相手先ポートを示すターゲットＩＤ、及び該ポート配下に存在するデバイスを示すＬＵＮ等の情報も含む。なお、コマンド領域の２５６バイトに引き続く２５６バイトの領域を該コマンドに対する応答フレームをストアするコマンド応答情報領域５０５とする。
【００２７】
続いて、ＦＬＡＧ５０３の情報をセットする。相手先のＱＰ＃、及び該Ｄｅｓｃｒｉｐｔｏｒに関連するＣＱ＃としてＣＱ１をセットし、該ＣＱ１の先頭アドレス（物理アドレス）をセットする。
【００２８】
また、別のＤｅｓｃｒｉｐｔｏｒ５１０を定義し、該Ｄｅｓｃｒｉｐｔｏｒ５１０の先頭アドレスをＮｅｘｔ  Ｄｅｓｃｒｉｐｔｏｒ５０２にセットし、該Ｄｅｓｃｒｉｐｔｏｒ５１０のＤＢ＿ＡＤ５０７のアドレスが示すところに送信用のデータバッファ５０６が存在する。データバッファを可変長にする場合は、セグメントＦＬＡＧ５０９内にデータ長を示す情報を含めれば良いが、本実施例では説明簡略化のためデータバッファのサイズを４Ｋバイト固定長とし、データ長をセットしない。チャネルドライバは上記のようにＳｅｎｄ  Ｑｕｅｕｅを作成し、Ｉ／Ｏ処理を起動する。なお、各Ｄｅｓｃｒｉｐｔｏｒ内にＦＬＡＧが定義されるが、相手先のＱＰ番号、関連するＣＱ＃、及び該ＣＱ＃の物理アドレスは先頭Ｄｅｓｃｒｉｐｔｏｒ内のＦＬＡＧの値が有効であるものとする。
【００２９】
チャネルアダプタはチャネルドライバからのＩ／Ｏ処理起動を認識すると、上記チャネル制御レジスタ内のＴＰＴオフセットアドレスレジスタ３０４にセットされたオフセット（仮想アドレス）とアドレス変換テーブル（ＴＰＴ）４０６から該当するＤｅｓｃｒｉｐｔｏｒの先頭アドレス（物理アドレス）を得る。該物理アドレスを使用することによって、該当Ｄｅｓｃｒｉｐｔｏｒのフェッチ処理を行い、フェッチしたＤｅｓｃｒｉｐｔｏｒ情報からコマンド５０４、及び、送信用データバッファ５０６のフェッチを行う。そして、コマンド領域５０４内に指定されているターゲットＩＤ、及びＦＬＡＧ５０３内に指定された相手先のＱＰ＃に向けてデータ転送を行う。プロトコルに基づきデータ転送を行い、相手先から処理終了を示す応答フレームを受信したとき、前記コマンド応答情報領域５０５に該応答フレームをストアする。該応答フレームのストアを完了した後、ＦＬＡＧ５０３内の情報に基づき該当するCompletion Ｑueue #1（ＣＱ１）４０７に処理を終えたＱＰ識別子、Ｓｅｎｄ  Ｑｕｅｕｅを示す情報、当該エントリーの有効ビットをセットし、チャネル制御レジスタ内の完了ＣＱレジスタ３０８にＣＱ＃である‘１’をセットし、Ｉ／Ｏ処理終了を示すＩ／Ｏ割り込みをＯＳに対して上げる。なお、エラー発生時はＦＬＡＧ５０３にエラー情報をセットする。該ＯＳ内のチャネルドライバは該Ｉ／Ｏ割り込みを認識することによって、完了ＣＱレジスタ３０８をｒｅａｄし、該当するＣＱ１の内容から該チャネルアダプタに対して起動したＩ／Ｏ処理の終了処理を行う。以上がＩ／Ｏ処理の動作概要である。
【００３０】
図６はソフトウェアとチャネルアダプタの関係を示し、ＱＰ０００〜ＱＰ９９９（６０４）までの１０００個のＱＰ、ＣＱ００〜ＣＱ９９（６０７）までの１００個のＣＱを使用して入出力処理を行う例を示す。
【００３１】
続いて、本願の一実施例について説明する。
【００３２】
図１は本願の特徴を示した、一実施例である。なお、本実施例では、２つのＯＳが１つのチャネルアダプタを共用する場合について説明する。
【００３３】
図１のデータ処理システム上にて、ＬＰＡＲ制御プログラム１０１の制御の下でＬＰＡＲ＃１とＬＰＡＲ＃２の２つのＬＰＡＲが立ち上がり、ＬＰＡＲ＃１においてＯＳ１（１０５）が稼動し、ＬＰＡＲ＃２においてＯＳ２（１０６）が稼動することを示す。
【００３４】
各チャネルドライバはＬＰＡＲ制御プログラム１０１から、該チャネルドライバが動作するＬＰＡＲ＃を取得できる関数を備えているものとする。本実施例では、チャネルドライバ１１２はＬＰＡＲ＃１上において、チャネルドライバ１１３はＬＰＡＲ＃２上において動作するという情報を得る。仮想チャネルドライバ１０２はチャネルアダプタ１００を実際に制御するドライバであり、チャネルドライバ１１２、及びチャネルドライバ１１３がチャネルアダプタ１００のチャネル制御レジスタ１１４のアクセス等を行うときは、該アクセスのための関数をＬＰＡＲ制御プログラム１０１がインタセプトし、仮想チャネルドライバ１０２が実際のチャネル制御レジスタ１１４のアクセスを行う。
【００３５】
本データ処理システムは図７に示すように各ＯＳ上において使用可能なＱｕｅｕｅ  Ｐａｉｒ（ＱＰ）とＣｏｍｐｌｅｔｉｏｎ  Ｑｕｅｕｅ(ＣＱ)の識別子と個数を構成情報の一部として定義しておく。上記にて該チャネルアダプタは例として、ＱＰ０００〜ＱＰ９９９９までのＱＰ１０００個を処理可能であり、ＣＱ００〜ＣＱ９９までのＣＱ１００個を処理可能と述べたが、これらの資源を各ＯＳに分配し、異なるＯＳ間において同じ識別子をもつＱＰ、あるいはＣＱが共用されないように構成情報に定義する。図７の例ではＬＰＡＲ＃１では、ＱＰ１００から１００個、つまりＱＰ１００〜１９９まで使用可能、またＣＱはＣＱ１の１個のみ使用可能であることを示す。同様にＬＰＡＲ＃２では、ＱＰ２００から１００個、つまりＱＰ２００〜２９９まで使用可能であり、またＣＱはＣＱ２の１個のみ使用可能であることを示す。
【００３６】
チャネルドライバは該チャネルドライバが動作するＬＰＡＲ＃から上記使用可能ＱＰ＃、及びＣＱ＃の情報を前記構成情報からカーネル関数等を使用して得る。同様にＬＰＡＲ制御プログラムもＬＰＡＲ＃と各ＬＰＡＲにおいて使用されるＱＰ＃、及びＣＱ＃の情報を前記構成情報からカーネル関数等を使用して得る。
【００３７】
チャネルドライバ１１２はＱＰ１００〜ＱＰ１９９までを制御し、ＴＰＴ１１０に対して、ＱＰ１００〜ＱＰ１９９のＳｅｎｄ  Ｑｕｅｕｅ、及びＲｅｃｅｉｖｅ  ＱｕｅｕｅのＤｅｓｃｒｉｐｔｏｒアドレスのみをセットし、最上位ビットのアドレス有効ビットを‘１’にセットする。チャネルドライバ１１２はＴＰＴ１１０に各Ｄｅｓｃｒｉｐｔｏｒのアドレスをセットし終わると、チャネル制御レジスタ１１４内のＴＰＴベースアドレスレジスタ３０３にＴＰＴの先頭アドレスを書き込み、更にＴＰＴが有効になったことを知らせるため、ＴＰＴ有効レジスタ３０７に‘１’を書き込むよう処理を行う。
【００３８】
ここで、ＬＰＡＲ制御プログラム１０１はチャネルドライバ１１２がＴＰＴベースアドレスレジスタ３０３に値を書き込む関数をインタセプトし、仮想チャネルドライバ１０２がＴＰＴ１１０とは異なる仮想アドレス変換テーブル（ＶＴＰＴ）１０３の先頭アドレスを該チャネル制御レジスタ１１４のＴＰＴベースアドレスレジスタ３０３に書き込む。また、ＬＰＡＲ制御プログラムはチャネルドライバ１１２がＴＰＴ有効レジスタ３０７に値を書き込む関数をインターセプトし、仮想チャネルドライバ１０２がＴＰＴ１１０のアドレス有効ビットが‘１’であることころの該当アドレスをＶＴＰＴ１０３にコピーし、ＬＰＡＲ制御プログラム１０１がＴＰＴ有効レジスタ３０７に‘１’を書き込む。
【００３９】
同様に、チャネルドライバ１１３はＱＰ２００〜ＱＰ２９９までを制御し、ＴＰＴ１１１に対して、ＱＰ２００〜ＱＰ２９９のＳｅｎｄ  Ｑｕｅｕｅ、及びＲｅｃｅｉｖｅ  ＱｕｅｕｅのＤｅｓｃｒｉｐｔｏｒアドレスのみをセットし、最上位ビットのアドレス有効ビットを‘１’にセットする。チャネルドライバ１１３はＴＰＴ１１１に各Ｄｅｓｃｒｉｐｔｏｒのアドレスをセットし終わると、チャネル制御レジスタ１１４内のＴＰＴベースアドレスレジスタ３０３にＴＰＴの先頭アドレスを書き込み、更にＴＰＴ有効レジスタにＴＰＴが有効になったことを知らせるため、該ＴＰＴ有効レジスタ３０７に‘１’を書き込むよう処理を行う。ここで上記と同様に、ＬＰＡＲ制御プログラム１０１は、チャネルドライバ１１３がＴＰＴベースアドレスレジスタ３０３に値を書き込む関数をインタセプトし、仮想チャネルドライバ１０２がＶＴＰＴ１０３の先頭アドレスを該チャネル制御レジスタ１１４のＴＰＴベースアドレスレジスタに書き込む。（既に値がセットされている場合、同じ値が上書きされる。）また、ＬＰＡＲ制御プログラム１０１はチャネルドライバ１１３がＴＰＴ有効レジスタ３０７に値を書き込む前記関数をインターセプトし、仮想チャネルドライバ１０２がＴＰＴ１１１のアドレス有効ビットが‘１’であることころの該当アドレスをＶＴＰＴ１０３にコピーし、ＬＰＡＲ制御プログラム１０１がＴＰＴ有効レジスタに‘１’を書き込む。
【００４０】
図８に示すように、チャネルドライバ１１２はＴＰＴ１１０においてＱＰ１００〜ＱＰ１９９のＤｅｓｃｒｉｐｔｏｒに対してのみ値をセットし、またチャネルドライバ１１３はＴＰＴ１１１においてＱＰ２００〜ＱＰ２９９のＤｅｓｃｒｉｐｔｏｒに対してのみ値をセットするため、各ＯＳが異なるＤｅｓｃｒｉｐｔｏｒを使用することによって共用されることもなく、各ＴＰＴ先頭からのオフセットがずれている。よって、仮想チャネルドライバ１０２がＶＴＰＴ１０３を作成するとき、ＴＰＴ１１０、１１１の値をＴＰＴベースアドレスからのオフセットを変更することなく容易にコピーでき、該ＶＴＰＴ１０３を作成し直すのみで、転送用データのコピー、及び、Ｄｅｓｃｒｉｐｔｏｒ等の他の入出力制御データの変更を伴わない。
【００４１】
なお、本実施例では、仮想チャネルドライバ１０２がＬＰＡＲ制御プログラム１０１内に存在する方式を述べているが、別の方式として、図９に示すようにＬＰＡＲ＃３にＯＳ３（９０１）を立ち上げ、ＯＳ３（９０１）内にて仮想チャネルドライバ１０２を動作させ、ＶＴＰＴ１０３をＯＳ３制御メモリ内に作成することも可能である。
【００４２】
チャネルアダプタ１００はＴＰＴ有効レジスタが‘１’にセットされたとき、ＶＴＰＴをフェッチし、チャネルアダプタ内に保持して、最新のＶＴＰＴを使用する。チャネル制御レジスタ１１４内のＴＰＴベースアドレスレジスタ３０３の値はＶＴＰＴ１０３の先頭アドレスがセットされているため、チャネルアダプタ１００はＶＴＰＴ１０３を使用することになる。
【００４３】
次に、ＯＳ１（１０５）のチャネルドライバ１１２が図４、及び図５に示すＱＰ１００、及びＣＱ１を使用してデータ送信処理を行う場合について述べる。該チャネルドライバ１１２はＱＰ１００のＳｅｎｄ  Ｑｕｅｕｅにおいて、ＤＢ＿ＡＤ５０１に物理アドレスをセットし、ＤＢ＿ＡＤ５０１の指しているところにコマンド（２５６バイト）領域５０４をセットする。また、別のＤｅｓｃｒｉｐｔｏｒ５１０を定義し、該Ｄｅｓｃｒｉｐｔｏｒ５１０の先頭アドレスをＮｅｘｔ  Ｄｅｓｃｒｉｐｔｏｒ５０２にセットし、該Ｄｅｓｃｒｉｐｔｏｒ５１０のＤＢ＿ＡＤ５０７のアドレスが示すところに送信用のデータバッファ５０６が存在する。チャネルドライバ１１２はＦＬＡＧ５０９内に関連するＣＱ＃として＃１、及び該ＣＱ１の先頭アドレスをセットし、Ｉ／Ｏ処理起動のためチャネル制御レジスタ１１４内のＴＰＴオフセットアドレスレジスタ３０４にカーネル関数を使用して値を書き込む。このとき、ＬＰＡＲ制御プログラム１０１は該関数をインタセプトし、仮想チャネルドライバ１０２がＴＰＴオフセットアドレスレジスタ３０４に値を書き込む。続いて、チャネルドライバ１１２はカーネル関数を使用してチャネル制御レジスタ１１４内のＱＰ＃レジスタ３０２にＱＰ＃を、Ｉ／Ｏ処理イネーブルレジスタ３０５に‘１’をセットしようとする。このときＬＰＡＲ制御プログラム１０１は該関数をインタセプトし、仮想チャネルドライバ１０２がＱＰ＃レジスタ３０２にＱＰ＃を、Ｉ／Ｏ処理イネーブルレジスタ３０５に‘１’を書き込む。
【００４４】
チャネルアダプタ１００は仮想チャネルドライバ１０２からのＩ／Ｏ処理起動を認識すると、上記チャネル制御レジスタ１１４内のＴＰＴオフセットアドレスレジスタ３０４にセットされたオフセットとＶＴＰＴ１０３から該当するＤｅｓｃｒｉｐｔｏｒの先頭アドレスを得る。該先頭アドレスを使用することによって、該当Ｄｅｓｃｒｉｐｔｏｒのフェッチ処理を行い、フェッチしたＤｅｓｃｒｉｐｔｏｒ情報からコマンド５０４、及び、送信用データバッファ５０６のフェッチを行い、コマンド領域５０４内に指定されているターゲットＩＤ、及びＦＬＡＧ５０３内に指定された相手先のＱＰ＃に向けてデータ転送を行う。プロトコルに基づきデータ転送を行い、相手先からの応答フレームを受信したとき、前記コマンド応答情報領域５０５に該応答フレームをストアする。該応答フレームのストアを完了した後、ＣＱ１にＱＰ１００とＳｅｎｄ  Ｑｕｅｕｅを示す情報をセットし、チャネル制御レジスタ１１４内の完了ＣＱレジスタ３０８にＣＰ＃である‘１’をセットした後、Ｉ／Ｏ処理終了を示すＩ／Ｏ割り込みをＯＳに対して上げる。
【００４５】
ＬＰＡＲ制御プログラム１０１は該Ｉ／Ｏ割り込みをインタセプトし、仮想チャネルドライバ１０２がチャネル制御レジスタ内の完了ＣＱレジスタ３０８の値をｒｅａｄし、ＣＱ１に対する処理が終わったことを認識し、該処理がＬＰＡＲ＃１に対するものであることがわかるので、インタセプトしたＩ／Ｏ割り込みをＯＳ１に対して上げる。ＯＳ１のチャネルドライバ１１２は該Ｉ／Ｏ割り込みを認識することによって、ＣＱ１の内容をｒｅａｄし、該Ｉ／Ｏ処理の終了処理を行う。
【００４６】
ＯＳ２（１０６）のチャネルドライバ１１３はＱＰ２００〜ＱＰ２９９、及びＣＱ２を使用してＩ／Ｏ処理を行う。その他のＩ／Ｏ処理の概要はＯＳ１（１０５）が行うものと同様である。
【００４７】
上記実施例では、データを送信する場合を述べているが、データを受信した場合、受信したフレームに指定されたＱＰ＃が入っているため、該指定されたＱＰのＲｅｃｅｉｖｅ  Ｑｕｅｕｅを使用してＩ／Ｏ処理を行うことによりデータの受信も可能である。
【００４８】
以上、本発明にかかわる実施例を説明してきたが、ＰＣＩバスインタフェースを持つデバイスに対して、ハードウェアから成るコントローラ、ローカルメモリを設けることなく、チャネルドライバが動作する仮想計算機番号を制御プログラムから取得し、仮想アドレスを物理アドレスに変換するテーブルのみを作成しなおすことによって、転送用データのコピーを行うことも無く、入出力制御データを変更しないで、複数のＯＳから共用できるチャネル装置を提供できる。
【図面の簡単な説明】
【００４９】
【図１】本発明の一実施例を適用したデータ処理システムの構成図である。
【図２】データ処理システムの構成例を示す図である。
【図３】チャネル装置内のチャネル制御レジスタの内容を示す図である。
【図４】入出力処理制御データであるＱｕｅｕｅ  Ｐａｉｒ、Ｃｏｍｐｌｅｔｉｏｎ  Ｑｕｅｕｅ，アドレス変換テーブルを示す図である。
【図５】本発明の一実施例で用いたＩ／Ｏ処理のためのデータ情報であるＳｅｎｄ  Ｑｕｅｕｅを示す図である。
【図６】データ処理システムの構成図である。
【図７】ＬＰＡＲ番号と使用可能なＱＰ、ＣＱの対応を示すテーブルである。
【図８】各ＯＳが作成するＴＰＴと複数のＴＰＴを一つにまとめた例を示す図である。
【図９】本発明の一実施例を適用したデータ処理システムの構成図である。
【図１０】従来手法の一例の概要を示す図である。
【図１１】従来手法の一例の詳細を示す図である。
【符号の説明】
【００５０】
１００  チャネルアダプタ
１０１  ＬＰＡＲ制御プログラム
１０２  仮想チャネルドライバ
１０３  仮想アドレス変換テーブル
１０５、１０６  オペレーティングシステム
１０７  フレームの送受信を行うリンク
１０８、１０９  入出力処理制御データのＱｕｅｕｅ  Ｐａｉｒ
１１０、１１１  各ＯＳ上に作成されるアドレス変換テーブル
１１２、１１３  各ＯＳ上にて動作するチャネルドライバ
１１４  チャネルアダプタ内のチャネル制御レジスタ
１１５、１１６  入出力処理制御データのＣｏｍｐｌｅｔｉｏｎ  Ｑｕｅｕｅ
２００  主記憶（ＭＳ）
２０１  チャネルアダプタのポート
２０２  ケーブル
２０３  メモリアクセス制御チップ
２０４、２０５  プロセッサ
２０６  チャネルアダプタ
２０７  スイッチ（Switch）
２０８  Ｉ／Ｏデバイス
３００  チャネル制御レジスタ
３０１  ＰＣＩコンフィギュレーションレジスタ
３０２  ＱＰ＃レジスタ
３０３  ＴＰＴベースアドレスレジスタ
３０４  ＴＰＴオフセットアドレスレジスタ
３０５  Ｉ／Ｏ処理イネーブルレジスタ
３０６  Ｓｅｎｄ／Ｒｅｃｅｉｖｅレジスタ
３０７  ＴＰＴ有効レジスタ
３０８  処理を終えたＣＱ＃を示す完了ＣＱレジスタ
４００  入出力処理を制御するＱｕｅｕｅ  Ｐａｉｒ
４０１  Ｓｅｎｄ  Ｑｕｅｕｅ内のＤｅｓｃｒｉｐｔｏｒ
４０３  Ｓｅｎｄ  Ｑｕｅｕｅ内のＤｅｓｃｒｉｐｔｏｒが指すデータバッファ
４０４  Ｒｅｃｅｉｖｅ  Ｑｕｅｕｅ内のＤｅｓｃｒｉｐｔｏｒ
４０５  Ｒｅｃｅｉｖｅ  Ｑｕｅｕｅ内のＤｅｓｃｒｉｐｔｏｒが指すデータバッファ
４０６  アドレス変換テーブルの内容
４０７  Ｃｏｍｐｌｅｔｉｏｎ  Ｑｕｅｕｅの内容
５００、５１０  Ｓｅｎｄ  ＱｕｅｕｅのＤｅｓｃｒｉｐｔｏｒ
５０１  コマンド領域を示すアドレスを含むＤＡ＿ＡＤ
５０２、５０８  次に処理すべきＤｅｓｃｒｉｐｔｏｒを指すアドレス領域
５０３、５０９  当該Ｄｅｓｃｒｉｐｔｏｒに関係した情報を含むＦＬＡＧ領域
５０４  コマンド領域
５０５  コマンドに対する応答フレームをストアする領域
５０６  データバッファ領域
５０７  データ領域を示すアドレスを含むＤＡ＿ＡＤ
６００  チャネルアダプタ
６０１  チャネル制御レジスタ
６０２  フレームの送受信を行うリンク
６０３  オペレーティングシステム
６０４  ＱＰ０００〜ＱＰ９９９
６０５  ＱＰ０００〜ＱＰ９９９に対するＴＰＴ
６０６  チャネルドライバ
６０７  ＣＱ００〜ＣＱ９９
７００  ＬＰＡＲ番号と各ＬＰＡＲに定義されたＱＰ＃とＣＱ＃
１０００  ＬＡＮアダプタを搭載したＬＡＮパッケージ
１００１  コントローラ
１００２  ローカルメモリ
１００３  ＬＡＮアダプタ  
１００４  ＰＣＩバス
１００５  ＬＡＮアダプタ用ドライバ
１００６  フレームの送受信を行うリンク
１００７  ＬＡＮパッケージのインタフェースであるＰＣＩバスあるいはシステム固有仕様バス
【図１】
2006085400.tif 000003
【図２】
2006085400.tif 000004
【図３】
2006085400.tif 000005
【図４】
2006085400.tif 000006
【図５】
2006085400.tif 000007
【図６】
2006085400.tif 000008
【図７】
2006085400.tif 000009
【図８】
2006085400.tif 000010
【図９】
2006085400.tif 000011
【図１０】
2006085400.tif 000012
【図１１】
2006085400.tif 000013