(57)【特許請求の範囲】
【請求項１】
複数の仮想マシンで一の物理ＮＩＣデバイスを共有する方法であって、
コンピューティングシステムにおいて顧客仮想マシンで実行されている顧客オペレーティングシステム（ＯＳ）の仮想ネットワークインターフェースカード（ＮＩＣ）ドライバによって、前記コンピューティングシステムに結合されているネットワークを介して物理ＮＩＣドライバによって送信されるべき顧客ＯＳ要求パケットを受信する段階と、
前記顧客ＯＳの仮想ＮＩＣドライバによって、前記顧客ＯＳ要求パケットから媒体アクセス制御（ＭＡＣ）フレーム情報を抽出する段階と、
前記顧客ＯＳ要求パケットから抽出された前記媒体アクセス制御（ＭＡＣ）フレーム情報を前記コンピューティングシステムの共有メモリの空いているブロックに複製して、前記ブロックを前記共有メモリ内の送信待ち行列に付加する段階と、
サービス仮想マシンで実行されているサービスＯＳの仮想ＮＩＣドライバによって前記送信待ち行列から前記共有メモリの前記ブロックをフェッチする段階と、
前記サービスＯＳの仮想ＮＩＣドライバによって、前記抽出された媒体アクセス制御（ＭＡＣ）フレーム情報を、前記顧客ＯＳ要求パケットとは異なる新しいサービスＯＳ要求パケットにパッケージングし直す段階と、
前記サービスＯＳのサービスＯＳネットワークスタック部に前記新しいサービスＯＳ要求パケットを渡す段階と、
前記サービスＯＳネットワークスタック部のブリッジドライバによって前記新しいサービスＯＳ要求パケットを前記物理ＮＩＣドライバにルーティングする段階と、
前記物理ＮＩＣドライバによって、前記物理ＮＩＣデバイスを介して前記ネットワークで前記新しいサービスＯＳ要求パケットを送信する段階と
を備える方法。
【請求項２】
前記顧客ＯＳの仮想ＮＩＣドライバによってＶＭＣＡＬＬ命令を呼び出して、前記コンピューティングシステムの仮想マシンマネージャ（ＶＭＭ）から前記サービスＯＳの仮想ＮＩＣドライバに対して顧客ＯＳ要求パケットが利用可能である旨を通知させて、前記ＶＭＭに前記サービスＯＳの仮想ＮＩＣドライバに割り込みを発行させる段階をさらに備える請求項１に記載の方法。
【請求項３】
前記ＶＭＭは、共有メモリのうち一の領域を、前記顧客ＯＳおよび前記サービスＯＳがアクセス可能な前記送信待ち行列に割り当てる請求項２に記載の方法。
【請求項４】
前記サービスＯＳは、前記コンピューティングシステムのプロセッサによって提供されるセキュアエンクレーブセッションにおいて実行される請求項１から３のいずれか一項に記載の方法。
【請求項５】
前記コンピューティングシステムにおいて、前記顧客仮想マシンである第１の顧客仮想マシンとは異なる第２の顧客仮想マシンで実行されている第２の顧客オペレーティングシステム（ＯＳ）の第２の仮想ネットワークインターフェースカード（ＮＩＣ）ドライバによって、前記物理ＮＩＣドライバが送信すべき第２の顧客ＯＳ要求パケットを受信して、前記第２の顧客ＯＳ要求パケットから媒体アクセス制御（ＭＡＣ）フレーム情報を抽出し、前記第２の顧客ＯＳ要求パケットから抽出された媒体アクセス制御（ＭＡＣ）フレーム情報を前記コンピューティングシステムの共有メモリの空いているブロックに複製して、前記ブロックを前記共有メモリの前記送信待ち行列に付加する段階をさらに備え、
前記第２の顧客仮想マシンは、前記第１の顧客仮想マシンと同時に前記コンピューティングシステムで実行されている請求項１から４のいずれか一項に記載の方法。
【請求項６】
前記顧客ＯＳである第１の顧客ＯＳおよび前記第２の顧客ＯＳは異なるＯＳである請求項５に記載の方法。
【請求項７】
複数の仮想マシンによる物理ＮＩＣデバイスの共有を実現させるプログラムであって、
コンピューティングシステムに、
コンピューティングシステムにおいて顧客仮想マシンで実行されている顧客オペレーティングシステム（ＯＳ）の仮想ネットワークインターフェースカード（ＮＩＣ）ドライバによって、前記コンピューティングシステムに結合されているネットワークを介して物理ＮＩＣドライバによって送信されるべき顧客ＯＳ要求パケットを受信して、
前記顧客ＯＳの仮想ＮＩＣドライバによって、前記顧客ＯＳ要求パケットから媒体アクセス制御（ＭＡＣ）フレーム情報を抽出して、
前記顧客ＯＳ要求パケットから抽出された前記媒体アクセス制御（ＭＡＣ）フレーム情報を前記コンピューティングシステムの共有メモリの空いているブロックに複製して、前記ブロックを前記共有メモリ内の送信待ち行列に付加して、
サービス仮想マシンで実行されているサービスＯＳの仮想ＮＩＣドライバによって前記送信待ち行列から前記共有メモリの前記ブロックをフェッチして、
前記サービスＯＳの仮想ＮＩＣドライバによって、前記抽出された媒体アクセス制御（ＭＡＣ）フレーム情報を、前記顧客ＯＳ要求パケットとは異なる新しいサービスＯＳ要求パケットにパッケージングし直して、
前記サービスＯＳのサービスＯＳネットワークスタック部に前記新しいサービスＯＳ要求パケットを渡して、
前記サービスＯＳネットワークスタック部のブリッジドライバによって前記新しいサービスＯＳ要求パケットを前記物理ＮＩＣドライバにルーティングして、
前記物理ＮＩＣドライバによって、一の物理ＮＩＣデバイスを介して前記ネットワークで前記新しいサービスＯＳ要求パケットを送信すること
を実行させるためのプログラム。
【請求項８】
前記顧客ＯＳの仮想ＮＩＣドライバによってＶＭＣＡＬＬ命令を呼び出して、前記コンピューティングシステムの仮想マシンマネージャ（ＶＭＭ）から前記サービスＯＳの仮想ＮＩＣドライバに対して顧客ＯＳ要求パケットが利用可能である旨を通知させ、前記ＶＭＭに前記サービスＯＳの仮想ＮＩＣドライバに対して割り込みを発行することをさらに実行させる請求項７に記載のプログラム。
【請求項９】
前記サービスＯＳを、前記コンピューティングシステムのプロセッサによって提供されるセキュアエンクレーブセッションにおいて実行する請求項７又は請求項８に記載のプログラム。
【請求項１０】
複数の仮想マシンで一の物理ＮＩＣデバイスを共有するためのコンピューティングシステムであって、
顧客オペレーティングシステム（ＯＳ）を実行する顧客仮想マシンと、
サービスＯＳを実行するサービス仮想マシンと
を備え、
前記顧客ＯＳは、前記コンピューティングシステムに結合されているネットワークを介して前記物理ＮＩＣデバイスによって送信されるべき顧客ＯＳ要求パケットを受信し、前記顧客ＯＳ要求パケットから媒体アクセス制御（ＭＡＣ）フレーム情報を抽出し、前記顧客ＯＳ要求パケットから抽出された前記媒体アクセス制御（ＭＡＣ）フレーム情報を前記コンピューティングシステムの共有メモリの空いているブロックに複製して、前記ブロックを前記共有メモリ内の送信待ち行列に付加する顧客ＯＳ仮想ネットワークインターフェースカード（ＮＩＣ）ドライバを有しており、
前記サービスＯＳは、
前記送信待ち行列から前記共有メモリの前記ブロックをフェッチして、前記抽出された媒体アクセス制御（ＭＡＣ）フレーム情報を、前記顧客ＯＳ要求パケットとは異なる新しいサービスＯＳ要求パケットにパッケージングし直すサービスＯＳ仮想ＮＩＣドライバと、
前記サービスＯＳ仮想ＮＩＣドライバから前記新しいサービスＯＳ要求パケットを受信するサービスＯＳネットワークスタック部と、
前記サービスＯＳネットワークスタック部から前記新しいサービスＯＳ要求パケットを受信して、前記新しいサービスＯＳ要求パケットを前記物理ＮＩＣデバイスに送信する物理ＮＩＣドライバと
を有しているコンピューティングシステム。
【請求項１１】
仮想マシンマネージャ（ＶＭＭ）をさらに備え、
前記顧客ＯＳの仮想ＮＩＣドライバがＶＭＣＡＬＬ命令を前記ＶＭＭに呼び出して、顧客ＯＳ要求パケットが利用可能である旨を前記サービスＯＳ仮想ＮＩＣドライバに通知して、
前記ＶＭＭは、前記サービスＯＳ仮想ＮＩＣドライバに割り込みを発行する請求項１０に記載のコンピューティングシステム。
【請求項１２】
前記ＶＭＭは、共有メモリのうち一の領域を、前記顧客ＯＳおよび前記サービスＯＳがアクセス可能な前記送信待ち行列に割り当てる請求項１１に記載のコンピューティングシステム。
【請求項１３】
前記サービスＯＳは、前記コンピューティングシステムのプロセッサによって提供されるセキュアエンクレーブセッションにおいて実行される請求項１０から１２のいずれか一項に記載のコンピューティングシステム。
【請求項１４】
前記コンピューティングシステムにおいて、前記顧客仮想マシンである第１の顧客仮想マシンとは異なる第２の顧客仮想マシンで実行されている第２の顧客オペレーティングシステム（ＯＳ）をさらに備え、
前記第２の顧客ＯＳは第２の仮想ＮＩＣドライバを有し、
前記第２の顧客仮想マシンは、前記第１の顧客仮想マシンと同時に前記コンピューティングシステムにおいて実行され、
前記第２の仮想ＮＩＣドライバは、
前記物理ＮＩＣドライバによって送信されるべき第２の顧客ＯＳ要求パケットを受信して、
前記第２の顧客ＯＳ要求パケットから媒体アクセス制御（ＭＡＣ）フレーム情報を抽出し、
前記コンピューティングシステムの共有メモリの空いているブロックに前記第２の顧客ＯＳ要求パケットから抽出された媒体アクセス制御（ＭＡＣ）フレーム情報を複製して、前記ブロックを前記共有メモリ内の前記送信待ち行列に付加する請求項１０から１３のいずれか一項に記載のコンピューティングシステム。
【請求項１５】
複数の仮想マシンで一の物理ＮＩＣデバイスを共有する方法であって、
コンピューティングシステムにおいてサービス仮想マシンで実行されているサービスオペレーティングシステム（ＯＳ）の物理ネットワークインターフェースカード（ＮＩＣ）ドライバによって、前記コンピューティングシステムに結合されているネットワークを介して前記物理ＮＩＣデバイスによって受信するネットワークパケットを受信する段階と、
サービスＯＳネットワークスタック部のブリッジドライバ部によって、前記ネットワークパケットをサービスＯＳ仮想ＮＩＣドライバにルーティングする段階と、
前記サービスＯＳ仮想ＮＩＣドライバによって、前記ネットワークパケットから媒体アクセス制御（ＭＡＣ）フレーム情報を抽出する段階と、
前記サービスＯＳ仮想ＮＩＣドライバによって、前記コンピューティングシステムの共有メモリの空いているブロックに前記ネットワークパケットから抽出された媒体アクセス制御（ＭＡＣ）フレーム情報を複製して、前記ブロックを前記共有メモリ内の受信待ち行列に付加する段階と、
顧客仮想マシンで実行されている顧客ＯＳの仮想ＮＩＣドライバによって、前記受信待ち行列から前記共有メモリの前記ブロックをフェッチする段階と、
前記顧客ＯＳの仮想ＮＩＣドライバによって、前記抽出された媒体アクセス制御（ＭＡＣ）フレーム情報を、前記ネットワークパケットとは異なる顧客ＯＳ要求パケットにパッケージングし直す段階と、
前記顧客ＯＳの仮想ＮＩＣドライバによって、前記顧客ＯＳ要求パケットを顧客ＯＳネットワークスタック部に渡す段階と
を備える方法。
【請求項１６】
前記サービスＯＳ仮想ＮＩＣドライバによってＶＭＣＡＬＬ命令を呼び出して、前記コンピューティングシステムの仮想マシンマネージャ（ＶＭＭ）から前記顧客ＯＳの仮想ＮＩＣドライバに対してネットワークパケットが利用可能である旨を通知させ、前記ＶＭＭに前記顧客ＯＳの仮想ＮＩＣドライバに対して割り込みを発行させる段階をさらに備える請求項１５に記載の方法。
【請求項１７】
前記サービスＯＳは、前記コンピューティングシステムのプロセッサによって提供されるセキュアエンクレーブセッション内で実行される請求項１５又は請求項１６に記載の方法。
【請求項１８】
複数の仮想マシンで一の物理ネットワークインターフェースカード（ＮＩＣ）デバイスを共有するコンピューティングシステムであって、
サービスオペレーティングシステム（ＯＳ）を実行しているサービス仮想マシンと、
顧客ＯＳを実行している顧客仮想マシンと
を備え、
前記サービスＯＳは、
前記コンピューティングシステムに結合されているネットワークを介して前記物理ＮＩＣデバイスが受信するネットワークパケットを受信する物理ネットワークインターフェースカード（ＮＩＣ）ドライバと、
前記ネットワークパケットをルーティングするサービスＯＳネットワークスタック部のブリッジドライバ部と、
前記ブリッジドライバ部から前記ネットワークパケットを受信して、前記ネットワークパケットから媒体アクセス制御（ＭＡＣ）フレーム情報を抽出し、前記ネットワークパケットから抽出された媒体アクセス制御（ＭＡＣ）フレーム情報を前記コンピューティングシステムの共有メモリの空いているブロックに複製して、前記共有メモリ内の受信待ち行列に前記ブロックを付加するサービスＯＳ仮想ＮＩＣドライバと
を有し、
前記顧客ＯＳは、
前記受信待ち行列から前記共有メモリの前記ブロックをフェッチして、前記抽出された媒体アクセス制御（ＭＡＣ）フレーム情報を前記ネットワークパケットとは異なる顧客ＯＳ要求パケットにパッケージングし直す顧客ＯＳ仮想ＮＩＣドライバと、
前記顧客ＯＳ仮想ＮＩＣドライバから前記顧客ＯＳ要求パケットを受信する顧客ＯＳネットワークスタック部と
を有するコンピューティングシステム。
【請求項１９】
仮想マシンマネージャ（ＶＭＭ）をさらに備え、
前記サービスＯＳ仮想ＮＩＣドライバは、ＶＭＣＡＬＬ命令を前記ＶＭＭに呼び出して、要求パケットが利用可能である旨を前記顧客ＯＳ仮想ＮＩＣドライバに通知し、
前記ＶＭＭは前記顧客ＯＳ仮想ＮＩＣドライバに割り込みを発行する請求項１８に記載のコンピューティングシステム。
【請求項２０】
前記サービスＯＳは、前記コンピューティングシステムのプロセッサによって提供されるセキュアエンクレーブセッション内で実行される請求項１８又は請求項１９に記載のコンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、概してコンピューティングシステムに関し、具体的にはシステムファームウェアおよび仮想化に関する。
【背景技術】
【０００２】
多くのコンピューティングシステムは、ネットワークを介して他のシステムおよびデバイスと通信を行うためにネットワークインターフェースカード（ＮＩＣ）を備える。複数の仮想マシンで複数のオペレーティングシステム（ＯＳ）を実行しているコンピューティングシステムでは、各ＯＳがそれぞれのＮＩＣと通信する必要があるのが普通である。このため、仮想マシンで実行される複数のＯＳをサポートするためには、コンピューティングシステムには複数のＮＩＣをインストールする必要がある。しかし、複数のＮＩＣをインストールするのは、コスト効率が悪く、実用的でない場合がある。場合によっては、コンピューティングシステムには、ＮＩＣを追加でインストールする余分のペリフェラル・コンポーネント・インターコネクト（ＰＣＩ）スロットまたはＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩＥ）スロットがないか、コンピューティングシステムのフォーム・ファクターに余裕がないことがある。また、ＮＩＣを追加するコストは、コンピューティングシステムの総コストを考えると無理なほど高いこともある。
【図面の簡単な説明】
【０００３】
本発明の特徴および利点は、以下に記載する詳細な説明から明らかとなるであろう。
【図１】本発明の実施形態に係るコンピューティングシステムにおけるセキュアエンクレーブセッションを示す図である。
【図２】本発明の実施形態に係る複数の仮想マシンを備えるコンピューティングシステムを示す図である。
【図３】本発明の実施形態に係る仮想マシンのためのネットワークスタックを備えるコンピューティングシステムを示す図である。
【図４】本発明の実施形態に係るネットワーク要求パケットを示す図である。
【図５】本発明の実施形態に係る仮想マシン間で共有されるメモリおよび実行される通信を示す図である。
【図６】本発明の実施形態に係るネットワーク要求パケットの処理を示すフローチャートである。
【図７】本発明の実施形態に係るネットワーク要求パケットの処理を示すフローチャートである。
【図８】本発明の実施形態に係るネットワーク要求パケットの処理を示すフローチャートである。
【図９】本発明の実施形態に係るネットワーク要求パケットの処理を示すフローチャートである。
【発明を実施するための形態】
【０００４】
本発明の実施形態は、コンピューティングシステムにおいて複数の仮想マシン（ＶＭ）で一の物理ネットワークインターフェースカード（ＮＩＣ）デバイスを共有するためのシステムおよび方法を含む。本発明の実施形態によると、サービスＯＳと呼ばれ、且つ、第１のＶＭで実行される一のオペレーティングシステム（ＯＳ）が、物理ＮＩＣへのアクセスを制御すると共に、消費側ＯＳと呼ばれる１以上の他のＯＳからの通信要求を処理する。顧客ＯＳは、別のＶＭで実行され、アプリケーションプログラムを介してコンピュータシステムのユーザとやり取りする。アプリケーションプログラムは、顧客ＯＳと同じＶＭで実行される。顧客ＯＳは、物理ＮＩＣデバイスを介して通信を行う必要がある場合、サービスＯＳにネットワーク要求パケットを送信する。サービスＯＳは、ネットワーク要求パケットを解釈して、物理ＮＩＣに当該パケットを転送する。このため、サービスＯＳは顧客ＯＳのためにＮＩＣを仮想化して、コンピューティングシステムが顧客ＯＳ毎に一の物理ＮＩＣを含む必要はない。
【０００５】
本明細書において本発明の「一実施形態」または「実施形態」という表現を用いるが、これは当該実施形態に関連付けて説明する特定の特徴、構造、または特性が本発明の少なくとも１つの実施形態に含まれることを意味する。このため、「一実施形態」という表現は本明細書において繰り返し用いられるが、必ずしも全てが同じ実施形態を意味するものではない。
【０００６】
本発明の実施形態は、物理ＮＩＣの仮想化を保護することを目的として、サービスＯＳを実行している第１のＶＭを、コンピューティングシステムのプロセッサパッケージ内のセキュアエンクレーブ（ＳＥ）セッション内で実行するとしてよい。図１は、本発明の実施形態に係るコンピューティングシステムにおいてセキュアエンクレーブセッションを示す図である。説明を目的として、コンピューティングシステム１００の一部を簡単に図１に示す。プロセッサパッケージ１０２は、セキュリティペリメータ内に１以上のプロセッシングコアを有する。一実施形態によると、セキュリティペリメータは、プロセッサパッケージの境界であってよい（図１では太線で示す）。プロセッサパッケージは、メモリ１０４およびプラットフォームコントロールハブ（ＰＣＨ）１０６と接続している。ＰＣＨは、１以上のＩ／Ｏデバイス１０８と接続している。セキュアエンクレーブ機能を実現するべく、セキュアエンクレーブを作成して、強制的に分離を行い、命令実行およびデータアクセスを保護するプロセッサ命令を複数提供する。プロセッサパッケージの外部にあるデータおよびコードは、暗号化されて、インテグリティをチェックするとしてよい。プロセッサパッケージの内部にあるデータおよびコードは、暗号化されておらず、モードおよびキャッシュ保護メカニズムで保護されているとしてよい。実施形態によると、データがセキュアエンクレーブから「漏れる」ことはない。プロセッサパッケージ内のマイクロコードは、割り込み、例外、トラップ、および、仮想マシンマネージャ（ＶＭＭ）終了のために、エンクレーブ内にエンクレーブ状態情報を保存する。セキュアエンクレーブ機能は、ＰＣＴ特許出願（発明の名称：「セキュアにアプリケーションを実行するための方法および装置」、発明者：フランシス・Ｘ．，マキーン（Ｆｒａｎｃｉｓ  Ｘ．ＭｃＫｅｅｎ）他、出願日：２００９年１２月２２日、出願番号：ＰＣＴ／ＵＳ２００９／０６９２１２に記載されている。当該出願の内容は参照により本願に組み込まれる。
【０００７】
図２は、本発明の実施形態に係る複数の仮想マシンを備えるコンピューティングシステムを示す図である。当該コンピューティングシステムは、図１のプロセッサパッケージ１０２、メモリ１０４、ＰＣＨ１０６、およびＩ／Ｏデバイス１０８、ならびに、図示していないがその他の従来素子を有するコンピューティングプラットフォーム２００を備える。Ｉ／Ｏデバイスのうち１つがＮＩＣであってよい。ベーシック・インプット／アウトプット・システム（ＢＩＯＳ）２０２として知られるシステムファームウェアは、コンピューティングプラットフォームで実行され、システムブート時間においてコンピューティングプラットフォームの構成要素の特定、試験、および初期化を開始すると共に、コンピューティングプラットフォームのハードウェアとコンピューティングシステムのソフトウェア素子との間のインターフェースを提供する。公知の仮想化技術をサポートする本発明の実施形態によると、ＢＩＯＳがコンピューティングプラットフォームの初期化を完了した直後に仮想マシンマネージャ（ＶＭＭ）が実行されるとしてよい。ＶＭＭは、コンピューティングプラットフォームにおいて複数の仮想マシンを同時に実行する構成をサポートする。ＶＭＭは、仮想プラットフォームでゲストオペレーティングシステムを提示して、ゲストオペレーティングシステムの実行を監視する。このようにして、同じオペレーティングシステムの複数のインスタンスを含む複数のオペレーティングシステムは、ハードウェアリソースを共有することができるようになる。マルチタスキングでも複数のアプリケーションがハードウェアリソースを共有するが、これとは異なり、ＶＭＭを用いた仮想マシン方式では、一のオペレーティングシステムのエラーを、ハードウェアを共有しているほかのオペレーティングシステムから分離させる。ＶＭＭは、システム内のＶＭのための実行環境を準備する。ＶＭＭは、必要に応じて、１以上のＶＭを起動する。
【０００８】
本発明の実施形態によると、複数のＶＭを同時に起動および実行するとしてよく、ＶＭには少なくとも２種類あるとしてよい。最初の種類のＶＭは、サービスＯＳ（ＳＯＳ）２１６を実行しているサービスＶＭ２１４である。サービスＯＳは通常、他のＶＭで実行されている他のＯＳに対してサービスを提供し、そのようなサービスを提供するためにＶＭＭ２０４とやり取りする。二番目の種類のＶＭは、顧客ＶＭ２０６で実行されている顧客ＯＳ（ＣＯＳ）２１０（ゲストＯＳとも呼ばれる）である。顧客ＯＳは、コンピューティングシステムのユーザとやり取りを行なうアプリケーションプログラム（図２では不図示）をサポートしている。顧客ＯＳは、ＶＭＭ２０４およびサービスＯＳ２１６が提供するサービスに依存している。顧客ＶＭで実行されているアプリケーションプログラムは、サービスＶＭで実行されているサービスＯＳと直接やり取りすることはできない。本発明の実施形態によると、複数の顧客ＶＭ１  ２０６〜Ｎ−１  ２０８は、起動されて顧客ＯＳ１  ２１０〜Ｎ−１  ２１２をそれぞれ実行するとしてよい。
【０００９】
図３は、本発明の実施形態に係る仮想マシンのためのネットワークスタックを備えるコンピューティングシステムを示す図である。実施形態によると、顧客ＶＭ１  ２０６で実行されているＣＯＳ１  ３０４等の顧客ＯＳのうちいずれか１つがサポートしているアプリケーションプログラム３０４にネットワークサービスを提供するべく、ＶＭＭ２０４（図３には不図示）はＣＯＳ仮想ＮＩＣデバイス３１０を作成する。顧客ＯＳにとって、この仮想化ＮＩＣデバイスは物理ＮＩＣデバイスと同様に機能する。ＣＯＳ仮想ＮＩＣドライバ部３０８が顧客ＯＳ１  ３０４内に作成されるとしてよい。ＣＯＳ仮想ＮＩＣドライバ３０８は、上位レベルのＣＯＳネットワークスタック３０６からのネットワーク要求を処理し、要求の結果を返す役割を持つとしてよい。アプリケーションプログラム３０４が物理ＮＩＣデバイスでのＩ／Ｏを要求すると、当該要求はＣＯＳネットワークスタック３０６、ＣＯＳ仮想ＮＩＣドライバ３０８、およびＣＯＳ仮想ＮＩＣデバイス３１０で処理されるとしてよい。ＣＯＳ仮想ＮＩＣデバイス３１０が処理する応答が、ＣＯＳ仮想ＮＩＣドライバ３０８およびＣＯＳネットワークスタック３０６を介してアプリケーションプログラムに転送されて返ってくるとしてよい。
【００１０】
対応するサービスＯＳ（ＳＯＳ）仮想ＮＩＣデバイス３２０が、サービスＶＭ２１４によるアクセスのために作成されるとしてよい。また、サービスＶＭ２１４で実行されるサービスＯＳ２１６内に、対応するＳＯＳ仮想ＮＩＣドライバ３１６も作成されるとしてよい。顧客ＶＭ２０６に結合されているＣＯＳ仮想ＮＩＣデバイス３１０が発行する要求は、処理のために、サービスＶＭ２１４に結合されているＳＯＳ仮想ＮＩＣデバイス３２０に転送されるとしてよい。当該要求は、ＳＯＳ仮想ＮＩＣデバイス３２０と、サービスＯＳ内のＳＯＳネットワークスタック３１４とによって処理されるとしてよい。サービスＯＳは、物理ＮＩＣデバイス３２２とやり取りを行なっているので、物理ＮＩＣドライバ３１８および物理ＮＩＣデバイス３２２による当該要求の実行を制御するとしてよい。当該要求に対する応答は、逆方向に流れるとしてよく、物理ＮＩＣデバイス３２２から物理ＮＩＣドライバ３１８に流れ、ＳＯＳネットワークスタック３１４、ＳＯＳ仮想ＮＩＣドライバ３１６、およびＳＯＳ仮想ＮＩＣデバイス３２０を通過して、サービスＯＳに戻るとしてよい。このため、顧客ＯＳ２１０は物理ＮＩＣデバイス３２２と通信していると錯覚する。
【００１１】
サービスＯＳ２１６がセキュアエンクレーブセッション内で実行される場合、物理ＮＩＣデバイス３２２が関連するＩ／Ｏ要求は、顧客ＶＭ内のアプリケーションプログラムまたは顧客ＯＳ内で実行されるほかのプログラムによる悪意ある処理から保護されるとしてよい。システム初期化時点、または、物理ＮＩＣデバイスがコンピューティングシステムに追加される任意の時点において、物理ＮＩＣデバイスに対するアクセスを保護するべくセキュアエンクレーブセッションが開始されるとしてよい。
【００１２】
Ｉ／Ｏ要求は、ネットワーク要求パケットとしてアプリケーションプログラム３０４からＣＯＳネットワークスタック３０６を介してＣＯＳ仮想ＮＩＣドライバ３０８に到達すると、トランスミッション・コントロール・プロトコル（ＴＣＰ）、ユーザ・データグラム・プロトコル（ＵＤＰ）およびインターネット・プロトコル（ＩＰ）といったネットワークプロトコル層によって処理されている。ネットワーク要求パケットは、ネットワークを介した送信に必要な情報を含むので、物理ＮＩＣデバイスに送信されるべく物理ＮＩＣドライバに供給されるとしてよい。図４は、本発明の実施形態に係るネットワーク要求パケットを示す図である。ネットワーク要求パケット４００は、ＯＳ関連情報４０２および媒体アクセス制御（ＭＡＣ）フレーム情報４０４を備える。ＯＳ関連情報４０２は、ネットワークスタックドライバまたはＮＩＣデバイスドライバが利用する情報および／またはパラメータを含む。この部分は、物理ＮＩＣデバイスのネットワークインターフェースには送信されず、サービスＯＳに理解されない可能性もあるので、ネットワーク要求パケットのこの部分は無視するとしてよい。ＭＡＣフレーム情報が、ネットワークインターフェース（例えば、イーサネット（登録商標）ネットワーク媒体の基本送信部）に実際に送信される内容である。
【００１３】
本発明の実施形態によると、顧客ＯＳが直接利用可能な物理ＮＩＣデバイスはないので、ＣＯＳ仮想ＮＩＣドライバ３０８はサービスＶＭおよびＶＭＭの構成要素にパケットの送信を依存する。ＶＭＭは、処理すべきパケットがある場合にサービスＯＳに通知して、顧客ＶＭとサービスＶＭとの間でデータを交換する際に利用される共有メモリ領域を作成する。共有メモリ領域は、顧客ＯＳおよびサービスＯＳの両方に可視の領域であるので、各ＶＭの仮想ＮＩＣドライバはパケットにアクセスが可能でパケットを適宜処理可能であるとしてよい。一実施形態によると、共有メモリはメモリ１０４内で実現されるとしてもよい。
【００１４】
図５は、本発明の実施形態に係る仮想マシン間で共有されるメモリおよび実行される通信を示す図である。ＣＯＳ仮想ＮＩＣドライバ３０８は、ネットワーク要求パケットからＭＡＣフレーム４０４を抽出して、共有メモリ内でメモリブロックを割り当てて、ＭＡＣフレームを共有メモリのブロックに複製して、このブロックを指定された送信（ＴＸ）待ち行列５０６に付加するとしてよい。ＴＸ待ち行列５０６は、出力用ＭＡＣフレームの管理を支援する共有メモリ内にある。逆方向の経路では、物理ＮＩＣデバイス３２２がパケットを受信して、サービスＯＳが当該パケットを管理している場合、サービスＯＳの構成要素（つまり、物理ＮＩＣドライバ３１８、ＳＯＳネットワークスタック３１４、および、ＳＯＳ仮想ＮＩＣドライバ３１６）はＭＡＣフレームを抽出して、ＭＡＣフレームの内容を共有メモリ内の空いたメモリブロックに複製して、当該ブロックを受信（ＲＸ）待ち行列５０８に付加する。
【００１５】
ＣＯＳ仮想ＮＩＣドライバ３０８は、以下の手順で、送信が必要なＭＡＣフレームがある旨をサービスＯＳに通知するとしてよい。本発明の実施形態によると、公知の仮想化技術に基づくメッセージ通知メカニズムを利用するとしてよい。ＶＭＭ２０４は、顧客ＯＳとサービスＯＳとの間で媒介役として動作するとしてよく、必要に応じて適切なＯＳに通知するとしてよい。
【００１６】
例えば、顧客ＯＳ１  ２１０は、サービスＯＳ２１６との通信を希望する場合、ＶＭＣＡＬＬ５１０という名称の特権命令を実行するとしてよい。ＶＭＣＡＬＬ命令は、現在のＶＭ環境を終了して、ＶＭＭ２０４における選択サービスを呼び出すための命令である。このようなサービスは、ＶＭＭ内のＶＭＣＡＬＬ命令処理部によって提供されるとしてよい。ＶＭＣＡＬＬ処理部は（図５では不図示）、ＶＭＣＡＬＬの入力パラメータを確認して、ＶＭＭからサービスＯＳに通知すべきか否かを判断するとしてよい。ＶＭＭは、通知すべきである場合、メッセージを記録して、顧客ＯＳに制御を戻す。ＶＭＭは、常にコンピューティングシステム内で実行中のプロセスであるので、サービスＯＳ実行用のタイムスロットを利用する場合、割り込み５１６を利用してサービスＯＳに通知しようと試みる。同様に、サービスＯＳは、顧客ＯＳとの通信を希望する場合、ＶＭＣＡＬＬ５１４を実行してＶＭＭは顧客ＯＳに割り込み５１２を用いて通知するとしてよい。
【００１７】
サービスＯＳ側を見ると、サービスＯＳは顧客ＯＳのネットワーク送受信用エージェントであるので、本発明の実施形態はこのエージェント構成をサポートするべく２つのドライバ部を提供している。一方は、ＳＯＳ仮想ＮＩＣドライバ３１６である。他方は、ブリッジドライバ部５０２である。サービスＯＳ内のＳＯＳ仮想ＮＩＣドライバ３１６は、共有メモリ５０４内の送信ＴＸ待ち行列５０６によって顧客ＯＳから出力用ＭＡＣフレームを収集して、収集した出力用ＭＡＣフレームをブリッジドライバを介して物理ＮＩＣドライバ３１８に渡す役割を持つ。また、ブリッジドライバは、顧客ＯＳ宛の入力パケットを物理ＮＩＣドライバ３１８から受信して、顧客ＯＳがアクセスできるように当該パケットを共有メモリ５０４内の受信ＲＸ待ち行列５０８に入れる。詳細に説明すると、送信ＴＸ待ち行列５０６に出力用パケットがある旨の通知をＳＯＳ仮想ＮＩＣドライバ３１６がＶＭＭ２０４から受けると、サービスＯＳ内のＳＯＳ仮想ＮＩＣドライバは、送信ＴＸ待ち行列からＭＡＣフレームを抽出して、当該フレームを新しいネットワーク要求パケットへとパッケージングし直して、新しいパケットをＳＯＳネットワークスタック３１４にコミットする。他方、ＳＯＳ仮想ＮＩＣドライバ３１６は、顧客ＯＳ宛のパケットをＳＯＳネットワークスタックから受信すると、ＯＳ関連部分を除外して、顧客ＯＳがアクセスできるようにＭＡＣフレームを受信ＲＸ待ち行列５０８に入れる。上述したメッセージ通知方法は、顧客ＯＳに入力パケットを処理するように通知する場合に用いられるとしてもよい。
【００１８】
本発明の実施形態によると、ブリッジドライバ５０２は、ＩＰプロトコル層でフィルタドライバを実現するので、物理ＮＩＣドライバ３１８を介して物理ＮＩＣデバイスから入力されるパケットを全て確認して、正しい宛先にルーティングする。例えば、ブリッジドライバは、ＳＯＳ仮想ＮＩＣドライバ３１６から受信したパケットを見つけると、当該パケットを物理ＮＩＣドライバ３１８に転送する。ブリッジドライバは、物理ＮＩＣドライバ３１８から受信したパケットを見つけると、当該パケット内のＩＰアドレス情報を確認して、当該パケットが顧客ＯＳ２１０またはサービスＯＳ２１６のいずれに送信されるべきかを判断する。ブリッジドライバは、当該パケットが顧客ＯＳ２１０に送信されるべきと判断すると、当該パケットをＳＯＳ仮想ＮＩＣドライバ３０８に転送して、当該情報をさらに顧客ＯＳへと転送させる。
【００１９】
物理ＮＩＣドライバ３１８から受信したパケットの宛先が顧客ＯＳおよびサービスＯＳのいずれであるかを識別する方法は少なくとも２つ考えられるとしてよい。最初の方法は、顧客ＯＳおよびサービスＯＳが異なるＩＰアドレスを利用するので、ブリッジドライバ５０２は受信したネットワークパケット内のＩＰアドレス情報を参照して、どのＯＳがパケットの受信者であるかを判断する方法である。二番目の方法として、顧客ＯＳおよびサービスＯＳが同じＩＰアドレスを用いるが、使用するＴＣＰポートまたはＵＤＰポートの範囲が異なる方法がある。最初の方法は、パケットルーティングロジックが簡単であるが、ＩＰアドレスリソースのコストが高くなる場合がある。二番目の方法は、ＩＰアドレスリソースを節約できるが、ブリッジドライバ内のパケットルーティングロジックがより複雑になってしまう場合がある。これら２つの方法のうちいずれを選択するかは、目的とする利用モデルに応じて変わり、実施例毎に決まる。
【００２０】
図６および７は、本発明の実施形態に係るネットワーク要求パケット送信処理を示すフローチャートである。ブロック６００において、物理ＮＩＣデバイスへ送信されるべきネットワーク要求パケットを顧客ＯＳ（ＣＯＳ）ネットワークスタック３０６から受信すると、ブロック６０２において、ＣＯＳ仮想ＮＩＣドライバ３０８は、サービスＯＳ（ＳＯＳ）２１６およびＶＭＭ２０４が準備できているか否かを判断するとしてよい。サービスＯＳおよびＶＭＭの一方（または両方）が準備できていない場合、ブロック６０４に進み、エラーメッセージを報告して、顧客ＯＳに制御を戻すとしてよい。ブロック６０２においてサービスＯＳおよびＶＭＭが準備できている場合、ブロック６１２において、共有メモリに空いているブロックがあるか否かを確認するとしてよい。空いているブロックがない場合、ブロック６０４に進み、エラーが報告されるとしてよい。空いているブロックがある場合、図７のブロック７０２に進む。
【００２１】
図７のブロック７０２では、ＣＯＳ仮想ＮＩＣドライバ３０８が、ネットワーク要求パケットのＭＡＣフレームを共有メモリ５０４内の空いているブロックに複製する。ブロック７０４では、新たにＭＡＣフレームが入れられたブロックを送信待ち行列ＴＸ５０６に付加するとしてよい。この後、ブロック７０６において、ＣＯＳ仮想ＮＩＣドライバ３０８は、ＶＭＣＡＬＬ命令５１０を呼び出して、ＶＭＭ２０４を介してサービスＯＳ２１６に通知を行なう。ブロック７０８において、ＶＭＭはサービスＯＳに対する割り込み５１６を発行する。これに応じて、サービスＯＳ内のＳＯＳ仮想ＮＩＣドライバ３１６は、ブロック７１０において割り込みを受信して、ブロック７１２において送信待ち行列ＴＸ５０６の次のノードをフェッチする。ブロック７１４において、ＳＯＳ仮想ＮＩＣドライバ３１６は、送信待ち行列ＴＸ内の次のノードが含むＭＡＣフレーム情報を新しいサービスＯＳ要求パケットにパッケージングする。この後、ブロック７１６において、ＳＯＳ仮想ＮＩＣドライバ３１６は、新しいサービスＯＳ要求パケットをサービスＯＳネットワークスタック３１４に渡す。続いて、ブロック７１８において、ブリッジドライバ５０２は、新しいサービスＯＳ要求パケットを物理ＮＩＣドライバ３１８にルーティングする。ブロック７２０において、新しいサービスＯＳ要求パケットは、物理ＮＩＣドライバによってネットワークインターフェースを介して送信される。
【００２２】
図８および図９は、本発明の実施形態に係るネットワーク要求パケット受信処理を示すフローチャートである。ブロック８００において、物理ＮＩＣドライバ３１８は、物理ＮＩＣデバイス３２２から少なくとも１つのネットワークパケットを受信して、当該ネットワークパケットをサービスＯＳ２１６内のＳＯＳネットワークスタック３１４に渡す。ブロック８０２において、ネットワークスタック内のブリッジドライバ５０２は、入力されたパケットを、サービスＯＳ内のＳＯＳ仮想ＮＩＣドライバ３１６にルーティングする。ブロック８０４において、ＳＯＳ仮想ＮＩＣドライバ３１６は、顧客ＯＳ（ＣＯＳ）２１０およびＶＭＭ２０４が準備できているか否かを判断するとしてよい。顧客ＯＳおよびＶＭＭの一方（または両方）が準備できていない場合、ブロック８０６に進み、エラーメッセージを報告して、サービスＯＳに制御を戻すとしてよい。ブロック８１４において顧客ＯＳおよびＶＭＭが準備できている場合、共有メモリに空いているブロックがあるか否かを確認するとしてよい。空いているブロックがない場合、ブロック８０６に進み、エラーメッセージが報告されるとしてよい。空いているブロックがある場合、図９のブロック９０２に進む。
【００２３】
図９のブロック９０２では、ＳＯＳ仮想ＮＩＣドライバ３１６が、受信したネットワークパケットのＭＡＣフレームを共有メモリ５０４内の空いているブロックに複製する。ブロック９０４では、新たにＭＡＣフレームが入れられたブロックを受信待ち行列ＲＸ５０８に付加するとしてよい。この後、ブロック９０６において、ＳＯＳ仮想ＮＩＣドライバ３１６は、ＶＭＣＡＬＬ命令５１４を呼び出して、ＶＭＭ２０４を介して顧客ＯＳ２１０に通知を行なう。ブロック９０８において、ＶＭＭは顧客ＯＳに対する割り込み５１２を発行する。これに応じて、顧客ＯＳ内のＣＯＳ仮想ＮＩＣドライバ３０８は、ブロック９１０において割り込みを受信して、ブロック９１２において受信待ち行列ＲＸ５０８の次のノードをフェッチする。ブロック９１４において、ＣＯＳ仮想ＮＩＣドライバ３０８は、受信待ち行列ＲＸ内の次のノードが含むＭＡＣフレーム情報を新しい顧客ＯＳ要求パケットにパッケージングする。この後、ブロック９１６において、ＣＯＳ仮想ＮＩＣドライバ３０８は、新しい応答パケットを顧客ＯＳネットワークスタック３０６に、そして、アプリケーションプログラム３０４に渡す。
【００２４】
このように、本発明の実施形態は、顧客ＯＳで実行されているユーザのアプリケーションプログラムがネットワークにアクセスする必要がある場合、複数の仮想マシンで一の物理ＮＩＣデバイスを共有するとしてよい。物理ＮＩＣデバイスを追加するべくインストールする必要はない。
【００２５】
当業者であれば、本発明の範囲を逸脱することなく、別の方式を採用して一の物理ＮＩＣデバイスに複数の仮想マシンがセキュアにアクセスできるようにする選択肢があるものと認めるであろう。また、当業者であれば、本明細書に開示した発明は、ソフトウェアのみで構成されるか、ハードウェアのサポートを含むかに関わらず、コンピュータシステムまたはプログラミング環境の部分仮想化または完全仮想化に基づく他の種類の仮想化環境および仮想化システムにも利用され得るものと認めるであろう。
【００２６】
また、当業者は、顧客ＯＳの数および対応する顧客ＶＭの数は３以上であり、実施例毎に決まるものと認めるであろう。さらに、２以上の顧客ＶＭが同時に実行されている場合、一の顧客ＶＭがある種類のＯＳを実行しており（例えば、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）７）、別の顧客ＶＭが別の種類のＯＳ（例えば、Ｌｉｎｕｘ（登録商標））を実行するとしてよい。
【００２７】
さらに、当業者であれば、本発明の実施形態は別の方式およびさまざまなプログラミング言語を用いて実施し得るものと認めるであろう。
【００２８】
本明細書に記載した技術は、任意の特定のハードウェア構成またはソフトウェア構成に限定されるものではなく、任意のコンピューティング環境または処理環境で利用可能であるとしてよい。本明細書に記載した技術は、ハードウェア素子、ソフトウェア素子あるいはファームウェア素子、または、これらの組み合わせで具現化されるロジックに実装されるとしてよい。本明細書に記載した技術は、携帯型または固定型のコンピュータ、携帯情報端末、セットトップボックス、携帯電話およびポケベル、ならびにその他の電子機器等、プロセッサと、プロセッサから読出可能な格納媒体（揮発性および不揮発性のメモリおよび／または格納素子を含む）と、少なくとも１つの入力デバイスと、１以上の出力デバイスとを備えるプログラミング可能な機械で実行されるプログラムに実装されるとしてよい。入力デバイスを用いて入力されたデータにプログラムコードを適用して、上述した機能を実行して、出力情報を生成する。出力情報は、１以上の出力デバイスに適用されるとしてよい。当業者であれば、本発明はさまざまなコンピュータシステム構成、例えば、マルチコアプロセッサ、マルチプロセッサシステム、ミニコンピュータ、メインフレームコンピュータ等で実施し得ることを認めるであろう。本発明はさらに、通信ネットワークを介して接続される複数の遠隔プロセッシングデバイスでタスクを実行する分散型コンピューティング環境でも実施可能である。
【００２９】
各プログラムは、プロセッシングシステムと通信するべく高級プロシージャ言語またはオブジェクト指向型プログラミング言語で実装されるとしてよい。しかし、所望の場合は、アセンブリ言語または機械言語でプログラムを実装するとしてもよい。いずれにしても、コンパイル型言語またはインタプリタ型言語のいずれを用いるとしてもよい。
【００３０】
プログラム命令を用いて、命令がプログラミングされている汎用プロセッシングシステムまたは特定用途向けプロセッシングシステムに、本明細書に記載した処理を実行させるとしてよい。これに代えて、本明細書に記載した処理を実行するハードワイヤードロジックを含む特定のハードウェア素子で、または、プログラミングされたコンピュータ素子およびカスタマイズされたハードウェア素子を任意に組み合わせて、本明細書に記載した処理を実行するとしてもよい。本明細書に記載した方法は、当該方法を実行するようにプロセッシングシステムまたはその他の電子機器をプログラミングする際に利用される命令を格納している機械可読媒体を含むコンピュータプログラム製品として提供されるとしてよい。「機械可読媒体」という用語は、本明細書で用いられる場合、機械によって実行される命令列を格納または符号化することが可能で、且つ、本明細書に記載した方法のうちいずれか１つを機械に実行させる任意の媒体を含むものとする。したがって、「機械可読媒体」という用語は、これらに限定されないが、ソリッドステートメモリ、光ディスク、および、磁気ディスクを含むとする。さらに、関連技術分野ではソフトウェアに言及する際に、処理を行なうものまたは結果を生じさせるものとして、さまざまな用語（例えば、プログラム、プロシージャ、プロセス、アプリケーション、モジュール、ロジック等）を用いることが一般的である。このような表現は単に、プロセッサに処理を実行させるか、または、結果を生じさせるためのプロセッシングシステムによるソフトウェアの実行を簡潔に記載する方法に過ぎない。
【００３１】
本発明を実施形態例を参照しつつ説明してきたが、上記の説明は本発明を限定するものと解釈されるべきではない。本発明の実施形態例のさまざまな変形例および本発明の上記以外の実施形態は、本発明の関連技術分野の当業者には明らかであるが、本発明の範囲に含まれるものとする。
【図１】
0005275407.tif 000002
【図２】
0005275407.tif 000003
【図３】
0005275407.tif 000004
【図４】
0005275407.tif 000005
【図５】
0005275407.tif 000006
【図６】
0005275407.tif 000007
【図７】
0005275407.tif 000008
【図８】
0005275407.tif 000009
【図９】
0005275407.tif 000010