~~TRANS~~ ===== Systèmes d'exploitation ===== Ce cours présente d'abord brièvement l'historique et la typologie des systèmes d'exploitation et ensuite se penche sur deux aspects de la conception et réalisation de ces systèmes : les entrées/sorties et la gestion du parallélisme et de la concurrence. En ce qui concerne les entrées/sorties, sont analysées en priorité les notions des interruptions et des tampons. Pour ce qui est du parallélisme et de la concurrence, le parallélisme maximal et les blocages sont étudiés. Ce cours est enseigné à tous les parcours en formation initiale de [[https://www.univ-evry.fr/formation/loffre-de-formation/domaines-de-formation/domaine/sciences-technologies-sante/programme/licence-mention-informatique-1.html|L3 informatique]] à l'[[http://www.univ-evry.fr/fr/index.html|Université d'Évry]] et requiert une expérience de base en programmation et en architecture des ordinateurs. Ce cours s'inspire profondément des notes de [[https://www.ibisc.univ-evry.fr/~delosme/|Jean-Marc Delosme]] au sujet des systèmes d'exploitation. Davantage de démonstrations et de travaux pratiques sont envisagés pour l'année universitaire 2018/2019. Les sections ci-dessous décrivent brièvement les 4 grands chapitres de cette matière, ainsi que les 2 exemples de code exécutable proposés aux étudiants. Les matériaux disponibles sur cette page sont distribués sous la [[https://fr.wikipedia.org/wiki/Licence_Creative_Commons|licence Creative Commons Paternité]] {{:ccby.png?60}}. ==== 1. Introduction ==== Ce chapitre explique quelques termes fondamentaux systématiquement employés dans l'étude, la conception et le développement des systèmes d'exploitation : système informatique, système d'exploitation, machine physique, machine abstraite, etc. Quelques fonctions essentiels d'un système d'exploitation sont énumérées. Une typologie des systèmes d'exploitation ainsi qu'un bref historique concluent le chapitre. Les diapositives de ce chapitre se trouvent {{:se-01.pdf|ici}}. ==== 2. Méchanismes d'exécution et de communication ==== Ce chapitre décrit l'organisation de la communication dans un système concurrent, asynchrone et ouvert. L'objet central de cette partie sont les interruptions matérielles ainsi que les déroutements et les appels au superviseur. Quelques exemples fondamentaux d'application des interruptions sont expliqués, en particulier l'organisation du pseudo-parallélisme et les entrées-sorties tamponnées. Les diapositives de ce chapitre se trouvent {{:se-02.pdf|ici}}. ==== 3. Processus. Modèles de représentation ==== Ce chapitre définit la notion de processus et décrit son rôle et sa représentation au sein d'un système d'exploitation. Après une discussion des aspects techniques généraux, le chapitre débouche sur le modèle abstrait des systèmes de tâches concurrentes, ainsi que sur les opérations de composition séquentielle et parallèle. Les diapositives de ce chapitre se trouvent {{:se-03.pdf|ici}}. Cette partie comprend également un {{:ton-paire.cpp|exemple de code}} utilisant la procédure ''fork'' pour créer un nouveau processus. ==== 4. Interaction de processus ==== Ce chapitre se focalise sur les deux problèmes fondamentaux de gestion de systèmes concurrents : le parallélisme maximal et les blocages. La question d'optimisation du parallélisme est traitée dans le cadre général des systèmes de tâches en donnant un algorithme de construction d'un système de tâches de parallélisme maximal équivalent à un système de tâche donné. Un cadre formel différent est ensuite construit pour l'analyse des blocages et un algorithme de détection des blocages est présenté. Un algorithme approximatif d'évitement des blocages (l'algorithme du banquier) concluent le chapitre. Les diapositives de ce chapitre se trouvent {{:se-04.pdf|ici}}. ==== 5. Sémaphores ==== Cette partie du cours se donne l'objectif d'étudier les sémaphores dans le contexte de développement interactif d'un programme synchronisant un ensemble de fils d'exécution parallèles. Le code vers lequel ce développement devrait aboutir est {{:semaphores.py|celui-ci}}.