(57)【要約】　　　（修正有）【課題】メモリ管理における実際のパフォーマンスを向上させ、体感上も知覚されるプロアクティブで復元力のある自己調節型のメモリ管理システムおよび方法を提供すること。【解決手段】このシステムは、メモリ使用の履歴的の監視、メモリ使用の分析、高価値（例えば利用度が高い）のページによるメモリのリフレッシュ、Ｉ／Ｏプリフェッチの効率、および積極的なディスク管理を目的とする機構を含む。メモリ使用状況の情報に基づいて、相対的な値によりページに優先順位を付け、より有用なページをメモリにプリフェッチおよび／または保持するように機構が機能する。ページは、複数のサブセットを含む優先順位付きのスタンバイページセットにプリフェッチして保持し、それによってより有用なページがより有用でないページに優先してメモリに残る。書き出された有用なデータは、復元力のある形で自動的に戻すことができる。【選択図】図３
2004133934.tif 000002
【特許請求の範囲】
【請求項１】
　コンピュータシステムにおいて、
　複数のページについてページの使用状況を追跡するステップと、
　優先度を、追跡した各ページに、前記ページの追跡した使用状況に基づいて関連付けるステップと、
　別の記憶装置にある他のページに関連してメモリ中に存在する前記ページの少なくとも一部を、各ページセットに関連付けられた前記優先度に基づいて、優先順位付けするステップと
　を備えたことを特徴とする方法。
【請求項２】
　前記ページの少なくとも一部に優先順位付けするステップは、選択されたページに関連付けられた前記優先度に基づいて前記別の記憶装置にあるページを選択するステップと、前記選択されたページを前記メモリにロードするステップとを含むことを特徴とする請求項１に記載の方法。
【請求項３】
　前記ページの少なくとも一部に優先順位付けするステップは、選択されたページに関連付けられた前記優先度に基づいてメモリ中のページを選択して、前記別の記憶装置に転送するステップを含むことを特徴とする請求項１に記載の方法。
【請求項４】
　前記ページの少なくとも一部に優先順位付けするステップは、そのページに関連付けられた前記優先度に基づいて前記別の記憶装置にある第１のページを選択するステップと、前記ページに関連付けられた前記優先度に基づいてメモリ中の第２のページを選択して前記別の記憶装置に転送するステップと、前記第２のページをメモリから前記別の記憶装置に転送するステップと、前記第１のページを別の記憶装置から前記メモリにロードするステップとを含むことを特徴とする請求項１に記載の方法。
【請求項５】
　前記ページの少なくとも一部に優先順位付けするステップは、メモリ中のページのセットを選択するステップと、前記ページのセットを圧縮して前記メモリ中でより少量のスペースにするステップとを含むことを特徴とする請求項１に記載の方法。
【請求項６】
　前記ページの使用状況を追跡するステップは、前記ページの使用頻度データを記録するステップを含むことを特徴とする請求項１に記載の方法。
【請求項７】
　前記ページの使用状況を追跡するステップは、最後のページの使用に対応する時間データを記録するステップを含むことを特徴とする請求項１に記載の方法。
【請求項８】
　前記ページの使用状況を追跡するステップは、ある期間におけるページの使用回数を計数するステップを含むことを特徴とする請求項１に記載の方法。
【請求項９】
　前記ページの使用状況を追跡するステップは、ページの作成時刻に対応するデータを保持するステップを含むことを特徴とする請求項１に記載の方法。
【請求項１０】
　前記ページの使用状況を追跡するステップは、ページが最後にアクセスされた時刻に対応するデータを保持するステップを含むことを特徴とする請求項１に記載の方法。
【請求項１１】
　前記追跡した各ページに優先度を関連付けるステップはさらに、前記追跡したページの少なくとも１つのページの優先度を、該ページのＩ／Ｏ転送のコストに基づかせるステップを含むことを特徴とする請求項１に記載の方法。
【請求項１２】
　前記追跡したページとして、前記コンピュータシステムで利用可能な少なくとも１つのページのサブセットを選択するステップをさらに備えたことを特徴とする請求項１に記載の方法。
【請求項１３】
　前記１つのページのサブセットは、特定のファイルに対応するページを含むことを特徴とする請求項１２に記載の方法。
【請求項１４】
　前記１つのページのサブセットは、メモリ中の特定セクションに対応するページを含むことを特徴とする請求項１２に記載の方法。
【請求項１５】
　前記１つのページのサブセットは、記憶装置中の特定セクションに対応するページを含むことを特徴とする請求項１２に記載の方法。
【請求項１６】
　前記追跡した各ページに優先度を関連付けるステップは、選択されたページをまとめてページグループとし、前記グループに関連して値を保持するステップを含むことを特徴とする請求項１に記載の方法。
【請求項１７】
　前記少なくとも１つの基準に基づいて、選択されたページをまとめてページグループとするステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項１８】
　前記選択されたページをグループ分けするステップは、該ページを最後にアクセスした時刻に基づいて前記ページをグループ分けするステップを含むことを特徴とする請求項１７に記載の方法。
【請求項１９】
　前記選択されたページをグループ分けするステップは、使用パターンに基づいてページをグループ分けするステップを含むことを特徴とする請求項１７に記載の方法。
【請求項２０】
　前記選択されたページをグループ分けするステップは、使用頻度に基づいてページをグループ分けするステップを含むことを特徴とする請求項１７に記載の方法。
【請求項２１】
　前記選択されたページをグループ分けするステップは、仮想的な位置に基づいてページをグループ分けするステップを含むことを特徴とする請求項１７に記載の方法。
【請求項２２】
　前記選択されたページをグループ分けするステップは、物理的な位置に基づいてページをグループ分けするステップを含むことを特徴とする請求項１７に記載の方法。
【請求項２３】
　前記選択されたページをグループ分けするステップは、前記ページがメモリから刈り取られた時間に基づいてページをグループ分けするステップを含むことを特徴とする請求項１７に記載の方法。
【請求項２４】
　前記選択されたページをグループ分けするステップは、Ｉ／Ｏ転送の効率に基づいてページをグループ分けするステップを含むことを特徴とする請求項１７に記載の方法。
【請求項２５】
　前記選択されたページをグループ分けするステップは、どのプロセスが前記ページを使用するかに基づいてページをグループ分けするステップを含むことを特徴とする請求項１７に記載の方法。
【請求項２６】
　前記選択されたページをグループ分けするステップは、プロセス寿命の情報に基づいてページをグループ分けするステップを含むことを特徴とする請求項１７に記載の方法。
【請求項２７】
　前記選択されたページをグループ分けするステップは、所定の期間内の障害情報に基づいてページをグループ分けするステップを含むことを特徴とする請求項１７に記載の方法。
【請求項２８】
　前記選択されたページをグループ分けするステップは、少なくとも１つのイベントに基づいてページをグループ分けするステップを含むことを特徴とする請求項１７に記載の方法。
【請求項２９】
　前記選択されたページをグループ分けするステップは、使用された時間に基づいてページをグループ分けするステップを含むことを特徴とする請求項１７に記載の方法。
【請求項３０】
　前記選択されたページをグループ分けするステップは、特定のユーザプロセスに基づいてページをグループ分けするステップを含むことを特徴とする請求項１７に記載の方法。
【請求項３１】
　前記選択されたページをグループ分けするステップは、コンテクストデータに基づいてページをグループ分けするステップを含むことを特徴とする請求項１７に記載の方法。
【請求項３２】
　前記コンテクストデータは、アプリケーションプログラムから受信することを特徴とする請求項３１に記載の方法。
【請求項３３】
　前記ページの使用状況を追跡するステップは、ページの使用との関連でコンテクストデータを記録するステップを含むことを特徴とする請求項１に記載の方法。
【請求項３４】
　前記コンテクストデータを記録するステップは、電力の状態情報を記録するステップを含むことを特徴とする請求項３３に記載の方法。
【請求項３５】
　前記コンテクストデータを記録するステップは、ディスクの状態情報を記録するステップを含むことを特徴とする請求項３３に記載の方法。
【請求項３６】
　前記コンテクストデータを記録するステップは、イベント情報を記録するステップを含むことを特徴とする請求項３３に記載の方法。
【請求項３７】
　前記イベント情報を記録するステップは、メモリに関連するイベントを記録するステップを含むことを特徴とする請求項３６に記載の方法。
【請求項３８】
　前記メモリに関連するイベントを記録するステップは、前記コンピュータシステムの休止状態に関連する情報を記録するステップを含むことを特徴とする請求項３７に記載の方法。
【請求項３９】
　前記メモリに関連するイベントを記録するステップは、前記コンピュータシステムのスタンバイ状態に関連する情報を記録するステップを含むことを特徴とする請求項３７に記載の方法。
【請求項４０】
　前記メモリに関連するイベントを記録するステップは、前記コンピュータシステムにおけるコンピュータプログラムの実行に関連する情報を記録するステップを含むことを特徴とする請求項３７に記載の方法。
【請求項４１】
　選択されたページの前記優先度を、複数のページ使用ファクタに基づいて計算するステップをさらに備えたことを特徴とする請求項１に記載の方法。
【請求項４２】
　前記優先度を計算するステップは、前記選択されたページについてのページ使用頻度のデータと、最後にページが使用された時間の情報とを数学的に組み合わせるステップを含むことを特徴とする請求項４１に記載の方法。
【請求項４３】
　前記複数のページ使用ファクタに基づいて前記優先度を計算するステップは、別のファクタに関連して所定のページ使用ファクタに重み付けするステップを含むことを特徴とする請求項４１に記載の方法。
【請求項４４】
　前記ページをそれぞれのページの優先度に基づいて順位付けするステップをさらに含み、前記メモリ中の前記ページの少なくとも一部に優先順位付けするステップは、該順位に基づくプリフェッチの順序で、ページを別の記憶装置からメモリにプリフェッチするステップを含むことを特徴とする請求項１に記載の方法。
【請求項４５】
　前記ページの少なくとも一部に優先順位付けするステップは、選択された各ページに関連付けられた前記優先度に基づいて、選択されたページを前記別の記憶装置からメモリ中のスタンバイページセットに読み込むステップを含むことを特徴とする請求項１に記載の方法。
【請求項４６】
　前記スタンバイページセットは、複数のサブセットを含んでおり、
　所定のページにおいて検出された使用データに基づいて、前記ページを前記スタンバイページセットの１つのサブセットから別のサブセットに論理的に移動するステップをさらに含むことを特徴とする請求項４５に記載の方法。
【請求項４７】
　前記ページを前記スタンバイページセットの１つのサブセットから別のサブセットに論理的に移動するステップは、前記ページを頻度に基づくサブセットから最後に使用された時間に基づくサブセットに移動するステップを含むことを特徴とする請求項４６に記載の方法。
【請求項４８】
　前記ページを前記スタンバイページセットの１つのサブセットから別のサブセットに論理的に移動するステップは、前記ページを最後に使用された時間に基づくサブセットから頻度に基づくサブセットに移動するステップを含むことを特徴とする請求項４６に記載の方法。
【請求項４９】
　前記ページの少なくとも一部に関連付けられた値を永続的な記憶に保存するステップをさらに備えたことを特徴とする請求項１に記載の方法。
【請求項５０】
　前記ページの少なくとも一部の前記追跡されたページ使用状況に対応するデータを永続的な記憶に保存するステップをさらに備えたことを特徴とする請求項１に記載の方法。
【請求項５１】
　前記ページの使用状況を追跡するステップは、ページアクセス情報を評価するステップを含むことを特徴とする請求項１に記載の方法。
【請求項５２】
　前記ページアクセス情報を評価するステップは、ページテーブルエントリのアクセスビットを読み取るステップを含むことを特徴とする請求項５１に記載の方法。
【請求項５３】
　前記ページアクセス情報を評価するステップは、前記ページアクセス情報がリセットされると、評価するステップを含むことを特徴とする請求項５１に記載の方法。
【請求項５４】
　前記ページアクセス情報を評価するステップは、前記ページアクセス情報をリセットする頻度を判定するステップを含むことを特徴とする請求項５１に記載の方法。
【請求項５５】
　前記頻度を記録するステップをさらに備えたことを特徴とする請求項５４に記載の方法。
【請求項５６】
　前記ページアクセス情報を評価するステップは、ページがアクセスされる頻度を判定するステップを含むことを特徴とする請求項５１に記載の方法。
【請求項５７】
　前記頻度を記録するステップをさらに備えたことを特徴とする請求項５６に記載の方法。
【請求項５８】
　前記ページアクセス情報を評価するステップは、ページ障害を検出するステップを含むことを特徴とする請求項５１に記載の方法。
【請求項５９】
　前記ページ障害を検出するステップは、ハード障害を検出するステップを含むことを特徴とする請求項５８に記載の方法。
【請求項６０】
　前記ページ障害を検出するステップは、ソフト移行障害を検出するステップを含むことを特徴とする請求項５８に記載の方法。
【請求項６１】
　前記ページの使用状況を追跡するステップは、ファイル読み取りおよび書き込みの要求を検出するステップを含むことを特徴とする請求項１に記載の方法。
【請求項６２】
　前記ページの使用状況を追跡するステップは、プロセスのワーキングセット情報を読み取るステップを含むことを特徴とする請求項１に記載の方法。
【請求項６３】
　前記ページの使用状況を追跡するステップは、ページがメモリから転送される際にデータを記録するステップを含むことを特徴とする請求項１に記載の方法。
【請求項６４】
　前記ページの使用状況を追跡するステップは、ページがワーキングセットから刈り込まれる際にデータを記録するステップを含むことを特徴とする請求項１に記載の方法。
【請求項６５】
　前記ページの使用状況を追跡するステップは、イベントまたはコンテクストに応答してデータを記録するステップを含むことを特徴とする請求項１に記載の方法。
【請求項６６】
　前記記録されたデータは、切り替えられたタスクに応答して記録されることを特徴とする請求項６５に記載の方法。
【請求項６７】
　前記記録されたデータは、生成されたウィンドウに応答して記録されることを特徴とする請求項６５に記載の方法。
【請求項６８】
　前記記録されたデータは、検出されたアクションに応答して記録されることを特徴とする請求項６５に記載の方法。
【請求項６９】
　前記検出されたアクションは、フォーカスするウィンドウの変化を含むことを特徴とする請求項６８に記載の方法。
【請求項７０】
　前記検出されたアクションは、ユーザの入力イベントを含むことを特徴とする請求項６８に記載の方法。
【請求項７１】
　前記記録されたデータは、前記コンピュータシステムの休止に関連するイベントに応答して記録されることを特徴とする請求項６５に記載の方法。
【請求項７２】
　前記記録されたデータは、前記コンピュータシステムのスタンバイ状態に関連するイベントに応答して記録されることを特徴とする請求項６５に記載の方法。
【請求項７３】
　前記記録されたデータは、前記コンピュータシステムのシステムブートに関連するイベントに応答して記録されることを特徴とする請求項６５に記載の方法。
【請求項７４】
　前記記録されたデータは、プログラムの起動に応答して記録されることを特徴とする請求項６５に記載の方法。
【請求項７５】
　前記記録されたデータは、プログラムのシャットダウンに応答して記録されることを特徴とする請求項６５に記載の方法。
【請求項７６】
　前記記録されたデータは、ユーザログオンに応答して記録されることを特徴とする請求項６５に記載の方法。
【請求項７７】
　前記記録されたデータは、ネットワーク接続イベントに応答して記録されることを特徴とする請求項６５に記載の方法。
【請求項７８】
　前記記録されたデータは、メディアに関連するイベントに応答して記録されることを特徴とする請求項６５に記載の方法。
【請求項７９】
　前記記録されたデータは、プログラムで指定されるコンテクストに応答して記録されることを特徴とする請求項６５に記載の方法。
【請求項８０】
　前記ページの少なくとも一部に優先順位付けするステップは、前記ページに関連付けられた前記優先度に基づいて前記別の記憶装置にあるページを選択するステップと、前記選択されたページをバックグラウンド動作で前記メモリにロードするステップとを含むことを特徴とする請求項１に記載の方法。
【請求項８１】
　前記選択されたページをバックグラウンド動作で前記メモリにロードするステップは、アイドル状態優先度データを取得するステップを含むことを特徴とする請求項８０に記載の方法。
【請求項８２】
　前記選択されたページをバックグラウンド動作で前記メモリにロードするステップは、Ｉ／Ｏパターンを監視して転送時間を決定するステップを含むことを特徴とする請求項８０に記載の方法。
【請求項８３】
　前記転送時間は、前記転送がフォアグラウンドのＩ／Ｏ転送と重ならない確率に基づいて決定されることを特徴とする請求項８２に記載の方法。
【請求項８４】
　前記転送時間は、前記転送が、フォアグラウンドのＩ／Ｏ転送の速度を低下させるシークを引き起こさない確率に基づいて決定されることを特徴とする請求項８２に記載の方法。
【請求項８５】
　前記転送時間は、プロセッサの使用状況に基づいてスケジュールされることを特徴とする請求項８２に記載の方法。
【請求項８６】
　前記選択されたページをバックグラウンド動作で前記メモリにロードするステップは、ダミーパケットを生成して優先順位の逆転を回避するステップを含むことを特徴とする請求項８０に記載の方法。
【請求項８７】
　前記選択されたページをバックグラウンド動作で前記メモリにロードするステップは、現在のユーザ入力、現在のプロセッサ使用状況、および現在のディスク使用状況に基づいて、前記システムがアイドル状態であるかどうかを判定するステップを含むことを特徴とする請求項８０に記載の方法。
【請求項８８】
　前記ページの使用状況を追跡するステップは、ページ使用データをログに記録するステップを含むことを特徴とする請求項１に記載の方法。
【請求項８９】
　前記ページの使用状況を追跡するステップは、現在のページ使用データと以前のページ使用データをマージするステップを含むことを特徴とする請求項１に記載の方法。
【請求項９０】
　前記以前のページ使用データは、少なくとも１つの他のコンピュータシステムでトレーニングしたページの使用状況を記録することから得られるデータを含むことを特徴とする請求項１に記載の方法。
【請求項９１】
　前記以前のページ使用データは、他のページデータとともにグループ分けされ、事前に構築されたページデータを含むことを特徴とする請求項１に記載の方法。
【請求項９２】
　請求項１に記載の方法を行うコンピュータ実行可能命令を有することを特徴とするコンピュータ読取可能な媒体。
【請求項９３】
　コンピューティング環境において、
　複数のページのメモリページ使用状況を追跡する追跡機構と、
　少なくとも部分的に前記ページに対して追跡された前記メモリページ使用状況に基づいて、追跡した各ページにスコアを関連付ける優先順位付け機構と、
　前記追跡した各ページに関連付けられたスコアに基づいて、メモリに存在するページを判定するリバランサと
　を備えたことを特徴とするシステム。
【請求項９４】
　前記リバランサは、選択されたページの前記スコアに基づいて、選択されたページをメモリから別の記憶装置に転送することを特徴とする請求項９３に記載のシステム。
【請求項９５】
　前記別の記憶装置は、不揮発性のランダムアクセスメモリを含むことを特徴とする請求項９３に記載のシステム。
【請求項９６】
　前記別の記憶装置は、ディスクを含むことを特徴とする請求項９３に記載のシステム。
【請求項９７】
　前記リバランサは、選択されたページの前記スコアに基づいて、選択されたページを別の記憶装置からメモリにプリフェッチすることを特徴とする請求項９３に記載のシステム。
【請求項９８】
　前記追跡機構に接続され、前記追跡機構の出力を整形してフォーマットしたログにするように構成されたロギング機構をさらに備えたことを特徴とする請求項９３に記載のシステム。
【請求項９９】
　前記フォーマットしたログは、ヘッダ、およびエントリからなるテーブルを含むことを特徴とする請求項９３に記載のシステム。
【請求項１００】
　前記ヘッダは、前記メモリページ使用状況に関連付けられたコンテクスト情報を含むことを特徴とする請求項９９に記載のシステム。
【請求項１０１】
　前記ヘッダは、前記メモリページ使用状況に関連付けられたメモリ状態情報を含むことを特徴とする請求項９９に記載のシステム。
【請求項１０２】
　前記ヘッダは、前記メモリページ使用状況に関連付けられた時間情報を含むことを特徴とする請求項９９に記載のシステム。
【請求項１０３】
　前記エントリの各々は、ファイルまたはプロセスのアドレス空間のソースおよびオフセットのデータを含むことを特徴とする請求項９９に記載のシステム。
【請求項１０４】
　前記エントリの各々はさらに、前記ページがディスクから読み込まれたことを示すデータを含むことを特徴とする請求項９９に記載のシステム。
【請求項１０５】
　前記フォーマットしたログと、前記以前に得られたデータを統合して統合データとするインテグレータをさらに備えたことを特徴とする請求項９８に記載のシステム。
【請求項１０６】
　前記インテグレータは、前記統合データをページ情報データベースに保存することを特徴とする請求項１０５に記載のシステム。
【請求項１０７】
　前記ページ情報データベースの前記統合データに基づいて、少なくとも１つのシナリオプランを展開するマイニングサービスをさらに備えたことを特徴とする請求項１０６に記載のシステム。
【請求項１０８】
　前記優先順位付け機構は、シナリオプランにアクセスして、追跡した各ページに前記スコアを関連付けることを特徴とする請求項１０７に記載のシステム。
【請求項１０９】
　前記追跡機構は、前記複数のページの各ページについてページ使用頻度データを記録することを特徴とする請求項９３に記載のシステム。
【請求項１１０】
　前記追跡機構は、ページが最後に使用された時間に対応する時間に基づくデータを記録することを特徴とする請求項９３に記載のシステム。
【請求項１１１】
　前記追跡機構は、ページの使用状況との関連でコンテクストデータを記録することを特徴とする請求項９３に記載のシステム。
【請求項１１２】
　前記コンテクストデータは、前記コンピュータシステムの状態に対応することを特徴とする請求項１１１に記載のシステム。
【請求項１１３】
　前記優先順位付け機構は、個々のページのスコアに基づいて相互に相対的に前記ページに順位を付け、前記リバランサは、前記順位に基づくプリフェッチ順序でページをメモリにプリフェッチすることを特徴とする請求項９３に記載のシステム。
【請求項１１４】
　メモリ中にスタンバイページセットをさらに備え、前記リバランサは、前記別の記憶装置から前記スタンバイページセットに選択されたページを読み込むことを特徴とする請求項９３に記載のシステム。
【請求項１１５】
　前記スタンバイページセットは複数のサブセットを含み、前記リバランサは前記スタンバイページセットの１つのサブセットから別のサブセットにページを論理的に移動し、該移動は前記ページについて検出された使用状況データに基づくことを特徴とする請求項１１４に記載のシステム。
【請求項１１６】
　前記ページを前記スタンバイページセットの１つのサブセットから別のサブセットに論理的に移動するステップは、前記ページを最後に使用された時間に基づくサブセットから頻度に基づくサブセットに移動するステップを含むことを特徴とする請求項１１５に記載のシステム。
【請求項１１７】
　前記メモリに関連するイベントを生成するオブザーバをさらに備えたことを特徴とする請求項９３に記載のシステム。
【請求項１１８】
　前記オブザーバからイベントを受け取り、前記リバランサをトリガする更新機構をさらに備えたことを特徴とする請求項１１７に記載のシステム。
【請求項１１９】
　前記イベントの１つは、タスク切り替えイベントを含むことを特徴とする請求項１１８に記載のシステム。
【請求項１２０】
　前記イベントの１つは、ウィンドウの生成に対応するイベントを含むことを特徴とする請求項１１８に記載のシステム。
【請求項１２１】
　前記イベントの１つは、ダイアログが提供されることに対応するイベントを含むことを特徴とする請求項１１８に記載のシステム。
【請求項１２２】
　前記イベントの１つは、ウィンドウフォーカスの変化に対応するイベントを含むことを特徴とする請求項１１８に記載のシステム。
【請求項１２３】
　前記イベントの１つは、ユーザ入力イベントを含むことを特徴とする請求項１１８に記載のシステム。
【請求項１２４】
　前記イベントの１つは、プログラムの起動に対応するイベントを含むことを特徴とする請求項１１８に記載のシステム。
【請求項１２５】
　前記イベントの１つは、プログラムのシャットダウンに対応するイベントを含むことを特徴とする請求項１１８に記載のシステム。
【請求項１２６】
　前記イベントの１つは、システムブートに対応するイベントを含むことを特徴とする請求項１１８に記載のシステム。
【請求項１２７】
　前記イベントの１つは、ログインイベントを含むことを特徴とする請求項１１８に記載のシステム。
【請求項１２８】
　前記イベントの１つは、前記システムのシャットダウンに対応するイベントを含むことを特徴とする請求項１１８に記載のシステム。
【請求項１２９】
　前記イベントの１つは、スタンバイモードに入ることに対応するイベントを含むことを特徴とする請求項１１８に記載のシステム。
【請求項１３０】
　前記イベントの１つは、スタンバイモードからの再開に対応するイベントを含むことを特徴とする請求項１１８に記載のシステム。
【請求項１３１】
　前記イベントの１つは、休止モードに入ることに対応するイベントを含むことを特徴とする請求項１１８に記載のシステム。
【請求項１３２】
　前記イベントの１つは、休止モードからの再開に対応するイベントを含むことを特徴とする請求項１１８に記載のシステム。
【請求項１３３】
　前記イベントの１つは、異なるユーザが前記システムを操作することに対応するイベントを含むことを特徴とする請求項１１８に記載のシステム。
【請求項１３４】
　前記イベントの１つは、メディアの動作開始に対応するイベントを含むことを特徴とする請求項１１８に記載のシステム。
【請求項１３５】
　前記イベントの１つは、再生中のメディアの動作終了に対応するイベントを含むことを特徴とする請求項１１８に記載のシステム。
【請求項１３６】
　前記イベントの１つは、ビデオの時間シフトに対応するイベントを含むことを特徴とする請求項１１８に記載のシステム。
【請求項１３７】
　前記イベントの１つは、前記システムへの遠隔接続に対応するイベントを含むことを特徴とする請求項１１８に記載のシステム。
【請求項１３８】
　前記イベントの１つは、プログラムで特定されるコンテクストに対応するイベントを含むことを特徴とする請求項１１８に記載のシステム。
【請求項１３９】
　前記オブザーバからイベントを受け取り、前記追跡機構に状態データを提供する更新機構をさらに備えることを特徴とする請求項１１７に記載のシステム。
【請求項１４０】
　前記状態データは、ファイルに関連する要求を含むことを特徴とする請求項１３９に記載のシステム。
【請求項１４１】
　前記状態データは、プロセスによるメモリ使用に関連するデータを含むことを特徴とする請求項１３９に記載のシステム。
【請求項１４２】
　前記リバランサに接続され、前記メモリと補助記憶との間でページを転送するＩ／Ｏプランナ機構をさらに備えたことを特徴とする請求項１１７に記載のシステム。
【請求項１４３】
　前記Ｉ／Ｏプランナ機構は、前記ページをバックグラウンド動作で転送することを特徴とする請求項９３に記載のシステム。
【請求項１４４】
　前記Ｉ／Ｏプランナ機構は、Ｉ／Ｏパターンを監視して、フォアグラウンドのＩ／Ｏ転送に干渉しない可能性の高い転送時間を決定することを特徴とする請求項１４３に記載のシステム。
【請求項１４５】
　前記Ｉ／Ｏプランナ機構は、フォアグラウンドのＩ／Ｏ転送の速度を低下させるシークを引き起こさない可能性の高い転送時間を決定することを特徴とする請求項１４３に記載のシステム。
【請求項１４６】
　前記Ｉ／Ｏプランナは、ダミーパケットを生成して優先順位の逆転を回避することを特徴とする請求項１４３に記載のシステム。
【請求項１４７】
　前記Ｉ／Ｏプランナは、現在のプロセッサ使用状況と現在のディスク使用状況を評価してアイドル状態にあるコンピューティング状態を判定することを特徴とする請求項１４３に記載のシステム。
【請求項１４８】
　前記Ｉ／Ｏプランナ機構は、前記ページをフォアグラウンド動作で転送することを特徴とする請求項９３に記載のシステム。
【請求項１４９】
　データ構造を格納したコンピュータ読取可能な媒体であって、該データ構造は、
　メモリのページを論理的に格納するスタンバイページセットと、
　各々が前記スタンバイページセット中の前記ページに関連付けられた値に対応する前記スタンバイページセット中の複数のサブセットと
　を備え、
　前記スタンバイページセットは、前記ページの測定された使用情報に基づいて前記サブセット間でページを移動するように再び釣り合いがとられることを特徴とするコンピュータ読取可能な媒体。
【請求項１５０】
　前記データ構造において、前記スタンバイページセットは、前記ページのアクセス頻度にしたがってページを格納するための前記スタンバイページセット中の少なくとも１つの頻度に基づくサブセットを含むことを特徴とする請求項１４９に記載のコンピュータ読取可能な媒体。
【請求項１５１】
　前記データ構造において、前記スタンバイページセットは、前記ページが最後にアクセスされた時刻にしたがってページを格納するための前記スタンバイページセット中の少なくとも１つの最後に使用された時間に基づくサブセットを含むことを特徴とする請求項１４９に記載のコンピュータ読取可能な媒体。
【請求項１５２】
　前記データ構造において、前記スタンバイページセットは、前記ページのアクセス頻度に従ってページを格納するための前記スタンバイページセット中の少なくとも１つの頻度に基づくサブセットと、前記ページが最後にアクセスされた時刻にしたがってページを格納するための前記スタンバイページセット中の少なくとも１つの最後に使用された時間に基づくサブセットとを含み、
　前記スタンバイページセットは、時間データに基づいて、前記最後に使用された時間に基づくサブセットと前記頻度に基づくサブセットの間でページを移動するように再び釣り合いを取ることを特徴とする請求項１４９に記載のコンピュータ読取可能媒体。
【請求項１５３】
　前記データ構造において、前記スタンバイページセットは前記スタンバイページセット中に頻度に基づく複数のサブセットを含み、前記スタンバイページセットは時間データに基づいて前記頻度に基づくサブセット間でページを移動するように再び釣り合いを取ることを特徴とする請求項１４９に記載のコンピュータ読取可能媒体。
【請求項１５４】
　前記データ構造において、前記頻度に基づくサブセットの少なくとも１つは、期間あたりの使用回数に対応することを特徴とする請求項１５３に記載のコンピュータ読取可能媒体。
【請求項１５５】
　前記データ構造において、前記頻度に基づくサブセットの少なくとも１つの別のサブセットは、別の期間あたりの使用回数に対応することを特徴とする請求項１５４に記載のコンピュータ読取可能媒体。
【請求項１５６】
　前記データ構造において、前記期間は長さが等しくないことを特徴とする請求項１５５に記載のコンピュータ読取可能媒体。
【請求項１５７】
　前記データ構造において、前記スタンバイページセットは前記スタンバイページセット中に最後に使用された時間に基づく複数のサブセットを含み、前記スタンバイページセットは時間データに基づいて前記最後に使用された時間に基づくサブセット間でページを移動するように再び釣り合いを取ることを特徴とする請求項１４９に記載のコンピュータ読取可能媒体。
【請求項１５８】
　前記データ構造において、前記サブセットの少なくとも１つは、前記スタンバイページセット中にあり、補助記憶装置からプリフェッチされるページで満たすことを特徴とする請求項１４９に記載のコンピュータ読取可能媒体。
【請求項１５９】
　前記データ構造において、前記サブセットの少なくとも１つは、メモリ中に固定されるページを格納するために前記スタンバイページセット中にあることを特徴とする請求項１４９に記載のコンピュータ読取可能媒体。
【請求項１６０】
　前記データ構造において、前記サブセットの少なくとも１つは、関連付けられたスコアを有さないページを格納するために前記スタンバイページセット中にあることを特徴とする請求項１４９に記載のコンピュータ読取可能媒体。
【請求項１６１】
　メモリ中のページおよび補助記憶装置に保持されるページを識別するステップであって、該識別は当該識別された各ページに関連付けられたページ価値のデータに基づかれるステップと、
　前記補助記憶装置の少なくとも一部のページによって前記メモリを登録するステップであって、より高い価値を有する前記ページの少なくとも一部に対する要求を受け取る前に、相対的に低い価値を有するメモリ中の前記ページの少なくとも一部を、相対的に高い価値を有する前記補助記憶装置の少なくとも一部のページに置き換えるステップを含むステップと
を備えたことを特徴とするコンピュータによって実装される方法。
【請求項１６２】
　前記価値に基づいてページを識別するステップは、現在のコンテクストに基づいて値を確定するステップを含むことを特徴とする請求項１６１に記載の方法。
【請求項１６３】
　前記価値に基づいてメモリ中のページおよび補助記憶装置に保持されるページを識別するステップは、低い価値を有するページと高い価値を有するページとを識別するステップを含むことを特徴とする請求項１６１に記載の方法。
【請求項１６４】
　より高い価値を有するページの少なくとも一部に対する要求を受け取る前に、相対的に低い価値を有するメモリ中の前記ページの少なくとも一部を圧縮して、相対的に高い価値を有する前記補助記憶装置の少なくともいくつかのページのためにスペースを提供するステップをさらに含むことを特徴とする請求項１６１に記載の方法。
【請求項１６５】
　前記ページ価値のデータを判定するステップをさらに備えたことを特徴とする請求項１６１に記載の方法。
【請求項１６６】
　前記ページ価値のデータを判定するステップは、前記ページ価値のデータの少なくとも一部をファイルから読み出すステップを含むことを特徴とする請求項１６５に記載の方法。
【請求項１６７】
　前記ファイルは、別のコンピュータシステムにおけるページ使用を測定することから得たトレーニングデータを含むことを特徴とする請求項１６６に記載の方法。
【請求項１６８】
　前記ページ価値のデータを判定するステップは、ページの使用状況を追跡して前記ページ価値のデータの少なくとも一部を判定するステップを含むことを特徴とする請求項１６５に記載の方法。
【請求項１６９】
　前記ページの使用状況を追跡するステップは、アクセスパターンを追跡するステップを含むことを特徴とする請求項１６８に記載の方法。
【請求項１７０】
　前記ページの使用状況を追跡するステップは、アクセス頻度を追跡するステップを含むことを特徴とする請求項１６８に記載の方法。
【請求項１７１】
　前記ページの使用状況を追跡するステップは、最後のページ使用に対応する時間データを記録するステップを含むことを特徴とする請求項１６８に記載の方法。
【請求項１７２】
　前記ページの使用状況を追跡するステップは、ある期間におけるページの使用回数を計数するステップを含むことを特徴とする請求項１６８に記載の方法。
【請求項１７３】
　前記ページの使用状況を追跡するステップは、ページの作成時間に対応するデータを保持するステップを含むことを特徴とする請求項１６８に記載の方法。
【請求項１７４】
　前記ページの少なくとも一部についての前記追跡したページ使用状況に対応するデータを永続的な記憶に保存するステップをさらに含むことを特徴とする請求項１６８に記載の方法。
【請求項１７５】
　前記ページの使用状況を追跡するステップは、ページアクセス情報を評価するステップを含むことを特徴とする請求項１６８に記載の方法。
【請求項１７６】
　前記ページアクセス情報を評価するステップは、ページテーブルエントリのアクセスビットを読み取るステップを含むことを特徴とする請求項１７５に記載の方法。
【請求項１７７】
　前記ページアクセス情報を評価するステップは、前記ページアクセス情報がリセットされると評価するステップを含むことを特徴とする請求項１７５に記載の方法。
【請求項１７８】
　前記ページアクセス情報を評価するステップは、前記ページアクセス情報をリセットする頻度を判定するステップを含むことを特徴とする請求項１７５に記載の方法。
【請求項１７９】
　前記頻度を記録するステップをさらに含むことを特徴とする請求項１７８に記載の方法。
【請求項１８０】
　前記ページアクセス情報を評価するステップは、ページがアクセスされる頻度を判定するステップを含むことを特徴とする請求項１７５に記載の方法。
【請求項１８１】
　前記頻度を記録するステップをさらに含むことを特徴とする請求項１８０に記載の方法。
【請求項１８２】
　前記ページアクセス情報を評価するステップは、ページ障害を検出するステップを含むことを特徴とする請求項１７５に記載の方法。
【請求項１８３】
　前記ページの使用状況を追跡するステップは、ファイルの読み取りおよび書き込みの要求を検出するステップを含むことを特徴とする請求項１６８に記載の方法。
【請求項１８４】
　前記ページの使用状況を追跡するステップは、プロセスのワーキングセット情報を読み取るステップ、ページがメモリから転送される際にデータを記録するステップ、およびワーキングセットからページが刈り込まれる際にデータを記録するステップの少なくとも１つを含むことを特徴とする請求項１６８に記載の方法。
【請求項１８５】
　前記ページの使用状況を追跡するステップは、イベントまたはコンテクストに応答してデータを記録するステップを含むことを特徴とする請求項１６８に記載の方法。
【請求項１８６】
　前記記録されたデータは、切り替えられたタスク、生成されたウィンドウ、検出されたアクション、フォーカスを有するウィンドウの変化、ユーザ入力イベント、前記コンピュータシステムの休止に関連するイベント、前記コンピュータシステムのスタンバイに関連するイベント、前記コンピュータシステムのシステムブートに関連するイベント、プログラムの起動、プログラムのシャットダウン、前記システムのユーザの交替、ログオン、およびネット接続イベント、メディア関連イベント、の少なくとも１つに応答して記録されることを特徴とする請求項１８５に記載の方法。
【請求項１８７】
　前記記録されたデータは、プログラムで指定されるコンテクストに応答して記録されることを特徴とする請求項１８６に記載の方法。
【請求項１８８】
　前記ページ価値のデータを判定するステップは、少なくとも１つのページのＩ／Ｏ転送のコストを判定するステップを含むことを特徴とする請求項１６５に記載の方法。
【請求項１８９】
　前記ページ価値のデータを判定するステップは、複数のページ使用ファクタに基づいて、選択されたページの優先度を計算するステップを含むことを特徴とする請求項１６５に記載の方法。
【請求項１９０】
　前記複数のページ使用ファクタに基づいて前記優先度を計算するステップは、１つのページ使用ファクタを別のファクタに関連して重み付けするステップを含むことを特徴とする請求項１８９に記載の方法。
【請求項１９１】
　前記ページ価値のデータを判定するステップは、前記選択されたページについて、ページの使用頻度データと、最後にページが使用された時間の情報とを数学的に組み合わせるステップを含むことを特徴とする請求項１６５に記載の方法。
【請求項１９２】
　前記メモリ中のページを識別するステップは、前記コンピュータシステムで利用できるページのサブセットを選択するステップを含むことを特徴とする請求項１６５に記載の方法。
【請求項１９３】
　前記ページのサブセットは、特定のファイルに対応するページを含むことを特徴とする請求項１９２に記載の方法。
【請求項１９４】
　前記ページのサブセットは、メモリ中の特定のセクションに対応するページを含むことを特徴とする請求項１９３に記載の方法。
【請求項１９５】
　前記ページのサブセットは、記憶装置中の特定のセクションに対応するページを含むことを特徴とする請求項１９３に記載の方法。
【請求項１９６】
　選択されたページをまとめてページグループとし、前記グループと関連して前記ページ価値のデータを保持するステップをさらに含むことを特徴とする請求項１６１に記載の方法。
【請求項１９７】
　前記選択されたページをグループ分けするステップは、各ページが最後にアクセスされた時刻に基づいてページをグループ分けするステップを含むことを特徴とする請求項１９６に記載の方法。
【請求項１９８】
　前記選択されたページをグループ分けするステップは、使用パターンに基づいてページをグループ分けするステップを含むことを特徴とする請求項１９６に記載の方法。
【請求項１９９】
　前記選択されたページをグループ分けするステップは、使用頻度に基づいてページをグループ分けするステップを含むことを特徴とする請求項１９６に記載の方法。
【請求項２００】
　前記選択されたページをグループ分けするステップは、仮想的な位置に基づいてページをグループ分けするステップを含むことを特徴とする請求項１９６に記載の方法。
【請求項２０１】
　前記選択されたページをグループ分けするステップは、使用時間に基づいてページをグループ分けするステップを含むことを特徴とする請求項１９６に記載の方法。
【請求項２０２】
　前記使用時間は、曜日情報を含むことを特徴とする請求項１９６に記載の方法。
【請求項２０３】
　前記使用時間は、時刻情報を含むことを特徴とする請求項１９６に記載の方法。
【請求項２０４】
　前記選択されたページをグループ分けするステップは、物理的な位置に基づいてページをグループ分けするステップを含むことを特徴とする請求項１９６に記載の方法。
【請求項２０５】
　前記選択されたページをグループ分けするステップは、前記ページがメモリから刈り込まれた時間に基づいてページをグループ分けするステップを含むことを特徴とする請求項１９６に記載の方法。
【請求項２０６】
　前記選択されたページをグループ分けするステップは、Ｉ／Ｏ転送の効率に基づいてページをグループ分けするステップを含むことを特徴とする請求項１９６に記載の方法。
【請求項２０７】
　前記選択されたページをグループ分けするステップは、どのプロセスが前記ページを使用するかに基づいてページをグループ分けするステップを含むことを特徴とする請求項１９６に記載の方法。
【請求項２０８】
　前記選択されたページをグループ分けするステップは、プロセスの寿命情報に基づいてページをグループ分けするステップを含むことを特徴とする請求項１９６に記載の方法。
【請求項２０９】
　前記選択されたページをグループ分けするステップは、障害情報に基づいてページをグループ分けするステップを含むことを特徴とする請求項１９６に記載の方法。
【請求項２１０】
　前記選択されたページをグループ分けするステップは、少なくとも１つのイベントに基づいてページをグループ分けするステップを含むことを特徴とする請求項１９６に記載の方法。
【請求項２１１】
　前記選択されたページをグループ分けするステップは、特定のユーザプロセスに基づいてページをグループ分けするステップを含むことを特徴とする請求項１９６に記載の方法。
【請求項２１２】
　前記選択されたページをグループ分けするステップは、コンテクストデータに基づいてページをグループ分けするステップを含むことを特徴とする請求項１９６に記載の方法。
【請求項２１３】
　前記コンテクストデータをアプリケーションプログラムから受け取るステップをさらに備えたことを特徴とする請求項２１２に記載の方法。
【請求項２１４】
　ページの使用状況との関連でコンテクストデータを記録するステップをさらに備えたことを特徴とする請求項２１２に記載の方法。
【請求項２１５】
　前記コンテクストデータを記録するステップは、電力状態情報を記録するステップを含むことを特徴とする請求項２１４に記載の方法。
【請求項２１６】
　前記コンテクストデータを記録するステップは、ディスク状態情報を記録するステップを含むことを特徴とする請求項２１４に記載の方法。
【請求項２１７】
　前記コンテクストデータを記録するステップは、イベント情報を記録するステップを含むことを特徴とする請求項２１４に記載の方法。
【請求項２１８】
　前記イベント情報を記録するステップは、メモリに関連するイベントを記録するステップを含むことを特徴とする請求項２１７に記載の方法。
【請求項２１９】
　ページ価値のデータに基づいて前記識別したページをそれぞれ順位付けするステップをさらに備え、前記メモリを登録するステップは前記順位に基づいた順序でページをメモリにロードするステップを含むことを特徴とする請求項１６１に記載の方法。
【請求項２２０】
　前記メモリを登録するステップは、前記補助記憶から選択されたページをメモリ中のスタンバイページセットにロードするステップを含むことを特徴とする請求項１６１に記載の方法。
【請求項２２１】
　前記スタンバイページセットは複数のサブセットを含でおり、前記ページに検出された使用データに基づいて、前記ページを前記スタンバイページセットの１つのサブセットから別のサブセットに論理的に移動するステップをさらに備えたことを特徴とする請求項２２０に記載の方法。
【請求項２２２】
　前記ページを論理的に移動するステップは、前記ページを頻度に基づくサブセットから最後に使用された時間に基づくサブセットに移動するステップを含むことを特徴とする請求項２２１に記載の方法。
【請求項２２３】
　前記ページを論理的に移動するステップは、前記ページを最後に使用された時間に基づくサブセットから頻度に基づくサブセットに移動するステップを含むことを特徴とする請求項２２１に記載の方法。
【請求項２２４】
　前記ページの少なくとも一部に関連付けられた前記ページ価値のデータを永続的な記憶に保存するステップをさらに含むことを特徴とする請求項１６１に記載の方法。
【請求項２２５】
　前記メモリを登録するステップは、前記ページをバックグラウンド動作で前記メモリにロードするステップを含むことを特徴とする請求項１６１に記載の方法。
【請求項２２６】
　前記ページをバックグラウンド動作で前記メモリにロードするステップは、アイドル優先度データを取得するステップを含むことを特徴とする請求項２２５に記載の方法。
【請求項２２７】
　前記ページをバックグラウンド動作で前記メモリにロードするステップは、Ｉ／Ｏパターンを監視して転送時間を決定するステップを含むことを特徴とする請求項２２５に記載の方法。
【請求項２２８】
　前記転送時間は、前記転送がフォアグラウンドのＩ／Ｏ転送と重ならない確率に基づいて決定されることを特徴とする請求項２２７に記載の方法。
【請求項２２９】
　前記転送時間は、前記転送が、フォアグラウンドのＩ／Ｏ転送の速度を低下させるシークを引き起こさない確率に基づいて決定されることを特徴とする請求項２２７に記載の方法。
【請求項２３０】
　前記選択されたページをバックグラウンド動作で前記メモリにロードするステップは、現在のプロセッサ使用状況および現在のディスク使用状況を評価するステップを含むことを特徴とする請求項２２５に記載の方法。
【請求項２３１】
　前記メモリを登録するステップは、前記ページをフォアグラウンド動作で前記メモリにロードするステップを含むことを特徴とする請求項１６１に記載の方法。
【請求項２３２】
　請求項１６１に記載の方法を行うコンピュータ実行可能命令を有することを特徴とするコンピュータ読取可能な媒体。
【請求項２３３】
　メモリのページの必要度を監視するステップと、
　前記監視された必要度に基づいて前記ページの価値を判定するステップと、
　前記ページの価値に基づいて前記メモリのうちの少なくとも一部をロードするステップと
を備えたことを特徴とするコンピュータによって実装される方法。
【請求項２３４】
　前記メモリのうちの少なくとも一部をロードするステップは、前記価値に基づいてページを選択するステップを含むことを特徴とする請求項２３３に記載の方法。
【請求項２３５】
　前記メモリの少なくとも一部をロードするステップは、メモリのうちの全体をロードするステップを含むことを特徴とする請求項２３３に記載の方法。
【請求項２３６】
　前記ページの必要度を監視するステップは、実際のページ使用状況を追跡するステップを含むことを特徴とする請求項２３３に記載の方法。
【請求項２３７】
　前記ページの必要度を監視するステップは、トレーニングを行って必要とされる可能性のあるページを判定するステップを含むことを特徴とする請求項２３３に記載の方法。
【請求項２３８】
　前記トレーニングを行って必要とされる可能性があるページを判定するステップは、ページの使用をシミュレートするステップを含むことを特徴とする請求項２３７に記載の方法。
【請求項２３９】
　前記トレーニングを行って必要とされる可能性があるページを判定するステップは、コードを分析するステップを含むことを特徴とする請求項２３７に記載の方法。
【請求項２４０】
　前記トレーニングを行って必要とされる可能性があるページを判定するステップは、トレーニングコンピュータシステムでプログラムを実行し、別のコンピュータシステムにおける価値を使用するステップを含むことを特徴とする請求項２３７に記載の方法。
【請求項２４１】
　前記価値を含む情報の永続的な格納庫を構築し、前記永続的な格納庫をファイルに格納するステップをさらに含むことを特徴とする請求項２３３に記載の方法。
【請求項２４２】
　前記メモリのうちの少なくとも一部をロードするステップは、フリー状態にあるメモリをロードするステップを含むことを特徴とする請求項２３３に記載の方法。
【請求項２４３】
　メモリ中の低い価値のページを識別するステップをさらに備え、前記メモリのうちの少なくとも一部をロードするステップは、前記低い価値のページの少なくとも一部を置き換えるステップを含むことを特徴とする請求項２３３に記載の方法。
【請求項２４４】
　請求項２４３に記載の方法を行うコンピュータ実行可能命令を有することを特徴とするコンピュータ読取可能な媒体。
【請求項２４５】
　低い価値のページを識別するステップと、
　前記低い価値のページについての情報を含むメモリの管理情報を該メモリに保持するステップと
　を含むことを特徴とするコンピュータによって実装される方法。
【請求項２４６】
　前記メモリの管理情報を保持するステップは、パターン、頻度、グループ分け、およびコンテクスト情報の少なくとも１つを含むリッチ使用情報を保持するステップを含むことを特徴とする請求項２４５に記載の方法。
【請求項２４７】
　前記メモリの管理情報を保持するステップは、前記メモリにかつてあったが、もはやないページ、および前記メモリに今までなかったページについてのデータを保持するステップを含むことを特徴とする請求項２４５に記載の方法。
【請求項２４８】
　前記メモリの管理情報を保持するステップは、パターン、頻度、グループ分け、およびコンテクスト情報の少なくとも１つを含むリッチ使用情報を保持するステップと、前記メモリにかつてあったが、もはやないページ、および前記メモリに今までなかったページについて前記リッチ使用情報を保持するステップとを含むことを特徴とする請求項２４５に記載の方法。
【請求項２４９】
　前記リッチ使用情報を保持するステップは、もはやメモリにないがワーキングセットエントリを維持するステップであって、該ワーキングセットエントリは、前記ワーキングセットのアドレス空間で有効なページについての前記リッチ使用情報を含むステップを含むことを特徴とする請求項２４８に記載の方法。
【請求項２５０】
　前記リッチ使用情報を保持するステップは、メモリから出されるページについての前記リッチ使用情報を保持するために、物理的なページ記述子およびエントリを割り振るステップを含むことを特徴とする請求項２４８に記載の方法。
【請求項２５１】
　前記メモリ管理情報を保持するステップは、パターン、頻度、グループ分け、およびコンテクスト情報の少なくとも１つを含むリッチ使用情報を得ることができる統計値をメモリに保持するステップを含むことを特徴とする請求項２４５に記載の方法。
【請求項２５２】
　前記統計値を保持するステップは、ページごとのエントリを保持するステップを含むことを特徴とする請求項２５１に記載の方法。
【請求項２５３】
　前記統計値を保持するステップは、ページグループのエントリを保持するステップを含むことを特徴とする請求項２５１に記載の方法。
【請求項２５４】
　前記統計値を保持するステップは、ファイルのエントリを保持するステップを含むことを特徴とする請求項２５１に記載の方法。
【請求項２５５】
　前記統計値を保持するステップは、少なくとも１つのページについての状態データを保持するステップを含むことを特徴とする請求項２５１に記載の方法。
【請求項２５６】
　前記状態データは、ページがいつメモリから除去されたかについてのデータを含むことを特徴とする請求項２５５に記載の方法。
【請求項２５７】
　前記状態データは、ページがいつメモリにロードされたかについてのデータを含むことを特徴とする請求項２５５に記載の方法。
【請求項２５８】
　前記メモリの管理情報を使用してメモリ中のページに優先順位を付けてサブセットとするステップをさらに含むことを特徴とする請求項２４５に記載の方法。
【請求項２５９】
　前記メモリの管理情報を使用して、より有用なページが再び目標とされないように保護するステップをさらに含むことを特徴とする請求項２４５に記載の方法。
【請求項２６０】
　パターン、頻度、グループ分け、およびコンテクスト情報の少なくとも１つを含むリッチ使用情報に基づいてメモリ中のページに再度優先順位付けするステップをさらに備えたことを特徴とする請求項２４５に記載の方法。
【請求項２６１】
　請求項２４５に記載の方法を行うコンピュータ実行可能命令を有することを特徴とするコンピュータ読取可能な媒体。
【請求項２６２】
　パターン、頻度、コンテクスト、およびグループ分けデータの少なくとも１つを含む、メモリ使用についてのリッチ情報を捕捉するステップと、
　前記リッチ情報をファイルに持続するステップと
　を備えたことを特徴とするコンピュータによって実装される方法。
【請求項２６３】
　前記リッチ情報を捕捉するステップは、実際のページ使用状況をサンプリングするステップを含むことを特徴とする請求項２６２に記載の方法。
【請求項２６４】
　前記リッチ情報を捕捉するステップは、実際のページ使用状況を追跡するステップを含むことを特徴とする請求項２６２に記載の方法。
【請求項２６５】
　請求項２６２に記載の方法を行うコンピュータ実行可能命令を有することを特徴とするコンピュータ読取可能な媒体。
【請求項２６６】
　メモリおよび補助記憶を有するコンピューティング環境において、
　コンテクストに関連するイベントを受信するステップと、
　前記コンテクストで使用される確率がより高いページが、使用される確率がより低いページに比べてより価値が高くなるように、前記イベントに応答して前記メモリを優先順位付けするステップと
　を含むことを特徴とする方法。
【請求項２６７】
　前記メモリを優先順位付けするステップは、メモリのページを分類するサブセットを変更するステップを含むことを特徴とする請求項２６６に記載の方法。
【請求項２６８】
　前記メモリを優先順位付けするステップは、少なくとも１つのページを前記補助記憶からメモリにロードするステップを含むことを特徴とする請求項２６６に記載の方法。
【請求項２６９】
　前記メモリを優先順位付けするステップは、前記メモリ中のページを前記補助記憶のページに置き換えるステップを含むことを特徴とする請求項２６６に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
　本発明は、一般的にコンピュータメモリの管理に関する。
【背景技術】
【０００２】
　本発明は、２００２年１０月４日に出願された米国仮特許出願第６０／４１６，１１５号に基づく優先権を主張する。同特許出願は、参照により本明細書に組み込まれる。
【０００３】
　現代のコンピューティングシステムは、２５６メガバイトから数ギガバイトというオーダの相当な量のランダムアクセスメモリすなわちＲＡＭを備える。しかし、現在のメモリ管理機構およびメモリ管理方法は、何年も前、ＲＡＭが比較的乏しいコンピューティング資源であった頃に設計されたものである。そのようなメモリ管理機構は、プログラムプロセスに多量の仮想メモリを提供するため要求時ページングなどの技術に依存しており、基本的には、別のプロセスから一定のＲＡＭスペースが必要されたときデータのページをＲＡＭからディスクドライブに転送し、対応するプロセスによってその転送されたデータが再度必要とされた場合、そのデータを再度ディスクからＲＡＭに読み込む。
【０００４】
　このような従来のメモリ管理では、典型的な使用パターンで参照されるコードとデータの合計量が時間的にほぼ一定であり、その時点のメモリサイズに比べ少ない場合であっても、必要なページがしばしばメモリに存在しないことがある。これは主に２つの要因の結果生じる。すなわち、システムは、必要とされるページを強制的にメモリから取り出させ、および／または必要とされるページのセットを迅速に変更する可能性のある移行（ｔｒａｎｓｉｔｉｏｎ）、およびアクティブな使用状態にないページを他のデータで上書きする侵食（ｅｒｏｓｉｏｎ）を受ける。
【０００５】
　そのような移行の例には、電源オフ状態からのブート、あるユーザから別のユーザへの切り替え、スタンバイまたは休止（ｈｉｂｅｒｎａｔｉｏｎ）モードからの再開、大量のメモリを要するアプリケーション（例えばゲームのプレイなど）を使用してから一般的なシステム使用に戻る、および長い遅延の後にコンピュータに戻るなどがある。言うまでもなく、顧客は、通常の動作が高速であることに加えて、そのような移行の後にシステムとプログラムが高速に立ち上がることを強く望む。しかし、現在のメモリ管理ではこれは目下のところ不可能である。例えば、テストの結果、休止から再開した後のアプリケーションの起動には、その時点では大量のメモリが使用されていないにもかかわらず９秒から１１秒もの時間がかかることが分かっている。これは、起動時間の大半が、ＣＰＵをブロックした状態で必要なコードおよびデータのページがディスクから読み込まれるのを待って行われるディスク転送に消費され、ディスクからの読み込みが要求時ページングの結果基本的に一度に１ページずつ行われるためである。つまり、そのような移行の後には最も有用性の高いページセットがしばしばメモリに存在せず、結果として、入出力（Ｉ／Ｏ）転送に時間がかかることから芳しくないユーザ体験しか得られない要求時ページングとなる。
【０００６】
　場合によっては、メモリから意図的にページを追い出すことが必要となる移行があり、また別の移行では突然メモリを要求されることになる場合がある一方、さらに別の移行ではページが非アクティブになってディスクにスワップされる場合がある。より詳細には、ワーキングセットにあるメモリページを刈り込んで（ｔｒｉｍ）、本明細書でスタンバイページセット（例えば、Ｗｉｎｄｏｗｓ（登録商標）ベースのシステムにおけるスタンバイリストなど）と呼ばれる不使用のページのキャッシュに、閉じられているファイルのページとともに置くことができる。ディスクの読み書きの回数を減らすために、メモリ管理は、スタンバイページセット中のどのメモリページが最後にアクセスされてから最も時間がたっているかを追跡し、メモリが要求されると、基本的にはディスクに転送するページを待ち行列の先入れ先出し（ＦＩＦＯ）型で選択する。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
　最も最近のプロセスによって使用されたページがメモリに残るページになるので、この技術はディスク転送を減らす点ではある程度の効果があるが、現在のアプリケーションのコードおよびデータの要求規模は大きい。その結果、短期的には、このスタンバイページセットからページを呼び戻すことが一般にできるが、より長期間的に見ると、従来のメモリ管理では、スタンバイページセットの単純なＦＩＦＯ型の待ち行列により侵食が生じる。というのも、恐らくは有用な（だがしばらく使用されていない）ページがより有用でない（だがより最近使用された）ページによって上書きされるからである。結果として、ディスクとの間のＩ／Ｏ転送が相当な回数必要となる。強力なシステムであってもこうしたＩ／Ｏ転送はボトルネックとして作用し、その結果、システムは利用可能な大量のメモリを充分に利用しないまま、長時間にわたってＣＰＵがアイドル状態となる。
【０００８】
　つまり、現在のプログラムは、現在のコンピューティングデバイスが提供する大量のランダムアクセスメモリと高速な処理機能を必要とする。しかし、現在のメモリ管理技術は、これらのリソースを充分に協働させていない。これは、現在のメモリ管理はメモリの容量が少なかった時代に開発されたものであり、そのため、相当量のディスク使用が避けられないが、アプリケーションが小さく、マルチタスクがまれであったためにそれほどの負担にはならないという一般的な見解のもとに設計されたためである。そのため、従来のメモリ管理は、最も最近アクセスされたページをメモリに保持する以上にはディスク使用を制限しようとしない。今日のコンピューティングではその結果相当量のディスク使用が行われ、それにより実際のパフォーマンスと知覚されるパフォーマンスの両方を損なうボトルネックが生じる。
【課題を解決するための手段】
【０００９】
　簡潔に述べると、本発明は、プロアクティブで復元力のある自己調節型のメモリ管理システムを提供するシステム、方法、および機構を備える改良されたメモリ管理アーキテクチャを目的とする。このメモリ管理システムは、データが実際に必要とされる前に、必要とされる確率のあるデータをメモリにロードし保持することにより、実際にパフォーマンスが向上し、パフォーマンスの向上を知覚することができるメモリ管理を提供するために機能する。有用性、使用頻度、最後に使用された時間、データ転送の容易さ、およびその他のコンテクストに基づく情報を含む各種の要素に従って、データのページに値／スコアで優先順位を付けることができる。より価値のあるデータをメモリにプリフェッチし、および／または保持するように機構が機能する。そのデータをディスクへ書き出す、または上書きすることが必要な場合、実際の要求がなくても要求を予想し、そのデータを復元力のある方式で自動的に戻すことができる。
【００１０】
　そのページが必要とされる前に適切なデータをメモリに入れておくことにより、メモリ管理システムは、要求時ディスク転送動作を大幅に減らすか、またはなくし、よって多くの重要な消費者シナリオにおけるＩ／Ｏのボトルネックが減少し、または解消される。このため、本発明の実施形態は、メモリ使用の履歴の監視、メモリ使用状況の分析、価値の高い（例えば利用度が高い）ページによるメモリのリフレッシュ、Ｉ／Ｏプリフェッチの効率、および積極的なディスク管理を目的とする各種の機構を含む。
【００１１】
　ページに値を割り当てる際に必要な情報を得るため、比較的長い期間にわり追跡およびロギングの技術によって各ページについてのリッチ情報のセットを追跡することが望ましい。この測定データを処理して管理された情報とする。この情報は、メモリに関連するイベントに応答し、および／または決められた時間に基づいて再度メモリ内容の釣り合いをとる意思決定プロセスの一部として維持、アクセスされる。その結果、より有用でないデータに優先してより有用なデータがメモリに維持され、および／またはプリフェッチされることになる。
【００１２】
　優先度により、メモリページのスタンバイページセット（例えばＷｉｎｄｏｗｓ（登録商標）ベースのシステムにおけるスタンバイリスト）に優先順位を付けることが可能となり、スタンバイページセットのページは、いつ最後に参照されたかに拘わらず、他のページに比較してより高い優先度となる値とすることができ、したがって他のページに優先してメモリ中に維持される。プロアクティブで復元力のあるプリフェッチは、優先度によって決まる順序で有用なページをディスクからスタンバイページセットにロードする。このロードは、ユーザの通常の操作に支障をきたさないように優先度の低いバックグラウンドのＩ／Ｏ転送で行うことが好ましいが、フォアグラウンド動作とすることもできる。
【００１３】
　本発明の結果、通常のシステム使用に支障をきたすことなく、ＣＰＵの利用率は大幅に増大する。多くのコンピュータユーザにとって、実際に使用するメモリページの全セットの量はメモリに保持できる程度の大きさであり、その結果、（必要なデータをディスクから読み込む）失敗した要求の回数がゼロになるか、またはゼロに近くなる。
【００１４】
　一実施形態において、追跡機構はメモリに関連するアクティビティを監視し、ロガーは監視の結果を記録する。インテグレータが、記録された現在の結果と以前のログを組み合わせてページ情報データベースとする。マイニングサービスが、ページ情報データベースのデータにアクセスして、そこからシナリオプランを展開し、そのシナリオプランを分析してページに優先順位を付けてリストにする。このリストを、メモリの使用状況の監視結果と可能なその他の要素に基づいて、各ページに計算された値に従って並べ替える。
【００１５】
　リバランサは、イベント（例えば、システムにより、あるいは時間で生成される）によってトリガが引かれ、Ｉ／Ｏプランナと協働して各ページの計算された値によって決まる順序で優先順位を付されたスタンバイページセットにページを加える。優先順位を付されたスタンバイページセットは、各ページの値に対応するいくつかのサブセットを含む。それらの値は、時間の経過にともない、および／または実際の使用状況に応じて変化する可能性があり、したがってページはサブセット間を論理的に移動する可能性がある。要求が生じ、またはバックグラウンドのプリフェッチのためにメモリが必要になると、サブセット中の優先順位が最も低いデータを初めにページから書き出す。このようにして、実際の使用状況の監視結果および測定結果に加え、コンテクストとその他の情報とによって定まるより有用なページが支障をきたすことのない形で自動的にメモリに入れられ、より有用でないページに優先してメモリ中に残りやすくなる。
【００１６】
　この他の利点は、以下の詳細な説明を図面とともに読むことにより明らかになるであろう。
【発明を実施するための最良の形態】
【００１７】
　例示的動作環境
　図１に、本発明を実施することが可能な適切なコンピューティングシステム環境１００の一例を示す。コンピューティングシステム環境１００は適切なコンピューティング環境の一例に過ぎず、本発明の使用または機能の範囲について何らの制限を示唆するものではない。またコンピューティング環境１００は、例示的動作環境１００に示す構成要素の任意の１つまたは組み合わせに関連する依存関係にあり、または必要とするものと解釈すべきでない。
【００１８】
　本発明は、数多くの他の汎用または専用コンピューティングシステム環境または構成で動作することができる。本発明の使用に適す可能性のあるよく知られるコンピューティングシステム、環境、および／または構成の例には、これらに限定しないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップデバイス、タブレットデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラム可能な消費者向け家電製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上述のシステムまたは装置のいずれをも含む分散コンピューティング環境などがある。
【００１９】
　本発明は、コンピュータによって実行されるプログラムモジュールなどのコンピュータ実行可能命令との一般的なコンテクストで説明することができる。一般に、プログラムモジュールには、特定タスクを行うか、特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。本発明は、通信ネットワークを通じてリンクされた遠隔の処理装置によってタスクを行う分散コンピューティング環境で実施することもできる。分散コンピューティング環境では、メモリ記憶装置を含むローカルおよび／またはリモートのコンピュータ記憶媒体にプログラムモジュールを置くことができる。
【００２０】
　図１を参照すると、本発明を実施する例示のシステムは、コンピュータ１１０の形態の汎用コンピューティング機器を含む。コンピュータ１１０の構成要素には、これらに限定しないが、処理装置１２０、システムメモリ１３０、およびシステムメモリを含む各種のシステム構成要素を処理装置１２０に結合するシステムバス１２１が含まれる。システムバス１２１は、各種のバスアーキテクチャの任意のものを使用したメモリバスまたはメモリコントローラ、ペリフェラルバス、およびローカルバスを含む数タイプのバス構造のいずれでもよい。これらに限定しないが、例として、このようなアーキテクチャには、ＩＳＡ（Ｉｎｄｕｓｔｒｙ　Ｓｔａｎｄａｒｄ　Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＭＣＡ（Ｍｉｃｒｏ　Ｃｈａｎｎｅｌ　Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＥＩＳＡ（Ｅｎｈａｎｃｅｄ　ＩＳＡ）バス、ＶＥＳＡ（Ｖｉｄｅｏ　Ｅｌｅｃｔｒｏｎｉｃｓ　Ｓｔａｎｄａｒｄｓ　Ａｓｓｏｃｉａｔｉｏｎ）ローカルバス、およびメザニンバスとも称されるＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ　Ｃｏｍｐｏｎｅｎｔ　Ｉｎｔｅｒｃｏｎｎｅｃｔ）バスが含まれる。
【００２１】
　コンピュータ１１０は通例、各種のコンピュータ読取可能な媒体を含む。コンピュータ読取可能な媒体は、コンピュータ１１０がアクセスできる任意の利用可能媒体でよく、揮発性および不揮発性の媒体、取り外し可能および固定の媒体が含まれる。これに限定しないが、例としてコンピュータ読取可能な媒体は、コンピュータ記憶媒体および通信媒体を含むことができる。コンピュータ記憶媒体は、コンピュータ読取可能な命令、データ構造、プログラムモジュール、またはその他のデータなどの情報を記憶するための任意の方法または技術に実装された揮発性および不揮発性の媒体、取り外し可能および固定の媒体を含む。コンピュータ記憶媒体には、これらに限定しないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）または他の光ディスク記憶、磁気カセット、磁気テープ、磁気ディスク記憶または他の磁気記憶装置、あるいは、所望の情報の記憶に用いることができ、コンピュータ１１０によるアクセスが可能な任意の他の媒体が含まれる。通信媒体は、一般に、搬送波などの変調データ信号または他の搬送機構にコンピュータ読取可能な命令、データ構造、プログラムモジュール、または他のデータを体現したものであり、任意の情報伝達媒体を含む。用語「変調データ信号」とは、信号中に情報を符号化する方式でその特性の１つまたは複数を設定または変化させた信号を意味する。例として、通信媒体には、配線ネットワークまたは直接配線接続などの配線媒体と、音響、ＲＦ、赤外線、および他の無線媒体などの無線媒体が含まれるが、これらに限定しない。上記の媒体のいずれの組み合わせもコンピュータ読取可能な媒体の範囲に含めるべきである。
【００２２】
　システムメモリ１３０は、読み取り専用メモリ（ＲＯＭ）１３１およびランダムアクセスメモリ（ＲＡＭ）１３２など、揮発性および／または不揮発性メモリの形態のコンピュータ記憶媒体を含む。起動時などにコンピュータ１１０内の要素間の情報転送を支援する基本ルーチンを含む基本入出力システム（ＢＩＯＳ）１３３は、通例ＲＯＭ１３１に記憶される。ＲＡＭ１３２は通例、処理装置１２０から即座にアクセス可能な、および／または現在処理装置１２０によって処理中のデータおよび／またはプログラムモジュールを含む。これらに限定しないが、例として、図１にはオペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７を示している。
【００２３】
　コンピュータ１１０は、この他の取り外し可能／固定、揮発性／不揮発性のコンピュータ記憶媒体も含むことができる。単に例として、図１には、固定、不揮発性の磁気媒体の読み取りまたは書き込みを行うハードディスクドライブ１４１、取り外し可能、不揮発性の磁気ディスク１５２の読み取りまたは書き込みを行う磁気ディスクドライブ１５１、およびＣＤ−ＲＯＭや他の光学媒体などの取り外し可能、不揮発性の光ディスク１５６の読み取りまたは書き込みを行う光ディスクドライブ１５５を示す。例示の動作環境で使用できるこの他の取り外し可能／固定、揮発性／不揮発性のコンピュータ記憶媒体には、これらに限定しないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭなどが含まれる。ハードディスクドライブ１４１は通例、インタフェース１４０などの固定のメモリインタフェースを通じてシステムバス１２１に接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は通例、インタフェース１５０など取り外し可能なメモリインタフェースによってシステムバス１２１に接続される。
【００２４】
　上記で説明し、図１に示すドライブとそれに関連付けられたコンピュータ記憶媒体は、コンピュータ１１０のコンピュータ読取可能な命令、データ構造、プログラムモジュール、およびその他のデータの記憶を提供する。例えば図１では、ハードディスクドライブ１４１にオペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７を記憶している。これらのコンポーネントは、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７と同じものでも、異なるものでもよいことに留意されたい。ここではオペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７には、それらが少なくとも異なるコピーであることを表すために異なる参照符号をつけている。ユーザは、タブレットあるいは電子デジタイザ１６４、マイクロフォン１６３、キーボード１６２、および一般にはマウス、トラックボール、タッチパッドと称するポインティングデバイス１６１などの入力装置を通じてコンピュータ１１０にコマンドと情報を入力することができる。図１に図示しない他の入力装置には、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナなどがある。これらおよび他の入力装置は、システムバスに結合されたユーザ入力インタフェース１６０を通じて処理装置１２０に接続することが多いが、パラレルポート、ゲームポート、あるいはユニバーサルシリアルバス（ＵＳＢ）など他のインタフェースおよびバス構造によって接続することも可能である。モニタ１９１または他タイプの表示装置も、ビデオインタフェース１９０などのインタフェースを介してシステムバス１２１に接続される。モニタ１９１は、タッチスクリーンパネルなどと一体化してもよい。モニタおよび／またはタッチスクリーンパネルは、タブレット型のパーソナルコンピュータのように、コンピューティングデバイス１１０が組み込まれた筐体に物理的に結合できることに留意されたい。また、コンピューティングデバイス１１０などのコンピュータは、スピーカ１９５およびプリンタ１９６など他の周辺出力装置も含むことができ、それらは出力周辺インタフェース１９４などを通じて接続することができる。
【００２５】
　コンピュータ１１０は、リモートコンピュータ１８０など１つまたは複数のリモートコンピュータへの論理接続を使用するネットワーク環境で動作することができる。リモートコンピュータ１８０はパーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピア装置、あるいはその他の一般的なネットワークノードとすることができ、図１にはメモリ記憶装置１８１しか示していないが、通例はコンピュータ１１０との関連で上記で挙げた要素の多くまたはすべてを含む。図１に示す論理接続には、構内ネットワーク（ＬＡＮ）１７１と広域ネットワーク（ＷＡＮ）１７３が含まれるが、他のネットワークを含むことも可能である。このようなネットワーキング環境は、オフィス、企業内のコンピュータネットワーク、イントラネット、およびインターネットに一般的に見られる。例えば本発明では、コンピュータシステム１１０を送信元装置としてそこからデータを移すことができ、リモートコンピュータ１８０を送信先装置とすることができる。ただし、送信元マシンおよび送信先マシンはネットワークまたはその他の手段で接続する必要はなく、データは、送信元のプラットフォームによって書き込み、送信先のプラットフォームによって読み取ることが可能な任意の媒体を介して移すことができることに留意されたい。
【００２６】
　ＬＡＮネットワーキング環境で使用する場合、コンピュータ１１０はネットワークインタフェースまたはアダプタ１７０を通じてＬＡＮ１７１に接続される。ＷＡＮネットワーキング環境で使用する場合、コンピュータ１１０は通例、インターネットなどのＷＡＮ１７３を介して通信を確立するためのモデム１７２またはその他の手段を含む。モデム１７２は内蔵型でも外付け型でもよく、ユーザ入力インタフェース１６０または他の適切な機構を介してシステムバス１２１に接続することができる。ネットワーク環境では、コンピュータ１１０との関連で図示したプログラムモジュール、またはその一部は遠隔のメモリ記憶装置に格納することができる。これに限定しないが、例として図１ではリモートアプリケーションプログラム１８５がメモリデバイス１８１に常駐している。図のネットワーク接続は例示的なものであり、コンピュータ間に通信リンクを確立する他の手段を使用できることは理解されよう。
【００２７】
　プロアクティブなメモリ管理
　本発明の実施態様は、部分的には、一般に、ユーザインタフェース、アプリケーションプログラム、およびオペレーティングシステムソフトウェアの重要な態様において実際のパフォーマンスを向上させ、それを実感させるシステム、方法、および機構を含む、改良されたメモリ管理構造を目的とする。このため、図２に示すように、本発明は、プロアクティブで復元力がある自己調節型のメモリ管理システム２００を提供し、このシステム２００は、要求時にディスク２０４（またはフラッシュメモリ、ネットワークデータソース、テープドライブおよび／または実質的に任意のタイプのデータ記憶など同等の補助記憶機構）からメモリ２０２に読み込むのではなく、メモリに関連するユーザのアクティビティおよび作業を監視して、そのデータが必要とされる前に必要なデータがランダムアクセスメモリ２０２（あるいはここでは単に「メモリ」とも称する）にあることを少なくとも比較的高い確立で保証する。すなわち、プロアクティブで復元力のあるメモリ管理は、有用であると思われるデータをメモリに入れ、そのデータをメモリ中に維持することを企図する。その有用なデータのスワップ、または上書きが必要な場合は、実際に要求されなくても、要求が予想されるため、そのデータは復元力のある形で自動的に戻されるかもしれない。
【００２８】
　このために、本発明においては、現在利用可能な大量のメモリを活用して、動作状態にある可能性のあるプロセスのワーキングセットがメモリに維持され、またシステムがプロアクティブで復元力のあるメモリ管理を達成するために使用する記録の保持、データ構造、およびアルゴリズムが維持される。そのような記録保持、データ構造、および他のアルゴリズムは、時間の経過に伴ってより最適なものになることが期待されるが、実際現在の実装では要求時のＩ／Ｏ転送をかなり減らしている。
【００２９】
　そのページが必要となる前にメモリ２０２を（例えばページとして構成した）適切なデータで満たすことにより、本発明のメモリ管理システム２００は、要求時のディスク転送動作をかなり減らし、またはなくす。したがって多くの重要な消費者のシナリオにおけるＩ／Ｏのボトルネックが低減され、またはなくすことが容易に理解される。本明細書で使用する場合、用語「ページ」とは、メモリ管理システム２００が一単位として扱う最少量（例えば４０９６バイト）のデータを意味するが、本発明を特定の固定量のデータに限定する意図はなく、したがってデータの「ページ」は、何らかの他の固定量、あるいは変動する量のデータ（例えばわずか１バイト、あるいはその倍数）、あるいはストリーミング転送であってもよいことに留意されたい。したがって、固定量またはその倍数のデータではなく任意の量のデータを読み出し／書き込み／ストリーミングすることができるメモリ管理システムとは、また例えば１つまたは複数のページを読み出しおよび書き込むことに相当するのである。
【００３０】
　後述するように、本発明の実施形態は各種の機構を含み、これにはメモリ使用の履歴の監視、メモリ使用状況の分析、価値の高い（例えば利用度が高い）ページによるメモリのリフレッシュ、Ｉ／Ｏプリフェッチの効率、および積極的なディスク管理を目的とする機構が含まれる。一般に、これらの機構はプロアクティブなメモリ管理システム２００として協働して、必要とされるデータが要求される前にメモリに存在するようにする。このため、継続的および／または比較的長い時間間隔にわたって収集することが可能な種々のメモリ使用のデータおよびその他の情報を活用することにより、プロアクティブに動作するようアルゴリズム、支持データ構造、および方法によりメモリ管理を拡張する。ただし、本発明はそのような機構の特定の組み合わせを必要とはせず、これよりも少ない機構および／または代替の機構により数多くのより良好なメモリに関連する利益を提供できることに留意されたい。例えば、いずれのページが他のページよりも使用される確率が高いかを示す値を求め、より有用なページをメモリに残すことにより、バックグラウンド動作であるメモリへのページのプリフェッチを行わずにＩ／Ｏ転送を減らすことがで、さらにそれらのページの価値を判定するために使用する情報を断続的および／または比較的短い期間に収集した場合でさえも、同様にＩ／Ｏ転送を減らすことができる。
【００３１】
　さらに、本発明のメモリ管理の方法および機構は、メモリが一杯でスワップの決定を行う必要がある時だけでなく、メモリが比較的空いている状態を含むメモリ使用の他のレベルにおいてもアクティブとすることにより、メモリ使用状況を改善することができる。例えば、システムのメモリが圧迫されているかどうかに関係なく、ロードしたページがアクセスされる頻度を測定することができる。さらに、本発明は、現在のメモリ内容だけを管理するのではなく、現在のメモリ内容、メモリに存在すべきだが現在はディスクに存在する場合、およびその逆の場合を含めてメモリ内容を包括的に管理する（ことが望ましい）。
【００３２】
　本発明は、メモリ状態をいくつかの方法で表し、これは現在各メモリページについて保持されている情報の追加によって含められる。そのような新しい情報は、単に最後に使用された時間についての暗示的または明示的な情報ではなく、時間の経過に伴う各ページの使用頻度を含むことができる。例示の実施形態では、その時点でメモリに存在しないページについての情報をも保持する。後述するように、データ構造を用いて有用である可能性のあるデータを保持し、若しくは保持することができるフリーメモリを編成し、およびデータ構造を用いて何時そのメモリを代替として利用できるようにするかを制御する。
【００３３】
　情報を得るために、追跡およびロギングの技術によって、比較的長い期間にわたって各ページについてのリッチ情報のセットを追跡するのが望ましい。アクティブ時にプロセスが使用する各種のページを比較的長い期間にわたって監視することにより、アクセスされるコードと読み出されるデータファイルを記録し、ページの価値を計る重要な指標を得て、それにより潜在的に必要なワーキングセットを確定する。この測定データは、メモリに関連するイベントに応答して、および／またはその他の形（例えば周期的など）で再びメモリ内容の釣り合いをとる意思決定プロセスの一部として維持されアクセスされる。すなわち、必要とされるデータである可能性が最も高いことによって価値を判断するか、あるいはデータ転送の容易さ、コンテクストおよび／または他の基準で判断するかに関係なく、このリッチデータの追跡の結果、分析すればより価値の低いページに優先してより価値のあるページをメモリに保持、および／またはプリフェッチすることを可能にする情報が得られる。
【００３４】
　一般に、本発明は、そのページが現在メモリにあるか別の記憶装置にあるかを問わず、高価値のページと低価値のページの両方を識別するための各ページの相対的価値を得るため、新しいタイプのメモリページ単位のリッチ情報を維持する。メモリ中のページと、もはやメモリにないページ（例えば現在はハードディスクまたはフロッピー（登録商標）ディスク、ＣＤ媒体、ＤＶＤ媒体、ネットワーク、フラッシュメモリなどにあるページ）、あるいはこれまでメモリにあったことがないページについて、このリッチ情報（パターン／頻度／グループ分け／コンテクストデータを含む）をメモリ中に維持する（また持続する）。この情報を使用して、メモリにない価値のあるページをメモリにプリロード（プリフェッチ）し、および／またはより価値の低いページに優先してより価値のあるページを維持する。これを行う１つの方法は、ワーキングセットの補完機構を用いるものであるが、この機構は、もはやメモリには存在しないものの、そのワーキングセットのアドレス空間では有効に存在するページに対するリッチ使用情報を含むワーキングセットエントリを保持することである。別の方式は、ファイルページ履歴機構に基づいて構築される、拡張されたスタンバイページセット（例えばＷｉｎｄｏｗｓ（登録商標）ベースのシステムにおけるスタンバイリストのような使用されていないページのキャッシュ）を用いるものである。この場合、物理メモリにあるよりも多くの物理的ページの記述子およびエントリを割り振り、それらを使用してメモリから取り出すページについての使用パターン、頻度、グループ分けおよび／またはコンテクストの情報を保持する。
【００３５】
　後述するように、各種の統計を追跡して、使用された時間数、作成時間、最後にアクセスされた時刻など、あるページが必要とされる可能性を判定する参照パターンおよび／または使用頻度を求める。この種の統計値は、ページエントリごとか、または参照パターン、使用頻度などを求めるのに使用できる範囲／グループごとにメモリ中に保持することができる。このような統計値は、ファイルのエントリおよび／またはオブジェクト、メモリマッピングオブジェクト、あるいはその他のページのグループ分けを保持することができる。また、年齢ビット以外の状態、例えばあるページがいつメモリから除去され、戻されたかを含む状態を有する状態機械をページごとまたはページグループごとに構成することができる。この様々な情報を使用して、メモリ中のページにサブセットとして優先順位を付け、プログラムが多量のページを１度または２度参照する時などに、有用なページが再び目標とされないように保護することができる。この優先順位付けは明示的で、リスト内の位置から暗示されないものとすることができる。優先順位は、得られた使用パターン、頻度、コンテクスト、グループ分けなどから、周期的にまたは時折再計算することができる。
【００３６】
　さらに、特定のページをメモリに入れるコストをそのページの価値を判定する際の要素とすることができ、例えばそのページが戻された（ｂａｃｋｅｄ）ページファイルであるか、小さなファイル中のページであるか、あるいは連続的にアクセス／ストリーミングされる複数のページ中のページであるかどうかを用いてこのコスト要素を確定することができる。このような価値の評価はページ単位とすることができるが、ページのサブセットについてのみリッチ情報の一部またはすべてを保持し、ファイルオブジェクト、セクション／マッピングなどについて、ページグループの統計値および係数値を取得および／または保持するなどにより、よりコンパクトにすることも可能である。さらに、状態データを得て、広範囲のページ情報の一部として使用することができる。
【００３７】
　例えば、コンテクストを監視することにより、電力状態やディスク状態を含む、メモリ管理の決定において通例は考慮しない要素を考慮することができる。また監視されるイベントも考慮に入れて、メモリへの影響が多大であることが知られているスタンバイ／再開、休止／再開、およびプログラムの実行／終了からの迅速な回復に適したアクションをとる。
【００３８】
　そのような状態情報を記録することに加えて、本発明のプロアクティブなメモリ管理を容易にするために他の機構を利用することができる。例えば、アプリケーションプログラムは、例えばまれに発生するエラーを処理するために必要なデータは再度使用される見込みがないと宣言できるなど、あるデータが他のデータよりも有用でない（あるいは有用である）ことを宣言することができ、それによりそのようなデータは、より低い値を割り当てる、またはより低い値で重み付けをするのにより適した候補となる。ユーザも、優先度がより低いまたは高い特定のデータを指定することができ、例えば、アプリケーションのヘルプファイルをめったに使用しないユーザは、その優先度が低いことをそのアプリケーションおよび／またはオペレーティングシステムに知らせる設定を手動で提供することができる。またその逆も可能であり、例えば可能である場合にはヘルプデータを常にメモリに入れておくこともできる。このために、アプリケーションのためのアプリケーションプログラミングインタフェース（あるいは同様の機能）を提供して、ページ（例えばページのある領域）にもはや価値がないこと、あるいは別のページセットに価値があることを示すなどにより、プログラムがシステムメモリ管理に貢献できるようにすることができる。アプリケーションプログラムは、メモリマネジャがそれらの動作で参照されるページの価値を追跡し、グループ分けするために使用できるコンテクストおよび動作も指定することができる。このように、アプリケーションプログラムは、ファイルオープン／保存のダイアログを表示する、またはタスクペインを示すなど、メモリ使用に関してそのアプリケーションプログラムが重要であると考える動作をマークすることができる。
【００３９】
　ページの価値を使用して、メモリ管理を他の方式で改良することもできる。例えば、１度または２度使用された大量のファイルページをあるプログラムが使用する（ｇｏ　ｔｈｒｏｕｇｈ）場合は、同様のページのみが再度目標とされ、より価値が高いページが保護される。さらに、価値が低いページおよび／または中間の価値のページをディスクにスワップするのではなくメモリ中で圧縮するなどにより、特定ページの圧縮も可能である。例えば、アプリケーションまたは発見機構が、何らかの大きな（例えば中間あるいはより低い価値の）データブロックをディスクに書き込んでスペースを解放するのではなく、圧縮することが望ましい場合があることを指示することができる。
【００４０】
　ここで使用する追跡およびロギングの技術は、現在知られている技術に勝り、メモリ使用データを記録する新たな機能を提供する。新しいアルゴリズムはこのデータを解析し、データをディスクから効率的な形でプリフェッチし、価値の優先度に基づいてメモリにデータを保持するための命令またはシナリオプランを生成することができる。例えば、リッチ情報があるので、単に、メモリページのスタンバイページセットを定量化された優先順位がないＦＩＦＯ型の待ち行列に配置するのではなく、スタンバイページセットに優先順位を付けることができる。本発明では、スタンバイページセットのページは、最後に参照されたのがいつであるかに関係なく、他のページに相対的な価値の点からより高い優先順位とすることができ、したがって、ワーキングセットメモリにあるページを含む他のページに優先してメモリに保持することができる。例えば、あるアクティブなプロセスのページは最近使用されていても今後二度と使用される見込みがなく、その結果そのようなページは、非常に長い時間使用されていないが再度使用される可能性があるページよりも価値が低くなる。
【００４１】
　さらに、実際の使用頻度、最後に使用された時間、あるいはその他の測定結果など、監視により得られた状態データおよび測定結果以外にも、他の基準を使用してページの価値を判定することができる。例えば、置き換えのペナルティの概念を使用してメモリ中のページの価値を判定することができ、例えば、無作為に分散した（ディスク上で非連続的な）データは、隣接した連続データに比べてディスクとの間で転送するのにより高費用であり、したがって、大量のメモリが急に必要になった場合などには、無作為に分散したデータをメモリに保持しておいて、連続したデータを転送する方が有用である場合がある。このように、ページの有用性は、そのＩ／Ｏ転送の費用と、その使用状況、および電力やディスク状態の考慮事項などマシンとその他のコンテクストの履歴的な追跡とによって判断することができる。エンティティ（例えばアプリケーションまたはユーザ）が特定のデータに割り当てることができる重みなど使用することができ、さらに他の要素を使用することができる。
【００４２】
　一実施形態において、プログラムのメモリ使用を例えばユーザごとにマシン上で追跡し、ディスクとメモリの両方におけるページの潜在的な有用性が分類される。この追跡および分類からメモリ予算を決定することができ、バックグラウンドＩ／Ｏ機構は、その予算に基づいて、各ページの定量化された価値によって決定される有用性が最も高い利用可能なページでメモリを一杯にしようとする。したがって、メモリページは復元性を備えることができ、例えば必要な場合には除去し、再度スペースが利用可能になると自動的に復元される。この手法は、リアクティブな要求時ページング（制限されたクラスタ化またはプリフェッチを行う）に依存して最初の使用時にのみページをディスクから移し、ＦＩＦＯ方式で保存する一般的なメモリ管理の手法と対照的であることに留意されたい。本発明では、ページがメモリに常駐する時に、メモリ構造がそのページを優先度に基づいてメモリに保存するが、このページは使用されるのに従って時間の経過とともに変化する可能性があり、別の現在のアクティビティのためにメモリが必要とされない限り、あるいは別のアクティビティのためにメモリが必要とされるまで、より有用性が高いページがメモリに残る。
【００４３】
　価値が高い（また低い）ページを識別するために、ページの価値および／またはアクセスパターンデータをメインメモリに常駐するのではない永続的な記憶に伝搬して維持し、それによりその情報（例えばパターン、頻度、コンテクストおよび／またはグループ分けのデータを含む）を複数のブートにわたって持続する。ページデータをファイルに書き込むのに加え、データの解釈、新しい価値の構築、および／またはデータの解析を行って冗長なデータまたは不要なデータを破棄することを含め、そのページデータを保持し、永続的な記憶に保存された内容がページ使用のデータだけでなく、区別されたパターンデータをも含むようにすることに留意されたい。下記で述べるように、メモリ管理によって保持され、その他のコンテクストおよび（下記で説明する）イベントと併せてページ参照を追跡および／またはサンプリングすることによって、使用されるページの価値およびアクセスパターンデータが得られる。本発明によると、この追跡およびサンプリングの動作は、単に係数を行い、メモリ中で少量のページごとに状態を保つことに留まらない。このために、追跡およびサンプリングの機構は、アクセスビットがいつリセットされたかを記録するＰＴＥ（ページテーブルエントリ）のアクセスビットの追跡も行う。例えば頻繁に参照されるページについて、アクセスデータが処理（ｗａｌｋ）され、記録されているデータの量がリセットによって制限される率を測定し、保持することにより、アクセスのたびに情報を記録するのではなく、ＰＴＥのアクセスビットがリセットされる率を保持できることに留意されたい。さらに、ページ誤り（ハード障害（ｈａｒｄｆａｕｌｔｓ）およびソフト障害／移行障害）と、ファイルの読み取りおよび書き込みの要求を記録することができる。メモリからページを取り出す際、あるいはワーキングセットから刈り込む際にページを追跡する機構と同様に、プロセスのワーキングセットのスナップショットを得る機構によってもページ価値のデータを得ることができる。
【００４４】
　この情報を用いて、最後にアクセスされた時刻、使用パターン、使用頻度、仮想的または物理的な局所性（ｌｏｃａｌｉｔｙ）、ページがいつ刈り取られた（ｔｒｉｍ）かなどにより、永続的な記憶のページとメモリ中のページとの双方についてページをグループ付けし、情報を解析することができる。そしてこれらのグループ付けは、複数のページ領域を一度に効率よくスワップアウトするために使用することができ、およびページファイルなどの転送先でレイアウトする際に使用することができる。例えば、使用されるのが数個のページの場合、そのグループにまるごと効率よく取り込むことができる。また、持続されるファイル／ページ履歴を使用することにより、ファイル全体を一度に入れるなど「スマートなクラスタ化」をも機構は行うことができる。ページはさらに、どのプロセスがそのページを使用するか、プロセス寿命のどの部分（例えば起動時やシャットダウン時）でそのページが使用されるか、ある期間（例えばディスク関連の（ｂｏｕｎｄ）操作）内でどのページがハード障害（ｆａｕｌｔ）になるかといった情報によってグループ分けすることができる。この他のページグループ分けの方法には、タスクの切り替え、マウスのクリック、ホバー、フォーカスおよびその他のユーザ入力の前後に参照されるページ、特定の時刻および／または曜日など時間に基づいた使用状況、特定のユーザプロセス、およびその他のコンテクストがあり、これにはアプリケーションによって指定されるコンテクストが含まれる。
【００４５】
　一般に、本発明によるメモリ管理は、リッチイベントおよびコンテクストのセットを追跡し、それに関し動作することができ、このイベントとコンテクストにはタスクの切り替え、ウィンドウの生成、ダイアログ、フォーカスの変更、マウスのホバーとクリック、およびその他のユーザ入力イベントを含む。その他のイベントおよびコンテクストには、アプリケーションの起動およびシャットダウン、システムのブート、ログイン、シャットダウン、スタンバイ／休止および再開、ユーザの切り替え、ビデオ、オーディオおよび／または同様のメディア再生イベント（例えば開始と終了）、ビデオの時間シフト、（遠隔のデスクトップ、テルネットなどを含む）システムへの遠隔接続、およびアプリケーション指定のコンテクストが含まれる。
【００４６】
　本発明の一態様によれば、より有用でないページに優先してより有用なページをメモリに保持できるだけでなく、そうしたページに対する実際の要求がない時であっても、より有用でないページあるいは使用されていないページに優先してより有用なページをメモリにロード（プリフェッチ）することができる（すなわち、メモリが自動的に登録（ｐｏｐｕｌａｔｅ）される）。この登録（ｐｏｐｕｌａｔｉｏｎ）し、および／または再び釣り合いを取ることは、リブートの後や大量のメモリを解放した後、ある程度連続的に、または少なくとも規則的になど、バックグラウンド動作として様々な時に様々な方法で行うことができるのが望ましい。メモリマネジャが使用する登録機構は、目立たない方がよく、また空いている（ｉｄｌｅ）優先度のＩ／Ｏおよび空いている検出機構に基づくことが好ましい。後述するように、これは単なるスケジューリングアルゴリズムではなく、入ってくる通常のＩ／Ｏパターンを監視し、通常のＩ／Ｏのためのシークと重ならない、あるいは通常のＩ／Ｏにためのシークを引き起こさないと思われる時にバックグラウンドＩ／Ｏをスケジュールすることにより、抑制的な（ｔｈｒｏｔｔｌｉｎｇ）形で動作することができる。空いている検出機構（例えば空いているタスクとして待ち行列に入れられる）は、ユーザ入力、ＣＰＵおよびディスクを調べることによりシステムがアイドル状態である時にそれを判定して、目立たない形でメモリの釣り合いを取る。とは言えメモリのフォアグラウンドの登録も時によっては有用であり、したがってメモリのプリロードの一部またはすべての優先度を高くすることができる。
【００４７】
　プリフェッチの際は、アクティブなアプリケーションとバックグラウンド作業を行うプログラムとの間の干渉を制限する機構によりＩ／Ｏ動作を上述のように管理して、効率よくすることができる。例えば、シーク時間を短縮するためにＩ／Ｏ転送を分類することができ、またＩ／Ｏ転送に優先順位を付けて、バックグラウンドの（例えばプリフェッチ）動作がフォアグラウンドの動作を遅らせず、ユーザの通常のシステム使用の障害とならないようにすることができる。さらに、Ｉ／Ｏ要求を分類し、ドライバスタックを通じてこの情報を渡す機構を提供することができ、それにより低レベルの機構は適切な優先順位でＩ／Ｏをスケジュールすることができる。これにより、優先度が低いＩ／Ｏのカテゴリがより優先度が高いカテゴリに干渉することができなくなる。というのも、そのような干渉があると、異なるカテゴリの下で所与の動作が複数回要求される可能性があり、このため優先順位が逆転するのを回避する必要が生じるかもしれないからである。異なるカテゴリからのＩ／Ｏは、最も一般的な使用パターンを認識し、干渉を最小に抑えようとするアルゴリズムを使用してディスパッチすることができる。
【００４８】
　Ｉ／Ｏ動作の実施態様の１つは、他のユーザおよびシステムのアクティビティのパフォーマンスを損なうことなく、充分に利用されていない資源を活用することであるが、ユーザのフォアグラウンドアプリケーションに干渉せずにディスクから有用性の高いファイルページを読み込む際に問題が生じる可能性がある。そのような問題の１つは、レジストリファイルや一時的なインターネットファイルのキャッシュインデックスなど、ユーザが排他的に開いているファイルからプリフェッチする必要があるということである。このようなファイルがすでに排他的に開かれている状況では、ファイルを通常通りに開いてそこからプリフェッチすることができない。同様に、メモリ管理機構がプリフェッチのためにファイルを開くことに成功し、ファイルへの排他的なアクセスを必要とするアプリケーションがファイルを開こうとした場合、アプリケーションは失敗し、その結果ランダムアプリケーションエラーとして知覚される。この問題は、ファイルシステムがそのファイルの共有情報を更新しない通常と異なる（ａｔｙｐｉｃａｌ）方法でファイルを開く特殊なＡＰＩを呼び出すことによって回避することができる。
【００４９】
　別のＩ／Ｏに関連する問題は、システム上のより優先度が高いＩ／Ｏに干渉しない形でＩ／Ｏ要求を発行することに関する。これは、部分的には、最後の正常なＩ／Ｏ以後ディスクが十分に長い時間（例えば７５ミリ秒）アイドル状態でない場合には優先度が低いＩ／Ｏを開始しないことによって達成することができる。ただしこの結果優先順位逆転の問題が生じるが、この問題は特殊なフラグを付したダミーの読み取りをＩ／Ｏスタックを通じて送ることによって解決することができる。ダミーの読み取りパケットを送ることは、Ｉ／Ｏスタックと通信して優先度の逆転を通知する１つの方法であるが、この方法は、実際の要求がスタック中で分散した多数の下位要求（ｓｕｂ−ｒｅｑｕｅｓｔ）に分割され、元の要求の操作（ｈａｎｄｌｅ）を通じてはそれらすべてに到達することができない場合でも機能することに留意されたい。フィルタドライバは、対応するＩＲＰ（Ｉ／Ｏ要求パケット）を認識すると、その範囲と重複する保留中のＩ／Ｏすべての優先度を上げ、そして実際の作業を行わずにダミーの読み取りＩＲＰが完了される。ただし、この措置を用いても、優先度が低いページングＩ／Ｏの大きなリストを発行すると、通常の優先度あるいは優先度が高いスレッドを妨害する可能性がある。したがって、これは、一度に１つのファイルにつき僅か数個の優先度の低いプリフェッチページングＩ／Ｏだけを発行することによって回避することができ、これにより優先順位逆転が生じる可能性が大幅に低減し、その継続時間が短縮する。こうした改良により、ディスク上の有用性が高いファイルページとメモリ中の有用性が低いページとを識別すると、ユーザの現在のアクティビティへの干渉を懸念することなく、要求を直ちに待ち行列に入れることができる。
【００５０】
　本発明のこの実施態様の結果、通常のシステム使用を干渉せずにＣＰＵの利用率が著しく上がる。多くの一般的なユーザにとって、実際に使用する戻されたページのファイルの全セットはメモリに保持できるだけの大きさである。これらの必要とされるページは、ブート後にプリロードすることができ、また高い優先度のメモリ要求が一時的に発生し、それらのページをディスクにスワップしなければならない場合に復元することもできる。必要とされるメモリの総計のワーキングセットが所与のアプリケーションおよびシステムに対して大きすぎる場合は、ワーキングセットのサブセットをメモリに保持することができ、一方で本発明はページのバランスのためにＩ／Ｏを効率よくしようと努めることに留意されたい。
【００５１】
　ただし、多くの一般的な消費者向けのシナリオをテストした結果、比較的複雑なワークロードで参照されるページの総数であっても現在のメモリ量に収まることが分かっている。例えば、様々な実験から判断されるように、何らかの非常に重要なワークロードに必要とされるページは、３８４メガバイトのＲＡＭを備えるマシンのメモリに収まり、多くのページは２５６メガバイトのＲＡＭに収まった。メモリは必要とされる以上の容量を備えるので、本発明は、適切なページをプリロードしてページング障害（ｐａｇｅ　ｆａｕｌｔ）をなくすことを可能にし、それによりユーザ入力に応答して最大限のＣＰＵ利用率でユーザアプリケーションを実行できるようにする。
【００５２】
　ページング障害を解消した（あるいはほぼ解消した）結果、本発明では、現在よりもはるかに積極的にディスクを管理することが可能になる。例えば、多くの事例では、スタンバイ状態からの再開がディスクの回転立ち上がり（ｓｐｉｎ　ｕｐ）のために遅れるのを解消することができる。したがって、本発明のプロアクティブで、および拡張されたメモリ管理の大きな利点の１つは、タブレットコンピューティングデバイスや、ラップトップおよびその他の同様のデバイスなどの携帯用デバイスがディスクからの読み込みを行わずに長時間作動できることである。バッテリ電源に依存する場合にディスクを回転させないでおくことは、モバイルユーザにとって大幅な電力の節減となる。これは、長時間ディスクを回転させないでおくと、一般には、携帯マシンのバッテリ寿命が延び、ディスク寿命が延びるためである。
【００５３】
　ディスクからの読み取りがない時にディスクを回転させておく唯一の理由は、書き込みに対応するためである。しかし、典型的な書き込み動作は、同じディスクセクタへの反復的な書き込みであり、長期間にわたって異なるセクタに書き込みが行われることは通常多くない。この結果、図３に示すような、バッテリによってバックアップされるメモリまたはその他の不揮発性ＮＶＲＡＭを使用した単純なディスクセクタキャッシュにより、一般には書き込みに対処することができる。この場合は、比較的少量の随意の（点線の枠で表す）不揮発性ランダムアクセスメモリ（ＮＶＲＡＭ）３０２を、全体的な不揮発性記憶システム３００の一部とすることができ、これにより、ユーザが文書を保存する際など、いくらかの書き込みが避けられない、あるいは望ましいときにディスクを回転させないでおくことができる。一実施形態では、３２メガバイトのＮＶＲＡＭにより、テストしたシステムが比較的長い期間にわたってそのようなディスクを必要とする書き込みを行わないようにすることが可能であった。その期間中ディスクは回転させないでおくことができ、一方で電子メールを読む、ウェブを閲覧する、文書を編集し、保存するなどの一般的なタスクを行うことができる。不揮発性ランダムアクセスメモリ３０２は、オプションのプロアクティブな記憶管理システム３０４（ここに記載するプロアクティブなメモリ管理システム２００と多少似たものでよい）によってプロアクティブに管理することができ、ディスクの回転中により価値の低い格納ページをＮＶＲＡＭ３０２からディスク２０４にスワップして、後にディスクの回転を停止する時のためにスペースを解放することに留意されたい。
【００５４】
　ディスクを回転させないでおくことにより、必要とされる最初のディスクアクセスには深刻なペナルティが課されるが、メモリおよびセクタキャッシュの入念な管理により、大半の場合は同期の遅延を回避することができる。ただしこれは常に可能であるとは限らず、したがってオペレーティングシステムは、いつディスクを停止し、再始動させるのが最も有益であるかについて戦略的な判断を行わなければならず、また事例によっては、今後開発されるアプリケーションがディスクの再始動までの間を埋める一助となる可能性もある。
【００５５】
　要約すると、一般に、本発明は、通常のシステム使用中の一要素として最も速度の遅いコンポーネント、すなわちディスクを使用する必要性を大幅に低減するメモリ管理技術を目的とする。本発明は、新規なプロアクティブで復元力のあるメモリ管理の手法を介して、ブート、高速のユーザ切り替え、あるいはゲームプログラムなどの大きなアプリケーションの終了などの後であっても、メモリに関連する重要な動作に対する安定した応答性をもたらすように構成される。本発明により、ディスクの立ち上がり時に遅れがないスタンバイからの確実な高速再開も可能となり、現在においては要求時ページングのためにディスクを必要とする、大きく、費用のかかるオペレーションの応答時間も短縮される。自己調整型のメモリキャッシュと、システム使用パターンに適合し、全体のパフォーマンスを向上させるディスク上の自動的なファイルレイアウトとからその他の利点を享受することができる。さらに他の利点には、メディアアプリケーションが使用するメモリおよびディスクの帯域幅を保護することによるメディア障害の激減、対話による応答を悪化させる可能性があるアンチウィルススキャナ、ファイルインデクサおよびログオンスクリプトなどのバックグラウンド処理からの保護、および長時間にわたりディスクを回転させないでおくことによるモバイルデバイスのバッテリ寿命の延長、低ノイズ、低振動が挙げられる。複数のバックグラウンドストリームを有するメディアアプリケーションおよびｅＨｏｍｅ様のアプリケーションのストリーミング機能の向上も本発明から得られる。
【００５６】
　次項では各種の例示の実施形態について述べるが、これらの実施形態は、メモリを管理するために取得できる情報を利用する方法の一部に過ぎないことに留意されたい。
【００５７】
　例示の実施形態
　下記の本発明の少なくとも１つの例示の実施形態は、マイクロソフト社のＷｉｎｄｏｗｓ（登録商標）ＸＰ　ＳＰ１オペレーティングシステムおよびＷｉｎｄｏｗｓ（登録商標）ＮＴＦＳファイルシステムを実行する、変更したシステムに実装したものである。ただし、本発明を特定のオペレーティングシステムまたはメモリ管理の種類に限定する意図はなく、本発明は、推論的でインテリジェントなキャッシュ管理方式を含むので、メモリ管理システムによって管理されるメモリを備える任意のコンピュータとともに動作し、利益を提供することを意図する。さらに、例示の実施形態は、メモリのロード元である補助記憶装置としてディスクドライブを用いて構成したが、補助記憶装置はディスクドライブに限らず、フラッシュメモリ、ネットワークデータソース、テープドライブ、あるいは実質的に任意タイプのデータ記憶などの代替装置を含み、また実際に全くディスクを持たないコンピュータシステムが本発明から大きな利益を得られることは容易に理解されよう。
【００５８】
　本発明の一態様によれば、また図４Ａおよび４Ｂの例示の実施形態４００に概略的に示すように、本発明のプロアクティブで復元力を持ち、および自己調節型のメモリ管理のアプローチを実施する各種の機構が開発されている。このような機構は、参照されたページの追跡と記録、より有用なページが侵食されないように行われる保護、および移行後のそれらのページのフェッチとメモリへの回復を可能にする。これらの機構は必要な際にはカーネルの一部として作動するが、ユーザモードの（特権のない）サービスをも含むことができる。
【００５９】
　上述のように、メモリ使用およびその他のコンテクストデータを追跡し、記録するために、本発明は情報を収集して、現在のユーザが頻繁に行うアクティビティでアクセスされるページを含むリッチデータを得る。例えば、指定された期間における単一のプロセスによるページへの各アクセス、あるいはシステム全体でのページアクセスを記録することができる。そのために、図４Ａに示すように、例示的なメモリ管理の実施形態４００では、追跡機構４０２あるいはトレーサが、アクセスされるページに対応するアクセスビットの監視を含めてページ関連アクティビティ４０４を監視し、障害により（ｖｉａ　ｆａｕｌｔ）ページがメモリに取り込まれるのを観察することによってページの参照を追跡する。
【００６０】
　同じく図４Ａに示すように、追跡情報はロガー４０６によって維持され、各ページをファイルとオフセットとの対として、あるいはヒープなどのプライベートなページの場合はワーキングセットと仮想アドレスとの対として識別するデータ構造（下記で述べるように例えば１つまたは複数の以前のログ４０８および未加工のログ４１０を含む）とする。より詳細には、一実装では、追跡機構４０２は、プロセス関連の仮想メモリイベントをカーネルバッファ（図示せず）に記録し、そこから後に未加工のログ４１０が作成される。追跡機構４０２によって取得することが可能な別の有用な情報は、（参照時に）ページがメモリにあったかどうか、あるいはディスクからハード障害にしなければならなかったかどうかを追跡する。仮想メモリイベントには、あるアドレス空間の特定ページへの最初のアクセスと、そのページが再度アクセスされる率を記録するアクセスカウンタとが含まれる。また、マシンの状態についての情報と、追跡時にアクティブであった認識されたコンテクストも含まれる。ページごとに、あるシナリオの最近起動されたうちのどの起動でそのような各ページが参照されたか、および同様のシステム状態情報など、追加的な情報を保持することができる。
【００６１】
　このように、本発明のメモリ管理方法の重要な基盤は、システムで監視したメモリ管理イベント、すなわち特定プロセスによる仮想アドレス空間の部分へのアクセスの表現を記録することにある。あらゆるアクセスを記録することは実際的ではなく、したがってここに記載する実施形態では、この作業はページの細分性で行い、最初のアクセスと、その後のアクセスの頻度についての情報を記録する。
【００６２】
　ロガー４０６は、カーネルの追跡を受け取り、それを未加工ログ４１０としてフォーマットすることにより動作する。ロガーの役割には、未加工ログでユーザのディスクが一杯にならないようにするため、リソース制限が守られるようにすることが含まれる。このように追跡結果は未加工ログ４１０に記録され、一定の適度に短い時間にわたるプロセスの特定のインスタンス化についてのアクセスパターンを表す。ログは例えば、１回のブートまたは休止状態からの再開、コントロールパネルを表示するなど何らかのユーザイベントに続く期間、あるアプリケーションがフォアグラウンドアプリケーションである時間、特定のイベントに結び付けられていない一定の時間などについて収集することができる。
【００６３】
　ここに記載する実施形態では、ログは、コンテクスト、メモリ状態、および時間情報を含むヘッダを含み、また＜ソース、オフセット、ハード障害＞のエントリからなるテーブルを含む。ソースとは所与のオフセットでアクセスされたファイルまたはプロセスのアドレス空間であり、ハード障害はそのデータがディスクから読み込まれたかどうかを示し、ここからおよそのコストが得られる。
【００６４】
　各種のコンテクストについてページ使用を追跡するのに加えて、アクセスパターンとメモリ中の個々のページの寿命についての情報も維持することができ、ワーキングセット内のページの有用性に関してより適切な判断を行えるようにする。例えば、現在のオペレーティングシステムは、ページごとにわずか２ビットの寿命情報しか保持せず、そのため、メモリマネジャにとっては、最近（例えば過去数分間に）参照されていないページはすべて同じに見えることが多い。本発明では、メモリマネジャシステムがアクセス権を有する情報は、各ページに適用された一定の期間（例えば数分間）と、各ページが作成され最後にアクセスされた期間とを含むことができる。本発明によれば、それらのページがディスクに書き出されている時であってもページについてのこの情報を機構が保持する。すなわち、メモリにあるときにページを追跡するだけでなく、そのページがディスクにあるときにもこの情報を保持する。この追加的な情報により、ページがその寿命中にどのようにアクセスされるかについてのはるかに正確な見通し（ｐｉｃｔｕｒｅ）が得られる。
【００６５】
　追跡機構４０２は、複数のアクティブな追跡に同時に作用することができる。これらの追跡は、例えば特定のサイズ（例えば１００，０００個のレコード）に達するまで、あるいは特定の継続時間（例えば５分間）に相当するまで次から次に収集することが可能な連続的に行われる追跡を含むことができる。実施される１つの追跡機構は、オーバーヘッドが相当に低く（例えば４５０ＭＨｚプロセッサのＣＰＵ０．１％と数メガバイトのメモリで一日分のページ使用を記録する）、システムに負担をかけることなく、どのページが参照されるかについてのそのような連続的な追跡を可能にすることに留意されたい。自動的に起動される、あるいはテストまたは訓練を目的とするＧＵＩツールによる要求に応答して起動されるなど、追跡は、断続的なサンプリング型の動作であってもよく、それにより、ページ情報の収集を、アプリケーションの起動、高速のユーザ切り替え、あるいはスタンバイからの再開など特定のアクティビティや移行に関連付けることができる。
【００６６】
　あるユーザ／システムに対してゼロから追跡／記録を始めるのではなく、いくらかの量の事前トレーニングを（例えば他のユーザおよびシステムについて）行うことができることに留意されたい。これにより、何らかの事前に構築されたファイル、ページの価値、および情報データベースを、セットアップ時、あるいはアプリケーションプログラムのインストール時など他の適切な時にコピーすることが可能になる。この静的な解決法に支援されて、本来であれば新規のユーザ、新しいシステム、新しいオペレーティングシステムバージョンおよび／または新しいプログラムを追加する際に必要となる学習曲線が加速する。このように、本発明は、価値に基づいた選択的または全体的なメモリロードを行うことによって利点を提供し、価値の判定が、使用履歴を追跡することによるか、および／またはトレーニング（シミュレーション、コード分析、異なるマシンでの実行などを含む）によるかを問わず、少なくとも部分的には事前の監視時に行われる。データを維持するために、ページの使用状況および価値に関する情報の永続的な格納庫（ｒｅｐｏｓｉｔｏｒｙ）を構築し、使用し、記憶するが、これは、実行ファイル、文書、および特殊目的のデータファイルおよびデータベースを含む任意のファイルに置くことができる。さらに、このような事前に得た知識により、ロギングおよび追跡を介した動的な情報収集を行わなくとも、要求時のＩ／Ｏ転送が大幅に減ることにも留意されたい。例えば、要求時Ｉ／Ｏ転送は、単に事前に構築したページグループ分けファイルを提供することによって低減させることができ、例えばユーザがコントロールパネルを表示させるための最初のページで障害であった場合、関連する他のページが効率よくディスクからメモリに入れられる。
【００６７】
　ここに記載する追跡機構４０２およびさらなる処理を介して、メモリ管理システムは、使用頻度など、ファイルページの１つまたは複数の測定可能な価値を確定するのに使用できるデータを含むシナリオプラン（例えばファイル）４２２（図４Ｂ）を構築し保持する。このために、各種のコンポーネントが、データを処理してメモリ管理の決定を行うのに適した形にするが、このコンポーネントには、基本的に以前のログ４０８を未加工のログ４１０と組み合わせてページ情報データベース４１４に入れるインテグレータ４１２が含まれる。
【００６８】
　図４Ａに示すインテグレータ４１２は、ユーザレベルのプロセス（カーネルアクセスが必要でないため）で実行できるサービスであり、未加工ログ４１０を読み込み、それを処理し、未加工ログに含まれる情報と、すでにシステム（例えば以前のログ４０８）に格納されている同様のコンテクストについてのページ情報をまとめる。初めは以前の情報がないが、システムはすぐに、特定コンテクストの以前の発生からすでに知られている情報を未加工の追跡結果が主として更新し、精製する役割を果たす状態に達する。実装した１つの単純なインテグレータ４１２は、所与のコンテクストクラスについての追跡で挙げられる各ページについて履歴ビットベクトルを保持する。新しい各インスタンスをまとめるために、履歴ビットベクトルをシフトし、最も最近の期間を示す新しいビットを加える。新しいログに現れるページは新しいビットとして「１」を含み、その他のページは「０」を含む。初めて現れるページはページ情報データベース４１４に加え、最近使用されていないページはデータベース４１４から削除することができる。
【００６９】
　このように、インテグレータ４１２を介して、特定のイベントまたは期間をカバーする未加工ログ４１０を、同一プログラムの以前の実行など以前の同様のイベントのインスタンスについて知られている情報を含む以前のログ４０８とまとめて、ページ情報データベース４１４を提供する。ページ情報データベース４１４は基本的に、ログに含まれる情報をまとめて、そのデータを追跡するのに必要なメモリ量を減らし、一方で情報を再編成して、同様のイベントが適切にグループ分けされ、未加工ログ４１０と以前のログ４０８のファイルおよびページの共通性が識別されるようにする。
【００７０】
　図４Ａおよび４Ｂに示すように、ページ情報データベース４１４の情報を（例えばマイニングサービス４２０により）解析してシナリオプラン４２２を生成することができる。シナリオプラン４２２は、可能性のある将来の仮想アドレス空間の構成と、特定コンテクストにおける仮想空間内のページへのアクセスの確率を示す。後述するように、このシナリオプラン４２２は、リバランサ４２４を使用してシステムへの将来のアクセスを予測し、またリバランサ４２４がシステムによって監視されたイベントに応答して新しいメモリ管理プランを作成することを可能にする。例えば、シナリオプランは、システムのブートおよびシャットダウンや休止からの再開など、システムにとって重要であることが分かっているシナリオに関する情報を含むページ情報ファイルの固定セットから構築することができる。コンテクストの確立には特定のメッセージを使用する。このデータに、例えば対話式のグラフィックツールを通じてユーザが選択されたシナリオからの情報を追加することができ、それら異なるシナリオには、その対話式ツールを通じて変更できるデ障害の優先順位を与えることができる。
【００７１】
　シナリオプラン４２２が変化すると、シナリオページプライオリタイザ（ｐｒｉｏｒｉｔｉｚｅｒ）４２６（例えばマイニングサービス４２０に統合されるか、またはその他の形で関連付けられたユーザモードサービス）がシナリオプラン４２２を処理して、メモリに入れて保護すべきページのリストを生成する。この再生成は、例えば少なくとも１５分に１度プランが再生成されるようになど、最後に行われてからの最大経過時間に基づいてトリガすることもできる。一実施形態では、優先順位付けを達成するために、計算した優先順位スコアを各ページに割り当てる。スコアが決定すると、次いで計算されたスコアでページを分類して、優先順位を付けたページリスト４２８を構築する。
【００７２】
　頻度に基づく使用状況にスコア付けする際の１要素は、データシナリオファイルにしたがって、例えば過去１時間以内、過去８時間以内、前日、前週など、最近の期間にそのページが何回使用されたかを数えることによって決定される。そのために、ページプライオリタイザ４２６は、１時間、８時間、１日、３日、１週間、３週間の枠（ｂｕｃｋｅｔ）など、様々な時間枠についてページ使用頻度を追跡する。それら時間枠それぞれでページが使用された回数に基づいて、ページに０から１２７などのスコアを割り当てることができる。
【００７３】
　各シナリオプランは、起動ごとにタイムスタンプを付して、最近そのページがいずれの実行回数（例えば３２回）で使用されたかを追跡することもできる。ページの最近の使用にはより重い重み付けを与える。さらに、スタートメニューについて保持されるシナリオプランなど、既知のシナリオプランにあるページのスコアを増大させて、それらのページにより高い優先度を与えることができる。
【００７４】
　ページのスコア付けでは、あるページが使用されていると認められるコンテクストを考慮に入れることもできる。したがって、スコアは、マシンの状態、実行中のアプリケーション、および最近のユーザ動作に依存する可能性がある。このような高精度のページ優先順位付けの手法は、時間の経過とともに精度が高くなると考えられる。各シナリオプランは、ページがアクセスされた過去何回か（例えば３２回）の実行についての時間および履歴の情報を保持するので、情報が記録されている他のページに相対的に、特定のファイルページがそれらのシナリオにわたってどれほどの頻度でアクセスされているかを判定できることに留意されたい。
【００７５】
　図４Ｂに示すように、イベントを生成するためにオブザーバ４３０が提供される。オブザーバ４３０は、物理メモリ使用の明白な変化を含むシステム状態を監視するオペレーティングシステムカーネル中のスレッドを含むことが望ましい。また、シャットダウンまたは休止の開始など特定の動作が行われるときに明示的な呼び出しを行って状態の評価をトリガしてもよい。さらに、アプリケーションは、カーネルを呼び出して、アプリケーションが選択されたラベルを適用することのできる潜在的に興味深い状態変化をシステムに通知することができる。
【００７６】
　一実施形態では、追跡されるイベントにはアプリケーションの起動、およびカーネルに渡される認識されたウィンドウ付け（ｗｉｎｄｏｗｉｎｇ）メッセージが含まれる。ウィンドウメッセージを捕捉することにより、システムは、アプリケーションまたはシステムコンポーネントが、スタートメニューの起動、またはファイルオープン、プリント、あるいはコントロールパネルのダイアログまたはウィンドウの作成などメモリに関連する重要な動作を行っている可能性を暗示していることを検出することができる。発見的教授法を使用して、頻繁に生じる、あるいは間隔のつまったイベントの冗長な追跡を回避することができる。これらのイベントに応答して、カーネルは、ページのページテーブルエントリのアクセスビットを利用することにより、個々のプロセスのページ使用状況を追跡する。これらのビットは、追跡の開始時にクリアし、追跡の最後にチェックする。追跡中のアクセスビットの除去またはリセットも記録する。ＲｅａｄＦｉｌｅを通じてアクセスされるページ、およびディスクからの読み取りが行われるハード障害も記録する。
【００７７】
　システム状態の変化が認められるか、または呼び出しが重要なイベントを知らせると、イベント４３２が生成され、状態評価および更新サービス４３４によってシステム状態を更新することができる。図４Ｂに示すように、追跡を起動するかまたは終了することができ、および／または状態データ（および他のシステムメモリ情報）４３６を追跡機構に渡し、再び釣り合いを取ることをトリガすることができる。状態には、アクティブなコンテクスト、ワーキングセット間の現在のメモリ分散、ゼロリスト、ダーティリスト、およびスタンバイページセットが含まれる。システムメモリ情報には、上述のように、仮想アドレスサイズおよびワーキングセットのサイズ、プロセススナップショットデータ、ハード障害およびソフト障害、ハードウェアによってサポートされるメモリアクセスビット、オペレーティングシステムによって得られるページごとの使用情報、およびページの価値を判定するのに使用することができるその他任意の測定データまたは監視可能データ、コンテクストおよび状態が含まれる。
【００７８】
　先に概説したように、連続的に、あるいは追跡の最後にカーネルが追跡バッファを生成し、このバッファは、各種ファイルから必要とされる特定のページのリストと、システム上にあったゼロページ／フリーページの個数などの各種の内部的なメモリ管理カウンタ、およびスタンバイページセットの構成を含む。同じく上述のように、追跡バッファはユーザレベルのサービスによって収集され、例えばプリフェッチディレクトリに保持されるシナリオファイルを更新するために使用される。シナリオファイルは、ＡｐｐＬａｕｎｃｈ．ＷＭＰｌａｙｅｒ．ｅｘｅ−．．．ｐｆｘあるいは　Ｓｈｅｌｌ．ＳｔａｒｔＭｅｎｕＣｒｅａｔｅ．．．ｐｆｘなど、追跡したコンテクストに基づいて名前を付けることができる。
【００７９】
　このように、システムイベントは、システム状態の再評価を行わせ、再びメモリ内容の釣り合いを取ることをトリガすることができる。コンテクストは、特定のシステムコードが実行されると打ち込まれる（ｆｉｒｅｄ）マーカによって示され、またＡＰＩなどを通じてアプリケーションによって特定される。アプリケーションは、ユーザが個別設定した独自のコンテクストを指定およびマークするためのＵＩを提供することができる。再評価を行わせることができる他のシステムイベントには、大きなメモリの割り振りおよび解放、プロセスの起動、またはユーザがアイドル状態になった、および作業を再開したことを検出することが含まれる。このように、メモリマネジャおよびリバランサ４２４は、トリガ／イベント／コンテクストに対して動作を行うことができ、例えば現在のコンテクストでどのページが必要とされる可能性がより高いか優先順位を付け、他のページに対してそれらのページを高く評価し、その新しい優先順位付けに基づいてメモリにプリロードするなどを行う。これらのコンテクストを追跡プロセッサが使用して、追跡したページ使用データを分類し、グループ分けすることができる。識別すると、そのページおよびページのグループを、スワップアウトする、あるいは関連するページの１つが障害であった時に同時に関連ページをすべてメモリに入れるなどメモリ中で再配置する。
【００８０】
　メモリリバランサ４２４は、メモリ管理システムのプリフェッチポリシーのユーザモード要素とカーネルモード要素とのインタフェースをとる。下記で述べるように、リバランサ４２４は主としてカーネルに依存してスタンバイページセットのページを識別および順序付けし、価値が低いページを識別し、より価値の高いページを保護する。より価値の高いページを保持することに加えて、メモリリバランサ４２４の主目的の１つは、優先順位スコアによって決定されるより価値の低いページをより価値の高いページに置き換えることにより、シナリオページプライオリタイザ４２６が選んだページでメモリを登録（ｐｏｐｕｌａｔｅ）することである。このために、メモリリバランサ４２４は、シナリオページプライオリタイザ４２６およびカーネルのメモリ内容カウンタを監視して、何らかの動作を行うことが必要かどうかを判断する。カーネルのメモリ内容カウンタからは、利用可能なフリーページ／ゼロページの数についての情報と、各スタンバイページサブセット（下記で説明する）についての統計、およびメモリ圧迫のためにいくつのページが再び目標とされたかなどの情報が得られることに留意されたい。
【００８１】
　リバランサ４２４はこのように現在のメモリの配置を監視し、ワーキングセットを刈り取るルーチンを起動することができる。この情報から、リバランサ４２４は、プリフェッチされたデータを格納するために使用するメモリ予算を判断する。推論的な管理によって制御されるページのプールは、そのシステムに確定された一定の範囲外の内容のないページなど、有用性が低いページを識別することによって決定する。有用性が低いページは、ワーキングセットにない有効な内容を有し、比較的長い時間使用されていないページも含むことができる。リバランサ４２４は、シナリオページプライオリタイザ４２６を介して、シナリオプラン４２２の情報を使用してその予算内でより理想的なメモリの内容セットを確立する。リバランサ４２４は、（例えばＡＰＩを通じて）照会を行ってどれだけの内容がメモリにあるかを判断し、プラン４２２を変更することができる。
【００８２】
　フリーページまたは価値の低いページがある場合、リバランサ４２４は、より価値の高いページがメモリに入れられるまで優先度の低いプリフェッチＩ／Ｏを使用してより価値の高いページをそれらのページに登録（ｐｏｐｕｌａｔｅ）するようにシステムカーネルに要求する。そのために、リバランサ４２４が予算に従ってページのリストを確立すると、そのロード（及びページアウト）することが望ましいページのリストがＩ／Ｏプランナ４４０に渡される。これらのＩ／Ｏ命令はディスク待ち行列内で分類してシークを最少にし、はるかに高いディスクスループットを得ることが好ましい。リバランサ４２４がそれが希望するだけのページをメモリに入れることが出来ない場合、リバランサ４２４は、そのリストのどこまでをメモリに入れたかを記憶し、より多くのページが利用可能になったときにその場所からプリフェッチを継続する。
【００８３】
　シナリオページプライオリタイザ４２６が新しいページリストを作成したとき、あるいはメモリに入れたプリフェッチされた（復元力のある）ページのいずれかがメモリ圧迫のために再び目標とされるときには、メモリリバランサ４２４はリストの最初からプリフェッチを開始する。新しいページの一群（ｂａｔｃｈ）をプリフェッチする前に、リバランサ４２４は、以前にフェッチしたページについての設定をクリアしてそれらのページを使用可能な状態にする。
【００８４】
　メモリリバランサ４２４は、ユーザアクティビティの干渉を回避するなどのために、いずれのページをメモリに入れるかについて比較的保守的なものとなるようにプログラムすることがあることに留意されたい。そのために、リバランサは、Ｉ／Ｏプランナ４４０を介して優先度の低いＩ／Ｏ動作を行うように設定され、システムがメモリ圧迫を受けている時には動作を取ることを回避することができる。例えばリバランサ４２４は、比較的長時間使用されていないページと非常に頻繁には使用されていないページのみを置き換えるように設定することができ、また、その一部のそれより少ない量（例えば数メガバイト）のメモリがフリーページ、ゼロページ、またはその他の有用性が低いページである、何らかの閾値量の使用可能メモリ（例えば１６メガバイト）がシステムにない場合には動作を行わないようにすることができる。
【００８５】
　Ｉ／Ｏプランナ４４０は、Ｉ／Ｏを発行することによって所望のメモリに内容を入れるよう機能するが、システムによって行われる他のＩ／Ｏへの干渉を回避する必要性のために制約される。これを達成する方法の１つは、何回かの比較的軽量のＩ／Ｏアクティビティの間待機し、およびタスクをやや小さな転送サイズに分割するものである。ただし、本システムでは、優先順位方式を実施することによりこの種の非干渉性を提供することができる。したがって、リバランサ４２４は、例えば周期的に、および／またはトリガされると、上述のように予想される使用状況、効率などに基づいてどのページをメモリに入れるべきかを決定し、Ｉ／Ｏプランナは、他のＩ／Ｏ動作への干渉を最小に抑える方法で、Ｉ／Ｏ転送を制御して必要に応じてメモリ内容を調整する。
【００８６】
　図５Ａに示すように、従来のメモリ管理では、書き出されるページは、まず単純なＦＩＦＯ型リストであるスタンバイページリスト５００に入れられる。ＦＩＦＯ型のリストであることにより、このリスト５００に加えられるページはそれぞれの重要度を加味することなくすべて平等に扱われる。この結果、有用なページであったページは今後使用される可能性のない別のページより前に再び目標とされるが、リスト５００ではそのページより後になるという状況が生じる。
【００８７】
　図５Ｂに示すように、本発明の一実施態様によれば、より価値の高いページを保護するようにこの方法を改良するために、追跡に基づく優先度のスコア付けによって決定されるページの相対的価値を考慮した優先順位付きスタンバイページセットあるいはキャッシュ５０２が提供される。図５Ｂに示すように、このような優先順位を付けたスタンバイページセットは、サブセット５０２０〜５０２１５を含み、各サブセットは、特定の優先順位に割り当てられた１つまたは複数のページを含む。図５Ｂにはそのようなサブセットをいくつか（１６個）しか示していないが、容易に理解されるように、実際には任意の数のそのようなサブセットを実現することが可能であり、またサブセットは様々なサイズとすることができることに留意されたい。サブセット５０２０は保護されないサブセットであり、図５Ａの既存のスタンバイページセット５００のように機能し、十分に追跡されないページはこのリストに入れることができる。優先順位を付けたスタンバイページセット５０２からあるページを再び目標とする必要があるときは、この優先度が最低となる空でないサブセットからそのページを取り出す。
【００８８】
　したがって、あるファイルが閉じられるか、ワーキングセットセットが刈り込まれると、そのページはスタンバイページセット５０２に入れられ、そのページを入れるべきサブセットについて、例えばそのページのメモリマネジャのＰＦＮデータベースエントリに格納された、追加的なより広範囲の使用情報に基づいて決定を行う。ページの寿命およびアクセス頻度のフィールドに加え、シナリオデータベースの情報とシステムの現在のコンテクストに基づいてページの優先度を設定することを可能にするフィールドが存在する。
【００８９】
　システムのメモリ管理ポリシーのスレッドは、（例えば図４Ｂのリバランサ４２４を起動することにより）優先順位を付けたスタンバイページセット５０２の釣り合いを再び１秒に１回など時折り行う。その後長時間にわたって使用されない高優先度のサブセットに入れたページは、より優先度が低いサブセットに移す。
【００９０】
　一実施形態では、一定のページを最も優先度が高いサブセット５０２１５に入れ、そのページは再び目標とされることがない。これにより、メモリ圧迫下であってもそれらのページをメモリに入れたまま固定する機構が得られる。この機構は、そのページを必要とする可能性のあるプロセスが消滅し、再び復帰することができる（および実際にはまだ作成されていない可能性がある）ので、ＶｉｒｔｕａｌＬｏｃｋよりも強力であることに留意されたい。
【００９１】
　このように、本発明によれば、これらの機構により、メモリ中に保持することが望ましいページを選択することが可能になる。シナリオに相対的な優先順位を割り当てることにより、通常はより重要なページがより重要でないページより前に再び目標とされることはなくなる。さらに、ディスクにあるより価値の高いページに置き替えることが可能な価値の低いページまたは価値のないページを判断することができる。
【００９２】
　一実施形態では、メモリ管理システムは、スタンバイページセットを１６個のサブセットに分割し、そのサブセットを使用して異なるページクラスを分類し、またサブセットを順序付けることにより一部のページクラスにより程度の高い保護を与える。上述のように、有用なデータを含むが、もはやどのワーキングセット４５０（図４Ｂ）にもないページ（例えば、ファイルページ、あるいは実行中プロセスのヒープページなど）は、メモリリバランサ４２４によりそのページに設定された設定に基づいて、および／またはそのページがメモリにあった間の使用パターンに基づいて、優先順位付けしたスタンバイページセット５０２中の特定のサブセットに入れられる。上述のように、時間枠を使用して例えば１０秒単位でページの使用を追跡することができ、それと併せて、その古さを推定するために、作成以降そのページがアクセスされた期間の数と、ページがアクセスされた最後の期間を追跡することができる。
【００９３】
　リバランサ４２４は、１秒に１回など周期的にスタンバイページセット５０２の一部を処理（ｗａｌｋ）し、特定のページを入れるべきサブセットを評価し直す。一般に、長時間使用されていないページは、それに適した優先度の低いサブセットに移す。
【００９４】
　表１は、一実施形態で、あるページに適したサブセットを決定する仕組みを示す。あるアプリケーションがメモリを必要とし、使用できるフリーページまたはゼロページがない場合は、最低のインデックスが付けられたサブセットからスタンバイページセットのページを再び目標とする。
【００９５】
【表１】
2004133934.tif 000003
【００９６】
　さらに、２０分間使用されていないワーキングセットページは、ワーキングセットメモリ４５０からスタンバイページセット５０２に追い出して、優先順位付けによる管理によって利用できるようにする。図４Ｂに示すように、従来の時分割システムのように、最近使用されたページを管理するためにワーキングセットマネジャ４５２が残され、一方、メモリリバランサ４２４を介したスタンバイページセット管理は、より長期間にわたってページが管理される。
【００９７】
　概念的には、表１に示すように、この例示の実施形態では、サブセット管理システムは、スタンバイページセットの管理に、最後に使用された時間に基づくカテゴリと頻度に基づくカテゴリとを使用し、これらをそれぞれ「時間のふるい（ｔｉｍｅ　ｓｉｅｖｅ）」と「再使用の梯子（ｒｅｕｓｅ　ｌａｄｄｅｒ）」と称する。時間のふるい（サブセット５０２０〜５０２８で実施される）および再使用の梯子（サブセット５０２１０〜５０２１４で実施される）の概念は、最近使用されていないページは他のページより前にスタンバイページセット５０２から再び目標とすべきであるが、必ずしも極めて最近でなくとも頻繁に使用されているページには特別な保護を与えるべきであるというものである。したがって、スタンバイページセット５０２にあるページは一連のサブセットとして編成され、それらのページは周期的に、時間の経過にともなう各々の不使用状況または実際の使用状況に基づいて、より保護されているサブセットからより保護の少ないサブセットに移すか、あるいはその逆を行う。このように、使用されないページが後に必要とされないことを想定して、そのページを「５分間使用されていない」サブセットから「１０分間使用されていない」サブセット、「３０分間使用されていない」サブセットなどに移して行き、最終的には「３日間使用されていない」サブセット（あるいはその他最低のサブセット）に到達する。ただし少なくとも一定の妥当な時間にわたってやや頻繁に使用されているページは、この段階（ｃａｓｃａｄｅ）の最初の部分を飛ばすか、より長い期間用の何らかのサブセットに保持することができる。
【００９８】
　時間のふるいと再使用の梯子のカテゴリによって達成されるのは、短い時間しか使用されていないページをより頻繁に使用されているページと区別し、そのページを個々のカテゴリのサブセット中で優先順位付けすることである。時間のふるいは、最後に使用されてからの時間が最も長いことに基づく勾配に作用するのに対し、再使用の梯子は頻度に基づく勾配に作用する。言うまでもないが、これらの勾配は、特定の時間や頻度に限定する必要はなく、実際には現実の条件に基づいて変動する可能性があり、所与のシステムに対して適宜サブセット間でページを移動し、スタンバイページセットからページを除去する。
【００９９】
　ディスクから先ず最初に読み込まれるページは、スタンバイページセット５０２のサブセットに入れなければならないことに留意されたい。ページのクラスには、プリフェッチされたページ（サブセット５０２１２）、通常の障害でクラスタ化されたページ（サブセット５０２９）、およびクラスタ化によってプリフェッチに挿入されたページ（サブセット５０２５）が含まれる。これらのページクラスは、この順序で優先順位を付けられ、プリフェッチされたページは再使用の梯子のページの中に入れられ、挿入されたプリフェッチページは時間のふるいのページの中に入れられ、通常の障害のページは再使用の梯子のページと時間のふるいのページの間に入れられる。
【０１００】
　つまり、有用性がより高くメモリに存在することが求められるページをスタンバイサブセットに入れて通常のメモリプレッシャーから保護する。その結果、主要なシナリオを識別し、それらシナリオの優先順位を付ける際に適切な決定を行うことによりパフォーマンスが著しく増大する。例えば、２５６メガバイトのシステムでは、ブート、高速のユーザ切り替え、および大きなアプリケーションからのメモリ圧迫などの移行後であっても、シェル、コンポーネント、およびアプリケーションにおける多くの一般的な動作で安定した応答性が得られた。著しいディスクＩ／Ｏ遅延を伴わない、スタンバイ状態からの迅速な再開（例えば２秒未満）が安定して達成された。さらに、これらの機構により、取り込まれたシナリオ情報を連続的に処理することができる自己調節のポリシーと規則のセットを実施して、どのページをメモリに入れるべきかを決定することができる。
【０１０１】
　上記の説明から理解されるように、必要とされるデータの真のサイズが大きく、アクセスする必要があるディスク位置の数が多いので、ジャストインタイム方式のプリフェッチから得られる効率の増大で瞬時に近いユーザ体験を提供することはできない。これに代えて大幅に体感上の性能を向上させるために、本発明は、ユーザがお気に入りの頻繁に使用するシナリオのページをあらかじめメモリに入れる必要があることを認識する。したがって、ポリシーマネジャがメモリに入れるべきページのセットを識別すると、ディスクのアイドル期間を利用してそれらのページをプリフェッチしなければならない。ただし、多数（例えば数百）の推論的な同期ページングＩ／Ｏを待ち行列に入れるにはあまりに多くの資源を必要とし、例えばフォアグラウンドアプリケーションがその時に何かをディスクから要求する場合には、そのアプリケーションの要求がディスク待ち行列で阻止されてしまい、その結果無応答状態が非常に長く（例えば数秒）続く可能性がある。ユーザアプリケーションは、アイドル状態にあるように見えるディスクに推論的なＩ／Ｏを待ち行列として入れることを決定したちょうどその時に常に障害を受ける可能性があるので、このような状況を回避するためアイドル状態の検出だけに依存することはできない。
【０１０２】
　上述のように、本発明は、優先順位を付けたＩ／Ｏに対するサポートを提供することによりこの問題を回避し、それにより、低優先度のディスク待ち行列に推論的なプリフェッチが発行された場合、より高い優先度で待ち行列に入れられているフォアグラウンドアプリケーションからのページング要求に大きな遅延を生じさせない。
【０１０３】
　さらに、高優先度のＩ／Ｏが一度に１つずつ発行される場合は、それらのＩ／Ｏを優先度が低いプリフェッチＩ／Ｏに差し込む（ｉｎｔｅｒｌｅａｖｅ）ことができる。その結果生じるシークパターンは、ディスク帯域幅に大きく影響し、応答時間が損なわれる。このため、推論的なプリフェッチＩ／Ｏのオーバーヘッドを真に制限するには、優先順位を付けたＩ／Ｏに対するサポートと、失敗から学習しパターンを変更する迅速な自己調節型のアイドル検出とを組み合わせる必要がある場合がある。優先順位を付けたＩ／Ｏのサポートと、参照されるメモリを識別し、優先順位を付ける機構とを組み合わせると、システムは、システム上の他のプロセスによる干渉からプロセスの動作を保護することができる。従来、これはプロセスのＣＰＵ優先度を変更することによって試みていたが、この優先順位付けは、少なくとも汎用オペレーティングシステムではディスク待ち行列またはメモリ管理で採用されることはなかった。
【０１０４】
　制約のシステムを図６に概略的に示すが、ここでは制約ボックス６０２が、ユーザのアプリケーションへの干渉を制限するために、アンチウィルススキャナ、ファイルインデクサ、およびログインスクリプトなどのバックグラウンドアクティビティを制約する。制約ボックス６０２は、オーディオおよびビデオのストリームで障害の一因となるディスクとメモリの干渉からメディアアプリケーションを保護することもでき、またシステム負荷が重い状態であってもフォアグラウンドアプリケーションへの対話的な応答性を保証することができる。
【０１０５】
　メモリ管理の改良と優先順位を付けたＩ／Ｏのサポートを統合することにより、高度な応答性を備えた予測可能なシステムの基盤が得られる。制約ボックス６０２はそれ自体では、より精度の高いリソースマネジャであれば提供することが可能な緻密な資源保証（例えば１００ｍｓ以下）は提供しないが、システムが常に直ちに反応するように見えるように、応答時間への干渉の否定的な影響を制限することに留意されたい。
【０１０６】
　上述のように、プリフェッチは、ページのセットを効率的にディスクからメモリに読み込み、特定のスタンバイサブセットに入れるための機構である。プリフェッチは、メモリにないページセットに対する非同期のページングＩ／Ｏを待ち行列に入れることによって機能する。本発明では、ディレクトリページおよびその他のファイルメタデータ、ならびにページファイルページのプリフェッチがサポートされる。本発明では、改良されたプリフェッチ機構により、ファイルページ、ページファイル中のプライベートな（プロセスヒープ、カーネルプール）ページ、レジストリページ、あるいはＭＦＴ（マスタファイルテーブル）あるいはディレクトリなどのファイルシステムのメタデータを含む、追跡で識別された任意のページを効率的にメモリに入れることができる。
【０１０７】
　前述から分かるように、各種のプロアクティブなメモリ管理機構は、データがほぼ常にあらかじめメモリにあることを保証することにより、タブレットなどの移動デバイスや、デスクトップおよびラップトップを含む、大容量のメモリを備える新しいマシンを用いてユーザの体感上の性能を大きく向上させる。これらの方法および機構はプロアクティブであり、リッチ情報を得ることによりグローバルなメモリ管理に（メモリとディスクの両方で）対処し、あらゆる使用レベルでメモリを管理する。Ｉ／Ｏのカテゴリと共にＩ／Ｏの効率性も提供して、干渉を最少に抑えながらＩ／Ｏ転送を最適化することを試みる。よりインテリジェントに管理される、優先順位を付けたスタンバイページセットによって、より価値の低いページに優先してより価値の高いページを維持することが容易になり、これも有用性評価の概念の一要素として作用する。追跡により、ユーザ定義のコンテクスト、アプリケーション定義のコンテクスト、およびシステム定義のコンテクストを含むコンテクストとともに、より最適なメモリ使用が決定される。このように、本発明の包括的なメモリ管理システムおよび方法は、現代のコンピューティングで必要とされる著しい利点と利益を提供する。
【０１０８】
　本発明は、各種の変更および代替の構成が可能であるが、その特定の例証の実施形態を図面に示し、上記で詳細に説明した。ただし、本発明をここに開示する特定の形態に限定する意図はなく、本発明は、本発明の精神および範囲内に該当するすべての変更、代替の構成、および均等物を包含することは理解されたい。
【図面の簡単な説明】
【０１０９】
【図１】本発明を組み込むことが可能なコンピュータシステムを概略的に表すブロック図である。
【図２】本発明の一態様によるシステムコンポーネント間の基本的関係を表すブロック図である。
【図３】本発明の一態様によるシステムコンポーネント間の基本的関係を表すブロック図である。
【図４Ａ】本発明の一態様によるプロアクティブなメモリ管理を行うのに適した一般的なアーキテクチャを表すブロック図である。
【図４Ｂ】本発明の一態様によるプロアクティブなメモリ管理を行うのに適した一般的なアーキテクチャを表すブロック図である。
【図５Ａ】スタンバイページセットにページデータを保持する１方式を示すブロック図である。
【図５Ｂ】本発明の一態様による、優先順位を付けたスタンバイページセットにより、優先順位を付けたサブセットにページデータを保持する代替方式を表すブロック図である。
【図６】本発明の一態様による、ユーザのアプリケーションへの干渉を制限するためにバックグラウンドアクティビティを制約する制約システムを表すブロック図である。
【符号の説明】
【０１１０】
　１００　コンピューティングシステム環境
　１１０、１８０　コンピュータ
　１２０　処理装置
　１２１　システムバス
　１３０　システムメモリ
　１３１　ＲＯＭ
　１３２　ＲＡＭ
　１３３　ＢＩＯＳ
　１３４、１４４　オペレーティングシステム
　１３５、１４５、１８５　アプリケーションプログラム
　１３６、１４６　プログラムモジュール
　１３７、１４７　プログラムデータ
　１４０、１５０、１６０　インタフェース
　１４１　ハードディスクドライブ
　１５１　磁気ディスクドライブ
　１５２　磁気ディスク
　１５５　光ディスクドライブ
　１５６　光ディスク
　１６０　ユーザ入力インタフェース
　１６１　ポインティングデバイス
　１６２　キーボード
　１６３　マイクロフォン
　１６４　タブレット
　１７０　ネットワークインタフェース
　１７１　ＬＡＮ
　１７２　モデム
　１７３　ＷＡＮ
　１８１　メモリ記憶装置
　１９０　ビデオインタフェース
　１９１　モニタ
　１９４　出力周辺インタフェース
　１９５　スピーカ
　１９６　プリンタ
　２００　メモリ管理システム
　２０２　メモリ
　２０４　ディスク
　３００　不揮発性記憶システム
　３０２　ＮＶＲＡＭ
　３０４　記憶管理システム
　４０２　追跡機構
　４０４　ページ関連アクティビティ
　４０６　ロガー
　４０８、４１０　ログ
　４１２　インテグレータ
　４１４　ページ情報データベース
　４２０　マイニングサービス
　４２２　シナリオプラン
　４２４　リバランサ
　４２６　プライオリタイザ
　４２８　ページリスト
　４３０　オブザーバ
　４３４　状態評価および更新サービス
　４３６　状態データ
　４４０　Ｉ／Ｏプランナ
　４５０　ワーキングセット
　４５２　ワーキングセットマネジャ
　５００　スタンバイページリスト
　５０２　スタンバイページセット
　５０２０〜１５　サブセット
　６０２　制約ボックス
【図１】
2004133934.tif 000004
【図２】
2004133934.tif 000005
【図３】
2004133934.tif 000006
【図４Ａ】
2004133934.tif 000007
【図４Ｂ】
2004133934.tif 000008
【図５Ａ】
2004133934.tif 000009
【図５Ｂ】
2004133934.tif 000010
【図６】
2004133934.tif 000011