Unité de gestion mémoire

Unité de gestion mémoire
Cette MMU MC68451 pouvait s'utiliser avec le Motorola 68010

Une unité de gestion mémoire (MMU pour Memory Management Unit) est un composant informatique responsable de l'accès à la mémoire demandée par le processeur. Sur le matériel ancien, elle était indépendante du processeur. Ainsi à l'époque des premiers microprocesseurs, il s'agissait d'un circuit intégré à part. Puis la 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.

Fonction d’une MMU

Parmi les fonctions de tels dispositifs, on trouve :

  • La translation d'adresses logiques en adresses linéaires par l'unité de segmentation (voir Segmentation)
  • La translation d'adresse linéaire 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 la MPU (Memory Protection Unit))
  • La commutation de banque (dans des architectures informatiques plus simples comme les systèmes 8 bit)

Principe

L'utilisation la plus courante et connue d'une MMU est la protection de plages mémoire. Un programme donné ne doit pas pouvoir accéder (en lecture et/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.

Fonctionnement

Le système programme la MMU en déclarant une zone mémoire précise comme appartenant à un programme précis (une zone exécutable de la mémoire). L'utilisation de translation d'adresse est souvent utilisée conjointement à la protection mémoire afin que les variables du programme commencent à l'adresse 0. Si une tentative d'accès à de la mémoire hors plage est détectée, une interruption est levée par la 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.