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