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