[[Open棟梁Project>http://opentouryo.osscons.jp/]] - [[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>メモリ管理]]

* 目次 [#f1cf045e]
#contents

*概要 [#w249d97a]
物理メモリのライフサイクルについて説明する。~
※ [[仮想メモリ管理]]とは別です。

*物理メモリの割当・解放 [#o77090d8]
-システムの起動時には、全てのメモリが未使用ページリスト(Free Page List)に入れられている。
-Windowsではゼロページスレッドが、未使用ページリストをゼロページリスト(Zero Page List)に入れる。
-プロセスは開始時に、ゼロページリストから必要なページのみを取得し、[[ワーキングセット>#v4e3258b]]を作る。
-プロセスの終了時には、[[ワーキングセット>#v4e3258b]]が未使用ページリスト(Free Page List)に戻される。~
※ ゼロページスレッドによるゼロページ化はメモリ・スキャベンジ防止のセキュリティ対策のため。

**割当 [#ye5a4235]
プロセスが(仮想記憶上で)メモリ割当を行った場合、
-可能ならば[[スタンバイリスト>#d5d9840d]]のページを[[ワーキングセット>#v4e3258b]]中に移動し利用する。
-(恐らく)無ければゼロページリストから必要なページのみを取得し、[[ワーキングセット>#v4e3258b]]中に移動し利用する。

**解放 [#s5a27905]
プロセスが(仮想記憶上で)メモリ開放を行った場合、
-[[ワーキングセット>#v4e3258b]]中のメモリページがすぐに破棄されるわけではない。
-この場合、メモリページは[[ワーキングセット>#v4e3258b]]からは取り除かれ、[[スタンバイリスト>#d5d9840d]]に追加される。

*ワーキングセットとスタンバイリスト [#wdbcf8be]
**トリミング [#y6b8caa9]
ワーキングセットをスタンバイリストに移動するWindowsOSの物理メモリ管理の動作を指す。

**ワーキングセット [#v4e3258b]
各プロセスに割り当てられる物理メモリ。

-各々のプロセスは、ワーキングセットと呼ばれるメモリページの集合を保持している。
-ワーキングセットは、常に物理メモリ上に割り当てられるメモリページ群である。
-ワーキングセットは、物理メモリのことなので、仮想メモリとは直接関係はない。
-最小ワーキングセットサイズ ≦ ある瞬間の実際のワーキングセット ≦ 最大ワーキングセットサイズ

-ワーキングセットに含まれるメモリページの数は~
システムによって動的に変化するが、上限と下限が定められている。~
この上限と下限はSetProcessWorkingSetSize関数によって指定可能である。

--MSDN ライブラリ > リファレンス > 関数 > SetProcessWorkingSetSize~
http://msdn.microsoft.com/ja-jp/library/cc429341.aspx~
>内部動作に影響を与え、システム全体の性能に影響するため慎重に使用すること。

-プロセスがメモリ割り当てを行うと、システムはこのワーキングセットから~
未使用のページを探し、これをメモリ割り当てに使用する。

-このため、ワーキングセットに関するカウンタは物理メモリのOSによる管理状況を確認するために利用する。~
※ アプリケーションによるメモリ使用量(仮想メモリの使用量)を確認する用途に使用するのは適切ではない。

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

***システム ワーキングセット [#g7ea375d]
システムに割り当てられる物理メモリ。≒ (ファイル)システムキャッシュ

-Windows XP でシステム キャッシュ モードを有効にする場合の注意事項~
http://support.microsoft.com/kb/895932/ja

-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

--システム マップドビュー~
・・・

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

-ワーキングセットのサイズが過剰と判断された場合、[[トリミング>#y6b8caa9]]により、~
アイドル時間が最も長いワーキングセットのページがスタンバイリストに移動させられる。

-長時間プロセスがメモリ割り当てを行わない場合、スタンバイリストのページは自動的に破棄される。

***通常のスタンバイリスト [#h44a2b1f]
スタンバイリストは、プログラムによって書き換えられていないページ。

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

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

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

-ソフトページフォールト - NyaRuRuの日記~
http://d.hatena.ne.jp/NyaRuRu/20051022/p4

*ツール [#cadee27d]
**物理メモリのページ確認 [#i194a19a]
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)

-kernel-mode memusage - NyaRuRuが地球にいたころ~
http://nyaruru.hatenablog.com/entry/20071026/p1

**(ファイル)システムキャッシュのサイズ設定 [#xda02feb]
以下の様なツールも存在する。

-Windows Sysinternals > ダウンロード > ファイルとディスク > CacheSet~
http://technet.microsoft.com/ja-jp/sysinternals/bb897561
>(ファイル)システムキャッシュのワーキングセットのサイズを設定できるアプレット

*参考 [#j9d70ef8]
-メモリ管理~
http://nienie.com/~masapico/doc_MemMan.html
-ASCII.jp:メモリー使用量と性能を改善する7のカーネル改良 (1-3)|あなたの知らないWindows~
http://ascii.jp/elem/000/000/514/514598/
-メモリ割り当てから解放までのメモリライフサイクル - TechTargetジャパン システム運用管理~
http://techtarget.itmedia.co.jp/tt/news/1201/25/news02.html
-Windows の管理: Windows Vista カーネルの内部 : 第 2 部~
https://technet.microsoft.com/ja-jp/magazine/2007.03.vistakernel.aspx
-[DOC]Windows のメモリ管理の進歩 - Microsoft~
https://msdn.microsoft.com/ja-jp/library/cc429281.aspx

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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS