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).
'-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.) –
'-fpic' peut être utilisé dans les systèmes Linux sans le MMU avoir une sorte de délocalisation. – Claudio
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. –