Programmation système
Cette page donne quelques ressources pour le module de programmation système de l’ENS Rennes. Si vous avez des questions, n’hésitez pas à faire un mail à Martin Quinson.
L’objectif de ce module est de présenter les grandes lignes d’un système d’exploitation (OS). L’angle choisi est d’insister sur la programmation système, c’est-à-dire la façon de tirer le meilleur parti de l’OS dans ses programmes, mais sans entrer dans la façon dont les OS sont écrits.
Nous verrons les concepts clés d’un système d’exploitation (processus, fichier, édition de liens, synchronisation), en insistant beaucoup sur la pratique. Le cours vient avec beaucoup de TP et de projets pour vous permettre de vous entraîner.
Les prérequis du module sont:
- Pratique de la ligne de commande sous Linux. Au besoin, vous devez finir cette leçon sur katacoda pour être plus à l’aise avec la ligne de commande.
- Pratique du C. Au besoin, référez vous à la première moitié de mon module d’ArcSys, ou au cours de C que je donnais dans le passé.
- Un peu d’algorithmique, mais rien de bien particulier.
Pour faire les travaux pratiques, il est bien préférable d’avoir un ordinateur fonctionnel sous Linux (ou Mac si nécessaire). Si vous n’avez qu’un Windows, trouvez un ami pour vous aider à installer Xubuntu. Si vous êtes coincés, installez le Windows Subsystem Linux (WSL2).
Quelques ressources utiles
On trouve énormément de choses sur internet au sujet des systèmes d’exploitation. Voici une petite sélection de ressources intéressantes portant sur la programmation système.
- System Programming Le poly d’un très bon cours de l’université d’Illinois. Il y a aussi des exercices pratiques que l’on peut faire dans son navigateur. C’est vraiment très bien fait.
- Computer Systems: A Programmer’s Perspective. Un très bon livre de cours disponible à la bibliothèque. C’est là que j’ai appris :) Le site web propose quelques ressources supplémentaires.
- Operating Systems: Three Easy Pieces. Un livre de cours libre, disponible en intégralité sur internet, et très bien fait. Attention, il couvre pas seulement la programmation système, mais aussi la façon dont les systèmes d’exploitation fonctionnent, dedans. C’est un peu hors-programme pour mon module de cours.
- Programmation des systèmes (Philippe Marquet, Lille).
- Introduction aux Systèmes et aux Réseaux (Sacha Krakowiak, Grenoble).
- Programmation système et réseau sous Unix (Michel Billaud, Bordeaux).
- System Programming (Scott A. Brandt, University of California, Santa Cruz)
Semaine 1: Processus
L’objectif de cette semaine est d’expliquer les liens entre processus, programme et processeur. Nous verrons comment naissent et meurent les processeurs, et nous verrons un premier moyen pour les faire communiquer : les signaux.
- Slides du CM 1 Introduction et processus.
- Sujet du TDP 1 Processus: fork, exec et signaux (source fourni).
- TD mémoire statique d’ArcSys
- Projet Boggle d’ArcSys
Semaine 2: Fichiers et entrées/sorties
- Slides du CM 2 Fichiers et entrées/sorties
- Sujet du TDP 2 Entrées/sorties (source fourni).
- Mini projet 2 TestSuite (source fourni).
Semaine 3: Compilation de programmes binaires
- Slides du CM 3
- Mini projet 1 SimpleMake (source fourni).
Semaine 4: Synchronisation
Cette semaine, c’est théorie. Après tous les problèmes techniques des semaines passées, il est temps d’en venir aux problèmes durs, où la technologie a besoin d’un peu de maths. Au programme : compétition, interblocage et autres joyeusetés.
- Slides du CM 4 Synchronisation
- Sujet du TD 4 Synchronisation
- (pas de projet ni de partie pratique dans le TD)
Semaine 5: Programmation multi-threads
Après la théorie, c’est la pratique. Cette semaine, on va voir comment programmer en pratique en multi-threads.
- Slides du CM 5 Multi-threads
- TDP 5 Programmation avec les threads POSIX (source fourni).
- Un cours sur les threads en Java, par le Dr Debasis Samanta, de l’IIT Kharagpur, Inde. Un autre cours par Guy Tremblay de l’UQAM, Canada.
- Un TP de programmation multi-threads: le casse-brique, par Laurent Viennot pour l’école polytechnique.
Autres cours
Ce module fait partie d’un ensemble relativement cohérent d’enseignements à l’ENS Rennes:
- SYS1: Programmation C, réseau et introduction aux systèmes informatiques (L3S1).
- GL: Programmation C++ et génie logiciel (L3S2).
- ProgSys: Programmation système: forks, I/O, synchronisations et threads.
- HPC: Programmation haute performance: pratique de MPI (M1S1).
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 et corrigés
(qui sont masqués surtout pour cacher les examens avant le jour J).