| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | 
| wiki:virtualisation_et_emulation [2025/04/24 11:06]  – [Gestionnaire de technologie de virtualisation]  Thibault Seguin | wiki:virtualisation_et_emulation [2025/09/16 19:22] (Version actuelle)  – [Virtualisation avec hyperviseurs et conteneurs]  Thibault Seguin | 
|---|
| Contrairement à l'**émulation** qui émule la totalité d'un ordinateur, un **hyperviseur** utilise les ressources de l'ordinateur hôte (ordinateur sur lequel est installé l'hyperviseur), en gros il utilise les composants internes de l'ordinateur hôte comme le processeur (CPU), la mémoire vive (RAM), la carte graphique (GPU), carte réseau, carte son,... Par contre, l'hyperviseur ne peut exécuter une **VM** (**machine virtuelle**) et **système d'exploitation invité** que si il se base sur la même architecture processeur que l'ordinateur hôte. C'est à dire que sur un ordinateur ayant un processeur **Intel** ou **AMD** ''64 bits'' (**x86**), l'hyperviseur ne peut virtualiser qu'un système d'exploitation invité (OS invité) ou VM basé sur l'Intel ou AMD ''64bits'' ou ''32bits'' (x86) alors qu'un émulateur peut émuler n'importe quel architecture de processeur. Un OS invité est totalement isolé de l'ordinateur et de l'OS Hôte et même des autres VM, si il y en a. C'est le principe de la **virtualisation** complète ! Une VM est un ordinateur virtualisé et l'OS invité est l'OS installé sur cette VM. | Contrairement à l'**émulation** qui émule la totalité d'un ordinateur, un **hyperviseur** utilise les ressources de l'ordinateur hôte (ordinateur sur lequel est installé l'hyperviseur), en gros il utilise les composants internes de l'ordinateur hôte comme le processeur (CPU), la mémoire vive (RAM), la carte graphique (GPU), carte réseau, carte son,... Par contre, l'hyperviseur ne peut exécuter une **VM** (**machine virtuelle**) et **système d'exploitation invité** que si il se base sur la même architecture processeur que l'ordinateur hôte. C'est à dire que sur un ordinateur ayant un processeur **Intel** ou **AMD** ''64 bits'' (**x86**), l'hyperviseur ne peut virtualiser qu'un système d'exploitation invité (OS invité) ou VM basé sur l'Intel ou AMD ''64bits'' ou ''32bits'' (x86) alors qu'un émulateur peut émuler n'importe quel architecture de processeur. Un OS invité est totalement isolé de l'ordinateur et de l'OS Hôte et même des autres VM, si il y en a. C'est le principe de la **virtualisation** complète ! Une VM est un ordinateur virtualisé et l'OS invité est l'OS installé sur cette VM. | 
|  |  | 
| La **conteneurisation** à quelques similitudes avec l'appel système et commande Unix **chroot** mais en utilisant une //isolation// complète entre l'OS hôte et les autres conteneurs. Je vais prendre pour exemple les conteneurs **LXC**, les conteneurs ont une méthode de **virtualisation au niveau du système d'exploitation**, c'est à dire que les conteneurs peuvent virtualiser plusieurs **systèmes Linux** (n'importe quelle distribution Linux est virtualisable) sur un ordinateurs hôte qui comportent lui aussi un système Linux, pour cela les conteneurs utilisent le **noyau Linux** de l'OS hôte sur l'ordinateur hôte ce qui permet d'exécuter les logiciels d'un conteneur de façon pour ainsi dire //native//. Un conteneur n'a accès à aucune donnée de l'OS hôte et des autres conteneurs, l'//isolation// est parfaite, le seul OS qui peut accéder à toutes les données des conteneurs est l'OS Linux hôte (OS principal de l'ordinateur). À  noter qu'un conteneur ne virtualise pas le //noyau// étant donné qu'il utilise le noyau Linux de l'hôte mais la totalité de l'**espace utilisateur**, c'est à dire tout ce qui compose un système Linux hormis le noyau. Il faut aussi préciser que contrairement à la virtualisation par hyperviseur on peut tout à fait virtualiser un conteneur Linux à processeur **ARM** sur un ordinateurs hôte avec un Linux à processeur x86 (Intel ou AMD). En définitive, les conteneurs sont parfaits pour avoir plusieurs //serveurs Web Linux// sur le même ordinateur par exemple ou avoir un conteneur Linux qui donne la possibilité d'avoir un //environnement de développement//, compilation sans interféré avec votre OS Linux principal, enfin vous avez une infinité de possibilités avec la virtualisation par conteneurs. | La **conteneurisation** à quelques similitudes avec l'appel système et commande Unix [[wiki:os:gnu_linux:tutos:admin:chroot]] mais en utilisant une //isolation// complète entre l'OS hôte et les autres conteneurs. Je vais prendre pour exemple les conteneurs **LXC**, les conteneurs ont une méthode de **virtualisation au niveau du système d'exploitation**, c'est à dire que les conteneurs peuvent virtualiser plusieurs **systèmes Linux** (n'importe quelle distribution Linux est virtualisable) sur un ordinateurs hôte qui comportent lui aussi un système Linux, pour cela les conteneurs utilisent le **noyau Linux** de l'OS hôte sur l'ordinateur hôte ce qui permet d'exécuter les logiciels d'un conteneur de façon pour ainsi dire //native//. Un conteneur n'a accès à aucune donnée de l'OS hôte et des autres conteneurs, l'//isolation// est parfaite, le seul OS qui peut accéder à toutes les données des conteneurs est l'OS Linux hôte (OS principal de l'ordinateur). À  noter qu'un conteneur ne virtualise pas le //noyau// étant donné qu'il utilise le noyau Linux de l'hôte mais la totalité de l'**espace utilisateur**, c'est à dire tout ce qui compose un système Linux hormis le noyau. Il faut aussi préciser que contrairement à la virtualisation par hyperviseur on peut tout à fait virtualiser un conteneur Linux à processeur **ARM** sur un ordinateurs hôte avec un Linux à processeur x86 (Intel ou AMD). En définitive, les conteneurs sont parfaits pour avoir plusieurs //serveurs Web Linux// sur le même ordinateur par exemple ou avoir un conteneur Linux qui donne la possibilité d'avoir un //environnement de développement//, compilation sans interféré avec votre OS Linux principal, enfin vous avez une infinité de possibilités avec la virtualisation par conteneurs. | 
|  |  | 
| ==== Hyperviseurs de type 2 ==== | ==== Hyperviseurs de type 2 ==== | 
| * [[wiki:virtualisation_et_emulation:VMware Player]] Rédaction en cours, rendez vous [[https://en.wikipedia.org/wiki/VMware_Workstation_Player|ici]]. | * [[wiki:virtualisation_et_emulation:VMware Player]] Rédaction en cours, rendez vous [[https://en.wikipedia.org/wiki/VMware_Workstation_Player|ici]]. | 
| * [[wiki:virtualisation_et_emulation:Bhyve]] est l'hyperviseur //natif// de **FreeBSD**. Rédaction en cours, rendez vous [[https://en.wikipedia.org/wiki/Bhyve|ici]]. | * [[wiki:virtualisation_et_emulation:Bhyve]] est l'hyperviseur //natif// de **FreeBSD**. Rédaction en cours, rendez vous [[https://en.wikipedia.org/wiki/Bhyve|ici]]. | 
| * [[wiki:virtualisation_et_emulation:Hyper-V]] est l'hyperviseur //natif// de **Windows** de **Microsoft**. Rédaction en cours, rendez vous [[https://fr.wikipedia.org/wiki/Hyper-V|ici]]. | * [[wiki:virtualisation_et_emulation:Hyper-V]] est l'hyperviseur //natif// **Windows** de **Microsoft**. Rédaction en cours, rendez vous [[https://fr.wikipedia.org/wiki/Hyper-V|ici]]. | 
|  |  | 
| ==== Hyperviseurs de type 1 ==== | ==== Hyperviseurs de type 1 ==== | 
|  |  | 
| ===== Émulation ===== | ===== Émulation ===== | 
| L'**émulation** permet de **simuler** la ''totalité'', d'une **console de jeux**, d'un **ordinateur virtuel** complet comprenant : le **processeur** (**CPU**), la **mémoire vive** (**RAM**), la **carte graphique** (**GPU**), **carte réseau**, **carte son**,..., enfin en clair, contrairement à un **hyperviseur** qui **simule** le moins de **composant** possible, c'est l'inverse pour l'**émulateur**. L'**émulateur** a ses propres ''atouts'' et ''inconvénients'', parmi les ''atouts'', il y a le fait qu'un **émulateur** peut **simuler** n'importe qu'elle type d'**ordinateur** avec un **processeur** complètement différent de l'**ordinateur hôte** (sur lequel est installer l'**émulateur**), par exemple vous pouvez avec un **émulateur** simuler un **ordinateur** à **processeur** à **architecture** : **i386** (**x86**), **mips**, **alpha**, **m68k**, **arm**, **ppc** (**powerpc**), **risc-v** sur un **ordinateur hôte** qui a n'importe qu'elle **architecture** de **processeur**, par exemple pour les plus courantes **x86** ou **arm** en ''64 bits'' ou ''32 bits'' (peut importe), c'est à dire qu'on peut **simuler** n'importe quel **architecture** de **processeur** sur un **ordinateur hôte** avec une **architecture** différente voir la même **architecture processeur** (mais dans se cas il n'y a pas trop d'intérêt à utliser l'**émulatation**) et parmi les ''inconvénients'', vu que l'**émulateur** simule la ''totalité'' d'un **ordinateur** il y a forcément une perte de ''performance'' vu que l'**émulateur** n'utilise aucune **ressource** de l'**ordinateur hôte** (**CPU**,**RAM**,**GPU**,...) mais en général on utilise un **émulateur** pour **simuler** de vieux **ordinateurs** ou **consoles de jeux** donc les ''performances'' requisent de ne sont pas vraiment importante au vu des ''performances'' des **ordinateurs** actuels. | L'**émulation** permet de simuler la //totalité//, d'une console de jeux, d'un ordinateur virtuel complet comprenant : le processeur (CPU), la mémoire vive (RAM), la carte graphique (GPU), carte réseau, carte son,..., enfin en clair, contrairement à un **hyperviseur** qui simule le moins de composants possible, c'est l'inverse pour l'**émulateur**. L'émulateur a ses propres atouts et inconvénients, parmi les atouts, il y a le fait qu'un émulateur peut simuler n'importe qu'elle type d'ordinateur avec un processeur complètement différent de l'ordinateur hôte (sur lequel est installer l'émulateur), par exemple vous pouvez avec un émulateur simuler un ordinateur à processeur avec architecture : **i386** (**x86**), **mips**, **alpha**, **m68k**, **arm**, **ppc** (**powerpc**), **risc-v** sur un ordinateur hôte qui a n'importe qu'elle architecture de processeur, par exemple pour les plus courantes x86 ou arm en ''64 bits'' ou ''32 bits'' (peut importe), c'est à dire qu'on peut simuler n'importe quel architecture de processeur sur un ordinateur hôte avec une architecture différente voir la même architecture processeur (mais dans se cas il n'y a pas trop d'intérêt à utiliser l'émulation) et parmi les inconvénients, vu que l'émulateur simule la //totalité// d'un ordinateur il y a forcément une perte de //performance// vu que l'émulateur n'utilise aucune //ressource// de l'ordinateur hôte (CPU, RAM, GPU,...) mais en général on utilise un émulateur pour simuler de vieux ordinateurs ou consoles de jeux donc les //performances// requises de ne sont pas vraiment importante au vu des performances des ordinateurs actuels. | 
|  |  | 
| Vous trouvez une liste d'[[wiki:virtualisation_et_emulation:émulateurs]] plus conséquente. | Voici une brève [[https://fr.wikipedia.org/wiki/Liste_d%27%C3%A9mulateurs_d%27ordinateur|liste d'émulateurs]]. | 
| ==== Émulateur multi-architecture ==== | ==== Émulateur multi-architecture ==== | 
| * [[wiki:virtualisation_et_emulation:QEMU]] (**//Quick Emulator//**) est un des **émulateurs** les plus complet et il permet d'agir comme un **logiciel** de **virtualisation** via des **hyperviseurs** tel que **KVM** ou **NVMM**. Rédaction en cours, rendez vous [[https://fr.wikipedia.org/wiki/QEMU|ici]] | * [[wiki:virtualisation_et_emulation:QEMU]] (**//Quick Emulator//**) est un des émulateurs le plus complet et il permet d'agir comme un logiciel de virtualisation via des hyperviseurs tel que KVM ou NVMM. Rédaction en cours, rendez vous [[https://fr.wikipedia.org/wiki/QEMU|ici]] | 
| * [[wiki:virtualisation_et_emulation:GXemul]] Rédaction en cours, rendez vous [[https://en.wikipedia.org/wiki/GXemul|ici]] | * [[wiki:virtualisation_et_emulation:GXemul]] Rédaction en cours, rendez vous [[https://en.wikipedia.org/wiki/GXemul|ici]] | 
| * [[wiki:virtualisation_et_emulation:SimH]] est un **émulateur** ''dédié'' aux **ordinosaures** (**ordinateurs** d' ''antan''). Rédaction en cours, rendez vous [[https://fr.wikipedia.org/wiki/SIMH|ici]] | * [[wiki:virtualisation_et_emulation:SimH]] est un émulateur dédié aux ordinosaures (ordinateurs d'antan). Rédaction en cours, rendez vous [[https://fr.wikipedia.org/wiki/SIMH|ici]] | 
|  |  | 
| ==== Émulateur à architecture unique ==== | ==== Émulateur à architecture unique ==== | 
| * [[wiki:virtualisation_et_emulation:Bochs]] Rédaction en cours, rendez vous [[https://fr.wikipedia.org/wiki/Bochs|ici]] | * [[wiki:virtualisation_et_emulation:Bochs]] Rédaction en cours, rendez vous [[https://fr.wikipedia.org/wiki/Bochs|ici]] | 
| * [[wiki:virtualisation_et_emulation:PearPC]] Rédaction en cours, rendez vous [[https://fr.wikipedia.org/wiki/PearPC|ici]] | * [[wiki:virtualisation_et_emulation:PearPC]] Rédaction en cours, rendez vous [[https://fr.wikipedia.org/wiki/PearPC|ici]] | 
| * [[https://doc.ubuntu-fr.org/pcem|PCem]] est un **émulateur** dédié à aux **ordinateurs** et **OS** d'antan sur **processeur** **x86**, des **processeurs** ''16 bits'' et ''32 bits''. C'est donc un **émulateur** qui fait revivre les anciens **compatibles PC**. Dans la même veine il y a l'**émulateur** du nom de **86Box**, qui est encore plus complet. | * [[https://doc.ubuntu-fr.org/pcem|PCem]] est un émulateur dédié à aux ordinateurs et OS d'antan sur processeur **x86**, des processeurs ''16 bits'' et ''32 bits''. C'est donc un émulateur qui fait revivre les anciens **compatibles PC**. Dans la même veine il y a l'émulateur du nom de **86Box**, qui est encore plus complet. | 
|  |  | 
| ==== Émulateur de console de jeux ==== | ==== Émulateur de console de jeux ==== | 
| En ce qui concerne les **émulateurs** de **console de jeux** rendez-vous [[https://wiki.ordunix.net/doku.php?id=wiki:gaming#retrogaming|ici]]. | En ce qui concerne les **émulateurs de console de jeux** rendez-vous [[https://wiki.ordunix.net/doku.php?id=wiki:gaming#retrogaming|ici]]. | 
|  |  | 
|  |  |