4EXP3A - Exploitation des systèmes 3

Appartient à l'UE Exploitation des systèmes 3

Personnes enseignantes

Description technique du cours

  • Acronyme de l’activité : 4EXP3A
  • Bloc : 2
  • Quadrimestre : 4
  • Nombre de crédits : 2
  • Langue d’instruction : français
  • Implantation : HE2B – ESI
  • Pré-requis : néant
  • Co-requis : 3EXP2A

Détails des parties

L’unité d’enseignement est composée des parties suivantes :

Partie Acronyme Format Heures de cours Heures hors cours (estimation)
Exploitation des systèmes 3 - Théorie 4EXP3A-T Auditoire 12 20
Exploitation des systèmes 3 - Laboratoires 4EXP3A-L Laboratoire 12 15

Description générale du cours

L’unité présente les principaux composants d’un système d’exploitation de type linux au travers de l’étude de ses structures de données et appels système. Les mécanismes fondamentaux sont décrits. Les travaux pratiques aident à la compréhension du cours théorique.

Ce cours est la suite du cours 2EXP3A

Objectifs généraux

Au terme de l’activité d’apprentissage, l’étudiante ou l’étudiant sera en mesure de :

  • Savoir explorer/montrer le fonctionnement du noyau Linux et de ses Appels Système
  • Adopter une position critique vis à vis de la documentation liée au Système d’Exploitation
  • Savoir se servir de la documentation fournie dans les pages de manuel man

Acquis d’apprentissage spécifiques sanctionnés par l’évaluation

Au terme des séances, l’étudiante ou l’étudiant sera évalué sur sa capacité à :

  • expérimenter, démontrer et expliquer les mécanismes fondamentaux de la gestion des processus d’un système d’exploitation de type Linux, y compris le rôle du processus init (systemd, 1, …), la filiation, les états zombie et le mécanisme d’adoption.
  • expliquer le mécanisme du copy on write lié à l’appel système fork
  • identifier et schématiser les structures de données fondamentales utilisées pour la gestion de processus dans un système d’exploitation Linux, telles que les tables de processus, les tables de fichiers ouverts, les tables des signaux et de leurs traitements.
  • retenir, expliquer et expérimenter les appels système les plus couramment utilisés pour la gestion des processus dans le développement sous Linux comme fork, exec, wait, ... et leur lien avec les structures de données du noyau.
  • expliquer et expérimenter la communication entre processus parents via des pipes ainsi que les problématiques liées.
  • expliquer et expérimenter la communication entre processus d’un même utilisateur via des signaux.
  • expliquer, schématiser et expérimenter l’interaction des appels système liés à la gestion des processus avec les appels système (dup2, open, pipe, ...)
  • expliquer, schématiser et expérimenter le mécanisme des signaux standards d’un système linux ainsi que ses faiblesses.
  • retenir, expliquer, expérimenter et schématiser le fonctionnement de l’appel système linux pipe qui permet la communication entre processus parents.
  • retenir, expliquer, expérimenter et schématiser le fonctionnement des appels système linux qui permettent la communication entre processus apartenant au même utilisateur comme kill, sigaction, , signal, pause, ... et leur lien avec les structures de données du noyau.
  • retenit et expliquer le comportement et l’utilité des différents signaux standard comme SIGALRM, SIGCHLD, SIGINT, SIGUSR1,.
  • retenir, expliquer et démontrer les faibleses des signaux standard
  • retenir, expliquer et utiliser différentes techniques pour la gestion des zombies.
  • expliquer et écrire l’algorithme d’un shell simple
  • retenir, expliquer et différencier la notion de commande interne et externe ainsi que leur programmation au sein d’un shell.
  • expliquer et expérimenter l’ajout de fonctionnalités au shell simple (redirection, commandes internes, pipes, *, $$, (), &&, ||, ...)
  • expliquer et expérimenter le mécanisme du copy on write pour l’appel système fork
  • expliquer et expérimenter la notion de RUID, EUID ainsi que leur lien avec le bit SUID
  • expliquer et expérimenter la faille de sécurité liée à la combinaison du bit SUID et des fonctions system et exec... utilisant la variable d’environnement PATH.

Acquis terminaux visés

Au sein de la formation de bachelier en informatique, cette activité d’apprentissage aura participé à l’acquisition des compétences suivantes.

  • Choisir et mettre en œuvre un standard défini ou une technologie spécifique (méthodologie, environnement, langage, framework, librairies…).

Modalités d’évaluations

Évaluation continue Examen en première session Examen de seconde session
E 100% E 100%

E = écrit

L’examen écrit porte sur la théorie et le laboratoire (Matière vue au cours et structures de code).

Contenus

  • Notions de processus et parenté - structures et Appels Système liés (avec exercices en Laboratoire)
  • Communication entre processus via pipes et signaux - structures et Appels Système liés (avec exercices en Laboratoire)
  • Structure d’un shell simple et améliorations (avec exercices en Laboratoire)
  • Ébauche d’une faille de sécurité (SUID - exec et PATH)

Bibliographie

  1. Andrew Tanenbaum, Herbert Bos - Modern Operating Systems - Pearson (4th édition)
  2. Mikael Kerrisk - The linux programming interface - (no starch press 2010)
  3. Intel 64 and IA-32 Architectures Software Developer’s Manual - December (2011)
  4. Richard Stevens - Advanced Programming in the UNIX Environment (2nd edition)
  5. Programmation Système en C sous Linux 2ième édition - Christophe Blaess - Eyrolles (2005)
  6. Peter Prinz, Tony Crawford - “C in a nutshell, A desktop Quck Reference” O’REILLY 2006
  7. Pages de manuel man de niveaux 2, (3), 5, 7, 8