|
|
|
|
| 1er jour |
| Présentation & Architecture |
 |
Historique |
 |
Licences GPL et open source |
 |
Distributions et versions de Linux et uClinux |
 |
Architecture du kernel Linux et uClinux |
| Utilisation de Linux |
 |
Le système de fichier |
 |
Utilisation du shell et des scripts |
 |
L'éditeur vi |
 |
Administration de base |
| Le développement d'applications |
 |
Développement d'applications Linux |
|
 |
différence entre mode utilisateur et mode noyau |
|
 |
structure d'une application Linux |
|
 |
Développement d'applications uClinux |
|
 |
les formats d'exécutables uClinux |
|
 |
les options de compilation |
|
 |
Développement de librairies Linux |
|
 |
statiques (.lib) |
|
 |
dynamiques (.so) |
|
 |
Développement de librairies uClinux |
|
 |
statiques (.lib) |
|
 |
dynamiques (.so) |
|
 |
Outils de développement |
|
 |
les outils de compilation |
|
 |
la documentation (pages "man", info) |
|
 |
les makefile |
|
 |
environnements intégrés (Eclipse, Kdevelop,...) |
|
 |
Outils de debug et de mise au point |
|
 |
gdb |
|
 |
debug mémoire avec dmalloc et electric fence |
|
 |
analyse runtime complète avec Valgrind |
| Exercice : |
Ecriture d'une librairie mathématique simple compilée statiquement puis dynamiquement pour Linux et uClinux |
| 2ème jour |
| Entrées/Sorties et Signaux |
 |
Interface standard des entrées/sorties |
|
 |
API |
|
 |
inodes et données |
|
 |
verrous |
|
 |
Programmation réseau |
|
 |
sockets |
|
 |
protocoles UDP et TCP |
| Exercice : |
Programmation d'une application client/serveur. Comparaison entre TCP/IP et UDP/IP. |
|
 |
Entrées-sorties asynchrones |
|
 |
mode non bloquant |
|
 |
E/S multiplexées |
|
 |
E/S notifiées |
|
 |
Asynchrone enchainé (API aio POSIX) |
| Exercice : |
Gestion de plusieurs connexions concurrentes par multiplexage d'I/O |
|
 |
Signaux POSIX et timers |
|
 |
types de signaux |
|
 |
réception d'un signal |
|
 |
fonctions utilisables dans un gestionnaire de signal |
|
 |
timers en mode utilisateur |
| 3ème jour |
| Programmation Multitâches |
 |
Les processus |
|
 |
définition |
|
 |
structures du noyau |
|
 |
sécurité |
|
 |
cycle de vie (fork, exec,...) |
|
 |
Différence entre Linux et uClinux |
| Exercice : |
Gestion de plusieurs connexions concurrentes en multi processus (fork) |
|
 |
Les threads |
|
 |
définition (threads utilisateur et noyau) |
|
 |
threads POSIX (mutex, variables conditionnelles, Thread Specific Data,...) |
| Exercice : |
Gestion de plusieurs connexions concurrentes en multitâches (pthreads) |
|
 |
Gestion mémoire |
|
 |
gestion de la mémoire par la MMU (adresses virtuelles/physiques) |
|
 |
pagination et protection |
|
 |
swap |
|
 |
allocation mémoire |
|
 |
caches |
|
 |
différences entre Linux et uClinux |
|
 |
Ordonnancement |
|
 |
la commutation de contexte |
|
 |
politique d'ordonnancement "normale" (niveaux nice) |
|
 |
politique d'ordonnancement temps réel (FIFO ou Round Robin) |
|
 |
principe et performances de l'algorithme |
|
 |
ordonnancement SMP (Symetrical Multi Processor) |
| 4ème jour |
| Communication entre tâches (IPC POSIX) |
 |
Présentation de la norme POSIX |
 |
Communication entre tâches |
|
 |
Mapping de fichier en mémoire |
|
 |
Mémoire partagée |
|
 |
Files de messages |
|
 |
Pipes |
|
 |
Synchronisation des tâches |
|
 |
sémaphores |
|
 |
mutex |
|
 |
signaux |
|
 |
Les IPCs System V sont décrites en annexe |
| Exercice : |
Mise en place d'un watchdog sur timeout pour fermer les connexions inactives sur un serveur |