(57)【要約】【課題】コンピュータ・システムのメイン・メモリをそのオペレーティング・システムのインスタンスで実行するアプリケーション間に効率的に配分する方法、情報処理システム、およびコンピュータ読み取り可能媒体を提供する。【解決手段】仮想メモリ・マネージャのページ置換アルゴリズムで使用する閾値を、コンピュータ・システムのメモリ負荷に応答して自動的に調整する。ある前記閾値は、メモリ負荷の関数として変更する空きメモリの下限閾値である。例えば、このような負荷を、所定の時間間隔の間に待ち行列に加えられたスレッドの数を、その間隔のクロック・ティックの数で割った値で表すことができるであろう。この値はスレッド待機率として知られる。さらにこの率を目標率と比較して、下限閾値の値を変更するべきかどうかを判断する。空きメモリ空間が下限閾値未満になったら、ページ置換デーモンを使ってメモリをページアウトして、利用できるメモリ空間を増やす。【選択図】図２
2008505389.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ・システムのメモリの可用性を管理する方法で、前記方法が、
空きメモリ空間の下限閾値をメモリ負荷の関数として自動的に変更するステップと、
空きメモリ空間が前記下限閾値未満になったときに、利用できるメモリ空間を増やすステップとを有する、方法。
【請求項２】
コンピュータ・システムのメモリの可用性を管理する方法で、前記方法が、
スレッド待機率が目標スレッド待機率と差が出てきたときに、空きメモリ空間の下限閾値を自動的に変更するステップで、前記スレッド待機率が単位時間あたりの空きメモリの待機リストに待機しているスレッドの平均数である、前記ステップと、
空きメモリ空間が前記下限閾値未満になったときに、利用できるメモリ空間を増やすステップとを有する、方法。
【請求項３】
前記スレッド待機率が前記目標スレッド待機率よりも高くなったときに、前記下限閾値を上げる、請求項２に記載の方法。
【請求項４】
前記スレッド待機率が前記目標スレッド待機率よりも低くなったときに、前記下限閾値を下げる、請求項２に記載の方法。
【請求項５】
前記スレッド待機率が前記目標スレッド待機率よりも高くなったときに、上限閾値を上げ、前記上限閾値を使って、ページ置換デーモンを実行するとき、利用できるようにするメモリ空間の量を判断する、請求項２に記載の方法。
【請求項６】
前記スレッド待機率が前記目標スレッド待機率よりも低くなったときに、上限閾値を下げ、前記上限閾値を使って、ページ置換デーモンを実行するとき、利用できるようにするメモリ空間の量を判断する、請求項２に記載の方法。
【請求項７】
前記スレッド待機率を、空きメモリの待機リストで待機している全スレッドが費やすクロック・ティックの累積数をカウントして、前記累積数を前記ページ置換デーモンの連続２回の実行の間のクロック・ティックの総数で割って計算できる、請求項５に記載の方法。
【請求項８】
前記スレッドが現在前記空きメモリの待機リストにある第１スレッドと、前記ページ置換デーモンの前記連続２回の実行の最初の実行の後に前記空きメモリの待機リストにあったが、もはや前記空きメモリの待機リストにない第２スレッドとを有する、請求項７に記載の方法。
【請求項９】
前記スレッド待機率を、空きメモリの待機リストに現在あるスレッドの数をある数で割って計算できる、請求項２に記載の方法。
【請求項１０】
前記数が整数の２である、請求項９に記載の方法。
【請求項１１】
空きメモリ空間が前記下限閾値未満になったときにページ置換デーモンを実行し、前記ページ置換デーモンが利用できるメモリ空間を増やす、請求項２に記載の方法。
【請求項１２】
空きメモリ・フレームの数が下限閾値未満になったときに前記ページ置換デーモンを実行し、前記ページ置換デーモンが、フリー・フレームの数が上限閾値に達するようにフレームの数を解放するステップを有する、請求項１１に記載の方法。
【請求項１３】
コンピュータ・システムのメモリの可用性を管理するためのプログラムであって、該プログラムが、
空きメモリ空間の下限閾値をメモリ負荷の関数として自動的に変更するステップと、
空きメモリ空間が前記下限閾値未満になったときに、利用できるメモリ空間を増やすステップとをコンピュータに実行させるプログラム。
【請求項１４】
コンピュータ・システムのメモリの可用性を管理する装置で、前記装置が、
空きメモリ空間の下限閾値をメモリ負荷の関数として自動的に変更する手段と、
空きメモリ空間が下限閾値未満になったときに、利用できるメモリ空間を増やす手段とを有する、装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ・オペレーティング・システムの仮想メモリの管理コンポーネントに関する。さらに具体的には、本発明はオペレーティング・システムの仮想メモリ・マネージャのあらゆるページ置換アルゴリズムで使用する閾値の調整に関する。
【背景技術】
【０００２】
マシン上で実行するオペレーティング・システム（ＯＳ）の仮想メモリ・マネージャ（ＶＭＭ）コンポーネントは、マシンのメイン・メモリをそのＯＳインスタンスで実行するアプリケーション間に効率的に配分する役割をする。ＶＭＭの主な役割の１つが、十分に利用されていないメイン・メモリのブロックのコンテンツ（「フレーム」もしくは「ページ・フレーム」という）をディスク上のページング・スペースにページアウトすることと、そのフレームをメイン・メモリを必要とする別のアプリケーションに再割り当てすることである。これは一般的には、「ページ置換デーモン」（ほとんどのＵＮＩＸオペレーティング・システムでは「ＬＲＵデーモン」ともいう）と呼ばれるデーモン・プロセスの助けを借りて行う。
【０００３】
フレームを解放するプロセス（すなわち、そのコンテンツをディスクに移動してフリー・フレームにする行為）はフリー・フレームを要求するアプリケーション（フリー・フレームの使用者）に割り当てるプロセスよりもかなり時間が長くかかるため、ページ置換デーモンはＯＳのフリー・フレームが余分に必要になることを見越して、ＯＳのフリー・フレームの数がゼロになる前に、フレームのページアウトを開始するのが一般的である。ＶＭＭはページ置換デーモンを開始する時期と各実行で解放すべきページ数を、２つの調整可能なパラメータｍｉｎ＿ｆｒｅｅおよびｍａｘ＿ｆｒｅｅを使って決定できる。ページ置換デーモンはフリー・フレームの数がｍｉｎ＿ｆｒｅｅ未満になるとすぐに開始し、各実行の最後にフリー・フレームの数がｍａｘ＿ｆｒｅｅに達するように十分なページを解放する。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
現在、これらのパラメータは、ＶＭＭのパフォーマンスを調整して、ＯＳで実行するアプリケーションのニーズに合わせるために、システム・アドミニストレータが明確に入力しなければならない。この調整には人手による入力が必要なため、これらのパラメータが調整されることはほとんどなく、その結果ＶＭＭは、そのためＯＳも次善のパフォーマンスしか得られていない。この調整不足によりＩＴ組織のコストがかかる。
【課題を解決するための手段】
【０００５】
本発明の目的は、システム・アドミニストレータによるＶＭＭの手作業による調整の必要をなくして、システムのパフォーマンスを改善することである。本発明の重要な利点は、ＯＳがその作業負荷の変動にはるかに反応性／適応性があることである。さらに具体的には、本発明はＶＭＭシステム・パラメータの調整を、ＯＳのメモリ負荷の変動に応答してその値を自動的に変えることによって自動化する。
【０００６】
本発明は、ＯＳのメモリ負荷に応答して、下限閾値として知られるパラメータを自動的に変更することによって、ＯＳのメモリの可用性を高める方法を提供する。現在の空きメモリ空間が下限閾値未満になるとき、より多くの空きメモリ空間を作る。
【発明を実施するための最良の形態】
【０００７】
本発明に関する主題は、本明細書の前にある請求項で具体的に指摘し、かつ個別に請求する。本発明の前述並びにその他の特徴および利点は、添付の図面と合わせて以下の詳細な説明を読めば明らかになるであろう。
【０００８】
本発明のより具体的な好適な実施例は、空きメモリ空間の下限閾値を初期値に設定し、現在の「スレッド待機率」が目標の「スレッド待機率」と異なるときに、この下限閾値を自動的に変更することによって、ＯＳのメモリ・マネージャを自動的に調整する方法を提供する。「スレッド待機率」とは、規定の時間間隔における単位時間あたりのスレッド待ちの数である。さらに、メモリ・マネージャは、空きメモリ空間が下限閾値未満になるときに利用できるメモリ空間を増やす操作を開始する。
【０００９】
図１を参照すると、代表的なオペレーティング・システム・カーネル１０は、仮想メモリ・マネージャ（ＶＭＭ）２０、プロセス・マネージャ３０、ファイルシステム４０、ネットワーキング・サブシステム５０等の複数のコンポーネントからなる。ファイルシステム４０はハードディスク・ドライブへの構造的なアクセスを提供する。プロセス・マネージャはプロセスのスケジュールを管理して、プロセッサにスレッドを割り当て、一方ネットワーキング・サブシステムはアプリケーションが他のマシンまたはコンピュータと通信するのを可能にする。本発明は、オペレーティング・システム（ＯＳ）の仮想メモリ・マネージャ・コンポーネントに関係しており、他のコンポーネントは技術上よく知られているため本出願では説明しない。図２は、ＶＭＭ２０がシステムのメモリの管理を維持するデータ構造の一部を示す。ＶＭＭ２０は、フリー・ページ・フレーム２２のトラックを実メモリに保持する一又は複数のフリー・リスト２１を維持する。ＶＭＭ２０はフリー・フレームの総数も変数ｎｆｒｅｅ６３に維持する。フリー・ページの要求がきたら、ＶＭＭ２０はｎｆｒｅｅが＞０かどうかをチェックし、もしそうなら、そのフリー・リスト２１を検索してフリー・ページを確保する。ｎｆｒｅｅ６３の値が下限閾値値ｍｉｎ＿ｆｒｅｅ６１未満の場合、ＶＭＭ２０はページ置換デーモン（ＬＲＵデーモンとしても知られる）２５を呼び出して、ページアウトを開始し、使用中のページ・フレーム２３のコンテンツをディスク５１に退避させることによってフリー・ページ・フレーム２２を作成する。ここで説明する実施例では、このページアウトは、ページ置換デーモンと呼ばれる個別のプロセスで行う。ページ置換デーモンは、その実行の最後に、ｎｆｒｅｅがｍａｘ＿ｆｒｅｅ以上になるような十分な数のページ・フレームをページアウトする。フリー・ページ・フレームの要求が満たされないものはすべて、図２に図示する待機リスト３２に入れられる。フリー・ページ・フレームが後で利用できるようになったら、要求するスレッド３３がウェイクアップされる。
【００１０】
ページ置換デーモンが使用する高次のアルゴリズムを図３に示す。ブロック１０１は、ｎｆｒｅｅ＜ｍｉｎ＿ｆｒｅｅのときのページ置換デーモンの呼び出しを表す。１０２で、ページ置換デーモンは、ｍａｘ＿ｆｒｅｅ６１からｎｆｒｅｅ６３を引いて、ページアウトするページ数を計算する。１０３で、使用中のページ・フレーム・リスト２３をスキャンして、退避させるのに適切な候補を見つける。ページ置換デーモンが退避させるページの候補を選択するのにメモリのスキャンを開始したら、どのページをページアウトするかを決めるにはいくつかのポリシーがある。本発明は退避させるページの候補選びに特に決まったポリシーに依存しない。１０２で計算したページ数を退避させたら、１０４でページ置換デーモンはｎｆｒｅｅがまだｍａｘ＿ｆｒｅｅ未満かどうかをもう一度チェックする。ページ・フレームを解放した直後に消費される場合には、そうなる可能性があるからである。１０４の述語が真なら、分岐線１０６に進んで、ステップ１０２を再開する。そうでなければ、分岐線１０５に進んで、ページ置換デーモンは１０７でスリープに戻る。
【００１１】
上記説明によると、ＶＭＭのページ置換デーモンの最終目標は、待機リスト３２に過多のフリー・ページを要求するスレッド３３をもつコストと、過多の使用中のページ２４を早期に退避させるコストとのバランスをとることである。本発明は、パラメータｍｉｎ＿ｆｒｅｅ６１およびｍａｘ＿ｆｒｅｅ６２の最適値を判断して、これらパラメータをフリー・フレームの変動を待っているスレッドの数に応じて継続的に調整するメカニズムを提供することによって、この問題を解決する。
【００１２】
図４は、本発明の実装に必要な好適な実施例のデータ構造を示す。要求するスレッドの数と、待機リストで各要求するスレッドがフリー・フレームを待つ時間数を継続的にモニターする必要がある。これは変数ｔｈｒｄ＿ｗａｉｔ３５を維持することによって行う。
【００１３】
ｔｈｒｄ＿ｗａｉｔ３５の値は次のとおり更新する。スレッド３３が待機リスト３２に入る度に、オペレーティング・システムはスレッドがスレッドあたりの変数ｗａｉｔｌｉｓｔ＿ｅｎｑｕｅ＿ｔｉｍｅ３６で待ち行列に入っている時間を表す。フリー・ページが利用できるようになってそのスレッドが最終的に待ち行列から出されたら、ＯＳは現在時刻からｗａｉｔｌｉｓｔ＿ｅｎｑｕｅ＿ｔｉｍｅ３６を引いて、スレッドが待機リストで費やした合計時間を出す。次に、ＯＳはこの合計時間をクロック・ティックに変換して、それにｔｈｒｄ＿ｗａｉｔ３５カウンタに追加すると、カウンタは待機リストですべてのスレッドが合わせて消費したクロック・ティックの合計時間数に相当する。このカウンタは、図５で説明するようにページ置換デーモンでリセットされる。そのため、ｔｈｒｄ＿ｗａｉｔ３５カウンタは、待ち行列に入れられて、後で、ページ置換デーモンの２つの実行の間のある時点で待機リストから出されたすべてのスレッドの合計待ち時間に相当する。ページ置換デーモンは別の変数ｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅ３７を維持するが、これはクロック・ティックあたりの待機スレッドの平均数である。これはクロック・ティックあたりのカウント単位で維持されるため、この値はＣＰＵの周波数が異なる様々なシステム全体で統一できる。ページ置換デーモンが始動する度に、すべてのスレッドが最後の実行以降待機に費やした合計時間数の累計と、２つの実行の間に含まれるクロック・ティック数との比として、ｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅ３７の値を計算する。ページ置換デーモンは別の変数ｓｔｒｔ＿ｔｉｍｅ３９も維持し、それを使って前述した２つの実行の間に含まれるクロック・ティック数を計算する。最後に、ページ置換デーモンは図４に示すｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅ＿ｔｇｔ３８の値を使って、ｍｉｎ＿ｆｒｅｅおよびｍａｘ＿ｆｒｅｅをどれくらい変更しなければならないかを計算する。
【００１４】
図５に示すフローチャートは、ページ置換デーモンの新しい機能をまとめている。ブロック２０１は、ｎｆｒｅｅ＜ｍｉｎ＿ｆｒｅｅの場合のページ置換デーモンの呼び出しを表す。２０２で、ページ置換デーモンは、その最後の実行以降の経過時間と、すべてのスレッドが最後の実行以降待機リストで費やしたクロック・ティックの合計時間数を計算する。経過時間は、システムの現在時刻を読みとって、以前に記録されたｓｔｒｔ＿ｔｉｍｅ３８の値を引いて計算する。すべてのスレッドが最後の実行から待機している合計時間数は、２つの部分からなる。最初の部分は、現在待機リストに入っていないスレッドの合計待ち時間である。これはＯＳによりｔｈｒｄ＿ｗａｉｔカウンタに維持される。２つめの部分は、すでに待機リストにあって待ち状態で費やしているスレッドの合計時間である。ページ置換デーモン２５は、待機リスト３２をウォークスルーし、現在時刻から各スレッドのｗａｉｔｌｉｓｔ＿ｅｎｑｕｅ＿ｔｉｍｅ３６を引いて、すべての待ち時間を合計することによって、この２つめの部分を計算する。待機リストに入るまたは出るすべてのスレッドの合計待ち時間は、上記値をｔｈｒｄ＿ｗａｉｔカウンタ３５に足して計算する。
【００１５】
すべてのスレッドの合計待ち時間を計算する代替法は、クロック・ティックごとに１回待機リストにポーリングして待機リストのスレッドの数をカウントし、それをｔｈｒｄ＿ｗａｉｔカウンタに加える。この場合、ページ置換デーモンは各実行の始めに待機リストをウォークスルーする必要はない。欠点は、ＯＳがクロック・ティックの度に追加作業をする必要があるため、かなりのオーバーヘッドになりうることである。
【００１６】
ページ置換デーモンが２０２で経過時間と合計スレッド待ち時間を計算するとき、タイムスタンプ値ｓｔｒｔ＿ｔｉｍｅとスレッドごとのｗａｉｔｌｉｓｔ＿ｅｎｑｕｅ＿ｔｉｍｅも、これら変数を読み込んだ直後のシステムの現在時刻にリセットする。ｔｈｒｄ＿ｗａｉｔ＿ｔｉｍｅも０にリセットして、このカウンタが今から待機リストに行く全スレッドの待ち時間に対応させるようにする。２０３で、ページ置換デーモンは、合計スレッド待ち時間を経過時間で割って、ｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅ３６を計算する。２０４で、以下に示すように、上記計算したｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅと予め設定した目標値ｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅ＿ｔｇｔとの差に基づいて、ｍｉｎ＿ｆｒｅｅ６１およびｍａｘ＿ｆｒｅｅ６２の値を再計算する。
【００１７】
望ましいｍｉｎ＿ｆｒｅｅ値は、ｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅがｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅ＿ｔｇｔよりも高い場合に増やし、ｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅがｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅ＿ｔｇｔよりも低い場合に減らす。実施例では、望ましいｍｉｎ＿ｆｒｅｅは以下に示すようにメモリ負荷の関数として計算する。
【００１８】
望ましいｍｉｎ＿ｆｒｅｅ＝ｍｉｎ＿ｆｒｅｅ×ｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅ／ｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅ＿ｔｇｔ
【００１９】
ｍｉｎ＿ｆｒｅｅパラメータは、望ましいｍｉｎ＿ｆｒｅｅ値と現在値の平均として更新する。この平均化は、作業負荷の突発的な急増による振幅に対するある程度の減幅を提供する。スラッシングを避けるために、ページ置換デーモンによって更新できるｍｉｎ＿ｆｒｅｅ値に上限を課すこともできる。
【００２０】
ｍａｘ＿ｆｒｅｅパラメータは、このｍｉｎ＿ｆｒｅｅの更新前と同じｍａｘ＿ｆｒｅｅとｍｉｎ＿ｆｒｅｅとの差を維持するように更新する。
【００２１】
例：ｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅ＿ｔｇｔを１に設定し、ｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅの計算値が１．５で、ｍｉｎ＿ｆｒｅｅおよびｍａｘ＿ｆｒｅｅがそれぞれ１２０および１２８と仮定する。望ましいｍｉｎ＿ｆｒｅｅは、１２０×１．５／１＝１８０となる。ページ置換デーモンはｍｉｎ＿ｆｒｅｅを、望ましいｍｉｎ＿ｆｒｅｅと現在のｍｉｎ＿ｆｒｅｅとの平均に変更するので、１２０＋１８０／２＝１５０である。ｍａｘ＿ｆｒｅｅの新たな値は、１５０＋（１２８−１２０）＝１５８となる。
【００２２】
前述した単純な線形近似の代わりに、ｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅの偏差から望ましいｍｉｎ＿ｆｒｅｅ値を計算するいくつかの代替法も使用できる。望ましいｍｉｎ＿ｆｒｅｅ値を計算するのに使う方法は、ｍｉｎ＿ｆｒｅｅを、ｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅ＞ｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅ＿ｔｇｔの場合に増やし、ｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅ＜ｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅ＿ｔｇｔの場合に減らすという一般原則を守るべきである。
【００２３】
ｍｉｎ＿ｆｒｅｅおよびｍａｘ＿ｆｒｅｅの値を再計算した後、ページ置換デーモンのステップの残り、２０５、２０６、２０７、２０８、２０９、２１０は、それぞれ図３の１０２、１０３、１０４、１０５、１０６、１０７のステップと同様である。より具体的には、２０５で、ページ置換デーモンは、ｍａｘ＿ｆｒｅｅ６１からｎｆｒｅｅ６３を引いて、ページアウトするべきページ数を計算する。２０６で、使用中のページ・フレーム・リストをスキャンして、退避させるのに適切な候補を見つける。ページ置換デーモンが退避させるページの候補を選択するためにメモリをスキャンし始めたら、どのページをページアウトするかを決めるポリシーはいくつかある。本発明は、退避させるページの候補選びに特に決まったポリシーに依存しない。２０５で計算したページ数を退避させたら、ページ置換デーモンは、２０７でまだｎｆｒｅｅがｍａｘ＿ｆｒｅｅ未満かどうかを再びチェックする。ページ・フレームを解放した直後に消費されたら、そうなる可能性があるためである。２０７の述語が真の場合、分岐線２０９に進んで、ステップ２０５を再び始める。そうでなければ、分岐線２０８に進んで、２１０でページ置換デーモンはスリープに戻る。
【００２４】
図６は、時間線図を使って、ｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅをどのように計算するかを例証する。
【００２５】
矢印３８１は壁時計時刻の基準線を表す。３８１上で、３個のタイムスタンプｔｓ１、ｔｓ２、ｔｓ３は、ページ置換デーモンの３回の実行の始まりを表す。時間軸に示される双頭の矢印は、ページ置換デーモン２５の各実行が完了するのにかかる時間数を表す。この図から、ページ置換デーモンの各実行は完了するのにかかる時間数が異なることが分かる。また、ページ置換デーモンの連続する２つのインスタンスの間の経過時間は定まっていない。各タイムスタンプのＴＷｎ値は、ページ置換デーモンの最後の実行から全スレッドが待ち行列で費やす合計時間数を表す。ＴＷｎ値は、前の段落で説明したように、待機リストにある各スレッドのｔｈｒｄ＿ｗａｉｔカウンタとｗａｉｔｌｉｓｔ＿ｅｎｑｕｅ＿ｔｉｍｅを使って計算する。
【００２６】
実施例では、様々なパラメータは以下に示すようにシステム初期化のときに初期設定しなければならない。
・ｍｉｎ＿ｆｒｅｅ６１およびｍａｘ＿ｆｒｅｅ６２はあるディフォルト値に設定する。
・ｔｈｒｄ＿ｗａｉｔカウンタ３５およびｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅ３７は０に初期設定する。
・ｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅ＿ｔｇｔ３８は特定の値に初期設定する。
・ｓｔｒｔ＿ｔｉｍｅ３９は現在時刻に初期設定する。
【００２７】
上記の実施例で説明するように、たとえｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅ値を正確に維持しなくても、本発明を実施できることに注目するべきである。本出願で説明する好適な実施例では、ページ置換デーモンは、呼び出される度に待機リスト全体をウォークスルーすることによって、ｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅの正確な値を計算する。ｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅの概算値を計算することによっても本発明を実施することはでき、それによってメモリの可用性に対する影響を著しく減じることなく、実装の複雑さを減らすことができる。以下の段落で、ｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅを計算する代替法を２つ説明する。
【００２８】
１）システムはｔｈｒｄ＿ｗａｉｔカウンタに加えて、２つの変数ｎｔｈｒｄｓ＿ｗａｉｔｅｄおよびｎｔｈｒｄｓ＿ｗａｉｔｉｎｇを維持できる。ｎｔｈｒｄｓ＿ｗａｉｔｅｄは、ｔｈｒｄ＿ｗａｉｔの値に寄与したスレッドの数に相当する。ｎｔｈｒｄｓ＿ｗａｉｔｉｎｇは、現在待機リストにあるスレッドの数に相当する。これら変数は共に、１つのスレッドが待機リストからなくなる度に更新される。ｎｔｈｒｄｓ＿ｗａｉｔｉｎｇは、１つのスレッドが待機リストに入れられるときにも更新される。これらの変数があれば、ページ置換デーモンは以下のようにｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅを計算できる。
【００２９】
ｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅ＝（ｔｈｒｄ＿ｗａｉｔ＋（（ｔｈｒｄ＿ｗａｉｔ／ｎｔｈｒｄｓ＿ｗａｉｔｅｄ）×ｎｔｈｒｄｓ＿ｗａｉｔｉｎｇ））／（ｃｕｒｒｅｎｔ  ｔｉｍｅ−ｓｔｒｔ＿ｔｉｍｅ）
【００３０】
この方法を使うと、各スレッドのｗａｉｔｌｉｓｔ＿ｅｎｑｕｅ＿ｔｉｍｅを維持する必要はなくなる。
【００３１】
２）待機リストから外されたスレッドを無視すれば、予測はさらに簡略化できる。現在待機リストにないスレッドを無視して、待機リストにあるスレッドが均一な時間間隔で待ち行列に入れられたと仮定すると、ｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅは単純にｎｔｈｒｄｓ＿ｗａｉｔｉｎｇ／２として計算できる。これは以下のように導くことができる。
【００３２】
待機リストにある最初のスレッドが時間Ｔ１で待ち行列に入れられ、現在時刻がＴ２だと仮定する。スレッドは均一な時間間隔で待機リストに入れられたと仮定しているため、平均して各スレッドは（Ｔ２−Ｔ１）／２の時間数分待機している。
【００３３】
現在待機リストにある全スレッドの合計待ち時間＝（ｎｔｈｒｄｓ＿ｗａｉｔｉｎｇ×（Ｔ２−Ｔ１）／２）
【００３４】
経過時間＝（Ｔ２−Ｔ１）
【００３５】
ｔｈｒｄ＿ｗａｉｔ＿ｒａｔｅ＝（ｎｔｈｒｄｓ＿ｗａｉｔｉｎｇ×（Ｔ２−Ｔ１）／２）／（Ｔ２−Ｔ１）＝ｎｔｈｒｄｓ＿ｗａｉｔｉｎｇ／２
【００３６】
図７は、本発明の実施例を実装するのに使える情報処理システムを示す高次のブロック図である。コンピュータシステムは、プロセッサ７０４などの一又は複数のプロセッサを含む。プロセッサ７０４は通信インフラストラクチャ７０２（例、通信バス、クロスオーバー・バー、またはネットワーク）に接続する。様々なソフトウェア実施例がこの例示的なコンピュータ・システムに関して考えられる。本明細書を読めば、関連技術の当業者には、他のコンピュータ・システムおよびコンピュータ・アーキテクチャもしくは他のコンピュータ・システムまたはコンピュータ・アーキテクチャを使って本発明を実施する方法が明らかになるであろう。
【００３７】
コンピュータ・システムは、ディスプレイ装置７１０に表示するために、通信インフラストラクチャ７０２（もしくは図示していないフレーム・バッファ）から画像、テキスト、および他のデータを送るディスプレイ・インターフェース７０８を含むことができる。コンピュータ・システムはメイン・メモリ７０６、好ましくはランダム・アクセス・メモリ（ＲＡＭ）も含み、また二次メモリ７１２を含んでもよい。二次メモリ７１２は、例えば、ハードディスク・ドライブ７１４および取り外し可能ストレージ・ドライブ７１６もしくはハードディスク・ドライブ７１４または取り外し可能ストレージ・ドライブ７１６を含んでもよく、取り外し可能ドライブの代表的なものとしてフレキシブルディスク・ドライブ、磁気テープ・ドライブ、光ディスク・ドライブ等がある。取り外し可能ストレージ・ドライブ７１６は、当業者に周知の方法で、取り外し可能記憶装置７１８から読み取りかつ取り外し可能記憶装置７１８に書き込み、もしくは取り外し可能記憶装置７１８から読み取りまたは取り外し可能記憶装置７１８に書き込む。取り外し可能記憶装置７１８の代表的なものとしてフレキシブルディスク、コンパクト・ディスク、磁気テープ、光ディスク等があり、取り外し可能ストレージ・ドライブ７１６によって読み取り、書き込まれる。言うまでもなく、取り外し可能記憶装置７１８は、内部にコンピュータ・ソフトウェアおよびデータもしくはコンピュータ・ソフトウェアまたはデータを記憶したコンピュータ読み取り可能媒体を含む。
【００３８】
代替実施例では、二次メモリ７１２は、コンピュータ・プログラムまたは他の命令をコンピュータ・システムにロードさせる他の同様な手段を含んでもよい。前記手段には、例えば、取り外し可能記憶装置７２２およびインターフェース７２０があろう。前記例は、プログラム・カートリッジおよびカートリッジ・インターフェース（ビデオゲーム機にあるようなものなど）、取り外し可能メモリチップ（ＥＰＲＯＭまたはＰＲＯＭなど）および付属ソケット、ならびにその他取り外し可能記憶装置７２２およびソフトウェアとデータを取り外し可能記憶装置７２２からコンピュータ・システムに転送できるインターフェース７２０を含んでもよい。
【００３９】
さらに、コンピュータ・システムは通信インターフェース７２４を含んでもよい。通信インターフェース７２４は、ソフトウェアおよびデータをコンピュータ・システムと外部デバイスとの間で転送できる。通信インターフェース７２４の例には、モデム、ネットワーク・インターフェース（イーサーネット・カードなど）、通信ポート、ＰＣＭＣＩＡスロットおよびカード等があろう。通信インターフェース７２４経由で転送されるソフトウェアおよびデータは、例えば、電子信号、電磁信号、光信号、または通信インターフェース７２４が受信できるその他の信号のような信号の形態である。これら信号は通信路（すなわち、チャネル）７２６経由で通信インターフェース７２４に供給される。このチャネル７２６は信号を伝送するが、ワイヤまたはケーブル、光ファイバー、電話回線、携帯電話リンク、ＲＦリンク、およびその他の通信チャネル、もしくはワイヤまたはケーブル、光ファイバー、電話回線、携帯電話リンク、ＲＦリンク、またはその他通信チャネルを使って実施できよう。
【００４０】
本明細書で、「コンピュータ・プログラム媒体」、「コンピュータ使用可能媒体」、および「コンピュータ読み取り可能媒体」という表現は、一般的にメイン・メモリ７０６および二次メモリ７１２、取り外し可能ストレージ・ドライブ７１６、ハードディスク・ドライブ７１４にインストールされたハードディスク、および信号などの媒体を言うために使う。これらコンピュータ・プログラムは、ソフトウェアをコンピュータ・システムに提供する手段である。コンピュータ読み取り可能媒体は、コンピュータ・システムにデータ、命令、メッセージまたはメッセージ・パケット、並びにその他コンピュータ読み取り可能な情報をコンピュータ読み取り可能媒体から読み取らせることができる。コンピュータ読み取り可能媒体には、例えば、フレキシブルディスク、ＲＯＭ、フラッシュメモリ、ディスク・ドライブ・メモリ、ＣＤ−ＲＯＭ、およびその他永久記憶装置などの不揮発性メモリがあろう。例えば、データおよびコンピュータ命令などの情報を、コンピュータ・システム間で転送するのに便利である。さらに、コンピュータ読み取り可能媒体は、コンピュータにコンピュータ読み取り可能な情報を読み取らせることのできる、有線ネットワークまたは無線ネットワークなど、ネットワーク・リンクおよびネットワーク・インターフェースもしくはネットワーク・リンクまたはネットワーク・インターフェースなどの一時的な状態の媒体のコンピュータ読み取り可能情報を含んでもよい。
【００４１】
コンピュータ・プログラム（コンピュータ制御ロジックともいう）は、メイン・メモリ７０６および二次メモリ７１２もしくはメイン・メモリ７０６または二次メモリ７１２に格納される。コンピュータ・プログラムは通信インターフェース７２４経由で受信してもよい。前記コンピュータ・プログラムは、実行時、コンピュータ・システムに本明細書で説明した本発明の特徴を実施させることができる。具体的には、コンピュータ・プログラムは、実行時、プロセッサ７０４にコンピュータ・システムの特徴を実施させることができる。従って、前記コンピュータ・プログラムはコンピュータ・システムのコントローラに相当する。
【００４２】
本発明の特定の実施例を開示してきたが、当業者は本発明の精神および範囲を逸脱することなくこの特定の実施例に変更を行えることは理解するであろう。従って、本発明の範囲はこの特定の実施例に制限するつもりはない。
【００４３】
さらに、添付の請求項は本発明の範囲内にあるあらゆる前記応用、変更、および実施例を含むことが意図される。
【図面の簡単な説明】
【００４４】
【図１】代表的なコンピュータ・オペレーティング・システムの主要なサブシステムを示す図。
【図２】現在のページ置換アルゴリズムを実装するのに使用するデータ構造を示す図。
【図３】現在のページ置換アルゴリズムのフローチャートを示す図。
【図４】ページ置換デーモンの動的な自動調整を実装するために、好適な実施例で使用するデータ構造を示す図。
【図５】本発明による新規のページ置換アルゴリズムのフローチャートを示す図。
【図６】ＬＲＵデーモンを使ってどのようにｍｉｎ＿ｆｒｅｅおよびｍａｘ＿ｆｒｅｅを時間について変更するかを示す図。
【図７】本発明の一又は複数のコンポーネント／方法論を実装できるコンピューティング・システムの例示的なハードウェアの実装図。
【符号の説明】
【００４５】
１０  オペレーティング・システム
２０  仮想メモリ・マネージャ
２１  フリー・リスト
２２  フリー・フレーム
２３  使用中のリスト
２４  使用中のフレーム
２５  ページ置換デーモン
３０  プロセス・マネージャ
３２  待機リスト
３３  待機中のスレッド
４０  ファイルシステム
５０  ネットワーク・サブシステム
５１  ハードディスク・ドライブ
７０２  通信インフラストラクチャ（バス）
７０４  プロセッサ
７０６  メイン・メモリ
７０８  ディスプレイ・インターフェース
７１０  ディスプレイ装置
７１２  二次メモリ
７１４  ハードディスク・ドライブ
７１６  取り外し可能ストレージ・ドライブ
７１８  取り外し可能記憶装置
７２０  インターフェース
７２４  通信インターフェース
７２６  通信路
【図１】
2008505389.tif 000003
【図２】
2008505389.tif 000004
【図３】
2008505389.tif 000005
【図４】
2008505389.tif 000006
【図５】
2008505389.tif 000007
【図６】
2008505389.tif 000008
【図７】
2008505389.tif 000009
【国際調査報告】
2008505389.tif 000010