# Programmation Système Avancée sur Unix/Linux

#### Public

**Prérequis**

**Durée de la Formation**

* Total : 5 jours (40 heures)

**Objectifs de la Formation**

* Comprendre les concepts avancés des systèmes Unix/Linux.
* Maîtriser la programmation système en C.
* Manipuler les appels systèmes et les processus.
* Gérer la mémoire et les entrées/sorties.
* Implémenter la communication inter-processus (IPC).



#### Jour 1 : Introduction à la Programmation Système

**Matin : Concepts Avancés de Unix/Linux**

* Introduction à la programmation système
* Structure et fonctionnement du noyau Unix/Linux
* Gestion des processus et des threads
* Espaces utilisateur et noyau

**Après-midi : Développement en C pour Unix/Linux**

* Introduction à la programmation en C sur Unix/Linux
* Compilation et débogage avec `gcc` et `gdb`
* Utilisation des bibliothèques standard (`stdio.h`, `stdlib.h`, etc.)
* Appels systèmes de base (`open`, `read`, `write`, `close`)

**Lab 1 : Premier Programme Système**

* Écrire un programme en C pour lire et afficher le contenu d'un fichier.
* Utilisation de `gcc` pour compiler et `gdb` pour déboguer.

#### Jour 2 : Gestion des Processus et des Threads

**Matin : Gestion des Processus**

* Création et gestion des processus avec `fork`, `exec`, `wait`
* Terminaison des processus et gestion des signaux (`kill`, `signal`, `sigaction`)
* Priorités et planification des processus

**Après-midi : Programmation avec des Threads**

* Introduction aux threads avec la bibliothèque pthreads
* Création, synchronisation et destruction de threads
* Verrous, mutex et conditions

**Lab 2 : Manipulation des Processus et des Threads**

* Écrire un programme en C utilisant `fork` et `exec` pour lancer un processus enfant.
* Écrire un programme multi-thread en utilisant pthreads.

#### Jour 3 : Gestion de la Mémoire

**Matin : Allocation Dynamique de Mémoire**

* Allocation dynamique avec `malloc`, `calloc`, `realloc`, `free`
* Gestion de la mémoire et détection de fuites

**Après-midi : Mémoire Partagée**

* Introduction à la mémoire partagée
* Utilisation des segments de mémoire partagée avec `shmget`, `shmat`, `shmdt`, `shmctl`

**Lab 3 : Gestion de la Mémoire**

* Écrire un programme en C utilisant `malloc` et `free` pour gérer une liste chaînée.
* Implémenter un programme utilisant la mémoire partagée pour échanger des données entre deux processus.

#### Jour 4 : Entrées/Sorties et Communication Inter-Processus (IPC)

**Matin : Entrées/Sorties Avancées**

* Manipulation des fichiers avec les appels systèmes (`lseek`, `fcntl`)
* Gestion des entrées/sorties asynchrones

**Après-midi : Communication Inter-Processus (IPC)**

* Pipes et FIFOs
* Sockets : introduction et programmation réseau de base
* Message Queues et Sémaphores

**Lab 4 : Entrées/Sorties et IPC**

* Écrire un programme utilisant des pipes pour la communication entre processus parent et enfant.
* Implémenter une communication simple client-serveur avec des sockets.

#### Jour 5 : Projet Final et Mise en Pratique

**Matin : Conception et Planification du Projet Final**

* Présentation du projet final : implémenter un mini-système de gestion de tâches
* Discussion et planification des étapes du projet

**Après-midi : Développement et Présentation du Projet Final**

* Développement, test et débogage du projet
* Préparation et présentation du projet aux formateurs et aux autres participants

**Lab 5 : Projet Final**

* Création d'un mini-système de gestion de tâches utilisant les concepts appris (processus, threads, IPC, mémoire partagée, etc.)
* Documenter et présenter le code et les concepts utilisés

#### Ressources et Supports Pédagogiques

* Accès à un environnement de développement Unix/Linux (VM ou Docker)
* Documentation et tutoriels en ligne
* Support et assistance pendant les labos

#### Évaluation

* Évaluations continues à travers les labos pratiques
* Évaluation finale basée sur le projet réalisé

#### Conclusion

Cette formation permet aux participants de maîtriser la programmation système avancée sur Unix/Linux, en combinant théorie et pratique à travers des exercices, des labos et un projet final complet.
