exploitation des systemes unix/linux et windows

publicité
EXPLOITATION DES SYSTEMES
UNIX/LINUX ET WINDOWS
Architecture, conception, utilisations,
administration, sécurité
Jacques PHILIPP
AVANT PROPOS
Les services fournis par l'ordinateur personnel se sont généralisés avec ses évolutions
technologiques. Devenu fournisseur multimédia des services du Web, téléphone
mobile, console de jeux, serveur d'applications, outils bureautique, etc., il a intégré les
technologies objets ainsi que les systèmes d'exploitation permettant de l'utiliser.
Les systèmes propriétaires Windows et les systèmes ouverts basés sur le système Unix
(Solaris, Free BSD, Linux, etc.) dominent le marché en ce début du 21ième siècle. Ces
systèmes différents et historiquement incompatibles sont devenus interopérables grâce
à l'évolution des normes et des standards.
L'objectif du présent ouvrage est de présenter :
• les concepts de base d'architecture des ordinateurs personnels et des systèmes
d'informations,
• les principes généraux de conception des systèmes d'exploitation,
• les outils constituant l'environnement sécurisé de l'ordinateur personnel, ainsi que
ceux permettant de l'administrer.
La première partie de l'ouvrage retrace l'histoire des systèmes d'informations et celle
de la conception des systèmes permettant de les exploiter en mettant en évidence leurs
architectures matérielle et logicielle, les techniques nécessaires à leur développement,
les différences culturelles profondes entre systèmes propriétaires et système ouverts.
La deuxième partie présente quelques mécanismes fondamentaux des systèmes
d'exploitations (gestion des travaux, des fichiers, etc.) illustrés par une présentation
orientée objet des systèmes Unix/Linux et Windows.
Sont ensuite présentés les interprètes de commandes d'Unix/Linux, les principes et
outils d'administration permettant d'exploiter au mieux les ordinateurs personnels.
Public : étudiants des 1er et 2nd cycles universitaires, élèves ingénieurs, ingénieurs
informaticiens, BTS, IUT…
TABLE DES MATIERES
CHAPITRE I :
L'HISTOIRE DU TRAITEMENT DE L'INFORMATION
9
1.
Du boulier chinois aux systèmes propriétaires
2.
L'évolution vers les systèmes ouverts
12
3.
Historique d'Unix
16
4.
Quelques applications des systèmes d'informations
21
CHAPITRE II :
ARCHITECTURE DES ORDINATEURS PERSONNELS
9
23
1.
Systèmes d'informations
23
2.
Représentation numérique de l'information
26
3.
Unité centrale des ordinateurs personnels
28
4.
Compléments sur le système matériel
47
5.
Tolérance de pannes et technologie RAID
54
6.
Systèmes de stockage distribués nas et san
55
7.
Exercice
55
CHAPITRE III : GENERALITES SUR LES SYSTEMES D'EXPLOITATION
59
1.
Architecture et modélisation
59
2.
Processus
61
3.
Noyau
77
4.
Gestion des travaux
78
5.
Gestion mémoire
80
6.
Gestion des entrées/sorties
87
7.
Organisation et accès a l'information
89
8.
L'implémentation des systèmes d'exploitation
92
9.
L4G et langages de l'Internet
10. Marché des systèmes d'exploitation en 2007
100
102
6
EXPLOITATION DES SYSTEMES UNIX/LINUX ET WINDOWS
─────────────────────────────────────────────────────────────
CHAPITRE IV : SESSION SOUS UNIX/LINUX
103
1.
L'utilisateur
103
2.
Gestion des utilisateurs et des sessions
104
3.
Documentation en ligne
106
4.
Informations relatives aux utilisateurs
107
5.
Exercices
108
CHAPITRE V :
GESTION DE FICHIERS SOUS UNIX/LINUX
109
6.
La gestion objet des entrées/sorties
109
7.
Nommage des fichiers
118
8.
Opérations sur les fichiers standards
119
9.
Opérations sur les répertoires
122
10. Opérations sur les fichiers ordinaires
123
11. Cycle de vie d'un fichier
129
12. L'arborescence traditionnelle d'Unix
132
13. Exercices
134
CHAPITRE VI : GESTION DES TRAVAUX SOUS UNIX/LINUX
137
1.
Définitions
137
2.
Descripteurs associés a un processus
141
3.
Création et terminaison de processus
144
4.
Synchronisation de processus
146
5.
Signaux
147
6.
Ordonnancement
150
7.
Contrôle de l'exécution des processus
155
8.
Gestionnaires de mémoire
157
9.
Exercices
161
CHAPITRE VII : LES INTERPRETES DE COMMANDES KORN SHELL ET BASH
163
1.
Généralités sur les interprètes de commandes
163
2.
Gestion des profils
165
TABLE DES MATIERES
7
─────────────────────────────────────────────────────────────
3.
Variable locale, variable exportée
169
4.
Variables d'environnement prédefinies
170
5.
Scripts
171
6.
Programmation structurée en Korn shell
173
7.
Présentation sommaire du C shell
185
8.
Exercices (scripts)
186
9.
Introduction à la programmation système
188
10. Corrigés des exercices (scripts)
190
11. Corrigé (interprète de commandes simplifié)
197
CHAPITRE VIII : GESTION DES ENTREES/SORTIES
207
1.
Partitionnement d'un volume
207
2.
Système de fichiers
209
3.
Montage
215
4.
Cohérence des systèmes de fichiers
217
5.
Quotas
219
6.
Outils avancés (Unix/Linux)
220
7.
Volumes Logiques (IBM-AIX)
224
8.
Cache disque
226
9.
Pilotes
227
10. Gestion des flux
232
11. Chargement dynamique des pilotes
238
12. Le fonctionnement du pilote TTY
238
13. Adaptation du noyau Unix/Linux
240
14. Archivage et sauvegardes dans le monde Unix/Linux
242
CHAPITRE IX : QUELQUES MECANISMES INTERNES DE WINDOWS
251
1.
Présentation du système Windows
251
2.
Architecture en couches fonctionnelles
251
3.
Mode utilisateur
252
8
EXPLOITATION DES SYSTEMES UNIX/LINUX ET WINDOWS
─────────────────────────────────────────────────────────────
4.
L'exécutif Windows
254
5.
Services système
258
6.
Ordonnancement
258
7.
Processus et fibres
260
8.
Objets
267
9.
Mécanismes de synchronisation
272
10. Sécurité
278
11. Système de gestion des entrées/sorties
281
12. La base de registres (registry)
288
CHAPITRE X :
L'ADMINISTRATION ET SES OUTILS
293
1.
L'administration et la sécurité
293
2.
La gestion des utilisateurs sous Unix/Linux
298
3.
Gestion des services systèmes sous Unix/Linux
306
4.
Gestion des services sous Windows
316
5.
Quelques principes de maintenance
321
6.
L'administrateur, responsable micro
322
7.
Conception d'un système d'informations
323
8.
Conclusion
324
9.
Exercices
325
CHAPITRE XI : ANNEXES
327
1.
L'environnement utilisateur sous Unix/Linux
327
2.
Impression
331
3.
Généralités sur les éditeurs de textes
333
4.
L'éditeur vi
333
5.
L'éditeur ligne ed
338
6.
Principales commandes d'Unix
340
CHAPITRE XII : BIBLIOGRAPHIE
344
CHAPITRE XIII : INDEX
345
CHAPITRE I
L'HISTOIRE DU TRAITEMENT DE
L'INFORMATION
1.
DU BOULIER CHINOIS AUX SYSTEMES PROPRIETAIRES
1.1 De l'antiquité à nos jours
Avant de définir un système d'informations, il paraît important de retracer le
cheminement historique intellectuel qui a conduit à l'automate puis à l'ordinateur.
Dès l'antiquité, le boulier Chinois permet d'effectuer des calculs très rapidement.
Au 16ième siècle, Pascal conçoit un additionneur utilisant des roues dentées mises
bout à bout et numérotées de 0 à 9, le passage du 9 au 0 provoquant la rotation d'une
unité de la roue immédiatement à sa gauche pour prendre en compte la retenue.
Le concept de programme extérieur est défini au 18ième siècle : une action à exécuter
est décrite par une perforation sur une planche en bois, le programme étant constitué
par plusieurs planches à traiter en séquence. La machine de Falcon (1728) permet
ainsi le pilotage d'un métier à tisser. Ce principe est amélioré en France par Jacquard.
10
CHAPITRE I
─────────────────────────────────────────────────────────────
Charles Babbage conçoit en 1833 un calculateur à mémoire mécanique conservant
nombres et instructions utilisées dont la capacité de stockage est de 1000 nombres de
50 chiffres décimaux qu'Ada Lovelace à l'idée de programmer. Le nom du langage de
programmation ADA fut choisi en 1979 pour lui rendre hommage.
En 1854, le mathématicien Georges Boole imagine un système de logique symbolique
dont les formules, appliquées un siècle plus tard au système binaire, permettent de
réaliser l'ordinateur numérique électronique.
En 1882, Hermann Hollerith invente un langage codé sur carte perforée, ancêtre du
codage binaire, permettant de commander une machine et crée la société qui va
devenir IBM (International Business Machines) en 1924.
En 1936, Alan Turing énonce le principe d'une machine universelle ou machine de
Turing dont les caractéristiques préfigurent l'ordinateur moderne.
En 1938, la théorie de l'Information de Claude Shannon fait le lien entre le système
binaire, l'algèbre de Boole, et les circuits électriques en prouvant que les nombres
exprimés en système binaire permettent les calculs logiques et arithmétiques réalisés à
l'aide des opérations et circuits logiques de base ET, OU, NON.
En 1945, John Von Neumann définit le programme enregistré séquentiellement dans
la mémoire du calculateur avant son utilisation et la rupture de séquence ou
branchement conditionnel qui permet à la machine, sans intervention humaine, de
déterminer la séquence du programme à exécuter selon un résultat et donc de prendre
des décisions.
1.2 Evolutions technologiques des ordinateurs
On distingue cinq générations d'ordinateurs.
• En 1949 est présenté le premier calculateur électronique, à base de tubes
électroniques et lampes : l'EDSAC. En 1953, IBM fait son entrée dans l'industrie
informatique pour en devenir le leader mondial.
• La découverte du transistor (1948) conduit à une première révolution informatique
dès 1960 avec la naissance de Digital Equipment (DEC) et Hewlett Packard (HP).
• En 1970 apparaissent les microprocesseurs, la société Intel et le système Unix.
• Des circuits intégrant quelques centaines de milliers de transistors permettent de
créer l'ordinateur personnel (1981) et l'émergence de la société Microsoft.
• Les microprocesseurs actuels intègrent des millions de transistors.
■
Miniaturisation
Une fonction logique nécessitant une armoire électronique dans la première
génération devient une plaquette imprimée de 10 cm2 dans la troisième génération et
une puce de 0.1 µm2 dans la cinquième.
■
Fiabilité
Le temps moyen de bon fonctionnement (Mean Time Between Failure - MTBF) passe
de quelques minutes à plusieurs milliers d'heures.
L'HISTOIRE DU TRAITEMENT DE L'INFORMATION
11
────────────────────────────────────────────────────────────
■
Puissance de calcul et coûts
Depuis 1948, la puissance fournie double tous les 18 mois conformément à la loi de
Moore et l'ordinateur actuel exécute quelques milliards d'instructions par seconde. Les
coûts évoluent inversement à la puissance de calcul.
■
Unités
Le système binaire permet une représentation numérique de l'information dans un
ordinateur l'information digitale élémentaire, appelées binary digit ou bit, représentant
la présence ou l'absence d'un signal électrique, notée symboliquement 0 ou 1.
Un octet (abréviation o) est une suite de 8 bits pouvant représenter 256 informations.
Unités décimales usuelles
1 Kilo octets (Ko) = 103 octets
1 Méga octets (Mo) = 106 octets
1 Giga octets (Go) = 109 octets
1 Téra octets (To) = 1012 octet
1 Peta octets (Po) = 1015 octets
■
unités digitales
1 Kibioctet (Kio) = 210 octets
1 Mébioctet (Mio) = 220 octets
1 Gibioctet (Gio) = 230 octets
1 Tébioctet (Tio) = 240 octets.
1 Pébioctet (Pio) = 250 octets
Architecture
Le modèle séquentiel de Von Neumann a évolué vers d'autres architectures permettant
de réaliser des opérations vectorielles, des traitements parallèles, etc.
Génération
Caractéristiques
Décennie
Encombrement
Technologie
Fiabilité (h)
Rapidité
Langage
1ère
2ème
3ème
4ème
5ème
1950
150 m3
lampes
0.4
10-4
machine
1960
2 m3
transistor
2
10-2
procédural
1970
1980
1990
2
2
10 cm
1 mm
1µ 2
circuits intégrés microprocesseur
102
2*103
2*104
2
0.5
10
105
structuré objet
parole
Le vocable ordinateur décrit des calculateurs dont la puissance et les utilisations sont
très différentes. Les super calculateurs sont utilisés depuis les années 1975 dès que la
"plus grande puissance de calcul disponible" (Seymour CRAY) est nécessaire
(aéronautique, prévisions météorologiques, etc.).
Les ordinateurs universels (mainframe) sont utilisés dans des environnements
propriétaires et prennent simultanément en charge un grand nombre d'utilisateurs.
Certains les comparent aux dinosaures ou aux mammouths.
12
CHAPITRE I
─────────────────────────────────────────────────────────────
2.
L'EVOLUTION VERS LES SYSTEMES OUVERTS
Les révolutions informatiques successives ont conduit les utilisateurs à vouloir utiliser
des systèmes ouverts et distribués au détriment des systèmes propriétaires.
2.1 Relations entre les utilisateurs et les gros systèmes
■
Les contraintes
Dans un environnement propriétaire, l'utilisateur n'a pas la liberté de choix de son
système car tout est imposé par le constructeur (normes ou absence de norme, outils,
architecture, logiciels, maintenance, etc.).
• La culture informatique est monolithique, à l'époque le tout IBM.
• L'investissement initial est élevé, le coût d'exploitation important car les prix sont
imposés par le constructeur en situation de monopole.
• Le système est fermé et son évolution est coûteuse et délicate.
• Il n'y a aucune garantie de fonctionnement des applications dans des
environnement hétérogènes (portabilité).
• Le mariage avec les utilisateurs est forcé le fournisseur étant pratiquement en
situation de monopole (90% du marché mondial).
■
Les conséquences
L'utilisateur est un acteur passif et mineur ne pouvant ni choisir ni influer sur le
système propriétaire qu'il utilise. L'approche systèmes ouverts qui repose sur des
systèmes décentralisés coopératifs fonctionnant selon le modèle client - serveur est
différente, moins coûteuse et prometteuse.
2.2 Les révolutions informatiques
■
La révolution des microprocesseurs
Le transistor fut inventé en 1948 par trois chercheurs des laboratoires Bell
d'ATT (American Telephone et Telegraph) : Bardeen, Brattain et Shockley qui
reçurent à cette occasion le prix Nobel de physique (1956). Shockley quitte Bell pour
fonder Shockley Research Laboratories que quelques années plus tard Noyce et
Moore quittent pour fonder Fairchild puis Intel en 1968. Là commence la véritable
histoire des microprocesseurs puis des ordinateurs personnels.
En 1969, Ted Hoff, ingénieur chez Intel, décide de rendre programmable le
circuit 4 bits 4004 (environ 4000 transistors). Intel le commercialise et constate que ce
dernier correspond à un besoin du marché.
En 1972, Intel sort le 8008, premier microprocesseur 8 bits, suivi du 8080. Une partie
de l'équipe d'Intel fonde alors Zilog, qui sort le Z80 en 1975.
L'HISTOIRE DU TRAITEMENT DE L'INFORMATION
13
────────────────────────────────────────────────────────────
La première mémoire RAM (1 Kb) apparaît en 1970, suivie en 1973 de la première
RAM 4Ko.
Actuellement, le marché de la micro-informatique est composé à 90% de PC à base de
microprocesseurs 64 bits d'Intel ou AMD intégrant plusieurs cœurs (Intel core2 duo
quad).
■
La révolution des ordinateurs personnels
Depuis l'aube des années 80, les ordinateurs personnels et les consoles de jeux
pénètrent dans tous les milieux sociaux et professionnels pour un coût toujours plus
faible.
En 1974, Bill Gates, juste sorti d'Harvard, et Paul Allen, programmeur chez
Honeywell développent un interprète Basic. Le succès immédiat de ce logiciel les
amène à créer la société Microsoft en 1975, devenue aujourd'hui l'une des premières
sociétés mondiales par sa capitalisation boursière et faisant de son fondateur l'un des
hommes les plus riches du monde.
En 1976, Gary Kildal fonde Digital Research et développe le système d'exploitation
CP/M, devenu alors le standard des systèmes personnels. En 1979 sont développés les
premiers traitements de texte, tableurs, gestionnaires de données.
La légende rapporte qu'en 1976, Steve Jobs et Stephen Wozniak fabriquent dans un
garage le premier ordinateur personnel de la firme Apple dont le succès est immédiat
en occident. Le Sinclair ZX80 doté d'1 Ko de mémoire RAM utilise une télévision
pour l'affichage, un lecteur de minicassettes pour le stockage.
Aucune norme de conception ou d'utilisation n’existe et les systèmes d'exploitation
sont multiples. Les "grands constructeurs" ne s'intéressent pas à ce marché "marginal"
jusqu'au lancement par IBM en 1981 du Personal Computer : le PC est doté du
microprocesseur 8/16 bits 8088 d'Intel et du système d'exploitation MS/DOS de
Microsoft, largement basé sur le système CP/M. En moins d'un an, IBM s'adjuge 90 %
du marché mondial des ordinateurs personnels…
■
La révolution des réseaux et des systèmes distribués
Dans les années 1980 apparaissent les réseaux et services répartis et distribués entre
les premiers systèmes hétérogènes interopérables, avec une interface d'accès
ergonomique. La puissance du poste de travail permet de concevoir des systèmes
coopératifs basés sur des architectures clients serveurs. Ainsi, en 1982, les
microprocesseurs 32 bits donnent naissance aux stations de travail (workstation)
fonctionnant sous Unix (SUN, Apollo, HP, BULL, etc.). Très utilisées dans le domaine
scientifique et l'informatique de gestion.
14
CHAPITRE I
─────────────────────────────────────────────────────────────
■
Le monopole des systèmes propriétaires Windows
En 1984, IBM est victime de son succès avec l'apparition des PC compatibles,
meilleur marché et/ou plus performants causant la perte de sa suprématie dans ce
domaine : dès 1986, IBM ne détient plus "que" 25 % de ce marché.
Après avoir contribué à l'établissement d'un standard des ordinateurs personnels, IBM
tente de le casser pour retrouver sa suprématie par le lancement en 1987 du PS/2
(Personal System) à base de microprocesseurs 32 bits d'Intel, véritable fiasco
commercial. IBM se retire alors d'un marché dont il n'a pas la culture. Les
bénéficiaires vont être Microsoft et les fabricants de PC compatibles.
MS/DOS étant inadapté aux évolutions 32 bits, une ébauche de solution est proposée
avec Windows 3.x. En 1994 est commercialisé Windows NT, le premier système 32
bits de Microsoft pour la gestion des réseaux. Windows 95, remplacé par Windows 98
est commercialisé pour le grand public. Tous ces systèmes ont convergés vers
Windows XP puis Windows Vista.
Les systèmes propriétaires Windows sont un standard sur 90% du parc mondial des
ordinateurs personnels ce qui ne signifie pas (encore ?) qu'on soit au tout Microsoft.
2.3 Ouverture, interopérabilité, portabilité, normalisation
■
Révolution culturelle
L'utilisateur est devenu un acteur majeur qui veut comprendre et disposer d'outils,
ergonomiques, et standards, sans dépendre d'un constructeur unique.
Les média numériques (télévision, téléphonie mobile, réseaux publics (Internet) ou
privés (Intranet), ordinateur personnel, appareil photo, caméra, etc.) dont la simplicité
d'utilisation (ergonomie) s'impose communiquent. Ils sont donc interopérables.
■
Interopérabilité
En dépit de la tentative de Microsoft d'imposer ses standards, cet industriel a été
condamné par les justices américaine et européenne à ouvrir les systèmes Windows à
la concurrence. Simultanément, deux approches opposées ont, depuis une vingtaine
d'années, permis de rendre les systèmes interopérables : la normalisation des
systèmes d'informations et la mise au point de systèmes non propriétaires, dits ouverts
ou libres comme Linux.
■
Standard de facto
Lorsqu'une nouvelle application apparaît, il existe une phase d'expansion aux cours de
laquelle de nombreux produits similaires et incompatibles sont développés jusqu'à ce
que le marché en sélectionne quelques uns. C'est la première étape du processus de
normalisation.
Exemples
L'architecture de l'ordinateur personnel, les protocoles TCP/IP, bases de tous les
services fournis sur Internet.
L'HISTOIRE DU TRAITEMENT DE L'INFORMATION
15
────────────────────────────────────────────────────────────
■
Organismes de normalisation
La normalisation par des organismes nationaux (AFNOR) ou internationaux (ISO,
CCITT, etc.), ainsi que la législation imposant des systèmes normalisés ont permis
l'interconnection des systèmes et le portage des applicatifs et des données, les logiciels
étant développés conformément à des règles de portabilité normalisées (normes ISO).
■
Groupes de travail
Les organismes de normalisation internationaux disposent de nombreux groupes de
travail qui rassemblent les principaux acteurs du marché (constructeurs, éditeurs de
logiciels, représentants des administrations gouvernementales, groupes d'utilisateurs)
pour définir des normes de connexion, développement, d'utilisation et de portabilité.
■
Normes
Une norme est élaborée à l'échelon d'un pays, d'un continent, ou mondiale. Cette
dernière étape consiste à mettre au point, avec un minimum d'ambiguïté, un document
accepté par tous. Ce processus long peut conduire à des batailles homériques telle
celle des normes du langage Java de SUN.
La plupart des langages de programmation ont été normalisés (C, C++, Fortran, Java,
SQL, XML, etc..) ainsi que les systèmes d'exploitation basés sur Unix (normes
POSIX - Portable Operating Systems Interface for computing environnement)).
■
Quelques normes POSIX
Guide de l'environnement POSIX
Spécification indépendantes des langages
Interface système et extensions nouvelles à P1003.1
Commandes du shell et utilitaires
Extension pour la portabilité au niveau utilisateur
Suite de vérifications pour la norme P1003.1
Suite de vérifications pour la norme P1003.2
Extensions temps réel
ADA
Extension de Sécurité
Administration des imprimantes
Logiciel d'administration
Accès transparents aux fichiers (TFA)
Profil des applications sur super calculateurs
Transactionnel
Support des applications multiprocesseurs
Extension pour le traitement par lot
Langage C
Services des répertoires réseau
Profil POSIX
Fortran 90 pour la norme P1003.1
Extension temps réel ada pour la norme P1003.1
Interfaces utilisateur dans les environnements multi fenêtres
P1003.0
P1003.1
P1003.1a
P1003.2
P1003.2a
P1003.3.1
P1003.3.2
P1003.4
P1003.5
P1003.6
P1003.7.1
P1003.7.2
P1003.8
P1003.10
P1003.11
P1003.14
P1003.15
P1003.16
P1003.17
P1003.18
P1003.19
P1003.20
P1201.1
16
CHAPITRE I
─────────────────────────────────────────────────────────────
■
Portage
On distingue différents types de portages :
• portage d'une application dans un autre environnement informatique (programmes,
procédures, données),
• portage d'une partie de l'application vers une autre s'appuyant sur le même ou un
autre environnement graphique,
• portage des données vers une autre application dans un même ou un autre
environnement.
Une condition de réalisation d'applications portables (universellement utilisables) est
la disponibilité et la normalisation des outils de développements et des appels
systèmes. Ainsi, XWindow (MIT) offre un affichage distribué ou réparti sur des
systèmes hétérogènes.
■
Profils X/Open et certification
Une fois définies normes et spécifications, il reste à les utiliser pour réaliser un
système ouvert. La réalisation de profils a pour objectif de choisir les normes et
standards à utiliser. Il est alors possible de définir des suites de validation des profils
permettant de tester la conformité d'un produit aux normes.
Le consortium X/Open est constitué de constructeurs informatiques, éditeurs de
logiciels, utilisateurs, représentants des administrations gouvernementales.
Des documents de référence définissent les profils dont le plus important est le Guide
de la Portabilité.
Un produit du domaine public est gratuit, décrit selon des spécifications accessibles
pour tous, par exemple XWindow.
■
Systèmes Ouverts
L'IEEE définit un système ouvert comme un ensemble de standards internationaux
d'informations technologiques spécifiant les interfaces, les services fournis et les
formats d'informations supportés pour réaliser l'interopérabilité et la portabilité des
systèmes, des applications et des données.
3.
HISTORIQUE D'UNIX
3.1 L'héritage de Multics
Trois principes essentiels de conception du système d'exploitation Multics (General
Electric, MIT, laboratoires Bell - 1961) sont repris par Unix : Multics est développé
dans un langage évolué (PL/1) pour l'affranchir des contraintes liées à l'utilisation de
la programmation en assembleur (écriture, maintenance, mise au point, dépendance du
matériel). L'organisation des fichiers est arborescente et tout périphérique est géré
comme un fichier.
L'HISTOIRE DU TRAITEMENT DE L'INFORMATION
17
────────────────────────────────────────────────────────────
3.2 Unix systems, versions, like, based
Unix est le nom générique d'une famille de systèmes d'exploitation à vocation
universelle.
■
Les Unix authentiques et dérivés
Des laboratoires Bell sont issues les versions (V6, V7...) qui ont donné naissance aux
systèmes Unix authentiques distribués par ATT (Unix System III, Unix System V) et
par l'Université de Berkeley (Unix Versions 4.x BSD - Berkeley Software
Distribution).
Les systèmes basés sur Unix (Unix based) s’appuient sur les systèmes authentiques
d’ATT (toute distribution nécessite une redevance). Les systèmes similaires à Unix
(Unix like) en reprennent la philosophie tout en s'en démarquant suffisamment pour ne
pas avoir à payer de redevance (Linux).
■
Les pionniers (1969 - 1979)
En 1969, Ken Thompson et Dennis Ritchie réalisent, aux laboratoires Bell la première
version d'Unix en assembleur sur PDP7 puis sur PDP9. Le système est monoutilisateur et interactif, le cœur du système (noyau) a une taille de 6 Ko, un processus
est limité à 8 Ko et un fichier à 64 Ko.
Après plusieurs tentatives d'écriture d'Unix dans un langage évolué (langage A,
langage BCPL de Martin Richard, langage B dérivé de BCPL), Brian Kernighan et
Dennis Ritchie définissent en 1972 le langage C avec lequel Unix est réécrit en 1973
sur PDP11. Cette première version portable (Unix V6) a les caractéristiques
suivantes : multiprogrammation, généralisation de l'interface fichier et des
entrée/sorties, gestion des processus, des fichiers et des volumes.
ATT n'ayant pas le droit de commercialiser des produits informatiques, les premières
licences sont cédées pour un prix symbolique aux universités de Berkeley (USA) et de
Galles (Australie).
Un premier portage d'Unix est effectué en 1975 en quelques mois.
Unix V7 est développé en 1976 quand la disponibilité d'un système d'exploitation
portable devient une nécessité dans un marché informatique en pleine révolution
technologique.
En 1977, Ken Thompson passe une année sabbatique à l'Université de Berkeley où il
donne le départ des développements d'Unix par les utilisateurs : sur toutes plates
formes matérielles apparaissent des outils du domaine public constituant la plus
grande bibliothèque de logiciels gratuits du monde.
Parallèlement, le projet DARPA (Defense Advanced Research Project Agency) utilise
Unix pour la spécification des protocoles TCP/IP, (le standard mondial actuel),
permettant la communication entre différents réseaux propriétaires. Une interface
applicative de développement (API) dans des environnements hétérogènes (couche
socket) est également définie.
18
CHAPITRE I
─────────────────────────────────────────────────────────────
■
La confusion (1979 - 1984)
La déréglementation aux USA permet à ATT de commercialiser Unix System III en
1982, Unix System V en 1983. La société Microsoft distribue Xenix en 1982.
Les versions issues par l'Université de Berkeley (symbolisées par un diablotin
facétieux emblématique) comportent des améliorations importantes : communications
entre processus distants, gestion de la mémoire virtuelle et pagination, système de
gestion de fichiers rapide et efficace, outils réseau.
De nombreuses variantes basées sur Unix ou similaires à Unix sont implémentées sur
toutes les plateformes matérielles (plus de 100 000).
■
L'ère industrielle (1984 - 1988)
Dès fin 1984, la normalisation d'Unix provoque la disparition des systèmes dérivés.
Adopté par Hewlett Packard (HP-UX), IBM (AIX), etc., Unix est consacré comme
système d'exploitation à vocation universelle. Plus de 500 000 systèmes Unix sont
installés. En 1988, Unix s'impose dans et avec le monde des stations de travail
avec Unix System V en gestion et Unix BSD dans le calcul scientifique.
■
La Normalisation (1988)
ATT définit en 1986 des normes de conception et d'utilisation d'Unix (System V
Interface Definition - SVID).
Un consortium de constructeurs crée l'OSF (Open Software Foundation).
Les systèmes OSF/1 et Unix SV R4 convergent vers les normes POSIX imposées en
1988 par le pentagone dans ses appels d'offres.
System V
POSIX
1003.1
Sunos
System V R4
X/OPEN
XPG3
BSD 4.3
ANSI X3J11
Xenix
Unix est au cœur des systèmes commercialisés par Apple depuis 1999 avec Mac OS X.
L'HISTOIRE DU TRAITEMENT DE L'INFORMATION
19
────────────────────────────────────────────────────────────
■
Universalité d'Unix
Les raisons du succès d'Unix sont les suivantes : conception simple et universelle,
écriture du système en langage C ce qui facilite compréhension, ouverture, et
adaptations aux évolutions technologiques et le rend portable car ne comportant que
5% de code dépendant de la machine. Le nombre d'utilitaires disponibles et gratuits
(bureautique, internet, calculs scientifiques, gestion, traitements d'images, etc.) est tel
que son environnement est aussi riche que celui des systèmes propriétaires. De
nouveaux outils peuvent être créés sans modification du cœur du système (noyau).
■
Récapitulation de l'historique d'Unix
ANNEE
1969
1975
1977
1979
1981
1982
1983
1985
1991
1992
1994
1999
Berkeley
1.0 BSD
3.0 BSD
4.0 BSD
4.1 BSD
4.2 BSD
Bell-labs
Assembleur
V6
V7
V8
4.4 BSD
ATT
System III
System V
System V R2
System V R4
System V R4.1
System V R4.2
AUTRES
IDRIS
ONYX
SMX
SOL
AIX
OSF/1
Linux
Mac OS X
3.3 Linux
■
Caractéristiques
Linux est une implémentation d'Unix du domaine public dans le monde Intel.
Développé par Linus Torvalds à l'université d'Helsinki à partir de 1991, ce système
clone d'Unix ne comporte aucune ligne du code d'origine mais est doté de l'ensemble
de ses fonctionnalités ce qui en fait une parfaite machine virtuelle Unix. En 2008,
Linux est disponible dans de nombreuses distributions dont les symboles sont un objet
magique, un pingouin, un diablotin sympathique, etc.
20
CHAPITRE I
─────────────────────────────────────────────────────────────
■
Droits d'auteur
Linux est distribué gratuitement son code source étant protégé par une licence
publique générale GNU (logiciels libres) dont les caractéristiques sont les suivantes :
• Redistribution libre et gratuite, sans garantie, du code source et de ses composants
dont l'auteur conserve les droits d'origine.
• Le système est vendable.
• Tout modification du code source à vocation commerciale est autorisée, ne donne
aucun droit d'auteur et doit être diffusée dans le domaine public.
• Les auteurs et développeurs de Linux ne perçoivent pas de royalties ce qui ne freine
ni leur augmentation ni la diffusion du système.
3.4 Le marché Unix/Linux
■
Evolution du marché
Le parc mondial de systèmes fonctionnant sous Unix/Linux est de l'ordre de 25%.
C'est plus que le deuxième constructeur mondial.
■
Constructeurs et portabilité
Unix est la référence actuelle pour la portabilité des applications ce qui est justifié
dans la mesure où les standards sont respectés (normes POSIX).
L'X/Open impose ses normes d'évolution.
L'interface homme machine XWindow est généralisée dans l'environnement CDE
(Common Development Environment).
Les ventes de systèmes Unix/Linux sont dynamiques ce système s'avérant stable,
puissant, sécurisé, universel et bon marché. De nombreuses sociétés et administrations
utilisent Unix/Linux refusant le tout Microsoft de la même façon qu'historiquement, il
y eu un front du refus du tout IBM.
■
Stations de travail
Parts de marché
SOLARIS (SUN) 30%
HP-UX (HP)
30%
AIX (IBM)
15%
Mac OS X
5%
architectures
multiprocesseurs
multiprocesseurs
multiprocesseurs
multiprocesseurs
Caractéristique
Unix standard, parc installé,
Unix standard
Unix propriétaire
Unix standard
Compte tenu du nombre de PC dans le monde, le parc installé est très important,
même si le nombre de PC sous Unix/Linux n'en représente que 10%.
Parts de marché
SCO UnixWare 25%
Solaris PC
15%
Free BSD
5%
Linux
55%
architectures
multiprocesseurs
multiprocesseurs
monoprocesseur
multiprocesseurs
Caractéristique
gestion,
Unix standard
universitaire, gratuit,
universitaire, gratuit.
L'HISTOIRE DU TRAITEMENT DE L'INFORMATION
21
────────────────────────────────────────────────────────────
4.
QUELQUES APPLICATIONS DES SYSTEMES
D'INFORMATIONS
■
Interdépendance du matériel et du logiciel
Un système d'informations est constitué d'éléments matériels et logiciels : le matériel
(hardware) constitué par le processeur, la mémoire, la carte mère, les périphériques
supportés, etc., les logiciels (software) permettant de le programmer et de l'utiliser.
Le système matériel et le logiciel sont dépendants car une machine dépourvue de
logiciel n'est qu'un ensemble de composants électroniques et des logiciels sans
support matériel d'exécution sont inutilisables.
■
Quelques utilisations
• Bureautique (traitement de texte, messagerie, Internet, archivage, diffusion, etc.).
• Conception assistée par ordinateur (CAO) pour la conception de bâtiments, pièces
mécaniques...Existent aussi le dessin assisté par ordinateur (DAO), l'enseignement
assisté par ordinateur (EAO), la fabrication assistée par ordinateur (FAO), la
conception de maquettes et simulateurs (aéronautique, industrie nucléaire).
• Traitement d'images (images satellites, imagerie médicale, prévisions
météorologiques, reconnaissance des formes, industrie cinématographique, etc.).
• Monétique pour le règlement sécurisé d'achats avec des cartes à puces.
• Robotique pour le pilotage automatique de machines à commandes numériques.
■
Internet
Dans les années 1980, la télématique a marié les technologies du traitement de
l'information et celles des télécommunications pour transporter les informations
numérisées ce qui permet de se connecter à un fournisseur de services distants.
Une des conséquences de l'utilisation des réseaux est la normalisation des
équipements utilisés, l'exigence étant d'interconnecter des systèmes hétérogènes.
L'utilisation d'Internet par le grand public à commencé avec les autoroutes de
l'information, concepts développés en 1992 par Bill Clinton et Al Gore.
■
Services
Divers services sont fournis : messagerie, téléchargement, impression, affichage,
fourniture de ressources, accès sécurisés au Web, téléphonie sur IP, routeur multiprotocoles, passerelle, administration de réseaux etc., dans des réseaux hétérogènes.
■
Informatique de gestion et bases de données
La gestion des petites et moyennes entreprises est impensable sans ordinateur
(facturation, gestion de stocks, aide à la décision).
Les systèmes de gestion de bases de données relationnels (SGBDR) tels DB2 (IBM),
Oracle, SQL Serveur (Microsoft) permettent de gérer d'énormes quantités
d'informations (réseaux bancaires, gestion de stocks, etc.).
22
CHAPITRE I
─────────────────────────────────────────────────────────────
■
Contrôle de processus industriels (GPAO)
La gestion de production assistée par ordinateur (GPAO) permet de piloter des unités
industrielles (contrôle d'une centrale électrique, gestion des aiguillages d'une gare de
chemins de fer, surveillance automatique de grands malades, etc.)
■
Calcul scientifique
Les ordinateurs personnels s'adaptent au calcul scientifique (analyse numérique,
mécanique, physique, aérodynamique, mécanique des fluides, etc.). Toutefois,
l'analyse numérique, mariage des mathématiques appliquées et de l'informatique,
requiert des ordinateurs toujours plus puissants (supercalculateurs) pour résoudre des
problèmes toujours plus complexes (météorologie, aéronautique, etc.)).
Certains phénomènes physiques sont modélisés par les équations aux dérivées
partielles que l'on ne sait résoudre mathématiquement que dans quelques cas
particuliers. L'ordinateur permet, par des méthodes appropriées (éléments finis,
différences finies, etc.) de calculer une solution approchée aussi précise que l'on veut.
Exemple
On veut résoudre dans le cube unité Ω (donc dans l'espace) le problème de Dirichlet :
 − ∆u = f dans Ω
 u = u sur ∂ Ω
0

Les fonctions f et u0 sont des données du problème et supposées suffisamment
régulières (conditions aux limites). Une précision de 10 points par côté conduit à la
résolution d'un système linéaire de 1000 équations à 1000 inconnues ; 100 points par
côté conduisent à un système d'un million d'équations à un million d'inconnues. Dans
le premier cas, un ordinateur personnel suffit, dans le deuxième cas, un
supercalculateur est nécessaire.
■
Méthodes classiques et intelligence artificielle
Les méthodes utilisées dans les applications présentées précédemment sont
déterministes l'algorithme de résolution ayant une complexité (nombre d'opérations)
déterminée à priori ce qui permet d'évaluer le temps de calcul d'un problème donné.
Certains problèmes abordés de façon déterministes n'ont pas de solutions exploitables
telle l'exploration de l'univers des possibles aux échecs (plusieurs siècles de calcul).
L'intelligence artificielle est basée sur des méthodes probabilistes et logiques. Des
règles de déductions logiques à base de faits sont fournies par l'utilisateur.
Le but peut être connu ou inconnu. Le moteur d'inférences est un programme gérant
faits et règles. Il déclenche les règles par déductions de faits connus (chaînage avant),
ou à partir du but vers les faits permettant de l'atteindre (chaînage arrière).
CHAPITRE II
ARCHITECTURE DES ORDINATEURS
PERSONNELS
1.
SYSTEMES D'INFORMATIONS
1.1 Traitement de l'information
Le vocable informatique, inventé vers 1960, signifie traitement de l'information, le
mot information ayant une signification très générale.
Un ordinateur est une automate programmable qui, à partir d'une situation
représentée par des données, effectue un traitement décrit par un programme stocké
dans sa mémoire et fournissant des résultats. Le traitement est effectué par l'unité
centrale des traitements (Central Processing Unit - CPU ).
On appelle programme les informations traitantes, données les informations traitées.
Cette notion est relative un programme pouvant être la donnée d'un autre programme.
Exemple
Considérons l'addition de deux nombres. Ces derniers sont les données du problème
l'addition à exécuter étant le traitement.
Les instructions, pour être comprises de la machine, doivent respecter les règles de
grammaire du langage de programmation utilisé.
Une application est constituée d’un ensemble de programmes.
1.2 Système matériel
Un ordinateur est constitué des éléments matériels suivants :
Imprimante
Disque dur
disquettes
Ecran
Modem
Clavier
Souris
Unité centrale
Réseau
Bandes
Architecture matérielle typique
24
CHAPITRE II
─────────────────────────────────────────────────────────────
■
L'unité centrale
L'unité centrale gère le système, effectue les traitements et échange des flux
d'informations avec des périphériques.
UC
Mémoire
centrale
UAL
Unités d'Echanges
L'unité de commandes (command unit) gère l'ensemble.
L'unité arithmétique (UAL) et logique effectue les calculs arithmétiques et logiques.
Les applications actives et les données sont chargées dans la mémoire centrale.
Les contrôleurs gèrent les échanges d'informations entre l'unité centrale et les
périphériques.
■
Périphériques et fichiers
L'information entre dans l'unité centrale pour traitement puis en sort vers des
périphériques, les flux d'informations constituant les entrées/sorties (input/output). Un
périphérique est donc un élément matériel extérieur à l'unité centrale, contribuant au
dialogue homme/machine (clavier, moniteur, etc.) ou au stockage de l'information.
Un fichier est un ensemble nommé d'informations stockées sur une mémoire
permanente à accès rapide, regroupés dans des dossiers dont l''organisation peut être
arborescente.
D'autres informations telles la nature du fichier (données, programme, système), sa
taille, sa date de création, de mise à jour, ses attributs de propriété et sécurité, dont il
faut garantir la pérennité, sont fournies par le système de gestion des fichiers.
■
Interface homme machine (IHM)
L'interface homme machine gère le dialogue entre l'utilisateur et l'ordinateur par la
saisie d'informations (entrées) pour traitement par l'unité centrale puis affichage du
résultat (sorties). Elle est devenue ergonomique (clavier, souris, lecteur de badge,
décodeur de code barre, parole, écran tactile, carte à puce, caméra, etc.) car simple
d'utilisation.
ARCHITECTURE DES ORDINATEURS PERSONNELS
25
────────────────────────────────────────────────────────────
■
Système d'exploitation
Cet ensemble de programmes assure les fonctionnalités suivantes :
• Gestion du système matériel, des travaux à exécuter et des utilisateurs, support des
applications.
• Fournisseur de l'interface homme machine (mode texte ou mode graphique)
• Gestionnaire des fichiers et de leur support physique par le système de gestion des
fichiers (SGF - Disk Operating System - DOS).
Exemples
Les systèmes d'exploitation Windows, Unix, Linux, MVS (IBM) accessibles par
l'interprète de commandes (shell dans le monde Unix/Linux, fenêtre de commandes
sous Windows, Job Control Langage (JCL) dans le monde MVS, etc.).
■
Modes d'exploitation des systèmes d'information
La multiprogrammation est l'exécution simultanée de plusieurs programmes
indépendants.
Le traitement multitâche est l'exécution simultanée de différentes tâches dont
certaines exécutées ultérieurement (traitement par lots - batch).
Le temps partagé (time sharing) permet à plusieurs utilisateurs de travailler
simultanément de façon interactive, chacun dialoguant avec la machine en ayant
l'illusion d'en être l'unique utilisateur. Plus précisément, soient U1, U2 ,..., Un les n
usagers du système.
U
n
U1
U2
U3
L'ordinateur partageant ses ressources, soit Ti l'instant à partir duquel l'usager Ui
dispose du processeur durant l'intervalle de temps δT. A l'instant Tn, l'usager Un est
pris en charge. A l'instant Tn+1, U1 est à nouveau pris en charge puisque les n usagers
ont été considérés. Le comportement du système est cyclique de période nδT. Si δT
est de l'ordre de la milliseconde, alors les n usagers seront pris en compte en n
millisecondes. L'interactivité est donc basée sur le rapport entre la période
caractéristique des humains (seconde) et celle de l'ordinateur (nanoseconde).
Le traitement en temps réel garantit un temps de réaction réduit (microseconde).
Exemple
Gestion des arrivées et départs des trains dans une gare (à la gare Saint Lazare (Paris),
trois trains peuvent arriver et/ou partir chaque minute et il faut éviter les collisions).
26
CHAPITRE II
─────────────────────────────────────────────────────────────
2.
REPRESENTATION NUMERIQUE DE L'INFORMATION
2.1 Codage et interprétation selon le type de l'objet
Une suite de n bits représentant 2n informations, le codage digital consiste à
représenter des objets de toute nature tels les caractères (8 bits), les entiers (16 ou 32
bits), les réels (32 ou 64 bits), les sons, les images, les instructions, etc.
La conversion d'un système de codage en un autre est appelée transcodage.
Les informations binaires sont représentables en système hexadécimal avec les
chiffres 0 à 9 et les lettres A, B, C, D, E, F selon la correspondance :
0
1
2
3
0000
0001
0010
0011
4
5
6
7
0100
0101
0110
0111
8
9
A
B
1000
1001
1010
1011
C
D
E
F
1100
1101
1110
1111
Un octet est alors représenté par deux caractères hexadécimaux. Ainsi l'octet
1011 0010 s'écrit B2.
2.2 Données alphanumériques
On appelle donnée alphanumérique un caractère ou une chaîne de caractères.
Un caractère (majuscule, minuscule, chiffre, symboles (! ? ; : , . < > = etc.), saut
de ligne, saut de page, etc.) est codé sur un octet à partir d'un système de codage tel le
code ASCII étendu (American Standard Code For Informations Interchange), utilisé
sur les systèmes personnels et le code propriétaire d'IBM EBCDIC (Extended Binary
Coded Decimal Information Code), utilisé sur ses gros systèmes.
Une police de caractères est une représentation particulière des caractères d'un
système de codage. Ainsi, les traitements de texte utilisent une grande variété de
polices telles le Times, Arial, etc. Des polices particulières permettent de représenter
divers symboles, par exemple mathématiques.
2.3 Nombres entiers relatifs
Les nombres relatifs sont représentés par des nombres entiers non signés et signés.
On appelle nombre entier non signé tout entier naturel sans signe codé selon
l'algorithme d'Euclide. Le nombre entier non signé p s'écrit donc en système binaire :
n −1
p=
∑δ 2
i =0
i
i
où δi représente sur le bit i le reste des divisions successives par 2.
Exemple
13 s'écrit sur un octet 0000 1101.
Les bits de droite sont appelés bits de poids faible et ceux de gauche bits de poids fort.
ARCHITECTURE DES ORDINATEURS PERSONNELS
27
────────────────────────────────────────────────────────────
On appelle nombre entier signé tout entier relatif. Le bit le plus à gauche, dit bit le
plus significatif (most significant bit), code le signe et le nombre est positif quand ce
bit est nul, négatif quand il est égal à 1. Sa valeur absolue utilise les n-1 bits restants et
les n bits représentent des nombres entiers signés m tels que :
−2 n −1 ≤ m ≤ 2 n −1 − 1
2.4 Nombres réels flottants
Un nombre réel x est rationnel et représentable exactement en système binaire, ou
irrationnel et approximé avec une erreur de troncature. Il s'écrit sous la forme :
x = S M bc
avec S son signe, M sa mantisse, b la base de numération, c sa caractéristique (sur p
bits) liée à l''exposant e par la relation c = e + 2p-1.
Soit la représentation numérique du signe, de la mantisse et de l'exposant :
signe
exposant
mantisse
Un constructeur choisissant longueur de caractéristique et d'exposant, il n'y a pas
unicité de la représentation ce qui peut conduire à des résultats différents pour un
calcul donné sur des calculateurs différents.
Le bit de signe est nul si le nombre est positif, égal à 1 sinon.
La précision de la représentation est déterminée par le nombre de bits de la mantisse
dont la forme normalisée permet d'obtenir le maximum de chiffres significatifs. Cette
dernière est définie par la relation 1/b ≤ M < 1.
Seule la partie fractionnaire de la mantisse est représentée et la base 16 est un
compromis entre la valeur absolue maximale et la précision.
■
Norme IEEE 754
Soient n le nombre de bits de la mantisse et p le nombre de chiffres significatifs. Le
plus petit nombre réel représentable est 2-n et p est tel que :
2-n = 10-p ⇒ p = n log(2) ≈ 0.3 n
La norme IEEE 754 définit une caractéristique sur 8 bits et une mantisse sur 23 bits
pour six chiffres significatifs (simple précision), une caractéristique sur 11 bits et une
mantisse sur 53 bits pour 15 chiffres significatifs (double précision).
2.5 Objets multimédia
Diverses représentations des sons : mono ou stéréo (wav), compressé (mp3), etc.
Une image est constituée de lignes de points appelés pixels (picture element), chacun
caractérisé par son niveau de gris (un octet) ou sa couleur (deux ou trois octets).
Les formats de représentation des images sont de type gif, bitmap, jpg, etc. Les
formats MPEG2, MPEG4… sont relatifs à la vidéo.
28
CHAPITRE II
─────────────────────────────────────────────────────────────
3.
UNITE CENTRALE DES ORDINATEURS PERSONNELS
3.1 Loi de Moore
Gordon Moore, prix Nobel de Physique et un des fondateurs d'Intel a énoncé le
postula suivant : "Les évolutions technologiques conduisent à un doublement de la
puissance fournie par les microprocesseurs environ tous les 18 mois". Ainsi, la densité
d'intégration des composants électroniques, la finesse de la gravure, la taille des puces
réalisées ont évolué conformément aux graphes suivants :
Le coût des investissements a cru exponentiellement ce qui provoqué la raréfaction
des fondeurs. Ces évolutions expliquent l'apparition de l'ordinateur personnel et le
monopole d'Intel.
3.2 Microprocesseur
Les fonctions logiques d'une unité centrale utilisent les circuits électroniques de base
ET, OU, NON. Un microprocesseur est une unité centrale monolithique (un unique
boîtier parallélépipédique) ou par tranches s'il est constitué par plusieurs boîtiers.
Le boîtier est muni de broches pour communiquer. D'où le nom de puce (chip) munie
de pattes (pins) donné à l'ensemble qui peut intégrer différents processeurs spécialisés
(unité centrale, graphique, entrées-sorties, etc.).
Exemples
Céléron, Core 2 Multi Coeurs d'Intel, Athlon d'AMD, processeur graphique.
ARCHITECTURE DES ORDINATEURS PERSONNELS
29
────────────────────────────────────────────────────────────
■
Mot
Toute suite de bits est découpée en mots dont la longueur est une caractéristique
physique de la capacité de traitement d'une information par l'unité arithmétique et
logique en un ou plusieurs cycles d'horloge.
Application
Soit un entier sur 32 bits et des mots de 16 bits. Deux accès mémoire sont nécessaires
pour son chargement. Si le mot est de 32 bits, un accès suffit.
■
Fréquence d'horloge
Les performances d'un microprocesseur dépendent de sa fréquence d'horloge comprise
actuellement entre 1.8 et 3.4 GHz. Plus elle est élevée, plus le processeur dissipe de
l'énergie ce qui impose une ventilation toujours plus importante pour éviter
l'échauffement destructeur de la puce.
■
Architecture interne et externe
On appelle architecture interne d'un processeur l'unité arithmétique et logique, les
registres, les bus de données et d'adresses et la taille des mots utilisés.
L'architecture externe d'un microprocesseur est constituée par les jonctions électriques
entre ce dernier et son support sur une carte mère, réalisées au travers de broches et
des bus externes dont les tailles ont variés de 8, 16, 32 puis 64 bits en fonction de
l'évolution de la densité d'intégration et de la taille des mots.
30
CHAPITRE II
─────────────────────────────────────────────────────────────
Pentium
Pentium 4
■
Le brochage (socket) : support physique du microprocesseur
Les broches d'un microprocesseur permettent de l'installer sur un support physique
appelé brochage (socket). Leur nombre croit avec la taille du bus interne (10 à 300).
ARCHITECTURE DES ORDINATEURS PERSONNELS
31
────────────────────────────────────────────────────────────
3.3 Mémoires
Les techniques d'intégration des transistors ont été utilisées avec les mémoires.
■
Accès à l'information
Le contenu d'un mot est accessible à partir de son adresse codée sur n bits.
L'espace mémoire adressable ou la capacité de la mémoire est le nombre maximum
de mots adressables par un calculateur soit 2n.
L'accès à l'information peut être direct, séquentiel (il est nécessaire de lire toutes les
informations qui la précèdent (bande magnétique), indirect, ou aléatoire.
Le temps d'accès est la durée entre l'instruction de lecture/écriture et son exécution, de
l'ordre de la nanoseconde en mémoire centrale et de la milliseconde sur disque.
Le cycle d'une mémoire est le temps d'accès entre deux différents mots.
Le débit d'une mémoire (ou cadence de transfert) est le nombre d'informations lues ou
écrites par unité de temps (bits/s).
■
Mémoires mortes
Appelées également mémoires à lecture seule ou mémoires statiques, leur contenu est
non volatile car non affecté par une interruption de l'alimentation électrique. Le temps
d'accès est variable selon les technologies utilisées (5 à 80 ns).
ROM (Read Only Memory)
La ROM contient les informations (statiques) nécessaires au démarrage (bootstrap).
PROM (Programmable Read Only Memory)
Cette mémoire est reprogrammable une fois seulement.
EPROM et EEPROM (Electrically and Erasable PROM)
Ces PROM sont effaçables puis reprogrammables.
32
CHAPITRE II
─────────────────────────────────────────────────────────────
■
Le BIOS
Une carte mère est configurée à partir d'un programme en ROM appelé BIOS (Basic
Input Output System), interface entre le système d'exploitation et le système matériel,
qui détecte ou contient sa description et dont certaines caractéristiques peuvent être
modifiées par un programme de configuration appelé setup.
Les cartes mères reconnaissent et configurent automatiquement les interruptions et les
canaux DMA associés aux périphériques (installation et reconnaissance
automatique - Plug and Play (PnP)).
■
Données accessibles par le programme setup
Caractéristiques du processeur (fréquence d'horloge, optimisation des caches, tension
d'alimentation, gestion des bus et des états d'attente, type, overclock (déconseillé)).
Caractéristiques des périphériques externes (disques dur, lecteurs de disquettes,
CDROM, carte vidéo, ordre de démarrage).
Caractéristiques des bus et périphériques intégrés (carte vidéo, carte son, carte réseau,
port série, port parallèle, etc.), configuration des adresses des ports d'entrées/sortie et
des interruptions (interruption request - IRQ).
Paramètres par défaut ou optimaux de la carte mère.
Gestion des fonctions d'économie d'énergie et de données de températures.
Définition d'un mot de passe d'accès et de protection de secteurs vitaux.
La technologie des mémoires flash permet de modifier le contenu de la ROM BIOS
dont il est indispensable de s'assurer que le rechargement s'effectue correctement.
Une sauvegarde est judicieuse en cas de détérioration.
Un mauvais paramétrage peut ralentir le système voir provoquer des instabilités.
■
Mémoire centrale
Les programmes et données évoluent dynamiquement en mémoire RAM (Random
Access Memory) dont la conception est simple (barrettes de 512 Mo à 2 Go, temps
d'accès de 5 à 30 ns). Son contenu est rafraîchi périodiquement car elle se décharge en
quelques millisecondes.
■
Cache matériel
Les cartes mères peuvent intégrer deux niveaux de cache matériel (L1 et L2) comme
les processeurs. D'un temps d'accès de l'ordre de 5ns, ils anticipent lectures ou
écritures. Les capacités varient de 256 Ko et 1 Mo.
■
Cache logiciel (cache)
Le cache logiciel est une zone de la mémoire RAM complétant les caches matériels.
■
Mémoires secondaires
Les unités de stockage externes (disques durs, CDROM, DVD, clé USB, etc.)
constituent les mémoires secondaires.
ARCHITECTURE DES ORDINATEURS PERSONNELS
33
────────────────────────────────────────────────────────────
3.4 Cycle d'une instruction
■
Registres généraux
Le traitement des données par l'UAL nécessite leur stockage dans un accumulateur ou
des registres généraux d'accès plus rapide que celui de la mémoire centrale.
Remarque : la base de registres de Windows
Les fichiers de configuration des systèmes Windows constituent sa base de registres,
sans rapport avec les registres du processeur.
■
Cycle d'une instruction
L'unité de commandes (unité d'instructions, unité de contrôle) extrait de la mémoire
centrale l'instruction à exécuter et l'analyse. Elle charge ensuite depuis la mémoire les
données sur lesquelles porte l'instruction et exécute le traitement de ces données avec
l'unité arithmétique et logique. Elle range les résultats dans la mémoire centrale.
Le temps de cycle est la durée d'exécution d'une instruction élémentaire.
■
Horloge temps réel
L'horloge temps réel est un circuit dont les impulsions périodiques déterminent le
cycle d'horloge et interrompent périodiquement le processeur pour redonner la main
au système d'exploitation ou stopper un processus bloquant. Un tic d'horloge
représente le nombre d'interruptions du processeur par seconde (typiquement 50).
■
Registres fondamentaux
Le déroulement du cycle d'une instruction nécessite quatre registres fondamentaux :
• le compteur ordinal contenant l'adresse de la prochaine instruction à exécuter,
• le registre instruction contenant l'instruction à exécuter.
• les registres d'adresse et d'échange pour chargement (load) et rangement (store).
Les registres fondamentaux opèrent sur les instructions, les registres généraux sur les
données.
■
Registre des indicateurs d'état ("FLAGS")
L'arithmétique nécessite certains indicateurs d'état (drapeaux) :
C : retenue (carry)
Indique les opérations arithmétiques avec retenue.
O : débordement (overflow) Test un débordement éventuel.
N : négatif (negative)
Contenu du bit de signe d'un nombre.
Z : zéro (zero)
Tests, opérations arithmétiques et opérations logiques.
3.5 Jeu d'instructions
L'unité arithmétique et logique est constituée d'instructions élémentaires réalisant les
opérations arithmétiques, logiques, et spécialisées, chacune identifiée par son code
opération. Les données sur lesquelles elle opère sont appelées opérandes. Le codage
d'une instruction dépend du mot et du nombre de bits d'adresse de ses opérandes.
34
CHAPITRE II
─────────────────────────────────────────────────────────────
Exemples
6 bits de code opération permettent 26 instructions élémentaires, 4 bits d'adresse d'un
opérande offrent un accès à 16 registres, 32 bits d'adresse accèdent à 232 mots.
L'addition de deux opérandes entiers nécessite le code opération de l'addition, les
adresses des opérandes et du résultat. L'instruction a donc la forme :
Code Opération Adresse 1ère Opérande Adresse 2ième Opérande Adresse résultat
T
rois registres contiennent les opérandes (R1,R2) et le résultat (R3).
R1
R2
Commande
R3
Diagramme d'une UAL à 3 adresses
■
Modes utilisateur et superviseur
Les instructions ordinaires constituent le mode utilisateur. Elles sont accessibles à
tout processus et leur exécution ne doit pas mettre en péril une autre tâche
Les instructions privilégiées constituent le mode superviseur (mode système, mode
noyau). Elles sont activées par l'horloge temps réel et réservées à l'usage exclusif du
noyau du système d'exploitation.
■
Compatibilité
Les évolutions des jeux d'instructions des microprocesseurs déterminent les
performances et programmes supportés par une machine donnée.
• Les applications s'exécutant sur d'anciens microprocesseurs fonctionnent sur les
microprocesseurs plus récents (compatibilité ascendante).
• Les applications s'exécutant sur les microprocesseurs récents ne fonctionnent pas
sur des microprocesseurs anciens s'ils utilisent les fonctionnalités les plus récentes.
• Les microprocesseurs de différents fondeurs ne sont général pas compatibles.
3.6 Performances
Les facteurs d'efficacité des opérations arithmétiques sont les suivants : rapport de la
taille des bus de données interne et externe (8, 16, 32 et 64 bits) et de la longueur des
mots, opérations avec ou sans retenue. Une unité centrale ne peut donc pas être
évaluée uniquement par sa vitesse d'horloge mais aussi par la richesse de son jeu
d'instructions, la taille des bus et des mots.
ARCHITECTURE DES ORDINATEURS PERSONNELS
35
────────────────────────────────────────────────────────────
■
Pipeline
Les opérations de chargement et rangement, l'addition entière sur 64 bits nécessitent 2
cycles d'une machine dont la taille des mots et du bus de données est de 32 bits et la
fréquence d'horloge de 1 GHz. Leur durée respective de 2 ns détermine le temps
d'exécution total de l'instruction en langage évolué c=a+b (8 ns) dont les instructions
élémentaires sont :
Charger depuis la mémoire l'opérande entier a dans R1
Charger depuis la mémoire l'opérande entier b dans R2
Addition (entière) de R1et R2 et stockage du résultat (entier) dans R3
Ranger le contenu de R3 en mémoire à l'adresse de c
Le schéma ci-dessous présente un processeur pipeliné à trois niveaux exécutant
simultanément trois instructions différentes ce qui améliore ses performances (4 ns).
■
Mesures
Un indice de performance est le temps d'exécution d'une tâche, produit du nombre
d'instructions, nombre de cycles par instruction et temps de base du cycle.
Une unité élémentaire et vague est le Mips (Million d'instructions par secondes) sa
définition ne prenant pas en compte la nature de l'instruction et ne précisant ni la taille
du bus, ni l'architecture (scalaire, vectorielle, pipelinée, parallèle, etc.) ni si le temps
est celui du cycle ou de l'exécution. Une autre mesure, significative est le nombre
d'opération en virgule flottante par seconde (Flops).
■
Indices de performance
Des indices de performance (benchmarks) valides pour tous les systèmes sont établis
en procédant à des tests dédiés tenant compte de la configuration et de la charge.
36
CHAPITRE II
─────────────────────────────────────────────────────────────
Exemples
En 2008, le CNRS s’est équipé d'une des plus puissantes plates-formes au monde de
207 Téra Flops conçue par IBM, composée de dix armoires Blue Gene/P (139 TFlops)
et d'un groupe de huit modules Power 6 (68 TFlops).
L'année 2009 verra la première machine Petaflopique de l'histoire (puissance
d'1 PFlops).
La SSBA, gratuite, développée par l'AFUU (Association Française des Utilisateurs
d'Unix et des Systèmes Ouverts) mesure les performances et la portabilité.
La suite SiS Software Sandra est un outil d'analyse des systèmes Windows proposant
des modules d'évaluation des performances du processeur, de la carte vidéo, des ports,
des imprimantes, de la carte son, de la mémoire, du réseau, des bus, etc.
■
Classification (ordinateur universel, station de travail, ordinateur personnel)
Unité Centrale
RAM (Go)
Rapidité (Mips)
Disque (Go)
Nombre de disques
Nombre de terminaux
Main frame
1 à 2048
1-256
10000
5-300
1 à 500
1-2500
Station
1 à 128
1-64
1000
5 à 300
1 à 16
1-6
Ordinateur personnel
1à8
0.25 à 4
100
5 à 300
1à8
1
ARCHITECTURE DES ORDINATEURS PERSONNELS
37
────────────────────────────────────────────────────────────
3.7 Bus internes, externes et contrôleurs
Une carte mère est constituée de circuits réalisant les fonctions suivantes : support du
processeur, gestion de la mémoire, contrôleurs des bus d'entrées/sorties, horloge
temps réel, etc. Les transferts entre la mémoire centrale et l'unité arithmétique et
logique sont effectués par mots ou demi-mots par des bus internes : le bus des données
qui gère les transferts de données, le bus d'adresses qui contient l'adresse de
l'information, le bus de contrôle.
U n ité d e c o n trô le
I n s tru c tio n s
M é m o ir e C e n tra le
U n ité A r ith m é r iq u e
e t lo g iq u e
D onnées
R é s u lta ts
U n ité s d 'é c h a n g e s
C o n tr ô le u r s d e s p é r ip h é riq u e s
■
Les circuits spécialisés (Chipset)
Des circuits spécialisés pilotent les contrôleurs, les accès aux bus, les accès mémoires
et les périphériques intégrés.
Le circuit North Bridge P35 gère le bus PCI express x16 et les accès mémoires directs
du microprocesseur. Le circuit South Bridge ICH9 gère bus SATA2, ports USB, bus
PCI Express x1, bus PCI, bus Ethernet, lecteur de disquette, ports série et parallèle.
38
CHAPITRE II
─────────────────────────────────────────────────────────────
Le bus FSB (Front Side Bus) gère les flux RAM/processeur (667 à 1333 MHz).
Le bus USB 2.0 est un standard de connexion dynamique des périphériques externes.
Le bus PCI Express, spécifié par Intel (2004) dérive du bus PCI (32 bits) et utilise des
lignes bidirectionnelles dont chacune permet des échanges à 250Mo/s (version 1.1).
Les bus (8 bits - 1981), ISA (16 bits -1984), AGP (32 bits - 1997) sont obsolescents.
ARCHITECTURE DES ORDINATEURS PERSONNELS
39
────────────────────────────────────────────────────────────
■
Connecteurs
Les connecteurs (slots) permettent d'enficher (plug) des contrôleurs de périphériques :
connecteurs PCI(3), PCI Express (3+1), DDR (4), ATX (alimentation), ventilateurs.
■
Contrôleurs
Un contrôleur est une interface matérielle entre bus interne et externe. Sur le présent
schéma, on distingue les contrôleurs suivants : SATA2 (6) et IDE (1) pour des disques
durs, USB (12), FDD (disquette), COM (port série), LPT (port parallèle), LAN
(connecteur réseau local), PS/2 (clavier, souris), Optical (S/Pdif), Coaxial (S/Pdif).
Le contrôleur DMA (Direct Memory Access) effectue des entrées/sorties directes en
mémoire sans utiliser le processeur, le contrôleur d'interruptions gère les interruptions
matérielles, l'horloge temps réel synchronise le système matériel.
■
Quelques bus externes
Le bus Ultra DMA (Parallel ATAPI - PATA) est compatible EIDE avec un taux de
transfert théorique de 16, 33, 66, 100, 133 Mo/s (PATA), deux périphériques
connectables.
Le bus SATA (Serial ATAPI) compatible PATA, d'un débit de 1.5 Go/s, à peine
supérieur à la dernière génération de bus PATA ne gère qu’un périphérique. Le bus
SATA2, d'un débit de 3 Go/s est disponible.
Le bus SCSI est standard sur stations de travail et gros systèmes. On distingue les
interfaces SCSI, ultra SCSI, ultra wide SCSI, ultra 640 SCSI, etc., dont les
connecteurs diffèrent comme les débits (10 à 640 Mo/s) et le nombre de périphériques
connectables : 8 (SCSI), 8 ou 16 (ultra SCSI, ultra wide SCSI, etc.).
■
Périphériques intégrés
Carte son, carte réseau RJ45.
40
CHAPITRE II
─────────────────────────────────────────────────────────────
Exemple : gestionnaire de périphériques Windows
ARCHITECTURE DES ORDINATEURS PERSONNELS
41
────────────────────────────────────────────────────────────
3.8 Supports matériels des entrées/sorties
Plateau
Secteur
Vue de dessus Piste
Cylindre
Partition
Vue de face
Géométrie d'un disque
■
Volume
Un volume est une unité de mémoire secondaire (clé USB, CDROM, etc.), identifié
par un nom (label de volume). Le type le plus usuel de volume est le disque dur dont
l'unité de transfert est l'enregistrement physique ou bloc d'informations.
■
Fichier
Un fichier est une suite d'octets stockée sur un volume accessible uniquement par des
opérations spécialisées (lecture, écriture).
■
Temps d'accès
Le temps d'accès d'une opération d'entrées/sorties se compose du temps de recherche
(déplacement des têtes de lecture/écriture sur le disque), du temps d'attente (attente du
passage du bloc en face de la tête), et du temps de chargement ou de rangement du
bloc. Sur un disque dur, il varie de 8 à 12ms.
■
Plateau (platter)
Un plateau est un disque circulaire et magnétique utilisé pour le stockage de données.
10
12
11 0
13
1
9
2
8
3
7
■
14
4
6
5
Piste (track)
Une piste est une portion radiale d'un plateau accessible par une tête magnétique
constituée de secteurs contigus.
42
CHAPITRE II
─────────────────────────────────────────────────────────────
■
Secteur (sector)
Un secteur est une subdivision d'une piste (en octet) constituant l'unité
d'enregistrement physique.
■
Cylindre (cylinder)
Un cylindre est constitué d'un ensemble de plusieurs pistes d'un groupe de plateaux
ayant la même distance radiale au centre du plateau.
■
Vitesse de rotation
Les disques les plus lents ont une rapidité de 5400 Tours/mn, les plus rapides de 7200
à 10 000 Tours/mn.
■
Bloc
Un bloc (enregistrement physique) est le nombre d'octets lu ou écrit à chaque accès
sur le disque.
Exemple : caractéristiques d'un disque dur d'un ordinateur personnel PC
La capacité d'un disque de 2,4055*107 pistes de 17 secteurs de 512 octets est
d'environ 210 Go.
■
Formatage de bas niveau
La définition de la taille des secteurs, obligatoire avant une première utilisation,
s'appelle sectorisation, formatage, initialisation.
Un bloc est identifié par son adresse composée de plusieurs éléments (numéro de
cylindre, de piste et de secteur). Lors du formatage, chaque secteur est vérifié. Les
éventuels secteurs défectueux sont identifiés et éliminés de la liste des secteurs sains.
Le formatage de bas niveau est effectué en usine. Toutefois, il peut être recommandé
dès l'installation du disque pour optimiser le taux de transfert entre le disque dur et la
station, un formatage de bas niveau inadapté pouvant faire chuter les performances.
La capacité formatée d'un disque dur est de 90% de la capacité nominale, avant le
formatage de bas niveau.
La capacité se mesure en Go. Curieusement, tous les fabricants de disques durs
n'utilisent pas les mêmes : chez certains (épiciers), 1Go = 109 Octets. Chez d'autres,
1 Go = 230 Octets.
Les capacités en 2008 varient de 150 à 700 Go pour un coût minimal d'environ 50 €.
■
Partition
Une partition représente un ensemble de secteurs de stockage des informations.
■
Tables d'allocation
Tout bloc est décrit par des informations redondantes gérées par le contrôleur interne
du disque.
ARCHITECTURE DES ORDINATEURS PERSONNELS
43
────────────────────────────────────────────────────────────
■
Débit
Le choix du bus externe (SATA, SCSI) est déterminant pour des hautes performances.
Le débit (Mo/s) sur le bus permet de mesurer les performances effectives d'un disque.
Certains sont dotés de caches matériels internes important (8 Mo).
■
Supports à accès séquentiel
Les principaux supports à accès séquentiel sont les cartouches magnétiques
fonctionnant en mode analogique (streamer), les cartouches magnétiques
fonctionnant en mode digital (DAT - Digital Audio Tape ou DLT - Digital Linear
Tape). Ces derniers médias s'utilisent surtout avec des bus SCSI, d'une capacité
maximale de 800 Go.
■
Supports à accès direct
• Clés USB, d'un coût modique et d'une capacité de stockage de quelques Go, dotées
de mémoires flash pouvant conserver en permanence l'information,
• Disques durs, fixes ou amovibles, d'un temps accès rapide (10 ms), d'une capacité
de stockage toujours plus importante (Go ou To),
• CDROM d'une capacité de 700 Mo, DVD d'une capacité de 4 à 8 Go utilisé pour les
applications multimédia et les installations de logiciels. L'écriture est exécutée par
un rayon laser qui marque le support de façon destructrice. Une fois la zone écrite,
celle-ci n'est plus modifiable sauf sur les CD/DVD réinscriptibles.
■
Opérations sur les volumes
La préparation du volume pour son utilisation appelée formatage de haut niveau.
Le montage est l'intégration physique puis logique d'un volume formaté par le système
d'exploitation rendant ce dernier accessible. Le démontage est l'opération inverse du
montage, nécessaire par exemple quand on retire une clé USB.
Lors de la suppression de fichiers, l'espace disponible est réutilisé, éventuellement de
façon fragmentée sur certains systèmes de fichiers (FAT) ce qui est pénalisant
(overhead). Il est alors nécessaire de défragmenter périodiquement les fichiers.
44
CHAPITRE II
─────────────────────────────────────────────────────────────
3.9 Interruptions et déroutements
Une caractéristique fondamentale des ordinateurs est la faculté d'autoriser ou
d'interdire l'interruption d'une action par des mécanismes matériels et logiciels pour
éviter les anomalies d'exécution, contrôler l'exécution des travaux et des requêtes
émises par les périphériques.
On distingue les requêtes d'interruptions (interruption request - IRQ) provoquées par
une demande de service d'une entité matérielle et les interruptions logicielles (traps)
déclenchées par appel direct ou indirect (erreur d'exécution), provoquant un
déroutement de l'application. Un drapeau d'état contient le code du service demandé
ou celui de l'erreur cause du déroutement.
Interruption
Interruption logicielle
Système
Interruption matérielle
Utilisateur
Externe
Exécutable
■
Application : les interruptions d'un PC
Non exécutable
Interne
ARCHITECTURE DES ORDINATEURS PERSONNELS
45
────────────────────────────────────────────────────────────
■
Gestionnaire d'interruptions
Le gestionnaire d'interruptions (interrupts handler) gère les interruptions et les
déroutements qui sont des événements engendrant une action préemptive : le
branchement sur la(es) routine(s) d'interruption.
■
Niveau d'interruption
Certains travaux sont plus urgents que d'autres telle une action interactive ou différée.
Le niveau d'interruption permet de quantifier la priorité d'une action pour en
interrompre l'exécution et en commencer une autre plus prioritaire.
■
Niveau d'exécution
L'ensemble des interruptions et des actions qui s'exécutent à un niveau d'interruption
donné constituent un niveau d'exécution (run level).
■
Masquage des interruptions
L'unité centrale devant quelquefois ignorer certaines requêtes, il existe des instructions
d'inhibition et d'activation des interruptions comme la prise en compte de la priorité
d'un événement, assurée par un mécanisme de masquage/démasquage.
• Le masquage d'un ou de plusieurs niveaux d'exécution retarde la prise en compte
d'un événement de ces niveaux et stocke le programme interrompu pour le réactiver
ultérieurement. Pour cela, il faut :
◊ empiler le contexte (contenu des registres, de la mémoire, du compteur ordinal)
dans la pile des contextes,
◊ identifier la nature de l'interruption,
◊ se brancher sur le module d'interruption chargé de déterminer la source de
l'interruption et d'y répondre.
• Le démasquage d'un ou de plusieurs niveaux d'exécution permet la prise en compte
différée d'événements précédemment masqués.
■
Signaux
Une interruption d'origine matérielle ou logicielle est matérialisée par un signal.
L'armement d'un signal est la description de l'action à exécuter à réception d'un signal
donné.
Exemple
Soit un ordinateur doté d'un micro commutateur de gestion de tâches hiérarchisées en
plusieurs niveaux d'exécution numérotés par ordre de priorité croissante de 0 à 3. A
chaque niveau d'exécution correspond une fonction du système :
• le niveau 3 est le niveau d'exécution des applications usagers,
• le niveau 2 est le niveau d'exécution de gestion des tâches et de la mémoire
• le niveau 1 est le niveau d'exécution des entrées/sorties
• le niveau 0 est le niveau d'exécution des problèmes matériels.
46
CHAPITRE II
─────────────────────────────────────────────────────────────
Processus utilisateur
3
Processus
2
Commutation logicielle par l'ordonnanceur
1
0
Micro-commutateur : commutation matérielle
Niveau d'exécution
Un événement attendu par un processus B peut intervenir à tout moment, par exemple
durant le contexte du processus A.
■
Prise en compte d'une interruption
Une interruption est émise puis prise en compte selon l'algorithme suivant :
• émission d'un signal électrique caractéristique de l'interruption (unité centrale,
périphérique, application, etc.)
• interruption après réception du signal par le processeur du travail en cours avec
sauvegarde de son contexte d'exécution,
• inhibition des interruptions masquables,
• exécution de la requête ayant provoquée l'interruption,
• restauration des interruptions masquées,
• reprise du processus interrompu.
■
Périphériques Plug & Play
Les interruptions et les canaux DMA associés à ces périphériques sont gérés
dynamiquement par le BIOS et le système d'exploitation.
Le périphérique doit être reconnu lors du démarrage de la station. Il faut alors installer
son pilote, fourni avec ce dernier. Deux cas se présentent :
• le périphérique fonctionne correctement, souvent après un redémarrage du poste de
travail. C'est terminé.
• Le périphérique ne fonctionne pas. Deux causes :
◊ conflit matériel (interruption, adresse, canal DMA). Il faut alors manuellement
adapter le numéro de l'interruption, l'adresse, le canal DMA. Si le problème
subsiste, il faut invalider au niveau du BIOS et au niveau du périphérique
(cavalier ou logiciel) la gestion Plug&Play.
◊ conflit logiciel : pilote mal configuré, inadapté ou bogué. Une recherche sur
Internet peut aider à résoudre le problème.
ARCHITECTURE DES ORDINATEURS PERSONNELS
47
────────────────────────────────────────────────────────────
4.
COMPLEMENTS SUR LE SYSTEME MATERIEL
4.1 Carte mère
■
Durée de vie
La durée de vie commerciale d'un système matériel varie de 3 à 12 mois selon le cycle
de vie suivant :
1
2
3
Phase 1 : phase de lancement
Phase 2 : phase de maturité commerciale
Phase 3 : phase d'obsolescence
Cette obsolescence rapide peut poser des problèmes pour la maintenance.
■
Evolutivité
Conformément à la loi de Moore, un doublement des ressources (mémoire, disque,
processeur) tous les 18 mois peut être obtenu en changeant le processeur, le disque
dur, en ajoutant de la mémoire.
A prix comparable, un système à bon potentiel d'évolution est préférable à un système
au maximum de ses possibilités.
■
Configuration manuelle
Une des difficultés historiques de l'installation d'un PC est qu'il peut être nécessaire de
configurer des cavaliers (jumpers) sur la carte mère ou les cartes d'extension. Leur
nombre baisse sur les cartes actuelles, de plus en plus intelligentes et la documentation
du constructeur est indispensable.
48
CHAPITRE II
─────────────────────────────────────────────────────────────
4.2 Périphériques sur bus ATAPI
Le connecteur UDMA (norme ATAPI - ATA with Packet Interface Extension) gère
disques durs, lecteurs et graveurs de CDROM et de DVD. Le respect des règles
suivantes est impératif.
• Deux périphériques en série (daisy chain) au plus peuvent être gérés sur ce bus.
• Une résistance terminale doit être présente sur le périphérique terminal qui
fonctionne en mode maître, l'autre devant fonctionner en mode esclave, entre le
connecteur de la carte mère et le périphérique maître.
• Tout disque de démarrage doit fonctionner en mode maître. Un deuxième
périphérique sur le bus doit fonctionner en mode esclave.
• Un périphérique unique sur le bus doit fonctionner en mode maître même si la
norme autorise un fonctionnement en mode esclave.
Les lecteurs/graveurs de CDROM/DVD peuvent être internes ou externes à l'unité
centrale. Leur vitesse de lecture est de 56x (56 fois la vitesse de référence). La vitesse
de gravure des CDROM va jusqu'à 52x, celle des DVD jusqu'à 24x.
4.3 Périphériques de saisie
■
Clavier
Le clavier peut être intégré à l'unité centrale (portable), être connecté par un port PS/2
ou USB, ou sans fil (connecteur infra rouge).
Il gère les caractères nationaux (en France, un clavier azerty accentué).
Les touches de fonctions sont programmables et permettent d'activer des tâches.
Le clavier numérique est constitué de touches permettant la saisie de chiffres, sans
avoir à utiliser le mode majuscule.
Les touches de gestion du curseur (flèches) permettent des déplacements verticaux ou
horizontaux.
■
Souris
La souris est un boîtier branché sur le port PS/2 ou USB dont les déplacements sur une
surface plane sont reproduits à l'écran par le curseur (interface graphique). Les souris
mécaniques utilisent une bille (plastique ou acier) dont les mouvements modifient
deux potentiomètres (horizontal et vertical). Les souris électromagnétiques, plus
précises, utilisent un repérage sur une tablette. Les souris sans fil sont à connexion
infra rouge.
■
Autres périphériques de saisie
Les lecteurs optiques (lecteurs de code barre), les tablettes à digitaliser, les
convertisseurs analogiques/digitaux, les scanners, les périphériques MIDI
(synthétiseurs musicaux), les modems, les cartes réseau, etc.
ARCHITECTURE DES ORDINATEURS PERSONNELS
49
────────────────────────────────────────────────────────────
4.4 Affichage et acquisition
■
Moniteur
Un moniteur utilise des procédés identiques à ceux mis en œuvre dans des postes de
télévision dont les écrans cathodiques traditionnels (Cathodic ray tube - CRT) sont
remplacés par des écrans plats avec la technologie LCD.
• La fréquence de synchronisation verticale est la fréquence de rafraîchissement (de
balayage) de l'image et varie jusqu'à 85 Hz. Le balayage est entrelacé quand le
faisceau parcourt l'image en deux passes en n'en traçant qu'une ligne sur deux à
chaque passe : lignes paires à l'une, lignes impaires à l'autre. La rémanence est
alors importante. Le balayage non entrelacé donne de meilleurs résultats.
• La stabilité visuelle de l'image impose un balayage du moniteur ligne par ligne 25
fois par seconde au moins et la fréquence de synchronisation horizontale
(fréquence ligne) est définie par le temps de balayage d'une ligne complète.
• La résolution de l'affichage est le produit du nombre total de lignes par le nombre
de pixels par ligne.
• La taille du moniteur est mesurée par la longueur de la diagonale et s'exprime
généralement en pouces (2.54 cm). Les tailles actuelles varient de 15 à 23 pouces.
• La bande passante d'un moniteur (MHz) est le produit de la résolution par la
fréquence verticale. Elle peut varier jusqu'à 140 MHz.
Exemple
Le tracé d'une image 25 fois par seconde avec une définition de 800 lignes impose une
fréquence de 20 KHz. Sur les moniteurs actuels, elle varie jusqu'à 85 KHz.
50
CHAPITRE II
─────────────────────────────────────────────────────────────
■
Mode d'utilisation
Un moniteur fonctionne en mode texte quand il n'affiche que des caractères, en mode
graphique dès que l'on peut visualiser des images. Un écran intelligent est doté de
mémoire et d'un processeur graphique.
En mode texte, l'écran comporte 25 lignes de 40 ou 80 caractères.
Les attributs graphiques sont : vidéo inverse, soulignement, clignotement, sur et sousbrillance, niveaux de gris, nombres de couleurs.
En noir et blanc, le niveau de gris d'un pixel est codé sur un ou deux octets.
En couleur, les couleurs de base R(ouge)V(ert) B(leu) d'un pixel sont codées sur un,
deux, ou trois octets et ce qui permet l'utilisation de 28, 216, 224 couleurs. Une image
en couleur d'une résolution de 640*400 pixels nécessite donc 256 Ko, 512 Ko, ou
1 Mo selon le nombre d'octets d'un pixel.
■
Normes d'affichage
Les normes des contrôleurs d'écrans ont beaucoup évolué depuis 1987, année où IBM
annonce le format VGA (Video Graphic Array) qui est le standard actuel de base.
Les cartes vidéo actuelles sont multistandards, dotées d'une capacité mémoire variant
de 64 à 512 Mo, de capacité de traitement autonomes en mode 2D ou 3D.
ARCHITECTURE DES ORDINATEURS PERSONNELS
51
────────────────────────────────────────────────────────────
■
Imprimantes
Les paramètres caractéristiques d'une imprimante sont sa rapidité d'impression en
pages par minutes et sa technologie. On distingue aujourd'hui deux types
d'imprimantes :
Imprimante laser
La qualité d'impression est parfaite. Dotées de mémoire, elles sont pilotées par un
microprocesseur interne. Elles sont robustes et peuvent imprimer tout type de
document. Les plus réputées sont fabriquées par HP ou EPSON. Les moins chères
sont de l'ordre de 150 € en noir et blanc, 250 € en couleur. Un toner vaut environ 75 €.
Imprimante à jet d'encre
Moins robustes que les imprimantes laser, les imprimantes à jet d'encre offrent une
excellente qualité d'impression pour un prix modique (80 €). Les consommables
(cartouches d'encre) sont très onéreux.
Il existe trois interfaces : série, parallèle, USB (le standard actuel).
■
Scanner
Les scanners digitalisent du texte ou des images.
Trois interfaces possibles : parallèle, USB ou SCSI.
Un logiciel de reconnaissance de caractères (OCR) reconstitue un texte digitalisé. Le
taux de reconnaissance des caractères est de l'ordre de 90% ce qui conduit tout de
même à 15 fautes par page. Il est donc judicieux d'utiliser un dictionnaire après la
reconnaissance.
Des logiciels de retouches d'images sont disponibles (Photoshop (Adobe), Picassa
(domaine public), etc.).
■
Multimédia
Le PC permet d'effectuer les traitements (acquisition ou restitution) du son et
d'images. Ainsi, il permet de connecter des appareils photos numériques, des caméras
numériques, de faire des traitements sur des photos, des films, des sons. Tous ces
objets utilisent des formats de représentation en pleine évolution.
Son
Deux classes de formats : wav et mp3 basés sur des techniques d'échantillonnage et de
compression sonore pour numériser des sons en mono, ou en stéréo, la fréquence
d'échantillonnage déterminant la qualité sonore du résultat et l'espace disque
nécessaire.
Image
Deux classes de formats : les fichiers avi (les plus complets), et les fichiers
compressés aux normes MPEG2, MPEG4, MPEG7.
Codec
L'abréviation codec désigne un procédé de compression/décompression d'un signal
(analogique ou numérique).
52
CHAPITRE II
─────────────────────────────────────────────────────────────
4.5 Cartes d'extension
On peut étendre la configuration de base d'une station par adjonction de cartes
enfichées dans les connecteurs d'accès aux différents bus.
■
Carte vidéo
Elle est dotée d'une capacité mémoire vidéo comprise entre 128 Mo et 512 Mo. Elle
peut être intégrée à certaines cartes mères. Les cartes actuelles utilisent le bus
PCI Express ou le bus AGP (obsolescent). Elles sont dotées d'un processeur
graphique (Graphical Processor Unit – GPU) pour gérer des images 3D.
■
Gestion des imprimantes
Elles sont interfacées au poste de travail par une interface série, parallèle, USB,
intégrée sur la carte mère.
■
Carte de communications
Un port série peut aussi être utilisée comme interface de communications pour
transformer l'ordinateur personnel en terminal asynchrone d'un ordinateur.
Des cartes (interface RJ45) permettent de connecter les ordinateurs sur des réseaux
Ethernet.
■
Autres cartes
Manettes de jeux (joystick), acquisition de son ou d'images, accès à un périphérique
musical (MIDI), etc.
ARCHITECTURE DES ORDINATEURS PERSONNELS
53
────────────────────────────────────────────────────────────
Exemple : le gestionnaire des périphériques Windows
4.6 Protocole d'installation d'un ordinateur personnel
Installation d'une station et vérification du fonctionnement de la configuration
matérielle, avec ses paramètres par défaut.
Vérification des connexions et du sens de connexion des câbles (nappes) asymétriques
ou avec détrompeur.
Installation un par un des disques durs et des autres périphériques,.
54
CHAPITRE II
─────────────────────────────────────────────────────────────
5.
TOLERANCE DE PANNES ET TECHNOLOGIE RAID
Le principe de la technologie RAID (Redundant Arrays of Inexpensive Disks) est basé
sur la multiplication des disques pour garantir une bonne tolérance aux pannes.
On distingue différentes technologies RAID.
■
La technologie RAID 0
Appelé aussi stripping, les données sont réparties sur au moins deux disques sous la
forme d'agrégats par bandes (voir la définition avec la technologie RAID 5).
Le débit de la grappe de disques (cluster) en technologie RAID 0 est celui de son
nombre de disques. Ainsi, une grappe de 4 disques d'un débit unitaire de 33 Mo/ a un
débit de 132 Mo/s.
Elle n'apporte aucune sécurité des données, la perte d'un disque entraînant la perte des
données de tous les disques de la grappe.
■
La technologie RAID 1
Cette technologie utilise deux disques identiques pilotés par un contrôleur unique
(mirroring) ou par deux contrôleurs (duplexing).
Toute modification d'un disque est immédiatement répercutée sur l'autre qui est donc
un disque miroir appelé réplique. Un disque victime d'un incident peut être changé.
Le point faible de cette technologie est l'unicité du contrôleur dans la technique du
mirroring qui ne dispense en aucun cas d'un dispositif de sauvegarde sur support
magnétique.
Remarques
• Une partition miroir doit être sur un autre disque physique et sa taille au moins
égale à celle du disque d'origine.
• Les disques (reflété et miroir) sont accessibles par un identificateur unique.
• Toute partition est exploitable en miroir.
■
La technologie RAID 2
Identique à la technologie RAID 1 un seul disque étant sollicité lors des lectures.
■
La technologie RAID 3
Technologie RAID 0 complétée (disque de parité) pour détecter les erreurs d'écriture.
ARCHITECTURE DES ORDINATEURS PERSONNELS
55
────────────────────────────────────────────────────────────
■
La technologie RAID 4
Similaire à la technologie RAID 3, le disque de parité travaillant deux fois plus.
■
La technologie RAID 5
Préférée à la technologie RAID 4, cette technique utilise le concept d'agrégat par
bande avec parité :
• Trois zones de même taille au moins sont nécessaires sur trois disques physiques
différents.
• L'agrégat par bande, réparti sur différents disques constitue une partition logique,
similaire à l'agrégat de partitions.
◊ L'agrégat est découpé en bandes.
◊ Un fichier d'une taille supérieure à une bande est réparti sur deux bandes.
◊ L'extension d'un agrégat par bande provoque la destruction de ses données.
La technologie RAID 5 utilise moins d'espace disque que la technologie RAID 1. Elle
impose toutefois de disposer d'au moins trois disques les informations de parité devant
être stockées sur un disque externe pour chaque bande de l'agrégat.
La gestion de la parité entraîne une dégradation des performances et l'espace
nécessaire à cette gestion est inversement proportionnel au nombre de disques utilisés.
La parallélisation des entrées/sorties améliore les performances.
6.
SYSTEMES DE STOCKAGE DISTRIBUES NAS ET SAN
■
Problématique du stockage
■
Protection contre les catastrophes
La concentration des ressources de traitement et de stockage au même endroit rend le
système très vulnérable vis-à-vis des catastrophes (inondation, incendie, catastrophes
naturelles, etc.). Pour les prévenir, il est indispensable d'éloigner le stockage du
traitement et de mettre en place des mécanismes de restauration rapides. Or, le bus
56
CHAPITRE II
─────────────────────────────────────────────────────────────
SCSI, un des standards actuels, limite à quelques mètres la distance entre le
périphérique et l'unité de contrôle.
Lorsque chaque serveur dispose de ses propres ressources de stockage,
l'administrateur de système doit intervenir au niveau de chacun des différents
systèmes, pas forcément homogène.
■
Optimisation de l'utilisation de l'espace de stockage
Les méthodes d'optimisation du stockage distant sont les suivantes :
• centralisation du stockage ce qui en simplifie l'administration,
• charge du réseau diminuée par utilisation de caches sur postes clients et serveurs,
• optimisation des temps de réponse par utilisation de périphériques rapides,
• diminution ou masquage des temps de sauvegarde par des logiciels spécifiques.
Le principe de la consolidation des serveurs stipule que tous les serveurs de
l'entreprise sont regroupés.
Les fournisseurs de systèmes de stockage ont été amenés à proposer des architectures
permettant le partage l'espace de stockage entre différents systèmes dans un réseau
local à très haut débit de type Fiber Channel dédié à la gestion des flots de données..
■
Architectures NAS
Le protocole NAS (Network Attached Storage - stockage attaché au réseau) permet de
gérer des ressources de stockage distribuées sur le réseau Intranet et accessibles par
des protocoles de haut niveau tels NFS.
L'abstraction présentée aux systèmes clients est de type serveur de fichiers distribués.
Les clients émettent des requêtes (lecture - écriture) vers les fichiers distants, la seule
opération nécessaire au préalable étant la connexion au serveur correspondant.
■
Architectures SAN
Un réseau de stockage (Storage Area Network - SAN) à haut débit est constitué
d'unités directement connectés accessibles par des systèmes distribués indépendants.
ARCHITECTURE DES ORDINATEURS PERSONNELS
57
────────────────────────────────────────────────────────────
■
Comparaison des architectures SAN et NAS
Réseau
NAS
SAN
Réseau existant
(ethernet, FDDI, etc.)
Réseau spécialisé
Fonction des Unités de Serveur
de
Stockage
hétérogènes
7.
fichiers Serveurs de stockage
Service de protection et
de partage
Protocole d'échange
Niveau 7
Niveau 1 ou 2
Bande passante
réseau Intranet
N Gbits/s
Administration
Serveurs de fichiers
Directe
EXERCICE
1°) Etablir une cartographie de votre ordinateur (pilotes de périphériques,
caractéristiques physiques du processeur, des différents bus internes et externes, de la
carte mère, des périphériques externes.
Sous Windows, on pourra utiliser un logiciel tel Everest, PC Wizard, Aida, etc.
2°) Evaluer les performances de la machine.
3°) Modifier les paramètres du BIOS pour essayer d’overclocker la machine.
CHAPITRE III
GENERALITES SUR LES SYSTEMES
D'EXPLOITATION
1.
ARCHITECTURE ET MODELISATION
1.1 Présentation et rôle du système d'exploitation
Dans chaque ordinateur, un ensemble de programmes appelés moniteur (monitor),
gestionnaire de travaux (task manager) ou noyau (kernel), contrôlent l'exécution des
applications, gèrent les ressources, les flux d'informations et fournissent des services.
Nous utilisons le terme plus général de système d'exploitation (operating system).
Un système d'exploitation assure les services suivants :
• gestion, ordonnancement, partage, contrôle des ressources et de la fiabilité du
système entre les travaux et les utilisateurs (temps partagé, multitâche, etc.)
• gestion, conservation, et protection des flux d'informations (entrées/sorties),
• transformation de la machine réelle en machine virtuelle par l'interface homme
machine.
■
Ce que n'est pas un système d'exploitation
Le système d'exploitation n'est pas une machine indépendante qui contrôle
l'ordinateur. Ce n'est ni un langage de programmation, ni un compilateur, ni un
interprète de commandes, ni une bibliothèque. Tous les programmes, y compris le
système d'exploitation sont écrits dans un langage de programmation.
On perçoit le système d'exploitation de deux manières différentes :
■
Le point de vue de l'utilisateur
Le système d'exploitation est un fournisseur de services (téléphonie mobile, accès
internet, messagerie électronique, etc.) accessible par une interface homme machine
plus ou moins ergonomique.
■
Le point de vue de la machine
Le système d'exploitation gère le système : utilisateur, fichiers, programmes.
Exemples
Windows XP, Linux, Unix, MVS.
Nous allons décrire sommairement, avec ce point de vue, le fonctionnement général
de la machine.
60
CHAPITRE III
──────────────────────────────────────────────────────────────
1.2 Machine virtuelle
Les concepts présentés dans le présent chapitre ont permit de prendre en compte les
évolutions permanentes des systèmes matériels. Ainsi, les machines de première
génération étaient rudimentaires et chères. Seuls, quelques programmeurs avertis
pouvaient les utiliser et peu d'entre eux étaient capables de réaliser un système
d'exploitation alors fortement dépendant de l'architecture matérielle.
La conception des systèmes d'exploitation a progressé dès que les machines sont
devenues multitâches. Les besoins de mécanismes de contrôle du système et la
nécessité d'un fonctionnement fiable ont conduit aux définitions des concepts de
processus, ressource, etc., dès l'apparition des machines de deuxième génération.
La philosophie actuelle est qu'un système d'exploitation doit être indépendant du
matériel qui le supporte. Il fournit des services de haut niveau d'une machine abstraite
appelée machine virtuelle qui masque la machine réelle (de bas niveau). Le système
d'exploitation Unix en est une parfaite illustration car il est implémenté sur toute
architecture matérielle dont l'utilisateur a ainsi une vision uniforme.
1.3 Modèle en couches
La machine est le support matériel du système d'exploitation. Des couches de logiciels
implémentent les fonctionnalités de base qui fournissent chacune un service par
exemple la gestion des applications. Le système d'exploitation est donc représenté par
un modèle en couches qui en illustre la hiérarchie.
Programme d'application
Utilisateur
Utilitaire système
Logiciel de base
Système d'exploitation
Machine matérielle
Au niveau inférieur se trouve le matériel, inutilisable seul. Les deux niveaux
supérieurs constituent le logiciel de base sur lequel s'appuie le dernier niveau : les
logiciels applicatifs. Toutes les couches sont nécessaires.
Exemple
Processus utilisateur
Appel système
Interface noyau
Gestion des processus Systèmes de fichiers
Ordonnanceur
Mode caractère
IPC
Mode bloc
Gestion mémoire
Cache
Gestion des interruptions
Interface matériel et pilotes
ARCHITECTURE DU NOYAU UNIX
Noyau
GENERALITES SUR LES SYSTEMES D'EXPLOITATION
61
──────────────────────────────────────────────────────────────
■
Applications
Une machine virtuelle peut utiliser les services d'une autre machine virtuelle.
machine virtuelle MV1
machine virtuelle MV2
machine réelle
Exemples
La machine virtuelle Linux (ici MV1) peut fonctionner avec le gestionnaire de
machine virtuelle VMvare (MV2), encapsulé qui utilise la machine réelle Windows en
mode natif.
Plusieurs machines virtuelles peuvent coexister (interprète de commande, interface
graphique, traitement de texte, etc.
2.
PROCESSUS
2.1 Définitions
• Un programme est un ensemble d'instructions indivisibles.
• Une ressource est un objet informatique (mémoire, disque, compilateur, éditeur de
liens...) nécessaire à l'exécution d'un travail.
• Une tâche à exécuter est le triplet (programme, données système, ressources). C'est
un objet statique.
• Un processeur est l'entité matérielle et logicielle nécessaire à l'exécution d'une
tâche.
• Un processus est une tâche en cours de traitement. C'est un objet dynamique.
• Un processus en cours d'exécution est actif, activable s'il dispose de toutes les
ressources requises pour s'exécuter à l'exception du processeur, bloqué sinon.
• Une ressource est :
◊ locale à un processus si elle ne peut être utilisée que par ce dernier.
◊ commune si elle n'est locale à aucun processus.
◊ partageable avec n points d'accès (n > 1) si elle peut être attribuée au même
instant à n processus au plus. Une ressource partageable avec un unique point
d'accès est dite critique.
• Des processus sont indépendants s'ils n'utilisent que des ressources locales,
parallèles pour une ressource s'ils peuvent l'utiliser simultanément et en exclusion
mutuelle s'il s'agit d'une ressource critique.
62
CHAPITRE III
──────────────────────────────────────────────────────────────
Exemples
• L'unité centrale est une ressource critique.
• Une application peut être utilisable simultanément par n utilisateurs.
• Un fichier en lecture a une infinité de points d'accès contrairement à un fichier en
écriture, qui est une ressource critique à un point d'accès tel une imprimante.
2.2 Exclusion mutuelle
Le partage d'une ressource critique par plusieurs processus risque d'entraîner une
incohérence dans le fonctionnement du système.
Exemple
L'application distribuée suivante est une transaction.
LIRE X
ADD 1
ECR X
/* additionner 1 à X */
/* écrire X sur un fichier */
On suppose deux transactions concomitantes générées par les processus P1 et P2.
X
Processus P1
Disque dur
Processus P2
Supposons la transaction divisible et l'ordre d'exécution des instructions aléatoire :
Processus P1
a) LIRE X
b) ADD 1
c) ECR X
Processus P2
d) LIRE X
e) ADD 1
f) ECR X.
L'ordonnancement des processus peut conduire à la séquence S1 = (a,b,c,d,e,f) :
X
Image de X
Disque dur
Image de X+1
ou bien à la séquence S2 = (a,b,d,c,e,f).
Image de X
X
Disque dur
Les valeurs écrites diffèrent : (X+1)+1 (séquence S1), X+1 (séquence S2) ce qui est
évité si une transaction est indivisible et effectuée en exclusion mutuelle d'une l'autre.
GENERALITES SUR LES SYSTEMES D'EXPLOITATION
63
──────────────────────────────────────────────────────────────
■
Section critique
Soit une ressource critique R. On appelle section critique d'un processus P pour la
ressource R une phase du processus pendant laquelle R est utilisée par P et donc
inaccessible à un autre processus demandeur, qui doit obtenir un droit d'accès à la
ressource critique avant d'entrer en section critique. Si la ressource est disponible, ce
droit est alloué ; le processus demandeur est mis en attente jusqu'à sa libération sinon.
Modélisation d'une section critique
ETAT(P)=ACTIF
requête de la ressource R par le processus P
si R est utilisée par un autre processus
alors
état (P) = bloqué ; mettre P en file d'attente de R dans la file f(R)
sinon
allouer R à P et en interdire l'accès à tout autre processus
P rentre dans la section critique
is
■
Verrou mortel
Des sections critiques imbriquées conduisent à des situations de blocage mutuel,
également appelées interblocage, verrou mortel (dead lock) ou étreinte fatale.
Exemples
Le processus P détient la ressource R1 et ne la rendra que s'il obtient la ressource R2,
le processus Q détient la ressource R2 et ne la rendra que s'il obtient la ressource R1…
R1
R2
Soient les processus P et Q comportant deux sections critiques distinctes S1 et S2.
Processus P
P1
Demander les droits d'accès pour S1
P2
Demander les droits d'accès pour S2
P3
Restituer les droits d'accès pour S2
P4
Restituer les droits d'accès pour S1
Processus Q
Q1
Demander les droits d'accès pour S2
Q2
Demander les droits d'accès pour S1
Q3
Restituer les droits d'accès pour S1
Q4
Restituer les droits d'accès pour S2
La séquence (P1,Q1,P2,Q2) conduit à l'interblocage perpétuel des processus P et Q.
64
CHAPITRE III
──────────────────────────────────────────────────────────────
■
Famine
La famine est une autre situation à éviter. Soit un processus bloqué dans une file
d'attente d'accès à une ressource. Supposons qu'à l'instant de la restitution de la
ressource critique apparaisse un autre processus demandeur de cette ressource et que
cette dernière lui soit allouée sans vidage de la file d'attente. Tant que le phénomène
se reproduit, le processus en attente est privé de l'utilisation de cette ressource.
■
Propriétés de la solution du problème de l'exclusion mutuelle
Une solution au problème de l'exclusion mutuelle a été formulée par E. Dijkstra
(1975). Elle a les propriétés suivantes :
• A tout instant, il y a au plus un processus en section critique.
• Si plusieurs processus sont bloqués en attente de la ressource critique alors
qu'aucun processus ne s'y trouve, l'un d'eux doit pouvoir y entrer au bout d'un
temps fini pour d'éviter un blocage mutuel.
• Un processus bloqué en section critique ne doit pas empêcher l'entrée d'un autre
processus en section critique.
2.3 Sémaphore
Un sémaphore s est la donnée d'un couple (e(s),f(s)) où e(s) ∈Ζ est la valeur courante
du sémaphore s et f(s) la file d'attente associée.
Soit (e(s),f(s)) un sémaphore. On définit les opérations suivantes :
■
Opération P de mise en attente d'un processus dans f(s) (Puis-je ?)
Début
e(s) = e(s) - 1

si e(s) < 0 alors état(r) = bloqué
P(s) 
mettre le processus r en attente dans la file f(s)
is
Fin
■
Opération V de libération d'un processus en attente de f(s) (Vas-y!)
 Début
e(s) = e(s) + 1

 si e(s) ≤ 0 alors
V(s) recherche puis sélection d ' un processus bloqué dans f (s)
état (q ) = actif
is

Fin
■
Initialisation d'un sémaphore
Le sémaphore s est initialisé à partir de la condition {e0(s) ∈ ℵ* ∀ s, f(s) = ∅}.
GENERALITES SUR LES SYSTEMES D'EXPLOITATION
65
──────────────────────────────────────────────────────────────
■
Indivisibilité et ininterruptibilité
Une instruction élémentaire est indivisible ainsi que les opérations P et V.
Une séquence d'instructions est indivisible si elle ne peut pas être interrompue.
Sur un système monoprocesseur, on rend une procédure indivisible en la rendant
ininterruptible par masquage d'un niveau d'interruption le processeur étant utilisé
comme ressource critique. Sur un système multiprocesseurs, plusieurs processeurs
pouvant exécuter simultanément des opérations P ou V, l'instruction spécialisée Test
And Set utilise un drapeau indicateur d'accès à la ressource critique avec un
verrou : l'opération est autorisée s'il est nul, interdite sinon.
■
Mise en file d'attente et extraction
La majorité des files d'attentes associées aux sémaphores sont gérées par un
algorithme FIFO ce qui garantit la libération équitable des tous les processus bloqués.
■
Propriétés mathématiques des sémaphores
Soient :
np(s) le nombre d'opérations P exécutées sur s,
nv(s) le nombre d'opérations V exécutées sur s,
nf(s) le nombre de processus ayant franchi la primitive P(s).
On a toujours les relations
e(s) = e0(s)-np(s)+nv(s)
nf(s) = min(np(s),e0(s)+nv(s))
nf(s) ≤ np(s)
■
Interprétation des sémaphores
Un sémaphore est une barrière dont l'opération P est une requête de passage (Puis-je
passer ?) et l'opération V une autorisation de passage (Vas-y).
Le nombre total d'autorisations délivrées est e0 + nV.
Si nf(s) et np(s) sont égaux, il n'y a pas de processus en attente ou bloqué dans f(s).
Si nf(s) est inférieur à np(s), des processus sont bloqués dans f(s).
La valeur absolue de e(s) indique le nombre de processus bloqués dans f(s) (e(s) <0),
le nombre de processus pouvant franchir s sans se bloquer sinon.
■
Sémaphore d'exclusion mutuelle (admis)
Un sémaphore mutex tel que e0(mutex) = 1 est un sémaphore d'exclusion mutuelle. Il a
les propriétés suivantes :
• Le nombre n de processus en section critique est tel que :
n = nf(mutex) - nv(mutex)
• A tout instant, un processus au plus se trouve dans sa section critique.
• Il n'y a pas de processus bloqué par le sémaphore d'exclusion mutuelle quand aucun
processus ne se trouve en section critique.
66
CHAPITRE III
──────────────────────────────────────────────────────────────
2.4 Synchronisation des processus
Les mécanismes de synchronisation de processus permettent à un processus actif d'en
bloquer un autre ou de se bloquer en attendant un signal d'un autre processus, d'activer
un processus bloqué en lui transmettant éventuellement de l'information.
■
Synchronisation par sémaphore (Dijkstra - 1968)
Les sémaphores permettent de synchroniser des processus.
Un signal d'activation d'un processus libérateur est envoyé par une primitive V,
attendu par une primitive P émise par un processus demandeur.
Soit un sémaphore s et un processus P. On dit que s est un sémaphore privé de P s'il
est l'unique processus pouvant exécuter l'opération P sur s ; les autres processus
peuvent agir sur le sémaphore s avec l'opération V.
Application : relation d'ordre entre processus
Soit un sémaphore signal tel que e0(signal) = 0.
processus P
Début
...
P(signal)
...
Fin
processus Q
Début
V(signal)
Fin
Le processus libérateur effectue des opérations V sur le processus bloqué.
P(signal)
état(p)
actif
e(signal) 0
état(q)
actif
t0
■
bloqué
-1
V(signal)
t1
actif
0
V(signal)
t2
P(signal)
actif
actif
1
0
V(signal)
t3
t4
Evolution des états d'un processus bloqué
L'évolution du processus bloqué est subordonnée à l'émission d'un signal par le
processus libérateur.
L'émission de n signaux permettent au processus demandeur d'exécuter n+1
opérations P sans se bloquer donc de mémoriser le signal.
2.5 Modèle du producteur et du consommateur
Les primitives de synchronisation précédemment étudiées représentent un mode de
communication où l'information transmise est réduite à une autorisation ou une
interdiction. C'est insuffisant quand les actions exécutées par un processus après son
activation dépendent de l'identité du processus activateur et nécessitent la
communication d'informations en quantité importante entre ces processus qui devront
accéder à un ensemble de variables globales constituant un univers commun. Une
application de ce modèle est le tube.
GENERALITES SUR LES SYSTEMES D'EXPLOITATION
67
──────────────────────────────────────────────────────────────
■
Position du problème
Le modèle du producteur et du consommateur modélise la situation suivante. Soient
deux processus asynchrones : le producteur et le consommateur qui échangent des
informations dans une mémoire-tampon, de la façon suivante :
• l'information est constituée de messages de taille constante,
• la mémoire tampon a une capacité fixe de n messages.
■
Cycle de fonctionnement
Leur activité suit le cycle "perpétuel" suivant :
Producteur
PROD
Production d'un message
Dépôt du message dans le tampon
Aller à PROD
■
Consommateur
CONS
Prélèvement du message
Consommation du message
Aller à CONS
Règles de fonctionnement
Les règles de communication entre les processus producteur et consommateur sont les
suivantes :
• exclusion mutuelle au niveau des opérations sur un message : le consommateur
prélève un message une fois et une seule et ne peut prélever un message en cours
d'écriture dans le tampon,
• le producteur ne peut placer un nouveau message si le tampon est plein. Mis en
attente de tampon plein, il doit être prévenu dès que cette condition n'est plus vraie.
Idem pour le consommateur et le tampon vide.
Soient les deux variables d'état du système :
nplein le nombre de messages attendant d'être prélevés,
nvide le nombre d'emplacements disponibles dans le tampon.
La variable nplein est utilisée lors de la dépose et du prélèvement du message, la
variable nvide lors de la production et de la consommation du message.
On a les équivalences :
nplein = 0 ⇔ il n'y a pas de message en attente,
nvide = 0 ⇔ il n'y a pas d'emplacement disponible dans le tampon.
1
2
3
...
...
Tampon
■
Initialisation
npleino = 0; nvideo = n
n-1
n
68
CHAPITRE III
──────────────────────────────────────────────────────────────
■
Algorithme
Chacune des trois séquences suivantes est indivisible.
PRODUCTEUR
PROD /* production d'un message */
nvide : = nvide - 1
si nvide = -1 /* pas d'espace disponible*/
alors attendre
is
CONSOMMATEUR
CONS /* prélèvement d'un message */
nplein : = nplein - 1
si nplein = -1 /* pas de message en instance */
alors attendre
is
/* Dépôt du message */
nplein : = nplein + 1
/* Consommation du message */
nvide : = nvide + 1
/* Réveil du consommateur en attente*/
/* Réveil du producteur en attente*/
si nplein = 0 alors réveil du consommateur is si nvide = 0 alors réveil du producteur is
Aller_à PROD
Aller_à CONS
Remarque
nplein = 0 ⇒ nplein ≤ 0 et nplein = -1 ⇒ nplein < 0
Les variables nplein et nvide sont deux sémaphores privés de gestion des processus
producteur et consommateur.
D'où la formulation :
Sémaphores privés nplein, nvide
Initialisation : npleino = 0 ; nvideo = n
PROD Production d'un message
CONS
(t1)
P(nvide)
(t2)
Déposer le message
(t2)
V(nplein)
(t1)
aller_à PROD
■
Prélèvement d'un message
P(nplein)
Consommer le message
V(nvide)
aller_à CONS
Analyse du fonctionnement du système
Les processus Production - Consommation se décomposent en deux phases :
t1) Production
t2) Dépôt
t2) Retrait
t1) Consommation
Le producteur et le consommateur ne peuvent être bloqués simultanément.
■
Applications
Un spoule (spool) est une mémoire tampon utilisée comme une imprimante virtuelle
pour stocker une requête d'impression qui réveille le serveur d'impression (spooler).
Un tube (Unix) enchaîne deux commandes le résultat de la première devenant donnée
de la seconde.
2.6 Accès concurrents
Le modèle des lecteurs et des rédacteurs illustre les problèmes de gestion des accès
concurrents quand plusieurs processus font simultanément des requêtes d'accès en
lecture ou en écriture à une ressource partageable (fichier, mémoire, etc.).
GENERALITES SUR LES SYSTEMES D'EXPLOITATION
69
──────────────────────────────────────────────────────────────
■
Algorithme
LECTEURS
REDACTEURS
Début
Requête de lecture
si les conditions d'accès sont satisfaites
alors
Lecture
Fin de lecture
sinon
Mise en attente
is
Fin
Début
Requête d'écriture
si les conditions d'accès sont satisfaites
alors
Ecriture exclusive
Fin d'écriture
sinon
Mise en attente
is
Fin
Les conditions d'accès concurrents sont accès partagé à l'information en lecture pour
n lecteurs sans aucun rédacteur, accès exclusif à l'information à un processus
rédacteur.
■
Verrouillage d'accès
Une solution au problème des accès concurrents est la pose d'un drapeau verrouillant
l'accès lors d'une transaction selon l'algorithme :
Requête d’accès
si le verrou est déposé alors
Pause du verrou
Exécution complète de la transaction
Dépose du verrou
Réveil du processus en attente du verrou
sinon
mise en attente de la requête
is
La granularité d'un verrou permet de gérer l'accès à la totalité d'un fichier, à un de ses
objets, ou l'attribut d'un objet.
■
Verrou consultatif
Un verrou est consultatif (advisory locking) s'il n'a pas d'influence sur les primitives
d'entrée/sortie. Il n'empêche pas un processus ayant les droits d'accès convenables
d'écrire sur un fichier verrouillé par un autre processus.
■
Verrou impératif
Un verrou est impératif (mandatory locking) s'il peut modifier le fonctionnement
habituel d'une primitive d'entrée/sortie. Par exemple, en contrôlant la phase d'écriture
en la rendant bloquante ou en l'empêchant. Ce type de verrou garantit le meilleur
niveau de sécurité. Il est plus complexe à gérer.
■
Verrou partagé et verrou exclusif
Un verrou partagé en lecture garantit à plusieurs processus lecteurs l'accès à un fichier
en empêchant la pose d'un verrou exclusif en écriture.
70
CHAPITRE III
──────────────────────────────────────────────────────────────
2.7 Le diner des philosophes (E. Dijkstra - 1971)
Des philosophes discutent autour d'un plat de spaghettis qui nécessitent deux couverts
pour être mangés. La table n'étant dressée qu'avec une seule fourchette par convive,
les philosophes adoptent le rituel suivant : chacun prend place à un emplacement fixe
et un mangeur utilise exclusivement les fourchettes qui sont à sa droite et sa gauche ce
qui interdit à deux voisins de manger simultanément.
A chaque instant, un philosophe est dans une des situations suivantes :
• il mange (état 1)
• il a faim (état 2) mais ne peut satisfaire son appétit par manque de fourchette ; il
doit attendre que les deux fourchettes soient disponibles.
• il pense (état 3) et n'utilise aucune fourchette.
Au départ, tous les philosophes pensent. Ce rituel est complété pour éviter les
situations conflictuelles suivantes :
• tous les philosophes voulant manger saisissent simultanément la fourchette de
droite et attendent la fourchette de gauche alors indisponible (verrou mortel),
• un philosophe affamé en attente n'est pas averti de la libération des fourchettes
droite et gauche (famine),
• un philosophe boulimique ne s'arrêtant jamais de manger (boucle infinie) provoque
la famine de ses voisins de droite et de gauche,
• une coalition de philosophes empêchant leur voisin commun de manger (famine).
On suppose donc de plus que :
• tout philosophe qui mange doit cesser de manger au bout d'un temps fini pour ne
pas monopoliser les fourchettes et risquer d'affamer ses deux proches voisins,
• les activités de réflexion et dégustation sont séquentielles, n'ont d'interaction avec
les activités des autres philosophes qu'au début de leur exécution, se déroulent à
des vitesses non nulles,
• le comportement de chacun des convives est cyclique.
GENERALITES SUR LES SYSTEMES D'EXPLOITATION
71
──────────────────────────────────────────────────────────────
■
Une solution
On traite le cas de cinq philosophes la solution étant générale pour tout n supérieur à
quatre. Soient Pn le nième philosophe et cn son état. Alors
cn = 0 s'il pense,
cn = 1 lorsqu'il a faim et attend au moins une fourchette,
cn = 2 s'il mange.
De la méditation au repas
Condition de départ (l'indice n est utilisé modulo 5) : aucun des voisins de droite ou
de gauche de Pn n'est en train de manger et Pn médite (cn = 0).
si (cn-1 ≠ 2 et cn+1 ≠ 2) alors cn = 2 sinon cn = 1 is
Le test précédent et ses conséquences constituent une section critique à protéger par
un sémaphore d'exclusion mutuelle noté mutex.
Le droit de manger du philosophe Pn est gérée par un sémaphore privé sempriv(n)
initialisé à 0. Seuls ses voisins Pn-1 et Pn+1 peuvent lui allouer la précieuse ressource
qu'est la fourchette en lui donnant cette autorisation. L'action qu'il effectue est :
P(mutex)
si (cn-1 ≠ 2 et cn+1 ≠ 2) alors
cn = 2
V(sempriv(n))
sinon cn = 1
is
P(sempriv(n))
V(mutex)
/* entrée en section critique */
/* aucun des voisins ne mange */
/* Pn va manger */
/* autorisation de manger (libération du sémaphore privé) */
/* mise en attente de Pn */
/* demande de réveil ultérieur de Pn */
/* sortie de la section critique */
Si les deux voisins Pn-1 et Pn+1 du philosophe Pn ne mangent pas, la première
condition est vérifiée et ce dernier peut manger. Sinon, chaque voisin mangeur a
l'obligation d'exécuter ultérieurement une opération V sur le sémaphore de Pn.
Du repas à la méditation
Condition de réveil éventuel du philosophe Pn-1 ou du philosophe Pn+1
cn-1 = 1, cn-2 = 0 ou 1
cn+1 = 1, cn+2 = 0 ou 1
/* Pn-1 a faim, Pn-2 n'utilise pas sa fourchette */
/* Pn+1 a faim, Pn+2 n'utilise pas sa fourchette */
d'où la séquence :
P(mutex)
cn = 0
/* entrée en section critique */
/* Pn arrête de manger et pense */
/* réveil éventuel de Pn-1 */
si (cn-1 = 1 et cn-2 ≠ 2) alors cn-1 = 2
V(sempriv(n-1) /* autorisation de manger pour Pn-1 par libération de son sémaphore privé */
is
/* réveil éventuel de Pn+1*/
si (cn+1 = 1 et cn+2 ≠ 2) alors cn+1 = 2
V(sempriv(n+1) /* autorisation de manger pour Pn+1 par libération de son sémaphore privé*/
is
V(mutex) /* sortie de la section critique */
72
CHAPITRE III
──────────────────────────────────────────────────────────────
2.8 Activités multiples d'un processus
Un processus a une activité multiple (multithread) en multipliant ses unités
d'exécution (fibre - thread) donc ses jeux de données ce qui permet des gains
appréciables (mémoire, performances, etc.) en évitant des commutations de contexte.
Processus
Espace d'adressage commun
Ordonnanceur local au processus
Code d'exécution commun
Processus
pile locale
thread
pile locale
Processus avec1 unité d'exécution
thread
pile locale
thread
pile locale
thread
pile locale
Processus avec 4 unités d'exécution
Un thread est appelé processus léger, processus poids plume, fibre d'un processus.
Les fibres d'un processus ont un même identificateur, partagent un espace d'adresses et
les variables globales, peuvent coopérer. Elles consomment peu de ressources et leur
utilisation est optimale dans un environnement multiprocesseur (parallélisme
d'exécution). Le blocage d'une fibre ne bloque pas le processus.
Une fibre n'est pas un processus séparé. Sur certaines implémentations, le système
d'exploitation gère le processus comme une entité unique sans voir ses fibres dont
l'ordonnancement est réalisé directement par le processus (thread POSIX).
2.9 L'instruction Test And Set
L'instruction TAS (Test And Set) réalise en une opération indivisible le test et la
modification d'un drapeau dont l'accès est verrouillé en mémoire.
TAS(m)
Verrouillage d'accès du drapeau m
lire(m)
si m=0 alors {m =1; …} sinon libérer l'accès à m is
Le drapeau vaut 0 si la ressource critique r est disponible, 1 sinon. Les opérations
entrée et sortie de la section critique sont les suivantes :
entrée_section_critique(m)
boucle : TAS(m)
aller_à boucle
Le processus boucle tant qu'une autorisation de passage n'est pas été délivrée (attente
active) et ne franchit la boucle que si (et seulement si) le drapeau vaut 0.
sortie_section_critique(m)
m=0
Cette solution est valide le test et le positionnement à 1 du drapeau ne pouvant être
réalisés que par une instruction TAS à la fois. Le blocage de l'accès au drapeau assure,
par câblage, l'exclusion mutuelle de la ressource critique.
GENERALITES SUR LES SYSTEMES D'EXPLOITATION
73
──────────────────────────────────────────────────────────────
2.10 La structure mutex
Les fibres (threads) d'un processus partagent une zone de mémoire commune dont
l'accès aux sections critiques peut être programmé avec des sémaphores.
L'utilisation d'une structure mutex (simplement mutex) est mieux adaptée aux
processus légers, surtout dans une architecture multiprocesseurs.
■
Opération sur une structure mutex
L'état d'une structure mutex peut être verrouillé (lock) ou déverrouillé (unlock).
Opération lock
si mutex déverrouillé
alors
verrouiller mutex
accès autorisé au thread
sinon
blocage du thread
is
Quand deux threads émettent simultanément une requête de verrou sur une structure
mutex (multiprocesseurs), un thread pose le verrou et accède à la section critique,
l'autre est bloqué, en attente de déverrouillage.
Opération unlock
déverrouiller mutex
si (threads bloqués) alors en libérer exactement un is
Opération trylock
Opération similaire à l'opération lock, non bloquante.
Quand la structure mutex est déverrouillée, il y a pose du verrou. Dans le cas contraire,
le thread émetteur de la requête reçoit un code d'erreur indiquant que l'opération n'a
pas pu se dérouler.
■
Problèmes liés à la récursion et aux déverrouillages intempestifs
Une procédure récursive peut poser un verrou, s'appeler et se bloquer.
La gestion du déverrouillage d'un verrou non verrouillé (mémorisation ou oubli) est
non standard donc non portable.
■
Les solutions
Les structures mutexes rapides (fast mutexes) gèrent les poses récursives de verrou par
un processus sur un enregistrement non verrouillé. Une nouvelle requête de sa part sur
ce verrou qui provoquerait son blocage perpétuel (attente d'une libération du verrou
qui ne se produirait jamais) est refusée.
Les structures mutexes amicales (friendly mutexes) permettent à une fibre de poser
récursivement un verrou sur une structure mutex déjà verrouillée. La profondeur de la
récursivité est arbitraire si la structure est déverrouillée autant de fois qu'elle est
verrouillée.
74
CHAPITRE III
──────────────────────────────────────────────────────────────
2.11 Verrou sur boucle
Un verrou sur boucle (spinlock) est une zone de mémoire accessible par plusieurs
processeurs dont l'accès est protégé par un verrou.
Une requête d'accès d'un processeur, émise en permanence sur le verrou, est rejetée
tant que la zone est verrouillée par un autre processeur. C'est donc une boucle
d'attente active du processeur demandeur.
L'opération de test du verrou est liée à celle de prise du verrou (Test And Set).
■
Conditions d'utilisation des verrous sur boucle
Une ressource protégée par un verrou sur boucle doit toujours être atteinte
rapidement, sans interaction complexe avec d'autre code.
Le code de la section ne doit être ni paginé, ni référencer des données qui le seraient
ou des procédures externes.
Il ne doit pas générer d'interruptions ou des déroutements.
2.12 Variable de condition
Une structure mutex gère les poses courtes de verrou.
Une variable de condition gère l'attente de libération d'une ressource.
Une structure mutex peut être associée à une variable de condition.
■
Conditions d'utilisation
Soit la situation suivante : une fibre verrouille une structure mutex et accède à une
section critique où elle constate le manque d'une ressource. Si la fibre verrouille une
nouvelle structure mutex associée à cette dernière, la première structure mutex reste
bloquée et empêche la fibre d'entrer en section critique pour libérer la deuxième ce qui
provoque un verrou mortel.
Une solution est l'utilisation de variables de condition où l'opération d'attente exécute
atomiquement les opérations d'attente (wait) et déverrouillage (unlock). La libération
de la ressource demandée réveille exactement une ou toutes les fibres en attente.
L'utilisation de la clause while au lieu de la clause if garantit qu'une fibre ne puisse
être réveillée la ressource demandée étant allouée à autre une fibre.
■
Algorithmes de requête et libération d'une ressource
lock(mutex)
Contrôle des structures de donnée
tant que(état (ressource)==occupé) wait(variable de condition)
État (ressource)=occupé
unlock(mutex)
lock(mutex)
État (ressource)==libre
Réveil (thread(s)_en_attente_de_variable_de_condition)
GENERALITES SUR LES SYSTEMES D'EXPLOITATION
75
──────────────────────────────────────────────────────────────
2.13 Introduction aux réseaux de Pétri
L’état d’une ressource est un des suivants : requis infructueusement par un processus
demandeur provoquant son blocage, actif car utilisé, restitué après usage.
■
Théorème de caractérisation (admis)
Une situation de verrou mortel peut se produire si et seulement si les conditions
suivantes sont réalisées :
• une ressource au moins est non partageable (exclusion mutuelle),
• un processus détenant une ressource est en attente d'au moins une autre ressource
détenue par un autre processus (propriété de non réquisition),
• une ressource ne peut être restituée qu'à la fin d'une action indivisible,
• un ensemble de processus (P0, P1,...,Pn) est tel que (contrainte circulaire) :
P0 est en attente d'une ressource détenue par P1
…
Pn-1 est en attente d'une ressource détenue par Pn
Pn est en attente d'une ressource détenue par P0
■
Description graphique
Le graphe d'allocation des ressources permet une description graphique du verrou
mortel. Soient :
P = {P1,..., Pn} un ensemble de n processus.
R = {R1,..., Rn} un ensemble de n ressources.
V est l'ensemble P Х R ∪ R Χ P.
Chaque élément du graphe G est un couple ordonné
(Pi, Rj) ou (Rj, Pi) où Pi ∈ P ∀ i et Rj ∈ R ∀ j
Le couple (P, R) indique que la ressource R est requise par le processus P (P → R).
Le couple (R, P) indique que la ressource R est détenue par le processus P (R → Q).
Un processus est représenté graphiquement par un cercle, tout ensemble de ressources
par un carré dont chacune des occurrences est représentée par un point coloré.
Considérons le graphe suivant :
R1
R3
P3
P1
P2
R2
R4
Alors
P = {P1, P2, P3}
R = { R1 , R2 , R3 , R4 }
V = {(P1, R1),(P2, R3),(R1, P2),(R3, P3),(R2, P2),(R2, P1)}
76
CHAPITRE III
──────────────────────────────────────────────────────────────
■
Théorème (admis)
Quand un graphe d'allocation de ressources est sans cycle, aucun de ses processus
n'est en état de verrou mortel.
Réciproquement, si ce graphe contient un cycle, un verrou mortel peut exister quand
chaque ressource a une occurrence unique.
Exemples
Considérons le graphe suivant :
R1
R3
P3
P1
P2
R4
R2
Les processus P1, P2, P3 sont en état de verrou mortel car il y a deux cycles dans le
graphe :
P1 → R1 → P2 →R3 → P3 → R2 → P1
P2 → R3 → P3 → R2 → P2
Soit maintenant le graphe suivant :
R1
P2
P3
P1
R2
P4
Il n'y a pas de verrou mortel même avec le cycle
P1 → R1 → P3 → R2 → P1
puisque
R2 → P4
Le processus P4 n'étant pas dans le cycle, la deuxième occurrence de R2 est restituée
après usage et allouée au processus P3 ce qui brise le cycle.
Une généralisation de cette théorie a été faite avec les Réseaux de Pétri.
GENERALITES SUR LES SYSTEMES D'EXPLOITATION
77
──────────────────────────────────────────────────────────────
3.
NOYAU
3.1 Le noyau Unix/Linux
Le noyau d'Unix/Linux monolithique assure l'interface matériel/logiciel. Il est
composé des entités suivantes :
■
Gestionnaire des processus
Il assure la création, la synchronisation, la terminaison, les communications et la
gestion des processus.
■
Gestionnaire du processeur
Il est assuré par le gestionnaire de travaux ou ordonnanceur (scheduler).
■
Gestionnaires de mémoire
On distingue les gestionnaires suivants : allocateur statique ou dynamique, fichiers
d'échanges (swap), pages, segments, mémoire virtuelle, mémoire partagée, caches
système et réseau, flux de données.
■
Gestionnaire des entrées/sorties et pilotes (device drivers)
Le gestionnaire des entrées/sorties gère les flots de données entre le noyau et les
périphériques en utilisant les pilotes de périphériques et un système de tampons
(mémoire cache ou cache disque). On distingue les périphériques gérés en mode bloc
utilisant le cache, et ceux ne l'utilisant pas, nommés périphériques caractères.
Processus utilisateur
Appel système
Interface noyau
Gestion des processus Systèmes de fichiers
Ordonnanceur
Mode caractère
IPC
Mode bloc
Gestion mémoire
Cache
Noyau
Gestion des interruptions
Interface matériel et pilotes
ARCHITECTURE DU NOYAU UNIX
Le noyau monolithique d'Unix est également implémenté sous forme de micronoyaux.
L'interface homme machine en mode texte est l'interprète de commandes (shell de
Bourne, C shell, ou Korn-shell), langage de programmation puissant. En mode
graphique, l'environnement CDE est standard.
3.2 L'exécutif Windows
Les services système Windows sont accessibles à travers de l'exécutif (executive),
constitué des entités suivantes :
• accès au micro-noyau, gestionnaire d'objets, moniteur de référence de sécurité,
• gestionnaires de la mémoire virtuelle, des entrées/sorties, du cache logiciel,
• gestionnaires de processus et threads, ordonnanceur, appels de procédures locales.
78
CHAPITRE III
──────────────────────────────────────────────────────────────
Mode utilisateur
Services de l'Exécutif NT
Exécutif NT Gestion des
Gestion
Gestion
ou
objets
des
de la
mode
processus
Moniteur
mémoire
Appel
noyau
de référence
virtuelle
de
sécurité
procédure
locale
Micronoyau
GDI
Win32
Windows
Gestion Manager
des
entrées
sorties
Pilotes
couche d'abstraction matérielle
Graphics
Device
Drivers
Couche matérielle
4.
GESTION DES TRAVAUX
■
Représentation
La gestion des processus nécessite une variable d'état par processus (descripteur) où
figure son nom, son état (actif, bloqué, activable), son contexte d'exécution (état de la
mémoire, des registres et du compteur ordinal).
Exemple : descripteur de processus sous Unix
Un processus se compose de trois segments de mémoire :
• le segment de texte (text segment) contenant son code exécutable,
• le segment des données (data segment) contenant ses données,
• le segment système (system data segment) contenant les informations système.
■
Ordonnancement
L'allocateur de ressources gère l'attribution des ressources requises.
Un système d'exploitation préemptif peut interrompre et/ou suspendre l'exécution
d'une tâche quand une tâche plus prioritaire doit être exécutée.
Le gestionnaire de travaux gère la création, la destruction, l'attribution du processeur
à un processus et leur synchronisation. L'utilisation d'un algorithme préemptif garantit
un temps de réponse bref au prix d'une légère surcharge système.
GENERALITES SUR LES SYSTEMES D'EXPLOITATION
79
──────────────────────────────────────────────────────────────
■
Graphe d'états
Un processus change d'état au cours de son exécution.
Création
i nconnu
p rése nt
e n attente
d estruction
d e str uc tio n
p rê t
b loq ué
s élection
s u sp ension
actif
Term inaison
T erminé
e rre ur
Destruc tio n
Un processus est "INCONNU" avant sa création.
Il devient "PRESENT" à sa création puis "EN ATTENTE" sans être "ACTIF" les
ressources requises ne lui ayant pas encore été attribuées.
L'ordonnanceur (scheduler) gère les files d'attente avec deux objectifs :
• assurer l'exécution des différents processus dans des délais acceptables.
• optimiser l'usage des ressources en évitant les interblocages pour déterminer selon
un algorithme approprié le processus élu qui devient "PRET" dès la disponibilité
des ressources requises.
Le répartiteur (dispatcher) alloue le processeur à l'élu qui devient "ACTIF".
Une requête d'entrée/sortie provoque la perte du processeur et le blocage du processus
(état BLOQUE) jusqu'à sa satisfaction. Le processus repasse à l'état "PRET".
La satisfaction de toutes les requêtes ou une erreur d'exécution provoque sa
terminaison (état TERMINE), préalable à sa disparition.
80
CHAPITRE III
──────────────────────────────────────────────────────────────
5.
GESTION MEMOIRE
5.1 L'unité de gestion mémoire
La mémoire est une ressource critique à partager et à allouer aux différents processus
actifs, gérée dynamiquement et qu'il faut protéger. Ces différentes fonctions sont
assurées par l'unité de gestion mémoire (Memory Management Unit - MMU).
Exemple
On suppose qu'à l'instant t, l'espace mémoire est alloué de la façon suivante :
P1
P2
P3
P4
P5
P6
.
A l'instant t+δt, les processus P2 et P5 s'achèvent libérant des espaces en mémoire non
contiguës. Pour réutiliser l'espace, on peut réorganiser les processus de façon à
obtenir un espace mémoire disponible unique ou insérer un nouveau processus dans
l'espace vacant en le fragmentant.
■
Protection mémoire
A tout instant, un processus dispose d'un espace de travail dont un mécanisme
matériel garantit qu'il ne puisse être altéré (protection mémoire).
Exemple
Processus actif
Adresse absolue
P1
1-1000
P2
1100-3000
P3
3200-3500
P4
3600-6700
Le processus P2 écrivant des informations jusqu'à l'adresse 3400 écrase une partie du
processus P3 en l'absence de protection.
GENERALITES SUR LES SYSTEMES D'EXPLOITATION
81
──────────────────────────────────────────────────────────────
5.2 Modes d'adressage
■
Définitions
Une instruction se compose en trois champs : le code opération, le mode d'adressage,
l'adresse de l'opérande.
L'adresse absolue est définie par rapport à l'adresse 0 de la mémoire.
Le mode d'adressage est la technique d'accès aux mots en mémoire.
L'adresse effective est l'adresse calculée en fonction du mode d'adressage.
On distingue les différents modes d'adressage suivants :
■
Adressage direct
Appelé également adressage normal, absolu ou réel, l'adresse effective de l'objet est
contenue dans l'instruction. Le temps de recherche est d'un cycle mémoire.
■
Adressage immédiat
La partie adresse contient la valeur de l'opérande.
Exemple : chargement de l'accumulateur par la valeur 10
CHA 10
■
Adressage indirect
La partie adresse est un pointeur sur l'adresse effective de l'objet dont le chargement
nécessite de deux cycles mémoire : un pour l'adresse de l'objet, un autre pour l'objet.
Le nombre total de cycles est le nombre d'indirections de l'instruction dont le
maximum est le niveau d'indirection du calculateur.
■
Adressage relatif
L'adresse effective est obtenue par addition ou soustraction d'un déplacement à
l'adresse de l'instruction en cours, l'instruction relative, ce qui permet de d'accéder
simplement à n'importe instruction du programme.
■
Translation d'adresse et protection mémoire
La transformation d'une adresse symbolique en adresse réelle utilise une adresse
relative (déplacement) à son adresse initiale d'implantation appelée l'adresse de base.
Soient Aa l'adresse absolue, Ab l'adresse de base, D le déplacement.
L'adresse effective est la somme du contenu du registre de base et du déplacement.
Aa = Ab+D
La modification de l'adresse de base permet de déplacer (translater) un processus en
mémoire sans recalculer des adresses relatives des instructions. Cette propriété est
utilisée à la compilation pour générer des programmes translatables.
La valeur maximale du déplacement délimite l'espace de travail d'un processus et son
contrôle garantit la protection mémoire.
82
CHAPITRE III
──────────────────────────────────────────────────────────────
Exemple
Considérons le processus P, implémenté à l'instant T comme suit :
Instant
T
T+δt
Ab
3200
1100
D
399
399
Aa
3599
1499
A l'instant T+δt, le processus P est déplacé ce qui libère l'espace mémoire comprit
entre les adresses 3200 et 3599. Seule l'adresse de base Ab a été modifiée.
■
Adressage relativement à l'adresse courante
L'adresse de référence est contenue dans le compteur ordinal.
■
Adressage par page
La mémoire est divisée en pages 2n mots. L'adresse effective est obtenue par
juxtaposition du numéro de page et de l'adresse de l'instruction dans la page.
■
Adressage indexé
L'indexation permet d'atteindre chaque composante d'un tableau d'objets dont l'adresse
de base est connue (celle de la première composante du tableau). L'adresse effective
est obtenue par ajout à l'adresse de base d'un index préalablement initialisé puis
incrémenté d'un pas à l'exécution de l'instruction de fin de boucle.
On appelle pré-indexation l'adressage par addition du déplacement de base, et post
indexation l'adressage par addition de l'index.
Exemple
float a[50];
int i ;
for (i=0;i < 50; i++) a[i] = 0;
// Un tableau de 50 nombres flottants
// L'indice de boucle entier
// Boucle d'initialisation à 0
Le déroulement de ce programme est le suivant :
Réservation d'une zone de 50 mots commençant à l'adresse du symbole A.
Boucle de remplissage de la zone à partir de son adresse initiale indexée.
La séquence du programme assembleur équivalent est la suivante :
A
RES 50
CHA RB 0
COMPTEUR EQU 50
BOUCLE CP RB COMPTEUR
BG FIN
CHA RB
RNG A,RB
FIN
INC RB
B BOUCLE
STOP
// Réservation du tableau A
// Chargement du registre d'index (valeur 0)
// Comparaison de RB avec COMPTEUR
// Branchement si (COMPTEUR)>(RB) à FIN
// Chargement avec le contenu de RB
// Rangement du contenu de l'accumulateur à
// L'adresse A indexée par le contenu de RB
// Incrémenter de 1 le contenu de RB
// Fin du programme
La longueur maximale d'un tableau est déterminée par le nombre de bits du registre
d'index.
GENERALITES SUR LES SYSTEMES D'EXPLOITATION
83
──────────────────────────────────────────────────────────────
■
Récapitulation des modes d'adressage
On note (A) le contenu de l'adresse A.
Accès immédiat à l'objet
Adressage normal (direct, absolu)
Adressage indirect
Adressage relatif
base et déplacement (pré-indexation)
relatif à l'adresse courante
dans la page courante
Adressage indexé (post indexation)
opérande=(AD)
adresse effective=(AD)
adresse effective=((AD))
adresse effective=(B)+(AD)
adresse effective=(P)±(AD)
adresse effective= adresse de page+(AD)
adresse effective=(AD)+(X)
5.3 Hiérarchie des mémoires
Le coût d'une mémoire étant inversement proportionnel à son temps d'accès, une
hiérarchie de la mémoire selon son type, son temps d'accès et son coût est définie.
Registre
Cache matériel
Mémoire RAM
Disque
Capacité
1 mot
512 Ko
1 Go
300 Go
Temps d'accès
1 ns
5 ns
10 ns
10 ms
Coût d'un Go
104
102
1
10-3
L'utilisation du dispositif le moins onéreux pour étendre les ressources fournies par le
plus onéreux sans dégradation des performances revient à considérer l'espace disque
comme une extension de la mémoire centrale (niveau unique de stockage (1960)).
■
Echanges de processus (swap)
La permutation complète d'un processus en mémoire avec un processus sur disque
s'appelle l'échange total (swap). Il présente l'inconvénient d'une surcharge temporelle
importante vu la granularité de l'opération (le processus complet).
Processus 1
Processus 2
Mémoire
centrale
swap out
swap in
Processus 1
Processus 2
Disque
84
CHAPITRE III
──────────────────────────────────────────────────────────────
L'opération de déchargement (swap out) est le transfert d'un processus en mémoire
centrale dans l'espace d'échanges sur le disque, appelé zone de swap (Unix/Linux), ou
fichier d'échanges (Windows). Un processus déchargé est rechargé (swap in) en
mémoire (chargement) pour reprendre son exécution.
L'usage de deux disques avec chacun une zone d'échanges améliore les performances.
Exemple
■
Le modèle de l'espace vital
Il n'est pas nécessaire qu'un processus soit complètement chargé en mémoire pour
s'exécuter. Il suffit que les instructions en cours d'exécution soient présentes, en
"quantité suffisante"…
A cet effet, un découpage du processus logique (segmentation) et/ou physique
(pagination) est mis en œuvre par les gestionnaires de la mémoire.
Le degré de multiprogrammation d'un processeur est défini par le nombre de
processus résidant simultanément en mémoire. L'expérience a mis en évidence le
comportement suivant :
Taux d'utilisation du CPU
100%
zone a
n0
zone b
Degré de multiprogrammation
Dans la zone a, le degré de multiprogrammation croit linéairement :
• Pour n << no, le processeur est peu utilisé.
• Au voisinage de no, le processeur est utilisé de façon optimale.
.
GENERALITES SUR LES SYSTEMES D'EXPLOITATION
85
──────────────────────────────────────────────────────────────
Dans la zone b, les performances s'écroulent brutalement, le nombre trop élevé de
processus ne permettant pas à chacun de disposer de suffisamment de mémoire ce qui
provoque un excès d'accès disques conduisant à une saturation des bus et un
écroulement du système (trashing).
Chaque processus a besoin en mémoire centrale d'un nombre réduit d'instructions
constituant son espace vital (working set).
■
Pagination
La pagination est une organisation physique de la mémoire allouée à un processus
divisée en pages dont l'algorithme de gestion détermine la page à transférer en
mémoire 2n mots étant accessibles dans 2n-p pages de 2p mots, (p < n).
Exemple
On considère l'ordinateur suivant : mots de 4 octets, page de 16 Ko soit 212 mots,
mémoire centrale de 1 Go soit 256 M mots ou 216 pages réelles, 20 bits adressent une
page, 12 bits un mot dans une page.
La transformation adresse(page) adresse(mot) est réalisée avec la table des pages.
■
Mémoire virtuelle
Le niveau unique de stockage et le modèle de l'espace vital ont une autre
application : la définition d'un espace de mémoire virtuelle sur mémoire secondaire
d'une capacité supérieure à celle de la mémoire RAM.
■
Segmentation
La segmentation est une organisation logique permettant de définir un espace virtuel
pour chaque processus : le segment. L'adresse effective est calculée à partir du numéro
de segment et du déplacement dans le segment.
La segmentation simplifie la manipulation des données de taille dynamique et l'édition
de liens la modification d'une procédure n'imposant pas de recompiler les procédures
inchangées des autres segments.
Les systèmes actuels combinent segmentation et pagination.
86
CHAPITRE III
──────────────────────────────────────────────────────────────
5.4 Optimisation de la mémoire
■
Chargement à la demande
La recherche d'une information en mémoire secondaire provoque un défaut de page
puis le chargement de la page manquante ce qui surcharge (overhead) le système le
temps d'accès moyen d'un disque (10 ms) étant supérieur à celui de la RAM (10 ns)
■
Chargement anticipé
L'allocateur détermine les pages qui vont manquer conformément au postulat de
Denning (principe de localisation) : "Les références d'un programme tendent à être
localisées en des points précis de la mémoire et ne changent que par intermittence".
Ce principe ne peut s'appliquer que si programmes et données sont structurés.
■
Caches
La surcharge du temps d'exécution est compensée par l'utilisation de caches matériel
ou logiciel qui sont différents dispositifs d'accélération des accès entre processeur,
mémoire centrale, mémoires secondaires qui contiennent par anticipation 95% des
informations.
■
Gestion des systèmes non paginés
Les algorithmes de gestion de zones mémoire non paginées sont les suivants :
Algorithme du meilleur choix (Best Fit)
Les zones sont classées par taille croissante T1 ≤ T2 ------- ≤ Tn.
Soit T la taille du segment à insérer, on cherche k tel que Tk-1 < T ≤ Tk.
Algorithme du plus mauvais choix (Worst Fit)
Les zones sont classées par taille décroissante T1≥ T2 ≥ … ≥ Tn
On place le segment dans la zone T1 et la zone résiduelle est insérée dans la liste.
Algorithme du premier trouvé (First Fit)
Les zones sont classées par adresse croissante.
On cherche le plus petit k tel que T ≤ Tk
Les stratégies du meilleur choix et du plus mauvais choix sont opposées. La première
minimise les zones résiduelles inutilisables. La deuxième suppose qu'il reste après
insertion une zone utilisable.
Les deux stratégies nécessitent de réorganiser périodiquement la mémoire pour éviter
sa fragmentation (ramassage des ordures - garbage collector).
La gestion des zones provoque une surcharge.
Des simulations de ces algorithmes ont prouvé que l'algorithme du premier trouvé
peut être meilleur que celui du meilleur choix.
GENERALITES SUR LES SYSTEMES D'EXPLOITATION
87
──────────────────────────────────────────────────────────────
■
Gestion des systèmes paginés
Une page à remplacer en mémoire centrale est appelée victime. Quatre algorithmes
sont utilisés :
Algorithme LRU (Least Recently Used)
Les pages les moins récemment utilisées sont choisies en supposant que le futur
ressemble au passé.
Algorithme LFU (Least Frequently Used)
Les pages les moins fréquemment utilisées sont choisies à l'exception des pages
chargées au cours des derniers quantas de temps.
Algorithme FIFO (First In First Out)
Les pages sont remplacées dans l'ordre où elles ont été attribuées. Cet algorithme
ignore le fait que la page la plus ancienne puisse être la plus utilisée.
Algorithme RAND (Random)
La page à remplacer est déterminée au hasard.
Les différences de performances entre les différents algorithmes sont faibles (15%), et
l'algorithme FIFO est en général moins bon que les algorithmes LRU, FLU et RAND.
6.
GESTION DES ENTREES/SORTIES
La gestion des entrées/sorties est réalisée à quatre niveaux :
• le niveau physique pour le stockage des informations sur les supports matériels,
• le niveau interne pour la gestion des flux entre les entités matérielle,
• le niveau d'accès aux informations,
• le niveau logique et organisationnel au niveau applicatif.
6.1 Problèmes associés à la gestion des entrées/sorties
Il est nécessaire d'adapter le matériel et les logiciels aux contraintes suivantes :
■
Vitesse de transfert
Les différences sont considérables entre les différents types de périphériques (3
caractères par seconde (cps) sur un clavier et 109 cps sur un disque).
■
Unités de transfert
Selon les périphériques, les données sont transmises par mots, octets, blocs,
enregistrements.
■
Représentations des données
Elles sont différentes selon les supports utilisés (disque, souris, etc.).
88
CHAPITRE III
──────────────────────────────────────────────────────────────
■
Opérations autorisées
Elles sont différentes suivant le type du périphérique : une imprimante n'est utilisable
qu'en écriture, une souris en lecture seulement.
■
Erreurs d'exécution
Elles sont d'origines diverses : panne matérielle, ressource insuffisante, etc.
■
Objectifs de conception
Un périphérique doit fonctionner indépendamment de la représentation interne des
données ce qui impose aux processus d'opérer sur des périphériques virtuels, sans
faire référence aux unités physiques.
Les opérations d'entrées/sorties doivent être performantes sans goulets d'accès aux
bus.
La gestion des périphériques doit être uniforme.
L'indépendance de la codification interne des données nécessite des mécanismes de
d'adaptation pour chaque type de périphérique.
Exemple
Gestion de différentes polices de caractères sur une imprimante,
Transcodage de caractères EBCDIC en ASCII.
6.2 Système de gestion de fichiers
Le système de gestion de fichiers (Disk Operating System) gère les fonctionnalités
liées au stockage :
• gestion des périphériques,
• organisation logique et physique de l'information,
• création, suppression, modification, sauvegarde, identification et gestion des accès,
• reprise de défaillance du système.
■
Organisation logique et physique
Un enregistrement logique représente un objet, de taille fixe ou variable, accessible en
écriture ou en lecture par une application.
Un fichier est un ensemble organisé d'enregistrements logiques.
Un enregistrement physique est un bloc.
Le facteur de groupage est le nombre d'enregistrements logiques d'un bloc.
■
Performances
Les performances dépendent du facteur de groupage des enregistrements logiques qui
doit être adapté à la taille des blocs. Il est plus judicieux de lire en une seule opération
512 octets que d'effectuer 512 opérations de lecture d'un seul octet.
GENERALITES SUR LES SYSTEMES D'EXPLOITATION
89
──────────────────────────────────────────────────────────────
6.3 Niveaux d'accès à l'information
Un accès est réalisé par les couches applicatives au travers desquelles il transite.
■
Couche externe
La requête est exprimée au travers d'une interface externe orientée objet.
■
Niveau logique
Les traitements induits par la requête (lecture, écriture, etc.) utilisent la structure
logique de l'information, encapsulée par l'interface objet.
■
Niveau physique et pilote
Les adresses absolues des blocs sur le support physique sont déterminées et transmises
au pilote (device driver) du périphérique. En mode synchrone, le processus émetteur
de la requête d'entrées/sorties est suspendu jusqu'à sa terminaison (entrées/sorties
bloquantes). En mode asynchrone, il poursuit son exécution.
7.
ORGANISATION ET ACCES A L'INFORMATION
La localisation d'un enregistrement logique dépend de l'organisation du fichier
(séquentielle, aléatoire, indexée, etc.). La méthode d'accès est le mode d'exploitation
du fichier par l'application pour y sélectionner un enregistrement logique.
L'accès séquentiel à un enregistrement nécessite d'accéder à ceux qui le précèdent.
L'accès sélectif permet l'accès direct à l'information à partir de sa clé. Pour une
organisation donnée, plusieurs modes d'accès peuvent être mis en œuvre.
7.1 Conteneurs d'informations
Un répertoire (catalogue, dossier, directory) contient récursivement des fichiers et
leur descripteur constitué des informations suivantes : nom, taille, emplacement, type,
organisation, identification de son propriétaire seul habilité à lui apporter des
modifications, droits d'accès, dates de création, dernière mise à jour, dernier accès.
90
CHAPITRE III
──────────────────────────────────────────────────────────────
7.2 Organisation séquentielle, relative, aléatoire
■
Organisation séquentielle
Les enregistrements logiques sont stockés consécutivement et liés par une relation
d'ordre. Toute nouvelle information est écrite à la fin du fichier.
L'écriture d'un enregistrement au milieu du fichier déplace la fin de fichier et
provoque la suppression de tous les enregistrements situés après l'enregistrement écrit.
■
Clé et fichier relatif
L'accès sélectif à un enregistrement logique est effectué au travers d'une clé d'accès.
Un fichier relatif est constitué d'enregistrements de longueur fixe accessibles par une
clé numérique correspondant à son rang dans le fichier.
fichier
enregistrement
0
1
2
3
n-1
n
L'accès à un enregistrement est rapide (une seule requête d'entrées/sorties) et le mode
d'affectation de la clé rend la gestion facile.
■
Hash coding
Une fonction de hachage effectue une distribution uniforme des enregistrements à
partir de leur clé permettant leur accès ultérieur direct. Son utilisation impose une
connaissance préalable approximative du nombre d'enregistrements maximum.
Ce mode d'organisation est inadapté aux fichiers séquentiels.
Les performances chutent lorsque le fichier est saturé et il faut le réorganiser.
■
Organisation aléatoire
Les enregistrements (longueur fixe ou variable) d'un fichier aléatoire sont distribués
uniformément (fonction de hachage) à partir de leur clé intégrée à l'enregistrement.
Paquet
■
0
1
....
p
Organisations indexées
Les enregistrements sont accessibles à partir de clés contenues dans l'index du fichier.
C0
C1
C2
Ci
Cn
Clés
a
a
a
a
a
Adresse relative
0
1
2
i
n
GENERALITES SUR LES SYSTEMES D'EXPLOITATION
91
──────────────────────────────────────────────────────────────
Un index est dense s'il contient autant de clés que d'enregistrements.
Un fichier indexé est non trié, son index trié et dense.
Un fichier séquentiel indexé est trié, son index trié et non dense.
Si l'index est non dense, le fichier est divisé en paquets de taille fixe dont chacun
correspond à une entrée de l'index. La clé associée est la plus grande clé du paquet.
L'accès et une recherche dans la table d'index permettent l'accès à l'enregistrement.
On peut construire une hiérarchie d'index.
Exemple
Index (taille fixe = 4 éléments)
11
23
35
Niveau 2
8
6
8
3
11
11
9
16
20
23
35
12
14
19
20
21
23
36
35
Paquet
Niveau 1
Enregistrements
restreints à leur clé
Le fichier non trié contient six paquets repérés par deux indexes triés non dense.
7.3 Journaux et point de reprise
Un point de reprise est une sauvegarde du contexte d'exécution d'un programme (état
des registres, données, fichiers) à partir duquel il peut reprendre son exécution.
Le journal des images avant contient les débuts de transactions, les valeurs des
d'enregistrement avant mise à jour, les fins de transactions (validées ou interrompues)
et permet d'annuler (undo) les mises à jour.
Le journal des images après contient les débuts de transactions, les valeurs des
enregistrements après mises à jour, les fins de transactions (commit ou abort) et
permet de refaire (redo) les mises à jour.
Une reprise à froid restaure le système à partir d'une sauvegarde.
Une reprise à chaud utilise l'un des deux journaux.
92
CHAPITRE III
──────────────────────────────────────────────────────────────
8.
L'IMPLEMENTATION DES SYSTEMES D'EXPLOITATION
Le développement d'un système d'exploitation est très complexe et long. Ainsi, le
noyau du système Linux contient environ 3 millions de lignes, celui de Windows Vista
30 millions. Nous présentons ici les principales difficultés liées à cet exercice.
8.1 De la programmation empirique à Internet
Les méthodes de développement ont évolués avec les générations d'ordinateurs.
Génération : 1ère
2ème
3ème
4ème
langage machine Assembleur langage évolué SGBD
■
5ème
Internet
Programmation, rendement, coûts du développement
En 1972, le rendement moyen d'un programmeur professionnel est de 8 lignes par
heure (source Pentagone : The high cost of software). L'écriture de "bons"
programmes est très longue et difficile. Les mêmes statistiques chiffrent l'écriture
d'une instruction à 75 $, celui de sa mise au point à 4000 $.
■
Evolution historique du profil du programmeur
1950
1968
1975
1981
1990
■
Il est un initié qui utilise exclusivement le langage machine.
Il est considéré comme un artiste (D. Knuth).
Il respecte une discipline de programmation non empirique (E. Dijkstra).
La programmation est devenue une science (D. Gries).
L'ingénierie du logiciel est devenue la règle, avec ses méthodes et outils.
Erreurs et preuves de programmes
Tout développeur doit tenir compte de ce constat d'E. Dijkstra : "Essayer un
programme peut seulement indiquer des erreurs mais ne prouve jamais qu'il est
juste".
■
Les causes
Les tests et branchements conditionnel conduisant à la rupture du déroulement
séquentiel du programme (Von Neumann) ont permis l'écriture de la de la première
génération des programmes procéduraux.
La complexification des applications a conduit :
• à la suppression des ruptures de séquence devenues l'ennemie du programmeur car
source d'erreurs dues aux branchements erronés,
• à la structuration modulaire des applications, conformément à la citation de
Boileau "Ce qui se conçoit bien s'énonce clairement et les mots pour le dire
arrivent aisément", base des langages structurés (Pascal, C, etc.).
GENERALITES SUR LES SYSTEMES D'EXPLOITATION
93
──────────────────────────────────────────────────────────────
8.2 L'ingénierie du logiciel
Le développement du logiciel est une discipline d'ingénierie solidement établie dans
ses méthodes et principes.
■
Difficultés de conception des logiciels
Plusieurs facteurs rendent difficile la conception et le développement des logiciels :
• Ils peuvent être d'une très grande complexité, à la limite de l'ingéniosité humaine.
• Aucune loi mathématique ou physique ne délimite l'univers des solutions possibles.
• Les causes de certaines erreurs d'exécution peuvent être aléatoires et une erreur
d'exécution peut provoquer l'interruption du service fournit.
■
Chaque détail compte
Des erreurs d'apparence anodine peuvent se glisser dans des programmes ainsi que
l'illustre l'instruction (langage C) suivante :
if (i = 0) printf("i est nul\n"); else printf('i n'est pas nul\n");
Contrairement à l'intention du programmeur, ce programme imprime " i est nul" quel
que soit i car dans la syntaxe du langage C, le symbole = représente l'affectation, pas
la comparaison logique (qui s'écrit ==). L'expression i = 0 étant toujours nulle, le test
d'arrêt ne peut être satisfait ce qui provoque un cycle perpétuel indétectable.
■
Une simple question d'argent ?
Le logiciel embarqué dans la navette spatiale américaine, développé par la NASA et
dont le prix de revient est estimé à 3300 € par ligne de code, contient encore des
erreurs dont la suivante : lors de l'utilisation simultanée de deux claviers, tout
caractère saisi est modifié par un "ou logique". La solution retenue a été de n'utiliser
qu'un clavier à la fois…
■
Le développeur de logiciels
On pense souvent que le développement de logiciel est une tâche simple, à confier à
des ingénieurs débutants. Pourtant, la conception d'ouvrages d'art importants est
toujours confiée à des ingénieurs confirmés. Et on comprend mal pourquoi il faudrait
opérer différemment pour la conception des logiciels car c'est une tâche qui requiert
une grande expertise pour être menée à bien.
■
Valeur marchande d'un logiciel
La valeur marchande d'un logiciel tient autant à son introduction rapide sur le marché
qu'à ses qualités propres, le client étant rarement prêt à attendre patiemment qu'un
programmeur exceptionnellement doué ait trouvé une solution élégante et gratuite à
son problème. Il a tort à long terme, mais il achète le produit du moment.
94
CHAPITRE III
──────────────────────────────────────────────────────────────
8.3 Productivité
Les aspects économiques du développement du logiciel sont mal maîtrisés.
Le coût du logiciel de fabrication de l'Airbus A320 fut estimé, à partir de celui de
l'A310, connu, et de son cahier des charges spécifiques. Les différentes évaluations
variaient entre 3 et 12.
Une des difficultés de ce type d'exercice prévisionnel est le manque de précision de la
mesure de productivité du logiciel que plusieurs techniques permettent,
imparfaitement, de mesurer.
■
Le nombre de lignes de code par programmeur et par jour
La mesure la plus couramment utilisée de la productivité d'une équipe de
développement est le nombre de lignes de programme produites par jour. Elle est
mauvaise pour au moins deux raisons :
• Un programmeur compétent consacre un temps parfaitement productif à réduire la
taille de ses programmes ce qui en diminue la complexité et en augmente la valeur.
• Cette mesure ne fait pas la différence entre la productivité d'une équipe qui réalise
un logiciel de 10 000 lignes de code en un an, et celle qui réalise en deux ans un
logiciel similaire de 20 000 lignes de code.
Une mesure empirique de la productivité quotidienne d'un programmeur en fonction
de la complexité du logiciel est donnée par la formule :
productivité = constante * (taille du programme)1.5
■
Le coût du développement
Une meilleure mesure de la productivité d'une équipe est basée sur le coût du
développement d'un logiciel qui prend en compte simultanément sa valeur marchande,
son évolution probable, la complexité intrinsèque du problème résolu, le surcoût du au
retard éventuel de sa commercialisation, celui de son support et de sa maintenance
pendant sa durée de vie, la possibilité de le réutiliser. Le coût est aussi une indication
de la difficulté qu'aura la concurrence à reproduire un effort de développement
similaire.
8.4 Qualité
■
Critères de qualité
Un logiciel doit être doté des qualités suivantes :
• Validité : aptitude du logiciel à réaliser exactement les tâches de sa spécification.
• Robustesse : aptitude du logiciel à fonctionner dans des conditions anormales.
• Extensibilité : facilité de modification des spécifications du logiciel.
• Réutilisabilité : aptitude du logiciel à être réutilisé partiellement ou en totalité.
• Compatibilité : aptitude du logiciel à pouvoir être combiné avec d'autres.
GENERALITES SUR LES SYSTEMES D'EXPLOITATION
95
──────────────────────────────────────────────────────────────
• Efficacité : bonne utilisation des ressources matérielles et logicielles
• Portabilité : facilité d'adaptation du logiciel à différents environnements.
• Vérifiabilité : présence de procédures de test, de débogage, de recette et de
certification.
• Intégrité : aptitude du logiciel à protéger ses différentes composantes
(programmes, données) contre des accès ou des modifications non autorisées.
• Ergonomie du logiciel (fonctionnement, utilisation, interprétation des résultats,
fiabilité).
■
L'ergonomie
Des défauts peuvent s'avérer fatals comme l'illustre la catastrophe de l'Airbus A320 du
Mont Sainte Odile. Cet avion est doté d'un moniteur sur lequel s'affichait alors, selon
un mode choisi par le pilote, la vitesse verticale de l'avion en pieds par seconde ou
l'inclinaison de sa trajectoire en degrés. Il semble que le pilote ait mal interprété le
contenu de l'écran le copilote ayant modifié le mode d'affichage, ou l'inverse. L'avion
a ainsi, à leur insu, perdu rapidement de l'altitude ce qui a conduit au crash. Ainsi, un
défaut de conception dans l'ergonomie de l'interface homme machine s'est révélé être
aussi dangereux qu'un bogue.
■
Le long terme
Le manque de vision à long terme des développements de logiciels est aussi la source
de nombreux déboires. Le problème le plus fréquent est causé par l'introduction de
limites arbitraires d'adressage ou de précision dont voici deux illustrations.
• Dans les années cinquante, pour économiser l'espace, seuls, les deux derniers
chiffres de l'année calendaire étaient stockés. De nombreux programmes
développés à cette époque étant toujours utilisés en l'an 2000, il a fallu dépenser
des milliards d'euros pour corriger ce fameux "bogue de l'an 2000".
• Le système de défense anti-aérienne Patriot n'a pas intercepté un missile Scud qui a
fait 28 victimes au nord de l'Arabie Saoudite durant la première guerre du Golfe à
cause d'un décalage de son horloge, le système ayant été initialement conçu pour
intercepter des avions, et non des missiles balistiques plus rapides.
8.5 Développement d'un logiciel
■
Analyse
L'analyse consiste à déterminer les contraintes d'utilisation et d'exploitation du
logiciel et les besoins de l'utilisateur, par exemple :
• Type de programme (transactionnel, temps réel, bureautique, etc.)., matériel et
système d'exploitation.
• Temps de développement et personnel disponible pour développer l'application.
• Extensions futures les plus probables.
• Destinataires (grand public ou professionnels).
96
CHAPITRE III
──────────────────────────────────────────────────────────────
■
Spécification
La spécification, réponse formelle aux besoins identifiés à l'analyse, comprend des
données chiffrées résultant des spécifications (temps de développement,
configurations matérielles et logicielles requises, nombre d'utilisateurs, temps de
réponse, entrées et sorties, version préliminaire de la documentation, etc.).
■
Documentation
La documentation fait partie intégrante du développement du logiciel sous la forme
d'un document technique normatif de référence formalisant la conception de
l'architecture générale, le découpage en modules (fonction, interface d'accès), la
description des composants logiciels utilisés (bibliothèques, générateurs d'interface ou
de requêtes, composants réutilisables, etc.).
8.6 Méthodologie de programmation
■
La méthode des approximations successives
La programmation met en évidence des erreurs de conception nécessitant une
modification des modules donc des documents rédigés à l'étape précédente.
■
Programmation et chirurgie
Programmer est long et n'est pas une tâche d'exécutant. Ainsi, les éditeurs les plus
performants utilisent le modèle de l'équipe chirurgicale, le chirurgien responsable des
parties les plus délicates étant supportées par l'équipe chargée des parties plus simples
et de la documentation.
■
Preuves de programmes
La garantie qu'un programme correspond à ses spécifications et qu'il ne comporte pas
d'erreur en est la preuve mathématique par analyse formelle, réalisée uniquement à
partir de spécifications non ambiguës et parfaites. Or, la complexité d'une telle preuve
peut être très grande et les logiciels d'analyse formelle limités. Ainsi, il n'existe aucun
algorithme permettant d'identifier une boucle infinie.
L'analyse formelle n'apporte donc que des aides partielles à la preuve, d'application
limitée car imposant une méthodologie de développement très rigide.
■
Jeux d'essais
On se rabat sur des simulations ou tests de validation d'un logiciel dont il faut vérifier
l'intégralité des modules. Deux approches sont utilisées :
• des tests ciblés sur les conditions aux limites comme le fonctionnement d'une
procédure de tri sur un tableau de taille nulle ou contenant des entrées identiques.
• Des tests en utilisation réelle, généralement faits par un client enthousiaste ou
impatient, réalisés sur des versions préliminaires du logiciel, appelées alpha ou
bêta releases. C'est ce qu'a fait à 500 000 exemplaires Microsoft avant la sortie de
Windows 95 ce qui n'a pas suffit à en éliminer les bogues.
GENERALITES SUR LES SYSTEMES D'EXPLOITATION
97
──────────────────────────────────────────────────────────────
■
Maintenance et support
La maintenance d'un logiciel consiste à en corriger les bogues, à en étendre les
fonctionnalités, et à en assurer le portage sur différentes plateformes matérielles et
systèmes d'exploitation. Elle est coûteuse (70% du coût total de développement) et
son importance souvent sous-estimée. Ainsi, le logiciel Word, développé par une
équipe de quatre personnes, est maintenu par une équipe bien plus nombreuse. Le
support d'un logiciel consiste à assurer un service de formation et d'assistance auprès
de la clientèle. Son coût n'est pas non plus négligeable.
8.7 Programmation système
■
Du langage humain au langage machine
Tout dialogue avec la machine étant basé sur des règles de grammaire (Chomsky), un
langage de programmation est constitué de mots clés dont la syntaxe a évolué pour se
rapprocher de la langue parlée, plus facile à manipuler pour les humains que les bits
ou les octets. Par contre, l'ordinateur travaillant en digital, il est nécessaire de traduire
les instructions exprimées dans un langage évolué en langage machine.
■
Traducteurs
Un interprète de commandes effectue l'analyse syntaxique d'une instruction qui est
comprise puis exécutée ou incomprise et signalée par un message d'erreur. Un
interprète permet donc une mise au point rapide de programmes courts.
Un compilateur étudie un programme dans son ensemble pour la génération du code
exécutable qui en est la traduction en langage machine, stockable, évitant ainsi sa
recompilation à chaque exécution.
Exemples
Interprète shell (Unix/Linux), langage de requêtes SQL, compilateurs Fortran, Pascal,
C, C++, Java.
■
Le langage machine
A l'aube de l'informatique, seule la programmation en langage machine, spécifique à
chacune, était possible. Compte tenu de sa difficulté, les langages d'assemblage (dits
de première génération) ont été inventés vers 1950.
■
Les langages de la deuxième génération
Apparus dès 1955, les langages de deuxième génération commencent à se rapprocher
du langage humain. Les plus connus sont Fortran pour les applications scientifiques,
Cobol, Algol pour la gestion, Basic pour l'enseignement.
■
Les langages structurés et les langages orientés objets (LOO)
Dans les années 1970 apparaissent les langages structurés de troisième génération
(Pascal pour l'enseignement, C pour l'écriture des systèmes Unix/Linux) et les
langages de manipulation d'objet (C++, Lisp, Prolog, ADA), utilisés en Intelligence
artificielle et dans les technologies de l'Internet (Java).
98
CHAPITRE III
──────────────────────────────────────────────────────────────
■
Programmation des services système
Le système Unix fournit des services systèmes encapsulés accessibles par une
interface programmatique (Application Programming Interface – API).
L'appel système est l'interface d'accès d'un processus utilisateur au mode système ce
qui constitue une protection d'accès aux ressources encapsulées. Il est similaire à celui
d'une fonction de la bibliothèque C. L'utilisation d'un service système provoque un
changement du mode d'exécution dont le traitement est effectué à partir du contexte
du processus appelant en trois phases :
• Mode utilisateur : transfert des arguments d'appel depuis la pile utilisateur vers la
pile système et changement de contexte.
• Mode système : détermination de l'appel, contrôle des arguments, exécution.
• Retour au mode utilisateur : les informations sont transférées de la pile système à la
pile utilisateur ou le code de l'erreur est retourné.
Dans le monde Windows, les services système sont fournis, d'une manière similaire,
par les bibliothèques liées dynamiquement (Dynamic Linked Library - dll).
Application : quelques règles de conception du noyau Unix
La philosophie du système Unix est résumée par le dicton : "Small is beautiful", avec
les normes de développement suivantes :
• Utilisation du langage C normalisé et des bibliothèques standards, non utilisation
de fonctionnalités dépendantes d'un compilateur ou du système local pour réaliser
du code portable.
• Découpage modulaire, procédures localisées dans un fichier regroupant ses
différentes fonctions et utilisable dans différents modules, les noms des variables
commencent par la première lettre de l'objet structuré défini dans le fichier.
• Déclaration des tables système, des structures de données, des variables globales et
externes, définitions de constantes et fonctions symboliques dans des fichiers en
tête (nom suivi du postfixe .h (header)). Tout programme commence par les
instructions d'inclusion des fichiers en tête nécessaires.
• Définition des constantes d'adaptation du noyau à une architecture matérielle
donnée dans des fichiers séparés.
■
Génération du noyau
On distingue trois types de distribution du système Unix :
• la mise à disposition de fichiers exécutables et des fichiers de définition des
paramètres systèmes ne permettant pas de générer un noyau,
• la mise à disposition des fichiers nécessaires à l'édition de liens du noyau
permettant de modifier certains paramètres ou certains fichiers et de le régénérer,
• la distribution complète avec les fichiers sources à condition d'acquérir la licence.
GENERALITES SUR LES SYSTEMES D'EXPLOITATION
99
──────────────────────────────────────────────────────────────
8.8 Evolutions des services systèmes d'Unix
Les services fournis aujourd'hui par les systèmes Unix/Linux sont la résultante des
contributions de différents acteurs divers (utilisateurs, développeurs, constructeurs)
depuis 1969. Nous présentons dans le présent paragraphe leurs apports successifs qui
constituent un excellent rappel des fonctionnalités présentées précédemment.
■
Systèmes de fichiers
Les tailles de blocs des fichiers sont variables. Initialement de 512 octets, elles
augmentent à 1024, 4096 puis 8192 octets dans les versions BSD, et de 512 à 1024
octets dans les versions ATT. Des algorithmes de plus en plus performants sont
implémentés.
Plusieurs types de systèmes de fichiers sont supportés : BSD (Fast File System (FFS),
Unix File System (UFS)), ATT (SV), Andrew File System (AFS), OSF (Local File
System (LFS)), Veritas (1993), fiables, dotés d'un gestionnaire de cache très
performant, permettant aux système de redémarrer sans perte de données, même en
cas de panne brutale du système garantissant des systèmes à tolérance de pannes
pouvant fonctionner plusieurs années sans interruption.
La notion de fichier virtuel (SUN) permet de faire des opérations d'entrée/sortie
transparentes à l'application dans un environnement distribué hétérogène (Network
File System - NFS).
IBM introduit, avec AIX, la gestion des volumes logiques ce qui permet de répartir des
systèmes de fichiers sur plusieurs disques physiques et de créer des volumes virtuels
d'une taille arbitraire que l'on peut redéfinir dynamiquement. Les pilotes peuvent être
chargés dynamiquement.
■
Communications entre processus
Unix V7 implémente les tubes (pipe), fichiers temporaires où deux processus père/fils
sont synchronisés suivant le modèle du producteur et du consommateur.
Les tubes sont généralisés à des processus quelconques (modèle des lecteurs et des
rédacteurs) dans Unix System III par les tubes nommés.
Unix 4.2 BSD propose les prises de communications (sockets), essentielles aux
développements des réseaux avec la définition de protocoles TCP/IP.
■
Signaux
Les processus sont synchronisés en échangeant des signaux. Unix V7 en propose dixsept, Unix System III dix-neuf, Unix 4.2 BSD vingt-neuf, Linux soixante.
■
Verrouillage d'enregistrement
Le système Onix a implémenté un système de verrouillage d'enregistrement pour la
gestion des transactions, Unix System III gère des verrous impératifs et consultatifs.
100
CHAPITRE III
──────────────────────────────────────────────────────────────
■
Gestion mémoire
Unix BSD 3.0 a une gestion de la mémoire virtuelle par page alors qu'ATT propose la
segmentation sans mémoire virtuelle jusqu'à System V R3 qui intègre les mécanismes
de communications entre processus (Inter-Process Communication - IPC) : la
mémoire partagée, les messages, les sémaphores.
Unix V8 intègre les flux (streams) de Dennis Ritchie.
■
Activités multiples d'un processus et architectures multiprocesseur
Les versions actuelles prennent en compte l'activité multiple d'un processus (fibres).
Le noyau a été modifié pour tenir compte des architectures multiprocesseurs.
9.
L4G ET LANGAGES DE L'INTERNET
L'intégration d'Internet dans les systèmes d'information a nécessité l'évolution objet.
■
Les langages de quatrième génération
Les langages de quatrième génération (années 1980), appelés progiciels, permettent
l'accès à l'informatique aux non informaticiens au travers d'interfaces homme/machine
(IHM) ergonomiques. Ainsi ont été développées une grande variété d'applications
dans des domaines divers tels la bureautique (traitement de texte, courrier
électronique, etc.), la gestion, les systèmes gestionnaires de base de données (Oracle,
Ingres, Sybase, MySQL, Access, etc.), la publication ou la conception assistée par
ordinateur, etc.
■
Les langages de l'Internet
Le plus spectaculaire des services fournis par le réseau Internet est appelé World Wide
Web (toile). Appelé également le service WWW, il a pour objectif l'organisation et la
diffusion d'informations sur des sites accessibles à partir de leur dénomination.
Un site Web est visible à partir d'une interface graphique intégrée (browser) dans un
navigateur, chacun pouvant contenir des liens vers d'autres sites Web que la souris
fait apparaître en surbrillance et qu'il suffit de sélectionner pour y accéder. On peut
itérer le procédé à l'infini, rappeler des écrans donc naviguer sur la toile.
Les plus connus des navigateurs sont Mozilla Firefox (GNU) et Internet Exploreur
(Microsoft). Orientés multimédia, ils permettent l'accès à des fichiers de toute nature
(image, son, données, vidéo, etc.). L'ordinateur personnel est donc devenu un système
multimédia pouvant être utilisé comme un téléphone ou une télévision interactive
(Real Player, Windows Media Player, etc.).
Des modules additionnels (plug-in) fournissent des fonctionnalités supplémentaires.
Les cookies (douceurs) sont des données d'identification de l'utilisateur, que ce dernier
va stocker, souvent à son insu sur son poste de travail, permettant de personnaliser
l'affichage du site consulté en fonction de ses consultations antérieures (principe du
mouchard).
GENERALITES SUR LES SYSTEMES D'EXPLOITATION
101
──────────────────────────────────────────────────────────────
■
Exécution d'actions (poste client ou serveur)
Des langages tels Javascript ou VBscript permettent l'exécution de codes interprétés
sur le poste client par l'utilisateur. Ce dernier peut générer l'exécution de scripts sur le
serveur à partir des langages Perl, C++, Visual Basic, Java, etc.
Le langage PHP permet de générer dynamiquement des pages HTML en fonction des
requêtes lancées par l'utilisateur.
■
Les langages à balises
Le langage SGML (Standard Generalized Markup Language) a pour objectif de
définir des normes de création de documents permettant d'adapter librement la forme
selon le support d'édition et d'indexer sémantiquement le contenu.
Le langage de représentation HTML (Hyper Text Markup Langage) dérive de ce
dernier et est conçu comme un langage de représentation de l'information permettant
de dissocier le contenant du contenu par une balise qui délimite une portion de texte
auquel elle confère un attribut. Ce langage ne permettant pas de modifier
dynamiquement le contenu d'une page, il évolue vers les langages XML (eXtended
Markup Langage), DHTML (Dynamic HTML), associé au langage Javascript.
Exemples
Structure des pages Web
HTML, SHTML, …
pages statiques
CSS, XLS, XML
modèles de représentation de données sur la toile
ASP, DHTML, PHP
pages dynamiques
Fichiers images
gif, gif animé, jpg, png, bmp
Multimédia
wav, avi, MPEG2, MPEG4
■
Typologie des sites
Chacun peut créer son propre site Web avec des logiciels comme Page Composer
(Netscape), Front Page (Microsoft), Dreamweaver (Macromédia), etc.
Il est d'usage de regrouper les millions de sites Web en quatre familles :
• Sites personnels des particuliers.
• Sites institutionnels présentant une société, un organisme, une administration.
• Sites d'informations, dont l'objectif est d'être un vecteur de diffusion similaire aux
média traditionnels (télévision, journaux).
• Sites de commerce électronique intégrant tous les aspects de la chaîne logistique
d'une prise de commande (gestion des stocks, livraison, etc.), nécessitant des
techniques fiables de sécurisation des transactions financières.
102
CHAPITRE III
──────────────────────────────────────────────────────────────
■
Moteur de recherche et portail
Un moteur de recherche est un robot d'analyse et d'indexation de bases de données
qu'il consulte à partir de mots clé ou de rubriques. Il fait une recherche exhaustive, pas
toujours très précise. Des doublons peuvent être présents et permet, à partir d'un ou
plusieurs mots clé, d'obtenir une liste de sites Web correspondants aux critères de
recherche tel Google.
Un méta moteur de recherche (Copernic) lance en parallèle plusieurs moteurs de
recherche et classe l'ensemble des résultats par ordre de pertinence.
Un annuaire contient une liste de sites Web définis à partir de certains critères.
Un portail permet d'accéder à d'autres serveurs Web.
10. MARCHE DES SYSTEMES D'EXPLOITATION EN 2007
CHAPITRE IV
SESSION SOUS UNIX/LINUX
1.
L'UTILISATEUR
■
Ouverture d'une session
Un utilisateur est décrit par un identificateur unique, un groupe d'appartenance, un
espace de travail réservé.
Un applicatif est exécuté à sa connexion.
L'utilisateur qui souhaite se connecter doit indiquer, en réponse à l'invitation à se
connecter son identificateur, et éventuellement un mot de passe.
L'identificateur doit être exact. Il peut comporter des lettres majuscules et minuscules,
considérées comme différentes (respect de la casse) et des caractères de contrôle
(CTRL C, CTRL U, CTRL W, etc.).
■
Mot de passe
L'utilisation du mot de passe suit les règles suivantes : il n'apparaît pas sur l'écran
(absence d'écho), il doit être parfaitement exact et doit contenir au moins 6 caractères
alphanumériques (chiffres et caractères).
Il est indispensable pour la sécurité et il faut le changer régulièrement.
Exemple
passwd
Changing passwd for user philipp
new passwd
retype new passwd
Changing passwd for philipp
Si ces informations sont correctes, l'utilisateur dispose en mode graphique d'un
environnement de travail par défaut (le bureau) qu'il peut personnaliser.
Sous Unix/Linux, en mode texte, l'interprète de commandes indique qu'il est en attente
d'une commande en affichant l'invite de saisie d'une commande : le prompt (par
défaut le caractère $).
104
CHAPITRE IV
──────────────────────────────────────────────────────────────
■
Caractéristiques d'un utilisateur
Un utilisateur est décrit par les informations suivantes (fichier /etc/passwd), séparées
par le caractère :
Identificateur de connexion (logname).
Mot de passe crypté ou x.
Identificateur caractéristique de l'utilisateur (uid).
Identificateur caractéristique du groupe (groupe principal si l'utilisateur est défini
dans plusieurs groupes) le gid.
Commentaire.
Répertoire de travail dont l'utilisateur est propriétaire (home directory).
Applicatif lancé au début de la session (interprète de commandes en mode texte).
Exemple
root:x:0:1:Superuser:/:/bin/ksh
lp:x:71:18:Printer administrator:/usr/spool/lp:
audit:x:79:17:Audit administrator:/tcb/files/audit:
ingres:x:777:50:Database administrator:/usr/ingres:
philipp:F40kjhbg47:85:50::/home/philipp:/bin/ksh
user1:x:200:100::/home/user1:/bin/ksh
■
L'administrateur
L'administrateur a tous les droits. Dans le monde Unix/Linux, son identificateur est
root (super utilisateur), son uid vaut 0 et son gid 1.
2.
GESTION DES UTILISATEURS ET DES SESSIONS
Pour sécuriser le système, le mot de passe crypté historiquement dans le fichier
/etc/passwd y est remplacé par le caractère x et déplacé dans le fichier inaccessible
/etc/shadow.
Son également présentes dans le fichier shadow des informations de gestion du
compte (durée de validité, stratégie de verrouillage, stratégie de gestion du mot de
passe, etc. (mécanisme d'aging).
■
Groupe d'utilisateurs
Un groupe est constitué d'un ensemble d'utilisateurs dotés de privilèges communs. Il
est décrit par 4 champs (fichier /etc/group), séparés par le caractère :
nom du groupe
passwd (sans effet)
gid (identificateur du groupe
liste des utilisateurs constituant le groupe.
Exemple
staff:*:500:philipp,dupond,durand
SESSION SOUS UNIX/LINUX
105
──────────────────────────────────────────────────────────────
■
Syntaxe générale d'une commande
L'utilisation d'une commande est décrite par son synopsis. Elle a des options et/ou des
arguments optionnels, notés entre [].
Synopsis
commande [-option(s)] [argument(s)]
Les différents mots de la commande sont séparés par un caractère d'espacement.
■
Affichage du nom de l'utilisateur et de son groupe
Synopsis
id
logname
Exemple
uid=0(root) gid=1(other)
■
Changement d'identité
Il est possible dans une session de changer d'identité avec la commande su.
Synopsis
su [-][nom_de_l'utilisateur_cible]
Description
su sans argument permet de devenir super utilisateur.
Le – indique l'utilisation du contexte d'environnement de l'utilisateur cible. Son
absence conserve celui de l'utilisateur d'origine.
Exemple
su dupond
Passwd:xxxx
Il faut alors indiquer le mot de passe de l'utilisateur dupond.
■
Changement de groupe
La commande groups affiche liste des groupes d'appartenance d'un utilisateur
Le groupe courant (groupe par défaut) est défini dans le fichier des utilisateurs. La
commande newgrp permet d'en changer.
Synopsis
groups
newgrp nouveau_groupe_ courant
■
Fin de session
L'utilisateur se déconnecte et termine sa session (exit, logout, Ctrl D). La session en
cours est fermée et l'invitation à se connecter réapparaît. En mode graphique, le
gestionnaire des menus effectue cette tâche (KDE, Gnome, Xwindow, etc.)
106
CHAPITRE IV
──────────────────────────────────────────────────────────────
3.
DOCUMENTATION EN LIGNE
■
Manuel de références
La manuel de références Unix/Linux est accessible en ligne par la commande man ou
en mode graphique, par exemple la commande xman &.
Chaque élément est référencé par un numéro (sa section) éventuellement suivi d'une
lettre précisant son domaine d'utilisation (m pour maintenance ou administration, c
pour communication, g pour graphique...). Dans la plupart distributions, la
documentation est accessible à partir d'un navigateur.
Sous Unix System V, les sections sont regroupées par thèmes.
ADM
C
CMD
HW
LM
LOCAL
X
Administration.
Langage C.
Commandes de base.
Dépendant du matériel.
Lan Manager.
Commandes locales.
Xwindow (multifenêtrage).
Sous BSD, les sections sont classées par ordre alphabétique.
Section 1
Section 2
Section 3
Section 4
Section 5
Section 6
Section 7
Section 8
■
Commandes de base.
Appels système.
Bibliothèques.
Fichiers spéciaux.
Format des fichiers systèmes.
Jeux.
Documentations diverses.
Outils de maintenance et utilitaires.
Regroupement des sections
Manuel de références administrateur (sections 1M-7-8).
Manuel de références utilisateur (sections 1-6).
Manuel de références programmeur (sections 2-3-4-5).
■
Autres documentations
Il existe divers guides (guide du débutant, utilisation de l'assembleur, guide
administrateur...). La documentation fournie aux licenciés comprend les manuels de
référence, les guides opérateur, administrateur, utilisateur (guide pour débutant sur
Unix, le shell, les éditeurs...), programmeur (utilisation des compilateurs,
bibliothèques, fonctions graphiques, etc.), manuel de référence des erreurs (messages
d'erreurs), guide des outils standards (make, sccs, etc.).
Synopsis
man [ numéro_de_section ] nom_de_commande
Le manuel de référence Unix décrit la syntaxe d'utilisation des commandes accessibles
par l'utilisateur. Il fournit les informations suivantes :
SESSION SOUS UNIX/LINUX
107
──────────────────────────────────────────────────────────────
■
NAME
SYNOPSIS
DESCRIPTION
Brève description de la commande.
Les syntaxes autorisées.
La description complète de la commande.
OPTIONS
EXEMPLES
SEE ALSO
La description des (éventuelles) options.
Des (rares) exemples d'utilisation.
Les liens avec d'autres commandes.
FILES
DIAGNOSTICS
BUGS
Les fichiers utilisés par la commande.
Le code de retour de la commande.
Les restrictions d'utilisation.
Localisation de commandes
Les commandes publiques sont dans divers répertoires (/usr/etc, /usr/bin, /bin, /etc,
/usr/local, etc.). Les commandes permettant de les localiser sont:
whereis commande
Localisation de fichiers et des sections correspondantes du manuel de référence Unix.
which commande
Localisation du fichier exécutable ou d'un éventuel alias.
apropos commande
Affiche une liste de commandes "proches" de la commande indiquée.
whatis commande
Description très sommaire d'une commande.
Exemples
whereis who
who /bin/who /usr/bin/who /usr/man/who.l
which who
/bin/who
which ll
ll: aliased to "clear ; pwd ; ls –l"
4.
INFORMATIONS RELATIVES AUX UTILISATEURS
■
who
Affichage de la liste des utilisateurs connectés, des identificateurs logiques des
terminaux virtuels associés ainsi que des heures de début de session.
Exemple
philipp
root
root
ttya
May 31 19:22
console May 31 12:17
ttyp0
May 31 12:18
108
CHAPITRE IV
──────────────────────────────────────────────────────────────
■
finger
Affichage d'informations complémentaires à la commande who.
Synopsis
finger identificateur_utilisateur
Exemple
finger root
Login name: root In real life: Superuser
Directory: /
Shell: /bin/ksh
On since Jun 30 17:32:14 on ttyp8 2 minutes 59 seconds Idle Time
No Plan.
■
w
Liste des utilisateurs connectés, des commandes actives, de la charge du système.
Exemple
19:10pm up 3 days, 12:17, 2 users, load average:1.04, 1.00, 0.54
User tty login idle JCPU PCPU what
philipp ttya 10:41 am 1 2 3:43 3:25 more /etc/termcap
■
rusers, rwho
Liste des utilisateurs connectés dans un réseau local.
5.
EXERCICES
Rappeler les principes de base d'une connexion sous Unix/Linux. Se connecter, se
déconnecter, se reconnecter. Changer son mot de passe (commande passwd). Essayer
un mot de passe de 2 caractères puis un mot de passe ne contenant aucun caractère
alphanumérique.
Afficher votre nom de connexion, votre groupe, votre répertoire de travail, la liste des
utilisateurs connectés.
Rappeler les fonctions des commandes clear, man.
A partir de la commande man et de la commande ls, afficher tous les fichiers du
répertoire de travail. Si vous travaillez dans un environnement multifenêtres, vous
disposez probablement d'une aide contextuelle en hypertexte. Même question à partir
de l'exécution de la commande xman &
Rappeler le rôle des commandes who, stty.
CHAPITRE V
GESTION DE FICHIERS SOUS UNIX/LINUX
6.
LA GESTION OBJET DES ENTREES/SORTIES
6.1 L'objet fichier
La perception d'une entrée sortie est uniforme quel que soit l'objet sur lequel elle est
effectuée (fichier, objet de communications interprocessus, périphérique, en local ou
distant, etc.). Un fichier représente donc un objet local ou distant dont la sémantique
d'utilisation impose de généraliser les opérations sur les fichiers locaux aux réseaux.
Les systèmes Unix et Windows distinguent sept classes de fichiers.
■
Fichier ordinaire
Un fichier ordinaire (normal, régulier, banalisé) est une suite finie inorganisée
d'octets.
■
Répertoire
Un répertoire (dossier) est un conteneur de fichiers d'un type quelconque accessibles
par un catalogue (directory).
dir1
fichier1, fichier2
dir3
fichier4
dir2
fichier3
La racine de l'arborescence est le conteneur racine qui permet d'associer le nom du
fichier et sa position que l'on perçoit sous la forme d'un arbre définit récursivement où
les nœuds sont des dossiers (répertoires) hiérarchisés et les feuilles des fichiers.
Le nœud le plus élevé est la racine (root), notée / (c : sous Windows), à partir de
laquelle l'utilisateur désigne un fichier par son chemin d'accès (pathname), de
longueur variable (255 caractères), représenté par un arc orienté.
/ root
bin
etc
dev
répertoire racine
lib
usr
home
110
CHAPITRE V
──────────────────────────────────────────────────────────────
Description sommaire
/bin contient les commandes binaires publiques.
/etc contient fichiers et sous dossiers utilisés au démarrage du système.
/dev contient les descriptions des périphériques du système.
/lib contient les bibliothèques.
/usr contient les outils publics destinés aux utilisateurs.
/home contient les répertoires de travail (home directories) des utilisateurs.
■
Fichiers standards
Trois fichiers standards, accessibles par leur étiquette ou leur descripteur, utilisés par
défaut pour la saisie (clavier) et l'affichage (écran), sont définis :
• le fichier standard d'entrée dont l'étiquette est stdin et le descripteur 0,
• le fichier standard de sortie dont l'étiquette est stdout et le descripteur 1,
• le fichier standard d'affichage des messages d'erreurs dont l'étiquette est stderr et
le descripteur 2.
sortie standard
entrée standard
Commande
messages d'erreur standard
Il ne faut pas confondre fichiers ordinaires et fichiers standards.
■
Fichier spécial
Un fichier spécial représente un périphérique (device) fonctionnant soit :
• en mode b (bloc) : périphériques (disque, bande, etc.) gérés via le cache,
• en mode c (caractère) : tous les périphériques y compris les précédents.
■
Tube nommé
Les tubes nommés (named pipe) permettent la gestion des accès concurrents.
■
Lien matériel
Le descripteur d'un fichier est appelé nœud d'index ou inode.
Un lien matériel est une association entre le chemin d'accès d'un fichier et son
descripteur dans un système de fichier donné.
Un autre lien matériel sur ce dernier définit un deuxième chemin d'accès à ce fichier
sans en faire de copie effective car il n'existe qu'une unique occurrence du fichier
même si différents chemins d'accès permettent d'y accéder.
/usr/local/toto
inode
2 liens physiques
/usr/local/tutu
Le fichier est supprimé si le nombre de liens devient nul.
GESTION DE FICHIERS SOUS UNIX/LINUX
111
──────────────────────────────────────────────────────────────
■
Lien symbolique (raccourci)
Le lien symbolique définit un chemin d'accès synonyme de celui du fichier (ordinaire
ou répertoire). C'est un fichier contenant un chemin d'accès (absolu ou relatif) d'un
nœud d'index d'un système de fichiers quelconque de l'arborescence.
On en déduit la représentation suivante :
/home/prof/toto
/usr/local/toto
lien physique
lien symbolique
inode1
inode 2
Le lien symbolique généralise le lien matériel à un système de fichiers quelconque.
Toutefois, le déplacement ou la suppression d'une cible ne modifie pas un lien
symbolique qui ne pointe sur rien si la cible n'est pas remplacée.
■
Représentation des types de fichiers
Les types de fichiers sont représentés (commande Unix/Linux ls)ainsi :
d
b
c
p
l
s
m
■
fichier ordinaire,
fichier répertoire,
fichier spécial en mode bloc,
fichier spécial en mode non bloc,
tube nommé
lien symbolique,
socket,
entrée partagée.
Liens, réseaux locaux, Internet
Le protocole NFS généralise un lien symbolique à un système de fichiers distant ce qui
rend transparent les accès à un fichier dans un réseau.
Le lien hypertexte est un lien symbolique sur le réseau Internet.
■
Création et suppression
La commande ln crée des liens que l'on supprime avec la commande rm.
Synopsis
ln [-s] fichier_origine lien_destination
■
Les commandes ls et file
Synopsis
ls [option] [fichier(s)] [répertoire(s)]
Description
La commande ls affiche la liste des fichiers du répertoire courant.
112
CHAPITRE V
──────────────────────────────────────────────────────────────
Quelques options
a affichage des fichiers silencieux (nom précédé d'un point (.profile))
l affichage (format long) des informations suivantes :
nom,
type (fichier ordinaire, répertoire, périphérique, lien, etc.),
date de dernière modification,
taille (en octets),
attributs de sécurité et de propriétés.
R affichage (récursif) du contenu des sous-répertoires.
Synopsis
file nom_de_fichier
Description
Affichage des informations de type d'un fichier.
Exemple
ASCII text
archive RANDOM library
C program text
data
cpio archive
directory
empty
executable shell script
mc68020 executable
symbolic link
roll nroff or eqn input text
6.2 Gestion des flux
GESTION DE FICHIERS SOUS UNIX/LINUX
113
──────────────────────────────────────────────────────────────
■
Entrées/sorties de haut niveau et bibliothèque C
Les opérations d'entrées/sorties de haut niveau, implémentées dans la bibliothèque
standard du langage C, assurent les transferts entre processus utilisateur et noyau.
■
Entrées/sorties de bas niveau et appels système
Les opérations d'entrées/sorties de bas niveau invoquées par les appels système sont
encapsulées dans les pilotes et assurent la gestion des flux entre noyau et périphérique.
■
Entrées/sorties en mode bloc
La lecture anticipée (read ahead) et l'écriture différée (delayed write) d'une opération
de niveau supérieur ou inférieur est gérée via le cache logiciel, en mode bloc. L'accès
au périphérique est indépendant de l'application.
■
Entrées/sorties en mode caractère
En mode caractère, le cache logiciel n'est pas utilisé par les entrées/sorties.
■
Entrées/sorties en mode cru (entrées/sorties en mode raw)
L'application gère ses tampons et n'utilise pas le cache logiciel.
■
Prise de communication (socket)
L'accès au réseau est réalisé via le descripteur de la prise de communication utilisée,
accessible comme les fichiers usuels par les appels système adéquats.
6.3 Attributs de propriété et sécurité
Les accès à un fichier sont définis par ses attributs de propriété et de sécurité.
■
Propriétaire
L'utilisateur propriétaire est celui auquel le fichier est rattaché et dont il peut modifier
les caractéristiques de sécurité et d'accès. Son identité peut être modifiée par
l'administrateur ou le (futur ex) propriétaire du fichier dont c'est un acte irréversible
avec la commande chown.
Synopsis
chown nouveau_propriétaire fichier(s)
■
Groupe
Un groupe est un ensemble d'utilisateurs dotés de privilèges communs dont un
membre peut appartenir à plusieurs groupes.
Un fichier appartient à un groupe unique modifiable (commande chgrp).
Le groupe courant d'une session est modifiable (commande newgrp).
Synopsis
chgrp nouveau_groupe fichier(s)
newgrp nouveau_groupe
114
CHAPITRE V
──────────────────────────────────────────────────────────────
■
Drapeaux de sécurité
Les droits accès à un fichier sont définies par des drapeaux de sécurité, répartis en
trois champs : un pour l'utilisateur propriétaire, un pour les membres de son groupe
et un pour les autres utilisateurs, chacun constitué par trois drapeaux d'accès rwx.
Leur signification varie selon le type du fichier (ordinaire ou répertoire).
Les 9 drapeaux précédents sont complétés par les 3 drapeaux s, S, t.
Fichier ordinaire
r
lecture
Répertoire
listable
w
écriture
suppression
modification
modification
création, ajout
suppression
x
script
fichier exécutable
traversable
Exemple
Un fichier ordinaire avec les droits rwxr-x—x peut être lu, écrit et exécuté
respectivement par le propriétaire, lu et exécuté par les membres de son groupe et
exécuté par les autres utilisateurs.
■
Modification des attributs de propriété et de sécurité
La commande ls affiche les attributs de sécurité d'un fichier.
La commande chmod permet de les modifier.
Sur certaines implémentations, la destruction d'un fichier (rm) ne nécessite que le
droit d'écriture dans le répertoire où le fichier est enregistré mais pas le droit d'écriture
sur le fichier lui-même. Un fichier accessible en lecture seule peut donc être détruit si
le répertoire est accessible en écriture.
Synopsis
chmod modif_autorisations_courantes fichier(s)
Cette commande de modification des attributs de sécurité d'un fichier est utilisée sous
forme symbolique ou octale.
Utilisateur
u propriétaire
g groupe
o autres (others)
opérateur
+
=
opération
ajout
suppression
assignation
permissions
r
w
x
Exemple
chmod go-rx archive
chmod g+w donnees
Les droits d'accès sont définis par le regroupement par 3 des 9 drapeaux en octal.
Lecture= 4 (100), écriture = 2 (010) exécution = 1 (001)
644
755
-rw-r—-r-drwxr-xr-x
droits par défaut pour fichier
droits par défaut pour répertoire
GESTION DE FICHIERS SOUS UNIX/LINUX
115
──────────────────────────────────────────────────────────────
■
Attributs par défaut
Le masque de sécurité est utilisé à la création des fichiers et des répertoires pour
définir leurs attributs de sécurité par défaut.
Les attributs de sécurité par défaut des fichiers ordinaires sont définis selon la règle :
attributs_par_defaut=non(masque) et 666
Les attributs de sécurité par défaut des répertoires sont définis selon la règle :
attributs _par_defaut=non(masque)
L'exécution de la commande umask indique la valeur par défaut du masque de sécurité
courant, souvent 022. Ainsi, avec ce masque, on obtient :
Fichiers ordinaires
Répertoires
rw-r—r—
rwxr-xr-x
ce qui constitue des droits d'accès raisonnables.
Le masque de sécurité peut être redéfini par l'utilisateur dans son profil ou défini par
l'administrateur qui doit garantir une valeur par défaut acceptable pour tous les
utilisateurs (génération système, fichier de démarrage d'une session, etc.).
6.4 Usurpation d'identité
Le fichier contenant la liste des utilisateurs et leur mot de passe crypté appartient à
l'administrateur avec les droits rw-------. Un utilisateur ne peut donc accéder
directement à ce fichier, ni en lecture, ni en écriture.
Par contre, il peut y modifier son mot de passe par usurpation temporaire de l'identité
du propriétaire de la commande réservée à cet usage dont le propriétaire est
l'administrateur et dont le lecteur pourra constater que les droits sont rwsr-xr-x.
■
Le bit suid sur un fichier ordinaire
Le bit s est appelé bit suid (set user id). Son positionnement autorise un utilisateur non
propriétaire du fichier à usurper temporairement l'identité de son propriétaire pour
l'exécuter avec les droits de ce dernier.
Le propriétaire réel d'un processus en cours d'exécution est l'utilisateur qui a lancé le
processus, le propriétaire effectif étant le propriétaire du fichier exécutable qui en a
défini les droits d'accès, autorisant, par le bit s d'autres utilisateurs à l'exécuter.
Synopsis
chmod 4555 fichier_exécutable
Avec la commande précédente, le fichier exécutable a les droits r-sr-xr-x
■
Le bit suid sur un répertoire
Tout fichier créé dans ce répertoire hérite du groupe du répertoire si ce dernier a les
droits drwxrwsr-x.
116
CHAPITRE V
──────────────────────────────────────────────────────────────
■
Le bit Sgid sur un fichier ordinaire
Le bit S, appelé bit SGID, est utilisé avec les fichiers exécutables d'un groupe,
permettant à un utilisateur d'exécuter la commande avec les privilèges de ce dernier
sans en être membre.
Synopsis
chmod 2555 fichier_exécutable
Avec la commande précédente, le fichier exécutable a les droits r-xr-Sr-x
■
Précautions d'utilisation
Les fichiers avec l'un des bits s ou S sont sensibles car ils peuvent devenir des failles
de sécurité du système. Il faut donc en minimiser l'utilisation et éviter que leur
propriétaire ne soit l'administrateur par la création d'utilisateur dédié avec des droits
limités par le bit suid.
Un fichier exécutable avec le bit suid ne doit pas être accessible en lecture un pirate
pouvant l'utiliser à l'insu de son propriétaire.
6.5 Protection des fichiers d'accès public
Le bit d'adhérence (sticky bit), ou encore le bit t, a une signification différente sur un
fichier ordinaire ou un répertoire.
■
Fichier
Il permet le maintien de l'image du fichier en mémoire à la fin de son exécution, d'où
son appellation. Les plus fréquents sont les éditeurs, compilateurs, assembleurs,
éditeur de liens.
■
Répertoire
Le bit t d'un répertoire d'accès public (rwxrwxrwx) interdit à un utilisateur de détruire
des fichiers dont il n'est pas propriétaire.
■
Synopsis
chmod 1777 répertoire
Avec la commande précédente, le répertoire a les droits drwxrwxrwt
6.6 Listes de contrôles d'accès aux objets
Les systèmes sécurisés permettent de définir des listes de contrôle d'accès (Access
Control List - ACL) que la norme POSIX P1006.3 définit comme un moyen formel
d'exprimer des opérations sur des objets, selon l'identité de l'entité émettrice de la
requête. Une liste de contrôles d'accès est une entrée dans un fichier de la forme :
:type:principal:permissions
GESTION DE FICHIERS SOUS UNIX/LINUX
117
──────────────────────────────────────────────────────────────
Le champ principal est la dénomination de l'entité sur laquelle s'applique les droits.
Le champ type spécifie l'interprétation du champ principal (le propriétaire du fichier,
un autre utilisateur (local ou distant), un groupe (local ou distant), etc.).
Le champ permission est constitué des classiques drapeaux rwx complétés par les
drapeaux cid, avec les interprétations :
c
i
d
habilitation à modifier les ACL,
droit d'insertion de fichier dans un répertoire,
droit de destruction de fichier dans un répertoire.
Exemples
root:/etc:RWXCID
Sous AIX, les ACL comportent également les informations suivantes :
• permissions de base constituant les attributs traditionnels,
• attributs de sécurité complémentaires (bits s, S, t),
• permissions étendues, décrites sous la forme d'ACE (Access Control Entry), qui,
pour chaque instance décrite, suivent le format :
Opération
type_d'accès [[info_utilisateur] [info_groupe]
Trois opérations sont supportées :
deny
interdiction du type d'accès spécifié
permit
autorisation du type d'accès spécifié
specify
spécification du type d'accès
L'utilisateur (groupe) auquel s'applique les droits décrits est précédé du suffixe u: (g:).
Une entrée est crée pour chaque utilisateur ou groupe.
Plusieurs utilisateurs ou groupes peuvent être combinés dans une entrée.
Exemple
attributes base permissions
owner(philipp): rwx
group(root):
r-x
other:
r-extended permissions:
enabled
deny rwx g:staff
permit
rwx u:root, g:staff
permit
r-x
g:sysadm
■
Commandes associées
aclget
aclput
acledit
affichage d'une liste de contrôle d'accès,
définition d'une liste de contrôle d'accès,
modification d'une liste de contrôle d'accès.
118
CHAPITRE V
──────────────────────────────────────────────────────────────
7.
NOMMAGE DES FICHIERS
7.1 Règles
Sous Unix/Linux, l'identificateur d'un fichier est une chaîne de caractères
alphanumériques significatifs (lettre majuscule, minuscule, chiffre, certains caractères
spéciaux du shell).
Les lettres majuscules et minuscules sont différentes (respect de la casse).
Les caractères (spéciaux) suivants sont d'usage réservé : (,[,),],{,},/, \,*, ','', ^, $, `.
La longueur du nom est limitée à 256 caractères.
■
Les fichiers silencieux
Leur nom commence par un point. Utilisés pour personnaliser l'environnement
utilisateur, on visualise leurs caractéristiques avec la commande ls -a.
Exemple
.profile
7.2 Caractères d'expansion de l'interprète de commandes
Certains caractères spéciaux du shell, également appelés méta caractères, remplacent
des caractères dans les scripts, les commandes des éditeurs de textes ou du shell.
Le caractère spécial * remplace un nombre quelconque de caractères donc toute
chaîne de caractères, à l'exception du caractère point.
Le caractère spécial ? se substitue à un caractère quelconque.
Le caractère spécial qui suit le caractère \ (backslash) perd sa signification et est
considéré comme un caractère ordinaire. Ainsi, le caractère \ précédant un caractère
CR permet de poursuive l'instruction sur la ligne suivante.
Les opérateurs crochets [ ] délimitent une liste de caractères et permettent de
compléter une chaîne de caractères par une de ses occurences.
Exemple
nom[abc]
nom[123]
nom[ab1]
noma, nomb ou nomc
nom1, nom2 ou nom3
noma, nomb ou nom1
L'expression [f-j] représente un des caractères de l'intervalle (ordre lexicographique)
défini entre les deux caractères.
Exemples
nom[a-z] nom[0-9]
L'expression [! délimite le début du complément d'un ensemble.
L'expression ] délimite la fin de l'ensemble.
Exemple
ls [!d-z]
GESTION DE FICHIERS SOUS UNIX/LINUX
119
──────────────────────────────────────────────────────────────
7.3 Chemins d'accès
■
Chemin absolu
Le chemin d'accès (pathname) d'un ficher peut être absolu ou relatif.
Les différents répertoires traversés sont décrits dans l'ordre décroissant de
l'arborescence de la gauche vers la droite et séparés par le caractère spécial /.
Le chemin d'accès absolu décrit la liste des répertoires depuis la racine (root) notée /
jusqu'au répertoire courant.
Exemple
/home/philipp/f1
■
Chemin relatif
Le chemin d'accès est relatif aux fichiers et répertoires du répertoire courant.
Exemple
philipp/f1
■
Commandes associées
Synopsis
basename chemin_absolu affichage du nom relatif du fichier à partir du chemin absolu,
dirname chemin_absolu affichage du répertoire d'appartenance du fichier.
■
Répertoires courant et répertoire père
Le répertoire courant est noté .
Le répertoire parent est noté ..
8.
OPERATIONS SUR LES FICHIERS STANDARDS
8.1 Redirection
■
Définition
La redirection d'un fichier est une modification de son descripteur de telle sorte que
l'inode cible par défaut soit modifiée.
■
Redirection des fichiers standards
La redirection d'un fichier standard sur un fichier ordinaire (saisie ou résultat) n'est
valable que pour la commande courante.
■
Redirection de la sortie standard
Le caractère spécial de redirection de la sortie standard est le caractère > suivi de
l'identificateur du fichier (ordinaire ou spécial) sur lequel on souhaite l'effectuer.
120
CHAPITRE V
──────────────────────────────────────────────────────────────
Exemples
ls
affichage sur la sortie standard de la liste des fichiers du répertoire courant,
ls > liste
stockage de la liste des fichiers du répertoire courant dans le fichier liste.
ls > /dev/tty12 la liste des fichiers du répertoire courant est redirigée sur le terminal virtuel
associé au périphérique /dev/tty12.
■
Remarque
La redirection permet de créer un fichier vide avec la commande :
cp /dev/null > fic
■
Ordre d'exécution des opérateurs
Le fichier cible de la redirection est détruit (s'il existe) puis recrée lors de son
exécution ce qui peut entraîner des conséquences inattendues. Soit la commande :
cat f1 f2 > f1
utilisée pour concaténer les fichiers f1 et f2 en appelant f1 le fichier résultat. Le fichier
f1 d'origine est détruit puis recréé, identique à f2.
■
Redirection en mode ajout
Cette destruction est évitée en utilisant le symbole >> au lieu du symbole > qui
s'exécute selon le principe suivant : si le fichier existe, l'information est ajoutée à sa
fin. Il est créé sinon.
Exemple
ls > liste
date >> liste
cat f2 >> f1
■
création du fichier liste,
ajout de la date courante en fin du fichier liste,
ajout de f2 après f1.
Redirection du fichier standard d'affichage des messages d'erreur
Les opérateurs de redirection des messages d'erreurs sont précédés de l'étiquette 2.
Exemple
cc pg.c 2> pg.e
■
compilation du fichier pg.c avec redirection des messages d'erreur dans le
fichier pg.e
Redirection de l'entrée standard
Le caractère de redirection est le caractère < suivi du nom du fichier à partir duquel on
souhaite faire la redirection.
Exemple
crypt cle < clair
Le fichier clair est redirigé sur l'entrée standard. Il est crypté (ou décrypté).
■
Redirections simultanées
On peut exécuter simultanément des redirections sur des fichiers d'entrée et de sortie.
Exemple
crypt cle < clair > code
GESTION DE FICHIERS SOUS UNIX/LINUX
121
──────────────────────────────────────────────────────────────
■
Autre forme de la redirection de l'entrée standard
Une deuxième forme de redirection de l'entrée standard, surtout utilisée dans les
scripts, est le symbole <<.
L'entrée est le texte qui suit immédiatement le symbole, encadré par un terminateur
(un caractère ou une chaîne de caractère n'apparaissant pas dans le texte, séparé ou
non par des caractères d'espacement). Dans l'exemple ci-après, le terminateur est le
caractère !. Il doit apparaître à la fois après le symbole << et à la fin du texte saisi, au
début d'une ligne.
Exemple
ed fic << !
appel de l'éditeur sur le fichier fic
On saisit alors des directives d'édition de l'éditeur ed :
/mot/
d
w
q
!
recherche de la chaîne mot,
suppression de la ligne,
écriture du fichier,
sortie de l'éditeur,
fin de la redirection.
Exemple
debut << EOT ed fic
1,4p
q
EOT
Description
Appel de ed pour opérer sur le fichier fic avec double redirection (en sortie, le fichier
debut contient les 4 premières lignes), EOT est le séparateur.
8.2 Tube
Un tube (pipe) symbolisé par l'opérateur | redirige la sortie standard d'une commande
sur l'entrée standard d'une autre.
Exemple
ls –l | wc –l
■
comptage du nombre de lignes affichées par la commande ls –l donc
du nombre de fichiers du répertoire courant.
Tubes et redirection
Plusieurs tubes peuvent s'enchaîner. L'utilisation simultanée des redirections est
possible.
Exemples
ls -l | wc -l > nbfic
ls | tee inter | wc -1
le résultat apparaît dans le fichier nbfic
le résultat de la commande ls est transmis à la commande tee qui
transmet son résultat à la commande wc (inter est une copie du
résultat de ls).
122
CHAPITRE V
──────────────────────────────────────────────────────────────
9.
OPERATIONS SUR LES REPERTOIRES
■
Affichage du chemin absolu (courant)
pwd
■
Création de répertoire(s)
Syntaxe
mkdir repertoire1 [repertoire2...]
Les chemins d'accès peuvent être absolus ou relatifs.
■
Renommage ou déplacement d'un répertoire
mv ou mvdir
Syntaxe
mv nom_répertoire nouveau_nom_du_répertoire
Les chemins d'accès peuvent être absolus ou relatifs. Le déplacement d'un fichier n'est
possible que dans un même système de fichiers.
■
Suppression de répertoire(s)
Syntaxe
rmdir dir1 [dir2...]
La commande rmdir ne peut supprimer qu'un répertoire vide. La commande rm utilisée
avec l'option -r (récursif) permet de supprimer un répertoire non vide.
■
Déplacement dans l'arborescence
La commande interne cd (change directory) permet de se déplacer dans les répertoires
de l'arborescence.
Synopsis
cd [nom_répertoire_cible]
cd ~[nom_de_connexion]
Description
Modification du répertoire courant.
La commande cd sans argument ramène l'utilisateur dans son répertoire de travail
(home directory) comme la commande cd ~.
La commande cd ~user déplace l'utilisateur émetteur de la requête sur le répertoire de
travail de l'utilisateur indiqué.
■
Taille (nombre de blocs) d'une arborescence
La commande du affiche récursivement le nombre de blocs utilisé par un répertoire.
Synopsis
du [-as][répertoire(s)]
GESTION DE FICHIERS SOUS UNIX/LINUX
123
──────────────────────────────────────────────────────────────
Description
Affichage (récursif) du nombre de blocs d'un répertoire.
Options
-a (all) tous les fichiers y compris les fichiers cachés,
-s (summary) chacun des arguments.
Exemple
du -a /etc/vtoc
2 /etc/vtoc/m2333k
4 /etc/vtoc/m2344k
10. OPERATIONS SUR LES FICHIERS ORDINAIRES
10.1 Commandes de base
■
Copie
Synopsis
cp [options] fichier_origine fichier_cible
cp [options] fichier_origine(s) répertoire_cible
Description
Recopie d'un fichier dans un autre, écrasé s'il existe déjà.
Recopie des fichiers vers le répertoire cible (préexistant).
La commande a toujours au moins deux arguments.
■
Renommage ou déplacement
Synopsis
mv [options] fichier_origine fichier_cible
mv [options] fichier_origine(s) répertoire_cible
Description
Renommage d'un fichier ou déplacement dans un répertoire. Un fichier cible existant
est écrasé sauf avec l'option -l
■
Suppression
Synopsis
rm [-option(s)] fichier(s)
Description
Cette commande opère sur tout type de fichier. Ses principales options sont :
i demande (interactive) de confirmation avant destruction,
f destruction sans prise en compte des attributs du fichier (forçage),
r destruction de tous les sous-répertoires et de leur contenu (récursif).
124
CHAPITRE V
──────────────────────────────────────────────────────────────
■
Concaténation
Affichage du contenu ASCII d'un ou plusieurs fichiers sur la sortie standard.
Synopsis
cat fichier(s)
La redirection de la sortie standard permet de concaténer plusieurs fichiers.
Exemple
La commande :
cat f1 f2 > f1
provoque l'écrasement de f1 puis son remplacement par f2.
■
Affichage par page
Synopsis
more [ options ] fichier
Description
Affichage du contenu par ligne (< cr >), par page (<caractère d'espacement >),
recherche d'une chaîne de caractères (/chaîne < cr > ). La sortie de la commande
s'exécute avec l'un des caractères q ou CTRL C (^C).
■
Affichage des lignes en tête du fichier
Synopsis
head [options] fichier
Description
Affichage par défaut des 10 premières lignes d'un fichier.
■
Affichage des lignes à la fin du fichier
Synopsis
tail [options] fichier
Description
Affichage par défaut des 10 dernières lignes d'un fichier.
■
Affichage du contenu d'un fichier
Synopsis
od [ options ] fichier
Cette commande affiche les caractères non imprimables d'un fichier. Quatre options :
c
o
d
x
caractère
octal
décimal
hexadécimal.
GESTION DE FICHIERS SOUS UNIX/LINUX
125
──────────────────────────────────────────────────────────────
■
Comparaison de fichier texte
Synopsis
diff [ option(s) ] fichier1 fichier2
Description
Affichage des lignes différentes de fichiers textes. Les options sont :
B ignore les caractères d'espacement ou tabulations,
e mise en forme du résultat pour rendre les 2 fichiers identiques
■
Comparaison de fichier binaire
Synopsis
cmp [ -ls ] fichier1 fichier2
Description
Comparaison de fichiers binaires avec affichage de l'octet et du numéro de la ligne où
se trouve la première différence.
L'option -l affiche la valeur des octets en octal et le numéro de la ligne en décimal.
L'option -s permet de récupérer un code de retour sans affichage (0 : fichiers
identiques, 1 : fichiers différents, 2 : erreur d'exécution de la commande).
■
Comparaison de fichiers triés
Synopsis
comm [-123] fichier1 fichier2
Description
Comparaison de deux fichiers triés et affichage sur 3 colonnes :
des lignes différentes dans fichier1 uniquement.
des lignes différentes dans fichier2 uniquement.
des lignes différentes dans fichier1 et dans fichier2.
L'option 123 permet de supprimer l'affichage de la ou des colonnes indiquées.
■
Cryptage
Synopsis
crypt clef < source > cible
crypt clef < fichier
Description
Création du fichier crypté cible, image cryptée du fichier source à partir d'une clé de
chiffrement.
Affichage du fichier décrypté par la clé de chiffrement clef.
126
CHAPITRE V
──────────────────────────────────────────────────────────────
■
L'heure de dernière modification
La commande touch s'utilise pour créer un fichier vide ou changer la date de dernière
modification d'un fichier (souvent utile pour l'utilitaire make).
Synopsis
touch fichier
■
Tri
Synopsis
sort [-option(s)] [-o resultat] [+pos1 [-pos2]].. fichier(s)
Description
La commande sort tri des fichiers dans l'ordre lexicographique.
Un champ par défaut est un ensemble de caractères séparés par un caractère
d'espacement ou de tabulation.
Les options +posl et -pos2 limitent le tri à un champ précis au lieu de la ligne entière
(défaut). Elles sont définies sous le format m,n où m est le nombre de champs à
ignorer depuis le début de la ligne et n le nombre de caractères à ignorer depuis le
début du champ.
resulat est un nom de fichier résultat (par défaut la sortie standard).
Les principales options sont :
b
ignore les caractères d'espacement et tabulations en fin de champ,
d
tri par ordre alphabétique (lettres, chiffres et caractères d'espacement),
f
conversion des lettres majuscules en lettres minuscules,
i
ignore les caractères de contrôle,
n
tri d'un champ numérique de la forme -n ou n,
r
inverse l'ordre des comparaisons,
tx
le caractère x est séparateur de champ au lieu du caractère d'espacement,
c
vérification que le fichier est trié,
m
fusionne les fichiers préalablement triés.
■
La commande fuser
La commande fuser affiche la liste des processus utilisant un fichier donné.
Syntaxe
fuser [-v] répertoire
Description
Affichage de la liste des fichiers utilisés d'un système de fichier ou d'un répertoire
donné et des processus les utilisant.
Exemple
fuser –v /home
/home
USER pid
user1 881
user1 2647
ACCESS
..c..
..c..
COMMAND
bash
startx
GESTION DE FICHIERS SOUS UNIX/LINUX
127
──────────────────────────────────────────────────────────────
10.2 Recherche récursive avec condition et traitement
La commande find effectue des recherches récursives de fichiers conformément à
certains critères tels des fichiers d'une taille inférieure ou supérieure à une taille
donnée, inutilisés pendant une certaine période, appartenant à un utilisateur ou à un
groupe donné, etc.
Synopsis
find chemin_rech condition(s)_recherche action
■
Chemin de recherche
Répertoire (absolu ou relatif) à partir duquel s'effectue récursivement la recherche.
■
Quelques critères de recherche
Ils sont définis à partir des mots clés suivants :
user
name
group
size
atime
ctime
mtime
type
u
perm
cpio
newer f
depth
■
Liste des actions
print
exec
■
utilisateur propriétaire du fichier défini par la variable user,
chemin d'accès relatif du fichier,
groupe d'appartenance donné du fichier,
taille du fichier (blocs de 512 octets ou caractères),
date du dernier accès,
date de création,
date de la dernière modification,
type du fichier (b (bloc), c (caractère), d (dossier), P (tube nommé), f
(fichier ordinaire),
nombre de liens matériels,
attributs de sécurité (en octal),
recherche pour sauvegarde (commande cpio),
fichiers modifiés plus récemment que le fichier f,
recherche dans l'arborescence de telle sorte que les entrées d'un répertoire soient
prises en compte avant le répertoire ce qui permet d'écrire des fichiers dans des
répertoires sans avoir les droits convenables (administrateur seulement).
affichage de la liste des fichiers trouvés (action par défaut),
exécution de la commande qui suit et qui doit être terminée par le caractère
spécial ; précédé du caractère \. Les accolades {} représentent l'ensemble
des fichiers satisfaisant au critère de recherche sur lesquels la commande
doit s'exécuter.
Opérateurs logiques et caractères spéciaux de la commande
Les conditions de recherche peuvent être combinées à l'aide des opérateurs logiques :
a
o
!
(...)
et logique,
ou logique,
non logique,
parenthèses de regroupement de critères devant être précédés du caractère \
(escape sequence) pour les différencier des parenthèses de l'interprète.
128
CHAPITRE V
──────────────────────────────────────────────────────────────
Exemples
Recherche depuis le répertoire courant du fichier prog.c.
find . -name prog.c -print
Recherche (répertoire courant) de fichiers non modifiés depuis plus de 15 jours.
find . -mtime +15 -print
Recherche depuis le répertoire /home les fichiers de l'utilisateur jean.
find /home -user jean -print
Recherche (répertoire courant) de fichiers modifiés plus récemment que /etc/motd.
find . -newer /etc/motd -print
Recherche depuis le répertoire / des fichiers auxquels personne n'a accédé depuis plus
de 30 jours et résultat dans le fichier /tmp/liste.
find / -atime +30 -print > /tmp/liste
Recherche depuis le répertoire /etc des fichiers d'une taille comprise entre 10000 et
20000 caractères.
find /etc -size +10000c -size -20000c -print
Recherche pour suppression depuis le répertoire / des fichiers de l'utilisateur betty.
find / -user betty -exec rm -f {} \;
Recherche pour suppression depuis le répertoire /home des fichiers core et des fichiers
suffixés par .o auxquels personne n'a accédé depuis plus de 2 jours.
find /home -type f \( -name core -o -name '*.o' \) -atime +2 -exec rm {} \;
Recherche depuis le répertoire /usr de fichiers dont le numéro d'inode est 4156.
find /usr -inum 4156 -print
■
Nettoyage
Tout système d'exploitation crée de nombreux fichiers temporaires qu'il faut purger
régulièrement comme les fichiers core, image de la mémoire résultant d'une exception
ou les fichiers crées dans les dossiers publics (/tmp, /usr/tmp) par les utilitaires gcc,
lint, vi, etc. Il suffit pour cela de lancer périodiquement un script de nettoyage avec le
service d'ordonnancement (service cron).
10.3 Expression régulière
Les caractères spéciaux dans une expression régulière ont la signification suivante :
.
un caractère quelconque,
[...]
un ensemble de caractères,
[^..]
caractère(s) n'appartenant pas à l'ensemble indiqué,
[a-e]
les caractères entre a et e (ordre alphabétique),
exp*
répétition de l'expression exp n fois (n ≥ 0),
exp+
idem avec n > 1,
exp ?.
idem avec n=0 ou 1,
^exp
expression exp en début de ligne,
exp$
expression exp en fin de ligne,
e1 | e2
l'expression e1 ou l'expression e2.
GESTION DE FICHIERS SOUS UNIX/LINUX
129
──────────────────────────────────────────────────────────────
■
Recherche d'une chaîne de caractères dans un fichier
La commande grep recherche les instances d'une chaîne de caractères d'un fichier
décrite par une expression régulière.
Ses variantes sont egrep (interprète d'autres caractères spéciaux) et fgrep, plus rapide
mais ne recherchant que des chaînes de fixes.
Synopsis
grep [option(s)] expression_régulière fichier(s)
Les principales options sont:
v
c
l
n
b
s
h
i
e exp
affichage des lignes ne contenant pas l'occurrence recherchée,
affichage du nombre de lignes contenant l'occurrence recherchée,
affichage du nom des fichiers,
affichage pour chaque ligne de son numéro,
affichage pour chaque ligne du numéro du bloc la contenant,
suppression des messages d'erreur,
pas d'affichage du nom des fichiers,
pas de distinction entre lettres majuscules et minuscules,
une expression régulière à rechercher.
11. CYCLE DE VIE D'UN FICHIER
■
Création
L'identificateur d'un fichier est son chemin d'accès externe (pathname).
Ses attributs de propriété et de sécurité permettent d'y accéder.
Sa structure, composé d'un emplacement initial et d'extensions, est dynamique sa taille
pouvant croître ou décroître.
Chacune de ses entités est décrite par son nœud d'index, quelquefois de manière
redondante par sécurité (FAT, journalisation, etc.).
■
Ouverture
L'ouverture crée un canal de gestion des flux entre noyau et applicatif accessible par
son descripteur.
Les droits d'accès sont vérifiés, le canal est ouvert, le descripteur du fichier est mis à
jour, le comportement des opérations de lecture/écriture est défini : lecture seule,
écriture et lecture, mode ajout, mode synchrone, etc.
130
CHAPITRE V
──────────────────────────────────────────────────────────────
■
Lecture
Algorithme simplifié
si absence de verrou en lecture
alors si la fin du fichier n'est pas atteinte alors lecture depuis la position courante is
sinon blocage du processus jusqu'à la suppression du verrou
is
Déroulement de l'appel système read
Synopsis
int read(int fd, char *buf, unsigned nbyte);
Description
fd est le descripteur de fichier, buf est l'adresse du tampon en mémoire contenant les
données à transférer, nbyte est le nombre de bytes à transférer.
Mode utilisateur
fd, buf, nbyte
Mode Noyau
Stockage des arguments dans des registres
Sauvegarde du contexte utilisateur dans la
pile utililisateur
Recopie des paramètres d'appel dans la pile système
Appel de la primitive de bas niveau
read(fd, buf, nbyte)
Exécution de la primitive de bas niveau
Rangement des résultats dans la pile utilisateur
Retour en mode utilisateur :
restauration du contexte utilisateur
Structure U
résultat
erreur
fd, buf, nbyte
Suite du programme
■
Ecriture
Algorithme simplifié
si absence de verrou en écriture
alors écriture (asynchrone ou synchrone)
sinon le processus est bloqué jusqu'à la suppression du verrou
is
■
Fermeture
La fermeture garantit que l'information en mémoire a été effectivement recopiée sur le
fichier en vidant les caches et en libérant les canaux d'accès aux données.
En cas de plantage, les fichiers en cours d'utilisation ne sont pas toujours mis à jour.
■
Destruction
La suppression d'un fichier est effective quand tous ses chemins d'accès sont détruits.
Son descripteur est alors supprimé libérant l'espace alloué sur le disque sans
destruction du contenu qu'il est possible de récupérer tant qu'il n'a pas été altéré.
GESTION DE FICHIERS SOUS UNIX/LINUX
131
──────────────────────────────────────────────────────────────
■
Cycle de vie d'un fichier
Les appels système associés aux opérations précédentes sont :
creat
open
write
read
lseek
close
chmod
stat
access
création d'un fichier et gestion de ses modes d'accès
ouverture d'un fichier (lecture, écriture, mis à jour)
écriture
lecture
déplacement dans un fichier
fermeture d'un fichier
modification des droits d'accès
informations sur l'état d'un fichier
contrôle des droits d'accès.
creat
link
open
write
read
lseek
close
unlink
Exemple : copie d'un fichier
#define BUFSIZE 1024
#define PMODE 644
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
int main (int argc, char *argv[])
{int f1,f2,n;
char buf[BUFSIZE];
void erreur( char *, char *);
/* prototypes */
int open(char *, int, mode_t);
if(argc != 3) erreur ("Usage : copie depuis vers", (char *) NULL);
if((f1=open(argv[1],O_RDONLY,444))==-1)erreur("ouverture impossible %s",argv[1]);
if((f2 = creat(argv[2],PMODE)) == -1) erreur("création impossible %s",argv[2]);
while ((n = read(f1, buf, BUFSIZE)) > 0)
{ if (n== -1) exit(-1);
if (write(f2, buf, n) != n) erreur("erreur en écriture", (char *) NULL);
}
return(1);
}
void erreur(char *s1, char *s2) {fprintf(stderr,s1,s2); printf("\n"); exit(-1); }
132
CHAPITRE V
──────────────────────────────────────────────────────────────
12. L'ARBORESCENCE TRADITIONNELLE D'UNIX
■
Racine
Au sommet de l'arborescence se trouve le répertoire racine (root) noté / qui défini
l'origine des chemins d'accès absolus aux fichiers.
L'interprétation du caractère / dépend de sa position dans le chemin d'accès du
fichier : à gauche, il représente la racine ; ailleurs il est le séparateur des répertoires
traversés.
Tout répertoire contient au moins deux entrées symbolisées par . qui représente le
répertoire courant et par .. qui représente le répertoire parent.
Le répertoire racine est tel que . = ..
■
Montage des périphériques externes
Le répertoire /mnt, est réservé au montage de systèmes de fichiers de supports
amovibles externes (clé USB, disquette, etc.).
■
Dossiers de récupération
Chaque système de fichiers contient un dossier lost+found dans lequel sont transférés
les blocs récupérés lors de l'exécution de la commande fsck.
GESTION DE FICHIERS SOUS UNIX/LINUX
133
──────────────────────────────────────────────────────────────
■
Noyau
Le fichier /unix (vmunix, vmlinuz, etc.) est le noyau du système. Quelquefois stocké
dans le dossier /boot.
■
Commandes publiques
Les répertoires /bin , /usr/bin, /sbin contiennent les commandes publiques.
■
Fichiers temporaires
Le répertoire /tmp, d'accès public, doit avoir les droits rwx pour tous les utilisateurs
car utilisé pour y créer des fichiers temporaires. Par convention, leur nom comporte
souvent une partie littérale identifiant la fonction assurée et une partie numérique
garantissant l'unicité du nom (souvent le pid du processus associé).
Au démarrage, le répertoire /tmp doit être purgé.
Le dossier /usr/tmp
l'administration.
■
contient
certains
fichiers
temporaires
utilisés
pour
Bibliothèques
Les bibliothèques standards d'Unix sont stockés dans les répertoires /lib et /usr/lib.
Une bibliothèque à édition statique de liens a pour nom libxxx.a (archive) où xxx
indique sa nature (c pour le langage C, f77 pour le langage Fortran, C pour le langage
C++, pa pour le langage Pascal , etc.),.
Les bibliothèques à édition dynamique de liens sont suffixées par.so (shared objects)
ou .sl (shared library).
Exemples
libc.so
libf77.a
libC.sl
134
CHAPITRE V
──────────────────────────────────────────────────────────────
13. EXERCICES
■
Commandes de base du SGF
1°) Rappeler le rôle des commandes pwd, cd, mkdir, cp, ls, mv.
2°) Créer le répertoire tempo dans votre répertoire de travail, puis s'y déplacer. Y
copier en une seule commande le fichier /etc/hosts dont on affichera la taille et le
contenu.
3°) Supprimer le répertoire tempo à partir de la commande rmdir.
4°) Refaire le 2° puis déplacer la copie du fichier /etc/hosts dans le répertoire parent.
Supprimer en une seule commande différente de la précédente le répertoire
tempo.
5°) Déplacez vous dans l'arborescence d'Unix pour étudier les répertoires /, /etc, /usr,
/home et essayer d'y détruire des fichiers au hasard (vous n'êtes pas root!!).
6°) Y a-t-il une différence entre les commandes :
rm *.o et rm * .o
N.B. : ne faîtes pas l'essai.
■
Commandes d'affichage
1°) Rappeler les fonctions des commandes clear, tail, head, more, man.
2°) Afficher les 10 premières lignes du fichier /etc/profile ou du fichier /etc/termcap.
3°) Afficher les 10 dernières lignes du fichier /etc/profile ou du fichier /etc/termcap.
■
Tube
A partir des commandes who et wc, calculer le nombre d'utilisateurs connectés.
who | wc -l
A partir des commandes ls, more ou de la commande pg, afficher de façon lisible le
contenu détaillé du répertoire /dev.
■
Liens et redirections
1°) A partir de l'opérateur de redirection et de la commande ls, créer un fichier liste
contenant la liste de tous les fichiers du répertoire courant.
2°) A partir de la commande ln, créer un lien matériel sur le fichier liste appelé liste2.
3°) Avec l'éditeur de votre choix, modifier le fichier liste2 et constater que cette
modification est prise en compte dans le fichier liste.
4°) A partir de la commande ls -l, constater l'existence de deux liens matériels.
5°) Supprimer le fichier liste et constater que le contenu du fichier liste2 est toujours
accessible.
6°) A partir de la commande ln, créer le lien symbolique liste3 sur le fichier liste2.
GESTION DE FICHIERS SOUS UNIX/LINUX
135
──────────────────────────────────────────────────────────────
7°) Avec l'éditeur de votre choix, modifier le fichier liste2 et constater que cette
modification est prise en compte dans le fichier liste3.
8°) A partir de la commande ls -l, constater l'existence du lien symbolique.
9°) Supprimer le fichier liste2 et constater que le fichier liste3 existe toujours mais
que son contenu n'est plus accessible.
10°) Recréer un nouveau fichier liste2 et constater qu'il est à nouveau accessible par
liste3.
■
Attributs de sécurité
1°) Déplacez vous dans l'arborescence d'Unix pour étudier les répertoires /, /etc, /usr,
/home et essayer d'y détruire des fichiers au hasard (vous n'êtes pas root quand
vous exécutez cette commande!!).
2°) Rappeler les fonctions des commandes chmod, chgrp, umask, basename, file, du,
size, od.
3°) Utiliser la commande umask pour définir le masque de création de fichiers 777.
Créer un fichier liste à partir de la commande ls -l > liste
Quels sont ses droits ?
Créer un répertoire tempo et constater ses droits. Conclusion.
4°) Refaire la question précédente avec le masque 000. Conclusion.
5°) Aller chez votre voisin et essayer de lui détruire un de ses fichiers ou répertoires
(de préférence inutile). Conclusion ?
6°) Que pensez vous du masque 022 ?
7°) A partir de la commande od, afficher un dump du fichier .bash_profile
8°) Quels sont les droits du répertoire /tmp. Essayer d'y détruire un fichier au hasard.
Conclusion ?
9°) Comment positionner le bit t sur le répertoire /tmp ?
■
Expressions régulières, recherches, tri
1°) Rechercher dans le répertoire /dev, tous les fichiers qui ne sont ni de type bloc ni
de type caractère.
find /dev ! -type b ! -type c -print
2°) Rechercher dans le répertoire /usr les fichiers non modifiés depuis 48 H.
find /usr -mtime +2 -print
3°) Rechercher dans le répertoire /etc, les fichiers ayant une taille comprise entre
10000 et 20000 octets pour afficher leurs attributs.
find /etc -size +10000c -size -20000c -exec ls -l {} \;
136
CHAPITRE V
──────────────────────────────────────────────────────────────
4°) Rechercher dans tous les fichiers du répertoire courant ceux qui contiennent la
lettre a, puis ceux qui contiennent la lettre a en premier caractère d'une ligne.
grep a *
grep "^a" *
5°) Rechercher, quand c'est possible en local, dans le fichier /etc/passwd ou dans le
fichier /etc/shadow les utilisateurs sans mot de passe. Même question dans un
environnement réseau géré avec le service NIS.
grep "^[^:]*::" /etc/shadow
ypcat passwd | grep "^[^:]*::"
6°) Afficher le fichier /etc/passwd trié selon l'ordre lexicographique inverse puis selon
le champ GID.
sort -r /etc/passwd
sort -t: +3n -4 /etc/passwd
7°) Afficher le fichier /etc/passwd trié selon le champ GID et en cas d'égalité sur le
numéro décroissant du champ uid.
sort -t: +3n -4 +2nr -3 /etc/passwd
CHAPITRE VI
GESTION DES TRAVAUX SOUS UNIX/LINUX
1.
DEFINITIONS
■
Processus sous Unix
L'image d'un processus en mémoire est l'ensemble des instructions et données
exécutables par un ordinateur dont un processus est l'exécution dynamique. Toutes les
processus s'exécutent en multiplexage temporel sur le processeur fonctionnant en
mode système (noyau, kernel) ou en mode utilisateur.
■
Mode système
Un processus en mode système exécute du code du noyau.
Plusieurs processus en mode système sont activables simultanément.
La solution adoptée par le système Unix pour respecter l'intégrité du noyau, résoudre
le problème de l'exclusion mutuelle et garantir le franchissement des sections
critiques lorsque certaines interruptions sont masquées est d'interdire la préemption
d'un processus en mode système par un autre.
La durée d'utilisation du mode système est donc limitée et sa terminaison normale se
traduit par un retour aussi rapide que possible au processus appelant.
■
Unix et le temps réel
L'exécution d'un processus en mode système étant non préemptive, la reprise d'un
traitement suite à une interruption est différée jusqu'à la fin de l'appel système
(aléatoire) en cours. Deux conséquences essentielles :
• le traitement d'une interruption pouvant être différé donc non déterministe, le
système Unix traditionnel n'a aucune vocation temps réel.
• Toute fonctionnalité du noyau d'un système d'exploitation doit être la plus courte
possible.
■
Mode utilisateur
Un processus en mode utilisateur exécute une application dans un mode non
privilégié.
Il accède sous contrôle aux ressources par des appels système (principe de
l'encapsulation).
138
CHAPITRE VI
──────────────────────────────────────────────────────────────
Exemple
Comme nous le verrons dans l'étude d'un interprète de commandes simplifié, la
création d'un processus par une commande se déroule comme suit :
• contrôle et analyse de la commande,
• création du processus fils
• exécution de la commande,
• terminaison de la commande et retour au processus appelant (l'interprète).
shell
1
2
essai
Exécution de la commande shell essai
Depuis l'interprète, on peut lancer l'exécution de plusieurs processus en parallèle qui
par définition sont ses fils.
Le niveau de priorité d'un processus utilisateur baisse selon le temps CPU consommé.
Remarque
Il ne faut pas confondre :
• mode d'exécution (système ou utilisateur),
• priorité d'exécution,
• autorisations d'exécution.
Exemples
Un processus serveur peut s'exécuter en mode non privilégié, avec des privilèges
d'administration restreints.
Un gestionnaire de mémoire est prioritaire et s'exécute en mode privilégié.
■
Changement de mode d'exécution
Trois situations provoquent la commutation du mode utilisateur au mode système :
• un appel système d'un processus utilisateur fait un appel explicite à des services
système,
• une anomalie (trap) d'exécution du processus provoque un déroutement,
• une interruption provoque l'exécution d'un traitement par le noyau.
Le passage en mode système s'effectue par une commutation matérielle de l'espace
d'adressage avec des instructions privilégiées.
GESTION DES TRAVAUX SOUS UNIX/LINUX
139
──────────────────────────────────────────────────────────────
1.1 Etats et transitions
Les transitions des modes d'exécution des processus sont les suivantes :
actif en mode utilisateur
Appel système
ou interruption
Retour d'AS
ou d'interruption
actif en mode noyau
endormi, permutation de
contexte autorisée
réveil
prêt
Graphe des transitions des modes des Processus
Les nœuds du graphe orienté des transitions des modes d'exécution d'un processus
représentent les états qu'il peut prendre et les arcs représentent les événements qui
provoquent son changement d'état. Ceux-ci sont définis quand il existe un arc d'un
état vers un autre. Plusieurs transitions sont possibles à partir d'un état donné. Au
cours de son exécution, l'état d'un processus évolue selon son degré d'avancement ou
son mode de fonctionnement.
Les principaux états sont les suivants :
SIDL
SRUN
SWAIT
SSLEEP
SUNPROC
SZOMB
SSTOP
SXBRK
le processus en cours de création est dans un état inconsistant donc
inexécutable.
le processus est en attente de sélection par l'ordonnanceur (scheduler)
donc activable.
le processus est en attente de terminaison d'un processus fils.
le processus est en attente d'événement (par exemple une attente de fin
d'entrées/sorties). Quand ce dernier se produit, le processus endormi est
rendu activable.
le processus est actif et détient la ressource processeur.
le processus est zombi car son exécution est terminée (appel système
exit). Les ressources attribuées (mémoire, disque, etc..) sont restituées.,
Avant de disparaître complètement, il transmet le contenu de certaines
variables de gestion interne (état au moment de sa terminaison, temps
CPU consommé, temps de résidence, etc.) pour information au
processus père. Il occupe encore un point d'entrée de la table des
processus (table proc), restitué dès la transmission de ces informations.
le processus est arrêté, son exécution étant contrôlée par un débogueur.
le processus est en cours de commutation de contexte.
140
CHAPITRE VI
──────────────────────────────────────────────────────────────
fork
Processus
père
SIDL
en création
wait
SZOMB
Terminé
exit
SRUN
activable
SUNPROC
actif
wakeprocs
sleep
SSLEEP
endormi
Graphe des états d'un processus
1.2 Statut et transitions
Le statut d'un processus représente sa localisation dans la mémoire (virtuelle). Il
évolue et peut être l'un des suivants :
SLOAD
SSYS
SLOCK
SSWAP
STRC
SULOCK
SPAGE
SWEXIT
SPHYSIO
chargé en mémoire, swappable,
processus système prioritaire (swapper ou démon),
chargé en mémoire centrale avant une opération de déchargement,
chargé en mémoire centrale après une opération de chargement,
processus en mode trace (sous contrôle du débogueur),
chargé en mémoire centrale, non swappable,
en attente de page,
en cours de terminaison,
opération d'entrée/sortie physique en cours.
Le couple (état, statut), caractérisant un processus à un instant donné, peut être l'un
des suivants :
1 le processus s'exécute en mode utilisateur.
2 le processus s'exécute en mode système.
3 le processus est chargé en mémoire, inactif, prêt devenir actif dès sa sélection par le
ordonnanceur.
4 le processus est endormi en mémoire.
5 le processus est déchargé, prêt à être activé. Il doit être préalablement chargé en
mémoire.
6 le processus est déchargé, endormi.
7 le processus préempté passe du mode système au mode usager.
8 le processus vient d'être crée et son état est transitoire : il n'est ni prêt ni endormi.
9 le processus se termine (appel système exit) et devient zombi (état SZOMB).
GESTION DES TRAVAUX SOUS UNIX/LINUX
141
──────────────────────────────────────────────────────────────
1
Actif en mode
utilisateur
Appel système
ou
interruption
9
zombie
exit
Retour AS
ou
d'interruption
7
préempté
2
Mode noyau
fin
sleep
4
endormi en
mémoire
swapout
wakeup
3
prêt en
mémoire
8
en cours
de création
swapout
swapin
6
endormi
swappé
wakeup
5
prêt
swappé
mémoire
insuffisante
Graphe des transitions d'un processus
2.
DESCRIPTEURS ASSOCIES A UN PROCESSUS
Un processus est décrit par les structures de données essentielles ci-dessous.
2.1 Identificateur
Un processus a deux identifiants : son pid (process id), représenté par un nombre
entier positif borné et un index dans la liste des processus.
Exemples
L'ordonnanceur (swapper) est souvent le processus 0.
Le processus init (l'ancêtre de tous les processus) est le processus 1.
A l'exception du processus 0, tous les processus sont crées à partir de l'appel système
fork.
142
CHAPITRE VI
──────────────────────────────────────────────────────────────
2.2 Liste des processus
Deux tables systèmes sont utilisées pour la gestion des processus : la table proc,
résidente en mémoire centrale, et la structure U, swappable avec le processus.
La table proc[], résidente, contient la liste de tous les processus ainsi que les
informations (vecteurs d'état) nécessaires pour en assurer la gestion. Elle est décrite
dans le fichier /usr/include/sys/proc.h. Pour chacun, on y trouve son état et son statut,
ses temps d'exécution en mode utilisateur et en mode système, son identité (pid), sa
priorité, les signaux reçus, en attente, masqués, son propriétaire, sa localisation en
mémoire, sa taille, etc. En voici quelques extraits :
■
Champs et structures utilisées par l'ordonnanceur,
addr
usrpri
pri
cpu
stat
time
nice
■
Gestion des signaux reçus
sig
sigmask
sigignore
sigcatch
■
adresse de la table des pages,
priorité de l'utilisateur propriétaire du processus f(cpu, nice),
priorité courante du processus,
durée de dernière utilisation du processeur central par le processus,
utilisé par l'appel système stat,
temps de résidence en mémoire pour le calcul de la priorité ,
utilisé pour les requêtes d'ordonnancement de l'utilisateur.
signaux suspendus en attente d'émission,
masque de comportement des signaux,
signaux ignorés,
signaux captés.
Informations statistiques
pgrp
pid
ppid
xstat
wchan
nom du processus leader de la session,
identificateur (pid) du processus,
identificateur (pid) du processus père,
exit status (appel système wait),
événement attendu par le processus.
2.3 Structure U
La structure U est l'extension de la table proc contenant les informations swappables
du processus nécessaires à son exécution. Les informations qu'elle contient sont :
• le mode d'exécution (noyau ou utilisateur),
• l'état de retour des appels systèmes,
• la table des descripteurs,
• les informations comptables et de contrôle des ressources,
• la pile d'exécution du processus.
GESTION DES TRAVAUX SOUS UNIX/LINUX
143
──────────────────────────────────────────────────────────────
2.4 La commande ps
La commande ps fournit l'état et le statut des processus actifs.
Synopsis
ps [options]
Les principales options, quelquefois différentes selon l'environnement sont :
■
BSD
a
l
u
x
System V
e
l
f
tous les utilisateurs,
forme longue,
sortie orientée utilisateur,
détache les terminaux.
Selon les options, les informations affichées sont :
■
F, indicateur du statut
01
02
04
10
20
■
STAT, indicateur d'état
0
D
S
I
W
R
Z
T
■
en mémoire,
processus système,
entrée-sortie en cours,
processus en zone d'échanges (swappé),
processus fonctionnant en mode pas à pas (trace).
inexistant,
en zone d'échanges,
en sommeil (sleep) depuis moins de 20 secondes,
en sommeil (interrupt) depuis plus de 20 secondes,
en attente de la fin d'un processus fils (wait),
en cours d'exécution (run),
terminé (zombi),
arrêté (stop).
Autres champs
uid
pid
ppid
STIME
PRI
uid de l'utilisateur propriétaire du processus,
identificateur (entier) du processus,
identificateur (entier) du processus père (créateur),
heure de démarrage du processus,
priorité courante du processus (plus ce nombre est élevé, plus la
priorité est faible),
ADDR
adresse en mémoire ou sur disque si le processus est swappé,
SZ
nombre de blocs en mémoire de l'image du processus,
WCHAN
événement attendu par le processus quand son état est S(sleep) ou
W(wait), ou <espace>,
TTY
adresse logique du terminal associé à l'exécution du processus,
TIME
temps d'exécution CPU,
COMMAND nom de la commande exécutée.
144
CHAPITRE VI
──────────────────────────────────────────────────────────────
Exemple
F
31
20
31
31
20
20
3.
S
S
S
S
S
S
S
uid
root
root
root
root
root
root
pid
0
1
2
3
449
224
ppid
0
0
0
0
1
1
C
0
0
0
0
0
0
PRI
0
39
0
20
28
26
NI
20
20
20
20
20
20
ADDR1 SZ
ded
0
254
36
256
0
258
0
275
48
3e4
88
WCHAN STIME
f0219534 Jun 30
e0000000 Jun 30
f00c215c Jun 30
f00b9074 Jun 30
f01000cc 17:43:41
f01cd8d6 17:43:14
TTY
?
?
?
?
?
?
TIME CMD
0:00 sched
0:00 init
0:00 vhand
0:00 bdflush
0:00 -ksh
0:00 /etc/cron
CREATION ET TERMINAISON DE PROCESSUS
3.1 L'appel système fork : présentation externe
La création d'un processus est réalisée par le clonage : l'image du processus fils crée
est identique à celle de son créateur, le processus père. Les différences sont le pid et
certains champs de la table proc (time, etc.)
Synopsis
pid_t fork(void);
Dans le processus père, le pid du processus fils est retourné par l'appel fork. Dans le
ce dernier, il est nul ce qui permet d'écrire la séquence traditionnelle :
n=fork();
if (n <0)
if (n==0)
else
{ /* n contient le code de retour */
{/* échec de l'appel système fork */}
{/* exécution du code du processus fils */}
{/* exécution du code du processus père */}
Cette séquence de code a la particularité de permettre l'exécution des deux
alternatives par deux processus différents : une dans le processus père et une dans le
processus fils. Son effet est le suivant :
• le processus père crée un processus fils, son clone parfait, qui a les mêmes
programmes, données, descripteurs de fichiers, et signaux (héritage) et poursuit
son exécution (cas n>0).
• le processus fils peut être modifié (code, données, etc.) sans que son créateur en
soit affecté (cas n=0).
Chacun reprend son exécution à l'instruction de retour de l'appel fork. Pour le
processus fils, c'est une illusion puisqu'il n'existait pas avant l'appel.
Si la table (statique) des processus est saturée (cas n<0), l'appel système fork ne peut
s'exécuter. Il faut alors attendre la terminaison d'un processus pour le réitérer. Quand
elle dynamique, le problème ne se pose plus.
GESTION DES TRAVAUX SOUS UNIX/LINUX
145
──────────────────────────────────────────────────────────────
3.2 L'appel système canonique exec*
Le processus fils n'ayant aucune raison de rester un clone de son créateur, le code du
père est modifié par des primitives de recouvrement (overlay) du programme désiré.
La terminaison d'un processus décrémente le nombre de liens associés au code
exécutable (text segment). Quand ce nombre est nul, la mémoire est libérée sauf en cas
d'utilisation du bit d'adhérence.
Les appels système de la forme générique exec* permettent le chargement du texte,
des données statiques et dynamiques, et de la pile d'un processus. Il en existe plusieurs
versions (execl, execv...) dont la forme canonique d'utilisation est la suivante :
if ((n = fork()) == 0) /* processus fils */
{ exec*("/.../application",...);}
Le code de retour de l'appel système fork étant nul dans le processus fils, il est seul à
exécuter l'appel système exec*.
Synopsis (forme canonique)
exec* (char *path, char *argv[], char *envp[]);
avec :
path
argv
envp
le chemin d'accès du fichier exécutable à charger.
le tableau de pointeurs sur les éventuels arguments.
l'environnement d'exécution du processus père transmit à chaque processus
fils.
L'appel système exec* recouvrant le programme appelant, il est nécessaire d'enchaîner
les appels fork et exec*, d'où la séquence :
code du processus père
int main()
...
/* création du processus fils */
if ((n = fork())==0) exec*(...);
■
Données limites d'exécution d'un processus
Les paramètres limites sont accessibles avec la commande ulimit.
Exemple
ulimit -a
core file size (blocks)
data seg size (kbytes)
file size (blocks)
max memory size (kbytes)
stack size (kbytes)
CPU time (seconds)
max user processes
pipe size (512 bytes)
open files
virtual memory (kbytes)
1000000
unlimited
unlimited
unlimited
8192
unlimited
256
8
256
2105343
146
CHAPITRE VI
──────────────────────────────────────────────────────────────
3.3 L'appel système exit
Appel système de terminaison d'un processus (explicite ou implicite) quand il se
termine. Il n'a jamais de retour.
Le noyau peut aussi l'invoquer à la réception d'un signal inattendu. La valeur retournée
par la variable exit_status alors est le numéro du signal correspondant.
Synopsis
void exit(int exit_status);
Description
La variable d'état exit_status est retournée au processus père.
Proc essus p ère
Proc ess us fil s
ZO MBI
p _c pu
. ..
p _time
. ..
pid
ppid
p_ cp u
p_time
p_xstat
Transmission des variables d'état entre processus père/fils
4.
SYNCHRONISATION DE PROCESSUS
■
Exécution synchrone ou asynchrone des processus père/fils
Plusieurs choix d'exécution sont possibles au lancement d'une nouvelle tâche : cette
dernière peut être exécutée en mode interactif (les processus père et fils s'exécutant en
mode synchrone) ou en mode différé (le processus fils est une tâche de fond
s'exécutant en mode asynchrone).
Dans les environnements Unix/Linux, le mode interactif est appelé mode foreground
(tâche de devant), le mode différé mode background (tâche de derrière).
■
Appel système et primitives
Le programmeur gère la prise en compte d'événements dans ses applications par les
appels systèmes présentés ci-après, la synchronisation des processus par le système
d'exploitation étant effectuée par des primitives de bas niveau du noyau (par exemple
sleep et wakeprocs), encapsulées dans ce dernier.
GESTION DES TRAVAUX SOUS UNIX/LINUX
147
──────────────────────────────────────────────────────────────
■
L'appel système wait
• Suspend à sa demande l'exécution d'un processus jusqu'à la terminaison d'un
processus fils.
• Le processus père appelle l'ordonnanceur avant de s'endormir. Il ne reprend son
exécution que lorsqu'un processus fils exécute une primitive exit.
• Ce mode de fonctionnement définit un processus interactif.
Exemple : création d'un processus applicatif
if ((n = fork()) == 0)
{/* processus fils */
exec*("/bin/application",...); exit(1);
}
/* processus père */ while (wait(&status) != pid);
■
La commande wait
La commande wait permet de synchroniser deux processus, le processus l'exécutant
attendant la terminaison de tous les processus fils pour poursuivre son exécution.
Synopsis
wait [pid]
■
La commande sleep
Suspend l'exécution d'un processus pendant une durée définie en seconde.
Synopsis
sleep durée_en_secondes
5.
SIGNAUX
■
Définition
Un signal représente un événement d'origine matérielle (interruption) ou logicielle
(déroutement ou exception) notifié au processus pouvant provoquer l'exécution d'une
procédure prédéfinie dans le système d'exploitation ou le processus lui-même. Ainsi,
le noyau peut communiquer avec les processus en cas d'erreur (violation protection
mémoire, erreur d'entrées/sorties, etc.) ou des processus utilisateurs peuvent
communiquer entre eux.
Voici la liste des signaux les plus usuels, chacun étant associé à un identificateur
symbolique (quelquefois précédé des lettres SIG) et un nombre (Id) :
148
CHAPITRE VI
──────────────────────────────────────────────────────────────
Nom
HUP
Id
Rôle
1
Signal de fin de session, émis à tous les processus associés à un
terminal, lorsque celui-ci est déconnecté.
INT
2 Signal d'interruption de l'exécution d'un processus (Ctrl C).
QUIT
3* Identique au signal INT avec la génération d'un fichier core.
ILL
4* Instruction illégale.
TRAP
5* Emis après l'exécution de chaque instruction, quand le processus
fonctionne sous le contrôle d'un débogueur (mode trace).
IOT
6* Problème matériel.
EMT
7 Emulateur trap.
FPE
8* Erreur d'exécution d'une instruction sur des nombres flottants.
KILL
9 Meurtre d'un processus dont on est propriétaire.
BUS
10* Erreur matérielle sur le bus.
SEGV
11* Violation de la protection mémoire (segmentation ou pagination).
SYS
12* Appel système invalide.
PIPE
13 Ecriture sur un tube sans lecteur ou erreur sur une prise de
communication.
ALRM
14 Signal généré par l'horloge temps réel, utilisé par les primitives sleep,
alarm, setitimer pour définir des temporisations.
TERM
15 Terminaison normale d'un processus.
USR1
16 Signal à la disposition des utilisateurs.
USR2
17 Signal à la disposition des utilisateurs.
CCHLD 18 Terminaison d'un processus un fils.
PWR
19 Coupure de l'alimentation électrique.
WINCH 20 Modification de la taille d'une fenêtre.
URG
21 Information urgente sur une prise de communication (socket).
POLL
22 Entrée/sortie asynchrone sur un périphérique de type stream.
STOP
23 Suspension d'un processus.
TSTP
24 Suspension d'un processus depuis le terminal.
CONT
25 Redémarrage d'un processus suspendu.
TTIN
26 Lecture d'un terminal en mode background.
TOU
27 Ecriture d'un terminal en mode background.
XCPU
30 Limite de temps CPU dépassée.
XFSZ
31 Limite de taille de fichier atteinte.
• La liste des signaux implémentés est accessible à partir de la commande kill -l
• Les signaux dont le numéro est suivi par * génèrent un fichier image du processus
(core), image de sa mémoire à l'émission du signal.
• Le signal de meurtre (KILL), émis par le propriétaire du processus ou
l'administrateur, est le seul qu'on ne puisse ni ignorer, ni traiter par une fonction.
■
Application : signal de fin d'une session
Tous les processus d'un utilisateur qui se déconnecte sont tués (signal HUP). Ce choix
assure la bonne gestion du système en l'empêchant d'être une poubelle.
La commande nohup lance un travail différé (background) avec requête explicite de
non prise en compte du signal HUP à la déconnexion.
GESTION DES TRAVAUX SOUS UNIX/LINUX
149
──────────────────────────────────────────────────────────────
5.1 Emission de signaux
■
Commande kill
La commande kill émet un signal donné à un processus.
Synopsis
kill -identificateur_signal pid_du_processus_destinataire
kill -num_signal pid_du_processus_destinataire
Exemple
L'une des commandes :
kill -KILL 2383
kill -9 2383
#normalisé
#dépend de l'implémentation
provoque la mort du processus dont le pid est 2383.
■
Appel système kill
Emission d'un signal vers un processus.
Synopsis
int kill(int pid, int signum)
Description
Emission du signal signum au (groupe de) processus identifié par pid et à tous ses fils.
5.2 Réception de signaux
■
Comportement par défaut des processus à réception d'un signal donné
Le comportement d'un signal non masquable tel KILL ne peut être ni ignoré ni
modifié par le processus destinataire. Celui d'un signal masquable peut l'être
(commande interne trap).
Synopsis
trap [argument] identificateur_du_signal
Description
""
•
'commande'
signal reçu ignoré,
comportement par défaut du signal à redéfinir,
commande ou fonction à exécuter à réception du signal.
Exemple
trap 'rm /tmp/fichier; exit' INT QUIT
150
CHAPITRE VI
──────────────────────────────────────────────────────────────
6.
ORDONNANCEMENT
6.1 L'algorithme du tourniquet
La priorité d'un processus est recalculée chaque seconde par un algorithme de type
tourniquet (round robin) à plusieurs niveaux de recyclage : un processus d'une classe
de priorité donnée est dans une file d'attente gérée en mode FIFO, le processus le plus
prioritaire étant le premier de la file. L'unité centrale lui est allouée pour une tranche
de temps (slice) au plus. Il passe en queue de file après.
■
Classes de priorité
Le groupe temps réel
Les processus temps réel sont les plus prioritaires.
Le temps de réponse est garanti par des points de préemption dans le noyau.
Les priorités restent fixes.
Un processus temps réel en cours d'exécution est ininterruptible.
Le groupe système
Les processus systèmes sont moins prioritaires que les processus temps réel et plus
prioritaires que les processus en temps partagé.
Le groupe temps partagé
Ce groupe correspond au mode de fonctionnement traditionnel d'Unix/Linux.
6.2 Calcul de la priorité (Unix BSD)
La priorité du processus est une fonction décroissante du temps.
■
Priorité d'un processus actif
Les champs p_usrpri, p_nice, p_cpu (table proc) sont utilisés de la façon suivante : le
champ p_usrpri, borné par 127, est recalculé tous les quatre quantas par la formule :
p_usrpri = PUSER + 0.25 p_cpu + 2 p_nice
PUSER est le niveau de priorité du processus.
La variable p_cpu est un estimateur de l'utilisation récente du CPU par le processus.
Incrémenté à chaque tic d'horloge, il tient compte du nombre moyen de travaux en
attente par la formule :
p _ cpu =
2load
p _ cpu + p _ nice
2load + 1
La variable p_nice est nulle par défaut.
L'administrateur peut la modifier (valeur comprise entre -20 et +19).
Un utilisateur ne peut la modifier que pour ses processus avec la condition p_nice ≥ 0
ce qui les rend moins prioritaires.
GESTION DES TRAVAUX SOUS UNIX/LINUX
151
──────────────────────────────────────────────────────────────
■
Réveil
La priorité au réveil est recalculée par la formule :
p _ cpu = p _ cpu
■




2load  p _ spltime

2load + 1 
Niveaux de priorité
Les niveaux de priorité suivants sont prédéfinis :
Niveaux
PSWP
PINOD
PRIBIO
PZERO
PPIPE
PWAIT
PLOCK
PSLEEP
PUSER
PIDLE
valeur
0
10
20
25
26
30
35
40
50
127
description
priorité au cours d'un swap,
attente d'informations pour lecture et écriture d'inode,
attente d'une fin d'entrées/sorties bloc sur le disque,
priorité de base de prise en compte des signaux,
utilisé pour la gestion du tube,
priorité de base d'attente de ressources,
priorité de base attente de ressources verrouillées,
priorité de base d'attente d'événement,
priorité minimale d'un processus en mode usager,
priorité d'un processus oisif.
Un processus dont la priorité est inférieure à PZERO peut être indifférent à certains
signaux qu'il peut masquer ou ignorer.
Un processus dont la priorité est comprise entre PZERO et PUSER est sensible aux
signaux.
■
L'horloge temps réel
Le temps CPU est comptabilisé à partir de l'horloge temps réel de très haute priorité.
La primitive associée a pour fonction de :
• réveiller périodiquement l'ordonnanceur (processus swapper ou sched) pour éviter
qu'un processus ne bloque indéfiniment le processeur central,
• gérer la table d'activation des processus,
• incrémenter les compteurs de gestion du temps,
• réveiller les gestionnaires de la mémoire,
• émettre des signaux en instance aux processus destinataires,
• réveiller le dispatcher.
152
CHAPITRE VI
──────────────────────────────────────────────────────────────
6.3 Sections critiques
Le masquage des interruptions est réalisé par les primitives de bas niveau gpl (get
priority level) et spl* (set priority level).
L'écriture d'une section critique s'effectue comme suit :
it = gpl();
spl*(CLIN);
...
spl*(it);
it stocke le niveau d'exécution courant
masquage des interruptions entrées/sorties
exécution des instructions en section critique
restauration du niveau d'interruption initial
Il existe plusieurs primitives de masquage d'interruptions, dont le comportement est
fonction de l'implémentation.
spl0
spl1
spl6
spl7
spltty
splstr
toutes les interruptions sont valides
masquage des interruptions horloge logicielles
masquage des interruptions d'ordonnancement
masquage de toutes les interruptions
masquage des interruptions issues d'un terminal
masquage de protection du mode stream.
La primitive splx restaure le niveau masqué par une des primitives précédentes.
Dans l'exemple suivant, CLIN est le niveau d'interruption immédiatement supérieur
aux interruptions caractères issues d'une console de type TTY.
it = gpl();
spl*(CLIN);
...
it stocke le niveau d'exécution courant
Déroulement de la section critique du pilote mode caractère
...
spl*(it);
retour au niveau d'interruption initial
6.4 Commutation de processus
■
Situations
La commutation de processus s'effectue lors des situations suivantes :
• dépassement de la tranche de temps,
• déroutement,
• mise en sommeil suite à une requête non satisfaite,
• commutation quand un processus plus prioritaire est éligible. Un processus
exécutant un appel système en finit néanmoins l'exécution ce qui est non
déterministe.
GESTION DES TRAVAUX SOUS UNIX/LINUX
153
──────────────────────────────────────────────────────────────
Exemple
Les lignes épaisses indiquent le mode d'exécution courant. Les lignes fines indiquent
le processus concerné par la séquence temporelle.
MODE UTILISATEUR
Processus A
Processus B
MODE NOYAU
Appel système
Interruption
plus prioritaire que A
Appel système
Commutation de
contexte
sleep(événement_à_attendre)
Appel système
dans le processus A
Interruption
vers le processus B
Indéterminé
Commutation de
contexte
Fin de l'appel système
de A
Prise en compte
de l'interruption
Fin de l'appel système
de B
La table proc, la table des segments constituant le contexte système d'un processus,
pour changer de processus actif, il suffit de changer le pointeur sur le processus
courant et le pointeur sur le segment de code (table text).
La pile d'exécution est sauvegardée à chaque commutation en mode noyau. Elle
contient la structure U, les registres généraux, le compteur ordinal, les registres de
base, les registres pointeur de piles (système et usager) et les registres d'état.
154
CHAPITRE VI
──────────────────────────────────────────────────────────────
■
Sauvegarde et restauration de contextes
Les primitives de sauvegarde (save) et de restauration du contexte (resume) sont
utilisées ainsi :
continue(p)
save
resume
return
p : processus montant
sauvegarde du contexte du processus descendant
restauration du contexte du processus montant
dans le contexte du processus montant
Trois cas d'utilisation du couple (save, resume) :
• réception de signaux : le processus conserve le processeur la réception du signal
étant suivie d'une restauration de contexte.
• le contexte du processus est sauvegardé avant la perte du processeur.
• le processus libère explicitement le processeur.
Le champ p_swaddr (table proc) est l'adresse sur le fichier d'échanges de la structure
U du processus montant et précise le contexte à restaurer.
La visibilité change le programme montant s'exécutant comme un retour de procédure.
Les primitives save et resume sont implémentées quelquefois par les primitives de bas
niveau setjmp, longjmp.
Le chargement d'un processus dans un segment de la mémoire autre que celui
sauvegardé nécessite la modification de son domaine de visibilité (section critique).
■
Commutation de processus
Une commutation de processus commence son exécution dans le processus qui
s'endort et la termine dans le processus qui se réveille.
Algorithme
sauvegarde du contexte du processus courant
Tant que (aucun processus sélectionné)
pour (tous les processus activables) sélection du processus le plus prioritaire
Fin tant que
suppression du processus élu de la file d'attente
restauration du contexte du processus élu
■
Commutation de contexte de thread
Les appels système getcontext et setcontext ont été implémentés pour permettre la
commutation de contexte entre deux unités d'exécutions (thread) d'un processus.
GESTION DES TRAVAUX SOUS UNIX/LINUX
155
──────────────────────────────────────────────────────────────
7.
CONTROLE DE L'EXECUTION DES PROCESSUS
7.1 Changement du mode d'exécution d'un processus
■
Modes d'exécution
Un processus peut être exécuté :
• en mode interactif ou mode foreground (tâche d'avant plan). C'est le mode par
défaut,
• en mode différé ou mode background (tâche d'arrière plan), avec l'opérateur &.
• être suspendu pour être relancé.
■
Référence aux processus
Un processus peut être référencé :
• à partir du caractère % (numéro relatif obtenu à partir de la commande jobs),
• par son identificateur (pid) dans la liste des processus,
• par son nom.
■
Changements de mode d'exécution
Les interprètes bash, C shell et Korn-shell permettent de contrôler le mode
d'exécution d'un processus dont les changements d'état sont :
• sa suspension,
• sa mise en mode foreground,
• sa mise en mode background,
• sa terminaison.
■
Suspension d'un processus
L'arrêt immédiat d'un processus s'exécutant en mode foreground s'effectue par la
commande ^Z (CTRL Z).
■
Passage en mode interactif
Le passage de l'arrière plan à l'avant plan d'un processus s'effectue par la commande
interne fg (foreground).
Synopsis
sur le processus courant
à partir du pid de processus
à partir du numéro de processus
à partir du nom du processus
fg
fg pid_processus,
fg %numéro_relatif_processus,
fg %identificateur_du_processus
156
CHAPITRE VI
──────────────────────────────────────────────────────────────
■
Passage en tâche de fond
Le passage de l'avant plan à l'arrière plan d'un processus s'effectue :
sur le processus courant
bg
à partir du numéro de processus bg %numéro_relatif_processus
à partir du nom de processus
bg %nom_du_processus
■
Terminaison d'un processus
La terminaison d'un processus est forcée avec la commande kill.
Synopsis
kill [-identificateur_du_signal] pid_du_processus
kill [-identificateur _du_signal] %numéro_du_processus
kill [-identificateur _du_signal] %nom_du_processus
Le signal de meurtre est celui par défaut.
Exemples
kill 345
kill -INT 346
kill %1
kill %boucle
■
Graphe de changement d'état
Les changements d'état évoluent selon le graphe suivant :
jobs
Mode foreground
CTRL Z
fg
fg
jobs
Mode suspendu jobs
bg
Mode background
7.2 Commandes de contrôle d'exécution
■
Commande nohup
• Ignore certains événements associés à la gestion des terminaux (coupure de ligne,
fin de session).
• Exécution d'une commande pouvant se poursuivre après une déconnection.
Synopsis
nohup commande [option(s)][argument(s)] &
GESTION DES TRAVAUX SOUS UNIX/LINUX
157
──────────────────────────────────────────────────────────────
■
Commande killall
Termine tous les occurences de la commande lancée par l'utilisateur qui l'exécute.
Synopsis
killall identificateur_commande_à_supprimer
■
Commande lastcomm
Affichage de toutes les commandes exécutées dans leur ordre inverse d'exécution. Ne
peut être utilisée que si la comptabilité (système) est active.
Synopsis
lastcomm [commande]
■
Commande nice
Modification de la priorité d'un processus. Le nombre n positif rend un processus
moins prioritaire. Négatif, il le rend plus prioritaire (réservé à l'administrateur).
Synopsis
nice -n commande
Exemple
nice –20 ./boucle&
■
Commande renice
La commande renice permet de modifier la priorité d'un processus déjà démarré avec
les mêmes règles que celles de la commande nice.
Exemple
renice 20 23561
8.
GESTIONNAIRES DE MEMOIRE
8.1 Echanges, pagination, segmentation
■
Gestion de la mémoire centrale
Le noyau et la table des processus résident en mémoire RAM, le reste de la mémoire
étant alloué aux processus actifs.
Différents processus de gestion mémoire :
• assurent la conversion de l'adresse virtuelle en adresse réelle et la synchronisation
de la gestion des pages,
• définissent les limites de l'espace mémoire utilisable par un processus et le nombre
maximum de processus.
Tout processus dispose de ses tables des pages.
158
CHAPITRE VI
──────────────────────────────────────────────────────────────
■
Echanges de processus (swap)
Les opérations de chargement et déchargement s'effectuent à la demande du processus
ou du noyau par le fournisseur du service (swapper).
Le fichier d'échanges est géré par groupement de blocs et sans cache et n'est pas
structuré en système de fichiers.
La stratégie d'échanges est définie par l'ordonnanceur : sélection en mémoire du
processus le moins prioritaire, si possible endormi pour déchargement, sélection en
zone d'échanges du processus le plus prioritaire (statut non(SLOAD) et état SRUN)
pour chargement.
L'opération de déchargement transfère table des pages, pages de données et segments
de pile du processus élu de la mémoire centrale en zone d'échanges (un segment
partagé reste en mémoire). Elle se produit dans les situations suivantes :
• clonage d'un processus,
• extension de la taille des données ou de la pile d'un processus,
• requête du noyau pour charger un processus plus prioritaire,
• saturation du gestionnaire de pages,
• fragmentation de la table des pages empêchant l'allocation éventuelle de pages,
• inactivité d'un processus actif pendant plus de vingt secondes.
La priorité du processus rechargé est calculée à partir de la durée pendant laquelle il a
été échangé, sa taille, sa valeur nice. Après sélection du processus, le noyau vérifie
qu'il y a suffisamment de mémoire pour charger structure U, table des pages et pages
constituant son espace vital.
L'allocation d'espace sur le fichier d'échanges est réalisée par blocs contigus par un
algorithme de type First Fit, compacté pour éviter la fragmentation à sa libération.
L'augmentation de la taille et du nombre des processus nécessite d'augmenter les
zones d'échanges ce qui est possible dynamiquement (commandes swap, swapon, et
swapoff). La pagination et la gestion des fichiers d'échanges de stations sans disque
étant effectuées sur le réseau, une mémoire centrale importante en minimise la charge.
■
Pagination
La pagination est assurée par le gestionnaire de pages (pagedaemon). Différentes
tables sont nécessaires :
• Les tables des pages virtuelles décrivent les pages, en zone d'échanges ou en
mémoire, utilisées par un processus.
• Les tables du cadre de pages ou encore table des pages inversées décrivent les
pages de la mémoire réelle, en assurant la correspondance entre les pages virtuelles
et la table du cadre des pages réelles. Sur certains systèmes, un cache associatif
(Translation Lookaside Buffer - TLB) accélère la recherche des pages réelles.
GESTION DES TRAVAUX SOUS UNIX/LINUX
159
──────────────────────────────────────────────────────────────
Le principe de localisation est utilisé pour le chargement des grappes de pages
(clusters) par anticipation. Le choix des victimes est déterminé selon l'algorithme du
voleur de cycles ou celui de la double chance (clock et double clock).
Un nombre de pages disponibles inférieur à un certain seuil active le gestionnaire de
changement de pages (algorithme LRU). Dès que le défaut de pages est trop élevé, le
processus d'échanges est activé.
■
Segmentation
L'espace d'adressage virtuel d'un processus est divisé en régions (segment), une région
étant une zone continue de l'espace d'adressage virtuel. Des accès simultanés à une
région permettent d'exécuter un code unique ou de partager des données communes.
La table des régions, gérée à partir des listes des régions disponibles et actives,
contient un point d'entrée pour chaque région active.
Le code (text segment), les données (data segment), et la pile d'un processus (stack
segment) constituent trois régions distinctes.
Il y a en outre les régions associées aux fichiers projetés en mémoire, les régions de
mémoire partagée, les régions associées aux bibliothèques partagées.
La protection et le partage d'une région de code par plusieurs processus (accès
uniquement en lecture) sont réalisés par des mécanismes matériels.
■
Fichiers projetés en mémoire
L'inclusion totale ou partielle d'un fichier dans l'espace adressable d'un processus
(appel système mmap) permet d'effectuer les entrées/sorties directement en mémoire.
8.2 Communications en mémoire
Des processus peuvent partager des informations dans une zone de mémoire
commune (mémoire partagée) ou échanger des messages en mode asynchrone, les
accès aux informations étant gérés par des sémaphores. Ces outils basés sur
l'architecture client/serveur constituent les mécanismes de communications entre
processus (Inter-Process Communication - IPC).
■
Propriétés communes des IPC
Un type d'IPC est décrit par une structure dont les champs en décrivent les propriétés.
Tout point d'entrée d'une table contient les identifiants (uid, gid) des processus
créateur et propriétaire, des drapeaux d'accès (lecture, écriture, exécution) similaires à
ceux des fichiers, des informations sur l'état de l'IPC telles les identifiants du dernier
processus à y avoir accédé ainsi que les heures du dernier accès et de la dernière mise
à jour. Les processus créateur et propriétaire peuvent modifier les droits. Le processus
créateur est inamovible.
Un appel système de contrôle spécifique à chaque IPC permet de faire des requêtes
d'état d'une information ou de supprimer une entrée de la table. Les appels systèmes
relatifs aux différents IPC ont une forme d'utilisation voisine.
160
CHAPITRE VI
──────────────────────────────────────────────────────────────
Exemple
Création
Contrôle
message
msgget
msgctl
mémoire partagée
shmget
shmctl
sémaphore
semget
semctl.
Les processus serveur et client utilisent un chemin d'accès et un descripteur
numérique de l'IPC uniques pour que la clé d'accès à l'IPC soit unique.
Il y a une analogie entre les descripteurs numériques de chaque IPC et les
descripteurs logiques de fichiers.
■
Mémoire partagée
Plusieurs processus peuvent communiquer directement en lisant ou en écrivant des
données dans une région de mémoire partagée, zone commune de leur espace
d'adressage virtuel respectif. Une clé d'accès lui est associée à sa création lui
permettant d'être ensuite attachée au processus utilisateur et intégrée à son espace
d'adressage virtuel. Après utilisation, le processus la détache de son espace
d'adressage. Il ne peut la détruire que s'il est le dernier processus à lui être attaché et
s'il en a le privilège.
La gestion des sections critiques en écriture dans les zones de mémoire partagée doit
être faite au niveau applicatif (sémaphores).
Le mécanisme de mémoire partagé est très performant car il ne nécessite pas la
recopie des données partagées entre processus.
■
Sémaphores
Un processus peut créer un ensemble de sémaphores, accessibles par leur
identificateur et une clé d'accès et réaliser les opérations P et V.
■
Messages
Les queues (files) de messages permettent la communication indirecte de processus
asynchrones par une gestion de boites à lettres suivant le modèle des lecteurs et des
rédacteurs. Quand un processus crée une file de messages, il en définit la clé d'accès
dont la connaissance est nécessaire pour l'émission ou la réception de messages.
Chaque message est typé par l'utilisateur de façon à éviter les conflits d'accès.
Un processus ne peut accéder à une file que s'il en possède les droits d'accès,
identiques à ceux des fichiers.
■
Quelques processus et commandes de gestion de la mémoire
swapper, swap (ordonnanceur), update, sync (gestionnaire du cache-logiciel)
pagedaemon, vpage (gestionnaire de page), ramdisk (disque virtuel en mémoire)
ipcs affichage des IPCs utilisés. Les options q (message queues), m (shared memory),
s (semaphores) affichent la table correspondante. Les options b,c,p,t,a consultent la
structure ipc_perm, utilisée pour supprimer des canaux d'IPC.
GESTION DES TRAVAUX SOUS UNIX/LINUX
161
──────────────────────────────────────────────────────────────
9.
EXERCICES
9.1 Commande ps
1°) Afficher la liste des processus de la fenêtre courante.
2°) Afficher la liste de tous les processus actifs.
3°) Afficher la liste des processus d'un utilisateur donné (par exemple root).
4°) Afficher la liste des processus actifs avec le maximum de renseignements.
9.2 Gestion des modes d'exécution (commandes bg &fg)
Exécuter le § 1a) ou le §1b) selon les outils dont vous disposez.
1a) Avec l'éditeur de votre choix, écrire le script glouton suivant :
#!/bin/bash
# remplacer éventuellement bash par ksh
while [ vrai ]
do
:
done
Rendre le script exécutable avec la commande :
chmod +x glouton
1b) Avec l'éditeur de votre choix, éditer le programme glouton.c suivant :
int main()
{for(;;);}
Créer le fichier exécutable glouton par la commande :
make glouton
2°) Exécuter le processus ./glouton en mode interactif (foreground) puis, dans une
autre fenêtre, l'identifier à partir de la commande ps.
3°) Gérer le processus associé à la commande glouton à partir de la commande kill
par émission des signaux de fin de session HUP, d'interruption QUIT, d'assassinat
KILL, d'erreur d'exécution BUS. Conclusions.
4°) Même question avec la commande xeyes& dont les yeux suivent la souris dans
son mouvement.
5°) Lancer l'exécutable ./glouton puis modifier son mode d'exécution en mode différé
à partir des signaux de contrôle ou à partir des commandes fg, bg, jobs.
6°) Même question en mode graphique avec l'applicatif xeyes&. On s'attachera à
contrôler finement le mouvement des yeux.
7°) Lancer plusieurs occurences du shell-script ./glouton, certaines précédées de la
commande nohup. Se déconnecter et se connecter à nouveau. A partir des
commandes ps et grep, rechercher les éventuelles occurences de la commande
glouton. Conclusion ?
162
CHAPITRE VI
──────────────────────────────────────────────────────────────
8°) Soit le script signal
#!/bin/bash
trap "" INT QUIT
while [ vrai ]
do
:
done
Lancer ce script pour interpréter le comportement des signaux INT, QUIT sur ce
dernier.
9°) Lancer plusieurs occurences du programme glouton (ou de la commande xeyes)
puis, après vérification de sa syntaxe dans le manuel, la commande killall opérant
sur ces dernières. Conclusion.
9.3 Gestion des priorités
Modifier les priorités d'exécution d'un processus glouton à partir des commandes nice
puis renice.
CHAPITRE VII
LES INTERPRETES DE COMMANDES KORN
SHELL ET BASH
1.
GENERALITES SUR LES INTERPRETES DE COMMANDES
1.1 Fonctionnalités
■
Rôle d'un interprète
Un interprète de commandes fournit une interface d'accès en mode caractère au noyau
du système Unix.
Il effectue l'analyse syntaxique d'une commande par examen des mots et caractères la
constituant pour en déterminer les options, les arguments et les caractères spéciaux.
En cas de succès, il charge ladite commande pour exécution avec ses arguments et
variables d'environnement dans un processus fils.
■
Conception
L'interprète Korn shell a été conçu et développé par David Korn.
C'est un langage de programmation complet, puissant, complexe d'utilisation
Il intègre les fonctionnalités des interprètes historiques standards d'Unix, le shell de
Bourne (Steve Bourne) et le C shell (Bill Joy).
L'interprète bash (Bourne Again shell) est le frère jumeau du Korn shell. C'est le
standard actuel, compatible ascendant avec le shell de Bourne et intégrant les
fonctionnalités conviviales du C shell.
164
CHAPITRE VII
──────────────────────────────────────────────────────────────
■
Alias
L'utilisateur peut personnaliser ses commandes avec des noms abrégés appelés alias.
■
Historique de la pile de commandes
La pile de commandes permet de rappeler et modifier une commande.
L'interprète gère un journal historique dans le répertoire de travail.
■
Gestion des travaux
Changement du mode d'exécution d'un processus (interactif et différé).
Affichage d'un message quand un travail d'arrière plan s'achève.
Exemple
Un interprète simplifié en langage C est présenté à la fin du présent chapitre.
1.2 Le shell, langage de programmation
Le shell est procédural et offre les fonctionnalités suivantes :
• Opérations arithmétiques sur des nombres entiers.
• Opérateurs logiques et relationnels.
• Opérations sur les chaînes de caractères : gestion des sous chaînes, concaténation,
conversion majuscules/minuscules, etc.
• Variables entières typées et tableaux (commande typeset).
• Structures de contrôle (boucles et tests).
• Sélection par menus (commande select).
• Fonctions et procédures (récursives).
• Gestion de variables locales et exportées.
• Gestion de travaux en avant et arrière plan.
• Facilité de mise au point (mode trace)
• Gestion de plusieurs niveaux de sécurité :
◊ Lancement et désactivation de scripts privilégiés.
◊ Exécution de script sans permission de lecture.
• Gestion des claviers nationaux avec des alphabets constitués éventuellement de
plus de 256 caractères (gestion des caractères multilingues sur 24 bits).
LES INTERPRETES DE COMMANDES KORN SHELL ET BASH
165
──────────────────────────────────────────────────────────────
2.
GESTION DES PROFILS
2.1 Profil
Après la connexion (login), l'interprète exécute successivement les scripts /etc/profile
puis .profile (répertoire de travail).
■
Le script /etc/profile
Maintenu par l'administrateur pour y définir des opérations de connexions communes
à l'ensemble des utilisateurs, il permet en particulier :
• d'afficher le message du jour (fichier /etc/motd (message of the day)),
• de notifier à l'utilisateur qu'il a du courrier en instance,
• de définir un environnement commun à l'ensemble des utilisateurs,
• de définir un masque de protection par défaut pour l'ensemble des utilisateurs.
■
Le script .profile (répertoire de travail)
Ce script permet à chacun de personnaliser son environnement (lecture du courriel,
gestion du bureau, etc.). Il contient des variables prédéfinies, utilisées implicitement
ou explicitement pendant une session.
2.2 Alias
■
Principe
L'alias est un identificateur abrégé d'une commande.
■
Création
Synopsis
alias identificateur_alias='texte_de_l'alias'
Sans argument, la commande affiche la liste des alias disponibles.
Exemple
alias ll='ls -l'
■
Exportation aux scripts fils (Korn shell)
Un alias peut être local au processus courant (défaut) ou exportable aux processus fils.
Synopsis
alias –x nom_de_l'alias='texte_de_l'alias'
■
Suppression
Synopsis
unalias identificateur_alias
166
CHAPITRE VII
──────────────────────────────────────────────────────────────
■
Alias internes
Les alias internes de l'interprète sont les suivants (Korn shell) :
alias autoload=typeset -fu
alias functions=typeset -f
alias history=fc -l
alias integer=typeset -i
alias r=fc -e alias stop=kill -STOP
alias suspend=kill -STOP $$
En bash, on trouve les alias suivants :
alias cp='cp -i'
alias d='ls'
alias l='ls'
alias la='ls -A -k'
alias ll='ls -l'
alias ls='ls --color=auto -F'
alias lsd='ls -d */'
alias md='mkdir'
alias mv='mv -i'
alias p='cd -'
alias rd='rmdir'
alias rm='rm -i'
alias s='cd ..'
■
Alias communs en Korn shell et bash
alias
history
unalias
■
■
Affichage de la liste des alias courants.
Affichage de la liste des 14 dernières commandes précédemment exécutées.
Suppression d'un alias.
Rappel d'une commande (Korn shell puis bash)
r
r 378
rv
r -2
Rappel puis exécution de la dernière commande.
Rappel puis exécution de la commande 378.
Rappel puis exécution de la première commande commençant par v.
Rappel puis exécution de l'avant dernière commande.
!!
!378
!v
!-2
Rappel puis exécution de la dernière commande.
Rappel puis exécution de la commande 378.
Rappel puis exécution de la première commande commençant par v.
Rappel puis exécution de l'avant dernière commande.
Edition d'une commande antérieure (Korn shell)
Les éditeurs de textes (emacs, vi, etc.) sont accessibles en mode commande en
définissant la variable d'environnement correspondante (commande set) :
set -o vi
set -o emacs
■
pour l'appel de l'éditeur vi,
pour l'appel de l'éditeur emacs.
Commande echo
La commande echo affiche ses arguments sur la sortie standard. L'option n les
imprime sans le caractère de fin de ligne.
LES INTERPRETES DE COMMANDES KORN SHELL ET BASH
167
──────────────────────────────────────────────────────────────
2.3 Complément sur les caractères spéciaux
De nouveaux caractères spéciaux sont utilisés dans les situations suivantes :
• commentaires dans les scripts : le caractère # introduit un commentaire jusqu'à la
fin de la ligne, sauf quand il est suivi d'un point d'exclamation. Dans ce cas, il
indique l'interprète de commande à utiliser dans le shell script.
• délimiteurs de chaînes de caractères " ' `
• séparateur dans une liste de commandes ;
• opérateurs de redirection et tube < << > >> |
• séparateur des mots d'une commande (caractère d'espacement par défaut, défini
dans la variable IFS)
• définition du mode d'exécution différé d'un processus & (mode background), etc.
■
La macro $
Synopsis
$variable
Description
Affichage du contenu de la variable.
Exemple
a=bonjour
echo $a
bonjour
■
Quotes simples
Le (couple de) caractères quotes simples ' utilise les règles suivantes :
• Toute chaîne de caractères (y compris les caractères d'espacement) entre deux
quotes simples est considérée comme un argument de la commande.
• Le mécanisme d'expansion des caractères spéciaux entre les quotes simples est
inopérant.
• Il n'y a de substitution ni des variables ni des commandes. La substitution de la pile
de commande s'y effectue.
■
Doubles quotes
Le (couple de) caractères double quotes " utilise les règles suivantes :
• Toute chaîne de caractères (y compris les caractères d'espacement) entre deux
doubles quotes est considérée comme un argument de la commande.
• Le mécanisme d'expansion des caractères spéciaux entre les doubles quotes est
inopérant.
• Les substitutions de variables, de commandes et de substitution d'historique
s'effectuent.
168
CHAPITRE VII
──────────────────────────────────────────────────────────────
■
Backquote
Le (couple de) caractères `(backquote) utilise les règles suivantes :
• Les commandes entre deux backquotes sont exécutées.
• Il y a substitution des commandes exécutées par leur résultat.
Exemple
Exécuter les commandes suivantes :
echo date
echo "date"
echo 'date'
echo `date`
echo "`date`"
echo "La date d'aujourd'hui est `date`"
echo "toto* r"
echo "toto* !!"
echo $(date)
echo "$(date)"
echo '$(date)'
Conclusion ?
■
#ksh
#bash
Point-virgule
Le point-virgule sépare une liste de commandes d'une ligne.
■
Parenthèses
Une liste de commandes entre parenthèses est exécutée dans un processus fils dans
lequel les affectations de variables et les commandes internes qui affectent
l'environnement de l'interprète sont sans effet la commande terminée.
Synopsis
(Liste_de_commandes)
Exemple
(ps ; ls)
■
Accolades
Une liste de commandes entre accolades est exécutée dans le processus courant.
L'accolade ouvrante est suivie d'un caractère d'espacement. L'accolade fermante est
précédée d'un ;
Synopsis
{ liste_de_commandes;}
Exemple
{ pwd ; cd ;}
■
Le caractère ~
Le caractère ~ représente le répertoire de travail (home directory) d'un utilisateur.
LES INTERPRETES DE COMMANDES KORN SHELL ET BASH
169
──────────────────────────────────────────────────────────────
3.
VARIABLE LOCALE, VARIABLE EXPORTEE
La portée d'une variable locale est le contexte d'exécution de son script de définition.
Par défaut, elle n'est pas accessible par ses fils.
La création et l'affectation sont effectuées avec l'opérateur =
Les caractères d'espacement sont significatifs.
Exemple
a="bonjour"
et non
a = "bonjour"
a= "bonjour"
a ="bonjour"
Une variable est exportée quand elle devient transmissible aux processus fils.
Synopsis
export variable(s)
Exemple
a=bon
b=jour
echo $a$b
bonjour
bash
echo $a$b
exit
echo $a$b
bonjour
export b
bash
echo $a$b
jour
bash
echo $b
jour
b=demain
echo $b
demain
bash
echo $b
demain
exit
exit
exit
echo $a$b
bonjour
# shell courant
# shell fils
# chaîne vide : a,b locales
# retour au shell initial
# b exportée
# shell fils
# shell petit-fils
# shell arrière petit fils
# retour au shell initial
La modification par le processus fils d'une variable importée n'est pas répercutée dans
le processus père.
170
CHAPITRE VII
──────────────────────────────────────────────────────────────
4.
VARIABLES D'ENVIRONNEMENT PREDEFINIES
■
Quelques variables d'environnement initialisées par le Korn shell
_
ERRNO
LINENO
OLDPWD
PID
PPID
PWD
RANDOM
REPLY
SECONDS
■
Quelques variables d'environnement utilisées par le Korn shell
CDPATH
COLUMNS
EDITOR
ENV
FCEDIT
HISTFILE
HISTSIZE
HOME
IFS
LINES
MAIL
MAILCHECK
MAILPATH
PATH
PS1
PS2
PS3
PS4
SHELL
TERM
■
Variable volatile contenant le dernier mot de la dernière
commande exécutée.
Code d'erreur retourné par la commande.
Numéro de la commande courante.
Avant dernier répertoire de travail.
Identificateur du script courant.
Identificateur de processus père.
Répertoire de travail courant.
Pseudo générateur de nombre pseudo aléatoire.
Variable réponse (utilisée avec la structure de contrôle select).
Durée écoulée depuis le début de la session (secondes).
Dossiers de recherche pour la commande cd.
Nombre de colonnes du terminal.
Chemin de l'éditeur.
Script d'environnement exécuté en ouverture de session.
Editeur associé à la commande interne fc.
Fichier contenant l'historique de la pile de commandes.
Nombre de commandes mémorisées dans la pile de commandes
(dynamique).
Répertoire de travail de l'utilisateur.
Séparateur de mots de l'interprète de commandes (par défaut le
caractère d'espacement).
Nombre de lignes du terminal.
Adresse de la boite aux lettres publiques de l'utilisateur.
Fréquence de scrutation de la boite aux lettres publiques.
Chemin d'accès à la boite aux lettres publiques.
Liste ordonnée (gauche-droite) des répertoires (séparés par :)
consultés pour le chargement des commandes et applications.
Invitation à saisir (prompt) primaire, par défaut $ ou # (root).
Invitation à saisir secondaire, utilisée quand l'interprète considère
une ligne de commande comme incomplète, par défaut >.
Invitation à saisir utilisée par la clause select.
Invitation à saisir du mode mise au point d'un script (défaut +).
Chemin d’accès absolu à l'interprète.
Type de terminal associé au processus en cours, essentiel pour les
éditeurs de texte pleine page tels vi.
Commandes d'affichage
set
printenv
env
Variables locales et exportées,
Variables exportées,
Variables d'environnement exportées.
LES INTERPRETES DE COMMANDES KORN SHELL ET BASH
171
──────────────────────────────────────────────────────────────
5.
SCRIPTS
■
Définition d'un script
Un shell script ou script est un fichier de commandes à interpréter.
■
Création d'un script
Un fichier texte devient un script quand il reçoit l'attribut x avec la commande chmod.
Synopsis
chmod +x script
■
Exécution d'un script
Fichier avec l'attribut x :
Il suffit de le nommer pour l'exécuter.
Fichier sans l'attribut x
Il suffit de lancer l'interprète avec comme argument l'identificateur du script.
Synopsis
ksh script [argl... argn]
bash script [argl... argn]
■
Opérateur point
Un script s'exécute par défaut dans un processus fils.
Il s'exécute sans création d'un fils par utilisation de l'opérateur . (point) ce qui lui
donne accès à son contexte d'exécution (environnement et fonctions).
Synopsis
. nom_de_script
Un caractère d'espacement est nécessaire entre le point et le nom du shell script.
5.1 Mise au point d'un script
Les options d'exécution xv permettent la mise au point des scripts (mode trace).
Synopsis
ksh [-option(s)] script
bash [-option(s)] script
Les options les plus courantes sont les suivantes :
e
n
u
v
x
Arrêt de l'exécution du script à la première erreur,
Lecture et analyse sans exécution, utile pour vérifier la syntaxe,
L'utilisation d'une variable non initialisée provoque une erreur,
Les lignes correctement exécutées du script sont affichées précédées du
symbole +,
Les commandes du script et leurs arguments sont affichés à de l'exécution,
après les substitutions.
172
CHAPITRE VII
──────────────────────────────────────────────────────────────
5.2 Macros
L'interprète utilise des variables appelées macros, notées ?, #, *, $ ,!, etc. dont le
contenu est accessible par utilisation du caractère spécial $. Les arguments d'un script
(variables de position) sont accessibles par des macros notées 0, 1,...n. Ainsi :
$?
$#
$*
$!
$$
$0
$n
retourne le statut d'exécution de la dernière commande exécutée,
retourne le nombre d'arguments dans la ligne de commande,
retourne l'ensemble des arguments de la ligne de commande,
retourne le pid du dernier processus lancé en tâche de fond du script courant,
retourne le pid du script courant.
retourne l'identificateur du script,
retourne le n-ième argument du script.
Exemple
#!/bin/bash
echo "Liste des arguments du présent script : $*"
echo "Nombre total d'arguments :$#"
echo "Nom du script : $0"
echo "Premier argument :$1"
echo "pid du processus courant : $$"
date&
echo "pid du dernier processus lancé en mode background : $!"
Le script essai ci-après présente la syntaxe d'accès aux macros de position.
#!/bin/bash
for i in 1 2 10 11 12
do
echo $i
echo ${i}
#nécessaire si variable constituée de plusieurs chiffres
echo ${!i}
#affichage du contenu de la variable de position
echo `${!i}`
# exécution de la variable de position
done
// Résultat
essai a z e r t y u i o P date
1
1
a
erreur
2
2
z
erreur
…
10
10
p
erreur
11
11
date
10 jui 2002…
#exécution de la commande date
LES INTERPRETES DE COMMANDES KORN SHELL ET BASH
173
──────────────────────────────────────────────────────────────
■
Commentaire et commande what
Les commentaires, précédés en tête de ligne par les caractères #@(#) sont affichés
avec la commande Unix what.
Exemple
Soit le script essai
#@(#)Ceci est un test
La commande what essai indique :
Ceci est un test
5.3 Contexte d'exécution des scripts
Il faut être vigilant quand on lance un script car il peut avoir été écrit pour un autre
interprète. Les règles suivantes s'appliquent :
• L'interprète par défaut est le shell de Bourne,
• L'utilisation d'un interprète différent du shell par défaut est spécifiée par
l'utilisation consécutive des caractères spéciaux # et ! selon la syntaxe suivante :
#!/bin/sh
#!/bin/csh
#!/bin/bash
#!/bin/ksh
■
# shell de Bourne
# C shell
# Bourne Again shell
# Korn shell
Règles de programmation et d'utilisation des scripts
Il faut toujours indiquer l'interprète à utiliser comme première instruction du script et
l'exécuter dans le contexte pour lequel il a été développé.
6.
PROGRAMMATION STRUCTUREE EN KORN SHELL
6.1 Opérateur test
L'opérateur test, également noté [] (et appelé opérateur crochets), permet :
• de tester le type d'un fichier et ses attributs de sécurité,
• de tester la valeur d'une expression numérique ou alphanumérique.
• d'évaluer des expressions conditionnelles (chaînes de caractères, valeurs
numériques, etc.).
Synopsis
test expression
ou
[ expression ]
Une expression nulle est vraie; vide ou non nulle, elle est fausse.
174
CHAPITRE VII
──────────────────────────────────────────────────────────────
L'opérateur test s'utilise sous une des formes suivantes :
■
Test du type et de l'existence d'un fichier
a identificateur
b identificateur
c identificateur
d identificateur
f identificateur
p identificateur
s identificateur
L identificateur
■
Test sur les attributs de sécurité d'un fichier
r identificateur
w identificateur
x identificateur
g identificateur
k identificateur
u identificateur
O identificateur
G identificateur
■
Egalité.
Inégalité.
Plus grand.
Plus grand ou égal.
Plus petit.
Plus petit ou égal.
Résultat d'opérations sur les chaînes de caractères
chaîne
n chaîne
z chaîne
chaine1 = chaine2
chaine1 != chaine2
chaine1 > chaine2
chaine1 < chaine2
■
Expression vraie si identificateur est accessible en lecture.
Expression vraie si identificateur est accessible en écriture.
Expression vraie si identificateur est un shell script.
Expression vraie si identificateur a le bit guid (bit S) positionné.
Expression vraie si identificateur a le sticky (bit t) positionné.
Expression vraie si identificateur a le bit s positionné.
Expression vraie si identificateur a comme propriétaire le
propriétaire effectif du fichier.
Expression vraie si identificateur a comme propriétaire le
groupe effectif du fichier.
Test du résultat d'opérations sur des nombres entiers
nombre1 -eq nombre2
nombre1 -ne nombre2
nombre1 -gt nombre2
nombre1 -ge nombre2
nombre1 -lt nombre2
nombre1 -le nombre2
■
Expression vraie si identificateur est un fichier existant.
Expression vraie si identificateur est un fichier accessible en
mode b (bloc).
Expression vraie si identificateur est un fichier accessible en
mode c.
Expression vraie si identificateur est un (fichier) répertoire.
Expression vraie si identificateur est un fichier ordinaire.
Expression vraie si identificateur est un fichier tube nommé.
Expression vraie si identificateur est un fichier d'une taille non
nulle.
Expression vraie si identificateur est un lien symbolique.
Expression vraie si chaîne n'est pas vide.
Expression vraie si chaîne est de longueur non nulle.
Expression vraie si chaîne est de longueur nulle.
Identité.
Différence.
Postérieure selon l'ordre lexicographique.
Antérieure selon l'ordre lexicographique.
Opérateurs logiques
o
a
!
opérateur OU.
opérateur ET.
opérateur NON.
LES INTERPRETES DE COMMANDES KORN SHELL ET BASH
175
──────────────────────────────────────────────────────────────
6.2 La clause if
Le shell implémente les structures de contrôle traditionnelles d'exécution de la
programmation structurée. Un bloc est une liste de commandes (notée commande(s))
représentée sous la forme :
• d'une suite de commandes d'une même ligne, séparées par un ;
• d'une suite de commandes sur plusieurs lignes.
La clause if a plusieurs syntaxes.
Synopsis
if [ expression ]
then
commande(s)
fi
La liste de commandes est exécutée si l'expression est vraie.
Exemple
if test -d /home/philipp
then
echo "Le répertoire /home/philipp existe"
fi
Autre synopsis
if [ expression ]
then
commande(s)
else
commande(s)
fi
Si l'expression est vraie, les commandes entre les clauses if et then sont exécutées,
celles entre les clauses else et fi sinon.
Exemple 1
if [ -d .kshrc ]
then
echo ".kshrc répertoire"
else
echo ".kshrc fichier"; echo "Au revoir"
fi
Exemple 2
read chaine
if [ "$chaine" = "" ]
then
echo "chaine vide"
else
echo "chaîne non vide"
fi
# saisie interactive de chaine
# test chaîne vide
176
CHAPITRE VII
──────────────────────────────────────────────────────────────
■
Tests imbriqués
Synopsis
if [ expression ]
then
commande(s)
else
if [ expression ]
then
commande(s)
else
if [ expression ]
then
…
fi
fi
fi
que l'on écrit sous forme abrégée :
if [ expression ]
then
commande(s)
elif [ expression ]
then
commande(s)
elif [ expression ]
then
…
fi
Il y a une clause fi et une clause if même si plusieurs clauses elif sont imbriquées.
6.3 Alternatives multiples : la clause case
La structure de contrôle case gère des branchements multiples.
Synopsis
case $mot in
chaine1) commande(s);;
chaine2) commande(s);;
…
*) défaut;;
esac
# pas une faute de frappe ! !
# facultatif mais recommandé
Description
La variable mot est comparée aux différentes chaines. Si une des conditions est vraie,
les commandes entre la chaîne et les caractères ;; sont exécutées.
Si aucune égalité n'est trouvée, sortie de la structure de contrôle par exécution de la
clause esac.
Plusieurs alternatives sont autorisées pour un cas donné (opérateur | ).
LES INTERPRETES DE COMMANDES KORN SHELL ET BASH
177
──────────────────────────────────────────────────────────────
Exemple
read mot
case $mot in
o|O|y|Y) echo "Oui";;
n|N)
echo "Non";;
*) echo "Ni oui ni non";;
esac
6.4 Itérations bornées : la clause for
Synopsis
for variable in liste_de_mots
do
commande(s)
done
Description
La variable prend successivement toutes les valeurs de la liste de mots (de la gauche
vers la droite) et exécute pour chacune la liste de commandes entre do et done.
Exemple
#!/bin/bash
# Copie d'un fichier dans plusieurs répertoires
for n in _un _deux _trois
do
cp fichier /home/repertoire$n
done
6.5 Itérations non bornées : la clause while
Synopsis
while expression_logique
do
commande(s)
done
Description
• Le test est effectué en début de boucle.
• Le bloc des commandes entre les clauses while et done est exécuté tant que
l'expression est vraie (code de retour nul).
Exemple 1
#!/bin/bash
# Affichage de tous les arguments un par un
while [ $# -gt 0 ]
do
echo " Paramètre : $l"
shift
#décalage d'un paramètre vers la gauche
done
178
CHAPITRE VII
──────────────────────────────────────────────────────────────
Exemple 2 : boucle avec compteur
#!/bin/bash
j=0
while [ $j -lt 20 ]
do
j=`expr $j + 1`
echo $j
done
Exemple 3 : boucle avec compteur et pas
#!/bin/bash
j=0; pas=1
while [ $j -lt $# ]
do
echo "macro de position $j : ${!j}"
j=`expr $j + $pas`
# on peut aussi écrire : j=`expr $j + 1`
done
6.6 Itérations non bornées : la clause until
Cette boucle est exécutée au moins une fois même si la condition n'est pas réalisée.
Synopsis
until expression_logique
do
commande(s)
done
Exemple
until who | grep jacques > /dev/null
do
sleep 60
done
echo "jacques est connecté"
6.7 Branchements inconditionnels
■
Itération suivante
L'instruction continue permet de faire un branchement inconditionnel à la première
instruction de l'itération suivante de la boucle.
Synopsis
continue
■
Sortie inconditionnelle d'une boucle
La clause break permet de sortir d'un (défaut) ou de n niveaux de boucle
(branchement inconditionnel).
Synopsis
break [n]
LES INTERPRETES DE COMMANDES KORN SHELL ET BASH
179
──────────────────────────────────────────────────────────────
6.8 Saisie interactive et menu
■
Saisie interactive
La commande read saisit interactivement une variable.
Synopsis
read variable
■
La clause select
• La commande select est spécifique au Korn-Shell ou au Bourne Again Shell.
• Lors de son exécution, la liste des valeurs autorisées de la variable de contrôle est
affichée, chacune étant précédée d'un nombre permettant de la sélectionner.
• Une invite (la variable prédéfinie PS3) est affichée et une attente active déclenchée.
La saisie :
• d'un entier de la liste provoque l'initialisation de la variable associée à l'entier et
l'exécution de la commande correspondante.
• d'une chaîne vide provoque l'affichage des sélections possibles,
• du caractère EOF (Ctrl D) provoque la sortie de la boucle.
Exemple
#!/bin/bash
select commande in sortie date liste_processus
do
echo Réponse lue : "$REPLY"
case $commande in
sortie) echo "fin de la commande"
break ;;
date) echo `date` ;;
liste_processus)
echo "Liste des processus actifs : `ps -ealf | more`" ;;
*) echo "erreur" ;;
esac
done
// Résultat
1) sortie
2) date
3) liste_processus
#? 2
Reponse lue : 2
Jeu 06 Juil 14:11:10 MESZ 1995
#?
1) sortie
2) date
3) liste_processus
#? 1
Réponse lue : 1
fin de la commande
180
CHAPITRE VII
──────────────────────────────────────────────────────────────
6.9 Fonctions
Une fonction exécute une action à chaque appel sans duplication de son code.
En shell, l'action est interprétée dans le contexte du processus courant et non dans
celui d'un processus fils.
Une fonction peut avoir des arguments, comme un script.
Il existe des fonctions prédéfinies.
Synopsis
identificateur_fonction()
{
commande(s)
}
Exemple
# Effacement de l'écran, affichage du nom de l'utilisateur et de la date avant déconnexion
logout()
{
tput clear
echo " Déconnexion de $USER le `date`"
}
■
Appel de fonction
Il suffit d'utiliser son nom éventuellement suivi de ses arguments accessibles dans le
corps de la fonction comme les macros d'un script (l, 2, …, n, # et *).
Exemple
La fonction cwd permet un déplacement dans l'arborescence et positionne le prompt
d'affichage sur le répertoire courant.
cwd()
{
cd $1
PS1="'pwd'>"
}
■
Retour d'une fonction
Une fonction se termine après l'exécution de la commande précédant l'accolade
fermante.
La fonction return permet d'en sortir directement.
Synopsis
return ou return code
■
#code est un entier
Code de retour
La macro ? contient le code de retour de la fonction ou l'argument de la clause return.
LES INTERPRETES DE COMMANDES KORN SHELL ET BASH
181
──────────────────────────────────────────────────────────────
6.10 Opérations sur les chaînes de caractères
■
Concaténation
a=bon
b=jour
echo $a$b
bonjour
echo $b$a
jourbon
■
Longueur d'une chaîne : l'opérateur expr
L'opérateur expr opère sur des expressions arithmétiques, des chaînes de caractères
ou des nombres entiers. L'option length fournit la longueur de la chaîne :
m=`expr length "$b"`
echo $m
4
■
Extraction d'une chaîne : expr substr
Description
Extraction de P caractères à partir du n-ième : expr substr "chaîne" n p
a="Il fait beau"
b=`expr substr "$a" 9 4`
echo $b
beau
■
Première position d'un caractère dans une chaîne : expr index
a=`expr index "$a" a`
echo $a
5
6.11 Affectation des variables de position
La commande set permet d'affecter globalement les variables de position.
Synopsis
set mot1 mot2 … motn
Description
Affectation de mot1 à la 1ière variable de position, mot2 à la 2ième, etc.
■
Décalage
Synopsis
shift [n]
Les variables de position sont décalées d'une (de n) position(s) vers la gauche,
renumérotées et leur contenu antérieur perdu.
182
CHAPITRE VII
──────────────────────────────────────────────────────────────
6.12 Déclaration de type (commande typeset)
Synopsis
typeset [+][-]HLRZilrtux[n]][nom[ =valeur]]…
Cette commande permet de définir, initialiser, et affecter des valeurs à des variables
typées, de définir et modifier leurs attributs et protection, d'afficher les variables et
leurs attributs.
Les attributs que l'on peut spécifier sont les suivants :
u
l
in
Ln
LZn
Rn
RZn
Zn
r
x
Lettres minuscules transformées en lettres majuscules,
Lettres majuscules transformées en lettres minuscules,
Type entier ; n spécifie la base de calcul,
Justification à gauche ; n spécifie la longueur du champ,
Justification à gauche et remplissage par des zéros ; n spécifie la
Longueur du champ,
Justification à droite ; n spécifie la longueur du champ,
Justification à droite et remplissage par des zéros ; n spécifie la
longueur du champ,
Remplissage par des zéros ; n spécifie la longueur du champ.
Equivalent à -RZ,
Variable accessible en lecture seulement,
Variable exportée.
Exemple
typeset
Affichage des noms et attributs de toutes variables.
typeset -xi
Affichage des noms et attributs de toutes variables avec les attributs
export et entier.
typeset +xi
Idem avec visualisation des noms uniquement.
typeset a b
Définit les variables locales a et b sans attribut particulier.
typeset -i8 x
x est une variable entière octale.
typeset -u x
Conversion de toutes les occurrences du caractère x en lettre
majuscule.
typeset -r x=abc Définition de la variable x et affectation de la valeur (constante) abc.
typeset -L4 z
Troncature de z par 4 caractères d'espacement vers la droite.
typeset -RZ4 z
Idem avec élimination des zéros à gauche.
typeset -R4 z
La variable z est remplie par des caractères d'espacement à droite si
elle a plus de 4 caractères. Elle est tronquée à gauche de 4 caractères
sinon.
typeset -RZ4 z
Idem mais des zéros remplacent le caractère d'espacement.
typeset -H fichier Sur des systèmes autres qu'Unix, transforme un chemin d'accès Unix
en chemin d'accès spécifique au système d'exploitation du système
hôte.
typeset -f
Affichage de toutes les fonctions et de leur valeur si elle est connue.
typeset -fx
Affichage des fonctions avec l'attribut x et de leur valeur si elle est
connue.
typeset -fu "toto" La fonction toto est spécifiée indéfinie.
LES INTERPRETES DE COMMANDES KORN SHELL ET BASH
183
──────────────────────────────────────────────────────────────
6.13 Exemple de fichier .profile
:
# .profile
if [ `hostname` = hpserv ]; then
PATH=$PATH:/etc:/usr/etc:/usr/lib:/usr/bin/X11:/usr/contrib/bin:/usr/contrib/mitX11R5/bin:
else
PATH=$PATH:/etc:/usr/etc:/usr/lib:/lib:/usr/bin/X11:.
fi
export PATH
if [ -z "$LOGNAME" ]; then
LOGNAME=`logname`
# nom de l'utilisateur
export LOGNAME
fi
MAIL=/usr/spool/mail/$LOGNAME
# boite aux lettres publiques
export MAIL
if [ -z "$PWD" ]; then
PWD=$HOME
export PWD
fi
if [ -f $HOME/.kshrc -a -r $HOME/.kshrc ]; then
ENV=$HOME/.kshrc
export ENV
fi
# affichage
eval `tset -m ansi:ansi -m $TERM:\?${TERM:-ansi} -r -s -Q`
export TERM
# si le contrôle de travaux est actif, invalidation du caractère ^Z
case $- in
m) stty susp '^z'
;;
esac
set -o ignoreeof
#invalidation du ^D pour sortir
#démarrage selon la machine
if [ `uname` = soc ]; then
Oracle_BASE=/home/dba/Oracle;export Oracle_BASE
Oracle_HOME=$Oracle_BASE/product/7.0.16;export Oracle_HOME
Oracle_SID=V7016
export Oracle_SID
Oracle_LINK=$Oracle_HOME/cd_link
export Oracle_LINK
Oracle_TERM=ansi;export Oracle_TERM
PATH=$PATH:$Oracle_HOME/bin:$Oracle_BASE/dbtools/bin
MANPATH=$MANPATH:/home/dba/Oracle/product/7.0.16/SQLplus/man
#environnement contextuel d'Oracle
. oraenv
# gestion du jeu de caractères français (spécifique SCO)
LANG=french_france.8859
export LANG
fi
184
CHAPITRE VII
──────────────────────────────────────────────────────────────
# gestion du prompt
PS1="<`uname -n`:`echo $LOGNAME`:\$PWD:\!>"
export PS1
# autorisation pour les collègues (commande talk)
mesg y
# affichage X11 selon les machines
case $logname in
user1) DISPLAY=client1:0.0;;
user2) DISPLAY=client2:0.0;;
user3) DISPLAY=client3:0.0;;
user4) DISPLAY=client4:0.0;;
user5) DISPLAY=client5:0.0;;
user6) DISPLAY=soc:0.0;;
user8) DISPLAY=hpserv:0.0;;
esac
export DISPLAY
# démarrage X11 selon les utilisateurs
if [ `uname` = soc ]; then
case $ logname in
user6) startx;;
esac
fi
# particularités Hewlett Packard
if [ `uname` = hpserv ]; then
# masque de protection
umask 022
fi
6.14 Exemple de fichier .kshrc
:
# .kshrc Commandes exécutées à l'initialisation d'un script
#
EDITOR=vi
FCEDIT=vi
VISUAL=vi
#choix de vi comme éditeur ligne par défaut
if [ -z "$VISUAL" -a -z "$EDITOR" ]; then
set -o vi
fi
#modification des variables k-shell
HISTSIZE=64
export EDITOR FCEDIT HISTSIZE VISUAL
#alias exportables
alias -x a='alias -x'
a la='ls -al | m'
a cu='cu -s 9600 -l tty2A -oe 0149143517'
a ll='ls -l | m'
a root='cd /'
a md='mkdir'
a lp='lp -o nobanner'
a su='/bin/su'
LES INTERPRETES DE COMMANDES KORN SHELL ET BASH
185
──────────────────────────────────────────────────────────────
7.
PRESENTATION SOMMAIRE DU C SHELL
Bill Joy a développé l'interprète C shell avec une syntaxe proche de celle du langage
C. L'interprète de commandes tcsh s'en inspire très fortement.
Le C Shell exécute les scripts suivants du répertoire de travail : .login (connexion),
.logout (déconnexion), .cshrc (chaque script).
La syntaxe des structures de contrôle, des fonctions et des variables est différente.
■
■
Principales équivalences entre le Shell de Bourne et le C Shell
Shell de Bourne
for nom in liste
do ...
done
C Shell
foreach nom liste
...
end
case mot in
cas) ... ;;
esac
switch (mot)
case cas ... breaksw
endsw
if exp then ... fi
if (exp) ...
if exp then
elif exp1
then ...
else ...
fi
if (exp) then ...
elseif (exp1)
then ...
else ...
endif
while exp
do ... done
while(exp)
... end
. fichier
source fichier
break [n]
break [break [...]]
exit [exp]
exit [(exp)]
export
setenv
read a
a=$<
times
time
trap
onintr
Quelques alias et variables du C Shell
limit
logout
notify
stop
unxxx
argv
cwd
ignoreeof
path
status
Définition des limites d'une commande (temps CPU. mémoire ..).
Sortie de l’interprète C shell (CTRL D).
Notification de la fin d'un processus.
Arrêt d'un processus en mode background.
Opération inverse de xxx (avec xxx = alias, limit ou set).
Equivalent aux variables $1, $2.... (utilisation : $argv[i])).
Répertoire courant.
Le signal CTRL D est ignoré par l’interprète (exécution du script logout).
Equivalent de la variable shell PATH.
Etat de la dernière commande exécutée.
186
CHAPITRE VII
──────────────────────────────────────────────────────────────
8.
EXERCICES (SCRIPTS)
■
Gestion de l'environnement
Ajouter puis supprimer un alias, par exemple llm pour la commande ls -l | more. On
traitera le cas particulier où l'alias est exporté à des fils (Korn Shell seulement).
Rappeler puis éditer une commande.
Utiliser les fonctions set et printenv (shell) et setenv (C shell).
Selon l'interprète de commandes utilisé, analyser les fichiers :
.profile, .kshrc (ksh)
.login, .cshrc (csh)
.logout (les deux).
■
Macro
Ecrire un script qui affiche la liste de ses arguments d'appel (une commande pour cette
action), quel que soit leur nombre.
Afficher ses 3 premiers arguments quand ils existent et un message d'erreur sinon.
Afficher tous ses arguments un par un (utiliser une boucle et la commande shift).
■
Changement de la langue de l'affichage de la date
La commande date affiche la date et l'heure (en anglais en général, quelquefois en
français). Ecrire un script qui, à partir du résultat d'exécution de la commande date
affiche la date dans un format similaire dans l'autre langue.
Indications : utiliser la commande set ainsi que la clause case.
Pour l'affichage séparé des heures, minutes et secondes, utiliser la commande set en
redéfinissant le séparateur des mots par défaut du shell (variable IFS).
■
Renommage interactif de fichiers d'un répertoire
Utiliser la boucle for pour afficher, un par un tous les fichiers du répertoire courant.
Poser la question "Nouveau nom (ou ) ?" et lire la réponse (echo et read).
Renommer le fichier selon la réponse ou traiter le fichier suivant (réponse "Return").
Compléter le script pour opérer dans le répertoire de travail de l'utilisateur (script sans
argument) ou dans un répertoire quelconque transmis comme unique argument.
Le script vérifie la validité des arguments en effectuant les tests suivants :
• test de la syntaxe d'appel (message si le nombre d'arguments d'appel est incorrect),
• test de l'existence et de la lisibilité des objets transmis en arguments,
• test de la préexistence d'une entrée cible (fichier ou répertoire).
Ainsi, la commande mv f1 f2 peut écraser l'élément f2 si celui-ci existe. On peut donc
refuser et traiter l'élément suivant ou demander un autre nom et confirmation avant
d'écraser l'élément.
LES INTERPRETES DE COMMANDES KORN SHELL ET BASH
187
──────────────────────────────────────────────────────────────
■
Sauvegarde d'un répertoire avec reconstruction de la même arborescence
Cet exercice fait intervenir la récursivité.
L'utilisateur ne dispose pas toujours d'une commande permettant de copier une
arborescence complète. Deux méthodes sont proposées : se déplacer éventuellement
ou non dans l'arborescence cible. On pourra procéder par étapes :
• copie du répertoire courant sur un répertoire donné, par exemple /tmp/p),
• transmission des noms du répertoire source et de sauvegarde à l'appel de la
commande,
• test de l'existence des répertoires (si le répertoire de sauvegarde existe, prévoir une
demande de confirmation ou un refus d'exécution de la commande).
■
Impression de fichiers encadrés par une bannière
Une bannière peut comporter la date, le nom de l'utilisateur et le nom du fichier
(chemin absolu ou relatif). On procédera en 2 étapes : traiter d'abord un seul fichier,
puis un ensemble de fichiers (utiliser alors une boucle for).
• La commande a un ou plusieurs arguments représentant les fichiers à visualiser.
• On utilisera la commande écrite au § précédent pour obtenir la date en français et
utiliser la commande Unix sort pour ne conserver que le jour, le mois et l'année.
■
Recherche du jour de la semaine
On souhaite connaître le jour de la semaine d'une date donnée transmise comme
argument à la commande sous la forme "jour mois année." (exemple 14 7 1789).
Indications : utiliser la commande cal et traiter à part la première ligne (le 3
correspond au même jour que le 10 ...).
■
Recherche du nom d'un périphérique
Lorsqu'une anomalie survient sur un périphérique, un message est affiché sur la
console système avec comme indication :
err on dev m,n
où m et n représentent respectivement le majeur et le mineur du périphérique. Il s'agit
d'écrire une commande qui à partir de ces 2 éléments affiche le nom du périphérique
concerné donc le nom du périphérique dans le répertoire /dev.
Utilisation : les 2 éléments sont transmis comme arguments à la commande et ils sont
accessibles avec la commande ls -l qui les affiche.
Remarques
Il faut retrouver le format m,n selon la valeur de n. On constate que les formats des
entrées du répertoire /dev varient en fonction du numéro du mineur.
Selon la méthode utilisée, il faut distinguer 7,x de 17,x.
Il peut y avoir plusieurs entrées pour une valeur donnée de m et n (cas des liens).
188
CHAPITRE VII
──────────────────────────────────────────────────────────────
9.
INTRODUCTION A LA PROGRAMMATION SYSTEME
L'objectif de cet exercice (P. Feautrier) est l'écriture d'un interprète de commandes
simplifié restreint à quelques aspects significatifs : lancement d'une commande,
gestion des arguments, redirections et signaux. Cet interprète dérivé du shell de
Bourne est conçu comme une suite d'adjonctions de fonctions courtes au programme
fondamental mettant en évidence sa structure modulaire. Enfin, on résistera à la
tentation d'utiliser des fonctions de la bibliothèque ce qui est louable pour un
programmeur d'applications mais ici non pédagogique.
■
La boucle fondamentale
La boucle fondamentale de l'interprète exécute les actions suivantes :
• Ecriture d'un "prompt", symbole d'invitation à la saisie ($ par exemple).
• Lecture d'une ligne sur l'entrée standard.
On suppose que la commande se réduit à un fichier exécutable exécuté avec les appels
système fork et execv. Prévoir le cas d'un chemin d'accès erroné ou inaccessible.
Attendre la fin du processus fils (appel système wait), et boucler.
■
Amélioration au choix de la commande
Le programme précédent impose l'utilisation du chemin d'accès absolu aux
commandes (il faut écrire /bin/ls et pas ls). On demande de reproduire le mécanisme
d'utilisation de la variable d'environnement PATH rappelé ci-après.
PATH
La variable PATH contient des répertoires séparés par le signe : dont on peut lire et
analyser la valeur (fonction getenv). Créer un tableau des différents répertoires à
explorer (tableau des chemins). Reprendre ensuite l'interprète du § précédent ; le
fichier dont le nom est indiqué sur l'entrée standard est recherché en séquence dans
ces répertoires (primitive access) sauf si le chemin d'accès indiqué est absolu.
Commandes internes
Essayez d'exécuter la commande cd. Que se passe-t-il et pourquoi ?
Réalisez le mécanisme d'exécution des commandes internes (build in commands)
traitées directement par l'interprète sans chargement d'un programme externe. Pour
être modulaire, il faut prévoir une table des commandes externes (réduite pour les
besoins de l'exercice) et une table des procédures exécutives associées.
■
Analyse de la ligne de commande
On considère maintenant que la ligne de commande contient, outre le nom du
programme à exécuter, des indications diverses, arguments, redirections, etc., à traiter.
Une ligne saisie est donc découpée en mots stockés dans un tableau de pointeurs vers
des mots (chaînes de caractères) séparés par des espaces ou des caractères spéciaux
('<, >, &, etc.). Cette table doit pouvoir évoluer ultérieurement. Réfléchir à son
implantation (allocation dynamique, allocation dans un tableau statique ?). .
LES INTERPRETES DE COMMANDES KORN SHELL ET BASH
189
──────────────────────────────────────────────────────────────
Ecrire la fonction d'analyse et l'incorporer à l'interprète. Noter que le nom de la
commande à exécuter est le premier mot de la ligne lue. Ajouter le traitement du
caractère & qui indique que la fin de la commande lancée ne doit pas être attendue
(mode différé ou mode d'arrière plan).
Si la programmation est modulaire, l'interprète commence à être un programme
complexe : plusieurs fichiers de fonctions, déclarations et données (table des
commandes internes, table des séparateurs, tableau des mots, tableau des chemins,
etc.). Organiser la gestion de cet ensemble au moyen de l'utilitaire make.
■
Redirections
Le mot qui suit l'un des séparateurs > < est un chemin qui remplace, selon le cas
l'entrée et/ou la sortie standard du processus fils. Introduisez dans son code une
procédure qui exécute les redirections. Attention : si le fichier indiqué n'existe pas, la
redirection > entraîne une création.
■
Transmission des arguments
Les arguments sont transmis à la commande exécutée par le tableau qui les contient
(appel système execv). Modifier l'interprète en conséquence sans oublier que par
convention, le premier argument transmis au processus fils (l'argument 0) est le
premier mot de la commande à savoir son nom.
■
Contrôle des travaux
L'interprète gère un travail d'avant-plan (dont la terminaison est attendue par l'appel
système wait) et N travaux d'arrière-plan dont la terminaison n'est pas attendue. Tous
ces travaux sont connus par leur identificateur.
Amélioration du traitement du caractère & (perluette)
Dans l'état actuel de l'interprète, si un travail d'avant-plan et un autre d'arrière-plan
sont lancés et que ce dernier se termine le premier, l'interprète considère que c'est
celui d'avant plan qui se termine et demande la commande suivante. Améliorez la
situation en notant dans une table l'identité des processus lancés et en contrôlant celle
du processus qui se termine.
Commandes foreground et jobs
Ecrire les commandes internes foreground (modification de l'état d'un travail d'arrièreplan en avant-plan) et jobs (liste des travaux d'arrière plan en cours).
Gestion du signal SIGINT
Quand un travail s'exécute en avant-plan, l'interprète est en attente du signal de
terminaison (souvent le signal INT). Il est donc impossible d'utiliser directement une
commande background.
La primitive longjump permet de sortir de l'appel système wait sans terminer le
processus d'avant plan passant en arrière plan. La mise à jour de son état devient alors
nécessaire. Penser à protéger le processus fils contre les effets du signal.
190
CHAPITRE VII
──────────────────────────────────────────────────────────────
10. CORRIGES DES EXERCICES (SCRIPTS)
■
Affichage de la date en francais
#!/bin/bash
# Affichage de la date en français
set `date` # Récupération des mots de la commande date dans $1, $2, ...
case $1 in # conversion du jour
Mon) jour=Lundi;;
Tue) jour=Mardi;;
Wed) jour=Mercredi;;
Thu) jour=Jeudi;;
Fri) jour=Vendredi;;
Sat) jour=Samedi;;
Sun) jour=Dimanche;;
esac
case $2 in # conversion du mois
Jan) mois=Janvier;;
Feb) mois=Fevrier;;
Mar) mois=Mars;;
Apr) mois=Avril;;
May) mois=Mai;;
Jun) mois=Juin;;
Jul) mois=Juillet;;
Aug) mois=Aout;;
Sep) mois=Septembre;;
Oct) mois=Octobre;;
Nov) mois=Novembre;;
Dec) mois=Decembre;;
esac
quant=$3 # Sauvegarde du jour du mois
IFS=:
# Modification du séparateur par défaut du shell
set $4
# récupération des champs de l'heure dans $1, $2, $3
# affichage du résultat
echo "Nous sommes le $jour $quant $mois à $1 H $2 mn $3s"
LES INTERPRETES DE COMMANDES KORN SHELL ET BASH
191
──────────────────────────────────────────────────────────────
■
Renommage interactif des fichiers d'un répertoire
#!/bin/bash
# Renommage interactif des fichiers d'un répertoire
# Syntaxe : rename [repertoire]
# test du nombre d'arguments :
# 0 argument : utilisation du répertoire courant
# 1 argument : nom du répertoire dont les fichiers
# sont à renommer
# n arguments : erreur de syntaxe
case $# in
0) Dir=`pwd`;;
1) if [ -d $1 ] # test si argument répertoire
then
Dir=$1
else
echo "$1 n'est par un répertoire";exit
fi;;
*) echo "Usage : $0 [répertoire]";exit;;
esac
# test d'accessibilité du répertoire
if [ ! -w $Dir -o ! -r $Dir ]
then echo "Accès interdit sur le répertoire $Dir"; exit
fi
# boucle de lecture des entrées
for i in `ls $Dir`
do
echo -n "$i : nouveau nom ou RETURN : "
# question
read X # lecture reponse
case $X in
# test reponse
"") continue;; # possible avec if [ "! X" ]
*) if [ -f $X -o -d $X ] # test existence réponse
then
echo "$X existe déjà, renommage refusé"
else
mv $Dir/$i $Dir/$X # renommage effectif
fi;;
esac
done
192
CHAPITRE VII
──────────────────────────────────────────────────────────────
■
Sauvegarde d'un répertoire avec reconstruction de la même arborescence
#!/bin/bash
# Sauvegarde d'un répertoire avec reconstruction de la même arborescence
# Le fichier s'appelle svgdir
# pas de déplacement dans l'arborescence
# test de la syntaxe
# 2 arguments : répertoire à sauvegarder
# répertoire cible
case $# in
2) orig=$1;dest=$2;;
*) echo "Usage : $0 rép_orig rep_dest";exit
esac
# test d'existence du répertoire à sauvegarder
if [ ! -d $orig ]
then
echo "$orig n'est pas un répertoire "; exit
fi
# test d'existence du répertoire d'arrivé
if [ -d $dest ]
then
echo "$dest existe déjà " ; exit
fi
# création du répertoire cible
mkdir $dest
# boucle de lecture
for i in ` ls $1`
do
if [ -d $1/$i ]
# test s'il s'agit d'un répertoire
then
dest=$2/$i # concaténation des noms des répertoires
orig=$1/$i # (arguments de la commande)
svgdir $orig $dest # si oui appel récursif
else
cp $1/$i $2
# sinon copie simple de fichiers
# (fin de récursivité)
fi
done
LES INTERPRETES DE COMMANDES KORN SHELL ET BASH
193
──────────────────────────────────────────────────────────────
■
Affichage de fichiers en ajoutant une bannière
#!/bin/bash
# Affichage de fichiers en ajoutant une bannière
# en tête : date, nom de l'utilisateur, nom fichier
# affichage de la syntaxe et de la sortie
usage()
{
echo "Usage: basename $0 fichier1 [...]"
exit
}
# fonction d'affichage de l'en tête
# j, q et m sont positionnées par la commande Unix
# set datefr.
# USER est une variable standard du shell.
# La commande basename permet de ne prendre en
# compte que le nom relatif d'un fichier.
entete()
{
echo " ------------- $j $q $m ------ $USER-----------`basename $f ` ------"
}
# test du nombre de paramètres
if [ $# -eq 0 ]
then usage
fi
#sauvegarde des arguments
file=$*
# récupération de la date en français
set `datefr`
j=$4;q=$5;m=$6
# boucle d'affichage des fichiers
for f in $file
do
entete
#test d'accessibilité des fichiers
if [ ! -f $f -o ! -r $f ]
then
echo "Le fichier $f est inaccessible"
else
cat $f
fi
entete
done
194
CHAPITRE VII
──────────────────────────────────────────────────────────────
■
Recherche du jour de la semaine pour une date donnée
#!/bin/bash
# Recherche du jour de la semaine d'une date donnée
# test de la syntaxe : arguments : jour mois année
case $# in
3) ji=$1;m=$2;a=$3;;
*) echo "erreur de syntaxe : `basename $0` jour mois année"
exit;;
esac
# traitement particulier pour les 7 premiers jours
# cas des semaines incomplètes
# ji : sauvegarde de l'argument de la commande
# (pour l'affichage du resultat)
if [ $1 -lt 8 ]
then j=`expr $1 + 7`
else j=$1
fi
# décalage de trois champs pour éliminer ceux
# contenant les paramètres d'appel de la commande
# ce qui est utile si la commande ci-dessous a un
# résultat nul (date incorrecte)
shift 3
# récupération de la ligne contenant le jour
# la commande tail élimine les 2 premières lignes
# affichées par la commande Unix cal (mois an et
# les jours S M ...)
# la redirection >/dev/null élimine de l'écran le
# resultat de la commande set
# (affichage des paramètres) dans le cas d'une
# date incorrecte
set `cal $m $a | tail +2 | grep $j ` >/dev/null
# conversion du jour
case $j in
$1) J=Dimanche;;
$2) J=Lundi;;
$3) J=Mardi;;
$4) J=Mercredi;;
$5) J=Jeudi;;
$5) J=Vendredi;;
$7) J=Samedi;;
*) echo "Date incorrecte $ji $a $a" ;exit;;
esac
# affichage du résultat
echo "Le $ji $m $a est un $J"
LES INTERPRETES DE COMMANDES KORN SHELL ET BASH
195
──────────────────────────────────────────────────────────────
■
Recherche d'un périphérique à partir du majeur et du mineur
#!/bin/bash
# Recherche d'un périphérique à partir des
# Majeur et du Mineur
# 2 arguments transmis a la commande.
# test de la syntaxe : 2 paramètres obligatoires
if [ $# -ne 2 ]
then
echo"Usage $0 majeur mineur" exit
fi
# affichage du message initial
echo "Recherche du périphérique ayant pour Majeur : $1 et pour Mineur : $2"
# test de la valeur du mineur
# recherche de la chaine "M, m"
#
3 espaces si Mineur <10
# recherche de la chaine "M, m"
# 2 espaces si Mineur >9 et <100
# recherche de la chaine "M, m"
# 1 espace si Mineur > 99
if [ $2 -gt 99 ]
then
a=" $1,$2 "
elif [ $2 -gt 9 ]
then
a=" $1, $2"
else
a=" $1, $2"
fi
mineur=$2
# récupération dans le répertoire /dev
# des entrées contenant la chaîne recherchée
i=`ls -l /dev|grep "$a"`
# test de l'existence de telles entrées
if [ "$i" ]
then
set `echo "$i"`
# si oui récupération de toutes les entrées
if [ $mineur -gt 99 ]
then
while [ $# -gt 0 ]
do
Dev="$9 $Dev" # $9 est le 9ième champ correspondant au nom
if [ $# -gt 9 ]
then
shift 9
# entree suivante
else break
fi
done
else
while [ $# -gt 0 ]
do
196
CHAPITRE VII
──────────────────────────────────────────────────────────────
Dev="${10} $Dev"
# ${10} est le 10ième champ correspondant au nom
if [ $# -gt 10 ]
then
shift 10
# entree suivante
else break
fi
done
fi
echo "Il s'agit de $Dev"
# affichage des résultats
echo
else
echo "Pas de périphérique concerné"
fi
Exemple d'exécution
Recherche du périphérique ayant pour Majeur : 2 et pour Mineur : 52
Il s'agit de sctfdm0 rfd096ds15 rfd096 rfd0 fd096ds15 fd096 fd0
Recherche du périphérique ayant pour Majeur : 52 et pour Mineur : 4
Il s'agit de ega
Recherche du périphérique ayant pour Majeur : 11 et pour Mineur : 255
Il s'agit de ev_mrg
LES INTERPRETES DE COMMANDES KORN SHELL ET BASH
197
──────────────────────────────────────────────────────────────
11. CORRIGE (INTERPRETE DE COMMANDES SIMPLIFIE)
■
La boucle fondamentale
On ne donne ici que l'état définitif du programme. La réponse à la question suivante
est obtenue en faisant abstraction de la plupart des appels de fonctions.
Les mots clés du langage C, les appels systèmes, les fonctions de la bibliothèque
apparaissent en italique.
/* shell.c */
#define DEBUG 1
#include <stdio.h>
#include <signal.h>
#include <setjmp.h>
#define EXTERN
#include "statics.h"
static jmp_buf env;
/* PROTOTYPES */
extern char *Index(char *, char ) ;
extern void analyse(char *) ;
extern int no_perluette(void) ;
extern void argument (char **) ;
extern void change_dir(void) ;
extern void foreground(void) ;
extern void job_list(void) ;
extern int exec_intern(char *) ;
extern void init_job_tb(void) ;
extern int get_job_num(void) ;
extern int change_job(int , int ) ;
extern void get_path(void) ;
extern void get_repere(char []) ;
extern void redirect (void) ;
extern void attendre(void) ;
extern void nada(int) ;
extern void exit(int) ;
void attendre(void)
{int qid, etat, state;
if(setjmp(env) == 0)
for(;;)
{ qid = wait(&etat);
#ifdef DEBUG
printf("Fin de %d\n",qid);
#endif
state = change_job(qid, 0);
if(state == FOREGROUND) break;
}
}
198
CHAPITRE VII
──────────────────────────────────────────────────────────────
static int pid;
void nada(int signum)
{change_job(pid, BACKGROUND);
longjmp(env, signum);
}
int no_perluette(void)
{ int iw;
for(iw = 0; word_tb[iw] ; iw++) if(*word_tb[iw] == '&') return(0); /* arrière plan */
return(1);
/* avant plan */
}
int main(void)
{int jn, iw;
char *arg_tb[11];
get_path();
init_job_tb();
signal(SIGINT, nada);
for(;;)
{printf("$");
if(gets(ligne) == NULL) break;
analyse(ligne);
#ifdef DEBUG
for(iw=0; word_tb[iw]; iw++) printf ("\n\n %d -> %s \n", iw, word_tb[0]) ;
#endif
if(word_tb[0] == (char *) NULL) continue;
if(exec_intern(word_tb[0])) continue;
if((jn = get_job_num()) < 0) {printf("Trop de travaux en train\n"); continue; }
if((pid = fork()) ==0)
{redirect();
/* processus fils */
argument(arg_tb);
get_repere(word_tb[0]);
signal(SIGINT, SIG_IGN);
execv(repere,arg_tb);
perror("shell");
exit(1);
}
#ifdef DEBUG
printf("lancement de %d\n",pid);
#endif
job_tb[jn].id = pid;
if(no_perluette())
{ job_tb[jn].status = FOREGROUND;
attendre();
}
else
{ job_tb[jn].status = BACKGROUND;
printf("%d\n",pid);
}
}
}
LES INTERPRETES DE COMMANDES KORN SHELL ET BASH
199
──────────────────────────────────────────────────────────────
■
Variables communes
Les variables communes à l'ensemble des fichiers sources sont définies dans le fichier
à inclure "statics.h".
La constante EXTERN est utilisée pour obtenir une véritable déclaration dans le
fichier "shell.c" et des déclarations externes dans tous les autres. C'est un artifice de
présentation.
/* fichier statics.h */
#define NR 10
EXTERN char *repertoires[NR+1];
#define PL 256
EXTERN char pathtext[PL];
#define LL 80
EXTERN char ligne[LL];
#define NW 30
EXTERN char wordtext[LL+10];
EXTERN char *word_tb[NW+1];
#define RL 35
EXTERN char repere[RL];
extern struct internals { char *verb; void (* foo) (void); } intern_tb[];
/* gestion des travaux */
#define FOREGROUND 1
#define BACKGROUND 2
#define NJ 5
EXTERN struct job {int id; int status; } job_tb[NJ];
200
CHAPITRE VII
──────────────────────────────────────────────────────────────
■
Amélioration du choix de la commande
PATH
/* path.c */
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define EXTERN extern
#include <stdio.h>
#include "statics.h"
#define SEPAR ':'
#define LINK '/'
#define EXEC 1
void get_path(void)
{char *p , *q;
char *getenv( const char*);
int irep;
p = getenv("PATH");
#ifdef DEBUG
printf(".. %s\n", p);
#endif
if(p == (char *) NULL) repertoires[0] = (char *) NULL;
else
{irep = 0; q = pathtext;
do
{repertoires[irep++] = q;
while(*p) if (*p != SEPAR) *q++ = *p++; else break;
*q++ = LINK; *q++ = '\0';
}
while ((irep < NR) && *p++);
repertoires[irep] = (char *) NULL;
}
#ifdef DEBUG
for(irep = 0; repertoires[irep]; irep++) printf("-- %s\n", repertoires[irep]);
#endif
}
void get_repere(char verbe[])
{ char *stpcpy(char *, const char *);
char * strcat(char *, const char *);
int access(const char *, int);
int irep;
if(verbe[0] == LINK) {strcpy(repere, verbe); return; }
for (irep=0; repertoires[irep]; irep++)
{strcpy(repere, repertoires[irep]); strcat(repere, verbe);
#ifdef DEBUG
printf("?? %s\n", repere);
#endif
if(access(repere, EXEC) == 0) return;
}
strcpy(repere, verbe);
}
LES INTERPRETES DE COMMANDES KORN SHELL ET BASH
201
──────────────────────────────────────────────────────────────
■
Commandes externes
Toute commande externe est implémentée sous la forme d'une procédure accessible
par deux entrées dans la structure internals (son nom et son adresse) ce qui est efficace
et très élégant.
/* internal.c */
#include<stdio.h>
#define EXTERN extern
#include"statics.h"
void change_dir(void)
{
#ifdef DEBUG
printf("cd vers %s\n", word_tb[1]);
#endif
chdir(word_tb[1]);
}
void foreground(void)
{int atoi(const char *);
int pid;
pid = atoi(word_tb[1]);
if(change_job(pid, FOREGROUND)) attendre();
}
void job_list(void)
{int jn;
for(jn= 0; jn <NJ; jn++) if(job_tb[jn].status!=0) printf("%d\n", job_tb[jn].id);
}
struct internals intern_tb[] = { {"cd", &change_dir },
{"foreground", &foreground },
{"jobs" ,&job_list},
{NULL, NULL}
};
int exec_intern(char *c)
{ int i;
int strcmp(const char *, const char *);
for(i=0; intern_tb[i].verb; i++) if(strcmp(c, intern_tb[i].verb )== 0) break;
if(intern_tb[i].verb) {(* intern_tb[i].foo)(); return(1); }
return(0);
}
202
CHAPITRE VII
──────────────────────────────────────────────────────────────
■
Analyse de la ligne de commande
/* analyse.c */
#include <stdio.h>
#define EXTERN extern
#include "statics.h"
static char delim_string[] = " <>|&";
char *Index(char *s, char c) /* pour la différentier de la fonction de bibliothèque index */
{for(;*s;s++) if(*s == c) return(s);
return((char *) NULL);
}
void analyse(char *c)
{char *p, *q;
int iw=0;
p = c;
q = wordtext;
while(iw < NW)
{while(*p == ' ') p++;
if(*p == '\0') break;
word_tb[iw++] = q;
while(*p) if(Index(delim_string,*p) == 0) *q++ = *p++; else break;
if(q == word_tb[iw-1]) iw--; else *q++ = '\0';
if(*p && *p != ' ')
{word_tb[iw++] = q;
*q++ = *p++;
*q++ = '\0';
}
}
word_tb[iw] = NULL;
#ifdef DEBUG
for(iw = 0; word_tb[iw]; iw++) printf("// %s\n",word_tb[iw]);
#endif
}
LES INTERPRETES DE COMMANDES KORN SHELL ET BASH
203
──────────────────────────────────────────────────────────────
■
Transmission des arguments
/* argument.c */
#define EXTERN extern
#include "statics.h"
void argument (char *Table[])
{int iw , iarg = 0;
for (iw = 0 ; word_tb[iw] ; iw++ )
{switch (*word_tb[iw])
{case '>' :
case '<' : iw++ ; break ;
case '&' :
case '|' : break ;
default : Table[iarg++] = word_tb[iw] ; break ;
}
if (iarg > 9) break ;
}
Table[iarg] = (char *) NULL ;
}
■
Redirection
/* redirect.c */
#include <stdio.h>
#define EXTERN extern
#include "statics.h"
#define O_READ 0
#define O_WRITE 1
void redirect (void)
{int iw, c, mode, fd;
for (iw=1 ; word_tb[iw] ; iw++)
{c = *word_tb[iw];
#ifdef DEBUG
printf("<> %c\n",c);
#endif
if(c == '<' || c=='>')
{mode=c == '<' ? O_READ : O_WRITE; iw++;
if((fd=open(word_tb[iw],mode))<0)
{perror(">>"); if(mode) fd = creat(word_tb[iw],0777);};
if(fd >=0)
{
#ifdef DEBUG
printf("redirection de %s vers %s\n", mode?"sortie":"entrée", word_tb[iw]);
#endif
dup2(fd,mode);
close(fd);
}
else perror("<>");
}
}
}
204
CHAPITRE VII
──────────────────────────────────────────────────────────────
■
Contrôle des travaux
La fonction no_perluette est implémentée dans le fichier shell.c. Elle permet de
programmer l'éventuelle attente d'une tâche (procédure attendre) à partir de son état
(avant ou arrière plan).
Amélioration de la prise en compte du caractère &
La version présentée offre déjà l'amélioration demandée.
Gestion du signal sigint
Elle est implémentée dans le fichier shell.c. Le principe en est le suivant :
• le processus fils est lancé, protégé contre les effets du signal INT.
• Le processus shell récupère ce signal dans la fonction nada, qui modifie le mode
d'exécution du processus interrompu à l'état background. On suppose que ce signal
n'est émis que pendant l'attente de la fin du travail.
• La fonction attente a préparé un point de retour avec la primitive setjump. Quand
le signal se produit, tout se passe comme si la primitive setjump retournait une
deuxième fois une valeur non nulle ce qui provoque la sortie de la fonction
attendre.
Commande foreground
Elle est implémentée dans le fichier "internal.c"
Commande jobs
/* jobs.c */
#include <stdio.h>
#define EXTERN extern
#include "statics.h"
void init_job_tb(void)
{int jn;
for(jn=0; jn<NJ; jn++) job_tb[jn].status = 0;
}
int get_job_num(void)
{int jn;
for(jn=0; jn<NJ; jn++) if(job_tb[jn].status == 0) return(jn);
return(-1);
}
int change_job(int job_id, int ns)
{int jn,st;
for(jn=0; jn<NJ; jn++)
if(job_tb[jn].id == job_id)
{st = job_tb[jn].status;
job_tb[jn].status = ns;
return(st);
}
printf("Travail inconnu\n");
return(-1);
}
LES INTERPRETES DE COMMANDES KORN SHELL ET BASH
205
──────────────────────────────────────────────────────────────
■
Fichier makefile
CC=gcc
analyse.o: analyse.c statics.h
path.o :path.c statics.h
argument.o : argument.c statics.h
internal.o: internal.c statics.h
redirect.o :redirect.c statics.h
jobs.o : jobs.c statics.h
shell.o: shell.c statics.h
shell: analyse.o path.o argument.o internal.o redirect.o jobs.o shell.o
$CC analyse.o path.o argument.o internal.o redirect.o jobs.o shell.o -o shell
CHAPITRE VIII
GESTION DES ENTREES/SORTIES
1.
PARTITIONNEMENT D'UN VOLUME
Pour pouvoir stocker l'information, un disque dur est divisé en parties disjointes
appelées partitions, chacune constituant un disque logique.
Partition 0
Partition 1 Partition 2
Exemple
■
Partitionnement
Le partitionnement d'un volume n'est pas normalisé et est délicat : une trop grande
taille de partition pénalise le temps de recherche, une trop petite taille conduit à une
probable saturation. Il faut en particulier correctement dimensionner les partitions
racines de l'arborescence et les fichiers d'échanges.
■
Systèmes de fichiers
Un système de fichiers (file system) est un conteneur de fichiers d'une partition
structurée logiquement à cet effet. Différents types de systèmes de fichiers existent
(NTFS, FAT, REISER, etc.). Toute distribution standard de Linux en propose plus de
300.
■
Volume physique
Un volume physique est une entité matérielle pouvant contenir plusieurs systèmes de
fichiers d'une taille fixée dont la modification n'est pas possible sans destruction des
données contenues.
208
CHAPITRE VIII
──────────────────────────────────────────────────────────────
■
Volume logique (IBM)
Un volume logique peut être constitué de plusieurs volumes physiques.
Le gestionnaire de volumes logiques (Logical Volume Manager) gère les associations
entre volumes logiques et physiques pour créer des disques miroirs, des disques
logiques d'une taille extensible dynamiquement ou des systèmes de fichiers répartis sur
plusieurs volumes physiques.
■
Avantages
La répartition des fichiers sur plusieurs disques physiques et/ou logiques améliore les
performances des entrées/sorties.
Les fichiers d'échanges sont localisés dans une partition.
■
Partitionnement Windows
L'administrateur de disques est l'interface graphique de Windows de gestion des
volumes : état des disques et volumes (taille des partitions, espace disponible, lettre
associée au volume logique, nom, type de système de fichiers), modification des
lettres de lecteur, création de partitions, formatage, vérification des systèmes de
fichiers, etc.
La partition principale permet de démarrer le système matériel et il y en a une au
moins sur un disque dur. Il peut y en avoir quatre au plus pour démarrer avec
différents systèmes d'exploitation (Unix, OS/2, Linux, etc.).
Une partition étendue contient des disques logiques.
• Il y en a une au plus sur un disque dur, cette dernière contenant le(s) disque(s)
logique(s).
• Elle peut aussi contenir le système d'exploitation Linux, accessible par un chargeur
(LILO, GRUB (GNU)), etc.
Le premier partitionnement d'un disque dur est effectué à son installation.
L'administrateur de disques permet de modifier et/ou partitionner un disque dur. Il
n'est accessible qu'aux membres du groupe Administrateurs.
■
Partitionnement Unix
Sous Unix, la table VTOC (Virtual Table Of Contents) contient les informations du
partitionnement (octets, cylindres, secteurs). Il peut y avoir au plus 255 partitions.
GESTION DES ENTREES/SORTIES
209
──────────────────────────────────────────────────────────────
Synopsis
mkvtoc [options] fichier_spécial_en_mode_raw
Options
p affichage de la table VTOC (sortie standard)
u partitionnement d'un disque utilisateur
s fichier partitionnement à partir d'un fichier VTOC (recommandée).
Exemple
*#ident "Header: hp97548 12.4 1991/05/21 $"
* Dimensions
*
512
bytes/sector
*
56
sectors/tracks
*
16
tracks/cylinder
*
896
user accessible sectors/cylinder
*
1447 cylinders
1445 user accessibles cylinders
* Types
00
No partition
01
Regular Partition
02
Boot Block
03
Reserved Disk Area
04
Firmware (not used on SCED SCSI disk)
Partition Type Start Sector
Size in Sectors
0
1
520576
57176
1
1
577752
198184
2
1
775936
518784
3
1
4480
516096
12
4
32
4448
13
3
1294720
1792
14
2
0
16
15
3
16
16
2.
Block Sz
8182
8192
8192
8192
0
0
0
0
Frag Sz
1024
1024
1024
1024
0
0
0
0
SYSTEME DE FICHIERS
2.1 Structure d'un système de fichiers
Un système de fichiers est constitué de quatre unités fonctionnelles.
Bloc de boot
Super bloc
I-list des inodes
Adresses des
blocs de données
bloc 0
bloc 1
bloc 2
....
210
CHAPITRE VIII
──────────────────────────────────────────────────────────────
Le bloc 0 est utilisé au démarrage.
Le bloc 1 (super bloc) décrit l'organisation du système de fichiers.
Les blocs suivants contiennent la liste des descripteurs des fichiers. Viennent ensuite
les données, les blocs de chaînages entre les blocs de données, la liste des blocs libres.
Un système de fichier est géré par un pilote. Le nombre maximum des fichiers qu'il
peut contenir est imposé par sa taille et calculé à sa création. Pour l'augmenter, il est
nécessaire de reformater le disque après sauvegarde.
■
Descripteur d'un fichier
L'inode (abréviation de index-node (nœud d'index)) est le descripteur d'un
fichier : identificateur, taille, position sur le disque, attributs de propriété et de
sécurité.
L'index d'un fichier dans la table des inodes est appelé i-number (index number).
La première entrée de la liste des inodes (i-liste) est la racine du système de fichiers.
La nature et les droits d'accès d'un inode sont définis dans le fichier inode.h :
/* liens matériels, propriétaire */
u_short
mode;
short
nlink;
short
uid;
short
gid;
quad
size;
struct timeval
struct timeval
struct timeval
atime;
mtime;
ctime;
/* attributs et type du fichier */
/* nombre de liens matériels */
/* identificateur du propriétaire */
/* identificateur du groupe */
/* nombre d'octets du fichier */
/* date de dernier accès */
/* date de dernière modification */
/* date de création */
#define IFMT
0170000
/* type du fichier */
#define IFCHR
0020000
/* fichier spécial en mode caractère */
#define IFDIR
0040000
/* répertoire */
#define IFBLK
0060000
/* fichier spécial en mode bloc */
#define IFLNK
0120000
/* lien matériel */
#define IFSOCK 0140000
/* prise de communication (socket) */
#define IFIFO
0010000
/* tube nommé */
#define ISUID
04000
/* user id à l'exécution */
#define ISGID
02000
/* group id à l'exécution */
#define ISVTX
01000
/* sauvegarde du texte swappé */
/* droits d'accès en lecture, écriture, exécution */
#define IREAD
0400
#define IWRITE 0200
#define IEXEC
0100
Soit Tb la taille d'un bloc (octets). Le nombre d'adresses de n octets d'un bloc est Tb/n.
Les 12 premiers blocs d'un fichier sont atteints directement, les (Tb/n) blocs suivants
par indirection simple, les (Tb/n)2 blocs suivants par indirection double, les (Tb/n)3
derniers blocs par indirection triple.
La taille T maximum d'un fichier est obtenue par la formule :
T = Tb * (12+(Tb/n)+(Tb/n)2+(Tb/n)3)
GESTION DES ENTREES/SORTIES
211
──────────────────────────────────────────────────────────────
Les blocs sont alloués par fragments (8 dans 1 bloc) pour minimiser l'espace perdu.
accès direct
Super
bloc
Liste des
inodes
Adresse
des blocs
En tête
0 ...
accès indirect
11
13
14
indirection
double
Données
Données
Indirection simple
12
indirection
triple
adresses
adresse des blocs
0 1 2
3 ........ 2046 2047
adresses
adresses
Données
Données
Données
Données
Données
Données
Recherche des blocs (BSD)
2.2 Création d'un système de fichiers
Sous Unix/Linux, la création d'un système de fichiers (commande mkfs ou
newfs (interface BSD vers mkfs)) est exécutée en mode cru (raw), avant tout montage.
Sa nature (AFS, EXT3, NTFS...) est importante. Le répertoire lost+found est crée sur
tout système de fichiers pour contenir des fichiers ou des blocs récupérés.
Synopsis
mkfs [-y|-n][-f type_fs] fspecial blocs [:inodes][gap bloc/cylindre][fs_options]
newfs [-nNv][options_de_mkfs] fichier_spécial
Description
Création d'un système de fichiers sur un fichier spécial dont la taille est déterminée
par le nombre de blocs ou d'inodes et le type par l'option f.
Quelques options (newfs)
n
partition non "bootable"
N
affichage des paramètres courants du système de fichiers.
Options transmises à la commande mkfs
b
taille des blocs en octets
c#cylindre/group nombre de cylindres dans un groupe.
f
taille d'un fragment
ibytes/inode
densité
m
pourcentage d'espace réservé aux utilisateurs.
t#pistes/cylindre
le nombre de pistes par cylindre.
212
CHAPITRE VIII
──────────────────────────────────────────────────────────────
L'option m module le pourcentage par défaut du système de fichiers affecté aux
utilisateurs défini ainsi : tout système de fichiers compte 110 % d'occupation
potentielle ; 10% pour le système, 100 % pour les utilisateurs.
2.3 Systèmes de fichiers virtuels et fichier virtuel
Le montage d'un système de fichiers dans un réseau généralise le montage local.
Un système de fichiers virtuel (Virtual File System - VFS) est une interface commune
aux différents systèmes de fichiers qui masque leur nature (SUN) ce qui permet l'accès
à des systèmes de fichiers répartis ou distribués (Network File System - NFS).
Virtual File System
table fsswitch
SV
UFS(BSD)
MS/DOS
NFS...
Un système de fichiers virtuel est constitué de fichiers virtuels.
2.4 Tables systèmes de gestion des fichiers
■
Descripteurs des fichiers ouverts par un processus
La création ou l'ouverture d'un fichier génère un descripteur dans la table u_ofile[]
(structure U), 0 pour le fichier standard d'entrée (clavier), 1 pour le fichier standard de
sortie (écran) 2 pour le fichier standard d'affichage des messages d'erreurs.
■
Table des fichiers ouverts
La table file[] contient la liste de tous les fichiers ouverts à un instant donné.
struct
struct
int
short
short
short
file {
file *f_next;
flag;
type;
count;
msgcount;
/* pointeur de chaînage structure suivante ou freelist */
/* drapeaux d'accès */
/* descripteur du type du fichier */
/* compteur des appels open */
/* références des files de messages */
/* opérations sur la structure file */
struct
fileops {
int
(*rw)();
int
(*ioctl)();
int
(*select)();
int
(*close)();
} *f_ops;
caddr_t data;
/* inode */
off_t
offset;
/* déplacement */
};
GESTION DES ENTREES/SORTIES
213
──────────────────────────────────────────────────────────────
/* drapeaux utilisés par l'appel système fcntl */
#define FOPEN
(-1)
#define FREAD
00001
/* habilité en lecture/réception */
#define FWRITE
00002
/* habilité en écriture/émission */
#define FNDELAY
00004
/* entrée/sortie synchrone */
#define FAPPEND
00010
/* mise à jour à chaque écriture */
#define FSHLOCK
00200
/* verrou de partage présent */
#define FEXLOCK
00400
/* verrou d'exclusion mutuelle */
/* mode de création */
#define FCREAT
#define FTRUNC
#define FEXCL
01000
02000
04000
/* création si fichier inexistant */
/* troncature à une longueur nulle */
/* erreur si le fichier existe déjà */
/* drapeaux pour l'appel système open */
#define O_RDONLY
000
#define O_WRONLY
001
#define O_RDWR
002
#define O_NDELAY
FNDELAY
#define O_APPEND
FAPPEND
#define O_CREAT
FCREAT
#define O_TRUNC
FTRUNC
#define O_EXCL
FEXCL
/* ouverture en lecture seulement */
/* ouverture en écriture seulement */
/* ouverture en lecture écriture */
/* ouverture non bloquante asynchrone */
/* mise à jour à chaque écriture */
/* ouverture avec la création */
/* ouverture avec troncature */
/* erreur en création si existence */
/* drapeaux de verrou (appel lockf) */
#define LOCK_SH
1
#define LOCK_EX
2
#define LOCK_NB
4
#define LOCK_UN
8
/* verrou partagé */
/* verrou exclusif */
/* non blocage au verrouillage */
/* déverrouillage */
/* drapeaux des droits d'accès */
#define F_OK
0
#define X_OK
1
#define W_OK
2
#define R_OK
4
/* drapeau d'existence */
/* exécutable */
/* écriture autorisée */
/* lecture autorisée */
/* appel lseek : définition des déplacements autorisés */
#define L_SET
0
/* absolu */
#define L_INCR
1
/* par rapport à l'adresse courante */
#define L_XTND
2
/* relatif à la fin du fichier */
La variable offset est le pointeur de déplacement dans le fichier (lecture et écriture).
Lors de la création d'un processus, le fils partage les attributs des fichiers ouverts par
son père et la modification du champ offset par l'un est répercutée dans l'autre. Pour
l'éviter, le fils doit exécuter l'appel système open pour disposer de son propre pointeur
de déplacement.
La variable count représente le nombre d'ouvertures simultanées d'un fichier dans un
ou plusieurs processus.
Sous Unix/Linux, la gestion des accès concurrents est reléguée au niveau de
l'application.
214
CHAPITRE VIII
──────────────────────────────────────────────────────────────
■
Table des descripteurs
La table inode[] contient la liste des fichiers chargés en mémoire.
struct inode {
struct vnode vnode;
struct vnode *devvp;
u_long
flag;
dev_t
dev;
ino_t
number;
int
diroff;
struct fs *fs;
struct inode *inode;
struct inode *inode NINODE;
int
ninode;
struct
dquot *dquot;
}
/* opérations sur les inodes */
extern struct inode
*ialloc();
extern struct inode
*iget();
/* drapeaux */
#define
ILOCKED
0x1
#define
IUPD
0x2
#define
IACC
0x4
#define
IMOUNT
0x8
#define
IWANT
0x10
#define
ITEXT
0x20
#define
ICHG
0x40
#define
ISHLOCK
0x80
#define
IEXLOCK
0x100
#define
ILWAIT
0x200
#define
IREF
0x400
#define
IFIR
0x500
#define
IFIW
0x600
/* vnode associée à l'inode */
/* vnode pour e/s mode bloc */
/* drapeaux d'état */
/* volume associé à l'inode */
/* i_number associée */
/* dernière entrée du répertoire */
/* système de fichiers associé */
/* pointeur sur la table des inodes */
/* fin de la table des inodes */
/* nombre d'inodes dans la table */
/* quotas associés à ce fichier */
/* inode verrouillé */
/* fichier modifié */
/* heure d'accès à l'inode modifiée */
/* système de fichiers monté sur l'inode */
/* processus en attente de verrouillage */
/* inode exclusivement texte */
/* modification de l'inode */
/* fichier avec verrou de partage */
/* fichier avec verrou exclusif */
/* processus en attente fichier verrouillé */
/* inode référencé */
/* lecteur (tube nommé) endormi */
/* rédacteur endormi (tube nommé) */
Les drapeaux indiquent :
• l'accès du fichier par un ou plusieurs processus,
• la modification du fichier en mémoire pour un éventuel vidage du cache disque,
• la modification de l'inode pour réécriture,
• le montage éventuel du système de fichier,
• si le fichier est en cours d'exécution ce qui interdit son écriture mais non sa lecture.
Chaque ouverture du fichier incrémente le champ count et chaque fermeture le
décrémente jusqu'à la restitution de l'entrée dans la table.
De la même façon, la suppression d'un fichier (appel système unlink) décrémente le
nombre de liens matériels (compteur unlink). L'inode correspondante est restituée à la
liste des inodes libres quand il devient nul.
GESTION DES ENTREES/SORTIES
215
──────────────────────────────────────────────────────────────
Exemple
On suppose que les processus Pi et Pj ont ouvert le même fichier. Le processus Pj en a
ouvert un deuxième. D'où le schéma d'accès suivant :
u_ofile[]
file[]
inode[]
mémoire centrale
Pi
bmap
Pj
User
Noyau
La table u_ofile[] est locale au processus.
La table file[] des fichiers ouverts en mémoire centrale est résidente.
La table inode[] est la table des inodes actives en mémoire.
La lecture est immédiate quand le fichier est chargé en mémoire centrale. Dans le cas
contraire, la primitive bmap permet l'accès au fichier sur le disque.
3.
MONTAGE
Le montage d'un système de fichiers permet l'intégration de son contenu dans
l'arborescence. Sous Windows, il consiste à associer une lettre à un volume logique.
Exemple
■
La commande mount
Synopsis
mount [-r][-f[NFS]][rhost:]système_de_fichier repertoire_de_montage
Quelques options
r système de fichiers local monté en lecture seule
f
type du système de fichiers monté,
NFS système de fichiers distant d'un type quelconque (protocole NFS)
216
CHAPITRE VIII
──────────────────────────────────────────────────────────────
■
Montage au démarrage
Les systèmes de fichiers à monter au démarrage sont décris dans un des fichiers du
dossier /etc (vfstab, fstab, filesys, etc.) dont le format (simplifié) d'une entrée est :
système_de_fichiers point_ de_montage
options, type
Description
Le champ système_de_fichier est le chemin d'accès du fichier spécial à intégrer dans
l'arborescence au point de montage (un répertoire existant).
Le mot clé swap indique un fichier d'échanges.
Le champ type indique le type du système de fichiers qui peut être masqué (protocole
NFS). Pour un fichier d'échanges, il faut utiliser le mot clé ignore.
Le champ options indique le type de montage : rw (lecture et écriture) ou ro (lecture
seule).
Le mot clé quota définit un système de fichiers avec quotas.
Le montage dynamique est également possible (automonteur).
Exemple1
/dev/dsk/c2d0s0
/dev/dsk/c2d0s1
/dev/dsk/c2d1s0
/dev/dsk/c2d1s1
/dev/dsk/c2d1s2
antinea:/usr2
/
swap
/usr
swap
/home
/usr2
4.2
rw
ignore .
4.2
rw
ignore .
4.2
rw
nfs, soft
Exemple 2 : montage manuel d'un périphérique amovible
Une clé USB (fichier spécial /dev/usb0) doit être préalablement formatée. Le point de
montage (répertoire /mnt) est utilisé de la façon suivante :
mount /dev/usb0 /mnt
■
Table des systèmes de fichiers montés
La commande mount exécutée sans argument affiche les systèmes de fichiers montés
(fichier /etc/mnttab ou /etc/mtab). Le champ System indique si le système de fichier
est local ou distant.
Exemple
System
[local]
[local]
[local]
■
Device name
/dev/dsk/c2d0s0
/dev/dsk/c2d0s2
/dev/dsk/c2d1s2
Mount Directory Description
/
/usr
/home
user home directories
Failles de sécurité et privilège de montage
Le droit banalisé d'effectuer des montages est une faille de sécurité car certaines
options permettent le montage local de fichiers distants avec conservation de leurs
privilèges.
GESTION DES ENTREES/SORTIES
217
──────────────────────────────────────────────────────────────
Supposons le répertoire /user non vide avant montage. Après montage, tous les
fichiers présents avant montage deviennent invisibles et inaccessibles. Ils
redeviennent accessibles après démontage.
Le droit d'écriture ou lecture sur les systèmes de fichiers est déterminé au montage. En
mode lecture, toute écriture est interdite, quels que soient les droits des fichiers ou des
répertoires qui y sont contenus. Il faut toujours redémarrer le poste de travail, après
avoir modifié la table des systèmes de fichiers, pour pouvoir remonter un fichier en
écriture. C'est donc une protection absolue très contraignante.
■
Démontage
Le démontage d'un système de fichiers (commande umount) le rend inaccessible et
invisible. Le système de fichier racine ou un système de fichiers en cours d'utilisation
ne peut être démonté (device busy). Le système de fichiers contenant /usr ne peut être
démonté qu'en mode mono-utilisateur.
4.
COHERENCE DES SYSTEMES DE FICHIERS
La cohérence des systèmes de fichiers est essentielle à l'intégrité du système matériel.
Elle doit être contrôlée périodiquement.
4.1 Algorithme de contrôle de cohérence
La cohérence d'un système de fichiers est vérifiée par le contrôleur de système de
fichiers (file system checker – fsck sous Unix/Linux, chkdsck ou scandisk sous
Windows). Cet utilitaire doit être exécuté sur un système de fichiers démonté, sans
utilisation du cache (mode raw).
Les inconsistances recherchées sont les suivantes :
• blocs associés à plusieurs descripteurs de fichiers dans la liste des blocs libres,
• bloc associé à un descripteur de fichiers disponible accessible hors du système de
fichiers,
• nombre de liens matériel incorrect,
• contrôles de la taille : nombre de blocs incorrect, taille de répertoire incorrecte,
• descripteurs de fichiers incohérents, blocs perdu, contrôle de répertoires, fichiers
pointant sur un descripteur de fichiers non alloué, nombre de blocs alloués
supérieur au nombre de blocs disponibles, mauvais format de la liste de blocs
disponibles, incohérences des nombres de blocs libres et des inodes non alloués.
■
Démarrage
Il est judicieux d'exécuter le contrôle de cohérence à chaque démarrage ou
périodiquement même si cette opération est longue et que le système est toujours
arrêté correctement. On peut le paramétrer pour qu'il ne s'exécute au démarrage qu'en
cas d'arrêt incorrect (système dirty).
218
CHAPITRE VIII
──────────────────────────────────────────────────────────────
4.2 Mode opératoire
■
Initialisation
Contrôle des options de la commande et de la validité du super bloc par comparaison
de la liste des nœuds d'index avec la taille du système de fichiers. Si la taille de la liste
des nœuds d'index est supérieure à celle du système de fichiers, le super bloc est
modifié.
■
Phase 1 et 1B : contrôle de la taille des blocs et des nœuds d'index
Ces contrôles sont effectués pour les types de fichiers, leur taille, le nombre de liens
matériels, les adresses des blocs, ainsi que la liste des nœuds d'index (fsck –p).
L'identification d'un bloc dupliqué provoque une nouvelle analyse du système de
fichiers pour retrouver le descripteur de fichiers correspondant (Phase 1B).
■
Phase 2 : contrôle des chemins d'accès et des répertoires non référencés
Suppression des descripteurs de fichiers défectueux détectés dans les phases 1 et 1B.
■
Phase 3 : contrôle de la connectivité des répertoires non référencés
Si le nœud d'index associé à un sous-répertoire n'existe pas, il est crée, éventuellement
dans le répertoire lost+found.
■
Phase 4 : contrôle du nombre de liens matériels
Recherche de fichiers non référencés, du nombre erroné de liens matériels, des blocs
défectueux ou dupliqués et du nombre incorrect de nœuds d'index. Les compteurs de
contrôle des références permettent la correction de problèmes associés à un nombre de
liens matériels incorrect, détectés dans les phases précédentes.
■
Phase 5 : contrôle des listes
Recherche des blocs défectueux, dupliqués, inutilisés ou en nombre incorrect dans la
liste des blocs libres ou alloués.
■
Phase 6 : reconstruction éventuelle de la free-liste
Quand tout semble correct, la commande affiche les différentes phases et le nombre
de fichiers, les nombres de blocs occupés et libres. Elle corrige certaines erreurs
(fichiers vides non référencés détruits...) et interroge l'opérateur (clear pour détruire
un fichier à problème, reconnect pour sauvegarder l'information dans le répertoire
lost+found avec comme nom le numéro du nœud d'index...).
L'image d'un système de fichiers modifié étant incorrecte dans le cache, le message
"Boot Unix (No Sync!)" indique qu'il faut redémarrer le système sans vider le cache.
■
Cohérence et tolérance de pannes
Un système de fichiers retrouve une cohérence après l'exécution d'une commande fsck.
Toutefois, il peut y avoir perte d'informations que l'on peut éventuellement récupérer
(sauvegarde ou répertoire lost+found).
GESTION DES ENTREES/SORTIES
219
──────────────────────────────────────────────────────────────
Synopsis
fsck [-option(s)] système_de_fichiers_en_mode_raw
■
Quelques options
y
D
f
suppose une réponse positive à toutes les questions posées par fsck
contrôle des répertoires (à utiliser après un crash)
contrôle rapide. La phase 6 est exécutée si nécessaire seulement.
Exemple
fsck -y /dev/rroot
5.
QUOTAS
Le comportement du système se détériore dès qu'un système de fichier est plein. Il faut
donc disposer d'espace disque et surveiller leur taux d'utilisation.
On peut définir des quotas par utilisateur (nombre de blocs et nombre maximal de
fichiers). Chaque limite est définie par deux paramètres :
• la limite dure (hard limit) est une limite absolue impossible de dépasser,
• la limite douce (soft limit), à partir de laquelle des messages sont émis pour
prévenir l'utilisateur qu'il risque d'atteindre ou dépasser la limite dure.
La limite douce peut être dépassée en cours de session.
Le service de quotas s'installe sur un système de fichiers donné en plusieurs étapes.
• Une modification du noyau peut être nécessaire.
• Il faut déterminer les systèmes de fichiers sur lesquels l'administrateur souhaite
installer le service de quotas par une modification de l'entrée du système de fichiers
concerné dans le fichier vfstab (option quota ou noquota) et par la création d'un
fichier quota sur chacun des systèmes de fichiers concernés, par exemple par la
commande cp /dev/null quota.
• Le fichier quota est modifié lors de la définition d'utilisateurs avec des quotas
(commande edquota).
• Les commandes quotaon et quotaoff gèrent respectivement le démarrage et l'arrêt
du service de quotas dont le contrôle est assuré par la commande quotacheck.
■
Installation permanente
Le service des quotas est initialisé de la façon suivante :
#contrôle des quota
echo -n 'checking quotas : ' > /dev/console
/etc/quotacheck -a -p > /dev/console 2 > &1
echo 'done.' > /dev/console
#mise en route du service des quotas
/etc/quotaon -a
220
CHAPITRE VIII
──────────────────────────────────────────────────────────────
6.
OUTILS AVANCES (UNIX/LINUX)
6.1 Débugger
L'utilitaire fsdb (file system debugger) permet de modifier un système de fichiers par
octet, par inode ou par bloc. Seul, l'administrateur peut l'utiliser.
Synopsis
fsdb chaîne_de_caractères
La chaîne de caractère représente un fichier spécial ou le nom d'un volume monté.
■
Format d'une directive
adresse[format d'impression]
adresse[opération d'affectation]
Il est judicieux de séparer les différents champs d'une commande par des points.
■
Directives
q
DEL
!
0
B,W,D
■
Sortie de fsdb,
Arrêt d'une impression,
Echappement vers l'interprète de commandes,
Mode vérification de la commande,
Sélection du type de données consultées (mode octet, mot,
double mot).
Format des adresses
nombre[mode]
[+]|[-]nombre
nombre[i]
nombre[b]
nombre[d]
Adresse absolue,
Déplacement relatif avant ou arrière,
Sélection d'un inode,
Sélection d'un bloc,
Sélection d'un répertoire.
Exemple
40b.d4.p8d
■
Format d'impression
C'est le dernier argument d'une directive de la forme :
i
d
b,c
o,e
■
Format inode,
Format répertoire,
Octet affiché en format octal ou caractère,
Format octal ou décimal.
Modification
Toute écriture étant immédiatement exécutée, il faut être en mode mono-utilisateur.
GESTION DES ENTREES/SORTIES
221
──────────────────────────────────────────────────────────────
■
Affectation
=
=+
=="chaîne_de_caractères"
■
Affectation numérique,
Affectation incrémentielle,
Affectation décrémentielle,
Affectation d'une chaîne de caractères.
Modification d'un inode
L'instruction d'affectation est constituée de 4 champs :
l'adresse,
le mnémonique à utiliser caractérisant la nature de l'information à modifier,
l'opérateur =
la valeur.
■
Mnémoniques autorisés
ln
at
mt
maj
min
sz
i#
md
a[i]
Nombre de liens matériels,
Dernier accès,
Dernière modification,
Le majeur,
Le mineur,
La taille en octet,
Le numéro d'inode,
Les droits d'accès,
L'adresse en bloc du bloc i.
Exemple
12i.ln=4
■
Visualisation du contenu d'un répertoire
numéro_d'inode.i.fd
■
Modification du contenu d'un répertoire
Changement du numéro d'inode selon le format
numéro_d'inodei.anuméro_de_blocbdnuméro_d'entrée
Exemple
54i.a2b.d18=23
222
CHAPITRE VIII
──────────────────────────────────────────────────────────────
6.2 Commandes
■
Nettoyage
Une recherche périodique (planificateur de travaux) s'impose pour purger les fichiers
temporaires inutilisés (fichiers core, nettoyage des dossiers /tmp, /usr/tmp, etc.).
■
Fichier d'échanges (swap)
L'ajout d'un fichier d'échanges (quelques Go) peut s'effectuer dynamiquement et il est
recommandé de l'installer sur un autre disque. Pour l'installer, il faut :
• créer le fichier d'échanges en définissant sa taille,
• activer la zone (commande swapon) qu'il est possible de désactiver (commande
swapoff)
Les commande swap –l et sar -r affichent des statistiques d'utilisation des fichiers
d'échanges (état, espace utilisé et disponible).
Sous Windows, il suffit d'accéder à la fenêtre gestion de la mémoire virtuelle.
■
ncheck
Affichage de la correspondance entre le numéro d'inode et le nom du fichier.
Synopsis
ncheck fichier_special_en_mode_raw inumber(s)
Exemple
ncheck /dev/rdsk/c2d0s0 8913 7498
/dev/rdsk/c2d0s0:
8913
/command.com
7498
/config.sys
GESTION DES ENTREES/SORTIES
223
──────────────────────────────────────────────────────────────
■
Taux d'occupation des disques
Affichage récursif du taux d'occupation des systèmes de fichiers montés et du nombre
de blocs d'un répertoire.
Synopsis
df -[t] -[f]-[i]-[v] [système_de_fichiers]
du [-as][-nom...]
Exemples
df -vi /dev/root
mount Dir Filesystem
/
/dev/root
df -t /usr
/
/usr
blocks used free
%used iused ifree %iused
684730 641786 42944 93% 25465 40023 38%
(dev/dsk/c2d0s0): 9610 blocks 12389 i-nodes total: 49896 blocks 13340 i-nodes
(dev/dsk/c2d1s0): 25305 blocks 73840 i-nodes total: 328016 blocks 81920 i-nodes
du -a /etc/vtoc
2 /etc/vtoc/m2333k
4 /etc/vtoc/m2344k
■
clri
La commande clri permet la suppression directe d'un lien matériel sur un système de
fichier démonté. Il est nécessaire ensuite d'en restaurer la cohérence.
Synopsis
clri système_de_fichier inumber
■
ff
La commande ff affiche par ordre croissant les fichiers d'un système de fichiers donné.
Synopsis
ff fichier_spécial
■
bdbclk
Cette commande permet de modifier la liste des blocs défectueux d'un disque.
Synopsis
bdbclk option fichier_spécial
Les options sont :
p
i
u
r
affichage de la table des secteurs défectueux,
vérification et initialisation de la table des secteurs défectueux,
vérification et mise à jour de la table des secteurs défectueux,
écriture de la table des secteurs défectueux transmis en argument.
224
CHAPITRE VIII
──────────────────────────────────────────────────────────────
7.
VOLUMES LOGIQUES (IBM-AIX)
■
Généralités
Le gestionnaire de volume logique (Logical Volume Manager - LVM) masque la
structure matérielle des disques durs considérés comme des disques logiques.
log
lv01
/
lv02
/usr
lv03
/tmp
lv04
Volumes logiques
■
Disques
Avantages
Un système de fichiers peut être réparti sur plusieurs disques durs et sa taille peut
croître dynamiquement.
Il est possible de créer des disques miroirs et des systèmes à tolérance de pannes.
■
Groupes de volumes physiques
Un volume physique est un périphérique réel formaté pour être utilisable par le LVM.
Un groupe de volumes physiques regroupe plusieurs volumes physiques tel le groupe
racine (root volume group) qui contient les volumes physiques de démarrage.
■
Partition physique
Une partition physique est une zone d'espace contiguë d'un volume physique. Sa taille
variable est définie au moment de l'ajout au groupe de volumes.
■
Gestion des groupes de volumes physiques et logiques
Un groupe de volumes physiques est organisé en volume(s) logique(s) sur le(s)quel(s)
les systèmes de fichiers sont définis.
GESTION DES ENTREES/SORTIES
225
──────────────────────────────────────────────────────────────
Groupe de volumes
physiques
Volumes Physiques
mkvg
redefinevg
mkvg
lsvg
chvg
reorgvg
Groupe de
volumes
physiques
désactivé
exportvg
Groupe de Volumes
extendvg
reducevg
varyoffvg
importvg
Groupe de Volumes
varyonvg
Groupe de
volumes physiques
activé
Volumes logiques
■
Graphe de création d'une arborescence
Volume physique
226
CHAPITRE VIII
──────────────────────────────────────────────────────────────
8.
CACHE DISQUE
■
Tampons
Une zone de mémoire tampon (buffer) contient des blocs lus par anticipation sur le
disque. Le cache disque (cache logiciel ou cache) est l'ensemble des mémoires
tampons.
■
Principes
Les lectures et les écritures sur disque sont réalisées par blocs.
Une opération d'entrée-sortie n'affectant que la copie en mémoire d'un bloc est
logique. Une entrée-sortie physique est l'écriture ou la lecture effective du bloc sur le
périphérique correspondant.
Une entrée/sortie logique n'entraînant pas d'accès disque, un bloc modifié n'est écrit
sur le disque que lorsque le cache est saturé (write behind) ce qui entraine des
incohérences en cas d'incidents sauf si les entrées/sorties sont journalisées. Pour y
remédier, un processus vide périodiquement le cache sur disque (sync).
■
Avantages
Réduction du nombre des accès disques.
Amélioration des performances par anticipation des lectures (read ahead).
Mise en commun des blocs d'entrées/sorties un bloc étant consultable plusieurs fois.
Désynchronisation des opérations logiques et physiques : l'accès à un octet
s'effectuant sans pénalisation en mémoire, un accès physique d'un bloc de 512 octets
permet 512 accès logiques d'un octet. Le processus utilisateur perçoit des
d'entrées/sorties synchrones gérées en mode asynchrone par le système d'exploitation.
GESTION DES ENTREES/SORTIES
227
──────────────────────────────────────────────────────────────
9.
PILOTES
9.1 Généralités sur les pilotes
■
Définition
Un pilote est un ensemble de fonctions constituant le niveau logiciel le plus "bas" du
sous système d'entrées/sorties, permettant au noyau de dialoguer avec un périphérique
de type donné.
Il est invoqué à partir d'une requête utilisateur ou à partir d'une interruption émise par
un contrôleur.
Il s'interface avec le noyau par des tables dont il doit respecter les normes ce qui se
traduit par le respect impératif de la définition d'une liste de fonctions dont les noms,
arguments, valeurs de retour, et structures de données internes sont figés.
Le principe d'interface entre le noyau et les pilotes est identique sur toutes les
implémentations même si le détail des tables d'interface varie.
Leur utilisation ne nécessite que la connaissance des structures de données, des
fonctions utilisées par le noyau et le pilote, et des méthodes permettant de les intégrer
dans le noyau.
Les pilotes fonctionnent en mode bloc ou en mode caractère.
■
Mode caractère
C'est le mode de fonctionnement par défaut de tous les périphériques.
■
Mode bloc
Un volume fonctionnant en mode bloc utilise des tampons du cache d'accès aléatoire.
Le cache est donc l'interface entre une requête d'un processus exprimée en octets et
une requête vers un périphérique exprimée dans l'unité de transfert de ce dernier.
Dans certains cas, le pilote gère en mode caractère un périphérique géré
habituellement en mode bloc ce qui constitue la définition d'une interface en mode cru
(raw device interface). Le flux des données vers le périphérique est alors géré comme
une suite (brute) d'octets non structurée.
Une entrée/sortie prend donc toujours comme unité de référence celle qui est imposée
par le périphérique.
L'obtention d'une information absente du cache nécessite trois phases :
• lecture de l'information sur le disque,
• chargement du cache,
• transfert du cache vers le processus.
228
CHAPITRE VIII
──────────────────────────────────────────────────────────────
9.2 Architecture
Le schéma ci-dessous représente l'architecture de l'interface noyau/pilote.
Appel système read
Mode utilisateur
interface pilote de niveau supérieur
(top half) en mode synchrone
Mode bloc
(cache
disque)
Mode c
Mode noyau
Table bdevsw
Table cdevsw
Bus d'entrées/sorties
interface pilote de niveau inférieur
(bottom half) en mode asynchrone
■
Tables
Le niveau haut d'un pilote (top half) est constitué de fonctions dont l'adresse est
définie par la structure bdevsw (mode bloc) ou la structure cdevsw (mode caractère).
struct bdevsw /* mode bloc */
{int (*open)();
/* ouverture */
int (*close)();
/* fermeture */
int (*strategy)();
/* initialisation ou terminaison */
int (*dump)();
/* écriture d'un dump mémoire */
int (*psize)();
/* taille d'une partition */
int flags;
};
struct cdevsw /* mode caractère */
{int (*open)();
/* ouverture */
int (*close)();
/* fermeture */
int (*read)();
/* lecture */
int (*write)();
/* écriture */
int (*ioctl)();
/* contrôle */
int (*stop)();
/* arrêt */
int (*reset)();
/* réinitialisation */
struct tty * ttys;
int (*select)();
/* contrôle */
int (*mmap)();
/* adressage en mémoire */
};
Les tables bdevsw et cdevsw sont constituées de pointeurs vers les fonctions du pilote
de nom générique xxopen, xxclose, xxread, xxwrite, …, pour le pilote de nom xx.
Le niveau bas (bottom half) du pilote est constitué de primitives qui pilotent
directement le contrôleur du périphérique (interruption, émission d'une requête, etc.).
GESTION DES ENTREES/SORTIES
229
──────────────────────────────────────────────────────────────
Exemple
struct bdevsw bdevsw[] = {
/* point d'entrée 0 : procédures associées au pilote md */
0, 8, DT_DEV, 0, mdopen, mdclose, mdstrategy, mddump, mdprint
/* point d'entrée 1 : procédures associées au pilote mt */
0, 1, DT_DEV, 0, mtopen, mtclose, mtstrategy, nulldev, mtprint,
/* point d'entrée 2 : procédures associées au pilote nfsd */
0, 1, DT_SW, 0, nulldev, nulldev, nfsdstrategy, nulldev, nfsdprint,
};
struct cdevsw cdevsw[] = {
/* point d'entrée 0 : pilote vide */
0, 0, 0, 0, 0, 0, nodev, nodev, nodev, nodev, nodev, nodev, nodev,
/* point d'entrée 1 : procédures associées au pilote nfs */
0, 1, DT_SW, 0, 0, 0, nulldev, nulldev, nodev, nodev, nfsdioctl, seltrue , seltrue,
/* point d'entrée 2 : procédures associées au pilote nm */
0, 1, DT_SW, 0, 0, 0, nulldev, nulldev, mmread, mmwrite, nodev, seltrue, seltrue,
};
Chaque entrée de la table a le même nombre de pointeurs et le nombre de primitives
accessibles à partir d'un appel système est le même quel que soit le périphérique. C'est
une contrainte car le pilote de chaque périphérique est un cas spécifique et une aide
car l'interface de conception est universelle.
Remarque
La primitive nodev retourne un message d'erreur et la primitive nulldev provoque
l'interruption du processus appelant.
■
Majeur, mineur
Chaque périphérique est accessible à partir d'une entrée du répertoire /dev réalisée par
la commande mknod.
Synopsis
mknod entree [b | c] majeur mineur
Le majeur est l'index du périphérique dans la table bdevsw ou cdevsw. Il en détermine
le type et permet l'accès à une ligne donnée donc aux primitives du pilote associé.
Le mineur permet l'identification de l'unité logique du périphérique sur laquelle le
pilote doit opérer comme une partition d'un disque ou un circuit virtuel d'une interface
réseau.
Exemple
mknod /dev/dka1 b 10 0
Cette commande définit le fichier en mode bloc /dev/dka1 dont les fonctions d'accès
sont à la dixième ligne de la table bdevsw.
230
CHAPITRE VIII
──────────────────────────────────────────────────────────────
9.3 Pseudo pilotes
On distingue trois méthodes d'intégration d'un nouveau service au système
d'exploitation :
• modification du noyau : c'est toujours délicat à mettre en œuvre,
• utilisation de l'architecture des pilotes et intégration au noyau : c'est la notion de
pseudo pilote (pseudo driver),
• utilisation de l'architecture des pilotes sans modification du noyau : c'est la notion
de pseudo périphérique (pseudo device).
Exemple
Un pseudo pilote de verrouillage et de déverrouillage d'accès d'un fichier peut être
défini à partir des trois procédures suivantes :
• Initialisation de la ressource (procédure lck_open).
• Gestion de l'accès exclusif en lecture à la ressource et de la file d'attente associée
(procédure lck_read).
• Libération de la ressource et réveil des travaux en attente (procédure lck_close).
void lck_open(void)
{lock = 0;}
void lck_read(void)
{ while (lock == 1) sleep(&lock);
lock = 1;
}
/* accès interdit si la ressource est utilisée */
/* entrée en section critique */
void lck_write(void)
{lock = 0;
wakeup(&lock,PRIO);
}
/* libération de la ressource */
/* réveil des processus en attente */
Après intégration de ce pseudo-pilote dans le noyau, on obtient l'accès exclusif à un
fichier par la séquence :
Processus actif
fd = open("/dev/lock", drapeau_d'accès,..)
read(fd,...);
…
write(fd,..);
/* création d'un verrou */
/* entrée en section critique */
/* sortie de la section critique */
/* déblocage de la ressource */
/* réveil éventuel des processus endormis */
Exercice
Ecrire une implémentation des opérations P et V sur des sémaphores binaires.
GESTION DES ENTREES/SORTIES
231
──────────────────────────────────────────────────────────────
9.4 Pseudo périphérique
■
Définition
Un pseudo périphérique est un fichier spécial de gestion d'un périphérique virtuel tels
les terminaux virtuels associés aux connexions dans un réseau local ou aux
environnements multi fenêtres.
■
Implémentation
Un pseudo terminal est représenté par deux entrées du répertoires /dev : ptyxy et ttyxy,
ou x est une lettre de l'intervalle [p,t] et y un numéro de l'ensemble [0-9a-f].
Les pseudos périphériques maîtres (ptyxy) et esclaves (ttyxy) coopèrent selon le
modèle serveur/client ce qui permet à une application lisant et écrivant sur un pseudo
périphérique esclave de travailler comme sur un périphérique réel.
Le pseudo périphérique esclave réachemine les requêtes vers le pseudo périphérique
maître qui appelle un processus d'exécution d'un traitement spécifique puis appelle le
pilote réel associé au périphérique.
Exemple : multi-fenêtrage
Dans le schéma qui suit, chaque processus shell utilise un couple (ttypy/ptypy). Un
serveur traite les requêtes de l'ensemble des couples (ttypy, ptypy) et s'interface avec le
pilote du périphérique.
sh1
sh2
ttyp1
ttyp2
ptyp1
Mode
utilisateur
démon
pilote
ptyp2
Mode
Noyau
contrôleur
Multifenêtrage
■
Quelques pseudo périphériques
L'entrée /dev/tty représente le périphérique virtuel d'affichage associé à un processus.
L'entrée /dev/null sert de poubelle chaque information qui y est redirigée étant perdue.
L'entrée /dev/mem est l'image mémoire d'un processus actif, accessible par un
débogueur (adb, sdb, dbx...).
L'entrée /dev/kmem est l'image mémoire du noyau. Elle doit être protégée par les
attributs convenables.
232
CHAPITRE VIII
──────────────────────────────────────────────────────────────
10. GESTION DES FLUX
10.1 Objectifs
Les flux (streams) de Dennis Ritchie gèrent modulairement les flux d'informations
avec les objectifs suivants :
• Structuration modulaire et en couches dans le noyau.
• Masquage des couches de niveau inférieur.
• Souplesse d'utilisation grâce à l'évolution dynamique des différents modules.
• Transparence des média.
• Partage possible d'un module par plusieurs contrôleurs de communication.
• Portage aisé des applications.
L'ensemble des outils de communications entre processus (tubes, tubes nommés, IPC,
etc.) est donc implémenté sous la forme d'un empilement de protocoles.
10.2 Streams et flux
Dans le présent paragraphe sont définis les termes associés aux flux de données.
Le terme stream est employé également dans la couche socket. Pour éviter toute
ambiguïté, dans tout ce qui suit, les streams de Dennis Ritchie sont nommés streams,
flux d'entrées/sortie ou simplement flux.
■
Flux
Un flux est un gestionnaire de périphériques constitué d'une chaîne de procédures de
traitement (stream module) opérant sur deux flux de données bidirectionnels entre un
processus et un pilote en mode full duplex (stream message).
■
Extrémités
Les deux extrémités d'un flux sont nécessaires. Elles sont définies du côté processus
en mode utilisateur, du coté pilote en mode noyau.
■
Flux de données
On distingue le flux des données descendantes du processus utilisateur vers le pilote,
et celui des données montantes du pilote vers le processus utilisateur.
Les variables d'état de chacun des flux ainsi que les files de messages associées sont
gérées par une file (stream queue).
• La file des messages montants (upstream queue) est aussi appelée file de lecture
(read queue) ou file des messages entrants.
• La file des messages descendants (downstream queue) est aussi appelée file
d'écriture ou file des messages sortants.
GESTION DES ENTREES/SORTIES
233
──────────────────────────────────────────────────────────────
Pr o ce ssus Utilisateu r
M o d e u tilisateu r
St r e a m He a d
M o d u le Stre am
Mo d e N o yau
Pilo te St ream
TT Y
10.3 Modules
■
Module stream
Un module stream ou module assure un traitement, éventuellement optionnel sur les
flux de données. Il est constitué d'un allocateur de mémoire privé, des deux flux de
données, de procédures internes, appelées services stream ou services, lui permettant
d'exécuter des opérations sur ces files.
Les services, implémentés dans le noyau, constituent un filtre bidirectionnel. Les
traitements peuvent être simultanés.
Chaque module s'exécute dans son propre contexte d'exécution.
■
Module de tête
Le module de tête du flux (stream head) constitue l'interface de dialogue entre le
processus utilisateur et les modules du noyau.
■
Module terminal
Le module terminal du flux (stream end) est le pilote-stream (stream driver), interface
du périphérique entre la chaîne des modules et le noyau.
■
Tables systèmes
Tout pilote est accessible par l'une des tables bdevsw ou cdevsw.
Tout module est identifiable par la table système fmodsw accessible à partir de l'appel
système ioctl, compatible avec les tables cdevsw et bdevsw. Les concepts classiques
(inode, utilisation des appels système d'entrée/sortie) restent vrais.
Le pilote stream a un point d'entrée dans le répertoire /dev ce que n'a pas un module.
234
CHAPITRE VIII
──────────────────────────────────────────────────────────────
■
Chaîne de modules
Un flux est une chaîne de modules, composée d'un module de tête et d'un module
terminal au moins.
Tous les modules ont une interface standard permettant leur empilement.
La chaîne des modules permet de constituer deux chemins de données où circulent des
messages.
Exemple
Les caractères saisis à partir d'un clavier sont transmis au processus destinataire (par
exemple getty) à partir de files de caractères, traitées par un pilote caractère.
■
Evolution dynamique d'une chaîne
Une chaîne de modules pouvant évoluer dynamiquement par empilement ou
dépilement de module, les pilotes deviennent donc chargeables dynamiquement s'ils
sont implémentés sous cette forme .
La prise en compte d'une modification du code d'un module peut nécessiter la
recompilation du noyau.
■
Services d'un module
Les opérations réalisées par un module sur un flot sont des services. Ils sont
optionnels et ne sont pas d'exécution immédiate car régulés par un gestionnaire interne
des priorités.
Le sous-système d'entrée/sortie est autonome dans le noyau car muni de ses appels
système propres, de son allocateur mémoire, de ses propres gestionnaires de travaux
(ordonnanceur, multiplexeur).
Exemples
Module-pilote d'un clavier de 102 touches gérant un clavier de 80 touches.
Module de chiffrement de données d'un disque.
■
Multiplexage de modules
Le multiplexage amont ou aval de files issues de différents modules est possible,
l'implémentation étant réalisée sous la forme d'un pseudo-pilote.
■
Application aux systèmes de communications
Le système de communications utilise les flux : la couche socket s'appuie donc sur des
modules streams même si l'interface utilisateur n'a pas changée.
GESTION DES ENTREES/SORTIES
235
──────────────────────────────────────────────────────────────
démon
USER
user1
user2
Module TCP
(multiplexeur)
NOYAU
Module IP
Module 8802.4
Module 8802.3
Module X25
10.4 Message
■
Définitions et propriétés
Le stream message ou message est l'unité de communication entre les modules. Il est
doté des propriétés suivantes :
• Typé (donnée ou contrôle).
• Géré dans l'espace mémoire propre de chaque module.
• La taille d'un message de données, constitué de listes chaînées de blocs de données,
peut varier dynamiquement au cours du transfert.
• Toute requête d'allocation de message est soumise à l'ordonnanceur local du
module.
• Le message doit traverser la chaîne des modules pour le traitement complet.
• Une file de messages est une liste chaînée de messages.
10.5 Appels système
La plupart des appels systèmes utilisés sont classiques (open, close, read, write, ioctl).
D'autres sont spécifiques (getmsg, putmsg, poll).
■
Appels système classiques
La sémantique et la syntaxe des appels systèmes classiques sont conservées ce qui
permet de réutiliser les programmes classiques avec les flux.
open
close
read
write
ouverture d'un flot,
fermeture d'un flot,
lecture en mode flot de données dans un module,
écriture en mode flot vers un module.
236
CHAPITRE VIII
──────────────────────────────────────────────────────────────
■
ioctl
L'appel système ioctl effectue des opérations sur les modules :
• insertion ou suppression dynamique d'un module dans une chaîne de modules à
partir du pilote stream seulement,
• multiplexage de messages entrants ou sortants,
• opérations de contrôle.
■
getmsg et putmsg
Les appels système putmsg et getmsg permettent des échanges de messages entre
modules.
■
poll
L'appel système poll permet de programmer des attentes multiples sur plusieurs flux
pour réceptionner les données, la gestion des codes d'erreur, ou le contrôle de flux.
Il permet la synchronisation entre modules distants : il scrute l'événement attendu sur
chaque descripteur de fichier. Le processus est bloqué si l'événement ne s'est pas
produit pendant une certaine durée ou jusqu'à ce qu'il apparaisse. Il émet alors un
signal de notification d'événement se produisant dans un module au processus
concerné. Son mode de fonctionnement est synchrone.
10.6 Ordonnancement
L'ordonnancement des messages dans un module est indépendant et différent de celui
du système d'exploitation.
L'ordonnanceur du module traite simultanément ses files des messages en mode FIFO
par activation des procédures de service associées. Les attentes sont aléatoires.
L'ordonnanceur du module est plus prioritaire que celui des processus utilisateurs et
est seulement interruptible par des traitements sur interruption de haut niveau. Les
transferts de messages entre modules étant très rapides, le routage est accéléré par
intégration au module.
Une procédure de service n'est pas obligatoire. Elle complète une procédure par
écriture du message dans la file locale.
Synopsis
int putq();
Description
Transmission du message entrant dans la file d'attente,
Sortie immédiate du niveau d'interruption courant,
Traitement ultérieur par l'ordonnanceur local.
GESTION DES ENTREES/SORTIES
237
──────────────────────────────────────────────────────────────
■
Contrôle de flux
Deux niveaux de contrôle de flux :
• global, au niveau de l'allocation du message pour la chaîne des modules,
• local, dans les modules dotés d'une procédure de type "service".
Soit Q la quantité de messages bloqués dans une file d'un module. Le contrôle de flux
local est réalisé à partir des constantes HIGHWATERMARK et LOWWATERMARK
selon l'algorithme :
si Q > HIGHWATERMARK alors attendre is
si Q < LOWWATERMARK alors redémarrer is
La primitive de bas niveau canput permet, au niveau de chaque module, la prise en
compte des variables de gestion du contrôle de flux.
Put Service
Module Q1
IW
HW
3 Appel de l'ordonnanceur local
Put Service
Module Q2
IW
Put Service
Module Q3
IW
2
Rétropropagation de l'arrêt
1
Arrêt du remplissage
HW
4 Le service Q3 vide la file
HW 5 L'ordonnanceur autorise
nouveau le remplissage
de la file
à
Exemple
if canput() putq; else (remise en attente);
Cette primitive doit être utilisée pour éviter un blocage du processus, avec une valeur
maximale impérative à ne pas dépasser (valeur HIGHWATERMARK). On remédie à
un blocage du flot par sa diminution.
238
CHAPITRE VIII
──────────────────────────────────────────────────────────────
11. CHARGEMENT DYNAMIQUE DES PILOTES
■
Pilotes et noyau traditionnels
Pour optimiser le noyau, il est judicieux de n'y intégrer que les pilotes nécessaires à la
génération puis tout ajout d'un pilote nécessite sa compilation et un redémarrage.
La configuration dynamique des pilotes y remédie depuis Unix SVR4.
■
Chargement dynamique
Les pilotes, systèmes de fichiers, modules streams, protocoles sont chargeables ou de
déchargeables dynamiquement.
• La partie basse du pilote (bottom half) s'interface donc dynamiquement avec le
contrôleur et le gestionnaire d'interruptions.
• La partie supérieure du pilote (top half) s'interface donc avec le noyau. Les entrées
complémentaires dans les tables bdevsw et cdevsw sont réalisées par les primitives
cdevsw_add, bdevsw_add.
Exemple
Sous Linux, un module est fichier objet (.o) qui peut être chargé et déchargé
dynamiquement en mémoire avec les commandes insmod et rmmod.
La commande lsmod affiche la liste des modules chargés.
Le serveur kerneld charge les modules au démarrage.
12. LE FONCTIONNEMENT DU PILOTE TTY
Le pilote tty gère les périphériques (terminaux, modem) sur liaison série en mode
asynchrone. Son architecture est représentée sur la figure suivante :
sortie
série
Pilote
TTY BUS
CPU
Périphérique d'affichage
getty
NOYAU
getty
clist
cblocs
getty
outq
ttyxx
ttyaa
ttybb
rawq, canonq
GESTION DES ENTREES/SORTIES
239
──────────────────────────────────────────────────────────────
Il existe deux modes de fonctionnement des terminaux.
■
Mode caractère
Les caractères sont transmis individuellement. On distingue :
• le mode cru (mode raw) : tout caractère saisi est immédiatement transféré sans
interprétation des caractères spéciaux.
• le mode cbreak : chaque caractère est transféré après filtrage des caractères
spéciaux définis dans une structure TTYCHARS.
■
Mode ligne
Appelé mode canonique ou mode cooked, c'est le mode usuel de transmission des
caractères avec interprétation des caractères spéciaux. Les caractères reçus sont saisis
ligne par ligne (ne ligne étant une suite de caractères interprétée seulement lorsque le
caractère de fin ligne est reconnu). Dans ce mode, les erreurs de frappe sont corrigées
par utilisation des caractères spéciaux :
• destruction de caractères (erase character),
• de mots (word erase character),
• de lignes (kill character).
Au cours des transferts, les caractères sont stockés dans trois listes différentes :
• la rawq contient les caractères saisis en mode raw,
• la canonq (canonalized queue) contient les caractères après filtrage de la rawq,
• l'outq stocke les caractères à la sortie du pilote.
Les structures de données utilisées sont :
• les c_listes, utilisées pour décrire une liste de caractères (mode caractère), de
longueur variable, en entrée ou en sortie. Elle est constituée de deux pointeurs sur
son premier et son dernier caractère ainsi que le nombre de caractères qu'elle
contient. Ces variables sont modifiées quand un caractère est ajouté ou supprimé de
la liste. Quand la structure c_liste est pleine, une nouvelle structure c_liste est
allouée.
• les c_bloc,utilisés par les pilotes fonctionnant en mode bloc.
La discipline de ligne est intégrée au noyau pour décrire le comportement de
l'interface et transformer le flot des données en mode raw en mode canonique.
240
CHAPITRE VIII
──────────────────────────────────────────────────────────────
13. ADAPTATION DU NOYAU UNIX/LINUX
L’intégration d’un service peut nécessiter une modification du noyau. Cette adaptation
peut être réalisée avec des fichiers de commandes (makefile) ou à partir d'une interface
graphique (SMIT (AIX), SAM (HP-UX), xconfig (Linux sous licence GNU), etc.).
Un noyau générique, d'une taille importante et pouvant gérer un grand nombre de
périphériques est utilisé à la première installation.
La génération d'un noyau s'effectue de la façon suivante :
• création des fichiers de configuration du nouveau noyau et modification (éditeur de
texte, interface graphique…)
• exécution du fichier de génération (makefile).
• transfert du nouveau noyau dans son répertoire du démarrage.
• test du démarrage de la station avec son nouveau noyau : il faut vérifier que la
génération du noyau se déroule sans erreur et impérativement conserver le noyau
initial comme noyau de secours.
■
Le noyau Linux
Linus Torvalds, créateur du noyau Linux, le maintient officiellement depuis le début
(1991). Il fait donc autorité.
Les différentes versions du noyau s'appellent mainline ou vanilla. Ces dernières sont
intégrées par les distributeurs, avec quelques modifications (patches) ainsi que des
corrections de bogues, des failles de sécurité ou des optimisations.
Numérotation
Les numéros de version du noyau sont composés de trois chiffres dont le premier est
le majeur, le second le mineur. Le troisième chiffre indique une révision (corrections
de bogues, de failles de sécurité, ajout de fonctionnalité), par exemple 2.4.30.
Antérieurement aux versions 2.6.x, les mineurs pairs indiquaient une version stable
(par exemple 2.2) et les mineurs impairs (par exemple 2.5) une version de
développement. Depuis la version 2.6, cette interprétation a été abandonnée.
Depuis 2005, Greg Kroah-Hartman et Chris Wright maintiennent une branche
stabilisée du noyau vanilla par intégration de correctifs (bogues, failles de sécurité) et
ajout d'optimisations répondant à des critères stricts, sans nouvelles fonctionnalités.
Leurs publications sont indiquées par un quatrième chiffre, par exemple 2.6.11.1.
Patches
Il existe une multitude de correctifs au sein de la communauté de développement du
noyau Linux dont les plus connus (Andrew Morton) intègrent des noyaux surchargés
fonctionnels (Working Over Loaded Kernel - WOLK). Ceux d'Ingo Molnar sont
utilisés par les distributions multimédia avec des fonctionnalités temps réel. Ingo
Molnar est aussi l'auteur du débogueur du noyau kgdb.
GESTION DES ENTREES/SORTIES
241
──────────────────────────────────────────────────────────────
Le code source du noyau Linux est disponible sur le site kernel.org.
La compilation d'un nouveau noyau impose d'exécuter dans l'ordre les commandes
suivantes :
• make mrproper
• make xconfig ou make menuconfig ou make config ou make oldconfig
• make dep
• make clean
• make bzImage
• make modules
• make modules_install
242
CHAPITRE VIII
──────────────────────────────────────────────────────────────
14. ARCHIVAGE ET SAUVEGARDES DANS LE MONDE
UNIX/LINUX
Il faut impérativement prévoir une sauvegarde périodique des données et du système
sur des supports amovibles. On distingue plusieurs types de sauvegardes : sauvegarde
complète d'un système de fichiers ou sélective des seuls fichiers modifiés, sauvegarde
d'un disque, sauvegarde incrémentale, etc.
14.1 Arborescence et commande tar
La commande tar permet de faire des sauvegardes, des restaurations, ou des transferts
entre différents postes de travail en copiant récursivement un répertoire et ses fichiers
en créant un unique fichier image tar (tarfile).
Elle peut créer un fichier d'archivage (option c) pouvant être relu avec la commande
tar (option x), ou transférer une arborescence (voir l'exemple ci-dessous)). Elle
transfère les liens symboliques sans résolution du nom.
Plusieurs fichiers images tar peuvent être stockées séquentiellement sur un même
média. Dans ce cas, il ne faut pas rembobiner la bande après une écriture (option n).
L'utilitaires mt (BSD) permet de s'y déplacer.
Synopsis simplifié
tar action [modificateur_action] [fichier_tar(source/cible)] [bloc] f1 [... fn]
Les action possibles sont c(création), t(liste), x(extraction).
Les modificateurs bfv ont la signification suivante :
b : définition de la taille des blocs
f : définition du fichier spécial, utilisé en mode raw, associé au périphérique origine
ou destinataire du fichier image tar.
v : affichage verbeux.
Le caractère - désigne, selon le contexte d'utilisation, l'entrée ou la sortie standard.
Le rembobinage de la bande après l'opération (sauvegarde ou restauration) peut être
spécifié.
GESTION DES ENTREES/SORTIES
243
──────────────────────────────────────────────────────────────
Exemples
#sauvegarde du répertoire courant sans rembobinage (nrst0)de la bande
tar cvf /dev/ nrst0 .
# idem avec rembobinage
tar cvf /dev/rst0 .
#sauvegarde du répertoire norbert avec chemin relatif
tar cvf /tmp/norbert ./norbert
#contenu du fichier image tar /tmp/norbert
tar tvf /tmp/norbert
#restauration du fichier image_tar /tmp/norbert dans le home directory
cd
tar xvf /tmp/norbert
■
Problèmes de sécurité
Une arborescence sauvegardée avec un chemin d'accès absolu de répertoire est
restaurée de façon identique, et risque d'écraser des fichiers de la machine destinataire,
sauf dans le cas où l'option A (System V) existe.
D'une façon générale, il faut éviter d'utiliser la commande tar sous l'identité de
l'administrateur.
Une restauration sans précaution peut créer des incohérences (fichiers sans
propriétaire) car par défaut, les fichiers sont restaurés avec celui d'origine même s'il
n'existe pas sur le système cible.
La commande tar peut être utilisée dans un réseau local.
Exemples
Recopie de l'arborescence d'un répertoire vers le média /dev/ntape
tar cvf /dev/ntape identificateur_répertoire
Affichage du contenu de la bande
tar tvf /dev/ntape
Restauration sur le répertoire courant
tar Axvf /dev/ntape
Copie d'une arborescence d'un répertoire vers un autre
cd rep_source
tar cvf - . | (cd rep_cible; tar xvf - )
■
Description
tar cvf - .
Le fichier image tar du répertoire courant (répertoire source) est dirigée sur la sortie
standard (-).
(cd rep_cible; tar xvf - )
Déplacement dans le répertoire cible et utilisation de l'entrée standard comme fichier
image_tar source duquel l'arborescence est extraite.
244
CHAPITRE VIII
──────────────────────────────────────────────────────────────
14.2 La commande cpio
La commande cpio permet la sauvegarde et la restauration de fichiers de n'importe
quel type y compris les fichiers spéciaux.
De nombreuses options sont disponibles (o archivage (output), i extraction (input),
d création des répertoires...).
Elle est performante et multi-volumes.
■
Utilisation
La commande cpio lit ou écrit ses données sur les fichiers standard ce qui permet de
l'utiliser sur des fichiers redirigés localement ou dans un réseau avec des commandes
telles ls ou find.
Synopsis
cpio clé option(s) chemin_d'accès source_ou_cible
La destination est définie par la clé i ou o
■
Clés d'utilisation
o archivage sur la sortie standard des fichiers lus sur l'entrée standard,
i extraction depuis l'entrée standard de fichiers préalablement sauvegardés par la
commande cpio -o. Des critères de sélection peuvent être définis après les options
par utilisation des caractères spéciaux de l'interprète de commandes shell.
p copie sur un répertoire des fichiers indiqués sur l'entrée standard.
Options
a remise des dates d'accès des fichiers (clés o et p),
B bloc de 5120 octets au lieu de 512,
d création des sous répertoires si nécessaire (clés o et i),
c sauvegarde ou restauration de fichiers dont l'en tête est en ASCII (clés o et i),
r nommage interactif des fichiers restaurés (clés i et p),
t affichage du contenu de la sauvegarde (clé i),
u copie inconditionnelle (clés i et p),
v affichage de tous les fichiers traités (clés p, o et i),
l création de lien matériel au lieu de copie (clé p),
m maintien des dates (création, accès, modification) des fichiers restaurés (clés i et p),
f copie des fichiers ne satisfaisant pas un critère.
■
Règles d'utilisation
Le chemin relatif (défaut) ou absolu utilisé pour la sauvegarde doit l'être pour la
restauration.
Un message d'avertissement est affiché pour les sauvegardes multi-volumes.
Le caractère spécial "*" est nécessaire pour restaurer un répertoire complet.
Exemple
/usr/home/*
GESTION DES ENTREES/SORTIES
245
──────────────────────────────────────────────────────────────
■
Procédure de restauration
Les sauvegardes complètes les plus récentes doivent être restaurées en premier.
Les sauvegardes incrémentales, si elles existent, le sont ensuite.
Il faut laisser vide le dernier champ (caractère d'espacement) pour restaurer
l'intégralité de la bande et utiliser les caractères spéciaux "*" et "?".
Exemple 1
#sauvegarde du répertoire courant dans une image
find . –name* *.* -print | cpio –ocvB > /tmp/copie
#affichage du contenu de la sauvegarde
cpio –tvf < /tmp/copie
#restauration sur le répertoire courant
cpio –ivf < /tmp/copie
Exemple 2
#sauvegarde du répertoire courant
ls | cpio -o > /dev/mt0
#restauration sur le répertoire courant (relatif)
cd /rep; cpio -imBdl < /dev/rmt8
#restauration sélective
cd rep; cpio -iBmdlv f1 f2 ...fn < /dev/rmt0
#restauration sélective
cpio -icvdumB ./tina/budget < /dev/rmt/tm0
■
Sauvegarde de fichier ou répertoire avec les commandes find et cpio
Sauvegarde
Répertoire courant et sous répertoires
Fichiers
Répertoire différent du répertoire courant
Identificateur correspondant
.
identificateur_fichier(s)
chemin absolu du répertoire
Exemples
#sauvegarde de rep1 sur rep2
cd rep1; find . -depth -print | cpio -pdl rep2
#sauvegarde des fichiers modifiés depuis 24 h
find . -mtime -1 -cpio /dev/rmt8
find /home/joe -depth -newer time -print | (cpio -ocvB > /dev/rmt0)
14.3 Copie physique
La commande dd exécute une copie physique entre deux supports en précisant la taille
des blocs transférés. On peut ainsi avec des grands blocs optimiser l'utilisation d'une
bande en diminuant l'espace résiduel. L'inconvénient de cette commande concerne les
blocs défectueux qui peuvent poser des problèmes.
246
CHAPITRE VIII
──────────────────────────────────────────────────────────────
■
Synopsis
dd option=valeur [option=valeur ] [option=valeur]
■
Options
if=nom
of=nom
ibs=n
obs=n
bs=n
cbs=n
skip=n
count=n
conv=ASCII
conv=EBCDIC
conv=lcase
conv=ucase
conv=noerror
nom du fichier d'entrée, entrée standard par défaut
nom du fichier de sortie, sortie standard par défaut
nombre d'octets des blocs du fichier d'entrée
nombre d'octets des blocs du fichier de sortie
nombre d'octets des blocs des fichiers d'entrée et de sortie
taille du tampon de conversion
copie de n fichiers d'entrée avant la terminaison
seek=n
saut de n fichiers sur le périphérique de sortie avant
écriture effective
copie de n enregistrements en entrée seulement
conversion EBCDIC vers ASCII
conversion ASCII vers EBCDIC
conversion de touts les caractères en lettre minuscule
conversion de touts les caractères en lettre majuscule
conv=bloc conversion d'enregistrement d'un format variable au
format fixe
pas d'arrêt du processus en cas d'erreur
Exemple
tar cvfb 20 - . | rsh host_distant dd of=/dev/rmt0 obs=20b
■
Interprétation
tar cvfb 20 - .
création d'un fichier image tar du répertoire courant, d'une taille de bloc de 20 sur la
sortie standard.
rsh host_distant dd of=/dev/rmt0 obs=20b
exécution distante sur la machine host_distant de la commande dd dont les données
seront sur la sortie standard et dont le résultat sera sur le périphérique /dev/rmt0 avec
une taille de bloc de 20.
La lecture distante de cette bande est réalisée de la façon suivante :
rsh -n host_distant dd if=/dev/rmt0 bs=20b | tar xvBfb 20 -
14.4 Autres utilitaires
De nombreux autres utilitaires existent tels dcopy (copie d'un système de fichiers avec
réorganisation), volcopy (copie d'un volume avec test des labels), backup, filesave ...
(utilitaires de sauvegardes adaptables)...
Les commandes dump et restore effectuent la sauvegarde d'un système de fichiers et
sa restauration à différents niveaux (total, partiel, incrémental...).
■
Label de périphérique
La commande labelit effectue la création d'un label de disque.
GESTION DES ENTREES/SORTIES
247
──────────────────────────────────────────────────────────────
Synopsis
labelit fichier_spécial [système_de_fichiers [volume]]
Elle associe le fichier spécial contenant le système de fichiers à un périphérique
externe. Le label, utilisé comme identificateur, est constitué de deux parties :
• le nom du système de fichier est le label primaire, par exemple le point de montage.
• le nom de volume est le label secondaire, par exemple le nom du périphérique.
La commande labelit affiche les informations suivantes :
fsname
volname
Blocks
Inodes
FS units
premier champ du label (label primaire),
deuxième champ du label (label secondaire),
nombre total de blocs (de 512 octets) du système de fichiers,
nombre total d'inodes du système de fichiers,
nombre de bytes par unité d'allocation (blocs de 8K par exemple).
Exemple
labelit /dev/rdsk/c2d2s4 home mt0
Current fsname:,home, Current volname:/dev/dsk/c2d2s4, Blocks: 684730, Inodes: 65488
FS Units: 1Kb, Date last modified: Mon Sep 6 17:48:49 1993
14.5 Compression
La technique de compression est basée sur l'algorithme de Lempel-Ziv.
■
Commandes disponibles
compress (compression), uncompress (décompression), zcat (visualisation d'un fichier
compressé), gzip (monde Unix/Linux).
Le fichier compressé est suffixé par .Z.
■
Application : fichier image_tar compressé.
On peut compresser chaque fichier puis d'exécuter la commande tar (méthode peu
performante la compression d'un petit fichier étant peu efficace). L'autre solution est
de compresser un fichier image tar unique selon l'algorithme suivant :
• création d'un fichier image tar puis compression,
• recopie de ce fichier sur le périphérique de sauvegarde.
248
CHAPITRE VIII
──────────────────────────────────────────────────────────────
Exemple
(tar cvf - . | compress cv) > resu.Z
tar cvf /dev/ntape resu.Z
ou encore :
tar cvf - . | compress cv | tar cvf /dev/ntape La restauration s'effectue de la façon suivante :
• restauration du fichier image tar,
• décompression et restauration de l'arborescence sur le répertoire courant.
Exemple
tar xvf /dev/ntape | uncompress cv | tar xvf -
■
Fichier .tar
Il est possible de créer un fichier image tar, lui-même image tar de plusieurs fichiers
image tar, conventionnellement, suffixés par .tar.
Exemple
tar cvf /tmp/image1 repertoire_source1
tar cvf /tmp/image2 repertoire_source2
tar cvf image.tar /tmp
■
Gestion des fichiers séquentiels sur support magnétique
La commande mt permet de se positionner après l'enregistrement courant.
Synopsis : mt [-f fichier] option [compteur]
Les options suivantes sont disponibles :
eof,weof
fsf
fsr
bsf
bsr
rewind
offline,rewoffl
status
retension
écriture de compteur marques de fin de fichiers sur la bande,
avance de n fichiers,
avance de n enregistrements,
retour de n fichiers,
retour de n enregistrements,
rembobinage de la bande,
rembobinage de la bande et mise hors service,
affichage de l'état de la bande,
tension de la bande.
GESTION DES ENTREES/SORTIES
249
──────────────────────────────────────────────────────────────
14.6 Exercices
■
Gestion du SGF
1°) Analyser le fichier des descriptions des systèmes des fichiers à monter sur votre
système. Analyser en détail les attributs de sécurité (ro, rw, bit s, etc.).
2°) Vous n'êtes pas administrateur. Essayer de démonter ou de monter des systèmes
de fichiers au hasard. Idem si vous êtes administrateur.
■
Commande fsck et mkfs
1°) Vous n'êtes pas administrateur. Essayer d'utiliser fsck sur un système de fichiers
au hasard, avec le système de fichier monté ou démonté.
2°) Idem quand vous êtes administrateur.
3°) Idem avec la commande mkfs (faites tout de même attention…).
■
Gestion des périphériques et pseudo périphériques
1°) Visualiser les systèmes de fichiers "montés" (commande /etc/mount).
2°) Visualiser les fichiers de paramétrages, par exemple /etc/vfstab, /etc/checklist,
/etc/ttys, /etc/gettytab et /etc/termcap.
3°) Ecrire un script utilisant le pseudo-périphérique /dev/tty : ce programme doit
afficher une question sur l'écran ("Donner le nom du répertoire ?"), lire la réponse
au clavier, puis afficher le résultat de la commande ls dir où dir est la réponse lue.
L'objectif est d'utiliser ce programme avec une redirection de la sortie sur un
fichier liste tout en conservant sur l'écran l'affichage de la question initiale.
■
Commande tar
1°) Effectuer une sauvegarde de votre répertoire sous /tmp.`logname` où `logname`
est votre identificateur de connexion.
2°) Restaurer la sauvegarde d'un de vos voisins dans le dossier tempo (à créer) dans
votre répertoire de travail.
3°) A partir de 2 fichiers image_tar, faire un fichier *.tar puis le compresser avec la
commande compress (fichier *.tar.Z).
4°) Compresser les 2 fichiers image_tar de la question précédente et fabriquer un
fichier *.Z.tar. Comparer sa taille à celui de la question précédente. Conclusion.
■
Commande cpio
1°) Effectuer une sauvegarde sélective (tous les fichiers plus récents qu'un fichier
donné) sous /tmp/nom1 en utilisant la commande cpio.
2°) Analyser le contenu de la sauvegarde.
3°) Essayer de sauvegarder des fichiers spéciaux (répertoire /dev). Idem avec la
commande tar. Conclusion.
CHAPITRE IX
QUELQUES MECANISMES INTERNES DE
WINDOWS
1.
PRESENTATION DU SYSTEME WINDOWS
Windows est un système d'exploitation 32 ou 64 bits multitâches, multithreads,
multiprocesseurs, commercialisé sur stations (XP, Vista) et serveurs, supportant les
architectures matérielles sur 32 ou 64 bits des mondes Intel et AMD, robuste et
sécurisé, compatible ascendant avec des applications des systèmes historiques
Microsoft (sur 16 ou 32 bits).
■
Particularités de Windows serveur
• Services et outils d'administration de réseau.
• Administration de domaines (ordinateur, utilisateurs, ressources distribuées, active
directory, clients Windows).
• Serveur d'applications distribuées et d'applications orientées Internet (Web, etc.).
• Intégration avec les environnements LAN Manager, Netware, Unix, Apple, IBM,
compatibilité POSIX.
• Gestion de l'accès distant.
• Fonctionnalités de tolérance de pannes et de sécurité.
2.
ARCHITECTURE EN COUCHES FONCTIONNELLES
Les couches fonctionnelles du système Windows sont les suivantes :
Processus de
support système
Processus serveur
Mode utilisateur
Applications
utilisateur
dll des sous systèmes
Exécutif NT
Pilotes de périphériques
Noyau
Couche d'abstraction matérielle (HAL)
Mode Noyau
Sous systèmes
d'environnement
Interface graphique
Fenêtrage
252
CHAPITRE IX
──────────────────────────────────────────────────────────────
■
Processus utilisateur
On distingue quatre types de processus utilisateur :
• les processus de support système tels le gestionnaire d'ouverture de session,
• les processus démarrés par le contrôleur de services tel l'ordonnanceur,
• les sous systèmes d'environnement associés à un environnement applicatif donné
(OS/2, POSIX, Windows 16 bits, MS/DOS, etc.),
• les applicatifs fonctionnant dans un sous système d'environnement donné.
■
Liens dynamiques
Une bibliothèque liée dynamiquement (Dynamic Linked Library - dll) est une
interface programmatique d'appel (Application Programming Interface - API) d'un
service système.
3.
MODE UTILISATEUR
3.1 Sous systèmes d'environnement
Le mode utilisateur intègre plusieurs environnements applicatifs constitués par
différentes machines virtuelles : les sous systèmes d'environnement. Le système
Windows gère donc plusieurs familles d'API :
• API 64 bits sur Vista et XP,
• API 32 bits (interface Win32), 16 bits Windows 3.1x avec l'interface Win16 et
MS/DOS ,
• API OS/2 version 1.2 et POSIX,
• L'interface graphique (Graphical Device Interface - GDI).
QUELQUES MECANISMES INTERNES DE WINDOWS
253
──────────────────────────────────────────────────────────────
Application
Windows
16 bits
Process de
connexion
Application
OS/2
Application
Windows
32 bits
Application
POSIX
Application
DOS
Windows
sur
Win32
Mode
utilisateur
Sous
système
sécurité
Sous
système
OS/2
Sous
système
Posix
Machine
DOS
virtuelle
Machine
DOS
virtuelle
Sous
système
Win32
Exécutif NT
■
Mode
Noyau
Le sous système Win32
L'identificateur Win32 représente à la fois le nom des API et du sous-système.
Serveur commun des différentes API supportées par tous les autres sous-systèmes qui
lui sous traitent leur requêtes, il gère les entrées/sorties du mode utilisateur (affichage
(interface GDI), clavier, souris). Les applications 32 bits développées pour Windows
9x peuvent ainsi être compatibles. Il est constitué des objets suivants :
• le processus csrss.exe (client/server runtime subsystem) assure la gestion de la
fenêtre console, la création et la suppression des processus et des threads.
• Le pilote win32k.sys, intégré dans l'exécutif, assure la gestion des fenêtres (écran,
clavier, souris) et est interfacé avec l'interface graphique.
• Des bibliothèques dynamiques essentielles (USER32.dll, GDI32.dll, kernel32.dll).
3.2 Machines virtuelles
■
Win64
Win32 pour 64 bits (précédemment appelée Win64) permet l'exécution d'applications
32 bits dans des environnements Windows 64 bits avec les processeurs Intel Itanium.
■
La machine virtuelle OS/2
Seules, les applications OS/2 16 bits peuvent fonctionner.
■
La machine virtuelle POSIX
Des applications de la norme POSIX P1003.1, intégrées pour respecter la conformité
du FIPS (Federal Information Processing Standard), appellent des API du soussystème Win32, après lancement du sous-système POSIX (psxss.exe).
254
CHAPITRE IX
──────────────────────────────────────────────────────────────
■
La machine virtuelle MS/DOS
Le module NTVDM (NT Virtual DOS Machine) émule une machine virtuelle MS/DOS
. Par défaut, le processus NTVDM est multifibres.
M achine Dos virtuelle NT
(Ntvdm.exe)
Ntio.sys
Application
M S/DOS
■
Pilote de
périphériques
virtuels
Ntdos.sys
Pilotes de
périphérique
32 bits
W indows NT
Périphériques
La machine virtuelle Windows 16 bits
Le module Windows on Win32 (wow) assure la compatibilité d'applications 16 bits.
Processus
Windows
on Win32
(Wow)
Sous système
Win32
4.
Application
Windows 16
Noyau
16 bits
GDI
16bits
USER
16 bits
Couche Thunk
Couche Thunk
Couche Thunk
Kernel32.dll
GDI32.dll
USER32.dll
L'EXECUTIF WINDOWS
M o d e u tilis ateu r
S erv ice s d e l'E x éc utif N T
E x é cu tif N T G es tio n d es
G es tio n
G es tio n
ou
o b jets
d es
d e la
m ode
p roc ess u s
M o n iteu r
m ém o ire
A p p el
n o y au
d e référe n ce
v irtu elle
de
sé cu rité
p roc éd u re
lo cale
M icro n o y au
co u ch e d 'ab stractio n m até rielle
C o u ch e m atérielle
GDI
W in 3 2
W in d o w s
G es tio n M an a g er
d es
en trées
so rties
P ilo tes
G rap h ics
D ev ice
D riv e rs
QUELQUES MECANISMES INTERNES DE WINDOWS
255
──────────────────────────────────────────────────────────────
■
Gestionnaire d'objets
Un gestionnaire d'objets (port d'entrée/sortie, processus, thread, fichier, répertoire,
etc.) gère un type de ressources dont l'accès est réalisé au travers :
• d'informations de contrôle fournies par le sous système de sécurité,
• d'un descripteur d'accès à l'objet (handle) et d'un récepteur d'informations
(handler) dans l'objet lui même.
■
Gestionnaire de tâches (ordonnanceur)
Le gestionnaire de tâches crée, synchronise, supprime des processus et threads. Il
accède donc à la table des processus et peut afficher la liste des applications actives,
• la liste des processus actifs et des threads,
• certains graphes de performances du système (temps CPU, gestion mémoire, etc.).
256
CHAPITRE IX
──────────────────────────────────────────────────────────────
■
Appel de procédure locale
L'appel de procédure locale (Local Procedure Call - LPC) est un élément du système
de communications (architecture client/serveur) entre processus et threads.
Exemple
Un processus émet une requête au sous système Win32 par l'intermédiaire d'une
bibliothèque liée dynamiquement. Cette dernière utilise le sous système LPC pour la
transmettre puis retourner le résultat au processus appelant.
■
Moniteur de sécurité
Le moniteur de sécurité (Security Reference Monitor - SRM) gère les accès au système
(processus winlogon et lsass) par allocation puis contrôle de jetons d'accès sécurisés
(Security Access Token - SAT).
■
Gestionnaire d'entrées/sorties
D'architecture modulaire, il gère les opérations d'entrées/sorties, le cache logiciel, les
systèmes de fichiers, les pilotes.
■
Micro-noyau
Le micro-noyau gère les interruptions et déroutements, les reprises en cas de rupture
de l'alimentation électrique, les processus et threads selon un algorithme de
multitâches préemptif.
Sur les systèmes multiprocesseurs symétriques, une instance du noyau s'exécute en
parallèle sur chaque processeur (de 2 à 32).
■
Couche d'abstraction matérielle
La couche d'abstraction matérielle (Hardware Abstraction Layer - HAL) est
encapsulée dans l'exécutif et implémentée sous forme de bibliothèques liées
dynamiquement, constituées des interfaces processeur (Intel, AMD, etc.) et
multiprocesseur symétrique (Symmetric Multi Processing - SMP).
Le système matériel est ainsi masqué pour rendre le système Windows portable.
QUELQUES MECANISMES INTERNES DE WINDOWS
257
──────────────────────────────────────────────────────────────
Architecture de Windows
258
CHAPITRE IX
──────────────────────────────────────────────────────────────
5.
SERVICES SYSTEME
La table de répartition des services système (System Service Dispatch Table) permet
d'y accéder.
On distingue les services de l'exécutif implémentés dans le fichier ntoskrnl.exe et les
autres services accessibles au travers des bibliothèques dynamiques USER32.dll,
GDI32.dll.
API du noyau Win32
Application Win32
Application WriteFile
WriteFile dans
KERNEL32.dll
Appel NtWriteFile
Retour à la fonction
appelante
NtWriteFile dans
ntdll.dll
Int 2E
retour à la fonction
appelante
API USER
et GDI Win32
Application
Appel USER
ou service GDI
spécifique
Win32
utilisée par
tous les
sous-systèmes
GDI32.dll
ou
USER32.dll
Mode utilisateur
Int 2E
retour à la
fonction
appelante
spécifique
Win32
Mode Noyau
Interruption logicielle
6.
Interruption logicielle
KiSystemService
dans
ntoskrnl.exe
Appel NtWriteFile
rejet de l'interruption
KiSystemService
dans
ntoskrnl.exe
Appel de
routine Win32
rejet de l'interruption
NtWriteFile
dans
ntoskrnl.exe
Effectue l'opération
Retour à la fonction
appelante
Point d'entrée de
Service dans
WIN32K.SYS
Réalise l'opération
Retour à la fonction
appelante
ORDONNANCEMENT
■
Généralités sur l'ordonnanceur
L'algorithme d'ordonnancement des processus et threads est préemptif.
Le thread le plus prioritaire, exécuté éventuellement sur un processeur donné
(mécanisme d'affinité du processeur), est celui dont la priorité est la plus élevée.
Un quantum est la durée maximale allouée à un thread avant interruption par
l'ordonnanceur.
Une requête d'interruption d'un thread actif par un thread plus prioritaire est satisfaite
immédiatement (principe de préemption).
QUELQUES MECANISMES INTERNES DE WINDOWS
259
──────────────────────────────────────────────────────────────
Le répartiteur (dispatcher) gère l'ordonnancement des processus et thread. Il est
déclenché par un des événements suivants :
• un thread devient activable,
• un thread se termine, se met en attente d'un événement, a consommé son quantum
de temps,
• la priorité d'un thread change,
• l'affinité d'un thread actif est modifiée.
■
Niveaux de priorité
L'exécutif utilise 32 niveaux de priorité avec la répartition suivante :
• 16 niveaux temps réel (16 à 31),
• 15 niveaux variables (1 à 15),
• le niveau système (0) réservé pour le thread de la page 0.
Les priorités sont allouées par l'API Win32 puis par l'exécutif. L'API Win32
ordonnance les processus en fonction de leur priorité initiale (temps réel, haute,
normale, oisif (idle) puis selon la priorité respective des threads (time critical, highest,
above-normal, normal, below normal, lowest, idle).
La priorité des threads (mode noyau) est définie à partir du tableau à double entrée
suivant :
priorité Win32 des threads
time critical
highest
above normal
normal
below normal
lowest
idle
priorité des processus (Win32)
temps réel haute normale/base
31
15
15
26
15
10
25
14
9
24
13
8
23
12
7
22
11
6
16
1
1
oisif
15
6
5
4
3
2
1
La priorité de base d'un processus commençant son exécution est définie à la ligne
normal selon son niveau d'exécution pour chaque classe de priorité.
■
Priorités temps réel
Il faut disposer du privilège accroître la priorité d'ordonnancement pour entrer dans la
plage temps réel où les interruptions matérielles les plus prioritaires ne peuvent être ni
masquées ni bloquées.
Toutefois, Windows n'est pas un véritable système temps réel car il ne fournit pas de
mécanisme de temps d'attente maximum d'interruption garanti.
260
CHAPITRE IX
──────────────────────────────────────────────────────────────
7.
PROCESSUS ET FIBRES
7.1 Processus
Un processus est un programme exécutable nommé doté d'un identificateur numérique
(process user id - pid), d'un espace d'adressage privé, de ressources (sémaphores,
ports de communication, fichiers, fibres (thread), etc.) et des données associées.
Il peut gérer plusieurs piles d'exécution et est implémenté sous la forme d’objets
accessibles par utilisation des services associés.
Il n'y a pas nécessairement de relation de filiation entre processus.
QUELQUES MECANISMES INTERNES DE WINDOWS
261
──────────────────────────────────────────────────────────────
■
Structure de données d'un processus
Un espace d'adressage privé (232 ou 264 octets) accessible par des descripteurs
d'adressage virtuels (Virtual Address space Descriptor - VAD).
Un thread au moins, les descripteurs d'accès aux objets utilisés (fichiers, sémaphores,
etc.) ainsi qu'un identificateur de sécurité, un jeton (token) d'accès au processus le
contenant et les références des objets utilisés.
VAD
Objet processus
VAD
VAD
Table des descripteurs
objet
objet
objet
Thread
En mode utilisateur, le processus Win32 maintient une structure pour chaque
processus en complément du bloc d'environnement du processus (Process
Environment Bloc - PEB), dans son espace propre.
Bloc d'environnement
du processus
Bloc
processus
Bloc d'environnement
du thread
Bloc du processus Win32
Table des canaux d'accès
Bloc du
thread
Dans l'exécutif, le bloc processus (EPROCESS) a la structure suivante :
Bloc de processus du noyau (PC B)
PID du processus
PID du processus créateur
Exit status
He ure de création et de term inaison
Lien vers le processus actif
Bloc de quota
Inform ations de gestion m ém oire
Port d'exception
Port de débogueur
En tête de répartiteur
table des pages
E PRO CE SS
Temps du noyau
Temps utilisateur
KTHREAD
Spinlock du processus
Priorité de base du processus
Quantum des threads
Etat du processus
Valeur initiale du thread
Jeton d'accès prim aire
T ables des canaux d'accès
Liste des périphériques
Bloc d'environnem ent du processus
Nom du fichier im age
Classe de priorité du processus
Bloc de processus W in32
262
CHAPITRE IX
──────────────────────────────────────────────────────────────
■
Compléments sur les principaux champs
Bloc de processus du noyau
En tête commune des répartiteurs d'objets, liste des threads du noyau dédiés au
processus, priorité de base, quantum, temps cumulé des threads du processus.
Bloc de quota
Réserves non paginées et paginées du fichier d'échange du processus.
Ports d'appel local des procédures d'exception
Canal de communication utilisé quand un thread provoque une exception.
Port LPC pour débogage
Canal de communication utilisé quand un thread provoque l'appel d'un débogueur.
Jeton d'accès
Objet de l'exécutif décrivant le profil de sécurité du processus.
7.2 Création d'un processus
La création d'un processus se déroule selon le schéma suivant :
Ouverture du fichier .exe (étape 1)
Création de l'objet processus de l'exécutif (étape 2)
Création de l'objet thread (étape 3)
Notification au sous système Win32 (étape 4)
Configuration du nouveau
processus et des threads
associés
Démarrage de l'exécution du thread initial (étape 5)
Initialisation de l'image
Retour au processus créateur
■
Etape 6
Démarrage de l'exécution
Etape 1 : ouverture du processus image
La primitive CreateProcess lance le sous système d'environnement associé au contexte
d'exécution de l'applicatif à exécuter.
c m d .e x e
N T V D M .ex e
M S - D O S ( * .b a t )
* .c m d
W in 1 6
la n c e m e n t d ir e c t
W in 3 2
c h a r g e m e n t d e la m a c h in e
v ir t u e lle s e l o n le t y p e d 'a p p lic a t io n
O S /2
O S 2 .e x e
P O S IX
p o s ix .e x e
M S-D O S
( .c o m , .e x e , .p if )
N T V D M .ex e
QUELQUES MECANISMES INTERNES DE WINDOWS
263
──────────────────────────────────────────────────────────────
■
Etape 2 : création de l'objet processus
Configuration du bloc EPROCESS
Allocation et initialisation du bloc EPROCESS.
Définition des quotas, incrémentation du compteur de références du processus
créateur et stockage de son identificateur.
Etat du nouveau processus défini par le drapeau STATUS_PENDING.
Création d'un jeton d'accès primaire pour le nouveau processus.
Allocation mémoire
Création des différentes tables des pages.
Création du bloc noyau
Le bloc KPROCESS contenant des pointeurs vers le répertoire de la table des pages du
processus, le temps CPU cumulé des différents threads, la priorité initiale et le
quantum par défaut du processus, est initialisé.
Configuration du PEB du processus
Le bloc d'environnement du processus
suivants (interprétation évidente) :
est
initialisé
avec
les
champs
ImageBaseAdresse, NumberOffProcessors, NTGlobalFlag, CriticalSectionTimeout
Configuration finale de l'objet processus de l'exécutif
Initialisation des canaux d'accès du processus crée (héritage du processus créateur).
Positionnement des drapeaux d'exécution et activation éventuelle du débogueur et de
l'audit du processus.
Commutation en mode utilisateur.
■
Etape 3 : création du thread initial
Création du thread initial, de sa pile et de son contexte d'exécution.
■
Etape 4 : notification au sous-système Win32 de la création du processus
Notification (kernel32.dll) au sous-système Win32 de la création du nouveau
processus avec transmission des canaux d'accès du processus, drapeaux de création,
identificateur du processus créateur.
Le sous-système Win32 duplique les descripteurs de sécurité, définit la priorité du
processus, alloue puis initialise le bloc processus csrss.exe, définit le port d'exception
et l'éventuel port de débogage.
■
Etape 5
Démarrage du thread initial.
264
CHAPITRE IX
──────────────────────────────────────────────────────────────
■
Etape 6 : initialisation du contexte du processus
Modification du niveau d'exécution du processus au niveau APC (Asynchronus
Procedure Call).
Activation de l'espace de travail (WorkingSpace).
Mise en attente d'un APC en mode utilisateur vers le nouveau thread à exécuter en
mode utilisateur.
Modification du niveau d'exécution du processus au niveau 0 par déclenchement de
l'APC.
Initialisation du chargeur, du gestionnaire de pages, des tables systèmes et des
sections critiques, chargement des bibliothèques liées dynamiquement.
Début de l'exécution du processus utilisateur.
■
Priorité
La classe de priorité du processus crée est définie selon la stratégie suivante :
• La classe par défaut est normal sauf si le processus créateur est oisif ; le processus
créé est alors oisif.
• Quand une classe de niveau real-time est requise et que le processus ne dispose que
de la priorité Increase Scheduling Priority, la priorité effective est high.
7.3 Fibre
L'implémentation est statique quand le nombre de threads est déterminé à priori et
borné, dynamique si les unités d'exécution sont crées à la demande.
La gestion des fibres (appelées processus de poids faible, processus léger, processus
poids plume, thread) est intégrée dans l'API Win32 pour supporter les applications
(Unix/POSIX) qui les gèrent directement.
■
Implémentation des fibres
Le contexte d'exécution d'un thread est constitué des éléments suivants :
• registres d'état du processeur et piles d'exécution (noyau et utilisateur),
• un segment privé, des bibliothèques (d'exécution et dynamiques),
• un identificateur appelé thread id ou client id.
Un thread est propriétaire de son contexte d'exécution et peut accéder à la totalité de
l'espace mémoire du processus associé. Il ne peut accéder à celui d'un autre processus
sauf si la mémoire est partagée (file mapping object).
Un thread est représenté par un bloc de thread (ETHREAD) de l'exécutif.
Le bloc d'environnement du thread (TEB) est décrit dans l'espace propre du processus
associé. Le sous-système Win32 (csrss.exe) maintient aussi une structure parallèle
pour chaque thread créé.
QUELQUES MECANISMES INTERNES DE WINDOWS
265
──────────────────────────────────────────────────────────────
Bloc de du noyau (KTHREAD)
En tête du répartiteur
Heure de création du thread
Temps cumulé utilisateur
PID du processus associé au thread
Temps cumulé du noyau
structure EPROCESS
Adresse de début d'exécution du thread
jeton d'accès
Information d'usurpation d'identité
Information du message LPC attendu par le thread
Pile du noyau
Table des services système
Information d'ordonnancement du thread
Cadre de déroutement
Tableau de stockage local du thread
Information du timer
Information de synbchronisation
Pointeur vers les requêtes d'entrées/sorties en attente
Liste des APC en attente
Bloc du timer et bloc d'attente
Liste des objets attendu par le thread
TEB
Structure du bloc de thread de l'exécutif NT
Structure du bloc de thread du noyau
La structure du TEB (Thread Environment Block) est la suivante :
Liste des exceptions
Base de la pile
Limite de la pile
TIB du sous système
Information des fibres
Identificateur du thread
Handle RPC actif
PEB (Process Environment Bloc)
Champ LastError
Liste des sections critiques associées
Informations client User32
Informations GDI32
Informations OpenGL
Tableau TSL
Données WinSock
■
API de gestion des threads
CreateThread
CreateRemoteThread
ExitThread
TerminateThread
GetExitCodeStatusThread
GetThreadTimes
Get/SetThreadContext
■
création d'un thread local,
création d'un thread dans un autre processus,
terminaison normale d'un thread,
terminaison simple d'un thread,
requête du code de terminaison d'un thread,
requête des informations d'ordonnancement d'un autre
thread,
accès ou modification des registres d'un thread.
Graphe d'état des threads
Le cycle d'un thread commence à sa création. La requête est transmise à l'exécutif
quand le gestionnaire de travaux alloue de l'espace pour un thread et appelle le noyau
pour l'initialiser. Après initialisation, le thread passe par les états suivants :
266
CHAPITRE IX
──────────────────────────────────────────────────────────────
Prêt
Standby
Actif
thread en attente de sélection par l'ordonnanceur.
unique thread en attente d'un processeur donné.
thread en cours d'exécution jusqu'à la fin du quantum alloué, sa
terminaison, ou jusqu'à préemption pour un thread plus prioritaire.
En attente
thread en attente d'un objet, système d'exploitation en attente du
thread, sous système d'environnement mettant le thread en attente.
Quand l'attente se termine, le thread redevient prêt.
En transition thread prêt en attente de la disponibilité d'une ressource.
Terminé
thread ayant terminé son exécution pouvant être détruit ou réinitialisé.
Initialisé
R éin itia lisa tio n
m ise en a tten te d a n s la file "th rea d s p rêts"
T e rm in é
P rêt
o bjet à l'éta t sig n alé
resso u rce d isp o n ib le
th rea d en
a tte nte su r
un d escrip teu r
d 'o b jet (ha n d le)
E x écu tio n
term in ée
E n a tten te
R essource
non
d ispo n ib le
S élec tio nn é
p ou r e xécutio n
E n tran sitio n
p réem pté
A ctif
p réem pté
ou
fin d u q ua n tu m
d e tem ps
M o d e sta nd b y
C o m m u ta tio n d e con tex te vers ce thread
e t d ém arrag e d e so n exécutio n
(a p p el d u disp a tch er)
■
API d'ordonnancement des threads
Suspend/ResumeThread
Get/SetPriorityClass
suspension et reprise de l'exécution d'un thread.
demande ou modification de la classe de priorité d'un
processus.
Get/SetThreadPriority
demande ou modification de la priorité d'un thread.
Ge/SetProcessAffinityMask demande/modification du masque d'affinité d'un
processus.
SetThreadAffinityMask
définition du masque d'affinité d'un processus.
Get/SetThreadPriorityBoost demande/définition de la capacité à rendre un thread
plus prioritaire.
SetThreadIdealProcessor
définition d'un processeur préféré (donc non impératif).
SwitchToThread
commutation vers un autre thread du processus courant.
Sleep
requête de mise en sommeil du thread courant.
SleepEx
requête de mise en attente sur événement (fin d'E/S,
attente d'APC, fin du quantum, etc.).
QUELQUES MECANISMES INTERNES DE WINDOWS
267
──────────────────────────────────────────────────────────────
8.
OBJETS
Un objet de l'exécutif est une instance d'une classe de données typées (attributs) et de
services tels l'objet processus.
Utilisés pour accomplir les tâches systèmes telles la gestion de l'interface homme
machine, le partage des ressources et la protection de leur accès, les objets sont
implémentés avec les règles et objectifs suivants :
• mécanisme uniforme d'utilisation des ressources système,
• isolation des objets pour que certains impératifs de sécurité de niveau C2 soient
respectés,
• définition d'un schéma d'objet intégrant les objets existants tels les périphériques,
les fichiers, les répertoires, etc.
• création d'un mode d'utilisation des objets dont un administrateur puisse limiter
l'usage,
• définition de règles universelles de conservation des objets,
• support des API des divers environnements.
■
Utilisation d'un objet
L'exécutif utilise deux classes d'objets :
• les objets exécutifs, implémentés par divers composants de l'exécutif, accessibles
en mode utilisateur.
• Les objets du noyau, invisibles en mode utilisateur, habilités à réaliser des tâches
essentielles comme l'ordonnancement des travaux.
Un objet exécutif peut encapsuler des objets du noyau
Exemple d'objets de l'exécutif
Identificateur
Processus
Thread
Section
Fichier
Port
Jeton
Evénement
Paire d'événements
Gestionnaire
gestionnaire de processus
gestionnaire de processus
gestionnaire de la mémoire
gestionnaire d'entrées/sorties
facilités LPC
système de sécurité
services support de l'exécutif
services support de l'exécutif
Sémaphore
services support de l'exécutif
Mutant
services support de l'exécutif
Horloge
Répertoire
Lien symbolique
Profile
Clé
services support de l'exécutif
gestionnaire d'objet
gestionnaire d'objet
noyau
gestion des configurations
Objet représenté
appel de programme, ressources associées
une entité d'un processus
une région de mémoire partagée
une instance d'un fichier ouvert
processus destinataire d'un message
données de sécurité d'un utilisateur connecté
notification, synchronisation d'un événement
notification d'un envoi de message par un
thread au serveur Win32 et vice versa
régulation de ressources critiques utilisées
par les threads
mécanisme d'exclusion mutuelle pour les
sous systèmes Win32 et OS/2.
horloge interne de gestion des threads
conteneur d'objets
référence indirecte à un objet fichier
mesure des temps d'exécution dans un code
clé d'index de référence des enregistrements
dans la base interne de Windows
268
CHAPITRE IX
──────────────────────────────────────────────────────────────
■
Service d'objet
Le sous-système Win32 est également le serveur d'applications Win32. Quand une
application appelle une API pour créer (directement ou indirectement) un objet, il
appelle le gestionnaire d'objets dont le rôle est le suivant :
• allocation mémoire d'un objet donné,
• définition et attachement d'un descripteur de sécurité de l'objet qui en spécifie la
liste de contrôle d'accès,
• création et maintien d'une structure de répertoire stockant les noms des objets,
• création d'un canal d'accès à l'objet (handle) et retour au processus demandeur.
■
Canal d'accès à un objet
Une requête d'accès à un objet par un thread provoque la création par le processus
associé d'un canal d'accès qui en représente l'unique chemin d'accès. Ce concept
d'étiquette associée à un descripteur en permet l'accès indirect (encapsulation).
Dans l'exécutif, les canaux d'accès aux objets apportent les avantages suivants :
• la sémantique d'accès à un objet est universelle, que l'on considère un fichier, un
événement, ou un processus.
• le gestionnaire d'objets a le droit exclusif de créer puis d'accéder aux canaux
d'accès ce qui garantit :
◊ le contrôle d'accès du mode utilisateur,
◊ le suivi permanent de l'accès aux objets.
Un canal d'accès à un objet est un index dans la table des objets d'un processus,
constituée de pointeurs vers les objets ouverts par ce dernier.
Un canal d'accès est crée dans les situations suivantes :
• création d'un objet ou ouverture d'un canal vers un objet existant,
• héritage d'un canal d'accès,
• réception d'un canal dupliqué depuis celui d'un autre processus.
La figure suivante illustre la relation entre un processus et sa table d'objets.
P r o ce ssu s
A ttr ib u ts
H é r ita g e
T h rea d A
canal 1
canal 2
T h rea d B
canal 3
F ic h ie r
T a b le d e s o b j e t s
QUELQUES MECANISMES INTERNES DE WINDOWS
269
──────────────────────────────────────────────────────────────
■
Structure d'un objet
Un objet est caractérisé par son type qui en détermine les données (champs) et les
services (méthodes). Il est défini par son en-tête et son corps.
Identificateur de l'objet
Répertoire d'objets
Descripteur de sécurité
Liste des quotas
Nombre de canaux d'accès ouverts
Références à l'objet
Objet temporaire/permanent
Mode d'utilisation (noyau/user)
Pointeur vers les attributs spéciques
selon le type d'objet
Corps de l'objet
■
En tête de l'objet
Attribut
Identificateur
Répertoire d'objet
Descripteur de sécurité
Quotas
Nombre de canaux ouverts
Références à l'objet
Objet temporaire/permanent
Mode d'utilisation
Pointeur d'accès
■
Attributs spécifiques de l'objet type de la classe
Nom du type d'objet
Types d'accès
Drapeau de synchronisation
Drapeaux de gestion mémoire
Méthodes
ouverture, fermeture, suppression
parse, sécurité
droit de s'enquérir du nom
Rôle
Accès à l'objet.
Structure hiérarchique de stockage d'objets.
Liste de contrôle d'accès à l'objet.
Quotas d'accès à l'objet.
Compteur de canaux d'accès ouverts sur l'objet.
Processus ayant ouverts des canaux d'accès à l'objet.
Drapeau indiquant si l'identificateur de l'objet et les
ressources peuvent être détruit après utilisation.
Mode d'utilisation de l'objet.
Pointeur vers le type d'objet.
Services génériques
Le gestionnaire de l'objet offre un ensemble de services génériques (méthodes)
opérant sur ses attributs :
Services génériques
Fermeture
Duplication
Requête d'objet
Requête de sécurité
Définition de sécurité
Attente d'objet unique
Attente sur plusieurs objets
■
Rôle
Fermeture d'un canal d'accès.
Partage d'un objet par duplication du canal d'accès.
Requête d'information sur les attributs de l'objet.
Requête d'accès au descripteur de sécurité.
Modifications des protections de l'objet.
Synchronisation d'exécution d'un thread avec un
unique objet.
Synchronisation d'exécution d'un thread avec plusieurs
objets.
Corps de l'objet
Le corps et le contenu d'un objet donné sont uniques ce qui permet aux services de
l'exécutif d'en contrôler toutes les opérations.
270
CHAPITRE IX
──────────────────────────────────────────────────────────────
■
Attributs d'un objet type
L'en tête de l'objet contient des données d'un type commun à chaque instance,
initialisées avec ses valeurs spécifiques.
Les données statiques communes à toutes les instances d'une classe d'objet type sont
regroupées dans le champ attributs.
Attribut
Nom de l'objet type
Types d'accès
Synchronisation
Drapeau de gestion mémoire
Méthodes
Rôle
Identificateur pour les objets de ce type.
Type d'accès demandé par un thread lors de
l'ouverture d'un canal.
Type de synchronisation d'un thread sur ce type
d'objet.
Autorisation de pagination du thread.
méthodes utilisées par le gestionnaire d'objet.
Chaque objet est chaîné à l'objet type associé.
A ttr ib uts de l'objet type p roce ssu s
Processu s
Instan ce 1
Processus
Instance 2
Processus
Instance 3
Les objets types ne sont pas directement accessibles en mode utilisateur. Certains de
leurs attributs stockés dans le corps des objets types, décrits ci-dessous, le sont par
l'API Win32.
Attribut
Nom du type d'objet
Type de réserve
Rôle
Identificateur des objets de ce type.
drapeau d'allocation de ce type d'objet par le
gestionnaire de mémoire paginée.
Quota par défaut des réserves
Valeur des réserves de pages pour le chargement
des processus.
Type d'accès
Type d'accès autorisé pour un thread lors de la
requête d'ouverture d'un canal d'accès à un objet.
Association générique/spécifique Association entre les droits d'accès génériques et
les droits d'accès spécifiques.
Synchronisation
Drapeau de synchronisation d'un thread sur cet
objet.
Méthode(s)
Méthode(s) autorisée(s) au gestionnaire d'objet.
■
Identificateur de l'objet
Tout objet est nommé et accessible à partir de son identificateur.
L'espace de nommage de l'exécutif est global ce qui permet à tout processus d'ouvrir
un canal d'accès vers un objet donné pourvu qu'ils soient dotés des droits
convenables.
QUELQUES MECANISMES INTERNES DE WINDOWS
271
──────────────────────────────────────────────────────────────
■
Objet "répertoire d'objets"
L'objet "répertoire d'objets" permet au gestionnaire d'objets de supporter une structure
de nommage hiérarchique analogue au répertoire des systèmes de fichiers POSIX.
La figure ci-dessous décrit les caractéristiques de l'objet répertoire d'objets.
T y p e d e l' o b j e t
O b j e t R é p e r t o ir e
A t t r ib u t s
L i s t e d e s i d e n t if i c a te u r s d 'o b je ts
S e rv ices
C r é a t i o n d 'u n r é p e r t o ir e d 'o b j e t s
O u v e r t u r e d 'u n r é p e r t o i r e d 'o b j e t s
I n f o r m a t i o n s d 'u n r é p e r to i r e d 'o b je ts
Exemple 1 : le conteneur \
Répertoire d'objets
Type d'objets contenu
\NLS
\BaseNamedObjects
\??
\FileSystem
\ObjetTypes
\Security
\KnownDlls
\RPC control
\Windows
Support du langage national.
mutex, événements, sémaphores, horloge.
Identificateur des périphériques MS/DOS .
Pilotes du système de fichiers et identificateurs associés.
Noms de types d'objets.
Objets spécifiques au sous système de sécurité.
Chemins et dll connues.
Objets ports utilisés par les procédures d'appel distante.
Ports du sous système Win32 et position des fenêtres.
Exemple 2 : le dossier BaseNamedObjets
272
CHAPITRE IX
──────────────────────────────────────────────────────────────
■
Lien symbolique
Un lien symbolique (Unix) référence un fichier ou répertoire sans le dupliquer.
L'objet lien symbolique, qui réalise une fonction similaire pour les identificateurs
d'objets dans leur espace de nommage, a la structure suivante :
Type de l'objet
Lien symbolique
Attributs
Chaîne de substitution
Date de création
Services
9.
Création d'un lien symbolique
Ouverture d'un lien symbolique
Informations d'un lien symbolique
MECANISMES DE SYNCHRONISATION
9.1 Système de gestion des déroutements
Sous Windows, le gestionnaire des déroutements fonctionne selon le schéma suivant :
R é p a r t i te u r
d 'i n te r r u p ti o n s
R é p a r t i te u r d e
s e rv ic e s
s y stè m e
In te rru p tio n s
m a t é r i e l le s e t
lo g ic ie lle s
In te rru p tio n s
d 'a d r e s s e s
v i r tu e ll e s
■
G e s t io n d e s
i n te r r u p ti o n s
S e r v ic e s
sy stèm e
R é p a r t i te u r
d 'e x c e p ti o n s
G e s t io n n a i r e
d 'e x c e p ti o n s
G e s t io n n a i r e d e
m é m o i r e v ir tu e l l e
Répartiteur des interruptions
Le répartiteur d'interruptions détermine son origine et transfère le contrôle à la routine
la prenant en compte, externe (Interrupt Service Routine - ISR) ou interne (Noyau).
■
Primitives de traitement
La table de répartition des interruptions (Interrupt Dispatch Table - IDT) permet
l'accès au programme de traitement de l'interruption, l'IRQL (Interruption Request
Level) étant utilisée comme vecteur d'interruption.
QUELQUES MECANISMES INTERNES DE WINDOWS
273
──────────────────────────────────────────────────────────────
■
Priorité
Le niveau d'interruption (Interruption Request Level-IRQL) définit la priorité de
chaque interruption (0 à 31). Plus il est élevé, plus l'interruption est prioritaire.
Alimentation électrique
Interruption interprocesseur
Horloge
Profil
Périphériquep
.....
Périphérique1
DPC
APC
■
Algorithme de prise en compte d'une interruption
Emission de l'interruption.
Sauvegarde du contexte.
Appel du répartiteur d'interruption.
Entrée en section critique.
Masquage des interruptions de niveau égal ou inférieur.
Prise en charge effective de l'interruption.
Sortie de la section critique.
Restauration du contexte.
Démasquage des interruptions masquées.
Une interruption de niveau supérieure peut être prise en compte dans cet algorithme ce
qui peut entraîner l'apparition de sections critiques imbriquées (mutex).
■
Interruptions logicielles
Les interruptions logicielles sont les suivantes : initialisation des threads, gestion de
l'ordonnanceur, exécution asynchrone d'une procédure dans un thread, support des
entrées/sorties asynchrones.
274
CHAPITRE IX
──────────────────────────────────────────────────────────────
9.2 Synchronisation par appel de procédure
■
Appel différé de procédure
Un appel différé de procédure (Differed Procedure Call - DPC) permet la prise en
compte différée de situations moins prioritaires que la situation courante comme le
réordonnancement des threads ou l'appel d'une procédure par un pilote. Les DPC sont
gérés dans une file d'attente par les objets DPC.
■
Appel asynchrone de procédure
L'appel asynchrone de procédure (Asynchronous Procedure Call - APC) permet
d'exécuter un thread donné dans son contexte d'exécution. Deux classes d'APC sont
définies : APC en mode noyau et APC en mode utilisateur.
• En mode noyau, un APC est utilisé par les sous systèmes d'environnement ou les
pilotes pour interrompre l'exécution du thread et exécuter la procédure demandée.
• En mode utilisateur, un APC est utilisé par les API Win32 pour indiquer
l'exécution d'une routine à la fin d'une entrée/sortie. Elle est prise en compte lors de
la sélection du thread par l'ordonnanceur et mise en attente dans une file
spécifique.
9.3 Exceptions
Le répartiteur d'exceptions prend en compte les déroutements et exceptions suivants :
Violation d'accès mémoire
Division par zéro pour les nombres flottants
Instruction illégale
Erreur de lecture sur une page mémoire
Dépassement de capacité pour des flottants
Alignement de données incorrect
Violation de la page de garde
Dépassement de capacité pour les nombres entiers
Point d'arrêt du débogueur
Mode pas à pas du débogueur
Entier divisé par zéro
Opérateur réservé aux nombres flottants
Instruction privilégiée
Quota de fichiers de pagination dépassé
Les divers comportements de ces exceptions sont les suivants :
• traitement transparent pour le programme applicatif,
• retour d'un code à la fonction appelante,
• retour au mode utilisateur après filtrage par le noyau pour une prise en compte par
un gestionnaire d'exception basé sur le cadre (frame based exception handler). Le
terme basé sur le cadre fait référence à l'empilement d'un cadre de pile, associé à
un ou plusieurs gestionnaires d'exception, chaque cadre étant associé à un bloc
déterminé du programme. Quand une exception se produit, le noyau recherche le
gestionnaire associé dans le cadre de pile courant. Une recherche infructueuse
provoque l'appel du gestionnaire par défaut.
■
Conséquence d'une exception
Une exception, implicite (matériel) ou explicite (logiciel), provoque l'exécution d'une
chaîne d'événements dans le noyau, en particulier le transfert du contrôle vers le
gestionnaire d'exceptions qui enregistre les causes du déroutement et crée un cadre
d'interruption lui permettant de reprendre ultérieurement son exécution.
QUELQUES MECANISMES INTERNES DE WINDOWS
275
──────────────────────────────────────────────────────────────
9.4 Section critique
■
Système monoprocesseur :
Les interruptions sont masquées et l'IRQL modifiée.
La section critique est exécutée.
Les interruptions sont démasquées et l'IRQL modifiée à nouveau.
■
Architecture multiprocesseurs
Un verrou sur boucle gère l'accès à une ressource critique et toute autre activité est
préemptée pendant l'exécution de la section critique.
9.5 Synchronisations dans l'exécutif
■
Ressources de l'exécutif
Ces objets disposent de leurs propres services pour initialiser, verrouiller, libérer les
ressources qu'ils contrôlent. Leur accès, uniquement par le noyau, est exclusif en
écriture ou partagé en lecture.
■
Répartiteurs d'objets
Les (objets) répartiteurs d'objets associés aux processus ou aux threads utilisateurs
permettent de synchroniser un thread sur un objet de type processus, événement,
sémaphore, structure mutex, etc., et de définir les actions correspondantes. Ils sont
accessibles par les primitives de bas niveau WaitForSingleObject et
WaitForMultiplesObjects et n'ont pas les limitations des verrous sur boucle.
■
Graphe d'état des threads et des objets associés par un répartiteur d'objets
Pour synchroniser l'objet sur les processus et threads, le répartiteur utilise deux
drapeaux d'état : celui du thread et celui de l'objet à synchroniser avec ce dernier.
Le graphe d'évolution des états du thread selon l'état de l'objet associé est le suivant :
Initialisé
Terminé
Prêt
Objet signalé
En attente
Attente
par le thread
du descripteur d'objet
En cours d'exécution
Transition
Etats d'attente
276
CHAPITRE IX
──────────────────────────────────────────────────────────────
Un thread ne peut poursuivre son exécution tant que son état n'est pas "Prêt". Le
changement d'état s'effectue quand l'(es) objet(s) attendu(s) est (sont) signalé(s)
(notification de disponibilité) ce qui libère d'éventuels threads en attente.
Exemples
Requête d'un objet par un thread en mode utilisateur, modification de l'état du thread
et mise en attente, déroulement de l'événement, parcourt de la file des threads pour
réveil d'un candidat puis réordonnancement.
■
Classes de répartiteur
Une classe de répartiteur d'objet gère un type de synchronisation spécifique. Ainsi, la
structure mutex gère l'exclusion mutuelle, un sémaphore agit comme une porte de
contrôle vers une ressource utilisée par un nombre défini de threads. Les événements
sont donc utilisés pour notifier l'exécution d'une action donnée.
Type d'objet
Processus
Thread
Notification d'événement
Synchronisation d'événement
état signalé
terminaison du dernier thread
terminaison du thread
définition de l'événement par le thread
définition de l'événement par le thread
Sémaphore
Compteur
Structure mutex
Fichier
file d'attente vide
fin du quantum
mutex libéré par le thread
fin d'E/S
Objets du répartiteur Etat initial
Mutex
(mode noyau)
Mutex
(mode user)
Sémaphore
Effets du changement d'état Etat modifié Effet du chgt d'état
Libération du mutex
par le thread propriétaire
Non signalé
Le thread libéré
prend possession du mutex
Libération du mutex
par un thread
Non signalé
Signalé
Le noyau relance
un thread en attente
Signalé
Le noyau relance
un thread en attente
Le thread libéré
prend possession du mutex
Libération du sémaphore
par un thread
Non signalé
Un thread prend possession du
sémaphore
Définition de l'événement
par un thread
Evénement
effet sur threads en attente
tous libérés
tous libérés
tous libérés
libération
d'un
thread ;
événement redéfini
tous libérés
tous libérés
libération d'un thread
tous libérés
Non signalé
Signalé
Le noyau relance un
ou plusieurs threads
en attente.
Signalé
Le noyau relance un
ou plusieurs threads
en attente.
Le noyau relance un ou plusieurs
threads
Un thread dédié définit un des événements d'une paire.
Paire
d'événements
Non signalé
Le noyau relance l'autre thread dédié
Signalé
Le noyau réveille le
thread dédié
Signalé
Le noyau réveille
tous les threads en
attente.
Terminaison d'un thread
Compteur
Non signalé
.
Un thread réinitialise un objet thread.
Thread
Non signalé
Signalé
Le noyau réveille
tous les threads en
attente
QUELQUES MECANISMES INTERNES DE WINDOWS
277
──────────────────────────────────────────────────────────────
9.6 Appel de procédure locale
L'appel de procédure locale (Local Procedure Call - LPC) permet à deux processus
système d'échanger des messages en mode client-serveur.
Exemples
Appel de LPC par les RPC, communications entre processus winlogon et serveur
d'authentification, ou serveur d'authentification et moniteur de sécurité.
Trois modes d'échanges de messages sont implémentés :
• Un message d'une taille inférieure à 256 octets utilise un LPC associé à un tampon
contenant le message, transféré depuis l'espace privé du processus expéditeur dans
l'espace système, puis vers le processus utilisateur destinataire après traitement.
• Les messages d'une taille supérieure à 256 octets utilisent une zone de mémoire
partagée par les processus émetteur et destinataire qui reçoit une notification
d'écriture une fois celle-ci réalisée.
• Un serveur peut écrire dans une zone de mémoire partagée par plusieurs clients.
Les processus utilisent un unique objet port pour dialoguer et quatre types de ports :
• port de connexion serveur nommé : port nommé point de requête de connexion sur
lequel les processus clients peuvent se connecter pour dialoguer avec le serveur.
• port de communication serveur : port non nommé permettant au processus serveur
de dialoguer avec un processus client donné.
• port de communication client : port non nommé utilisé par un processus client pour
communiquer avec un processus serveur donné.
• port de communication non nommé : port non nommé utilisé par deux threads d'un
même processus pour communiquer.
■
Algorithme d'allocation d'un port LPC
• Requête de création par le serveur d'un objet port de connexion serveur nommé.
• Si requête satisfaite, création d'un port de communication client et d'un port de
communication serveur puis transmission des canaux d'accès correspondants.
File d'attente
de messages
Processus client
Processus serveur
Handle
Vue de la
section
(côté client)
Handle
Port de
communication
serveur
Port de
communication
client
Handle
Vue de la
section
(coté serveur)
Section
partagée
278
CHAPITRE IX
──────────────────────────────────────────────────────────────
Exercice
A partir de l'analyseur de performances, afficher et interpréter les courbes suivantes :
Système/Temps total partagé,
Système/Temps total de l'utilisateur,
Processeur/Temps privilégié
Processeur/Temps utilisateur,
Processus/Temps utilisateur,
Thread/temps utilisateur.
10. SECURITE
Windows est doté de mécanismes de sécurité qui le rendent beaucoup plus stable et
sécurisé que ses ancêtres MS/DOS ou Windows 9x. Les principaux constituants du
mécanisme de sécurité de Windows sont les suivants :
• système d'exploitation multitâches et multiprocesseurs,
• gestion de fichiers fiable et robuste,
• gestion sécurisé des utilisateurs et des groupes,
• gestion d'attributs de sécurité sur les fichiers.
10.1 Services généraux
■
Ouverture de session
Toute ouverture de session nécessite l'authentification de l'utilisateur : identificateur,
mot de passe. L'administrateur peut définir une stratégie de gestion des mots de passe
(mécanisme d'aging).
■
Contrôle d'accès discrétionnaire
Tout propriétaire d'une ressource peut définir des droits d'accès à cette dernière.
■
Audit
Un mécanisme d'audit de sécurité permet de définir des événements à auditer.
■
Protection mémoire
Le gestionnaire de la mémoire définit des accès privés à la mémoire.
10.2 Composants du système de sécurité
■
Moniteur de référence de sécurité (Security Reference Monitor - SRM)
Ce sous système de l'exécutif (ntoskrnl.exe) assure la vérification de l'accès de sécurité
sur les objets par définition ou modification des privilèges associés.
QUELQUES MECANISMES INTERNES DE WINDOWS
279
──────────────────────────────────────────────────────────────
■
Serveur d'autorité de la sécurité locale (Local Security Authority server - LSA)
Le processus lsass gère la stratégie locale de sécurité du système à savoir :
• la liste des utilisateurs et la stratégie des mots de passe,
• la liste des privilèges accordés aux utilisateurs et aux groupes,
• la configuration de l'audit de sécurité.
■
Base de données de la stratégie
Cette base de données est définie dans la base de registres à la clé :
HKEY_LOCAL_MACHINES\Security.
Elle contient les paramètres de la stratégie du système de sécurité :
• liste des domaines sécurisés permettant de réaliser les ouvertures de session,
• liste des utilisateurs autorisés et mode d'accès (local, réseau, ou services),
• liste des utilisateurs ayant reçu des privilèges et les audits à réaliser.
■
Serveur du gestionnaire des comptes de sécurité (SAM server)
Le système de gestion des utilisateurs est accessible dans la base de registres :
HKEY_LOCAL_MACHINE\SAM
La bibliothèque de liens dynamiques MSV1_0.dll, qui vérifie le nom de l'utilisateur et
son mot de passe, est appelée par le processus lsass.
■
Processus d'ouverture de session
Le processus (client) winlogon.exe saisie nom et mot de passe pour transmission au
service LSA qui les vérifie puis crée le processus initial d'ouverture de session.
Le service d'ouverture de session sur le réseau est appelé par le processus services.
L'authentification est ensuite gérée par le processus lsass.
lsass.exe
Enregistreur
du journal d'événements
winlogon.exe
Stratégie
LSA
Mode utilisateur
Serveur
LSA
Serveur
SAM
SAM
MSV1_0.DLL
Mode Noyau
Exécutif NT
Gestionnaire
d'E/S
Gestionnaire de cache
Système de
fichiers
Pilotes de périphériques
Moniteur de référence
de sécurité (SRM)
Processus
et thread
Mémoire
virtuelle
Gestionnaire d'objets / RTL de l'Exécutif
Couche HAL (abstraction matérielle)
Noyau
280
CHAPITRE IX
──────────────────────────────────────────────────────────────
10.3 Protection des objets
■
Objets
Les objets suivants ont des attributs de protection : fichiers, périphériques, tubes
nommés et anonymes, processus et threads, événements, mutex et sémaphores,
compteurs, jetons d'accès, bureaux, partages en réseau, services, clés de la base de
registres, imprimantes. Le gestionnaire d'objets assure donc les contrôles de sécurité,
en liaison avec le moniteur de sécurité.
■
Descripteurs de sécurité et contrôle d'accès
Un descripteur de sécurité comporte les attributs suivants :
• SIDs du propriétaire et du groupe principal d'appartenance à l'objet,
• liste de contrôle d'accès discrétionnaire (Discretionary Access Control
List - DACL) qui définit les opérations et la liste des utilisateurs autorisés et liste de
contrôle d'accès système (System Access Control List - SACL) qui spécifie les
opérations pour lesquelles les utilisateurs doivent être connectés.
10.4 Jetons d'accès et usurpation d'identité
Un jeton d'accès est une structure de données contenant l'identification de sécurité
d'un processus ou d'un thread à savoir son identificateur de sécurité SID, ses groupes
d'appartenance, la liste des privilèges (activés ou désactivés). Le gestionnaire d'objet
alloue le jeton d'accès en mode noyau, sur lequel pointe le bloc de processus de
l'exécutif ou le bloc de threads comme l'illustre l'exemple ci-dessous.
Exemple
Les boutons Token et Thread sont désactivés le thread sélectionné n'ayant pas de jeton
à cet effet.
QUELQUES MECANISMES INTERNES DE WINDOWS
281
──────────────────────────────────────────────────────────────
■
Jeton d'accès d'un processus et d'un thread
Tout processus a un jeton d'accès hérité de son créateur le jeton initial étant délivré
par le processus winlogon.exe. Par défaut, un thread utilise le jeton d'accès du
processus associé. Un thread serveur s'exécute donc avec les droits de l'administrateur.
Quand il exécute des requêtes d'un client, il utilise les droits de ce dernier dont il
usurpe l'identité. Un client peut limiter cette usurpation en spécifiant la qualité de
sécurité du service à sa connexion.
■
Graphe de l'audit de sécurité
Sous système
protégé
Authentification SAM
LSA
Enregistreur
du journal
d'événements
Journal
Audit
LSA
Serveur Win32
Appel
au services système
d'audit
LPC
stratégie
d'audit
LPC
Enregistrement
d'audit
Moniteur de référence
de sécurité
(SRM)
Gestionnaire d'Objets
NTFS
Base de registres
Gestionnaire de processus
etc.
11. SYSTEME DE GESTION DES ENTREES/SORTIES
Le système de gestion des entrées/sorties, composant de l'exécutif, utilise les concepts
de fichier virtuel, flot d'entrées/sorties, API de haut niveau (utilisateur), API de bas
niveau (noyau). Il est architecturé en couches selon le modèle suivant :
API du sous système
Gestionnaire d'entrées/sorties
Primitives de
support du pilote
Pilote de périphérique en
mode noyau
Primitives de bas niveau d'E/S
d'accès à la HAL
Ports et registres d'entrées/sorties
282
CHAPITRE IX
──────────────────────────────────────────────────────────────
Les couches ont les fonctions suivantes :
• L'API du système d'entrées/sorties constitue les services système internes de
l'exécutif, appelé par les bibliothèques dynamiques.
• Le gestionnaire d'entrées/sorties assure le traitement des services requis par le
gestionnaire d'entrées/sorties.
• Les pilotes traduisent les requêtes d'entrées/sorties sur les périphériques virtuels sur
des requêtes d'entrées/sorties sur des périphériques réels.
• Les primitives de support de périphérique sont appelées par les pilotes pour
exécuter l'entrée/sortie.
• Les primitives d'accès à la couche d'abstraction matérielle en masquent les
variations aux pilotes.
■
Fonction du gestionnaire d'entrées/sorties
Les requêtes d'entrées/sorties sont pour la plupart présentées sous forme de paquets
d'entrées/sorties (Input Output Request Packet - IRP) pour contrôler leur exécution.
Le gestionnaire d'entrées/sorties fournit aussi des services flexibles permettant aux
sous systèmes d'environnement tels POSIX d'implémenter leurs primitives
spécifiques. Il gère également :
• les entrées/sorties asynchrones pour désynchroniser les opérations d'entrées/sorties
logiques des opérations d'entrées/sorties physiques et les entrées/sorties de type
disperser/rassembler (scatter/gather) qui réalisent une opération unique à partir de
différents tampons du cache,
• les entrées/sorties rapides, gérées directement sans utilisation d'IRP,
• la gestion directe des fichiers en mémoire.
11.1 Système de fichiers
Deux types de systèmes de fichiers sont supportés sous Windows : FAT et NTFS.
■
Systèmes de fichiers FAT (file allocation table)
Compatibilité historique (MS/DOS , Windows 3.x, Windows 9x (FAT16 et FAT32)),
performances médiocres, taille maximale d'un fichier de 2 Go, identificateur de
fichiers conforme au standard 8.3 (suffixe conventionnel sur 3 caractères), pas de
protection sérieuse.
Equivalence entre noms traditionnels MS/DOS et format long maintenue.
Lettres majuscules et minuscules considérées comme différentes (norme POSIX).
Toutefois, toto.txt et TOTO.txt sont identiques.
QUELQUES MECANISMES INTERNES DE WINDOWS
283
──────────────────────────────────────────────────────────────
■
Systèmes de fichiers NTFS
Les systèmes de fichiers NTFS sont robustes et sécurisés :
• Identificateurs de fichiers d'au plus 255 caractères alphanumériques.
• Prise en charge de la correction de blocs défectueux, gestion des attributs de
sécurité, audit et journalisation.
• Gestion de la fragmentation et bonnes performances.
La commande convert transforme un système de fichiers FAT en un système de
fichiers NTFS. Cette transformation est irréversible.
■
Architecture de NTFS
L'architecture du système de fichiers NTFS est modulaire.
Le pilote NTFS utilise le pilote des systèmes à tolérance de panne qui appelle le pilote
du disque (principe de l'encapsulation).
Il interagit avec le service de journalisation, qui maintient le journal des écritures sur
le disque, le gestionnaire du cache et le gestionnaire de la mémoire virtuelle.
Service de
journalisation
Vidage
du journal
Ecriture dans
le cache
Rapport de la
transaction dans
un journal
Gestionnaire d'E/S
Pilote NTFS
Pilote à
tolérance
de panne
Lecture/écriture
du fichier
Chargement
des données
en mémoire
Gestionnaire
du cache
Pilote de
disque
Accès au fichier en mémoire ou vidage du cache
Gestionnaire de
mémoire virtuelle
Les tables systèmes sont utilisées pour un accès disque selon le schéma suivant :
Processus
Table des canaux d'accès (handles)
Table des
fichiers
Objet fichier
Bloc de contrôle
du fichier
Objet fichier
Attribut des
données
Attributs
définis par
l'utilisateur
284
CHAPITRE IX
──────────────────────────────────────────────────────────────
11.2 Pilotes
On distingue les pilotes suivants :
■
Pilotes de périphériques virtuels
Ils sont utilisés pour émuler les applications 16 bits MS/DOS et appellent les pilotes
de périphérique réels en mode noyau.
■
Pilotes d'affichage et d'impression
Ces pilotes traduisent les requêtes de l'interface GDI en requête spécifique du
périphérique. Les pilotes d'affichage appellent les pilotes miniports vidéo.
■
Pilotes en mode noyau
On distingue les pilotes suivants :
• Pilote de périphériques matériels de bas niveau.
• Pilote d'une classe de périphérique donnée (lecteurs de CDROM, disques IDE ou
SCSI, Dat, etc.).
• Pilote de port d'entrées/sorties (ports SCSI).
• Pilote de miniport qui transfèrent une requête d'entrées/sorties à un type de port
vers un adaptateur donné (SCSI, Ultra SCSI, etc.).
• Pilote des systèmes de fichiers qui convertissent les requêtes d'entrées/sorties en
appels de pilotes.
• Pilote filtrant d'interception de certaines requêtes pour effectuer un traitement
particulier.
Application MS/DOS ou Win16
Appel GDI
Application Win32
VDM
Pilote de périphérique virtuel
DLL de l'API Win32
Mode utilisateur
Mode noyau
Services de l'exécutif NT
GDI (moteur graphique)
Appels ReadFile
WriteFile
Sous-système
Win32
(Win32K.SYS)
Pilote
Pilote
d'affichage d'imprimante
Spooler
Exécutif et noyau
Pilote de port
vidéo
Pilote de périphérique
en mode noyau
éventuellement spécifique
à l'application
Pilote de périphérique
en mode noyau
KDD
Miniport
vidéo
KDD
Port
parallèle
QUELQUES MECANISMES INTERNES DE WINDOWS
285
──────────────────────────────────────────────────────────────
■
Schéma de l'architecture des pilotes
Interface du système d'entrées/sorties
Système de
fichier des
CDROM
Pilote de la
classe des
CDROM
FAT
NTFS
Pilote de la classe
des lecteurs de
bande
Pilote de la
classe des
disques miroirs
Pilote de
port
■
Pilote de
la classe
des disques
Pilote
miniport
Primitives d'un pilote
• Initialisation du pilote à son chargement et création des objets nécessaires à
l'exécution de l'entrée/sortie.
• Choix des primitives : ouverture, lecture, fermeture d'un fichier, etc.
• Initialisation du transfert de données entre le périphérique et l'unité centrale.
• Prise en charge d'interruption (Interrupt Service Routine - ISR) par mise en attente
d'un appel différé de procédure.
• Notification au système de fichiers du succès ou de l'échec d'une entrée/sortie.
• Annulation d'opération.
• Déchargement du pilote et restitution des ressources utilisées.
• Action à exécuter lors de l'arrêt du système.
• Gestion des erreurs.
• Synchronisation.
• Gestion des sections critiques en écriture ou en lecture (verrous sur les
architectures monoprocesseurs et spinlock sur les architectures multiprocesseurs.).
286
CHAPITRE IX
──────────────────────────────────────────────────────────────
11.3 L'administrateur de disques
■
Partitionnement
Une partition principale permet le démarrage (boot). Limitées à 4 sur un disque dur.
Une partition étendue est destinée à contenir des disques logiques ou d'autres
systèmes d'exploitation (Unix, Linux, etc.). Ainsi, un disque physique peut contenir
plusieurs disques logiques (d:, e:, etc.).
■
Convention ARC
Le nom des partitions respectent la dénomination ARC (Advanced Risc Computer),
par exemple dans le fichier boot.ini.
MULTI(x)disk(0)rdisk(z)partition(n)
SCSI(x)disk(y)rdisk(0)partition(n)
contrôleur IDE ou SCSI (BIOS actif)
BIOS du contrôleur SCSI inactif
Interprétation
SCSI(x) ou MULTI(x) x désigne le numéro du contrôleur
disk(y)
id SCSI du disque sur le contrôleur SCSI (toujours 0 pour les
contrôleurs en mode MULTI)
rdisk(z)
toujours 0 sur les contrôleurs SCSI, numéro du disque sur le
contrôleur en mode MULTI (0 pour le premier disque IDE, 1
pour l'éventuel deuxième disque IDE), id SCSI arbitraire
pour les disques SCSI.
partition(n)
numéro de la partition (1 à 4).
■
Création des disques logiques
Une fois le partitionnement réalisé, les différents disques logiques ou systèmes de
fichiers sont créés.
QUELQUES MECANISMES INTERNES DE WINDOWS
287
──────────────────────────────────────────────────────────────
■
Réorganisation des disques et réparations
Il est possible de réorganiser, compresser, modifier l'organisation interne des fichiers
et répertoires sur chaque disque logique.
Certains fichiers, certains répertoires peuvent devenir inaccessibles, soit pour des
raisons matérielles (par exemple un secteur devenu défectueux), soit pour des raisons
internes (tables d'allocation des fichiers inconsistante). Des utilitaires permettent d'y
remédier (accès au bit, au secteur, etc.).
11.4 Dossiers systèmes Windows
■
Documents and Settings
Dossiers contenant les profils et les bureaux des utilisateurs, les raccourcis vers les
menus de démarrage que l'administrateur où l'utilisateur peut personnaliser. Les
principes sont les suivants.
Dossiers communs et dossiers personnalisés
Deux types de dossiers sont accessibles : les dossiers communs (à tous les utilisateurs)
et les dossiers personnels. Tout utilisateur a, par défaut, un profil.
288
CHAPITRE IX
──────────────────────────────────────────────────────────────
Le bureau
Le bureau d'un utilisateur donné est constitué du répertoire
C:\Documents and Settings\ nom_utilisateur\Bureau
Son menu Démarrer est accessible à partir du chemin
C:\Documents and Settings\ nom_utilisateur \Menu Démarrer
■
Program Files
Dossier contenant les dossiers systèmes et quelquefois les données de chaque
application installée.
■
Windows
C'est le dossier contenant les dossiers d'administration (mises à jour de Windows),
gestion des périphériques (dossier INF)
12. LA BASE DE REGISTRES (REGISTRY)
La base de registres contient les données essentielles de la configuration matérielle
et/ou logicielle du poste de travail et permet l'accès ou la modification de tous les
paramètres du système Windows.
Un registre est similaire dans son concept à un fichier de configuration. Il accessible
directement avec un éditeur de registres (regedit ou regedt32).
■
Des fichiers .ini de Windows 3.x à la base de registre
La base de registres est apparue avec Windows 3.x. Elle est alors très restreinte et sert
exclusivement à associer un fichier ou une extension de fichier avec une application
pour l'éditer ou le visualiser.
En 1993, elle est étendue et comprend un ensemble de clés hiérarchiques et de valeurs
(Windows NT).
Sa sauvegarde est appelée ruche (hive).
La base de registre est reprise dans Windows 95 et remplace la plupart des fichiers
d'extension .ini.
■
De SAM à Active Directory
Sous Windows NT, le gestionnaire SAM (Security Account Manager) contient les mots
de passe, remplacé depuis Windows 2000 par Active Directory.
■
L'utilitaire syskey
L'utilitaire syskey renforce le cryptage des mots de passe. Il est toujours valide.
QUELQUES MECANISMES INTERNES DE WINDOWS
289
──────────────────────────────────────────────────────────────
12.1 Répertoires de la base de registre
Sous Windows XP et Serveur, le répertoire %SystemRoot%\System32\Config stocke
les fichiers des ruches suivantes :
SAM (Security Account Manager)
Security
Software
System
■
Gestion des utilisateurs
Les informations relatives à un utilisateur sont stockées dans le répertoire
correspondant à la variable d'environnement %UserProfile%. Il y a une ruche
NTUSER.DAT par utilisateur.
Exemple
Pour l'utilisateur dont le login est "dupont", la valeur %UserProfile% est par défaut
"C:\Documents and settings\dupont".
■
Sauvegarde
Le répertoire %SystemRoot%\repair contient une sauvegarde de la base de registre
ainsi que le répertoire \System Volume Information du disque système.
Des journaux (extension .LOG) et des fichiers de sauvegarde (extension .SAV) sont
utilisés pour pallier à toute forme d'arrêt brutal.
■
Démarrage
Les emplacements des ruches utilisées lors du dernier démarrage sont indiqués sous la
clé hivelist de HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\.
Exemple du contenu de hivelist :
\\REGISTRY\\MACHINE\\HARDWARE"="
\\REGISTRY\\MACHINE\\SECURITY"="\\Device\\HarddiskVolume1\\WINDOWS\\system32\\config\\SECURITY
\\REGISTRY\\MACHINE\\SOFTWARE"="\\Device\\HarddiskVolume1\\WINDOWS\\system32\\config\\software
\\REGISTRY\\MACHINE\\SYSTEM"="\\Device\\HarddiskVolume1\\WINDOWS\\system32\\config\\system
\\REGISTRY\\USER\\.DEFAULT"="\\Device\\HarddiskVolume1\\WINDOWS\\system32\\config\\default
\\REGISTRY\\MACHINE\\SAM"="\\Device\\HarddiskVolume1\\WINDOWS\\system32\\config\\SAM
\\REGISTRY\\USER\\S-1-5-20"="\\Device\\HarddiskVolume1\\Documents and Settings\\NetworkService\\NTUSER.DAT
\\REGISTRY\\USER\\S-1-5-20_Classes"="\\Device\\HarddiskVolume1\\Documents
and
Settings\\NetworkService\\Local
Settings\\Application Data\\Microsoft\\Windows\\UsrClass.dat
\\REGISTRY\\USER\\S-1-5-19"="\\Device\\HarddiskVolume1\\Documents and Settings\\LocalService\\NTUSER.DAT
\\REGISTRY\\USER\\S-1-5-19_Classes"="\\Device\\HarddiskVolume1\\Documents
and
Settings\\LocalService\\Local
Settings\\Application Data\\Microsoft\\Windows\\UsrClass.dat
\\REGISTRY\\USER\\S-1-5-21-123456789-1234567890-123456789-500"="\\Device\\HarddiskVolume1\\Documents
and
Settings\\Administrateur\\ntuser.dat
\\REGISTRY\\USER\\S-1-5-21-123456789-1234567890-123456789-500_Classes"="\\Device\\HarddiskVolume1\\Documents
and Settings\\Administrateur\\Local Settings\\Application Data\\Microsoft\\Windows\\UsrClass.dat
290
CHAPITRE IX
──────────────────────────────────────────────────────────────
12.2 L'éditeur de registres
L'interface permet de modifier les clés de la base de registre.
■
Les gestionnaires de clé
La base de registre est partagée en sections logiques dont les noms commencent par
HKEY, abréviation de Handle to a KEY, gestionnaire de clé.
Cinq fenêtres, chacune associée à une ruche, apparaissent avec les fonctions
suivantes :
HKEY_CLASSES_ROOT (HKCR)
Contient les associations des types de fichiers (extensions) avec des applications, des
données de configuration des fichiers .com, des identifiants de classe d'objet OLE ce
qui permet de lancer automatiquement l'exécutable correspondant et d'assurer la
compatibilité historique avec les systèmes Windows.
On y retrouve les classes du sous arbre HKEY_LOCAL_MACHINE\SOFTWARE.
Ces associations peuvent être modifiées par l'explorateur ou le gestionnaire de
fichiers.
Exemple
Les suffixes .bat et XML sont respectivement associés à batfile et XML script engine.
HKEY_CURRENT_CONFIG
Paramètres spécifiques à la configuration courante mis à jour en temps réel et
régénérés à chaque démarrage. On y retrouve les classes du sous arbre :
HKEY_LOCAL_MACHINE\SOFTWARE\SYSTEM.
QUELQUES MECANISMES INTERNES DE WINDOWS
291
──────────────────────────────────────────────────────────────
HKEY_CURRENT_USER
Paramètres de configuration liés à l'environnement de l'utilisateur actif. Ce n'est
qu'une sous-branche de HKEY_USERS.
HKEY_LOCAL_MACHINE (HKLM)
Paramètres de configuration des périphériques, des pilotes, du système d'exploitation,
de la sécurité et de la base des comptes communs à l'ensemble des utilisateurs.
• La sous clé Hardware décrit le matériel. Elle est reconstruite à chaque démarrage.
• La sous clé DeviceMap contient les entrées des pilotes.
• La sous clé ResourceMap associé chaque périphérique à ses ressources (IRQ,
DMA, adresse d'entrée/sortie, etc.).
• La sous clé SAM contient les informations de sécurité.
• La sous clé Software contient les paramètres des programmes spécifiques installés
dans l'arbre HKEY_CLASSES_ROOT.
HKEYS_USERS
Contient les informations spécifiques à chaque utilisateur. La sous-branche
correspondant à l'utilisateur courant est la branche HKEY_CURRENT_USER.
Les deux fenêtres ci-après n'apparaîssent pas.
HKEY_PERFORMANCE_DATA
Générée dynamiquement sans affichage.
HKEY_DYN_DATA
Générée dynamiquement sans affichage.
■
Définition des clés de la base de registres
Le kit de ressources contient le fichier regentry.hlp, qui décrit la signification de la
plupart des clés de la base de registres dont chaque clé contient des valeurs
typées dont il existe une quinzaine de types.
Binaire
REG_BINARY
Entier
DWORD REG_DWORD (32 bits)
REG_DWORD_BIG_ENDIAN
REG_DWORD_LITTLE_ENDIAN
QWORD REG_QWORD (64 bits)
REG_QWORD_BIG_ENDIAN
REG_QWORD_LITTLE_ENDIAN
Chaîne de caractères
Chaîne simple REG_SZ
Chaîne extensible REG_EXPAND_SZ
Chaîne multiple REG_MULTI_SZ
292
CHAPITRE IX
──────────────────────────────────────────────────────────────
Donnée non typée
NONE, REG_NONE
Ressource
REG_RESOURCE_LIST
REG_RESOURCE_REQUIREMENTS_LIST
REG_FULL_RESOURCE_DESCRIPTOR
REG_LINK
Guid
Des clés et valeurs de clés sont affichées sous le format Globally Unique
Identifier - Guid sur 16 octets.
Exemple
3F2504E0-4F89-11D3-9A0C-0305E82C3301
Minuscule et majuscule
Contrairement à l'usage sous Windows, la casse est respectée.
Espace dans les noms de clés
Le caractère d'espacement peut être utilisé dans les noms de clés.
Exemple : la clé Use Search Asst
■
Remarques sur la sécurité
Le service "Accès à distance au Registre" (RemoteRegistry) permet de lire et modifier
la base de registre à distance. Pour des raisons de sécurité, il est donc prudent de le
désactiver lancé par la commande "svchost.exe -k LocalService" (Processus Service
HOST pour l'utilisateur local).
■
Maintenance de la base de registre
L'absence de la base de registres empêche le système de fonctionner.
Ses entrées erronées doivent être nettoyées.
Une sauvegarde de la base de registre à un instant donné s'appelle un point de
restauration. Windows en effectue régulièrement ce qui permet de revenir à la
configuration sauvegardée par le point de restauration. Ces derniers sont stockés dans
le répertoire System Volume Information.
Des utilitaires tels regedit ou rstrui permettent de revenir à un point de restauration,
par exemple lors du démarrage en mode sans échec. Si le problème est bloquant (le
démarrage ne s'effectue pas dans sa totalité), l'utilisateur peut revenir à la dernière
configuration connue.
CHAPITRE X
L'ADMINISTRATION ET SES OUTILS
L'administration est une tâche complexe nécessitant de solides compétences
techniques (système, réseau, bases de données). L'administrateur devant gérer des
systèmes hétérogènes, il doit connaître la philosophie du fonctionnement du système
plus que le détail fastidieux des commandes. Il dispose de commandes (mode texte)
ou d'interfaces graphiques, propriétaires ou du domaine public telle Webmin.
1.
L'ADMINISTRATION ET LA SECURITE
1.1 Services et outils d'administration
L'administrateur d'un système d'informations assure les services suivants :
• Connaissance des outils standards d'administration pour mise en place des services
systèmes et réseau, génération système, optimisation des performances, évolutions
du système d'information sur les plans matériel et logiciel.
• Mise en place d'outils d'analyse et comptables, de procédures de surveillance.
• Gestion des utilisateurs (ajout, suppression, aide et documentation).
• Gestion des systèmes de fichiers (cohérence, suivi du fonctionnement, procédures
de nettoyage, de sauvegarde, d'installation et maintenance) et mise en place d'un
système sécurisé (système, données, tolérance de pannes, etc.).
Les outils de base sont des utilitaires spécifiques d'installation de logiciels ou de
génération système.
Les commandes d'administration normalisées constituent les outils standards des
systèmes actuels, dotés de nombreux et solides outils d'administration qui assurent
tous les services précédemment décrits à partir de commandes d'administration, des
répertoires spécifiques, des processus spécialisés.
Les outils constructeurs, dont l'utilisation peut être impérative, sont spécifiques à
chacun et permettent d'effectuer les tâches usuelles d'administration. Ils masquent les
problèmes sous jacents et permettent d'assurer la gestion quotidienne sans avoir les
compétences d'un administrateur professionnel. En cas de problèmes imprévus,
l'utilisateur néophyte risque de ne pas savoir comment le résoudre.
Exemples
SAM ou SMH (HP-UX), SMIT (AIX), Linuxconf, KDE, Gnome (Linux).
294
CHAPITRE X
──────────────────────────────────────────────────────────────
■
Le carnet de bord
Les informations du carnet de bord sont les suivantes :
Procédures spécifiques à un site donné
Matériel ou logiciel spécifiques nécessitant une procédure particulière.
Messages d'avertissement à notifier aux utilisateurs lors de l'indisponibilité d'une
ressource distribuée telle une base de données.
Gestionnaires locaux de services réguliers d'archivage : utilisation, labellisation.
Configuration du système
Paramètres spécifiques d'une installation donnée.
Journaux
Enregistrement des modifications de l'installation (matériel et logiciels),
enregistrement des raisons des arrêts, de la maintenance, journal des erreurs ou
activités inhabituelles.
Procédures spécifiques à un site donné
Démarrage et arrêt, sauvegarde des données, procédures d'urgence, configuration du
système et numéro de série.
Etat du système
Description des modifications du système en indiquant les auteurs et les causes,
raisons des démarrages et arrêts des divers services, heures et type des sauvegardes.
1.2 Administration sécurisée
L'administrateur a un rôle déterminant dans la mise en place d'un politique de sécurité
qui ne s'improvise pas, les contraintes de sécurité augmentant dans un réseau les
contrôles des accès distants s'ajoutant aux contraintes locales.
Sont définies dans le présent paragraphe les notions élémentaires d'administration
sécurisée d'un poste de travail (gestion des utilisateurs, installation, etc.). Les
commandes présentées sont issues du monde Unix/Linux. On retrouve bien
évidemment ces concepts dans les systèmes Windows Serveurs.
■
Environnement des utilisateurs
L'environnement (profil) des utilisateurs doit être prévu de telle sorte qu'il puisse
travailler sans être gêné ce qui nécessite un travail d'administration préalable les
utilisateurs n'étant en général pas des informaticiens et ne souhaitant pas le devenir.
Un utilisateur doit être verrouillé dans son application.
■
Surveillance du fonctionnement
Un contrôle périodique de toute station est recommandé pour détecter d'éventuelles
incohérences de fonctionnement. La mise en place d'audit peut être utile.
L'ADMINISTRATION ET SES OUTILS
295
──────────────────────────────────────────────────────────────
■
Organisation et réorganisation des données
L'organisation des données sur différents disques et systèmes de fichiers est
souhaitable. Une réorganisation périodique des systèmes de fichiers, par exemple
mensuelle, permet d'optimiser le fonctionnement général du système.
■
Sauvegarde
Il faut toujours avoir des (bonnes) sauvegardes du système complet pour pouvoir le
restaurer rapidement (cartouche (DAT, DLT), disque dur amovible, système à
tolérance de panne, système RAID, etc.).
1.3 Techniques d'attaque
■
Cheval de Troie
Un cheval de Troie est un programme qui, sous l'apparence d'un programme normal,
permet à un pirate de pénétrer dans le système comme un script d'un répertoire public
se comportant d'une façon similaire à une commande demandant un mot de passe et
faisant ensuite croire à celui qui l'a lancée qu'il a commis une faute de frappe. Le mot
de passe est "volé" par le cheval de Troie qui s'autodétruit ensuite ce qui permet à la
commande réitérée de fonctionner correctement. Une façon simple de se protéger est
de supprimer le répertoire . de la variable PATH ou de le déplacer à sa droite.
■
Virus
Un virus est un programme à deux fonctions : reproduction et sabotage par utilisation
d'une faille de sécurité du système. Son principe de fonctionnement est le suivant :
• pénétration dans le système suite à l'utilisation d'un objet infecté (CD, clé USB,
accès internet, courriel, etc.) ou suite à une prise de contrôle externe utilisant une
faille du système d'exploitation.
• Infection de tout applicatif lors de son lancement par modification de son code ce
qui provoque une utilisation ultérieure défectueuse et la reproduction du virus.
Tout virus laisse une signature qui permet de l'identifier et de désinfecter le code
malade si l'infection est détectée suffisamment rapidement.
■
Bombe logique
Une bombe logique est un programme camouflé dont le déclenchement différé
exécute une action néfaste telle le formatage d'un disque après prise de contrôle.
■
Ver
Un ver est un programme qui se reproduit en exécutant une action néfaste.
Contrairement au virus, il ne requiert aucune intervention extérieure. Il est autonome
et capable de se déplacer dans un réseau. Le ver de l'Internet (1988), déclenché
"accidentellement" par un étudiant l'a paralysé pendant 48 h.
296
CHAPITRE X
──────────────────────────────────────────────────────────────
1.4 Prévention des attaques
Les principes élémentaires pour se prémunir des virus sont les suivant :
■
Principe de précaution
Tout objet téléchargé est contrôlé par un logiciel de recherche et d'éradication des
virus (Avast, MacAffe, Norton, Kaspersky, etc.), bien évidemment à jour.
■
Chien de garde (watchdog)
Un programme résident en mémoire contrôle tous les accès disque et demande
confirmation d'exécution de certaines requêtes, par exemple la modification d'un
fichier exécutable. Il faut également surveiller les pièces jointes des courriels.
■
Eradication
Des logiciels (anti virus) permettent d'éradiquer les virus authentifiés d'un système
infecté. Il faut les utiliser le plus rapidement possible.
L'ADMINISTRATION ET SES OUTILS
297
──────────────────────────────────────────────────────────────
■
Règles complémentaires de prévention
Vérification à chaque démarrage du bon état général des systèmes de fichiers.
Vérification périodique de l'absence de processus parasite dont on ne connaît pas la
fonction.
Non utilisation d'applications ou de données dont l'origine n'est pas garantie ou
certifiée et absence de piratage.
Verrouillage des postes de travail inutilisés.
Administration centralisée sur un serveur protégé, avec un système d'exploitation
fiable et sécurisé (Unix/Linux, Windows Serveur, Windows XP Pro, Cisco, etc.).
Protection de certains fichiers ou de certaines partitions (lecture seule).
Téléchargement systématique sur des serveurs de données sécurisés pour le stockage
de données téléchargées.
Surveillance des accès Internet par un pare-feu (firewall et proxy).
298
CHAPITRE X
──────────────────────────────────────────────────────────────
2.
LA GESTION DES UTILISATEURS SOUS UNIX/LINUX
La création ou la suppression des utilisateurs s'effectue avec trois fichiers du
répertoire /etc :
• le fichier passwd contenant la liste de tous les utilisateurs référencés,
• le fichier group contenant la liste des groupes ainsi que leurs membres,
• le fichier shadow, contenant les mots de passe cryptés des utilisateurs.
Ces fichiers ne doivent être accessibles en écriture qu'à l'administrateur (et encore).
2.1 Le fichier passwd
Ce fichier a une ligne de sept champs séparés par le caractère : par utilisateur :
logname:mot_de_passe_crypté:uid:GID:information:répertoire_de_login:commande
Nom de connexion
Identificateur (unique) de l'utilisateur (réponse à l'invitation à se connecter login),
composé d'au moins huit caractères.
Mot de passe
Ce champ est presque toujours remplacé par l'un des caractères * ou x pour tout
utilisateur, les mots de passe étant déplacés dans le fichier invisible shadow. Le mot
de passe a usuellement un nombre de caractères alphanumérique compris entre 6 et 8
et doit contenir au moins 2 lettres, 1 chiffre ou caractère spécial.
Identificateur de l'utilisateur
Le champ entier uid, compris entre 100 et 32767, permet l'identification de
l'utilisateur. Il doit être unique car deux utilisateurs ayant le même uid ont les mêmes
attributs de propriété et sécurité sous des noms différents et les fichiers ont plusieurs
propriétaires.
Identificateur du groupe
Le champ entier gid est l'identificateur du groupe d'appartenance de l'utilisateur.
Informations
Le champ information est disponible pour ajouter divers renseignements tels le nom
patronymique ou le numéro de téléphone.
Répertoire de connexion
Chemin d'accès absolu du répertoire de connexion de l'utilisateur (home directory).
Commande de connexion
Chemin d'accès absolu de l'applicatif lancé à la connexion (interprètes de commande,
interface graphique, etc.). Tout programme est valide ce qui permet de limiter les
droits de l'utilisateur et de le déconnecter à la fin d'exécution du programme.
Séparateur des champs
Le caractère : est le séparateur des champs. Son utilisation est interdite à d'autres fins.
L'ADMINISTRATION ET SES OUTILS
299
──────────────────────────────────────────────────────────────
Exemple
root:*:0:1:Operator:/:/bin/csh
nobody:*:65534:65534::/
sys:*:2:2::/:/bin/csh
■
Utilisateurs particuliers
Utilisateurs liés aux fonctions système, dont fait partie au moins l'administrateur root
qui a pour uid 0 ainsi que les utilisateurs bin, sys, manager, etc.
Utilisateurs liés à une commande, par exemple who.
Utilisateurs publics (guest) pouvant accéder à certaines ressources publiques.
■
Quelques privilèges d'administration
• Opération autorisée sur n'importe quel fichier ou processus.
• Modification de l'heure.
• Modification des paramètres du noyau.
• Choix du nom de domaine.
• Création, montage et démontage des systèmes de fichiers.
• Modification des attributs de propriété et de sécurité des objets.
• Gestion des mots de passe.
• Arrêt du système.
La gestion de la sécurité d'un système dépend essentiellement de l'administrateur qui
doit définir un compromis entre ouverture et sécurité.
■
Connexion anonyme
Le login anonymous est utilisé pour des connexions ouvertes sur le monde extérieur.
2.2 Groupes
■
Généralités
Un groupe est un ensemble d'utilisateurs disposant de privilèges communs (partage et
contrôle d'accès) à certains fichiers.
L'accès à certaines commandes peut être restreint en les réservant à certains groupes
d'utilisateurs disposant des privilèges corrrespondants.
Un utilisateur peut faire partie d'au plus 16 groupes.
On distingue les groupes locaux à un poste de travail et les groupes globaux (définis
dans un réseau (groupes de travail, domaine, etc.)), éventuellement avec la définition
d'annuaires (LDAP).
Cette notion est similaire dans les mondes Unix/Linux et Windows.
300
CHAPITRE X
──────────────────────────────────────────────────────────────
■
Le fichier local /etc/group
Le fichier local group est constitué, pour chaque groupe déclaré, d'une ligne de quatre
champs séparés par le caractère : et dans l'ordre ci-dessous :
nom:mot_de_passe_crypté:gid:membres
Interprétation
nom
mot_de_passe
gid
membres
nom du groupe (six caractères maximum).
mot de passe crypté pour le groupe, utilisé par les utilisateurs qui
désirent changer de groupe (commande newgrp) sans y être inscrit.
Mais comme il n'y a pas de moyen simple pour mettre ce mot de
passe, ce champ est pratiquement toujours vide.
numéro (entier) du groupe.
liste des membres (noms de connexion séparés par une virgule) du
groupe.
Exemple
zero:*:0:who,rwho,finger,philipp
nobody:*:-2:nobody
daemon:*:2:daemon
operator:*:7:root,cshroot,adm,dupond
user:*:20
■
Règles d'utilisation des groupes
Différents groupes sont à définir selon les types de travaux effectués et l'usage est
d'affecter les numéros de groupe inférieurs à 100 aux groupes systèmes.
Le groupe par défaut est le groupe other.
La commande groups affiche la liste des groupes d'appartenance d'un utilisateur.
Un utilisateur déclaré dans plusieurs groupes peut changer de groupe courant en
utilisant la commande newgrp.
■
Classes d'administrateurs
Pour des raisons de sécurité et de déontologie, il est préférable de définir des classes
d'administrateur avec des privilèges limités à un type d'application donné, par
exemple l'administration des mots de passe, des bases de données, de la comptabilité...
Sous Unix/Linux, les administrateurs sont classés de la façon suivante :
Login
uid
root
0
sys
3
bin
2
adm
4
ftp
5
daemon
1
lp
71
Fonction
accès à l'intégralité des services système
propriétaire de certains fichiers systèmes
propriétaire de la plupart des commandes
propriétaire de certains fichiers d'administration
serveur de téléchargement
propriétaire de certains démons
administrateur des services, objets et fichiers d'impression.
L'ADMINISTRATION ET SES OUTILS
301
──────────────────────────────────────────────────────────────
2.3 Terminal sécurisé et login root
■
Utilisateur synonyme de root
On définit un utilisateur synonyme de root dans le fichier passwd en lui donnant l'uid
et le gid 0 ce qui permet à tout administrateur de se connecter avec son identificateur
et son mot de passe personnel.
■
Poste de travail sécurisé
Un terminal est sécurisé si l'administrateur peut s'y connecter directement ce qu'il faut
interdire sur un poste banalisé.
La console système est le seul terminal sécurisé. Elle doit être allumée en permanence
car quand un utilisateur exécute la commande /bin/su, un message s'y affiche.
Une protection de l'accès à la machine et à la console système permet d'offrir un
meilleur niveau de sécurité.
Il ne faut jamais laisser l'accès libre à un terminal quand une session est ouverte. Des
utilitaires tels xlock permettent un verrou temporaire d'accès contrôlé par mot de
passe.
■
Groupe su ou commande sudo
Tout candidat au login root doit impérativement utiliser la commande /bin/su, dont
l'usage doit être restreint à un groupe de la façon suivante :
• création d'un groupe su contenant la liste du groupe d'utilisateurs autorisés,
• attribution du fichier /bin/su au groupe su (commande chgrp).
• modification éventuelle du propriétaire du fichier (commande chown),
• modification des droits d'accès et d'utilisation (commande chmod).
■
Audit de la commande su
Le fichier /var/adm/sulog est le journal des utilisations de la commande su.
■
Surveillance des lignes d'accès
Il est possible d'ajouter un mot de passe nécessaire à tout accès extérieur par modem.
2.4 Le fichier shadow
Il est important d'avoir un mot de passe non trivial. Il faut donc proscrire son propre
nom, tous les prénoms, les dates de naissance, les numéros de sécurité sociale...
Le mot de passe doit à la fois être facile à retenir et comporter au moins six caractères
dont certains non triviaux (majuscules, minuscules, chiffres, caractères de contrôle...).
Il doit être changé périodiquement.
Les mots de passe cryptés sont camouflés dans le fichier shadow, accessible par
l'administrateur en lecture seulement.
302
CHAPITRE X
──────────────────────────────────────────────────────────────
■
Les champs du fichier shadow
logname,
mot de passe crypté,
date de dernière modification du mot de passe, en jour depuis le 1er Janvier 1970,
intervalle en jour minimum entre deux changements,
nombre maximum de jours de validité,
masque d'audit,
chaîne de caractère indiquant si le login est anonyme.
Exemple
root:h0xhfsg9NV3pa:7116:::normal:
daemon:NONE:6645:::normal:
joe:4v92wsUm2BVMo:7116:7:28:normal:
■
Service d'aging
Le service de mise à jour des mots de passe (aging) oblige les utilisateurs à changer
périodiquement leur mot de passe tout en leur interdisant d'utiliser un ancien mot de
passe considéré comme périmé.
Le service peut-être désactivé. Il n'est pas utilisé si :
• le nombre de jours entre les changements de mot de passe est nul.
• le nombre de jours d'existence du mot de passe est supérieur à celui de sa validité.
• les quatrième et cinquième champs sont vides.
• le fichier shadow est inaccessible en écriture.
■
Masque d'audit
Le masque d'audit indique le type d'événement à surveiller. Le masque usuel permet
de connaître l'activité normale d'un utilisateur (connexions effectives, tentatives
d'utilisation de la commande su, problèmes d'autorisation sur les fichiers ouverts).
■
Outils constructeurs
Les fichiers passwd et shadow sont modifiés à partir d'interfaces d'administration dont
l'usage est obligatoire.
2.5 Algorithme de création d'un utilisateur
Ajout d'une entrée dans le fichier passwd.
Création d'un répertoire de connexion (home directory).
Affectation d'un ou plusieurs groupes à cet utilisateur.
Création d'un profil (fichier .profile, .login ...).
Rendre l'utilisateur propriétaire de son répertoire (commande chown) et affecter à ce
dernier l'un de ses groupes (commande chgrp).
Mise à jour de fichiers utilisés par certains utilitaires (cron, acct, at)...
L'ADMINISTRATION ET SES OUTILS
303
──────────────────────────────────────────────────────────────
■
Condition de sécurité d'un script de création
Accès réservé à l'administrateur et accès exclusif au fichier passwd (commande vipw).
Contrôles d'unicité de l'identité et du champ uid, contrôle de l'existence du groupe, du
répertoire de connexion et du répertoire parent.
Définition de quotas d'utilisation (espace alloué, nombre de fichiers ouverts, etc.).
Exemple
# !/bin/csh
# sauvegarde fichier passwd
rm –f /etc/passwd.old ; cp /etc/passwd /etc/passwd.old
echo " paramètres de la zone commentaire pour chaque enregistrement "
echo " ------------------------------------------------------------ "
echo "
(1) code :
Prof "
echo "
Eleve "
echo "
2) promotion : 1ère année : promotion 1993 "
echo "
2ème année : promotion 1992 "
echo "
3ème année : promotion 1991 "
echo "
(3) NOM Prénoms "
echo "
(4) COURS (éventuel) "
echo "
(5) date enregistrement (jj-mm-aa) "
echo; echo; echo
echo -n " login : "
set log=$<
grep -s "^${log} :" /etc/passwd
if ( $status == 0 ) then
echo; echo "
Usager deja existant! _"
exec $0
endif
echo
"
groupe :"
echo
"
etudiants
répondez par 1"
echo
"
etudiants2
répondez par 2"
echo
"
prof
répondez par 3"
echo
"
dfcai répondez par 4"
echo
"
autre groupe répondez par 5"
echo -n
"
votre reponse :"
set rep=$<
switch ($rep)
case 1
set grp = user; set chemin = etudiants
breaksw
case 2
set grp = user; set chemin = etudiants2
breaksw
case 3
set grp = prof; set chemin = $grp
breaksw
case 4
set grp = dfcai; set chemin = $grp
breaksw
304
CHAPITRE X
──────────────────────────────────────────────────────────────
case 5
echo -n " entrez le groupe : "
set grp=$<
grep -s "^${grp} :" /etc/group
if ( $status != 0 ) then
echo; echo "
Ce groupe n'existe pas _"
exec $0
endif
echo -n " entrez le chemin d'acces : "
set chemin=$<
breaksw
default
echo; echo "
Ce groupe n'existe pas "
exec $0
breaksw
endsw
echo -n " commentaires : "
set com=$<
set hom = /usr2/$chemin/$log
echo -n " sh/csh/tcsh : "
set she=$<
echo -n " Procédure en cours "
set max=0
foreach n ( `cat /etc/passwd|/usr/5bin/cut -f3 -d :` )
if ( $max < $n ) then
set max=$n
endif
end
echo -n ". "
@ uid = $max + 1
set gid=`grep $grp /etc/group | /usr/5bin/cut -f3 -d :`
echo "${log} : :${uid} :${gid} :${com} :${hom} :/bin/${she}" >> /etc/passwd
echo -n ".. "
mkdir $hom
#définition de l'environnement par défaut
foreach j (.suntools .suntools.sta .defaults .login .profile .cshrc .exrc .rootmenu)
cp /usr/local/gould/$j $hom
end
#l'utilisateur devient propriétaire de son home directory
/etc/chown -R $log $hom
/bin/chgrp -R $grp $hom
echo -n "... "
#mise en place des quotas
switch($grp)
case user
edquota -p guest $log; echo " quotas installés"
breaksw
case dfcai
edquota -p guest $log ; echo " quota installés "
breaksw
default : echo " pas de quota installés "
endsw
L'ADMINISTRATION ET SES OUTILS
305
──────────────────────────────────────────────────────────────
echo "
Opération terminée "
echo -n " Autre utilisateur (o/n) "
set rep=$<
if ( $rep == "o" ) then
exec $0
endif
touch /etc/passwd ; cd /usr/etc/yp ; make
# sauvegarde
rm –f /etc/passwd.old ; cp /etc/passwd /passwd.old
2.6 Suppression d'un utilisateur
■
Opérations à effectuer
Les opérations à effectuer sont les suivantes :
• suppression de l'entrée de l'utilisateur dans le fichier passwd,
• suppression de toute référence à ce dernier dans le fichier group ainsi que les divers
fichiers liés à la messagerie, aux spoules et commandes telles que cron, acct, at ...
• suppression des répertoires et fichiers de l'utilisateur. Ce dernier point est
particulièrement délicat car une destruction en force (rm -rf) du répertoire de
connexion peut provoquer certaines incohérences :
◊ des fichiers d'un autre utilisateur sont détruits.
◊ d'éventuels fichiers de l'utilisateur créés en dehors de son répertoire ne sont pas
supprimés. La commande find permet de les localiser.
◊ des liens symboliques sur des fichiers de l'utilisateur supprimé deviennent
inopérants.
Un script peut automatiser tout ou partie de ces tâches.
■
Commandes standards de gestion des utilisateurs et des groupes (Unix/Linux)
Utilisateurs
Ajout
Modification
Suppression
Paramètres par défaut
useradd
usermod
userdel
defadm
Groupes
Ajout
Modification
Suppression
groupadd
groupmod
groupdel
306
CHAPITRE X
──────────────────────────────────────────────────────────────
3.
GESTION DES SERVICES SYSTEMES SOUS UNIX/LINUX
3.1 Les processus démons, fournisseurs de service
■
Définition
Certaines requêtes de service système sont prises en charge par processus démon,
acronyme français de differed auxiliary execution monitor (daemon). Un démon est
donc "un moniteur auxiliaire à exécution différé" ou plus simplement "un serveur
dédié résident en mémoire", appelé simplement serveur dans tout ce qui suit.
La plupart des serveurs sont initialisés dans la phase de démarrage.
■
Schéma de fonctionnement
L'administrateur définit préalablement le paramétrage des serveurs.
L'utilisateur fait une requête de service déposée dans une file d'attente puis prise en
compte par le serveur.
Utilisateur
Co mmandes
pu bliq ues
requ ête
Files d'attente
Paramétrage
Dém on serveur
Exéc ution
Administrateu r
Com mand es
d'a dministratio n
Exemples
Le serveur init assure le démarrage du système.
Le serveur cron gère le service d’ordonnancement.
Le serveur lpsched prend en charge les requêtes d'impression.
Le super serveur xinetd supervise dynamiquement l'ensemble des services de base de
TCP/IP.
3.2 Modes de fonctionnement du gestionnaire des services
Les services à démarrer sont déterminés par le mode de fonctionnement (niveau
d'exécution) du poste de travail dont les plus usuels sont les suivants :
■
Modes arrêt et moniteur : niveaux 0 et 5
Ils sont souvent identiques. Quelquefois, le niveau 5 réinitialise les tests matériels.
L'ADMINISTRATION ET SES OUTILS
307
──────────────────────────────────────────────────────────────
■
Mode démarrage à chaud : niveau 6
Arrêt et redémarrage du système avec le niveau par défaut.
■
Mode maintenance ou mono-utilisateur : niveaux 1, s et S
Les systèmes de fichiers montés ne sont pas démontés quand le niveau s ou S est
appelé depuis un mode multiutilisateur. Seuls les services lancés par le gestionnaire
init sont tués alors qu'au niveau 1, tous les travaux non attachés à la console le sont.
■
Modes multi travaux : niveaux 2, 3, 4
Plusieurs modes de fonctionnement peuvent être définis par exemple un pour le matin
et un pour l'après-midi. Ces différents niveaux activent des serveurs spécifiques.
Niveau
Mode
0
1
2
3
4
5
6
s ou S
moniteur
mono
multi
multi (à définir)
multi (à définir)
moniteur
redémarrage
mono
Ports d'E/S
console
console
tous
?
?
console
tous
console
Systèmes de fichiers montés
aucun
minimum
décrits
?
?
aucun
décrits
les systèmes de fichiers restent montés.
Application
who -r
niveau courant
run-level 2
■
heure de connexion niveau courant pid niveau précédent.
May 7 17:59
2
0
S
Modification du niveau courant
On appelle le gestionnaire init selon la syntaxe :
init run_level
Exemple
init 3
3.3 Initialisation du gestionnaire des services
Les fonctions du gestionnaire init sont les suivantes :
• initialisation et maintenance du poste (fichier inittab),
• démarrage et arrêt des services systèmes des différents modes de fonctionnement.
■
fichier inittab
Une ligne du fichier inittab a le format :
id:niveau:action:commande
308
CHAPITRE X
──────────────────────────────────────────────────────────────
Interprétation
id
niveau
action
commande
symbole d'un à quatre caractères de différenciation des
lignes.
suite d'entier indiquant les mode(s) d'exécution de la ligne.
mot clef indiquant au serveur le signal d'activation de la
commande qui suit.
nom de la commande à exécuter avec ses arguments.
Les principales actions sont :
bootwait
action exécutée au démarrage seulement,
initdefault
définition du niveau initial par défaut,
off
ligne de commande non exécutée,
once
exécution immédiate sans attente ni relance,
ondemand
analogue à la directive respawn,
powerfail
exécution à réception d'un signal powerfail,
respawn
création du processus s'il n'existe pas et relance s'il se
termine (boucle perpétuelle),
sysinit
exécution préalable à tout accès à la console,
wait
exécution terminée du processus avant poursuite de
l'initialisation.
Exemple
conf::bootwait:conf &>/dev/console 2>&1
rc::wait:rc 1>/dev/console 2>&1
pf::powerfail:powerfail 1>/dev/console 2>&1
01:2:respawn:getty -Tvt100 tty01 19200
■
Réinitialisation du serveur init
La commande init q lit le fichier inittab et réinitialise le niveau d'exécution courant
selon les règles suivantes :
• les actions off, respawn, process et ondemand sont réinitialisées,
• les actions wait et once ne sont pas exécutées.
3.4 Gestion des services systèmes
Les modes de fonctionnement du poste sont définis à partir du répertoire init.d.
■
Propriétés du répertoire init.d
Ses scripts d'administration sont des cibles des liens (matériels ou symboliques) des
répertoires respectifs des différents niveaux d'exécution rc*.d, ce qui permet d'en
partager une version unique.
■
Services à démarrer selon le niveau
Les scripts Snnxxxx des répertoires rc*.d sont définis en fonction leur mode
d'exécution futur.
Les conventions de nommage sont les suivantes :
L'ADMINISTRATION ET SES OUTILS
309
──────────────────────────────────────────────────────────────
• les noms de scripts commencent avec la lettre K (Kill) pour effectuer l'arrêt d'un
service), ou S (Start) pour effectuer son démarrage.
• nn indique l'ordre (croissant) de démarrage,
• xxx indique l'action à exécuter
Exemple
Quelques fichiers S* du répertoire rc2.d
S05MOUNTFSYS
S10PRESERVE
S15RMTPFILES
S17log
S22audit
S30autoconfig
S35sysetup
S40addswap
S51tcp
S75CRON
S80LP
■
Montage des systèmes de fichiers.
Récupération des dernières sessions d'édition.
Nettoyage des répertoires des fichiers temporaires.
Démarrage des serveurs d'audit.
Démarrage du serveur d'audit.
support de nouveaux périphériques.
Spécifications de configuration du système.
Addition de zones de swap.
Démarrage des services de l'Internet
Démarrage du serveur cron.
Démarrage du spoule d'impression.
Ordre d'exécution, démarrage manuel, arrêt du système
La numérotation des fichiers détermine l'ordre de démarrage des services.
Les scripts dont le nom commence par un K sont exécutés à l'arrêt du système.
Tous les scripts sont démarrés ou arrêtés selon la syntaxe :
./script [start | stop]
■
Diagramme récapitulatif des changements de mode d'exécution
A rrê t d u sy stè m e
M o n it e u r
i n it s , S , 1
i n it 5
in it 0
M o d e m o n o - u t ilis a te u r
in it 2
i n it 3
/e tc /r c 2 .d /K *
/e tc /r c 2 .d /S *
in it 1
n iv e a u 2
in it 4
/e tc /rc 3 .d /K *
/ e t c / r c 3 .d / S *
in it 1
n iv e a u 3
M o d e s m u lti- u tilis a te u r s
/e tc /rc 4 .d /K *
/e tc /r c 4 .d /S *
i n it 1
n iv e a u 4
310
CHAPITRE X
──────────────────────────────────────────────────────────────
3.5 Démarrage des services
Services activés lors du passage en mode multi-travaux :
• initialisation des ports de communication,
• réinitialisation des fichiers temporaires d'administration et mise à jour éventuelle
de la date,
• tests de cohérence des systèmes de fichiers,
• lancement des gestionnaires de la mémoire et montage des systèmes de fichiers,
• nettoyage des spoules (imprimantes, communications...) et des fichiers temporaires
(dossiers /tmp et /usr/tmp),
• démarrage des utilitaires de comptabilité (acct, startup),
• serveurs d'ordonnancement (cron) puis d'impression, utilitaires divers (statistiques,
performances...), services réseau.
L'ordre des opérations est important. Ainsi, le système de fichier contenant le
répertoire /var doit être monté avant celui contenant le répertoire /var/spool) .
Exemple
0 sched
1 init
2 vhand
3 bdflush
96 logger /dev/error /usr/adm/mes
138 cron
143 /usr/lib/lpsched
202 cpd
204 slink
209 strerr
215 syslogd
217 inetd
219 routed -k /Unix
308 portmap
313 rusersd
315 NFSclnt 8
317 biod 4
318 biod 4
319 biod 4
320 biod 4
322 statd
324 lckclnt 4
326 lockd
350 /bin/login o
351 getty tty02 sc_m
353 getty tty03 sc_m
354 getty tty04 sc_m
L'ADMINISTRATION ET SES OUTILS
311
──────────────────────────────────────────────────────────────
3.6 Planificateur de travaux sous Unix/Linux
Le service de planification (service cron) exécute une action déterminée. Il fournit
trois services : exécution répétée à heure fixe (commande crontab), exécution unique à
heure fixe (commande at), exécution différée (commande batch).
■
Administration du planificateur de travaux
Le répertoire /usr/lib/cron contient ses fichiers d'administration (liste de contrôle
d'accès, historique).
Le journal des travaux planifiés est le fichier /usr/lib/cron/log.
Les files d'attente sont dans le dossier /usr/lib/cron/queuedefs.
Le répertoire /var/spool/cron contient les listes d'actions clientes à exécuter.
Co mmand es du service CRON : /etc
at
b a tc h
c r o nt a b
qu eued efs
log
cro n.a llow
cro n.d eny
at.allow
a t .d e n y
Ad ministration : /usr/lib/c ron
■
D ém o n
c ro n
c ro ntabs
a tjob s
action à exé cuter : /var/spoo l/c ron
Listes de contrôle d'accès
Le fichier cron.allow contient la liste des utilisateurs autorisés à utiliser la commande
crontab les autres n'ayant pas ce droit (liste blanche).
Le fichier cron.deny contient la liste des utilisateurs n'ayant pas accès à la commande
crontab les autres ayant ce droit (liste noire).
Un seul de ces deux derniers fichiers est utile à un instant donné.
• Si le fichier cron.allow existe, le serveur cron n'accepte des travaux que des
utilisateurs présents dans ce fichier les autres recevant le message Sorry ...
• Si cron.allow n'existe pas et cron.deny existe, le serveur cron n'accepte des travaux
que des utilisateurs absents du fichier les autres recevant le message Sorry ...
• Si aucun de ces fichiers n'existe, seul l'administrateur peut utiliser le service cron.
Les fichiers at.allow et at.deny ont le même format et jouent le même rôle pour la
commande at que les fichiers cron.allow et cron.deny pour la commande crontab.
■
Le répertoire /var/lib/cron
Ce répertoire contient les fichiers suivants :
312
CHAPITRE X
──────────────────────────────────────────────────────────────
• Le tube nommé utilisé pour la communication entre l'utilisateur et le serveur cron.
• Le journal des actions effectuées par le serveur cron (fichier cronlog) .
• Le fichier queuedefs définit les caractéristiques des files de travaux gérées par le
serveur cron dont chaque ligne sous le format :
q.NNj NNn NNw
avec :
◊ q une lettre de l'alphabet précisant la file,
◊ NNj le nombre maximum de travaux en attente dans la file (par défaut 100),
◊ NNn la valeur de la constante nice pour chaque travail de la file,
◊ NNw le temps d'attente (s) avant un nouvel essai (par défaut 60s).
• Les champs vides sont initialisés aux valeurs par défaut.
■
Le répertoire /var/spool/cron/crontabs
Les files d'attente générées par la commande crontab y sont enregistrées, chacune
accessible par son propriétaire respectif.
■
Le répertoire /var/spool/cron/atjobs
Y sont enregistrés les travaux lancés à partir des commandes at ou batch. Le nom de
chaque fichier est le numéro du travail suivi de .x où x représente la file.
■
La commande crontab
La structure d'un fichier de données de la commande crontab est la suivante : les cinq
premiers champs sont des entiers précisant dans l'ordre :
• la minute (0...59),
• l'heure (0...23),
• le jour (1...31),
• le mois (1...12),
• le jour de la semaine (0...6) avec 0 pour dimanche.
Chaque champ peut être le caractère joker (*) représentant toute valeur ou une liste
d'éléments séparés par une virgule (un élément est soit un nombre, soit de la forme x-y
pour représenter tous les nombres de x à y inclus). Si le jour est donné dans les deux
champs (jour du mois et jour de la semaine), les deux sont pris en compte.
Le sixième champ contient la commande à exécuter, avec son chemin absolu.
La notification du résultat ou des erreurs peut s'effectuer par courriel.
Exemple
Mn H
J
M S
0
2
*
*
*
#date toutes les minutes
*
*
*
*
*
/usr/lib/acct/dodisk
date
L'ADMINISTRATION ET SES OUTILS
313
──────────────────────────────────────────────────────────────
#date toutes les heures+ 5mn
5
*
*
*
*
date
#date tous les lundis à 6 H 6 du matin
6
6
*
*
1
date
#date le premier jour du mois à 9 H 15
15 9
1
*
*
date
#date le 1er janvier de chaque année à 18 H 30
30 18 1
1
*
date
0
6
1
*
*
find / -name core -exec rm {} \;
■
Lancement à heure fixe ou lancement différé
La commande at exécute une fois une commande à une date et une heure fixée.
La commande batch effectue une exécution différée.
at . al l o w
at . de ny
c r on
1
at
ba tch
4
3
2
Co mm and es
utilisate ur d e
cré ation ou
mo difica tio n
de s fic hie rs
asso ciés
/usr/sp ool/c ro n/a tjobs
xx xxx. a
ttttttttt.b
etc .. .
Synopsis
at heure [date] [+ incrément]
at -r [job_id]
at -l [job_id]
at -qheure [date] [+ incrément]
Description
heure est indiquée sous la forme d'un ou de deux chiffres représentant les heures, ou
de quatre chiffres représentant les heures et les minutes ou encore sous la forme x:y
représentant x heures et y minutes. Un suffixe am ou pm peut être ajouté. Les mots
clés noon, midnight, now et next sont autorisés.
date peut être le mois (éventuellement abrégé sur 3 caractères) suivi du jour et
éventuellement de l'année séparée par une virgule, ou le jour de la semaine (qui peut
être abrégé). Les arguments today ou tomorrow sont autorisés. Si la date n'est pas
précisée, le serveur utilise le jour courant ou le lendemain selon l'heure de lancement.
314
CHAPITRE X
──────────────────────────────────────────────────────────────
incrément est facultatif. Composé d'un nombre suivi d'un suffixe parmi minute, hour,
today, week, month, year qui est ajouté à l'heure et/ou à la date indiquée.
at -l
at -r id
at -q
liste les travaux en instance (propriétaire, numéro, date d'échéance).
détruit le travail ayant pour numéro id.
détermine la file d'exécution d'un travail (a (at), b (batch), c (crontab)).
Exemple
at 16:10
pwd
CTRL D
3.7 L'interface Webmin
■
Présentation et fonctionnalités
Webmin est un logiciel libre créé par Jamie Cameron (licence BSD), implémenté sous
la forme d'une interface graphique, permettant d'administrer à distance tout poste
Unix/Linux via un navigateur.
Développé en Perl et Java, Webmin permet :
• de contrôler tout type de serveurs (Apache, Postfix, Sendmail, MySQL, Samba,
etc.),
• de gérer les utilisateurs (comptes, quotas, répertoires de travail, groupes, droits,
annuaire, etc.),
• la gestion des journaux (fichiers logs),
• la gestion des grappes (clusters), des systèmes de fichiers, l'arrêt, le démarrage des
services système et réseau, la configuration de Webmin, etc.
L'ADMINISTRATION ET SES OUTILS
315
──────────────────────────────────────────────────────────────
■
Utilisation
Webmin est implémenté sous la forme d'un service, accessible via un nom de domaine
(DNS), une adresse IP (privée ou publique), son numéro de port (par défaut 10000).
Exemples
http://www.mondomaine.com:10000
http://xxx.xxx.xxx.xxx:10000.
Le port de l'application peut être redéfini et il est recommandé d'activer SSL.
■
Installation
Il est recommandé de l'installer avec un paquetage spécifique à sa distribution.
316
CHAPITRE X
──────────────────────────────────────────────────────────────
4.
GESTION DES SERVICES SOUS WINDOWS
4.1 Démarrage
Les phases du démarrage (à froid ou à chaud) sont : chargement du noyau, démarrage
des services, initialisation des périphériques.
■
Pré amorçage
• Tests matériels à la mise sous tension.
• Choix du périphérique de démarrage (disque, clé, lecteur de CDROM, etc.) pour le
chargement de l'enregistrement d'amorçage maître (Master Boot Record - MBR).
• Chargement du noyau (processus ntldr)
■
Amorçage
Le processus ntoskrnl initialise la phase de chargement. Le menu (boot.ini) permet de
démarrer en mode normal ou en mode VGA (dernière configuration connue).
L'utilisateur peut choisir un profil matériel donné.
Le module bootsect.dos est utilisé pour charger un OS différent de Windows.
Le noyau exécute les opérations suivantes :
• reconnaissance (ntdetect) de la configuration matérielle puis chargement des
pilotes, initialisation des périphériques et des services associés,
• invitation à la connexion pour saisie du nom de l’utilisateur et de son mot de passe
(winlogon),
• derniers chargement (pilotes, profil de l’utilisateur) et démarrages (services).
■
Options du fichier boot.ini
/basevideo
/sos
/noserialmice=comn
/crashdebug
/nodebug
maxmem:n
scsiordinal:n
mode d'affichage VGA 640*480
affichage des pilotes chargés lors de l'amorçage du système
désactivation de la vérification de la présence d'une souris
sur le port série concerné
recouvrement automatique réactivé
invalidation du processus de "debug"
définition de l'espace mémoire maximum alloué à NT
définition du périphérique de démarrage sur le bus SCSI.
Exemple
[boot loader]
timeout=10
default=multi(0)disk(0)rdisk(0)partition(1)\WINNT
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINXP="Windows XP Pro"
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows XP [Mode VGA]" /basevideo /sos
L'ADMINISTRATION ET SES OUTILS
317
──────────────────────────────────────────────────────────────
4.2 Services système et réseau
Les services système et réseau sont accessibles par les interfaces suivantes :
■
Interface homme machine
L'interface graphique GUI (Graphical User Interface) permet de gérer l'affichage
(carte vidéo, moniteur), le multi-fenêtrage, la console (fenêtre de commandes).
■
Initialisation des services
Certains services, initialisés au démarrage sont accessibles par l'utilitaire msconfig, qui
permet à la fois d'en définir la liste et de modifier certains fichiers (*.ini).
■
Panneau de configuration
Les services d'administration sont accessibles à partir du Panneau de configuration,
complété par les Outils d'administration.
Ainsi, le Gestionnaire de périphériques assure la gestion des pilotes installés.
■
Profil de démarrage matériel
Un profil matériel (ou profil) définit un ensemble de paramètres (périphériques et
services réseau) d'une configuration donnée et il en existe au moins un associé à la
configuration originale du poste de travail.
Un profil est associé à une configuration donnée ce qui permet d'invalider certains
services ou périphériques.
L'utilisateur peut choisir au démarrage du poste le profil à utiliser.
4.3 Fonctionnement des services et des pilotes
Un service est constitué de sous-services appelés simplement services.
■
Etat d'un service et mode de démarrage
L'état d'un service est démarré, suspendu, ou arrêté.
318
CHAPITRE X
──────────────────────────────────────────────────────────────
Son mode de démarrage peut être :
• automatique : démarrage du service lors du chargement du système Windows.
• manuel : un utilisateur ou une application démarre manuellement le service.
• désactivé : le service ne peut être démarré.
Le mode de démarrage des pilotes est défini par leur ordre de chargement, du plus
prioritaire au moins prioritaire :
• amorcé (chargé dans la phase d'amorçage),
• système (chargé dans la phase de démarrage),
• automatique (chargé avant l'interface graphique),
• manuel (non démarré, lancement possible depuis une application),
• désactivé (impossibilité pour un utilisateur de démarrer le périphérique).
4.4 Quelques services de base
Les services de base sont complétés par les services liés à certaines applications.
L'ADMINISTRATION ET SES OUTILS
319
──────────────────────────────────────────────────────────────
■
Avertissement
Notification aux utilisateurs et ordinateurs sélectionnés des alertes administratives de
l'ordinateur. Ce service utilisé par le service Serveur utilise le service Messagerie.
■
Explorateur d'ordinateurs
Liste des ordinateurs des domaines et groupes de travail, accessibles depuis la station
courante, nécessaire au service Voisinage réseau.
■
Voisinage réseau
Accès aux ordinateurs et imprimantes d'un domaine ou d'un groupe de travail ainsi
qu'à des réseaux externes.
■
Enregistrement d'événements
Enregistrement d'événements dans des journaux (système, sécurité, applications, etc.).
■
Messagerie
Emission et réception des messages envoyés aux administrateurs des différents postes
de travail par le service Avertissement.
■
DDE réseau
Assure un transport réseau ainsi que la sécurité des conversations DDE (Dynamic
Data Exchange) ce qui permet à des applications telles Word ou Excel de partager des
informations DDE localement ou au travers du réseau.
■
DSDM DDE réseau
DDE Share Database Manager : gestion des conversations DDE, utilisé par le service
DDE réseau.
■
Serveur
Prise en charge des services RPC, partage de fichiers, imprimantes et tubes nommés.
■
Détecteur d'appel RPC
Une application cliente RPC appelle le détecteur d'appel RPC pour tester la
disponibilité d'un serveur RPC. La maintenance du répertoire des applications
distribuées pour les programmes fonctionnant en architecture client serveur permet de
déterminer les différents serveurs d'applications distribuées quand ils existent. Le
détecteur d'appels RPC notifie la présence de la requête cliente au serveur RPC.
■
Service d'appel RPC
Ce service assure la communication avec le service Détecteur d'appel RPC.
■
Planning
Planificateur de travaux.
320
CHAPITRE X
──────────────────────────────────────────────────────────────
■
Spoule
Gestion des services d'impression locaux ou en réseau.
■
Station de travail
Gestion des connexions et des communications entre différents postes serveur et
client. Ce service permet d'accéder aux ressources de l'ordinateur local.
■
Services TCP/IP simples
Prise en charge des services et protocoles Windows Sockets, RPC, et NetBIOS.
Ils intègrent quelques applicatifs et utilitaires de diagnostic standards du monde
TCP/IP (FTP, telnet, arp, finger, FTP, hostname, ipconfig, lpq, lpr, nbtstat, netstat) et
le support des protocoles ftpd (serveur de téléchargement), agent SNMP (Simple
Network Management Protocol), lpd et CUPS (serveurs d'impressions Unix/Linux).
■
Service d'accès distant
Un modem permet de se connecter sur des serveurs distants et de permettre la
connexion de postes clients en utilisant le service d'accès distant (Remote Access
Service - RAS).
Le service d'annuaire gère les numéros de téléphone d'accès à un réseau distant.
L'administration de l''accès distant permet de créer des serveurs d'accès distant.
■
Gestion des connexions
Une connexion nécessite les informations suivantes :
• Identification NETBIOS (forme symbolique) du poste de travail et de son domaine.
• définition des protocoles et des services utilisés,
• définition des liaisons entre les différents services, protocoles et contrôleurs.
Les principaux services réseau sont les suivants : support de modems, service d'accès
distant, gestion du service de téléphonie, Internet Information Server : services web
Microsoft, partage de ressources, gestion et support des clients Microsoft, utilitaires
TCP/IP (FTP, telnet, etc.), impression distribuée (serveurs Microsoft, lpd, et CUPS).
4.5 Protocoles supportées par Windows
D'autres protocoles permettent la connectivité de Windows avec les autres standards
du marché à savoir TCP/IP, nwlink (protocoles IPX/SPX de Netware), SNA (IBM),
Appletalk (Apple), PPP (Point to Point Protocol), SLIP (Serial Line Internet Protocol)
pour les accès externes via un modem, PPTP (Point to Point Tuneling Protocol,
protocole de liaison point à point sur support série, permettant d'établir un tunnel de
communication à travers Internet).
L'utilisation simultanée des protocoles NETBEUI et TCP/IP sous Windows est
améliorée par l'utilisation des protocoles WINS (Windows Internet Naming Service),
DHCP (Dynamic Host Configuration Protocol), DNS (service de nom de domaine).
L'ADMINISTRATION ET SES OUTILS
321
──────────────────────────────────────────────────────────────
5.
QUELQUES PRINCIPES DE MAINTENANCE
■
Logiciels
Des logiciels de maintenance, souvent plus puissants que les utilitaires de base du
système Windows sont disponibles en freeware (gratuitement) tels AIDA32 ou
PC Wizard, en shareware (licence partagées), ou propriétaires. Leurs fonctionnalités
essentielles sont les suivantes :
Informations
Contenu de la ROM BIOS, caractéristiques physiques de la carte mère, des disques et
de la mémoire, du processeur, des périphériques, des pilotes, etc.
Récupération des fichiers détruits
Il est possible de récupérer des fichiers détruits si la tentative de récupération est
immédiatement postérieure à leur destruction (Norton Utilities).
Performance et optimisation
Des tests permettent d'améliorer les performances du poste (processeur, mémoire,
fichier d'échanges, accès disques, etc.).
■
Installation de logiciel
Il ne faut installer que des logiciels acquis de façon licites.
Il est recommandé de procéder à l'installation à partir des supports d'origine et de
suivre le mode d'emploi de l'installation, gérée par l'installateur Windows (Microsoft
System Installer – MSI).
Une bonne organisation des données et des applications est recommandée pour que le
système ne devienne pas un fourre-tout.
■
Précautions d'utilisation
Les ordinateurs personnels assurent un service fiable si les règles suivantes sont
respectées :
• Extinction du moniteur en cas de non utilisation prolongée ou utilisation d'un
économiseur.
• Utilisation d'un onduleur.
• Non extinction trop fréquente la station s'usant à chaque mise sous tension.
■
Documentation et maintenance
Les guides d'installation en français (carte mère, moniteur, cartes d'extension,
périphériques, logiciels) sont indispensables.
Seul un matériel complètement testé peut être réceptionné une mise en route
nécessitant presque toujours des ajustements. Il est vital de maintenir le système avec
l'aide d'un informaticien de l'entreprise ou avec un contrat de maintenance (10 à 15 %
environ du prix d'achat annuel).
322
CHAPITRE X
──────────────────────────────────────────────────────────────
6.
L'ADMINISTRATEUR, RESPONSABLE MICRO
L'introduction des ordinateurs personnels a provoqué un choc culturel et
organisationnel car il a fallu former les utilisateurs.
Les incidences sur l'architecture du système d'informations sont essentiellement le
basculement de systèmes centraux vers des systèmes répartis.
Le responsable micro-informatique assure l'interface entre la direction générale et les
utilisateurs. Ses différentes fonctions sont les suivantes :
■
Interface avec la Direction Générale et l'informatique centralisée
Interlocuteur de la direction générale en ce qui concerne le budget, les objectifs et la
stratégie, il est le garant de la maintenance du système d'informations et de sa sécurité.
L'ordinateur personnel est complémentaire des systèmes centraux. Le responsable
micro-informatique est donc un interlocuteur de la direction informatique. Il participe
ou élabore le plan directeur, son rôle devenant proportionnel à l'importance des
ordinateurs personnels et des réseaux dans l'entreprise.
■
Veille technologique
Compte tenu de l'évolution permanente des produits dont la durée de vente est
aujourd'hui de trois mois, le responsable micro doit connaître l'évolution des
architectures, des logiciels et des prix. Il doit faire la différence entre un serveur de
base de données et une station de traitement de texte.
■
Assistance aux utilisateurs
Ecoute des besoins pour les comprendre, les orienter, et pour faire évoluer le parc.
Suivi de l'évolution technique des utilisateurs, assistance technique, conseils de
formations et disponibilité, diffusion de l'information.
■
Définition, installation et maintenance du système
Choix du système d'exploitation pour la définition d'un standard dans l'entreprise des
les logiciels installés pour garantir la portabilité des applications et de leurs données.
Définition et maintenance du poste de travail et adéquation aux besoins.
■
Comptabilité
Définition et suivi du budget (micro) informatique, suivi comptable et amortissement
des stations, suivi de la maintenance matérielle, inventaire des matériels et logiciels.
Carnet de bord (gestion des incidents majeurs, surveillance de l'état des stations,
télémaintenance, bonne connaissance et recherche de la cohérence du système
d'informations.
L'ADMINISTRATION ET SES OUTILS
323
──────────────────────────────────────────────────────────────
■
Aspects juridiques
Le responsable pouvant négocier des contrats doit avoir quelques connaissances
juridiques.
Négociation de contrats
Le responsable micro-informatique doit savoir établir clairement un contrat de telle
sorte que les besoins exprimés ne soient pas ambigus.
Il peut être amené à passer des consultations ou des appels d'offre et doit alors
s'assurer que les besoins sont correctement exprimés.
Si les besoins de l'entreprise sont importants, il doit savoir négocier des contrats
cadres avec les fournisseurs, définir des licences sites, etc.
Surveillance de l'état juridique du système
Les contrats de maintenance ou de leasing doivent être surveillés et quelquefois
renégociés.
Maintenance
Matérielle et logicielle du système en connaissant les droits et devoirs respectifs du
fournisseur et de l'acheteur,
Relations avec les fournisseurs.
Recette
Un système nouvellement installé doit être réceptionné avant paiement..
Propriété Intellectuelle
La loi définit le propriétaire des données et des applications.
7.
CONCEPTION D'UN SYSTEME D'INFORMATIONS
Nous allons tracer rapidement les étapes de conception d'un système d'informations.
■
Etape A : étude d'opportunité
Il faut définir le plus précisément possible la tâche à informatiser, en fixer les limites
et réfléchir à son utilité.
■
Etape B : analyse fonctionnelle
A partir de la description de la fonction à informatiser, on entre dans le détail de
l'application à réaliser. On en fait un premier mode d'emploi en précisant les tâches à
effectuer, le type des entrées et le mode de saisie des données, les sorties, les fichiers
et leur contenu.
Il faut poser les problèmes de sécurité et d'organisation du travail autour du système
matériel. Un dossier, compréhensible par l'utilisateur final même non informaticien,
doit permettre une évaluation précise du temps nécessaire à sa mise en place.
324
CHAPITRE X
──────────────────────────────────────────────────────────────
■
Etape C : Analyse organique
Rédigée par et pour un informaticien, elle précise le schéma de réalisation de
l'application.
■
Etape D : Programmation
Trois possibilités :
Faire programmer par des spécialistes
Il faut impérativement suivre l'étape A et superviser les tests et la mise en exploitation
(D et E). On donne quitus aux analystes et programmeurs lorsque le résultat des tests
est satisfaisant et que les dossiers d'exploitation sont effectivement rédigés.
Programmer soi-même
Une bonne discipline est de s'astreindre à suivre le même déroulement, surtout si l'on
ne peut se consacrer à plein temps à cette activité. L'écriture d'une application
professionnelle est une opération délicate et un résultat, satisfaisant pour son auteur,
est rarement utilisable par d'autres. Il y a une grande différence entre connaître un
langage de programmation et savoir programmer. Un programmeur professionnel
utilise des méthodes qu'on ne peut inventer seul et dont l'apprentissage est très long.
Acheter un progiciel
Le choix d'un programme tout fait pour résoudre un problème donné est une tâche
difficile. Il oblige à faire soi-même les étapes A et B et ne dispense pas de l'étape E.
On doit prévoir des tests les plus complets possibles.
■
Etape E : Mise en exploitation
Une période de mise en route et de formation du personnel est indispensable à la
bonne utilisation du système. Un dossier d'exploitation, mode d'emploi du
programme, doit être remis.
8.
CONCLUSION
Au cours de cet exposé, le lecteur a pu constater que le choix d'un système personnel
n'est pas simple. Nous espérons toutefois que les quelques notions présentées
l'aideront dans ses choix futurs et qu'elles lui permettront de mieux comprendre les
divers problèmes qui se posent à l'achat où à l'utilisation.
Il faut toujours se rappeler que l'informatique est en évolution permanente, comme les
notions présentées ce qui explique que la durée d'amortissement des systèmes
personnels dépasse rarement trois ans. Toutefois, les concepts essentiels sur les
architectures, les généralités sur les systèmes d'exploitation et les logiciels seront
encore valables.
L'ADMINISTRATION ET SES OUTILS
325
──────────────────────────────────────────────────────────────
9.
EXERCICES
■
Gestion des utilisateurs
Créer des utilisateurs. On s'attachera à définir leur répertoire de travail, leur groupe(s)
de travail, leurs privilèges d'administration et de programmation.
Essayer de créer un utilisateur synonyme de l'administrateur.
Sous Unix/Linux, verrouiller la commande su.
L'utiliser et constater son audit par le système.
■
Cheval de Troie
Programmer un cheval de Troie avec un (faux) script (par exemple su ou mount).
#!/bin/bash
echo –n "Password: "
stty -echo
read X
echo $X > /tmp/copie
sleep 2
stty echo
echo "su: incorrect password"
rm /tmp/su
■
Démarrage et arrêt
1°) Quel est le répertoire essentiel utilisé au démarrage du système ?
2°) Analyser le fichier /etc/inittab.
3°) Si possible, sur un terminal en mode texte, tuer le processus de login. Constater
qu'il se relance "spontanément".
4°) Visualiser les répertoires et fichiers de démarrage (rc.*).
5°) Un arrêt et un redémarrage (boot) d'une ou de deux stations seront réalisés en fin
de session. Analyser le démarrage à froid puis le démarrage à chaud avec les
commande shutdown, init, halt, haltsys.
6°) Modifier le fichier .profile pour y ajouter une fonction logout exécutée
automatiquement lors de la déconnexion et effaçant l'écran.
Indication : définir la fonction logout puis utiliser la commande Unix trap.
■
Divers
Créer un script qui affiche la liste des utilisateurs connectés, la date, les processus du
système et les informations sur la mémoire.
L'exécuter en indiquant le temps d'exécution (commande time) puis en ajoutant en
plus le nom de chaque commande avant son exécution.
ANNEXES
1.
L'ENVIRONNEMENT UTILISATEUR SOUS UNIX/LINUX
Des fichiers permettent de configurer l'environnement de travail constituant le profil
de chaque utilisateur.
Leur mise au point par l'utilisateur ou l'administrateur dont c'est une responsabilité
majeure est indispensable.
L'utilisateur, s'il en a le désir et les compétences, peut ensuite les modifier.
1.1 Fichiers de configuration d'applicatifs usuels
Il est possible de configurer les applicatifs suivants :
• les interprètes de commandes,
• les variables d'environnement relatives à un environnement donné, par exemple
celui d'Oracle,
• les éditeurs de textes (vi ou emacs),
• les interfaces graphiques multifenêtres (Xwindow, Motif (l'ex standard), Open Look
(ex standard SUN), CDE (le standard actuel), KDE (environnement Linux),
• la messagerie électronique,
• les utilitaires de transfert de fichiers (ftp, rcp, etc.),
• etc.
Tous ces fichiers ont un identificateur commençant par le caractère .
■
Interprètes de commandes
Le fichier .profile initialise les interprètes Bourne shell et Korn shell.
Le fichier .bash_profile initialise l'interprète bash.
Les fichiers .login et .cshrc initialisent l'interprète C shell.
Le fichier .kshrc contient les alias utilisés par l'interprète Korn-shell.
Exercice
A partir de la commande ls -a, afficher les fichiers constituant votre profil
d'utilisateur.
328
ANNEXES
──────────────────────────────────────────────────────────────
■
Editeurs de textes
• Le fichier .exrc initialise l'éditeur vi.
• Le fichier .emacsrc initialise l'éditeur emacs.
■
Services TCP/IP et services de l'Internet
Les fichiers de configuration des services TCP/IP sont:
.mailrc
.netrc
.xinitrc, etc.
.mwmrc, etc.
messagerie électronique,
commande FTP,
XWindows,
gestionnaire de fenêtres.
1.2 Initialisation du terminal
■
La commande stty
La commande stty définit les paramètres de communication du terminal (caractères
spéciaux, bit de parité, gestion de l'écho, etc.). Son intérêt essentiel pour un utilisateur
est la redéfinition du caractère d'effacement.
Exemples
• Modification de la touche associée au caractère d'effacement
stty erase '^H'
• Affichage des paramètres de gestion du terminal
stty -a
speed 9600 baud ; ispeed 9600 baud ; ospeed 9600 baud ;
line = 0 ; intr = DEL ; quit = ^\ ; erase = ^H ; kill = ^U ; eof = ^D ; eol = ^@ ;
swtch = ^@ ;susp = ^Z ;start = ^Q ;stop = ^S ;
parenb -parodd cs8 -cstopb hupcl cread -clocal -loblk -ortsfl -ctsflow -rtsflow
ignbrk -brkint -ignpar -parmrk -inpck -isprip -inlcr -igncr icrnl -iuclc
ixon -ixany -ixoff
isig icanon -xcase echo echoe echok -echonl -noflsh -iexten -tostop -xclude
opost -olcuc onlcr -ocrnl -onocr -onlret -ofill -ofdel
isscancode
■
La commande tput
La commande tput initialise et gère les attributs du terminal par défaut (défini par la
variable TERM), en utilisant la base de données associée (terminfo sous System V,
termcap dans l'environnement BSD).
Synopsis
tput [-Ttype_du_terminal] action
ANNEXES
329
──────────────────────────────────────────────────────────────
Description
La commande tput exécute une des actions ci-après sur le terminal.
bell
blink
bold
civis
clear
cols
cup
cvvis
flash
init
sonnerie,
mode clignotant,
mode surbrillant,
curseur invisible,
effacement de l'écran,
affichage du nombre de colonnes utilisables,
ligne colonne déplace le curseur (ligne,colonne),
curseur visible,
vidéo inverse si possible ou sonnerie sinon,
réinitialisation du terminal selon l'émulation décrite par la variable
TERM,
affichage du nom en clair du terminal,
réinitialisation du terminal selon son type(option -T),
inversion vidéo,
arrêt du mode (voir l'action smso),
annulation de tous les attributs en cours,
retourne le code permettant la mise en évidence d'une partie du texte
(en général l'inversion vidéo.
longname
reset
rev
rmso
sgro
smso
1.3 Commandes diverses
■
Identification d'un terminal
La commande tty permet d'identifier le terminal virtuel utilisé.
■
Gestion de l'affichage
clear
■
effacement
Gestion de la date
date
affichage de la date et de l'heure courante
Cette commande permet également de modifier la date du poste de travail. Elle est
alors réservée à l'administrateur.
Synopsis
date mmddhhmm
avec yy l'année, mm le mois, dd le jour, hh les heures, mm les minutes.
330
ANNEXES
──────────────────────────────────────────────────────────────
■
Recopie simultanée sur fichier et moniteur
Synopsis
tee [-a] fichier
Description
Recopie simultanée du flot d'entrée sur le périphérique d'affichage et dans le fichier
(utile dans les tubes pour les résultats intermédiaires). L'option -a permet d'ajouter les
données dans le fichier sans l'écraser.
■
Statistiques temporelles
Synopsis
time commande_du_shell
Description
Exécution de la commande puis affichage (peu précis) de son temps d'exécution (en
secondes) en mode système et en mode utilisateur.
Exemple
time ps
pid
1736
1786
1806
real
user
sys
■
TTY
p7
p7
p7
0m0.34s
0m0.03s
0m0.05s
TIME
0:00
0:03
0:00
COMMAND
ksh
xman
ps
Attente d'un travail
Synopsis
wait
Description
Attente de la fin des processus lancés en tâche de fond.
ANNEXES
331
──────────────────────────────────────────────────────────────
2.
IMPRESSION
Les commandes associées au service d'impression sont différentes dans les
environnements System V et BSD.
2.1 Impression (System V)
■
Requête d'impression
Synopsis
lp [option(s)] fichier(s)
Description
Envoi d'une requête d'impression. Ses principales options sont:
c
dX
m
nx
s
tTitre
w
o0pt
■
recopie du fichier (par défaut, seul un lien est crée),
choix d'une destination X (imprimante ou classe),
requête de notification de fin d'impression par un courier électronique,
nombre de copies (par défaut une),
suppression des messages de la commande lp,
impression d'un titre (bannière),
émission d'un message électronique en fin d'impression,
options spécifiques de l'imprimante.
Etat des requêtes d'impression
Synopsis
lpstat [option(s)]
Description
Indication de l'état du service lp et des requêtes d'impression en attente. Les
principales options sont:
d
o
p
r
t
■
destination par défaut,
état des requêtes,
état des imprimantes,
état du serveur,
les informations précédentes.
Suppression d'un requête d'impression
Synopsis
cancel id(s)
Description
Suppression de la requête d'impression id (réponse par le numéro de la requête
supprimée).
332
ANNEXES
──────────────────────────────────────────────────────────────
2.2 Impression (BSD)
■
Requête d'impression.
Synopsis
lpr [option(s)] fichier(s)
Options
Pet_logique
n
t
■
choix d'une imprimante par son étiquette logique,
n copies du document,
fichier à imprimer au format nroff/troff.
Affichage du contenu de la file d'attente du spoule d'impression.
Synopsis
lpq [-Petiquette_logique]
■
Suppression d'une requête d'impression.
Synopsis
lprm [-Petiquette_logique] numéro_de_job
Exemples
lpq -Plp2
lp is reading and printing
Rank Owner Job Files Total Size
active donald 420 win 127586 bytes
active philipp 421 standart input 123456 bytes
lprm -Plp2 421
2.3 Mise en page d'un fichier pour impression
Synopsis
pr [option(s)] fichier(s)...
Description
Impression avec un en-tête (date, nom du fichier, numéro de la page). Les principales
options sont :
n
+n
h xxx
wn
ln
t
sc
a
format de sortie sur n colonnes,
impression commençant page n,
remplace le nom du fichier de l'en-tête par xxx,
n caractères par ligne, par défaut 72 ,
n lignes par page, par défaut 66,
suppression de l'impression de l'en-tête,
séparateur de colonnes c, caractère de tabulation par défaut,
impression simultanée des fichiers (un par colonne).
ANNEXES
333
──────────────────────────────────────────────────────────────
3.
GENERALITES SUR LES EDITEURS DE TEXTES
■
Les éditeurs lignes (antérieur à l'ère primaire)
Indépendant du terminal utilisé, l'éditeur ligne sous Unix est ed. Il n'est pas très
convivial (c'est un euphémisme) mais il est standard et peut être appelé dans un script.
■
L'éditeur sed
L'éditeur non interactif sed (stream editor) utilise la même syntaxe que celle de
l'éditeur ed sur des flots de données obtenus, soit à partir d'une autre commande (via
un tube), soit à partir d'un fichier ordinaire. Le principe est le suivant:
• lecture des données sur l'entrée standard,
• exécution des commandes désirées,
• écriture du résultat sur la sortie standard, ce qui permet l'insertion de l'appel à sed
dans une suite de commandes reliées par des tubes.
■
Les éditeurs pleines pages
Plus agréables à utiliser, ils nécessitent une interface selon le terminal utilisé
(définition de ses caractéristiques dans la base de données (termcap ou terminfo).
L'association entre le terminal et la base de données est réalisée par la variable TERM.
Exemple
TERM=xterm
export TERM
On les classe en deux catégories :
• les éditeurs lancés en mode commande par défaut dont le plus connu est vi,
• les éditeurs lancés en mode insertion par défaut dont le plus connu est emacs.
■
Les éditeurs multifenêtres
Ces éditeurs fonctionnent dans des environnements multifenêtres. Le plus connu est
Open Office (SUN), du domaine public, à consommer sans modération.
4.
L'EDITEUR VI
Il est important de le connaître car c'est l'éditeur standard pleine page interactif
d'Unix/Linux. Il a été développé à l'université de Berkeley par Bill Joy.
Il utilise les attributs vidéo des terminaux qu'il reconnaît par la variable du shell
TERM et le système d'adressage (caractères et lignes) et de substitution de l'éditeur ed.
Son jeu de commandes est puissant. Il peut opérer sur les caractères, les mots, les
lignes, l'intégralité du fichier (opérations d'ajout, de suppression, de remplacement,
etc.).
334
ANNEXES
──────────────────────────────────────────────────────────────
Comme l'éditeur ed, il travaille dans un tampon en mémoire qui est l'image du fichier
lu sur le disque. Les fichiers manipulés par vi sont compatibles avec ceux utilisés par
les autres éditeurs de texte. Malheureusement, compte tenu de son âge vénérable (cet
éditeur a plus de 25 ans), l'utilisateur habitué aux traitements de texte actuels ne
l'appréciera vraisemblablement pas. Tyrannosaurus Rex fut son surnom….
4.1 Graphe d'état et modes de fonctionnement de vi
L'éditeur vi fonctionne selon un des trois modes :
• mode commande (utilisation des commandes internes de vi),
• mode insertion de texte "effectuée au km",
• mode ligne (utilisation de directive dont la portée est une ligne de texte).
Le graphe des états de vi est le suivant
Mode commande
:w
:w!
:!
:!!
Shell
Appel de vi
sauvegarde du tampon
sauvegarde forcée
exécution d'une commande du shell
insertion du résultat d'une commande
:q! sortie forcée sans modif
:q sortie (tampon non modifié)
:wq sauvegarde et sortie
Esc
:x idem
Mode ligne
[n1,n2]s/c1/c2/[g]
[n]x
[n]dd
[n]c
^B,^C
Esc
i,a,o,O
Esc
i,a,o,O
Mode
insertion
Tampon de travail
4.2 Appel de vi
vi [identificateur_fichier]
Un fichier existant est chargé en mémoire et son nombre de caractères affiché.
Un fichier inexistant n'est effectivement créé que lors de la sauvegarde du contenu du
tampon.
Exemples et variantes
vi +n fichier
vi + fichier
vi +/chaîne fichier
vi -r fichier
édition à partir de la ligne n du fichier,
édition à partir de la fin du fichier,
édition à partir de la ligne du fichier contenant la chaîne spécifiée,
tentative de récupération après un "plantage".
ANNEXES
335
──────────────────────────────────────────────────────────────
4.3 Commandes de vi
On distingue plusieurs types de commandes de l'éditeur:
• les commandes de sauvegarde et de sortie,
• les commandes d'insertion,
• les commandes de remplacement de caractères,
• les commandes de concaténation de ligne,
• les commandes de positionnement dans la ligne ou le fichier,
• les commandes de manipulation de chaînes de caractères,
• les commandes de suppression (caractères, mots, lignes),
• les commandes d'annulation des effets de la dernière commande,
• les commandes de recherche et de substitution de chaînes de caractères,
• l'utilisation de plusieurs tampons de travail,
• les options de fonctionnement de l'éditeur et l'accès à l'interprète de commandes.
■
Sauvegarde du tampon de travail et de sortie de l'éditeur
:w
:wq
:w fichier
:n,mw fichier
:q
:q!
:e! fichier
■
Les commandes de passage en mode insertion
i
I
a
A
o
O
:r fichier
<Ctrl> v
■
passage en mode insertion devant le curseur,
passage en mode insertion en début de ligne saisie,
passage en mode insertion après le curseur,
passage en mode insertion en fin de ligne,
passage en mode insertion à la ligne suivante,
passage en mode insertion à la ligne précédente avec ajout d'une ligne,
insertion du fichier à partir de la ligne suivante,
inhibition d'un caractère en mode insertion, très pratique pour insérer un caractère
Esc.
Les commandes de remplacement (caractère, mot)
[n]r,s
R
C ou cw
c$
c^
■
sauvegarde du ficher en cours d'édition,
sauvegarde du fichier et sortie de l'éditeur,
sauvegarde du fichier défini,
idem avec la sauvegarde des lignes n à m,
abandon de la session courante sans prise en compte des modifications du fichier,
abandon sans sauvegarde du tampon associé au fichier en cours modifié,
abandon de la session en cours sans sauvegarde et démarrage d'une nouvelle session.
remplacement du (de n) caractère(s) courant et passage en mode insertion,
remplacement du reste de la ligne et sortie du mode insertion par Esc,
remplacement du mot courant et sortie du mode insertion par Esc,
remplacement du caractère courant jusqu'à la fin de la ligne et sortie du mode
insertion par Esc,
remplacement du début de la ligne jusqu'au caractère courant.
La concaténation de lignes
J
concaténation de la ligne courante et de celle qui la suit.
336
ANNEXES
──────────────────────────────────────────────────────────────
■
Les commandes de positionnement dans le tampon
Esc h ou Esc =
Esc l ou Esc Esc j
Esc k ou Esc +
Ctrl f
Ctrl b
Ctrl d
Ctrl u
w
b
)
(
■
déplacement d'un caractère à gauche,
déplacement d'un caractère a droite,
déplacement à la ligne suivante,
déplacement à la ligne précédente,
déplacement à la page suivante,
déplacement à la page précédente,
déplacement à la ½ page suivante,
déplacement à la ½ page précédente,
déplacement d'un mot à droite,
déplacement d'un mot à gauche,
déplacement en fin de phrase,
déplacement en début de phrase.
Les commandes de manipulation de texte
:f ou:nu
:n
^
$
n+
nCtrl g
G
demande de la position courante,
positionnement au début de la ligne n,
positionnement au début de la ligne courante,
positionnement à la fin de la ligne courante,
avance de n lignes,
recul de n lignes,
taux d'occupation de la ligne dans le tampon,
positionnement à la fin du tampon.
La fin de phrase est détectée soit par une ligne vide, soit par les caractères ! ? suivi
d'au moins deux caractères d'espacement.
■
Les commandes de suppression
x
nx
dw
ndw
dd
ndd
dA
d$
■
Annulation de la dernière commande
u
■
annule l'action de la commande précédente.
Les commandes de recherche de chaînes de caractères
/xxx
?xxx
/^xxx
/[xy]xx
n
■
suppression du caractère courant,
suppression de n caractères à partir du caractère courant.
suppression du mot pointé par le curseur,
suppression de n mots pointé(s) à partir du curseur,
suppression de la ligne courante,
suppression de n lignes à partir de la ligne courante,
suppression depuis le début de la ligne jusqu'au curseur,
suppression depuis le curseur jusqu'à la fin de la ligne,
recherche de la chaîne xxx suivante,
recherche de la chaîne xxx précédente,
recherche de la prochaine ligne commençant par la chaîne xxx,
recherche de la chaîne xxx ou yxx suivante (les crochets sont véritables),
relance la dernière recherche.
Exécution de commandes de l'interprète depuis l'éditeur
:! commande
La terminaison de la commande provoque le retour à l'éditeur.
ANNEXES
337
──────────────────────────────────────────────────────────────
■
Appel de l'interprète de commandes depuis vi
:!sh
L'édition est suspendue par un appel à l'interprète de commandes. Le retour à l'éditeur
s'effectue par l'utilisation du caractère Ctrl D ou de la commande de sortie de
l'interprète exit.
■
Récupération du résultat d'exécution d'une commande dans un texte édité
!! commande
Le résultat de la commande est inséré à la ligne qui suit la position du curseur.
Exemple
!!date
■
Les commandes de substitution de chaînes de caractères
:s/xxx/yyy/
:s/xxx/yyy/g
:0,$s/xxx/yyy/g
:n1,n2s/xxx/yyy/g
:0,$s/xxx/yyy/cg
[xy]
[a-e]
■
substitue la chaîne yyy à la première occurrence de la chaîne xxx dans la ligne
courante,
substitue toutes les occurrences de la chaîne xxx par la chaîne yyy dans la ligne
courante,
substitue la chaîne yyy à la chaîne xxx dans tout le fichier sans demande de
confirmation,
substitue la chaîne yyy à la chaîne xxx entre les lignes n1 et n2 sans demande de
confirmation,
substitue la chaîne yyy à la chaîne xxx dans tout le fichier avec demande de
confirmation,
l'un des caractères x ou y
un caractère de l'ensemble [a,e].
Utilisation des tampons
Stockage dans un tampon
yy ou Y
"xyy ou "xY
nyy ou nY
n"xyy ou n"xY
y$
mémorisation de la ligne courante dans le tampon par défaut,
idem mais mémorisation dans le tampon x,
mémorisation de n lignes dans le tampon par défaut,
mémorisation de n lignes en utilisant le tampon x,
mémorisation de la portion de ligne située entre le curseur et la fin de la ligne.
Si la lettre référençant le tampon est majuscule, les mémorisations s'exécutent en mode ajout.
Récupération du contenu d'un tampon
p
P
"xp ou "xP
■
écriture du tampon par défaut derrière la position du curseur ou à la ligne suivante
en fonction du contenu du tampon,
idem mais écriture à la ligne précédente,
idem mais utilisation du tampon x.
Options de paramétrage
:set all
:set showmode
:set [no]autoindent
:set [no]number
:set [no]list
affichage des options définies.
affichage du mode courant d'exécution (insertion, ajout, etc.).
indentation automatique des paragraphes.
affichage des numéros de lignes de l'édition courante.
affichage des caractères non visualisés par défaut à savoir $ (fin de ligne), A
(tabulation).
338
ANNEXES
──────────────────────────────────────────────────────────────
Le fichier .exrc permet de définir des options de fonctionnement permanentes. Il est
constitué d'une suite de lignes de directives respectant la syntaxe précédente.
Exemple
:set showmode
:set nu[mber]
:set no[mesg
:set autoindent
Exercice
1°) Utiliser l'éditeur de textes vi pour créer un fichier appelé avis qui contient vos
impressions d'utilisation à son inventeur Bill Joy. La première version de la lettre
sera truffée de fautes d'orthographe car la saisie sera effectuée au kilomètre et
l'éditeur ne vous est pas familier. La dernière version devra être bien présentée,
respectueuse, sans faute d'orthographe car Bill Joy est un des dirigeants de SUN.
Vous avez même le droit de lui écrire en Anglais si vous vous en sentez capable.
Il faudra sauvegarder ce fichier et le rappeler pour ajouter le post-scriptum.
L'idéal serait que la lettre comporte environ 100 lignes. 10 lignes sont tout de
même acceptées car la torture est, en principe, bannie de ce monde, même avec
T-Rex...N'essayez pas d'y insérer des accents sauf dans une fenêtre xterm (et
encore).
2°) Modifier votre fichier .exrc de telle sorte que :
Le mode d'utilisation de l'éditeur vi apparaisse sur le moniteur,
Le numéro de la ligne apparaisse sur le moniteur,
L'indentation automatique soit prise en compte.
3°) Insérer une ligne contenant la chaîne de caractère /usr/lib/etc.
4°) A partir des commandes dd et p, la dupliquer.
5°) Concaténer ces deux lignes (commandes J).
6°) A partir de la commande Y, faire une duplication de 3 lignes à partir de la ligne
courante.
7°) Remplacer en une seule commande la chaîne de caractères /usr/lib/etc par la
chaîne de caractères /etc/bin/lib.
5.
L'EDITEUR LIGNE ED
5.1 Présentation
L'éditeur ligne standard d'Unix est ed. Antérieur à vi, il permet d'éditer des fichiers
textes de 28 Ko au plus et il ignore les caractères NULL ou postérieurs au dernier
Return.
Synopsis
ed [fichier]
ANNEXES
339
──────────────────────────────────────────────────────────────
■
Description
L'éditeur ed affiche le nombre d'octets du fichier lu ou ? si le fichier n'existe pas ou est
inaccessible, ou rien du tout si l'appel de ed est sans argument.
Il n'affiche pas de prompt pour indiquer qu'il est en attente de commande. Il répond
simplement par le caractère ? quand il ne peut pas exécuter une commande.
5.2 Principales commandes de l'éditeur ed
Une commande est constituée d'un caractère précédé éventuellement d'une
numérotation sous la forme n,p pour les lignes de n à p.suivie du caractère RC.
■
Insertion de texte
na
ni
ajout du texte saisi au clavier après la ligne n,
insertion du texte saisi au clavier avant la ligne n.
La sortie du mode insertion est effectuée en tapant un point (.) en début de ligne.
■
Affichage
n,pl
/ch/
?ch?
n
■
Gestion des lignes
n,pd
n,pc
n,piq
n,ptq
n,ps/chl/ch2/
■
écriture des lignes n à P sur le fichier courant,
lecture du fichier fichier1 après la ligne n,
affiche le nom du fichier courant.
Commandes diverses
q
!commande
g
■
destruction des lignes n à p,
destruction des lignes n à P et passage en mode insertion,
recopie des lignes n à P après la ligne q,
duplique les lignes n à P après la ligne q,
remplacement de la chaîne de caractères chl par ch2 de la ligne n à la ligne p. Seule la
première occurrence de chaque ligne est remplacée. Le caractère / n'est pas un
caractère spécial mais seulement un délimiteur n'apparaissant dans aucunes des
chaînes chl et ch2.
Gestion des fichiers
n,pw
nr f1
f
■
affichage des lignes n à p,
affichage de la première ligne contenant la chaîne ch,
idem en parcourant le fichier en arrière,
affichage de la ligne n,
sortie de l'éditeur (ed répond ? si les modifications n'ont pas été sauvegardées, un
deuxième appel à q force la sortie),
exécution d'une commande du shell depuis l'éditeur,
traitement global pour certaines commandes.
Caractères spéciaux
.
$
^
.=
RUBOUT
ligne courante ou un caractère quelconque,
fin d'une ligne ou dernière ligne du fichier,
début d'une ligne,
affichage du numéro de la ligne courante,
abandon d'une commande.
340
ANNEXES
──────────────────────────────────────────────────────────────
6.
PRINCIPALES COMMANDES D'UNIX
La liste ci-dessous présente sommairement les principales commandes Unix dans les
environnements System V ou BSD.
adb
apply
ar
as
at
awk
banner
basename
bc
cal
calendar
cat
cb
cc
cd
chgrp
chmod
chown
clear
cmp
compress
cp
cpio
cpp
crontab
crypt
csh
cu
cut
cxref
date
dbx
dc
dd
df
diff
du
echo
ed
egrep
emacs
env
eqn
Metteur au point.
Exécution d'une commande sur plusieurs arguments.
Archiveur (gestionnaire de bibliothèques).
Appel de l'assembleur.
Exécution différée d'une commande.
Manipulateur de fichiers.
Affichage d'une bannière.
Affichage du chemin d'accès relatif d'un fichier.
Calculateur.
Calendrier.
Agenda.
Affichage du contenu d'un fichier texte.
C beautifier : enjoliveur de programmes C.
Compilateur C.
Déplacement dans l'arborescence.
Modification du groupe d'un fichier.
Modification des droits d'accès d'un fichier.
Modification du propriétaire d'un fichier.
Effacement de l'écran.
Comparaison de fichiers.
Compression de fichiers.
Copie de fichiers.
Archivage.
Préprocesseur C.
Exécution d'activités périodiques.
Cryptage de fichiers.
Appel de l'interprète de commandes C Shell.
Utilitaire de communication.
Sélection de champs dans un fichier.
Cross-référenceur (enrichit la table des symboles via cpp).
Affichage et modification de la date.
Débogueur.
Calculateur de bureau.
Copie physique d'un média.
Etat des systèmes de fichiers montés.
Comparaison de fichiers.
Affichage (récursif) du nombre de blocs utilisés par un répertoire.
Affichage d'une chaîne de caractères.
Editeur ligne.
Recherche d'occurrences de texte dans un fichier.
Editeur pleine page.
Affichage des variables d'environnement.
Formateur de symboles mathématiques (pour fichier troff).
ANNEXES
341
──────────────────────────────────────────────────────────────
expr
exit
f77
fgrep
file
find
finger
from
grep
head
id
ipcrm
ipcs
join
ksh
kermit
kill
last
lastcomm
ld
leave
lex
line
lint
lock
login
logout
logname
look
lp/lpr
lpstat/lpq
lprm
ls
mail
make
makekey
man
mesg
mkdir
more
mv
newgrp
news
nice
Evaluation d'expressions arithmétiques.
Déconnexion.
Compilateur Fortran.
Recherche d'occurrences de texte dans un fichier.
Affichage du type des fichiers.
Recherche de fichiers dans l'arborescence selon des critères
définis.
Information sur les utilisateurs.
Indicateur de l'origine du courrier.
Recherche d'occurrences de texte dans un fichier.
Affichage des premières lignes (texte) d'un fichier.
Affichage de l'uid et du gid de l'utilisateur.
Suppression d'un IPC (Inter Process Communication).
Affichage de l'état des IPC (Inter Process Communication).
Opérateur relationnel de jointure.
Appel de l'interprète Korn shell.
Logiciel de communications en mode asynchrone.
Emission d'un signal à un processus.
Historique des dernières connexions.
Historique des dernières commandes.
Editeur de liens.
Invitation à se déconnecter (signal sonore et message envoyé à une
heure donnée).
Analyseur syntaxique.
Lecture d'une ligne.
Analyseur syntaxique C.
Verrouillage d'un terminal.
Connexion.
Déconnexion.
Affichage du nom de login.
Recherche dans un fichier ou un dictionnaire.
Impression (System V / BSD).
Etat du spoule impression (System V / BSD).
Destruction d'une entrée dans le spoule (BSD).
Informations sur les fichiers.
Agent utilisateur de la messagerie électronique.
Gestionnaire d'applications (génie logiciel et administration).
Création d'une clé cryptée.
Documentation en ligne.
Autorisation ou non de réception de messages envoyés par la
commande write. talk ou wall.
Création de répertoire.
Affichage par page.
Renomme ou déplace un fichier ou un répertoire.
Changement du groupe courant (à condition d'être déclaré dans
plusieurs groupes).
Affichage des nouvelles.
Modification de la priorité d'exécution d'un processus.
342
ANNEXES
──────────────────────────────────────────────────────────────
nm
nohup
nroff
od
pack
passwd
paste
pr
ps
pwd
ranlib
rev
rm
rmdir
sar
sccs
script
sdb
sed
size
sleep
sort
split
strip
stty
strings
su
sync
tail
talk
tar
tbl
tee
test
time
touch
tput
tr
troff
tsort
tty
umask
uname
uncompress
Affichage de la table des symboles de fichiers objets ou
exécutables.
Exécution d'une commande ignorant les signaux SIGHUP et
SIGQUIT.
Formateur de texte.
Affichage d'un dump.
Compression d'un fichier.
Modification du mot de passe.
Fusion de fichiers.
Affichage de fichiers formatés.
Affichage de l'activité des processus.
Affichage du répertoire courant.
Réorganisation d'une bibliothèque.
Inversion des lignes dans un fichier.
Suppression de fichiers.
Suppression de répertoire(s).
Statistiques d'activité système.
Gestion des versions des fichiers source.
Enregistrement du déroulement de la session dans un fichier.
Metteur au point.
Editeurs de flots non interactif.
Affichage des tailles des segments d'un fichier objet ou exécutable.
Suspension d'exécution.
Tri de fichiers texte.
Partitionnement de fichiers.
Suppression de la table des symboles d'un fichier objet ou
exécutable.
Affichage ou modification des attributs d'un terminal.
Recherche de chaînes de caractères dans un fichier binaire.
Changement de l'identité courante.
Vidage du cache sur disque.
Affichage des dernières lignes d'un fichier.
Dialogue interactif entre deux utilisateurs connectés.
Sauvegarde.
Metteur en forme de tableaux pour nroff et troff.
Filtre à 2 sorties.
Evaluation d'expression.
Affichage du temps d'exécution.
Création d'un fichier vide ou changement de la date de dernière
modification (make).
Gestion des attributs vidéos d'un terminal.
Translation de caractères.
Photocomposeuse.
Tri d'un fichier texte selon un champ.
Affichage du terminal logique associé au poste de travail.
Définition des droits d'accès par défaut des fichiers.
Affichage du nom du système hôte (exemple : uname -a ).
Décompression d'un fichier compressé par compress.
ANNEXES
343
──────────────────────────────────────────────────────────────
uniq
users
vi
w
wc
who
whoami
write
yacc
Suppression des lignes identiques d'un fichier trié
Affichage de la liste des utilisateurs connectés (rusers dans un
réseau).
Editeur pleine page.
Affichage des commandes exécutées par les utilisateurs.
Comptage du nombre de mots. de caractères. des lignes d'un
fichier.
Affichage des utilisateurs connectés.
Affichage de l'identité de l'utilisateur.
Emission d'un message interactif à un utilisateur.
Analyseur grammatical.
BIBLIOGRAPHIE
■
Ouvrages généraux sur les systèmes d'exploitation
Architecture de l'ordinateur - Andrew Tanenbaum (Editeur : InterEditions).
Operating System Concepts - J. Peterson / A. Silbershatz (Editeur : Addison Wesley).
Systèmes d'exploitation des ordinateurs - Crocus (Editeur : Dunod).
Modern Operating Systems - Andrew Tanenbaum (Editeur : Prentice Hall).
Réseaux de Pétri : Théorie et pratique - G.W. Brams (Editeur Masson).
■
Unix
The Design of the Unix System V operating system
M.J. Bach (Editeur: Prentice Hall)
The Design and the implementation of the 4.3 BSD Unix operating system
Leffler, McKusick, Karels, Quarterman (Editeur Addison Weslay)
The Magic garden explained : the Internals of Unix System V Release 4
Berny Goodheart & James Cox (Editeur: Prentice Hall)
Unix System Administration Handbook
Evi Nemeth, Garth Snyder, Scott Seebass (Editeur : Prentice Hall)
■
Windows
Windows Internals
Mark Russinovitch, David Solomon, Dave Cutler (Editeur : Microsoft Press)
■
Programmation système
The C programming Langage - Brian Kernighan, Dennis Ritchie (Editeur : Prentice
Hall)
POSIX Programmers Guide - D. Lewine (Editeur: O'Reilly & Associates, Inc)
INDEX
"
", 118
.
.cshrc, 185, 327
.exrc, 328, 338
.kshrc, 184, 327
.login, 185, 327
.logout, 185
.mailrc, 328
.mwmrc, 328
.netrc, 328
.profile, 183, 327
.xinitrc, 328
/
/bin, 133
/bin/su, 301
/dev/kmem, 231
/dev/mem, 231
/dev/null, 231
/dev/tty, 231
/etc/at, 311
/etc/batch, 311
/etc/crontab, 311
/etc/default/checklist, 216
/etc/fstab, 216
/etc/group, 298, 299
/etc/motd, 165
/etc/passwd, 298, 302
/etc/profile, 165
/etc/shadow, 104, 298, 302
/lib, 133
/mnt, 132
/sbin, 133
/tmp, 133, 310
/unix, 133
/usr/bin, 133
/usr/lib, 133
/usr/lib/cron, 311
/usr/lib/cron/queuedefs, 311
/usr/spool, 310
/usr/spool/cron, 311
/usr/tmp, 133, 310
[
[], 173
A
abort, 91
Accès à distance au Registre, 292
accès aléatoire, 31
accès concurrents, 69, 110
accès direct, 31
accès distant, 251, 320
accès séquentiel, 31
access, 131
Access, 100
Access Control Entry, 117
Access Control List, 116
accolades, 168
acct, 302, 310
accumulateur, 33
ACE, 117
ACL, 116
acledit, 117
aclget, 117
aclput, 117
activité multiple, 72
ada, 15
ADA, 10, 15, 97
Ada Lovelace, 10
additionneur, 9
administrateur de disques, 208
Adobe, 51
adressage absolu, 81
adressage direct, 81
adressage immédiat, 81
adressage indexé, 82
adressage indirect, 81
adressage normal, 81
adressage par base et déplacement, 81
adressage par page, 82
adressage relatif, 81
adressage relativement à l'adresse courante, 82
adresse, 81
adresse absolue, 81
adresse de base, 81
adresse effective, 81
adresse réelle, 81
adresse relative, 81
Advanced Risc Computer, 286
AFNOR, 15
AFS, 211
aging, 302
agrégat de partitions, 55
agrégat par bande avec parité, 55
agrégats par bandes, 54
Aida, 57
AIX, 18, 19, 20, 99, 117, 224, 240, 293
Al Gore, 21
alarm, 148
algèbre de Boole, 10
Algol, 97
algorithme, 96
algorithme de la double chance, 159
346
INDEX
──────────────────────────────────────────────────────────────
algorithme de Zempel-Liv, 247
algorithme d'Euclide, 26
algorithme du tourniquet, 150
algorithme du voleur de cycles, 159
algorithme FIFO, 87
algorithme LFU, 87
algorithme LRU, 87
algorithme RAND, 87
alias, 107, 164, 165, 166, 184, 185, 186, 327
allocateur de ressources, 78
AMD, 13, 28, 251, 256
American Standard Code For Informations
Interchange, 26
American Telephone et Telegraph, 12
analyse formelle, 96
analyse numérique, 22
Andrew Morton, 240
annuaire, 102
antémémoire, 86
anticipation, 86, 159, 226
Apache, 314
APC, 264, 266, 274
APC en mode noyau, 274
APC en mode utilisateur, 274
API, 17, 98, 252, 253, 259, 264, 265, 266, 267, 268,
270, 274, 281, 282
API 32 bits, 252
API 64 bits, 252
API OS/2, 252
appel asynchrone de procédure, 274
appel de procédure locale, 256, 277
appel système, 98, 138
Apple, 13, 18, 251, 320
Appletalk, 320
application, 23
Application Programming Interface, 98, 252
apropos, 107
ARC, 286
architecture externe, 29
architecture interne, 29
arp, 320
ASP, 101
Asynchronus Procedure Call, 264, 274
at, 302, 313
ATA with Packet Interface Extension, 48
ATAPI, 48
Athlon, 28
ATT, 12, 17, 18, 19, 99, 100
attente active, 72, 179
attribut de propriété, 113
attribut de sécurité, 113
attributs de sécurité par défaut, 115
attributs graphiques, 50
authentification, 278
automate programmable, 23
Avast, 296
avi, 51, 101
B
Babbage, 10
backquote, 168
backslash, 118
backup, 246
balayage, 49
balise, 101
bande passante, 49
Bardeen, 12
barette, 32
base de registres, 33, 279, 280, 288, 291, 292
basename, 119
bash, 155
Basic, 13, 97
Basic Input Output System, 32
batch, 25, 311, 312, 313, 314
BCPL, 17
bdbclk, 223
bdevsw_add, 238
Bell, 12, 17, 19
benchmark, 35
Best Fit, 86
bibliothèque, 96
bibliothèque liée dynamiquement, 98, 252
bibliothèque partagée, 159
Bill Clinton, 21
Bill Gates, 13
Bill Joy, 163, 333, 338
binary digit, 11
BIOS, 32, 57
bit, 11
bit d'adhérence, 116, 145
bit le plus signicatif, 27
bit s, 115
bit S, 116
bit suid, 115, 116
bitmap, 27
bits de poids faible, 26
bits de poids fort, 26
bloc, 41
blocage mutuel, 63, 64
bmap, 215
bmp, 101
bogue, 96
bogue de l'an 2000, 95
boîtier, 28
Bombe logique, 295
Boole, 10
boot.ini, 286, 316
boucle d'attente active, 74
boulier Chinois, 9
Bourne Again shell, 163, 173
branchement conditionnel, 10, 92
Brattain, 12
break, 178
Brian Kernighan, 17
brochage, 30
broche, 29
browser, 100
buffer, 226
bug, 97
bureau, 288
bureautique, 21
INDEX
347
──────────────────────────────────────────────────────────────
bus AGP, 38
bus d'adresses, 29, 37
bus de données, 29, 34, 35, 37
bus externe, 29
bus ISA, 38
bus SCSI, 39, 43, 56
bus Ultra DMA, 39
C
C, 97
C shell, 77, 155
c_bloc, 239
C++, 15, 97, 101
cache, 32, 77, 83, 99, 110, 113, 158, 160, 214, 217,
218, 226, 227, 256, 282, 283, 342
cache disque, 77, 226
cache logiciel, 32, 77, 113, 226, 256
cache matériel, 32
cadre de pile, 274
canal d'accès à un objet, 268
cancel, 331
canput, 237
capacité de la mémoire, 31
capacité de stockage, 43
capacité formatée, 42
capacité nominale, 42
caractère backquote, 168
caractère spécial ", 118
caractère spécial *, 118
caractère spécial ?, 118
caractères spéciaux, 118, 127, 128, 129, 163, 167,
173, 188, 239, 244, 245, 328
carnet de bord, 294
carte à puces, 21
carte d'acquisition, 52
carte de communications, 52
carte mère, 21, 29, 32, 37, 47, 48, 52, 321
carte perforée, 10
cat, 124
catalogue, 89, 109
cathodic ray tube, 49
cavalier, 47
CCITT, 15
cd, 122
CDE, 77
cdevsw_add, 238
CDROM, 43
Céléron, 28
Central Processing Unit, 23
chaînage arrière, 22
chaînage avant, 22
chaîne de modules, 234
chargement, 33, 84, 158
chargeur, 208, 264
chemin d'accès, 109, 110, 111, 119, 127, 129, 145,
160, 170, 182, 188, 216, 243, 268, 340
chemin d'accès absolu, 119, 170
chemin d'accès relatif, 119
chemin de données, 234
cheval de Troie, 295
chgrp, 113, 302
chien de garde, 296
chiffrement, 234
chip, 28
chipset, 37
chkdsck, 217
chmod, 114, 131, 171, 301
Chomsky, 97
chown, 113, 301, 302
circuit spécialisé, 37
classe de répartiteur, 276
clause case, 176
clause for, 177
clause if, 175
clause until, 178
clause while, 177
clavier, 24, 48
clavier azerty accentué, 48
clavier numérique, 48
clavier sans fil, 48
clé, 89, 90
clear, 329
clonage, 144, 158
close, 131, 235
clri, 223
cluster, 54, 159, 314
cmp, 125
Cobol, 97
codage digital, 26
code ASCII, 26
code EBCDIC, 26
code exécutable, 78
code opération, 33, 34, 81
codec, 51
cohérence d'un système de fichiers, 217
comm, 125
command unit, 24
commentaire, 167
commerce électronique, 101
commit, 91
Common Development Environment, 20
compatibilité, 34, 94, 251, 282
compatibilité ascendante, 34
compatible, 14
compilateur, 97
complexité, 22, 93, 94, 96
composant logiciel, 96
compress, 247, 248
compression, 247
compteur ordinal, 33, 82
conception assistée par ordinateur, 21
condition d'adressage, 81
conditions aux limites, 96
connecteur ATX, 39
connectivité, 320
consommable, 51
conteneur, 89, 109, 207, 267, 271
conteneur racine, 109
contexte d'exécution, 46, 78, 91, 169, 171, 233, 262,
263, 264, 274
continue, 178
348
INDEX
──────────────────────────────────────────────────────────────
contrôleur, 24, 39, 42, 54, 227, 228, 238, 252
contrôleur de services, 252
contrôleur de système de fichiers, 217
contrôleur d'interruptions, 39
convert, 283
convertisseur analogique/digital, 48
cookie, 100
Copernic, 102
core, 13, 128, 145, 148, 222, 313
Core 2 Multi Core, 28
couche d'abstraction matérielle, 256, 282
couche socket, 232
couches fonctionnelles, 251
couleur, 27, 50, 51
cp, 123
CP/M, 13
cpio, 127, 244, 245
CPU, 23
creat, 131
création, 129
cron, 302, 306, 309, 310, 311, 312
cron.allow, 311
cron.deny, 311
crontab, 311, 312, 314, 340
CRT, 49
crypt, 125
csrss.exe, 253
CSS, 101
CUPS, 320
cycle d'horloge, 29, 33
cycle d'une mémoire, 31
cycle perpétuel, 93
cylindre, 42
D
daemon, 300, 306
daisy chain, 48
DAO, 21
DARPA, 17
DAT, 43
data segment, 78, 159
date, 329
DB2, 21
dcopy, 246
dd, 245, 246
DDE, 319
dead lock, 63
Debian, 19
débit d'une mémoire, 31
débogueur, 139, 140, 148, 231, 262, 263, 274, 340
déchargement, 84, 158
décodeur de code barre, 24
defadm, 305
défaut de page, 86, 159
Defense Advanced Research Project Agency, 17
degré de multiprogrammation, 84
delayed write, 113
délimiteur, 167, 339
démasquage, 45
démontage, 43
Dennis Ritchie, 17, 100, 232
déplacement, 81
déroutement, 44, 138, 147, 256
descripteur, 78
descripteur d'accès à l'objet, 255
descripteur d'adressage virtuel, 261
descripteur de sécurité, 268
dessin assisté par ordinateur, 21
détrompeur, 53
device driver, 77, 89
df, 223, 340
DHCP, 320
DHTML, 101
dialogue homme/machine, 24
diff, 125
Differed Procedure Call, 274
Digital Audio Tape, 43
Digital Equipment, 10
Digital Linear Tape, 43
Digital Research, 13
Direct Memory Access, 39
directory, 89, 109
dirname, 119
discipline de ligne, 239
Disk Operating System, 25, 88
dispatcher, 79, 151, 259
disque amovible, 43
disque dur, 43
disque fixe, 43
disque logique, 208, 287
disque miroir, 54, 208
distribution uniforme, 90
dll, 98
DLT, 43
DNS, 315, 320
document technique normatif de référence, 96
domaine, 251, 319
domaine public, 16, 19, 20, 293
donnée, 23
donnée alphanumérique, 26
DOS, 25
dossier, 24, 89, 109
double clock, 159
double précision, 27
double quotes, 167
douceur, 100
downstream queue, 232
DPC, 274
drapeau, 33
Dreamweaver, 101
droits d'accès, 114
du, 122
dump, 246
duplexing, 54
Dynamic Data Exchange, 319
Dynamic Host Configuration Protocol, 320
Dynamic Linked Library, 98, 252
E
E. Dijkstra, 64, 70, 92
INDEX
349
──────────────────────────────────────────────────────────────
EAO, 21
échange total, 83
echo, 166
écran plat, 49
ed, 333, 338
édition dynamique de liens, 133
edquota, 219
EDSAC, 10
EEPROM, 31
efficacité, 95
egrep, 129
EIDE, 39
Electrically and Erasable PROM, 31
emacs, 166, 327, 328, 333, 340
en tête de l'objet, 270
enregistrement logique, 88
enregistrement physique, 41, 42, 88
enseignement assisté par ordinateur, 21
entrées/sorties, 24
entrées/sorties de bas niveau, 113
entrées/sorties de haut niveau, 113
entrées/sorties en mode bloc, 113
entrées/sorties en mode caractère, 113
entrées/sorties en mode cru, 113
entrées/sorties en mode raw, 113
env, 170
EPROM, 31
éradication, 296
ergonomie, 14, 95
erreur de troncature, 27
espace mémoire adressable, 31
espace vital, 85, 158
estimateur, 150
Ethernet, 37, 52
étreinte fatale, 63
événement, 45, 46, 139, 142, 143, 147, 151, 236, 259,
266, 267, 268, 275, 276, 302
Everest, 57
évolutivité, 47
exception, 147
exclusion mutuelle, 61, 64
exécutif, 77
executive, 77
exit, 105
expr, 178, 181, 194, 341
EXT3, 211
Extended Binary Coded Decimal Information Code, 26
eXtended Markup Langage, 101
extensibilité, 94
F
facteur de groupage, 88
faille de sécurité, 216, 295
Fairchild, 12
famine, 64
FAO, 21
fast mutexes, 73
FAT, 43, 129, 207, 282, 283
Feautrier, 188
Fedora, 19
fermeture, 130
ff, 223
fg, 155
fgrep, 129
Fiber Channel, 56
fibre, 72, 264
fibre d'un processus, 72
fichier, 24, 41, 88, 109
fichier banalisé, 109
fichier d'échanges, 222
fichier image tar, 242, 243, 246, 247, 248
fichier indexé, 91
fichier normal, 109
fichier ordinaire, 109
fichier régulier, 109
fichier relatif, 90
fichier séquentiel indexé, 91
fichier silencieux, 112, 118
fichier spécial, 110
fichier standard, 110
fichier standard d'affichage des messages d'erreurs,
110, 212
fichier standard de sortie, 212
fichier standard d'entrée, 110, 212
fichier virtuel, 212
FIFO, 87
file, 232
file d'attente, 64
file de messages, 159, 160, 235
file d'écriture, 232
file des messages descendants, 232
file des messages montants, 232
file en lecture, 232
file mapping object, 264
file system, 207
file system debugger, 220
filesave, 246
filtre, 233
find, 127, 244, 245, 305, 313
finger, 108, 320
Firefox, 100
firewall, 297
First Fit, 86
First In First Out, 87
Flops, 35
flux, 24, 38, 59, 87, 100, 112, 113, 129, 227, 232, 233,
234, 235, 236, 237
flux d'entrées/sortie, 232
flux des données descendantes, 232
flux des données montantes, 232
fmodsw, 233
fonction de hachage, 90
formatage, 42
formatage de bas niveau, 42
formatage de haut niveau, 43
forme canonique, 145
forme normalisée, 27
Fortran, 15, 97
fragment, 211
fragmentation, 86, 158
frame based exception handler, 274
350
INDEX
──────────────────────────────────────────────────────────────
FreeBSD, 19
fréquence de balayage, 49
fréquence de rafraîchissement, 49
fréquence de synchronisation horizontale, 49
fréquence de synchronisation verticale, 49
fréquence ligne, 49
friendly mutexes, 73
Front Page, 101
Front Side Bus, 38
FSB, 38
fsck, 132, 217, 218, 219
fsdb, 220
fstab, 307
FTP, 314, 320
ftpd, 320
fuser, 126
G
garbage collector, 86
Gary Kildal, 13
GDI, 252, 253, 284
GDI32.dll, 253, 258
General Electric, 16
génération d'un noyau, 240
Gentoo linux, 19
gestion, 21
gestion de production assistée par ordinateur, 22
gestion mémoire, 80
Gestionnaire de périphériques, 317
gestionnaire de tâches, 255
gestionnaire de travaux, 59, 77
gestionnaire de travaux, 78
gestionnaire de volumes logiques, 208, 224
gestionnaire des comptes de sécurité, 279
gestionnaire des déroutements, 272
gestionnaire d'exception basé sur le cadre, 274
gestionnaire d'interruptions, 45
gestionnaire d'objets, 268
gestionnaire d'objets, 255
gestionnaire d'objets, 268
get priority level, 152
getcontext, 154
getmsg, 236
Gibioctet, 11
gif, 27, 101
Giga octets, 11
Gio, 11
Gnome, 105, 293
GNU, 20, 100, 208, 240
Google, 102
GPAO, 22
gpl, 152
GPU, 52
grammaire, 97
granularité, 83
granularité d'un verrou, 69
graphe d'allocation des ressources, 75
graphe orienté des transitions, 139
Graphical Device Interface, 252
Graphical Processor Unit, 52
Graphical User Interface, 317
grappe, 54, 314
grep, 129
Gries, 92
groupadd, 305
groupdel, 305
groupe, 104, 113
groupe courant, 105
groupe de volumes physiques, 224
groupmod, 305
groups, 105, 300
GRUB, 208
GUI, 317
gzip, 247
H
HAL, 256
handle, 255, 268
handler, 255
hard limit, 219
hardware, 21
Hardware Abstraction Layer, 256
hash coding, 90
head, 124
héritage, 16, 144, 263, 268
Hewlett Packard, 10
hexadécimal, 26
history, 166
HISTSIZE, 164
HKEY_CLASSES_ROOT, 290
HKEY_CURRENT_CONFIG, 290
HKEY_CURRENT_USER, 291
HKEY_DYN_DATA, 291
HKEY_LOCAL_MACHINE, 291
HKEY_LOCAL_MACHINES, 279
HKEY_PERFORMANCE_DATA, 291
HKEYS_USERS, 291
Hoff, 12
Hollerith, 10
home directory, 298, 302
Honeywell, 13
horloge temps réel, 33, 34, 37, 39, 151
hostname, 320
HP-UX, 18, 20, 240, 293
HTML, 101
Hyper Text Markup Langage, 101
I
IBM, 10, 12, 13, 14, 18, 20, 25, 26, 36, 50, 99, 208,
224, 251, 320
id, 105
IDT, 272
IEEE, 16, 27
IHM, 24, 100
i-liste, 210
image d'un processus, 137
imprimante, 51
imprimante à jet d'encre, 51
imprimantes laser, 51
INDEX
351
──────────────────────────────────────────────────────────────
index, 91
index number, 210
indexation, 82
indicateurs d'état, 33
indice de performance, 35
indirection, 210
inetd, 310
informations de contrôle, 255
informatique, 23
ingénierie du logiciel, 92
Ingo Molnar, 240
Ingres, 100
init, 306, 307, 308, 310
init.d, 308
initialisation, 42
initialisation d'un sémaphore, 64
inittab, 307, 308
inode, 110, 111, 210, 233
Input Output Request Packet, 282
input/output, 24
installateur Windows, 321
instruction indivisible, 61
instruction privilégiée, 34
intégrité, 95
Intel, 10, 12, 13, 14, 19, 28, 38, 251, 253, 256
Intelligence artificielle, 22, 97
interblocage, 63, 79
interface homme machine, 20, 24, 59, 77, 95, 267
interface MIDI, 52
interface parallèle, 51
interface série, 51
International Business Machines, 10
Internet Exploreur, 100
Internet Information Server, 320
interopérabilité, 14, 16
interprète de commandes, 97
Inter-Process Communication, 100, 159
Interrupt dispatch table, 272
interrupt handler, 45
Interrupt Service Routine, 272
interruption, 138, 147, 256
interruption logicielle, 44
interruption logicielle différée, 274
interruption matérielle, 39
interruption request, 44
Interruption Request Level, 273
i-number, 210
ioctl, 233, 236
IPC, 100, 159, 232
ipconfig, 320
ipcs, 160
IPX/SPX, 320
IRP, 282
IRQ, 32, 44, 291
IRQL, 272, 273, 275
ISO, 15
ISR, 272
J
Jacquart, 9
Jamie Cameron, 314
Java, 15, 97, 101, 314
Javascript, 101
JCL, 25
jeton, 261, 263, 280, 281
jeton d'accès, 261
jeton d'accès primaire, 263
jeton d'accès sécurisé, 256
Job Control Langage, 25
jobs, 155
journal des images après, 91
journal des images avant, 91
joystick, 52
jpg, 27, 101
jumper, 47
K
Kaspersky, 296
KDE, 105, 293, 327
Ken Thompson, 17
kernel, 59, 137
kernel.org, 241
kernel32.dll, 253, 263
kerneld, 238
kgdb, 240
Kibioctet, 11
kill, 148, 149, 156, 161, 166, 239, 328, 341
killall, 157, 162
Kilo octets, 11
Kio, 11
Knoppix, 19
Knuth, 92
Korn shell, 77, 155, 163
L
label de disque, 246
label de volume, 41
labelit, 246
l'AFUU, 36
LAN Manager, 251
langage d'assemblage, 97
langage de deuxième génération, 97
langage de manipulation d'objet, 97
langage de quatrième génération, 100
langage de représentation, 101
langage machine, 92, 97
langage orienté objet, 97
langage structuré, 97
lastcomm, 157, 341
LCD, 49
Least Frequently Used, 87
Least Recently Used, 87
lecteur de badge, 24
lecteur de code barre, 48
lecteur optique, 48
LFU, 87
liaisons, 320
licence publique générale, 20
lien hypertexte, 111
352
INDEX
──────────────────────────────────────────────────────────────
lien matériel, 110, 210, 244
lien symbolique, 111, 242, 272
LILO, 208
limite douce, 219
limite dure, 219
Linus Torvalds, 19, 240
Linux, 14, 17
Linuxconf, 293
Lisp, 97
liste, 102, 115, 235, 242, 311, 312, 314
liste blanche, 311
liste de contrôle d'accès, 268
liste des inodes, 210
liste noire, 311
listes de contrôle d'accès, 116
ln, 111
load, 33
Local Procedure Call, 256, 277
Local Security Authority server, 279
Logical Volume Manager, 208, 224
logiciel, 21
logiciel applicatif, 60
logiciel de base, 60
logiciel de maintenance, 321
logiciel de reconnaissance de caractères, 51
logiciel libre, 314
logname, 105
logout, 105
loi de Moore, 11, 28, 47
longjump, 154
LOO, 97
lost+found, 132, 211
lp, 331
lpd, 320
lpq, 320
lpr, 320
lpsched, 306
lpstat, 331
LRU, 87, 159
ls, 111, 114, 118
LSA, 279
lsass, 279
lseek, 131
lsmod, 238
LVM, 224
M
MacAffe, 296
machine de Falcon, 9
machine de Türing, 10
machine réelle, 59, 60
machine virtuelle, 19, 59, 60, 61, 252, 254
machine virtuelle MS/DOS, 254
machine virtuelle OS/2, 253
machine virtuelle POSIX, 253
macro, 172, 178, 180
macro $, 167
Macromédia, 101
mainframe, 11
mainline, 240
maintenance, 97
majeur, 14, 187, 195, 221, 229, 240
make, 106, 126, 161, 189, 305, 341, 342
makefile, 240
man, 106, 107, 108, 183, 341
mandatory locking, 69
Mandriva, 19
manettes de jeux, 52
manuel de références, 106
Martin Richard, 17
masquage, 45, 56, 65, 152
masque d'affinité, 266
masque d'audit, 302
masque de sécurité, 115
Master Boot Record, 316
MBR, 316
Mean Time Between Failure, 10
Mébioctet, 11
mécanisme d'affinité du processeur, 258
mécanismes de communications entre processus, 100
Méga octets, 11
meilleur choix, 86
mémoire, 23
mémoire cache, 86
mémoire centrale, 24, 31, 33, 37, 83, 84, 85, 86, 87,
140, 142, 157, 158, 215
mémoire commune, 73, 159
mémoire flash, 32
mémoire mécanique, 10
mémoire partagée, 77, 100, 159, 160, 264, 267, 277
mémoire secondaire, 32, 41, 85, 86
mémoire virtuelle, 85
mémoire-cache, 77
mémoire-tampon, 67
Memory Management Unit, 80
Mepis, 19
message, 100, 235
message entrant, 232
message sortant, 232
messages, 232, 234, 235, 236, 237, 319
mesure de productivité, 94
méta caractère, 118
méta moteur de recherche, 102
méthode d'accès, 89
méthode des approximations successives, 96
micro-noyau, 256
microprocesseur, 11, 12, 13, 28, 29, 30, 37, 51
Microsoft, 10, 13, 14, 18, 20, 96, 100, 101, 251, 289,
320, 344
Microsoft System Installer, 321
MIDI, 48
mineur, 12, 187, 195, 221, 229, 240
Mio, 11
Mips, 35
mirroring, 54
MIT, 16
mkdir, 122
mknod, 229
mmap, 159, 228
MMU, 80
mode asynchrone, 89
INDEX
353
──────────────────────────────────────────────────────────────
mode background, 146, 148, 155, 156, 167, 172, 185
mode bloc, 110, 227
mode c, 110
mode canonique, 239
mode caractère, 227, 239
mode cbreak, 239
mode cooked, 239
mode cru, 239
mode d'adressage, 81
mode d'exécution, 98
mode différé, 146, 148, 155, 156, 161, 189, 313
mode esclave, 48
mode foreground, 146, 155
mode graphique, 50
mode interactif, 146, 155, 161
mode ligne, 239
mode maître, 48
mode natif, 61
mode noyau, 34, 232
mode privilégié, 138
mode raw, 211, 217, 239, 242
mode superviseur, 34
mode synchrone, 89
mode système, 34, 137
mode texte, 50
mode utilisateur, 34, 98, 137, 138, 140, 142, 232, 252,
253, 261, 263, 264, 267, 268, 270, 274, 276, 330
modèle des lecteurs et des rédacteurs, 99
modèle du producteur et du consommateur, 67, 99
modèle en couches, 60
modem, 238, 301, 320
module, 233
module de tête du flux, 233
module stream, 233
module terminal du flux, 233
monétique, 21
moniteur, 49, 59
moniteur de sécurité, 256
moniteur LCD, 49
montage, 43, 132, 211, 212, 214, 215, 216, 217, 247,
299, 310
Moore, 12, 28
more, 124
most significant bit, 27
mot, 29, 31
mot-clé, 97
moteur de recherche, 102
moteur d'inférences, 22
mouchard, 100
mount, 215, 216, 223
Mozilla, 100
mp3, 27, 51
MPEG2, 27, 51, 101
MPEG4, 27, 51, 101
MPEG7, 51
MS/DOS, 13, 14, 252, 271, 278, 282, 284
MSI, 321
mt, 242, 248
MTBF, 10
Multics, 16
multiprocesseurs, 15, 20, 65, 73, 100, 251, 256, 275,
278, 285
multiprogrammation, 25
multitâches, 251
multitâches préemptif, 256
multithread, 72, 251
mutex, 65, 71, 73, 74, 271, 273, 275, 276, 280
mutexes amicales, 73
mutexes rapides, 73
mv, 122
mv, 123
mv, 123
mvdir, 122
MVS, 25, 59
MySQL, 100
N
named pipe, 110
nappes, 53
NAS, 56, 57
navigateur, 100
nbtstat, 320
ncheck, 222
NETBEUI, 320
Netscape, 101
netstat, 320
Netware, 251, 320
Network Attached Storage, 56
Network File System, 99, 212
newfs, 218
newgrp, 105, 113, 300
NFS, 99, 111, 212, 215, 216
nice, 142, 150, 157, 158, 162, 312, 341
niveau de gris, 27, 50
niveau de priorité, 138, 150, 151, 259
niveau d'exécution, 45, 152, 259, 264, 306, 308
niveau d'indirection, 81
niveau d'interruption, 45, 65, 273
niveau logique, 89
niveau physique, 89
niveau unique de stockage, 83
nodev, 229
nœud d'index, 110, 111, 129, 210
nohup, 148, 156, 161, 342
nombre entier non signé, 26
nombre entier signé, 27
normalisation, 21
norme, 15
North Bridge, 37
Norton, 296, 321
notification d'événement, 236
noyau, 59, 232, 233, 234, 240
noyau générique, 240
noyau Linux, 240, 241
noyau Linux
version stable, 240
noyau Linux
version de développement, 240
Noyce, 12
NTFS, 207, 211, 282, 283
354
INDEX
──────────────────────────────────────────────────────────────
ntldr, 316
ntoskrnl, 316
ntoskrnl.exe, 258
NTVDM, 254
nulldev, 229
numéro de cylindre, 42
numéro de piste, 42
nwlink, 320
O
objet, 260, 267, 268, 269, 270, 276, 280, 290
objet DPC, 274
objet informatique, 61
objet port, 277
objet type, 270
OCR, 51
octet, 11
od, 124
open, 131, 212, 235
Open Software Foundation, 18
opérande, 33
opérateur crochets, 173
opérateur test, 173
opérateurs crochets, 118
opération lock, 73
opération P, 64
opération unlock, 73
opération V, 64
Oracle, 21, 100, 327
ordinateur personnel, 10
ordinateur universel, 11
ordonnancement, 59, 258
ordonnanceur, 77, 79, 139, 140, 141, 142, 147, 151,
158, 160, 234, 235, 236, 252, 255, 258, 266, 273,
274
organisation, 16, 24, 88, 89, 90, 100, 210, 287, 295,
321, 323
organisation aléatoire, 90
organisation indexée, 90
organisation logique, 85
organisation physique, 85
organisation séquentielle, 90
organismes de normalisation, 15
OS/2,, 208, 252
OSF, 18
Outils d'administration, 317
ouverture, 14, 129
overclocker, 57
overhead, 43, 86
overlay, 145
P
p_nice, 150
p_swaddr, 154
page, 82
page composer, 101
pagedaemon, 158, 160
pagination, 84
Panneau de configuration, 317
Parallel ATAPI, 39
parallèle, 51
pare-feu, 297
partition, 42, 54, 55, 207, 208, 209, 211, 224, 228,
229
partition étendue, 208, 286
partition logique, 55
partition physique, 224
partition principale, 208, 286
partitionnement, 207, 208, 209, 286
Pascal, 9, 92
PATA, 39
pathname, 109, 119, 129
Paul Allen, 13
PC Wizard, 57, 321
PCI, 37, 38, 39
PCI Express, 37, 38, 39, 52
Pébioctet, 11
périphérique, 24
périphérique maître, 48
périphérique virtuel, 88, 231
Perl, 101, 314
Personal Computer, 13
Personal System, 14
Peta octets, 11
Photoshop, 51
PHP, 101
Picassa, 51
picture element, 27
pid, 141
PIDLE, 151
pile de commandes, 164
pile d'exécution, 260, 264
pile système, 98
pile utilisateur, 98
pilote, 24, 46, 89, 95, 152, 210, 227, 228, 229, 230,
231, 232, 233, 234, 236, 238, 239, 253, 274, 283,
285, 317, 318
pilote de miniport, 284
pilote de périphériques matériels, 284
pilote de port, 284
pilote des systèmes de fichiers, 284
pilote filtrant, 284
pilote-stream, 233
PINOD, 151
pins, 28
Pio, 11
pipe, 99
pipeline, 35
piste, 41
pixel, 27, 49
PL/1, 16
planificateur de travaux, 222, 311
plateau, 41
platter, 41
PLOCK, 151
Plug and Play, 32
plug-in, 100
plus mauvais choix, 86
png, 101
PnP, 32
INDEX
355
──────────────────────────────────────────────────────────────
Po, 11
point de montage, 216
point de préemption, 150
point de reprise, 91
Point to Point Protocol, 320
Point to point tuneling protocol, 320
police de caractères, 26
poll, 236
port de communication client, 277
port de communication non nommé, 277
port de communication serveur, 277
port de connexion serveur, 277
port parallèle, 37
port PS/2, 39
port série, 37, 52
portabilité, 12, 14, 15, 16, 20, 36, 95, 322
Portable Operating Systems Interface for computing
environnement, 15
portage, 97
portail, 101, 102
POSIX, 15, 18, 20, 116, 251, 252, 253, 271, 282, 344
Postfix, 314
post-indexation, 82
postulat de Denning, 86
PPIPE, 151
PPP, 320
PPTP, 320
pr, 332
précision d'une représentation, 27
préemption, 137
pré-indexation, 82
premier trouvé, 86
PRIBIO, 151
primitive de bas niveau, 146, 237
principe de localisation, 86, 159
printenv, 170
priorité, 45
priorité de base, 259
prise, 99
prise de communication, 113
problème des accès concurrents, 68
Process Environment Bloc, 261
processeur, 61
processeur préféré, 266
processus, 61, 260
processus de poids faible, 264
processus démon, 306
processus indépendant, 61
processus leader, 142
processus léger, 72, 74, 264
processus poids plume, 72
profil matériel, 317
Programmable Read Only Memory, 31
programme, 10, 23, 61
Prolog, 97
PROM, 31
prompt, 170
propriétaire effectif, 115
propriétaire réel, 115
protection mémoire, 80, 81, 147, 148
proxy, 297
pseudo device, 230
pseudo driver, 230
pseudo périphérique, 230
pseudo pilote, 230
pseudo terminal, 231
pseudo-périphérique, 231
PSLEP, 151
PSWP, 151
psxss.exe, 253
puce, 28
PUSER, 151
putmsg, 236
PWAIT, 151
pwd, 122
PZERO, 151
Q
quantum, 258, 259, 262, 263, 266, 276
queuedefs, 312
quotacheck, 219
quotaoff, 219
quotaon, 219
quotas, 314
R
rafraîchissement, 32
RAID, 54
RAM, 32
ramasseur d'ordures, 86
RAND, 87
Random, 87
Random Access Memory, 32
rangement, 33
RAS, 320
raw device interface, 227
read, 131, 179, 235
read ahead, 113, 226
Read Only Memory, 31
read queue, 232
Real Player, 100
récepteur d'informations, 255
recouvrement, 145
redirection, 119
redo, 91
Redundant Arrays of Inexpensive Disks, 54
regedit, 288, 292
regedt32, 288
regentry.hlp, 291
région, 159, 160, 267
registre, 29, 81, 82, 83, 288, 289, 290, 292
registre d'adresse, 33
registre d'échanges, 33
registre instruction, 33
registres généraux, 33
REISER, 207
rémanence, 49
Remote Access Service, 320
renice, 157
répartiteur, 79, 259, 272, 273, 275, 276
356
INDEX
──────────────────────────────────────────────────────────────
répartiteur d'exceptions, 274
répartiteur d'interruptions, 272
répertoire, 89, 109
répertoire courant, 119
répertoire de travail, 122
répertoire des applications distribuées, 319
répertoire d'objets, 271
répertoire parent, 119
réplique, 54
reprise, 46, 88, 91, 137, 256, 266, 288
reprise à chaud, 91
reprise à froid, 91
réseau de stockage, 56
résistance terminale, 48
résolution, 49
responsable micro-informatique, 322
ressource, 60, 61, 62, 63, 64, 65, 68, 71, 72, 74, 75,
76, 77, 80, 139, 230, 266, 275, 276, 278, 294
ressource commune, 61
ressource critique, 61, 62, 63, 64, 65
ressource locale, 61
ressource partageable, 61
restore, 246
resume, 154
réutilisabilité, 94
révision, 240
rm, 122
rmdir, 122
rmmod, 238
robotique, 21
robustesse, 94
ROM, 31
ROM BIOS, 32, 321
round robin, 150
routage, 236
RPC, 319, 320
rsh, 246
run level, 45
rupture de séquence, 10, 92
rusers, 108
rwho, 108
S
SAM, 279, 288, 289, 291, 293
Samba, 314
SAN, 56, 57
SAT, 256
SATA, 39, 43
SATA2, 37, 39
sauvegarde, 245, 295
save, 154
scandisk, 217
scanner, 48, 51
schedcpu, 150
scheduler, 77, 79, 139
script, 171
SCSI, 39, 43, 51, 209, 284
secteur, 42
section critique, 63
sections critiques imbriquées, 273
sector, 42
sectorisation, 42
sécurisation, 101
Security Access Token, 256
Security Reference Monitor, 256
sed, 333
segment, 78, 85, 86, 145, 153, 154, 158, 159, 264
segmentation, 84, 85
select, 179
sémantique, 109, 235
sémaphore, 64, 100, 159
Sendmail, 314
séparateur, 121, 126, 132, 167, 170, 186, 190, 298,
332
séparateur d'une liste de commandes, 168
Serial Line Internet Protocol, 320
serveur d'exécution, 311
serveur FTP, 320
service, 233, 234
service d'accès distant, 320
service de planification, 311
service d'ordonnancement, 310
service stream, 233
service système, 44, 98
services réseau, 320
set, 170, 181
set priority level, 152
setcontext, 154
setitimer, 148
setjmp, 154
setuid, 115
setup, 32
Seymour CRAY, 11
SGF, 25
SGML, 101
shadow, 301
Shannon, 10
shared library, 133
shared objects, 133
shell de Bourne, 77
shell script, 112, 167, 171, 173, 174, 249, 325
Shockley, 12
signal, 11, 45, 46, 66, 146, 147, 148, 149, 154, 156,
162, 189, 197, 198, 204, 236, 308, 341
Simple Network Management Protocol, 320
simple précision, 27
simulation, 96
Sinclair, 13
sleep, 143, 146, 147, 148, 178, 230, 342
SLIP, 320
Small is beautiful, 98
SMH, 293
SMIT, 240, 293
SMP, 256
SNA, 320
SNMP, 320
socket, 30, 99
soft limit, 219
software, 21
Software Sandra, 36
sort, 126
INDEX
357
──────────────────────────────────────────────────────────────
souris, 24, 48
souris électromagnétique, 48
souris mécanique, 48
sous système de sécurité, 255
sous systèmes d'environnement, 252
South Bridge, 37
spécification, 94, 96
spin-lock, 74
spl*, 152
spl0, 152
spl1, 152
spl6, 152
spl7, 152
splstr, 152
spltty, 152
splx, 152
spool, 68
spooler, 68
spoule, 68
SQL Serveur, 21
SRM, 256
SSBA, 36
stack segment, 159
Standard Generalized Markup Language, 101
startup, 310
stat, 131
station de travail, 13
statut, 140
stderr, 110
stdin, 110
stdout, 110
Stephen Wozniak, 13
Steve Bourne, 163
Steve Jobs, 13
sticky bit, 116
stockage, 24
stockage attaché au réseau, 56
Storage Area Network, 56
store, 33
stream, 232
stream driver, 233
stream end, 233
stream head, 233
stream message, 232, 235
stream module, 232
stream queue, 232
streamer, 43
stripping, 54
structure de répertoire, 268
structure mutex, 73
structure U, 142
stty, 328
su, 105, 302
sudo, 301
super bloc, 210
super calculateur, 11
super user, 104
super utilisateur, 104
support, 97
support système, 252
Suze, 19
SVID, 18
swap, 83, 216, 309
swap in, 84, 158
swap out, 84, 158
swapoff, 158
swapoff, 222
swapon, 158, 222
swapper, 158
Sybase, 100
Symetric Multi Processing, 256
sync, 160, 226, 342
synopsis, 105
System Service Dispatch Table, 258
System V Interface Definition, 18
système binaire, 10, 11, 26, 27
système de fichiers, 207, 209
système de gestion de fichiers, 24, 25, 88
système d'exploitation, 25, 59
système d'exploitation préemptif, 78
système distribué, 12
système ouvert, 12, 16
système propriétaire, 12
T
table de répartition des interruptions, 272
table des processus, 255
table des régions, 159
table système proc, 142
table VTOC, 208
tablette à digitaliser, 48
tableur, 13
tâche, 61
tail, 124
tampon, 226
tar, 242, 243, 246, 247, 248
tarfile, 242
TCP/IP, 14, 17, 99, 306, 320, 328
tcsh, 185
Tébioctet, 11
tee, 330
téléchargement, 297
télématique, 21
telnet, 320
temps d'accès, 31, 41
temps d'attente, 41
temps de chargement, 41
temps de cycle, 33
temps de rangement, 41
temps de recherche, 41
temps moyen de bon fonctionnement, 10
temps partagé, 25
temps réel, 15, 33, 95, 137, 150, 259, 290
Téra octets, 11
TERM, 329
termcap, 328
terminateur, 121
terminfo, 328
test, 92
Test And Set, 65, 72
test de validation, 96
358
INDEX
──────────────────────────────────────────────────────────────
text segment, 159
théorie de l'Information, 10
thread, 72, 154, 260
thread id, 264
tic d'horloge, 33
time, 330
time sharing, 25
Tio, 11
toile, 100, 101
token, 261
tolérance aux pannes, 54
tolérance de pannes, 99, 218, 224, 251, 293
toner, 51
touch, 126
touches de fonctions, 48
tput, 328
track, 41
traitement, 23
traitement de l'information, 23
traitement de texte, 13
traitement d'images, 21
traitement en temps réel, 25
traitement multitâche, 25
traitement par lots, 25
transaction, 62, 69, 99
transcodage, 26
transistor, 10
translation d'adresse, 81
trap, 138, 149, 162, 185
trashing, 85
tube, 68, 99, 232
tube nommé, 99, 110, 232, 312
Türing, 10
U
Ubuntu, 19
ulimit, 145
ultra 640 SCSI, 39
ultra SCSI, 39
umask, 115
umount, 217
unalias, 165, 166
uncompress, 247, 248
undo, 91
uniq, 343
unité arithmétique et logique, 24, 29, 33, 37
unité centrale, 24
unité centrale de traitements, 23
unité de commandes, 24, 33
unité de contrôle, 33
unité de transfert, 41
unité d'exécution, 72
unité d'instructions, 33
Unix, 10, 17
Unix based, 17
Unix like, 17
update, 160
upstream queue, 232
USB, 37, 38, 39, 41, 43, 51, 52, 132, 216, 295
USER32.dll, 253, 258
useradd, 305
userdel, 305
usermod, 305
usurpation d'identité, 115
utilisateur propriétaire, 113, 114
V
VAD, 261
validité, 94
vanilla, 240
variable de condition, 74
variable exportée, 169
variable locale, 169
variable volatile, 170
VBscript, 101
vecteur d'interruption, 272
ventilation, 29
ver de l'Internet, 295
vérifiabilité, 95
verrou consultatif, 69, 99
verrou d'accès, 69
verrou exclusif, 69
verrou impératif, 69, 99
verrou mortel, 63
verrou partagé, 69
verrou sur boucle, 74
verrouillage d'enregistrement, 99
VFS, 212
vfstab, 216, 219
VGA, 50
vi, 128, 166, 170, 184, 223, 327, 328, 333, 334, 335,
337, 338, 343
victime, 14, 54, 87, 159
vipw, 303
Virtual Adress space Descriptor, 261
Virtual DOS Machine, 254
Virtual File System, 212
Virtual Table Of Contents, 208
virus, 295, 296
Visual Basic, 101
vitesse de rotation, 42
vitesse de transfert, 87
vmlinuz, 133
vmunix, 133
VMvare, 61
vnode, 214
volcopy, 246
volume, 41
volume logique, 208, 215, 224
volume physique, 207, 224
Von Neumann, 10, 92
VTOC, 208, 209
W
wait, 74, 142, 143, 147, 188, 189, 197, 308, 330
wakeprocs, 146
watchdog, 296
wav, 27, 51, 101
Webmin, 293, 314, 315
INDEX
359
──────────────────────────────────────────────────────────────
what, 173
whatis, 107
whereis, 107
which, 107
who, 107, 299
Win32, 252, 253, 256, 259, 261, 263, 264, 267, 268,
270, 271, 274
Win32 pour 64 bits, 253
win32k.sys, 253
Win64, 253
Windows 95, 14, 96, 288
Windows 98, 14
Windows Internet Naming Service, 320
Windows Media Player, 100
Windows NT, 14, 288
Windows on Win32, 254
Windows Vista., 14
Windows XP, 14, 59, 289
winlogon, 256, 277, 279, 281
WINS, 320
WOLK, 240
Working Over Loaded Kernel, 240
working set, 85
WorkingSpace, 264
workstation, 13
World Wide Web, 100
Worst Fit, 86
wow, 254
write, 131, 235
write behind, 226
X
X/Open, 16, 20
Xandros, 19
xconfig, 240
xedit, 333
Xenix, 18
xlock, 301
XLS, 101
xman, 106, 108, 330
XML, 101
XWindow, 16, 20, 106
Z
zcat, 247
Zilog, 12
zombi, 139, 143
zone de swap, 84
Téléchargement