Est-il possible de prendre en charge plusieurs processus sans prise en charge de la mémoire virtuelle?

8

Est-il possible de prendre en charge plusieurs processus sans prise en charge de la mémoire virtuelle? J'aimerais en savoir plus si c'est le cas.

Sen
la source
Peut-être hors sujet? Sauf s'il s'agit de systèmes UNIX uniquement.
Maciej Piechotka

Réponses:

10

Vous pouvez exécuter un système d'exploitation multi-processus même sans prise en charge matérielle (pas de MMU ), tous les pointeurs représentant une adresse physique. Vous perdez cependant plusieurs fonctionnalités clés généralement fournies par le MMU:

  • Puisqu'un pointeur pointe toujours vers un endroit spécifique dans la RAM, vous ne pouvez pas avoir de swap (ou seulement de manière très limitée). Normalement, la MMU déclenche une exception lorsqu'elle ne trouve pas de page physique pour une adresse virtuelle donnée, et le gestionnaire d'exceptions fourni par le système d'exploitation extrait la page du swap.
  • Puisqu'un pointeur est déréférencé sans vérification, chaque processus peut accéder à la mémoire des autres processus et à la mémoire du noyau. Normalement, la MMU déclenche une exception lorsqu'elle ne trouve pas de page physique pour une adresse virtuelle donnée, et le gestionnaire d'exceptions fourni par le système d'exploitation met fin au processus de tentative d'accès non valide.
  • Étant donné qu'un même pointeur a la même signification dans différents processus, vous ne pouvez pas facilement implémenter fork . Normalement, l'effet de forkest de faire une copie¹ de la mémoire physique du processus et de créer une nouvelle carte de mémoire virtuelle à partir des mêmes adresses virtuelles vers les nouvelles adresses physiques.

Il existe des systèmes d'exploitation de type Unix qui fonctionnent sur des systèmes sans MMU.

¹ Dans les unités modernes, cela se fait généralement paresseusement (copie sur écriture), qui s'appuie à nouveau sur le MMU levant une exception lorsqu'il ne trouve pas de page physique.

Gilles 'SO- arrête d'être méchant'
la source
Dans le deuxième point "quand il ne peut pas trouver une page physique pour une adresse virtuelle donnée" devrait plutôt être quelque chose comme "lorsque l'accès à la page correspondant à l'adresse virtuelle donnée doit être refusé". La page appartenant au noyau est très probablement résidente.
Ruslan
@Ruslan Lorsqu'une page n'est pas mappée dans un processus, la MMU contient généralement des informations qui ne correspondent pas à une page physique. Il peut arriver que la MMU contienne l'adresse d'une page physique à laquelle le processus n'a pas accès, mais c'est l'exception plutôt que la règle, utilisée pour la mémoire du noyau si le noyau utilise cette fonctionnalité de la MMU (ce que Linux fait) .
Gilles 'SO- arrête d'être méchant'
2

C'est certainement possible avec certaines contraintes comme la protection de la mémoire qui serait un problème comme déjà indiqué. Par exemple, µClinux http://www.uclinux.org/ prend en charge plusieurs processus sans implémenter de mémoire virtuelle. Notez que certains processeurs comme au moins les Analog Devices Blackfin fournissent un MPU (Memory Protection Unit) http://docs.blackfin.uclinux.org/doku.php?id=bfin:mpu . Cela permet aux systèmes d'exploitation moins de mémoire virtuelle de toujours autoriser le partitionnement de la mémoire.

jlliagre
la source
0

Cela dépend de la façon dont vous définissez le processus par rapport aux threads en termes de mémoire.

L'une des fonctions de la mémoire virtuelle est le partitionnement. Bien qu'il soit possible d'exécuter plusieurs processus sans partitionnement, ce serait plus comme exécuter plusieurs threads que des processus - partager le même espace d'adressage.

sybreon
la source
Oui et non. Il est possible d'appliquer la séparation de mémoire sans mémoire virtuelle. Certains microcontrôleurs ont une protection de mémoire matérielle mais pas de mémoire virtuelle (voir la réponse de jlliagre ). Et même sans prise en charge matérielle, vous pouvez appliquer la séparation de la mémoire via une analyse statique (ce n'est pas facile, mais c'est faisable).
Gilles 'SO- arrête d'être méchant'