C pour Linux

Formation C sous Linux : maîtriser le développement C sous GNU+Linux Quatre jours de formation C sous Linux, de la gestion de la mémoire à l’utilisation de cgroups

Encore aujourd’hui le langage C est très largement répandu pour le développement de logiciels lorsque la vitesse d’exécution ou l’occupation mémoire doivent être contrôlés avec précision. C’est particulièrement vrai pour les systèmes embarqués où les ressources sont souvent limitées. Cette formation s’adresse à des développeurs ayant déjà développé en C et qui souhaitent approfondir leurs connaissances dans l’utilisation du C sous Linux pour de la programmation système ou de l’embarqué.

Résumé

Logiciels : pour le langage C sous Linux
Durée : 3 jours + 1 jour pour le module "cgroups"
Objectifs :
 utiliser efficacement la mémoire
 démarrer, arrêter et suivre un ou plusieurs threads
 utiliser les descripteurs de fichiers
 choisir et mettre en œuvre un mécanisme de communication inter-processus
 utiliser des outils de debug pour développer et améliorer les performances d’un programme
Public : développeurs ayant déjà une connaissance du langage C
Prérequis : avoir une bonne connaissance des distributions GNU+Linux
Méthodes mobilisées : une très large part est accordée à la pratique. Des apports théoriques viennent consolider la pratique. Des exercices sont proposés aux stagiaires, qui peuvent les adapter en fonction de leurs objectifs. Les échanges entre les participants enrichissent les enseignements et leur mise en pratique.
Modalités et délais d’accès : sur inscription préalable au minimum 1 semaine avant le début de la formation selon les disponibilités du formateur.
Modalités d’évaluations : une évaluation du niveau des stagiaires est réalisée avant l’entrée en formation par téléphone ou au moyen d’un questionnaire. Évaluation des acquis et de la satisfaction en fin de formation.
Accessibilité aux personnes en situation de handicap ou présentant des difficultés d’apprentissage : nous pouvons proposer des solutions de compensation de nos prestations en adaptant les moyens pédagogiques, techniques et d’encadrement (les précisions).
Taux de satisfaction 2i2L : 96,34 % des stagiaires sont satisfaits à l’issue de leur formation.
Tarif : pour une demande de formation interne, nous consulter.

Programme

Fonctionnement d’un OS
Cette première partie permet de revenir sur les éléments de base qui constituent un OS et le lien avec le matériel.
 la mémoire virtuelle, la pagination et la segmentation, l’allocation mémoire sous Linux
 le squeduler et les différentes stratégies de gestion des tâches et threads sous Linux
 le système de fichiers virtuels de Linux

Tâches et threads
Un programme peut être constitué d’une ou plusieurs tâches et d’un ou plusieurs threads. Ce chapitre permet d’aborder la gestion des threads sous Linux.
 qu’est ce qu’un programme ou une librarie, la résolution statique ou dynamique des symboles, l’utilisation de ldd
 cycle de vie d’un programme, utilisation de exec(), fork() et gestion des signaux
 utilisation des threads posix (pthreads)

Descripteurs de fichiers
Sous Linux, l’accès à de nombreuses ressources se fait au moyen des descripteurs de fichiers.
 qu’est-ce qu’un descripteur de fichier Linux
 présentation de quelques cas d’usages : sockets, pipes
 utilisation de select() et de poll()
 cycle de vie des descripteurs en multi-tâche (ou multi-thread)
 présentation de inotify

Gestion de la mémoire
 rappels sur les notions de pile et de tas
 allocation et cycle de vie de la mémoire, malloc() free()
 gestions des variables et impact sur les performances, passage par valeur ou référence, taille de la pile
 utilisation du procfs pour diagnostiquer l’utilisation de la mémoire, maps, mem, kmem
 débordement et gestion des SIGSEGV (segfault)

Communication inter processus
 rappels : partage de mémoire entre threads, protection entre processus
 les API de partage de mémoire : shm, tmpfs
 utilisation de descripteurs : pipes, socketpair, sockets unix

Outils de debug
 rappels sur les outils système : strace, ltrace
 suivi de la mémoire, présentation de valgrind
 utilisation de gdb pour suivre l’exécution

Option avancée : programmer avec cgroups
Apparu sous Linux il y a une dizaine d’années cgroups est certainement la fonctionnalité qui a eu le plus d’impact pour le développement système et plus récemment en embarqué. Bien qu’il soit surtout connu des admin-sys, les fonctions du kernel associées à cgroups peuvent également être utilisées directement depuis des programmes.
 présentation de cgroups
 gestion et limitation des ressources (mémoire, processeur)
 Les namespaces et la protection des environnements d’exécution