Informations générales
Volumes horaires
- CM 18.0
- Projet 0
- TD 0
- Stage 0
- TP 6.0
Crédits ECTSCrédits ECTS
1.5
Objectif(s)
Ce cours vise à fournir des connaissances approfondies sur les techniques d'isolation et de virtualisation utilisées dans les systèmes d'exploitation modernes afin de prendre en charge les propriétés clés (par exemple, la sécurité, la compatibilité/portabilité, la consolidation, l'adaptabilité) des infrastructures logicielles distribuées utilisées dans de nombreux contextes, tels que le cloud computing (et ses variantes comme l'Edge computing et le Fog computing), l'IoT (Internet des objets) et les objets intelligents et applications mobiles.
Les principales parties du cours sont axées sur deux thèmes principaux : la virtualisation au niveau du système (c'est-à-dire les hyperviseurs et les machines virtuelles) et les conteneurs. L'objectif principal du cours n'est pas d'apprendre à utiliser les outils existants (par exemple, comment installer/utiliser un hyperviseur ou un moteur de conteneur), mais plutôt de comprendre en profondeur le fonctionnement de ces briques technologiques (leurs rôles, leurs interfaces, leur conception interne et leurs aspects de mise en œuvre), à travers l'étude des systèmes logiciels et des plateformes matérielles existants.
Ce cours s'adresse aux étudiants intéressés par les aspects techniques et/ou la recherche dans les domaines suivants : systèmes d'exploitation, cybersécurité, systèmes et applications distribués, cloud computing, réseaux, systèmes et applications parallèles, génie logiciel, systèmes embarqués, interface matériel-logiciel.
Les carrières et postes professionnels liés à ce cours comprennent notamment : architecte système/cloud, architecte cybersécurité, ingénieur DevOps/SRE (et variantes telles que DevSecOps, MLOps), ingénieur logiciel.
Contact Alain TCHANA, Simon FERNANDEZ, Olivier AYCARDContenu(s)
Le cours est structuré en trois parties principales (dont une introduction récapitulant les prérequis) et un chapitre supplémentaire consacré à des thèmes plus généraux.
Introduction :
L'interface matériel-logiciel
L'interface binaire des applications du système d'exploitation
Les architectures de noyau monolithique (étude de cas : Linux)
Concepts clés et objectifs généraux : virtualisation, isolation, gestion des ressources, sécurité, sûreté
Virtualisation au niveau du système :
Principes de base de la virtualisation des processeurs, de la mémoire et des E/S
Techniques au niveau logiciel
Prise en charge matérielle de la virtualisation
Paravirtualisation
Architectures d'hyperviseurs
Aperçu des thèmes avancés : virtualisation imbriquée, migration à chaud
Conteneurs OS :
Principes de base et anatomie des conteneurs au niveau du système d'exploitation
Virtualisation ABI du système d'exploitation (par exemple, zones/jails, espaces de noms, capacités, filtrage des appels système)
Images et stockage des conteneurs
Contrôle des ressources (par exemple, cgroups Linux)
Runtimes des conteneurs : couches de bas niveau et de haut niveau
Outils pour conteneurs : déconstruction d'outils polyvalents de haut niveau (par exemple, Docker, Podman)
Sujets supplémentaires sélectionnés :
Si le temps le permet, le cours fournira également un aperçu d'un ou plusieurs sujets supplémentaires. Certains de ces sujets pourront également être étudiés dans le cadre de devoirs/projets. La liste comprend des sujets tels que :
Gestion du réseau et du stockage pour les conteneurs et les machines virtuelles
Conception de systèmes d'exploitation et d'hyperviseurs basés sur des micro-noyaux pour la modularité et la réduction de la base de calcul fiable (TCB)
Prise en charge logicielle des plugins de code sécurisés dans les noyaux (par exemple, eBPF)
Nouveau matériel
Prérequis
- Cours d'introduction (niveau M1) sur les principes/la conception des systèmes d'exploitation (OS) (par exemple, ce cours : https://m1-mosig-os.gitlab.io)
- [Facultatif] Notions élémentaires d'architecture informatique (interface matériel-logiciel) et de programmation en langage assembleur