:tocdepth: 2 ============== Introduction ============== .. include:: common.rst.inc Contexte ======== L'enseignant ------------ :e-mail: pierre-antoine.champin at univ-lyon1.fr :web: http://champin.net/enseignement/ Système d'exploitation ? ======================== .. container:: build .. figure:: _static/os-cloud.png :width: 90% :alt: nuage de tags réalisé avec http://www.wordle.net/ .. tag cloud generated on http://www.wordle.net/ with the following text: UNIX UNIX UNIX UNIX UNIX Windows Windows Windows Windows Windows Linux Linux Linux Linux Mac-OS Mac-OS Mac-OS Mac-OS Ubuntu Ubuntu Debian Debian Red-Hat Red-Hat BSD BSD OpenBSD FreeBSD Android Android Android Symbian BeOS Nucleus Plan9 MS-Dos MS-Dos VMS Solaris HP-UX QNX LynxOS Amoeba Globus (Tentative de) Définition ------------------------- * Un **logiciel** permettant d'utiliser (exploiter) un système informatique. * En anglais : **operating** system → opérateur * Cette définition s'affinera au long du cours .. figure:: _static/operator.* :width: 50% Source https://www.flickr.com/photos/argonne/4563394851 Illustration ```````````` .. figure:: _static/utilisabilite.png :width: 70% Rôles du SE =========== Les « cinq A » : * `Aide`:ref: * `Abstraction`:ref: * `Augmentation`:ref: * `Arbitrage`:ref: * `Autorisation`:ref: .. index:: aide .. _aide: Aide ---- * APIs de périphériques sont souvent complexe : * accès à toutes les fonctionalités (même peu utilisées) * gérer toutes les situations (même exceptionnelles) * Objectif : *Simplifier* l'accès aux périphériques * masquer la complexité * factoriser les traitements récurrents → modularité, *maintenabilité* du code .. index:: abstraction .. _abstraction: Abstraction ----------- * Différents périphériques rendent des services similaires : * disques durs de marque/capacité différentes * bande magnétique / disque dur / mémoire flash... * Objectif : exposer une *Abstraction* des périphériques * fonctionalités réduites * réutilisabilité accrue → *portabilité* du code .. index:: augmentation .. _augmentation: Augmentation ------------ * Des ressources non-disponibles peuvent être simulées : * multi-tâche * mémoire virtuelle * Objectif : *Étendre* (virtuellement) les ressources * repousse les limites du système * éventuellement au prix des performances → *portabilité* accrue .. index:: arbitrage .. _arbitrage: Arbitrage --------- * Contexte multi-tâches * nécessité de répartir l'accès aux ressources * conséquence de l'abstraction * Objectif : *Arbitrer* l'accès aux ressources → *fiabilité* du système .. index:: autorisation .. _autorisation: Autorisation ------------ * Contexte multi-utilisateur * vie privée, intégrité du système * Contexte mono-utilisateur *non expert* * confiance limitée dans certaines applications * Objectif : *Limiter* l'accès aux ressources → *sécurité* du système Une perspective de programmeur ------------------------------ .. literalinclude:: code/hello.c :language: c .. ifslides:: .. container:: build animation stacked .. image:: _static/perspective_programmeur_c1.* :alt: compilation :width: 60% .. image:: _static/perspective_programmeur_c2.* :alt: édition de liens :width: 60% .. image:: _static/perspective_programmeur_c3.* :alt: appels systèmes :width: 60% .. ifnotslides:: .. image:: _static/perspective_programmeur.* :alt: appels systèmes :width: 60% .. rst-class:: copyright Clipart by `karderio `_ .. index:: UNIX UNIX : l'ancêtre ================ Historique ---------- * Développé par `Ken Thomson`_ & `Dennis Ritchie`_ (Bell Labs) à partir de 1969 * Initialement nommé Unics (référence à Multics_) * Remplace le système d'exploitation du PDP-7_, puis du PDP-11_ * Ré-écrit en C en 1971 : portabilité, évolutivité .. _Ken Thomson: http://fr.wikipedia.org/wiki/Ken_Thomson .. _Dennis Ritchie: http://fr.wikipedia.org/wiki/Dennis_Ritchie .. _Multics: http://fr.wikipedia.org/wiki/Multics .. _PDP-7: http://fr.wikipedia.org/wiki/PDP-7 .. _PDP-11: http://fr.wikipedia.org/wiki/PDP-11 .. index:: POSIX Évolutions d'UNIX ----------------- * Unix system V (AT&T) → Linux_ (1992), Android_ (2007) * BSD → OpenBSD, FreeBSD, `Mac OS X`_ (1999) * POSIX_ (norme IEEE, Unix Portable, 1998) .. _Linux: http://fr.wikipedia.org/wiki/Linux .. _Android: http://fr.wikipedia.org/wiki/Android .. _Mac OS X: http://fr.wikipedia.org/wiki/Mac_OS_X .. _POSIX: http://fr.wikipedia.org/wiki/Posix → l'héritage d'UNIX est encore très présent Innovations d'UNIX ------------------ Deux innovations majeures : * unification des entrées/sorties * :ref:`abstraction ` : notion de fichier * :ref:`autorisation ` : système unique de permissions * notion de *processus* * :ref:`arbitrage ` : unité d'accès aux ressources * :ref:`augmentation ` : temps partagé → encore présentes dans tous les systèmes actuels Au delà des systèmes d'exploitation =================================== .. index:: machine virtuelle .. _seetendu: Pour aller plus loin -------------------- Les rôles identifiés du système d'exploitation peuvent être joués par d'*autres* composants logiciels. * Ce cours ne traite pas directement de ces autres composants logiciels, * mais certaines notions abordées peuvent s'appliquer à eux. ⚠ Les deux types de système dont on va parler sont souvent appelés « machines virtuelles ». Mais dans les deux cas, ce même terme désigne des choses *très* différentes. .. index:: hyperviseur .. _hyperviseur: Hyperviseurs ------------ Hyperviseur : logiciel qui permet d'éxécuter un ou plusieurs systèmes d'exploitation (superviseurs) dans un environnement matériel virtuel (ou « machine virtuelle »). Exemples : * VMWare_ * VirtualBox_ * Parallels_ * Xen_ .. _VMWare: http://www.vmware.com/ .. _VirtualBox: http://www.virtualbox.org/ .. _Parallels: http://www.parallels.com/ .. _Xen: http://www.xen.org/ Illustration ```````````` .. figure:: _static/hyperviseur.png :width: 80% d'après http://fr.wikipedia.org/wiki/Fichier:Hyperviseur.png Remarques ````````` * Les hyperviseurs ne sont pas des *émulateurs* : l'architecture du processeur virtuel est la même que celle du procésseur réel → performances * Les processeurs modernes offrent des fonctions spécialisées pour la virtualisation (mode utilisateur / superviseur / **hypeviseur**) .. index:: interpréteur Interpréteurs ------------- De nombreux langages aujourd'hui ne sont plus compilés dans le langage machine, mais dans un langage machine abstrait, interprété ensuite par une « machine virtuelle ». Exemple : * Java_ (Scala_, Clojure_, Groovy_...) * Javascript_ * Perl_, Python_, Ruby_, Lua_ ... .. _Java: http://www.java.com/ .. _Scala: http://www.scala-lang.org/ .. _Clojure: http://clojure.org/ .. _Groovy: http://groovy.codehaus.org/ .. _Javascript: https://developer.mozilla.org/fr/JavaScript .. _Perl: http://www.perl.org/ .. _Python: http://www.python.org/ .. _Ruby: http://www.ruby-lang.org/ .. _Lua: http://www.lua.org/ Devises ``````` * Java = *Compile once, run everywhere* On pourrait décliner des devises similaires : * C/UNIX = *Write once, compile everywhere* * Langages interpretés = *Write once, run everywhere* Plan du cours ============= Plan du cours ------------- Noyau : * Chapitre 2 : `noyau`:doc: Processus : * Chapitre 3 : `processus`:doc: * Chapitre 4 : `es`:doc: * Chapitre 5 : `ipc`:doc: * Chapitre 6 : `synchro`:doc: * Chapitre 7 : `parallelisme`:doc: * Chapitre 8 : `ordonnancement`:doc: .. nextslide:: :increment: Mémoire : * Chapitre 9 : `pagination`:doc: * Chapitre 10 : `tas`:doc: Système de fichiers : * Chapitre 11 : `fichiers`:doc: