#Systèmes d’exploitation
Un OS est le chef d’orchestre entre vos programmes et le matériel. Il découpe le temps CPU, donne l’illusion d’une grande mémoire continue, fait parler les applications entre elles et met les données en lieu sûr. Dans ce cours, on n’empile pas des acronymes: on explique ce qui se passe quand votre code “lit un fichier” ou “crée un thread”.
Contexte pédagogique: niveau L3 (Valrose — UCA). Les objectifs sont d’asseoir des notions de planification, mémoire virtuelle, systèmes de fichiers et synchronisation pour raisonner sur les performances et la sûreté d’exécution.
#Ce que l’OS vous offre (et vous cache)
Plutôt que de manipuler des registres de disque ou des cartes réseau, vous manipulez des abstractions: processus, fichiers, sockets. L’OS isole les programmes les uns des autres (un bug ne corrompt pas tous les autres) tout en permettant un partage contrôlé (IPC, permissions). Il arbitre l’accès au CPU, à la mémoire et aux périphériques pour concilier équité et performance.
#Planifier le CPU sans léser personne
Si plusieurs tâches veulent le CPU, qui passe en premier ? Des politiques simples (FCFS, Round‑Robin) minimisent la faim; des approches plus “informer” (priorités, multilevel feedback queues) favorisent l’interactivité. Comprendre ces choix aide à expliquer pourquoi un job batch ralentit quand la machine est sous charge.
#Mémoire: une grande illusion utile
La mémoire virtuelle découpe l’espace en pages et donne à chaque processus l’impression d’être seul. Une table de pages traduit “adresse virtuelle → adresse physique”, le TLB met en cache ces traductions, et des astuces comme le copy‑on‑write évitent de copier tant qu’on ne modifie pas. Quand la pression monte, le système pagine et ça se ressent: latences et bruits de disque.
#Fichiers: structure et durabilité
Un “fichier” est une entrée dans un système de fichiers: des inodes décrivent les métadonnées, des blocs stockent les données. Les systèmes modernes journalisent pour retrouver un état cohérent après crash. Les caches (page cache, dentry cache) masquent la lenteur des disques. Savoir quand forcer une synchronisation (fsync) est crucial pour la durabilité.
#Communiquer et se synchroniser
Les pipes et sockets transportent des octets; les mutex, sémaphores et variables de condition coordonnent l’accès à des ressources partagées. La difficulté n’est pas l’API mais la conception: éviter interblocages (deadlocks) et famines. Poser l’invariant, choisir le bon ordre de prise de verrous et limiter les sections critiques rendent le code robuste.
#Mini‑atelier
Écrivez un programme qui produit un gros fichier puis le lit en petits blocs; observez l’effet des caches (première lecture vs relecture). Créez deux threads qui incrémentent un compteur partagé: reproduisez puis corrigez une condition de course avec un mutex. Ces expériences ancrent les concepts mieux que des définitions.