(57)【要約】【課題】仮想化支援機能を有して複数のコアを含むプロセッサで、ブロック機能と、仮想化ソフトウェア上で稼働するファイル機能とを統合するストレージ装置の性能の低下を抑制する。【解決手段】仮想化支援機能を有する複数のプロセッサと、メモリと、プロセッサにアクセスされるストレージデバイスとを含み、ストレージ装置は、プロセッサのうち仮想化支援機能を無効にした第１のプロセッサグループと、プロセッサのうち仮想化支援機能を有効にした第２のプロセッサグループと、を含み、ストレージデバイスを制御する第１のＯＳに第２のプロセッサグループを割り当てて第１のＯＳを起動させ、仮想マシンを稼働させる仮想化部に第２のプロセッサグループを割り当てて前記仮想化部を起動させ、前記仮想化部が第２のＯＳを起動させ、仮想化部がメモリに第１のＯＳと第２のＯＳが通信を行う通信経路を設定する。【選択図】図１
2014235501.tif 000002
【特許請求の範囲】
【請求項１】
仮想化支援機能を有する複数のプロセッサと、メモリと、前記プロセッサにアクセスされるストレージデバイスとを含むストレージ装置の制御方法であって、
前記ストレージ装置は、
前記プロセッサのうち仮想化支援機能を無効にした第１のプロセッサグループと、前記プロセッサのうち仮想化支援機能を有効にした第２のプロセッサグループと、を含み、
前記ストレージデバイスを制御する第１のＯＳに前記第１のプロセッサグループを割り当てて、前記第１のＯＳを起動させる第１のステップと、
仮想マシンを稼働させる仮想化部に前記第２のプロセッサグループを割り当て、前記仮想化部を起動させる第２のステップと、
前記仮想化部が、前記メモリのうちの所定の領域を前記第２のＯＳに割り当てて、当該第２のＯＳを起動させる第３のステップと、
前記仮想化部が、前記メモリに前記第１のＯＳと第２のＯＳが通信を行う通信経路を設定する第４のステップと、
を含むことを特徴とするストレージ装置の制御方法。
【請求項２】
請求項１に記載のストレージ装置の制御方法であって、
前記仮想化部が、前記メモリ上に配置した前記通信経路のアドレス情報および生成状態を含む通信経路制御情報を生成する第５のステップと、
前記仮想化部が、前記通信経路の利用開始を検出する第６のステップと、
前記仮想化部が、前記通信経路の利用開始を前記第１のＯＳに通知する第７のステップと、
をさらに含むことを特徴とするストレージ装置の制御方法。
【請求項３】
請求項２に記載のストレージ装置の制御方法であって、
前記第４のステップは、
前記仮想化部が、前記メモリに前記仮想化部と前記第１のＯＳの双方がアクセス可能な共有領域を設定し、
前記第５のステップは、
前記仮想化部が、前記第２のＯＳに割り当てたメモリの領域について、前記第２のＯＳから認識されるゲスト物理アドレスと、前記第１のＯＳから認識されるホスト物理アドレスとの関連付けを保持するアドレス変換情報を生成し、
前記第３のステップは、
前記仮想化部が、前記アドレス変換情報を確定するステップと、
前記仮想化部が、前記アドレス変換情報を、前記共有領域に格納するステップと、
前記仮想化部が、前記第１のＯＳに対して、前記アドレス変換情報を前記共有領域に格納したことを通知するステップと、
を含むことを特徴とするストレージ装置の制御方法。
【請求項４】
請求項３に記載のストレージ装置の制御方法であって、
前記通信経路は、前記ストレージデバイスへの要求と、該要求に付随するデータの位置情報を含むバッファアドレスリストと、を格納する要求バッファを含み、
前記第２のＯＳが、前記ストレージデバイスに対する要求と当該要求に付随するデータを受信する第８のステップと、
前記第２のＯＳが、前記受信したデータの位置情報を示すバッファアドレスリストを生成する第９のステップと、
前記第２のＯＳが、前記要求バッファに対して前記要求とバッファアドレスリストを格納する第１０のステップと、
前記第１のＯＳが、前記要求バッファから前記要求を取得し、前記バッファアドレスリストを参照して前記要求に付随するデータを取得する第１１のステップと、
をさらに含むことを特徴とするストレージ装置の制御方法。
【請求項５】
請求項４に記載のストレージ装置の制御方法であって、
前記仮想化部は、前記要求バッファに対して新たな要求を格納する位置を示す要求ＰＩ（Ｐｒｏｄｕｃｅｒ  Ｉｎｄｅｘ）レジスタと、前記要求バッファから読み込む要求の位置を指し示す要求ＣＩ（Ｃｏｎｓｕｍｅｒ  Ｉｎｄｅｘ）レジスタと、を前記メモリ上に設定し、前記第１のＯＳ及び前記第２のＯＳに対して前記要求ＰＩレジスタと前記要求ＣＩレジスタとを提供し、
前記第１０のステップは、
前記第２のＯＳは、前記要求バッファに対して前記要求とバッファアドレスリストを格納した後に、前記要求ＰＩレジスタを更新し、
前記第１１のステップは、
前記第１のＯＳが、前記要求ＰＩレジスタの更新を監視して、前記要求ＰＩレジスタが更新されたときには、前記要求バッファから前記ストレージデバイスへの要求と、前記要求に付随するデータを取得してから前記要求ＣＩレジスタを更新することを特徴とするストレージ装置の制御方法。
【請求項６】
請求項５に記載のストレージ装置の制御方法であって、
前記第１１のステップは、
前記第１のＯＳが、前記バッファアドレスリストを参照して、前記バッファアドレスリストに格納された前記データの位置情報を前記ゲスト物理アドレスで取得し、前記アドレス変換情報を取得して前記ゲスト物理アドレスを、前記ホスト物理アドレスに変換し、前記変換されたホスト物理アドレスを用いて、前記データの読出しを行うことを特徴とするストレージ装置の制御方法。
【請求項７】
請求項４に記載のストレージ装置の制御方法であって、
前記通信経路は、前記ストレージデバイスに対する前記要求の処理結果を含む応答を格納する応答バッファを含み、
前記第１のＯＳが、前記取得した要求をストレージデバイスに対して実行し、前記ストレージデバイスからの応答を取得する第１２のステップと、
前記第１のＯＳが、前記応答を前記応答バッファに格納する第１３のステップと、
前記第２のＯＳは、前記応答バッファから前記応答を取得する第１４のステップと、
をさらに含むことを特徴とするストレージ装置の制御方法。
【請求項８】
請求項７に記載のストレージ装置の制御方法であって、
前記仮想化部は、前記応答バッファに対して新たな応答を格納する位置を示す応答ＰＩ（Ｐｒｏｄｕｃｅｒ  Ｉｎｄｅｘ）レジスタと、前記応答バッファから次に読み出す応答を指し示す応答ＣＩ（Ｃｏｎｓｕｍｅｒ  Ｉｎｄｅｘ）レジスタと、を前記メモリ上に設定し、前記第１のＯＳおよび前記第２のＯＳに対して前記応答ＰＩレジスタと前記応答ＣＩレジスタとを提供し、
前記第１３のステップは、
前記第１のＯＳが、前記応答バッファに前記応答を格納した後に、前記応答ＰＩレジスタを更新し、前記仮想化部に対して割り込みを通知し、
前記第１４のステップは、
前記仮想化部が前記割り込みを受信すると前記第２のＯＳに対して当該割り込みを通知し、前記第２のＯＳは、前記応答ＣＩレジスタを参照して前記応答バッファから前記応答を読み出した後、前記応答ＣＩレジスタを更新することを特徴とするストレージ装置の制御方法。
【請求項９】
仮想化支援機能を有する複数のプロセッサと、メモリと、前記プロセッサにアクセスされるストレージデバイスとを含むストレージ装置であって、
前記プロセッサのうち仮想化支援機能を無効にした第１のプロセッサグループと、
前記プロセッサのうち仮想化支援機能を有効にした第２のプロセッサグループと、
前記第１のプロセッサグループを割り当てて、前記ストレージデバイスを制御する第１のＯＳと、
前記第２のプロセッサグループを割り当てて、仮想マシンを稼働させる仮想化部と、を有し、
前記仮想化部は、
前記メモリのうちの所定の領域を第２のＯＳに割り当てて、当該第２のＯＳを起動して仮想マシンとして提供し、前記メモリ上に前記第１のＯＳと第２のＯＳが通信を行う通信経路を設定することを特徴とするストレージ装置。
【請求項１０】
請求項９に記載のストレージ装置であって、
前記仮想化部は、
前記メモリ上に配置した前記通信経路のアドレス情報および生成状態を含む通信経路制御情報を生成し、前記通信経路の利用開始を検出し、前記利用開始を検出したときには、前記通信経路の利用開始を前記第１のＯＳに通知することを特徴とするストレージ装置。
【請求項１１】
請求項１０に記載のストレージ装置であって、
前記仮想化部は、
前記メモリに前記仮想化部と前記第１のＯＳの双方がアクセス可能な共有領域を設定し、前記第２のＯＳに割り当てたメモリの領域について、前記第２のＯＳから認識されるゲスト物理アドレスと、前記第１のＯＳから認識されるホスト物理アドレスとの関連付けを保持するアドレス変換情報を生成して前記共有領域に格納し、前記第１のＯＳに対して、前記アドレス変換情報を前記共有領域に格納したことを通知することを特徴とするストレージ装置。
【請求項１２】
請求項１１に記載のストレージ装置であって、
前記通信経路は、前記ストレージデバイスへの要求と、該要求に付随するデータの位置情報を含むバッファアドレスリストと、を格納する要求バッファを含み、
前記仮想化部は、
前記第２のＯＳが、ストレージデバイスに対する要求と当該要求に付随するデータを受信し、前記受信したデータの位置情報を示すバッファアドレスリストを生成して、前記要求バッファに対して前記要求とバッファアドレスリストを格納し、
前記第１のＯＳは、
前記要求バッファから前記要求を取得し、前記バッファアドレスリストを参照して前記要求に付随するデータを取得することを特徴とするストレージ装置。
【請求項１３】
請求項１２に記載のストレージ装置であって、
前記仮想化部は、
前記要求バッファに対して新たな要求を格納する位置を示す要求ＰＩ（Ｐｒｏｄｕｃｅｒ  Ｉｎｄｅｘ）レジスタと、前記要求バッファから読み込む要求の位置を指し示す要求ＣＩ（Ｃｏｎｓｕｍｅｒ  Ｉｎｄｅｘ）レジスタと、を前記メモリ上に設定し、前記第１のＯＳ及び前記第２のＯＳに対して前記要求ＰＩレジスタと前記要求ＣＩレジスタとを提供し、前記第２のＯＳが、前記要求バッファに対して前記要求とバッファアドレスリストを格納した後に、前記要求ＰＩレジスタを更新し、
前記第１のＯＳは、
前記要求ＰＩレジスタの更新を監視して、前記要求ＰＩレジスタが更新されたときには、前記要求バッファから前記ストレージデバイスへの要求と、前記要求に付随するデータを取得してから前記要求ＣＩレジスタを更新することを特徴とするストレージ装置。
【請求項１４】
請求項１３に記載のストレージ装置であって、
前記第１のＯＳは、
前記バッファアドレスリストを参照して、前記バッファアドレスリストに格納された前記データの位置情報をゲスト物理アドレスで取得し、前記アドレス変換情報を取得して前記ゲスト物理アドレスを、ホスト物理アドレスに変換し、前記変換されたホスト物理アドレスを用いて、前記データの読出しを行うことを特徴とするストレージ装置。
【請求項１５】
仮想化支援機能を有する複数のプロセッサと、メモリとを含む情報処理装置であって、
前記プロセッサのうち仮想化支援機能を無効にした第１のプロセッサグループと、
前記プロセッサのうち仮想化支援機能を有効にした第２のプロセッサグループと、
前記第２のプロセッサグループを割り当てて、１以上の仮想マシンを稼働させる仮想化部と、
前記メモリ上に設定されて、前記仮想マシンと前記第１のプロセッサグループが通信を行う通信経路と、
を備えたことを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチコアＣＰＵもしくはマルチコアプロセッサを有する計算機で仮想化ソフトウェアを利用して複数のＯＳを実行する場合の通信技術に関する。
【背景技術】
【０００２】
半導体プロセスの微細化により、ｘ８６サーバを中心に単一のＬＳＩ上に複数のプロセッサコアを搭載するマルチコア化が進展している。例えば、２ソケットのＣＰＵを搭載したサーバであれば、８コア×２ソケット＝１６コアが単一のＳＭＰシステム上で利用可能となる。
【０００３】
多数のＣＰＵコアを効率よく利用するため、単一のＳＭＰ及び計算機リソースを複数の論理的な区画に分割する仮想化ソフトウェアが一般的に使用されている（例えば、特許文献１）。仮想化ソフトウェアは物理的なＣＰＵコアと論理区画との対応付けを管理し、各論理区画で独立してＯＳを稼働させることにより、単一のＯＳでは使い切れないＣＰＵコアを有効に活用する。
【０００４】
仮想化ソフトウェアが動作するためには、ＣＰＵによる専用の支援機能が欠かせない。近年のＩｎｔｅｌ（登録商標）社製のＣＰＵでは、仮想化ソフトウェアによる物理資源の管理をサポートするための専用支援機能（仮想化支援機能）を備えており、例えば、ＶＴ−ｘ（Ｖｉｒｔｕａｌｉｚａｔｉｏｎ  Ｔｅｃｈｎｏｌｏｇｙ  ｆｏｒ  Ｘｅｏｎ）として知られている（例えば、非特許文献１）。この仮想化支援機能の一例としては、拡張ページテーブル（ＥＰＴ：  Ｅｘｔｅｎｄｅｄ  Ｐａｇｅ  Ｔａｂｌｅ）が挙げられる。ＥＰＴは、論理区画上のＯＳが指定する通常のページテーブルに加えて、仮想化ソフトウェアが指定する制御データ構造であり、論理区画に提供する物理メモリ範囲を規定する。本支援機能により、複数の論理区画上のＯＳが、メモリにアクセスする際に相互に重複の無い物理メモリ領域を指定できるようになるため、安全かつ効率的にサーバの仮想化を実現できる。
【０００５】
ＥＰＴを有効化するため、ハイパバイザ等の仮想化ソフトウェアは、ＣＰＵのモードを仮想化有効のモードに切り替える。ｘ８６系ＣＰＵの場合、モードの切り替えにＶＭＸ  ＯＮ／ＶＭＸ  ＯＦＦ命令を用いる。以下、仮想化有効の状態をＶＭＸＯＮモード、無効の状態をＶＭＸＯＦＦモードと称する。
【０００６】
従来から仮想化ソフトウェアは、汎用の計算や業務アプリケーションを稼働させるサーバ計算機で主に活用されてきた。しかし、近年ではストレージ装置などの非サーバ装置でもｘ８６系ＣＰＵを搭載する例が増えてきている。
【０００７】
ストレージ装置は、多数のハードディスク（ＨＤＤ）または半導体ディスクドライブを内蔵した、データ格納専用のＩＴ機器である。ストレージ装置は大別して、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）に接続されてＨＤＤをセクタ単位でアクセスする「ブロック専用機」と、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）に接続されファイル単位でデータを管理する「ファイル専用機」とに区分される。
【０００８】
従来、これらのストレージ装置は接続インタフェース（Ｉ／Ｆ）別に異なる市場を形成していた。しかし、ハードウェアの性能向上とコモディティ化が進展する中で、ＳＡＮ／ＬＡＮ両方のＩ／Ｆを有する統合型のストレージ装置（以下、統合ストレージ装置）が台頭してきている。
【０００９】
統合ストレージ装置の実現手段として、以下の２つが知られている。
（１）  パッケージング型：ファイル専用機とブロック専用機の両方の装置を同一の筐体に収め、両者をＦｉｂｒｅ  Ｃｈａｎｎｅｌなどのストレージアクセス用のケーブルで接続する。
（２）  仮想化ソフトウェア型：単一ＳＭＰに１つのハイパバイザを稼働させ、１つの論理区画でブロック機能（ブロック制御マイクロプログラムｏｒブロックマイクロ）を、他の区画でファイル機能（ファイルサーバＯＳ）を稼働させる。ブロックとファイル間はｖｉｒｔｉｏなどに代表される論理区画間での通信路で接続する。なお、ひとつのハードウェアで複数のＯＳを同時に実行させる手法としては、例えば、特許文献２が知られている。
【００１０】
一般に（１）のパッケージング型の統合機の場合、ハードウェアリソースがブロック専用機＋ファイル専用機のそれぞれが必要となって２倍かかるためコスト高になる。一方、（２）はＣＰＵおよびメモリの利用効率が高くコストパフォーマンスが良い。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】米国特許出願公開第２０１１−１６１５４１号明細書
【特許文献２】特開平１１−１４９３８５号公報
【非特許文献】
【００１２】
【非特許文献１】Intel 64 and IA-32 Architectures Software Developer’s Manual Volume 3C: System Programming Guide, Part 3
【発明の概要】
【発明が解決しようとする課題】
【００１３】
ブロック専用機は高いスループットと短い応答時間を要求されるデータベースサーバなどのバックエンドとして活用されてきた。従って、性能に対する要求レベルが高い傾向にある。そのため、上記（２）の仮想化ソフトウェア型で実現された統合ストレージ装置では、仮想化モードを有効化することによる性能低下が無視できない場合がある。例えば、ＥＰＴを例に取ると、ＶＭＸＯＦＦモードの場合には１回のページテーブルミスの解決に高々４段のテーブルスキャンで済んでいたところを、最悪のケースでは４×４＝１６テーブルのスキャンが必要になり、処理性能が低下するという問題があった。
【００１４】
また、上記（２）の仮想化ソフトウェア型で実現された統合ストレージ装置では、ファイル機能は、ブロック機能を介してディスクドライブなどの記憶媒体にアクセスする。ファイル機能を提供するファイルサーバＯＳは、仮想化ソフトウェア上で稼働する。一方、ブロック機能を提供するブロック制御マイクロプログラム（以下、ブロックＯＳ）は仮想化ソフトウェアと同一のハードウェアで稼働する。ファイルサーバＯＳがディスクドライブにアクセスする際には、ブロックＯＳとの間でデータの送受信を行う必要がある。しかしながら、従来の技術では、ファイルサーバＯＳがディスクドライブにアクセスする度に、仮想化ソフトウェアを介してブロックＯＳとデータの送受信を行う必要があるため、仮想化ソフトウェアの処理がオーバーヘッドとなって、ファイルサーバＯＳが高速なブロック機能を有効に利用できない、という問題があった。
【００１５】
そこで本発明は、上記問題点に鑑みてなされたもので、複数のコアを含むプロセッサを有するハードウェアで、仮想化ソフトウェアを用いてブロック機能とファイル機能を統合する統合ストレージ装置において、性能の低下を抑制する技術を提供することを目的とする。
【課題を解決するための手段】
【００１６】
本発明は、仮想化支援機能を有する複数のプロセッサと、メモリと、前記プロセッサにアクセスされるストレージデバイスとを含むストレージ装置の制御方法であって、前記ストレージ装置は、前記プロセッサのうち仮想化支援機能を無効にした第１のプロセッサグループと、前記プロセッサのうち仮想化支援機能を有効にした第２のプロセッサグループと、を含み、前記ストレージデバイスを制御する第１のＯＳに前記第１のプロセッサグループを割り当てて、前記第１のＯＳを起動させる第１のステップと、仮想マシンを稼働させる仮想化部に前記第２のプロセッサグループを割り当て、前記仮想化部を起動させる第２のステップと、前記仮想化部が、前記メモリのうちの所定の領域を前記第２のＯＳに割り当てて、当該第２のＯＳを起動させる第３のステップと、前記仮想化部が、前記メモリに前記第１のＯＳと第２のＯＳが通信を行う通信経路を設定する第４のステップと、を含む。
【発明の効果】
【００１７】
したがって、本発明は、第１のＯＳ（例えば、ブロック機能）と第２のＯＳ（例えば、ファイル機能）は、メモリ上の通信経路を介して高速に通信を行うことが可能となる。
【図面の簡単な説明】
【００１８】
【図１】本発明の実施例を示し、マルチコアプロセッサを有するひとつのハードウェアを用いてファイル機能とブロック機能を統合したストレージ装置の一例を示すブロック図である。
【図２Ａ】本発明の実施例を示し、メモリリソースの物理アドレス空間の一例を示すマップである。
【図２Ｂ】本発明の実施例を示し、メモリリソースのアドレス空間と、プログラム毎のアクセス権限を示す図である。
【図３】本発明の実施例を示し、スーパーバイザ領域の詳細を示すブロック図である。
【図４Ａ】本発明の実施例を示し、ブロック制御マイクロプログラムが管理するＣＰＵ割り当て管理テーブルの一例を示す図である。
【図４Ｂ】本発明の実施例を示し、ブロック制御マイクロプログラムが管理するメモリ割り当て管理テーブルの一例を示す図である。
【図４Ｃ】本発明の実施例を示し、ブロック制御マイクロプログラムが管理するＩ／Ｏ割り当て管理テーブルの一例を示す図である。
【図４Ｄ】本発明の実施例を示し、ＶＭＭが管理する通信データパス制御テーブルの一例を示す図の前半部である。
【図４Ｅ】本発明の実施例を示し、ＶＭＭが管理する通信データパス制御テーブルの一例を示す図の後半部である。
【図４Ｆ】本発明の実施例を示し、ＶＭＭが管理するアドレス変換テーブルの一例を示す図である。
【図５Ａ】本発明の実施例を示し、通信データパスの初期化処理の一例を示すタイムチャートである。
【図５Ｂ】は、ストレージ装置の起動からファイルサーバＯＳの実行までの処理の一例を示すシーケンス図である。
【図６Ａ】本発明の実施例を示し、ファイルサーバＯＳからブロック制御マイクロプログラムへの通信処理の一例を示すタイムチャートである。
【図６Ｂ】本発明の実施例を示し、上記図６Ａの処理のうちファイルサーバＯＳで行われる処理の一例を示すフローチャートである。
【図６Ｃ】本発明の実施例を示し、上記図６Ａの処理のうちブロック制御マイクロプログラムで行われる処理の一例を示すフローチャートである。
【図７Ａ】本発明の実施例を示し、ブロック制御マイクロプログラム１０８からファイルサーバＯＳへの通信処理の一例を示すタイムチャートである。
【図７Ｂ】本発明の実施例を示し、上記図７Ａの処理のうちブロック制御マイクロプログラムで行われる処理の一例を示すフローチャートである。
【図７Ｃ】本発明の実施例を示し、上記図７Ａの処理のうちファイルサーバＯＳで行われる処理の一例を示すフローチャートである。
【図８Ａ】は本発明の実施例を示し、ＰＣＩコンフィグレジスタの一例を示す図である。
【図８Ｂ】は、本発明の実施例を示し、ＭＭＩＯレジスタ（ＢＡＲ０）の一例を示す図である。
【図９Ａ】は、本発明の実施例を示し、要求リングバッファのエントリデータフォーマットの一例を示す図である。
【図９Ｂ】は、本発明の実施例を示し、応答リングバッファのエントリデータフォーマットの一例を示す図である。
【図９Ｃ】は、ＳＧＬのデスクリプタデータフォーマットの一例を示す図である。
【発明を実施するための形態】
【００１９】
以下、本発明の一実施例を添付図面に基づいて説明する。
【００２０】
図１は、本発明の実施例を示し、マルチコアプロセッサを有するひとつのハードウェア上にファイル機能とブロック機能を統合したストレージ装置の一例を示すブロック図である。
【００２１】
本実施例では、仮想化ソフトウェア上のゲストＯＳ（または仮想マシン）としてファイルサーバＯＳ（以下、ファイルＯＳとする）を稼働させ、仮想化ソフトウェアと同一のハードウェア上で、ブロック制御マイクロプログラム（ブロック機能）を独立して稼働させ、ファイル機能とブロック機能をそれぞれ提供するストレージ装置の一例について説明する。
【００２２】
ハードウェア１０９は、上述した仮想化支援機能を備えたマルチコアのＣＰＵリソース１１２と、メモリリソース１１３と、通信やデータの送受信を行うＩ／Ｏリソース１１４と、を含む。
【００２３】
ＣＰＵリソース１１２は、仮想化支援機能を有効（ＶＭＸ  ＯＮ）に設定したコアのグループＡ１１５と、仮想化支援機能を無効（ＶＭＸ  ＯＦＦ）に設定したコアのグループＢ１１６と、に分類される。仮想化支援機能が有効なグループＡ１１５では、仮想化ソフトウェア上のゲストＯＳとしてファイルサーバＯＳ１０５（第２のＯＳ）が実行される。一方、仮想化支援機能を無効にしたグループＢ１１６では、ブロック制御マイクロプログラム（第１のＯＳ）１０８が実行される。
【００２４】
メモリリソース１１３は、複数のメモリデバイス１１７ａ、ｌ１７ｂを含んで物理アドレス空間を提供する。
【００２５】
Ｉ／Ｏリソース１１４は、ネットワーク（図示省略）を介して計算機（図示省略）と通信を行うＮＩＣ１１８と、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）を介して計算機（図示省略）とデータの送受信を行うＴＡ（Ｔａｒｇｅｔ  Ａｄａｐｔｅｒ）１１９と、データやプログラムを格納するストレージデバイス１２０と、ストレージデバイス１２０へアクセスするためのＨＢＡ（Ｈｏｓｔ  Ｂｕｓ  Ａｄａｐｔｏｒ）１２０ｂを含む。ブロック制御マイクロプログラム１０８がストレージデバイス１２０への処理要求（コマンド）を発行する際、常にＨＢＡ１２０ｂを介して行う。
【００２６】
なお、ＮＩＣ１１８、ＴＡ１１９、ＨＢＡ１２０ｂは、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｆａｃｅｓ）仕様に基づくＩ／Ｏデバイスを想定している。
【００２７】
ハードウェア１０９のうち予め設定したファイルサーバパーティション１０１では、仮想化ソフトウェアとしてのＶＭＭ（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｍａｎａｇｅｒ）１０６が実行され、ＶＭＭ１０６上ではファイルサーバＯＳ１０５が実行される。ファイルサーバパーティション１０１には、仮想化支援機能が有効に設定されたグループＡ１１５のＣＰＵリソース１１２が割り当てられる。
【００２８】
ハードウェア１０９では、予め設定したブロックサービスパーティション１０２でブロック制御マイクロプログラム１０８が実行される。ブロックサービスパーティション１０２には、仮想化支援機能が無効に設定されたグループＢ１１６のＣＰＵリソース１１２が割り当てられる。
【００２９】
なお、メモリリソース１１３のうち、メモリデバイス１１７ａをファイルサーバパーティション１０１に割り当て、メモリデバイス１１７ｂをブロックサービスパーティション１０２に割り当てるようにしても良い。
【００３０】
次に、ストレージ装置のソフトウェア構成について説明する。ハードウェア１０９上で、ブロック制御マイクロプログラム１０８とＶＭＭ１０６は、システムソフトウェアとして独立して稼働する。
【００３１】
ブロック制御マイクロプログラム１０８は、ハードウェア１０９を直接制御するために、予め設定されたブロックサービスパーティション１０２で稼働し、リソース管理テーブル１４２と、ＨＢＡ１２０ｂを制御する物理ＨＢＡドライバ１４１と、この物理ＨＢＡドライバ１４１が送受信するデータやコマンドを保持するキャッシュ制御部１４０と、ファイルサーバＯＳ１０５と直接通信を行うキューサービス１３８とを含む。
【００３２】
リソース管理テーブル１４２は、後述するように、ＣＰＵ割り当て管理テーブル４０１（図４Ａ）と、メモリ割り当て管理テーブル４０２（図４Ｂ）と、Ｉ／Ｏ割り当て管理テーブル４０３（図４Ｃ）と、を含む。
【００３３】
キューサービス１３８は、後述するように、ＶＭＭ１０６からアドレス変換情報を受信し、ファイルサーバＯＳ１０５のデータバッファ１２４との間でデータ転送を行うデータバッファＲ／Ｗ１３５や、要求リングバッファ１２５や応答リングバッファ１２６との間で情報の送受信を行うキューエントリＲ／Ｗ１３６を含む。キューサービス１３８はキャッシュ制御部１４０を介して物理ＨＢＡドライバ１４１との間でデータやコマンドの送受信を行う。
【００３４】
また、ブロック制御マイクロプログラム１０は、ファイルサーバＯＳ１０５から送られるストレージ制御コマンドをキューサービス１３８、キャッシュ制御部１４０及び物理ＨＢＡドライバ１４１で処理し、ファイルサーバＯＳ１０５を管理するＶＭＭ１０６に対してストレージ制御コマンドの完了通知のための物理割込み１３４を発行する。
【００３５】
ＶＭＭ１０６は、予め設定されたファイルサーバパーティション１０１内で、１以上のゲストＯＳを稼働させる。本実施例では、ＶＭＭ１０６がゲストＯＳとしてファイルサーバＯＳ１０５を仮想計算機として稼働させる例を示す。ＶＭＭ１０６は、ファイルサーバパーティション１０１のリソースをファイルサーバＯＳ１０５に割り当てて、仮想計算機を生成する。
【００３６】
ＶＭＭ１０６は、ファイルサーバＯＳ１０５に仮想ＣＰＵ（図示省略）と、メモリと、仮想ＨＢＡ１２７を提供する。なお、図示はしないが、ＶＭＭ１０６は、仮想ＮＩＣもファイルサーバＯＳ１０５に提供する。仮想ＣＰＵとしては、仮想化支援機能がＯＮに設定されたグループＡ１１５のＣＰＵリソース１１２が割り当てられる。ファイルサーバＯＳ１０５に割り当てられるメモリは、ファイルサーバパーティション１０１内の所定の記憶領域が割り当てられる。また、仮想ＨＢＡ１２７は、ＰＣＩコンフィグレジスタ１３０と、ＭＭＩＯレジスタ１３１を含む。
【００３７】
ＶＭＭ１０６は、ファイルサーバＯＳ１０５とブロック制御マイクロプログラム１０８が高速で通信を行うための通信データパスの情報を保持する通信データパス制御テーブル１３３を保持する。なお、通信データパスは、メモリリソース１１３上に設定されて、データとコマンドまたは応答（アクセス結果）の送受信を行う通信経路である。
【００３８】
また、ＶＭＭ１０６は、仮想ＨＢＡ１２７の状態と、ファイルサーバＯＳ１０５とブロック制御マイクロプログラム１０８の間で送受信される情報の位置を管理するアドレス変換テーブル１２９をメモリリソース１１３上に保持する。なお、ＶＭＭ１０６は、アドレス変換テーブル１２９をブロック制御マイクロプログラム１０８と共有する。
【００３９】
ＶＭＭ１０６上で稼働するファイルサーバＯＳ１０５は、仮想ＨＢＡ１２７を制御する仮想ＨＢＡドライバ１２３（図中ｖＨＢＡドライバとする）と、ファイルシステムによってデータの送受信を行うファイルシステムレイヤ１２１と、を含む。
【００４０】
また、ファイルサーバＯＳ１０５は、図示しない仮想ＮＩＣドライバを介して、クライアント（図示省略）からのファイルアクセスを受け付けて、ブロック制御マイクロプログラム１０８に当該ファイルアクセスを要求する。
【００４１】
ファイルシステムレイヤ１２１は、クライアントからアクセス要求のあったデータやブロック制御マイクロプログラム１０８からのデータを保持するデータバッファ１２４を含む。
【００４２】
仮想ＨＢＡドライバ１２３は、クライアントからアクセス要求のあったデータやコマンドを保持するバッファとして、要求リングバッファ１２５と、応答リングバッファ１２６を含む。
【００４３】
ここで、ＶＭＭ１０６はメモリリソース１１３上でスーパーバイザ領域２０５と、ユーザ領域２０４の双方に所属する。ＶＭＭ１０６のうち、仮想ＨＢＡ１２７とアドレス変換テーブル１２９は、ファイルサーバＯＳ１０５とブロック制御マイクロプログラム１０８及びＶＭＭ１０６の全てのプログラムからアクセス可能な共有領域であるユーザ領域２０４に配置される。
【００４４】
一方、ＶＭＭ１０６の仮想割り込み生成部１３２と、通信データパス制御テーブル１３３及びユーザ領域２０４以外のＶＭＭ１０６の構成要件はスーパーバイザ領域２０５に配置される。なお、スーパーバイザ領域２０５は、ハードウェア１０９に対する制御が可能なブロック制御マイクロプログラム１０８とＶＭＭ１０６がアクセス可能領域である。
【００４５】
そして、仮想ＨＢＡドライバ１２３の要求リングバッファ１２５と、応答リングバッファ１２６もブロック制御マイクロプログラム１０８及びＶＭＭ１０６からアクセス可能な共有領域であるユーザ領域２０４に配置される。
【００４６】
ファイルサーバＯＳ１０５は、クライアントからの要求（コマンド）と、当該要求に付随する転送データの情報を格納するバッファアドレスリストと、を要求リングバッファ１２５に書き込む。ブロック制御マイクロプログラム１０８は、要求リングバッファ１２５からコマンドを取得して、当該コマンドを実行してストレージデバイス１２０にアクセスを行う。
【００４７】
一方、応答リングバッファ１２６は、ブロック制御マイクロプログラム１０８からの処理完了結果を含む応答(レスポンス)を格納する。そして、ファイルサーバＯＳ１０５が、後述する仮想割り込み１２８に基づいて、応答リングバッファ１２６に書き込まれた応答を取得してクライアントへ転送する。
【００４８】
なお、ファイルサーバＯＳ１０はデータバッファ１２４、要求リングバッファ１２５及び応答リングバッファ１２６に対して行う場合には、後述するゲスト物理アドレス空間内の間接アクセス１１１でアクセスする。一方、ブロック制御マイクロプログラム１０８がユーザ領域２０４へアクセスする際には、後述するように、アドレス変換テーブルで、ゲスト物理アドレス空間をホスト物理アドレス空間に変換して、アクセスを実施する。
【００４９】
本実施例では、ファイルサーバＯＳ１０５とブロック制御マイクロプログラム１０８の通信は、メモリリソース１１３上に設定された通信データパス（通信経路）によって高速なアクセスを実現する。具体的には、仮想ＨＢＡ１２７のＭＭＩＯレジスタ１３１を、トラップ無しでファイルサーバＯＳ１０５にアクセスさせ、ＭＭＩＯレジスタ１３１への書き込みについては、ブロック制御マイクロプログラム１０８が直接ポーリングしてデータを取得することにより、高速な通信を実現する。
【００５０】
＜ソフトウェアの概要＞
図２Ａ、図２Ｂは、メモリリソース１１３のアドレス空間を示す。図２Ａは、メモリリソース１１３のアドレス空間の一例を示すマップである。図２Ｂは、メモリリソースのアドレス空間と、プログラム毎のアクセス権限を示す図である。
【００５１】
メモリリソース１１３のうち、ブロック制御マイクロプログラム１０８とＶＭＭ１０６に割り当てられたアドレスＡＤ＃１からアドレスＡＤ＃４までの領域は、ホスト物理アドレス空間２０３で表される。
【００５２】
本実施例では、アドレス２０１＝０番地から所定のアドレスＡＤ＃１までが、ブロック制御マイクロプログラム１０８に割り当てられるブロック制御マイクロプログラム固有領域２０７である。そして、アドレスＡＤ＃１〜アドレスＡＤ＃４までがＶＭＭ１０６に割り当てられ、ＶＭＭのアクセス範囲２０９となる。このうち、アドレスＡＤ＃１〜アドレスＡＤ＃２は、ＶＭＭ１０６に割り当てられるＶＭＭ固有領域２０８である。
【００５３】
また、アドレスＡＤ＃２〜アドレスＡＤ＃３は、ＶＭＭ１０６のゲストＯＳに割り当てられるユーザ領域２０４であり、本実施例では、ファイルサーバＯＳ１０５に割り当てられる。このユーザ領域２０４は、ＯＳ間共有領域２０６として機能する。そして、アドレスＡＤ＃３〜アドレスＡＤ＃４の領域は、ブロック制御マイクロプログラム１０８とＶＭＭ１０６がアクセス可能なスーパーバイザ領域２０５として設定される。
【００５４】
アドレスＡＤ＃２〜アドレスＡＤ＃４のゲスト物理アドレス空間２０２は、全てのプログラムがアクセス可能なユーザ領域２０４と、ブロック制御マイクロプログラム１０８とＶＭＭ１０６のみがアクセス可能なスーパーバイザ領域２０５に二分される。
【００５５】
アドレスＡＤ＃２〜アドレスＡＤ＃３のユーザ領域２０４は、ゲストＯＳが認識するアドレスであり、ゲスト物理アドレス空間２０２としてＶＭＭ１０６が提供する。本実施例では、ファイルサーバＯＳ１０５がゲスト物理アドレス空間２０２に割り当てられる。このゲスト物理アドレス空間２０２は、ホスト物理アドレス空間２０３のアドレスＡＤ＃２のオフセットを差し引いたアドレスである。
【００５６】
ユーザ領域２０４には、ファイルサーバＯＳ１０５がデータバッファ１２４や仮想ＨＢＡドライバ１２３を保持する使用（Usable）領域２１２と、ＶＭＭ１０６が提供する仮想ＨＢＡ１２７やアドレス変換テーブル１２９を保持する予約領域２１３と、が含まれる。スーパーバイザ領域２０５には、ＶＭＭ１０６が提供する通信データパス制御テーブル１３３等が含まれる。なお、通信データパス制御テーブル１３３のアドレスは、予め設定されたホスト物理アドレス空間２０３に設定され、ブロック制御マイクロプログラム１０８にも通信データパス制御テーブル１３３のアドレスは設定されている。
【００５７】
図２Ｂにおいて、物理アドレスの領域の名称がカラム２１１１に格納され、本実施例では、ユーザ領域、スーパーバイザ領域、ＶＭＭ固有領域、ブロック制御マイクロプログラム１０８がそれぞれのエントリに格納される。カラム２１１２にはファイルサーバＯＳ１０５の各領域に対するアクセス可否が「○」＝アクセス可、「×」＝アクセス不可として設定される。カラム２１１３にはＶＭＭ１０６の各領域に対するアクセス可否が「○」＝アクセス可、「×」＝アクセス不可として設定される。また、カラム２１１４にはブロック制御マイクロプログラム１０８の各領域に対するアクセス可否が「○」＝アクセス可、「×」＝アクセス不可として設定される。
【００５８】
図２Ｂのように、ブロック制御マイクロプログラム１０８は、ホスト物理アドレス空間２０３の全てに渡ってアクセス可能である。次に、ＶＭＭ１０６は、ブロック制御マイクロプログラム固有領域２０７以外についてアクセス可能である。ファイルサーバＯＳ１０５のアクセス範囲は、ユーザ領域２０４のみとなる。このユーザ領域２０４を介して、ブロック制御マイクロプログラム１０８とファイルサーバＯＳ１０５がデータの送受信を直接実施する。
【００５９】
本実施例では、まず、ブロック制御マイクロプログラム１０８がホスト物理アドレス空間２０３にロードされて、予め設定されたグループＢ１１６のＣＰＵリソース１１２によって実行される。ブロック制御マイクロプログラム１０８は起動が完了すると、ＶＭＭ１０６を起動させ、予め設定されたグループＡ１１５のＣＰＵリソース１１２によってＶＭＭ１０６を起動させる。そして、ＶＭＭ１０６は予め設定されたゲストＯＳとしてファイルサーバＯＳ１０５を起動させ、ファイルサーバを生成する。
【００６０】
後述するように、ＶＭＭ１０６は、ホスト物理アドレス空間２０３のスーパーバイザ領域２０５に通信データパスの配置アドレスの情報と状態を含む通信データパス制御テーブル１３３を生成する。そして、ＶＭＭ１０６は通信データパス制御テーブル１３３が使用開始の状態になると、ブロック制御マイクロプログラム１０８へ通知する。この通知より、ブロック制御マイクロプログラム１０８は、ＶＭＭ１０６がファイルサーバＯＳ１０５を起動させて、通信が可能になったことを取得する。
【００６１】
なお、図２Ａでは、各プログラムに割り当てられるメモリ領域の物理アドレスが連続的な例を示した。各プログラムに割り当てられるメモリ領域の物理アドレスが不連続の場合には、連続するメモリ領域ごとに、ベースアドレス＋サイズ＋オフセットアドレスで構成される変換情報を設定すればよい。
【００６２】
ＣＰＵリソース１１２は、各プログラムに従って動作することによって、所定の機能を実現する機能部として動作する。例えば、ＣＰＵリソース１１２は、ブロック制御マイクロプログラム１０８を実行することでブロック制御マイクロ部として機能する。他のプログラムについても同様である。さらに、ＣＰＵリソース１１２は、各プログラムが実行する複数の処理のそれぞれを実現する機能部としても動作する。計算機及び計算機システムは、これらの機能部を含む装置及びシステムである。
【００６３】
ストレージ装置の各機能を実現するプログラム、テーブル等の情報は、ストレージデバイス１２０や不揮発性半導体メモリ、ハードディスクドライブ、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記憶デバイス、または、ＩＣカード、ＳＤカード、ＤＶＤ等の計算機読み取り可能な非一時的データ記憶媒体に格納することができる。
【００６４】
＜通信データパスの概要＞
図３は、メモリリソース１１３のユーザ領域２０４と、スーパーバイザ領域２０５の詳細を示すブロック図である。
【００６５】
図１、図２Ａで示したように、ユーザ領域２０４には、ファイルシステムレイヤ１２１のデータバッファ１２４、仮想ＨＢＡドライバ１２３、ＰＣＩコンフィグレジスタ１３０、ＭＭＩＯレジスタ１３１、アドレス変換テーブル１２９が配置される。
【００６６】
仮想ＨＢＡドライバ１２３の要求リングバッファ１２５と応答リングバッファ１２６はファイルサーバＯＳ１０５とブロック制御マイクロプログラム１０８の通信データパスとして機能する。すなわち、要求リングバッファ１２５は要求系のキューとして機能し、応答リングバッファ１２６は応答系のキューとして機能する。
【００６７】
要求リングバッファ１２５は、ストレージデバイス１２０に対するコマンド（または要求）を格納するＳＣＳＩ  ＣＤＢ（Command Descriptor Block）３０４と、コマンドに付随するデータの位置情報（データバッファ１２４）を示すバッファアドレスリストを格納するＳＧＬ（Scatter Gather List）３０３を含む。
【００６８】
ファイルサーバＯＳ１０５は、クライアント（図示省力）からストレージデバイス１２０に対する要求（コマンド及びデータ）を受け付けると、要求リングバッファ１２５のＳＣＳＩ  ＣＤＢ３０４に受け付けた要求（コマンド）を格納し、さらにデータを受け付けた場合には、データを格納したデータバッファ１２４の位置情報に対応するバッファアドレスリストを生成してＳＧＬ３０３に格納する。そして、後述するように、ブロック制御マイクロプログラム１０８がポーリングにより要求リングバッファ１２５を読み込んで、ストレージデバイス１２０に対してコマンドを実行する。
【００６９】
応答リングバッファ１２６には、ストレージデバイス１２０へのアクセス結果（応答）を格納するｓｔａｔｕｓ３０５を含む。ブロック制御マイクロプログラム１０８は、ｓｔａｔｕｓ３０５に応答（レスポンス）またはデータを格納した位置を書き込む。そして、ファイルサーバＯＳ１０５は、応答リングバッファ１２６のｓｔａｔｕｓ３０５から、ストレージデバイス１２０の応答を読み込んでクライアントに送信する。
【００７０】
ここで、要求リングバッファ１２５と、応答リングバッファ１２６の構成を説明する。まず、要求リングバッファ１２５は、当該要求リングバッファに対して新しい要求を格納する位置を示すポインタとしての要求ＰＩ（ｐｒｏｄｕｃｅｒ  Ｉｎｄｅｘ）レジスタ３１０ａと、要求リングバッファ１２５が次に読み出す要求の格納位置を指し示すポインタとしての要求ＣＩ（Ｃｏｎｓｕｍｅｒ  Ｉｎｄｅｘ）レジスタ３１０ｂを、ＭＭＩＯレジスタ１３１ａに有する。
【００７１】
つまり、要求ＰＩレジスタ３１０ａは、ファイルサーバＯＳ１０５がクライアントから受け付けた新たな要求を格納する要求リングバッファ１２５の位置を指し示す。そして、要求ＣＩレジスタ３１０ｂは、ブロック制御マイクロプログラム１０８が次に読み込むべき要求リングバッファ１２５の位置を指し示す。
【００７２】
応答リングバッファ１２６も要求リングバッファ１２５と同様に２つのインデックスを有する。応答リングバッファ１２６は、当該応答リングバッファに対して新しい応答を格納する位置を示すポインタとしての応答ＰＩ（ｐｒｏｄｕｃｅｒ  Ｉｎｄｅｘ）レジスタ３１１ａと、応答リングバッファ１２６が次に受け付ける応答の格納位置を指し示すポインタとしての応答ＣＩ（Ｃｏｎｓｕｍｅｒ  Ｉｎｄｅｘ）レジスタ３１１ｂを、ＭＭＩＯレジスタ１３１ａに有する。
【００７３】
つまり、応答ＰＩレジスタ３１１ａは、ブロック制御マイクロプログラム１０８が処理した新たな応答を格納する応答リングバッファ１２６の位置を指し示す。そして、応答ＣＩレジスタ３１０ｂは、ファイルサーバＯＳ１０５が次に読み込むべき応答リングバッファ１２６の位置を指し示す。
【００７４】
ここで、ＶＭＭ１０６が提供する仮想ＨＢＡ１２７のＰＣＩコンフィグレジスタ１３０とＭＭＩＯレジスタ１３１の構成について説明する。仮想ＨＢＡ１２７のＰＣＩコンフィグレジスタ１３０は、操作対象のＭＭＩＯレジスタ１３１ａを指定するフィールド（ＢＡＲ０  Ａｄｄｒ）３０１と、割り込み対象のＭＭＩＯレジスタ１３１ｂを指定するフィールド（ＢＡＲ１  Ａｄｄｒ）３０２と、を含む。
【００７５】
操作対象のＭＭＩＯレジスタ１３１ａは、図３で示すように、要求リングバッファ１２５のベースアドレスを格納する要求ベースフィールド３２１ａと、応答リングバッファ１２６のベースアドレスを格納６する応答ベースフィールド３２１ｂと、上述した要求リングバッファ１２５の要求ＰＩレジスタ３１０ａ及び要求ＣＩレジスタ３１０ｂと、上述した応答リングバッファ１２６の応答ＰＩレジスタ３１１ａ及び応答ＣＩレジスタ３１１ｂと、仮想ＨＢＡ１２７の状態を格納する仮想ＨＢＡｓｔａｔｕｓフィールド３０９と、仮想ＨＢＡ１２７の使用可比（使用開始）を示す仮想ＨＢＡｅｎａｂｌｅフィールド３０８を含む。
【００７６】
割り込み対象のＭＭＩＯレジスタ１３１ｂは、拡張メッセージシグナル割り込み（ＭＳＩ−Ｘ：Extended Message Signaled Interrupt）テーブル３０６と、ＭＳＩ−ＸのＰＢＡ（Ｐｅｎｄｉｎｇ  Ｂｉｔ  Ａｒｒａｙ）テーブル３０７と、を含む。ＭＳＩ−Ｘ及びＰＢＡについてはＰＣＩ−Ｅｘｐｒｅｓｓの規格に準拠するものである。
【００７７】
次に、ＶＭＭ１０６が生成するアドレス変換テーブル１２９は、ＶＭＭ１０６とブロック制御マイクロプログラム１０８の両者がアクセス可能な共有領域としてのユーザ領域２０４に配置される。ＶＭＭ１０６は、図２Ａで示したように、ファイルサーバＯＳ１０５に割り当てたユーザ領域２０４と、ブロック制御マイクロプログラム１０８とＶＭＭ１０６がアクセスするスーパーバイザ領域２０５について、ファイルサーバＯＳ１０５から認識されるゲスト物理アドレス空間２０２と、ブロック制御マイクロプログラム１０８から認識されるホスト物理アドレス空間２０３との関連付けを保持するアドレス変換情報を含む。このアドレス変換情報の一例としては、ＶＭＭ１０６がユーザ領域２０４の開始アドレスとして割り当てたアドレスＡＤ＃３となる。つまり、ゲスト物理アドレス空間２０２にアドレスＡＤ＃３を加算したアドレスがホスト物理アドレス空間２０３となる。
【００７８】
なお、このアドレス変換情報は、ＶＭＭ１０６がゲストＯＳとしてのファイルサーバＯＳ１０５を起動するときに、当該ゲストＯＳに割り当てたメモリリソース１１３の開始アドレスをアドレス変換テーブル１２９に書き込む。そして、ＶＭＭ１０６は、アドレス変換テーブル１２９の内容をブロック制御マイクロプログラム１０８に通知しておく。これにより、ブロック制御マイクロプログラム１０８は、ファイルサーバＯＳ１０５が認識するゲスト物理アドレス空間２０２のアドレスで通信を行うことが可能となる。
【００７９】
上記ユーザ領域２０４のファイルシステムレイヤ１２１、仮想ＨＢＡドライバ１２３、仮想ＨＢＡ１２７のアドレスは、ファイルサーバＯＳ１０５がゲスト物理アドレス空間２０２でアクセスする。
【００８０】
すなわち、ＰＣＩコンフィグレジスタ１３０のレジスタ（ＢＡＲ０  Ａｄｄｒ）３０１は、ゲスト物理アドレス空間２０２でＭＭＩＯレジスタ１３１ａの開始アドレスを指定し、レジスタ（ＢＡＲ１  Ａｄｄｒ）３０２は、ゲスト物理アドレス空間２０２でＭＭＩＯレジスタ１３１ｂの開始アドレスを指定する。そして、ＭＭＩＯレジスタ１３１についても同様であり、ＭＭＩＯレジスタ１３１ａは、要求リングバッファ１２５と応答リングバッファ１２６のベースアドレス、ＰＩ及びＣＩをゲスト物理アドレス空間２０２で指定する。
【００８１】
これに対して、図１、図２Ａで示したスーパーバイザ領域２０５には、ブロック制御マイクロプログラム１０８とＶＭＭ１０６が使用する通信データパスに関する情報を保持する通信データパス制御テーブル１３３が配置される。
【００８２】
そして、通信データパス制御テーブル１３３には、ユーザ領域２０４のリソースにアクセスするためのアドレスが、ホスト物理アドレス空間２０３で格納される。
【００８３】
通信データパス制御テーブル１３３は、後述するように、仮想ＨＢＡ１２７のＰＯＳＴ（Power On Self test）の状態を格納するフィールド３１２と、ブロック制御マイクロプログラム１０８が認識した仮想ＨＢＡ１２７の状態を格納するフィールド３１３と、ＰＣＩコンフィグレジスタ１３０を指し示すホスト物理アドレス空間２０３を格納するフィールド３１４と、ＰＣＩコンフィグレジスタ１３０のレジスタ（ＢＡＲ０  Ａｄｄｒ）３０１に対応するＭＭＩＯレジスタ１３１ａへのホスト物理アドレス空間２０３を格納するフィールド３１５と、ＰＣＩコンフィグレジスタ１３０のレジスタ（ＢＡＲ１  Ａｄｄｒ）３０２に対応するＭＭＩＯレジスタ１３１ｂへのホスト物理アドレス空間２０３を格納するフィールド３１６と、アドレス変換テーブル１２９へのホスト物理アドレス空間２０３を格納するフィールド３１７から構成される。なお、通信データパス制御テーブル１３３の詳細については図４Ｄ、図４Ｅで詳述する。
【００８４】
ストレージ装置は、以上のように構成されて、ファイルサーバＯＳ１０５とＶＭＭ１０６及びブロック制御マイクロプログラム１０８がアクセス可能なユーザ領域（共有領域）２０４に仮想ＨＢＡドライバ１２３を配置する。そして、仮想ＨＢＡドライバ１２３の要求リングバッファ１２５と応答リングバッファ１２６を通信データパスとしてファイルサーバＯＳとブロック制御マイクロプログラム１０８が高速な通信を行う。
【００８５】
＜ファイルサーバＯＳからブロック制御マイクロプログラムへの通信の概要＞
次に、ファイルサーバＯＳ１０５からブロック制御マイクロプログラム１０８への通信の概要を説明する。
【００８６】
ファイルサーバＯＳ１０５は、クライアントから受け付けた要求（コマンド）を要求リングバッファ１２５のＳＣＳＩ  ＣＤＢ３０４に格納し、要求に関連するデータはデータバッファ１２４に格納する。そして、ファイルサーバＯＳ１０５は、データバッファ１２４上のデータの位置からバッファアドレスリストを生成してＳＧＬ３０３に格納する。
【００８７】
この要求を取得するブロック制御マイクロプログラム１０８は、ポーリングなどにより、通信データパス制御テーブル１３３でフィールド３１７のアドレス変換テーブル１２９のアドレス変換情報と、フィールド３１５のＭＭＩＯレジスタ１３１ａのアドレスを参照し、要求リングバッファ１２５の要求ＰＩレジスタ３１０ａを取得する。そして、ブロック制御マイクロプログラム１０８は、要求ＣＩレジスタ３１０ａのＳＣＳＩ  ＣＤＢ３０４のコマンドと、当該コマンドに関連する転送データの位置情報を示すバッファアドレスリストをＳＧＬ３０３から取得する。
【００８８】
次に、ブロック制御マイクロプログラム１０８は、アドレス変換テーブル１２９のアドレス変換情報に基づいて、要求ＣＩレジスタ３１０ｂからＳＧＬ３０３のバッファアドレスリストに記載された転送データの位置情報をゲスト物理アドレス空間２０２で取得し、アドレス変換情報を用いてゲスト物理アドレス空間２０２をホスト物理アドレス空間２０３に変換する。そして、ブロック制御マイクロプログラム１０８は、変換されたホスト物理アドレス空間２０３を用いて、要求リングバッファ１２５の転送データの読出しを行う。
【００８９】
ブロック制御マイクロプログラム１０８は、要求リングバッファ１２５からの読み出しが完了すると、要求ＣＩレジスタ３１０ｂの値を更新する。そして、ブロック制御マイクロプログラム１０８は、要求リングバッファ１２５から読み出したコマンドとデータに基づいてストレージデバイス１２０にアクセスする。
【００９０】
以上の処理により、ファイルサーバＯＳ１０５からブロック制御マイクロプログラム１０８への通信はＶＭＭ１０６を介することなくメモリリソース１１３上に設定した通信データパスで実現できる。
【００９１】
＜ブロック制御マイクロプログラム１０８  →  ファイルサーバＯＳ１０５の概要＞
一方、ブロック制御マイクロプログラム１０８がストレージデバイス１２０をアクセスした結果を、ファイルサーバＯＳ１０５に通知する際には、応答リングバッファ１２６への書き込みに加えて、ＶＭＭ１０６へ物理割込み１３４を通知する。
【００９２】
ブロック制御マイクロプログラム１０８は、ストレージデバイス１２０にアクセスした結果を応答するため、通信データパス制御テーブル１３３でフィールド３１７のアドレス変換テーブル１２９のアドレス変換情報と、フィールド３１５のＭＭＩＯレジスタ１３１ａのアドレスを参照し、応答リングバッファ１２６の応答ＰＩレジスタ３１１ａのアドレスを取得する。そして、ブロック制御マイクロプログラム１０８は、応答ＰＩレジスタ３１１ａのゲスト物理アドレス空間２０２をアドレス変換情報に基づいてホスト物理アドレス空間２０３に変換する。そして、ブロック制御マイクロプログラム１０８は、要求されたコマンドに対する応答を応答ＰＩレジスタ３１１ａに書き込む。
【００９３】
次に、ブロック制御マイクロプログラム１０８は、ＶＭＭ１０６に対して物理割込み１３４を通知し、ファイルサーバＯＳ１０５へ割込み通知を行うよう要求する。ＶＭＭ１０６は物理割込み１３４を受けると、ファイルサーバＯＳ１０５の仮想ＨＢＡ１２７へ仮想割り込み１２８を通知する。ファイルサーバＯＳ１０５は、仮想ＨＢＡ１２７からＩ／Ｏ割り込みを受けて、応答リングバッファ１２６の応答ＣＩレジスタ３１１ｂから応答を読み込む。ファイルサーバＯＳ１０５は、読み込んだ応答をクライアントへ返信する。ファイルサーバＯＳ１０５は、読み込みが完了したので、応答ＣＩレジスタ３１１ｂを更新する。
【００９４】
以上の処理によって、ブロック制御マイクロプログラム１０８からファイルサーバＯＳ１０５への通信が実現できる。
【００９５】
＜リソース管理テーブル＞
次に、ブロック制御マイクロプログラム１０８が管理するリソース管理テーブル１４２について説明する。リソース管理テーブル１４２は、ＣＰＵリソース１１２を管理するＣＰＵ割り当て管理テーブル４０１と、メモリリソース１１３を管理するメモリ割り当て管理テーブル４０２と、Ｉ／Ｏリソース１１４を管理するＩ／Ｏ割り当て管理テーブル４０３と、を含む。
【００９６】
図４Ａは、ブロック制御マイクロプログラム１０８が管理するＣＰＵ割り当て管理テーブル４０１の一例を示す図である。
【００９７】
ＣＰＵ割り当て管理テーブル４０１は、ＣＰＵリソース１１２の物理ＣＰＵコア番号を格納するエントリ４０１１と、物理ＣＰＵコア番号毎に、仮想化支援機能（ＶＭＸ）の設定状態を格納するエントリ４０１２と、物理ＣＰＵコア番号毎に、ホストとなるソフトウェアの割当先を格納するエントリ４０１３と、物理ＣＰＵコア番号毎に、割り当て先のゲストソフトウェアの情報を格納するエントリ４０１４と、を含む。
【００９８】
ＣＰＵ割り当て管理テーブル４０１の各エントリ４０１１〜４０１４は、物理ＣＰＵコアの数に応じたフィールドを有する。エントリ４０１２は、“０”が仮想化支援機能をＯＦＦに設定したことを示し、“１”が仮想化支援機能をＯＮに設定したことを示す。図示の例では、物理ＣＰＵコア番号＝０〜３が仮想化支援機能をＯＦＦにし、物理ＣＰＵコア番号＝４〜７が仮想化支援機能をＯＮにした例を示す。
【００９９】
エントリ４０１３は、物理ＣＰＵコア番号＝０〜３がブロック制御マイクロプログラム１０８に割り当てられ、物理ＣＰＵコア番号＝４〜７がＶＭＭ１０６に割り当てられたことを示す。
【０１００】
エントリ４０１４は、物理ＣＰＵコア番号＝０〜３がゲストのないホストであることを示し、物理ＣＰＵコア番号＝４〜７はファイルサーバＯＳ１０５がゲストであることを示す。
【０１０１】
図４Ｂは、ブロック制御マイクロプログラム１０８が管理するメモリ割り当て管理テーブル４０２の一例を示す図である。
【０１０２】
メモリ割り当て管理テーブル４０２は、メモリリソース１１３の物理アドレス空間に割り当てたソフトウェアを管理する。図示の例では、メモリリソース１１３の３つの領域に、それぞれソフトウェアを割り当てた例を示し、物理アドレス（物理メモリ範囲）が０〜１６ＧＢの領域４０２１にはブロック制御マイクロプログラム１０８が割り当てられ、１６〜１８ＧＢの領域４０２２にはＶＭＭ１０６が割り当てられ、１８〜３２ＧＢの領域４０２３にはファイルサーバＯＳ１０５が割り当てられた例を示す。
【０１０３】
図４Ｃは、ブロック制御マイクロプログラム１０８が管理するＩ／Ｏ割り当て管理テーブル４０３の一例を示す図である。
【０１０４】
Ｉ／Ｏ割り当て管理テーブルＩ／Ｏ割り当て管理は、Ｉ／Ｏリソース１１４を構成するＩ／Ｏデバイス毎のフィールド４０３１〜４０３３と、Ｉ／Ｏデバイスを割り当てたホストとなるソフトウェアのエントリと、Ｉ／Ｏデバイスを割り当てたゲストとなるソフトウェアのエントリと、を含む。
【０１０５】
フィールド４０３１は、ＮＩＣ１１８がホストとしてＶＭＭ１０６に割り当てられ、ゲストとしてファイルサーバＯＳ１０５が割り当てられる例を示す。フィールド４０３２は、ＴＡ１１９がホストとしてブロック制御マイクロプログラム１０８に割り当てられ、ゲストが存在しない例を示す。フィールド４０３３は、ＨＢＡ１２０ｂがホストとしてブロック制御マイクロプログラム１０８に割り当てられ、ゲストが存在しない例を示す。
【０１０６】
本実施例では、リソース管理テーブル１４２のテーブルについて、ブロック制御マイクロプログラム１０８が保持した例を示したが、ＶＭＭ１０６に分散して保持するデータ構造としても良い。例えば、ＣＰＵ割り当て管理テーブル４０１や、Ｉ／Ｏ割り当て管理テーブル４０３のゲストのエントリをＶＭＭ１０６が保持するようにしても良い。
【０１０７】
＜通信データパス制御テーブル１３３＞
図４Ｄは、ＶＭＭ１０６が管理する通信データパス制御テーブル１３３の一例を示す図の前半部である。図４Ｅは、ＶＭＭ１０６が管理する通信データパス制御テーブル１３３の一例を示す図の後半部である。
【０１０８】
通信データパス制御テーブル１３３は、テーブル先頭から現在のフィールドまでのバイト数を格納するバイトオフセット１３３１と、当該フィールドの長さをバイト数で示すサイズ１３３２と、フィールドの名称を格納するフィールドネーム１３３３と、当該フィールドの内容を記述する意味１３３４と、当該エントリを設定するソフトウェアを格納する設定者１３３５から一つのテーブルが形成される。
【０１０９】
通信データパス制御テーブル１３３は、０〜７バイト目まではヘッダ情報５１１が格納され、図４Ｅの５６バイト目以降はマルチキューに対応するときに使用されるエントリである。
【０１１０】
図４Ｄのバイトオフセット１３３１＝８バイト〜４７バイトが、図３に示したフィールド３１２〜３１７に対応する。
【０１１１】
フィールド３１２の“ｖＨＢＡ  ｄｅｖｉｃｅ  ＰＯＳＴ”は、ＶＭＭ１０６によって設定され、仮想ＨＢＡ１２７の初期化状態を示す。未初期化の場合は“０”に設定され、サービス開始の場合は“１”に設定される。
【０１１２】
フィールド３１３の“ｂｌｏｃｋ  ｍｉｃｒｏ  Ａｃｋｎｏｗｌｅｄｇｅ”は、仮想ＨＢＡ１２７のＰＯＳＴコードの進行に追従して、ブロック制御マイクロプログラム１０８側で認識した値を示す。
【０１１３】
フィールド３１４の“（ｉ）ＰＣＩ  ｃｏｎｆｉｇｕｒａｔｉｏｎ  ｒｅｇｉｓｔｅｒ  ｌｏｃａｔｉｏｎ”は、０番目の仮想ＨＢＡ１２７のＰＣＩ  ｃｏｎｆｉｇｕｒａｔｉｏｎレジスタ１３０のアドレスを指定する。本アドレスは、ＶＭＭ１０６がホスト物理アドレス空間２０３で設定する。
【０１１４】
フィールド３１５の“（ｉｉ）ＢＡＲ０  ＭＭＩＯ  ｒｅｇｉｓｔｅｒ  −  ｏｐｅｒａｔｉｏｎａｌ”は、０番目の仮想ＨＢＡ１２７のＢＡＲ０  ＭＭＩＯレジスタ１３１ａのアドレスを指定する。本アドレスは、ＶＭＭ１０６がホスト物理アドレス空間２０３で設定する。
【０１１５】
フィールド３１６の“（ｉｉｉ）ＢＡＲ１  ＭＭＩＯ  ｒｅｇｉｓｔｅｒ  −  ＭＳＩ−Ｘ”は、０番目の仮想ＨＢＡ１２７のＢＡＲ１  ＭＭＩＯレジスタ１３１ｂのＭＳＩ−Ｘテーブルのアドレスを指定する。本アドレスは、ＶＭＭ１０６がホスト物理アドレス空間２０３で設定する。
【０１１６】
フィールド３１７の“（ｉｖ）Ａｄｄｒｅｓｓ  Ｔｒａｎｓｌａｔｉｏｎ  Ｉｎｆｏｒｍａｔｉｏｎ”は、０番目の仮想ＨＢＡ１２７を使用しているＶＭＭ１０６のメモリアドレスの変換情報（ゲスト物理アドレス→ホスト物理アドレス）を保持する構造体のアドレスを指定する。本アドレスは、ＶＭＭ１０６がホスト物理アドレス空間２０３で設定する。
【０１１７】
＜アドレス変換テーブル１２９＞
図４Ｆは、ＶＭＭ１０６が管理するアドレス変換テーブル１２９の一例を示す図である。アドレス変換テーブル１２９は、テーブル先頭から現在のフィールドまでのバイト数を格納するバイトオフセット１２９１と、当該フィールドの長さをバイト数で示すサイズ１２９２と、フィールドの名称を格納するフィールドネーム１２９３と、当該フィールドの内容を記述する意味１２９４と、当該エントリを設定するソフトウェアを格納する設定者１２９５から一つのテーブルが形成される。
【０１１８】
アドレス変換テーブル１２９は、０〜７バイト目まではヘッダ情報６１１が格納され、４０バイト目以降は複数のアドレス変換情報を有する場合のエントリに使用される。
【０１１９】
図４Ｆにおいて、フィールド６０１の“ＬｏｇｉｃａｌＳｔａｒｔＡｄｄｒｅｓｓ＃０”は、ＶＭＭ１０６（ファイルサーバＯＳ１０５）からみたゲスト物理アドレス空間２０２の先頭を示す。
【０１２０】
フィールド６０２の“Ｓｉｚｅ＃０”は、ＶＭＭ１０６（ファイルサーバＯＳ１０５）が認識するユーザ領域２０４のサイズを示す。
【０１２１】
フィールド６０３の“ＰｈｙｓｉｃａｌＢａｓｅ＃０”は、本ユーザ領域２０４の先頭ゲスト物理アドレス（ＬｏｇｉｃａｌＳｔａｒｔＡｄｄｒｅｓｓ＃０）に対応するホスト物理アドレスを示す。
【０１２２】
ブロック制御マイクロプログラム１０８は、アドレス変換テーブル１２９の変換情報を用いてゲスト物理アドレスをホスト物理アドレスへ変換することができる。
【０１２３】
＜ＰＣＩコンフィグレジスタ１３０＞
図８Ａは、ＰＣＩコンフィグレジスタ１３０の一例を示す図である。ＰＣＩコンフィグレジスタ１３０は、レジスタ先頭から現在のフィールドまでのバイト数を格納するバイトオフセット１３０１と、当該フィールドの長さをバイト数で示すサイズ１３０２と、フィールドの名称を格納するフィールドネーム１３０３と、初期化後の値を格納する初期値１３０４と、当該フィールドの内容を記述する意味、注釈１３０５からレジスタが形成される。
【０１２４】
ＰＣＩコンフィグレジスタ１３０は、１０バイト目のＢＡＲ０にＭＭＩＯレジスタ１３１ａのアドレスが格納され、図３のフィールド３０１に相当する。また、ＰＣＩコンフィグレジスタ１３０の１８バイト目のＢＡＲ１にＭＭＩＯレジスタ１３１ｂのアドレスが格納され、図３のフィールド３０２に相当する。
【０１２５】
＜ＭＭＩＯレジスタ１３１ａ（ＢＡＲ０）＞
図８Ｂは、ＭＭＩＯレジスタ１３１ａ（ＢＡＲ０）の一例を示す図である。
【０１２６】
ＭＭＩＯレジスタ１３１ａは、レジスタ先頭から現在のフィールドまでのバイト数を格納するオフセット１３１１と、当該フィールドの長さをバイト数で示すサイズ１３１２と、フィールドの名称を格納するネーム１３１３と、ＲＯ＝リードオンリー、ＲＷ＝リードアンドライト等を格納する属性１３１４と、当該フィールドの内容を記述する注釈１３１５からレジスタが形成される。
【０１２７】
ＭＭＩＯレジスタ１３１ａは、０１２８ｈバイト目の“Queue enable request”が、図３に示した仮想ＨＢＡｅｎａｂｌｅフィールド３０８に対応する。０１２Ｃｈバイト目の“Queue status”が、図３に示した仮想ＨＢＡｓｔａｔｕｓフィールド３０９に対応する。
【０１２８】
また、０１４０ｈバイト目の“ITQ#0 base addr”が、図３に示した要求ベースフィールド３２１ａに対応し、要求リングバッファ１２５のベースアドレスが格納される。
【０１２９】
また、０１４８ｈバイト目の“ITQ#0 length”は、要求リングバッファ１２５の長さ１６０１に対応する。
【０１３０】
また、０１５０ｈバイト目の“ITQ#0 PI／CI Value”が、図３に示した要求ＰＩレジスタ３１０ａと、要求ＣＩレジスタ３１０ｂに対応する。
【０１３１】
また、０１６０ｈバイト目の“TIQ#0 base addr”が、図３に示した応答ベースフィールド３２１ｂに対応し、応答リングバッファ１２６のベースアドレスが格納される。０１６８ｈバイト目の“TIQ#0 length”は、応答リングバッファ１２６の長さ１６０２に対応する。０１７０ｈバイト目の“TIQ#0 PI／CI Value”が、図３に示した応答ＰＩレジスタ３１１ａと、応答ＣＩレジスタ３１１ｂに対応する。
【０１３２】
＜要求リングバッファ１２５＞
図９Ａは、要求リングバッファ１２５のエントリデータフォーマットの一例を示す図である。本仕様は、Information technology - SCSI over PCIe(R) Architecture(SOP)（T10/2239-D Revision 4, ）のフォーマットに準拠している。
【０１３３】
１コマンドは概ね６４〜１２８バイトに収まるため、本実施例では、一例として、リングエントリのサイズを１２８バイトで制御する。１２８バイトを超える要求をエンキューする場合は、次のエントリにまたがって格納される。
【０１３４】
要求リングバッファ１２５の３２バイト目の“ＣＤＢ”は、図３に示した、SCSIコマンドを格納するＳＣＳＩ  ＣＤＢ３０４である。そして、要求リングバッファ１２５の３２バイト目の“ＣＤＢ”は、図３に示した、ＳＣＳＩコマンドを格納するＳＣＳＩ  ＣＤＢ３０４である。そして、６５バイト目以降が、バッファアドレスリストを格納するＳＧＬ（Scatter Gather List）３０３である。
【０１３５】
＜応答リングバッファ１２６＞
図９Ｂは、応答リングバッファ１２６のエントリデータフォーマットの一例を示す図である。本仕様は、要求リングバッファ１２５と同様、Information technology - SCSI over PCIe(R) Architecture(SOP)のフォーマットに準拠している。要求リングバッファ１２５と同じく、本実施例では、一例として、リングエントリのサイズを１２８バイトで制御する。１２８バイトを超える要求をエンキューする場合は、次のエントリにまたがって格納される。
【０１３６】
応答リングバッファ１２６の１２バイト〜１９バイトは、図３に示した、status３０５である。
【０１３７】
＜ＳＧＬ３０３＞
図９Ｃは、ＳＧＬ（Scatter Gather List）３０３のデスクリプタデータフォーマットの一例を示す図である。本仕様は、Information technology - PCIe(R) architecture Queuing Interface (PQI)（T10/2240-D Revision 6a ）に準拠している。
【０１３８】
ＳＧＬ３０３のデータは、０〜７バイトがアドレス部１８０２で、８〜１１バイトまでがバッファ長１８０３を構成する。
【０１３９】
アドレス部１８０２に、データバッファへのポインタを格納する。本ポインタは、ファイルサーバＯＳ１０５が認識するゲスト物理アドレス空間２０２で指定される。
【０１４０】
図９Ａにおいて、ＳＧＬ３０３のフィールド中に、本データ構造が複数個格納できる。本データは１６バイトエントリであるため、ｔｙｐｉｃａｌにはｂｙｔｅ  ｏｆｆｓｅｔ＝６４〜１２７までで４つのＳＧＬ３０３が指定できる。なおＳＧＬ数が４を超えた場合、要求リングバッファ１２５の次のエントリにまたがってＳＧＬ３０３が格納される。
【０１４１】
＜通信データパスの初期化処理＞
次に、ブロック制御マイクロプログラム１０８とＶＭＭ１０６及びファイルサーバＯＳ１０５で行われる通信データパスの初期化処理について図５Ａ、図５Ｂを参照しながら説明する。図５Ａは、通信データパスの初期化処理の一例を示すタイムチャートである。この処理は、ブロック制御マイクロプログラム１０８の起動が完了した後に実行される。
【０１４２】
ステップＳ７０１では、ブロック制御マイクロプログラム１０８がスーパーバイザ領域２０５の通信データパス制御テーブル１３３をクリアする。この時点では、まだＶＭＭ１０６が起動していないので、ブロック制御マイクロプログラム１０８は、通信データパス制御テーブル１３３が配置される既知のアドレスをクリアしておく。
【０１４３】
次に、ブロック制御マイクロプログラム１０８は、ＶＭＭ１０６を起動させてからゲストＯＳとしてファイルサーバＯＳ１０５を起動させる（Ｓ７０２）この処理は、例えば、ブロック制御マイクロプログラム１０８が、図２Ａに示したホスト物理アドレス空間２０３のアドレスＡＤ＃１〜ＡＤ＃３にＶＭＭ１０６及びファイルサーバＯＳ１０５のブートイメージを読み込んで、図１に示したグループＡ１１５のＣＰＵリソース１１２を割り当てれば良い。
【０１４４】
ＶＭＭ１０６は起動を開始すると、ファイルサーバＯＳ１０５のメモリ領域（図２ＡのＡＤ＃２〜ＡＤ＃３）を確保し、アドレス変換テーブル１２９の内容を確定する。また、ＶＭＭ１０６はＰＣＩコンフィグレジスタ１３０及びＭＭＩＯレジスタ１３１を初期化する（Ｓ７０３）。
【０１４５】
ＶＭＭ１０６は、仮想ＨＢＡ１２７の提供を開始し、ゲストＯＳとしてのファイルサーバＯＳ１０５を起動する（Ｓ７０４）。ファイルサーバＯＳ１０５は、起動すると仮想ＨＢＡドライバ１２３をロードして仮想ＨＢＡ１２７が利用可能となる（Ｓ７０５）。
【０１４６】
そして、ＶＭＭ１０６は、要求リングバッファ１２５と応答リングバッファ１２６の領域をユーザ領域２０４に確保する。ＶＭＭ１０６は、要求リングバッファ１２５と応答リングバッファ１２６の設定が完了すると、要求ベースフィールド３２１ａと応答ベースフィールド３２１ｂにベースアドレスをゲスト物理アドレスで設定する。また、ＶＭＭ１０６は、要求リングバッファ１２５の要求ＰＩレジスタ３１０ａ及び要求ＣＩレジスタ３１０ｂを設定し、応答リングバッファ１２６の応答ＰＩレジスタ３１１ａ及び応答ＣＩレジスタ３１１ｂを設定する。
【０１４７】
要求リングバッファ１２５及び応答リングバッファ１２６の設定が完了すると、仮想ＨＢＡｅｎａｂｌｅフィールド３０８に“１”を設定して利用開始を示し、仮想ＨＢＡ１２７を有効化する（Ｓ７０６）。この後、ＶＭＭ１０６は、仮想ＨＢＡｓｔａｔｕｓフィールド３０９に“１”を設定し、仮想ＨＢＡ１２７の状態をｅｎａｂｌｅに設定する。
【０１４８】
以上の設定が完了すると、ファイルサーバＯＳ１０５がブロック制御マイクロプログラム１０８を介してストレージデバイス１２０へのアクセス（ＳＣＳＩ  ｂｌｏｃｋ  ａｃｃｅｓｓ）を開始する（Ｓ７０７）。
【０１４９】
上記の初期化処理において、通信データパス制御テーブル１３３の初期化は、次のように行われる。
【０１５０】
ステップＳ７０１で、ブロック制御マイクロプログラム１０８が通信データパス制御テーブル１３３をクリアする。その後、仮想ＨＢＡ１２７のステータスの変化や、初期化の完了により、ブロック制御マイクロプログラム１０８やＶＭＭ１０６が順次通信データパス制御テーブル１３３を設定する。
【０１５１】
まず、ステップＳ７０３で、ＶＭＭ１０６が、ファイルサーバＯＳ１０５のメモリ領域（図２ＡのＡＤ＃２〜ＡＤ＃３）を確保した後、アドレス変換テーブル１２９の内容が設定されるので、通信データパス制御テーブル１３３のフィールド３１７のアドレス変換テーブル１２９のアドレスを設定する。
【０１５２】
ＶＭＭ１０６がＰＣＩコンフィグレジスタ１３０及びＭＭＩＯレジスタ１３１を初期化すると、通信データパス制御テーブル１３３のフィールド３１４のＰＣＩコンフィグレジスタ１３０のアドレスと、フィールド３１５のＭＭＩＯレジスタ１３１ａのアドレス及びフィールド３１６のＭＭＩＯレジスタ１３１ｂのアドレスを設定する。
【０１５３】
通信データパス制御テーブル１３３のフィールド３１２の“ｖＨＢＡ  ｄｅｖｉｃｅ  ＰＯＳＴ”は、ステップＳ７０３で仮想ＨＢＡ１２７の初期化が完了するので、ＶＭＭ１０６によって“１”に設定される。
【０１５４】
仮想ＨＢＡ１２７の初期化が完了したステップＳ７０３の後には、ブロック制御マイクロプログラム１０８が仮想ＨＢＡ１２７を認識するので、ブロック制御マイクロプログラム１０８が通信データパス制御テーブル１３３のフィールド３１２を“１”に設定する。以上のように、初期化の進行に応じてＶＭＭ１０６とブロック制御マイクロプログラム１０８によって通信データパス制御テーブル１３３が設定される。
【０１５５】
図５Ｂは、ストレージ装置の起動からファイルサーバＯＳ１０５の実行までの処理の概要を示すシーケンス図である。
【０１５６】
ストレージ装置の停止状態（Ｓ８０１）から電源を投入すると、ブロック制御マイクロプログラム１０８が通信データパス制御テーブル１３３をクリアし、初期化する（Ｓ８０２＝図７のステップＳ７０１）。
【０１５７】
次に、ブロック制御マイクロプログラム１０８は、ＶＭＭ１０６を起動させて（図７のＳ７０２）、仮想ＨＢＡ１２７の初期化を実施させる（Ｓ８０３）。ＶＭＭ１０６が仮想ＨＢＡ１２７を完了した段階では、ゲストＯＳに割り当てられていないため、通信データパス制御テーブル１３３のフィールド３１２の仮想ＨＢＡ１２７のＰＯＳＴの値は０となる。
【０１５８】
ＶＭＭ１０６がゲストＯＳとしてファイルサーバＯＳ１０５を稼働させると、ＶＭＭ１０６が仮想ＨＢＡ１２７をファイルサーバＯＳ１０５に割り当てる（Ｓ８０４）。この状態では、まだファイルサーバＯＳ１０５が仮想ＨＢＡドライバ１２３をロードしていないので、仮想ＨＢＡｓｔａｔｕｓフィールド３０９の値は“０”である。
【０１５９】
ファイルサーバＯＳ１０５が仮想ＨＢＡドライバ１２３をロードして、要求リングバッファ１２５及び応答リングバッファ１２６の設定が完了すると、仮想ＨＢＡ１２７が利用可能となる（Ｓ８０５）。この段階で、仮想ＨＢＡｓｔａｔｕｓフィールド３０９の値は“１”となる。
【０１６０】
ファイルサーバＯＳ１０５がクライアントから要求を受け付けて、要求リングバッファ１２５にコマンド及びデータを書き込むと、要求ＰＩレジスタ３１０ａが更新されてブロック制御マイクロプログラム１０８が当該要求を処理する（Ｓ８０６）。処理が完了するとブロック制御マイクロプログラム１０８は応答リングバッファ１２６の応答ＰＩレジスタ３１１ａにストレージデバイス１２０のアクセス結果を書き込んで処理を完了する（Ｓ８０５）。
【０１６１】
＜ファイルサーバＯＳからブロック制御マイクロプログラムへの通信＞
図６Ａは、ファイルサーバＯＳ１０５からブロック制御マイクロプログラム１０８への通信処理の一例を示すタイムチャートである。
【０１６２】
ステップＳ９０１では、ファイルサーバＯＳ１０５がクライアントからストレージデバイス１２０へのアクセス要求として、例えば、ＮＦＳ（Network File System）要求を受信する。ファイルサーバＯＳ１０５は、受信した要求のコマンドに対応するデータを格納するためのデータバッファ１２４を確保する。
【０１６３】
ファイルサーバＯＳ１０５は、受信したデータを格納したデータバッファ１２４を指し示すバッファアドレスリストを生成する。ファイルサーバＯＳ１０５は、受信したコマンドとデータのバッファアドレスリストを要求リングバッファ１２５に格納する（Ｓ９０２）。
【０１６４】
ファイルサーバＯＳ１０５は、次の要求を受け付ける要求リングバッファ１２５の位置を更新するため、要求ＰＩレジスタ３１０ａをインクリメントする（Ｓ９０３Ａ）。
【０１６５】
一方、ブロック制御マイクロプログラム１０８は、ポーリングなどによって要求リングバッファ１２５のポインタである要求ＰＩレジスタ３１０ａを監視する（Ｓ９００）。ステップＳ９０３Ｂでは、ブロック制御マイクロプログラム１０８が、要求ＰＩレジスタ３１０ａの更新を検出し、要求ＰＩレジスタ３１０ａで指定される要求リングバッファ１２５からコマンドを読み込む。
【０１６６】
次に、ブロック制御マイクロプログラム１０８は、読み込んだコマンドをデコードして、ストレージデバイス１２０へのアクセスがリードとライトの何れであるかを判定する（Ｓ９０４）。
【０１６７】
読み込んだコマンドがライトであれば、ブロック制御マイクロプログラム１０８は、要求ＰＩレジスタ３１０ａが示す要求リングバッファ１２５のＳＧＬ３０３からバッファアドレスリストを取得する。次に、ブロック制御マイクロプログラム１０８は、アドレス変換テーブル１２９を読み込んで、バッファアドレスリストのゲスト物理アドレス空間２０２を、ホスト物理アドレス空間２０３へ変換し、データバッファ１２４の位置を特定する（Ｓ９０５）。
【０１６８】
ブロック制御マイクロプログラム１０８は、要求ＣＩレジスタ３１０ｂの値をインクリメントして、次に読み込むべき要求リングバッファ１２５の位置を更新する（Ｓ９０６）。その後、ブロック制御マイクロプログラム１０８は、取得したコマンド及びバッファアドレスリストのデータでストレージデバイス１２０へのアクセスを実行する（Ｓ９０７）。
【０１６９】
以上の処理により、ファイルサーバＯＳ１０５とブロック制御マイクロプログラム１０８は、ＶＭＭ１０６を介在することなく直接通信を行うことが可能となって、ＶＭＭ１０６への切り替えに要するオーバーヘッドを削減し、処理の高速化を推進できるのである。
【０１７０】
図６Ｂは、上記図６Ａの処理のうちファイルサーバＯＳ１０５からブロック制御マイクロプログラム１０８への処理の一例を示すフローチャートである。
【０１７１】
ファイルサーバＯＳ１０５がクライアントからストレージデバイス１２０へのアクセス要求を受け付けると、処理が開始される（Ｓ１００２）。アクセス要求としては、例えば、ＮＦＳ要求を受信する。ファイルサーバＯＳ１０５は、受信した要求のコマンドに対応するデータを格納するためのデータバッファ１２４を確保する（Ｓ１００３）。
【０１７２】
ファイルサーバＯＳ１０５は、受信したデータを格納したデータバッファ１２４を指し示すバッファアドレスリストを生成する。ファイルサーバＯＳ１０５は、受信したコマンドとデータのバッファアドレスリストを要求リングバッファ１２５に格納する（Ｓ１００４）。
【０１７３】
ファイルサーバＯＳ１０５は、仮想ＨＢＡドライバ１２３を呼び出して（Ｓ１０１１）、データバッファ１２４の位置をＭＭＩＯレジスタ１３１ａから取得する（Ｓ１０１２）。
【０１７４】
ファイルサーバＯＳ１０５は、受信したデータを格納したデータバッファ１２４の位置からバッファアドレスリストを生成し、要求リングバッファのＳＧＬ３０３に格納する（Ｓ１０１４）。また、ファイルサーバＯＳ１０５は、ストレージデバイス１２０に対するコマンドをＳＣＳＩ  ＣＤＢ（Command Descriptor Block）３０４に格納する。
【０１７５】
そして、ファイルサーバＯＳ１０５は、次の要求を受け付ける要求リングバッファ１２５の位置を更新するため、要求ＰＩレジスタ３１０ａをインクリメントする（Ｓ１０１５）。
【０１７６】
ファイルサーバＯＳ１０５は、上記処理を繰り返して要求リングバッファ１２５へ受け付けたコマンドとデータを格納する。
【０１７７】
図６Ｃは、上記図６Ａの処理のうちブロック制御マイクロプログラムで行われる処理の一例を示すフローチャートである。
【０１７８】
この処理は、ブロック制御マイクロプログラム１０８が起動されると実行される（Ｓ１１０１）。ブロック制御マイクロプログラム１０８は、ポーリングによって要求リングバッファ１２５のポインタである要求ＰＩレジスタ３１０ａが更新されるまで待機する（Ｓ１１０２）。
【０１７９】
要求ＰＩレジスタ３１０ａが更新されると、ブロック制御マイクロプログラム１０８は、要求ＰＩレジスタ３１０ａで指定される要求リングバッファ１２５からコマンドを読み込む。ブロック制御マイクロプログラム１０８は、読み込んだコマンドをデコードして、ストレージデバイス１２０へのアクセスがリードとライトの何れであるかを判定する（Ｓ１１０３）。
【０１８０】
読み込んだコマンドがライトであれば、ブロック制御マイクロプログラム１０８は、要求ＰＩレジスタ３１０ａが示す要求リングバッファ１２５のＳＧＬ３０３からバッファアドレスリストを取得する（Ｓ１１０４）。
【０１８１】
次に、ブロック制御マイクロプログラム１０８は、アドレス変換テーブル１２９を読み込んで、バッファアドレスリストのゲスト物理アドレス空間２０２を、ホスト物理アドレス空間２０３へ変換し、データバッファ１２４の位置を特定する（Ｓ１１０５）。
【０１８２】
ブロック制御マイクロプログラム１０８は、要求ＣＩレジスタ３１０ｂの値をインクリメントして、次に読み込むべき要求リングバッファ１２５の位置を更新する（Ｓ１１０６）。その後、ブロック制御マイクロプログラム１０８は、取得したコマンド及びバッファアドレスリストのデータでストレージデバイス１２０へのアクセスを実行する（Ｓ１１０７）。アクセスが完了した後は、後述する応答処理へ移行する。
【０１８３】
図７Ａは、ブロック制御マイクロプログラム１０８からファイルサーバＯＳへの通信処理の一例を示すタイムチャートである。
【０１８４】
ブロック制御マイクロプログラム１０８は、図６ＡのステップＳ９０７に続いて、ストレージデバイス１２０のアクセスが完了するまで待機する（Ｓ１２００）。ストレージデバイス１２０のアクセスが完了すると、ブロック制御マイクロプログラム１０８は要求に対する応答（データ）をストレージデバイス１２０から受信する。以下、ストレージデバイス１２０に対する要求がリードであった例を示す。
【０１８５】
ブロック制御マイクロプログラム１０８は、ストレージデバイス１２０から読み出したデータを、データバッファ１２４へ転送する（Ｓ１２０１）。この処理は、ブロック制御マイクロプログラム１０８がコピー処理またはＤＭＡによって実行する。
【０１８６】
ブロック制御マイクロプログラム１０８は、データバッファ１２４にコピーした位置を応答リングバッファ１２６のｓｔａｔｕｓ３０５に書き込んで更新する（Ｓ１２０２）。
【０１８７】
次に、ステップＳ１２０３では、ブロック制御マイクロプログラム１０８が、応答ＰＩレジスタ３１１ａの値をインクリメントして、次の応答を格納する応答リングバッファ１２６の位置を更新する。
【０１８８】
次に、ブロック制御マイクロプログラム１０８は、物理割込み１３４を生成し、物理割込み１３４をＶＭＭ１０６に送信する（Ｓ１２０４）。ここで、物理割込み１３４はブロック制御マイクロプログラム１０８を実行するグループＢ１１６のＣＰＵリソース１１２から、グループＡ１１５に対するプロセッサ間割り込みＩＰＩ（Ｉｎｔｅｒ  Ｐｒｏｃｅｓｓｏｒ  Ｉｎｔｅｒｒｕｐｔ）とする。
【０１８９】
ＶＭＭ１０６は、物理割込み１３４を受信すると、仮想割り込み１２８を生成してファイルサーバＯＳ１０５の仮想ＨＢＡドライバ１２３に通知する。
【０１９０】
仮想ＨＢＡドライバ１２３は、ＶＭＭ１０６から仮想割り込み１２８を受けると、所定の割り込みハンドラを起動して、応答リングバッファ１２６のｓｔａｔｕｓ３０５を読み込む。そして、ファイルサーバＯＳ１０５の仮想ＨＢＡドライバ１２３は、ｓｔａｔｕｓ３０５に格納されたデータバッファ１２４の位置からデータを取得する。
【０１９１】
そして、ファイルサーバＯＳ１０５は、応答ＣＩレジスタ３１１ｂの値をインクリメントして、次の応答を格納する応答リングバッファ１２６の位置を更新する（Ｓ１２０７）次に、ファイルサーバＯＳ１０５のファイルシステムレイヤ１２１は、クライアントに対してストレージデバイス１２０からの応答を返信する。
【０１９２】
ブロック制御マイクロプログラム１０８は、物理割込み１３４を送信した後は、ポーリングにより応答リングバッファ１２６の応答ＣＩレジスタ３１１ｂが更新されるのを監視する（Ｓ１２０９）。
【０１９３】
ブロック制御マイクロプログラム１０８は、応答ＣＩレジスタ３１１ｂの更新を検出すると（Ｓ１２０７Ｂ）、応答リングバッファ１２６のｓｔａｔｕｓ３０５を解放する。
【０１９４】
上記処理により、ブロック制御マイクロプログラム１０８からの応答は、応答リングバッファ１２６と物理割込み１３４を介してファイルサーバＯＳ１０５に送信される。
【０１９５】
図７Ｂは、上記図７Ａの処理のうちブロック制御マイクロプログラム１０８で行われる処理の一例を示すフローチャートである。
【０１９６】
ブロック制御マイクロプログラム１０８は、図６ＣのステップＳ１１０８に続いて、ストレージデバイス１２０のアクセスが完了するまで待機する（Ｓ１３０２）。ストレージデバイス１２０のアクセスが完了すると、ブロック制御マイクロプログラム１０８は要求に対する応答（データ）をストレージデバイス１２０から受信する。上述のように、以下では、ストレージデバイス１２０に対する要求がリードであった例を示す。
【０１９７】
ブロック制御マイクロプログラム１０８は、ストレージデバイス１２０から読み出したデータを、データバッファ１２４へ転送する（Ｓ１３０３）。この処理は、ブロック制御マイクロプログラム１０８がコピー処理またはＤＭＡによって実行する。
【０１９８】
ブロック制御マイクロプログラム１０８は、データバッファ１２４にコピーした位置を応答リングバッファ１２６のｓｔａｔｕｓ３０５に書き込んで更新する（Ｓ１３０４）。
【０１９９】
次に、ステップＳ１３０５では、ブロック制御マイクロプログラム１０８が、応答ＰＩレジスタ３１１ａの値をインクリメントして、次の応答を格納する応答リングバッファ１２６の位置を更新する（Ｓ１３０５）。
【０２００】
次に、ブロック制御マイクロプログラム１０８は、物理割込み１３４を生成し、物理割込み１３４をＶＭＭ１０６に送信する（Ｓ１３０６）。ここで、物理割込み１３４はブロック制御マイクロプログラム１０８を実行するグループＢ１１６のＣＰＵリソース１１２から、グループＡ１１５に対するプロセッサ間割り込みＩＰＩ（Ｉｎｔｅｒ  Ｐｒｏｃｅｓｓｏｒ  Ｉｎｔｅｒｒｕｐｔ）とする。
【０２０１】
ブロック制御マイクロプログラム１０８は、物理割込み１３４を送信した後は、ポーリングにより応答リングバッファ１２６の応答ＣＩレジスタ３１１ｂが更新されるのを監視する（Ｓ１３０７）。
【０２０２】
ブロック制御マイクロプログラム１０８は、応答ＣＩレジスタ３１１ｂの更新を検出すると（Ｓ１２０７Ｂ）、応答リングバッファ１２６のｓｔａｔｕｓ３０５を解放して処理を終了し、再び図６ＣのステップＳ１１０１に復帰する。
【０２０３】
図７Ｃは、本発明の実施例を示し、上記図７Ａの処理のうちファイルサーバＯＳ１０５で行われる処理の一例を示すフローチャートである。
【０２０４】
ＶＭＭ１０６は、ブロック制御マイクロプログラム１０８から物理割込み１３４を受信すると、仮想割り込み１２８を生成してファイルサーバＯＳ１０５の仮想ＨＢＡドライバ１２３に通知する。
【０２０５】
ファイルサーバＯＳ１０５は、仮想ＨＢＡドライバ１２３がＶＭＭ１０６から仮想割り込み１２８を受けると、図７Ｃの処理を開始する。
【０２０６】
仮想割り込み１２８を受けて、仮想ＨＢＡドライバ１２３は所定の割り込みハンドラを起動し（Ｓ１４０２）、応答リングバッファ１２６からｓｔａｔｕｓ３０５を読み込む（Ｓ１４０３）。
【０２０７】
ファイルサーバＯＳ１０５は、ｓｔａｔｕｓ３０５に格納されたデータバッファ１２４の位置からデータを取得する（Ｓ１４０４）。この処理は、ストレージデバイス１２０にリードのときの処理で、仮想ＨＢＡドライバ１２３がデータバッファ１２４の内容をファイルシステムレイヤ１２１に通知する。
【０２０８】
ファイルサーバＯＳ１０５は、応答ＣＩレジスタ３１１ｂの値をインクリメントして、次の応答を格納する応答リングバッファ１２６の位置を更新する（Ｓ１４０５）。
【０２０９】
ファイルサーバＯＳ１０５は、ファイルシステムレイヤ１２１の所定の関数を起動し（Ｓ１４０６）、クライアントに対してストレージデバイス１２０からの応答を返信する（Ｓ１４０７）。
【０２１０】
以上の処理により、ファイルサーバＯＳ１０５は、仮想割り込み１２８に基づいて、応答リングバッファ１２６の内容を、クライアントに返信することができる。
【０２１１】
＜補足＞
本実施例では、ＶＭＭ１０６上のファイルサーバＯＳ１０５と、ＶＭＭ１０６と同一のハードウェア１０９上で稼働するブロック制御マイクロプログラム１０８との通信を、メモリリソース１１３上に設定した通信データパスで行う。
【０２１２】
メモリリソース１１３上の通信データパスは、データバッファ１２４、要求リングバッファ１２５、応答リングバッファ１２６、ＭＭＩＯレジスタ１３１、アドレス変換テーブル１２９及び通信データパス制御テーブル１３３からなり、ファイルサーバＯＳ１０５からブロック制御マイクロプログラム１０８への通信ではＶＭＭ１０６を介することなく高速な通信を実現できるのである。
【０２１３】
なお、上記実施例においては、仮想マシンを生成するソフトウェアとしてＶＭＭ１０６を用いる例を示したが、ハイパーバイザを用いてもよい。
【０２１４】
また、上記実施例においては、ＣＰＵリソース１１２の仮想化支援機能としてインテル（登録商標）社のＶＴ−ｚを用いる例を示したが、ＡＭＤ社のＡＭＤ−Ｖ等のように仮想化を支援する機能を利用するものであればよい。
【０２１５】
また、上記実施例においては、ＣＰＵリソース１１２が仮想化支援機能を備えたマルチコアのＣＰＵで構成された例を示したが、複数のＣＰＵコアまたはＣＰＵモジュールを含むヘテロジニアス・マルチコア・プロセッサでプロセッサリソースを構成してもよい。
【０２１６】
また、上記実施例においては、通信データパスとして要求リングバッファ１２５と応答リングバッファ１２６を用いる例を示したが、これに限定されるものではなく、キューなどのバッファで構成してもよい。
【０２１７】
また、本発明において説明した計算機等の構成、処理部及び処理手段等は、それらの一部又は全部を、専用のハードウェアによって実現してもよい。
【０２１８】
また、本実施例で例示した種々のソフトウェアは、電磁的、電子的及び光学式等の種々の記録媒体（例えば、非一時的な記憶媒体）に格納可能であり、インターネット等の通信網を通じて、コンピュータにダウンロード可能である。
【０２１９】
また、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明をわかりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。
【０２２０】
１５．
請求項１４に記載のストレージ装置であって、
前記生成された通信経路は、前記ストレージデバイスに対する前記要求の処理結果を含む応答を格納する応答バッファを含み、
前記第１のＯＳは、
前記取得した要求をストレージデバイスに対して実行し、前記ストレージデバイスからの応答を取得した後に、前記応答を前記応答バッファに格納し、
前記第２のＯＳは、
前記応答バッファから前記応答を取得することを特徴とするストレージ装置。
【０２２１】
１６．
前記１５．に記載のストレージ装置であって、
前記仮想化部は、
前記応答バッファに対して新たな応答を格納する位置を示す応答ＰＩ（Ｐｒｏｄｕｃｅｒ  Ｉｎｄｅｘ）レジスタと、前記応答バッファから次に読み出す応答を指し示す応答ＣＩ（Ｃｏｎｓｕｍｅｒ  Ｉｎｄｅｘ）レジスタと、を前記メモリ上に設定し、前記第１のＯＳおよび前記第２のＯＳに対して前記応答ＰＩレジスタと前記応答ＣＩレジスタとを提供し、
前記第１のＯＳは、
前記応答バッファに前記応答を格納した後に、前記応答ＰＩレジスタを更新し、前記過疎化部に対して割り込みを通知し、
前記仮想化部は、
前記割り込みを受信すると前記第２のＯＳに対して当該割り込みを通知し、前記第２のＯＳは、前記応答ＣＩレジスタを参照して前記応答バッファから前記応答を読み出した後、前記応答ＣＩレジスタを更新することを特徴とするストレージ装置。
【符号の説明】
【０２２２】
１０１  ファイルサーバパーティション
１０２  ブロックサービスパーティション
２０４  ユーザ領域（共有）
２０５  スーパーバイザ領域
１０５  ファイルサーバＯＳ
１０６  ＶＭＭ
１０８  ブロック制御マイクロプログラム
１０９  ハードウェア
１１２  ＣＰＵリソース
１１３  メモリリソース
１１４  Ｉ／Ｏリソース
１１９  ＴＡ
１２０  ストレージデバイス
１２０ｂ  ＨＢＡ
１２１  ファイルシステムレイヤ
１２３  仮想ＨＢＡドライバ
１２４  データバッファ
１２５  要求リンクバッファ
１２６  応答リンクバッファ
１２７  仮想ＨＢＡ
１２９  アドレス変換テーブル
１３０  ＰＣＩコンフィグレジスタ
１３１  ＭＭＩＯレジスタ
１３２  仮想割り込み生成部
１３３  通信データパス制御テーブル
１３４  物理割り込み
１４１  物理ＨＢＡドライバ
１４２  リソース管理テーブル
【図２Ａ】
2014235501.tif 000003
【図２Ｂ】
2014235501.tif 000004
【図３】
2014235501.tif 000005
【図４Ａ】
2014235501.tif 000006
【図４Ｂ】
2014235501.tif 000007
【図４Ｃ】
2014235501.tif 000008
【図４Ｄ】
2014235501.tif 000009
【図１】
2014235501.tif 000010
【図４Ｅ】
2014235501.tif 000011
【図４Ｆ】
2014235501.tif 000012
【図５Ａ】
2014235501.tif 000013
【図５Ｂ】
2014235501.tif 000014
【図６Ａ】
2014235501.tif 000015
【図６Ｂ】
2014235501.tif 000016
【図６Ｃ】
2014235501.tif 000017
【図７Ａ】
2014235501.tif 000018
【図７Ｂ】
2014235501.tif 000019
【図７Ｃ】
2014235501.tif 000020
【図８Ａ】
2014235501.tif 000021
【図８Ｂ】
2014235501.tif 000022
【図９Ａ】
2014235501.tif 000023
【図９Ｂ】
2014235501.tif 000024
【図９Ｃ】
2014235501.tif 000025