Horaires IGI-3004 : Cours : 14h. TD : 4h. TD machine : 10h. Examen partiel : 2h. Examen final : 2h.
Responsable : Jean Cousty
Horaires IT-3006:
Responsable : Laurent
Najman
Objectifs
Acquérir des connaissances et compétences fondamentales liées aux principes de fonctionnement des systèmes d'exploitation (voir détails ci-dessous). Ces principes sont illustrés en particulier sur les exemples de Unix, Linux et Windows. Lors de séances de TD sur machines, les compétences et connaissances acquises (ou en cours d'acquisition) sont mises en oeuvre à travers la programmation en C de logiciels s'exécutant sous Linux.
Connaissances à acquérir :
- mécanismes fondamentaux des systèmes d'exploitation : création et terminaison de processus et processus léger, communication inter-processus par tubes et signaux, synchronisation élémentaire de processus, gestion des fichiers et de la mémoire ;
- modèles fondamentaux de synchronisation : producteurs / consommateurs, dîner de philosophes, lecteurs / rédacteurs.
Compétences à acquérir :
- formaliser un ensemble d'actions simultanées à l'aide des mécanismes fondamentaux de systèmes d'exploitation ;
- mettre en œuvre, sous forme d'un logiciel, un ensemble d'actions simultanées ;
- identifier un ensemble d'actions simultanées à l'un des trois modèles fondamentaux de synchronisation ;
- mettre en œuvre, sous forme d'un logiciel, les trois modèles fondamentaux de synchronisation.
Au fil des années ces compétences sont déclinées sous forme de micro compétences qui sont évaluées lors des examens. Vous trouverez donc une liste (non-exhaustive) de micro-compétences à acquérir dans l'unité au bas de cette page.
Pré-requis
Une première expérience de la programmation en C/C++ et la connaissance de l'utilisation d'Unix/Linux sont pré-requises. Ces pré-requis sont censés avoir été acquis dans les années précédentes. Afin de s'éviter de perdre trop de temps lors des TP, l'étudiant est invité à suivre les liens suivants :
- Ptit GUDU, une introduction à unix fait par un étudiant de l'école.
- Station HP sous Unix avec tcsh, en français
- programmation sous Bash
Pour ceux qui veulent aller plus loin sur bash, le lien suivant est intéressant:
Organisation et sujets des cours et travaux dirigés
Cours 1 : Introduction et makefile
TDm 1 : Appels système pour la manipulation de fichiers
Cours 2 : Processus
TDm 2 : Création, affichage et synchronisation élémentaire de processus
Cours 3 : Communication inter-processus par signaux et tubes & Processus légers
TDm 3 : Communication inter-processus par signaux et tubes
TD 1 : Création de processus & communication inter-processus par tubes et signaux
Examen partiel.
Cours 4 : Modèles de synchronisation : sémaphores, producteur/consommateur, dinêr de philosophes
TD 2 : Synchronisation de processus
TDm 4 : Création et synchronisation de processus légers
Cours 5 : Gestion de la mémoire
Cours 6 : Mémoire virtuelle
TDm 5 : Gestion de la mémoire : impact sur les temps d'exécution & outils d'aide au développement
Examen final.
Environnement de travail : machine virtuelle Linux téléchargeable
Même si votre ordinateur pesrsonnel est sous Windows, il est possible d'exécuter un système d'exploitation Linux pour reproduire l'environnement de travail des TDm. En effet, sous le système d'exploitation Windows, vous pouvez exécuter une machine virtuelle sous Linux. Pour cela, vous pouvez par exemple utiliser la machine virtuelle donnée ici sur laquelle Linux a déjà été installé pour vous.
Pour utiliser cette machine virtuelle, vous devez installer le lecteur de machine virtuelle VMware, téléchargeable ici.
Afin de décompresser cette machine virtuelle, n'importe quel gestionnaire d'archives (comme 7-zip téléchargeable ici) peut être utilisé.
Une fois que cette machine virtuelle est lancée, vous pouvez vous connecter avec le compte "user" dont le mot de passe est "azerty".
Micro-compétences à acquérir (liste non exhaustive)
Prendre en compte l'effet d'un appel système fork
dans un programme
Identifier les processus créés par un programme utilisant 'fork' pour se
dupliquer plusieurs fois
Identifier les relations père-fils (arbre des processus) entre les processus
créés par un programme utilisant 'fork' pour se dupliquer plusieurs fois
Analyser la nature déterministe ou non-déterministe du résultat produit par
un programme multiprocessus
Prendre en compte le mécanisme d'exécution simultanée de processus pour
prévoir l'affichage d'un programme multi-processus
Prendre en compte l'effet d'un recouvrement dans un programme
Décrire le déroulement d'un programme multiprocessus utilisant des
recouvrements
Décrire l'effet de l'appel système wait et d'une boucle permettant d'attendre
que tous les fils d'un processus soient terminés
Écrire un programme élémentaire pour envoyer un
signal au processus parent
écrire un programme élémentaire permettant de faire une action spécifique à
la réception d'un signal donné
Analyser les messages échangés par plusieurs
processus via des tubes non nommés (à partir du code source du programme)
Décrire l'affichage d'un programme multiprocessus échangeant des messages via
des tubes
Vérifier l'atomicité de l'opérations d'écritures sur un tube en s'appuyant
sur l'exemple d'un programme multi-processus donné
Expliquer le déroulement d'un programme faisant appel à la sémantique
bloquante de la lecture et de l'écriture sur un tube
Expliquer pourquoi les opérations de lecture/écriture sur des tubes ont une
sémantique bloquante
Expliquer le lien entre une "situation physique"
(de type producteur/consommateur) et un programme muti threadé donné
Expliquer un problème donné de synchronisation pouvant survenir lors du
déroulement d'un programme multi-threadé de type producteurs / consommateurs
mal programmé
Identifier et expliquer une exécution problématique due à une mauvaise
synchronisation des processus dans un programme de type Producteur /
consommateur
Identifier les ressources et sections critiques dans un programme donné
Synchroniser les threads d'un programme type producteur / consommateur par
exclusion mutuelle
Identifier un problème d'attente active
Écrire un programme pour résoudre un problème de type producteur /
consommateur sans attente active
Expliquer le lien entre une "situation physique"
(de type dîner de philosophe) et un programme informatique muti threadé
Expliquer un problème donné dans le déroulement d'un programme multi-threadé
de type dîner de philosophes non synchronisé
Identifier une situation problématique pour le déroulement d'un programme
multi-threadé de type dîner de philosophes non synchronisé
Synchroniser les threads d'un programme type dîner de philosophe par
exclusion mutuelle
Déterminer l'ensemble de sémaphores (et leur valeur initiale) pour
synchroniser les threads d'un programme type dîner de philosophes autorisant
plusieurs threads à agir en même temps
Écrire un programme pour résoudre un problème de dîner de philosophes en
autorisant plusieurs threads à agir en même temps
Expliquer ce qu'est un interblocage
Démontrer qu'un programme ne peut pas conduire à une situation
d'interblocage
Pour un programme donné pouvant aboutir à une situation d'interblocage,
exhiber une séquence d'exécution aboutissant à un interblocage
Calculer la taille maximale des fichiers dans un
système à i-noeud spécifié
Expliquer ce qu'est un i-noeud et l'adressage indirect dans les systèmes de
fichiers à i-noeuds
Expliquer le fonctionnement d'un système de fichier par liste chaînée avec
table d'allocation
Appréhender un système de fichier inconnu
Expliquer la propriété d'optimalité de
l'algorithme de Belady
Appliquer l'algorithme de Belady
Appliquer l'algorithme FIFO
Appliquer l'algorithme LRU
Détecter le nombre de défauts de page générés par un algorithme de
remplacement de pages
Expliquer ce qu'est l'anomalie de Belady
Expliquer les caractéristiques principales de différents algorithmes de
remplacement de pages
Bibliographie
- Systèmes d'Exploitation - Bart Lamiroy, Laurent Najman et Hugues Talbot. Collection Syntex, Pearson Education
- Voir également le site dédié au livre: http://bart.lamiroy.free.fr
- Système d'Exploitation - Juan Manuel Torres, Hanifa Boucheneb et Michel Gagnon
- Systèmes d'exploitation (systèmes centralisés, systèmes distribués) - A. Tanenbaum (Interedition)
- Polycopié du cours " Systèmes d'exploitation et réseaux ". - Bart Lamiroy, Mines de Nancy. Poly en pdf
On lira également avec profit
- La programmation sous UNIX - JM.RIFFLET (Ediscience International)
- The Cathedral and the Bazaar Livre électronique traitant des modèles de logiciels libres. (disponible en français également)
- L'histoire d'Unix et ses dérivées. (impressionnant graphe d'héritage)
Projet de programmation en système d'exploitation (atelier d'approfondissement en informatique PR3006)
Le sujet 2014 n'est pas encore disponible.
A titre de curiosité, vous pouvez regarder
Quelques anciens sujets de travaux dirigés