「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
仮想アドレス空間にマッピングされた各コミット済みページは
- 物理メモリ
- 物理ストレージ(ページングファイル、メモリマップトファイル)
に支持される。
ページ †
- Windows のユーザープロセスに対する仮想アドレス空間は、3 種類のページに分類できる。
- 仮想メモリの各フラグメント(断片)をページといい、サイズは通常 4KBである。
予約済みページ †
- VirtualAlloc?で予約したページ
- 将来の使用に備えて予約されたページ。
- 予約済みページは、物理ストレージや、物理メモリを占有しない。
- しかし、仮想アドレス空間が予約されるため当該プロセスのみのメモリ・リーク、
正確には、当該プロセスの仮想アドレス空間のリークが発生することはある。
コミット済みページ †
- プロセスのコミット済みページ
- アプリケーションがコミット済みページにアクセスすると、
オペレーティングシステムはそのページをワーキング セットに指定する。
ワーキングセット †
仮想アドレスに直接関係しないプロセスの所有する物理メモリ
32ビットと64ビット †
32bitの仮想アドレス空間 | 64bitの仮想アドレス空間 |
合計4GB | 合計16TB |
2GBがカーネルモード | 8TBがカーネルモード |
2GBがユーザモード | 8TBがユーザモード |
32bit †
仮想アドレス空間 †
32bitのデフォルトで
- ユーザモード(0x00000000~0x7fffffff)
- カーネルモード(0x80000000~0xffffffff)
AWE †
AWEにより、32bitプロセスでも仮想アドレス空間の拡張可能。
(APPがAWEをサポートしていればAWEのAPIを使用して独自にメモリ管理をする)
また、3GBスイッチでユーザモードをx86:3GB、x64:4GB※に拡張可能。
※ 32ビットプロセス(WOW64)でアクセス可能な仮想アドレス空間にカーネル空間が存在しないため、4GBをフルに活用できる。
64bit †
仮想アドレス空間 †
カーネルモード・ユーザモードの仮想アドレス空間
ユーザモード †
カーネルモード †
カーネルモードの仮想アドレス空間は、全てのプロセスで共有される。
- スレッドの開始アドレスが0x80000000(デフォルト)より上位にある場合、そのスレッドはカーネルモード・スレッドになる。
- カーネルモード・スレッドを作成したデバイス・ドライバを特定するためには、スレッドの開始アドレスを調べ(Pviewer.exe)、
そのアドレスの上位で最も近いベースアドレスを持つドライバを探す(Pstat.exe)。
※ これらの調査の操作は、Process Explorerに統合されている(★)。
以下のツールも利用可能。
を使用すると、プロセスで利用されている.sys(ドライバ)を確認できる。
メモリ プール †
メモリ プール(ページ プールおよび非ページ プール)
ページ プール †
ページング可能なメモリ プール
(レジストリやメモリ マップ ファイルを表すデータ構造が格納される)
非ページ プール †
ページング不可能なメモリ プール
(カーネルとデバイス ドライバーがシステムがページ フォールトを
処理できないときにアクセスされる可能性があるデータを格納している。)
参考 †
カーネル モードで動作するモジュール(ドライバ)から確保され、
モジュール(ドライバ)を識別可能なタグ名が付与される。
以下のAPIにより確保される。
PVOID ExAllocatePoolWithTag(
IN POOL_TYPE PoolType,
IN SIZE_T NumberOfBytes,
IN ULONG Tag <<<<<
);
このタグを利用してリークの原因となっているモジュールを特定できる。
Tags: :Windows, :メモリ管理, :障害対応, :性能, :デバッグ