ヒュージ実行可能ファイルの例

ヒュージ実行可能ファイルの使用例のシナリオ

大容量のプログラム・アドレス・スペース・モデルの例

優先アドレス・スペース・モデルが次の場合:
  • MAXDATA=0x50000000 (非 DSA)
  • セグメント 0xB、0xC および 0xE に必要な shmat/mmap 領域
  • 共用ライブラリー域テキストおよび事前再配置済みデータのアクセシビリティー
アドレス・スペースのレイアウトは、次のようになります。
   0x0: System Segment
   0x1:
   0x2: Exec-time Private Dependencies / Stack
   0x3: Process Heap
   0x4: Process Heap
   0x5: Process Heap
   0x6: Process Heap
   0x7: Process Heap
   0x8:
   0x9:
   0xA:
   0xB: shmat/mmap (mapped after exec)
   0xC: shmat/mmap (mapped after exec)
   0xD: Shared Library Text
   0xE: shmat/mmap (mapped after exec)
   0xF: Pre-relocated Library Data

この例から、セグメント 0x8–0xA が実行可能ファイル用に使用できることが分かります。

実行可能ファイルのサイズが 256 MB を超え、512 MB 未満であると仮定した場合、この状態に理想的な HUGE_EXEC 設定は次のとおりです。
  1. HUGE_EXEC=0
  2. HUGE_EXEC=0x8
  3. HUGE_EXEC=0x9

オプション 1 と 2 は実行可能ファイルをセグメント 0x8–0x9 に挿入し、オプション 3 は実行可能ファイルをセグメント 0x9–0xA に挿入します。

非常に大容量のプログラム・アドレス・スペース・モデルの例

ユーザーの優先アドレス・スペース・モデルが次の場合:
  • MAXDATA=0x50000000 DSA
  • セグメント 0xB、0xC および 0xE に必要な shmat/mmap 領域
  • 共用ライブラリー域テキストおよび事前再配置済みデータのアクセシビリティー
アドレス・スペースのレイアウトは、次のようになります。
   0x0: System Segment
   0x1:
   0x2: Exec-time Private Dependencies / Stack
   0x3: Process Heap
   0x4:      |
   0x5:      |
   0x6:      v
   0x7: ____________ (data limit)
   0x8:
   0x9:
   0xA:
   0xB: shmat/mmap (mapped after exec)
   0xC: shmat/mmap (mapped after exec)
   0xD: Shared Library Text
   0xE: shmat/mmap (mapped after exec)
   0xF: Pre-relocated Library Data

これから、セグメント 0x4–0xA が実行可能ファイル用に使用できることが分かります。

実行可能ファイルのサイズが 256 MB より大で、512 MB 未満であると仮定した場合、この状態に理想的な HUGE_EXEC 設定は次のとおりです。
  1. HUGE_EXEC=0x8
  2. HUGE_EXEC=0x9

オプション 1 は実行可能ファイルをセグメント 0x8–0x9 に挿入し、オプション 2 は実行可能ファイルをセグメント 0x9–0xA に挿入します。

注: (DSA のため) システムは実行可能ファイル用にセグメント 0xB–0xC を選択するので、このお客様には HUGE_EXEC=0 設定は適切ではありません。 これにより、実行可能ファイルの後で、shmat/mmap に対してこれらのセグメントを使用できなくなります。 要求に応じて挿入を許可する一方で、HUGE_EXEC を 0x4、0x5、0x6、または 0x7 セグメントのいずれかに設定すると、プロセス・ヒープの成長は、要求された開始セグメント のすぐ下のセグメントに制限されます。

共用ライブラリー域にアクセスできない非常に大容量のプログラム・アドレス・スペース・モデルの例

ユーザーの優先アドレス・スペース・モデルが次の場合:
  • MAXDATA=0xB0000000 DSA
  • shmat/mmap 領域なし
  • 共用ライブラリー域へのアクセシビリティーなし
アドレス・スペースのレイアウトは、次のようになります。
   0x0: System Segment
   0x1:
   0x2: Exec-time Private Dependencies / Stack
   0x3: Process Heap
   0x4:      |
   0x5:      |
   0x6:      |
   0x7:      |
   0x8:      |
   0x9:      |
   0xA:      |
   0xB:      |
   0xC:      v
   0xD: ____________ (data limit)
   0xE:
   0xF:

これから、セグメント 0x4–0xF が実行可能ファイル用に使用できることが分かります。

実行可能ファイルのサイズが 256 MB より大で、512 MB 未満であると仮定した場合、この状態に理想的な HUGE_EXEC 設定は次のとおりです。
  1. HUGE_EXEC=0
  2. HUGE_EXEC=0xE

両オプションとも実行可能ファイルをセグメント 0xE–0xF に挿入します。

注: 要求に応じて挿入を許可する一方で、HUGE_EXEC を 0x4-0xD セグメントのいずれかに設定すると、プロセス・ヒープの成長は、要求された開始セグメントのすぐ下のセグメントに制限されることになります。

デフォルトのプロセス・アドレス・スペース・モデルの例

優先アドレス・スペース・モデルが次の場合:
  • MAXDATA=0 (非 DSA)
  • shmat/mmap 領域なし
  • 共用ライブラリー域テキストおよび事前再配置済みデータのアクセシビリティー
アドレス・スペースのレイアウトは、次のようになります。
   0x0: System Segment
   0x1:
   0x2: Exec-time Private Dependencies / Process Heap / Stack
   0x3:
   0x4:
   0x5:
   0x6:
   0x7:
   0x8:
   0x9:
   0xA:
   0xB:
   0xC:
   0xD: Shared Library Text
   0xE:
   0xF: Pre-relocated Library Data

これから、セグメント 0x3–0xC が実行可能ファイル用に使用できることが分かります。

実行可能ファイルのサイズが 256 MB より大で、512 MB 未満であると仮定した場合、この状態に理想的な HUGE_EXEC 設定は次のとおりです。
    1. HUGE_EXEC=0
    2. HUGE_EXEC=0x3
    ...
   10. HUGE_EXEC=0xB

オプション 1 と 2 の結果は同じで、実行可能ファイルがセグメント 0x3–0x4 に挿入されます。

単一の共用ライブラリー域テキスト・セグメントのある shtext_in_one の例

ユーザーの優先アドレス・スペース・モデルが次の場合:
  • MAXDATA=0x70000000 (非 DSA)
  • セグメント 0xC、0xD、0xE および 0xF に必要な shmat/mmap 領域
  • 共用ライブラリー域のアクセシビリティー
アドレス・スペースのレイアウトは、次のようになります。
   0x0: System Segment
   0x1: Shared Library Text
   0x2: Exec-time Private Dependencies / Stack
   0x3: Process Heap
   0x4: Process Heap
   0x5: Process Heap
   0x6: Process Heap
   0x7: Process Heap
   0x8: Process Heap
   0x9: Process Heap
   0xA:
   0xB: 
   0xC: shmat/mmap (mapped after exec)
   0xD: shmat/mmap (mapped after exec)
   0xE: shmat/mmap (mapped after exec)
   0xF: shmat/mmap (mapped after exec)

これから、セグメント 0xA–0xB が実行可能ファイル用に使用できることが分かります。

実行可能ファイルのサイズが 256 MB より大で 512 MB 未満であると仮定した場合、この状態に理想的な HUGE_EXEC 設定は次のとおりです。
  1. HUGE_EXEC=0,shtext_in_one
  2. HUGE_EXEC=0xA,shtext_in_one

両オプションとも実行可能ファイルをセグメント 0xA–0xB に挿入し、共用ライブラリー・テキストをセグメント 0x1 に挿入します。

注: 要求に応じて挿入を許可する一方で、HUGE_EXEC を 0xB–0xE のいずれかに設定すると、実行可能ファイルの後、セグメント 0xC–0xF の一部が shmat/mmap 用に使用可能になりません。

2 つの共用ライブラリー域テキスト・セグメントのある shtext_in_one の例

ユーザーの優先アドレス・スペース・モデルが次の場合:
  • MAXDATA=0x70000000 DSA
  • セグメント 0xA および 0xB に必要な shmat/mmap 領域
  • (doubletext32 属性により作成された) 共用ライブラリー域のテキストのアクセシビリティー
アドレス・スペースのレイアウトは、次のようになります。
   0x0: System Segment
   0x1: Shared Library Text (primary)
   0x2: Exec-time Private Dependencies / Stack
   0x3: Process Heap
   0x4:      |
   0x5:      |
   0x6:      |
   0x7:      |
   0x8:      v
   0x9: ____________ (data limit)
   0xA: shmat/mmap (mapped after exec)
   0xB: shmat/mmap (mapped after exec)
   0xC: 
   0xD: 
   0xE: 
   0xF: Shared Library Text (secondary)

これから、セグメント 0xC–0xE が実行可能ファイル用に使用できることが分かります。

実行可能ファイルのサイズが 512 MB より大で 768 MB 未満であると仮定した場合、この状態に理想的な HUGE_EXEC 設定は次のとおりです。
  1. HUGE_EXEC=0,shtext_in_one
  2. HUGE_EXEC=0xC,shtext_in_one

両オプションとも実行可能ファイルをセグメント 0xC–0xE に挿入し、共用ライブラリー・テキストをセグメント 0x1 および 0xF に挿入します。

注: 要求に応じて挿入を許可する一方で、HUGE_EXEC を 0x4–0x7 のいずれかに設定すると、プロセス・ヒープの成長は、要求された開始セグメントのすぐ下のセグメントに制限されることになります。