0

Pourquoi avons-nous besoin de l'unité de gestion de la mémoire?Unité de gestion de la mémoire virtuelle et de la mémoire

Il semble que la seule tâche de l'unité de gestion de la mémoire est de convertir les adresses virtuelles en adresse physique. Cela ne peut-il pas être fait dans un logiciel? Pourquoi avons-nous besoin d'un autre périphérique matériel pour cela?

Répondre

1

MMU (Memory Management Unit) est un composant matériel disponible sur la plupart des plates-formes matérielles traduisant des adresses virtuelles en adresses physiques. Cette traduction apporte les avantages suivants:

  • Swap: votre système peut gérer plus de mémoire que celle physiquement disponible. Par exemple, sur une architecture 32 bits, le système "voit" 4 Go de mémoire, quelle que soit la quantité de mémoire physique disponible. Si vous utilisez plus de mémoire que ce qui est réellement disponible, les pages de mémoire sont remplacées par sur le disque d'échange.
  • Protection de la mémoire: la MMU renforce la protection de la mémoire en empêchant une tâche en mode utilisateur d'accéder à la partie de la mémoire appartenant à d'autres tâches.
  • Relocalisation: chaque tâche peut utiliser des adresses à un certain décalage (par exemple, pour des variables), quelles que soient les adresses réelles attribuées à l'exécution.

Il est possible d'implémenter partiellement un mécanisme de traduction de logiciel. Par exemple, pour la relocalisation, vous pouvez jeter un oeil à l'implémentation de gcc's fpic. Cependant, un mécanisme logiciel ne peut pas fournir de protection de la mémoire (ce qui, à son tour, affecte la sécurité et la fiabilité du système).

+0

'-fpic' n'a * rien * à voir avec la mémoire virtuelle. Cela fonctionnerait exactement de la même manière dans un environnement sans adresses virtuelles. (L'adressage virtuel permet de charger le code exécutable à la même adresse virtuelle à chaque fois, indépendamment de ce qui est également en cours d'exécution.) –

+0

'-fpic' peut être utilisé dans les systèmes Linux sans le MMU avoir une sorte de délocalisation. – Claudio

+1

Il est utilisé sur les systèmes normaux pour créer des objets partagés (bibliothèques), car ils peuvent être chargés à n'importe quelle adresse. Pour les exécutables non-bibliothèques, c'est une solution alternative au problème de relocalisation que résout la mémoire virtuelle. Cela ne veut pas dire que c'est une implémentation partielle de VM, mais une solution différente à un problème que vous avez quand vous n'avez pas de VM. Il ne permet toujours pas au code de passer à une adresse physique différente (par exemple, après avoir été expulsé et paginé plus tard), car il y a probablement des adresses dans le registre qui pointent vers les anciennes pages. –

0

La raison pour laquelle un composant MMU d'une CPU est de rendre la traduction d'adresse logique à physique transparente pour le processus d'exécution. Le faire dans un logiciel nécessiterait de s'arrêter pour traiter chaque accès mémoire par un processus. De plus, vous auriez le problème de la poule et de l'oeuf qui, si la traduction de la mémoire est faite par un logiciel, qui fait la traduction de la mémoire de ce logiciel.