|  | 1 | = Construction dynamique des tables de pages = | 
                          |  | 2 |  | 
                          |  | 3 | 1) Descripteur de vseg | 
                          |  | 4 |  | 
                          |  | 5 | Un descripteur de vseg contient les informations suivantes : | 
                          |  | 6 | - TYPE : définit la politique de réplication/distribution (CODE / STACK / DATA / HEAP / HEAPXY / FILE / ANON) | 
                          |  | 7 | - FLAGS : définit les droits d’accès | 
                          |  | 8 | - VBASE : adresse virtuelle  de base | 
                          |  | 9 | - LENGTH : longueur du segment | 
                          |  | 10 | - BIN : pathname to the .elf file. (seulement pour les types DATA et CODE) | 
                          |  | 11 | - X,Y : coordonnées du cluster où est mappé le vseg (seulement pour un vseg localised) | 
                          |  | 12 | - MAPPER : radix-tree contenant les pages physiques allouées à ce vseg (seulement pour les types CODE, DATA, FILE). | 
                          |  | 13 |  | 
                          |  | 14 | 2) Descripteur de processus | 
                          |  | 15 |  | 
                          |  | 16 | Dans chaque cluster, les différentes informations associées à un processus P sont regroupées dans le descripteur de processus. | 
                          |  | 17 | Le PID (Process Identifier) est codé sur 32 bits, et il est unique dans le système : les 8 bits de poids fort contiennent | 
                          |  | 18 | 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. | 
                          |  | 19 | 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 | 
                          |  | 20 | au moins un thread de P (appelés clusters actifs de P). | 
                          |  | 21 |  | 
                          |  | 22 | Les principale informations stockées dans le descripteur processus sont les suivantes: | 
                          |  | 23 | - PID :  processus identifier (contient les coordonnées du cluster propriétaire) | 
                          |  | 24 | - PPID : parent processus identifier, | 
                          |  | 25 | - XMIN, XMAX, YMIN, YMAX : recrangle recouvrant tous les clusters actifs | 
                          |  | 26 | - PT : table des pages du processus, | 
                          |  | 27 | - VSL : liste des vsegs du processus, | 
                          |  | 28 | - FDT : table des fichiers ouverts du processus, | 
                          |  | 29 | - TRDL : liste des threads du processus, | 
                          |  | 30 | - ENV : variables d’environnement du processus, | 
                          |  | 31 |  | 
                          |  | 32 | Le contenu des tables de pages évolue au cours du temps, et  n’est pas identique dans tous les clusters. | 
                          |  | 33 | En effet le contenu des tables P évolue différemment dans les clusters en fonction des | 
                          |  | 34 | défauts de pages causés par les threads de P s’exécutant dans les différents clusters. | 
                          |  | 35 | De plus  le mapping des segments private (CODE et STACKS) varie d’un cluster à un autre. | 
                          |  | 36 | Pour ce qui concerne les vsegs public, seul le cluster de référence contient l’état complet du mapping. | 
                          |  | 37 |  | 
                          |  | 38 | De même, le contenu des listes de vsegs évolue au cours du temps, et n’est pas identique dans tous les clusters. | 
                          |  | 39 | En effet chaque vseg private n’est enregistré que dans un seul cluster. | 
                          |  | 40 | En revanche toutes les listes de vsegs doivent être identiques pour ce qui concerne les vsegs public. | 
                          |  | 41 | Pour ce qui concerne les vsegs public, tout ajout dynamique d’un nouveau vseg public ou toute extension | 
                          |  | 42 | doit être répercuté dans tous les clusters actifs. | 
                          |  | 43 |  | 
                          |  | 44 | 3) Enregistrement et destruction des vsegs | 
                          |  | 45 |  | 
                          |  | 46 | La politique d’enregistrement et de destruction des vsegs dans les VSL(P,X) dépend du type de vseg: | 
                          |  | 47 |  | 
                          |  | 48 | 3.1) DATA | 
                          |  | 49 | 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. | 
                          |  | 50 | 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, | 
                          |  | 51 | si ce cluster ne contenait pas encore de thread du processus P. | 
                          |  | 52 | La longueur est définie par le fichier .elf contenant le code binaire du processus. | 
                          |  | 53 | Il n’y a pas de cluster de mapping pour un vseg distributed. | 
                          |  | 54 | Ce type de vseg n’est détruit que lors de la destruction du processus. | 
                          |  | 55 |  | 
                          |  | 56 | 3.2) CODE | 
                          |  | 57 | 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. | 
                          |  | 58 | 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, | 
                          |  | 59 | si ce cluster ne contenait pas encore de thread du processus P. | 
                          |  | 60 | La longueur est définie par le fichier .elf contenant le code binaire du processus. | 
                          |  | 61 | Le cluster de mapping est toujours le cluster local pour un vseg private. | 
                          |  | 62 | Ce type de vseg n’est détruit que lors de la destruction du processus. | 
                          |  | 63 |  | 
                          |  | 64 | 3.3) STACK | 
                          |  | 65 | 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 | 
                          |  | 66 | 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 | 
                          |  | 67 | dans un cluster X n’est ni connu ni accédé depuis un autre cluster Y. | 
                          |  | 68 | La longueur est définie par un paramètre global de l’OS : MIN_STACK_SIZE. | 
                          |  | 69 | Le cluster de mapping est toujours le cluster local pour un vseg private. | 
                          |  | 70 | Ce type de vseg est éliminé de la VSL(P,X) lors de la destruction du thread. | 
                          |  | 71 |  | 
                          |  | 72 | 3.4) HEAP | 
                          |  | 73 | 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. | 
                          |  | 74 | 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, | 
                          |  | 75 | si celui-ci ne contenait pas encore de thread du processus P. | 
                          |  | 76 | La longueur est un paramètre global de l’OS : STANDARD_MALLOC_HEAP_SIZE. | 
                          |  | 77 | Il n’y a pas de cluster de mapping pour un vseg distributed. | 
                          |  | 78 | Ce type de vseg n’est détruit que lors de la destruction du processus. | 
                          |  | 79 |  | 
                          |  | 80 | 3.5) REMOTE | 
                          |  | 81 | Ce type de vseg est enregistré dans la VSL(P,A) de tous les clusters A qui contiennent au moins un thread de P, | 
                          |  | 82 | au moment où un thread quelconque de P exécute un remote_malloc(x,y) dans un cluster K. | 
                          |  | 83 | Le noyau du cluster K envoie une VSEG_REQUEST_RPC vers le cluster Z propriétaire de P, si un vseg de type REMOTE | 
                          |  | 84 | 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 … | 
                          |  | 85 | 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 | 
                          |  | 86 | clusters actifs de P. | 
                          |  | 87 | La longueur est un paramètre global de l’OS : REMOTE_MALLOC_HEAP_SIZE. | 
                          |  | 88 | Le cluster de mapping est défini par les arguments (x,y) du remote_malloc(). | 
                          |  | 89 | Ce type de vseg n’est détruit que lors de la destruction du processus. | 
                          |  | 90 |  | 
                          |  | 91 | 3.6) FILE | 
                          |  | 92 | Ce type de vseg est enregistré dans la VSL(P,A) de tous les cluster A qui contiennent au moins un thread de P, | 
                          |  | 93 | au moment où un thread quelconque de P exécute un mmap(file , size) dans un cluster K. | 
                          |  | 94 | Le noyau du cluster K envoie une VSEG_REQUEST_RPC vers le cluster Z propriétaire de P. Les arguments sont le PID, | 
                          |  | 95 | le type de vseg, le descripteur de fichier, la taille … To be completed … | 
                          |  | 96 | Le noyau du cluster Z broadcaste une VSEG_REGISTER_BCRPC vers tous les autres clusters actifs de P. | 
                          |  | 97 | La longueur du vseg est définie par l’argument size du mmap(). | 
                          |  | 98 | Le cluster de mapping est défini par l’argument file, et il est quelconque puisque le cache d’un fichier peut être placé | 
                          |  | 99 | sur n’importe quel cluster (répartition uniforme). | 
                          |  | 100 | 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. | 
                          |  | 101 |  | 
                          |  | 102 | 3.7) ANON | 
                          |  | 103 | Ce type de vseg est enregistré dans la VSL(P,A) de tous les cluster A qui contiennent au moins un thread de P, | 
                          |  | 104 | au moment où un thread quelconque de P exécute un mmap(anonyme , size) dans un cluster K. | 
                          |  | 105 | Le noyau du cluster K envoie une VSEG_REQUEST_RPC vers le cluster Z propriétaire de P. Les arguments sont le PID, | 
                          |  | 106 | le type de vseg, le descripteur de fichier, la taille … To be completed … | 
                          |  | 107 | Le noyau du cluster Z broadcaste une VSEG_REGISTER_BCRPC vers tous les autres clusters actifs de P. | 
                          |  | 108 | La longueur du vseg est définie par l’argument size du mmap(). | 
                          |  | 109 | Il n’y a pas de cluster de mapping pour un vseg distributed. | 
                          |  | 110 | 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. | 
                          |  | 111 |  | 
                          |  | 112 | 4) Introduction d’une nouvelle entrée dans une Table de Pages PT(P,K) | 
                          |  | 113 |  | 
                          |  | 114 | 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 | 
                          |  | 115 | causé par n’importe quel thread du processus P s’exécutant dans le cluster K, sur le principe du “on-demand paging”. | 
                          |  | 116 | Tous les threads d’un processus P placés dans un cluster K utilisent exclusivement la PT(P,K) locale, et reportent | 
                          |  | 117 | le défaut de page  à l’instance locale du noyau. Le traitement du défaut de page dépend du type du segment : | 
                          |  | 118 |  | 
                          |  | 119 | 4.1) CODE | 
                          |  | 120 | Il existe un vseg de ce type dans la VSL de tous les clusters contenant au moins un thread du processus P. | 
                          |  | 121 | 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 | 
                          |  | 122 | une page physique dans le cluster K. Pour initialiser cette page, il envoie une PT_MISS_RPC au cluster Z propriétaire du processus. | 
                          |  | 123 | Quand il obtient  le PTE stocké dans la PT(P,Z), il effectue un remote_memcpy() pour copier le contenu de la page physique | 
                          |  | 124 | du cluster Z vers la page physique du cluster K. Il termine en introduisant le PTE manquant dans la PT(P,K). | 
                          |  | 125 | 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, | 
                          |  | 126 | pour récupérer le contenu de la page manquante dans le cache du fichier .elf, et met à jour la PT(P,Z). | 
                          |  | 127 |  | 
                          |  | 128 | 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] | 
                          |  | 129 |  | 
                          |  | 130 | 4.2) STACK | 
                          |  | 131 | Les vsegs STACK associées aux thread placées dans un cluster X sont mappées dans le cluster X, | 
                          |  | 132 | et sont gérés indépendamment les uns des autres dans les différents clusters. | 
                          |  | 133 | Le noyau du cluster X doit allouer une page physique, et l’enregistrer dans la PT (P,X) locale sans l’initialiser. | 
                          |  | 134 | Si l’adresse demandée tombe dans la dernière page disponible pour le vseg, la longueur du vseg STACK peut être dynamiquement | 
                          |  | 135 | 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. | 
                          |  | 136 | Comme suggéré par Franck, on peut imaginer une politique d’allocation par dichotomie utilisant deux arguments : MAX_STACK_SIZE | 
                          |  | 137 | 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. | 
                          |  | 138 |  | 
                          |  | 139 | 4.3) DATA | 
                          |  | 140 | Ce vseg étant distributed, les pages physiques sont distribuées sur tous les clusters suivant les bits de poids faible du VPN. | 
                          |  | 141 | 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 | 
                          |  | 142 | 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. | 
                          |  | 143 | Quand il reçoit la réponse, il met à jour la PT(P,K). | 
                          |  | 144 | 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 | 
                          |  | 145 | 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. | 
                          |  | 146 | En réponse à cette RPC, le noyau du cluster M alloue une page physique et renvoie le PPN de celle-ci. | 
                          |  | 147 | 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, | 
                          |  | 148 | et initialise la page physique dans M au moyen d’un remote_memcpy(). Finalement, il met à jour la PT (P,Z). | 
                          |  | 149 |  | 
                          |  | 150 | 4.4) HEAP | 
                          |  | 151 | Ce vseg étant distributed, les pages physiques sont distribuées sur tous les clusters suivant les bits de poids faible du VPN. | 
                          |  | 152 | 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 | 
                          |  | 153 | 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. | 
                          |  | 154 | Quand il reçoit la réponse, il met à jour la PT(P,K). | 
                          |  | 155 | 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 | 
                          |  | 156 | 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. | 
                          |  | 157 | En réponse à cette RPC, le noyau du cluster M alloue une page physique et renvoie le PPN de celle-ci. | 
                          |  | 158 | Quand le noyau du cluster Z obtient le PPN, il met à jour la PT (P,Z). | 
                          |  | 159 |  | 
                          |  | 160 | 4.5) REMOTE | 
                          |  | 161 | Ce vseg étant localised, les coordonnées du cluster de mapping M sont enregistrées dans le descripteur de vseg. | 
                          |  | 162 | 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 | 
                          |  | 163 | 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. | 
                          |  | 164 | Quand il reçoit la réponse, il met à jour la PT(P,X). | 
                          |  | 165 | 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 | 
                          |  | 166 | le PPN d’une page physique du cluster M. | 
                          |  | 167 | En réponse à cette RPC, le noyau du cluster M alloue une page physique, et renvoie le PPN de celle-ci. | 
                          |  | 168 | Quand le noyau du cluster Z obtient le PPN, il met à jour la PT (P,Z). | 
                          |  | 169 |  | 
                          |  | 170 | 4.6) FILE | 
                          |  | 171 | Ce vseg étant localised, les coordonnées du cluster de mapping M sont enregistrées dans le descripteur de vseg. | 
                          |  | 172 | 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 | 
                          |  | 173 | 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. | 
                          |  | 174 | Quand il reçoit la réponse, il met à jour la PT(P,K). | 
                          |  | 175 | 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 | 
                          |  | 176 | 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. | 
                          |  | 177 | En réponse à cette RPC, le noyau du cluster M accède au mapper du vseg et retourne le PPN correspondant. | 
                          |  | 178 | Quand le noyau du cluster Z obtient le PPN, il met à jour la PT (P,Z). | 
                          |  | 179 |  | 
                          |  | 180 | 4.7) ANON | 
                          |  | 181 | Ce vseg étant distributed, les pages physiques sont distribuées sur tous les clusters suivant les bits de poids faible du VPN. | 
                          |  | 182 | Le traitement d’un défaut de page est le même que pour un vseg HEAP. | 
                          |  | 183 |  | 
                          |  | 184 | QUESTION : Les mécanismes décrits ci-dessus pour  les types DATA, HEAP, REMOTE et ANON utilisent une RPC_PMEM_GET_SPP, | 
                          |  | 185 | qui suppose que le noyau d’un cluster (M) peut “transmettre la propriété” d’une ou plusieurs pages physiques | 
                          |  | 186 | à 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 | 
                          |  | 187 | mémoire physique entre clusters… [AG] | 
                          |  | 188 |  | 
                          |  | 189 |  | 
                          |  | 190 | 5) Invalidation d’une entrée dans une Table de Pages | 
                          |  | 191 |  | 
                          |  | 192 | 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). | 
                          |  | 193 | Cela peut se produire par exemple en cas de pénurie de mémoire dans le cluster Z, ou simplement en cas de munmap(). | 
                          |  | 194 | Sauf si le vseg concerné est de type STACK, l’entrée invalidée dans la PT(P,Z) doit aussi être invalidée | 
                          |  | 195 | dans les PT(P,K) des autre clusters. | 
                          |  | 196 | Pour ce faire, le noyau du cluster Z doit broadcaster une PT_INVAL_BCRPC vers tous les autres clusters actifs de P. | 
                          |  | 197 |  | 
                          |  | 198 | 6) Optimisation des RPC broadcast | 
                          |  | 199 |  | 
                          |  | 200 | Dans une RPC broadcast, tous les clusters destinataires (même ceux qui ne sont pas concernés) | 
                          |  | 201 | signalent la terminaison en incrémentant de façon atomique un compteur de réponses,  qui est scruté par le cluster initiateur. | 
                          |  | 202 |  | 
                          |  | 203 | Pour réduire le nombre de destinatiares, le descripteur du processus P du cluster propriétaire Z peut maintenir quatre variables | 
                          |  | 204 | XMIN, XMAX, YMIN, YMAX définissant le rectangle minimal recouvrant tous les clusters actifs de P à tout instant. | 
                          |  | 205 | Dans ce cas une RPC broadcast ne doit être envoyée qu’a (XMAX - XMIN + 1) * (YMAX - YMIN +1) destinataires. | 
                          |  | 206 | Ces variables sont mises à jour à chaque création de thread. | 
                          |  | 207 |  | 
                          |  | 208 | 7 ) Optimisation du traitement des PT_MISS | 
                          |  | 209 |  | 
                          |  | 210 | 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 | 
                          |  | 211 | 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 | 
                          |  | 212 | 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. |