[[Open棟梁Project>http://opentouryo.osscons.jp/]] - [[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]] -[[戻る>メモリ管理]] * 目次 [#n6f480c5] #contents *概要 [#i7fe8b23] 仮想アドレス空間にマッピングされた各コミット済みページは~ -物理メモリ -物理ストレージ(ページングファイル、メモリマップトファイル) に支持される。 *ページ [#mb961ea4] -仮想メモリ、Windows Serverのメモリチューニングで~ ページングファイルなし(Paging file)は選択可能か? - puti se note~ http://www.putise.com/architecture/windows-paging-file -Windows のユーザープロセスに対する仮想アドレス空間は、3 種類のページに分類できる。 --リザーブ --コミット --ワーキングセット -仮想メモリの各フラグメント(断片)をページといい、サイズは通常 4KBである。 **予約済みページ [#ge05571a] -VirtualAllocで予約したページ -将来の使用に備えて予約されたページ。 -予約済みページは、物理ストレージや、物理メモリを占有しない。 -しかし、仮想アドレス空間が予約されるため当該プロセスのみのメモリ・リーク、~ 正確には、当該プロセスの仮想アドレス空間のリークが発生することはある。 **コミット済みページ [#vfdb3663] -プロセスのコミット済みページ -アプリケーションがコミット済みページにアクセスすると、~ オペレーティングシステムはそのページをワーキング セットに指定する。 **ワーキングセット [#p6d098ad] 仮想アドレスに直接関係しないプロセスの所有する物理メモリ *32ビットと64ビット [#z6ca0b4d] -Windows NT系 - Wikipedia --32ビットと64ビット~ http://ja.wikipedia.org/wiki/Windows_NT%E7%B3%BB#32.E3.83.93.E3.83.83.E3.83.88.E3.81.A864.E3.83.93.E3.83.83.E3.83.88 |32bitの仮想アドレス空間|64bitの仮想アドレス空間|h |合計4GB|合計16TB| |2GBがカーネルモード|8TBがカーネルモード| |2GBがユーザモード|8TBがユーザモード| **32bit [#vfeb5f76] ***仮想アドレス空間 [#u1cb8a2c] 32bitのデフォルトで -ユーザモード(0x00000000~0x7fffffff) -カーネルモード(0x80000000~0xffffffff) ***AWE [#d19fe3d2] AWEにより、32bitプロセスでも仮想アドレス空間の拡張可能。~ (APPがAWEをサポートしていればAWEのAPIを使用して独自にメモリ管理をする) また、3GBスイッチでユーザモードをx86:3GB、x64:4GB※に拡張可能。~ ※ 32ビットプロセス(WOW64)でアクセス可能な仮想アドレス空間にカーネル空間が存在しないため、4GBをフルに活用できる。 **64bit [#feec8fc1] *仮想アドレス空間 [#bc7a9316] [[カーネルモード・ユーザモード]]の仮想アドレス空間 **ユーザモード [#o8f91bd4] **カーネルモード [#zf66d312] カーネルモードの仮想アドレス空間は、全てのプロセスで共有される。 -スレッドの開始アドレスが0x80000000(デフォルト)より上位にある場合、そのスレッドはカーネルモード・スレッドになる。 -カーネルモード・スレッドを作成したデバイス・ドライバを特定するためには、スレッドの開始アドレスを調べ(Pviewer.exe)、~ そのアドレスの上位で最も近いベースアドレスを持つドライバを探す(Pstat.exe)。 ※ これらの調査の操作は、Process Explorerに統合されている(★)。 以下のツールも利用可能。 -Dependency Walker~ http://www.dependencywalker.com/ を使用すると、プロセスで利用されている.sys(ドライバ)を確認できる。 **[[仮想アドレス空間の確保のAPI]] [#f13a7f00] *メモリ プール [#e3f5eb29] メモリ プール(ページ プールおよび非ページ プール) **ページ プール [#f579e4c2] ページング可能なメモリ プール (レジストリやメモリ マップ ファイルを表すデータ構造が格納される) **非ページ プール [#wc948fb9] ページング不可能なメモリ プール (カーネルとデバイス ドライバーがシステムがページ フォールトを~ 処理できないときにアクセスされる可能性があるデータを格納している。) **参考 [#u27d05a2] -Windows ページ プールと非ページ プール~ http://technet.microsoft.com/ja-jp/windows/ee424287 -TechNet Blogs > Ask CORE > All Tags > リソース不足 - 第 1-3 回~ http://blogs.technet.com/b/askcorejp/archive/tags/_ea30bd30fc30b9300d4eb38d_/ >カーネル モードで動作するモジュール(ドライバ)から確保され、~ モジュール(ドライバ)を識別可能なタグ名が付与される。~ ~ 以下のAPIにより確保される。~ ~ PVOID ExAllocatePoolWithTag( IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes, IN ULONG Tag <<<<< ); ~ このタグを利用してリークの原因となっているモジュールを特定できる。 ---- Tags: [[:障害対応]], [[:デバッグ]]