(57)【要約】      （修正有）【課題】ハイパーバイザを実施し、仮想マシン間で共有メモリを介して情報を渡すシステムを提供する。【解決手段】コンピュータシステムはハイパーバイザを実施し、ハイパーバイザは１つまたは複数のコンピュータシステムインスタンス及びコントローラを実施する。コントローラ及びコンピュータシステムインスタンスは、メモリを共有する。要求は、コンピュータシステムインスタンス及びコントローラの双方の施設を用いて処理される。要求処理の一部として、コンピュータシステムインスタンスとコントローラとの間を共有メモリを介して、情報を渡す。【選択図】図１Ｃ
2020038692.tif 000002
【特許請求の範囲】
【請求項１】
要求を処理するためのコンピュータ実施方法であって、
実行可能な命令を備えて構成された１つまたは複数のコンピュータシステムの制御のもと、
ハイパーバイザにより、仮想コンピュータシステムインスタンス及びコントローラを実施して、
前記仮想コンピュータシステムインスタンスが、前記要求の受信に使用するプロトコルスタックの１つまたは複数層の実施を不足させるよう、
前記コントローラが、前記仮想コンピュータシステムインスタンスにより前記１つまたは複数層が不足した前記プロトコルスタックを実施させるよう、
共有メモリ領域を、前記仮想コンピュータシステムインスタンス及び前記コントローラの双方からアクセス可能になるようにし、
前記コントローラから前記仮想コンピュータシステムインスタンスへの前記要求のデータを、前記共有メモリ領域に配置し、
前記共有メモリ領域から前記仮想コンピュータシステムに前記要求のデータを提供し、
前記仮想コンピュータシステムから前記コントローラへの前記要求に対する応答のデータを、前記共有メモリ領域に配置し、
前記共有メモリ領域から前記コントローラに前記応答のデータを提供し、
前記コントローラの前記プロトコルスタックの前記１つまたは複数の層の実施を行い、前記要求に対する前記応答を提供する、コンピュータ実施方法。
【請求項２】
前記仮想コンピュータシステムインスタンス及び前記コントローラの双方がアクセス可能な前記ハイパーバイザに対するハイパーコールインタフェースを通して、前記コントローラのハイパーコールハンドラに通知を出し、
前記ハイパーコールハンドラが前記通知を受信したことを受け、前記共有メモリ領域から前記コントローラに前記応答のデータを提供する、請求項１に記載のコンピュータ実施方法。
【請求項３】
前記共有メモリ領域に前記要求のデータを配置することは、前記共有メモリ領域の制御空間に、前記要求のデータの１つまたは複数の位置を書込むこと、
前記共有メモリ領域から前記仮想コンピュータシステムインスタンスに前記データを提供することは、前記制御空間に書込まれた前記１つまたは複数の位置の少なくとも一部に基づき、前記データを配置すること、を含む、請求項１または請求項２に記載のコンピュータ実施方法。
【請求項４】
さらに、
前記仮想コンピュータシステムインスタンスにより、第一オブジェクトモデルを用いて第一リスナオブジェクトを作成し、
前記コントローラにより、前記第一リスナオブジェクトに対応する第二リスナオブジェクトを作成して、前記要求を受信する、請求項１から請求項３のいずれか一項に記載のコンピュータ実施方法。
【請求項５】
前記要求はハイパーテキスト転送プロトコル要求である、請求項１から請求項４のいずれか一項に記載のコンピュータ実施方法。
【請求項６】
さらに、
前記ハイパーバイザにより、第二仮想コンピュータシステムインスタンスを実施して、第二共有メモリ領域に、前記第二仮想コンピュータシステムインスタンス及び前記コントローラの双方がアクセス可能になるようにし、
前記プロトコルスタックの前記１つまたは複数の層の実施は、前記コントローラを使用して、前記第二仮想コンピュータシステムインスタンスの要求を処理する、請求項１から請求項５のいずれか一項に記載のコンピュータ実施方法。
【請求項７】
実行可能な命令を備えて構成された１つまたは複数のコンピュータシステムの制御のもと、
ハイパーバイザの第一ドメインで、コンピュータシステムインスタンスを実施し、
前記ハイパーバイザの第二ドメインで、コントローラを実施し、前記コントローラは、メモリ領域のアクセスを前記コンピュータシステムインスタンスと共有し、前記コンピュータシステムインスタンスにより実施されたプロトコルスタックの共有層を含む複数層の前記プロトコルスタックを実施し、
少なくとも、
前記共有層の前記プロトコルスタック及び前記メモリ領域を用いて、前記コンピュータシステムインスタンスから前記コントローラに、前記要求に対する応答データを渡し、
前記複数層の前記プロトコルスタックのうち、前記コンピュータシステムインスタンスの実施に不足がある少なくとも１つの層を用いて、前記第二ドメインで前記応答データに対し１つまたは複数の動作を実施することで、
前記プロトコルスタックを用いて受信された要求を満たす、
コンピュータ実施方法。
【請求項８】
前記要求はハイパーテキスト転送プロトコル要求である、請求項７に記載のコンピュータ実施方法。
【請求項９】
前記共有層は前記プロトコルスタックのアプリケーション層である、請求項７または請求項８に記載のコンピュータ実施方法。
【請求項１０】
前記要求に対する前記応答データを渡すことは、前記コンピュータシステムインスタンスが、前記ハイパーバイザのハイパーコールインタフェースに対する準仮想デバイスドライバと対話したことを受け、前記コントローラにハイパーコールを送信することを含む、請求項７から請求項９のいずれか一項に記載のコンピュータ実施方法。
【請求項１１】
前記メモリ領域は、制御空間及び複数の要求スロットを含むよう構成され、
前記コンピュータシステムインスタンスから前記コントローラに前記応答データを渡すことは、少なくとも前記制御空間にアクセスし、前記複数の要求スロットのうち少なくとも一部の前記応答データを有する１つの要求スロットを判断することにより、前記コントローラに前記応答データを取得させることを含む、請求項７から請求項１０のいずれか一項に記載のコンピュータ実施方法。
【請求項１２】
前記要求を満たすことは、前記第二ドメインで受信された前記要求に対応する第一要求を前記第一ドメインに生成することを含む、請求項７から請求項１０のいずれか一項に記載のコンピュータ実施方法。
【請求項１３】
１つまたは複数のプロセッサ、及び命令を備えたメモリを備えるシステムであって、
前記命令が、前記１つまたは複数のプロセッサにより実行されると、
前記システムに、
ハイパーバイザ、
前記ハイパーバイザ上で動作する１つまたは複数のコンピュータシステムインスタンス、
前記ハイパーバイザ上で動作するコントローラ、及び
前記１つまたは複数のコンピュータシステムインスタンスの各コンピュータシステムインスタンスに対し、前記コンピュータシステムインスタンス及び前記コントローラにより共有されるメモリ空間、を実施させ、
前記ハイパーバイザ、前記コンピュータシステムインスタンス、及び前記コントローラは、前記メモリ空間に前記要求データを配置することで利用可能になる要求に対する応答のデータについて、前記コンピュータシステムインスタンスから前記コントローラにハイパーコールを通して通知し、前記コントローラにより前記コンピュータシステムの前記要求が満たされるよう一括して構成されるシステム。
【請求項１４】
前記コンピュータシステムインスタンスは、前記ハイパーバイザにより実施されたハイパーコールインタフェースに対する準仮想デバイスドライバを含み、前記コンピュータシステムインスタンス及びコントローラのどちらか一方からのハイパーコールが、前記コンピュータシステムインスタンス及び前記コントローラの他方への通信のトリガとなるようにする、請求項１３に記載のシステム。
【請求項１５】
前記コントローラは、プロトコルスイートの第一層セットの実施を含む、
前記コンピュータシステムインスタンスは、前記プロトコルスイートの第二層セットの実施を含み、
前記第一層セット及び前記第二層セットは、異なるが共通部分を有し、
前記要求を満たすことは、前記コントローラにより前記プロトコルスイートの前記第一層セットを使用することを含む、請求項１３または請求項１４に記載のシステム。
【請求項１６】
前記要求はＨＴＴＰ要求である、請求項１３から請求項１５のいずれか一項に記載のシステム。
【請求項１７】
前記要求データを前記メモリ空間に配置することは、前記メモリ空間の第一部に第一データを書込むこと、前記メモリ空間の第二部に第二データを書込むことを含み、前記第一データは、前記メモリ空間の前記第二部にある前記第二データの位置を示す、請求項１３から請求項１６のいずれか一項に記載のシステム。
【請求項１８】
前記コントローラは、前記ハイパーバイザのハイパーコールインタフェースからハイパーコールを受信するように、且つ、結果として前記要求をサービスすべきか判断するため前記メモリ空間にアクセスして構成されたハイパーコールハンドラを有する、請求項１３から請求項１７のいずれか一項に記載のシステム。
【請求項１９】
コンピュータ読取可能記憶媒体であって、
格納された命令を有し、前記命令がコンピュータシステムの１つまたは複数のプロセッサにより実行されると、前記命令は前記コンピュータシステムに、少なくとも、
ハイパーバイザの第一ドメインにコンピュータシステムインスタンス、
前記ハイパーバイザの第二ドメインにコントローラ、及び
前記コントローラ及び前記コンピュータシステムインスタンスの双方がアクセス可能なメモリ領域、を実施させ、
前記コンピュータシステムインスタンス及びコントローラは、連携して要求処理するよう一括で構成され、要求を満たすことは、
前記ハイパーバイザのハイパーコールインタフェース及び前記メモリ領域を用いて、前記コンピュータシステムインスタンスと前記コントローラとの間でデータを渡すこと、
前記コンピュータシステムインスタンス及び前記コントローラの双方にそれぞれ、前記データに関連して１つまたは複数の動作を実行させるようにすること、を含む、コンピュータ読取可能記憶媒体。
【請求項２０】
前記要求はハイパーテキスト転送プロトコル要求である、請求項１９に記載のコンピュータ読取可能記憶媒体。
【請求項２１】
前記コンピュータシステムインスタンスと前記コントローラとの間で前記データを渡すことは、前記コンピュータシステムインスタンスは、準仮想デバイスドライバと対話し、前記メモリ領域にある前記データについての通知を、前記コントローラにさせることを含む、請求項１９または請求項２０に記載のコンピュータ読取可能記憶媒体。
【請求項２２】
前記通知は前記要求の識別子を含み、
前記コンピュータシステムインスタンスと前記コントローラとの間で前記データを渡すことは、前記メモリ領域に格納された複数のデータインスタンスから前記要求データを選択するため、前記識別子を用いて位置を判断することを含む、請求項２１に記載のコンピュータ読取可能記憶媒体。
【請求項２３】
前記コントローラは、前記コンピュータシステムインスタンスにより実施されない、１つまたは複数層のプロトコルスタックを実施し、
前記要求処理では、前記１つまたは複数層の前記プロトコルスタックを使用する、請求項１９から請求項２２のいずれか一項に記載のコンピュータ読取可能記憶媒体。
【請求項２４】
前記命令はさらに、前記コンピュータシステムに別の１つまたは複数のコンピュータシステムインスタンスを実施させ、
実施された前記１つまたは複数層の前記プロトコルスタックは、前記別の１つまたは複数のコンピュータシステムインスタンスのそれぞれの要求処理に使用され、
前記メモリ領域は、前記別の１つまたは複数のコンピュータシステムインスタンスがアクセスできない、請求項１９から請求項２３のいずれか一項に記載のコンピュータ読取可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
＜関連出願の相互参照＞
本出願は、それぞれ２０１３年８月１２日に出願された同時係属中の、「ＰＥＲ  ＲＥＱＵＥＳＴ  ＣＯＭＰＵＴＥＲ  ＳＹＳＴＥＭ  ＩＮＳＴＡＮＣＥＳ」と題する米国特許出願第１３／９６４，９７７号、「ＡＰＰＬＩＣＡＴＩＯＮ  ＢＯＯＴ  ＩＭＡＧＥ」と題する同第１３／９６４，９４１号、及び「ＲＥＱＵＥＳＴ  ＰＲＯＣＥＳＳＩＮＧ  ＴＥＣＨＮＩＱＵＥＳ」と題する同第１３／９６４，８８９号の優先権を主張し、当該の内容を引用により本明細書の一部として援用するものである。
【背景技術】
【０００２】
様々なリソース量を電子要求サービスすることができる。例えば、要求サービスの規模は、わずかなステートレス計算から、長期間動作する大規模並列アプリケーションまで幅広い。要求サービスは、限られた数の計算リソースしか必要としない場合も多く、要求サービスに使用されるコンピュータシステムより遥かに少ない場合も多い。その結果、計算リソースが十分活用されないことも多く、概して、従来の要求処理技術では非常に無駄が多い。多くの場合、仮想化により計算リソースの利用方法を改善でき、例えば、単一の物理的コンピュータシステムが、複数の仮想コンピュータシステムを同時に実施することができ、それによって容量の変更が可能になり、デベロッパは容易にしかも柔軟に規模を拡大することが可能になった。
【０００３】
しかし、従来の仮想化技術では、仮想コンピュータシステム（インスタンス）の稼働を急激に上下させるための、要求サービスに必要なリソースや償却コストが原因で、デベロッパが下げて見積もることには根本的な制約がある。実際のサービスの仮想化では、一般的に、ワークロードを数分、数時間またはそれ以上の期間、占有可能であるとの期待に依存している。例えば、アプリケーションが多くある場合、仮想コンピュータシステムを使用する頻度は、比較的少ない。仮想コンピュータシステムが要求をサービス出来るようにするには、仮想コンピュータシステムを継続して動作状態にしておく必要があり、そのため、コンピュータシステムのオペレーティングシステム用計算リソース及びその他リソース（例えば、ネットワークリソース）が必要となる。そのようなコンピュータシステムが十分利用されない場合、それらのコンピュータシステムに割当てられた、少なくとも一部のリソースを、一般的には別の用途に利用できない。
【発明の概要】
【課題を解決するための手段】
【０００４】
本発明は、要求処理技術に関する。コンピュータシステムはハイパーバイザを実施し、ハイパーバイザは１つまたは複数のコンピュータシステムインスタンス及びコントローラを実施する。コントローラ及びコンピュータシステムインスタンスは、メモリを共有する。要求は、コンピュータシステムインスタンス及びコントローラの双方の施設を用いて処理される。要求処理の一部として、コンピュータシステムインスタンスとコントローラとの間を、共有メモリを介して情報を渡す。
【図面の簡単な説明】
【０００５】
本開示において、多様な実施形態を、以下の図を参照し説明する。
【図１Ａ】本開示の多様な態様を示す例示的な実施例を示す。
【図１Ｂ】本開示の多様な態様を示す例示的な実施例を示す。
【図１Ｃ】本開示の多様な態様を示す例示的な実施例を示す。
【図２】多様な実施形態の実施が可能な環境の例示的な実施例を示す。
【図３】汎用コンピュータシステムインスタンスと要求インスタンスとの比較を図に示す。
【図４】本開示の多様な実施形態の実施に使用されるコンピュータシステム構成の例示的な実施例を示す。
【図５】多様な実施形態の実施を可能にする環境の例示的な実施例を示す。
【図６】少なくとも１つの実施形態において、要求処理プロセスの例示的な実施例を示す。
【図７】少なくとも１つの実施形態において、要求処理プロセスの例示的な実施例を示す。
【図８】少なくとも１つの実施形態において、要求処理プロセスの例示的な実施例を示す。
【図９】多様な実施形態の実施を可能にする環境の例示的な実施例を示す。
【図１０】少なくとも１つの実施形態において、アプリケーションイメージビルドプロセスの例示的な実施例を示す。
【図１１】少なくとも１つの実施形態において、アプリケーションコード実行時の、セーフポイント特定プロセスの例示的な実施例を示す。
【図１２】少なくとも１つの実施形態において、アプリケーションコード実行時の、セーフポイント特定プロセスの例示的な実施例を示す。
【図１３】少なくとも１つの実施形態において、ワーカハイパーバイザ及びワーカハイパーバイザのコンポーネントの例示的な実施例を示す。
【図１４】少なくとも１つの実施形態において、要求処理プロセスの例示的な実施例を示す。
【図１５】多様な実施形態の実施を可能にする環境を示す。
【発明を実施するための形態】
【０００６】
以下に、多様な実施形態を記述する。本実施形態を十分把握できるよう説明するために、具体的な構成及び詳細を明確にする。しかし、当業者であれば、具体的な詳細説明が無くても実施形態を実施できることは明らかであろう。また、実施形態の説明が不明瞭にならないよう、周知の特徴を省略または簡略化するものである。
【０００７】
本明細書に記述し提案する技術は、仮想コンピュータシステムによる要求処理に関する。仮想コンピュータシステムでは、計算の効率化、レイテンシの低減、及び／またはその他の優位性を目的として、従来のアプリケーションスタックから数層分の不足がある。そのような仮想コンピュータシステムは、実質的に少ないリソースで実施可能であり、それにより、起動時間の短縮、計算オーバヘッドの低減、及び、物理的計算デバイス（ホストコンピュータシステム）を使った数多くの仮想マシンの実施が可能になるなど、技術的な優位性がもたらされる。
【０００８】
ある実施形態において、ハイパーバイザは、処理リソース、メモリリソース、ネットワークリソースなど、コンピュータシステムの多様な計算リソースの仮想化を目的として、コンピュータシステムにより動作される。全体的な例示にするために、基礎となっているコンピュータシステムの物理的な計算リソースを仮想化するハイパーバイザを使用しているが、ハイパーバイザは、複数ある仮想化層のうちの一層であってもよく、ハイパーバイザがそれ自体で、ハイパーバイザから見て別のハイパーバイザによる仮想化となる計算リソースを仮想化してもよい。一般的に、ハイパーバイザは、コンピュータシステム上でワーカコントローラ、及び１つまたは複数の仮想コンピュータシステムインスタンス（インスタンスとする）を実施するために使用されてもよい。特定のインスタンスでは、インスタンスの実施に従来使用されるアプリケーションスタックから複数層分の不足があってもよい。例えば、インスタンスに、オペレーティングシステム及び関連リソースの不足があってもよい。ある実施例において、オペレーティングシステムのカーネル、各種のプロセス、言語仮想マシン、全ネットワークスタック、及び／またはその他コンポーネントなど、多様なコンポーネントが不足したハイパーバイザ上で直接、インスタンスが言語ランタイムを実行する。ワーカコントローラは、ハイパーバイザ内で実行するプロセスとして実施されてもよく、インスタンスに不足し得る特権機能を利用できる。ある実施形態において、インスタンスは、プロトコルスタックの１つまたは複数の層（例えば、開放型システム間相互接続（ＯＳＩ）モデルプロトコルスタックの第１層から第６層）の実施に不足があり、コントローラはその１つまたは複数層の実施を有する。さらに、コントローラ及びインスタンスはそれぞれ、プロトコルスタックの少なくとも１層の共有層を実施してもよい（例えば、コントローラ及びインスタンスの双方が、ＯＳＩプロトコルスタックの第７層（アプリケーション層）を実施してもよい）。１つまたは複数の共有層は、以下で論じる共有メモリ領域を用いて、コントローラとインスタンスとの間の情報送信に使用されてもよい。
【０００９】
ある実施形態において、インスタンスは、多様な要求を処理するために、ワーカコントローラの各種のコンポーネントを利用する。ワーカコントローラの能力を利用可能にするため、ハイパーバイザは、インスタンス及びワーカコントローラの双方が共有する共有メモリ領域を実施してもよい。以下で詳述するが、要求処理に係わるデータ（例えば、要求に対する応答データ）を、共有メモリ領域を介してワーカコントローラに転送してもよい。多様な技術の利用により、共有メモリ領域を通した効率的な要求処理、及び、効率的なデータトラッキングを可能にしてもよい。
【００１０】
ある実施形態において、インスタンスの実行アプリケーションコードは、ＨＴＴＰオブジェクトモデルを用いてＨＴＴＰ要求を作成する。アプリケーションコードは、ＨＴＴＰ要求の受送信用ＨＴＴＰ要求オブジェクトをインスタンス化し構成してもよい。ＨＴＴＰに関連する多様な技術を記述するが、本開示の多様な実施形態は、ファイル転送プロトコル（ＦＴＰ）、ドメインネームサービス（ＤＮＳ）、及びその他プロトコルなど、別のプロトコルでの使用にも適合する。この特定の具体例において、ＨＴＴＰオブジェクトモデルは、ハイパーバイザを通した、インスタンスとワーカコントローラとの間の通信を可能にする準仮想ＨＴＴＰドライバを利用できてもよい。例示のために準仮想ＨＴＴＰドライバを使用するが、一般的に、共有メモリ領域のデータについてのインスタンスからコントローラへの通知は、準仮想デバイスドライバとの対話により実施されてもよい。
【００１１】
ＨＴＴＰオブジェクトモードが準仮想ＨＴＴＰドライバを利用した結果、準仮想ＨＴＴＰドライバは、インスタンス及びワーカコントローラが共有する共有メモリ領域内の制御空間に要求レコードを作成してもよい。要求レコードは、要求レコードの一意的な識別に適した識別子を含んでもよい。準仮想ＨＴＴＰドライバは、共有メモリ領域内に、要求レコードに関連付けた要求スロットを割り当ててもよい。この時、準仮想ＨＴＴＰドライバは、ハイパーコールインタフェースを用いて要求サービスハイパーコールを作成してもよい。ＨＴＴＰドライバは、要求レコードへのサービスが必要であることを示すハイパーコールを作成してもよい。その結果、ハイパーコールインタフェースは、ワーカコントローラの内部で動作するＨＴＴＰハイパーコールハンドラに通知してもよい。ＨＴＴＰハイパーコールハンドラは、さらに、共有メモリ領域から要求レコードを検索してもよい。ＨＴＴＰハイパーコールハンドラが要求を使用し、少なくとも一部の検索された要求レコードに基づきネイティブＨＴＴＰ要求を生成し、準仮想ＨＴＴＰドライバにより要求レコードが関連付けられた要求スロットに、要求データを配置してもよい。
【００１２】
ハイパーコールハンドラは、第二ＨＴＴＰオブジェクトモデルを用いて第二ＨＴＴＰ要求を構成してもよい。ハイパーコールハンドラは、要求レコードに関連付けられた要求スロットを利用し、要求スロットのコンテンツに基づき、エンティティボディを構成するかＨＴＴＰ要求を構成してもよい。構成が終わると、ＨＴＴＰハイパーコールハンドラは、ネイティブネットワークスタックを用いネイティブＨＴＴＰ要求を生成してもよい。ハイパーコールハンドラは、要求レコード及び関連要求スロットをアップデートし、データを返すか、第二ＨＴＴＰ要求からの結果を返してもよい。この方法では、インスタンスは、ワーカコントローラのネットワークスタックを利用することができ、自ネットワークスタックを保持する必要がない。
【００１３】
本明細書に記述し提案する技術は、計算リソース要求処理に係わる計算リソースを効率的に使用できる。ある実施形態において、要求を受信した時、要求に応答するために仮想マシンが構成されてもよい。仮想マシンは、従来のオペレーティングシステム、及びネイティブネットワークスタックなど各種のコンポーネントが不足した状態に構成されてもよい。そういったコンポーネントを不足せずに備えた状態では、要求処理がより遅くなってしまうであろう。要求処理が既に必要無い、または後に必要で無くなる場合、仮想マシンを提供しなくてもよい。
【００１４】
ある実施形態において、システムはフロントエンドリスナを備える。フロントエンドリスナは、リスナを２つ備えてもよい。各仮想マシンがそれぞれアプリケーションをサービスするが、第一リスナは、その複数のアプリケーションに向けた要求を待つよう構成されてもよい。第二リスナは、以下で詳述するが、第一リスナが受信した要求の複製要求を待つよう構成されてもよい。第一リスナの機能について、フロントエンドリスナの複製を作成し、様々なホスト名、ポート、アプリケーションパス、ユニフォームリソースロケータ（ＵＲＬ）、及び／またはユニフォームリソース識別子（ＵＲＩ）など、複数のネットワークアドレスで要求を待つようにしてもよい。ある実施形態において、ドメインネームシステム（ＤＮＳ）は、複数のドメイン名（または、一般的に、情報の複数インスタンス）を、フロントエンドリスナに対応する同一のネットワーク（例えば、ＩＰ）アドレスに結び付けるよう構成されてもよい。ドメイン名または情報のインスタンスが違えば、異なるアプリケーションイメージに対応してもよい。
【００１５】
要求を受信すると、フロントエンドリスナは、要求キューにワークトークンをエンキューしてもよい。要求トークンは、要求及び要求関連データの判断を可能にする情報を含んでもよい。ワーカハイパーバイザ内で動作するワーカコントローラは、要求キュー内にある、次に使用可能なメッセージを入手するなどして、要求ワークトークンをデキューしてもよい。あるいは、要求トークンをワーカハイパーバイザにプッシュしてもよい。要求ワークトークンをデキューまたはその他の方法で取得すると、ワーカコントローラは、ワークトークンを用い、利用可能なアプリケーションイメージセットの中から適切なアプリケーションイメージを判断し、ローカルのキャッシュ、または外部のデータストレージシステムであるアプリケーションイメージのリポジトリの中から、判断した適切なアプリケーションイメージを検索してもよい。
【００１６】
適切なアプリケーションを取得した後、ワーカコントローラはワーカハイパーバイザに命令し、少なくとも一部のアプリケーションイメージに基づき要求インスタンスをインスタンス化させてもよい。ワーカコントローラは、要求インスタンスのインスタンス化に係わる多様な動作を行うよう命令してもよい。その命令は、例えば、ワーカハイパーバイザに、要求インスタンス専用ユーザパーティションを新設すること、ワーカハイパーバイザ上で制御ＡＰＩを用いた、ユーザパーティションへのプロセッサ、メモリ、またはその他リソースの割り当てること、及び／または、その他の方法を命令すること、があり得る。ワーカコントローラは、少なくともアプリケーションイメージを含む、共有メモリ領域も構成してもよく、また、ワーカハイパーバイザに命令し、ユーザパーティションのアドレス空間に、読取専用メモリとして共有メモリ領域をマッピングさせてもよい。
【００１７】
ブートストラッププログラムを使用し、少なくとも一部のアプリケーションイメージを共有メモリ領域から、ユーザパーティション割当メモリにコピーしてもよい。ブートストラッププログラムは、共有メモリ領域からの、アプリケーションイメージのコピー部分に関連するエントリポイントアドレスを検索し、エントリポイントに基づきアプリケーションコードの実行を開始してもよい。アプリケーションコードの実行に応じて、要求インスタンスは、要求の入手を試みてもよい。要求インスタンスが要求の入手を試みると、ワーカコントローラは、要求インスタンスに関連する要求ワークトークンを配置し、要求ワークトークンで識別されるフロントエンドリスナへのコネクションを確立してもよい。フロントエンドリスナ（例えば、上記の第二リスナによる）がワークコネクション要求を継続してモニタリングしてもよく、要求ワークトークンに含まれる識別情報に基づき、受信要求を配置してもよい。フロントエンドリスナは、受信要求の受信に使用するソケットハンドルの複製を作成し、ワークコネクション要求を待つリスナに複製ソケットを割り当ててもよい。ワークコネクション要求を待つリスナは、要求インスタンスに応じて複製ソケットを使い、データの読み出し、書き込みを行ってもよい。データの提供後、要求インスタンスは、受信要求を処理し応答してもよい。多様な実施形態において、応答は、要求に関連し同期して出される。例えば、要求が受信される経路と同一のネットワーク接続、または同一の接続媒体を通して、応答を要求者に返してもよい。
【００１８】
本明細書に記述し提案する技術は、仮想コンピュータシステムのインスタンス化に使用するイメージの作成に関連する。多様な実施形態において、仮想コンピュータシステムは、起動時間の短縮、計算オーバヘッドの低減、及び、物理的計算デバイス（ホストコンピュータシステム）を使った数多くの仮想マシンの実施が可能になるなど、数多くの技術的優位性をもたらせ得るよう構成される。加えて、以下に記載するように、各種の技術を用い、そのような優位性をさらに高める。
【００１９】
ある実施形態において、アプリケーションコードを処理し、仮想マシンインスタンスのインスタンス化に使用可能なアプリケーションイメージを作成する。アプリケーションソースは、ビルドシステムにより受信されてもよい。アプリケーションソースは、デベロッパにより、例えば、ウェブサービス・アプリケーションプログラミングインタフェース（ＡＰＩ）またはバージョン管理システムを通して、提供されてもよい。アプリケーションソースは、ソースファイル、構成ファイル、リソースファイル（ウェブページ、グラフィックイメージ、またはその他メディアファイルなど）、バイナリファイル及び／またはその他の情報を含んでもよい。ビルドシステムは、アプリケーションを解析してアノテーション付ソースを作成する、アプリケーション処理を行ってもよい。アプリケーション処理では、アプリケーションソースの実行可能部分を調査し、プログラムの実行に変動が始まる１つまたは複数の先頭位置を判断してもよい。さらに、アプリケーション処理では、アプリケーションソースに付けるアノテーションを作成してもよい。アプリケーションソースを実行する１つまたは複数のエントリポイントを特定して、アノテーションを作成してもよい。エントリポイントの判断では、１つまたは複数のエントリポイントから始め潜在的な変動部分を検出するまで、アプリケーションソースを解析、解釈または分析してもよい。アプリケーションの実行で重要な点は、アプリケーションの実行方法により実行が変動するかもしれないことである。
【００２０】
アノテーション付きのアプリケーションソースを作成した後、ビルドシステムは、アノテーション付きのソースを、ビルドハイパーバイザにより実施されるビルドコントローラに送信してもよい。ビルドコントローラは、アノテーション付きソース用のカーネルを起動するよう構成されたビルドブートストラッププログラムを入手してもよい。ブートストラッププログラムは、メモリにカーネル及びアノテーション付きソースを読み込むルーチンを備えてもよい。ブートストラッププログラムは、アノテーション付きソースの判断変動位置にブレークポイントを設定するルーチンを備えてもよい。ブートストラッププログラムは、カーネルエントリポイントからカーネルの実行を開始するルーチンを備えてもよい。
【００２１】
ビルドコントローラは、アノテーション付きソース及びビルドブートストラッププログラムの少なくとも一部に基づき、ビルドインスタンスを生成してもよい。アノテーション付きソース及びブートストラッププログラムの入手先である仮想マシン（仮想コンピュータシステム）をインスタンス化して、ビルドインスタンスを生成してもよい。変動ポイントに達するまで、アプリケーションを実行してもよい。変動ポイントに達すると、アプリケーションの実行を停止してもよい。必要に応じ、アプリケーションの実行をセーフポイントに調整してもよい。セーフポイントは、アプリケーションの実行ポイントであってもよく、当該ポイントでは、アプリケーションを実行する仮想マシン状態のスナップショットを、後に同じまたは別の物理的コンピュータシステムでのアプリケーションの実行開始ポイントとすることができる。
【００２２】
よって、多様な実施形態において、仮想マシンのスナップショットは後で使用できるよう格納される。スナップショットは、アプリケーション実行のレジュームが可能なエントリポイントアドレスを含んでもよい。スナップショットは、ワーカハイパーバイザ、及び／または、１つまたは複数の別のワーカハイパーバイザがアクセス可能なアプリケーションイメージのリポジトリに置かれてもよい。ワーカハイパーバイザは、アプリケーションイメージのリポジトリからアプリケーションイメージを検索し、エントリポイントアドレスでアプリケーションの実行をレジュームしてもよい。この方法では、アプリケーションの実行時に変動が無い部分は、アプリケーションがロードされ使用される前に処理される。その結果、処理済みのアプリケーションは、アプリケーションがコンピュータシステムにロードされる度に、アプリケーションの実行時に変動が無い部分も処理するよりも、より迅速にロードされ要求処理に使用され得る。
【００２３】
図１Ｂは、本開示の多様な実施形態を示す図である。図示したように、アプリケーションソース１０２ｂはビルドマシン１０４ｂにより処理される。ビルドマシン１０４ｂは、アプリケーション命令を実行し、変動ポイントが検出された時にはアプリケーションの実行を停止するよう構成された仮想マシンであってもよい。変動ポイントまたは変動ポイントに近いセーフポイントでビルドマシンのスナップショットを取り、アプリケーションブートイメージ１０６ｂを作成してもよい。上で示し、また以下で詳述するように、アプリケーションブートイメージ１０６ｂは、要求処理に用いられる仮想マシンのインスタンス化に使用され得る。
【００２４】
図１Ｃは、本開示の多様な態様を示すダイアグラム１００ｃを表示する。図１Ｃに示すように、ダイアグラム１００ｃは要求１０２ｃの受信を示しており、当該要求は、例えば１つまたは複数の動作を実施する要求であってもよい。要求は、例えば、ハイパーテキスト転送プロトコル（ＨＴＴＰ）またはその他の通信プロトコルに従い提供されてもよい。ある実施形態において、要求は、１つまたは複数のアプリケーションでサービス可能である。当該アプリケーションは、データに対し１つまたは複数の動作を実施し、別のコンピュータシステムと通信し、及び／または、要求の一部であるか要求に関連するデータと連携するなどして、要求をサービスするよう構成された１つまたは複数のプログラミングモジュールを備えてもよい。
【００２５】
図１Ａは、上に論じた態様を含め、本開示の多様な態様を示す説明図である。具体的には、図１Ａは、上に記述したような能力を限定して有する１つまたは複数のインスタンス１０２ａを実施するハイパーバイザ１００ａを示す。インスタンス１０２ａがインスタンスに提供された要求を処理できるようにするため、インスタンスは、ハイパーバイザにより実施されるワーカコントローラ１０４ａの各種の能力を利用してもよい。ハイパーバイザは、インスタンス１０２ａ及びワーカコントローラ１０４ａの双方がアクセス可能な共有メモリ１０６ａを実施してもよい。データは、インスタンスが特定要求をサービスするのに適するよう、双方向に流れてもよい。インスタンスは、共有メモリ１０６ａにデータを入れ、ワーカコントローラがデータを入手し要求処理を完了できるよう、構成されてもよい。同様に、ワーカコントローラは、共有メモリにデータを置き、適宜データを処理するよう構成されてもよい。ハイパーバイザは、インスタンスとワーカコントローラの通信を調整し、共有メモリに置かれるデータについての通知を行ってもよい。この方法では、データがハイパーバイザにより実施される分離ロジック領域にあったとしても、ワーカコントローラの能力を利用できるよう、要求インスタンスとワーカコントローラとの間でデータ送信を可能にできる。
【００２６】
上で示したように、物理的ホストは、分散計算システム及び／またはデータセンタにおいて、相互接続された複数サーバの一つであってもよいことは評価される。図２は、分散計算及び／またはデータセンタ環境２００を示しており、当該環境で多様な実施形態が実行されてもよい。複数のカスタマデバイス２０２は、パブリックネットワーク２０４を介してデータセンタ２０６と通信する。カスタマデバイスは、いずれもがパブリックネットワークなどを介してデータセンタに接続可能なデバイスであってよく、例えばパーソナルコンピュータ、スマートフォン、タブレット計算デバイスなどである。例示的な実施形態において、パブリックネットワークはインターネットであってもよいが、本明細書では、別の公的にアクセス可能なネットワーク（モバイルネットワーク及び／または無線ネットワークなど）を考察する。さらに、例示のためにパブリックネットワーク２０４を使用するが、別のネットワーク及び／または複数ネットワークを組合せて使用してもよく、必ずしも公的である必要も無い。場合により、カスタマデバイスは直接、光ファイバ接続またはその他接続を通して（例えば、データセンタ２０６への専用回線を介して）データセンタ２０６と通信してもよい。データセンタ２０６は１つまたは複数の管理コンポーネントを備えてもよく、制御プレーン２０８、ゲートウェイ２１０及び／またはモニタリングエンティティ２１２などがあるがこれらに限定されない。当該管理コンポーネントは、一括して内部ネットワーク２１４を介して複数の内部サーバ２１６に接続される。制御プレーン２０８は、データセンタの各種コンポーネントで動作するコードのアップデートを含め、リソースのプロビジョニング、ルート変更またはメンテナンスなど、データセンタの計算リソースを操作する要求を受信してもよい。ゲートウェイ２１０は、内部ネットワークを介したサーバとの受送信など、データセンタの受送信トラフィックをフィルタにかけルートを特定してもよい。モニタリングエンティティは、内部サーバに関する情報など、データセンタ内の計算リソースの状態に関する情報を受送信してもよい。 
【００２７】
各内部サーバは、複数のロジックマシンスロット２１８により共有されてもよい。当該各スロットは、以下に記載するが、所与のサーバのハードウェアを抜き出して複数の半独立型実行環境にする仮想化システムでの場合のように、１つまたは複数のアプリケーションを実行できる。例えば、各スロットは、１つまたは複数の仮想プロセッサ（ＶＣＰＵ）にアクセス可能であってもよい。前に記載した複数のカスタマデバイスは台数に関係なく、データセンタの（物理的、論理的、または外部的に課せられた）上限までであれば、スロット数に関係なくオペレーティングシステムを必要とせずに、数に関係なくゲストオペレーティングシステムまたはゲストアプリケーションを実行してもよい。スロットは、１つまたは複数の操作基準及び／または業務関連基準に従いカスタマに割り当てられる。当該基準には、地理的近接性、サポート及び／またはユーザへの割当てリソースのレベル、サーバ及び／またはスロットの健全性及び／または即応性などがある。このため、少なくとも図１Ａから図１Ｃを参照して記述した技術は、要求処理を効率的に行うよう調整及び／または適合されてもよい。
【００２８】
論じたように、本開示の多様な実施形態は、より効率的な計算リソースの使用やレイテンシの軽減など、要求処理に関する数多くの技術的優位性をもたらし得る技術を採用している。図３は、所定の優位性を達成するために採用する各種の技術の例示的な実施例を示す。図は、物理的コンピュータシステム（物理的ホストまたは物理的ホストコンピュータシステム）によりインスタンス化された汎用仮想コンピュータシステム（インスタンス）の構成３０２を示している。図はまた、汎用コンピュータシステムと比較するため、物理的コンピュータシステムによりインスタンス化されたインスタンス３０４（要求インスタンス）も示している。
【００２９】
図３に示すように、汎用インスタンスは、１つまたは複数の中央処理装置（ＣＰＵ）、揮発性及び／または非揮発性メモリ、ネットワークインタフェースカード、及び／またはその他の計算リソースを含むコンピュータハードウェアを適宜使用して実施される。ハードウェアは、例えば、「ベアメタル」またはネイティブハイパーバイザなど、ハードウェア上で直接動作する仮想マシンモニタまたはハイパーバイザと、インタフェースで接続する。そのようなハイパーバイザの例に、Ｘｅｎ、Ｈｙｐｅｒ−Ｖ（登録商標）などがある。ハイパーバイザは通常、他のソフトウェアと比べ、マシン上で最も特権ある最上位プロセッサ状態で動作し、メモリ管理、並びに、従属層及び／またはドメインのスケジューリングプロセッサなどのサービスを行う。ある実施形態においてｄｏｍ０とされる、層及び／またはドメインの中で最上位の特権を与えた層及び／またはドメインを、サービスドメイン層に配置する。当該層は、ハイパーバイザの動作及び機能性を構成する管理オペレーティングシステムと、以下に記述するような、従来のオペレーティングシステムを必要とせずに実行するゲストオペレーティングシステム及び／またはアプリケーションを備えるゲストドメインなど、より低位の特権を有するドメインのオペレーティングシステムも備えてもよい。ゲストドメインは、種類が違っていてもよい（例えば、互いに異なるオペレーティングシステム及び／またはアプリケーションを動作する）。サービスドメインは、ユーザドメインとは異なり、サーバ３０２のハードウェアリソースにハイパーバイザを通して直接アクセスしてもよい。
【００３０】
特定の仮想コンピュータシステムに関し、Ｌｉｎｕｘ（登録商標）カーネルなどのオペレーティングシステム(ＯＳ)カーネルは、ハードウェアの各種の計算リソースを使用するためにハイパーバイザと対話してもよい。例えば、ＯＳカーネルは、ハイパーバイザが提供する仮想化ハードウェアと対話して、１つまたは複数のユーザプロセスからの入力／出力（Ｉ／Ｏ）要求を制御するよう構成されてもよい。ユーザプロセスは、スクリプト言語など特定の対応プログラミング言語を実施するために、汎用インスタンス内で論理的に実施される仮想マシン（ＶＭ）である、言語仮想マシンを実施してもよい。言語ＶＭにより、言語ランタイムが１つまたは複数のスレッドを作成でき、スレッド動作を可能にしてもよい。アプリケーションコードは、動作のため言語ランタイムを利用してもよい（すなわち、アプリケーションコードが言語ランタイムを参照する場合、ハードウェアがアプリケーションコード及び言語ランタイムの双方に従い動作してもよい）。
【００３１】
要求インスタンスの構成３０４に関して、要求インスタンスは、計算リソースオーバヘッドを低減するように実施される。特に、汎用インスタンスの構成と同様、要求インスタンスは、ハードウェアリソースを仮想化するハイパーバイザを用いて実施される。しかし、要求インスタンスは、汎用インスタンスの図にあるスタックを通さず、ハイパーバイザの直上で実行されるよう構成された言語ランタイムを使って実施される。この方法では、何百万行もの（汎用インスタンスに関連する）コードで起こるオーバヘッドを低減し、別の用途に使用することができる。
【００３２】
図４は、多様な実施形態における上記のような構成の実施方法を示す。図示したように、コンピュータハードウェア４０２は、Ｘｅｎハイパーバイザなどのハイパーバイザ４０４により仮想化されてもよい。ハイパーバイザ４０４は、特権を有する管理ドメインＤｏｍ０、及び特権を持たないドメインＤｏｍＵに使用されてもよい。ある実施形態において、Ｄｏｍ０はネイティブＯＳ４０６を備える。当該ネイティブＯＳは、ＯＳカーネル４０８（例えばＬｉｎｕｘカーネル）及びネイティブドライバ４１０を備え、アプリケーション及びＯＳが、ハイパーバイザ４０４により提供される仮想化ハードウェアと対話できるよう構成されてもよい。ネイティブＯＳは、要求ルーティングアプリケーション４１２、読取専用アプリケーションストレージ４１４、ＨＴＴＰスタック４１６など、各種の制御アプリケーションをサポートしてもよい。以下で論じるように、ＨＴＴＰスタックをＤｏｍＵが用いて、リソースのオーバヘッドを低減したアプリケーション動作を可能にしてもよい。ある実施形態において、一部または全ての制御機能は、プロセスにより独立スタブドメインで実施されてもよい。当該スタブドメインは特権を持たないが、Ｄｏｍ０のセキュリティを高めるためにサービスプロバイダにより操作される。
【００３３】
ある実施形態において、ＤｏｍＵは、ハイパーバイザ４０４に対するバイナリ互換インタフェース（ＡＢＩ）を使って実施され、ＨＴＴＰスタック４１６を用いる。例えば、入出力には、ハイパーコールを通して実デバイスドライバスタックと通信するスプリットドライバモデルを用いてもよい。具体的には、図に示しているように、Ｎｏｄｅ．ｊｓのＨＴＴＰモジュールは、仮想ネットワークアダプタに対し、より多くのオーバヘッドを要するＴＣＰ／ＩＰスタックをビルドするのではなく、Ｄｏｍ０のＨＴＴＰドライバを用い、ｈｔｔｐ．ｃｒｅａｔｅＳｅｒｖｅｒ及びｈｔｔｐ．ｒｅｑｕｅｓｔを実施してもよい。図示したように、例示的な本実施例において、ＪａｖａＳｃｒｉｐｔ（登録商標）エンジン４２０、仮想ストレージドライバ４２２及びＨＴＴＰドライバ４２４は、仲介オペレーティングシステムを通さず、ＡＢＩ４１８を通してハイパーバイザ４０４と直接対話する。ＪａｖａＳｃｒｉｐｔ（登録商標）エンジン４２０、仮想ストレージドライバ４２２及びＨＴＴＰドライバ４２４は、Ｎｏｄｅ．ｊｓプラットフォーム４２６及びＪａｖａＳｃｒｉｐｔ（登録商標）ソフトウェア開発キット（ＳＤＫ）４２８をサポートし、またプラットフォーム４２６及びＪａｖａＳｃｒｉｐｔ（登録商標）ＳＤＫ４２８は、ＪａｖａＳｃｒｉｐｔ（登録商標）で書かれたアプリケーションコード４３０をサポートする。ＪａｖａＳｃｒｉｐｔ（登録商標）及びサポートコンポーネントは、例示のために本明細書に示しているが、本開示の範囲は、本明細書に明記した本実施形態に限定されない。例えば、本明細書に記述した技術は、他のスクリプト言語でも使用可能であり、通常アプリケーションコードのタイプは複数ある。
【００３４】
図５は、多様な実施形態の実施が可能な環境５００の例示的な実施例を示している。図５に示すように、環境は、フロントエンドリスナ５０２、要求キュー５０４、ワーカハイパーバイザ５０６、及びアプリケーションイメージリポジトリ５０８を備える。環境５００のコンポーネントは、単一物理的コンピュータシステムを用い実施されてもよいが、一部のコンポーネントは、ネットワークを通して通信可能な別のコンピュータシステムで実施されてもよい。ある実施形態において、フロントエンドリスナは、コンピュータシステム、またはコンピュータシステム上で実行するプロセス（すなわち、コンピュータプログラムを実行するインスタンス）であり、複数のアプリケーションに出される要求を待つよう構成される。例えば、フロントエンドリスナの複製を作成し、それぞれのホスト名、ポート、アプリケーションパスなど、複数のネットワークアドレス（例えば、パブリック及び／またはプライベートインターネットプロトコル（ＩＰ）アドレス）で要求を待つようにしてもよい。仮想コンピュータシステムのインスタンス化に使用可能なアプリケーションイメージはそれぞれ対応するネットワークアドレスを有し、ネットワークアドレス宛の要求を受信した場合、アプリケーションイメージを使用して、要求を処理する仮想コンピュータシステムをインスタンス化できるようにしてもよい。
【００３５】
ある実施形態において、フロントエンドリスナ５０２は、要求をフィルタにかける、バリデーション用プログラミングロジックを備えてもよい。例えば、フロントエンドリスナは、アプリケーションレジストリサービスを備えて構成され、アプリケーションレジストリサービスによりネットワークアドレスと有効なアプリケーションとの対応関係が示されてもよい。また、フロントエンドリスナは、不適切にフォーマットされた要求、悪質な要求、または受信回数が多すぎる要求を、調整またはブロックするよう構成されてもよい。ある実施形態において、フロントエンドリスナ５０２は、負荷分散機能を有して構成される。フロントエンドリスナ５０２は、例えば、要求内の情報及び／または要求に関連した情報をハッシュ化し、どのデバイスにワークトークンを提供するかの判断（例えば、どの要求キューを使用するかの判断）に使用するハッシュ値を判断する。また、フロントエンドリスナ５０２は、１つまたは複数の負荷分散技術を用いてワークトークンを配分してもよい。当該負荷分散技術では、多くの潜在要求キューそれぞれにあるトークンの、少なくとも一部のトークン数に基づき、トークンを配分してもよい。
【００３６】
要求キュー５０４は、ワークトークンを格納するよう構成されたキューデータ構造を用いたデータ構造またはプログラミングモジュールであってもよく、当該ワークトークンは、フロントエンドリスナにより受信され、フロントエンドリスナによりエンキューされた要求に対応する。フロントエンドリスナ５０２は、例えば、受信要求に対応するワークトークンを作成するよう構成されてもよい。ワークトークンは、要求を続きから処理するための再開ポイントとワークトークンとの関連付けを可能にする、プロセス識別子、スロット識別子、またはその他同様の識別情報を含んでもよい。ワークトークンは、リスニングアドレスに基づいた、または要求内に含まれるアドレス情報に基づいたアプリケーションアドレスを含んでもよい。フロントエンドリスナは、例えば、要求ワークトークンをメッセージ形式にシリアル化し、シリアル化されたトークンをメッセージキューに追加するなどして、要求ワークトークンをエンキューしてもよい。ある実施形態において、要求ワークトークンは、期限を設けて構成されてもよい。例えば、フロントエンドリスナは、要求キュー上での要求ワークトークンのエンキュー処理の一部として、要求ワークトークンに有効期限を付けてもよい。要求キューは、有効期限内に要求が満たされなければ、要求ワークトークンを自動的に終了または排出するよう構成されてもよい。
【００３７】
ある実施形態において、ワーカハイパーバイザ５０６は、受信要求を処理するために要求インスタンスをインスタンス化できるよう構成されたハイパーバイザである。ワーカハイパーバイザは、複数のワーカハイパーバイザとの競争コンシューマ環境の中で動作してもよい。そのような動作の実施には、ワーカハイパーバイザ５０６は、要求キュー５０４からのワークトークンを処理するよう構成されたプロセスであるワーカコントローラ５１０を備えて構成されてもよい。ワーカコントローラは、フロントエンドリスナ５０２を実施する計算デバイスとは別の計算デバイスにより実施されてもよい。ワーカコントローラは、ハイパーバイザの特権を有するドメインで実施されてもよい（一方、ハイパーバイザにより実施される全ての要求インスタンスが、より低位の特権を有する、または特権を持たないドメインで実施されてもよい）。さらに、本開示では、例示のためワーカコントローラ５１０を使用したが、ワーカコントローラ５１０の機能は、複数プロセスにそれぞれ分散されてもよい。つまり、ワーカコントローラ５１０は、複数プロセスの集合体としてもよい。一般的に、本明細書に示すコンポーネントは、文脈上明確でない限り、多様な方法で実施可能であり（例えば、複数プロセスでそれぞれに多様な機能に対する責任を分散させるなど）、本開示の範囲を必ずしも、本明細書に明記した例示的な実施形態に限定するものではない。図５に戻り、例示的な実施例を説明する。要求キュー５０４から要求をデキューするため、ワーカコントローラは、要求キューから要求ワークトークンを移動させずに、時間制限制で要求ワークトークンの排他的リースを受けてもよい。ワーカコントローラが制限時間内に要求を満たせなければ、自動的に要求ワークトークンを再度利用可能にするか、要求キューに返してもよい。ある実施形態において、ワーカコントローラ５０４は、処理中の要求トークン数を調整するよう構成される。ワーカコントローラ５０４は、例えば、要求処理の空き容量を検出してワークトークンをデキューし、次の要求処理用容量が足りないのにワークトークンをデキューしてしまう状態を回避してもよい。
【００３８】
別の実施例として、ワーカコントローラ５１０は、アプリケーションイメージリポジトリ５０８から、要求実行に適したアプリケーションイメージを検索するよう構成されてもよい。ワーカコントローラ５１０は、例えば、少なくとも一部の要求ワークトークンに基づき、適切なアプリケーションイメージを判断してもよい。例えば、ある実施形態において、ワーカコントローラは、要求ワークトークン内でＵＲＩとして要求パスのＵＲＩの一部を抜き出してアプリケーションアドレスを解析し、ディレクトリサービスを調べて要求パスのアプリケーションイメージをルックアップしてもよい。ある実施形態において、ワーカコントローラ５１０は、外部のアプリケーションイメージリポジトリにアクセスするより先に、ワーカハイパーバイザで既に使用可能なアプリケーションイメージ（図略）のキャッシュを調べてもよい。キャッシュは、アプリケーションイメージリポジトリ５０８にアクセスするより速くアプリケーションイメージにアクセスできるよう構成されてもよい。キャッシュは、例えば、ランダムアクセスメモリ（ＲＡＭ）で実施されてもよく、一方、アプリケーションリポジトリは、回転磁気媒体を有するハードドライブ、ソリッドステートドライブ、またはその他デバイスなど、低速だが持続性のあるストレージを利用してもよい。
【００３９】
多様な実施形態において、ワーカコントローラ５１０は、要求インスタンス５１２をインスタンス化するようにも構成されている。ワーカコントローラ５１０は、例えば、ワーカハイパーバイザ５０６と対話し、多様な動作を実施するよう構成されてもよい。多様な動作では、例えば、要求インスタンス専用ユーザパーティションを新設し、ワーカハイパーバイザ５０６上で制御アプリケーションプログラミンインタフェース（ＡＰＩ）を用いてプロセッサ、メモリ、またはその他リソースをユーザパーティションに割り当て、共有メモリ領域を構成し、ワーカハイパーバイザ５０６に命令し、読取専用メモリとしてユーザパーティションのアドレス空間に共有メモリ領域をマッピングさせる。ワーカコントローラ５１０は、少なくとも一部のアプリケーションイメージを共有メモリ領域からユーザパーティション割当メモリにコピーするよう構成されたブートストラッププログラムと対話してもよい。ブートストラッププログラムは、例えば、共有メモリ領域からの、アプリケーションイメージのコピー部分に関連するエントリポイントアドレス（例えば、アプリケーションイメージ用にスナップショットを使用する際の命令ポインタのポイント先アドレス）を検索し、エントリポイントに基づきアプリケーションコードの実行を開始してもよい。
【００４０】
さらに、上で示したように、ワーカコントローラは、ワークトークンを利用して、フロントエンドリスナ５０２が受信した対応する要求と論理的コネクションを確立できる。この方法では、要求インスタンス内のアプリケーションコードが要求の入手を試みる場合、ワーカコントローラ５１０は、要求インスタンスに関連する要求ワークトークンを配置し、要求ワークトークンにより特定されたフロントエンドリスナへのコネクションを確立してもよい。一方、フロントエンドリスナは、要求インスタンスからのワークコネクション要求を待つよう構成されてもよい。フロントエンドリスナは、例えば、要求ワークトークンに含まれる識別情報に基づき、受信要求を配置するよう構成されてもよい。また、フロントエンドリスナは、受信要求の受信に使用するソケットハンドルの複製を作成するよう構成され、ワークコネクション要求を待つリスナに複製ソケットを割り当ててもよい。ワークコネクション要求を待つリスナは、要求インスタンス５１２に応じて複製ソケットを使い、データを読み出し書き込みしてもよい。
【００４１】
図６は、要求に対する応答に使用されるプロセス６００の例示的な実施例を示す。プロセス６００の動作は、例えば、以下で詳述するように、図５を参照して上で論じた環境５００での各種コンポーネントにより実施されてもよい。ある実施形態において、プロセス６００は、要求を受信すること（６０２）を含み、要求は、上記のように、ユーザデバイスによりネットワークを介して提供された要求であり得る。要求は、例えば、図５を参照して上に記載したように、フロントエンドリスナにより受信されてもよい。その後、要求インスタンスは、要求を処理するためにインスタンス化されてもよい（６０４）。ワーカハイパーバイザのワーカコントローラは、例えば、キャッシュまたはアプリケーションイメージリポジトリからアプリケーションイメージを入手してもよい。
【００４２】
適切な要求インスタンスがインスタンス化された後（６０４）、プロセス６００は、インスタンス化された要求インスタンスに要求データを提供すること（６０６）を含んでもよい。要求データは、要求を満たして処理されるデータ、及び、要求を処理するインスタンス化された要求インスタンスのアプリケーションが必要とするメタデータを含んでもよい。要求データは全てが要求に包含されなくてもよいことに注意すべきである。例えば、要求は、データストリームを開始するよう構成されてもよいが、その時のデータ量は要求自体に収めるには大きすぎるかもしれない。その場合、要求データは、要求インスタンスに対しストリーミングプロセスに提供されてもよい。要求データを要求インスタンスに提供する多様な技術を以下で詳述する。
【００４３】
６０６で提供された要求データを要求インスタンスが処理した後、プロセス６００は、要求インスタンスから応答を受信すること（６０８）を含んでもよい。以下で詳述するように、要求インスタンスは、要求インスタンス及びワーカコントローラの双方に共有される共有メモリ領域に応答を配置してもよい。さらに、要求データと同様に、応答データも単一通信内に全てが包含されなくてもよく、ストリーミングなど、より複雑なデータ転送形式を伴ってもよい。要求に対する応答が受信された後（６０８）、プロセス６００は、要求者にネットワークを介して応答を送信して、要求者（すなわち、要求の請求元であるコンピュータシステム）に応答を提供すること（６１０）を含んでもよい。
【００４４】
多様な実施形態において、要求インスタンスにより要求処理が完了すると、次の要求インスタンスが処理すべき要求が受信されるまでは、要求インスタンスを必要としなくてもよい。そのため、図６に示すように、プロセス６００は、要求処理完了を検出すること（６１２）を含んでもよい。例えば、ある実施形態において、受信応答の受信、及び／または要求に対する応答のディスパッチが、要求処理の完了のトリガとなる。ある実施形態において、要求インスタンスは、要求インスタンスで動作するアプリケーションによる通知、タイムアウト、及び／または別の方法など、多様な方法での終了動作中は継続して動作可能であってもよい。ある実施形態において、例えば、別の要求を処理できるよう要求インスタンスを実行可能にしておくことが望ましいかもしれない。要求処理完了のトリガが何であれ、プロセス６００は、要求インスタンス用の計算リソースを、別の要求インスタンスを実施するなどの別の目的に使用できるようにする、要求インスタンスを非インスタンス化（すなわち、解体）すること（６１４）を含んでもよい。
【００４５】
図７は、多様な実施形態における、要求を処理するプロセス７００の詳細な実施例を示す。図６を参照して上記したプロセス６００と同様に、プロセス７００は、以下でより詳細に記載するように、環境５００でのコンポーネントにより実行されてもよい。ある実施形態において、要求をフロントエンドリスナなどにより受信されてもよい（７０２）。ボックス７０２から矢印で戻されているように、要求を受信したコンポーネントが、所与の要求処理を完了する前に、複数の要求を受信してもよい。プロセス７００またはその変形の動作は、そのような要求を受信する毎に実施されてもよい。
【００４６】
要求を受信すると（７０２）、要求を処理するか否かの判断を行ってもよい（７０４）。上に示したように、要求を受信するフロントエンドリスナ（または別のコンポーネント）は、アプリケーションレジストリサービスによりネットワークアドレスと有効なアプリケーションとの対応関係が示されるよう構成されてもよい。別の実施例として、フロントエンドリスナまたは別のコンポーネントは、不適切にフォーマットされた要求、悪質な要求、または受信回数が多すぎる要求を、調整またはブロックするよう構成されてもよい。そのため、プロセス７００の実行に関連して動作するフロントエンドリスナまたは別のコンポーネントにより実施される、少なくとも一部の基準に基づき、要求を処理するか否かが判断されてもよい。
【００４７】
要求を処理すると判断されれば（７０４）、プロセス７００は、要求ワークトークンを作成すること（７０６）を含んでもよい。ワークトークンは、例えば、フロントエンドリスナにより多様な情報を含むよう構成されてもよく、当該情報により、ワークトークンと対応する要求との関連付けが可能になる。ワークトークンは、例えば、要求を続きから処理するための再開ポイントとワークトークンとの関連付けを可能にする、プロセス識別子、スロット識別子、またはその他同様の識別情報を含んでもよい。また、ワークトークンは、リスニングアドレスに基づいた、または要求内に含まれるアドレス情報に基づいたアプリケーションアドレスを含むよう構成されてもよい。一般的に、ワークトークンの情報は、実施形態において種類も情報量も多様である。ある実施形態において、ワークトークンは、非同期に構成されてもよい（例えば、要求が受信される（７０２）以前）ことに注意すべきである。ワークトークンは、例えば、受信要求、及び／または、要求についてのその他関連情報に関連させて事前に作成されてもよい。
【００４８】
構成された（または要求に関連付けられた）後、プロセス７００は、上記のように、要求キューにワークトークンをエンキューすること（７０８）を含んでもよい。また、プロセス７００は、ワークトークンをデキューすること（７１０）を含んでもよく、当該ワークトークンは、要求キューで最も古いワークトークンであってもよく、上記のワークトークンと同じであっても異なっていてもよい（しかし、上で記述したように、上記のようにエンキューされたワークトークンは、プロセス７００の一部を繰り返すことでデキューされることになるかもしれない）。ワークトークンは、ワーカハイパーバイザのワーカコントローラなど、コンピュータシステムに適したコンポーネントによりデキューされてもよい。さらに、記載したように、ワークトークンをデキューすることは、要求キューから要求ワークトークンを削除せずに、要求キューから要求ワークトークンの排他的で時間制限制のリースを受けることを含むことができ、ワーカコントローラが制限時間内に要求を満たせなければ（例えば、ワーカコントローラを実施するコンピュータシステムが要求の処理中に正常に作動しない場合など）、要求ワークトークンを再度利用可能にしてもよい。デキューされたトークンが有効か否かを判断してもよい（７１２）。例えば、上で論じたように、トークンは、有効期限を示す情報を含んでもよい。トークンが有効かどうかを判断する（７１２）ことは、有効期限を現在時間と比較することを含んでもよく、有効期限が現在時間より前であればトークンは無効であるとみなしてもよい。トークンが有効かどうかの判断に、別の基準を使用してもよい。
【００４９】
トークンが有効であると判断した（７１２）場合、プロセス７００は、要求処理に適したアプリケーションイメージを判断すること（７１４）を含んでもよい。例えば、トークンに関連する少なくとも一部の情報に基づき、アプリケーションイメージを判断してもよい（７１４）。トークンは、例えば、適切なアプリケーションの識別子を含んでもよく、要求トークンの情報からアプリケーションを判断してもよい。例えば、アプリケーションを判断する際、要求ワークトークン内でユニフォームリソース識別子（ＵＲＩ）として要求パスのＵＲＩの一部を抜き出してアプリケーションアドレスを解析し、ディレクトリサービスを調べて要求パスのアプリケーションイメージをルックアップしてもよい。別の実施例として、ワークトークンからの情報を用いて適切なアプリケーションをルックアップしてもよいが、その際、トークンの外部で格納され、おそらくはネットワークを介して（例えば、ウェブサービス要求を介して）アクセス可能になるテーブル、またはその他のデータ構造内をルックアップしてもよい。一般的に、ワークトークンからアプリケーションを判断する方法は、いずれの方法であってもよい。
【００５０】
適切なアプリケーションを判断した（７１４）後、判断したアプリケーションを検索してもよい（７１６）。例えば、アプリケーションイメージを、ローカルキャッシュ、ローカルデータ記憶装置、または外部から取得してもよい。ある実施形態において、ワーカコントローラは、ローカルキャッシュにアプリケーションが無いか確認し、キャッシュに無ければ、外部アプリケーションイメージリポジトリなど別の場所でアプリケーションを検索する。アプリケーションイメージ（または、要求処理の開始に適した、少なくとも一部のアプリケーションイメージ）を入手すると、プロセス７００は、検索したアプリケーションイメージを用いて、図３及び４を参照して上記したような構成の要求インスタンスをインスタンス化すること（７１８）を含んでもよい。例えば、ワーカコントローラは、ワーカハイパーバイザに命じて、少なくとも一部のアプリケーションイメージに基づき、要求インスタンスをインスタンス化させてもよい。例えば、ワーカコントローラは、ワーカハイパーバイザに命じて、要求インスタンス専用ユーザパーティションを新設させ、ワーカハイパーバイザ上で制御ＡＰＩを用いてプロセッサ、メモリ、またはその他リソースをユーザパーティションに割当てさせてもよい。また、ワーカコントローラは、少なくともアプリケーションイメージを含む共有メモリ領域を構成し、ワーカハイパーバイザに命じて、ユーザパーティションのアドレス空間に、読取専用メモリとして共有メモリ領域をマッピングさせてもよい。さらに、ワーカコントローラは、ブートストラッププログラムを使ってユーザパーティションを構成してもよい。ブートストラッププログラムは、実行されると、共有メモリ領域から得た少なくとも一部のアプリケーションイメージを、ユーザパーティション割当メモリにコピーするよう構成されてもよい。ブートストラッププログラムは、共有メモリ領域からの、アプリケーションイメージのコピー部分に関連するエントリポイントアドレスを検索し、エントリポイントに基づきアプリケーションコードの実行を開始してもよい。
【００５１】
要求インスタンスのインスタンス化後（７１８）、要求インスタンスに要求を処理させてもよい（７２０）。例えば、要求インスタンスは、要求ワークトークンを用いて要求へのコネクションを確立し、以下で詳述するように、要求から処理用データを取得してもよい。
【００５２】
図７で示すように、プロセス７００は、要求キューから次のトークンの通知を受信したか否かを（通知を出すよう構成されている場合）要求キューに問い合わせるかモニタリングするなどにより、次の処理対象ワークトークンがあるか判断すること（７２２）を含んでもよい。要求キューに少なくとも１つまたは複数のワークトークンがあると判断すれば、プロセス７００は、別のワークトークンをデキューし（７１０）、上記などのようにワークトークンを使用し別の要求を処理することを含んでもよい。図に示したように、次のワークトークンが無いと判断すれば（７２２）、プロセス７００は、新規要求をサービスできるよう、受信したワークトークンが無いか継続してモニタリングすることを含んでもよい。
【００５３】
要求を受信し、要求を処理しないと判断する（７０４）か、受信要求に対応するトークンが有効ではないと判断（７１２）する場合、プロセス７００は、要求を拒否すること（７２４）を含んでもよい。拒否及び／または拒否理由を示すメッセージを送信するか、単に応答を返さないなど、任意の方法で要求を拒否してもよい。
【００５４】
図８は、多様な実施形態における、要求を処理するプロセス８００の例示的な実施例を示す。プロセス８００は、図５を参照して上記し、以下で詳述するような環境５００における１つまたは複数のコンポーネントなど、適切なシステムにより実施されてもよい。ある実施形態において、プロセス８００は、ワーカハイパーバイザに命じ、少なくとも一部のアプリケーションイメージに基づき、要求インスタンスをインスタンス化させること（８０２）を含んでもよい。例えば、アプリケーションイメージが作成されたアプリケーションによりサービス可能な要求を受信したことを受け、ワーカハイパーバイザに要求インスタンスをインスタンス化させるよう命じてもよい（８０２）。要求インスタンスのインスタンス化後のある時点で、アプリケーションイメージのアプリケーションコードが実行されるが、実行の際、要求を処理するために要求の入手を試みることを含んでもよい。そのため、プロセス７００は、アプリケーションコードでの、要求を入手する試み（すなわち、アプリケーションコードを実行するコンピュータシステムによる試み）を検出すること（８０４）を含んでもよい。要求を入手する試みを検出した（８０４）ことを受け、ワーカコントローラは、要求インスタンスに関連する対応ワークトークンを配置してもよい（例えば、メモリから、恐らくは格納された複数のワークトークンから選択して入手する）（８０６）。その後、ワーカコントローラは、配置されたワークトークンを用い、フロントエンドリスナにより格納される要求とワークトークンのコネクションを確立してもよい（８０８）。例えば、ワークトークンと要求との関連性を少なくとも部分的にはメモリに格納して、コネクションを確立してもよい。
【００５５】
コネクションを確立した（８０８）後、プロセス８００は、トークンを用いて要求を配置し（８１０）、要求インスタンスにデータを提供すること（８１２）を含んでもよい。例えば、フロントエンドリスナは、ワーカコントローラからのワークコネクション要求を待ち（すなわち、モニタリングし）、そのようなワークコネクション要求を受信すると、ワーカコントローラから提供されたトークン及び／またはワーカコントローラから得た情報に基づき、受信要求を配置してもよい。フロントエンドリスナは、受信要求の受信に使用するソケットハンドルの複製を作成し、ワークコネクション要求を待つリスナに複製ソケットハンドルを割り当ててもよい。ワークコネクション要求を待つリスナは、要求インスタンスに応じて複製ソケットを用い、データの読み出し、書き込みを行ってもよい。データを要求インスタンスに提供した（８１２）後、以下で詳述するように、要求インスタンスから応答を受信してもよい（８１４）。その後、応答を要求者（すなわち、プロセス８００の実行のトリガとなった要求を出したコンピュータシステム）に返してもよい（８１６）。
【００５６】
本明細書の他の箇所でも示したように、本明細に明記した実施形態の数多くの変形は、本開示の範囲内であると考えられる。例えば、上記の例示的な実施形態では、ワーカコントローラは、要求を処理する仮想コンピュータシステムのインスタンス化に適したアプリケーションイメージを判断し取得する。そのような機能を、多様な計算環境における様々なエンティティが実施してもよい。例えば、フロントエンドリスナまたは別のシステムが、どのアプリケーションイメージを入手すべきかを判断し、イメージ、または、イメージを見つけ出せる位置（例えばＵＲＩにより）を特定する情報を提供してもよい。同様に、フロントエンドコントローラは、独自にアプリケーションイメージを取得し、アプリケーションイメージをワーカコントローラに転送してもよい。さらに、上記の実施形態は、ワーカコントローラにより処理される要求キューにトークンがエンキューされるような実施形態を含む。一般的に、フロントエンドリスナは、多様な方法でワーカコントローラに通知することができ、例えば、ワーカコントローラに通知を出し、要求インスタンスが要求を取得できるようにするロジックを、ワーカコントローラに処理させる方法がある。他にも本開示の範囲内であると考えられる変形例がある。
【００５７】
上記したように、アプリケーションイメージは、受信要求をサービスするために、仮想コンピュータシステムをインスタンス化（要求インスタンス）できるよう作成される。本開示の多様な技術は、そのようなアプリケーションイメージの作成に関連し、効率的なインスタンス化を可能にし、計算リソースの使用を抑えながら要求に応じてレイテンシを軽減する。図９は、本開示の多様な実施形態を実施する環境９００の例示的な実施例を示す。図９の環境９００の実施例は、アプリケーションソース９０２、ビルドシステム９０４、ビルドハイパーバイザ９０６、及びワーカハイパーバイザ９０８を備える。アプリケーションソースは、アプリケーションイメージをビルドする際に使用されるアプリケーションコードを提供するシステムまたはシステムの構成コンポーネントにより、提供されてもよい。アプリケーションコードは、デベロッパが受信したものであってもよい。当該デベロッパとは、例えば、計算リソースサービスプロバイダのカスタマデベロッパ、または、一般的には、アプリケーションインスタンスをビルドするためのアプリケーションコードを提供できるデベロッパなどである。アプリケーションソースは、デベロッパにより、例えば、ウェブサービス・アプリケーションプログラミングインタフェース（ＡＰＩ）またはバージョン管理システムを通して、提供されてもよい。アプリケーションソースは、ソースファイル、構成ファイル、リソースファイル（ウェブページ、イメージ、またはその他メディアファイルなど）、及び／またはバイナリファイルなどを含んでもよい。
【００５８】
ビルドシステム９０４は、下で詳述するが、アプリケーションコードが処理されアプリケーションイメージが作成され、アプリケーションイメージリポジトリ９１０に配置される前に、プリプロセッサとして動作するよう構成されたシステムまたはシステムの構成コンポーネントであってもよい。ワーカハイパーバイザは、上記のようなワーカハイパーバイザであってもよく、例えば、１つまたは複数のプロセスを有し、当該プロセスがアプリケーションイメージリポジトリ９１０からアプリケーションイメージを入手し、入手したアプリケーションイメージを用いて、要求を処理する要求インスタンス９１２をインスタンス化するよう構成される。図９の各種のコンポーネントは、独立した物理的コンピュータシステム上で実施されてもよいが、本開示の多様な実施形態は、同一の物理的コンピュータシステムが、仮想化層を追加するなどして、ビルドハイパーバイザ９０６もワーカハイパーバイザ９０８も実施する実施形態を含む。
【００５９】
ある実施形態において、ビルドシステム９０４は、変動認知パーサ９１４を用いアプリケーションソースを処理し、アノテーション付きソースを作成するよう構成される。変動認知パーサは、アプリケーションソースの実行可能部分（例えば、ソースコード及び／またはコンパイルしたソースコード）を実行し、プログラムの実行に変動が始まる１つまたは複数の位置（変動ポイント）を判断するよう構成された、システムまたはシステムの構成コンポーネント（例えば、システム上で実行するプロセス）であってもよい。変動が見られるのは、例えば、ネットワークメッセージの受信、ユーザの行った入力の読込み、システムクロックの読込み、乱数ジェネレータの使用、及び／または、アプリケーションソースから確定的でない情報を入手することになるようなその他類似アクションの実施などである。つまり、変動ポイントは、複数回行った実行結果に潜在的に様々な変動が見られるような、１つまたは複数のコンピュータ実行可能命令に対応してもよい。アプリケーション実行結果に変動があるような機能の一覧を保存し、変動認知パーサが、変動が始まる実行位置を特定できるようしてもよい。
【００６０】
また、変動認知パーサ９１４は、アプリケーションソースにアノテーションを付けるよう構成され、１つまたは複数の特定位置を記録するために、アプリケーションソースに関連付けて、メタデータにアノテーションを格納してもよい。ある実施形態において、変動認知パーサは、プログラムの構造を静的分析し、最初に、アプリケーションソースを実行する１つまたは複数のエントリポイントを特定するよう構成される。変動認知パーサ９１４は、例えば、１つまたは複数のエントリポイントから始め潜在的な変動を検出するまで、アプリケーションソースを解析、解釈、またはその他分析を行ってもよい。変動認知パーサ９１４は、例えば、判断した位置に該当するソースコード行、または実行可能マシン命令のリストを記録するなどして、判断した変動位置を格納してもよい。ある実施形態において、変動認知パーサは、アプリケーションソースにデベロッパが付けたアノテーションと相互に作用するよう構成される。例えば、変動認知パーサは、変動を考慮すべきプログラム位置かどうかより優先して、アノテーションを読み出して処理してもよい。そのようなデベロッパのアノテーションは、シンタックスの通りであってもよく、変動認知パーサ９１４は当該シンタックスを処理するよう構成されている。
【００６１】
ある実施形態において、ビルドシステムは、アノテーション付きアプリケーションソースを、ビルドハイパーバイザ９０６により実施されるビルドコントローラ９１６に送信するよう構成される。ビルドコントローラ９１６は、ビルドハイパーバイザ９０６上で実行されるプロセスであってもよい。ある実施形態において、ビルドシステム９０４は、ビルド要求を受信可能な複数のハイパーバイザからビルドハイパーバイザを選択する。ビルドシステム９０４は、アーカイブフォーマットにアノテーション付きソースをパッケージし、ビルドコントローラが使用可能な位置にアーカイブを格納してもよい。ビルドシステム９０４は、ビルドコントローラ９１６と通信し、ビルドコントローラに対し、ビルド要求を開始するアーカイブの位置を含むウェブサービス要求を出すなどして、アプリケーションビルドを起動してもよい。
【００６２】
ある実施形態において、ビルドコントローラ９１６は、ビルドブートストラッププログラムを入手するよう構成される。ビルドブートストラッププログラムは、ブートストラッププログラムリポジトリ９２０に格納されてもよく、当該リポジトリ９２０は、ビルドハイパーバイザ９０６と同じ物理的コンピュータシステム上にあってもよく、または別の位置でネットワークを介して入手可能になる分散システムにあってもよい。ビルドコントローラは、アノテーション付きソースを分析し、アプリケーションに適したブートストラッププログラムを判断してもよい。例えば、ビルドコントローラは、ブートストラッププログラムの選択に影響を与えるプラットフォーム要件またはその他要因について、アノテーション付きソースを分析してもよい。アプリケーションタイプが異なれば、ブートストラッププログラムは異なってもよい。ＪａｖａＳｃｒｉｐｔ（登録商標）アプリケーション用ブートストラッププログラムもあれば、Ｒｕｂｙ（登録商標）アプリケーション用ブートストラッププログラム等であってもよい。さらに、各アプリケーションタイプ（ＪａｖａＳｃｒｉｐｔ（登録商標）、Ｒｕｂｙ（登録商標）など）用に、複数のブートストラッププログラムがありそこから選択してもよく、各ブートストラッププログラムは、１つまたは複数のサブタイプアプリケーションに適していてもよい。ある実施形態において、ブートストラッププログラムはそれぞれ、アノテーション付きソース用カーネルをブートするよう構成される。ブートストラッププログラムは、実行時、メモリにカーネル及びアノテーション付きソースを読み込むルーチンに従って動作してもよい。ブートストラッププログラムは、アノテーション付きソースの判断変動位置にブレークポイントを設定するルーチンも備えてもよい。さらに、ブートストラッププログラムは、カーネルのエントリポイントからカーネルの実行を開始するルーチンを備えてもよい。
【００６３】
ある実施形態において、ビルドコントローラ９１６は、アノテーション付きソース及びビルドブートストラッププログラムに基づき、ビルドインスタンス９１８を生成してもよい。ビルドコントローラは、例えば、アノテーション付きソース及びブートストラッププログラムの入手先である仮想マシンをインスタンス化してもよい。ビルドコントローラは、ビルドインスタンスに変動モニタ９２２を動作可能に装着し、仮想マシンに対する変動イベントを検出し応答してもよい。変動モニタ９２２は、アプリケーションの実行を分析し、変動イベントを検出するよう構成され、ハイパーバイザ９０６上で実行されるプロセスであってもよい。また、ビルドコントローラは、インスタンス化仮想マシンに命じてブートストラッププログラムを実行させるよう構成されてもよい。ブートストラッププログラムが実行されると、変動モニタ９２２は、ビルドインスタンスがアプリケーションの変動ポイントに達したことに応答して、ビルドインスタンスを停止させるよう構成されてもよい。例えば、変動モニタ９２２は、仮想マシンのブレークポイントを用いて実施されてもよい。この場合、変動モニタ９２２は、ブレークポイントへの到達を知らせる通知を受信し、通知の受信に応答して仮想マシンを停止させるよう構成されてもよい。変動モニタ９２２は、ハイパーバイザの機能を利用し、ＣＰＵが特定コード命令を実行している時、または、変動ポイントへの到達を示す別のイベントが検出された時には、ハイパーバイザに命じてプログラムを一時停止させてもよい。１つの実施例として、変動モニタは、アプリケーションソース、または、アプリケーションソースを包含するメモリページにある命令を読み出し、変動ポイントの位置を判断してもよい。変動につながる命令を受けた際、変動モニタ９２２は、アプリケーションコードを実行する仮想マシンの停止に相当する値を有する割り込みを発行してもよい。ハイパーバイザは、その割り込みをトラップし、ビルドインスタンスＣＰＵの割り込みハンドラがアプリケーションの実行を停止させてもよい。
【００６４】
第二の手法として、Ｉｎｔｅｌ（登録商標）アーキテクチャを採用しているシステムにより使用される割り込み命令である、ブレークポイント命令を使用する手法がある。割り込み（例えば、値３、または、一般的に実行停止が必要であることを示す割り込み値、を有する割り込み）を検出するよう、ブートストラップの一部として割り込みハンドラを搭載してもよい。割り込みを検出すると、仮想マシン内での割り込みの発生に応答して、割り込みハンドラコードが実行されてもよい。割り込みハンドラの一部として、トラップされた命令を示す変動モニタと通信し、仮想マシンの実行を中止する必要性を示してもよい。つまり、この手法において、まず、ビルドインスタンス内で動作する別のコードに制御を移すが、その後変動モニタと通信し、スナップショットを取ってマシンをシャットダウンさせる。
【００６５】
ビルドプロセスの一部として、ビルドコントローラは、停止されたビルドインスタンスのスナップショットイメージを取るよう構成されてもよい。ビルドコントローラは、例えば、プロセッサレジスタ、フラグ、プログラムカウンタ、及び仮想環境のその他の態様の状態を含む、仮想マシンのメモリ空間のコピーを作成してもよい。スナップショットイメージは、スナップショットイメージの実行がレジュームされ得るエントリポイントアドレスを含んでもよい。ある実施形態において、ビルドコントローラは、ビルドインスタンスの実行を近くの実行セーフポイントに移すよう構成されてもよい。例えば、ビルドコントローラは、所定のカーネルルーチン、クリティカルセクション、またはその他実行が安全でない部分の実行時には、マシン命令ポインタを進めたり戻したりして、スナップショットイメージを取ることを回避してもよい。ビルドコントローラは、実行をレジュームするために、プロセッサレジスタの一部または全てを復元する必要がないような近接ステートに、ビルドインスタンスを移してもよい。ビルドインスタンスを実行セーフポイントに移動させた後、ビルドコントローラ９１６によりスナップショットを取ってもよい。
【００６６】
上で示したように、こうしてビルドされたアプリケーションイメージは、要求インスタンス（または、一般的に、少なくとも一部のアプリケーションに基づいたインスタンス）のインスタンス化に利用されてもよい。ある実施形態において、ビルドコントローラ９１６は、１つまたは複数のワーカハイパーバイザがアクセス可能なアプリケーションイメージリポジトリにスナップショットを収めるよう構成される。ワーカハイパーバイザは、アプリケーションイメージリポジトリからアプリケーションイメージを検索し、スナップショットに基づき要求インスタンスを構築し、エントリポイントアドレスでアプリケーションの実行をレジュームしてもよい。
【００６７】
図１０は、要求インスタンスなどのインスタンス化など、多様な目的のために使用されるアプリケーションイメージをビルドするプロセス１０００の例示的な実施例を示す。プロセス１０００の動作は、図９を参照して上で記述し以下で詳述するような、ビルドシステム及び／またはビルドハイパーバイザなどによる適切なシステムにより実施されてもよい。ある実施形態において、プロセス１０００は、上記のようなアプリケーションソースコードを受信すること（１００２）を含む。例えば、アプリケーションソースコードは、ソースコードを開発したデベロッパから受信してもよい。変動認知パーサを使用して、受信アプリケーションソースコードを処理してもよく（１００４）、プログラムの実行における潜在的な変動を判断し記録してもよい（１００６）。例えば、上で論じたように、ビルドシステムは、変動認知パーサにアプリケーションソースの実行可能部分を調べさせ、プログラムの実行に変動が始まる１つまたは複数の位置を判断させ、アプリケーションソースにアノテーションを付けてもよい。代わりにまたは追加して、アプリケーションソースに関連付けしたアノテーションをメタデータに格納し、１つまたは複数の判断位置を記録してもよい。潜在的な変動を判断する際、アプリケーションソースを実行する１つまたは複数のエントリポイントを特定し、１つまたは複数のエントリポイントから始めて潜在的な変動部分を検出するまで、アプリケーションソースを解析、解釈または分析してもよい。さらに、示したように、変動認知パーサは、デベロッパによりアプリケーションソースに付されたアノテーションに対応し、例えば、変動を考慮すべきプログラム位置か否か、より優先すべきアノテーションかどうかを判断してもよい。判断した潜在的な変動位置を、判断した位置に該当するソースコード行、または実行可能マシン命令のリストを記録するなど、任意の適切な方法で格納してもよい。
【００６８】
図１０に示すように、プロセス１０００は、ビルドハイパーバイザを選択すること（１００８）を含んでもよい。ビルドハイパーバイザは、例えば、アプリケーションブートイメージの作成における、ビルドハイパーバイザの利用可能性の少なくとも一部に基づき、選択されてもよい。また、ビルドハイパーバイザは、特定タイプ（例えば、ＪａｖａＳｃｒｉｐｔ（登録商標）またはＲｕｂｙ（登録商標））のアプリケーションのビルドに適した構成を有するなど、１つまたは複数のその他要因の少なくとも一部に基づき、選択されてもよい。選択後、アノテーション付きアプリケーションソースは、選択された処理ビルドハイパーバイザに送信されてもよい（１０１０）。例えば、ビルドハイパーバイザを操作するシステムとは異なるシステム上で、アプリケーションソースにアノテーションを付ける場合、アノテーション付きアプリケーションソースは、ネットワークを経由してビルドハイパーバイザに送信されてもよい。ブートストラッププログラムも選択されてもよい（１０１２）。上で論じたように、アプリケーションタイプが異なれば、対応するブートストラッププログラムは異なってもよい。例えば、特定のブートストラッププログラムは、特定のアプリケーションタイプに対応して構成されてもよい。しかし、別の実施形態では、ブートストラッププログラムは、複数のアプリケーションタイプでの使用が可能であるなど、より複雑な構成であってもよい。多様な実施形態において、ブートストラッププログラムは、アノテーション付きソースに対応するカーネルをブートするよう構成される。ブートストラッププログラムは、例えば、カーネル及びアノテーション付きソースをメモリに読み出すルーチンを備えてもよい。ブートストラッププログラムは、アノテーション付きソースの判断変動位置にブレークポイントを設定するルーチンを備えてもよい。また、ブートストラッププログラムは、カーネルのエントリポイントからカーネルの実行を開始するルーチンも備えてもよい。
【００６９】
ある実施形態において、プロセス１０００は、ブートストラッププログラム及びアノテーション付きソースコードの双方を入手可能な仮想マシンをインスタンス化すること（１０１４）を含んでもよい。仮想マシンは、例えば、上で論じたビルドコントローラの命令に基づきインスタンス化されてもよい。また、ビルドコントローラは、仮想マシンへの変動イベントを検出し応答する変動モニタを、インスタンス化仮想マシンに装着させてもよい。ビルドコントローラは、インスタンス化仮想マシンに命令し、ブートストラッププログラムを実行させてもよい。その後、アプリケーションを実行し、変動モニタがモニタリングし（１０１６）、ビルドインスタンスがアプリケーションの変動ポイントに到達すると、変動モニタがビルドインスタンスを停止させてもよい（１０１８）。例えば、変動モニタは仮想マシンのブレークポイントを用いて実施されてもよい。変動モニタは、ブレークポイントへの到達を知らせる通知を受信し、通知の受信に応答して仮想マシンを停止させるよう構成されてもよい。ビルドインスタンスのスナップショットを取ってもよい（１０２０）。ある実施形態において、スナップショットを取る際（１０２０）、ビルドコントローラが、プロセッサレジスタ、フラグ、プログラムカウンタ、及び仮想環境のその他態様の状態を含む、仮想マシンのメモリ空間のコピーを作成する。スナップショットイメージは、スナップショットイメージの実行がレジュームされるエントリポイントアドレスを含んでもよい。以下で論じるように、スナップショットを取る際、近くの実行セーフポイントにビルドインスタンスを移動させてもよい。例えば、ビルドコントローラは、所定のカーネルルーチン、クリティカルセクション、またはその他実行が安全でない部分の実行時には、マシン命令ポンタを進めたり戻したりして、スナップショットイメージを取ることを回避してもよい。また、ビルドコントローラは、実行をレジュームするために、プロセッサレジスタの一部または全てを復元する必要が無いような近接ステートに、ビルドインスタンスを移してもよい。
【００７０】
ある実施形態において、プロセス１０００は、後にスナップショットを使用して要求インスタンスなどをインスタンス化できるような場所に、スナップショットを格納することを含む。従って、図１０に示すように、プロセス１０００は、以下で記述するように、後にスナップショットを使用して要求インスタンスをインスタンス化するなどのため、アプリケーションイメージリポジトリにスナップショットを配置すること（１０２２）を含む。
【００７１】
本明細書に明確に開示した全ての技術と同様、変形も本開示の範囲内であると考えられる。例えば、いつビルドインスタンスのスナップショットを取るか、及び／または、どのスナップショットを使用するかの判断における変形を使用することで、インスタンスのインスタンス化に使用するスナップショットの信頼性を高くし、不要な処理を必要とせず的確な設定でインスタンス化できるようにしてもよい。
【００７２】
ある実施形態において、アプリケーション実行でのセーフポイントは、上記のように、変動認知パーサにより特定される。図１１は、スナップショットを取れるセーフポイントの判断に使用されるプロセス１１００の例示的な実施例を示す。プロセス１１００は、変動認知パーサ、またはそのような機能を有する別のシステムなど、適切なシステムにより実施されてもよい。ある実施形態において、プロセス１１００は、第一命令を入手すること（１１０２）、その命令が変動ポイントに対応しているかを判断すること（１１０４）を含む。命令が変動ポイントに対応しているかの判断（１１０４）を、例えば、上記のとおり実施してもよい。現命令が変動ポイントに対応していないと判断すれば（１１０４）、プロセス１１００は、次の命令の入手動作、及び、入手した命令が変動ポイントに対応しているかの判断動作（１１０４）を繰り返してもよい。これらの動作を、新しく入手した命令が変動ポイントに対応していると判断する（１１０４）まで繰り返してもよい。
【００７３】
新規入手命令が変動ポイントに対応していると判断（１１０４）した場合、プロセス１１００は、新規入手命令がセーフポイントに対応しているかどうかを判断すること（１１０６）を含んでもよい。新規入手命令がセーフポイントに対応しているかどうかの判断（１１０６）は、適切であればいずれの方法で実施されてもよい。例えば、ある実施形態において、新規入手命令を分析して命令に繋がる機能を判断し、判断した機能が、安全でない（例えば、そのような機能の呼出しにより、マシンへの割り込みが特定状態において設定されるためか、機能の呼出しが、一時停止及びレジュームプロセスでは復元不可能なアクティビティに該当するため）として特定された機能の一覧にあるかどうかを確認する。
【００７４】
新規入手命令がセーフポイントに対応しないと判断した場合（１１０６）、プロセス１１００は、旧命令（例えば、命令シーケンスでの直前の命令）を入手すること（１１０８）を含んでもよい。再度、新規入手命令がセーフポイントに対応するかどうかの判断を実施してもよい（１１０６）。このプロセスでは、新規入手命令がセーフポイントに対応していると判断される（１１０６）まで継続して、旧命令の入手、及びセーフポイントに対応するかの判断を繰り返してもよい。新規入手命令がセーフポイントに対応すると判断した（１１０６）場合、変動モニタ（または別の適切なシステム）により処理された時にアプリケーションの実行が特定されたポイントで停止されるよう、プロセス１１００は、変動ポイント／セーフポイントとして現命令を特定すること（１１１０）を含んでもよい。この方法において、セーフポイントは、セーフポイントでない実変動ポイントとしてではなく、次回の処理のための変動ポイントとして特定される。
【００７５】
図１２は、アプリケーションイメージの作成に使用できるセーフポイントを判断する代替プロセスを示す。プロセス１２００は、ビルドインスタンスの一部として動的にセーフポイントを計算するよう実施されてもよい。プロセス１２００は、上記したような変動モニタや他のそのようなシステムなど、適切であればいずれのシステムで実施されてもよい。プロセス１２００において、スナップショットの取得を開始（１２０２）し、ビルドインスタンスによるアプリケーションコードの実行中は何度もスナップショットを取るようにしてもよい。例えば、スナップショットの取得を開始し、マイクロ秒毎（またはその他時間毎）、及び／または命令を実行する度など、定期的にスナップショットを取るようにしてもよい。
【００７６】
ある実施形態において、プロセス１２００は、第一／次の命令について、命令を実行し、及び／または、処理中の命令を分析する処理を行うこと（１２０４）を含んでもよい。上記のように、命令が変動ポイントに対応するかどうかの判断を実施してもよい（１２０６）。命令が変動ポイントに対応しないと判断した（１２０６）場合、プロセス１２００は、処理中の命令が変動ポイントに対応していると判断する（１２０６）まで、次の命令の処理を繰り返し得る。現命令が変動ポイントに対応すると判断した（１２０６）場合、プロセス１２００は、時間逆進制でのスナップショットシーケンスの第一スナップショットを入手すること（１２０８）を含んでもよい。第一スナップショットは、例えば、変動ポイントに対応する命令を受ける直前に取られた最新のスナップショットであってもよい。
【００７７】
スナップショットがセーフポイントに対応するかどうかの判断を実施してもよい（１２１０）。少なくとも一部のスナップショット分析に基づき判断されてもよい（１２１０）。セーフポイントの基準セットを確認し、基準に合っていれば、スナップショットがセーフポイントに対応するとしてもよい。基準は、少なくとも一部のＣＰＵ状態を基にしてもよい。例えば、少なくとも一部のＣＰＵレジスタ状態に基づく基準は、割り込みフラグが設定されているか、ＣＰＵが例外を処理している最中か、ＣＰＵがページフォルト中か、及び、一般的にはＣＰＵレジスタが復元可能かを含んでもよい。また、基準は少なくとも一部において、例えば、アプリケーションコードではクリティカルセクションにロックが掛けられているために、アプリケーションコードが原因でＣＰＵがアンセーフポイントにあるのではないか、ＣＰＵが、ＣＰＵ命令ポインタにより示された通りに、アンセーフとされた命令を処理している最中か、などに基づいてもよい。スナップショットがセーフポイントに対応していないと判断された（１２１０）場合、プロセス１２００は、繰り返し、次の（時間的に戻る）スナップショットを入手すること（１２０８）を含み、新規入手スナップショットがセーフポイントに対応すると判断する（１２１０）まで、入手したスナップショットがセーフポイントに対応するかどうかを判断すること（１２１０）を含んでもよい。安全だと特定されないスナップショットはいずれも、セーフポイントに対応しないと判断する場合、プロセス１２００の完了時などに、破棄されてもよい。スナップショットがセーフポイントに対応していると判断した（１２１０）場合、スナップショットはアプリケーションイメージに使用されてもよい（１２１２）。
【００７８】
一般的に、上記の技術は、スナップショットを取った時の、少なくとも一部のＣＰＵの命令ポインタ位置に基づいた、エントリポイントを計算する技術をもたらす。これにより、正確な状態が使用できるので、アプリケーションイメージのブートの一部として再開位置が得られる。さらに、ブートストラップコードを追加してスナップショットポイントに飛ぶ前に実行し、ＣＰＵレジスタの値またはマシンの構成情報を格納できるようになどしてもよい。例えば、マシンの起動時、ブートストラッププログラムは、スナップショットイメージに正確に一致した状態を復元してもよい。ハイパーバイザの施設の完全なコピーを作成しなくてもよいが、メモリに状態情報を有しているので、状態情報が追加されてブートストラッププログラムが提供されても、ブートストラッププログラムは、不適切な状態の修正が可能になる。追加状態情報は、メタデータまたは補足アプリケーションイメージとして、ブートストラッププログラムに入手可能であってもよい。ブートストラッププログラムは、追加状態情報を使用し、アプリケーションのエントリポイントに飛ぶ前にアプリケーション状態を復元してもよい。
【００７９】
上に示したように、本開示での多様な実施形態は、本明細書に記述した多様な技術によりインスタンス化されたインスタンスが要する計算オーバヘッドを低減する。その結果、インスタンスプロビジョニングの処理が迅速にでき、リソースの無駄を最小にできる。図１３は、要求を処理する要求インスタンスなどのインスタンスを可能にする環境の例示的な実施例を示す。図１３に示すように、環境は、ワーカハイパーバイザ１３０２の内部で実施され、上記のようなワーカハイパーバイザであってもよい。ワーカハイパーバイザ１３０２はハイパーコールインタフェース１３０４を実施してもよく、当該ハイパーコールインタフェース１３０４により、ゲストオペレーティングシステムまたはゲストアプリケーション（例えば、要求インスタンス）はハイパーバイザに要求を出し得る。ハイパーコールインタフェース１３０４は、ワーカハイパーバイザ１３０２上で実施される要求インスタンス１３０８（または、処理を要する要求を受信した結果、必ずしもインスタンス化する必要のないその他のインスタンス）の準仮想ハイパーテキスト転送プロトコル（ＨＴＴＰ）ドライバ１３０６からハイパーコールを受信するよう構成されてもよい。ハイパーコールインタフェースは、準仮想ＨＴＴＰドライバ１３０６から受信したハイパーコールをＨＴＴＰハイパーコールハンドラ１３２０に提供してもよい。例示のためにＨＴＴＰを全体的に使用するが、本明細書に記載の多様な技術は、インスタンスにより使用されるその他のプロトコルのサポートに適用されてもよい。
【００８０】
準仮想ＨＴＴＰドライバ１３０６は、ＨＴＴＰオブジェクトモデル１３１０により提供されるＨＴＴＰ要求を生成するインタフェースに類似または対応した、ＨＴＴＰ要求を生成するシステムコールインタフェースを提供するよう構成されてもよい。ＨＴＴＰオブジェクトは、生成されたＨＴＴＰ要求を解釈し、システムコールインタフェースに適した要求構成にしてもよい。また、準仮想ＨＴＴＰドライバ１３０６は、要求インスタンス１３０８及び上記のようなワーカコントローラ１３１６（例えば、図５を参照して上記したワーカコントローラ）により共有されるメモリ領域１３１４内の制御空間１３１２に要求レコードを作成するよう構成されてもよい。制御空間１３１２は、要求レコードに格納されたデータの情報格納用に確保された、共有メモリ領域１３１４の空間であってもよい。準仮想ＨＴＴＰドライバ１３０６は、例えば、要求データを配置した共有メモリ領域１３１４内の位置を示すデータを、制御空間１３１２に書き込むよう構成されてもよい。含まれ得る情報は、要求スロットの識別子、要求スロットでのデータサイズ、要求スロットのサイズ（サイズが変わる実施形態の場合）、及び、一般的に、要求スロットから得る正確なデータ量の特定を可能にする情報を備えてもよい。
【００８１】
共有メモリ領域は、環状（リング）バッファなど、多様な方法で実施されてもよい。多様な実施形態において、ハイパーバイザで実施される各要求インスタンスには各自の共有メモリバッファが提供されるが、本明細書に記載の多様な実施形態を適用し、複数の要求インスタンスがメモリバッファを共有するようにして（例えば、要求インスタンスに要求が一致できるよう情報を追加しトラッキングして）もよい。ＨＴＴＰドライバは、制御空間が配置される位置にメモリを有して構成されてもよい。ＨＴＴＰドライバは、ＨＴＴＰ要求からの構成情報に基づき制御空間内に要求レコードを作成してもよい。
【００８２】
図１３に示したように、要求インスタンスは、場合により要求処理に必要な各種のリソースに不足があってもよい。例えば、多様な要求処理では、伝送制御プロトコル／インタネットプロトコル（ＴＣＰ／ＩＰ）スタックや、その他ネットワークスタックなど、ネットワークスタック（プロトコルスタック）を使用してもよく、当該ネットワークスタックは、プロトコルスイートを実施するプログラムであってもよい。要求インスタンス１３０８はネットワークスタックに不足があり、ネットワークスタックの使用にオーバヘッドを必要としなくてもよい。しかし、要求処理のため、要求インスタンスは、ワーカコントローラ１３１６により実施されるネットワークスタック１３１８と対話してもよい。ワーカコントローラ１３１６は単一ネットワークスタックを動作させてもよいが、当該ネットワークスタックは、ワーカハイパーバイザ１３０２上で実施される複数のインスタンスに使用される。よって、ハイパーコールインタフェース１３０４は、準仮想ＨＴＴＰドライバ１３０６からＨＴＴＰハイパーコールハンドラ１３２０への所定コールを処理するよう構成されてもよい。当該ＨＴＴＰハイパーコールハンドラ１３２０は、準仮想ＨＴＴＰドライバ１３０６からハイパーコールインタフェース１３０４を通るハイパーコールに応答するプログラミングロジックを伴い構成されるワーカコントローラ１３１６のプロセスであってもよい。ＨＴＴＰハイパーコールハンドラ１３２０は、ネットワークスタック１３１８を用いた要求処理に係わる通信を管理するよう構成されてもよい。以下で詳述するように、要求の実データは、共有メモリ領域１３１４の１つまたは複数の要求スロット１３２２を用い、共有メモリ領域１３１４を通してワーカコントローラに提供されてもよい。例えば、アプリケーションコード１３２４が実行されると、アプリケーションとの送受信データを、共有メモリ領域１３１４を介して送信してもよい。準仮想ＨＴＴＰドライバ１３０６により制御空間１３１２に書込まれたデータは、１つまたは複数の要求スロット１３２２を示してもよい。その際、ＨＴＴＰハイパーコールハンドラ１３２０が制御空間１３１２を読み出し、どの制御スロットからデータを取得するかを判断し得るように、要求データを配置することができる。この方法において、ハイパーコールインタフェース１３０４は、データの処理量は少ない（管理データ量が少なければリソースを限定できるため、効率的である）が、要求インスタンス１３０８からワーカコントローラ１３１６への関連データの転送量は大きくするように構成されることが可能である。
【００８３】
図１４は、実施形態における、要求を処理するプロセス１４００の例示的な実施例を示す。プロセス１４００は、上記のワーカハイパーバイザなどのハイパーバイザにより（すなわち、ハイパーバイザの実施が可能なコードに従ったコンピュータシステムにより）実施されてもよい。プロセス１４００は、実施例としてＨＴＴＰを使用するが、上に示したように、プロセス１４００は、その他プロトコルでの使用にも適合されてもよい。ある実施形態において、プロセスは、アプリケーションからＨＴＴＰ要求を受信すること（１４０２）を含む。要求は、ＨＴＴＰオブジェクトモデルを使用し生成されてもよい。さらに、アプリケーションコードは、要求に対する応答に適したＨＴＴＰ要求オブジェクトをインスタンス化してもよい。要求オブジェクトは、例えば、ＪａｖａＳｃｒｉｐｔ（登録商標）  ＸｍｌＨｔｔｐＲｅｑｕｅｓｔオブジェクト、または、Ｎｏｄｅ．ｊｓ  ｃｒｅａｔｅＳｅｒｖｅｒオブジェクトであってもよい。アプリケーションコードの実行により、位置、パラメータ、及び／またはデータなどを有するＨＴＴＰ要求が構成される。
【００８４】
一端ＨＴＴＰオブジェクトが配置されたら、アプリケーションコードは、配置されたＨＴＴＰオブジェクトを利用して、準仮想ＨＴＴＰドライバに対するシステムコールを作成してもよい。よって、プロセス１４００は、準仮想ＨＴＴＰドライバへのシステムコールを受信すること（１４０４）を含んでもよい。例えば、ＨＴＴＰオブジェクトは、カーネルシステムコールを作成し、準仮想ＨＴＴＰドライバを利用してもよい。当該準仮想ＨＴＴＰドライバは、ＨＴＴＰオブジェクトモデルにより提供されるＨＴＴＰ要求を作成するインタフェースに類似または対応した、ＨＴＴＰ要求を作成するシステムコールインタフェースを提供してもよい。ＨＴＴＰオブジェクトは、生成されたＨＴＴＰ要求を解釈し、システムコールインタフェースに適した要求構成にしてもよい。
【００８５】
システムコールを受信すると（１４０４）、準仮想ＨＴＴＰドライバは、例えば、上記のような、ワーカコントローラと要求インスタンスが共有するメモリ領域など、共有メモリ領域内の制御空間に要求レコードを作成してもよい。準仮想ＨＴＴＰドライバは、制御空間が置かれる位置にメモリを有するよう構成されてもよい。準仮想ＨＴＴＰドライバは、ＨＴＴＰ要求からの構成情報に基づき、制御空間内に要求レコードを作成してもよい（１４０６）。ある実施形態において、準仮想ＨＴＴＰドライバは、ＨＴＴＰ要求の構成に基づき、メモリブロックサイズを判断してもよい。ＨＴＴＰドライバは、判断したサイズに基づき、制御空間からメモリブロックを割り当てるよう試み、割り当てたメモリブロックにＨＴＴＰ要求構成のコピーを作成してもよい。ある実施形態において、ＨＴＴＰドライバは、ロックフリー／コンペア・アンド・スワップリンク式リストを実施して使用し、割り当てたメモリへのポインタを有効ＨＴＴＰ要求レコードリストに付ける。要求レコードは、要求レコードの一意的な特定に適した一連の数値、ランダム値及び／またはその他の識別子を含んでもよい。ある実施形態において、識別子はさらに、要求レコードを、１つまたは複数のＨＴＴＰ要求、ＨＴＴＰ要求オブジェクト、または、ＨＴＴＰ要求を生成するアプリケーションコードと関連付けるよう操作されてもよい。
【００８６】
ある実施形態において、プロセス１４００は、共有メモリ領域内に、要求レコードに関連付けた要求スロットを割り当てること（１４０８）を含んでもよい。例えば、ある実施形態において、共有メモリ領域は、リングバッファを使用して組織された１つまたは複数の固定サイズバッファ領域を備えてもよい。ＨＴＴＰドライバは、リースレコードのコンペア・アンド・スワップ割り当てを実施するなどして排他制御を使用し、１つのバッファ領域を割り当ててもよい。ＨＴＴＰドライバは、要求スロットのアドレス及びサイズに要求レコードのフィールドを設定して、要求スロットを要求レコードと関連付けしてもよい。ある実施形態において、１つまたは複数の固定サイズバッファ領域のバッファサイズは、複数種類あってもよく、各バッファサイズは１つまたは複数のバッファ領域のサイズリストに対応する。例えば、第一特定バッファサイズは、要求受信サービス用であり、第二特定バッファサイズは、要求送信サービス用であってもよい。
【００８７】
ＨＴＴＰオブジェクトモデルの命令に基づき、準仮想ＨＴＴＰドライバは、ハイパーコールインタフェースを用いて要求サービスハイパーコールを作成してもよい。ＨＴＴＰドライバは、要求レコードへのサービスが必要であることを示すハイパーコールを作成してもよい。ハイパーコールは、ハイパーコールハンドラが共有メモリ領域内の要求レコードを特定できるよう、要求レコードの識別子を含んでもよい。そのため、ハイパーコールインタフェースは、要求を受信し（１４１０）、ＨＴＴＰハイパーコールハンドラにハイパーコールを通知してもよく（１４１２）、それにより、要求へのサービスが必要であることをハイパーコールハンドラに知らせる。ある実施形態において、ＨＴＴＰハイパーコールハンドラを実行するワーカコントローラは、ハイパーコールイベントディスパッチャにサブスクライブするなどして、関連ハイパーコールの通知を受信するよう構成されてもよい。ワーカコントローラは、受信した通知を、ＨＴＴＰ要求をサービスするハイパーコールハンドラにディスパッチするよう構成されてもよい。
【００８８】
ハイパーコールハンドラは、ハイパーコールを受信すると、共有メモリ領域から要求レコードを検索してもよい（例えば、要求レコードの識別子を用いるなどして）（１４１４）。例えば、ハイパーコールハンドラは、有効ＨＴＴＰ要求の関連リストを調べ、ハイパーコールパラメータとして得た識別子に一致する識別子を有する要求レコードを探してもよい。ＨＴＴＰハイパーコールハンドラが要求レコードを検索した（１４１４）後、ハイパーコールハンドラは、検索した要求レコード、及び、要求レコードに関連付けられた要求スロットにある要求データ、の双方の少なくとも一部に基づき、ネイティブＨＴＴＰ要求をビルドしてもよい。ハイパーコールハンドラは、Ｐｏｒｔａｂｌｅ  Ｃｏｍｐｏｎｅｎｔｓ  （ＰＯＣＯ）  Ｃ＋＋ライブラリまたは、ｌｉｂｃｕｒｌライブラリを用いたオブジェクトモデルなど、第二ＨＴＴＰオブジェクトモデルを用いた第二ＨＴＴＰ要求を生成してもよい。例えば、ハイパーコールハンドラは、第二ＨＴＴＰオブジェクトモデルを用いてＨＴＴＰ要求をビルドし（１４１６）、要求レコードに含まれる位置、パラメータまたはその他類似データを用いてＨＴＴＰ要求を構成してもよい。ハイパーコールハンドラは、要求レコードに関連する要求スロットを利用し、要求スロットのコンテンツに基づき、エンティティボディの構成またはＨＴＴＰ要求の生成を行ってもよい。
【００８９】
ＨＴＴＰ要求がハイパーコールハンドラによりビルドされると（１４１６）、ＨＴＴＰハイパーコールハンドラは、ワーカコントローラにより実施されるネイティブネットワークスタックを用い、ネイティブＨＴＴＰ要求を生成してもよい（１４１８）。ハイパーコールハンドラは、要求レコード及び関連要求スロットをアップデートして、第二ＨＴＴＰ要求からのデータまたは結果を返してもよい。ある実施形態において、ＨＴＴＰドライバは、要求レコードに含まれるセマフォ信号を待つ。ハイパーコールハンドラは、第二ＨＴＴＰ要求に基づき、要求レコード及び要求スロットのコンテンツをアップデートしてもよい。ハイパーコールハンドラは、アップデートが完了すると、セマフォ信号を送ってもよい。アップデートによりＨＴＴＰ応答ストリーム部分がわかるような場合、アップデートが完了すると、ＨＴＴＰドライバはリセットし、再度セマフォ信号を待ってもよい。または、ＨＴＴＰドライバは、アップデートの完了後さらにアップデートを要求されるようであれば、新規にハイパーコール要求を生成してもよい。
【００９０】
プロセス１４００の利用方法を示す例示的な実施例として、ＨＴＴＰハイパーコールハンドラは、ハイパーコールインタフェースからそのような要求通知を受け、ネイティブネットワークスタックにＨＴＴＰリスナを作成してもよい。ＨＴＴＰリスナは、インバウンドＨＴＴＰ要求を待ち、インバウンド要求用データを受信すると、ＨＴＴＰハイパーコールハンドラは、共有メモリを使用し、要求インスタンスに対するデータのマーシャリングを行ってもよい。ＨＴＴＰハイパーコールハンドラは、例えば、準仮想ＨＴＴＰドライバにデータの受信を知らせ、その後、準仮想ＨＴＴＰドライバは、ＨＴＴＰハイパーコールハンドラにより、データを含む１つまたは複数の要求スロットを配置するよう制御空間に書かれた情報等を用い、共有メモリからデータを取得してもよい。データは、処理に備えアプリケーションコードに提供されてもよい。
【００９１】
プロセス１４００は、多様な要求タイプを処理するよう適合されてもよい。例えば、データストリーミングでは、受信データの第一チャンクを上記のように処理されてもよい。類似プロセスでは、ハイパーコールハンドラを介して通信し、今現在の要求に対しては別のデータも受信する必要があることを示唆してもよい。上記のように共有メモリを通してデータを渡してもよい。同様に、データの送信では、ハイパーコールハンドラを通して、データを送信する旨の通知を送信してもよい。ワーカコントローラは、通知を受信すると、インスタンスにより共有メモリ内に配置されたデータを取得し、ネイティブＨＴＴＰ要求をビルドし、データを送信してもよい。
【００９２】
図１５は、多様な実施形態における態様を実施する例示的な環境１５００の態様を示す。説明のためウェブベース環境を使用するが、多様な実施形態を実施するよう別の環境を適宜使用してもよいことが理解される。環境は、電子クライアントデバイス１５０２を備えるが、適切なネットワーク１５０４を介し要求、メッセージ、または情報を送受信でき、デバイスのユーザに情報を返すことが出来る、任意の適切なデバイスを備え得る。そのようなクライアントデバイス実施例として、パーソナルコンピュータ、携帯電話、携帯型メッセージングデバイス、ラップトップコンピュータ、タブレットコンピュータ、セットトップボックス、パーソナルデータアシスタント、組込みコンピュータシステム、電子ブックリーダなどがある。ネットワークは、イントラネット、インターネット、セルラーネットワーク、ローカルエリアネットワーク、またはその他ネットワーク、或いは、それらの組合せなど、適切なネットワークを含み得る。そのようなシステムに使用されるコンポーネントは、少なくとも一部の、選択ネットワークタイプ及び／または選択環境次第で変わる。そのようなネットワークを介した通信用プロトコル及びコンポーネントは、周知であり、本明細書では論じない。有線通信または無線通信、及びそれらの組合せにより、ネットワークを介した通信が可能になる。本実施例において、ネットワークはインターネットを備え、環境は、要求を受信し要求に対する応答でコンテンツをサービスするウェブサーバ１５０６を備えるが、別のネットワークとして、当業者には明らかなように、同様の目的をサービスする代替デバイスも使用され得る。
【００９３】
図に示す環境では、少なくとも１つのアプリケーションサーバ１５０８及びデータストア１５１０を備える。複数のアプリケーションサーバ、層またはその他要素、プロセス、あるいはコンポーネントを連動させまたは構成して、対話が可能になり、適切なデータストアからデータを取得するなどのタスクが実行可能になることを理解すべきである。本明細書で用いるように、サーバは、ハードウェアデバイスまたは仮想コンピュータシステムなど、多様な方法で実施されてもよい。文章中、サーバは、コンピュータシステムで実行されるプログラミングモジュールとしてもよい。本明細書で用いるように、用語「データストア」は、データの格納、入手及び検索が可能であればいずれのデバイス、またはデバイスの組合せとしてもよい。また、標準環境、分散環境またはクラスタ環境にあるデータサーバ、データベース、データ記憶装置、データ記憶媒体のいずれの組合せでもよく、台数も何台であってもよい。アプリケーションサーバは、必要に応じて、一部の（ほとんどであるかもしれないが）入手データやアプリケーション用ビジネスロジックを処理して、１つまたは複数のクライアントデバイス用アプリケーションを実行するが、その際のデータストアとの通信に適したハードウェア及びソフトウェアを含み得る。アプリケーションサーバは、データストアと連携して入手制御サービスを提供してもよく、ユーザに転送するテキスト、グラフ、音声及び／または映像などのコンテンツを作成可能であり、それらコンテンツは、本実施例では、ＨｙｐｅｒＴｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ（「ＨＴＭＬ」）、Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ（「ＸＭＬ」）またはその他適切な構成言語の形式で、ウェブサーバによりユーザに提供されてもよい。全ての要求及び応答の処理は、クライアントデバイス１５０２とアプリケーションサーバ１５０８との間のコンテンツ配信と同様、ウェブサーバを通し得る。本明細書の他の箇所でも論じたように、本明細書で論じた構成コードは、適切であればいずれのデバイスやホストマシン上であっても実行され得るため、ウェブサーバもアプリケーションサーバも必ずしも必要ではなく、単に例示のコンポーネントであることを理解すべきである。さらに、単一デバイスにより実施されると本明細書で記述した動作は、文脈上特段に明示されない限り、分散システムを形成する複数のデバイスにより一括して実施されてもよい。
【００９４】
データストア１５１０は、本開示の特定の態様に関連する、複数の独立したデータテーブル、データベースまたはその他データ記憶構造、及びデータ格納用媒体を含み得る。例えば、図にあるデータストアは、作成側用のコンテンツを提供するために使用可能な作成データ１５１２及びユーザ情報１５１６を格納する構造を備えてもよい。また、図にあるデータストアは、ログデータ１５１４を格納する構造を備えており、報告、分析またはその他目的に使用され得る。例えば、ページイメージ情報やアクセス権情報などをデータストアに格納する必要があり、その構造は上記で適切であると挙げたいずれであってもよく、また、データストア１５１０に別の構造を追加した構造であってもよいような、他にも様々な態様があることを理解すべきである。データストア１５１０は、データストア１５１０に関連付けられたロジックを通して動作可能となり、アプリケーションサーバ１５０８から命令を受信し、命令に応答してデータを取得、アップデートまたは処理する。１つの実施例において、ユーザ自身が操作するデバイスを通して、任意の項目タイプを求めるサーチ要求を出す場合を考える。この場合、データストアは、ユーザ情報を入手しユーザの本人確認を行うこともあるかもしれないが、詳細情報リストにアクセスし当該項目タイプの情報を取得し得る。ユーザデバイス１５０２上でブラウザを介してユーザが閲覧可能なウェブページ上で結果をリスト化するなどして、情報をユーザに渡すことができる。興味のある特定項目の情報は、ブラウザの専用ページまたはウィンドウで閲覧可能にできる。しかし、本開示の実施形態は、必ずしもウェブページのコンテキストに限定されるわけではないが、多くの場合処理要求に適用され、要求は必ずしもコンテンツの要求ではないことに注意すべきである。
【００９５】
一般的に、各サーバは、当該サーバの一般的な管理及び動作に対する実行可能なプログラム命令を提供するオペレーティングシステムを備える。また、一般的に各サーバは、命令を格納するコンピュータ読取可能な記憶媒体（例えば、ハードディスク、ランダムアクセスメモリ、読取専用メモリなど）を備え、当該命令は、サーバのプロセッサにより実行されると、命令が意図する機能をサーバに実行させるものである。オペレーティングシステムに適した実施及びサーバの一般的な機能は、周知でありまたは市販されており、特に本明細書に開示の内容は当業者であれば容易に実施できる。
【００９６】
１つの実施形態において、環境は、１つまたは複数のコンピュータネットワークまたは直接接続を用いて、通信リンクを介して相互接続された複数のコンピュータシステム及びコンポーネントを利用した分散型計算環境である。しかし、そのようなシステムが、図１５に示すコンポーネントの数より少なくても多くても、同様にシステムとして動作可能であることについて、当業者には評価されるであろう。このため、図１５のシステム１５００の描写は、本質的に例示であり、本開示の範囲を限定するものではないと捉えるべきである。
【００９７】
さらに、多様な実施形態が多様な動作環境において実施可能であり、ある動作環境では、１つまたは複数のユーザコンピュータ、計算デバイス、処理デバイスを使用し、多様なアプリケーションのいずれであっても動作可能にできる場合もある。ユーザデバイスまたはクライアントデバイスは、多様な汎用パーソナルコンピュータのいずれであってもよく、セルラーデバイス、無線デバイス及びモバイルデバイスであってもよい。汎用パーソナルコンピュータとは、例えば、標準オペレーティングシステムを実行するデスクトップコンピュータ、ラップトップコンピュータ、またはタブレットコンピュータなどであり、セルラーデバイス、無線デバイス及び携帯デバイスは、携帯用ソフトウェアを実行し、多様なネットワーキングプロトコル及びメッセージングプロトコルのサポートが可能である。また、そのようなシステムは、多様な市販のオペレーティングシステムのいずれであっても実行でき、また開発やデータベース管理などのためにその他周知のアプリケーションを実行する、多様なワークステーションを含み得る。また、これらのデバイスは、ネットワークを介して通信可能な、ダミー端子、シンクライアント、ゲームシステム、及びその他デバイスなど、他の電子デバイスも含み得る。
【００９８】
本開示の多様な実施形態は、当業者であれば精通している少なくとも１つのネットワークを利用し、多様な市販プロトコルのいずれかのプロトコルを用いて通信をサポートする。市販のプロトコルには、例えば、伝送制御プロトコル／インタネットプロトコル（「ＴＣＰ／ＩＰ」）、開放型システム間相互接続（「ＯＳＩ」）モデルの多様な層で動作するプロトコル、ファイル転送プロトコル（「ＦＴＰ」）、ユニバーサルプラグアンドプレイ（「ＵｐｎＰ」）、ネットワークファイルシステム（「ＮＦＳ」）、カモンインタネットファイルシステム（「ＣＩＦＳ」）、及びＡｐｐｌｅＴａｌｋ（登録商標）などがある。ネットワークには、例えば、ローカルエリアネットワーク、ワイドエリアネットワーク、仮想プライベートネットワーク、インターネット、イントラネット、エクストラネット、公衆交換電話網、赤外線ネットワーク、無線ネットワーク、及びそれらの組合せがある。
【００９９】
ウェブサーバを利用する実施形態において、ウェブサーバは、多様なサーバまたはミッドティアアプリケーションのいずれであっても実行でき、例えば、ハイパーテキスト転送プロトコル（「ＨＴＴＰ」）サーバ、ＦＴＰサーバ、共通ゲートウェイインタフェース（「ＣＧＩ」）サーバ、データサーバ、Ｊａｖａ（登録商標）サーバ、及び業務アプリケーションサーバなどを実行できる。また、サーバは、ユーザデバイスからの要求に応答してプログラムまたはスクリプトを実行可能であってもよく、その方法は、例えば、いずれかのプログラミング言語（Ｊａｖａ（登録商標）、Ｃ、Ｃ＃またはＣ＋＋など）、いずれかのスクリプト言語（Ｐｅｒｌ（登録商標）、Ｐｙｔｈｏｎ（登録商標）、またはＴＣＬなど）、またはそれらの組合せで書かれた、１つまたは複数のスクリプトまたはプログラムとして実施される１つまたは複数のウェブアプリケーションを実行するものである。また、サーバはデータサーバを含んでもよく、Ｏｒａｃｌｅ（登録商標）、Ｍｉｃｒｏｓｏｆｔ（登録商標）、Ｓｙｂａｓｅ（登録商標）及びＩＢＭ（登録商標）などの市販のデータサーバがあるが、これらに限定されない。
【０１００】
環境は、上記のように、多様なデータストア、その他メモリ及び記憶媒体を備え得る。これらは、１つまたは複数のコンピュータにローカルな（及び／または、１つまたは複数のコンピュータに配置された）記憶媒体上、またはネットワークで繋がった一部または全てのコンピュータから独立した記憶媒体上など、多様な位置に配置可能である。特定の実施形態セットにおいて、情報は、当業者であれば精通しているストレージエリアネットワーク（「ＳＡＮ」）に置かれてもよい。同様に、コンピュータ、サーバまたはその他ネットワークデバイスによる機能の実行に必要なファイルは全て、適宜ローカル及び／または遠隔で格納されてもよい。システムがコンピュータデバイスを備えている場合、各デバイスは、バスで電気的に接続されるハードウェアエレメントを備えることができ、当該エレメントは、例えば少なくとも１つの中央処理装置（「ＣＰＵ」または「プロセッサ」）、少なくとも１つの入力デバイス（例えば、マウス、キーボード、コントローラ、タッチスクリーン、またはキーパッド）、及び少なくとも１つの出力装置（例えば、ディスプレイ、プリンタ、またはスピーカ）を備える。また、そのようなシステムは、１つまたは複数の記憶装置も備えてもよく、例えば、ディスクデバイス、光学記憶装置、及び固体記憶装置（ランダムアクセスメモリ（「ＲＡＭ」）または読取専用メモリ（「ＲＯＭ」）など）などがあり、また、リムーバブルメディア装置、メモリーカード、フラッシュカードなどがある。
【０１０１】
また、そのようなデバイスは、上記のように、コンピュータ読取可能な記憶媒体リーダ、通信デバイス（例えば、モデム、ネットワークカード（無線または有線）、赤外線通信デバイスなど）、及びワーキングメモリも含み得る。コンピュータ読取可能な記憶媒体リーダは、コンピュータ読取可能な記憶媒体との接続が可能であるか、コンピュータ読取可能な記憶媒体を受けつけるような構成が可能である。コンピュータ読取可能な記憶媒体とは、遠隔、ローカル、固定及び／または取外し可能な記憶装置であり、コンピュータ読取可能な情報を一時的に及び／または永久的に含み、格納し、送信し、検索する記憶媒体を意味する。また、システム及び多様なデバイスは、一般的に、少なくとも１つのワーキングメモリデバイス内に多数のソフトウェアアプリケーション、モジュール、サービス、またはその他エレメントを備えてもよく、オペレーティングシステム、及び、クライアントアプリケーションまたはウェブブラウザなどのアプリケーションプログラムを含んでもよい。上記とは異なる代替実施形態が多種多様にあり得ることも理解されるであろう。例えば、ハードウェアをカスタマイズして使用可能であろうし、特定のエレメントをハードウェア、ソフトウェア（アプレットなどポータブルソフトウェアを含む）またはその両方で実施可能であろう。さらに、ネットワーク入出力デバイスなどその他の計算デバイスへの接続も可能であろう。
【０１０２】
コードまたはコードの一部を含む記憶媒体及びコンピュータ読取可能媒体は、当業界で周知または使用されている適切な媒体のいずれであっても含み得る。当該媒体は、揮発性及び不揮発性、取外し可能及び取外し不可な媒体などの、記憶媒体及び通信媒体を含むがこれらに限定されず、コンピュータ読取可能な命令、データ構造、プログラムモジュールまたはその他データなどの情報を、格納及び／または送信するいずれかの方法または技術で実施される。例えば、ＲＡＭ、ＲＯＭ、電気的消去可能プログラマブル読取専用メモリ（「ＥＥＰＲＯＭ」）、フラッシュメモリまたは他のメモリ技術、コンパクトディスク読取専用メモリ（「ＣＤ−ＲＯＭ」）、デジタル多用途ディスク（ＤＶＤ）またはその他光学ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたはその他磁気記憶デバイス、あるいは、所望の情報の格納に使用でき、システムデバイスによりアクセス可能なその他媒体などがある。本明細書による開示及び技術に基づき、当業者であれば、別の手法及び／または方法を理解し、多様な実施形態を実施できるであろう。
【０１０３】
よって、本明細書及び本図面は、限定するものではなく例示とみなされるべきである。しかし、本請求項で定める発明の広範な趣旨及び範囲から逸脱すること無く成される変形や変更が、多様にあることは明らかであろう。
【０１０４】
上記の内容を以下の項目の観点で見ると、より理解しやすくなるであろう。
・  実行可能な命令を備えて構成された１つまたは複数のコンピュータシステムの制御のもと、
実行可能部を備えるアプリケーションソースを受信し、
当該アプリケーションソースを解析し、当該実行可能部の実行における変動ポイントを判断し、
判断した当該変動ポイントの少なくとも一部に基づく停止ポイントまで、仮想マシンインスタンスにより当該実行可能部を実行し、
当該仮想マシンインスタンスを当該停止ポイントで停止させ、
停止させた当該仮想マシンインスタンスのスナップショットを、当該変動ポイントで、または当該変動ポイント以前で取り、
当該スナップショットを用いて別の仮想マシンインスタンスをインスタンス化する、ことを備える、コンピュータ実施方法。
・  １項に記載のコンピュータ実施方法において、
当該アプリケーションソースを解析することは、判断した当該変動ポイントを含む１つまたは複数の変動ポイントの１つまたは複数の位置について、当該アプリケーションソースにアノテーションを付けることを含み、
当該停止ポイントは、少なくとも一部の当該アノテーション付アプリケーションソースに基づいている、当該コンピュータ実施方法。
・  ２項に記載のコンピュータ実施方法において、当該アプリケーションソースにアノテーションを付けることは、当該アプリケーションソースに参照された１つまたは複数の機能を、変動ポイントに対応する機能一覧に照らすことを含む、当該コンピュータ実施方法。
・  先行する項目のいずれかに記載のコンピュータ実施方法において
当該方法ではさらに、当該変動ポイント以前の実行において、セーフポイントであると判断されるポイントに相当する状態に、当該仮想マシンインスタンスを復元することを備え、
実行において当該セーフポイントであると判断される当該ポイントで、当該スナップショットを取る、当該コンピュータ実施方法。
・  先行する項目のいずれかに記載のコンピュータ実施方法において、当該停止ポイントまで当該実行可能部を実行することは、当該実行可能部の実行をモニタリングし、当該停止ポイントを検出することを含む、当該コンピュータ実施方法。
・  先行する項目のいずれかに記載のコンピュータ実施方法において、当該スナップショットは、当該仮想マシンインスタンスのメモリ空間の少なくとも一部のコピーを符号化し、１つまたは複数のプロセッサレジスタの１つまたは複数の状態、１つまたは複数のフラグの１つまたは複数の状態、１つまたは複数のプログラムカウンタの１つまたは複数の状態、或いは、１つまたは複数のエントリポイントアドレスを備える、当該コンピュータ実施方法。
・  先行する項目のいずれかに記載のコンピュータ実施方法において、別の仮想マシンインスタンスをインスタンス化するのに当該スナップショットを使用することは、仮想マシンインスタンスのインスタンス化に使用可能なアプリケーションイメージのリポジトリに、当該スナップショットを追加し、当該別の仮想マシンインスタンスのインスタンス化において、当該リポジトリから当該スナップショットを検索することを含む、当該コンピュータ実施方法。
・  実行可能な命令を備えて構成された１つまたは複数のコンピュータシステムの制御のもと、
アプリケーションソースの実行可能部にある、１つまたは複数の変動ポイントを特定し、
コンピュータシステムインスタンスにより、当該アプリケーションソースの当該実行可能部の実行をモニタリングし、特定した当該１つまたは複数の変動ポイントから１つの変動ポイントを特定し、
特定した当該１つの変動ポイントの少なくとも一部に基づくポイントで、当該コンピュータシステムインスタンスのスナップショットを取り、
取った当該スナップショットの少なくとも一部に基づく、別のコンピュータシステムインスタンスのインスタンス化に使用可能な、アプリケーションイメージを格納する、ことを備える、コンピュータ実施のアプリケーションイメージ作成方法。
・  ８項に記載のコンピュータ実施方法において、当該１つまたは複数の変動ポイントの各変動ポイントは、複数回の実行において、アプリケーション動作の実行結果に潜在的に変動をもたらす１つまたは複数のコンピュータ実行可能命令に対応する、当該コンピュータ実施方法。
・  ８項または９項に記載のコンピュータ実施方法において、当該１つまたは複数の変動ポイントを特定することは、
当該アプリケーションソースで指定された１つまたは複数の機能を特定し、
特定された当該１つまたは複数の機能が、潜在的に変動ポイントになると判断された機能一覧にあるかを判断する、ことを含む、当該コンピュータ実施方法。
・  ８項乃至１０項のいずれかに記載のコンピュータ実施方法において、当該スナップショットを取ることは、特定した当該変動ポイントでまたは当該変動ポイント以前でセーフポイントを特定することを含み、当該セーフポイントは、復元可能なコンピュータシステムの状態であり、別のコンピュータシステム上で当該アプリケーションソースの当該実行可能部を当該コンピュータシステムの状態からレジューム可能な、当該コンピュータシステムの状態に対応することを受け特定される、当該コンピュータ実施方法。
・  ８項乃至１１項のいずれかに記載のコンピュータ実施方法において、
当該スナップショットを取ることは、特定した当該変動ポイントでまたは当該変動ポイント以前でセーフポイントを特定することを含み、
当該セーフポイントの特定は、当該コンピュータシステムの、異なる時点で取られる複数のスナップショットセットのうち、１つまたは複数のスナップショットに適用されるセーフポイント基準の少なくとも一部に基づいている、当該コンピュータ実施方法。
・  システムであって、
１つまたは複数のプロセッサ、及び
実行可能な命令を備えるメモリを備え、
当該命令は、当該１つまたは複数のプロセッサにより実行されると、当該システムに第一サブシステムを実施させ、
当該第一サブシステムは、
アプリケーションソースの少なくとも一部に基づきコンピュータシステムインスタンスをインスタンス化し、
当該アプリケーションソースの実行可能部を、インスタンス化した当該コンピュータインスタンスにより実施してモニタリングし、変動ポイントを特定し、
特定した当該変動ポイントの少なくとも一部に基づき、当該コンピュータシステムインスタンスのスナップショットを取り、
取った当該スナップショットの少なくとも一部に基づく、別のコンピュータシステムインスタンスのインスタンス化に使用可能な、アプリケーションイメージを格納させるよう、構成されるシステム。
・  さらに第二サブシステムを備え、当該第二サブシステムは、当該アプリケーションソースの当該実行可能部を処理し、複数変動ポイントのセットを特定し、特定された当該変動ポイントは、特定された当該複数変動ポイントセットから特定されるよう構成された、１３項に記載の当該システム。
・  １３項または１４項に記載のシステムにおいて、当該コンピュータシステムインスタンスをインスタンス化することは、
当該アプリケーションソースの少なくとも一部に基づき、ブートストラッププログラムを選択すること、
選択した当該ブートストラッププログラムを実行することを含む、当該システム。
・  １３項乃至１５項のいずれかに記載のシステムにおいて、
当該システムはさらに、コンピュータシステムインスタンスのインスタンス化のため別のシステムがアクセス可能なアプリケーションイメージリポジトリを備え、
当該アプリケーションイメージを格納させることは、当該アプリケーションイメージを当該アプリケーションイメージリポジトリに送信することを含む、当該システム。
・  １３項乃至１６項のいずれかに記載のシステムにおいて、
当該アプリケーションソースに、潜在的な変動ポイントを示す１つまたは複数のアノテーションを付け、
当該アプリケーションソースの当該実行可能部の実行を、当該１つまたは複数のアノテーションの少なくとも一部に基づいてモニタリングする、当該システム。
・  １３項乃至１７項のいずれかに記載のシステムにおいて、特定した当該変動ポイントは、当該アプリケーションソースから確定的に導出できないが実行結果に対応することを受け特定される、当該システム。
・  １３項乃至１８項のいずれかに記載のシステムにおいて、当該アプリケーションソースの当該実行可能部の、インスタンス化された当該コンピュータシステムインスタンスによる実行をモニタリングすることは、インスタンス化された当該コンピュータシステムインスタンスのメモリページが当該変動ポイントに対応する命令を備えることにより、インスタンス化した当該コンピュータシステムインスタンスを中断させる割り込みを発行することを含む、当該システム。
・  １３項乃至１９項のいずれかに記載のシステムにおいて、当該アプリケーションソースの当該実行可能部の、インスタンス化された当該コンピュータシステムインスタンスによる実行をモニタリングすることは、インスタンス化された当該コンピュータシステムインスタンスの外部にあるプロセスに、当該実行が当該変動ポイントに到達したことを通知し、当該プロセスが、インスタンス化された当該コンピュータシステムインスタンスを停止させ得るようにすることを含む、当該システム。
・  コンピュータ読取可能記憶媒体であって、該コンピュータ読取可能記憶媒体に格納された命令を有し、当該命令がコンピュータシステムの１つまたは複数のプロセッサにより実行されると、当該命令は当該コンピュータシステムに、少なくとも、
実行可能部を備えるアプリケーションソースを取得させ、
コンピュータシステムインスタンスに、少なくともいくつかの当該実行可能部を実行させ、
当該実行可能部を部分的に実行した後ではあるが完了前に、当該コンピュータシステムインスタンスのスナップショットを取らせ、当該スナップショットを別のコンピュータシステムインスタンスのインスタンス化に使用可能にし、当該実行可能部の実行を、当該スナップショットが取られたポイントで開始可能にする、コンピュータ読取可能記憶媒体。
・  ２１項に記載のコンピュータ読取可能記憶媒体において、
取得した当該アプリケーションソースを、当該実行可能部の実行を停止する潜在的な１つまたは複数のポイントを示すアノテーションと併せて取得し、
当該コンピュータシステムインスタンスに少なくともいくつかの当該実行可能部を実行させる際、当該スナップショットの取る前の当該アノテーションのうちの１つのアノテーションに従い、当該コンピュータシステムインスタンスを停止する、当該コンピュータ読取可能記憶媒体。
・  ２１項または２２項に記載のコンピュータ読取可能記憶媒体において、当該命令はさらに、当該コンピュータシステムに、仮想マシンとして当該コンピュータシステムインスタンスをインスタンス化させる、当該コンピュータ読取可能記憶媒体。
・  ２１項乃至２３項のいずれかに記載のコンピュータ読取可能記憶媒体において、当該コンピュータシステムインスタンスの当該スナップショットを取ることは、
当該実行可能部の実行においてあるポイントを、当該ポイントでの中央処理装置の状態の少なくとも一部に基づき判断し、
判断した当該ポイントでの当該コンピュータシステムインスタンスの当該スナップショットを取ることを含む、当該コンピュータ読取可能記憶媒体。
・  ２１項乃至２４項のいずれかに記載のコンピュータ読取可能記憶媒体において、取った当該スナップショットは、当該コンピュータシステムインスタンスのメモリ空間の、少なくとも一部のコピーを備え、１つまたは複数のプロセッサレジスタの１つまたは複数の状態、１つまたは複数のフラグの１つまたは複数の状態、１つまたは複数のプログラムカウンタの１つまたは複数の状態、或いは、１つまたは複数のエントリポイントアドレスを備える、当該コンピュータ読取可能記憶媒体。
・  ２１項乃至２５項のいずれかに記載のコンピュータ読取可能記憶媒体において、当該命令はさらに、当該コンピュータシステムに、少なくとも一部の当該スナップショットに基づくアプリケーションイメージを、アプリケーションイメージのリポジトリに送信させ、各アプリケーションイメージを仮想マシンインスタンスのインスタンス化に使用可能にする、当該コンピュータ読取可能記憶媒体。
・  ハイパーバイザを実施する計算デバイス、及び
フロントエンドリスナを備え、
当該フロントエンドリスナは、
ネットワークを介して送信された要求を受信し、
受信した当該要求の少なくとも１つのサブセットの各要求に対し、当該要求に対応するワークトークンを当該ハイパーバイザに提供するよう、構成され、
当該ハイパーバイザは、
当該フロントエンドリスナからワークトークンを受信し、
受信した当該ワークトークンの少なくとも１つのサブセットの各ワークトークンに対し、           
少なくとも一部の当該ワークトークンに基づき、当該ワークトークンに対応する要求の処理に使用可能なアプリケーションイメージを選択し、
少なくとも、選択された当該アプリケーションイメージの当該コピー部分のエントリポイントアドレスを特定し、特定された当該エントリポイントの少なくとも一部に基づきアプリケーションコードの実行を開始することにより、少なくとも一部の選択された当該アプリケーションイメージに基づき仮想コンピュータシステムをインスタンス化し、
当該ワークトークンを用いて、当該フロントエンドリスナから、当該ワークトークンに対応する当該要求のコピーを取得し、当該ワークトークンに対応する当該要求の当該コピーを、インスタンス化された当該仮想コンピュータシステムに提供し、当該仮想コンピュータシステムにより処理されるよう、構成されるシステム。  
・  ２７項に記載のシステムにおいて、
当該ワークトークンを提供することは、少なくとも一部の当該要求に基づき、複数の要求キューから要求キューを選択し、選択した当該要求キューに当該ワークトークンをエンキューすることを含む、当該システム。
・  ２７項または２８項に記載のシステムにおいて、
当該ワークトークンを提供することは、要求キューに当該ワークトークンをエンキューし、
当該フロントエンドリスナから複数のワークトークンを受信する際、当該要求キューから当該複数ワークトークンをデキューすることを含む、当該システム。
・  ２７項乃至２９項のいずれかに記載のシステムにおいて、当該仮想コンピュータシステムをインスタンス化することは、少なくとも一部の選択した当該アプリケーションイメージを、当該仮想コンピュータシステムのメモリパーティションにコピーすることを含む、当該システム。
・  ２７項乃至３０項のいずれかに記載のシステムにおいて、当該アプリケーションイメージは、別の仮想コンピュータシステムのスナップショットの少なくとも一部に基づいており、当該別のコンピュータシステムは、当該アプリケーションイメージに対応するアプリケーションコードの実行可能部を部分的に実行した、当該システム。
・  ２７項乃至３１項のいずれかに記載のシステムにおいて、当該ワークトークンを用いて当該要求の当該コピーを取得することは、
当該ワークトークンにおいて符号化された当該要求の識別子を当該フロントエンドリスナに提供し、
当該フロントエンドリスナにより、提供された当該識別子の少なくとも一部に基づき、当該要求を配置し、
配置された当該要求を当該計算デバイスに送信する、ことを含む、当該システム。
・  要求に応答するためのコンピュータ実施方法であって、
実行可能な命令を備えて構成された１つまたは複数のコンピュータシステムの制御のもと、
当該要求を受信したフロントエンドリスナにより、受信した要求に対応するトークンを受信し、
当該トークンを受信したことを受け、当該要求を処理する仮想コンピュータシステムをインスタンス化し、
受信した当該トークンを用いて、当該フロントエンドリスナから当該要求のコピーを取得し、
当該要求の取得した当該コピーを用いて、当該仮想コンピュータシステムにより当該要求を処理する、コンピュータ実施方法。
・  ３３項に記載のコンピュータ実施方法において、当該フロントエンドリスナ及び当該仮想コンピュータシステムは、別の計算デバイスにより実施される、当該コンピュータ実施方法。
・  ３３項または３４項に記載のコンピュータ実施方法において、当該仮想コンピュータシステムをインスタンス化することは、
当該要求の処理に使用可能なアプリケーション用のアプリケーションイメージを、アプリケーションイメージのリポジトリから入手し、
当該アプリケーションイメージの少なくとも一部を、当該仮想コンピュータシステム用に割当てられたメモリにロードし、
ロードされた当該一部を実行するエントリポイントを特定し、
ロードされた当該一部の実行を開始することを含む、当該コンピュータ実施方法。
・  ３５項に記載のコンピュータ実施方法において、当該アプリケーションイメージを入手することは、当該要求に関連する情報の少なくとも一部に基づき当該アプリケーションイメージを選択することを含み、当該要求に関連する当該情報は、当該要求の１つまたは複数のメッセージヘッダの少なくとも１つ、当該要求のメッセージ本体、当該要求の送信先であるネットワークアドレスに対応するユニフォームリソースロケータ、または、当該ネットワークアドレスを含む、当該コンピュータ実施方法。
・  ３５項に記載のコンピュータ実施方法において、当該アプリケーションイメージに対応するアプリケーションコードの実行可能部を部分的に実行した場合、当該アプリケーションイメージは、停止状態の別の仮想コンピュータシステムの少なくとも一部のスナップショットに基づく、当該コンピュータ実施方法。
・  ３３項乃至３７項のいずれかに記載のコンピュータ実施方法において、当該トークンを受信することは、トークンのキューから当該トークンをデキューすることを含み、当該トークンのそれぞれは当該フロントエンドリスナにより受信された要求に対応している、当該コンピュータ実施方法。
・  ３３項乃至３８項のいずれかに記載のコンピュータ実施方法において、さらに、当該要求の処理が完了したことを受け、当該仮想コンピュータシステムを終了させることを備える、前記コンピュータ実施方法。
・  非一時的なコンピュータ読取可能記憶媒体であって、格納された命令を有し、当該命令がコンピュータシステムの１つまたは複数のプロセッサにより実行されると、当該命令は当該コンピュータシステムに、少なくとも、
コントローラを実施させ、当該コントローラは、
フロントエンドリスナが要求を受信した旨の通知を受信し、
受信した当該通知の少なくとも１つのサブセットの各通知に対し、
仮想コンピュータシステムをインスタンス化し、対応する要求を処理し、
インスタンス化した当該仮想コンピュータシステムに、当該フロントエンドリスナから当該要求のコピーを取得させ、当該要求を処理させるよう、構成される、コンピュータ読取可能記憶媒体。
・  ４０項に記載のコンピュータ読取可能記憶媒体において、
当該命令はさらに、当該コンピュータシステムにハイパーバイザを実施させ、
当該仮想コンピュータシステム及び当該コントローラは、当該ハイパーバイザの異なるドメインで動作する、当該コンピュータ読取可能記憶媒体。
・  ４０項または４１項に記載のコンピュータ読取可能記憶媒体において、当該コントローラはさらに、当該コンピュータシステムの要求処理容量の、少なくとも一部の１つまたは複数回の測定に基づき、当該コンピュータシステムにより同時処理される要求数を調整するよう構成された、当該コンピュータ読取可能記憶媒。         
・  ４０項乃至４２項のいずれかに記載のコンピュータ読取可能記憶媒体において、当該通知は、当該フロントエンドリスナからの当該要求の位置確認に使用可能な情報を符号化するトークンである、当該コンピュータ読取可能記憶媒体。
・  ４０項乃至４３項のいずれかに記載のコンピュータ読取可能記憶媒体において、当該通知を受信することは、キューから対応トークンをデキューすることを含む、当該コンピュータ読取可能記憶媒体。
・  ４０項乃至４４項のいずれかに記載のコンピュータ読取可能記憶媒体において、インスタンス化した当該仮想システムに当該要求の当該コピーを取得させることは、
当該仮想コンピュータシステムによる当該要求の入手の試みを検出し、
当該通知からの情報を用い、当該フロントエンドリスナから当該要求の当該コピーを取得する、ことを含む、当該コンピュータ読取可能記憶媒体。
・  リスナ及びコントローラを備え、
当該リスナは、
要求を受信し、当該受信された要求は、それぞれ異なるアプリケーションによりサービス可能である複数の要求のサブセットを備え、
受信した当該要求の少なくとも１つのサブセットの各要求に対し、
当該要求についての通知を出し、
少なくとも一部の当該通知に基づく第二要求を受信し、
当該第二要求の少なくとも一部の応答に基づき、当該要求のコピーを提供するよう構成され、
当該コントローラは、
当該リスナから出された通知を受信し、
出された当該通知の少なくとも１つのサブセットの、出され受信された各通知に対し、
出された当該通知を用い、当該リスナから出され受信された当該通知に対応する要求のコピーを取得し、
出され受信された当該通知の少なくとも一部に基づき、複数のアプリケーションイメージから、出され受信された当該通知に対応する当該要求の処理が可能なアプリケーションのアプリケーションイメージを選択し、
選択された当該アプリケーションイメージの少なくとも一部に基づき、仮想コンピュータシステムをインスタンス化し、出され受信された当該通知に対応する当該要求の、少なくとも一部の取得した当該コピーに基づき、当該仮想コンピュータシステムに当該要求を処理させるよう、構成されるシステム。
・  ４６項に記載のシステムにおいて、受信された当該要求は、異なるネットワークアドレスにアドレス指定された要求を含み、当該異なるネットワークアドレスの各ネットワークアドレスは、当該複数のアプリケーションイメージの異なるアプリケーションイメージに対応している、当該システム。
・  ４６項または４７項に記載のシステムにおいて、当該コントローラはさらに、出され受信された当該通知に対応する当該要求と当該通知とのコネクションを確立し、当該アプリケーションが当該リスナから当該要求のコピーを取得出来るよう構成された、当該システム。
・  ４６項乃至４８項のいずれかに記載のシステムにおいて、通知を出すことは、要求キューにトークンをエンキューすることを含む、当該システム。
・  ４６項乃至４９項のいずれかに記載のシステムにおいて、選択された当該アプリケーションイメージは、別の仮想コンピュータシステムインスタンスのスナップショットの少なくとも一部に基づいている、当該システム。
・  ４６項乃至５０項のいずれかに記載のシステムにおいて、
出された当該通知を受信することは、出された当該通知をキューからデキューすることを含み、
当該コントローラはさらに、要求処理容量を検出したことを受け、キューされた通知をデキューするよう構成された、当該システム。
・  要求を処理するためのコンピュータ実施方法であって、
実行可能な命令を備えて構成された１つまたは複数のコンピュータシステムの制御のもと、
ハイパーバイザにより、仮想コンピュータシステムインスタンス及びコントローラを実施して、
当該仮想コンピュータシステムインスタンスが、当該要求の受信に使用するプロトコルスタックの１つまたは複数層の実施を不足させるよう、
当該コントローラが、当該仮想コンピュータシステムインスタンスにより当該１つまたは複数層が不足した当該プロトコルスタックを実施させるよう、
共有メモリ領域を、当該仮想コンピュータシステムインスタンス及び当該コントローラの双方からアクセス可能になるようにし、
当該コントローラから当該仮想コンピュータシステムインスタンスへの当該要求のデータを、当該メモリ領域に配置し、
当該共有メモリ領域から当該仮想コンピュータシステムに当該データを提供し、
当該仮想コンピュータシステムから当該コントローラへの、当該要求に対する応答のデータを、当該共有メモリ領域に配置し、
当該共有メモリ領域から当該コントローラに当該応答の当該データを提供し、
当該コントローラの当該プロトコルスタックの当該１つまたは複数の層の当該実施を行い、当該要求に対する当該応答を提供する、コンピュータ実施方法。
・  ５２項に記載のコンピュータ実施方法において、
当該方法ではさらに、当該仮想コンピュータシステムインスタンス及び当該コントローラの双方がアクセス可能な当該ハイパーバイザに対するハイパーコールインタフェースを通して、当該ワーカコントローラのハイパーコールハンドラに通知を出し、
当該ハイパーコールハンドラが当該通知を受信したことを受け、当該共有メモリ領域から当該コントローラに当該応答の当該データを提供する、ことを備えるコンピュータ実施方法。
・  ５２項または５３項に記載のコンピュータ実施方法において、
当該共有メモリ領域に当該要求の当該データを配置することは、当該共有メモリ領域の制御域に、当該制御域の当該データの１つまたは複数の位置を書込むことを含み、
当該共有メモリ領域から当該仮想コンピュータシステムインスタンスに当該データを提供することは、当該制御域に書込まれた当該１つまたは複数の位置の少なくとも一部に基づき、当該データを配置することを含む、当該コンピュータ実施方法。
・  ５２項乃至５４項のいずれかに記載のコンピュータ実施方法ではさらに、
当該仮想コンピュータシステムインスタンスにより、第一オブジェクトモデルを用いて第一リスナオブジェクトを作成し、
当該コントローラにより、当該第一リスナオブジェクトに対応する第二リスナオブジェクトを作成して、当該要求を受信する、ことを備える、コンピュータ実施方法。
・  ５２項乃至５５項のいずれかに記載のコンピュータ実施方法において、当該要求はハイパーテキスト転送プロトコル要求である、当該コンピュータ実施方法。
・  ５２項乃至５６項のいずれかに記載のコンピュータ実施方法ではさらに、
当該ハイパーバイザにより、第二仮想コンピュータシステムインスタンスを実施して、第二共有メモリ領域に、当該第二仮想コンピュータシステムインスタンス及び当該コントローラの双方がアクセス可能になるようにすることを備え、
当該プロトコルスタックの当該１つまたは複数の層の当該実施を当該コントローラが使用して、当該第二仮想コンピュータシステムインスタンスの要求を処理する、コンピュータ実施方法。
・  実行可能な命令を備えて構成された１つまたは複数のコンピュータシステムの制御のもと、
ハイパーバイザの第一ドメインで、コンピュータシステムインスタンスを実施し、
当該ハイパーバイザの第二ドメインで、コントローラを実施し、当該コントローラは、当該コンピュータシステムインスタンスと共有するメモリ領域にアクセスし、当該コンピュータシステムインスタンスにより実施される共有層のプロトコルスタックを備えた、複数層の当該プロトコルスタックを実施し、
当該プロトコルスタックを用いて受信された要求を満たすが、少なくとも、
当該共有層の当該プロトコルスタック及び当該メモリ領域を用いて、当該コンピュータシステムインスタンスから当該コントローラに、当該要求に対する応答データを渡し、
当該複数層の当該プロトコルスタックのうち、当該コンピュータシステムインスタンスの実施に不足がある少なくとも１つの層を用いて、当該第二ドメインで当該応答データに対し１つまたは複数の動作を実施することを備える、コンピュータ実施方法。
・  ５８項に記載のコンピュータ実施方法において、当該要求はハイパーテキスト転送プロトコル要求である、当該コンピュータ実施方法。
・  ５８項または５９項に記載のコンピュータ実施方法において、当該共有層は当該プロトコルスタックのアプリケーション層である、当該コンピュータ実施方法。
・  ５８項乃至６０項のいずれかに記載のコンピュータ実施方法において、当該要求に対する当該応答データを渡すことは、当該コンピュータシステムインスタンスが、当該ハイパーバイザのハイパーコールインタフェースに対する準仮想デバイスドライバと対話したことを受け、当該コントローラにハイパーコールを送信することを含む、当該コンピュータ実施方法。
・  ５８項乃至６１項のいずれかに記載のコンピュータ実施方法において
当該メモリ領域は、制御空間及び複数の要求スロットを備えるよう構成され、
当該コンピュータシステムインスタンスから当該コントローラに当該応答データを渡すことは、少なくとも当該制御空間にアクセスし、当該複数の要求スロットのうち少なくとも一部の当該応答データを有する１つの要求スロットを判断することにより、当該コントローラに当該応答データを取得させることを含む、当該コンピュータ実施方法。
・  ５８項乃至６２項のいずれかに記載のコンピュータ実施方法において、当該要求を満たすことは、当該第二ドメインで受信された当該要求に対応する第一要求を当該第一ドメインに生成することを含む、当該コンピュータ実施方法。
・  １つまたは複数のプロセッサ、及び
命令を備えたメモリを備え、
当該命令は、当該１つまたは複数のプロセッサにより実行されると、当該システムに、
ハイパーバイザ、
当該ハイパーバイザ上で動作する１つまたは複数のコンピュータシステムインスタンス、
当該ハイパーバイザ上で動作するコントローラ、及び
当該１つまたは複数のコンピュータシステムインスタンスの各コンピュータシステムインスタンスに対し、当該コンピュータシステムインスタンス及び当該コントローラにより共有されるメモリ空間、を実施させ、
当該ハイパーバイザ、当該コンピュータシステムインスタンス、及び当該コントローラは、当該メモリ空間に当該要求データを配置することで利用可能になる要求に対する応答のデータについて、当該コンピュータシステムインスタンスから当該コントローラにハイパーコールを通して通知し、少なくとも部分的に当該コントローラにより当該コンピュータシステムの当該要求が満たされるよう一括して構成されるシステム。
・  ６４項に記載のシステムにおいて、当該コンピュータシステムインスタンスは、当該ハイパーバイザにより実施されたハイパーコールインタフェースに対する準仮想デバイスドライバを備え、当該コンピュータシステムインスタンス及びコントローラのどちらか一方からのハイパーコールが、当該コンピュータシステムインスタンス及び当該コントローラの他方への通信のトリガとなるようにする、当該システム。
・  ６４項または６５項に記載のシステムにおいて、
当該コントローラは、プロトコルスイートの第一層セットを実施して備え、
当該コンピュータシステムインスタンスは、当該プロトコルスイートの第二層セットを実施して備え、
当該第一層セット及び当該第二層セットは、異なるが共通部分を有し、
当該要求を満たすことは、当該コントローラにより当該プロトコルスイートの当該第一層セットを使用することを含む、当該システム。
・  ６４項乃至６６項のいずれかに記載のシステムにおいて、当該要求はＨＴＴＰ要求である、当該システム。
・  ６４項乃至６７項のいずれかに記載のシステムにおいて、当該要求データを当該メモリ空間に配置することは、当該メモリ空間の第一部に第一データを書込むこと、当該メモリ空間の第二部に第二データを書込むことを含み、当該第一データは、当該メモリ空間の当該第二部にある当該第二データの位置を示す、当該システム。
・  ６４項乃至６８項のいずれかに記載のシステムにおいて、当該コントローラはハイパーコールハンドラを備え、当該ハイパーコールハンドラは、当該ハイパーバイザのハイパーコールインタフェースからハイパーコールを受信し、当該メモリ空間にアクセスして要求をサービスすべきか判断するよう構成された、当該システム。
・  コンピュータ読取可能記憶媒体であって、格納された命令を有し、当該命令がコンピュータシステムの１つまたは複数のプロセッサにより実行されると、当該命令は当該コンピュータシステムに、少なくとも、
ハイパーバイザの第一ドメインにコンピュータシステムインスタンス、
当該ハイパーバイザの第二ドメインにコントローラ、及び
当該コントローラ及び当該コンピュータシステムインスタンスの双方がアクセス可能なメモリ領域、を実施させ、
当該コンピュータシステムインスタンス及びコントローラは、連携して要求処理するよう一括で構成され、要求を満たすことは、
当該ハイパーバイザのハイパーコールインタフェース及び当該メモリ領域を用いて、当該コンピュータシステムインスタンスと当該コントローラとの間でデータを渡すこと、
当該コンピュータシステムインスタンス及び当該コントローラの双方にそれぞれ、当該データに関連して１つまたは複数の動作を実行させるようにすること、を含む、コンピュータ読取可能記憶媒体。
・  ７０項に記載のコンピュータ読取可能記憶媒体において、当該要求はハイパーテキスト転送プロトコル要求である、当該コンピュータ読取可能記憶媒体。
・  ７０項または７１項に記載のコンピュータ読取可能記憶媒体において、当該コンピュータシステムインスタンスと当該コントローラとの間で当該データを渡すことは、当該コンピュータシステムインスタンスは、準仮想デバイスドライバと対話し、当該メモリ領域にある当該データについての通知を、当該コントローラに向け出させることを含む、当該コンピュータ読取可能記憶媒体。
・  ７２項に記載のコンピュータ読取可能記憶媒体において、当該通知は当該要求の識別子を備え、当該コンピュータシステムインスタンスと当該コントローラとの間で当該データを渡すことは、さらに、当該識別子を用いて位置を判断し、当該メモリ領域に格納された複数のデータインスタンスから当該要求データを選択することを含む、当該コンピュータ読取可能記憶媒体。
・  ７０項乃至７３項のいずれかに記載のコンピュータ読取可能記憶媒体において、
当該コントローラは、当該コンピュータシステムインスタンスにより実施されない、１つまたは複数層のプロトコルスタックを実施し、
当該要求処理では、当該１つまたは複数層の当該プロトコルスタックを使用する、当該コンピュータ読取可能記憶媒体。
・  ７０項乃至７４項のいずれかに記載のコンピュータ読取可能記憶媒体において、
当該命令はさらに、当該コンピュータシステムに別の１つまたは複数のコンピュータシステムインスタンスを実施させ、
実施された当該１つまたは複数層の当該プロトコルスタックは、当該別の１つまたは複数のコンピュータシステムインスタンスのそれぞれの要求処理に使用され、
当該メモリ領域に、当該別の１つまたは複数のコンピュータシステムインスタンスがアクセスできない、当該コンピュータ読取可能記憶媒体。
【０１０５】
その他変形も本開示の範囲内にある。このため、本開示の技術は、様々な変更及び代替構造に影響されやすいが、所定の例示的な実施形態は図で示され、上で詳述された。しかし、本発明により開示された特定の形式に限定する意図は無く、反対に、あらゆる変更、代替構造、及び、本発明の趣旨及び範囲に入る同等物を、添付の請求項の定義に包含することを意図していると理解すべきである。
【０１０６】
本開示の実施形態の記述（特に、次にあげる請求項での文脈において）において、不定冠詞（「ａ」及び「ａｎ」）、不定冠詞（「ｔｈｅ」）及び同種の指示語の使用は、本明細書に特段の記載、または文脈での明確な否定がない限り、単数も複数も本開示の範囲であると解釈されるものである。用語「備える」（「ｃｏｍｐｒｉｓｉｎｇ」）、「有する」（「ｈａｖｉｎｇ」）及び「含む」（「ｉｎｃｌｕｄｉｎｇ」及び「ｃｏｎｔａｉｎｉｎｇ」）、などは、特段に記載が無い限り、オープンエンドタイプの用語（すなわち、「含むが、限定されない」）と解釈されるものである。物理的接続を意味する場合の用語「接続（され）」は、間に仲介物があっても、部分的または全体的な相互接触または相互固着として解釈されるものである。本明細書にて挙げた範囲値は、単に、それぞれが範囲に当てはまる値として参照する簡略法として挙げたものであり、本明細書に特段の記載がない限り、個々の値は、本明細書にそれぞれ挙げられた通り、本明細書に組み込まれる。特段の記載、または文脈での否定がない限り、用語「セット」（例えば、「対象物のセット」）または「サブセット」は、１つまたは複数の構成を含む空ではない集合体として解釈されるものである。さらに、特段の記載、または文脈での否定がない限り、対応するセットがある場合の用語「サブセット」は、対応するセットのサブセットを必ずしも明確に表示する必要もないが、サブセットも対応するセットも同じものであってもよい。
【０１０７】
「Ａ、Ｂ、及びＣの少なくとも１つ」または「Ａ、Ｂ及びＣの少なくとも１つ」形式の言い回しなどの連結表現は、特段の記載、または文脈での明確な否定がない限り、一般的に、アイテム、期間などがＡまたはＢまたはＣのいずれかであるか、Ａ及びＢ及びＣのセットの空でないサブセットを表すよう使用される文脈であると理解される。例えば、上記の連結した言い回しでの３つの構成を有するセットの例示例において、「Ａ、Ｂ、及びＣの少なくとも１つ」及び「Ａ、Ｂ及びＣの少なくとも１つ」は、次のセットのいずれでもある：｛Ａ｝、｛Ｂ｝、｛Ｃ｝、｛Ａ、Ｂ｝、｛Ａ、Ｃ｝、｛Ｂ、Ｃ｝、｛Ａ、Ｂ、Ｃ｝。このため、連結表現は一般的に、少なくとも１つのＡ、少なくとも１つのＢ、及び少なくとも１つのＣのそれぞれが存在するような任意の実施形態を意味するものではない。
【０１０８】
本明細書に記載のプロセスの動作は、本明細書に特段の記載、または文脈での明確な否定がない限り、任意の順で実施可能である。本明細書に記載のプロセス（または変形及び／または変形の組合せ）は、実行可能な命令を備えて構成された１つまたは複数のコンピュータシステムの制御のもと実行されてもよく、ハードウェアまたはハードウェアの組合せにより、１つまたは複数のプロセッサ上で一括して実行するコード（例えば、実行可能な命令、１つまたは複数のコンピュータプログラム、または１つまたは複数のアプリケーション）として実行されてもよい。コードは、例えば、１つまたは複数のプロセッサにより実行可能な複数の命令を備えるコンピュータプログラムの形式で、コンピュータ読取可能記憶媒体に格納されてもよい。コンピュータ読取可能記憶媒体は、非一時的であってもよい。
【０１０９】
本明細書で一部及び全ての実施例、または例示的な表現（例えば、「など」）を使うのは、単に本発明をより分かりやすくするためであり、請求しない限り、本発明の範囲の限定するものではない。本発明の実施に不可欠な要素であるのに、本明細書の表現を理由に、請求されていない要素であるなどと解釈すべきでない。
【０１１０】
本開示による好適な実施形態は、本明細書にて記述されているが、本発明を実行する発明者に周知の最適な様式も含む。好適な実施形態の変形は、上で論じた内容を当業者が読めば明らかであろう。発明者は、技能者が適宜変形することを期待し、発明者は、本開示の実施形態が、本明細書で明確に記載した実施形態とは異なって実行されることも意図する。よって、本開示の範囲は、適用法令に基づき、あらゆる変形、及び本明細書に添付の請求項に挙げた内容と同等なものを含む。さらに、本明細書にて特段の記載、または文脈での明確な否定がない限り、可能性のあるあらゆる変形における上記の構成要素のあらゆる組合せも、本開示の範囲に包含される。
【０１１１】
本明細書で引用した、出版物、特許申請及び特許を含めたあらゆる引用文献は、各引用文献を、引用により本明細書の一部として個々に具体的に表示し、本明細書にて全て定めたと見なし援用するものである。
【図１Ａ】
2020038692.tif 000003
【図１Ｂ】
2020038692.tif 000004
【図１Ｃ】
2020038692.tif 000005
【図２】
2020038692.tif 000006
【図３】
2020038692.tif 000007
【図４】
2020038692.tif 000008
【図５】
2020038692.tif 000009
【図６】
2020038692.tif 000010
【図７】
2020038692.tif 000011
【図８】
2020038692.tif 000012
【図９】
2020038692.tif 000013
【図１０】
2020038692.tif 000014
【図１１】
2020038692.tif 000015
【図１２】
2020038692.tif 000016
【図１３】
2020038692.tif 000017
【図１４】
2020038692.tif 000018
【図１５】
2020038692.tif 000019