(57)【特許請求の範囲】
【請求項１】
修正され、少なくとも類似の優先度レベルである１以上の優先度レベルを有するメモリーページの第１の組を識別するステップと、
圧縮記憶に割り当てられるメモリーページの第２の組を要求するステップであって、メモリーページの前記第２の組は、メモリーページの前記第１の組の前記１以上の優先度レベルに少なくとも類似の優先度レベルを有する、ステップと、
メモリーページの前記第１の組を、メモリーページの前記第２の組に圧縮するステップと、
メモリーページの前記第１の組が前記圧縮記憶に圧縮された後に、メモリーマネージャーが、メモリーページの前記第１の組を再利用することを許可するステップと、
メモリーページの前記第１の組をページファイルに書き出すのではなく、メモリーページの前記第２の組を前記ページファイルに書き出すステップと
を含む方法。
【請求項２】
請求項１に記載の方法であって、メモリーページの前記第２の組が前記ページファイルに書き込まれた後に、前記メモリーマネージャーがメモリーページの前記第２の組を再利用することを許可するステップをさらに含む方法。
【請求項３】
請求項１に記載の方法であって、メモリーページの前記第１の組は、プログラムのプロセスに割り当てられ、前記圧縮記憶は、前記プログラムの前記プロセスのみと関連付けられる、方法。
【請求項４】
請求項３に記載の方法であって、前記プロセスのメモリーページをスワップアウトすると判定することに応答して、
前記プロセスのワーキングセットにおいてメモリーページのリストを識別するステップと、
識別された前記メモリーページを圧縮するステップと、
圧縮され識別された前記メモリーページを、前記圧縮記憶に、識別された前記メモリーページの仮想メモリーアドレスによる連続した順序で書き込むステップと、
前記圧縮記憶のために前記ページファイルにおいて空間を予約するステップと、
前記圧縮記憶を前記ページファイルにおける予約された前記空間に書き出すステップと
をさらに含む方法。
【請求項５】
請求項４に記載の方法であって、前記圧縮記憶を書き出す前記ステップは、前記圧縮記憶を前記ページファイルにおける予約された前記空間に連続して書き出すステップを含む、方法。
【請求項６】
請求項４に記載の方法であって、前記プロセスのメモリーページをスワップアウトした後に、前記プロセスの前記メモリーページをスワップインすると判定することに応答して、
前記圧縮記憶を前記ページファイルから読み出すステップと、
読み出された前記圧縮記憶をメモリーページの第３の組に記憶するステップと、
メモリーページの前記第３の組において、圧縮された前記メモリーページを展開するステップと、
前記プロセスの前記ワーキングセットに含めるために展開された前記メモリーページを返すステップと
をさらに含む方法。
【請求項７】
請求項６に記載の方法であって、複数のスレッドを用いて、読み出す前記ステップ及び展開する前記ステップを同時に実行するステップをさらに含む方法。
【請求項８】
請求項６に記載の方法であって、展開された前記メモリーページが返された後に、メモリーページの前記第３の組を再利用することまたは開放することを許可するステップをさらに含む方法。
【請求項９】
請求項１に記載の方法であって、メモリーページの前記第１の組が圧縮された後に、メモリーページの前記第２の組が前記ページファイルに書き込まれているかまたは前記ページファイルに書き込まれた後に再利用されているかに関わらず、メモリーページの前記第１の組を返す際の進捗を保証するステップをさらに含む方法。
【請求項１０】
請求項１に記載の方法であって、メモリーページの前記第１の組およびメモリーページの前記第２の組の各メモリーページは、同じ優先度レベルを有する、方法。
【請求項１１】
メモリーと、
前記メモリーのページを管理するように構成されたメモリーマネージャーと、
圧縮記憶マネージャーであって、
修正され、少なくとも類似の優先度レベルである１以上の優先度レベルを有するメモリーページの第１の組を識別し、
プロセスと関連付けられた圧縮記憶に割り当てられるメモリーページの第２の組を要求し、メモリーページの前記第２の組は、メモリーページの前記第１の組の前記１以上の優先度レベルに少なくとも類似の優先度レベルを有し、
メモリーページの前記第１の組を、メモリーページの前記第２の組に圧縮し、
メモリーページの前記第１の組の各メモリーページについて、当該メモリーページが前記圧縮記憶に圧縮された後に、前記メモリーマネージャーが、当該メモリーページを再利用することを許可し、
メモリーページの前記第１の組をページファイルに書き出さない場合に、メモリーページの前記第２の組を前記ページファイルに書き出す
ように構成された前記圧縮記憶マネージャーと
を備えたコンピューティングデバイス。
【請求項１２】
請求項１１に記載のコンピューティングデバイスであって、前記圧縮記憶マネージャーは、メモリーページの前記第２の組の各メモリーページについて、当該メモリーページが前記ページファイルに書き込まれた後に、前記メモリーマネージャーが当該メモリーページを再利用することを許可するようにさらに構成された、コンピューティングデバイス。
【請求項１３】
請求項１１に記載のコンピューティングデバイスであって、前記圧縮記憶は、前記プロセスのみと関連付けられる、コンピューティングデバイス。
【請求項１４】
請求項１３に記載のコンピューティングデバイスであって、前記圧縮記憶マネージャーは、前記プロセスのメモリーページをスワップアウトすると判定することに応答して、
前記プロセスのワーキングセットにおいてメモリーページのリストを識別し、
識別された前記メモリーページを圧縮し、
圧縮され識別された前記メモリーページを、前記圧縮記憶に、識別された前記メモリーページの仮想メモリーアドレスによる連続した順序で書き込み、
前記圧縮記憶のために前記ページファイルにおいて空間を予約し、
前記圧縮記憶を前記ページファイルにおける予約された前記空間に書き出す
ようにさらに構成された、コンピューティングデバイス。
【請求項１５】
請求項１４に記載のコンピューティングデバイスであって、前記圧縮記憶マネージャーは、前記圧縮記憶を前記ページファイルにおける予約された前記空間に連続して書き出すことによって前記圧縮記憶を書き出すようにさらに構成された、コンピューティングデバイス。
【請求項１６】
請求項１４に記載のコンピューティングデバイスであって、前記圧縮記憶マネージャーは、前記プロセスのメモリーページをスワップアウトした後に、前記プロセスの前記メモリーページをスワップインすると判定することに応答して、
前記圧縮記憶を前記ページファイルから読み出し、
読み出された前記圧縮記憶をメモリーページの第３の組に記憶し、
メモリーページの前記第３の組において、圧縮された前記メモリーページを展開し、
前記プロセスの前記ワーキングセットに含めるために、展開された前記メモリーページを返す
ようにさらに構成された、コンピューティングデバイス。
【請求項１７】
請求項１６に記載のコンピューティングデバイスであって、前記圧縮記憶マネージャーは、前記コンピューティングデバイスの複数のプロセッサーコアで実行される複数のスレッドを用いて、前記圧縮記憶を読み出すことと圧縮された前記メモリーページを展開することとを同時に行うようにさらに構成された、コンピューティングデバイス。
【請求項１８】
請求項１６に記載のコンピューティングデバイスであって、前記圧縮記憶マネージャーは、展開された前記メモリーページが返された後に、メモリーページの前記第３の組を再利用することまたは開放することを許可するようにさらに構成された、コンピューティングデバイス。
【請求項１９】
請求項１１に記載のコンピューティングデバイスであって、メモリーページの前記第１の組の各メモリーページおよびメモリーページの前記第２の組の各メモリーページは、同じ優先度レベルを有する、コンピューティングデバイス。
【請求項２０】
修正され、少なくとも類似の優先度レベルである１以上の優先度レベルを有するメモリーページの第１の組を識別するステップと、
圧縮記憶に割り当てられるメモリーページの第２の組を要求するステップであって、メモリーページの前記第２の組は、メモリーページの前記第１の組の前記１以上の優先度レベルに少なくとも類似の優先度レベルを有する、ステップと、
メモリーページの前記第１の組を、メモリーページの前記第２の組に圧縮するステップと、
メモリーページの前記第１の組をページファイルに書き出すのではなく、メモリーページの前記第２の組を前記ページファイルに書き出すことを許可するステップと、
メモリーマネージャーから、メモリーページの前記第１の組のあるメモリーページに対する要求を受けるステップと、
要求された前記メモリーページを展開するステップと、
展開された前記メモリーページを前記メモリーマネージャーに返すステップと
を含む方法。
【発明の詳細な説明】
【背景技術】
【０００１】
[0001]コンピューター技術が進歩するにつれ、コンピュータープロセッサーの性能が増大してきた。しかしながら、そのようなコンピュータープロセッサーの性能はときに、コンピューターにおける他のボトルネックにより妨げられる。例えば、ハードディスクドライブからランダムアクセスメモリー（ＲＡＭ）へのデータ転送の速度がコンピューター性能におけるボトルネックである。コンピューターにおけるボトルネックの影響を減少させる１つの方法は、ＲＡＭにより多くのデータを記憶することである。
【発明の概要】
【発明が解決しようとする課題】
【０００２】
しかしながら、ＲＡＭのコストは、一般的にコンピューターで非常に多量のＲＡＭを使用するのに非常に高額のコストがかかるというように十分に高いままである。
【課題を解決するための手段】
【０００３】
[0002]この発明の概要は、発明の詳細な説明において以下でさらに説明される概念の選択を簡易な形式で導入するために提供される。この発明の概要は、特許請求される主題の重要な特徴または本質的な特徴を識別することを意図しておらず、特許請求される主題の範囲を限定するために使用されることも意図していない。
【０００４】
[0003]１つまたは複数の態様に従って、修正されたメモリーページの第１の組が識別される。メモリーページの第１の組は、メモリーページの第２の組から構成された圧縮記憶に圧縮される。メモリーページの第１の組が圧縮記憶に圧縮された後、メモリーマネージャーは、メモリーページの第１の組を再利用することが許可される。加えて、メモリーページの第１の組をページファイルに書き出すのではなく、メモリーページの第２の組がページファイルに書き出される。
【０００５】
[0004]１つまたは複数の態様に従って、コンピューティングデバイスは、メモリーと、メモリーのページを管理するように構成されたメモリーマネージャーと、圧縮記憶マネージャーと、を含む。圧縮記憶マネージャーは、プロセスと関連付けられた圧縮記憶に、プロセスによって修正されたメモリーページの第１の組を圧縮するように構成され、圧縮記憶は、メモリーページの第２の組から構成される。圧縮記憶マネージャーは、メモリーページの第１の組の各メモリーページに対し、メモリーマネージャーが、メモリーページが圧縮記憶に圧縮された後にメモリーページを再利用し、メモリーページの第１の組をページファイルに書き出さないで、メモリーページの第２の組をページファイルに書き出すことを許可する。
【０００６】
[0005]図面を通じて同等の特徴を参照するために同一の符号が使用される。
【図面の簡単な説明】
【０００７】
【図１】[0006]１つまたは複数の実施形態に従った、修正されたメモリー圧縮を採用する例示的なシステムを示す図である。
【図２】[0007]１つまたは複数の実施形態に従った、メモリーページの例示的なライフサイクルを示す図である。
【図３】[0008]１つまたは複数の実施形態に従った、ページングされたメモリーの例示的なレコードを示す図である。
【図４】[0009]１つまたは複数の実施形態に従った、メモリーページを圧縮する例を示す図である。
【図５】[0010]１つまたは複数の実施形態に従った、メモリーページを圧縮する例示的なプロセスを示すフローチャートである。
【図６】[0011]１つまたは複数の実施形態に従った、圧縮されたメモリーページを読み出すための例示的なプロセスを示すフローチャートである。
【図７】[0012]１つまたは複数の実施形態に従った、例示的なメモリーページマップを示す図である。
【図８】[0013]１つまたは複数の実施形態に従った、例示的な領域マップを示す図である。
【図９】[0014]１つまたは複数の実施形態に従った、ワーキングセットをスワップアウトする例を示す図である。
【図１０】[0015]１つまたは複数の実施形態に従った、ワーキングセットをスワップアウトするための例示的なプロセスを示すフローチャートである。
【図１１】[0016]１つまたは複数の実施形態に従った、ワーキングセットをスワップインするための例示的なプロセスを示すフローチャートである。
【図１２】[0017]本明細書で説明される様々な技術を実装することができる１つまたは複数のシステムおよび／もしくはデバイスを表す例示的なコンピューティングデバイスを含む例示的なシステムを示す図である。
【発明を実施するための形態】
【０００８】
[0018]修正されたメモリー圧縮が本明細書で述べられる。システムにおけるメモリーは、メモリーページ（または単純にページ）と称される複数のブロックまたは部分から構成される。修正されたワーキングセットにおけるメモリーページの少なくとも一部など、プログラムのワーキングセットからのメモリーページの組は、ページファイルに書き込まれる前に圧縮記憶に圧縮される。メモリーページは、圧縮記憶がページファイルに書き込まれていたかに関わらず、圧縮記憶に圧縮された後にメモリーマネージャーによって再利用されてもよい。圧縮記憶はそれ自体、複数のメモリーページから構成され、圧縮記憶メモリーページは、ページファイルに書き込まれた後にメモリーマネージャーによって再利用することができる。圧縮記憶に圧縮されたメモリーページに対するメモリーマネージャーからの後続の要求は、圧縮記憶メモリーページにアクセスし（ページファイルに書き込まれる場合、ページファイルから圧縮記憶メモリーページを読み出すことを含む）、要求されたメモリーページを展開し、要求されたメモリーページをメモリーマネージャーに返すことによって満たされる。
【０００９】
[0019]加えて、プログラムが一時停止するときなどのある状況では、メモリーページのワーキングセットがスワップアウトされる。メモリーページのワーキングセットをスワップアウトすることは、プログラムのプロセスのワーキングセットにおいてメモリーページのリストを識別すること、識別されたメモリーページを圧縮すること、および圧縮された識別されたメモリーページを圧縮記憶に、識別されたメモリーページの仮想メモリーアドレスによる連続した順序で書き込むことを含む。圧縮記憶のためにページファイルにおいて空間が予約され、ページファイルにおいて予約された空間に圧縮記憶が書き出される。
【００１０】
[0020]プログラムが再開されることになる後続の判定に応答して、プログラムに対するメモリーページのワーキングセットがスワップインされる。メモリーページのワーキングセットをスワップインすることは、ページファイルから圧縮記憶を読み出すこと、および圧縮記憶を圧縮記憶メモリーページの組に記憶することを含む。圧縮記憶メモリーページが展開され、プログラムのワーキングセットに含めるためにメモリーマネージャーに返される。
【００１１】
[0021]図１は、１つまたは複数の実施形態に従った、修正されたメモリー圧縮を採用する例示的なシステム１００を示す。システム１００は、メモリーマネージャー１０２、圧縮記憶マネージャー１０４、およびページングされたメモリー１０６を含む。概して、メモリーマネージャー１０２は、ページングされたメモリー１０６におけるデータの記憶を管理する。メモリーマネージャー１０２は、ページングされたメモリー１０６の部分をシステム１００における様々なプログラム１０８に割り当てる。プログラム１０８は、実行しているとき、本明細書ではプロセス（実行プログラム１０８のインスタンスである）とも称され、よって、プログラム１０８に割り当てられたページングされたメモリー１０６の部分は、プログラム１０８のプロセスに割り当てられたものとしても参照される。プロセスに割り当てられたページは、そのプロセスによって所有または占有され、そのプロセスによって使用され、他のプロセスによっては使用されない（よって、プライベートページとも称される）。プログラム１０８は、アプリケーション、オペレーティングシステムプログラム、または他のコンポーネントもしくはモジュールとすることができる。メモリーマネージャー１０２は、ページングされたメモリー１０６からデータを読み出し、ページングされたメモリー１０６にデータを書き込む要求を、それらのプログラム１０８から受信する。ページングされたメモリー１０６は、例えば、揮発性メモリー（例えば、ＲＡＭ）または不揮発性メモリー（例えば、フラッシュメモリー）など、任意のタイプのＣＰＵ（中央処理装置）アドレス指定可能メモリーとすることができる。
【００１２】
[0022]メモリーマネージャー１０２はまた、ページングされたメモリー１０６の１つまたは複数の部分を圧縮記憶マネージャー１０４に割り当てる。別個に示されているが、圧縮記憶マネージャー１０４は、メモリーページを割り当てることを目的に、プログラム１０８として扱われる。圧縮記憶マネージャー１０４は、圧縮された形式でのデータの記憶のために１つまたは複数の圧縮記憶１１０、例えば、プログラム１０８ごとに１つの圧縮記憶１１０を生成する。システム１００はまた、メモリーページを記憶することができる記憶装置上のファイルである、ページファイル１１２を含む。ページファイル１１２が記憶される記憶装置は、システム１００における２次的記憶装置であり、１つまたは複数の実施形態では、ページングされたメモリー１０６よりも読み込み／書き込み時間が遅いが、より大きな記憶容量を有する。ページファイル１１２が記憶される記憶装置は、例えば、フラッシュメモリー（例えば、ソリッドステートディスク（ＳＳＤ））または磁気ディスクとすることができる。図１では単一のページファイル１１２が示されるが、複数のページファイルがシステム１００に含まれてもよいことに留意されるべきである。
【００１３】
[0023]メモリーマネージャー１０２は、ページングを使用してページングされたメモリー１０６を管理する。メモリーマネージャー１０２は、メモリー１０６（例えば、ＲＡＭ）を、特定の（例えば、固定された）サイズの単位のデータであるページに編成する。ページングの行為は、データがメモリー１０６にないとき、システム１００におけるページファイル１１２であるバッキングファイルから、ページの単位でデータを読み込むことを指す。ページングの行為はまた、ダーティー（修正された）データをページファイル１１２にページの単位で書き戻すことを指す。よって、メモリーページは、メモリーページに戻されたページファイルとも称される。そのようなページング技術は、当業者にとって公知である。
【００１４】
[0024]メモリーマネージャー１０２は、メモリーマネージャー１０２の機能を実行するように動作するメモリーコントローラー１１４、およびページングされたメモリー１０６のメモリーページに関する様々な情報のレコードであるページテーブル１１６を含む。ページテーブル１１６は、メモリーページがいかなるときにもどこに記憶されているかを示す情報を含む。以下でより詳細に述べられるように、メモリーページは主として、物理メモリー（ページングされたメモリー１０６）または圧縮記憶１１０（それ自体が物理メモリーもしくはページファイル１１２に記憶されてもよい）に記憶されるが、一部の状況では、圧縮されていないメモリーページがページファイル１１２に記憶されてもよい。物理メモリーに記憶されたメモリーページに対し、メモリーマネージャー１０２はメモリーページに直接アクセスする。圧縮記憶１１０に記憶されたメモリーページに対し、メモリーマネージャー１０２は、必要に応じてメモリーページを読み出し、展開し、また展開されたメモリーページをメモリーマネージャー１０２に返す圧縮記憶マネージャー１０４からのメモリーページを要求する。圧縮されていないメモリーページがページファイル１１２に記憶される場合は、メモリーマネージャーは、メモリーページをページファイル１１２から読み出す。
【００１５】
[0025]ページングされたメモリー１０６は、いかなるときにも複数の異なるタイプのページのうちの１つとして各々が分類されてもよい複数のページを含み、この分類は、時間とともに変化することができる。１つのタイプのメモリーページは、プログラム１０８に割り当てられ、現在プログラム１０８によって使用されているメモリーページであり、このタイプのメモリーページは、プログラム１０８のプロセスのワーキングセット（プログラム１０８のワーキングセットとも称される）におけるワーキングセットページ（または代わりに、割り当てられたページ）と称される。現在使用されているメモリーページは、閾値時間内で（例えば、前の２０秒）プログラム１０８によってアクセスされ、または、そうではなく、メモリーページがメモリーマネージャー１０２によって再利用されないことになる方式で、プログラム１０８によってアクセスされるメモリーページを指す。メモリーページを再利用することは、同一もしくは異なるプログラムのために、またはシステムにおける他の使用のために異なるデータを記憶することなど、別のことのためにメモリーマネージャー１０２によって再使用されているメモリーページを指す。
【００１６】
[0026]別のタイプのメモリーページは、プログラム１０８に割り当てられ、プログラム１０８によって現在使用されていないメモリーページであり、このタイプのメモリーページは、スタンバイページ（または代わりに、再割り当て可能ページ）と称される。現在使用されていないメモリーページは、そのコンテンツが修正されておらず（もしくは、最後の修正からページファイル１１２もしくは圧縮記憶１１０に書き込まれており）、閾値時間（例えば、前の２０秒）内でプログラム１０８によってアクセスされていないページであるか、または、そうではなく、メモリーページがメモリーマネージャー１０２によって再利用されてもよい方式で、プログラム１０８によってアクセスされているページを指す。メモリーページは、例えば、異なるタイプのページ（例えば、機能している）となるように割り当てられる、異なるプログラムに割り当てられるなどによって再利用されてもよい。
【００１７】
[0027]別のタイプのメモリーページは、そのコンテンツが修正されたが、ページファイル１１２にまだ複製されていないメモリーページであり、このタイプのメモリーページは、修正されたページ（または代わりに、ダーティーページ）と称される。修正されたメモリーページは、メモリーマネージャー１０２によっては再利用されないことになる。しかしながら、以下でより詳細に述べられるように、修正されたメモリーページを圧縮記憶１１０に圧縮し記憶した後、メモリーページの分類が変更されてもよい（例えば、スタンバイページまたは空きページに）。
【００１８】
[0028]別のタイプのメモリーページは、プログラム１０８に現在割り当てられておらず、メモリーマネージャー１０２がそれと何か（再利用されることを含む）を行うことができるメモリーページである。このタイプのメモリーページは、空きページ（または代わりに、割り当て解除されたページ）と称される。
【００１９】
[0029]メモリーマネージャー１０２は、ページングされたメモリー１０６のメモリーページがプログラム１０８にいつ割り当てられるか、どのメモリーページがどのプログラム１０８に割り当てられるか、プログラム１０８に前に割り当てられたどのメモリーページが再利用されることになるか、などを判定する様々なルールまたは基準を使用する。メモリーマネージャー１０２はまた、メモリーページのタイプに対する分類を判定し、必要に応じてメモリーページの分類を変更する。１つまたは複数の実施形態では、メモリーマネージャー１０２は、ページングされたメモリー１０６のどのメモリーページがどのタイプのページとして分類されるかのリストまたは他のレコードを維持する。例えば、メモリーマネージャー１０２は、ワーキングセットページのリストまたは他のレコード、スタンバイページのリストまたは他のレコード、修正されたページのリストまたはレコード、および空きページのリストまたはレコードなどを維持することができる。
【００２０】
[0030]システム１００は、１つまたは複数のデバイスを表す。１つまたは複数の実施形態では、システム１００において示されるコンポーネント１０２〜１０８は、同一のコンピューティングデバイスの一部として含まれる。代わりに、コンポーネントは、２つ以上のデバイスにわたって分散されてもよい。
【００２１】
[0031]図２は、１つまたは複数の実施形態に従った、メモリーページの例示的なライフサイクル２００を示す。メモリーページは、プログラムに割り当てられてもよく、プログラムのワーキングセット２０２に含まれてもよい。プログラムのワーキングセット２０２は、プログラムのワーキングセットページを含む。メモリーマネージャー１０２は、様々なときに、他のプログラムに利用可能なメモリーページを作成するためなどの様々な理由で、プログラムのワーキングセット２０２においてメモリーページをトリムする（減少させるとも称される）ことができる。ワーキングセット２０２に書き込まれ（修正され）ワーキングセット２０２からトリムされたメモリーページは、メモリーページの修正されたリスト２０６に移動される（２０４）。
【００２２】
[0032]圧縮記憶マネージャー１０４は、修正されたリスト２０６においてメモリーページを圧縮し、圧縮されたメモリーページを圧縮記憶１１０のメモリーページに追加する（２０８）。圧縮記憶マネージャー１０４は、規則的なもしくは非規則的な間隔でメモリーページを圧縮する、修正されたリストに含まれているメモリーページの少なくとも閾値数に応答してメモリーページを圧縮する、メモリーマネージャー１０２からの要求に応答してメモリーページを圧縮する、以下でより詳細に述べられるように、プロセスのメモリーページがスワップアウトされることになるとの判定に応答してメモリーページを圧縮するなど、異なる方式で、修正されたリストにおいてメモリーページをいつ圧縮するかのタイミングを判定することができる。圧縮記憶１１０に圧縮および追加された後、修正されたリスト２０６におけるメモリーページは、スタンバイリストに移動される（２１０）。スタンバイリスト２１２は、スタンバイページのリストであるが、代わりに、メモリーページが空きページのリストに移動されてもよい。
【００２３】
[0033]圧縮記憶１１０はそれ自体、複数のメモリーページから構成され、本明細書では圧縮記憶メモリーページとも称され、それらの圧縮記憶メモリーページは、圧縮記憶１１０またはメモリーマネージャー１０２によって要求されるように修正されたリスト２０６に移動されてもよい（２１４）。しかしながら、圧縮記憶メモリーページは、要求されたような長期間（潜在的に無期限に）に修正されたリストに移動される必要はない。圧縮記憶メモリーページは、圧縮記憶ワーキングセットに残存することができる。
【００２４】
[0034]修正されたリスト２０６に移動された圧縮記憶メモリーページに対し、メモリーマネージャー１０２（または代わりに、圧縮記憶マネージャー１０４）は、圧縮記憶メモリーページをページファイル１１２に書き出す（２１６）。よって、圧縮記憶メモリーページに圧縮され記憶された後、ワーキングセット２０２からのメモリーページは、ページファイル１１２に書き込まれてもよい。圧縮記憶マネージャー１０４が修正されたリスト２０６上で圧縮記憶メモリーページを圧縮することを試みないことに留意されるべきである。圧縮記憶マネージャー１０４は、圧縮記憶メモリーページのレコードなどを維持することによって、メモリーページが割り当てられるプロセスに基づいてなど（例えば、圧縮記憶マネージャー１０４などのシステムプロセスに割り当てられる場合、メモリーページを圧縮することの試みがなされない）、異なる方式でそれが圧縮することを試みないメモリーページを識別することができる。
【００２５】
[0035]修正されたリスト２０６に移動されるワーキングセット２０２からのメモリーページを圧縮することができず、もしくはそうでなければ、予測される時間に（例えば、閾値時間内で）圧縮記憶１１０のメモリーページに追加することができず、またはシステム１００は、様々なポリシーの理由で全くメモリーページを圧縮しないことを選択する状況が発生することがある。そのような状況は、システム１００における多量なメモリー使用、システム１００における多量なプロセッサー使用、およびシステム１００に適用される様々なポリシーによってなど、時々発生することがある。そのような状況では、メモリーマネージャー１０２は、圧縮されていないメモリーページをページファイル１１２に書き出す（２１８）。よって、そのようなメモリーページは、圧縮記憶１１０のメモリーページに含まれないが、メモリーマネージャー１０２は、そのようなメモリーページが圧縮記憶マネージャー１０４ではなくページファイル１１２から利用可能となるレコード（例えば、ページテーブル１１６における）を維持する。
【００２６】
[0036]図１に戻ると、ページングされたメモリー１０６のページの各々は、対応する優先度レベルを有する。特定のタイプのメモリーページ（例えば、修正されたページ）のみが優先度レベルを有してもよく、または代わりに、全てのタイプのメモリーページが優先度レベルを有してもよい。メモリーマネージャー１０２は、メモリーページごとに優先度レベルを設定し、種々の異なる方式でメモリーページに対する優先度レベルを判定することができる。１つまたは複数の実施形態では、メモリーページに対する優先度レベルは、メモリーページの割り当てを要求したプロセスまたはスレッドにオペレーティングシステムによって割り当てられた優先度レベルである。他の基準がまた、プログラム１０８からの要求、および特定のタイプの読み出し（例えば、ページの推測的な読み出し）と関連付けられているメモリーページなどのメモリーページに対する優先度レベルを判定するために使用されてもよい。メモリーマネージャー１０２はまた、時間とともにメモリーページの優先度レベルを変更することができる（例えば、閾値時間の間にプログラム１０８によってアクセスされないメモリーページの優先度レベルを下げること、ページファイル１１２に書き込まれ、スタンバイリスト２１２に移動された圧縮記憶メモリーページの優先度レベルを下げること、など）。
【００２７】
[0037]優先度レベルは、システム１００において様々な方式で使用されてもよい。１つまたは複数の実施形態では、メモリーページはそれらの優先度レベルに基づいてページファイル１１２に書き込まれる。より低い優先度のページファイル１１２に書き込まれることになるメモリーページは、より高い優先度のメモリーページの前にページファイルに書き込まれる。これは、より高い優先度のメモリーページがより低い優先度のメモリーページよりも長く物理メモリーに残存することを可能にし、より高い優先度のメモリーページがより低い優先度のメモリーページ（物理メモリーに残存する）の前にページファイルに書き込まれる（かつ、物理メモリーには残存しない）優先度逆転シナリオを回避する。同様に、１つまたは複数の実施形態では、それらの優先度レベルに基づいてスタンバイリストからメモリーページが再利用される。より低い優先度のスタンバイリスト上のメモリーページは、より高い優先度のメモリーページの前に再利用される。これは、より高い優先度のメモリーページがより低い優先度のメモリーページよりも長くスタンバイリスト上に残存することを可能にする。
【００２８】
[0038]図３は、１つまたは複数の実施形態に従った、ページングされたメモリーの例示的なレコード３００を示す。複数の（Ｘ個の）優先度レベル３０２の組が示され、優先度レベル３０２の組は、ページに対応することができる優先度レベルを含む。ページングされたメモリーのレコード３００は、例えば、図１のページングされたメモリー１０６の修正されたページのレコードである。より大きい番号を有する優先度レベルは、より小さい番号を有する優先度レベルより高い優先度であることができる（例えば、優先度レベル４は、優先度レベル１より高い優先度であることができる）、または逆もそうである。文字または他の符号など、代わりに、番号以外のラベルが優先度レベルを識別するために使用されてもよい。
【００２９】
[0039]優先度レベル３０２ごとに、レコード３００は、その優先度レベルを有するゼロ以上のメモリーページの組を識別する。例えば、ページ３０４は優先度レベル１に対応し、ページ３０６は優先度レベル３に対応する、などである。レコード３００は、異なる優先度レベルに対応するメモリーページに対する異なる記憶領域（例えば、異なるキャッシュ）などを使用して、特定の優先度レベルに対応するメモリーページを識別するリストまたは他のデータ構造など、任意の様々な異なる方式で維持されてもよい。
【００３０】
[0040]図１に戻り、圧縮記憶１１０は、メモリーマネージャー１０２によって圧縮記憶マネージャー１０４に割り当てられた１つまたは複数のメモリーページとして実装される。それらのメモリーページは、様々な機能を提供する、圧縮記憶マネージャー１０４のユーザーモード仮想アドレス空間におけるメモリーページである。圧縮記憶１１０を実装するメモリーページは、カーネル仮想アドレス空間を消費せず、特権を有しないユーザーモードプログラムがメモリーページ上でデータにアクセスすることができないので、データが公開されることを防止するセキュリティを提供する。さらに、圧縮記憶マネージャー１０４のユーザーモード仮想アドレス空間においてメモリーページを使用することによって、メモリーマネージャー１０２および圧縮記憶マネージャー１０４は、既存のメモリーマネージャーアプリケーションプログラミングインターフェース（ＡＰＩ）を使用するメモリーページ上での制御を有し、圧縮記憶マネージャー１０４が、それが要求するようにそのバッキングデータのページング能力、およびスワッピング能力などを制御することを可能にする。
【００３１】
[0041]１つまたは複数の実施形態では、圧縮記憶マネージャー１０４は、ページングされたメモリー１０６のページを圧縮し、圧縮されたページを圧縮記憶１１０の領域に記憶し、メモリーページを圧縮記憶１１０に、または圧縮記憶１１０の領域に圧縮することとも称される。圧縮記憶マネージャー１０４は、各プログラム１０８に対して（かつ関連付けられた）別個の圧縮記憶１１０を生成し、ならびに特定のプログラム１０８からの修正されたリスト２０６からの圧縮されたメモリーページを、特定のプログラムと関連付けられた圧縮記憶１１０の領域に追加する。代わりに、圧縮記憶マネージャー１０４は、プログラム１０８ごとに対して１つの圧縮記憶１１０以外の異なる粒度で圧縮記憶１１０を生成し維持することができる（例えば、圧縮された記憶マネージャー１０４は、任意の組のプログラム１０８に対して、またはシステムにおけるページング可能メモリーの全てに対して圧縮記憶１１０を生成し維持することができる）。
【００３２】
[0042]圧縮記憶１１０の各領域は、メモリーマネージャー１０２によって圧縮記憶マネージャー１０４に割り当てられたページングされたメモリー１０６の複数のメモリーページから構成される。例えば、領域は、１２８キロバイトであってもよく、メモリーページは各々、４キロバイトであってもよいが、それらの値は例であり、他の領域および／またはページサイズが代わりに使用されてもよい。特定の領域に圧縮されているページングされたメモリー１０６のページは、少なくとも類似の優先度レベルを有し、ページングされたメモリー１０６の領域を構成するメモリーページは、その領域に圧縮されたメモリーページと少なくとも類似の優先度レベルを有する。少なくとも類似の優先度レベルを有するメモリーページは、同一または類似の優先度レベルを有するメモリーページを指す。
【００３３】
[0043]圧縮記憶マネージャー１０４または圧縮記憶１１０によって実行されるとして、本明細書で述べられる動作は、圧縮記憶マネージャー１０４および圧縮記憶１１０のうちの１つまたは両方によって実行されてよく、圧縮記憶マネージャー１０４によって実行されるとして、本明細書で述べられる動作は代わりに、圧縮記憶１１０によって実行されてもよく、圧縮記憶１１０によって実行されるとして、本明細書で述べられる動作は代わりに、圧縮記憶マネージャー１０４によって実行されてもよい。１つまたは複数の実施形態では、圧縮記憶マネージャー１０４は、各圧縮記憶１１０を管理すること、読み込みおよび書き込み要求を適切な圧縮記憶１１０にルーティングすること、ならびに圧縮記憶１１０に対するメモリーを管理すること（例えば、メモリーページが圧縮記憶１１０に割り当てられるように要求すること）などに関与する。そのような状況では、各圧縮記憶１１０は単純に、メモリーページの組であってもよい。代わりに、圧縮記憶１１０に対してメモリーを管理するための制御および論理（例えば、ページングされたメモリー１０６のページの組がメモリーマネージャー１０２によって圧縮記憶１１０に割り当てられるように要求すること）のうちの少なくとも一部は、圧縮記憶１１０自体によって実装されてもよい。そのような状況では、圧縮記憶１１０は、圧縮記憶１１０に対するメモリーを管理するための制御および論理を実装するために圧縮記憶モジュールとともに１つまたは複数のメモリーページを含む。
【００３４】
[0044]１つまたは複数の実施形態では、圧縮記憶１１０の特定の領域に圧縮されているページングされたメモリー１０６のページは、同一の優先度レベルを有し、異なる優先度レベルに対して異なる領域が使用される。圧縮記憶１１０の領域を構成するメモリーページは、その領域に圧縮されたメモリーページと同一の優先度レベルを有する。例えば、圧縮記憶マネージャー１０４は、図３のページ３０４を、圧縮記憶マネージャー１０４に割り当てられ、優先度レベル１を有するメモリーページから構成される１つの領域に圧縮することができる。別の例として、圧縮記憶マネージャー１０４は、図３のページ３０６を、圧縮記憶マネージャー１０４に割り当てられ、優先度レベル３を有するメモリーページから構成される別の領域に圧縮することができる。優先度レベルごとに対して、圧縮記憶マネージャー１０４は、その優先度レベルに対応するメモリーページから構成されるゼロ以上の領域を作成することができる。
【００３５】
[0045]代わりに、圧縮記憶１１０の特定の領域に圧縮されているページングされたメモリー１０６のページは、類似であるが必ずしも同一ではない優先度レベルを有してもよい。どの優先度レベルが類似であるかは、優先度レベルが相互のレベルの閾値数（例えば、１または２）内であるかなど、異なる方式で判定されてもよい。例えば、優先度レベル１および優先度レベル２は類似であってもよく、よって、優先度レベル１のページおよび優先度レベル２のページは、同一の領域に圧縮されてもよいが、優先度レベル１および優先度レベル５は、類似であってはならず、よって、優先度レベル１のページおよび優先度レベル５のページは、同一の領域に圧縮されない。
【００３６】
[0046]同様に、ページングされたメモリー１０６の領域を構成するメモリーページは、その領域に圧縮されたメモリーページと類似ではあるが必ずしも同一ではない優先度レベルを有してもよい。例えば、圧縮記憶１１０の領域を構成するメモリーページは、優先度レベル３を有してもよく、その領域に圧縮されたメモリーページは、優先度レベル２または優先度レベル３を有してもよい。さらに、領域は、同一または類似の優先度レベルのメモリーページから構成されてもよい。例えば、領域は、優先度レベル２を有する一部のメモリーページおよび優先度レベル３を有する一部のメモリーページから構成されてもよい。
【００３７】
[0047]領域を作成するために、圧縮記憶マネージャー１０４は、ページングされたメモリー１０６のページの組がメモリーマネージャー１０２によってマネージャー１０４に割り当てられるように要求する。割り当てられたページの組は、ワーキングセットページとして分類され、圧縮記憶マネージャー１０４は、割り当てられたページの組を特定の圧縮記憶１１０と関連付ける。圧縮記憶マネージャー１０４は、修正されたリスト２０６上のメモリーページを圧縮し、それらの圧縮されたページを、圧縮記憶マネージャー１０４に割り当てられたページの組に記憶する。
【００３８】
[0048]よって、例えば、特定のページの組は、少なくとも類似の優先度レベルに対応する追加のページの組に圧縮される。その特定のページの組が圧縮された後、追加のページの組はまた、修正されたページとして分類される。よって、圧縮記憶マネージャー１０４は、その特定のページの組を同一のタイプ（修正された）の、少なくとも類似の優先度レベルに対応する異なるページの組に圧縮する。しかしながら、圧縮記憶マネージャー１０４はその特定のページの組を圧縮するので、その特定のページの組におけるページの量は主として、圧縮されたページの組におけるページの量よりも大きい。次いで、圧縮されたページの組は、ページファイル１１２に書き込まれてもよい。圧縮されたページの組がページファイル１１２にいつ書き込まれるか（または書き込まれるか否か）を判定するために、様々な異なるポリシーが適用されてもよい。
【００３９】
[0049]図４は、１つまたは複数の実施形態に従った、メモリーページを圧縮する例を示す。４０２に示されるように、ページングされたメモリー１０６は、同一の優先度レベル（例えば、上記のように優先度レベル３）を有する５つのメモリーページ３０６を含む。圧縮記憶マネージャー１０４は、メモリーページ３０６と少なくとも類似の優先度レベルを有する２つのメモリーページ４０４を含む圧縮記憶の領域が割り当てられる。４０６に示されるように、圧縮記憶マネージャー１０４は、メモリーページ３０６をメモリーページ４０４に圧縮する。圧縮の後、メモリーマネージャー１０２は、圧縮されたバージョンのメモリーページ３０６がメモリーページ４０４としてページングされたメモリー１０６に記憶されるので、メモリーページ３０６を再利用することができる。よって、圧縮の後、ページングされたメモリー１０６は、メモリーページ４０４を記憶するが、メモリーページ３０６を記憶する必要はない。
【００４０】
[0050]図５は、１つまたは複数の実施形態に従った、メモリーページを圧縮する例示的なプロセス５００を示すフローチャートである。プロセス５００は、図１の圧縮記憶マネージャー１０４などの圧縮記憶マネージャーによって実行され、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせで実装されてもよい。プロセス５００は、行為の組として示され、様々な行為の動作を実行するために示される順序に限定されない。プロセス５００は、メモリーページを圧縮するための例示的なプロセスであり、メモリーページを圧縮することの追加の記述が、異なる図面を参照して本明細書に含まれる。
【００４１】
[0051]プロセス５００では、修正されたリスト上で１つまたは複数のメモリーページの組が識別される（行為５０２）。１つまたは複数のメモリーページの組は、ページの優先度レベルに基づいて、メモリーページが修正されたリストに追加される順序で識別される（例えば、より低い優先度のページがより高い優先度ページの前に識別される）など、様々な方式で識別されてもよい。
【００４２】
[0052]行為５０２で識別されたメモリーページの組は、ページングされたメモリーの圧縮記憶の領域に圧縮される（行為５０４）。圧縮記憶のこの領域は、行為５０２で識別されたメモリーページの組と少なくとも類似の優先度レベルを有する１つまたは複数の圧縮記憶メモリーページから構成される。行為５０４において圧縮することの一部として、圧縮記憶マネージャーは、その領域において、メモリーページの組の圧縮されたバージョンの各メモリーページがどこに記憶されるかのレコードを維持する。このレコードは、圧縮されたバージョンのメモリーページごとに対して、どの１つまたは複数の圧縮記憶メモリーページが圧縮されたバージョンのメモリーページを記憶するかのレコード、および圧縮されたバージョンのメモリーページごとに対して、圧縮されたバージョンのメモリーページを記憶する領域におけるアドレス範囲のレコードなど、様々な形式をとってもよい。
【００４３】
[0053]メモリーページを圧縮することは、メモリーページのコンテンツ（例えば、記憶されたデータ）を圧縮することを指す。任意の様々な異なるパブリックおよび／またはプロプライエタリな圧縮技術がメモリーページを圧縮するために使用されてもよい。例えば、メモリーページは、ランレングスエンコーディング圧縮アルゴリズム、ＬＺＷ圧縮アルゴリズム、およびＨｕｆｆｍａｎ符号化アルゴリズムなどを使用して圧縮されてもよい。異なるタイプのコンテンツに対して異なる圧縮アルゴリズムなど、複数の異なる圧縮アルゴリズムが任意選択で採用されてもよい。例えば、１つの圧縮アルゴリズムが英数字および／またはテキストコンテンツに対して使用されてもよく、別の圧縮アルゴリズムが画像コンテンツに対して使用されてもよく、別の圧縮アルゴリズムが音声コンテンツに対して使用されてもよい。メモリーページを圧縮するために使用される圧縮技術は主として、可逆的圧縮アルゴリズムであるが、ある状況では（例えば、ある画像および／または音声コンテンツに対し）、不可逆的圧縮アルゴリズムが代わりに使用されてもよい。特定の圧縮アルゴリズムはまた、デバイス依存であってもよく、より高速なデバイス（例えば、より強力な１つまたは複数のプロセッサーを有する）が、より良好に圧縮する、より多くのプロセッサーを必要とする圧縮アルゴリズムで構成されてもよく、より低速なデバイス（例えば、強力でない１つまたは複数のプロセッサーを有する）が、良好に圧縮しないより少ないプロセッサーを必要とする圧縮アルゴリズムで構成されてもよい。特定の圧縮アルゴリズムはまた、記憶装置性能とのトレードオフに基づいてもよい。ＣＰＵが記憶装置よりも大きく性能が上回る場合、より良好に圧縮するより多くのプロセッサーを必要とする圧縮アルゴリズム（よって、記憶装置Ｉ／Ｏが少なくなる）が使用されてもよい。
【００４４】
[0054]１つまたは複数の実施形態では、メモリーページが、行為５０４において個々に圧縮される。代わりに、２つ以上のメモリーページがともに圧縮されてもよい（例えば、圧縮アルゴリズムが個々にではなくともに２つ以上のメモリーページ上で実行されてもよい）。
【００４５】
[0055]メモリーページの組の追加の処理がまた、任意選択で、行為５０４において実行されてもよい。この追加の処理は、メモリーページの組のコンテンツを暗号化すること（例えば、対称鍵暗号化、および公開鍵暗号化などを使用して）、メモリーページの組に対してＣＲＣ（巡回冗長検査）データなどの誤り検出データを生成すること、ならびにメモリーページの組に対してＨＭＡＣ（ハッシュメッセージ認証コード）データなどの認証情報を生成すること、などとすることができる。
【００４６】
[0056]行為５０２で識別されたメモリーページの組は、圧縮記憶に圧縮された後にスタンバイリストに移動され（行為５０６）、または代わりに、空きリストに移動される。メモリーページの組は、圧縮記憶マネージャー１０４が、メモリーページの組を解放することができることをメモリーマネージャー１０２に通知するのに応答してなど、様々な方式でスタンバイリスト（または、空きリスト）に移動されてもよい。行為５０２で識別されたメモリーページの組は、スタンバイリスト（または、空きリスト）に移動されてもよく、再利用されてもよく、なぜならば、２つのバージョンの同一のメモリーページ（１つのバージョンは圧縮されておらず、１つのバージョンは圧縮されている）が、それがページングされたメモリーの効率的な使用になりえないので、ページングされたメモリーに保持される必要がないからである。
【００４７】
[0057]圧縮記憶の領域を構成する圧縮記憶メモリーページは、メモリーマネージャーによってページファイルに書き出される（行為５０８）。圧縮記憶メモリーページがページファイルに即時に書き込まれる必要がないことに留意されるべきである。むしろ、圧縮記憶メモリーページの書き出しは、メモリーマネージャー１０２が別のプログラム１０８への割り当てのためにメモリーページを解放することを要求するとき、および圧縮記憶マネージャー１０４が圧縮記憶メモリーページを書き込むことを要求するときなどの後のときまで遅延されてもよい。圧縮記憶メモリーページをページファイルに書き込む速度および効率性などを改善するために任意の数の技術が実装されてもよいことがまた留意されるべきである（例えば、圧縮記憶メモリーページは連続したチャンクで書き込まれてもよい）。
【００４８】
[0058]行為５０２で識別されたメモリーページの組をページファイルに書き出すのではなく、圧縮記憶メモリーページがページファイルに書き込まれる（５０８）ことがさらに留意されるべきである。よって、メモリーページの組の展開されたバージョンをページファイルに書き出すことなく（またはそれらなしに）、行為５０２で識別されたメモリーページの組の圧縮されたバージョンがページファイルに書き込まれる。
【００４９】
[0059]領域を構成する圧縮記憶メモリーページがページファイルに書き込まれると、圧縮記憶メモリーページは、圧縮記憶メモリーページの優先度レベルで（または代わりに、より低いレベルで）スタンバイリスト上に置かれる。この点で、圧縮記憶メモリーページは、システム１００において利用可能なメモリーとして扱われ、メモリーマネージャー１０２によって要求されるいずれかのときに再利用されてもよい。
【００５０】
[0060]１つまたは複数の実施形態では、圧縮記憶マネージャーは、圧縮記憶メモリーページが実質的に満たされるまでメモリーマネージャーが圧縮記憶メモリーページを書き出すことを許可しない。実質的に満たされた圧縮記憶メモリーページは、追加の圧縮されたメモリーページを記憶することができるメモリーページに残存している記憶空間があったとしてもほとんどないことを指す。例えば、圧縮記憶メモリーページの記憶空間の少なくとも閾値量は、圧縮されたメモリーページを記憶するために使用されている。
【００５１】
[0061]本明細書における記述の一部は、１つまたは複数のプロセスのメモリーページを圧縮することを指すが、本明細書で述べられる技術は、ユーザーモードのページングされたメモリーおよびカーネルモードのページングされたメモリーを含むことができる、全てのページング可能メモリーに対してメモリーページを圧縮することに同様に適用される。そのような状況では、ページファイル全体が圧縮記憶においてメモリーによって表され、全ての修正されたページが圧縮記憶を通過するので、圧縮記憶は必然的にページファイルを管理する。
【００５２】
[0062]図６は、１つまたは複数の実施形態に従った、圧縮されたメモリーページを読み出すための例示的なプロセス６００を示すフローチャートである。プロセス６００は、図１の圧縮記憶マネージャー１０４などの圧縮記憶マネージャーによって実行され、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせで実装されてもよい。プロセス６００は、行為の組として示され、様々な行為の動作を実行するために示される順序に限定されない。プロセス６００は、圧縮されたメモリーページを読み出すための例示的なプロセスであり、圧縮されたメモリーページを読み出すことの追加の記述が、異なる図面を参照して本明細書に含まれる。
【００５３】
[0063]メモリーページに対する要求がメモリーマネージャーから受信される（行為６０２）。この要求は、例えば、少なくとも１つのメモリーページが圧縮記憶１１０に圧縮された後に、メモリーページにおけるコンテンツにアクセスすることを要求するプログラム１０８からの要求に応答したものであってもよい。要求は、鍵とも称される、少なくとも１つのメモリーページの識別子を含む。メモリーマネージャーは、単一のメモリーページまたは複数のメモリーページを要求することができる。
【００５４】
[0064]要求に応答して、要求されたメモリーページがページングされたメモリーにおける圧縮記憶メモリーページにあるかについてのチェックがなされる（行為６０４）。上記のように、圧縮記憶メモリーページは、ページファイル１１２に即時に書き出される必要はなく、よって、要求されたメモリーページは、ページングされたメモリー１０６の圧縮記憶メモリーページでいまだに利用可能であってもよい。圧縮記憶メモリーページは、圧縮記憶マネージャー１０４のワーキングセットまたは様々なリスト（例えば、修正されたリストもしくはスタンバイリスト）上にあってもよいが、いまだにページングされたメモリーにあることに留意されるべきである。
【００５５】
[0065]要求されたメモリーページがページングされたメモリーにおいて圧縮記憶にある場合、要求されたメモリーページは展開され（行為６０６）、メモリーマネージャーに返される（行為６０８）。展開され返された後、圧縮されたメモリーページは圧縮記憶１１０の領域から削除され、よって、圧縮されていない形式のメモリーページと圧縮された形式のメモリーページとの間でのメモリーページの重複を回避する。圧縮記憶メモリーページのコンテンツが展開され返された後、圧縮記憶メモリーページは、再利用され解放されてもよい。
【００５６】
[0066]要求されたメモリーページが展開される方式は、要求されたメモリーページを圧縮するために使用される技術の少なくとも一部に基づいて変化してもよい。メモリーページを復号化すること、誤り検出データを検証すること、認証情報を検証すること、およびこの検証が失敗した場合にデータを補正すること（可能である場合）など、メモリーページ上で実行される任意の他の処理がまた、行為６０６において検証または取り消しされる。誤り検出データもしくは認証情報を検証することができない場合、および／またはデータが補正された場合、展開された要求されたメモリーページではなく、要求されたメモリーページが破損したことの表示がメモリーマネージャーに返されてもよい。
【００５７】
[0067]要求されたメモリーページがページングされたメモリーにおいて圧縮記憶にない場合、要求されたメモリーページを含む圧縮記憶メモリーページがページファイルから読み出される（行為６１０）。圧縮記憶メモリーページを読み出すことは、ページファイルから圧縮記憶メモリーページを読み込むこと、および圧縮記憶メモリーページをページングされたメモリー１０６の圧縮記憶１１０に記憶することを含む。次いで、要求されたメモリーページは、ページングされたメモリーにおいて圧縮記憶１１０にあり、よって、要求されたメモリーページは、展開され（行為６０６）、メモリーマネージャーに返される（行為６０８）。
【００５８】
[0068]行為６０４および６１０はともに実行されてもよいことに留意されるべきである。例えば、圧縮記憶マネージャー１０４は、どのメモリーページがどの圧縮記憶メモリーページに圧縮されたかのレコードを維持する。行為６０２における要求に応答して、圧縮記憶マネージャー１０４は、要求されたメモリーページが圧縮された圧縮記憶メモリーページを読み込む。圧縮記憶メモリーページがページングされたメモリー１０６の圧縮記憶１１０にある場合、圧縮記憶マネージャー１０４は、ページングされたメモリー１０６から圧縮記憶メモリーページを読み込む。圧縮記憶メモリーページがページングされたメモリー１０６の圧縮記憶１１０にない場合、ページフォールトが発生し、メモリーマネージャー１０２は、ページファイルから圧縮記憶メモリーページを読み出し、圧縮記憶メモリーページをページングされたメモリー１０６に置き、次いで、圧縮記憶マネージャーは、ページングされたメモリー１０６から圧縮記憶メモリーページを読み込む。
【００５９】
[0069]圧縮記憶マネージャー１０４は任意選択で、要求されたメモリーページに加えて１つまたは複数のメモリーページを展開し返す（かつ、必要である場合、ページファイルから読み出す）ことを選択することができる。例えば、圧縮記憶マネージャー１０４は、メモリーページに対する後のメモリーマネージャー要求を減少させることによって性能を増大させることを試みる際に、要求されたメモリーページの近くの（例えば、閾値のアドレス範囲内の）１つまたは複数のメモリーページを展開し返すことを選択することができる。
【００６０】
[0070]本明細書で述べられるメモリーページを圧縮すること、およびメモリーページを読み出すこととともに、圧縮記憶マネージャー１０４は、メモリーマネージャーからの書き込み（圧縮）または読み込み（読み出し）要求の進捗を保証するように動作することに留意されるべきである。圧縮記憶マネージャー１０４によって保証される進捗は、少なくとも部分的にはメモリーページの圧縮によって、利用可能なメモリーページがないので、システム１００におけるデッドロックを防止することを指す。圧縮記憶マネージャー１０４は、要求されたメモリーページが既にページファイル１１２において圧縮され記憶されているかに関わらず、ならびに要求されたメモリーページがページファイル１１２において圧縮され記憶された後に再利用されているかに関わらず、この進捗を保証するように動作する。１つまたは複数の実施形態では、メモリーページを圧縮することに関する進捗は、修正されたリスト上での１つまたは複数の圧縮されていないメモリーページをページファイルに書き込むことをメモリーマネージャーに通知することによって保証され、それによって、１つまたは複数のメモリーページを解放する。メモリーページを読み出すことに関する進捗は、少なくとも１つのそのような読み込みが進行するために必要なリソースを常に有することを保証するために必要なリソース（例えば、圧縮記憶マネージャーのワーキングセットにおける１つまたは複数のメモリーページ）を前もって事前割り当てすることによって保証される。
【００６１】
[0071]図１に戻り、各メモリーページは、メモリーページが相互に区別されることを可能にするそれと関連付けられた識別子（鍵とも称される）を有する。この識別子は、メモリーマネージャー１０２または圧縮記憶マネージャー１０４などの様々なコンポーネントのいずれかによって割り当てられてもよい。圧縮されたバージョンのメモリーページは、メモリーページ自体よりもページングされたメモリー１０６において少ない空間を占め、よって、同一のデータ単位の構造は、圧縮記憶マネージャー１０４によって使用されない。例えば、メモリーマネージャー１０２は、メモリーページによってページングされたメモリー１０６を管理してもよいが、圧縮記憶マネージャー１０４はそうではない。
【００６２】
[0072]圧縮記憶マネージャー１０４は、様々な圧縮されたメモリーページが圧縮記憶１１０のどの領域に記憶されているかを識別するためのメモリーページマップを維持する。図７は、１つまたは複数の実施形態に従った、例示的なメモリーページマップ７０２を示す。圧縮記憶１１０に圧縮されたメモリーページごとに、メモリーページマップ７０２は、その圧縮されたメモリーページがメモリーページの領域においてどこに記憶されているかを識別する対応するレコード７０４を維持する。圧縮記憶１１０は、上記のように各々がそれ自体複数のメモリーページから構成される、１つまたは複数の（ｎ個の）異なる領域７０６（１）、…、７０６（ｎ）として示される。１つまたは複数の実施形態では、別個のメモリーページマップがページングされたメモリー１０６において圧縮記憶１１０ごとに対して維持される。代わりに、複数の圧縮記憶に対するメモリーページマップが単一のメモリーページマップに結合されてもよく、レコード７０４は、圧縮されたメモリーページが記憶された圧縮記憶１１０の識別子を含むことができる。
【００６３】
[0073]各レコード７０４は、ページ鍵フィールド７１０、領域番号フィールド７１２、オフセットフィールド７１４、サイズフィールド７１６、およびフラグフィールド７１８を含む。ページ鍵フィールド７１０は、対応する圧縮されたメモリーページの識別子を記憶する。この識別子は、様々な異なる形式のうちのいずれかを取ることができる。例えば、それは、プロセス識別子および仮想アドレス、ならびにレコード識別子などであってもよい。
【００６４】
[0074]領域番号フィールド７１２は、対応する圧縮されたメモリーページが記憶された特定の領域７０６の識別子を記憶する。主として番号であるが、この領域は、様々な他の方式のうちのいずれかで識別されてもよい。オフセットフィールド７１４は、対応する圧縮されたメモリーページに対するデータの記憶が開始する特定の領域７０６へのオフセットの識別子を記憶する。代わりに、領域およびオフセット識別子以外の、対応する圧縮されたメモリーページが記憶された圧縮された部分における位置の任意の他の識別子を記憶する１つまたは複数のフィールドが使用されてもよい。
【００６５】
[0075]サイズフィールド７１６は、対応する圧縮されたメモリーページのサイズ（例えば、バイトにおける）の識別子を記憶する。領域、特定の領域へのオフセット、および圧縮されたメモリーページのサイズを与えられれば、圧縮されたメモリーページが記憶されたメモリーアドレス範囲を容易に識別することができる。フラグフィールド７１８は、対応する圧縮されたメモリーページに関する様々な状態情報を記憶する。そのようなフラグの例は、どのメモリーページが圧縮されるために選択されるかを判定するために使用されるメモリーページに対する選択優先度、およびメモリーページに対応する優先度レベルなどを含む。
【００６６】
[0076]メモリーページマップ７０２は例にすぎないことが理解される。他の実施形態では、追加のフィールドがマップ７０２の各レコードに含まれてもよい。例えば、ＣＲＣデータなどの誤り検出データ、ＨＭＡＣデータなどの認証情報、ならびにメモリーページの使用履歴および／または頻度を記述した情報などがマップ７０２の各レコードに含まれてもよい。さらに、フィールド７１０〜７１８のうちの１つまたは複数がマップ７０２のレコードから省略されてもよい。加えて、フィールド７１０〜７１８のうちの１つまたは複数におけるデータが、別個のレコードではなくページングされたメモリー１０６にメモリーページとともに記憶されてもよい。
【００６７】
[0077]メモリーページマップ７０２に加えて、圧縮記憶マネージャー１０４はまた、どのメモリーページが領域の特定の位置に記憶されているかを識別するための領域マップを維持する。よって、メモリーページマップ７０２は、識別された圧縮されたメモリーページが記憶された場所を識別するように動作し、領域マップは、どの圧縮されたメモリーページが領域の所与の位置に記憶されているかを識別するように動作する。
【００６８】
[0078]図８は、１つまたは複数の実施形態に従った、例示的な領域マップ８０２を示す。異なるメモリーページが記憶された領域へのオフセットごとに、領域マップ８０２は、そのオフセットに記憶された対応する圧縮されたメモリーページを識別するレコード８０４を維持する。各レコード８０４は、ページ鍵フィールド８０６、領域番号フィールド８０８、およびオフセットフィールド８１０を含む。
【００６９】
[0079]ページ鍵フィールド８０６は、図７のレコード７０４のページ鍵フィールド７１０と同様に、対応する圧縮されたメモリーページの識別子を記憶する。領域番号フィールド８０８は、レコード７０４の領域番号フィールド７１２と同様に、対応する圧縮されたメモリーページが記憶された特定の領域７０６の識別子を記憶する。オフセットフィールド８１０は、レコード７０４のオフセットフィールド７１４と同様に、対応する圧縮されたメモリーページに対するデータの記憶が開始する特定の領域７０６へのオフセットの識別子を記憶する。代わりに、領域およびオフセット識別子以外に、対応する圧縮されたメモリーページが記憶された圧縮された部分における位置の任意の他の識別子を記憶する１つまたは複数のフィールドが使用されてもよい。
【００７０】
[0080]領域マップ８０２は例にすぎないことが理解される。他の実施形態では、追加のフィールドがマップ８０２の各レコードに含まれてもよく、および／またはフィールド８０６〜８１０のうちの１つもしくは複数がマップ８０２のレコードから省略されてもよい。加えて、フィールド８０６〜８１０のうちの１つまたは複数におけるデータが、別個のレコードではなく図１のページングされたメモリー１０６にメモリーページとともに記憶されてもよい。
【００７１】
[0081]図７のメモリーページマップ７０２および図８の領域マップ８０２は、様々な異なる方式のうちのいずれかで実装されてもよい。１つまたは複数の実施形態では、それらのマップは各々、個々のレコードにアクセスする際に性能を増大させるためにＢ＋木として実装されてもよい。代わりに、ＡＶＬ木、ハッシュテーブル、および配列などの様々な他の従来のデータ構造のうちのいずれかが、それらのマップを実装するために使用されてもよい。
【００７２】
[0082]図１に戻り、メモリーマネージャー１０２が、ページングされたメモリー１０８の外へプログラム１０８に対するワーキングセット全体を移動させることを要求する状況が発生することがある。１つまたは複数の実施形態では、そのような状況は、プログラム１０８がシステム１００において一時停止したときに発生する。プログラム１０８を一時停止させるプロセスの一部として、メモリーページのワーキングセットが圧縮記憶１１０において圧縮され記憶され、ワーキングセットをスワップアウトするとも称される。この圧縮記憶１１０は、その後、ページファイル１１２に書き込まれてもよい。プログラム１０８がその後、再開されるとき（例えば、もはや一時停止されない）、圧縮記憶１１０は、ページファイル１１２から読み出され（それがページファイル１１２に書き込まれていた場合）、圧縮記憶１１０におけるメモリーページは、展開され、ワーキングセット２０２に返され、ワーキングセットをスワップインするとも称される。
【００７３】
[0083]図９は、１つまたは複数の実施形態に従った、ワーキングセットをスワップアウトする例を示す。図９では、プログラム１０８の特定のプロセスのワーキングセット２０２、プロセスＸが示される。ワーキングセット２０２をスワップアウトすることは、開始仮想アドレスおよび長さのリスト（例えば、その開始仮想アドレスで開始するワーキングセットにおける順次メモリーページのカウント）など、メモリーページのリスト９０２を生成することによって実行される。リストは、最小アドレスから最大アドレスへ（それらのアドレスは、プロセスが実行するメモリー空間の仮想アドレスである）など、連続して順序付けられる。ワーキングセット２０２のメモリーページは、この同一の連続した順序で修正されたリスト２０６に追加される。さらに、ワーキングセット２０２のメモリーページは、この同一の連続した順序で圧縮され、示されるようなこの同一の連続した順序でプログラム１０８と関連付けられた圧縮記憶１１０に書き込まれる。よって、ワーキングセット２０２におけるメモリーページがワーキングセット２０２においては非連続的であってもよいが、それらは圧縮記憶１１０における連続した位置に書き込まれる。
【００７４】
[0084]圧縮記憶１１０の合計サイズがまた判定され、圧縮記憶１１０を記憶するために十分な空間がページファイル１１２において予約される。圧縮記憶１１０がページファイル１１２に書き込まれるとき、圧縮記憶１１０がページファイル１１２に連続して書き込まれる。連続した順序の、ページファイルの連続した部分へのページの書き込みは、後続の読み込み動作が、後続のスワップイン動作の間にページがワーキングセット２０２に再度読み込まれるとき、ページファイル１１２の大きな連続して順序付けられたブロックを読み込むことを可能にすることができる。
【００７５】
[0085]図１０は、１つまたは複数の実施形態に従った、ワーキングセットをスワップアウトするための例示的なプロセス１０００を示す。プロセス１０００は、図１の圧縮記憶マネージャー１０４などの圧縮記憶マネージャーによって実行され、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせで実装されてもよい。プロセス１０００は、行為の組として示され、様々な行為の動作を実行するために示される順序に限定されない。プロセス１０００は、ワーキングセットをスワップアウトするための例示的なプロセスであり、ワーキングセットをスワップアウトすることの追加の記述が、異なる図面を参照して本明細書に含まれる。
【００７６】
[0086]プロセス１０００では、１つまたは複数のページをプロセスのワーキングセットからページファイルへスワップアウトするための判定がなされる（行為１００２）。この判定は、（例えば、メモリーマネージャー１０２または他のポリシーマネージャーによって）プロセスが非活動状態であり、または一時停止していること、プロセスと関連付けられた１つまたは複数のスレッドが特定の時間の間に活動状態でないこと、プロセスが特定の時間の間にバックグラウンドにいること、プロセスが特定の時間の間にある数のページを使用していなかったこと、およびコンピューティングシステムが全体として停止しており、または非活動状態であること、の判定などの様々な基準に基づいてなされてもよい。
【００７７】
[0087]１つまたは複数のページをスワップアウトするとの決定がなされると、１つまたは複数の候補ページがプロセスのワーキングセットから識別され、それらの候補メモリーページのリストが生成される（行為１００４）。候補メモリーページのリストは、最小仮想アドレスから最大仮想アドレスへなど、連続して順序付けられる。１つまたは複数の実施形態では、メモリーマネージャー１０２は、ワーキングセットの各ページを分析し、ある基準に基づいて、各ページがスワップアウトするための候補であるかを判定する。１つまたは複数の実施形態では、スワップアウトするための候補は、ワーキングセット２０２におけるプライベートページおよび／またはページファイルの戻された共有ページを含んでもよい。候補ページはまた、それらのページがクリーンであるか（圧縮記憶１１０に書き込まれているが、物理メモリーにおけるページの現在のバージョンが圧縮記憶１１０におけるページと同一であるように、そのような書き込みから修正されていないページ）に基づいてなど、異なる方式で識別されてもよい。さらに、１つまたは複数の実施形態では、メモリーにおいてページがロックされているか否かは、ページがスワップアウトするための候補であるかを決定するときに考慮されてもよい。
【００７８】
[0088]行為１００４で生成されたリスト上の候補メモリーページは、修正されたリスト２０６に追加される（行為１００６）。候補メモリーページは、それらが行為１００４で生成されたリスト上で現れるのと同一の連続した順序で修正されたリストに追加される。
【００７９】
[0089]修正されたリスト２０６における候補メモリーページは、圧縮され、プロセスである実行中プログラムと関連付けられた圧縮記憶１１０に書き込まれる（行為１００８）。圧縮は、図５に関する先の記述と同様に、様々な方式のうちのいずれかで実行されてもよい。様々な他の動作（例えば、メモリーページのコンテンツを暗号化すること、誤り検出データを生成すること、など）はまた、任意選択で、図５に関する先の記述と同様に、メモリーページ上で実行されてもよい。圧縮されたメモリーページは、それらが行為１００４で生成されたリスト上で現れるのと同一の、かつそれらが修正されたリスト２０６で現れる、この連続した順序で圧縮記憶１１０に書き込まれる。よって、ワーキングセット２０２におけるメモリーページがワーキングセット２０２において連続していなくてもよいが、それらは、圧縮記憶１１０において連続した位置に書き込まれる（例えば、図９に示されるように）。候補メモリーページが圧縮記憶１１０に書き込まれた後、候補メモリーページがワーキングセット２０２から除去される（例えば、空きリストに追加される）。
【００８０】
[0090]圧縮記憶１１０を記憶するために十分な空間がページファイル１１２において予約される（行為１０１０）。ページファイル１１２において空間を予約することは、ページファイル１１２の一部を、圧縮記憶１１０が書き込まれることは受け入れ可能であるが、他のデータが書き込まれることは受け入れ可能でないとして取っておき、またはマークすることを指す。ページファイル１１２における空間は、割り当てテーブル、またはページファイルの部分、およびそのような部分が予約されるか（および、予約される場合、それらが予約される圧縮記憶１１０）を識別する他のレコードを維持することによってなど、様々な異なる方式で予約されてもよい。予約することは、例えば、メモリーマネージャー１０２または圧縮記憶マネージャー１０４によって実行されてもよい。
【００８１】
[0091]後に、（例えば、メモリーマネージャー１０２または圧縮記憶マネージャー１０４によって）、ページファイル１１２におけるその予約された空間に圧縮されたスワップアウトされたページを含む圧縮記憶１１０を書き込むことの決定がなされる（行為１０１２）。１つまたは複数の実施形態では、この決定は、ある閾値時間（その閾値時間の間、スワップアウトする決定（行為１００２）につながった基準がいまだに有効である）が経過したことの判定に基づいてなされてもよい。例えば、プロセスがいまだに非活動状態であり、または一時停止している特定の時間（例えば、５分）が経過してもよい。決定はまた、さらなる物理メモリーが１つまたは複数の他のプログラム１０８による使用のために必要とされるとのメモリーマネージャー１０２による判定に基づいてもよい。
【００８２】
[0092]圧縮記憶をスワップファイルに書き込むとの行為１０１２での決定に応答して、圧縮記憶メモリーページが、ページファイルにおける予約された空間に書き込まれる（行為１０１４）。１つまたは複数の実施形態では、圧縮記憶メモリーページの全てが除去され、１つまたは複数の書き込み動作においてページファイル１１２に書き込まれる。代わりに、圧縮記憶メモリーページの一部のみが除去されてもよく、ページファイル１１２に書き込まれてもよい。一部の実施形態では、書き込まれる候補ページは、メモリーに対する圧力に基づいて（例えば、メモリーマネージャーの、さらなる物理メモリーに対する必要性に基づいて）判定されてもよい。ページファイル１１２に書き込まれた後、圧縮記憶メモリーページは、圧縮記憶メモリーページの優先度レベル（または代わりに、より低いレベル）でスタンバイリスト上に置かれる。この点で、圧縮記憶メモリーページは、システム上で利用可能なメモリーとして扱われ、メモリーマネージャー１０２に要求されるいずれかのときに再利用されてもよい。
【００８３】
[0093]行為１０１２に戻り、一部の状況では、圧縮記憶を書き出さない決定がなされてもよい。そのような状況では、圧縮記憶に対する予約された空間が、スワップインが発生するまで保持される。１つまたは複数の実施形態では、ページをスワップアウトする初期決定（行為１００２）につながった状況が、特定の閾値時間の後にもはや存在しない場合に、圧縮記憶を書き出さない決定がなされてもよい。例えば、プロセスは、再度活動状態になってもよく、もはや一時停止しなくてもよい。他の状況では、ページをスワップインする決定が、それらの候補ページがページファイルに書き込まれる前に発生してもよい。
【００８４】
[0094]図１１は、１つまたは複数の実施形態に従った、ワーキングセットをスワップインするための例示的なプロセス１１００を示す。プロセス１１００は、図１の圧縮記憶マネージャー１０４などの圧縮記憶マネージャーによって実行され、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせで実装されてもよい。プロセス１１００は、行為の組として示され、様々な行為の動作を実行するために示される順序に限定されない。プロセス１１００は、ワーキングセットをスワップインするための例示的なプロセスであり、ワーキングセットをスワップインすることの追加の記述が、異なる図面を参照して本明細書に含まれる。
【００８５】
[0095]プロセス１１００では、プロセスに対するワーキングセットから前にスワップアウトされた圧縮記憶をスワップインするための判定がなされる（行為１１０２）。１つまたは複数の実施形態では、この判定は、メモリーマネージャー１０２または他のポリシーマネージャーによってなされ、様々な基準に基づいてなされてもよい。そのような基準は、プロセスがもはや非活動状態ではないか、または一時停止していないことの表示を受信すること、および図１０の行為１００２でスワップアウトするための決定につながったそれらの状況の中断などを含んでもよい。
【００８６】
[0096]スワップアウトされた圧縮された圧縮記憶メモリーページが物理メモリーに残存しているかの判定がなされてもよい（行為１１０４）。一部の状況では、圧縮記憶メモリーページは、ページファイルに書き込まれていてもよいが、物理メモリーに残存している（例えば、ページがスタンバイリストにキャッシュされ、いまだに再利用されていない場合）。そのような状況では、物理メモリーに残存しているそれらの圧縮記憶メモリーページは、ページファイルから圧縮記憶メモリーページを読み込むのではなく、展開されてもよい。
【００８７】
[0097]スワップアウトされた圧縮記憶メモリーページが物理メモリーにない場合、メモリーページがページファイルから読み出される（行為１１０６）。圧縮記憶メモリーページを読み出すことは、圧縮記憶メモリーページをページファイルから読み込むこと、および圧縮記憶メモリーページをページングされたメモリー１０６の圧縮記憶１１０に記憶することを含む。１つまたは複数の実施形態では、圧縮記憶メモリーページのこの読み込みは、圧縮記憶メモリーページの大きなブロックをページファイルから読み込み、したがって、それは、より小さなブロックをページファイルにおける任意の位置から読み込むことよりも効率がよい。さらに、ページがページファイルにおいて予約された連続したブロックに書き込まれており、連続した仮想アドレスの順序で書き込まれていたので、複数のページのクラスタが、大きなブロックで、かつ連続した仮想アドレスの順序で読み込まれてもよく、さらなる効率的な読み込み動作を提供する。
【００８８】
[0098]圧縮記憶１１０の圧縮記憶メモリーページにおけるスワップアウトされたメモリーページは、展開され（行為１１０８）、メモリーマネージャーに返される（行為１１１０）。展開されたメモリーページをメモリーマネージャーに返すことは、展開されたメモリーページがプログラムのワーキングセットに含まれることを可能にする。展開は、図６に関する先の記述と同様に、様々な方式のうちのいずれかで実行されてもよい。図６に関する先の記述と同様に、様々な他の動作（例えば、メモリーページのコンテンツを暗号化すること、誤り検出データを検証することなど）がまた、任意選択で、メモリーページ上で実行されてもよい。展開され返された後、圧縮されたメモリーページは、圧縮記憶１１０の領域から削除される。圧縮記憶メモリーページのコンテンツが展開され返された後、圧縮記憶メモリーページは、再利用または解放されてもよい。
【００８９】
[0099]ページファイルにおける圧縮記憶に対する予約された空間がまた解放される（行為１１１２）。次いで、ページファイルにおける予約された空間は、他のデータを記憶するために利用可能である。
【００９０】
[00100]行為１１０４に戻り、スワップアウトされたメモリーページのいずれかが物理メモリーに残存している場合、それらのメモリーページが展開され（行為１１０８）、メモリーマネージャーに返される（行為１１１０）。それらのスワップアウトされた圧縮されたメモリーページを記憶する圧縮記憶メモリーページは、それらが物理メモリーに残存しているので、行為１１０６でページファイルから読み込まれる必要がない。
【００９１】
[00101]行為１１０６でのスワップアウトされた圧縮記憶メモリーページの読み出し、および行為１１０８でのメモリーページの展開は、並列して実行されてもよいことに留意されるべきである。１つまたは複数の実施形態では、ページファイルから読み出されたメモリーページは、他のスワップアウトされた圧縮記憶メモリーページがページファイルから読み込まれるのと同時に展開される。複数のスレッドが、メモリーページを展開し、圧縮記憶メモリーページをページファイルから読み出すために使用されてもよい。例えば、システム１００における１つのプロセッサーコア上で実行している１つのスレッドは、圧縮記憶メモリーページのページファイルからの読み出しを管理することができ、システム１００における残りのプロセッサーコア上で同時に、または並列して実行しているスレッドは、メモリーページの展開を管理することができる。
【００９２】
[00102]よって、圧縮記憶メモリーページをスワップインすることの性能は、本明細書で述べられる技術を使用して増大することができる。メモリーページが圧縮され、よって、圧縮なしの読み込みよりも少ないメモリーページが読み込まれる。さらに、展開は、メモリーページの読み込みと並列して実行されてもよく、複数の展開スレッドが同時に実行してもよく、展開されたメモリーページをメモリーマネージャーに返すことができる速度をさらに増大させる。
【００９３】
[00103]本明細書で述べられる技術はまた、様々な追加機能をサポートする。ページファイルを記憶する記憶装置への読み込みおよび書き込みの回数は、メモリーページが圧縮されていることによって減少させられる。記憶装置への読み込みおよび書き込みの回数を減少させることは、記憶装置に対する寿命を増大させるとともに、記憶装置の入力／出力によるボトルネックを減少させることができる。さらに、メモリーページの圧縮は、メモリーマネージャーによるプログラムへの割り当てに利用可能なメモリーページの数を増大させることができる。
【００９４】
[00104]さらに、スワップアウトされた圧縮記憶メモリーページは、展開されたバージョンのメモリーページよりも少ない数のページを占める。スワップアウトされた圧縮記憶メモリーページは、上記のように、ページファイル１１２に書き込まれ、かつスタンバイリストに追加されるが、それらの圧縮された性質によって、より多数の圧縮記憶がスタンバイリストに保持されることが可能となってもよい。これは、一時停止されたプログラムが再開される場合に、プログラムに対する圧縮記憶メモリーページが物理メモリーにあり、よって、ページファイルから読み出される場合よりも高速にスワップインすることができる可能性を増大させることができる。
【００９５】
[00105]加えて、圧縮されたメモリーページは、圧縮の前のそれらのメモリーページと類似の優先度レベルで圧縮記憶に記憶される。少なくとも類似の優先度レベルのメモリーページを維持することによって、低い優先度のメモリーページの前に、著しくより高い優先度メモリーページがページファイルに書き込まれる優先度逆転シナリオが回避される。
【００９６】
[00106]特定のモジュールを参照して特定の機能が本明細書で述べられるが、本明細書で述べられる個々のモジュールの機能は、複数のモジュールに分割されてもよく、および／または複数のモジュールの少なくとも一部の機能は、単一のモジュールに組み合わされてもよいことに留意されるべきである。加えて、アクションを実行するとして本明細書で述べられる特定のモジュールは、特定のモジュール自体がアクションを実行すること、または代わりに特定のモジュールがアクションを実行する（もしくは、その特定のモジュールとともにアクションを実行する）別のコンポーネント、もしくはモジュールを起動し、もしくはそうでなければアクセスすることを含む。よって、特定のモジュールがアクションを実行することは、特定のモジュール自体がアクションを実行すること、および／またはその特定のモジュールによって起動、もしくはそうでなければアクセスされる別のモジュールがアクションを実行することを含む。
【００９７】
[00107]図１２は、本明細書で説明される様々な技術を実装することができる１つまたは複数のシステムおよび／またはデバイスを表す例示的なコンピューティングデバイス１２０２を含む、１２００における全体的な例示的なシステムを示す。コンピューティングデバイス１２０２は、例えば、サービスプロバイダのサーバ、クライアントと関連付けられたデバイス（例えば、クライアントデバイス）、オンチップシステム、および／または任意の他の適切なコンピューティングデバイスもしくはコンピューティングシステムであってもよい。
【００９８】
[00108]示される例示的なコンピューティングデバイス１２０２は、相互に通信可能に結合された処理システム１２０４、１つまたは複数のコンピューター可読媒体１２０６、および１つまたは複数のＩ／Ｏインターフェース１２０８を含む。示されないが、コンピューティングデバイス１２０２はさらに、様々なコンポーネントを相互に結合するシステムバス、または他のデータおよびコマンド転送システムを含んでもよい。システムバスは、メモリーバスもしくはメモリーコントローラー、周辺バス、ユニバーサルシリアルバス、および／または様々なバスアーキテクチャーのうちのいずれかを利用するプロセッサーバスもしくはローカルバスなど、異なるバス構造のうちのいずれか１つまたは組み合わせを含むことができる。制御およびデータ線などの様々な他の例がまた考えられる。
【００９９】
[00109]処理システム１２０４は、ハードウェアを使用して１つまたは複数の動作を実行する機能を表す。したがって、処理システム１２０４は、プロセッサーおよび機能ブロックなどとして構成されてもよいハードウェア要素１２１０を含むとして示される。これは、特定用途向け集積回路または１つもしくは複数の半導体を使用して形成される他の論理デバイスとしてのハードウェアでの実装を含んでもよい。ハードウェア要素１２１０は、それらが形成される材料またはそれに採用される処理機構によっては限定されない。例えば、プロセッサーは、半導体および／またはトランジスタ（例えば、電子集積回路（ＩＣ））から構成されてもよい。そのようなコンテキストでは、プロセッサー実行可能命令は、電子的に実行可能な命令であってもよい。
【０１００】
[00110]コンピューター可読媒体１２０６は、メモリー／記憶１２１２を含むとして示される。メモリー／記憶１２１２は、１つまたは複数のコンピューター可読媒体と関連付けられたメモリー／記憶能力を表す。メモリー／記憶１２１２は、揮発性媒体（ランダムアクセスメモリー（ＲＡＭ）など）ならびに／または不揮発性媒体（リードオンリメモリー（ＲＯＭ）、フラッシュメモリー、光ディスク、および磁気ディスクなど）を含んでもよい。メモリー／記憶１２１２は、固定媒体（例えば、ＲＡＭ、ＲＯＭ、および固定ハードドライブなど）とともに、着脱可能媒体（例えば、フラッシュメモリー、着脱可能ハードドライブ、および光ディスクなど）を含んでもよい。コンピューター可読媒体１２０６は、以下でさらに説明されるように、様々な他の方法で構成されてもよい。
【０１０１】
[00111]入力／出力インターフェース１２０８は、ユーザーがコマンドおよび情報をコンピューティングデバイス１２０２に入力することを可能にし、また様々な入力／出力デバイスを使用して、情報がユーザーおよび／または他のコンポーネントもしくはデバイスに提示されることを可能にする機能を表す。入力デバイスの例は、キーボード、カーソル制御デバイス（例えば、マウス）、マイクロフォン（例えば、音声入力用）、スキャナ、タッチ機能（例えば、物理的な接触を検出するように構成された容量性または他のセンサー）、およびカメラ（例えば、接触を含まない動きをジェスチャとして検出するための赤外線周波数などの可視または不可視波長を採用することができる）などを含む。出力デバイスの例は、ディスプレイデバイス（例えば、モニターまたはプロジェクター）、スピーカー、プリンター、ネットワークカード、および触覚応答デバイスなどを含む。よって、コンピューティングデバイス１２０２は、ユーザー対話をサポートするために以下でさらに説明されるような様々な方法で構成されてもよい。
【０１０２】
[00112]コンピューティングデバイス１２０２はまた、記憶マネージャー１２１４を含む。記憶マネージャー１２１４は、上記のような様々な修正されたメモリー圧縮機能を提供する。記憶マネージャー１２１４は、例えば、図１の圧縮記憶マネージャー１０４を実装することができる。コンピューター可読媒体１２０６とは別個に示されているが、記憶マネージャー１２１４は代わりに、コンピューター可読媒体１２０６の一部として実装されてもよいことに留意されるべきである。
【０１０３】
[00113]様々な技術が、ソフトウェア、ハードウェア要素、またはプログラムモジュールの一般的なコンテキストで、本明細書で説明されてもよい。概して、そのようなモジュールは、特定のタスクを実行し、または特定の抽象データタイプを実装するルーチン、プログラム、オブジェクト、要素、コンポーネント、およびデータ構造などを含む。本明細書で使用される用語「モジュール」、「機能」、および「コンポーネント」は概して、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせを表す。本明細書で説明される技術の特徴は、様々なプロセッサーを有する様々なコンピューティングプラットフォーム上で技術を実装することができることを意味する、プラットフォーム独立である。
【０１０４】
[00114]説明されたモジュールおよび技術の実装は、いくつかの形式のコンピューター可読媒体にわたって記憶または送信される。コンピューター可読媒体は、コンピューティングデバイス１２０２によってアクセスされてもよい様々な媒体を含んでもよい。例として、かつ非限定的に、コンピューター可読媒体は、「コンピューター可読記憶媒体」および「コンピューター可読信号媒体」を含んでもよい。
【０１０５】
[00115]「コンピューター可読記憶媒体」は、単なる信号送信、搬送波、または信号それ自体と異なり、情報の永続的な記憶および／または有形の記憶を可能にする媒体および／またはデバイスを指す。よって、コンピューター可読記憶媒体は、非信号保持媒体を指す。コンピューター可読記憶媒体は、揮発性および不揮発性、着脱可能および着脱不能媒体などのハードウェア、ならびに／またはコンピューター可読命令、データ構造、プログラムモジュール、論理要素／回路、もしくは他のデータなどの情報の記憶に適切な方法もしくは技術に実装された記憶装置を含む。コンピューター可読記憶媒体の例は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリーもしくは他のメモリー技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）もしくは他の光学式記憶装置、ハードディスク、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶デバイス、または他の記憶装置、有形媒体もしくは所望の情報を記憶するのに適切であり、かつコンピューターによってアクセスすることができる製品を含んでもよいが、それらに限定されない。
【０１０６】
[00116]「コンピューター可読信号媒体」は、ネットワークを介してなど、命令をコンピューティングデバイス１２０２のハードウェアに送信するように構成された信号保持媒体を指す。信号媒体は主として、コンピューター可読命令、データ構造、プログラムモジュール、または他のデータを、搬送波、データ信号、または他の搬送機構など、変調されたデータ信号で具体化することができる。信号媒体はまた、任意の情報配信媒体を含む。用語「変調されたデータ信号」は、信号における情報をエンコードすることについての方式で設定または変更されたその特性のうちの１つまたは複数を有する信号を意味する。例として、かつ非限定的に、通信媒体は、有線ネットワークまたは直接有線接続などの有線媒体、ならびに音波、ＲＦ、赤外線、および他の無線媒体などの無線媒体を含む。
【０１０７】
[00117]前に説明されたように、ハードウェア要素１２１０およびコンピューター可読媒体１２０６は、本明細書で説明される技術の少なくとも一部の態様を実装するために一部の実施形態に採用されてもよいハードウェアの形式で実装された命令、モジュール、プログラム可能デバイス論理、および／または固定デバイス論理を表す。ハードウェア要素は、集積回路のコンポーネントまたはオンチップシステム、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、複合プログラマブル論理回路（ＣＰＬＤ）、およびシリコンもしくは他のハードウェアデバイスでの他の実装を含んでもよい。このコンテキストでは、ハードウェア要素は、実行のために命令を記憶するために利用されるハードウェアデバイス、例えば、前に説明されたコンピューター可読記憶媒体とともに、ハードウェア要素によって具体化された命令、モジュール、および／または論理によって定義されたプログラムタスクを実行する処理デバイスとして動作してもよい。
【０１０８】
[00118]上述したことの組み合わせはまた、本明細書で説明された様々な技術およびモジュールを実装するために採用されてもよい。したがって、ソフトウェア、ハードウェア、またはプログラムモジュール、および他のプログラムモジュールは、いくつかの形式のコンピューター可読記憶媒体上で、および／または１つもしくは複数のハードウェア要素１２１０によって具体化された１つもしくは複数の命令および／または論理として実装されてもよい。コンピューティングデバイス１２０２は、ソフトウェアおよび／またはハードウェアモジュールに対応する特定の命令および／または機能を実装するように構成されてもよい。したがって、ソフトウェアとしてコンピューティングデバイス１２０２により実行可能なモジュールとしてのモジュールの実装は、例えば、コンピューター可読記憶媒体および／または処理システムのハードウェア要素１２１０の使用を通じて、少なくとも部分的にハードウェアで達成されてもよい。命令および／または機能は、本明細書で説明された技術、モジュール、および例を実装するために１つまたは複数の製品（例えば、１つもしくは複数のコンピューティングデバイス１２０２および／または処理システム１２０４）によって実行可能／動作可能であってもよい。
【０１０９】
[00119]図１２でさらに示されるように、例示的なシステム１２００は、パーソナルコンピューター（ＰＣ）、テレビデバイス、および／またはモバイルデバイス上でアプリケーションを実行するときにシームレスなユーザー体験のためのユビキタス環境を可能にする。サービスおよびアプリケーションは、アプリケーションを利用している間、ビデオゲームを行っている間、およびビデオを見ている間などに１つのデバイスから次へ遷移するとき、共通のユーザー体験のために、全ての３つの環境に置いて実質的に同様に実行する。
【０１１０】
[00120]例示的なシステム１２００では、複数のデバイスは、中央コンピューティングデバイスを通じて相互接続される。中央コンピューティングデバイスは、複数のデバイスに対してローカルであってもよく、または複数のデバイスからリモートに位置してもよい。１つまたは複数の実施形態では、中央コンピューティングデバイスは、ネットワーク、インターネット、または他のデータ通信リンクを通じて複数のデバイスに接続された１つまたは複数のサーバコンピューターのクラウドであってもよい。
【０１１１】
[00121]１つまたは複数の実施形態では、この相互接続アーキテクチャーは、複数のデバイスにわたって配信されることになる機能が、共通かつシームレスな体験を複数のデバイスのユーザーに提供することを可能にする。複数のデバイスの各々は、異なる物理的要件および能力を有してもよく、中央コンピューティングデバイスは、デバイスに合わされ、全てのデバイスになお共通であるという両方であるデバイスへの体験の配信を可能にするためにプラットフォームを使用する。１つまたは複数の実施形態では、ターゲットデバイスのクラスが作成され、体験が包括クラスのデバイスに合わされる。デバイスのクラスは、デバイスの物理的特徴、使用タイプ、または他の共通の特性によって定義されてもよい。
【０１１２】
[00122]様々な実装では、コンピューティングデバイス１２０２は、コンピューター１２１６、モバイル１２１８、およびテレビ１２２０を使用するためなど、様々な異なる構成を想定してもよい。それらの構成の各々は、概して異なる構造および能力を有することができるデバイスを含み、よって、コンピューティングデバイス１２０２は、異なるデバイスクラスのうちの１つまたは複数に従って構成されてもよい。例えば、コンピューティングデバイス１２０２は、パーソナルコンピューター、デスクトップコンピューター、マルチスクリーンコンピューター、ラップトップコンピューター、およびネットブックなどを含むデバイスのコンピューター１２１６のクラスとして実装されてもよい。
【０１１３】
[00123]コンピューティングデバイス１２０２はまた、携帯電話、ポータブルミュージックプレイヤー、ポータブルゲームデバイス、タブレットコンピューター、およびマルチスクリーンコンピューターなどのモバイルデバイスを含むデバイスのモバイル１２１８のクラスとして実装されてもよい。コンピューティングデバイス１２０２はまた、カジュアル視覚環境で全体的により大きなスクリーンを有し、またはそれに接続されたデバイスを含むデバイスのテレビ１２２０のクラスとして実装されてもよい。それらのデバイスは、テレビ、セットトップボックス、およびゲームコンソールなどを含む。
【０１１４】
[00124]本明細書で説明される技術は、コンピューティングデバイス１２０２のそれらの様々な構成によってサポートされてもよく、および本明細書で説明される技術の特定の例に限定されない。この機能はまた、以下で説明されるように、プラットフォーム１２２４を介して、「クラウド」１２２２上でなど、分散システムの使用を通じて全てまたは部分的に実装されてもよい。
【０１１５】
[00125]クラウド１２２２は、リソース１２２６のためのプラットフォーム１２２４を含み、および／またはそれを表す。プラットフォーム１２２４は、ハードウェア（例えば、サーバ）の内在する機能およびクラウド１２２２のソフトウェアリソースを抽象する。リソース１２２６は、コンピューター処理がコンピューティングデバイス１２０２からリモートにあるサーバ上で実行される間に利用されてもよいアプリケーションおよび／またはデータを含んでもよい。リソース１２２６はまた、インターネット上で、および／またはセルラーもしくはＷｉ−Ｆｉネットワークなどの加入者ネットワークを通じて提供されるサービスを含むことができる。
【０１１６】
[00126]プラットフォーム１２２４は、コンピューティングデバイス１２０２を他のコンピューティングデバイスと接続するリソースおよび機能を抽象してもよい。プラットフォーム１２２４はまた、リソースのスケーリングを抽象して、プラットフォーム１２２４を介して実装されるリソース１２２６に対する直面する需要に対する対応するレベルのスケーリングを提供する働きをしてもよい。したがって、相互接続されたデバイスの実施形態では、本明細書で説明される機能の実装は、システム１２００全体を通じて分散されてもよい。例えば、機能は、クラウド１２２２の機能を抽象するプラットフォーム１２２４を介してとともに、コンピューティングデバイス１２０２上で部分的に実装されてもよい。
【０１１７】
[00127]主題が構造的特徴および／または方法的作動に特有の言語で説明されてきたが、添付の特許請求の範囲で定義される主題が必ずしも上記説明された特有の特徴または作動に限定されないことが理解される。むしろ、上記説明された特有の特徴または作動は、特許請求の範囲を実装する例示的な形式として開示される。
【図１】
0006412583.tif 000002
【図２】
0006412583.tif 000003
【図３】
0006412583.tif 000004
【図４】
0006412583.tif 000005
【図５】
0006412583.tif 000006
【図６】
0006412583.tif 000007
【図７】
0006412583.tif 000008
【図８】
0006412583.tif 000009
【図９】
0006412583.tif 000010
【図１０】
0006412583.tif 000011
【図１１】
0006412583.tif 000012
【図１２】
0006412583.tif 000013