Systèmes et programmation C

Cette page présente le cours de SYS1 tel qu’enseigné en 2022-2023 à l’ENS Rennes. Les informations seront ajoutées au cours du semestre. Le cours de C est donné par Martin Quinson, tandis que Guillaume Didier donne le cours de réseau. Nicolas Bailluet et Mathieu Laurent s’occupent des sessions pratiques sur tout le semestre. 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 CS7: Introduction RéseauxS8: Exemples d’applicationsS9: Protocoles de TransportS10: Protocoles de Transport (suite) et Plan de DonnéesS11: Couche Réseau, Plan de Donnée et Plan de Transport S12: Plan de Contrôle et Couches Lien et Physique TP supplémentairesExamensAnnée 21-22.

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. Savoir utiliser les commandes de bases dans un shell sera également utile (ces exercices à faire seuls permettent d’apprendre).

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 Debian avec l’environnement MATE. Si vous êtes coincés, installez le Windows Subsystem Linux (WSL2). 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 sont pas exactement des polycopiés. 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 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. 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

Nous couvrirons le chapitre 1 et la moitié du chapitre 2 cette semaine. 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 les notes de cours donnent quelques pistes supplémentaires.

Semaine 2 : Fichiers en C, et système d’exploitation.

Cette semaine, nous couvrirons la fin du chapitre 2 et le chapitre 3. Après avoir fini notre tour des systèmes d’exploitation en explorant Unix, nous approfondirons notre connaissance du langage C en regardant comment manipuler des fichiers.

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 (chapitre 4). 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. En couvrant la fin du chapitre 4, 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.

Semaines 5 et 6 : 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. On prend ensuite une semaine sans cours pour faire des TP et s’entraîner un peu.

Semaine 7 : Introduction aux réseaux

À partir de cette semaine, vous explorerez le réseau avec Guillaume Didier. Nous n’aurons plus cours ensemble du semestre.

Vous pouvez consulter le syllabus du cours : Syllabus, qui résume les objectifs, le programme, le planning et les règles de cette partie du cours.

Pour cette semaine les slides au format PDF, keynote (Apple) et un rendu vidéo avec les animations 1080p 720p SD

Le sujet du projet est disponible ici : TP6 Applications Réseaux, il est à effectuer en binôme. La date de rendu est les Samedi 18/11/2023 - 20h. (Un rendu en retard est pénalisé de 10% par jour, et n’est pas accepté 48h après la deadline. Vous disposez pour le semestre d’un joker (jour de grace) pour éviter une pénalité de 10%)

Les fichiers supports suivants sont disponible: csapp.c csapp.h codes-R1.c

Semaine 8 : Protocoles Applicatifs

Pour cette semaine les slides au format PDF, keynote (Apple) et un rendu vidéo avec les animations 1080p 720p SD

Semaine 9 : Protocoles de Transport

Attention cette séance est décalée au vendredi 17/11, à Beaulieu, cf ADE.

Pour cette semaine les slides au format PDF, keynote (Apple) et un rendu vidéo avec les animations 1080p 720p SD

Semaine 10 : Protocoles de Transport (suite) et Plan de Données

Pour cette semaine les slides au format PDF, keynote (Apple) et un rendu vidéo avec les animations 1080p 720p SD

Le Projet / TP6 est à rendre Samedi 24 à 20h. Pour rappel, il est à faire en binôme. Pour le rendu, soit archives tar.gz par mail, soit ajoutez les 3 membres de l’équipe à votre dépot git privé, et envoyez un mail avec le hash identifiant le commit git du rendu. Voir le syllabus pour les modalité de rendu en retard.

Le sujet du TP7 à faire en monôme (seul) est disponible, vous disposerez de deux séance de TP faire celui-ci (cette semaine étant encore prévu pour le projet). TP7 Transport Sources

Semaine 11 : Couche Réseau, Plan de Donnée et Plan de Transport

Pour cette semaine les slides au format PDF, keynote (Apple) et un rendu vidéo avec les animations 1080p 720p SD

Semaine 12 : Plan de Contrôle et Couches Lien et Physique

Pour cette semaine les slides au format PDF, keynote (Apple) et un rendu vidéo avec les animations 1080p 720p SD

Le sujet du TD/TP sur le routage est TD8 Transport

Semaine 13 : Révisions

Pas de slides cette semaine, tableaux et craies.

Le sujet du TD de révisions est TD9 Révisions. Vous pouvez aussi utiliser les questions suivantes pour réviser votre cours Questions.

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.

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).