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é.
Historique
À l'époque des premiers microprocesseurs, il s'agissait d'un circuit intégré dédié. Puis le MMU a été intégré aux microprocesseurs, à partir du 80286 pour la gamme Intel x86, à partir du 68030 pour la gamme Motorola 680x0. Par la suite, tous les ordinateurs personnels ont été équipés d'un microprocesseur comprenant une unité de gestion de mémoire.
Fonction d’un MMU
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 (en) (memory protection unit)) ;
- La commutation de banque (dans des architectures informatiques plus simples comme les systèmes 8 bits).
Principe
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
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.