マイクロソフト系技術情報 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

スレッドのスタック

メモリ プール

メモリ プール(ページ プールおよび非ページ プール)

ページ プール

ページング可能なメモリ プール

(レジストリやメモリ マップ ファイルを表すデータ構造が格納される)  

非ページ プール

ページング不可能なメモリ プール

(カーネルとデバイス ドライバーがシステムがページ フォールトを
処理できないときにアクセスされる可能性があるデータを格納している。)  

参考

カーネル モードで動作するモジュール(ドライバ)から確保され、
モジュール(ドライバ)を識別可能なタグ名が付与される。

以下のAPIにより確保される。

PVOID   ExAllocatePoolWithTag(
IN POOL_TYPE  PoolType,
IN SIZE_T  NumberOfBytes,
IN ULONG  Tag                <<<<< 
);


このタグを利用してリークの原因となっているモジュールを特定できる。


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


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-03-27 (月) 14:00:28 (876d)