Présentation de l'espace adresse du programme
Le système d'exploitation de base fournit un certain nombre de services pour la programmation de l'utilisation de la mémoire du programme d'application.
Des outils sont disponibles pour vous aider à allouer de la mémoire, à mapper de la mémoire et des fichiers et à profiler l'utilisation de la mémoire de l'application. En arrière-plan, cette section décrit l'architecture de gestion de la mémoire et la règle de gestion de la mémoire du système.
Introduction à l'architecture de la mémoire système
Le système utilise un schéma de gestion de la mémoire qui utilise des logiciels pour étendre les capacités du matériel physique. Du fait que l'espace d'adressage ne correspond pas un à un à la mémoire réelle, l'espace d'adressage (et la façon dont le système le fait correspondre à la mémoire réelle) est appelé mémoire virtuelle.
Les sous-systèmes du noyau et le matériel qui coopèrent pour convertir l'adresse virtuelle en adresses physiques constituent le sous-système de gestion de la mémoire. Les actions que le noyau effectue pour s'assurer que les processus partagent équitablement la mémoire principale comprennent la règle de gestion de la mémoire. Les sections suivantes décrivent plus en détail les caractéristiques du sous-système de gestion de la mémoire.
Espace adresse physique des systèmes 64 bits
Le matériel fournit une plage continue d'adresses de mémoire virtuelle, à partir de0x00000000000000000000à0xFFFFFFFFFFFFFFFFFFFF, pour accéder aux données. L'espace adressable total est supérieur à 1000000000000 téraoctets. Les instructions d'accès à la mémoire génèrent une adresse de 64 bits: 36 bits pour sélectionner un registre de segment et 28 bits pour donner un décalage au sein du segment. Ce schéma d'adressage permet d'accéder à plus de 64 millions de segments d'une taille maximale de 256M octets chacun. Chaque registre de segment contient un segment ID de 52 bits qui devient un préfixe du décalage de 28 bits, qui forment ensemble l'adresse de la mémoire virtuelle. L'adresse virtuelle 80 bits résultante fait référence à un espace mémoire virtuel unique, de grande taille, à l'échelle du système.
L'espace de processus est un espace adresse 64 bits, c'est-à-dire que les programmes utilisent des pointeurs 64 bits. Cependant, chaque gestionnaire de processus ou d'interruption ne peut adresser que l'espace mémoire virtuel (segment) à l'échelle du système dont les ID de segment figurent dans le registre de segment.
Adressage des registres de segments
Le noyau système charge certains registres de segment de manière conventionnelle pour tous les processus, fournissant implicitement l'adressabilité de la mémoire nécessaire à la plupart des processus. Ces registres comprennent deux segments de noyau, un segment de bibliothèque partagée et un segment d'unité d'E-S, qui sont partagés par tous les processus et dont le contenu est en lecture seule pour les programmes non-noyau. Il existe également un segment pour l'appel système exec d'un processus, qui est partagé en lecture seule avec d'autres processus exécutant le même programme, un segment de données de bibliothèque partagée privée qui contient des données de bibliothèque en lecture-écriture et un segment en lecture-écriture qui est privé au processus. Les registres de segments restants peuvent être chargés à l'aide de techniques de mappage de mémoire pour fournir plus de mémoire, ou à travers un accès mémoire à des fichiers en fonction des autorisations d'accès imposées par le noyau.
L'adressage 32 bits du système et l'accès fourni par les capacités d'adressage indirect donnent à chaque processus une interface qui ne dépend pas de la taille réelle de l'espace mémoire virtuel à l'échelle du système. Certains registres de segment sont partagés par tous les processus, d'autres par un sous-ensemble de processus et d'autres sont accessibles à un seul processus. Le partage est réalisé en permettant à deux processus ou plus de charger le même ID de segment.
Espace de pagination
Pour prendre en charge l'espace de mémoire virtuelle volumineux avec un espace de mémoire réelle limité, le système utilise la mémoire réelle comme espace de travail et conserve les données et les programmes inactifs qui ne sont pas mappés sur le disque. La zone du disque qui contient ces données est appelée espace de pagination. Une page est une unité de mémoire virtuelle qui contient 4K octets de données et qui peut être transférée entre la mémoire réelle et la mémoire auxiliaire. Lorsque le système a besoin de données ou d'un programme dans l'espace de page, il:
- Recherche une zone de mémoire qui n'est pas active actuellement.
- S'assure qu'une copie à jour des données ou du programme de cette zone de mémoire se trouve dans l'espace de pagination sur le disque.
- Lit le nouveau programme ou les données de l'espace de pagination sur le disque dans la zone de mémoire nouvellement libérée.
Politique de gestion de la mémoire
La conversion d'adresses réelles en adresses virtuelles et la plupart des autres fonctions de mémoire virtuelle sont fournies au système de manière transparente par le gestionnaire de mémoire virtuelle (VMM). Le VMM implémente la mémoire virtuelle, permettant la création de segments plus grands que la mémoire physique disponible dans le système. Il y parvient en maintenant une liste de pages libres de la mémoire réelle qu'il utilise pour récupérer les pages qui doivent être mises en mémoire.
Le VMM doit parfois réapprovisionner les pages de la liste des disponibilités en supprimant certaines des données de la page en cours de la mémoire réelle. Le processus de transfert de données entre la mémoire et le disque au fur et à mesure que les données sont nécessaires est appelé "pagination". Pour effectuer la pagination, le VMM utilise des algorithmes de vol de page qui catégorisent les pages en trois classes, chacune avec des critères d'entrée et de sortie uniques:
- pages de mémoire de travail
- pages de fichier local
- pages de fichiers distants
En général, les pages de travail ont la priorité la plus élevée, suivies des pages de fichier local, puis des pages de fichier distant.
En outre, le VMM utilise une technique connue sous le nom d'algorithme d'horloge pour sélectionner les pages à remplacer. Cette technique tire parti d'un bit référencé pour chaque page en tant qu'indication des pages récemment utilisées (référencées). Lorsqu'une routine de voleur de page est appelée, elle parcourt une table de cadres de page, en examinant le bit référencé de chaque page. Si la page n'a pas été référencée et qu'elle est volable (c'est-à-dire qu'elle n'est pas épinglée et qu'elle répond à d'autres critères de vol de page), elle est volée et placée sur la liste libre. Les pages référencées ne peuvent pas être volées, mais leur bit de référence est réinitialisé, "vieillissant" effectivement la référence de sorte que la page peut être volée lors de la prochaine émission d'un algorithme de vol de page.
Allocation de mémoire
La version 3 du système d'exploitation utilise une technique d'emplacement de pagination différée pour le stockage alloué aux applications. Cela signifie que lorsque du stockage est alloué à une application avec une sous-routine telle que malloc, aucun espace de pagination n'est affecté à ce stockage tant que le stockage n'est pas référencé.