UNSA UFR Sciences Université de Nice Sophia-Antipolis Département Informatique Licence d’informatique et Maîtrise EEA – Module L3I6 Cours Système et Réseaux Roger Rousseau CNRS-UNSA/I3S Version 4.1 Janvier 2006 01. INTRODUCTION 1.0 Sommaire Chapitre 01 suite(1) Introduction au cours Système et Réseaux 6) Architecture d’un système d’exploitation 7) Principales entités d’un système 1) But du cours 8) Traitement des erreurs 2) Prérequis 3) Planning prévisionnel des séances 4) Bibliographie 5) Documentation en ligne 3 01. INTRODUCTION 1.1 But du cours 4 01. INTRODUCTION But du cours 1.1 But du cours Contenu du cours Ensemble de connaissances de base sur les systèmes et réseaux Cours complété par des approfondissements en option de Master 1 d’informatique Tronc commun à tous les étudiants d’informatique, en option pour les étudiants du Master 1 EEA. ✱ Introduction à l’organisation d’un système d’exploitation, ✱ Etude de son "API" (Application Programming Interface) : description des appels ou « primitives » système, ✱ Programmation système en langage C-ANSI, 5 01. INTRODUCTION Contenu du cours 1.1 But du cours 6 01. INTRODUCTION 1.1 But du cours Choix du système étudié : Unix/Linux suite(1) Système ouvert : accès aux sources, au fonctionnement interne. ✱ Problématique de la programmation parallèle et de la gestion des ressources, ✱ Introduction à l’organisation des logiciels de communication réseau, ✱ Introduction à la programmation de clients-serveurs avec sockets. Système complet et portable, disponible sur tous les types d’ordinateur. Windows, qui avait beaucoup de retard sur Unix (jusqu’à Windows98) a désormais des concepts très voisins de Unix. La plupart des commandes Unix et shells sont disponibles aussi sous Windows (environnement cygwin gratuit). 7 8 Sommaire des chapitres Prérequis de cet enseignement Connaissances générales sur l’organisation et le fonctionnement d’un ordinateur (Ordre logique, pas celui mis en oeuvre) Programmation impérative en langage C-ANSI : ✱ tout le langage C, 1) Introduction et Entrées-sorties de fichiers 1 s. ✱ bibliothèque de base du langage C, 2) Système de gestion de fichiers 1 s. ✱ outils de programmation en C : éditeur de texte (Emacs), compilateur gcc, préprocesseur cpp (gcc -E), relieur, Makefile, débogueur, commandes de base (shell) du système Unix/Linux. 3) Processus 1 s. 4) Exclusion mutuelle 1 s. 5) Synchronisation 1 s. 9 01. INTRODUCTION 1.3 Sommaire des chapitres Sommaire des chapitres 10 01. INTRODUCTION Sommaire suite(1) 6) Ordonnancement des processus (sauf EEA) 1 s. 7) Gestion de mémoire virtuelle (sauf EEA) 1 s. 8) Tubes volatiles et persistants 1 s. 9) IPC système V (shm, msg, sem) (sauf EEA) 1 s. 10) Entrées-sortiés avancées (sauf EEA) 1 s. 11) Introduction aux réseaux 1.3 Sommaire des chapitres 1 s. suite(2) 12) Réseaux couches basses 1 s. 13) Sockets (1) primitives de base 1 s. 14) Sockets (2) primitives avancées 1 s. 15) Signaux 1 s. 16) Clients/Serveurs 1 s. Total en licence d’informatique : 16 s. Total en master 1 EEA : 12 s. 11 01. INTRODUCTION 1.4 Bibliographie Bibliographie sommaire 12 01. INTRODUCTION Bibliographie sommaire 1.4 Bibliographie suite(1) Sur les concepts des systèmes d’exploitation : Sur le langage C-ANSI : 3) A. Tannenbaum “ Systèmes d’exploitation : systèmes centralisés, systèmes distribués” MacGraw Hill, 1990. Traduction française (2e ed) : Dunod, 1999 1) S. Harbison & G. Steele Jr C, a reference manual (1st ed. 1984) Prentice Hall, 2nd edition, 1987, 404 p. 4) A. Siberschatz & P. Galvin “ Operating Systems Concepts ” 5e ed, Addison-Wesley, 1998. 2) B. Kernighan & D. Ritchie “The C Programming Language (1st ed. 1978)”, Prentice Hall, 2nd ed., 1988. Traduction française Masson, 1990. 5) J. Beauquier & B. Berard “Systèmes d’exploitation : concepts et algorithmes ” MacGraw Hill, 1990. 13 01. INTRODUCTION Bibliographie sommaire 1.4 Bibliographie 14 01. INTRODUCTION Bibliographie sommaire suite(2) 1.4 Bibliographie suite(3) Sur le système Unix : 6) W. Stevens “Advanced Programming in the Unix environment” Addison Wesley, 1992, 744 p. Sur le système Windows : 7) M.J. Bach “Conception du système Unix” Prentice Hall, 1986. Traduction française Masson, 1991. 10) A.D. Solomon “Le guide officiel sur l’architecture et le noyau Windows NT” 2nd ed., Microsoft Press, 1998. 8) J.M. Rifflet “La programmation sous Unix”, Ediscience intern., 3ème éd., 1993, 630 p. 9) U. Vahalia “Unix Internals : the new Frontiers” Prentice Hall, 1996. 15 16 Bibliographie sommaire Documentation en ligne suite(4) Sur les réseaux : Sur les primitives Unix : 11) W.R. Stevens “Unix Network Programming”, Prentice Hall, 1990, p. ✱ manuels des APIs sur votre machine: commandes man, xman. 12) D. Comer “Internetworking with TCP/IP”, Prentice Hall, , p. ✱ en format html sur votre machine (en français ou anglais) et sur internet en tapant par exemple sous Google les mots clés [ linux manual lseek(2) ] 13) J.M. Rifflet “La communication sous Unix”, Mc Graw-Hill Book Co., 1991, 410 p. 17 01. INTRODUCTION 1.5 Documentation en ligne Documentation en ligne 18 01. INTRODUCTION 1.5 Documentation en ligne Documentation en ligne suite(1) suite(2) Chapitres utiles (numérotation du système Linux) ✱ chapitre 2: toutes les primitives appels au noyau. ✱ chapitre 3: primitives de bibliothèques de service pour différents langages, mais surtout langage C. ✱ chapitre 4: fichiers spéciaux, c.-à-d. les pilotes des périphériques (disque dur, clavier/écran, graveur, lecteur de dvd, zip, mémoires usb, etc.) ✱ chapitre 5: format de fichiers et de protocoles ✱ chapitre 7: format des systèmes de fichiers, jeux de caractères, macros nroff, etc. ✱ chapitre 8: commandes d’administration (à partir d’un shell) ✱ chapitre 1: commandes de l’utilisateur (à partir d’un shell). Sur la programmation en C : ✱ Cours sur le langage C en licence d’informatique de l’UNSA de Gilles Menez : www-mips.unice.fr/˜menez/L2/L2cours.html ✱ Cours vidéo sur le langage C de l’Université de Paris VI : www.infop6.jussieu.fr/cederoms/Videoc2000/ 19 01. INTRODUCTION 1.5 Documentation en ligne Documentation en ligne 20 01. INTRODUCTION 1.5 Documentation en ligne Documentation en ligne suite(3) suite(4) Sur l’enseignement « Programmation système et réseau » de cette année à l’UNSA : Sur la programmation réseau : ✱ Cours réseau du CNRS : www.urec.fr/cours ✱ Site web officiel de cet enseignement : deptinfo.unice.fr/˜rr/l3systres/ ✱ Cours programmation réseau avec sockets, de Brian "Beej" Hall : www.ecst.csuchico.edu/˜beej/guide/net/html/. ✱ Site Wiki de cet enseignement (sujets de TDs et TPs avec corrigés) : deptinfo.unice.fr/twiki/bin/view/Linfo/SystemeEtReseau. 21 01. INTRODUCTION 1.6 Architecture d’un système en couches Architecture d’un système en couches 22 01. INTRODUCTION 1.6 Architecture d’un système en couches Architecture des systèmes en couches suite(1) utilisateurs utilisateurs applications sous−systèmes noyau Biblio− thèques ( executif ) Accès ✱ Dans le système Unix, l’accès au noyau se réduit aux appels au superviseur, en mode privilégié : requêtes au superviseur, primitives système ; ✱ Le système Unix admet plusieurs interprètes de commandes qui sont des programmes sans privilège : les shells réseau matériel du système d’exploitation S.G.B.D. Communication homme/machine utilisateurs utilisateurs 23 24 Architecture des systèmes en couches suite(2) Architecture des systèmes en couches suite(3) Exemples les programmes d’application n’appellent généralement pas directement les requêtes au noyau, mais des fonctions de bibliothèques, reliées au programme ; ✱ système organisé en couches : « the » (le premier système, 1968) ✱ les bibliothèques sont spécialisées par domaines ; ✱ autre système célèbre : ✱ les sous-systèmes sont très généraux et peuvent être très complexes ( cf. ci-après ). ✱ requêtes au superviseur : ✱ OSI (7 couches normalisées) cf. man(2) fork , read, write, sbrk ... 25 01. INTRODUCTION 1.6 Architecture d’un système en couches Architecture des systèmes en couches ✱ ✱ suite(4) 26 01. INTRODUCTION 1.6 Architecture d’un système en couches Appels système vs fonctions de bibliothèque processus utilisateur fonctions de bibliothèque : cf. man suite(2) printf , fprintf , malloc ... autres bibliothèques de statistiques, code d’éléments finis, structures de données, algorithmes généraux, EAO ... code de l’application fonctions de bibliothèque malloc sous-systèmes : • client-serveur de bases de données, appels sbrk système • système graphique X11, système de communication sur le réseau (montages NFS, Web, mail electronique, ftp...) noyau ( exécutif ) 27 01. INTRODUCTION 1.7 Normes du système Unix 28 01. INTRODUCTION 1.8 Traitement des erreurs Traitement des erreurs Normes du système Unix Origine : Unix V6, Bell Labs = 1978 Unix V7 : 1980 (UNSA, Info., LSI-11) Unix BSD 4.2 : 1982 Unix BSD 4.3 : 1985 Unix Système V release 3 : 1986 ANSI C : 1989 Unix Système V release 4 : 1990 IBM AIX : 1990 (basé System V) Unix POSIX.1 : 1991 Unix BSD 4.3+ : 1992 Linux : 1993 SUN-Solaris : 1994 DEC(COMPAQ) OSF/1 : 1995 APPLE Mac OS X : 2001 Le langage C ne dispose pas (hélas) de mécanisme d’exceptions : il utilise des comptes-rendus ✱ presque toutes les requêtes au système sont des fonctions qui rendent une valeur : • entière : int, unsigned int, long , • pointeur de chaîne : har* • pointeur de structure : strut dirent * 29 01. INTRODUCTION Traitement des erreurs ✱ 1.8 Traitement des erreurs 30 01. INTRODUCTION 1.8 Traitement des erreurs Traitement des erreurs : errno suite(1) la valeur rendue par ces fonctions est : • normale : positive ou nulle, non void , • anormale : négative ou void => il faut toujours tester le compte-rendu de chaque appel ! 31 ✱ Syntaxe : extern int errno ; ✱ Sémantique : contient le n◦ de la dernière erreur détectée par un appel système. N’est pas remise à zéro à chaque appel. cf. intro(2) pour les différents codes. 32 Traitement des erreurs : strerror ✱ Syntaxe : #inlude <string.h> har* strerror ( int errnum ); ✱ Sémantique : rend un message en clair associé à errnum, typiquement la valeur de errno. Traitement des erreurs : perror (3) ✱ Syntaxe : #inlude <stdio.h> void perror ( onst har* mesg ); ✱ Retour : pas de code de retour, ✱ Sémantique : Imprime sur stderr le message fourni, puis le message associé à errno. 33 01. INTRODUCTION 1.8 Traitement des erreurs 34 01. INTRODUCTION Exemple : ls1 Exemple : ls1 suite(1) int main ( int arg, har* argv[ ℄ ) { DIR* dirp; strut dirent* direntp; /* programme ls1 : commande ls très élémentaire, * utilise : diretory(3) */ #inlude #inlude #inlude #inlude 1.8 Traitement des erreurs /* test des arguments d'appel */ if (arg != 2){ fprintf(stderr, USAGE); exit(1); } ... <sys/types.h> <dirent.h> <stdio.h> <string.h> #define USAGE "syntaxe : ls1 nom_répertoire\n" 35 01. INTRODUCTION 1.8 Traitement des erreurs Exemple : ls1 36 01. INTRODUCTION 1.8 Traitement des erreurs Exemple : ls1 suite(2) ... /* ouverture du répertoire */ if ( (dirp = opendir (argv[1℄)) == NULL){ fprintf (stderr, "Ne peut pas ouvrir %s\n", argv[1℄); fprintf (stderr, "errno: %s\n", strerror(errno) ); exit(2); } ... suite(3) /* lecture complète de toutes les entrées du répertoire et * impression des noms de chaque fichier */ while ( (direntp = readdir(dirp)) != NULL){ printf("%s\n", direntp->d_name); } /* fermeture du répertoire */ losedir(dirp); exit(0); }/* main */ 37 01. INTRODUCTION 1.8 Traitement des erreurs 38 01. INTRODUCTION Procédures de traitement d’erreur de W. Stevens 1.8 Traitement des erreurs Procédures de traitement d’erreur de Stevens suite(1) (non standard) ✱ Syntaxe : #inlude <stevens.h> har* pname ; void errno_return ( void errno_exit ( void errno_dump ( void err_return ( void err_exit ( ✱ onst onst onst onst onst har* har* har* har* har* fmt, fmt, fmt, fmt, fmt, ... ... ... ... ... ) ) ) ) ) 39 Retour : • errno_return et err_return terminent par return ; • errno_exit et err_exit terminent par exit(1) ;, • errno_dump termine par abort() 40 Procédures de traitement d’erreur de Stevens suite(2) Macros simplifiées de Rousseau Sémantique : • fmt: format du message d’erreur à la printf , suivi des arguments correspondants aux champs ‘%’ ; ✱ ✱ • errno_return, errno_exit et errno_exit impriment de plus le message associé à la variable errno. • pname : nom du programme issu de argv[0] (option). Syntaxe : #inlude<stevens.h> void ERRNO_RETURN void ERRNO_EXIT void ERRNO_DUMP void ERR_RETURN void ERR_EXIT 41 01. INTRODUCTION 1.8 Traitement des erreurs Macros simplifiées 42 01. INTRODUCTION Macros simplifiées suite(1) ✱ Retour : • ERRNO_RETURN et ERR_RETURN terminent par return ; • ERRNO_EXIT et ERR_EXIT terminent par exit(1), • ERRNO_DUMP termine par abort () ✱ 1.8 Traitement des erreurs suite(2) Sémantique : • Ces macros fonctionnent comme les primitives de Stevens, de même nom, en minuscule. • Inutile de fournir un message d’erreur avec format : => le nom du fichier et le numéro de ligne sont affichés. • ERRNO_RETURN, ERRNO_EXIT et ERRNO_EXIT impriment de plus le message associé à la variable errno. 43 01. INTRODUCTION 1.8 Traitement des erreurs 44 01. INTRODUCTION Exemple : micro shell Exemple : micro shell /* msh : micro shell ultra élémentaire ... 1.8 Traitement des erreurs suite(1) #define MAXLINE 1000 * Processus du shell : stati void print_prompt(int pid, int status); * tantque non eof /* imprime l’invite avec le pid et le code de retour - lire une ligne, créer un processus fils (fork) et lui passer le nom de la commande à exécuter * - attendre fin du processus fils * * de la dernière commande exécutée. * */ int main(void){ har buf [ MAXLINE ℄; /* nom mde tapée */ pid_tpid; /* pid du fils */ int status; /* ode de retour du fils */ ... * Processus fils : - chargement et exécution de la cmde demandée ; - envoi du code de retour à son père */ #inlude <sys/types.h> #inlude <sys/wait.h> #inlude <stdio.h> * * 45 01. INTRODUCTION Exemple : micro shell 1.8 Traitement des erreurs 46 01. INTRODUCTION Exemple : micro shell suite(2) print_prompt(0,0); /* demande 1ère ommande */ while (fgets(buf, MAXLINE, stdin) != NULL) { /* buf = ligne lue terminée par "\n\0" */ /* il faut remplaer \n par 0 pour la mde exe */ buf [ strlen(buf)-1 ℄ = 0; if ( (pid = fork ()) < 0 ) ERR_EXIT; ... 47 1.8 Traitement des erreurs suite(3) if (pid == 0) { /* FILS : exéute la mde de nom buf */ exelp (buf, buf, (har*) 0); /* 'est le progr. qui exéute exit(k) */ /* on ne passe ii qu'en as d'erreur */ ERR_RETURN; exit (127); /* signale le problème au père */ }/* fin du fils */ 48 Exemple : micro shell suite(4) /* PÈRE : */ if ( (waitpid (pid, &status, 0)) < 0 ){ err_mess( "waitpid error\n" ); exit(2); } print_prompt(pid, status); /* mde suivante */ } /* while */ exit(0); }/* main */ 49 Table des matières