(57)【要約】  仮想マシンの入出力（Ｉ／Ｏ）インターフェースを操作する装置が提供される。本装置は、メモリデバイスの第１の部分をＩ／Ｏインターフェースの配置空間へマッピングし；一組のホスト空間仮想アドレスをメモリデバイスの第１の部分に関連する第１の組の物理アドレスへマッピングする第１のマッピングテーブルを取得し；仮想マシンによりアクセス可能なメモリデバイスの第２の部分に関連する物理アドレスの第２の組を一組のホスト空間仮想アドレスへマッピングする第２のマッピングテーブルを取得し；第２の組の物理アドレスを第１の組の物理アドレスへマッピングする第３のマッピングテーブルを生成し；デバイスドライバがＩ／Ｏインターフェースの配置空間へアクセスできるようにするために、第３のマッピングテーブルを仮想マシンで動作するデバイスドライバへ提供するように構成される。
2020524840.tif 000002
【特許請求の範囲】
【請求項１】
仮想マシンの入出力（Ｉ／Ｏ）インターフェースを操作する装置であって、
一組の命令を格納する１つ又は複数のメモリデバイスと；
１つ又は複数のハードウェアプロセッサとを含み、前記１つ又は複数のハードウェアプロセッサは、前記一組の命令を実行して、
一組のホスト空間仮想アドレスを前記１つ又は複数のメモリデバイスの第１の部分に関連する第１の組の物理アドレスへマッピングする第１のマッピングテーブルを取得することと；
前記１つ又は複数のメモリデバイスの第２の部分に関連する第２の組の物理アドレスを前記一組のホスト空間仮想アドレスへマッピングする第２のマッピングテーブルを取得することであって、前記１つ又は複数のメモリデバイスの前記第２の部分は仮想マシンによりアクセス可能である、ことと；
前記第２の組の物理アドレスを前記第１の組の物理アドレスへマッピングする第３のマッピングテーブルを生成することと；
前記第３のマッピングテーブルを前記仮想マシンで動作するデバイスドライバへ提供することと
を行うように構成される、装置。
【請求項２】
前記１つ又は複数のハードウェアプロセッサはさらに、前記１つ又は複数のメモリデバイスの前記第１の部分をＩ／Ｏインターフェースの配置空間へマッピングするように構成され、
前記第３のマッピングテーブルは前記デバイスドライバが前記Ｉ／Ｏインターフェースの前記配置空間へアクセスできるようにする、請求項１に記載の装置。
【請求項３】
前記１つ又は複数のハードウェアプロセッサはさらに、前記一組の命令を実行して、仮想化コントローラ及びホストドライバを提供するように構成され；
一組のホスト空間仮想アドレスの前記第１の組の物理アドレスへの前記マッピングは前記仮想化コントローラにより行われ；
前記Ｉ／Ｏインターフェースの配置空間への前記１つ又は複数のメモリデバイスの第１の部分の前記マッピングは、前記仮想化コントローラからインディケーションを受信した後に前記ホストドライバにより行われる、請求項２に記載の装置。
【請求項４】
前記１つ又は複数のハードウェアプロセッサはさらに、前記一組の命令を実行して、
一組のゲスト空間仮想アドレスを前記第２の組の物理アドレスへマッピングすることと；
前記一組のゲスト空間仮想アドレスを前記第１の組の物理アドレスへマッピングする前記第３のマッピングテーブルを更新することと；
前記更新された第３のマッピングテーブルを前記デバイスドライバへ提供することと
を行うように構成され、
前記更新された第３のマッピングテーブルは、前記一組のゲスト空間仮想アドレスを使用して１つ又は複数のメモリ操作を行うことにより、前記デバイスドライバが前記Ｉ／Ｏインターフェースの前記配置空間へアクセスできるようにする、請求項２又は３に記載の装置。
【請求項５】
前記配置空間はタスクキューを格納し；
前記１つ又は複数のハードウェアプロセッサはさらに、前記一組の命令を実行して、
前記一組のゲスト空間仮想アドレスの第１のゲスト空間仮想アドレスにおける前記第２のハードウェアインターフェースへ送信されるべき第１のデータを前記デバイスドライバにより格納することと；
前記タスクキューにおける前記第１のゲスト空間仮想アドレスを前記デバイスドライバにより格納することと；
前記第１のゲスト空間仮想アドレス及び前記更新された第３のマッピングテーブルを使用して前記第１のハードウェアインターフェースに前記第１のデータを取り出させるために、前記デバイスドライバにより、前記更新された第３のマッピングテーブルに基づき、通知を前記第１のハードウェアインターフェースの前記配置空間内に格納することと
を行うように構成される、請求項４に記載の装置。
【請求項６】
前記配置空間はタスクキューを格納し；
前記１つ又は複数のハードウェアプロセッサはさらに、前記一組の命令を実行して、
第２のデータが第２のハードウェアインターフェースから受信されるという通知を前記第１のハードウェアインターフェースから前記デバイスドライバにより受信することと；
前記通知の受信に応答して、前記タスクキューから前記第２のデータに関連する第２のゲスト空間仮想アドレスを前記デバイスドライバにより取得することと；
前記第２のゲスト空間仮想アドレス及び前記第３のマッピングテーブルを使用して前記第２のデータを前記デバイスドライバにより取り出すことと
を行うように構成される、請求項４又は５に記載の装置。
【請求項７】
前記デバイスドライバはVirtI/Oフロントエンドドライバである、請求項１乃至６のいずれか一項に記載の装置。
【請求項８】
前記仮想化コントローラはＱＥＭＵである、請求項３乃至７のいずれか一項に記載の装置。
【請求項９】
前記タスクキューはＶＲＩＮＧテーブル又はVirtqueueの少なくとも１つを含む、請求項５に記載の装置。
【請求項１０】
仮想マシンの入出力（Ｉ／Ｏ）インターフェースを操作する方法であって、
一組のホスト空間仮想アドレスを前記メモリデバイスの第１の部分に関連する第１の組の物理アドレスへマッピングする第１のマッピングテーブルを取得することと；
前記メモリデバイスの第２の部分に関連する第２組の物理アドレスを前記一組のホスト空間仮想アドレスへマッピングする第２のマッピングテーブルを取得することであって、前記メモリデバイスの前記第２の部分は仮想マシンによりアクセス可能である、取得することと；
前記第２の組の物理アドレスを前記第１の組の物理アドレスへマッピングする第３のマッピングテーブルを生成することと；
前記第３のマッピングテーブルを前記仮想マシンで動作するデバイスドライバへ提供することと、を含む方法。
【請求項１１】
メモリデバイスの前記第１の部分をＩ／Ｏインターフェースの配置空間へマッピングすることをさらに含み、
前記第３のマッピングテーブルは前記デバイスドライバが前記Ｉ／Ｏインターフェースの前記配置空間へアクセスできるようにする、請求項１０に記載の方法。
【請求項１２】
一組のホスト空間仮想アドレスの前記第１の組の物理アドレスへの前記マッピングは仮想化コントローラにより行われ；
前記Ｉ／Ｏインターフェースの配置空間へのメモリデバイスの第１の部分の前記マッピングは前記仮想化コントローラからインディケーションを受信した後にホストドライバにより行われる、請求項１１に記載の方法。
【請求項１３】
一組のゲスト空間仮想アドレスを前記第２の組の物理アドレスへマッピングすることと；
前記一組のゲスト空間仮想アドレスを前記第１の組の物理アドレスへマッピングする前記第３のマッピングテーブルを更新することと；
前記更新された第３のマッピングテーブルを前記デバイスドライバへ提供することとをさらに含み、
前記更新された第３のマッピングテーブルは、前記一組のゲスト空間仮想アドレスを使用して１つ又は複数のメモリ操作を行うことにより、前記デバイスドライバが前記Ｉ／Ｏインターフェースの前記配置空間へアクセスできるようにする、請求項１１又は１２に記載の方法。
【請求項１４】
前記配置空間はタスクキューを格納し、前記方法はさらに、
前記一組のゲスト空間仮想アドレスの第１のゲスト空間仮想アドレスにおける前記第２のハードウェアインターフェースへ送信されるべき第１のデータを前記デバイスドライバにより格納することと；
前記タスクキューにおける前記第１のゲスト空間仮想アドレスを前記デバイスドライバにより格納することと；
前記第１のゲスト空間仮想アドレス及び前記更新された第３のマッピングテーブルを使用して前記第１のハードウェアインターフェースに前記第１のデータを取り出させるために、前記デバイスドライバにより、前記更新された第３のマッピングテーブルに基づき、通知を前記第１のハードウェアインターフェースの前記配置空間内に格納することとを含む、請求項１３に記載の方法。
【請求項１５】
前記配置空間はタスクキューを格納し、前記方法はさらに、
第２のデータが第２のハードウェアインターフェースから受信されるという通知を前記第１のハードウェアインターフェースから前記デバイスドライバにより受信することと；
前記通知の受信に応答して、前記タスクキューから前記第２のデータに関連する第２のゲスト空間仮想アドレスを前記デバイスドライバにより取得することと；
前記第２のゲスト空間仮想アドレス及び前記第３のマッピングテーブルを使用して前記第２のデータを前記デバイスドライバにより取り出すこととを含む、請求項１３又は１４に記載の方法。
【請求項１６】
前記デバイスドライバはVirtI/Oフロントエンドドライバである、請求項１０乃至１５のいずれか一項に記載の方法。
【請求項１７】
命令を格納する非一時的コンピュータ可読媒体であって、前記命令は、仮想マシンの入出力（Ｉ／Ｏ）インターフェースを操作する方法を行うために、装置の１つ又は複数のプロセッサにより実行可能であり、前記方法は、
一組のホスト空間仮想アドレスを前記メモリデバイスの第１の部分に関連する第１の組の物理アドレスへマッピングする第１のマッピングテーブルを取得することと；
前記メモリデバイスの第２の部分に関連する第２の組の物理アドレスを前記一組のホスト空間仮想アドレスへマッピングする第２のマッピングテーブルを取得することであって、前記メモリデバイスの前記第２の部分は仮想マシンによりアクセス可能である、取得することと；
前記第２の組の物理アドレスを前記第１の組の物理アドレスへマッピングする第３のマッピングテーブルを生成することと；
前記第３のマッピングテーブルを前記仮想マシン内で動作するデバイスドライバへ提供することと、を含む、非一時的コンピュータ可読媒体。
【請求項１８】
前記方法はさらに、メモリデバイスの前記第１の部分をＩ／Ｏインターフェースの配置空間へマッピングすることを含み、
前記第３のマッピングテーブルは、前記デバイスドライバが前記Ｉ／Ｏインターフェースの前記配置空間へアクセスできるようにする、請求項１７に記載の非一時的コンピュータ可読媒体。
【請求項１９】
一組のホスト空間仮想アドレスの前記第１の組の物理アドレスへの前記マッピングは仮想化コントローラにより行われ；
前記Ｉ／Ｏインターフェースの配置空間へのメモリデバイスの第１の部分の前記マッピングは、前記仮想化コントローラからインディケーションを受信した後にホストドライバにより行われる、請求項１８に記載の非一時的コンピュータ可読媒体。
【請求項２０】
一組の命令をさらに含み、前記一組の命令は、前記装置の前記１つ又は複数のプロセッサにより、前記装置にさらに：
一組のゲスト空間仮想アドレスを前記第２の組の物理アドレスへマッピングすることと；
前記一組のゲスト空間仮想アドレスを前記第１の組の物理アドレスへマッピングする前記第３のマッピングテーブルを更新することと；
前記更新された第３のマッピングテーブルを前記デバイスドライバへ提供することと
を行わせるように、実行可能であり、
前記更新された第３のマッピングテーブルは、前記一組のゲスト空間仮想アドレスを使用して１つ又は複数のメモリ操作を行うことにより、前記デバイスドライバが前記Ｉ／Ｏインターフェースの前記配置空間へアクセスできるようにする、請求項１８又は１９に記載の非一時的コンピュータ可読媒体。
【請求項２１】
前記配置空間はタスクキューを格納し、前記方法はさらに、
前記一組のゲスト空間仮想アドレスの第１のゲスト空間仮想アドレスにおける前記第２のハードウェアインターフェースへ送信されるべき第１のデータを前記デバイスドライバにより格納することと；
前記タスクキューにおける前記第１のゲスト空間仮想アドレスを前記デバイスドライバにより格納することと；
前記第１のゲスト空間仮想アドレス及び前記更新された第３のマッピングテーブルを使用して前記第１のハードウェアインターフェースに前記第１のデータを取り出させるために、前記デバイスドライバにより、前記更新された第３のマッピングテーブルに基づき、通知を前記第１のハードウェアインターフェースの前記配置空間内に格納することとを含む、請求項２０に記載の非一時的コンピュータ可読媒体。
【請求項２２】
前記配置空間はタスクキューを格納し、前記方法はさらに、
第２のデータが第２のハードウェアインターフェースから受信されるという通知を前記第１のハードウェアインターフェースから前記デバイスドライバにより受信することと；
前記通知の受信に応答して、前記タスクキューから前記第２のデータに関連する第２のゲスト空間仮想アドレスを前記デバイスドライバにより取得することと；
前記第２のゲスト空間仮想アドレス及び前記第３のマッピングテーブルを使用して前記第２のデータを前記デバイスドライバにより取り出すこととを含む、請求項２０又は２１に記載の非一時的コンピュータ可読媒体。
【請求項２３】
前記デバイスドライバはVirtI/Oフロントエンドドライバである、請求項１７乃至２２のいずれか一項に記載の非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
技術分野
[001]  本開示は、一般的にはコンピュータアーキテクチャの分野に関し、より具体的には仮想化のための方法及び装置に関する。
【背景技術】
【０００２】
背景
[002]  仮想化は、複数のソフトウェアアプリケーション間でシステム資源を論理的に分割する方法を一般的には指す。仮想環境では、１つ又は複数の仮想マシンが生成される。仮想マシンは、コンピュータシステムエミュレータのように動作し得、一組のソフトウェア命令を実行し得る。通常、仮想マシンは、ゲストオペレーティングシステムを含むソフトウェアスタックと、オペレーティングシステムの上で走る１つ又は複数のゲストソフトウェアアプリケーションとを操作する。ゲストオペレーティングシステムは、一組の物理資源へアクセスするために、ハイパーバイザにおいてホストされるバックエンドドライバと通信し得るソフトウェアフロントエンドドライバを提供する。ハイパーバイザはまた、例えばシステム資源へのアクセス権を管理することにより物理資源のアクセスを規制し得、アクセス要求及び要求資源などを、仮想マシンと、要求資源などを提供するシステムとの間で伝達する。
【発明の概要】
【課題を解決するための手段】
【０００３】
概要
[003]  本開示の実施形態は、仮想マシンの入出力（Ｉ／Ｏ）インターフェースを操作する装置を提供する、本装置は、一組の命令を格納する１つ又は複数のメモリデバイスと、１つ又は複数のハードウェアプロセッサとを含む。１つ又は複数のハードウェアプロセッサは、一組の命令を実行して、１つ又は複数のメモリデバイスの第１の部分をＩ／Ｏインターフェースの配置空間へマッピングすることと；一組のホスト空間仮想アドレスを１つ又は複数のメモリデバイスの第１の部分に関連する第１の組の物理アドレスへマッピングする第１のマッピングテーブルを取得することと；１つ又は複数のメモリデバイスの第２の部分に関連する第２の組の物理アドレスを一組のホスト空間仮想アドレスへマッピングする第２のマッピングテーブルを取得することであって、１つ又は複数のメモリデバイスの第２の部分は仮想マシンによりアクセス可能である、ことと；第２の組の物理アドレスを第１の組の物理アドレスへマッピングする第３のマッピングテーブルを生成することと；第３のマッピングテーブルを仮想マシンで動作するデバイスドライバへ提供することと、を行うように構成され、第３のマッピングテーブルはデバイスドライバがＩ／Ｏインターフェースの配置空間へアクセスできるようにする。
【０００４】
[004]  本開示の実施形態はまた、仮想マシンの入出力（Ｉ／Ｏ）インターフェースを操作する方法を提供する。本方法は、メモリデバイスの第１の部分をＩ／Ｏインターフェースの配置空間へマッピングすること；一組のホスト空間仮想アドレスをメモリデバイスの第１の部分に関連する第１の組の物理アドレスへマッピングする第１のマッピングテーブルを取得すること；メモリデバイスの第２の部分に関連する第２の組の物理アドレスを一組のホスト空間仮想アドレスへマッピングする第２のマッピングテーブルを取得することであって、メモリデバイスの第２の部分は仮想マシンによりアクセス可能である、取得すること；第２の組の物理アドレスを第１の組の物理アドレスへマッピングする第３のマッピングテーブルを生成すること；及び第３のマッピングテーブルを仮想マシンで動作するデバイスドライバへ提供することであって、第３のマッピングテーブルはデバイスドライバがＩ／Ｏインターフェースの配置空間へアクセスできるようにする、提供することを含む。
【０００５】
[005]  本開示の実施形態はまた、命令を格納する非一時的コンピュータ可読媒体を提供する。当該命令は、仮想マシンの入出力（Ｉ／Ｏ）インターフェースを操作する方法を行うために装置の１つ又は複数のプロセッサにより実行可能であり、当該方法は、メモリデバイスの第１の部分をＩ／Ｏインターフェースの配置空間へマッピングすること；一組のホスト空間仮想アドレスをメモリデバイスの第１の部分に関連する第１の組の物理アドレスへマッピングする第１のマッピングテーブルを取得すること；メモリデバイスの第２の部分に関連する第２の組の物理アドレスを一組のホスト空間仮想アドレスへマッピングする第２のマッピングテーブルを取得することであって、メモリデバイスの第２の部分は仮想マシンによりアクセス可能である、取得すること；第２の組の物理アドレスを第１の組の物理アドレスへマッピングする第３のマッピングテーブルを生成すること；及び第３のマッピングテーブルを仮想マシンで動作するデバイスドライバへ提供することであって、第３のマッピングテーブルはデバイスドライバがＩ／Ｏインターフェースの配置空間へアクセスできるようにする、提供することを含む。
【０００６】
[006]  開示された実施形態の追加の目的及び利点は、以下の明細書に部分的に記載され、この明細書から部分的に明らかになる、又は実施形態の実行により学習され得る。開示実施形態の目的と利点は添付の特許請求の範囲に記載される要素及びその組み合わせにより実現され達成され得る。
【０００７】
[007]  これまで述べた概要と以下の詳細説明との両方は、請求されるように、例示的且つ説明目的のためだけものであるということと、開示実施形態に限定されるものではないということとを理解すべきである。
【図面の簡単な説明】
【０００８】
図面の簡単な説明
【図１Ａ】[008]本開示の実施形態が使用され得る例示的仮想環境を示す線図である。
【図１Ｂ】[008]本開示の実施形態が使用され得る例示的仮想環境を示す線図である。
【図２Ａ】[009]本開示の実施形態と整合するハイパーバイザ及びＩ／Ｏインターフェースの例示的部品の例示的部品を示す線図である。
【図２Ｂ】[009]本開示の実施形態と整合するハイパーバイザ及びＩ／Ｏインターフェースの例示的部品の例示的部品を示す線図である。
【図２Ｃ】[009]本開示の実施形態と整合するハイパーバイザ及びＩ／Ｏインターフェースの例示的部品の例示的部品を示す線図である。
【図３】[010]本開示の実施形態と整合する仮想マシンにハードウェアデバイスへのアクセスを提供する例示的方法を示すフロー図である。
【図４】[011]本開示の実施形態と整合する仮想マシンによりハードウェアデバイスを操作する例示的方法を示すフロー図である。
【図５】[012]本開示の実施形態と整合する仮想マシンによりハードウェアデバイスを操作する別の例示的方法を示すフロー図である。
【図６】[013]本明細書で説明される実施形態がその上で実施され得る例示的コンピュータシステムを示すブロック図である。
【発明を実施するための形態】
【０００９】
発明の詳細な説明
[014]  添付図面に示される例示的実施形態を次に詳細に参照する。以下の説明は、特記しない限り、様々な図面内の同じ参照符号が同じ又は同様な要素を表す添付図面を参照する。例示的実施形態の以下の説明において記載される実施形態は本発明によるすべての実施形態を表すとは限らない。その代りに、これらは、添付の特許請求の範囲に記載される本発明に関係する態様に整合する装置及び方法の一例に過ぎない。
【００１０】
[015]  本開示の実施形態は、１つ又は複数の仮想コンピュータ環境を提供する装置を提供する。本装置は、一組の機能を行うことができるハードウェアシステムと通信可能に結合される。ハードウェアシステムは、一組のハードウェアレジスタとメモリデバイスとを含む配置空間（configuration space）であって、一組の機能の性能を構成するための一組の構成データを格納する配置空間を含む。本装置は、メモリデバイスのホスト空間に関連付けられ、仮想マシンへアクセス可能な一組の仮想記憶アドレスを、ホスト空間を介し配置空間へマッピングする、マッピングテーブルを格納する。マッピングテーブルは、１つ又は複数のメモリ読み取り／書き込み操作を一組の仮想記憶アドレスに対し行うことにより、仮想マシン上で動作するソフトウェアアプリケーションがハードウェアシステムへ直接アクセスできるようにする。
【００１１】
[016]  ハードウェアシステムへの直接アクセスを提供することにより、本開示の実施形態は、仮想マシン上で動作するソフトウェアアプリケーションがハードウェアシステムにより提供される資源へより効率的にアクセスできるようにする。この結果、ソフトウェアアプリケーションが動作する仮想環境の性能だけでなく、ソフトウェアアプリケーションの性能も改善し得る。さらに、仮想マシンは、ハードウェアシステムへアクセスすることができる汎用及び標準デバイスドライバを操作し得る。この結果、仮想環境の配備及び維持もまたより効率的に行われ得る。
【００１２】
[017]  本開示の実施形態が使用され得る仮想環境１００を示す図１Ａを次に参照する。図１Ａに示すように、仮想環境１００はホストマシン１０２及びホストマシン１０４を含む。ホストマシン１０２はネットワーク１０３を介しユーザデバイス１０６ａ及びユーザデバイス１０６ｂと通信可能に結合され得、一方、ホストマシン１０４もまたネットワーク１０３を介しユーザデバイス１０８ａ、１０８ｂと通信可能に結合され得る。ホストマシン１０２、１０４のそれぞれは、サーバであり得、仮想コンピュータ資源及びネットワーク資源をユーザデバイス１０６ａ、１０６ｂ、１０８ａ、１０８ｂへ提供し得る。例えば、ホストマシン１０２、１０４は、ユーザデバイス１０６ａ、１０８ａ間のチャットメッセージングセッションを提供するチャットメッセージングソフトウェアアプリケーションを操作する。ホストマシン１０２、１０４はまた、ユーザデバイス１０６ｂ、１０８ｂ間のボイスオーバーＩＰ（ＶｏＩＰ：Voice-over-IP）セッションを提供するＶｏＩＰソフトウェアアプリケーションを操作する。ユーザは、ユーザデバイスを介しチャットメッセージングソフトウェアアプリケーション及びＶｏＩＰソフトウェアアプリケーションへアクセスするためにホストマシン１０２、１０４にログインし得る。ホストマシン１０２、１０４は、例えばユーザデバイス１０６ａ、１０８ａがＶｏＩＰソフトウェアアプリケーションではなくチャットメッセージングソフトウェアアプリケーションへアクセスすることを許容することにより仮想環境を提供し得る。さらに、ホストマシン１０２、１０４はまた、ユーザデバイス１０６ｂ、１０８ｂがチャットメッセージングソフトウェアアプリケーションではなくＶｏＩＰソフトウェアアプリケーションへアクセスすることを許可する。
【００１３】
[018]  図１Ａに示すように、ホストマシン１０２、１０４はそれぞれさらに、ネットワークインターフェース１１０、ネットワークインターフェース１１２を含む。ネットワークインターフェース１１０、１１２は、伝送コントロールプロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ：Transmission Control Protocol/Internet Protocol）、リアルタイムトランスポートプロトコル（ＲＴＰ：Real-Time Transport Protocol）、ＲＴＰコントロールプロトコル（ＲＴＣＰ：RTP Control Protocol）などの所定ネットワークプロトコルに従ってチャットメッセージングセッション及びＶｏＩＰセッションを支援するために、パケット化されたデータ送信をネットワーク１１４上で提供するように構成され得る。ネットワークインターフェース１１０、１１２の両方はそれぞれＩ／Ｏ（入出力）インターフェース１１０ａ、Ｉ／Ｏインターフェース１１２ａを含む。ネットワークインターフェース１１０、１１２はＩ／Ｏインターフェースを介しホストマシン１０２、１０４それぞれの他のコンポーネントとインターフェースし得る。Ｉ／Ｏインターフェースはパラレルインターフェース（例えばペリフェラルコンポーネントインターコネクト（ＰＣＩ：Peripheral Component Interconnect））、シリアルインターフェース（例えばペリフェラルコンポーネントインターコネクトエクスプレス（ＰＣＩｅ：Peripheral Component Interconnect Express））などに基づき得る。例示的例として、ネットワークインターフェース１１０、１１２は、ＰＣＩｅインターフェースを介しホストマシン１０２、１０４へ接続されるＰＣＩｅネットワークインターフェースカード（ＮＩＣ：network interface card）であり得る。
【００１４】
[019]  Ｉ／Ｏインターフェース１１０ａ（及びネットワークインターフェース１１０により提供されるネットワーク資源）へアクセスするための仮想環境をユーザデバイス１０６ａ、１０６ｂへ提供するために、ホストマシン１０２は、仮想マシン１２０、仮想マシン１２２、及び仮想マシン１２０、１２２によるＩ／Ｏインターフェース１１０ａのアクセスを規制するハイパーバイザ１２４をホストする。同様に、Ｉ／Ｏインターフェース１１２ａ（及びネットワークインターフェース１１２により提供される物理資源）へアクセスするための仮想環境をユーザデバイス１０８ａ、１０８ｂへ提供するために、ホストマシン１０４もまた、仮想マシン１４０、仮想マシン１４２、及び仮想マシン１４０、１４２によるＩ／Ｏインターフェース１１２ａへのアクセスを規制するハイパーバイザ１４４をホストする。
【００１５】
[020]  仮想マシンのそれぞれは、ユーザデバイスにＩ／Ｏインターフェースへのアクセスを提供するようにゲストソフトウェアスタックを操作する。例えば、仮想マシン１２０はゲストソフトウェアスタック１２６を操作し得、仮想マシン１２２はゲストソフトウェアスタック１２８を操作し得、仮想マシン１４０はゲストソフトウェアスタック１４６を操作し得、一方、仮想マシン１４２はゲストソフトウェアスタック１４８を操作し得る。ゲストソフトウェアスタックのそれぞれは、Ｉ／Ｏインターフェース及びネットワークインターフェースへアクセスするためにゲストオペレーティングシステムの上で動作する１つ又は複数のソフトウェアアプリケーションだけでなくゲストオペレーティングシステムも含み得る。例えば、前述のチャットメッセージングソフトウェアアプリケーションはゲストソフトウェアスタック１２６、１４６に含まれ得、一方、前述のＶｏＩＰソフトウェアアプリケーションはゲストソフトウェアスタック１２８、１４８に含まれ得る。
【００１６】
[021]  ゲストソフトウェアスタック１２６、１２８、１４６、１４８のそれぞれもまた、Ｉ／Ｏインターフェース１１０ａ又は１１２ａへアクセスすることができるデバイスドライバを含む。デバイスドライバは、ゲストオペレーティングシステムの標準ビルドの一部である汎用ドライバであり得る。デバイスドライバは例えばVirtI/Oフロントエンドドライバであり得る。ゲストソフトウェアスタックに含まれるゲストオペレーティングシステムは例えばMicrosoft（登録商標）  Windows（登録商標）、Ubuntu（登録商標）、Red Hat（登録商標）  Enterprise Linux（登録商標）（RHEL）などであり得る。以下に論述されるように、ハイパーバイザ（例えばハイパーバイザ１２４、ハイパーバイザ１４４など）は、タイプ１又はタイプ２ハイパーバイザであり得、デバイスドライバによるＩ／Ｏインターフェースのアクセスを規制し得、ひいてはデバイスドライバを含むゲストソフトウェアスタックによるＩ／Ｏインターフェースのアクセスを規制し得る。例えば、ハイパーバイザ１２４は、チャットメッセージングアプリケーション（仮想マシン１２０で動作する）とＶｏＩＰアプリケーション（仮想マシン１２２で動作する）のどちらがネットワーク１１４上でデータを送信するためにＩ／Ｏインターフェース１１０ａ（及びネットワークインターフェース１１０）を使用し得るかを制御し得る。同様に、ハイパーバイザ１４４もまたネットワーク１１４上でデータを送信するためにチャットメッセージングアプリケーション（仮想マシン１４０で動作する）とＶｏＩＰアプリケーション（仮想マシン１４２で動作する）のどちらがＩ／Ｏインターフェース１１２ａ（及びネットワークインターフェース１１２）を使用し得るかを制御し得る。
【００１７】
[022]  ホストマシン１０２、１０４のそれぞれはメモリデバイス１５０、メモリデバイス１６０をそれぞれ含む。前述の仮想マシン、ゲストソフトウェアスタック及びハイパーバイザは、ユーザデバイスのチャットメッセージングセッション及びＶｏＩＰセッションだけでなく前述の仮想環境も提供するためにメモリデバイス１５０、１６０に格納され１つ又は複数のハードウェアプロセッサ（図１Ａに図示せず）により実行されるソフトウェアコードであり得る。メモリデバイス１５０、１６０のそれぞれはまた、ホストマシン１０２、１０４上で動作する際に仮想マシン、ゲストソフトウェアスタック、及びハイパーバイザにより並びにＩ／Ｏインターフェースにより使用されるメモリ空間を提供する。
【００１８】
[023]  いくつかの実施形態では、メモリデバイス１５０、１６０のそれぞれは、ホスト空間として表される領域と、ゲスト空間として表される１つ又は複数の領域とを含み得る。ホスト空間は、ハイパーバイザ及びＩ／Ｏインターフェースによりアクセス可能であり、一方、ゲスト空間は、仮想マシン及びゲストソフトウェアスタックによりアクセス可能である。各仮想マシンにはゲスト空間が割り当てられ得、様々な仮想マシン上で走るソフトウェアアプリケーション同士は互いに絶縁される。例えば、図１Ｂを参照すると、メモリデバイス１５０はゲスト空間１５２ａ、ゲスト空間１５２ｂ及びホスト空間１５４を含み得る。ゲスト空間１５２ａは仮想マシン１２０（及びゲストソフトウェアスタック１２６）へ割り当てられ得、ゲスト空間１５２ｂは仮想マシン１２２（及びゲストソフトウェアスタック１２８）へ割り当てられ得、一方、ホスト空間１５４はハイパーバイザ１２４及びＩ／Ｏインターフェース１１０ａへ割り当てられ得る。図１Ｂに示されないが、メモリデバイス１６０もまた、仮想マシン１４０、１４８へ割り当てられる一組のゲスト空間並びにハイパーバイザ１４４及びＩ／Ｏインターフェース１１２ａへ割り当てられるホスト空間を含み得るということが理解される。
【００１９】
[024]  ホスト空間１５４はさらにＩ／Ｏ空間１５４ｂを含む。Ｉ／Ｏ空間１５４ｂはメモリマップＩ／Ｏ方式の一部としてＩ／Ｏインターフェース１１０ａの一組のハードウェアレジスタと結合され得る。メモリマップＩ／Ｏ方式により、Ｉ／Ｏインターフェース（例えばＩ／Ｏインターフェース１１０ａ）の一組のハードウェアレジスタ及びメモリデバイスへ物理的に接続されるデータバスもまたホストマシンのメモリデバイス（例えばホストマシン１０２のメモリデバイス１５０）へ物理的に接続され得る。このような配置により、Ｉ／Ｏインターフェース１１０ａのハードウェアレジスタ及びメモリデバイスは、Ｉ／Ｏ空間１５４ｂに対するメモリ書き込み／読み取り動作によりアクセスされ得る。Ｉ／Ｏインターフェース１１０ａのハードウェアレジスタは、例えばＩ／Ｏインターフェースの識別子、アクセス制御情報、Ｉ／Ｏインターフェースへアクセスするための一組のメモリアドレスなどを含む構成情報を格納し得る。
【００２０】
[025]  Ｉ／Ｏインターフェース１１０ａがＰＣＩｅインターフェースである場合、構成レジスタは例えばデバイス識別レジスタ（ＤＩＲ：Device Identification Register）、ベースアドレスレジスタ（ＢＡＲ：Base Address Register）、通知レジスタなどを含み得る。ＢＡＲレジスタは、例えばＩ／Ｏ空間１５４ｂを介しアクセス可能なＩ／Ｏインターフェース１１０ａのメモリデバイスに関連する一組の物理アドレスを格納し得る。通知レジスタは、Ｉ／Ｏインターフェース１１０ａにおいて操作を開始するために例えばデバイスドライバにより提供される通知を格納し得る。以下に詳細に論述されるように、デバイスドライバは、構成情報をハードウェアレジスタへ格納し、他の操作情報をＩ／Ｏインターフェース１１０ａのメモリデバイスへ格納し、及びＩ／Ｏインターフェース１１０ａを制御して１つ又は複数の操作を行うために、メモリ書き込み／読み出し操作をＩ／Ｏ空間１５４ｂに対し行い得る。
【００２１】
[026]  いくつかの実施形態では、ハイパーバイザは、ゲスト空間内で動作するデバイスドライバが、Ｉ／Ｏインターフェースへ割り当てられた配置空間へ直接アクセスすることと、Ｉ／Ｏインターフェースを構成して操作を行うこととを許容し得る。ハイパーバイザは、デバイスドライバによりアクセス可能であるゲスト空間内の一組の仮想アドレスを配置空間内の一組の物理アドレスへマッピングするメモリマッピングテーブルを生成し格納し得る。このマッピングに基づき、デバイスドライバは、Ｉ／Ｏインターフェースを制御及び／又は構成して操作を行うために、メモリ読み取り／書き込み操作をゲスト空間仮想アドレスに対して行うことによりデータを配置空間に格納し得る。
【００２２】
[027]  例示として、仮想マシン１２０内で動作するデバイスドライバは、ゲストソフトウェアスタック１２６のチャットメッセージングアプリケーションからパケット送信要求を受信し得る。デバイスドライバは、配置空間内の位置をメモリマッピングテーブルに基づき識別し、パケット送信要求に関係するデータを配置空間内に書き込み得る。データは、例えばパケット送信の準備をするためのＩ／Ｏインターフェース１１０ａへの通知とパケット送信に関係する情報（例えば、データが送信のためのものかネットワークから受信されたかに関わらず、実際のペイロードデータ、又はペイロードデータが格納される一組のメモリアドレス）とを含み得る。Ｉ／Ｏインターフェース１１０ａは、配置空間を監視し得、通知を検知すると、ペイロードデータを取得し、次にネットワーク１１４上でパケット送信を行うためにペイロードデータをネットワークインターフェース１１０へ提供し得る。ネットワークインターフェース１１０がパケット送信を完了した後、Ｉ／Ｏインターフェース１１０ａはまた、パケット送信の完了に関してハイパーバイザ１２４に（例えば割り込みをかけることにより）通知し得る。ハイパーバイザ１２４は、デバイスドライバが次のパケット送信に対処し得るように、割り込みを仮想マシン１２０のデバイスドライバへルーティングし得る。
【００２３】
[028]  次に、本開示の実施形態と整合する図１Ａのハイパーバイザ１２４及びＩ／Ｏインターフェース１１０ａの例示的コンポーネントを示す図２Ａを参照する。図２Ａに示すように、ハイパーバイザ１２４は、ホストドライバ２０２、仮想マシン生成モジュール２０４、仮想化コントローラ２０６及びメモリ翻訳モジュール２０８を含む。さらに、Ｉ／Ｏインターフェース１１０ａは、ゲストソフトウェアスタック１２６内で動作するデバイスドライバ１２６ａ（例えばVirtI/Oフロントエンドドライバ）とインターフェースする仮想化モジュール２１０を含む。図２Ａには示さないが、図１Ａのハイパーバイザ１２４は、ハイパーバイザ１２４と同様なコンポーネントを含み得、Ｉ／Ｏインターフェース１１２ａは、Ｉ／Ｏインターフェース１１０ａと同様なコンポーネントを含み得るということが理解される。
【００２４】
[029]  ホストドライバ２０２は、例えばホスト空間１５４の一部分をＩ／Ｏ空間１５４ｂに割り振ることにより資源割り振りに対処する。ホストドライバ２０２は、Ｉ／Ｏインターフェース１１２ａのハードウェアレジスタ及びメモリデバイスへマッピングされるメモリデバイス１５０内の一組の物理アドレスを取得するために、ソフトウェアルーチン（例えばｍｍａｐ）を実行又は取り込み、メモリマップＩ／Ｏ操作を行い得る。次に、ホストドライバ２０２は、Ｉ／Ｏ空間１５４ｂをホスト空間１５４内に生成し、一組のＩ／Ｏ空間物理アドレスを生成し得る。
【００２５】
[030]  仮想マシン生成モジュール２０４は、例えばメモリデバイス１５０の一部分をゲスト空間（例えばゲスト空間１５２ａ）へ割り振ることと、割り振られた部分を、生成された仮想マシン（例えば仮想マシン１２０）へ提供することとを含み得る、仮想マシン生成に対処し、次に、仮想マシンは、割り振られたメモリ空間を使用して関連ゲストソフトウェアスタックを格納及び実行し得る。仮想マシン生成モジュール２０４はまた、ゲスト空間物理アドレスへマッピングされる一組の仮想アドレスを生成し、仮想マシンから要求が受信されると、ゲスト空間仮想アドレスを仮想マシンへ提供する。仮想マシン生成モジュール２０４はまた、仮想化コントローラ２０６から受信される別の一組の仮想記憶アドレスと仮想マシン１２０へアクセス可能な一組のゲスト空間物理アドレスとの間のマッピングを生成する。マッピングは、仮想化コントローラ２０６が読み取り／書き込みメモリ操作をゲスト空間に対し行うことを可能にし、したがって、仮想化コントローラ２０６は、ゲスト空間内のゲストソフトウェアスタック１２６により行われるメモリ操作を制御及び／又は監視し得る。
【００２６】
[031]  仮想化コントローラ２０６は、仮想マシンのデバイスドライバがＩ／Ｏインターフェースへ直接アクセスすることを許容すべく、一組のゲスト空間物理アドレスと一組のＩ／Ｏ空間物理アドレスとの間のマッピングを生成するために、ホストドライバ２０２の操作と仮想マシン生成モジュール２０４の操作とを連携させ得る。例示として、図２Ａに示すように、仮想化コントローラ２０６は、通信２２０を介し、ホスト空間１５４の一部分をＩ／Ｏ空間１５４ｂに割り振るために、ホストドライバ２０２を呼び出し得る。次に、ホストドライバ２０２は、通信２２２を介しデータをＩ／Ｏインターフェース１１０ａと交換し、Ｉ／Ｏ空間１５４ｂをＩ／Ｏインターフェース１１０ａの配置空間へマッピングし得る。例えば、ホストドライバ２０２は、通信２２２の一部として、Ｉ／Ｏインターフェース１１０ａの構成レジスタのアドレス指定に関する情報と、Ｉ／Ｏインターフェース１１０ａのメモリデバイスの物理アドレスとを受信し得る。Ｉ／Ｏ空間１５４ｂの物理アドレスとＩ／Ｏインターフェース１１０ａの物理メモリアドレス及び構成レジスタとの間のマッピングを生成した後、ホストドライバ２０２はまた、Ｉ／Ｏインターフェース１１０ａもまたＩ／Ｏ空間１５４ｂへアクセスし得るように、マッピング情報を、通信２２２を介しＩ／Ｏインターフェース１１０ａへ送信し得る。次に、ホストドライバ２０２は、Ｉ／Ｏインターフェース１１０ａへアクセスするために使用され得る一組のＩ／Ｏ空間物理アドレスを、通信２２４を介し仮想化コントローラ２０６へ戻し得る。次に、仮想化コントローラ２０６は、ホストドライバ２０２から受信される一組のＩ／Ｏ空間物理アドレスへマッピングされる（仮想化コントローラ２０６によりアクセス可能な）一組の仮想アドレスを生成する。次に、仮想化コントローラ２０６は、仮想マシン（例えば仮想マシン１２０）を生成するために、通信２２６を介し仮想マシン生成モジュール２０４を呼び出す。次に、仮想マシン生成モジュール２０４は、ゲスト空間１５２ａを割り振り、（ゲスト空間１５２ａに関連する）一組のゲスト空間物理アドレスと、仮想化コントローラ２０６によりアクセス可能な一組の仮想アドレスとの間の別のマッピングを生成する。
【００２７】
[032]  ホストドライバ２０２、仮想マシン生成モジュール２０４、及び仮想化コントローラ２０６間の操作に基づき、マッピングが、一組のゲスト空間仮想アドレスと一組のＩ／Ｏ空間物理アドレスとの間で生成され得る。マッピングは、仮想マシン（及びその中で動作するデバイスドライバ）がＩ／Ｏインターフェースの構成レジスタへ直接アクセスすることを可能にする。マッピングの例が図２Ｂに示される。図２Ｂに示すように、ゲスト空間仮想アドレス２３２は、仮想マシン生成モジュール２０４が仮想マシン１２０を生成した後に、ゲスト空間物理メモリアドレス２３４（ゲスト空間１５２ａ内の）へマッピングされる。ゲスト空間物理メモリアドレス２３４もまた、仮想化コントローラ２０６によりアクセス可能なホスト空間仮想アドレス２３６へマッピングされる。ホスト空間仮想アドレス２３６もまた、ホストドライバ２０２により提供されるＩ／Ｏ空間物理アドレス２３８へマッピングされる。これらのマッピング（マッピングテーブルの形式のものであり得る）に基づき、ゲスト空間仮想アドレス２３２とＩ／Ｏ空間物理アドレス２３８との間の直接マッピング２４０が形成され得る。メモリ翻訳モジュール２０８は、例えばゲスト空間仮想アドレス２３２をＩ／Ｏ空間物理アドレス２３８へマッピングするマッピングテーブルを格納することにより、直接マッピング２４０を格納し得る。
【００２８】
[033]  いくつかの実施形態では、マッピングテーブルは、例えば拡張ページテーブル（ＥＰＴ：Extended Page Table）の形式のものであり得る。仮想化コントローラ２０６は、クイックエミュレータ（ＱＥＭＵ：Quick Emulator）のコンポーネントを含み得、一方、仮想マシン生成モジュール２０４もまた、カーネルベース仮想マシン（ＫＶＭ：kernel-based virtual machine）のコンポーネントを含み得、ＥＰＴへのアクセスを与え得る。ＫＶＭにより、ＥＰＴはＶＭ＿Ｅｘｉｔ事象に基づき更新され得る。例えば、仮想マシン１２０が生成され、デバイスドライバ１２６ａが、Ｉ／Ｏ空間物理アドレスへ未だ割り振られていない又は未だマッピングされていないかのいずれかのゲスト空間仮想記憶アドレスへアクセスしようとした後、ＥＰＴ故障が生じ得る。ＥＰＴ故障は、仮想マシン１２０のイグジット事象（例えばＶＭ＿ｅｘｉｔ事象）に繋がり得、イグジット事象はＫＶＭに、ゲスト空間メモリ仮想アドレス（デバイスドライバによりアクセスされている）とＩ／Ｏ物理的空間アドレスへマッピングされたゲスト空間物理アドレスとの間のマッピングを生成させ得る。マッピングの生成は、ゲスト空間仮想アドレスとＩ／Ｏ空間物理アドレスとの間の新しい直接マッピングを生じ得る。次に、ＫＶＭは、新しい直接マッピングを含むようにＥＰＴを更新し得る。仮想マシン１２０を再起動した後、デバイスドライバ１２６ａは、直接マッピングを取得するためにＥＰＴへアクセスし、Ｉ／Ｏ空間へマッピングされるゲスト空間仮想アドレスに対しメモリ読み取り／書き込み動作を行うことにより、Ｉ／Ｏ空間へアクセスし得る。
【００２９】
[034]  図２Ａはメモリ翻訳モジュール２０８をハイパーバイザ１２４の一部として描いているが、メモリ翻訳モジュール２０８がハイパーバイザ１２４とは別のコンポーネントであり得るということが理解される。さらに、メモリ翻訳モジュール２０８はまた、入出力メモリ管理ユニット（ＩＯＭＭＵ：input-output memory management unit）によりアクセスされ得る。
【００３０】
[035]  図２Ａに戻って参照すると、デバイスドライバ１２６ａは、通信２４２を介しメモリ翻訳モジュール２０８から直接マッピングを取得し得る。直接マッピングに基づき、デバイスドライバ１２６ａは、一組のＩ／Ｏ空間物理アドレスへマッピングされる一組のゲスト空間仮想アドレスを取得し得る。デバイスドライバ１２６ａは、Ｉ／Ｏ空間１５４ｂにおいて一組の構成データ２４４を格納するために、メモリ書き込み操作を一組のゲスト空間仮想アドレスに対し行い得る。構成データ２４４もまた仮想化モジュール２１０により受信されることになる。構成データに基づき、仮想化モジュール２１０は、１つ又は複数の操作（例えばデータをネットワーク１１４へ送信するようにネットワークインターフェース１１０を制御する操作、ネットワーク１１４から受信されるデータを提供するようにネットワークインターフェース１１０を制御する操作など）を行うようにネットワークインターフェース１１０を制御し得る。
【００３１】
[036]  上に説明したようなＩ／Ｏインターフェース１１０ａを含むネットワークインターフェース１１０の例示的コンポーネントを示す図２Ｃを次に参照する。図２Ｃに示すように、Ｉ／Ｏインターフェース１１０ａは、ハードウェアレジスタ２５０、メモリデバイス２６０、及びバックエンドモジュール２７０を含む仮想化モジュール２１０を含む。メモリデバイス２６０はさらにタスクキュー２８０を格納する。Ｉ／Ｏインターフェース１１０ａはさらに、バックエンドモジュール２７０とインターフェースするＩ／Ｏインターフェースコア論理２９０を含む。バックエンドモジュール２７０はまた、ネットワークインターフェースコア論理２９５とインターフェースする。Ｉ／Ｏインターフェース１１０ａのこれらのコンポーネントは、他のコンポーネント（例えば集積回路の一部分）と共に使用するように設計されたパッケージ化機能ハードウェアユニット又は関連機能のうちの特定機能を行うプログラム（コンピュータ可読媒体上に格納される）の一部であり得る。これらのコンポーネントは、ゲート及びフリップフロップなどの接続論理ユニットで構成され得る、及び／又はプログラマブルゲートアレイ又はプロセッサなどのプログラム可能ユニットで構成され得る。
【００３２】
[037]  ハードウェアレジスタ２５０は、例えばＩ／Ｏインターフェース１１０ａの動作を構成するための一組の構成レジスタを含み得る。Ｉ／Ｏインターフェース１１０ａがＰＣＩｅインターフェースである場合、構成レジスタは、例えばデバイス識別レジスタ（ＤＩＲ：Device Identification Register）、ベースアドレスレジスタ（ＢＡＲ：Base Address Register）、通知レジスタなどを含み得る。タスクキュー２８０は、Ｉ／Ｏインターフェース１１０ａ（及びネットワークインターフェース１１０）により行われる一組のタスクに関係する情報を格納し得る。格納される情報は、例えば操作のタイプ（例えば、ネットワーク１１４へのデータパケットの送信のためのもの又はネットワーク１１４からのデータパケットの受信のためのものなど）、データを格納する（データがネットワーク１１４へ送信される場合）又はデータを取り出す（データがネットワーク１１４から受信される場合）ための一組のゲスト空間仮想アドレス、及び操作に関連する仮想マシン識別子を含み得る。いくつかの実施形態では、タスクキュー２８０はVirtqueue、ＶＲＩＮＧテーブルなどとして構成され得る。
【００３３】
[038]  上に論述したように、ハードウェアレジスタ２５０とタスクキュー２８０との両方は、Ｉ／Ｏ空間１５４ｂを介し仮想マシン（例えばデバイスドライバ１２６ａ）で動作するデバイスドライバによりマッピングされ、アクセス可能であり得る。デバイスドライバは、タスクキュー２８０が格納されるメモリデバイス２６０の位置へマッピングされる一組のホスト空間物理アドレスを取得するために、ＢＡＲレジスタへマッピングされるＩ／Ｏ空間１５４ｂの一部分へアクセスすることにより、ＢＡＲレジスタからメモリマッピング情報を取得し得る。次に、デバイスドライバは、ホスト空間物理アドレスを一組のゲスト空間仮想アドレスへ翻訳する要求をメモリ翻訳モジュール２０８へ提出し、次に、メモリ読み出し操作を一組のゲスト空間仮想アドレスに対し行うことにより、タスクキュー２８０へアクセスし得る。デバイスドライバはまた、ハードウェアレジスタ２５０へアクセスすべく一組のゲスト空間仮想記憶アドレスを取得するために、メモリ翻訳要求をメモリ翻訳モジュール２０８へ提出し得る。
【００３４】
[039]  バックエンドモジュール２７０は、前述のデータパケット送信又は受信タスクに対処するために、ハードウェアレジスタ２５０、タスクキュー２８０、Ｉ／Ｏインターフェースコア論理２９０、及びネットワークインターフェースコア論理２９５とインターフェースし得る。データパケット送信タスクを進めるために、デバイスドライバは、新しいデータパケット送信タスクをタスクキューに挿入することにより、タスクキュー２８０を更新し得る。タスクはまた、送信されるデータが格納される一組のゲスト空間仮想アドレスに関連付けられる。上に論述したように、ゲスト空間仮想アドレスは、Ｉ／Ｏ空間１５４ａへマッピングされ得、仮想マシン１２０で動作するデバイスドライバは、Ｉ／Ｏ空間１５４ａへマッピングされるゲスト空間仮想アドレスを使用してメモリ書き込み操作を行うことにより、データをＩ／Ｏ空間１５４ａ内に直接格納し得る。データをＩ／Ｏ空間１５４ａ内に格納した後、デバイスドライバはまた、データパケット送信タスクについてバックエンドモジュールに通知するために、ハードウェアレジスタ２５０（Ｉ／Ｏ空間１５４ａを介し）へアクセスし、通知レジスタに書き込み得る。
【００３５】
[040]  通知レジスタにおける書き込み活動を検出した後、バックエンドモジュール２７０は、タスクキュー２８０から新しいデータパケット送信タスクを取り出し、このタスクに関連する一組のゲスト空間仮想アドレスを取得し得る。バックエンドモジュール２７０は、ゲスト空間仮想アドレスを例えば一組のＩ／Ｏ空間物理アドレス（例えばＩ／Ｏ空間１５４ｂの）へ翻訳する要求を、メモリ翻訳モジュール２０８（例えばＩＯＭＭＵを介し）へ提出し得る。翻訳されたＩ／Ｏ空間物理アドレスに基づき、バックエンドモジュール２７０は、仮想マシン１２０から送信されるデータを取得するために、メモリ読み出し操作を行い得る。バックエンドモジュール２７０は、このデータを追加処理のために（例えば８ｂ／１０ｂ符号化などを行うために）Ｉ／Ｏインターフェースコア論理２９０へ提供し、次に、処理されたデータをネットワークインターフェースコア論理２９５へ提供し得る。次に、ネットワークインターフェースコア論理２９５は、処理されたデータに基づきデータパケットを生成し、このデータパケットをネットワーク１１４へリリースし得る。データパケット送信が完了したという通知をネットワークインターフェースコア論理２９５から受信した後、バックエンドモジュール２７０は、仮想マシン１２０で動作するデバイスドライバに、この完了について（例えば割り込みをかけることにより）通知し得る。通知は、仮想マシン１２０へ（例えば、割り込みに関係するデータを、仮想マシンによりアクセス可能なゲストメモリ空間へ書き込むことにより）又は仮想化コントローラ２０６へ直接送信され得、次に、仮想マシン１２０又は仮想化コントローラ２０６は、完了についてデバイスドライバに通知するために、割り込みに関係するデータをゲストメモリ空間へ書き込む。
【００３６】
[041]  他方で、データパケット受信に対処するために、バックエンドモジュール２７０は、ネットワークインターフェースコア論理２９５から受信されたデータパケットから抽出されるデータを受信し得る。バックエンドモジュール２７０は、タスクキュー２８０から、未決データパケット受信タスクがキューの最上部に存在するということと、受信されたデータパケットが当該未決データパケット受信タスクのためのものであるということとを判断し得る。バックエンドモジュール２７０はまた、タスクキュー２８０から未決データパケット受信タスクに関連する一組のゲスト空間仮想アドレスを取得し、次に、このゲスト空間仮想アドレスをＩ／Ｏ空間１５４ｂの一組のＩ／Ｏ空間物理アドレスへ翻訳する要求を、ＩＯＭＭＵへ提出し得る。バックエンドモジュール２７０はまた、追加処理のために（例えば８ｂ／１０ｂ復号化などを行うために）、受信されたパケットデータをＩ／Ｏインターフェースコア論理２９０へ提供し、次に、処理されたデータをＩ／Ｏ空間１５４ｂ内に格納するために、一組のＩ／Ｏ空間物理アドレスを使用してメモリ書き込み操作を行い得る。バックエンドモジュール２７０はまた、受信されたパケットデータについて、仮想マシン１２０で動作するデバイスドライバ（例えばデバイスドライバ１２６ａ）に（例えば割り込みをかけることにより）通知し得る。通知が受信されると、デバイスドライバは、キュー２８０の最上部における未決データパケット受信タスクからゲスト空間仮想アドレスを取得し得、受信されたパケットデータを取得するために、メモリ読み出し操作を行い得る。
【００３７】
[042]  本開示の実施形態と整合するハードウェアデバイスへの仮想マシンアクセスを提供する例示的方法３００を示す図３が次に参照される。本方法は、例えば図２Ａのゲストソフトウェアスタック１２６及び仮想化モジュール２１０と併せてハイパーバイザ１２４により行われ得る。
【００３８】
[043]  初期開始後、工程３０２において、仮想化コントローラ２０６は、ハイパーバイザ１２４によりアクセス可能なメモリデバイス１５０（例えばホスト空間１５４）の一部分を割り振り、このメモリデバイス１５０の割り振られた部分をＩ／Ｏインターフェース１１０ａのハードウェアレジスタ及びメモリデバイスとへマッピングするように、ホストドライバ２０２に指示する。仮想化コントローラ２０６から指示を受信した後、工程３０４において、ホストドライバ２０２は、Ｉ／Ｏインターフェース１１０ａへマッピングされるＩ／Ｏ空間（例えばＩ／Ｏ空間１５４ａ）を割り振り、一組のＩ／Ｏ空間物理アドレスを戻す。Ｉ／Ｏインターフェース１１０ａのハードウェアレジスタ及びメモリデバイスへマッピングされる一組の物理アドレスを受信した後、工程３０６において、仮想化コントローラ２０６は、仮想化コントローラによりアクセス可能な一組の仮想アドレスを生成し、この一組の仮想アドレスを、ホストドライバ２０２から受信される一組の物理アドレスへマッピングする。次に、工程３０８において、仮想化コントローラ２０６は、一組のホスト空間仮想アドレスを仮想マシン生成モジュール２０４へ提供し、仮想マシンを生成するように仮想マシン生成モジュール２０４に指示する。
【００３９】
[044]  工程３１０において、仮想マシン生成モジュール２０４は、メモリデバイス１５０からゲスト空間（例えばゲスト空間１５２ａ）を割り振り、一組のゲスト空間物理メモリアドレス（ゲスト空間１５２ａに関連する）と一組のホスト空間仮想アドレス（仮想化コントローラ２０６から受信され、Ｉ／Ｏ空間１５４ａへマッピングされる）との間のマッピングを生成する。工程３１２において、仮想化コントローラ２０６から受信される一組の仮想アドレスとＩ／Ｏ空間物理アドレスとの間のマッピングに基づき、仮想マシン生成モジュール２０４はまた、一組のゲスト空間物理メモリアドレスとＩ／Ｏ空間物理アドレスとの間のマッピングを生成する。工程３１４において、仮想マシン生成モジュール２０４は、Ｉ／Ｏ空間物理アドレスへ既にマッピングされた一組のゲスト空間物理アドレスへマッピングされる一組のゲスト空間仮想アドレスを生成し、一組のゲスト空間仮想アドレスとＩ／Ｏ空間物理アドレスとの間の直接マッピングを含む拡張ページテーブル（ＥＰＴ）を生成又は更新し得る。
【００４０】
[045]  ゲスト空間仮想アドレスの生成は、存在しない又はＩ／Ｏ空間へ未だマッピングされていないゲスト空間仮想アドレスへアクセスしようとする仮想マシンにより引き起こされる事象（例えばＶＭ＿ｅｘｉｔ）に起因し得る。ＥＰＴは例えばメモリ翻訳モジュール２０８内に格納され得る。ＥＰＴの直接マッピングに基づき、仮想マシンで動作するデバイスドライバは、Ｉ／Ｏインターフェースの操作を制御するために１つ又は複数のメモリ読み取り／書き込み操作を行うことにより、Ｉ／Ｏインターフェース１１０ａのハードウェアレジスタ及びメモリデバイスへアクセスし得る。
【００４１】
[046]  本開示の実施形態と整合する仮想マシンによりハードウェアデバイスを操作する例示的方法４００を示す図４を次に参照する。本方法は、例えば図１Ａの仮想マシン１２０で動作するデバイスドライバ１２６ａとＩ／Ｏインターフェース１１０ａとにより行われ得る。
【００４２】
[047]  初期開始後、工程４０２において、デバイスドライバ（例えばデバイスドライバ１２６ａ）は、ゲストソフトウェアスタック１２６の一部であるソフトウェアアプリケーションからデータパケット送信要求を受信し得る。工程４０４において、デバイスドライバはＥＰＴを調べ、Ｉ／Ｏ空間物理アドレスへマッピングされる一組のゲスト空間仮想アドレスを取得する。工程４０６において、デバイスドライバは、送信対象データを格納するために、メモリ書き込み操作をゲスト空間仮想アドレスに対し行う。次に、工程４０８において、デバイスドライバは、新しいデータパケット送信タスクをタスクキュー２８０へ追加するために、メモリ書き込み操作を行う。メモリ書き込み操作は、例えば新しいデータ送信タスクと、送信対象データを格納する一組のゲスト空間仮想アドレスとを関連付けることを含む。工程４１０において、デバイスドライバはさらに、新しいデータパケット送信タスクについてインターフェースに通知するために、Ｉ／Ｏインターフェース１１０ａの通知レジスタへ書き込む。デバイスドライバは、ＥＰＴ内に格納されたゲスト空間仮想アドレスとＩ／Ｏ空間物理アドレスとの間の直接マッピングに基づき、タスクキュー２８０と通知レジスタ（ハードウェアレジスタ２５０の）とへアクセスする。
【００４３】
[048]  通知レジスタへの書き込みを検出した後、工程４１２において、バックエンドモジュール２７０は、タスクキュー２８０から新しいデータパケット送信タスクを取り出し、このタスクに関連する一組のゲスト空間仮想アドレスを取得し得る。バックエンドモジュール２７０は、ゲスト空間仮想アドレスを例えば一組のＩ／Ｏ空間物理アドレス（例えばＩ／Ｏ空間１５４ｂの）へ翻訳する要求を、メモリ翻訳モジュール２０８（例えばＩＯＭＭＵを介し）へ提出し得る。工程４１４において、翻訳されたＩ／Ｏ空間物理アドレスに基づき、バックエンドモジュール２７０は、仮想マシン１２０から送信されるデータを取得するためにメモリ読み出し操作を行い、送信のためにこのデータをネットワークインターフェースへ提供し得る。データパケット送信が完了したという通知をネットワークインターフェースから受信した後、工程４１６において、バックエンドモジュール２７０は、仮想マシン１２０で動作するデバイスドライバに、この完了について通知し得る。通知は割り込みの形式のものであり得る。
【００４４】
[049]  本開示の実施形態と整合する仮想マシンによりネットワークパケット受信を行う例示的方法５００を示す図５を次に参照する。本方法は、例えば図１Ａの仮想マシン１２０で動作するデバイスドライバとＩ／Ｏインターフェース１１０ａとにより行われ得る。
【００４５】
[050]  初期開始後、工程５０２において、バックエンドモジュール２７０は、受信されたデータパケットから抽出されるデータを、ネットワークインターフェースから受信する。工程５０４において、バックエンドモジュール２７０は、未決データパケット受信タスクに関連する一組のゲスト空間仮想アドレスを、タスクキュー２８０から取得し得る。工程５０６において、バックエンドモジュール２７０は、ゲスト空間仮想アドレスを一組のＩ／Ｏ空間物理アドレス（例えばＩ／Ｏ空間１５４ｂの）へ翻訳し得る。この翻訳は、例えば要求をＩＯＭＭＵへ提出することにより行われ得る。工程５０８において、バックエンドモジュール２７０は、データをＩ／Ｏ空間内に格納するために一組のＩ／Ｏ空間物理アドレスを使用して、メモリ書き込み操作を行い得る。工程５１０において、バックエンドモジュール２７０は、受信されたパケットデータについて、仮想マシン１２０で動作するデバイスドライバに（例えば割り込みをかけることにより）通知し得る。通知を受信すると、工程５１２において、デバイスドライバは、キュー２８０内の未決データパケット受信タスクからゲスト空間仮想アドレスを取得し得る。次に、工程５１４において、デバイスドライバは、受信されたパケットデータを取得するためにメモリ読み出し操作を行い、受信されたパケットデータをゲストソフトウェアスタック１２６へ提供し得る。
【００４６】
[051]  図６は、本明細書で説明された実施形態がこれにより実施され得る例示的コンピュータシステム６００のブロック図である。コンピュータシステム６００は、情報を伝達するためのバス６０２又は他の通信機構と、情報を処理するための、バス６０２と結合された１つ又は複数のハードウェアプロセッサ６０４（簡潔さの目的のためにプロセッサ６０４として示される）とを含む。ハードウェアプロセッサ６０４は例えば１つ又は複数のマイクロプロセッサであり得る。
【００４７】
[052]  コンピュータシステム６００はまた、情報と、プロセッサ６０４により実行される命令とを格納するための、バス６０２へ結合されるランダムアクセスメモリ（ＲＡＭ）又は他のダイナミック記憶デバイスなどのメインメモリ６０６を含む。メインメモリ６０６はまた、プロセッサ６０４により実行される命令の実行中に一時変数又は他の中間情報を格納するために使用され得る。このような命令は、プロセッサ６０４にアクセス可能な非一時的記憶媒体内に格納された後、コンピュータシステム６００を、命令で規定される操作を行うようにカスタム化された専用マシンに変える。
【００４８】
[053]  コンピュータシステム６００はさらに、プロセッサ６０４のための静的情報及び命令を格納するための、バス６０２へ結合された読み取り専用メモリ（ＲＯＭ）６０８又は他のスタティック記憶デバイスを含む。磁気ディスク、光ディスク又はＵＳＢメモリ（フラッシュドライブ）などの記憶デバイス６１０が、情報及び命令を格納するために設けられ、バス６０２へ結合される。
【００４９】
[054]  コンピュータシステム６００は、情報をコンピュータユーザへ表示するための陰極線管（ＣＲＴ：cathode ray tube）、液晶ディスプレイ（ＬＣＤ：liquid crystal display）、又はタッチスクリーンなどのディスプレイ６１２に、バス６０２を介し結合され得る。英数字キー及び他のキーを含む入力デバイス６１４が、情報及び命令選択をプロセッサ６０４へ伝達するために、バス６０２へ結合される。別のタイプのユーザ入力装置は、方向情報及び命令選択をプロセッサ６０４に伝達するため及びディスプレイ６１２上のカーソル移動を制御するための、マウス、トラックボール又はカーソル方向キーなどのカーソル制御器６１６である。入力デバイスは通常、第１の軸（例えばｘ）及び第２の軸（例えばｙ）の２つの軸内の２つの自由度（デバイスが面内の位置を規定することを許容する）を有する。いくつかの実施形態では、カーソル制御器としての同じ方向情報及び命令選択は、カーソルの無いタッチスクリーン上のタッチを受信することを介し実施され得る。
【００５０】
[055]  コンピュータシステム６００は、１つ又は複数のコンピュータデバイスにより実行される実行可能ソフトウェアコードとして大容量記憶デバイス内に格納され得るグラフィックユーザインターフェース（ＧＵＩ）を実現するために、ユーザインターフェースモジュールを含み得る。このモジュール及び他のモジュールは、一例として、ソフトウェアコンポーネント、オブジェクト指向ソフトウェアコンポーネント、クラスコンポーネント及びタスクコンポーネントなどのコンポーネント、処理、機能、フィールド、手順、サブルーチン、プログラムコードのセグメント、ドライバ、ファームウェア、マイクロコード、回路系、データ、データベース、データ構造、テーブル、アレイ、及び変数を含み得る。モジュールは、例えば図２Ａのハイパーバイザ１２４のコンポーネントを含み得る。
【００５１】
[056]  コンピュータシステム６００は、コンピュータシステム６００と組み合わせてコンピュータシステム６００を専用マシンにさせる又はプログラムするカスタム化ハードワイヤード論理、１つ又は複数のＡＳＩＣ又はＦＰＧＡ、ファームウェア、及び／又はプログラム論理を使用して、本明細書で説明された技術を実施し得る。いくつかの実施形態によると、本明細書で説明された操作、機能、技術、及び他の特徴は、メインメモリ６０６に含まれる１つ又は複数の命令の１つ又は複数のシーケンスを実行するプロセッサ６０４に応答して、コンピュータシステム６００により行われる。このような命令は、記憶デバイス６１０などの別の記憶媒体からメインメモリ６０６へ読み出され得る。メインメモリ６０６に含まれる一連の命令の実行は、本明細書で説明する方法工程（例えば図３〜５の方法３００〜５００）をプロセッサ６０４に行わせる。代替実施態様では、ハードワイヤード回路系が、ソフトウェア命令の代わりに又はソフトウェア命令と組み合わせて使用され得る。
【００５２】
[057]  本明細書で使用される用語「非一時的媒体」は、マシンを特別なやり方で動作させるデータ及び／又は命令を格納する任意の非一時的媒体を指す。このような非一時的媒体は、不揮発性媒体及び／又は揮発性媒体を含み得る。不揮発性媒体は、例えば記憶デバイス６１０などの光又は磁気ディスクを含み得る。揮発性媒体は、メインメモリ６０６などのダイナミックメモリを含み得る。非一時的媒体は、例えばフロッピーディスク、フレキシブルディスク、ハードディスク、ソリッドステートドライブ、磁気テープ、又は任意の他の磁気データ記憶媒体、ＣＤ−ＲＯＭ、任意の他の光データ記憶媒体、パターン又は孔を有する任意の物理媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、ＦＬＡＳＨ−ＥＰＲＯＭ、ＮＶＲＡＭ、フラッシュメモリ、レジスタ、キャッシュ、任意の他のメモリチップ、又はカートリッジ、及びこれらのネットワークバージョンを含む。
【００５３】
[058]  非一時的媒体は伝送媒体とは異なるがそれと併せて使用され得る。伝送媒体は記憶媒体間で情報を転送することに関与し得る。例えば、伝送媒体は、バス６０２を含むワイヤを含む同軸ケーブル、銅線及びファイバーオプティクスを含み得る。伝送媒体はまた、電波及び赤外線データ通信中に生成されるものなど音響又は光波の形式をとり得る。
【００５４】
[059]  様々な形式の媒体が、実行のために１つ又は複数の命令の１つ又は複数のシーケンスをプロセッサ６０４へ搬送することに関与され得る。例えば、命令は当初、リモートコンピュータの磁気ディスク又はソリッドステートドライブ上に搬送され得る。リモートコンピュータは、命令をダイナミックメモリ内にロードし、次にモデムを使用することにより命令を電話線上で送信し得る。コンピュータシステム６００にローカルなモデムは、データを電話線上で受信し、次にこのデータを赤外線信号に変換するために赤外線送信機を使用し得る。赤外線検出機は赤外線信号で搬送されるデータを受信し得、適切な回路系がデータをバス６０２上に置き得る。バス６０２は、プロセッサ６０４が命令を取り出し実行するメインメモリ６０６へ、データを搬送する。メインメモリ６０６により受信される命令は任意選択的に、プロセッサ６０４による実行の前又は後のいずれかに記憶デバイス６１０上に格納され得る。
【００５５】
[060]  コンピュータシステム６００はまた、バス６０２へ結合される通信インターフェース６１８を含み得る。通信インターフェース６１８は、ローカルネットワーク６２２へ接続され得るネットワークリンク６２０と結合する双方向データ通信を提供し得る。例えば、通信インターフェース６１８は、対応するタイプの電話線へデータ通信接続を提供するサービス総合デジタル網（ＩＳＤＮ：integrated services digital network）カード、ケーブルモデム、衛星モデム又はモデムであり得る。別の例として、通信インターフェース６１８は、データ通信接続を適合ＬＡＮへ提供するローカルエリアネットワーク（ＬＡＮ）カードであり得る。無線リンクもまた実装される。任意のこのような実施形態では、通信インターフェース６１８は、様々なタイプの情報を表すディジタルデータストリームを搬送する電気的、電磁的、又は光学的信号を送受信し得る。
【００５６】
[061]  ネットワークリンク６２０は通常、１つ又は複数のネットワークを介しデータ通信を他のデータ装置へ提供し得る。例えば、ネットワークリンク６２０は、接続を、ローカルネットワーク６２２を介しホストコンピュータ６２４へ又はインターネットサービスプロバイダ（ＩＳＰ：Internet Service Provider）６２６により操作されるデータ機器へ提供し得る。次に、ＩＳＰ６２６は、「インターネット」６２８と今日一般的に呼ばれる世界的パケットデータ通信ネットワークを介しデータ通信サービスを提供し得る。ローカルネットワーク６２２とインターネット６２８との両方はディジタルデータストリームを搬送する電気的、電磁又は光学的信号を使用する。ディジタルデータをコンピュータシステム６００へ／から搬送する様々なネットワークを介した信号並びにネットワークリンク３２０上の及び通信インターフェース６１８を介した信号は、伝送媒体の例示的形式のものであり得る。
【００５７】
[062]  コンピュータシステム６００は、ネットワーク、ネットワークリンク６２０、及び通信インターフェース６１８を介し、メッセージを送信し、データ（プログラムコードを含む）を受信し得る。インターネットの例では、サーバ６３０は、インターネット６２８、ＩＳＰ６２６、ローカルネットワーク６２２、及び通信インターフェース６１８を介しアプリケーションプログラムの要求コードを送信し得る。
【００５８】
[063]  受信コードは、後の実行のために記憶デバイス６１０又は他の不揮発性記憶装置内に受信及び／又は格納されると、プロセッサ６０４により実行され得る。いくつかの実施形態では、サーバ６３０はディスプレイ上に表示される情報を提供し得る。
【００５９】
[064]  本発明の他の実施形態は、本明細書の考察と本明細書において開示された本発明の実行から当業者にとって明白となる。本出願は、その一般原理に従う本発明の任意の変形形態、使用又は適応化並びに当該技術領域において公知な又は習慣的やり方に入るような本開示からの逸脱を含む本発明の任意の変形形態、使用又は適応化もカバーするように意図されている。本明細書及び例は例示的にすぎないと考えられるように意図されており、本発明の真の範囲及び精神は以下の特許請求範囲により示される。
【００６０】
[065]  本発明は上に説明され添附図面に示された正確な構造に限定されないということと、様々な修正及び変更が特許請求の範囲から逸脱することなくなされ得るということとが理解されよう。本発明の範囲は添付の特許請求の範囲だけにより限定されるべきであるように意図されている。
【図１Ａ】
2020524840.tif 000003
【図１Ｂ】
2020524840.tif 000004
【図２Ａ】
2020524840.tif 000005
【図２Ｂ】
2020524840.tif 000006
【図２Ｃ】
2020524840.tif 000007
【図３】
2020524840.tif 000008
【図４】
2020524840.tif 000009
【図５】
2020524840.tif 000010
【図６】
2020524840.tif 000011
【国際調査報告】
2020524840.tif 000012
2020524840.tif 000013