Vous êtes sur la page 1sur 315

Introduction

aux systèmes
informatiques
Architectures, composants,
mise en œuvre

Jacques Lonchamp
Professeur des universités en informatique
Toutes les marques citées dans cet ouvrage
sont des marques déposées par leurs propriétaires respectifs.

Illustration de couverture :
© Julien Eichinger – Fotolia.com

© Dunod, 2017
 
   

www.dunod.com
ISBN 978-2-10-076144-9
Table des matières

AVANT-PROPOS XI

CHAPITRE 1 • LES SYSTÈMES INFORMATIQUES


1.1 Définition et classification 1
1.2 Les systèmes informatiques personnels 2
1.3 Les systèmes informatiques d’organisation 3
1.4 Les systèmes informatiques de contrôle et commande 6
Exercices 10

CHAPITRE 2 • L’ARCHITECTURE D’UN SYSTÈME INFORMATIQUE


2.1 Les architectures en couches 11
2.2 L’architecture de référence 12
2.3 Des exemples d’architectures concrètes 14
Exercices 18

PARTIE 1
LES COUCHES BASSES

CHAPITRE 3 • LES UNITÉS ET SYSTÈMES DE STOCKAGE


3.1 Les unités de stockage 21
3.2 Les systèmes de stockage 28
© Dunod – Toute reproduction non autorisée est un délit.

Exercices 33

CHAPITRE 4 • LES UNITÉS ET SYSTÈMES DE TRAITEMENT


4.1 L’unité centrale de traitement 35
4.2 Les systèmes de traitement 43
Exercices 49

CHAPITRE 5 • LES UNITÉS ET SYSTÈMES DE COMMUNICATION


5.1 Les entrées/sorties 51
5.2 Les réseaux 53
5.3 Les systèmes de communication 61
Exercices 69
VI Introduction aux systèmes informatiques

CHAPITRE 6 • REPRÉSENTATION, CODAGE ET NUMÉRISATION


6.1 Les données en machine 71
6.2 Rappels sur les systèmes de numération 71
6.3 La représentation des entiers naturels (N) 73
6.4 La représentation des dates 74
6.5 La représentation des entiers relatifs (Z) 75
6.6 La représentation des réels (R) 78
6.7 Le codage des caractères 81
6.8 La numérisation du son 83
6.9 La numérisation des images 84
6.10 La numérisation de la vidéo 87
6.11 Les codes détecteurs et correcteurs 88
6.12 Les codes d’identification des objets 89
Exercices 91

PARTIE 2
LA COUCHE SYSTÈME/RÉSEAU

CHAPITRE 7 • LES SYSTÈMES D’EXPLOITATION


7.1 Définition et classification 97
7.2 Les fonctions des systèmes d’exploitation 99
7.3 La famille des systèmes de type Unix 99
7.4 Les outils de développement 102
Exercices 106
CHAPITRE 8 • LA GESTION DES ACTIVITÉS
8.1 Le concept de processus 107
8.2 La gestion des processus en shell 112
Exercices 115
CHAPITRE 9 • LA GESTION DES DONNÉES PERSISTANTES
9.1 Le concept de fichier 117
9.2 La gestion des fichiers en shell 120
Exercices 125
CHAPITRE 10 • LA GESTION DES COMMUNICATIONS
10.1 La diversité des formes de communication 127
10.2 La gestion des communications en shell 131
Exercices 133
Table des matières VII

CHAPITRE 11 • LA GESTION DE LA SÉCURITÉ


11.1 Les concepts de base de la sécurité 135
11.2 La gestion de la sécurité en shell 136
11.3 Des concepts de sécurité avancés 138
Exercices 140

CHAPITRE 12 • LA PROGRAMMATION SHELL


12.1 Interpréteur, environnement, alias 141
12.2 Le langage bash 142
12.3 Des exemples de scripts bash 150
Exercices 152

CHAPITRE 13 • INSTALLATION ET CONFIGURATION D’UN SYSTÈME


13.1 L’amorçage du système 155
13.2 La définition des partitions 156
13.3 Le choix du ou des systèmes de fichiers 157
13.4 L’installation des paquets 158
13.5 Le choix du gestionnaire d’amorçage 159
13.6 La configuration initiale du système 160
Exercices 161

PARTIE 3
LES COUCHES HAUTES

CHAPITRE 14 • LES APPLICATIONS RÉSEAU


14.1 Présentation des applications réseau 165
© Dunod – Toute reproduction non autorisée est un délit.

14.2 Les architectures des applications réseau 165


14.3 Les architectures des serveurs 166
14.4 Les principales applications réseau 167
Exercices 168

CHAPITRE 15 • LES APPLICATIONS DE TRANSFERT DE FICHIERS


15.1 Le transfert de fichiers 169
15.2 Le protocole FTP 170
15.3 La pratique de FTP 171
Exercices 174
VIII Introduction aux systèmes informatiques

CHAPITRE 16 • LES APPLICATIONS DE CONNEXION À DISTANCE


16.1 La connexion à distance 175
16.2 Le protocole Telnet 176
16.3 La pratique de Telnet 177
16.4 Le protocole SSH 178
16.5 La pratique de SSH 180
Exercices 183

CHAPITRE 17 • LES APPLICATIONS D’ACCÈS AUX FICHIERS DISTANTS


17.1 L’accès aux fichiers distants 185
17.2 Le protocole NFS 185
17.3 La pratique de NFS 187
17.4 Le protocole SMB 188
17.5 La pratique de Samba 189
Exercices 191

CHAPITRE 18 • LES APPLICATIONS DE GESTION D’ANNUAIRES


18.1 Les annuaires 193
18.2 Le partage des données système avec NIS 194
18.3 La résolution des noms avec DNS 194
18.4 Les systèmes d’annuaire normalisés LDAP 198
Exercices 204

CHAPITRE 19 • LES APPLICATIONS DE CONFIGURATION AUTOMATIQUE


19.1 La configuration automatique 205
19.2 Le protocole DHCP 205
19.3 La pratique de DHCP 206
Exercices 208

CHAPITRE 20 • LES APPLICATIONS DE MESSAGERIE


20.1 La diversité des applications 209
20.2 Le courrier électronique 210
20.3 La pratique du courrier électronique 216
Exercices 218

CHAPITRE 21 • LE WEB
21.1 Les constituants de base du web 219
21.2 La désignation des ressources 220
21.3 Le protocole HTTP 221
21.4 Le langage HTML 224
Table des matières IX

21.5 La pratique du web 227


Exercices 232

CHAPITRE 22 • LA COUCHE DISTRIBUTION – LES INTERGICIELS


22.1 Les applications distribuées 233
22.2 Les intergiciels ou middlewares 234
22.3 Les intergiciels à appels distants 234
22.4 Les intergiciels à messages 237
22.5 Les intergiciels à composants distribués 240
22.6 Les intergiciels pour les services web 244
22.7 Les tendances nouvelles 249
Exercices 252

CORRIGÉS DES EXERCICES 255

ANNEXE 1 : LE CODE ASCII 285

ANNEXE 2 : MÉMENTO UNIX 289

BIBLIOGRAPHIE 293

INDEX 295
© Dunod – Toute reproduction non autorisée est un délit.
Avant-propos

LA GENÈSE

Les systèmes informatiques actuels ne se résument plus aux seuls ordinateurs traditionnels.
Durant les deux dernières décennies, ils se sont considérablement complexifiés et diversifiés.

À partir de ce premier constat, un certain consensus s’est dégagé lors d’une réflexion
nationale sur l’enseignement de l’informatique pour spécialistes, sur l’intérêt de présenter,
dès le début de ces formations, les systèmes informatiques d’aujourd’hui dans toute leur
complexité et leur diversité. Cette approche « globale » consiste, par exemple, à lier la
© Dunod – Toute reproduction non autorisée est un délit.

description de ce qu’est un disque magnétique au niveau matériel aux architectures de


stockage de « haut niveau », que sont le RAID, les NAS, les SAN et le stockage sur le cloud,
avec des questionnements généraux sur les atouts et les limites de ces solutions.

Le second constat, portant sur les cursus traditionnels, met au contraire en évidence :
(1) Le côté très cloisonné et très « bas niveau » des thèmes abordés en début de formation :
représentation des données, algèbre de Boole et circuits logiques, composants matériels
des ordinateurs, programmation assembleur, signaux et transmission des données, etc.
(2) L’absence de lien avec ce que pratiquent les étudiants, comme les réseaux sociaux, le
streaming de vidéos, les jeux en réseau, etc., et avec ce qui peut les motiver à se diriger
vers les métiers de l’informatique et du numérique, comme le développement web et
mobile, l’administration des machines et des réseaux, les systèmes intelligents et les
robots, etc.
XII Introduction aux systèmes informatiques

LES OBJECTIFS

Le fait de donner rapidement aux étudiants une vision réaliste des systèmes informatiques
permet d’accélerer la mise en contact avec le milieu professionnel, qu’il s’agisse de
la consultation de sites et de documents spécialisés ou d’échanges directs avec des
informaticiens. Il devient également plus aisé d’expliquer la finalité de certains enseignements
de début de cursus, souvent jugés rébarbatifs. Par exemple, programmer des scripts shell à
la syntaxe souvent déroutante ou ingurgiter, couche par couche, les concepts, protocoles et
technologies des réseaux, peuvent être mieux acceptés comme des ingrédients indispensables
aux tâches d’administration de systèmes complexes. À condition que cette complexité, dont
les étudiants ont rarement conscience à l’origine, leur soit très concrètement présentée.

Afin de conserver une taille raisonnable à un tel module de présentation globale des systèmes
informatiques, certains thèmes classiques se voient nécessairement attribuer une priorité
beaucoup plus faible que dans le passé. C’est le cas par exemple de la conception des
circuits logiques ou de la programmation en langage assembleur. Ces thèmes peuvent rester
simplement effleurés, comme c’est le cas dans cet ouvrage, ou faire l’objet d’enseignements
ultérieurs de spécialisation, si des besoins spécifiques existent dans un contexte donné.

Cette évolution des priorités permet d’introduire rapidement des thèmes aujourd’hui majeurs,
comme les architectures distribuées des systèmes informatiques ou les questions de sécurité
et de sûreté de ces systèmes.

Le nouveau Programme pédagogique national du DUT informatique contient un module de


premier semestre, nommé « Introduction aux systèmes informatiques », qui va dans ce sens,
en proposant le large éventail de thèmes suivant ([MES13]) :
– Codage de l’information : nombres et caractères. Arithmétique et traitements associés.
– Architecture générale d’un système informatique.
– Types et caractéristiques des systèmes d’exploitation.
– Utilisation d’applications clientes réseau : messagerie, transfert de fichiers, terminal
virtuel, répertoires partagés.
– Langage de commande : commandes de base, introduction à la programmation des scripts.
– Gestion des processus (création, destruction, suivi, etc.), des fichiers (types, droits, etc.) et
des utilisateurs (caractéristiques, création, suppression, etc.).
– Principes de l’installation et de la configuration d’un système.

Le présent ouvrage est une contribution à la présentation globale des systèmes informatiques
actuels, dès le début d’un cursus de formation, un peu plus systématique et ambitieuse que
celle décrite dans le programme précédent.

Cet enseignement doit bien entendu être prolongé par les modules d’approfondissement
classiques consacrés aux systèmes d’exploitation, aux réseaux, aux systèmes distribués, etc.,
qui permettent de passer d’une vision essentiellement conceptuelle et externe à une vision
technique et interne, indispensable aux futurs professionnels de l’informatique.
Avant-propos XIII

L’APPROCHE PÉDAGOGIQUE
Chaque partie de l’ouvrage est centrée sur une couche ou un regroupement de couches de
l’architecture de référence des systèmes informatiques, présentée dans le deuxième chapitre
introductif, à savoir les couches basses, la couche système/réseau et les couches hautes.
Chaque partie comprend un ensemble de chapitres avec des objectifs complémentaires. Un
ou plusieurs chapitres présentent les connaissances conceptuelles et de culture générale
permettant de comprendre la couche considérée. Un ou plusieurs chapitres sont destinés à
l’acquisition de compétences pratiques de base en liaison avec la couche considérée.
Il faut souligner que, dans cet enseignement introductif, la couche système/réseau et les
couches hautes sont considérées prioritairement du point de vue externe de l’utilisateur,
comme un ensemble de services à comprendre et à maîtriser dans leurs aspects essentiels.
À la fin de chaque chapitre, une série d’exercices corrigés, sur les aspects conceptuels et
pratiques, est proposée. L’ouvrage en propose pas moins de 110 au total. Beaucoup de ces
exercices ont été glanés sur le web et retravaillés. Que leurs auteurs originaux, souvent
impossibles à déterminer, soient ici remerciés collectivement.
Les enseignements d’introduction aux systèmes informatiques de toutes les formations
spécialisées en informatique, comme les premières années de DUT informatique, de licence
informatique, d’école d’ingénieurs en informatique, peuvent s’appuyer sur le contenu de cet
ouvrage, en l’élaguant au besoin.

LE PLAN DE L’OUVRAGE
Les chapitres introductifs
Le chapitre 1 définit les systèmes informatiques et en propose une première classification en
systèmes personnels, systèmes d’organisation et systèmes de contrôle et commande.
Le chapitre 2 décrit l’architecture des systèmes informatiques comme un ensemble de
couches et illustre cette architecture de référence à l’aide de plusieurs exemples concrets :
systèmes enfouis élémentaires, équipements mobiles sous Android, solutions de virtualisation
© Dunod – Toute reproduction non autorisée est un délit.

des systèmes.

La première partie : les couches basses


Le chapitre 3 présente les moyens de base de stockage des données, ce qui est souvent appelé
la « hiérarchie des mémoires », ainsi que les systèmes de stockage plus élaborés que l’on peut
trouver aujourd’hui : RAID, NAS, SAN, stockage sur le cloud.
Le chapitre 4 décrit les unités de traitement (CPU) et les systèmes de traitement plus
élaborés : processeurs multicœurs, clusters et grilles, systèmes redondants et à équilibrage de
charge. La présentation des unités de traitement aborde leur structure, leur fonctionnement,
et succinctement leur programmation (langage machine et d’assemblage), leur implantation
(circuits logiques et physiques) et les techniques d’amélioration des performances (vitesse
d’horloge, cache, pipeline, superscalaire).
XIV Introduction aux systèmes informatiques

Le chapitre 5 est consacré aux unités et systèmes de communication, ce qui recouvre les
entrées/sortie et les réseaux. Le chapitre commence par les différents types d’entrée/sortie et
d’unités ou contrôleurs associés. Puis, il donne les définitions générales sur les réseaux,
présente les modèles en couches OSI et TCP/IP, ansi que les protocoles et unités
matérielles de chaque couche. Il se termine par la présentation des systèmes complexes
de communication, ce qui comprend les réseaux domestiques, les réseaux d’entreprise, le
réseau Internet, les réseaux sans fils à stations de base, maillés et ad hoc et l’Internet des
objets.
Le chapitre 6 aborde d’un point de vue pratique la représentation de toutes les formes de
données en machine : représentation des nombres et des dates, codification des caractères,
numérisation des sons, images et vidéos. Sont aussi abordées les questions de détection et
correction des erreurs et d’identification des objets dans le cadre de l’Internet des objets.

La deuxième partie : la couche système/réseau


Le chapitre 7 présente les systèmes d’exploitation et leurs fonctions. La famille de systèmes
de type Unix est plus particulièrement décrite, avec son historique, ses caractéristiques et son
architecture. Sont aussi abordés les outils pour le développement des programmes.
Le chapitre 8 approfondit sur un plan conceptuel et pratique la gestion des activités :
processus, états des processus, entrées/sorties des processus, filtres, etc.
Le chapitre 9 approfondit de la même manière, la gestion des données persistantes : fichiers,
répertoires, arborescence standard, chemins d’accès, fonctions de recherche et remplacement,
expressions régulières, etc.
Le chapitre 10 fait de même pour ce qui concerne la gestion des communications sous toutes
leurs formes : entre processus d’une même machine, entre processus distribués sur le réseau,
entre l’homme et la machine (X Window).
Le chapitre 11 aborde la gestion de la sécurité des systèmes : notions d’utilisateur, de groupe,
de droit d’accès et concepts plus avancés (SUID, GUID, sticky bit, sudo, etc.).
Le chapitre 12 est dédié à la pratique de la programmation shell. Les principales notions du
langage bash sont présentées et quelques scripts complets illustrent son utilisation.
Le chapitre 13 décrit les étapes principales de l’installation d’un système de type Unix,
guidée par un programme d’installation : amorçage, définition des partitions, choix du ou
des systèmes de fichiers, installation des paquets, configuration du gestionnaire d’amorçage,
configuration initiale du système.

La troisième partie : les couches hautes


Le chapitre 14 introduit les applications réseau client/serveur sur Internet.
Les chapitres 15 à 21 décrivent chacun une classe d’applications réseau, au niveau des
concepts et des compétences pratiques de base :
– Chapitre 15 : Le transfert de fichiers, avec FTP.
– Chapitre 16 : Les connexions à distance, avec Telnet et SSH.
– Chapitre 17 : L’accès aux fichiers distants, avec NFS et SMB/Samba.
Avant-propos XV

– Chapitre 18 : Les annuaires avec NIS, DNS et LDAP.


– Chapitre 19 : La configuration automatique des systèmes, avec DHCP.
– Chapitre 20 : Les messageries, essentiellement le courrier électronique, avec SMTP, POP
et IMAP.
– Chapitre 21 : Le web, avec les URI, HTTP, HTML et les logiciels qui s’y rapportent.

Le chapitre 22 introduit les applications distribuées et les différentes formes d’infrastructures


qui les accueillent : intergiciels ou middlewares à appels distants (RPC, RMI), à messages
(JMS), à composants distribués (JEE), pour les services web (XML, acteurs et protocoles).

Les compléments
Les corrigés de tous les exercices et deux annexes, la table du code ASCII et un mémento des
cent commandes de base des systèmes de type Unix, terminent l’ouvrage.
© Dunod – Toute reproduction non autorisée est un délit.
Chapitre 1

Les systèmes informatiques

1.1 DÉFINITION ET CLASSIFICATION


Un système informatique est un ensemble de moyens informatiques et de télécommunications,
matériels et logiciels, ayant pour finalité de collecter, traiter, stocker, acheminer et présenter
des données.
Les concepts de système informatique et d’ordinateur ne doivent pas être confondus.
L’ordinateur n’est que l’un des composants, certes central, des systèmes informatiques. Il
en existe beaucoup d’autres, parmi lesquels on peut citer les matériels réseau, les capteurs
© Dunod – Toute reproduction non autorisée est un délit.

et actionneurs, les machines spécialisées (appliances), comme les guichets automatiques


bancaires ou les boîtiers de stockage en réseau, les robots, les smartphones, les cartes à puce
(smartcards), etc.
Un ordinateur est une machine de traitement automatique des données selon un programme
enregistré en mémoire. Il comporte un ou des processeurs, une mémoire et des périphériques
d’entrée, de sortie et de stockage. Les programmes sont nécessairement exprimés dans le
langage machine propre au processeur qui les exécute, en général suite à une traduction
depuis un langage de programmation plus pratique à utiliser. Le système d’exploitation est
le logiciel qui facilite et optimise l’utilisation du matériel ainsi que la mise en œuvre des
programmes. Tous ces éléments seront décrits en détail dans les chapitres qui suivent.
Il existe aujourd’hui une très grande diversité d’ordinateurs. Du plus petit, le microcontrôleur,
qui tient en totalité sur une puce électronique d’un centimètre carré, jusqu’au plus puissant,
2 1 • Les systèmes informatiques

le supercalculateur, dont certains comportent des centaines de milliers de processeurs afin de


traiter d’énormes volumes de données.
La figure 1.1 résume les relations entre processeur, ordinateur et système informatique.

Processeur(s) Autre
... composant ...
Ordinateur
Système informatique

F IGURE 1.1 Processeur, ordinateur et système informatique

Le présent ouvrage est une introduction aux systèmes informatiques, à leur architecture et
leurs composants, à leur configuration et leur utilisation. La suite de ce chapitre introductif
montre que les systèmes informatiques prennent de nos jours des formes extrêmement variées
selon le contexte dans lequel ils s’insèrent. On peut distinguer, en première approximation, les
systèmes informatiques personnels, les systèmes informatiques d’organisation et les systèmes
informatiques de contrôle et commande. Chacune de ces catégories principales est analysée
et éventuellement affinée dans les paragraphes qui suivent.

1.2 LES SYSTÈMES INFORMATIQUES PERSONNELS


Un système informatique personnel a pour but de rendre des services, utilitaires ou ludiques,
à son possesseur. Il peut comporter différents matériels, connectés de façon permanente ou
non, comme :
– des ordinateurs personnels, qui se déclinent en ordinateur de bureau (PC pour Personal
Computer), ordinateur portable, tablette, assistant personnel,
– des équipements périphériques (imprimante, scanner, etc.),
– des équipements de transmission de données (modem, switch, box Internet, etc.),
– des matériels plus spécialisés, comme les consoles de jeu ou les équipements de domotique
(habitat intelligent),
– des équipements terminaux de systèmes externes, comme les smartphones en téléphonie.

L’architecture des réseaux domestiques qui connectent les divers composants des systèmes
informatiques personnels sera étudiée ultérieurement au paragraphe 5.3.1 On peut souligner
dès à présent que les systèmes informatiques personnels sont le plus souvent connectés au
réseau Internet via la box que fournit le fournisseur d’accès Internet (FAI). Cette box est
également l’élément clé de la convergence informatique/téléphone/télévision.
Les systèmes informatiques personnels constituent bien entendu la partie la plus visible et la
mieux connue par le public non spécialiste des systèmes informatiques. Parmi les nombreux
services grand public qu’ils offrent, on peut citer :
1.3 Les systèmes informatiques d’organisation 3

– la navigation sur le web,


– les messageries et les réseaux sociaux,
– les jeux individuels ou en réseau,
– la bureautique, avec le calcul (par exemple, via un logiciel tableur), le traitement de texte,
la gestion des données personnelles, etc.,
– le multimédia, avec la retouche d’images, le traitement du son, le montage vidéo, la
réception et la diffusion de flux de vidéo ou de musique (streaming), etc.

1.3 LES SYSTÈMES INFORMATIQUES D’ORGANISATION


1.3.1 Les composants
Les systèmes informatiques d’organisation sont hébergés au sein des organisations de toute
nature que sont les entreprises, les associations, les administrations, les laboratoires de
recherche, etc. Ils comprennent une grande diversité de composants :
– tout d’abord des ordinateurs, comme des postes de travail, des serveurs d’applications, des
serveurs de données, des grappes de machines (cluster), des supercalculateurs, etc.,
– ensuite, beaucoup d’autres équipements de traitement et de transmission de données,
comme des capteurs et actionneurs, des concentrateurs, commutateurs et routeurs, des
robots, des machines dédiées, etc.,
– enfin des réseaux, soit locaux à l’échelle d’un bâtiment – LAN pour Local Area Network –,
soit métropolitains à l’échelle d’une ville – MAN pour Metropolitan Area Network –, soit
étendus jusqu’à l’échelle mondiale – WAN pour Wide Area Network – à l’image d’Internet.

1.3.2 Le système d’information englobant


Le système informatique constitue l’infrastructure technique du système d’information
de l’organisation. Ce qu’on appelle système d’information de l’organisation comporte,
outre le système informatique, un ensemble organisé d’autres ressources, humaines,
organisationnelles et immatérielles, comme des méthodes, des règles, des procédures,
© Dunod – Toute reproduction non autorisée est un délit.

etc. Le système d’information est destiné à faciliter le fonctionnement de l’organisation en


lui fournissant les informations utiles pour atteindre ses objectifs.
Dans ces définitions, les termes donnée, quand on parle du système informatique, et
information, quand on parle du système d’information, ne sont pas équivalentes.
Une donnée est la description d’un élément ponctuel de la réalité, comme une mesure ou
une observation. Par exemple, le chiffre des ventes d’un produit à une certaine date est une
donnée. Une donnée est représentée dans le système informatique sous une forme binaire,
c’est-à-dire à deux états, notés 0 et 1 par convention. Cette forme binaire peut correspondre
à une certaine représentation des nombres, adaptée au calcul automatique, à une certaine
codification des caractères, ou à une certaine numérisation d’un objet (son, image, etc.).
Une information est l’interprétation humaine d’une donnée ou d’un ensemble de données
qui lui donne du sens. Par exemple, la forme de la courbe annuelle des ventes d’un produit
4 1 • Les systèmes informatiques

constitue une information significative pour un responsable commercial. L’interprétation


humaine des informations peut conduire à des connaissances de plus haut niveau qui peuvent
guider les actions. Par exemple, le fait que certains produits soient saisonniers est une
connaissance qui va influencer la gestion des ventes.
Aujourd’hui, seule une faible partie des connaissances est représentée explicitement dans les
systèmes informatiques. L’essentiel des connaissances, dites connaissances tacites, se situe
dans les têtes des personnes. On peut dire schématiquement que les données sont la matière
première du système informatique alors que les informations et les connaissances demeurent
majoritairement la matière première de la composante humaine du système d’information. La
figure 1.2 ci-après résume les relations entre tous ces concepts.

(niveau des informations et des connaissances)

Système
informatique
(niveau des données)

Ordinateurs

Ressources matérielles,
logicielles, données

Ressources humaines, organisationnelles,


immatérielles (méthodes, règles, etc.)

F IGURE 1.2 Les niveaux de systèmes et leurs ressources

1.3.3 Les systèmes distribués


Les systèmes informatiques d’organisation sont le plus souvent aujourd’hui des systèmes
informatiques distribués (répartis), c’est-à-dire constitués par un assemblage d’éléments
matériels et logiciels qui coopèrent pour réaliser un objectif commun en utilisant un réseau
comme moyen d’échange des données. Ce réseau peut être un réseau local ou un réseau
étendu, le plus souvent Internet.
C’est le cas par exemple des systèmes de contrôle du trafic aérien, des systèmes bancaires,
des systèmes pair à pair (P2P), des grilles de calcul, du web, etc.

1.3.4 Le cloud
L’informatique « en nuage » (cloud, en anglais) est une déclinaison récente des systèmes
distribués. Il s’agit de l’exploitation de serveurs distants par l’intermédiaire d’un réseau, le
plus souvent Internet. Ces serveurs sont loués à la demande à des fournisseurs externes selon
l’utilisation (pay per use) ou forfaitairement. Par leur intermédiaire, trois principaux types de
services peuvent être fournis, schématisés par la figure 1.3.
1.3 Les systèmes informatiques d’organisation 5

Utilisateurs Consommer
SAAS

Développeurs Construire
PAAS

Architectes Héberger
IAAS

F IGURE 1.3 IAAS, PAAS et SAAS

a) Infrastructure en tant que service


Le premier type est appelé « infrastructure en tant que service » (IAAS pour Infrastructure
As A Service). Le fournisseur loue un parc informatique virtualisé créé et géré par une couche
logicielle de virtualisation sur les serveurs de son centre de ressources. Ces techniques de
virtualisation sont détaillées au paragraphe 2.3.3
Les architectes du système client définissent l’infrastructure virtuelle sur laquelle sont
hébergés à distance tous les composants logiciels souhaités. L’organisation économise ainsi
l’achat de la couche matérielle de tout ou partie de son système informatique.

b) Plateforme en tant que service


Le deuxième type est appelé « plateforme en tant que service » (PAAS pour Platform
As A Service). Le fournisseur loue une plateforme d’exécution complète des applications,
comprenant un ensemble de machines virtuelles en réseau avec leurs systèmes d’exploitation
et des outils d’infrastructure pour la distribution des applications, le stockage, la sauvegarde,
l’archivage, la surveillance, la sécurité, etc.
Les développeurs du système client le construisent sur cette plateforme. Comme au niveau
© Dunod – Toute reproduction non autorisée est un délit.

IAAS, un tel service offre une grande « élasticité », c’est-à-dire une capacité d’adaptation
immédiate aux besoins (croissance ou diminution de la charge par exemple) et une
mutualisation des coûts. L’utilisateur économise l’achat d’une infrastructure matérielle
et logicielle propre pour tout ou partie de son système informatique.

c) Logiciel en tant que service


Le troisième type est appelé « logiciel en tant que service » (SAAS pour Software As A
Service). Le fournisseur loue des applications accessibles via un simple navigateur web. Par
exemple, les Google Apps for Work comprennent des services professionnels de messagerie,
de visioconférence, de stockage en ligne et d’autres applications d’entreprise.
Toutes les couches matérielles et logicielles sous-jacentes aux applications sont cachées à
l’utilisateur du service et mises à disposition dans le cadre de la consommation du logiciel.
6 1 • Les systèmes informatiques

Le développement conjoint des applications web et du SAAS ouvre la perspective de


systèmes d’information accessibles 7 jours sur 7, 24 heures sur 24, en tout lieu et sur tout
appareil connecté (ordinateur, tablette, smartphone, téléviseur connecté, etc.). On parle de
solution Any Time, Any Where, Any Device, Any Content.
Dès aujourd’hui, le stockage de données sur le cloud et les logiciels sur le cloud sont de
plus en plus utilisés, même par le grand public dans le contexte des systèmes informatiques
personnels.

1.4 LES SYSTÈMES INFORMATIQUES DE CONTRÔLE


ET COMMANDE
1.4.1 Les composants
Un système informatique de contrôle et commande reçoit des données relatives à l’état d’un
procédé extérieur via des capteurs, traite ces données et, en fonction du résultat, agit sur ce
procédé extérieur via des actionneurs, afin de le maintenir dans l’état souhaité.
Comme le montre la figure 1.4, des opérateurs humains peuvent être amenés à fournir des
consignes et à effectuer un suivi, par exemple via des visualisations de l’état du procédé.

Procédé
Mesures Commandes

Capteur Actionneur

Acquisition Analyse et Restitution


données traitement données
données

Consignes Visualisations
Opérateur

F IGURE 1.4 Système de contrôle et commande

Dans le cas de procédés complexes, incluant de multiples entités physiques, l’opérateur


fournit des objectifs à atteindre et suit le comportement global du procédé. Cette fonction
de supervision constitue une couche de niveau supérieur par rapport à celle de conduite des
entités du procédé (cf. figure 1.5).

1.4.2 Les systèmes temps réel


Quand les contraintes de temps deviennent primordiales, on parle de système informatique
temps réel. On peut en distinguer deux sous catégories :
– Un système temps réel strict doit respecter les contraintes temporelles même dans le
pire des cas. Un résultat logiquement correct mais fourni hors délai devient ipso facto
un résultat incorrect. Une large partie des systèmes de supervision industrielle (centrales
1.4 Les systèmes informatiques de contrôle et commande 7

Opérateurs

Supervision

Commande-contrôle

Procédé complexe

F IGURE 1.5 Système de contrôle et commande

nucléaires, usines chimiques, etc.), des systèmes de supervision médicale, des systèmes
d’assistance au pilotage ou à la conduite entrent dans cette catégorie.
– Un système temps réel souple (soft) peut exceptionnellement ne pas respecter les
contraintes de temps. C’est le cas par exemple de la visioconférence ou des jeux en réseau,
où un dépassement occasionnel des contraintes nuit simplement à l’agrément d’utilisation.

Exemple

Dans une voiture, le correcteur électronique de trajectoire (ESP pour Electronic Stability
Program) est composé de capteurs de vitesse, de braquage, d’accélération latérale et
d’actionneurs sur les freins et sur le régime moteur. Le calculateur contrôle les signaux
transmis par les capteurs et vérifie 25 fois par seconde si les mouvements de braquage du
volant correspondent bien à la direction suivie par la voiture. Dans le cas contraire, l’ESP
réagit en quelques millisecondes, sans intervention du conducteur. Il utilise essentiellement
le système de freinage pour ramener la voiture sur sa trajectoire Par exemple, en cas de
sous-virage, quand le train avant dérive et que la voiture a tendance à aller tout droit au lieu
de suivre la courbe voulue, l’ESP freine la roue arrière intérieure. En cas de survirage, quand
le train arrière dérive davantage que le train avant avec un risque de tête-à-queue, l’ESP
© Dunod – Toute reproduction non autorisée est un délit.

freine la roue avant extérieure.

1.4.3 Les systèmes embarqués ou enfouis

Quand le système informatique est partie intégrante d’un système plus large qu’il commande
et contrôle, on parle de système informatique embarqué ou enfoui. On en trouve par exemple
dans les automobiles, les avions et certains équipements médicaux, électroménagers ou de
loisir (caméras, jouets, etc.).

Outre les contraintes possibles de temps, ces systèmes informatiques subissent le plus souvent
de fortes contraintes de poids, volume, consommation énergétique, autonomie (alimentation
par batterie), consommation mémoire, etc.
8 1 • Les systèmes informatiques

1.4.4 Les robots

Les robots constituent une famille particulière de systèmes, alliant mécanique, électronique
et informatique (« mécatronique »), qui visent à remplacer les êtres humains pour des tâches
répétitives, pénibles, dangereuses ou même impossibles à réaliser par eux.

Un robot possède tout ou partie des capacités suivantes :


– capacité d’acquisition de données via des capteurs, « proprioceptifs » quand ils mesurent
l’état du robot lui-même (sa position, sa vitesse, sa charge, etc.) et « extéroceptifs » quand
ils renseignent sur l’état de son environnement (température, lumière, chaleur, etc.),
– capacité d’interprétation des données acquises permettant de produire des connaissances,
– capacité de décision qui, partant des données ou des connaissances, détermine et planifie
des actions ; ces actions sont destinées à réaliser des objectifs fournis le plus souvent par un
être humain, mais qui peuvent aussi être déterminés par le robot lui-même, éventuellement
en réaction à des événements,
– capacité d’exécution automatique d’actions dans le monde physique (déplacements,
manipulations d’objets, etc.) à travers des actionneurs (ou effecteurs), comme des roues,
des bras, des jambes, des pinces, etc.
– capacité de communication et d’interaction avec des opérateurs ou des utilisateurs
humains, avec d’autres robots ou avec des ressources via un réseau, comme Internet,
– capacité transversale d’apprentissage, qui permet au robot de modifier son fonctionnement
à partir de son expérience acquise.

Il existe une très grande variété de robots, qui se distinguent par leur degré d’autonomie
plus ou moins grand vis-à-vis des opérateurs, leur degré d’adaptabilité aux évolutions de
leur environnement, leur capacité d’apprentissage et de créativité, c’est-à-dire d’invention de
comportements ou d’objectifs non prévus par leurs concepteurs.

Ils peuvent également être classés en grandes catégories fonctionnelles :


– robots industriels, comme dans les chaînes de montage de voitures,
– robots explorateurs, pour la conquête spatiale, l’exploration de décombres, l’exploration
sous-marine, le déminage, etc.,
– robots de service, pour l’agriculture (traite, cueillette, etc.), les transports, les tâches
domestiques (robot-aspirateur, robot-tondeuse, etc.), l’aide aux personnes âgées ou
handicapées, l’assistance médicale et chirurgicale, etc.
– robots ludiques, comme les robots de compagnie,
– robots humanoïdes, dont l’apparence rappelle celle d’un corps humain, etc.

La robotique suscite depuis l’origine énormément d’interrogations et de controverses liées


aux questions de sécurité, de conséquences sociales, sur l’emploi en particulier, et plus
fondamentalement de cohabitation et de frontière entre robots et humains [CER14].
1.4 Les systèmes informatiques de contrôle et commande 9

1.4.5 L’Internet des objets


Les systèmes informatiques de contrôle et commande constituent aujourd’hui en nombre le
parc le plus important, avec approximativement 90 % du total des systèmes informatiques.
Cette prédominance provient du nombre énorme de systèmes informatiques enfouis dans les
objets de la vie quotidienne.
Tous ces objets, rendus « intelligents » par le système informatique qu’ils embarquent, seront
amenés de plus en plus à communiquer via Internet, à la fois entre eux et avec des personnes et
des systèmes informatiques extérieurs. Il s’agit de ce qu’on appelle couramment « l’Internet
des objets » (ou « Internet des choses »).
C’est le cas, par exemple, de la voiture intelligente (smart car) capable de communiquer avec
les autres véhicules proches, la route, les panneaux de signalisation, des bases de données sur
la circulation, la cartographie, etc.
« L’Internet à venir sera de plus en plus un Internet entre machines, entre capteurs, entre
robots, qui généreront des gisements de données sans limites (...) Il est difficile d’imaginer
aujourd’hui les transformations radicales que vont subir nos environnements domestiques,
urbains, sociaux, laborieux, etc. (smart car, smart home, smart city, smart grid, smart body,
etc.). » [GM13]
Ce concept d’Internet des objets est présenté plus en détail au paragraphe 5.2.4.
© Dunod – Toute reproduction non autorisée est un délit.
10 1 • Les systèmes informatiques

EXERCICES

Exercice 1.1. Donnée, information, connaissance.


a) Rappeler la différence entre donnée, information et connaissance.
b) Donner un exemple de représentation explicite de connaissance en machine.

Exercice 1.2. Système informatique temps réel.


Quelle est la meilleure caractérisation d’un système temps réel parmi les deux suivantes ?
(1) Un système rapide.
(2) Un système prévisible.

Exercice 1.3. Cloud privé.


Comment définir le concept de « cloud privé » ?

Exercice 1.4. Caractérisation des services sur le cloud.


Dans le tableau suivant, indiquer par des croix les ressources (lignes du tableau) qui sont
fournies dans les différents types de services (colonnes du tableau).

IAAS PAAS SAAS


Données
Applications
Systèmes
Machines virtuelles
Serveurs
Stockage
Réseau

Exercice 1.5. Internet des objets et « ville intelligente ».


Derrière le concept de « ville intelligente » (smart city), on trouve la technologie des réseaux
sans fil de capteurs intelligents, au service d’une meilleure gestion de la ville.
Donner des exemples d’application de cette technologie, où les capteurs intelligents sont
intégrés à des objets urbains.
Chapitre 2

L’architecture d’un système informatique

2.1 LES ARCHITECTURES EN COUCHES


Une architecture de système se décrit traditionnellement comme un ensemble de couches.
Les couches basses d’un système sont proches du matériel alors que les couches hautes sont
proches des utilisateurs. Idéalement, comme le montre la figure 2.1, chaque couche utilise
uniquement les services offerts par la couche immédiatement inférieure et offre ses services
à la couche immédiatement supérieure.

Utilisateurs

Couche n (la plus haute)


© Dunod – Toute reproduction non autorisée est un délit.

...

Couche i+1
Utilise les Ore ses
services de services à
Couche i

...

Couche 1 (la plus basse)

Matériel
F IGURE 2.1 Les architectures en couches
12 2 • L’architecture d’un système informatique

Dans une architecture logicielle en couches proprement définie, chaque service comporte
une interface et une implantation, comme le montre la figure 2.2. L’interface permet l’accès
aux fonctionnalités sans se préoccuper de la manière dont elles sont implantées. Il peut s’agir
d’une interface de manipulation par les utilisateurs ou d’une interface de programmation (API
pour Application Programming Interface) pour les accès aux services par les programmes de
la couche supérieure. À fonctionnalités constantes, on peut donc modifier l’implantation du
service sans avoir à modifier ses utilisations.

Utilisations du service

Interface du service

Service
Implantation du
service

F IGURE 2.2 Interface et implantation d’un service

2.2 L’ARCHITECTURE DE RÉFÉRENCE


Ce paragraphe décrit une architecture de référence en couches des systèmes informatiques,
synthétisée par la figure 2.3. La description détaillée des divers composants de cette
architecture sera fournie tout au long de cet ouvrage.

5. Couche des
applications Couches
hautes
4. Couche
distribution

3. Couche 3.2. Services additionnels Couche


système/réseau 3.1. Noyau Système/réseau
2.2. Couche du langage machine
2. Couche du langage
machine 2.1. Couche du microcode Couches
basses
1. Couche du matériel

F IGURE 2.3 L’architecture de référence des systèmes informatiques


2.2 L’architecture de référence 13

2.2.1 Les couches basses


La couche la plus basse, notée couche 1 dans la figure 2.3, est celle du matériel. Elle comprend
les processeurs, les mémoires, les équipements d’entrée/sortie, les équipements réseau, etc.
À ce niveau, les données en forme binaire sont traitées, stockées et transférées.
Au-dessus du matériel, la couche logicielle la plus basse est celle du langage machine
(couche 2). C’est-à-dire du langage en forme binaire, « directement » exécutable dans les
circuits électroniques du processeur.
Le mot directement est mis entre guillemets car ce n’est pas toujours réellement le cas.
C’est vrai uniquement dans le cas des processeurs possédant une unité de commande
câblée (matérielle). L’unité de commande d’un processeur recherche successivement chaque
instruction qu’il doit exécuter, l’analyse et la met en œuvre en donnant une suite d’ordres aux
autres composants de la machine (cf. paragraphe 4.1.1). Dans une unité de commande câblée,
ce processus de mise en œuvre est figé dans les circuits électroniques. Dans le cas d’une
unité de commande microprogrammée (logicielle), à chaque instruction du langage machine
correspond un ensemble de micro-instructions qui décrivent son processus de mise en œuvre.
Ce microprogramme ou microcode, stocké en mémoire en lecture seulement (ROM pour
Read Only Memory), est exécuté pour mettre en œuvre chaque instruction. Cette approche,
fréquente aujourd’hui, donne des possibilités d’évolution des instructions du processeur par
simple modification de leur microcode.
L’architecture de référence de la figure 2.3 fait donc apparaître une éventuelle couche du
microcode (couche 2.1) sous la couche du langage machine proprement dite (couche 2.2).
Dans la suite de l’ouvrage, les deux premières couches, 1 et 2, sont parfois regroupées sous
le vocable « couches basses ».

2.2.2 La couche système/réseau


La couche 3 correspond pour l’essentiel au système d’exploitation, c’est-à-dire au logiciel
intermédiaire entre le matériel et les applications qui l’utilisent. Son rôle est triple :
– Gérer les ressources matérielles et logicielles : mémoire, processeurs, programmes,
données, communications locales et via les réseaux. Cette gestion comprend l’allocation,
le partage et la protection des ressources.
© Dunod – Toute reproduction non autorisée est un délit.

– Fournir une interface de manipulation de la machine et de ses ressources qui soit la plus
simple possible pour ses utilisateurs.
– Fournir une interface de programmation (API) plus facile d’utilisation que le langage
machine et qui dissimule les détails de l’utilisation des ressources.

Toutes ces notions seront développées dans le chapitre 7, consacré aux systèmes d’exploitation.
On distingue souvent le noyau du système d’exploitation (couche 3.1) des services système
additionnels (couche 3.2). Ces derniers comprennent en particulier :
– les compilateurs, qui traduisent les langages évolués (C, C++, etc.) en langage machine,
– les environnements de bureau, pour faciliter l’interaction homme-machine (IHM),
– les langages de commande (shells), pour programmer des scripts qui automatisent les
tâches d’administration récurrentes,
14 2 • L’architecture d’un système informatique

– les bibliothèques, qui facilitent l’utilisation des services du noyau, etc.

2.2.3 La couche de distribution des applications


La couche 4 est propre aux systèmes distribués (répartis). On l’appelle aussi « couche du
milieu » ou couche des middlewares (intergiciels) car elle se situe entre le système/réseau et
les applications réparties.
On peut la voir comme une sorte de « système d’exploitation » de la « supermachine »
constituée par le système distribué. Elle a quatre fonctions principales :
– fournir une interface de programmation (API) de « haut niveau » aux applications
distribuées, plus facile à utiliser et plus spécialisée que les API de « bas niveau » de la
couche système/réseau,
– masquer l’hétérogénéité des composants (systèmes d’exploitation, matériels, réseaux),
– rendre la répartition des traitements et des données invisible (transparente),
– fournir des services d’usage courant pour construire les applications distribuées.

2.2.4 La couche des applications


Enfin la couche 5 est la couche des applications. On peut distinguer au sein des applications :
– les applications distribuées, qui exploitent toutes les couches inférieures (4 à 1),
– les applications locales, qui s’appuient directement sur la couche système/réseau et les
couches inférieures (3 à 1).

Dans la suite de l’ouvrage, les deux dernières couches, 4 et 5, sont parfois regroupées sous le
vocable « couches hautes ».

2.3 DES EXEMPLES D’ARCHITECTURES CONCRÈTES


Tous les systèmes informatiques n’implantent pas nécessairement l’ensemble des couches
de l’architecture de référence. A contrario, une subdivision en couches logicielles plus
spécifiques est parfois utile à la description de certains systèmes informatiques.
Les paragraphes qui suivent donnent quelques exemples d’architectures concrètes.

2.3.1 Les systèmes enfouis élémentaires


On trouve ce type de système, par exemple, dans tous les appareils dotés d’une interface
digitale, comme les caméras, les montres digitales, les lave-vaisselle, etc. Son architecture se
réduit à trois couches, comme illustré par la figure 2.4.
Un système enfoui élémentaire utilise un microprocesseur (processeur sur une puce) ou
un microcontrôleur (ordinateur sur une puce). Un unique programme en langage machine,
souvent appelé firmware, est stocké en mémoire morte (ROM). Le système d’exploitation
n’est pas utile, car tout le comportement requis, assez simple, peut être programmé dans le
firmware.
2.3 Des exemples d’architectures concrètes 15

Firmware
Langage machine
Microcontrôleur

F IGURE 2.4 L’architecture d’un système enfoui élémentaire

2.3.2 Les équipements mobiles sous Android


Android est un système d’exploitation libre pour smartphones et tablettes, développé
actuellement par Google. Il a pour objectifs de faciliter :
– l’exploitation des réseaux de communication : téléphonie 2G, 3G et 4G, Bluetooth pour
les communications très courtes distances, Wi-Fi pour les réseaux locaux,
– la manipulation de médias : vidéos, sons, images,
– l’exploitation des composants matériels : capteur de mouvement, caméra, récepteur GPS,
écran tactile, etc.,
– le stockage de données en base de données : carnet de contacts, etc.,
– le rendu d’images en 2D ou 3D en utilisant un processeur graphique,
– l’affichage de pages web,
– l’envoi de messages SMS,
– l’exécution d’applications en multitâche, c’est-à-dire en simultanéité apparente, etc.

L’architecture d’Android comporte un empilement spécifique de couches logicielles


au-dessus des couches basses du smartphone ou de la tablette qu’illustre la figure 2.5.

Applications
Natives (téléphone, contacts, navigateur), tierces, spéciques

Framework applicatif
Gestion des fenêtres, des activités, des ressources, etc. Couches
© Dunod – Toute reproduction non autorisée est un délit.

Interface de programmation (API) hautes


Bibliothèques C, C++ ART (Android RunTime)
Graphisme, base de données, Machine virtuelle Java,
médias, web, etc. bibliothèques Java de base

Noyau Linux
Gestion de la mémoire, des processus, des chiers, Couche
de l'alimentation, des matériels (écran, clavier, caméra, système/réseau
accéléromètre, GPS, etc.), des communications, etc.

Couches basses

F IGURE 2.5 L’architecture d’Android


16 2 • L’architecture d’un système informatique

a) La couche système/réseau
Le noyau du système d’exploitation Android est un noyau Linux modifié. Il fournit les
services classiques comme la gestion des processus, la gestion de la mémoire, la gestion du
matériel (mémoire flash, caméra, son, alimentation, etc.) et la gestion des communications.
Ce noyau Linux n’est pas manipulable directement par les utilisateurs. Cependant, avec des
applications comme Android Terminal Emulator, il est possible d’utiliser les commandes de
base du système Linux dans un pseudo-terminal.

b) Les couches hautes


Comme le montre la figure 2.5, les couches hautes s’organisent en trois sous-couches et quatre
composants.

® Les bibliothèques C, C++


Les bibliothèques C, C++ offrent des services de base, comme par exemple la manipulation
de différents types de données. On y trouve en particulier : le moteur de base de données
SQLite, le moteur de rendu de pages web WebKit, les codecs de l’Android Media Framework
pour enregistrer et restituer différents médias, la libc (bibliothèque C standard), Open GL ES
(Open Graphics Library for Embedded System) pour afficher des contenus 3D, Open SSL
pour la sécurité, le Surface Manager pour l’affichage des fenêtres, etc.

® L’Android runtime
L’Android RunTime (ART) comprend une machine virtuelle Java (ART JVM successeur de
Dalvik) pour exécuter les applications Java, et les bibliothèques Java de base(Core Java
Libraries) pour les développer.

® Le framework applicatif
Le framework applicatif procure des services de haut niveau aux applications sous la forme
de classes Java : Activity Manager (cycle de vie des applications), Telephony Manager,
Location Manager (GPS), Resource Manager, Content Providers (partage de données entre
applications), etc. Ces services exploitent les bibliothèques C, C++ de la couche inférieure.

® Les applications
En complément des applications de base préinstallées (téléphone, SMS, navigateur
web, gestionnaire de contacts, etc.), les utilisateurs peuvent télécharger ou développer,
principalement en Java, toutes les applications qu’ils souhaitent.

2.3.3 Les solutions de virtualisation


Les outils de virtualisation rencontrent une popularité croissante, autant dans le cadre des
systèmes informatiques internes aux organisations que dans le cadre du cloud. Il en existe
différents types qui visent tous à faire fonctionner plusieurs machines virtuelles avec leurs
propres systèmes d’exploitation (OS) sur une machine hôte.
2.3 Des exemples d’architectures concrètes 17

Une première architecture possible utilise un logiciel d’émulation qui s’exécute sur le système
d’exploitation de la machine hôte. Cette application simule le processeur, la mémoire et le
stockage de chaque machine virtuelle. Une de ces applications, parmi les plus connues, est
Oracle VirtualBox. Cette architecture, que montre la figure 2.6, comporte un empilement
de six couches, dont deux couches de systèmes d’exploitation complets. La lourdeur qui en
résulte pénalise les performances des machines virtuelles.

Machines virtuelles

Applications
Logiciel
de OS invité ...
contrôle Couches
des Drivers hautes
machines
virtuelles Logiciel d'émulation
Couche
OS hôte
système
Couches basses

F IGURE 2.6 L’architecture de virtualisation avec émulateur

Une autre architecture possible consiste à installer un logiciel spécialisé, dénommé


hyperviseur, directement sur les couches basses. Il s’agit d’un noyau système très simplifié
et optimisé pour faciliter les accès des OS invités à l’architecture matérielle sous-jacente.
Les hyperviseurs les plus connus sont Xen, KVM, VMWare vSphere, etc. Les systèmes
d’exploitation invités peuvent ou non être adaptés à la virtualisation. Symétriquement, les
processeurs de la couche matérielle peuvent ou non être adaptés à la virtualisation.
Comme le montre la figure 2.7, cette seconde architecture ne comporte plus que cinq couches,
dont un seul système d’exploitation complet. Les quatre couches inférieures peuvent être
optimisées. Ce type de solution est plus efficace mais aussi plus complexe à mettre en œuvre.
© Dunod – Toute reproduction non autorisée est un délit.

Machines virtuelles

Logiciel de Couches hautes


contrôle Applications

OS invité OS invité ...


Couche
Drivers Drivers système

Hyperviseur

Couches basses

F IGURE 2.7 L’architecture de virtualisation avec hyperviseur


18 2 • L’architecture d’un système informatique

EXERCICES

Exercice 2.1. Cinq couches.


Comparer la description suivante d’un ordinateur en cinq couches avec l’architecture de
référence des systèmes informatiques du paragraphe 2.2.

Processes

Operating system

Assembler

Firmware

Hardware

Exercice 2.2. Offre de services.


a) Par quel(s) moyen(s) un logiciel peut-il offrir des services à d’autres logiciels ?
b) Par quel(s) moyen(s) un logiciel peut-il offrir ses services à ses utilisateurs humains ?
c) Par quel(s) moyen(s), un système d’exploitation de type Unix offre-t-il ses services ?

Exercice 2.3. Application distribuée.


a) Dans le schéma suivant, comment est représentée l’application distribuée ?
b) Quelle est la fonction première de la couche middleware ?

Elément 1 Elément 2 Elément n


Middleware Middleware Middleware
Système/réseau Système/réseau Système/réseau
Matériel Matériel Matériel

Réseau physique

Exercice 2.4. Avantages de la virtualisation.


a) À quoi peut servir la virtualisation sur un poste de travail personnel ?
b) Quels sont les avantages de virtualiser n serveurs sur une même machine physique ?

Exercice 2.5. Machine virtuelle.


Que recouvrent les expressions « machine virtuelle concrète » et « machine virtuelle
abstraite » ?
PARTIE 1

Les couches basses

Cette partie se recentre sur les ordinateurs, qui sont au cœur des systèmes informatiques et
dont ils constituent l’élément le plus complexe. Il est important d’en comprendre les principes
essentiels.
L’organisation logique d’un ordinateur a été définie par John Von Neumann dès la naissance
de l’informatique en 1946. Cette organisation se résume en trois points.
(1) Un ordinateur comprend cinq composants logiques que décrivent la figure ci-après :
– la mémoire, qui stocke les instructions, les données, les résultats intermédiaires et
finaux des programmes,
– l’unité arithmétique et logique, qui effectue les calculs,
– l’unité de commande, qui recherche, analyse et met en œuvre les instructions via des
ordres (microcommandes) envoyés aux autres composants,
– les unités d’entrée, qui permettent d’introduire en mémoire les programmes et les
données,
– les unités de sortie, qui permettent de communiquer les résultats obtenus.

(2) Un ordinateur exploite un programme enregistré en mémoire. Comme le programme n’est


pas figé dans les circuits de la machine, il est possible d’en changer à volonté : on parle
de « machine universelle de traitement des données ».
(3) Les instructions du programme sont exécutées en séquence, c’est-à-dire les unes après
les autres dans l’ordre de leur rangement en mémoire, sauf indication contraire à l’aide
d’une instruction de branchement (saut, rupture de séquence), qui dirige l’exécution vers
une autre instruction du programme que la suivante. Ces sauts dans les programmes
permettent de décrire des traitements conditionnels et des traitements répétitifs (itératifs)
en plus des traitements séquentiels et donc tous les algorithmes possibles.
20 Partie 1. Les couches basses

instructions
Unité de
ordres commande
Mémoire
données
Unité arithmétique
résultats
et logique

instructions ordres
& données résultats Unité centrale
Unités Unités (processeur)
d'entrée de sortie

Les composants logiques d’un ordinateur

Ces principes très simples n’ont pu être concrétisés à grande échelle qu’au milieu des années
1960, avec l’arrivée des premiers circuits électroniques intégrés ou « puces » électroniques.
Les chapitres qui suivent détaillent les principaux composants matériels des ordinateurs
actuels, fidèles dans leurs grandes lignes à cette « architecture Von Neumann ».
Chapitre 3

Les unités et systèmes de stockage

3.1 LES UNITÉS DE STOCKAGE


3.1.1 La hiérarchie des mémoires
Les systèmes informatiques, et les ordinateurs en particulier, comportent actuellement
plusieurs mécanismes de stockage de données ou mémoires. Ces mécanismes se différencient
par :
– leur coût,
– leur vitesse, c’est-à-dire le temps moyen d’accès aux données, et leur débit, c’est-à-dire le
nombre de données lues ou écrites par seconde,
© Dunod – Toute reproduction non autorisée est un délit.

– leur mode d’accès aux données, c’est-à-dire dans l’ordre de leur rangement pour l’accès
séquentiel ou via une adresse pour l’accès direct,
– leur durabilité, c’est-à-dire leur caractère persistant ou volatil. Les mémoires vives,
volatiles, perdent leur contenu quand le système informatique est privé d’alimentation
électrique suite à un arrêt ou une panne. Les mémoires persistantes, non volatiles,
préservent au contraire leur contenu même en l’absence d’alimentation électrique.

Avec les technologies actuelles, plus une mémoire est efficace, en termes de vitesse d’accès
et de débit, plus elle est chère, ce qui tend à limiter sa capacité. Les systèmes informatiques
exploitent en conséquence une « hiérarchie des mémoires » allant de la mémoire la plus
efficace, la plus chère et de plus faible capacité à la mémoire la moins efficace, la moins chère
et de plus grande capacité. Les capacités s’expriment en kilo-octet (210 = 1 024 ≈ 1 000),
mégaoctet (220 ≈ 1 000 000), gigaoctet (230 ≈ 1 000 000 000), téraoctet (240 ), etc.
22 Partie 1. Les couches basses

La hiérarchie actuelle des mémoires comprend dans cet ordre :


– les registres (mémoires les plus petites, les plus efficaces et les plus chères),
– les mémoires cache,
– la mémoire centrale,
– les SSD (Solid-State Drive),
– les disques magnétiques,
– les supports de sauvegarde et d’archivage (mémoire les plus grandes, les moins efficaces
et les moins chères).

Les trois premiers types sont volatils alors que les trois suivants sont persistants. L’accès
direct aux données est possible pour tous, sauf pour les supports de sauvegarde et d’archivage
du type cassette ou bande magnétique, qui sont exclusivement à accès séquentiel. Toutes ces
mémoires sont en lecture/écriture, contrairement aux mémoires mortes en lecture seulement
(ROM pour Read-Only Memory) qui constituent une catégorie un peu à part, étudiée au
paragraphe 3.1.8.

3.1.2 Les registres


Un registre est un emplacement de mémoire, interne à un processeur, qui sert en particulier
au stockage des opérandes et résultats intermédiaires lors des calculs. Il s’agit de l’élément
de mémoire le plus rapide.
La capacité d’un registre de données correspond au mot mémoire du processeur, c’est-à-dire
à l’unité de donnée de base qu’il manipule. La taille du mot s’exprime en nombre de chiffres
binaires (bits) ou en octets (groupes de 8 bits). Les processeurs peu puissants ont des mots de
petite taille (processeurs 8 bits par exemple) alors que les processeurs puissants ont des mots
de grande taille (processeurs 64 bits par exemple).
Selon les architectures des processeurs, il peut exister un nombre plus ou moins grand de
registres généraux interchangeables et de registres spécialisés dont les principaux seront
présentés aux paragraphes 3.1.3 pour ceux liés à la mémoire centrale et 4.1.1 pour ceux liés
à l’unité de contrôle.
Les registres généraux sont accessibles via les instructions du langage machine. Par exemple,
on peut demander le chargement d’un registre depuis la mémoire centrale, le rangement d’un
registre en mémoire centrale, la réalisation d’un calcul utilisant un ou plusieurs registres.
La majorité des registres spécialisés sont gérés directement par le processeur. Le microcode,
quand il existe, utilise ses propres registres, appelés registres microarchitecturaux.

3.1.3 La mémoire centrale


a) La mémoire physique
La mémoire centrale contient les programmes et les données que ceux-ci manipulent. Elle
est plus lente que les registres et que les mémoires cache (cf. paragraphe 3.1.4) mais de
capacité beaucoup plus importante. Sa capacité s’exprime le plus souvent en gigaoctets,
c’est-à-dire en milliards d’octets. C’est une mémoire vive, qui perd tout son contenu lorsque
3 • Les unités et systèmes de stockage 23

l’alimentation électrique est coupée, contrairement aux mémoires externes, comme les
disques, et aux mémoires mortes.
La mémoire centrale peut être vue comme un ensemble de cellules mémoires (mots) qui
peuvent contenir chacune une donnée ou une instruction en binaire. Chaque cellule est repérée
par un numéro, ou adresse mémoire. On peut lire ou écrire une cellule à une adresse donnée.
Le temps d’accès est le même quel que soit le mot concerné. D’où le qualificatif de « mémoire
à accès aléatoire » ou RAM pour Random Access Memory, également utilisé.
L’adresse à lire ou à écrire doit être placée dans un registre spécialisé, le registre adresse
mémoire (RAM 1). Un dispositif, le décodeur, sélectionne la bonne cellule. En cas d’écriture,
commandée par une microcommande d’écriture, la donnée à écrire doit être placée dans un
autre registre spécialisé, le registre donnée mémoire (RDM). En cas de lecture, commandée
par une microcommande de lecture, c’est la donnée lue qui est rangée dans le RDM. La figure
3.1 schématise cette organisation. Les notions de microcommande et de bus seront précisées
au paragraphe 4.1.1
Microcommande (lire/écrire)

D
é
c
R o Mémoire
Bus d'adresses
A d
centrale
M e
u
r

RDM

Bus de données

F IGURE 3.1 La mémoire centrale


© Dunod – Toute reproduction non autorisée est un délit.

Du point de vue technologique, on distingue deux types de RAM :


– les RAM statiques, ou SRAM, qui utilisent des bascules pour mémoriser les bits. Une
bascule est un circuit logique capable de maintenir sa sortie inchangée dans une certaine
configuration de ses entrées et donc de réaliser une mémoire de 1 bit. L’implantation d’une
bascule requiert un ensemble de 4 à 6 transistors. Les SRAM sont très rapides, de prix
élevé et donc principalement utilisées dans les mémoires cache (cf. paragraphe 3.1.4),
– les RAM dynamiques, ou DRAM, avec de nombreuses générations successives nommées
SDRAM, RDRAM, DR-SDRAM, DDR-SDRAM, DDR2, DDR3 et DDR4 pour les
dernières. Elles ne nécessitent qu’un seul transistor et un condensateur. Leur implantation

1. On évitera les phrases comme « le RAM permet d’accéder à la RAM ». . .


24 Partie 1. Les couches basses

exige un rafraîchissement périodique des données, toutes les quelques millisecondes, à


cause du courant de fuite du condensateur. Elles sont moins rapides, moins coûteuses et
plus fortement intégrées que les RAM statiques. Elles sont utilisées dans les mémoires
centrales.

La mémoire centrale peut être sujette à des erreurs soit permanentes (usure, défaut de
fabrication), soit intermittentes (alimentation électrique perturbée, particules alpha, etc.). On
stocke souvent chaque mot de M bits avec K bits supplémentaires permettant de détecter
et de corriger d’éventuelles erreurs. Ces K bits de contrôle sont calculés avant écriture en
mémoire, stockés en mémoire et recalculés en lecture pour comparaison et éventuellement
correction de la donnée (cf. paragraphe 6.11).

b) La mémoire virtuelle

Une adresse sur N bits permet d’adresser 2N cellules. Par exemple, avec des adresses de
32 bits on peut adresser environ 4 millions de cellules, ce qui est souvent très insuffisant.
Les ordinateurs actuels utilisent donc fréquemment le concept de mémoire virtuelle. Cette
approche, qu’illustre la figure 3.2, repose sur une traduction à la volée d’adresses virtuelles,
appartenant à un espace d’adressage virtuel beaucoup plus grand que l’espace d’adressage
physique, en adresses physiques en mémoire centrale. C’est la MMU (Memory Management
Unit) qui réalise cette traduction. La mémoire virtuelle utilise une partie de la mémoire
externe, disque en général, comme extension de la mémoire centrale, avec un va-et-vient
de zones de tailles fixes, appelées pages, entre les deux. C’est le système d’exploitation qui
transfère, selon les adresses demandées, les pages utiles vers la mémoire physique et les pages
inutiles vers la mémoire externe. Ce point sera approfondi lors de l’étude des fonctions des
systèmes d’exploitation au chapitre 7.

Unité Mémoire
Adresse MMU Adresse
centrale virtuelle centrale
mémoire

Exception MMU

F IGURE 3.2 La mémoire virtuelle

3.1.4 Les mémoires cache


L’augmentation des performances des processeurs surpasse celle des mémoires centrales des
ordinateurs, même si les deux progressent très rapidement. Il faut actuellement de l’ordre
de 300 cycles processeur pour accéder à un mot en mémoire centrale. Les mémoires cache
cherchent à masquer en partie ces différences, en accélérant l’accès aux données les plus
utilisées.
3 • Les unités et systèmes de stockage 25

Un cache est une mémoire rapide qui enregistre temporairement des copies de données
provenant de la mémoire centrale (ou plus généralement d’une certaine source), afin de
diminuer le temps d’une nouvelle lecture de ces données. Les architectures actuelles
comprennent des caches d’instructions, des caches de données et des caches mixtes
instructions/données. Les processeurs utilisent souvent plusieurs niveaux de caches : les
plus proches étant plus rapides mais aussi plus petits que ceux plus éloignés du processeur.
Le cas le plus classique est celui d’un processeur ayant deux niveaux de cache embarqués
dans le processeur (caches L1 et L2) et souvent un troisième niveau de cache (L3) situé en
dehors du processeur.
Le mode de fonctionnement est le suivant, si on suppose l’existence d’un seul niveau de
cache. Le processeur demande une donnée, c’est-à-dire un mot mémoire. Le cache vérifie
s’il possède cette donnée. S’il la possède, on parle de « succès du cache », il la fournit au
processeur. S’il ne la possède pas, on parle de « défaut du cache », il la demande à la mémoire
centrale, la transmet au processeur et la stocke pour d’éventuelles utilisations ultérieures.
Deux « principes » expliquent l’accroissement notable des performances résultant de
l’utilisation d’un cache :
– Le principe de localité spatiale indique que l’accès à une donnée située à une adresse
A va probablement être suivi d’un accès à une zone très proche de A. Cela résulte de
l’accès principalement séquentiel aux instructions et des accès fréquents à des ensembles
consécutifs de données. Il est donc intéressant de transférer dans le cache non pas la seule
donnée demandée mais un bloc de plusieurs mots autour de cette donnée.
– Le principe de localité temporelle indique que l’accès à une zone mémoire à un instant
t a de fortes chances de se reproduire rapidement après en t + n. Cela résulte de
l’existence fréquente de traitements répétitifs. C’est pourquoi la donnée est conservée le
plus longtemps possible dans le cache.

En conséquence de ces principes, le cache contient des blocs de cellules mémoires contiguës,
appelés lignes. Comme illustré par la figure 3.3, les transferts avec le processeur se font par
mots alors que les transferts avec la mémoire se font par blocs. La politique de remplacement
des blocs dans le cache doit permettre de conserver le plus longtemps possible les données
ayant fait l’objet d’un accès. Pour charger un nouveau bloc, on peut supprimer par exemple
le plus ancien dans le cache (politique FIFO pour First in First Out) ou le plus anciennement
© Dunod – Toute reproduction non autorisée est un délit.

utilisé (politique LRU pour Last Recently Used).

Mémoire
Processeur Mot Cache Bloc
centrale

F IGURE 3.3 Les mémoire cache


26 Partie 1. Les couches basses

3.1.5 Les SSD


Un SSD, pour Solid State Drive est un dispositif utilisant une large quantité de mémoire flash
pour concurrencer les disques magnétiques.
La mémoire flash est une mémoire à semi-conducteurs réinscriptible, c’est-à-dire une
mémoire possédant les caractéristiques d’une mémoire vive persistante. On la trouve
également, à plus petite échelle, dans les clés USB et les cartes mémoires des appareils photo
numériques ou des téléphones portables.
Dans les SSD, cette mémoire flash est répartie en plusieurs modules. Elle est pilotée par un
contrôleur qui organise le stockage et la répartition des données sur l’ensemble des modules.
Les données échangées entre le système d’exploitation et le SSD transitent par une mémoire
tampon (buffer). Les SSD utilisent les interfaces Serial ATA (SATA), comme les disques, ou
PCI-Express, comme le cartes graphiques.
Un SSD est plus solide qu’un disque magnétique et possède une meilleure résistance aux
chocs et aux vibrations. Les SSD surpassent aussi les disques en performances (temps
d’accès, débit, consommation) mais leur prix au gigaoctet reste plus élevé, même si la
différence diminue régulièrement.

3.1.6 Les disques magnétiques


Un disque magnétique, appelé aussi « disque dur », comporte un axe central autour duquel un
empilement de plateaux en aluminium, verre ou céramique, tourne à une vitesse de rotation
rapide et constante, en général de 5 à 15 000 tours/minute (cf. figure 3.4).
Sens de rotation

Secteur

Tête
Bras

Piste

Vue du haut

Vue de côté
Plateau

Surface
Armature
Cylindre

F IGURE 3.4 Le disque magnétique


3 • Les unités et systèmes de stockage 27

Les surfaces des plateaux sont recouvertes d’une fine couche d’un substrat magnétisable,
sur laquelle les données sont enregistrées. Les données sont écrites grâce à une tête de
lecture/écriture qui survole la surface du disque. Suivant le courant électrique qui la traverse,
la tête modifie le champ magnétique local pour écrire soit 0, soit 1. En lecture, le mouvement
du champ magnétique local engendre aux bornes de la tête un potentiel électrique qui dépend
de la valeur enregistrée (0 ou 1). Toutes les têtes de lecture/écriture sont reliées à une armature
qui se déplace entre les plateaux avec une tête par face du plateau. L’armature déplace les
têtes radialement au-dessus des plateaux pendant qu’ils tournent, ce qui permet d’accéder à
la totalité de leur surface.
La surface de chaque plateau est divisée en pistes concentriques séparées par un petit espace.
Toutes les pistes situées à une même distance de l’axe forment un cylindre. Chaque piste est
divisée en secteurs contenant les données. Il faut donc trois éléments d’adresse pour accéder
à un bloc :
– un numéro de piste, qui détermine la position du bras qui porte les têtes,
– un numéro de tête, qui détermine le choix d’une surface,
– un numéro de secteur sur cette piste, qui détermine à partir de quel endroit commencer à
lire ou écrire les données pendant une rotation.

Il existe plusieurs types d’interfaces pour connecter les disques, comme ATA (Advanced
Technology Attachment), Serial-ATA (SATA) et SCSI (Small Computer System Interface).

3.1.7 Les supports de sauvegarde et d’archivage


La sauvegarde (backup) correspond à la création d’une copie de sécurité sur un support de
mémorisation différent de l’original.
On peut procéder à une sauvegarde complète du support ou à des sauvegardes partielles.
Parmi ces dernières, on distingue :
– Les sauvegardes incrémentales, qui ne contiennent que les éléments modifiés depuis la
précédente sauvegarde. Pour reconstituer le support complet, il faut remonter à la dernière
sauvegarde complète et appliquer toutes les sauvegardes incrémentales suivantes.
– Les sauvegardes différentielles, qui contiennent tous les éléments modifiés depuis la
© Dunod – Toute reproduction non autorisée est un délit.

dernière sauvegarde complète.

Ces trois modes, sauvegarde totale/incrémentale/différentielle, ont chacun leurs avantages et


leurs inconvénients en termes de durée et d’espace de stockage occupé. Le choix du mode et
de la fréquence de sauvegarde dépend de l’importance des données et de leur fréquence de
modification.
L’archivage correspond à une conservation à long terme de contenus a priori figés pour des
raisons légales ou d’information. La sauvegarde et l’archivage s’accompagnent souvent de la
compression des données.
Les disques magnétiques, les supports portables (clé USB, DVD-ROM, etc.) et les supports
à accès séquentiel (bandes et cassettes magnétiques) sont utilisés à la fois pour la sauvegarde
et pour l’archivage.
28 Partie 1. Les couches basses

3.1.8 Les mémoires mortes


À l’origine, les mémoires mortes étaient des mémoires électroniques persistantes en lecture
seulement, c’est-à-dire dont le contenu était figé à la fabrication (Read-Only Memory ou
ROM). Avec l’évolution des technologies, le terme mémoire morte inclut maintenant toutes
les mémoires persistantes dont le contenu est fixé initialement, essentiellement pour des
lectures, mais qui peut aussi, plus ou moins facilement, être modifié.
Plusieurs générations se sont succédé, nommées PROM (Programmable Read Only
Memory) constituées de « fusibles » pouvant être grillés (0) ou non (1), EPROM (Erasable
Programmable Read Only Memory) effaçables par des ultraviolets, EEPROM (Electrically
Erasable Read Only Memory) effaçables électriquement. Les mémoires flash sont une variété
de mémoire EEPROM rapide et dense, effaçable par plage de données et non par mot
mémoire isolé.
Les mémoires mortes sont utilisées à diverses fins, pour le stockage :
– des éléments nécessaires au démarrage des ordinateurs (BIOS),
– du microcode des instructions, dans le cas des séquenceurs microprogrammés,
– du firmware de certains systèmes embarqués et équipements, tels les disques durs, les
routeurs, les appareils photo numériques, etc.

3.2 LES SYSTÈMES DE STOCKAGE


Il s’agit de systèmes plus complexes que le simple attachement direct d’un support de
stockage à une machine, nommé DAS pour Direct Attached Storage. Bien entendu,
ces systèmes complexes mettent en jeu des composants logiciels qui ne relèvent pas
exclusivement des couches basses.

3.2.1 Les architectures RAID


Le mot RAID (Redundant Array of Independent Disks) désigne des techniques permettant de
répartir les données sur plusieurs disques afin d’améliorer selon les cas les performances ou
la sécurité (tolérance aux pannes).
Les architectures RAID peuvent être gérées par une couche logicielle au sein du système
d’exploitation ou par un contrôleur matériel qui décharge le système d’exploitation et lui
rend les choses transparentes.
On distingue de multiples variantes d’architecture RAID. Les trois plus importantes sont
présentées dans les paragraphes qui suivent.

® Le RAID 0
Le RAID 0 ou « entrelacement de disques » (stripping) est une architecture de répartition des
données sur deux disques (ou plus), qui améliore les performances grâce à la possibilité de
lectures/écritures parallèles. Dans cette approche, les blocs de données (stripes) sont répartis
en « lignes » successives sur les différents disques.
3 • Les unités et systèmes de stockage 29

Dans la configuration à deux disques de la figure 3.5, on peut lire ou écrire en parallèle A1 et
A2 par exemple.

RAID 0

A1 A2

A3 A4

A5 A6

A7 A8

F IGURE 3.5 L’architecture RAID 0

® Le RAID 1
Le RAID 1 ou mirroring, décrit par la figure 3.6, est une architecture redondante, avec deux
disques (ou plus) qui contiennent à tout moment exactement les mêmes blocs de données. On
parle aussi de disques « miroirs ».
Le RAID 1 confère au stockage des données une certaine tolérance aux pannes matérielles.

RAID 1

A1 A1

A2 A2

A3 A3

A4 A4
© Dunod – Toute reproduction non autorisée est un délit.

F IGURE 3.6 L’architecture RAID 1

® Le RAID 5
Le RAID 5 est une architecture qui unifie les deux précédentes, avec une efficacité légèrement
plus faible. Cette approche combine la répartition par bandes du RAID 0 à une parité répartie.
Il faut N + 1 disques pour disposer de la capacité utile de N disques. Par exemple, quatre
disques pour trois utiles pour la configuration de la figure 3.7.
En effet, à chaque « ligne » de N blocs de données (A1 à AN ) est associé un bloc
de parité (Ap). Les blocs de parité sont répartis sur les différents disques. En cas de
défaillance d’un disque, pour chaque « ligne » il manque soit un bloc de données, soit
le bloc de parité. Si c’est le bloc de parité, ce n’est pas grave, car aucune donnée ne
30 Partie 1. Les couches basses

RAID 5

A1 A2 A3 Ap

B1 B2 Bp B3

C1 Cp C2 C3

Dp D1 D2 D3

F IGURE 3.7 L’architecture RAID 5

manque. Si c’est un bloc de données, on peut calculer son contenu à partir des N − 1
blocs de données restants et du bloc de parité. En effet, le ième bit du bloc de parité Ap(i)
est le résultat d’un « ou exclusif » (xor) entre les ièmes bits des blocs de sa « ligne » :
Ap(i) = A1(i) xor A2(i) xor A3(i) xor . . . xor AN (i).
L’opération xor a la propriété suivante :
Ap(i) xor A2(i) xor A3(i) xor . . . xor AN (i) = A1(i),
A1(i) xor Ap(i) xor A3(i) xor . . . xor AN (i) = A2(i),
A1(i) xor A2(i) xor Ap(i) xor . . . xor AN (i) = A3(i), etc.
C’est-à-dire que n’importe quel bloc de données Ak défaillant peut-être récupéré grâce au
bloc de parité Ap et les N − 1 autres blocs.
Quand la défaillance se limite à un seul disque, le système reste en état de fonctionner et il
est possible de reconstruire le disque défaillant à partir des données et des blocs de parité
présents sur les autres disques.

3.2.2 Les NAS


Un serveur de stockage en réseau, ou NAS (Network Attached Storage), est un système
autonome dédié (appliance), relié à un réseau local, qui joue le rôle de serveur de fichiers
centralisé et optimisé pour un ensemble de clients, comme le montre la figure 3.8.

Clients
LAN

NAS

Serveurs

F IGURE 3.8 Un NAS


3 • Les unités et systèmes de stockage 31

Le serveur NAS fournit ses services via les protocoles classiques de partage de fichiers
comme NFS (Network File System), CIFS (Common Internet File System) ou AFP (Apple
Filing Protocol), qui seront étudiés au chapitre 17. Les données apparaissent aux clients
comme des fichiers dans des volumes (disques logiques) partagés sur le réseau.
Il existe des systèmes d’exploitation spécialisés pour transformer des ordinateurs classiques
en NAS, comme par exemple FreeNAS, qui dérive de FreeBSD, ou OpenMediaVault, basé
sur Debian.
Une telle gestion centralisée des fichiers présente de nombreux avantages : partager
efficacement les données stockées sur le serveur de stockage, diminuer le nombre total de
disques et centraliser une éventuelle architecture RAID, centraliser la gestion des sauvegardes
et simplifier l’administration des clients et des autres serveurs qui ne sont plus concernés par
la fonction de stockage.

3.2.3 Les SAN


Un réseau de stockage, ou SAN (Storage Area Network), est un réseau spécialisé permettant
de partager des baies de stockage, comme montré par la figure 3.9. Les baies de stockage sont
des équipements dédiés comprenant un ensemble de disques et un ou plusieurs contrôleurs
pour les connecter au réseau de stockage (ou éventuellement à un NAS).

Clients
LAN
Paquets

Interface réseau (NIC)

Serveurs

Adaptateur de bus (HBA)

SAN
© Dunod – Toute reproduction non autorisée est un délit.

Blocs

Baies de
stockage

F IGURE 3.9 Un SAN

Dans un SAN, les baies de stockage n’apparaissent pas comme des volumes partagés sur le
réseau. Elles sont accessibles en mode bloc comme les périphériques locaux. Chaque client
voit l’espace disque d’une baie SAN auquel il a accès par un réseau de stockage comme ses
propres disques durs.
32 Partie 1. Les couches basses

Les protocoles utilisés sont FibreChannel pour des débits élevés sur des fibres optiques, iSCSI
(internet SCSI) ou FCoE (Fibre Channel over Ethernet) pour des accès via un réseau IP.

3.2.4 Le stockage en ligne sur le cloud


Le stockage en ligne est un service sur le cloud qui permet de sauvegarder, partager et accéder
à des fichiers depuis n’importe quel appareil connecté à Internet.
Outre la capacité et le coût, les points importants à considérer dans ce type de solution sont
la sécurité (redondance du stockage, certification du fournisseur, etc.) et la confidentialité des
données. Le cryptage est essentiel et peut concerner seulement le transfert, via le protocole
de sécurisation des échanges sur Internet SSL (cf. paragraphe 16.4), ou le transport et le
stockage, quand le cryptage est sous le contrôle du client.
3 • Les unités et systèmes de stockage 33

EXERCICES

Exercice 3.1. Espace adressable.


Avec un registre adresse mémoire de 24 bits, quel est l’espace adressable ?

Exercice 3.2. Un disque magnétique.


Soit un disque avec les caractéristiques suivantes :
– Taille d’un secteur : 512 octets.
– Nombre de plateaux : 5.
– Nombre de têtes : 10.
– Nombre de cylindres : 100 000.
– Nombre de secteurs par piste : 4 000.
– Temps de déplacement moyen des têtes : 10 ms.
– Vitesse de rotation : 7 400 tours/min.
– Taux de transfert maximum : 120 Mo/s.

a) Calculer la capacité d’une piste, d’un cylindre, d’une face, du disque.


b) Quel est le temps de latence (temps pour que la tête atteigne le secteur) maximum, moyen ?
c) Ce disque permet-il de transférer une piste en une seule rotation ?

Exercice 3.3. Mémoires cache.


Soit un ordinateur possédant deux niveaux de mémoire cache L1 et L2 entre le processeur et
la mémoire centrale.

Cache Cache Mémoire


Processeur
L1 L2 centrale
© Dunod – Toute reproduction non autorisée est un délit.

Les caractéristiques de ces mémoires sont les suivantes :


– cache L1 : 210 bits, temps d’accès 10−8 s, probabilité de succès 90 %.
– cache L2 : 216 bits, temps d’accès 10−6 s, probabilité de succès 99,99 %.
– mémoire centrale : 224 bits, temps d’accès 10−3 s, probabilité de succès 100 %.

a) Calculer les probabilités qu’une donnée soit présente à un niveau et absente au(x) niveau(x)
précédent(s).
b) Calculer le temps moyen d’accès à une donnée.
34 Exercices

Exercice 3.4. RAID.


a) Avec un RAID 0 à deux disques et des blocs de 64 ko, par combien est diminué le temps
d’écriture d’un fichier de 500 ko ?
b) Avec un RAID 1 à deux disques de 100 Go, quelle est la capacité utile ?
c) Avec un RAID 5 à quatre disques, comment peut-on recalculer le bloc de parité quand un
bloc de données change sans relire tous les blocs de la ligne ? (Conseil : partir de la définition
du bloc de parité et exprimer le bloc de parité modifié en fonction de l’ancien bloc de parité.)
En déduire la pénalité en écriture, c’est-à-dire le nombre de blocs à lire ou à écrire pour écrire
un bloc de données.

Exercice 3.5. DAS, NAS et SAN.


Dans la figure qui suit, indiquer quels transferts se font en mode fichier et quels transferts se
font en mode bloc.

Application
Application Application

Filesystem
Filesystem
LAN

Disque
SAN

DAS Filesystem

Disque Disque

NAS SAN
Chapitre 4

Les unités et systèmes de traitement

4.1 L’UNITÉ CENTRALE DE TRAITEMENT


L’unité centrale de traitement (CPU pour Central Processing Unit), ou processeur, comporte
plusieurs composants qui communiquent entre eux et avec des composants externes tels que
la mémoire centrale et les unités d’entrée/sortie, comme montré par la figure de l’introduction
de la partie 1, page 20.

4.1.1 Les composants de l’unité centrale de traitement


® Les unités de calcul
© Dunod – Toute reproduction non autorisée est un délit.

L’unité essentielle est l’unité arithmétique et logique (UAL ou ALU en anglais), chargée
comme son nom l’indique d’effectuer les opérations de calcul arithmétique (+, −, /, ×, etc.)
et de calcul logique (>, <, =, ET, OU, etc.).
Elle peut être complétée par d’autres unités de calcul spécialisées. C’est le cas des unités de
calcul en virgule flottante (FPU pour Floating Point Units), qui effectuent des calculs sur des
réels en virgule flottante (cf. paragraphe 6.6) ou des unités de calcul vectoriel, qui appliquent
un même calcul simultanément sur toutes les valeurs d’un vecteur de données.
Le schéma simplifié de la figure 4.1 montre uniquement l’UAL, sans autre unité de calcul
spécialisée. L’UAL reçoit en entrée les données du calcul arithmétique et logique rangées
dans des registres généraux et la microcommande indiquant le calcul à effectuer. Elle produit
en sortie le résultat du calcul, rangé dans un registre général, et des bits de contrôle, indiquant
par exemple un débordement du résultat de l’opération, dans le registre spécialisé appelé
registre d’état (ou PSW pour Program Status Word).
36 Partie 1. Les couches basses

Bus d'adresses

RAM

Registre Horloge CO
d'état Programme
PSW
Séquenceur
Microcommande Microcommande
UAL (calcul à (lecture/
eectuer) écriture)
RI Décodeur Données
Registres
généraux
Unité de commande Mémoire
centrale
Unité centrale RDM

Bus de données

F IGURE 4.1 L’unité centrale et sa relation à la mémoire centrale

® L’unité de commande

L’unité de commande, ou unité de contrôle, cherche, décode et met en œuvre les instructions
du programme en langage machine stocké en mémoire centrale.

L’exécution d’une instruction nécessite une suite particulière de microcommandes de


déplacement des données entre les registres, la mémoire centrale, les unités de calcul et les
unités d’entrée/sortie, ainsi que l’activation des lectures/écritures en mémoire et l’activation
des circuits de calcul de l’UAL. Comme cela a déjà été décrit au paragraphe 2.2.1, soit cette
mise en œuvre des instructions est figée dans les circuits des séquenceurs câblés, soit elle
résulte de l’exécution d’un microcode dans le cas des séquenceurs microprogrammés.

L’horloge interne et le séquenceur de commandes permettent de générer ces microcommandes


suivant un cadencement précis et rapide. La fréquence de l’horloge, exprimée en général
en gigahertz, c’est-à-dire en milliard de battements par seconde, peut donner une certaine
indication de la puissance d’une machine.

L’unité de commande comporte deux registres spécialisés. Le premier est le compteur ordinal
(CO ou PC pour program counter), qui contient à tout instant l’adresse de la prochaine
instruction à exécuter. Il est incrémenté de 1 en 1 lors d’une phase d’exécution séquentielle
du programme (si on suppose que les instructions tiennent toutes sur un mot) et modifié
ponctuellement lors d’un saut à l’intérieur du programme. Le second registre spécialisé est le
registre instruction, qui contient l’instruction à décoder et dont l’exécution doit être contrôlée.
Une instruction contient toujours un code opération, suivi le plus souvent d’un ou plusieurs
noms de registres ou adresses en mémoire correspondant aux opérandes de l’opération.

Le paragraphe 4.1.3 explicite plus en détail comment s’exécute un programme.


4 • Les unités et systèmes de traitement 37

4.1.2 Les bus


Les bus transportent les données, instructions, adresses, signaux d’horloge, microcommandes
entre les composants de l’unité centrale et depuis ou vers les composants externes (mémoire
centrale, unités d’entrée/sortie, etc.). La figure 4.1 fait apparaître de manière très schématique
un bus de données, un bus d’adresses et quelques microcommandes.
Un bus est caractérisé par sa largeur, c’est-à-dire le nombre de bits qu’il peut transmettre
simultanément, sa fréquence, c’est-à-dire le nombre de paquets de bits transmis par seconde
(en Hz), et son débit, qui est le produit de la largeur par la fréquence.
Des composants appelés ponts (bridge) aiguillent les communications vers les différents bus.
Le plus souvent, le pont nord (north bridge), ou contrôleur mémoire, gère les communications
entre le processeur et les bus et dispositifs rapides : mémoire centrale, carte graphique, pont
sud. Le pont sud (south bridge), ou contrôleur d’entrée/sortie, gère les communication entre le
pont nord et tous les autres bus et dispositifs lents. La figure 4.2 représente cette organisation
physique caractéristique des PC actuels.

Mémoire
centrale

Bus
mémoire Bus d'extension PCI

Pont nord Pont sud


(contrôleur (contrôleur Bus IDE, SATA,
Processeur Bus
Bus mémoire) d'E/S USB, Ethernet,
système interne Firewire...
(front side Bus graphique
bus) (AGP, PCI-express...)

Carte
graphique

F IGURE 4.2 Les ponts et les principaux bus


© Dunod – Toute reproduction non autorisée est un délit.

4.1.3 L’exécution d’un programme


a) Le cycle « chercher, décoder, exécuter »
Le principe général d’exécution d’un programme consiste en la répétition, jusqu’à la
rencontre d’une instruction d’arrêt du programme, du même cycle d’actions « chercher,
décoder, exécuter ». Ce cycle est décrit par le pseudo-code suivant.
répéter
- chercher en mémoire l’instruction dont l’adresse est dans le compteur
ordinal CO et la ranger dans le registre instruction RI;
- incrémenter le compteur ordinal CO (de n si l’instruction tient sur n
mots mémoires);
- décoder le contenu de RI;
38 Partie 1. Les couches basses

- s’il y en a, chercher en mémoire le ou les opérandes indiqués dans


l’instruction pour les ranger dans des registres;
- exécuter l’opération correspondant au code opération;
. s’il s’agit d’un calcul, le résultat est calculé à partir des opérandes
rangés dans des registres puis rangé dans un registre;
. s’il s’agit d’un branchement, le compteur ordinal CO prend comme valeur
l’adresse à laquelle le branchement doit se faire.
fin_répéter

b) Les interruptions

Une interruption est un arrêt temporaire de l’exécution normale d’un programme par le
processeur pour exécuter un autre programme plus prioritaire. Avant chaque cycle « chercher,
décoder, exécuter », le processeur teste l’arrivée d’une interruption.
Les interruptions matérielles (ou IRQ pour Interrupt ReQuest) sont provoquées par des causes
externes au programme qui s’exécute, comme le signalement de la fin d’un transfert de
données. On y inclut souvent les exceptions, ou trappes, qui correspondent à une condition
exceptionnelle dans le programme, comme une division par zéro, un accès mémoire illégal
ou un appel système (cf. paragraphe 7.3.4). Les interruptions logicielles (soft IRQ) sont
généralement déclenchées par une instruction spéciale du processeur.
Lors d’une interruption, le processeur sauvegarde tout ou partie de son état interne,
généralement dans la pile mémoire, et exécute ensuite un programme associé à l’interruption
appelé « traitant d’interruption ». Le vecteur d’interruption donne pour chaque type
d’interruption, codé par un entier, le traitant à exécuter. Une fois le traitant terminé,
l’état du programme interrompu est en général restauré et ce dernier reprend la suite de son
exécution.
Lors du fonctionnement de certaines parties du système d’exploitation, il peut être nécessaire
de bloquer (masquer) les interruptions, par exemple parce que des structures de données
sont en cours de modification. Les interruptions bloquées sont le plus souvent exécutées dès
que cela redevient possible. Il peut exister des interruptions non masquables, car associées
à des erreurs catastrophiques pour le système. Les interruptions peuvent par ailleurs être
hiérarchisées suivant des priorités. Une interruption de priorité supérieure est prise en compte
lors du traitement d’une autre interruption, alors qu’une interruption de priorité inférieure est
mise en attente.
Les interruptions sont utilisées principalement pour permettre des communications non
bloquantes avec des périphériques plus lents que le processeur (cf. paragraphe 5.1.2) et dans
le cadre de la commutation entre processus par l’ordonnanceur (cf. paragraphe 8.1.3).

4.1.4 Le langage machine


Chaque type de processeur est capable d’exécuter un certain ensemble d’instructions, son
« jeu d’instructions ». Cet ensemble définit le langage compréhensible par le processeur, ou
langage machine. Selon les processeurs, les instructions sont plus ou moins nombreuses, avec
des longueurs fixes ou variables.
4 • Les unités et systèmes de traitement 39

a) Les instructions
Chaque instruction machine contient tout d’abord un code opération, qui indique l’opération
à exécuter. Il existe trois catégories principales d’opérations :
– Les opérations de transfert : mémoire vers registre ou registre vers mémoire, empilage ou
dépilage. On rappelle que la pile est une zone de mémoire dans laquelle on peut stocker
temporairement des données en les empilant, telle une pile d’assiettes, puis en les dépilant,
du haut vers le bas, pour les utiliser.
– Les opérations de calcul arithmétique et logique : addition, division, incrémentation de 1,
comparaison, etc.
– Les opérations de branchement, inconditionnel ou conditionnel, comme par exemple
« sauter à une certaine adresse si le résultat de l’opération précédente était négatif ».

b) Les modes d’adressage


Les autres champs de l’instruction décrivent les éventuels opérandes. L’accès à un opérande
peut s’effectuer de nombreuses manières, nommées modes d’adressage :
– accès à l’opérande par sa valeur, appelé adressage immédiat,
– accès à l’opérande par son adresse mémoire, appelé adressage direct,
– accès à l’opérande par l’identification du registre qui le contient, appelé adressage par
registre,
– accès à l’opérande par l’identification d’un mot mémoire qui contient l’adresse de
l’opérande, appelé adressage indirect,
– accès à l’opérande par l’identification du registre qui contient son adresse mémoire, appelé
adressage indirect à registre,
– accès à l’opérande par l’identification du registre qui contient son adresse mémoire plus
un décalage de n mots donné comme une constante, appelé adressage basé,
– accès à l’opérande par l’identification du registre qui contient son adresse mémoire plus
un décalage de n mots donné dans un deuxième registre, appelé adressage indexé,
– sans indication particulière, car l’accès se fait implicitement à une localisation donnée,
© Dunod – Toute reproduction non autorisée est un délit.

comme le sommet de la pile ou un registre particulier, appelé adressage implicite.

Certains de ces modes, en apparence compliqués, sont destinés à faciliter les accès à des
ensembles de données consécutives en mémoire.

c) Le langage d’assemblage
Le langage d’assemblage (ou langage assembleur) est une forme lisible par les humains du
langage machine binaire. Un petit programme de traduction, appelé assembleur, permet de
passer du programme en langage d’assemblage au programme en langage machine avant son
exécution. Le langage d’assemblage possède les caractéristiques suivantes :
– Le jeu d’instructions est identique à celui du langage machine.
– Les codes opération sont exprimés par des mnémoniques comme add, mul, mov, etc.
40 Partie 1. Les couches basses

– Les valeurs constantes sont exprimables en décimal, hexadécimal, octal, etc.


– Les registres sont dotés de noms comme ax, dx, ah, etc.
– Les branchements se font via des étiquettes. Par exemple, jmp _labas décrit un saut
inconditionnel vers l’instruction ayant étiquette _labas.
– Des directives à l’assembleur permettent de définir les identificateurs associés aux
constantes et aux variables, les étiquettes dans le programme, des blocs de données ou de
code, etc.

Voici un exemple de programme en langage d’assemblage qui affiche « bonjour le monde ! ! »,


avec le jeu d’instructions Intel x86 et l’assembleur Microsoft Macro Assembler (MASM) :
org 0x0100 ; directive qui fixe l’adresse du programme en hexadécimal
; un texte qui suit un point virgule est un commentaire

mov dx, texte ; charge dans le registre dx l’adresse du texte à afficher


mov ah, 0x09 ; charge dans le registre ah la constante hexadécimale 09
; qui correspond à un affichage
int 0x21 ; interruption hexadécimale 21 qui provoque l’affichage écran
ret ; fin du programme

texte: db ’Bonjour le monde !!’, 10, 13, ’$’


; directive de définition d’une suite d’octets
; les codes 10 et 13 forcent le passage à la ligne

4.1.5 L’implantation de l’unité centrale de traitement


On peut, en théorie du moins, décrire l’implantation d’une unité centrale de traitement à
plusieurs niveaux de granularité, en termes de composants électroniques, de portes logiques
et de circuits logiques.

a) Les composants électroniques


Une description au niveau des composants électroniques, en particulier des transistors qui
sont les composants actifs essentiels de l’électronique, est impossible en pratique à cause de
leur nombre. Par exemple, le processeur Intel Core i7, apparu en 2010, en contient près de
deux milliards. La loi de Moore, énoncée en 1975, postule que le nombre de transistors des
microprocesseurs double tous les deux ans. Elle a été vérifiée jusqu’à présent mais risque de
ne plus pouvoir l’être à l’avenir à cause des limites physiques qui existent au processus de
miniaturisation.

b) Les portes logiques


Une description complète en termes de portes logiques ET (AND), OU (OR), NON (NOT),
OU exclusif (XOR), NON-ET (NAND), NON-OU (NOR), réalisables chacune avec un petit
nombre de transistors, serait encore gigantesque.
Les tables de vérité qui définissent les portes logiques sont rappelées ici :
4 • Les unités et systèmes de traitement 41

a b a ET b a OU b a OU-EXCL b NON a a NON-ET b a NON-OU b


0 0 0 0 0 1 1 1
0 1 0 1 1 1 1 0
1 0 0 1 1 0 1 0
1 1 1 1 0 0 0 0

c) Les circuits logiques


Une manière de procéder plus réaliste consiste à décrire l’unité centrale de traitement
comme une combinaison de circuits logiques. Un circuit logique est un assemblage de portes
logiques réalisant une fonction logique significative. On distingue habituellement deux types
de circuits logiques : les circuits combinatoires et les circuits séquentiels.

® Les circuits combinatoires


Les circuits combinatoires, ou circuits de calcul, produisent leurs sorties exclusivement à
partir de leurs entrées. Tout calcul peut s’implanter en combinant des portes ET, OU et NON.
La théorie mathématique utile pour concevoir les circuits de calcul est l’algèbre de Boole.
Les additionneurs, décodeurs, multiplexeurs sont des exemples de circuits combinatoires
utiles dans les systèmes informatiques.
Exemple
Soit un additionneur de deux bits (a et b) et d’une retenue d’entrée (Rentree ). La somme se
lit sur S et la retenue de sortie sur Rsortie . On pourra vérifier que :
– la table de vérité à gauche de la figure 4.3 correspond bien à une addition des trois bits
d’entrée,
– le circuit à droite de la figure implante bien la table de vérité en prenant des exemples de
valeurs en entrée et en calculant les sorties.

a OU
b excl. OU
a b Rentree S Rsortie S
excl.
0 0 0 0 0 Rentree
0 1 0 1 0
© Dunod – Toute reproduction non autorisée est un délit.

1 0 0 1 0 ET
1 1 0 0 1
OU Rsortie
0 0 1 1 0
0 1 1 0 1 ET
1 0 1 0 1
1 1 1 1 1

F IGURE 4.3 Un additionneur de deux bits

® Les circuits séquentiels


Les circuits séquentiels, ou circuits de mémoire, produisent leurs sorties en fonction non
seulement de leurs entrées mais aussi de leurs précédentes sorties. Cela permet de réaliser
42 Partie 1. Les couches basses

« l’effet mémoire », c’est-à-dire un état stable à une valeur donnée, 0 ou 1, avec la possibilité
de changer cette valeur avec certaines entrées. La théorie mathématique utile pour concevoir
ces circuits est la théorie des automates finis.
Les bascules, mémoires de 1 bit, les registres, mémoires de n bits, et les compteurs sont des
exemples de circuits séquentiels utiles dans les systèmes informatiques.
Exemple
La figure 4.4 donne la table de définition et le circuit logique d’une bascule RS. Un 1 dans S
(set) met la bascule à 1. Un 1 dans R (reset) met la bascule à 0. La valeur de la bascule se lit
sur la sortie Q. On pourra vérifier que le circuit de droite implante bien la table de définition
de gauche en prenant des exemples de valeurs en entrée et en les faisant « tourner » dans le
circuit jusqu’à un état stabilisé.

S
S R Q Résultats NON-OU
0 0 Q Sortie inchangée
0 1 0 Mise à 0
1 0 1 Mise à 1
1 1 Entrées interdites NON-OU Q
R

F IGURE 4.4 Une bascule RS

Remarque
Les circuits logiques ne doivent pas être confondus avec les circuits intégrés. Un circuit
intégré est une petite plaquette de silicium placée dans un boîtier. Sur cette plaquette sont
gravés jusqu’à plusieurs millions d’éléments actifs (transistors) et passifs (résistances,
condensateurs, diodes, etc.). L’exemple le plus connu est le microprocesseur, qui est un
processeur suffisamment miniaturisé pour tenir dans un boîtier unique.

4.1.6 L’amélioration des performances des processeurs


L’architecture effective des processeurs actuels est beaucoup plus complexe que ce qui a été
décrit jusqu’ici. Plusieurs éléments contribuent à l’amélioration des performances.
L’augmentation de la fréquence d’horloge est un moyen simple pour gagner de la vitesse.
Cette approche connaît cependant des limites, liées par exemple à la vitesse de propagation
des signaux électriques et aux problèmes de dissipation de la chaleur.
L’introduction de différents niveaux de mémoire cache a déjà été évoquée au paragraphe
3.1.4 Ils permettent d’accélérer l’accès aux ressources, en particulier la mémoire centrale.
On a déjà évoqué aussi la présence des unités de calcul spécialisées, comme les FPU pour
accélérer les calculs sur les nombres réels codés en virgule flottante (cf. paragraphe 6.6).
Le parallélisme au niveau du traitement des instructions est une voie exploitée depuis
longtemps. Le concept de pipeline permet de paralléliser différentes phases de l’exécution
des instructions : au minimum les phases chercher, décoder, exécuter, comme le schématise
la figure 4.5. Souvent, les découpages en phases sont beaucoup plus fins.
4 • Les unités et systèmes de traitement 43

0 1 2 3 4 5 6

Chercher temps
adresse i Décoder
Sans Exécuter
pipeline Chercher
adresse i+1 Décoder
Exécuter

adresse i Chercher
Décoder
Exécuter
Avec Chercher
pipeline adresse i+1 Décoder
Exécuter
Chercher
Décoder
adresse i+2 Exécuter

F IGURE 4.5 Fonctionnement d’un pipeline

En complément d’un pipeline, on peut trouver une unité de prédiction de branchement qui
exploite l’historique des branchements déjà effectués. Elle permet au processeur d’anticiper
l’effet d’un branchement conditionnel, ce qui est important pour éviter de commencer
inutilement le traitement d’instructions qui ne seront finalement pas exécutées.
Avec une architecture superscalaire, le processeur cherche à exploiter au maximum le
traitement parallèle des instructions, grâce à plusieurs unités de calcul. La combinaison du
parallélisme entre instructions et du parallélisme au niveau du traitement des instructions
conduit à de multiples pipelines parallèles.
L’optimisation du jeu d’instructions est une voie de nature différente. On est passé, au fil
du temps, de jeux d’instructions comportant beaucoup d’instructions, puissantes et de tailles
variables (approche CISC pour Complex Instruction Set Computer), à des jeux d’instructions
avec moins d’instructions, très optimisées et de tailles fixes (approche RISC pour Reduced
Instruction Set Computer), et actuellement à des approches mixtes tirant le meilleur parti des
deux philosophies.
© Dunod – Toute reproduction non autorisée est un délit.

La figure 4.6 donne une représentation un peu plus réaliste de l’architecture d’un processeur
de type Intel Pentium monocœur. IFU signifie Instruction fetch Unit. C’est l’unité chargée de
rechercher la prochaine instruction, qui est ensuite décodée par l’unité DEC et séquencée par
l’unité SEQ. Les processus multicœurs sont abordés au paragraphe 4.2.2

4.2 LES SYSTÈMES DE TRAITEMENT


4.2.1 Généralités sur les systèmes parallèles
Un système parallèle est un ensemble de processeurs interconnectés qui coopèrent pour
réaliser une certaine tâche de calcul. L’interconnexion peut mettre en jeu un bus interne,
un réseau local (LAN) classique ou spécialisé, un réseau étendu (WAN), y compris Internet.
On distingue classiquement deux classes de systèmes parallèles : les « systèmes à mémoire
partagée » et les « systèmes à mémoire distribuée ».
44 Partie 1. Les couches basses

IFU DEC SEQ ALU FPU

Pipeline Registres

Cache L1 Cache L1
instructions données

Cache L2 Unité
centrale

Bus données

Mémoire Contrôleur
centrale Contrôleur d'E/S
mémoire

F IGURE 4.6 Architecture d’un processeur monocœur.

® Architecture à mémoire partagée

Dans ces systèmes, tous les processeurs ont accès à l’ensemble de la mémoire par un chemin
unique, bus ou réseau. Ce chemin peut constituer un goulot d’étranglement quand le nombre
de processeurs augmente. Les mémoires caches, à un ou plusieurs niveaux, que l’on voit sur
la figure 4.7 constituent une réponse partielle à ce problème de performance.

Processeurs

Caches

Bus ou
réseau

Mémoire
partagée M

F IGURE 4.7 Système à mémoire partagée

Cette architecture se retrouve par exemple dans les machines multiprocesseurs symétriques
à mémoire partagée (SMP pour Symmetric shared memory MultiProcessor). Symétrique
signifie que les processeurs reliés au bus d’interconnexion jouent tous le même rôle.

Open MP (Open MultiProcessing) est une interface de programmation (API) qui étend les
langages de programmation classiques en calcul scientifique que sont Fortran, C et C++.
Open MP est devenu le standard de programmation pour le calcul parallèle avec des machines
SMP.
4 • Les unités et systèmes de traitement 45

® Architecture à mémoire distribuée

Dans ces systèmes, seule la mémoire locale est accessible directement et rapidement. Il faut
gérer des échanges de messages entre les processeurs pour les autres accès, beaucoup moins
rapides, comme le montre la figure 4.8. On parle aussi de système à architecture mémoire
non uniforme (Non Uniform Memory Architecture ou NUMA).

Processeurs

Caches

Mémoire M M M
distribuée

Bus/réseau d'interconnexion

F IGURE 4.8 Système à mémoire distribuée

Cette organisation se retrouve par exemple dans les machines NUMA et dans les clusters,
constitués d’une grappe de machines, classiques ou SMP. Nous détaillerons les principaux
types de clusters au paragraphe 4.2.3
MPI (Message Passing Interface) est le standard de programmation par échange de messages.
C’est une bibliothèque qui étend le Fortran, le C ou le C++.
Certains systèmes à mémoire distribuée cachent la distribution via une mémoire partagée
distribuée (Distributed Shared-Memory multiprocessor ou DSM). Tous les processeurs se
partagent l’espace d’adressage global de cette mémoire partagée distribuée, comme le montre
la figure 4.9, ce qui facilite la programmation au prix d’un certain coût à payer en efficacité.
L’implantation de la mémoire partagée distribuée peut être matérielle ou logicielle.
© Dunod – Toute reproduction non autorisée est un délit.

Processeurs

Caches

Gestionnaire
e de mémoire
e partagée distribuée
t

Bus/réseau d'interconnexion

F IGURE 4.9 Système à mémoire partagée distribuée


46 Partie 1. Les couches basses

4.2.2 Les CPU multicœurs


Un microprocesseur multicœur (multi-core) possède n (n  2) cœurs qui fonctionnent
en simultanéité au sein d’une même puce électronique. On parle d’architecture CMP pour
Chip-level MultiProcessing. Un cœur est un ensemble de circuits capables d’exécuter des
programmes de façon autonome. Toutes les fonctionnalités nécessaires à l’exécution d’un
programme sont présentes : compteur ordinal, registres, unités de calcul, etc.
Des caches peuvent être associés à chaque cœur et des caches peuvent être partagés entre les
cœurs, ce qui constitue une spécificité notable par rapport aux machines multiprocesseurs.
On retrouve dans les microprocesseurs multicœurs les deux architectures types des systèmes
parallèles :
– à mémoire partagée, avec un bus mémoire (cf. figure 4.10, où les « dies » sont les plaquettes
de silicium enchâssées dans le microprocesseur),
– à mémoire distribuée, avec des interconnexions NUMA entre les nœuds dotés de RAM
(cf. figure 4.11).

Die 1 Die 2
IFU DEC ALU FPU
Coeur 1 Coeur 2 Coeur 3 Coeur 4

Pipeline IFU DEC ALU FPU


Registres
Pipeline Registres
Cache L1 Cache L1
instructions Cachedonnées
L1 Cache L1
instr. données

Cache L2 Cache L2 Unité


centrale

Bus données

Mémoire Contrôleur
centrale Contrôleur
d'E/S
mémoire

F IGURE 4.10 Microprocesseur multicœur à mémoire partagée

4.2.3 Clusters et grilles


Un cluster est une grappe de machines en réseau, ou nœuds, qui coopèrent dans le cadre d’une
tâche donnée. Les machines sont indépendantes, en général similaires et situées en un même
lieu géographique.
Dans un cluster, soit la tâche est dupliquée sur chaque machine, soit la tâche est divisée,
chaque machine effectuant une partie du travail. Le premier cas de figure se rencontre
4 • Les unités et systèmes de traitement 47

Noeud 0 Noeud 1
Coeur 0 Coeur 4 Coeur 3 Coeur 7
E/S Cache L1 Cache L1
Cache L2 Cache L2

Coeur 8 Coeur 12 Coeur 11 Coeur 15


RAM RAM

Cache L3 Cache L3

Interconnexion NUMA
Noeud 2 Noeud 3
Coeur 2 Coeur 6 Coeur 1 Coeur 5

RAM Cache L1 Cache L1 RAM


Cache L2 Cache L2

Coeur 10 Coeur 14 Coeur 9 Coeur 13

E/S

Cache L3 Cache L3

F IGURE 4.11 Microprocesseur multicœur à mémoire distribuée

par exemple dans le cadre de la haute disponibilité et de l’équilibrage de charge, qui fait
l’objet du paragraphe 4.2.4. Le second cas de figure se rencontre dans les clusters de
calcul à haute performance. Ces derniers accueillent des simulations numériques complexes
qui permettent de remplacer des expériences impossibles à réaliser parce qu’elles sont
dangereuses (simulations d’accident), de longue durée (simulations en climatologie),
inaccessibles (simulations en astrophysique) ou interdites (simulations d’explosion de
bombe nucléaire).
© Dunod – Toute reproduction non autorisée est un délit.

On parle de grille (grid) pour un ensemble de nœuds de très grande taille, distribué par
exemple au niveau mondial et constitué le plus souvent de machines hétérogènes connectées
par Internet.

4.2.4 Systèmes à haute disponibilité et à équilibrage de charge


La haute disponibilité est la garantie qu’un service offert sera accessible sans interruption,
ou avec un taux très faible d’interruption. La tolérance aux pannes, c’est-à-dire l’aptitude à
offrir un service sans interruption en présence d’une panne, est une des conditions de la haute
disponibilité.
Une disponibilité de 99 % (« deux neuf ») correspond à 3,65 jours d’indisponibilité par an.
99,9 % (« trois neuf ») correspond à 8,76 heures. 99,99 % (« quatre neuf ») correspond à
52,56 minutes. À partir de ce niveau, on peut parler de haute disponibilité. 99,999 % (« cinq
48 Partie 1. Les couches basses

neuf ») correspond à 5,26 minutes. 99,9999 % (« six neuf ») correspond à 31,5 secondes.
À ces niveaux, on parle de très haute disponibilité.
La recherche d’une haute disponibilité conduit à mettre en place des architectures de systèmes
particulières, utilisant diverses formes de redondance. Le coût des solutions est bien entendu
corrélé au niveau de disponibilité visé.
Soit, par exemple, le cas d’un serveur web (serveur HTTP). Connecté à Internet, il reçoit des
requêtes HTPP et renvoie des pages HTML statiques ou construites dynamiquement à partir
de données stockées le plus souvent dans une base de données. L’architecture minimum avec
un serveur et une base de données est souvent insuffisante en termes de puissance, c’est-à-dire
de nombre de requêtes qui peuvent être servies, et de disponibilité.
L’équilibrage de charge (load balancing) consiste à répartir les requêtes sur plusieurs
serveurs agissant identiquement sur les mêmes données en parallèle (un cluster de serveurs).
C’est un exemple de redondance active où les moyens redondants sont actifs simultanément.
La machine qui porte le logiciel de répartition de la charge constitue un point unique de
défaillance (Single Point of Failure ou SPOF), c’est-à-dire que son indisponibilité bloque la
totalité du système. Cette machine est souvent dupliquée avec un logiciel de type « battement
de cœur » (comme le logiciel heartbeat) qui teste périodiquement si le serveur primaire
fonctionne et effectue automatiquement le basculement vers le serveur secondaire en cas
de défaillance. C’est un exemple de redondance passive où les moyens redondants sont
mis en œuvre uniquement à la demande. La figure 4.12 schématise ce genre d’architecture.
Une technique similaire peut être utilisée pour basculer le serveur de base de données d’un
primaire à un secondaire, les deux bases étant maintenues dans le même état par duplication
en continu des mises à jour.

Internet

Battement
de coeur

Equilibreurs de charge

Cluster de serveurs HTTP

Base de données

F IGURE 4.12 Architecture à équilibrage de charge d’un serveur web


4 • Les unités et systèmes de traitement 49

EXERCICES

Exercice 4.1. Les bus.


Un PC est organisé selon le schéma de la figure 4.2. Le bus système relie le processeur au
contrôleur mémoire qui est lui-même connecté à la mémoire centrale par le bus mémoire, à la
carte graphique et au contrôleur d’entrées/sorties par deux autres bus. Le bus système a une
largeur de 8 octets et une fréquence de 400 MHz. Le bus mémoire a une largeur de 32 bits et
une fréquence de 266 MHz.
a) Calculer la bande passante du bus système en Go/s.
b) Calculer la bande passante du bus mémoire en Go/s.
c) Comment se justifie la différence de bande passante entre ces deux bus ?

Exercice 4.2. Langages d’assemblage.


On considère les langages d’assemblage de trois machines d’architectures différentes. Dans
les trois cas, les mots mémoires sont repérés par des identificateurs (ex : A, B, X).
(1) M0 est une machine à pile : on peut ranger un mot mémoire au sommet de la pile
(instruction PUSH X) et ranger le sommet de la pile en mémoire et le retirer de la pile
(instruction POP X). L’instruction ADD enlève 2 mots de la pile, fait l’addition et met le
résultat au sommet de la pile.
(2) M1 est une machine à accumulateur, c’est-à-dire à registre unique : on peut transférer un
mot mémoire dans l’accumulateur (instruction LOAD X) et sauvegarder l’accumulateur
dans un mot mémoire (instruction STORE X). L’instruction ADD X additionne un mot
mémoire avec le contenu de l’accumulateur et range le résultat dans l’accumulateur.
(3) M2 est une machine avec 8 registres généraux (Ri pour i de 1 à 8) : on peut transférer
un mot mémoire vers un registre (instruction LOAD Ri, X) et transférer un registre
vers un mot mémoire (instruction STORE X, Ri. Les opérations arithmétiques utilisent
uniquement des registres, comme ADD Ri, Rj, Rk où Ri reçoit le résultat.
a) Soient 3 mots mémoires A, B et C. Écrire, pour les trois machines, le code qui réalise
A = B + C.
© Dunod – Toute reproduction non autorisée est un délit.

b) Écrire, pour les trois machines, le code correspondant à la suite d’instructions :


A = B + C
B = A + C
Comparer ces codes en nombre d’instructions et en nombre d’accès mémoire, c’est-à-dire
de lectures ou écritures en mémoire. Essayer de minimiser ce nombre d’accès mémoire en
écrivant les codes. Les accès aux registres et à la pile ne sont pas des accès mémoire.

Exercice 4.3. Circuit logique mystère.


Soit le circuit logique suivant qui comporte 4 portes OU exclusif (xor).
a) Remplir la table suivante quand P vaut 0.
b) Donner une interprétation du résultat R.
50 Exercices

c) Si P vaut 1, que devient le résultat ?

A B C D X Y Z P R
A
xor X 0 0 0 0 0
B 0 0 0 1 0
Y xor Z 0 0 1 0 0
C 0 0 1 1 0
xor
D R 0 1 0 0 0
xor
P ...

Exercice 4.4. Modes d’adressage.


Le champ d’adresse d’une instruction contient la valeur décimale 11. Où se trouve l’opérande
correspondant dans le cas d’un adressage :
(1) immédiat ?
(2) direct ?
(3) indirect ?
(4) par registre ?
(5) indirect par registre ?

Exercice 4.5. Équilibrage de charge.


Imaginer quelques méthodes de répartition des requêtes vers un cluster de serveurs que
peuvent suivre les équilibreurs de charge.
Chapitre 5

Les unités et systèmes de communication

5.1 LES ENTRÉES/SORTIES


On parle d’entrée pour une donnée qui transite de l’extérieur vers le processeur et de sortie
pour une donnée qui transite du processeur vers l’extérieur. L’interfaçage avec l’extérieur se
fait par des périphériques d’entrée, de sortie, d’entrée/sortie ou de stockage externe, avec des
transferts caractère par caractère ou par blocs.
La complexité de la gestion des entrées/sorties résulte, d’une part, de la diversité des modes
de fonctionnement des périphériques et des formats de données spécifiques qu’ils utilisent et,
© Dunod – Toute reproduction non autorisée est un délit.

d’autre part, de la lenteur des périphériques par rapport au processeur.


Il existe trois manières de gérer les entrées/sorties. Elles sont brièvement présentées dans les
trois paragraphes qui suivent.

5.1.1 Les entrées/sorties programmées


Le processeur attend que l’entrée/sortie soit possible en testant périodiquement l’état
du périphérique. Cette technique est la plus simple mais aussi la plus coûteuse, car le
processeur ne fait rien en attendant que le périphérique soit prêt. C’est pourquoi on parle
aussi d’entrées/sorties bloquantes ou d’entrées sorties par attente active.
On peut utiliser cette approche pour contrôler des processus élémentaires, comme par
exemple la régulation de la température dans une pièce.
52 Partie 1. Les couches basses

5.1.2 Les entrées/sorties par interruptions


Une unité d’entrée/sortie, ou contrôleur, permet de décharger le processeur de certaines
tâches de bas niveau et lui permet donc de se consacrer, pendant une partie du temps de
l’entrée/sortie, au traitement d’autres instructions.
Les contrôleurs comportent de la mémoire tampon pour stocker les données, une logique
de contrôle câblée ou programmée, plus ou moins complexe, et des interfaces avec un ou
plusieurs périphériques, comme schématisé par la figure 5.1.

Mémoire

Périphérique(s)
tampon données
Bus de
données Interface
état
Bus contrôle
d'adresses ...
Logique
de contrôle
Interface
Bus de
contrôle

F IGURE 5.1 Architecture d’un contrôleur

Par exemple, dans le cas d’une entrée demandée par le processeur, c’est le contrôleur qui
gère l’opération en dialoguant avec le périphérique dont il est en charge. À la fin de l’entrée,
le contrôleur génère une interruption pour que le processeur vienne récupérer les données
stockées dans sa mémoire tampon.

5.1.3 L’accès direct à la mémoire


Cette technique, connue par ses initiales DMA (Direct Memory Access), est utilisée pour
procéder à des transferts rapides d’un grand nombre de données avec des disques, des cartes
graphiques, des cartes son, etc.
Sans DMA, le contrôleur lit un bloc jusqu’à ce qu’il soit entièrement dans son tampon, puis
calcule un total de contrôle (checksum) pour vérifier qu’aucune erreur ne s’est produite. Il
réquisitionne ensuite le processeur par une interruption. Le processeur exécute alors une
boucle pour transférer une à une les données depuis le tampon du contrôleur jusqu’à la
mémoire centrale. Ce transfert est coûteux en temps processeur.
Dans le cas du DMA, c’est le contrôleur qui effectue lui-même le transfert vers la mémoire.
Il devient une sorte de processeur spécialisé dans les entrées/sorties. Pour ce faire, lors de la
demande d’entrée, l’adresse mémoire à laquelle les données doivent être copiées est fournie
au contrôleur par le processeur. Il faut aussi résoudre le problème de la compétition pour
l’accès au bus de données entre le processeur et le contrôleur DMA.
5 • Les unités et systèmes de communication 53

5.2 LES RÉSEAUX


Les deux premiers paragraphes introduisent les concepts essentiels du domaine des réseaux
et les modèles en couches, OSI et TCP/IP, qui sont indispensables pour comprendre les
composants et les architectures de réseau.

5.2.1 Généralités sur les réseaux


a) Définitions et classifications
Un réseau est un ensemble de moyens matériels et logiciels mis en œuvre pour permettre
à des ordinateurs d’échanger des données. Au plan matériel, un réseau regroupe donc des
ordinateurs (serveurs et postes de travail) et des équipements de communication (répéteurs,
routeurs, passerelles, etc.), reliés entre eux par des liaisons physiques permanentes (câbles,
fibres optiques, liaisons satellitaires, etc.).
Les réseaux rendent de multiples services et sont omniprésents aujourd’hui. Ils permettent en
particulier de communiquer, de partager des ressources (fichiers, applications, imprimantes,
etc.), de mettre en commun de la puissance de traitement et d’améliorer la fiabilité par la
redondance des équipements.
Il existe une grande variété de réseaux qui se différencient par :
– leur étendue : réseau personnel (PAN pour Personal Area Network), local (LAN pour Local
Area Network), métropolitain (MAN pour Metropolitan Area Network), longue distance
(WAN pour Wide Area Network) et Internet, qui interconnecte tous ces réseaux,
– leur mode de fonctionnement (diffusion, point à point) et leur topologie (bus, anneau,
étoile, maillage complet ou partiel),
– leur manière de mettre en œuvre les échanges de messages entre une source et une
destination, qui impacte la qualité de service offerte (mode d’échange connecté ou non
connecté, technique de commutation).

Ces caractéristiques sont détaillées dans les paragraphes qui suivent.

b) Mode de fonctionnement et topologie


© Dunod – Toute reproduction non autorisée est un délit.

Un réseau à diffusion (broadcast) possède un seul support de transmission avec des


topologies classiques en bus ou en anneau (cf. figure 5.2). Chaque message envoyé par
un équipement sur le réseau est reçu par tous les autres et comporte le plus souvent une
adresse qui permet au destinataire effectif possédant cette adresse de se reconnaître. Il est
aussi possible d’envoyer un message vers tous les équipements (envoi broadcast) ou vers un
sous-ensemble déterminé d’équipements (envoi multicast). Ce mode de fonctionnement et
ces topologies sont caractéristiques des petits réseaux, comme les réseaux locaux Ethernet.
Dans un réseau point à point (unicast), de multiples supports de transmission relient chacun
deux équipements. Les topologies classiques sont l’étoile, le maillage complet, où chaque
équipement est lié à tous les autres, et le maillage partiel, où il existe au moins un chemin entre
chaque couple d’équipements (cf. figure 5.2). Un message d’un émetteur vers un destinataire
peut transiter par un certain nombre de nœuds intermédiaires. Ce mode de fonctionnement et
ces topologies sont caractéristiques des grands réseaux, comme Internet.
54 Partie 1. Les couches basses

Réseau à diusion

Bus
Equipement
Anneau

Réseau point à point

Etoile Maillage complet Maillage partiel

F IGURE 5.2 Les topologies de réseau

c) Mode d’échange connecté ou non connecté

Dans un échange en mode connecté, l’initiateur de l’échange demande l’établissement d’une


connexion au destinataire. Si le destinataire refuse la connexion, celle-ci n’est pas établie.
Sinon, la connexion est établie et les messages peuvent transiter de l’un à l’autre comme dans
un tuyau, avec préservation de leur ordre. À la fin des échanges, la connexion est libérée. Ce
mode de communication est similaire à celui du téléphone.
Dans un échange en mode non connecté, chaque message contient l’adresse du destinataire
et circule dans le réseau indépendamment des autres, en empruntant éventuellement des
chemins différents entre l’émetteur et le destinataire. L’ordre des messages entre un émetteur
et un destinataire n’est donc pas nécessairement préservé. Ce mode de communication
s’apparente plutôt à celui du courrier postal.

d) Technique de commutation

Pour transmettre des données au-delà d’un réseau local, on doit passer par un réseau commuté
qui est classiquement un réseau point à point partiellement maillé. Dans cette configuration,
les équipements de traitement (ou ET), comme les ordinateurs, souvent attachés à des réseaux
locaux, sont liés entre eux via des nœuds intermédiaires, les équipements de commutation (ou
EC), comme les routeurs. Les liaisons sont le plus souvent multiplexées, c’est-à-dire qu’elles
contiennent plusieurs canaux.
La figure 5.3 illustre cette organisation.
5 • Les unités et systèmes de communication 55

Equipement de
commutation
ET
EC EC
ET ET EC
EC EC
Liaison multiplexée
(plusieurs canaux)
EC EC EC
Réseau
ET commuté
ET
Equipement de Réseau
traitement ET local

F IGURE 5.3 Réseaux locaux et réseau commuté

La commutation consiste à mettre en relation deux ET via un nombre quelconque d’EC. Il


existe trois principales techniques de commutation.

® La commutation de circuits
Un circuit physique de bout en bout est réservé entre les deux équipements en début
d’échange et reste le même pendant toute la durée de l’échange. Aujourd’hui, il ne s’agit
plus de réserver un câble physique, mais un canal privé (non partageable). Dans ce cadre,
il peut y avoir du gaspillage de ressources mais la qualité de service peut être garantie à un
bon niveau. C’est par exemple le mode de fonctionnement du réseau téléphonique commuté
classique (RTC).

® La commutation de paquets
Chaque message est découpé par l’émetteur en une suite de fragments numérotés de
longueur fixe ou variable, appelés paquets. Chaque EC qui reçoit un paquet l’enregistre
dans un tampon puis le réémet dès que possible (store-and-forward) sur le support choisi en
© Dunod – Toute reproduction non autorisée est un délit.

fonction d’un certain algorithme de routage. Les paquets sont acheminés indépendamment
les uns des autres dans le réseau. L’ET destination doit être capable de réassembler les
paquets dans l’ordre initial souvent différent de celui dans lequel il les a reçu. La qualité de
service est variable et difficile à améliorer. Un réseau IP avec le protocole de transport UDP
(cf. paragraphe 5.2.2) fonctionne de cette manière.

® La commutation de paquets en mode connecté


Afin de combiner les avantages des deux types de commutations, on peut utiliser la
commutation de paquets en mode connecté. Une route (circuit virtuel) entre l’ET source
et l’ET destination est déterminée à la connexion et reste inchangée pour tous les paquets
jusqu’à la déconnexion. Dans ce cadre, il existe des techniques pour améliorer la qualité de
service. Un réseau IP avec le protocole de transport TCP (cf. paragraphe 5.2.2) fonctionne de
56 Partie 1. Les couches basses

cette manière. L’arbre de choix de la figure 5.4 synthétise ces principales mises en œuvre des
réseaux.

Commutation...

... de circuits ... de paquets...

... en mode ... en mode


RTC connecté non connecté
(circuit virtuel) (datagramme)

TCP/IP UDP/IP

F IGURE 5.4 Principales mises en œuvre des réseaux

5.2.2 Les modèles en couches, OSI et TCP/IP


a) Présentation
Le modèle OSI (pour Open System Interconnection), normalisé par l’ISO, est le modèle de
référence en sept couches des systèmes d’interconnexion ouverts, autrement dit des réseaux
informatiques [ISO94]. La numérotation des couches commence par le bas, c’est-à-dire par
le matériel.
Le tableau qui suit résume les objectifs et les protocoles essentiels des sept couches OSI.
Dans ce tableau, les lignes horizontales délimitent quatre sous-ensembles, conformément au
modèle simplifié TCP/IP qui définit, de haut en bas :
– une couche application, qui regroupe les couches OSI 5, 6 et 7,
– une couche transport, qui correspond à la couche OSI 4,
– une couche Internet, qui correspond à la couche OSI 3,
– une couche d’accès au réseau, qui regroupe les couches OSI 1 et 2.

b) Les protocoles
Les protocoles définissent les règles de communication entre entités d’une même couche
(pairs). Ces règles concernent le format et l’ordre des messages, ainsi que les actions possibles
lors de leur émission et de leur réception.
Les protocoles de l’Internet sont normalisés par l’IETF (Internet Engineering Task Force) et
décrits dans des RFC (Request For Comments).
5 • Les unités et systèmes de communication 57

Couches OSI Fonctions Protocoles


7. Application Assure aux utilisateurs et aux processus applicatifs
l’accès aux services réseau : accès aux ressources
distantes, communication entre processus distants,
services de messagerie, d’annuaire, de gestion du
réseau, etc.
6. Présentation Se charge de la représentation des données que HTTP – HyperText
les processus applicatifs s’échangent. Masque Transfer Protocol
l’hétérogénéité des techniques de codage, de FTP – File
compression, de cryptage des différents systèmes. Transfer Protocol
SMTP – Simple
5. Session Fournit aux processus d’application les moyens
Mail Transfer
nécessaires pour synchroniser leurs dialogues, les
Protocol, etc.
interrompre ou les reprendre, tout en assurant la
cohérence des données échangées.
4. Transport Assure une transmission de bout en bout (émetteur
TCP –
à destinataire) des données. Maintient une certaine
Transmission
qualité de la transmission, notamment vis-à-vis de
Control Protocol
la fiabilité et de l’optimisation de l’utilisation des
UDP – User
ressources. Les objets échangés sont souvent appelés
Datagram Protocol
messages (comme pour les couches supérieures).
3.Réseau Achemine les données à travers un ensemble de
réseaux via des systèmes intermédiaires (routeurs)
Les objets échangés sont appelés paquets ou IP – Internet
datagrammes. Ils sont transmis séparément selon Protocol
un choix du meilleur chemin en fonction des conditions + ICMP, ARP
du réseau, de la priorité de service et d’autres facteurs
(routage).
2. Liaison Assure la transmission de données entre deux ou
plusieurs nœuds immédiatement adjacents. Détecte et
corrige, dans la mesure du possible, les erreurs issues
de la couche inférieure. Les objets échangés sont
souvent appelés trames (frames).
Ethernet,
1. Physique Fournit les moyens mécaniques, électroniques optiques, Token Ring,
fonctionnels et procéduraux nécessaires à l’activation, etc.
au maintien et à la désactivation des connexions
physiques utiles à la transmission de trains de bits.
© Dunod – Toute reproduction non autorisée est un délit.

La combinaison de protocoles la plus classique, ou « pile TCP/IP », est la suivante :


– Au niveau des couches hautes (5, 6, 7), on trouve tous les protocoles applicatifs pour le
web (HTTP), le transfert de fichiers (FTP) ou encore le courrier électronique (SMTP).
– Au niveau transport (couche 4), on peut choisir selon les besoins entre TCP et UDP.
TCP est un protocole avec connexion préalable qui assure une transmission fiable des
paquets, avec détection et correction des erreurs de bout en bout. UDP est un protocole
sans connexion préalable qui ne garantit ni la bonne livraison, ni l’ordre, ni l’unicité des
datagrammes.
– Au niveau réseau (couche 3), le protocole IP assure l’acheminement au mieux (best-effort
delivery) des paquets. Il est complété par ICMP (Internet Control Message Protocol), qui
58 Partie 1. Les couches basses

achemine les messages de contrôle et d’erreur, et ARP (Address Resolution Protocol), qui
fait l’interface avec les couches basses en traduisant les adresses IP en adresses MAC. IP
s’appuie sur les protocoles existants des couches basses (2, 1), comme Ethernet ou Token
Ring, qui s’occupent de la livraison des trames entre nœuds d’un même réseau local.

La figure 5.5 illustre un transfert de fichiers entre machines d’un réseau local avec FTP.
Chaque couche gère son encapsulation et son protocole. Le logiciel client FTP et le serveur
FTP communiquent au niveau applicatif selon le protocole FTP et le format de données qu’il
définit. Du côté client, les requêtes FTP sont encapsulées dans des messages TCP, au niveau
de la couche 4, puis dans des paquets IP, au niveau de la couche 3, et enfin dans des trames
Ethernet qui sont transmises au serveur. À l’arrivée, les requêtes sont extraites en remontant
les couches en sens inverse jusqu’à leur traitement par le serveur FTP. Les réponses suivent
le chemin retour en descendant les couches du côté serveur et en les remontant du côté client.

données
FTP
Client FTP Serveur FTP
Protocole FTP

en-tête données
TCP FTP
TCP TCP
Protocole TCP

en-tête en-tête données


IP TCP FTP
IP IP
Protocole IP

en-tête en-tête en-tête données


Ethernet IP TCP FTP
Ethernet Ethernet
Protocole Ethernet

F IGURE 5.5 Un transfert de fichier par FTP

c) L’adressage dans les réseaux


® Les adresses MAC
Les adresses MAC (Media Access Control) ou adresses physiques relèvent de la couche
liaison. Une adresse MAC est un identifiant sur 48 bits associé à chaque carte ou autre
interface réseau. Cet identifiant est unique au monde sauf si l’utilisateur l’a modifié. Le
protocole Ethernet utilise les adresses MAC pour faire communiquer des équipements entre
eux sur un réseau local.
5 • Les unités et systèmes de communication 59

® Les adresses IP
Les adresses IP ou adresses logiques relèvent de la couche réseau. Ce sont des identifiants
associés aux interfaces avec un réseau IP. Toutes les machines connectées à Internet, par
exemple, doivent posséder une adresse IP.
Les adresses IP comportent 32 bits (4 octets) dans la version IPv4, exprimés comme 4 entiers
décimaux séparés par des points, et 128 bits dans la version IPv6, exprimés comme 8 groupes
de 4 hexadécimaux séparés par des doubles points.
Exemples
IPv4 : 194.214.218.100.
IPv6 : FE80:0000:0000:020C:76FF:FE21:1C3B.
Les adresses IP sont publiques si elles sont enregistrées (routables) sur Internet et uniques
au niveau mondial. Elles sont privées si elles ne sont utilisables que dans un réseau local
et uniques dans ce réseau seulement. Pour connecter un réseau doté d’adresses privées à
Internet, on peut utiliser un routeur qui fait de la traduction d’adresses (NAT pour Network
Address Translation) entre sa propre adresse publique et les adresses privées du réseau.
Une adresse IP contient une partie qui identifie le réseau (netid) et une partie qui identifie
l’hôte (hostid) dans le réseau. Des machines d’un même réseau, interconnectées par un hub
ou un switch, peuvent communiquer directement. Un routeur est nécessaire si les machines
sont sur des réseaux différents. On extrait le netid par un ET bit à bit entre l’adresse IP et un
masque réseau et le hostid par un ET avec la négation du masque.
Exemple
11000000 10101000 00000010 10010110 192.168.2.150 adresse
ET 11111111 11111111 11111111 00000000 255.255.255.0 masque
inetd 11000000 10101000 00000010 00000000 192.168.2 réseau

® L’adressage IP par classes


Ce système de distribution d’adresses, aujourd’hui obsolète, définit trois classes d’adresses.
En classe A, les adresses commencent par 0 et la partie réseau occupe 7 bits (masque
255.0.0.0), ce qui autorise, en tenant compte des adresses interdites, 126 réseaux de
16 777 214 hôtes. En classe B, les adresses commencent par 10 et la partie réseau occupe
14 bits (masque 255.255.0.0), ce qui autorise 16 382 réseaux de 65 534 hôtes. En
© Dunod – Toute reproduction non autorisée est un délit.

classe C, les adresses commencent par 110 et la partie réseau occupe 21 bits (masque
255.255.255.0), ce qui autorise 2 097 150 réseaux de 254 hôtes.
Ne sont pas utilisables comme adresses d’équipements :
– les adresses avec tous les bits du hostid à 0 (adresses réseau),
– les adresses avec tous les bits du hostid à 1 (adresses de diffusion générale ou broadcast),
– certaines adresses spéciales, comme l’adresse de l’hôte (localhost) 127.0.0.1,
– les adresses privées dans chaque classe (par exemple, de 192.168.0.0 à 192.168.
255.255 pour la classe C).

Dans ce système, si on a besoin de 100 000 adresses, il faut un réseau de classe A et


16 677 214 adresses ne sont pas utilisées, ce qui a vite été considéré comme inacceptable.
60 Partie 1. Les couches basses

® Les sous-réseaux
Pour faire face à la pénurie d’adresses, la notion de sous-réseau a été introduite en 1984.
La partie hôte peut être décomposée en une partie sous-réseau (subnetid) et une partie hostid
dans le sous-réseau. Par exemple, un réseau de classe B peut être découpé en 256 sous-réseaux
de 254 hôtes ou en 64 sous-réseaux de 1 022 hôtes. Le masque de sous-réseau, dès lors non
déductible de la classe et de taille variable, peut être résumé par le nombre de bits à 1 qu’il
contient, indiqué après l’adresse (ex. : 192.168.1.0/24 pour une adresse de classe C).
Exemple
Pour définir 4 sous-réseaux à l’adresse 192.168.1.0/24, il faut ajouter 2 bits au masque
de la classe C, soit 255.255.255.192 ou /26.
11111111 11111111 11111111 11 xxxxxx
netid subnetid hostid

Les 6 bits du hostid donnent 62 adresses dans chacun des 4 sous-réseaux (à cause des deux
adresses réseau et broadcast interdites).
Sous-réseau 192.168.1.0/26 : adresses 192.168.1.1 à 192.168.1.62
Sous-réseau 192.168.1.64/26 : adresses 192.168.1.65 à 192.168.1.125
Sous-réseau 192.168.1.128/26 : adresses 192.168.1.129 à 192.168.1.190
Sous-réseau 192.168.1.192/26 : adresses 192.168.1.193 à 192.168.1.254

® L’adressage IP hors classes


En 1993, l’adressage CIDR (Classless Inter-Domain Routing) supprime toute référence à la
notion de classe de réseau. La partie netid peut prendre n’importe quelle longueur x (adresse
a.b.c.d/x). Par exemple, une entreprise qui a besoin de 2 000 adresses, en reçoit un bloc
de 2 048 sous la forme a.b.c.d./21 (masque 255.255.248.0). Cela équivaut dans
l’ancien système a un regroupement de 8 réseaux de la classe C (notion de supernet).
Mais la seule solution pérenne, devant l’explosion de la demande d’adresses liée aux objets
connectés, réside dans la généralisation de l’adressage IPv6.

5.2.3 Les matériels réseau


® Les matériels de la couche physique
Les matériels que l’on peut trouver à ce niveau ne sont concernés que par les bits échangés.
Ils sont de plusieurs types :
– supports de transmission : câbles, fibres optiques, sans fil – Wi-Fi, Bluetooth, satellite,
avec chacun leur connectique propre,
– interfaces réseau (cartes réseau),
– modems, qui permettent les transmissions via le réseau téléphonique analogique (le signal
analogique est une fréquence porteuse, modulée pour représenter les bits),
– concentrateurs (hubs), qui permettent de concentrer le trafic réseau provenant de plusieurs
nœuds,
5 • Les unités et systèmes de communication 61

– répéteurs (repeaters), qui permettent de régénérer un signal entre deux nœuds du réseau
afin d’augmenter la distance possible entre eux.

® Les matériels de la couche liaison


Un pont (bridge) interconnecte deux segments distincts du réseau, soit de technologies
différentes, soit de même technologie, mais physiquement séparés à la conception. Il possède
des capacités de conversion des formats de transmission de données, contrairement au
concentrateur qui n’opère qu’au niveau des bits.
Un pont filtrant est un pont qui a la possibilité de filtrer les trames en se basant sur des
caractéristiques telles que les adresses MAC des interfaces réseau, le type de protocole de
niveau 3 transporté, la longueur de la trame, etc.
Un commutateur de niveau 2 (switch) est un pont multiport (jusqu’à plusieurs centaines). Il
analyse les trames arrivant sur ses ports d’entrée (adresses MAC source et destination), les
filtre et les aiguille sur les ports de sortie adéquats (fonction de commutation).

® Les matériels de la couche réseau


Un routeur, ou commutateur de niveau 3, assure le routage des paquets entre des réseaux
différents, c’est-à-dire la détermination du chemin qu’ils doivent emprunter. C’est possible
grâce au mode d’adressage global par les adresses IP. Les routeurs tiennent à jour des tables
de routage, véritable cartographie des itinéraires à suivre en fonction de l’adresse visée. Il
existe de nombreux protocoles dédiés à cette tâche, comme OSPF, RIP, etc.

® Les matériels de la couche transport


Une passerelle applicative (gateway) permet de faire la liaison entre deux réseaux, en offrant
des services de plus haut niveau qu’un simple routeur, tels que pare-feu (firewall) pour faire
respecter des politiques de sécurité, mandataire (proxy) pour la mise en cache, le filtrage,
l’anonymat, etc. Par exemple, une box Internet est une passerelle applicative fournie par les
fournisseurs d’accès Internet (FAI) incluant en général les fonctionnalités de modem, routeur,
point d’accès Wi-Fi, gestion des flux télévision sur IP et téléphonie sur IP, etc.
© Dunod – Toute reproduction non autorisée est un délit.

5.3 LES SYSTÈMES DE COMMUNICATION


5.3.1 Les réseaux domestiques
La solution minimale consiste à connecter les cartes réseau de deux ordinateurs (ou deux
matériels de même nature, ET ou EC) par un câble Ethernet croisé, qui croise les paires
d’émission et de réception et se termine par des prises RJ45. Les deux machines peuvent
alors s’échanger des données et partager des ressources comme une imprimante locale à une
des machines, des fichiers, etc.
Une solution plus complète, décrite par la figure 5.6, inclut une box (modem/routeur)
connectée d’un côté à Internet, par exemple via une prise RJ11 et le réseau téléphonique
commuté, et de l’autre côté à un ensemble d’équipements (ordinateurs, imprimante réseau,
décodeur TV, téléphone, domotique, etc.) par des câbles Ethernet droits.
62 Partie 1. Les couches basses

Si leur nombre est important, un switch peut démultiplier le nombre de prises RJ45 de la box.
Les réseaux domestiques peuvent inclure également des connexions sans fil (Wi-Fi) et des
connexions via le réseau électrique domestique, selon la technologie du courant porteur en
ligne utilisant des modules (ou « prises ») CPL.

TV
Module Module
Courant électrique
Décodeur TV CPL CPL
RJ45
RJ45

Internet
Téléphone BOX RJ11 via RTC
RJ45

RJ45
Wi-Fi
Ordinateur
portable Ordinateur
xe

Smartphone

F IGURE 5.6 Un réseau domestique

5.3.2 Les réseaux d’entreprise


Un réseau d’entreprise comprend de multiples serveurs et postes clients, souvent distribués
géographiquement. Il est connecté à Internet et héberge de nombreux services réseau comme
DNS (nommage), DHCP (configuration automatique), HTTP (web), SMTP (messagerie), etc.
Une des problématiques dans un réseau d’entreprise consiste à séparer les serveurs qui sont
nécessairement accessibles depuis Internet (serveurs HTTP, SMTP, FTP, etc.), en les pla-
çant dans ce qu’on appelle une « zone démilitarisée », ou DMZ, des serveurs (applications,
bases de données, etc.) et postes clients du réseau interne qui doivent rester inaccessibles de
l’extérieur.
Une architecture possible utilise un premier firewall en frontal derrière le routeur connecté
à Internet. Il donne accès aux serveurs de la DMZ. Un second firewall protège le réseau
interne (cf. figure 5.7). La politique de sécurité au niveau général est facile à comprendre. Elle
consiste à interdire le trafic d’Internet vers le réseau interne et à autoriser le trafic d’Internet
vers la DMZ. Le trafic de la DMZ vers le réseau interne est interdit, puisque la DMZ est
assimilable à Internet. En général, les trafics du réseau interne vers la DMZ et du réseau
interne vers Internet sont autorisés.
5 • Les unités et systèmes de communication 63

Mais, dans le détail, la mise en place d’une DMZ est une opération complexe à réserver à
des administrateurs aguerris. Par exemple, si le serveur HTTP fait appel à la même base de
données que des applications internes, ni le placement de la base en DMZ, ni son placement
dans le réseau interne ne sont satisfaisants. Il faut envisager une réplication, au moins
partielle, de cette base de données. On procède aussi souvent au dédoublement du serveur
DNS, avec un serveur dans le réseau interne pour les adresses locales et un serveur dans la
DMZ pour les adresses externes.

Internet Firewall
Routeur
externe

DMZ

Firewall HTTP DNS ...


interne

Réseau interne

Serveurs applicatifs

F IGURE 5.7 Un réseau d’entreprise avec DMZ

5.3.3 Le réseau Internet


Internet se compose d’une multitude de réseaux interconnectés qui couvrent toute la planète.
Chaque réseau est sous le contrôle d’une entité unique, le plus souvent un FAI (Fournisseur
d’Accès à Internet, ou ISP pour Internet Service Provider), mais parfois aussi une université,
© Dunod – Toute reproduction non autorisée est un délit.

une armée, etc.


Tous ces réseaux sont interconnectés, soit par des liaisons directes, soit par des points
d’échange (IXP pour Internet eXchange Point). Ces échanges peuvent se limiter au trafic
entre leurs propres utilisateurs, dans le cadre de contrats de peering, ou bien inclure le trafic
de tiers, dans le cas de contrats de transit.
On distingue trois niveaux d’opérateurs (FAI) :
– au niveau 3 : les opérateurs locaux ou résidentiels, auxquels se connectent les petits
utilisateurs locaux,
– au niveau 2 : les opérateurs régionaux, par exemple nationaux, auxquels se connectent les
gros utilisateurs,
– au niveau 1 : les opérateurs mondiaux, qui gèrent les réseaux fédérateurs d’Internet
(dorsales ou backbones), à base de fibres optiques à très haut débit.
64 Partie 1. Les couches basses

Les ordinateurs, qui se situent à la périphérie d’Internet, sont connectés à un opérateur, le


plus souvent de niveau 3, via un réseau local comportant un routeur connecté au réseau
de l’opérateur ou via le réseau téléphonique et un point de présence (POP pour Point Of
Presence) de l’opérateur.
La figure 5.8 schématise cette organisation hiérarchisée d’Internet. On note que les opérateurs
de niveau 1 sont en général interconnectés directement, que les opérateurs de niveau 2 passent
le plus souvent par les opérateurs de niveau 1, bien que des liaisons directes entre opérateurs
de niveau 2 soient aussi possibles, et que les opérateurs de niveau 3 passent systématiquement
par les opérateurs de niveau 2.
Ordinateur
Ordinateur Routeur
Réseau
Réseau POP
local
téléphonique

IXP

Dorsale Niveau
Niveau
1 Niveau
2
3

F IGURE 5.8 La structure du réseau Internet

5.3.4 Les réseaux sans fil


® Les réseaux sans fil avec infrastructure
Les réseaux sans fil actuels, téléphoniques comme GSM (2G) ou UMTS (3G) et informatiques
comme le Wi-Fi, utilisent une infrastructure de stations de base.
Par exemple, un téléphone mobile GSM doit se connecter à une station de base ou antenne
(BTS pour Base Transceiver Station). Cette station de base est connectée par liaison filaire
à un contrôleur de stations de base (BSC pour Base Station Controller) d’une certaine zone
géographique appelée cellule (d’où le nom de téléphone cellulaire parfois utilisé). Les BSC
sont connectés à des centres de commutation de service mobile (MSC pour Mobile-service
Switching Centre), qui organisent le transfert des messages dans le réseau (cf. figure 5.9).
Ces centres de commutation sont également reliés au réseau téléphonique commuté et
à Internet. Les localisations des mobiles sont enregistrées à tout instant dans la base de
5 • Les unités et systèmes de communication 65

HLR AuC

VLR
Internet, réseau commuté
MSC
MSC MSC
Administration
du réseau
BSC BSC

Liaison laire

Antenne (BTS)

Liaison aérienne
Cellule
Mobile

F IGURE 5.9 Le réseau GSM

données VLR (pour Visitor Location Register) du centre de commutation concerné. Une
autre base de données, HLR (pour Home Location Register), contient les données sur les
abonnés locaux du centre de commutation, en particulier leur localisation. Grâce à ces
données, plus une authentification gérée par l’AuC (Authentication Center), la mise en
communication et le transfert des données peut se faire vers le MSC puis le BSC puis le
mobile du destinataire de l’appel. Le réseau cellulaire est prévu pour supporter la mobilité
grâce à la gestion du handover, c’est-à-dire le passage d’une cellule à une autre sans
interruption de la communication.

Dans le cas des réseaux locaux Wi-Fi, les clients peuvent se connecter, comme le montre la
figure 5.10 :
– à un unique point d’accès (station de base ou « borne » Wi-Fi),
– à un des points d’accès d’un réseau de points d’accès, connectés en filaire,
© Dunod – Toute reproduction non autorisée est un délit.

– directement de client à client sans passer par un point d’accès.

Sans l
Filaire Point
PA PA PA
d'accès

Client

Mode infrastructure Mode ad hoc

F IGURE 5.10 Les architectures de réseau Wi-Fi


66 Partie 1. Les couches basses

Remarque
Le handover ou itinérance ne fait pas partie de la norme Wi-Fi mais peut être implanté grâce
à des solutions propriétaires,

® Les réseaux maillés


Une première évolution possible pour les réseaux téléphoniques consiste à supprimer
l’infrastructure filaire entre les stations de base (SBi dans la figure 5.11) en les autorisant à
communiquer entre elles directement par liaison radio. Cela permet, par exemple, d’installer
un réseau sans fil à l’échelle limitée d’une ville.

Cellule Cellule
SB2 2 3
SB3

SB1 SB4
Cellule
Cellule
1
4

Téléphone A Téléphone B

F IGURE 5.11 Un réseau téléphonique sans liaisons filaires

On entre dans le cadre plus général des réseaux maillés (mesh networks), filaires ou sans fil,
où les nœuds sont connectés de pair à pair, sans hiérarchie centrale. Chaque nœud doit être
capable de recevoir, envoyer et relayer les messages vers d’autres nœuds du réseau.
Les réseaux maillés, sans infrastructure préétablie, ont été utilisés initialement par les
militaires sur le champ de bataille. Ils sont aussi utilisables après une catastrophe naturelle,
pour remettre en place rapidement un réseau de communication sans avoir à installer
d’infrastructure.

® Les réseaux ad hoc dynamiques


Une deuxième évolution, plus radicale, consiste à supprimer complètement les stations de
base et à permettre aux mobiles situés à portée de communication de constituer un réseau à
structure dynamique.
Au contraire des réseaux ad hoc Wi-Fi (cf. figure 5.10) ou Bluetooth, où le graphe
des équipements connectés est défini statiquement et complet, en téléphonie mobile le
graphe est dynamique et incomplet : tout mobile doit être capable de relayer les messages
pour d’autres mobiles non directement liés (cf. figure 5.12). On parle de réseau ad hoc
dynamique ou MANET (pour Mobile Ad hoc NETwork). Le caractère dynamique du graphe
d’interconnexion rend impossible l’utilisation des algorithmes de routage classiques de
l’Internet, comme BGP et OSPF. De nouvelles familles d’algorithmes de routage sont
nécessaires comme DSDV, DSR ou OLSR.
5 • Les unités et systèmes de communication 67

Les réseaux ad hoc dynamiques devraient permettre de construire des réseaux de capteurs de
grande envergure pour la surveillance environnementale, la gestion énergétique ou le contrôle
du trafic routier urbain. Les réseaux ad hoc véhiculaires permettront des communications au
sein d’un groupe de véhicules proches et avec les équipements fixes du bord de route à portée
des véhicules.

C
B
D

A Mobile

F IGURE 5.12 Un réseau ad hoc dynamique

5.3.5 L’Internet des objets


Les nouvelles générations de réseaux sans fil peuvent être considérées comme un élément
d’une évolution plus globale, appelée Internet des objets ou Internet des choses (IoT pour
Internet of Things).
Il n’en existe pas de définition unifiée et partagée. Certaines insistent sur les aspects
techniques, comme la convergence des identifiants de l’Internet, les URI, et des identifiants
des objets du monde réel, les puces RFID. D’autres définitions insistent plutôt sur les
usages potentiels résultant de la continuité ainsi créée entre le monde physique et le monde
numérique. On rappelle que le système RFID (Radio Frequency IDentification) permet de
mémoriser, lire et écrire sans contact des données sur des radio-étiquettes (RFID tag ou
transponder), qui peuvent être collées ou incorporées à presque tous les objets et organismes
vivants. La définition sans doute la plus complète caractérise « l’Internet des objets comme
un réseau de réseaux qui permet, via des systèmes d’identification électronique normalisés
et unifiés, et des dispositifs mobiles sans fil, d’identifier directement et sans ambiguïté des
© Dunod – Toute reproduction non autorisée est un délit.

entités numériques et des objets physiques et ainsi de pouvoir récupérer, stocker, transférer et
traiter, sans discontinuité entre les mondes physiques et virtuels, les données s’y rattachant »
[BBMF09].
Sous l’angle technique, cela conduit à de multiples enjeux parmi lesquels :
– l’identification des objets : améliorations du système RFID, autres types de puces, comme
les puces optiques,
– le recueil des données : capteurs/actionneurs miniaturisés, utilisation des nanotechnologies,
– les réseaux sans fil : nouvelles générations de réseaux, réseaux de communication de
proximité (NFC pour Near Field Communication), pour les communications sur quelques
centimètres,
– le traitement des masses de données (ou big data),
68 Partie 1. Les couches basses

– le web sémantique : il vise aujourd’hui à faciliter l’exploitation par des agents logiciels
de données structurées qui donnent du sens au contenu du web. Par exemple, via du
balisage XML et des métadonnées dont le sens est défini par des ontologies, c’est-à-dire
des ensembles organisés de concepts pour des domaines précis. Les techniques du web
sémantique appliquées à l’Internet des objets pourraient permettre de partager, réutiliser
et combiner des informations et connaissances riches de sens sur les objets. Certains
qualifient de « web 3.0 » ce rapprochement de l’Internet des objets et du web sémantique.
5 • Les unités et systèmes de communication 69

EXERCICES

Exercice 5.1. Modèle OSI.


Parmi les éléments suivants, indiquer à quelle couche du modèle OSI ils se rapportent :
telnet adresse IP
FTP UDP
routeur adresse MAC
carte réseau commutateur (ou switch)
hub paire torsadée

Exercice 5.2. Adresses IP.


Soit l’adresse 145.245.45.225.
a) Quelle est sa classe d’adresse ?
b) Quel est le masque de cette classe ?
c) Quelle est l’adresse réseau ?
d) Quel est le masque modifié avec 60 sous-réseaux ?
e) Quelle est l’adresse du sous-réseau ?
f) Quel est le numéro d’hôte sur ce sous-réseau ?

Exercice 5.3. Mise en place de sous-réseaux.


Une organisation s’est vu attribuer l’adresse 200.35.1.0/24. Elle souhaite définir un
masque qui permette d’adresser jusqu’à 20 hôtes dans chaque sous-réseau.
a) Combien de bits sont nécessaires sur la partie hôte de l’adresse attribuée pour adresser
jusqu’à 20 hôtes ?
b) Quel est le nombre maximum d’adresses d’hôte utilisables dans chaque sous-réseau ?
c) Quel est le nombre maximum de sous-réseaux ainsi définis ?
d) Quelles sont les adresses de tous ces sous-réseaux ?
e) Quelle est l’adresse de broadcast du troisième sous-réseau ?
© Dunod – Toute reproduction non autorisée est un délit.

Exercice 5.4. Adresses MAC.


La structure d’une adresse MAC est la suivante : un bit qui indique s’il s’agit d’une adresse
individuelle (unicast, 0) ou de groupe (1), un bit qui indique s’il s’agit d’une adresse
universelle (0) ou d’une adresse locale (1), 22 bits pour coder le constructeur, 24 bits pour
coder chaque produit de ce constructeur.
a) Combien de constructeurs peuvent être identifiés ?
b) Combien d’interfaces peuvent être identifiées pour chaque constructeur ?
c) Comment fonctionne le filtrage des adresses MAC comme méthode de contrôle d’accès,
par exemple pour sécuriser un réseau Wi-Fi ?
d) Pourquoi le filtrage des adresses MAC est une méthode de contrôle d’accès très peu fiable ?
70 Exercices

Exercice 5.5. DMZ et politique de sécurité.


Une entreprise dispose d’un pare-feu pour contrôler les accès à son réseau interne et sa DMZ
où sont déployés ses serveurs HTTP et DNS. Le réseau et sa politique de sécurité sont décrits
par la figure et le tableau qui suivent.
a) Analyser les politiques correspondant aux quatre paires de règles (1,2), (3,4), (5,6) et (7,8)
du tableau.
b) Parmi les paquets suivants, lesquels seront acceptés ou refusés ?
paquet protocole adresse port adresse port
source source dest. dest.
p1 TCP 172.16.0.30 1045 12.230.24.45 443
p3 UDP 172.16.10.5 6810 172.17.0.2 53
p3 TCP 140.10.2.1 8000 172.17.0.1 80
p4 UDP 17.14.3.3 6000 172.17.0.2 53
p5 TCP 172.17.0.1 80 1.2.3.4 9999

Internet
Eth0
LAN Firewall Wan0
172.16.0.0 /16
Eth1

Serveur HTTP 172.17.0.1 (port 80)


DMZ Serveur DNS 172.17.0.2 (port 53)
172.17.0.0 /16

No Interf. Interf. Adresse Adresse Protocole Port Port Action


entrée sortie IP source IP dest. source dest.
1 Eth0 Eth1 172.16.0.0 172.17.0.1 TCP > 1024 80 Accepter
2 Eth1 Eth0 172.17.0.1 172.16.0.0 TCP 80 > 1024 Accepter
3 Eth0 Eth1 172.16.0.0 172.17.0.2 UDP > 1024 53 Accepter
4 Eth1 Eth0 172.17.0.2 172.16.0.0 UDP 53 > 1024 Accepter
5 Wan0 Eth1  172.17.0.1 TCP > 1024 80 Accepter
6 Eth1 Wan0 172.17.0.1  TCP 80 > 1024 Accepter
7 Eth0 Wan0 172.16.0.0  TCP > 1024 80 Accepter
8 Wan0 Eth0  172.16.0.0 TCP 80 > 1024 Accepter
9        Refuser
Chapitre 6

Représentation, codage et numérisation

6.1 LES DONNÉES EN MACHINE


Dans les systèmes informatiques, toutes les données sont stockées, traitées et transmises sous
une forme binaire, c’est-à-dire en utilisant des dispositifs à deux états, conventionnellement
représentés par 0 et 1. Cette forme de représentation est la plus adaptée au traitement
automatique des données. Il existe par ailleurs beaucoup de dispositifs à deux états permettant
le stockage des données, comme une surface aimantée ou non, ou bien un creux ou une bosse
sur une surface. Il existe aussi beaucoup de dispositifs à deux états permettant la transmission
des données, comme la présence ou l’absence de courant électrique dans un fil, ou bien la
modulation de la fréquence d’une onde porteuse.
© Dunod – Toute reproduction non autorisée est un délit.

Le probème consiste donc à exprimer ou transformer des données de toute nature en suites de
0 et de 1. On parle de représentation des nombres, de codage des caractères et de numérisation
des données multimédias, comme les sons, les images et les vidéos.

6.2 RAPPELS SUR LES SYSTÈMES DE NUMÉRATION


6.2.1 Définitions
Tout système de numération comporte un ensemble B de symboles (ou chiffres) et un
ensemble de règles permettant de représenter les éléments d’un ensemble fini ou non de
nombres. La taille de l’ensemble B, notée b dans la suite, s’appelle la base du système de
numération.
72 Partie 1. Les couches basses

Le binaire est le système de numération en base 2. Il comprend donc deux symboles,


représentés conventionnellement par 0 et 1.
Dans les systèmes de numération classiques, appelés systèmes de numération pondérés,
chaque chiffre a un poids qui dépend de sa position dans le nombre. Plus précisément,
un nombre N est représenté par une suite de chiffres cn , cn−1 , cn−2 , . . . , c1 , c0 dont
la valeur est comprise entre 0 et b − 1. Le chiffre ci de rang i a un poids égal à bi :
N = cn · bn + cn−1 · bn−1 + ... + c1 · b1 + c0 · b0
Exemples
En base 10 : 5 908 = 5 · 103 + 9 · 102 + 0 · 101 + 8 · 100 = 5 × 1 000 + 9 × 100 + 0 × 10 + 8 × 1
En base 2 : 11 001 = 1 · 24 + 1 · 23 + 0 · 22 + 0 · 21 + 1 · 20 = 16 + 8 + 0 + 0 + 1 = 25
En base 8 : 1 045 = 1 · 83 + 0 · 82 + 4 · 81 + 5 · 80 = 512 + 0 + 32 + 5 = 549

6.2.2 Octal et hexadécimal


Un nombre en binaire est long et difficile à lire et à dire par un humain. On préfère souvent le
représenter en octal (base 8) ou en hexadécimal (base 16), plus compact et moins uniforme, ce
qui facilite la communication entre humains. Il s’agit bien d’une représentation externe pour
l’homme et non d’une représentation interne pour la machine, qui reste toujours en forme
binaire.
L’octal est le système de numération en base 8. Il utilise huit chiffres : 0, 1, 2, 3, 4, 5, 6 et
7. Un chiffre octal correspond à trois chiffres binaires, car 8 = 23 . Pour passer du binaire
à l’octal, il suffit donc de découper dans la suite de bits des « tranches » de trois bits. Pour
passer de l’octal au binaire, chaque chiffre octal génère une tranche de trois bits.
Exemples
1 101 101 010 donne 1 552 en octal, qui est plus facile à lire et à dire.
632 en octal, noté 632(8) , donne 110 011 010.

L’hexadécimal est le système de numération en base 16. Il utilise seize chiffres (symboles) :
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E et F . Un chiffre hexadécimal correspond à quatre
chiffres binaires, car 16 = 24 . Pour passer du binaire à l’hexadécimal, il suffit donc de
découper des tranches de quatre bits. Pour passer de l’hexadécimal au binaire, chaque chiffre
hexadécimal génère une tranche de quatre bits.
Exemples
11 0110 1010 donne 36A en hexadécimal, plus compact et moins uniforme.
1A2(16) donne 0001 1010 0010.

6.2.3 Conversions binaire/décimal


La conversion de la base 2 à la base 10 découle directement de la définition du binaire.
Exemple
101 001 donne 1 · 25 + 0 · 24 + 1 · 23 + 0 · 22 + 0 · 21 + 1 · 20 = 32 + 8 + 1 = 41.
Pour la conversion inverse, de la base 10 à la base 2, on peut utiliser la méthode des « restes
successifs », qui consiste à calculer les restes des divisions entières successives du nombre
puis du quotient par la base autant de fois que possible, c’est-à-dire tant que le quotient n’est
6 • Représentation, codage et numérisation 73

pas nul. Le résultat est constitué des restes lus du dernier au premier. Montrons-le avec un
nombre N qui s’écrit sur 4 bits : a3 · 23 + a2 · 22 + a1 · 21 + a0 . N peut s’écrire aussi :
((a3 · 2 + a2 ) · 2 + a1 ) · 2 + a0 . Donc, la division de N par 2 donne : (a3 · 2 + a2 ) · 2 + a1
avec un reste = a0 . La division du quotient (a3 · 2 + a2 ) · 2 + a1 par 2 donne a3 · 2 + a2
avec un reste = a1 . La division du quotient a3 · 2 + a2 par 2 donne a3 avec un reste = a2 . La
division du quotient a3 (0 ou 1) par 2 donne 0 avec un reste = a3 . Les restes successifs sont
bien les chiffres binaires de la conversion, du dernier au premier.
Exemple
41 divisé par 2 donne 20 reste 1 ; c’est le chiffre des unités, à droite du nombre ;
20 divisé par 2 donne 10 reste 0 ;
10 divisé par 2 donne 5 reste 0 ;
5 divisé par 2 donne 2 reste 1 ;
2 divisé par 2 donne 1 reste 0 ;
1 divisé par 2 donne 0 reste 1 ; c’est le chiffre de la plus forte puissance de 2, à gauche du
nombre. D’où le nombre binaire : 101 001.

6.3 LA REPRÉSENTATION DES ENTIERS NATURELS (N)


Ce sont les entiers positifs et le zéro. On les appelle aussi « entiers non signés ».

6.3.1 Représentation en « binaire pur »


L’entier naturel est représenté par son écriture en base 2. Il s’agit du mode de représentation
habituel des entiers naturels en machine.
Il existe un danger de débordement, dû à la taille finie des mots utilisés pour représenter les
nombres en machine. Par exemple, avec des mots de 8 bits (un octet), il y a débordement
au-delà de 255. La plupart des processeurs se contentent d’indiquer un tel débordement
dans un bit du registre d’état de l’UAL, qui peut être testé par le programme. C’est donc
au programmeur de faire attention aux débordements possibles !
La table d’addition et la table de multiplication sont très simples :
+ 0 1 x 01
0 0 1 0 00
© Dunod – Toute reproduction non autorisée est un délit.

1 1 (1)0 1 01

Une multiplication se ramène à des recopies, des décalages et une addition.


Exemple
1011 (multiplicande)
X 101 (multiplicateur)
------
1011 (recopie du multiplicande)
0000 (décalage)
1011 (décalage et recopie du multiplicande)
------
110111 (addition)
74 Partie 1. Les couches basses

La soustraction peut se ramener à l’addition d’un nombre négatif dont la représentation est
étudiée au paragraphe 6.5.
La division peut se ramener à des soustractions itérées, tant que le résultat est supérieur ou
égal au diviseur.
Remarque
Selon les processeurs, les données représentées sur plusieurs octets comme les entiers
peuvent être disposés différemment en mémoire centrale. On suppose une mémoire
adressable par octets et des entiers sur 4 octets, ce qui est un cas très fréquent. Ces octets
peuvent être rangés en mémoire par poids décroissants dans les processeurs big-endian ou
« gros-boutistes », comme les microprocesseurs Motorola, ou par poids croissants dans
les processeurs little-endian ou « petits-boutistes », comme les microprocesseurs Intel.
L’entier 32 bits représenté en hexadécimal par 00057F 4A sera disposé sous cette forme
dans un microprocesseur gros-boutiste et sous la forme 4A7F 0500 dans un microprocesseur
petit-boutiste. Cela ne concerne pas les registres. Les échanges de valeurs restent possibles
entre processeurs des deux types car les transferts se font selon une norme commune. Par
contre, cette information est utile à un humain qui consulte un « vidage mémoire » (dump
mémoire) en octal ou hexadécimal.

6.3.2 Représentation en décimal codé binaire


En décimal codé binaire (DCB ou BCD en anglais), chaque chiffre décimal est codé en binaire
sur 4 bits (parfois 8), en conservant l’ordre des chiffres dans le nombre décimal.
Exemple
1 428 donne 0001 0100 0010 1000, soit 1 en binaire sur 4 bits, suivi de 4 en binaire sur 4 bits,
suivi de 2 en binaire sur 4 bits et de 8 en binaire sur 4 bits.
Remarque
Cette représentation consomme beaucoup de place mémoire. Son utilisation est aujourd’hui
assez peu fréquente. On la trouve cependant pour les types DECIMAL/NUMERIC des SGBD
et dans certains matériels numériques qui affichent des entiers.

6.4 LA REPRÉSENTATION DES DATES


Il existe de multiples représentations qui correspondent en général au temps écoulé depuis
une date de référence ou epoch, exprimé dans une certaine unité de temps. Par exemple :
– En Java, un instant dans le temps est représenté par le nombre de millisecondes écoulées
depuis le 1er janvier 1970 à 0 heure 0 minute 0 seconde 0 milliseconde GMT. La valeur est
rangée dans un entier de type long, sur 64 bits.
Exemple
La valeur courante peut être obtenue par l’instruction
Calendar.getInstance().getTimeInMillis();
– Les systèmes d’exploitation de type Unix comptent le nombre de secondes écoulées depuis
cette même date du 1er janvier 1970 à minuit, exprimé sur 32 bits dont un bit pour le signe.
Exemple
Le 23 août 2015 à 19:04:01 = 1 440 349 441 (commande Unix date ’+%c = %s’).
6 • Représentation, codage et numérisation 75

– Microsoft Excel enregistre les dates sous la forme du nombre de jours écoulés depuis le
1er janvier 1900.
Exemple
Le 1er janvier 2008 a comme représentation 39 448 car 39 448 jours se sont écoulés depuis
le 1er janvier 1900.

6.5 LA REPRÉSENTATION DES ENTIERS RELATIFS (Z)


Ce sont les entiers positifs, négatifs et le zéro. On les appelle aussi « entiers signés ». Il
existe trois modes principaux de représentation des entiers relatifs : avec bit de signe, en
complément à 2 et en excédent.

6.5.1 Représentation avec bit de signe


Le bit le plus à gauche est réservé pour le signe : 0 pour le signe + (afin que les positifs soient
identiques aux entiers naturels) et 1 pour le signe −.
Exemple
−5 sur un mot de 8 bits donne 1 000 0101.
Ce mode de représentation présente plusieurs défauts :
– Il existe deux zéros différents : +0 et −0.
– L’addition d’un positif et d’un négatif ne peut pas se faire par une simple addition des bits.
Un nombre positif additionné à un nombre négatif donnerait toujours un nombre négatif !
Pour déterminer le signe du résultat, il faut savoir quelle est la plus grande valeur absolue.
Les circuits de calcul correspondants sont donc assez complexes.

Pour ces raisons, cette forme de représentation en machine n’est plus utilisée aujourd’hui.

6.5.2 Représentation en complément à 2


On souhaite une représentation sur n bits telle que :
© Dunod – Toute reproduction non autorisée est un délit.

– les positifs soient identiques aux entiers naturels,


– l’addition des bits d’un nombre nb et de son opposé −nb donne toujours 0,
– il y ait à peu près autant de positifs que de négatifs.

Le complément à 2 est présenté tout d’abord dans le cas simple de mots de 3 bits. Il consiste
à choisir la correspondance binaires-entiers montrée sur le cercle de la figure 6.1 qui vérifie
les trois propriétés souhaitées. Sur la figure, les entiers relatifs sont à l’intérieur du cercle
et leurs représentations en binaire sont à l’extérieur du cercle. Les nombres dont le bit de
gauche (poids fort) est à 0 sont utilisés pour représenter les positifs, ce qui satisfait la première
propriété. Les nombres dont le bit de poids fort est à 1 sont utilisés pour représenter les
négatifs en choisissant un certain ordre qui permet de satisfaire la deuxième propriété. On
vérifie en effet sur le cercle que l’addition de nb et de −nb donne toujours 2n , c’est-à-dire 0
quand on ignore le bit de retenue qui sort (déborde) à gauche du mot de 3 bits. Enfin, la valeur
76 Partie 1. Les couches basses

médiane (100) est attribuée à −4 plutôt qu’à 4 afin que tous les négatifs commencent par 1
et tous les positifs commencent par 0. On satisfait ainsi la troisième propriété et on retrouve
aussi. . . un bit de signe !

000
0
111 -1 1 001 111 + 001 = (1)000
110 -2 2 010 110 + 010 = (1)000

101 -3 3 011
101 + 011 = (1)000
-4
100

F IGURE 6.1 Le complément à 2

En généralisant, on peut dire que le complément à 2 sur n bits d’un nombre binaire A,
noté c2(A), est tel que A + c2(A) = 2n , c’est-à-dire un 1 suivi de n zéros. Donc :
c2(A) = 2n − A = (2n − 1) − A + 1. Or 2n − 1 est une suite de n chiffres 1. (2n − 1) − A
revient à soustraire chaque bit de A à un 1. Si le bit vaut 0, le résultat est 1. Si le bit vaut
1, le résultat est 0. Autrement dit, on change les 0 en 1 et les 1 en 0 dans le nombre A.
C’est ce qu’on appelle le complément à 1. Reste finalement à ajouter 1 à ce complément à 1
pour obtenir le complément à 2. D’où la règle pratique pour obtenir le complément à 2 d’un
nombre binaire :
On remplace les 0 par des 1, les 1 par des 0 et on ajoute 1. On ne tient
jamais compte du bit de retenue qui sort à gauche du mot de n bits.
Exemple
On considère des mots de 8 bits (n = 8).
28 = 1 0000 0000 (1 plus 8 zéros).
28 − 1 = 1111 1111 (des 1 partout).
Soit le nombre A = 0000 1011 (c’est-à-dire 11 en décimal).
(28 − 1) − A = 1111 0100 (changement des 0 en 1 et des 1 en 0).
(28 − 1) − A + 1 = 1111 0101 (c’est le complément à 2 de 11, représentant −11).
On vérifie que A + c2(A) = 0000 1011 + 1111 0101 = (1)0000 0000 = 0, car on ignore le
bit qui déborde à gauche.

On note également que, si on applique deux fois la règle ci-dessus, on retrouve le nombre
positif : c2(c2(A)) = c2(2n − A) = 2n − (2n − A) = A.
Exemple
1111 0101 (-11)
0000 1010 (modification des 0 en 1 et des 1 en 0)
+ 1 (ajout de 1)
---------
0000 1011 (on retrouve 11).
6 • Représentation, codage et numérisation 77

Le complément à 2 présente les nombreux avantages suivants :


– On a un seul 0, codé par 0000 0000 ; en effet : c2(0) = 2n − 0 = 2n , soit un bit à 1 qui
sort à gauche et les n autres bits à 0.
0000 0000
1111 1111 (modification des bits)
+ 1 (ajout de 1)
---------
(1)0000 0000 (on ne tient pas compte du bit qui sort à gauche
donc -0 = +0 = 0000 0000)

– Le premier bit est aussi un bit de signe : les nombres strictement négatifs commencent
toujours par 1. En effet, en enlevant à 2n un nombre compris entre 1 et 2n − 1 on obtient
un nombre entre 2n − 1 et 1. Ces nombres commencent tous par 1 en binaire sur n bits.
– On peut additionner bit à bit un nombre positif et un nombre négatif sans se préoccuper
du signe. Le résultat est toujours correct. Considérons par exemple l’addition binaire
de x et y avec y < 0. On sait que y est représenté par c2(y) = 2n − y. Donc
x + y = x + 2n − y = x − y + 2n . Comme le 2n est perdu par débordement à gauche, le
résultat de l’addition est bien égal à x − y.
Exemple
0000 0111 (7)
+ 1111 1010 (-6)
-----------
(1)0000 0001 (débordement à gauche perdu et résultat = 1)

– On a vu que l’apparition d’un bit qui sort à gauche n’est pas nécessairement une erreur
de débordement en complément à 2. Les calculs incorrects correspondent à un report de
l’avant-dernier bit dans le dernier bit sans report du dernier bit en dehors du mot ou bien à
un report en dehors du mot sans report de l’avant-dernier sur le dernier bit.
Exemples
Deux calculs conduisant à des erreurs et se traduisant par des reports incorrects :
1 1 1
0100 0000 (64) 1000 0001 (-127)
+ 0100 0001 (65) + 1000 0001 (-127)
© Dunod – Toute reproduction non autorisée est un délit.

----------- -----------
(0)1000 0001 (-127 !) (1)0000 0010 (2 !)

Le complément à 2 est utilisé dans tous les processeurs pour représenter les entiers relatifs.
Il existe cependant un cas particulier où une autre représentation est employée. Elle est
présentée au paragraphe suivant.

6.5.3 Représentation en excédent (ou « biaisée »)


Cette représentation en excédent est utilisée pour représenter les exposants des nombres réels,
comme cela sera expliqué au paragraphe 6.6. Pour représenter l’intervalle [−i, + j], on ajoute
i à toutes les valeurs de l’intervalle : 0 représente donc la plus petite valeur négative (−i) et
i + j représente la valeur j. On parle « d’excédent à i » et cela correspond à un décalage de i
78 Partie 1. Les couches basses

pour tous les nombres. Comme valeur de i, on a intérêt à prendre le milieu de l’intervalle des
valeurs. Sur n bits, on peut ajouter 2n−1 ou 2n−1 − 1, car le centre se situe entre ces deux
valeurs.
Exemple
Sur 8 bits, 28−1 = 27 = 128.
En « excédent à 128 » :
−128 est représenté par 0,
−127 est représenté par 1,
−126 est représenté par 2,
...
−1 est représenté par 127,
0 est représenté par 128,
1 est représenté par 129,
...
126 est représenté par 254,
127 est représenté par 255.
On peut également définir un « excédent à 127 » pour l’intervalle [−127, + 128].

6.6 LA REPRÉSENTATION DES RÉELS (R)


Ce sont tous les nombres « à virgule ». C’est-à-dire
√ les rationnels, qui peuvent s’écrire comme
des fractions, et les irrationnels, comme 2 ou π.

6.6.1 Rappels sur la « notation scientifique »


Un nombre réel s’écrit avec une mantisse, m, et un exposant, e : nb = ± m · 10±e .
Exemples
123 000 = 1,23 · 105
0,0071 = 7,1 · 10−3 .
L’écriture d’un nombre réel en notation scientifique n’est pas unique.
Exemples
123 · 103 représente également 123 000
0,71 · 10−2 représente également 0,0071.
On peut fixer une règle de normalisation qui impose l’unicité de la représentation. Une règle
de normalisation possible peut stipuler que la mantisse doit commencer par 0,nccc, où n est
un chiffre non nul et c des chiffres quelconques.
Exemples
Avec cette règle, les valeurs normalisées de 123 000 et 0,0071 sont 0,123 · 106 et 0,71 · 10−2 .

6.6.2 Propriétés de la notation scientifique


Elle comporte un nombre fini de valeurs, alors qu’il y a une infinité de réels. On travaille donc
avec des valeurs approchées. Leur densité varie selon la proximité du 0 : plus on s’éloigne de
0 et plus la distance entre les nombres représentés s’accroît.
6 • Représentation, codage et numérisation 79

Exemple
En base 10, avec une mantisse à 4 chiffres normalisée en 0,n (où n est non nul) et un exposant
à deux chiffres, on peut représenter 900 × 199 × 2 = 358 200 nombres différents. Des très
petits et des très grands !
Dans les zones Z4 et Z5 de la figure 6.2, les nombres sont très proches les uns des autres
(forte densité) à proximité de 0 et très éloignés les uns des autres (faible densité) du côté des
grands nombres. Par exemple, entre 0,998 · 100 et 0,999 · 100 , l’écart entre deux nombres
consécutifs est de 0,001. Au contraire, entre 0,998 · 1020 et 0,999 · 1020 , l’écart entre deux
nombres consécutifs est de 1017 , soit 100 000 000 000 000 000 !
Dans la zone Z3, les nombres sont trop proches de 0 pour être distingués de 0 (underflow).
Dans les zones Z1 et Z2, les nombres sont trop grands pour être représentés (overflow).

Z4 0
Z5
99

Z1 -0,999 10 -99
-0,1 10
Z3 0,1 10
-99
0,999 10
99

Z2

F IGURE 6.2 La notation scientifique

Avec la notation scientifique, la multiplication de deux réels consiste à additionner leurs


exposants, multiplier leurs mantisses et normaliser le résultat. L’addition exige une
dénormalisation des nombres pour avoir les mêmes exposants avant l’opération, puis
une renormalisation après l’opération.

6.6.3 Représentation de la partie fractionnaire en binaire


Il suffit de généraliser la notation positionnelle aux puissances négatives. Après la virgule, les
valeurs des chiffres binaires correspondent aux puissances négatives de 2 :
2−1 = 1/2 = 0,5
2−2 = 1/4 = 0,25
2−3 = 1/8 = 0,125, etc.
Exemple
101,101 donne 1·22 +0·21 +1·20 +1·2−1 +0·2−2 +1·2−3 = 4+1+0,5+0,125 = 5,625.
© Dunod – Toute reproduction non autorisée est un délit.

Pour trouver la représentation binaire d’une partie fractionnaire, on fait une suite de
multiplications par 2 en retirant à chaque fois le chiffre avant la virgule jusqu’à obtenir 0.
Cette suite de chiffres retirés constitue la partie fractionnaire en binaire.
Exemple
0,375 · 2 = 0,750 ; on retire 0 ; on obtient 0,750
0,750 · 2 = 1,5 ; on retire 1 ; on obtient 0,5
0,5 · 2 = 1 ; on retire 1 ; on obtient 0 ; donc 0,375 donne 0,011 en binaire.

6.6.4 Représentation des réels en « virgule flottante »


On parle de virgule flottante pour une représentation avec exposant, car une variation de
l’exposant fait « flotter » (déplace) la position de la virgule. La norme IEEE 754 (IEEE pour
80 Partie 1. Les couches basses

Institute of Electrical and Electronics Engineers) est une norme quasi universelle pour la
représentation des réels en virgule flottante en machine.
Pour les mots de 32 bits (« réel en simple précision ») :
– le signe est représenté dans le premier bit (0 pour +, 1 pour −),
– l’exposant est représenté sur 8 bits en excédent à 127,
– la mantisse est normalisée sous la forme 1,bbb. Le 1, n’est pas représenté (on parle de « bit
caché » ou hidden bit). La suite de la mantisse est représentée sur 23 bits.

Le zéro est représenté par 32 bits à 0.


Par convention :
– quand l’exposant est rempli de 1 et la mantisse est à zéro, il s’agit de l’infini,
– quand l’exposant est rempli de 1 et la mantisse est différente de 0, il s’agit d’un code
d’erreur (un NaN pour Not a Number).

Exemple
1,5 en décimal donne 1,1 en binaire soit +1,1 · 20 .
L’exposant vaut 127 en excédent à 127.
Le nombre réel donne donc : 001111111(1,)1000...0, soit 3F C0 0000 en hexadécimal.

Pour les mots de 64 bits (« réel en double précision »), l’exposant est en excédent à 1 023
sur 11 bits et la mantisse occupe 52 bits. Il existe également une « précision étendue » sur
80 bits.
Comme la taille de la mantisse est finie, on est confronté inévitablement à des « erreurs
d’arrondi ». La norme IEEE 754 définit quatre modes de calcul pour l’arrondi : au plus proche
(mode par défaut), vers moins l’infini, vers plus l’infini et par troncature.

6.6.5 Représentation des réels en « virgule fixe »


La virgule flottante convient parfaitement aux applications de calcul scientifique, dans
lesquelles la place de la virgule peut varier énormément. Au contraire, dans les applications
de gestion, la virgule est souvent placée à une position donnée. En comptabilité, par exemple,
les nombres ont toujours 2 chiffres après la virgule pour les montants en euros et centimes
d’euros. On peut utiliser dans ce cas une représentation en « virgule fixe ».
Dans une représentation en virgule fixe, la virgule n’est pas représentée dans le nombre, qui
est représenté par un entier. Sa position est soit fixée à un emplacement donné, toujours le
même, soit définie par le programmeur.
Exemple
En langage COBOL, le symbole V (comme virgule) indique la place de la virgule dans les
déclarations de variables : SOMME PIC S9999V99 définit une variable réelle SOMME avec
un signe, quatre chiffres avant la virgule et deux chiffres après la virgule.
6 • Représentation, codage et numérisation 81

6.7 LE CODAGE DES CARACTÈRES


Le codage des caractères est important non seulement pour représenter en machine des
textes en langue naturelle mais aussi à cause du développement considérable des langages de
balisage à forme textuelle permettant de représenter des données structurées, comme XML,
HTML, JSON, YAML, etc. Plusieurs codes de caractères normalisés se sont succédé au fil
des années. Tout code associe de manière conventionnelle et plus ou moins arbitraire un
ensemble de caractères à des suites de bits.

6.7.1 Le code ASCII


Dans cette norme (American Standard Code for Information Interchange) chaque caractère
est codé sur 7 bits. On peut donc représenter 128 caractères différents, ce qui convient pour la
langue anglaise, dépourvue d’accents, mais ne convient pas pour beaucoup d’autres langues.
Les codes sont en général stockés et transmis sur un octet. Le 8e bit peut éventuellement être
utilisé pour faire du contrôle de parité (cf. paragraphe 6.11.1). La table du code ASCII est
donnée à l’annexe 1. Plusieurs points importants méritent d’être soulignés :
– Les codes compris entre 0 et 31 ne représentent pas des caractères affichables. Ces
codes, souvent nommés caractères de contrôle, sont utilisés pour indiquer des actions
aux terminaux informatiques. Par exemple, dans un fichier de texte, la fin d’une ligne est
représentée par un caractère de contrôle ou une paire de caractères de contrôle. Plusieurs
conventions coexistent :
• sous les systèmes de type Unix, comme Linux, AIX, Mac OS X, etc., la fin de ligne est
indiquée par un saut de ligne (caractère LF de code décimal 10),
• sous Mac OS jusqu’à la version 9, la fin de ligne est indiquée par un retour chariot
(caractère CR de code 13),
• sous les systèmes Microsoft Windows, la fin de ligne est indiquée par un retour chariot
suivi d’un saut de ligne (CR+LF sur 2 octets).
Ainsi, quand on ouvre un fichier ASCII créé par un système sous un autre système, il faut
souvent modifier les fins de ligne afin de pouvoir afficher le fichier de manière correcte.
Les éditeurs de texte évolués (comme WordPad mais pas Notepad sous Windows) peuvent
détecter le type de fin de ligne et agir en conséquence.
© Dunod – Toute reproduction non autorisée est un délit.

– Le code 32 correspond à l’espace.


– Les lettres se suivent dans l’ordre alphabétique (codes 65 à 90 pour les majuscules, 97 à
122 pour les minuscules), ce qui simplifie les comparaisons.
– Les chiffres sont rangés dans l’ordre croissant (codes 48 à 57), et les 4 bits de poids faibles
définissent la valeur en binaire du chiffre.

6.7.2 Le code ISO-8859-1 (ou Latin-1 ou « ASCII étendu »)


Cette norme de l’ISO (International Organization for Standardization) contient 256
caractères correspondant à tous les codes possibles sur 8 bits. Les 128 premiers caractères
sont ceux du code ASCII sur 7 bits. Les 128 caractères additionnels comprennent en
particulier les lettres accentuées, utilisées par les langues européennes courantes : allemand,
82 Partie 1. Les couches basses

espagnol, français (sauf les caractères Ÿ, œ et Œ), italien, néerlandais, norvégien, portugais,
suédois, etc. Cette norme est donc utilisée en Europe de l’Ouest, en Amérique, en Australie
et dans une grande partie de l’Afrique.
L’inconvénient principal de cette norme est la nécessité d’utiliser plusieurs jeux de caractères,
les normes ISO-8859-N avec N variant de 1 à 10, pour couvrir plusieurs langues. Or beaucoup
de documents sont typés à l’aide de métadonnées. Un et un seul jeu de caractères peut être
défini par la métadonnée d’encodage du document. Il est donc impossible de mélanger dans
un même document des alphabets qui ne sont pas définis par la même table de caractères,
comme par exemple ceux du français et de l’hébreu. Si l’encodage ne correspond pas à celui
du document, l’affichage devient illisible.
Exemple
En HTML, la balise <meta http-equiv="Content-Type" content="text/
html; charset=iso-8859-1" /> indique que le document utilise la table des
caractères ISO-8859-1.
En XML, <?xml version="1.0" encoding="iso-8859-1"?> fait de même. Par
défaut, c’est la table de caractères du système d’exploitation qui est utilisée.
La norme ISO-8859-15 a ajouté le symbole de l’euro et les caractères Ÿ, œ et Œ à la norme
ISO-8859-1. De manière parallèle, Windows-1252, disponible sur les systèmes Windows,
diffère de l’ISO-8859-1 par l’utilisation de caractères imprimables, comme le symbole de
l’euro, œ et Œ, à la place des caractères de contrôle de codes 128 à 159.

6.7.3 Unicode
Unicode est une norme développée par le Consortium Unicode qui vise à donner à tout
caractère de toute langue un nom et un identifiant numérique, quelle que soit la plateforme
informatique ou le logiciel utilisé. Unicode, dont la première publication remonte à 1991,
a été développé dans le but de remplacer l’utilisation des pages de caractères. La version
actuelle 5.1 définit plus de 120 000 caractères.
Unicode est défini suivant un modèle en couches. Les couches sont présentées ici en partant
de la plus éloignée de la machine :
– Le répertoire des caractères abstraits (Abstract Character Repertoire) : cette première
couche définit le jeu de caractères et leur donne des noms. Par exemple, le caractère Ç
est nommé « Lettre majuscule latine c cédille ».
– Le jeu de caractères codés (Coded Charater Set) : cette deuxième couche ajoute à la
table précédente un index numérique. Il ne s’agit pas d’une représentation en mémoire,
juste d’un nombre. Ce nombre, appelé point de code, est noté U+xxxx où xxxx est en
hexadécimal et comporte 4, 5 ou 6 chiffres. Ainsi, le caractère nommé « Lettre majuscule
latine c cédille » a comme point de code U+00C7.
– Le formalisme de codage des caractères (Character Encoding Form) : cette troisième
couche définit la représentation physique en machine. Elle spécifie quelles unités de
stockage (code units), octets ou bien mots de 16 ou de 32 bits, vont représenter un point
de code. On ne peut donc pas parler de la « taille d’un caractère Unicode » car elle dépend
du codage choisi et peut varier pour un même codage. Plus précisément, Unicode accepte
trois types de « format de transformation universelle » (Universal Transformation Format
6 • Représentation, codage et numérisation 83

ou UTF) pour représenter un point de code valide : UTF-8, UTF-16 et UTF-32. Le nombre
après UTF représente le nombre minimal de bits avec lesquels un point de code valide est
représenté :
• L’UTF-8 est la transformation la plus commune pour les applications Internet. Elle
utilise 1 à 4 octets selon les points de code, ce qui lui permet d’être en moyenne la
moins coûteuse en occupation mémoire (les caractères sur un octet sont ceux du code
ASCII).
• L’UTF-16 utilise 2 ou 4 octets. C’est un bon compromis lorsque la place mémoire n’est
pas trop restreinte, car la grande majorité des caractères des langues modernes peuvent
être représentés sur 16 bits. C’est notamment le codage qu’utilise la plateforme Java.
• L’UTF-32 est utilisé lorsque la place mémoire n’est pas un problème. L’avantage de
cette transformation est que tous les codes ont la même taille, 32 bits, ce qui facilite les
traitements sur les codes.

6.8 LA NUMÉRISATION DU SON

Un son est une vibration de l’air, c’est-à-dire une variation de la pression autour de la pression
atmosphérique normale (cf. figure 6.3). Par exemple, la vibration de la note LA est une
sinusoïde régulière de 440 cycles par seconde, autrement dit avec une fréquence de 440 hertz.
Pression

Cycle Temps

F IGURE 6.3 La note LA

Pour numériser un son quelconque, c’est-à-dire le transformer en une suite de nombres,


il faut mesurer la valeur prise par cette courbe à des intervalles de temps réguliers. Cet
« échantillonnage » du son est illustré par la figure 6.4.
© Dunod – Toute reproduction non autorisée est un délit.

0,99
0,92 0,88
0,85
0,80

0,60

0,28

F IGURE 6.4 L’échantillonage d’un son


84 Partie 1. Les couches basses

En qualité CD audio, il faut prendre 44 100 mesures par seconde. On dit qu’on échantillonne
à 44 100 hertz (ou 44,1 kHz). Dans un fichier WAV (format Microsoft), chaque mesure est
codée en binaire sur 16 bits (65 535 valeurs possibles) en mono et sur 2×16 bits en stéréo. Une
minute de son en qualité CD audio stéréo occupe donc (44 100×60×16×2)/(8×1024×1024)
≈ 10 Mo.
Tous les sons (paroles, bruits, musiques) sont des vibrations complexes que l’on peut
échantillonner ainsi. Mais cela génère un grand nombre de données par seconde. Une
autre approche consiste à décomposer la vibration complexe en une somme de vibrations
régulières (sinusoïdes). Pour chacune de ces vibrations régulières, comme le LA ci-dessus,
il suffit d’enregistrer sa fréquence en Hz. La transformation mathématique qui permet de
trouver les fréquences des vibrations régulières composant un signal quelconque s’appelle la
transformée de Fourier. On voit son application sur la figure 6.5.

F IGURE 6.5 Le son est à gauche et les fréquences trouvées sont à droite

C’est sur ce principe qu’est basé le format MP3 (MPEG Audio Layer 3) : on enregistre les
fréquences qui composent le signal, au moins les plus importantes, et on les note dans le
fichier MP3. À qualité sensiblement égale, une minute de son occupe environ 1 Mo (un
million d’octets), contre 10 Mo en WAV. Pour reconstituer le son, il suffit de générer et mixer
les signaux des différentes fréquences. Les logiciels qui créent des fichiers MP3 se basent sur
un modèle psycho-acoustique pour supprimer certaines fréquences inutiles, car non perçues
par l’oreille et le cerveau humain. Ce modèle psycho-acoustique fait toute la différence entre
les différents codeurs/décodeurs (codecs) MP3.

6.9 LA NUMÉRISATION DES IMAGES


Les images peuvent être représentées comme des ensembles de points, ou pixels (formats
bitmaps), ou comme des ensembles d’objets géométriques (formats vectoriels). Ce
6 • Représentation, codage et numérisation 85

paragraphe ne considère que les formats bitmaps, qui sont utilisés par les périphériques
d’affichage et les périphériques de saisie, comme les scanners.

6.9.1 Les images monochromes


Les images monochromes, noir et blanc, sont faciles à représenter. Chaque bit à 0 code un
pixel blanc et chaque bit à 1 code un pixel noir (cf. figure 6.6). Les gris peuvent être obtenus
visuellement par des mélanges de pixels blancs et de pixels noirs.
Une image monochrome en résolution 1 024 × 768 nécessite donc 786 432 bits, soit 96 ko
(kilo-octet, ou millier d’octets).

F IGURE 6.6 Une image bitmap noir et blanc

On peut améliorer notablement la qualité en associant à chaque pixel un niveau de gris, codé
sur 8 bits. La même image prendra alors 770 ko.

6.9.2 Les images couleur


La codification des couleurs peut se faire selon deux modes.

a) En couleurs indexées
L’image est une succession d’index qui font référence à une palette de couleurs. Les index sur
8 bits permettent de désigner 256 couleurs. La palette est une table stockée en début de fichier
et qui fait correspondre à chaque index une couleur décrite le plus souvent par un mélange de
© Dunod – Toute reproduction non autorisée est un délit.

trois couleurs primaires. En RGB, il s’agit du pourcentage de rouge, du pourcentage de vert


et du pourcentage de bleu, chacun sur 8 bits. Soit une palette de 256 couleurs prises parmi
256 × 256 × 256 = 16,7 millions.
Une image couleur en résolution 1 024×768 occupe (1 024×768×8+256×24)/(1 024×8) ≈
770 ko. Si on change de palette, le rendu de l’image change.

b) En couleurs vraies (true color)


Chaque pixel est décrit par un code couleur, par exemple en RGB. Comme on l’a vu ci-dessus,
avec 24 bits, on peut coder 16,7 millions de couleurs. Une image couleur en résolution
1 024× 768 et en 16,7 millions de couleurs occupe (1 024× 768× 24)/(1 024× 1 024× 8) ≈
2,25 Mo.
Au vu de ces chiffres, on comprend l’intérêt des techniques de compression.
86 Partie 1. Les couches basses

6.9.3 Les techniques de compression


On distingue les techniques de compression sans perte de données et les techniques de
compression avec pertes possibles de données.
La technique de compression sans perte de données la plus simple est le RLE (Run-Length
Encoding) : quand n octets successifs sont identiques (avec n supérieur à un seuil donné), on
les remplace par un marqueur spécial suivi du nombre de répétitions sur un octet, suivi de la
valeur de l’octet répété.
Exemple
On suppose que le seuil de répétition vaut 3 et que le marqueur est le caractère @ :
GGOOOOOOOOOXAAAAAAAM LLLLLLLLLL donne GG@9OX@7AM @10L.
Soit un passage de 30 à 14 caractères, correspondant à un gain de 53 %.

C’est une technique utilisable par exemple avec des images noir et blanc contenant des plages
homogènes de noir et de blanc. S’il y a peu de plages homogènes et si les paramètres sont
mal choisis, la méthode peut conduire à perdre de la place mémoire au lieu d’en gagner !

6.9.4 Le format JPEG


Le format JPEG permet une représentation numérique compressée des images. Il s’agit le plus
souvent d’une compression avec pertes de données, donc irréversible. L’algorithme exploite
des techniques proches de celles vues pour le son en MP3.
L’image est décomposée en petits carrés de 8 × 8 pixels. Chaque pixel est codé en
chrominance et luminance, des données qui permettent de reconstituer les couleurs primaires
rouge, vert et bleu. La matrice 8 × 8 pour chaque donnée de chrominance et luminance
est considérée comme un signal qui est décomposé en 8 × 8 fréquences par une variété
de la transformation de Fourier, dite transformée en cosinus discrète. Certaines fréquences,
auxquelles l’œil humain est peu sensible, sont supprimées. Les valeurs des fréquences
restantes sont elles-mêmes compressées (RLE et Huffman). Quand on enregistre une image
en JPEG, on peut choisir un taux de compression (de 1 % à 99 %), inversement proportionnel
à la qualité de l’image. En effet, cette qualité correspond à la précision avec laquelle on
conserve les résultats de l’analyse fréquentielle. Une image JPEG fortement compressée
apparaît très « pixélisée », avec des blocs 8 × 8 presque uniformes et assez visibles, comme
sur la figure 6.7.

F IGURE 6.7 Une image JPEG fortement pixélisée


6 • Représentation, codage et numérisation 87

6.10 LA NUMÉRISATION DE LA VIDÉO

Supposons que les techniques de codage des images couleur soient utilisées. Soit une petite
séquence de 15 minutes en résolution 1 024 × 768 et 16,7 millions de couleurs. Pour obtenir
une fluidité correcte de la vidéo, une vitesse de défilement de 25 images par seconde est
nécessaire. La séquence sera donc composée de 22 500 images qui pèsent chacune 2,25 Mo.
Soit plus de 50 Go (gigaoctets ou milliards d’octets) à stocker et éventuellement à transférer
sur Internet ! Il faut donc impérativement compresser les images vidéo.

La première idée qui vient à l’esprit est d’appliquer les principes de la compression d’images
à la vidéo. Le Motion JPEG (noté MJPEG ou M-JPEG) consiste à appliquer l’algorithme de
compression JPEG aux différentes images d’une séquence vidéo. Étant donné que le M-JPEG
code séparément chaque image de la séquence, il permet d’accéder aléatoirement à n’importe
quelle partie d’une vidéo, ce qui est intéressant par exemple pour les studios de montage
numérique. Par contre, le volume mémoire occupé reste considérable.

Dans beaucoup de séquences vidéo, on peut remarquer que de nombreuses zones dans les
images sont fixes ou bien changent très peu d’une image à la suivante, comme par exemple
les arrière-plans (cf. figure 6.8). C’est ce que l’on nomme la redondance temporelle.

F IGURE 6.8 La redondance temporelle entre images


© Dunod – Toute reproduction non autorisée est un délit.

L’idée des approches actuelles est de combiner la diminution de la redondance spatiale dans
les images (avec JPEG) et celle de la redondance temporelle entre les images successives.
C’est ce que font les standards MPEG vidéo que nous ne détaillerons pas plus.

Cette famille comporte plusieurs standards :


– MPEG-1 permet le stockage d’une heure de vidéo de faible qualité sur un CD de 600 Mo,
– MPEG-2 permet de stocker 2h30 de vidéo de haute qualité sur un DVD de 4,7 Go et permet
la diffusion de la télévision numérique,
– MPEG-4 regroupe un ensemble de normes de diffusion de données multimédias (images
2D et 3D, vidéo, audio) pour le bas débit (web, téléphones mobiles) et pour le haut débit
(télévision haute définition).
88 Partie 1. Les couches basses

6.11 LES CODES DÉTECTEURS ET CORRECTEURS


Les erreurs sont inévitables quand on transmet des flux de bits sur les réseaux. Elles peuvent
également apparaître lors du stockage des bits en mémoire centrale. Il existe des codes qui
peuvent remédier plus ou moins complètement à ces erreurs. Le principe de base consiste à
ajouter de la redondance aux n bits de données sous la forme de k bits de contrôle lors de
leur envoi (ou écriture). Lors de la réception (ou lecture), les bits de contrôle sont recalculés,
ce qui permet de détecter et éventuellement corriger certaines formes d’erreurs.
Deux exemples de codes élémentaires sont présentés dans ce paragraphe. Les codes plus
sophistiqués, comme les codes de Hamming, les code CRC, etc., nécessitent une étude
théorique qui relève d’un cours spécialisé. Dans ce qui suit, il est uniquement question
d’envoi et de réception, résultant d’une transmission de données, mais tout reste valable pour
une écriture et une lecture, résultant d’un stockage de données.

6.11.1 Le bit de parité


Aux n bits de données est ajouté un bit supplémentaire dit « bit de parité ». Ce bit de parité
est tel que le nombre de bits à 1 parmi les n + 1 bits est :
– pair, dans le cas d’une parité paire,
– impair, dans le cas d’une parité impaire.

Exemple
En ASCII sur 7 bits, le caractère A est codé par 100 0001 (hexadécimal 41). Avec un bit de
parité impaire, il faut envoyer 1000 0011. À l’arrivée, on recalcule le bit de parité. S’il est
correct, on suppose que l’octet est correct, sinon on suppose la présence d’une erreur et il faut
alors redemander une nouvelle transmission.
Les limites de cette technique sont claires. On ne peut détecter qu’une seule erreur, ou un
nombre impair d’erreurs. S’il y en a deux, ou un nombre pair, elles ne sont pas détectées. De
plus, on ne sait pas où se trouvent le ou les bits erronés. On ne peut pas corriger l’erreur.
Le bit de parité est un code détecteur, intéressant seulement en cas de stockage ou de
transmission avec un très faible taux d’erreur.

6.11.2 La parité double


On considère la transmission d’un bloc de données, c’est-à-dire un tableau à deux dimensions
de bits. On effectue un contrôle de parité horizontal, sur les lignes, et un contrôle de parité
vertical, sur les colonnes. Une erreur unique est détectable et peut être corrigée.
Exemple
Envoi d’un bloc de 4 caractères en ASCII sur 7 bits. Le tableau des bits est le suivant :
Caractère Code ASCII hexa Bits du code Bits de parité horizontaux
I 49 100 1001 1
N 4E 100 1110 0
F 46 100 0110 1
O 4F 100 1111 1
Bits de parité verticaux ..... 000 1110 1
6 • Représentation, codage et numérisation 89

Supposons qu’un seul bit soit altéré lors de la transmission du tableau des bits. En recalculant
les bits de parité horizontaux et verticaux, on va trouver une différence entre ce qui est reçu
et ce qui est recalculé sur une ligne et une colonne. L’erreur se situe à l’intersection de cette
ligne et de cette colonne. La correction revient à changer le bit situé à cette intersection.
Par exemple, après recalcul des bits de parité, on obtient :
Bits du code Bits de parité horizontaux
100 1001 1
100 1110 0
100 1110 0 au lieu de 1 <
100 1111 1
Bits de parité verticaux ..... 000 0110 1
^
0 au lieu de 1

C’est le bit à l’intersection de la troisième ligne et de la quatrième colonne qui est erroné. Sa
vraie valeur est donc 0.

6.12 LES CODES D’IDENTIFICATION DES OBJETS


L’identification automatique et le suivi des objets se développent de plus en plus et vont
devenir un aspect essentiel de l’Internet des objets (cf. paragraphe 5.3.5).
La technologie d’identification la plus ancienne est celle des codes à barres unidimensionnels
(cf. figure 6.9). Parmi ses avantages, on peut citer la facilité de création, reproduction et
utilisation, ainsi que le faible coût. Ses inconvénients principaux sont la faible capacité de
mémorisation, limitée à quelques caractères, la nécessité d’être visible et le caractère non
réinscriptible.

F IGURE 6.9 Le code à barres unidimensionnel


© Dunod – Toute reproduction non autorisée est un délit.

Les codes à barres à deux dimensions permettent de répondre aux critiques portant sur la
capacité de mémorisation : les QR codes comme celui de la figure 6.10 offrent, malgré la
taille réduite de l’étiquette, une capacité de 2 953 octets.

F IGURE 6.10 Le code à barres à deux dimensions


90 Partie 1. Les couches basses

Les étiquettes RFID (Radio Frequency IDentification), comme celle de la figure 6.11,
marquent une évolution radicale dans les techniques d’identification automatique. Elles
permettent d’identifier, à plus ou moins grande distance et dans un minimum de temps, un
objet, un animal ou une personne porteuse d’une étiquette capable d’émettre des données
en utilisant des ondes radio (ex. : carte à puce sans contact, système de péage d’autoroute
sans arrêt, contrôles d’accès de parking, etc.). La capacité est limitée à quelques kilobits. La
visibilité de l’étiquette n’est plus indispensable. La réécriture est possible dans le cas des
étiquettes actives, incluant une batterie extraplate. Le coût est bien entendu un peu supérieur
à celui des codes à barres.

F IGURE 6.11 Une étiquette RFID


6 • Représentation, codage et numérisation 91

EXERCICES

Exercice 6.1. Opérations sur les nombres binaires.


a) Additionner 101101 et 11001.
b) Multiplier 101 par 110.
c) Vérifier les opérations précédentes en convertissant en décimal données et résultats.

Exercice 6.2. Capacité des mots.


Quel est le plus grand entier binaire qui tient sur un octet ? Sur un mot de 16 bits ? Sur un mot
de 32 bits ? Sur n bits ?

Exercice 6.3. Conversions.


a) Convertir 37(10) en binaire.
b) Convertir 10100011101 en hexadécimal, en décimal.
c) Que vaut F F F en binaire, en décimal ?
d) Convertir 1100110 en octal, en décimal.

Exercice 6.4. Complément à 2.


a) Calculer 30 + −20, −20 étant codé en complément à 2 sur 8 bits.
b) Donner en base 10 les nombres dont le codage en complément à 2 sur 16 bits sont les
suivants : 0110 1100 0001 1011 et 1011 0110 1011 0011.
c) Comparer les trois systèmes de représentation des relatifs sur 4 bits en dressant un tableau
de toutes les valeurs possibles.
d) Effectuer les opérations ci-dessous, caractéristiques de tous les cas possibles d’addition
dans Z, en complément à 2 sur 8 bits.
– Deux positifs, sans débordement : 6 + 8.
– Deux positifs, avec débordement : 127 + 1.
© Dunod – Toute reproduction non autorisée est un délit.

– Un positif et un négatif, résultat positif : 4 + (−2).


– Un positif et un négatif, résultat négatif : 2 + (−4).
– Deux négatifs, sans débordement : (−2) + (−4).
– Deux négatifs, avec débordement : (−127) + (−2).

On note C le bit de carry (c’est-à-dire le bit « qui sort ») et V le bit d’overflow (c’est-à-dire le
bit qui se reporte de l’avant-dernier sur le dernier bit). Au vu des six résultats obtenus, quelle
condition sur C et V permet de détecter qu’une addition est correcte ?

C V
92 Exercices

e) Comment procéder pour multiplier deux entiers relatifs en complément à 2, en supposant


que l’on dispose d’un moyen pour multiplier les entiers naturels ? On pourra considérer les
trois cas possibles : deux positifs, un positif et un négatif, deux négatifs.

Exercice 6.5. Réels flottants.


a) Donner la représentation hexadécimale de −12,625 en flottant IEEE 754 sur 32 bits.
b) Quelle est la valeur décimale du réel flottant IEEE 754 42E4 8000 ?
c) Quelle est la valeur décimale du réel flottant IEEE 754 3E94 0000 ?
d) Représenter 7/8 en format IEEE 754 sur 32 bits. Donner le résultat en hexadécimal.
e) Soient les deux nombres en format IEEE 754 sur 32 bits, représentés en hexadécimal par
3EE00000 et 3D800000. Calculer leur somme et donner le résultat sous forme décimale et
sous forme IEEE 754 en hexadécimal.
f) On appelle précision la différence entre 1 et le plus petit nombre qui le suit dans une
représentation donnée. Que vaut-elle en simple précision ? Exprimée comme une puissance
de 10 ? Cela correspond à combien de chiffres significatifs après la virgule ?
g) Pour faire l’addition de deux réels, il faut ramener les deux opérandes au même exposant
en dénormalisant celui qui a l’exposant le plus petit. Ce faisant, on doit décaler sa mantisse
vers la droite avec le risque de perdre des chiffres. Le résultat peut donc être entaché d’erreur.
Cette erreur est d’autant plus grande que la différence entre les exposants est plus grande.
On suppose que la mantisse est représentée sur six chiffres binaires. On veut additionner
1.001100 · 24 et 1.011011 · 22 . Quelle est l’erreur commise ?

Exercice 6.6. Codage des caractères.


a) Décoder la séquence de caractères ASCII sur 8 bits suivante :
0100~1001~~0110~1110~~0110~0110~~0110~1111~~0111~0010~~0110~1101
0110~0001~~0111~0100~~0110~1001~~0111~0001~~0111~0101~~0110~0101

b) Comment transformer le code ASCII sur 8 bits d’une minuscule dans le code de la même
lettre en majuscule ?

Exercice 6.7. Autre code.


Pour représenter visuellement un chiffre quelconque, de 0 à 9, on utilise sept segments
lumineux numérotés de 0 à 6, disposés selon le schéma suivant :

0 2
6

5 3
4
6 • Représentation, codage et numérisation 93

L’affichage de chaque chiffre correspond à l’activation d’une partie des segments. Le système
adopté est résumé par la figure suivante :

Remarque : le chiffre 1 utilise les barres de gauche.


On désire construire un code sur 7 bits où le bit de rang i est positionné à 1 lorsque le segment
correspondant est allumé.
a) Construire la table qui, à chaque chiffre, associe son code sur 7 bits.
b) Représenter dans ce code la séquence de chiffres 1987.

Exercice 6.8. Décodage d’une zone mémoire.


Une entreprise gère des données sur chacun de ses clients. Chaque client est décrit par une
zone mémoire de longueur fixe, organisée de la manière suivante :
– nom du client : la zone est prévue pour un nom de 15 caractères au maximum,
– nombre de commandes effectuées par le client : un entier,
– la somme que le client doit (somme  0) ou que l’entreprise doit au client (somme < 0) :
un réel,
– un commentaire sur le client : la zone est prévue pour un commentaire de 20 caractères au
maximum.

L’ordinateur utilisé par l’entreprise code les données de la manière suivante :


– Une chaîne de n caractères est codée sur n + 1 octets où le premier octet représente la
taille effective de la chaîne. Les caractères sont codés en ASCII sur 8 bits.
– Les entiers sont codés sur 16 bits, les nombres négatifs étant codés en compléments à 2.
L’octet contenant les bits de poids les plus faibles est placé avant l’octet contenant les bits
© Dunod – Toute reproduction non autorisée est un délit.

de poids les plus forts.


Exemple : la valeur 1 est codée en hexadécimal sur deux octets par 0100.
– Les réels sont codés en virgule flottante sur 48 bits de la manière suivante :
• Le nombre réel N est normalisé en N = m · 2e , où 0,1  m < 1.
• L’exposant e est codé en excédent à 128.
• Pour la mantisse m, on remarque que dans la forme normalisée 0,p0 p1 p2 ...p39 · 2e le
bit p0 vaut toujours 1. En conséquence seuls les bits de p1 à p39 sont représentés.
• Le premier bit s code le signe.
94 Exercices

Octet 1 Octet 2 Octet 3 Octet 4 Octet 5 Octet 6


s p0p1 ... p39 Exposant
Bit de signe

Exemple : avec ce système de codification, la représentation en machine du nombre 256,0


est 000000000089.

a) Quelle est la taille de la zone mémoire d’un client en octets ?


b) Décoder les zones mémoire des deux premiers clients commençant à l’adresse 0000. Les
adresses sont en décimal et repèrent des octets.
Adresses ------- Codes Hexadécimaux ------------
0000 07 42 6F 6C 6C 69 6E 6F 25 39 64 20 46 69 63 68
0016 19 00 33 90 00 00 00 8B 10 4A 41 4D 41 49 53 20
0032 43 4F 4E 54 45 4E 54 20 21 20 64 69 73 05 44 75
0048 76 61 6C 6E 6F 25 39 64 20 46 69 63 68 36 00 9E
0064 94 00 00 00 8C 0A 42 4F 4E 20 43 4C 49 45 4E 54
0080 54 45 4E 54 20 21 20 64 69 73 2E 1D 2F 1D 30 1D
0096 31 1D FF FF 33 1D 34 1D 35 1D 36 1D 37 1D 38 1D
0112 39 1D 3A 1D 3B 1D 3C 1D 3D 1D 3E 1D 3F 1D 40 1D

Exercice 6.9. Codage d’une zone mémoire.


Dans un fichier comptable, le descriptif de chaque compte comporte trois zones consécutives
codées de la manière suivante :
– le numéro du compte (binaire sur un octet),
– le libellé du compte (20 caractères ASCII sur un octet chacun),
– le solde du compte (réel sur 32 bits en IEEE 754).

Donner en hexadécimal la codification du compte contenant :


204P RODU IT S_F IN AN CIERS_520,50
le souligné correspondant à un caractère espace.

Exercice 6.10. Réels double précision.


La norme IEEE 754 pour les réels longs sur 64 bits est similaire à la norme pour les réels
courts sur 32 bits avec les caractéristiques suivantes :
– bit de signe (1 pour négatif, 0 pour positif),
– exposant sur 11 bits en excédent à 1 023,
– mantisse sur 52 bits normalisée en 1,bbbb (où b est un chiffre binaire quelconque), le 1,
n’étant pas représenté (bit caché).

a) Donner en hexadécimal la représentation du nombre décimal −157,6875.


b) Convertir en décimal la valeur hexadécimale C00F 000000000000.
PARTIE 2

La couche système/réseau
Chapitre 7

Les systèmes d’exploitation

7.1 DÉFINITION ET CLASSIFICATION


7.1.1 Les rôles du système d’exploitation
Un système d’exploitation, ou OS pour Operating System, est un logiciel chargé en mémoire
au démarrage d’un système informatique qui joue le rôle d’intermédiaire entre les ressources
matérielles et les applications et utilisateurs qui les exploitent, comme le montre la figure 7.1.

Utilisateur
© Dunod – Toute reproduction non autorisée est un délit.

Application
Interface
API utilisateur

Système d'exploitation

Matériel informatique

F IGURE 7.1 Le rôle d’intermédiaire du système d’exploitation


98 Partie 2. La couche système/réseau

Les deux faces de ce rôle d’intermédiaire consistent à :


– fournir aux utilisateurs et applications une interface plus commode à utiliser que celle
du matériel, en dissimulant les détails d’implantation des fonctionnalités offertes et les
caractéristiques physiques du matériel,
– gérer de manière efficace l’allocation, le partage et la protection des ressources
matérielles et logicielles : mémoire, processeurs, périphériques, programmes, données,
communications locales et par les réseaux, etc.

En d’autres termes, le système d’exploitation fournit aux utilisateurs et applications une


machine abstraite simplifiée, dotée d’objets facilement manipulables, tels que processus,
fichiers, utilisateurs, travaux d’impression, connexions réseau, etc. Les utilisateurs manipulent
le système d’exploitation via des interfaces graphiques ou textuelles (commandes et langages
de script). Les applications accèdent aux services via des interfaces de programmation ou
API pour Application Programming Interface.

Du côté matériel, le système d’exploitation s’appuie sur une certaine architecture matérielle.
Il intègre par exemple les pilotes (drivers) des périphériques qui permettent leur utilisation.
Il partage les ressources (processeurs, RAM, entrée/sorties) entre les programmes selon
leurs besoins. Il gère les mémoires permanentes (disques) afin d’y stocker les données sous
forme de fichiers ou de l’exploiter comme de la mémoire virtuelle. Il offre des mécanismes
de sécurité notamment pour les utilisateurs et leurs fichiers. Il inclut également les outils
nécessaires pour éditer, compiler et mettre au point des programmes.

7.1.2 La diversité des systèmes d’exploitation

Il existe de nombreux systèmes d’exploitation pour toutes les catégories de matériels :


– ordinateurs de tous types : Windows, Unix, Linux, (Mac) OS-X, Solaris, Open VMS, etc.,
– téléphones mobiles et tablettes : Android, Apple iOS, Windows Phone, etc.,
– cartes à puce : JavaCard, MultOS, Windows for Smart Card, etc.

On ne peut pas imaginer un système d’exploitation « universel », car il faut répondre à des
contraintes d’exploitation très différentes :
– système pour poste de travail individuel ou pour serveur,
– système qui privilégie le partage des ressources, en particulier du processeur, entre de
nombreux utilisateurs ou système temps partagé,
– système qui privilégie le service d’un grand nombre de requêtes applicatives sur des
données volumineuses ou système transactionnel,
– système qui privilégie le respect de contraintes temporelles strictes ou système temps réel,
– système embarqué avec des contraintes fortes, par exemple de consommation énergétique,
– etc.
7 • Les systèmes d’exploitation 99

7.2 LES FONCTIONS DES SYSTÈMES D’EXPLOITATION


Un système d’exploitation peut être étudié avec un point de vue externe, celui de l’utilisation
de la machine abstraite qu’il procure, ou avec un point de vue interne, celui de l’explicitation
de ses mécanismes, indispensable par exemple pour son administration. Dans cet ouvrage
d’introduction aux systèmes informatiques, après une brève présentation des concepts sous-
jacents, c’est la vision abstraite des utilisateurs qui sera privilégiée.
Le tableau suivant résume les fonctions essentielles d’un système d’exploitation, les
ressources matérielles concernées et les concepts de haut niveau de la machine abstraite
correspondants.

Fonction Description Ressources matérielles Concepts abstraits


Gestion des Création, destruction, Processeur, programme, Processus
activités suivi des activités mémoire centrale,
interruptions
Gestion des Accès, stockage, Disques, sauvegardes Fichiers,
données partage des données répertoires
persistantes
Gestion des IHM (interface Clavier, écran, souris Fenêtres
communications homme/machine),
entrées/sortie, Périphériques Flots de données
réseaux Infrastructures réseau
Gestion de la Intégrité, Utilisateurs,
sécurité confidentialité, droits
(données, disponibilité
ressources)

L’étude des systèmes d’exploitation sera centrée dans cet ouvrage sur la famille des systèmes
de type Unix à cause de leur importance dans tous les domaines de l’informatique, de la clarté
des concepts de leur machine abstraite et de leur mode d’utilisation prioritairement textuel,
© Dunod – Toute reproduction non autorisée est un délit.

via des commandes et des langages de script, plus facile à décrire que les modes d’utilisation
via des interfaces graphiques.

7.3 LA FAMILLE DES SYSTÈMES DE TYPE UNIX


7.3.1 Historique
Le premier système Unix a été développé en 1969 aux laboratoires Bell, une filiale du géant
des télécoms AT&T, par Ken Thompson. En 1973, Dennis Ritchie l’a réécrit pour l’essentiel
en langage C, qu’il a créé pour l’occasion, afin de rendre le système plus portable. Les
premières versions commerciales d’Unix ont été d’abord propriétaires (AT&T System III,
Microsoft XENIX, etc.).
100 Partie 2. La couche système/réseau

En 1983, Richard Stallman a lancé le projet GNU d’un système d’exploitation entièrement
libre. En 1993, Linus Torvald a écrit le noyau libre Linux qui s’inspire d’Unix sans en utiliser
aucun code. À la fin des années 1990, les environnements graphiques, comme Gnome et
KDE, ont ouvert le système au grand public. Le système GNU/Linux (souvent abrégé en
Linux, même si Linux n’en constitue que le noyau) et ses dérivés ont rapidement connu un
énorme succès, sous la forme d’innombrables distributions (Debian, SuSE, Fedora, Ubuntu,
etc.).
Aujourd’hui, les systèmes de type Unix 1 sont les seuls que l’on trouve sur tous les systèmes
informatiques, de la puce embarquée au supercalculateur. Il en existe d’innombrables
déclinaisons aussi bien libres (Linux, FreeBSD, OpenBSD, NetBSD, etc.) que propriétaires
(HP-UX, IBM AIX, Apple OS X, Oracle Solaris, etc.).
Cette famille de systèmes est devenue incontournable, autant pour les spécialistes de
l’administration système que pour les particuliers et les scientifiques. Grâce aux efforts de
normalisation, on peut présenter l’essentiel de ses concepts de manière « générique », sans
entrer dans le détail de telle ou telle déclinaison ou distribution particulière.

7.3.2 Caractéristiques
a) Un système multi-utilisateur et multitâche préemptif
Les systèmes de type Unix sont multi-utilisateurs et multitâches, c’est-à-dire que plusieurs
utilisateurs peuvent exécuter chacun plusieurs tâches (processus) « simultanément ». Ce
fonctionnement multitâche est assuré par un mécanisme préemptif : c’est le système
d’exploitation, et plus précisément l’ordonnanceur des processus (ou scheduler), qui
interrompt la tâche en cours d’exécution pour passer à la suivante. Une tâche mal
programmée, par exemple qui boucle indéfiniment, ne peut donc pas bloquer le système.
Grâce à une affectation du processeur par tranches de quelques millisecondes pour chaque
processus, les utilisateurs perçoivent à leur échelle des exécutions simultanées. On parle de
pseudo-parallélisme ou de temps partagé.

b) Une mémoire virtuelle paginée


Les systèmes de type Unix fonctionnent en mémoire virtuelle paginée (cf. paragraphe 3.1.3).
Cela permet de faire fonctionner des processus qui demandent plus d’espace mémoire que
ce qu’offre la mémoire centrale de la machine. Quand un processus accède à une page de
mémoire qui ne se trouve pas en mémoire centrale mais sur la partition de swap du disque
(défaut de page), elle est échangée avec la page la moins utile, au sens donné par l’algorithme
d’ordonnancement.

c) Une machine abstraite simple


L’architecture logique de la machine abstraite est assez simple avec une organisation
fondamentalement hiérarchique qui sera décrite dans les deux chapitres qui suivent :
hiérarchie des processus et hiérarchie des fichiers et répertoires.

1. UNIX en majuscules est une marque déposée par The Open Group, qui regroupe des industriels comme IBM,
Oracle et HP, afin de gérer le standard UNIX et de certifier les systèmes propriétaires conformes à cette norme.
7 • Les systèmes d’exploitation 101

d) Des interfaces multiples


Plusieurs interfaces textuelles, les shells, et graphiques, les environnements de bureau, sont
offerts, ce qui permet de satisfaire les besoins de tous les types d’utilisateurs. Les système de
type Unix offrent également des environnements de développement de programmes complets
qui incluent des éditeurs, des compilateurs (C, C++, etc.), des outils de gestion de projet de
développement (make), des bibliothèques, etc. Ce point est détaillé au paragraphe 7.4.

e) Normalisation, ouverture et portabilité


Les systèmes de type Unix sont à la fois normalisés, essentiellement via les normes POSIX
[IEE13], et libres, ce qui les rend ouverts aux extensions.
Les systèmes de type Unix, et le noyau Linux en particulier, sont codés principalement en
langage C, ce qui facilite beaucoup leur portabilité.

7.3.3 Architecture
Comme le montre la figure 7.2, les systèmes de type Unix comportent deux couches au-dessus
de la couche matérielle : le noyau (kernel level) et l’espace utilisateur (user level).

Espace Shell Utilitaires Applications Bibliothèques


utilisateur
Espace
noyau

Interface des appels système

Contrôle des processus


Système de
Communication
chiers
inter processus
Ordonnancement
© Dunod – Toute reproduction non autorisée est un délit.

Pilotes Gestion mémoire

Contrôle du matériel

Matériel

F IGURE 7.2 Architecture d’un système de type Unix

Dans l’espace utilisateur s’exécutent tous les processus distincts du noyau, c’est-à-dire
les shells, les utilitaires (éditeurs, compilateurs, etc.) et les applications qui utilisent des
bibliothèques, en particulier les bibliothèques standards (C, C++).
102 Partie 2. La couche système/réseau

Le noyau a pour rôle de gérer les ressources matérielles, grâce en particulier aux pilotes
des périphériques (device drivers) et de fournir aux programmes une interface uniforme
pour l’accès à ces ressources (fichiers, processus, entrées/sorties, réseau, etc.). Les pilotes
sont le plus souvent génériques et intégrés au noyau. Dans quelques rares cas, des pilotes
propriétaires doivent être ajoutés. En Linux, ils peuvent prendre la forme de modules
(Loadable Kernel Module) qui peuvent être intégrés « à chaud », sans redémarrer le système.
Les programmes externes accèdent au noyau via les appels système (system call souvent
abrégé en syscall), qui correspondent aux fonctions primitives fournies par le noyau.

7.3.4 Les appels système


À chaque appel système correspond une procédure de la bibliothèque standard qui en
masque les détails. Chaque procédure place les paramètres de l’appel système dans un
endroit prédéfini, comme les registres du processeur, et provoque une interruption logicielle,
via l’instruction trap, pour passer du mode utilisateur au mode noyau. En mode noyau, toutes
les instructions et ressources sont accessibles, contrairement au mode utilisateur, où certaines
instructions sont interdites ou limitées, par exemple à certaines plages d’adresses mémoire.
Toute tentative d’accéder aux ressources sans passer par les appels système déclenche
une interruption « instruction ou accès interdit ». Quand le système d’exploitation prend
le contrôle après l’interruption logicielle, il vérifie la validité des paramètres et effectue
le traitement demandé. À la fin du traitement, il place un code de statut, indiquant si le
traitement a réussi ou échoué dans un registre, puis redonne le contrôle à la procédure de
bibliothèque avec retour au mode utilisateur. La procédure de bibliothèque remet à son tour
le contrôle à l’appelant en lui transmettant le code de statut.
On dénombre plus de 380 appels système en Linux. Les principaux concernent :
– la gestion des fichiers (create, open, close, read, write, etc.),
– la gestion des processus (excecve, fork, wait, kill, etc.),
– la communication interprocessus locale (pipe, msgsnd, msgrcv, etc.),
– la communication entre processus via le réseau (socket, bind, connect, listen,
accept, etc.).

7.4 LES OUTILS DE DÉVELOPPEMENT


Les systèmes de la famille Unix offrent tous les outils nécessaires au développement des
programmes en langage évolué : langage C à l’origine, mais également C++, Java, Ruby et
bien d’autres.

7.4.1 Les schémas d’exécution


a) La compilation
Un programme source PS, écrit dans un langage évolué, n’est pas exécutable directement
sur une machine physique M. La première solution consiste à traduire (compiler) PS en un
programme objet PO « équivalent », écrit dans le langage machine LM de la machine M, avant
7 • Les systèmes d’exploitation 103

de l’exécuter. Le programme de traduction, ou compilateur, s’exécute le plus souvent sur la


machine M mais ce n’est pas une obligation. Ce schéma d’exécution, illustré par la figure 7.3,
est celui des langages traditionnels, comme C et C++.

PS Compilateur PO
exécution
M ou autre M actions

F IGURE 7.3 La compilation

Remarques
La compilation peut être décomposée plus finement en trois phases successives :
(1) prétraitement par le préprocesseur, qui modifie le texte du programme source (par
exemple, suppression des commentaires, inclusions de code, expansion de macros,
exécution des directives),
(2) compilation par le compilateur, qui traduit le langage évolué en langage d’assemblage,
(3) assemblage par l’assembleur, qui traduit le programme objet en langage machine.

Les traducteurs (compilateurs, assembleurs) réalisent également, à un niveau encore plus fin,
un processus en trois étapes :
(1) analyse lexicale, c’est-à-dire regroupement des caractères en « mots » (lexèmes),
(2) analyse syntaxique, c’est-à-dire structuration grammaticale en « phrases »,
(3) génération/optimisation du code cible correspondant aux « phrases » reconnues.

b) L’interprétation

Le programme source PS peut aussi être interprété par un programme qui s’exécute sur la
machine M. Ce programme, appelé interprète, traduit successivement chaque instruction
du programme PS en une suite d’instructions du langage machine LM et l’exécute
immédiatement. Ce schéma d’exécution, illustré par la figure 7.4, est celui des shells
© Dunod – Toute reproduction non autorisée est un délit.

Unix et du langage PostScript dans les imprimantes, par exemple.

Instruction
Interprète {Instructions} LM
PS
exécution
M M actions

F IGURE 7.4 L’interprétation

La compilation permet l’optimisation des performances, par l’optimisation du code objet


produit, alors que l’interprétation facilite la mise au point interactive des programmes.
104 Partie 2. La couche système/réseau

c) Le schéma mixte
Certains langages plus récents, comme Java, utilisent un schéma mixte avec une phase de
compilation de PS dans un langage intermédiaire PLI suivie d’une phase d’interprétation du
langage intermédiaire par une machine virtuelle qui s’exécute sur la machine M (cf. figure 7.5).
Par exemple, le compilateur javac fait passer d’un programme prog.java à un
programme intermédiaire en bytecode prog.class qui est ensuite interprété par la
machine virtuelle java (JVM).

PS Compilateur PLI
interprétation

M ou autre Machine virtuelle actions


exécution
M

F IGURE 7.5 Le schéma mixte

Ce schéma mixte facilite la portabilité : seule la machine virtuelle dépend de la machine M.


Le processus de compilation en est complètement indépendant.

7.4.2 Le cycle de vie des programmes compilés


Dans le schéma de la figure 7.3, le compilateur produit directement le programme objet, avec
des adresses mémoire qui sont donc nécessairement fixées par lui. On parle de programme
objet « absolu » : il ne peut être ni déplacé en mémoire, ni combiné avec d’autres.
On lui préfère donc le plus souvent un schéma en deux étapes :
(1) compilation en un programme objet « translatable », dont les adresses sont définies à une
translation (constante) près,
(2) transformation du programme objet translatable en un programme objet absolu, placé à
une adresse mémoire donnée, par un programme appelé chargeur.
En outre, pour composer un programme à partir de plusieurs modules compilés séparément,
une étape supplémentaire est nécessaire. En effet, si un module A utilise une ressource, une
procédure par exemple, d’un module B, l’adresse correspondante est évidemment inconnue
à la compilation. Un programme, appelé éditeur de liens, sert à résoudre ces dépendances à
partir de l’ensemble des programmes objets translatables constituant le programme.
On obtient donc le processus en trois étapes que schématise la figure 7.6.
Les programmes peuvent aussi utiliser des bibliothèques (libraries) qui contiennent des
fonctions sous forme de modules objet translatables. On distingue :
– les bibliothèques statiques, qui sont intégrées dans le programme objet lors de l’édition de
liens, ce qui améliore la portabilité et l’efficacité,
– les bibliothèques dynamiques, qui sont chargées seulement à l’exécution dans la mémoire
virtuelle du processus, ce qui diminue la taille des exécutables.
7 • Les systèmes d’exploitation 105

Module
Module
Compilation objet Programme
source Edition
translatable objet
de liens translatable
... ... ...

Module
Module Chargement
Compilation objet
source
translatable
Programme
objet absolu

F IGURE 7.6 Le cycle de vie des programmes compilés

Des outils de construction automatique (build tools), comme make ou ant, facilitent la
production du programme exécutable final à partir de l’ensemble des modules et des
bibliothèques qui sont utiles. Ces outils s’appuient sur une spécification des cibles, de
leurs dépendances et des actions qui permettent de les construire, dans un fichier makefile
pour make. Contrairement aux scripts, ces outils n’exécutent les actions que si elles sont
nécessaires en fonction de l’état courant des cibles.
© Dunod – Toute reproduction non autorisée est un délit.
106 Exercices

EXERCICES

Exercice 7.1. Multi-utilisateur et multitâche.


a) Un système multitâche est-il nécessairement multi-utilisateur ?
b) Donner une conséquence fondamentale du caractère multi-utilisateur d’un système ?
c) Donner des critères de commutation de tâches dans un système multitâche.

Exercice 7.2. Utilisation du noyau d’un système de type Unix.


Décrire comment une application ou un shell accède aux services du noyau.

Exercice 7.3. Ordonnancement des processus.


Dans un système multi-utilisateur et multitâche, comme ceux de type Unix, un ordonnanceur
doit choisir le processus à exécuter et le temps d’allocation du processeur à ce processus.
a) Donner quelques critères possibles de choix. Ils sont parfois complémentaires et parfois
contradictoires.
b) Un des algorithmes d’ordonnancement le plus simple est le tourniquet (round robin), avec
une file d’attente FIFO (First In First Out) et l’attribution d’un même quantum de temps
d’utilisation du processeur à tous les processus.
Quel est l’inconvénient d’un quantum trop petit ? D’un quantum trop long ?
c) Dans les systèmes de type Unix, l’ordonnanceur gère plusieurs files avec des priorités
différentes. L’ordonnanceur recherche le premier processus prêt en examinant les files par
priorités décroissantes.
Comment éviter que les processus de plus haute priorité monopolisent le processeur ?

Exercice 7.4. Mémoire virtuelle paginée.


Un programme, disposant de trois pages physiques en mémoire, a besoin de cinq pages
virtuelles sur le disque numérotées de 0 à 4. Il les utilise dans l’ordre suivant : 012301401234.
a) Quelle séquence de défauts de page va se produire avec un algorithme de remplacement
FIFO (First In First Out) ?
b) Sachant que les pages font 1 ko et qu’une adresse virtuelle comporte un numéro de
page et un déplacement dans la page, comment interpréter les adresses virtuelles 102A16
et 0AF 116 ?

Exercice 7.5. Bibliothèques.


Compléter la figure 7.6 en y faisant apparaître les bibliothèques statiques et les bibliothèques
dynamiques.
Chapitre 8

La gestion des activités

8.1 LE CONCEPT DE PROCESSUS


8.1.1 Définition et caractéristiques
Un processus est une entité abstraite qui représente l’exécution d’un programme sur un
processeur. Il peut s’agir d’une application ou d’une commande lancée par un utilisateur,
on parle alors de processus utilisateur, ou d’une activité interne du système d’exploitation,
on parle alors de processus système. Un même programme, lancé plusieurs fois, donne
naissance à plusieurs processus. Par exemple, chaque utilisateur peut lancer un ou plusieurs
interpréteurs de commandes (shells). Toutes ces instances constituent autant de processus
© Dunod – Toute reproduction non autorisée est un délit.

différents.
Les processus permettent de représenter les activités parallèles et leurs interactions. Des
dizaines voire des centaines de processus peuvent coexister à un instant donné dans un
système.
Chaque processus d’un système de type Unix est identifié par un numéro qui lui est propre,
son PID (Process Identifier). Il est caractérisé aussi par un propriétaire, celui qui l’a lancé,
qui détermine ses droits d’accès aux ressources, un processus père dont il hérite la plupart
des caractéristiques, un terminal d’attache, une priorité, etc.
Un processus comprend :
– une zone de mémoire virtuelle qui lui est propre, contenant le code, les données statiques,
c’est-à-dire dont la durée de vie est celle du processus, la pile et le tas, pour les données
gérées dynamiquement,
108 Partie 2. La couche système/réseau

– un contexte d’exécution, ou état instantané du processus, comprenant en particulier


la valeur des registres généraux et du pointeur de pile, le répertoire courant, l’état du
processus, sa priorité, etc.,
– un environnement utilisateur, constitué d’un ensemble de variables d’environnement qui
personnalisent le système pour le propriétaire et sont passées de processus père à processus
fils : nom de l’utilisateur, chemin de recherche des fichiers (path), répertoire personnel
(home), interpréteur de commandes utilisé, etc.

8.1.2 L’arborescence des processus


Un processus est toujours créé par un autre processus, son père, via l’appel système fork(),
sauf le processus initial, nommé init, ancêtre de tous les autres, qui est créé au lancement
du système. Ce processus init lance à son tour les processus internes de gestion du système
(gestion des fichiers, de la mémoire virtuelle, du réseau, etc.). Chaque utilisateur est à
l’origine d’un sous-arbre ancré dans son processus shell initial (login shell).
Les processus constituent donc une hiérarchie unique, comme montré par la figure 8.1. Le
PPID (Parent PID) d’un processus est le PID de son père.

init

Processus

Processus
de l'utilisateur
U2
Processus Processus
de l'utilisateur système
U1

F IGURE 8.1 La hiérarchie des processus

8.1.3 Les états d’un processus


Un processus peut être actif, c’est-à-dire prêt à s’exécuter ou en cours d’exécution par le
processeur, ou bloqué, c’est-à-dire en attente du processeur ou d’une autre ressource.
Plus précisément, après sa création par fork(), il est mis en mémoire à l’état prêt. Les
processus prêts sont rangés dans des files d’attente par priorité. L’ordonnanceur (scheduler)
alloue le processeur, supposé ici unique, aux processus prêts par tranches de temps ou quanta.
La durée du quantum est de quelques millisecondes, ce qui correspond à l’exécution de
quelques millions d’instructions machine. La commutation entre processus est déclenchée
8 • La gestion des activités 109

par une interruption à la fin du quantum de temps (ou une préemption par un processus plus
prioritaire). À l’échelle humaine, on a l’impression d’une exécution parallèle des différentes
activités. On parle de pseudo-parallélisme ou de temps partagé.
Quand un processus est bloqué, par exemple parce qu’il a demandé une entrée/sortie, il
doit libérer le processeur, qui lui est inutile tant que l’entrée/sortie n’est pas terminée. Le
processeur lui sera réalloué après la fin de sa période de blocage, indiquée au processeur par
une interruption de fin d’entrée/sortie. C’est la même chose quand le processus est suspendu.
Un processus se termine à la fin de l’exécution de son code ou à la suite d’une erreur
non récupérable ou parce qu’il a été stoppé. C’est à son processus père de le détruire
effectivement. Le système récupère les ressources du processus lors de sa destruction.
À noter deux états particuliers :
– un processus prêt ou bloqué peut être déchargé de la mémoire et transféré sur le disque
(swapping), dans le cadre de la gestion de la mémoire virtuelle,
– un processus terminé dont le père est déjà mort se trouve dans l’état zombie.

La figure 8.2 décrit l’automate des états d’un processus.

stoppé détruit
en
exécution
n, erreur fatale
actif suspension, mise terminé
allocation en attente
création
n quantum, bloqué
(fork())
préemption

déblocage stoppé
mis en
mémoire stoppé
créé prêt
Etat

Transition
© Dunod – Toute reproduction non autorisée est un délit.

F IGURE 8.2 Les états d’un processus

8.1.4 Les entrées/sorties d’un processus


Tout processus (application, utilitaire, commande) est censé transformer des données en
résultats. Il possède donc trois canaux d’entrée/sortie appelés entrée standard stdin (de
descripteur 0), sortie standard stdout (de descripteur 1) et sortie d’erreur standard stderr
(de descripteur 2), associés par défaut au clavier et au terminal associé au processus (cf.
figure 8.3).
Ces entrées/sorties peuvent être redirigées depuis ou vers d’autres destinations (fichier,
périphérique vu comme un fichier, autre processus). Au niveau du shell, comme le montrent
les exemples qui suivent, la redirection d’entrée se fait avec l’opérateur <, celle de sortie avec
110 Partie 2. La couche système/réseau

Sortie
standard
stdout
Processus
Entrée Sortie
standard d'erreur
stdin standard
stderr

F IGURE 8.3 Les entrées/sorties d’un processus

les opérateurs > et >>, celle de sortie d’erreur avec les opérateurs 2> et 2>> et la redirection
des deux sorties avec les opérateurs &> et &>>.
Exemples
ls > fich : le résultat de la commande ls est redirigé dans le fichier fich, qui est créé
ou écrasé s’il existe déjà.
ls >> fich : le résultat de la commande ls est redirigé dans le fichier fich, qui est créé
ou complété s’il existe déjà.
sort < fich1 : le fichier fich1 est trié par la commande sort avec affichage du
résultat à l’écran.
sort < fich1 >> fichtri : le fichier fich1 est trié et le résultat est ajouté au fichier
fichtri s’il existe déjà.
ls 2> err : les erreurs de la commande ls sont redirigées dans le fichier err, qui est
créé ou écrasé s’il existe déjà.
ls &> fich : redirige les deux sorties (stdout et stderr) vers le fichier fich.
On peut aussi rediriger la sortie d’un processus p1 dans un tube qui devient l’entrée d’un
autre processus p2 par p1|p2. Le fonctionnement exact du tube sera décrit au paragraphe
10.1.1, qui porte sur la communication interprocessus.
Exemple
ls -1 | wc -l. La commande ls -1 liste le répertoire courant avec un nom par ligne,
et wc -l compte le nombre de lignes dans le résultat.

8.1.5 Les filtres


Ce sont toutes les commandes qui lisent leurs données sur stdin et les transforment en résultats
sur stdout. Les filtres peuvent être intégrés dans des chaînes de traitements, qu’il s’agisse de
redirections, de tubes ou de scripts (cf. paragraphe 12.2.1).
Parmi les filtres les plus souvent utilisés, on peut citer :
– La commande wc, qui permet de compter le nombre de lignes, de mots et de caractères
dans un fichier. Parmi les options, il y a -l, qui affiche le nombre de lignes, -w, qui affiche
le nombre de mots et -c, qui affiche le nombre de caractères.
Exemple
ps -e h | wc -l. La commande ps -e h affiche tous les processus du système, un
par ligne et sans en-tête. La commande wc -l donne le nombre des lignes de cet affichage
et donc le nombre de processus.
8 • La gestion des activités 111

– La commande more, qui affiche son entrée page par page.


Exemple
ls -l /usr/bin | more facilite la lecture de la longue liste des commandes dans
/usr/bin.
– La commande sort, pour les tris.
Exemple
prog < data | sort > results exécute le programme prog sur le fichier de
données data et range les résultats triés dans le fichier results.
– La commande grep, qui recherche dans un fichier les lignes contenant une certaine chaîne
de caractères ou une certaine expression régulière.
Exemple
ps -le | grep bash affiche tous les processus bash du système.
– Les éditeurs de texte non interactifs, comme sed et awk, qui filtrent et transforment des
textes. Ces commandes offrent de véritables langages de programmation à part entière,
dont l’étude exhaustive sort du cadre de cet ouvrage. Le paragraphe 9.2.7 décrit cependant
dans leurs grandes lignes grep, sed et les expressions régulières.

8.1.6 Les threads

Un thread correspond, comme un processus, à l’exécution d’une suite d’instructions. Mais


alors que chaque processus s’exécute dans un espace mémoire virtuel propre, les threads
d’un même processus partagent l’espace mémoire de ce processus. Ils n’ont en propre que
leur pile, pour les variables locales, et quelques registres, comme le compteur ordinal et le
pointeur de pile.

La commutation entre threads est beaucoup plus rapide que la commutation entre processus,
car il n’y a pas nécessité de changer de mémoire virtuelle. La communication entre threads
est aussi grandement facilitée. Les ressources, comme les variables globales ou les fichiers,
étant partagées, il n’est pas nécessaire de recourir aux mécanismes lourds de communication
interprocessus (IPC), qui seront décrits au paragraphe 10.1.1. C’est pourquoi on qualifie
souvent de « processus lourds » les processus classiques et de « processus légers » les threads.
© Dunod – Toute reproduction non autorisée est un délit.

La figure 8.4 illustre les différences entre les processus mono et multi-thread.

Par contre, il faut des mécanismes de synchronisation, comme les sémaphores, pour
contrôler les accès simultanés des threads aux ressources partagées, ce qui peut rendre la
programmation assez délicate.

Les systèmes d’exploitation mettent généralement en œuvre des threads, appelés threads
système ou threads natifs, par opposition aux threads applicatifs, liés aux langages de
programmation évolués, comme Java. Les threads système sont définis et manipulés via une
API de bas niveau propre au système d’exploitation, comme les threads POSIX. Les threads
système autorisent des performances maximales, car ils permettent de minimiser le temps
passé dans le noyau à gérer les communications et la commutation, en éliminant beaucoup
de strates logicielles.
112 Partie 2. La couche système/réseau

Données Fichiers Données Fichiers

Registres Pile Registres Pile Registres Pile Registres Pile

Code Code

Exécution

F IGURE 8.4 Processus mono et multi-thread

8.2 LA GESTION DES PROCESSUS EN SHELL


8.2.1 Création d’un processus
Par défaut, quand on saisit une commande dans un terminal d’un système de type
Unix, l’interpréteur de commandes lance l’exécutable correspondant dont l’exécution
est représentée par un processus. Il faut attendre que ce processus se termine pour pouvoir
lancer une nouvelle commande. Ce type de processus est appelé processus en premier
plan (foreground). C’est le mode d’exécution normal des commandes et des applications
interactives, qui lisent des saisies au clavier et écrivent des messages à l’écran.
À noter que certaines commandes, dites commandes internes, sont exécutées directement
par le processus de l’interpréteur de commandes et ne génèrent donc pas de processus
additionnel.
Exemple
La commande ps -l liste en format long les processus associés à l’utilisateur courant. Elle
apparaît elle-même dans la liste. Son PPID est le PID du shell qui l’a créée (bash).
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 1825 1797 0 80 0 - 1850 wait pts/1 00:00:00 bash
0 R 1000 2113 1825 0 80 0 - 1176 - pts/1 00:00:00 ps

Il existe des processus dont on ne veut pas attendre la fin pour continuer à lancer des
commandes. C’est le cas par exemple des applications graphiques, qui ouvrent au moins
une fenêtre pour dialoguer, ou des programmes qui n’interagissent pas avec les utilisateurs,
comme les démons (par exemple un gestionnaire d’impression comme cupsd – common unix
printing system daemon). L’utilisateur peut lancer un programme en tâche de fond ou en
arrière-plan (background) en terminant la commande par le caractère &.
Exemple
La commande xterm & lance un émulateur de terminal X, donc une fenêtre supplémentaire.
Son PID est affiché. On peut immédiatement lancer une nouvelle commande.
8 • La gestion des activités 113

> xterm &


[1] 2093
> ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 1850 1826 0 80 0 - 1850 wait pts/0 00:00:00 bash
0 S 1000 2093 1850 0 80 0 - 2885 poll_s pts/0 00:00:00 xterm
0 R 1000 2149 1850 0 80 0 - 1176 - pts/0 00:00:00 ps

À noter également que :


– la combinaison de touches CTRL Z met en pause (état bloqué) le processus qui s’exécute
en premier plan,
– la commande bg fait redémarrer le processus en pause en arrière-plan,
– la commande fg fait passer le processus d’arrière-plan en premier plan ou le redémarre
en premier plan s’il est bloqué.

S’il y a plusieurs processus, il faut les lister avec la commande jobs et utiliser les
commandes fg %n et bg %n où n est le numéro du processus dans l’affichage de la
commande jobs (distinct du PID).
La figure 8.5 résume toutes ces possibilités de changement d’état.

&

Arrière bg
Bloqué
-plan
fg
fg
CTRL Z

Premier
plan

F IGURE 8.5 Changements d’états d’un processus


© Dunod – Toute reproduction non autorisée est un délit.

8.2.2 Destruction d’un processus


Le processus en premier plan peut en général être terminé par la combinaison de touches
CTRL C.
La commande kill -n PID permet de terminer tout processus, en premier plan ou en
arrière-plan, dont le PID est indiqué. Le paramètre n précise le type de terminaison. Par
exemple, kill -9 correspond à une terminaison impérative et immédiate.
114 Partie 2. La couche système/réseau

8.2.3 Autres possibilités


Il existe beaucoup d’autres possibilités, parmi lesquelles on peut citer :
– la commande nohup, qui lance un processus qui survit à la déconnexion de l’utilisateur,
– la commande crontab, qui permet de gérer la table des processus à exécuter à une date
et une heure données ou selon un cycle défini à l’avance, via le service cron et son démon
système crond,
– la commande at, qui permet d’exécuter une commande à un instant donné.
8 • La gestion des activités 115

EXERCICES

Exercice 8.1. Arbre des processus.


La commande pstree affiche l’arbre de tous les processus. Commenter l’extrait suivant.
init--|--NetworkManager ...
|
...
|
|-gnome-terminal--|--bash----pstree
| |-- ...
...

Exercice 8.2. Arrière-plan, premier plan.


On lance la fenêtre horloge avec la commande xclock -update 1, qui la met à jour
toutes les secondes. Le shell est bloqué car la commande fonctionne en premier plan.
a) Comment suspendre son exécution ?
b) La commande jobs affiche les processus suspendus ou en arrière-plan.
$ jobs
[1]+ Stoppé xclock -update 1

Comment faire passer xclock en arrière-plan ?


c) La commande ps -l liste les processus du terminal.
$ ps -l
PID TTY TIME CMD
2082 pts/0 00:00:00 bash
18665 pts/0 00:00:00 xclock
18666 pts/0 00:00:00 ps

Comment tuer la commande xclock ?


© Dunod – Toute reproduction non autorisée est un délit.

Exercice 8.3. Redirection.


Comment copier un fichier sans utiliser la commande cp ni un éditeur ?

Exercice 8.4. Tubes et filtres (1).


Comment afficher en une ligne les dix plus gros fichiers du répertoire /bin ?
Rappels :
– Avec ls -l, la taille se trouve dans le cinquième champ de la ligne.
– La commande sort peut trier en ordre inverse (-r) des données numériques (-n) sur le
ième champ d’une ligne (-ki), avec i démarrant à 1.
– La commande head affiche les dix premières lignes d’un fichier.
116 Exercices

Exercice 8.5. Tubes et filtres (2).


Un courrier électronique est un fichier de texte comprenant les lignes suivantes :
From: Prenom.Nom@exemple.fr
Date: Mon, 13 Jan 2015 11:23:28 +0000
To: Prenom1.Nom1@exemple.fr
Subject: bonjour

Bla bla.

Une boîte aux lettres est un fichier de texte dans lequel sont concaténés, c’est-à-dire mis bout
à bout, les courriers selon ce format.
Afficher en une ligne le nombre de courriers par expéditeur dans la boîte aux lettres mbox.
Remarque
La commande uniq -c compte les lignes semblables d’un fichier.
Chapitre 9

La gestion des données persistantes

9.1 LE CONCEPT DE FICHIER


9.1.1 Définition
Pour le système d’exploitation, un fichier est simplement un ensemble d’octets, fragmenté en
blocs, doté d’un nom et d’un ensemble d’attributs (taille, propriétaire, droits d’accès, etc.).
L’interprétation du contenu du fichier relève des applications.
Dans un système de type Unix, la notion de fichier est très large et recouvre :
– les fichiers ordinaires (files), qui contiennent du texte, des données binaires, du code
exécutable, etc.,
– les répertoires (directories), qui sont des fichiers système dont le contenu est une liste de
© Dunod – Toute reproduction non autorisée est un délit.

descriptions de fichiers,
– les fichiers spéciaux (special files), qui représentent les périphériques. On distingue les
fichiers spéciaux en mode caractère pour les terminaux, les imprimantes et les réseaux, et
les fichiers spéciaux en mode bloc, essentiellement pour les disques.

Le système de gestion de fichiers (SGF) est la partie du système d’exploitation chargée de la


conservation et de l’accès aux fichiers.

9.1.2 L’arborescence des fichiers


L’ensemble des noms de fichiers constitue une arborescence unique dont la racine est notée
/. Les répertoires constituent les nœuds intermédiaires et les fichiers ordinaires constituent
les feuilles de cet arbre.
118 Partie 2. La couche système/réseau

La plupart des systèmes essaient de respecter une structure standard (FHS pour Filesystem
Hierarchy Standard) qui permet aux utilisateurs de se retrouver plus facilement dans cette
vaste arborescence, qu’ébauche la figure 9.1.

bin boot dev etc home lib media mnt opt proc root sbin srv tmp usr var

opt X11 xml ... bin include lib local sbin share src ...

cache lib lock log mail opt spool tmp ...

F IGURE 9.1 Les premiers niveaux de l’arborescence de fichiers

Les principaux répertoires au premier niveau sont les suivants :


– bin (binaries) contient les commandes externes de base (on rapelle qu’une commande
externe n’est pas intégrée au shell au contraire d’une commande interne),
– boot contient les fichiers nécessaires au démarrage (amorçage) du système,
– dev (devices) contient les fichiers spéciaux correspondant aux périphériques,
– etc (editable text configuration) contient les principaux fichiers de configuration du
système, regroupés en sous-répertoires comme opt, pour les applications installées dans
opt, X11, pour la configuration de l’interface graphique, xml, pour la configuration de
XML, etc.,
– home contient les répertoires personnels des utilisateurs,
– lib (libraries) contient les bibliothèques partagées de base (l’équivalent des DLL de
Windows),
– media est le répertoire où sont montés temporairement les médias amovibles, clés USB,
CD/DVD, etc.,
– mnt (mount) est le répertoire où sont montés temporairement les systèmes de fichiers,
– opt (optional) contient les applications optionnelles,
– proc (processes) contient des fichiers de description des processus et du système,
– root est le répertoire personnel du superutilisateur (administrateur) root,
– sbin (system binaries) contient les commandes de base d’administration,
– srv (services) contient les données sur les services hébergés, notamment les services
réseau, web, FTP, etc.,
– tmp contient les fichiers système temporaires,
9 • La gestion des données persistantes 119

– usr (unix system resources) est une hiérarchie secondaire, contenant elle-même des
sous-répertoires bin (binaires), lib (bibliothèques), local (hiérarchie de troisième
niveau spécifique à la machine), src (codes source), etc., qui contiennent les éléments
non indispensables au système de base, mais utiles aux autres logiciels installés avec le
système,
– var contient les fichiers variables, tels que les journaux du système (sous-répertoire log),
les files d’impression (spool), les boîtes de réception des courriers électroniques (mail),
etc.

Cette arborescence unique est créée au démarrage du système, quand les systèmes de fichiers
des différentes partitions des disques ou SSD (cf. paragraphe 13.2) sont montés de manière
automatique dans les bons répertoires. Par exemple, la partition racine est montée dans / et la
partition des homes des utilisateurs est montée dans /home. L’utilisateur peut ensuite monter
et démonter des systèmes de fichiers additionnels dans les répertoires mnt ou media à l’aide
des commandes mount et umount.

9.1.3 Les noms de fichier


Les systèmes de type Unix sont sensibles à la casse, c’est-à-dire qu’ils différencient les
majuscules des minuscules dans les noms. En théorie, tous les caractères du clavier sont
autorisés dans les noms. En pratique, il vaut mieux s’abstenir d’utiliser certains caractères
ayant des significations particulières pour les shells, comme * ? [ ] > < | /. Le
caractère - est déconseillé au début d’un nom car certaines commandes pourraient
l’interpréter comme une option. Les caractères accentués sont aussi à éviter car ils peuvent
parfois provoquer des erreurs.
La notion d’extension, qui dans certains systèmes précise le type du fichier, comme
fichier.txt où l’extension .txt indique que le fichier est un texte, n’est pas gérée par
les systèmes de type Unix. Le caractère . peut être utilisé librement. Certains utilisateurs
s’astreignent malgré tout à utiliser des extensions pour faciliter la reconnaissance des fichiers.
Le caractère de remplacement (wildcard ou « joker ») ? dénote un caractère quelconque dans
un nom. Le caractère * dénote toute suite de 0 à plusieurs caractères dans un nom ou, s’il est
utilisé seul, l’ensemble des fichiers d’un répertoire donné. {a,b,c} remplace a ou b ou c et
[a-i] remplace un caractère entre a et i compris.
© Dunod – Toute reproduction non autorisée est un délit.

Exemples
echo *.jpeg liste tous les fichiers finissant par .jpeg.
rm fich? supprime tous les fichiers dont le nom commence par fich suivi d’un caractère.
mv * ~/old déplace (commande mv pour move) tous les fichiers du répertoire courant dans
le répertoire old du home de l’utilisateur.

9.1.4 Les chemins d’accès


a) Les chemins absolus
Un chemin d’accès absolu (absolute path) part de la racine / et liste tous les répertoires
jusqu’au fichier, les éléments étant séparés par le caractère /.
Exemples de chemins absolus dans l’arborescence de la figure 9.2
120 Partie 2. La couche système/réseau

/
répertoire

chier
home
ordinaire

zoe arthur

images cours docs todo.lst

latex
f2.jpeg

cv.tex

F IGURE 9.2 Un extrait d’une arborescence de fichiers

Le fichier f2.jpeg est désigné par /home/zoe/images/f2.jpeg.


Le fichier cv.tex est désigné par /home/arthur/docs/latex/cv.tex. Sachant
qu’un utilisateur peut désigner son répertoire home par le caractère ~, le chemin peut écrire
également ~/docs/latex/cv.tex.

b) Les chemins relatifs


Un chemin d’accès relatif (relative path) part du répertoire courant de l’utilisateur concerné.
On verra ultérieurement les commandes permettant de déplacer le répertoire courant dans
l’arborescence.
Les chemins relatifs peuvent utiliser les notations . pour désigner le répertoire courant et ..
pour remonter d’un niveau dans l’arborescence.
Exemples de chemins relatifs dans l’arborescence de la figure 9.2
On suppose que le répertoire courant est le home d’Arthur.
Le fichier todo.lst peut être désigné par todo.lst ou./todo.lst.
Le fichier cv.tex par docs/latex/cv.tex ou par ./docs/latex/cv.tex.
Le fichier f2.jpeg par ../zoe/images/f2.jpeg.

9.2 LA GESTION DES FICHIERS EN SHELL


9.2.1 Création
Le plus souvent, les fichiers sont créés par les applications (éditeurs de textes, compilateurs,
etc.) et pas directement par une commande.
9 • La gestion des données persistantes 121

On peut néanmoins créer explicitement un fichier en redirigeant un flot de caractères


normalement affiché à l’écran via la commande echo vers un fichier.
Exemples
echo ’abcd’ > fich crée un fichier fich dans le répertoire courant contenant les codes
des caractères a, b, c et d.
echo "" > fich1 crée un fichier fich1 vide dans le répertoire courant. À noter que la
commande touch fich1 a le même effet si fich1 n’existe pas.
La commande mkdir chemin_repertoire crée le répertoire indiqué, initialement
vide.

9.2.2 Suppression
La commande rm chemin_fichier supprime le fichier indiqué. Il est recommandé
d’ajouter l’option -i pour générer une demande de confirmation avant la suppression
effective. On peut le systématiser en créant un alias (cf. paragraphe 12.1.3).
La commande rmdir chemin_repertoire supprime le répertoire indiqué, qui doit être
vide. La commande rm -r chemin_repertoire efface récursivement tout le répertoire
et ses sous-répertoires.

9.2.3 Affichage
La commande cat chemin_fichier affiche le fichier indiqué. Il existe d’autres
commandes pour afficher des parties du fichier seulement, comme ses premières lignes via
la commande head ou ses dernières lignes via la commande tail (10 par défaut).

9.2.4 Listage
La commande ls chemin_repertoire liste le contenu du répertoire indiqué. Avec
l’option -l, on obtient l’affichage des caractéristiques des éléments du répertoire indiqué.
Exemple
ls /home liste les éléments du répertoire /home de la figure 9.2 :
© Dunod – Toute reproduction non autorisée est un délit.

arthur zoe

ls -l /home affiche les caractéristiques des éléments du répertoire /home :


drwxr-xr-x 35 arthur arthur 4096 oct. 8 09:37 arthur
drwxr-xr-x 35 zoe zoe 2265 oct. 6 10:49 zoe

Le d initial indique que l’élément est un répertoire (directory). On peut trouver aussi un -
pour un fichier standard, un l pour un lien symbolique, un b pour un périphérique en mode
bloc, un c pour un périphérique en mode caractères, etc.
Les neuf caractères suivants sont les droits d’accès à l’élément listé (cf. paragraphe 11.1.3).
On trouve ensuite le nombre de liens, le propriétaire et le groupe, la taille en octets, la date
de dernière modification et le nom de l’élément.
122 Partie 2. La couche système/réseau

9.2.5 Recherche
La commande find repertoire -name nom recherche les fichiers du nom indiqué
dans le sous-arbre dont le répertoire racine est indiqué et affiche les chemins absolus des
fichiers trouvés.
Exemple
find /bin -name passwd affiche par exemple :
/usr/share/doc/passwd
/usr/bin/passwd

9.2.6 Déplacement dans l’arborescence des fichiers


À la connexion, le répertoire courant est le home de l’utilisateur. Celui-ci peut le déplacer
grâce à la commande cd chemin_acces (cd pour change directory).
Les notations .. (répertoire père) et ~ (répertoire home) sont souvent utilisées avec la
commande cd.
Exemples : cd .. ou cd ~/cours.

9.2.7 Recherches et modifications dans les fichiers de texte


a) La recherche de chaînes de caractères
La recherche de chaînes de caractères dans un fichier de texte s’effectue avec la commande
grep expression_reguliere fichier, qui affiche les lignes du fichier contenant
la chaîne de caractères spécifiée par l’expression régulière.
La forme la plus simple d’expression régulière est une simple chaîne de caractères. Les
formes plus complexes sont étudiées au paragraphe suivant.
On peut ajouter à la commande grep des options comme -v pour afficher les lignes
ne contenant pas la chaîne, -c pour afficher seulement le nombre de lignes contenant la
chaîne, -i pour ignorer la casse (majuscule ou minuscule) et -x pour afficher les lignes
correspondant exactement à la chaîne. Pour plus de détails, on peut consulter [GNU16].
Exemple
grep -c "printf" prog.c affiche le nombre de lignes contenant la chaîne printf
dans le fichier prog.c.

b) La modification d’un texte


Pour substituer une chaîne de caractères à une autre chaîne de caractères dans un fichier de
texte, on peut utiliser l’éditeur non interactif sed et sa commande interne de substitution s :
sed "s/expression_reguliere/chaine" fichier recherche la première
occurrence qui satisfait l’expression régulière dans le fichier et la remplace par chaine.
sed "s/expression_reguliere/chaine/g" fichier substitue toutes les
occurrences.
Exemple
sed "s/M./Monsieur/g" fich remplace toutes les occurrences de la chaîne M. par
la chaîne Monsieur.
9 • La gestion des données persistantes 123

La commande interne de suppression d de sed permet diverses manipulations :


– Supprimer les lignes comprises dans un intervalle donné.
Exemple
sed "20,30d" fichier supprime les lignes 20 à 30 de fichier.
– Supprimer les lignes qui contiennent une certaine chaîne ou expression régulière.
Exemple
sed "/toto/d" fichier supprime les lignes contenant la chaîne toto.
– Supprimer les lignes qui ne contiennent pas une certaine chaîne ou expression régulière.
Exemple
sed "/toto/!d" fichier ne conserve que les lignes contenant la chaîne toto.
En réalité, les lignes du fichier d’entrée ne sont pas supprimées. Elles le sont seulement
au niveau de la sortie standard. Il faut rediriger cette sortie standard vers un fichier pour
rendre les suppressions effectives en mémoire.

L’éditeur non interactif sed permet beaucoup d’autres manipulations sur les textes qui ne
sont pas détaillées ici ([GNU10]).

c) Les expressions régulières

Les expressions régulières (regular expression ou regexp) sont une écriture compacte pour
représenter une chaîne parfois infinie de caractères. Elles sont utilisées dans une foule de
langages et d’outils.
Une expression régulière prend la forme d’une chaîne de caractères composée de caractères
normaux et de caractères spéciaux. On conseille de l’écrire entre apostrophes simples ou
doubles comme toutes les chaînes. Les caractères spéciaux peuvent différer d’un langage ou
d’un outil à l’autre par quelques détails. Il existe toutefois une sorte de noyau commun qui
comprend les notations suivantes :
– ^chaine représente une chaîne en début de ligne.
– chaine$ représente une chaîne en fin de ligne.
– . représente n’importe quel caractère.
© Dunod – Toute reproduction non autorisée est un délit.

– c* représente 0 ou plus occurrences du caractère c, soit la chaîne vide ou les chaînes c,


cc, ccc, etc.
– c+ représente 1 ou plus occurrences du caractère c, soit les chaînes c, cc, ccc, etc.
– c? représente 0 ou 1 occurrence du caractère c. Par exemple, mots? représente la chaîne
mot ou la chaîne mots.
– | représente un choix entre chaînes. Par exemple, un|des représente la chaîne un ou la
chaîne des.
– ( ) permet de définir une sous-expression. Par exemple, (k|c|m)m équivaut à
km|cm|mm.
– [xyz] représente un des caractères de la liste.
– [^xyz] représente un caractère différent de ceux de la liste.
124 Partie 2. La couche système/réseau

– [B-F] ou [2-6] représente un des caractères de l’intervalle. Par exemple, [A-Za-z]


représente une lettre majuscule ou minuscule.
– \c rend littéral le caractère spécial c qui suit. Par exemple, \* représente le caractère * et
non un ensemble d’occurrences de caractères.

Exemples
"^[+-]?[0-9]+$" représente un entier d’au moins un chiffre éventuellement signé.
grep "^#" script affiche toutes les lignes de commentaires du fichier script,
c’est-à-dire toutes les lignes avec un # en début de ligne.
9 • La gestion des données persistantes 125

EXERCICES

Exercice 9.1. Chemins absolus et relatifs.


Un utilisateur se trouve dans son home, qui est le répertoire courant.
a) Depuis ce home, comment désigner sans modifier le répertoire courant, le fichier passwd
(qui se trouve dans le répertoire /etc), par un chemin absolu et par un chemin relatif ?
b) Dans la même situation, comment lister les caractéristiques de la commande rmdir en
utilisant un chemin absolu et un chemin relatif ?

Exercice 9.2. Caractéristiques des chemins.


a) Comment distinguer au premier coup d’œil un chemin absolu d’un chemin relatif ?
b) Est-il vrai qu’un chemin absolu vers un fichier est toujours unique ?
c) Est-il vrai qu’il existe toujours plusieurs chemins relatifs vers un fichier ? Donner un
exemple pour justifier la réponse.
d) Est-il vrai que si le répertoire courant est la racine, les chemins absolus et les chemins
relatifs sont identiques ? Donner un exemple pour justifier la réponse.

Exercice 9.3. Manipulation de fichiers et répertoires.


Un utilisateur se trouve dans son home, qui est le répertoire courant.
a) Comment créer dans ce home deux répertoires rep1 rep2. Puis ajouter dans rep1 un
fichier fich1 et dans rep2 un répertoire projet et un fichier fich4. Puis ajouter dans
projet des fichiers fich2 et fich3. Tous les fichiers doivent contenir un texte d’une
ligne.
b) Comment afficher le contenu de fich2 et fich4 avec un chemin absolu et un chemin
relatif ?
c) Comment lister projet avec un chemin absolu et un chemin relatif ?
d) Comment déplacer fich1 dans projet ?
e) Comment supprimer projet ?
© Dunod – Toute reproduction non autorisée est un délit.

f) Comment supprimer tout le reste en utilisant des caractères de remplacement ?

Exercice 9.4. Caractères de remplacement.


a) À l’aide des caractères de remplacement, supprimer en une seule commande les fichiers
titi, toto et tata du répertoire /tmp.
b) Avec l’option -d de la commande ls, lister tous les noms de répertoires dans /usr/bin
qui :
(1) commencent par s,
(2) comportent exactement quatre caractères,
(3) comportent la suite de caractères ssh,
(4) commencent par s ou t.
126 Exercices

Exercice 9.5. Expressions régulières avec grep.


Le fichier /etc/passwd contient des données concernant les différents comptes sur la
machine. Les lignes du fichier ont la forme suivante :
nom:x:UID:GID:commentaire:répertoire de connexion:shell.
Par exemple :
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
pierre:x:1000:1000:pierre,,,:/home/pierre:/bin/bash
paul:x:1001:1000:paul,,,:/home/paul:/bin/csh
jacques:x:1002:1000:jacques,,,:/home/jacques:/bin/bash
marie:x:1003:1000:marie,,,:/home/marie:/bin/sh
arthur:x:1004:2000:arthur,,,:/home/arthur:/bin/csh

a) Afficher les lignes contenant home.


b) Afficher les lignes commençant par a, b, c ou d.
c) Afficher les lignes contenant a, b, ou c.
d) Afficher les lignes contenant a comme deuxième caractère.
e) Afficher les lignes qui se terminent par csh.
f) Afficher les lignes où ne figure pas home.
g) Afficher les comptes dont le nom commence par une voyelle.

Exercice 9.6. grep et find.


Pour analyser un problème survenu lors d’une session graphique, on procède aux actions
suivantes, correspondant chacune à une ligne de commande unique.
a) Affichage des caractéristiques détaillées du processus gnome-session, et uniquement
de celui-ci.
On rappelle que la commande ps possède une option -l pour obtenir les caractéristiques
détaillées des processus et une option -e pour afficher tous les processus et pas seulement
ceux attachés au terminal, comme c’est le cas par défaut.
b) Recherche du fichier .session-log qui se trouve quelque part dans le home de
l’utilisateur.
c) Affichage de l’occupation mémoire avec la commande top -n1. Cette commande affiche
une seule fois plusieurs lignes de diagnostic dont on extrait la ligne commençant par Mem:.
Chapitre 10

La gestion des communications

10.1 LA DIVERSITÉ DES FORMES DE COMMUNICATION


La gestion des communications recouvre trois aspects très différents :
(1) la communication interprocessus (IPC pour Inter Process Communication), que l’on peut
subdiviser en :
– communication entre processus d’une même machine, ou processus locaux,
– communication entre processus distants, via le réseau ;

(2) la communication homme-système ;


(3) la communication homme-homme, médiée par le système.
© Dunod – Toute reproduction non autorisée est un délit.

10.1.1 La communication entre processus locaux


Les systèmes de type Unix proposent de nombreux concepts pour assurer la communication
entre processus locaux et leur synchronisation, comme les signaux, les tubes (pipes), les files
de messages, les sémaphores, les segments de mémoire partagée, etc.
Ces concepts sont le plus souvent mis en œuvre dans les programmes via les fonctions de la
bibliothèque standard et les appels système. Mais seule leur utilisation au niveau du shell est
détaillée ici.

a) Les signaux
Un signal est assimilable à une interruption (cf. paragraphe 4.1.3) mais est dirigé vers
un processus et non vers le processeur. Le processus destinataire réagit en exécutant un
128 Partie 2. La couche système/réseau

programme de traitement, appelé traitant ou handler, soit défini par défaut, soit programmé
de manière ad hoc.
Certains signaux peuvent être bloqués par le récepteur, d’autres non. L’émetteur peut être un
processus quelconque ou le système d’exploitation lui-même. Certains signaux peuvent aussi
être déclenchés depuis le shell, ce qui en fait un moyen de communication homme-système
(cf. paragraphe 10.1.3).

b) Les tubes
Un tube (pipe) est un canal de communication unidirectionnel entre processus. Il peut être
créé par programme ou via le shell.
Les deux processus liés par le tube s’exécutent en parallèle. Les sorties du premier processus
sont stockées dans le tube et consommées par le second processus. Quand le tube devient
plein, le premier processus est suspendu. Quand le tube devient vide, le second processus est
suspendu.
On rappelle qu’en shell les tubes sont créés par l’opérateur binaire |, qui dirige la
sortie standard d’un premier processus vers l’entrée standard d’un second processus
(cf. paragraphe 8.1.4).

10.1.2 La communication entre processus distants


Le concept de socket fournit une interface logicielle d’accès aux protocoles de transport
TCP et UDP (cf. paragraphe 5.2.2). Les sockets permettent de programmer des applications
utilisant les services du réseau, comme illustré par la figure 10.1.

Contrôlé
par le
Processus Processus
développeur
Socket Socket
Internet Contrôlé
TCP/UDP TCP/UDP
par le
système
Hôte 1 Hôte 2

F IGURE 10.1 Le rôle d’interface logicielle des sockets.

Les sockets peuvent également être utilisés sur une seule machine, pour assurer la
communication entre des processus locaux.

10.1.3 La communication homme-système


a) Les terminaux

À l’origine, un terminal était un matériel comportant un clavier et un écran en mode texte


offrant le plus souvent 24 lignes de 80 caractères, comme les terminaux VT100 de DEC dans
les années 1980.
10 • La gestion des communications 129

Pour un système de type Unix, le mot terminal (ou tty pour teletype) désigne par abus de
langage une fenêtre d’invite de commandes contenant un shell. Elle est appelée aussi console,
terminal virtuel ou pseudo-terminal. Chaque terminal est représenté par un fichier spécial géré
par le noyau, nommé /dev/ttyi, où i est le numéro du terminal virtuel.
Les émulateurs de terminaux sont des logiciels qui procurent d’autres types terminaux, plus
riches en fonctionnalités. C’est le cas par exemple des terminaux X. Les fichiers spéciaux qui
les représentent sont nommés /dev/pts/i, où i est le numéro du pseudo-terminal.

b) L’environnement graphique
X Window, appelé aussi X11 ou X, est un environnement graphique « fenêtré » qui gère
l’interaction homme-machine via l’écran, la souris et le clavier. X Window est organisé selon
une architecture client/serveur :
– Le serveur X s’exécute sur une machine dotée d’un clavier, d’une souris et d’un écran. Il
reçoit et effectue les requêtes d’affichage, d’entrée de texte et de déplacement de la souris.
– Les clients X sont les applications, locales ou distantes, qui ont des besoins d’affichage.
Ils les satisfont en communiquant avec le serveur X selon le protocole X au travers de la
bibliothèque X (Xlib). Ces clients peuvent être des terminaux X, mais aussi des navigateurs
web, ou encore des gestionnaires de fenêtres, ou window managers (cf. figure 10.2).

Clavier Souris Ecran

Serveur X

Client X Gestionnaire
de fenêtres Machine

Réseau
© Dunod – Toute reproduction non autorisée est un délit.

Gestionnaire Client X
de fenêtres Machine
distante

F IGURE 10.2 L’architecture client/serveur de X Window

Un gestionnaire de fenêtres est un client qui gère l’affichage, la sélection, le déplacement,


le redimensionnement, les décorations et les effets graphiques (transparence, ombrages,
icônification. . .) des fenêtres. Il en existe de nombreux comme Compiz, Metacity, Kwin,
Enlightenment, etc.
Les environnements de bureau, comme KDE (K Desktop Environment) ou GNOME (GNU
Network Object Model Environment), incluent plusieurs éléments : le bureau, avec une image
d’arrière-plan et des icônes, un gestionnaire de fenêtres spécifique, des barres de menus et les
130 Partie 2. La couche système/réseau

panneaux associés, des composants variés comme les barres de tâches (liste des fenêtres), les
tableaux de bord, les docks, etc.
La figure 10.3 résume ces différentes couches pour l’interaction homme-machine dans les
systèmes de type Unix.

Utilisateur

Environnement de bureau
(KDE, GNOME...)

Serveur d'achage Gestionnaire de fenêtres


(client)

Noyau

Matériel

F IGURE 10.3 Les couches de l’interface graphique des systèmes de type Unix

c) L’impression
Les systèmes d’exploitation de type Unix fournissent des logiciels pour mettre en place
un serveur d’impression. Un tel serveur permet d’imprimer des documents localement
ou à distance sur les différents périphériques d’impression, après les avoir mis en forme
conformément aux exigences du périphérique (en PostScript par exemple).
Le serveur d’impression gère sur le disque une file d’attente (spool) par imprimante,
contenant les travaux d’impression demandés par les différents utilisateurs depuis des
machines clientes.
Un des systèmes d’impression les plus utilisés dans les systèmes de type Unix est CUPS
(Common Unix Printing System).

10.1.4 La communication homme-homme médiée par le système


Dans le domaine des applications de messagerie, les systèmes de type Unix offrent des
possibilités de communication textuelle :
– entre utilisateurs d’un même système, avec l’utilitaire write login,
10 • La gestion des communications 131

– entre utilisateurs du même réseau local, avec l’utilitaire talk login@machine (ou
son équivalent ntalk),
– entre utilisateurs d’Internet, avec le courrier électronique (mail), qui sera décrit en détail
au paragraphe 20.2.

10.2 LA GESTION DES COMMUNICATIONS EN SHELL


10.2.1 L’utilisation des signaux
Certains signaux sont accessibles depuis le shell et permettent de communiquer avec le
système. C’est le cas en particulier des signaux :
– SIGINT, par la combinaison de touches CTRL C, qui implique par défaut l’interruption
du processus de premier plan associé au terminal dans lequel il est émis. Ce signal peut
être bloqué et son traitant peut être redéfini.
– SIGTERM, par la commande kill PID, qui implique par défaut la terminaison du
processus désigné. Ce signal peut être bloqué et son traitant peut être redéfini.
– SIGKILL, par la commande kill -9 PID, qui tue immédiatement et impérativement
le processus désigné. Ce signal est non blocable et son traitant ne peut pas être redéfini.

10.2.2 La gestion des terminaux


En général, le processus init lance six terminaux lors de la séquence de démarrage du système.
L’utilisateur peut y accéder par les touches CTRL ALT Fn (avec n compris entre 1 et 6). La
combinaison de touches CTRL ALT F7 permet de revenir à l’interface graphique.
Les terminaux X peuvent être lancés avec la commande xterm.
Exemple : lancement en arrière-plan
xterm &
[1] 3102
Le 1 est le numéro du pseudo-terminal (/dev/pts/1) et 3102 est le PID.
© Dunod – Toute reproduction non autorisée est un délit.

10.2.3 La gestion des impressions


a) Impression d’un fichier

Pour imprimer sur l’imprimante par défaut, on utilise la commande lpr fichier.
Pour imprimer sur une imprimante particulière, on utilise lpr -P nom_imprimante
fichier.
Remarque
La commande lpr et les commandes des paragraphes suivants sont d’origine BSD (Berkeley
Software Distribution). Il existe une autre syntaxe, d’origine UNIX System V, dont la
commande d’impression est lp. Le système d’impression CUPS offre les deux syntaxes.
132 Partie 2. La couche système/réseau

b) Choix de l’imprimante
La commande lpstat -p donne les caractéristiques des imprimantes disponibles.
La commande lpstat -d donne le nom de l’imprimante par défaut.
On peut fixer l’imprimante par défaut avec la commande lpadmin -d imprimante.

c) Gestion de la file d’attente des travaux


On peut visualiser les travaux en attente avec leurs numéros de job par la commande lpq ou
lpq -P imprimante. On peut supprimer un travail de la file d’attente par la commande
lprm numero_job ou lprm -P imprimante numero_job.
10 • La gestion des communications 133

EXERCICES

Exercice 10.1. Impression.


La commande lpr « rend la main » à l’utilisateur immédiatement.
Décrire ce qui se passe ensuite.

Exercice 10.2. Les signaux.


La commande kill n’est pas faite uniquement pour tuer des processus. Elle permet de leur
envoyer tout type de signal. En reprenant l’horloge graphique de l’exercice précédent, quelles
sont les commandes permettant de suspendre (STOP) et redémarrer (CONT) cette horloge ?
Le tableau des signaux obtenu par kill -l est le suivant :
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
...

Exercice 10.3. La mort du père.


Un terminal graphique est lancé en arrière-plan par la commande xterm &. Dans ce terminal
graphique, une horloge graphique est lancée en arrière-plan par xclock -update 1 &.
La commande ps -l dans le terminal graphique donne le résultat suivant :
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 7168 7166 0 80 0 - 1855 wait pts/2 00:00:00 bash
0 S 1000 7222 7168 0 80 0 - 2474 poll_s pts/2 00:00:00 xclock
0 R 1000 7224 7168 0 80 0 - 1175 - pts/2 00:00:00 ps

La commande ps -l dans le terminal d’origine donne :


0 S 1000 2082 2072 0 80 0 - 1937 wait pts/0 00:00:02 bash
© Dunod – Toute reproduction non autorisée est un délit.

0 S 1000 7166 2082 0 80 0 - 2944 poll_s pts/0 00:00:00 xterm


0 R 1000 7272 2082 0 80 0 - 1175 - pts/0 00:00:00 ps

On tue le terminal graphique par la commande kill -9 7166. L’horloge continue à


fonctionner mais n’apparaît plus avec un ps -l :
0 S 1000 2082 2072 0 80 0 - 1937 wait pts/0 00:00:02 bash
0 R 1000 7273 2082 0 80 0 - 1175 - pts/0 00:00:00 ps
[1]+ Processus arrêté xterm

a) Comment afficher la ligne du processus xclock ?


b) On obtient le résultat suivant. Quel est le nouveau père du processus ?
0 S 1000 7222 1 0 80 0 - 2474 poll_s ? 00:00:00 xclock

c) Comment tuer le processus horloge ?


134 Exercices

Exercice 10.4. Combinaison de tubes.


Écrire une ligne de commande qui donne les noms de tous les utilisateurs ayant au moins un
processus en cours d’exécution.
Indications :
– L’option -f de la commande ps affiche le nom des utilisateurs en première colonne.
– L’option h de la commande ps supprime l’en-tête de l’affichage.
– La commande cut permet de supprimer des colonnes d’un fichier. Les colonnes sont
définies par le séparateur x fourni par l’option -d’x’. L’option -fm-n spécifie de ne
garder que les colonnes numérotées de m à n incluses (numérotation à partir de 1).
– La commande uniq élimine les lignes dupliquées dans un fichier trié.

Exercice 10.5. La commande tee.


La commande tee fich est une commande qui lit depuis l’entrée standard et écrit à la fois
dans la sortie standard et dans le fichier fich, ce qui réalise une bifurcation (un « T ») dans
un flot de commandes.
Soit la chaîne de commandes suivante où les rectangles sont des commandes et les ellipses
sont des fichiers. Les flèches horizontales entrantes dans les commandes sont les entrées
standards, les flèches horizontales sortantes des commandes sont les sorties standard et les
flèches sortantes vers le bas des commandes sont les sorties d’erreur. Les commandes sont
exécutées une seule fois. Exprimez cette structure en deux lignes de commandes.

écran
data cd1 cd2 res1 cd3
res2

ferr
Chapitre 11

La gestion de la sécurité

11.1 LES CONCEPTS DE BASE DE LA SÉCURITÉ


11.1.1 Le concept d’utilisateur
Un système de type Unix est multi-utilisateur, c’est-à-dire que plusieurs personnes peuvent
ouvrir simultanément des sessions sur une machine. Chaque utilisateur doit donc être identifié
et ses droits doivent être précisément définis pour ne pas empiéter sur le domaine des autres
utilisateurs.
L’identification et l’authentification externe se font par un couple identifiant (User NAME
ou UNAME) et mot de passe (password). En interne, chaque utilisateur est identifié
par un numéro unique (UID pour User IDentifier). Le fichier /etc/passwd définit la
© Dunod – Toute reproduction non autorisée est un délit.

correspondance UNAME vers UID. Ce fichier de texte comporte une ligne par utilisateur
qui précise les données suivantes : UNAME, mot de passe (un x indique que le mot de
passe est crypté et stocké dans /etc/shadow), UID, GID (Group Identifier, voir ci-après),
commentaire (avec souvent le nom complet de l’utilisateur), répertoire personnel et chemin
absolu du shell utilisé.
Il existe obligatoirement un superutilisateur, possédant l’UID 0, nommé root et doté de tous
les droits de création, modification et suppression sur tous les objets du système.

11.1.2 Le concept de groupe


Chaque utilisateur appartient à un ou plusieurs groupes d’utilisateurs, repérés par un GID
et un GNAME. La notion de groupe permet de définir des droits d’accès communs à une
catégorie d’utilisateurs.
136 Partie 2. La couche système/réseau

La composition des groupes est définie dans le fichier /etc/group. Ce fichier de texte
comporte une ligne par groupe qui précise les données suivantes : GNAME, mot de passe
optionnel, GID et liste des membres.

11.1.3 Le concept de droit d’accès


Tout objet (fichier standard, fichier spécial, répertoire) possède un propriétaire et appartient à
un groupe. Il existe quatre classes d’utilisateurs au regard des droits (permissions) :
– u (user) : désigne l’utilisateur qui a créé l’objet, donc son propriétaire,
– g (group) : désigne les membres du groupe auquel appartient l’objet,
– o (others) : désigne tous les autres utilisateurs,
– a (all) : désigne tous les utilisateurs.

Chaque classe d’utilisateurs reçoit un des trois types de droits suivants :


– r (read) : droit de lecture ; pour un fichier, correspond au droit d’afficher le contenu, de
copier, etc. ; pour un répertoire, correspond au droit de le consulter (lister).
– w (write) : droit d’écriture ; pour un fichier, correspond au droit de modifier le contenu ;
pour un répertoire, correspond au droit de créer, renommer et supprimer un élément du
répertoire.
– x (execute) : droit d’exécution ; pour un fichier, correspond au droit d’exécuter le
programme ou le script ; pour un répertoire, correspond au droit de le traverser, c’est-à-dire
de l’intégrer à un chemin d’accès.

On peut visualiser les droits grâce à la commande ls -l. Ils sont donnés par trois séries de
trois droits correspondant à r, w, x pour u puis g puis o. L’absence de droit est notée par un
tiret -.
Exemple
drwxr-xr-x 22 jl gjl 4096 mars 15 11:36 monrep
-rw-r--r-- 1 jl gjl 1408 juin 20 13:29 monfich.dat

Le propriétaire jl a tous les droits sur le répertoire monrep ; les membres du groupe gjl et
les autres utilisateurs ont les droits de lecture et d’exécution. Le propriétaire jl a les droits
de lecture et écriture sur le fichier monfich.dat ; les membres du groupe gjl et les autres
utilisateurs ont uniquement le droit de lecture.

11.2 LA GESTION DE LA SÉCURITÉ EN SHELL


11.2.1 La gestion des utilisateurs et des groupes
Les données d’un utilisateur sont disponibles par les commandes id nom_login, qui
fournit les données système, finger nom_login, qui fournit les données pratiques
comme le nom complet, le home, le shell, etc., et groups nom_login, qui donne les
groupes d’appartenance.
11 • La gestion de la sécurité 137

Le tableau suivant récapitule les commandes permettant de créer, modifier, supprimer des
utilisateurs et des groupes et de changer le mot de passe des utilisateurs et des groupes.

Action Utilisateur Groupe


Créer useradd nom_login groupadd nom_groupe
Modifier usermod nom_login groupmod nom_groupe
Supprimer userdel nom_login groupdel nom_groupe
Changer mot de passe passwd nom_login gpasswd nom_groupe

Remarque
On trouve dans beaucoup de distributions des commandes interactives pour la création des
utilisateurs et des groupes, nommées adduser et addgroup.

11.2.2 La gestion des droits


La modification des droits s’effectue par la commande chmod, qui peut prendre deux formes.

a) La forme symbolique
chmod [-R] [u g o a] [+ - =] [r w x] nom
avec les significations suivantes pour les options et symboles :
R : changement récursif sur un répertoire et tous ses sous-répertoires,
u : propriétaire (user), g : groupe (group), o : les autres (others), a : tous (all),
+ : ajouter, - : retirer, = : fixer,
r : lecture (read), w : écriture (write), x : exécution (execute).
Exemples
chmod a+r fich1 ajoute à tout le monde le droit de lire le fichier fich1.
chmod o-w fich2 retire aux autres le droit d’écrire dans le fichier fich2.
chmod go-rwx fich3 retire tous les droits sauf au propriétaire.
chmod -R o+rx rep1 ajoute aux autres le droit de lister et traverser le répertoire rep1
et tous ses sous-répertoires.
© Dunod – Toute reproduction non autorisée est un délit.

b) La forme absolue
chmod [-R] valeur_octale valeur_octale valeur_octale nom
Les valeurs octales représentent les droits de u, g et o calculés en octal selon le tableau
ci-après (le – vaut 0 et les lettres valent 2n selon leur position dans l’octet).
Exemples
chmod 640 fich correspond à rw- r-- ---
chmod -R 777 rep correspond à rwx rwx rwx

Les droits par défaut sont souvent fixés à 644 pour les fichiers et 755 pour les répertoires.
Ils peuvent être modifiés avec la commande umask.
138 Partie 2. La couche système/réseau

Droit Valeur alphanumérique Valeur octale


Aucun droit --- 0
Exécution seulement --x 1
Écriture seulement -w- 2
Écriture et exécution -wx 3
Lecture seulement r-- 4
Lecture et exécution r-x 5
Lecture et écriture rw- 6
Tous les droits rwx 7

11.3 DES CONCEPTS DE SÉCURITÉ AVANCÉS


Le modèle de sécurité initial, décrit dans ce qui précède, a été complété par plusieurs concepts
additionnels dont certains sont brièvement évoqués ici.
Un quatrième nombre octal peut être ajouté aux droits, les « droits étendus ». Ils
correspondent aux trois bits suivants :
– Le bit SUID (setUID) permet d’allouer temporairement à tout utilisateur les droits du
propriétaire d’un fichier exécutable pendant la durée de son exécution. L’utilisateur doit
bien entendu posséder le droit d’exécution de ce fichier.
Ce droit correspond à la valeur octale 4000.
Exemple
La commande /usr/bin/passwd, qui permet à un utilisateur de changer son mot de
passe, possède ce droit étendu. Cela permet à tout utilisateur de prendre les droits du
propriétaire, à savoir root, pendant l’exécution de la commande, et donc de modifier le
fichier /etc/passwd pour lequel il ne possède pas les droits d’écriture.
– Le bit GUID (setGID) fonctionne comme SUID pour les groupes. Il alloue à tout utilisateur
les droits du groupe du propriétaire du fichier exécutable.
Ce droit correspond à la valeur octale 2000.
– Le sticky bit (« bit collant ») permet de différencier les droits de création et de suppression
d’un fichier dans un répertoire, qui sont confondus avec le droit classique d’écriture d’un
répertoire. Il interdit la suppression d’un fichier aux utilisateurs autres que le propriétaire
du répertoire.
Exemple
Dans une répertoire où tout le monde possède tous les droits, le sticky bit permet à un
utilisateur de protéger ses propres fichiers de la destruction par quelqu’un d’autre.
Appliqué aux fichiers exécutables, la signification du sticky bit est tout autre : il oblige
l’exécutable à rester présent (« collé ») en mémoire vive après son exécution pour pouvoir
être relancé plus rapidement. Il ne peut être positionné que par le superutilisateur root.
Ce droit correspond à la valeur octale 1000.

La commande sudo commande permet à un utilisateur d’exécuter la commande indiquée


en tant que root après s’être authentifié avec son mot de passe, s’il y est autorisé par le fichier
/etc/sudoers.
11 • La gestion de la sécurité 139

Exemple
$ sudo apt-get update
[sudo] password for dupont:

Dans certains systèmes, comme la distribution Linux Ubuntu ou Mac OS X, le compte root
est désactivé et la commande sudo est le seul moyen d’effectuer les tâches d’administration.
© Dunod – Toute reproduction non autorisée est un délit.
140 Exercices

EXERCICES

Exercice 11.1. Protection du home.


Quelle commande interdit aux autres utilisateurs toute action sur le répertoire personnel et ce
qu’il contient ?

Exercice 11.2. Droits d’accès.


Sans les regarder, déterminer les droits d’accès du fichier passwd, de la commande mkdir
et d’une copie du fichier passwd dans le home d’un utilisateur.

Exercice 11.3. La commande chmod.


Expliquer les commandes suivantes :
a) chmod u+rw mon_fichier
b) chmod -R a+rx mon_dossier
c) chmod 755 mon_dossier
d) chmod 644 mon_fichier

Exercice 11.4. Droits sur un répertoire.


Que peut faire un utilisateur qui possède le droit x sur un répertoire rep sans posséder le
droit r ?

Exercice 11.5. La commande umask.


La commande umask (user file creation mode mask) définit un masque qui est utilisé pour
déterminer les droits par défaut sur les fichiers et répertoires créés par un utilisateur.
umask x, où x est un nombre exprimé en octal, détermine les permissions en prenant
NON x et en faisant un ET sur 666 pour les fichiers et 777 pour les répertoires.
Qu’affiche la suite de commandes suivante ?
umask 22
mkdir rep
echo "" > fich
ls -l

Exercice 11.6. SUID.


La commande qui permet de modifier le mot de passe /usr/bin/passwd possède les
droits 4755, ce qui donne par ls -l :
-rwsr-xr-x 1 root root 41284 sept. 13 2012 /usr/bin/passwd.
Expliquer comment cela permet à un utilisateur quelconque de modifier son mot de passe
dans le fichier /etc/shadow dont les protections sont 640 (rw- r-- ---).
Chapitre 12

La programmation shell

12.1 INTERPRÉTEUR, ENVIRONNEMENT, ALIAS


12.1.1 Les interpréteurs de commandes
Après s’être connecté, un utilisateur commence sa session avec l’interpréteur de commandes,
ou shell, qui lui est associé dans le fichier /etc/passwd ou, à défaut, celui fourni en
standard par le système. On parle de login shell.
Un interpréteur de commandes analyse et exécute un langage de commandes, ou langage
shell. Il existe de multiples versions de shell dont les plus connues sont :
– le shell originel (sh) ou Bourne shell, du nom de son développeur, Stephen Bourne,
– le Korn shell, développé par David Korn (ksh),
© Dunod – Toute reproduction non autorisée est un délit.

– le C shell, dont la syntaxe est librement inspirée du langage C (csh, étendu ultérieurement
en tcsh),
– le Bourne Again shell (bash), qui étend sh avec des bonnes idées issues de ksh et csh,
– le Z shell (zsh), qui reprend les fonctions les plus pratiques de bash, ksh et tcsh.

Dans la suite, nous utilisons bash, qui est le shell par défaut de nombreux Unix libres,
notamment les systèmes GNU/Linux, et de Mac OS X.

12.1.2 Les variables d’environnement


La commande echo $SHELL affiche le contenu de la variable d’environnement SHELL,
c’est-à-dire le shell utilisé. Toutes les variables d’environnement et plus largement toutes
142 Partie 2. La couche système/réseau

les variables du langage sont des chaînes de caractères, et la commande echo permet
de les afficher. Outre la variable SHELL, plusieurs autres variables d’environnement sont
d’utilisation courante comme :
– HOME, qui contient le chemin du répertoire personnel,
– PWD, qui contient le répertoire courant,
– PS1, qui contient l’invite de saisie ou prompt ; par défaut, l’invite est constituée de
nom_login@nom_machine:repertoire_courant$, avec # à la place de $ pour
le superutilisateur ; dans la suite, l’invite est simplifiée en $,
– PATH, qui contient la liste des répertoires dans lesquels le système recherche les
commandes. Les différents chemins des répertoires sont séparés par des caractères :. La
recherche d’une commande se fait dans l’ordre où les répertoires sont écrits dans le PATH.
On peut ajouter un répertoire au PATH par PATH=$PATH:chemin_repertoire,
qui affecte (=) à la variable PATH son contenu actuel ($PATH) suivi de : et du chemin
du nouveau répertoire. Cette modification n’est valable que pour la session en cours.
Pour la rendre permanente pour un utilisateur donné, il faut l’inclure dans le fichier de
configuration de bash ~/.bashrc.
Exemple
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11
$ PATH=$PATH:/home/jl/bin
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/home/jl/bin

12.1.3 Les alias


Ils servent à créer des commandes personnalisées à partir de commandes existantes.
Exemple
alias llm=’ls -l | more’ # pas d’espaces autour du =
Cette personnalisation n’est valable que pour la session en cours. Pour la rendre permanente
pour un utilisateur donné, il faut l’inclure dans le fichier de configuration ~/.bashrc.

12.2 LE LANGAGE BASH


La programmation en langage shell est relativement complexe, car foisonnante en
possibilités. Souvent, plusieurs syntaxes coexistent pour exprimer la même chose pour
des raisons de compatibilité avec des shells antérieurs. Seuls les programmeurs avertis
peuvent tirer complètement parti du langage bash pour produire des scripts efficaces et sûrs.
Pour les débutants, la syntaxe du langage est souvent déroutante. Par exemple, l’absence
d’un espace à un endroit donné peut provoquer une erreur de syntaxe ou même une erreur
d’exécution. Par contre, comme le langage est interprété, c’est-à-dire que chaque commande
est analysée puis exécutée immédiatement, la recherche et la correction des erreurs en sont
facilitées.
12 • La programmation shell 143

Ce paragraphe survole les principales notions du langage, mais demeure loin d’être exhaustif.
Il permet d’écrire des scripts simples mais pas nécessairement de comprendre des scripts
sophistiqués écrits par d’autres. Pour ce faire, il faut se référer au manuel de définition du
langage [BAS15].

12.2.1 La notion de script


Un script permet d’automatiser une série d’opérations. Il se présente sous la forme d’un
fichier de texte contenant une suite de commandes qui sont exécutées a priori de manière
séquentielle. Un script bash commence par #!/bin/bash.
Exemple
#!/bin/bash
# Un premier script nomme sc1 (Remarque : cette ligne est un commentaire)
echo Liste détaillée des fichiers :
ls -l
exit 0

À noter qu’un script devrait toujours retourner le code retour 0 si le script a réussi et une
valeur comprise entre 1 et 255 si une erreur s’est produite. La commande exit n arrête
le script et retourne le code n. En absence de retour explicite par exit, le code retour est
celui de la dernière commande exécutée. Dans l’exemple ci-dessus, la commande exit 0
pourrait être omise car ce script réussit si la commande ls -l réussit.
On exécute ce script en tapant :
– soit bash chemin_du_script (par exemple, bash~/sc1),
– soit chemin_du_script (par exemple, ~/sc1 ou ./sc1), si on a rendu le fichier
exécutable par la commande chmod +x chemin_du_script (par exemple, chmod
+x~/sc1),
– soit nom_du_script si, en outre, le répertoire où se trouve le script se trouve dans le
PATH (par exemple, le home de l’utilisateur).

12.2.2 Les commandes


© Dunod – Toute reproduction non autorisée est un délit.

La syntaxe générale d’une commande est la suivante :


[chemin/]nom[option ...] [argument ...]
où les crochets entourent les parties facultatives et les ... indiquent une répétition possible.
Les différents éléments peuvent être séparés par un ou plusieurs espaces. Une option est
généralement introduite par le caractère tiret (ex. : -a). Les arguments désignent les objets
sur lesquels doit s’exécuter la commande.
Dans une commande composée avec l’opérateur ; les deux commandes simples sont
exécutées l’une après l’autre. Avec les opérateurs && ou || la deuxième commande n’est
exécutée que si la première a réussi ou échoué.
Exemples
C1;C2 le shell exécute C1 puis C2.
C1&&C2 le shell exécute C1 puis C2 si C1 a rendu un code retour nul (réussite).
C1||C2 le shell exécute C1 puis C2 si C1 a rendu un code retour non nul (échec).
144 Partie 2. La couche système/réseau

Une commande interne est une commande dont le code est implanté au sein de l’interpréteur
de commandes, qui n’a donc pas besoin de créer de processus pour l’exécuter. C’est par
exemple le cas des commandes suivantes : cd, echo, for, pwd, etc.
Une commande externe est une commande dont le code se trouve dans un fichier ordinaire. Le
shell crée un processus pour l’exécuter. C’est par exemple le cas des commandes suivantes :
ls, mkdir, rmdir, chmod, etc.
Pour obtenir l’aide en ligne décrivant une commande, il faut utiliser la commande man
nom (ex. : man ls), pour une commande externe, et help nom (ex. : help cd), pour
une commande interne. L’annexe 2, en fin d’ouvrage, donne une liste de cent commandes
importantes avec des exemples d’utilisation.
Remarque
Pour faciliter l’interaction, le shell maintient un historique des commandes, dans lequel on
peut circuler avec les touches « flèche vers le haut » et « flèche vers le bas ». Par ailleurs, la
touche « tabulation » complémente automatiquement les noms de commande et de fichiers
en fonction des caractères déjà saisis (completion).

12.2.3 Les paramètres


En langage shell, un paramètre est une entité pouvant contenir une valeur. On en distingue
trois catégories : les variables, les paramètres de position et les paramètres spéciaux.

a) Les variables
Une variable est identifiée par un nom constitué de préférence d’une suite de lettres et
de chiffres. Par convention, les noms des variables utilisateur sont généralement écrites
en minuscules pour les distinguer des variables d’environnement comme PATH, HOME,
SHELL.
Une variable contient une valeur. Elle reçoit sa valeur :
– par une affectation nom=valeur, sans espaces autour du =, et avec une valeur entourée
d’apostrophes simples ou doubles si la valeur peut contenir des espaces,
– depuis l’entrée standard par la commande read nom. L’option -p chaine de la
commande read permet d’afficher une chaîne de caractères d’invite pour guider
l’utilisateur dans la saisie de la valeur.

L’accès à la valeur se fait par $nom. Si la valeur est susceptible d’être une chaîne vide ou de
contenir des espaces, il faut écrire "$nom". Pour séparer le nom de la variable d’une suite de
caractères accolés, on doit écrire ${nom}suite car, sinon, le shell chercherait une variable
nommée nomsuite.
Exemples
$ a=1
$ reponse="oui ou non"
$ read -p "Tapez votre réponse : " x
Tapez votre réponse : je ne sais pas
$ echo $a "$reponse" "$x" ${a}m
1 oui ou non je ne sais pas 1m
12 • La programmation shell 145

b) Les paramètres de position

Un paramètre de position est identifié par un numéro 1, 2, 3, etc., et contient une valeur. Il
reçoit sa valeur par un des deux moyens suivants.
– Par la commande set.
Exemple
set un deux trois implique que $1 vaut un, $2 vaut deux et $3 vaut trois.
– En tant qu’argument d’un script, la valeur affectée étant passée lors de son appel.
Exemple
L’appel prog v1, v2 implique que $1 vaut v1 et $2 vaut v2 à l’intérieur du script
prog.

c) Les paramètres spéciaux

Les paramètres spéciaux sont identifiés par un caractère réservé.


Par exemple :
– $# donne le nombre d’arguments du script,
– $@ donne la liste des arguments du script séparés par un espace,
– $0 donne le nom du script,
– $n donne le ne paramètre du script (cf. ci-dessus les paramètres de position),
– $? donne le code retourné par la dernière commande. Par convention, un code de retour
égal à 0 signifie que la commande s’est exécutée correctement et un code différent de 0
signifie soit une erreur de syntaxe soit une erreur d’exécution.

Exemple
L’appel prog v1, v2 implique que $# vaut 2, $@ vaut v1 v2, $0 vaut prog, $1 vaut
v1 et $2 vaut v2.

12.2.4 Les tableaux


© Dunod – Toute reproduction non autorisée est un délit.

Un tableau contient une suite de valeurs. Chaque élément du tableau est repéré par un indice
entre crochets valant 0, 1, 2, etc. Le caractère * à la place de l’indice représente l’ensemble
des indices.
Exemple

$ nom[0]=’toto’
$ nom[1]=’tata’
$ echo ${nom[0]}
toto
$ echo ${nom[*]}
toto tata
146 Partie 2. La couche système/réseau

12.2.5 Les calculs arithmétiques


Un calcul peut s’écrire, entre autres manières, avec la notation doublement parenthésée
(( expression_arithmetique )). L’expression arithmétique doit être suivie et
précédée d’un espace. Le résultat n’est pas affiché sur la sortie standard.
Les opérateurs disponibles sont généralement ceux du langage C : +, -, *, /, ++ et -- pour
l’incrémentation et la décrémentation de 1, % pour le reste de la division entière, ** pour la
puissance.
Dans les calculs arithmétiques, les variables ne sont pas nécessairement précédées du $, sauf
les paramètres spéciaux.
Exemples
$ (( a=1 ))
$ (( res=(a+5)/2 )) ; echo $res
3
$ echo $(( (a+5)/2 ))
3

12.2.6 Les chaînes de caractères


Les apostrophes simples et les apostrophes doubles peuvent délimiter une chaîne de
caractères. Avec les apostrophes simples, tous les métacaractères du shell perdent leur
signification, c’est-à-dire sont interprétés comme du texte. Avec les apostrophes doubles,
les métacaractères $ (valeur d’un paramètre) et ‘ (interprétation de la chaîne de caractères
incluse entre deux apostrophes inverses comme une commande) conservent leur signification.
Le caractère \ empêche l’interprétation particulière du métacaractère qui suit.
Exemples
$ nom=’Dupont’
$ echo ’Mr Dupont’
Mr Dupont
$ echo "Mr $nom"
Mr Dupont
$ echo "Mr \"$nom\""
Mr "Dupont"
$ echo ’Mr $nom’
Mr $nom
$ echo "$(pwd)" # affiche le chemin absolu du repertoire courant que donne
# la commande pwd.

12.2.7 Les tests


Un test peut s’écrire, entre autres manières, avec la notation entre doubles crochets
[[ expression_test ]]. L’expression de test doit être suivie et précédée d’un
espace. L’expression de test est évaluée et prend la valeur 0 si elle est vraie et une valeur non
nulle dans le cas contraire.
L’expression de test peut prendre trois formes principales.
12 • La programmation shell 147

– Test sur les fichiers :


-f vrai si le fichier existe, de type ordinaire,
-d vrai si le fichier existe, de type répertoire,
-r vrai si le fichier existe, accessible en lecture,
-w vrai si le fichier existe, accessible en écriture,
-s vrai si le fichier existe, de taille non nulle,
etc.
Exemple

$ [[ -d ~/cours ]]
$ echo $? # affiche 0 ou 1 selon que le repertoire existe ou non

– Test sur les chaînes de caractères :


chaine1 == chaine2 pour tester l’égalité,
chaine1 != chaine2 pour tester la non égalité,
chaine1 < chaine2 pour tester la précédence dans l’ordre lexicographique,
-z chaine pour tester si la chaîne est vide, c’est-à-dire de longueur nulle,
etc.
Exemple

$ nom="arthur toto"
$ [[ "$nom" == "arthur toto" ]]
$ echo $?
0 # car le test est vrai

– Test numérique :
On peut utiliser les doubles crochets avec nombre1 op_comparaison nombre2,
où op_comparaison vaut -eq pour égal, -ne pour différent, -gt pour strictement
supérieur, -lt pour strictement inférieur, -ge pour supérieur ou égal, -le pour inférieur
ou égal, etc.
Exemple

$ nb=5
$ [[ $nb -ge 8 ]]
© Dunod – Toute reproduction non autorisée est un délit.

$ echo $?
1 # car le test est faux

Il est conseillé d’utiliser plutôt les expressions arithmétiques doublement parenthésées, qui
permettent d’écrire les conditions dans le style du langage C avec les opérateurs ==, !=,
>, <, >=, <=, && pour le ET logique, || pour le OU logique, ! pour le NON logique, ainsi
que les sous-expressions parenthésées.

$ nb=5
$ (( nb++ ))
$ (( (nb > 3) && (nb < 8) ))
$ echo $?
0 # car le test est vrai
148 Partie 2. La couche système/réseau

12.2.8 Les structures de contrôle


a) Les conditionnelles

if condition ; then
commande(s)
else
commande(s)
fi

Remarques
– La condition est un test ou une commande dont le code de retour 0 est interprété comme
vrai et les autres codes de retour comme faux.
– Le ; entre la condition et le then évite un passage à la ligne inutile.
– La partie else est facultative.

if condition1 ; then
commande(s)
elif condition2 ; then
commande(s)
elif condition3 ; then
commande(s)
...
else
commande(s)
fi

Exemple
#!/bin/bash
read -p "Tapez un nom de fichier : " fich
if rm "$fich" 2> /dev/null ; then
echo "$fich a ete supprime"
else
echo "suppression de $fich impossible"
exit 1
fi

Remarque
La redirection de la sortie d’erreurs vers /dev/null fait disparaître en « l’avalant » un
éventuel message produit par la commande rm.

b) Les itérations de type tant que

while condition ; do
commande(s)
done

Exemple : ouverture de 5 terminaux X


12 • La programmation shell 149

#!/bin/bash
x=1
while (( x <= 5 )) ; do
xterm &
(( x++ ))
done

c) Les itérations de type pour


® Première syntaxe
for variable in liste de valeurs ; do
commande(s)
done

Exemple : affichage des arguments d’un script


#!/bin/bash
for i in $@ ; do
echo $i
done

® Seconde syntaxe
for (( expr1 ; expr2 ; expr3 )) ; do
commande(s)
done

L’expression expr1 est tout d’abord évaluée. Puis, tant que expr2 est différente de 0, la ou
les commandes sont exécutées et expr3 est évaluée.
Exemple : affichage des 10 premiers entiers
#!/bin/bash
for (( i=0 ; i<10 ; i++ )) ; do
echo $i
done

12.2.9 Les fonctions


© Dunod – Toute reproduction non autorisée est un délit.

Une fonction est une portion de code shell dotée d’un nom qui permet de modulariser les
scripts. Elle peut retourner une valeur avec la commande return valeur. La syntaxe la
plus simple est :
nom_fonction() {
commande(s)
}

Exemple
#!/bin/bash
affichage() {
echo "Hello $1"
return 5
}
affichage toto # affiche Hello toto
150 Partie 2. La couche système/réseau

affichage tata # affiche Hello tata


echo "La fonction précédente a retourné $?" # affiche 5

12.3 DES EXEMPLES DE SCRIPTS BASH


12.3.1 Quelques conseils de style
On trouve des guides de style assez complets, comme par exemple [GOO]. En sont extraites
les quelques règles de style suivantes :
– Tout script doit comporter en commentaires un en-tête explicatif avec au minimum le but
du script et la syntaxe de son appel (mot clé usage:).
– D’autres commentaires doivent apparaître dès que cela peut aider à la compréhension.
– Les différentes parties d’un script doivent être séparées par une ligne vide.
– Les commandes doivent êtres indentées, c’est-à-dire décalées à chaque imbrication
d’un bloc de commandes dans un autre, avec de préférence deux espaces par niveau
d’imbrication.
– Il est indispensable de tester la présence et la validité des arguments et des entités utiles en
début de script et de ne commencer les traitements qu’après ces vérifications.

12.3.2 Exemple 1 : test de l’existence d’un fichier


a) Le script

#!/bin/bash
# Existence du fichier dont le chemin est donne en argument
# Usage : existe chemin_fichier
if (( $# != 1 )) ; then
echo "Usage : $0 chemin_fichier"
exit 1
fi

if [[ ! -f $1 ]] ; then
echo "Désolé, le fichier $1 n’existe pas"
exit 2
fi

echo "Le fichier $1 existe"

b) Un exemple d’exécution

$ bash existe /bin/mkdir


Le fichier /bin/mkdir existe
$ echo $?
0
12 • La programmation shell 151

12.3.3 Exemple 2 : recherche d’un programme dans le PATH


a) Le script
#!/bin/bash
# Recherche d’un programme dans le PATH
# Usage: rechprog programme
if (( $# != 1 )) ; then
echo "Usage : $0 programme"
exit 1
fi

# Boucle sur chaque repertoire du path


# la commande tr remplace les : du PATH en passage a la ligne
for rep in $(echo "$PATH" | tr ’:’ ’\n’) ; do
# Test si rep contient le programme, qu’il est non vide et executable
if [[ -f "$rep/$1" && -s "$rep/$1" && -x "$rep/$1" ]] ; then
# Il est trouve
ls -l "$rep/$1"
exit 0
fi
done

# Il n’est pas trouve


echo "Le programme $1 n’est pas dans le PATH"
exit 2

b) Un exemple d’exécution
$ bash rechprog mkdir
-rwxr-xr-x 1 root root 42624 nov.
$ echo $?
0
© Dunod – Toute reproduction non autorisée est un délit.
152 Exercices

EXERCICES

Exercice 12.1. Affichage et interprétation des variables.


On exécute la commande x="ls -l". Quel est le résultat des commandes suivantes ?
a) echo x
b) echo $x
c) echo ’$x’
d) echo "$x"
e) echo ‘$x‘
f) echo "$($x)"

Exercice 12.2. Script et processus.


Un utilisateur se trouve dans son home, qui est le répertoire courant. Il saisit dans un fichier
long le script suivant, qui ne sert qu’à laisser s’écouler un certain temps.
#! /bin/bash
i=1
while [ $i -lt 1000000 ] ; do
(( i=$i+1 ))
done

a) Comment rendre exécutable ce script et l’exécuter en premier plan ?


b) Comment l’exécuter en arrière-plan ?
c) La commande ps affiche ce qui suit. Comment tuer impérativement le script en
arrière-plan ?
PID TTY TIME CMD
9102 pts/0 00:00:00 bash
17828 pts/0 00:00:09 long
17831 pts/0 00:00:00 ps

d) Comment rendre long exécutable en tapant juste son nom ?

Exercice 12.3. Scripts de gestion d’une poubelle.


a) Écrire un script effacer fichier qui, au lieu de détruire fichier, le déplace dans
un répertoire poubelle du home de l’utilisateur et affiche "Le fichier est dans la
poubelle". Si le répertoire poubelle n’existe pas, il est créé.
b) Écrire une deuxième version du script effacer qui accepte une liste de fichiers en
arguments.
c) Écrire un script voirpoub qui teste l’existence de la poubelle et affiche :
Contenu de la poubelle :
le listing détaillé du répertoire poubelle
12 • La programmation shell 153

d) Écrire un script viderpoub qui vide le répertoire poubelle de tous ses fichiers.
e) Écrire un script retrouver fichier repertoire qui déplace fichier de la
poubelle vers repertoire. Le script teste si les arguments existent.

Exercice 12.4. Script de rangement des fichiers du home.


Écrire un script organise -c -b -r -R. Les options sont facultatives et apparaissent
dans n’importe quel ordre. Les options -r et -R ne peuvent pas apparaître en même temps.
Si l’option -c est présente, le script range les fichiers d’extension .c du home de l’utilisateur
dans un sous-répertoire progsC, en le créant si nécessaire.
Si l’option -b est présente, le script range les fichiers qui commencent par #/bin/bash du
home dans un sous-répertoire bin, en le créant si nécessaire.
Si l’option -r est présente, le script range les fichiers d’extension .o du home dans un
sous-répertoire recup, en le créant si nécessaire. Si l’option -R est présente, ces mêmes
fichiers sont détruits. Si les deux options -r et -R apparaissent en même temps, un message
d’erreur est affiché et aucune action n’est entreprise.

Exercice 12.5. Scripts de correction automatique.


Pour corriger rapidement des TP, un enseignant demande à ses étudiants de les ranger sous le
nom tp dans un répertoire PUBLIC accessible par lui et écrit les scripts suivants :
a) Un script recupuntp nom qui :
(1) teste s’il existe dans /users/etude/nom un répertoire PUBLIC (où nom est
l’argument de la commande),
(2) teste si ce répertoire est lisible,
(3) teste si dans ce répertoire /users/etude/nom/PUBLIC il existe un fichier nommé
tp,
(4) teste si ce fichier tp est lisible,
(5) teste s’il existe dans le répertoire courant un répertoire nommé reptp et sinon le crée,
© Dunod – Toute reproduction non autorisée est un délit.

(6) copie le fichier tp dans le répertoire reptp en lui donnant comme nom tp.nom où
nom est le nom passé en argument,
(7) donne les droits d’écriture sur la copie.
Exemple
recupuntp toto recopie /users/etude/toto/PUBLIC/tp dans reptp sous le
nom tp.toto.
b) Un script recuplestp liste avec une liste de noms d’étudiants en argument,
comportant au moins un nom, qui appelle dans le même répertoire le script recupuntp
pour chaque nom de la liste.
Exemple
recuplestp toto titi tata.
154 Exercices

c) Un script notestp liste_de_10_mots. Ce script affiche à l’écran le titre


"NOMS NOTES TP" puis la liste de tous les étudiants ayant un répertoire dans
/users/etude, avec la note 0 s’il n’y a pas de fichier à leur nom dans reptp, et
une note si le fichier existe.
Cette note est calculée en cherchant dans le fichier tp.nom les 10 mots passés en argument.
Chaque mot trouvé donne 2 points.
Chapitre 13

Installation et configuration d’un système

Schématiquement, l’installation d’un système Linux sur un PC à l’aide d’un programme


d’installation comporte les étapes suivantes :
(1) amorçage du système,
(2) définition des partitions,
(3) choix des systèmes de fichiers,
(4) installation des paquets,
(5) choix et configuration du gestionnaire d’amorçage,
(6) configuration initiale du système.
© Dunod – Toute reproduction non autorisée est un délit.

Les paragraphes qui suivent analysent ces différentes étapes.

13.1 L’AMORÇAGE DU SYSTÈME


Pour commencer une installation, il est nécessaire de démarrer l’ordinateur sous le système
cible. La méthode la plus simple consiste à mettre le DVD de la distribution choisie dans
le lecteur correspondant et de redémarrer l’ordinateur. Pour que cette solution fonctionne, il
faut que le BIOS, c’est-à-dire le programme d’amorçage de la machine, soit configuré pour
charger le système depuis ce lecteur. Tous les BIOS des PC récents permettent de le faire. Il
suffit de rentrer dans le programme SETUP, généralement en appuyant sur la touche F2 ou la
touche Suppr (Del) du clavier au moment où l’ordinateur s’initialise. Si le BIOS possède
une fonction de protection contre les virus des secteurs de boot, l’amorçage peut être pris pour
156 Partie 2. La couche système/réseau

un virus et échouer. Il faut alors désactiver cette fonctionnalité dans le programme SETUP du
BIOS pendant l’installation du système et la réactiver après.
Le noyau du système est généralement conçu pour démarrer sur le plus grand nombre
de machines possible. Il contient des pilotes (drivers) génériques pour les périphériques
courants. On les appelle aussi « modules ». Lorsqu’il se lance, le système tente de détecter
les matériels présents. S’il n’y parvient pas complètement, il est possible de sélectionner ou
de fournir des pilotes particuliers. Les informations sur la manière de procéder varient d’un
programme d’installation à l’autre.

13.2 LA DÉFINITION DES PARTITIONS


Une partition est une portion de disque (ou de SSD) constituant une zone indépendante
réservée à un usage particulier. Une partition possède un système de fichiers (cf. paragraphe
13.3), qui permet de stocker les données. Le partitionnement est l’opération de création des
différentes partitions d’un disque.
Les disques IDE sont nommés hda, hdb, hdc, etc. Les disques SCSI ou SATA sont nommés
sda, sdb, sdc, etc. Les partitions sur les disques sont repérées par des chiffres, comme
hda1, sda1, sda2, etc. Ces noms sont précédés de /dev/ puisque tous les systèmes de
fichiers s’inscrivent dans la hiérarchie des noms.
Exemple
/dev/sda1, /dev/hdb2
Un même système peut nécessiter plusieurs partitions. Les systèmes de type Unix
fonctionnent de préférence avec une partition d’échange (swap), pour stocker les données
qui ne peuvent demeurer en mémoire centrale dans le cadre de la gestion de la mémoire
virtuelle. Sa taille est en général d’une fois à deux fois la taille de la mémoire vive. En
outre, il est conseillé de créer au minimum deux partitions pour séparer les fichiers du
système (partition racine de quelques gigaoctets) des données des utilisateurs (homes), ce qui
facilite les sauvegardes et assure une plus grande sécurité en isolant données et système. Par
ailleurs, pour installer plusieurs systèmes d’exploitation, il faut en général allouer au moins
une partition à chacun, car les systèmes de fichiers des partitions ne sont pas forcément
compatibles d’un système à l’autre.
Le système d’exploitation gère une table des partitions par disque. Sur les PC utilisant le
partitionnement Intel classique, cette table se trouve dans le MBR (Master Boot Record),
qui est le premier secteur de 512 octets adressable du disque. Le MBR contient une table de
quatre partitions primaires au maximum. Le système gère aussi une partition étendue qui peut
contenir un nombre quelconque de partitions logiques. Le MBR contient également un petit
programme d’amorçage qui permet de charger le premier secteur (secteur de boot) d’une des
partitions primaires, la partition active. Ce secteur de boot contient le programme capable de
charger le système d’exploitation cible ou un programme plus sophistiqué, le gestionnaire
d’amorçage (cf. paragraphe 13.5), permettant de lancer d’autres systèmes d’exploitation qui
peuvent être installés sur d’autres partitions ou d’autres disques. La figure 13.1 résume cette
organisation des partitions et du processus d’amorçage.
13 • Installation et configuration d’un système 157

chageur du système
BIOS appel ou gestionnaire
d'amorçage
MBR

Table des Boot Secteur Secteur


partitions loader Partition 1 de boot Partition 2
de boot

Partition active
appel
appel

Secteur Secteur
Partition 3 Partition 4
de boot de boot

Partition logique Partition logique

Disque Partition étendue

F IGURE 13.1 Les partitions et le processus d’amorçage

Sur les architectures récentes, le MBR tend à être remplacé par le GPT (GUID Partition
Table), qui supprime les limitations de taille des disques imposées par la table des partitions
du MBR.
On rappelle que les systèmes de fichiers des différentes partitions sont montés au démarrage
du système dans les bons répertoires pour constituer l’arborescence unique ayant pour racine
le répertoire / (cf. paragraphe 9.1.2).

13.3 LE CHOIX DU OU DES SYSTÈMES DE FICHIERS


© Dunod – Toute reproduction non autorisée est un délit.

Un système de fichiers (file system) ou système de gestion de fichiers (SGF) gère le stockage
des données et leur organisation en fichiers et répertoires dans les partitions. Les systèmes
de fichiers peuvent également inclure la compression ou le chiffrement automatique des
données, une gestion plus ou moins fine des droits d’accès aux fichiers et une journalisation
(une trace) des écritures pour assurer la robustesse en cas de défaillance du système.
Dans le cas des systèmes de fichiers de type Unix, les fichiers et les répertoires sont identifiés
par un numéro unique à l’unité, ou numéro d’inode. Ce numéro permet d’accéder à une
structure de données (l’inode) regroupant toutes les données sur le fichier à l’exception de
son nom, notamment sa taille, son propriétaire (UID), son groupe (GUID), ses protections,
ses dates de création et de dernière modification et des pointeurs, directs ou indirects, vers son
contenu. Les noms sont stockés dans les répertoires et associés à des numéros d’inode. Grâce
à cette organisation que schématise la figure 13.2, un fichier peut être connu du système sous
plusieurs noms.
158 Partie 2. La couche système/réseau

Répertoire

nom chier 1 inode

Inode
date
Répertoire taille UID GID
modif.
adresse adresse adressage
bloc1 bloc2 indirect
nom chier 2 inode

adresses
Contenu Contenu
blocs
chier chier

Contenu Contenu
chier chier

F IGURE 13.2 Structuration des fichiers et répertoires

Il existe de très nombreux systèmes de fichiers, journalisés ou non. Parmi les plus connus
pour les systèmes de type Unix, on peut citer : les anciens ext et ext2, non journalisés ;
ext3, qui est une extension journalisée de ext2 ; ext4, qui est une refonte et amélioration
de ext3 ; reiser4, qui a succédé à reiserFS, tous deux journalisés ; ou encore btrFS,
qui offre la possibilité d’enregistrer l’état du système de fichiers à un instant donné (instantané
ou snapshot).
À noter qu’aujourd’hui il est possible d’accéder depuis un système de type Unix à des
partitions Windows NTFS, en lecture et en écriture.
Par ailleurs, il existe des systèmes de fichiers en réseau qui permettent à un ordinateur
d’accéder à des fichiers via un réseau, comme par exemple nfs. Les partages réseaux sont
montés dans l’arborescence du client (cf. chapitre 17).
Enfin, les systèmes de fichiers distribués permettent l’agrégation des espaces de stockage des
machines d’un réseau (d’un cluster de machines) de la façon la plus transparente possible
pour les utilisateurs. C’est le cas par exemple de Lustre et GlusterFS.

13.4 L’INSTALLATION DES PAQUETS


Le programme d’installation installe le noyau du système avec ses modules et un large
ensemble d’autres composants logiciels indispensables, incluant un ou des shells, des outils
et applications système en ligne de commande, le compilateur C gcc, l’environnement
13 • Installation et configuration d’un système 159

graphique X Window et des applications graphiques de base, un ou des environnements de


bureau, les applications réseau indispensables, la documentation, etc.
Le système de base et les composants logiciels se présentent tous comme des paquets
(package). Un paquet regroupe un ensemble de fichiers constitutifs d’une même application.
Certaines applications sont constituées de plusieurs paquets. Beaucoup de paquets dépendent
d’autres paquets dont ils utilisent des ressources. L’installation des paquets se fait en général
depuis le DVD d’installation mais peut aussi se faire depuis le réseau après que celui-ci a été
configuré (cf. paragraphe 13.6). Il est bien entendu possible de compléter ultérieurement les
paquets installés initialement, en faisant appel à un gestionnaire de paquets.
Il existe de nombreux gestionnaires de paquets. Par exemple, APT (Advanced Package
Tool), qui fait partie de la distribution Debian. apt-get est l’outil en ligne de commande
de APT. La liste des dépôts dans lesquels les paquets sont cherchés par APT est rangée
dans le fichier /etc/apt/sources.list. Un programme s’installe par la commande
apt-get install nom. On peut aussi mettre à jour le système par la commande
apt-get dist-upgrade, mettre à jour un programme particulier par la commande
apt-get upgrade nom et désinstaller un programme particulier par la commande
apt-get remove nom.
Exemple : installation du programme Wireshark, un analyseur de trafic réseau (sniffer)
$ apt-get install wireshark
Lecture des listes de paquets... Fait
Construction de l’arbre des dépendances
Lecture des informations d’état... Fait.
Les paquets supplémentaires suivants seront installés :
libc-ares2 libsmi2ldbl libwireshark-data libwireshark1 libwiretap1
libwsutil1 wireshark-common
Paquets suggérés :
snmp-mibs-downloader wireshark-doc
Les NOUVEAUX paquets suivants seront installés :
libc-ares2 libsmi2ldbl libwireshark-data libwireshark1 libwiretap1
libwsutil1 wireshark wireshark-common
0 mis à jour, 8 nouvellement installés, 0 à enlever et 244 non mis à jour.
Il est nécessaire de prendre 12,8 Mo dans les archives.
© Dunod – Toute reproduction non autorisée est un délit.

Après cette opération, 49,0 Mo d’espace disque supplémentaires seront


utilisés.
Souhaitez-vous continuer [O/n] ?

13.5 LE CHOIX DU GESTIONNAIRE D’AMORÇAGE


LILO (Linux loader) et GRUB (GRand Unified Bootloader) sont les deux gestionnaires
d’amorçage les plus connus.
Ils permettent tous deux de choisir le lancement d’un système d’exploitation parmi plusieurs
(multi-amorçage). Dans les deux logiciels, un fichier de configuration décrit les différents
systèmes d’exploitation disponibles et la partition où ils se situent.
160 Partie 2. La couche système/réseau

Lors de l’installation, on peut être amené à choisir le gestionnaire que l’on souhaite utiliser
et l’emplacement de son installation : soit dans le MBR, soit dans le bloc d’amorçage d’une
partition (cf. paragraphe 13.5). Le reste s’effectue de façon automatique.

13.6 LA CONFIGURATION INITIALE DU SYSTÈME


Des paramètres de configuration plus ou moins nombreux peuvent être fixés lors de
l’installation du système. On peut citer parmi eux :
– la langue utilisée,
– le type de clavier utilisé (qwerty, azerty, etc.),
– les paramètres réseau comme le nom de la machine, le nom du domaine, l’adresse IP de la
machine si elle est statique et non fournie dynamiquement par un serveur DHCP, l’adresse
IP de la passerelle ou du routeur connecté à Internet, les adresse IP des serveurs de noms
(DNS), etc. Beaucoup de ces notions seront développées dans les différents chapitres de la
troisième partie de l’ouvrage.
13 • Installation et configuration d’un système 161

EXERCICES

Exercice 13.1. Disques et partitions.


Commenter l’affichage suivant, obtenu à l’aide de la commande cfdisk.

Disk Drive: /dev/sda


Size: 81964302336 bytes, 81.9 GB
Heads: 255 Sectors per Track: 63 Cylinders: 9964

Name Flags Part Type FS Type [Label] Size (MB)

sda2 Boot Primary Linux ext3 106.93


Primary Linux swap / Solaris 2006.97
sda3 Primary Linux ext3 79842.80

Exercice 13.2. Montage des partitions.


Commenter les données affichées par la commande df -h.
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda1 1.4G 242M 1.1G 18% /
/dev/hda3 23M 11M 10M 51% /boot
/dev/hda4 1.5G 1.2G 222M 85% /home
/dev/hda7 564M 17M 518M 4% /tmp
/dev/hdc1 984M 92M 842M 10% /gc1
/dev/hdc2 16G 13G 1.9G 87% /gc2

Exercice 13.3. Le format ext2.


Chaque inode contient 64 champs, dont 13 servent à définir le contenu du fichier. Les 10
premiers de ces 13 champs contiennent les adresses des 10 premiers blocs de données du
© Dunod – Toute reproduction non autorisée est un délit.

fichier. Pour un fichier de moins de 10 blocs, les champs 11, 12 et 13 ne sont pas utilisés.
Dans le cas contraire, en plus des 10 premiers blocs, les blocs 11, 12 et 13 sont utilisés.
Le champ 11 utilise une indirection simple : il contient l’adresse d’un bloc d’adresses qui
pointent vers des blocs de données.
Le champ 12 utilise une double indirection : il contient l’adresse d’un bloc d’adresses qui
pointent vers des blocs d’adresses qui pointent vers des blocs de données.
Le champ 13 utilise une triple indirection sur le même modèle.
On suppose que les blocs ont comme taille 1 024 octets (1 ko) et que chaque adresse est
stockée sur 32 bits (4 octets).
a) Combien d’adresses peut contenir chaque bloc d’adresses ?
b) Quelle est la taille maximale d’un fichier ?
162 Exercices

Exercice 13.4. LILO.


Commenter le fichier de configuration /etc/lilo.conf suivant qui décrit comment
démarrer une machine.
L’option boot indique où se trouve LILO.
L’option other indique la localisation d’un système autre que Linux.
boot = /dev/hda
prompt
default = linux
timeout = 120
image = /boot/vmlinz
label = linux
root = /dev/hda5
other = /dev/hda1
label = windows
PARTIE 3

Les couches hautes

Cette troisième partie se focalise sur deux aspects essentiels pour les systèmes informatiques
d’aujourd’hui :
(1) La couche applicative centrée sur l’exploitation des réseaux, qui offre aux utilisateurs
un ensemble de services qu’il est indispensable de comprendre et de maîtriser dans
leurs aspects essentiels. Les applications réseau qui la constituent sont présentées dans
un chapitre introductif avant d’être détaillées, famille par famille, dans les chapitres qui
suivent.
Les concepts généraux des réseaux et la description des modèles OSI et TCP/IP qui les
sous-tendent ont fait l’objet des paragraphes 5.2.1 et 5.2.2
(2) La couche distribution et les intergiciels, qui permettent aux développeurs de construire
des applications distribuées qui répondent aux besoins des organisations actuelles,
elles-mêmes géographiquement distribuées.
Ce vaste domaine est abordé de manière synthétique dans le dernier chapitre de cette
troisième partie.
Chapitre 14

Les applications réseau

14.1 PRÉSENTATION DES APPLICATIONS RÉSEAU


Les applications réseau sont essentiellement des « applications Internet », c’est-à-dire des
applications qui utilisent le protocole IP et un des deux protocoles de transport, TCP ou
UDP, au-dessus de IP (cf. paragraphe 5.2.2). Le choix entre ces deux protocoles de transport
dépend des besoins de l’application en termes de fiabilité du transfert, comme l’absence de
pertes de paquets, et d’efficacité, c’est-à-dire de débit, de délai et de variation du délai (ou
gigue). TCP est fiable, au contraire d’UDP, mais généralement moins efficace qu’UDP.
En conséquence, HTTP (le web) ou SMTP (le transport de mails) utilisent TCP car la perte
de paquets n’est pas admissible pour ces applications. Au contraire, DNS (l’annuaire des
noms de domaine), dont les messages tiennent le plus souvent dans un seul paquet, ainsi que
© Dunod – Toute reproduction non autorisée est un délit.

le streaming multimédia ou la voix sur IP, où l’efficacité est plus importante que la perte
éventuelle d’un paquet, utilisent plutôt UDP.

14.2 LES ARCHITECTURES DES APPLICATIONS RÉSEAU


Les applications réseau fonctionnent le plus souvent selon l’architecture client/serveur, qui
peut prendre deux formes. Dans le cas le plus courant, un processus serveur, c’est-à-dire
un démon qui tourne en arrière-plan sur la machine serveur, traite les requêtes des clients.
Clients et serveur dialoguent selon le protocole applicatif en s’échangeant des messages qui
contiennent des requêtes et des réponses. Le client utilise un port client pour envoyer ses
requêtes vers le serveur destinataire caractérisé par son adresse IP. Le processus serveur
écoute sur un port serveur donné, caractéristique du service qu’il rend. Par exemple, un
166 Partie 3. Les couches hautes

serveur web écoute les requêtes en provenance des applications web clientes sur le port
TCP 80 et dialogue avec elles selon le protocole applicatif HTTP.
Dans d’autres cas, plus rares, un client est en relation avec plusieurs serveurs, comme dans
le cas de la supervision des équipements réseau avec SNMP ou des robots et moteurs de
recherche, comme Google. Par exemple, les agents SNMP installés sur chaque équipement
constituent des serveurs de messages SNMP transportés par UDP en direction de la console
de supervision réseau cliente, comme le montre la figure 14.1.

serveur
client SNMP

serveur client serveur


client HTTP SNMP

serveur
client
SNMP

F IGURE 14.1 Architectures client/serveur HTTP et SNMP

À noter qu’une autre catégorie d’applications se fonde sur des réseaux pair à pair (P2P) sur
Internet, où chaque nœud du réseau est à la fois serveur et client (cf. figure 14.2). C’est par
exemple le cas des applications de partage de fichiers qui exploitent les réseaux pair à pair
comme Gnutella, eDonkey ou BitTorrent. Elles ne sont pas détaillées dans ce qui suit.

Pair

Pair
Pair
Pair
Pair
Pair
Pair
Pair

F IGURE 14.2 Architectures P2P

14.3 LES ARCHITECTURES DES SERVEURS


Selon le nombre et la fréquence des requêtes à traiter, différentes architectures peuvent
être utilisées au sein des serveurs. Elles se caractérisent essentiellement par le nombre de
processus système mis en œuvre :
14 • Les applications réseau 167

– À un extrême, on peut avoir un seul processus système qui traite séquentiellement toutes
les requêtes. Ce type d’architecture ne peut convenir que pour des traitements très courts
et des requêtes peu nombreuses.
– À l’autre extrême, on peut avoir un processus système par requête. Ce type de solution peut
devenir problématique en termes d’efficacité et de consommation des ressources quand le
nombre des requêtes (et donc de processus système) augmente fortement.
– Entre les deux, on peut avoir un processus système par cœur du processeur, contenant des
processus légers (threads) multiples pour traiter les requêtes.

Les serveurs HTTP illustrent bien ces diverses possibilités. Par exemple, le serveur Apache
offre aujourd’hui plusieurs modes de fonctionnement, apparus au fil du temps et de la volonté
d’améliorer les performances :
– Le mode d’origine, prefork, comporte un processus serveur père qui utilise des processus
fils, démarrés de manière anticipée et comportant un seul thread, pour traiter les requêtes.
– Le mode worker implante un serveur multiprocessus et multi-threads, avec souvent un
processus système par cœur. Chaque processus système crée un nombre fixe de threads
pour traiter les requêtes.
– Le mode event se base sur la scrutation d’événements, à la manière des serveurs HTTP
« légers » tels que Nginx, pour améliorer le mode worker. En particulier, il prend en
compte les connexions multirequêtes (keep-alive).

14.4 LES PRINCIPALES APPLICATIONS RÉSEAU


Chaque application réseau sur Internet, se caractérise par son protocole applicatif, le
protocole de transport sous-jacent (TCP/UDP) et un numéro de port. Le tableau suivant
donne ces caractéristiques pour quelques applications très utilisées. Les chapitres qui suivent
décrivent les principales familles d’applications : transfert de fichiers, connexion à distance,
accès aux fichiers distants, gestion d’annuaires, configuration automatique, messagerie, web.

Application Protocole applicatif Protocole de transport Port


© Dunod – Toute reproduction non autorisée est un délit.

Applications web HTTP TCP 80


Transfert de fichiers FTP TCP 21
Connexion à distance Telnet TCP 23
Transfert de courrier SMTP TCP 25
Annuaire des noms de domaine DNS UDP (parfois TCP) 53
Configuration automatique DHCP UDP 67
Communication sécurisée SSH TCP 22
Supervision de réseau SNMP UDP 161
IMAP TCP 143
Accès à la messagerie
POP 3 TCP 110
Synchronisation des horloges NTP UDP 123
168 Exercices

EXERCICES

Exercice 14.1. La couche application.


Quelles couches du modèle OSI constituent la couche application du modèle TCP/IP ?

Exercice 14.2. Des protocoles qui utilisent UDP.


Citer au moins deux protocoles de la couche application qui utilisent le protocole UDP.

Exercice 14.3. Un problème d’accès.


L’accès à un site par son URL ne fonctionne pas. Par contre, la saisie de l’adresse IP du
serveur web dans le navigateur permet d’accéder normalement à la page web.
Quel protocole est à l’origine du problème ?

Exercice 14.4. Une combinaison de protocoles.


Un courrier électronique est envoyé par Toto avec son webmail à destination de Titi, qui
possède un client de messagerie sur son ordinateur personnel.
Citer au moins trois protocoles d’application mis en œuvre dans cet échange.

Exercice 14.5. Processus lourds et processus légers.


Rappeler les différences entre un processus (lourd) et un thread (processus léger).
Chapitre 15

Les applications de transfert de fichiers

15.1 LE TRANSFERT DE FICHIERS


Le but des applications et protocoles de transfert de fichiers est de permettre la copie complète
de fichiers d’un système de fichiers vers un autre, le plus souvent sur des machines différentes
en réseau. Elles ne doivent pas être confondues avec les applications et protocoles d’accès aux
fichiers distants, comme par exemple NFS, qui seront étudiés au chapitre 17.
Les différences entre systèmes de fichiers peuvent concerner les noms des fichiers, la
représentation des métadonnées, comme les droits d’accès, et la représentation des contenus,
© Dunod – Toute reproduction non autorisée est un délit.

comme la représentation des fins de ligne dans les fichiers de texte.


Il existe des protocoles et commandes de copie de fichiers à distance liés aux seuls systèmes
d’exploitation de type Unix, comme rcp (remote copy) et sa version sécurisée scp (secure
copy). Leur syntaxe est proche de celle de la commande cp. L’inconvénient majeur de rcp
est la nécessité de devoir configurer la machine distante avec un fichier .hosts contenant
tous les noms de machines et d’utilisateurs autorisés à y accéder.
Au contraire, le protocole FTP (File Transfer Protocol) et ses dérivés, soit simplifiés
comme TFTP (Trivial File Transfer Protocol), soit sécurisés comme SFTP (Secure File
Transfer Protocol), permettent de travailler avec des systèmes d’exploitation différents et
ne nécessitent pas de configuration préalable des machines impliquées dans le transfert.
La famille des applications construite autour du protocole FTP est incontournable dans le
domaine du transfert de fichiers.
170 Partie 3. Les couches hautes

15.2 LE PROTOCOLE FTP


Il s’agit d’un protocole client/serveur pour réseaux TCP/IP. Le client, c’est-à-dire l’initiateur
de la session, interagit avec l’utilisateur, son système de fichiers local et les protocoles réseau.
Le serveur, qui héberge les fichiers à transférer, interagit avec les protocoles réseau et son
système de fichiers local, comme le montre la figure 15.1.

Interface Client Serveur FTP


utilisateur FTP

OS

Pilotes de Pilotes de
TCP/IP TCP/IP périphériques
périphériques

Matériel

Clavier, Internet
écran,
souris
Système de Système de
chiers local chiers distant

F IGURE 15.1 Architecture client/serveur de FTP

Le client FTP contacte le serveur FTP sur le port 21/TCP. Deux connexions TCP parallèles
sont établies :
(1) Une connexion permanente pour le contrôle, c’est-à-dire l’échange des requêtes du client
vers le serveur (listage, transfert, suppression, renommage, etc.), qui est initialisée par le
client. Les échanges se font en mode texte.
(2) Une connexion temporaire pour les données, pour chaque transfert de données (contenu
de fichier, liste de fichiers, etc.). FTP offre deux modes de connexion :
– En mode actif, c’est le client qui détermine le port à utiliser pour permettre le transfert
des données. Le serveur initialise la connexion de son port de données (port 20/TCP)
vers le port spécifié par le client. Tous les clients doivent donc configurer leur pare-feu
pour autoriser cette connexion entrante, ce qui est plutôt gênant.
– En mode passif, le serveur détermine lui-même le port à utiliser et le communique
au client, qui initialise la connexion. Seul le serveur doit avoir configuré son pare-feu
pour autoriser la connexion sur une plage de ports (cf. figure 15.2). Le mode passif est
souvent le mode par défaut.
15 • Les applications de transfert de fichiers 171

L’existence de ces deux connexions permet de continuer à envoyer des commandes pendant
un transfert de fichier. Le serveur FTP gère un état de la session avec des données comme le
nom de l’utilisateur et les noms des répertoires courants côté client et côté serveur.

1024- 1024-
65635 21 65635 21
Client Serveur Client Serveur
FTP 1024- FTP FTP 1024- 1024- FTP
65635 20 65635 65635

Ports Ports

Mode actif Mode passif

Initiateur de la connexion

F IGURE 15.2 Modes actif et passif de FTP

15.3 LA PRATIQUE DE FTP


15.3.1 Les clients
Il existe des clients FTP en ligne de commande, assez similaires sur toutes les plateformes,
et des clients graphiques, comme le logiciel libre FileZilla, également disponible sur toutes
les plateformes. Après connexion, un client FTP rend accessible une arborescence de fichiers
similaire à un système de fichiers de type Unix, grâce à laquelle il est possible de rechercher
les fichiers ou répertoires à transférer puis de les transférer. Cette arborescence constitue un
environnement restreint, créé par la commande chroot, dont il est impossible de sortir.

15.3.2 Les modes de transfert


Lors du transfert de fichier sur la connexion de données, deux modes de transfert peuvent être
utilisés :
© Dunod – Toute reproduction non autorisée est un délit.

– Le mode binaire, dans lequel le fichier est transmis tel quel.


– Le mode ASCII, pour les fichiers de texte, dans lequel le fichier est analysé et des
transformations peuvent être apportées pour permettre un transfert correct.
Par exemple, la fin de ligne est représentée par le caractère LF sur un système de type
Unix, et par la paire CR+LF sous Windows. Une machine Windows recevant un fichier de
texte par FTP depuis un système de type Unix récupère donc un fichier avec des CR+LF
en mode ASCII et des LF en mode binaire.

15.3.3 Le lancement d’une session avec la commande ftp


La commande permettant d’initier une session FTP s’écrit ftp nom_serveur, où
nom_serveur représente le nom ou l’adresse IP de la machine distante à laquelle on désire
se connecter. Il faut bien évidemment que la machine cible dispose d’un démon FTP.
172 Partie 3. Les couches hautes

Un certain nombre de lignes apparaissent à l’écran, la première confirmant la connexion à


un serveur FTP. Le serveur demande de saisir un login, puis un mot de passe. Le serveur
peut être public, ce qui autorise les accès anonymes (login : anonymous, mot de passe :
l’adresse de courrier électronique est souvent demandée). Le serveur indique si la connexion
est établie ou non. Il peut en effet avoir atteint son nombre maximum d’utilisateurs). Dès lors,
le serveur FTP attend les « commandes utilisateur », décrivant les actions que l’utilisateur
souhaite effectuer. L’expression commande utilisateur est utilisée pour les différencier des
commandes (requêtes) du protocole FTP, qui circulent sur la connexion de contrôle et qui ne
sont pas détaillées ici (USER, PASS, CWD, RETR, STORE, etc.).

15.3.4 Les principales commandes utilisateur de ftp


Elles sont listées dans le tableau suivant. Il peut y avoir de petites variations d’une
implantation à une autre de la commande ftp.

Commande Description
help Affiche l’ensemble des commandes supportées par le serveur FTP.
binary Fait basculer du mode ASCII au mode binaire.
ascii Fait basculer du mode binaire au mode ASCII.
type Affiche le mode courant (binaire ou ASCII).
ls Liste les fichiers du répertoire courant distant.
La commande ls -l donne un affichage détaillé.
pwd Affiche le chemin complet du répertoire courant distant.
cd rep Change le répertoire courant distant.
cd .. permet d’accéder au répertoire père.
lcd rep Change le répertoire local courant.
mkdir rep Crée un répertoire dans le répertoire courant distant.
rmdir rep Supprime un répertoire dans le répertoire courant distant.
get fich Transfère le fichier du serveur au répertoire courant local.
mget fich Comme get mais accepte les caractères jokers (comme *, ?, etc.).
put fich Transfère le fichier dans le répertoire courant distant.
mput fich Comme put mais accepte les caractères jokers.
delete fich Supprime un fichier distant.
mdelete fich Comme delete mais accepte les caractères jokers.
passive Bascule du mode passif au mode actif ou l’inverse.
disconnect Met fin à la connexion.
bye, quit Arrête le client.

15.3.5 Un exemple de session ftp


L’invite de la session ftp est ftp>.
15 • Les applications de transfert de fichiers 173

$ ftp ftp.unsite.org
Connected to ftp.unsite.org.
220 Bienvenue sur ftp.unsite.org.
Name (ftp.unsite.org:dupond): dupond
331 Password required for dupont.
Password:*******
230 Access granted.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/" is current directory.
ftp> cd images
250 CWD command successful.
ftp> pwd
257 "/images" is current directory.
ftp> lcd .
Local directory now /home/repftp
ftp> ls
200 PORT command successful.
150 Opening ASCII mode data connection for file list.
.
..
f1.gif
f2.gif
f3.png
f4.pdf
226 Transfer complete.
ftp> get f3.png
200 PORT command successful.
150 Opening BINARY mode data connection for f3.png (15510 bytes).
226 Transfer complete.
15510 bytes received in 0.08 secs (185.3 kB/s)
ftp> mget f*.gif
mget f1.gif? y
200 PORT command successful.
150 Opening BINARY mode data connection for f1.gif (17028 bytes).
© Dunod – Toute reproduction non autorisée est un délit.

226 Transfer complete.


17028 bytes received in 0.13 secs (129.1 kB/s)
mget f2.gif? y
200 PORT command successful.
150 Opening BINARY mode data connection for f2.gif (6936363 bytes).
226 Transfer complete.
6936363 bytes received in 3.39 secs (1997.0 kB/s)
ftp> bye
221 Goodbye.
174 Exercices

EXERCICES

Exercice 15.1. Hors bande.


Pourquoi dit-on que le protocole FTP envoie les informations de contrôle « hors bande » ?

Exercice 15.2. Transfert d’arborescences de fichiers.


a) Le protocole FTP ne permet pas de demander le transfert du contenu d’un répertoire et
donc d’une arborescence de fichiers.
Comment le fournisseur du service peut-il contourner cette limitation ?
b) Certains clients FTP permettent cependant de transférer des arborescences de fichiers.
Quelle technique est utilisée par ces clients ?

Exercice 15.3. Récupération de la RFC 959 de FTP par FTP.


a) Quelles commandes shell permettent de se connecter de manière anonyme au serveur
FTP ftp.rfc-editor.org et de récupérer dans le répertoire in-notes le fichier
rfc959.tex ?
b) Dans cette spécification, trouver les trois modes de transmission possibles définis par le
protocole et la requête du protocole permettant de choisir le mode voulu.

Exercice 15.4. Le protocole TFTP.


TFTP utilise UDP au lieu de TCP, ce qui ouvre donc la possibilité de perte de paquets. Ses
commandes utilisateur sont très simplifiées. Par exemple, il n’y a pas de possibilité de lister
le site distant. Il faut connaître le fichier que l’on veut transférer.
Donner des exemples réalistes d’utilisation de TFTP, en dépit de ces limitations.
Chapitre 16

Les applications de connexion à distance

16.1 LA CONNEXION À DISTANCE


Le but des applications et protocoles de connexion à distance est de permettre à un utilisateur
de travailler sur une machine distante à partir d’un terminal local. Cet utilisateur doit bien
entendu disposer d’un accès autorisé à la machine distante. Les commandes saisies sur le
terminal local sont exécutées sur la machine distante. Les environnements local et distant
peuvent être hétérogènes.
Il existe des protocoles et commandes de connexion à distance liés aux seuls systèmes
d’exploitation de type Unix, comme rlogin (remote login), pour une session distante, et
rsh (remote shell), pour une commande unique. L’inconvénient majeur de rlogin et rsh
est la nécessité de devoir configurer la machine distante avec un fichier .rhosts contenant
© Dunod – Toute reproduction non autorisée est un délit.

tous les noms de machines et d’utilisateurs autorisés à y accéder.


Le protocole Telnet est le standard en matière de connexion à distance, même si ses faiblesses
en termes de sécurité le rendent inutilisable pour conduire des sessions shell à distance. En
effet, il suffit d’écouter les communications réseau avec des outils comme tcpdump ou
Wireshark pour récupérer les logins et mots de passe qui circulent en clair. Pour cette
forme d’utilisation, le protocole sécurisé SSH, avec authentification et cryptage, doit être
privilégié. Telnet reste utilisé :
– pour le test des serveurs : il permet de simuler une connexion TCP interactive avec d’autres
services tels que SMTP, HTTP, POP, IMAP, etc., en utilisant le port du protocole au lieu
du port standard 23/TCP,
– pour paramétrer certains équipements réseau dépourvus d’interface de gestion web,
comme par exemple des commutateurs, des routeurs, des téléphones IP, etc.
176 Partie 3. Les couches hautes

16.2 LE PROTOCOLE TELNET


Datant de 1983, il s’agit d’un des plus anciens protocoles client/serveur pour les réseaux
TCP/IP. Le client, qui a initié la connexion, interagit avec l’utilisateur, son terminal local et
les protocoles réseau. Le serveur interagit avec les protocoles réseau et un pseudo-terminal
qui donne au shell l’illusion de communiquer avec une interface utilisateur (clavier/écran)
locale, comme le montre la figure 16.1.

commande

Interface Client Serveur


utilisateur Telnet Telnet Shell

OS

Pilote de
Pilotes de TCP/IP
TCP/IP pseudo-
périphériques
terminal

terminal pseudo-terminal
Matériel (pty)
(tty)

Clavier, Internet
écran

Système de
chiers local

F IGURE 16.1 Architecture client/serveur de Telnet

Le client contacte le serveur sur le port 23/TCP. L’authentification se fait du côté serveur avec
les données de connexion, login et mot de passe, qui circulent en clair sur le réseau. Quand un
caractère est entré au clavier, il est envoyé au serveur, qui le renvoie en écho, ce qui provoque
son affichage sur le terminal local.
Telnet prend en compte l’hétérogénéité des systèmes par la négociation d’options à la
connexion, comme par exemple le codage ASCII sur 7 ou 8 bits. Les échanges sont purement
textuels.
Outre les textes échangés circulent aussi des séquences de caractères qui permettent de
contrôler l’affichage, par exemple pour effacer le contenu de la ligne courante. Par souci
de portabilité, Telnet définit des séquences d’échappement qui ne dépendent pas du type de
terminal. Le protocole de présentation sur le client Telnet qui doit les interpréter est appelé
NVT (Network Virtual Terminal).
16 • Les applications de connexion à distance 177

16.3 LA PRATIQUE DE TELNET


16.3.1 Le lancement d’une session avec la commande telnet
La commande pour lancer une session Telnet prend une des formes suivantes :
telnet nom_serveur
telnet adresse_IP
telnet nom_serveur no_port (pour accéder à un autre protocole)

16.3.2 Les principales commandes utilisateur


Le tableau qui suit résume les principales commandes utilisateur offertes par la commande
telnet. Elles ne doivent pas être confondues avec les commandes (caractères de contrôle)
du protocole Telnet et du protocole NVT, qui ne sont pas détaillées ici (IAC, DO, DON’T,
WILL, WON’T, AYT, BRK, etc.).

Commande Description
? Affichage d’une aide en ligne.
display Affichage des paramètres de la connexion (type de terminal, port).
environ Modification des variables d’environnement du système d’exploitation.
mode Bascule entre les modes de transfert ASCII (texte) et BINARY (binaire).
open Lancement d’une autre connexion à partir de la connexion en cours.
set Modification des paramètres de la connexion.
unset Recharge des paramètres de connexion par défaut.
quit Fin de l’application telnet.

16.3.3 Un exemple de session telnet


Il s’agit d’ouvrir une session avec le protocole POP (cf. paragraphe 20.2.3), sur le port
110/TCP, pour lire ses mails. Les commandes POP utilisées dans l’exemple sont les
suivantes :
© Dunod – Toute reproduction non autorisée est un délit.

Commande Description
USER identifiant L’identifiant de l’utilisateur.
PASS mot_de_passe Mot de passe de l’utilisateur.
STAT Nombre de messages non lus et taille en octets.
RETR n Récupération du message n dans la file.
DELE n Suppression du message n.
QUIT Fin de la connexion POP.

$ telnet mail.serveur.org 110


Trying <adresse IP> ...
Connected to mail.serveur.org.
Escape character is ’^]’.
178 Partie 3. Les couches hautes

+OK ContactOffice POP3 server ready


USER toto
+OK
PASS cfr56jk!0
+OK
STAT
+OK 2 12567
RETR 1
+OK message follows
... le mail ...
DELE 1
+OK
QUIT
+OK ContactOffice POP3 server signing off
Connection closed by foreign host.

16.4 LE PROTOCOLE SSH


SSH signifie Secure SHell. C’est une application et un protocole qui permettent de mettre
en place des connexions distantes sécurisées (cryptées) entre un client et un serveur. Plus
précisément, SSH a été conçu avec l’objectif de remplacer en les sécurisant les applications
rlogin, telnet, rcp, ftp et rsh. Le standard actuel est la version 2 de SSH.
Remarque
SSH ne doit pas être confondu avec SSL (Secure Socket Layer), qui est un protocole qui se
situe entre la couche transport (TCP) et la couche application et qui permet de sécuriser tous
les protocoles applicatifs sur Internet : HTTPS, FTPS, POP3S, etc.

16.4.1 Brève introduction à la cryptographie


SSH utilise la cryptographie symétrique. Son principe est très simple. Si Alice veut envoyer
un message confidentiel à Bob, Alice et Bob doivent posséder une même clé de cryptage
secrète. Alice chiffre le message avec la clé secrète puis l’envoie à Bob sur un canal qui
n’est pas forcément sécurisé. Bob déchiffre alors le message grâce à la clé secrète. Toute
autre personne en possession de la clé secrète peut également déchiffrer le message. Mais, en
l’absence de cette clé, un pirate ne peut pas décrypter le message. Le gros problème de cette
approche réside bien entendu dans l’échange, qui doit rester confidentiel, de la clé secrète
entre Alice et Bob. La figure 16.2 illustre ce principe de cryptographie à clé secrète.

clé partagée
clé secrète clé secrète

message message message


chirement crypté déchirement en clair
en clair

Alice Bob

F IGURE 16.2 La cryptographie symétrique


16 • Les applications de connexion à distance 179

SSH utilise également la cryptographie asymétrique. En cryptographie asymétrique, chaque


personne dispose de deux clés générées en même temps, une publique, permettant le
chiffrement, et une privée, permettant le déchiffrement. Comme leurs noms l’indiquent,
la clé publique peut être librement publiée, tandis que la clé privée doit rester secrète. La
connaissance de la clé publique ne permet pas d’en déduire la clé privée. Si Alice veut
envoyer un message confidentiel à Bob, elle doit le chiffrer avec la clé publique de Bob et
le lui envoyer sur un canal qui n’est pas forcément sécurisé. Seul Bob pourra déchiffrer ce
message en utilisant sa clé privée secrète. La clé privée, protégée par une pathphrase, reste
sur le poste à partir duquel Bob se connecte. L’utilisation d’un agent SSH permet de stocker
la pathphrase de la clé privée pendant la durée de la session et évite de la saisir à chaque
utilisation. La figure 16.3 illustre ce principe de cryptographie asymétrique.

clé publique clé privée


de Bob de Bob

message message message


chirement crypté déchirement en clair
en clair

Alice Bob

F IGURE 16.3 La cryptographie asymétrique

En plus du cryptage, les clés permettent aussi de signer les messages ou leur condensé,
c’est-à-dire de calculer par un algorithme de hachage (SHA, MD5, etc.) une valeur unique,
reposant sur le contenu et sur la clé. Signer un message avec la clé privée permet non
seulement d’attester l’identité de l’émetteur, puisqu’une seule personne la possède, mais aussi
que le contenu n’a pas été modifié après signature.
Les algorithmes de chiffrement asymétrique, comme RSA, sont beaucoup plus lents, dans un
facteur 100 à 1 000, que ceux de chiffrement symétrique, comme DSA ou AES. SSH exploite
donc la cryptographie asymétrique au début de la communication pour qu’Alice et Bob
puissent s’échanger la clé secrète de manière sécurisée. Ensuite, la suite de la communication
est sécurisée grâce à la cryptographie symétrique, en utilisant la clé secrète partagée ainsi
échangée.
© Dunod – Toute reproduction non autorisée est un délit.

16.4.2 L’établissement d’une connexion SSH


L’établissement d’une connexion SSH comporte les étapes suivantes :
(1) Le client demande la connexion, par défaut sur le port 22/TCP du serveur.
(2) Le serveur divulgue les versions du protocole SSH autorisées.
(3) Le client envoie la version choisie.
(4) Le serveur envoie sa clé publique et une description pour définir avec le client le mode
de chiffrement, d’authentification, de compression, etc.
(5) Le client vérifie qu’il s’agit bien de la clé du serveur, s’il l’a déjà reçue lors d’une
connexion précédente grâce à un mécanisme de stockage des clés côté client.
180 Partie 3. Les couches hautes

(6) Le client génère une clé secrète et l’envoie au serveur, en chiffrant l’échange avec la clé
publique du serveur (chiffrement asymétrique).
(7) Le serveur déchiffre cette clé secrète en utilisant sa clé privée, ce qui prouve qu’il est
bien le vrai serveur.
(8) Pour le prouver au client, le serveur chiffre un message standard avec la clé secrète et
l’envoie au client.
(9) Si le client retrouve le message standard en utilisant la clé secrète, il a la preuve que le
serveur est bien le vrai serveur.
(10) Une fois la clé secrète échangée, le client et le serveur peuvent alors établir une
connexion sécurisée grâce à la clé secrète commune (chiffrement symétrique).
(11) Le client peut envoyer au serveur le login et le mot de passe de l’utilisateur pour
vérification. Il existe aussi un mode d’authentification des utilisateurs par clé publique
et privée.
(12) La connexion sécurisée reste en place jusqu’à ce que l’utilisateur se déconnecte.
Remarque
Le point délicat est de s’assurer que la clé publique initialement présentée par le serveur
est bien sa clé publique, c’est-à-dire qu’on dialogue avec le bon serveur. On peut récupérer
l’empreinte (fingerprint) de la clé publique du serveur avant de s’y connecter pour la
première fois. C’est une chaîne de caractères hexadécimaux, un hachage, à peu près
unique pour chaque clé et qui s’obtient grâce à la commande ssh-keygen (ex. :
6a:de:e0:af:56:f8:0c:04:11:5b:ef:4d:49:ad:09:23$.

16.5 LA PRATIQUE DE SSH


La suite d’outils OpenSSH pour les systèmes de type Unix comporte :
– le serveur SSH (sshd),
– des clients, c’est-à-dire les commandes ssh, scp, sftp et sftp-server,
– des outils : ssh-agent, qui lance un agent SSH ; ssh-add, qui ajoute la clé privée à
l’agent ; ssh-keygen, qui génère un couple clé publique/clé privée ; ssh-keyscan,
qui collecte des clés publiques depuis des machines, etc.,
– des fichiers de configuration dans /etc/ssh côté client et côté serveur.

16.5.1 Connexion à distance


Il suffit d’utiliser la commande ssh -l utilisateur serveur, qui peut s’écrire aussi
ssh utilisateur@serveur.
Si c’est la première connexion depuis ce client vers ce serveur, SSH demande si l’empreinte
de la clé publique présentée par le serveur est la bonne. Si l’utilisateur répond yes, la
clé publique du serveur est ajoutée au fichier ~/.ssh/known_hosts. Si ce n’est pas la
première connexion de ce client vers ce serveur, la clé publique est vérifiée à l’aide de ce
fichier. Ensuite, l’utilisateur entre son mot de passe et l’invite du shell apparaît.
16 • Les applications de connexion à distance 181

16.5.2 Exécution de commande à distance


Il suffit d’utiliser la commande ssh -l utilisateur serveur commande, qui peut
s’écrire aussi ssh utilisateur@serveur commande.

16.5.3 Copie de fichiers à distance


La commande scp s’utilise typiquement comme suit :
– Copie du fichier fich1 du répertoire courant vers le home de l’utilisateur dupond sur le
serveur SSH serveur.exemple.org :
scp fich1 dupond@serveur.exemple.org:

– Copie dans le répertoire courant du fichier fich2 du home de l’utilisateur dupond sur
le serveur SSH serveur.exemple.org :
scp dupond@serveur.exemple.org:fich2 .

– Copie du sous-répertoire repout du répertoire courant vers le sous-répertoire repin du


home de l’utilisateur dupond sur le serveur SSH serveur.exemple.org :
scp -r repout dupond@serveur.exemple.org:repin

16.5.4 Création d’un tunnel SSH


Créer un tunnel SSH, opération appelée aussi port forwarding, permet de sécuriser n’importe
quelle connexion TCP vers une machine sur laquelle l’utilisateur possède un accès SSH. Un
tunnel permet aussi de passer des flux à travers un pare-feu en utilisant un port ouvert.
Par exemple, pour établir un tunnel SSH pour accéder à une base de données PostgreSQL qui
tourne sur la même machine que le serveur SSH (serveur.exemple.org), l’utilisateur
dupont qui possède un accès SSH doit simplement entrer la commande :
ssh -L 63333:localhost:5432 dupont@serveur.exemple.org

où 63333 est le port local de début du tunnel, choisi librement.


© Dunod – Toute reproduction non autorisée est un délit.

Le port 5432 est le bout distant du tunnel. C’est le port que le serveur PostgreSQL écoute
par défaut, ce qu’illustre la figure 16.4.

5432
PostgreSQL
63333
Tunnel SSH
client.exemple.org serveur.exemple.org
y
Réseau

F IGURE 16.4 Un tunnel SSH


182 Partie 3. Les couches hautes

Avec ce tunnel, la commande :


psql -h localhost -p 63333 postgres

lance l’interface en ligne de commandes de PostgreSQL sur le port local 63333. Et


PostgreSQL réagit comme s’il recevait des commandes sur le port 5432 de serveur.
exemple.org.
On peut de manière similaire créer des tunnels inversés avec l’option -R de ssh au lieu de
l’option -L. Dans ce cas, le serveur SSH doit être hébergé sur la machine locale.
Remarque
SSH est parfois appelé le « VPN du pauvre » (the poor man’s VPN). En réalité, un tunnel
SSH et un VPN sont deux choses différentes et complémentaires. Un VPN (Virtual Private
Network, ou réseau virtuel privé) permet d’établir une liaison sécurisée sur Internet. Le VPN
agit au niveau de la couche transport ou des couches inférieures, ce qui signifie que tout le
trafic réseau passe dans le tunnel sécurisé. Au contraire, le tunnel SSH se situe au niveau
applicatif, pour un port particulier.
16 • Les applications de connexion à distance 183

EXERCICES

Exercice 16.1. Requête HTTP en Telnet.


Comment accéder avec Telnet à la page HTML de présentation du système GNU à l’adresse
http://www.gnu.org/gnu/gnu.html ?
La requête à envoyer au serveur HTTP est la suivante :
GET /gnu/gnu.html HOST/1.1
host: www.gnu.org
*** une ligne vide ici ***

Exercice 16.2. FTP avec Telnet.


a) En utilisant Telnet, donner les commandes et messages FTP permettant de récupérer la
RFC 959 de FTP, comme expliqué dans l’exercice 15.3.
Les messages du protocole FTP utiles pour ce faire sont dans l’ordre :
(1) USER nom pour la connexion.
(2) PASS mot_de_passe pour l’authentification.
(3) CWD nom_repertoire pour changer de répertoire sur le serveur distant.
(4) RETR nom_fichier pour transférer le fichier vers la machine locale. Cette
commande échoue.
(5) PASV pour passer en mode passif. Le serveur répond en donnant une série de 6 nombres
nb1 à nb6. Il faut ouvrir une autre fenêtre et se connecter par Telnet au serveur FTP
d’adresse IP nb1.nb2.nb3.nb4 sur le port nb5 × 256 + nb6. La connexion étant établie,
il faut revenir à la première fenêtre pour la commande RETR, qui cette fois réussit. Le
fichier doit apparaître dans la deuxième fenêtre.
(6) QUIT pour quitter la session FTP.
b) Expliquer pourquoi la première tentative de transférer le fichier par RETR échoue et
pourquoi la deuxième tentative réussit.
© Dunod – Toute reproduction non autorisée est un délit.

Exercice 16.3. Cryptographie.


Alice a généré une paire de clés publique/privée et Bob a récupéré la partie publique.
a) Qui peut envoyer des message cryptés à qui ?
b) Qui peut envoyer des messages signés à qui ?

Exercice 16.4. SSH.


Expliquer le dialogue suivant lors d’une connexion avec SSH de l’utilisateur toto au serveur
machinedist.
$ ssh toto@machinedist
The authenticity of host ’machinedist’ (111.222.333.4)’ can’t be established.
RSA1 key fingerprint is 1z:2y:3x:4w:56:78:98:78:ab:cd:ef:01:23:45:67:89.
184 Exercices

Are you sure you want to continue connecting (yes/no)? yes


Warning: Permanently added ’machinedist,111.222.333.4’ (RSA1) to
the list of known hosts.
toto@machinedist’s password:
Chapitre 17

Les applications d’accès


aux fichiers distants

17.1 L’ACCÈS AUX FICHIERS DISTANTS


Les applications d’accès aux fichiers distants sur un réseau ne doivent pas être confondues
avec les applications de transfert de fichiers, vues au chapitre 15. Les applications et
protocoles d’accès aux fichiers distants permettent un accès complètement transparent aux
fichiers, comme si le système de fichiers distant était local. Par exemple, quand l’utilisateur
modifie un des fichiers, cette opération est automatiquement propagée sur le système de
fichiers distant.
Les deux principaux protocoles d’accès aux fichiers distants sont :
© Dunod – Toute reproduction non autorisée est un délit.

– NFS (Network File System), issu du monde Unix,


– SMB (Server Message Block), également appelé CIFS (Common Internet File System),
issu du monde Windows. L’application open source Samba est une implantation bien
connue de SMB sur les systèmes de type Unix qui permet le partage de ressources, fichiers
et imprimantes, entre les mondes Unix et Windows.

17.2 LE PROTOCOLE NFS


NFS est un protocole d’accès aux fichiers distants sur un réseau développé par Sun en 1985.
On trouve aujourd’hui des implantations conformes aux versions 2, 3 et 4 du protocole, avec
des caractéristiques qui ont assez largement évolué au fil des versions.
186 Partie 3. Les couches hautes

La figure 17.1 montre comment NFS s’intègre aux couches logicielles qui permettent aux
applications d’accéder aux fichiers sur des disques physiques. Les processus applicatifs
accèdent par des appels système (syscalls) à la couche du système de fichiers virtuel (VFS)
qui offre une interface de programmation (API) uniforme quels que soient le ou les systèmes
de fichiers effectifs installés, comme ext2, ext4, ReiserFS ou NFS, en tant que système de
fichiers en réseau. Les accès locaux passent ensuite par la couche de gestion des périphériques
en mode bloc (pilotes IDE, SCSI, etc.).

Application
syscall

OS Virtual File System (VFS)


Vi

ext2 ext4 ReiserFS NFS

Pilotes IDE, SCSI...

Matériel

Disque Réseau

F IGURE 17.1 Les couches logicielles de l’accès aux disques

Le protocole NFS est de type client/serveur, comme le montre la figure 17.2

Application

/home/dupont/
p ch /mnt/ch1
OS

VFS
Serveur
NFS Accès local
Accès local Client NFS
RPC/XDR
TCP-UDP/IP
Matériel

ch1
ch
Réseau
Disque
Disque

F IGURE 17.2 L’architecture client/serveur de NFS


17 • Les applications d’accès aux fichiers distants 187

Depuis la version 4, l’authentification, par le protocole Kerberos, et le chiffrement sont


possibles.
NFS utilise le protocole RPC (Remote Procedure Call, ou appel de procédure distante), qui
est un standard pour les services distants, et le standard XDR (eXternal Data Representation)
pour l’encodage des données. NFS est un service RPC, enregistré dans un annuaire
(portmapper). Un client qui veut effectuer une requête NFS s’adresse à cet annuaire pour
localiser le service et le port utilisé. Pour le service NFS, la réponse désigne généralement le
port par défaut 2049. Client, portmapper et serveur NFS sont aujourd’hui intégrés au noyau
Linux.

17.3 LA PRATIQUE DE NFS


NFS doit être configuré du côté serveur et du côté client. Seuls les principes généraux sont
présentés ici. On trouvera plus de détails, par exemple, dans [Uf16].

17.3.1 Le côté client


Le fichier /etc/fstab indique les montages habituels sur la machine, avec pour chaque
montage le répertoire qui est partagé, le point de montage, le type (nfs) et des options.
La commande mount -a, généralement exécutée dans un script de démarrage, monte tous
les répertoires indiqués dans fstab à l’exception de ceux dont la ligne contient l’option
noauto.
La commande mount montage monte le répertoire correspondant au point de montage
indiqué.
Exemple
On suppose que le serveur possède l’IP fixe 192.168.0.10 et le client l’IP fixe
192.168.0.20.
$ tail -1 /etc/fstab
192.168.0.10:/home/dupont /mnt/dupont nfs defaults, noauto 0 0
$ mkdir /mnt/dupont
© Dunod – Toute reproduction non autorisée est un délit.

$ mount /mnt/dupont
$ ls /mnt/dupont
Cours Musiques Videos
$ df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda 9804120 7594876 1711224 82% /
192.168.69.2:/home/dupont 249273340 139387144 109886196 56% /mnt/dupont

17.3.2 Le côté serveur


Le fichier /etc/exports contient une ligne par répertoire à exporter avec la liste des
machines autorisées à y accéder :
<repertoire> <hote1>(<options>) <hote2>(<options>)...
188 Partie 3. Les couches hautes

Dans l’exemple qui suit, l’option rw indique un accès en lecture/écriture, alors que ro
indique un accès en lecture seulement.
L’option root_squash retire au superutilisateur en connexion distante tous les privilèges
de son statut alors que no_root_squash les conserve.
L’option async privilégie les performances sur l’intégrité en cas de crash système, en
répondant aux requêtes avant que les écritures sur le disque soient effectivement terminées
au contraire de sync.
Exemple

$ cat /etc/exports
# /etc/exports: the access control list for filesystems which
# may be exported to NFS clients. See exports(5).
/home/dupont/partage 192.168.0.20(rw,root_squash,async)

17.4 LE PROTOCOLE SMB


SMB, également dénommé CIFS, est un protocole réseau pour le partage de fichiers et
imprimantes dans le monde Windows. Créé en 1985 par IBM, il a été repris et largement
modifié par Microsoft. SMB fonctionne en client/serveur, initialement sur les réseaux locaux
NetBEUI (NetBios Extended User Interface) puis, par encapsulation, sur les réseaux TCP/IP.
Chaque serveur SMB/CIFS possède un nom NetBIOS d’une longueur maximum de 15
caractères. Les partages sont nommés \\serveur\partage.
La figure 17.3 montre la fenêtre Windows de connexion d’un lecteur réseau à un partage
SMB.

F IGURE 17.3 Connexion d’un lecteur réseau


17 • Les applications d’accès aux fichiers distants 189

17.5 LA PRATIQUE DE SAMBA


Samba est une implantation de SMB/CIFS pour les systèmes de type Unix qui permet de
mettre à disposition des imprimantes et des fichiers dans des réseaux Windows.
Le serveur Samba sur la machine Unix émule un serveur Windows. Il permet en particulier
de configurer des partages réseau pour des répertoires Unix et leurs sous-répertoires.
Ils apparaissent aux utilisateurs de Windows comme des dossiers Windows classiques
accessibles via le réseau.
La configuration de Samba se fait en éditant un fichier unique /etc/smb.conf,
comportant plusieurs sections à compléter : une section [global], qui définit les paramètres
généraux ; une section [homes], qui définit le partage des répertoires personnels ; des
sections [nom], qui définissent les partages nommés de répertoires particuliers ; une section
[printers], qui définit les imprimantes partagées par le serveur, etc.
Exemple
[global]
# Définition du groupe de travail ou du nom de domaine
workgroup = WORKGROUP
# Nom NETBIOS du serveur
netbios name = CARAMEL
# Nom qui apparait dans le voisinage réseau
server string = Serveur CARAMEL
# Niveau de sécurité (share = partage public sans mot de passe)
security = share
# Compte unix invité
guest account = nobody

[public]
#====== Definition du partage nommé public ======
# Chemin du fichier partagé
path = /home/public
# Description du partage
comment = Partage public
# L’écriture est autorisée
read only = no
© Dunod – Toute reproduction non autorisée est un délit.

# Le partage est visible dans l’explorateur


browseable = yes
# les invités on le droit d’y accéder
guest ok = yes

Pour accéder depuis un client Windows aux partages ainsi configurés, on peut double-cliquer
sur le serveur SMB dans le voisinage réseau pour s’y connecter. On peut aussi utiliser les
lecteurs réseau, illustrés par la figure 17.3.
Pour accéder depuis un client de type Unix aux partages définis dans le fichier de
configuration, on peut inclure ces partages au fichier /etc/fstab avec smbfs comme
type de système de fichiers ou utiliser la commande smbmount.
190 Partie 3. Les couches hautes

Exemple
Dans /etc/fstab :
//CARAMEL/public /mnt/public smbfs default,no-auto
ou par la commande smbmount :
smbmount //CARAMEL/public /mnt/public
17 • Les applications d’accès aux fichiers distants 191

EXERCICES

Exercice 17.1. NFS.


On souhaite mettre en place un serveur NFS sur la machine serveur.monorg.fr qui
exporte le répertoire /home/moi/public en lecture seule sur toutes les machines du
domaine monorg.fr et le répertoire /home/moi/private en lecture-écriture sur la
machine toi.monorg.fr.
a) Donner le contenu du fichier /etc/exports sur le serveur.
b) Quelles doivent être les permissions sur les répertoires /home/moi/public et
/home/moi/private ?
c) Sur la machine autre.monorg.fr, quelle commande permet de monter le répertoire
partagé /home/moi/public dans /mnt/public ?
Remarque
L’option -t nfs donne le type du montage à réaliser.
d) Dans quel fichier de la machine cliente ce montage peut-il être décrit ?

Exercice 17.2. Fichier /etc/exports.


Commenter la signification du fichier /etc/exports suivant :
/usr 172.16.5.0/255.255.255.0 (ro)
/home 172.16.5.0/255.255.255.0 (rw)
/usr/local/man mach1.monorg.fr (rw) mach2.monorg.fr (rw)
/home/ventes *.ventes.monorg.fr (rw)

Remarque
Les machines sont désignées explicitement, ou avec des caractères de remplacement, ou avec
des adresses IP, ou avec des adresses IP et des masques.

Exercice 17.3. Fichier /etc/fstab.


© Dunod – Toute reproduction non autorisée est un délit.

Commenter la signification du fichier /etc/fstab suivant :


LABEL=/ / ext3 defaults 1 1
LABEL=/home /home ext3 defaults 1 2
LABEL=/var /var ext3 defaults 1 2
/dev/hda1 /win vfat defaults 0 0
/dev/hda2 swap swap defaults 0 0
/dev/cdrom /mnt/cdrom iso9660 noauto,owner 0 0
serveur:/export/home/moi /home/moi nfs rw 0 0

Remarque
Les six champs ont les significations suivantes : nom du montage, point de montage, type
de montage, paramètres, sauvegarde exigée (1) ou non (0), vérification (ordre 1, 2, . . . ) ou
non (0).
192 Exercices

Exercice 17.4. Samba.


Commenter cet extrait du fichier de configuration smb.conf qui définit deux partages :
[cdrom]
comment = Le CD-ROM
path = /cdrom
writable = no
public = yes
[ventes]
comment = Le répertoire partagé des ventes
path = /home/partage
writable = yes
public = no
valid users = toto, titi, tata
create mask = 0644
directory mask = 0755
Chapitre 18

Les applications de gestion d’annuaires

18.1 LES ANNUAIRES


Un annuaire électronique centralise des données et les rend disponibles via un réseau à des
applications, des systèmes d’exploitation ou des utilisateurs. Par exemple, un annuaire de
composants pour les applications, un annuaire d’utilisateurs pour les systèmes d’exploitation
et un carnet d’adresses pour les utilisateurs.
Un annuaire électronique est un conteneur de données structurées, avec un protocole d’accès
réseau de type client/serveur et des capacités de distribution, de réplication et de sécurisation.
Les annuaires sont plus spécialisés que les systèmes de gestion de base de données (SGBD).
© Dunod – Toute reproduction non autorisée est un délit.

Ils sont conçus pour être plus souvent interrogés que mis à jour, à l’aide de moyens plus
simples que les langages de requêtes des SGBD comme SQL.
Il existe de multiples déclinaisons du concept d’annuaire électronique. Les paragraphes qui
suivent abordent trois exemples emblématiques :
– NIS, un précurseur destiné à stocker et distribuer les données administratives d’un parc de
machines en réseau,
– DNS, un service d’annuaire distribué au niveau mondial pour la résolution des noms sur
Internet,
– LDAP, une norme pour les systèmes d’annuaires, proposant un modèle de données, un
modèle de nommage, un protocole client/serveur, un modèle de sécurité et un modèle de
réplication.
194 Partie 3. Les couches hautes

18.2 LE PARTAGE DES DONNÉES SYSTÈME AVEC NIS


18.2.1 Le protocole NIS
NIS a été introduit par SUN en 1985. C’est un annuaire qui permet le partage des données
système d’un parc de machines de type Unix en réseau, comme celles contenues dans les
fichiers /etc/passwd, /etc/group, /etc/hosts, etc.
Cette centralisation des données système permet de réduire le temps passé à l’administration
de ce parc de machines. Elle simplifie la gestion des comptes utilisateurs, des mots de passe
et des groupes d’utilisateurs. Par exemple, il suffit de créer un nouvel utilisateur sur le serveur
NIS pour que chaque machine du parc, chaque client NIS, puisse accéder à ses données.
Une installation NIS comprend un serveur maître, des serveurs esclaves et des clients.
Les données (maps), générées depuis les fichier de configuration du répertoire /etc, sont
stockées dans une base de données de type DBM. Le client les récupère via des appels RPC
(Remote Procedure Call).
Aujourd’hui, NIS est progressivement abandonné au profit d’autres protocoles, comme LDAP
(cf. paragraphe 18.4), Kerberos, RADIUS, etc., plus sécurisés et compatibles avec des réseaux
hétérogènes Unix/Windows.

18.2.2 La pratique de NIS


Les commandes de base du côté des postes clients, préfixées par yp pour yellow pages, le
nom d’origine de NIS, sont :
– yppasswd, qui permet de changer un mot de passe NIS,
– ypcat, qui affiche les catégories de données : ypcat hosts, ypcat group et
ypcat passwd,
– ypwhich, qui affiche l’IP du serveur NIS.

18.3 LA RÉSOLUTION DES NOMS AVEC DNS


18.3.1 Présentation
Le système DNS a pour finalité principale la transformation, « résolution », des noms des
systèmes informatiques (hôtes) en adresses IP. L’utilisation de noms à la place des adresses
est utile car ces dernières ne sont ni parlantes pour les utilisateurs ni faciles à mémoriser. Les
adresses IPv4 comportent 32 bits, soit 4 octets ou 4 groupes de chiffres décimaux séparés
par des points, comme 193.54.21.201. Les adresses IPv6 comportent 128 bits, soit 16
octets ou 8 groupes de 4 chiffres hexadécimaux séparés par des doubles points, comme
2001:0db8:0000:85a3:0000:0000:ac1f:8001.
Aux débuts d’Internet, la gestion des noms était centralisée par un organisme unique, le NIC
(Network Information Center) du SRI (Stanford Research Institute), qui diffusait un fichier
hosts.txt de toutes les correspondances, à transférer par FTP sur tous les systèmes. Avec
l’explosion du nombre de systèmes connectés, cette gestion centralisée d’un espace de noms
« à plat » est vite devenue impraticable. Le DNS est apparu au milieu des années 1980.
18 • Les applications de gestion d’annuaires 195

Il reste cependant sur tous les systèmes de type Unix un fichier /etc/hosts qui donne
les correspondances minimales utiles quand le DNS n’est pas atteignable, en particulier la
correspondance entre l’adresse 127.0.0.1 et le nom localhost.
Le système DNS propose :
– un espace de noms hiérarchique, permettant de garantir l’unicité de chaque nom dans la
structure arborescente, à la manière des systèmes de fichiers Unix,
– une base de données distribuée, implantée dans une hiérarchie de serveurs de noms pour
rendre disponible cet espace de noms,
– un protocole applicatif client/serveur, avec des clients permettant de résoudre les noms,
c’est-à-dire d’interroger les serveurs pour obtenir l’adresse IP correspondant à un nom.

18.3.2 L’espace de noms hiérarchique


Dans le système DNS, l’espace de noms est organisé selon une structure arborescente. Au
sommet de l’arbre, on trouve une racine unique, représentée par un point, avec un nombre
donné de fils ou domaines du premier niveau, ou TLD (Top Level Domains). L’ICANN
(Internet Corporation for Assigned Names and Numbers) est en charge de l’administration
des TLD, parmi lesquels on trouve :
– un petit nombre de domaines du premier niveau génériques, comme com pour les
entreprises commerciales, edu pour les établissements d’enseignement, org pour les
organisations à but non lucratif, etc.,
– un domaine du premier niveau par pays, avec des noms sur 2 lettres (norme ISO 3166),
comme fr pour la France, be pour la Belgique, de pour Allemagne, etc.

L’ICANN délègue la gestion des TLD à des entreprises ou associations. Par exemple, com et
net sont gérés par la société VeriSign et fr est géré par l’AFNIC (Association Française
pour le Nommage Internet en Coopération). Ces gestionnaires de TLD vendent les domaines
du deuxième niveau, comme wikipedia.org, orange.fr ou univ-lorraine.fr,
soit directement, soit via des bureaux d’enregistrement de noms de domaine (registrars). Les
noms doivent être uniques, selon la règle du premier demandeur premier servi. En France, un
© Dunod – Toute reproduction non autorisée est un délit.

millier de registrars ont passé contrat avec l’AFNIC pour vendre les noms de domaines en fr.
L’achat se fait pour une durée limitée, souvent d’une année renouvelable. Les informations
administratives et techniques sur le dépositaire du nom sont publiques et accessibles par la
commande Unix whois nom_de_domaine ou par des services WHOIS sur le web. Les
dépositaires d’un domaine du deuxième niveau peuvent le gérer à leur guise pour nommer
des hôtes ou créer des domaines du troisième niveau. La hiérarchie des noms est synthétisée
par la figure 18.1.
Remarques
– Le mot domaine utilisé seul est un peu ambigu. Pour certains, le mot domaine utilisé seul
désigne un nom du deuxième niveau. D’où l’utilisation du terme sous-domaine pour les
noms du troisième niveau. Pour d’autres, le mot domaine désigne toute étiquette de l’arbre
ou toute combinaison d’étiquettes.
196 Partie 3. Les couches hautes

. racine

com net org gouv fr be de TLD

free.fr univ-lorraine.fr deuxième niveau

monordi.univ-lorraine.fr hôtes

F IGURE 18.1 La hiérarchie des noms

– Le nom complet d’un hôte, appelé FQDN pour Fully Qualified Domain Name, comporte
l’ensemble des étiquettes des nœuds de l’arbre écrits en remontant vers la racine, comme
par exemple monordi.univ-lorraine.fr. (où le point final correspond à la racine
de l’arbre).
– Les noms sont insensibles à la casse (majuscules versus minuscules). Ils comportent
classiquement des lettres, des chiffres et le caractère trait d’union.

18.3.3 Les serveurs de noms


Il existe 13 adresses pour les serveurs de noms racines. Ce sont des adresses IP anycast, qui
désignent un serveur pris parmi un ensemble de serveurs. Ces adresses doivent être connues
de tous les serveurs DNS. Les serveurs racines connaissent les serveurs des domaines du
premier niveau.
Tout propriétaire de domaine doit mettre à disposition deux serveurs de noms avec des
adresses IP fixes, qui font autorité pour les noms de son domaine : un serveur primaire
et un serveur secondaire, copie du primaire. Ces serveurs doivent répondre à toute requête
concernant un nom d’hôte situé dans le domaine concerné.
En revanche, ces serveurs ne sont pas nécessairement récursifs, c’est-à-dire ne répondent
pas nécessairement aux requêtes concernant d’autres domaines que ceux pour lesquels ils
font autorité. Cette notion sera détaillée au paragraphe suivant. Par contre, les serveurs des
fournisseurs d’accès Internet (FAI) sont toujours récursifs, pour être en mesure de répondre
à toutes les requêtes. Ils sont aussi toujours dotés d’un cache, pour optimiser les recherches
répétées d’un même nom.

18.3.4 La résolution des noms


Le principe de résolution des noms par un serveur récursif, par exemple le serveur primaire ou
à défaut le serveur secondaire d’un FAI, est le suivant, illustré par la figure 18.2 (on suppose
que l’on cherche l’IP de monordi.univ-lorraine.fr) :
(1) Si la réponse est déjà connue du serveur récursif dans son cache, il la retourne au client
demandeur, en indiquant par la mention no authoritative qu’il n’a pas autorité sur le
domaine et donc que la réponse peut, dans de très rares cas, n’être plus à jour.
18 • Les applications de gestion d’annuaires 197

(2) Sinon, le serveur récursif interroge un serveur racine, le premier capable de lui fournir la
réponse, pour obtenir la liste des serveurs qui font autorité pour le domaine du premier
niveau (ici fr).
(3) Le serveur récursif interroge un de ces serveurs du premier niveau, le premier capable de
lui fournir la réponse, pour obtenir la liste des serveurs qui font autorité pour le domaine
du deuxième niveau (ici univ-lorraine.fr).
(4) Le serveur récursif interroge un de ces serveurs du deuxième niveau, le premier
capable de lui fournir la réponse, pour récupérer l’adresse IP de l’hôte visé (ici
monordi.univ-lorraine.fr) et répondre au client.
(5) Finalement, le serveur récursif met en cache les éléments de cette résolution, avec une
durée de validité fournie par les serveurs qui font autorité sur les domaines.

Serveur Serveur
racine racine ...

2
Serveur Serveur Serveur
...
secondaire niveau 1 niveau 1
3

Serveur
Client 4 Serveur Serveur
1 principal ...
niveau 2 niveau 2
5

F IGURE 18.2 La résolution des noms

18.3.5 Les autres services offerts

Un serveur DNS peut offrir d’autres services que la résolution des noms, puisqu’il détient
d’autres données, comme par exemple la liste des serveurs mail (SMTP) du domaine.
© Dunod – Toute reproduction non autorisée est un délit.

Parmi ces autres services, on peut citer :


– La « résolution inverse », qui consiste à donner le nom FQDN associé à une adresse IP.
– Le host aliasing, qui consiste à donner un pseudonyme à un hôte (deux noms pour une
adresse IP).
– Le mail server aliasing, qui autorise un serveur web et un serveur mail à porter le même
nom, même s’ils n’ont pas la même adresse IP (un nom pour deux adresses IP).
– L’équilibrage de charge (load balancing – cf. paragraphe 4.2.4), qui permet à un nom de
correspondre à plusieurs adresses IP de serveurs mail ou web répliqués, avec un système de
rotation dans les réponses du serveur DNS, permettant de répartir la charge sur l’ensemble
de ces serveurs répliqués.
198 Partie 3. Les couches hautes

18.3.6 Le protocole DNS


DNS est un protocole client/serveur. Il est utilisé par d’autres protocoles applicatifs, comme
HTTP, FTP, SSH, etc., plutôt que directement par les applications. Les clients sont appelés
des solveurs de noms (name resolver).
Le protocole utilise le port 53/UDP pour les messages courts (un seul paquet) et 53/TCP pour
les messages longs (plusieurs paquets).

18.3.7 La pratique de DNS


Il existe de nombreux logiciels serveur DNS, comme bind v8 ou v9 ou Microsoft DNS. Les
clients DNS utilisables en ligne de commande pour tester le système DNS sont dig ou host
pour les systèmes de type Unix et nslookup pour Windows.
Exemples
Résolutions par la commande host :

$ host www.univ-lorraine.fr
www.univ-lorraine.fr is an alias for web01.inpl-nancy.fr.
web01.inpl-nancy.fr has address 193.54.21.201
$ host orion.ciril.fr
orion.ciril.fr has address 193.50.27.67
orion.ciril.fr has IPv6 address 2001:660:4503:201::67
orion.ciril.fr mail is handled by 10 internet.imail.ciril.fr.

18.4 LES SYSTÈMES D’ANNUAIRE NORMALISÉS LDAP


18.4.1 Généralités
LDAP est l’acronyme de Ligthweight Directory Access Control. Le mot lightweight signifie
« léger » : LDAP a supplanté une norme particulièrement complexe et « lourde », appelée
X.500. Avec LDAP, il est possible de gérer toutes les formes d’annuaires, comme les données
d’identification, les carnets d’adresses, les certificats, le parc matériel et logiciel, etc.
La norme LDAP définit six modèles :
– Un modèle d’information, qui décrit les types des données contenues dans l’annuaire.
– Un modèle de nommage, qui décrit comment les données sont organisées et identifiées.
– Un modèle fonctionnel, qui définit les requêtes permettant l’interrogation et la mise à jour
des données.
– Un protocole, qui spécifie comment accéder aux données contenues dans l’annuaire.
– Un modèle de sécurité, qui spécifie comment sont contrôlés les accès aux données et leurs
transferts.
– Un modèle de réplication, qui décrit comment les données peuvent être réparties sur
plusieurs serveurs à des fins de tolérance aux pannes et de répartition de la charge.
18 • Les applications de gestion d’annuaires 199

18.4.2 Le modèle d’information


Un annuaire LDAP contient des données sur des objets de natures différentes, comme des
personnes, des services, des imprimantes, des paramètres de configuration, etc.
Le modèle d’information décrit l’ensemble des classes d’objets de l’annuaire. Une classe
d’objets est caractérisée essentiellement par un nom, un identifiant unique au niveau
mondial (OID) et des attributs obligatoires ou optionnels. En plus des classes prédéfinies,
dont quelques-unes sont décrites dans le tableau suivant, on peut aussi définir des classes
spécifiques à un contexte particulier (cf. paragraphe 18.4.8).

Classe Description
person Une personne.
organizationalPerson Une personne d’une organisation.
inetOrgPerson Une personne sur Internet.
device Un matériel.
document Un document.
organization Une organisation.
organizationalRole Un rôle dans une organisation.
organizationalUnit Une unité organisationnelle.
dcObject Un composant de nom de domaine.

Un attribut est caractérisé par un nom, un identifiant, un nombre de valeurs (monovalué ou


multivalué), une description, une syntaxe et des règles de comparaison, un format ou une taille
limite, etc. On distingue les attributs « normaux », accessibles aux utilisateurs, qui décrivent
les objets, et les attributs « opérationnels », qui servent uniquement à l’administration des
données par le serveur (comme la date de dernière modification). Le tableau suivant donne
quelques exemples d’attributs prédéfinis.

Classe Description
name Nom.
cn Nom commun (common name).
© Dunod – Toute reproduction non autorisée est un délit.

sn Nom de famille (surname).


givenName Prénom.
o Organisation de rattachement.
ou Unité organisationnelle de rattachement.
userPassword Mot de passe.
telephoneNumber Numéro de téléphone.

Les classes d’objets forment une hiérarchie, au sommet de laquelle se trouve la classe
abstraite top, comme le montre la figure 18.3. Chaque classe hérite des attributs de sa
superclasse et en ajoute d’autres. Il existe également des relations d’héritage entre attributs.
Par exemple, dans le tableau précédent, cn et sn héritent de name.
200 Partie 3. Les couches hautes

Exemple
top

person organizationalUnit dcObject

organizationalPerson

inetOrgPerson

F IGURE 18.3 Une hiérarchie de classes LDAP

18.4.3 Le modèle de nommage


Les données de l’annuaire constituent un arbre, appelé DIT (Directory Information Tree).
Chaque nœud de cet arbre correspond à une entrée de l’annuaire (entry), caractérisée par
un ensemble de valeurs d’attributs. Les attributs sont déterminés par la classe d’objets de
l’entrée, qui figure dans l’attribut objectclass. L’attribut dn, pour distinguished name,
permet d’identifier de manière unique chaque entrée. C’est le chemin de l’arbre qui lie la
racine à l’entrée.
Un serveur LDAP peut gérer plusieurs racines de DIT.
Exemple

dc=iuta dc=univ-lorraine

ou=manager ou=professeur ou=etudiant

cn=suzette cn=toto cn=titi

distinguished name

F IGURE 18.4 Un arbre de données LDAP

Soit le DIT de la figure 18.4. L’entrée associée à toto, exprimée dans le langage LDIF
(LDAP Data Interchange Format) est la suivante :
# entrée de toto
dn: cn=toto, ou=professeur, dc=iuta, dc=univ-lorraine
objectclass: inetOrgPerson
cn: toto
mail: toto@iuta.univ-lorraine.fr
18 • Les applications de gestion d’annuaires 201

18.4.4 Le modèle fonctionnel


Le modèle fonctionnel décrit les opérations applicables aux données telles que :
– Les opérations d’interrogation avec la commande ldapsearch et des filtres.
Exemple : recherche de toutes les personnes du domaine iuta dont le nom commence
par la lettre d sur l’annuaire LDAP local
ldapsearch -h localhost -x -w mot_passe
(&(cn=d*) (dc=iuta))
^D

– Les opérations de mise à jour avec les commandes ldapadd, ladapdelete,


ldaprename, ldapmodify, etc.
Exemple : ajout d’une entrée sur l’annuaire LDAP local
ldapadd -h localhost -x -w mot_passe
dn: cn=pierre, ou=etudiant, dc=iuta, dc=univ-lorraine
objectclass: inetOrgPerson
cn: pierre
mail: pierre@iuta.univ-lorraine.fr
^D

18.4.5 Le protocole LDAP


Il définit les communications client/serveur mais aussi les communications serveur/serveur
pour la synchronisation des annuaires répliqués et les liaisons possibles entre annuaires
(referral service). Les échanges entre le client et le serveur sont synthétisés par la figure 18.5.

Client Serveur

bindRequest
(demande de connexion avec/sans authentication)
bindResponse
(réponse à la demande d'authentication)

searchRequest
(requête)
© Dunod – Toute reproduction non autorisée est un délit.

searchResEntry
(entrée)
searchResEntry
(entrée)
searchResEntry
(entrée)
searchResDone
(n des résultats)

unbindRequest
(demande de déconnexion)

(n de la connexion)

F IGURE 18.5 Le protocole client/serveur LDAP


202 Partie 3. Les couches hautes

Une seule connexion peut servir à transmettre plusieurs requêtes. Les données échangées sont
encodées avec la notation LBER (Lightweight Basic Encoding Rules).
Les communications client/serveur utilisent le port serveur 389/TCP. Secure LDAP,
c’est-à-dire LDAP sur SSL/TLS, utilise le port serveur 636/TCP.

18.4.6 Le modèle de sécurité


Le modèle de sécurité décrit les moyens de protéger les données des accès non autorisés. La
sécurité se décline à plusieurs niveaux : par l’authentification lors de la connexion au service,
par un modèle de contrôle d’accès aux données, par le chiffrement des transactions entre
clients et serveurs.

18.4.7 Le modèle de réplication


Le modèle de réplication définit différentes formes de cohérence entre réplications de
l’annuaire ainsi que deux architectures caractéristiques :
– Maître-esclave(s) (Single Master Replication) : le maître unique est le seul annuaire sur
lequel des modifications peuvent être opérées. Les mises à jour sont unidirectionnelles du
maître vers les esclaves. Les esclaves ne permettent que la lecture des données.
– Multimaîtres (Multiple Master Replication) : plusieurs maîtres coexistent sur le réseau.
Des modifications peuvent être réalisées sur tous ces annuaires maîtres, qui doivent se
synchroniser mutuellement.

18.4.8 La pratique de LDAP


a) La conception d’un annuaire
Il faut réutiliser au maximum les définitions existantes, classes et attributs. En effet, pour créer
des classes spécifiques, il faut obtenir un OID non encore utilisé auprès de l’IANA (Internet
Assigned Number Authority), qui les gère.
Une structuration classique des données (arbre DIT) comporte des composants de domaine à
la racine, puis des catégories d’objets (de personnes, de services, de matériels, de documents,
etc.) et enfin les objets eux-mêmes. La figure 18.4 en est un exemple représentatif.

b) Les outils
Il existe de nombreux logiciels serveur LDAP, comme le serveur libre Open LDAP ou Active
Directory de Microsoft.
Les clients LDAP prennent différentes formes :
– Des logiciels qui accèdent nativement aux annuaires LDAP, comme Microsoft Outlook ou
les navigateurs web qui comprennent les URI permettant d’effectuer des opérations sur
des annuaires.
Exemple
ldap://ldap.example.com:389/cn=dupont,ou=professeur,dc=iuta,
dc=univ-lorraine.
18 • Les applications de gestion d’annuaires 203

Cette requête retourne tous les attributs de l’entrée dont le distinguished name est spécifié
dans l’URI.
– Des logiciels qui accèdent aux annuaires LDAP via une passerelle, comme les passerelles
X.500 vers LDAP.
– Des applications développées spécifiquement avec les API LDAP.
– Des systèmes d’exploitation qui intègrent des annuaires LDAP, pour remplacer des
solutions plus anciennes, comme NIS.
© Dunod – Toute reproduction non autorisée est un délit.
204 Exercices

EXERCICES

Exercice 18.1. Mot de passe.


Quelle est la différence entre la commande passwd et la commande yppasswd ?

Exercice 18.2. Choix du protocole de transport.


Pour quelles raisons DNS utilise-t-il de préférence le protocole UDP plutôt que le protocole
TCP ?

Exercice 18.3. Le fichier /etc/hosts.


Le fichier /etc/hosts est interrogé avant de faire une requête DNS. Il contient des
lignes de correspondances adresse IP nom. Le contenu minimum est la correspondance
127.0.0.1 localhost.
Quel est l’effet d’une correspondance 127.0.0.1 www.xxx.com ?

Exercice 18.4. Langage LDIF.


À partir de l’entrée suivante, décrite dans le langage LDIF, donner :
a) Le modèle d’information (arbre des classes) partiel qui peut être déduit de cette entrée.
b) L’extrait du DIT (arbre de données) correspondant à cette entrée.
dn: cn=Jean Dupont, ou=ventes, dc=monorg, dc=fr
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
cn: Jean Dupont
mail: jd@monorg.fr
telephoneNumber: 06-71-21-00-06
preferredLanguage: fr
...
Chapitre 19

Les applications de configuration


automatique

19.1 LA CONFIGURATION AUTOMATIQUE


Tout système connecté à un réseau TCP/IP doit être configuré au minimum avec une adresse
IP, un masque de sous-réseau qui permet de distinguer l’adresse du sous-réseau et l’adresse
de l’hôte dans le sous-réseau (cf. paragraphe 5.2.2) et l’adresse d’un routeur.
D’autres éléments de configuration peuvent s’ajouter, comme l’adresse d’un serveur de noms
DNS, d’un serveur d’authentification, d’un serveur d’impression, etc.
Il est souvent préférable de remplacer la configuration manuelle des adresses IP par un
© Dunod – Toute reproduction non autorisée est un délit.

processus automatisé et centralisé. DHCP (Dynamic Host Configuration Protocol) est un


protocole qui répond à ces besoins, en réalisant une allocation dynamique des adresses IP
pour une durée de bail donnée, éventuellement infinie, ou avec des adresses IP fixes prévues
à l’avance. DHCP peut aussi fournir d’autres paramètres de configuration.

19.2 LE PROTOCOLE DHCP


Le processus comporte au minimum les échanges que montre la figure 19.1 entre client et
serveur(s) :
(1) Envoi d’un message DHCPDISCOVER en broadcast vers tous les serveurs à l’écoute sur
le port 67/UDP afin de demander une adresse. Le message peut éventuellement préciser
une adresse IP souhaitée, par exemple une adresse obtenue précédemment.
206 Partie 3. Les couches hautes

(2) Réception sur le port 68/UDP d’une ou plusieurs offres de la part de serveurs DHCP sous
la forme d’un message DHCPOFFER.
(3) Choix d’une offre et demande au serveur de l’attribution de cette adresse IP par un
message DHCPREQUEST en broadcast avec certaines données fournies par le serveur,
ce qui permet aux autres serveurs DHCP de retirer leur offre.
(4) Réception de la confirmation du serveur concerné par un message DHCPACK.

Client Serveur

broadcast DHCPDISCOVER

DHCPOFFER

broadcast DHCPREQUEST

DHCPACK

F IGURE 19.1 Le protocole client/serveur DHCP

D’autres échanges peuvent être nécessaires pour demander :


– des paramètres de configuration supplémentaires,
– le renouvellement du bail,
– la résiliation du bail avant son échéance normale, etc.

19.3 LA PRATIQUE DE DHCP

19.3.1 Le côté serveur

Le serveur DHCP de référence pour les systèmes de type Unix est ISC DHCPD. Les
différentes éditions de Microsoft Windows Server incluent également un serveur DHCP.

Lors de la configuration du serveur, on lui fournit une ou des plages d’adresses disjointes,
dans lesquelles il puise.

Les adresses hors plages peuvent faire l’objet d’affectations statiques. Il est possible
d’effectuer des réservations d’adresses IP pour des adresses physiques (adresse MAC)
données. C’est souvent le cas, par exemple, pour les routeurs et pour les imprimantes réseau.

Si on utilise plusieurs serveurs DHCP, sur un même sous-réseau, il faut que leurs plages
soient disjointes, car les serveurs DHCP n’échangent aucune information sur les baux qu’ils
octroient.
19 • Les applications de configuration automatique 207

19.3.2 Le côté client


Du côté client, les choses sont très simples si une carte réseau et le protocole TCP/IP sont
installés.
Sous Windows, il faut cocher Obtenir une adresse IP automatiquement dans
les propriétés du protocole Internet (v4 ou v6).
Sous Linux, dans /etc/network/interfaces, il faut remplacer les lignes :
iface eth0 inet static
address xxx.xxx.xx.x
netmask 255.255.255.0
broadcast xxx.xxx.xx.xxx

par :
iface eth0 inet dhcp
© Dunod – Toute reproduction non autorisée est un délit.
208 Exercices

EXERCICES

Exercice 19.1. QCM DHCP (répondre par OUI ou NON).


a) Un serveur DHCP peut toujours affecter la même adresse à un client donné.
b) Si un client redemande à chaque démarrage sa précédente adresse IP, il l’obtient toujours.
c) Un client peut recevoir plusieurs offres DHCP.
d) Un utilisateur peut affecter manuellement une adresse incluse dans la plage d’adresses du
serveur DHCP.

Exercice 19.2. Paquets DHCP.


Soient les paquets échangés suivants :
No. Time Source Destination Protocol Info - Transaction ID
1 0.000000 0.0.0.0 255.255.255.255 DHCP DHCP Discover 0x7e2c562a
2 0.017351 192.168.1.1 192.168.1.2 DHCP DHCP Offer 0x7e2c562a
3 0.017722 0.0.0.0 255.255.255.255 DHCP DHCP Request 0x7e2c562a
4 0.052182 192.168.1.1 192.168.1.2 DHCP DHCP ACK 0x7e2c562a

a) Quelle est l’adresse du serveur DHCP ?


b) Quelle est l’adresse proposée par le serveur ?
c) Initialement, le client connaît-il l’adresse du serveur ?
d) Au moment du paquet 4, le client connaît l’adresse du serveur, qui lui a envoyé un message,
mais ne l’utilise pas. Pourquoi ?

Exercice 19.3. Configuration DHCP.


Soit le fichier de configuration /etc/dhcpd.conf suivant :
subnet 192.168.16.0 netmask 255.255.255.0 {
range 192.168.16.66 192.168.16.126;
option routers 192.168.16.65;
option broadcast-address 192.168.16.255;
default-lease-time 86400; # 1 jour (en secondes)
max-lease-time 259200; # 3 jours
}
host unserveur {
hardware ethernet 08:00:2b:4c:29:32;
fixed-address 192.168.16.25;
}

a) Quelle est la signification de la partie host ?


b) Quelles données peuvent être fournies par le serveur DHCP ainsi configuré ?

Exercice 19.4. Relation DHCP DNS.


Le serveur DNS a-t-il connaissance des adresses IP attribuées dynamiquement par DHCP ?
Chapitre 20

Les applications de messagerie

20.1 LA DIVERSITÉ DES APPLICATIONS


Le terme messagerie recouvre des technologies et des usages différents, dont les plus
populaires sont le courrier électronique, la messagerie SMS sur téléphone portable (Short
Message Service) et la messagerie instantanée (IM pour Instant Messaging).
Le courrier électronique (ou e-mail, courriel) permet le transfert de messages textuels,
éventuellement accompagnés de fichiers joints, en mode asynchrone, c’est-à-dire sans
obligation pour l’émetteur et le destinataire d’être connectés en même temps. Il s’agit d’un
domaine mature, fortement normalisé par des standards ouverts, à fort impact dans tous les
aspects de la vie professionnelle et personnelle. Grâce à la normalisation des protocoles, il
© Dunod – Toute reproduction non autorisée est un délit.

suffit de créer un compte chez un fournisseur du service pour pouvoir communiquer avec
tous les utilisateurs du service dans le monde. Le courrier électronique est étudié en détail
dans la suite de ce chapitre.
La messagerie SMS permet d’envoyer des messages textuels courts en mode asynchrone
depuis un téléphone portable, donc en tout lieu et à tout instant. Des centres SMS (SMSC),
intégrés à l’infrastructure de téléphonie mobile (cf. paragraphe 5.3.4), sont chargés du
stockage et de la transmission vers le destinataire selon une politique de type best effort, sans
garantie absolue de livraison.
La messagerie instantanée sur ordinateur ou sur téléphone portable permet le transfert de
mboxmessages textuels ou multimédias en mode synchrone, c’est-à-dire de manière quasi
immédiate entre utilisateurs connectés simultanément. La fonction de notification de présence
indique quels utilisateurs du service sont en ligne et disposés à communiquer. Il s’agit d’un
domaine moins mature, caractérisé par un foisonnement de technologies propriétaires, des
210 Partie 3. Les couches hautes

évolutions rapides et des standards ouverts dont l’impact reste relativement limité. On peut
citer parmi ces standards :
– IRC (Internet Relay Chat), qui est le protocole ouvert de messagerie instantanée le plus
ancien. Les utilisateurs d’IRC sont identifiés par des pseudo(nyme)s (nicknames) et se
regroupent dans des salles (ou salons, canaux) de conversation (channels).
– SIMPLE (SIP for Instant Messaging and Presence Leveraging Extensions), qui applique
le protocole SIP (Session Initiation Protocol), bien connu en téléphonie sur IP, à l’envoi
de messages, à la notification de présence et à la gestion de conférences à plusieurs.
– XMPP (Extensible Messaging and Presence Protocol, anciennement Jabber), qui est un
ensemble de protocoles ouverts pour la messagerie instantanée, mais aussi la collaboration
en quasi temps réel et les échanges multimédias (voix sur IP, visioconférence, etc., avec le
protocole Jingle).
L’absence de norme unique conduit à un confinement des possibilités d’échange par
technologie et par réseau, contrairement au courrier électronique. On assiste en réaction à
l’émergence des solutions multiplateformes, multiprotocoles et multi-applications, comme
Pidgin (libre) ou Viber (propriétaire) par exemple.

20.2 LE COURRIER ÉLECTRONIQUE

20.2.1 Les principes généraux


Le courrier électronique s’organise autour de cinq éléments essentiels :
(1) Les agents utilisateurs (MUA pour Mail User Agent), ou clients de courrier électronique,
comme Microsoft Outlook, Mozilla Thunderbird, ou les applications clientes web
(webmails), qui servent à lire, composer et envoyer les courriers électroniques.
(2) Les serveurs SMTP, ou agents de transfert (MTA pour Mail Transfer Agent), qui servent
au transfert des messages électroniques depuis le serveur source jusqu’au serveur
destination. Les serveurs stockent les messages entrants, c’est-à-dire destinés à être lus
localement, dans les boîtes aux lettres des utilisateurs et les messages sortants, destinés à
être envoyés à d’autres serveurs, dans des files d’attente.
(3) Le protocole d’envoi et de transfert de mail, SMTP (Simple Mail Transfer Protocol).
(4) Les protocoles d’accès aux boîtes aux lettres après authentification, POP (Post Office
Protocol) et IMAP (Internet Message Access Protocol).
(5) Le standard MIME (pour Multipurpose Internet Mail Extensions), qui étend le format
du contenu des messages pour autoriser des codages autres que l’ASCII, des contenus
multiples et des contenus non textuels.

Les utilisateurs du service sont identifiés par des adresses mail comportant trois parties :
– un nom de boîte aux lettres, identifiant une personne ou un rôle (ex. : info, vente,
postmaster),
– un séparateur @ ou arobase, représentant le mot at (« chez » en anglais),
20 • Les applications de messagerie 211

– le nom de domaine de l’organisation hébergeant la boîte aux lettres, qui sera transformé
en adresse IP grâce au service DNS (cf. paragraphe 18.3).

Le processus d’acheminement du courrier est le suivant :


(1) Le client (MUA) de l’expéditeur envoie par SMTP le message à un serveur (MTA), en
général celui de son fournisseur d’accès.
(2) Ce premier serveur transfère avec SMTP le message vers le serveur qui héberge le
domaine du destinataire. Si le serveur destinataire est indisponible, le message est
mis en file d’attente, pour des essais successifs. Au-delà d’un certain nombre d’essais
infructueux ou d’une certaine durée, le message est rejeté. Un agent associé au serveur
destinataire, le MDA (Mail Delivery Agent), stocke le message dans la boîte aux lettres
du destinataire (un simple fichier, généralement /var/mail/login).
(3) Le destinataire, avec son client, demande au serveur les nouveaux messages en utilisant
un des protocoles d’accès (POP ou IMAP).
(4) Le serveur transmet ou indique les nouveaux messages au client du destinataire.
La figure 20.1 illustre cette organisation d’ensemble.

DNS

MTA
MTA
Internet

File
MDA
SMTP SMTP Boîtes 3
1 4
SMTP
MUA POP, MUA
IMAP
expediteur@domaine1.org 2 destinataire@domaine2.net

F IGURE 20.1 L’acheminement des courriers électroniques


© Dunod – Toute reproduction non autorisée est un délit.

20.2.2 Le protocole de transfert SMTP


Proposé dès 1982, SMTP a pour but de transporter les messages depuis le client (MUA) de
l’expéditeur jusqu’au serveur (MTA) du destinataire. SMTP est un protocole client/serveur
qui définit six requêtes (commandes) de base à l’intention des clients :
– HELO nom_ou_IP_émetteur, qui initie un échange avec le serveur,
– MAIL FROM: adresse_mail_expéditeur, qui définit l’émetteur
– RCPT TO: adresse_mail_destinataire, qui définit le destinataire
– DATA, qui marque le début du message,
– un point (.), qui marque la fin du message,
– QUIT, qui termine la connexion.
212 Partie 3. Les couches hautes

Les réponses du serveur, en cas de succès ou d’échec de la commande, prennent la forme


d’un numéro suivi d’un texte, comme :
250 Recipient ok.
503 Bad sequence of commands.
L’enchaînement des commandes est décrit par le diagramme états/transitions de la figure 20.2.

RCPT TO:

HELO MAIL FROM: RCPT TO:


1 2 3

MAIL FROM: DATA

.
5 4
QUIT

F IGURE 20.2 Les requêtes du client SMTP

Il est possible de simuler un envoi de courrier en utilisant telnet avec le port 25/TCP, qui
est le port d’écoute standard des serveurs SMTP.
Exemple
$telnet smtp.xxxx.xx 25
Connected to smtp.xxxx.xx.
220 smtp.xxxx.xx SMTP Ready
HELO yyyy.yyyy.yy
250-smtp.xxxx.xx
MAIL FROM: <auteur@yyyy.yy>
250 Sender ok
RCPT TO: <destinataire@xxxx.xx>
250 Recipient ok.
DATA
354 Enter mail, end with "." on a line by itself
Subject: Test

Corps du texte
.
250 Ok
QUIT
221 Closing connection
Connection closed by foreign host.

Remarque
Une extension compatible de SMTP, appelée ESMTP (Extended SMTP), offre des
commandes additionnelles, comme :
20 • Les applications de messagerie 213

– EHELO à la place de HELO,


– 8BITMIME pour le transfert de messages MIME (cf. paragraphe 20.2.4) en ASCII sur
8 bits,
– AUTH pour la mise en œuvre d’un mécanisme d’authentification, etc.

Si le serveur ne reconnaît pas EHELO, le client envoie la commande HELO et le dialogue se


poursuit en SMTP classique.

20.2.3 Les protocoles d’accès


On peut accéder à une boîte aux lettres comme on accède à n’importe quel fichier, par FTP,
par NFS, ou par HTTP comme les webmails. Mais le recours à un client et à un protocole
d’accès spécialisé est plus transparent et offre plus de possibilités.

a) Le protocole POP
POP est un protocole qui permet de récupérer en les transférant vers le client les nouveaux
courriers reçus qui sont a priori supprimés du serveur. Mais il est possible de demander
explicitement à en laisser une copie. Les boîtes aux lettres sont bloquées pendant les accès.
La version actuelle du protocole est la version 3 (POP3).
Les commandes principales sont les suivantes :
– USER nom, ce qui précède le @ dans l’adresse mail,
– PASS mot_de_passe, en clair,
– LIST, donne la liste des nouveaux messages avec un numéro suivi de la taille du message
en octets,
– RETR numéro_du_message, récupère le message indiqué,
– DELE numéro_du_message, efface le message indiqué de la boîte aux lettres.

Il est possible de simuler un retrait de courrier en utilisant telnet avec le port 110/TCP, qui
est le port d’écoute standard des serveurs POP.
Exemple
© Dunod – Toute reproduction non autorisée est un délit.

$ telnet xxx.xxxx.xx 110


S: +OK xxx.xxxx.xx POP3 service
C: USER dupont
S: +OK Name is a valid mailbox
C: PASS pppppp
S: +OK Maildrop ready
C: LIST
S: +OK 2 messages (430 bytes)
S: 1 230
S: 2 200
S: .
C: RETR 1
S: +OK 230 bytes
S: < le serveur POP3 envoie le message complet >
214 Partie 3. Les couches hautes

S: .
C: DELE 1
S: +OK message 1 deleted
C: RETR 2
S: +OK 200 bytes
S: < le serveur POP3 envoie le message complet >
S: .
C: QUIT
S: +OK xxx.xxxx.xx POP3 server signing off

b) Le protocole IMAP
Avec le protocole IMAP, les courriers restent sur le serveur. Il n’y a plus transfert mais
synchronisation entre le serveur et le client. Ce dernier affiche l’état courant de la boîte aux
lettres : seuls les en-têtes des messages sont transférés dans un premier temps, ce qui permet
un affichage beaucoup plus rapide des nouveaux messages arrivés.
Comme les messages restent sur le serveur, il est possible d’accéder au courrier depuis
plusieurs clients et webmails. Une sauvegarde régulière des boîtes aux lettres sur le serveur
est bien entendu indispensable.
IMAP offre de nombreuses possibilités, comme :
– les accès simultanés aux boîtes aux lettres,
– les boîtes aux lettres multiples,
– la gestion distante des messages sur le serveur : création de dossiers, tris, recherches, etc.

La version actuelle du protocole est la version 4 (IMAP4). Le port 143/TCP est utilisé en
standard du côté serveur.

20.2.4 Les autres concepts


a) Le format des messages

À la base, un message est un simple texte structuré, comportant un en-tête, une ligne vide et
un corps, encodé en ASCII sur 7 bits. L’en-tête comporte trois lignes, étiquetées par From:,
To: et Subject:.
Exemple
From: durand@caramel.org
To: dupont@univ-lorraine.fr
Subject: ceci est le titre du message

Dans le corps, les lignes se terminent par les codes CR+LF.


MIME (Multipurpose Internet Mail Extensions) permet l’envoi d’autres sortes de données,
comme des textes dans d’autres encodages, du HTML ou des données binaires (images, sons,
vidéos, exécutables). MIME ajoute aux trois étiquettes d’en-tête classiques des étiquettes
supplémentaires pour le type de contenu du message (Content-Type:) et son encodage
de transfert (Content-Transfer-Encoding:).
20 • Les applications de messagerie 215

Exemples
– message en UNICODE UTF8 transformé pour le transport en ASCII par la méthode
quoted-printable.
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

– message comprenant un texte ASCII et un fichier attaché.


From: xxxx.xxxxx.xx
To: yyyy.yyyy.yy
Subject: message avec fichier joint
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="---separation---"

This is a multipart message in MIME format.

---separation---
Content-Type: text/plain

Le message en ASCII.

---separation---
Content-Type: text/plain;
Content-Disposition: attachment;
filename="test.txt"

Le texte de l’attachement.

---separation---

b) Les listes de diffusion


Une liste de diffusion (ou mailing list) est une utilisation particulière du courrier électronique
qui permet de diffuser des messages vers un ensemble d’utilisateurs inscrits. Selon leur
© Dunod – Toute reproduction non autorisée est un délit.

paramétrage, les utilisateurs peuvent ou non répondre aux messages (liste de discussions
versus liste d’annonces).
Un logiciel serveur spécifique, qui s’interface aux serveurs SMTP, permet la gestion des listes
de diffusion (GNU Mailman, Sympa, Majordomo, etc.).

c) La sécurisation
® La sécurisation des transmissions
Avec SMTP, POP3 et IMAP4 le transport des données, y compris les identifiants et mots
de passe, se fait en clair. Il existe des solutions d’encapsulation de ces protocoles dans des
tunnels SSL/TLS permettant l’authentification et le chiffrement : SMTPS, qui utilise le port
465/TCP ; POP3S, qui utilise le port 995/TCP ; et IMAPS, qui utilise le port 993/TCP.
216 Partie 3. Les couches hautes

Une autre solution, STARTTLS, étend les protocoles SMTP, POP3 et IMAP4, ce qui permet
de conserver les ports habituels. Une requête particulière du client permet de passer en mode
SSL/TLS, si c’est possible, une fois la connexion établie. Dans cette solution plus simple
à mettre en œuvre, le fait que les échanges commencent en clair avant la mise en place du
chiffrement peut constituer un point de vulnérabilité.

® La sécurisation des clients


La sécurité côté client repose sur l’usage des normes S/MIME ou PGP/MIME. Elles
permettent de signer et de chiffrer le contenu des courriers électroniques.

® La sécurisation des serveurs


Elle concerne en premier la mise en place de protections visant le trafic reçu par le serveur :
un antivirus, qui détecte les logiciels malicieux, et un filtre antispam, qui détecte les courriers
indésirables (spams, ou pourriels).
Elle concerne également la protection du serveur lui-même. Par exemple, la séparation du
MTA, nécessairement accessible depuis Internet et donc placé dans la DMZ, du MDA, placé
au contraire dans le réseau interne protégé par le ou les pare-feu (cf. paragraphe 5.3.2).

20.3 LA PRATIQUE DU COURRIER ÉLECTRONIQUE


20.3.1 Les serveurs
On trouve une large gamme de serveurs SMTP (MTA), soit libres, comme Sendmail, Qmail,
Exim ou Postfix, soit propriétaires, comme Microsoft Exchange Server ou Novell Groupwise.
Plusieurs MDA peuvent leur être associés comme Procmail, Dovecot, Maildrop, etc.
La mise en place d’un serveur de courrier sécurisé, capable de monter en charge (redondance,
équilibrage de charges) et doté de toutes les fonctionnalités indispensables comme
l’élimination des courriers indésirables, la détection des codes malicieux, la traçabilité
des échanges (logs, archivage), la sauvegarde, etc., n’est pas une tâche triviale.

20.3.2 Les clients


Du côté client, les logiciels clients, comme Microsoft Outlook ou Mozilla Thunderbird, et les
webmails se partagent le marché. En ligne de commande, la commande mail, rudimentaire,
ne traite pas le format MIME au contraire de mailx. Ces commandes peuvent être utiles
dans des scripts.
Exemple
echo "le texte du message" | mail -s "le sujet" xxx@xxxx.xxx
La mise en place et la configuration des clients ne requièrent que la fourniture de quelques
paramètres simples, concernant le serveur sortant (SMTP) et le serveur entrant (POP
ou IMAP), comme le montre la fenêtre de configuration de Mozilla Thunderbird de
la figure 20.3. Certains champs peuvent même être automatiquement renseignés par
Thunderbird sur la base de l’adresse électronique fournie.
20 • Les applications de messagerie 217

F IGURE 20.3 Configuration d’un client de courrier électronique


© Dunod – Toute reproduction non autorisée est un délit.
218 Exercices

EXERCICES

Exercice 20.1. Utilisateur nomade.


Un utilisateur nomade doit-il privilégier le protocole POP ou le protocole IMAP pour lire son
courrier électronique ?

Exercice 20.2. L’en-tête mystère.


À quoi peut servir l’en-tête if-modified-since suivi d’une date que l’on peut trouver
dans les requêtes HTTP ?

Exercice 20.3. Utilité de l’en-tête Content-type et du type MIME.


À quoi sert l’en-tête Content-type suivi du type MIME dans les pages retournées par
HTTP ?

Exercice 20.4. Les agents du courrier électronique.


Associer les phrases suivantes aux différents composants d’un système de courrier
électronique (MTA, agent de transport ; MDA, agent de livraison ; MUA, agent utilisateur) :
(1) Dépose les messages dans les boîtes aux lettres.
(2) Reçoit les messages selon le protocole SMTP.
(3) Récupère les messages à l’aide du protocole POP ou IMAP.
(4) Reçoit les courriers provenant du client.
(5) Peut prendre la forme d’une application web.
(6) Signale un problème de disque plein.

Exercice 20.5. Traitement des messages par l’agent de distribution.


L’agent de distribution du courrier électronique (MDA) peut être amené à traiter les messages
entrants. Donner un ou plusieurs exemples.
Chapitre 21

Le web

21.1 LES CONSTITUANTS DE BASE DU WEB


Le World Wide Web (web, WWW, W3, « toile ») correspond à un gigantesque ensemble de
ressources interconnectées par des liens hypertextes, accessibles sur des centaines de millions
de serveurs connectés par Internet à l’aide d’un logiciel client universel, le navigateur web.
Sa création un peu fortuite, par Tim Berners-Lee pour favoriser le collaboration d’une
communauté de physiciens du CERN géographiquement distribués, remonte à la période
1989-1991. Son développement est ensuite extraordinairement rapide ainsi que son impact
sur nos sociétés :
– Mosaic, le premier navigateur grand public apparaît en 1993,
– Altavista, le premier moteur de recherche largement utilisé suit en 1995,
© Dunod – Toute reproduction non autorisée est un délit.

– le terme web 2.0 s’impose en 2004 pour signifier le passage du contrôle de ce qui est publié
des organisations aux individus (réseaux sociaux, sites de partage, blogs, tags, etc.),
– le web mobile explose avec les smartphones à partir de 2007,
– en attendant le développement annoncé du web sémantique et du web des objets.

Les quatre constituants de base du web sont :


(1) un espace de noms global pour la désignation et la liaison des ressources, les URL/URI,
(2) un protocole client/serveur pour le transfert des ressources, HTTP (HyperText Transfer
Protocol),
(3) un langage de balisage pour la description des ressources de type document hypertexte,
HTML (Hypertext Markup Language),
220 Partie 3. Les couches hautes

(4) des langages de script s’exécutant du côté client ou du côté serveur.


Les paragraphes qui suivent présentent ces composants essentiels.

21.2 LA DÉSIGNATION DES RESSOURCES


Pour accéder aux ressources du web, il est nécessaire de disposer d’une technique
d’identification capable de préciser :
– ce à quoi on veut accéder (quoi ?),
– sur quel serveur sur Internet (où ?),
– en utilisant quel mode d’accès (comment ?).

C’est le rôle des URL (Uniform Resource Locator) et de leur sur-ensemble, les URI
(Universal Resource Identifier).

21.2.1 Les URL


Une URL, aussi qualifiée parfois d’« adresse web », est une chaîne de caractères précisant
tous les éléments nécessaires pour accéder à une ressource du web.
La forme habituelle identifie une ressource par son protocole d’accès, suivi de ://, un nom
de domaine et le chemin d’accès à la ressource sur le serveur. Dans ce chemin, le caractère
initial / indique la racine de l’espace de données du web, définie par la configuration du
serveur, qui ne doit pas être confondue avec la racine du système de fichiers.
Exemple
Dans https://fr.wikipedia.org/wiki/Uniform_Resource_Locator, la
partie protocole est https pour l’accès sécurisé à un site web, le nom de domaine est
fr.wikipedia.org et le chemin de la ressource est /wiki/Uniform_Resource
_Locator pour accéder à la page sur les URL de l’encyclopédie Wikipédia en français.
Le protocole le plus fréquent est bien entendu http ou https, pour l’accès à un serveur
web. Mais on en trouve d’autres, comme file pour accéder à un fichier local, ftp pour
accéder par FTP à un fichier distant, mailto pour communiquer avec une adresse de courrier
électronique, etc.
Exemple
L’URL ftp://ftp.rfc-editor.org/in-notes/rfc1866.txt permet de
récupérer par FTP la spécification (RFC pour Request For Comments) de HTML datant
de novembre 1995.
Les URL peuvent contenir d’autres informations, comme :
– un nom et un mot de passe, par exemple pour accéder à un compte FTP privé,
– un numéro de port, qui suit le nom de domaine dont il est séparé par un :,
– un signet dans une page web, précédé d’un #,
– des arguments pour les programmes s’exécutant sur le serveur, précédés d’un ?, etc.
21 • Le web 221

Exemple
Dans l’URL ftp://dupont:abcd@ftp.machin.org:21/doc.pdf, dupont est
le nom du compte FTP, abcd est son mot de passe et le port 21 est utilisé sur le serveur
ftp.machin.org.

21.2.2 Les URI


Un URI est un identifiant d’une ressource concrète ou abstraite dont il existe deux types.
Les URL, présentés au paragraphe précédent, et les URN (Uniform Resource Name), qui
identifient la ressource par un nom dans un espace de noms, sans préjuger d’une localisation
ou d’un mode d’accès.
Exemples
urn:ISBN:978-2-10-071686-9 identifie, par un numéro dans l’espace des numéros
ISBN, un autre excellent ouvrage [Lon14] de l’auteur de ces lignes. . .
urn:ietf:rfc:1866 identifie la RFC 1866 de l’IETF, portant sur HTML.

21.3 LE PROTOCOLE HTTP


21.3.1 Description générale
Un scénario typique d’interaction client/serveur HTTP est le suivant :
(1) L’utilisateur consulte une page d’un site avec son client, un navigateur web, et clique sur
un lien hypertexte contenant une URL.
(2) Le client analyse l’URL du lien et demande au service DNS l’adresse IP du serveur.
(3) Le client se connecte au serveur web, par défaut sur le port 80/TCP.
(4) Le client demande une ressource par une requête HTTP GET.
(5) Le serveur web est en permanence à l’écoute des requêtes des clients, qui peuvent être
nombreux, sur ce port. Si la requête est valide et que le client est autorisé à accéder à la
ressource, le serveur répond par l’envoi de la ressource, par exemple une page HTML
statique. Le serveur peut aussi exécuter un programme localement pour générer une page
© Dunod – Toute reproduction non autorisée est un délit.

HTML dynamique.
(6) Le serveur demande la fin de la connexion, qui est effective dès que la réponse est livrée.
(7) Le client analyse la nature de la réponse. S’il s’agit d’une page HTML contenant des
objets qui résident sur le serveur, par exemple des images, le processus recommence pour
chaque objet avec une nouvelle connexion.
Ce processus correspond au fonctionnement du protocole initial HTTP 1.0, qui ne propose
que des connexions non persistantes, autorisant le transfert d’un seul objet.
La version 1.1 permet d’utiliser aussi des connexions persistantes (keep-alive) permettant au
cours d’une session le transfert de plusieurs objets, soit séquentiellement, soit simultanément
(pipeline HTTP). La figure 21.1 compare l’efficacité de ces modes de connexion en nombre
d’aller-retours de données (RTT pour Round Trip Time) dans l’hypothèse d’une page incluant
deux objets, comme par exemple des images.
222 Partie 3. Les couches hautes

client serveur client serveur client serveur


connexion connexion connexion
RTT RTT RTT
requête page requête page requête page
RTT RTT
RTT transfert page transfert page transfert page

connexion requête objet1 requête objet1, objet2


RTT RTT
transfert RTT transfert
objet1 objet1,objet2
requête objet1
requête objet2
RTT transfert RTT
transfert
objet1
objet2
connexion
RTT

requête objet2
RTT transfert
objet2

temps

HTTP 1.0 HTTP 1.1


non persistante
persistante persistante
sans pipeline avec pipeline

F IGURE 21.1 Les modes de connexion HTTP

La version 2.0 (HTTP/2), spécifiée en 2015, améliore encore les performances avec le
multiplexage des flux et la compression des en-têtes. Contrairement au pipeline HTTP 1.1,
où les réponses respectent l’ordre des requêtes, en multiplexage HTTP 2.0 les réponses sont
retournées dès que possible, ce qui diminue le temps de chargement global des objets.

21.3.2 La liste des requêtes HTTP

Les principales requêtes HTTP sont les suivantes :


– GET URL : demande au serveur spécifié dans l’URL de retourner la page indiquée dans
l’URL.
– HEAD URL : demande au serveur spécifié dans l’URL de retourner seulement l’en-tête de
la page indiquée dans l’URL, contenant des données comme le titre, la date, etc.
– PUT URL page : envoie une page au serveur spécifié dans l’URL pour la rendre
disponible sur ce serveur à l’URL indiquée. Remplace le contenu actuel de l’URL s’il
existe.
– POST URL page : comme PUT, mais intègre les nouvelles données à celles existant déjà
à l’URL. La nature de cette intégration dépend du type des données.
– DELETE URL : supprime la page figurant à l’URL indiqué.
21 • Le web 223

La requête GET est de très loin la plus fréquente. La requête POST suit, car elle permet de
faire exécuter un script sur le serveur en passant les arguments dans la requête plutôt que dans
l’URL, comme avec la requête GET.
Les requêtes ne sont satisfaites que si les droits du client demandeur et les protections des
ressources le permettent.

21.3.3 Le format des échanges


® Le format des requêtes
Une requête comporte un en-tête obligatoire et un contenu facultatif séparés par une ligne
vide. Si des champs de l’en-tête sont absents, une valeur par défaut est prise.
Les en-têtes sont textuels, en codage ASCII, ce qui permet de les simuler avec la commande
telnet vers le port 80/TCP.
Exemple
GET /repertoire/page.html HTTP/1.1
Host: www.xxxxx.xx
Connection: close
User-agent: Mozilla/4.0
Accept-language: fr
<ligne vide = fin en-tête>
<ligne vide = contenu vide>

HOST est le seul champ d’en-tête de requête obligatoire depuis HTTP 1.1. Il spécifie le nom
de domaine demandé, car plusieurs hôtes virtuels peuvent être hébergés par le même serveur.
Le champ Connection indique si la connexion TCP doit être persistante (keep-alive)
ou non (close).
Les champs commençant par Accept permettent au serveur de satisfaire les souhaits du
client pour la réponse en termes de type MIME, de compression, de langue (« négociation de
contenu »).

® Le format des réponses


© Dunod – Toute reproduction non autorisée est un délit.

Une réponse à une requête comporte un code, succès ou type d’erreur, et éventuellement un
résultat séparés par une ligne vide. Par exemple, un GET a pour résultat le contenu d’une
page. Le standard MIME est utilisé pour les données non textuelles du résultat.
Exemple
Dans la réponse à la requête GET, le code 200 OK correspond à un succès.
HTTP/1.1 200 OK
Connection: close
Date: Fri, 11 Mar 2005 11:04:43 GMT
Server: Apache/1.3.0 (Unix)
Last-modified: Wed, 1 Apr 2015 14:33:45 GMT
Content-length: 7370
Content-type: text/html
<ligne vide = fin en-tête>
224 Partie 3. Les couches hautes

<les données : la page HTML page.html>

En cas d’erreur, le message débute par un code d’erreur.


HTTP/1.1 400 Bad Request
Date: Wed, 1 Apr 2015 14:33:51 GMT
Server: Apache/2.0.52 (Gentoo/Linux) PHP/4.3.10
Content-Length: 330
Connection: close
Content-Type: text/html; charset=iso-8859-1
<ligne vide = fin en-tête>
<les données : le message d’erreur en HTML à afficher sur le navigateur>

Les codes d’erreur les plus fréquents sont :


– 400 : requête non comprise par le serveur,
– 403 : opération interdite,
– 404 : ressource non trouvée.

21.4 LE LANGAGE HTML


Ce paragraphe présente les principes et composants de base du langage HTML. Un
enseignement dédié demeure indispensable pour en acquérir la maîtrise effective.

21.4.1 Les principes du langage


HTML est un langage de balisage (markup) permettant d’écrire des documents hypertextes,
c’est-à-dire qui contiennent des liens internes ou vers d’autres documents du web. La dernière
version du langage est la version 5 [W3C14].
HTML permet de structurer le contenu du document à l’aide de balises et de séparer le
contenu de la présentation. On peut donc créer des documents interopérables avec des
équipements très variés en termes de capacités d’affichage.
Les balises vont en général par paires et encadrent un contenu. Elles portent un nom et
possèdent éventuellement des attributs. À la balise de début <nom attribut="valeur">
correspond la balise de fin </nom>. Une balise sans contenu peut s’abréger en une seule
balise <nom />.
Un document HTML possède la structure arborescente suivante :
<html>
<head>
<title> Titre du document </title>
<!-- autres métadonnées de l’en-tête (ceci est un commentaire) -->
</head>
<body>
<!-- balises du corps -->
</body>
</html>
21 • Le web 225

À l’origine, HTML comportait des balises et attributs de mise en page. Depuis le début
des années 2000, la présentation doit être spécifiée indépendamment de la description du
contenu, dans les feuilles de style en cascade CSS (Cascading Style Sheets). L’expression
« en cascade » signifie que les feuilles sont combinables, avec des systèmes de priorités. La
dernière version des CSS est la version 3.
Les avantages des CSS sont nombreux :
– le code HTML est moins complexe,
– la structure et la présentation peuvent être gérées dans des fichiers séparés,
– la conception d’un document peut se faire initialement sans se soucier de la présentation,
– la présentation peut être uniformisée, par exemple sur tout un site,
– un même document peut donner le choix entre plusieurs feuilles de style : visualisation
versus impression ou visualisation par des navigateurs ayant des capacités d’affichage
différentes.

La définition d’un élément du style de présentation se fait à l’aide de règles comportant le


plus souvent :
– un nom de balise, définissant l’élément concerné,
– une déclaration entre accolades, comportant des couples propriété=valeur, comme
font-size=120%, font-style=bold, margin-top=25px, color=red, etc.

21.4.2 Les composants de base


Un document HTML peut contenir :
– des titres, de <h1> Le plus grand </h1> à <h6> Le plus petit </h6>,
– des éléments de texte, comme <p> Un paragraphe </p> ou un retour à la ligne
<br />,
– des images <img src="URL de l’image" />,
– des liens hypertextes <a href="URL de la cible"> Le lien </a>,
– des listes <ul> <li> Item 1 </li> <li> Item 2 </li> ... </ul> et
© Dunod – Toute reproduction non autorisée est un délit.

des listes ordonnées avec <ol> à la place de <ul>,


– des tableaux,
– des formulaires de saisie, liés à une requête HTTP GET ou POST et à un script qui traitera
sur le serveur les valeurs saisies,
– des scripts s’exécutant localement,
– des zones du document que l’on souhaite particulariser dans les feuilles de style,
– avec HTML 5, des objets multimédias (sons, vidéos), des canvas pour dessiner,
– etc.
226 Partie 3. Les couches hautes

Exemple
a) Le fichier HTML
<html>
<head>
<title>Test d’une feuille CSS </title>
<link href="feuille.css" rel="stylesheet">
</head>
<body>
<h1>Titre 1</h1>
<h2>Titre 2</h2>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat. <br/> <br/>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat.</p>
</body>
</html>

b) La feuille de style associée (feuille.css)


/* Règle 1: s’applique à <body> et ses descendants */
body {
font-family: Arial;
font-size: 14px; /* en pixels (px) */
margin: 5px 50px 5px 50px; /* haut droite bas gauche */
background-color: #eee; /* gris clair */
}
/* Règle 2 : s’applique à tous les titres <h1> ... <h6> */
h1, h2, h3, h4, h5, h6 {
font-weight: bold;
text-align: center;
}
/* Règle 3: s’applique à <h2> (l’emporte sur la règle précédente) */
h2 {
font-family: "Times New Roman";
text-align:left;
}
/* Règle 4: s’applique aux paragraphes <p> */
p {
text-align: justify;
font-style: italic;
}

c) L’affichage dans le navigateur


On note bien sur la figure 21.2, les différentes fontes, l’italique, les marges, l’indentation ou
non, etc.
21 • Le web 227

F IGURE 21.2 L’affichage dans le navigateur

21.5 LA PRATIQUE DU WEB


21.5.1 Les clients
Il existe des navigateurs web (browsers) pour toutes les catégories de matériels et tous les
systèmes d’exploitation sur ces matériels. Ils comprennent en général un client HTTP(S),
un moteur de rendu HTML/CSS, des moteurs de scripts, comme JavaScript ou VBScript,
et un gestionnaire d’extensions (plugins). Les extensions permettent de lire des fichiers
multimédias, comme les plugins Flash Player, Microsoft Silverlight, Apple QuickTime, Real
Player, Windows Media Player, VLC, d’exécuter des programmes écrits dans des langages
particuliers, comme les applets Java, d’afficher des formats de fichier spéciaux, comme
Adobe Reader pour le format PDF, etc.
Les différences entre les navigateurs les plus connus, comme Mozilla Firefox, Google
Chrome, Opera, Apple Safari et Microsoft Internet Explorer, tiennent à leur caractère libre
ou propriétaire et à des détails ergonomiques.

21.5.2 Les serveurs HTTP


Les serveurs HTTP traditionnels comme Apache ou Microsoft IIS (Internet Information
Services) sont aujourd’hui concurrencés par les serveurs HTTP légers, comme nginx et
© Dunod – Toute reproduction non autorisée est un délit.

lighttpd, qui ont été précurseurs dans l’optimisation de la consommation des ressources
système. Ces serveurs légers ont remis en cause l’architecture ancienne des serveurs, où
chaque requête était traitée par un processus du système d’exploitation, laissant à ce dernier
la charge de les ordonnancer (cf. paragraphe 14.3).

21.5.3 La complexification des usages et des architectures


® La notion de session
Les formes d’interaction entre le client et le serveur ont sensiblement évolué par rapport au
schéma initial d’une suite de requêtes indépendantes les unes des autres. Il a fallu tout d’abord
implanter le concept de session, c’est-à-dire conserver une mémoire (un état) des données
utilisateur afin de faciliter la navigation sur un site et permettre certaines fonctionnalités,
comme la gestion d’un panier d’achat.
228 Partie 3. Les couches hautes

Un des mécanismes possibles, les cookies, schématisé par la figure 21.3, permet au serveur de
stocker cet état chez le client. Un cookie fabriqué lors du traitement d’une requête est renvoyé
par le client lors des requêtes suivantes vers le même serveur.
Ce stockage de données personnelles peut être exploité à d’autres fins. D’autres entreprises,
présentes sur le serveur par exemple via des bandeaux publicitaires, peuvent déposer leurs
propres cookies (« cookies tiers ») pour pister les habitudes des utilisateurs du web, ce qui
peut être considéré comme une atteinte à la vie privée. Les clients peuvent donc restreindre
ou interdire l’usage des cookies.

client HTTP serveur


requête 1
cookie traiitement
réponse 1 cré
éation cookie

requête n + cookie

stockage
cookie

F IGURE 21.3 Le mécanisme des cookies

® Les proxys web


Une deuxième forme de complexification est la mise en place d’un système intermédiaire
entre le client et le serveur, appelé mandataire ou proxy. Un proxy web, partagé par plusieurs
clients, peut être chargé de rendre différents services d’une manière transparente :
– amélioration de l’efficacité, en conservant des résultats dans un cache,
– sécurité et confidentialité, par filtrage, authentification et anonymisation,
– transformation des protocoles, formats et langues,
– passerelle vers d’autres services (FTP, SMTP, etc.).

® Les serveurs répliqués


Une troisième forme de complexification est la mise en place de serveurs HTTP répliqués et
éventuellement leur utilisation conjointe, pour assurer une répartition de la charge. Ces points
ont déjà été évoqués précédemment (cf. paragraphe 4.2.4).

® Des pages statiques aux applications web distribuées


Une autre évolution fondamentale résulte de la complexification des traitements effectués du
côté serveur :
– simple fourniture de pages HTML statiques,
– construction dynamique de pages HTML à partir de bases de données, par exemple via un
interprète PHP ou un conteneur de servlets/JSP, comme Tomcat,
21 • Le web 229

– utilisation des mêmes technologies pour exécuter des applications web de toute nature,
comme des blogs, des systèmes de gestion de contenu, des applications de commerce
électronique, etc.,
– exécution d’applications web distribuées et à base de composants réutilisables qui
s’exécutent dans un serveur d’applications, comme GlassFish, qui associe un serveur
HTTP, un conteneur web, un conteneur d’EJB et des services pour les applications
distribuées.
Le navigateur web est devenu une sorte d’interface utilisateur universelle et le serveur
HTTP, un frontal vers un ou des serveurs d’applications et un ou des serveurs de données
distribués sur Internet. Ce type d’architecture sera détaillé dans le chapitre suivant, consa-
cré aux applications distribuées et aux intergiciels (middlewares).

® Les infrastructures complémentaires


Enfin, l’infrastructure de base du web, navigateur et serveur HTTP, n’est pas toujours
suffisante, comme par exemple dans le cas du streaming de vidéos. Ce type d’application
nécessite de compléter le serveur HTTP par un serveur de streaming et le navigateur par un
plugin de lecture spécialisé (cf. figure 21.4).

Navigateur HTTP métachier Serveur HTTP


web

métachier
RTSP métachier + cdes
Lecteur de RTP ux Serveur de
médias streaming
RTCP statistiques

Client

F IGURE 21.4 Le streaming de vidéos


© Dunod – Toute reproduction non autorisée est un délit.

Le serveur HTTP fournit uniquement un métafichier qui donne les URL des données audio
et vidéo, avec les encodages disponibles. Le serveur de streaming utilise des protocoles
spécifiques :
– RTP (Real-time Transport Protocol), pour le transport au-dessus d’UDP des données vidéo
et audio, avec séquencement et horodatage des paquets, identification de la source des
paquets, etc.
– RTCP (Real-time Transport Control Protocol), pour l’envoi périodique de rapports à tous
les participants, avec des statistiques sur le nombre de paquets envoyés et perdus, la gigue
(variation du délai de transmission), les temps d’aller/retour (RTT), etc.
– RTSP (Real Time Streaming Protocol), pour le contrôle de la vidéo avec les commandes
avancer, reculer, mettre en pause, etc.
230 Partie 3. Les couches hautes

Toute cette infrastructure additionnelle permet d’assurer :


– la mise en mémoire tampon du flux du côté du client, pour compenser la gigue,
– l’adaptation dynamique aux variations de débit, par des encodages à multiples débits du
côté serveur,
– la diffusion unicast, avec un flux par client, ou multicast, avec un flux partagé par tous les
clients, par exemple pour la diffusion d’images en direct.

21.5.4 Les autres logiciels


De très nombreux logiciels et applications en ligne gravitent autour du web.
On peut citer parmi beaucoup d’autres :
– Les éditeurs de pages et les éditeurs de sites, textuels ou visuels (WYSIWYG, pour What
You See Is What You Get), comme Adobe Dreamweaver.
– Les moteurs de recherche, comme Google.
– Les CMS (Content Management System, ou système de gestion de contenu), qui gèrent la
création et la publication en ligne de documents, éventuellement de façon collaborative.
On peut classer les CMS en fonction du type de contenu qu’ils gèrent :
• les blogs, pour la publication d’articles ou posts personnels, comme Wordpress et
Dotclear,
• les wikis, pour la publication de pages produites en collaboration, comme MediaWiki
et PmWiki,
• les forums de discussion, comme phpBB,
• les portails multifonctions, comme Joomla et Drupal,
• les CMS spécialisés pour l’e-commerce, l’enseignement, le travail de groupe
(groupware), etc.
– Les réseaux sociaux en ligne, généralistes comme Facebook, ou plus spécialisés, comme
LinkedIn.
– Les plateformes de microblogage, comme Twitter.
– Les plateformes de partage vidéo, comme YouTube.
– Et toutes les autres applications du web 2.0.

Facebook est l’exemple d’une architecture web, à l’origine de type LAMP (Linux, Apache,
MySQL, PHP), poussée jusqu’aux limites les plus extrêmes, avec des dizaines de milliers de
serveurs pour servir 1015 pages par mois et 1,5 million de photos par seconde. Pour parvenir
à ce niveau de performance, Facebook utilise énormément de couches logicielles, surtout du
logiciel libre, externe ou développé en interne, comme par exemple :
– Memcached, pour créer une mémoire cache distribuée qui accélère l’accès aux données
MySQL,
– HipHop, pour convertir le PHP en C++ compilable pour plus de performance,
21 • Le web 231

– BigPipe, pour paralléliser dans un pipeline la génération des pages dynamiques,


– Haystack, pour le stockage et l’accès haute performance aux photos,
– Scribe, pour gérer l’authentification à l’échelle de Facebook, etc.

Tous les logiciels libres externes, y compris Linux, sont optimisés pour répondre aux besoins
très particuliers de Facebook.
© Dunod – Toute reproduction non autorisée est un délit.
232 Exercices

EXERCICES

Exercice 21.1. Des URL.


Quelles sont les significations des URL suivantes ?
a) http://www.exemple.com:8888/chemin/page1.html#enbas
b) ftp://pierre:azerty@ftp.monorg.fr/pub/truc.jpg
c) mailto:pierre.machin@courrier.net?subject=Salutations&paul.
chose@courrier.net

Exercice 21.2. Des protocoles.


Un utilisateur accède via son navigateur à un document sur le web à une URL donnée. Ce
document comprend une image GIF, hébergée sur le même serveur.
Quels protocoles de la couche application et de la couche transport sont mis en œuvre pour
cet accès ?

Exercice 21.3. Comptage de RTT (Round Trip Time).


L’accès à une page web nécessite l’accès à trois serveurs DNS et le chargement de quatre
images depuis le même serveur web. Si on nomme RTTi la durée d’obtention de la réponse
du ième serveur DNS et RTTw la durée d’obtention de la réponse du serveur web, quel est le
temps total d’obtention de la page en supposant que les temps de transmission des objets sont
négligeables,
a) dans le cas d’HTTP 1.0 ?
b) dans le cas d’HTTP 1.1 en connexion persistante sans pipelining ?
c) dans le cas d’HTTP 1.1 en connexion persistante avec pipelining ?

Exercice 21.4. Requête HTPP HEAD.


HTTP HEAD est similaire à HTTP GET, sauf que le serveur ne retourne que l’en-tête de la
ressource et pas la ressource elle-même.
Donner des exemples d’utilisation possible de cette requête.

Exercice 21.5. Personnalisation.


Quelles techniques sont utilisables pour personnaliser la ressource retournée par un serveur
HTTP, comme la langue utilisée (français, anglais, allemand, etc.) ?
Chapitre 22

La couche distribution – Les intergiciels

22.1 LES APPLICATIONS DISTRIBUÉES


Les applications distribuées sont fondées sur la coopération d’un ensemble de constituants
logiciels s’exécutant sur plusieurs machines en réseau. Ces applications occupent aujourd’hui
une place essentielle pour plusieurs raisons :
– les organisations de toute nature sont de plus en plus distribuées géographiquement, en
raison de la mondialisation des échanges,
– de nombreux services, distribués par nature, deviennent incontournables, comme le
commerce électronique, les systèmes pair à pair de diffusion de contenus, les grilles de
© Dunod – Toute reproduction non autorisée est un délit.

calcul, etc.,
– plus globalement, l’informatique, les télécommunications et les médias convergent et
s’interpénètrent de plus en plus.

Comme le montre le modèle de référence des systèmes informatiques de la figure 2.3, la


couche distribution se situe entre la couche système/réseau et la couche des applications
distribuées. Elle a pour buts de :
– fournir une interface de programmation (API) de « haut niveau » aux applications
distribuées, par opposition aux interfaces de « bas niveau » de la couche système/réseau,
– masquer l’hétérogénéité de l’infrastructure en réseau sous-jacente en termes de machines,
de systèmes d’exploitation, de réseaux, éventuellement de langages de programmation,
– rendre la répartition des traitements et données transparente aux applications distribuées,
234 Partie 3. Les couches hautes

– fournir des services d’usage courant pour construire les applications distribuées, comme
le nommage, la communication, les transactions, la persistance, la sécurisation, etc.

On peut voir cette couche comme le système d’exploitation de la « supermachine » constituée


par le système distribué. Mais, contrairement aux systèmes d’exploitation classiques, elle ne
concerne pas les simples utilisateurs mais uniquement les développeurs.

22.2 LES INTERGICIELS OU MIDDLEWARES


Les noms d’intergiciel et de middleware évoquent le rôle d’intermédiaire que jouent ces
logiciels au sein de la couche « du milieu », entre la couche des applications distribuées
et celle du système/réseau.
La classification habituelle des intergiciels se fonde sur la nature des interactions entre
constituants de l’application distribuée : appel de procédures ou de méthodes à distance
(communication synchrone), envoi de messages (communication asynchrone) et, à un niveau
plus global, systèmes de composants distribués avec de multiples formes d’interactions, et
services web distribués. Les quatre catégories étudiées dans la suite sont donc :
(1) Les intergiciels à appels de procédures ou de méthodes distantes : XML-RPC et les
différentes implantations de l’API Java RMI (Remote Method Invocation), comme celle
de Sun, Jeremie et Ninja RMI.
(2) Les intergiciels à messages (MOM pour Message Oriented Middleware) : en particulier,
les différentes implantations de l’API Java JMS (Java Message Service), comme celle de
Sun, Open JMS, Joram et Microsoft MSMQ.
(3) Les intergiciels « génériques » à composants distribués : en particulier, les serveurs
d’applications JEE (Java Enterprise Edition), comme Oracle GlassFish, JOnAS, JBoss
et IBM Websphere Application Server.
(4) Les intergiciels pour services web distribués : comme Apache Axis et Axis 2.

22.3 LES INTERGICIELS À APPELS DISTANTS


22.3.1 La problématique
Un exemple typique est un programme qui délègue à un serveur de calcul distant la réalisation
d’un calcul complexe. On est face à une structure de type client/serveur avec un échange
synchrone : le programme client appelle le calcul et attend les résultats avant de poursuivre
son exécution. Le programme serveur attend les appels, qui peuvent provenir de multiples
clients, les sélectionne pour les servir, séquentiellement ou parallèlement, comme le montre
la figure 22.1.
Dans les cas simples, les résultats ne dépendent que des paramètres fournis par le client dans
son appel, ce qui signifie des traitements successifs indépendants. C’est en général le cas des
serveurs de calculs. Dans les cas plus complexes, les appels ne sont pas indépendants, car le
service distant utilise des données persistantes. C’est par exemple le cas quand on manipule
des objets distants, au sens de la programmation objet, car beaucoup d’objets ont un état qui
22 • La couche distribution – Les intergiciels 235

Client Serveur

sélection
le d'attente
t
appel (paramètres)
attente traitement
résultttats réponse

F IGURE 22.1 L’appel distant.

évolue au fil des appels de leurs méthodes. Dans ce cas, le serveur doit gérer des contextes
d’exécution par client et respecter l’ordre des appels.
L’objectif d’un intergiciel à appels distants est de retrouver dans un contexte distribué la
forme et l’effet, autrement dit la syntaxe et la sémantique, d’un appel de procédure ou de
méthode local. Ce n’est pas facile car les différences avec les appels locaux sont nombreuses :
– les deux programmes sont dans des espaces d’exécution différents et peuvent utiliser des
représentations des données différentes,
– les pannes du côté client et du côté serveur sont indépendantes,
– les pertes de messages, appels ou résultats, sont possibles,
– les temps de réponse sont longs et variables en fonction de la charge du réseau et du
serveur.

Idéalement, un intergiciel à appels distants devrait cacher la localisation du service, fournir


un contexte commun, cacher les différences de représentation et cacher au maximum le
traitement des défaillances.

22.3.2 Les concepts mis en œuvre


Le principe de base consiste à intercaler entre le programme client et le programme serveur
© Dunod – Toute reproduction non autorisée est un délit.

deux procédures, une du côté client, le stub (traduit en souche, talon, agent ou proxy client),
et une du côté serveur, le skeleton (souche, talon, agent ou proxy serveur), comme le montre
la figure 22.2. En général, stub et skeleton sont générés automatiquement. Le processus est le
suivant :
(1) Le programme client appelle le stub par un appel de procédure local.
(2) Le stub traduit les paramètres de l’appel dans un format de représentation des données
portable, les insère dans un message (marshalling) et envoie ce message en utilisant la
bibliothèque RPC fournie par l’intergiciel.
(3) Les fonctions de bas niveau de cette bibliothèque se chargent de la connexion et de
la transmission au niveau réseau, après avoir récupéré d’une certaine manière les
paramètres de la connexion.
(4) Côté serveur, la requête est récupérée et passée au skeleton.
236 Partie 3. Les couches hautes

Client Serveur
Flot apparent
appel
Programme Programme
retour
1 10 6 5

Stub Skeleton
2 9 7 4
Flot réel
Bibliothèque Bibliothèque
RPC RPC
8
3

F IGURE 22.2 Le principe de RPC

(5) Le skeleton décompose le message, traduit les paramètres du format portable au format
local (unmarshalling) et appelle par un appel local la procédure cible du serveur.
(6) La procédure cible calcule les résultats et les retourne au skeleton, qui effectue le
marshalling du résultat.
(7) Le skeleton envoie le message de réponse en utilisant la bibliothèque RPC.
(8) Les fonctions de bas niveau assurent la connexion et la transmission du message de
réponse.
(9) Côté client, la réponse est récupérée et passée au stub.
(10) Le stub effectue l’unmarshalling et retourne les valeurs au programme appelant, qui les
attend.

Selon les intergiciels beaucoup d’éléments de la mise en œuvre peuvent différer, comme :
– Le format portable de représentation des données : il existe des standards, comme XDR
(eXternal Data Representation) ou ASN.1 (Abstract Syntax Notation One) et des solutions
plus spécifiques.
– La récupération des paramètres de la connexion : ils peuvent être définis de manière
statique ou via l’utilisation d’un protocole de publication et de recherche des services
dans un annuaire. Le skeleton enregistre initialement les paramètres de connexion et le ou
les services offerts dans l’annuaire, et le stub client recherche dans l’annuaire le service
voulu et récupère les paramètres de connexion associés.
– La génération du stub et du skeleton : la solution la plus courante est d’utiliser une
description de l’interface du service avec ses paramètres d’entrée et de sortie dans
un langage de description d’interface (IDL pour Interface Description Language).
Un compilateur spécialisé permet de générer le stub, le skeleton et les procédures de
(un)marshalling, à partir de cette description.
– La résolution des défaillances : un délai d’attente maximal de la réponse est défini avant
un envoi de message par le client ou par le serveur. Au terme de ce délai, l’envoi est
22 • La couche distribution – Les intergiciels 237

renouvelé grâce à un stockage du message. Mais la répétition de l’envoi d’une requête peut
entraîner une double exécution de la procédure du serveur, ce qui peut être problématique
dans certains cas et doit pouvoir être interdit. Par ailleurs, une défaillance du serveur
pendant l’exécution de sa procédure peut nécessiter un mécanisme transactionnel pour
repartir à l’état initial en annulant les effets de la première exécution avortée. De même,
une défaillance du client peut créer des tâches serveur orphelines, qu’il faut détruire.

À noter, enfin, qu’en RPC les paramètres ne peuvent être passés que par valeur 1 ou par
copie et restauration 2. Le passage par adresse n’a pas de sens avec des espaces d’exécution
distincts. La similitude entre appels de procédure local et distant n’est donc pas parfaite, car
il faudrait transmettre tout l’espace d’exécution, ce qui n’est pas réalisable en pratique.

22.4 LES INTERGICIELS À MESSAGES


22.4.1 La problématique
Soit une application de supervision d’un parc de machines en réseau. L’administrateur
souhaite disposer d’une vision globale de l’ensemble des équipements, d’un journal des
événements (log) et de statistiques. Dans une approche client/serveur, l’application de
supervision doit interroger un à un tous les équipements en attendant leurs réponses, comme
le montre la figure 22.3.
C’est une solution statique, nécessitant la connaissance de tous les équipements par
l’application, plutôt inefficace.

requête/réponse supervision

BD
© Dunod – Toute reproduction non autorisée est un délit.

Equipements

F IGURE 22.3 Supervison en client/serveur

1. La valeur du paramètre effectif est copiée dans le paramètre formel à l’appel.


2. La valeur du paramètre effectif est copiée dans le paramètre formel à l’appel et la valeur du paramètre formel
est copiée dans le paramètre effectif au retour, ce qui n’est pas équivalent à un passage par adresse, où la valeur est
la même à tout instant.
238 Partie 3. Les couches hautes

Dans une approche à envoi de messages, les rôles de producteur et de consommateur


de données sont inversés. Les composants administrés émettent des messages en cas
d’événement ainsi que des messages périodiques. Un ou plusieurs processus cycliques,
ou démons, mettent à jour l’état du système à partir des messages reçus. L’administrateur
interroge la base quand il le souhaite, comme le montre la figure 22.4.
C’est une solution dynamique, où l’application de supervision n’a pas besoin de connaître
les équipements. Les communications sont asynchrones. Le système est plus souple et plus
efficace.

application de
notication supervision

BD

Equipements

F IGURE 22.4 Supervison par envoi de messages

22.4.2 Les concepts mis en œuvre


Les clients sont les utilisateurs de l’intergiciel, qui émettent ou reçoivent des messages. Le
ou les fournisseurs (providers) ou courtiers (brokers) sont les composants de l’intergiciel
qui jouent le rôle d’intermédiaire en stockant et en routant les messages. Contrairement aux
échanges de messages de bas niveau par les sockets, les intergiciels à messages permettent
d’assurer un certain niveau de qualité de service (QoS) : priorités, date de remise, etc.
On peut avoir un unique fournisseur central, plusieurs fournisseurs qui se routent les messages
et même un fournisseur par client. Les messages transportent les données applicatives par
exemple avec des types MIME (texte, son, image, etc.). La figure 22.5 schématise cette
organisation dans le cas d’un fournisseur unique.
L’avantage de ces intergiciels à messages réside dans leur simplicité conceptuelle et dans le
faible couplage qui existe entre les composants qui communiquent :
– pas de référence directe entre clients grâce aux fournisseurs intermédiaires,
– pas de dépendance d’interface,
22 • La couche distribution – Les intergiciels 239

Client message message Client


- Stockage
- Routage
- Qualité de
service

Client Fournisseur Client

F IGURE 22.5 Intergiciel à messages

– pas de dépendance temporelle, au sens où l’émetteur n’est pas interrompu si le destinataire


est indisponible. La communication est asynchrone (non bloquante).

Les intergiciels à messages proposent deux modèles de communication : le modèle point


à point, ou communication « 1 vers 1 », et le modèle publier/souscrire, ou communication
« plusieurs vers plusieurs ».

a) Le modèle point à point


Le modèle point à point est schématisé par la figure 22.6.

envoyer consommer

Client ... Client


message le message

Fournisseur
F IGURE 22.6 Le modèle point à point
© Dunod – Toute reproduction non autorisée est un délit.

Chaque message est stocké dans une file (queue) au niveau du fournisseur jusqu’à ce que le
destinataire le consomme. Ce modèle assure la non-dépendance temporelle entre émetteur et
destinataire du message. Le destinataire peut ne pas être actif au moment de l’envoi.

b) Le modèle publier/souscrire
Le modèle publier/souscrire est schématisé par la figure 22.7.
Les messages sont organisés en sujets (topics). Les destinataires doivent souscrire (s’abonner)
aux topics qui les intéressent. Le fournisseur gère la distribution des messages à tous les
souscripteurs du moment, en mode « push ». Les souscripteurs doivent être actifs pour
recevoir les messages. Les émetteurs ne connaissent pas les destinataires.
Il existe aussi un mode « pull », où les clients vont chercher les messages dans les topics.
240 Partie 3. Les couches hautes

publier(mess, suj)) Fournisseur


Client souscrire(suj) Client

Client Client
délivrer(mess)
Topics

F IGURE 22.7 Le modèle publier/souscrire en mode push

22.5 LES INTERGICIELS À COMPOSANTS DISTRIBUÉS

22.5.1 La problématique

Les intergiciels à composants distribués « génériques », appelés aussi serveurs d’applications,


cherchent à faciliter en priorité :
– le développement, le déploiement, l’évolution des applications d’entreprise distribuées,
– la réutilisation des composants permettant de les construire,
– l’interopérabilité avec d’autres applications.

Développer une application d’entreprise distribuée est une tâche complexe qui nécessite de
prendre en compte énormément d’aspects :
– Le traitement des données, c’est-à-dire la mise en œuvre des règles de gestion et de la
logique applicative (logique métier).
– L’accès aux données persistantes, essentiellement dans des bases de données.
– La présentation des données et l’interaction avec les utilisateurs.
Remarque
La séparation de ces trois aspects, présentation, logique métier et accès aux données
correspond à ce qu’on appelle les architectures logiques trois tiers (de l’anglais tier, qui
signifie « étage » ou « niveau »).
– La distribution des traitements et des données, avec ses multiples facettes qui ont été
énumérées précédemment, comme les communications synchrones et asynchrones, le
nommage, la gestion des transactions, etc.
Remarque
Le caractère distribué de la logique applicative et des données persistantes conduit à ce
qu’on appelle les architectures logiques n-tiers.
– L’interfaçage avec des applications externes, qu’il s’agisse d’applications existantes dans
le patrimoine de l’entreprise ou d’applications complémentaires, comme le courrier
électronique par exemple.
22 • La couche distribution – Les intergiciels 241

– La sûreté, c’est-à-dire la protection contre les défaillances provoquées par des causes
techniques ou fortuites.
– La sécurité, c’est-à-dire la protection contre les défaillances provoquées par des actions
malintentionnées.

Le paragraphe suivant présente les principaux éléments de réponse apportés par les
intergiciels à composants distribués.

22.5.2 Les concepts mis en œuvre


Les intergiciels à composants distribués s’appuient sur un ensemble de principes et concepts
généraux, synthétisés par la figure 22.8 :

Serveur d'applications Serveur d'applications distant

conneecteur
e
synchrone Conteneur
Conteneur

Composant Composants
(code métier)
Présentation Conteneur
(code web) conne
ecteur
e
async
chrone
c

Services
(code technique) Services

F IGURE 22.8 Les intergiciels à composants distribués

(1) La séparation du code lié à la présentation du code interne de l’application. Le code lié
à la présentation exploite en général les technologies du web.
© Dunod – Toute reproduction non autorisée est un délit.

(2) Dans le code interne, la séparation du code applicatif (métier) du code « technique »,
c’est-à-dire du code lié à tous les aspects cités au paragraphe précédent, comme la
distribution, l’accès aux bases de données, la sécurité, etc.
(3) Le code « technique » est pour l’essentiel rendu disponible sous la forme de services,
accessibles via une interface. Le lien code applicatif/service est exprimé le plus possible
de manière déclarative.
(4) Le code applicatif est structuré pour l’essentiel en composants métiers réutilisables. Un
composant est une unité de composition, définie contractuellement par une interface
exprimée selon un certain standard, appelé architecture de composants.
(5) Les composants métier sont généralement inclus dans des conteneurs (container) qui
se chargent de faire le lien avec les services « techniques » à partir d’indications
de configuration. Par exemple, les appels d’une méthode d’un composant déclarée
242 Partie 3. Les couches hautes

comme « transactionnelle » sont interceptés par le conteneur, qui démarre une nouvelle
transaction et la termine à la fin de l’exécution de la méthode, sans que le programmeur
soit obligé de la programmer explicitement. Beaucoup de services sont rendus ainsi de
façon quasi transparente.
(6) Les composants, les services et les serveurs sont standardisés pour permettre
réutilisation et interopérabilité. C’est le cas de JEE d’Oracle, .NET de Microsoft
et CORBA de l’OMG (Object Management Group).

22.5.3 L’exemple de JEE

JEE (Java Enterprise Edition, anciennement J2EE) est une spécification pour la création
d’applications d’entreprise réparties en Java, développée par Sun puis par Oracle. Il
existe de nombreux serveurs d’applications conformes à cette spécification, en particulier
l’implantation de référence d’Oracle, le serveur libre GlassFish.

La figure 22.9 schématise les éléments d’une application au sein d’un serveur JEE. Les
principaux composants sont explicité dans les paragraphes qui suivent.

Présentation Application (métier) Persistance

Client
Services
lourd
JDBC
EJB
Servlets JPA
BD
Client JNDI
léger JSP
JTA Annuaire
(navigateur)
EJB JMS
Conteneur web
(serveur HTTP) Conteneur EJB JCA
Application
Serveurs JEE
Services
EJB ...

Conteneur EJB

F IGURE 22.9 JEE


22 • La couche distribution – Les intergiciels 243

a) La couche métier : les EJB


EJB (Enterprise Java Beans) est le standard d’architecture des composants logiciels côté
serveur de JEE. Les EJB exposent une interface, définissant l’ensemble des opérations
accessibles localement ou à distance, et sont configurables de manière déclarative par
des annotations Java ou des fichiers de configuration. Les EJB servent à coder la logique
applicative. Ils peuvent être distribués sur plusieurs serveurs et peuvent évoluer dans un
contexte transactionnel.
Les EJB s’exécutent dans un conteneur d’EJB. Les serveurs JEE offrent de nombreux services
« techniques » aux conteneurs EJB qu’ils hébergent, dont les EJB bénéficient :
– nommage/annuaire, avec JNDI (Java Naming and Directory Interface),
– connexion aux bases de données, avec JDBC (Java Data Base Connectivity),
– communication synchrone entre objets distribués, avec RMI (Remote Method Invocation),
– communication asynchrone par messages, avec JMS (Java Messaging Service),
– authentification et autorisations, avec JAAS (Java Authentification and Authorization
Service),
– persistance par correspondance objets-relations, avec JPA (Java Persistence API),
– gestion des transactions, avec JTA (Java Transaction API),
– courrier électronique avec JavaMail,
– utilisation des services web via XML, avec JAX-WS (Java API for XML Web Services),
– connecteurs vers les applications externes (progiciels ou ERP, application du patrimoine
en COBOL, etc.), avec JCA (Java Connector Architecture).

Les EJB n’offrent pas d’interface utilisateur. La couche présentation est séparée de la couche
applicative.

b) La couche présentation : les technologies web


La couche présentation est souvent implantée à l’aide des technologies web, via un navigateur
(client « léger ») et un serveur HTTP. Mais on peut aussi trouver des clients « lourds », écrits
© Dunod – Toute reproduction non autorisée est un délit.

en Java, qui peuvent communiquer via divers protocoles, comme RMI, JMS ou SOAP.
Dans le cas le plus courant, les servlets, des classes Java spécifiques, créent les pages HTML
dynamiques en réaction aux requêtes HTTP GET ou PUT reçues par le serveur HTTP. Les
servlets s’exécutent dans un conteneur web (ou conteneur de servlets) adossé au serveur
HTTP. Les servlets peuvent appeler les méthodes des EJB pour les traitements applicatifs.
Les servlets peuvent être générées à partir de pages JSP (Java Server Pages). Les JSP sont
des pages qui mixent du HTML et du code Java. À leur premier appel via leur URL, elles
sont compilées par le moteur JSP en un servlet qui est exécuté.
Le framework JSF (JavaServer Faces), construit au-dessus des servlets et des JSP, permet
de construire des interfaces web à l’aide de composants d’interface de base (zones de saisie,
boutons, cases à cocher, etc.) ou de composants « riches », exploitant les technologies
javascript/jquery/ajax, comme des tableaux triables et filtrables, des onglets, des galeries
244 Partie 3. Les couches hautes

d’images, des calendriers, des éditeurs, etc. Les bibliothèques de composants « riches » se
nomment PrimeFaces, RichFaces ou ICEfaces.

22.6 LES INTERGICIELS POUR LES SERVICES WEB


22.6.1 Présentation de l’approche
Pour le W3C (World Wide Web Consortium) qui les normalise, les services web sont des
logiciels identifiés par des URI et dont les interfaces publiques et les propriétés (protocole
d’accès, format des données) sont décrites en XML. Cette définition peut être découverte
dans des annuaires par d’autres logiciels. Ces autres logiciels peuvent ensuite interagir avec
le service web comme décrit dans sa définition, en utilisant des messages XML transportés
par des protocoles Internet, comme HTTP, SMTP, FTP [W3C04].
Une autre définition, beaucoup plus restrictive mais qui correspond aux implantations les plus
courantes, postule qu’un service web est un logiciel accessible sur Internet par l’intermédiaire
de messages XML transmis par HTTP.
L’objectif visé est la construction d’applications distribuées en intégrant différents services
offerts indépendamment sur Internet. Par exemple, la construction d’une application de
gestion des déplacements du personnel d’une entreprise peut intégrer les services web de
compagnies aériennes, de chaînes d’hôtels et de loueurs de voitures. Comme exemple plus
concret, on peut citer les Google Maps Web Services, pour calculer des itinéraires, distances,
altitudes, etc. Ils sont appelés par l’URL https://maps.googleapis.com/maps/
api/service/output?parameters où service est le nom du service, output
est le type du format de la réponse (xml ou json) et parameters sont les paramètres
passés au service. Les clients sont des logiciels capables d’analyser et d’exploiter les données
retournées par ces services.

22.6.2 Mise en œuvre des services web


a) Le langage XML
XML signifie eXtensible Markup Language, c’est-à-dire langage à balises extensible. C’est
un langage de description de documents, sous une forme textuelle lisible autant par les
humains que par les machines. Il est devenu un standard incontournable aussi bien pour
le stockage de documents que pour la transmission de données entre applications. Ses
caractéristiques essentielles sont les suivantes :
– La séparation stricte, plus stricte qu’en HTML, entre contenu et présentation. XML n’est
concerné que par le contenu du document. La présentation relève exclusivement des
feuilles de style.
– La structuration forte du contenu.
Exemple
Une adresse postale écrite en HTML :
Pierre Dupont <br/> 10 allée des noix <br/> 75015 PARIS.
La même adresse postale telle qu’elle peut être écrite en XML :
22 • La couche distribution – Les intergiciels 245

<addresse>
<nompersonne>
<prenom>Pierre</prenom>
<nomfamille>Dupont</nomfamille>
</nompersonne>
<rue>
<norue>10</norue>
<nomrue>allée des noix</nomrue>
</rue>
<codepostal>75015</codepostal>
<ville>PARIS</ville>
</addresse>

– L’extensibilité du langage. Les balises ne sont pas prédéfinies comme en HTML, mais
choisies par l’auteur du document. La syntaxe correspondante peut être spécifiée dans
un modèle de document exprimable dans différents langages : DTD (Document Type
Description), schéma XML, etc. Un document qui possède un modèle et se conforme à
lui est dit « valide ». Un document qui suit simplement les règles définies par XML est dit
« bien formé ».
– L’outillage associé. Il existe des outils pour vérifier qu’un document est bien formé et
valide. On trouve aussi de nombreux outils génériques ou spécialisés pour exploiter
et transformer des documents XML, comme XSLT (eXtensible Stylesheet Language
Transformations) par exemple. Par contre, n’importe quel traitement de texte permet
d’éditer un document XML.
– XML est libre et indépendant des plateformes logicielles et matérielles. Les caractères
spéciaux sont traités nativement. L’en-tête du document définit le codage utilisé.

b) Les acteurs impliqués


Dans son acception la plus large, les services web mettent en jeu trois acteurs : le fournisseur,
l’annuaire et le client, comme le montre la figure 22.10.
© Dunod – Toute reproduction non autorisée est un délit.

Annuaire

3. Découverte du service 2. Publication du service

Client 4. Utilisation du service Fournisseur

1. Description
du service

F IGURE 22.10 Les acteurs des services web

Le scenario typique de fonctionnement est le suivant :


246 Partie 3. Les couches hautes

(1) Le fournisseur de service décrit le service qu’il offre.


(2) Le fournisseur publie cette description du service dans un annuaire.
(3) L’annuaire répond à la recherche de service émise par un client.
(4) Le client utilise le service offert par le fournisseur en se conformant aux modalités
techniques indiquées dans la description reçue de l’annuaire.

c) Les composants
L’approche comporte trois composants standardisés principaux (WSDL, UDDI et SOAP) et
un grand nombre de composants additionnels.

® WSDL
WSDL (Web Services Description Language) est une grammaire XML permettant de décrire
les services web. La description spécifie en particulier les méthodes invocables, les types des
données envoyées et reçues, le protocole de communication utilisé et l’adresse du service. La
structure d’une description WSDL est la suivante :
<definitions name=...>
<types>
définitions de types de données
</types>
<message name=...>
définition d’un message avec ses champs typés
<part name=... type=... />
</message>
<portType name=...>
définition d’un ensemble d’opérations
<operation name=...>
messages en entrée et en sortie
</operation>
</portType>
<binding name=... type=...>
un protocole et un format de données associé à un type de port
</binding>
<service name=...>
une collection de ports
<port name=...>
une adresse réseau et un binding
</port>
</service>
</definitions>

® UDDI
UDDI (Universal Data Description Interface) est un annuaire de services web fondé sur
XML. L’annuaire comporte quatre types de structures de données XML principales dont les
instances sont interconnectées comme le montre la figure 22.11.
22 • La couche distribution – Les intergiciels 247

Business
Entity
tModel

... Business
Service

...
Binding Template

F IGURE 22.11 Un annuaire UDDI

La structure business entity décrit une organisation qui offre des services. La structure
businessService décrit une famille de services. La structure bindingTemplate décrit la
manière d’invoquer un service particulier. La structure tModel pour technical model donne
la spécification technique d’un service.
Les différentes parties des descriptions WSDL sont réparties dans les instances des structures
de données UDDI businessService, bindingTemplate et tModel.

® SOAP
SOAP (Simple Object Access Protocol) est un protocole d’appel de méthodes distantes
exploitant XML. Les messages d’appel et de retour, encapsulés dans une enveloppe,
comportent un en-tête facultatif indépendant de l’application (header) et un corps lié à
l’application (body). Le transport des messages se fait le plus souvent à l’aide du protocole
HTTP mais peut aussi se faire par un autre protocole, comme SMTP.
Exemple
La requête appelle la méthode add avec deux opérandes entiers 4 et 3. La réponse
addResponse retourne l’entier 7.
<?xml version="1.0" encoding="UTF-8"?>
© Dunod – Toute reproduction non autorisée est un délit.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<add soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<op1 xsi:type="xsd:int">4</op1>
<op2 xsi:type="xsd:int">3</op2>
</add>
</soapenv:Body>
</soapenv:Envelope>
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
248 Partie 3. Les couches hautes

<soapenv:Body>
<addResponse soapenv:encodingStyle=
"http://schemas.xmlsoap.org/soap/encoding/">
<addReturn xsi:type="xsd:int">7</addReturn>
</addResponse>
</soapenv:Body>
</soapenv:Envelope>

® Les composants additionnels

Il existe de nombreux composants additionnels pour assurer par exemple :


– la sécurisation des échanges (identité de la source, intégrité du contenu),
– la fiabilité des échanges (bonne transmission des messages),
– la combinaison ou « orchestration » des services web.

d) L’implantation des services web


Les langages de programmation offrent des API pour implanter les services web. C’est le
cas de Java avec JAX-WS (Java API for XML Web Services). Dans ce cadre, les services
web sont développés avec des outils de génération soit à partir de la description WSDL,
avec production de classes Java à compléter (dite approche top/down), soit à partir de la
classe Java annotée qui implante le service (dite approche bottom/up). Les services web sont
implantés sur un serveur d’applications JEE selon le schéma de la figure 22.12. Il existe
d’autres approches, comme Apache Axis, Axis2 ou CXF, qui ne nécessitent pas un serveur
JEE mais un simple conteneur de servlets associé à un serveur HTTP, comme Apache Tomcat
par exemple.

WSDL

génération top/down

Client
Java Serveur
SOAP
HTTP Servlet JAX-WS
Autre
client

Serveur génération bottom/up


d'applications
Classe Java
annotée

F IGURE 22.12 Une implantation possible des services web


22 • La couche distribution – Les intergiciels 249

22.7 LES TENDANCES NOUVELLES


22.7.1 La problématique des données massives
Le volume des données produites dans le monde croît de manière exponentielle, avec
approximativement un doublement chaque année. Les expressions « tsunami numérique » et
« données massives » ou « big data » sont utilisées pour rendre compte de ce phénomène qui
se caractérise par les trois V :
– Volume : au-delà des gigaoctets (109 ), on parle de téraoctets (1012 ), pétaoctets (1015 ),
exaoctets (1018 ), zettaoctets (1021 ). . . Les outils traditionnels de stockage et d’accès,
comme les bases de données relationnelles avec le langage de requête SQL et les outils
documentaires, sont inadaptés à ces ordres de grandeur.
– Variété : les données sont très hétérogènes et mêlent photos, vidéos, pages web, textes,
données numériques, etc.
– Vitesse : d’énormes flux de données générés par le web, les réseaux sociaux, l’Internet des
objets, la géolocalisation (GPS), les caméras de surveillance, etc., doivent être analysés
quasi en temps réel.

De nouveaux intergiciels et de nouvelles méthodes de traitement sont nécessaires pour les


entreprises qui ont à traiter ces énormes quantités de données, en particulier les grands acteurs
de l’Internet comme Google, Facebook, Amazon, Microsoft, Yahoo, Twitter, LinkedIn et bien
d’autres.
C’est le cas, par exemple, de la méthode MapReduce, développée par Google et implantée
dans l’intergiciel libre Apache Hadoop.

22.7.2 La méthode MapReduce


La méthode MapReduce rend parallélisable l’exécution d’une tâche sur autant de machines
que nécessaire et permet donc de traiter des volumes de données aussi larges que nécessaire
en ajoutant des machines à un cluster, par exemple sur le cloud. Il faut bien entendu que la
tâche soit parallélisable selon les quatre étapes du processus suivant :
(1) L’opération split, qui découpe les données d’entrée en sous-ensembles.
© Dunod – Toute reproduction non autorisée est un délit.

(2) L’opération map, une fonction exécutée parallèlement sur chacun de ces sous-ensembles,
qui génère une série de couples (clé, valeur).
(3) L’opération shuffle, qui regroupe tous les couples ayant la même clé.
(4) L’opération reduce, une fonction exécutée parallèlement sur chacun des groupes associés
à une clé, qui produit une série de couples (clé, valeur) correspondant au résultat voulu.

22.7.3 Un exemple d’application de MapReduce


À partir des données d’un réseau social regroupant des millions d’utilisateurs, on veut
générer, pour chaque couple d’utilisateurs, la liste des amis qu’ils ont en commun [Ren14].
Une requête SQL classique serait beaucoup trop lourde et conduirait au blocage du système
tout entier. La solution consiste à exécuter périodiquement le programme de type MapReduce
qui suit sur une copie des données.
250 Partie 3. Les couches hautes

Les données sont de la forme : utilisateur => liste de ses amis.


Exemple
A => B, C, D
B => A, C, D, E
C => A, B, D, E
D => A, B, C, E
E => B, C, D
Il est simple de fragmenter les données d’entrée (opération split), par exemple en autant de
sous-ensembles que d’utilisateurs.
L’opération parallèle map associe, à chaque couple d’utilisateurs, les amis de la liste. La clé
est notée "A-B", en respectant l’ordre alphabétique.
Exemple
A => B, C, D donne ("A-B", "B C D"), ("A-C", "B C D"), ("A-D",
"B C D")
B => A, C, D, E donne ("A-B", "A C D E"), ("B-C"; "A C D E"),
("B-D"; "A C D E"), ("B-E"; "A C D E")
C => A, B, D, E donne ("A-C"; "A B D E"), ("B-C"; "A B D E"),
("C-D"; "A B D E"), ("C-E"; "A B D E")
D => A, B, C, E donne ("A-D"; "A B C E"), ("B-D"; "A B C E"),
("C-D"; "A B C E"), ("D-E"; "A B C E")
E => B, C, D donne ("B-E", "B C D"), ("C-E", "B C D"), ("D-E",
"B C D")
L’opération shuffle récupère les listes de même clé.
Exemple
("A-B", {"B C D", "A C D E"})
("A-C", {"B C D", "A B D E"})
("A-D", {"B C D", "A B C E"})
("B-C", {"A C D E", "A B D E"})
("B-D", {"A C D E", "A B C E"})
("B-E", {"A C D E", "B C D"}}
("C-D", {"A B D E", "A B C E"})
("C-E", {"A B D E", "B C D"})
("D-E", {"A B C E", "B C D"})
L’opération parallèle reduce recherche pour chaque couple les amis communs, c’est-à-dire
ceux qui apparaissent dans les deux listes. C’est le résultat voulu.
Exemple
("A-B", "C D")
("A-C", "B D")
("A-D", "B C")
("B-C", "A D E")
("B-D", "A C E")
("B-E", "C D")
22 • La couche distribution – Les intergiciels 251

("C-D", "A B E")


("C-E", "B D")
("D-E", "B C")

22.7.4 L’intergiciel Apache Hadoop


L’intergiciel libre Apache Hadoop facilite la création d’applications distribuées en termes de
stockage et de traitement des données, capables de travailler sur des milliers de nœuds et
des pétaoctets de données. Chaque nœud est constitué de machines standards regroupées en
grappes. Tous les modules de Hadoop sont conçus avec l’idée fondamentale que les pannes
matérielles sont inévitables et qu’elles doivent être gérées automatiquement par l’intergiciel.
Hadoop comprend essentiellement :
– Un système de fichiers distribué HDFS (Hadoop Distributed File System), qui permet
l’abstraction de l’architecture physique de stockage sur les nœuds, afin de la manipuler
comme s’il s’agissait d’un disque dur unique.
– Un support complet de la méthode MapReduce.
– Une base de données distribuée non relationnelle (noSQL), HBase, facilitant le stockage
de grands ensembles de données par exemple de type (clé, valeur).

Le domaine des intergiciels permettant de répondre aux défis des systèmes informatiques
distribués du futur est très important. Après Hadoop, de nombreux systèmes similaires sont
apparus. On peut citer par exemple Phoenix, pour les machines multicœurs, et Mars, pour
exploiter la puissance de calcul des processeurs graphiques (GPU computing).
© Dunod – Toute reproduction non autorisée est un délit.
252 Exercices

EXERCICES

Exercice 22.1. Appel de procédure distante.


Il est généralement impossible de garantir la sémantique d’appel dite « exactement une fois »
signifiant qu’après réparation de toutes les pannes l’appel a été exécuté une fois et une seule.
La plupart des systèmes assurent la sémantique « au plus une fois » ou la sémantique « au
moins une fois ».
Définir la signification de ces deux sémantiques et discuter leurs implications.

Exercice 22.2. Intergiciel orienté message.


Dire, en expliquant, si l’utilisation d’un intergiciel orienté message serait adaptée pour les
applications suivantes :
a) Application de visiophonie.
b) Application de consultation d’informations météorologiques à distance.
c) Application de messagerie d’entreprise (courrier électronique, fax, messages vocaux).
d) Application de jeu en réseau.

Exercice 22.3. XML.


Un document XML est bien formé s’il respecte les règles suivantes (cette liste n’est pas
exhaustive) :
– Il contient une déclaration XML (ex. : <?xml version="1.0"?>).
– Il contient un ou plusieurs éléments.
– Il contient un élément racine encapsulant tous les autres éléments.
– Les éléments non vides ont une balise de début et de fin (ex. : <A> </A>).
– Les éléments non vides sont correctement imbriqués (ex. : <A> <B>...</B> </A>).
– Les éléments vides ont un / à la fin de la balise avant le > (ex. : <A />).
– Les noms des balises ouvrantes et fermantes correspondent.
– Un nom d’attribut apparaît uniquement dans la balise ouvrante et une seule fois dans cette
balise (ex : <A attr="val">).
– Les valeurs des attributs sont entre guillemets ou apostrophes.
– Les caractères réservés (comme <, >, &, etc.) sont remplacés par des références d’entités
(ex. : &lt; pour <).
– Toutes les références d’entités doivent commencer par & et finir par ; (ex. : &gt;).

a) Chercher les erreurs dans le document suivant et donner leur numéro de ligne et nature.
b) Donner une version corrigée bien formée du même document.
22 • La couche distribution – Les intergiciels 253

<?xml version="1.0"?>
<note date=11 mars>
<a>Pierre</A>
<de>Paul</de>
<sujet>Rappel</sujet>
<corps>N’oublie pas notre RV de demain 14h.</corps>
</note>
<note date="11 mars" >
<a>Paul</a>
<de>Pierre
<corps>OK & On se voit demain</corps>
</note>
<note />

Exercice 22.4. Architectures distribuées.


Placer les expressions suivantes sur le schéma ci-dessous : requête de service, requête HTTP,
requête de données, tiers web, tiers serveur, tiers client, navigateur, tiers métier, tiers données,
architecture n-tiers, architecture client/serveur, architecture 3 tiers.

Exercice 22.5. Services web.


Soit le fichier WSDL du service web de la coupe du monde de football 2014 à l’adresse
© Dunod – Toute reproduction non autorisée est un délit.

http://footballpool.dataaccess.eu/data/info.wso?wsdl.
a) Quels sont le nom et les paramètres de l’opération qui donne les noms des stades ?
b) Quels sont le nom et les paramètres de l’opération qui donne les informations sur un stade ?
c) Quel est le type retourné par l’opération Coaches ?
Corrigés des exercices

Exercice 1.1. Donnée, information, connaissance.


a) Une donnée est la description ponctuelle d’un élément de la réalité. Une information
est l’interprétation humaine d’une donnée ou d’un ensemble de données. Par exemple, la
donnée 03/07/2015 peut être interprétée comme une date de naissance. Une connaissance
est l’interprétation humaine à un niveau plus global d’une information ou d’un ensemble
d’informations, susceptible de déboucher sur des actions. Par exemple, une date de naissance
interprétée en âge peut impliquer des actions liées à un certain seuil d’âge.
b) Certaines connaissances peuvent être représentées explicitement en machine. Par exemple,
des règles qui permettent de déduire des faits à partir d’autres faits, comme en diagnostic
médical automatique avec le passage des symptômes à des hypothèses de diagnostic.
© Dunod – Toute reproduction non autorisée est un délit.

Exercice 1.2. Système informatique temps réel.


La rapidité n’est pas une caractéristique absolue. Elle dépend du processus associé. Elle ne
permet pas de différencier un système temps réel de ce qui ne l’est pas.
Par contre, un système temps réel doit être prévisible, pour permettre d’établir le respect ou
non des contraintes de temps. Si le système a un comportement imprévisible, on ne peut rien
dire de son caractère temps réel.

Exercice 1.3. Cloud privé.


Tout ou partie de l’informatique d’une organisation reprend les principes du cloud avec
un accès par un réseau privé : mise à disposition de services sur des serveurs distants,
virtualisation, élasticité, facturation interne à l’utilisation, etc.
256 Introduction aux systèmes informatiques

Exercice 1.4. Caractérisation des services sur le cloud.

IAAS PAAS SAAS


Données
Applications X
Systèmes X X
Machines virtuelles X X X
Serveurs X X X
Stockage X X X
Réseau X X X

Exercice 1.5. Internet des objets et « ville intelligente ».


Des capteurs peuvent être intégrés :
– dans le domaine des transports : aux places de parking, aux voies de circulation à péage, à
la signalisation routière, etc.,
– dans le domaine des services : aux containers de déchets, à l’éclairage urbain, aux systèmes
d’arrosage des espaces verts, aux espaces publicitaires, etc.,
– dans le domaine de la construction : aux bâtiments intelligents, aux espaces de télétravail
pour pouvoir les partager, etc.

Exercice 2.1. Cinq couches.


Il s’agit de l’architecture d’un ordinateur considéré de manière isolée et non d’un système
informatique, ce qui explique que la couche distribution (4) n’est pas explicitée.
– Hardware correspond à la couche matérielle (1).
– Firmware correspond à la couche du microcode en ROM (2.1).
– Assembler correspond à la couche du langage machine et du langage d’assemblage (2.2).
– Operating system correspond à la couche du système/réseau (3).
– Processes est la couche des processus qui tournent sur le système d’exploitation, ce qui
inclut les applications (5).

Exercice 2.2. Offre de services.


a) Par une interface de programmation ou API.
b) Par une interface utilisateur en ligne de commande ou graphique.
c) Les shells en ligne de commande et les environnements graphiques de bureau constituent
les interfaces vers les utilisateurs. Le noyau du système d’exploitation est accessible aux
autres logiciels via une API, qui s’appelle en Unix les appels système ou syscalls.

Exercice 2.3. Application distribuée.


a) L’application distribuée est constituée de l’ensemble des « éléments » qui apparaissent sur
les différentes machines et qui coopèrent via le réseau pour accomplir une tâche donnée.
Corrigés des exercices 257

b) La couche du middleware fait avant tout communiquer les éléments distribués.

Exercice 2.4. Avantages de la virtualisation.


a) Cela peut remplacer un multi-boot, c’est-à-dire la capacité à démarrer une machine avec
différents systèmes d’exploitation.
b) Ils sont multiples : coût du matériel et coûts de fonctionnement moindres (électricité,
climatisation), maximisation de l’utilisation des serveurs, facilité de déploiement, sauvegardes
et restaurations simplifiées et centralisées, continuité du service (redondance) facilitée, etc.

Exercice 2.5. Machine virtuelle.


Une machine virtuelle concrète émule une machine (un processeur) qui existe dans le monde
réel au contraire d’une machine virtuelle abstraite, comme la JVM de Java.

Exercice 3.1. Espace adressable.


La relation est E = 2n , ou n est la taille en bits des adresses.
Donc, pour des adresses sur 24 bits, l’espace adressable E vaut 224 , soit 16 millions de mots.

Exercice 3.2. Un disque magnétique.


a) Piste : 4 000 × 512 = 2 048 000 = 2 Mo.
Cylindre : 10 × 2 Mo = 20 Mo.
Façe : 100 000 × 2 Mo = 200 000 Mo = 200 Go.
Disque : 10 × 200 Go = 2 To.
b) 7 400 tours en 60 000 ms donc 1 tour en 60 000/7 400 = 8 ms.
Temps de latence maximum = 8 ms.
Temps de latence moyen = 4 ms (un demi-tour).
c) 2 Mo en 8 ms soit 250 Mo/s. Ce n’est pas possible.

Exercice 3.3. Mémoires cache.


a) P(L1) = 0,90 P(L2) = 0,9999 − 0,90 = 0,0999 P(MC) = 1 − 0,0999 − 0,90 = 0,0001.
b) TM = 0,90 × 10−8 + 0,0999 × 10−6 + 0,0001 × 10−3 = 20,89 × 10−8
© Dunod – Toute reproduction non autorisée est un délit.

Exercice 3.4. RAID.


a) Le fichier donne 500/64 = 7,8 ≈ 8 bandes. Soit 4 bandes sur chaque disque. La durée
d’écriture équivaut à celle d’un fichier de 250 ko. Elle est donc divisée par 2.
b) On aura 100 Go de capacité utile, plus un mirroir de 100 Go.
c) On suppose que le bloc de parité est sur le disque 1 : Dp = D2 xor D3 xor D4.
Si D3 donne D3 , on a Dp = D2 xor D3 xor D4 = (D2 xor D3 xor D4) xor (D3 xor
D3), car D3 xor D3 = 0.
Donc Dp = (D2 xor D3 xor D4) xor D3 xor D3 = Dp xor D3 xor D3.
Il suffit donc d’avoir l’ancien bloc de parité (Dp), l’ancien et le nouveau bloc de données(D3,
D3 ). C’est pourquoi la pénalité en écriture est de 4 : pour changer un bloc, il faut lire l’ancien
bloc et l’ancien bloc de parité et écrire le nouveau bloc et le nouveau bloc de parité, calculé à
partir des trois autres.
258 Introduction aux systèmes informatiques

Exercice 3.5. DAS, NAS, SAN.


Dans toutes les figures, les transferts entre application et filesystem sont en mode fichier et les
transferts entre filesystem et disque sont en mode bloc. Par contre, on voit qu’ils ne se situent
pas au même niveau dans les trois architectures.

Exercice 4.1. Les bus.


a) Transfert de 8 octets 400 000 000 fois par seconde. Soit 3 200 000 000 octets ou 2,2 Go/s.
b) Transfert de 4 octets 266 000 000 fois par seconde. Soit 1 064 000 000 octets ou 1,064 Go/s.
c) Le bus système alimente en données tous les autres bus, et réciproquement. Il n’est pas
étonnant qu’il possède une bande passante plus importante que le bus mémoire.

Exercice 4.2. Langages d’assemblage.


a) Machine M0
PUSH B
PUSH C
ADD
POP A
Machine M1
LOAD B
ADD C
STORE A
Machine M2
LOAD R1, B
LOAD R2, C
ADD R3,R1,R2
STORE A, R3
b) Machine M0
PUSH B
PUSH C
ADD
PUSH C
ADD
POP B
Soient 6 instructions et 4 accès mémoire (3 lectures et 1 écriture).
Machine M1
LOAD B
ADD C
ADD C
STORE B
Soient 4 instructions et 4 accès mémoire (3 lectures et 1 écriture).
Corrigés des exercices 259

Machine M2
LOAD R1, B
LOAD R2, C
ADD R3, R1, R2
ADD R4, R3, R2
STORE A, R4
Soient 5 instructions et 3 accès mémoire (2 lectures et 1 écriture)

Exercice 4.3. Circuit logique mystère.


a)
A B C D X Y Z P R
0 0 0 0 0 0 0 0 0
0 0 0 1 0 1 1 0 1
0 0 1 0 0 1 1 0 1
0 0 1 1 0 0 0 0 0
0 1 0 0 1 0 1 0 1
0 1 0 1 1 1 0 0 0
0 1 1 1 1 0 1 0 1
1 0 1 0 1 1 0 0 0
1 0 1 1 1 0 1 0 1
1 1 0 0 0 0 0 0 0
1 0 0 0 1 0 1 0 1
1 0 0 1 1 1 0 0 0
1 1 0 1 0 1 1 0 1
1 1 1 0 0 1 1 0 1
1 1 1 1 0 0 0 0 0
b) On peut interpréter R comme étant le bit de parité du mot ABCD.
c) Avec P à 1, les résultats sont inversés (0 donne 1 et 1 donne 0). R devient le bit d’imparité.

Exercice 4.4. Modes d’adressage.


(1) Dans le champ adresse pour un adressage immédiat.
© Dunod – Toute reproduction non autorisée est un délit.

(2) À l’adresse mémoire 11 pour un adressage direct.


(3) À l’adresse contenue dans le mot d’adresse 11 pour un adressage indirect.
(4) Dans le registre 11 pour un adressage par registre.
(5) À l’adresse contenue dans le registre 11 pour un adressage indirect par registre.

Exercice 4.5. Équilibrage de charges.


Il existe de nombreuses méthodes de répartition, plus ou moins aisées à mettre en œuvre :
– affectation circulaire (round-robin),
– affectation circulaire pondérée par la puissance des serveurs,
– affectation au serveur ayant le moins de connexions,
260 Introduction aux systèmes informatiques

– affectation au serveur ayant la charge CPU la plus faible,


– affectation par une fonction de hachage sur l’adresse IP des demandeurs,
– affectation au premier serveur qui répond, etc.

Exercice 5.1. Modèle OSI.


telnet : couche application FTP : couche application
routeur : couche réseau carte réseau : couche physique
hub : couche physique adresse IP : couche réseau
UDP : couche transport adresse MAC : couche liaison
commutateur (ou switch) : couche liaison paire torsadée : couche physique

Exercice 5.2. Adresse IP.


a) 145 donne 10010001. Soit une adresse de classe B, qui commence par 10.
b) 255.255.0.0 ou /16.
c) 145.245.0.0 en appliquant le masque précédent.
d) Il faut 6 bits à 1 supplémentaires dans le masque, car 26 = 64. Soit : 255.255.11111100.0
ou 255.255.252.0 ou /22.
e)
145.245.00101101.225
ET 11111100
145.245.00101100.0 soit 145.245.44.0

f) 01 11100001 soit 481.

Exercice 5.3. Mise en place de sous-réseaux.


a) Il faut 5 bits.
b) 25 − 2 soit 30, car il y a 2 adresses interdites 00000 et 11111.
c) netid = 24 ; netid + subnetid = 32 − 5 = 27 ; donc subnetid = 3 ; on peut adresser
8 sous-réseaux.
d)
Sous-réseau 0 : 11001000.00100011.00000001.000 00000 soit 200.35.1.0
Sous-réseau 1 : 11001000.00100011.00000001.001 00000 soit 200.35.1.32
Sous-réseau 2 : 11001000.00100011.00000001.010 00000 soit 200.35.1.64
Sous-réseau 3 : 11001000.00100011.00000001.011 00000 soit 200.35.1.96
Sous-réseau 4 : 11001000.00100011.00000001.100 00000 soit 200.35.1.128
Sous-réseau 5 : 11001000.00100011.00000001.101 00000 soit 200.35.1.160
Sous-réseau 6 : 11001000.00100011.00000001.110 00000 soit 200.35.1.192
Sous-réseau 7 : 11001000.00100011.00000001.111 00000 soit 200.35.1.224

e) 11001000.00100011.00000001.010 11111 soit 200.35.1.95.

Exercice 5.4. Adresses MAC.


a) 222 soit environ 4 000 000.
b) 224 soit environ 16 000 000.
c) Par une liste de contrôle d’accès (ACL) des adresses MAC autorisées.
Corrigés des exercices 261

d) Car il est facile de s’emparer des adresses MAC en analysant les trames Ethernet par
exemple et de s’en approprier en changeant par logiciel une adresse (MAC spoofing).

Exercice 5.5. DMZ.


a) (1,2) Échanges réseau local – serveur HTTP local
(3,4) Échanges réseau local – serveur DNS local
(5,6) Échanges Internet – serveur HTTP local
(7,8) Échanges Internet – serveur DNS local
b) p1 refusé (règle 9)
p2 accepté (règle 3)
p3 accepté (règle 5)
p4 refusé (règle 9)
p5 accepté (règle 6).

Exercice 6.1. Opérations sur les nombres binaires.


a)
1 1 1 1 (retenues)
1 0 1 1 0 1
+ 1 1 0 0 1
-------------
1 0 0 0 1 1 0

b)
1 0 1
x 1 1 0
-------
0 0 0
1 0 1
1 0 1
---------
1 1 1 1 0

c)
1 0 1 1 0 1 donne 1+4+8+32 = 45
© Dunod – Toute reproduction non autorisée est un délit.

1 1 0 0 1 donne 1+8+16 = 25
1 0 0 0 1 1 0 donne 2+4+64 = 70 et 45+25 = 70

1 0 1 donne 1+4 = 5
1 1 0 donne 2+4 = 6
1 1 1 1 0 donne 2+4+8+16 = 30 et 5x6 = 30

Exercice 6.2. Capacité des mots.


8 bits : 1111 1111 donne 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255
ou bien 1 0000 0000 − 1 donne 28 − 1 = 256 − 1 = 255.
16 bits : 216 − 1 = 65 535.
32 bits : 232 − 1 = 4 294 967 295.
n bits : 2n − 1.
262 Introduction aux systèmes informatiques

Exercice 6.3. Conversions.


a) 37 donne 100101. 37 2
1 18 2
0 9 2
1 4 2
0 2 2
0 1 2
1 0

b) 101 0001 1101 donne 51D, qui donne 5×16×16+1×16+13 = 5×256+16+13 = 1 309.
c)
F F F
1111 1111 1111 donne 212 − 1 = 4 096 − 1 = 4 095.
d)
1 100 110 donne 146 en octal.
146 donne 1 × 8 × 8 + 4 × 8 + 6 = 64 + 32 + 6 = 102 en décimal.

Exercice 6.4. Complément à 2.


a)
30 donne 0001 1110 (2 + 4 + 8 + 16).
20 donne 0001 0100 (4 + 16).
−20 donne
11101011
+ 1
--------
11101100

30 + −20 donne
00011110
+ 11101100
----------
(1)00001010 qui donne bien 10

b)
0110 1100 0001 1011 donne 27 675 (c’est un positif donc binaire pur !)
1011 0110 1011 0011 donne −18 765 (c’est un négatif donc changement des bits et +1).
c)
bit de signe complément à 2 excédent à 8
7 0111 0111 1111
6 0110 0110 1110
5 0101 0101 1101
4 0100 0100 1100
3 0011 0011 1011
2 0010 0010 1010
1 0001 0001 1001
0 0000 ou 1000 0000 1000
Corrigés des exercices 263

-1 1001 1111 0111


-2 1010 1110 0110
-3 1011 1101 0101
-4 1100 1100 0100
-5 1101 1011 0011
-6 1110 1010 0010
-7 1111 1001 0001
-8 - 1000 0000

d)
6 00000110 127 01111111
8 00001000 1 00000001
14 00001110 -128! 10000000
C=0 V=0 résultat correct C=0 V=1 résultat incorrect

4 00001000 2 00000010
-2 11111110 -4 11111100
2 00000010 -2 11111110
C=1 V=1 résultat correct C=0 V=0 résultat correct

-2 11111110 -127 10000001


-4 11111100 -2 11111110
-6 11111010 127! 01111111
C=1 V=1 résultat correct C=1 V=0 résultat incorrect

On remarque que le résultat est correct quand C = V et incorrect sinon.


e)
– Deux positifs : on fait simplement la multiplication.
– Un négatif et un positif : on calcule le complément à 2 du négatif, on fait la multiplication
et on calcule le complément à 2 du résultat.
– Deux négatifs : on fait le complément à 2 des deux opérandes et on les multiplie.

Remarque : toutes les opérations doivent être réalisées dans des mots de même taille.

Exercice 6.5. Réels flottants.


© Dunod – Toute reproduction non autorisée est un délit.

a)
12,625 donne 1100,101 · 20 = 1,100101 · 23 .
L’exposant vaut donc 130 en excédent à 127.
On obtient : 1 1000 0010 (1,)1001 0100 0..., soit C14A 0000 en hexadécimal.
b)
0100 0010 1110 0100 1000 0000...
Signe : + (car 0).
Exposant : 1000 0101 = 133, soit 6 en excédent à 127.
Mantisse : 1,1100 1001 000...
Ce qui donne, après décalage de la virgule de 6 positions vers la droite : 111 0010,01, soit
114,25.
264 Introduction aux systèmes informatiques

c)
0011 1110 1001 0100 0000...
Signe : +.
Exposant : 0111 1101 = 125, soit −2 en excédent à 127.
Mantisse : 1,0010 100...
Ce qui donne, après décalage de la virgule de 2 rangs vers la gauche : 0,0100101, soit
0,289 062 5.
d)
7/8 = 0,875 0,875 × 2 = 1,750 0,750 × 2 = 1,500 0,500 × 2 = 1,000, soit : 0,111.
Remarque : on aurait pu le deviner, car diviser par 8 équivaut à décaler 3 fois la virgule à
gauche sur 111 (binaire de 7).
Soit : 1,11 · 2−1 . Donc, exposant = 126.
Ce qui donne : 0 0111 1110 (1,)1100 000..., soit 3F 600000 en hexadécimal.
e)
Hexadécimal 3 E E 0 0 0 0 0
----- ---- ----- ---- ---- ---- ---- ----
Binaire 0 011 1110 1 110 0000 0000 0000 0000 0000
- ------------- -------------------------------------------
IEEE 774 + exposant:125 mantisse : (1,)110 0000 0000 0000 0000 0000
125-127=-2

Soit, +1,110 · 2−2 ou 0,0111 ou 0,4375 en décimal.


Hexadécimal 3 D 8 0 0 0 0 0
----- ---- ----- ---- ---- ---- ---- ----
Binaire 0 011 1101 1 000 0000 0000 0000 0000 0000
- ------------- -------------------------------------------
IEEE 774 + exposant:123 mantisse : (1,)000 0000 0000 0000 0000 0000
123-127=-4

Soit, +1,0 · 2−4 ou 0,0001 ou 0,0625 en décimal.


La somme vaut 0,4375 + 0,0625 = 0,5, en décimal.
0,5 vaut en binaire : +1,0 · 2−1
+ exposant:-1 mantisse : (1,)000 0000 0000 0000 0000 0000
-1+127=126
- ------------- -------------------------------------------
Binaire 0 011 1111 0 000 0000 0000 0000 0000 0000
----- ---- ----- ---- ---- ---- ---- ----
Hexadécimal 3 F 0 0 0 0 0 0

Soit, 3F 00 0000 en hexadécimal.


f)
Le plus petit nombre après 1 est 1,0000000...000001 (avec 22 zéros), soit : 1 + 2−23 .
La précision est donc de 2−23 , soit 2−3 · 2−20 , soit 1/8 · 2−10 · 2−10 , soit 1/8 · 10−3 · 10−3
ou 1,210−7 . Donc, 7 chiffres significatifs au plus.
Corrigés des exercices 265

g)
1,0110 11 · 22 donne 0,0101 10 · 24 (avec perte des deux derniers 1).
La somme donne :
1,0011 00.24
+ 0,0101~10.24
--------------
1,1000~10.24 , soit 24,5.
La valeur exacte était de 19,0 + 5,6875 = 24,6875, soit une erreur de 0,1875.

Exercice 6.6. Codage des caractères.


a)
En hexadécimal : 49 6E 66 6F 72 6D 61 74 69 71 75 65
Soit le texte : I n f o r m a t i q u e (cf. table en annexe)
b)
On voit sur la table que le a minuscule est codé par 97 en décimal et le A majuscule par 65 en
décimal. Les deux alphabets sont rangés dans le même ordre. Il suffit donc de soustraire 32
en décimal au code de n’importe quelle lettre de l’alphabet pour la faire passer de minuscule
à majuscule.

Exercice 6.7. Autre code.


a)
0 : 1111110
1 : 1000010
2 : 0110111
3 : 0111101
4 : 1011001
5 : 1101101
6 : 1101111
7 : 0111000
8 : 1111111
9 : 1111101

b) 1000010 1111101 1111111 0111000


© Dunod – Toute reproduction non autorisée est un délit.

Exercice 6.8. Décodage d’une zone mémoire.


a) 16 + 2 + 6 + 21 = 45 octets par client
b)
Premier client :
– Nom : 07 42 6F 6C 6C 69 6E 6F (25...68)
B o l l i n o
– Quantité : 19 00, soit 0001 1001 = 25
– Somme : 33 90 00 00 00 8B, qui s’analyse comme
0 011 0011 1001 0...0 10001011
+ mantisse (0,1)01100111001 exposant 1+2+8+128, soit 11, ce qui
donne : 10110011100,1 ou +1436,5
266 Introduction aux systèmes informatiques

– Commentaire :
10 4A 41 4D 41 49 53 20 43 4F 4E 54 45 4E 54 20 21 (20...73)
J A M A I S C O N T E N T !

Deuxième client :
– Nom : 05 44 75 76 61 6C (6E...68)
D u v a l
– Quantité : 36 00, soit : 0011 0110 = 54
– Somme : 9E 94 00 00 00 8C, qui s’analyse comme
1 001 1110 1001 0100... 10001100
- mantisse (0,1)001 1110 1001 0100 exposant 12+128, soit 12,
ce qui donne : -100111101001,01 ou -2537,25
– Commentaire :
0A 42 4F 4E 20 43 4C 49 45 4E 54 (54 45...)
B O N C L I E N T

Exercice 6.9. Codage d’une zone mémoire.


204 donne 1100 1100 soit CC en hexadécimal.
PRODUITS_FINANCIERS_ donne 50 52 4F 44 55 49 54 53 20 46 49 4E 41
4E 43 49 45 52 53 20.
520,50 donne +10 0000 1000,1 soit (1,)00 0001 0001 · 29 . L’exposant vaut 136,
soit 1000 1000. Le nombre est représenté par 0 100 0100 0000 0010 0010 0...0 ou
44 02 20 00.
La zone complète en hexadécimal : CC 50 52 4F 44 55 49 54 53 20 46 49 4E
41 4E 43 49 45 52 53 20 44 02 20 00.

Exercice 6.10. Réels double précision


a)
157,6875 donne 1001 1101,1011 · 20 ou 1,0011 1011 011 · 27 .
7 en excédent à 1 023 donne 1 030 soit 100 0000 0110.
Le nombre en binaire s’écrit donc :
0 100 0000 0110 (1,)0011 1011 0110 0...0 soit 4063 B600 0000 0000 en hexadécimal.
b)
C00F 0000 0000 0000 donne 1100 0000 0000 1111 0000...0000.
Donc un nombre négatif d’exposant 100 0000 0000 ou 1 024 en excédent à 1 023, soit 1.
Le nombre est donc −1,1111 · 21 ou −11,111 ou −3,875.

Exercice 7.1. Multi-utilisateur et multitâche.


a) Non. Un seul utilisateur peut lancer plusieurs tâches.
b) Il faut gérer l’identification et les droits d’accès des différents utilisateurs.
c) Fin du quantum de temps alloué à la tâche, terminaison de la tâche, blocage de la tâche en
attente d’une ressource exclusive ou d’une fin d’entrée/sortie, etc.
Corrigés des exercices 267

Exercice 7.2. Utilisation du noyau d’un système de type Unix.


Il faut obligatoirement passer par un appel système via une procédure de la bibliothèque
standard. Cela assure le passage du mode utilisateur au mode noyau à l’appel et le passage
inverse au retour.

Exercice 7.3. Ordonnancement des processus.


a) Équité entre les processus, utilisation maximum du processeur (100 % si possible), temps
de réponse minimum, permettre de prendre en compte des priorités, etc.
b) Chaque changement de processus s’accompagne d’un temps de sauvegarde et de
restauration des contextes d’exécution. Un quantum trop petit diminue l’efficacité globale
en multipliant les temps de commutation de contextes. Un quantum trop grand handicape le
temps de réponse des commandes courtes en mode interactif.
c) Une solution consiste à diminuer la priorité des processus qui bénéficient du processeur.

Exercice 7.4. Mémoire virtuelle paginée.


a) On compte 9 défauts de page.
page utilisée 0 1 2 3 0 1 4 0 1 2 3 4
emplacements 0 0 0 3 3 3 4 4 4 4 4 4
physiques 1 1 1 0 0 0 0 0 2 2 2
2 2 2 1 1 1 1 1 3 3
défauts D D D D D D D D D

b) Pour adresser 1 ko il faut 10 bits. Les adresses virtuelles font 16 bits. Soit 6 bits pour le
numéro de page et 10 bits pour le déplacement dans la page.
102A donne 0001000000101010, ce qui correspond à la page 100 (4 en décimal) et au
déplacement 101010 (42 en décimal).
0AF 1 donne 0000101011110001, ce qui correspond à la page 10 (2 en décimal) et au
déplacement 1011110001 (753 en décimal).

Exercice 7.5. Bibliothèques.


Il faut ajouter les bibliothèques statiques en entrée de l’édition de liens.
Il faut ajouter la phase d’exécution en fin de cycle de vie, avec en entrée le programme objet
absolu et les bibliothq̀ues dynamiques.
© Dunod – Toute reproduction non autorisée est un délit.

Exercice 8.1. Arbre des processus.


Le processus initial init est le père de tous les autres. Parmi ceux-ci, on voit un processus de
gestion du réseau (NetworkManager, qui permet de gérer les connexions aux réseaux) et
un émulateur de terminal pour l’environnement graphique GNOME (gnome-terminal).
Dans ce terminal tourne un shell bash, grâce auquel la commande pstree a pu être lancée.

Exercice 8.2. Arrière-plan, premier plan.


a) Par CTRL+Z.
b) Par bg %1.
c) Par kill -9 18665.

Exercice 8.3. Redirection.


cat fich > fich1
268 Introduction aux systèmes informatiques

Exercice 8.4. Tubes et filtres (1).


ls -l /bin | sort -n -r -k5 | head

Exercice 8.5. Tubes et filtres (2).


grep "From :" mbox | sort | uniq -c

Exercice 9.1. Chemins absolus et relatifs.


a) Chemin absolu : /etc/passwd. Chemin relatif : ../../etc/passwd.
b) Chemin absolu : ls -l /bin/rmdir. Chemin relatif : ls -l ../../bin/rmdir.

Exercice 9.2. Caractéristiques des chemins.


a) Un chemin absolu commence toujours par /, un chemin relatif jamais.
b) Oui, car la racine est unique et les noms sont uniques dans un répertoire donné.
c) Oui. On peut toujours accéder à un fichier fich du répertoire courant rep par son nom
ou par ./fich (ou par ../rep/fich si rep n’est pas la racine).
d) Non. Le répertoire bin à la racine est listé par ls /bin en absolu et ls bin en relatif.

Exercice 9.3. Manipulation de fichiers et répertoires.


a)
mkdir rep1 rep2
echo ’contenu fich1’ > rep1/fich1
mkdir rep2/projet
echo ’contenu de fich4’ > rep2/fich4
echo ’contenu de fich2’ > rep2/projet/fich2
echo ’contenu de fich3’ > rep2/projet/fich3
b) Chemin absolu : cat ~/rep2/projet/fich2 (on ne connaît pas le nom du home).
Chemin relatif : cat rep2/fich4.
c) Chemin absolu : ls ~/rep2/projet. Chemin relatif : ls rep2/projet.
d) mv rep1/fich1 rep2/projet
e)
rm rep2/projet/*
rmdir rep2/projet
f)
rm rep2/*
rmdir rep{1,2} ou rmdir rep[1-2]

Exercice 9.4. Caractères de remplacement.


a) rm /tmp/t[iou]t[iou]
b)
(1) ls -d /usr/bin/s*
(2) ls -d /usr/bin/????
(3) ls -d /usr/bin/*ssh*
(4) ls -d /usr/bin/[st]*
Corrigés des exercices 269

Exercice 9.5. Expressions régulières avec grep.


a) grep "home" /etc/passwd
b) grep "^[abcd]" /etc/passwd
c) grep "[abc]" /etc/passwd
d) grep "^.a" /etc/passwd
e) grep "csh$" /etc/passwd
f) grep -v "home" /etc/passwd
g) grep -i "^[aeiouy]" /etc/passwd

Exercice 9.6. grep et find.


a) ps -le | grep gnome-session
b) find ~ -name .session-log
c) top -n1 | grep "^Mem:"

Exercice 10.1. Impression.


Le ou les documents à imprimer sont déposés par le processus lpr dans la file d’attente
(spool) de l’imprimante sur le disque. Un second processus, le spooler, est ultérieurement
chargé de les lire, de les transformer et de les transmettre aux périphériques d’impression.
Cette organisation (spooling) permet de « rendre la main » à l’utilisateur rapidement.

Exercice 10.2. Les signaux.


kill -19 7222 (signal SIGSTOP)
kill -18 7222 (signal SIGCONT).

Exercice 10.3. La mort du père.


a) Il faut utiliser l’option -e de la commande ps, qui affiche tous les processus, et faire un
grep sur le nom du processus xclock : ps -el | grep xclock.
b) Le nouveau père a le PPID 1. C’est le processus init.
c) Par la commande kill -9 7222.

Exercice 10.4. Tubes.


ps -ef h |cut -f1-1 -d’ ’ | sort | uniq | more
© Dunod – Toute reproduction non autorisée est un délit.

Exercice 10.5. La commande tee.


cd1 < data 2> ferr | cd2 2>> ferr > res1
cd3 < res1 2>> ferr | tee res2 | more

Exercice 11.1. Protection du home.


chmod 700

Exercice 11.2. Droits d’accès.


Fichier passwd : rw- r-- r--
Commande mkdir : rwx r-x r-x
Copie du fichier passwd : rw- r-- r--
Remarque : Les droits sont conservés tels que par la copie. Par contre, le propriétaire et le
groupe sont modifiés. L’utilisateur peut donc modifier le droit d’écriture par exemple.
270 Introduction aux systèmes informatiques

Exercice 11.3. La commande chmod.


a) Donne au propriétaire de mon_fichier les droits de lecture et d’écriture.
b) Donne à tout le monde le droit de lister le répertoire mon_dossier et tous ses
sous-répertoires.
c) Donne les droits rwx r-x r-x à mon_dossier ; le propriétaire peut tout faire ; les
autres peuvent lister et traverser le répertoire mon_dossier.
d) Donne les droits rw- r-- r-- à mon_fichier ; le propriétaire peut le lire et y
écrire ; les autres peuvent seulement le lire.

Exercice 11.4. Droits sur un répertoire.


Il peut par exemple lister un sous-répertoire de rep pour lequel il possède le droit r alors
qu’il ne peut pas lister rep.

Exercice 11.5. La commande umask.


drwxr-xr-x ... rep
-rw-r--r-- ... fich

Exercice 11.6. SUID.


Le SUID (octal 4000) permet d’agir comme le propriétaire de la commande, c’est-à-dire root.
L’accès en écriture au fichier /etc/shadow est donc possible.

Exercice 12.1. Affichage et interprétation des variables.


a) x
b) ls -l
c) $x
d) ls -l
e) La liste détaillée des fichiers du répertoire courant, comme une seule longue ligne.
f) La liste détaillée des fichiers du répertoire courant, avec un fichier par ligne.

Exercice 12.2. Script et processus.


a) chmod +x long
./long
b) ./long &
c) kill -9 17828
d) PATH=$PATH :~
long

Exercice 12.3. Script de gestion d’une poubelle.


a)
#!/bin/bash
# Rangement d’un fichier dans la poubelle
# Usage : effacer fichier
if (( $# != 1 )) ; then
echo "Usage : $0 fichier"
exit 1
fi
Corrigés des exercices 271

if [[ ! -f $1 ]] ; then
echo "$1 n’est pas un fichier"
exit 2
fi
if [[ ! -d ~/poubelle ]] ; then
mkdir ~/poubelle
fi
mv $1 ~/poubelle
echo "$1 dans la poubelle"

b)
#!/bin/bash
# Rangement d’un ou plusieurs fichiers dans la poubelle
# Usage : effacer liste_fichiers
if (( $# == 0 )) ; then
echo "Usage : $0 liste_fichier"
exit 1
fi
for fich in $* ; do
if [[ ! -f $fich ]] ; then
echo "$fich inconnu ou pas un fichier"
exit 2
fi
done
if [[ ! -d ~/poubelle ]] ; then
mkdir ~/poubelle
fi
mv $* ~/poubelle
echo "$* dans la poubelle"

c)
#!/bin/bash
# Contenu de la poubelle
# Usage : voirpoub
if (( $# != 0 )) ; then
echo "Usage : $0"
© Dunod – Toute reproduction non autorisée est un délit.

exit 1
fi
if [[ ! -d ~/poubelle ]] ; then
echo "poubelle absente"
exit 2
fi
echo "Contenu de la poubelle :"
ls -l ~/poubelle

d)
#!/bin/bash
# Vidage la poubelle
# Usage : viderpoub
272 Introduction aux systèmes informatiques

if (( $# != 0 )) ; then
echo "Usage : $0"
exit 1
fi
if [[ ! -d ~/poubelle ]] ; then
echo "poubelle absente"
exit 2
fi
rm ~/poubelle/*
echo "Poubelle vidée"

e)

#!/bin/bash
# Deplacement d’un fichier de la poubelle vers un repertoire
# Usage : retrouver fichier repertoire
if (( $# != 2 )) ; then
echo "Usage : $0 fichier repertoire"
exit 1
fi
if [[ ! -f ~/poubelle/$1 ]] ; then
echo "~/poubelle/$1 inconnu ou pas un fichier"
exit 2
fi
if [[ ! -d $2 ]] ; then
echo "$2 n’est pas un repertoire"
exit 3
fi
if [[ ! -d ~/poubelle ]] ; then
echo "poubelle absente"
exit 4
fi
mv ~/poubelle/$1 $2
echo "~/poubelle/$1 dans $2"

Exercice 12.4. Script de rangement des fichiers du home.


#!/bin/bash
# Rangement des fichiers du home
# Usage : organise [-c] [-b] [-r ou -R]
if (( $# < 4 && $# > 0 )) ; then
c="non"
b="non"
petitr="non"
grandr="non"
for arg in $@ ; do
if [[ "$arg" == "-c" ]] ; then
c="oui"
Corrigés des exercices 273

elif [[ "$arg" == "-b" ]] ; then


b="oui"
elif [[ "$arg" == "-r" ]] ; then
petitr="oui"
elif [[ "$arg" == "-R" ]] ; then
grandr="oui"
else
echo "argument $arg inconnu"
exit 1
fi
done
else
echo "usage : organise [-c] [-b] [-r ou -R]"
exit 2
fi
if [[ $petitr == "oui" && $grandr == "oui" ]] ; then
echo "-r et -R sont exclusifs"
exit 3
fi

if [[ $c == "oui" ]] ; then
if [[ ! -d ~/progsC ]] ; then
mkdir ~/progsC
fi
mv ~/*.c ~/progsC 2> /dev/null
fi
if [[ $b == "oui" ]] ; then
if [[ ! -d ~/bin ]] ; then
mkdir ~/bin
fi
for fich in ~/* ; do
if [[ -f "$fich" ]] ; then
grep ’#!/bin/bash’ "$fich" 2> /dev/null
if (( $? == 0 )) ; then # on pourrait aussi incorporer le grep au if
mv "$fich" ~/bin 2> /dev/null
© Dunod – Toute reproduction non autorisée est un délit.

fi
fi
done
fi
if [[ $petitr == "oui" ]] ; then
if [[ ! -d ~/recup ]] ; then
mkdir ~/recup
fi
mv $~/*.o ~/recup 2> /dev/null
fi
if [[ $grandr == "oui" ]] ; then
rm ~/*.o 2> /dev/null
fi
274 Introduction aux systèmes informatiques

Exercice 12.5. Scripts de correction automatique.


a)
# !/bin/bash
# Recuperation du tp d’un etudiant
# usage : recupuntp nom
if (( $# != 1 )) ; then
echo "usage : $0 nom"
exit 1
fi
if [[ ! -d /users/etude/$1/PUBLIC ]] ; then
echo "Pas de repertoire /users/etude/$1/PUBLIC"
exit 2
fi
if [[ ! -r /users/etude/$1/PUBLIC ]] ; then
echo "Le repertoire /users/etude/$1/PUBLIC n’est pas lisible"
exit 3
fi
if [[ ! -f /users/etude/$1/PUBLIC/tp ]] ; then
echo "Pas de fichier /users/etude/$1/PUBLIC/tp"
exit 4
fi
if [[ ! -r /users/etude/$1/PUBLIC/tp ]] ; then
echo "Le fichier /users/etude/$1/PUBLIC/tp n’est pas lisible"
exit 5
fi
if [[ ! -d reptp ]] ; then
mkdir reptp
fi
cp /users/etude/$1/PUBLIC/tp reptp/tp.$1
chmod +w reptp/tp.$1

b)
# !/bin/bash
# Recuperation des tp d’une liste d’etudiants
# usage : recuplestp liste_noms
if (( $# == 0 )) ; then
echo "usage : $0 liste_noms"
exit 1
fi
for etud in $@ ; do
./recupuntp $etud
done

c)
# !/bin/csh
# Calcul des notes de tp
# usage : notestp liste_10_mots
if (( $# != 10 )) ; then
echo "usage : $0 liste_10_mots"
exit 1
fi
Corrigés des exercices 275

echo "NOMS NOTES TP"


for etud in $(ls /users/etude) ; do
if [[ -f reptp/tp.$etud ]] ; then
note=0
for mot in $@ ; do
grep $mot reptp/tp.$etud &> /dev/null # redirige les deux sorties
if (( $? == 0 )) ; then
(( note++ ))
fi
done
(( note=$note*2 ))
echo "$etud $note"
else
echo "$etud 0"
fi
done

Exercice 13.1. Disques et partitions.


La machine comporte un disque SCSI ou SATA de 81,9 Go, /dev/sda1, avec trois
partitions primaires : /dev/sda2 est une petite partition bootable avec le système de
fichiers ext3 de 0,1 Go, de même que la grosse partition /dev/sda3 de 79,8 Go. La
partition de swap offre 2 Go.

Exercice 13.2. Montage des partitions.


Six partitions (systèmes de fichiers) issues de deux disques IDE sont montées sur cette
machine. Les points de montage sont visibles dans la colonne de droite. Par exemple, la
partition des homes fait 1,5 Go. Elle est occupée à 85 %.

Exercice 13.3. Le format ext2.


a) 256 adresses.
b) 10 × 1 ko + 1 × 256 × 1 ko + 1 × 256 × 256 × 1 ko + 1 × 256 × 256 × 256 × 1 ko =
1 024 × (10 + 256 + 256 × 256 + 256 × 256 × 256) = 17 247 250 432, soit environ
17 Go.
© Dunod – Toute reproduction non autorisée est un délit.

Exercice 13.4. LILO.


LILO se situe sur le MBR du disque /dev/hda. Il affiche au démarrage une invite de choix
du système (prompt) et attend la réponse de l’utilisateur pendant 120 secondes. Par défaut, il
choisit Linux. Linux et Windows (other) sont disponibles sur la machine.
La configuration précise aussi où se trouvent le noyau linux (image), la partition racine de
Linux (root) et la partition Windows.

Exercice 14.1. La couche application.


Les trois couches hautes du modèle OSI, application, présentation et session, constituent la
couche application du modèle TCP/IP.

Exercice 14.2. Des protocoles qui utilisent UDP.


C’est le cas en particulier de DNS, DHCP, SNMP, NTP.
276 Introduction aux systèmes informatiques

Exercice 14.3. Un problème d’accès.


Le protocole DNS de résolution des noms.

Exercice 14.4. Une combinaison de protocoles.


HTTP, DNS, SMTP, POP/IMAP.

Exercice 14.5. Processus lourds et processus légers.


Processus : ils possèdent un espace mémoire (virtuel) propre ; ils communiquent par les
mécanismes IPC.
Threads : les threads d’un même processus se partagent l’espace mémoire du processus ; ils
communiquent et se synchronisent par des données partagées.

Exercice 15.1. Hors bande.


FTP utilise deux connexions distinctes pour les informations de contrôle et les données. Les
premières n’ont donc pas de conséquences sur le débit (ou bande passante) des deuxièmes.

Exercice 15.2. Transfert d’arborescences de fichiers.


a) Il suffit que l’arborescence soit archivée dans un fichier unique binaire, par exemple un
fichier .tar, .tgz, .zip, etc.
b) Par un parcours récursif de l’arborescence avec une commande de listage pour chaque
répertoire de l’arborescence et une reconstitution de l’arborescence.

Exercice 15.3. Récupération de la RFC 959 de FTP par FTP.


a)
ftp ftp.rfc-editor.org
Connexion sous anonymous avec mot de passe adresse mail.
cd in-notes
get rfc959.txt
quit
b) Les modes stream (flux d’octets), block (suite de blocs) et compressed (compressé).
La commande MODE avec les attributs S (pour stream), B (pour block) ou C (pour
compressed).

Exercice 15.4. Le protocole TFTP.


Utilisation sur un réseau local uniquement. Par exemple, pour mettre à jour des fichiers
embarqués dans des équipments (routeur, pare-feu, etc.) ou pour démarrer une machine sans
disque à partir du réseau (transfert du noyau).

Exercice 16.1. Requête HTTP en Telnet.


$ telnet www.gnu.org 80
Trying 208.118.235.148...
Connected to wildebeest.gnu.org.
Escape character is ’^]’.
GET /gnu/gnu.html HOST/1.1
host: www.gnu.org
*** une ligne vide ici ***
Corrigés des exercices 277

Exercice 16.2. FTP avec Telnet.


a)
$ telnet ftp.rfc-editor.org 21
Trying 4.31.198.49...
Connected to ftp.rfc-editor.org.
Escape character is ’^]’.
220 "FTP Server Ready"
USER anonymous
331 Please specify the password.
PASS none
230 Login successful.
CWD in-notes
250 Directory successfully changed.
RETR rfc959.txt
425 Use PORT or PASV first.
PASV
227 Entering Passive Mode (4,31,198,49,117,81)
**** dans une autre fenêtre ****
$ telnet 4.31.198.49 30033
Trying 4.31.198.49...
Connected to 4.31.198.49.
Escape character is ’^]’.
**** dans la première fenêtre ****
RETR rfc959.txt
150 Opening ASCII mode data connection for rfc959.txt (147316 bytes).
226 Transfer complete.
QUIT
221 Goodbye.
Connection closed by foreign host.
**** dans la seconde fenêtre ****
**** le texte de la RFC ****
Postel & Reynolds [Page 69]

Connection closed by foreign host.


© Dunod – Toute reproduction non autorisée est un délit.

b) En mode actif, l’initialisation par le serveur de la connexion pour transmettre les données
au client échoue souvent à cause du paramétrage du pare-feu côté client. En mode passif,
c’est le serveur qui définit le port à utiliser et c’est le client qui initialise la connexion, avec
un pare-feu côté serveur qui est correctement paramétré.

Exercice 16.3. Cryptographie.


a) Alice peut crypter ses messages avec sa clé privée. Mais n’importe qui pouvant récupérer
la clé publique peut les lire, cela n’a aucun intérêt. Par contre, Bob peut crypter ses messages
avec la clé publique et seule Alice, grâce à sa clé privée, peut les lire.
b) Comme Bob possède la clé publique d’Alice, il peut vérifier qu’Alice est bien émettrice des
messages qu’elle signe avec sa clé privée, puisqu’elle est la seule à la posséder. Inversement,
Bob peut signer un message avec la clé publique d’Alice. Mais comme n’importe qui pourrait
le faire, cela n’a aucun intérêt.
278 Introduction aux systèmes informatiques

Exercice 16.4. SSH.


Il s’agit d’une première connexion et le client SSH est incapable de vérifier la clé
publique du serveur machinedist. Il demande à l’utilisateur de le faire en comparant
l’empreinte (fingerprint) de la clé qu’il fournit avec celle que l’utilisateur est supposé
avoir récupéré auprès du serveur. Comme il a répondu yes, cette clé est ajoutée au fichier
.ssh/known_hosts dans le home de l’utilisateur et sert pour calculer la clé secrète qui
sera partagée et permettra de crypter la session. L’authentification par mot de passe peut se
faire ensuite via cette connexion cryptée.

Exercice 17.1. NFS.


a)
/home/moi/public *.monorg.fr(ro)
/home/moi/private toi.monorg.fr(rw)

b)
chmod 755 /dirs/public
chmod 777 /dirs/private

c)
mount -t nfs serveur.monorg.fr:/home/moi/public /mnt/public

d) Dans /etc/fstab avec la ligne


serveur.monorg.fr:/home/moi/public /mnt/public nfs defaults 0 0

Exercice 17.2. Fichier /etc/exports.


Le fichier décrit les systèmes de fichiers exportés par NFS, vers quelles machines et avec
quelles caractéristiques :
– /usr est en lecture seulement, /home en lecture/écriture vers les machines définies par
le masque, c’est-à-dire dont l’adresse IP commence par 172.16.5,
– /usr/local/man est en lecture/écriture pour les deux machines indiquées,
– /home/ventes est en lecture/écriture pour les machines en .ventes.monorg.fr.

Exercice 17.3. Fichier /etc/fstab.


Les cinq premières lignes correspondent à des montages classiques de systèmes de fichiers
locaux en /, /home, /var, /win et swap, la sixième ligne au montage du CD-ROM en
/mnt/cdrom et la dernière ligne à un montage NFS en lecture/écriture depuis la machine
serveur en /home/moi.

Exercice 17.4. Samba.


Cet extrait du fichier de configuration de Samba définit deux partages qui apparaîtront dans le
voisinage réseau des clients comme des dossiers avec le nom entre crochets et le commentaire
spécifié. Le partage cdrom est en lecture seulement et accessible anonymement par tout le
monde. Le partage ventes est en lecture/écriture, restreint aux trois utilisateurs indiqués
avec authentification par mot de passe, avec les droits par défaut indiqués en cas de création
de fichiers et de répertoires.
Corrigés des exercices 279

Exercice 18.1. Mot de passe.


La commande passwd change le fichier des mots de passe local, alors que la commande
yppasswd change l’annuaire NIS, c’est-à-dire le mot de passe utilisable par l’utilisateur qui
en a fait la requête sur toutes les machines du domaine NIS.

Exercice 18.2. Choix du protocole de transport.


Premièrement, la taille des messages est le plus souvent faible et tient en un seul paquet. Il
n’y a donc pas de problème d’ordonnancement des paquets.
Deuxièmement, en cas de perte de message, il est possible de répéter la même requête sans
créer de problème. On parle à ce propos d’« idempotence » du service.

Exercice 18.3. Le fichier /etc/hosts.


Le site www.xxx.com est cherché sur la machine locale, où il n’est pas trouvé. Cela équivaut
donc à bloquer son accès sur cette machine.

Exercice 18.4. Le langage LDIF.


a) Le modèle d’information contient au moins la hiérarchie de classes suivante :
top

person organizationalUnit dcObject

organizationalPerson

inetOrgPerson

b) L’extrait du DIT est le suivant :


dc=monorg dc=fr

ou=ventes

cn=Jean Dupond
© Dunod – Toute reproduction non autorisée est un délit.

Exercice 19.1. QCM DHCP.


a) Oui, dans le cas d’une adresse IP affectée à une adresse MAC.
b) Non, elle peut être déjà attribuée.
c) Oui, si le réseau comprend plusieurs serveurs DHCP.
d) Oui, avec le risque de créer un conflit d’adresses.

Exercice 19.2. Paquets DHCP.


a) 192.168.1.1 (source du DHCP Offer).
b) 192.168.1.2 (destination du DHCP Offer et du DHCP ACK).
c) Non, il ignore même l’existence du serveur. C’est pourquoi il diffuse le message vers tous.
d) Il connaît le serveur car il a reçu un message DHCP Offer de lui. Mais il diffuse sa
réponse à tous pour que les autres serveurs DHCP éventuels soient aussi avertis.
280 Introduction aux systèmes informatiques

Exercice 19.3. Configuration DHCP.


a) Une adresse fixe est réservée pour unserveur, dont l’adresse MAC est indiquée.
b) L’adresse IP et le masque réseau, l’adresse de diffusion et l’adresse du routeur de sortie du
réseau.

Exercice 19.4. Relation DHCP DNS.


Non, sauf dans le cas d’un serveur DNS dynamique (DDNS). Il faut donc utiliser les adresses
dynamiques pour les machines qui n’offrent pas de services aux autres, autrement dit les
postes de travail et non les serveurs.

Exercice 20.1. Utilisateur nomade.


Le protocole IMAP, car il laisse disponibles tous les messages sur le serveur. Le protocole
POP avec l’option « laisser une copie sur le serveur » offre moins de possibilités.

Exercice 20.2. L’en-tête mystère.


Il sert dans le cas d’une requête d’une page qui existe déja dans un cache. Le serveur compare
la date dans l’en-tête, c’est-à-dire la date de dernière modification de la page du cache, avec
la date de dernière modification de la page sur le serveur et ne retourne la page que si elle est
plus récente. Sinon, le serveur retourne un code (304, not modified) qui indique que la page
dans le cache est bonne. Cela permet d’économiser de la bande passante.

Exercice 20.3. Utilité de l’en-tête Content-type et du type MIME.


Le navigateur doit savoir la nature de la page pour appeler si nécessaire un module externe
(plugin) de visualisation.

Exercice 20.4. Les agents du courrier électronique.


(1) MDA. (2) MTA. (3) MUA. (4) MTA. (5) MUA. (6) MDA.

Exercice 20.5. Traitement des messages par l’agent de distribution.


On peut citer les cas suivants :
– le filtrage des messages : spam, boîtes aux lettres multiples, etc.,
– la redirection des messages vers une autre adresse,
– la génération d’un message d’indisponibilité (vacances par exemple).

Exercice 21.1. Des URL.


a) Accès au serveur HTTP www.exemple.com sur le port 8888 pour la ressource
/chemin/page.html à l’emplacement interne (signet) enbas.
b) Accès au serveur FTP (ftp.monorg.fr) avec login (pierre) et mot de passe
(azerty) pour récupérer le fichier /pub/truc.jpg.
c) Lien vers un client de courrier électronique pour envoyer un mail à pierre.machin@
courrier.net avec le sujet Salutations avec paul.chose@courrier.net en
copie.
Corrigés des exercices 281

Exercice 21.2. Des protocoles.


DNS au niveau application, si l’adresse IP est inconnue, et UDP au niveau transport pour
DNS. HTTP au niveau application et TCP au niveau transport pour HTTP.

Exercice 21.3. Comptage de RTT (Round Trip Time).


a) RT T 1 + RT T 2 + RT T 3 + 10 × RT T w (une connexion et une requête pour la page et
pour chaque image).
b) RT T 1 + RT T 2 + RT T 3 + 6 × RT T w (une unique connexion et une requête pour la page
et pour chaque image).
c) RT T 1 + RT T 2 + RT T 3 + 3 × RT T w (une unique connexion et une requête pour la page
et pour toutes les images).

Exercice 21.4. Requête HTPP HEAD.


Des utilisations possibles :
– tester l’existence de la ressource,
– exploiter les métadonnées, par exemple pour des statistiques,
– tester si la ressource a été modifiée depuis qu’elle a été mise en cache (dates, taille).

Exercice 21.5. Personnalisation.


On peut :
– faire choisir la langue par l’utilisateur sur la page d’accueil, par exemple via un menu,
– indiquer la langue souhaitée dans la requête HTTP, grâce à l’en-tête Accept-Language.

Exercice 22.1. Appel de procédure distante.


« Au plus une fois » signifie que l’appel a été exécuté une fois ou pas du tout, ce qui exclut
les cas d’exécution partielle ou multiple. C’est au client de gérer les cas de non-exécution,
par exemple par un abandon ou par l’appel d’un autre serveur.
« Au moins une fois » autorise les exécutions multiples. C’est acceptable pour les appels
idempotents, c’est-à-dire où l’effet de deux appels successifs est identique à celui d’un appel
unique.
© Dunod – Toute reproduction non autorisée est un délit.

Exercice 22.2. Intergiciel orienté message.


a) Pas adapté au temps réel ni aux flux audio/vidéo.
b) et c) Peut convenir (asynchronisme).
d) Pas adapté au temps réel, mais pourrait convenir pour les jeux au tour par tour.

Exercice 22.3. XML.


a)
Ligne 2 : guillemets ou apostrophes manquants.
Ligne 3 : noms de balise non concordants.
Ligne 8 : plusieurs racines.
Ligne 10 : pas de balise fermante.
Ligne 11 : caractère & réservé.
282 Introduction aux systèmes informatiques

b)
<?xml version="1.0"?>
<listedenotes>
<note date="11 mars">
<a>Pierre</a>
<de>Paul</de>
<sujet>Rappel</sujet>
<corps>N’oublie pas notre RV de demain 14h.</corps>
</note>
<note date="11 mars">
<a>Paul</a>
<de>Pierre</de>
<corps>OK. On se voit demain</corps>
</note>
<note/>
</listedenotes>

Exercice 22.4. Architectures distribuées.

Requête
Tiers de service Tiers
client serveur

Architecture client/serveur (2 tiers)


Requête Requête
Tiers de service Tiers de données Tiers
client métier données

Architecture 3 tiers
Requête Requête Requête
HTTP Tiers de service Tiers de données Tiers
Navigateur
web métier données

Architecture n tiers

Exercice 22.5. Services web.


a) StadiumNames, sans paramètres.
b) StadiumInfo, avec un paramètre de type chaîne de caractères qui représente le nom du
stade.
c) La réponse CoachesResponse contient un ArrayOftCoaches où chaque tCoach
est décrit par :
<xs:complexType name="tCoaches">
<xs:sequence>
<xs:element name="sName" type="xs:string"/>
<xs:element name="TeamInfo" type="tns:tTeamInfo"/>
</xs:sequence>
</xs:complexType>
Corrigés des exercices 283

avec :
<xs:complexType name="tTeamInfo">
<xs:sequence>
<xs:element name="iId" type="xs:int"/>
<xs:element name="sName" type="xs:string"/>
<xs:element name="sCountryFlag" type="xs:string"/>
<xs:element name="sWikipediaURL" type="xs:string"/>
<xs:element name="sCountryFlagLarge" type="xs:string"/>
</xs:sequence>
</xs:complexType>

Un exemple de valeur retournée :


<tCoaches>
<sName>Didier Deschamps</sName>
<TeamInfo>
<iId>19</iId>
<sName>France</sName>
<sCountryFlag>http://footballpool.dataaccess.eu/images/flags/fr.gif
</sCountryFlag>
<sWikipediaURL>http://en.wikipedia.org/wiki/France_national_football
\_team</sWikipediaURL>
<sCountryFlagLarge>http://footballpool.dataaccess.eu/images/flags/
fr.png</sCountryFlagLarge>
</TeamInfo>
</tCoaches>
© Dunod – Toute reproduction non autorisée est un délit.
Annexe 1 : Le code ASCII
286 Introduction aux systèmes informatiques

Base 10 Base 16 Caractère Signification


0 00 NUL Null (caractère nul)
1 01 SOH Start of Header (début d’en-tête)
2 02 STX Start of Text (début de texte)
3 03 ETX End of Text (fin du texte)
4 04 EOT End of Transmission (fin de transmission)
5 05 ENQ Enquiry (demande)
6 06 ACK Acknowledge (accusé de réception)
7 07 BEL Bell (caractère d’appel)
8 08 BS Backspace (espacement arrière)
9 09 HT Horizontal Tab (tabulation horizontale)
10 0A LF Line Feed (saut de ligne)
11 0B VT Vertical Tab (tabulation verticale)
12 0C FF Form Feed (saut de page)
13 0D CR Carriage Return (retour chariot)
14 0E SO Shift Out (fin d’extension)
15 0F SI Shift In (démarrage d’extension)
16 10 DLE Data Link Escape (échappement de liaison de données)
17 11 DC1 Device Control 1 (contrôle de périphérique 1)
18 12 DC2 Device Control 2
19 13 DC3 Device Control 3
20 14 DC4 Device Control 4
21 15 NAK Negative Acknowledge (accusé de réception négatif)
22 16 SYN Synchronous Idle (inactivité)
23 17 ETB End of Transmission Block (fin bloc transmission)
24 18 CAN Cancel (annulation)
25 19 EM End of Medium (fin de support)
26 1A SUB Substitute (substitution)
27 1B ESC Escape (échappement)
28 1C FS File Separator (séparateur de fichier)
29 1D GS Group Separator (séparateur de groupe)
30 1E RS Record Separator (séparateur d’enregistrement)
31 1F US Unit Separator (séparateur d’unité)
32 20 SP Space (espace)
33 21 ! Point d’exclamation
34 22 " Guillemet
35 23 # Croisillon ou Dièse
36 24 $ Dollar (symbole)
37 25 % Pourcent
38 26 & Esperluette ou « et commercial »
39 27 ' Apostrophe
40 28 ( Parenthèse ouvrante
41 29 ) Parenthèse fermante
42 2A * Astérisque
Annexe 1 : Le code ASCII 287

Base 10 Base 16 Caractère Signification


43 2B + Plus
44 2C , Virgule
45 2D − Moins
46 2E . Point
47 2F / Barre oblique (slash)
48 30 0 Chiffre 0
49 31 1
50 32 2
51 33 3
52 34 4
53 35 5
54 36 6
55 37 7
56 38 8
57 39 9
58 3A : Deux-points
59 3B ; Point-virgule
60 3C < Inférieur
61 3D = Égal
62 3E > Supérieur
63 3F ? Point d’interrogation
64 40 @ « A commercial » (ou arrobase)
65 41 A Lettre A majuscule
66 42 B
67 43 C
68 44 D
69 45 E
70 46 F
71 47 G
© Dunod – Toute reproduction non autorisée est un délit.

72 48 H
73 49 I
74 4A J
75 4B K
76 4C L
77 4D M
78 4E N
79 4F O
80 50 P
81 51 Q
82 52 R
83 53 S
84 54 T
85 55 U
288 Introduction aux systèmes informatiques

Base 10 Base 16 Caractère Signification


86 56 V
87 57 W
88 58 X
89 59 Y
90 5A Z
91 5B [ Crochet ouvrant
92 5C \ Barre oblique inversée (ou backslash)
93 5D ] Crochet fermant
94 5E ^ Accent circonflexe
95 5F _ Tiret bas ou souligné (ou underscore)
96 60 ` Accent grave
97 61 a Lettre a minuscule
98 62 b
99 63 c
100 64 d
101 65 e
102 66 f
103 67 g
104 68 h
105 69 i
106 6A j
107 6B k
108 6C l
109 6D m
110 6E n
111 6F o
112 70 p
113 71 q
114 72 r
115 73 s
116 74 t
117 75 u
118 76 v
119 77 w
120 78 x
121 79 y
122 7A z
123 7B { Accolade ouvrante
124 7C | Barre verticale
125 7D } Accolade fermante
126 7E ~ Tilde
127 7F DEL Delete (effacement)
Annexe 2 : Mémento Unix
290 Introduction aux systèmes informatiques

Cde Description Exemple


alias Lister les alias ou en créer alias la=’ls -A’
at Exécuter une commande à cette date at 3:59 -f /bin/sauver
basename Extraire le nom de fichier d’un chemin basename /usr/bin/sort
bg Placer un processus en arrière-plan bg %1
cal Afficher le calendrier d’un mois ou année cal 3 2016 ou cal 2016
cat Afficher et concaténer des fichiers cat fich ou cat fich1 fich2
cd Changer de répertoire courant cd rep ou cd ou cd ˜ ou cd ..
chgrp Changer le groupe d’appartenance chgrp latex fich.tex
chmod Changer les droits d’accès chmod 644 fich
chown Changer le propriétaire chown toto fich
clear Effacer l’écran du terminal clear
cmp Comparer deux fichiers cmp fich1 fich2
cp Copier des fichiers cp fich rep
cut Afficher des colonnes ou champs cut -c 1-3 fich (3 caractères)
date Retourner ou changer la date système date ou
date -s "3/20/2016 4:39:00"
dd Copier bloc à bloc des fichiers ou cloner dd if=/dev/sda of=/dev/sdb
des disques conv=notrunc,noerror
df Afficher l’espace disque disponible df ou df -h (plus lisible)
diff Comparer des fichiers ou répertoires diff fich1 fich2 ou rep1 rep2
du Afficher l’espace disque utilisé du ou du *.tex
echo Afficher une ligne de texte echo bonjour le monde !
env Afficher les variables d’environnement env
exit Quitter le shell courant exit ou exit 0
export Exporter les variables du shell export VAR
expr Évaluer une expression Z=‘expr $X + 4‘
fg Passer un processus d’arrière-plan fg %1
en premier plan
file Afficher le type de contenu file fich
find Rechercher selon des critères multiples find . -name ".c"
finger Afficher les données d’un utilisateur finger toto
free Afficher la mémoire libre free
grep Rechercher dans des fichiers grep bonjour fich
groups Afficher les groupes d’un utilisateur groups ou groups toto
gunzip Décompresser un fichier gunzip fich
gzip Compresser un fichier gzip fich
head Afficher le début d’un fichier head -n 20 fich (20 lignes)
help Afficher l’aide en ligne (cdes internes) help cd
history Afficher les dernières commandes saisies history
id Afficher les attributs UID, GID... id
jobs Afficher les processus en arrière-plan jobs
Annexe 2 : Mémento Unix 291

Cde Description Exemples


kill Envoyer un signal à un processus kill -9 1234
less Afficher page par page (bas ou haut) less fich
ln Créer des liens physiques ou symboliques ln -s /usr/local/bin/sauver
locate Trouver des fichiers par leurs noms locate fich
logname Afficher le nom de l’utilisateur connecté logname
lpq Afficher l’état des files d’impression lpq
lpr Imprimer des fichiers lpr fich
lprm Annuler une requête d’impression lprm ou lprm 345
ls Lister les fichiers d’un répertoire ls ou ls -l ou ls -a ou ls -al
man Afficher l’aide en ligne (cdes externes) man ls
mesg Autoriser/interdire les messages de write mesg y ou mesg n
mkdir Créer un répertoire mkdir rep
more Afficher page par page more fich
mv Déplacer ou renommer des fichiers mv fich1 fich2 ou mv fich rep
newgrp Changer l’utilisateur de groupe newgrp developpeurs
nice Lancer une commande avec une priorité nice -5 cc prog.c
modifiée
nl Afficher en numérotant les lignes nl fich
nohup Ignorer les signaux pour un processus nohup cp fich1 fich2
od Afficher en octal ou autres formats od fichier
passwd Modifier le mot de passe utilisateur passwd
pg Afficher page par page pg fich.tex
pr Afficher avec un format pr -2 fich (2 colonnes)
ps Afficher l’état des processus ps ou ps -l ou ps -e
pstree Afficher les processus en arbre pstree
pwd Afficher le répertoire courant pwd
read Lire des valeurs de variables read nom prenom
rm Supprimer un fichier rm fich ou rm -i fich
© Dunod – Toute reproduction non autorisée est un délit.

rmdir Supprimer un répertoire rmdir rep


sed Éditer du texte non interactivement sed ’s/Mr./M./g’ fich.txt
(remplacement global)
set Définir les variables d’environnement set PATH="/bin:/usr/bin:
/usr/sbin:usr/local/bin:"
shift Décaler les paramètres du shell shift ou shift 4
sleep Attendre un certain temps sleep 10 (secondes)
sort Trier des fichiers sort -n nombres (tri numérique)
split Découper un fichier split -l 300 file new
(donne newaa, newab... de 300 lignes)
stty Configurer une interface série stty -echo (supprime affichage)
su Changer l’utilisateur courant su - toto ou su (root)
sudo Exécuter comme root sudo apt-get update
292 Introduction aux systèmes informatiques

Cde Description Exemples


tac Afficher le contenu inversé tac fich
tail Afficher la fin d’un fichier tail -n 20 fich (20 lignes)
tar Archiver au format tar tar -cf arch.tar fich1 fich2
tee Dupliquer un flux de données ls -1 *.txt|wc -l|tee nb.txt
(le nombre est affiché et enregistré)
test Tester une condition test -f /test
time Calculer la durée d’exécution time df
top Afficher les processus en continu top
touch Modifier les dates d’un fichier touch fich
ou créer un fichier vide
tr Convertir des caractères tr ’a-z’ ’A-Z’ < fich
tty Afficher l’entrée standard tty
type Afficher le mode d’interprétation type ls
umask Définir les droits par défaut umask 0022
unalias Supprimer un nom d’alias unalias la
uname Afficher les caractéristiques du système uname -a
uniq Rassembler les lignes consécutives unique fich
identiques
unset Supprimer des définitions de variables unset VAR
vmstat Afficher la mémoire virtuelle vmstat
wait Attendre la fin d’un processus wait 1234
wall Envoyer un message à tous wall message
wc Compter les caractères, mots, lignes wc -l fich
which Afficher le chemin d’accès which sh
who Afficher les utilisateurs connectés who
whoami Afficher nom et identifiant de l’utilisateur whoami
write Envoyer un message privé write toto
xargs Fabriquer les arguments depuis stdin find . -name "fich*"|xargs rm
Bibliographie

[BAS15] BASH. Bourne-Again SHell manual. 2015. URL : https : / / www . gnu .
org/software/bash/manual/
[BBMF09] Pierre-Jean B ENGHOZI, Sylvain B UREAU et Françoise M ASSIT-F OLLÉA.
L’Internet des Objets. 2009. URL : http://books.openedition.org/
editionsmsh/84
[CER14] CERNA. Éthique de la recherche en robotique. 2014. URL : http : / /
cerna - ethics - allistene . org / digitalAssets / 38 / 38704 _
Avis_robotique_livret.pdf
[GM13] Laurent G ILLE et François M ARCHANDISE. La dynamique d’Internet –
Prospective 2030. Commissariat général à la stratégie et à la prospective,
2013. URL : http://www.strategie.gouv.fr/publications/
dynamique-dinternet-prospective-2030
[GNU10] GNU. GNU sed user’s manual. 2010. URL : https://www.gnu.org/
© Dunod – Toute reproduction non autorisée est un délit.

software/grep/manual
[GNU16] GNU. GNU grep : Print lines matching a pattern. 2016. URL : https://
www.gnu.org/software/sed/manual
[GOO] GOOGLE. Shell Style Guide. URL : https://google- styleguide.
googlecode.com/svn/trunk/shell.xml
[IEE13] IEEE. The Open Group Base Specifications Issue 7 – IEEE Std 1003.1. 2013.
URL : http://pubs.opengroup.org/onlinepubs/9699919799/
[ISO94] ISO. Information Technology – Open Systems Interconnection – Basic
Reference Model : The Basic Model. 1994. URL : http : / / standards .
iso.org/ittf/licence.html#fr
[Lon14] Jacques L ONCHAMP. Conception d’applications en Java/JEE. Principes,
patterns et architectures. Dunod, 2014.
294 Introduction aux systèmes informatiques

[MES13] MESR. Programme pédagogique national - DUT informatique. 2013. URL :


http://www.iut-informatique.fr/programme.php
[Ren14] Benjamin R ENAUT. Introduction à Hadoop & MapReduce. 2014. URL : http:
/ / cours . tokidev . fr / bigdata / cours / mbds _ big _ data _
hadoop_cours_1.pdf
[Uf16] U BUNTU - FR. NFS : Network File System – le partage réseau sous Linux. 2016.
URL : https://doc.ubuntu-fr.org/nfs
[W3C04] W3C. Web Services Architecture. 2004. URL : http://www.w3.org/TR/
ws-arch
[W3C14] W3C. HTML5. 2014. URL : http://www.w3.org/TR/html5
Index

absolute path, 119 arrière-plan, 112


accès aux fichiers distants, 185 ASCII, 81
accès direct, 21 ASCII étendu, 81
accès séquentiel, 21 ASN.1, 236
Active Directory, 202 assembleur, 39
adressage basé, 39 ATA, 27
adressage direct, 39 attente active, 51
adressage immédiat, 39 Axis, 234, 248
adressage implicite, 39
adressage indexé, 39 backbone, 63
adressage indirect, 39 background, 112
adressage indirect par registre, 39 baie de stockage, 31
adressage par registre, 39 balise, 224
adresse disque, 27 bascule, 23
adresse IP, 59 base, 71
adresse mémoire, 23 bash, 142
adresse MAC, 58, 61 BGP, 66
adresse mail, 210 bibliothèque dynamique, 104
AES, 179 bibliothèque standard, 101
bibliothèque statique, 104
AFNIC, 195
big data, 67, 249
AFP, 31
big-endian, 74
agent utilisateur, 210
binaire, 71
aide en ligne, 144
bind, 198
alias, 142 BIOS, 28, 155
amorçage, 155 bit, 22
analyse lexicale, 103
© Dunod – Toute reproduction non autorisée est un délit.

bit caché, 80
analyse syntaxique, 103 bit de parité, 88
Android, 15 bit de signe, 75
annuaire, 193, 236, 244 bloc, 25
ant, 105 blog, 230
Apache, 167, 227 box, 61
API, 12, 98, 233 bridge, 37
appel distant, 234 broadcast, 53
appel système, 102 broker, 238
appliance, 1, 30 browser, 227
application distribuée, 233 bus, 37
application réseau, 165
arborescence des fichiers, 117 cache, 42
arborescence des processus, 108 calcul arithmétique, 146
architecture de référence, 12 caractère de remplacement, 119
archivage, 27 chaîne de caractères, 146
argument, 143 chargeur, 104
296 Introduction aux systèmes informatiques

checksum, 52 couche distribution, 233


chemin d’accès, 119 couche du langage machine, 13
chemin d’accès absolu, 119 couche du microcode, 13
chemin d’accès relatif, 120 couche du milieu, 14
Chrome, 227 couche du noyau, 13
chroot, 171 couche du système d’exploitation, 13
CIDR, 60 couleurs indexées, 85
CIFS, 31, 188 couleurs vraies, 85
circuit combinatoire, 41 couplage, 238
circuit intégré, 42 courrier électronique, 209
circuit logique, 41 CPL, 62
circuit séquentiel, 41 CPU, 35
CISC, 43 cryptographie à clé secrète, 178
classe d’adresses IP, 59 cryptographie assymétrique, 179
classe d’utilisateurs, 136 cryptographie symétrique, 178
client léger, 243 CSS, 225
client lourd, 243 CUPS, 130
client X, 129 cylindre, 27
client/serveur, 165
cloud, 4, 32 DAS, 28
cluster, 45, 46 datagramme, 57
CMS, 230 DCB, 74
codage, 71, 81 débordement, 73
code à barres, 89 décimal codé binaire, 74
code correcteur d’erreur, 88 décodeur, 23
code d’erreur HTTP, 224 DHCP, 205
code détecteur d’erreur, 88 directives, 40
code opération, 36, 39 directory, 117
code retour, 143 disque, 26
commande, 143 distinguished name, 200
commande composée, 143 DIT, 200
commande externe, 118, 144 DMA, 52
commande interne, 112, 118, 144 DMZ, 62
commutateur, 61 DNS, 194
commutation de circuits, 55 domaine, 195
commutation de paquets, 55 donnée, 3
commutation de paquets en mode connecté, 55 dorsale, 63
compilateur, 103 DRAM, 23
complément à 1, 76 Dreamweaver, 230
complément à 2, 75 driver, 98, 102
composant riche, 243 droit, 136
compression, 86 Drupal, 230
compteur ordinal, 36 DSA, 179
concentrateur, 60 DSDV, 66
conditionnelle, 148 DSM, 45
configuration automatique, 205 DSR, 66
connexion à distance, 175 DTD, 245
console, 129 dump, 74
conteneur, 241
conteneur d’EJB, 243 éditeur de liens, 104
conteneur web, 243 EEPROM, 28
contrôleur d’entrée/sortie, 37, 52 EJB, 229, 243
contrôleur mémoire, 37 empreinte, 180
cookie, 228 émulateur de terminal, 129
couche, 11 entier naturel, 73
couche basse, 13 entier relatif, 75
couche des applications, 14 entrée, 200
couche des services système additionnels, 13 entrée standard, 109
Index 297

entrées/sorties programmées, 51 grille, 47


environnement de bureau, 129 gros-boutiste, 74
envoi broadcast, 53 groupe, 135
envoi de message, 238 GRUB, 159
envoi multicast, 53 GSM, 64
epoch, 74 GUID, 138
EPROM, 28
équilibrage de charge, 48, 197 hachage, 179, 180
ESMTP, 212 Hadoop, 249
espace utilisateur, 101 handover, 65
état d’un processus, 108 haute disponibilité, 47
Ethernet, 53, 58 HBase, 251
excédent, 77 HDFS, 251
exception, 38 hexadécimal, 72
expression régulière, 122, 123 hiérarchie des mémoires, 21
extéroceptif, 8 home, 122
extension, 119 horloge, 36, 42
host aliasing, 197
Facebook, 230 HTML, 224
FAI, 2, 63 HTML 5, 225
FCOE, 32 HTTP, 167, 221, 244
feuille de style en cascade, 225 HTTP 1.0, 221
FHS, 118 HTTP 1.1, 221
FibreChannel, 32 HTTP 2.0, 222
fichier, 117 hub, 60
fichier spécial, 117 hyperviseur, 17
FIFO, 25
file, 117, 239 IAAS, 5
file system, 157 ICANN, 195
FileZilla, 171 ICEFaces, 244
filtre, 110 identification automatique des objets, 89
fingerprint, 180 IDL, 236
Firefox, 227 IEEE 754, 79
firewall, 61, 62 IETF, 56
firmware, 14 IIS, 227
fonction, 149 IMAP, 210, 214
foreground, 112 imprimante, 131
format bitmap, 84 information, 3
format de transformation universelle, 82 init, 108
format vectoriel, 84 inode, 157
forum, 230 installation, 155
instruction arithmétique et logique, 39
© Dunod – Toute reproduction non autorisée est un délit.

fournisseur, 238
FPU, 35, 42 instruction de branchement, 39
FQDN, 196 instruction de transfert, 39
frame, 57 intergiciel, 14, 234
FTP, 58, 169, 244 Internet, 63
Internet des objets, 9, 67
gateway, 61 interpréteur de commandes, 141
gestionnaire d’amorçage, 159 interprète, 103
gestionnaire de fenêtres, 129 interruption, 38, 52
gestionnaire de paquets, 159 interruptions hıérarchisées, 38
GID, 135 IP, 57, 165
GlassFish, 229, 242 IPC, 127
GNOME, 129 IPX, 63
Google, 230 IRC, 210
GPT, 157 IRQ, 38
grep, 122 iSCSI, 32
grid, 47 itération, 148
298 Introduction aux systèmes informatiques

JAAS, 243 mémoire centrale, 22


Jabber, 210 mémoire flash, 26, 28
JAX-WS, 248 mémoire morte, 22, 28
JCA, 243 mémoire partagée distribuée, 45
JDBC, 243 mémoire persistante, 21
JEE, 234, 242 mémoire virtuelle, 24, 100
jeu d’instructions, 38, 43 mémoire vive, 21
Jingle, 210 mesh network, 66
JMS, 234, 243 messagerie, 209
JNDI, 243 messagerie instantanée, 209
joker, 119 microcontrôleur, 1
Joomla, 230 microprocesseur, 42
JPA, 243 middleware, 14, 234
JPEG, 86 MIME, 210, 214, 223, 238
JSF, 243 mirroring, 29
JSP, 228, 243 MJPEG, 87
JTA, 243 MMU, 24
modèle OSI, 56
KDE, 129 mode actif, 170
keep-alive, 167, 221 mode bloc, 117
Kerberos, 187, 194 mode caractère, 117
mode connecté, 54
langage d’assemblage, 39 mode d’adressage, 39
langage de commandes, 141 mode non connecté, 54
langage machine, 38 mode noyau, 102
langage shell, 141 mode passif, 170
LBER, 202 mode utilisateur, 102
LDAP, 198 modem, 60
lecteur réseau, 188 MOM, 234
liaison multiplexée, 54 monocœur, 43
lighttpd, 227 montage, 119
ligne, 25 mot, 23
LILO, 159 mot de passe, 135
LinkedIn, 230 mot mémoire, 22
Linux, 100 MP3, 84
little-endian, 74 MPEG, 87
load balancing, 48 MPI, 45
localité spatiale, 25 MTA, 210
localité temporelle, 25 MUA, 210
logiciel d’émulation, 17 multi-amorçage, 159
LRU, 25 multi-utilisateur, 135
multicœur, 43, 46
machine abstraite, 98 multiplexage, 222
machine virtuelle, 104 multiprocesseur symétrique à mémoire
mail server aliasing, 197 partagée, 44
make, 105
mandataire, 61 n-tiers, 240
MANET, 66 NAS, 30
MapReduce, 249 NAT, 59
Mars, 251 navigateur, 227
marshalling, 235 NetBEUI, 188
masquage des interruptions, 38 NetBIOS, 188
masque, 59 NFC, 67
MBR, 156 NFS, 31, 185
MD5, 179 Nginx, 167
MDA, 211 nginx, 227
mémoire, 21 NIC, 194
mémoire cache, 24 NIS, 194
Index 299

nombre réel, 78 pont nord, 37


normalisation, 78 pont sud, 37
noyau, 101 POP, 64, 177, 210, 213
numérisation, 71, 83 port, 165
numérisation de la vidéo, 87 port forwarding, 181
numérisation des images, 84 portail, 230
numérisation du son, 83 porte logique, 40
NUMA, 45 portmapper, 187
NVT, 176 POSIX, 101
PPID, 108
octal, 72, 137 préemptif, 100
octet, 22 premier plan, 112
OLSR, 66 PrimeFaces, 244
ontologie, 68 processeur, 35
Open LDAP, 202 processus, 107
Open MP, 44 PROM, 28
OpenSSH, 180 proprioceptif, 8
option, 143 protocole, 56
orchestration, 248 protocole d’accès, 213
ordonnanceur, 108 provider, 238
OSPF, 61, 66 proxy, 61
proxy web, 228
P2P, 166 pseudo-parallélisme, 100, 109
PAAS, 5 pseudo-terminal, 129
page, 24 publier/souscrire, 239
page HTML dynamique, 221 pull, 239
page HTML statique, 221 push, 239
pagination, 100
paquet, 55, 159 QR code, 89
paramètre, 144 quantum, 109
paramètre de position, 145
paramètre spécial, 145 RADIUS, 194
pare-feu, 61 RAID, 28, 31
parité double, 88 RAID 0, 28
partition, 156 RAID 1, 29
partition active, 156 RAID 5, 29
partition d’échange, 156 RAM, 23
passerelle applicative, 61 RAM dynamique, 23
path, 119, 142 RAM statique, 23
permission, 136 redirection, 109
petit-boutiste, 74 redondance, 48, 88
PGP/MIME, 216 redondance active, 48
© Dunod – Toute reproduction non autorisée est un délit.

Phoenix, 251 redondance passive, 48


PHP, 228 redondance temporelle, 87
phpBB, 230 regexp, 123
PID, 107 registrar, 195
Pidgin, 210 registre, 22
pilote, 98, 102, 186 registre adresse mémoire, 23
pipe, 128 registre donnée mémoire, 23
pipeline, 42 registre général, 22
pipeline HTTP, 221 registre instruction, 36
piste, 27 registre microarchitectural, 22
plugin, 227 registre spécialisé, 22
point à point, 239 relative path, 120
point de code, 82 répéteur, 61
point unique de défaillance, 48 répertoire, 117
pont, 37, 61 répertoire courant, 122
pont filtrant, 61 représentation, 71
300 Introduction aux systèmes informatiques

réseau, 53 serveur DNS récursif, 197


réseau à diffusion, 53 serveur HTTP, 227
réseau ad hoc dynamique, 66 serveur SMTP, 210
réseau communté, 54 serveur X, 129
réseau d’entreprise, 62 service, 12
réseau de stockage, 31 service web, 234, 244
réseau domestique, 61 servlet, 228, 243
réseau maillé, 66 session, 227
réseau sans fil, 64 SFTP, 169
réseau virtuel privé, 182 SGF, 117, 157
réservation d’adresse IP, 206 SHA, 179
résolution des noms, 196 shell, 101, 141
résolution inverse, 197 SIGINT, 131
resolver, 198 SIGKILL, 131
restes successifs, 72 signal, 127, 131
RFC, 56 SIGTERM, 131
RFID, 67, 90 SIMPLE, 210
RGB, 85 SIP, 210
RichFaces, 244 skeleton, 235
RIP, 61 SMB, 188
RISC, 43 SMP, 44
RLE, 86 SMS, 209
RMI, 234, 243 SMTP, 210, 244
robot, 8 snapshot, 158
ROM, 28 SNMP, 166
root, 118, 135 SOAP, 243, 247
Round Trip Time, 221 socket, 128
routage, 57, 66 solveur de noms, 198
routeur, 54, 57, 61 sortie d’erreur standard, 109
RPC, 187, 194, 234 sortie standard, 109
RSA, 179 souche, 235
RTC, 55 sous-réseau, 60
RTCP, 229 SPOF, 48
RTP, 229 spool, 130
RTSP, 229 SRAM, 23
RTT, 221 SSD, 26
SSH, 178
S/MIME, 216 SSL, 32
séquenceur de commandes, 36 STARTTLS, 216
SAAS, 5 station de base, 64
Samba, 189 stderr, 109
SAN, 31 stdin, 109
SATA, 27 stdout, 109
sauvegarde, 27, 31 sticky bit, 138
sauvegarde complète, 27 streaming, 165, 229
sauvegarde différentielle, 27 stripping, 28
sauvegarde incrémentale, 27 stub, 235
schéma XML, 245 sudo, 138
scheduler, 108 SUID, 138
script, 143 superscalaire, 43
SCSI, 27 superutilisateur, 118, 135
secteur, 27 supervision, 166, 237
secteur de boot, 156 swap, 156
sed, 122 switch, 61
serveur d’applications, 240, 248 syscall, 102
serveur d’impression, 130 système à architecture mémoire non uniforme, 45
serveur de noms, 196 système à mémoire distribuée, 43
serveur de stockage en réseau, 30 système à mémoire partagée, 43
Index 301

système d’exploitation, 97 UAL, 35


système d’information, 3 UDDI, 246
système de fichiers, 157 UDP, 57, 165
système de fichiers distribué, 158 UID, 135
système de fichiers en réseau, 158 unicast, 53
système de gestion de fichiers, 117 Unicode, 82
système de numération, 71 unité arithmétique et logique, 35
système embarqué, 98 unité centrale de traitement, 35
système enfoui, 14 unité d’entrée/sortie, 51
système informatique, 1, 3 unité de calcul flottant, 35
système informatique d’organisation, 3 unité de calcul vectoriel, 35
système informatique de contrôle et commande, 6 unité de commande, 36
système informatique distribué, 4 unité de prédiction de branchement, 43
système informatique embarqué, 7 Unix, 100
système informatique enfoui, 7 unmarshalling, 236
système informatique personnel, 2 URI, 220, 244
système informatique temps réel, 6 URL, 220
système multi-utilisateur, 100 URN, 221
système multitâche, 100 UTF, 83
système parallèlle, 43
système temps partagé, 98 variable, 144
système temps réel, 98 variable d’environnement, 141
système transactionnel, 98 vecteur d’interruption, 38
VFS, 186
tableau, 145 Viber, 210
talon, 235 virgule fixe, 80
TCP, 57, 165 virgule flottante, 80
Telnet, 175 virtualisation, 16
temps partagé, 100, 109 voix sur IP, 165
terminal, 128 Von Neumann, 19
terminal virtuel, 129 VPN, 182
terminal X, 129
test, 146 web, 219
TFTP, 169 web sémantique, 68
thread, 167 webmail, 210
TLD, 195 whois, 195
Token Ring, 58 wiki, 230
tolérance aux pannes, 47 wildcard, 119
Tomcat, 228, 248 WSDL, 246
topic, 239
traitant d’interruption, 38 X, 129
trame, 57 X Window, 129
© Dunod – Toute reproduction non autorisée est un délit.

transfert de fichier, 169 X.500, 198


transformée de Fourier, 84 X11, 129
transformée en cosinus discrète, 86 XDR, 187, 236
trap, 102 XML, 244
trappe, 38 XML-RPC, 234
trois tiers, 240 XMPP, 210
tube, 110, 128
tunnel SSH, 181 YouTube, 230
tunnel SSH inversé, 182
tunnel SSL/TLS, 215 zombie, 109
Twitter, 230 zone démilitarisée, 62

Vous aimerez peut-être aussi