R3.05 Programmation Système¶
Déroulé des séances¶
- Séance 1 :
Présentation : Introduction à la programmation système
Présentation : Bases de C (1re partie des diapos)
Préparation de l’environnement de travail : Consignes
Exercices : Partie 1 - Bases de C
- Séance 2 :
Présentation : Bases de C (2e partie des diapos)
Exercices : Partie 1 - Bases de C
- Séance 3 :
Présentation : Fichiers
Exercices : Partie 2 - Fichiers
- Séance 4 :
Présentation : Mémoire
Exercices : Partie 3 - Mémoire
- Séance 5 :
Présentation : Processus (jusqu’à « Communication inter-processus »)
Exercices : Partie 4 - Processus
- Séance 6 :
Présentation : Processus (à partir de « Communication inter-processus »)
Exercices : Partie 4 - Processus
- Séance 7 :
Présentation : Threads
Exercices : Partie 5 - Threads
- Séance 8 :
Exercices : Partie 5 - Threads
- Séance 9 :
Présentation : Sockets
Exercices : Partie 6 - Sockets
- Séance 10 :
Exercices : Partie 6 - Sockets
Contrôle
Descriptif détaillé du programme national¶
Objectif
L’objectif de cette ressource est de comprendre la structure d’une application client-serveur et de comprendre les mécanismes de bas niveau, mis en œuvre dans une application multitâche. Cette ressource permettra de découvrir le développement d’applications multi-processus, de comprendre et de traiter les problèmes de synchronisation et d’utiliser des outils de communication internes aux processus, mais aussi externes, via les interfaces de programmation (API) de transport.
Savoirs de référence étudiés
Fonctionnement du système (par ex. : pagination, mémoire virtuelle, systèmes de fichiers…)
Gestion de processus (par ex. : ordonnancement, synchronisation, threads…)
Programmation client-serveur (par ex. : inter-process communication (IPC), interface socket, protocoles applicatifs…)
Les différents savoirs de référence pourront être approfondis
Cours
- Partie 0 - Introduction
- Partie 1 - Bases de C
- Qu’est-ce que le C ?
- Hello World!
- Les variables
- Les octets
- Entrées-sorties
- Les opérateurs
- Contrôle du flux
- Les boucles
- Les fonctions
- Les tableaux
- Les chaînes de caractères
- Les pointeurs
- Les structures
- Gestion mémoire / Allocation dynamique
- Durée de vie et portée des variables
- Préprocesseur
- Gestion des erreurs
- Aléatoire
- Autres mots-clés
- Partie 2 - Fichiers
- Partie 3 - Mémoire
- Partie 4 - Processus
- Qu’est-ce qu’un processus ?
- Cycle de vie d’un processus
- Création de processus :
fork - Synchronisation parent / enfant :
wait - Remplacement d’un processus :
exec - Zombies et orphelins
- Ordonnanceur et priorités
- Outils d’observation
- Résumé pratique : modèle
fork→exec→wait - Cas d’utilisation de
fork - Communication inter-processus
- Partie 5 - Threads
- Partie 6 - Sockets
- Introduction
- Modèle OSI et pile TCP/IP
- Principe d’une communication en mode connecté (TCP)
- Créer un socket
- Associer une adresse avec
bind - Attendre des connexions avec
listen - Accepter des connexions avec
accept - Se connecter avec
connect - Envoyer et recevoir des données avec
send/recv - Fermer un socket
- Récapitulatif : serveur et client
- Servir plusieurs clients
Exercices
- Consignes
- Partie 1 - Bases de C
- Partie 2 - Fichiers
- p2e1 - Métadonnées et types (shell)
- p2e2 - Liens physiques et symboliques (shell)
- p2e3 - E/S texte (libc)
- p2e4 - E/S texte (POSIX)
- p2e5 - E/S binaire (libc)
- p2e6 - Renommer un fichier (POSIX)
- p2e7 - Lecture partielle (seek POSIX)
- p2e8 -
cat -n(libc) - p2e9 -
head -n(libc) - p2e10 - Créer une arborescence + liens (POSIX)
- p2e11 - Copier un fichier (POSIX)
- Partie 3 - Mémoire
- Partie 4 - Processus
- Partie 5 - Threads
- p5e1 - Premier thread & passage de paramètres
- p5e2 - Valeur de retour
- p5e3 - Parallélisation de la somme
- p5e4 - N threads et ordonnancement non déterministe
- p5e5 - Data race volontaire : compteur global sans protection
- p5e6 - Atomic : rendre le compteur correct
- p5e7 - Mutex : rendre le compteur correct
- p5e8 - Pattern producteur/consommateur
- p5e9 - Somme parallèle d’un grand tableau
- Partie 6 - Sockets
Annexes