Exemples de très grands exécutables
Exemple de scénarios d'utilisation de très grands exécutables.
Exemple de modèle d'espace adresse de grand programme
MAXDATA=0x50000000(non DSA)- Régions shmat/mmap requises dans les segments 0xB, 0xC et 0xE
- Accessibilité aux textes et aux données pré-relocalisées de la zone de bibliothèque partagée
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
Vous pouvez voir dans cet exemple que les segments 0x8-0xA sont disponibles pour l'exécutable.
HUGE_EXEC=0HUGE_EXEC=0x8HUGE_EXEC=0x9
Les options 1 et 2 insèrent l'exécutable dans les segments 0x8-0x9, alors que l'option 3 insère l'exécutable dans les segments 0x9-0xA.
Exemple de modèle d'espace adresse de très grand programme
MAXDATA=0x50000000 DSA- Régions shmat/mmap requises dans les segments 0xB, 0xC et 0xE
- Accessibilité aux textes et aux données pré-relocalisées de la zone de bibliothèque partagée
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
Vous pouvez voir que les segments 0x4-0xA sont disponibles pour l'exécutable.
HUGE_EXEC=0x8HUGE_EXEC=0x9
L'option 1 insère l'exécutable dans les segments 0x8-0x9, alors que l'option 2 insère l'exécutable dans les segments 0x9-0xA.
HUGE_EXEC=0 ne serait pas approprié pour ce client car le système choisirait des segments 0xB–0xC pour l'exécutable (en raison de l'adaptateur DSA). Cela empêcherait ces segments d'être disponibles pour shmat/mmap après l'exécution. La définition de HUGE_EXEC sur l'un des segments 0x4, 0x5, 0x6 ou 0x7, tout en permettant l'insertion comme demandé, aurait pour résultat de limiter la croissance du tas du processus au segment juste en dessous du segment de départ demandé.Exemple de modèle d'espace adresse de très grand programme sans accès à la zone de bibliothèque partagée
MAXDATA=0xB0000000 DSA- Pas de région shmat/mmap
- Aucune accessibilité à la zone de bibliothèque partagée
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:
Vous pouvez voir que les segments 0x4-0xF sont disponibles pour l'exécutable.
HUGE_EXEC=0HUGE_EXEC=0xE
Les deux options insèrent l'exécutable dans les segments 0xE-0xF.
Exemple de modèle d'espace adresse de processus par défaut
MAXDATA=0(non DSA)- Pas de région shmat/mmap
- Accessibilité aux textes et aux données pré-relocalisées de la zone de bibliothèque partagée
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
Vous pouvez voir que les segments 0x3–0xC sont disponibles pour l'exécutable.
1. HUGE_EXEC=0
2. HUGE_EXEC=0x3
...
10. HUGE_EXEC=0xBLes options 1 et 2 donnent des résultats identiques - insertion de l'exécutable dans les segments 0x3-0x4.
Exemple de segment de texte shtext_in_one avec une seule zone de bibliothèque partagée
MAXDATA=0x70000000(non DSA)- Régions shmat/mmap requises dans les segments 0xC, 0xD, 0xE et 0xF
- Accessibilité à la zone de bibliothèque partagée
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)
Vous pouvez ainsi voir que les segments 0xA–0xB sont disponibles pour l'exécutable.
HUGE_EXEC=0,shtext_in_oneHUGE_EXEC=0xA,shtext_in_one
Les deux options insèrent l'exécutable dans les segments 0xA-0xB et le texte de la bibliothèque partagée dans le segment 0x1.
Exemple de shtext_in_one avec deux segments de texte de zone de bibliothèque partagée
MAXDATA=0x70000000 DSA- Régions shmat/mmap requises dans les segments 0xA et 0xB
- Accessibilité au texte de la zone de bibliothèque partagée (créée avec l'attribut 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)
Vous pouvez voir que les segments 0xC-0xE sont disponibles pour l'exécutable.
HUGE_EXEC=0,shtext_in_oneHUGE_EXEC=0xC,shtext_in_one
Les deux options insèrent l'exécutable dans les segments 0xC-0xE et le texte de la bibliothèque partagée dans les segments 0x1 et 0xF.