= Politique de réplication / distribution = [[PageOutline]] La politique de réplication / distribution vise deux objectifs: renforcer la localité, et SURTOUT minimiser la contention. * Pour les informations read-only (segments de type CODE), on les réplique dans tous les clusters où elles sont utilisées. * Pour les données non partagées (segments de type STACK) on les place dans le même cluster que le thread utilisateur. * Pour les données partagées (segments de type DATA, HEAP, MMAP), on cherche à les distribuer le plus uniformément possible dans tous les clusters pour éviter la contention. La technique générale permettant à l'OS de contrôler le placement et la réplication des informations sur les bancs mémoire physiques est la mémoire virtuelle paginée. == 1) segments pour un processus utilisateur == Un '''vseg''' désigne une zone mémoire contigüe dans l’espace virtuel d’un processus, auxquels sont attachés certains attributs (droit d’accès, politique de réplication/distribution dans les différents clusters, cachabilité, etc.). Pour chaque processus P, le descripteur du processus, et certaines structures qu’il contient telles que la table des pages (PT) et la liste des vsegs (VSL) sont répliquées dans tous les cluster qui contiennent au moins un thread de P. * Un vseg est ''public'' quand il peut être accédé par n’importe quel thread du processus, 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 exécutant dans le même cluster que le cluster ou est mappé le vseg. * Un vseg ''private'' est entièrement mappé dans la mémoire physique du cluster K dans lequel il est accessible. Il est enregistré dans liste des segments et dans la table des pages du cluster K, mais pas dans les autres clusters. * Un vseg ''public'' est enregistré dans la liste des segments et dans la table des pages de tous les clusters actifs (i.e. tous les clusters qui contiennent un thread de P). 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 propriétaire du processus (i.e. le cluster Z où a été créé le processus). Les réplicas du descripteurs de processus (et les tables associées) autres que celui contenu dans le cluster de référence peuvent être considérées comme des caches read-only. * Un vseg peut être ''localised'' (toutes les pages du vseg sont mappées dans le même cluster), ou ''distributed'' (différentes pages du même vseg sont mappées dans différents clusters en utilisant par exemple les bits de poids faibles comme clé de distribution). Un vseg ''private'' est toujours ''localised''. Il existe sept types de vsegs, correspondant à des politiques de réplication/distribution différentes : || type || || || nombre || commentaire || || CODE || private || localised || un par cluster actif || mêmes adresses virtuelles, même contenu || || STACK || private || localised || un par thread || dans le cluster hébergeant le thread || || DATA || public || distributed || un par processus || données globales partagées || || HEAP || public || distributed || un par processus || utilisé pour le malloc() standard || || REMOTE || public || localised || un par cluster actif || utilisé par le remote_malloc(x,y) || || FILE || public || localised || un par MMAP(file) || dans le cluster contenant le fichier file || || ANON || public || distributed || un par MMAP(anon) || équivalent au type HEAP || == 2) segments utilisés par le noyau == Les différentes instances du noyau ne travaillant qu’en adressage physique, les segments kernel sont définis dans l’espace d’adressage physique. Puisqu'il existe une instance du noyau par coeur, les différents segments du noyau - y compris les données globales - sont répliqués dans chaque cluster. Un segment kernel est ''private'' quand il ne peut être accédé que par l’instance locale du noyau. Il est ''public'' quand il peut être accédé par n’importe quel instance du noyau. On identifie (pour l’instant) les segments suivants - KDATA : private - KCODE : private - KSTACK : private - KHEAP : private - SHARED : public