# Rappels & historique ## Rappels sur la virtualisation classique ### Prémices #### Au départ Exécuter simultanément plusieurs environnements distinct sur un mainframe IBM. #### IBM System/370 * Virtualisation grâce au système CP/CMS ; * permis par la présence d'une MMU et par l'ajout d'un mode *supervisor* au processeur. ### Vocabulaire * Machine hôte/host machine * Machine invité/guest machine #### Virtualisation vs. émulation * Émulation : simulation logiciel de matériel (potentiellement une architecture différente) : pas d'accès direct au matériel ; * Virtualisation : accès direct, mais restrint, au matériel. #### Technologies de virtualisation matérielle * Intel VT-x/AMD-V/ARM Virtualization Extensions * partitionne le processeur pour exécuter plusieurs système d'exploitation via le même processeur. ### Comment virtualiser ? * Full virtualisation : hyperviseurs ; * Paravirtualisation ; * Isolateurs/conteneurs ; * Conteneurs applicatifs. ### Hyperviseurs ![](hyperv.png) ### Hyperviseurs Contrôlent l'utilisation faite des ressources de la machine hôte par les machines virtuelles. #### Type 1 * L'hyperviseur contrôle directement le matériel ; * Tous les systèmes lancés par la suite passent par l'hyperviseur. * Microsoft Hyper-V, XenServer, VMware ESX, ... #### Type 2 * L'hyperviseur s'appuie sur le système d'exploitation déjà lancé pour accéder au matériel ; * Linux KVM, VirtualBox, BHyVe, ... ### Paravirtualisation #### Caractéristiques * Nécessite un noyau patché ; * l'hôte expose une API accessible aux invités ; * les invités accèdent au matériel via l'API de l'hôte. #### Exemple * Xen ## Virtualisation légère ### Conteneur ![](cntnr.png) ### Conteneur #### Caractéristiques * Isolation faite par le noyau de l'hôte ; * le noyau est partagé entre tous les invités ; * les périphériques sont déjà en place (pas besoin d'en émuler) ; * l'invité démarre à partir de `/sbin/init`. ### Conteneurs applicatifs ![](cntrapp.png) ### Conteneurs applicatifs #### Caractéristiques * Noyau est partagé avec l'hôte ; * on utilise tout en place : fs, sockets, périphériques ; * lance directement une application, pas `init`. #### Versus chroot * Simple isolation d'une partie du système de fichiers ; * pas de limitation sur les ressources utilisés ; * pas d'isolation de l'arbre des processus ; * implémentations douteuses (GrSecurity !). ## Différentes implémentations ### Points communs #### Environnement virtualisé * Arborescence de fichiers séparée ; * arbre de processus isolé ; * comptes utilisateurs distincts ; * pile réseau et nom de machine propre. ### Diversité #### Unix * **FreeBSD :** Jails lancées en 1998 ; * **Solaris :** Zones lancées en 2005 ; #### GNU/Linux * **OpenVZ :** 2005, nécessite de patcher son kernel ; * **Linux Containers (LXC) :** 2008, basé sur les namespaces et les cgroups ; * **Docker :** 2013, en pleine croissance ! ### Et Windows ? #### Isolation * Parallels Virtuozzo Containers ; * Sandboxie. #### Dérivés * **Boot2Docker :** Docker dans une VM.