(57)【要約】【課題】ＰＣＩｅを使用したデバイスを複数のＰＣＩｅドメインからアクセスするシステムにおいて、ＯＳやハードウェアの環境によらず、動作できるようにする。【解決手段】ＣＰＵの属するＰＣＩｅドメインと異なるＰＣＩｅドメインに接続されたＰＣＩｅデバイスにアクセスするためのＩ／Ｏ変換を行うデバイス通信制御モジュールであって、デバイス通信制御モジュールは、各ＰＣＩｅデバイスに対応するＣＦＧアドレスと、ＭＭＩＯアドレスを保持するデバイス管理テーブルと、各ＰＣＩｅデバイスに対応する仮想デバイスとを有する。ＣＰＵが仮想デバイスに対して、ＣＦＧアクセスを発行したときに、デバイス通信制御モジュールは、そのＣＦＧアクセスの情報に基づいて、ＣＰＵに各ＰＣＩｅデバイスに対応するＭＭＩＯアドレスを返信する。【選択図】  図９
2020173603.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵ（Central Processing Unit）の属するＰＣＩｅ（Peripheral Component Interconnect Express）ドメインと異なるＰＣＩｅドメインに接続されたＰＣＩｅデバイスにアクセスするためのＩ／Ｏ変換を行うデバイス通信制御モジュールであって、
前記デバイス通信制御モジュールは、
各ＰＣＩｅデバイスに対応するＣＦＧアドレスと、ＭＭＩＯアドレスを保持するデバイス管理テーブルと、
各ＰＣＩｅデバイスに対応する仮想デバイスとを有し、
前記ＣＰＵが仮想デバイスに対して、ＣＦＧアクセスを発行したときに、そのＣＦＧアクセスの情報に基づいて、前記ＣＰＵに各ＰＣＩｅデバイスに対応するＭＭＩＯアドレスを返信することを特徴とするデバイス通信制御モジュール。
【請求項２】
前記ＣＰＵが仮想デバイスに対して、ＣＦＧアクセスを発行したときに、そのＣＦＧアクセスの情報に基づいて、ドメイン間を接続するＮＴＢ−ＥＰ（Non Transparent Bridge Endpoint）に、ＭＭＩＯアクセスを発行し、前記ＮＴＢ−ＥＰから返信されたＭＭＩＯアクセスの応答を、前記仮想デバイスへのＣＦＧアクセスの応答として、前記ＣＰＵに返信することを特徴とする請求項１記載のデバイス通信制御モジュール。
【請求項３】
前記各ＰＣＩｅデバイスに対応するＣＦＧアドレスは、各ＰＣＩｅデバイスのＢｕｓ番号、Ｄｅｖｉｃｅ番号、Ｆｕｎｃｔｉｏｎ番号と、別ドメイン空間にリダイレクトするための特定エリアのアドレスとから生成されることを特徴とする請求項１記載のデバイス通信制御モジュール。
【請求項４】
ＣＰＵ（Central Processing Unit）の属するＰＣＩｅ（Peripheral Component Interconnect Express）ドメインと異なるＰＣＩｅドメインに接続されたＰＣＩｅデバイスにアクセスするためのＩ／Ｏ変換を行うデバイス通信制御方法であって、
前記デバイス通信制御モジュールが、各ＰＣＩｅデバイスに対応するＣＦＧアドレスを、各ＰＣＩｅデバイスのＢｕｓ番号、Ｄｅｖｉｃｅ番号、Ｆｕｎｃｔｉｏｎ番号と、別ドメイン空間にリダイレクトするための特定エリアのアドレスとから生成して、デバイス管理テーブルに設定するステップと、
前記デバイス通信制御モジュールが、各ＰＣＩｅデバイスに対応するＭＭＩＯアドレスを設定するステップと、
前記ＣＰＵが仮想デバイスに対して、ＣＦＧアクセスを発行したときに、前記デバイス通信制御モジュールが、そのＣＦＧアクセスの情報に基づいて、前記ＣＰＵに各ＰＣＩｅデバイスに対応するＭＭＩＯアドレスを返信するステップとを有することを特徴とするデバイス通信制御方法。
【請求項５】
さらに、前記ＣＰＵが仮想デバイスに対して、ＣＦＧアクセスを発行したときに、前記デバイス通信制御モジュールが、そのＣＦＧアクセスの情報に基づいて、ドメイン間を接続するＮＴＢ−ＥＰ（Non Transparent Bridge Endpoint）に、ＭＭＩＯアクセスを発行し、前記ＮＴＢ−ＥＰから返信されたＭＭＩＯアクセスの応答を、前記仮想デバイスへのＣＦＧアクセスの応答として、前記ＣＰＵに返信するステップを有することを特徴とする請求項４記載のデバイス通信制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デバイス通信制御モジュールおよびデバイス通信制御方法に係り、特に、ＰＣＩｅデバイスを用いたシステムにおいて、異なったＰＣＩｅドメインから接続されたＰＣＩｅデバイスをアクセスするシステムに用いて好適なデバイス通信制御モジュールおよびデバイス通信制御方法に関する。
【背景技術】
【０００２】
ＰＣＩｅ（Peripheral Component Interconnect Express）は、ＣＰＵアーキテクチャに全く依存しないデバイス間を結ぶ内部高速バスの規格として、パソコンやサーバなどあらゆるデータ処理装置に広く普及しているバス規格である。
【０００３】
ＰＣＩｅは、ネットワークでパケットが送受信される仕様であり、異なったアドレス空間（ＰＣＩｅドメイン）に接続されているデバイスでも、ブリッジを介してアクセス可能である。
【０００４】
複数のＰＣＩｅネットワークを、ＮＴＢ（Non Transparent Bridge）を介して接続されたシステムは、例えば、特許文献１に開示が有る。特許文献１に記載のシステムでは、異なったボードがブリッジを介して、ＮＴＢ接続された例が示されており、それらのボード間では、コンフィグレーションリクエストが送出できないことが述べられている（図９、段落番号０００７）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１２−８３９７９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記従来技術の特許文献１に記載された技術は、ＮＴＢにより、二つのボードが接続されて、相互にアクセスするための技術が開示されている。一般に、ＰＣＩｅを使用したシステムではＣＰＵがＤｅｖｉｃｅにアクセスする方法は、ＭＭＩＯ（Memory Mapped I/O）アクセスとＣＦＧ（ConFiGuration）アクセスが存在する。ＯＳ（Operating System）はＣＦＧアクセスを用いて、Ｄｅｖｉｃｅの発見を行う。ＰＣＩｅのＮＴＢは、複数のＰＣＩｅドメインを接続するためのＢｒｉｄｇｅである。このＮＴＢで接続されたＰＣＩｅドメイン同士間ではＭＭＩＯアクセスは可能だが、ＣＦＧアクセスは不可能である。ＣＦＧアクセスができないため、ＯＳは、通常の方法ではＮＴＢの先にあるＰＣＩｅデバイスを発見できない。そのため、ＮＴＢを意識した専用のデバイスドライバを製品ごとに個別に作成して、デバイスを使用する必要がある。そのため、ＯＳやハードウェア機器ごとに特別なデバイスドライバを用意しなければならず、移植性が悪くなり、ソフトウェア開発の工数が大きくなるという事態になる。
【０００７】
本発明の目的は、ＰＣＩｅを使用したデバイスを複数のＰＣＩｅドメインからアクセスするシステムにおいて、ＯＳやハードウェアの環境によらず、動作することのできるデバイス通信制御モジュールおよびデバイス通信制御方法を提供することにある。
【課題を解決するための手段】
【０００８】
本発明のデバイス通信制御モジュールの構成は、好ましくは、ＣＰＵ（Central Processing Unit）の属するＰＣＩｅ（Peripheral Component Interconnect Express）ドメインと異なるＰＣＩｅドメインに接続されたＰＣＩｅデバイスにアクセスするためのＩ／Ｏ変換を行うデバイス通信制御モジュールであって、デバイス通信制御モジュールは、各ＰＣＩｅデバイスに対応するＣＦＧアドレスと、ＭＭＩＯアドレスを保持するデバイス管理テーブルと、各ＰＣＩｅデバイスに対応する仮想デバイスとを有し、ＣＰＵが仮想デバイスに対して、ＣＦＧアクセスを発行したときに、そのＣＦＧアクセスの情報に基づいて、ＣＰＵに各ＰＣＩｅデバイスに対応するＭＭＩＯアドレスを返信するようにしたものである。
【発明の効果】
【０００９】
本発明によれば、ＰＣＩｅを使用したデバイスを複数のＰＣＩｅドメインからアクセスするシステムにおいて、ＯＳやハードウェアの環境によらず、動作することのできるデバイス通信制御モジュールおよびデバイス通信制御方法を提供することができる。
【図面の簡単な説明】
【００１０】
【図１】デバイス通信制御モジュールを使用したデータ処理システムの一例を示す構成図である。
【図２】デバイス通信制御モジュールとその他のモジュールの関連を示す図である。
【図３】デバイス通信制御に関連するメモリアクセスについて説明する図である。
【図４】デバイス管理テーブルのデータ構造の一例を示す図である。
【図５】装置の起動からＰＣＩｅデバイスを使用するまでの概要を示すフローチャートである。
【図６】プラットフォーム初期化処理のシーケンス図である。
【図７】Ｂａｓｅ  Ａｄｄｒｅｓｓ  Ｒｅｇｉｔｅｒ以外のＣＦＧアクセスを説明するためのブロック図である。
【図８】Ｂａｓｅ  Ａｄｄｒｅｓｓ  Ｒｅｇｉｔｅｒ以外のＣＦＧアクセスのシーケンス図である。
【図９】Ｂａｓｅ  Ａｄｄｒｅｓｓ  ＲｅｇｉｔｅｒへのＣＦＧアクセスを説明するためのブロック図である。
【図１０】Ｂａｓｅ  Ａｄｄｒｅｓｓ  ＲｅｇｉｔｅｒへのＣＦＧアクセスのシーケンス図である。
【図１１】ＭＭＩＯアクセスを説明するためのブロック図である。
【図１２】ＭＭＩＯアクセスのシーケンス図である。
【発明を実施するための形態】
【００１１】
以下、図面を参照して本発明の実施形態を説明する。以下の記載および図面は、本発明を説明するための例示であって、説明の明確化のため、適宜、省略および簡略化がなされている。本発明は、他の種々の形態でも実施する事が可能である。特に限定しない限り、各構成要素は単数でも複数でも構わない。
【００１２】
図面において示す各構成要素の位置、大きさ、形状、範囲などは、発明の理解を容易にするため、実際の位置、大きさ、形状、範囲などを表していない場合がある。このため、本発明は、必ずしも、図面に開示された位置、大きさ、形状、範囲などに限定されない。
【００１３】
以下の説明では、「テーブル」、「リスト」、「キュー」等の表現にて各種情報を説明することがあるが、各種情報は、これら以外のデータ構造で表現されていてもよい。データ構造に依存しないことを示すために「ＸＸテーブル」、「ＸＸリスト」等を「ＸＸ情報」と呼ぶことがある。識別情報について説明する際に、「識別情報」、「識別子」、「名」、「ＩＤ」、「番号」等の表現を用いるが、これらについてはお互いに置換が可能である。
【００１４】
同一あるいは同様な機能を有する構成要素が複数ある場合には、同一の符号に異なる添字を付して説明する場合がある。ただし、これらの複数の構成要素を区別する必要がない場合には、添字を省略して説明する場合がある。
【００１５】
また、以下の説明では、プログラムを実行して行う処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ、ＧＰＵ）によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）および／またはインターフェースデバイス（例えば通信ポート）等を用いながら行うため、処理の主体がプロセッサとされてもよい。同様に、プログラムを実行して行う処理の主体が、プロセッサを有するコントローラ、装置、システム、計算機、ノードであってもよい。プログラムを実行して行う処理の主体は、演算部であれば良く、特定の処理を行う専用回路（例えばＦＰＧＡやＡＳＩＣ）を含んでいてもよい。
【００１６】
プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバまたは計算機が読み取り可能な記憶メディアであってもよい。プログラムソースがプログラム配布サーバの場合、プログラム配布サーバはプロセッサと配布対象のプログラムを記憶する記憶資源を含み、プログラム配布サーバのプロセッサが配布対象のプログラムを他の計算機に配布してもよい。また、以下の説明において、２以上のプログラムが１つのプログラムとして実現されてもよいし、１つのプログラムが２以上のプログラムとして実現されてもよい。
【００１７】
以下、本発明に係る実施形態を、図１ないし図１２を用いて説明する。
【００１８】
先ず、図１および図２を用いて本発明の一実施形態に係るデバイス通信制御モジュールの構成と動作の概要について説明する。
本実施形態で説明するデバイス通信制御モジュールを使用したデータ処理システムの一例として、図１に示されるように、Ｈｏｓｔ１０とストレージシステム２０からなるストレージ管理システムを例に取り、説明する。
なお、本実施形態のデバイス通信制御モジュールが適用されるのは、このようなシステムに限られず、バスとして、ＰＣＩｅを利用したあらゆる電子機器に利用可能である。
【００１９】
Ｈｏｓｔ１０は、ストレージシステム２０を使うプログラムを実行する情報処理機器である。ストレージシステム２０は、データを記憶するデバイスを接続して、Ｈｏｓｔ１０からの指令に応じて、データを入出力するシステムである。本実施形態では、ＰＣＩｅデバイス１００として、例えば、ＳＳＤ（Solid State Drive）を接続する。
【００２０】
ストレージシステム２０は、データ通信モジュール３０、コントローラ４０、データ記憶モジュール８０からなる。データ通信モジュール３０は、Ｈｏｓｔ通信用プロトコル回路３１を内蔵し、Ｈｏｓｔ２０とコントローラ４０間のプロトコル変換を行い、通信を制御するモジュールである。コントローラ４０は、ストレージシステム２０を制御する部分である。データ記憶モジュール８０は、ＰＣＩｅデバイス１００を含み、データ入出力を行うモジュールである。ストレージシステム２０の中で、コントローラ４０同士は、コントローラ間通信パス５により接続されている。
【００２１】
コントローラ４０は、ＣＰＵ（Central Processing Unit）７０、主記憶４１、コントローラ間中継器４２、Ｄｒｉｖｅ通信用プロトコル回路４３、デバイス通信制御モジュール５０からなる。ＣＰＵ７０は、主記憶４１内のデータを参照し、プログラム（ＯＳ、Ｆ／Ｗ（FirmWare））を実行し、ストレージシステム２０の各部を制御する装置である。主記憶４１は、一時的なデータやプログラムをロードして保持する装置である。コントローラ間中継器４２は、コントローラ４０間の論理的な接続を行う装置である。Ｄｒｉｖｅ通信用プロトコル回路４３は、コントローラとデータ記憶モジュール８０とのプロトコル変換を行い、通信を制御するモジュールである。デバイス通信制御モジュール５０は、仮想デバイス５１とデバイス管理テーブル６０を含み、ＰＣＩｅのプロトコルにおいて、デバイスとしての機能を果たすモジュールである。なお、デバイス通信制御モジュール５０の機能と構造、保持するデバイス管理テーブル６０の詳細については、後に説明する。
【００２２】
ＳＷ（Switch）９０は、ＰＣＩｅのパケットをデータ交換する装置である。ＳＷ９０は、データパケットの入出力のためのＰｏｒｔ９２とＮＢＴ−ＥＰ（Non Transparent Bride - EndPoint）９１からなる。ＮＢＴ−ＥＰ９１は、ＰＣＩｅプロトコルにおけるブリッジであり、論理的な終端点（エンドポイント）となる。
【００２３】
次に、図２を用いて、図１に示したデータ処理システムの内で、デバイス通信制御モジュールを中心にして、関連するその他のモジュールの構成と機能を詳細に説明する。
ＰＣＩｅデバイスの通信経路は、図２に示されるように、ＣＰＵ７０のＲＰ（Root Port）７５ａが起点となり、直接、またはＳＷ９０を介して、ＰＣＩｅデバイス１００へとつながる、木構造となっている。ＰＣＩｅドメインに、ＲＰは一つだけ存在する。ＳＷ９０には、複数のＰｏｒｔが存在し、Ｐｏｒｔのうち、ＲＰ側につながるＵＳＰ（Up Stream Port）、ＰＣＩｅデバイス１００側のＰｏｒｔをＤＳＰ（Down Stream Port）と呼ぶ。ＵＳＰ、ＤＳＰは、ＰＣＩｅプロトコルの扱いとしては、それぞれ論理的に、ＳＷ９０として認識され、ＳＷ９０の中で論理的に接続されている。図２の通信経路としては、ＣＰＵ７０のＲＰ７５ａ、ＳＷ９０のＵＳＰ９５が接続され、ＵＳＰ９５とＤＳＰ９６ａ、ＤＳＰ９６ｂがＮＴＢ−ＥＰ９１を介して接続されている。ＮＴＢ−ＥＰ（Non Transparent Bridge Endpoint）は、それぞれのＰＣＩドメイン１、ＰＣＩドメイン２の中で、ＰＣＩｅデバイスとして認識されている。
【００２４】
発明が解決しようとする課題の所でも説明したように、一般に、ＰＣＩｅを使用したシステムでは、ＣＰＵがＤｅｖｉｃｅにアクセスする方法は、ＭＭＩＯアクセスとＣＦＧアクセスが存在する。
【００２５】
ＭＭＩＯアクセスは、ＣＰＵからメモリアドレスを指定してＲｅａｄ／Ｗｒｉｔｅするアクセス方式であり、デバイスの主たる機能（通信など）を実現するために使用する。ＣＦＧアクセスは、ＣＰＵからＢｕｓ番号、Ｄｅｖｉｃｅ番号、Ｆｕｎｃｔｉｏｎ番号という三つの数字の組み合わせでデバイスを指定して、Ｒｅａｄ／Ｗｒｉｔｅするアクセス方式で、デバイスのディスカバリや設定に使用する。ＣＰＵは、ディスカバリ時は可能なＢｕｓ，Ｄｅｖｉｃｅ，Ｆｕｎｃｔｉｏｎ番号（ＢＤＦ）の全組み合わせを使用してデバイスを探し、応答があったＢＤＦのデバイスの初期化を行う。
【００２６】
したがって、ＮＴＢ−ＥＰで接続されたＰＣＩｅドメイン同士間では、ＭＭＩＯアクセスは可能だが、ＣＦＧアクセスは不可能である。そのため、ＯＳは通常の方法ではＮＴＢ−ＥＰの先にあるＰＣＩｅデバイスを発見できない。これを解決するためには、ＮＴＢを意識した専用のデバイスドライバを製品ごとに個別に作成して、デバイスを使用する必要がある。
【００２７】
本実施形態は、ＰＣＩｅデバイス１００ごとに対応した仮想デバイスを有する、デバイス通信制御モジュール５０を設けて、専用のデバイスドライバを用意しなくても、ＯＳの標準的な機能のみで、異なったＰＣＩｅドメインに接続されたＰＣＩｅデバイスのアクセスを可能にするものである。
【００２８】
仮想デバイス５１は、ＣＰＵ７０が外部ドメインのＰＣＩｅデバイス１００にアクセスするために、デバイス通信制御モジュール５０内に設けられる仮想的なデバイスである。デバイス管理テーブル６０の一エントリが仮想デバイス５１の各々と、ＰＣＩｅデバイス１００に対応して設定される。ＣＰＵ７０は、デバイス通信制御モジュール７０内仮想デバイスにＣＦＧアクセスを発行することにより、あたかも、ＰＣＩｅデバイス１００に、ＣＦＧアクセスを発行するのと同じ効果を得ることができる。
なお、デバイス通信制御モジュール７０を用いたＣＦＧアクセスとＭＭＩＯアクセスの詳細は、後に説明する。
【００２９】
次に、図３を用いて本実施形態のデバイス通信制御に関連するメモリアクセスについて説明する。
ここで、図３に示されるように、ＰＣＩｅドメイン１とＰＣＩｅドメイン２のメモリ空間をＣＰＵからアクセスすることを考える。
【００３０】
上述のように、ＮＴＢ−ＥＰをまたいだＰＣＩｅドメイン間のアクセスは、ＭＭＩＯアクセスのみ行うことができるが、ＮＴＢの両側で異なるメモリ空間となる。そのため、ある特定のメモリ領域に来たアクセスを反対のメモリ空間の特定のメモリ領域へのアクセスにするという、アドレス変換を行うことによりＮＴＢをまたいだＭＭＩＯアクセスは行われる。アドレス変換をいかに行うかは、ファームウェアによるハードウェアの初期化段階に決定される。
【００３１】
ＰＣＩｅデバイスは、自分のＭＭＩＯアドレス（デバイスが使用できるＩ／Ｏ空間、メモリ空間のタイプ、容量、位置を決定するアドレス）を、コンフィグレーションアドレス空間内のＢａｓｅ  Ａｄｄｒｅｓｓ  Ｒｅｇｓｔｅｒに、Ｂａｓｅ  Ａｄｄｒｅｓｓとして保持しており、ＣＰＵは、ＣＦＧアクセスをすることにより、このＭＭＩＯアドレスを取得することができる。
しかしながら、図３の例では、ＰＣＩｅデバイスが保持するＭＭＩＯアドレスは、ドメイン２のメモリ空間でのアドレスのため、ＣＰＵがそのアドレスにアクセスしてもＰＣＩｅデバイスにはアクセスできない。ＣＰＵが、ＰＣＩｅデバイスにアクセスするためには、ＮＴＢ−ＥＰでのアドレス変換を考慮したうえでアクセスしなければならない。図３に示す例では、（ＣＰＵがアクセスするアドレス）−４ＧＢ＝（ＰＣＩｅデバイスのＭＭＩＯアドレス）。
従来技術では、プラットフォームごとに、ＯＳがこのアドレス変換を認識したうえで、デバイスドライバを作りこむ必要があるため、プラットフォームが変わるたびにＯＳが対応をする必要があった。
【００３２】
次に、図３を用いてＳＷの提供するドメイン間のアドレスリダイレクト機能について説明する。
本実施形態のデバイス通信制御では、このドメイン間のアドレスリダイレクト機能を前提とするものである。
【００３３】
ＰＣＩｅドメイン１に、別ドメインアクセス用空間を設ける。図３の例では、３ＧＢ（基底アドレス）から２５６ＭＢの領域がその空間である。
【００３４】
ＰＣＩｅデバイスのＢｕｓ，Ｄｅｖｉｃｅ，Ｆｕｎｃｔｉｏｎ番号（ＢＤＦ）に基づくオフセットを計算し、基底アドレス＋オフセットを、ＣＦＧ  Ｂａｓｅ  Ａｄｄｒｅｓｓとする。
【００３５】
そして、ＳＷ９０のＮＴＢ−ＥＰ９１（ＮＴＢ−ＥＰ９１は、ドメイン１からＭＭＩＯアクセスできることに注意）にＭＭＩＯアクセスするときには、ＣＦＧ  Ｂａｓｅ  Ａｄｄｒｅｓｓを指定してアクセスする。ＮＴＢ−ＥＰ９１は、ＣＦＧ  Ｂａｓｅ  Ａｄｄｒｅｓｓから、Ｂｕｓ，Ｄｅｖｉｃｅ，Ｆｕｎｃｔｉｏｎ番号（ＢＤＦ）を算出し、該当のＰＣＩｅデバイスにＣＦＧアクセスを行う。
【００３６】
次に、図４を用いてデバイス管理テーブルのデータ構造について説明する。
デバイス管理テーブル６０は、デバイス通信制御モジュール５０がアクセスするＰＣＩｅデバイスに関する情報を格納するテーブルであり、ＢＩＯＳが装置の起動時に設定し、ＣＰＵ７０が、ＰＣＩｅデバイス１００にアクセスするときに、使用されるテーブルである。
【００３７】
デバイス管理テーブル６０は、図４に示されように、Ｄｅｖｉｃｅ６０ａ、Ｆｕｎｃｔｉｏｎ６０ｂ、ＣＦＧ  Ｂａｓｅ  Ａｄｄｒｅｓｓ６０ｃ、ＭＭＩＯ  Ｂａｓｅ  Ａｄｄｒｅｓｓ（１）６０ｄ、ＭＭＩＯ  Ｂａｓｅ  Ａｄｄｒｅｓｓ（２）６０ｅ、ＭＭＩＯ  Ｂａｓｅ  Ａｄｄｒｅｓｓ（３）６０ｆの各フィールドよりなる。
【００３８】
Ｄｅｖｉｃｅ６０ａ、Ｆｕｎｃｔｉｏｎ６０ｂには、それぞれ、ＣＦＧアクセスに用いられ、ＰＣＩｅデバイスを認識するＤｅｖｉｃｅ番号、Ｆｕｎｃｔｉｏｎ番号が格納される。なお、同じデバイス通信制御モジュール５０の中では、Ｂｕｓ番号は、固定のため、テーブルのデータとして持つ必要はない。
【００３９】
ＣＦＧ  Ｂａｓｅ  Ａｄｄｒｅｓｓ６０ｃには、ドメイン１からみたＰＣＩｅデバイスのＣＦＧ  Ｂａｓｅ  Ａｄｄｒｅｓｓが格納される。
【００４０】
ＭＭＩＯ  Ｂａｓｅ  Ａｄｄｒｅｓｓ（１）６０ｄ、ＭＭＩＯ  Ｂａｓｅ  Ａｄｄｒｅｓｓ（２）６０ｅ、ＭＭＩＯ  Ｂａｓｅ  Ａｄｄｒｅｓｓ（３）６０ｆには、ドメイン１からみたＰＣＩｅデバイスのＭＭＩＯ  Ｂａｓｅ  Ａｄｄｒｅｓｓが格納される。なお、ＭＭＩＯ  Ｂａｓｅ  Ａｄｄｒｅｓｓを複数有するのは、ＰＣＩｅの規格でＢａｓｅ  Ａｄｄｒｅｓｓを複数持つことが許容されているからである。
【００４１】
次に、図５ないし図１２を用いてデバイス通信制御モジュールの処理について説明する。
【００４２】
先ず、図５を用いて装置の起動からＰＣＩｅデバイスを使用するまでの概要を説明する。
最初に、ＰＣＩｅデバイスを使用した装置に電源が投入される（Ｓ１）。
次に、プラットフォームの初期化が行われる（Ｓ２）。ここで、プラットフォームとは、装置に使用されているＰＣＩｅデバイスのハードウェア、ソフトウェア環境である。プラットフォームの初期化は、後に、図６を用いて詳細に説明する。
【００４３】
次に、オペレーティングシステムが起動される（Ｓ３）。
次に、デバイスドライバの初期化が行われる（Ｓ４）。このステップで、Ｂａｓｅ  Ａｄｄｒｅｓｓ  Ｒｅｇｉｔｅｒ以外のＣＦＧアクセス、Ｂａｓｅ  Ａｄｄｒｅｓｓ  ＲｅｇｉｔｅｒへのＣＦＧアクセス、ＭＭＩＯアクセスのアクセスが行われる。なお、これらの処理の詳細は、後に説明する。
次に、ＰＣＩｅデバイスが、オペレーティングシステム環境下で使用される（Ｓ５）。
【００４４】
次に、図６を用いてプラットフォームの初期化の処理の詳細を説明する。
これは、図５のＳ２に該当する処理である。
先ず、ＢＩＯＳとＳＷ９０のファームウェアそれぞれのＰＣＩｅドメインのＰＣＩｅの初期化を実行する（Ｓ２０１）。
【００４５】
次に、ＢＩＯＳは、ＳＷ９０のＮＴＢ−ＥＰ９１の変換アドレスを設定する（Ｓ２０２）。これにより、ＢＩＯＳは、ＮＴＢ−ＥＰ９１経由でＰＣＩｅドメイン２のデバイスにアクセスできるようになる。
次に、ＢＩＯＳは、Ｂｕｓ番号、Ｄｅｖｉｃｅ番号、Ｆｕｎｃｔｉｏｎ番号を使ってＳＷ９０の先に接続されているＰＣＩｅデバイス１００にディスカバリ要求を発行する。ＰＣＩｅデバイス１００が存在する場合、ＰＣＩｅデバイス１００は、ＢＩＯＳに応答を返信する（Ｓ２０４）。
【００４６】
応答が返ってきた場合、ＢＩＯＳは、ＰＣＩｅデバイス１００のＭＭＩＯベースアドレスを要求し（Ｓ２０５）、取得する（Ｓ２０６）。
【００４７】
そして、取得したＭＭＩＯベースアドレスと、設定したＮＴＢの変換アドレスから、ＣＰＵ７０からみた各ＰＣＩｅデバイス１００のＭＭＩＯベースアドレスを計算し、また、デバイスのＢｕｓ番号、Ｄｅｖｉｃｅ番号、Ｆｕｎｃｔｉｏｎ番号と別ドメインアクセス用空間の基底アドレスから、ＣＦＧベースアドレスを計算する（Ｓ２０７）。算出の仕方は、図３を用いて説明したものである。
【００４８】
最後に、ＢＩＯＳは、デバイス通信制御モジュール５０のデバイス管理テーブル６０に、各ＰＣＩｅデバイスの  ＭＭＩＯベースアドレス、ＣＦＧベースアドレスを書き込む（Ｓ２０８）。
【００４９】
次に、図７ないし図１０を用いて、Ｂａｓｅ  Ａｄｄｒｅｓｓ  Ｒｅｇｉｔｅｒ以外のＣＦＧアクセスと、Ｂａｓｅ  Ａｄｄｒｅｓｓ  ＲｅｇｉｔｅｒへのＣＦＧアクセスを説明する。
これは、図５のＳ４で行われる処理である。
【００５０】
先ず、図７および図８を用いて、Ｂａｓｅ  Ａｄｄｒｅｓｓ  Ｒｅｇｉｔｅｒ以外のＣＦＧアクセスについて説明する。
Ｂａｓｅ  Ａｄｄｒｅｓｓ  Ｒｅｇｉｔｅｒ以外のＣＦＧアクセスとは、例えば、ＰＣＩｅデバイスのコンフィグ空間のＤｅｖｉｃｅＩＤやＶｅｎｄｏｒＩＤを見つけにいくときに使用されるＣＦＧアクセスである。
【００５１】
Ｂａｓｅ  Ａｄｄｒｅｓｓ  Ｒｅｇｉｔｅｒ以外のＣＦＧアクセスを行うために、先ず、ＣＰＵ７０が、仮想デバイス５１にＣＦＧアクセスを発行する（図７のＳ３０１、図８のＲｅａｄのＡ３０１、ＷｒｉｔｅのＡ３１０）。
【００５２】
次に、デバイス通信制御モジュール５０は、デバイス管理テーブル６０のＣＦＧベースアドレスを使って、ＮＴＢ−ＥＰ９１にＭＭＩＯアクセスを発行する（Ｓ３０２、Ａ３０２、Ａ３１１）。
次に、ＮＴＢ−ＥＰ９１は、ＰＣＩｅデバイスに、ＣＦＧアクセスを発行する（Ｓ３０３、Ａ３０３、Ａ３１２）。
次に、ＰＣＩｅデバイスは、ＣＦＧアクセスの応答をＮＴＢ−ＥＰ９１に返信する（Ｓ３０４、Ａ３０４）。
次に、ＮＴＢ−ＥＰ９１は、仮想デバイス５１に、ＭＭＩＯアクセスの応答を返信する（Ｓ３０５、Ａ３０５）。
【００５３】
そして、仮想デバイス５１は、受け取ったＭＭＩＯアクセスの応答をＣＦＧアクセスの応答としてＣＰＵ７０に返信する（Ｓ３０６、Ａ３０６、Ａ３１３）。
なお、ＭＭＩＯアクセスのＷｒｉｔｅアクセスでは、仕様上、応答は返信されない。
【００５４】
次に、図９および図１０を用いて、Ｂａｓｅ  Ａｄｄｒｅｓｓ  ＲｅｇｉｔｅｒへのＣＦＧアクセスについて説明する。
これは、コンフィグ空間内のＢａｓｅ  Ａｄｄｒｅｓｓ  ＲｅｇｉｔｅｒからＢａｓｅ  Ａｄｄｒｅｓｓを取得する処理である。
【００５５】
Ｂａｓｅ  Ａｄｄｒｅｓｓ  ＲｅｇｉｔｅｒへのＣＦＧアクセスを行うために、ＣＰＵは、仮想デバイス５１に、ＢａｓｅＡｄｄｒｅｓｓを取得するためのＣＦＧアクセスを発行する（図９のＳ４０１、図１０のＡ４０１）。
【００５６】
次に、仮想デバイス５１は、デバイス通信制御モジュール５０のデバイス管理テーブル６０に基づいて、ＣＰＵ７０に、ＰＣＩｅデバイスのＭＭＩＯベースアドレスを返信する（Ｓ４０２、Ａ４０２）。
【００５７】
次に、図１１および図１２を用いてＰＣＩｅデバイスへのＭＭＩＯアクセスについて説明する。
これは、図５のＳ５で行われる処理であり、ＣＰＵ７０が実際にＰＣＩｅデバイス１００の機能を使用する処理である。この段階で、図７で示したＢａｓｅ  Ａｄｄｒｅｓｓ  Ｒｅｇｉｔｅｒ以外のＣＦＧアクセス、図９で示したＢａｓｅ  Ａｄｄｒｅｓｓ  ＲｅｇｉｔｅｒへのＣＦＧアクセスの処理により、ＣＰＵ７０は、ＰＣＩｅデバイス１００のＢａｓｅ  Ａｄｄｒｅｓｓを取得済みである。
【００５８】
ＣＰＵ７０は、取得したＰＣＩｅデバイス１００のＭＭＩＯベースアドレスを使って、ＮＴＢ−ＥＰ９１経由で、ＰＣＩｅデバイス１００にアクセスする（図１１のＳ５０１、図１２のＲｅａｄのＡ５０１、Ａ５０２、ＷｒｉｔｅのＡ５１０）。
【００５９】
ＰＣＩｅデバイス１００は、ＮＴＢ−ＥＰ９１経由で、ＣＰＵ７０に応答を返信する（Ｓ５０２、Ａ５０３、Ａ５０４）。
なお、ここでも、ＭＭＩＯアクセスのＷｒｉｔｅアクセスでは、仕様上、応答は返信されないことに留意する。
【００６０】
以上、本実施形態では、仮想デバイスを備える通信制御モジュールを設け、ＣＰＵは、ＰＣＩｅデバイスに対応する仮想デバイスに対して、ＣＦＧアクセスを発行することにより、ＰＣＩｅデバイスのＭＭＩＯ  Ｂａｓｅ  Ａｄｄｒｅｓｓを得られるようにした。そのため、特別なデバイスドライバを用意しなくても、ＯＳやハードウェアの環境によらず、ＢＩＯＳの標準的な機能だけでも、使用できるようになる。
【符号の説明】
【００６１】
１０…Ｈｏｓｔ、２０…ストレージシステム、３０…データ通信モジュール、３１…Ｈｏｓｔ通信用プロトコル回路、４０…コントローラ、４１…主記憶、４２…コントローラ間中継器、４３…Ｄｒｉｖｅ通信用プロトコル回路、５０…デバイス通信制御モジュール、５１…仮想デバイス、６０…デバイス管理テーブル、７０…ＣＰＵ（Central Processing Unit）、８０…データ記憶モジュール、９０…ＳＷ（Switch）、９１…ＮＢＴ−ＥＰ（Non Transparent Bride - EndPoint）、９２…Ｐｏｒｔ、１００…ＰＣＩｅデバイス、
【図１】
2020173603.tif 000003
【図２】
2020173603.tif 000004
【図３】
2020173603.tif 000005
【図４】
2020173603.tif 000006
【図５】
2020173603.tif 000007
【図６】
2020173603.tif 000008
【図７】
2020173603.tif 000009
【図８】
2020173603.tif 000010
【図９】
2020173603.tif 000011
【図１０】
2020173603.tif 000012
【図１１】
2020173603.tif 000013
【図１２】
2020173603.tif 000014