Skip to content

M4.2 Système d'Exploitation

Électronique numérique (numération, logique booléenne),

Plan du module

0 : Introduction à l'architecture des systèmes informatiques 1 : Architecture minimale d'un système informatique 2 : Architecture des systèmes embarqués 3 : Architecture des ordinateurs

(CLIC)

1.

diapo 5

Exercices : Exercices : Moniteur système ps -T -p 213718 Htop -p num_process et F2 pour affichage Top et f pour demander affichage du CPU

Join() pour attendre la fin d’un thread Lock (c’est un verrou, identique à un mutex)

5. Virtualisation

diapo xx Objectifs et plan du chapitre

Pour terminer ce module sur les systèmes d'exploitation, introduisons un concept utilisé de plus en plus avec les services Cloud : la virtualisation. L'objectif du module est de * Comprendre les intérêts et le fonctionnement de la virtualisation * Ceci afin d'être capable de choisir et mettre en œuvre une machine virtuelle, activité bien utile à l'enseignant d'informatique. Nous verrons donc dans un premier temps * les principes et les applications de la virtualisation * Nous présenterons ensuite les spécificités de l'Hyperviseur * Nous observerons en détail La machine virtuelle * Enfin, nous terminerons par un mot sur la conteneurisation, concept quelque peu concurrent à la virtualisation

(CLIC) Dans cette vidéo nous présenterons les principes et applications de la virtualisation et continuerons sur le fonctionnement général d'un hyperviseur

diapo 3 Principes et applications de la virtualisation

(CLIC) Sur un PC ou un serveur que nous nommerons machine physique, un logiciel d'émulation est installé, comme une application. Cette application, comme tout autre application, a accès aux ressources de la machine physique à travers le système d'exploitation hôte : processeur, mémoire, stockage, communications. Elle émule alors un ordinateur en proposant un système hardware virtuel standardisé (CLIC), avec ses ressources virtuelles : un processeur virtuel, de la mémoire virtuelle, une carte réseau virtuelle, une carte son virtuelle et les drivers associés, etc... Sur cet émulateur d'ordinateur, il est possible d'installer une machine virtuelle (CLIC) avec son système d'exploitation, dit système d'exploitation invité (CLIC), et d'y faire tourner des applications qui accèdent aux ressources virtuelles via ce système d'exploitation invité. Le logiciel d'émulation demande alors ressources et services au système d'exploitation hôte pour fournir à la machine virtuelles les ressources et services demandés.

La présence de cette étape intermédiaire pour l'accès aux ressources ralentit évidemment l'exécution de l'application. Les machines récentes étant puissante, ce ralentissement est très réduit et acceptable pour la plupart des applications.

(CLIC) vmware workstation, Oracle Virtual Box, Parallels desktop et Qemu sont quelques exemples d'émulateurs de PC hébergeant des machines virtuelles. (CLIC) Java est un exemple particulier de machine virtuelle, qui n'héberge que des applications java.

(CLIC) Un avantage des machines virtuelles est l'isolation entre les machines qui évite que la contamination d'une application se répande sur une autre. De plus, en cas de contamination par un virus, il est aisé de ramener la machine à un point de sauvegarde précédent ou même de la supprimer et de la recréer à partir de son fichier de configuration, si les sauvegardes et installations ont été documentées soigneusement. L'utilisation de machine virtuelle permet également de faire tourner simultanément plusieurs systèmes d'exploitation sur un même PC, utile pour tester son logiciel en développement sur Windows / MacOs et Linux. En émulant complètement le hardware, l'émulateur peut proposer des jeux d'instructions différents et ainsi émuler un système d'exploitation Android sur un processeur ARM alors que la machine physique a un processeur amd64 avec Windows.

(CLIC) L'inconvénient lié à l'ajout d'une couche logicielle intermédiaire est l'augmentation de la consommation (d'énergie, de mémoire et de disque) et la baisse des performances. C'est notamment un défaut majeur de java.

(CLIC) * Les applications les plus importantes des machines virtuelles sont liées à la sécurité et à la disponibilité apportées par ce concept. Les serveurs d'applications hébergent ainsi autant de machines virtuelles que de services, les ressources allouées aux différentes machines évoluent avec les besoins des services qu'elles hébergent. L'arrêt ou la contamination de l'une n'empêche pas le fonctionnement des autres. Cette isolation entre les machines permet de plus de louer des machines virtuelles présentes sur un même serveur à des clients différents. C'est le principe de l'IaaS, Infrastructure As A Service où le client loue un ou plusieurs serveurs virtuels dans un datacenter. Nous y reviendrons un peu plus loin. * Une autre application est le test de logiciels, sur des OS voir des architectures différentes. * Enfin, il est possible de demander l'installation d'une machine virtuelle avec l'OS de son choix, les logiciels de son choix et des droits administrateur sur une machine physique protégée. Cela permet de faire tourner un logiciel capricieux, d'avoir un OS différent et d'y faire des essais, sans risque pour le système hôte. L'enseignant d'informatique pourra ainsi disposer de machines Linux non bridées où les étudiants peuvent installer les logiciels adaptés aux Travaux Pratiques. Un retour à l'état initial peut alors ramener en fin de cours les machines à leur configuration par défaut.

Le fort intérêt pour la virtualisation a permis aux solutions de se diversifier. L'hyperviseur est une de ces solutions.

diapo 4 Hyperviseur

Face à la machine émulée complètement, reposant sur un OS complet, nommée machine virtuelle hébergée ou Hosted VM, une autre architecture nommée hyperviseur est dédiée à l'hébergement de machines virtuelles. En référence aux systèmes embarqués sans OS, on parle de bare metal VM. Plus léger qu'un OS, l'hyperviseur ne propose pas l'ensemble des services d'un système d'exploitation : pas d'interface graphique, de client HTTP ou de système d'impression par exemple. Il comporte un noyau système simplifié et optimisé pour faciliter les accès des systèmes d'exploitation invités à l’architecture matérielle. Il comporte aussi, sauf exception citée après, les drivers des périphériques matériels. L'hyperviseur est aussi nommé Virtual Machine Manager, il distribue les ressources virtuelles (processeur, mémoire, périphériques, stockage) au systèmes invités. La machine virtuelle 0 est chargée de l'administration de l'hyperviseur : paramétrage de l'hyperviseur, allocation des ressources aux autres machines virtuelles, démarrage et arrêt de ces machines virtuelles.

Les processeurs matériels sont eux aussi optimisés pour mettre à disposition des hyperviseurs des processeurs virtuels. Intel Virtualization Technology (VT-x) & AMD Virtualization (AMD-V) sont les noms de ces technologies chez les 2 principaux concepteurs de processeurs.

(CLIC)

En donnant un accès plus direct au processeur, l'hyperviseur ne permet pas d'émuler une autre architecture. La machine virtuelle hébergée garde donc l'avantage de pouvoir émuler une architecture différente de la machine hôte.

L'hyperviseur quant à lui est moins gourmand et les machines virtuelles s'exécutent plus rapidement. Les hyperviseurs sont ainsi la solution retenue pour les serveurs hébergeant un grand nombre de machines virtuelles. (CLIC)

**diapo 5**Hyperviseur 2

Les hyperviseurs les plus connus sont Microsoft Hyper-V, VMWare vSphere et les solutions open-source Xen et KVM.

Xen hypervisor et Hyper-V sont quelque-peu différents, les drivers de périphériques sont dans la machine virtuelle 0. Les autres VMs accèdent aux périphériques via la VM 0. KVM assurant juste le rôle d'hyperviseur, les machines sont virtualisées par Qemu ou Virtual Box, fonctionnant alors sans émuler le processeur.

Les serveurs hébergeant de nombreuses VM, pour des services réseaux ou pour des locations IaaS par exemple, utilisent des hyperviseurs. Amazon Web Service a récemment abandonné Xen pour KVM, OVH et Google proposent aussi des serveurs virtuels sous KVM. Les serveurs de Microsoft Azure sont équipés d'une version spéciale de Hyper-V. Ces 4 fournisseurs d'infonuagique (Cloud) proposent à leur client de louer des serveurs bare metal ou alors de louer des machines virtuelles. Il est aussi possible de louer des machines virtuelles déjà installées pour des applications plus haut niveau : hébergement de site web ou de bases de données, calcul sur GPU, etc... On parle alors de Platform As A Service. Pour le client, louer une ou plusieurs machines virtuelles sur un serveur Cloud, lui permet de ne pas investir financièrement dans des serveurs (souvent mal-dimensionnés car l'activité de l'entreprise évolue), de ne pas les stocker, les alimenter, les refroidir et les maintenir. Le client paye juste pour l'usage et peut adapter les ressources à ses besoins en payant l'augmentation de ressources de ses VM ou la création de nouvelles VM. Amazon Web Service propose même des VMs dont les ressources et le prix s'adaptent seuls aux besoins. Par ailleurs, ces datacenters ont des accès réseau redondant avec de très forts débits, ce qui n'est pas toujours possible au siège du client.

Le fournisseur de service pour garantir la continuité de service a souvent plusieurs serveurs physiques. (CLIC) Chaque serveur a une petite VM 0 pour son administration. Un service important (le DNS par exemple) est dupliqué, comme l'application 1 ici. Chaque service possède sa propre machine virtuelle, pour la sécurité, pour la maintenance (sauvegarde de la configuration et d'instantanés de l'état de la machine), pour pouvoir la dupliquer, pour permettre de lui allouer spécifiquement des ressources. Si le serveur 1 est trop chargé ou demande à être arrêté, il est possible via le réseau de déplacer la machine virtuelle (c'est-à-dire son système de fichier, sa configuration et son état sur le second serveur). L'utilisation d'un stockage en réseau, accessible aux deux serveurs, évite d'avoir à transférer les fichiers par le réseau.

Notons que les distributions récentes de Linux comportent KVM et que Windows 10 permet d'installer Hyper-V. Ainsi, Linux comme Windows 10 peuvent devenir des hyperviseurs donnant un accès optimisé aux ressources pour des machines virtuelles.

**diapo 6**Hyperviseur 3 exemple CRANS Est présentée ici la page d'administration des serveurs de l'association réseau de l'ENS Paris Saclay, CRANS. On y voit les 3 serveurs physiques HPE Proliant DL360e Gen8 (CLIC) et les différentes machines virtuelles (CLIC) , chaque service ayant la sienne : le routage, le serveur de versionning et de collaboration gitlab, le serveur d'applications collaboratives owncloud, les serveurs de stockage, etc... Les machines VM sont virtualisées par Qemu/KVM et sont animées par des systèmes d'exploitation Linux pour les services réseau. Windows est possible aussi pour les applications étudiantes. Une machine virtuelle intiale est hébergée par chaque serveur physique et exécute l'application d'administration de l'hyperviseur Proxmox/KVM. On y accède via une page web ou une console (CLIC). On peut y gérer les droits sur les machines virtuelles, en créer de nouvelles, visualiser les ressources utilisées. De plus, il est possible pour répartir la charge entre les serveurs ou pour la maintenance de passer une machine virtuelle, avec son état et sa configuration, d'un serveur à l'autre, avec une coupure de service de 2 secondes uniquement pour les utilisateurs du service. L'utilisation d'un hyperviseur, ici Proxmox basé sur KVM, plutôt qu'une solution "hosted VM" reposant sur un OS complet, rend les machines plus rapides mais aussi plus dépendantes de la machine physique. La stabilité des déplacement de machines virtuelles d'un serveur à l'autre a ainsi été nettement améliorée lors du passage à 3 serveurs physiques identiques.

diapo 7 Présentation du plan

diapo 8 La machine virtuelle Regardons en détail une machine virtuelle, avec une VM VirtualBox hébergée par un PC avec un OS hôte Linux/KVM. Le système d'exploitation installé sur la machine virtuelle est linux. Les copies d'écran affichée sur la droite sont extraites de la console de cet OS invité.

  • Lors de la configuration d'une machine virtuelle, on attribue des ressources, (CLIC) 4 Go de mémoire et (CLIC) 1 CPU. L'affichage sur la machine virtuelle de ses ressources montre bien une machine VirtualBox avec une carte mère virtuelle, 1 CPU et 4 Go de mémoire. Comme KVM partage les ressources du CPU directement à la machine virtuelle, le CPU partagé a un coeur identique à ceux de la machine physique.

(CLIC) Le driver vidéo VMware, différent du driver Intel de la machine physique, montre également que la machine virtuelle propose des périphériques virtuels au système d'exploitation invité.

(CLIC) Lors de la configuration de la machine virtuelle, on attribue de l'espace disque. (CLIC) On crée enfin une carte réseau virtuelle, avec une adresse MAC créée par VirtualBox, différente de l'adresse MAC Dell de la machine. Cette interface réseau virtuelle a par défaut une IPv4 privée 10.0.2.15. VirtualBox propose alors un routage NAT de la carte réseau de la VM vers l'extérieur, en passant bien sûr par la carte réseau physique du PC d'adresse "réseau interne Virtual Box" 10.0.2.2 comme le montre la table de routage de la VM.

diapo 9 La machine virtuelle 2

(CLIC) Le dossier d'une machine virtuelle, ici une VM windows, contient 2 dossiers et 2 fichiers importants : * En plus du dossier log contenant les journaux, le dossier snapshot contient des instantanés de la machine, points de restauration possibles en cas de défaut ou d'infection de la VM. * un fichier vbox, fichier de configuration écrit en xml (CLIC) * et un fichier vdi contenant le système de fichier de la machine virtuelle.

diapo 10 La machine virtuelle 3 La diapositive présente ici VirtualBox ouvert sur un PC portable équipé d'un système d'exploitation linux avec KVM et d'un processeur 8 coeurs Intel avec technologie VT-x. Les deux machines virtuelles présentées avant sont ici exécutées en même temps, ce qui permet d'avoir une VM linux et une VM Windows fonctionnant en parallèle et complètement isolées. Chaque machine est configurée pour utiliser un processeur et 4 Go de mémoire au maximum. La machine windows utilise ici 100 % de ses ressources CPU et ne peut prendre sur le processeur virtuel alloué à la machine Linux.

diapo 11 La machine virtuelle 4 En comparant la description du processeur réel et du processeur virtuel, on constate que ce dernier utilise la même architecture x86_amd64, limitée à un coeur et à un quart de la mémoire cache maximum. Sur une tache de calcul intensif, on mesure des performances deux fois moins importante sur la machine virtuelle que sur le système hôte.

(CLIC) On remarque aussi, sur cet exemple où seule la machine virtuelle calcule, que KVM change le processeur allouée à la machine virtuelle lorsque celui chauffe trop.

diapo 12 Conteneurisation La virtualisation avec OS hôte ou hyperviseur crée une machine complète, avec son OS et ses drivers, pour souvent une seule application, avec les dépendances dont elle a besoin. Beaucoup de services sont reproduits et inutiles, à moins de créer une installation personnalisée et minimaliste de l'OS, ce qui est complexe et fastidieux.

Les processus étant isolés comme on l'a vu dans le chapitre associé, il est possible de créer, directement sur l'OS hôte, des environnements isolés contenant l'application et les bibliothèques et paquets dont elle dépend. (CLIC) (CLIC) Cette solution est nommée conteneur et a pris un nouvel élan avec l'apparition du système de conteneur Docker en 2013. Le conteneur est plus petit et plus rapide à déployer et à lancer qu'une machine virtuelle. Il est en contrepartie dépendant de l'OS sur lequel il s'exécute.

Les conteneurs apportent donc légèreté et portabilité. L'isolation entre les conteneurs n'est pas aussi bonne qu'entre des machines virtuelles. Sur le cloud, un client peut louer une machine virtuelle et utiliser les conteneurs pour lancer plusieurs petits services, chacun dans son conteneur, pour ainsi économiser des ressources. Pour le calcul scientifique gourmand en ressource CPU et GPU, comme pour le développement de services utilisés par un grand nombre d'utilisateurs, une solution adoptée est de préparer et tester sur sa machine un conteneur avec l'application et ses dépendances (CLIC) et d'envoyer ensuite le conteneur sur un serveur pour exécuter l'application (CLIC) (CLIC).

Les acteurs de l'IaaS proposent également l'hébergement de conteneurs sur des serveurs dédiés, nommé PaaS Platform As A Service. Le logiciel de gestion des conteneurs, comme un hyperviseur pour des VM, supervise alors le déploiement et l'exécution des conteneurs, les redondances éventuelles, l'allocation de ressources et les déplacements éventuels d'un serveur physique à un autre, ainsi que les communications réseaux entre les conteneurs et avec l'extérieur. (CLIC) Le plus populaire des logiciels de gestion de conteneurs est le logiciel open source Kubernetes.

diapo 13 Conteneurisation 2

Dans le domaine des conteneurs, Docker est très utilisé sur les petits serveurs ou les PC et Kubernetes propose des fonctionnalités avancées de management de conteneurs pour de gros serveurs. Ces logiciels permettent la création et la gestion des conteneurs.

(CLIC) * L'intérêt principal des conteneurs, comme les machines virtuelles, est la portabilité et l'agilité associée puisqu'il est simple de lancer plusieurs instances du même conteneur. * L'isolation entre les conteneurs garantit la sécurité. * Le conteneur est moins lourd qu'une machine virtuelle, un ordre de grandeur est 10 fois moins qu'une VM pour un service comme l'hébergement d'une base de données ou d'un site web. Le déploiement, le lancement et l'envoi des conteneurs sont donc plus rapide. * L'exécution d'une application dans un conteneur est plus performante que la même dans une machine virtuelle. (CLIC) En contrepartie, le conteneur utilise une partie des ressources de l'OS et en est partiellement dépendant. Sur une machine d'OS hôte Windows, les conteneurs devront être basés sur un OS windows de même version ou plus ancienne et sur une machine Linux, les conteneurs accueillis reposeront également sur Linux. L'isolation entre les conteneurs est moindre que l'isolation entre des machines virtuelles. (CLIC) Avec ses caractéristiques, les conteneurs sont utilisés pour partager des applications devenues ainsi très portables. L'installation pour l'utilisateur se résume à charger le conteneur. Les conteneurs permettent notamment le développement de l'application sur un PC puis son déploiement sur des serveurs cloud ou sur des calculateurs.

diapo 14 Conteneurisation 3 Comme illustration, nous présenterons ici le chargement d'un conteneur Apache qui permet en 5 minutes de disposer d'un serveur web performant sur une machine. (CLIC) Dans un premier temps, si ce n'est déjà fait, on installe et on lance le démon Docker sur une machine linux. (CLIC) Depuis DockerHub, dépôt en ligne de conteneurs docker, on charge un conteneur tout prêt avec le serveur web appache. (CLIC) On crée le dossier pour les pages web et le fichier index.html (CLIC) On construit l'image du serveur web à partir de ces dossiers (CLIC) On lance l'exécution du conteneur par le démon Docker. Docker indique que l'image my-apache2 est en fonctionnement, dans un conteneur numéroté. (CLIC) On peut alors vérifier le bon fonctionnement du site web. Le commande ps montre que le conteneur utilise un processus, comme toute autre application. On y voit également que le conteneur, isolé, peut communiquer par une adresse IP privée, relayée par le PC hôte. (CLIC) Le serveur web est également disponible à l'adresse privée du conteneur.

Bibliographie

https://www.ibm.com/cloud/learn/virtualization-a-complete-guide Live Migration of User Environments Across Wide Area Networks, Cristian Zamfir, https://www.researchgate.net/publication/33053954_Live_migration_of_user_environments_across_wide_area_networks