Aller au contenu

Utilisateur:AurelienSG/Brouillon

Une page de Wikipédia, l'encyclopédie libre.
Cette MMU MC68451 pouvait s'utiliser avec le Motorola 68010.

Une unité de gestion mémoire (MMU pour memory management unit), parfois appelée unité de gestion de mémoire paginée (PMMU pour paged memory management unit), est un composant permettant de contrôler les accès qu'un processeur fait à la mémoire de l'ordinateur dans lequel il est placé.

À l'époque des premiers microprocesseurs, il s'agissait d'un circuit intégré dédié. C'est le cas par exemple du Macintosh II embarquant le dispositif dédié Motorola 68851. Puis le MMU a été intégrée aux microprocesseurs, à partir du 80386 pour la gamme Intel x86, à partir du 68030 pour la gamme Motorola 680x0. L'unité de gestion mémoire fait désormais partie intégrante de tous les microprocesseurs récents.

Fonctions d’un MMU

[modifier | modifier le code]

Parmi les fonctions de tels dispositifs, on trouve :

  • La traduction d'adresses logiques en adresses linéaires par l'unité de segmentation (voir Segmentation) ;
  • La traduction d'adresses linéaires en adresses physiques par l'unité de pagination (voir Pagination) ;
  • Le contrôle de tampon ;
  • L'arbitrage du bus ;
  • La protection de la mémoire (généralement cette fonction est faite par le MPU (memory protection unit)) ;
  • La commutation de banque (dans des architectures informatiques plus simples comme les systèmes 8 bits).

L'utilisation la plus courante et connue d'un MMU est la protection de plages mémoire. Un programme donné ne doit pas pouvoir accéder (en lecture ou écriture) à la mémoire utilisée par un autre programme, voire par le système d'exploitation lui-même. D'une manière simple, chaque programme exécuté par le système d'exploitation se voit attribuer une zone mémoire protégée, dans laquelle aucun autre programme ne peut écrire. Ce principe de protection mémoire est la caractéristique la plus cruciale pour bénéficier d'un système d'exploitation stable. Les anciens systèmes d'exploitation qui n'en bénéficiaient pas plantaient souvent, selon que les programmes exécutés comportaient des erreurs de conception ou non. Il fallait alors redémarrer toute la machine.

L'utilisation de traduction d'adresse (d'adresse virtuelle en adresse physique) est souvent utilisée conjointement à la protection mémoire afin de permettre le placement du logiciel n'importe où en mémoire, y compris en le fractionnant. Ainsi, un système d'exploitation multitâche peut charger plusieurs programmes simultanément dans la mémoire physique libre à l'instant du chargement. Peu importe les plages de mémoire physique libres, il peut donner les adresses virtuelles souhaitées par le programme chargé. Et même en cas de fragmentation de la mémoire physique libre, il peut créer une plage d'adresses virtuelles d'un seul tenant.

Fonctionnement

[modifier | modifier le code]

Le système d'exploitation programme le MMU en déclarant une zone mémoire précise comme appartenant à un programme précis (une zone exécutable de la mémoire). Si une tentative d'accès à de la mémoire hors plage est détectée, une interruption est levée par le MMU. Celle-ci est interceptée par le processeur et cela a généralement pour effet de stopper le programme, qui reçoit par exemple : un signal SIGSEGV (signal de violation de segmentation) sous Unix.

Exemples sur les principales architectures

[modifier | modifier le code]

Les processeurs basés sur ARM implémentent un MMU definis par l'architecture du système de mémoire virtuelle. L'architecture actuelle définit des tables des pages pour décrire des tables de 4 Ko et de 64 Ko, ainsi que des sections de 1 Mo et des super-sections de 16 Mo. L'architecture ARM utilise une table des pages à deux niveaux avec des tailles de pages de 4 Ko et 64 Ko, ou une table des pages à un seul niveau avec des sections de 1 Mo et 16 Mo.

IA-32 / x86

[modifier | modifier le code]

L'architecture x86 a évolué sur une très longue période tout en conservant un compatibilité logicielle complète, même pour les codes du système d'exploitation. Ainsi, le MMU est extrêmement complexe, avec de nombreux différents modes de fonctionnement possible. Le mode d'opération normal du traditionnel processeur 80386 et de ses successeurs sera décrit ici.

Le processeur divise la mémoire en pages de 4 Ko. Les registres de segment (lien vers le wikibook : https://fr.wikibooks.org/wiki/Programmation_Assembleur_x86/Registres#Les_registres_de_segment ? ou https://fr.wikipedia.org/wiki/Registres_du_x86 ?), définissants des pointeurs vers des instructions d'un programme, ses données ou sa pile, et qui sont fondamentaux dans les MMU 8088 et 80286, ne sont plus utilisés par les systèmes d'exploitations (SE) modernes, à l'exception de l'accès à des données spécifiques aux fils d'exécutions par des appplications ou de l'accès à des données spécifiques au processeur par le noyau du SE. Tout accès à la mémoire implique l'utilisation d'un registre de segment, choisis en fonction du code exécuté. Le registre de segment agit comme l'index d'une table, qui fournit un décalage qui sera appliqué à une adresse virtuelle. Sauf lors de l'utilisation des registres de segment FS et GS, le SE assure que ce décalage soit nul.

Après l'application du décalage sur l'adresse, celle-ci est masquée pour ne pas dépasser une taille de 32 bits. L'adresse est calculée en utilisant une table des pages, sous forme d'une structure de donnée de type arbre. Les bits de l'adresses sont divisés de la façon suivant : les 10 premiers bits de poids fort pour la branche de l'arbre, les 10 bits suivants pour les feuilles de la branche, et les 12 derniers bits directement copiés dans le résultat. Certains systèmes d'exploitation, tels que OpenBSD avec sa foncionnalité W^X, ainsi que Linux avec les patchs Exec Shield ou PaX, peuvent aussi limiter la longueur du segment de code, comme specifié par le registre CS, pour interdire l'exécution d'un code dans des régions modifiables de l'espace d'adressage.

Des révisions mineures du MMU introduites avec le microprocesseur Pentium ont permis d'utiliser des pages plus larges de 4 Mo, en sautant la feuille de plus bas niveau de l'arbre. Des révisions mineures introduites avec le Pentium Pro introduisent la fonctionnalité d'extension d'adresse physique (PAE), permettant l'utilisation d'adresses physiques sur 36 bits via une page de table sur trois niveaux (avec 9+9+2 bits pour les trois niveaux, et les 12 derniers bits copiés directement au résultat).

x86-64 est une extension 64 bits de l'architecture x86 qui supprime presque entièrement la segmentation en faveur du flat memory model.

{{Portail|informatique}}

Catégorie:Processeur