(57)【要約】本開示の例示の実施形態では、リアルタイム画像圧縮において使用するための高速のエントロピー符号器／復号器を提供する。リモートコンピュータ装置への送信のためにグラフィックデータを処理する方法は、描画されるクライアント画面を表現するグラフィックデータを受け取るステップ、送信に利用可能な帯域幅を示す情報を受け取るステップ、この情報に基づき、利用可能な帯域幅が所定の閾値を満たすと判定するステップ、および固定ビットサイズの符号化ストリームを使用してグラフィックデータをエントロピー符号化するステップであって、連続するゼロが固定ビットサイズの可変個のユニットに符号化され、リテラル値が、直近に使用されたリテラル値のキャッシュ内のエントリまたは固定ビットサイズの可変個のユニットのうちの１つを使用して符号化されるステップを含んでよい。
2013541295.tif 000002
【特許請求の範囲】
【請求項１】
リモートコンピュータ装置への送信のためにグラフィックデータを処理する方法であって、
仮想マシンセッションに関連するクライアント画面を表現するグラフィックデータを受けるステップと、
前記送信に利用可能な帯域幅を示す情報を受け取り、前記情報に基づき、前記利用可能な帯域幅が所定の閾値を満たすことを判定するステップと、
バイト境界に整列するグループを形成するビットトークンのコンパクトなストリームを使用して、変換されたグラフィックデータの係数をエントロピー符号化するステップであって、
連続するゼロが量子サイズの可変個の倍数に符号化され、
リテラル値が、直近に使用されたリテラル値のキャッシュ内のエントリを使用して符号化され、
他の値が前記量子サイズの最少個の倍数を使用して符号化される
ステップと
を含むことを特徴とする方法。
【請求項２】
エントロピー符号化演算コードのストリームおよび大きな値のストリームを生成するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項３】
大きな値より小さな値に対して少ないバイトを使用するというマルチバイト符号化スキームを用いて、前記大きな値のストリームをエントロピー符号化するステップをさらに含むことを特徴とする請求項２に記載の方法。
【請求項４】
前記符号化スキームを固定バイト境界上でのみ動作するべく構成することを特徴とする請求項３に記載の方法
【請求項５】
前記グラフィックデータをデータタイルに分割するステップと、前記データタイルをタイル構成要素に処理するステップと、前記エントロピー符号化を前記タイル構成要素に対して実行するステップとをさらに含むことを特徴とする請求項３に記載の方法。
【請求項６】
リモートコンピュータ装置への送信のためにグラフィックデータを処理するシステムであって、
少なくとも１つのプロセッサを含むコンピュータ装置と、
前記システムが動作可能である時に、前記プロセッサに通信可能に連結されるメモリであって、前記少なくとも１つのプロセッサにより実行されると、前記プロセッサに
仮想マシンセッションに関連するクライアント画面を表現するグラフィックデータを受けるステップと、
前記グラフィックデータをデータタイルに分割するステップと、
バイト境界に整列するグループを形成するビットトークンのストリームを使用して、変換されたデータタイルの係数をエントロピー符号化するステップであって、
連続するゼロが量子サイズの可変個の倍数に符号化され、
リテラル値が、直近に使用されたリテラル値のキャッシュ内のエントリを使用して符号化され、
他の値が前記量子サイズの最少個のユニットを使用して符号化される
ステップと
を実行させるコンピュータ命令を記憶したメモリと
を備えることを特徴とするシステム。
【請求項７】
前記符号化された係数を、前記符号化された係数を前記量子サイズに基づき処理するべく構成されたコンピュータ装置に送信するステップをさらに含むことを特徴とする請求項６に記載のシステム。
【請求項８】
前記符号化されたデータが、前記符号化されたデータに対してバイトごとに動作するべく構成されたエントロピー復号化プロセスによる効率的な復号のために、演算可能であることを特徴とする請求項６に記載のシステム。
【請求項９】
大きな値より小さな値に対して少ないバイトを使用するというマルチバイト符号化スキームを用いて、大きな値のストリームをエントロピー符号化するステップをさらに含むことを特徴とする請求項６に記載のシステム。
【請求項１０】
クライアントコンピュータへの送信のためにグラフィックデータを処理するコンピュータ実行可能命令を記憶するコンピュータ可読記憶媒体であって、前記命令が、
仮想マシンセッションに関連するクライアント画面を表現するグラフィックデータを受けるステップと、
符号化されたデータをバイトベースの復号化プロセスを使用して復号化できるようにするために、バイト境界に整列するグループを形成するビットトークンのコンパクトなストリームを使用して、変換されたグラフィックデータの係数をエントロピー符号化するステップであって、
連続するゼロがニブルの可変個の倍数に符号化され、
リテラル値が、直近に使用されたリテラル値のキャッシュ内のエントリを使用して符号化され、
他の値がニブルの最少個の倍数を使用して符号化される
ステップと
に対する命令であることを特徴とする記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本願発明は、画像データの処理に関する。
【背景技術】
【０００２】
大衆向けの形態のネットワーキングで増加しているものの１つに、一般的にはリモートプレゼンテーションシステムと呼ばれるものがあり、このシステムではＲＤＰ（Ｒｅｍｏｔｅ  Ｄｅｓｋｔｏｐ  Ｐｒｏｔｏｃｏｌ）およびＩＣＡ（Ｉｎｄｅｐｅｎｄｅｎｔ  Ｃｏｍｐｕｔｉｎｇ  Ａｒｃｈｉｔｅｃｔｕｒｅ）などのプロトコルを使用して、サーバ上で実行中のデスクトップや他のアプリケーションをリモートクライアントと共有することができる。そのようなコンピュータシステムでは、典型的にはネットワーク接続（例えば、インターネット）を介して、キーボード押下やマウスのクリックまたは選択をクライアントからサーバに送信し、反対方向に画面の更新を中継して返す。このように、実際には、サーバ側で見られるのと同様なデスクトップまたはアプリケーションのスクリーンショットがクライアント装置に送られるだけで、ユーザは自分のマシンが完全にローカルに動作しているかのような経験をする。
【０００３】
リモートデスクトップ環境においては、クライアントに送信されるグラフィックを表すデータが、典型的には、サーバにより圧縮され、ネットワークを介してサーバからクライアントに送信され、クライアントにより圧縮解除されてローカルのユーザのディスプレイ上に表示される。データの符号化の処理は、典型的にはデータを圧縮および圧縮解除するためにかなりのプロセッサ計算サイクルを必要とする。そのような処理の必要性により、サーバからクライアントに対して符号化および復号化のレイテンシに直接的な影響を与え、リモートのユーザの経験に否定的な影響を与える可能性がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許第７，４６０，７２５号明細書
【特許文献２】米国特許出願第１２／３９９，３０２号明細書
【発明の概要】
【０００５】
リモートプレゼンテーションシステムの１つの問題点は、そのようなシステムはプロセッサのパフォーマンスを犠牲にしてデータの圧縮を優先させる傾向があるということである。多くのシステムでは、帯域幅（bandwidth）は制限される可能性が高いということを前提としており、従って高レベルのデータ圧縮を実現するためにプロセッサのパフォーマンスを犠牲にし、従って制限された帯域幅のデータリンクを介して送信される必要があるデータ量を減少させる。しかし、今日、多くのリモートプレゼンテーションのクライアントは、低速のプロセッサを使用するが十分に広帯域な帯域幅にアクセスすることができる、よりローエンドの装置である。そのような場合、全体のパフォーマンスおよびユーザ経験は、たとえ圧縮が低下することになっても、より簡素な圧縮器（コンプレッサー）や計算をあまり必要としない圧縮技術を使用することにより、改善することができる。
【０００６】
種々の実施形態において、リアルタイムの画像圧縮において使用するための高速のエントロピーコーダー／デコーダーに関する方法およびシステムを開示する。例えば、リモートコンピュータ装置への送信のためにグラフィックデータを処理する方法は、描画されるクライアント画面を表現するグラフィックデータを受け取るステップ、送信のために利用可能な帯域幅を示す情報を受け取るステップ、この情報に基づき、利用可能な帯域幅が所定の閾値を満たすと判定するステップ、および固定ビットサイズの符号化ストリームを使用してグラフィックデータをエントロピー符号化するステップであって、連続するゼロが固定ビットサイズの可変個のユニットに符号化され、リテラル値が、直近に使用されたリテラル値のキャッシュ内のエントリまたは固定ビットサイズの可変個のユニットのうちの１つを使用して符号化されるステップを含んでよい。
【図面の簡単な説明】
【０００７】
本明細書に従う、リモートコンピュータ装置への送信のためのグラフィックデータに関するシステム、方法、およびコンピュータ可読媒体について、添付の図面を参照してさらに記載する。
【０００８】
本明細書に従う、仮想的な環境における観点を改めるためのシステム、方法、およびコンピュータ可読媒体について、添付の図面を参照してさらに記載する。
【図１】本開示の態様を実装可能な一例のコンピュータシステムを示す図である。
【図２】本開示の態様を実装可能な一例のコンピュータシステムを示す図である。
【図３】本開示の態様を実施するための動作環境を示す図である。
【図４】本開示の態様を実施するための動作環境を示す図である。
【図５】リモートデスクトップサービスを実施するための電気回路を含むコンピュータシステムを示す図である。
【図６】リモートサービスを実施するための電気回路を含むコンピュータシステムを示す図である。
【図７】復号化プロセスの一例を示す図である。
【図８】符号化プロセスの一例を示す図である。
【図９】クライアントコンピュータへの送信のためにグラフィックデータを処理する動作手順の一例を示す図である。
【図１０】クライアントコンピュータへの送信のためにグラフィックデータを処理する動作手順の一例を示す図である。
【図１１】クライアントコンピュータへの送信のためにグラフィックデータを処理する一例のシステムを示す図である。
【発明を実施するための形態】
【０００９】
概括的なコンピュータ環境  
本開示の種々の実施形態が完全に理解されるよう、特定の具体的な詳細を以下の記載および図面において記述する。本開示の種々の実施形態を無用に曖昧にすることを避けるために、コンピュータおよびソフトウェアの技術に関連することが多い特定の周知の詳細は、以下の開示においては記述しない。さらに、以下に記載する１つまたは複数の詳細を必要とすることなく本開示の他の実施形態を実践可能であることを、当業者は理解するであろう。最後に、種々の方法を以下の開示においてステップおよび順序を参照して記載するが、そのような記載は本開示の実施形態の明確な実装を提供するためのものであり、そのステップおよびステップの順序が本開示を実践するために必要とされるものであると解釈されるべきではない。
【００１０】
本明細書に記載する種々の技術を、ハードウェアもしくはソフトウェアに関連して、または適切な場合にはその両方の組み合わせに関連して実装して良いことは、理解されるべきである。従って、本開示の方法および装置、または特定の態様もしくはその一部は、フロッピー（登録商標）ディスク、ＣＤ−ＲＯＭ、ハードドライブ、または任意の他のマシン可読記憶媒体などの有形の媒体において具現化されるプログラムコード（すなわち命令）の形式をとってよく、プログラムコードがコンピュータなどのマシンにロードされてマシンにより実行されると、マシンが本開示を実践するための装置となる。プログラム可能なコンピュータ上でプログラムコードが実行される場合、コンピュータ装置には、一般的にプロセッサ、プロセッサが可読の記憶媒体（揮発性および不揮発性のメモリおよび／または記憶素子を含む）、少なくとも１つの入力装置、および少なくとも１つの出力装置を含む。１つまたは複数のプログラムが、例えば、ＡＰＩ（ａｐｐｌｉｃａｔｉｏｎ  ｐｒｏｇｒａｍｍｉｎｇ  ｉｎｔｅｒｆａｃｄｅ）、再利用可能制御などの使用を介して、本開示に関連して記載するプロセスを実装または利用してよい。そのようなプログラムは、好ましくは高レベルの手続き型またはオブジェクト指向のプログラミング言語で実装されて、コンピュータシステムと通信を行う。しかし、プログラム(複数可)は必要に応じてアセンブリ言語または機械語で実装することが可能である。いずれの場合も、言語はコンパイラ型言語またはインタープリタ型言語であってよく、ハードウェア実装と組み合わせてもよい。
【００１１】
リモートデスクトップシステムは、クライアントコンピュータシステムによりリモートで実行可能なアプリケーションを維持するコンピュータシステムである。入力はクライアントコンピュータシステムにおいて行われ、ネットワークを介して（例えば、ＲＤＰ（Ｒｅｍｏｔｅ  Ｄｅｓｋｔｏｐ  Ｐｒｏｔｏｃｏｌ）などのプロトコルであるＩＴＵ（Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｔｅｌｅｃｏｍｍｕｎｉｃａｔｉｏｎｓ  Ｕｎｉｏｎ）Ｔ．１２０系に基づくプロトコルを使用して）、ターミナルサーバ上のアプリケーションに転送される。アプリケーションは、入力がターミナルサーバで行われたかのように入力を処理する。アプリケーションは受け取った入力に応答して出力を生成し、出力がネットワークを介してクライアントに転送される。
【００１２】
実施形態を、１つまたは複数のコンピュータ上で実行してよい。図１および２ならびに以下の検討は、本開示を実装することができる適切なコンピュータ環境の簡単な概要の記載を提供することを意図している。コンピュータシステム２００、３００が図１および２のコンピュータ１００について記載する構成要素の内のいくつかまたは全てを有することが可能であることを、当業者は理解できよう。
【００１３】
本開示を通じて使用される用語「電気回路」には、ハードウェア構成要素、例えば、ハードウェア割り込みコントローラ、ハードドライブ、ネットワークアダプタ、グラフィックプロセッサ、ハードウェアベースのビデオ／オーディオコーデック、およびそのようなハードウェアの動作に使用されるファームウェア／ソフトウェアなどを含めることができる。用語「電気回路」にはまた、ファームウェアにより機能（複数可）を実行するべく、または、特定の方法または１つもしくは複数の論理プロセッサ、例えば、マルチコア汎用処理装置の１つまたは複数のコアで設定されるスイッチにより機能を実行するべく構成されるマイクロプロセッサを含めることも可能である。本例の論理プロセッサ(複数可)は、メモリ、例えばＲＡＭ、ＲＯＭ、ファームウェア、および／または仮想メモリからロードされる機能（複数可）を実行するべく動作可能な論理を具現化するソフトウェア命令により構成可能である。電気回路にハードウェアおよびソフトウェアの組み合わせが含まれる例示の実施形態において、開発者は論理を具現化するソースコードを書くことができ、これは次に論理プロセッサにより実行可能なマシン可読コードにコンパイルされる。ハードウェア、ソフトウェア、またはハードウェア／ソフトウェアの組み合わせの間にはほとんど違いがないという点に技術の状態が発展しているということを当業者が理解可能であるため、機能を達成するためのハードウェアかソフトウェアかという選択は、単なる設計上の選択である。従って、ソフトウェアのプロセスを等価のハードウェア構造に転換可能であること、および、ハードウェア構造自体を等価のソフトウェアのプロセスに転換可能であることを当業者が理解可能であるため、ハードウェア実装かソフトウェア実装かの選択はささいなことであり、開発者の裁量に任されるものである。
【００１４】
図１は、本開示の態様を用いて構成されるコンピュータシステムの一例を示す。コンピュータシステムには、処理装置２１、システムメモリ２２、およびシステムメモリを含む種々のシステム構成要素を処理装置２１に連結させるシステムバス２３を含むコンピュータ２０などを含むことができる。システムバス２３は、メモリバスまたはメモリコントローラ、周辺機器用バス、および様々なバスアーキテクチャのいずれかを使用するローカルバスを含む、いくつかのタイプのバス構造のいずれかであってよい。システムメモリには、ＲＯＭ（ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ）２４およびＲＡＭ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）２５を含む。ＢＩＯＳ（ｂａｓｉｃ  ｉｎｐｕｔ／ｏｕｔｐｕｔ  ｓｙｓｔｅｍ）２６は、起動時などにコンピュータ２０内の要素間で情報の転送を支援する基本ルーチンを含み、ＲＯＭ２４内に記憶される。コンピュータ２０には、ハードディスク（図示せず）に対して読み書きを行うハードディスクドライブ２７、着脱可能磁気ディスク２９に対して読み書きを行う磁気ディスクドライブ２８、および、ＣＤ−ＲＯＭまたは他の光媒体などの着脱可能光ディスク３１に対して読み書きを行う光ディスクドライブ３０をさらに含んでよい。いくつかの例示の実施形態において、本開示の態様を具現化するコンピュータ実行可能命令を、ＲＯＭ２４、ハードディスク（図示せず）、ＲＡＭ２５、着脱可能磁気ディスク２９、光ディスク３１、および／または処理装置２１のキャッシュに記憶してよい。ハードディスクドライブ２７、磁気ディスクドライブ２８、および光ディスクドライブ３０は、システムバス２３に対してそれぞれハードディスクドライブインターフェース３２、磁気ディスクドライブインターフェース３３、および光ドライブインターフェース３４により接続される。ドライブおよびそれに関連するコンピュータ可読媒体により、コンピュータ可読命令、データ構造、プログラムモジュール、およびコンピュータ２０用の他のデータの不揮発性記憶装置を提供する。本明細書に記載する環境ではハードディスク、着脱可能磁気ディスク２９、および着脱可能光ディスク３１を採用するが、コンピュータによりアクセス可能なデータを記憶できる他のタイプのコンピュータ可読媒体、例えば、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌイカートリッジ、ＲＡＭ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、ＲＯＭ（ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ）なども動作環境において使用してよいことは、当業者により理解されるべきである。
【００１５】
多数のプログラムモジュールを、ハードディスク、磁気ディスク２９、光ディスク３１、ＲＯＭ２４、またはオペレーティングシステム３５を含むＲＡＭ２５、１つまたは複数のアプリケーションプログラム３６、他のプログラムモジュール３７、およびプログラムデータ３８上に記憶してよい。ユーザは、コマンドおよび情報をキーボード４０およびポインティングデバイス４２などの入力装置を介してコンピュータ２０に入力することができる。他の入力装置（図示せず）には、マイクロフォン、ジョイスティック、ゲームパッド、衛星ディスク、スキャナなどを含めてよい。これらおよび他の入力装置は、システムバスに連結されるシリアルポートインターフェース４６を介して処理装置２１に接続されることが多いが、パラレルポート、ゲームポート、またはＵＳＢ（ｕｎｉｖｅｒｓａｌ  ｓｅｒｉａｌ  ｂｕｓ）などの他のインターフェースによって接続してもよい。ディスプレイ４７または他のタイプのディスプレイ装置を、ビデオアダプタ４８などのインターフェースを介してシステムバス２３に接続することも可能である。ディスプレイ４７に加えて、コンピュータには、典型的にはスピーカおよびプリンタなどの他の周辺出力装置（図示せず）を含む。図１のシステムにはまた、ホストアダプタ５５、ＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）バス５６、およびＳＣＳＩバス５６に接続される外部記憶装置６２も含む。
【００１６】
コンピュータ２０は、ネットワーク化された環境においてリモートコンピュータ４９などの１つまたは複数のリモートコンピュータに対する論理接続を使用して動作することができる。リモートコンピュータ４９は、別のコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピア装置または他の共通ネットワークノード、仮想マシンとすることができ、また、典型的にはコンピュータ２０に関連して上述した要素の内の多くまたは全てを含むことができるが、図１にはメモリ記憶装置５０のみが例示されている。図１に示される論理接続には、ＬＡＮ（ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）５１およびＷＡＮ（ｗｉｄｅ  ａｒｅａ  ｎｅｔｗｏｒｋ）５２を含むことができる。そのようなネットワーク環境は、事務所、企業規模のコンピュータネットワーク、イントラネット、およびインターネットにおいては一般的である。
【００１７】
ＬＡＮネットワーク環境において使用される時、コンピュータ２０は、ネットワークインターフェースまたはアダプタ５３を介してＬＡＮ５１に接続可能である。ＷＡＮネットワーク環境において使用される時、コンピュータ２０には、典型的にはモデム５４、またはインターネットなどのワイドエリアネットワーク５２を介して通信を確立するための他の手段を含むことができる。モデム５４は、内蔵または外付けであってよく、シリアルポートインターフェース４６を介してシステムバス２３に接続可能である。ネットワーク化された環境において、コンピュータ２０に関連して示されるプログラムモジュールまたはその一部を、リモートメモリ記憶装置内に記憶してよい。図示されるネットワーク接続は例であり、コンピュータ間の通信リンクを確立する他の手段を使用してよいことは理解されるであろう。さらに、本開示の多数の実施形態がコンピュータシステムに対して特に良好に適することが想定されているが、本文書では本開示がそのような実施形態に限定されることは意図しない。
【００１８】
ここで図２を参照すると、例示的なコンピュータシステム１００の別の実施形態が示されている。コンピュータシステム１００には、論理プロセッサ１０２、例えば実行コアを含むことができる。１つの論理プロセッサ１０２が例示されているが、他の実施形態において、コンピュータシステム１００は、例えば、１つのプロセッサ基板に複数の実行コア、および／または、それぞれ複数の実行コアを有することができる複数のプロセッサ基板など、複数の論理プロセッサを有することができる。図面に示されるように、種々のコンピュータ可読記憶媒体１１０を、種々のシステム構成要素を論理プロセッサ１０２に連結させる１つまたは複数のシステムバスにより相互接続することが可能である。システムバスは、メモリバスまたはメモリコントローラ、周辺機器用バス、および様々なバスアーキテクチャのいずれかを使用するローカルバスを含むいくつのタイプのバス構造いずれかであってよい。例示の実施形態において、コンピュータ可読記憶媒体１１０に含めることが可能なものには、例えば、ＲＡＭ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）１０４、例えば電気機械的ハードドライブ、ソリッドステートハードドライブなどといった記憶装置１０６、例えばフラッシュＲＡＭまたはＲＯＭといったファームウェア１０８、および、例えばＣＤ−ＲＯＭ、フロッピーディスク、ＤＶＤ、フラッシュドライブ、外部記憶装置などといった着脱可能記憶装置１１８がある。磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌイカートリッジなどの他のタイプのコンピュータ可読記憶媒体が使用可能であることは、当業者には理解されるべきである。
【００１９】
コンピュータ可読記憶媒体により、プロセッサ実行可能命令１２２、データ構造、プログラムモジュール、およびコンピュータ１００用の他のデータの不揮発性記憶装置を提供する。ＢＩＯＳ（ｂａｓｉｃ  ｉｎｐｕｔ／ｏｕｔｐｕｔ  ｓｙｓｔｅｍ）１２０は、起動時などにコンピュータ１００内の要素間で情報の転送を支援する基本ルーチンを含み、ファームウェア１０８内に記憶させることができる。多数のプログラムを、ファームウェア１０８、記憶装置１０６、ＲＡＭ１０４、および／または着脱可能記憶装置１１８上に記憶して、オペレーティングシステムおよび／またはアプリケーションプログラムを含む論理プロセッサ１０２により実行してよい。
【００２０】
コマンドおよび情報を、キーボードおよびポインティングデバイスを含むことができるがこれに限定されない入力装置１１６を介して、コンピュータ１００が受け取ってよい。他の入力装置には、マイクロフォン、ジョイスティック、ゲームパッド、スキャナなどを含めてよい。これらおよび他の入力装置は、システムバスに連結されるシリアルポートインターフェースを介して論理プロセッサ１０２に接続されることが多いが、パラレルポートゲームポートまたはＵＳＢ（ｕｎｉｖｅｒｓａｌ  ｓｅｒｉａｌ  ｂｕｓ）などの他のインターフェースによって接続してもよい。ディスプレイまたは他のタイプのディスプレイ装置を、グラフィックプロセッサ１１２の一部とすることまたはグラフィックプロセッサ１１２に接続されることが可能であるビデオアダプタなどのインターフェースを介して、システムバスに接続することも可能である。ディスプレイに加えて、コンピュータには、典型的にはスピーカおよびプリンタなどの他の周辺出力装置（図示せず）を含む。図１の例示のシステムはまた、ホストアダプタ、ＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）バス、およびＳＣＳＩバスに接続される外部記憶装置も含むことができる。 
【００２１】
コンピュータシステム１００は、ネットワーク化された環境においてリモートコンピュータなどの１つまたは複数のリモートコンピュータに対する論理接続を使用して動作することができる。リモートコンピュータは、別のコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピア装置または他の共通ネットワークノードとすることができ、また、典型的にはコンピュータシステム１００に関連して上述した要素の内の多くまたは全てを含むことができる。
【００２２】
ＬＡＮまたはＷＡＮのネットワーク環境において使用される時、コンピュータシステム１００を、ネットワークインターフェースカード１１４を介してＬＡＮまたはＷＡＮに接続することが可能である。ＮＩＣ１１４は、内蔵または外付けであってよく、システムバスに接続可能である。ネットワーク化された環境において、コンピュータシステム１００に関連して示されるプログラムモジュールまたはその一部を、リモートメモリ記憶装置内に記憶してよい。ここで記載したネットワーク接続は例であり、コンピュータ間の通信リンクを確立する他の手段を使用してよいことは理解されるであろう。さらに、本開示の多数の実施形態がコンピュータ化されたシステムに対して特に良好に適することが想定されているが、本文書では本開示がそのような実施形態に限定されることは意図しない。
【００２３】
リモートデスクトップシステムは、クライアントコンピュータシステムによりリモートで実行可能なアプリケーションを維持するコンピュータシステムである。入力はクライアントコンピュータシステムにおいて行われ、ネットワークを介して（例えば、ＲＤＰ（Ｒｅｍｏｔｅ  Ｄｅｓｋｔｏｐ  Ｐｒｏｔｏｃｏｌ）などのプロトコルであるＩＴＵ（Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｔｅｌｅｃｏｍｍｕｎｉｃａｔｉｏｎｓ  Ｕｎｉｏｎ）Ｔ．１２０系に基づくプロトコルを使用して）、ターミナルサーバ上のアプリケーションに転送される。アプリケーションは、入力がターミナルサーバで行われたかのように入力を処理する。アプリケーションは受け取った入力に応答して出力を生成し、出力がネットワークを介してクライアントコンピュータシステムに転送される。クライアントコンピュータシステムは、出力データを提示する。従って、クライアントコンピュータシステムで入力を受け取って、出力を提示する一方、処理は実際にはターミナルサーバで発生する。セッションには、シェル、および、例えばデスクトップ、デスクトップ内のマウスの動きを追跡するサブシステム、アイコン上のマウスクリックをプログラムのインスタンスを発行するコマンドに変換するサブシステムなどのユーザインターフェースを含むことができる。別の例示の実施形態において、セッションにはアプリケーションを含むことが可能である。この例では、アプリケーションが描画される間に、デスクトップ環境はそのまま生成されてユーザから隠されるようにしてよい。前述の検討は例であり、ここに開示する主題を種々のクライアント／サーバ環境において実装してよく、特定のターミナルサービス製品に限定されないことは理解されるべきである。
【００２４】
全てのリモートデスクトップ環境ではないにせよ、大抵の場合、入力データ（クライアントコンピュータシステムで入力される）は、典型的にはアプリケーションに対するコマンドを表すマウスやキーボードのデータを含み、出力データ（ターミナルサーバでアプリケーションにより生成される）は、典型的には映像出力装置上に表示される映像データを含む。多くのリモートデスクトップ環境が、他のタイプのデータを転送するべく拡張される機能性も含む。
【００２５】
通信チャネルを使用して、ＲＤＰ接続を介してプラグインにデータを転送させることによりＲＤＰプロトコルを拡張することができる。多くのそのような拡張が存在する。プリンタのリダイレクト、クリップボードのリダイレクト、ポートのリダイレクトなどの機能は、通信チャネル技術を使用する。従って、入出力データに加えて、データ転送のために必要な多くの通信チャネルがあってよい。それにより、出力データの転送という不定期な要求や、他のデータの転送という１つまたは複数のチャネル要求があり得、利用可能なネットワーク帯域幅を取り合う。
【００２６】
ここで図３および４を参照すると、仮想マシンを達成する（effectuate）べく構成されるコンピュータシステムの高レベルのブロック図が示されている。図示されるように、コンピュータシステム１００には、図１および２に記載した要素、および仮想マシンを達成するべく動作可能な構成要素を含むことができる。そのような一構成要素には、当技術分野においては仮想マシンモニタとも称されることがあるハイパーバイザ２０２がある。図示される実施形態におけるハイパーバイザ２０２を、コンピュータシステム１００のハードウェアへのアクセスを制御かつ裁定するべく構成することが可能である。概して説明すると、ハイパーバイザ２０２は、子パーティション１から子パーティションＮ（Ｎは１以上の整数）などのパーティションと呼ばれる実行環境を生成可能である。実施形態において、子パーティションは、ハイパーバイザ２０２によりサポートされる独立性（isolation）の基本単位であると考えることができ、すなわち、各子パーティションを、ハイパーバイザ２０２の制御下にあるハードウェアリソース、例えば、メモリ、装置、論理プロセッサのサイクルなどの組に対してマッピングすることが可能であり、かつ／または、親パーティションおよびハイパーバイザ２０２が、１つのパーティションを別のパーティションのリソースにアクセスすることから隔離することができる。実施形態において、ハイパーバイザ２０２は、スタンドアロンのソフトウェア製品、オペレーティングシステムの一部、マザーボードのファームウェア内に埋め込まれるもの、専用の集積回路、またはその組み合わせとすることができる。
【００２７】
上記の例では、コンピュータシステム１００には親パーティション２０４を含み、これはオープンソースコミュニティにおけるドメイン０と考えることもできる。親パーティション２０４を、オープンソースコミュニティにおいてバックエンドドライバとしても既知である仮想化サービスプロバイダ２２８（ＶＳＰ）を使用することにより、子パーティション１からＮにおいて実行されるゲストオペレーティングシステムにリソースを提供するべく構成することが可能である。本例のアーキテクチャにおいては、親パーティション２０４は、下層にあるハードウェアへのアクセスをゲート制御することができる。ＶＳＰ２２８を使用して、オープンソースコミュニティにおけるフロントエンドドライバとしても既知である仮想化サービスクライアント（ＶＳＣ）を利用して、インターフェースをハードウェアリソースに対して多重化することが可能である。各子パーティションには、仮想プロセッサ２３０から２３２などの１つまたは複数の仮想プロセッサを含むことができ、この仮想プロセッサはゲストオペレーティングシステム２２０から２２２により管理可能であり、かつゲストオペレーティングシステムはその上で実行されるスレッドをスケジューリング可能である。概して、仮想プロセッサ２３０から２３２は、物理的プロセッサの具象（representation）に特定のアーキテクチャを提供する実行可能命令および関連する状態情報である。例えば、ある仮想マシンがＩｎｔｅｌｘ８６プロセッサの特徴を有する仮想プロセッサを持ち、一方、別の仮想プロセッサがＰｏｗｅｒＰＣプロセッサの特徴を持つということでよい。本例の仮想プロセッサを、コンピュータシステムの論理プロセッサにマッピングして、仮想プロセッサを有効に命令が論理プロセッサによって支持されるようにすることが可能である。従って、これらの例示の実施形態において、複数の仮想プロセッサが、例えば、別の論理プロセッサがハイパーバイザ命令を実行中に、同時に実行していることが可能である。概して言えば、また、図面に例示するように、パーティションにおける仮想プロセッサ、種々のＶＳＣ、およびメモリの組み合わせを、仮想マシン２４０または２４２などの仮想マシンと考えることができる。
【００２８】
概して、ゲストオペレーティングシステム２２０から２２２には、例えば、Ｍｉｃｒｏｓｏｆｔ（登録商標）社、Ａｐｐｌｅ（登録商標）社、オープンソースコミュニティなどのオペレーティングシステムなどの任意のオペレーティングシステムを含むことができる。ゲストオペレーティングシステムには、ユーザ／カーネルモードの動作を含むことが可能であり、スケジューラ、メモリマネージャなどを含むことができるカーネルを有することが可能である。カーネルモードには、論理プロセッサにおいて少なくとも特権的プロセッサ命令へのアクセスを許可する実行モードを含むことができる。各ゲストオペレーティングシステム２２０から２２２は、ターミナルサーバ、電子商取引サーバ、電子メールサーバなど、またゲストオペレーティングシステム自体などのアプリケーションをその上に記憶させることが可能な関連ファイルシステムを有することができる。ゲストオペレーティングシステム２２０から２２２は、仮想プロセッサ２３０から２３２上で実行されるスレッドをスケジューリング可能であり、そのようなアプリケーションのインスタンスの達成が可能である。
【００２９】
ここで図４を参照すると、仮想マシンを実装するために使用可能な代替のアーキテクチャが例示されている。図４は、図３のものと同様の構成要素を示すが、本例示の実施形態においては、ハイパーバイザ２０２に仮想化サービスプロバイダ２２８およびデバイスドライバ２２４を含むことができ、親パーティション２０４に構成ユーティリティ２３６を含むことができる。本アーキテクチャでは、ハイパーバイザ２０２は図２のハイパーバイザ２０２と同一または同様の機能を実行可能である。図４のハイパーバイザ２０２は、スタンドアロンのソフトウェア製品、オペレーティングシステムの一部、マザーボードのファームウェア内に埋め込まれるものとすることができ、またはハイパーバイザ２０２の一部は専用の集積回路により実装可能である。本例において、親パーティション２０４は、ハイパーバイザ２０２を構成するべく使用可能な命令を有してよいが、ハードウェアアクセス要求は、親パーティション２０４に渡す代わりにハイパーバイザ２０２により扱ってもよい。
【００３０】
ここで図５を参照すると、コンピュータ１００には、リモートデスクトップサービスを接続クライアントに提供するべく構成される電気回路を含んでよい。一例の実施形態において、図示されるオペレーティングシステム４００を、ハードウェア上で直接実行させてもよく、または、ゲストオペレーティングシステム２２０または２２２をＶＭ２１６またはＶＭ２１８などの仮想マシンにより達成してもよい。下層にあるハードウェア２０８、２１０、２３４、２１２および２１４が、ハードウェアを仮想化可能であることを確認するために破線による例示形式で示される。
【００３１】
リモートサービスは、クライアント４０１などの少なくとも１つのクライアントに対して提供可能である（１つのクライアントが示されているが、リモートサービスはより多くのクライアントに対して提供可能である）。例示のクライアント４０１には、ユーザ入力をリモートサーバセッションに向けるべく、かつセッションにより生成されるユーザインターフェース情報を表示するべく構成されるハードウェアにより実装されるコンピュータ端末を含むことが可能である。別の実施形態において、クライアント４０１は、図１ｂのコンピュータ１００のものと同様の要素を含むコンピュータにより実現可能である。本実施形態において、クライアント４０１には、オペレーティングシステムを実装するべく構成された電気回路、および、端末の機能性、例えば１つまたは複数の論理プロセッサ１０２により実行可能なリモートデスクトップクライアントアプリケーションをエミュレートするべく構成される電気回路を含むことができる。オペレーティングシステムを達成するべく構成される電気回路が、端末をエミュレートするべく構成される電気回路を含むことも可能であることは、当業者には理解できるであろう。
【００３２】
各接続クライアントは、コンピュータ１００上に記憶されたデータおよびアプリケーションへのアクセスをクライアントに許可するセッション（セッション４０４など）を有することができる。概して、アプリケーションおよび特定のオペレーティングシステム構成要素を、セッションに割り当てられるメモリの領域にロードすることが可能である。従って、特定のインスタンスにおいて、いくつかのＯＳ構成要素をＮ回（Ｎは現行セッションの数を表す）生成することができる。これらの種々のＯＳ構成要素は、例えば、メモリを管理する、ディスクの読み／書きを円滑にする、論理プロセッサ１０２上で実行される各セッションからスレッドを構成することが可能であるオペレーティングシステムカーネル４１８に、サービスを要求することができる。セッションスペースにロード可能ないくつかの例示のサブシステムには、デスクトップ環境を生成するサブシステム、デスクトップ内のマウスの動きを追跡するサブシステム、アイコン上のマウスクリックをプログラムのインスタンスを発行するコマンドに変換するサブシステムなどを含むことができる。例えばマウスの動きの追跡といったこれらのサービスを実装するプロセスを、セッションに関連する識別子でタグ付けし、セッションに割り当てられるメモリの領域にロードする。
【００３３】
セッションは、セッションマネージャ４１６、例えばプロセスにより生成可能である。例えば、セッションマネージャ４１６は、セッションスペースに対してセッション識別子を生成すること、メモリをセッションスペースに割り当てること、および、サブシステムプロセスのシステム環境変数およびインスタンスをセッションスペースに割り当てたメモリにおいて生成することにより、各リモートセッションを初期化および管理することが可能である。セッションマネージャ４１６は、リモートデスクトップセッションを求める要求をオペレーティングシステム４００により受け取ると、起動可能である。
【００３４】
接続要求は、まず、トランスポートスタック４１０、例えば、ＲＤＰ（ｒｅｍｏｔｅ  ｄｅｓｋｔｏｐ  ｐｒｏｔｏｃｏｌ）スタックにより扱うことができる。トランスポートスタック４１０の命令は、特定のポート上で接続メッセージをリッスンし、それをセッションマネージャ４１６に転送するべく論理プロセッサ１０２を構成することができる。セッションが生成されると、トランスポートスタック４１０が各セッションのリモートデスクトッププロトコルスタックインスタンスを作成することができる。スタックインスタンス４１４は、セッション４０４に対して生成可能な一例のスタックインスタンスである。概して、各リモートデスクトッププロトコルスタックインスタンスを、適切なリモートセッションに対して、出力を関連するクライアントにルーティングし、クライアント入力を環境サブシステム４４４にルーティングするべく構成することが可能である。
【００３５】
図面により示されるように、一実施形態において、アプリケーション４４８を実行させ、かつビットのアレイの生成を行うことが可能である（１つのアプリケーションが示されているが、他のアプリケーションも実行可能である）。アレイはグラフィックインターフェース４４６により処理可能であり、グラフィックインターフェースは次にビットマップ、例えばピクセル値のアレイを描画することができ、ビットアレイはメモリに記憶可能である。図面により示されるように、描画の呼び出しをキャプチャし、ネットワークを介してその呼び出しをセッションのスタックインスタンス４１４を経由してクライアント４０１に送ることができるリモートディスプレイサブシステム４２０を、インスタンス化することが可能である。
【００３６】
グラフィックとオーディオのリモーティングに加えて、プリンタ、ｍｐ３プレイヤ、クライアントファイルシステム、ＣＤ−ＲＯＭドライブなどの多様な装置をリモーティングするために、プラグアンドプレイリダイレクタ４５８をインスタンス化することが可能である。プラグアンドプレイリダイレクタ４５８は、クライアント４０１に連結される周辺装置を識別する情報をクライアント側の構成要素から受け取ることができる。次に、プラグアンドプレイリダイレクタ４５８は、クライアント４０１の周辺機器のためのリダイレクトデバイスドライバをロードするべくオペレーティングシステム４００を構成することができる。リダイレクトデバイスドライバは、周辺機器にアクセスするというオペレーティングシステム４００からの呼び出しを受け取り、ネットワークを介してその呼び出しをクライアント４０１に送ることができる。
【００３７】
上記で検討したように、クライアントは、ＲＤＰ（Ｒｅｍｏｔｅ  Ｄｅｓｋｔｏｐ  Ｐｒｏｔｏｃｏｌ）などのリモートプレゼンテーションサービスを提供するためのプロトコルを使用して、ターミナルサービスを使用してリソースに接続することができる。リモートデスクトップクライアントがターミナルサーバゲートウェイを介してターミナルサーバに接続すると、ゲートウェイは、ターミナルサーバとのソケット接続を開いて、クライアントトラフィックをリモートプレゼンテーションポートまたはリモートアクセスサービス専用のポートにリダイレクトすることができる。ゲートウェイは、ＨＴＴＰＳを介して送信されるターミナルサーバゲートウェイプロトコルを使用して、特定のゲートウェイ特有の交換をクライアントとの間で実行してもよい。
【００３８】
図６を参照すると、リモートサービスを実装し、かつ本開示の態様を組み込むための電気回路を含むコンピュータシステム１００が示されている。図面により示されるように、一実施形態において、コンピュータシステム１００は、図２および図５に記載したものと同様の構成要素が含むことができ、リモートプレゼンテーションセッションを実装することができる。本開示の一実施形態において、リモートプレゼンテーションセッションは、例えばコンピュータシステムを使用してユーザに対して生成されるセッションといったコンソールセッションの態様、および、リモートセッションの態様を含むことができる。上記の記載と同様に、セッションマネージャ４１６は、リモートプレゼンテーションセッションを有効にするために構成要素を有効化／無効化することにより、リモートプレゼンテーションセッションを初期化および管理することが可能である。
【００３９】
リモートプレゼンテーションセッション内にロード可能な構成要素のうちの１組は、高忠実度のリモーティングを可能にするコンソール構成要素、すなわち、３Ｄハードウェアにより描画される３Ｄグラフィックおよび２Ｄグラフィックの利点を生かした構成要素である。
【００４０】
３Ｄハードウェアにより描画される３Ｄ／２Ｄグラフィックには、ユーザモードドライバ５２２、ＡＰＩ５２０、グラフィックカーネル５２４、およびカーネルモードドライバ５３０を含むドライバモデルを使用して、アクセスすることができる。アプリケーション４４８（または３Ｄグラフィックを生成するユーザインターフェースなどの任意の他のプロセス）は、ＡＰＩコンストラクトを生成すること、および、それらをＭｉｃｒｏｓｏｆｔ（登録商標）社のＤｉｒｅｃｔ３ＤなどのＡＰＩ（ａｐｐｌｉｃａｔｉｏｎ  ｐｒｏｇｒａｍｉｎｇ  ｉｎｔｅｒｆａｃｅ）５２０に送ることができる。ＡＰＩ５２０は次にユーザモードドライバ５２２と通信することができ、ユーザモードドライバはプリミティブを生成し、例えばメモリのページといったバッファ内に記憶することができる。プリミティブは、例えば、頂点および定数で表されるコンピュータグラフィックにおいて使用される基本の幾何学的図形であって、他の図形のビルディングブロックとして使用される。一実施形態において、アプリケーション４４８は、バッファをどのように使用する予定であるか、例えば、どの型のデータをバッファに記憶させる予定であるかを宣言することができる。ビデオゲームなどのアプリケーションでは、アバター用のプリミティブを記憶するために動的バッファを、建物または森を表すデータなどのそれほど頻繁には変更されないであろうデータを記憶するために静的バッファを使用してよい。 
【００４１】
ドライバモデルについての記載を続けると、アプリケーションは、バッファをプリミティブで満たし、実行コマンドを発行することができる。アプリケーションが実行コマンドを発行すると、カーネルモデルドライバ５３０により実行リストにバッファを付加すること、グラフィックカーネルスケジューラ５２８によりバッファをスケジューリングすることが可能である。各グラフィックソース、例えばアプリケーションまたはユーザインターフェースは、コンテキストおよびそれ自身の実行リストを有することができる。グラフィックカーネル５２４を、種々のコンテキストをスケジューリングしてグラフィック処理装置１１２上で実行させるべく構成することができる。ＧＰＵスケジューラ５２８は論理プロセッサ１０２により実行可能であり、スケジューラ５２８はコマンドをカーネルモデルドライバ５３０に対して発行してバッファのコンテンツをレンダリングさせることが可能である。スタックインスタンス４１４は、コマンドを受け取り、クライアントのＧＰＵによるバッファの処理が可能であるクライアント４０１にネットワークを介してバッファのコンテンツを送るべく構成可能である。
【００４２】
ここで、リモートプレゼンテーションサービスを呼び出すアプリケーションと合わせて使用される仮想化ＧＰＵの動作の一例を示す。図６を参照すると、一実施形態において、仮想マシンセッションはコンピュータ１００により生成可能である。例えば、セッションマネージャ４１６は論理プロセッサ１０２により実行可能であり、特定のリモート構成要素を含むリモートセッションを初期化することが可能である。本例において、生成されるセッションには、カーネル４１８、グラフィックカーネル５２４、ユーザモードディスプレイドライバ５２２、およびカーネルモデルディスプレイドライバ５３０を含むことができる。ユーザモードドライバ５２２は、メモリ内に記憶可能なグラフィックプリミティブを生成することができる。例えば、ＡＰＩ５２０には、オペレーティングシステム４００のユーザインターフェースまたはアプリケーション４４８などのプロセスに対してエクスポーズされ得るインターフェースを含むことが可能である。プロセスは、ポイントリスト、ラインリスト、ラインストリップ、トライアングルリスト、トライアングルストリップ、またはトライアングルファンなどの高レベルのＡＰＩコマンドをＡＰＩ４２０に送ることが可能である。ＡＰＩ５２０は、これらのコマンドを受け取り、ユーザモードドライバ５２２に対するコマンドに変換することが可能であり、ユーザモードドライバは次に、頂点を生成し１つまたは複数のバッファ内に記憶することができる。ＧＰＵスケジューラ５２８を実行させ、バッファ内のコンテンツをレンダリングすることを判定することができる。本例において、サーバのグラフィック処理装置１１２へのコマンドのキャプチャが可能であり、ネットワークインターフェースカード１１４を介してバッファのコンテンツ（プリミティブ）をクライアント４０１へ送ることが可能である。一実施形態において、ＡＰＩは、仮想ＧＰＵが利用可能であるかどうかを判定するために構成要素が相互作用するセッションマネージャ４１６によりエクスポーズされ得る。
【００４３】
一実施形態において、図３または４の仮想マシン２４０などの仮想マシンをインスタンス化することが可能であり、仮想マシンはオペレーティングシステム４００の実行のためのプラットフォームとして働くことが可能である。ゲストオペレーティングシステム２２０は、本例においてはオペレーティングシステム４００を具現化することができる。ネットワークを介して接続要求を受け取ると、仮想マシンをインスタンス化してよい。例えば、親パーティション２０４は、トランスポートスタック４１０のインスタンスを含んでよく、また、親パーティション２０４を、接続要求を受け取るべく構成してよい。親パーティション２０４は、リモートセッションを有効にする能力を含むゲストオペレーティングシステムと共に接続要求に応答して、仮想マシンを初期化してよい。接続要求を次にゲストオペレーティングシステム２２０のトランスポートスタック４１０に渡すことが可能である。本例において、各リモートセッションを、自身の仮想マシンにより実行されるオペレーティングシステム上でインスタンス化してよい。
【００４４】
一実施形態において、仮想マシンのインスタンス化が可能であり、オペレーティングシステム４００を具現化するゲストオペレーティングシステム２２０の実行が可能である。上記の記載と同様に、ネットワークを介して接続要求を受け取ると、仮想マシンをインスタンス化してよい。リモートセッションをオペレーティングシステムにより生成してよい。セッションマネージャ４１６を、要求が３Ｄグラフィック描画をサポートするセッションを求めるものであると判定するべく構成することが可能であり、セッションマネージャ４１６はコンソールセッションをロードすることが可能である。コンソールセッションのロードに加えて、セッションマネージャ４１６は、ユーザモードディスプレイドライバ５２２により生成されるプリミティブをキャプチャするためにセッション用のスタックインスタンス４１４’および構成システムをロードすることができる。
【００４５】
ユーザモードドライバ５２２は、キャプチャされてトランスポートスタック４１０がアクセス可能なバッファ内に記憶されることが可能なグラフィックプリミティブを生成してよい。カーネルモデルドライバ５３０は、バッファをアプリケーションの実行リストに付加することができ、ＧＰＵスケジューラ５２８を実行させ、バッファ用の描画コマンドをいつ発行するかを判定することが可能である。スケジューラ５２８が描画コマンドを発行すると、コマンドを、例えば、カーネルモデルドライバ５３０によりキャプチャし、スタックインスタンス４１４を介してクライアント４０１に送ることが可能である。
【００４６】
ＧＰＵスケジューラ５２８を実行させ、バッファのコンテンツを描画する命令を発行することを判定して良い。本例において、描画の命令に関連するグラフィックプリミティブは、ネットワークインターフェースカード１１４を介してクライアント４０１に送ることが可能である。
【００４７】
一実施形態において、少なくとも１つのカーネルモードのプロセスが、少なくとも１つの論理プロセッサ１１２により実行可能であり、少なくとも１つの論理プロセッサ１１２は、異なるバッファ内に記憶された頂点の描画を同期させることが可能である。例えば、グラフィック処理スケジューラ５２８は、オペレーティングシステムスケジューラと同様に動作可能であるもので、ＧＰＵの動作をスケジューリングすることができる。ＧＰＵスケジューラ５２８は、頂点の別々のバッファを正しい実行順序に統合（merge）して、クライアント４０１のグラフィック処理装置が、頂点を正しく描画させる順番でコマンドを実行するようにすることができる。
【００４８】
ビデオゲームなどのプロセスの１つまたは複数のスレッドは、複数のバッファをマッピングしてよく、各スレッドはドローコマンドを発行してよい。頂点の識別情報、例えば、バッファごと、頂点ごと、またはバッファ内の頂点のバッチごとに生成された情報を、ＧＰＵスケジューラ５２８に送信することが可能である。情報を、同一または他のプロセスからの頂点に関連する識別情報と共にテーブルに記憶して、種々のバッファの描画を同期させるために使用してよい。
【００４９】
ワードプロセシングプログラムなどのアプリケーションは、例えば、２つのバッファを実行かつ宣言することができる。２つのバッファの１つは３Ｄメニューを生成するための頂点を記憶するもの、他方はメニューに入れる文字を生成するためのコマンドを記憶するものとすることができる。アプリケーションは、バッファをマッピングし、ドローコマンドを発行してよい。ＧＰＵスケジューラ５２８は、２つのバッファを実行するための順番を判定して、メニューが文字と共に見映えがよくなるように描画されるようにすることができる。例えば、他のプロセスがドローコマンドを同時またはほぼ同様の時に発行してよく、また、頂点が同期されない場合は、異なるプロセスの異なるスレッドからの頂点がクライアント４０１上で非同期的に描画され、これにより、表示される最終的な画像を混沌または混乱したものに見せる可能性がある。
【００５０】
バルク圧縮器４５０を使用して、クライアント４０１にデータのストリームを送る前にグラフィックプリミティブを圧縮することができる。一実施形態において、バルク圧縮器４５０を、スタックインスタンス４１４のユーザモード（図示せず）またはカーネルモードの構成要素とすることができ、クライアント４０１に送ろうとしているデータのストリーム内の類似するパターンを探すべく構成することが可能である。本実施形態において、バルク圧縮器４５０が複数のアプリケーションから、複数のＡＰＩコンストラクトを受け取る代わりに、頂点のストリームを受け取るので、バルク圧縮器４５０は頂点のより大きなデータセットを持つことになり、圧縮の機会を見つけるためにこれを検査する。すなわち、多様なＡＰＩを呼び出す代わりに、複数のプロセスのための頂点がリモーティングされているため、バルク圧縮器４５０が所与のストリーム内に類似するパターンを発見するチャンスが大きい。
【００５１】
一実施形態において、グラフィック処理装置１１２を、メモリの物理アドレスの代わりに仮想アドレス指定を使用するべく構成してよい。従って、バッファとして使用されるメモリのページを、システムＲＡＭに、またはビデオメモリからディスクに、ページングすることが可能である。グラフィックカーネル５２８からの描画コマンドをキャプチャするとバッファの仮想アドレスを取得するべく、かつ仮想アドレスからコンテンツを送るべく、スタックインスタンス４１４’を構成することができる。
【００５２】
オペレーティングシステム４００を、例えば、種々のサブシステムおよびドライバをロードして、プリミティブをキャプチャしクライアント４０１などのリモートコンピュータに送ることができるように構成してもよい。上記の記載と同様に、セッションマネージャ４１６は論理プロセッサ１０２により実行可能であり、特定のリモート構成要素を含むセッションを初期化することが可能である。本例において、生成されるセッションには、カーネル４１８、グラフィックカーネル５２４、ユーザモードディスプレイドライバ５２２、およびカーネルモードディスプレイドライバ５３０を含むことができる。
【００５３】
グラフィックカーネルは、ＧＰＵの動作をスケジューリングすることができる。ＧＰＵスケジューラ５２８は、頂点の別々のバッファを正しい実行順序に統合して、クライアント４０１のグラフィック処理装置が、頂点が正しくレンダリングされる順番でコマンドを実行するようにすることができる。
【００５４】
図７を参照すると、本開示の一実施形態に従う、復号化プロセスを例示するブロック図が示されている。符号化プロセスが図８に示されている。符号化されるタイルを、ＲＬＧＲ復号器９００を介して最初に実行して、量子化タイル係数を生成してよい。これをＣＰＵ上で実行してよい。
【００５５】
逆量子化７０５を、ＳＳＥ２命令を使用してＣＰＵ上に実装してよい。逆量子化の後、タイルのうちの３個の構成要素の１０個のサブバンドを、フォーマットＬ１６の３個のＤｉｒｅｃｔ３Ｄテクスチャバッファにコピーしてよく、Ｙ、Ｕ、およびＶのそれぞれに１つである。これら３個のテクスチャをＧＰＵに対してアップロードしてよく、逆ＤＷＴのステージ７１０により入力として使用することが可能である。
【００５６】
上述のパーティションを実装するためのこれらのバリエーションは全て、単なる例示の実装であり、本明細書の記載は本開示を任意の特定の仮想化の態様に限定するものと解釈されるべきではない。
【００５７】
エントロピー符号器  
仮想デスクトップまたはリモートプレゼンテーションセッションにおいて、ユーザのグラフィックおよびビデオを各ユーザのサーバにおいて描画してよい。結果として得られるビットマップを、表示および対話用にクライアントに送ってよい。ネットワークに対する帯域幅の要件を減らすために、ビットマップをクライアントに送る前に圧縮してよい。圧縮技術はレイテンシが低く効率がよいことが望ましい。
【００５８】
ビットマップおよび他のグラフィックデータを符号化および復号化するためのシステムおよび方法を、本明細書において記載する。符号化システムには、最初にソース画像データをデータタイルに分割するタイリングモジュールを有するタイリングシステムを含んでよい。フレーム間差分モジュールは次に変更されたデータタイルだけを種々の処理モジュールに出力してよく、該モジュールでは変更されたデータタイルを対応するタイル構成要素に変換する。一実施形態において、量子化器がタイル構成要素に対して圧縮プロシージャを実行して、調整可能量子化パラメータに従って圧縮されたデータを生成してよい。適応エントロピー符号器セレクタが次に、複数のエントロピー符号器のうちの１つを選択してエントロピー符号化プロシージャ実行し、それにより、符号化されたデータを作成することができる。エントロピー符号器は、フィードバックループを利用して、現在の送信帯域幅の特徴を考慮して量子化パラメータを調整することもできる。本明細書において参照する、グラフィックデータを圧縮、符号化、および復号化するプロセスは、同一出願による「電子情報の効率的符号化及び復号化システム及びその方法（Ｓｙｓｔｅｍ  Ａｎｄ  Ｍｅｔｈｏｄ  Ｆｏｒ  Ｅｆｆｅｃｔｉｖｅｌｙ  Ｅｎｃｏｄｉｎｇ  Ａｎｄ  Ｄｅｃｏｄｉｎｇ  Ｅｌｅｃｔｒｏｎｉｃ  Ｉｎｆｏｒｍａｔｉｏｎ）」と題する特許文献１、および、２００９年３月６日出願の「フレームキャプチャ、符号化および送信管理（ＦｒａｍｅＣａｐｔｕｒｅ，Ｅｎｃｏｄｉｎｇ，Ａｎｄ  Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｍａｎａｇｅｍｅｎｔ」と題する特許文献２において記載され、その全体が参照により本明細書に組み込まれる、１つまたは複数の方法およびシステムを概して使用することができる。
【００５９】
本明細書に開示する種々の方法およびシステムにおいて、上述の種々のプロセスの処理および扱いに対する改良を使用して、より効率的な処理、従って、よりタイムリーかつリッチなユーザ経験を提供し得る。本方法およびシステムは、ネットワークおよび／またはシステムのリソースが適切な帯域幅を提供している時、ならびに／または、クライアント装置がより低速の処理速度またはリソースを有する時、そのようなグラフィックのサポートの提供における改良をも提供する。グラフィックデータを描画、符号化、および送信するための本明細書に開示する実施形態を、ハードウェアおよびソフトウェアのプロセスの種々の組み合わせを使用して実装してよい。いくつかの実施形態において、機能を完全にハードウェアで実行してもよい。他の実施形態において、機能を完全にソフトウェアで実行してもよい。さらなる実施形態において、機能をハードウェアおよびソフトウェアのプロセスの組み合わせを使用して実装してもよい。そのようなプロセスを、１つまたは複数のＣＰＵ、および／または、ＧＰＵ（ｇｒａｐｈｉｃｓ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）もしくは他の専用のグラフィック描画装置などの１つまたは複数の特殊なプロセッサを使用してさらに実装してもよい。
【００６０】
さらに、以下の記載をリモートプレゼンテーションシステムの文脈で提供するが、開示する実施形態を、グラフィックデータがネットワークを介した配信のために符号化および圧縮される任意のタイプのシステムにおいて実装してよいことは理解されるべきである。
【００６１】
種々の実施形態が、タイルの個々のＹＵＶコンポーネントを対応するＹＵＶタイルのサブバンドに変換するためのＤＷＴ（ｄｉｓｃｒｅｔｅ  ｗａｖｅｌｅｔ  ｔｒａｎｓｆｏｒｍ）機能の使用を組み込んでよい。量子化機能は、タイルのサブバンドを圧縮するための適切な量子化技術を利用することにより、量子化プロシージャを実行することができる。量子化機能では、エントロピー符号器からのフィードバックループを介して受け取る適応量子化パラメータにより指定されてよい特定の圧縮率に従って、タイルのビットレートを減少させることにより、圧縮された画像データを作成することができる。
【００６２】
一実施形態において、ＧＰＵには、圧縮される必要がある変更された矩形を有するビットマップを与えてよい。ビットマップを論理タイルにさらに分割してよく、変更された矩形内で変更するタイルのみを符号化し圧縮する。このように、プロセスはクライアントと協調してキャッシングスキームを効果的に実装し、クライアントでは結果として得られる復号化された画像が維持され表示される。
【００６３】
リモートプレゼンテーション圧縮アルゴリズムを採用して、ディスプレイストリームの帯域幅をローカルエリアネットワーク、ワイドエリアネットワーク、および低帯域幅ネットワークを介する送信で許容できるレベルに減少させる。そのようなアルゴリズムは、典型的にはより低い望ましい帯域幅に対してサーバ側のＣＰＵ時間をトレードオフする。
【００６４】
エントロピー符号器と呼ばれるフェーズを採用することができる画像圧縮器を使用してよい。エントロピー符号器の機能では、エントロピー符号化プロシージャを実行して符号化データを生成することができる。特定の実施形態において、エントロピー符号化プロシージャでは、適切なコードを量子化器から受け取った圧縮された画像データ内の対応するビットパターンと置き換えることにより、圧縮された画像のビットレートをさらに減少させる。
【００６５】
リモートプレゼンテーションシステムにおいて採用されるエントロピー符号化では、概して、ＣＰＵパフォーマンス（すなわち、速度）と圧縮率とのバランスをとる。エントロピー符号器を、合理的なＣＰＵ速度での良好な圧縮のために調整してよい。典型的なエントロピー符号器には、ランレングス符号器、ハフマン符号器、算術符号器、ゴロム・ライス符号器の変形が含まれる。リモートプレゼンテーションアプリケーションのための効率的なエントロピー符号器を設計する上で主要な問題の一つは、典型的には符号化すべき整数のブロックの統計値に大きな変動があるということである。研究により、ほとんどの場合、量子化前のデータがガウス分布よりも著しくゼロ近辺に集中する確率分布を持つことが示されている。
【００６６】
本開示は、圧縮性を失う可能性を有しながらも符号化および復号化の速度を改善するべく構成される簡素なエントロピー符号器を実装することに関する。しかし、多くの状況において、このトレードオフは許容可能であり、帯域幅ではなく低速なＣＰＵによって制限されるようなシナリオにおいて実際に、より望ましい。最終結果として、現在の符号器／復号器よりも約１０％から２０％の圧縮性の損失で２倍または３倍速い符号器／復号器を提供することができる。
【００６７】
そのような符号器／復号器は、プロセッサ速度についての最適化が全ての帯域幅を確保することより優先されるようなシナリオを可能にするため、有用であり得る。例えば、よりローエンドのクライアント装置が、より良好なパフォーマンスをより簡素な圧縮器で達成して、より速い処理を可能にすることができる。リモートプレゼンテーションシステムを、典型的にはＣＰＵのコストおよび能力に関わらず帯域幅を減少させるべく最適化する。今日多くのシステムにおいて、帯域幅が十分である一方、クライアント装置はセットトップボックスまたはシンクライアントなどのより簡素な装置であってよい。
【００６８】
一実施形態において、エントロピー符号器を、可変ビットストリームフォーマットの使用を回避するべく構成してよい。可変ビットストリームを採用することは、効率的な符号化および復号化が常に遅くなるということである。一実施形態において、符号器を、ニブルのサイズ（４ビットとしても知られる）のコードを使用して、通常サイズの固定サイズ符号化ストリームを達成するよう構成してもよい。そのようなストリームを使用することにより、ストリームは、ＣＰＵのコストをそれほどかけずに、復号化がより速くなり、安全に復号化できる（フルオーバーフローチェックを用いて）。
【００６９】
一例のスキームでは、符号器は以下のタイプの演算を符号化する。
１）連続するゼロ（エントロピー符号器への通常の入力）―連続するゼロは、連続の大多数が非常に短いという統計的観測に合致する可変個のクワッドに符号化される。
２）リテラル値−リテラル値は、最も直近のリテラル値のテーブル（キャッシュ）内に見られるＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ（最近最も使用されない））ヒットとして符号化されるか、または、小さい値ほど発生しやすいという統計的特性からの恩恵を受けて再度可変個のクワッドとして符号化される。
【００７０】
両方の場合において、効果的に２つのストリームが存在する。（ａ）演算コード（op-code）のクワッドストリーム、および（ｂ）大きな値のストリームである。ランレングスまたはリテラルレングスのいずれかの特定の演算コードが単に「大きな値のストリーム内の次の値を取得せよ」ということを示す。
【００７１】
大きな値より小さな値に対して少ないバイトを使用するが、同時に固定バイト境界上でのみ動作することが保証されるという基本のマルチバイト符号化スキームを用いて大きな値のストリームを符号化してよい。そのような符号化スキームを使用することにより、複雑なビットシフトまたは可変ビット復号化スキームを必要とすることなくクワッドストリームおよび値ストリームの両方の復号化が可能であり、従って、もっと一般的／複雑なエントロピー符号器（例えば、ＲＬＧＲまたは種々のハフマン系のスキーム）よりも速いパフォーマンスが可能となる。そのような簡素化された符号器を、任意の数のビット、例えば１から３２ビットの符号化が可能であるように構成することができる。より複雑な符号化においては、可変ビットのため、および、典型的には、処理中に多くのコーディング分岐および大量のブックキーピングを要求する必要な処理のために、復号化はコンピュータ的には困難なものとなる。この簡素なスキームを使用することで、通常サイズの構造（例えば、クワッド）を使用することによりそのような複雑さを最小限にすることができる。そのようなスキームにおいて、４ビットより大きな出力シンボルはなく、データは、シフトもロールもないバイトの倍数単位である。１つのバイトには、必要であれば並行して処理可能な２つのコードを含んでよい。さらに、クワッドの数が既知である場合、バッファのオーバーランは回避可能である。典型的なリモートプレゼンテーションのシナリオを使用する検査では、現在利用可能なＣＰＵを使用して２から３倍のパフォーマンスの増加で、１０から２０％だけ圧縮性の損失が測定された。
【００７２】
いくつかの実施形態において、より複雑／低速のエントロピー符号器と本明細書に記載するようなより簡素な符号器との間の切替えのために論理を提供してもよい。例えば、図９を参照すると、リモートプレゼンテーションシステムでは、少なくとも２つの符号器９１０および９２０を提供してよい。符号器９１０は、ＲＬＧＲを実装するものなど複雑なエントロピー符号器であってよい。符号器９２０は、本開示に従う簡素化された符号器であってよい。ネットワーク９３０の条件により、システムは符号器９１０または９２０のうちの１つを選択してデータ９００を符号化してよい。例えば、ネットワーク条件が、ネットワークが過密状態であること、および、利用可能な帯域幅が制限されていることを示す場合、ネットワーク９３０を介して送信されるデータ量を最小限にする目的で、複雑な符号器９１０をデータ９００の符号化のために選択してよい。同様に、ネットワーク条件が、ネットワークが過密状態ではないことを示す場合、クライアントにおいてより高速なプロセッサパフォーマンスを提供する目的で、簡素化された符号器９１０をデータ９００の符号化のために選択してよい。
【００７３】
付録Ａでは、本開示に従う、簡素化された符号器の例示の実装を提供する。
【００７４】
図１０は、動作１０００、１００２、１００４および１００６を含む、クライアントコンピュータへの送信のためにグラフィックデータを処理する例示の動作手順を示す。図１０を参照すると、動作１０００で動作手順を開始し、動作１００２では、仮想マシンセッションに関連するクライアント画面を表現するグラフィックデータを受けるステップを例示する。動作１００４では、前記送信に利用可能な帯域幅を示す情報を受け取り、この情報に基づき、利用可能な帯域幅が所定の閾値を満たすことを判定するステップを例示する。動作１００６では、バイト境界に整列したビットトークンのコンパクトなストリームを使用して、変換されたグラフィックデータの係数をエントロピー符号化するステップを例示する。一実施形態において、連続するゼロが量子サイズの可変個の倍数に符号化され、リテラル値が、直近に使用されたリテラル値のキャッシュ内のエントリを使用して符号化され、他の値は量子サイズの最少個の倍数を使用して符号化される。ビットトークンは、データのユニットを定義するビット列であってよい。例えば、ニブルベースのシステムでは４ビットトークンが使用される。
【００７５】
種々の実施形態において、量子サイズをニブルとしてもよい。いくつかの実施形態において、動作手順には、エントロピー符号化演算コードのストリームおよび大きな値のストリームを生成するステップを含んでよい。手順には、大きな値より小さな値に対して少ないバイトを使用するというマルチバイト符号化スキームを用いて、大きな値のストリームをエントロピー符号化するステップ、前記グラフィックデータをデータタイルに分割するステップ、前記データタイルをタイル構成要素に処理するステップ、および前記エントロピー符号化を前記タイル構成要素に対して実行するステップを含んでよい。符号化スキームを、固定バイト境界上でのみ動作するべく構成してよい。
【００７６】
図１１は、上述のようなクライアントコンピュータへの送信のためにグラフィックデータを処理する例示のシステムを示す。図１１を参照すると、システム１１００は、プロセッサ１１１０およびメモリ１１２０を備える。メモリ１１２０は、リモートコンピュータ装置への送信のためにグラフィックデータを処理するべく構成されるコンピュータ命令をさらに備える。ブロック１１２２は、仮想マシンセッションに関連するクライアント画面を表すグラフィックデータを受け取るステップを例示する。ブロック１１２４は、前記グラフィックデータをデータタイルに分割するステップを例示する。ブロック１１２６は、バイト境界に整列されたビットトークンのストリームを使用して、変換されたデータタイルの係数をエントロピー符号化するステップを例示する。
【００７７】
上述の態様のいずれも、方法、システム、コンピュータ可読媒体、または任意のタイプの製品において実装可能である。例えば、コンピュータ可読媒体には、クライアントコンピュータへの送信のためにグラフィックデータを処理するコンピュータ実行可能命令を記憶させることができる。そのような媒体は、仮想マシンセッションに関連するクライアント画面を表現するグラフィックデータを受け取るための命令の第１のサブセット、および符号化されたデータをバイトベースの復号化プロセスを使用して復号化できるようにするために、バイト境界に整列したビットトークンのコンパクトなストリームを使用して、変換されたグラフィックデータの係数をエントロピー符号化するための命令の第２のサブセットを備えることができる。当業者は理解するであろうが、追加の命令セットを使用して本明細書に記載した種々の他の態様を獲得することが可能であり、また、目下開示している２つ命令サブセットは本開示を通じて詳細を変更可能である。
【００７８】
上述の詳細な記載では、例および／または動作図を通じてシステムおよび／またはプロセスの種々の実施形態を記述した。そのようなブロック図および／または例が、１つまたは複数の機能および／または動作を含有する限りにおいて、そのようなブロック図もしくは例の内の各機能および／または動作が、個々におよび／または集合的に、広範囲にハードウェア、ソフトウェア、ファームウェア、または仮想的にその任意の組み合わせにより実行可能であることは、当業者により理解されるであろう。
【００７９】
本明細書に記載した種々の技術を、ハードウェアもしくはソフトウェアに関連して、または適切な場合にはその両方の組み合わせに関連して実装して良いことは、理解されるべきである。従って、本開示の方法および装置、または特定の態様もしくはその一部は、フロッピーディスク、ＣＤ−ＲＯＭ、ハードドライブ、または任意の他のマシン可読記憶媒体などの有形の媒体において具現化されるプログラムコード（すなわち命令）の形式をとってよく、プログラムコードがコンピュータなどのマシンにロードされてマシンにより実行されると、マシンが本開示を実践するための装置となる。プログラム可能なコンピュータ上でプログラムコードが実行される場合、コンピュータ装置には、一般的にプロセッサ、プロセッサが可読の記憶媒体（揮発性および不揮発性のメモリおよび／または記憶素子を含む）、少なくとも１つの入力装置、および少なくとも１つの出力装置を含む。１つまたは複数のプログラムが、例えば、ＡＰＩ（ａｐｐｌｉｃａｔｉｏｎ  ｐｒｏｇｒａｍｍｉｎｇ  ｉｎｔｅｒｆａｃｅ）、再利用可能制御などの使用を介して、本開示に関連して記載したプロセスを実装または利用してよい。そのようなプログラムは、好ましくは高レベルの手続き型またはオブジェクト指向のプログラミング言語で実装されて、コンピュータシステムと通信を行う。しかし、プログラム（複数可）は必要に応じてアセンブリ言語または機械語で実装することが可能である。いずれの場合も、言語はコンパイラ型言語またはインタープリタ型言語であってよく、ハードウェア実装と組み合わせてもよい。
【００８０】
本発明をその好適な実施形態を参照して具体的に示し記載したが、以下の請求の範囲において記載する本発明の範囲から逸脱することなく、形式および詳細における種々の変更がなされてよいことは当業者により理解されるであろう。さらに、本発明の要素を単数形で記載および特許請求していても、単数形に制限することが明示的に記載されない限り、複数であることを考慮している。
【図１】
2013541295.tif 000003
【図２】
2013541295.tif 000004
【図３】
2013541295.tif 000005
【図４】
2013541295.tif 000006
【図５】
2013541295.tif 000007
【図６】
2013541295.tif 000008
【図７】
2013541295.tif 000009
【図８】
2013541295.tif 000010
【図９】
2013541295.tif 000011
【図１０】
2013541295.tif 000012
【図１１】
2013541295.tif 000013
【国際調査報告】
2013541295.tif 000014
2013541295.tif 000015