Ceci est la page du module ArcSys de l'ENS Rennes. En 2018, je suis chargé du cours tandis que les sessions pratiques sont assurées par Rémi Hutin et Simon Rokicku.

Objectif du cours

Donner un premier aperçu du domaine des systèmes d'exploitations et les réseaux. On visitera différents systèmes existants (Unix, Internet) en insistant sur les motivations qui ont poussé les concepteurs à concevoir les choses ainsi. Pour garder un souvenir plus durable de la visite, on parlera finalement plus de concepts que de technologies. J'espère que cela vous permettra de découvrir les concepts et défis clés des systèmes d'exploitation (performance, compatibilité, composabilité).

En pratique, après avoir suivi ce cours, vous saurez:

  • Écrire et debugger des petits programmes en C, avec tous les éléments principaux du langage (y compris les sockets);
  • Survivre au terminal UNIX et y utiliser les 5 ou 6 commandes de base.
  • Vous connaîtrez le modèle en 4 couches d'Internet, avec une bonne compréhension générale du fonctionnement des principaux algorithmes et protocoles des couches 2, 3, 4 (la couche physique ne sera pas abordée).

Syllabus du cours

Bibliographie pour la partie C

Il y a énormément de matériel sur le C et UNIX en ligne. Le plus difficile est de trouver une ressource qui vous convient. La liste suivante est volontairement courte, pour vous permettre d'aller droit au but.

  • Apprendre en C sur OpenClassroom. Particulièrement intéressant pour les débutants.
  • Modern C, par Jens Gustedt. Particulièrement intéressant pour les confirmés.
  • Programmation C sur wikibook en français. Une bonne introduction, peut-être un peu rapide.
  • C programming sur wikibook en anglais. Une introduction mieux détaillée.

Voici quelques liens supplémentaires, pas indispensables mais intéressants malgré tout:

  • Clean code. Présentation amusante sur pourquoi et comment programmer proprement.
  • [[Wat|https://www.destroyallsoftware.com/talks/wat], une présentation sarcastique et hors sujet sur les horreurs du javascript. Juste pour rire.

Bibliographie pour la partie réseau

Mon approche pour enseigner la partie réseau est directement inspirée du livre de Jim Kurose (dans toutes les bonnes bibliothèques), centrée sur les concepts (qui restent) plus que sur les technologies (qui passent et lassent), et suivant une approche top-down voire problem solving. J'insiste également volontiers sur les algorithmes distribués mis en jeu, même si le temps manque dans ce module pour les détails.

La plupart des ressources disponibles en ligne sont plutôt bottom-up, où l'on regarde ce qu'on peut faire avec les outils qu'on comprend déjà. Je n'aime pas cette approche car on ne comprend qu'à posteriori pourquoi chaque bout est tel qu'il est. Pourtant, la plupart des choix de design que les architectes d'internet ont fait étaient motivés par un besoin dans une couche supérieure.

Méfiez-vous surtout des ressources trop techniques (qui se limitent souvent à des catalogues de technos n'abordant jamais le pourquoi), voire technologiques (qui peuvent tout au plus vous apprendre à configurer votre réseau à la main). Voici quelques saines lectures pour compléter le cours:

  • Le livre de Kurose, bien sûr. Mais il n'est pas disponible en ligne.
  • Computer Networks, cours de l'université de Brown enseigné par Rodrigo Fonseca. Les transparents associés aux cours sont très bien. L'approche est bottom-up alors je vous conseille de lire les chapitres à l'envers pour bien comprendre. Mais ils ont un très bon niveau de détail et d'abstraction. Les projets proposés sont également très bien, mais trop chronophages au vu du volume horaire attribué au module.
  • Computer Networking un livre disponible sous licence libre. Il est de bonne facture, même s'il est lui aussi bottom-up.