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 | | ——————————————————————————————— |
| 13 | 2) [wiki:page_tables Construction dynamique des tables de pages] |