(57)【特許請求の範囲】
【請求項１】
オペレーティング・システム（Ｏ／Ｓ）と、圧縮メイン・メモリであって、物理メモリと、プロセッサから見たメイン・メモリの量として特徴付けられる実メモリとを有する、圧縮メイン・メモリとを含むシステムにおいて、実メモリ使用量を管理するための装置であって、
物理メモリの使用量に関連付けられた１つまたは複数のしきい値を記憶するためのレジスタを含み、使用されている物理メモリ量が所定のしきい値を超えたときに割込み信号を生成する、圧縮メモリ制御装置と、
前記圧縮メモリ制御装置とソフトウェアとの通信を可能とし、及び、現在使用されている物理メモリ量の統計を取るための圧縮メモリ統計モジュールを含む、圧縮メモリ・デバイス・ドライバと、
ユーザ・アプリケーションよりも高い優先レベルにあるバックグラウンド・プロセスとして実行され、及び、所定の間隔で下記（１）〜（３）を繰り返す、圧縮管理サービス手段と、
（１）前記メモリ制御装置から前記圧縮メモリ・デバイス・ドライバを介して物理メモリの状態変化を表す割込み信号を受信したか否かを判定し、
（２）状態変化が無かったと判定された場合にはステップ（３）に進み、状態変化が有ったと判定された場合には物理メモリの状態を設定し、
（３）デバイス・ドライバ、Ｏ／Ｓ及びランダムに選択されたメモリ・ページから物理メモリ及び実メモリの使用量の統計を取り、該統計値及び物理メモリの前記使用状態に基き、実メモリの使用量を調整する、
を含む装置。
【請求項２】
前記実メモリの使用量の調整が、物理メモリの消耗が近づいている場合には、前記Ｏ／Ｓから実メモリを消費してゼロ・ページ操作を行うことによって物理メモリを回復し、物理メモリの使用量が少ない場合には前記Ｏ／Ｓに実メモリを解放する、メモリ・イータ・プロセスを含む、請求項１記載の装置。
【請求項３】
前記デバイス・ドライバはさらに、前記割込み信号に応答して、前記物理メモリ使用しきい値を調整する機構を含む請求項１または２に記載の装置。
【請求項４】
前記物理メモリのしきい値が、十分な物理メモリが利用可能である安定状態、物理メモリが低下しており是正処置を講じなければならない警告状態、及び、物理メモリは消耗に近づいており是正処置を講じなければならない緊急状態の夫々に対応するしきい値を含み、前記しきい値は下記の関係にある、
安定状態しきい値＜警告状態しきい値＜緊急状態しきい値
請求項１〜３のいずれか１項記載の装置。
【請求項５】
前記デバイス・ドライバはさらに、前記割込み信号に応答して、前記コンピュータ・システム上で動作するクライアント・アプリケーションに割込みを同報通信する機構を含む、請求項１〜４のいずれか１項に記載の装置。
【請求項６】
生成されるメモリ・イータ・プロセスの数は、前記Ｏ／Ｓから回復される総実メモリ量に依存する請求項１〜５のいずれか１項に記載の装置。
【請求項７】
前記Ｏ／Ｓから回復される前記総実メモリ量の最大量は、オペレーティング・システムから見た実メモリの総量とシステム内にある物理メモリの総量の差に等しい請求項６に記載の実メモリ使用を管理する圧縮メイン・メモリ制御装置。
【請求項８】
前記圧縮管理サービス手段が、さらに前記システムのブート圧縮比に基いて、実メモリの使用量を調整する、請求項１〜７のいずれか１項記載の装置。
【請求項９】
前記圧縮管理サービス手段が、前記システム内で動作する単一のプロセッサと関連付けるための１つまたは複数のブロッカ・プロセスを生成する機構を含み、各ブロッカ・プロセスは、前記プロセッサを独占し、物理メモリ使用量が前記緊急状態しきい値を超過したとき、前記Ｏ／Ｓ内で動作する他のアプリケーションが実行されるのを防止する、請求項４記載の装置。
【請求項１０】
前記所定の間隔は、オペレーティング・システムに依存しない定数値であり、物理メモリの使用量が警告状態、又は、緊急状態になると、短くされる、請求項１又は２記載の装置。
【請求項１１】
オペレーティング・システム（Ｏ／Ｓ）と、圧縮メイン・メモリであって、物理メモリと、プロセッサから見たメイン・メモリの量として特徴付けられる実メモリとを有する、圧縮メイン・メモリとを含むシステムにおいて、実メモリ使用量を調整するための方法であって、
（１）現在使用されている実メモリの統計を取り、現使用実メモリ値（CurrRealUsed）として設定するステップ、
（２）現在使用されている物理メモリの統計（Stats.UsedPhysical)を取り、該値から現使用物理メモリ値（CurrPhysUsed）を計算するステップ、
（３）前記現使用物理メモリ値（CurrPhysUsed）が、所定の物理メモリの量（MinConsumptionPhysical)よりも低いかどうかを判断し、但し、前記所定の物理メモリの量（MinConsumptionPhysical)は、実メモリの調整が必要か否かを判定する計算を行うのに使用しなければならない量であり、前記現使用物理メモリ値（CurrPhysUsed）が前記所定量を超えていると判断された場合には、前記現使用物理メモリ値（CurrPhysUsed）に所定の圧縮比を掛けることによって、目標使用実メモリ値（TargetedtRealUsage）を算出するステップ、
（４）前記目標使用実メモリ値（TargetedtRealUsage）から、前記現使用実メモリ値（CurrRealUsed）を差し引き、実メモリ調整値（AdjustmentReal）を得るステップ、
（５）前記実メモリ調整値（AdjustmentReal）に応じて、Ｏ／Ｓメモリ割振り機能を呼び出してＯ／Ｓから実メモリを割当て、又は、Ｏ／Ｓに実メモリを解放するステップ、
（６）前記消費された実メモリに該当するページに、ゼロを書き込むことによって、物理メモリを回復するステップ、
を含む方法。
【請求項１２】
前記ステップ（２）において、現使用物理メモリ値（CurrPhysUsed）が、現使用物理メモリの統計値（Stats.UsedPhysical)に、圧縮変換テーブルのサイズ、すべての定義済み非圧縮メモリ領域のサイズ、及びスワップ不可能なページのサイズを加えて算出される、請求項１１記載の方法。
【請求項１３】
前記所定の圧縮比が、ブート圧縮比である請求項１１または１２記載の方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般に、圧縮メモリ・システムに関し、より詳細には、オペレーティング・システムにとってトランスペアレントな方式で圧縮メモリ・システムを管理し制御するソフトウェア技法に関する。
【０００２】
【従来の技術】
コンピュータ・システムでは、プロセッサによって生成されるメモリ・アドレスとシステムの物理メモリ内にある特定のエリアの間に一対一対応が存在するのが通例である。関連する物理メモリ・エリアを有さないアドレスに対するアクセスをプロセッサが要求するのは、エラーである。このため、オペレーティング・システムおよびアプリケーションは、システム内にインストールされた実際の物理メモリによって決定されるアドレス空間のみに制限される。最新のコンピュータ・システムは、プログラム（仮想）アドレスを実メモリ・アドレスにマップする変換テーブル（ＴＴ）を実装する仮想メモリを使用して、この限界を克服した。
【０００３】
仮想メモリを使用すると、プログラムは、そのプロセッサのアーキテクチャによってのみ制限されるアドレス空間内で動作する。プログラムが現在使用しているデータおよびコードがメイン・メモリ内にあり、変換テーブルが、仮想アドレスを実アドレスに正しくマップできることを保証するのは、オペレーティング・システムの機能である。仮想メモリ・システムでは、メモリの割振りは、最も一般的には、オペレーティング・システム・ソフトウェアによって実行される。これには、エラーなしに通常のプログラム・フローが継続できるよう、命令シーケンスに割り込んで、特権カーネル・コードが、アクセスされているエリアに物理メモリを割り振ることができるようにする必要がある。この割込みと物理メモリを割り振るためのカーネル処理には、相当な量の処理時間を要し、ＣＰＵを介する命令の通常のパイプライン処理を乱す。
【０００４】
現在、オペレーティング・システム・プロセスの割込みを減らす方式がいくつか存在する。例えば、１９９８年１０月２８日付けIBM Research Report RC21146 (94535)掲載のピーター・エイ・フラナシェク（Peter A. Franaszek）およびジョン・ティー・ロビンソン（John T. Robinson）による「Design and Analysis of Internal Organizations for Compressed Random Access Memories」は、ディレクトリ部分と圧縮形式で行を記憶するのに使用される固定サイズ・ブロックの集まりとを含む、圧縮データを記憶するための低レベル・メイン・メモリ設計を記載している。本明細書に記載のメモリ記憶方式では、高度に圧縮可能な行を全部、ディレクトリ・エントリ内に記憶することができ、あるいは、ディレクトリ・エントリが、圧縮形式で行を記憶するのに使用される固定サイズ・ブロックのうちの１つまたは複数を指す。さらに、このシステムは、仮想アドレスを実アドレスに変換するページ・テーブルを使用し、この実アドレスは、行に対するディレクトリ・エントリのディレクトリ内のロケーションに対応し、また圧縮された行を保持するブロックに関する情報を含む。詳細には、ディレクトリ・エントリ内の情報には、フラグと断片結合情報が含まれ、また固定サイズ・エントリ構造を想定すると、１つまたは複数の固定サイズ・ブロックに対するポインタが含まれる。キャッシュ・ミス時には、メモリ・コントローラおよび圧縮解除ハードウェアは、圧縮された行を記憶するために割り振られたブロックを探し出し、動的にその行を圧縮解除してこのミスを処理する。同様に、新しい行または変更された行を記憶するときは、（その行が現在、ＲＡＭ内に常駐する場合）その行に現在割り振られているブロックを解放し、行を圧縮し、次いで必要な数のブロックを割り振ることによってそれをＲＡＭに記憶する。
【０００５】
さらに、米国特許第５７６１５３６号は、１つの固定サイズ記憶ブロック全体は占めない可変長オブジェクトの残りの部分（残りの圧縮メモリ部分または断片）を固定サイズ・ブロックが受け取ることができるようにすることによって、固定サイズ記憶ブロック内に可変長オブジェクト（圧縮メモリ）を記憶するために、圧縮制御装置を使用するメモリ編成技法を対象とする。したがって、このシステムは、メモリの断片化を低減させる。
【０００６】
米国特許第５８６４８５９号は、個々の行へのアクセスが、迅速に、かつ既存のソフトウェアにほとんど変更を加えずに実現できるように、固定サイズ・ブロック内に可変長オブジェクト（それぞれが例えば、１／４ページを代表する圧縮されたライン）を記憶するための圧縮ストア・アドレス指定技法を対象とする。詳細には、ページ内のどの行の先頭も、単一ポインタにオフセットを加えたものでアクセスすることができる。可変長オブジェクト記憶を可能にするためにアクセスされる空きブロックつまり使用可能ブロックのリスト（空きリスト）が、圧縮ストアに関連付けられている。
【０００７】
本願の譲渡人が所有する同時係属米国特許出願第０９／６２７５１６号は、プログラム・フローにおける割込みをなくす方式で、物理メモリを動的に割り振ることができるようにする機構を記載している。
【０００８】
コンピュータ内の物理メモリの量は、コストおよびスペースのため限られているので、オペレーティング・システム（Ｏ／Ｓ）は、同時に動作する多くのアプリケーションが共通プールの物理メモリを共用できるようにする技法を使用してきた。前述の同時係属米国特許出願第０９／６２７５１６号はさらに、様々なプロセスおよびユーザがシステム・リソースを公平に共用するようにメモリ・プールの管理を円滑にする機構を記載している。
【０００９】
一般に、現在のオペレーティング・システムは、Virtual Memory Manager（ＶＭＭ）と呼ばれるカーネル・ソフトウェア構成要素を使用して、プロセッサによってアドレス指定され得るメモリの量に等しいフラットな連続するメモリ空間の錯覚を実行中のアプリケーションに与える。Ｏ／Ｓは、メモリ空間の一部をそれ自体のものとして予約し、アプリケーションには、残りの仮想アドレス空間に対するアクセスを許す。現実には、アプリケーションは、メモリ内のアドレス空間の比較的小さい部分だけを有し、残りのアプリケーション・データ・メモリは、スワップされたメモリをアプリケーションが参照するまでディスクにスワップされる。したがって、ＶＭＭは、メモリの要求された部分内でスワップを行う。
【００１０】
したがって、大量の物理メモリを有するシステムでは、アプリケーションがメモリ内により大きなセグメントのデータを常駐させることをＯ／Ｓが許し、これにより、ディスクとの間でスワップを行う必要性を減らすことができるので、パフォーマンスが向上することになる。
【００１１】
メモリ圧縮が使用されるシステムでは、Ｏ／Ｓに物理メモリの量は、実際にインストールされているものよりもずっと大きく見える。コンピュータにインストールされているものとしてＯ／Ｓに提示されるメモリ量は、実メモリと呼ばれる。実メモリと物理メモリの比が、コンピュータ・システムのブート圧縮比と呼ばれる。メモリ内に含まれているデータが、ブート圧縮比に等しいかまたはそれより大きい比で圧縮可能である限り、システムは、正しく動作することができる。ただし、メモリ内に常駐するデータの圧縮比が、利用できるよりも大きい物理空間を必要とする点まで低下した場合、ソフトウェア構成要素を使用して実メモリの使用を絞って、アプリケーション・データおよびＯ／Ｓデータをそこに格納する十分な物理メモリが常に存在するようにする。
【００１２】
このスロットル機構は、次の２つの方式のうちどちらかで実装することができる。１）Ｏ／Ｓカーネル自体の中のＶＭＭに対する変更による。または２）Ｏ／Ｓの外部でそれとは独立に稼働するソフトウェア・パッケージによる。
【００１３】
Ｏ／Ｓカーネル・ソフトウェアに対する変更なしに実装され、Ｏ／Ｓにとってトランスペアレントに動作する、改良されたスロットル機構を提供することができれば非常に望ましいであろう。
【００１４】
【発明が解決しようとする課題】
本発明の一目的は、圧縮メイン・メモリ編成を有するコンピュータ・システムにおいて、Ｏ／Ｓカーネル・ソフトウェアに変更を加えることなく、Ｏ／Ｓにとってトランスペアレントに動作するメモリ使用を管理するシステムおよび方法を提供することである。
【００１５】
本発明のさらなる目的は、圧縮メイン・メモリ編成を有するコンピュータ・システムにおいて、実メモリの使用を絞って、アプリケーション・データおよびＯ／Ｓデータをそこに格納する十分な物理メモリが常に存在するようにするシステムおよび方法を提供することである。
【００１６】
【課題を解決するための手段】
したがって、本発明の原理によれば、オペレーティング・システムと、物理メモリおよびプロセッサから見たメイン・メモリの量として特徴付けられる実メモリを定義する圧縮メインメモリとを有し、前記圧縮メイン・メモリに対するプロセッサ・アクセスを制御する圧縮メモリ・ハードウェア制御装置を含むコンピュータ・システムにおいて、実メモリ使用を管理するシステムおよび方法であって、実メモリ使用情報を前記圧縮メモリ・ハードウェア・コントローラから受け取る圧縮メモリ・デバイス・ドライバであって、前記情報は前記実メモリ使用状態の特徴付けを含むドライバと、前記メモリ使用を監視して、前記メモリ使用状態に応じてメモリ割振りおよびメモリ回復を開始する圧縮管理サブシステムであって、メモリ状態変化を制御するためにメモリ使用しきい値を調整する機構を含むサブシステムとを含むシステムおよび方法が提供される。
【００１７】
このようなシステムおよび方法は、コンピュータ・システム内の実メモリ使用の制御がオペレーティング・システムにとってトランスペアレントであるように動作するソフトウェアで実装すると有利である。
【００１８】
本発明の装置および方法のさらなる特徴、態様、および利点は、下記の説明、添付の特許請求の範囲、および付随する図面を参照すればよりよく理解されるであろう。
【００１９】
【発明の実施の形態】
本発明は、圧縮メモリ・システム内のメモリ使用を絞るシステムおよび方法を含む。図１は、本発明による圧縮管理ソフトウェア・アーキテクチャ１０を使用する汎用オペレーティング・システムを詳細に示すブロック図である。詳細には、図１の圧縮管理ソフトウェア・アーキテクチャ１０は、２つの主なソフトウェア構成要素、１）デバイス・ドライバ２０、および２）圧縮管理サービス（「ＣＭＳ」）５０を含む。デバイス・ドライバ構成要素２０は、物理メモリ使用統計を監視しそれを搬出するための圧縮メモリ統計モジュール２４を含み、また圧縮メモリ・コントローラ・ハードウェア８０に関連するその他のサービスを提供する。ＣＭＳ構成要素５０は、実メモリ使用および実メモリ内に含まれるデータの圧縮可能性を監視する高優先順位プロセスとして実装される。
【００２０】
より具体的には、圧縮メモリ・コントローラ８０は、次のとおり機能する。第１に、このコントローラは、ＣＰＵによって提供される実メモリと物理メモリ内の実際のロケーションの間のトランスペアレントなアドレス変換を提供し、第２に、メモリの頻繁にアクセスされるページがそこに非圧縮形式で記憶されるメモリのＬ３（レベル３）キャッシュをさらに提供する。本明細書で使用するＣＴＴ（圧縮変換テーブル）という用語は、アドレス変換を実行するのにメモリ・コントローラによって使用されるデータ構造を表す。ＣＴＴ自体が、システムの物理メモリのいくらかの部分を消費し、メモリを管理する際にそれが考慮されていなければならない。ＣＴＴによって提供される実メモリと物理メモリの間のこの間接性（indirection）レベルにより、メモリ・コントローラは、ページ・レベルの細分性（granularity）でメモリを操作する１組の高速動作を提供することができる。最も有用なページ操作は、ゼロ・ページ操作であり、これは、特定の実メモリ・ページに関して、ＣＴＴにすべてゼロを含むとマークを付けることにより、メモリのゼロ化を可能にして、そのページに関連する物理メモリが解放され、再使用できるようにする。さらに、本明細書でさらに詳細に記載するとおり、メモリ・コントローラは、それに加えて、物理メモリ使用がプログラム可能な使用しきい値を超過したとき、割込みを生成するように機能する。
【００２１】
ＣＭＳ構成要素５０は、詳細には、デバイス・ドライバ圧縮メモリ統計モジュール２４をポーリングして、圧縮メモリ使用統計を集め、これらの統計に基づいて物理メモリを利用可能にすべきか否かを決定する圧縮メモリ管理サービス・モジュール５４を含む。圧縮可能性が低下し、物理メモリ消耗が近づいている場合、このモジュールは、Ｏ／Ｓからメモリを割り振ることになる。これは、高優先順位タスクであるので、Ｏ／Ｓ７５は、その要求を満たすため、他のより低い優先順位のタスクからメモリのページをトリムすることによって応答する。他のタスクからトリムされるページは、その中に含まれるデータを保存するためにＯ／Ｓのスワップ空間（図示せず）に書き出される。メモリ・ページを受け取ると、ＣＭＳはトリビアル・パターン（trivial pattern）に圧縮されることが知られているデータ、すなわち実質的に全く物理メモリを使用しない程度まで圧縮されるデータでそれを埋めることになる。その結果、それらのページをバッキングしていた（backing）物理メモリが解放され、それが別のところでメモリ・コントローラによって使用できるようになる。ＣＭＳが回復する準備ができていなければならないメモリの最大量は、下記のとおり計算される。
MaxMemToTakeAway=TR-TP
ここで、「ＴＲ」は、Ｏ／Ｓから見た実メモリの総量であり、「ＴＰ」は、システム内の物理メモリの総量であり、また「MaxMemToTakeAway」は、回復される総実メモリ（単位バイト）である。MaxMemToTakeAwayバイトを収容するため、十分なスワップ・ファイル空間を有するようにＯ／Ｓを構成することが重要である。
【００２２】
圧縮メモリ・コントローラ・ハードウェア８０はさらに、物理メモリがプログラム可能なしきい値を超過したとき、割込み８１を生成する。この機能を使用して、メモリ・システムは、任意の時点で、次の３つの状態のうちのどれかにあると考えられる。１）安定状態、この状態では、十分な物理メモリが利用可能であり、データは、少なくともブート圧縮比で圧縮されている。２）警告状態、この状態では、物理メモリが低下しており、是正処置（corrective action）を講じなければならない。３）緊急状態、この状態では、物理メモリは消耗に近づいており、是正処置を講じなければならず、またシステム内のすべてのアプリケーションは、十分な物理メモリが利用可能になって警告状態または安定状態に再び入るまで、実行をブロックされなければならない。
【００２３】
是正を行うためにメモリ使用統計をポーリングすることに加え、ＣＭＳ５０は、メモリ状態変化が起きると、デバイス・ドライバから通知を受け取ることになる。これにより、ＣＭＳは、再びポーリングをする準備ができるのを待つことなく、即時に是正処置を講じることができる。この結果、メモリ状態変化の通知により圧縮メモリ統計モジュールをアグレッシブにポーリングする必要性が緩和されるので、ＣＭＳ５０はより少ないＣＰＵ周期を使用することになる。
【００２４】
ＣＭＳ５０は、さらに、システム内の各ＣＰＵごとにブロッカ・スレッド５５（「ＣＰＵブロッカ」と呼ぶ）を生成する機能も含む。このスレッドは、サスペンドされたままで、物理メモリが緊急状態に入るというデバイス・ドライバからの通知を待つ。この通知を受け取ると、ＣＰＵブロッカ５５は、それがバインドされているＣＰＵを独占し、システム内の他のアプリケーションが実行されるのを防止することになる。これに応じて、ＣＭＳ５０およびそれに関連するタスクだけが実行できるようになる。これが必要なのは、メモリ・システムの状態をさらに低下させる可能性があるので、緊急状態の重大度から、他のアプリケーションはその実行が許されないことが要求されるためである。
【００２５】
デバイス・ドライバの説明
より詳細には、圧縮メモリ・コントローラ・ハードウェア８０は、周辺構成要素相互接続（ＰＣＩ）として現れ、各個別Ｏ／Ｓによって定義される標準の１組のソフトウェア・サービスを提供する圧縮メモリ・デバイス・ドライバ２０を介して、システム内にある他の任意の装置と通信することができる。この場合、アプリケーション・ソフトウェアまたはＯ／Ｓソフトウェアは、このデバイス・ドライバのサービスを利用してメモリ・コントローラ・ハードウェアと通信することができる。本発明の好ましい実施形態によれば、デバイス・ドライバ２０は、次の機能を提供する。１）モジュール２４から様々なメモリ圧縮統計を提供する。２）モジュール２６から、圧縮メモリ・コントローラ８０上で低物理メモリしきい値レジスタのプログラミングを可能にし、このコントローラは、そのしきい値レジスタの値を超えたとき、割込みの生成を開始する。３）モジュール２６から、関与するクライアント・アプリケーションに低物理メモリ割込みの通知を同報通信する。また４）モジュール２８から、メモリ圧縮チップに固有の「PageOps」と呼ばれる特別メモリ操作関数に対するアクセスを提供する。PageOpsは、例えば、Intel x86アーキテクチャによって使用されるような通常のページ・サイズ（４Ｋ）上で動作するためにそう呼ばれる。
【００２６】
ＣＭＳ５０は、デバイス・ドライバ２０に装置Ｉ／Ｏ制御コード・メッセージを送ることによってそれと対話する。
【００２７】
低物理メモリ割込み
デバイス・ドライバは、特に、使用中の物理メモリの量に基づいて、内部メモリ状態変数を追跡する。システムは、任意の時点で、３つの状態（安定、警告、または緊急）のうちのどれかにあると考えられる。各メモリ状態は、関連する物理メモリ使用しきい値を有する。状態のしきい値は、その状態自体と次のメモリ状態の間の遷移点であると考えられる。状態のしきい値は、ドライバにＩ／Ｏ制御コード・メッセージを送ることによって設定される。しきい値割当てを行うとき、しきい値に関する次の規則が真でなければならない。
安定しきい値＜警告しきい値＜緊急しきい値
【００２８】
ドライバは、最初、しきい値低レジスタ（ＴＬＲ）を使用物理メモリを最小量だけ超過するしきい値に設定する。現行のメモリ状態は、このしきい値に関連する状態であると考えられる。使用物理メモリが大きくなり、このしきい値レジスタ内の値を超過すると、デバイス・ドライバに割込みが送られる。ドライバは、前述の規則に基づいてＴＬＲを再プログラミングすることにより、この割込みを処理する。割込みは、しきい値をより高い方に動かす。現在のメモリ状態が、警告または緊急のどちらかであるとき、ドライバは、定期的にポーリングを行って、しきい値を下方に調整すべきかどうか調べる。つまり、割込みはしきい値を「高い方」に動かし、他方、物理メモリ使用の低下に関してメモリ・コントローラをポーリングすることは、しきい値を下げる（緩和）。緊急状態に関連するしきい値を使用して、しきい値高レジスタ（ＴＨＲ）をプログラミングする。このしきい値を超えた場合、メモリ・コントローラは、それが受け取られたときＯ／Ｓを穏やかに終了するのに使用されるマスク不能割込みを生成することになる。この条件に到達したことは、物理メモリが消耗し、マシンを終了するのに十分なメモリしか残っていないことを意味する。この条件はキャッチオール（catchall）であると考えられ、通常は、到達してはならない。
【００２９】
メモリ状態オブザーバ
前述のメモリ状態追跡と合せて、ドライバは、メモリ状態変化に関してＣＭＳおよび他のクライアント・アプリケーション（メモリ状態オブザーバと呼ぶ）に通知を与える機能も提供する。アプリケーションにイベントを通知する機構は、Ｏ／Ｓに依存し、当分野の技術者には周知のものである。
【００３０】
ページ操作
前述のとおり、デバイス・ドライバ２０は、物理メモリのページ上でメモリ動作にアクセスする機能をサポートするPageOpsモジュール２８を含む。圧縮メモリ管理の点でドライバがユーザ・モード・アプリケーションに供与する重要なページ操作は、ゼロ・ページ操作と呼ばれ、Zero Page Opとして参照する。アプリケーションは、ドライバにそのプロセス空間内の仮想アドレスおよび長さを伝えることができる。ドライバは、仮想アドレスから物理アドレスにそのアドレスを変換し、その範囲内の各ページ上でゼロ・ページ操作を呼び出す。このページ操作は、Ｌ３キャッシュからページ（それが存在する場合）をフラッシュして、そのページによって使用中の物理メモリを解放し、そのページのＣＴＴエントリにトリビアル・データ・パターン（すなわち、ゼロ・ビット・パターン）を書き込む効果がある。
【００３１】
圧縮管理サービス
圧縮管理サービス（ＣＭＳ）は、圧縮メモリ制御システムのユーザ・モード部分である。このサービスは、通常のアプリケーション実行より高い優先レベルにあるバックグラウンド・プロセスとして実行される。例えば、Windows (R) 2000上では、このサービスは、リアルタイム優先順位で実行される。これは、このサービスがシステム内の他のユーザ・モード・プロセスに対して優先されるように行われる。その中核には、圧縮メモリ管理を行うCompMemMgr構成要素５４がある。
【００３２】
初期設定
初期設定時に、CompMemMgr54は、差（実メモリ・サイズ−物理メモリ・サイズ）を求める。この結果は、MaxMemToTakeAwayと呼ばれ、アプリケーションがメモリを圧縮不能データで完全に埋めた場合に、Ｏ／Ｓカーネル７５の仮想メモリ・マネージャ・サブシステム７７から除去しなければならないメモリの最大量である。メモリは、アプリケーションがメモリを割り振ることを可能にするＯ／Ｓ固有コールを介して仮想メモリ・マネージャ７７から除去される。例えば、Windows (R) 2000上では、これは、VirtualAllocと呼ばれる。
【００３３】
CompMemMgrは、メモリ・イータ６０と呼ばれる１つまたは複数のプロセスを生成する。生成されるメモリ・イータ・プロセスの数は、次式によって計算される。
NumEater=
maximun_of(MaxMemToTakeAway/MaxMemoryAllowerPerProcess,1)
MaxMemoryAllowedPerProcessは、使用するＯ／Ｓに依存することに留意されたい。
【００３４】
プロセス間通信（ＩＰＣ）機構を使用して、メモリの割振りや解放を行うようCompMemMgrがメモリ・イータに命令できるようにし、またメモリ・イータが、その進行をCompMemMgrにフィードバックできるようにする。最新のＯ／Ｓは、プロセスが互いに通信できるようにする多数の機構をサポートしている。例えば、Windows (R) 2000にこのアルゴリズムを実装する際に、共用メモリのエリアを通信手段として使用する。
【００３５】
CompMemMgrは、低物理メモリ割込みに対する物理メモリしきい値を決定する。これは、圧縮変換テーブル（ＣＴＴ）のサイズと、非圧縮としてセットアップされたすべてのメモリ領域のサイズと、Ｏ／Ｓカーネルの常駐部分のサイズと、Ｌ３キャッシュからの最大スピルオーバ（spill over）のすべてをバッキングするＬ３キャッシュのサイズとを合計することによって行う。メモリ状態のそれぞれに関するしきい値をドライバに渡した後、CompMemMgrは、メモリ・システムの状態が変化したときデバイス・ドライバから通知を受けるために、自らを登録する。これらのしきい値は、ＣＭＳにより、そのメモリ使用監視の一環として定期的に再計算される。
【００３６】
割込みしきい値が計算された後、MinConsumptionPhysical値が計算される。この変数は、メモリ調整が必要か否かを判定する計算をCompMemMgrが行うのに使用しなければならない物理メモリの量を表す。これは、安定状態に関連するしきい値の点よりも低い物理メモリ使用のレベルに設定される。実際の計算は、Ｏ／Ｓ依存のヒューリスティックなものであるが、一般に、これは、どれだけのメモリを警告状態および緊急状態のために残すかによる。MinConsumptionPhysical変数計算は、２つの目的に役立つ。１）より高いメモリ状態に移行するのに先立って、早くから是正処置を取り始めること、および２）それより下ではすべてのホールドされたメモリがシステムに戻される基準として機能することである。この値もまた、メモリ状態しきい値とともに再計算されることを理解されたい。
【００３７】
次に、CompMemMgrは、システム内のプロセッサごとに１つのＣＰＵブロッカ・スレッドを生成してバインドする。前述のとおり、ＣＰＵブロッカは、すべてのユーザ（例えば、サードパーティ）アプリケーション６５が動作するのを防止しなければならないときに使用される。
【００３８】
最後に、CompMemMgr54は、その中で図２〜３に示す圧縮メモリ管理アルゴリズムを実行するスレッドを生成する。
【００３９】
圧縮メモリの管理
図２〜３は、圧縮メモリ管理アルゴリズムを示すブロック図である。
【００４０】
詳細には、図２は、ドライバからのメモリ状態通知イベントである終了イベント、つまり待機タイムアウト値を待つためにCompMemMgrによって実行されるループである圧縮メモリ管理アルゴリズムのメイン・ループ１００を示している。第１ステップ１１０で、変数WaitTimeOutおよびTotalMemConsumedを初期設定する。詳細には、変数WaitTimeOutは、オペレーティング・システムに依存しない定数値であり、デフォルト値DEFAULT_SLEEP_TIMEOUTとして設定されるポーリング間隔を表し、例えば、０から１０００ミリ秒までの範囲内にある任意の値をとることができる。メモリ圧力が高まってシステムが警告状態や緊急状態に追い込まれると、ポーリングのレートが高まる。したがって、０ミリ秒というWaitTimeOut値は、WaitForMemoryStateChangeSignalFromDriver関数が、トリガされているイベント（すなわち、ドライバからのメモリ状態変化信号）が何かないか検査して、即時に戻ることを意味する。反対に、WaitTimeOutが１０００ミリ秒であるとき、WaitForMemoryStateChangeSignalFromDriver関数は、最大で１秒待ってから、関数コールから戻り、プロセッサを他のタスクに譲ることになる。変数、初期TotalMemConsumedは、消費されるメモリであり、ゼロ（０）に初期設定される。次に、ステップ１１５で、プロセスは、デバイス・ドライバからの状態変化信号（割込み）を待ち、変数RESULTをその状態変化値、すなわちWaitForMemoryStateChangeSignalFromDriver (WaitTimeOut)に等しく設定する。次に、ステップ１２０で、ドライバから通知イベント（状態変化）を受け取ったかどうか判定する。状態変化が何も起きていない場合には、プロセスは、ステップ１５０に進み、そこで、更新された統計を入手し、図３に関して述べる何らかのメモリ使用修正計算を実行するプロセスを開始する。状態変化が存在する場合、ステップ１２５で、その変化が終了イベントであるかどうか判定する。受け取ったイベントが終了イベントである場合には、ステップ１３０で、プロセスは終了する。状態変化が起きており、かつそれが終了イベントではなかった場合には、プロセスは、ステップ１４０に進み、そこで、現行のメモリ状態値をその結果に設定する。次に、メモリ使用統計を集めるステップ１５０を実行し、プロセスは、ステップ１１０に戻って反復する。後でより詳細に説明するとおり、メモリ使用統計は、３つのソース、デバイス・ドライバ、Ｏ／Ｓ、およびランダムに選択されたメモリ・ページ・サンプリングからもたらされる。
【００４１】
次に、図２に示すプロセスのＣ＋＋様疑似コードを示す。
0003745690.tif 000002
0003745690.tif 000003
【００４２】
詳細には、図３は、図２に示したメモリ使用修正を行うプロセス１５０を示している。メモリ使用修正プロセス・ループ１５０において、第１ステップ１５５で、メモリ状態すなわちメモリ統計を集める。次に、ステップ１６０で、デバイス・ドライバによって提供される統計に従って、現在使用されている実メモリ（CurrRealUsed）を計算する。次に、ステップ１６５で、現在使用されている物理メモリ（CurrPhysUsed）を計算する。この値は、物理メモリ使用のサイズに圧縮変換テーブル（ＣＣＴ）のサイズ（CCTLength）と、すべての定義済み非圧縮メモリ領域のサイズと、NonSwappablePages (SizeOfNonSwapPages)のサイズとを加えたものを含む。通常、非圧縮メモリ領域は、１ＭＢであり、これはBIOSによってセットアップされる。これが必要なのは、圧縮メモリ・コントローラ・チップによって報告される物理メモリ使用が、これらの値を考慮していないからである。次のステップ１７０で、現行メモリ状態（圧縮メモリ管理アルゴリズムのメイン・ループ１００内で判定される）が安定状態であり、かつステップ１６５で計算される現行の物理メモリが、最低使用水準（MinConsumptionPhysical）よりも低いかどうか評価する。ステップ１７０で、現行メモリ状態が安定状態であり、かつステップ１６５で計算される現行の物理メモリが、最低しきい値より小さくないと判定された場合には、プロセスは、ステップ１７５に進み、メモリ・サイズをどのように調整すべきかを表す目標実メモリ使用（TargetedRealUsage）を計算する。つまり、使用中の物理メモリの量にブート圧縮比を掛けることによって、変数TargetedtRealUsageを算出する。必要なメモリ調整を決定するため、このTargetedtRealUsageから、使用中の実メモリの実際量にメモリ・イータによって既にホールドされているメモリの総量を加えたものを引く。これが、変数AdjustmentRealである。負の結果は、システムの圧縮可能性がブート圧縮比に等しいか、またはそれよりも大きいことを意味する。これは、メモリ・イータがメモリのAdjustmentRealユニットを解放してシステムに戻すべきことを意味する。詳細には、使用中の物理メモリの量に基づいて、どれだけの実メモリが使用中であるか計算をする。これは、メモリ・システムのブート圧縮比にステップ１６５で計算した現行の使用される物理メモリCurrPhysUsedを掛けたものに等しい。次に、ステップ１８０で、実メモリ調整（AdjustmentReal）に関する値を計算する。これは、TargetedRealUsageから、CurrRealUsedにTotalMemConsumedを加えたものを含む量を引いたものに等しい。次に、ステップ１８２で、AdjustmentReal < 0であるかどうか判定する。AdjustmentRealが０より小さい場合には、プロセスは、ステップ１８５に進み、そこで、AdjustmentReal変数をmax_of (AdjustmentReal, TotalMemConsumed)に等しく設定する。これは、確実に利用可能な量だけ解放されるようにするためである。詳細には、条件が急速に低下しないように、メモリは、獲得するのよりも遅いレートで解放することが望ましい。反復するメモリ調整のどの回でも、解放される量に解放レート係数を適用することができる。
【００４３】
ステップ１８２に戻り、AdjustmentRealが０に等しいか、またはそれより大きいと判定された場合には、メモリ・イータは、メモリのAdjustmentユニットを割り振らなければならない。その際に、メモリ・イータは、必要なメモリを求めて、Ｏ／Ｓメモリ割振り機能を呼び出す。次に、メモリ・イータは、デバイス・ドライバにメモリに対するポインタ、その長さを渡し、そのエリアが含むすべてのページ上でゼロ・ページ操作を実行する。これらのステップはステップ１８８、１９０、１９２、１９５に示されている。詳細には、ステップ１８８で、AdjustmentReal変数をmin_of (AdjustmentReal、MaxMemToTakeAway-TotalMemConsumedの量）に等しく設定する。ここで、MaxMemToTakeAwayは、本明細書で定義する、バイトで表した回復すべき総実メモリである。この計算は、要求される調整が確実にメモリ・イータの食うことができる量の範囲内にあるようにするために行う。例えば、MaxMemToTakeが１００メガバイトであり、AdjustmentRealが１００メガバイトであり、TotalMemConsumed（イータが既にホールドしている量）が２５メガバイトである場合には、イータは７５メガバイトしかホールドすることができない。すなわち、Adjustmentはmin_of (100,100-25)=75メガバイトである。次に、ステップ１９０で、モニタを介してこの調整値を共用メモリ・ブロック内に書き込むことにより、メモリ・イータを働かせる。次に、ステップ１９２、１９５で、内部統計を更新する。
【００４４】
次に、図３に示すプロセスのＣ＋＋様疑似コード記述を提示する。
0003745690.tif 000004
0003745690.tif 000005
0003745690.tif 000006
【００４５】
警告状態および緊急状態
警告状態または緊急状態に入ったとの通知をCompMemMgrが受けた場合、CompMemMgrは、次の反復のタイムアウトを０に切り替えることになる。これは、メモリ条件をCompMemMgrが分析すること、およびそのメモリ条件をメモリ・イータが保証することにできる限り多くのＣＰＵ時間を費やすことができるように行われる。また、メモリ使用が緊急状態に移行したことを示すドライバからの信号を待つ、プロセッサごとに１つのＣＰＵブロッカ・スレッドも存在していることを思い起こされたい。ＣＰＵブロッカは、緊急状態の通知を受けると、それがバインドされているＣＰＵを独占することになる。これは、他のすべてのユーザ・アプリケーションが実行されるのをブロックする働きをする。これが必要なのは、システムが緊急状態に入ると、物理メモリがほとんど尽きかけているからである。ユーザ・アプリケーションが動作するのを許すと、メモリ条件をさらに低下させて、マシンが停止するのを引き起こす。ＣＰＵブロッカは、CompMemMgrとメモリ・イータのすぐ下の優先レベルで動作する。これにより、圧縮メモリ管理をブロック・スレッドより優先させることができるが、また、ブロック・スレッドが他のユーザ・モード・アプリケーションをブロックすることも可能になる。ＣＰＵブロッカ・スレッドは、メモリ・システムが安定状態または警告状態に戻ったとの知らせを受けたとき、ＣＰＵを「独占する」のを止める。この時点で、他のアプリケーションに動作の続行を許しても安全である。
【００４６】
調整優先順位
Ｏ／Ｓ自体は、通常またはそれより高い優先順位で動作するスレッドを有する。これらのスレッドは、非常に短い時間だけ動作し、システムの全体的な圧縮可能性を変化させる可能性はないので、圧縮制御には問題とならない。ただし、他のアプリケーションが、長時間、圧縮制御よりも高い優先レベルで実行されることが可能であり、これは、理論上、圧縮制御にとって問題となり得る。これらの優先レベルで動作するアプリケーションは、ＣＰＵを譲らず、仮想メモリ・マネージャ自体の正常な動作を妨げ、Ｏ／Ｓに間違った振る舞いをさせる可能性があることに留意されたい。これらのアプリケーションが圧縮制御ソフトウェアを妨害するのを回避する１つの方式は、緊急状態にある間、コントロールにプロセスの優先順位を動的に下げさせ（またはプロセスを完全にサスペンドさせ）ることである。この優先順位は、危機が修正された後、リストアすることができる。
【００４７】
本発明を、特にその例示的な実施形態および実行した実施形態に関して図示し説明してきたが、添付の特許請求の範囲のみによって制限されるべき本発明の趣旨および範囲を逸脱することなく、その形態および詳細に関して、前記その他の変更を加え得ることが、当分野の技術者には理解されよう。
【００４８】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００４９】
（１）オペレーティング・システムと、物理メモリおよびプロセッサから見たメイン・メモリの量として特徴付けられる実メモリを定義する圧縮メイン・メモリとを有し、前記圧縮メイン・メモリに対するプロセッサ・アクセスを制御する圧縮メモリ・ハードウェア制御装置を含むコンピュータ・システムにおいて、実メモリ使用を管理する装置であって、
実メモリ使用情報を前記圧縮メモリ・ハードウェア・コントローラから受け取るための圧縮メモリ・デバイス・ドライバであって、前記情報が前記実メモリ使用状態の特徴付けを含むドライバと、
前記メモリ使用を監視し、前記メモリ使用状態に応じてメモリ割振りおよびメモリ回復を開始する圧縮管理サブシステムであって、メモリ状態変化を制御するためにメモリ使用しきい値を調整する機構を含むサブシステムとを含み、
前記コンピュータ・システム内の前記実メモリ使用の制御が、前記オペレーティング・システムにとってトランスペアレントである装置。
（２）前記メモリ・コントローラ・ハードウェアが、物理実メモリ使用しきい値を超過するメモリ使用を示す割込みを生成する割込み生成機構を含み、前記実メモリ使用の前記特徴付けが、使用される物理メモリの量に応じた１組のメモリ状態を含む、上記（１）に記載の実メモリ使用を管理する圧縮メイン・メモリ制御装置。
（３）前記メモリ・コントローラ・ハードウェアは、物理メモリ使用しきい値に関連する１つまたは複数のしきい値レジスタを含み、前記割込みは、使用しきい値を超えたときに生成される上記（１）に記載の実メモリ使用を管理する圧縮メイン・メモリ制御装置。
（４）前記デバイス・ドライバはさらに、前記割込みに応答して現行のメモリ使用状態に応じて前記物理メモリ使用しきい値を調整する機構を含む上記（１）に記載の実メモリ使用を管理する圧縮メイン・メモリ制御装置。
（５）現行のメモリ使用しきい値は、安定状態、警告状態、および緊急状態のうちの１つを含むメモリ状態に関連する値を含み、各状態に関する前記しきい値は、
安定状態しきい値＜警告状態しきい値＜緊急状態しきい値
に従って管理される上記（３）に記載の実メモリ使用を管理する圧縮メイン・メモリ制御装置。
（６）前記デバイス・ドライバはさらに、前記割込みに応答して、前記コンピュータ・システム上で動作するクライアント・アプリケーションに低物理メモリ使用割込みを同報通信する機構を含む、上記（１）に記載の実メモリ使用を管理する圧縮メイン・メモリ制御装置。
（７）メモリ状態は、前記しきい値に応じて、安定状態、警告状態、および緊急状態のうちの１つを含み、前記デバイス・ドライバは、前記メモリ・コントローラをポーリングし、前記警告状態および前記緊急状態にあるとき、しきい値を再調整すべきかどうか決定するポーリング機構を含む上記（１）に記載の実メモリ使用を管理する圧縮メイン・メモリ制御装置。
（８）各前記メモリしきい値は、ユーザによってプログラム可能であり、前記デバイス・ドライバは、ユーザがメモリ使用しきい値を設定できるようにする、前記メモリ・コントローラ・ハードウェアに対するインターフェースを含む上記（１）に記載の実メモリ使用を管理する圧縮メイン・メモリ制御装置。
（９）前記圧縮管理サブシステムは、前記システムにメモリを割振ること、または前記システムから前記メモリを解放することのうち１つを実行する１つまたは複数のメモリ・イータ・プロセスを生成する機構を含む上記（５）に記載の実メモリ使用を管理する圧縮メイン・メモリ制御装置。
（１０）生成されるメモリ・イータ・プロセスの数は、前記システムから回復される総実メモリ量に依存する上記（９）に記載の実メモリ使用を管理する圧縮メイン・メモリ制御装置。
（１１）前記システムから回復される前記総実メモリ量は、オペレーティング・システムから見た実メモリの総量とシステム内にある物理メモリの総量の差に等しい上記（１０）に記載の実メモリ使用を管理する圧縮メイン・メモリ制御装置。
（１２）前記圧縮管理サブシステムは、割り振るまたは解放する必要のある物理メモリの量を含む調整量を決定する機構を含み、前記調整量は、前記システムのブート圧縮比に基づく上記（９）に記載の実メモリ使用を管理する圧縮メイン・メモリ制御装置。
（１３）前記圧縮管理サブシステムは、前記システム内で動作する単一のプロセッサと関連付けるための１つまたは複数のブロッカ・プロセスを生成する機構を含み、各ブロッカ・プロセスは、関連するプロセッサにバインドされてプロセッサ時間を独占し、メモリ使用が前記緊急状態しきい値を超過したとき、前記システム内で動作する他のアプリケーションが実行されるのを防止する上記（５）に記載の実メモリ使用を管理する圧縮メイン・メモリ制御装置。
（１４）前記圧縮管理サブシステムは、一度にメモリの１つまたは複数のページを割り振る機構を含む上記（１２）に記載の実メモリ使用を管理する圧縮メイン・メモリ制御装置。
（１５）前記実メモリ使用情報は、メモリ圧縮統計を含む上記（１）に記載の実メモリ使用を管理する圧縮メイン・メモリ制御装置。
（１６）オペレーティング・システムと、物理メモリおよびプロセッサから見たメイン・メモリの量として特徴付けられる実メモリを定義する圧縮メイン・メモリとを有し、前記圧縮メイン・メモリに対するプロセッサ・アクセスを制御する圧縮メモリ・ハードウェア制御装置を含むコンピュータ・システムにおいて、実メモリ使用を管理する方法であって、
実メモリ使用情報を前記圧縮メモリ・ハードウェア・コントローラから受け取るステップであって、前記情報が、前記実メモリ使用状態の特徴付けを含むステップと、
前記メモリ使用を監視し、前記メモリ使用状態に応じてメモリ割振りおよびメモリ回復を開始するステップと、
メモリ状態変化を制御するためにメモリ使用しきい値を調整するステップとを含み、前記コンピュータ・システム内の前記実メモリ使用の制御が、前記オペレーティング・システムにとってトランスペアレントである方法。
（１７）物理実メモリ使用しきい値を超過するメモリ使用を示す割込みを生成するステップであって、前記実メモリ使用の前記特徴付けが、使用される物理メモリの量に応じた１組のメモリ状態を含むステップをさらに含む上記（１６）に記載の実メモリ使用を管理する方法。
（１８）前記メモリ・コントローラ・ハードウェアは、物理メモリ使用しきい値に関連する１つまたは複数のしきい値レジスタを含み、前記割込みは、使用しきい値を超えたときに生成される上記（１６）に記載の実メモリ使用を管理する方法。
（１９）現行のメモリ使用状態に応じて前記物理メモリ使用しきい値を調整するステップをさらに含む上記（１６）に記載の実メモリ使用を管理する方法。
（２０）現行のメモリ使用しきい値は、安定状態、警告状態、および緊急状態のうちの１つを含むメモリ状態に関連する値を含み、各状態に関する前記しきい値は、
安定状態しきい値＜警告状態しきい値＜緊急状態しきい値
に従って管理される上記（１９）に記載の実メモリ使用を管理する方法。
（２１）前記コンピュータ・システム上で動作するクライアント・アプリケーションに低物理メモリ使用割込みを同報通信するステップをさらに含む上記（１６）に記載の実メモリ使用を管理する方法。
（２２）メモリ状態は、前記しきい値に応じて、安定状態、警告状態、および緊急状態のうちの１つを含む、実メモリ使用を管理する方法であって、前記メモリ・コントローラ・ハードウェアをポーリングし、前記警告状態および前記緊急状態にあるとき、しきい値を再調整すべきかどうか決定するステップをさらに含む上記（１６）に記載の方法。
（２３）ユーザがメモリ使用しきい値を設定できるようにするステップをさらに含む上記（１６）に記載の実メモリ使用を管理する方法。
（２４）前記システムにメモリを割振ること、または前記システムから前記メモリを解放することのうち１つを実行する１つまたは複数のメモリ・イータ・プロセスを生成するステップをさらに含む上記（２０）に記載の実メモリ使用を管理する方法。
（２５）前記システムから回復される総実メモリ量に基づいて生成するメモリ・イータ・プロセスの数を決定するステップをさらに含む上記（２４）に記載の実メモリ使用を管理する方法。
（２６）割り振るまたは解放する必要のある物理メモリの量を含む調整量を決定するステップであって、前記調整量が、前記システムのブート圧縮比に基づくステップをさらに含む上記（２５）に記載の実メモリ使用を管理する方法。
（２７）前記システム内で動作する単一のプロセッサと関連付けるための１つまたは複数のブロッカ・プロセスを生成するステップであって、各ブロッカ・プロセスが、関連するプロセッサにバインドされてプロセッサ時間を独占し、メモリ使用が前記緊急状態しきい値を超過したとき、前記システム内で動作する他のアプリケーションが実行されるのを防止するステップをさらに含む上記（２４）に記載の実メモリ使用を管理する方法。
（２８）一度にメモリの１つまたは複数のページを割り振るステップをさらに含む上記（１６）に記載の実メモリ使用を管理する方法。
【図面の簡単な説明】
【図１】本発明による圧縮管理ソフトウェア・アーキテクチャを示すブロック図である。
【図２】圧縮メモリ管理サブシステム・アルゴリズムを示す流れ図である。
【図３】圧縮メモリ管理サブシステム・アルゴリズムを示す流れ図である。
【符号の説明】
１０  圧縮管理ソフトウェア・アーキテクチャ
２０  デバイス・ドライバ
２４  圧縮メモリ統計モジュール
２６  モジュール
２８  モジュール
５０  圧縮管理サービス
５４  圧縮メモリ管理サービス・モジュール
５５  ブロッカ・スレッド
６０  メモリ・イータ
６５  ユーザ・アプリケーション
７５  Ｏ／Ｓカーネル
７７  仮想メモリ・マネージャ
８０  圧縮メモリ・コントローラ・ハードウェア
８１  割込み
【図１】
0003745690.tif 000007
【図２】
0003745690.tif 000008
【図３】
0003745690.tif 000009