(57)【要約】本発明は、リモート・プレゼンテーション・セッションを行うためにウェブ・ブラウザを用いるクライアントとのリモート・プレゼンテーション・セッションを行うために開示する。実施形態では、リモート・プレゼンテーション・サーバとクライアントとの間にプロキシ・サーバが存在する。プロキシ・サーバは、クライアントとのＨＴＴＰセッションと、クライアントとのリモート・プレゼンテーション・セッションとを確立する。サーバは、リモート・プレゼンテーション・プロトコルでエンコードされたグラフィックスを生成し、それらをプロキシへ送り、プロキシは、それらをビデオに再エンコードし、それらを、ウェブ・ブラウザで表示するようにクライアントへ送る。クライアントは、ウェブ・ブラウザでユーザ入力を取り込み、それをプロキシへ送り、プロキシは、それをリモート・プレゼンテーション・プロトコルでエンコードし、それを、処理されるようにサーバへ送る。
2014523669.tif 000002
【特許請求の範囲】
【請求項１】
ウェブ・ブラウザを用いるクライアントとのリモート・プレゼンテーション・セッションを行う方法であって、
前記クライアントとの、ハイパーテキスト・トランスファー・プロトコル（ＨＴＴＰ）・セッションを含むリモート・プレゼンテーション・セッションを確立するステップと、
前記リモート・プレゼンテーション・セッションにおいて前記クライアントへ送るグラフィカル・データを求めるステップと、
前記グラフィカル・データをビデオとしてエンコードするステップと、
前記クライアントが前記ビデオを前記ウェブ・ブラウザで表示するように、前記ＨＴＴＰセッションを介して前記クライアントへ前記ビデオを送るステップと
を含む方法。
【請求項２】
請求項１に記載の方法であって、
前記ウェブ・ブラウザへ向けられたユーザ入力を前記クライアントから受けるステップと、
前記ユーザ入力に対応する、前記グラフィカル・データの少なくとも一部を生成したアプリケーションを求めるステップと、
前記アプリケーションが前記ユーザ入力に対応する結果を処理するように、前記アプリケーションへ前記ユーザ入力を入れるステップと
を更に含む方法。
【請求項３】
請求項１に記載の方法であって、前記クライアントへ送るグラフィカル・データを求める前記ステップのオペレーションは、第１のコンピュータにより行われ、前記グラフィカル・データをビデオとしてエンコードする前記ステップと、前記クライアントへ前記ビデオを送る前記ステップとのオペレーションは、第２のコンピュータにより行われ、
前記第１のコンピュータと前記第２のコンピュータとの間でのリモート・プレゼンテーション・セッションを確立するステップと、
前記グラフィカル・データをエンコードする前に、前記第２のコンピュータにより前記第１のコンピュータから、リモート・プレゼンテーション・プロトコルでエンコードされた前記グラフィカル・データを受けるステップと、
前記リモート・プレゼンテーション・プロトコルでエンコードされた前記グラフィカル・データをデコードして、前記グラフィカル・データをビデオとしてエンコードする前の前記グラフィカル・データを求めるステップと
を更に含む方法。
【請求項４】
請求項１に記載の方法であって、前記グラフィカル・データをビデオとしてエンコードする前記ステップは、
以前に第２のグラフィカル・データを第２のビデオとしてエンコードしたことに基づいて、前記グラフィカル・データをビデオとしてエンコードするステップ
を含む、方法。
【請求項５】
請求項４に記載の方法であって、以前に第２のグラフィカル・データをビデオとしてエンコードしたことに基づいて、前記グラフィカル・データをビデオとしてエンコードする前記ステップは、
前記第２のグラフィカル・データと比較したときの前記グラフィカル・データのダーティー領域に基づいて前記グラフィカル・データをエンコードするステップと、前記グラフィカル・データをエンコードするために前記第２のビデオの少なくとも一部を用いるステップと
を含む、方法。
【請求項６】
請求項４に記載の方法であって、以前に第２のグラフィカル・データをビデオとしてエンコードしたことに基づいて、前記グラフィカル・データをビデオとしてエンコードする前記ステップは、
前記グラフィカル・データに示され前記第２のグラフィカル・データにも示されているエレメントに基づいて前記グラフィカル・データをエンコードするステップであって、前記エレメントは、前記グラフィカル・データと前記第２のグラフィカル・データとでは異なる場所に示された、ステップと、前記グラフィカル・データをエンコードするために前記第２のビデオの少なくとも一部を用いるステップと
を含む、方法。
【請求項７】
請求項１に記載の方法であって、前記クライアントが前記ビデオを前記ウェブ・ブラウザで表示するように、前記ＨＴＴＰセッションを介して前記クライアントへ前記ビデオを送る前記ステップは、
前記クライアントが前記ビデオを、前記ウェブ・ブラウザで表示されるウェブ・ページへ埋め込まれたビデオ・エレメントとして表示するように、前記ＨＴＴＰセッションを介して前記クライアントへ前記ビデオを送るステップ
を含む、方法。
【請求項８】
請求項１に記載の方法であって、
前記リモート・プレゼンテーション・セッションにおいて前記クライアントへ送るグラフィカル・データを求める前に、前記ＨＴＴＰセッションを介して受けた前記クライアントの資格情報の検証を行うステップ
を更に含む方法。
【請求項９】
請求項１に記載の方法であって、
前記グラフィカル・データの第１の部分がテキストを含むことおよび前記グラフィカル・データの第２の部分がイメージまたはビデオを含むことのインジケーションを受けるステップ
を更に含み、
前記グラフィカル・データをビデオとしてエンコードする前記ステップは、
前記グラフィカル・データの前記第１の部分がテキストを含むことおよび前記グラフィカル・データの前記第２の部分がイメージまたはビデオを含むことの前記インジケーションに基づいて、前記グラフィカル・データをビデオとしてエンコードするステップ
を含む、方法。
【請求項１０】
サーバとのリモート・プレゼンテーション・セッションを行うためにウェブ・ブラウザを用いるためのシステムであって、
プロセッサと、
前記システムが動作するときに前記プロセッサと通信するように結合されるメモリであって、プロセッサ実行可能命令を有し、前記プロセッサ実行可能命令が前記プロセッサにより実行されると、前記システムに、少なくとも、
前記サーバとの、ハイパーテキスト・トランスファー・プロトコル（ＨＴＴＰ）・セッションを含むリモート・プレゼンテーション・セッションを確立することと、
前記サーバでアプリケーションまたはユーザ・セッションを実行することから得られるグラフィカル出力を含むビデオを、前記ＨＴＴＰセッションを介して前記サーバから受けることと、
前記ウェブ・ブラウザで前記ビデオを表示することと
を実行させる、メモリと
を含むシステム。
【請求項１１】
請求項１０に記載のシステムであって、前記メモリは、更なるプロセッサ実行可能命令を有し、前記更なるプロセッサ実行可能命令が前記プロセッサにより実行されると、前記システムに、少なくとも、
前記ＨＴＴＰセッションを介して前記サーバからビデオを受ける前に、前記サーバとのリモート・プレゼンテーション・セッションを行うことを許可されたユーザと関連する資格情報を、前記ＨＴＴＰセッションを介して前記サーバへ送ること
を実行させる、システム。
【発明の詳細な説明】
【背景技術】
【０００１】
[0001]  リモート・プレゼンテーション・セッションにおいて、クライアント・コンピュータとサーバ・コンピュータとは通信ネットワークを介して通信する。クライアントは、マウスのカーソルを動かしたりキーボードを押すなどによりローカルに受け取られた入力を、サーバへ送る。サーバは、その入力を受け取り、それと関連する処理、例えば、ユーザ・セッションにおけるアプリケーションの実行などを行う。サーバは、グラフィカル出力や音などのような出力を結果として生じさせる処理を行うと、その出力を、呈示するためにクライアントへ送る。このように、クライアントのユーザからは、アプリケーションが、実際にはサーバで実行されているときに、クライアントでローカルに実行されているように見える。
【０００２】
[0002]  従来のリモート・プレゼンテーション・セッションでの問題は、リモート・プレゼンテーション・セッションに参加しているクライアントが、リモート・プレゼンテーション・セッション・アプリケーションをインストールする必要があるということである。そのアプリケーションは、リモート・プレゼンテーション・セッション・プロトコルに従ってサーバと通信するように構成されるアプリケーションである。この必要性の意味するところは、リモート・プレゼンテーション・セッション・サーバと通信できるネットワーク接続を有するユーザへアクセス可能であるが、セッションを行うために用いるリモート・プレゼンテーション・セッション・アプリケーションを欠いている多くのコンピュータが存在し得る、ということである。
【０００３】
[0003]  また、クライアントが、リモート・プレゼンテーション・セッションの特定のアプリケーションではなくウェブ・ブラウザを用いてリモート・プレゼンテーション・セッションを行う技術もある。それらの技術では、一般に、リモートのデスクトップ・イメージが複数のタイルへと分割され、イメージ・タイルのそれぞれ（または、クライアントがタイルをキャッシュしている場合には、タイルのインジケーション（indication））がクライアントへ送られ、クライアントのウェブ・ブラウザで表示される。リモートのデスクトップ・イメージが変化すると、「ダーティー」タイル、即ち、イメージが変化したタイルが決定され、ダーティー・タイルが、ウェブ・ブラウザでの表示のためにクライアントへ送られる。
【０００４】
[0004]  クライアントがウェブ・ブラウザを用いてリモート・プレゼンテーション・セッションを行うこれらの技術には多くの問題があり、それらのうちの幾つかはよく知られている。
【発明の概要】
【０００５】
[0005]  クライアントがイメージ・タイルを表示する場合における、ウェブ・ブラウザを用いてリモート・プレゼンテーション・セッションを行うクライアントに関する１つの問題は、性能の問題である。特定のリモート・プレゼンテーション・セッション・アプリケーションを用いるリモート・プレゼンテーション・セッションと比較すると、ウェブ・ブラウザおよびイメージ・タイルを用いる技術は、フレーム・レートがかなり低い。また、フレーム・レートがかなり低いだけではなく、そのように低いフレーム・レートは、ユーザ経験に関して好ましくない影響を与える場合が多い。即ち、フレーム・レートが遅いことが多いと、リモート・プレゼンテーション・セッションで表示される動きがぎくしゃくしたものになり、ユーザが供給した入力と、その入力の処理から得られるグラフィカル結果をユーザが見るときとの間が、離れてしまう。
【０００６】
[0006]  従って、リモート・プレゼンテーション・セッション・アプリケーションを欠くクライアントが、イメージ・タイルではなくビデオを用いてサーバとのリモート・プレゼンテーション・セッションを行うための発明を提供するための改善があり得る。本発明の実施形態では、クライアントはウェブ・ブラウザ・アプリケーションを有し、そのウェブ・ブラウザ・アプリケーションは、ビデオを表示するように、およびウェブ・ブラウザ・アプリケーションへ向けられたユーザ入力を受け取るように、構成される。クライアントは、ウェブ・ブラウザを用いて、サーバとのＡｊａｘ（Ａｓｙｎｃｈｒｏｎｏｕｓ  ＪａｖａＳｃｒｉｐｔ（登録商標）  ａｎｄ  ＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ））接続を確立して接続を開く。次に、クライアントとサーバとは情報を交換して、サーバに対してクライアントを認証する。
【０００７】
[0007]  次に、クライアントは、ウェブ・ブラウザ・ウィンドウへ向けられたユーザ入力（例えば、マウスやキーボードやタッチ）を取り込み、それを、例えばＸＭＬやＪＳＯＮとしてフォーマットされたサーバへ非同期で送り、サーバは、その入力を受け取り、適切なアプリケーションまたはユーザ・セッションへ入れる（injects）。アプリケーションまたはユーザ・セッションがグラフィカル出力を生成すると、サーバは、そのグラフィカル出力を取り込み、ビデオへとエンコードし、それを、ウェブ・ブラウザを介しての表示のためにクライアントへ送る。
【図面の簡単な説明】
【０００８】
【図１】図１は、本発明の実施形態を実施できる例示的な汎用コンピューティング環境を示す。
【図２】図２は、本発明の実施形態を実施できる例示的なリモート・プレゼンテーション・セッション・サーバを示す。
【図３】図３は、ウェブ・ブラウザとのリモート・プレゼンテーション・セッションを行うクライアントを示し、この図では、プロキシがリモート・プレゼンテーション・セッション・データをビデオに変換する。
【図４】図４は、ウェブ・ブラウザとのリモート・プレゼンテーション・セッションを行うクライアントを示し、この図では、サーバが、リモートのデスクトップまたはアプリケーションのインスタンスにより生成されたグラフィカル出力からビデオを生成する。
【図５】図５は、サーバとのリモート・プレゼンテーション・セッションを行う２つのクライアントを示し、１つのクライアントは、ウェブ・ブラウザを用い、プロキシを通じて通信を行い、グラフィックスをビデオとして受け取り、１つのクライアントは、サーバと直接に通信し、リモート・プレゼンテーション・セッション・データとしてエンコードされたグラフィックスを受け取る。
【図６】図６は、ビデオとしてエンコードされるグラフィカル・データの２つのフレームを示し、各フレームの１つの部分は同じイメージを含むが場所が異なり、一方のフレームは他方のフレームのエンコーディングに基づいてエンコードされる。
【図７】図７は、ビデオとしてエンコードされるグラフィカル・データの１つのフレームを示し、このフレームは、前のフレームと共通の特徴を共有し、かつフレームが異なっている「ダーティー」領域を有する。
【図８】図８は、リモート・プレゼンテーション・セッションにおいてウェブ・ブラウザを用いるクライアントとのリモート・プレゼンテーション・セッションを行うサーバのための例示的な動作プロシージャを示す。
【図９】図９は、リモート・プレゼンテーション・セッション・サーバと、リモート・プレゼンテーション・セッションでウェブ・ブラウザを用いるクライアントとの間でのリモート・プレゼンテーション・セッションを促進させるプロキシ・サーバのための例示的な動作プロシージャを示す。
【図１０】図１０は、サーバとのリモート・プレゼンテーション・セッションを行うためにウェブ・ブラウザを用いるクライアントのための例示的な動作プロシージャを示す。
【図１１】図１１は、クライアントとのリモート・プレゼンテーション・セッションを行う１以上の仮想マシンをホストすることができる例示的な仮想マシン・サーバを示し、クライアントは、ウェブ・ブラウザを用い、リモート・プレゼンテーション・グラフィックスをビデオとして受け取る。
【図１２】図１２は、クライアントとのリモート・プレゼンテーション・セッションを行う１以上の仮想マシンをホストすることができる別の例示的な仮想マシン・サーバを示し、クライアントは、ウェブ・ブラウザを用い、リモート・プレゼンテーション・グラフィックスをビデオとして受け取る。
【図１３】図１３は、複数の仮想マシンをホストする仮想マシン・サーバを含む例示的なシステムを示し、各仮想マシンは、クライアントとのリモート・プレゼンテーション・セッションを行い、クライアントは、ウェブ・ブラウザを用い、リモート・プレゼンテーション・グラフィックスをビデオとして受け取る。
【発明を実施するための形態】
【０００９】
[0021]  本発明の実施形態は、１以上のコンピュータ・システムで実行することができる。図１および以下の説明は、本発明の実施形態を実施できる適切なコンピュータ環境の簡単な一般的説明を提供することを意図している。
【００１０】
[0022]  図１は、例示的な汎用コンピューティング・システムを示す。汎用コンピューティング・システムは、プロセッシング・ユニット２１を含む従来のコンピュータ２０などを含むことができる。プロセッシング・ユニット２１は１以上のプロセッサを含むことができ、各プロセッサは１以上のプロセッシング・コアを有することができる。１より多くのプロセッシング・コアを有するプロセッサはマルチコア・プロセッサと呼ばれることが多く、マルチコア・プロセッサは、シングル・チップ・パッケージ内に含まれる複数のプロセッサを含む。
【００１１】
[0023]  また、コンピュータ２０は、グラフィックス・プロセッシング・ユニット（ＧＰＵ）９０を含むことができる。ＧＰＵ９０は、コンピュータ・グラフィックスを操作するために最適化された特殊なマイクロプロセッサである。プロセッシング・ユニット２１は、作業をＧＰＵ９０へ委ねることができる。ＧＰＵ９０は、それ自体のグラフィックス・メモリを有すること、および／またはシステム・メモリ２２の一部へアクセスすることができる。プロセッシング・ユニット２１と同様に、ＧＰＵ９０は１以上のプロセッシング・ユニットを含むことができ、各プロセッシング・ユニットは１以上のコアを有することができる。
【００１２】
[0024]  また、コンピュータ２０は、システム・メモリ２２とシステム・バス２３とを含むことができ、システム・バス２３は、システムが動作状態のときに、システム・メモリ２２を含む様々なシステム・コンポーネントを、プロセッシング・ユニット２１と通信できるように結合する。システム・メモリ２２は、リード・オンリー・メモリ（ＲＯＭ）２４とランダム・アクセス・メモリ（ＲＡＭ）２５とを含むことができる。スタート・アップの時などにコンピュータ２０内のエレメント間での情報の転送を手助けする基本的ルーチンを含むベーシック入出力システム（ＢＩＯＳ）２６は、ＲＯＭ２４に格納される。システム・バス２３は、メモリ・バスまたはメモリ・コントローラー、周辺バス、またはローカル・バスを含む幾つかのタイプのバス構造のうちの任意のものであり、様々なバス構造のうちの任意のものを実装する。システム・バス２３には、ダイレクト・メモリ・アクセス（ＤＭＡ）・コントローラー８０を結合することができ、ＤＭＡコントローラー８０は、プロセッシング・ユニット２１から独立してメモリに対する読み出しおよび／または書き込みを行うように構成される。更に、ストレージ・ドライブＩ／Ｆ３２や磁気ディスク・ドライブＩ／Ｆ３３などのような、システム・バス２３へ接続されるデバイスもまた、プロセッシング・ユニット２１から独立して、ＤＭＡコントローラー８０を用いずに、メモリに対する読み出しおよび／または書き込みを行うように構成される。
【００１３】
[0025]  コンピュータ２０は、ハード・ディスク（示さず）またはソリッド・ステート・ディスク（ＳＳＤ）（示さず）に対する読み出しおよび書き込みを行うためのストレージ・ドライブ２７と、取り外し可能磁気ディスク２９に対する読み出しおよび書き込みを行うための磁気ディスク・ドライブ２８と、ＣＤ−ＲＯＭや他の光媒体などのような取り外し可能光ディスク３１に対する読み出しおよび書き込みを行うための光ディスク・ドライブ３０とを、更に含むことができる。ハード・ディスク・ドライブ２７、磁気ディスク・ドライブ２８、および光ディスク・ドライブ３０は、それぞれ、ハード・ディスク・ドライブ・インターフェース３２、磁気ディスク・ドライブ・インターフェース３３、および光ディスク・ドライブ・インターフェース３４によりシステム・バス２３と接続されているところが示されている。ドライブと、それらと関連するコンピュータ読取可能ストレージ媒体とは、コンピュータ読取可能命令、データ構造、プログラム・モジュール、およびコンピュータ２０に対する他のデータの不揮発性ストレージを提供する。
【００１４】
[0026]  ここで説明した例示的な環境は、ハード・ディスク、取り外し可能磁気ディスク２９、および取り外し可能光ディスク３１を用いるが、コンピュータによりアクセス可能なデータを格納できる他のタイプのコンピュータ読取可能媒体、例えば、フラッシュ・メモリ・カード、デジタル・ビデオ・ディスクまたはデジタル・バーサタイル・ディスク（ＤＶＤ）、ランダム・アクセス・メモリ（ＲＡＭ）、リード・オンリー・メモリ（ＲＯＭ）なども例示的なオペレーティング環境で使用できることは、当業者には理解できる。一般に、そのようなコンピュータ読取可能ストレージ媒体は、本開示の特徴を実現するプロセッサ実行可能命令を格納するために、幾つかの実施形態で使用することができる。また、コンピュータ２０は、スモール・コンピュータ・システム・インターフェース（ＳＣＳＩ）・バス５６を介してストレージ・デバイス６２へ接続するホスト・アダプタ５５を含むことができる。
【００１５】
[0027]  コンピュータ読取可能命令を含む複数のプログラム・モジュールを、コンピュータ読取可能媒体、例えば、ハード・ディスク、磁気ディスク２９、光ディスク３１、ＲＯＭ２４、ＲＡＭ２５などに格納することができ、プログラム・モジュールは、オペレーティング・システム３５、１以上のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データ３８を含む。コンピュータ読取可能命令は、プロセッシング・ユニットにより実行されると、以下で更に詳細に説明するアクションを行わせたり、様々なプログラム・モジュールをインストールさせたりする。ユーザは、キーボード４０やポインティング・デバイス４２などのような入力デバイスを通じてコンピュータへ、コマンドおよび情報を入力することができる。他の入力デバイス（示さず）としては、マイクロフォン、ジョイスティック、ゲーム・パッド、サテライト・ディッシュ、スキャナーなどが含まれ得る。これらおよび他の入力デバイスは、システム・バスと結合されたシリアル・ポート・インターフェース４６を通じてプロセッシング・ユニット２１と接続されることが多いが、他のインターフェース、例えば、パラレル・ポート、ゲーム・ポート、ユニバーサル・シリアル・バス（ＵＳＢ）などにより接続されることもできる。ディスプレイ４７や他のタイプのディスプレイ・デバイスも、ビデオ・アダプタ４８などのようなインターフェースを介してシステム・バス２３と接続することができる。ディスプレイ４７に加えて、コンピュータは、典型的には、スピーカーやプリンターなどのような他の周辺出力デバイス（示さず）を含む。
【００１６】
[0028]  コンピュータ２０は、ネットワーク化された環境で、リモート・コンピュータ４９などのような１以上のリモート・コンピュータへの論理接続を用いて、動作することができる。リモート・コンピュータ４９は、別のコンピュータ、サーバ、ルーター、ネットワークＰＣ、ピア・デバイス、または他の共通ネットワーク・ノードとすることができ、典型的には、コンピュータ２０に関して説明した多くのまたは全てのエレメントを含むことができるが、図１ではメモリ・ストレージ・デバイス５０のみを示している。図１に示す論理接続は、ローカル・エリア・ネットワーク（ＬＡＮ）５１およびワイド・エリア・ネットワーク（ＷＡＮ）５２を含むことができる。そのようなネットワーク環境は、オフィス、エンタープライズ・ワイド・コンピュータ・ネットワーク、イントラネット、およびインターネットにおいて一般的なものである。
【００１７】
[0029]  コンピュータ２０は、ＬＡＮネットワーク環境で用いる場合、ネットワーク・インターフェースまたはアダプタ５３を通じてＬＡＮ５１と接続することができる。コンピュータ２０は、ＷＡＮネットワーク環境で用いる場合、典型的には、モデム５４、またはインターネットなどのようなワイド・エリア・ネットワーク５２を通じての接続を確立するための他の手段を含むことができる。内部または外部に備えられ得るモデム５４は、シリアル・ポート・インターフェース４６を介してシステム・バス２３と接続することができる。ネットワーク化された環境では、コンピュータ２０と関連して示されているプログラム・モジュールまたはその一部は、リモート・メモリ・ストレージ・デバイスに格納することができる。示されたネットワーク環境が例示であり、コンピュータ間の通信リンクを確立するために別の手段も使用できることは、理解できる。
【００１８】
[0030]  コンピュータ２０がネットワーク環境で動作するように構成された実施形態では、ＯＳ３５はネットワーク上でリモートに格納され、コンピュータ２０は、ローカルに格納したＯＳでブートせずに、リモートに格納されたＯＳでネットブート（netboot）することができる。１つの実施形態では、コンピュータ２０はシン・クライアントを含み、シン・クライアントでは、ＯＳ３５は、完全なＯＳよりも小さく、むしろ、ネットワーク処理と、モニター４７などでのディスプレイ出力とを処理するように構成されたカーネルである。
【００１９】
[0031]  図２は、本発明の特徴を実装できる例示的な環境を概略的に示す。例えば、サーバ２０４は、図８の動作プロシージャを実施することができる。図２に示された例示的なエレメントは、本発明を説明するための動作の枠組みを提供するために示されていることを、当業者であれば理解することができる。従って、幾つかの実施形態では、各環境の物理的配置は、様々なインプリメンテーション・スキームに応じて異なるものとなる。従って、例示的な動作の枠組みは、単なる例示として扱われるものであり、特許請求の範囲を限定するものではない。
【００２０】
[0032]  図２にはサーバ２０４が示され、サーバ２０４は、リモート・プレゼンテーション・セッション・サーバを実現するように構成される回路を含むことができ、別の実施形態では、サーバ２０４は、リモート・デスクトップ接続をサポートするように構成される回路を含むことができる。示された実施形態では、サーバ２０４は、クライアントを接続するために１以上のセッション、例えば、セッション１ないしＮ（Ｎは２より大きい整数）を生成するように構成することができる。簡単に説明すると、本発明の例示的な実施形態におけるセッションは、一般的には、動作環境を含むことができ、この動作環境は、サーバ２０４のカーネル２１４と対話するように構成される複数のサブシステム、例えば、ソフトウェア・コードにより実現される。例えば、セッションは、デスクトップ・ウィンドウなどのようなユーザ・インターフェースや、ウィンドウ内のマウスの動きを追跡するサブシステムや、アイコン上でのマウスのクリックを、プログラムのインスタンスを実現するコマンドへと変換するサブシステムなどをインスタンス化するプロセスを含むことができる。セッションは、ユーザ毎にサーバ２０４により生成することができ、例えば、サーバ２０４が、ネットワーク接続を介してクライアント２０１から接続リクエストを受信したときに、生成することができる。一般に、接続リクエストはトランスポート・ロジック２１０により最初に処理され、トランスポート・ロジック２１０は、例えば、サーバ２０４の回路により実現することができる。トランスポート・ロジック２１０は、幾つかの実施形態では、ネットワーク・アダプタ、ファームウェア、およびソフトウェアを含むことができ、接続メッセージを受信するように、およびそれらの接続メッセージをエンジン２１２へ送るように構成することができる。図２に示すように、トランスポート・ロジック２１０は、幾つかの実施形態では、各セッションに対してのプロトコル・スタック・インスタンスを含むことができる。一般に、各プロトコル・スタック・インスタンスは、ユーザ・インターフェース出力をクライアントへ送るように、およびクライアントから受信したユーザ入力を、そのセッションと関連するセッション・コア２４４へ送るように、構成することができる。
【００２１】
[0033]  図２の概略的な説明を続ける。エンジン２１２は、本発明の幾つかの実施形態では、セッションに関するリクエストの処理、各セッションの機能の決定、セッションに対して１組の物理リソースを割り当てることによるセッションの生成、およびセッションに対するプロトコル・スタック・インスタンスのインスタンス化を行うように、構成することができる。幾つかの実施形態では、エンジン２１２は、上記の動作プロシージャのうちの幾つかを実施できる特殊回路コンポーネントにより、実現することができる。例えば、幾つかの実施形態における回路は、メモリと、エンジン２１２を実現するコードを実行するように構成されたプロセッサとを含むことができる。図２に示すように、幾つかのインスタンスでは、エンジン２１２は、接続リクエストを受信すること、および、例えば、ライセンスが使用可能であり、そのリクエストに対してセッションを生成できると決定することができる。サーバ２０４が、リモート・デスクトップ能力を含むリモート・コンピュータである場合、エンジン２１２は、ライセンスに関する検査を行わずに、接続リクエストに応答してセッションを生成するように構成することができる。図２に示すように、セッション・マネージャ２１６は、エンジン２１２からメッセージを受け取るように構成することができ、かつ、そのメッセージに応答して、テーブルへセッション識別子を付加し、セッション識別子へメモリを割り当て、セッション識別子へ割り当てられたメモリにおいて、システム環境変数とサブシステム・プロセスのインスタンスとを生成するように、構成することができる。
【００２２】
[0034]  図２に示すように、セッション・マネージャ２１６は、ランタイム・サブシステム２４０などのような環境サブシステムをインスタンス化することができ、ランタイム・サブシステム２４０は、セッション・コア２４４などのようなカーネル・モード部分を含むことができる。例えば、１つの実施形態では、環境サブシステムは、サービスの或るサブセットをアプリケーション・プログラムへ公開し、オペレーティング・システム２１４のカーネルへのアクセス・ポイントを提供するように、構成される。例示的な実施形態では、ランタイム・サブシステム２４０は、プロセスおよびスレッドの実行を制御することができ、セッション・コア２４４は、リクエストをカーネル２１４のエグゼクティブ（executive）へ送り、スレッドに対してメモリを割り当て、それらの実行される時間をスケジュールすることができる。１つの実施形態では、セッション・コア２４４は、グラフィックス・ディスプレイ・インターフェース（ＧＤＩ）２４６、セキュリティ・サブシステム２５０、および入力サブシステム２５２を含むことができる。これらの実施形態では、入力サブシステム２５２は、セッションと関連するプロトコル・スタック・インスタンスを介してクライアント２０１からユーザ入力を受信するように、および適切なセッションのためにその入力をセッション・コア２４４へ送信するように、構成することができる。幾つかの実施形態では、ユーザ入力は、絶対的および／または相対的なマウス運動コマンド、マウス座標、マウス・クリックを示す信号、キーボード信号、ジョイスティック運動信号などを、含むことができる。ユーザ入力、例えば、アイコン上でのマウスのダブルクリックは、セッション・コア２４４で受け取ることができ、入力サブシステム２５２は、ダブルクリックと関連する座標にアイコンが位置することを決定するように、構成することができる。入力サブシステム２５２は、次に、そのアイコンと関連するアプリケーションのためのプロセスを実行できるランタイム・サブシステム２４０へ通知を送るように、構成することができる。
【００２３】
[0035]  クライアント２０１から入力を受け取ることに加えて、ＧＤＩ２４６により、アプリケーションおよび／またはデスクトップから描画コマンドを受け取り、処理することができる。ＧＤＩ２４６は、一般に、グラフィカル・オブジェクト描画コマンドを生成できるプロセスを含むことができる。ＧＤＩ２４６は、この例示的な実施形態では、その出力を、リモート・ディスプレイ・サブシステム２５４へ渡すように構成することができ、コマンドは、セッションに付随するディスプレイ・ドライバのためにフォーマットされる。特定の例示的な実施形態では、リモート・デスクトップの状況において、サーバ２０４へ１以上の物理的ディスプレイを取り付けることができる。それらの例示的な実施形態では、リモート・ディスプレイ・サブシステム２５４は、リモート・コンピュータ・システムのディスプレイ・ドライバ（１以上）によりレンダリングされる描画コマンドをミラーするように、およびミラーした情報を、セッションと関連するスタック・インスタンスを介してクライアント２０１へ送信するように、構成することができる。サーバ２０４がリモート・プレゼンテーション・セッション・サーバである別の実施形態では、リモート・ディスプレイ・サブシステム２５４は仮想ディスプレイ・ドライバ（１以上）を含むように構成することができ、仮想ディスプレイ・ドライバは、サーバ２０４へ物理的に取り付けられたディスプレイと関連しない場合もあり、例えば、サーバ２０４はヘッドレス（headless）で動作するものであり得る。この実施形態におけるリモート・ディスプレイ・サブシステム２５４は、１以上の仮想ディスプレイに対する描画コマンドを受け取るように、およびそれらを、セッションと関連するスタック・インスタンスを介してクライアント２０１へ送るように、構成することができる。本発明の１つの実施形態では、リモート・ディスプレイ・サブシステム２５４は、各ディスプレイ・ドライバのディスプレイ分解能、例えば、仮想ディスプレイと関連する仮想ディスプレイ・ドライバ（１以上）のディスプレイ分解能や、物理的ディスプレイと関連するディスプレイ・ドライバのディスプレイ分解能を決定するように構成することができ、かつ、
パケットを、関連するプロトコル・スタック・インスタンスを介してクライアント２０１へ送るように、構成することができる。
【００２４】
[0036]  幾つかの例示的な実施形態では、セッション・マネージャ２１６は、更に、セッションのログオンおよびログオフを処理するように構成することができ且つセッションのセッション識別子と関連するログオン・プロセスのインスタンスを、インスタンス化することができる。これらの例示的な実施形態では、ログオン・プロセスと関連するグラフィカル・ユーザ・インターフェースを示す描画コマンドを、クライアント２０１へ送信することができ、クライアント２０１では、クライアント２０１のユーザは、アカウント識別子、例えば、ユーザ名／パスワードの組み合わせ、スマート・カード識別子、および／またはバイオメトリック情報を、ログオン・スクリーンへ入力することができる。情報は、サーバ２０４へ送信し、エンジン２１２およびセッション・コア２４４のセキュリティ・サブシステム２５０へ送ることができる。例えば、特定の例示的な実施形態では、エンジン２１２は、ユーザ・アカウントがライセンスと関連付けられているか否かを決定するように構成することができ、セキュリティ・サブシステム２５０は、セッションのためのセキュリティ・トークンを生成するように構成することができる。
【００２５】
[0037]  図３は、ウェブ・ブラウザを用いてリモート・プレゼンテーション・セッションを行うクライアントを示し、ここではプロキシがリモート・プレゼンテーション・データをビデオへと変換する。実施形態では、サーバ３０４は、図２のサーバ２０４で実施することができ、プロキシ３０６およびクライアント３０８は、図１のコンピュータ２０で実施することができる。実施形態では、サーバ３０４は、リモート・プレゼンテーション・プロトコル・エンコードされたデータを受信および送信することにより、リモート・プレゼンテーション・セッションを行い、クライアント３０８は、ＨＴＴＰエンコードされたデータ（ビデオを含む）を受信および送信することにより、リモート・プレゼンテーション・セッションを行う。プロキシ３０６は、サーバ３０４からリモート・プレゼンテーション・プロトコル・エンコードされたデータ（例えば、グラフィカル出力）を受信し、それをビデオとしてエンコードし、それをＨＴＴＰエンコードされたデータとしてクライアント３０８へ送信する。同様に、プロキシ３０６は、クライアント３０８からＨＴＴＰエンコードされたデータ（例えば、ユーザ入力）を受信し、それをリモート・プレゼンテーション・プロトコル・エンコードされたデータとしてエンコードし、それをサーバ３０４へ送信する。
【００２６】
[0038]  クライアント３０８は、プロキシ３０６とのＨＴＴＰ接続を確立することにより、リモート・プレゼンテーション・セッションを開始することができる。ＨＴＴＰ接続は、ＨＴＴＰの一種、例えば、ＨＴＴＰＳ（ＨＴＴＰ  Ｓｅｃｕｒｅ）接続とすることができる。このＨＴＴＰ接続の確立は、クライアント３０８のウェブ・ブラウザに対するユーザ入力を提供するユーザが、プロキシ３０６とのＨＴＴＰ接続の確立と関連するウェブ・ページを開くことなどにより、実現することができる。ＨＴＴＰ接続は、クライアント３０８とプロキシ３０６との間でのＡｊａｘ接続とすることもできる。
【００２７】
[0039]  ＨＴＴＰ接続が確立されると、クライアント３０８は、それ自体の認証をプロキシ３０６に対して行う（プロキシ３０６は、その認証と関連する資格情報（credential）を用い、サーバ３０４に対しての認証を行うことができる）。この認証は、例えば、クライアントがユーザ識別子およびパスワードをプロキシ３０６へ送ることを含むことができ、プロキシ３０６は、ユーザとパスワードとのペアのデータベースに対照させて認証を行う。実施形態では、サーバ３０４とのリモート・プレゼンテーション・セッションの確立において、プロキシ３０６は、クライアント自体を認証せず、クライアント３０８からの資格情報を用いて、それ自体を認証する。プロキシ３０６が、サーバ３０４とのリモート・プレゼンテーション・セッションの確立に成功すると、プロキシ３０６は、プロキシ３０６に対してクライアント３０８が認証されたと決定することができる。
【００２８】
[0040]  また、プロキシ３０６は、クライアント３０８と関連するサーバ３０４とのリモート・プレゼンテーション・セッションを確立する（プロキシ３０６が既にそのようにしていない場合）。このリモート・プレゼンテーション・セッションでは、プロキシ３０６は、リモート・プレゼンテーション・セッション・クライアント（例えば、図２のクライアント２０１）として働き、サーバ３０４は、リモート・プレゼンテーション・セッション・サーバ（例えば、図２のサーバ２０４）として働く。実施形態では、サーバ３０４がプロキシ３０６とのリモート・プレゼンテーション・セッションを確立するとき、サーバ３０４は、そのセッションと関連するログインのインジケーションを用い、リモート・プレゼンテーション・セッションにおいてリモートするセッションまたはアプリケーションを決定する。例えば、サーバ３０４が再接続を行うログインと関連する接続解除されたセッションがある場合や、セッションが全く無い場合がある（その場合、サーバ３０４はログインのために新たなセッションをインスタンス化することができる）。アプリケーションのセッション出力が、セッションのグラフィカル出力（１以上のアプリケーションを含み得る）ではなく、リモート化される（is remoted）場合、同じプロセスが生じ得る。即ち、接続解除されたアプリケーションを再接続すること、または、接続解除されたアプリケーションが無い場合にアプリケーションを開始することが行われ得る。
【００２９】
[0041]  次に、サーバ３０４は、リモート化されているもののグラフィカル出力を、リモート・プレゼンテーション・セッションを介してプロキシ３０６へ送る。これは、図２のサーバ２０４がグラフィカル出力をクライアント２０１へリモートするのと同様の様式で行われることができる。プロキシ３０６は、このリモート・プレゼンテーション・プロトコル・エンコードされたグラフィカル・データを受信し、それを、ＨＴＴＰ接続を介してクライアント３０８へ送信されるビデオに変換する。実施形態では、プロキシ３０６は、リモート・プレゼンテーション・プロトコル・エンコードされたグラフィカル・データをデコードして、グラフィカル・データを作成し、次に、そのグラフィカル・データを、ビデオの１以上のフレームとしてエンコードする。このビデオは、クライアントがネイティブにデコードできるフォーマットにエンコードすることができる。例えば、クライアントのウェブ・ブラウザは、ＨＴＭＬ５フォーマットのデータを処理するように構成することができ、ＨＴＭＬ５＜ｖｉｄｅｏ＞タグで参照される１以上のビデオ・フォーマットをネイティブにデコードすることを含む。そのようなフォーマットの一例はＨ．２６４である。グラフィカル・データをビデオ・フォーマットにエンコードすると、プロキシ３０６はそのビデオをクライアント３０８へ送信し、クライアント３０８はそのビデオをデコードしてウェブ・ブラウザで表示する。
【００３０】
[0042]  クライアント３０８は、サーバ３０４が処理するものに影響を及ぼすコマンドを発する。クライアント３０８のユーザは、クライアント３０８のウェブ・ブラウザへ向けられる入力を提供することができる。この入力は、マウス、キーボード、およびタッチ入力などのような入力と、それに伴っての、ビデオと相対しての入力が行われた場所（例えば、表示されたビデオの左上隅から右へ５０ピクセル、下へ５０ピクセル）のインジケーションとを含むことができる。クライアント３０８は、この入力を、入力検出のためのＪａｖａＳｃｒｉｐｔ（登録商標）（ジャバ・スクリプト）技術を用いて、ウェブ・ブラウザで取り込むことができる。次に、クライアント３０８は、入力をプロキシ３０６へ送信する。クライアント３０８は、プロキシ３０６へ送信するための入力を準備することができ、その準備では、例えば、入力を、データ構造および連想配列を表す人間読取可能な形態、例えば、ＪＳＯＮ（ＪａｖａＳｃｒｉｐｔ  Ｏｂｊｅｃｔ  Ｎｏｔａｔｉｏｎ）や、ＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）のようなタグ区切りマークアップ・フォーマット（tag-delimited markup format）で表す。
【００３１】
[0043]  クライアント３０８はプロキシ３０６へ入力を非同期で送信することができ、それにより、入力の送信は、ウェブ・ページでのビデオの表示から独立して行うことができる。非同期通信では、クライアント３０８は、プロキシ３０６へ、ウェブ・ページで表示されているビデオから独立して（例えば、ビデオがウェブ・ページで継続して表示されているときに）入力を送ることができる。次に、プロキシ３０６から応答を受信したときに（例えば、プロキシ３０６は、入力の処理の結果に対応して、クライアント３０８へ更にビデオを送信する）、クライアント３０８はその応答を処理する。
【００３２】
[0044]  プロキシ３０６はクライアント３０８から、或るフォーマット（例えば、ＪＳＯＮやＸＭＬ）にエンコードされている入力を受け取り、その入力をデコードし、再びエンコードしてリモート・プレゼンテーション・セッション・データにする。次に、プロキシ３０６は、このエンコードされたリモート・プレゼンテーション・セッション・データをサーバ３０４へ送信することができ、サーバ３０４は、その入力を、リモート・プレゼンテーション・セッションのために適切なユーザ・セッションまたはアプリケーションへ入れ（injects）、そのアプリケーションまたはユーザ・セッションへ提供された入力と関連する処理を行う。その処理により、リモート・プレゼンテーション・セッションと関連する更なるグラフィカル出力が生成されると、サーバ３０４は、その更なるグラフィカル出力をエンコードしてプロキシ３０６へ送信することができ、プロキシ３０６は、それをビデオに変換して、表示するためにクライアント３０８へ送る。
【００３３】
[0045]  実施形態では、サーバ３０４およびプロキシ３０６は仮想マシン（ＶＭ）で実行することができ、双方の仮想マシンを同じ物理的ホスト・コンピュータで実行することができる。そのようなシナリオでは、サーバ３０４およびプロキシ３０６は、ループバック接続（それ自体が使用するネットワーク・インターフェースを指すＩＰアドレスを使用するもの、例えば、１２７．０．０．１など）を介して通信することができる。例えば、サーバ３０４はポート３３８９をリッスン（listen）することができ、プロキシ３０６はポート３３９０をリッスンすることができる。次に、サーバ３０４は、データを１２７．０．０．１：３３９０へ送ることにより、プロキシ３０６と通信することができ、プロキシ３０６は、データを１２７．０．０．１：３３８９へ送ることにより、サーバ３０４と通信することができる。同じ物理マシン上で実行されるサーバ３０４とプロキシ３０６との間のループバック接続を用いることにより、従来の（legacy）リモート・プレゼンテーション・サーバが変更無しで動作することを可能とする。これは、サーバ３０４とリモート・プレゼンテーション・セッションを行うためのウェブ・ブラウザを用いるクライアントとの間の中間物としてプロキシ３０６を使用することで、どのようにして従来の（legacy）サーバが変更無しで動作することを可能とするかと、似ている。ループバック接続に関して、通信ネットワーク・インターフェースを介してのみ、クライアントへデータを送信するように構成される従来のリモート・プレゼンテーション・サーバを、本発明の実施形態を実現するために用いることができる。なぜなら、サーバは、なおも、ネットワーク・インターフェースを介してクライアント（またはプロキシ）と通信するからである。
【００３４】
[0046]  図４は、ウェブ・ブラウザを用いてリモート・プレゼンテーション・セッションを行うクライアントを示し、ここでは、サーバは、リモート化されているデスクトップまたはアプリケーションのインスタンスにより生成されたグラフィカル出力からビデオを生成する。サーバ４０４は、図１のコンピュータ２０で実施することができる。図３で示すコンピュータと図４で示すコンピュータとの１つの違いは、サーバ４０４がサーバ３０４と異なることである。サーバ３０４は、クライアントと、リモート・プレゼンテーション・プロトコルでエンコードされたデータを交換することによりリモート・プレゼンテーション・セッションを行うように、構成される。サーバ３０４は、ウェブ・ブラウザを用いてリモート・プレゼンテーション・セッションを行うクライアントへビデオの形のリモート・プレゼンテーション・データを送るように、構成されない。プロキシ３０６が、サーバからリモート・プレゼンテーション・プロトコル・エンコードされたデータを受け取り、それをビデオに変換するように、およびクライアントからユーザ入力を受け取り、そのユーザ入力をリモート・プレゼンテーション・プロトコルにエンコードするように、構成される。
【００３５】
[0047]  それに対して、図４のサーバ４０４は、リモート・プレゼンテーション・データをビデオとしてクライアント３０８へ送るように構成され、クライアント３０８は、ウェブ・ブラウザを用いてリモート・プレゼンテーション・セッションを行う。クライアント３０８は、図３と関連して説明したプロキシ３０６とクライアント３０８とがＨＴＴＰ接続を確立する場合と同様の様式で、サーバ４０４とのＨＴＴＰ接続を確立する。次に、サーバ４０４は、アプリケーションまたはユーザ・セッションからグラフィカル出力を取得し、その出力をリモート・プレゼンテーション・プロトコル・エンコードされたデータにエンコードする中間ステップを行わずに、その出力をビデオにエンコードするように、構成される。例えば、アプリケーションまたはユーザ・セッションからのグラフィカル出力がビットマップ・イメージを含む場合、サーバにより、それらのビットマップ・イメージをビデオの１以上のフレームとしてエンコードすることができる。
【００３６】
[0048]  サーバ４０４がリモート・プレゼンテーション・プロトコル・エンコードされたデータではなくビデオをクライアントへ送ることによりリモート・プレゼンテーション・セッションを行うことができるようにする様式と同様に、サーバ４０４は、ＪＳＯＮやＸＭＬなどを用い、リモート・プレゼンテーション・プロトコルを用いずにエンコードされ、ウェブ・ブラウザへ向けられたユーザ入力を、クライアント３０８から受信することができる。サーバ４０４は、この入力をデコードし、それを関連するアプリケーションまたはユーザ・セッションへ入れる（inject）ことができ、その様式は、サーバ４０４がリモート・プレゼンテーション・プロトコルでエンコードされた入力をアプリケーションまたはユーザ・セッションへ入れる（injects）場合と同様である。
【００３７】
[0049]  図５は、サーバとのリモート・プレゼンテーション・セッションを行う１つのクライアントを示し、１つのクライアントは、ウェブ・ブラウザを用い、プロキシを通じて通信し、グラフィックスをビデオとして受け取り、１つのクライアントは、サーバと直接に通信し、リモート・プレゼンテーション・セッション・データとしてエンコードされたグラフィックスを受け取る。サーバ５０４およびクライアント５０８は、図１のコンピュータ２０において実施できる。サーバ５０４は、リモート・プレゼンテーション・プロトコル・エンコードされたデータを用いて、クライアント５０８などのようなクライアントとのリモート・プレゼンテーション・セッションを行うように、構成することができる。また、サーバ５０４は、クライアント３０８などのような、プロキシを通じてリモート・プレゼンテーション・セッションを行うクライアントとのリモート・プレゼンテーション・セッションを行うように構成することができ、ここでは、クライアントはウェブ・ブラウザを用い、クライアントとプロキシとはＨＴＴＰセッションを介して通信する。即ち、サーバ５０４は、図３のサーバ３０４（ウェブ・ブラウザを用いるクライアントとのリモート・プレゼンテーション・セッションをプロキシ３０６を通じて行うように構成される）の機能と、図４のサーバ４０４（ウェブ・ブラウザを用いるクライアントと直接にリモート・プレゼンテーション・セッションを行うように構成される）の機能とを行うように、構成することができる。
【００３８】
[0050]  図６および図７は、グラフィックス・データを、リモート・プレゼンテーション・セッションにおいて送信されるビデオとしてエンコードするための技術を示す。プロキシ３０６またはサーバ４０４が、複数のリモート・プレゼンテーション・セッションに対するグラフィカル出力をビデオとしてエンコードする場合、コンピュータの処理能力に対して即座に重い仕事や負担が課せられる。これに鑑みて、本発明の実施形態は、リモート・プレゼンテーション・セッションのグラフィカル出力をビデオとしてエンコードするための効率的な方法を提供する。これらの実施形態のうちの幾つかを図６および図７に示す。
【００３９】
[0051]  図６は、ビデオへとエンコードされるグラフィカル・データの２つのフレームを示し、ここでは、各フレームの一部は同じイメージを含むが、そのイメージの場所は異なり、一方のフレームは、他方のフレームのエンコーディングに基づいてエンコードされ得る。フレーム６００は、コンピュータ・デスクトップからのグラフィカル・データのフレームであり、フレーム６５０は、後の時間の同じデスクトップを示すグラフィカル・データのフレームである。フレーム６００は部分６０２を含む。フレーム６５０において、フレーム６００の部分６０２は、場所６５２から場所６５４へ移動している。従って、部分６０２および部分６５４は、場所が異なるだけの同じイメージを示す。即ち、フレーム６５０の部分６５４は、再びエンコードする必要がないであろう。むしろ、部分６５４を除くフレーム６５０をエンコードし、次に、以前にエンコードした部分６０２と組み合わせて（エンコードされたフレームの部分６５４の場所に配置して）、エンコードされたフレーム６５０を作ることができる。フレーム６５０をエンコードするために、以前にエンコードされたデータを使用すると、フレーム６５０のエンコードに必要なコンピューティング・リソースを低減することができ、フレームをエンコードしているサーバまたはプロキシが、そのようにしない場合に同時にエンコードできたであろうフレームよりも多くのフレームを同時にエンコードすること（従って、より多くのリモート・プレゼンテーション・セッションを同時に行うこと）を、可能にする。
【００４０】
[0052]  図７は、ビデオへとエンコードされるグラフィカル・データのフレームを示し、ここでは、１つのフレームは、前のフレームと共通の特徴を共有し、「ダーティー」領域を有し、この領域ではフレームは異なる。フレーム７００は２つのダーティー領域、即ち、ダーティー領域７０２および７０４を含み、フレーム７００は、先行し且つエンコードされているフレームと異なる。フレーム７００は、ダーティー領域７０２および７０４をエンコードし、次に、それらのエンコードしたダーティー領域を、前のフレームのエンコーディングから取り出された、以前にエンコードされた非ダーティー領域と組み合わせることにより、ビデオとしてエンコードすることができる。図６のものと同様に、フレーム７００をエンコードするために、以前にエンコードされたデータを使用すると、フレーム７００のエンコードに必要なコンピューティング・リソースを低減することができ、フレームをエンコードしているサーバまたはプロキシが、そのようにしない場合に同時にエンコードできたであろうフレームよりも多くのフレームを同時にエンコードすること（従って、より多くのリモート・プレゼンテーション・セッションを同時に行うこと）を、可能にする。
【００４１】
[0053]  図８は、リモート・プレゼンテーション・セッションにおいてウェブ・ブラウザを用いるクライアントとのリモート・プレゼンテーション・セッションを行うサーバのための例示的な動作プロシージャを示す。実施形態では、図８の動作プロシージャは、図４のサーバ４０４により実現することができる。なぜなら、サーバ４０４はクライアント３０８とのリモート・プレゼンテーション・セッションを行うからであり、クライアント３０８はそのセッションを行うためにウェブ・ブラウザを用いる。図８（および図９および図１０）に関して、示したオペレーションの全てを実施しない本発明の実施形態や、示したオペレーションを、ここで説明する順とは異なる順で実施する本発明の実施形態も存在することが、理解されるであろう。
【００４２】
[0054]  オペレーション８０２は、クライアントとのハイパーテキスト・トランスファー・プロトコル（ＨＴＴＰ）・セッションを確立することを示す。これは、クライアントが、データに対するＨＴＴＰリクエストをＨＴＴＰセッションを介してサーバへ送ることなどにより、実現することができる。データに対するこのリクエストは、リモートのデスクトップのストリーミング・ビデオを含むウェブ・ページに対するリクエストを含むことができる。サーバは、ＨＴＴＰセッションを一意に識別するＨＴＴＰセッション・トークンを決定し、それをクライアントへ送ることができる。クライアントは、このトークン（ＨＴＴＰクッキーなどのような形態）を格納し、次に、それを、ＨＴＴＰセッションを識別するために将来の通信においてサーバへ送ることができる。
【００４３】
[0055]  オペレーション８０４は、ＨＴＴＰセッションを介して受信したクライアントの資格情報を検証することを示す。クライアントは、それがサーバとのリモート・プレゼンテーション・セッションを行うための許可を検証するために、資格情報を用いることができる。実施形態では、この資格情報はユーザ・ログインとパスワードとを含み、ユーザ・ログインは、サーバ上のユーザのアカウントと関連する。サーバは、資格情報のデータベースを格納し、提供された資格情報をデータベースと照合する検査を行うことができ、これにより、資格情報が有効であることを示すことができる。
【００４４】
[0056]  オペレーション８０６は、クライアントの資格情報に対応するセッションのインスタンスまたはアプリケーションを決定することを示し、グラフィカル・データは、インスタンスのグラフィカル出力を含む。実施形態では、サーバは、ユーザ・セッションのインスタンスをインスタンス化し、それの実行を開始する。資格情報に対応する接続解除されたユーザ・セッションがある場合、サーバは、そのセッションを再接続することができる。実施形態では、資格情報が複数の可能なアプリケーションに対応するなどの場合、サーバは、リモートされる可能なアプリケーションおよび／またはセッションのインジケーションをクライアントへ送り、可能なアプリケーションおよび／またはセッションのうちの１つを選択する受信したインジケーションに基づいて、グラフィカル出力をリモートするものを決定することができる。
【００４５】
[0057]  オペレーション８０８は、リモート・プレゼンテーション・セッションにおいてクライアントへ送信するグラフィカル・データを決定することを示す。サーバが、オペレーション８０６で決定されたユーザ・セッションのインスタンスまたはアプリケーションを実行すると、その実行によりグラフィカル・データが生成される。これは、リモート・プレゼンテーション・セッションを介して送られるグラフィカル・データである（またはグラフィカル・データを表すものが送られる）。クライアントへ送られるグラフィカル・データの決定は、図２のサーバ２０４と関連して説明した様式と同様の様式で行われる。
【００４６】
[0058]  オペレーション８１０は、グラフィカル・データをビデオとしてエンコードすることを示す。実施形態では、オペレーション８１０は、グラフィカル・データをビデオとしてエンコードすることを含むが、これは、以前に第２のグラフィカル・データが第２のビデオとしてエンコードされていたことに基づく。即ち、エンコードされている現在のビデオは、以前にエンコードされたビデオとの共通性を有し得、サーバは、それらの共通性を利用して、グラフィカル・データをビデオとしてエンコードするために使用するプロセッシング・リソースを低減することができる。例えば、これは、第２のグラフィカル・データと相対させたときのグラフィカル・データのダーティー領域に基づいてグラフィカル・データをエンコードすること、およびグラフィカル・データをエンコードするために第２のビデオの少なくとも一部を用いることを、含むことができる。これは、例えば、図７のフレーム７００に関して示したように生じ得る。グラフィカル・データと第２のグラフィカル・データとの間で幾つかの更新がある場合、それらの更新は、個々のグラフィカル・データにおける異なる領域を識別する「ダーティー領域」として表すことができる。次に、サーバは、グラフィカル・データのダーティー領域のみをビデオとしてエンコードし、それらのエンコードしたダーティー領域を、非ダーティー領域のビデオを含む第２のビデオと組み合わせて、グラフィカル・データのビデオを作ることができる。
【００４７】
[0059]  グラフィカル・データを、以前に第２のグラフィカル・データが第２のビデオとしてエンコードされていたことに基づいて、ビデオとしてエンコードする実施形態はまた、グラフィカル・データ内に示されるエレメントが第２のグラフィカル・データにも示され、そのエレメントはグラフィカル・データにおいて第２のグラフィカル・データとは別の場所に示されており、グラフィカル・データをエンコードするために第２のビデオの少なくとも一部を用いる、ということに基づいて、グラフィカル・データをエンコードすること含む。即ち、アプリケーション・ウィンドウ（またはそれと同様のもの）が、グラフィカル・データと第２のグラフィカル・データとの間で移動させられている場合がある。これは、例えば、図６のフレーム６００および６５０に関して示したように生じ得る。この移動が識別された場合、サーバは、アプリケーション・ウィンドウに対応する第２のビデオの部分を取り出し、それを用いてビデオを作ることができる。それは、そのアプリケーション・ウィンドウではないグラフィカル・データの部分をビデオとしてエンコードし、それを、第２のウィンドウからのアプリケーション・ウィンドウのエンコードされたビデオと組み合わせることができる。
【００４８】
[0060]  実施形態では、オペレーション８１０は、グラフィカル・データの第１部分がテキストを含み且つグラフィカル・データの第２部分がイメージまたはビデオを含むということのインジケーションを受け取ること、およびグラフィカル・データの第１部分がテキストを含み且つグラフィカル・データの第２部分がイメージまたはビデオを含むということのインジケーションに基づいて、グラフィカル・データをビデオとしてエンコードすることを含む。幾つかのリモート・プレゼンテーション・サーバは、グラフィカル出力がリモートされているアプリケーションから「ヒント」を受け取るように構成され、それらのヒントは、グラフィカル出力が何であるか、例えば、テキスト、単色塗りつぶし、イメージ、またはビデオであるかを示す。幾つかのリモート・プレゼンテーション・サーバは、この情報を決定するためにグラフィカル・データを分析するように構成される。そのような実施形態では、ビデオは、この情報に基づいてエンコードすることができる。例えば、ユーザは、イメージ内よりもテキスト内における圧縮アーティファクト（compression artifacts）を見ることに関して敏感であり得る。サーバは、グラフィカル出力をビデオへ可変的にエンコードすることができ、サーバは、イメージであるグラフィカル出力の部分に対して、テキストであるグラフィカル出力の部分の圧縮よりも損失の多い圧縮を用いる。
【００４９】
[0061]  オペレーション８１２は、ＨＴＴＰセッションを介してクライアントへビデオを送信し、クライアントがウェブ・ブラウザでビデオを表示するようにすることを示す。実施形態では、オペレーション８１２は、ＨＴＴＰセッションを介してクライアントへビデオを送信し、クライアントが、ビデオを、ウェブ・ブラウザで表示されるウェブ・ページに埋め込まれたビデオ・エレメントとして表示するようにする。例えば、ビデオは、ＨＴＭＬ５のウェブ・ページに埋め込まれることができ、ウェブ・ページの＜ｖｉｄｅｏ＞タグ（＜ビデオ＞タグ）を介して参照される。実施形態において、ビデオはストリーミング・ビデオであり、従って、サーバが１以上のアプリケーションまたはセッションからグラフィカル・データの生成を続けると、そのグラフィカル・データは、エンコードされ、ストリーミング・ビデオにおける追加のビデオとしてクライアントへ送られる。
【００５０】
[0062]  オペレーション８１４は、ウェブ・ブラウザへ向けられたユーザ入力をクライアントから受信することと、ユーザ入力に対応するアプリケーションを決定することであって、そのアプリケーションはグラフィカル・データの少なくとも一部を生成したものである、アプリケーションを決定することと、ユーザ入力をアプリケーションへ入れて（injecting）、アプリケーションがユーザ入力に対応する結果を処理するようにすることとを示す。クライアントがウェブ・ブラウザでビデオを表示すると、ユーザは、例えば、マウス・カーソルを動かしたり、キーボードでタイプ入力したりすることにより、ウェブ・ブラウザに対する入力を提供する。この情報は、クライアントにより取り込まれ、ＨＴＴＰセッションを介してサーバへ送られることができる。サーバは、入力を受け取ると、入力によりユーザが指したアプリケーションを決定する（例えば、ビデオの左上隅での入力は、そのスポットで特定のアプリケーション・ウィンドウが示されている場合、そのアプリケーション・ウィンドウへ向けた入力であると決定され得る）。次に、サーバは、図２と関連して説明したように、決定されたアプリケーションへ入力を入れる（inject）ことができる。
【００５１】
[0063]  図９は、リモート・プレゼンテーション・セッション・サーバと、セッションにおいてウェブ・ブラウザを用いるクライアントとの間のリモート・プレゼンテーション・セッションを促進させるプロキシ・サーバのための例示的な動作プロシージャを示す。図９の動作プロシージャは図６のプロキシ３０６により実施することができる。なぜなら、プロキシ３０６はサーバ３０４とクライアント３０８との間のリモート・プレゼンテーション・セッションを促進させるからである。
【００５２】
[0064]  オペレーション９０２は、クライアントとのハイパーテキスト・トランスファー・プロトコル（ＨＴＴＰ）・セッションを確立することを示す。オペレーション９０２は、図８のオペレーション８０２を実現する様式と同様の様式で実現することができる。
【００５３】
[0065]  オペレーション９０４は、サーバとのリモート・プレゼンテーション・セッションを確立することを示す。オペレーション９０４は、図２に示すように、サーバ２０４がクライアント２０１からのネットワーク接続を介しての接続リクエストを処理する様式と同様の様式で、実現することができる。オペレーション９０４において、リモート・プレゼンテーション・セッションを確立するために、プロキシ・サーバ３０６は、クライアント２０１の役割を担い、サーバ３０４は、サーバ２０４の役割を担う。実施形態では、クライアント２０１は資格情報をプロキシ３０６へ送る。その資格情報は、サーバ２０４とリモート・プレゼンテーション・セッションを行うためのクライアントに対する承認を検証するために使用することができる。プロキシ３０６は、資格情報自体を検証すること、および／または資格情報をサーバ２０４へ渡すことができる。サーバ２０４は、資格情報を、リモート・プレゼンテーション・セッションを確立することの一部として用い、資格情報を提供されたコンピュータを、リモート・プレゼンテーション・セッションを確立することの一部として検証し、かつ／またはクライアントの資格情報に対応するセッションまたはアプリケーションのインスタンスを決定することができ、オペレーション８０６に示すように、セッションまたはアプリケーションのインスタンスのグラフィカル出力はリモート・プレゼンテーション・セッションにおいて送られる。
【００５４】
[0066]  オペレーション９０６は、サーバから、リモート・プレゼンテーション・セッションを介して、リモート・プレゼンテーション・プロトコルを用いてエンコードされたグラフィカル・データを受け取ることを示す。リモート・プレゼンテーション・セッションが確立されると、サーバ２０４は、プロキシ３０６へ、リモート・プレゼンテーション・セッション・プロトコルを用いてエンコードされるグラフィカル・データ（サーバ２０４で実行されるアプリケーションまたはユーザ・セッションにより生成されるものなど）を送る。
【００５５】
[0067]  オペレーション９０８は、グラフィカル・データをビデオとしてエンコードすることを示す。実施形態では、オペレーション９０８は、グラフィカル・データを、そのリモート・プレゼンテーション・プロトコル・エンコードからデコードして１以上のイメージを生成することと、次に、その１以上のイメージをビデオとして再びエンコードすることとを含む。実施形態では、オペレーション９０８は、グラフィカル・データをデコードしてイメージを生成する中間ステップを行わずに、グラフィカル・データを、そのリモート・プレゼンテーション・プロトコル・エンコードからビデオ・エンコードへと変換することを含む。
【００５６】
[0068]  オペレーション９１０は、ＨＴＴＰセッションを介してビデオをクライアントへ送ることを示し、クライアントはビデオをウェブ・ブラウザで表示する。実施形態では、クライアントのウェブ・ブラウザは、ＨＴＭＬ５（ハイパーテキスト・マークアップ・ランゲージ５（Hypertext Markup Language 5））標準に準拠する情報を受け取って表示するように、構成することができる。そのような実施形態では、例えば、ＨＴＭＬ５の＜ｖｉｄｅｏ＞タグを用いて、ビデオをウェブ・ページ内で実現することができる。例えば、グラフィカル・データが「ｒｅｍｏｔｅ＿ｐｒｅｓｅｎｔａｔｉｏｎ＿ｓｅｓｓｉｏｎ．ａｖｉ」という題のビデオとしてエンコードされており、そのビデオが、そのビデオの埋め込まれているウェブ・ページと同じディレクトリでプロキシに位置する場合、＜ｖｉｄｅｏ＞タグは、ウェブ・ページにおいて、「＜ｖｉｄｅｏ  ｓｒｃ＝“ｒｅｍｏｔｅ＿ｐｒｅｓｅｎｔａｔｉｏｎ＿ｓｅｓｓｉｏｎ．ａｖｉ”ａｕｔｏｐｌａｙ＝”ａｕｔｏｐｌａｙ”／＞」と表すことができる。この例では、ａｕｔｏｐｌａｙ＝”ａｕｔｏｐｌａｙ”という属性は、ウェブ・ブラウザはビデオの初期部分を受け取るとビデオの再生を自動的に開始する、ということを意味する。
【００５７】
[0069]  オペレーション９１２は、クライアントから、ＨＴＴＰセッションを介して、ウェブ・ブラウザへ向けられたユーザ入力のインジケーションを受け取ることを示す。オペレーション９１０と関連して説明したように、クライアントはビデオをウェブ・ブラウザで表示することができ、クライアントは、例えば、カーソルを動かすことや、キーボードのボタンを押すことも含めてのボタンの押すことなどにより、入力をウェブ・ブラウザへ提供することができる。これらは、クライアントで取り込まれ、ＨＴＴＰセッションを介してプロキシへ送られる。実施形態では、入力が提供された場所も、ＨＴＴＰセッションを介してプロキシへ送られる。
【００５８】
[0070]  オペレーション９１４は、リモート・プレゼンテーション・プロトコルを用いてユーザ入力をエンコードすることを示す。プロキシは、オペレーション９１２でクライアントから受け取ったユーザ入力を取り入れ、それを、リモート・プレゼンテーション・プロトコルに従ってエンコードすることができる。例えば、ユーザ入力は、ＪＳＯＮ（ＪａｖａＳｃｒｉｐｔ  Ｏｂｊｅｃｔ  Ｎｏｔａｔｉｏｎ）標準でフォーマットされた形で受け取られることができ、それは、スキーマ様オブジェクト（schema-like object）に従って入力を構築する。スキーマ様オブジェクトは、そのタイプのオブジェクトの構造およびコンテンツの制約を有するオブジェクトである。そのような場合、プロキシは、ＪＳＯＮフォーマットからユーザ入力を抽出し、それを、リモート・プレゼンテーション・プロトコルを用いてエンコードすることができる。
【００５９】
[0071]  オペレーション９１６は、エンコードされたユーザ入力を、リモート・プレゼンテーション・セッションを介してサーバへ送ることを示す。これは、プロキシが、リモート・プレゼンテーション・プロトコルでエンコードされたユーザ入力を、リモート・プレゼンテーション・セッション接続を介してサーバへ送ることを含む。
【００６０】
[0072]  オペレーション９１８は、サーバから、リモート・プレゼンテーション・セッションを介して、リモート・プレゼンテーション・プロトコルを用いてエンコードされた第２のグラフィカル・データを受け取ることを示し、第２のグラフィカル・データは、サーバでユーザ入力と関連するオペレーションを実行して得られるグラフィカル結果に対応する。これは、オペレーション９０６を実現する方法と同様に実現することができる。ここで、サーバは、ユーザ入力を受け取り、ユーザ入力と関連する処理を行い、ユーザ入力と関連する処理から、グラフィカル結果（また、可能性としては、それにオーディオ結果も加える場合や、オーディオ結果のみの場合もあり得る）と関連する１以上のリモート・プレゼンテーション・セッション・グラフィカル・データを生成している。グラフィカル結果を生成すると、それを、サーバは、リモート・プレゼンテーション・プロトコルを用いてエンコードし、プロキシへ送っている。
【００６１】
[0073]  オペレーション９２０は、第２のグラフィカル・データを第２のビデオとしてエンコードすることを示す。オペレーション９２０は、オペレーション９０８と同様の様式で行うことができる。第２のビデオおよび同じビデオは、同じストリーミング・ビデオの一部とすることができ、第２のビデオは、ビデオ・ストリームにおける第１のビデオに続く１以上のフレームを含む。
【００６２】
[0074]  オペレーション９２２は、ＨＴＴＰセッションを介して第２のビデオをクライアントへ送ることを示し、クライアントはウェブ・ブラウザで第２のビデオを表示する。オペレーション９２２は、オペレーション９１０と同様の様式で行うことができる。
【００６３】
[0075]  図１０は、サーバとのリモート・プレゼンテーション・セッションを行うためにウェブ・ブラウザを用いるクライアントのための例示的な動作プロシージャを示す。例えば、それらの動作プロシージャは、図３のプロキシ３０６または図４のサーバ４０４と通信するときに、実現することができる。
【００６４】
[0076]  オペレーション１００２は、サーバとのリモート・プレゼンテーション・セッションを確立することを示す。実施形態では、リモート・プレゼンテーション・セッションは、ハイパーテキスト・トランスファー・プロトコル（ＨＴＴＰ）・セッションを含む。オペレーション１００２は、クライアントに関してオペレーション８０２を実現する方法の記述と同様にして実現することができる。
【００６５】
[0077]  オペレーション１００４は、ＨＴＴＰセッションを介してサーバへ資格情報を送ることを示し、資格情報は、サーバとのリモート・プレゼンテーション・セッションを行うことを許可されたユーザと関連している。オペレーション１００４は、クライアントに関してオペレーション８０４を実現する方法の記述と同様にして実現することができる。実施形態では、クライアントは、ユーザに対して、ログインおよびパスワードの入力を入れることを促し、受け取った入力を資格情報として用いる。
【００６６】
[0078]  オペレーション１００６は、ＨＴＴＰセッションを介してサーバからビデオを受け取ることを示し、ビデオは、サーバでアプリケーションまたはユーザ・セッションを実行して得られるグラフィカル出力を含む。これは、サーバから、＜ｖｉｄｅｏ＞エレメントを含むウェブ・ページ（例えば、ＨＴＭＬ５のウェブ・ページ）を受け取ることを含むことができ、この＜ｖｉｄｅｏ＞エレメントは、サーバでのアプリケーションまたはユーザ・セッションの実行からのグラフィカル出力を含むビデオを参照する。
【００６７】
[0079]  オペレーション１００８は、ウェブ・ブラウザでビデオを表示することを示す。クライアントで実行されるウェブ・ブラウザは、ビデオを含むウェブ・ページをレンダリングし、その結果を、クライアントのディスプレイ・デバイス、例えばモニターなどで、表示することができる。
【００６８】
[0080]  オペレーション１０１０は、ウェブ・ブラウザへ向けられたユーザ入力を受け取ることを示し、ユーザ入力は、ビデオにおける場所に対応する。ビデオを含むウェブ・ページは、ＪａｖａＳｃｒｉｐｔで表されるロジックなどのようなロジックも含み、ロジックは、ウェブ・ページへ向けられたユーザ入力を検出して取り込むように構成される。このユーザ入力は、例えば、カーソルの動き、および／またはキーボードのキーを押したことを含むことができる。
【００６９】
[0081]  オペレーション１０１２は、ユーザ入力のインジケーションをサーバへ送ることを示す。実施形態では、ユーザ入力は、ビデオと相対しての入力が行われた場所（例えば、カーソルが、左上隅部から５０ピクセルのビデオの左縁部に入り、時間ｔにおいて右へ７５ピクセル移動させられた）のインジケーションと共に送られる。実施形態では、入力は、トランスポートのためにフォーマットされることができ、例えば、データ構造および連想配列を表す人間読取可能な形態、例えば、ＪＳＯＮ（ＪａｖａＳｃｒｉｐｔ  Ｏｂｊｅｃｔ  Ｎｏｔａｔｉｏｎ）や、ＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）のようなタグ区切りマークアップ・フォーマットにフォーマットされることができる。
【００７０】
[0082]  オペレーション１０１４は、サーバから第２のビデオを受け取ることを示し、この第２のビデオは、場所に対応する、サーバで実行されるアプリケーションへ、サーバがユーザ入力を入れる（injecting）ことに対応する。この第２のビデオおよびビデオは、双方とも、１つのストリーミング・ビデオの一部であり得、ストリーミング・ビデオは、リモート化されたサーバからのグラフィカル出力を示し、それは時間の経過とともに変化する。
【００７１】
[0083]  オペレーション１０１６は、ウェブ・ブラウザで第２のビデオを表示することを示す。クライアントは、第２のビデオを含むストリーミング・ビデオの受信を継続するので、そのストリーミング・ビデオをウェブ・ブラウザで表示することができる。
【００７２】
[0084]  図１１および図１２は、仮想マシンを実現するように構成されるコンピュータ・システム１１００および１２００の高位ブロック図を示す。本発明の例示的な実施形態では、コンピュータ・システム１１００および１２００は、図１に記載したエレメントを含むことができる。図に示すように、様々なアーキテクチャーが存在するが、それらは、一般には、類似のコンポーネントを有する。例えば、図１１は１つのオペレーション環境を示し、そのオペレーション環境では、当該技術において仮想マシン・モニターと呼ばれることもあるハイパーバイザーは、マイクロカーネル１１０２と親パーティション１１０４とに分離されている。他方、図１２では、ハイパーバイザー１２０４が図１１の親パーティション１１０４内に見られるエレメントを含むものとして、示されている。
【００７３】
[0085]  図１１は、クライアントとのリモート・プレゼンテーション・セッションを行う１以上の仮想マシンをホストすることができる例示的な仮想マシン・サーバを示し、クライアントは、ウェブ・ブラウザを用い、リモート・プレゼンテーション・グラフィックスとしてビデオを受信する。ハイパーバイザー・マイクロカーネル１１０２は、コンピュータ・システム１１００のハードウェアへのアクセスを制御および仲裁するように構成することができる。大雑把には、ハイパーバイザー・マイクロカーネル１１０２は、パーティションと呼ばれる実行環境、例えば、子パーティション１  １１５０から子パーティションＮ  １１５２（Ｎは１より大きい整数）などを、生成することができる。実施形態では、子パーティションは、ハイパーバイザー・マイクロカーネル１１０２によりサポートされる分離の基本単位である。即ち、それぞれの子パーティションは、ハイパーバイザー・マイクロカーネル１１０２の制御下にある１組のハードウェア・リソース、例えば、メモリ、デバイス、論理プロセッサ・サイクルなどへとマップされることができ、ハイパーバイザー・マイクロカーネル１１０２は、１つのパーティションのプロセスを、別のパーティションのリソースがアクセスすることから分離することができる。例えば、１つのパーティションにおけるゲスト・オペレーティング・システムを、別のパーティションのメモリから分離することができ、従って、ゲスト・オペレーティング・システムがそのパーティションの外側にあるメモリ・アドレスを検出できないようにできる。実施形態では、ハイパーバイザー・マイクロカーネル１１０２は、スタンドアローン・ソフトウェア製品や、マザーボードのファームウェア内に埋め込まれたオペレーティング・システムの一部や、特別の集積回路や、これらの組み合わせとすることができる。
【００７４】
[0086]  この動作環境における親パーティション１１０４は、オープン・ソース・コミュニティーにおいて典型的にはバックエンド・ドライバと呼ばれる仮想化サービス・プロバイダ（ＶＳＰ）１１２８を用いることにより、子パーティション１−Ｎで動作するゲスト・オペレーティング・システムへリソースを提供するように、構成することができる。大雑把には、ＶＳＰ１１２８は、仮想化サービス・クライアント（ＶＳＣ）（オープン・ソース・コミュニティーにおいて典型的にはフロントエンド・ドライバと呼ばれる）のためにハードウェア・リソースへのインターフェースを多重化し、通信プロトコルを介して仮想化サービス・クライアントと通信するために、用いることができる。図で示すように、仮想化サービス・クライアントは、ゲスト・オペレーティング・システムのコンテキスト内で実行されることができる。これらのドライバは、これらがゲストではなくハイパーバイザーを用いて供給されるという点で、ゲストのその他のドライバとは異なる。
【００７５】
[0087]  マイクロカーネル１１０２は、ゲスト・オペレーティング・システムによるシステム・メモリのビューを制限することにより、パーティションを実施することができる。ゲストのメモリは、ハイパーバイザーにより制御されるメモリのパーティションのビューである。ゲスト物理アドレスは、ハイパーバイザーにより管理されるシステム物理アドレス（ＳＰＡ）、即ち、物理コンピュータ・システムのメモリにより支持することができる。図で示すように、１つの実施形態では、ＧＰＡおよびＳＰＡは、メモリ・ブロック、即ち、メモリの１以上のページに配することができる。ゲストが、ブロックへ、そのページ・テーブルを用いて書き込みを行うとき、データは、ハイパーバイザーにより使用されるシステム全体のページ・テーブルに従って別のシステム・アドレスでブロックへ実際に格納される。
【００７６】
[0088]  図で示すように、本開示の実施形態では、ＩＯエミュレータ（１１３４および１１３６）、例えば、仮想化ＩＤＥデバイス、仮想化ビデオ・アダプタ、仮想化ＮＩＣなどを、それらの個々の子パーティション内で実行されるように、構成することができる。以下で更に詳細に説明するが、エミュレータを子パーティション内で実行するように構成することにより、計算オーバーヘッドとともに、ハイパーバイザーのアタック・サーフェイス（attack surface）が低減される。
【００７７】
[0089]  それぞれの子パーティションは１以上の仮想プロセッサ（１１３０および１１３２）を含むことができ、ゲスト・オペレーティング・システム（１１２０および１１２２）は、プロセッサで実行するスレッドを管理およびスケジュールできる。一般に、仮想プロセッサは、実行可能命令と、関連する状態情報とであり、これらは、物理プロセッサの表現へ特定のアーキテクチャーを提供する。例えば、或る仮想マシンは、ＩＮＴＥＬ（インテル）ｘ８６プロセッサの特徴を有する仮想プロセッサを有することができ、別の仮想マシンは、ＰｏｗｅｒＰＣプロセッサの特徴を有することができる。この例の仮想プロセッサは、コンピュータ・システムの論理プロセッサへマップすることができ、仮想プロセッサを実現する命令は、論理プロセッサにより支持されるようにする。即ち、複数の論理プロセッサを含む実施形態では、仮想プロセッサを、論理プロセッサにより同時に実行することができ、他方、例えば、他の論理プロセッサは、ハイパーバイザー命令を実行する。パーティションにおける仮想プロセッサとメモリとの組み合わせは、仮想マシンと考えることができる。
【００７８】
[0090]  ゲスト・オペレーティング・システムは、任意のオペレーティング・システム、例えば、マイクロソフト（登録商標）・ウィンドウズ（登録商標）の様々なバージョンのもの（例えば、ＷＩＮＤＯＷＳs（登録商標）  ＸＰやＷＩＮＤＯＷＳ（登録商標）  ７）を含むことができる。ゲスト・オペレーティング・システムは、ユーザ／カーネル・モードのオペレーションを含むことができ、スケジューラーやメモリ・マネージャなどを含むことができるカーネルを有することができる。一般に、カーネル・モードは、論理プロセッサにおける実行モードを含むことができ、これは、少なくとも特権プロセッサ命令へのアクセスを許可する。それぞれのゲスト・オペレーティング・システムは、関連するファイル・システムを有することができ、ファイル・システムは、それに格納されるアプリケーション、例えば、ターミナル・サーバ、ｅコマース・サーバ、ｅメール・サーバなど、およびゲスト・オペレーティング・システム自体を、有することができる。ゲスト・オペレーティング・システムは、仮想プロセッサで実行するスレッドをスケジュールすることができ、そのようなアプリケーションのインスタンスを実現することができる。
【００７９】
[0091]  図１２は、クライアントとのリモート・プレゼンテーション・セッションを行う１以上の仮想マシンをホストすることができる例示的な仮想マシン・サーバを示し、クライアントは、ウェブ・ブラウザを用い、リモート・プレゼンテーション・グラフィックスとしてビデオを受信する。図１２は、図１１に関して上記で説明したアーキテクチャーの代替的なアーキテクチャーを示す。図１２は図１１のコンポーネントと似たコンポーネントを示す。しかし、この例示的な実施形態では、ハイパーバイザー１２０４は、マイクロカーネル・コンポーネントと、図１１の親パーティション１１０４からのコンポーネント、例えば、仮想化サービス・プロバイダ１１２８やデバイス・ドライバ１１２４などとを含むことができ、マネジメント・オペレーティング・システム１２０２は、例えば、ハイパーバイザー１２０４を構成するために使用される構成（configuration）ユーティリティーを含むことができる。このアーキテクチャーでは、ハイパーバイザー１２０４は、図１１のハイパーバイザー・マイクロカーネル１１０２と同じまたは類似の機能を行うことができる。しかし、このアーキテクチャーでは、ハイパーバイザー１２０４は、子パーティションにおいて実行されるゲスト・オペレーティング・システムへリソースを提供するように、構成することができる。図１２のハイパーバイザー１２０４は、スタンドアローン・ソフトウェア製品、マザーボードのファームウェア内に埋め込まれたオペレーティング・システムの一部とすることができ、また、ハイパーバイザー１２０４の一部を特別の集積回路により実現することができる。
【００８０】
[0092]  図１３は、仮想マシン・サーバを含む例示的なシステムを示し、仮想マシン・サーバは、複数の仮想マシンをホストし、それぞれの仮想マシンは、クライアントとのリモート・プレゼンテーション・セッションを行い、クライアントは、ウェブ・ブラウザを用い、リモート・プレゼンテーション・グラフィックスをビデオとして受け取る。実施形態では、ＶＭホストは、図１１のコンピュータ・システム１１００または図１２のコンピュータ・システム１２００において実現することができる。そのような実施形態では、ＶＭ１３０２ａおよびＶＭ１３０２ｂは、図１１および図１２の子パーティション１１５０または１１５２において実現することができる。
【００８１】
[0093]  示されているように、ＶＭ１３０２ａおよび１３０２ｂのそれぞれは、１以上のクライアントとのリモート・プレゼンテーション・セッションのために働くように構成され、１以上のクライアントは、リモート・プレゼンテーション・セッションを介してビデオを受信し、ウェブ・ブラウザを介してリモート・プレゼンテーション・セッションを行う。例えば、ＶＭ１３０２ａおよび１３０２ｂのそれぞれは、図３のサーバ３０４の機能を実現するように、構成することができる。そのような実施形態では、クライアント３０８は、ＶＭホスト１３００へ接続することができ、ＶＭホストは、そのＶＭの１つへ、そのクライアントとのリモート・プレゼンテーション・セッションのために働くように指図する。ＶＭホスト１３００は、この指図を、例えば、ＶＭホストがホストする各ＶＭの負荷のバランスに基づいて、行うことができる。
【００８２】
[0094]  本発明を、様々な図に示した好適な態様と関連して説明したが、本開示から離れずに本開示と同じ機能を行うために、他の類似の態様を用いることや、説明した態様に対する変更および追加を行えることが、理解される。従って、本開示は、何れの１つの態様にも限定すべきではなく、添付の特許請求の範囲に従った外延および範囲にあると解釈すべきである。例えば、ここで説明した様々なプロシージャは、ハードウェアまたはソフトウェア、またはこれらの組み合わせを用いて実施することができる。本発明は、コンピュータ読取可能記録媒体および／またはコンピュータ読取可能通信媒体を用いて、実施することができる。即ち、本発明または本発明の特定の態様または部分は、例えば、フロッピー（登録商標）・ディスケット、ＣＤ−ＲＯＭ、ハード・ドライブ、または他の任意の機械読取可能記録媒体などのような実体的な媒体で実現されるプログラム・コード（即ち、命令）の形態とすることができる。同様に、本発明または本発明の特定の態様または部分は、伝播される信号または他の任意の機械読取可能通信媒体で実現することができる。プログラム・コードが、コンピュータなどのようなマシンへロードされて実行されると、マシンは、開示された実施形態を実施するように構成される装置となる。ここで明確に記載した特定の実施に加えて、当業者であれば、ここで開示した仕様を考慮することにより、他の態様および実施も明らかとなるであろう。仕様および例示した実施は、単なる例として考慮することが意図されている。
【図６】
2014523669.tif 000003
【図７】
2014523669.tif 000004
【図８】
2014523669.tif 000005
【図９】
2014523669.tif 000006
【図１０】
2014523669.tif 000007
【図１１】
2014523669.tif 000008
【図１２】
2014523669.tif 000009
【図１】
2014523669.tif 000010
【図２】
2014523669.tif 000011
【図３】
2014523669.tif 000012
【図４】
2014523669.tif 000013
【図５】
2014523669.tif 000014
【図１３】
2014523669.tif 000015
【国際調査報告】
2014523669.tif 000016
2014523669.tif 000017