マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

物理メモリのライフサイクルについて説明する。
仮想メモリ管理とは別です。

物理メモリの割当・解放

  • システムの起動時には、全てのメモリが未使用ページリスト(Free Page List)に入れられている。
  • Windowsではゼロページスレッドが、未使用ページリストをゼロページリスト(Zero Page List)に入れる。
  • プロセスは開始時に、ゼロページリストから必要なページのみを取得し、ワーキングセットを作る。
  • プロセスの終了時には、ワーキングセットが未使用ページリスト(Free Page List)に戻される。

※ ゼロページスレッドによるゼロページ化はメモリ・スキャベンジ防止のセキュリティ対策のため。

割当

プロセスが(仮想記憶上で)メモリ割当を行った場合、

  • (恐らく)無ければゼロページリストから必要なページのみを取得し、ワーキングセット中に移動し利用する。

解放

プロセスが(仮想記憶上で)メモリ開放を行った場合、

ワーキングセットとスタンバイリスト

トリミング

ワーキングセットをスタンバイリストに移動するWindowsOSの物理メモリ管理の動作を指す。

ワーキングセット

各プロセスに割り当てられる物理メモリ。

  • 各々のプロセスは、ワーキングセットと呼ばれるメモリページの集合を保持している。
  • ワーキングセットは、常に物理メモリ上に割り当てられるメモリページ群である。
  • ワーキングセットは、物理メモリのことなので、仮想メモリとは直接関係はない。
  • 最小ワーキングセットサイズ ≦ ある瞬間の実際のワーキングセット ≦ 最大ワーキングセットサイズ
  • ワーキングセットに含まれるメモリページの数は
    システムによって動的に変化するが、上限と下限が定められている。
    この上限と下限はSetProcessWorkingSetSize?関数によって指定可能である。
  • プロセスがメモリ割り当てを行うと、システムはこのワーキングセットから
    未使用のページを探し、これをメモリ割り当てに使用する。
  • このため、ワーキングセットに関するカウンタは物理メモリのOSによる管理状況を確認するために利用する。
    ※ アプリケーションによるメモリ使用量(仮想メモリの使用量)を確認する用途に使用するのは適切ではない。

プライベート ワーキングセット

ワーキングセットのうち、他のプロセスと共有できない(DLL、MMFを除く)メモリ ページのセット。

システム ワーキングセット

システムに割り当てられる物理メモリ。≒ (ファイル)システムキャッシュ

  • XPマシンをクリーニング&チューンアップ Windows XP快適化計画 2005 - デジタル - 日経トレンディネット
    http://trendy.nikkeibp.co.jp/article/tokushu/gen/20051007/113796/?P=19&rt=nocnt
    • システムキャッシュとは使用されていないメモリをキャッシュ領域として使用するスタンバイリストの仕組み。
    • スタンバイ リスト(変更済みページリストを含む)が実質的にシステムキャッシュとなる(ソフト ページ フォールトを伴う)。
  • TechNet? Blogs > Ask CORE > All Tags > リソース不足について – 番外編1 (64bit 環境での注意点)
    http://blogs.technet.com/b/askcorejp/archive/2009/12/29/1-64bit.aspx
    なお、システム キャッシュ (システム ワーキングセット)は、
    次の 5 種類のワーキングセットが合計されたサイズになる。
    パフォーマンス ログでは Memory\Cache Bytes カウンタを確認する。
  • システム キャッシュ ページ
    Memory\System Cache Resident Bytes
  • ページ プール
    Memory\Pool Paged Resident Bytes
  • Ntoskrnl.exe 内のページング可能なコードとデータ
    Memory\System Code Resident Bytes
  • デバイス ドライバ内のページング可能なコードとデータ
    Memory\System Driver Resident Bytes
  • システム マップドビュー
    ・・・

スタンバイリスト

スタンバイリストは利用可能なページを溜め込んでいるリスト的なもの。

  • ワーキングセットのサイズが過剰と判断された場合、トリミングにより、
    アイドル時間が最も長いワーキングセットのページがスタンバイリストに移動させられる。
  • 長時間プロセスがメモリ割り当てを行わない場合、スタンバイリストのページは自動的に破棄される。

通常のスタンバイリスト

スタンバイリストは、プログラムによって書き換えられていないページ。

変更済みページリスト

変更済みページリストは、プログラムによって書き換えられたページであり、
ページングファイル(ディスク)に書き込まれた後に、スタンバイ リストを経由してでないとワーキングセットに戻せない。

ページ フォールト

ハード ページ フォールト

ワーキングセット中に未使用のメモリページが存在せず、メモリページの個数が上限に達している場合、ワーキングセットからメモリページを取り除き、取り除いたメモリページを必要に応じてページングファイルにスワップアウトし、新たに物理メモリ上のメモリページを割り当て、ワーキングセットに追加する。

ソフト ページ フォールト

また、利用中のワーキングセットのページがトリミングによりスタンバイリストに移動させられた際に、プロセスがこれらのページにアクセスした場合、ページは、ワーキング セットへ "ソフト ページ フォールト" で戻される。これは"ハード ページ フォールト"と比べるとディスク アクセスを必要としないので非常に高速である。

ツール

物理メモリのページ確認

Windbgの以下のコマンドで確認できる。

0: kd> !memusage
loading PFN database
loading (100% complete)
Compiling memory usage data (99% Complete).
             Zeroed: 173816 (695264 kb)
               Free:      0 (     0 kb)
            Standby:  71317 (285268 kb)
           Modified:   1387 (  5548 kb)
    ModifiedNoWrite:    561 (  2244 kb)
       Active/Valid: 145881 (583524 kb)
         Transition:     16 (    64 kb)
            Unknown:      0 (     0 kb)
              TOTAL: 392978 (1571912 kb)

(ファイル)システムキャッシュのサイズ設定

以下の様なツールも存在する。

参考


Tags: :Windows, :メモリ管理, :障害対応, :デバッグ


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-01-30 (月) 16:33:33 (444d)