Systèmes et programmation C

Cette page présente le cours de SYS1 tel qu’enseigné en 2025-2026 à l’ENS Rennes. Les informations seront ajoutées au cours du semestre. Le cours est donné par Martin Quinson, tandis Mathieu Laurent et Pablo Leboulanger s’occupent des sessions pratiques. Vous pouvez nous joindre par email à prenom.nom@irisa.fr, ou par Discord.

Navigation rapide :
Prérequis et objectifsPolysS1: Machine et OSS2: C et fichiersS3: Mémoire statiqueS4: Mémoire dynamiqueS5: Maîtrise du CS6: Communiquer en réseauS7: InternetS8: Couche applicativeS9: Couche TransportS10: Couche RoutageTP supplémentairesExamensAnnée 21-22, 23-24, 24-25.

Prérequis et objectifs

Les prérequis du module sont une bonne maîtrise de la programmation dans un langage de programmation, quel qu’il soit. Les bases de l’algorithmique sont aussi supposées connues. Un ordinateur sous unix est nécessaire (voir plus bas), mais nous apprendrons ensemble à l’utiliser.

Ce cours est conçu pour donner aux élèves issus d’une classe préparatoire en MP ou MPI une bonne maîtrise du langage C, et une bonne compréhension des réseaux informatiques (pile OSI et pile TCP/IP). Il constitue de plus une première introduction rapide à l’assembleur et aux concepts et défis clés des systèmes d’exploitation. Pour garder un souvenir plus durable de la visite, on parlera finalement plus de concepts que de technologies, même si la pratique tient une place importante dans ce module. Après avoir suivi ce cours, vous saurez :

Pour faire les travaux pratiques, il est bien préférable d’avoir un ordinateur fonctionnel sous Linux (ou Mac si vraiment nécessaire). Si vous n’avez qu’un Windows, trouvez un ami pour vous aider à installer un système Manjaro, ou un système Debian avec l’environnement MATE. Si vous êtes coincés, installez le Windows Subsystem Linux (WSL2) avec une Debian dedans si possible. Si vous avez un Mac, vous n’êtes pas complétement tirés d’affaire, car le TP debug utilise des outils (valgrind et gdb) qui marchent très mal sous Mac (ces outils semblent fonctionner avec WSL2). Mauvaise nouvelle : je ne sais pas faire des programmes non triviaux en C sans ces outils. Vous risquez de trouver un plafond de verre assez cruel si vous insistez pour utiliser Mac dans ce module. Désolé.

Polycopiés du cours

En vérité, les documents de cours ne forme pas exactement un polycopié. Il s’agit plutôt de mes notes de cours : c’est ce que j’utilise en séance pour structurer mon discours et ne rien oublier. Je n’utilise pas forcément toutes les sections à l’oral (en fonction du temps disponible), et je change parfois l’ordre des parties en live (en fonction de mon inspiration et des retours de l’assistance).

Cela fait que le texte est concis, car j’ai besoin de pouvoir m’y repérer en live pendant que je parle en cours. S’il y a trop de lettres, je risque de m’y perdre. Il sera donc rapide à relire pour vous aussi, si vous savez de quoi il retourne. Vous y trouverez même des complément que je n’ai pas dit en classe. En revanche, ce document n’est pas suffisamment rédigé pour être auto-suffisant et vous permettre de tout comprendre sans venir en cours.

Merci de m’indiquer toute amélioration possible : typo, inexactitude, imprécision, etc. Si j’avais énormément de temps, je ne rendrais pas ce texte beaucoup plus long. Je rédigerai simplement les phrases en entier sans omettre autant de mots, et j’ajouterais des liens vers les pages Wikipédia détaillant les différents points.

Séances

Semaine 1 : Des machines et des OS

Après un très rapide résumé de quelques thématiques de recherche intéressantes en systèmes, nous nous attacherons à bien comprendre le principe fondamental d’ordinateur comme machine programmable (c-à-d, ce qui fait qu’un ordinateur n’est pas un calculateur), et son contenu habituel. Nous n’allons pas ouvrir physiquement un ordinateur, mais nous présenterons les différents composants (CPU, mémoire, disque, caches, bus, etc) et leurs fonctions. Nous présenterons ensuite le principe général d’un système d’exploitation. Nous n’avons malheureusement pas le temps de présenter les OS en détail dans ce module, mais on y revient l’an prochain.

Semaine 2 : OS et C en pratique

Cette semaine, nous finirons notre tour des systèmes d’exploitation en explorant Unix, avant d’approfondir notre connaissance du langage C en regardant comment manipuler des fichiers. Nous n’irons pas plus loin dans notre étude des interactions entre le système d’exploitation et le langage C ce semestre, pour nous concentrer sur le langage C les semaines suivantes.

Semaine 3 : Mémoire statique en C

Maintenant que nous avons fait le tour de la syntaxe du C, nous pouvons rentrer dans le vif du sujet : la mémoire en C. Nous parlerons d’abord de portée des identifiants et du mot-clé static. Nous présenterons ensuite la pile d’appel et le layout mémoire d’un processus, avant de détailler les notions d’adresse mémoire et de pointeur.

Semaine 4 : Mémoire dynamique et bugs

Cette semaine marquera la fin notre exploration de la mémoire en C. Nous parlerons de transtypage, de pointeur générique (void*) et d’arithmétique des pointeurs avant de jouer au jeu des sept différences entre les tableaux et les pointeurs. Nous terminerons par la cerise sur le gâteau de la mémoire en C : la fonction malloc. Enfin ! Avec tous les beaux bugs qu’on va pouvoir faire avec tout ça, on aura bien besoin d’un TP pour découvrir différents outils de debug.

Semaine 5 : Maîtrise du langage C

Cette semaine, on termine toutes les notions que nous n’avons pas vues en C, et on étudie comment programmer proprement en C..

Semaine 6 : Communiquer en réseau

À partir de cette semaine, nous explorerons le réseau et les systèmes. Il s’agit tout d’abord de savoir faire communiquer des programmes entre eux, en ouvrant des sockets.

Semaine 7: Internet

Cette semaine, nous explorons les aspects nécessaires et contingents d’un réseau informatique à l’échelle mondiale. Après l’introduction sur ce à quoi pourrait ressembler un réseau mondial en toute généralité, étudions un peu l’Internet tel qu’il existe. J’aimerais vous montrer que la stucture d’Internet est une belle construction. Il faut juste voir plus loin que tous ces trigrammes. Maintenant que le projet de hérissons est fini, la séance de TP sera dédiée à écrire de petits programmes C interagissant par le reseau.

Semaine 8: Couche applicative

Cette semaine, nous allons étudier quelques façons classiques d’organiser le dialogue entre les ordinateurs: Client/serveur, pair-à-pair. Nous disequerons ensuite quelques protocoles classiques (mail, http) avant de dire un mot du DNS si le temps le permet.

Semaine 9: Couche transport

C’est maintenant la fête des trigrammes. Il faut dire que la couche transport regorge de ces sigles en 3 lettres. Nous tâcherons de voir à la fois l’intérêt pratique et la beauté algorithmique de TCP malgré tous ces détails techniques. Cela nous prendra deux séances de cours, suivies d’une seule séance de TD.

Semaine 10: Couche routage

Et pour finir cette rapide découverte d’Internet, voici son protocole phare : IP. Nous parlerons adressage, forwarding et … routage.

Pour aller plus loin: notes de lecture https://blog.acolyer.org/2015/01/22/the-design-philosophy-of-the-darpa-internet-protocols/ de l’article /The Design Philosophy of the DARPA Internet Protocols/ de D. Clarke datant de 1988. La note de lecture est écrite par A. Colyer.

TP supplémentaires

Les TP suivants ne sont diffusés ici que pour référence. Ils ne font pas partie du module de l’ENS, même s’ils parlent des mêmes sujets. Ils sont surtout là pour d’éventuels visiteurs extérieurs et autres curieux. Après tout, la meilleure façon d’apprendre à programmer, c’est de programmer alors faites-vous plaisir. Ca sert à rien mais certains sont marrants (j’espère).

Anciens examens

Chaque année, le seul document autorisé pendant l’examen est un recto A4 écrit de votre main. Vous pouvez écrire tout ce que vous voulez sur cette feuille (et vous pouvez écrire de la taille que vous voulez). Le premier avantage est que préparer cette feuille est une bonne méthode pour comprendre et apprendre ce qui est important dans le cours. De plus, cela fait que l’examen est plus porté sur la réflexion que sur la mémorisation.

Autres cours

Ce module fait partie d’un ensemble relativement cohérent d’enseignements à l’ENS Rennes :


Merci de signaler toute erreur sur framagit (vous devez être authentifié sur framagit pour cela).
Les collègues enseignants peuvent demander un accès “Guest” au projet, pour accéder aux sources (qui sont masqués surtout pour cacher les examens avant le jour J).