I) Le but d'un OS - Vision simplifiée d'un ordinateur: processeur, mémoire, périphériques. Le processeur n'est qu'une bête machine exécutant séquentiellement des instructions présentes dans la mémoire, et manipulant des données présentes dans la mémoire. - Ce que l'utilisateur veut: des processus, qui s'exécute comme si ils disposaient chacun d'un ordinateur complet à disposition. Temps processeur, mémoire, stockage de masse, etc. => Le rôle du noyau est de virtualiser/partager les ressources matérielles, et de mettre à disposition des applications utilisateur différents services Dans les Unix traditionnels (dont Linux), ce rôle de partage des ressources incombe en totalité au noyau: système monolithique. II) Partager la mémoire - Gestion physique de la mémoire - Mécanismes proposés par le processeur pour "virtualiser" la mémoire. Description du fonctionnement bas-niveau de la pagination sur x86. Définition des notions d'adresse virtuelle / adresse physique, de traduction d'adresse et d'espace d'adressage. - Qu'est-ce qu'on peut faire avec ces mécanismes : demand-paging, copy-on-write, swap. - Comment ça marche dans les OS Unix traditionnels: notions de VMA, fonctionnement de mmap() (projection de fichiers et projections anonymes), fonctionnement de fork() et exec(). III) Partager le processeur - Notion de thread et de processus, à recouper avec la notion d'espace d'adressage vue précédemment - Notion de contexte et de changement de contexte, en parlant notamment de la pile (pile noyau / pile utilisateur, de niveau de privilège, et d'appels systèmes. - Changement de contexte: passage d'un thread à un autre - Déclenchement du changement de contexte: multitâche coopératif vs. multitâche préemptif. Préemption noyau / préemption utilisateur, changement de contexte sur bloquage. - Ordonnancement: ça veut dire quoi temps-réel ? ça veut dire quoi un "scheduler O(1)" ? Comment sont ordonnancés les processus dans Linux ? - Préemption => problématique de synchronisation. Présentation de ce qu'est un deadlock et ce qu'est une race condition. Description des spinlocks et mutexes pour le code noyau. IV) Partager les périphériques - Pilote de périphérique, quel rôle a-t-il ? - Comment interagir avec le matériel ? Ports d'I/O, DMA, interruptions, bus, etc. - Types de périphériques: bloc et caractère. - Infrastructure de gestion des périphériques blocs: page cache, ordonnanceur d'entrées-sorties V) Fichiers - Ce qu'est un système de fichiers ? Comment fonctionnent-ils ? - Ce qu'est le VFS et comment il fonctionne.