École Privée d’Ingénierie du Niger — L’école du nouveau monde

✉ elearning@epiniger.edu.ne    🌐 epiniger.edu.ne

Unité d’enseignement : Master GL · S1 · UE5 — Environnement système et sécurité

  • Linux et programmation système

    Linux fait tourner l’essentiel des serveurs web, des plateformes cloud, des conteneurs Docker et une grande partie des systèmes embarqués. Pour un ingénieur génie logiciel qui déploie des API, administre un serveur d’application dans une banque ou un opérateur de Niamey, ou écrit des services performants, la maîtrise de Linux et de son interface de programmation système est indispensable. Ce cours présente l’architecture du système, l’usage avancé du shell et des scripts Bash, la gestion des fichiers, des utilisateurs et des droits, puis la programmation système en C selon la norme POSIX : création et contrôle de processus, signaux, tubes et autres mécanismes de communication inter-processus, threads et sockets. Les TP guidés se déroulent sur une distribution Debian ou Ubuntu (machine virtuelle ou WSL).

    Objectifs d’apprentissage

    • Expliquer l’architecture de Linux (noyau, appels système, espace utilisateur, arborescence FHS).
    • Automatiser des tâches d’exploitation avec des scripts Bash robustes (variables, tests, boucles, tubes, codes de retour).
    • Gérer fichiers, utilisateurs, groupes et permissions en appliquant le principe du moindre privilège.
    • Programmer en C la création et la synchronisation de processus (fork, exec, wait) et la gestion des signaux.
    • Faire communiquer des processus et des threads (tubes, mémoire partagée, mutex, sockets TCP).

    Prérequis

    Langage C (pointeurs, structures, compilation avec gcc), notions de systèmes d’exploitation (processus, mémoire, fichiers), bases des réseaux TCP/IP.

    Plan du cours

    1. Leçon 1 — Architecture de Linux, shell et scripts Bash
    2. Leçon 2 — Fichiers, utilisateurs, droits et administration de base
    3. Leçon 3 — Processus en C : fork, exec, wait et signaux
    4. Leçon 4 — Communication inter-processus, threads et sockets

    Modalités d’évaluation

    Volume horaire : 10 h de cours magistral, 10 h de travaux dirigés, 10 h de travaux pratiques (30 h en présentiel) et 30 h de travail personnel (TPE), soit 60 h pour 3 crédits. Évaluation : contrôle continu (comptes rendus de TP guidés, scripts et programmes rendus) et examen terminal écrit (commandes, lecture de code C système, questions de cours).

    Bibliographie

    • Michael Kerrisk, The Linux Programming Interface, No Starch Press.
    • W. Richard Stevens, Stephen A. Rago, Advanced Programming in the UNIX Environment, Addison-Wesley.
    • Christophe Blaess, Développement système sous Linux, Eyrolles.
    • Andrew S. Tanenbaum, Herbert Bos, Modern Operating Systems, Pearson.
    • Pages de manuel Linux (man7.org) et norme POSIX.1 (The Open Group, IEEE Std 1003.1).
  • Système embarqué

    Les systèmes embarqués sont partout : compteurs d’électricité à prépaiement, terminaux de paiement, stations météorologiques du Sahel, pompes solaires d’irrigation, balises de suivi de flottes, capteurs de qualité de l’eau. Ce cours de découverte, rattaché à l’UE « Environnement système et sécurité », donne à l’ingénieur génie logiciel les bases pour concevoir et programmer du logiciel qui s’exécute sur du matériel contraint (mémoire de quelques kilo-octets, alimentation sur batterie, exigences temps réel). Il couvre l’architecture matérielle, la programmation en C au plus près du matériel, l’ordonnancement temps réel et les systèmes d’exploitation temps réel (RTOS), puis l’efficacité énergétique, la sûreté et l’Internet des objets (IoT). Les exemples utilisent des plateformes accessibles à Niamey : Arduino (AVR ATmega328P), ESP32, Raspberry Pi.

    Objectifs d’apprentissage

    • Décrire l’architecture d’un système embarqué et choisir un microcontrôleur, des capteurs et des actionneurs adaptés à un cahier des charges.
    • Programmer en C embarqué les périphériques de base : GPIO, interruptions, temporisateurs, convertisseur analogique-numérique, UART, I2C, SPI.
    • Analyser la faisabilité d’un ensemble de tâches temps réel (RMS, EDF, temps de réponse) et utiliser les services d’un RTOS.
    • Estimer la consommation et l’autonomie d’un objet connecté et appliquer les techniques d’économie d’énergie.
    • Concevoir une chaîne IoT sécurisée (protocoles, passerelle, cloud) adaptée au contexte nigérien.

    Prérequis

    Programmation en C (pointeurs, opérateurs bit à bit), architecture des ordinateurs (processeur, mémoire, bus), notions d’électricité (tension, courant, loi d’Ohm), bases des systèmes d’exploitation.

    Plan du cours

    1. Leçon 1 — Architecture des systèmes embarqués : microcontrôleurs, mémoires, capteurs et actionneurs
    2. Leçon 2 — Programmation embarquée en C : GPIO, interruptions, temporisateurs, conversion et bus de communication
    3. Leçon 3 — Systèmes temps réel : ordonnancement, analyse de faisabilité et RTOS
    4. Leçon 4 — Énergie, sûreté de fonctionnement et Internet des objets

    Modalités d’évaluation

    Volume horaire : 20 h de cours magistral, 10 h de travaux dirigés, pas de TP en présentiel (30 h en présentiel), 30 h de travail personnel (TPE), soit 60 h pour 3 crédits. Les manipulations proposées peuvent être réalisées sur simulateur (Wokwi, Tinkercad) dans le cadre du TPE. Évaluation : contrôle continu (TD notés, mini-dossier de conception d’un objet connecté) et examen terminal écrit.

    Bibliographie

    • Edward A. Lee, Sanjit A. Seshia, Introduction to Embedded Systems: A Cyber-Physical Systems Approach, MIT Press.
    • Giorgio C. Buttazzo, Hard Real-Time Computing Systems, Springer.
    • Jane W. S. Liu, Real-Time Systems, Prentice Hall.
    • Elecia White, Making Embedded Systems, O’Reilly Media.
    • Documentation technique Microchip ATmega328P et Espressif ESP32 ; documentation FreeRTOS (freertos.org).