Open棟梁Project - マイクロソフト系技術情報 Wiki

* 目次 [#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(インターラクティブ・デスクトップ)

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

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

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

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

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

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

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

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

ただし、「各種ヒープ」のサイズの問題は発生する。

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

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

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

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

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

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

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

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

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

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

ただし、

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

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

**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オブジェクトを作成することはできない。

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