Tout émulateur de système qui émule un système contenant une MMU émule efficacement une MMU dans un logiciel, donc la réponse à votre question, comme indiqué, est «oui». pourtant , la mémoire virtuelle nécessite un moyen d'imposer un contrôle d'accès à la mémoire, ou au moins une traduction d'adresse, elle nécessite donc soit une émulation logicielle complète du processeur exécutant le logiciel contrôlé, soit une assistance matérielle.
Ainsi, vous pourriez concevoir un système sans MMU, y porter QEMU , ajouter les pièces manquantes pour rendre la mémoire virtuelle réellement utile ( par exemple, , ajouter la prise en charge du swap sur le système hôte) et exécuter un système d'exploitation nécessitant une MMU dans QEMU, avec toute la protection que vous attendez du système d'exploitation invité (à l'exception des bogues QEMU).
Un exemple réel et ancien d'une «émulation» sans MMU utilisée pour fournir de la mémoire virtuelle est la machine Z , qui était capable de paginer et d'échanger son code et ses données, sur des systèmes 8 bits à la fin des années 70 et au début des années 80. . Cela a fonctionné en émulant un processeur virtuel sur le processeur réel sous-jacent; De cette façon, l'interpréteur garde le contrôle total sur la disposition de la mémoire que le programme en cours «voit».
En pratique, on considère généralement qu'une MMU est requise pour la prise en charge de la mémoire virtuelle, au moins au niveau du système d'exploitation. Comme indiqué noyau sans MMU? , il est possible de construire le noyau Linux pour qu'il puisse fonctionner sur des systèmes sans MMU, mais la configuration résultante est très inhabituelle et ne convient que pour des cas d'utilisation très spécifiques (sans logiciel hostile en particulier). Il peut ne pas prendre en charge de nombreux scénarios nécessitant de la mémoire virtuelle (échange, mmap
...).