1 | | = Welcome to Trac 1.0.9 = |
2 | | |
3 | | Trac is a '''minimalistic''' approach to '''web-based''' management of |
4 | | '''software projects'''. Its goal is to simplify effective tracking and handling of software issues, enhancements and overall progress. |
5 | | |
6 | | All aspects of Trac have been designed with the single goal to |
7 | | '''help developers write great software''' while '''staying out of the way''' |
8 | | and imposing as little as possible on a team's established process and |
9 | | culture. |
10 | | |
11 | | As all Wiki pages, this page is editable, this means that you can |
12 | | modify the contents of this page simply by using your |
13 | | web-browser. Simply click on the "Edit this page" link at the bottom |
14 | | of the page. WikiFormatting will give you a detailed description of |
15 | | available Wiki formatting commands. |
16 | | |
17 | | "[wiki:TracAdmin trac-admin] ''yourenvdir'' initenv" created |
18 | | a new Trac environment, containing a default set of wiki pages and some sample |
19 | | data. This newly created environment also contains |
20 | | [wiki:TracGuide documentation] to help you get started with your project. |
21 | | |
22 | | You can use [wiki:TracAdmin trac-admin] to configure |
23 | | [http://trac.edgewall.org/ Trac] to better fit your project, especially in |
24 | | regard to ''components'', ''versions'' and ''milestones''. |
25 | | |
26 | | |
27 | | TracGuide is a good place to start. |
28 | | |
29 | | Enjoy! [[BR]] |
30 | | ''The Trac Team'' |
31 | | |
32 | | == Starting Points == |
33 | | |
34 | | * TracGuide -- Built-in Documentation |
35 | | * [http://trac.edgewall.org/ The Trac project] -- Trac Open Source Project |
36 | | * [http://trac.edgewall.org/wiki/TracFaq Trac FAQ] -- Frequently Asked Questions |
37 | | * TracSupport -- Trac Support |
38 | | |
39 | | For a complete list of local wiki pages, see TitleIndex. |
| 1 | = ALMOS-MK Specification = |
| 2 | |
| 3 | [[PageOutline]] |
| 4 | |
| 5 | == 1) [wiki:replication_distribution Politique de réplication et/ou de distribution des segments] == |
| 6 | |
| 7 | La politique de réplication / distribution vise deux objectifs: renforcer la localité, et SURTOUT minimiser la contention. |
| 8 | - Pour les données non partagées ou read-only, (vsegs de type CODE, STACK) on cherche à les répliquer dans tous |
| 9 | les clusters de l’architecture pour les rapprocher des thread utilisateurs. |
| 10 | - Pour les données partagées (DATA, HEAP, MMAP), on cherche à les distribuer le plus uniformément possible |
| 11 | dans tous les clusters pour éviter la contention. |
| 12 | |
| 13 | On fait l’hypothèse que - pour chaque processus P - le descripteur du processus P, et certaines structures qu’il contient |
| 14 | telles que la table des pages (PT) et la liste des vsegs (VSL) sont répliquées dans tous les cluster qui contiennent |
| 15 | au moins un thread de P. |
| 16 | |
| 17 | 1) pour un processus utilisateur P |
| 18 | |
| 19 | Un vseg désigne une zone mémoire contigüe dans l’espace virtuel d’un processus, auxquels sont attachés |
| 20 | certains attributs (droit d’accès, politique de réplication/distribution dans les différents clusters, cachabilité, etc.). |
| 21 | |
| 22 | - Un vseg est public quand il peut être accédé par n’importe quel thread du processus, |
| 23 | quel que soit le cluster dans lequel le thread s’exécute. Il est private quand il n’est accédé que par les threads |
| 24 | s”exécutant dans le même cluster que le cluster ou est mappé le vseg. |
| 25 | |
| 26 | - Un vseg private est entièrement mappé dans la mémoire physique du cluster K dans lequel il est accessible. |
| 27 | Il est enregistré dans liste des segments et dans la table des pages du cluster K, mais pas dans les autres clusters. |
| 28 | |
| 29 | - Un vseg public est enregistrés dans la liste des segments et dans la table des pages de tous les clusters actifs |
| 30 | (i.e. tous les clusters qui contiennent un thread de P). |
| 31 | Pour maintenir la cohérence entre les tables de pages, chaque vseg public possède un cluster de référence, qui est le cluster |
| 32 | propriétaire du processus (i.e. le cluster Z où a été créé le processus). |
| 33 | Les réplicas du descripteurs de processus (et surtout les tables |
| 34 | associées) autres que celui contenu dans le cluster de référence peuvent être considérées comme des caches read-only. |
| 35 | |
| 36 | - Un vseg peut être localised (toutes les pages du vseg sont mappées dans le même cluster), |
| 37 | ou distributed (différentes pages sont mappées dans différents clusters en utilisant par exemple les bits de poids |
| 38 | faibles comme clé de distribution). Les vsegs privés sont toujours localised. |
| 39 | |
| 40 | Il existe sept types de vsegs, correspondant à des politiques de réplication/distribution différentes : |
| 41 | |
| 42 | - CODE : private / plusieurs vsegs / mêmes adresses virtuelles, même contenu, un vseg par cluster actif |
| 43 | - STACK : private / plusieurs vsegs / un vseg par thread de P, mappé dans le cluster hébergeant le thread |
| 44 | - DATA : public / un seul vseg / distributed |
| 45 | - HEAP : public / un seul vseg / distributed |
| 46 | - REMOTE : public / plusieurs vsegs / chaque vseg localised (dans le cluster concerné par le remote_malloc(x,y) ) |
| 47 | - FILE : public / plusieurs vsegs / chaque vseg localised (dans le cluster contenant le fichier concerné par le mmap() ) |
| 48 | - ANON : public / plusieurs vsegs / chaque vseg distributed (associé à un mmap() anonyme ) |
| 49 | |
| 50 | 2) pour le noyau, |
| 51 | |
| 52 | Les différentes instances du noyau ne travaillant qu’en adressage physique, les segments kernel sont définis dans |
| 53 | l’espace d’adressage physique. |
| 54 | |
| 55 | - un segment kernel est private quand il ne peut être accédé que par l’instance locale du noyau. |
| 56 | il est public quand il peut être accédé par n’importe quel instance du noyau. |
| 57 | |
| 58 | Dans un segment public, le noyau peut définir des structures répliquées homologues. |
| 59 | Si N est le nombre de clusters, une structure répliquées homologue est un ensemble de N structures identiques, |
| 60 | de longueur fixe, implantées à des adresses physiques ne différant entre elles que par les bits de poids fort |
| 61 | définissant les coordonnées du cluster. |
| 62 | |
| 63 | On identifie (pour l’instant) les segments suivants |
| 64 | |
| 65 | - KDATA : private |
| 66 | - KCODE : private |
| 67 | - KSTACK : private |
| 68 | - KHEAP : private |
| 69 | - SHARED : public |
| 70 | |
| 71 | ——————————————————————————————— |
| 72 | B) Construction dynamique des tables de pages d’un processus |
| 73 | ——————————————————————————————— |
| 74 | |
| 75 | 1) Descripteur de vseg |
| 76 | |
| 77 | Un descripteur de vseg contient les informations suivantes : |
| 78 | - TYPE : définit la politique de réplication/distribution (CODE / STACK / DATA / HEAP / HEAPXY / FILE / ANON) |
| 79 | - FLAGS : définit les droits d’accès |
| 80 | - VBASE : adresse virtuelle de base |
| 81 | - LENGTH : longueur du segment |
| 82 | - BIN : pathname to the .elf file. (seulement pour les types DATA et CODE) |
| 83 | - X,Y : coordonnées du cluster où est mappé le vseg (seulement pour un vseg localised) |
| 84 | - MAPPER : radix-tree contenant les pages physiques allouées à ce vseg (seulement pour les types CODE, DATA, FILE). |
| 85 | |
| 86 | 2) Descripteur de processus |
| 87 | |
| 88 | Dans chaque cluster, les différentes informations associées à un processus P sont regroupées dans le descripteur de processus. |
| 89 | Le PID (Process Identifier) est codé sur 32 bits, et il est unique dans le système : les 8 bits de poids fort contiennent |
| 90 | les coordonnées (X,Y) du cluster propriétaire Z, les 24 bits de poids faibles (LPID) contiennent le numéro local dans le cluster Z. |
| 91 | Le descripteur d’un processus P et les tables qui lui sont associées ne sont répliqués que dans les clusters qui contiennent |
| 92 | au moins un thread de P (appelés clusters actifs de P). |
| 93 | |
| 94 | Les principale informations stockées dans le descripteur processus sont les suivantes: |
| 95 | - PID : processus identifier (contient les coordonnées du cluster propriétaire) |
| 96 | - PPID : parent processus identifier, |
| 97 | - XMIN, XMAX, YMIN, YMAX : recrangle recouvrant tous les clusters actifs |
| 98 | - PT : table des pages du processus, |
| 99 | - VSL : liste des vsegs du processus, |
| 100 | - FDT : table des fichiers ouverts du processus, |
| 101 | - TRDL : liste des threads du processus, |
| 102 | - ENV : variables d’environnement du processus, |
| 103 | |
| 104 | Le contenu des tables de pages évolue au cours du temps, et n’est pas identique dans tous les clusters. |
| 105 | En effet le contenu des tables P évolue différemment dans les clusters en fonction des |
| 106 | défauts de pages causés par les threads de P s’exécutant dans les différents clusters. |
| 107 | De plus le mapping des segments private (CODE et STACKS) varie d’un cluster à un autre. |
| 108 | Pour ce qui concerne les vsegs public, seul le cluster de référence contient l’état complet du mapping. |
| 109 | |
| 110 | De même, le contenu des listes de vsegs évolue au cours du temps, et n’est pas identique dans tous les clusters. |
| 111 | En effet chaque vseg private n’est enregistré que dans un seul cluster. |
| 112 | En revanche toutes les listes de vsegs doivent être identiques pour ce qui concerne les vsegs public. |
| 113 | Pour ce qui concerne les vsegs public, tout ajout dynamique d’un nouveau vseg public ou toute extension |
| 114 | doit être répercuté dans tous les clusters actifs. |
| 115 | |
| 116 | 3) Enregistrement et destruction des vsegs |
| 117 | |
| 118 | La politique d’enregistrement et de destruction des vsegs dans les VSL(P,X) dépend du type de vseg: |
| 119 | |
| 120 | 3.1) DATA |
| 121 | Ce type de vseg est enregistré dans la VSL(P,Z)) du cluster Z propriétaire du processus P au moment de la création de P. |
| 122 | Il est enregistré dans la VSL(P,A) d’un autre cluster A chaque fois qu’un thread de P est créé dans le cluster A, |
| 123 | si ce cluster ne contenait pas encore de thread du processus P. |
| 124 | La longueur est définie par le fichier .elf contenant le code binaire du processus. |
| 125 | Il n’y a pas de cluster de mapping pour un vseg distributed. |
| 126 | Ce type de vseg n’est détruit que lors de la destruction du processus. |
| 127 | |
| 128 | 3.2) CODE |
| 129 | Ce type de vseg est enregistré dans la VSL(P,Z) du cluster Z propriétaire du processus P au moment de la création de P. |
| 130 | Il est enregistré dans la VSL(P,A) d’un autre cluster A chaque fois qu’un thread de P est créé dans le cluster A, |
| 131 | si ce cluster ne contenait pas encore de thread du processus P. |
| 132 | La longueur est définie par le fichier .elf contenant le code binaire du processus. |
| 133 | Le cluster de mapping est toujours le cluster local pour un vseg private. |
| 134 | Ce type de vseg n’est détruit que lors de la destruction du processus. |
| 135 | |
| 136 | 3.3) STACK |
| 137 | Un vseg de type STACK est enregistré dans la VSL(P,X) du cluster X chaque fois qu’un thread est crée dans le cluster X |
| 138 | par le processus P. Les VSL(P,Y) des autres clusters Y n’ont pas besoin d’être mises a jour car un vseg STACK |
| 139 | dans un cluster X n’est ni connu ni accédé depuis un autre cluster Y. |
| 140 | La longueur est définie par un paramètre global de l’OS : MIN_STACK_SIZE. |
| 141 | Le cluster de mapping est toujours le cluster local pour un vseg private. |
| 142 | Ce type de vseg est éliminé de la VSL(P,X) lors de la destruction du thread. |
| 143 | |
| 144 | 3.4) HEAP |
| 145 | Ce type de vseg est enregistré dans la VSL(P,Z) du cluster Z propriétaire du processus P au moment de la création de P. |
| 146 | Il est enregistré dans la VSL(P,A) d’un autre cluster A chaque fois qu’un thread de P est créé dans le cluster A, |
| 147 | si celui-ci ne contenait pas encore de thread du processus P. |
| 148 | La longueur est un paramètre global de l’OS : STANDARD_MALLOC_HEAP_SIZE. |
| 149 | Il n’y a pas de cluster de mapping pour un vseg distributed. |
| 150 | Ce type de vseg n’est détruit que lors de la destruction du processus. |
| 151 | |
| 152 | 3.5) REMOTE |
| 153 | Ce type de vseg est enregistré dans la VSL(P,A) de tous les clusters A qui contiennent au moins un thread de P, |
| 154 | au moment où un thread quelconque de P exécute un remote_malloc(x,y) dans un cluster K. |
| 155 | Le noyau du cluster K envoie une VSEG_REQUEST_RPC vers le cluster Z propriétaire de P, si un vseg de type REMOTE |
| 156 | n’existe pas déjà dans la VSL(P,K). Les arguments sont le PID, le type du vseg, les coordonnées (x,y), … To Be Completed … |
| 157 | Si ce type de vseg n’existe pas déjà dans la VSL(P,Z), le noyau de Z broadcaste une VSEG_REGISTER_BCRPC vers tous les |
| 158 | clusters actifs de P. |
| 159 | La longueur est un paramètre global de l’OS : REMOTE_MALLOC_HEAP_SIZE. |
| 160 | Le cluster de mapping est défini par les arguments (x,y) du remote_malloc(). |
| 161 | Ce type de vseg n’est détruit que lors de la destruction du processus. |
| 162 | |
| 163 | 3.6) FILE |
| 164 | Ce type de vseg est enregistré dans la VSL(P,A) de tous les cluster A qui contiennent au moins un thread de P, |
| 165 | au moment où un thread quelconque de P exécute un mmap(file , size) dans un cluster K. |
| 166 | Le noyau du cluster K envoie une VSEG_REQUEST_RPC vers le cluster Z propriétaire de P. Les arguments sont le PID, |
| 167 | le type de vseg, le descripteur de fichier, la taille … To be completed … |
| 168 | Le noyau du cluster Z broadcaste une VSEG_REGISTER_BCRPC vers tous les autres clusters actifs de P. |
| 169 | La longueur du vseg est définie par l’argument size du mmap(). |
| 170 | Le cluster de mapping est défini par l’argument file, et il est quelconque puisque le cache d’un fichier peut être placé |
| 171 | sur n’importe quel cluster (répartition uniforme). |
| 172 | Ce type de vseg est détruit lors de l’exécution du munmap(), en utilisant un mécanisme en deux RPC comme pour la création. |
| 173 | |
| 174 | 3.7) ANON |
| 175 | Ce type de vseg est enregistré dans la VSL(P,A) de tous les cluster A qui contiennent au moins un thread de P, |
| 176 | au moment où un thread quelconque de P exécute un mmap(anonyme , size) dans un cluster K. |
| 177 | Le noyau du cluster K envoie une VSEG_REQUEST_RPC vers le cluster Z propriétaire de P. Les arguments sont le PID, |
| 178 | le type de vseg, le descripteur de fichier, la taille … To be completed … |
| 179 | Le noyau du cluster Z broadcaste une VSEG_REGISTER_BCRPC vers tous les autres clusters actifs de P. |
| 180 | La longueur du vseg est définie par l’argument size du mmap(). |
| 181 | Il n’y a pas de cluster de mapping pour un vseg distributed. |
| 182 | Ce type de vseg est détruit lors de l’exécution du munmap(), en utilisant un mécanisme en deux RPC comme pour la création. |
| 183 | |
| 184 | 4) Introduction d’une nouvelle entrée dans une Table de Pages PT(P,K) |
| 185 | |
| 186 | L’ajout d’une entrée dans une PT(P,K), pour un processus P dans un cluster K est la conséquence d’un défaut de page |
| 187 | causé par n’importe quel thread du processus P s’exécutant dans le cluster K, sur le principe du “on-demand paging”. |
| 188 | Tous les threads d’un processus P placés dans un cluster K utilisent exclusivement la PT(P,K) locale, et reportent |
| 189 | le défaut de page à l’instance locale du noyau. Le traitement du défaut de page dépend du type du segment : |
| 190 | |
| 191 | 4.1) CODE |
| 192 | Il existe un vseg de ce type dans la VSL de tous les clusters contenant au moins un thread du processus P. |
| 193 | Si le cluster K qui détecte le défaut de page est différent du cluster propriétaire du processus Z, le noyau du cluster K doit allouer |
| 194 | une page physique dans le cluster K. Pour initialiser cette page, il envoie une PT_MISS_RPC au cluster Z propriétaire du processus. |
| 195 | Quand il obtient le PTE stocké dans la PT(P,Z), il effectue un remote_memcpy() pour copier le contenu de la page physique |
| 196 | du cluster Z vers la page physique du cluster K. Il termine en introduisant le PTE manquant dans la PT(P,K). |
| 197 | Si le cluster K est le cluster propriétaire de Z, il alloue une page physique, initialise cette page en s’adressant au système de fichier, |
| 198 | pour récupérer le contenu de la page manquante dans le cache du fichier .elf, et met à jour la PT(P,Z). |
| 199 | |
| 200 | QUESTION : dans le cluster propriétaire Z, faut-il faire une copie de la page du cache de fichier vers une autre page physique ? [AG] |
| 201 | |
| 202 | 4.2) STACK |
| 203 | Les vsegs STACK associées aux thread placées dans un cluster X sont mappées dans le cluster X, |
| 204 | et sont gérés indépendamment les uns des autres dans les différents clusters. |
| 205 | Le noyau du cluster X doit allouer une page physique, et l’enregistrer dans la PT (P,X) locale sans l’initialiser. |
| 206 | Si l’adresse demandée tombe dans la dernière page disponible pour le vseg, la longueur du vseg STACK peut être dynamiquement |
| 207 | localement augmentée dans la VSL(P,X) locale, si il y a de la place dans dans la zone de l’espace virtuel utilisée pour les piles. |
| 208 | Comme suggéré par Franck, on peut imaginer une politique d’allocation par dichotomie utilisant deux arguments : MAX_STACK_SIZE |
| 209 | définissant la longueur totale de la zone réservée aux piles, et MIN_STACK_SIZE définissant la longueur minimale d’une pile particulière. |
| 210 | |
| 211 | 4.3) DATA |
| 212 | Ce vseg étant distributed, les pages physiques sont distribuées sur tous les clusters suivant les bits de poids faible du VPN. |
| 213 | Si le cluster K qui détecte le défaut de page est différent du cluster propriétaire Z, le noyau du cluster K envoie une PT_MISS_RPC |
| 214 | au cluster Z, pour obtenir le PTE stocké dans la PT(P,Z). Les arguments sont le PID et le VPN de la page manquante. |
| 215 | Quand il reçoit la réponse, il met à jour la PT(P,K). |
| 216 | Si le cluster qui détecte le défaut de page est le cluster propriétaire Z, il sélectionne un cluster cible M à partir des bits |
| 217 | de poids faible du VPN, et envoie au cluster M une RPC_PMEM_GET_SPP pour obtenir le PPN d’une page physique du cluster M. |
| 218 | En réponse à cette RPC, le noyau du cluster M alloue une page physique et renvoie le PPN de celle-ci. |
| 219 | Le noyau du cluster Z s’adresse au système de fichier, pour récupérer le contenu de la page manquante dans le cache du fichier .elf, |
| 220 | et initialise la page physique dans M au moyen d’un remote_memcpy(). Finalement, il met à jour la PT (P,Z). |
| 221 | |
| 222 | 4.4) HEAP |
| 223 | Ce vseg étant distributed, les pages physiques sont distribuées sur tous les clusters suivant les bits de poids faible du VPN. |
| 224 | Si le cluster K qui détecte le défaut de page est différent du cluster propriétaire Z, le noyau du cluster K envoie une PT_MISS_RPC |
| 225 | au cluster Z, pour obtenir le PTE stocké dans la PT(P,Z). Les arguments sont le PID et le VPN de la page manquante. |
| 226 | Quand il reçoit la réponse, il met à jour la PT(P,K). |
| 227 | Si le cluster qui détecte le défaut de page est le cluster propriétaire Z, il sélectionne un cluster cible M à partir des bits |
| 228 | de poids faible du VPN, et envoie au cluster M RPC_PMEM_GET_SPP pour obtenir le PPN d’une page physique du cluster M. |
| 229 | En réponse à cette RPC, le noyau du cluster M alloue une page physique et renvoie le PPN de celle-ci. |
| 230 | Quand le noyau du cluster Z obtient le PPN, il met à jour la PT (P,Z). |
| 231 | |
| 232 | 4.5) REMOTE |
| 233 | Ce vseg étant localised, les coordonnées du cluster de mapping M sont enregistrées dans le descripteur de vseg. |
| 234 | Si le cluster K qui détecte le défaut de page est différent du cluster propriétaire Z, le noyau du cluster K envoie une PT_MISS_RPC |
| 235 | au cluster Z, pour obtenir le PTE stocké dans la PT(P,Z). Les arguments sont le PID et le VPN de la page manquante. |
| 236 | Quand il reçoit la réponse, il met à jour la PT(P,X). |
| 237 | Si le cluster qui détecte le défaut de page est le cluster propriétaire Z, il envoie au cluster M une RPC_PMEM_GET_SPP pour obtenir |
| 238 | le PPN d’une page physique du cluster M. |
| 239 | En réponse à cette RPC, le noyau du cluster M alloue une page physique, et renvoie le PPN de celle-ci. |
| 240 | Quand le noyau du cluster Z obtient le PPN, il met à jour la PT (P,Z). |
| 241 | |
| 242 | 4.6) FILE |
| 243 | Ce vseg étant localised, les coordonnées du cluster de mapping M sont enregistrées dans le descripteur de vseg. |
| 244 | Si le cluster qui détecte le défaut de page K est différent du cluster propriétaire Z, le noyau du cluster K envoie une PT_MISS_RPC |
| 245 | au cluster Z, pour obtenir le PTE stocké dans la PT(P,Z). Les arguments sont le PID et le VPN de la page manquante. |
| 246 | Quand il reçoit la réponse, il met à jour la PT(P,K). |
| 247 | Si le cluster qui détecte le défaut de page est le cluster propriétaire Z, il envoie au cluster M qui contient le cache du fichier |
| 248 | une GET_FILE_CACHE_RPC pour obtenir le PPN. Les arguments sont le PID, le descripteur du fichier, et l’index de la page dans le mapper. |
| 249 | En réponse à cette RPC, le noyau du cluster M accède au mapper du vseg et retourne le PPN correspondant. |
| 250 | Quand le noyau du cluster Z obtient le PPN, il met à jour la PT (P,Z). |
| 251 | |
| 252 | 4.7) ANON |
| 253 | Ce vseg étant distributed, les pages physiques sont distribuées sur tous les clusters suivant les bits de poids faible du VPN. |
| 254 | Le traitement d’un défaut de page est le même que pour un vseg HEAP. |
| 255 | |
| 256 | QUESTION : Les mécanismes décrits ci-dessus pour les types DATA, HEAP, REMOTE et ANON utilisent une RPC_PMEM_GET_SPP, |
| 257 | qui suppose que le noyau d’un cluster (M) peut “transmettre la propriété” d’une ou plusieurs pages physiques |
| 258 | à un autre cluster (Z) pour la durée de vie d’un processus. Il faut définir une politique d’allocation/libération de pages de |
| 259 | mémoire physique entre clusters… [AG] |
| 260 | |
| 261 | |
| 262 | 5) Invalidation d’une entrée dans une Table de Pages |
| 263 | |
| 264 | Dans un cluster Z, propriétaire d’un processus P, le noyau peut décider d’invalider une entrée d’une PT(P,Z). |
| 265 | Cela peut se produire par exemple en cas de pénurie de mémoire dans le cluster Z, ou simplement en cas de munmap(). |
| 266 | Sauf si le vseg concerné est de type STACK, l’entrée invalidée dans la PT(P,Z) doit aussi être invalidée |
| 267 | dans les PT(P,K) des autre clusters. |
| 268 | Pour ce faire, le noyau du cluster Z doit broadcaster une PT_INVAL_BCRPC vers tous les autres clusters actifs de P. |
| 269 | |
| 270 | 6) Optimisation des RPC broadcast |
| 271 | |
| 272 | Dans une RPC broadcast, tous les clusters destinataires (même ceux qui ne sont pas concernés) |
| 273 | signalent la terminaison en incrémentant de façon atomique un compteur de réponses, qui est scruté par le cluster initiateur. |
| 274 | |
| 275 | Pour réduire le nombre de destinatiares, le descripteur du processus P du cluster propriétaire Z peut maintenir quatre variables |
| 276 | XMIN, XMAX, YMIN, YMAX définissant le rectangle minimal recouvrant tous les clusters actifs de P à tout instant. |
| 277 | Dans ce cas une RPC broadcast ne doit être envoyée qu’a (XMAX - XMIN + 1) * (YMAX - YMIN +1) destinataires. |
| 278 | Ces variables sont mises à jour à chaque création de thread. |
| 279 | |
| 280 | 7 ) Optimisation du traitement des PT_MISS |
| 281 | |
| 282 | Pour réduire le nombre de RPC causés par les défauts de page, le noyau d’un cluster X qui détecte un défaut de page peut |
| 283 | utiliser un remote_read() dans la table PT(P,Z) du cluster de référence au lieu d’une PT_MISS_RPC. Ceci impose cependant d’utiliser un lock multi-lecteurs pour éviter un état incohérent dans le cas d’une transaction PT_INVAL_BC_RPC simultanée |
| 284 | initiée par le cluster Z : Ce lock doit être pris systématiquement par le cluster propriétaire avant un PT_INVAL_BC_RPC, et par les autres clusters avant un remore_read(). Il garantit que le PT_INVAL_BC_RPC ne sera lancé qu’après la fin de tous les remote_read() en cours. Il garantit qu’aucun nouveau remote_read() ne sera plus accepté avant la completion du PT_INVAL_BC_RPC. |
| 285 | |
| 286 | == C) Création dynamique des processus et des thread == |