[[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/]]」によって運営されています。

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

* 目次 [#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]
**[[スレッドのスタック]] [#w2384352]

*メモリ プール [#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: [[:Windows]], [[:メモリ管理]], [[:障害対応]], [[:性能]], [[:デバッグ]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS