Programmation système et réseau sous unix
Transcription
Programmation système et réseau sous unix
Programmation système et réseau sous unix Bruno GAS ! Orientation IRSI - 2014/2015 Organisation de l’UE Encadrement: • Responsable UE: Bruno Gas ([email protected]) • Chargée(e) de TP et projets: Soukeyna Bouchebout ([email protected]) ! Séances (30h): • 3 cours - 6h • 3 TPs - 12h (3 groupes) • 3 Projets - 8h (3 groupes) Organisation de l’UE Evaluation (3 ECTS): • Note d’écrit: Contrôle de TP sur machine (écrit ou oral au rattrapage) Documents écrits et programmes réalisé en TP autorisés Pas de machines personnelles, pas d’accès à Internet • Note de TP: évaluation du projet (non rattrapable) Rapport du projet, codes sources, exécutable Projets en monômes. ! Documentation - énoncés de TP/projets: • Site Internet de la spécialité: http://www.edu/upmc/sdi/isi • Login/Passwd: M1IRSI2014 / esclan14 Organisation de l’UE Emploi du temps • • • • • • • • • • • • • Cours COURS 1/4: Mercredi 1er octobre, 10h45-12h45 COURS 2/4: Mercredi 8 octobre, 10h45-12h45 TP 1/3, gr C1+C2: Mercredi 15 octobre, 8h30-12h45 COURS 3/4: Mercredi 22 octobre, 10h45-12h45 TP 1/3, gr C3+C4: Mercredi 29 octobre, 8h30-12h45 TP 2/3, gr C3+C4: Jeudi 13 novembre, 8h30-12h45 TP 2/3, gr C1+C2: Jeudi 20 novembre, 8h30-12h45 TP 3/3, gr C3+C4: Mercredi 26 novembre, 8h30-12h45 TP 3/3, gr C1+C2: Jeudi 27 novembre, 8h30-12h45 PROJET 1/2, gr C1+C2: Mercredi 3 décembre, 8h30-12h45 PROJET 1/2, gr C3+C4: Jeudi 4 décembre, 8h30-12h45 PROJET 2/2, gr C1+C2: Mercredi 10 décembre, 8h30-12h45 PROJET 2/2, gr C3+C4: Jeudi 11 décembre, 8h30-12h45 ! • • • Examens Examen de TP (note d'écrit), Gr C1+C2: Jeudi 18 décembre, 13h45-15h45 Examen de TP (note d'écrit), Gr C3+C4: Jeudi 18 décembre, 15h45-17h45 Remise des projets (note de TP), Date à définir (Vendredi 19 décembre) Plan du cours • Unix - utilisation / fichiers • Création et synchronisation de processus • Communication par signaux et tubes • Programmation réseau Introduction • Unix est un système d’exploitation • Né aux laboratoires Bell (AT&T) en 1970 (Ken Thompson, Dennis Ritchie, Brian Kernighan) • Ecrit en langage C en 1973 • Système multi-tâches et multi-utilisateur Source: http://www.commentcamarche.net/ Source: wikipedia Vue générale du système Un système d’exploitation est un programme qui sert d’interface entre un utilisateur et un ordinateur C’est aussi un ensemble de procédures qui permet à un groupe d’utilisateurs de partager efficacement un ordinateur Point de vue utilisateur Structure en couches et «Encapsulation» Chaque couche est conçue pour pouvoir être utilisée sans connaître les couches inférieures Architecture du noyau Structure en éléments disjoints et programmables de façon disjointe Pourquoi unix ? • Le prix • Disponibilité des sources • Intelligence des solutions mises en oeuvre • Système simple et ouvert • Grande ressource bibliographique Raisons du succès d’unix/linux • Ecrit dans un langage de haut niveau (C) • Une interface simple et puissante (les «shells») • Des primitives puissantes qui simplifient l’écriture des programmes • Multi-utilisateurs et multitâches • Format générique pour les fichiers (flot d’octets) • Architecture de la machine cachée à l’utilisateur • ... Points faibles • Fragilité du SGF (corrigée avec les SGF journalisés) • Gestion et rattrapage des interruptions inadaptés au temps réel • Mécanisme de création/gestion des processus lourd (amélioré avec la gestion des threads) Le système de gestion de fichiers C’est un outil de manipulation des fichiers • Pour le système • Pour les utilisateurs Stockage des objets importants du système • mémoire • terminaux, • périphériques variés •... Stockage des données des utilisateurs • Partage: utilisation d’un même fichier par plusieurs utilisateurs • Efficacité: utilisation de cache, uniformisation des accès • Protection des éléments important du système • Protection inter-utilisateurs Concept de fichier L’unité logique de base est : le fichier Suite finie de bytes matérialisée par des blocs disques et une inode Contient les propriétés du fichier, mais pas son nom: • Localisation sur le disque • Propriétaire et groupe propriétaire • Droits d’accès • Taille • Date de création Un nom est lié à un fichier mais un fichier n’est pas lié à un nom. Un fichier peut exister sans avoir de nom dans l’arborescence Arborescence • Une seule racine • Une structure dynamique • Une grande puissance d’expression • Un graphe acyclique Arborescence sous linux • • • • • • • • • • • • • • • • • • • / /bin /boot /dev /etc /etc/rc.d /etc/X11 /etc/sysconfig /etc/cron /home /lib /mnt /opt /root /sbin /tmp /usr /var /proc Racine Les fichiers exécutables (en binaire) Le noyau et les fichiers de démarrage Fichiers spéciaux de communication avec les périphériques Fichiers de configuration du système scripts de démarrage du système scripts de configuration du serveur X configuration des périphériques description des tâches périodiques à effectuer Racine des répertoires personnels des utilisateurs Bibliothèques et modules du noyau Racine des points de montage des systèmes de fichier périphériques Applications supplémentaires Répertoire personnel de l’utilisateur root Fichiers exécutables pour l’administration du système Stockage des fichiers temporaires Programmes accessibles à tout utilisateur (structure id. à la racine) Données variables liées à la machine (ex: fichiers d’impression) Pseudo répertoire contenant une «image» du système Types de Fichiers • Fichiers répertoires : catalogue de noms de fichiers • Fichiers standards : les fichiers textes, les programmes, tout ce qui est manipulé par l’utilisateur • Liens symboliques : pointeur sur un autre fichier • Fichiers spéciaux : fichier associé à un périphérique. Lorsqu’on agit sur ce fichier, on agit en fait sur le périphérique • Exemple: le répertoire /dev : Il contient les dispositifs matériels (périphériques, devices) Périphériques pour lesquels la communication se fait octets par octets Character devices: • Terminaux • Imprimantes • Mémoirte, ... Périphériques pour lesquels la communication se fait par blocs d’octets Block devices: • Disques • Bandes magnétiques • Lecteurs/graveurs DVD, ... Création / édition d’un fichier • Créer un fichier : touch nom_fic <CR> • Afficher le contenu d’un fichier : • cat nom_fic <CR> Mode déplacement • more nom_fic <CR> D • Editer un fichier : vi nom_fic <CR> <:> <Escape> <i> <wq> <q!> C Mode commande I Mode insertion Droits d’accès aux fichiers et répertoires • Pour chaque fichier, 3 classes d’utilisateurs : ! u user g group o others • Pour chaque classe d’utilisateur, 3 types d’accès : ! • Exemples : r read w write x - execute none Modifier les droits • Pour modifier les droits, il faut être propriétaire du fichier: • chmod <mode> <fichier> <CR> opérateurs : + : ajoute un droit - : retire un droit = : droit absolu • Exemples : chmod chmod chmod chmod u+rw toto.txt o-rwx toto.txt a+r toto.txt go=r toto.txt opérandes: u : droits du propriétaire g : droits du groupe du propriétaire o : droits des autres utilisateurs a : droits de tous les utilisateurs Redirections • Une commande unix : • lit ses données sur le fichier d’entrée standard (le clavier) • écrit ses résultats sur le fichier standard de sortie (l’écran) • écrit ses erreurs sur le fichier standard d’erreur (l’écran) • A chaque fichier standard correspond un descripteur (ou numéro) : ! 0 : stdinput 1 : stdoutput 2 : stderror • Les entrées/sorties standard peuvent être redirigées : cat toto.txt > fichier.txt ls >> fichier.txt ls 2> messages.txt mail [email protected] < fichier.txt Tubes (Pipes) • Système d’échange d’informations entre deux commandes exécutées en parallèle • Exemple : • cat toto.txt | more <CR> cat ! more fichier «toto.txt» ! • ls | grep ‘toto’ <CR> Affichage page par page Lignes du fichier Commande grep • Recherche les occurrences d’une chaîne de caractères • grep [option] <critere> [fichier (s)] <CR> • Exemple : • ls > ls.txt <CR> • grep ‘toto’ ls.txt <CR> <critere> : [...] un intervalle de caractères [^...] complément de l’intervalle indiqué . n’importe quel caractère * répétition du caractère précédent ^ en début de ligne pour la recherche $ en fin de ligne pour la recherche • ls | grep ‘toto’ <CR> • grep ‘^#’ toto.txt <CR> Rechercher toutes les lignes qui commencent par # Fichiers: Appels systèmes de base • Unix fournit deux ensembles de fonctions d’entrées/sorties • Les appels système Primitives réalisées directement par le noyau • Manipulation directe des fichiers • Entrées/sorties de données non typées • ! ! • La bibliothèque d’entrées/sorties standard (printf, scanf, fprintf, fscanf...) Entrées/sorties «haut niveau» • Conversions de données • Exemple: CopieFichier.c // CopieFichier.c! // Ecriture d’un fichier dans un autre! // usage : copie fichier_source fichier_destination! ! ! #include #include #include #include #include #include ! <sys/types.h> <sys/stat.h> <sys/fcntl.h> <sys/unistd.h> <sys/errno.h> <sys/stdio.h> // // // // // // définitions de types (ex: size_t)! informations sur les fichiers! ctrl des descripteurs de fichiers ! fonctions e/s bas niveau! gestion des erreurs! fonctions e/s haut niveau! void main (int arc, char *argv[]) {! int fd1, fd2, buffer[1024];! ssize_t n;! ! if (argc != 3) {! printf (‟usage:%s source cible\n‟, argv[0]);! exit(1);! }! ! ... Exemple: CopieFichier.c (suite) fd1 = open(argv[1], O_RDONLY);! if (fd1 == -1) {! perror(‟open1‟);! exit(1);! }! ! fd2 = open(argv[2], O_WRDONLY | O_TRUNC | O_CREAT);! if (fd2 == -1) {! perror(‟open2‟);! exit(1);! }! ! do {! n : read(fd1, (void *) buffer, sizeof(buffer));! if (n>0)! if (write(fd2, (void*) buffer, n) != n)! perror (‟write‟);! }while (n>0)! ! close (fd1);! close (fd2);! exit(0);! } ! Descripteurs de fichiers • Les descripteurs sont de simples entiers alloués lors de l’ouverture d’un fichier et désalloués lors de sa fermeture. • Pour le noyau, ils représentent des entrées dans une table de descripteurs contenant les informations de contrôle. • Trois descripteurs ont une signification particulière : • Le descripteur 0 : entrée standard • Le descripteur 1 : sortie standard • Le descripteur 2 : sortie d’erreur • Exemple : char buffer[1024];! write(0, (void*)buffer, 1024); ? printf(buffer); Le buffer cache • Lors d’une écriture dans un fichier, les données sont d’abord écrites dans des tampons mémoire, via le buffer cache, puis sauvegardées régulièrement sur le disque par le processus update. programme ! e/s Disque ! update ! Buffer cache ! autre programme option O_SYNC fonction int sync (void) • Les processus ne sont pas stoppés pendant l’écriture (gestion asynchrone) • Accès concurrent optimisé