. . 01 - Introduction . Morgan Barbier [email protected] L2 – S4 2012/2013 . . .. 0. Administratif Équipe pédagogique . Membres : I Morgan Barbier (responsable – S3-352); I Mariya Georgieva; Nous contacter : [email protected] Séances : I 8 séances de Cours ; I 9 séances de TD ; I 10 séances de TP. Administratif 1 / 41 Emploi du temps . Cours : Le mardi 16h00 – 18h00 (Morgan Barbier – S3 049) ; Groupe 1 et 2 : TD 1 jeudi 13h45 à 15h15 (Morgan Barbier – S1 113) ; TP 1 jeudi 16h30 à 18h00 (Morgan Barbier – S1 128) ; TP 2 vendredi 9h00 à 10h30 (Morgan Barbier – S1 127). Groupe 3 : (étudiants SPI et étudiants maths) TD 2 vendredi 14h00 à 15h30 (Mariya Georgieva – S1 033) ; TP 3 vendredi 16h00 à 17h30 (Mariya Georgieva – S1 127). Administratif 2 / 41 Modalités de contrôle de connaissances . Épreuves : I Un Projet (CC) ; I Un Examen (E). Note : I Note finale du module : F = 13 CC + 23 E. Support de cours : I https://barbierm01.users.greyc.fr/teaching.php Administratif 3 / 41 1. Système d’exploitation Le . programme unique Principe : couche entre le matériel et les programmes utilisateurs. . 1. Système d’exploitation . .Programmes . .Matériel .Compilation, algorithmique .Architecture 4 / 41 Le . programme unique Principe : couche entre le matériel et les programmes utilisateurs. . 1. Système d’exploitation . .Programmes .Compilation, algorithmique .Système d’exploitation . .Matériel .Architecture 4 / 41 Le . programme unique Principe : couche entre le matériel et les programmes utilisateurs. Dans ce cours : aspects utilisation . 1. Système d’exploitation . .Programmes .Compilation, algorithmique .API .Système d’exploitation . .Matériel .Architecture 4 / 41 Problématiques . Rôle d’un système d’exploitation : I Gérer le matériel ; . 1. Système d’exploitation . . .Matériel 5 / 41 Problématiques . Rôle d’un système d’exploitation : I Gérer le matériel ; I Fournir une abstraction du matériel (bibliothèques) ; . 1. Système d’exploitation . .Bibliothèques . .API .Matériel 5 / 41 Problématiques . Rôle d’un système d’exploitation : I Gérer le matériel ; I Fournir une abstraction du matériel (bibliothèques) ; I Gérer et protéger des processus en parallèles ; . 1. Système d’exploitation . .Process .Process .Process .Bibliothèques . .API .Matériel 5 / 41 Problématiques . Rôle d’un système d’exploitation : I Gérer le matériel ; I Fournir une abstraction du matériel (bibliothèques) ; I Gérer et protéger des processus en parallèles ; I Permettre la gestion et administration de la machine. . 1. Système d’exploitation . .Process .Process .Process .Bibliothèques . .API .Matériel 5 / 41 Les services . Présentation : I Persistance : système de fichier ; I Temps : processus ; I Espace : mémoire ; I Interaction : signaux, synchronisation. 1. Système d’exploitation 6 / 41 Tentative de définition . Système d’exploitation : Ensemble d’éléments permettant la prise en charge de l’aspect matériel de l’ordinateur par la présence d’interfaces abstraites et assurant le partage et la protection de ce matériel. Exemples : UNIX, Mac OS X, GNU/Linux, Windows, *BSD, Android, iOS, … 1. Système d’exploitation 7 / 41 2. UNIX and co Qu’est ce que UNIX ? . Un peu d’historique : I En 1965, un projet ambitieux de réaliser un système d’exploitation multi-utilisateurs : Multics (Multiplexed Information and Computing Service). I En 1969, Bell Labs se retire du projet. K. Thompson, D.Ritchie initient un projet de système d’exploitation pour PDP-7. I En 1973, UNIX est réécrit en C, devient portable et est commercialisé. I En 1977, un fork apparaît à Berkeley : BSD. 2. UNIX and co 8 / 41 L’explosion I . 1970 1980 1990 2000 Time 7.2 FreeBSD 5.0 NetBSD BSD family 4.5 OpenBSD BSD (Berkeley Software Distribution) Bill Joy SunOS (Stanford) 10 5/09 Solaris (SUN) Darwin NextStep 3.3 MacOS X 5.7 Xenix OS Microsoft/SCO GNU/Hurd K16 GNU Project Richard Stallman Minix GNU/Linux Linus Torvalds 2.6.30.1 3.1.3a Andrew S. Tanenbaum Unix Time-Sharing System (Bell Labs) Ken Thompson Dennis Ritchie (C language) 10 HP-UX 11i v3 AIX (IBM) 6.1 UnixWare (Univel/SCO) IRIX (SGI) 7.1.4 MP4 6.5.30 System III & V family 2. UNIX and co 9 / 41 L’explosion II . 2. UNIX and co 10 / 41 Pourquoi UNIX ? . UNIX I est un système standardisé, I est un système répandu, I a un grand impact historique et pratique, I dispose de concept fondamentaux simples, I disposait d’une API concise. I possède une tradition d’ouverture du code. 2. UNIX and co 11 / 41 Normalisation . Il n’existe pas une normalisation d’UNIX mais un ensemble de normalisations qui disposent chacune de plusieurs versions. En particulier, on citera : I POSIX (Portable Operating System Interface) qui normalise les appels système, les commandes et utilitaires. I SUS (Single Unix Specication) qui est une famille de normes recoupant partiellement les normes POSIX et servant de références pour UNIX. 2. UNIX and co 12 / 41 Respect des normes . Il existe un programme de certification des systèmes d’exploitations. Seuls ceux conformes à la norme Single Unix Specication ont le droit de porter officiellement le nom UNIX (actuellement : AIX, HP/UX, Mac OS X, Solaris et z/OS). Cependant, un très grand nombre d’autres systèmes offrent un niveau suffisant de compatibilité. Parmi ceux-ci, il existe en certain nombre de programmes libres: GNU/Linux, OpenSolaris, NetBSD, FreeBSD, OpenBSD, … 2. UNIX and co 13 / 41 Modèle . Le modèle UNIX incarne un système d’exploitation : I monolithique : le système se compose d’un seul bloc s’exécutant en mode privilégié, les utilisateurs interagissent avec lui à l’aide d’appels système (syscall). I multi-programmé : les temps d’attentes des appels systèmes ne bloquent pas tout le système. I multitâche préemptif : le temps de calcul est partagé entre processeurs et utilisateurs avec ou sans leur coopération. 2. UNIX and co 14 / 41 Principe . . .Process .Process .Process .… .Synchrone .Syscall .Bibliothèques .Asynchrone . 2. UNIX and co .CPU .Mémoire .Disque .… . 15 / 41 3. Du programme au processus Définitions . I Programme : ensemble des fichiers textes décrivant un ensemble d’opérations à effectuer. I Exécutable : fichier binaire contenant les instructions machine correspondant aux opérations du programme ainsi que des instructions pour le charger en mémoire. I Processus : Exécutable en cours d’exécution sur la machine. 3. Du programme au processus 16 / 41 Du . code source à l’exécution . .fichier.c Cas des langages compilés : I le fichier source contient le code .gcc du programme ; I on compile le fichier pour .fichier.o produire du code exécutable ; I on fait le liens avec les fonctions .ld, as de bibliothèques (linkage) ; I on lance le programme. . 3. Du programme au processus .fichier ./fichier 17 / 41 Du . code source à l’exécution . .fichier.py Cas des langages interprétés : .python I le fichier source contient le code du programme ; I on convertit le langage vers un .fichier.pic langage intermédiaire ; I un interpréteur se charge alors d’exécuter le source et de gérer les fonctions de bibliothèques. . 3. Du programme au processus .python 18 / 41 4. Utilisation d’appel système Qu’est-ce que man ? . (u64)barbierm01@ange :~$ man man MAN(1) Utilitaires de l’afficheur des pages de manuel MAN(1) NOM man - Interface de consultation des manuels de référence en ligne ... DESCRIPTION ... 1 Programmes exécutables ou commandes de l’interpréteur de commandes (shell) ; 2 Appels système (Fonctions fournies par le noyau) ; 3 Appels de bibliothèque (fonctions fournies par les bibliothèques des programmes) ; 4 Fichiers spéciaux (situés généralement dans /dev) ; 5 Formats des fichiers et conventions. Par exemple /etc/passwd ; ... 4. Utilisation d’appel système (exemple) 19 / 41 Times en C . TIMES(2) Manuel du programmeur Linux TIMES(2) NOM times - Obtenir les statistiques temporelles du processus ... DESCRIPTION La fonction times() stocke les durées statistiques du processus en cours dans la structure struct tms pointée par buf. La structure struct tms est définie ainsi dans <sys/times.h> : struct tms { clock_t tms_utime ; /* durée utilisateur */ clock_t tms_stime ; /* durée système */ clock_t tms_cutime ; /* durée utilisateur des fils */ clock_t tms_cstime ; /* durée système des fils */ ... CONFORMITÉ SVr4, BSD 4.3, POSIX.1-2001. 4. Utilisation d’appel système (exemple) 20 / 41 Python os.times . Documentation >>> import os >>> help(os.times) Help on built-in function times in module posix : times(...) times() -> (utime, stime, cutime, cstime, elapsed_time) Return a tuple of floating point numbers indicating process times. >>> os.times() (0.040000000000000001, 0.02, 0.0, 0.0, 18191555.66) 4. Utilisation d’appel système (exemple) 21 / 41 En . shell Utilitaire times: (u64)barbierm01@ange :~$ help times times : times Display process times. Prints the accumulated user and system times for the shell and all of its child processes. Exit Status : Always succeeds. (u64)barbierm01@ange :~$ times 0m0.180s 0m0.050s 0m1.630s 0m0.470s 4. Utilisation d’appel système (exemple) 22 / 41 Des erreurs . Dans certains cas, les appels système peuvent échouer (arguments invalides, périphérique indisponible, …). L’appel retourne alors une valeur particulière (langage C, shell, …) ou lève une exception (python, ...). Ces comportements sont décrits dans les pages de manuel des appels systèmes. Exemple : Extrait de man 2 chdir ERREURS Suivant le type de système de fichiers, plusieurs erreurs peuvent être renvoyées, les plus courantes pour chdir() sont les suivantes : EACCES L’accès n’est pas autorisé sur un élément du chemin path. (Voir aussi path_resolution(7).) ... 4. Utilisation d’appel système (gestion d’erreur) 23 / 41 Et . des hommes Méthodologie : Lors de l’utilisation d’un appel système, il faut vérifier le bon déroulement de l’appel et gérer les erreurs. 4. Utilisation d’appel système (gestion d’erreur) 24 / 41 Erreurs en C . La norme POSIX utilise errno Principe : Lorsqu’un appel système rencontre une erreur, il positionne la valeur de la variable errno et retourne avec une valeur définie (en général −1). Il est alors possible d’afficher un message d’erreur avec le fonction perror. #include <errno.h> #include <stdio.h> void perror(const char *s) ; 4. Utilisation d’appel système (gestion d’erreur) 25 / 41 Erreurs en C . Exemple : #include <unistd.h> #include <errno.h> #include <stdio.h> ... if (chdir(”toto”) != 0) { /* En cas d’erreur */ perror(”chdir a échoué”) ; exit(-1) ; } /* suite du programme */ ... 4. Utilisation d’appel système (gestion d’erreur) 26 / 41 Erreurs en shell . Principe : En cas d’erreur, le programme affiche un message sur la sortie d’erreur et renvoie une valeur particulière (en général une valeur différente de 0). Exemple : (u64)barbierm01@ange :~$ ls toto ls : impossible d’accéder à toto : Aucun fichier ou dossier de ce type (u64)barbierm01@ange :~$ echo $ ? 2 4. Utilisation d’appel système (gestion d’erreur) 27 / 41 Erreurs en python . Principe : En cas d’erreur, un appel système retourne une exception. Ce système est basé sur le principe de la variable errno. Exemple : from os import * import errno ... try : os.chdir(”toto”) except OSError as err : print(”Erreur chdir :”,err) # gestion de l’erreur ... 4. Utilisation d’appel système (gestion d’erreur) 28 / 41 5. multi-utilisateurs Une machine / plusieurs utilisateurs . Sur une machine, il peut y avoir plusieurs utilisateurs. Chacun dispose d’un identifiant uid. Il existe également des groupes. Chaque groupe possède également un identifiant unique : le gid. Chaque utilisateur peut appartenir à plusieurs groupes. En shell, il est possible de connaître ces informations à l’aide de la commande id. Exemple : (u64)barbierm01@ange :~$ id uid=55537(barbierm01) gid=2001(personnels) groupes=24(cdrom),25(floppy),29(audio),44(video),... 5. multi-utilisateurs 29 / 41 Droits . I Les utilisateurs peuvent correspondre à des personnes physiques (ex : vous) ou à des service (ex : www pour le serveur web). I À chaque utilisateur et chaque groupe sont associées des permissions. I Il existe un super-utilisateur qui possède tous les droits. Usuellement, son nom est root et son uid est 0. I Dans un système UNIX, ces permissions sont mises en place par l’intermédiaire du système de fichier. Nous verrons cela plus tard. 5. multi-utilisateurs 30 / 41 Accès à distance . Principe : I Il peut y avoir plusieurs claviers / écrans reliés à un même ordinateur permettant ainsi à plusieurs personnes de l’utiliser simultanément. On parle alors de client léger. I Il est également possible de se connecter à un ordinateur à distance par exemple à l’aide de la commande ssh. Remarque : Il est important de ne pas éteindre les machines mais uniquement de se déconnecter (logout) via exit. 5. multi-utilisateurs 31 / 41 6. shell Interaction avec l’ordinateur . Il est possible d’interagir avec l’ordinateur à l’aide de plusieurs périphériques : I clavier; I souris; I tablette; I micro; I … 6. shell 32 / 41 Présentation des programmes . Il existe deux types principaux d’interfaces : I interface en ligne de commande : l’utilisateur entre des commande aux clavier, l’ordinateur affiche sous forme de texte le résultat et les éventuelles questions I GUI : (Graphical User Interface) l’interface graphique que vous connaissez sans doute déjà. 6. shell 33 / 41 Le . shell Principe : Le shell est un programme d’une interface en ligne de commande permettant de lancer n’importe quel programme et de tout faire. Et même le café : La plupart des shell fournissent de nombreuses fonctionnalités additionnelles : I complétion ; I facilité de rappel ; I facilités de programmation ; I raccourcis d’éditions ; I … 6. shell 34 / 41 Un, deux, trois, ... . Il existe de nombreux shell : I sh : le shell historique et normalisé par les normes UNIX ; I csh : un shell munie entre autre de facilités de programmation basées sur le langage C ; I ksh : est une “évolution” de csh ; I bash : (Bourne again shell) un shell courant et assez évolué ; I dash : (Debian Almquist shell) un shell plus minimaliste et qui tente d’être proche de la norme POSIX. 6. shell 35 / 41 Commande . Dans un shell, on rentre des commandes. Exemple : (u64)barbierm01@ange :~$ls -l -h /bin /var Les éléments de la commande sont appelés arguments et numérotés à partir de 0. Usuellement, les arguments commençant par des signes - sont des options de la commande et modifient son comportement. 6. shell 36 / 41 7. Contenu du cours Cours . Dans ce cours, on parlera principalement des objets suivants : I Shell : bash I Système d’exploitation : GNU/Linux CaLviX : association de défense et de promotion des logiciels libres du Calvados. http://www.calvix.org/ 7. Contenu du cours 37 / 41 Cours (suite) . Au niveau du système d’exploitation, les cours seront organisés autour des concepts suivants : I Système de fichier ; I Processus : I Mémoire ; I Signaux ; I Synchronisation. 7. Contenu du cours 38 / 41 Cours (méthode) . La présentation des appels système se fera principalement en insistant sur les concepts et à l’aide des langages suivants : I En C I En python I Par l’intermédiaire des utilitaires. 7. Contenu du cours 39 / 41 TD . / TP TD : I Utilisation des appels systèmes ; I Manipulation des concepts. TP : I Programmation de scripts shell ; I Un peu de python ; I Un projet à réaliser. Début des TDs/TPs à partie de la semaine 3 : semaine du 21 janvier. 7. Contenu du cours 40 / 41 Prochaine Séance . PAS de Cours magistral la semaine prochaine ! À mardi 22 janvier !! 7. Contenu du cours 41 / 41