Programmation système dans l`environnement Unix

publicité
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
Téléchargement