Open棟梁Project - マイクロソフト系技術情報 Wiki
目次 †
概要 †
仮想アドレス空間にマッピングされた各コミット済みページは
- 物理メモリ
- 物理ストレージ(ページングファイル、メモリマップトファイル)
に支持される。
ページ †
- 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(ドライバ)を確認できる。