Pratique des Systèmes d`Exploitation

publicité
Systèmes d'exploitation
Pierre COLLET
Equipe FDBT
Laboratoire des Sciences de l'Image, de l'Informatique et de la Télédétection
Université de Strasbourg
[email protected]
Origines de l’informatique
– 1854. Algèbre de Boole, fondée sur ET/OU/NON.
– 1931 : Gödel. Théorème de l’incomplétude.
» Il y a des problèmes impossibles à résoudre en
mathématiques et en logique…
– 1938 : Alan Turing. Se pose des questions sur la
calculabilité des nombres
» peut-on obtenir tous les nombres avec un algorithme ?
» Invente la « Machine de Turing » pour représenter des
algorithmes.
Pierre COLLET - Systèmes d'Exploitation
2
Origines
◆
1944 : Premiers prototypes. Programmation très
« hard. »
ENIAC (Electronic Numerical Integrator and Calculator).
18 000 tubes, 30 tonnes. Multiplication de 2 nombres de 10 chiffres
en 3 millisecondes. Mémoire interne très petite, programmation
« aux clés » (fiches interchangeables).
En fait, c’est une grosse calculette, et pas vraiment un ordinateur.
◆
1945 : von Neuman décrit les 5 composants de son
architecture :
–
–
–
–
–
L’Unité Arithmétique et Logique
L’Unité de Commande
La mémoire centrale
L’Unité d’entrée
L’Unité de sortie.
Pierre COLLET - Systèmes d'Exploitation
3
Historique des ordinateurs
◆
1945 : von Neumann propose l’EDVAC (Electronic
Discrete Variable Automatic Computer) selon son
architecture :
Le programme et les données sont en mémoire !
La machine ne se commande plus par des fiches, mais par le contenu
de sa mémoire !
Sauts, branchements conditionnels : l’ordinateur est né.
◆
Mais en fait, c’est Wilkes qui réalise en 1949 le premier
ordinateur: l’EDSAC : Electronic Delay Storage
Automatic Calculator
Pierre COLLET - Systèmes d'Exploitation
4
Historique
◆
51 – 58 : Premières machines commerciales, avec
IBM en 53 (IBM 650 vendu à 1500 exemplaires !!!).
Monoprogrammation, traitement par lots (batch).
Cartes perforées, bandes magnétiques, imprimante.
Pb : fiabilité des tubes à vide (lampes) : bugs ?
◆
58 – 64 : Apparition des transistors => vitesse et
fiabilité + apparition des mini-ordinateurs
– Mode superviseur, E/S asynchrones et premiers systèmes temps
partagé.
Pierre COLLET - Systèmes d'Exploitation
5
Historique
◆ 64
– 78 : Premiers circuits intégrés (puces)
(3è génération d’ordinateurs)
Systèmes multi-programmés.
◆ 80
– 90 : VLSI et réseaux
plusieurs millions de transistors/mm² (4e génération
d’ordinateurs).
Disques magnétiques/optiques, imprimantes laser, écrans
couleur graphiques, interfaces multi-fenêtres, réseaux par
câble, fibre optique, ligne téléphonique, satellite, …
L'info. d'aujourd'hui est (pratiquement) la même qu'en 80 !
Pierre COLLET - Systèmes d'Exploitation
6
Puissance des super-ordinateurs
◆
◆
◆
◆
◆
◆
◆
◆
◆
◆
◆
◆
Ordinateur
1938 Zuse V1
1941 Zuse Z3
1946 UPenn ENIAC
1954 IBM NORC
1956 MIT TX-0
1958 IBM AN/FSQ-7
1960 UNIVAC LARC
1961 IBM 7030
1964 CDC 6600
1969 CDC 7600
1974 CDC STAR-100
Vitesse Propriétaire
1 OPS Konrad Zuse, Berlin, Germany
20 OPS Konrad Zuse, Berlin, Germany
100kops Department of War, Mariland, USA
67 kops Department of Defense, Virginia, USA
83 kops MIT, Lexington, Massachusetts, USA
400 kops25 U.S. Air Force sites across the USA
250 kFLOPS AEC, Livermore Labs, USA
1.2 MFLOPS AEC, New Mexico, USA
3 MFLOPS AEC Livermore Labs, USA
36 MFLOPS
100 MFLOPS
Pierre COLLET - Systèmes d'Exploitation
7
1975 - 1996
◆
◆
◆
◆
◆
◆
◆
◆
◆
◆
◆
◆
◆
1975 ILLIAC IV
150 MFLOPS
NASA Ames, USA
1976 Cray-1
250 MFLOPS
ERDA, USA
1981 CDC Cyber 205 400 MFLOPS
1983 Cray X-MP/4
941 MFLOPS
U.S. Department of Energy
1984 M-13
2.4 GFLOPS
Moscou, URSS
1985 Cray-2/8
3.9 GFLOPS
Livermore Labs, USA
1989 ETA10-G/8
10.3 GFLOPS Florida State University
1990 NEC SX-3/44R 23.2 GFLOPS NEC Fuchu Plant, Japon
1993 CM-5/1024
59.7 GFLOPS Thinking Machines Corp
Fujitsu Wind Tunnel 124.50 GFLOPS Aerospace Lab, Tokyo
Intel Paragon XP/S 143.40 GFLOPS Sandia, New Mexico, USA
1994 Fujitsu Wind Tunnel 170.40 GFLOPS Aerospace Lab, Tokyo
1996 Hitachi SR2201
220.4 GFLOPS University of Tokyo, Japan
Pierre COLLET - Systèmes d'Exploitation
8
1997 – Aujourd'hui
◆
◆
◆
◆
◆
◆
◆
◆
◆
◆
1997 Intel ASCI Red/9152 1.338 TFLOPS Sandia, New Mexico, USA
1999 Intel ASCI Red/9632 2.379 TFLOPS Sandia, New Mexico, USA
2000 IBM ASCI White
7.226 TFLOPS Livermore Labs, USA
2002 NEC Earth Simulator 35.86 TFLOPS Yokohama, Japan
2004 IBM Blue Gene/L
70.72 TFLOPS IBM Rochester, USA
2005 IBM Blue Gene/L
136.8 TFLOPS Livermore labs, USA
2005 IBM Blue Gene/L
280.6 TFLOPS Livermore labs, USA
2007 IBM Blue Gene/L
478.2 TFLOPS Livermore labs, USA
2008 IBM Roadrunner
1.026 PFLOPS Los Alamos, USA
2008 IBM Roadrunner
1.105 PFLOPS Los Alamos, USA
Pierre COLLET - Systèmes d'Exploitation
9
Et les PC ???
◆
Noter la progression des cartes graphiques !
Pierre COLLET - Systèmes d'Exploitation
10
Futur ?
◆
Stagnation de la vitesse des processeurs !
2.9 GHz
Pierre COLLET - Systèmes d'Exploitation
11
Problème : dissipation thermique
◆
Actuellement, on peut faire tourner un Intel à 6Ghz,
mais avec quelques contraintes :
Bain d'hélium liquide à -232°C !
Pierre COLLET - Systèmes d'Exploitation
12
Autre solution ?
◆
La loi de Moore s'applique toujours ! et devrait
encore s'appliquer pour 10 à 15 ans... (2x plus de
transistors par mm2 tous les 2 ans)
Pierre COLLET - Systèmes d'Exploitation
13
Solution : processeurs multi-coeurs ?
◆
Mais la plupart des algos ne fonctionnent qu'en
séquentiel, et ne peuvent donc utiliser qu'un seul
coeur, et en divisant par le nombre de coeurs...
?
Pierre COLLET - Systèmes d'Exploitation
14
Conclusion ?
Stagnation de l'accélération pour la plupart des
algorithmes,
◆ Accélération pour les algorithmes parallèles...
◆
Conclusion générale
◆ Le matériel est extraordinairement varié.
◆ Les systèmes d'exploitation ont un rôle essentiel à
jouer, pour rendre les spécificités du matériel
invisibles à l'utilisateur (par exemple, répartir
automatiquement la charge entre les coeurs de la
manière la plus transparente possible).
Pierre COLLET - Systèmes d'Exploitation
15
Ordinateur, système, logiciels
◆
Matériel compliqué => il faut un programme pour
gérer le matériel : c'est le Système d’Exploitation.
Logiciel
Système
Matériel
Ne jamais
modifier
Modification
constante
Interface
Pierre COLLET - Systèmes d'Exploitation
16
Buts d’un Système d’Exploitation
◆
Réduire la complexité du matériel
– Lancer des instructions complexes par des commandes simples
– Offrir une notion de machine virtuelle
◆
Rentabiliser l’utilisation
– Minimiser les temps morts (multitâche, parallélisation E/S, …)
– Minimiser le temps passé sur la machine.
◆
Préserver investissements
– Équipement, matériel et logiciel
– Informations, programmes et données.
◆
Faciliter la vie de tout le monde :
– Informaticiens
– Utilisateurs (convivialité)
Pierre COLLET - Systèmes d'Exploitation
17
Tâches du S.E. (1)
◆
Outils pour l’administration
–
–
–
–
–
–
–
–
Protéger le système des utilisateurs, et les utilisateurs entre eux.
Partage des périphériques (file d’attente)
Surveillance et maintenance du système
Diagnostic (test de la machine, gestion des erreurs)
Gestion des utilisateurs (mots de passe, quotas, priorité)
Gestion des ressources système
Sauvegardes
Contrôle des performances (embouteillages, saturation de
l’espace disque, du swap)
Pierre COLLET - Systèmes d'Exploitation
18
Tâches du S.E. (2)
◆
Gestion de la communication
– Entre processus :
» Synchronisation, partage mémoire, appel à distance
– Entre ordinateurs :
» Réseau local, réseau global
Pierre COLLET - Systèmes d'Exploitation
19
Tâches du S.E. (3)
◆
Fournir un environnement à l'utilisateur
– Interface pour dialoguer avec le système
– Outils (compilateur, éditeur de liens, …)
– Utilitaires (éditeur de texte, débogueurs, interpréteurs
de commandes)
– Système de gestion de fichiers pour structurer,
protéger, partager,…
– Traitement des erreurs
– Services spéciaux (heure, date, …)
Pierre COLLET - Systèmes d'Exploitation
20
Exemple de la complexité d'un SE
◆
Gestion du processeur :
– Autrefois : système mono-tâche.
– Puis, système « batch ».
– Puis, multi-programmation (1960):
» Choisir les programmes à exécuter
» Echanger les programmes dans le processeur
» Répartir la mémoire
» Partager le code entre plusieurs programmes
Pierre COLLET - Systèmes d'Exploitation
21
Intérêt de la «multiprogrammation»
◆
Intérêt premier : gestion des E/S en parallèle :
– Soit un Pentium 3Ghz, Mémoire 60ns, accès disque 10ms.
– Vous : 1 calcul / 10s. 1 accès mémoire = 1/2h, 1 accès
disque = … 50 ANS !!!!!!
◆
Multi-programmation non préemptive:
– On passe au programme suivant lors d’un « appel
système » (typiquement entrée/sortie).
◆
Multi-tâches préemptif :
– Notion de temps partagé (quantum).
– Reprendre périodiquement le contrôle.
– Nécessite un processeur préemptif avec mode superviseur
Pierre COLLET - Systèmes d'Exploitation
22
Implications de la Multiprogrammation
Gestion complexe de la mémoire :
– Notion d’espace d’adressage.
– Allocation, protection.
– Mémoire linéaire.
– Mémoire segmentée.
– Mémoire paginée.
– Prise en compte de la spécificité du matériel (Little
Endian, Big Endian).
Tout ça, rien que pour faire du multitâches, et
notamment optimiser la gestion des entrées/sorties !
Pierre COLLET - Systèmes d'Exploitation
23
Composition d'un S.E.
Noyau (Kernel) : c'est la couche la plus basse du
système d'exploitation. Il nécessite environ 2000
lignes de langage machine, sur lesquels tout le reste
va s'appuyer. Généralement, dans les systèmes multitâches, il contient le « scheduler » (ordonnanceur).
◆ Scheduler (Ordonnanceur) : c'est le programme qui
va se charger de gérer le « temps partagé » et
d'échanger les programmes au fur et à mesure des
appels aux entrées/sorties, ou des préemptions.
◆
Pierre COLLET - Systèmes d'Exploitation
24
Composition d'un S.E. (2)
Drivers (pilotes) : Les drivers servent à gérer le
matériel informatique présent sur l'ordinateur
(gestion des lectures/écritures sur le disque, sur une
clé USB, gestion de l'impression sur une imprimante,
gestion de l'écran, du clavier, de la carte son ,...). Les
drivers peuvent être intégrés au noyau ou
indépendants du noyau (suivant le système).
◆ Système de Gestion de Fichiers : c'est lui qui permet
de stocker les informations de manière permanente,
mais pas seulement. Sous Unix, tout est considéré
comme un fichier (le clavier est un fichier, l'écran est
un fichier, ...).
◆
Pierre COLLET - Systèmes d'Exploitation
25
Composition d'un S.E. (3)
Interface utilisateur : pour demander au système de
copier un fichier, de supprimer un fichier, de lancer
une tâche, ... il faut communiquer avec le système.
C'est fait grâce à un « interpréteur de commandes »
(utilisant une interface texte) ou une interface
graphique (style Windows).
◆ Outils et utilitaires : nécessaires à la programmation
de l'ordinateur, comme un langage de
programmation, un éditeur de textes, ...
◆
Pierre COLLET - Systèmes d'Exploitation
26
Différents systèmes d'exploitation
◆
◆
◆
+ de 100 différents !
Les premiers systèmes d'exploitation des années 1960 étaient
très lourds (VAX/VMS, Multics, ...), mais ils étaient déjà
multi-tâches et multi-utilisateurs.
Au milieu des années 70 Thompson, Kernighan et Ritchie ont
créé Unix (en opposition à Multics), un système
d'exploitation volontairement « simple », basé sur les fichiers.
Ne trouvant pas de langage adapté à l'écriture du système,
Thomson et Ritchie créèrent le langage « B », mais qui était
un peut trop simpliste. Kernighan et Ritchie ont créé en 1971
le langage C, qui était l'«assembleur portable » qu'ils
recherchaient.
Pierre COLLET - Systèmes d'Exploitation
27
Unix
◆
◆
◆
◆
◆
En 1969 système écrit en assembleur par Ken Thomson sous
le nom de NKS (New Ken's System), sur mini-ordinateur
PDP7 dans les laboratoires Bell (AT&T).
En 1971, pour améliorer la portabilité, création du langage B
avec Dennis Ritchie, mais qui n'est pas suffisamment complet
pour récrire le système, et conception du langage C qui
permet de tout faire (c'est un « assembleur portable »).
1971-79 raffinement de l'Unix AT&T jusqu'au système 7.
Entre 2, en 1977, Bill Joy crée la Berkeley Software
Distribution (Unix BSD) et (entre autres) vi, mais aussi, TCP/
IP (qui permet internet), Sun Microsystems, Java, ...
En 1983, le premier Unix System V qui, avec BSD, est
l'ancêtre de Linux
Pierre COLLET - Systèmes d'Exploitation
28
Unix / Linux
1985, Andy Tanenbaum crée Minix (qui tourne sur
80286).
◆ 1991, Linus Torvalds crée Linux, basé sur le noyau
Minix, et qui utilise les utilitaires du projet Gnu
(Gnu is Not Unix, qui se prononce comme « new »
en américain) créés dans le cadre de l'Open Software
Foundation de Richard Stallman (qui a écrit Emacs
en 76).
◆
Pierre COLLET - Systèmes d'Exploitation
29
DOS ...
◆
◆
◆
◆
En 1981, IBM crée le Personal Computer, et cherche un système
d'exploitation simple pour le faire tourner. Contrairement aux gros
ordinateurs, ses performances sont très limitées, donc les systèmes
des gros ordinateurs sont inutilisables.
Un petit jeune, nommé Bill Gates (qui a le sens du commerce et les
dents longues) ose proposer à IBM un « Quick and Dirty Operating
System » sous le nom de DOS (Disk Operating System).
Bien qu'en 1981, les bases des systèmes d'exploitation existent
depuis très longtemps (Unix existe déjà depuis 10 ans !), Gates
« réinvente » tout (et mal), et surtout, fait exprès de ne pas
reprendre les mêmes notations qu'Unix (\ au lieu de /, ...) ce qui
créera d'énormes problèmes de compatibilité toujours visibles
aujourd'hui (CR/LF, ...), mais qui fidélisera ses utilisateurs...
Limitation des noms de fichier à 8 caractères . ext, limitation de la
taille mémoire gérée par le système à 10 pages de 64K, ... !!!
Pierre COLLET - Systèmes d'Exploitation
30
Windows...
◆
En 1985, l'interface graphique Windows 1.0 est créée au
dessus de DOS. Elle est totalement inutilisable et plante
constamment (et n'utilise pas les mêmes codes ascii étendus que
DOS !!! C'est une constante de Micro$oft : trouver comment faire des
versions non compatibles pour forcer les ventes, ex : docx de Word2007)
◆
◆
◆
◆
La première version à peu près stable (= qui ne plante que
toutes les 2h) sera Windows 2.10, qui sort en 1987.
Windows 3.10 (première vraiment utilisable) sort en 1990,
mais est toujours mono-utilisateur, et non préemptif.
Il faudra attendre Windows 95 (25 ans après Unix) pour avoir
un système à peu près multi-tâches (mais toujours monoutilisateur). Présentation de Win98 : http://www.youtube.com/watch?v=RgriTO8UHvs
En parallèle est né Windows NT (New Technology) en 1993,
qui se débarrasse enfin de MS-DOS, et qui a donné la
branche actuelle de Windows XP, Vista, et prochainement 7
Pierre COLLET - Systèmes d'Exploitation
31
MacOS
◆
◆
◆
◆
Mac OS était le système d'exploitation des Macintosh,
premiers ordinateurs à avoir été conçus autour d'une interface
graphique issue des travaux de Xerox Parc (souris, écran
graphique, ...) en 1984 !
MacOS était bien plus stable que Windows (pourtant né
après) ce qui en a fait le système de choix des graphistes et
des professionnels.
Les Entrées/Sorties n'étaient toujours pas gérées en parallèle
(lire une disquette paralysait l'ordinateur), et la dernière
version (MacOS 9) est sortie en 1999.
Ensuite est apparu MacOS X, dérivé du système Next de
Steve Jobs, basé sur Unix. MacOS X est donc un Unix avec
une interface graphique propre à Apple.
Pierre COLLET - Systèmes d'Exploitation
32
Fonctionnement d'un système monotâche
Le système (qui occupe un morceau de la mémoire)
contient un interpréteur de commandes qui est
exécuté au démarrage de l'ordinateur.
• L'interpréteur attend des commandes au clavier en
affichant un « prompt » ($ sous unix, > sous dos, ...)
• Lorsque la touche « retour » est pressée, la ligne est
analysée. Le premier mot ( espace) peut être :



Une commande « interne » du système ($ echo toto)
Un mot qui n'est pas une commande interne...
Le système cherche alors sur le disque si le mot est un
nom de fichier exécutable. Si c'est le cas, le fichier est
chargé en mémoire, puis lancé sur le processeur.
Sinon : « commande introuvable »
• Après exécution, retour en 1)
Pierre COLLET - Systèmes d'Exploitation
33
Système multi-tâches non préemptif
Les choses sont plus compliquées car plusieurs
tâches peuvent fonctionner « en parallèle ».
◆ Chaque tâche s'appelle un processus.
◆ Chaque processus fonctionne dans son « espace
d'adressage » (32 bits maintenant 64 bits / 128 bits).
◆ Le processeur est partagé entre toutes les tâches,
pour optimiser les entrées/sorties (qui doivent être
asynchrones).
◆ Problème possible : si un processus effectue une
boucle infinie (sans appel à une entrée/sortie) il est
impossible de « reprendre la main », et l'ordinateur
complet est bloqué.
◆
Pierre COLLET - Systèmes d'Exploitation
34
Système multi-tâches préemptif
Ajout d'une horloge dans le processeur capable
d'envoyer des « signaux » (aussi appelés
interruptions).
◆ Plusieurs processus s'exécutent en « temps partagé ».
◆ Un processus qui fait une entrée/sortie laisse le
processeur au processus suivant.
◆ S'il ne fait pas d'entrée/sortie, un processus ne peut
utiliser le processeur que pendant un laps de temps
déterminé.
◆
Pierre COLLET - Systèmes d'Exploitation
35
Création de processus
◆
◆
◆
◆
◆
◆
Qu'est-ce qu'un processus, et comment en créer un nouveau ?
Processus = espace d'adressage + « contexte »
Contexte : Ensemble des registres du processeur (registres
généraux + registre d'instruction, registre d'état, compteur
ordinal, pointeur de pile).
Pour créer un nouveau processus, il faut créer un nouvel
espace d'adressage et un nouveau contexte.
Le plus simple consiste à dupliquer le processus courant à
l'aide d'une instruction « fork() », qui va dédoubler le
processus.
fork() renvoie 0 chez le fils, et le numéro du processus fils
chez le père (c'est comme cela qu'on les différencie).
Pierre COLLET - Systèmes d'Exploitation
36
Interpréteurs sous Unix
◆
Sous unix, plusieurs interpréteurs de commande.
– sh : « shell » (le premier, créé par Steve Bourne)
– csh (plus évolué avec gestion d'historique, syntaxe
plus proche de c, mais plein de problèmes)
– Ksh (shell écrit par David Korn)
– tcsh (évolution de csh)
– bash (bourne again shell) : celui que vous avez.
Pierre COLLET - Systèmes d'Exploitation
37
Interpréteur dans système multi-tâches
◆
◆
◆
◆
L'interpréteur de commandes est essentiel dans un système,
car c'est lui qui permet de « lancer » les commandes.
L'interpréteur prend ses entrées :
– dans un fichier (appelé un fichier script),
– comme paramètres d'appel,
– mais surtout, de manière interactive, en attendant sur
l'entrée standard (le clavier).
Système monotâche : l'interpréteur fait partie du système (et
reprend la main lorsque le programme termine).
Système multi-tâches : l'interpréteur est un programme
« comme un autre ».
Pierre COLLET - Systèmes d'Exploitation
38
Fonctionnement multitâches
◆
◆
◆
◆
◆
Lorsqu'on demande à l'interpréteur de lancer un programme,
par défaut, l'interpréteur fait un fork (= se duplique) puis, le
fils se « recouvre » avec l'exécutable du programme à
exécuter.
La commande « ps » permet de voir la liste des processus
tournant sur la machine.
ps -e permet de voir tous les processus. -l affichage « long »
et de récupérer des infos intéressantes comme le PID et le
PPID, l'ID de l'utilisateur ayant lancé le processus, le terminal
sur lequel le processus a été lancé ...
Lancer un fichier «valdetoto» contenant :
while true
Faire un ps -el | grep pts/terminal
do echo $toto
(pts = pseudo terminal slave)
done
Pierre COLLET - Systèmes d'Exploitation
39
Utilisation de bash sous Linux
◆
◆
◆
◆
◆
◆
◆
Lorsque bash est appelé en mode login, il commence par exécuter
les commandes se trouvant dans /etc/profile.
Le shell de login est par défaut « interactif » (qui attend les
commandes au clavier).
Puis, il va exécuter les commandes dans ~/.bash_profile, puis
~/.bash_login, puis ~/.profile, dans cet ordre.
Le ~/.profile est le fichier de démarrage historique de sh, donc c'est
plus standard de l'utiliser.
Lorsqu'un bash de login s'arrête, il exécute les commandes
contenues dans le fichier ~/.bash_logout.
Lorsque bash est lancé en mode interactif (mais pas de login), il
exécute les commandes se trouvant dans ~/.bashrc
Enfin, lorsqu'il est lancé en mode non interactif (pour exécuter un
fichier de commande), il cherche à exécuter un fichier dont le nom
est contenu dans la variable d'environnement BASH_ENV.
Pierre COLLET - Systèmes d'Exploitation
40
Exécution d'un shellscript
◆
◆
◆
◆
◆
Différents lancements d'un shellscript :
– bash toto : création d'un shell fils non interactif pour
interpréter le contenu de toto.
– ./toto : idem
– . toto interprétation du contenu de toto dans le shell courant
(interactif).
– source toto : idem.
– exec toto : recouvrement du shell courant par un shell non
interactif.
Attention à la gestion des variable d'environnement qui sont des
variables locales...
$ toto=hello echo $titi affiche hello, mais pas dans 1 shell fils.
Il faut « exporter » titi pour rendre la variable globale.
unset permet de supprimer une variable.
Pierre COLLET - Systèmes d'Exploitation
41
Lancement d'un shell non interactif
Lors qu'un shell interactif en lance un autre pour
interpréter un fichier de commandes, il se met en
mode passif et attend la mort de son fils pour
reprendre la main.
◆ Comment ? Tout processus qui meurt envoie un
SIG_CHLD à son père.
◆
Pierre COLLET - Systèmes d'Exploitation
42
Communication par signaux
◆
Kill -l permet d'obtenir la liste des signaux
disponibles sur votre machine (signaux POSIX) :
1) SIGHUP 2) SIGINT 3) SIGQUIT
4) SIGILL
5) SIGTRAP
6) SIGABRT
7) SIGBUS 8) SIGFPE
9) SIGKILL10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN
22) SIGTTOU 23) SIGURG
24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) ... 49) SIGRTMIN+5
50) SIGRTMAX-14 51) SIGRTMAX-13 52) ... 63) SIGRTMAX-1
64) SIGRTMAX
Pierre COLLET - Systèmes d'Exploitation
43
Principaux signaux à connaître (1)
◆
◆
◆
◆
◆
◆
1 : SIGHUP (Hangup) : signal envoyé à un processus lorsque
le terminal qui le contrôle se termine. La commande « nohup »
permet de se prémunir d'un SIGHUP et de laisser tourner un
processus sans être loggué.
2 : SIGINT (interruption) : signalé envoyé si un CTRL-C est
tapé au clavier.
3 : SIGQUIT (interruption avec demande de stockage de
l'image du processus : core dump). Signal envoyé avec
CTRL-\, pour debug, par exemple.
9 : SIGKILL (tuer le process) : signal ne pouvant être capturé.
13 : SIGPIPE : signal reçu par un process cherchant à écrire
dans un tube sans lecteur.
14 : SIGALRM : Signal reçu lorsqu'une alarme est écoulée.
Pierre COLLET - Systèmes d'Exploitation
44
Signaux (2)
◆
◆
◆
◆
15 : SIGTERM : signal envoyé par « kill » demandant à un
processus de terminer. On peut capturer SIGTERM et l'utiliser pour
« faire le ménage » (fermer les fichiers, ...). Lors d'un reboot, le
processus init (père de tous les processus) envoie à chacun un
SIGTERM, puis après quelques secondes, un SIGKILL pour tuer
tous ceux qui restent.
16-17 : SIGUSR1-2 : Signaux utilisables par les programmeurs.
18 : SIGCLD : Envoyé par un fils à son père lorsque le fils meurt.
Par défaut, ce signal ne tue pas. Problème lorsque le père n'écoute
pas avec un « wait » : le système permet au père de faire le « wait »
après la mort du fils. Implication : tant qu'un père n'a pas fait de
wait sur son file, le fils ne peut réellement « mourir » et erre dans le
système comme une âme en peine : c'est un « zombie ».
Un zombie n'utilise aucune ressource système (mémoire, cpu, ...)
mais utilise une entrée dans la table des processus.
Pierre COLLET - Systèmes d'Exploitation
45
Zombies / processus orphelins
◆
◆
◆
◆
◆
Un zombie est un processus non récupéré par le père (qui n'a pas
fait de wait).
Ce n'est pas pareil qu'un orphelin, dont le père est mort avant lui.
Tous les orphelins du système sont adoptés par init, père de tous
les processus.
Init fait des wait périodiquement, pour récupérer des zombies
éventuels (si un père ne fait pas de wait sur son fils. Si le fils
meurt, il devient un zombie. Si le père meurt sans avoir fait de
wait, le zombie est adopté par init, qui va s'en débarrasser par un
wait).
La présence de zombies dans le système (« Z » dans la colonne
stat d'un ps) indique des bugs.
Pierre COLLET - Systèmes d'Exploitation
46
Signaux (3)
SIGSTOP / SIGSTP : permet de geler un processus
(pause). SIGSTOP ne peut être détourné (envoyé par
le système). SIGSTP peut être récupéré et utilisé.
◆ CTRL-Z envoie un SIGSTP au processus courant.
◆ SIGCONT : permet de redémarrer un processus gelé
avce SIGSTOP/SIGSTP.
◆ SIGBUS : comme SIGSEGV, mais violation de
mémoire physique là où SIGSEGV est une violation
de mémoire virtuelle. Un core est stocké sur le
disque.
◆
Pierre COLLET - Systèmes d'Exploitation
47
Redirections simples
◆
◆
3 Fichiers « standards » stdin, stdout, stderr, de descripteurs 0, 1 et 2.
Redirections simples :
– Commande > fic :
» Redirige la sortie standard de la commande dans le fichier fic
(en écrasant éventuellement un fic précédent).
– Commande >> fic :
» Ajoute la sortie standard de la commande à la fin du fichier
fic.
– Commande < fic :
» La commande prend ses entrées dans le fichier fic (plutôt
qu'au clavier).
– Commande << blabla (ex : $ sort << fin)
xxx yyy zzz
envoie dans commande toutes les lignes jusqu'à
blabla
(qui doit apparaître en début de ligne).
Pierre COLLET - Systèmes d'Exploitation
48
Redirections multiples et tuyaux
◆
Redirections erreur standard et multiples :
– Commande 2> toto : sort les erreurs vers toto.
– Commande 2>&1 toto : redirige stderr dans stdout
(pas pareil que ci-dessous)
– Commande &> toto : redirige les stdout et stderr dans
toto.
◆
Tuyaux |
– > ne fonctionne que vers (ou venant de) fichiers.
– Si l'on veut mettre en relation plusieurs commandes,
on crée un tuyau entre plusieurs processus lancés en
parallèle.
Pierre COLLET - Systèmes d'Exploitation
49
Exemple de tuyau
$ cat valdetoto
while true
do echo toto contient : $toto
done
$ cat affiche
while true
do read i
echo reçu la chaîne : $i
done
$ chmod 755 valdetoto
$ chmod 755 affiche
$ ./valdetoto | ./affiche
Sur un autre terminal, faire un ps-el | grep pts/x
Pierre COLLET - Systèmes d'Exploitation
50
Gestion de processus
◆
◆
◆
◆
◆
◆
◆
◆
◆
◆
◆
$ ./toto & // lance toto en arrière plan.
$ ./toto && ./titi // lance titi si toto a « réussi » (code de retour 0).
$ ./toto || ./titi // lance titi ssi toto a « échoué ».
Code de retour : stocké dans la variable « ? », accessible via $?
CTRL-Z : envoie SIGSTP au processus courant.
jobs donne la liste des jobs en cours.
Un job est différent d'un process. Par ex :
$ ./valdetoto | ./affiche
n'est qu'un seul job (constitué de 2 ps).
% permet de faire référence à un job.
%2 est le job 2, mais on peut aussi faire référence à un job par son
préfixe %./af ou avec %?af un job contenant « af ».
Appeler un job (%2) le ramène au premier plan.
bg met un job au au second plan. // $ kdvi toto CTRL-Z bg
Pierre COLLET - Systèmes d'Exploitation
51
L'interpréteur de commandes Bash
◆
◆
◆
L'interpréteur interprète tous les mots de la ligne sauf s'ils
sont « protégés. » . Certains caractères sont spéciaux. Ils
peuvent être « déspécialisés » avec « \ ».
Caractères spéciaux :
– * : se fait remplacer par la liste des fichiers du répertoire.
Ex : $ echo *
Attention : * n'est pas une variable !
– ', '', ` permettent de « protéger » de l'interprétation :
– \ déspécialise un caractère (\\ déspécialise\)
– $ & | > < ...
Alias : si un alias existe, le mot est remplacé par son alias.
– $ alias ll= ''ls -l''
– Attention : un alias n'est pas un variable : $ echo $ll
Pierre COLLET - Systèmes d'Exploitation
52
Subtilités d'interprétation des commandes
◆
'xx yy' : Tous les caractères sont protégés (et perdent leur
caractère spécial) sauf, bien sûr, le deuxième '. Aucune
substitution n'est faite dans une chaîne protégée.
– $ echo '*' ; echo '$?' ; 'll'
◆
''aa bb'' : Tous les caractères dans les '' sont protégés
SAUF : $, \, ', ` qui restent spéciaux. On peut donc
évaluer une variable ou une commande protégée par ''
– $ echo ''*'';echo ''$?''
– $ echo ''une * et un \ '' ''
◆
`aa bb` : lance le contenu dans un shell non interactif.
– $ echo ls
– $ echo `ls` (qui est différent de $ echo *)
– $ echo `ll`
Pierre COLLET - Systèmes d'Exploitation
53
Variables spéciales et subtilités...
* : dans une commande, représente la liste des
paramètres (en dehors de la commande).
◆ $* renvoie la liste des paramètres comme plusieurs
mots, ''$*'' comme un seul mot !
◆ @ force le fonctionnement comme plusieurs mots
même si à l'intérieur de guillemets !!!!
◆
$ cat test@
for i in $*
do echo $i
done
echo ---for i in "$*"
do echo $i
done
echo ---for i in "$@"
do echo $i
done
$ test@ dlkkf gjlks sfdklj
Pierre COLLET - Systèmes d'Exploitation
54
Variables prédéfinies
◆
– * : ensemble des mots de la ligne de commande sauf
commande
– # : nombre de mots sur la ligne de commande
– ? : statut de la dernière commande (valeur de retour)
– $ : id du processus courant
– ! : Numéro du dernier processus lancé en background
– _ : dernier mot de la dernière commande utilisée
– 0 : nom du shell utilisé
Sinon, à l'intérieur d'un script, on peut récupérer les mots de
la ligne de commande avec $0 .. $9
Pierre COLLET - Systèmes d'Exploitation
55
Principales variables d'environnement
◆
◆
◆
◆
◆
◆
◆
BASH_ENV : Si cette variable existe, tout nouveau shell
commencera à exécuter le contenu du fichier dont
BASH_ENV contient le nom.
PATH : liste de répertoires (séparés par :) utilisés pour
chercher les commandes.
CDPATH : Liste de répertoires utilisés pour faire un cd
(intéressant d'y mettre ~).
HOME ! Répertoire par défaut de l'utilisateur.
IFS : Internal Field Separator : liste de séparateurs de
commandes (par défaut "<esp><tab><newln>").
PS1 : Invite de commandes.\\
SHELL : Référence absolue du shell de l'utilisateur.
Pierre COLLET - Systèmes d'Exploitation
56
Autres d'environnement utiles
GROUPS: Numéro des groupes de l'utilisateur.
◆ HOSTNAME : Nom de la machine.
◆ PPID : Numéro du processus père.
◆ PWD : Répertoire de travail (référence absolue).
◆ RANDOM : Un nombre aléatoire entre 0 et 32767.
◆ SECONDS : Nombre de secondes depuis le
lancement du shell.
◆ UID : Numéro d'identification de l'utilisateur.
◆ EUID : UID « effectif » (utilisé par la commande).
◆ OSTYPE : type d'OS.
◆
Pierre COLLET - Systèmes d'Exploitation
57
Système multi-utilisateurs
◆
/etc/passwd , ayant pour format :
– Identifiant, passwd (ou x), UID, GID, nom complet, répertoire
personnel, commande à démarrer.
◆
/etc/shadow (contient le hachage) a pour format :
– Nom : hachage : nbjours depuis l'origine du monde (1/1/1970) et le
dernier changement de passwd, nb de jours avant que le passwd
puisse être changé, nb de jours après quoi le passwd doit être modifié,
nb de jours pour avertir du prochain changement, nb de jours après
lequel le passwd expire, nb de jours entre 1/1/70 et la désactivation du
compte.
◆
/etc/group , ayant pour format :
– Nom de groupe : mot de passe du groupe (x) : GID : liste des
utilisateurs du groupe.
◆
$ groups dit à quels groupes vous appartenez.
Pierre COLLET - Systèmes d'Exploitation
58
Création d'un utilisateur
◆
◆
◆
◆
◆
◆
◆
Etre « root »
Créer une nouvelle ligne dans /etc/passwd (avec vipw)
Créer une nouvelle ligne dans /etc/shadow en mettant rien
entre les :: dans le mot de passe (passwd permettra de mettre
un vrai mot de passe).
Modifier /etc/group
Créer /home/nom
Attribuer le répertoire à l'utilisateur :
– $ chown nom /home/nom
– $ chgrp nom /home/nom
Créer un mot de passe avec :
– passwd nom
Pierre COLLET - Systèmes d'Exploitation
59
Droits d'accès
◆
◆
◆
◆
◆
A l'origine : rwx (binaire) pour User, Group et Other
modifiables par chmod (pour un répertoire, r donne le droit
de voir ce qu'il y a dedans, x donne l'accès aux fichiers.
umask: par défaut 022, mais peut être changé. (tapez $
umask pour voir la valeur courante).
Le masque n'est pas fonctionnel pour x. Ainsi, umask 000 est
pareil que umask 111.
Système pas assez précis (comment donner accès à un
utilisateur seulement ?)
Access Control List (ACL), de structure :
– Entrée : [uid/gid] : permissions
– Modifié par setfacl et visualisé par getfacl.
Pierre COLLET - Systèmes d'Exploitation
60
ACL : exemple
◆
◆
Avec un umask à 027, on va créer le répertoire rep:
$ Umask 027
$ mkdir rep
$ ls -ld rep
drwxr-x--- ... collet enseignants ... rep
Si on regarde l'acl de rep, on trouve :
$ getfacl rep
# file: rep
# owner: collet
# group: enseignants
user::rwx
group::r-x
other::--Pierre COLLET - Systèmes d'Exploitation
61
ACL : exemple
◆
Pour ajouter des droite à Paul sur rep, on peut faire :
$ setfacl -m user:paul:rwx rep
◆
Ce qui donnera :
$ getfacl rep
user::rwx
user:paul:rwx
group::r-x
mask::rwx
other::--
Pierre COLLET - Systèmes d'Exploitation
62
Le quatrième droit...
◆
◆
◆
◆
◆
En plus des droits standards rwx unix, il existe les SUID bit,
SGID bit et Sticky bit.
Quand le suid bit est mis à 1 sur un fichier exécutable (rws),
alors, lorsqu'il est lancé, il s'exécute avec les droits du
propriétaire du fichier (souvent root).
SGID bit : pareil qu'au dessus. Dans le cas de répertoires,
lorsqu'un fichier est créé dans le répertoire, il récupèrera le
groupe du répertoire (et pas de l'utilisateur).
Sticky bit : sur un exécutable, sert à le maintenir en mémoire
après la fin du programme. Sur un fichier non exécutable ou
un répertoire : seul le propriétaire du fichier peut le
supprimer.
Dans l'ordre on a SUID, SGID et Sticky, donc:
$ chmod 4755 toto // met le suid bit à 1 sur toto
Pierre COLLET - Systèmes d'Exploitation
63
Fichiers spéciaux : les processus
/ proc est un « répertoire » virtuel (qui se trouve en fait en
mémoire et pas sur le disque) employé par le noyau pour
envoyer des informations aux processus.
◆ Du coup, on peut aussi l'utiliser pour interagir avec le noyau,
récupérer des informations, changer certains paramètres.
◆ La plupart de ces fichiers sont vides (cf. ls -l /proc) mais
contiennent des informations !
$ ls -l /proc/cpuinfo
$ cat /proc/cpuinfo
◆
Pierre COLLET - Systèmes d'Exploitation
64
« fichiers » intéressants
* /proc/cpuinfo - informations sur le CPU (modèle, famille, taille
du cache etc.)
* /proc/meminfo - informations concernant la RAM physique,
l'espace réservé pour le "Swap" etc.
* /proc/mounts - liste des systèmes de fichiers montés
* /proc/devices - liste des périphériques disponibles
* /proc/filesystems - les systèmes de fichiers supportés
* /proc/modules - liste des modules activés
* /proc/version - version du noyau
* /proc/cmdline - les paramètres passés au noyau lors de la mise en
route
Pierre COLLET - Systèmes d'Exploitation
65
Processus en cours
◆
◆
/proc contient des sous-répertoires dont le numéro correspond
au pid des processus.
Faire un ls -l sur /proc/pid d'un processus. On trouve (parmi
tout plein d'autres choses) :
– cmdline : contient la commande invoquée pour démarrer
le processus.
– environ: variables d'environnement passées au ps.
– status : état du ps, parmi lesquelles uid, gid, ppid, état,
– des liens symboliques vers des « répertoires » comme
cwd, qui est le répertoire de travail du ps, exe, qui pointe
vers l'exécutable du processus, fd, qui contient des liens
vers les descripteurs de fichiers du ps.
Pierre COLLET - Systèmes d'Exploitation
66
Dialogue avec le noyau
◆
◆
◆
◆
/proc/sys permet de modifier le fonctionnement du noyau.
kernel est un répertoire qui contient des informations sur le
fonctionnement du noyau. Les fichiers domainname et
hostname contiennent les noms de domaine et de machine,
qu'on peut modifier !!!
Ex : echo otena > /proc/sys/kernel/hostname
change le nom de la machine ! (et après, attention aux
problèmes !)
net contient des infos sur le réseau :
$ echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
◆
désactive les messages vers icmp_echo et cache donc la
machine du réseau (plus de réponse à ping). Mettre 0 pour
revenir en mode normal.
man proc pour plus d'infos.
Pierre COLLET - Systèmes d'Exploitation
67
Système de Gestion de Fichiers
◆
◆
◆
◆
◆
Gère l'espace mémoire mis à disposition par les
périphériques.
L'information est stockée dans des « fichiers » qui sont
de types différents (ascii, iso, unicode, binaire,
exécutable, ...).
Il faut fournir une interface utilisateur transparente.
Les fichiers doivent pouvoir être nommés (=> règles de
nommage, jeu de caractères utilisé, caractères interdits,
longueur maximale, caractères génériques (*, ?), ...)
On doit pouvoir accéder aux fichiers (fournir des
primitives, read(), write(), ...)
Pierre COLLET - Systèmes d'Exploitation
68
Virtual File System (VFS)
◆
◆
◆
◆
◆
Tous les systèmes utilisent des SGF différents, ce qui rend
difficile de monter sur un système la partition d'un autre
système.
En 1991, Linux intègre le Virtual File System de Chris
Provenzano et peut utiliser plusieurs sgf de manière
transparente.
Le VFS définit une interface (un jeu de fonction) que chaque
sgf sous-jacent doit implémenter comme il veut/peut.
Lors de la configuration du noyau, une table est créée qui
contient le nom de tous les sgf supportés ainsi qu'un pointeur
vers une fonction appelée lors du montage.
La fonction lit le superblock du disque, initialise ses variables
internes et renvoie un descripteur de sgf au vfs, qu'il peut
utiliser pour accéder aux routines du sgf.
Pierre COLLET - Systèmes d'Exploitation
69
Schéma de fonctionnement d'un VFS
Pierre COLLET - Systèmes d'Exploitation
70
Extfs puis Ext2fs, par Rémy Card
◆
◆
◆
◆
◆
◆
A l'origine, le SGF de Linux était celui de Minix (par Andy
Tanenbaum).
La partition est découpée en blocs (de 512 puis 1024 octets).
Seul pb du sgf Minix (qui n'en était pas vraiment un à l'époque) : il
utilisait des entiers sur 16 bits pour adresser les blocs => pas possible
de gérer plus de 64 kblocs => 64 Mo...
Autre limitation : nom de fichier de moins de 14 caractères.
En 1991, Linux intègre le Virtual File System de Chris Provenzano et
en 1992, Rémy implémente Extfs, pour Extended File System, capable
de gérer des noms de fichiers de 256 caractères et 2Go de disque.
Pb, extfs utilisait une listes chaînée pour stocker les blocs libres et les
numéros d'inode, conduisant à de la fragmentation (au fur et à mesure
de l'utilisation, la liste chaînée devenait désordonnée) => ext2 en 1993
Pierre COLLET - Systèmes d'Exploitation
71
Ext2fs (ext2)
Buts de ext2 : sgf extensible et robuste, pour
minimiser le risque de perte de données lors d'un
usage intensif.
◆ Les partitions de 2Go de extfs sont étendues à 4To.
◆ Noms de fichiers longs (255 caractères, extensibles à
1012).
◆ 5% de blocs réservés à root, pour récupérer de
situations où des processus utilisateurs remplissent
le sgf.
◆
Pierre COLLET - Systèmes d'Exploitation
72
Extensions de ext2
◆
Extensions au sgf standard des systèmes unix:
– Lors de la création de la partition, l'administrateur
peut choisir la taille des blocs (1024, 2048, 4096).
– Stockage des liens symboliques dans les inodes
(limite à 60 caractères pour le lien)
– Un compteur dans le superbloc force une vérification
tous les n démarrages.
– Un attribut permet de demander une suppression de
fichiers sûre (des données aléatoires remplacent le
fichier supprimé).
Pierre COLLET - Systèmes d'Exploitation
73
Structure physique d'ext2
◆
◆
◆
Le sgf est constitué de groupes de blocs, avec la structure
suivante :
Secteur de boot | groupe 1 | groupe 2 | ... | groupe N
Chaque groupe contient une copie redondante des
informations cruciales du système (superbloc et descripteurs
du sgf) ainsi qu'une partie du sgf (bitmap du bloc, bitmap des
inodes, une partie de la table des inodes et des blocs de
donnée), avec la structure suivante :
superbloc | descripteurs du sgf | bitmap des blocs | bitmap
des inodes | table des inodes | blocs de données
Cette redondance permet de récupérer d'un système
corrompu, et de gagner du temps, par la proximité entre la
table des inodes et les blocs de données, qui réduit le
déplacement des têtes de lecture.
Pierre COLLET - Systèmes d'Exploitation
74
Répertoires dans ext2
Ce sont des listes chaînées dont les maillons sont de
longueur variable.
◆ Chaque entrée contient le numéro d'inode, la taille
du maillon, la longueur du nom de fichier, le nom de
fichier.
◆ Voici le contenu d'un répertoire contenant 3
fichiers : file1, long_file_name et f2 :
i1 16 05 file1
i2 40 14 long_file_name
i3 12 02 f2
◆
Pierre COLLET - Systèmes d'Exploitation
75
Inodes sous UNIX/LINUX
◆
◆
◆
◆
◆
◆
Fichiers et répertoires sont identifiés par un numéro
unique (index node = inode), qui permet d'accéder à une
structure de données contenant toutes les informations
sur le fichier (protections, dates d'accès, ...) sauf le nom,
qui est stocké dans le fichier de répertoire.
Du coup, un fichier peut avoir plusieurs noms (plusieurs
noms différents peuvent référencer un même inode).
La quantité d'inodes disponible dépend de la taille de la
partition donne le nombre max de fichiers disponibles.
On peut afficher l'inode d'un fichier par :
$ ls -i toto
On peut afficher le nombre de blocs occupés par :
$ ls -s toto
Pierre COLLET - Systèmes d'Exploitation
76
Inodes
◆
La structure de chaque inode contient environ 64 champs
permettant de stocker :
– 10 adresses de blocs de données,
– Le champ 11 est une simple indirection vers un bloc
d'adresses. Si un bloc fait 1024 octets, alors le bloc peut
contenir 256 adresses
– Le champ 12 est une indirection double. Il donne l'adresse
d'un bloc d'adresses dont les 256 blocs pointés sont euxmême des blocs d'adresse.
– Le 13è champ est une indirection triple.
– Pour un système ext2 où un bloc fait 1024 octets, la taille
maximale d'un fichier est de 1024 * (10 + 2561 + 2562 +
2563) = 17247250432 octets, soit 16 GiO, ou 17GO.
Pierre COLLET - Systèmes d'Exploitation
77
Indirections dans les inodes
Pierre COLLET - Systèmes d'Exploitation
78
Inode : suite
◆
Après les 13 adresses, de blocs simples ou indirects, les 50
champs suivants contiennent la description du fichier :
– Taille,
– Identifiant du périphérique contenant le fichier,
– Id du propriétaire du fichier,
– Id du groupe du fichier,
– Date de dernière modif ctime
– Date de dernière modif mtime
– Date de dernier accès atime
– Nombre de liens pointant sur le fichier,
– ...
Pierre COLLET - Systèmes d'Exploitation
79
Ext3 : ext2 + système de journalisation
La journalisation permet de récupérer d'un arrêt
brutal.
◆ Ext3 est totalement compatible avec ext2, donc tous
les utilitaires d'ext2 sont utilisables sur ext3.
◆ Ext4 : extension d'ext3, pouvant gérer des volumes
jusqu'à 1024 Po.
◆ Allocation par « extents » avec la préallocation de
zones contiguës autour d'un fichier, pour minimiser
la fragmentation.
◆
Pierre COLLET - Systèmes d'Exploitation
80
Table du système de fichiers (fstab)
Le fichier /etc/fstab contient la liste des différents
systèmes de gestion de fichiers utilisés ainsi que des
disques et partitions des disques.
◆ Il y a une description de chaque partition, son point
de montage et comment elle sera utilisée.
◆ nom du périphérique | point de montage | sgf |
options | fréquence d'archivage pour dump | ordre de
vérification pour fsck.
◆
Pierre COLLET - Systèmes d'Exploitation
81
File System ChecK (fsck)
◆
◆
◆
◆
◆
Exécution automatique au boot si arrêt précédent brutal.
Fsck appelle un programme adapté au sgf de chaque partition
(fsck.ext2 pour ext2 ou ext3, fsck.vfat pour FAT, fsck.msdos pour
DOS, ...)
5 à 6 phases de vérification (et éventuellement de correction):
– blocs associés aux inodes, et de leur taille.
– chemins d'accès.
– connectivité entre les inodes et les répertoires,
– Compteurs de références
– Liste des disponibilités
– 6è phase si des corrections ont été nécessaires (maj de la liste
des disponibilités).
tune2fs permet de paramétrer l'exécution d'un fsck automatique
(toutes les semaines, tous les montages, ...)
tune2fs -l /dev/sda3 permet de consulter les paramètres
Pierre COLLET - Systèmes d'Exploitation
82
Partitions d'un système Linux
◆
◆
◆
Idéalement, il faudrait des partitions indépendantes pour :
– /boot (noyau du système pour démarrage rapide : 64 à 100Mo)
– / : 500 Mo à 1Go (à condition d'avoir les partitions ci-dessous) :
– /usr : 10Go (programmes, en ReadOnly)
– /var : 10Go (logs, sites hébergés, ...)
– /tmp : 2Go fichiers temporaires
– swap : taille de la mémoire
– /home : le reste.
Pour une installation plus « personnelle » :
– /boot : 64 à 100 Mo
– /usr : 10Go
– / : 1Go
– swap : taille de la mémoire.
– /home : le reste.
Minimisation du partitionnement
:
Pierre COLLET - Systèmes d'Exploitation
83
Partitions minimum
◆
◆
◆
Pour une simplification du partitionnement :
– / : 5 à 10Go
– Swap : taille mémoire
– /home : le reste.
Intérêt : migration plus simple d'un système à un autre.
Inconvénient : on a tous ses oeufs dans le même panier.
Pierre COLLET - Systèmes d'Exploitation
84
Zone de swap
◆
◆
◆
◆
◆
Espace réservé sur le disque pour décharger la mémoire système.
(normalement, partition séparée, car gérée différemment).
Souvent, la zone de swap est utilisée pour l'hibernation du système,
donc hibernation impossible si zone de swap < taille de RAM
Swapon / swapoff permettent d'activer ou désactiver le swap :
– sudo swapoff /dev/sda2 -- sudo swapon /dev/sda2
Réglage du déclenchement du swap :
– Sur Ubuntu, cat /proc/sys/vm/swappiness donne 60, ce qui signifie
que le noyau peut utiliser le swap lorsqu'il reste moins de 60% de
mémoire disponible.
– Pour passer à 20% :
– sudo sysctl vm.swappiness=20
– sudo swapoff -a (pour désactiver le swap)
– sudo swapon -a (pour réactiver le swap avec la bonne valeur)
Pour rendre permanent, mettre vm.swappiness=20 dans /etc/sysctl.conf
Pierre COLLET - Systèmes d'Exploitation
85
Répertoires LINUX (FHS)
◆
◆
◆
◆
◆
◆
Filesystem Hierarchy Standard, histoire de se mettre d'accord sur
où mettre quoi.
/ : racine.
/bin : exécutables essentiels au système
/sbin : Superuser binaries : binaires d'administration du système.
/boot : fichiers d'amorçage (initrd init Ram Disk, noyaux, ...)
/dev : points d'entrée des périphériques (devices)
– /dev/sda,b,c : disques durs
– /dev/tty0-59 : terminaux
– /dev/console : console initiale
– /dev/eth0,1 : interfaces réseau
– /dev/cdrom : lien symbolique vers
– /dev/random : générateur de nombres aléatoires
– /dev/null : périphérique virtuel (trou noir)
Pierre COLLET - Systèmes d'Exploitation
86
Répertoires Linux
◆
◆
◆
◆
◆
◆
◆
/etc : (editing text configuration) fichiers de configuration
spécifiques à la machine. Aucun binaire dans ce répertoire.
– /etc/opt : fichiers de configuration de logiciels optionnels
(chargés dans /opt).
/home : habituellement, un système de fichiers spécifique.
/lib : bibliothèques nécessaires pour /bin et /sbin (équivalent des dll
Windaube).
/lost+found : objets trouvés. A replacer au bon endroit si possible.
/mnt : point de montage de périphériques temporaires. (/media pour
périphériques amovibles, comme cdrom, clé usb, ...).
/proc : fichiers virtuels permettant de gérer les processus, le
système ou le noyau.
/opt : installation de paquetages d'applications supplémentaires.
(typiquement, le binaire sera dans /opt/paquetage/bin)
– /opt/bin, /opt/doc, /opt/include, /opt/info, /opt/lib, /opt/man
Pierre COLLET - Systèmes d'Exploitation
87
Répertoires Linux
◆
◆
◆
/root : répertoire personnel de root. Il est situé sur la racine pour
pouvoir être chargé au démarrage, avant le montage de /home.
/tmp : contient les fichiers temporaires.
/usr : Hiérarchie utilisateur pour données partageables en lecture
seule (si possible partition indépendante en RO, potentiellement
partageable entre plusieurs machines). Liens symboliques possibles
vers /var, par ex : /usr/tmp -> /var/tmp.
– /usr/X11R6 XWindows
– /usr/bin : la majorité des binaires exécutables.
– /usr/games : nécessaire à la bonne santé mentale de l'utilisateur.
– /usr/include : entêtes des bibliothèques partagées
– /usr/lib : bibliothèques partagées
– /usr/sbin : bin pour l'administration en complément de /usr/sbin
– /usr/share : données indépendantes de la plateforme
– /usr/local : troisième hiérarchie spécifique à la plateforme.
– /usr/src : codes sources.
Pierre COLLET - Systèmes d'Exploitation
88
Répertoires Linux
◆
◆
Reprise de la hiérarchie /usr/share (indépendant de la plateforme) :
– /usr/share/dict : dictionnaires
– /usr/share/man : pages du manuel roff (/usr/share/doc : html)
– /usr/share/misc : données diverses indépendantes de la machine
Reprise de la hiérarchie /usr/local (spécifique à la plateforme) :
– /usr/local/bin : binaires des programmes locaux
– /usr/local/include : entêtes C et C++ locaux
– /usr/local/lib : bibliothèques partagées locales
– /usr/local/sbin : binaires système locaux
– /usr/local/src : fichiers source locaux.
– /usr/local/share : données indépendantes de la hiérarchie.
» /usr/local/share/dict : dictionnaires
» /usr/local/share/doc : docs diverses
» /usr/local/share/games : fichiers de données pour /usr/games
Pierre COLLET - Systèmes d'Exploitation
89
Répertoires Linux
◆
/var : fichiers variables, incluant répertoires et fichiers en attente
(spool), historiques, administration, fichiers temporaires, ...
Si
possible, partition séparée. Si impossible, (pour réduire la taille de la
partition racine) faire un lien de /var vers /usr/var (mais pas de /var
vers /usr, car conflits possibles).
– A inclure dans toutes les distributions :
» /var/cache : données de cache des applications
» /var/lock : verrous autrefois mis dans /usr/spool/... Pour
verrouille un périphérique, créer LCK..nom_du_periph au
format HDB UUCP. Les fichiers de lock doivent rester visible
pour déterminer la cause du lock.
» /var/log : fichiers et répertoires d'historiques
» /var/run : fichiers d'info du système depuis démarrage
» /var/spool : données en attente de traitement (mail, impr...)
» /var/state : infos d'état d'une application ou du système
» /var/tmp : Fichiers temporaires préservés entre redémarrages.
Pierre COLLET - Systèmes d'Exploitation
90
Répertoires Linux
◆
◆
/var : répertoires à utiliser si les applications existent :
– /var/account : historique d'utilisation des processus
– /var/crash : données brutes de plantage de système
– /var/games : données variables des jeux
– /var/mail : boîtes aux lettres des utilisateurs
– /var/yp : fichiers de base de données de NIS (Network
Information Service).
Ne pas utiliser les répertoires suivants (pour éviter les conflits)
/var/backups, /var/cron, /var/lib, /var/local, /var/msgs, /var/preserve
Pierre COLLET - Systèmes d'Exploitation
91
Téléchargement