Open棟梁Project - マイクロソフト系技術情報 Wiki
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

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

* 目次 [#q0ad531a]
#contents

*概要 [#na30b400]
デスクトップヒープは、ウィンドウステーション内の~
デスクトップ・オブジェクト(GDIオブジェクトを除く)を格納する。
デスクトップ・ヒープは、[[ウィンドウステーション]]内の~
デスクトップ・オブジェクト([[GDI]]オブジェクトを除く)を格納する。

*構成 [#fafafd39]
デスクトップ・ヒープの構成は以下の通り。

**デスクトップ・ヒープのストレージ領域 [#c2b4643b]
 カーネル・アドレス空間 - セッション・スペース┬->セッション・イメージ・スペース(Session Image Space)
                                        ├->セッション構造(Session Structure)
                                        ├->セッション・ビュー・スペース(Session View Space) ─-> デスクトップ・ヒープ
                                        └->セッション・ページ・プール(Session Page Pool)

**デスクトップツリーとデスクトップヒープの構成 [#jfa81a6c]
**デスクトップ・ツリーとデスクトップ・ヒープの構成 [#jfa81a6c]
 ┬ Session 0
 │ ├--- WinSta0(インターラクティブ・ウィンドウ・ステーション)
 │ │    ├--- Default(インターラクティブ・デスクトップ)
 │ │    ├--- Disconnect(インターラクティブ・デスクトップ)
 │ │    └--- Winlogon(インターラクティブ・デスクトップ)
 │ ├--- Service-0x0-3e7$(ノン・インターラクティブ・ウィンドウ・ステーション)
 │ │    └--- Default(ノンインターラクティブ・デスクトップ)
 │ ├--- Service-0x0-3e4$(ノン・インターラクティブ・ウィンドウ・ステーション)
 │ │    └--- Default(ノンインターラクティブ・デスクトップ)
 │ └--- SAWinSta(ノン・インターラクティブ・ウィンドウ・ステーション)
 │      └--- SADesktop(ノンインターラクティブ・デスクトップ)
 │ ├--- WinSta0(対話型ウィンドウステーション)
 │ │    ├--- Default(対話型デスクトップ)
 │ │    ├--- Disconnect(対話型デスクトップ)
 │ │    └--- Winlogon(対話型デスクトップ)
 │ ├--- Service-0x0-3e7$(非対話型ウィンドウステーション)
 │ │    └--- Default(非対話型デスクトップ)
 │ ├--- Service-0x0-3e4$(非対話型ウィンドウステーション)
 │ │    └--- Default(非対話型デスクトップ)
 │ └--- SAWinSta(非対話型ウィンドウステーション)
 │      └--- SADesktop(非対話型デスクトップ)
 │    
 └ Session 1
   └--- WinSta0(インターラクティブ・ウィンドウ・ステーション)
        ├--- Default(インターラクティブ・デスクトップ)
        ├--- Disconnect(インターラクティブ・デスクトップ)
        └--- Winlogon(インターラクティブ・デスクトップ)
   └--- WinSta0(対話型ウィンドウステーション)
        ├--- Default(対話型デスクトップ)
        ├--- Disconnect(対話型デスクトップ)
        └--- Winlogon(対話型デスクトップ)

-セッション 0 の分離 - Windows 7 対応アプリケーションの互換性~
-[[Session 0>(ログオン)セッション#v4f7425e]] の分離 - Windows 7 対応アプリケーションの互換性~
http://msdn.microsoft.com/ja-jp/windows/dd871151.aspx
--Vista以降では、サービスのセッションは常にSession0になる。
--Session0はサービスのみを実行するようになったため、~
初回ログインしたユーザのセッションは、Session1となる。以降Session2、3、4…	
--Vista以降では、サービスの[[セッション>(ログオン)セッション]]は常に[[Session 0>(ログオン)セッション#v4f7425e]]になる。
--[[Session 0>(ログオン)セッション#v4f7425e]]はサービスのみを実行するようになったため、~
初回ログインしたユーザの[[セッション>(ログオン)セッション]]は、Session1となる。以降Session2、3、4…	

**デスクトップヒープの構成 [#f515079b]
**デスクトップ・ヒープの構成 [#f515079b]

デスクトップ毎のデスクトップヒープ領域は、~
[[デスクトップ]]毎のデスクトップ・ヒープ領域は、~
システムのデフォルト値および設定されているレジストリの値を元に、
-「標準ヒープ」
-「インターラクティブ・ヒープ(対話型ヒープ)」、
-および「ノン・インターラクティブ・ヒープ(非対話型ヒープ)」
-「対話型ヒープ」、
-「非対話型ヒープ」

の3つの領域により構成される。

デスクトップヒープ領域のイメージ
デスクトップ・ヒープ領域のイメージ

|標準ヒープ|インターラクティブ・ヒープ&br;(対話型ヒープ) - WinSta0|ノン・インターラクティブ・ヒープ&br;(非対話型ヒープ)| ・・・ |ノン・インターラクティブ・ヒープ&br;(非対話型ヒープ)|
|各ヒープ領域の値|各ヒープ領域の値|各ヒープ領域の値| ・・・ |各ヒープ領域の値|
|>|>|>|>|全デスクトップヒープの容量|
|標準ヒープ|対話型ヒープ - WinSta0|非対話型| ・・・ |非対話型ヒープ|
|各デスクトップ・ヒープ領域の値|各デスクトップ・ヒープ領域の値|各デスクトップ・ヒープ領域の値| ・・・ |各デスクトップ・ヒープ領域の値|
|>|>|>|>|全デスクトップ・ヒープの容量|

デスクトップ毎にダイナミックに確保される「ノン・インターラクティブ・ヒープ」の数が、~
「全デスクトップヒープの容量」と「各ヒープ領域の値」で自動的に決定される。
[[デスクトップ]]毎にダイナミックに確保される「非対話型ヒープ」の数が、~
「全デスクトップ・ヒープの容量」と「各デスクトップ・ヒープ領域の値」で自動的に決定される。

この制約はVista以降で改良されており、「ノン・インターラクティブ・ヒープ」(全容量)は~
デスクトップヒープが、Dynamic Kernel Spaceに実装され、ダイナミックに拡張される。~
これにより、「全デスクトップヒープの容量」は、チューニング不要となった。
この制約はVista以降で改良されており、「非対話型ヒープ」(全容量)は~
デスクトップ・ヒープが、Dynamic Kernel Spaceに実装され、ダイナミックに拡張される。~
これにより、「全デスクトップ・ヒープの容量」は、チューニング不要となった。

ただし、「各種ヒープ」のサイズの問題は発生する。
ただし、「各種デスクトップ・ヒープ」のサイズの問題は発生する。

サーバでは、「標準ヒープ」と「インターラクティブ・ヒープ」の容量は変更しないため、~
「全デスクトップヒープの容量」と「ノン・インターラクティブ・ヒープの容量」により決定される。
サーバでは、「標準ヒープ」と「対話型ヒープ」の容量は変更しないため、~
「全デスクトップ・ヒープの容量」と「非対話型ヒープの容量」により決定される。

*各ヒープの説明 [#j645e0ec]
**各ヒープの容量 [#u6300e9d]
OSによって異なる。

**標準ヒープ [#c8565b4c]
-全デスクトップに共有される。
-全[[デスクトップ]]に共有される。
-[[USERオブジェクト>#g2a44623]]を保持する。
-クローバル・ハンドルテーブルや、共有システムの設定が含まれる。
-通常、この領域サイズの変更の必要はない。
 
**インターラクティブ・ヒープ(対話型ヒープ) [#h9fffbb0]
Sessionに唯一の対話型のウィンドウ・ステーションのデスクトップが使用する。~
(WinSta0には、Winlogon、Default、Screen-saverの3つのデスクトップがある)~
**対話型ヒープ [#h9fffbb0]
[[セッション>(ログオン)セッション]]に唯一の対話型の[[ウィンドウステーション]]の[[デスクトップ]]が使用する。~
(WinSta0には、Winlogon、Default、Screen-saverの3つの[[デスクトップ]]がある)~

こちらには、[[USERオブジェクト>#g2a44623]]が格納される。

通常、クライアントOSにてウィンドウの立ち上げすぎなどに起因して~
インターラクティブ・ヒープが枯渇することがある(通常、サーバOSでは問題にならない)。
対話型が枯渇することがある(通常、サーバOSでは問題にならない)。

**ノンインターラクティブ・ヒープ(非対話型ヒープ) [#u1390431]
非対話型のウィンドウ・ステーションのデスクトップが使用する。
**非対話型ヒープ [#u1390431]
非対話型の[[ウィンドウステーション]]の[[デスクトップ]]が使用する。

*その他の用語説明 [#mc6a748c]
**セッション ---> ウィンドウステーション ---> デスクトップ ---> プロセス [#qc59c5b6]
***セッション [#mcbf85b7]
-独自のキーボード、マウスおよびディスプレイを持つ~
対話型のユーザログオンを表し、セキュリティ境界とリソース境界の両方を表す。

-ターミナルサーバやユーザの切り替えにもセッションが利用される。~
全てのプロセスは、このセッションに一意に関連付けられており、~
プロセスの仮想アドレス空間にセッションデータのビューが定義される。~
(Windows Server 2003、Windows XPまで)
**USERオブジェクトと[[GDI]]オブジェクト [#e9e7bdef]

***ウィンドウステーション [#p9501102]
複数の仮想ディスプレイをサポートするために定義されたオブジェクト。

特定のセッションに関連付けられ、~
1つのセッションは複数のウィンドウ・ステーションを持つことができる。

ただし、

対話型のウィンドステーション (インターラクティブ・ウィンドウ・ステーション)は、~
1つのセッションに対して1つだけになる(これはWinsta0と呼ばれる)。

***デスクトップ [#s9bc57b9]
***プロセス [#bf8c22a8]

**USERオブジェクトとGDIオブジェクト [#e9e7bdef]

Windows ウィンドウ マネージャーによって管理される、
-ウィンドウ要素 (ウィンドウやメニューなど) と
-グラフィック要素 (ペン、ブラシ、描画領域など) を

表す 2 つのリソース (USER オブジェクトと GDI オブジェクト) 
表す 2 つのリソース (USER オブジェクトと [[GDI]] オブジェクト) 

-Windows の限界に挑む: 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オブジェクトの使用するメモリはデスクトップ・ヒープから割り当てられる。

-User Objects (Windows)~
http://msdn.microsoft.com/en-us/library/ms725486.aspx

***GDIオブジェクト [#h5d7df9e]
***[[GDI]]オブジェクト [#h5d7df9e]
-フォント
-ビットマップ
-ブラシ
-ペン
-デバイス コンテキスト (描画領域) 

などのグラフィックス デバイス インターフェイス要素を表す。

GDIオブジェクトの使用するメモリは
[[GDI]]オブジェクトの使用するメモリは
-ページ プール、
-セッション プール※

から割り当てられる。

-GDI Objects (Windows)~
-[[GDI]] Objects (Windows)~
http://msdn.microsoft.com/en-us/library/ms724291.aspx

***USERオブジェクトとGDIオブジェクトの最大値 [#z2d92b5f]
-1つのセッション当たり、其々65,536のユーザ・ハンドルだが、~
1つのセッション当たり開くことができるユーザ・ハンドルの最大数は通常より低い(10,000程度)。
***USERオブジェクトと[[GDI]]オブジェクトの最大値 [#z2d92b5f]
-1つの[[セッション>(ログオン)セッション]]当たり、其々65,536のユーザ・ハンドルだが、~
1つの[[セッション>(ログオン)セッション]]当たり開くことができるユーザ・ハンドルの最大数は通常より低い(10,000程度)。

-さらにユーザ・ハンドルのプロセスごとのデフォルト限界がある。~
どのプロセスも 其々10,000 個以上のUSERオブジェクトとGDIオブジェクトを作成することはできない。
どのプロセスも 其々10,000 個以上のUSERオブジェクトと[[GDI]]オブジェクトを作成することはできない。

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


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