「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。
-[[戻る>メモリ管理]]
* 目次 [#q0ad531a]
#contents
*概要 [#na30b400]
デスクトップ・ヒープは、[[ウィンドウステーション]]内の~
デスクトップ・オブジェクト([[GDI]]オブジェクトを除く)を格納する。
*構成 [#fafafd39]
デスクトップ・ヒープの構成は以下の通り。
**デスクトップ・ヒープのストレージ領域 [#c2b4643b]
カーネル・アドレス空間 - セッション・スペース┬->セッション・イメージ・スペース(Session Image Space)
├->セッション構造(Session Structure)
├->セッション・ビュー・スペース(Session View Space) ─-> デスクトップ・ヒープ
└->セッション・ページ・プール(Session Page Pool)
**デスクトップ・ツリーとデスクトップ・ヒープの構成 [#jfa81a6c]
┬ Session 0
│ ├--- WinSta0(対話型ウィンドウステーション)
│ │ ├--- Default(対話型デスクトップ)
│ │ ├--- Disconnect(対話型デスクトップ)
│ │ └--- Winlogon(対話型デスクトップ)
│ ├--- Service-0x0-3e7$(非対話型ウィンドウステーション)
│ │ └--- Default(非対話型デスクトップ)
│ ├--- Service-0x0-3e4$(非対話型ウィンドウステーション)
│ │ └--- Default(非対話型デスクトップ)
│ └--- SAWinSta(非対話型ウィンドウステーション)
│ └--- SADesktop(非対話型デスクトップ)
│
└ Session 1
└--- WinSta0(対話型ウィンドウステーション)
├--- Default(対話型デスクトップ)
├--- Disconnect(対話型デスクトップ)
└--- Winlogon(対話型デスクトップ)
-[[Session 0>(ログオン)セッション#v4f7425e]] の分離 - Windows 7 対応アプリケーションの互換性~
http://msdn.microsoft.com/ja-jp/windows/dd871151.aspx
--Vista以降では、サービスの[[セッション>(ログオン)セッション]]は常に[[Session 0>(ログオン)セッション#v4f7425e]]になる。
--[[Session 0>(ログオン)セッション#v4f7425e]]はサービスのみを実行するようになったため、~
初回ログインしたユーザの[[セッション>(ログオン)セッション]]は、Session1となる。以降Session2、3、4…
**デスクトップ・ヒープの構成 [#f515079b]
[[デスクトップ]]毎のデスクトップ・ヒープ領域は、~
システムのデフォルト値および設定されているレジストリの値を元に、
-「標準ヒープ」
-「対話型ヒープ」、
-「非対話型ヒープ」
の3つの領域により構成される。
デスクトップ・ヒープ領域のイメージ
|標準ヒープ|対話型ヒープ - WinSta0|非対話型| ・・・ |非対話型ヒープ|
|各デスクトップ・ヒープ領域の値|各デスクトップ・ヒープ領域の値|各デスクトップ・ヒープ領域の値| ・・・ |各デスクトップ・ヒープ領域の値|
|>|>|>|>|全デスクトップ・ヒープの容量|
[[デスクトップ]]毎にダイナミックに確保される「非対話型ヒープ」の数が、~
「全デスクトップ・ヒープの容量」と「各デスクトップ・ヒープ領域の値」で自動的に決定される。
この制約はVista以降で改良されており、「非対話型ヒープ」(全容量)は~
デスクトップ・ヒープが、Dynamic Kernel Spaceに実装され、ダイナミックに拡張される。~
これにより、「全デスクトップ・ヒープの容量」は、チューニング不要となった。
ただし、「各種デスクトップ・ヒープ」のサイズの問題は発生する。
サーバでは、「標準ヒープ」と「対話型ヒープ」の容量は変更しないため、~
「全デスクトップ・ヒープの容量」と「非対話型ヒープの容量」により決定される。
*各ヒープの説明 [#j645e0ec]
**各ヒープの容量 [#u6300e9d]
OSによって異なる。
**標準ヒープ [#c8565b4c]
-全[[デスクトップ]]に共有される。
-[[USERオブジェクト>#g2a44623]]を保持する。
-クローバル・ハンドルテーブルや、共有システムの設定が含まれる。
-通常、この領域サイズの変更の必要はない。
**対話型ヒープ [#h9fffbb0]
[[セッション>(ログオン)セッション]]に唯一の対話型の[[ウィンドウステーション]]の[[デスクトップ]]が使用する。~
(WinSta0には、Winlogon、Default、Screen-saverの3つの[[デスクトップ]]がある)~
こちらには、[[USERオブジェクト>#g2a44623]]が格納される。
通常、クライアントOSにてウィンドウの立ち上げすぎなどに起因して~
対話型が枯渇することがある(通常、サーバOSでは問題にならない)。
**非対話型ヒープ [#u1390431]
非対話型の[[ウィンドウステーション]]の[[デスクトップ]]が使用する。
*その他の用語説明 [#mc6a748c]
**[[セッション>(ログオン)セッション]] ---> [[ウィンドウステーション]] ---> [[デスクトップ]] ---> [[プロセス]] [#qc59c5b6]
**USERオブジェクトと[[GDI]]オブジェクト [#e9e7bdef]
Windows ウィンドウ マネージャーによって管理される、
-ウィンドウ要素 (ウィンドウやメニューなど) と
-グラフィック要素 (ペン、ブラシ、描画領域など) を
表す 2 つのリソース (USER オブジェクトと [[GDI]] オブジェクト)
-Windows の限界に挑む: USER オブジェクトと [[GDI]] オブジェクト
--http://technet.microsoft.com/ja-jp/windows/ff606443
--http://technet.microsoft.com/ja-jp/windows/ff621348
***USERオブジェクト [#g2a44623]
-ウィンドウ
-ウィンドウ位置
-メニュー、アイコン
-カーソル(マウスの絵)
-キャレット(TextBox の I)
-フック、DDE、アクセラレータ テーブル(メニューのキーボード ショートカット)
などのユーザー インターフェイス要素を表す。
USERオブジェクトの使用するメモリはデスクトップ・ヒープから割り当てられる。
-User Objects (Windows)~
http://msdn.microsoft.com/en-us/library/ms725486.aspx
***[[GDI]]オブジェクト [#h5d7df9e]
-フォント
-ビットマップ
-ブラシ
-ペン
-デバイス コンテキスト (描画領域)
などのグラフィックス デバイス インターフェイス要素を表す。
[[GDI]]オブジェクトの使用するメモリは
-ページ プール、
-セッション プール※
から割り当てられる。
-[[GDI]] Objects (Windows)~
http://msdn.microsoft.com/en-us/library/ms724291.aspx
***USERオブジェクトと[[GDI]]オブジェクトの最大値 [#z2d92b5f]
-1つの[[セッション>(ログオン)セッション]]当たり、其々65,536のユーザ・ハンドルだが、~
1つの[[セッション>(ログオン)セッション]]当たり開くことができるユーザ・ハンドルの最大数は通常より低い(10,000程度)。
-さらにユーザ・ハンドルのプロセスごとのデフォルト限界がある。~
どのプロセスも 其々10,000 個以上のUSERオブジェクトと[[GDI]]オブジェクトを作成することはできない。
----
Tags: [[:Windows]], [[:メモリ管理]], [[:障害対応]], [[:性能]], [[:デバッグ]]