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 : toutes nos formations sont accessibles aux personnes en situation de handicap, qu’il soit moteur, visuel, auditif ou cognitif ; quelles qu’en soient les particularités.
Nous pouvons proposer des solutions de compensation de nos prestations en adaptant les moyens pédagogiques, techniques et d’encadrement. Nos locaux sont en rez-de-chaussée avec des places de parkings extérieures juste devant l’entrée du bâtiment. Aussi, merci de nous informer de vos besoins d’adaptation ; les échanges peuvent se faire et rester en toute confidentialité.
Taux de satisfaction 2i2l : 100 % des stagiaires sont "très satisfaits" ou "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