Permettez-moi de traiter la partie "pourquoi".
Une des raisons d'un système d'exploitation moderne est de permettre à plusieurs programmes (processus) de s'exécuter en même temps sur un système. Si vous voulez le faire en toute sécurité, les éléments suivants doivent se produire :
-
Vous ne voulez probablement pas (sauf si vous avez des besoins spéciaux) diviser la RAM du système de manière fixe - par exemple 256 Mo fixe par processus - cela vous limite à 8 processus dans un système de 2 Go. Vous aimeriez que chaque processus puisse "demander" de la mémoire et la restituer lorsqu'il a fini.
-
Vous ne voulez pas non plus répartir les périphériques d'E/S de manière fixe entre les dispositifs. En général, vous voulez que tout ou partie du matériel, comme la mémoire, soit une ressource partagée, ou du moins exclusivement temporaire à des processus spécifiques à des moments spécifiques. Cela nécessite que tous les processus n'essayent pas de faire de l'E/S par eux-mêmes, mais qu'ils "passent par" quelque chose pour planifier et coordonner l'E/S. La planification est importante car la plupart des E/S sont beaucoup plus lents que le CPU, donc vous pouvez avoir le CPU travailler pour d'autres processus pendant qu'il attend une E/S, même sur un système monocœur.
Pour bien faire ce qui précède, il faut tirer parti de plusieurs fonctionnalités du matériel CPU. L'un d'eux est l'UMC, l'autre est le mode protégé. Deux systèmes d'exploitation pourraient-ils partager ces fonctionnalités matérielles de manière coopérative pour exécuter deux systèmes d'exploitation ou plus ?
Il est certain, mais il n'y a rien dans le matériel capable d'empêcher un système d'exploitation de piétiner la mémoire des autres systèmes d'exploitation. Si le CPU est en mode noyau (il n'a qu'un seul mode noyau), tout code peut faire n'importe quoi. Il est entièrement possible pour le code d'un système d'exploitation de courir sur le code ou les données de l'autre système d'exploitation. Et nous savons que les systèmes d'exploitation ont eu des vulnérabilités dans le passé et en auront plus à l'avenir. C'est donc très mauvais pour la sécurité.
Maintenant, ne serait-ce pas cool si vous pouviez ajouter une autre "couche" par-dessus tout cela et avoir ce soutien matériel nécessaire pour plusieurs systèmes d'exploitation ? C'est exactement ce que les fonctionnalités de virtualisation matérielle font, elles mettent une barrière matérielle entre plusieurs systèmes d'exploitation en cours d'exécution, et il y a une "interface" de niveau supérieur pour eux appelée un hyperviseur. Vous ne pouvez avoir qu'un hyperviseur. Et oui, les processus s'exécutant sous l'un ou l'autre système d'exploitation doivent passer par trois niveaux pour effectuer des E/S (processus - noyau local - hyperviseur)