Vous êtes sur la page 1sur 201

SYSTMES DEXPLOITATION

&
RSEAUX INFORMATIQUES
Notes de cours 1999-2000
par
Pierre Nugues

ISMRA,

Bureau C 108, tlphone 231-45-27-05

6, boulevard du Marchal Juin

pnugues@greyc.ismra.fr

14050 Caen

www.ensicaen.ismra.fr/~nugues

Caen, Tous droits rservs, 1999

Rvision : 27/10/1999

dition 1999-2000

Introduction
Ce cours prsente les principaux points thoriques du fonctionnement des
systmes dexploitation. Il les illustre par un certain nombre dexemples de mise
en uvre quil tire essentiellement du systme Unix et accessoirement de
Windows et de Java.
Lhistoire de linformatique est trs brve les ordinateurs sont ns avec la
seconde guerre mondiale et pourtant, elle a connu des grandes volutions.
leur apparition, les ordinateurs taient trs coteux et rservs aux grandes
entreprises; celles-ci nen possdaient au dpart que quelques exemplaires. Ces
ordinateurs centraux sont rapidement devenu un auxiliaire dadministration et
ils se sont diffuss dans les diffrents services (departments en anglais) : financier,
comptabilit, etc. Pour rendre linformatique plus adapte et plus abordable, des
fabricants se sont alors mis produire des mini-ordinateurs dpartementaux .
Ces ordinateurs fonctionnaient avec des systmes dexploitation qui leur taient
propres, chaque machine ou chaque constructeur, par exemple, MVS pour
IBM ou VMS pour DEC.
Aujourdhui, linformatique, aussi bien dans les entreprises, que dans la
recherche ou lenseignement, utilise des machines plus petites, fonctionnant avec
des systmes dexploitation caractre universel. Parmi ces systmes
dexploitation, deux se distinguent particulirement, un systme mono-utilisateur,
Windows, et un autre multi-utilisateurs et multitches, Unix. Dune manire
grossire et contestable avec lapparition des rseaux on peut affirmer que le
premier systme est destin des ordinateurs individuels, tandis que lautre est
rserv au travail en groupe. Les systmes actuels grent, par ailleurs une interface
graphique, avec comme pionnier le Finder du Macintosh. Les systmes
dexploitation actuels ont intgr de faon gnralise le multitches et le service

dition 1999-2000

plusieurs utilisateurs avec la gnralisation des architectures client-serveur, par


exemple avec OS/2 dIBM et Windows/NT.
Parmi ces systmes, Unix, qui est le plus ancien, est celui qui offre le plus de
richesses, le plus dhomognit et le plus de souplesse; il dispose, dans les
versions standards, dextensions pour les rseaux et pour le graphique. Pour cette
raison, nous lavons choisi comme le centre de ce cours1. Par ailleurs, le systme
MS-DOS puis Windows, en voluant, ont incorpor beaucoup de caractristiques
de leur prdcesseur. Les noyaux de ces systmes se modifieront certainement
avec lvolution des techniques. Cependant, les principes sur lesquels ils se
fondent, et plus forte raison, leur dcor , devraient rester relativement stables,
au moins pour les quelques annes venir.
Ltude des systmes dexploitation forme une part trs importante de
linformatique comme discipline et, la diffrence des ses autres domaines, cest
une part qui lui est propre. Ceci au contraire de lalgorithmique ou de la logique,
par exemple, qui se partagent avec les mathmatiques. C'est aussi une discipline
technique qui plus encore que les autres est sujette au renouvellement.
On peut diviser les systmes dexploitation classiques en quatre parties
principales :
1. les processus, qui correspondent lexcution des programmes. Ces
processus pouvant sexcuter simultanment dans un systme multitche. Le
systme a pour fonction de les crer, de les grer, de les synchroniser, ainsi que
de leur permettre de communiquer entre eux;
2. la gestion de la mmoire, qui permet de transfrer les programmes et les
donnes ncessaires la cration des processus, dun support secondaire, par
exemple un disque, vers un support central, o a lieu lexcution des processus.

Une autre raison essentielle est la disponibilit, lISMRA, dun systme Unix en rseau.

Rvision : 27/10/1999

dition 19992000

Le systme devra garder la trace des parties utilises et libres de la mmoire


ainsi que grer les transferts entre les mmoires principale et secondaire;
3. le systme de fichiers, qui offre lutilisateur une vision homogne et
structure des donnes et des ressources : disques, mmoires, priphriques.
Le systme gre la cration des fichiers, leur destruction, leur correspondance
avec les dispositifs physiques, ainsi quun certain nombre dautres
caractristiques, telles que la protection. Il les organise enfin, en gnral, en
une structure arborescente;
4. les entres-sorties, qui correspondent aux mcanismes quutilisent les
processus pour communiquer avec lextrieur. Ces entres-sorties font
largement appel aux couches les plus proches du matriel, et dont le systme
tente de masquer les particularits aux utilisateurs.
Les systmes dexploitation modernes intgrent par ailleurs dautres
caractristiques. Ces dernires concernent notamment deux volutions majeures
des systmes informatiques. La premire est linterconnexion des diffrentes
machines et des diffrents systmes par des rseaux locaux ou tendus. La
seconde est la disparition des crans de textes et leur remplacement par des
dispositifs fentres multiples disposant de proprits graphiques. Ces deux
techniques sont, de plus, troitement imbriques. Les systmes dexploitation
fonctionnent donc, ou vont fonctionner, en rseau et ils consacreront une part
importante de leurs tches grer le fentrage, le graphisme, et les interactions
entre les diffrentes machines. Ce cours complte les 4 parties prcdentes par
des tudes sur :
5. les

rseaux dordinateurs,

avec

les

protocoles

de

communication,

dinterconnexion et dapplication. Les rseaux permettent de mettre en uvre


une nouvelle architecture informatique fonds sur des clients et des serveurs;
6. Les systmes rpartis avec les protocoles dappels de procdures distance
qui leur sont associs. Les systmes rpartis actuels trouvent des applications

Systmes dexploitation & Rseaux informatiques

dition 1999-2000

des architectures clients-serveurs de fichiers ou d'applications, tels que des


bases de donnes.
7. les systmes de fentrage graphique, ainsi que le modle de serveur dcran2.
Le systme dexploitation correspond linterface entre les applications et le
matriel. Le programmeur dapplications naborde que rarement sinon jamais
son code interne. Il lutilise par lintermdiaire d appels systme . Les appels
systmes sont souvent accessibles partir dun langage de programmation,
notamment en C avec le systme Unix. Ces appels permettent deffectuer la
plupart des oprations sur les entits du systme dexploitation et, par exemple,
de crer et dtruire des processus, des fichiers, de raliser des entres-sorties, etc.
Une terminologie tend a simposer pour dnommer lensemble des appels
systme, quils concernent un systme dexploitation ou nimporte quelle
dapplication informatique : les API (Application Programming Interface).
Un utilisateur peut lui aussi dans une certaine mesure manipuler un
systme dexploitation, sans pour autant avoir crer un programme. Il le fait par
lintermdiaire dun interprte de commandes (un shell en anglais) muni dune
syntaxe et ventuellement programmable. Cet interprte peut accepter les lignes
de commandes comme sous MS-DOS ou sous Unix. Il peut aussi grer les
mtaphores graphiques comme avec les Macintoshes, Windows ou XWindow.

Ce dernier point fait partie dun autre cours pour les tudiants de lENSI.

Rvision : 27/10/1999

dition 19992000

Bibliographie
La bibliographie sur les systmes dexploitation est trs abondante et elle se
renouvelle trs rapidement. Elle comprend la fois des revues de recherche, des
ouvrages pdagogiques et des ouvrages sur la programmation et l'utilisation d'un
systme particulier. La liste que nous donnons concerne ne concerne pas la
recherche et nest absolument pas exhaustive. Par ailleurs, cette recherche est
largement passe des laboratoires universitaires ceux de quelques industriels :
Microsoft et IBM notamment. Notre liste fournit seulement les rfrences que
nous pensons tre les plus utiles.
Littrature gnrale sur les systmes dexploitation
A. Tanenbaum, Modern Operating Systems, PrenticeHall, 1992, est une rfrence
gnrale trs pdagogique. Distributed Computer Systems, Prentice Hall, 1994,
examine plus en dtail les systmes rpartis. Operating Systems, 2nd ed., Prentice-Hall,
1997, est une rfrence par le mme auteur qui comprend le code, trs formateur,
dun systme dexploitation voisin dUnix. Cette dition ne comprend pas les
systmes rpartis.
A. Silberschatz and P. Galvin, Operating System Concepts, 5th ed., Addison Wesley,
1997, est un ouvrage plus conceptuel et plus thorique que le prcdent. Il reste
nanmoins trs clair. Il est traduit en franais chez Addison-Welsey sous le titre
Principes des systmes dexploitation mais peut tre pas ldition la plus rcente.
Sur les noyaux de systmes dexploitation commerciaux
M. Bach, La conception du systme Unix, Masson, a longtemps t louvrage de
rfrence. Sa rdaction est extrmement lourde viter aprs le dessert et elle
double dune traduction maladroite. Cet ouvrage est cependant une mine de
Systmes dexploitation & Rseaux informatiques

dition 1999-2000

renseignements pour ceux qui veulent connatre les algorithmes internes dUnix
en dtail.
Louvrage qui prcde a inspir les firmes conceptrices dautres systmes. Ceci
a donn lieu plusieurs ouvrages, en gnral plus clairs et mieux crits que leur
anctre :
H.M Deitel et M.S. Kogan, La conception dOS/2, Addison-Wesley, 1992.
Helen Custer, Au cur de Windows NT, Microsoft Press, 1993.

Sur la programmation des systmes dexploitation


Le man dUnix est la meilleure rfrence pour le programmeur. Il ny a rien
dquivalent sur papier.
J.M. Rifflet, La programmation sous Unix, 3e d., McGraw-Hill, 1993, est une
bonne rfrence et un ouvrage assez complet.
Charles Petzold, Programming Windows 95, Microsoft Press, 1996, est une bonne
rfrence pour apprendre la programmation Windows. Elle a t la premire du
genre. Actuellement, il y a des dizaines douvrages quivalents.
Microsoft, Microsoft Visual C++, Version 4, Microsoft Press, 1995, est la
rfrence de programmation de Microsoft. Cette encyclopdie est en 6 volumes
comporte tous les appels systmes de Windows ainsi que les MFC. Elle est
disponible sous forme lectronique.
Apple Computer, Inside Macintosh Series, Addison-Wesley, 1992, 1993, 1994, est
une srie traitant des caractristiques du Macintosh. Elle dtaille aussi bien les
mcanismes internes que les mthodes de programmation.
Sur lutilisation du systme Unix

Rvision : 27/10/1999

dition 19992000

R.S. Bourne, Le systme Unix, InterEditions, est une rfrence antique, mais qui
reste un modle de clart. Lauteur est le concepteur du premier interprte de
commande dUnix. La traduction comprend beaucoup de fautes, par exemple
dans les listings de programmes.
B. Kernighan et R. Pike, Lenvironnement Unix, InterEditions, saxe plutt sur les
outils dUnix. Il est plus difficile lire que le prcdent et il privilgie parfois la
bidouille info-maniaque.
J.L. Nebut, Unix pour lutilisateur : Commandes et langages de commandes, Technip,
1990, est une bonne rfrence sur les outils dUnix.
Sur les langages C et C++
B. Kernighan et D. Ritchie, Le langage C, 2e dition, Masson, est la seule
rfrence intressante pour ceux qui ont dj des notions de programmation dans
un autre langage. Toute la programmation systme se faisant actuellement en
langage C, il est indispensable den possder des notions.
P.H. Winston, On to C++, Addison Wesley, 1994, est un excellent manuel la
fois court et clair.
B. Stroustrup, Le langage C++, 2e d., Addisson Wesley, 1992, est une
rfrence plus complte mais plus difficile lire que la prcdente.
Sur les rseaux
Apple, Understanding Computer Networks, Addisson Wesley, est une rfrence
courte mais exceptionnellement claire sur les concepts des rseaux. Les
illustrations sont particulirement explicatives.
A. Tanenbaum, Computer Networks, 3rd ed., Prentice-Hall, 1996, est une bonne
rfrence souvent cite.

Systmes dexploitation & Rseaux informatiques

10

dition 1999-2000

W. R. Stevens, Unix Network Programming, 2nd ed, Prentice Hall, 1997, est une
excellente rfrence de programmation. De nombreux programmes trs biens
expliqus.
D. Comer, Internetworking with TCP/IP, Prentice Hall, 1990, (3 volumes en
collaboration) est bonne rfrence sur lensemble des protocoles constituant
TCP/IP.
C. Hunt, TCP/IP Network Administration, 2nd ed, 1997, OReilly & Associates,
est une excellente rfrence pour ladministration des systmes TCP/IP.
Sur les systmes de fentrage
Young, The X-Window System, Prentice-Hall, 1991, est une rfrence trs
pdagogique sur la programmation de X-Window avec Motif.
Sur le langage Java
D. Flanagan, Java in a Nutshell, 2nd ed, OReilly & Associates, 1997, est une
excellente rfrence, concise et claire.
P. Niemeyer & J. Peck, Exploring Java, 2nd Edition, OReilly, 1997, est aussi
une excellente rfrence.

Rvision : 27/10/1999

dition 19992000

11

Chapitre 1
Les processus

1.1. Structure des processus

1.1.1. Gnralits
Les processus correspondent lexcution de tches : les programmes des
utilisateurs, les entres-sorties, par le systme. Un systme dexploitation doit
en gnral traiter plusieurs tches en mme temps. Comme il na, la plupart du
temps, quun processeur, il rsout ce problme grce un pseudo-paralllisme. Il
traite une tche la fois, sinterrompt et passe la suivante. La commutation des
tches tant trs rapide, lordinateur donne lillusion deffectuer un traitement
simultan.

P2
P1
systme

T
Figure 1 Le multi-tche

Systmes dexploitation & Rseaux informatiques

12

dition 1999-2000

Les processus des utilisateurs sont lancs par un interprte de commande. Ils
peuvent eux-mmes lancer ensuite dautres processus. On appelle le processus
crateur, le pre, et les processus crs, les fils. Les processus peuvent donc se
structurer sous la forme dune arborescence. Au lancement du systme, il nexiste
quun seul processus, qui est lanctre de tout les autres.

P1

P2

P3

P4

P5

P6

Figure 2 Le hirarchie des processus.

Les processus sont composs dun espace de travail en mmoire form de 3


segments : la pile, les donnes et le code et dun contexte.

Rvision : 27/10/1999

dition 19992000

13

Pile d'excution

Donnes
Code

Figure 3 Les segments dun processus.

Le code correspond aux instructions, en langage dassemblage, du programme


excuter. La zone de donnes contient les variables globales ou statiques du
programme ainsi que les allocations dynamiques de mmoire. Enfin, les appels de
fonctions, avec leurs paramtres et leurs variables locales, viennent sempiler sur
la pile. Les zones de pile et de donnes ont des frontires mobiles qui croissent
en sens inverse lors de lexcution du programme. Parfois, on partage la zone de
donnes en donnes elles-mmes et en tas. Le tas est alors rserv au donnes
dynamiques.
Le contexte est form des donnes ncessaires la gestion des processus. Une
table contient la liste de tous les processus et chaque entre conserve leur
contexte3. Les lments de la table des processus de Minix, par exemple, ont la
forme simplifie du tableau ci-dessous.

Processus
Registres
Compteur ordinal
tat du programme

Mmoire
Pointeur sur code
Pointeur sur donnes
Pointeur sur pile

Fichiers
Masque umask
Rpertoire racine
Rpertoire de travail

Bach, op. cit., p. 158, et Tanenbaum, op. cit., p. 60.

Systmes dexploitation & Rseaux informatiques

14

dition 1999-2000

Pointeur de pile
Date de cration
Temps CP utilis
Temps CP des fils
Date de la proch. alarme
Pointeurs sur messages
Bits signaux en attente
PID

Statut de fin dexcution


N de signal du proc. tu
PID
Processus pre
Groupe de processus
uid rel
uid effectif
gid rel
gid effectif
Bits des signaux

Descripteurs de fichiers
uid effectif
gid effectif

Tableau 1 Les lments du contexte de Minix.

Le nombre des emplacements dans la table des processus est limit pour
chaque systme et pour chaque utilisateur.
La commutation des tches, le passage dune tche une autre, est ralise par
un ordonnanceur au niveau le plus bas du systme. Cet ordonnanceur est activ
par des interruptions :
dhorloge,
de disque,
de terminaux.
chaque interruption correspond un vecteur dinterruption, un emplacement
mmoire, contenant une adresse. Larrive de linterruption provoque le
branchement cette adresse. Une interruption entrane, en gnral, les oprations
suivantes :
empilement du compteur ordinal, du registre dtat et peut tre dautres
registres. La procdure logicielle dinterruption sauvegarde les lments de
cette pile et les autres registres dans du contexte du processus en cours;
mise en place dune nouvelle pile permettant le traitement des interruptions;
appel de lordonnanceur;

Rvision : 27/10/1999

dition 19992000

15

lection dun nouveau programme;


Explication de linterruption dhorloge, puis du disque.
Nous avons vu maintenant quun processus pouvait tre actif en mmoire
centrale (lu) ou suspendu en attente dexcution (Prt). Il peut aussi tre Bloqu,
en attente de ressource, par exemple au cours dune lecture de disque. Le
diagramme simplifi des tats dun processus est donc :

lu

Prt

Bloqu
Figure 4 Les tats dun processus.

Le processus passe de ltat lu ltat prt et rciproquement au cours dune


intervention de lordonnanceur. Cet ordonnanceur se dclenchant, par exemple,
sur une interruption dhorloge. Il pourra alors suspendre le processus en cours, si
il a dpass son quantum de temps, pour lire lun des processus prts. La
transition de ltat lu ltat bloqu se produit, par exemple, loccasion dune
lecture sur disque. Ce processus passera de ltat bloqu ltat prt lors de la
rponse du disque. Ce passage correspond dune manire gnrale la libration
dune ressource.

Systmes dexploitation & Rseaux informatiques

16

dition 1999-2000

En fait, sous Unix, lexcution dun processus se fait sous deux modes, le
mode utilisateur et le mode noyau. Le mode noyau correspond aux appels au
code du noyau : write, read, Le mode utilisateur correspond aux autres
instructions.
Un processus en mode noyau ne peut tre suspendu par lordonnanceur. Il
passe ltat prempt la fin de son excution dans ce mode moins dtre
bloqu ou dtruit . Cet tat est virtuellement le mme que prt en mmoire.
Par ailleurs, lorsque la mmoire ne peut contenir tous les processus prts, un
certain nombre dentre eux sont dplacs sur le disque. Un processus peut alors
tre prt en mmoire ou prt sur le disque. De la mme manire, on a des
processus bloqus en mmoire ou bien bloqus sur disque.
Enfin, les processus termins ne sont pas immdiatement limins de la tables
des processus ils ne le sont que par une instruction explicite de leur pre . Ceci
correspond ltat dfunt.
Les tats dun processus Unix4 sont alors :

4Bach,

op.cit., p. 156.

Rvision : 27/10/1999

dition 19992000

17

Excution
en mode
utilisateur
dfunt

Exit

Interruption

Appel
systme

prempt

Excution
en mode
noyau

Bloqu en
mmoire

Prt en
mmoire

Cration

Prt sur
disque

Bloqu sur
disque

Figure 5 Les tats des processus dUnix.

1.1.2. Les processus sous Unix


Les fonctions fondamentales
Un processus peut se dupliquer et donc ajouter un nouveau processus par
la fonction :
pid_t fork(void)
qui rend -1 en cas dchec. En cas de russite, la fonction retourne 0 dans le
processus fils et le n du processus fils Process Identifier ou PID dans le pre.
Cette fonction transmet une partie du contexte du pre au fils : les descripteurs
des fichiers standards et des autres fichiers, les redirections

Les deux

programmes sont sensibles aux mmes interruptions. lissue dun fork() les
deux processus sexcutent simultanment.

Systmes dexploitation & Rseaux informatiques

18

dition 1999-2000

La cration dun nouveau processus ne peut se faire que par le recouvrement


du code dun processus existant grce la fonction :
int execl(char *ref, char *arg0, char *argn, 0)
ref est une chane de caractres donnant ladresse du nouveau programme
substituer et excuter. arg0, arg1, , argn sont les arguments du
programme. Le premier argument, arg0, reprend en fait le nom du
programme.
Les fonctions execle() et execlp() ont des arguments et des effets
semblables. Elle transmettent en plus respectivement la variable chemin (PATH)
ou les variables denvironnement au complet.
Les fonctions int execv(char *ref, char *argv[]) ainsi que
execve() et execvp() sont des variantes analogues. Les paramtres du
programme lancer sont transmis dans le tableau de chanes : argv[][]. Ce
tableau est semblable aux paramtres de la fonction principale dun programme
C : main(int argc, char **argv).
Ces fonctions rendent -1 en cas dchec.
Par exemple :

void main()
{
execl("/bin/ls", "ls", "-l", (char *) 0);
/* avec execlp, le premier argument peut ntre
que ls et non /bin/ls */
printf("pas dimpression\n");
}
La cration dun nouveau processus loccupation dun nouvel emplacement
de la table des processus implique donc la duplication dun processus existant.

Rvision : 27/10/1999

dition 19992000

19

Ce dernier sera le pre. On substituera ensuite le code du fils par le code quon
dsire excuter. Au dpart, le processus initial lance tous les processus utiles au
systme.
Un processus se termine lorsquil na plus dinstructions ou lorsquil excute la
fonction :
void exit(int statut)
Llimination dun processus termin de la table ne peut se faire que par son
pre, grce la fonction :
int wait(int *code_de_sortie)
Avec cette instruction, le pre se bloque en attente de la fin dun fils. Elle
rendra le n PID du premier fils mort trouv. La valeur du code de sortie est
relie au paramtre dexit de ce fils. On peut donc utiliser linstruction wait
pour connatre la valeur ventuelle de retour, fournie par exit(), dun
processus. Ce mode dutilisation est analogue celui dune fonction. wait()
rend -1 en cas derreur.
Si le fils se termine sans que son pre lattende, le fils passe ltat defunct
dans la table. Si, au contraire, le pre se termine avant le fils, ce dernier est
rattach au processus initial. Le processus initial passe la plupart de son temps
attendre les processus orphelins.
Grce aux 3 instructions, fork(), exec(), et wait(), on peut crire un
interprte de commandes simplifi. Il prend la forme suivante :

Systmes dexploitation & Rseaux informatiques

20

dition 1999-2000

while(1) {
/* attend commande */
lire_commande(commande, paramtres);
if (fork() != 0) {
wait(&statut);

/* proc. pre */

} else {
execv(commande, paramtres); /* proc. fils */
}
}

Les fonctions Unix rendent -1 en cas derreur. Dans ce cas, elles positionnent
la variable entire globale errno. On peut imprimer cette valeur derreur et
constater la cause qui est dcrite dans le fichier errno.h. On peut aussi
imprimer le texte en clair avec la fonction perror(char*). Dans le cas dune
programmation professionnelle, il est indispensable de vrifier la valeur de retour
de toutes les fonctions et de se protger des erreurs par un codage du type :
if ((retour = fonction()) == -1) {
perror("plantage");
exit(0);
}

Les signaux
Linstruction :
int kill(int pid, int signal)
permet un processus denvoyer un signal un autre processus. pid est le n
du processus dtruire et signal, le n du signal employ. La fonction kill
correspond des interruptions logicielles.
Par dfaut, un signal provoque la destruction du processus rcepteur,
condition bien sr, que le processus metteur possde ce droit de destruction.

Rvision : 27/10/1999

dition 19992000

21

La liste des valeurs de signal comprend, entre autres :


Nom

du N du signal

Commentaires

signal
SIGUP

signal mis lors dune dconnexion

SIGINT

^C

SIGQUIT

^\

SIGKILL

signal dinterruption radicale

SIGALRM

14

signal mis par alarm(int sec) au bout


de sec secondes

SIGCLD

20

signal mis par un fils qui se termine, son


pre
Tableau 2 Quelques signaux dUnix.

Les valeurs des signaux dpendent de limplantation. La liste complte est


dfinies par des macros dans signal.h
kill() rend 0 en cas de succs et -1 en cas dchec.
Un processus peut dtourner les signaux reus et modifier son comportement
par lappel de la fonction :
void (*signal(int signal, void (*fonction)(int)))
avec fonction pouvant prendre les valeurs:

Nom

Action

SIG_IGN

le processus ignorera linterruption correspondante

SIG_DFL

le processus rtablira son comportement par dfaut lors de


larrive de linterruption (la terminaison)

void fonction(int n)

le

processus

excutera

fonction,

dfinie

par

lutilisateur, larrive de linterruption n. Il reprendra


ensuite au point o il a t interrompu
Tableau 3 Les routines d'interruption dUnix.

Systmes dexploitation & Rseaux informatiques

22

dition 1999-2000

Lappel de la fonction signal positionne ltat des bits de signaux dans la


table des processus.
Par ailleurs, la fonction signal(SIGCLD, SIG_IGN), permet un pre
dignorer le retour de ses fils sans que ces derniers encombrent la table des
processus ltat defunct.
Quelques fonctions didentification dUnix
La commande Unix ps -ef, donne la liste des processus en activit sur le
systme. Chaque processus possde un identificateur et un groupe. On les obtient
par les fonctions :
int getpid(void)
et
int getpgrp(void)
Les fils hritent du groupe de processus du pre. On peut changer ce groupe
par la fonction :
int setpgrp(void)
Chaque processus possde, dautre part, un utilisateur rel et effectif. On les
obtient respectivement par les fonctions :
int getuid(void)
et
int geteuid(void)
Lutilisateur rel est lutilisateur ayant lanc le processus. Le numro
dutilisateur effectif sera utilis pour vrifier certains droits daccs (fichiers et
envoi de signaux). Il correspond normalement au numro dutilisateur rel. On
peut cependant positionner lutilisateur effectif dun processus au propritaire du

Rvision : 27/10/1999

dition 19992000

23

fichier excutable. Ce fichier sexcutera alors avec les droits du propritaire et


non avec les droits de celui qui la lanc. La fonction :
int setuid(int euid)
permet de commuter ces numros dutilisateur de lun lautre : rel effectif et
vice-versa. Elle rend 0 en cas de succs.

1.2. Les fils dexcution


Les interfaces graphiques, les systmes multi-processeurs ainsi que les systmes
rpartis ont donn lieu une rvision de la conception usuelle des processus.
Cette rvision se fonde sur la notion de fils dexcution (thread of control). Un
processus classique est compos dun espace dadressage et dun seul fil de
commande. Lide est dassocier plusieurs fils dexcution un espace dadressage
et un processus. Les fils dexcution sont donc des processus dgrads (sans
espace dadressage propre) lintrieur dun processus ou dune application. On
les appelle aussi des processus poids plume ou poids lger.
1.2.1. Pourquoi des fils dexcution
Certaines applications se dupliquent entirement au cours du traitement. Cest
notamment le cas pour des systmes client-serveur, o le serveur excute un
fork, pour traiter chacun de ses clients. Cette duplication est souvent trs
coteuse. Avec des fils dexcution, on peut arriver au mme rsultat sans
gaspillage despace, en ne crant quun fil de contrle pour un nouveau client, et
en conservant le mme espace dadressage, de code et de donnes. Les fils
dexcution sont, par ailleurs, trs bien adapts au paralllisme. Ils peuvent
sexcuter simultanment sur des machines multi-processeurs.
1.2.2. De quoi sont constitus les fils dexcution

Systmes dexploitation & Rseaux informatiques

24

lments dun fil de commande


Compteur de programme
Pile
Registres
Fils de commande fils
Statut

dition 1999-2000

lments dun processus ordinaire


Espace dadressage
Variables globales
Table des fichiers ouverts
Processus fils
Compteurs
Smaphores

Tableau 4 Le contexte compar dun fil de commande et dun processus.

Les lments dun processus sont communs tous les fils dexcution de ce
processus.
1.2.3. Utilisation des fils dexcution
Lavantage essentiel des fils dexcution est de permettre le paralllisme de
traitement en mme temps que les appels systme bloquants. Ceci impose une
coordination particulire des fils dexcution dun processus. Dans une utilisation
optimale, chaque fil de commande dispose dun processeur. A. Tanenbaum, dans
Modern Operating Systems, distingue trois modles dorganisation possibles : le
modle rpartiteur/ouvrier (dispatcher/worker), lquipe et le pipeline.
Le modle rpartiteur/ouvrier
Dans ce modle, les demandes de requtes un serveur arrivent dans une
botes aux lettres. Le fil de commande rpartiteur a pour fonction de lire ces
requtes et de rveiller un fil de commande ouvrier. Le fil de commande ouvrier
gre la requte et partage avec les autres fils dexcution, la mmoire cache du
serveur. Cette architecture permet un gain important car elle vite au serveur de
se bloquer lors de chaque entre-sortie.

Rvision : 27/10/1999

dition 19992000

25

Rpartiteur

Serveur de fichier
Fil de
commande
Cache partag

Arrive de la requte
Bote aux lettres

Figure 6 Le rpartiteur

Lquipe
Dans le modle de lquipe, chaque fil de commande traite une requte. Il ny a
pas de rpartiteur. la place, on met en implante une file de travaux en attente.

Arrive de la requte

Figure 7 Lquipe

Le pipeline

Systmes dexploitation & Rseaux informatiques

26

dition 1999-2000

Dans le modle du pipeline, chaque fil de commande traite une partie de la


requte. Plusieurs architecture matrielles implantent ce type dorganisation. Ce
modle nest cependant pas appropri pour toutes les applications.

Arrive de la requte

Figure 8 Le pipeline

1.2.4 Limplantation des fils dexcution avec Java


Le langage Java permet de construire des applications et des appliquettes. Les
appliquettes sont des petits programmes chargeables dans un navigateur de
rseau. Java, grce ses classes de base, fournit la possibilit de crer des fils
dexcution au niveau du langage de programmation.
Crer un fil de commande
Crer un fils dexcution peut se faire en crant une sous classe de la classe
Thread et en crant ensuite un objet appartenant cette sous classe5. Lobjet

On peut aussi donner une classe Java des capacits multi-tches en la faisant driver par

implements de linterface Runnable. Nous nexaminerons pas ces possibilits ici.

Rvision : 27/10/1999

dition 19992000

27

hritera des mthodes (des fonctions membres) de la classe et elle permettront sa


gestions.
Les mthodes de la classe Thread sont notamment :
start() qui dmarre le fil de commande;
stop() qui larrte dfinitivement ;
run() le corps du fil qui est excut aprs le lancement par start() ;
sleep() qui le met en veille pour un temps paramtrable ;
suspend() qui le suspend qui le met en attente jusqu nouvel ordre ;
resume() qui reprend lexcution du fil de commande;
yield() qui laisse passer son tour dexcution.
Le modle dexcution des fils de Java peut se reprsenter par un automate
dtats.

Blocked
suspend()
sleep()
wait()

stop()

stop()
Newborn

Dead

start()
resume()
notify()

stop()

Runnable

Running
yield()

Figure 9 Les tats des fils dexcution de Java.

Systmes dexploitation & Rseaux informatiques

28

dition 1999-2000

Un exemple
Lexemple qui suit cre et lance deux fils dexcution Afficheur. Chaque fil
imprime son nom lcran et son nombre de passage pendant quil sexcute.
Une fois compil, on doit excuter le programme avec linterprte java :
> java Lanceur

class Lanceur {
public static void main (String args[]) {
Afficheur afficheur1 = new Afficheur("Moi");
Afficheur afficheur2 =
new Afficheur("LAutre");
afficheur1.start();
afficheur2.start();
}
}
class Afficheur extends Thread {
public Afficheur(String str) {
super(str);
}
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(getName()+ " " + i + "
passage(s)");
try {
sleep((int)(Math.random()*1000));
} catch (InterruptedException e) {}
}
System.out.println("Termin" + getName());
this.stop();
}
}

Rvision : 27/10/1999

dition 19992000

29

1.2.5. Limplantation des fils dexcution sous Windows NT


Les fils dexcution peuvent tre implants dans lespace utilisateur ou dans le
noyau. Actuellement, peu de systmes dexploitation incluent des fils dexcution
dans leur noyau. Plusieurs bibliothques externes existent, par exemple les
processus poids lgers de Sun. Ce nest pas le cas de Windows NT qui a t
conu demble avec des fils dexcution.
Windows NT peut se programmer deux niveaux : en C ou bien en C++. La
programmation en C se fait par les API du Software Development Kit. La
programmation en C++ se fait par lintermdiaire des Microsoft Foundation Classes
qui encapsule les entits du systme.
Un processus sous Windows est une instance dapplication qui possde un
espace dadressage, de la mmoire, des fichiers et des fentres ouvertes. On cre
un nouveau processus par la fonction CreateProcess(). Ce processus
comprendra un fil de commande. On peut lui en ajouter dautres avec le
fonction :
HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpsa, DWORD
cbStack, LPTHREAD_START_ROUTINES, lpSStartAddr,
LPVOID lpThreadParm, DWORD fdwCreate, LPDWORD
lpIDThread).
Un fil de commande peut sassurer lexclusivit dune ressource par la fonction
WaitForSingleObject() qui correspond un P de smaphore dexclusion
mutuelle. On libre le smaphore par un ReleaseMutex(). Les fonctions
InterLockedIncrement()

et

InterLockedDecrement()

applicables des smaphores gnraliss.

Systmes dexploitation & Rseaux informatiques

sont

30

dition 1999-2000

1.3. Communication entre les processus


Les processus peuvent communiquer par lintermdiaire de fichiers.
Nanmoins, certains systmes dexploitation fournissent des mcanismes
permettant les communications directes.
Le signe | , par exemple, de linterprte de commandes Unix, reli lappel
systme pipe(), permet deux processus de sexcuter en mme temps. Le
premier fournissant des donnes que le second exploite au fur et mesure de leur
production.
1.3.1. Les tubes de communication avec Unix
Le systme Unix offre des primitives qui permettent de synchroniser
facilement des processus lecteurs et crivains dans un tampon sans passer par des
smaphores. Lappel de la fonction du noyau pipe() cre un tampon de
donnes, un tube, dans lequel deux processus pourront venir respectivement lire
et crire. La fonction fournit, dautre part, deux descripteurs, analogues aux
descripteurs de fichiers, qui serviront de rfrence pour les oprations de lecture
et dcriture. Le systme ralise la synchronisation de ces oprations de manire
interne.
Les deux processus communicants doivent partager les mmes descripteurs
obtenus par pipe(). Il est donc commode quils aient un anctre commun car
les descripteurs de fichiers sont hrits. Dans lexemple suivant, deux processus,
un pre et un fils communiquent par lintermdiaire dun tube. Le pre crit les
lettres de lalphabet que lit le fils :

Rvision : 27/10/1999

dition 19992000

31

void main () {
int df[2];

// descripteur du tube

char c, d;

// caractre de lalphabet

int ret;
pipe(df);

// On cre le tube

if (fork() != 0) {
close (df[0]);

// On est dans le pre


// Le pre ne lit pas

for (c = 'a'; c <= 'z'; c++) {


write(df[1], &c, 1); //Pre crit dans tube
}
close(df[1]); // On ferme le tube en criture
wait(&ret);

// Le pre attend le fils

} else {
close(df[1]); // On ferme le tube en criture
while (read(df[0], &d, 1) > 0) {// Fils lit tube
printf("%c\n", d);// Il crit le rsultat
}
close (df[0]);

// On ferme le tube en lecture

}
}

La dclaration int file[2], et lappel de la fonction int pipe(file)


cre un tampon interne et deux descripteurs de fichiers. Lun ouvert en lecture :
file[0] et lautre en criture : file[1]. La fonction pipe() rend 0 ou 1 en cas dchec.
La fonction int open(char *ref, int indicateurs) ouvre un
fichier dont le nom est contenu dans ref et rend un descripteur de fichier. En
cas dchec, elle rend -1. Les indicateurs (flags) sont en lecture O_RDONLY (0), en
criture O_WRONLY, (1), en lecture-criture O_RDWR (2). Il existe dautres
indicateurs, par exemple, lajout O_APPEND; ils sont dcrits dans le fichier
fcntl.h. On combine les modes par un ou binaire : O_WRONLY
O_APPEND dclare une ouverture en criture et ajout.

Systmes dexploitation & Rseaux informatiques

32

dition 1999-2000

Les descripteurs de fichiers remarquables sont 0 pour lentre standard, le


clavier, 1 pour la sortie standard, lcran, et 2 pour la sortie derreur standard,
lcran encore.
int close(int desc) ferme le fichier de descripteur desc.
int read(int desc, char *buf, int n), permet de lire dans
le fichier de descripteur desc, n caractres qui seront contenus dans le tampon
point par buf.
int write(int desc, char *buf, int n) permet dcrire
dans le fichier de descripteur desc, n caractres, contenus dans le tampon
point par buf.
Lorsque linterprte de commande reconnat une commande du type :
processus1 | processus2 , il excute un programme de la forme :

void synchro(char *processus1, char *processus2) {


int df[2];

/* descripteurs du tube */

pipe(df);

/* cration du tube */

if (fork() != 0) {
close(df[0]);

/* fermeture lecture */

dup2(df[1], 1); /* df[1] devient sortie standard */


close(df[1]);

/* inutile aprs redirection */

execl(processus1, processus1, 0);


} else {
close(df[1]);

/* fermeture criture */

dup2(df[0], 0); /* df[0] devient entre standard */


close(df[0]);

/* inutile aprs redirection */

execl(processus2, processus2, 0);


}
}

Rvision : 27/10/1999

dition 19992000

33

La fonction int dup2(int desc1, int desc2) duplique le


descripteur de fichier desc1 et le rend quivalent desc2. Si desc2 est en
cours dutilisation, il est au pralable ferm par la fonction dup2(). La fonction
int dup(int desc) est semblable. Elle affecte au plus petit descripteur
disponible le fichier rfrenc par desc.
Pour utiliser les fonctions Unix de base, il faut en gnral inclure fcntl.h,
unistd.h et stdlib.h.
1.3.2 Les tubes de communication avec Java
Avec Java, on dispose dun mcanisme semblable Unix. Un tube en Java se
compose de deux demi-tubes drivs des classes PipedInputStream et
PipedOutputStream que lon connecte par la fonction membre
connect().
Dans lexemple qui suit, deux fils communiquent par un tube. Un fil
dexcution lit des caractres du clavier, les transmets dans le tube et un autre fil
les crit sur lcran en les passant en majuscules. Ils font chacun dix tours de
boucles.
Un fil crit dans
PipedOutputStream

Le tube

Un autre fil lit dans


PipedInputStream

Figure 10 Les tubes en Java.


import java.io.*;
class ExThread {
public static void main (String args[]) {
PipedInputStream sortieLecture = new PipedInputStream();
PipedOutputStream entreeEcriture = new PipedOutputStream();
try {
sortieLecture.connect(entreeEcriture);
} catch (IOException EOut) {}
new Ecrivain("Ecrivain", entreeEcriture).start();
new Lecteur("Lecteur", sortieLecture).start();
}
}
class Ecrivain extends Thread {

Systmes dexploitation & Rseaux informatiques

34

dition 1999-2000

private PipedOutputStream entreeEcriture;


public Ecrivain(String str, PipedOutputStream entreeEcriture) {
super(str);
this.entreeEcriture = entreeEcriture;
}
public void run() {
byte caractere[] = new byte [80];
for (int i = 0; i < 10; i++) {
try {
System.in.read(caractere);
} catch (IOException eIn) {}
try {
entreeEcriture.write(caractere[0]);
} catch (IOException eOut) {}
System.out.print(getName() + " a crit dans le tube\t" +
caractere[0]);
System.out.println("\t(" + i + " passage(s))");
}
System.out.println(getName() + " Termin");
this.stop();
}
}
class Lecteur extends Thread {
private PipedInputStream sortieLecture;
public Lecteur(String str, PipedInputStream sortieLecture) {
super(str);
this.sortieLecture = sortieLecture;
}
public void run() {
char car[] = new char[80];
for (int i = 0; i < 10; i++) {
try {
car[0] = (char) sortieLecture.read();
}catch (IOException IOut) {}
System.out.print(getName() + " a lu dans le tube\t" +
Character.toUpperCase(car[0]));
System.out.println( "\t(" + i + " passage(s))");
}
System.out.println(getName() + " Termin");
this.stop();
}
}

1.3.3. Les messages


Les messages forment un mode de communication privilgi entre les
processus. Ils sont utiliss dans le systme pdagogique Minix de Tanenbaum. Ils
sont au cur de Mach quon prsente comme un successeur possible dUnix et
qui a inspir Windows NT pour certaines parties. Par ailleurs, ils sadaptent trs
bien une architecture rpartie et leur mode de fonctionnement est voisin des
changes de donnes sur un rseau.
Les communications de messages se font travers deux oprations
fondamentales : envoie(message) et reois(message). (send et
receive). Les messages sont de tailles variables ou fixes. Les oprations

Rvision : 27/10/1999

dition 19992000

35

denvoi et de rception peuvent tre soit directes entre les processus, soit
indirectes par lintermdiaire dune bote aux lettres.
Les communications directes doivent identifier le processus, par un n et une
machine, par exemple. On aura alors : envoie(Proc,

Message) et

reois(Proc, Message). Dans ce cas la communication est tablie entre


deux processus uniquement, par un lien relativement rigide et bidirectionnel. On
peut rendre les liaisons plus souples en laissant vide lidentit du processus dans la
fonction reois.
Les communications peuvent tre indirectes grce lutilisation dune bote
aux lettres (un port dans la terminologie des rseaux). Les liens peuvent alors
unir plus de deux processus du moment quils partagent la mme bote aux
lettres. On devra nanmoins rsoudre un certains nombre de problmes qui
peuvent se poser, par exemple, si deux processus essayent de recevoir
simultanment le contenu dune mme bote.
Les communications se font de manire synchrone ou asynchrone. Le
synchronisme peut se reprsenter par la capacit dun tampon de rception. Si le
tampon na pas de capacit, lmetteur doit attendre que le rcepteur lise le
message pour pouvoir continuer. Les deux processus se synchronisent sur ce
transfert et on parle alors dun rendez-vous . Deux processus asynchrones : P
et Q, peuvent aussi communiquer de cette manire en mettant en uvre un
mcanisme dacquittement :

envoie(Q, message)

reois(P, message)

reois(Q, message)

envoie(P, acquittement)

Tableau 5 Les fonctions de messages.

Systmes dexploitation & Rseaux informatiques

36

dition 1999-2000

1.3.4. La mmoire partage


On peut concevoir des applications qui communiquent travers un segment
de mmoire partage. Le principe est le mme que pour un change
dinformations entre deux processus par un fichier. Dans le cas dune zone de
mmoire partage, on devra dclarer une zone commune par une fonction
spcifique, car la zone mmoire dun processus est protge.
Le systme Unix fournit les primitives permettant de partager la mmoire. NT
aussi sous le nom de fichiers mapps en mmoire. Ces mcanismes, bien que trs
rapides, prsentent linconvnient dtre difficilement adaptables aux rseaux.
Pour les communications locales, la vitesse est sans doute semblable celle de la
communication par un fichier cause de la mmoire cache. Lorsquil a besoin de
partager un espace mmoire, le programmeur prfrera utiliser des fils
dexcution.

1.4. Coordination les processus


La coordination (ou exclusion) a pour but de limiter laccs une ressource
un ou plusieurs processus. Ceci concerne, par exemple, un fichier de donnes que
plusieurs processus dsirent mettre jour. Laccs ce fichier doit tre rserv
un utilisateur pendant le moment o il le modifie, autrement son contenu risque
de ne plus tre cohrent. Le problme est semblable pour une imprimante o un
utilisateur doit se rserver son usage le temps dune impression. On appelle ce
domaine dexclusivit, une section critique.
1.4.1. Lattente active sur un verrou
La faon la plus ancienne de raliser lexclusion mutuelle sous Unix est
deffectuer un verrouillage sur une variable partage. Cette opration de
verrouillage doit tre indivisible (atomique). Lorsque le verrou est pos sur la
variable, les processus excutent une attente active. Lorsquil se lve, un
processus, et un seul, pose un nouveau verrou sur la variable et rentre dans la

Rvision : 27/10/1999

dition 19992000

37

section critique. Il sait quil aura lexclusivit dune ressource, un fichier par
exemple :

Processus 1

Processus 2

while (pos_ver(var) == chec)

while (pos_ver(var) == chec)


rien;

rien;
section_critique();

section_critique();

lve_ver(var);

lve_ver(var);

Tableau 6 Attente active sur un verrou.

Dans les vieilles versions dUnix, la variable de verrouillage correspondait


souvent un fichier sans droits que chacun des processus tente de crer.
Lorsquun processus termine sa section critique, il dtruit le fichier de
verrouillage, laissant ainsi sa place dautres. On crera le verrou dans /tmp6, par
exemple, de manire ce que tout le monde puisse le dtruire. Enfin, pour que ce
procd fonctionne, il est ncessaire que tous les processus cooprent.

void main()
{
int desc;

/* descripteur fichier de ressource */

int desc_verr;

/* descripteur fichier verrou */

char i;
/* attente active */
while ((desc_verr = creat("/tmp/verrou", 0000)) == -1)
;
section_critique();
close(desc_verr);

/* fermeture du verrou */

unlink("/tmp/verrou"); /* destruction du verrou */


}

Car /tmp est un rpertoire dont les droits sont : rwx rwx rwx

Systmes dexploitation & Rseaux informatiques

38

dition 1999-2000

int creat(char *ref_fichier, int mode) rend le descripteur


du fichier ouvert en criture, ou -1 en cas dchec. mode dfinit les droits daccs,
0777 p. ex. Le mode rel est obtenu par un ET binaire avec le paramtre
cmask positionn par la fonction :
int umask(int cmask)
int close(int desc_fichier) ferme le fichier considr. Cette
fonction rend 0 en cas de succs et 1 en cas dchec.
int unlink(char *ref_fichier) dtruit le fichier dont le nom est
pass en paramtre. Cette fonction rend 0 en cas de succs et 1 en cas dchec.
Au niveau du processeur, les variables de verrouillage se ralisent par une
instruction de type Test and Set Lock (TSL).
On nutilise plus dsormais cette faon de procder. On prfre la fonction
flock(int fd, int opration) qui a les mmes fonctionnalits. Elle
permet un processus de verrouiller laccs un fichier de descripteur fd avec
un verrou exclusif. Dans ce cas, opration est gal LOCK_EX. flock()
est bloquante si le fichier est dj verrouill. Le processus qui excute cette
fonction attendra sil y a dj un processus ou posera le verrou et passera si la
voie est libre. On retire le verrou avec la mme fonction. Lopration est
LOCK_UN. Un processus bloqu passera donc lorsque le premier processus aura
retir son verrou. Le fichier den-tte inclure est <sys/file.h>.
1.4.2. Les smaphores
Gnralits
Le concept de smaphore permet une solution lgante la plupart des
problmes dexclusion. Ce concept ncessite la mise en uvre dune variable, le
smaphore, et de deux oprations atomiques associes P et V. Soit sma la
variable, elle caractrise les ressources et permet de les grer. Lorsquon dsire

Rvision : 27/10/1999

dition 19992000

39

effectuer un exclusion mutuelle entre tous les processus par exemple, il ny a


virtuellement quune seule ressource et on donnera sma la valeur initiale de 1.
Lorsquun processus effectue lopration P(sma) :
si la valeur de sma est suprieure 0, il y a alors des ressources disponibles,
P(sma) dcrmente sma et le processus poursuit son excution,
sinon ce processus sera mis dans une file dattente jusqu la libration dune
ressource.
Lorsquun processus effectue lopration V(sma) :
si il ny a pas de processus dans la file dattente, V(sma) incrmente la
valeur de sma,
sinon un processus en attente est dbloqu.
P(sma) correspond donc une prise de ressource et V(sma) une
libration de ressource. Dans la littrature, on trouve parfois dautres
terminologies, respectivement, wait(sma) et signal(sma)7, ou
get(sma) et release(sma).
Le problme des producteurs et des consommateurs
Ce problme est un des cas dcole favoris sur les processus. Deux processus
se partagent un tampon de donnes de taille N. Un premier processus produit des
donnes et les crit dans le tampon. Un second processus consomme les donnes
du tampon en les lisant et en les dtruisant au fur et mesure de leur lecture.
Initialement, le tampon est vide. La synchronisation de ces deux processus peut
se raliser grce des smaphores.

Le sens associ ces dnominations, bien que trs utilises, n'apparat pas trs clairement.

Systmes dexploitation & Rseaux informatiques

40

dition 1999-2000

Les processus producteur et consommateur doivent accder de manire


exclusive au tampon, le temps dune lecture ou dune criture. Un smaphore
dexclusion mutuelle est donc ncessaire. Dautre part, on peut considrer que les
ressources du processus producteur sont les emplacements vides du tampon,
alors que les emplacements pleins sont les ressources du processus
consommateur. Au dpart, le tampon tant vide, les ressources de consommation
sont nulles, alors que les ressources de production correspondent la taille du
tampon.
On obtient le programme suivant :

#define N 100

/* taille du tampon */

sma mutex = 1;

/* sma dexclusion mut. */

sma production = N;

/* sma places vides */

sma consommation = 0; /* sma places pleines */


void consommateur() {
while (1) {
P(consommation);
P(mutex);

/* une place pleine en moins */


/* section critique */

vider_case();
V(mutex);
V(production);

/* fin section critique */


/* une place vide en plus */

}
}
void producteur() {
while (1) {
P(production);
P(mutex);

/* une place vide en moins */


/* section critique */

remplir_case();
V(mutex);
V(consommation);
}
}

Rvision : 27/10/1999

/* fin section critique */


/* une place pleine en plus */

dition 19992000

41

Les smaphores sous Unix


Le systme Unix, dans la plupart de ses versions, fournit maintenant des
smaphores. Les smaphores ne correspondent cependant pas une
programmation classique de ce systme. On leur prfre les verrous ou bien les
tubes quand cest possible. Par ailleurs, les paramtres des fonctions smaphores
peuvent tre lgrement diffrents suivant les versions dUnix. En cas de doute,
consultez le manuel.
chacune des tapes de la manipulation dun smaphore :
1. Dclaration : Type Smaphore sma;
2. Initialisation : sma < 1;
3. Opration : P(sma); ou bien V(sma);
correspond un appel systme Unix.
On doit inclure les fichiers den-tte :
<sys/types.h>, <sys/ipc.h> et <sys/sem.h>.
Les smaphores se regroupent en tableaux de type ushort. Par exemple :
ushort semarray[2] est un tableau de deux smaphores.
Le dclaration dune variable sma se fait par la fonction :
int semget(key_t cl, int NombreSma, int flag);
Cette fonction rend un entier, qui servira de rfrence ultrieure au smaphore
dans le programme. Elle permet lidentification universelle dun smaphore (
lchelle du systme). On lutilise gnralement de la faon suivante :
idSema = semget(ftok(UnfFichier, 'UneLettre'),
NombreSma, IPC_CREAT | 0600);

Systmes dexploitation & Rseaux informatiques

42

dition 1999-2000

Laffectation dune variable smaphore se fait par laffectation du tableau. On


peut ainsi initialiser plusieurs smaphores autant que la dimension du tableau.
Par exemple :
semarray[0] = 1;
semarray[1] = 2;
puis par sa prise en compte par le systme par une opration atomique :
int semctl(int idSema, int NombreSma, int
commande, ushort semarray);
La valeur de commande pour affecter les valeurs du tableau aux smaphores
est SETALL. Dans certaines versions dUnix, la dernire variable semarray de
type ushort est parfois remplace par une structure union semnum qui doit
contenir ce tableau.
semctl() permet dautres oprations telles que la lecture de la valeur de
smaphores avec la commande GETALL et la destruction avec la commande
IPC_RMID.

Les oprations P et V peuvent tre groupes (on peut en effectuer plusieurs en


mme temps). Elles se font par la construction dun tableau doprations de type
struct sembuf. Avec la dclaration : struct sembuf sops[2]; par
exemple, il pourra y avoir jusqu deux oprations P ou V simultanes.
Les champs affecter de la structure sont :
sem_num, qui donne le rang du smaphore dans le tableau prcdent,
sem_op, mis -1 si cest un P et 1 si cest un V.
sem_flg, en gnral 0.
La prise en compte des oprations se fait par :

Rvision : 27/10/1999

dition 19992000

43

int semop(int idSema, struct sembuf *sops, size_t


NbOprat)
On peut visualiser ltat des smaphores par la commande ipcs ou ipcs a et on peut dtruire un smaphore par la commande ipcrm

-s

no_du_smaphore.
1.4.3 Les moniteurs
Quest-ce quun moniteur?
Un moniteur est un objet encapsulant des fonctions membre ou des
mthodes dont une seule peut sexcuter un moment donn. La structure de
moniteur permet dviter certains phnomnes dinterblocages qui peuvent
apparatre avec les smaphores. Ces interblocages sont gnralement la
consquence derreurs de programmation vicieuses et difficiles dtecter. Cest
pourquoi, on considre que lcriture de smaphores est dlicate. La dclaration
dun moniteur est beaucoup plus facile et plus lgante par contre.

monitor MonMoniteur{
char tampon[100];
void crivain(char *chane) {}
char *lecteur() {}
}
Dans lexemple prcdent, en pseudo-C, quel que soit le nombre de processus
qui sexcutent et qui font appel au moniteur, seul un exemplaire de crivain
ou de lecteur pourra sexcuter un moment donn.
Dans le modle de Hoare, les moniteurs disposent en plus dun mcanisme qui
permet un processus de sarrter sur une condition particulire, de laisser sa
place et de reprendre son excution quand la condition est remplie. On arrte un
Systmes dexploitation & Rseaux informatiques

44

processus

dition 1999-2000

par

wait(condition)

et

on

le

relance

par

notify(condition).
monitor MonMoniteur{
char tampon[100];
void crivain(char *chane) {

if (condition == false) wait(condition);

}
char *lecteur() {

notify(condition);

}
}
Un processus excutant crivain() avec condition faux, sarrtera et
laissera sa place, permettra un autre processus dexcuter une fonction du
moniteur et attendra jusqu ce quun processus excutant lecteur() le
relance par notify().
Synchroniser les fils dexcution
Les fils dexcution sexcutent dans le mme espace mmoire. Ils peuvent
tous accder aux variables communes dune classe simultanment. Comme pour
les processus, a peut conduire des effet indsirables. Le langage Java ne
dispose pas de smaphores quil remplace par des moniteurs.
En Java, tout hritier de la classe Object est un moniteur potentiel et
donc toute classe, car Object est la classe mre . Pour raliser une exclusion
et assurer un accs unique une mthode, on utilise le mot cl

Rvision : 27/10/1999

dition 19992000

45

synchronized. Le compilateur associe un moniteur chaque objet qui


possde des variables ou des mthodes prcdes de synchronized. Il
supervisera un accs unique soit au niveau dun objet de la classe, soit au niveau
de la classe elle-mme si elle est statique (static). Ainsi un seul fil de
commande pourra excuter une mme mthode synchronise un moment
donn. Et une seule des mthodes synchronises dun objet pourra sexcuter.
On peut aussi dclarer un bloc { } comme synchronized sur un objet, par
exemple
synchronized (monObjet) {
// les intructions
}
Lorsquune mthode sexcute sans avoir de donnes disponibles, elle peut
bloquer les autres ou abandonner lexcution sans avoir rien fait. Pour viter ceci,
on dispose de la fonction wait(), mais sans variable. Une fonction qui excute
ce wait()va alors sarrter, librer le moniteur et attendre. Une autre mthode
pourra prendre sa place.
Une fonction qui a excut un wait() pourrait rester bloque linfini.
Cest pourquoi, on dispose de la fonction notify() qui permet de relancer
une mthode bloque sur un wait() (nimporte laquelle). Une fonction qui
excute un notify() relancera une et une seule des fonctions en attente.
notifyAll() permet de relancer toutes les mthodes bloques par un
wait().
Un exemple
Grce aux moniteurs, on peut facilement implanter le programme de
producteurs et de consommateurs. Pour ceci, les fils dexcution les reprsentant
doivent partager un tampon commun o les fils producteurs viendront crire des
messages et les fils consommateurs viendront les lire.

Systmes dexploitation & Rseaux informatiques

46

dition 1999-2000

On peut raliser ceci par une classe Tampon qui dispose de fonctions put()
et get() synchronises qui respectivement crivent et lisent les messages :
put() crit dans le tampon. Sil y a quelque chose, il attend quil se vide.
get() lit la valeur du tampon et le met zro. Sil ny a rien, il attend quil se
remplisse.
class Tampon {
private String data = null;
public synchronized boolean put(String put_data) {
// Si quelquun a crit quelque chose
// on attend
while (data != null) {
try {
wait();
} catch (InterruptedException e) {}
}
data = put_data;
// Les autres peuvent se rveiller
notifyAll();
return true;
}
public synchronized String get() {
while (data == null) {
try {
wait();
} catch (InterruptedException e) { }
}
String get_data = data;
data = null;
notifyAll();
return get_data;
}
}

1.5. Ordonnancement

Rvision : 27/10/1999

dition 19992000

47

Lordonnancement rgle les transitions dun tat un autre des diffrents


processus. Cet ordonnancement a pour objectifs :
1. de maximiser lutilisation du processeur;
2. dtre quitable entre les diffrents processus;
3. de prsenter un temps de rponse acceptable;
4. davoir un bon rendement;
5. dassurer certaines priorits;
1.5.1. Le tourniquet
Cet algorithme est lun des plus utiliss et lun des plus fiables. Chaque
processus prt dispose dun quantum de temps pendant lequel il sexcute.
Lorsquil a puis ce temps ou quil se bloque, par exemple sur une entre-sortie,
le processus suivant de la file dattente est lu et le remplace. Le processus
suspendu est mis en queue du tourniquet.
Le seul paramtre important rgler, pour le tourniquet, est la dure du
quantum. Il doit minimiser le temps de gestion du systme et cependant tre
acceptable pour les utilisateurs. La part de gestion du systme correspond au
rapport de la dure de commutation sur la dure du quantum. Plus le quantum est
long plus cette part est faible, mais plus les utilisateurs attendent longtemps leur
tour. Un compromis peut se situer, suivant les machines, de 100 200 ms.
1.5.2. Les priorits
Dans lalgorithme du tourniquet, les quanta gaux rendent les diffrents
processus gaux. Il est parfois ncessaire de privilgier certains processus par
rapport dautres. Lalgorithme de priorit choisit le processus prt de plus haute
priorit.

Systmes dexploitation & Rseaux informatiques

48

dition 1999-2000

Ces priorits peuvent tre statiques ou dynamiques. Les processus du systme


auront des priorits statiques (non-modifiables) fortes. Les processus des
utilisateurs verront leurs priorits modifies, au cours de leur excution, par
lordonnanceur. Ainsi un processus qui vient de sexcuter verra sa priorit
baisser. Pour un exemple dexcution avec priorits, on pourra consulter Bach8.
1.5.3. Le tourniquet avec priorits
On utilise gnralement une combinaison des deux techniques prcdentes.
chaque niveau de priorit correspond un tourniquet. Lordonnanceur choisit le
tourniquet non vide de priorit la plus forte et lexcute.
Pour que tous les processus puissent sexcuter, il est ncessaire dajuster
priodiquement les diffrentes priorits.
1.5.4 Lordonnancement des fils dexcution
Les fils dexcution sont soumis un ordonnancement. Dans Windows NT,
les fils dexcution ont 32 niveaux de priorit qui sont soit fixes soit dynamiques.
La priorit la plus haute est toujours celle qui sexcute. Dans le cas dune priorit
dynamique, les valeurs de cette priorit varient entre deux bornes. Elle augmente,
par exemple, lors dune attente dentre-sortie. On peut changer la priorit des fils
dexcution dans Windows NT par la fonction SetThreadPriority().
Avec Java, les niveaux de priorit varient entre Thread.MIN_PRIORITY et
Thread.MAX_PRIORITY.

La

priorit

normale

est

Thread.NORM_PRIORITY. Comme avec NT, la priorit la plus haute est


toujours celle qui sexcute. Certains interprtes utilisent un tourniquet qui gre
les fils de mme priorit sans limite de temps pour le fil qui sexcute. Dautres
interprtes limitent lexcution dun fils un quantum de temps, puis passent un

op. cit., p. 267-270.

Rvision : 27/10/1999

dition 19992000

49

autre fil dune mme priorit. Le modle dexcution peut tre assez diffrent
suivant les machines, par exemple entre lIBM 580 et le Sun E3000.

Systmes dexploitation & Rseaux informatiques

50

dition 1999-2000

Chapitre 2
La mmoire

2.1. Introduction
La mmoire principale est le lieu o se trouvent les programmes et les donnes
quand le processeur les excute. On loppose au concept de mmoire secondaire,
reprsente par les disques, de plus grande capacit, o les processus peuvent
sjourner avant dtre excuts.
De manire encore plus vive que pour les autres ressources informatiques, le
prix des mmoires a baiss et la capacit unitaire des circuits a augment.
Cependant la ncessit de la grer de manire optimale est toujours fondamentale,
car en dpit de sa grande disponibilit, elle nest, en gnral, jamais suffisante.
Ceci en raison de la taille continuellement grandissante des programmes.
2.1.1. La multiprogrammation
Le concept de multiprogrammation soppose celui de monoprogrammation.
La monoprogrammation ne permet qu un seul processus utilisateur dtre
excut. Cette technique nest plus utilise que dans les micro-ordinateurs. On
trouve alors en mmoire, par exemple dans le cas de MS-DOS : le systme en
mmoire basse, les pilotes de priphriques en mmoire haute (dans une zone
allant de 640 ko 1 Mo) et un programme utilisateur entre les deux.

Rvision : 27/10/1999

dition 19992000

51

Pilotes en ROM (BIOS)


Programme utilisateur
(RAM)

Systme (RAM)
Figure 11 Lorganisation de la mmoire du DOS.

La

multiprogrammation

autorise

lexcution

de

plusieurs

processus

indpendant la fois9. Cette technique permet doptimiser le taux dutilisation du


processeur en rduisant notamment les attentes sur des entres-sorties. La
multiprogrammation implique le sjour de plusieurs programmes en mme temps
en mmoire et cest cette technique qui a donn naissance la gestion moderne
de la mmoire.
2.1.2. Les registres matriels
La gestion de la mmoire est presque impossible sans laide du matriel. Celuici doit notamment assurer la protection. Dans les systmes multi-utilisateurs, par
exemple, on doit interdire un utilisateur daccder nimporte comment au noyau
du systme, ou aux autres programmes des utilisateurs.

Il est noter que MS-DOS, bien quil ne soit pas multiprogrammable, nest pas non plus un

systme monoprogramm stricto sensu; cest une crature qui tient des deux.

Systmes dexploitation & Rseaux informatiques

52

dition 1999-2000

Pour assurer une protection fondamentale, on dispose, sur la plupart des


processeurs10, de deux registres dlimitant le domaine dun processus :
le registre de base et
le registre de limite.
La protection est alors assure par le matriel qui compare les adresses mises
par le processus ces deux registres.

2.2. Concepts fondamentaux

2.2.1. Production dun programme


Avant dtre excut, un programme doit passer par plusieurs tapes. Au
dbut, le programmeur cre un fichier et crit son programme dans un langage
source, le C par exemple. Un compilateur transforme ce programme en un
module objet. Le module objet reprsente la traduction des instructions en C, en
langage machine. Le code produit est en gnral relogeable, commenant
ladresse 00000 et pouvant se translater nimporte quel endroit de la mmoire en
lui donnant comme rfrence initiale le registre de base. Les adresses reprsentent
alors le dcalage par rapport ce registre.
On peut rassembler les modules objets dans des bibliothques spcialises, par
exemple au moyen des commandes ar et ranlib (pour avoir un accs direct)
sous Unix ou TLIB avec le compilateur C de Borland. On runit ensuite les
bibliothques dans un rpertoire, en gnral /usr/lib sous Unix.

10

Malheureusement pas sur le 8086 ce qui a eu des consquences considrables sur les

systmes DOS et Windows.

Rvision : 27/10/1999

dition 19992000

53

Les appels des procdures externes sont laisss comme des points de
branchements. Lditeur de liens fait correspondre ces points des fonctions
contenues dans les bibliothques et produit, dans le cas dune liaison statique, une
image binaire. Certains systmes, notamment Unix, autorisent des liaisons
dynamiques et reportent la phase ddition de liens jusqu linstant de
chargement. Il faut alors construire les objets et les bibliothques dune manire
lgrement diffrente. Grce cette technique, on peut mettre les bibliothques
jour sans avoir recompiler et on encombre moins les disques.
Le chargeur effectue les liaisons des appels systme avec le noyau, tel que
lappel write par exemple. Enfin, il charge le programme en mmoire.
Outre le code compil le texte et la zone de donnes initialises, le fichier
excutable contient un certain nombre dautres informations. Dans le cas du
systme Unix, il y a notamment un en-tte compos dun nombre magique
(un code de contrle de type), de diverses tailles (texte, donnes, ), du point
dentre du programme, ainsi quune table de symboles pour le dbogage. Dans le
cas de MS-DOS, plusieurs formats cohabitent, notamment COM et EXE.
2.2.2. Principes de gestion
Pour effectuer le chargement, le systme alloue un espace de mmoire libre et
il y place le processus. Il librera cet emplacement une fois le programme termin.
Dans beaucoup de cas, il nest pas possible de faire tenir tous les programmes
ensemble en mmoire. Parfois mme, la taille dun seul programme est trop
importante. Le programmeur peut, dans ce cas, mettre en uvre une stratgie de
recouvrement (overlay) consistant dcouper un programme important en
modules et charger ces modules quand ils sont ncessaires. Ceci est cependant
trs fastidieux et ncessite, pour chaque nouveau programme, un redcoupage.
Les systmes dexploitation modernes mettent en uvre des stratgies qui
librent le programmeur de ces proccupations. Il existe deux stratgies
principales pour grer les chargements : le va-et-vient et la mmoire virtuelle.
Systmes dexploitation & Rseaux informatiques

54

dition 1999-2000

2.3. Lallocation
Avant dimplanter une technique de gestion de la mmoire centrale par va-etvient, il est ncessaire de connatre son tat : les zones libres et occupes; de
disposer dune stratgie dallocation et enfin de procdures de libration. Les
techniques que nous allons dcrire servent de base au va-et-vient; on les met aussi
en uvre dans le cas de la multiprogrammation simple o plusieurs processus
sont chargs en mmoire et conservs jusqu la fin de leur excution.
2.3.1. tat de la mmoire
Le systme garde la trace des emplacements occups de la mmoire par
lintermdiaire dune table de bits ou bien dune liste chane. La mmoire tant
dcoupe en units, en blocs, dallocation.
2.3.1.1.

Tables de bits

On peut conserver ltat des blocs de mmoire grce une table de bits. Les
units libres tant notes par 0 et ceux occupes par un 1. (ou linverse).

0
Figure 12

La technique des tables de bits est simple implanter, mais elle est peu utilise.
On peut faire la remarque suivante : plus lunit dallocation est petite, moins on a
de pertes lors des allocations, mais en revanche, plus cette table occupe de place
en mmoire.
2.3.1.2.

Listes chanes

Rvision : 27/10/1999

dition 19992000

55

On peut reprsenter la mmoire par une liste chane de structures dont les
membres sont : le type (libre ou occup), ladresse de dbut, la longueur, et un
pointeur sur llment suivant.
Pour une mmoire ayant ltat suivant :
0

10

15

20

Figure 13

on aurait la liste :
L

0
5

Figure 14

On peut lgrement modifier ce schma en prenant deux listes : lune pour les
processus et lautre pour les zones libres. La liste des blocs libres peut elle mme
se reprsenter en rservant quelques octets de chaque bloc libre pour contenir un
pointeur sur le bloc libre suivant.
Le systme MS-DOS utilise une variante de ce procd grce un en-tte de
16 octets qui prcde chaque zone (arne) en mmoire. Les en-ttes contiennent
notamment le type de larne (un pointeur sur le contexte du processus11 ou 0) et
sa taille.
2.3.2. Politiques dallocation

Systmes dexploitation & Rseaux informatiques

56

dition 1999-2000

Lallocation dun espace libre pour un processus peut se faire suivant trois
stratgies principales : le premier ajustement (first fit), le meilleur ajustement
(best fit), et le pire ajustement (worst fit).
Dans le cas du premier ajustement , on prend le premier bloc libre de la liste
qui peut contenir le processus quon dsire charger. Le meilleur ajustement
tente dallouer au processus lespace mmoire le plus petit qui puisse le contenir.
Le pire ajustement lui prend le plus grand bloc disponible et le fragmente en
deux.
Des simulations ont montr que le premier ajustement tait meilleur que les
autres. Paradoxalement, le meilleur ajustement , qui est plus coteux, nest pas
optimal car il produit une fragmentation importante.
2.3.3. Libration
La libration se produit quand un processus est vacu de la mmoire. On
marque alors le bloc libre et on le fusionne ventuellement avec des blocs
adjacents.
Supposons que X soit le bloc qui se libre, on a les schmas de fusion
suivants :

Avant

11

Aprs

Program Segment Prefix ou PSP.

Rvision : 27/10/1999

dition 19992000

57

L
Figure 15

La rcupration de mmoire
La fragmentation de la mmoire est particulirement dommageable car elle
peut saturer lespace disponible rapidement. Ceci est particulirement vrai pour
les gestionnaires de fentrage. Pour la diminuer, on peut compacter rgulirement
la mmoire. Pour cela, on dplace les processus, par exemple, vers la bas de la
mmoire et on les range lun aprs lautre de manire contigu. On construit alors
un seul bloc libre dans le haut de la mmoire. Cette opration est coteuse et
ncessite parfois des circuits spciaux.
Par ailleurs, une fois quun objet ou une zone a t utilis, le programmeur
systme doit rcupre la mmoire la main par une libration du pointeur sur
cette zone free(). Ceci est une source derreurs car on oublie parfois cette
opration. Si on alloue dans une fonction, il ny a plus moyen daccder au
pointeur aprs le retour de la fonction. Le bloc de mmoire est alors perdu et
inutilisable. On a une fuite de mmoire memory leak.
Certains langages ou systmes incorporent la rcupration automatique de
mmoire garbage collection. Ils librent ainsi le programmeur de cette tche. Cest
le cas de Java. Il est alors trs facile dliminer immdiatement une zone par
laffectation objet = null. Sans a, le rcuprateur doit dterminer tout seul
quune zone na plus de rfrence dans le suite du programme. La rcupration
Systmes dexploitation & Rseaux informatiques

58

dition 1999-2000

automatique de mmoire a fait lobjet de controverses mais les machines


devenant plus rapides, cette querelle est sans doute dpasse12.
Les algorithmes de rcupration de mmoire sont nombreux et varis. Ils sont
diffrents suivant les implantations de langage Java. Nous en prsentons un
simplifi : stop and copy. Un fil dexcution de basse priorit est associ la
rcupration de mmoire. On dit que la rcupration est asynchrone. Quand il
dcide de rcuprer, il arrte les autres fils. Il balaye les objets en mmoire et
rpertorie ceux qui ne sont plus rfrencs par un pointeur valide. Il les marque
libre. Pour ceci, le rcuprateur doit tenir compte des zones non rfrences et
des structures cycliques inutilises qui pourraient ne jamais tre libres. Il gre les
structures cycliques en parcourant les graphes de pointeurs pour dterminer les
zones accessibles et par complment les zones inaccessibles. Il compacte ensuite
la mmoire libre en dplaant les zones qui sont en cours dutilisation.
Lalgorithme de rcupration peut poser des problmes car priodiquement le
systme sarrte brutalement pour laisser la place au rcuprateur. On peut
demander

son

dmarrage

explicite

(synchrone)

par

la

mthode

java.lang.Runtime.gc(). La rcupration est aussi dite synchrone


lorsquil ny a plus de mmoire dans le tas. Pour pouvoir appeler le rcuprateur,
il faut lancer linterprte avec loption : -noasyncgc. On obtient la quantit de
mmoire libre avec la mthode Runtime.freeMemory(). Le tas est par
dfaut de 1 Mo. On peut positionner sa valeur en lanant linterprte avec
loption -ms16m (pour 16 Mo).

2.4. Le va-et-vient
Le va-et-vient est mis en uvre lorsque tous les processus ne peuvent pas tenir
simultanment en mmoire. On doit alors en dplacer temporairement certains

12

Selon les tenants du Prolog (ou du Lisp), la rcupration est trop importante pour la laisser

aux programmeurs et selon ceux du C++, elle est trop importante pour la laisser au systme.

Rvision : 27/10/1999

dition 19992000

59

sur une mmoire provisoire, en gnral, une partie rserve du disque (swap area
ou backing store).
Sur le disque, la zone de va-et-vient dun processus peut tre alloue la
demande dans la zone de va-et-vient gnrale (swap area). Quand un processus est
dcharg de la mmoire centrale, on lui recherche une place. Les places de va-etvient sont gres de la mme manire que la mmoire centrale. La zone de va-etvient dun processus peut aussi tre alloue un fois pour toute au dbut de
lexcution. Lors du dchargement, le processus est sr davoir une zone dattente
libre sur le disque.
Le systme excute pendant un certain quantum de temps13 les processus en
mmoire puis dplace un de ces processus au profit dun de ceux en attente dans
la mmoire provisoire. Lalgorithme de remplacement peut tre le tourniquet.
Mmoire provisoire

Mmoire utilisateur

Figure 16

13

Ce quantum est bien sr plus long que le quantum de commutation de tches vu au

chapitre sur les processus. Il tient compte du fait que les temps de chargement et de
dchargement sont beaucoup plus longs que les temps de commutation de processus.

Systmes dexploitation & Rseaux informatiques

60

dition 1999-2000

Le systme de va-et-vient, sil permet de pallier le manque de mmoire


ncessaire plusieurs utilisateurs, nautorise cependant pas lexcution de
programmes de taille suprieure celle de la mmoire centrale.

2.5. La pagination
La pagination permet davoir en mmoire un processus dont les adresses sont
non contigus. Pour raliser ceci, on partage lespace dadressage du processus et
la mmoire physique en pages de quelques kilo-octets. Les pages du processus
sont charges des pages libres de la mmoire.
15
14
13
12
11
10

9
8
7
6
5

2
1
0
Processus

4
3
2
1
0
Mmoire physique
Figure 17

On conserve lemplacement des pages par une table de transcodage :


0
1
2
3

Rvision : 27/10/1999

14
4
8
12

dition 19992000

61

La pagination permet dcrire des programmes r-entrants, cest dire o


certaines pages de codes sont partages par plusieurs processus.

2.6. La segmentation
Alors que la pagination propose un espace dadressage plat et indiffrenci,
(ceci est offert par la famille de -processeurs 68000), la segmentation partage les
processus en segments bien spcifiques. On peut ainsi avoir des segments pour
des procdures, pour la table de symboles, pour le programme principal, etc. Ces
segments peuvent tre relogeables et avoir pour origine un registre de base
propre au segment. La segmentation permet aussi le partage, par exemple du
code dun diteur entre plusieurs processus. Ce partage porte alors sur un ou
plusieurs segments.
Un exemple rduit darchitecture segmente est donn par la famille 8086 qui
possde 3 segments : le code (Code Segment), la pile (Stack Segment) et les
donnes (Data Segment).

2.7. La mmoire virtuelle

2.7.1. Prsentation
La mmoire virtuelle permet dexcuter des programmes dont la taille excde
la taille de la mmoire relle. Pour ceci, on dcoupe (on pagine ) les processus
ainsi que la mmoire relle en pages de quelques kilo-octets (1, 2 ou 4 ko
gnralement).
Lencombrement total du processus constitue lespace dadressage ou la
mmoire virtuelle. Cette mmoire virtuelle rside sur le disque. la diffrence de
la pagination prsente prcdemment, on ne charge quun sous-ensemble de
pages en mmoire. Ce sous ensemble est appel lespace physique (rel).
Systmes dexploitation & Rseaux informatiques

62

dition 1999-2000

4
2
1
0
Mmoire physique
4
3
2
1
0
Espace d'adressage
Figure 18

Lorsquune adresse est gnre, elle est transcode, grce une table, pour lui
faire correspondre son quivalent en mmoire physique. Ce transcodage est
effectu par des circuits matriels de gestion : Memory Management Unit (MMU). Si
cette adresse correspond une adresse en mmoire physique, le MMU transmet
sur le bus ladresse relle, sinon il se produit un dfaut de page. Pour pouvoir
accder la page dont on a gnr ladresse, on devra pralablement la charger en
mmoire relle. Pour cela, on choisit parmi les pages relles une page victime ;
si cette dernire a t modifie on la reporte en mmoire virtuelle (sur le disque)
et on charge sa place la page laquelle on dsirait accder.

Rvision : 27/10/1999

dition 19992000

63

Carte CPU

Mmoire

Priphrique

CPU

Adresses
virtuelles
MMU
Adresses
relles

Bus

Figure 19 Lunit de gestion de mmoire.

Il est plus facile dimplanter lalgorithme en utilisant des tailles correspondant


des puissances de deux. Pour une adresse virtuelle ou relle, on rserve les bits de
poids forts ncessaires pour coder les pages relles et virtuelles. Les bits de poids
faibles codent les dcalages lintrieur de chacune de ces pages. Par exemple,
supposons que les pages fassent 4 ko; que la taille du processus fasse 16 pages;
que la taille alloue en mmoire soit de 4 pages. Il faut 2 bits pour pouvoir coder
les pages relles, 4 bits pour les pages virtuelles et 12 bits pour les dcalages.

Systmes dexploitation & Rseaux informatiques

64

dition 1999-2000

Structure des adresses mmoires relles


Page

Adresse dans la page (12 bits)

(2 bits)

transcodage

recopie

Page

Adresse dans la page (12 bits)

(4 bits)
Figure 20 Structure des adresses mmoire de lespace dadressage

Pour raliser le transcodage, on conserve des tables contenant les donnes


ncessaires avec notamment : un bit pour marquer le prsence de la page en
mmoire relle et un bit de modification pour signaler si on a crit dans la page.
Dans ce dernier cas, la page devra tre reporte sur le disque si on dsire la
remplacer par une autre.

P. Virt.
0
1
2
3
4

P. Rel.
01

10

15

00
Figure 21

Rvision : 27/10/1999

Prsent
0
X
0
X
X

Modif.

dition 19992000

65

2.7.2. Algorithmes de remplacement de pages


Lalgorithme de remplacement de page optimal consiste choisir comme
victime, la page qui sera appele le plus tard possible. On ne peut
malheureusement pas implanter cet algorithme, mais on essaye de lapproximer le
mieux possible, avec de rsultats qui ont une diffrence de moins de 1 % avec
lalgorithme optimal.
La technique FirstIn-FirstOut est assez facile implanter. Elle consiste
choisir comme victime, la page la plus anciennement charge.
Lalgorithme de remplacement de la page la moins rcemment utilise (Least
Recently Used) est lun des plus efficaces. Il ncessite des dispositifs matriels
particuliers pour le mettre en uvre. On doit notamment ajouter au tableau une
colonne de compteurs. Par logiciel, on peut mettre en uvre des versions
dgrades.
2.7.3. Autres considrations
2.7.3.1.

Lcroulement (Thrashing)

On peut allouer les pages de mmoire physique en nombre gal pour chaque
processus. Par exemple, si la mmoire totale fait 100 pages et quil y a cinq
processus, chaque processus recevra 20 pages. On peut aussi allouer les pages
proportionnellement aux tailles des programmes. Si un processus est deux fois
plus grand quun autre, il recevra le double de pages.
Ces techniques dallocation, utilises telles quelles, peuvent provoquer un
croulement du systme. En effet, ce dernier nest viable que si les dfauts de
pages sont contenus au dessous dune limite relativement basse. Si le nombre de
processus est trop grand, lespace propre chacun sera insuffisant et ils passeront
leur temps grer des dfauts de pages.

Systmes dexploitation & Rseaux informatiques

66

dition 1999-2000

On peut limiter le risque dcroulement en considrant des abaques de


comportement. Le nombre de dfauts de pages en fonction du nombre de pages
alloues la forme dune hyperbole. Si un processus provoque trop de dfauts de
pages (au dessus dune limite suprieure) on lui allouera plus de pages; au-dessous
dune limite infrieure, on lui en retirera. Si il ny a plus de pages disponibles et
trop de dfauts de pages, on devra suspendre un des processus.
Dfaut de pages

Limite sup.

Limite inf.

Nombre de pages

Figure 22

2.7.3.2.

Lensemble de travail

Pour dterminer lespace viable dun processus, on utilise le modle de


lensemble de travail. Lensemble de travail est constitu par les zones du
processus auxquelles on accde sur un court instant de temps (une dizaine de
rfrences la mmoire). Par exemple, le mise jour dun individu dans une base
de donnes, utilisera certaines pages de code et la page correspondant lindividu.
Des simulations ont montr que cet ensemble de travail est relativement stable
un instant donn. Une allocation optimale pourrait chercher allouer chaque
processus en fonctionnement autant de pages que ncessite son espace de travail.
Dans ces conditions, les dfauts de pages seront provoques uniquement lors des
changements despace de travail. En fait ce modle nest utilis que pour la
prpagination.

Rvision : 27/10/1999

dition 19992000

2.7.3.3.

67

Lallocation locale ou globale

Lorsquon retire une page de la mmoire centrale, on peut choisir la plus


ancienne :
du point de vue global (la plus ancienne du systme);
du point de vue local (la plus ancienne du processus).
En gnral, lallocation globale produit de meilleurs rsultats.
2.7.3.4.

La prpagination

Lors du lancement dun processus ou lors de sa reprise aprs une suspension,


on provoque obligatoirement un certain nombre de dfauts de pages. On peut
essayer de les limiter en enregistrant, par exemple, lensemble de travail avant une
suspension. On peut aussi essayer de le deviner. Par exemple, au lancement dun
programme, les premires pages de codes seront vraisemblablement excutes.
2.7.3.5.

Le retour sur instructions

Sur la plupart des processeurs, les instructions se codent sur plusieurs


oprandes. Si un dfaut de page se produit au milieu dune instruction, le
processeur doit revenir au dbut de linstruction initiale et la rexcuter. On devra
alors lui donner les moyens de dterminer ladresse du premier octet et
ventuellement dannuler certaines incrmentations.
Ce retour sur instruction nest possible quavec laide du matriel. Par exemple,
le 68010 possde un registre qui mmorise les adresses des premires instructions
et les incrments. Il rend possible la pagination. Le 68000 nen dispose pas et ne
peut pas le faire.

2.8. Un exemple de gestion de la mmoire sur un microprocesseur : le 386

Systmes dexploitation & Rseaux informatiques

68

dition 1999-2000

Lexamen du processeur 386 est intressant car il combine des techniques de


mmoire pagine des techniques de segmentation14. Il dispose de 16 k segments
indpendants ayant une capacit allant jusqu 1 milliard de mots de 32 bits.
La mmoire virtuelle est fonde sur deux tables :
la table locale de descripteurs, (LDT), propre chaque programme.
Elle contient ses segments avec notamment les segments de code, de pile et
de donnes;
la table globale de descripteurs, (GDT), unique pour tout le systme et
partage par tous les processus. Elle contient les segments du systme et
notamment ceux du noyau.
Le 386 dispose de six registres de segments. Pour accder un segment
particulier, par exemple le segment de code dun processus, il charge un slecteur
dans lun des registres. Ce slecteur correspond un indice dans lune des deux
tables. Chaque entre de ces tables contient ladresse de base du segment,
ladresse de limite ainsi que certains autres champs. Grce ladresse de base, le
microprocesseur peut convertir les dcalages gnrs en adresses linaires de 32
bits.
Le 386 dispose dune pagination optionnelle avec des pages de 4 ko.
Lorsquelle est active, ladresse prcdente est interprte comme une adresse
virtuelle et elle est convertie en adresse relle. La pagination se fait sur deux
niveaux. Pour ceci ladresse gnre est interprte en fonction de 3 champs :

14

10 bits

10 bits

12 bits

Dir

Page

Offset

Cest par ailleurs le processeur 32 bits le plus rpandu.

Rvision : 27/10/1999

dition 19992000

69

Figure 23

Dir est un indice dans un tableau contenant un pointeur sur une table de
pages. Dans cette table Page est un autre indice contenant lui aussi un pointeur
(double indirection) sur une page relle. lintrieur de cette page relle, Offset
est ladresse de llment recherch.

Rpertoire des pages


(Page directory)

Page

Dir

Page relle

Table des pages

Offset

Mot slctionn

1024
entres

Figure 24

2.9. Appels systme Unix


Cette partie est incomplte en 1999
fork() entrane une allocation de mmoire
exec() entrane une modification de mmoire
wait() entrane une libration de mmoire
Les fichiers excutables Unix contiennent notamment le texte et les donnes
globales initialises; les donnes non initialises (BSS) sont alloues au
chargement. En mmoire, les segments de code ne sont pas modifiables dans la

Systmes dexploitation & Rseaux informatiques

70

dition 1999-2000

plupart des langage compils15 et sont partageables sur la plupart des systmes
modernes. Cette dernire caractristique optimise loccupation de la mmoire. En
revanche, les autres segments (donnes et pile) sont propres chaque processus.
Les segments de donnes et de pile sont continuellement modifis au cours de
lexcution et leur taille peuvent varier. Les appels modifiant ces tailles sont les
suivants :
int brk(caddr_t addr) permet de dplacer la frontire de la zone de
donnes addr. Elle peut tre utilise par malloc. Elle rend -1 si chec.

Pile d'excution

Donnes
Code

Figure 25

caddr_t sbrk(int incr) est similaire brk. Au lieu de fixer


ladresse, elle tend la zone de donnes de incr.
void *malloc(int incr) alloue un espace contigu de taille incr
dans la zone de donnes. Elle rend un pointeur sur la zone et NULL en cas
dchec. Malloc est une fonction assez primitive dallocation de mmoire. Elle
utilise lalgorithme du premier ajustement et ne recompacte pas les blocs libres de
la zone de donnes. Elle entrane de la fragmentation. Dans louvrage sur le

15

Les Prolog compils sont des exceptions notables.

Rvision : 27/10/1999

dition 19992000

71

langage C de Kernighan et Ritchie, on trouve le code dimplantation de


malloc. Il est intressant lire.
void *calloc(int n_obj, int size) rend un tableau.
void realloc(void *p, int size) rtend la zone alloue une
variable size. Elle rend NULL si chec.
void free(void *p) libre la zone pointe par p.

2.10. La mmoire du DOS


Le systme MS-DOS dispose dun modle de mmoire nettement plus
compliqu que celui dUnix. Il faut interprter cette complexit comme un
dfaut : la simplicit dUnix nest en aucune faon synonyme de mdiocrit, bien
au contraire. La gestion de mmoire du DOS est, par ailleurs, trs dpendante du
matriel sous-jacent Intel 8086 quelle exploite jusqu la corde. Larchitecture
originale sur laquelle le DOS a t dvelopp disposait dun bus dadresses de 16
bits, permettant dadresser jusqu 64 ko de mmoire. Ultrieurement, ladressage
sest fait partir dune base dont la valeur est contenue dans des registres
spcifiques de 16 bits. Ces registres correspondent gnralement des fonctions
de pile (SS), de donnes (DS) et de code (CS). Les registres contiennent les bits
de poids forts dune adresse de 20 bits, ce qui correspond un intervalle de 1 Mo.

Systmes dexploitation & Rseaux informatiques

72

dition 1999-2000

16 M
Cache et RAM disque
Extended Memory
1 M + 64 k
1M

High Memory Area


E/S, ROM, Pilotes
Upper Memory Area

640 k
Programmes
Conventional Memory
0
Figure 26

Ladressage du DOS est en fait restreint 640 ko, la partie suprieure (Upper
Memory Area) tant rserve divers programmes de pilotage dentres-sorties.
Le modle de mmoire du DOS permet des adresses au del de 1 Mo. En
prenant comme base, la valeur 0xFFFF, il est possible daller jusqu 1 Mo + 64
ko. Ceci correspond la zone de mmoire haute (High Memory Area).
Lexploitation de cette mmoire dpend de la manire variable dont est cble
la ligne dadresse 21.
Les processeurs Intel actuels permettent des adressages tendus. Le 286
autorise 16 Mo; les 386 et suivants, 4 Go. Pour tre compatible avec les
processeurs 8086, Intel a fournit un mode de fonctionnement qui permet
dexploiter les machines actuelles avec lancienne gestion de mmoire : le mode

Rvision : 27/10/1999

dition 19992000

73

rel . Ce mode limite la taille 640 ko. Cependant des modifications de MS-DOS
permette dexploiter la mmoire tendue pour des disques RAM, par exemple.

2.11 La mmoire de Windows


Les premires versions de Windows ont beaucoup souffert de larchitecture du
8086 et de lhritage du DOS. Cependant la gestion de mmoire de Windows
devient maintenant plus facile avec linterface de programmation Windows. En
effet, avec cette API, le programmeur voit la mmoire comme une zone
dadresses plate.
Windows ralise automatiquement le recompactage des donnes de la
mmoire par un mcanisme de rcupration des zones libres. Ceci est absolument
ncessaire car le fentrage ncessite de multiples crations et destructions de
mmoire et sans ce systme, la mmoire se trouverait trs vite en mille
morceaux .
Aprs une opration de recompactage, dans le meilleur des cas, les blocs libres
ne forment plus quun seul et grand segment. Dans la ralit, le compactage nest
souvent pas total, mais il permet une allocation ultrieure plus facile. Le
recompactage lieu rgulirement linitiative du systme dexploitation ou bien
pour allouer de la mmoire qui un moment donn ferait dfaut. La rcupration
des zones libres existait dj dans certains langage de programmation tels que le
Prolog ou le Lisp et dans des systmes dexploitation tels que celui du Macintosh.
Lallocation de mmoire utilise des pointeurs de pointeurs des handles. Ces
handles (HGLOBAL) sont conservs dans un segment de mmoire : le
BurgerMaster16. Le handle qui rfrence le bloc mmoire sera constant, en
revanche, le pointeur sur la mmoire relle lui sera variable au gr du systme

16

Ctait le restaurant prfr des dveloppeurs de Windows, parat-il.

Systmes dexploitation & Rseaux informatiques

74

dition 1999-2000

dexploitation. Pour manipuler les donnes, on devra verrouiller le segment et


utilisateur les pointeurs qui alors seront constants.
HGLOBAL

GlobalAlloc(UNIT

fuFlags,

DWORD

cbBytes)

alloue un segment de longueur cbBytes avec les options fuFlags. Parmi ces
options GMEM_MOVEABLE signale que le segment est relogeable, GMEM_FIXED
signale que le segment est fixe. Si il y un chec, la fonction rend NULL et on en
peut connatre la raison par la fonction GetLastError.
LPVOID GlobalLock(HGLOBAL) verrouille un segment et rend un
pointeur. Si il y un chec, la fonction rend NULL.
BOOL GlobalUnlock(HGLOBAL) dverrouille un segment. En fait elle
dcrmente le compteur des verrous sur le segment. Si ce compteur passe zro,
la valeur rendue est FALSE, sinon TRUE.
HGLOBAL GlobalFree(HGLOBAL) libre un segment. En cas de succs,
la fonction rend NULL.

La mmoire de Windows NT
Windows NT reprend le mcanisme de tas de Windows mais il lui en ajoute un
autre plus rapide. Un processus est cr avec un tas particulier et il peut en crer
dautres qui lui seront propres. Les fonctions qui manipulent les tas sont les
suivantes :
HANDLE GetProcessHeap(void) permet de retrouver le tas par dfaut
de lapplication. Cest dans ce tas que les appels GlobalAlloc trouvent de la
place libre.
HANDLE

HeapCreate(DWORD

flOptions,

DWORD

dwInitialSize, DWORD cbMaximumSize) cre un nouveau tas priv


pour

le

processus

Rvision : 27/10/1999

qui

lexcute.

Le

options

possibles

sont

0,

dition 19992000

75

HEAP_GENERATE_EXCEPTION et HEAP_NO_SERIALIZE. Les deux


autres paramtres sont gnralement 0.
LPVOID HeapAlloc(HANDLE hHeap, DWORD dwFlags, DWORD
dwBytes) permet dallouer une zone de mmoire dans un tas. Cette zone est
fixe et non dchargeable.
DWORD HeapSize(HANDLE hHeap, DWORD dwFlags, LPCVOID
lpMem) retourne la taille dun bloc dans un tas.
DWORD

HeapReAlloc(HANDLE

hHeap,

DWORD

dwFlags,

LPVOID lpMem, DWORD dwBytes) permet de modifier la taille dune


zone de mmoire dans un tas.
BOOL HeapFree(HANDLE hHeap, DWORD dwFlags, LPVOID
lpMem) permet de dtruire une zone de mmoire dans un tas.
BOOL HeapDestroy(HANDLE hHeap) permet de librer la totalit
dun tas.

Systmes dexploitation & Rseaux informatiques

76

dition 1999-2000

Chapitre 3
Le systme de fichiers

3.1. Quest ce quun fichier?

3.1.1. Une dfinition


Un fichier, dans un premier temps, peut sassimiler un ensemble de donnes
sur disque. Cette vision nest cependant que partielle et la plupart des systmes
dexploitation, notamment Unix, en offre une notion plus gnrale. Dans cet
exemple, les fichiers recouvrent aussi bien les donnes, sur une grande varit de
supports, les programmes, lensemble des caractres frapps au clavier, ou
lhorloge du systme. Le systme dexploitation ralise alors la mise en
correspondance de ces fichiers avec divers dispositifs physiques.
Les fichiers dun systme dexploitation reprsentent une partie des objets que
celui-ci manipule et avec lequel il change des informations ; lautre partie tant
compose des processus. Il est important de distinguer le point de vue
algorithmique sur les fichiers qui concerne toujours un ensemble de donnes, de
celui que nous examinons ici.
Lalgorithmique dcrit la mise en uvre dun certain nombre de manipulations
telles que la structuration de lensemble des donnes, linsertion dlments, etc.
Les systmes dexploitation considrent le systme de fichiers essentiellement
comme une interface avec des objets relativement statiques. Cette interface
dispose dune structure propre, souvent hirarchique, permettant de dsigner un
ensemble de donnes, mais aussi des priphriques.

Rvision : 27/10/1999

dition 19992000

77

Linterface du systme de fichiers aura pour objectif de banaliser le plus


possible les objets quelle recouvre, ainsi le systme Unix masque compltement
les disques locaux et les priphriques sous une arborescence unique. Il nomme
aussi ses objets dune manire uniforme. On copie par exemple le texte : abcd
, tap au clavier, dans un fichier par la commande :
$ cat > fichier
abcd
^D
et sur un terminal, par la commande :
$ cat > /dev/tty
abcd
^D
Le systme de fichiers rpartis NFS permet des oprations similaires
travers un rseau.
3.1.2. La structure dun systme de fichiers
1.

Le modle hirarchique
Les systmes dexploitation modernes adoptent une structure hirarchique des

fichiers. Chaque fichier appartient un groupe dautres fichiers et chaque groupe


appartient lui mme un groupe dordre suprieur. On appelle ces groupes, des
rpertoires, ou des dossiers17, suivant les terminologies.
Le schma de la structure gnrale dun systme de fichiers prend laspect dun
arbre, form au dpart dun rpertoire racine recouvrant des priphriques et

17

Ce terme, folder en anglais, consacr par le MacIntosh et repris par Windows 95, est

nettement plus cohrent que le prcdent. Cependant, il est peu utilis par les informaticiens
purs et durs , c'est pourquoi nous garderons la dsignation rpertoire .

Systmes dexploitation & Rseaux informatiques

78

dition 1999-2000

notamment un ou plusieurs disques. Dans chacun des rpertoires on pourra


trouver dautres rpertoires ainsi que des fichiers de donnes ordinaires.

Figure 27 Une vue du gestionnaire de fichiers d Open Look

2.

Les rpertoires et ladressage dun fichier


Les rpertoires sont, eux aussi, des fichiers, constitus des noms et des

rfrences de tous les fichiers quils contiennent. Cette structure permet alors de
construire larborescence du systme. Pour dsigner un fichier quelconque, il
suffit de spcifier lenchanement des rpertoires ncessaires son accs, partir
de la racine. Dans le systme Unix, les rpertoires de cet enchanement sont
spars par une oblique : / . Dans le systme DOS, par une contre-oblique :
\ .
Dans le systme Unix, chaque rpertoire contient aussi sa propre rfrence,
ainsi que celle du rpertoire immdiatement suprieur. . dsigne le
rpertoire courant, et .. , le rpertoire suprieur. Linclusion de ces deux
rfrences permet de dsigner un fichier quelconque, relativement au rpertoire
courant.
Pour effectuer des entres-sorties par une dsignation relative, un processus ne
peut sexcuter que dans un rpertoire. La rfrence de ce fichier est donc
conserve dans la table de chaque processus.

Rvision : 27/10/1999

dition 19992000

79

En dehors des fichiers ordinaires et des rpertoires, nous avons vu que le


systme Unix possde des fichiers spciaux de priphriques blocs et caractres. Il
connat aussi les tubes nomms, qui sont des structures FIFO (FirstIn-FirstOut)
permettant la communication entre processus.
La commande ls -l permet de vrifier le type des fichiers : dsigne les
fichiers ordinaires, d les rpertoires, c les priphriques caractres, b les
priphriques blocs, et p les tubes nomms.
3.1.3. Accs aux lments dun fichier
Les fichiers de donnes sur disques se composent dun ensemble de blocs,
comprenant un nombre fixes doctets. La premire structure possible de ces
fichiers correspond la suite des octets des blocs; ces blocs tant ordonns.
Laccs un octet se fait alors par un dplacement partir de lorigine du premier
bloc : le dbut du fichier. Le systme Unix, ainsi que le systme DOS ne
connaissent que cet accs.
Certains systmes structurent les fichiers sous la forme denregistrements
squentiels de tailles fixes, lensemble des blocs tant toujours ordonn
linairement. Ce principe est peu prs le mme que le prcdent. Il permet de
lire, de substituer un lment ou den ajouter dautres la fin, mais on ne peut pas
en dtruire ou en insrer de nouveaux au milieu du fichier.
Laccs squentiel index est une mthode plus labore, mise en uvre, entre
autres, sur les systmes MVS dIBM. On structure les blocs des fichiers sous la
forme dun arbre. Cette structure permet linsertion dlments nimporte quel
endroit dun fichier.

3.2. Les blocs du disques


Les fichiers de donnes sur les disques se rpartissent dans des blocs de taille
fixe correspondant des units dentres-sorties du contrleur de ce
Systmes dexploitation & Rseaux informatiques

80

dition 1999-2000

priphrique. La lecture ou lcriture dun lment dun fichier impliquera donc le


transfert du bloc entier qui contient cet lment. On peut formater les disques,
les rendre utilisables par le systme dexploitation , avec une taille particulire de
blocs. Cette taille rsulte dun compromis entre la vitesse daccs aux lments
des fichiers et lespace perdu sur le disque.
Lors dun transfert de donnes dun disque vers lespace dadressage dun
processus, le temps de lecture ou dcriture sur le disque est ngligeable devant le
temps daccs au bloc, et ceci quelque soit la taille du bloc. Pour un accs rapide,
on aura donc intrt prendre des blocs de grande taille. Cependant, les fichiers,
y compris les fichiers de 1 octet, ont une taille minimale de 1 bloc. Si un disque
comprend beaucoup de fichiers de petite taille et si les blocs sont de grandes
dimensions, lespace gaspill sera alors considrable.
Des tudes sur de nombreux systmes ont montr que la taille moyenne dun
fichier est de 1 Ko18. Ce chiffre recouvre bien sr de grandes variations entre, par
exemple, une base de donnes et un ordinateur usage pdagogique. Il conduit
des tailles courantes de blocs de 512, de 1024, ou de 2048 octets.
Chaque disque conserve, dans un ou plusieurs blocs spcifiques, un certain
nombre dinformations de fonctionnement, telles par exemple que le nombre de
ses blocs, leur taille, . Il mmorise aussi en gnral lensemble de ses blocs ainsi
que leur tat dans une table. Si cette table est binaire, un disque de n blocs devra
alors rserver une table de n bits; la position de chaque bit indiquant si le bloc est
libre ou si il est utilis par un fichier, par exemple, 0 pour un bloc occup et 1
pour un bloc libre. Certains systmes stockent lensemble des blocs libres dans
une liste chane.

3.3. La rpartition physique des fichiers en blocs

18

Tanenbaum, op. cit., p. 285.

Rvision : 27/10/1999

dition 19992000

81

chaque fichier correspond une liste de blocs contenant ses donnes.

Lallocation est en gnrale non contigu et les blocs sont donc rpartis quasialatoirement sur le disque. Les fichiers conservent lensemble de leurs blocs
suivant deux mthodes : la liste chane et la table dindex.
3.3.1. La liste chane
Lensemble des blocs dun fichier peut tre chane sous la forme dune liste.
Chaque bloc contiendra des donnes ainsi que ladresse du bloc suivant. Le fichier
devant mmoriser indpendamment le numro du 1er bloc. Par exemple, si un
bloc comporte 1024 octets et si le numro dun bloc se code sur 2 octets, 1022
octets seront rservs aux donnes et 2 octets au chanage du bloc suivant.

Figure 28

Cette mthode rend laccs alatoire aux lments dun fichier particulirement
inefficace lorsquelle est utilise telle quelle. En effet pour atteindre un lment
sur le bloc n dun fichier, le systme devra parcourir les n-1 blocs prcdents.
Le systme MS-DOS utilise des listes chanes. Il conserve le premier bloc de
chacun des fichiers dans son rpertoire. Il optimise ensuite laccs des blocs
suivants en gardant leurs rfrences dans une Table dAllocation de Fichiers
(FAT). Chaque disque dispose dune FAT et cette dernire possde autant
dentres quil y a de blocs sur le disque. Chaque entre de FAT contient le
numro du bloc suivant.

Systmes dexploitation & Rseaux informatiques

82

dition 1999-2000

Avec la table suivante19 :

10

11

12

13

14

15

EOF

13

12

EOF

EOF

BE

Figure 29

o XX indique la taille du disque, L dsigne un bloc libre et BE un


bloc endommag, le fichier commenant au bloc 6, sera constitu des blocs : 6
8 4 2.
Le parcours de la FAT est nettement plus rapide que la chane des blocs.
Cependant si elle nest pas constamment, tout entire en mmoire, elle ne permet
pas dviter les entres-sorties du disque.
3.3.2. La table dindex
Le systme Unix rpertorie chaque fichier par un numro unique pour tout un
disque. chaque numro, correspond un enregistrement, un nud dindex, (inode), comportant un nombre fix de champs. Parmi ces champs, certains, 13 au
total, mmorisent lemplacement physique du fichier. Les 10 premiers champs
(sur les 13) contiennent les numros des 10 premiers blocs composant le fichier.

Nud
dindex

bloc
n 1

bloc
n 2

bloc
n 3

bloc
n 4

Figure 30

Pour les fichiers de plus de 10 blocs, on a recours des indirections. Dans le


cas du systme Unix, le bloc n 11 contient le numro dun bloc compos luimme dadresses de blocs de donnes. Si les blocs ont une taille de 1024 octets et

19

Reprise de Tanenbaum, op. cit., p. 288.

Rvision : 27/10/1999

dition 19992000

83

si ils sont numrots sur 4 octets, le bloc n 11 pourra dsigner jusqu 256 blocs.
Au total, le fichier utilisant la simple indirection aura alors une taille maximale de
266 blocs. De la mme manire, le bloc n 12 contient une adresse, un pointeur,
double indirection, et le bloc n 13, un pointeur triple indirection. Avec
lexemple que nous avons donn, un fichier peut avoir une taille maximale de 16
Go quand il utilise ces pointeurs triple indirection.

Bloc n 11
Pointeur simple
indirection

Bloc n 12
Pointeur double
indirection

Bloc n 13
Pointeur triple
indirection

Figure 31

3.4. Les dossiers ou les rpertoires


Les rpertoires des systmes de fichiers hirarchiques sont des fichiers dont le
contenu est particulier. Ils permettent de rfrencer et de retrouver physiquement
les fichiers immdiatement en dessous deux dans la hirarchie. La structure la
plus commune des rpertoires prend la forme dun arbre, que nous avons illustr
au paragraphe 1. On peut parfois mettre en uvre des structures plus complexes,
de graphes acycliques ou de graphes gnraliss.
Un graphe permet deux rpertoires de rfrencer le mme fichier. On a ainsi
le moyen de partager un fichier entre, par exemple, deux utilisateurs. En gnral,
on construit les rpertoires de manire viter les cycles :

Systmes dexploitation & Rseaux informatiques

84

dition 1999-2000

Figure 32

Cependant, on peut parfois construire des structures cycliques, telle que cellesci :

Figure 33

3.4.1. Les rpertoires du systme MS-DOS


Les rpertoires du systme MS-DOS possdent une entre par fichier et
chaque entre la structure suivante :

Rvision : 27/10/1999

dition 19992000

Nom du fichier

85

Extension

Attributs

Rserv

Heure

Date

N du 1er Taille
bloc

Figure 34

Le numro du premier bloc, cluster dans la terminologie MS-DOS, indexe la


Fat et permet de retrouver la suite des lments du fichier.
3.4.2. Les rpertoires dUnix
Les rpertoires du systme Unix disposent, eux aussi, dune entre par fichier.
Chaque entre possde au moins les deux champs suivants, le numro du nud
dindex et le nom du fichier. Par exemple :

26
59
267
534

.
..
toto
titi

Figure 35

La structure exacte dune entre varie suivant les versions dUnix. Dans la
version

System

V,

elle

dcrite

par

le

fichier

den-tte

/usr/include/sys/dir.h.
On peut visualiser, et interprter, le contenu du rpertoire courant, par
exemple, grce la commande : od -c .
3.4.3. Structure et manipulation des n ud dindex
Le numro du nud dindex renvoie un enregistrement sur le disque
contenant les numros des blocs, comme on la prsent au paragraphe

Systmes dexploitation & Rseaux informatiques

86

dition 1999-2000

prcdent. Cet enregistrement contient aussi des informations, concernant la


gestion des fichiers20, dont les principales sont les suivantes :

Nud dindex
Uid du propritaire
Gid du propritaire
Type du fichier
Permissions
Nombre de liens
Taille du fichier
Date de cration
Date du dernier accs
Date de dernire modif.
13 numros de blocs et de
pointeurs

Figure 36

Lorsquon manipule des fichiers, les nuds dindex correspondants, auxquels


sajoutent quelques champs supplmentaires, sont chargs en mmoire. Parmi les
champs supplmentaires, on trouve notamment divers indicateurs, de verrouillage
du nud en mmoire, dattente de processus sur le nud, de modification en
mmoire, du nud ou du fichier, non encore reporte sur le disque. Le nud en
mmoire contient aussi, le numro du priphrique (du disque) sur lequel se
trouve le fichier, le numro du nud dindex, le nombre de fois o le fichier a t
charg en mmoire (le nombre douvertures en cours)21.
Pendant lexcution dun appel systme concernant un fichier, le nud dindex
se verrouille. Deux processus ne peuvent donc pas effectuer, simultanment, une
opration sur le mme fichier. En cas de conflit, lun des deux doit attendre. Ceci
vite que le nud ne se retrouve dans un tat incohrent. Cependant ce nud
nest pas verrouill entre les appels systme et des processus peuvent donc se

20

Bach, p. 64, op. cit.

21

Bach, p. 65, op. cit.

Rvision : 27/10/1999

dition 19992000

87

partager un fichier ouvert. Si un utilisateur dsire un accs exclusif, il devra mettre


en uvre, par exemple, un smaphore.
La position courante de lecture et dcriture des processus dans un fichier,
nest pas contenue dans le nud dindex, mais dans une table spare, globale
tous les processus. Cette organisation est ncessaire pour que deux processus
puissent lire ou crire des endroits diffrents du fichier. On repre les entres de
cette table par les descripteurs des fichiers22, rendus par open, et que manipule
read, write, . En revanche, la position courante est partage par les fils dun
processus, lorsque le fichier a t ouvert avant la cration de ces fils. Les fils se
rfrent alors au fichier par le mme numro de descripteur. Grce ces
proprits, on peut, par exemple, tablir une communication travers un tube.

22

Ces descripteurs de fichiers indicent une table prive (propre chaque processus) dont les

lments pointent sur la cellule de la table globale o se trouve la position courante.

Systmes dexploitation & Rseaux informatiques

88

dition 1999-2000

Table des fichiers


ouverts, (par
processus)
0
1
2
3
4

Table structure
de fichiers
Position

compte

Table des i-n uds

i-n ud

compte

Pre

Fils

0
1
2
3
4

0
1
2
3
4

Figure 37

3.4.4. Le partage de fichiers par liens avec Unix


Un mcanisme permet de construire des structures de rpertoires ayant la
forme de graphes acycliques orients et ainsi de partager des fichiers. Pour cela,
plusieurs rpertoires doivent rfrencer le mme nud dindex, ventuellement
sous un nom diffrent. On appelle chaque nouveau rfrencement dun nud, la
cration dun lien sur le fichier correspondant.
Une fois les liens tablis, le fichier pourra tre dsign sous lun quelconque
des noms. Pour sa part, le nud dindex conservera, dans un de ses champs, le
nombre de fichiers qui le rfrence, indpendamment des protections sur le

Rvision : 27/10/1999

dition 19992000

89

fichier. Lajout dune rfrence incrmentera le nombre de liens du nud.


Llimination dun fichier par un utilisateur dcrmentera ce nombre. La
destruction effective du nud, et par l du fichier, aura lieu lorsque le compte des
liens sera nul.

3.5. La mmoire cache


Les processus ne peuvent pas manipuler directement les donnes du disque. Ils
sont obligs, pour cela, de les dplacer en mmoire centrale. Les transferts
seffectuent par blocs et il est souvent inutile deffectuer autant dentres-sorties
sur disque que daccs au fichier. La plupart des systmes de fichiers gre les
entres-sorties grce une mmoire intermdiaire : la mmoire cache ou
lantmmoire. Cette mmoire cache fait correspondre des blocs tampons en
mmoires aux blocs du disque.
La stratgie gnrale dutilisation de la mmoire cache est la suivante : on lui
alloue un certain nombre de blocs en mmoire centrale. Lorsque lon accde un
lment dun fichier, on examine la suite de ces blocs. Si le bloc dsir celui qui
contient llment du fichier se trouve dans la mmoire cache, on pourra y lire
ou y crire directement llment, sinon, on produira un bloc libre de la mmoire
cache, on y chargera le bloc du disque et on effectuera les oprations de lecture
ou dcriture. Un bloc un tampon pourra tre partag dans la mmoire cache
par plusieurs processus et il ne pourra sy trouver quen un seul exemplaire.
Dans le systme Unix23, les blocs tampons sont relis par un double chanage
des blocs libres et des blocs occups. Ils possdent, dautre part, un en-tte
indiquant le numro du priphrique, le numro du bloc, ainsi que ltat du
tampon :

23

Bach, chap. 3, op. cit.

Systmes dexploitation & Rseaux informatiques

90

dition 1999-2000

N du N du tat
priph. bloc

Ptr sur le Ptr


sur Ptr
sur Ptr
sur Ptr
sur
bloc
de tampon
tampon
tampon libre tampon
donnes
occup suiv. occup prc. suiv.
libre prc.
Figure 38

Le systme Unix ordonne ses tampons suivant lordre dernire utilisation. En


cas de demande de chargement dun bloc du disque, il liminera le moins
rcemment utilis (algorithme LRU). Un codage par hachage acclre laccs.
Il existe plusieurs politiques de recopie des blocs de la mmoire cache sur le
disque lorsquils ont t modifis, en fonction dun compromis entre la scurit et
la vitesse. Dans le systme Unix, les nuds dindex et les rpertoires sont recopis
immdiatement aprs leur modification. Les blocs de donnes ordinaires sont
recopis si leur tampon atteint la fin de la liste LRU ou automatiquement par un
dmon toutes les 15 secondes. On peut dclencher ce dmon par lappel systme
par lappel de la fonction sync(). Les tampons du systme MS-DOS sont
recopie immdiate.

3.6. La structure physique dun disque Unix


Chaque disque physique au format Unix possde la structure suivante :

Bloc
dmarrage

bits nuds dindex


Super bloc Table bits Table
i-nuds blocs donnes (plusieurs blocs )

Donnes
(plusieurs blocs )

Figure 39

Le bloc de dmarrage contient le code ncessaire tout disque pour se lancer.


Le super bloc donne des informations sur les fichiers, telles que le nombre de
nuds dindex, le nombre de blocs, le premier bloc de donnes, la taille maximale
de fichiers, etc.

Rvision : 27/10/1999

dition 19992000

91

Le super bloc est charg en mmoire o on lui ajoute quelques informations


supplmentaires, telles que le numro du priphrique, un indicateur de mise
jour, etc.

3.7. La structure logique dun disque Unix


Le systme Unix permet de runir plusieurs disques sous une arborescence
unique.

users

temp

anne1

anne2

anne3

Figure 40

On ralise cet attachement par un montage , grce la commande :


/etc/mount /dev/fd1 /users
o /dev/fd1 dsigne le disque monter.
Le systme mont devient :

Systmes dexploitation & Rseaux informatiques

usr

92

dition 1999-2000

users

anne1

temp

anne2

usr

anne3

Figure 41

Une table des volumes monts garde la trace des diffrents priphriques24.
Elle contient les lments suivants :

N du priph. Ptr sur le tampon Ptr sur le i-nud du Ptr sur le i-nud du rpert.
mont
du super bloc
systme mont
de montage
Figure 42

Elle permet dassocier les disques larborescence du systme. Ainsi


lutilisateur peut parcourir les rpertoires sans en supposer leur organisation
physique.

3.8. Rparer le systme de fichier


Les disques magntiques sont des dispositifs dlicats et il est frquent de
retrouver certains de leurs blocs, ou parfois mme leurs rfrences, dans un tat
incohrent.
Pour vrifier cette cohrence, on peut reconstruire la table des blocs occups,
en examinant tous les fichiers et en incrmentant le compte dun bloc chaque fois

24

Bach, p. 126, op. cit.

Rvision : 27/10/1999

dition 19992000

93

quil est rfrenc. Si le systme est cohrent, la table des blocs occups doit tre
complmentaire de celle des blocs libres.
Si un bloc napparat ni dans la table des blocs libres, ni dans celle des blocs
occups, le bloc est dit manquant. On peut le rparer en le rajoutant la liste des
blocs libres.
Si un bloc appartient deux ou plusieurs fichiers, le systme est sans doute
profondment incohrent. On peut effectuer une tentative de rparation en
recopiant le bloc dfectueux des emplacements libres autant de fois quil est
rfrenc puis en affectant chacun de ces nouveaux blocs lun des fichiers qui
les rfrenaient.
On peut aussi vrifier la cohrence du point de vue des liens. Chaque numro
de nud dindex doit apparatre autant de fois dans la structure arborescente quil
possde de liens.
Sur la plupart des systmes Unix, le programme fsck effectue cette tche
chaque dmarrage, si ncessaire.

3.9. La scurit
Ce paragraphe est incomplet en 1999
3.9.1. La protection physique

3.9.2. La protection des fichiers

3.9.3. les listes daccs

3.10. Les fonctions dUnix

Systmes dexploitation & Rseaux informatiques

94

dition 1999-2000

Les appels systmes dUnix sont en majorit destins la gestion des fichiers
et des rpertoires. Nous allons en donner ici une liste, ainsi quune description
succincte. En cas derreur, les appels systme rendent en gnral -1.
int creat(char *ref, int mode) cre, ou tronquera, le fichier
ref avec les droits daccs mode, masqus par le rsultat de la fonction
umask. creat alloue un nouveau nud dindex, inscrit la rfrence dans le
rpertoire parent et ouvre le fichier en criture. La fonction alloue un lment des
tables globale et prive des fichiers. Elle rend un descripteur entier indexant cette
dernire.
Nous avons dcrit int open(char *ref, int indicateurs)
dans les chapitres sur les processus et les entres-sorties. Du point de vue du
systme de fichiers, open, alloue un lment des tables globale et prive des
fichiers. La fonction rend un descripteur indiant la table prive et elle positionne,
par dfaut, le dplacement 0 dans la table globale.
int read(int df, char *tampon, int nb) lit nb octets du
fichier de descripteur df et les place dans tampon. Elle rend le nombre de
caractres rellement lus. La fonction int

write(int

df,

char

*tampon, int nb) lui est similaire.


int close(int df) libre, ou dcrmente, les diffrents emplacements
correspondants des tables de fichiers, ainsi que des nuds dindex en mmoire.
int lseek(inf df, long dplacement, int origine)
permet de positionner la lecture ou lcriture un endroit particulier du fichier de
descripteur df, en fonction dun dplacement dplacement par rapport
origine. origine peut prendre 3 valeurs, 0 indique le dbut du fichier, 1 la
position courante et 2 la fin du fichier.
int mknod(char *rf, int mode, int dev) permet de crer
un nud dindex attach un fichier spcial.

Rvision : 27/10/1999

dition 19992000

int

chdir(char

95

*rf) permet un processus de changer de

rpertoire de travail.
int chroot(char *rf) change le nud dindex de la racine du
systme.
int chown(char *rf, int propr, int group) change le
propritaire et le groupe du fichier rf.
int chmod(char *rf, int mode) change les droits du fichier
rf.
int

stat(char

*ref,

struct

stat

*tampon) fournit le

contenu du nud dindex du fichier rf, lexception des numros des blocs.
Cette information sera rendue dans la structure tampon. Sa dfinition se trouve
dans le fichier /usr/include/sys/stat.h
int fstat(int df, struct stat *tampon) est semblable la
fonction prcdente, mais manipule le descripteur dun fichier ouvert.
int dup(int df) rend le plus petit descripteur de fichiers disponible et
le fait pointer sur mme emplacement que df dans la table globale des fichiers.
int mount(char *priph, char *rpert, int options)
rattache le priphrique de fichier spcial priph au rpertoire rpert. Les
options permettent le rattachement en lecture seule.
int umount(char *priph) dtache le fichier spcial priph.
int link(char *fichier1, char *fichier2) cre la rfrence
fichier2 et la rend quivalente fichier1. Cet appel aura pour effet
dincrmenter le compte lien du nud dindex de fichier1.
int unlink(char *fichier) dtruit la rfrence fichier. Si le
compte lien du nud dindex correspondant devient nul, le fichier sera limin du
disque.
Systmes dexploitation & Rseaux informatiques

96

dition 1999-2000

int access(char *rf, int mode) permet deffectuer des tests


sur les fichiers.
int fcntl(int df, int commande, int argument) est une
fonction usages multiples. Elle permet de modifier finement le comportement
des fichiers et notamment de verrouiller des enregistrements.
int pipe(&df[0]) cre un tube de communication. Voir le chapitre sur
les processus.

3.11. Les fonctions de Windows NT


Le systme de fichiers de Windows NT est capable de fonctionner avec trois
types de format : la FAT, NTFS et CDFS. Windows NT fournit un ensemble
complet de fonctions pour grer le systme de fichier. Nous en en prsentons ici
un aperu.
DWORD

GetCurrentDirectory() permet dobtenir le rpertoire

courant.
BOOL SetCurrentDirectory() permet de positionner le rpertoire
courant.
BOOL CreateDirectory() permet de crer un rpertoire.
BOOL RemoveDirectory() permet de dtruire un rpertoire
HANDLE CreateFile() permet de crer un fichier
BOOL CopyFile() copie un fichier dans un autre.
BOOL DeleteFile() dtruit un fichier.
BOOL MoveFile() dplace un fichier.
BOOL ReadFile() lit des donnes dans un fichier.

Rvision : 27/10/1999

dition 19992000

97

BOOL WriteFile() crit des donnes dans un fichier.


DWORD SetFilePointer() positionne le point de lecture dans un
fichier.
BOOL SetEndOfFile()
BOOL FlushFileBuffer() vide le tampon et force lcriture sur le
disque.
BOOL LockFile() verrouille un segment de fichier
BOOL UnlockFile() dverrouille un segment de fichier

3.12. Linterface du langage C


Le langage C fournit une interface de manipulation de fichiers, disposant dune
mmoire cache et permettant des formats de type courant : entiers, rels, Les
fonctions de manipulation correspondent louverture, la fermeture, lcriture,
Linterface du langage C rserve un tableau den-ttes, dcrits par la structure
_iobuf, dans le fichier stdio.h. louverture dun fichier, il correspondra
laffectation dun de ces en-ttes. Le tampon de len-tte, dsign par le champ
_base de la structure sera alors allou.
_filbuf est la fonction de remplissage. Elle fait passer les donnes, de la
mmoire cache des blocs au tampon point par _base.
_flsbuf est la fonction de vidage du tampon, dans la mmoire cache des
blocs. Elle intervient quand la tampon est plein ou la rencontre dun retour la
ligne "\n".

Systmes dexploitation & Rseaux informatiques

98

dition 1999-2000

FILE._base
_filbuf

_flsbuf
Antmmoire des blocs
Figure 43

Les principales fonctions de manipulation des fichiers sont :


FILE *fopen(char *nom, char *mode) ouvre un fichier et
recherche un en-tte vide dans la table.
int fclose(FILE *) libre len-tte.
int getc(FILE *) lit un caractre dans le tampon.
int putc(char c, FILE *) crit un caractre dans le tampon.
int fscanf(char *, lit un ensemble de variables suivant un format.
int fprintf(char *, crit un ensemble de variables suivant un format.
int fseek(FILE *, long, int) effectue un dplacement dans le
fichier.
fflush(FILE *) vide immdiatement le tampon de la structure _iobuf
dans la mmoire cache des blocs.
Le chapitre 8 du Langage C, de Kernighan & Ritchie fournit une description
complte de la structure de donnes, ainsi que le code de la fonction fopen()
crit partir de fonctions Unix. Dans ce chapitre de ce livre, les structures sont
un peu simplifies. La partie qui suit est un exemple rel :

Rvision : 27/10/1999

dition 19992000

99

/* @(#)stdio.h 1.16 89/12/29 SMI; from UCB 1.4 06/30/83 */


#ifndef FILE
#define BUFSIZ
1024
#define _SBFSIZ 8
extern
struct
_iobuf {
int
_cnt;
unsigned char *_ptr;
unsigned char *_base;
int
_bufsiz;
short _flag;
char _file;
/* should be short */
} _iob[];
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define

_IOFBF
0
_IOREAD
01
_IOWRT
02
_IONBF
04
_IOMYBUF
010
_IOEOF
020
_IOERR
040
_IOSTRG
0100
_IOLBF
0200
_IORW 0400
NULL 0
FILE struct _iobuf
EOF
(-1)

#define
#define
#define

stdin (&_iob[0])
stdout
(&_iob[1])
stderr
(&_iob[2])

#ifdef lint
/* so that lint likes (void)putc(a,b) */
extern int putc();
extern int getc();
#else
#define getc(p)
(--(p)->_cnt>=0? ((int)*(p)->_ptr++):_filbuf(p))
#define putc(x, p) (--(p)->_cnt >= 0 ?\
(int)(*(p)->_ptr++ = (unsigned char)(x)) :\
(((p)->_flag & _IOLBF) && -(p)->_cnt < (p)->_bufsiz ?\
((*(p)->_ptr = (unsigned char)(x)) != \n ?\
(int)(*(p)->_ptr++) :\
_flsbuf(*(unsigned char *)(p)->_ptr, p)) :\
_flsbuf((unsigned char)(x), p)))
#endif
#define getchar()
getc(stdin)
#define putchar(x) putc((x),stdout)
#define feof(p)
(((p)->_flag&_IOEOF)!=0)
#define ferror(p)
(((p)->_flag&_IOERR)!=0)
#define fileno(p)
((p)->_file)
#define clearerr(p) (void) ((p)->_flag &= ~(_IOERR|_IOEOF))
extern
extern
extern
extern
extern
extern

FILE
FILE
FILE
FILE
FILE
long

*fopen();
*fdopen();
*freopen();
*popen();
*tmpfile();
ftell();

Systmes dexploitation & Rseaux informatiques

100

extern
extern
extern
extern
extern
extern
extern

dition 1999-2000

char
char
char
char
char
char
char

#define
#define
#define
#define
# endif

*fgets();
*gets();
*sprintf();
*ctermid();
*cuserid();
*tempnam();
*tmpnam();

L_ctermid
L_cuserid
P_tmpdir
L_tmpnam

Rvision : 27/10/1999

9
9
"/usr/tmp/"
25
/* (sizeof(P_tmpdir) + 15) */

dition 19992000

101

Chapitre 4
Les entres-sorties

4.1. Comment

le

processeur

communique

avec

lextrieur

4.1.1. Gnralits
Lordinateur peut effectuer des entres-sorties changer des donnes avec
des organes externes :
lectroniques, tels que les mmoires,
magntiques, tels que les disques ou les disquettes,
mcaniques, tels que le clavier, les imprimantes,
Les priphriques les organes externes mis en uvre sont de nature trs
diffrente et lun des objectifs du systme de gestion des entres-sorties est de
prserver une relative homognit dans leur mode daccs. Les entres-sorties
forment une trs part importante, au moins en volume de code, des systmes
dexploitation. Leur tude, qui prsente beaucoup plus daspects techniques que
thoriques, est cependant parfois nglige.
On classe les priphriques dentres-sorties en deux catgories principales :
les priphriques blocs;
les priphriques caractres.

Systmes dexploitation & Rseaux informatiques

102

dition 1999-2000

On gre les donnes des priphriques blocs par lintermdiaire de blocs de


tailles fixes, couramment de 512 ou 1024 octets et parfois plus. Laccs chacun
de ces blocs tant alatoire. Les disques correspondent, peu prs, aux
priphriques blocs.
Les autres priphriques sont donc, en gnral, des priphriques caractres.
Ils fournissent ou acceptent une suite de caractres sans relle structure. Les
terminaux, les crans, les mmoires sont des priphriques caractres.
On doit noter que cette classification des priphriques en deux catgories est
assez grossire et, dans certains cas, plutt arbitraire. Certains priphriques ne
correspondent ni lune ni lautre dfinition, dautres tant recouverts, par
contre, par les deux dfinitions, les drouleurs de bandes par exemple.
4.1.2. Les contrleurs
La plupart du temps, le processeur ne commande pas directement les
priphriques. Il utilise pour cela un circuit spcialement adapt, un contrleur ,
de caractristiques propres chaque priphrique. Les commandes du processeur
au priphrique sopreront alors par lintermdiaire de ce contrleur. Ces
commandes

correspondent

directement

aux

mcanismes

physiques

du

priphrique telles, par exemple, que le dplacement du bras dun lecteur de


disque. Par ailleurs, les contrleurs sont souvent dune grande complexit
lectronique.
On relie les contrleurs au bus de lordinateur et on leur alloue, chacun, un
certain nombre dadresses. ces diffrentes adresses, on mettra des commandes
de pilotage ou on effectuera des entres-sorties de donnes. Le contrleur
reconnatra ses adresses grce une logique de dcodage. Dans certains
ordinateurs, les contrleurs ne sont pas relis au bus mais des voies dentressorties spcifiques.

Rvision : 27/10/1999

dition 19992000

103

Ctl
Disque

Bus
Figure 44

Les contrleurs et le processeur oprent en parallle. Le contrleur dispose


dune mmoire tampon, pour lui permettre, par exemple, de lire des donnes en
provenance du priphrique dentre pendant que le processeur traite une autre
tche. Le contrleur signale lachvement de son travail en mettant une
interruption qui lui est propre. la rception de cette interruption, le processeur
se branche un emplacement fixe. La valeur de cet emplacement est contenue
dans une adresse un vecteur spcifique chaque interruption25. ladresse
dinterruption, une routine ralise, en gnral, le transfert des donnes vers la
mmoire principale, puis rend la main au processus prcdent.

Contrleur

Adresses dentres-sorties

Vecteurs
(IRQ)

Horloge

040-043

Clavier

060-063

Port COM 1

3F8-3FF

Table 1. Les adresses et les vecteurs de quelques priphriques de lIBM PC.

25

Et donc ce contrleur.

Systmes dexploitation & Rseaux informatiques

104

dition 1999-2000

4.1.3. Un exemple simple de fonctionnement : crire sur un disque


Pour transfrer des donnes sur un disque, le pilote de ce disque met des
commandes, aux adresses adquates, dans les registres du contrleur. Ces
commandes sont, la mise en route ventuellement, le positionnement de la tte
sur le bon cylindre, puis linstruction dcriture, avec les paramtres ncessaires,
notamment le secteur o crire le bloc. Le pilote transmet ensuite les donnes
crire, lune aprs lautre, dans les tampons du contrleur puis il se bloque en
attendant la fin de lcriture effective.
Pendant ce temps, le processeur pourra lire une autre tche. Le contrleur
crira seul, sur le disque, les donnes contenues dans ses tampons et quand il aura
termin son action, il mettra une interruption. Linterruption dbloquera le
pilote et lancera lordonnanceur. Ce dernier pourra activer le pilote qui vrifiera
alors que lopration sest bien droule.
4.1.4. Laccs direct la mmoire
Pour les priphriques blocs, le transfert des donnes entre la mmoire et le
contrleur nest pas, en gnral, ralis par le processeur, mais par un circuit
spcialis daccs direct la mmoire (DMA).
Ce circuit DMA est attach au priphrique. Il utilise des instants particuliers
du cycle de fonctionnement du processeur pour crire les donnes de la mmoire
centrale vers les tampons du contrleur, ou bien linverse. Il permet ainsi
doccuper le processeur dautres tches de traitement. Avant de le lancer, le
processeur doit bien sr lui communiquer, le sens du transfert, ladresse dorigine
de la zone mmoire o on dsire lire ou crire des donnes, ainsi que le nombre
doctets transfrer.

4.2. Les diffrents niveaux des logiciels dentressorties

Rvision : 27/10/1999

dition 19992000

105

Le traitement des entres-sorties se fait sur plusieurs niveaux, des plus proches
du matriel aux plus proches de lutilisateur. Les niveaux proches de lutilisateur
doivent sefforcer, autant que possible, de masquer les particularits physiques des
priphriques.
Les niveaux purement matriels sont constitus des interruptions mises par
les diffrents priphriques vers le processeur. Ces interruptions correspondent
des indications, par exemple de fin de traitement. Le systme dtermine lorigine
des interruptions et fait passer le pilote destinataire, en gnral, de ltat bloqu
ltat prt. Les interruptions ont aussi souvent pour effet de relancer
lordonnanceur. Si le pilote est de nouveau lu, et il le sera de toute faon un
moment, il transmettra au processus demandeur, les rsultats de lentre-sortie, et
il le dbloquera son tour. Du point de vue conceptuel, ces dblocages de
ressources se formalisent par des oprations sur des smaphores :
V(ressource).
Les pilotes de priphriques soccupent de traduire les requtes des entressorties dans des commandes propres chaque contrleur. Ils grent aussi une
partie des erreurs matrielles. Ils sintgrent enfin, dans le cas dUnix, dans le
systme de fichiers. Les fichiers pouvant recouvrir la fois des donnes sur
disques, des priphriques, Ce systme de fichiers lavantage de prsenter une
interface uniforme aux entres-sorties :
dadressage,
de protection,
dallocation et de libration des priphriques,
de signalisation des erreurs, etc.
Pour lutilisateur, les fonctions dinterface, les appels systme, correspondent
alors louverture ou la fermeture dun fichier, la lecture ou lcriture de
donnes, enfin, au positionnement des conditions dchange pour les
priphriques caractres.

4.3. Les dispositifs matriels dentres-sorties


Systmes dexploitation & Rseaux informatiques

106

dition 1999-2000

Cette partie est incomplte en 1999


4.3.1. Les disques
Les disques sont constitus dun ou plusieurs cylindres. Chaque cylindre
possde un certain nombre de pistes. Un disquette simple face a une piste par
cylindre, une double face en possde deux. Chaque piste est divise en secteurs
dangles gaux. En gnral, on a un bloc par secteur, parfois il faut plusieurs
secteurs pour un bloc. Les paramtres temporels importants sont les temps
moyens de positionnement du bras et le temps de rotation.
Plusieurs algorithmes permettent dordonnancer le bras du disque. Le plus
simple est celui qui sert les demandes dans leur ordre darrive. (First Come-First
Served). Lun des plus efficace est celui de lascenseur. Il traite les demandes en
les ordonnant en fonction de la position de leur cylindre sur le disque, de
lintrieur vers lextrieur et en oprant des balayages entre les deux secteurs
extrmes.
4.3.2. Les terminaux
Les terminaux, de type VT100, sont relis lordinateur par une voie RS-232
asynchrone. La transmission sopre en srie par lintermdiaire dun circuit
UART (Universal Asynchronous Receiver Transmitter). La vitesse de transmission est,
en gnral, paramtrable et sexprime, de manire impropre, en bauds.
Les terminaux plus rcents, tels que les consoles graphiques, ou les terminaux
X, ont une mmoire vido. Les lments qui composent lcran, les caractres, les
formes gomtriques, les fentres, les images, sont transforms en une matrice de
points. La matrice est transfre dans la mmoire vido. Un dispositif balaie cette
mmoire priodiquement pour lafficher.
Les logiciels des terminaux peuvent oprer en mode canonique, cest dire en
filtrant et en interprtant certains caractres, tel que leffacement. Il peuvent aussi
tout transmettre au processeur, il sagit alors du mode non-canonique.

Rvision : 27/10/1999

dition 19992000

107

4.3.3. Les mmoires

4.3.4. Les horloges


Les horloges sont un composant fondamental des systmes temps partag.
Elles fonctionnent en mettant des interruptions priodiques qui agissent,
notamment, en dclenchant lordonnanceur.
4.3.5. Lespace de va-et-vient (swap area)

4.3.6. Une interface normalise : SCSI


Cette interface tend se rpandre de plus en plus. Elle permet des transfert de
8/16 ou 32 bits en parallle des vitesses de 2 ou 5 MHz. Les dispositifs sont
relis sous la forme dun chapelet : daisy chain . Le premier se connectant sur
le port de lordinateur, le second sur le port de sortie du premier, etc. Beaucoup
de disques magntiques ou de disques optiques CD-ROM ont une interface SCSI.

4.4. Les interblocages


Un interblocage survient quand deux processus dtiennent chacun une
ressource en exclusivit et ont besoin, pour continuer, de la ressource de lautre.
Les interblocages dpassent largement le champ des entres-sorties, mais ils
peuvent se produire assez souvent cette occasion.

Systmes dexploitation & Rseaux informatiques

108

Proc 1

dition 1999-2000

Proc 2
Allou
Demande

R1

R2
Figure 45

La rsolution des interblocages constituent un point thorique trs tudi. On


dispose son sujet dune littrature abondante, mais parfois peu lisible. Cette
dbauche intellectuelle na cependant pas fourni, pour linstant, de solution
compltement satisfaisante et la plupart des systmes notamment Unix ne
cherche pas traiter ce phnomne. Cependant, si on ne peut pas rsoudre le
problme dans sa gnralit, on devra tenir compte de certaines techniques qui
minimisent les risques.
4.4.1. Comment les interblocages se produisent
Des auteurs ont montr que les interblocages se produisent quand quatre
conditions sont remplies :
1. lexclusion mutuelle pour la prise dune ressource;
2. la possibilit de dtenir une ressource et dattendre pour obtenir dautres
ressources;
3. labsence de rquisition; on ne peut pas retirer dautorit une ressource alloue;
4. Il se produit un cycle dans le graphe orient reprsentant la dtention et
lattente.

Rvision : 27/10/1999

dition 19992000

109

On peut faire lautruche et ignorer les possibilits dinterblocages. Cette


stratgie est celle de la plupart des systmes dexploitation courants. On peut
aussi tenter de traiter les interblocages, en dtectant les circularits ou les
processus bloqus pendant trop longtemps et en les liminant avec tous les
dangers que cela comporte. On peut enfin tenter de prvenir les interblocages, de
manire statique en considrant leurs conditions dapparition, ou de les viter
dynamiquement en allouant les ressources des processus avec prcaution.
4.4.2. La prvention des interblocages
Pour prvenir les interblocages, on doit liminer une des quatre conditions
ncessaires leur apparition.
Pour viter lexclusion mutuelle, il est parfois possible de srialiser les requtes
portant sur une ressource. Par exemple, pour les imprimantes, les processus
spoulent leurs travaux dans un rpertoire spcialis et un dmon dimpression
les traitera, en srie, lun aprs lautre.
Pour ce qui concerne la deuxime condition, elle pourrait tre vite si les
processus demandaient leur ressources lavance. Ceci est en fait trs difficile
raliser dans la pratique car lallocation est, en gnral, dynamique. Empcher
cette condition serait donc particulirement coteux.
La troisime condition nest pas raisonnablement traitable pour la plupart des
ressources sans dgrader profondment le fonctionnement du systme. On peut
cependant lenvisager pour certaines ressources dont le contexte peut tre
sauvegard et restaur.
Enfin, on peut rsoudre le problme de lattente circulaire en numrotant les
ressources et en nautorisant leur demande, par un processus, que lorsquelles
correspondent des numros croissants.
4.4.3. Lvitement

Systmes dexploitation & Rseaux informatiques

110

Lalgorithme

dition 1999-2000

du

banquier

est

une

technique

permettant

dallouer

dynamiquement des ressources des processus, en prenant soin quaucun des


processus en cours ne puisse rester indfiniment bloqu.
Considrons le cas o on dispose de plusieurs exemplaires de la mme
ressource. On construit un tableau o, pour chaque processus, on note le nombre
maximal de ressources demandables et ainsi que le nombre de ressources alloues
un instant t. Par analogie avec une banque, le nombre maximal est, en quelque
sorte, le crdit total du processus et le nombre allou, son encours. La somme
totale des crdits des ressources peut tre suprieure au nombre de ressources
rellement disponibles.
Dans ces conditions, on est certain de pouvoir terminer si la somme du
nombre maximal de ressources allouable un processus et des ressources alloues
aux autres processus est infrieure ou gale au nombre total de ressources
rellement disponibles. En effet, le premier processus pourra se terminer
condition de suspendre les autres. Il relchera alors ses ressources et permettra
aux suivants de poursuivre.
Par exemple, si le nombre total de ressources est de 6 et quon se trouve dans
ltat suivant :
Processus

Res. alloues

Res. maxi.

P1

P2

P3

P4

Les ressources alloues sont au nombre de 4, pour rester dans un tat sr, on
doit suspendre P1, P3 et P4, et permettre P2 de terminer, puis laisser, soit P1,
soit P3 se terminer.
On peut gnraliser cet algorithme pour des ressources de plusieurs types.

Rvision : 27/10/1999

dition 19992000

111

4.5. Les fonctions Unix


Lcriture dun pilote dentres-sorties est une tche assez complexe. Nous
nexaminerons que les grandes lignes de la structure des entres-sorties sous Unix.
Pour plus de dtails, le lecteur pourra considrer les exemples se trouvant sur le
serveur Hewlett-Packard dans les rpertoires : /usr/lib/drivers ou
/systems/DRIVERS.
4.5.1. Les priphriques et Unix
Le systme Unix dsigne chaque priphrique par un fichier. De manire
courante, on rassemble les fichiers de tous les priphriques dans le rpertoire :
/dev (device). Ces fichiers sont appels spciaux .
On obtient leurs caractristiques avec la commande : ls -l, ceci donne, par
exemple, sur un ordinateur Sun du Laboratoire dInformatique de lISMRA :

Systmes dexploitation & Rseaux informatiques

112

total 11
-rwxr-xr-x
crw-rw-rwcrw-rw-rwcrw-rw-rwcrw-rw-rwcrw--w---crw-rw-rwcrw-r----crw-rw---crw-r----crw-rw-rwbrw-rw-rwbrw-rw-rwbrw-rw-rwbrw-rw-rwcrw-rw-rwcrw-rw-rwcrw-rw-rwcrw-rw-rwcrw-rw-rwcrw------crw-r----srw-rw-rwcrw------crw------crw-r----crw-rw-rwcrw------crw-rw-rwcrw-rw-rw...
crw-rw-rwcrw-rw-rwcrw-rw-rw...
crw-rw-rwcrw-rw-rw-

dition 1999-2000

1
1
1
1
1
1
1
1
1
1
1
2
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3

root
root
root
root
root
pierre
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root

9499
37, 69
69, 128
68,
0
31,
0
0,
0
11,
0
7,
0
41,
0
3, 11
22,
0
16,
2
16,
0
16,
1
16,
2
32,
0
32,
1
32,
2
32,
3
29,
0
16,
0
3,
1
0
3,
4
3,
3
3,
0
13,
0
37, 40
18,
4
18,
5

Feb
Mar
Mar
Mar
Mar
Mar
Mar
Mar
Mar
Mar
Mar
Mar
Mar
Mar
Mar
Mar
Mar
Mar
Mar
Mar
Mar
Mar
Mar
Mar
Mar
Mar
Mar
Mar
Mar
Mar

8
11
11
11
11
25
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
25
11
11
11
11
11
11
11

1990
16:13
16:13
16:18
16:18
21:49
16:13
16:11
16:11
16:11
16:11
16:11
16:11
16:11
16:11
16:18
16:18
16:18
16:18
16:11
16:11
16:11
18:02
16:11
16:11
16:11
16:11
16:11
16:12
16:12

MAKEDEV
audio
audioctl
cgnine0
cgtwo0
console
des
drum
dump
eeprom
fb
fd0
fd0a
fd0b
fd0c
gpone0a
gpone0b
gpone0c
gpone0d
kbd
klog
kmem
log
mbio
mbmem
mem
mouse
nit
nrmt0
nrmt1

1 root
1 root
1 root

21,
21,
21,

1 Mar 25 21:49 ptyp1


2 Mar 25 14:13 ptyp2
3 Mar 25 14:10 ptyp3

1 root
1 root

21,
21,

10 Mar 11 16:13 ptypa


11 Mar 11 16:13 ptypb

Le premire lettre indique que cest un fichier spcial de priphrique et elle


dcrit son type :
c dsigne un priphrique caractre;
b dsigne un priphrique bloc.
Viennent ensuite les droits de lecture, dcriture et dexcution pour
respectivement : le propritaire, les membres de son groupe, et les autres
utilisateurs.
Aprs ces droits, le systme indique le nom du propritaire du fichier. On
remarque que cest root pour la plupart de ces fichiers.

Rvision : 27/10/1999

dition 19992000

113

Le premier chiffre, la suite du propritaire, dsigne le majeur. Il correspond


au type du priphrique. Les terminaux VT100 sont un type de priphrique, les
lecteurs de disquettes 360 ko des PC en sont un autre, les drouleurs de bandes
XyLogics 472, un autre encore. Par ailleurs, le majeur est aussi un index dans une
table qui permet, pour un appel systme donn, de retrouver la fonction de
pilotage relle du priphrique.
Le chiffre suivant est le mineur, il permet de distinguer les priphriques de
mme type et de les relier une adresse26.
On cre un nouveau fichier, correspondant un priphrique, par la fonction
mknod. On doit prciser en argument le nom de ce priphrique, par exemple
/dev/perif, le type c(aractre) ou b(loc), le n de majeur
pour retrouver les fonctions de pilotage dans la table et le mineur pour retrouver
son adresse. Ceci donne une commande du type :
mknod /dev/perif c 2 13

4.5.2. Les fonctions dentres-sorties du noyau dUnix


Les fonctions relles dentres-sorties : douverture, de fermeture, de lecture et
dcriture, sont contenues dans deux tables faisant partie du noyau. Ces fonctions
sont propres chaque priphrique. Elles ralisent le pilotage direct du contrleur
du priphrique et elles sont mises en correspondance avec les appels systme.
La table character device switch27 permet de piloter les priphriques caractres.
Elle fait correspondre, aux fonctions gnriques de manipulation de fichiers :
open, close, read, write et ioctl, des fonctions destines au

26

Pour dterminer exactement le mineur d'un priphrique, reportez-vous, par exemple, un

manuel d'administration Unix.


27

Table provenant de Bach, p. 333, op. cit.

Systmes dexploitation & Rseaux informatiques

114

dition 1999-2000

priphrique qui effectue les entres-sorties. La table permet leur substitution au


moment de lappel systme28. Ces fonctions sont indices par le n du majeur.
fonctions
open

close

read

write

ioctl

conopen

conclose

conread

conwrite

conioctl

dzbopen

dzbclose

dzbread

dzbwrite

dzbioctl

syopen

nullclose

syread

sywrite

syioctl

nulldev

nulldev

mmread

mmwrite

nodev

gdopen

gdclose

gdread

gdwrite

nodev

gtopen

gtclose

gtread

gtwrite

nodev

\
n majeur

La console est dsigne, dans cette table, par le priphrique n 0. Le noyau


louvre effectivement par conopen. La mmoire centrale possde le majeur n
3, la fonction nulldev na en ralit aucun effet, la mmoire tant toujours
ouverte. Sur le HP-9000, ces routines se trouvent dans le fichier :
/etc/conf/conf.c.
De la mme manire, on dispose de la table block device switch29 pour piloter les
priphriques blocs :
fonctions
\

open

close

strategy

n majeur

28

"leur" introduit ici une ambigut de langage, il peut tre transitif ou intransitif. Il faut

comprendre, bien sr, : "on substitue les fonctions aux appels systmes."
29

Table provenant de Bach, p. 333, op. cit.

Rvision : 27/10/1999

dition 19992000

115

gdopen

gdclose

gdstrategy

gtopen

gtclose

gtstrategy

La fonction strategy permet de grer les lectures et les critures des blocs.
Le sens de cette fonction apparatra plus clair aprs la partie consacre aux
fichiers.
4.5.3. Les appels systmes dUnix
Les appels systme fournissent une interface uniforme pour les oprations
dentres-sorties, quelque soit le priphrique. Certaines de leurs actions sont du
domaine de ce chapitre, dautres sont du ressort du systme de fichiers que nous
examinerons dans un chapitre ultrieur.
Les appels systmes ont accs, par lintermdiaire du nom du fichier, ou de
leur descripteur, une fois ouvert, un nud dinformation30, (i-node). Ce nud
contient, notamment, le majeur et le mineur du priphrique.
La fonction int open(char *ref, int mode) recherchera le
nud dinformation du priphrique dont le nom est la chane de caractres
pointe par ref et lui allouera un descripteur. Ultrieurement, le processus
excutant lappel, ainsi que le noyau, rfrenceront ce descripteur comme celui
dun autre fichier. Le systme substituera ensuite open, une fonction
spcifique douverture, indice par le majeur du fichier. Avec la table que nous
avons donne en exemple, si le majeur en 0, cette fonction sera conopen. La
fonction spcifique douverture prendra alors le mineur comme paramtre et
ouvrira directement le contrleur.

30

Le chapitre sur les fichiers clarifiera la notion de nud d'information.

Systmes dexploitation & Rseaux informatiques

116

dition 1999-2000

la diffrence des fichiers ordinaires, les ouvertures des fichiers spciaux


peuvent tre bloquantes. On peut cependant saffranchir de ces ventuels
blocages en introduisant un dlai dattente maximal, grce, par exemple, la
fonction : int alarm(int n). Cette fonction mettant une interruption
SIGALRM, n secondes aprs son excution. Nous donnons un exemple de la
mise en uvre de ce mcanisme, un peu plus bas, dans lalina dcrivant la
fonction read.
int close(int desc) ferme la connexion matrielle avec le contrleur
du priphrique et le remet zro. (Seulement si aucun autre utilisateur na gard
ce priphrique encore ouvert). La fonction libre aussi le descripteur de fichier
desc.
int read(int desc, char *buf, int n), permet de lire dans
le fichier (ici le priphrique) de descripteur desc, n caractres et de les
dplacer dans une zone contigu en mmoire commenant ladresse buf31.
buf[0] dsignera le 1er octet transfr, buf[i - 1], le ime octet32. La
fonction read rend le nombre de caractres rellement lus.
Dans le cas de terminaux, par dfaut, la lecture, comme louverture, est
blocante et le transfert des donnes, des pilotes vers le processus, ne peut
seffectuer quaprs la frappe dun caractre newline, (return ou enter).
Pour une ligne vide, un seul return, read retournera alors 1. Un 0
correspondra une fin de fichier (^D).
On peut dbloquer les lectures en utilisant la fonction alarm(). Le
programme qui suit attendra pendant 5 secondes larrive de caractres. Pass ce

31

En langage C, ceci se dclare par un tableau de d'octets - de caractres -, par exemple,

char buf[512].
32

Ceci, car en langage C, il y a une correspondance entre le nom du tableau et l'adresse du

dbut du tableau. Par ailleurs, les indices d'un tableau commencent 0.

Rvision : 27/10/1999

dition 19992000

117

dlai, la fonction alarm() mettra une interruption qui activera la fonction


erreur(). Le programme se terminera alors en affichant un message derreur :
#include <signal.h>
void erreur();
main () {
char table[50];
int nread;

/* la table lire */
/* le nombre de car. lus */

signal(SIGALRM, erreur);
alarm(5);

/* On arme le compteur */

nread = read(0, table, 10);


alarm(0);

/* On dsarme le compteur */

table[nread + 1] = \0;
printf("%s", table);
}
void erreur(n)
int n;
{
printf("Temps dpass\n");
exit(1);
}
On peut aussi viter les blocages grce au positionnement du pilote par la
fonction ioctl. Le transfert pourra alors se rgler suivant deux conditions :
aprs un nombre dtermin de caractres frapps au clavier, 2 par exemple ;
aprs un temps dtermin dattente, 5/10e de seconde par exemple.
int write(int desc, char *buf, int n) permet dcrire
dans le fichier de descripteur desc. Lappel transfrera au maximum n
caractres, contenus dans le tampon point par buf. La fonction write rend
le nombre de caractres rellement crits.
Systmes dexploitation & Rseaux informatiques

118

int

ioctl(int

dition 1999-2000

desc,

int

commande,

struct

termio

*arg) permet de rgler les paramtres des priphriques caractres. Elle a pour
homologue la commande stty -a de linterprte de commandes. desc est le
descripteur du priphrique ouvert, commande est lopration de lecture ou
dcriture des paramtres de rglage :
TCGETA pour lire les paramtres,
TCSETA pour les positionner.
Les paramtres sont eux contenus dans la structure : arg. La dfinition de
cette structure fait partie de la bibliothque termio.h. Ces principaux champs
sont :
c_iflag, qui rgle le mode dentre, notamment les conversions majusculesminuscules, les traitements du newline et du return;
c_oflag, qui est lhomologue en sortie de c_iflag;
c_cflag, qui positionne les vitesses de transmission, le contrle de parit,
etc;
c_cc[NCC], qui donne les correspondances entre des touches et des signaux
ou certaines constantes, par exemple, la fin de fichier et ^D, linterruption au
clavier et ^C, etc. En mode non-canonique, on peut aussi positionner deux
conditions de dblocage de la lecture selon le nombre de caractres rentrs ou
bien le temps dattente;
c_line, permet de positionner certains modes, avec ou sans cho,
canonique ou non canonique, etc.
Pour une matrise plus complte de linterface utilisateur des entres-sorties,
on pourra aussi examiner les fonctions, fcntl et les bibliothques stdio.h
fcntl.h. Cette liste nest pas limitative.
4.5.4. Dmarrage de pilotes

Rvision : 27/10/1999

dition 19992000

119

Au dpart du systme, le processus initial se charge de lancer les pilotes de


priphriques. Pour chaque console en particulier, un processus dmon ,
getty se chargera de scruter les ventuelles entres.
Ce processus, lorsquil dtectera une tentative de connexion, vrifiera le mot
de passe de lutilisateur dans le fichier /etc/passwd, puis il sera remplac par
linterprte de commande en cas de russite. getty se rgnrera par lindication
respawn au moment de la dconnexion de lutilisateur (fin de linterprte).
On trouve les ordres de lancement de divers dmons dans le fichier
/etc/inittab. Par exemple pour la machine ensi 1 de lISMRA, les dmons
des terminaux, correspondant la console graphique, ainsi quau terminal VT100
qui lui est attach, sont situs ses deux dernires lignes. (# indique un
commentaire).
init:2:initdefault:
stty::sysinit:stty 9600 clocal icanon echo opost onlcr ienqak ixon icrnl
ignpar </dev/systty
brc1::bootwait:/etc/bcheckrc </dev/console >/dev/console 2>&1 # fsck, etc.
brc2::bootwait:/etc/brc >/dev/console 2>&1

# boottime commands

link::wait:/bin/sh -c "rm -f /dev/syscon; \


ln /dev/systty /dev/syscon" >/dev/console 2>&1
cwrt::bootwait:cat /etc/copyright >/dev/syscon

# legal requirements

meas::bootwait:/usr/contrib/bin/Micreate >/dev/syscon # measurement interface


rc

::wait:/etc/rc </dev/console >/dev/console 2>&1 # system initialization

powf::powerwait:/etc/powerfail >/dev/console 2>&1


lp

# power fail routines

::off:nohup sleep 999999999 </dev/lp & stty 9600 </dev/lp

cons:32456:respawn:/etc/getty -h console console


# xlog:2:respawn:/usr/bin/X11/xlogin
co:2:respawn:/etc/getty -h ttyc0 9600

# system console
# X Windows login
# Serie carte mere

4.6. Les streams


Lors dune entre-sortie, il est parfois ncessaire, avant daccder un
dispositif final, de passer par dautres matriels. Ces matriels ncessitent, bien sr
un systme de pilotage intermdiaire. Ceci particulirement, quand on dsire

Systmes dexploitation & Rseaux informatiques

120

dition 1999-2000

accder un priphrique via un rseau. Ces pilotages multiples peuvent conduire


des implantations ad hoc, lourdes et htroclites.
D. Ritchie a conu les streams pour dcomposer les pilotes de
priphriques en couches rationnelles. Les streams sont des ensembles de
modules de traitement qui pilotent les tapes matrielles respectives. Par exemple
un terminal travers un rseau comprendra un module de pilotage du terminal et
un module de pilotage du rseau. Ces streams sont actuellement trs en vogue
pour lcriture de pilotes de priphriques sous Unix.
Les streams sont comparables un flux bidirectionnel de donnes passant
travers un empilement de modules commenant par une tte et finissant par le
pilote proprement dit. Le module de tte correspond linterface utilisateur des
appels systme. Les modules intermdiaires, qui peuvent ne pas exister, sont
constitus dune paire de files transmettant les donnes. Une file est descendante,
de lutilisateur vers le priphrique, lautre est montante. Les commandes entre les
modules se font sous la forme de messages.
Chaque module a une fonction bien prcise, par exemple, transcoder les
caractres ASCII et EBCDIC, ou bien effectuer un filtrage canonique. Enfin, le
module de queue ralise le pilotage brut du priphrique.
Lun des intrts majeurs des streams rside dans leur construction
dynamique. On peut empiler et dpiler les modules volont par une extension
de la fonction ioctl.

Rvision : 27/10/1999

dition 19992000

121

Systmes dexploitation & Rseaux informatiques

122

dition 1999-2000

Chapitre 5
Les rseaux informatiques

5.1. Quest-ce quun rseau?

5.1.1. Introduction
Les rseaux de communications informatiques connaissent un dveloppement
acclr. Ces rseaux ont dabord t indpendants des systmes dexploitation,
puis des laboratoires de recherches les ont intgrs dans leur noyau. La plupart
des constructeurs ont suivi ce mouvement et les rseaux jouent maintenant un
rle fondamental dans la presque totalit des systmes dexploitation
commerciaux.
La thorie des rseaux, en tant que telle, est un ensemble assez vaste que nous
naborderons que dans ses liens directs avec linformatique; ces liens tant dj
dune complexit importante33. Dans ce cadre, les rseaux combinent des
caractristiques qui leur sont propres, et notamment la transmission de donnes,
des concepts propres aux systmes dexploitation, tels par exemple que la
rpartition de la mmoire ou du calcul.
On se rfre gnralement au terme de rseaux informatiques lorsque les
communications entre les ordinateurs sont explicites, par exemple par une

33

titre dexemple, linclusion des rseaux dans le systme Unix en a doubl la taille. Cette

taille a encore t multiplie par deux avec les systmes de fentrage.

Rvision : 27/10/1999

dition 19992000

123

commande de transfert dun fichier, dune machine vers une autre, ou bien par un
courrier envoy un autre utilisateur. Ce niveau est le plus simple et le plus
ancien.
Linformatique rpartie, qui fournit la matire du chapitre suivant, elle, masque,
lorsquelle concerne les fichiers, la ralit physique des emplacements des disques.
La communication de donnes est alors invisible lutilisateur. Ce dernier
apprhende son systme de fichiers par larborescence habituelle sans pouvoir
distinguer ce qui local de ce qui est lointain34.
5.1.2. Pourquoi un rseau
Les rseaux informatiques ont eu comme premire fonction de permettre
laccs des ordinateurs distants par lintermdiaire de modems. Le programme
mis en uvre consiste alors, pour lutilisateur distance, simuler la connexion
dun terminal local, tout en transmettant les donnes travers le rseau. Par les
mmes techniques, on peut accder des informations distantes, telles que des
bases de donnes par exemple. La transmission de fichiers ou lenvoi de messages
se font par des techniques voisines. Elles vitent les disquettes, les bandes
magntiques ou les lettres par la poste.
Dans leurs versions plus labores, les rseaux permettent de partager des
ressources telles que des imprimantes ou des disques. Ce partage suit le modle du
client et du serveur. Le serveur tant le logiciel ou le matriel qui fournit le
service. On construit ainsi des serveurs dimpression, de disques, de fichiers,
Celui qui utilise le service est appel le client. Dans le cadre dune informatique
rpartie, il y a une ubiquit de ces serveurs et de ces clients, qui reprsentent
virtuellement tous les processus et tous les matriels.

34

Par exemple, combien dlves de lISMRA savent, en dbutant, si les donnes quils

manipulent sont au pied de leur machine, ou dans la salle d ct.

Systmes dexploitation & Rseaux informatiques

124

dition 1999-2000

5.1.3. Perspective historique


Lextension des rseaux informatiques se place dans la perspective de la
rduction des tailles et des cots des matriels informatiques. ses dbuts, elle
ntait pas partage. Un ordinateur central, disposait des donnes et des
programmes. Ces programmes taient bien souvent prsent en quelques
exemplaires seulement la surface du globe. Les seules oprations de rseau
rsidaient dans des connexions de terminaux distance.
Avec les mini-ordinateurs, les rseaux se sont dvelopps, surtout pour
diffuser les logiciels et les donnes lorsquils ntaient pas envoys par la poste. Ils
sagissait alors de transfert de fichiers, de messagerie, Ce modle est trs
rpandu dans le monde scientifique et celui des grandes entreprises. Il commence
se diffuser largement dans les petites entreprises et dans le public.
Avec la micro-informatique, il est devenu impossible de maintenir la cohrence
de toutes les donnes et de toutes les versions des logiciels. Chaque utilisateur
devant en avoir un exemplaire local (sur son propre disque) jour. Les donnes
et les programmes communs sont donc implantes, souvent de manire unique,
sur un des disques du rseau : le serveur. Par lintermdiaire dun montage
distance de ce disque serveur, lutilisateur accde ces donnes communes de la
mme manire que pour un disque local. Le partage est souvent invisible. La
plupart des micro-ordinateurs des entreprises, petite ou grande, sont connects
de la sorte.
5.1.4. La constitution dun rseau
Un rseau est constitu de nuds , tels que des ordinateurs, des
imprimantes, Chaque nud possde une adresse laquelle on peut associer un
nom. Ces nuds sont relis entre eux par un support de transmission. Ce support
peut tre form de paires de mtal torsades, de cbles coaxiaux, de fibres
optiques, ou bien tre latmosphre, Des signaux mis selon un certain codage,

Rvision : 27/10/1999

dition 19992000

125

et regroups en trames dun certain nombre doctets, transitent sur le support.


Les signaux peuvent tre diffuss en bande de base ou bien moduls.
Les nuds sont agencs suivant une architecture, une topologie. Cette
topologie peut tre un bus, une toile ou bien un anneau. On doit diffrencier la
topologie physique, qui correspond lagencement des nuds, de la topologie
logique, qui elle est le mode de circulation des donnes. Pour TokenRing, lanneau
jeton dIBM, la topologie physique est une toile, la topologie logique est un
anneau.
Les nuds accdent au support :
de manire alatoire, en dtectant une porteuse pour la plupart des rseaux
Ethernet,
de manire semirpartie, en se saisissant dun jeton, pour lanneau dIBM ou
bien,
par lintermdiaire dune commande centrale et dune commutation de
donnes dans le rseau tlphonique et dans les rseaux locaux modernes.
Ces nuds sont rattachs au support par un dispositif matriel de connexion,
une carte lectronique, qui se charge, en gnral, de grer laccs.
Pour que les donnes parviennent leur destinataire, les trames doivent tre
munies dinformations supplmentaires, telle que leurs adresses de destination et
dexpdition, des commandes diverses, un code de dtection derreur,
Les trames sont changes de trois manires :
1. En mode non connect ou datagramme, les donnes sont expdies de
manire indpendante, du mieux quon peut , en esprant quelles arrivent
bon port. On peut comparer ce mode lenvoi dun lettre.
2. En mode non connect avec un acquittement. On peut comparer ce mode
lenvoi dun lettre avec un accus de rception.
Systmes dexploitation & Rseaux informatiques

126

dition 1999-2000

3. En mode connect , lexpditeur demande dabord une connexion avec le


destinataire. Si ce dernier laccepte, il retourne un acquittement. Les donnes
sont ensuite envoyes sous la forme dune squence ordonne et elles sont
acquittes de manire rgulire. Enfin la connexion est rompue linitiative de
lune des deux parties.
En fait, seules les mthodes 1 et 3 sont largement utilises pour la transmission
de donnes. La mthode 2 est utilise par les RPC du chapitre suivant.
Les rseaux sont locaux, lorsquils sont construits autour dun support simple,
un bus par exemple, ou un anneau. Au del, ils sont dits tendus. Les rseaux
locaux sont souvent privs alors que la plupart des rseaux tendus sont publics.
Les rseaux locaux peuvent tre interconnects par lintermdiaire de rseaux
tendus.
Pour assurer leur transport dune machine une autre ou dun rseau un
autre, les donnes sont fragmentes. Ces donnes fragmentes, les paquets, sont
changes, elles aussi, avec des informations supplmentaires, en mode connect
ou non connect.
Lenvoi de commandes dun ordinateur un autre se fait par un appel de
procdure distance, un paquet de donnes spciales. Au besoin les donnes sont
transcodes pour leur assurer une reprsentation universelle. Ceci sera prsent au
chapitre suivant.
Les applications principales actuelles, pour ce qui concerne linformatique,
sont les transfert de fichiers, la messagerie lectronique, les systmes
clients/serveur de fichiers et dcran.

5.2. Les protocoles de communication

5.2.1. Le modle de la division en couches

Rvision : 27/10/1999

dition 19992000

127

Au dpart, la communication ne faisait appel qu la transmission de donnes.


Plusieurs protocoles ont vu le jour permettant de transfrer des fichiers par le
rseau tlphonique. Ces protocoles fonctionnent en point point, avec une
connexion pralable des deux parties. Ils vrifient la bonne rception des donnes
transmises par paquets et procdent des retransmissions si ncessaire. Parmi
les protocoles les plus rpandus, on trouve X-Modem et Kermit.
Ces protocoles sont insuffisant pour des rseaux informatiques complexes.
Lorgane de normalisation international, lISO, a conu une architecture en
couches qui tente de prendre en compte la complexit des rseaux pour laquelle,
il a publi un certain nombre davis et de recommandations. Bien que la plupart
des applications commerciales nadoptent pas les normes tablies par lISO, elles
se rfrent souvent son modle de dcoupage35.
Les protocoles informatiques de communication se situent aux diffrents
niveaux conceptuels du modle ISO. On parle parfois de rseaux TCP/IP ou
Ethernet ce qui constitue un abus de langage car en fait cela ne dcrit que le
protocole dun niveau dintervention une ou deux couches bien spcifique du
rseau.
On distingue couramment trois de niveaux principaux, de conceptualisation
croissante, qui vont des signaux physiques aux applications logicielles :
les services de connexion (1, 2); Ethernet est un exemple de protocole
intervenant ces niveaux.
les services de transport (3, 4 et 5); TCP/IP est un exemple de protocole
fournissant ces services.

35

Il faut viter de considrer les couches de lISO comme un modle absolu. Ce modle est

assez ancien et souvent dpass. Les transmissions modernes asynchrones, comme ATM, utilisent
une autre architecture, par exemple. Il a autant de pertinence que la sparation entre logiciel et
matriel. Le modle ISO est dailleurs mort du point de vue commercial.

Systmes dexploitation & Rseaux informatiques

128

dition 1999-2000

les services dapplication (6, 7); NFS fournit un service de fichiers intervenant
ces niveaux. Ce service est fond sur les appels de procdures distance RPC
et la reprsentation universelle XDR.
Les protocoles cits prcdemment constituent une pile ncessaire la
ralisation dune application rpartie. Cette pile est souvent associe au nom de
TCP/IP et elle est trs rpandue dans le monde Unix.

Nom

Application

Dfinition de la fonction

Protocoles dominants

fournie

sous Unix ou Windows

Serveur de disque, courrier, NFS,


transfert

Telnet
XDR

Prsentation

Reprsentation universelle

Session

Appel de procdures distance RPC

SMTP,

de

Sun

FTP,

ou

Microsoft
4

Transport

Transport de bout en bout, TCP, UDP


fiable, ou non

Rseau

Dcoupage

en

paquets, IP

adressage universel
2

Liaison

Trame, accs, adressage local

Ethernet,Token Ring

Physique

Connexion, support, signaux

Ethernet, Token Ring

Tableau 7 Les couches rseau de lOSI.

Il existe dautres piles. Dans le monde Windows, la plus courante est celle de
Novell NetWare. Elle associe IPX (3), ventuellement SPX (4), avec une
mulation des SMB (7). Ceci pour fixer quelques lments de vocabulaire. Il

Rvision : 27/10/1999

dition 19992000

129

est noter que les rseaux forme un domaine constitu quasi uniquement de
signes cryptiques et que malheureusement, il faut faire avec .
Les dialogues, dun utilisateur un autre autre, stablissent aussi entre les
couches infrieures correspondantes. Linformation, si elle est mise partir de la
couche application, devra traverser toutes les couches du modle. Chacune des
couches de lexpditeur (resp. du destinataire) ajoutera les donnes ncessaires
son fonctionnement et tablira un change (en mode connect ou datagramme)
avec la couche correspondante du destinataire (resp. de lexpditeur). Au niveau le
plus bas, il y aura beaucoup plus dinformations changes, que de donnes utiles
aux utilisateurs. Cest le mcanisme dencapsulation des donnes lmission et de
dsencapsulation la rception.
5.2.2. Un protocole simple : X-Modem
Le protocole X-MODEM permet de transfrer des fichiers travers un rseau
de communication. Il a t dfini au dpart pour des micro-ordinateurs CP/M
mais il sest diffus bien au-del. Il est encore trs utilis, notamment pour les
communications utilisant les ports sries asynchrones et les rseaux tlphoniques
commuts.
L'change de donnes se fait sous la forme de trame. Chacune de ces trames
devant respecter un format contenant un en-tte, le n de squence de la trame
(sur un octet), le complment 255 de ce n de squence, les donnes ellesmmes, ainsi quun code de contrle (checksum sur un octet). La taille des donnes
de la trame est constante et fixe 128 octets.

SOH

N BLOC

255- N

Donnes (128 octets)

CT

Figure 46 La trame X-Modem.

La transmission des donnes se fait se fait dans un seul sens la fois. Les
fichiers sont donc dcoups en blocs de 128 octets. Le dernier paquet doit
Systmes dexploitation & Rseaux informatiques

130

dition 1999-2000

contenir des caractres espace de bourrage car le protocole ne prend pas en


compte la longueur du champ de donnes.
Le schma d'change du protocole est le suivant :
Lmetteur ouvre la session par une caractre ACK auquel le rcepteur rpond,
si il est daccord par un NAK.
L'metteur envoie ensuite ses blocs de donnes un par un. la rception de
chaque bloc, le rcepteur rpond par un ACK, si le code de contrle correspond
ou un NAK sinon. Lmetteur retransmet le paquet si il na pas reu
dacquittement au bout dun dlai donn.

I(n)

I(n + 1)

I(n + 1)

dlai

P
ACQ(n)

ACQ(n + 1)

Figure 47 Un change.

la fin de la transmission, l'metteur envoie de EOT si tout est normal ou CAN


sinon. la rception d'un de ces caractres, le rcepteur rpond respectivement
par un EOT ou par un CAN.
Le code de contrle d'une trame est un ou exclusif effectu sur tout les
octets de donnes.
5.2.3. Ethernet

Rvision : 27/10/1999

dition 19992000

131

Ethernet est une norme de transmission intervenant aux niveaux 1 et 2 du


modle OSI. Elle permet les changes de donnes lchelle dun rseau local.
Le support physique dEthernet est un cble coaxial pais ou fin, ou bien une
paire torsade. Le cblage est en bus ou en toile. Son accs est dtection de
porteuse avec dtection des collisions : CSMA/CD. Cette mthode daccs est
actuellement supplants par les techniques de commutation.

La frquence

actuelle de transmission est de 10 MHz. Des versions rapides dEthernet


apparaissent avec une frquence de 100 MHz.
Ladressage des nuds Ethernet se fait sur 48 bits. Ces adresses sont, en
gnral, inscrites dans la ROM des cartes de communication, et elles sont
attribues par la socit Xerox. Un type dcrivant le contenu de la trame est cod
sur 2 octets. Un code de contrle est ajout la fin. Il est long de 4 octets. La
longueur totale des trames doit tre comprise entre 64 et 1518 octets. Les trames
sont prcdes dun prambule de 8 octets de synchronisation.
Lchange de trames entre les parties se fait par des datagrammes dont le
format est :

Source

Dest

Type

Donnes

CRC

Figure 48 La trame Ethernet.

5.2.4. Le protocole dinterconnexion IP


Internet Protocol (IP) permet les communications dun rseau un autre avec
une chelle qui peut tre mondiale. Il ralise le dcoupage des donnes en paquets
et les expdie sous la forme de datagrammes lui aussi.

Systmes dexploitation & Rseaux informatiques

132

dition 1999-2000

Par ailleurs, pour passer dun rseau un autre, on a besoin dun adressage
unique et universel pour diffrencier chaque machine. Le protocole IP gre cet
adressage international. En France, cest lInria qui distribue les adresses IP.
Les adresses Internet permettent de numroter un rseau. Elles ont une taille
de 4 octets. La rpartition entre la taille de ladresse du rseau et celle de la
machine hte se fait sous quatre formes correspondant aux classes A, B, C et
D36 :
Classe A :
net (1 octet)

host (3 octets)

0xxxxxxx

yyyyyyyy.zzzzzzzz.tttttttt

Classe B :
net (2 octets)

host (2 octets)

10xxxxxx.yyyyyyyy

zzzzzzzz.tttttttt

Classe C :
net (3 octets)

host (1 octet)

110xxxxx.yyyyyyyy.zzzzzzzz

tttttttt

Classe D :
Message de diffusion un groupe (multicast)
1110xxxx.yyyyyyyy.zzzzzzzz.tttttttt
Figure 49 Les classes IP.

36

Rvision : 27/10/1999

dition 19992000

133

Les trois premires formes sont les plus rpandues. LENSI de Caen dispose
dun

rseau

denseignement

de

classe

dont

ladresse

est :

193.49.200.tttt. Dans chacune des trois premiers type dadressage, on


peut dsigner le rseau lui-mme en mettant 0 ladresse machine ou toutes les
machines, en mettant 1 cette adresse. On pourra ainsi diffuser des messages
toutes les machines dun rseau (broadcast). Pour lENSI de Caen, ladresse du
rseau et donc 193.49.200.0 et ladresse de toutes les machines est :
193.49.200.255. Enfin, il y a une adresse de bouclage pour les
communications internes dune machine : 127.0.0.1.
La correspondance entre les adresses Ethernet et Internet, sur un rseau local,
se fait grce lalgorithme Address Resolution Protocol (ARP).
Le protocole Internet rajoute un en-tte aux paquet de la forme suivante :

4
Version

8
IHL

16
Service

n didentification dun mme fragment


Dure de vie

19

24

Longueur totale
Flags

Protocole

Dcalage de fragmentation
Contrle den-tte

Adresse dorigine
Adresse de destination
Options
Figure 50 Len-tte IP.

lintrieur de len-tte, on peut noter les significations des champs suivants :


Version est le n de version du protocole, 4 ou 5 actuellement, 6 venir.
Internet Header Length (IHL) est la longueur de len-tte Internet.

Systmes dexploitation & Rseaux informatiques

134

dition 1999-2000

Service nest pas implant sur la plupart des passerelles.


Les informations de fragmentation permettent de coordonner la suite des
paquets. Cette fragmentation est parfois ncessaire pour tenir compte des
limites des protocoles sous jacents: 1500 octets pour Ethernet, 128 octets
pour certains protocoles. Elle comprennent un identificateur, un indicateurs
et un dcalage dans le cas ou il y a fragmentation.
lidentificateur est un numro unique
les indicateurs qui indique si on peut fragmenter ou non (DT). Ils
donnent des dtails sur la fragmentation, avec un bit MF (more flag),
le dcalage donne la position du fragment dans la suite des paquets.
Les adresses sont sur 4 octets. Elles auront 16 octets dans la version IPv6.
Pour la transmission des entiers Internet adopte une norme big endian : les
octets de poids fort sont transmis en premier. Il faut faire attention ce que cet
ordre nest pas le mme sur toutes les machines et notamment sur les processeurs
Intel.
5.2.5. Le protocole de transport TCP/UDP
Entre deux ordinateurs, la communication passe par des ports dentressorties. Les systmes dexploitation sous-jacents tant multi-tches, chaque
machine peut grer plusieurs ports au mme moment.
Il existe deux modes de liaison entre ces ports, soit le transfert par
datagramme, soit le transfert fiable. La norme fournit UDP un service
datagramme, alors que TCP ralise un service de transport fiable.
Le protocole TCP permet douvrir et de terminer une communication. Les
paquets sont transmis et en retour on obtient des accuss de rception. Lenvoi
de paquets prend en fait un peu davance sur les acquittement et droulement de

Rvision : 27/10/1999

dition 19992000

135

lchange fait appel une fentre glissante. Les paquet comportent deux
compteurs correspondant aux octets transmis (Squence) et aux octets acquitts
(Acknowledge).
Les paquets TCP comprennent un en-tte du type suivant :

16
Source Port

Destination Port
Sequence N
Acknowledgment N

Data Offset

Reserved

Code

Window

(Taille en-tte)
Checksum

Urgent pointer
TCP options

Padding

Donnes 64 Ko
Figure 51 La trame TCP.

Le type des messages est contenu dans le champ Code en positionnant un bit :
URG, ACK, PSH, RST, SYN, et FIN.
La connexion est un change trois temps :

Partie appelante

Partie appele

SYN -------->
<------------- ACK + SYN
Systmes dexploitation & Rseaux informatiques

136

dition 1999-2000

ACK -------->
Figure 52 La connexion TCP.

La dconnexion est un change trois temps :

Partie interrompante

Partie interrompue

FIN-------------->
<----------------- ACK
<----------------- FIN
ou bien <----------------- FIN + ACK
ACK --------------->
Figure 53 La dconnexion TCP.

La conception du protocole de transmission TCP utilise la notion dautomate.


Il peut se modliser par le dessin suivant :

Rvision : 27/10/1999

dition 19992000

137

(START)

CONNECT/SYN

CLOSED
CLOSE/CLOSE/-

LISTEN/-

SYN/SYN + ACK

LISTEN

SYN
RCDV

RST/-

SEND/SYN
(simultaneous open)

SYN/SYN + ACK

SYN
SENT

(Data transfer stake)


ACK/-

ESTABLISHED

CLOSE/FIN
CLOSE/FIN

SYN + ACK/ACK
(Step 3 of the three-way handshake)
FIN/ACK

FIN/ACK

FIN
WAIT 1

ACK/-

Close)

(Passive

(Active close)

CLOSE
WAIT

CLOSING

CLOSE/FIN

ACK/FIN + ACK/ACK

FIN
WAIT 2

LAST
ACK

TIMED
WAIT
FIN/ACK

(Timeout/)

ACK/CLOSED
(Go back to start)

Figure 54 Lautomate dtats de TCP (daprs Tanenbaum).

Le protocole UDP est un simple appendice de IP : il rajoute un n de port ce


dernier protocole. Cest ce protocole qui est en gnral utilis pour construire les
applications rparties.

16

Systmes dexploitation & Rseaux informatiques

138

dition 1999-2000

Source Port

Destination Port

Length

Checksum
Figure 55 Len-tte UDP.

Les programmes TCP/UDP doivent sadresser des ports fournissant des


services dont les n sont connus. En revanche, les ports utiliss par le clients sont
en gnral attribus par le systme. La commande netstat permet de visualiser
ces attributions.

5.3. Larchitecture dun systme client-serveur


Au-dessus des protocoles de transmission, on peut construire des applications
rparties reposant sur un (ou plusieurs) serveur et des clients. Les serveurs
(machines) fournissent un service (programme), par exemple lheure, le transfert
de fichiers, la connexion, lcriture sur un disque des programme clients (sur
les machines clientes) qui utilisent ces services.
Les deux appels de base mis en jeu sont dune part les demandes du client et
dautre part les rponses du serveur. Dans un protocole comme TCP/IP ou
UDP/IP, le client met sa demande vers le serveur en la munissant de la bonne
adresse de machine et de la bonne adresse du service37 : le port. Le serveur
lcoute de ce port (en lecture du port) dtecte la demande et fournit la rponse
munie de ladresse de la machine cliente et de son port de demande.

37Une

machine peut hberger plusieurs services. Il est donc ncessaire de la numroter.

Rvision : 27/10/1999

dition 19992000

139

SERVEUR

e
nd
a
m
De

PORT N 20

nde
Dema

CLIENT

se
Rpon

e
ns
o
p
R

CLIENT

Figure 56 Larchitecture dun systme client-serveur.

La boucle fondamentale dun serveur de cration, lecture, criture de fichier


est la suivante :
while (1) {
receive(source, &code);
switch(code) {
case CREATE:

a = creat(;

break;

case READ:

a = read(

break;

case WRITE:

a = write(

break;

default;
}
send(dest, a);
}

5.4. Communiquer par les rseaux publics

5.4.1. Le rseau tlphonique


(Non disponible)
Systmes dexploitation & Rseaux informatiques

140

dition 1999-2000

Le protocoles de modems, les commandes Hayes, les protocoles de


communication, UUCP, MNP4 et MNP5.
5.4.2. Internet et ATM
(Non disponible)

5.5. Les interconnexions

Les niveaux dinterconnexion


Linterconnexion des rseaux peut avoir lieu diffrents niveaux de la
hirarchie OSI. Cette distiction classique est cependant de moins en moins valide,
notamment depuis larrive des commutateurs. Classiquement on a :
les rpteurs (1) rgnrent les signaux;
les ponts (2) passent des donnes dune branche de rseau une autre. Ils
fonctionnent souvent par auto-apprentissage et filtrage. On trouve
maintenant leur place des commutateurs de rseau qui gnralisent les
techniques des ponts plusieurs branches : 4, 8, 32, etc.
les routeurs (3) peuvent orienter les donnes en fonctions de tables
pralablement dfinies. Ils utilisent de plus en plus des techniques de
commutation.
Les passerelles (7) traduisent les protocoles.

Rvision : 27/10/1999

dition 19992000

141

Rseau public

Rseau local

Rseau local
Figure 57 Interconnexions.

Les principes et les normes de routage


Non disponible en 1999

5.6. Les interfaces de programmation Berkeley

5.6.1. Les fichiers du systme


les ordinateurs du rseau sont dans le fichier : /etc/hosts
les services connus du systme sont dans : /etc/services
les protocoles connus du systme sont dans : /etc/protocols
les rseaux connus du systme sont dans : /etc/networks

Un extrait des services de /etc/services :


tcpmux

1/tcp

echo

7/tcp

echo

7/udp

discard

9/tcp

sink null

discard

9/udp

sink null

systat

11/tcp

users

daytime

13/tcp

Systmes dexploitation & Rseaux informatiques

142

dition 1999-2000

daytime

13/udp

netstat

15/tcp

chargen

19/tcp

ttytst source

chargen

19/udp

ttytst source

ftp-data

20/tcp

ftp

21/tcp

telnet

23/tcp

smtp

25/tcp

mail

time

37/tcp

timserver

time

37/udp

timserver

name

42/udp

nameserver

Le fichier de protocoles /etc/protocols


#
# Internet (IP) protocols
#
ip

IP

# internet protocol, pseudo protocol

number
icmp

ICMP

# internet control message protocol

ggp

GGP

# gateway-gateway protocol

tcp

TCP

# transmission control protocol

egp

EGP

# exterior gateway protocol

pup

12

PUP

# PARC universal packet protocol

udp

17

UDP

# user datagram protocol

hmp

20

HMP

# host monitoring protocol

xns-idp

22

XNS-IDP

# Xerox NS IDP

rdp

27

RDP

# "reliable datagram" protocol

#
# Internet (IPv6) extension headers
#
ipv6

41

IPv6

# IPv6 in IP encapsulation

ipv6-route

43

IPv6-Route

# Routing header for IPv6

ipv6-frag

44

IPv6-Frag

# Fragment header for IPv6

esp

50

ESP

# Encap Security Payload for IPv6

ah

51

AH

# Authentication Header for IPv6

ipv6-icmp

58

IPv6-ICMP

# IPv6 internet control message

protocol
ipv6-nonxt

59

IPv6-NoNxt

# No next header extension header for

IP v6
ipv6-opts

60

IPv6-Opts

# Destination Options for IPv6

Un service de Pages Jaunes, lorsquil est install, sefforce de rendre unique ces
fichiers sur le rseau. On accde alors leur contenu, non pas par la commande

Rvision : 27/10/1999

dition 19992000

143

more, par exemple, more /etc/hosts, mais par ypcat, par exemple,
ypcat hosts. Les fonctions du systme qui peuvent manipuler ces fichiers ne
devraient nanmoins pas tre modifies.
5.6.2. Les sockets
Les interfaces de programmation permettent dimplanter des transactions
bidirectionnelles entre un fournisseur de service: le serveur et un usager de ce
service, le client.
Le serveur fournira son service sur le port de communication dune machine.
Certains ports sont rservs pour des services bien connus, tel que ftp. Dautres
sont libres pour les les programmeurs et les tudiants de systmes. Les ports
suprieurs IPPORT_RESERVED sont normalement libres.
Le client enverra sa demande au serveur, ladresse de la machine et au port
du service dsir.
Le systme Unix fournit une interface de programmation permettant Des
transactions sous la norme TCP/IP, en mode datagramme ou connect. Dautres
versions ont utilis la norme IP/TP4 de lOSI. Ce sont les interfaces TLI. Ces
dernires tant en voie de disparition, nous ne considrerons que la norme
TCP/IP.
Les sockets sont les prises de communication des transactions. Elles
ressemblent, du point de vue de lutilisateur, des entres-sorties vers un fichier.

chaque socket correspond donc un descripteur entier qui servira de

rfrence ces entres-sorties. Lappel de la fonction socket

permet

lobtention de ce descripteur :
int socket(int family, int type, int protocol);
La famille, pour Internet, est AF_INET, le type est SOCK_DGRAM pour le
mode datagramme, ou SOCK_STREAM, pour le mode connect, le protocole est

Systmes dexploitation & Rseaux informatiques

144

dition 1999-2000

gnralement mis 0. Ceci indique qu louverture de la socket, le systme


choisira le protocole appropri au mode. Lappel rend -1 en cas derreur.
Contrairement aux descripteurs de fichiers, ces sockets ne sont pas lies un
dispositif physique. On doit leur associer, leur attacher dans le jargon en usage,
une adresse, cest dire un numro de machine Internet et un numro de port
TCP. Ladresse, lorsquelle est complte, comprend les lments suivants :
<protocole de communication, adresse machine locale,
port local, adresse machine distante, port distant>.
Distant ici est un abus de langage, car un systme client/serveur peut fonctionner
sur une mme machine.
Lattachement complet est un processus assez complexe qui peut se raliser de
plusieurs faons. On peut par exemple attacher la partie locale par la fonction
bind() et la partie distante par des fonctions comme connect() ou
accept(). La fonction socket

fournit simplement le protocole de

communication. Il nous reste dtailler les structures de donnes ncessaires aux


autres lments.
On manipule les ensembles <adresse, port> lointains ou locaux par une
structure : adresses38 de sockets sinscrivant dans une forme gnrique :
struct sockaddr {
short

sa_family;

char

sa_data[14];

};
Pour le domaine Internet, les sockets ont pour adresses :
struct sockaddr_in {

38

short

sin_family;

short

sin_port;

/* port TCP */

Rptons le adresse ici se rfre la partie soit locale, soit lointaine des deux entits de

la communication.

Rvision : 27/10/1999

dition 19992000

145

struct in_addr sin_addr;


char

sin_data[8];

};
Ladresse Internet prend la forme :
struct in_addr {
u_long

s_addr;

};
On peut obtenir, grce au fichier /etc/hosts, ladresse Internet de chaque
machine du rseau partir de son nom. Lappel de la fonction struct
hostent *gethostbyname(char *name) fournit ce service dans un
programme. Elle rend un pointeur sur une structure de type hostent :
struct hostent {
char *h_name;
char **h_alias;
int h_addrtype;
int h_length;

/* taille de ladresse */

char **h_addr_list; /*liste des adresses */


};
La variable globale h_errno est positionne par le systme en cas derreur.
De

la

mme

manire,

*getservbyname(char

la

fonction

*service)

struct
analyse

/etc/services.
Les fichiers inclure pour la compilation dun programme sont :
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>

Systmes dexploitation & Rseaux informatiques

servent
le

fichier

146

dition 1999-2000

Les appels systme, une fois la socket cre, doivent raliser lattachement de
cette socket une adresse ou un port, avant de pouvoir changer des messages
travers elle.
Lattachement de la partie locale se ralise par :
int bind(int socket, (struct sockaddr *) sockaddr,
int sockaddrelen)
bind() nest ncessaire que pour attacher une socket un port bien
particulier sans pour autant raliser denvoi. Ceci pour se mettre en coute, par
exemple.
En revanche, il est inutile, notamment dans le cas dun serveur, linstant de
lattachement, de prciser ladresse locale. On lui permet ainsi dtre lanc sur
nimporte quel machine. On remplit alors le champ sin_addr.s_addr de
ladresse par INADDR_ANY.
bind() rend -1 en cas derreur.
Pour les clients, on doit bien sr remplir le champ du port lointain demand
ainsi que ladresse de la machine fournissant le service. On peut remplir ce champ
adresse: sin_addr.s_addr partir du champ: h_addr_list[0] de la
structure hostent. On ralise la copie par la fonction memcpy(). On peut
aussi convertir une notation pointe et affecter directement le membre adresse
Internet par :
unsigned long inet_addr(char *notation_pointe);
Les conversions entre adresses rseau et machines se font par les fonctions
ntohl(), ntohs(), htons() et htonl().
5.6.3. Le mode datagramme
Dans le cas de datagrammes, lenvoie de message se fait par les fonctions :

Rvision : 27/10/1999

dition 19992000

147

int sendto(int socket, char *message, int length,


int flags, (struct sockaddr *) dest, int destlength);
sendto rend le nombre de caractres envoys.
Lmission se fait par le port qui a t attach au pralable la socket. Si cela
na pas t fait, le systme attribuera un port libre. Lattachement sera alors ralis
dynamiquement et de manire complte (pour la partie locale et lointaine) grce
la fourniture de (struct

sockaddr

*)

dest. Il sera maintenu

ultrieurement.
La rception se fait par :
int recvfrom(int socket, char *message, int length,
int flags, (struct sockaddr *) from, int
*fromlength);
recvfrom rend le nombre de caractres reus.
Pour dobscures raisons, on doit donner une valeur initiale fromlength.
En gnral, on prend sizeof(struct sockaddr).
Pour ne pas bloquer le client on doit mettre en place des dispositifs de
temporisation. Dautres schmas sont possibles. Les rponses compltes dans
man recv ou getsockopt.
5.6.4. volution de lattachement des adresses

Systmes dexploitation & Rseaux informatiques

148

dition 1999-2000

Partie Serveur

Partie Client

1. Avant lchange

1. Avant lchange

Serveur

Client

Parties

locale

distante

Parties

locale

distante

Port TCP

Port

Port TCP

Port

UDP

serveur

Adresse

INADDR

IP

_ANY

UDP
?

Adresse

serveur
?

IP

Adresse
serveur

Lattachement du port local est


ralis par bind(). On ne prcise
pas, par contre, dadresse locale, et
on indique INADDR_ANY, car le
processus doit pouvoir fonctionner
sur nimporte quelle machine. Ce
champ sera automatiquement rempli
au cours des changes.

Ici, on doit inclure dans la structure


de donnes, ladresse et le port de la
machine distante du serveur .

2. Aprs une rception

2. la transmission

Serveur

Client

Parties

locale

distante

Parties

locale

distante

Port TCP

Port

Port

Port TCP

Port

Port

UDP

serveur

client

UDP

client

serveur

Adresse

Adresse

Adresse

Adresse

Adresse

Adresse

IP

serveur

client

IP

client

serveur

La rception du datagramme permet


de complter les champs manquants.
Ces champs sont rcuprs dans le
programme
par
la
fonction
recvfrom().

Rvision : 27/10/1999

Lappel de la fonction sendto()


complte, en interne, la partie locale
de lassociation et permet la
fabrication
du
datagramme.
Les fonctions dcriture et de lecture
ultrieures pourront utiliser les

dition 19992000

149

adresses ainsi crs.

5.6.5. Le mode connect


Dans le cas dun change par transport fiable, le serveur doit prciser combien
il accepte de connexions en attente par :
int listen(int socket, int nbconnex);
Lacceptation des connexions, de la part de ce serveur, se fait par la fonction :
int accept(int socket, (struct sockaddr *) from,
int *fromlength);
qui renvoie un descripteur analogue celui dun fichier. On utilise ce descripteur
de la mme manire pour les oprations de lecture et dcriture. De mme que
pour le mode non-connect, fromlength doit tre initialis.
Le serveur traite chacune des connexions en crant un processus laide dun
fork(). Ce processus se termine avec un exit() en fin de connexion.
Du ct du client, les connexions sont ralises par la fonction :
int connect(int socket, (struct sockaddr *) dest,
int destlength);
connect renvoie -1 en cas derreur sinon 0.
Les changes de donnes se font par les fonctions :
int read(int desc, char *tampon, int nbcar); et
int write(int desc, char *tampon, int nbcar);

Systmes dexploitation & Rseaux informatiques

150

dition 1999-2000

Ici, il nest plus ncessaire de prciser les adresses dexpdition, car les
attachements ont t raliss de manire complte par les fonctions de
connexion.
Les fermetures de connexions se font par :
int close(int desc);
5.6.6. Schma de programmes en mode connect
SERVEUR

CLIENT

socket()

socket()

bind()

listen()

accept()

connect()

Pre

fork()

Fils
read()
write()

Rvision : 27/10/1999

read()
write()

dition 19992000

151

Figure 58 Rsum des appels systmes pour les sockets.

5.7

Les interfaces de programmation de Java

5.7.1 Vue densemble


Le langage Java permet une intgration facile des programmes au rseau
Internet. Alors que linterface Berkeley est souvent anachronique, les appels Java
sont plus simples et mieux conus. Comme Berkeley, Java comporte les
transmissions en mode connect et en mode datagramme. Nous nexaminerons
ici que les changes connects.
Dans le mode connect, le client se connectera au serveur qui tablira pour lui
une connexion particulire. Le serveur crera pour ceci un fil dexcution qui
jouera un rle semblable celui dun processus sous Unix. Dans le cas du mode
non connect, le principe est quasiment le mme quavec les appels Berkeley.
Les appels au rseau de Java sont intgrs au paquetage java.net. Ils
comprennent la classe Socket, pour le client, et ServerSocket pour le
serveur.
5.7.2 Un exemple de client et de serveur en mode connect
Le client
On se connecte un service par le constructeur de Socket :
try {
Socket maSoquette = new Socket("www.ensicaen.ismra.fr", 2001);
} catch (UnknownHostException e) {
// pas d host
} catch (IOException e) {

Systmes dexploitation & Rseaux informatiques

152

dition 1999-2000

// erreur lors de la connexion


}

et ensuite on redirige les entres-sorties sur des flux. Avec les flux de base, a
donne :
InputStream in = maSoquette.getInputStream();
OutputStream out = maSoquette.getOutputStream();
On crit et on lit alors dans la soquette avec les fonctions read() et
write() :
Byte cara = in.read();
out.write(100);
On peut utiliser dautres flux dentres-sorties plus labors comme
InputStreamReader() et PrintWriter().
Le serveur
On lance un serveur et le met en coute par le constructeur
ServerSocket. On accepte les clients par accept() et on ferme le serveur
principal et les serveurs drivs par close(). Chacun des clients est driv de
Socket :
try {
// On lance le serveur au port 2001
ServerSocket serveur = new ServerSocket(2001);
while (true) {
// On accepte les clients
Socket client = serveur.accept();

Rvision : 27/10/1999

dition 19992000

153

// dans le code qui suit


// on traite le client

}
} catch (IOException e) {}
serveur.close();
Avec ce code, le serveur ne peut traiter quun seul client. Pour grer toutes les
connexions en parallle, on devra crer un nouveau fil dexcution chaque
arrive dun client. Pour ceci, on associera les connexions des objets issus dune
classe drive de Thread.
ConnexionServeur extends Thread {
Socket client;
ConnexionServeur(Socket client) {
this.client = client;
// On doit aussi rediriger la soquette vers
// des descripteurs dentre-sortie
// getInputStream et getOutputStream
}
public void run() {
//On traite la connexion ici

client.close();
Systmes dexploitation & Rseaux informatiques

154

dition 1999-2000

}
}
Et on modifie le serveur pour dmarrer le fil dexcution chaque fois quil
accepte une nouvelle connexion :
while (true) {
Socket client = serveur.accept();
new ConnexionServeur(client).start();
}
De mme que pour les clients, le serveur cr devra rediriger les flux sil a
besoin de les traiter, par exemple par :
InputStream in = client.getInputStream();
OutputStream out = client.getOutputStream();
On crit et on lit avec les fonctions read() et write() :
Byte cara = in.read();
out.write(100);

5.7.3 Les classes de Java pour le rseau


Le client Socket
Constructeurs :
protected Socket()
protected Socket(SocketImpl impl)

Rvision : 27/10/1999

dition 19992000

155

public Socket(String host, int port)


public Socket(InetAddress address, int port)
public Socket(String host, int port, InetAddress
localAddr, int localPort)
public Socket(InetAddress address, int port,
InetAddress localAddr, int localPort)
public Socket(String host, int port, boolean
stream)
public Socket(InetAddress host, int port, boolean
stream)
Mthodes :
public InetAddress getInetAddress()
public InetAddress getLocalAddress()
public int getPort()
public int getLocalPort()
public InputStream getInputStream()
public OutputStream getOutputStream()
public synchronized void close()
public String toString()
public static synchronized void
setSocketImplFactory(SocketImplFactory fac)

Systmes dexploitation & Rseaux informatiques

156

dition 1999-2000

Le serveur ServerSocket
Constructeurs :
public ServerSocket(int port)
public ServerSocket(int port, int backlog)
public ServerSocket(int port,int backlog,
InetAddress bindAddr)
Mthodes :
public InetAddress getInetAddress()
public int getLocalPort()
public Socket accept()
protected final void implAccept(Socket s)
public void close()
public synchronized void setSoTimeout(int timeout)
public synchronized int getSoTimeout()
public String toString()
public static synchronized void
setSocketFactory(SocketImplFactory fac)

Rvision : 27/10/1999

dition 19992000

157

Chapitre 6
Les systmes rpartis

6.1

Introduction

Linformatique rpartie soppose la fois linformatique centralise, celle des


gros ordinateurs, et linformatique individuelle, celle des micro-ordinateurs. Elle
pallie certains dsavantages de cette dernire par :
le partage des donnes grce un accs individuel, en lecture, par le rseau
des fichiers communs situs sur un disque quelconque ainsi que par le transfert
de fichiers dun disque un autre.
le partage des applications. Par exemple pour lexploitation individuelle, par le
rseau, dun seul logiciel de base de donnes sur le disque dune des machines
connectes.
le partage du travail par lexcution dun programme dans la mmoire dune
autre machine.
le partage des ressources : chaque utilisateur connect peut utiliser une mme
imprimante.
les communications : envoi par le rseau de courrier dans une bote aux lettres
lectronique un ou plusieurs utilisateurs connects. Accs par le rseau
tlphonique des services dinformations : annuaires, banques de donnes,
etc.

Systmes dexploitation & Rseaux informatiques

158

dition 1999-2000

Diagramme des avantages de linformatique rpartie


Partage des donnes
Service
clients
nord

Partage des applications

Entrepts

Service
clients
nord

Entrepts

Systme de gestion
de base de donnes
Fichier
clients
Fichier
clients
Service
clients
sud
Service
achats

Service
achats

Imprimante

Partage de ressources
Service
clients
nord

Service
clients
sud
Imprimante

Partage du travail

Entrepots

Service
clients
nord

Entrepts

Service
clients
sud
Service
achats

Imprimante

Service
clients
sud
Service
achats

Imprimante

Communication par une messagerie

Accs des informations ou des services

lectronique

publics

Rvision : 27/10/1999

dition 19992000

Service
clients
nord

159

Service
Web,

Entrepts

Service
clients
nord

Entrepots

Rseau
tlphonique

Service
achats

Imprimante
Service
clients
sud
Service
achats

Imprimante

Figure 59 Les avantages dune informatique rpartie

6.1.1 Pourquoi une informatique rpartie


Linformatique rpartie se rpand aux dpens de linformatique centralise
pour les raisons suivantes :
elle parfois moins chre, dans la mesure o elle utilise des circuits standards;
elle est ouverte grce des protocoles communs;
elle peut tre plus fiable car les pannes dune machine naffectent pas les autres
utilisateurs;
elle est gomtrie variable car on peut ajouter des machines ou en enlever
facilement (scalable)
Elle a aussi certains points faibles qui restent en suspens :
plusieurs problmes fondamentaux des systmes dexploitation de rseaux ne
sont encore totalement rsolus;
beaucoup de logiciels dapplication ne sont pas encore prts;

Systmes dexploitation & Rseaux informatiques

160

dition 1999-2000

la fragilit du systme est reporte sur le rseau. Il en devient le tendon


dAchille;
la scurit devient un problme fondamental.
Linformatique rpartie a pour objectif dtre transparente lutilisateur et
de permettre sa mobilit. Les machines sont banales et un utilisateur na pas
connatre la localisation prcise des ressources. Linformatique rpartie, dans ses
applications commerciales, se rsume souvent aux serveurs de fichiers. Cest eux
qui eux qui ont popularis ce concept.
6.1.2 Les applications de communication
Avant linformatique rpartie, certaines applications de communication se sont
rpandues. Elles sont relativement plus anciennes et sont fondes directement sur
le modle client-serveur. Elles mettent en uvre explicitement du point de vue
de lutilisateur deux machines. Il existe des applications fondes sur TCP/IP :
Telnet, mulation de terminal
Ftp, transfert de fichiers
SMTP, messagerie (le mail dUnix).
Il existe aussi des commandes incluses dans certains systmes dexploitation,
par exemple les remote commandes de Unix BSD39 :
rlogin machine (connexion distance)
rsh machine commande (excution dune commande distance).

39

Ces commandes sont maintenant disponibles sur beaucoup de systmes Unix.

Rvision : 27/10/1999

dition 19992000

161

rcp machine1:fichier1 machine2:fichier2 (copie dun fichier dune machine


une autre).

6.2

La construction dune informatique rpartie

6.2.1 Les appels de procdures distance (Remote Procedure


Calls)
Linformatique rpartie est construite autour dappels de procdures distance
pour pallier les dficiences du modle client-serveur. En effet, celui-ci fonctionne
sur le concept explicite dentres-sorties par les oprations send et receive.
Les systmes centraliss ignorent ces oprations. Ceci peut entraner une non
transparence des programmes.
Les appels de procdures distance (Remote Procedure Calls) imitent les appels
classiques, mais les autorisent sexcuter sur une autre machine. Linformation
est transporte travers le rseau. Elle correspond, pour lappelant, la fonction
et ses paramtres; pour lappel, aux donnes retournes. Les oprations
dentres-sorties sont invisibles au programmeur. Elles sont gres par des
procdures dinterfaces : les talons (stubs).
Client

Serveur

Appel

Processus
Dmon

Poursuite

Rponse

Figure 60 Un appel distance

Systmes dexploitation & Rseaux informatiques

162

dition 1999-2000

6.2.2 Les mcanismes de passage de paramtres


Les mcanismes de passage de paramtres sont cependant lgrement
modifis. Dans le cas classique dune fonction : n = read(fd, buf,
nbr); les paramtres sont pousss dans la pile lappel :

nbr
buf
fd
Retour

< SP

Au retour, ils sont limins (dpils).


Les paramtres appels par valeurs, comme fd ou nbr, sont copis dans la
pile. Les paramtres appels par rfrence, comme buf, sont transmis par leur
pointeur.
Une autre forme de passage par copie/restauration passe les paramtres par
valeur mais les recopie au retour. Cette forme est similaire lappel par rfrence
sauf si le mme paramtre apparat plusieurs fois dans les arguments, par exemple
avec 2 tableaux.
6.2.3 Le mcanisme de passage de paramtres dans les RPC
Les passages de paramtres dans les RPC tchent de ressembler le plus
possible ceux des appels ordinaires. Au lieu de faire appel au noyau pour
accder au disque, un talon (client stub) encapsule les paramtres dans un message.
Il appelle le noyau qui met un send puis se bloque en rception avec un
receive.
Le talon du serveur (server stub) dsencapsule les paramtres et appelle la
procdure correspondante. Ce talon construira le message de rsultats que le
noyau renverra travers le rseau. La talon du client dsencapsule les paramtres

Rvision : 27/10/1999

dition 19992000

163

qui lui parviennent et retourne au programme appelant comme une procdure


locale.
CLIENT

Appel

SERVEUR

Dsencapsulation

Encapsulation

Appel

Retour

Encapsulation
Dsencapsulation

Retour

Noyau

Noyau

Figure 61 Le mcanisme de passage de paramtres dans les RPC

Lappel de fonction le plus simple se traduit par la transmission du nom de la


procdure et des paramtres.
fonction(a, b)

->

fonction, a, b

Dans le cas dune procdure, il est impossible de transmettre les pointeurs. Il


faut alors transmettre tous les paramtres dans le message : read(fd, buf,
nbr)->

read, fd, buf[0], buf[1], buf[2], buf[3],

buf[nbr - 1], nbr


Le passage par paramtres devient un passage par copie/restauration. Le talon
(stub) gre les diffrents passages par un triage des paramtres (marshaling). Il ne
peut cependant pas se dbrouiller de structures complexes telles que des graphes.
On peut optimiser ces procdures en distinguant les paramtres dentre, des
paramtres de sortie. Ceci conomise un transfert des donnes dans un des deux

Systmes dexploitation & Rseaux informatiques

164

dition 1999-2000

sens. Les donnes en entre du serveur lui seront transmises lenvoi. Les
donnes en sortie (du serveur) ne transiterons quau retour.
Enfin pour assurer une comprhension universelle (de toutes les machines), il
faut passer par une reprsentation intermdiaire, par exemple XDR (eXternal Data
Representation).
6.2.4 Lenregistrement des services
Pour faciliter les mises jour des services, leurs diffrentes caractristiques
sont centralises. Pour ceci, les serveurs doivent enregistrer auprs dun aiguilleur
(binder ou portmapper) : leur nom, leur n de version et un identificateur entier.
Pour se localiser physiquement, le serveur donne aussi son adresse (Ethernet,
Internet ou autre). Le client la recherche dun service mettra vers laiguilleur
une requte. Ce dernier lui retournera ladresse du service. le client pourra alors
adresser sa demande au serveur.

Client

Serveur

Demande
d'adresse

Processus
PortMap

Rponse

Appel

Service

Poursuite

Retour

Figure 62 Schma dexcution

Rvision : 27/10/1999

dition 19992000

165

6.2.5 Les dfaillances


Plus que pour les systmes centraliss, les systmes rpartis sont susceptibles
de dfaillances. Ceci cause de la multiplicit des matriels. Les principales
dfaillances sont : limpossibilit de localiser le serveur; les messages de requtes
perdues; les messages de rponses perdues; les plantages du serveur; les plantages
du client.
6.2.5.1

les messages perdus

Les messages de requtes perdus sont aisment rparables par une simple
retransmission. On peut pallier ce type de dfaillance par limplantation dun
compteur (time out) qui dclenchera une rexpdition si un envoi na pas t
acquitt.
Les messages de rponses perdus sont en revanche plus difficiles traiter.
Certaines oprations peuvent se rpter sans dommage, par exemple la lecture
dun fichier. Elles sont dites idempotentes. Certaines autres oprations ne le sont
pas, par exemple, envoyer un courrier. Il est alors plus difficile de remdier la
perte dun message.
6.2.5.2

Les plantages du serveur

Les plantages du serveur sont aussi trs dpendants de lidempotence. Le


plantage peut, en effet, avoir lieu avant ou aprs lexcution. On est alors revenu
au problme des pertes de messages.
Pour matriser ce type de pannes, on peut implanter 3 types de smantique
dexcution pour les RPC. Aucune delles cependant nest totalement
satisfaisante :
la procdure est excute exactement une fois. Ceci est la smantique des
appels locaux. Elle est impossible raliser pour les RPC.

Systmes dexploitation & Rseaux informatiques

166

dition 1999-2000

La procdure est excute au plus une fois. Si le client obtient une rponse, il
sait quil y a une excution, sinon il na aucune certitude.
La procdure est excute au moins une fois. Le client rpte sa requte tant
quil na pas eu de rponse correcte.
6.2.5.3

Les plantages du client

Un client qui se plante peut laisser chez le serveur des processus orphelins.
Plusieurs mthodes ont t dcrites dans la littrature :
lextermination, qui consiste liminer tous les orphelins dun client lors de
son redmarrage;
la rincarnation qui limine brutalement tous les calculs rpartis lors du
redmarrage dune station;
lexpiration qui limite le temps de calcul pour chaque service. Si ce temps est
dpass, le serveur doit sassurer que le client existe toujours.
En pratique, ces mthodes sont difficilement implantables.
6.2.6 Limplantation
6.2.6.1

Les protocoles

Les protocoles connects sont prfrables pour des transmissions sur une
longue distance. Pour les rseaux locaux o le temps de rponse est crucial, on
choisit souvent des protocoles non-connects. Le protocole le plus utilis est
UDP/IP. Ces deux protocoles sont dpasss techniquement car ils ajoutent de
nombreux champs inutiles. Trois champs seulement sont ncessaires : la
destination, la source et la longueur. Cependant le poids du matriel existant fait
quils seront difficilement remis en cause.
6.2.6.2

Les performances

Rvision : 27/10/1999

dition 19992000

167

Les performances dpendent de 5 parties principales : lencapsulation de


lappel, le traitement du noyau du client et lenvoi, le transit, la rception par le
noyau du serveur, la dsencapsulation du message.
Des mesures ont montr que pour une RPC nulle, les parties sont relativement
gales lexception du transit qui prend peu de temps. Pour une trame Ethernet
pleine, les 5 parties sont peu prs gales.
6.2.6.3

Les acquittements

Des appels de procdures peuvent tre perdus parce que le message est perdu
sur le rseau ou bien parce que le rcepteur est submerg (overrun).
Pour savoir si le traitement a t effectu ou non, les appels de procdures
utilisent un compteur afin ventuellement de ritrer leur demande. La dure de
la temporisation est un compromis raliser :
un courte temporisation peut entraner des retransmissions inutiles;
une longue temporisation peut crer des attentes importantes pour des
paquets perdus.

6.3

Les RPC de Sun

6.3.1 Introduction
Plusieurs normes dappels de procdures distances ont t dfinies sur Unix.
Parmi elles on trouve les RPC de SUN, le protocole Courier de Xerox, les RPC
de Apollo : Network Computing System. En fait, les RPC de la socit Sun sont
de loin les plus rpandues. Sun a tendu ce concept Java sous le nom
dinvocation de mthodes distance (RMI).
Les RPC de Sun sont construites au-dessus des sockets de Berkeley. Elles
comprennent une bibliothque : rpclib et un utilitaire de gnration de talons :
Systmes dexploitation & Rseaux informatiques

168

dition 1999-2000

rpcgen. Elles sont normalement synchrones. Il est nanmoins possibles de les


rendre asynchrones. Elles autorisent les passage de paramtres par valeur ou par
pointeurs. Elles nacceptent pas les variables globales. Lappel de la procdure
distance utilisera un port quelconque de la machine cliente. Le service utilise aussi
un port quelconque.
La reprsentation des donnes pour la transmission est effectu par le
protocole XDR (eXternal Data Representation). Les RPC de Sun utilisent souvent un
transport en mode non-connect : les datagrammes UDP associes IP. Les
paquets sont transfrs par blocs de 8 ko. Il est cependant possible dutiliser
TCP/IP.
6.3.2 Le portmapper
Les services utiliseront des ports dcoute quelconques. Ces services
senregistreront auprs dun processus daiguillage : le PortMapper. Pour obtenir
ladresse dun service, le client adressera ses demandes au PortMapper dont le
port est constant : n 111. Le PortMapper aiguillera la demande vers le bon
service. Le client adressera alors sa requte au service. Le service renverra les
rsultats au client son port dmission.
6.3.3 La nomenclature des appels
Chaque appel transmet un identificateur de requte, des identificateurs de
services et un identificateur dauthentification. Les services sont identifis par 3
entiers de 32 bits : un n de programme, un n de procdure et un n de version.
Les n de programme se codent dans les intervalles suivants :
Min

Max

0x00000000

0x1fffffff

Sun

0x20000000

0x3fffffff

Utilisateurs

Rvision : 27/10/1999

Type

dition 19992000

169

0x40000000

0x5fffffff

Transitoire

0x60000000

0x7fffffff

Sun

Les n des procdures commencent 1. Le n 0 est rserv la procdure


nulle. Les versions commencent 1.
6.3.4 La gestion des erreurs
Les RPC de Sun ont une smantique dappel se rfrant lidempotence. Pour
implanter de facto la smantique au plus une fois , il faut utiliser un transport
TCP. Les RPC grent un temporisateur paramtrable qui rptera une requte un
certain nombre de fois avant de retourner une erreur. On peut paramtrer ces
temporisations en termes de dure et en terme de nombre de reprises.
6.3.5 Les niveaux de programmation
On peut programmer des RPC 3 niveaux diffrents. Le 1er niveau ne permet
que lutilisation de RPC dj enregistres. Le 2e ne permet que lutilisation de
UDP. Il offre cependant une grande varit de fonctionnalits qui sont souvent
suffisantes pour les cas courants. Le 3e donne accs toutes les possibilits des
RPC.
6.3.6 La structure des programmes
Les programmes serveurs auront la structure suivante :
cration dun descripteur RPC (handle);
enregistrement auprs du processus PortMap;
traitement des appels (cette partie est similaire celle dune procdure locale).
Les programmes clients auront la structure suivante :
Systmes dexploitation & Rseaux informatiques

170

dition 1999-2000

cration dun descripteur RPC (handle);


appel;
libration du descripteur.
La fabrication de ces programmes est largement facilite par rpcgen.
6.3.7 Les fonctions serveur de la bibliothque
Cration dun descripteur (handle) UDP :
SVCXPRT *svcudp_create(int sock)
cration dun descripteur TCP :
SVCXPRT

*svctcp_create(int

sock,

int

sendz,

int

recvz)
Destruction dun descripteur :
void svc_destroy(SVCXPRT *xptr)
Enregistrement :
bool_t svc_register(SVCXPRT *xptr, u_long prognum,
u_long versnum, void (*dispatch)(), u_long protocol).
protocol = IPPROTO_UDP ou IPPROTO_TCP
Suppression dun service :
bool_t

svc_unregister(u_long

prognum,

u_long

versnum)
Rponse un client :
bool_t

svc_sendreply(SVCXPRT

*xptr,

outproc, char *out)


6.3.8 Les fonctions client de la bibliothque
Cration dun client TCP ou UDP :

Rvision : 27/10/1999

xdrproc_t

dition 19992000

CLIENT

171

*clnt_create(char

*host,

u_long

prognum,

u_long versnum, char *protocol)


avec protocol = "udp" ou "tcp"
Cration dun client UDP :
CLIENT

*clntudp_create(struct

sockaddr_in

*addr,

u_long prognum, u_long versnum, struct timeval wait,


int *psock)
avec wait dterminant la tempo de retransmission (5 s par dfaut) et psock
le socket de retour
Cration dun client TCP :
CLIENT
u_long

*clnttcp_create(struct
prognum,

u_long

sockaddr_in

versnum,

int

*addr,

*psock,

int

sendz, int recvz)


avec sendz et recvz dterminant les tailles des tampon TCP.
Destruction dun descripteur :
void clnt_destroy(CLIENT *xptr)
Appel dune procdure :
enum
procnum,

clnt_stat
xdrproc_t

clnt_call(CLIENT
inproc,

char

*cl,
*in,

u_long
xdrproc_t

outproc, char *out, struct timeval wait)


o inproc et outproc sont les procdures XDR dencodage et de
dcodage; in et out sont les donnes dentres-sorties; wait est le
temporisateur total de lappel (nombre maxi de retransmission)
Contrle gnral de la transmission :
bool_t clnt_control(CLIENT *cl, int request, char
*info)
Cette fonction est analogue aux ioctl.
Systmes dexploitation & Rseaux informatiques

172

dition 1999-2000

6.3.9 Complments sur les fonctions


Gestion derreurs
clnt_perror(), clnt_pcreateerror() et svcerr_system()
permettent dafficher des erreurs. Elles sont analogues la fonction perror()
Authentification
Les paramtres dauthentification sont transmis avec chaque requte. Il est
possible de ne pas en tenir compte (traitement par dfaut); de vrifier lUID et le
GID avec AUTH

*authunix_create_default() ou de coder les

donnes avec le DES.


Gestion du dmon daiguillage (PortMapper) :
On peut obtenir la liste des ports attribus et des n de programmes avec
pmap_getmaps().
On peut associer un programme un port avec pmap_set() et le dissocier
avec pmap_unset().
Bibliothques dinclusions : <rpc/rpc.h>
La commande rpcinfo permet dobtenir des informations sur les fonctions
enregistres par le dmon daiguillage.

6.4

Les modles de reprsentations universelles

Pour saffranchir de la reprsentation des machines, on utilise une


reprsentation universelle pour transporter les donnes. LOSI a normalis une
reprsentation ASN.1 (Abstract Syntax Notation 1) qui nest pas utilise dans les
systmes rpartis. (Elle lest en revanche dans la gestion des rseaux).
XDR (eXternal Data Representation) fait partie de lensemble des protocoles
de Sun. Elle permet de reprsenter les donnes sous une forme universelle et de

Rvision : 27/10/1999

dition 19992000

173

raliser les communications en mmoire, travers des fichiers ou travers le


rseau.

mission

Transmission
Codage XDR

Dcodage XDR

Rception

Figure 63 Le codage et le dcodage XDR

Le codage XDR ne transporte pas la description du type cod, au contraire de


ASN.1. Ceci signifie que la procdure de dcodage doit savoir ce quelle dcode.
6.4.1 Le codage XDR
Le codage XDR est du type big-endian. Loctet de poids fort est ladresse la
plus petite. Par exemple pour le chiffre 5 :
oct. 0

oct. 1

oct. 2

oct. 3

Les rels sont cods au format IEEE sur 32 bits.


6.4.2 Le transcodage XDR
Lencodage XDR transforme les donnes dmission dans une suite doctets
(un flot) sa norme de reprsentation. La procdure de transformation :
encodage ou dcodage, sappelle un filtre.
Pour raliser les flots et les filtres, on dispose de fonctions rassembles dans
une bibliothque dont len-tte est <rpc/xdr.h>
Systmes dexploitation & Rseaux informatiques

174

dition 1999-2000

6.4.3 Les flots


On peut crer des flots dentres-sorties standards ou des flots en mmoire.
Cration dun flot :
void

xdrstdio_create(XDR

*xdr_handle,

FILE

*fichier, enum xdr_op op)


o op est XDR_ENCODE, XDR_DECODE ou XDR_FREE.
Cration dun flot en mmoire :
void xdrmem_create(XDR *xdr_handle, char *tampon,
int taille_tampon, enum xdr_op op)
o op est aussi XDR_ENCODE, XDR_DECODE ou XDR_FREE.
En fonction de loprateur, on crit ou on lit ensuite dans le flot par des filtres
de type :
bool_t xdr_type(XDR *xdr_handle, type *value)
Par exemple : xdr_float, xdr_long, etc. Les donnes sont lues ou crite
dans le tampon ou le fichier, suivant que la cration a t faite par
xdrmem_create ou xdrstdio_create.
6.4.4 Les filtres de XDR
On dispose de filtres de base et on peut construire des filtres composites.
Les filtres de base correspondent au types simples :
bool_t xdr_type(XDR *xdr_handle, type *value)
Les filtres composites traitent les types suivants :
string, opaque, bytes, vector, array, reference, pointer,
Les appels aux filtres reprennent les paramtres des filtres simples et en
ajoutent dautres correspondant aux types :

Rvision : 27/10/1999

dition 19992000

175

bool_t xdr_string(XDR *xdr_handle, type *value, int


max)
partir de ces types on peut construire des types complexes. Grce ces
types, on peut ensuite lire ou crire dans les flots des structures quelconques.
6.4.5 Ralisation pratique
En pratique on construit les filtres grce au gnrateur rpcgen. rpcgen
prend en entre un fichier suffix .x (par exemple alpha.x) contenant la
dclaration des structures dans un langage trs voisin du C. Par exemple :
struct structure {
float a;
string tab<10>;
int mat[10];
};
rpcgen crera un fichier alpha.h qui contiendra les structures C
correspondantes, ainsi quun fichier alpha_xdr.c avec les flots pour ces
objets. La fonction dencodage et de dcodage portera le nom de
xdr_structure(XDR

*xhandle,

struct

structure

*in/*out).

6.5

Le gnrateur RPCGEN

rpcgen permet dobtenir des programmes rpartis partir de leur


spcification. On dcrit les donnes et les programmes grce un langage voisin
du C dans un fichier suffix .x (prog.x). On traite ce fichier par le
gnrateur rpcgen. Il produit :
un fichier den-tte : prog.h
deux fichiers clients : prog_clnt.c et prog_xdr.c
Systmes dexploitation & Rseaux informatiques

176

dition 1999-2000

deux fichiers serveurs : prog_svc.c et prog_xdr.c


Par dfaut, rpcgen gnre qu code conforme la norme K & R 1978. On
peut crer du C ANSI avec la commande rpcgen -C. Les programmes
client.c et serveur.c restent la charge du programmeur.
6.5.1 Les donnes de RPCGEN
Le fichier de donnes est suffix .x
1. On dfinit les donnes en entre et en sortie. Une fonction a au plus un
paramtre dentre et un de sortie. On doit donc avoir recours des structures
pour des appels avec plusieurs paramtres.
2. Les structures sont ventuellement redfinies grce typedef
typedef donnes en entre
typedef donnes en sortie
3. On dclare ensuite le programme et lensemble des procdures appeles
distance.
program PROGRAMME {
version VERSION {
typeOut PROC_UN(typeIn) = 1;
typeOut PROC_DEUX(typeIn) = 2;

} = 1;
} = 0x20000010;
6.5.2 Le dveloppement des programmes (le client)
Le squelette gnral dun client est le suivant :
#include <rpc/rpc.h>
#include "prog.h"
void client()

Rvision : 27/10/1999

dition 19992000

177

{
CLIENT

*cl;

/* RPC handle */

typeIn

entre;

/* param entre */

typeOut

*out;

char

*serveur;

/* param sortie */

cl = clnt_create(serveur, PROGRAMME, VERSION ,


"udp");
out = proc_un_1(&entre, cl);
clnt_destroy(cl);
}
6.5.3 Le dveloppement des programmes (le serveur)
Le nom des services est gnr automatiquement par rpcgen. partir du
fichier .x .
#include <rpc/rpc.h>
#include "prog.h"
TypeOut *proc_un_1(entre)
TypeIn *entre;
{
static typeOut sortie;
/* Doit tre static */

return &sortie;
}
6.5.4 Quelques points retenir
1. Le nom des procdures distance doit tre crit en majuscules.
2. Les appels ne doivent pas comporter plus dun paramtre.
Systmes dexploitation & Rseaux informatiques

178

dition 1999-2000

3. Les passages des paramtres et leur retour doivent se faire par des pointeurs.
4. Le paramtre de retour des procdures de service doit tre dclare en
static.
6.5.5 La production de code
Loutil rpcgen produit :
un fichier den-tte : prog.h
deux stubs : prog_clnt.c et prog_svc.c
un filtre XDR : et prog_xdr.c
Le programmeur produit :
serveur.c
client.c
Le compilateur produit :
le client avec : client.c, prog_clnt.c, prog_xdr.c
le serveur avec : serveur.c, prog_svc.c, prog_xdr.c.
6.5.6 Les performances
De nombreuses mesures de performances ont t effectues pour valuer les
RPC. De multiples facteurs peuvent jouer dans cette valuation. En gnral, un
remplacement tel quel est environ 10 fois plus lent avec une RPC.
Le temps de traitement dune procdure nulle est de quelques millisecondes
lors dun appel blocant (5 10). Cette dure donne un ordre dide du seuil
partir duquel il est rentable de transfrer des calculs sur un ordinateur trs
puissant.

Rvision : 27/10/1999

dition 19992000

179

6.5.7 Un exemple
Le fichier de description du squelette :
program DATE_PROG {
version DATE_VERS {
long BIN_DATE(void) = 1;
string STR_DATE(long) = 2;
} = 1;
} = 0x31234567;
Le programme dappel du client
#include <rpc/rpc.h>
#include "date.h"

void main(int argc, char **argv) {


CLIENT *cl;
char *server;
long *lresult;
char **sresult;

server = argv[1];
if ((cl =
"udp")) == NULL) {

clnt_create(server,

DATE_PROG,

clnt_pcreateerror(server);
exit(2);
}
if ((lresult = bin_date_1(NULL, cl)) == NULL) {
clnt_perror(cl, server);
exit(3);

Systmes dexploitation & Rseaux informatiques

DATE_VERS,

180

dition 1999-2000

}
printf("time on host %s = %ld\n", server, *lresult);
if ((sresult = str_date_1(lresult, cl)) == NULL) {
clnt_perror(cl, server);
exit(4);
}
printf("time on host %s = %s\n", server, *sresult);
clnt_destroy(cl);
exit(0);
}

Les fonctions du serveur :


#include <rpc/rpc.h>
#include "date.h"

long *bin_date_1() {
static long timeval;
long time();
timeval = time((long *) 0);
return(&timeval);
}

char **str_date_1(long *bintime) {


static char *ptr;
char *ctime();
ptr = ctime(bintime);
return(&ptr);
}

6.6

Les invocations de mthodes distance (RMI)

Rvision : 27/10/1999

dition 19992000

181

6.6.1 Larchitecture
Linvocation de mthodes distance est une variante des appels de procdures
distance pour Java. Les RMI tirent compltement parti des objets de Java et ils
les distribuent sur le rseau. On peut ainsi appeler les mthodes dobjets
lointains. On dit alors quon les invoque. On cre les stubs dune manire similaire
aux RPC avec le gnrateur rmic.
Les spcifications de lobjet distant doit tre faite par une interface Java et
hriter de la classe java.rmi.Remote. Ceci est semblable aux fichiers .x
des RPC. Elles doivent obligatoirement tenir compte dexceptions possibles :
import java.rmi.*
public interface MonObjetDistant extends java.rmi.Remote {
public UneClasse mthode1() throws java.rmi.RemoteException;
public UneClasse mthode2() throws java.rmi.RemoteException;
}

Limplantation de lobjet distant, comparable aux fonctions serveur des RPC,


hrite de java.rmi.UnicastRemoteObject et doit implanter
linterface prcdente.
public

class

CodeObjetDistant

implements

MonObjetDistant

extends

java.rmi.UnicastRemoteObject {
// Constructeur
public CodeObjetDistant()throws java.rmi.RemoteException{ //code}
public UneClasse mthode1() throws java.rmi.RemoteException{}
public UneClasse mthode2() throws java.rmi.RemoteException{}
// Autres mthodes destines au fonctionnement de la classe
}

Systmes dexploitation & Rseaux informatiques

182

dition 1999-2000

On nomme un objet distant par ladresse

rmi://nom

de

la

machine/nom de lobjet. Lenregistrement des services se fait par


lintermdiaire de la classe Naming et du programme rmiregistry.

6.6.2 Un exemple
Rdaction en cours

6.7

Les serveurs de fichiers

6.7.1 Introduction
6.6.1.1

Le partage des fichiers

Un systme dexploitation de rseaux permet de monter des fichiers distance.


Le montage porte sur des rpertoires et un rpertoire partag implique en
gnral le partage de tout ses fils. Suivant les systmes dexploitation, diffrentes
machines peuvent effectuer des montages diffrents ou similaires.
6.6.1.2

Le montage des rpertoires

partir de deux systmes de fichiers spars :

Rvision : 27/10/1999

dition 19992000

183

users

temp

usr

stage1

stage2

stage3

Figure 64 Le montage de disques

Le montage produit le systme mont suivant :


/

users

stage1

stage2

temp

usr

stage3

Figure 65 Les disques monts

6.7.2 NFS
Le systme Network File System de Sun est lun des systmes dexploitation de
rseau les plus rpandus. Il utilise les protocoles de RPC de la socit du mme
nom et il fonctionne avec UDP/IP. Il repose sur le montage de parties
darborescences de serveurs par des clients. Ces clients peuvent tre avec ou sans
disques. Le partage intervient lorsque deux clients montent la mme
arborescence.
Avec NFS, la machine fournissant le disque (le serveur) indique les rpertoires
disponibles (partageables) dans /etc/exports. Les machines utilisant le
Systmes dexploitation & Rseaux informatiques

184

dition 1999-2000

disque (les clients) indiquent les fichiers quelles utilisent dans le fichier
/etc/fstab.
6.6.2.1

Les protocoles de NFS : les poignes

NFS autorise les matriels et les systmes dexploitation htrognes. Les


diffrentes machines doivent simplement implanter les protocoles spcifi par lui.
Les manipulations des fichiers entre les diffrentes machines se font par
lintermdiaire de poignes (handles) de fichiers Les poignes de rpertoires
sont fournies au montage de larborescence. Le client expdie au serveur
larborescence (le chemin) quil dsire monter. Si cette arborescence est exporte,
le serveur retourne la poigne : type du systme de fichier, n du disque, i-nud
du rpertoire, droits.
6.6.2.2

Les RPC de montage

Les procdures de montage sont implantes sous la forme dappels de


procdures distance.
program MOUNTPROG {
version MOUNTVERS {
void MOUNTPROC_NULL(void) = 0;
fhstatus MOUNTPROC_MNT(dirpath) = 1;
mountlist MOUNTPROC_DUMP(void) = 2;
void MOUNTPROC_UMNT(dirpath) = 3;
void MOUNTPROC_UMNTALL(void) = 4;
exportlist MOUNTPROC_EXPORT(void) = 5;
} = 1;
} = 100005;
6.6.2.3

Les protocoles de NFS : les oprations

Les oprations concernent des manipulations de fichiers et de rpertoires. Ces


manipulations sont voisines de celles des appels au systme de fichiers dUnix.
Elles comprennent la cration de fichiers, les lectures, critures, accs aux
attributs de : tailles, droits, date, Elles ne comprennent pas les oprations

Rvision : 27/10/1999

dition 19992000

185

douverture et de fermeture de fichiers: open et close. NFS est un protocole


sans tat (stateless). Pour effectuer une lecture, le client va dabord envoyer au
serveur le nom de ce fichier et recevoir une poigne. Les oprations ultrieures
adresseront au serveur la poigne, le dcalage, et le nombre doctets.
6.6.2.4

Les avantages dun protocole sans tats

Lavantage des systmes sans tat tient au fait que le serveur na pas se
souvenir de ses connexions avec ses clients. Cest un processus sans mmoire. Le
systme est ainsi beaucoup plus rsistant au dfaillances de machines. Si le serveur
se plante et redmarre, il naura perdu aucune informations sur les fichiers
ouverts (puisquil nen a pas).
6.6.2.5

Les inconvnients dun protocole sans tats

Linconvnient principal de ce type de systmes est quil ne respecte pas la


smantique des systmes dexploitation courants. En particulier le comportement
de NFS est diffrent sur certains points de celui dUnix. La pose des verrous sur
les fichiers ouverts ncessite certaines adaptations. Les oprations de partage
des fichiers du fait des mmoires cache peuvent avoir des rsultats
imprvisibles.
6.6.2.6

Les RPC des oprations de NFS

program NFS_PROGRAM {
version NFS_VERSION {
void NFSPROC_NULL(void) = 0;
attrstat NFSPROC_GETATTR(fhandle) = 1;
attrstat NFSPROC_SETATTR(sattrargs) = 2;
void NFSPROC_ROOT(void) = 3;
diropres NFSPROC_LOOKUP(diropargs) = 4;
readlinkres NFSPROC_READLINK(fhandle) = 5;
readres NFSPROC_READ(readargs) = 6;
void NFSPROC_WRITECACHE(void) = 7;
attrstat NFSPROC_WRITE(writeargs) = 8;

Systmes dexploitation & Rseaux informatiques

186

dition 1999-2000

diropres NFSPROC_CREATE(createargs) = 9;
stat NFSPROC_REMOVE(diropargs) = 10;
stat NFSPROC_RENAME(renameargs) = 11;
stat NFSPROC_LINK(linkargs) = 12;
stat NFSPROC_SYMLINK(symlinkargs) = 13;
diropres NFSPROC_MKDIR(createargs) = 14;
stat NFSPROC_RMDIR(diropargs) = 15;
readdirres

NFSPROC_READDIR(readdirargs)

16;
statfsres NFSPROC_STATFS(fhandle) = 17;
} = 2;
} = 100003;
6.7.3 Limplantation de NFS
Limplantation de NFS par Sun est fonde sur trois couches : les appels
systme; le systme de fichiers virtuel; le noyau. La couche dappel systme vrifie
la rectitude syntaxique des appels. La couche de fichiers virtuels va interfacer les inuds dUnix avec les rfrences des fichiers distants. Le noyau va excuter
localement les commandes provenant du client.
Serveur

Client

Appels systmes

Systme de fichiers virtuel

Syst. Expl.
local

Disque
local

Rvision : 27/10/1999

Client
NFS

Message

Systme de fichiers virtuel

Serveur
NFS

Message

Syst. Expl.
local

Disque
local

dition 19992000

187

Figure 66 Un serveur de fichiers

6.6.3.1

Les v-n uds

Les nuds virtuels constituent linterface entre les appels systmes et les
systmes dexploitation locaux ou distants.
Chaque v-nud pointe soit sur un i-nud (pour Unix) dans le cas ou le fichier
est local, soit sur un r-nud (remote) dans le cas ou le fichier est distant.
Le r-nud contient la poigne du fichier lointain. partir du v-nud il est
donc possible de retrouver les caractristiques des diffrents fichiers.
6.6.3.2

Louverture dun fichier avec NFS

Pour effectuer une ouverture (du ct du client), le systme analyse


lenchanement de rpertoires. Si le fichier est distant, un certain moment,
larborescence correspond un systme mont. Le client demandera au serveur
une poigne pour le fichier distant. Le client crera un r-nud pour le fichier
ouvert o il conservera la poigne. Pour chaque fichier ouvert, il correspondra
donc au v-nud : soit un i-nud, soit un r-nud. Lappel systme rcuprera un
descripteur entier reli au v-nud du client. Le serveur, quant lui, ne conservera
aucune trace.
6.6.3.3

La lecture et lcriture dun fichier avec NFS

Les appels ultrieurs concernant une lecture ou une criture dtermineront par
le v-nud si le fichier est distant ou local. Dans le cas de fichiers distants, les
donnes seront transfres par blocs de 8 ko. Elles seront caches par le
client. Ceci signifie, dans le cas dun criture, que le transfert vers le serveur ne
seffectue que lorsque le bloc est plein.
La mmoire cache amliore notablement les performances du systme. Dans
le cas dun systme dexploitation centralis comme Unix , les processus
Systmes dexploitation & Rseaux informatiques

188

dition 1999-2000

accdant la mmoire accderont au mme cache. En revanche, le cache pose un


certain nombre de problme aux systmes rpartis.
6.6.3.4

Le problme du cache

Le cache risque de rendre les donnes de fichiers partags incohrentes. la


diffrence des systmes centraliss, un bloc de donnes manipul par plusieurs
machines sera recopi sur toutes les machines qui lexploitent. Dans le cas de
lectures multiples, ceci est sans inconvnients. Dans le cas dcritures, il peut se
produire des effets inattendus, car les modifications ne sont pas immdiatement
reportes sur toutes les machines.

Lecture
1

Modification

Rvision : 27/10/1999

dition 19992000

189

Incohrence

Figure 67 La cohrence du cache

6.6.3.5

Comment NFS pallie ce problme

NFS ne rsout pas totalement les incohrences potentielles dues au cache; il


tente seulement de les limiter.Pour ceci, les blocs lus nont quune dure de vie de
3 s. Les blocs modifis dans le cache sont retourns au serveur par un dmon
sexcutant toutes les 30 s. Chaque fois quun fichier est ouvert et quil y
correspond un cache, le client compare la date de dernire modification et la date
de cache. Dans le cas o cette dernire est plus ancienne, il effectuera une
nouvelle lecture des donnes.
Ce prcautions nliminent cependant pas totalement les risques. NFS
nimplante pas la smantique dUnix. Notamment, un fichier peut tre cr sur
une machine et rester invisible aux autres pendant 30 s.

6.8

Les processus dans les systmes rpartis

non disponible en 1999

6.9

Les autres services

Systmes dexploitation & Rseaux informatiques

190

dition 1999-2000

Certains paragraphes ne sont pas disponibles en 1999


6.9.1 Les messageries
6.8.1.1

SMTP, POP et IMAP

6.8.1.2

X.400 et X.500

6.9.2 Les serveurs dimpression

6.9.3 Rpartition et nommage


6.8.3.1

Les pages jaunes

Un service de Yellow Pages sefforce de rendre unique sur le rseau le fichier


/etc/hosts.
ypcat hosts group passwd etc.
6.8.3.2

Les serveurs de noms

6.9.4 La gestion ladministration des rseaux


Les rseaux, au dpart locaux, deviennent de taille de plus en plus importante.
Ils sont, proprement parler, le systme informatique de lentreprise. Pour
matriser leur croissance, on les segmente, en gnral, en sous-rseaux. Les sousrseaux sont relis entre-eux par des pines dorsales. Les pines dorsales ont
souvent pris la forme de rseaux rapides, utilisant des normes telles que FDDI.
Actuellement, elles sont remplaces par des commutateurs Ethernet 10 ou 100
MHz. lavenir, ces commutateurs utiliseront sans doute la norme ATM.

Rvision : 27/10/1999

dition 19992000

191

Serveur

Rseau fdrateur

Interconnexion

La croissance en taille des rseaux rend leur administration de plus en plus


complique.
6.8.4.1

Netstat et autres

Sur la plupart des systmes Unix rpartis, plusieurs commandes sont


disponibles pour connatre ltat du rseau :
ifconfig permet de configurer linterface, en gnral, carte Ethernet
arp permet de connatre les associations dadresses Ethernet/IP
netstat permet dobtenir certaines statistiques sur ltat des transmissions
et du routage;
ping permet de connatre les temps daller et retour entre deux machines
route permet le contrle des tables de routage.
traceroute permet de connatre les enchanements de routeurs entre deux
destinations.
rpcinfo donne des indications sur les RPC;
nfsstat donne des informations sur NFS;

Systmes dexploitation & Rseaux informatiques

192

dition 1999-2000

netstat fournit 3 types dinformations :


1. le premier correspond la liste des sockets en service avec lindication de leur
tat et de leur protocole : netstat -a;
2. le second fournit les structures de donnes du rseau :
netstat -v les statistiques sur la carte
netstat -s les statistiques par protocole
netstat -i les statistiques par interface
netstat -r les routes
netstat -m les mmoires tampons
3. le troisime affiche de manire continue des statistiques sur ltat des
interfaces (netstat intervalle).
La commande route permet de rgler manuellement les entres de la table
de routage. De cette manire on peut ajouter ou dtruire des routes. On indique
alors le rseau ou la machine de destination, la passerelle et le nombre de saut
pour latteindre.
rpcinfo donne ltat des appels de procdures distances. rpcinfo -p
machine donne les dmons sexcutant sur la machine appele. Parmi les
programmes : 100003 est NFS, 100005 est le dmon de montage distance,
100000 est le portmapper, 100002 est rusers On peut tester les procdures 0
(nulle) dun dmon sur une machine donne grce aux options -u (udp) et -t
(tcp). On peut aussi tester un service et une version particulire sur toutes les
machines grce un message de diffusion : broadcast (-b).
nfsstat permet dobtenir certaines statistiques sur les appels systmes de
NFS. nfsstat -m donne des temps moyen dexcution pour les lectures et
critures. nfsstat sans options, donne :

Rvision : 27/10/1999

dition 19992000

193

pour le serveur, le nombre total dappels distance et dappel systme reus;


pour le client, le nombre total dappels distance et dappel systmes envoys;
pour chacun il dtaille les pourcentages de chacun des appels systme;
il indique les divers checs.
Les utilitaires prcdents disponibles sur Unix ne le sont pas forcment sur les
autres systmes. Ils sont donc lis un systme dexploitation et non pas aux
applications de rseaux. Ils ne permettent pas facilement la tlopration, par
exemple le redmarrage dune station. Ces protocoles ne disposent pas de la
possibilit dalerte derreurs une machine de gestion, par exemple, le plantage
dune station, lengorgement dun routeur, etc.
6.8.4.2

SNMP

SNMP (Simple Network Management Protocol) est un protocole de gestion de


rseau qui tend devenir un standard de facto. Il opre au niveau de la couche
application ce qui prsente des avantages : indpendance du rseau sous-jacent,
indpendance vis--vis du matriel, Ceci prsente aussi des inconvnients :
impossibilit datteindre les machines distantes si la couche de transport est en
panne.
SNMP est propos par de nombreux fournisseurs de matriels. Dautres
protocoles seraient susceptibles de le concurrencer, notamment CMIP (Common
Management Information Protocol) de lOSI, mais ils nont gagn une reconnaissance
comparable. SNMP est plus rudimentaire que ses concurrents, mais il a le mrite
dexister et dtre accept.
SNMP est n dune initiative pour administrer les rseaux de la recherche
amricaine (National Science Foundation). Les premires ralisations datent de
1987-1988. Elles se destinaient au dpart la simple gestion de passerelles
TCP/IP. De ce fait SNMP est troitement li TCP/IP et aux constructeurs
amricains.
Systmes dexploitation & Rseaux informatiques

194

dition 1999-2000

SNMP est compos :


de stations grantes ou dadministration;
de stations gres. Ces stations sont des nuds IP dotes dun agent
(despionnage) SNMP qui enregistre des statistiques.
SNMP dfinit entre autres :
Un protocole dchange entre les entits grantes ou gres.
Une base dinformations MIB (Management Information Base) sur chaque entit.
La structure de linformation de gestion dfinit 3 types doprations :
la consultation dinformations;
le positionnement de variables dun nud distant;
les alarmes.
La consultation ou le positionnement se font par lexploration de la machine
gre. Pour ceci, sur chaque station gre, un programme serveur, rentrera en
communication avec le programme client de ladministrateur. Les alarmes sont
des communications dinformations linitiative des stations gres.
Sur chaque station on trouve une base de donnes constitue dobjets grer
la MIB (Management Information Base). Les objets concernent principalement
les diffrents protocoles IP. Elles grent aussi diffrentes couches et protocoles :
MIB Ethernet, MIB TokenRing, Les objets possdent des variables de
fonctionnement, propres, telles que les erreurs de transmission, le temps de bon
fonctionnement, Ces variables sont pour beaucoup statistiques et elles sont
normalises par un nom et un identificateur unique. Cette normalisation permet
aux primitives de fonctionner correctement. Plusieurs normalisations de bases
coexistent MIB 1, MIB 2 et RMON.

Rvision : 27/10/1999

dition 19992000

195

Une norme complmentaire dfinit comment on gre les variables de la MIB :


le SMI (Structure of Management Information). Elle dtermine lorganisation et la
reprsentation des objets. Ces objets sont structurs sous la forme dun arbre.
SMI dfinit de manire prcise des types tels que ladresse IP et des rgles de
rfrencement des tableaux. La SMI impose lutilisation de la norme ASN.1 pour
dfinir les diffrentes variables.
Les objets se situent dans la structure suivante :

Iso
1

Org

dod

Inter
net

dir

adm

exp
3

Iso
Ccitt

Ccitt

priv
4

mib

Figure 68 La structure des informations MIB

On accde aux objets par lenchanement des noms de la hirarchie ou par ses
indices. Par exemple, les objets de la MIB sont dsigns par : 1.3.6.1.2.1
La MIB est divise en 8 sous-domaines lintrieur desquels sont situes les
variables :

Systmes dexploitation & Rseaux informatiques

196

dition 1999-2000

1 mib

Syst Inter trad.


icpm tcp udp
ip
me face adr.
6
4
5
7
3
1
2

egp
8

Figure 69 La sous structure Internet

Systme : variables relatives au systme dexploitation. Interface : carte


dinterface avec le rseau. Traduction

dadresse : par exemple

correspondance ARP. IP, ICMP : protocoles de IP. TCP, UDP : protocoles


TCP. EGP : protocole de routage.
Quelques exemples de variables :

Variables MIB

Catgorie

Signification

sysUpTime

Systme

Dure depuis le dernier redmarrage

ifMtu

Interface

Max. Transfer Unit de linterface

ipInReceives

ip

Nombre de datagrammes reus

ipRoutingTable

ip

Tables de routages

icpmInEchos

icpm

Nombre de demande dchos Icpm reues

tcpInSegs

tcp

Nombre de segments tcp reus

udpInDatagrams

udp

Nombre de datagrammes udp reus

Rvision : 27/10/1999

dition 19992000

6.8.4.3

197

ASN.1

ASN.1 (Abstract Syntax Notation) est une norme OSI de dfinition universelle
de types. Les variables sont membres de 4 classes :
UNIVERSAL
CONTEXT_SPECIFIC
APPLICATION
PRIVATE
Parmi les types universels (UNIVERSAL), ASN.1 distingue les types primitifs
et les types construits.
Types primitifs notables:
BOOLEAN
INTEGER
BITSTRING
OCTETSTRING
IA5String
ANY
Les types construits ressemblent aux structures du C. Parmi les types
notables :
SEQUENCE : liste ordonne dlments de mme type (quivalent un
structure);
Systmes dexploitation & Rseaux informatiques

198

dition 1999-2000

SEQUENCEOF : liste ordonne dlments de mme type en nombre


variable;
SET : ensemble dlments de type diffrent non ordonne en nombre fixe;
SETOF : ensemble dlments de mme type;
CHOICE : choix dun lment parmi une liste.
Comme exemple de dfinition ASN.1, une table de routage scrira :
ipAddrTable ::= SEQUENCEOF ipAddrEntry
ipAddrEntry ::= SEQUENCE {
ipAdEntAddr

ipAddress,

ipAdEntIndex

INTEGER,

ipAdEntNetMask

ipAddress,

ipAdEntBcastAddr

ipAddress,

ipAdEntReasmMaxSize INTEGER
}
Les primitives de SNMP sont peu nombreuses, paradoxalement?
Les primitives de consultation sont :
get request(station, variable)
get response(station, valeur)
get next request (parcours dune table sans connatre le nom de la variable).
La primitive de positionnement est : set(station,

variable,

valeur). La primitive dalerte est : trap(station,

variable,

valeur). Les dialogues seffectuent en mode non-connect. Les oprations


sont atomiques.
Structure ASN.1 des primitives :

Rvision : 27/10/1999

dition 19992000

199

PDUs-SNMP ::=
CHOICE {
get-request
get-next-request
get-response
set-request
trap
}
La conception de SNMP donne ce protocole plusieurs avantages :
il est stable parce que la dfinition est fige. On ne rajoutera pas de
commandes sotriques pour tenir compte de tel ou tel matriel;
il est simple mettre en uvre et comprendre;
il est souple, car il peut inclure de nouveaux matriels par lajout de
caractristiques dans la base de donnes.
Pour redmarrer une station, par exemple, on positionne la variable de temps
depuis le dernier redmarrage 0.
La syntaxe ASN.1 ne permet pas dindexer les tables. On retrouve les lments
par lintermdiaire dun identificateur particulier, par exemple ladresse Ip, dans le
cas de ipAddrTable. Laccs au membre ipAdEntNetMask , dune certaine
adresse

128.10.2.3

se

notera :

iso.org.dod.internet.mgmt.mib.ip.ipAddrTable.ipAddrEn
try.ipAdEntNetMask.128.10.2.3
On peut accder la table sans connatre aucune des adresses par la
commande

get

next

request

et

largument :

iso.org.dod.internet.mgmt.mib.ip.ipAddrTable.ipAddrEn
try.ipAdEntNetMask
Les messages SNMP ont la structure suivante :
Systmes dexploitation & Rseaux informatiques

200

dition 1999-2000

Message-SNMP ::=
SEQUENCE {
version INTEGER {
version 1 (0)
},
community OCTETSTRING,
donnes ANY
}
La zone de donnes se dcompose en unit de donnes de protocoles (PDU).
Les PDU de SNMP sont les suivants :
PDUs-SNMP ::=
CHOICE {
get-request
get-next-request
get-response
set-request
trap
}
La primitive get request est compose des champs suivants :
PDU-get request ::=
IMPLICIT SEQUENCE {
request-id
error status
error index
variable bindings
}
request id est lidentificateur de la demande. error status et error index sont
normalement 0 lors dune demande. variable bindings est une liste de couples
(variable, valeur), par exemple (nom, nil).

Rvision : 27/10/1999