Académique Documents
Professionnel Documents
Culture Documents
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
PARTIE 1
LES COUCHES BASSES
Exercices 33
PARTIE 2
LA COUCHE SYSTÈME/RÉSEAU
PARTIE 3
LES COUCHES HAUTES
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
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.
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 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.
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.
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
Processeur(s) Autre
... composant ...
Ordinateur
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.
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
Système
informatique
(niveau des données)
Ordinateurs
Ressources matérielles,
logicielles, données
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
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.
Procédé
Mesures Commandes
Capteur Actionneur
Consignes Visualisations
Opérateur
Opérateurs
Supervision
Commande-contrôle
Procédé complexe
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.
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
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.
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.
EXERCICES
Utilisateurs
...
Couche i+1
Utilise les Ore ses
services de services à
Couche i
...
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
5. Couche des
applications Couches
hautes
4. Couche
distribution
– 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
Dans la suite de l’ouvrage, les deux dernières couches, 4 et 5, sont parfois regroupées sous le
vocable « couches hautes ».
Firmware
Langage machine
Microcontrôleur
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.
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
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.
® 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.
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
Machines virtuelles
Hyperviseur
Couches basses
EXERCICES
Processes
Operating system
Assembler
Firmware
Hardware
Réseau physique
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.
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
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
– 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
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.
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
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
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.
Mémoire
Processeur Mot Cache Bloc
centrale
Secteur
Tête
Bras
Piste
Vue du haut
Vue de côté
Plateau
Surface
Armature
Cylindre
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).
® 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
® 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.
® 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
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.
Clients
LAN
NAS
Serveurs
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.
Clients
LAN
Paquets
Serveurs
SAN
© Dunod – Toute reproduction non autorisée est un délit.
Blocs
Baies de
stockage
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.
EXERCICES
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
Application
Application Application
Filesystem
Filesystem
LAN
Disque
SAN
DAS Filesystem
Disque Disque
NAS SAN
Chapitre 4
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
® 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’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.
Mémoire
centrale
Bus
mémoire Bus d'extension PCI
Carte
graphique
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).
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 ».
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
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
« 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
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.
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
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
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
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
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
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
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
Die 1 Die 2
IFU DEC ALU FPU
Coeur 1 Coeur 2 Coeur 3 Coeur 4
Bus données
Mémoire Contrôleur
centrale Contrôleur
d'E/S
mémoire
Noeud 0 Noeud 1
Coeur 0 Coeur 4 Coeur 3 Coeur 7
E/S Cache L1 Cache L1
Cache L2 Cache L2
Cache L3 Cache L3
Interconnexion NUMA
Noeud 2 Noeud 3
Coeur 2 Coeur 6 Coeur 1 Coeur 5
E/S
Cache L3 Cache L3
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.
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
Base de données
EXERCICES
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 ...
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
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.
Réseau à diusion
Bus
Equipement
Anneau
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
® 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.
cette manière. L’arbre de choix de la figure 5.4 synthétise ces principales mises en œuvre des
réseaux.
Commutation...
TCP/IP UDP/IP
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
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
® 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
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).
® 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
– 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.
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
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
Réseau interne
Serveurs applicatifs
IXP
Dorsale Niveau
Niveau
1 Niveau
2
3
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
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.
Sans l
Filaire Point
PA PA PA
d'accès
Client
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,
Cellule Cellule
SB2 2 3
SB3
SB1 SB4
Cellule
Cellule
1
4
Téléphone A Téléphone B
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 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
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
Internet
Eth0
LAN Firewall Wan0
172.16.0.0 /16
Eth1
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.
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.
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.
1 1 (1)0 1 01
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.
– 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.
Pour ces raisons, cette forme de représentation en machine n’est plus utilisée aujourd’hui.
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
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 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.
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].
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
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.
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.
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.
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.
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
0,99
0,92 0,88
0,85
0,80
0,60
0,28
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.
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.
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.
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.
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 !
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.
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.
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.
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.
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.
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.
EXERCICES
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
b) Comment transformer le code ASCII sur 8 bits d’une minuscule dans le code de la même
lettre en majuscule ?
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 :
La couche système/réseau
Chapitre 7
Utilisateur
© Dunod – Toute reproduction non autorisée est un délit.
Application
Interface
API utilisateur
Système d'exploitation
Matériel informatique
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.
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
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.
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é.
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
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).
Contrôle du matériel
Matériel
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.
PS Compilateur PO
exécution
M ou autre M actions
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.
Instruction
Interprète {Instructions} LM
PS
exécution
M M actions
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
Module
Module
Compilation objet Programme
source Edition
translatable objet
de liens translatable
... ... ...
Module
Module Chargement
Compilation objet
source
translatable
Programme
objet absolu
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
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
init
Processus
Processus
de l'utilisateur
U2
Processus Processus
de l'utilisateur système
U1
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.
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.
Sortie
standard
stdout
Processus
Entrée Sortie
standard d'erreur
stdin standard
stderr
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.
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
Code Code
Exécution
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
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
EXERCICES
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
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.
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 ...
– 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.
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.
/
répertoire
chier
home
ordinaire
zoe arthur
latex
f2.jpeg
cv.tex
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
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
L’éditeur non interactif sed permet beaucoup d’autres manipulations sur les textes qui ne
sont pas détaillées ici ([GNU10]).
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.
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
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).
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
Les sockets peuvent également être utilisés sur une seule machine, pour assurer la
communication entre des processus locaux.
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).
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
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...)
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).
– 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.
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.
EXERCICES
écran
data cd1 cd2 res1 cd3
res2
ferr
Chapitre 11
La gestion de la sécurité
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.
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.
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.
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.
Remarque
On trouve dans beaucoup de distributions des commandes interactives pour la création des
utilisateurs et des groupes, nommées adduser et addgroup.
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
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
La programmation shell
– 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.
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
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].
À 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).
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).
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
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.
Exemple
L’appel prog v1, v2 implique que $# vaut 2, $@ vaut v1 v2, $0 vaut prog, $1 vaut
v1 et $2 vaut v2.
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
$ [[ -d ~/cours ]]
$ echo $? # affiche 0 ou 1 selon que le repertoire existe ou non
$ 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
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.
while condition ; do
commande(s)
done
#!/bin/bash
x=1
while (( x <= 5 )) ; do
xterm &
(( x++ ))
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
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
#!/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
b) Un exemple d’exécution
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
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.
(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
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.
chageur du système
BIOS appel ou gestionnaire
d'amorçage
MBR
Partition active
appel
appel
Secteur Secteur
Partition 3 Partition 4
de boot de boot
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).
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
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
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.
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.
EXERCICES
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
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
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.
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
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
– À 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).
EXERCICES
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
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
Initiateur de la connexion
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.
$ 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.
EXERCICES
commande
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
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
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.
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.
clé partagée
clé secrète clé secrète
Alice Bob
Alice Bob
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.
(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$.
– 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 .
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
EXERCICES
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
Matériel
Disque Réseau
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
$ 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
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)
[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.
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
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.
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
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
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.
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
monordi.univ-lorraine.fr hôtes
– 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.
(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
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.
$ 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.
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.
Classe Description
name Nom.
cn Nom commun (common name).
© Dunod – Toute reproduction non autorisée est un délit.
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
organizationalPerson
inetOrgPerson
dc=iuta dc=univ-lorraine
distinguished name
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
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)
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.
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
(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
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
par :
iface eth0 inet dhcp
© Dunod – Toute reproduction non autorisée est un délit.
208 Exercices
EXERCICES
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.
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).
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
RCPT TO:
.
5 4
QUIT
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
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.
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.
À 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
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
---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---
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é.
EXERCICES
Le web
– 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.
C’est le rôle des URL (Uniform Resource Locator) et de leur sur-ensemble, les URI
(Universal Resource Identifier).
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.
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
requête objet2
RTT transfert
objet2
temps
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.
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.
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 »).
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
À 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.
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>
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).
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.
requête n + cookie
stockage
cookie
– 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).
métachier
RTSP métachier + cdes
Lecteur de RTP ux Serveur de
médias streaming
RTCP statistiques
Client
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
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
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
calcul, etc.,
– plus globalement, l’informatique, les télécommunications et les médias convergent et
s’interpénètrent de plus en plus.
– 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.
Client Serveur
sélection
le d'attente
t
appel (paramètres)
attente traitement
résultttats réponse
é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.
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
(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.
requête/réponse supervision
BD
© Dunod – Toute reproduction non autorisée est un délit.
Equipements
application de
notication supervision
BD
Equipements
envoyer consommer
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
Client Client
délivrer(mess)
Topics
22.5.1 La problématique
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.
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
(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).
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.
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
Les EJB n’offrent pas d’interface utilisateur. La couche présentation est séparée de la couche
applicative.
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.
<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é.
Annuaire
1. Description
du service
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
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>
WSDL
génération top/down
Client
Java Serveur
SOAP
HTTP Servlet JAX-WS
Autre
client
(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.
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
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 />
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
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)
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).
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
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.
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
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
Remarque : toutes les opérations doivent être réalisées dans des mots de même taille.
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
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.
– 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
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).
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"
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
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
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é.
b)
chmod 755 /dirs/public
chmod 777 /dirs/private
c)
mount -t nfs serveur.monorg.fr:/home/moi/public /mnt/public
organizationalPerson
inetOrgPerson
ou=ventes
cn=Jean Dupond
© Dunod – Toute reproduction non autorisée est un délit.
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>
Requête
Tiers de service Tiers
client serveur
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
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>
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
[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
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
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