[0018]修正されたメモリー圧縮が本明細書で述べられる。システムにおけるメモリーは、メモリーページ(または単純にページ)と称される複数のブロックまたは部分から構成される。修正されたワーキングセットにおけるメモリーページの少なくとも一部など、プログラムのワーキングセットからのメモリーページの組は、ページファイルに書き込まれる前に圧縮記憶に圧縮される。メモリーページは、圧縮記憶がページファイルに書き込まれていたかに関わらず、圧縮記憶に圧縮された後にメモリーマネージャーによって再利用されてもよい。圧縮記憶はそれ自体、複数のメモリーページから構成され、圧縮記憶メモリーページは、ページファイルに書き込まれた後にメモリーマネージャーによって再利用することができる。圧縮記憶に圧縮されたメモリーページに対するメモリーマネージャーからの後続の要求は、圧縮記憶メモリーページにアクセスし(ページファイルに書き込まれる場合、ページファイルから圧縮記憶メモリーページを読み出すことを含む)、要求されたメモリーページを展開し、要求されたメモリーページをメモリーマネージャーに返すことによって満たされる。
[0019]加えて、プログラムが一時停止するときなどのある状況では、メモリーページのワーキングセットがスワップアウトされる。メモリーページのワーキングセットをスワップアウトすることは、プログラムのプロセスのワーキングセットにおいてメモリーページのリストを識別すること、識別されたメモリーページを圧縮すること、および圧縮された識別されたメモリーページを圧縮記憶に、識別されたメモリーページの仮想メモリーアドレスによる連続した順序で書き込むことを含む。圧縮記憶のためにページファイルにおいて空間が予約され、ページファイルにおいて予約された空間に圧縮記憶が書き出される。
[0020]プログラムが再開されることになる後続の判定に応答して、プログラムに対するメモリーページのワーキングセットがスワップインされる。メモリーページのワーキングセットをスワップインすることは、ページファイルから圧縮記憶を読み出すこと、および圧縮記憶を圧縮記憶メモリーページの組に記憶することを含む。圧縮記憶メモリーページが展開され、プログラムのワーキングセットに含めるためにメモリーマネージャーに返される。
[0021]図1は、1つまたは複数の実施形態に従った、修正されたメモリー圧縮を採用する例示的なシステム100を示す。システム100は、メモリーマネージャー102、圧縮記憶マネージャー104、およびページングされたメモリー106を含む。概して、メモリーマネージャー102は、ページングされたメモリー106におけるデータの記憶を管理する。メモリーマネージャー102は、ページングされたメモリー106の部分をシステム100における様々なプログラム108に割り当てる。プログラム108は、実行しているとき、本明細書ではプロセス(実行プログラム108のインスタンスである)とも称され、よって、プログラム108に割り当てられたページングされたメモリー106の部分は、プログラム108のプロセスに割り当てられたものとしても参照される。プロセスに割り当てられたページは、そのプロセスによって所有または占有され、そのプロセスによって使用され、他のプロセスによっては使用されない(よって、プライベートページとも称される)。プログラム108は、アプリケーション、オペレーティングシステムプログラム、または他のコンポーネントもしくはモジュールとすることができる。メモリーマネージャー102は、ページングされたメモリー106からデータを読み出し、ページングされたメモリー106にデータを書き込む要求を、それらのプログラム108から受信する。ページングされたメモリー106は、例えば、揮発性メモリー(例えば、RAM)または不揮発性メモリー(例えば、フラッシュメモリー)など、任意のタイプのCPU(中央処理装置)アドレス指定可能メモリーとすることができる。
[0022]メモリーマネージャー102はまた、ページングされたメモリー106の1つまたは複数の部分を圧縮記憶マネージャー104に割り当てる。別個に示されているが、圧縮記憶マネージャー104は、メモリーページを割り当てることを目的に、プログラム108として扱われる。圧縮記憶マネージャー104は、圧縮された形式でのデータの記憶のために1つまたは複数の圧縮記憶110、例えば、プログラム108ごとに1つの圧縮記憶110を生成する。システム100はまた、メモリーページを記憶することができる記憶装置上のファイルである、ページファイル112を含む。ページファイル112が記憶される記憶装置は、システム100における2次的記憶装置であり、1つまたは複数の実施形態では、ページングされたメモリー106よりも読み込み/書き込み時間が遅いが、より大きな記憶容量を有する。ページファイル112が記憶される記憶装置は、例えば、フラッシュメモリー(例えば、ソリッドステートディスク(SSD))または磁気ディスクとすることができる。図1では単一のページファイル112が示されるが、複数のページファイルがシステム100に含まれてもよいことに留意されるべきである。
[0023]メモリーマネージャー102は、ページングを使用してページングされたメモリー106を管理する。メモリーマネージャー102は、メモリー106(例えば、RAM)を、特定の(例えば、固定された)サイズの単位のデータであるページに編成する。ページングの行為は、データがメモリー106にないとき、システム100におけるページファイル112であるバッキングファイルから、ページの単位でデータを読み込むことを指す。ページングの行為はまた、ダーティー(修正された)データをページファイル112にページの単位で書き戻すことを指す。よって、メモリーページは、メモリーページに戻されたページファイルとも称される。そのようなページング技術は、当業者にとって公知である。
[0024]メモリーマネージャー102は、メモリーマネージャー102の機能を実行するように動作するメモリーコントローラー114、およびページングされたメモリー106のメモリーページに関する様々な情報のレコードであるページテーブル116を含む。ページテーブル116は、メモリーページがいかなるときにもどこに記憶されているかを示す情報を含む。以下でより詳細に述べられるように、メモリーページは主として、物理メモリー(ページングされたメモリー106)または圧縮記憶110(それ自体が物理メモリーもしくはページファイル112に記憶されてもよい)に記憶されるが、一部の状況では、圧縮されていないメモリーページがページファイル112に記憶されてもよい。物理メモリーに記憶されたメモリーページに対し、メモリーマネージャー102はメモリーページに直接アクセスする。圧縮記憶110に記憶されたメモリーページに対し、メモリーマネージャー102は、必要に応じてメモリーページを読み出し、展開し、また展開されたメモリーページをメモリーマネージャー102に返す圧縮記憶マネージャー104からのメモリーページを要求する。圧縮されていないメモリーページがページファイル112に記憶される場合は、メモリーマネージャーは、メモリーページをページファイル112から読み出す。
[0025]ページングされたメモリー106は、いかなるときにも複数の異なるタイプのページのうちの1つとして各々が分類されてもよい複数のページを含み、この分類は、時間とともに変化することができる。1つのタイプのメモリーページは、プログラム108に割り当てられ、現在プログラム108によって使用されているメモリーページであり、このタイプのメモリーページは、プログラム108のプロセスのワーキングセット(プログラム108のワーキングセットとも称される)におけるワーキングセットページ(または代わりに、割り当てられたページ)と称される。現在使用されているメモリーページは、閾値時間内で(例えば、前の20秒)プログラム108によってアクセスされ、または、そうではなく、メモリーページがメモリーマネージャー102によって再利用されないことになる方式で、プログラム108によってアクセスされるメモリーページを指す。メモリーページを再利用することは、同一もしくは異なるプログラムのために、またはシステムにおける他の使用のために異なるデータを記憶することなど、別のことのためにメモリーマネージャー102によって再使用されているメモリーページを指す。
[0026]別のタイプのメモリーページは、プログラム108に割り当てられ、プログラム108によって現在使用されていないメモリーページであり、このタイプのメモリーページは、スタンバイページ(または代わりに、再割り当て可能ページ)と称される。現在使用されていないメモリーページは、そのコンテンツが修正されておらず(もしくは、最後の修正からページファイル112もしくは圧縮記憶110に書き込まれており)、閾値時間(例えば、前の20秒)内でプログラム108によってアクセスされていないページであるか、または、そうではなく、メモリーページがメモリーマネージャー102によって再利用されてもよい方式で、プログラム108によってアクセスされているページを指す。メモリーページは、例えば、異なるタイプのページ(例えば、機能している)となるように割り当てられる、異なるプログラムに割り当てられるなどによって再利用されてもよい。
[0027]別のタイプのメモリーページは、そのコンテンツが修正されたが、ページファイル112にまだ複製されていないメモリーページであり、このタイプのメモリーページは、修正されたページ(または代わりに、ダーティーページ)と称される。修正されたメモリーページは、メモリーマネージャー102によっては再利用されないことになる。しかしながら、以下でより詳細に述べられるように、修正されたメモリーページを圧縮記憶110に圧縮し記憶した後、メモリーページの分類が変更されてもよい(例えば、スタンバイページまたは空きページに)。
[0028]別のタイプのメモリーページは、プログラム108に現在割り当てられておらず、メモリーマネージャー102がそれと何か(再利用されることを含む)を行うことができるメモリーページである。このタイプのメモリーページは、空きページ(または代わりに、割り当て解除されたページ)と称される。
[0029]メモリーマネージャー102は、ページングされたメモリー106のメモリーページがプログラム108にいつ割り当てられるか、どのメモリーページがどのプログラム108に割り当てられるか、プログラム108に前に割り当てられたどのメモリーページが再利用されることになるか、などを判定する様々なルールまたは基準を使用する。メモリーマネージャー102はまた、メモリーページのタイプに対する分類を判定し、必要に応じてメモリーページの分類を変更する。1つまたは複数の実施形態では、メモリーマネージャー102は、ページングされたメモリー106のどのメモリーページがどのタイプのページとして分類されるかのリストまたは他のレコードを維持する。例えば、メモリーマネージャー102は、ワーキングセットページのリストまたは他のレコード、スタンバイページのリストまたは他のレコード、修正されたページのリストまたはレコード、および空きページのリストまたはレコードなどを維持することができる。
[0030]システム100は、1つまたは複数のデバイスを表す。1つまたは複数の実施形態では、システム100において示されるコンポーネント102〜108は、同一のコンピューティングデバイスの一部として含まれる。代わりに、コンポーネントは、2つ以上のデバイスにわたって分散されてもよい。
[0031]図2は、1つまたは複数の実施形態に従った、メモリーページの例示的なライフサイクル200を示す。メモリーページは、プログラムに割り当てられてもよく、プログラムのワーキングセット202に含まれてもよい。プログラムのワーキングセット202は、プログラムのワーキングセットページを含む。メモリーマネージャー102は、様々なときに、他のプログラムに利用可能なメモリーページを作成するためなどの様々な理由で、プログラムのワーキングセット202においてメモリーページをトリムする(減少させるとも称される)ことができる。ワーキングセット202に書き込まれ(修正され)ワーキングセット202からトリムされたメモリーページは、メモリーページの修正されたリスト206に移動される(204)。
[0032]圧縮記憶マネージャー104は、修正されたリスト206においてメモリーページを圧縮し、圧縮されたメモリーページを圧縮記憶110のメモリーページに追加する(208)。圧縮記憶マネージャー104は、規則的なもしくは非規則的な間隔でメモリーページを圧縮する、修正されたリストに含まれているメモリーページの少なくとも閾値数に応答してメモリーページを圧縮する、メモリーマネージャー102からの要求に応答してメモリーページを圧縮する、以下でより詳細に述べられるように、プロセスのメモリーページがスワップアウトされることになるとの判定に応答してメモリーページを圧縮するなど、異なる方式で、修正されたリストにおいてメモリーページをいつ圧縮するかのタイミングを判定することができる。圧縮記憶110に圧縮および追加された後、修正されたリスト206におけるメモリーページは、スタンバイリストに移動される(210)。スタンバイリスト212は、スタンバイページのリストであるが、代わりに、メモリーページが空きページのリストに移動されてもよい。
[0033]圧縮記憶110はそれ自体、複数のメモリーページから構成され、本明細書では圧縮記憶メモリーページとも称され、それらの圧縮記憶メモリーページは、圧縮記憶110またはメモリーマネージャー102によって要求されるように修正されたリスト206に移動されてもよい(214)。しかしながら、圧縮記憶メモリーページは、要求されたような長期間(潜在的に無期限に)に修正されたリストに移動される必要はない。圧縮記憶メモリーページは、圧縮記憶ワーキングセットに残存することができる。
[0034]修正されたリスト206に移動された圧縮記憶メモリーページに対し、メモリーマネージャー102(または代わりに、圧縮記憶マネージャー104)は、圧縮記憶メモリーページをページファイル112に書き出す(216)。よって、圧縮記憶メモリーページに圧縮され記憶された後、ワーキングセット202からのメモリーページは、ページファイル112に書き込まれてもよい。圧縮記憶マネージャー104が修正されたリスト206上で圧縮記憶メモリーページを圧縮することを試みないことに留意されるべきである。圧縮記憶マネージャー104は、圧縮記憶メモリーページのレコードなどを維持することによって、メモリーページが割り当てられるプロセスに基づいてなど(例えば、圧縮記憶マネージャー104などのシステムプロセスに割り当てられる場合、メモリーページを圧縮することの試みがなされない)、異なる方式でそれが圧縮することを試みないメモリーページを識別することができる。
[0035]修正されたリスト206に移動されるワーキングセット202からのメモリーページを圧縮することができず、もしくはそうでなければ、予測される時間に(例えば、閾値時間内で)圧縮記憶110のメモリーページに追加することができず、またはシステム100は、様々なポリシーの理由で全くメモリーページを圧縮しないことを選択する状況が発生することがある。そのような状況は、システム100における多量なメモリー使用、システム100における多量なプロセッサー使用、およびシステム100に適用される様々なポリシーによってなど、時々発生することがある。そのような状況では、メモリーマネージャー102は、圧縮されていないメモリーページをページファイル112に書き出す(218)。よって、そのようなメモリーページは、圧縮記憶110のメモリーページに含まれないが、メモリーマネージャー102は、そのようなメモリーページが圧縮記憶マネージャー104ではなくページファイル112から利用可能となるレコード(例えば、ページテーブル116における)を維持する。
[0036]図1に戻ると、ページングされたメモリー106のページの各々は、対応する優先度レベルを有する。特定のタイプのメモリーページ(例えば、修正されたページ)のみが優先度レベルを有してもよく、または代わりに、全てのタイプのメモリーページが優先度レベルを有してもよい。メモリーマネージャー102は、メモリーページごとに優先度レベルを設定し、種々の異なる方式でメモリーページに対する優先度レベルを判定することができる。1つまたは複数の実施形態では、メモリーページに対する優先度レベルは、メモリーページの割り当てを要求したプロセスまたはスレッドにオペレーティングシステムによって割り当てられた優先度レベルである。他の基準がまた、プログラム108からの要求、および特定のタイプの読み出し(例えば、ページの推測的な読み出し)と関連付けられているメモリーページなどのメモリーページに対する優先度レベルを判定するために使用されてもよい。メモリーマネージャー102はまた、時間とともにメモリーページの優先度レベルを変更することができる(例えば、閾値時間の間にプログラム108によってアクセスされないメモリーページの優先度レベルを下げること、ページファイル112に書き込まれ、スタンバイリスト212に移動された圧縮記憶メモリーページの優先度レベルを下げること、など)。
[0037]優先度レベルは、システム100において様々な方式で使用されてもよい。1つまたは複数の実施形態では、メモリーページはそれらの優先度レベルに基づいてページファイル112に書き込まれる。より低い優先度のページファイル112に書き込まれることになるメモリーページは、より高い優先度のメモリーページの前にページファイルに書き込まれる。これは、より高い優先度のメモリーページがより低い優先度のメモリーページよりも長く物理メモリーに残存することを可能にし、より高い優先度のメモリーページがより低い優先度のメモリーページ(物理メモリーに残存する)の前にページファイルに書き込まれる(かつ、物理メモリーには残存しない)優先度逆転シナリオを回避する。同様に、1つまたは複数の実施形態では、それらの優先度レベルに基づいてスタンバイリストからメモリーページが再利用される。より低い優先度のスタンバイリスト上のメモリーページは、より高い優先度のメモリーページの前に再利用される。これは、より高い優先度のメモリーページがより低い優先度のメモリーページよりも長くスタンバイリスト上に残存することを可能にする。
[0038]図3は、1つまたは複数の実施形態に従った、ページングされたメモリーの例示的なレコード300を示す。複数の(X個の)優先度レベル302の組が示され、優先度レベル302の組は、ページに対応することができる優先度レベルを含む。ページングされたメモリーのレコード300は、例えば、図1のページングされたメモリー106の修正されたページのレコードである。より大きい番号を有する優先度レベルは、より小さい番号を有する優先度レベルより高い優先度であることができる(例えば、優先度レベル4は、優先度レベル1より高い優先度であることができる)、または逆もそうである。文字または他の符号など、代わりに、番号以外のラベルが優先度レベルを識別するために使用されてもよい。
[0039]優先度レベル302ごとに、レコード300は、その優先度レベルを有するゼロ以上のメモリーページの組を識別する。例えば、ページ304は優先度レベル1に対応し、ページ306は優先度レベル3に対応する、などである。レコード300は、異なる優先度レベルに対応するメモリーページに対する異なる記憶領域(例えば、異なるキャッシュ)などを使用して、特定の優先度レベルに対応するメモリーページを識別するリストまたは他のデータ構造など、任意の様々な異なる方式で維持されてもよい。
[0040]図1に戻り、圧縮記憶110は、メモリーマネージャー102によって圧縮記憶マネージャー104に割り当てられた1つまたは複数のメモリーページとして実装される。それらのメモリーページは、様々な機能を提供する、圧縮記憶マネージャー104のユーザーモード仮想アドレス空間におけるメモリーページである。圧縮記憶110を実装するメモリーページは、カーネル仮想アドレス空間を消費せず、特権を有しないユーザーモードプログラムがメモリーページ上でデータにアクセスすることができないので、データが公開されることを防止するセキュリティを提供する。さらに、圧縮記憶マネージャー104のユーザーモード仮想アドレス空間においてメモリーページを使用することによって、メモリーマネージャー102および圧縮記憶マネージャー104は、既存のメモリーマネージャーアプリケーションプログラミングインターフェース(API)を使用するメモリーページ上での制御を有し、圧縮記憶マネージャー104が、それが要求するようにそのバッキングデータのページング能力、およびスワッピング能力などを制御することを可能にする。
[0041]1つまたは複数の実施形態では、圧縮記憶マネージャー104は、ページングされたメモリー106のページを圧縮し、圧縮されたページを圧縮記憶110の領域に記憶し、メモリーページを圧縮記憶110に、または圧縮記憶110の領域に圧縮することとも称される。圧縮記憶マネージャー104は、各プログラム108に対して(かつ関連付けられた)別個の圧縮記憶110を生成し、ならびに特定のプログラム108からの修正されたリスト206からの圧縮されたメモリーページを、特定のプログラムと関連付けられた圧縮記憶110の領域に追加する。代わりに、圧縮記憶マネージャー104は、プログラム108ごとに対して1つの圧縮記憶110以外の異なる粒度で圧縮記憶110を生成し維持することができる(例えば、圧縮された記憶マネージャー104は、任意の組のプログラム108に対して、またはシステムにおけるページング可能メモリーの全てに対して圧縮記憶110を生成し維持することができる)。
[0042]圧縮記憶110の各領域は、メモリーマネージャー102によって圧縮記憶マネージャー104に割り当てられたページングされたメモリー106の複数のメモリーページから構成される。例えば、領域は、128キロバイトであってもよく、メモリーページは各々、4キロバイトであってもよいが、それらの値は例であり、他の領域および/またはページサイズが代わりに使用されてもよい。特定の領域に圧縮されているページングされたメモリー106のページは、少なくとも類似の優先度レベルを有し、ページングされたメモリー106の領域を構成するメモリーページは、その領域に圧縮されたメモリーページと少なくとも類似の優先度レベルを有する。少なくとも類似の優先度レベルを有するメモリーページは、同一または類似の優先度レベルを有するメモリーページを指す。
[0043]圧縮記憶マネージャー104または圧縮記憶110によって実行されるとして、本明細書で述べられる動作は、圧縮記憶マネージャー104および圧縮記憶110のうちの1つまたは両方によって実行されてよく、圧縮記憶マネージャー104によって実行されるとして、本明細書で述べられる動作は代わりに、圧縮記憶110によって実行されてもよく、圧縮記憶110によって実行されるとして、本明細書で述べられる動作は代わりに、圧縮記憶マネージャー104によって実行されてもよい。1つまたは複数の実施形態では、圧縮記憶マネージャー104は、各圧縮記憶110を管理すること、読み込みおよび書き込み要求を適切な圧縮記憶110にルーティングすること、ならびに圧縮記憶110に対するメモリーを管理すること(例えば、メモリーページが圧縮記憶110に割り当てられるように要求すること)などに関与する。そのような状況では、各圧縮記憶110は単純に、メモリーページの組であってもよい。代わりに、圧縮記憶110に対してメモリーを管理するための制御および論理(例えば、ページングされたメモリー106のページの組がメモリーマネージャー102によって圧縮記憶110に割り当てられるように要求すること)のうちの少なくとも一部は、圧縮記憶110自体によって実装されてもよい。そのような状況では、圧縮記憶110は、圧縮記憶110に対するメモリーを管理するための制御および論理を実装するために圧縮記憶モジュールとともに1つまたは複数のメモリーページを含む。
[0044]1つまたは複数の実施形態では、圧縮記憶110の特定の領域に圧縮されているページングされたメモリー106のページは、同一の優先度レベルを有し、異なる優先度レベルに対して異なる領域が使用される。圧縮記憶110の領域を構成するメモリーページは、その領域に圧縮されたメモリーページと同一の優先度レベルを有する。例えば、圧縮記憶マネージャー104は、図3のページ304を、圧縮記憶マネージャー104に割り当てられ、優先度レベル1を有するメモリーページから構成される1つの領域に圧縮することができる。別の例として、圧縮記憶マネージャー104は、図3のページ306を、圧縮記憶マネージャー104に割り当てられ、優先度レベル3を有するメモリーページから構成される別の領域に圧縮することができる。優先度レベルごとに対して、圧縮記憶マネージャー104は、その優先度レベルに対応するメモリーページから構成されるゼロ以上の領域を作成することができる。
[0045]代わりに、圧縮記憶110の特定の領域に圧縮されているページングされたメモリー106のページは、類似であるが必ずしも同一ではない優先度レベルを有してもよい。どの優先度レベルが類似であるかは、優先度レベルが相互のレベルの閾値数(例えば、1または2)内であるかなど、異なる方式で判定されてもよい。例えば、優先度レベル1および優先度レベル2は類似であってもよく、よって、優先度レベル1のページおよび優先度レベル2のページは、同一の領域に圧縮されてもよいが、優先度レベル1および優先度レベル5は、類似であってはならず、よって、優先度レベル1のページおよび優先度レベル5のページは、同一の領域に圧縮されない。
[0046]同様に、ページングされたメモリー106の領域を構成するメモリーページは、その領域に圧縮されたメモリーページと類似ではあるが必ずしも同一ではない優先度レベルを有してもよい。例えば、圧縮記憶110の領域を構成するメモリーページは、優先度レベル3を有してもよく、その領域に圧縮されたメモリーページは、優先度レベル2または優先度レベル3を有してもよい。さらに、領域は、同一または類似の優先度レベルのメモリーページから構成されてもよい。例えば、領域は、優先度レベル2を有する一部のメモリーページおよび優先度レベル3を有する一部のメモリーページから構成されてもよい。
[0047]領域を作成するために、圧縮記憶マネージャー104は、ページングされたメモリー106のページの組がメモリーマネージャー102によってマネージャー104に割り当てられるように要求する。割り当てられたページの組は、ワーキングセットページとして分類され、圧縮記憶マネージャー104は、割り当てられたページの組を特定の圧縮記憶110と関連付ける。圧縮記憶マネージャー104は、修正されたリスト206上のメモリーページを圧縮し、それらの圧縮されたページを、圧縮記憶マネージャー104に割り当てられたページの組に記憶する。
[0048]よって、例えば、特定のページの組は、少なくとも類似の優先度レベルに対応する追加のページの組に圧縮される。その特定のページの組が圧縮された後、追加のページの組はまた、修正されたページとして分類される。よって、圧縮記憶マネージャー104は、その特定のページの組を同一のタイプ(修正された)の、少なくとも類似の優先度レベルに対応する異なるページの組に圧縮する。しかしながら、圧縮記憶マネージャー104はその特定のページの組を圧縮するので、その特定のページの組におけるページの量は主として、圧縮されたページの組におけるページの量よりも大きい。次いで、圧縮されたページの組は、ページファイル112に書き込まれてもよい。圧縮されたページの組がページファイル112にいつ書き込まれるか(または書き込まれるか否か)を判定するために、様々な異なるポリシーが適用されてもよい。
[0049]図4は、1つまたは複数の実施形態に従った、メモリーページを圧縮する例を示す。402に示されるように、ページングされたメモリー106は、同一の優先度レベル(例えば、上記のように優先度レベル3)を有する5つのメモリーページ306を含む。圧縮記憶マネージャー104は、メモリーページ306と少なくとも類似の優先度レベルを有する2つのメモリーページ404を含む圧縮記憶の領域が割り当てられる。406に示されるように、圧縮記憶マネージャー104は、メモリーページ306をメモリーページ404に圧縮する。圧縮の後、メモリーマネージャー102は、圧縮されたバージョンのメモリーページ306がメモリーページ404としてページングされたメモリー106に記憶されるので、メモリーページ306を再利用することができる。よって、圧縮の後、ページングされたメモリー106は、メモリーページ404を記憶するが、メモリーページ306を記憶する必要はない。
[0050]図5は、1つまたは複数の実施形態に従った、メモリーページを圧縮する例示的なプロセス500を示すフローチャートである。プロセス500は、図1の圧縮記憶マネージャー104などの圧縮記憶マネージャーによって実行され、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせで実装されてもよい。プロセス500は、行為の組として示され、様々な行為の動作を実行するために示される順序に限定されない。プロセス500は、メモリーページを圧縮するための例示的なプロセスであり、メモリーページを圧縮することの追加の記述が、異なる図面を参照して本明細書に含まれる。
[0051]プロセス500では、修正されたリスト上で1つまたは複数のメモリーページの組が識別される(行為502)。1つまたは複数のメモリーページの組は、ページの優先度レベルに基づいて、メモリーページが修正されたリストに追加される順序で識別される(例えば、より低い優先度のページがより高い優先度ページの前に識別される)など、様々な方式で識別されてもよい。
[0052]行為502で識別されたメモリーページの組は、ページングされたメモリーの圧縮記憶の領域に圧縮される(行為504)。圧縮記憶のこの領域は、行為502で識別されたメモリーページの組と少なくとも類似の優先度レベルを有する1つまたは複数の圧縮記憶メモリーページから構成される。行為504において圧縮することの一部として、圧縮記憶マネージャーは、その領域において、メモリーページの組の圧縮されたバージョンの各メモリーページがどこに記憶されるかのレコードを維持する。このレコードは、圧縮されたバージョンのメモリーページごとに対して、どの1つまたは複数の圧縮記憶メモリーページが圧縮されたバージョンのメモリーページを記憶するかのレコード、および圧縮されたバージョンのメモリーページごとに対して、圧縮されたバージョンのメモリーページを記憶する領域におけるアドレス範囲のレコードなど、様々な形式をとってもよい。
[0053]メモリーページを圧縮することは、メモリーページのコンテンツ(例えば、記憶されたデータ)を圧縮することを指す。任意の様々な異なるパブリックおよび/またはプロプライエタリな圧縮技術がメモリーページを圧縮するために使用されてもよい。例えば、メモリーページは、ランレングスエンコーディング圧縮アルゴリズム、LZW圧縮アルゴリズム、およびHuffman符号化アルゴリズムなどを使用して圧縮されてもよい。異なるタイプのコンテンツに対して異なる圧縮アルゴリズムなど、複数の異なる圧縮アルゴリズムが任意選択で採用されてもよい。例えば、1つの圧縮アルゴリズムが英数字および/またはテキストコンテンツに対して使用されてもよく、別の圧縮アルゴリズムが画像コンテンツに対して使用されてもよく、別の圧縮アルゴリズムが音声コンテンツに対して使用されてもよい。メモリーページを圧縮するために使用される圧縮技術は主として、可逆的圧縮アルゴリズムであるが、ある状況では(例えば、ある画像および/または音声コンテンツに対し)、不可逆的圧縮アルゴリズムが代わりに使用されてもよい。特定の圧縮アルゴリズムはまた、デバイス依存であってもよく、より高速なデバイス(例えば、より強力な1つまたは複数のプロセッサーを有する)が、より良好に圧縮する、より多くのプロセッサーを必要とする圧縮アルゴリズムで構成されてもよく、より低速なデバイス(例えば、強力でない1つまたは複数のプロセッサーを有する)が、良好に圧縮しないより少ないプロセッサーを必要とする圧縮アルゴリズムで構成されてもよい。特定の圧縮アルゴリズムはまた、記憶装置性能とのトレードオフに基づいてもよい。CPUが記憶装置よりも大きく性能が上回る場合、より良好に圧縮するより多くのプロセッサーを必要とする圧縮アルゴリズム(よって、記憶装置I/Oが少なくなる)が使用されてもよい。
[0054]1つまたは複数の実施形態では、メモリーページが、行為504において個々に圧縮される。代わりに、2つ以上のメモリーページがともに圧縮されてもよい(例えば、圧縮アルゴリズムが個々にではなくともに2つ以上のメモリーページ上で実行されてもよい)。
[0055]メモリーページの組の追加の処理がまた、任意選択で、行為504において実行されてもよい。この追加の処理は、メモリーページの組のコンテンツを暗号化すること(例えば、対称鍵暗号化、および公開鍵暗号化などを使用して)、メモリーページの組に対してCRC(巡回冗長検査)データなどの誤り検出データを生成すること、ならびにメモリーページの組に対してHMAC(ハッシュメッセージ認証コード)データなどの認証情報を生成すること、などとすることができる。
[0056]行為502で識別されたメモリーページの組は、圧縮記憶に圧縮された後にスタンバイリストに移動され(行為506)、または代わりに、空きリストに移動される。メモリーページの組は、圧縮記憶マネージャー104が、メモリーページの組を解放することができることをメモリーマネージャー102に通知するのに応答してなど、様々な方式でスタンバイリスト(または、空きリスト)に移動されてもよい。行為502で識別されたメモリーページの組は、スタンバイリスト(または、空きリスト)に移動されてもよく、再利用されてもよく、なぜならば、2つのバージョンの同一のメモリーページ(1つのバージョンは圧縮されておらず、1つのバージョンは圧縮されている)が、それがページングされたメモリーの効率的な使用になりえないので、ページングされたメモリーに保持される必要がないからである。
[0057]圧縮記憶の領域を構成する圧縮記憶メモリーページは、メモリーマネージャーによってページファイルに書き出される(行為508)。圧縮記憶メモリーページがページファイルに即時に書き込まれる必要がないことに留意されるべきである。むしろ、圧縮記憶メモリーページの書き出しは、メモリーマネージャー102が別のプログラム108への割り当てのためにメモリーページを解放することを要求するとき、および圧縮記憶マネージャー104が圧縮記憶メモリーページを書き込むことを要求するときなどの後のときまで遅延されてもよい。圧縮記憶メモリーページをページファイルに書き込む速度および効率性などを改善するために任意の数の技術が実装されてもよいことがまた留意されるべきである(例えば、圧縮記憶メモリーページは連続したチャンクで書き込まれてもよい)。
[0058]行為502で識別されたメモリーページの組をページファイルに書き出すのではなく、圧縮記憶メモリーページがページファイルに書き込まれる(508)ことがさらに留意されるべきである。よって、メモリーページの組の展開されたバージョンをページファイルに書き出すことなく(またはそれらなしに)、行為502で識別されたメモリーページの組の圧縮されたバージョンがページファイルに書き込まれる。
[0059]領域を構成する圧縮記憶メモリーページがページファイルに書き込まれると、圧縮記憶メモリーページは、圧縮記憶メモリーページの優先度レベルで(または代わりに、より低いレベルで)スタンバイリスト上に置かれる。この点で、圧縮記憶メモリーページは、システム100において利用可能なメモリーとして扱われ、メモリーマネージャー102によって要求されるいずれかのときに再利用されてもよい。
[0060]1つまたは複数の実施形態では、圧縮記憶マネージャーは、圧縮記憶メモリーページが実質的に満たされるまでメモリーマネージャーが圧縮記憶メモリーページを書き出すことを許可しない。実質的に満たされた圧縮記憶メモリーページは、追加の圧縮されたメモリーページを記憶することができるメモリーページに残存している記憶空間があったとしてもほとんどないことを指す。例えば、圧縮記憶メモリーページの記憶空間の少なくとも閾値量は、圧縮されたメモリーページを記憶するために使用されている。
[0061]本明細書における記述の一部は、1つまたは複数のプロセスのメモリーページを圧縮することを指すが、本明細書で述べられる技術は、ユーザーモードのページングされたメモリーおよびカーネルモードのページングされたメモリーを含むことができる、全てのページング可能メモリーに対してメモリーページを圧縮することに同様に適用される。そのような状況では、ページファイル全体が圧縮記憶においてメモリーによって表され、全ての修正されたページが圧縮記憶を通過するので、圧縮記憶は必然的にページファイルを管理する。
[0062]図6は、1つまたは複数の実施形態に従った、圧縮されたメモリーページを読み出すための例示的なプロセス600を示すフローチャートである。プロセス600は、図1の圧縮記憶マネージャー104などの圧縮記憶マネージャーによって実行され、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせで実装されてもよい。プロセス600は、行為の組として示され、様々な行為の動作を実行するために示される順序に限定されない。プロセス600は、圧縮されたメモリーページを読み出すための例示的なプロセスであり、圧縮されたメモリーページを読み出すことの追加の記述が、異なる図面を参照して本明細書に含まれる。
[0063]メモリーページに対する要求がメモリーマネージャーから受信される(行為602)。この要求は、例えば、少なくとも1つのメモリーページが圧縮記憶110に圧縮された後に、メモリーページにおけるコンテンツにアクセスすることを要求するプログラム108からの要求に応答したものであってもよい。要求は、鍵とも称される、少なくとも1つのメモリーページの識別子を含む。メモリーマネージャーは、単一のメモリーページまたは複数のメモリーページを要求することができる。
[0064]要求に応答して、要求されたメモリーページがページングされたメモリーにおける圧縮記憶メモリーページにあるかについてのチェックがなされる(行為604)。上記のように、圧縮記憶メモリーページは、ページファイル112に即時に書き出される必要はなく、よって、要求されたメモリーページは、ページングされたメモリー106の圧縮記憶メモリーページでいまだに利用可能であってもよい。圧縮記憶メモリーページは、圧縮記憶マネージャー104のワーキングセットまたは様々なリスト(例えば、修正されたリストもしくはスタンバイリスト)上にあってもよいが、いまだにページングされたメモリーにあることに留意されるべきである。
[0065]要求されたメモリーページがページングされたメモリーにおいて圧縮記憶にある場合、要求されたメモリーページは展開され(行為606)、メモリーマネージャーに返される(行為608)。展開され返された後、圧縮されたメモリーページは圧縮記憶110の領域から削除され、よって、圧縮されていない形式のメモリーページと圧縮された形式のメモリーページとの間でのメモリーページの重複を回避する。圧縮記憶メモリーページのコンテンツが展開され返された後、圧縮記憶メモリーページは、再利用され解放されてもよい。
[0066]要求されたメモリーページが展開される方式は、要求されたメモリーページを圧縮するために使用される技術の少なくとも一部に基づいて変化してもよい。メモリーページを復号化すること、誤り検出データを検証すること、認証情報を検証すること、およびこの検証が失敗した場合にデータを補正すること(可能である場合)など、メモリーページ上で実行される任意の他の処理がまた、行為606において検証または取り消しされる。誤り検出データもしくは認証情報を検証することができない場合、および/またはデータが補正された場合、展開された要求されたメモリーページではなく、要求されたメモリーページが破損したことの表示がメモリーマネージャーに返されてもよい。
[0067]要求されたメモリーページがページングされたメモリーにおいて圧縮記憶にない場合、要求されたメモリーページを含む圧縮記憶メモリーページがページファイルから読み出される(行為610)。圧縮記憶メモリーページを読み出すことは、ページファイルから圧縮記憶メモリーページを読み込むこと、および圧縮記憶メモリーページをページングされたメモリー106の圧縮記憶110に記憶することを含む。次いで、要求されたメモリーページは、ページングされたメモリーにおいて圧縮記憶110にあり、よって、要求されたメモリーページは、展開され(行為606)、メモリーマネージャーに返される(行為608)。
[0068]行為604および610はともに実行されてもよいことに留意されるべきである。例えば、圧縮記憶マネージャー104は、どのメモリーページがどの圧縮記憶メモリーページに圧縮されたかのレコードを維持する。行為602における要求に応答して、圧縮記憶マネージャー104は、要求されたメモリーページが圧縮された圧縮記憶メモリーページを読み込む。圧縮記憶メモリーページがページングされたメモリー106の圧縮記憶110にある場合、圧縮記憶マネージャー104は、ページングされたメモリー106から圧縮記憶メモリーページを読み込む。圧縮記憶メモリーページがページングされたメモリー106の圧縮記憶110にない場合、ページフォールトが発生し、メモリーマネージャー102は、ページファイルから圧縮記憶メモリーページを読み出し、圧縮記憶メモリーページをページングされたメモリー106に置き、次いで、圧縮記憶マネージャーは、ページングされたメモリー106から圧縮記憶メモリーページを読み込む。
[0069]圧縮記憶マネージャー104は任意選択で、要求されたメモリーページに加えて1つまたは複数のメモリーページを展開し返す(かつ、必要である場合、ページファイルから読み出す)ことを選択することができる。例えば、圧縮記憶マネージャー104は、メモリーページに対する後のメモリーマネージャー要求を減少させることによって性能を増大させることを試みる際に、要求されたメモリーページの近くの(例えば、閾値のアドレス範囲内の)1つまたは複数のメモリーページを展開し返すことを選択することができる。
[0070]本明細書で述べられるメモリーページを圧縮すること、およびメモリーページを読み出すこととともに、圧縮記憶マネージャー104は、メモリーマネージャーからの書き込み(圧縮)または読み込み(読み出し)要求の進捗を保証するように動作することに留意されるべきである。圧縮記憶マネージャー104によって保証される進捗は、少なくとも部分的にはメモリーページの圧縮によって、利用可能なメモリーページがないので、システム100におけるデッドロックを防止することを指す。圧縮記憶マネージャー104は、要求されたメモリーページが既にページファイル112において圧縮され記憶されているかに関わらず、ならびに要求されたメモリーページがページファイル112において圧縮され記憶された後に再利用されているかに関わらず、この進捗を保証するように動作する。1つまたは複数の実施形態では、メモリーページを圧縮することに関する進捗は、修正されたリスト上での1つまたは複数の圧縮されていないメモリーページをページファイルに書き込むことをメモリーマネージャーに通知することによって保証され、それによって、1つまたは複数のメモリーページを解放する。メモリーページを読み出すことに関する進捗は、少なくとも1つのそのような読み込みが進行するために必要なリソースを常に有することを保証するために必要なリソース(例えば、圧縮記憶マネージャーのワーキングセットにおける1つまたは複数のメモリーページ)を前もって事前割り当てすることによって保証される。
[0071]図1に戻り、各メモリーページは、メモリーページが相互に区別されることを可能にするそれと関連付けられた識別子(鍵とも称される)を有する。この識別子は、メモリーマネージャー102または圧縮記憶マネージャー104などの様々なコンポーネントのいずれかによって割り当てられてもよい。圧縮されたバージョンのメモリーページは、メモリーページ自体よりもページングされたメモリー106において少ない空間を占め、よって、同一のデータ単位の構造は、圧縮記憶マネージャー104によって使用されない。例えば、メモリーマネージャー102は、メモリーページによってページングされたメモリー106を管理してもよいが、圧縮記憶マネージャー104はそうではない。
[0072]圧縮記憶マネージャー104は、様々な圧縮されたメモリーページが圧縮記憶110のどの領域に記憶されているかを識別するためのメモリーページマップを維持する。図7は、1つまたは複数の実施形態に従った、例示的なメモリーページマップ702を示す。圧縮記憶110に圧縮されたメモリーページごとに、メモリーページマップ702は、その圧縮されたメモリーページがメモリーページの領域においてどこに記憶されているかを識別する対応するレコード704を維持する。圧縮記憶110は、上記のように各々がそれ自体複数のメモリーページから構成される、1つまたは複数の(n個の)異なる領域706(1)、…、706(n)として示される。1つまたは複数の実施形態では、別個のメモリーページマップがページングされたメモリー106において圧縮記憶110ごとに対して維持される。代わりに、複数の圧縮記憶に対するメモリーページマップが単一のメモリーページマップに結合されてもよく、レコード704は、圧縮されたメモリーページが記憶された圧縮記憶110の識別子を含むことができる。
[0073]各レコード704は、ページ鍵フィールド710、領域番号フィールド712、オフセットフィールド714、サイズフィールド716、およびフラグフィールド718を含む。ページ鍵フィールド710は、対応する圧縮されたメモリーページの識別子を記憶する。この識別子は、様々な異なる形式のうちのいずれかを取ることができる。例えば、それは、プロセス識別子および仮想アドレス、ならびにレコード識別子などであってもよい。
[0074]領域番号フィールド712は、対応する圧縮されたメモリーページが記憶された特定の領域706の識別子を記憶する。主として番号であるが、この領域は、様々な他の方式のうちのいずれかで識別されてもよい。オフセットフィールド714は、対応する圧縮されたメモリーページに対するデータの記憶が開始する特定の領域706へのオフセットの識別子を記憶する。代わりに、領域およびオフセット識別子以外の、対応する圧縮されたメモリーページが記憶された圧縮された部分における位置の任意の他の識別子を記憶する1つまたは複数のフィールドが使用されてもよい。
[0075]サイズフィールド716は、対応する圧縮されたメモリーページのサイズ(例えば、バイトにおける)の識別子を記憶する。領域、特定の領域へのオフセット、および圧縮されたメモリーページのサイズを与えられれば、圧縮されたメモリーページが記憶されたメモリーアドレス範囲を容易に識別することができる。フラグフィールド718は、対応する圧縮されたメモリーページに関する様々な状態情報を記憶する。そのようなフラグの例は、どのメモリーページが圧縮されるために選択されるかを判定するために使用されるメモリーページに対する選択優先度、およびメモリーページに対応する優先度レベルなどを含む。
[0076]メモリーページマップ702は例にすぎないことが理解される。他の実施形態では、追加のフィールドがマップ702の各レコードに含まれてもよい。例えば、CRCデータなどの誤り検出データ、HMACデータなどの認証情報、ならびにメモリーページの使用履歴および/または頻度を記述した情報などがマップ702の各レコードに含まれてもよい。さらに、フィールド710〜718のうちの1つまたは複数がマップ702のレコードから省略されてもよい。加えて、フィールド710〜718のうちの1つまたは複数におけるデータが、別個のレコードではなくページングされたメモリー106にメモリーページとともに記憶されてもよい。
[0077]メモリーページマップ702に加えて、圧縮記憶マネージャー104はまた、どのメモリーページが領域の特定の位置に記憶されているかを識別するための領域マップを維持する。よって、メモリーページマップ702は、識別された圧縮されたメモリーページが記憶された場所を識別するように動作し、領域マップは、どの圧縮されたメモリーページが領域の所与の位置に記憶されているかを識別するように動作する。
[0078]図8は、1つまたは複数の実施形態に従った、例示的な領域マップ802を示す。異なるメモリーページが記憶された領域へのオフセットごとに、領域マップ802は、そのオフセットに記憶された対応する圧縮されたメモリーページを識別するレコード804を維持する。各レコード804は、ページ鍵フィールド806、領域番号フィールド808、およびオフセットフィールド810を含む。
[0079]ページ鍵フィールド806は、図7のレコード704のページ鍵フィールド710と同様に、対応する圧縮されたメモリーページの識別子を記憶する。領域番号フィールド808は、レコード704の領域番号フィールド712と同様に、対応する圧縮されたメモリーページが記憶された特定の領域706の識別子を記憶する。オフセットフィールド810は、レコード704のオフセットフィールド714と同様に、対応する圧縮されたメモリーページに対するデータの記憶が開始する特定の領域706へのオフセットの識別子を記憶する。代わりに、領域およびオフセット識別子以外に、対応する圧縮されたメモリーページが記憶された圧縮された部分における位置の任意の他の識別子を記憶する1つまたは複数のフィールドが使用されてもよい。
[0080]領域マップ802は例にすぎないことが理解される。他の実施形態では、追加のフィールドがマップ802の各レコードに含まれてもよく、および/またはフィールド806〜810のうちの1つもしくは複数がマップ802のレコードから省略されてもよい。加えて、フィールド806〜810のうちの1つまたは複数におけるデータが、別個のレコードではなく図1のページングされたメモリー106にメモリーページとともに記憶されてもよい。
[0081]図7のメモリーページマップ702および図8の領域マップ802は、様々な異なる方式のうちのいずれかで実装されてもよい。1つまたは複数の実施形態では、それらのマップは各々、個々のレコードにアクセスする際に性能を増大させるためにB+木として実装されてもよい。代わりに、AVL木、ハッシュテーブル、および配列などの様々な他の従来のデータ構造のうちのいずれかが、それらのマップを実装するために使用されてもよい。
[0082]図1に戻り、メモリーマネージャー102が、ページングされたメモリー108の外へプログラム108に対するワーキングセット全体を移動させることを要求する状況が発生することがある。1つまたは複数の実施形態では、そのような状況は、プログラム108がシステム100において一時停止したときに発生する。プログラム108を一時停止させるプロセスの一部として、メモリーページのワーキングセットが圧縮記憶110において圧縮され記憶され、ワーキングセットをスワップアウトするとも称される。この圧縮記憶110は、その後、ページファイル112に書き込まれてもよい。プログラム108がその後、再開されるとき(例えば、もはや一時停止されない)、圧縮記憶110は、ページファイル112から読み出され(それがページファイル112に書き込まれていた場合)、圧縮記憶110におけるメモリーページは、展開され、ワーキングセット202に返され、ワーキングセットをスワップインするとも称される。
[0083]図9は、1つまたは複数の実施形態に従った、ワーキングセットをスワップアウトする例を示す。図9では、プログラム108の特定のプロセスのワーキングセット202、プロセスXが示される。ワーキングセット202をスワップアウトすることは、開始仮想アドレスおよび長さのリスト(例えば、その開始仮想アドレスで開始するワーキングセットにおける順次メモリーページのカウント)など、メモリーページのリスト902を生成することによって実行される。リストは、最小アドレスから最大アドレスへ(それらのアドレスは、プロセスが実行するメモリー空間の仮想アドレスである)など、連続して順序付けられる。ワーキングセット202のメモリーページは、この同一の連続した順序で修正されたリスト206に追加される。さらに、ワーキングセット202のメモリーページは、この同一の連続した順序で圧縮され、示されるようなこの同一の連続した順序でプログラム108と関連付けられた圧縮記憶110に書き込まれる。よって、ワーキングセット202におけるメモリーページがワーキングセット202においては非連続的であってもよいが、それらは圧縮記憶110における連続した位置に書き込まれる。
[0084]圧縮記憶110の合計サイズがまた判定され、圧縮記憶110を記憶するために十分な空間がページファイル112において予約される。圧縮記憶110がページファイル112に書き込まれるとき、圧縮記憶110がページファイル112に連続して書き込まれる。連続した順序の、ページファイルの連続した部分へのページの書き込みは、後続の読み込み動作が、後続のスワップイン動作の間にページがワーキングセット202に再度読み込まれるとき、ページファイル112の大きな連続して順序付けられたブロックを読み込むことを可能にすることができる。
[0085]図10は、1つまたは複数の実施形態に従った、ワーキングセットをスワップアウトするための例示的なプロセス1000を示す。プロセス1000は、図1の圧縮記憶マネージャー104などの圧縮記憶マネージャーによって実行され、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせで実装されてもよい。プロセス1000は、行為の組として示され、様々な行為の動作を実行するために示される順序に限定されない。プロセス1000は、ワーキングセットをスワップアウトするための例示的なプロセスであり、ワーキングセットをスワップアウトすることの追加の記述が、異なる図面を参照して本明細書に含まれる。
[0086]プロセス1000では、1つまたは複数のページをプロセスのワーキングセットからページファイルへスワップアウトするための判定がなされる(行為1002)。この判定は、(例えば、メモリーマネージャー102または他のポリシーマネージャーによって)プロセスが非活動状態であり、または一時停止していること、プロセスと関連付けられた1つまたは複数のスレッドが特定の時間の間に活動状態でないこと、プロセスが特定の時間の間にバックグラウンドにいること、プロセスが特定の時間の間にある数のページを使用していなかったこと、およびコンピューティングシステムが全体として停止しており、または非活動状態であること、の判定などの様々な基準に基づいてなされてもよい。
[0087]1つまたは複数のページをスワップアウトするとの決定がなされると、1つまたは複数の候補ページがプロセスのワーキングセットから識別され、それらの候補メモリーページのリストが生成される(行為1004)。候補メモリーページのリストは、最小仮想アドレスから最大仮想アドレスへなど、連続して順序付けられる。1つまたは複数の実施形態では、メモリーマネージャー102は、ワーキングセットの各ページを分析し、ある基準に基づいて、各ページがスワップアウトするための候補であるかを判定する。1つまたは複数の実施形態では、スワップアウトするための候補は、ワーキングセット202におけるプライベートページおよび/またはページファイルの戻された共有ページを含んでもよい。候補ページはまた、それらのページがクリーンであるか(圧縮記憶110に書き込まれているが、物理メモリーにおけるページの現在のバージョンが圧縮記憶110におけるページと同一であるように、そのような書き込みから修正されていないページ)に基づいてなど、異なる方式で識別されてもよい。さらに、1つまたは複数の実施形態では、メモリーにおいてページがロックされているか否かは、ページがスワップアウトするための候補であるかを決定するときに考慮されてもよい。
[0088]行為1004で生成されたリスト上の候補メモリーページは、修正されたリスト206に追加される(行為1006)。候補メモリーページは、それらが行為1004で生成されたリスト上で現れるのと同一の連続した順序で修正されたリストに追加される。
[0089]修正されたリスト206における候補メモリーページは、圧縮され、プロセスである実行中プログラムと関連付けられた圧縮記憶110に書き込まれる(行為1008)。圧縮は、図5に関する先の記述と同様に、様々な方式のうちのいずれかで実行されてもよい。様々な他の動作(例えば、メモリーページのコンテンツを暗号化すること、誤り検出データを生成すること、など)はまた、任意選択で、図5に関する先の記述と同様に、メモリーページ上で実行されてもよい。圧縮されたメモリーページは、それらが行為1004で生成されたリスト上で現れるのと同一の、かつそれらが修正されたリスト206で現れる、この連続した順序で圧縮記憶110に書き込まれる。よって、ワーキングセット202におけるメモリーページがワーキングセット202において連続していなくてもよいが、それらは、圧縮記憶110において連続した位置に書き込まれる(例えば、図9に示されるように)。候補メモリーページが圧縮記憶110に書き込まれた後、候補メモリーページがワーキングセット202から除去される(例えば、空きリストに追加される)。
[0090]圧縮記憶110を記憶するために十分な空間がページファイル112において予約される(行為1010)。ページファイル112において空間を予約することは、ページファイル112の一部を、圧縮記憶110が書き込まれることは受け入れ可能であるが、他のデータが書き込まれることは受け入れ可能でないとして取っておき、またはマークすることを指す。ページファイル112における空間は、割り当てテーブル、またはページファイルの部分、およびそのような部分が予約されるか(および、予約される場合、それらが予約される圧縮記憶110)を識別する他のレコードを維持することによってなど、様々な異なる方式で予約されてもよい。予約することは、例えば、メモリーマネージャー102または圧縮記憶マネージャー104によって実行されてもよい。
[0091]後に、(例えば、メモリーマネージャー102または圧縮記憶マネージャー104によって)、ページファイル112におけるその予約された空間に圧縮されたスワップアウトされたページを含む圧縮記憶110を書き込むことの決定がなされる(行為1012)。1つまたは複数の実施形態では、この決定は、ある閾値時間(その閾値時間の間、スワップアウトする決定(行為1002)につながった基準がいまだに有効である)が経過したことの判定に基づいてなされてもよい。例えば、プロセスがいまだに非活動状態であり、または一時停止している特定の時間(例えば、5分)が経過してもよい。決定はまた、さらなる物理メモリーが1つまたは複数の他のプログラム108による使用のために必要とされるとのメモリーマネージャー102による判定に基づいてもよい。
[0092]圧縮記憶をスワップファイルに書き込むとの行為1012での決定に応答して、圧縮記憶メモリーページが、ページファイルにおける予約された空間に書き込まれる(行為1014)。1つまたは複数の実施形態では、圧縮記憶メモリーページの全てが除去され、1つまたは複数の書き込み動作においてページファイル112に書き込まれる。代わりに、圧縮記憶メモリーページの一部のみが除去されてもよく、ページファイル112に書き込まれてもよい。一部の実施形態では、書き込まれる候補ページは、メモリーに対する圧力に基づいて(例えば、メモリーマネージャーの、さらなる物理メモリーに対する必要性に基づいて)判定されてもよい。ページファイル112に書き込まれた後、圧縮記憶メモリーページは、圧縮記憶メモリーページの優先度レベル(または代わりに、より低いレベル)でスタンバイリスト上に置かれる。この点で、圧縮記憶メモリーページは、システム上で利用可能なメモリーとして扱われ、メモリーマネージャー102に要求されるいずれかのときに再利用されてもよい。
[0093]行為1012に戻り、一部の状況では、圧縮記憶を書き出さない決定がなされてもよい。そのような状況では、圧縮記憶に対する予約された空間が、スワップインが発生するまで保持される。1つまたは複数の実施形態では、ページをスワップアウトする初期決定(行為1002)につながった状況が、特定の閾値時間の後にもはや存在しない場合に、圧縮記憶を書き出さない決定がなされてもよい。例えば、プロセスは、再度活動状態になってもよく、もはや一時停止しなくてもよい。他の状況では、ページをスワップインする決定が、それらの候補ページがページファイルに書き込まれる前に発生してもよい。
[0094]図11は、1つまたは複数の実施形態に従った、ワーキングセットをスワップインするための例示的なプロセス1100を示す。プロセス1100は、図1の圧縮記憶マネージャー104などの圧縮記憶マネージャーによって実行され、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせで実装されてもよい。プロセス1100は、行為の組として示され、様々な行為の動作を実行するために示される順序に限定されない。プロセス1100は、ワーキングセットをスワップインするための例示的なプロセスであり、ワーキングセットをスワップインすることの追加の記述が、異なる図面を参照して本明細書に含まれる。
[0095]プロセス1100では、プロセスに対するワーキングセットから前にスワップアウトされた圧縮記憶をスワップインするための判定がなされる(行為1102)。1つまたは複数の実施形態では、この判定は、メモリーマネージャー102または他のポリシーマネージャーによってなされ、様々な基準に基づいてなされてもよい。そのような基準は、プロセスがもはや非活動状態ではないか、または一時停止していないことの表示を受信すること、および図10の行為1002でスワップアウトするための決定につながったそれらの状況の中断などを含んでもよい。
[0096]スワップアウトされた圧縮された圧縮記憶メモリーページが物理メモリーに残存しているかの判定がなされてもよい(行為1104)。一部の状況では、圧縮記憶メモリーページは、ページファイルに書き込まれていてもよいが、物理メモリーに残存している(例えば、ページがスタンバイリストにキャッシュされ、いまだに再利用されていない場合)。そのような状況では、物理メモリーに残存しているそれらの圧縮記憶メモリーページは、ページファイルから圧縮記憶メモリーページを読み込むのではなく、展開されてもよい。
[0097]スワップアウトされた圧縮記憶メモリーページが物理メモリーにない場合、メモリーページがページファイルから読み出される(行為1106)。圧縮記憶メモリーページを読み出すことは、圧縮記憶メモリーページをページファイルから読み込むこと、および圧縮記憶メモリーページをページングされたメモリー106の圧縮記憶110に記憶することを含む。1つまたは複数の実施形態では、圧縮記憶メモリーページのこの読み込みは、圧縮記憶メモリーページの大きなブロックをページファイルから読み込み、したがって、それは、より小さなブロックをページファイルにおける任意の位置から読み込むことよりも効率がよい。さらに、ページがページファイルにおいて予約された連続したブロックに書き込まれており、連続した仮想アドレスの順序で書き込まれていたので、複数のページのクラスタが、大きなブロックで、かつ連続した仮想アドレスの順序で読み込まれてもよく、さらなる効率的な読み込み動作を提供する。
[0098]圧縮記憶110の圧縮記憶メモリーページにおけるスワップアウトされたメモリーページは、展開され(行為1108)、メモリーマネージャーに返される(行為1110)。展開されたメモリーページをメモリーマネージャーに返すことは、展開されたメモリーページがプログラムのワーキングセットに含まれることを可能にする。展開は、図6に関する先の記述と同様に、様々な方式のうちのいずれかで実行されてもよい。図6に関する先の記述と同様に、様々な他の動作(例えば、メモリーページのコンテンツを暗号化すること、誤り検出データを検証することなど)がまた、任意選択で、メモリーページ上で実行されてもよい。展開され返された後、圧縮されたメモリーページは、圧縮記憶110の領域から削除される。圧縮記憶メモリーページのコンテンツが展開され返された後、圧縮記憶メモリーページは、再利用または解放されてもよい。
[0099]ページファイルにおける圧縮記憶に対する予約された空間がまた解放される(行為1112)。次いで、ページファイルにおける予約された空間は、他のデータを記憶するために利用可能である。
[00100]行為1104に戻り、スワップアウトされたメモリーページのいずれかが物理メモリーに残存している場合、それらのメモリーページが展開され(行為1108)、メモリーマネージャーに返される(行為1110)。それらのスワップアウトされた圧縮されたメモリーページを記憶する圧縮記憶メモリーページは、それらが物理メモリーに残存しているので、行為1106でページファイルから読み込まれる必要がない。
[00101]行為1106でのスワップアウトされた圧縮記憶メモリーページの読み出し、および行為1108でのメモリーページの展開は、並列して実行されてもよいことに留意されるべきである。1つまたは複数の実施形態では、ページファイルから読み出されたメモリーページは、他のスワップアウトされた圧縮記憶メモリーページがページファイルから読み込まれるのと同時に展開される。複数のスレッドが、メモリーページを展開し、圧縮記憶メモリーページをページファイルから読み出すために使用されてもよい。例えば、システム100における1つのプロセッサーコア上で実行している1つのスレッドは、圧縮記憶メモリーページのページファイルからの読み出しを管理することができ、システム100における残りのプロセッサーコア上で同時に、または並列して実行しているスレッドは、メモリーページの展開を管理することができる。
[00102]よって、圧縮記憶メモリーページをスワップインすることの性能は、本明細書で述べられる技術を使用して増大することができる。メモリーページが圧縮され、よって、圧縮なしの読み込みよりも少ないメモリーページが読み込まれる。さらに、展開は、メモリーページの読み込みと並列して実行されてもよく、複数の展開スレッドが同時に実行してもよく、展開されたメモリーページをメモリーマネージャーに返すことができる速度をさらに増大させる。
[00103]本明細書で述べられる技術はまた、様々な追加機能をサポートする。ページファイルを記憶する記憶装置への読み込みおよび書き込みの回数は、メモリーページが圧縮されていることによって減少させられる。記憶装置への読み込みおよび書き込みの回数を減少させることは、記憶装置に対する寿命を増大させるとともに、記憶装置の入力/出力によるボトルネックを減少させることができる。さらに、メモリーページの圧縮は、メモリーマネージャーによるプログラムへの割り当てに利用可能なメモリーページの数を増大させることができる。
[00104]さらに、スワップアウトされた圧縮記憶メモリーページは、展開されたバージョンのメモリーページよりも少ない数のページを占める。スワップアウトされた圧縮記憶メモリーページは、上記のように、ページファイル112に書き込まれ、かつスタンバイリストに追加されるが、それらの圧縮された性質によって、より多数の圧縮記憶がスタンバイリストに保持されることが可能となってもよい。これは、一時停止されたプログラムが再開される場合に、プログラムに対する圧縮記憶メモリーページが物理メモリーにあり、よって、ページファイルから読み出される場合よりも高速にスワップインすることができる可能性を増大させることができる。
[00105]加えて、圧縮されたメモリーページは、圧縮の前のそれらのメモリーページと類似の優先度レベルで圧縮記憶に記憶される。少なくとも類似の優先度レベルのメモリーページを維持することによって、低い優先度のメモリーページの前に、著しくより高い優先度メモリーページがページファイルに書き込まれる優先度逆転シナリオが回避される。
[00106]特定のモジュールを参照して特定の機能が本明細書で述べられるが、本明細書で述べられる個々のモジュールの機能は、複数のモジュールに分割されてもよく、および/または複数のモジュールの少なくとも一部の機能は、単一のモジュールに組み合わされてもよいことに留意されるべきである。加えて、アクションを実行するとして本明細書で述べられる特定のモジュールは、特定のモジュール自体がアクションを実行すること、または代わりに特定のモジュールがアクションを実行する(もしくは、その特定のモジュールとともにアクションを実行する)別のコンポーネント、もしくはモジュールを起動し、もしくはそうでなければアクセスすることを含む。よって、特定のモジュールがアクションを実行することは、特定のモジュール自体がアクションを実行すること、および/またはその特定のモジュールによって起動、もしくはそうでなければアクセスされる別のモジュールがアクションを実行することを含む。
[00107]図12は、本明細書で説明される様々な技術を実装することができる1つまたは複数のシステムおよび/またはデバイスを表す例示的なコンピューティングデバイス1202を含む、1200における全体的な例示的なシステムを示す。コンピューティングデバイス1202は、例えば、サービスプロバイダのサーバ、クライアントと関連付けられたデバイス(例えば、クライアントデバイス)、オンチップシステム、および/または任意の他の適切なコンピューティングデバイスもしくはコンピューティングシステムであってもよい。
[00108]示される例示的なコンピューティングデバイス1202は、相互に通信可能に結合された処理システム1204、1つまたは複数のコンピューター可読媒体1206、および1つまたは複数のI/Oインターフェース1208を含む。示されないが、コンピューティングデバイス1202はさらに、様々なコンポーネントを相互に結合するシステムバス、または他のデータおよびコマンド転送システムを含んでもよい。システムバスは、メモリーバスもしくはメモリーコントローラー、周辺バス、ユニバーサルシリアルバス、および/または様々なバスアーキテクチャーのうちのいずれかを利用するプロセッサーバスもしくはローカルバスなど、異なるバス構造のうちのいずれか1つまたは組み合わせを含むことができる。制御およびデータ線などの様々な他の例がまた考えられる。
[00109]処理システム1204は、ハードウェアを使用して1つまたは複数の動作を実行する機能を表す。したがって、処理システム1204は、プロセッサーおよび機能ブロックなどとして構成されてもよいハードウェア要素1210を含むとして示される。これは、特定用途向け集積回路または1つもしくは複数の半導体を使用して形成される他の論理デバイスとしてのハードウェアでの実装を含んでもよい。ハードウェア要素1210は、それらが形成される材料またはそれに採用される処理機構によっては限定されない。例えば、プロセッサーは、半導体および/またはトランジスタ(例えば、電子集積回路(IC))から構成されてもよい。そのようなコンテキストでは、プロセッサー実行可能命令は、電子的に実行可能な命令であってもよい。
[00110]コンピューター可読媒体1206は、メモリー/記憶1212を含むとして示される。メモリー/記憶1212は、1つまたは複数のコンピューター可読媒体と関連付けられたメモリー/記憶能力を表す。メモリー/記憶1212は、揮発性媒体(ランダムアクセスメモリー(RAM)など)ならびに/または不揮発性媒体(リードオンリメモリー(ROM)、フラッシュメモリー、光ディスク、および磁気ディスクなど)を含んでもよい。メモリー/記憶1212は、固定媒体(例えば、RAM、ROM、および固定ハードドライブなど)とともに、着脱可能媒体(例えば、フラッシュメモリー、着脱可能ハードドライブ、および光ディスクなど)を含んでもよい。コンピューター可読媒体1206は、以下でさらに説明されるように、様々な他の方法で構成されてもよい。
[00111]入力/出力インターフェース1208は、ユーザーがコマンドおよび情報をコンピューティングデバイス1202に入力することを可能にし、また様々な入力/出力デバイスを使用して、情報がユーザーおよび/または他のコンポーネントもしくはデバイスに提示されることを可能にする機能を表す。入力デバイスの例は、キーボード、カーソル制御デバイス(例えば、マウス)、マイクロフォン(例えば、音声入力用)、スキャナ、タッチ機能(例えば、物理的な接触を検出するように構成された容量性または他のセンサー)、およびカメラ(例えば、接触を含まない動きをジェスチャとして検出するための赤外線周波数などの可視または不可視波長を採用することができる)などを含む。出力デバイスの例は、ディスプレイデバイス(例えば、モニターまたはプロジェクター)、スピーカー、プリンター、ネットワークカード、および触覚応答デバイスなどを含む。よって、コンピューティングデバイス1202は、ユーザー対話をサポートするために以下でさらに説明されるような様々な方法で構成されてもよい。
[00112]コンピューティングデバイス1202はまた、記憶マネージャー1214を含む。記憶マネージャー1214は、上記のような様々な修正されたメモリー圧縮機能を提供する。記憶マネージャー1214は、例えば、図1の圧縮記憶マネージャー104を実装することができる。コンピューター可読媒体1206とは別個に示されているが、記憶マネージャー1214は代わりに、コンピューター可読媒体1206の一部として実装されてもよいことに留意されるべきである。
[00113]様々な技術が、ソフトウェア、ハードウェア要素、またはプログラムモジュールの一般的なコンテキストで、本明細書で説明されてもよい。概して、そのようなモジュールは、特定のタスクを実行し、または特定の抽象データタイプを実装するルーチン、プログラム、オブジェクト、要素、コンポーネント、およびデータ構造などを含む。本明細書で使用される用語「モジュール」、「機能」、および「コンポーネント」は概して、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせを表す。本明細書で説明される技術の特徴は、様々なプロセッサーを有する様々なコンピューティングプラットフォーム上で技術を実装することができることを意味する、プラットフォーム独立である。
[00114]説明されたモジュールおよび技術の実装は、いくつかの形式のコンピューター可読媒体にわたって記憶または送信される。コンピューター可読媒体は、コンピューティングデバイス1202によってアクセスされてもよい様々な媒体を含んでもよい。例として、かつ非限定的に、コンピューター可読媒体は、「コンピューター可読記憶媒体」および「コンピューター可読信号媒体」を含んでもよい。
[00115]「コンピューター可読記憶媒体」は、単なる信号送信、搬送波、または信号それ自体と異なり、情報の永続的な記憶および/または有形の記憶を可能にする媒体および/またはデバイスを指す。よって、コンピューター可読記憶媒体は、非信号保持媒体を指す。コンピューター可読記憶媒体は、揮発性および不揮発性、着脱可能および着脱不能媒体などのハードウェア、ならびに/またはコンピューター可読命令、データ構造、プログラムモジュール、論理要素/回路、もしくは他のデータなどの情報の記憶に適切な方法もしくは技術に実装された記憶装置を含む。コンピューター可読記憶媒体の例は、RAM、ROM、EEPROM、フラッシュメモリーもしくは他のメモリー技術、CD−ROM、デジタル多用途ディスク(DVD)もしくは他の光学式記憶装置、ハードディスク、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶デバイス、または他の記憶装置、有形媒体もしくは所望の情報を記憶するのに適切であり、かつコンピューターによってアクセスすることができる製品を含んでもよいが、それらに限定されない。
[00116]「コンピューター可読信号媒体」は、ネットワークを介してなど、命令をコンピューティングデバイス1202のハードウェアに送信するように構成された信号保持媒体を指す。信号媒体は主として、コンピューター可読命令、データ構造、プログラムモジュール、または他のデータを、搬送波、データ信号、または他の搬送機構など、変調されたデータ信号で具体化することができる。信号媒体はまた、任意の情報配信媒体を含む。用語「変調されたデータ信号」は、信号における情報をエンコードすることについての方式で設定または変更されたその特性のうちの1つまたは複数を有する信号を意味する。例として、かつ非限定的に、通信媒体は、有線ネットワークまたは直接有線接続などの有線媒体、ならびに音波、RF、赤外線、および他の無線媒体などの無線媒体を含む。
[00117]前に説明されたように、ハードウェア要素1210およびコンピューター可読媒体1206は、本明細書で説明される技術の少なくとも一部の態様を実装するために一部の実施形態に採用されてもよいハードウェアの形式で実装された命令、モジュール、プログラム可能デバイス論理、および/または固定デバイス論理を表す。ハードウェア要素は、集積回路のコンポーネントまたはオンチップシステム、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、複合プログラマブル論理回路(CPLD)、およびシリコンもしくは他のハードウェアデバイスでの他の実装を含んでもよい。このコンテキストでは、ハードウェア要素は、実行のために命令を記憶するために利用されるハードウェアデバイス、例えば、前に説明されたコンピューター可読記憶媒体とともに、ハードウェア要素によって具体化された命令、モジュール、および/または論理によって定義されたプログラムタスクを実行する処理デバイスとして動作してもよい。
[00118]上述したことの組み合わせはまた、本明細書で説明された様々な技術およびモジュールを実装するために採用されてもよい。したがって、ソフトウェア、ハードウェア、またはプログラムモジュール、および他のプログラムモジュールは、いくつかの形式のコンピューター可読記憶媒体上で、および/または1つもしくは複数のハードウェア要素1210によって具体化された1つもしくは複数の命令および/または論理として実装されてもよい。コンピューティングデバイス1202は、ソフトウェアおよび/またはハードウェアモジュールに対応する特定の命令および/または機能を実装するように構成されてもよい。したがって、ソフトウェアとしてコンピューティングデバイス1202により実行可能なモジュールとしてのモジュールの実装は、例えば、コンピューター可読記憶媒体および/または処理システムのハードウェア要素1210の使用を通じて、少なくとも部分的にハードウェアで達成されてもよい。命令および/または機能は、本明細書で説明された技術、モジュール、および例を実装するために1つまたは複数の製品(例えば、1つもしくは複数のコンピューティングデバイス1202および/または処理システム1204)によって実行可能/動作可能であってもよい。
[00119]図12でさらに示されるように、例示的なシステム1200は、パーソナルコンピューター(PC)、テレビデバイス、および/またはモバイルデバイス上でアプリケーションを実行するときにシームレスなユーザー体験のためのユビキタス環境を可能にする。サービスおよびアプリケーションは、アプリケーションを利用している間、ビデオゲームを行っている間、およびビデオを見ている間などに1つのデバイスから次へ遷移するとき、共通のユーザー体験のために、全ての3つの環境に置いて実質的に同様に実行する。
[00120]例示的なシステム1200では、複数のデバイスは、中央コンピューティングデバイスを通じて相互接続される。中央コンピューティングデバイスは、複数のデバイスに対してローカルであってもよく、または複数のデバイスからリモートに位置してもよい。1つまたは複数の実施形態では、中央コンピューティングデバイスは、ネットワーク、インターネット、または他のデータ通信リンクを通じて複数のデバイスに接続された1つまたは複数のサーバコンピューターのクラウドであってもよい。
[00121]1つまたは複数の実施形態では、この相互接続アーキテクチャーは、複数のデバイスにわたって配信されることになる機能が、共通かつシームレスな体験を複数のデバイスのユーザーに提供することを可能にする。複数のデバイスの各々は、異なる物理的要件および能力を有してもよく、中央コンピューティングデバイスは、デバイスに合わされ、全てのデバイスになお共通であるという両方であるデバイスへの体験の配信を可能にするためにプラットフォームを使用する。1つまたは複数の実施形態では、ターゲットデバイスのクラスが作成され、体験が包括クラスのデバイスに合わされる。デバイスのクラスは、デバイスの物理的特徴、使用タイプ、または他の共通の特性によって定義されてもよい。
[00122]様々な実装では、コンピューティングデバイス1202は、コンピューター1216、モバイル1218、およびテレビ1220を使用するためなど、様々な異なる構成を想定してもよい。それらの構成の各々は、概して異なる構造および能力を有することができるデバイスを含み、よって、コンピューティングデバイス1202は、異なるデバイスクラスのうちの1つまたは複数に従って構成されてもよい。例えば、コンピューティングデバイス1202は、パーソナルコンピューター、デスクトップコンピューター、マルチスクリーンコンピューター、ラップトップコンピューター、およびネットブックなどを含むデバイスのコンピューター1216のクラスとして実装されてもよい。
[00123]コンピューティングデバイス1202はまた、携帯電話、ポータブルミュージックプレイヤー、ポータブルゲームデバイス、タブレットコンピューター、およびマルチスクリーンコンピューターなどのモバイルデバイスを含むデバイスのモバイル1218のクラスとして実装されてもよい。コンピューティングデバイス1202はまた、カジュアル視覚環境で全体的により大きなスクリーンを有し、またはそれに接続されたデバイスを含むデバイスのテレビ1220のクラスとして実装されてもよい。それらのデバイスは、テレビ、セットトップボックス、およびゲームコンソールなどを含む。
[00124]本明細書で説明される技術は、コンピューティングデバイス1202のそれらの様々な構成によってサポートされてもよく、および本明細書で説明される技術の特定の例に限定されない。この機能はまた、以下で説明されるように、プラットフォーム1224を介して、「クラウド」1222上でなど、分散システムの使用を通じて全てまたは部分的に実装されてもよい。
[00125]クラウド1222は、リソース1226のためのプラットフォーム1224を含み、および/またはそれを表す。プラットフォーム1224は、ハードウェア(例えば、サーバ)の内在する機能およびクラウド1222のソフトウェアリソースを抽象する。リソース1226は、コンピューター処理がコンピューティングデバイス1202からリモートにあるサーバ上で実行される間に利用されてもよいアプリケーションおよび/またはデータを含んでもよい。リソース1226はまた、インターネット上で、および/またはセルラーもしくはWi−Fiネットワークなどの加入者ネットワークを通じて提供されるサービスを含むことができる。
[00126]プラットフォーム1224は、コンピューティングデバイス1202を他のコンピューティングデバイスと接続するリソースおよび機能を抽象してもよい。プラットフォーム1224はまた、リソースのスケーリングを抽象して、プラットフォーム1224を介して実装されるリソース1226に対する直面する需要に対する対応するレベルのスケーリングを提供する働きをしてもよい。したがって、相互接続されたデバイスの実施形態では、本明細書で説明される機能の実装は、システム1200全体を通じて分散されてもよい。例えば、機能は、クラウド1222の機能を抽象するプラットフォーム1224を介してとともに、コンピューティングデバイス1202上で部分的に実装されてもよい。
[00127]主題が構造的特徴および/または方法的作動に特有の言語で説明されてきたが、添付の特許請求の範囲で定義される主題が必ずしも上記説明された特有の特徴または作動に限定されないことが理解される。むしろ、上記説明された特有の特徴または作動は、特許請求の範囲を実装する例示的な形式として開示される。