programmation système et réseau sous unix · programmation système et réseau sous unix bruno...
TRANSCRIPT
Programmation système et réseau sous unix
Bruno GAS
Orientation IRSI - 2016/2017
Organisation de l’UEEncadrement:• Responsable UE: Bruno Gas ([email protected])• Chargée(e) de TP et projets:Séances (30h):• 5 cours - 10h• 3 TPs - 12h (2 groupes)• 2 séances de projets - 8h (2 groupes)• Libre service en salle 221.
Organisation de l’UEEvaluation (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 http://www.edu/upmc/sdi/i4• Login/Passwd: Communiqués au premier cours• M1 Orientation IRSI -> Les unités d’enseignement -> Programmation et système sous Linux -> Intranet• M1 I4 -> Détail des UEs -> Programmation système sous Linux -> Intranet
Organisation de l’UEEmploi du temps
• COURS 1/5: Mercredi 15 septembre, 8h30-10h30 • COURS 2/5: Mercredi 22 septembre, 8h30-10h30 • TP 1/3, gr C1+C2: Lundi 26 septembre, 13h45 - 18h • TP 1/3, gr C3+C4: Mercredi 28 septembre, 13h45 - 18h • COURS 3/5: Lundi 10 octobre, 13h45 - 15h45 • COURS 4/5: Mercredi 14 octobre, 8h30-10h30 - CC (QCM) • TP 2/3, gr C1+C3: Lundi 24 octobre, 13h45 - 18h • TP 2/3, gr C2+C4: Mardi 25 octobre, 13h45 - 18h • TP 3/3, gr C1+C3: Lundi 7 novembre, 8h30-12h30 • TP 3/3, gr C2+C4: Mercredi 9 novembre, 13h45 - 18h • COURS 5/5: Jeudi 17 novembre, 8h30-10h30 • PROJET 1/2, gr C2+C4: Lundi 21 novembre, 8h30-12h30 • PROJET 1/2, gr C1+C3: Jeudi 24 novembre, 8h30-12h30 • PROJET 2/2, gr C1+C3: lundi 27 novembre, 13h45 - 18h • PROJET 2/2, gr C2+C4: Jeudi 1 décembre, 8h30-12h30
Examens • Examen de TP (note d'écrit), Gr C2+C4: Jeudi 15 décembre • Examen de TP (note d'écrit), Gr C1+C3: Jeudi 15 décembre • Remise des projets (note de TP), Vendredi 16 décembre
Plan du cours
• Unix - utilisation / fichiers
• Création et synchronisation de processus
• Communication par signaux et tubes
• Programmation réseau
• Threads
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/
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)
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
Le système de gestion de fichiers
C’est un outil de manipulation des fichiers
• Pour le système
• Pour les utilisateurs
Stockage des données des utilisateurs
Stockage des objets importants du système • mémoire • terminaux, • périphériques variés •...
• 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
• Localisation sur le disque • Propriétaire et groupe propriétaire • Droits d’accès • Taille • Date de création
Contient les propriétés du fichier, mais pas son nom:
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
Graphe acyclique:L’ensemble des algorithmes simples utilisables sur des graphe acycliques comme le parcours, la vérification des fichiers libres, etc. deviennent beaucoup plus difficiles à écrire pour des graphes admettant des cycles.
Des algorithmes de ramasse-miettes doivent être utilisés pour savoir si certains objets sont utilisés on non et pour récuperer les inodes ou blocs perdus après un crash.
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)
Character devices: • Terminaux • Imprimantes • Mémoirte, ...
Block devices: • Disques • Bandes magnétiques • Lecteurs/graveurs DVD, ...
Périphériques pour lesquels la communication se fait octets par octets
Périphériques pour lesquels la communication se fait par blocs d’octets
Création / édition d’un fichier
• Créer un fichier : touch nom_fic <CR>
• Afficher le contenu d’un fichier :
• cat nom_fic <CR>
• more nom_fic <CR>
• Editer un fichier : vi nom_fic <CR> D
C I
<Escape><i>
<:>
<wq>
<q!>
Mode déplacement
Mode insertionMode commande
Droits d’accès aux fichiers et répertoires
• Pour chaque fichier, 3 classes d’utilisateurs :
• Pour chaque classe d’utilisateur, 3 types d’accès :
• Exemples :
u g o
r w x -
user group others
read write 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
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
• Exemples :
chmod u+rw toto.txt chmod o-rwx toto.txt chmod a+r toto.txt chmod go=r toto.txt
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) :
• Les entrées/sorties standard peuvent être redirigées :
0 : stdinput 1 : stdoutput 2 : stderror
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>
• ls | grep ‘toto’ <CR>
cat more
Lignes du fichier
fichier «toto.txt» Affichage page par page
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>
• ls | grep ‘toto’ <CR>
• grep ‘^#’ toto.txt <CR> Rechercher toutes les lignes qui commencent par #
<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
Fichiers: Appels systèmes de base
• Unix fournit deux ensembles de fonctions d’entrées/sorties
• Les appels système
• La bibliothèque d’entrées/sorties standard (printf, scanf, fprintf, fscanf...)
• Primitives réalisées directement par le noyau • Manipulation directe des fichiers • Entrées/sorties de données non typées
• Entrées/sorties «haut niveau» • Conversions de données
Exemple: CopieFichier.c
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.
• Les processus ne sont pas stoppés pendant l’écriture (gestion asynchrone)
• Accès concurrent optimisé
Buffer cache
programmeDisquee/s
update
autre programme option O_SYNC fonction int sync (void)