Université de Metz Cours de Système d’Exploitation Unix M.S.T. Télécom 1reAnnée Année Universitaire 2002/2003 Y. Morère Table des matières 1 Introduction à la notion d’ordinateur 1.1 Présentation de l’ordinateur . . . . . . . . . . . . . . . . . 1.1.1 Types d’ordinateurs . . . . . . . . . . . . . . . . . 1.1.2 Constitution de l’ordinateur . . . . . . . . . . . . . 1.1.3 Présentation de la carte-mère . . . . . . . . . . . . 1.1.3.1 Facteur d’encombrement d’une carte-mère 1.1.4 Le chipset . . . . . . . . . . . . . . . . . . . . . . . 1.1.5 L’horloge et la pile du CMOS . . . . . . . . . . . . 1.1.6 Le BIOS . . . . . . . . . . . . . . . . . . . . . . . 1.1.6.1 Présentation du BIOS . . . . . . . . . . . 1.1.6.2 Le BIOS Award . . . . . . . . . . . . . . 1.1.7 Le processeur . . . . . . . . . . . . . . . . . . . . . 1.1.8 La mémoire-cache . . . . . . . . . . . . . . . . . . 1.1.9 La mémoire vive . . . . . . . . . . . . . . . . . . . 1.1.10 Les connecteurs d’extension . . . . . . . . . . . . . 1.1.11 Le bus système . . . . . . . . . . . . . . . . . . . . 1.2 Qu’est-ce qu’un processeur ? . . . . . . . . . . . . . . . . . 1.2.1 le processeur . . . . . . . . . . . . . . . . . . . . . . 1.2.2 A quoi ressemble une instruction ? . . . . . . . . . . 1.2.3 Les registres . . . . . . . . . . . . . . . . . . . . . . 1.2.4 les signaux de commande . . . . . . . . . . . . . . 1.2.5 Qu’est-ce qu’un microprocesseur ? . . . . . . . . . . 1.2.6 Le parallelisme . . . . . . . . . . . . . . . . . . . . 1.2.7 Le pipelining . . . . . . . . . . . . . . . . . . . . . 1.2.8 L’architecture CISC . . . . . . . . . . . . . . . . . 1.2.9 L’architecture RISC . . . . . . . . . . . . . . . . . 1.2.10 CISC ou RISC . . . . . . . . . . . . . . . . . . . . 1.3 Rôle de la mémoire vive (RAM) . . . . . . . . . . . . . . . 1.3.1 Fonctionnement de la mémoire vive . . . . . . . . . 1.3.2 La correction d’erreurs . . . . . . . . . . . . . . . . 1.3.2.1 Bit de parité . . . . . . . . . . . . . . . . 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 13 13 14 14 14 15 15 15 16 16 17 17 17 18 19 19 19 19 19 20 20 22 22 22 22 23 23 23 24 24 4 Cours de Système d’Exploitation UNIX 1.4 1.5 1.6 1.3.2.2 Barrettes ECC . . . . . . . . . . 1.3.3 Types de barrettes de mémoire vive . . . . 1.3.3.1 DRAM PM . . . . . . . . . . . . 1.3.3.2 DRAM FPM . . . . . . . . . . . 1.3.3.3 DRAM EDO . . . . . . . . . . . 1.3.3.4 SDRAM . . . . . . . . . . . . . . 1.3.3.5 DDR-SDRAM . . . . . . . . . . 1.3.3.6 DR-SDRAM (Rambus DRAM) . La mémoire morte (ROM) . . . . . . . . . . . . . 1.4.1 Les types de ROM . . . . . . . . . . . . . 1.4.1.1 ROM . . . . . . . . . . . . . . . 1.4.1.2 PROM . . . . . . . . . . . . . . 1.4.1.3 EPROM . . . . . . . . . . . . . . 1.4.1.4 EEPROM . . . . . . . . . . . . . Le rôle du disque dur . . . . . . . . . . . . . . . . 1.5.1 Le fonctionnement interne . . . . . . . . . 1.5.2 La lecture et l’écriture . . . . . . . . . . . 1.5.3 Le mode bloc des disques durs . . . . . . . 1.5.4 Le mode 32 bits des disques durs . . . . . 1.5.5 L’interface SCSI . . . . . . . . . . . . . . . 1.5.6 Le serial ATA . . . . . . . . . . . . . . . 1.5.6.1 Serial ATA . . . . . . . . . . . . 1.5.6.2 Serial Attached SCSI . . . . . . . 1.5.6.3 L’avenir . . . . . . . . . . . . . . 1.5.7 Les caractéristiques du disque . . . . . . . Périphérique interne . . . . . . . . . . . . . . . . 1.6.1 Les cartes accélératrices 2D . . . . . . . . 1.6.2 Les cartes accélératrices 3D . . . . . . . . 1.6.3 Glossaire des fonctions accélératrices 3D et 1.6.4 Qu’est-ce qu’une carte réseau ? . . . . . . 1.6.5 Quel est le rôle de la carte réseau ? . . . . 1.6.6 La préparation des données . . . . . . . . 1.6.7 Le rôle d’identificateur . . . . . . . . . . . 1.6.8 Les autres fonctions de la carte réseau . . 1.6.9 Envoi et contrôle des données . . . . . . . 1.6.10 Paramètres de configuration de la carte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 25 26 27 27 27 27 27 28 29 29 29 30 30 30 30 31 32 33 33 34 35 35 35 35 35 36 36 37 39 39 39 40 40 40 40 2 Introduction aux systèmes d’exploitation 43 2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 2.2 Systèmes multi-tâches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 2.3 Systèmes multi-processeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 2.4 2.5 2.6 2.7 2.8 5 Les types de systèmes d’exploitation . . . . . . . Notions de fichier . . . . . . . . . . . . . . . . . . 2.5.1 Les fichiers corrompus . . . . . . . . . . . 2.5.2 Infection par un virus . . . . . . . . . . . Notion de répertoire . . . . . . . . . . . . . . . . Relations relatives . . . . . . . . . . . . . . . . . La création du DOS . . . . . . . . . . . . . . . . 2.8.1 Présentation du système . . . . . . . . . . 2.8.2 Les fichiers sous DOS . . . . . . . . . . . 2.8.3 L’organisation des fichiers en répertoires . 2.8.4 Commandes MS-DOS . . . . . . . . . . . 2.8.5 Lister les fichiers . . . . . . . . . . . . . . 2.8.6 Utiliser des caractères génériques . . . . . 2.8.7 Envoyer les informations envoyées à l’écran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . dans . . . . . . . . . . . . . . . . . . . . . . . . . . un . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . fichier 3 Caractéristiques générales du système Unix 3.1 Évolution d’Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Philosophie d’Unix . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 Caractère universel d’Unix . . . . . . . . . . . . . . . . . . 3.2.1.1 Le noyau . . . . . . . . . . . . . . . . . . . . . . 3.2.1.2 Le Shell . . . . . . . . . . . . . . . . . . . . . . . 3.2.2 Le système de gestion de fichiers . . . . . . . . . . . . . . . 3.2.2.1 Vision générale . . . . . . . . . . . . . . . . . . . 3.2.2.2 Les droits d’accès . . . . . . . . . . . . . . . . . . 3.2.3 Les processus . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.3.1 Vision générale . . . . . . . . . . . . . . . . . . . 3.2.3.2 Terminal de contrôle d’un processus, exécution en 3.2.3.3 La propriété effective et réelle d’un processus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . arrière . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . plan . . . . . . . . . . . . . . . . . 44 45 45 45 45 46 47 47 47 48 48 48 49 49 . . . . . . . . . . . . 51 51 52 52 53 53 54 54 54 55 55 55 55 4 Présentation de l’environnement du CESIUM 57 4.1 Les serveurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 4.2 Les stations de travail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 5 Utilisation du Shell 5.1 Introduction . . . . . . . . . . . . . . . . . 5.1.1 Qu’est ce que le Shell . . . . . . . . 5.1.2 Les différents utilisateurs . . . . . . 5.1.2.1 L’utilisateur de base . . . 5.1.2.2 Le programmeur . . . . . 5.1.2.3 L’administrateur système 5.1.3 Exemple de session utilisateur . . . Yann MORÈRE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . M.S.T. Télécom 1re Année 59 59 59 59 60 60 60 61 6 Cours de Système d’Exploitation UNIX 5.2 Le Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.1 Entrée dans le système . . . . . . . . . . . . . . . . . . . . . 5.2.1.1 Changer son mot de passe . . . . . . . . . . . . . . 5.2.1.2 Format général des commandes . . . . . . . . . . . 5.2.1.3 stuces pour se déplacer sur la ligne de commandes : 5.2.1.4 Le manuel en ligne . . . . . . . . . . . . . . . . . . 5.2.1.5 Sortie du système . . . . . . . . . . . . . . . . . . . 5.2.2 Syntaxe de commande . . . . . . . . . . . . . . . . . . . . . 5.2.2.1 Fonctionnement de l’exécution d’une commande . . 5.2.2.2 Commandes liées à l’arborescence de fichiers . . . . 5.2.2.3 Commandes liées aux répertoires . . . . . . . . . . 5.2.2.4 Gestion des sorties imprimantes . . . . . . . . . . . 5.2.2.5 Commandes d’observation du système . . . . . . . 6 Le Shell - Interpréteur de commandes 6.1 Les variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1.1 Variables simples . . . . . . . . . . . . . . . . . . . . . . . . 6.1.1.1 Mécanismes d’affectation . . . . . . . . . . . . . . . 6.1.1.2 Désignation de la variable . . . . . . . . . . . . . . 6.1.1.3 Affichage d’une variable . . . . . . . . . . . . . . . 6.1.1.4 Saisie au clavier . . . . . . . . . . . . . . . . . . . . 6.1.1.5 1.1.5 Exportation des variables . . . . . . . . . . . 6.1.1.6 Visualisation des variables disponibles . . . . . . . 6.1.1.7 Supprimer une variable . . . . . . . . . . . . . . . 6.1.1.8 Substitutions . . . . . . . . . . . . . . . . . . . . . 6.1.2 Variables du shell - personnalisation de l’environnement . . . 6.1.2.1 Les principales variables . . . . . . . . . . . . . . . 6.1.2.2 Que se passe-t-il au login ? . . . . . . . . . . . . . . 6.1.3 Variables spéciales . . . . . . . . . . . . . . . . . . . . . . . 6.2 Mécanismes d’interprétation du shell . . . . . . . . . . . . . . . . . 6.2.1 Définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.2 Commandes et processus . . . . . . . . . . . . . . . . . . . . 6.2.3 Prompts et tourmenterais de commandes . . . . . . . . . . . 6.2.4 Environnement d’une commande . . . . . . . . . . . . . . . 6.2.5 Recherche d’une commande . . . . . . . . . . . . . . . . . . 6.2.6 Les alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.7 Substitution de commande . . . . . . . . . . . . . . . . . . . 6.2.8 Substitution de nom de fichier et autres caractères spéciaux 6.2.9 Mécanismes d’interprétation . . . . . . . . . . . . . . . . . . 6.2.10 Lancement de l’exécution d’un shellscript . . . . . . . . . . . 6.2.10.1 Lancement par le nom du shellscript . . . . . . . . M.S.T. Télécom 1re Année . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 62 62 63 63 63 66 66 66 66 74 75 77 . . . . . . . . . . . . . . . . . . . . . . . . . . 85 85 85 85 85 86 86 86 86 86 87 87 87 87 88 88 88 88 88 89 89 89 90 90 90 91 91 5 octobre 2003 Cours de Système d’Exploitation UNIX 6.3 6.4 7 6.2.10.2 Lancement par appel explicite du shell . . . . . . . . . . . . . . 92 6.2.10.3 Lancement par appel de la commande interne . . . . . . . . . 92 Les redirections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 6.3.1 Redirections des sorties . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 6.3.1.1 Redirection avec écrasement du fichier de redirection . . . . . . 92 6.3.1.2 Redirection avec ajout à la fin du fichier de redirection . . . . . 92 6.3.1.3 Redirection du fichier d’erreur . . . . . . . . . . . . . . . . . . . 93 6.3.2 Redirection des entrées . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 6.3.3 La notion de pipe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 Lancement de processus en arrière plan . . . . . . . . . . . . . . . . . . . . . . . 95 6.4.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 6.4.2 Gestion des jobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 7 Le Shell - Langage de programmation 97 7.1 Tests divers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 7.2 Décaler la position des paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . 98 7.3 Sortie d’un shellscript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 7.4 Les structures de contrôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 7.4.1 if..then..else..fi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 7.4.2 case..esac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 7.4.3 for..do..done . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 7.4.4 while..do..done . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 7.4.5 until..do..done . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 7.4.6 Instructions liées aux boucles . . . . . . . . . . . . . . . . . . . . . . . . 102 7.5 Commandes built-in diverses . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 7.6 Calculs, traitements des chaı̂nes de caractères . . . . . . . . . . . . . . . . . . . 103 8 Manipulation des données d’un fichier 105 8.1 Trier les lignes d’un fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 8.2 Recherche d’une chaı̂ne de caractères . . . . . . . . . . . . . . . . . . . . . . . . 106 8.3 Compter les caractères, les mots, les lignes . . . . . . . . . . . . . . . . . . . . . 107 8.4 Conversion et suppression de caractères . . . . . . . . . . . . . . . . . . . . . . . 107 8.5 Comparaison du contenu de 2 fichiers . . . . . . . . . . . . . . . . . . . . . . . . 107 8.6 8.7 8.5.1 Comparaison de 2 fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . 107 8.5.2 Différence entre 2 fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Extraire le début ou la fin d’un fichier . . . . . . . . . . . . . . . . . . . . . . . . 108 8.6.1 Début du fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 8.6.2 Fin du fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Autres commandes utiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Yann MORÈRE M.S.T. Télécom 1re Année 8 9 Introduction au système X-Window 9.1 Introduction . . . . . . . . . . . . . 9.1.1 Systèmes de fenêtrage . . . 9.1.2 Le projet Athena . . . . . . 9.2 Le système X Window . . . . . . . 9.2.1 Architecture . . . . . . . . . 9.2.2 Client-Serveur ? . . . . . . . 9.2.3 Le serveur X . . . . . . . . . 9.2.4 Requêtes et événements . . M.S.T. Télécom 1re Année Cours de Système d’Exploitation UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 109 109 109 110 111 111 112 112 5 octobre 2003 Table des figures 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11 1.12 1.13 Le BIOS Award . . . . . . Schéma d’un slot . . . . . Processeur Intel 4004 . . . Cœur d’un processeur . . . Processeur Intel Pentium . Structure de ma mémoire . Mémoire SIMM 30 broches Mémoire SIMM 72 broches Mémoire DIMM . . . . . . Structure d’un disque dur Notion de Piste . . . . . . Notion de secteur . . . . . Notion de cylindre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 18 20 21 21 24 25 26 26 31 32 32 32 2.1 2.2 2.3 Principe du Système d’exploitation . . . . . . . . . . . . . . . . . . . . . . . . . Système de répertoire de Win 95 . . . . . . . . . . . . . . . . . . . . . . . . . . Invite MS-Dos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 46 47 3.1 3.2 Structure d’un système Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Système de fichier d’un système Unix . . . . . . . . . . . . . . . . . . . . . . . . 53 54 4.1 Reseau de Machine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 5.1 Connexion en mode graphique . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 6.1 6.2 6.3 Redirections des entrées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mécanisme de fonctionnement de ”|” . . . . . . . . . . . . . . . . . . . . . . . . . Mécanisme de fonctionnement de tee . . . . . . . . . . . . . . . . . . . . . . . . 93 95 95 9.1 9.2 Architecture du système X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Requêtes et Evénements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cette page est laissée blanche intentionnellement Liste des tableaux 5.1 Tableau récapitulatif des droits d’accès . . . . . . . . . . . . . . . . . . . . . . . 11 68 Cette page est laissée blanche intentionnellement Chapitre 1 Introduction à la notion d’ordinateur La compréhension du vocabulaire informatique représente généralement la principale difficulté à laquelle se heurtent les acheteurs potentiels d’ordinateurs personnels. En effet, contrairement à un téléviseur, pour lequel les critères de choix sont assez limités, le choix d’un ordinateur revient à choisir chaque élément qui le compose et à en connaı̂tre les caractéristiques. Ce dossier n’a pas pour but de donner un sens à toutes les abbréviations informatiques (dans la mesure où de nombreux constructeurs ont leurs propres technologies) mais il a vocation à donner de la visibilité sur les principaux composants d’un ordinateur, d’en expliquer le fonctionnement et d’en donner les principales caractéristiques à connaı̂tre. 1.1 Présentation de l’ordinateur Un ordinateur est un ensemble de circuits électronique permettant de manipuler des données sous forme binaire, c’est-à-dire sous forme de bits. Le mot ”ordinateur” provient de la firme IBM. Celle-ci demanda en 1954 à un professeur de lettres à Paris de trouver un mot pour désigner ce que l’on appelait vulgairement un ”calculateur” (traduction littérale de computer en anglais). 1.1.1 Types d’ordinateurs Toute machine capable de manipuler des informations binaires peut être qualifiée d’ordinateur. Toutefois, la plupart des personnes pensent à un ordinateur personnel (PC, abbréviation de personal computer ), le type d’ordinateur le plus présent sur le marché, toutefois il existe beaucoup d’autres types d’ordinateurs (la liste suivante est non exhaustive) : B Amiga B Atari B Apple Macintosh B stations Alpha B stations SUN B stations Silicon Graphics Nous nous interesserons dans la suite qu’aux ordinateurs de type PC, appelés aussi ordinateurs compatible IBM, car IBM est la firme qui a créé les premiers ordinateurs de ce type et a longtemps (jusqu’en 1987) été le leader dans ce domaine, à un tel point qu’elle contrôlait les standards, copiée par les autres fabricants. 13 14 1.1.2 Cours de Système d’Exploitation UNIX Constitution de l’ordinateur Un ordinateur est un ensemble de composants électroniques modulaires, c’est-à-dire des composants pouvant être remplacés par d’autres composants ayant éventuellement des caractéristiques différentes. Ces composants sont architecturés autour d’une carte principale comportant de nombreux circuits intégrés (soudés sur la carte) et un grand nombre de connecteurs ; cette carte est appelée carte-mère. La carte-mère est logée dans un boı̂tier, comportant des emplacements pour les périphériques de stockage sur la face avant, ainsi que des boutons permettant de contrôler la mise sous tension de l’ordinateur et un certain nombre de voyants permettant de vérifier l’état de marche de l’appareil et l’activité des disques durs. Sur la face arrière le boı̂tier propose des ouvertures en vis-à-vis des cartes d’extension et des interfaces d’entrée-sortie connectées sur la carte-mère. Enfin le boı̂tier héberge une alimentation, chargée de fournir un courant électrique stable à l’ensemble des éléments constitutifs de l’ordinateur. On appelle unité centrale l’ensemble composé du boı̂tier et de l’ensemble des éléments qu’il embarque. L’unité centrale doit être connectée à un ensemble de périphériques externes. Un ordinateur est généralement composé au minimum d’une unité centrale, un écran (moniteur), d’un clavier et d’une souris, mais il est possible de connecter une grande diversité de périphériques externes sur les interfaces d’entrée-sortie (ports séries, port parallèle, port USB, port firewire, ...) : B imprimante B scanner B périphérique de stockage externe B appareil photo ou caméra numérique B assistant personnel (PDA) B ... 1.1.3 Présentation de la carte-mère L’élément constitutif principal de l’ordinateur est la carte-mère, c’est sur cette carte que sont connectés ou soudés l’ensemble des éléments essentiels de l’ordinateur. La carte-mère contient des éléments embarqués (intégrés à la carte) : B Le chipset, circuit qui contrôle la majorité des ressources (interface de bus du processeur,mémoire cache et mémoire vive, slots d’extension,...) B L’horloge et la pile du CMOS B Le BIOS B Le bus système Il existe plusieurs façons de caractériser une carte-mère : B son facteur d’encombrement B son chipset B son type de support de processeur 1.1.3.1 Facteur d’encombrement d’une carte-mère nd généralement par facteur d’encombrement, la géométrie et les dimensions de la carte-mère. Afin de fournir des cartes-mères pouvant s’adapter dans différents boı̂tiers de marques différentes, des standards ont été mis au point : M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX B B B B B 15 AT baby AT full format ATX LPX NLX 1.1.4 Le chipset Le chipset (traduisez jeu de composants) est un circuit électronique chargé de coordonner les échanges de données entre les divers composants de l’ordinateur (processeur, mémoire ; ...). Dans la mesure où le chipset est intégré à la carte-mère, il est important de choisir une cartemère embarquant un chipset récent afin de garantir à votre PC un maximum de chance de pouvoir évoluer. Certains chipsets intègrent parfois une puce graphique ou une puce audio (généralement sur les PC bas de gamme), ce qui signifie qu’il n’est pas nécessaire d’installer une carte graphique ou une carte son. Toutefois, étant donné la piètre qualité de ces composants intégrés, il est généralement conseillé de les désactiver (lorsque cela est possible) dans le setup du BIOS et d’installer des cartes d’extension dans les emplacements prévus à cet effet ! 1.1.5 L’horloge et la pile du CMOS L’horloge temps réel (parfois notée RTC, ou real time clock ) est un circuit chargé de la synchronisation des signaux du système. Elle est constituée d’un cristal qui, en vibrant, donne des impulsions (appelés tops d’horloge) afin de cadencer le système. On appelle fréquence de l’horloge (exprimée en Mhz ) le nombre de vibrations du cristal par seconde, c’est-à-dire le nombre de tops d’horloge émis par seconde. Plus la fréquence est élevée, plus il y a de tops d’horloge et donc plus le système pourra traiter d’informations. Lorsque vous mettez votre ordinateur hors tension, l’alimentation cesse de fournir du courant à la carte-mère. Or, lorsque vous le rebranchez, votre système d’exploitation est toujours à l’heure bien que l’unité centrale n’était plus alimentée pendant un certain temps. En réalité même lorsque votre PC est débranché ou qu’une panne d’électricité intervient, un circuit électronique appelé CMOS (Complementary Metal-Oxyde Semiconductor, parfois appelé BIOS CMOS ) conserve certaines informations sur le système, y compris l’heure et la date système. Le CMOS est continuellement alimentée par une pile (au format pile bouton) située également sur la carte-mère. Ainsi, les informations sur le matériel installé dans l’ordinateur (comme par exemple le nombre de pistes, de secteurs de chaque disque dur) sont conservées dans le CMOS. Dans la mesure où le CMOS est une mémoire lente, certains systèmes recopient parfois le contenu du CMOS dans la RAM (mémoire rapide). Ainsi, si vous constatez que votre PC à tendance à oublier l’heure, où que l’horloge prend du retard, pensez à en changer la pile ! 1.1.6 Le BIOS Le BIOS (Basic Input/Output System) est le programme basique servant d’interface entre le système d’exploitation et la carte-mère. Le BIOS est stocké dans une ROM (mémoire morte, c’est-à-dire une mémoire en lecture seule), ainsi il utilise les données contenues dans le CMOS pour connaı̂tre la configuration matérielle du système. Yann MORÈRE M.S.T. Télécom 1re Année 16 Cours de Système d’Exploitation UNIX Il est possible de ”configurer” le BIOS grâce à une interface (nommée BIOS setup, traduisez configuration du BIOS ) accessible au démarrage de l’ordinateur par simple pression d’une touche (généralement la touche Suppr. En réalité le setup du BIOS sert uniquement d’interface pour la configuration et les données sont stockées dans le CMOS. Pour plus d’informations n’hésitez pas à vous reporter au manuel de votre carte-mère). 1.1.6.1 Présentation du BIOS Tous les PC utilisent un BIOS (”Basic Input/Output System”traduisez ”Système d’entrées/sorties basique”) pour permettre le contrôle du matériel. C’est un composant essentiel de votre ordinateur, il s’agit d’un petit logiciel dont une partie est dans une mémoire morte (ROM : que vous ne pouvez donc pas modifier), et une autre partie est dans un EEPROM (ROM que l’on peut modifier par impulsions électriques, d’où le terme flasher lorsque vous la modifiez). Lorsque le système est mis sous-tension ou réamorcé (Reset), le CPU est lui aussi réamorcé et le BIOS va effectuer les opérations (barbares) suivantes : B Faire le test du CPU B Vérifier le BIOS B Vérifier la configuration du CMOS B Initialiser le timer (l’horloge interne) B Initialiser le contrôleur DMA B Vérifier la mémoire vive et la mémoire cache B Installer toutes les fonctions du BIOS B Vérifier toutes les configurations (clavier, disquettes, disques durs ...) La plupart des BIOS ont un ”setup” (programme de configuration) qui permet de modifier la configuration basique du système. Ce type d’information est stockée dans une RAM autoalimentée afin que l’information soit conservée même lorsque le système est hors-tension (nous avons vu que la mémoire vive était réinitialisée à chaque redémarrage). Il existe de nombreux BIOS dans votre machine : B Le BIOS de la carte-mère que nous allons voir B Le BIOS qui contrôle le clavier B Le BIOS de la carte vidéo et éventuellement B Le BIOS de contrôleurs SCSI qui permettent de booter sur le périphérique SCSI, qui communique alors avec le DOS sans pilote supplémentaire B (Le BIOS de cartes réseau qui permettent de booter sur le réseau Lorsque le système est mis sous tension, le BIOS affiche un message de copyright à l’écran, puis il effectue les tests de diagnostics et d’initialisation. Lorsque tous les tests ont été effectués, le BIOS affiche un message du genre : TO ENTER SETUP BEFORE BOOT PRESS CTRL-ALT-ESC OR DEL KEY qui signifie ”PRESSEZ ”CTRL-ALT-ESC” ou la touche ”DEL” pour entrer dans le ”SETUP” avant le démarrage du PC” 1.1.6.2 Le BIOS Award Lorsque vous appuyez sur la touche ”Suppr” au démarrage de l’ordinateur, vous tombez sur un écran ressemblant à peu de chose près à celui-ci : M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 17 Fig. 1.1 – Le BIOS Award 1.1.7 Le processeur Le processeur (aussi appelé microprocesseur ) est le coeur de l’ordinateur, car il exécute les instructions des programmes grâce à un jeu d’instructions. Le processeur est caractérisé par sa fréquence, c’est-à-dire la cadence à laquelle il exécute les instructions. Ainsi, de manière grossière, un processeur cadencé à 600 Mhz effectuera 600 millions d’opérations par seconde. La carte-mère possède un emplacement (parfois plusieurs dans le cas de cartes-mères multiprocesseurs) pour accueillir le processeur. On distingue deux catégories de supports : B slot : il s’agit d’un connecteur rectangulaire dans lequel on enfiche le processeur verticalement B socket : il s’agit d’un connecteur carré possédant un grand nombre de petits connecteurs sur lequel le processeur vient directement s’enficher Dans la mesure où le processeur rayonne thermiquement, il est nécessaire d’en dissiper la chaleur pour éviter que ses circuits ne fondent. C’est la raison pour laquelle il est généralement surmonté d’un dissipateur thermique, un matériau ayant une bonne conduction thermique, chargé d’augmenter la surface d’échange thermique du microprocesseur. Le dissipateur thermique comporte une base en contact avec le processeur et des ailettes afin d’augmenter la surface d’échange thermique. Un ventilateur accompagne généralement le dissipateur pour améliorer la circulation de l’air autour du dissipateur et améliorer l’échange de chaleur. C’est le ventilateur du boı̂tier qui est chargé d’extraire l’air chaud du boı̂tier et permettre à l’air frais provenant de l’extérieur d’y entrer. 1.1.8 La mémoire-cache La mémoire-cache permet au processeur de se ”rappeler” les opérations déjà effectuées auparavant. En effet, elle stocke les opérations effectuées par le processeur, pour qu’il ne perde pas de temps à recalculer des choses qu’il a déjà faites précédemment. La taille de la mémoire-cache est généralement de l’ordre de 512 Ko. Sur les ordinateurs récents ce type de mémoire est directement intégré dans le processeur. 1.1.9 La mémoire vive La mémoire vive (RAM pour Random Access Memory) permet de stocker des informations pendant tout le temps de fonctionnement de l’ordinateur, son contenu est par contre détruit dès lors que l’ordinateur est éteint ou redémarré, contrairement à une mémoire de masse comme le disque-dur qui garde les informations même lorsqu’il est hors-tension. Pourquoi alors se servir de mémoire alors que les disques durs sont moins chers ? Car elle est extrèmement rapide comparé aux périphériques de stockage de type disque dur (de Yann MORÈRE M.S.T. Télécom 1re Année 18 Cours de Système d’Exploitation UNIX l’ordre de quelques dizaines de nanosecondes : environ 70 pour la DRAM, 60 pour la RAM EDO, et 10 pour la SDRAM). Type de mémoire 1.1.10 Les connecteurs d’extension Les connecteurs d’extension (en anglais slots) sont des receptacles dans lesquels il est possible d’enficher des cartes d’extension, c’est-à-dire des cartes offrant de nouvelles fonctionnalités ou de meilleures performances à l’ordinateur. Il existe plusieurs sortes de connecteurs : B connecteur ISA (Industry Standard Architecture) : permettant de connecter des cartes ISA, les plus lentes fonctionnant en 16-bit B connecteur VLB (Vesa Local Bus) : Bus servant autrefois à connecter des cartes graphiques B connecteur PCI (Peripheral Component InterConnect) : permettant de connecter des cartes PCI, beaucoup plus rapides que les cartes ISA et fonctionnant en 32-bit B connecteur AGP (Accelerated Graphic Port) : un connecteur rapide pour carte graphique. B connecteur AMR (Audio Modem Riser ) : ce type de connecteur permet de brancher des mini-cartes sur les PC en étant équipés Fig. 1.2 – Schéma d’un slot Le premier bus AGP (Accelerated Graphics Port) est sorti en même temps que le Pentium II en Mai 1997, sur des chipsets à base de ”Slot One”. Puis ils sont apparus sur des supports à base de Super 7. Il sert à la connexion de cartes vidéos. Son avantage est de pouvoir partager la mémoire vive centrale pour stocker des textures, ainsi les cartes utilisant ce support ont besoin de moins de mémoire, donc elles sont moins chères. Le bus AGP est cadencé à 66 Mhz (soit deux fois plus que le bus PCI), ce qui lui offre une bande passante de 528 Mo/s (132 Mo/s pour le bus PCI), donc de meilleures performances, notamment pour l’affichage de scènes 3D compliquées. Le bus AGP a suivi des évolutions (AGP 1X 2X) si bien que l’on peut aujourd’hui trouver les cartes graphiques aussi bien en version PCI ou en AGP Avec l’apparition du bus AGP 4X, la bande passante passera à 1Go/s. Cette norme utilisera une fois de plus un nouveau type de support, si bien que les cartes existantes seront incompatibles avec cette norme. M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 1.1.11 19 Le bus système On appelle bus, le canal permettant de transférer des données entre deux éléments. Le bus système est le canal (pistes de la carte-mère) reliant le microprocesseur à la mémoire vive du système. Un bus est caractérisé par sa largeur, c’est-à-dire le nombre de bits pouvant être simultanément transmis, et par sa fréquence, c’est-à-dire la cadence à laquelle les paquets de bits peuvent être transmis. Des caractéristiques du bus système dépendent donc les caractéristiques générales du système. La fréquence du microprocesseur est égale à la fréquence du bus système multiplié par un facteur. Ainsi un PC tournant à 400 Mhz sera plus rapide s’il est basé sur un bus système cadencé à 133 Mhz (3 x 133 Mhz) que si la carte-mère a un bus dont la fréquence est 100 Mhz (la fréquence du processeur étant alors égale à 4 x 100 Mhz). 1.2 1.2.1 Qu’est-ce qu’un processeur ? le processeur Le processeur (CPU : Central Processing Unit) est un circuit électronique cadencée au rythme d’une horloge interne, c’est-à-dire un élément qui envoie des impulsions (que l’on appelle top). A chaque top d’horloge les éléments de l’ordinateur accomplissent une action. La vitesse de cette horloge (le nombre de battements par secondes) s’exprime en Mégahertz, ainsi un ordinateur à 200Mhz a donc une horloge envoyant 200,000,000 de battements par seconde (un cristal de quartz soumis à un courant électrique permet d’envoyer des impulsions à une fréquence précise). A chaque top d’horloge (pour les instuctions simples) le processeur : B lit l’instruction à exécuter en mémoire B effectue l’instruction B passe à l’instruction suivante Le processeur est en fait constitué : B d’une unité de commande qui lit les instructions et les décode B d’une unité de traitement (UAL - unité arithmétique et logique) qui exécute les instructions. Lorsque tous les éléments d’un processeur sont regroupés sur une même puce, on parle alors de microprocesseur. 1.2.2 A quoi ressemble une instruction ? Les instructions (opération que le processeur doit accomplir) sont stockées dans la mémoire principale. Une instruction est composée de deux champs : B le code opération : c’est l’action que le processeur doit accomplir B le code opérande : c’est les paramètres de l’action. Le code opérande dépend de l’opération, cela peut être une donnée ou bien une adresse d’un emplacement mémoire Une instruction peut être codée sur un nombre d’octets variant de 1 à 4 suivant le type de données. 1.2.3 Les registres Lorsque le processeur traite des donnés (lorsqu’il exécute des instructions) le processeur stocke temporairement les données dans de petites mémoires de 8, 16 ou 32Ko (qui ont l’avantage Yann MORÈRE M.S.T. Télécom 1re Année 20 Cours de Système d’Exploitation UNIX d’être très rapides) que l’on appelle registres. Suivant le type de processeur le nombre de registres peut varier entre une dizaine et plusieurs centaines. Les registres les plus importants sont : B le registre accumulateur : il permet de stocker les résultats des opérations arithmétiques et logiques B le registre tampon : il permet de stocker temporairement une des opérandes B le registre d’état : il permet de stocker les indicateurs B le registre instruction : il contient l’instruction en cours de traitement B le compteur ordinal : il contient l’adresse de la prochaine instruction à traiter B le registre tampon : il permet de stocker temporairement une donnée provenant de la mémoire 1.2.4 les signaux de commande Les signaux de commande sont des signaux électriques qui permettent au processeur de communiquer avec le reste du système (le signal Read/Write - lecture/écriture - permet notamment de signaler à la mémoire qu’il désire lire ou écrire une information. 1.2.5 Qu’est-ce qu’un microprocesseur ? Le premier microprocesseur (Intel 4004) a été inventé en 1971. Fig. 1.3 – Processeur Intel 4004 Depuis, la puissance des microprocesseurs augmente exponentiellement. Quels sont donc ces petits morceaux de silicium qui dirigent nos ordinateurs ? Le processeur (CPU) est le cerveau de l’ordinateur, c’est lui qui coordonne le reste des éléments, il se charge des calculs, bref il exécute les instructions qui ont été programmées. Toutes ces opérations sont des informations numériques. Les microprocesseurs utilisent des petits transistors (équivalents transistors) pour faire des opérations de base ; il y en a plusieurs millions sur un seul processeur. M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 21 Fig. 1.4 – Cœur d’un processeur Les éléments principaux d’un microprocesseur sont : B Une horloge qui rythme le processeur. A chaque TOP d’horloge le processeur effectue une instruction, ainsi plus l’horloge a une fréquence élevée, plus le processeur effectue d’instructions par seconde (MIPS : Millions d’instruction par seconde). Par exemple un ordinateur ayant une fréquence de 100 Mhz effectue 100 000 000 d’instructions par seconde B Une unité de gestion des bus qui gère les flux d’informations entrant et sortant B Une unité d’instruction qui lit les données arrivant, les décode puis les envoie à l’unité d’exécution. B Une unité d’exécution qui accomplit les tâches que lui a donné l’unité d’instruction. Fig. 1.5 – Processeur Intel Pentium Le processeur travaille en fait grâce à un nombre très limité de fonctions (ET logique, Ou logique, addition ...), celles-ci sont directement câblées sur les circuits électroniques. Il est impossible de mettre toutes les instructions sur un processeur car celui-ci est limité par la taille de la gravure, ainsi pour mettre plus d’instructions il faudrait un processeur ayant une très grande surface, or Yann MORÈRE M.S.T. Télécom 1re Année 22 Cours de Système d’Exploitation UNIX le processeur est constitué de silicium et le silicium coûte cher, d’autre part il chauffe beaucoup. Le processeur traite donc les informations compliquées à l’aide d’instructions simples. 1.2.6 Le parallelisme Le parallèlisme consiste à exécuter simultanément sur des processeurs différents des instructions relatives à un même programme. Cela se traduit par le découpage d’un programme en plusieurs processus qui seront traités par des processeurs différents dans le but de gagner en temps d’exécution. Cela nécessite toutefois une communication entre les différents processus. C’est le même principe de fonctionnement que dans une entreprise : le travail est divisé en petits processus traités par des services différents et qui ne servent à rien si la communication entre les services ne fonctionne pas (ce qui est généralement le cas dans les entreprises...). 1.2.7 Le pipelining Le pipelining est un principe simple à comprendre. Un programme comporte généralement des portions de code (plus ou moins grandes) qui sont traitées de nombreuses fois par le processeur. Dans les technologies n’utilisant pas le pipelining, le microprocesseur doit effectuer l’instruction, puis aller chercher la suivante, ce qui utilise deux cycles d’horloge. Le pipelining permet de mettre à disposition du microprocesseur les instructions qu’il va devoir effectuer. Les instruction font la ”file” (c’est ce que l’on nomme le pipeline) dans la mémoire cache. Ainsi, pendant que le microprocesseur execute une instruction, la suivante est déjà à sa disposition. Le pipelining permet donc d’économiser un cycle d’horloge ! 1.2.8 L’architecture CISC L’architecture CISC (Complex Instruction Set Computer, ce qui signifie ”ordinateur avec jeu d’instructions complexes”) est utilisée par tous les processeurs de type x86, c’est-à-dire les processeurs fabriqués par Intel, AMD, Cyrix, ... Les processeurs basés sur l’architecture CISC peuvent traiter des instructions complexes, qui sont directement câblées sur leurs circuits électroniques, c’est-à-dire que certaines instructions difficiles à créer à partir des instructions de base sont directement imprimées sur le silicium de la puce afin de gagner en rapidité d’exécution sur ces commandes. L’inconvénient de ce type d’architecture provient justement du fait que des fonctions supplémentaires sont imprimées sur le silicium, d’où un coût élevé. D’autre part, les instructions sont de longueurs variables et peuvent parfois prendre plus d’un cycle d’horloge ce qui les rend lentes à l’exécution étant donné qu’un processeur basé sur l’architecture CISC ne peut traı̂ter qu’une instruction à la fois ! 1.2.9 L’architecture RISC Contrairement à l’architecture CISC, un processeur utilisant la technologie RISC (Reduced Instruction Set Computer, dont la traduction est ”ordinateur à jeu d’instructions réduit”) n’a pas de fonctions supplémentaires câblées. Cela impose donc des programmes ayant des instructions simples interprétables par le processeur. Cela se traduit par une programmation plus difficile et un compilateur plus puissant. Cependant vous vous dı̂tes qu’il peut exister des instructions M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 23 qui ne peuvent pas être décrites à partir des instructions simples... En fait ces instructions sont tellement peu nombreuses qu’il est possible de les câbler directement sur le circuit imprimé sans alourdir de manière dramatique leur fabrication. L’avantage d’une telle architecture est bien évidemment le coût réduit au niveau de la fabrication des processeurs l’utilisant. De plus, les instructions, étant simples, sont exécutées en un cycle d’horloge, ce qui rend l’exécution des programmes plus rapides qu’avec des processeurs basés sur une architecture CISC. De plus, de tels processeurs sont capables de traı̂ter plusieurs instructions simultanément en les traitant en parallèle. 1.2.10 CISC ou RISC A comparer les spécificités des deux types d’architecture on pourrait conclure que les processeurs basé sur une architecture de type RISC sont les plus utilisés... Cela n’est malheureusement pas le cas... En effet les ordinateurs construits autour d’une architecture RISC nécessitent une quantité de mémoire plus importante que les ordinateurs de type CISC 1.3 Rôle de la mémoire vive (RAM) La mémoire vive, généralement appelée RAM (Random Access Memory, traduisez mémoire à accès aléatoire), est la mémoire principale du système, c’est-à-dire qu’il s’agit d’un espace permettant de stocker de manière temporaire des données lors de l’exécution d’un programme. En effet le stockage de données dans la mémoire vive est temporaire, contrairement au stockage de données sur une mémoire de masse telle que le disque dur (mémoire avec laquelle les novices la confondent généralement), car elle permet uniquement de stocker des données tant qu’elle est alimentée électriquement. Ainsi, à chaque fois que l’ordinateur est éteint, toutes les données présentes en mémoire sont irrémédiablement effacées. La mémoire morte, appelée ROM pour Read Only Memory (traduisez mémoire en lecture seule) est un type de mémoire permettant de conserver les informations qui y sont contenues même lorsque la mémoire n’est plus alimentée électriquement. A la base ce type de mémoire ne peut être accédée qu’en lecture. Toutefois il est désormais possible d’enregistrer des informations dans certaines mémoires de type ROM. 1.3.1 Fonctionnement de la mémoire vive La mémoire vive est constituée de centaines de milliers de petits condensateurs emmagasinant des charges. Lorsqu’il est chargé, l’état logique du condensateur est égal à 1, dans le cas contraire il est à 0, ce qui signifie que chaque condensateur représente un bit de la mémoire. Etant donné que les condensateurs se déchargent, il faut constamment les recharger (le terme exact est rafraı̂chir ) à un intervalle de temps régulier appelé cycle de rafraı̂chissement (d’une durée d’environ 15 nanosecondes (ns) pour une mémoire DRAM). Chaque condensateur est couplé à un transistor (de type MOS ) permettant de ”récupérer” ou de modifier l’état du condensateur. Ces transistors sont rangés sous forme de tableau (matrice), c’est-à-dire que l’on accède à une ”case mémoire” (aussi appelée point mémoire) par une ligne et une colonne. Yann MORÈRE M.S.T. Télécom 1re Année 24 Cours de Système d’Exploitation UNIX Fig. 1.6 – Structure de ma mémoire Chaque point mémoire est donc caractérisé par une adresse, correspondant à un numéro de ligne et un numéro de colonne. Or cet accès n’est pas instantané et s’effecue pendant un délai appelé temps de latence. Par conséquent l’accès à une donnée en mémoire dure un temps égal au temps de cycle auquel il faut ajouter le temps de latence. Ainsi, pour une mémoire de type DRAM, le temps d’accès est de 60 nanosecondes (35ns de délai de cycle et 25ns de temps de latence). Sur un ordinateur, le temps de cycle correspond à l’inverse de la fréquence de l’horloge, par exemple pour un ordinateur cadencé à 200Mhz, le temps de cycle est de 5ns (1/(200.106 )). Par conséquent un ordinateur ayant une fréquence élevée et utilisant des mémoires dont le temps d’accès est beaucoup plus long que le temps de cycle du processeur doit effectuer des cycles d’attente (en anglais wait state) pour accèder à la mémoire. Dans le cas d’un ordinateur cadencé à 200Mhz utilisant des mémoires de types DRAM (dont le temps d’accès est de 60ns), il y a 11 cycles d’attente pour un cycle de transfert. Les performances de l’ordinateur sont d’autant diminuées qu’il y a de cycles d’attentes, il est donc conseillé d’utiliser des mémoires plus rapides. 1.3.2 La correction d’erreurs Certaines mémoires possèdent des mécanismes permettant de pallier les erreurs afin de garantir l’intégrité des données qu’elles contiennent. Ce type de mémoire est généralement utilisée sur des systèmes travaillant sur des données critiques, c’est la raison pour laquelle on trouve ce type de mémoire dans les serveurs. 1.3.2.1 Bit de parité Les barrettes avec bit de parité permettent de s’assurer que les données contenues dans la mémoire sont bien celles que l’on désire. Pour ce faire, un des bits de chaque octet stocké en mémoire sert à conserver la somme des bits de données. M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 25 Le bit de parité vaut 0 lorsque la somme des bits de données est impaire et 1 dans le cas contraire. De cette façon les barrettes avec bit de parité permettent de vérifier l’intégrité des données mais ne permettent pas de corriger les erreurs. De plus pour 8 Mo de mémoire, seulement 7 serviront à stocker des données, dans la mesure où le dernier mégaoctet conservera les bits de parité. 1.3.2.2 Barrettes ECC Les barrettes de mémoire ECC (Error Correction Coding) sont des mémoires possédant plusieurs bits dédiés à la correction d’erreur (on les appelle ainsi bits de contrôle). Ces barrettes, utilisées principalement dans les serveurs, permettent de détecter les erreurs et de les corriger. 1.3.3 Types de barrettes de mémoire vive Il existe de nombreux types de mémoires vives. Celles-ci se présentent toutes sous la forme de barrettes de mémoire enfichables sur la carte-mère. Les premières mémoires se présentaient sous la forme de puces appelées DIP (Dual Inline Package). Désormais les mémoires se trouvent généralement sous la forme de barrettes, c’està-dire des cartes enfichables dans des connecteurs prévus à cet effet. On distingue deux types de barrettes de RAM : B les barrettes au format SIMM (Single Inline Memory Module) : il s’agit de circuits imprimés dont une des faces possède des puces de mémoire. Il existe deux types de barrettes SIMM, selon le nombre de connecteurs : . Les barrettes SIMM à 30 connecteurs (dont les dimensions sont 89x13mm) sont des mémoires 8 bits qui équipaient les premières générations de PC (286, 386). Fig. 1.7 – Mémoire SIMM 30 broches . Les barrettes SIMM à 72 connecteurs (dont les dimensions sont 108x25mm) sont des mémoires capables de gérer 32 bits de données simultanés. Ces mémoires équipent des PC allant du 386DX aux premiers pentiums. Sur ces derniers le processeur travaille avec un bus de données d’une largeur de 64 bits, c’est la raison pour laquelle il faut absolument équiper ces ordinateurs de deux barettes SIMM. Il n’est pas possible d’installer des barettes 30 broches sur des emplacements à 72 connecteurs dans la mesure où un détrompeur (encoche au centre des connecteurs) en empêche l’enfichage. Yann MORÈRE M.S.T. Télécom 1re Année 26 Cours de Système d’Exploitation UNIX Fig. 1.8 – Mémoire SIMM 72 broches B les barrettes au format DIMM (Dual Inline Memory Module) sont des mémoires 64 bits, ce qui explique pourquoi il n’est pas nécessaire de les apparier. Les barrettes DIMM possèdent des puces de mémoire de part et d’autre du circuit imprimé et ont également 84 connecteurs de chaque côté, ce qui les dote d’un total de 168 broches. En plus de leurs dimensions plus grandes que les barrettes SIMM (130x25mm) ces barrettes possèdent un second détrompeur pour éviter la confusion. Fig. 1.9 – Mémoire DIMM À noter que les connecteurs DIMM ont été améliorés afin de permettre une insertion facile des barettes grâce à des leviers situés de part et d’autre du connecteur. 1.3.3.1 DRAM PM La DRAM (Dynamic RAM, RAM dynamique) est le type de mémoire le plus répandu au début du millénaire. Il s’agit d’une mémoire dont les transistors sont rangés dans une matrice selon des lignes et des colonnes. Un transistor, couplé à un condensateur donne l’information d’un bit. 1 octet comprenant 8 bits, une barrette de mémoire DRAM de 256 Mo contiendra donc 256000000*8 bits soit 2 048 000 000 (256000000*8) transistors. Ce sont des mémoires dont le temps d’accès est de 60ns. D’autre part, les accès mémoire se font généralement sur des données rangées consécutivement en mémoire. Ainsi le mode d’accès en rafale (burst mode) permet d’accèder aux trois données consécutives à la première sans temps de latence supplémentaire. Dans ce mode en rafales, le temps d’accès à la première donnée est égale au temps de cycle auquel il faut ajouter le temps de latence, et le temps d’accès aux trois autres données est uniquement égal aux temps de cycle, on note donc sous la forme X-Y-Y-Y les quatre temps d’accès, par exemple la notation 5-3-3-3 indique une mémoire pour laquelle 5 cycles d’horloge sont nécessaires pour accéder à la première donnée et 3 pour les suivantes. M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 1.3.3.2 27 DRAM FPM Pour accélérer les accès à la DRAM, il existe une technique, appelée pagination consistant à accèder à des données situées sur une même colonne en modifiant uniquement l’adresse de la ligne, ce qui permet d’éviter la répétition du numéro de colonne entre la lecture de chacune des lignes. On parle alors de DRAM FPM (Fast Page Mode). La FPM permet d’obtenir des temps d’accès de l’ordre de 70 à 80 nanosecondes pour une fréquence de fonctionnement pouvant aller de 25 à 33 Mhz. 1.3.3.3 DRAM EDO La DRAM EDO (Extended Data Out, soit Sortie des données amélioré parfois également appelé ”hyper-page”) est apparue en 1995. La technique utilisée avec ce type de mémoire consiste à adresser la colonne suivante pendant la lecture des données d’une colonne. Cela crée un chevauchement des accès permettant de gagner du temps sur chaque cycle. Le temps d’accès à la mémoire EDO est donc d’environ 50 à 60 nanosecondes pour une fréquence de fonctionnement allant de 33 à 66 Mhz. Ainsi, la RAM EDO, lorsqu’elle est utilisée en mode rafale permet d’obtenir des cycles de la forme 5-2-2-2, soit un gain de 4 cycles sur l’accès à 4 données. Dans la mesure où la mémoire EDO n’acceptait pas des fréquences supérieures à 66 Mhz, elle a disparu au bénéfice de la SDRAM. 1.3.3.4 SDRAM La SDRAM (Synchronous DRAM, traduisez RAM synchrone), apparue en 1997, permet une lecture des données synchronisée avec le bus de la carte-mère, contrairement aux mémoires EDO et FPM (qualifiées d’asynchrones) possèdant leur propre horloge. La SDRAM permet donc de s’affranchir des temps d’attente dûs à la synchronisation avec la carte-mère. Celle-ci permet d’obtenir un cycle en mode rafale de la forme 5-1-1-1, c’est-à-dire un gain de 3 cycles par rapport à la RAM EDO. De cette façon la SDRAM est capable de fonctionner avec une cadence allant jusqu’à 150Mhz, lui permettant d’obtenir des temps d’accès d’environ 10ns. 1.3.3.5 DDR-SDRAM La DDR-SDRAM (Double Data Rate SDRAM ) est une mémoire basée sur la technologie SDRAM, permettant de doubler le taux de transfert de la SDRAM à fréquence égale. 1.3.3.6 DR-SDRAM (Rambus DRAM) La DR-SDRAM (Direct Rambus DRAM ou encore RDRAM ) est un type de mémoire permettant de transférer les données sur un bus de 16 bits de largeur à une cadence de 800Mhz, ce qui lui confère une bande passante de 1,6 Go/s. Comme la SDRAM, ce type de mémoire est synchronisé avec l’horloge du bus pour améliorer les échanges de données. En contrepartie, la mémoire RAMBUS est une technologie propriétaire, ce qui signifie que toute entreprise désirant contruire des barrettes de RAM selon cette technologie doit reverser des droits (royalties) aux sociétés RAMBUS et Intel. La DDR-SDRAM est une évolution de cette bonne vieille SDRAM. Au niveau logique, la différence est minime d’où un coût de production réduit. La grosse différence se situe sur le Yann MORÈRE M.S.T. Télécom 1re Année 28 Cours de Système d’Exploitation UNIX principe même de la DDR, puisqu’à chaque cycle d’horloge, une barrette de DDR peut envoyer deux mots de 64 bits (en utilisant à la fois le front montant et le front descendant), contre un seul pour une barrette de SDRAM classique. D’un point de vue physique, il s’agit de modules de type DIMM 184 pins alimentés en 2.5V. Développé par Rambus, la RDRAM n’utilise qu’un bus 16 bits DDR, contre 64 bits DDR pour la DDR-SDRAM. Ce désavantage est toutefois compensé par une fréquence de fonctionnement bien plus importante, puisqu’on atteint 400 MHz avec le standard actuel, contre 133 MHz pour le standard actuel en DDR. Autre avantage de poids en terme de bande passante : le chipset i850 pour P4 ne la gère que sur deux canaux (2 ou 4 barrettes donc), ce qui double la bande passante. Bien entendu cela est également possible avec de la DDR-SDRAM, comme sur le nForce de NVIDIA, mais aucun chipset P4 ne le gère pour le moment (ce sera le cas au second semestre). Il est à noter que du fait de son architecture qui utilise un bus série et non pas parallèle, la RDRAM a tendance à avoir des temps d’accès supérieurs à la DDR-SDRAM. Il est à noter qu’un nouveau type de barrette a récemment été annoncé, les PC4200. Ces barrettes, qui seront notamment supportée par une future carte mère ASUSTeK (P4T533) gèrent directement les deux canaux RDRAM de l’i850 et offrent donc une bande passante similaire à deux barrettes standard. Par contrer, les utiliser par paire n’augmente bien entendu plus la bande passante. Le gros désavantage de la RDRAM se situe au niveau du prix, qui est du au fait que ce soit une technologie propriétaire ainsi qu’au coût de production lié à la fréquence de fonctionnement. Même après la forte hausse connue sur la DDR, une barrette de RDRAM PC800 est tout de même 50% plus chère qu’une autre de DDR PC2100. Bien entendu les PC2700 et PC3200 sont plus chères, et il faudra donc voir ce qui en est des performances avant d’en tirer des conclusions. Voici à l’heure actuelle les différents types de DDR-SDRAM et de RDRAM qui sont présents sur le marché ou qui vont l’être dans les mois qui viennent : Puces DDR266 DDR333 DDR400 RDRAM400 RDRAM533 RDRAM400 Barettes PC2100 PC2700 PC3200 2x PC800 2x PC1066 PC4200 Fréquences 133 MHz 166 MHz 200 MHz 400 MHz 533 MHz 533 MHz Bus 64 bits 64 bits 64 bits 16 bits 16 bits 16 bits DDR DDR DDR DDR DDR DDR Débit 2,1 Go/s 2,7 Go/s 3,2 Go/s 3,2 Go/s 4,2 Go/s 4,2 Go/s * 1er calcul fait avec l’équivalence 1 Ko = 1000 octets et second avec 1 Ko = 1024 octets Comme vous pouvez le voir, l’ultime évolution de la DDR 1ère génération, la DDR400, parvient à atteindre la même bande passante que la PC800 sur deux canaux. La RDRAM confirme son avantage en terme de bande passante à l’aide des barrettes de RDRAM PC1066 et PC4200. Bien entendu, la bande passante théorique est une chose ... mais ce qui nous incombe le plus se sont les performances en pratique ! 1.4 La mémoire morte (ROM) Il existe un type de mémoire permettant de stocker des données en l’absence de courant électrique, il s’agit de la ROM (Read Only Memory, dont la traduction est mémoire en lecture M.S.T. Télécom 1re Année 5 octobre 2003 2,0 2,5 3,0 3,0 4,0 4,0 Go/s Go/s Go/s Go/s Go/s Go/s Cours de Système d’Exploitation UNIX 29 seule) appelée parfois mémoire non volatile, car elle ne s’efface pas lors de la mise hors tension du système. Ce type de mémoire permet notamment de conserver les données nécessaires au démarrage de l’ordinateur En effet, ces informations ne peuvent être stockées sur le disque dur étant donné que les paramètres du disque (essentiels à son initialisation) font partie de ces données vitales à l’amorçage. Différentes mémoires de type ROM contiennent des données essentielles au démarrage, c’est-àdire : B Le BIOS est un programme permettant de piloter les interfaces d’entrée-sortie principales du système, d’où le nom de BIOS ROM donné parfois à la puce de mémoire morte de la carte-mère qui l’héberge B Le chargeur d’amorce : un programme permettant de charger le système d’exploitation en mémoire (vive) et de le lancer. Celui-ci cherche généralement le système d’exploitation sur le lecteur de disquette, puis sur le disque dur, ce qui permet de pouvoir lancer le système d’exploitation à partir d’une disquette système en cas de dysfonctionnement du système installé sur le disque dur B Le Setup CMOS, c’est l’écran disponible à l’allumage de l’ordinateur permettant de modifier les paramètres du système (souvent appelé BIOS à tort...) B Le Power-On Self Test (POST ), programme exécuté automatiquement à lamorçage du système permettant de faire un test du système (c’est pour cela par exemple que vous voyez le système ”compter” la RAM au démarrage) Etant donné que les ROM sont beaucoup plus lentes que les mémoires de types RAM (une ROM a un temps d’accès de l’ordre de 150 ns tandis qu’une mémoire de type SDRAM a un temps d’accès d’environ 10 ns), les instructions contenues dans la ROM sont parfois copiées en RAM au démarrage, on parle alors de shadowing (en français cela pourrait se traduire par ombrage, mais on parle généralement de mémoire fantôme). 1.4.1 Les types de ROM Les ROM ont petit à petit évoluées de mémoires mortes figées à des mémoires programmables, puis reprogrammables. 1.4.1.1 ROM Les premières ROM étaient fabriquées à l’aide d’un procédé inscrivant directement les données binaires dans une plaque de silicium grâce à un masque. Ce procédé est maintenant obsolète. 1.4.1.2 PROM Les PROM (Programmable Read Only Memory) ont été mises au point à la fin des années 70 par la firme Texas Instruments. Ces mémoires sont des puces constituées de milliers de fusibles pouvant être ”grillés” grâce à un appareil appelé programmateur de ROM, envoyant un fort courant (12V) dans certains fusibles. Ainsi, les fusibles grillées correspondent à des 0, les autres à des 1. Yann MORÈRE M.S.T. Télécom 1re Année 30 1.4.1.3 Cours de Système d’Exploitation UNIX EPROM Les EPROM (Erasable Programmable Read Only Memory) sont des PROM pouvant être effacées. Ces puces possèdent une vitre permettant de laisser passer des rayons ultra-violets. Lorsque la puce est en présence de rayons ultra-violets d’une certaine longueur d’onde, les fusibles sont reconstitués, c’est-à-dire que tous les bits de la mémoire sont à nouveau à 1. C’est pour cette raison que l’on qualifie ce type de PROM d’effaçable. 1.4.1.4 EEPROM Les EEPROM (Electrically Erasable read Only Memory) sont aussi des PROM effaçables, mais contrairement aux EPROM, celles-ci peuvent être effacées par un simple courant électrique, c’est-à-dire qu’elle peuvent être effacées même lorsqu’elles sont en position dans l’ordinateur. Ces mémoires sont aussi appelées mémoires flash (ou ROM flash), et l’on qualifie de flashage l’action consistant à reprogrammer une EEPROM. 1.5 Le rôle du disque dur Le disque dur est l’organe du PC servant à conserver les données de manière permanente, contrairement à la RAM, qui s’efface à chaque redémarrage de l’ordinateur. Il a été inventé au début des années 50 par IBM. 1.5.1 Le fonctionnement interne Un disque dur est constitué non pas d’un seul disque, mais de plusieurs disques rigides (en anglais hard disk signifie disque dur ) en métal, en verre ou en céramiques empilés les uns après les autres à une très faible distance les uns des autres. Ils tournent très rapidement autour d’un axe (à plusieurs milliers de tours par minute actuellement) dans le sens inverse des aiguilles d’une montre. Un ordinateur fonctionne de manière binaire, il faut donc stocker les données sous forme de 0 et de 1, c’est pourquoi les disques sont recouverts d’une très fine couche magnétique de quelques microns d’épaisseur, elle-même recouverte d’un film protecteur. La lecture et l’écriture se font grâce à des têtes (head) situées de part et d’autre de chacun des plateaux (un des disques composant le disque dur). Ces têtes sont des électroaimants qui se baissent et se soulèvent (elles ne sont qu’à quelques microns de la surface, séparées par une couche d’air provquée par la rotation des disques qui crée un vent d’environ 250km/h) pour pouvoir lire l’information ou l’écrire. De plus ces têtes peuvent balayer latéralement la surface du disque pour pouvoir accéder à toute la surface... M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 31 Fig. 1.10 – Structure d’un disque dur Cependant, les têtes sont liées entre-elles et seulement une seule tête peut lire ou écrire à un moment donné. On parle donc de cylindre pour pour désigner l’ensemble des données stockées verticalement sur la totalité des disques. L’ensemble de cette mécanique de précision est contenue dans un boitier totalement hermétique, car la moindreparticule peut détériorer l’état de surface du disque. Vous pouvez donc voir sur un disque des opercules permettant l’étanchéité, et la mention ”Warranty void if removed ” qui signifie littéralement ”la garantie expire si retiré” car seul les constructeurs de disques durs peuvent les ouvrir (dans des salles blanches : exemptes de particules). 1.5.2 La lecture et l’écriture Les têtes de lecture/écriture sont dites ”inductives”, c’est-à-dire qu’elles sont capables de générer un champ magnétique. C’est notamment le cas lors de l’écriture, les têtes en créant des champs positifs ou négatifs viennent polariser la surface du disque en une très petite zone, ce qui se traduira lors du passage en lecture par des changements de polarité induisant un courant dans la tête qui sera ensuite transformer par un convertisseur analogique numérique (CAN) en 0 et en 1 compréhensibles par l’ordinateur. Les têtes commencent à inscrire des données à la périphérie du disque (piste 0), puis avancent vers le centre. Les données sont organisées en cercles concentriques appelés ”pistes”, créées par le formatage de bas niveau. Yann MORÈRE M.S.T. Télécom 1re Année 32 Cours de Système d’Exploitation UNIX Fig. 1.11 – Notion de Piste Les pistes sont séparées en quartiers (entre deux rayons) que l’on appelle secteurs, c’est la zone dans laquelle on peut stocker les données (512 octets en général). Fig. 1.12 – Notion de secteur On appelle cylindre l’ensemble des données situées sur une même pistes de plateaux différents (c’est-à-dire à la verticale les unes des autres) car cela forme dans l’espace un ”cylindre” de données. Fig. 1.13 – Notion de cylindre On appelle cluster la zone minimale que peut occuper un fichier sur le disque. En effet le système d’exploitation exploite des blocs qui sont en fait plusieurs secteurs (entre 1 et 16 secteurs). Un fichier minuscule devra donc occuper plusieurs secteurs (un cluster). 1.5.3 Le mode bloc des disques durs Le mode bloc et le tranfert 32 bits permettent d’exploiter pleinement les performances de votre disque dur. Le mode bloc consiste à effectuer des transferts de données par bloc, c’est-à-dire par paquets de 512 octets généralement, ce qui évite au processeur d’avoir à traiter une multitude de M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 33 minuscules paquets d’un bit. Le processeur a alors du ”temps” pour effectuer d’autres opérations. Ce mode de transfert des données n’amalheureusement une véritable utilité que sous DOS car Windows 95 et Windows NT utilisent leur propres gestionnaires de disque dur, ce qui rend ce gestionnaire obsolète. Une option du BIOS (IDE HDD block mode ou Multi Sector Transfer, ...) permet parfois de déterminer le nombre de blocs pouvant être gérés simultanément. Ce nombre se situe entre 2 et 32. Si vous ne le connaissez pas, plusieurs solutions s’offrent à vous : B consulter la documentation de votre disque dur B rechercher les caractéristiques de votre disque sur Internet B Le déterminer expérimentalement en effectuant des tests : . exécuter scandisk sur votre ordinateur pour éliminer les erreurs . augmenter progressivement le nombre de blocs puis faire une copie et lancer scandisk . Si des erreurs apparaissent remettre la valeur précédente...sinon continuer Le mode bloc peut toutefois générer des erreurs sous Windows 3.1 (à cause d’une redondance de gestionnaire de disque dur) ou bien lors d’un gravage de CD (le tampon se vide).* La solution consiste alors à désactiver l’un des deux gestionnaires : B la gestion logicielle du mode 32-bit sous Windows B le mode bloc dans le BIOS 1.5.4 Le mode 32 bits des disques durs Le mode 32 bits (par opposition au mode 16 bits) est caractérisé par un transfert des données sur 32 bits (Rappel : un ordinateur fonctionne avec des données binaires, c’est-à-dire avec des zéros ou des 1, schématiquement une porte qui s’ouvre ou bien qui se ferme. Le tranfert sur 32 bits correspond à 32 portes qui s’ouvrent et se ferment simultanément. En mode 16 bits on a deux mots (ensemble de bits) de 16 bits qui sont transmis successivement, puis assemblés). Le gain de performance relatif au passage du mode 16 bits au mode 32 bits (pour les disques durs) est généralement insignifiant. Quoi qu’il en soit il n’est la plupart du temps plus possible de choisir le mode, car la carte-mère dértermine seule le type de mode à adopter en fonction du type de disque dur branché sur l’interface E-IDE. La détermination automatique du mode 32 bits peut toutefois ralentir les lecteurs de CD-ROM IDE dont la vitesse est supérieure à 24x lorsqu’ils sont seuls sur une nappe IDE. En effet, dans le cas où le lecteur de CD-ROM est seul sur le port, le BIOS peut ne pas détecter sa compatibilité avec le mode 32 bits (puisqu’il cherche un disque dur) auquel cas il passe en mode 16 bits. Le taux de transfert est alors en dessous du taux de transfert annoncé par le constructeur d’où une grande déception de son possesseur... Heureusement, il existe une solution : brancher sur la même nappe que le lecteur de CD-ROM un disque dur supportant le mode 32 bits, ce qui aura pour effet d’activer le mode . 1.5.5 L’interface SCSI L’interface SCSI est une interface qui permet la prise en charge d’un nombre important d’unités (disques durs, CD-ROM, Graveur, scanner, ...), c’est-à-dire plus d’une dizaine simultanément. Elle est beaucoup utilisée pour sa stabilité notamment au niveau du taux de transfert. En effet, c’est un adaptateur SCSI (carte adaptatrice sur un emplacement PCI ou ISA ou bien directement intégré sur la carte-mère pour les configurations haut de gamme) qui se charge de la gestion et du transfert des données avec un microprocesseur dédié. Le microprocesseur Yann MORÈRE M.S.T. Télécom 1re Année 34 Cours de Système d’Exploitation UNIX central est alors relégué de ses activités concernant le flux de données, il ne communique qu’avec la carte SCSI. Ainsi chaque contrôleur SCSI a ses propres caractéristiques (fréquence, ...), le BIOS n’a donc aucune influence sur les performances de l’interface SCSI étant donné qu’elle possède elle-même son propre BIOS. Il est toutefois possible d’optimiser cette interface en faisant évoluer le BIOS de la carte SCSI. 1.5.6 Le serial ATA Dans les débuts de la micro-informatique, on pratiquait essentiellement l’interface série, considérée comme la plus simple à réaliser. C’est ainsi que l’on reliait les claviers et les imprimantes aux machines. La vitesse de transfert de l’information augmentant, l’interface parallèle s’imposa, qu’il s’agisse de l’imprimante, du disque dur ou du lecteur de CD-ROM. Les sorties série des PC furent de plus en plus réservées aux périphériques dotés de performances modestes : clavier, track-ball, douchette (lecteur de codes-barres), etc. La fréquence de fonctionnement des composants s’élevant sans cesse, et les vitesses de transfert augmentant toujours, l’interface série fait un retour en force pour des raisons techniques (problème de synchronisation des signaux propagés en parallèle). On la trouve dans l’USB (versions 1 et 2) pour connecter les périphériques externes, dans le FireWire (nom commercial de IEEE 1394) pour relier les caméscopes numériques et les disques durs externes aux ordinateurs, et dans le FibreChannel pour déporter les dispositifs de stockage externe et créer un SAN (Storage Area Network). Il n’est donc pas surprenant qu’on la trouve demain dans la nouvelle interface ATA (SATA), et après-demain (vers 2004) dans la nouvelle mouture de l’interface SCSI, appelée Serial Attached SCSI – SAS en abrégé. A l’heure où nous écrivons ces lignes (avril 2003), on ne trouve pas encore sur le marché de micro-ordinateur utilisant l’interface Serial ATA, encore appelée SATA. Mais quelques modèles de disque dur et de carte-mère sont disponibles, ce qui permet aux spécialistes de se faire la main. Des études peu nombreuses, mais bien documentées, ont déjà été publiées sur le web, dont celle de Tom’s Hardware Guide (12 août 2002), et celle plus récente de The Tech Report (19 mars 2003). Il en ressort que, pour l’instant, ouvrir son porte-monnaie pour s’offrir le Serial ATA ne sert à rien – si ce n’est à dire que l’on s’est mis à jour avant les autres, et que l’on fait partie des pionniers (bref, que l’on est ”tech savvy”). C’est pourquoi les pages web – encore rares – qui traitent de la nouvelle interface, mentionnent principalement ses avantages secondaires (voir par exemple Explosive Labs) : B les câbles sont beaucoup plus minces, les connecteurs plus petits. Ils sont plus faciles à monter, ils prennent moins de place dans la machine, la ventilation se fait mieux ; B il n’y a plus de cavalier à installer ou de micro-interrupteur (dip) à basculer pour déclarer le périphérique comme maı̂tre ou comme esclave ; B les disques durs peuvent être connectés et déconnectés sans arrêter l’ordinateur (hot plug) ; B la longueur maximale du câble (entre carte-mère et disque) est plus grande (1 m contre 0,6 m) ; B les connecteurs sont plus petits et plus faciles à utiliser (blind mate) ; B des adaptateurs arrivent sur le marché, qui permettent d’utiliser les anciens disques durs avec les nouvelles cartes-mères (l’inverse ne sera sans doute pas possible). M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 1.5.6.1 35 Serial ATA Les premiers micro-ordinateurs équipés en standard de la nouvelle interface Serial ATA doivent faire leur apparition sur le marché à la fin de l’année 2003. Il faudra sans doute 1-2 ans pour que cette nouvelle interface s’impose à la totalité des machines. 1.5.6.2 Serial Attached SCSI De parallèle, l’interface SCSI va, à son tour, devenir série et, par la même occasion, compatible avec le Serial ATA. Les premiers matériels ne sont pas attendus sur le marché avant 2004. 1.5.6.3 L’avenir A en croire les constructeurs, les premiers micro-ordinateurs utilisant la nouvelle interface Serial ATA devraient faire leur apparition sur le marché vers la fin de l’année en cours (2003). Il s’agira, dans un premier temps, des modèles haut de gamme uniquement. La présence de cette nouveauté sera sans doute utilisée comme argument pour essayer de réveiller un marché qui est en croissance lente. Les fabricants de disques durs ne s’attendent pas à recevoir des commandes conséquentes avant le début de l’année 2004. En effet, il faudra compter un à deux ans pour que la nouvelle interface se répande dans toute la gamme des PC. Comme nous l’avons déjà signalé, l’ATA est utilisé pour les PC, et le SCSI pour les serveurs et les stations de travail. Il n’y a pas de raison pour que le passage de l’ATA d’une interface parallèle à une interface série modifie cette situation, parce que le SCSI deviendra bientôt, lui aussi, une interface série (Serial Attached SCSI) ; les premières réalisations sont attendus sur le marché en 2004 au plus tôt. Ce nouveau SCSI devrait posséder toutes les propriétés de l’ancien. De plus, il devrait être compatible avec le Serial ATA, ce qui facilitera la cohabitation de disques SATA et SAS sur la même machine. 1.5.7 Les caractéristiques du disque Le taux de transfert est la quantité de données qui peuvent être lues ou écrites sur le disque en un temps donné. Il s’exprime aujourd’hui en Méga-Octets par seconde Le temps de latence (aussi appelé délai rotationnel) représente le temps entre lequel le disque a trouvé la piste et où il trouve les données. Le temps d’accès est le temps que met la tête pour aller d’une piste à la piste suivante (elle doit être la plus petite possible). Le temps d’accès moyen est le temps que met le disque entre le moment où il a reçu l’ordre de fournir des données et le moment où il les fournit réellement. La densité radiale est le nombre de pistes par pouce (tpi : Track per Inch) La densité linéaire est le nombre de bits par pouce sur une piste donnée (bpi : Bit per Inch) La densité surfacique est le rapport de la densité linéaire sur la densité radiale (s’exprime en bit par pouces carré) 1.6 Périphérique interne Sur un PC on peut connecter des périphériques internes. Les périphériques internes sont connectés à l’intérieur du PC, c’est-à-dire sur les ports AGP, PCI, ou ISA de la carte-mère Il s’agit Yann MORÈRE M.S.T. Télécom 1re Année 36 Cours de Système d’Exploitation UNIX principalement : B de la carte vidéo (indispensable) qui permet de fournir l’image au moniteur B de la carte son qui permet d’avoir le son sur le PC B d’un modem interne B de la carte réseau (qui permet d’interconnecter plusieurs ordinateurs) B de cartes TV, Capture d’image, Radio ... 1.6.1 Les cartes accélératrices 2D Les cartes 2D n’ont pas changé de principe depuis leur création. Chaque puce possède de nombreux circuits qui permettent d’exécuter de nombreuses fonctions : B déplacement des blocs (curseur de la souris par exemple) B tracé de lignes B tracé de polygones Ainsi, les performances des cartes 2D n’évoluent plus depuis quelques temps. Leurs performances sont tributaires du type de mémoire utilisée sur la carte (les mémoires SGRAM ou WRAM, mémoires vidéo spécifiques à 10 ns, donnent des résultats bien meilleurs que la mémoire EDO (60 ns)) La fréquence du RAM-DAC (RAM Digital Analogic Converter), ainsi que la quantité de mémoire vidéo ne permettent en rien d’avoir de meilleures performances, elles permettent juste d’avoir un meilleur taux de rafraichissement (nombre d’images par seconde) et de pouvoir accéder à des résolutions plus grandes. 1.6.2 Les cartes accélératrices 3D Le domaine de la 3D est beaucoup plus récent, donc plus porteur. On arrive à des puissances de calculs sur PC supérieures à celles de certaines stations de travail. Le calcul d’une scène 3D est un processus qui se décompose grossièrement en quatre étapes : B le script : mise en place des éléments B la geométry : création d’objets simples B le setup : découpage en triangles 2D B le rendering : C’est le rendu, c’est-à-dire le plaquage des textures Ainsi, plus la carte accéleratrice 3D calcule elle-même ces étapes, plus l’affichage est rapide. Les premières puces n’effectuaient que le rendering, laissant le processeur s’occuper du reste. Depuis, les cartes possèdent un ”setup engine” qui prend en charge les deux dernières étapes. A titre d’exemple, un Pentium II à 266 Mhz qui calcule les trois premières étapes peut calculer 350 000 polygones par secondes, lorsqu’il n’en calcule que deux, il atteint 750 000 polygones par seconde. Cela montre à quel point ces cartes déchargent le processeur. Le type de bus est lui aussi déterminant. Alors que le bus AGP n’apporte aucune amélioration dans le domaine de la 2D, les cartes utilisant ce bus plutôt que le bus PCI sont beaucoup plus performantes. Cela s’explique par le fait que le bus AGP est directement relié à la mémoire vive, ce qui lui offre une bande passante beaucoup plus grande que le bus PCI. Ces produits de haute technologie ont maintenant besoin de la même qualité de fabrication que les processeurs, ainsi que des gravures allant de 0.35 µm à 0.25 µ :m. M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 1.6.3 37 Glossaire des fonctions accélératrices 3D et 2D Terme 2D Graphics Définition Affiche une représentation d’une scène selon 2 axes de référence (x et y) Affiche une représentation d’une scène selon 3 axes de référence (x,y, et 3D Graphics z) Le monde est composé d’objets opaques, translucides et transparents. L’alpha blending est une manière d’ajouter des informations de transparence à des objets translucides. Cela est fait en effectuant un rendu des polygones a travers des masques dont la densité est proportionnelle à la transparence des objets. La couleur du pixel résultant est une comAlpha blending binaison de la couleur du premier plan et de la couleur de l’arrière-plan. L’alpha a généralement une valeur comprise entre 0 et 1 calculée de la manière suivante : nouveau pixel=(alpha)*(couleur du premier pixel)+(1-alpha)*(couleur du second pixel) C’est un canal supplémentaire pour stocker l’information de transparence Alpha buffer (Rouge-Vert-Bleu-Transparence). Anti-aliasing ap- Technique permettant de faire apparaitre les pixels de façon moins crénepelé aussi anti- lée. crénelage) Effets atmosphé- Effets tels que le brouillard ou bien l’effet de distance, qui améliorent le rique rendu d’un environnement. Bitmap Image pixel par pixel Permet de fluidifier le passage d’un pixel d’un endroit à un autre (lors Bilinear filtering d’une rotation par exemple) C’est l’une des fonctions d’accélération les plus importantes, elle permet de simplifier le déplacement d’un bloc de données, en prenant en compte BitBLT les particularités de la mémoire-vidéo. Elle est par exemple utilisée lors du déplacement d’une fenêtre Blending Combinaison de deux images en les ajoutant bit-à-bit Une fonction du bus PCI permettant de recevoir directement des inforBus Mastering mations de la mémoire sans transiter par le processeur Une méthode pour faire du mappage (enveloppage) avec des textures (texture mapping). Elle prend en compte la valeur de Z pour mapper les Correction de polygones. Lorsqu’un objet s’éloigne de l’objectif, il apparaı̂t plus petit perspective en hauteur et en largeur, la correction de perspective consiste à dire que le taux de changement dans les pixels de la texture est proportionnel à la profondeur. Depth Cueing Baisse l’intensité des objets s’éloignant de l’objectif Permet d’archiver des images de qualité 24-bit dans des tampons plus Dithering petits (8 ou 16 bits). Le dithering utilise deux couleurs pour en créer une seule Une méthode utilisant deux tampons, une pour l’affichage, l’autre pour Double buffering le calcul du rendu, ainsi lorsque le rendu est fait les deux tampons sont échangés. Flat shading Assigne une couleur uniforme sur un polygone. L’objet ainsi rendu appaou Constant rait de façon facettisée. shading Utilise la fonction blending pour un objet avec une couleur fixe (plus il Fog s’éloigne de l’objectif, plus cette fonction est utilisée) Yann MORÈRE M.S.T. Télécom 1re Année 38 Cours de Système d’Exploitation UNIX Les caractéristiques d’un affichage utilisant des phosphores sont nonlinéaires : un petit changement de la tension à basse tension crée un changement dans l’affichage au niveau de la brillance, ce même changement Gamma à plus haute tension ne donnera pas la même magnitude de brillance. La différence entre ce qui est attendu et ce qui est mesuré est appelée Gamma Gamma Correc- Avant d’être affichées, les données doivent être corrigées pour compenser tion leGamma Algorithme (portant le nom du français qui l’a inventé) permettant un Gouraud Shalissage des couleurs par interpolation. Il assigne une couleur à chaque ding (lissage pixel d’un polygone en se basant sur une interpolation de ses arêtes, il Gouraud) simule l’apparence de surfaces plastiques ou métalliques. Façon mathématique d régénérer des informations manquantes ou endomInterpolation magées. Lorsqu’on agrandit une image par exemple, les pixels manquants sont régénérés par interpolation. C’est un tampon fait pour mémoriser une ligne vidéo Line Buffer Algorithme (portant le nom du français qui l’a inventé) permettant un lissage des couleurs par interpolation. Il assigne une couleur à chaque Lissage Gouraud pixel d’un polygone en se basant sur une interpolation de ses arêtes, il simule l’apparence de surfaces plastiques ou métalliques. Algorithme (portant le nom de Phong Bui-Tong) permettant un lissage des couleurs en calculant le taux de lumière en de nombreux points d’une Lissage Phong surface, et en changeant la couleur des pixels en fonction de la valeur. Il est plus gourmand en ressources que le lissage Gouraud C’est un mot provenant du latin ”Multum in Parvum” qui signifie ”Plusieurs en un”. Cette méthode permet d’appliquer des textures de difféMIP Mapping rentes résolutions pour des objets d’une même image, selon leur taille et leur distance. Cela permet entre autre de mettre des textures de plus hautes résolutions lorsqu’on se rapporche d’un objet. C’est le fait de réduire un espace en 3-Dimension en un espace en 2Projection Dimension Tranforme une image en pixels Rasterisation Rendu (Rende- C’est le fait de créer des images réalistiques sur un écran en utilisant des ring) modèles mathématiques pour le lissage, les couleurs ... Rendering en- Partie matérielle ou logicielle chargée de calculer les primitives 3D (Généralement des triangles) gine Le fait de calculer des graphiques en 3D peut-être divisé en 3 parties : Tesselation ou la facettisation, la géométrie et le rendu. La facettisation est la partie consistant à découper une surface en plus petites formes, en la découpant facettisation (souvent en triangles ou en quadrilatères) Consiste à stocker des images constituées des pixels (texels), puis à enTexture Mapvelopper des objets 3D de cette texture pour obtenir une représentation ping plus réaliste des objets Tri-linear filte- Basé sur le principe du filtrage bilinéaire, le filtrage trilinéaire consiste à ring faire une moyenne de deux niveaux de filtrage bilinéaire. Partie de la mémoire qui stocke la distance de chaque pixel à l’objectif. Z-buffer Lorsque les objets sont rendus à l’écran, le rendering engine doit supprimer les surfaces cachées. C’est le fait de supprimer les faces cachées en utilisant les valeurs stockées Z-buffering dans le Z-buffer M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 1.6.4 39 Qu’est-ce qu’une carte réseau ? Les cartes réseau (appelées Network Adapter Card en anglais) constituent l’interface entre l’ordinateur et le câble du réseau. La fonction d’une carte réseau et de préparer, d’envoyer et de contrôler les données sur le réseau. Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d’une adresse unique, qui lui permet d’être différenciée de toutes les autres cartes du réseau. Les cartes réseau disposent de paramètres qu’il faut configurer. Parmi eux figurent l’interruption matérielle (IRQ), l’adresse de base du port E/S et l’adresse de base de la mémoire (DMA). Pour garantir la compatibilité entre l’ordinateur et le réseau, la carte doit être adaptée à l’architecture du bus de données de l’ordinateur et avoir le type de connecteur approprié au câblage. Chaque carte est conçue pour s’adapter à un certain type de câble. Certaines cartes comprennent plusieurs connecteurs d’interfaces (à paramétrer soit avec les cavaliers, soit avec les DIP, soit de façon logicielle). NB : Certaines topologies réseau propriétaires utilisant la paire torsadée ont recours au connecteur RJ-11. Ces topologies sont parfois appelées pré-10BaseT. Enfin pour garantir cette compatibilité entre ordinateur et réseau, la carte doit être compatible avec la structure interne de l’ordinateur (architecture du bus de données) et avoir un connecteur adapté à la nature du câblage. 1.6.5 Quel est le rôle de la carte réseau ? Une carte réseau sert d’interface physique entre l’ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l’ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l’ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l’Unité Centrale de l’ordinateur les comprenne. Ainsi une carte réseau est une carte d’extension s’insérant dans un connecteur d’extensions (slot). 1.6.6 La préparation des données Les données se déplacent dans l’ordinateur en empruntant des chemins appelés Bus . Plusieurs chemins côte à côte font que les données se déplacent en parallèle et non en série (les unes à la suite des autres). B Les premiers bus fonctionnaient en 8 bits (8 bits de données transportés à la fois) B L’ordinateur PC/AT d’IBM introduit les premiers bus 16 bits B Aujourd’hui, la plupart des bus fonctionnent en 32 bits Toutefois sur un câble les données circulent en série (un seul flux de bits), en se déplaçant dans un seul sens. L’ordinateur peut envoyer OU recevoir des informations mais il ne peut pas effectuer les deux simultanément. Ainsi, la carte réseau restructure un groupe de données arrivant en parallèle en données circulant en série (1 bit). Pour cela, les signaux numériques sont transformés en signaux électriques ou optiques susceptibles de voyager sur les câbles du réseau. Le dispositif chargé de cette traduction est le Transceiver. Yann MORÈRE M.S.T. Télécom 1re Année 40 1.6.7 Cours de Système d’Exploitation UNIX Le rôle d’identificateur B La carte traduit les données et indique son adresse au reste du réseau afin de pouvoir être distinguée des autres cartes du réseau. B Adresses : définies par l’IEEE (Institute of Electrical and Electronics Engineer) qui attribue des plages d’adresses à chaque fabriquant de cartes réseau. B Elles sont inscrites sur les puces des cartes : procédure appelée Gravure de l’adresse sur la carte . Par conséquent, chaque carte a une adresse UNIQUE sur le réseau. 1.6.8 Les autres fonctions de la carte réseau L’ordinateur et la carte doivent communiquer afin que les données puissent passer de l’un vers l’autre. L’ordinateur affecte ainsi une partie de sa mémoire aux cartes munies d’un Accès Direct à la Mémoire (DMA : Direct Access Memory). La carte indique qu’un autre ordinateur demande des données à l’ordinateur qui la contient. Le bus de l’ordinateur transfère les données depuis la mémoire de l’ordinateur vers la carte réseau. Si les données circulent plus vite que la carte ne peut les traiter, elles sont placées dans la mémoire tampon affectée à la carte (RAM) dans laquelle elles sont stockées temporairement pendant l’émission et la réception des données. 1.6.9 Envoi et contrôle des données Avant que la carte émettrice envoie les données, elle dialogue électroniquement avec la carte réceptrice pour s’accorder sur les points suivants : B Taille maximale des groupes de données à envoyer B Volume de données à envoyer avant confirmation B Intervalles de temps entre les transmissions partielles de données B Délai d’attente avant envoi de la confirmation B Quantité que chaque carte peut contenir avant débordement B Vitesse de transmission des données Si une carte plus récente, donc plus perfectionnée, communique avec une carte plus lente, elles doivent trouver une vitesse de transmission commune. Certaines cartes ont des circuits leur permettant de s’adapter au débit d’une carte plus lente. Il y a donc acceptation et ajustement des paramètres propres à chacune des deux cartes avant émission et réception des données. 1.6.10 Paramètres de configuration de la carte Les cartes réseau sont munies d’options de configuration. Entre autres : B Interruption (IRQ) : Dans la plupart des cas, ce sont les IRQ 3 et 5 qui sont attribués aux cartes réseau. L’IRQ 5 est même conseillé (s’il est disponible !) et la plupart des cartes l’utilisent comme paramètre par défaut. B Adresse de base du port d’entrée/sortie (E/S) : Chaque périphérique doit utiliser une adresse de base différente pour le port correspondant. Les numéros de port suivants (en notation hexadécimale) sont souvent attribuables à une carte réseau, sauf s’ils sont déjà pris. M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 41 B Adresse de base de la mémoire : Elle désigne un emplacement de la mémoire vive (RAM) de l’ordinateur. La carte utilise cet emplacement comme tampon pour les données qui entrent et qui sortent. Ce paramètre est parfois appelé adresse de début (RAM Start Address). En général, l’adresse de base de la mémoire pour une carte réseau est D8000. Le dernier 0 est parfois supprimé pour certaine carte réseau. Il est essentiel de prendre soin de ne pas sélectionner une adresse de base déjà utilisée par un autre périphérique. A noter toutefois que certaines cartes réseau n’ont pas de réglage pour l’adresse de base de la mémoire car elles n’utilisent pas les adresses RAM de la machine. Remarque : il est possible de configurer la carte de manière logicielle. Les paramètres doivent correspondre avec la disposition des cavaliers ou des commutateurs DIP (Dual Inline Package) situés sur la carte réseau. Les réglages sont fournis avec la documentation de la carte. Beaucoup de cartes récentes sont en PnP (Plug and Play). Cela dispense de configurer la carte à la main mais peut parfois être gênant (apparition de conflits) auquel cas il est généralement agréable de pouvoir désactiver l’option PnP et configurer la carte ”à la main”. Yann MORÈRE M.S.T. Télécom 1re Année Cette page est laissée blanche intentionnellement Chapitre 2 Introduction aux systèmes d’exploitation 2.1 Introduction Pour qu’un ordinateur soit capable de faire fonctionner un programme, il faut que la machine puisse effectuer un certain nombre d’opérations préparatoires pour assurer les échanges entre l’unité centrale, la mémoire, et certains périphériques. Or, les périphériques varient d’un ordinateur à un autre, particulièrement sur un PC. Il faut donc des pilotes (instructions servant à piloter un périphérique) différents selon l’ordinateur. C’est le système d’exploitation qui assure ces tâches. C’est un programme qui établit les liens entre le matériel, l’utilisateur et les applications (traitement de texte, jeu ...). Il permet de dissocier les programmes du matériel, ce qui simplifie grandement la création de logiciels. D’autre part, le système d’exploitation fournit un certain nombre d’outils pour gérer la machine. Il assure l’initialisation du système après une mise sous tension (appelée RESET). Grâce à des routines (drivers ou gestionnaires de périphériques) il peut gérer les périphériques, en assurant des opérations aussi simple que l’affichage des caractères à l’écran ou bien la lecture du clavier, mais aussi le pilotage d’une imprimante ou d’un scanner... Fig. 2.1 – Principe du Système d’exploitation En effet, les périphériques d’entrée-sortie (par exemple les cartes d’extension) varient d’un modèle d’ordinateur à un autre, il faut donc un système qui puisse unifier l’écriture des instructions gérant le matériel. Ainsi lorsqu’un programme désire afficher des informations à l’écran, il n’a pas besoin d’envoyer des informations spécifiques à la carte graphique (il faudrait que chaque programme prenne en compte la programmation de chaque carte...), il envoie les informations au système d’exploitation, qui se charge de les transmettre au périphérique concerné... 43 44 Cours de Système d’Exploitation UNIX La communication avec le système d’exploitation s’établit par l’intermédiaire d’un langage de commandes et un interpréteur de commandes, cela permet à l’utilisateur de piloter les périphériques en ignorant tout des caractéristiques du matériel qu’il utilise, de la gestion des adresses physiques... 2.2 Systèmes multi-tâches Les système d’exploitation multi-tâches permettent de partager le temps du processeur pour plusieurs programmes, ainsi ceux-ci sembleront s’exécuter simultanément. Pour réaliser ce processus, les applications sont découpées en séquence d’instructions que l’on appelle tâches ou processus. Ces tâches seront tour à tour actives, en attente, suspendues ou détruites, suivant la priorité qui leur est associée ou bien séquentiellement. Un système est dit préemptif lorsqu’il possède un ordonnanceur (aussi appelé planificateur ), qui répartit, selon des critères de priorité le temps machine entre les différentes tâches qui en font la demande. Le système est dit à temps partagé lorsqu’u n quota de temps est alloué à chaque processus par l’ordonnancer. Cela est notamment le cas des systèmes multi-utilisateurs qui permettent à plusieurs utilisateurs d’utiliser simultanément sur une même machine des applications similaires (le système est alors dit ”système transactionnel”) ou différentes. Dans ce cas, le système alloue à chaque utilisateur une tranche de temps. 2.3 Systèmes multi-processeurs Ces systèmes sont nécessairement multi-tâches puisqu’on leur demande d’une part de pouvoir exécuter simultanément plusieurs applications, mais surtout d’organiser leur exécution sur les différents processeurs (qui peuvent être identiques ou non). Ces systèmes peuvent être soit architecturés autour d’un processeur central qui coordonne les autres processeurs, soit avec des processeurs indépendants qui possèdent chacun leur système d’exploitation, ce qui leur vaut de communiquer entre eux par l’intermédiaire de protocoles. 2.4 Les types de systèmes d’exploitation On distingue actuellement deux types de systèmes d’exploitation : les systèmes 16 bits et les systèmes 32 bits. Système Codage DOS 16 bits 16/32 Windows3.1 bits Windows95/98/Me32 bits WindowsNT/2000 32 bits Unix 32 bits VMS 32 bits M.S.T. Télécom 1re Année Monoutilisateur X Multiutilisateur X X X X X Monotâche X Multitâche non préemptif préemptif préemptif préemptif préemptif 5 octobre 2003 Cours de Système d’Exploitation UNIX 2.5 45 Notions de fichier Un fichier est une suite d’informations binaires, c’est-à-dire une suite de 0 et de 1. Ce fichier peut être stocké pour garder une trace de ces informations. Un fichier texte est un fichier composé de caractères stockés sous la forme d’octets. Ce fichier est enregistré sous la forme ”nom du fichier.ext”. ”.ext” représente l’extension, c’est un moyen de reconnaı̂tre le type de programme avec lequel ce fichier peut être ouvert (attention cela ne garantit pas le type de fichier : lorsque l’on change l’extension on ne change pas le type de fichier !). La longueur du nom et de l’extension peut varier suivant le système d’exploitation : B 8 caractères pour le nom et 3 pour l’extension sous DOS et Windows 3.1 B 256 caractères pour le nom et l’extension sous Windows 95, 98 et NT Ainsi lorsque vous visualisez sous DOS ou Windows 3.1 un fichier provenant de Windows 9x, celui-ci aura un nom tronqué comportant les 6 premiers caractères du nom suivi de x oû x représente un chiffre qui est incrémenté à chaque fois qu’un fichier porte le même nom. C’està-dire que si un fichier nommé ”fichie 1” existe déjà il nommera le suivant ”fichie 2” ... De plus, un fichier contient un en-tête qui permet de stocker des informations supplémentaires, comme le type de fichier et surtout la taille du fichier. Il contient aussi un caractère de fin de fichier signalant que les informations situées au-delà de ce caractère ne font plus partie du même fichier. Quoi de plus idiot que de mettre dans l’en-tête du fichier la taille du fichier puisqu’on la connait me direz-vous ? Voici deux exemples qui vous démontreront son utilité 2.5.1 Les fichiers corrompus Il vous est forcément déjà arrivé de télécharger un fichier sur Internet, et que Microsoft Internet Explorer plante ou bien que le serveur qui héberge se fichier coupe la communication. Si ce fichier est un fichier texte, il ne vous manquera que la fin du texte, par contre si celui-ci est un fichier exécutable (un programme) son exécution pourrait très bien être dangereuse car il manque des informations. Le système d’exploitation compare donc sa taille réelle à la taille indiquée dans l’en-tête pour vérifier l’intégrité du fichier. 2.5.2 Infection par un virus Si jamais votre fichier est infecté par un virus, celui-ci va ajouter des lignes de code dans le fichier, ainsi l’information concernant la taille du fichier située dans l’en-tête ne correspondra plus (à moins que ce petit malin de virus ne pense à modifier l’en-tête, ce qui peut arriver de nos jours), ainsi il pourra être repéré. 2.6 Notion de répertoire Un répertoire est un objet informatique qui contient des fichiers. Imaginez une grande commode qui contient des tiroirs dans lesquels pourraient se trouver des fichiers et d’autres tiroirs ... un répertoire peut donc contenir : B des fichiers Yann MORÈRE M.S.T. Télécom 1re Année 46 Cours de Système d’Exploitation UNIX B d’autres répertoires 2.7 Relations relatives Si l’on reprend notre exemple de la commode, la plus grande entité contenant d’autres entités est la commode : elle ne peut pas se trouver dans un tiroir ! Dans le cas de l’informatique on appelle cette entité la racine : c’est l’entité de plus bas niveau, car elle peut contenir des fichiers ou des répertoire mais ne peut pas se trouver dans un répertoire elle-même ! On la note ”\” dans la plupart des systèmes d’exploitation (pour y aller sous DOS on tapera ”cd \”. Il en existe une seule par disque (ou du moins par partition ...). Un répertoire qui en contient un autre est dit ”répertoire parent”. Lorsque d’un répertoire on veut aller au répertoire parent, celui-ci est désigné par ”..” sur la plupart des sytèmes (on tapera donc ”cd ..” sous DOS ou sous UNIX pour accéder à un répertoire parent). Voyons voir la représentation d’un système de répertoires sous Windows 95 : Fig. 2.2 – Système de répertoire de Win 95 Ici, répertoire2 est parent de répertoire20 et répertoire21. ”répertoire2” vis-àvis de ”répertoire20” pourra être notée ”..” La racine (d :\) vis-à-vis de ”répertoire20” pourra être notée ”../..” car deux relations de parenté les séparent. M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 2.8 47 La création du DOS Le DOS est le système d’exploitation le plus connu, sa version la plus commercialisée est celle de Microsoft, baptisée MS-DOS (il en existe d’autres comme DR-DOS). MS-DOS a vu le jour en 1981 lors de son utilisation sur un IBM PC. 2.8.1 Présentation du système Le DOS, comme tout système d’exploitation, contrôle les activités de l’ordinateur. Il gère des opérations telles que la circulation, l’affichage, et l’entrée de données entre les divers éléments constitutifs du système. Le rôle du DOS est d’interpreter les commandes saisies au clavier par l’utilisateur. Ces commandes permettent d’effectuer les tâches suivantes : B la gestion des fichiers et des répertoires B la mise à jour des disques B la configuration du matériel B l’optimisation de la mémoire B l’exécution des programmes Ces commandes sont tapées à l’invite, c’est-à-dire dans le cas de MS-DOS (Microsoft DOS, le plus connu) une lettre d’unité suivi d’une barre oblique inverse (antislash), ce qui donne A :\ ou C :\ par exemple. Fig. 2.3 – Invite MS-Dos Pour exécuter une commande il suffit de taper la commande puis d’appuyer sur ENTREE. 2.8.2 Les fichiers sous DOS Sur un ordinateur les informations sont stockées dans des fichiers. Lorsqu’on exécute un programme, MS-DOS traite les informations situées dans le fichier et les transmet au système. Sous MS-DOS chaque fichier peut être aussi volumineux que possible, cependant le nom que vous lui donnez est soumis à des restrictions, on ne peut en effet lui donner un nom d’une longueur maximale de 8 caractères plus 3 pour l’extension. De plus, les fichiers ne doivent contenir que les caractères suivants : B lettres de A à Z B chiffres de 0 à 9 B caractères spéciaux suivants : $̂ ! # % & - ( ) ’ Enfin, les noms de fichiers ne doivent pas contenir : B de blanc (espace) B de virgule B de barre oblique inverse B de point (hormis le point qui sépare le nom de l’extension) et ils ne doivent pas non plus appartenir à la liste de noms réservés : Yann MORÈRE M.S.T. Télécom 1re Année 48 B B B B B B B B B B B B Cours de Système d’Exploitation UNIX CLOCK$ CON AUX COM1 COM2 COM3 COM4 LPT1 LPT2 LPT3 NUL PRN 2.8.3 L’organisation des fichiers en répertoires Un disque dur peut contenir, suivant sa taille, plusieurs milliers de fichiers. Cependant, plus leur nombre est élevé plus il est difficile de les gérer, il devient alors nécessaire de les stocker dans des répertoires. Sous MS-DOS, les noms de ces répertoires sont soumis aux mêmes restrictions de longueur que les fichiers (8 caractères pour le nom, ainsi qu’une extension de 3 caractères. 2.8.4 Commandes MS-DOS Description Commande liste le contenu d’un répertoire dir change de répertoire cd répertoire parent cd .. crée un nouveau répertoire mkdir supprime un répertoire deltree copy, xcopy copie de fichier move déplacement de fichier supprime le fichier del type affiche le contenu du fichier type |more affiche le contenu du fichier avec des pauses help aide sur la commande demandée print imprime le fichier demandé attrib (-/+r, -/+a, - change les attributs d’un fichiers (- désactive, + active, r : lecture /+s, -/+h) seule, a : archive, s : système, h : fichier caché format formatte le lecteur demandé label donne un nom de volume à un lecteur ver donne le numéro de version 2.8.5 Lister les fichiers C’est la commande dir qui permet de lister les fichiers. Cependant ce listage peut être fait selon un très grand nombre de critères (ordre alphabétique, date ...), ces critères peuvent être choisis par l’intermédiaire de paramètres : B /p : affiche le résultat en marquant des pauses à chaque page M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 49 B /w : affiche le résultat sous forme de 5 colonnes B Pour afficher les fichiers selon un critère . /ah : affiche les fichiers cachés . /ad : affiche uniquement les répertoires . /ar : affiche les fichiers en lecture seule . /aa : affiche les fichiers prêts à être archivés . /as : affiche les fichiers système B Pour afficher les fichiers selon un ordre trié . /QN : trié par nom . /QS : trié par taille croissante . /QE : trié par extension . /QD : trié par date . /QG : trié par répertoire en tête . /QA : trié par attribut B /s : affiche les fichiers d’un répertoire et de tous ses répertoires B /b : présentation abrégée B /l : affiche le résultat en minuscules B /u : affiche des informations supplémentaires 2.8.6 Utiliser des caractères génériques Pour une commande donnée intervenant sur des fichiers, au lieu de donner un nom de fichier, on peut utiliser des caractères génériques spécifiant les fichiers dont le nom commence par certains caractères : B le caractère ”*” remplace des parties de nom ou d’extension B le caractère ”?” remplace un caractère (comme le caractère blance au scrabble) Ainsi la commande ”dir *.com” listera tous les fichiers dont l’extension est .com. La commande ”dir b*.*” listera tous les fichiers dont le nom commance par un b 2.8.7 Envoyer les informations envoyées à l’écran dans un fichier Grâce à une redirection ( >> ) on peut par exemple envoyer le résultat d’un dir dans un fichier : La commande ”dir >> test.txt” enverra le résultat du listage dans le fichier test.txt qu’il créera dans le répertoire courant s’il n’existe pas, ou auquel le résultat sera concaténé (ajouté à la suite de) si le fichier existe déjà. Yann MORÈRE M.S.T. Télécom 1re Année Cette page est laissée blanche intentionnellement Chapitre 3 Caractéristiques générales du système Unix Unix est un système d’exploitation multitâche et multi-utilisateurs, et à ce titre, il a introduit des concepts nouveaux, principalement en matière de gestion des processus et des fichiers. L’objectif de cette partie est de présenter les particularités de ce système. Nous allons dans un premier temps rappeler dans les grandes lignes l’évolution d’Unix afin de mieux comprendre certains aspects des versions actuelles et leurs origines. 3.1 Évolution d’Unix L’histoire du système d’exploitation Unix commence en 1969 aux Bell Labs (laboratoires de recherche en informatique d’A.T.&T.). C’est pour répondre aux besoins des ingénieurs de la société que Ken Thompson écrit un système interactif, qui met l’accent sur les utilitaires de développement de logiciels, le partage de fichiers et les outils de documentation qui allait devenir Unix. Ce nom d’Unix a été attribué par opposition au système Multics (vaste projet du M.I.T.). La première évolution interne marquante d’Unix a été sa ré-écriture (par Ken Thompson et Denis Ritchie) en langage C, lequel a été inventé pour la cause en 1971. En 1975, le système Unix (v6) est distribué aux universités et aux centres de recherches. La principale université qui va travailler sur Unix est l’université de Berkeley, qui va produire ses propres versions appelées BSD pour Berkeley Software Distribution. En 1979, les Bell Labs sortent leur version appelée v7, avec en particulier, l’ajout de nouveaux utilitaires et un effort en matière de portabilité. Cette version est la première à être diffusée dans le monde industriel. On peut dire qu’elle est à l’origine du développement du marché Unix. Au début des années 80, une modification de la législation américaine autorise A.T.&T. à commercialiser lui-même ses propres produits qui sont alors appelés System. C’est à cette époque que Microsoft propose sa propre version d’Unix appelée Xenix et destinée aux microordinateurs. A Berkeley, les efforts portent sur l’intégration des protocoles réseaux TCP/IP, la gestion de la mémoire avec l’introduction de la pagination (alors qu’A.T.&T. reste fidèle quand à lui à la segmentation), la modification de certains paramètres du système (taille des blocs, nombre des signaux...) et l’ajout d’outils (l’éditeur vi, un interpréteur de commandes csh...). Cette prolifération des systèmes Unix a engendré un certain nombre de problèmes de compatibilité car chacun allant dans sa propre direction, il y avait alors plusieurs systèmes Unix. Plusieurs 51 52 Cours de Système d’Exploitation UNIX facteurs vont alors jouer pour canaliser et recentrer l’offre Unix : la complexité croissante des systèmes et l’action des utilisateurs. En 1983, A.T.&T. sort la version System V, qui est issue de la v7 et qui sera enrichie au fur et à mesure par de nouvelles versions (releases). Dans le même temps, Berkeley, propose sa version 4.2 BSD (avec les fonctionnalités réseau) qui va servir de base pour de nombreux constructeurs (Sun Microsystems, Digital...) et lui permettre d’entrer dans le monde industriel. Ces deux produits marquent la fin des systèmes Unix-like en raison de leur importance par rapport à la version de référence, la v7. La fin des années 80 est marquée par une croissance sans précédent du nombre de systèmes Unix dans le domaine des systèmes d’exploitation. Tous les constructeurs proposent une solution Unix à leur catalogue (on trouve alors trois grandes familles : les versions basées sur System V, celles issues de BSD et les versions Xenix sur micro). Le début des années 90 est marqué par le regroupement des constructeurs au sein de deux organisations : l’U.I. (Unix International) créée à partir de l’accord entre A.T.&T. et Sun Microsystems d’une part et l’O.S.F. d’autre part. Le premier accord a comme objectif la convergence entre les versions System V et 4.2 BSD. La première réalisation est la version System VR4 (System V release 4) qui réalise la synthèse entre SunOS (version Unix de Sun conçue sur la base BSD), Xenix et System V. L’O.S.F., quand à lui s’est fixé comme objectif de réaliser un système, appelé OSF/1, construit sur un noyau Unix et intégrant les fonctionnalités apportées par ses membres (multifenêtrages, graphismes, bases de données...) de manière à disposer d’un environnement ouvert commun aux différentes architectures des constructeurs. La principale réalisation à l’heure actuelle de l’O.S.F. est Motif qui définit un ensemble de normes au niveau de la présentation sur un environnement multifenêtré. 3.2 Philosophie d’Unix Conçus à l’origine comme un environnement de développement, Unix est aujourd’hui un système complet intégrant un grand nombre de fonctionnalités organisées en couches logicielles. en dehors de cette structure modulaire, Unix se caractérise également par les concepts introduits en matière de gestion de fichiers et de gestion des processus. 3.2.1 Caractère universel d’Unix Une des premières caractéristiques d’Unix est son écriture (à hauteur de 95%) en langage C, permettant ainsi une portabilité sur la plupart des architectures en allant des micro-ordinateurs jusqu’aux supercalculateurs. Mais cet atout ne suffit pas à lui seul à expliquer l’expansion d’Unix. Sa popularité est, en fait, due à sa conception modulaire avec des interfaces bien définies ainsi que la disponibilité d’outils simples qui coexistent entres elles. Alors que les autres systèmes d’exploitation ressemblent à des ensembles monoblocs et relativement fermés, la conception du système repose sur différents niveaux bien distincts : le noyau, un interpréteur de commandes (le shell), des bibliothèques et un nombre important d’utilitaires. M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 53 Fig. 3.1 – Structure d’un système Unix 3.2.1.1 Le noyau Le noyau est la partie centrale d’Unix. Il est résident, il se charge en mémoire au démarrage. Sa structure est modulaire, ce qui rend aisées ses manipulations en termes de portabilité et l’utilisation des services qu’il offre via les primitives (ou appels systèmes). Ce fonctionnement par primitives permet de résoudre les problèmes d’accès concurrents aux informations du système. En effet, les appels systèmes font entrer l’exécution en mode noyau. Dans ce mode, le processus est assuré de garder le processeur jusqu’au retour au mode utilisateur lorsque l’appel système est terminé. Les différents noyaux Unix ont été réécrits afin de pouvoir s’adapter aux nouvelles machines multi-processeurs et de supporter le travail en temps réel. Ils sont le plus souvent réécrits en couches : les différentes fonctions du noyau sont implémentées dans des couches logicielles différentes qui communiquent entre elles par messages. La tendance actuelle est également de garder le moins de fonctions possibles dans le noyau afin de constituer un micro-noyau. Les fonctions écartées sont rejetées dans les modules exécutés en mode utilisateur. L’interface entre le noyau Unix et les applications est définit par une bibliothèque (libc.a pour le langage C par exemple). Elle contient les modules permettant d’utiliser les primitives mais aussi des fonctions plus évoluées combinant plusieurs primitives. D’autres bibliothèques sont utilisées pour des services spécialisés (fonctions graphiques,...). 3.2.1.2 Le Shell L’interface utilisateur sous Unix est appelée shell. Lorsqu’un utilisateur tape des commandes Unix, ces commandes sont reçues par le shell qui les interprète avant de lancer l’exécution de cette commande. Le shell est une couche logicielle bien séparée du noyau. Il joue un double rôle celui d’interpréteur de commandes et celui de langage de programmation. Ce dernier rôle semblant parfois hermétique à des néophytes. Il existe plusieurs shells dont les plus répandus sont : B le Bourne Shell (sh) : le shell de base sous Unix A.T.&T., B le C-shell (csh) : le shell Unix BSD, B le Korn-Shell (ksh) qui est une extension du Bourne shell. Il possède toutes les commandes de son prédécesseur, ainsi que des commandes qui facilitent le travail de l’utilisateur comme des outils de gestion des historiques des commandes tapées... B le Z-shell (zsh) : extension de ksh, qui offre en particulier des modules de complétions des nom de programme, de fichiers, de variables utilisateur et système, l’envoie de message à l’utilisateur de correction en cas d’erreur de frappe. L’utilisateur, à l’aide des commandes qu’il a à sa disposition, peut écrire ses propres fonctions et programmes en langage shell, ce Yann MORÈRE M.S.T. Télécom 1re Année 54 Cours de Système d’Exploitation UNIX sont alors des shellscripts. Une fois ceux-ci réalisés, ils peuvent être utilisés par l’utilisateur comme n’importe quelle commande du shell lui même. 3.2.2 Le système de gestion de fichiers 3.2.2.1 Vision générale Sous UNIX, les fichiers sont enregistrés dans une structure hiérarchisée en arbre. Ce système de fichiers est donc composé d’une racine et de noeuds qui sont des répertoires et des feuilles qui sont des fichiers ordinaires qui contiennent les données et les programmes. Au niveau de l’utilisateur, les entrées-sorties sont vues de façon uniforme c’est-à-dire avec les mêmes commandes, la même syntaxe et les mêmes attributs qu’il s’agisse d’un fichier ou d’un périphérique. Par exemple, la redirection d’une commande sur un fichier ou sur un périphérique utilise la même syntaxe : commande > sortie où sortie est le nom du fichier (ordinaire ou spécial) de redirection. Mais au niveau du noyau, ce dernier effectuera l’opération de redirection soit sur le système de fichiers, soit sur le périphérique selon le type du fichier sortie. Cette vision uniforme des entrées-sorties est caractérisée par un descripteur commun à tous ces éléments, qui est appelé inode. De fait, chaque fichier Unix à un inode comprenant les attributs suivants : B un propriétaire : celui qui a créé le fichier, B un groupe : le groupe auquel appartient le créateur au moment où il créé le fichier, B des droits d’accès : (voir paragraphe s’y rapportant), B des informations générales sur la taille, la date de la dernière opération effectuée sur le fichier, le nombre de liens sur ce fichier,... Fig. 3.2 – Système de fichier d’un système Unix 3.2.2.2 Les droits d’accès Les autorisations d’accès sous UNIX sont de trois ordres : accès en lecture (r), en écriture (w) et en exécution (x). A partir de ces trois options, on pourra effectuer toutes les opérations de base sur les fichiers (création, copie, destruction,...). Ces droits vont être donnés pour trois niveaux d’utilisateurs : pour le propriétaire, pour le groupe auquel appartient le propriétaire et pour le reste des utilisateurs. En ce qui concerne les répertoires, l’attribut x est nécessaire pour pouvoir se déplacer dans ce répertoire ou pour y rechercher un fichier. M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 3.2.3 Les processus 3.2.3.1 Vision générale 55 Toute action, tout programme lancé est exécuté par un processus. Le processus est donc l’unité d’exécution pour Unix. Une commande entrée par un utilisateur peut ne pas créer de processus (commandes internes au shell de l’utilisateur), ou en créer un ou plusieurs. Lors de l’exécution de la commande, un processus peut être en mode utilisateur (mode normal) ou en mode noyau, mode dans lequel il entre quand il fait un appel système (par exemple pour demander plus de place en mémoire centrale). L’ensemble de ses processus apparaissent dans une table, consultable par tout utilisateur du système. Cette table recense l’ensemble des processus et donne des renseignements quand à l’utilisateur qui l’a lancé, son taux d’occupation de la mémoire centrale, son taux d’utilisation du temps CPU de la machine, son état à l’instant de l’affichage de l’image de la table... 3.2.3.2 Terminal de contrôle d’un processus, exécution en arrière plan Les processus lancés par un utilisateur sont liés au terminal depuis lequel ils ont été exécutés, et à l’utilisateur qui les a créés. Le système peut ainsi repérer les processus qui recevront un signal d’arrêt (Ctrl C par exemple). L’ensemble des processus qui partagent un terminal s’appelle un groupe de processus. Un utilisateur peut aussi lancer un processus en arrière plan, si par exemple, il veut garder la main sur une fenêtre de commande et pouvoir bénéficier d’un autre programme. Ces processus acquièrent alors une certaine indépendance vis à vis du terminal depuis lequel ils ont été lancés : ils s’exécutent alors sans intervention de l’utilisateur et sans que celui-ci n’ait besoin d’attendre la fin de leur exécution (type de traitement en batch). On peut ainsi lancer plusieurs tâches simultanément. Ces processus sont alors protégés contre les annulations par clavier (d’autres mécanismes que nous verrons par la suite permettent d’arrêter ces processus). D’autres processus sont quand à eux lancés par le système ou par un utilisateur en fonction de ses besoins (cas de l’impression ou du mail), ils sont alors gérés par le système et sont appelés des daemons. 3.2.3.3 La propriété effective et réelle d’un processus Comme nous venons de le voir un processus à un propriétaire réel, qui est l’utilisateur qui l’a commandé. Il peut avoir aussi un propriétaire effectif, c’est à dire l’utilisateur a qui appartient le fichier exécutable (si le set user bit a été positionné). C’est le cas par exemple de la commande de changement de mot passe qui nécessite l’écriture dans des fichiers protégés et dans lequel seul l’administrateur système doit avoir le droit d’écrire. Dans ce cas là, le propriétaire réel du processus et l’utilisateur et le propriétaire effectif root. Yann MORÈRE M.S.T. Télécom 1re Année Cette page est laissée blanche intentionnellement Chapitre 4 Présentation de l’environnement du CESIUM Vous avez à votre disposition un certain nombre de machines. Parmi celles-ci, certaines sont dans le local technique (les serveurs) et d’autres sont à votre disposition (les stations de travail). 4.1 Les serveurs Ceux-ci ont plusieurs rôles : certains ont de l’espace disque pour les comptes utilisateurs (oslo en l’occurrence pour vous), d’autres jouent le rôle de machine d’hébergement pour les répertoires des machines diskless (Cesium), d’autres encore sont des serveurs de fichiers et/ou d’exécution (lisboa, madrid ou Cesium par exemple). Toutes ces machines ont entre 50 et 100 Mo de mémoire vive et un espace disque de l’ordre de 1 à 4 Go (variable selon les besoins et les périodes). Ces serveurs sont de plusieurs types et vont vous permettre de travailler sur des environnements hétérogènes. Nous avons donc des serveurs de type Sun (madrid, Cesium) avec différents systèmes d’exploitation : le serveur madrid est sous Solaris 2.5 (Unix System V) et Cesium sous SunOs 4.1.3 (Unix BSD). Lisboa quand à elle est une RISC6000 et tourne sous AIX 3.5 (System V). Il y a aussi au sein du CESIUM un certain nombre de serveurs qui servent à l‘administration système, ceux-ci sont des Hewlett Packard (rio, oslo, tunis...) et tournent sous HP-UX 9.05 ; ils devront être prochainement passés sous HP-UX 10. 4.2 Les stations de travail Vous allez travailler directement sur les stations de travail qui sont à votre disposition. Parmi celles-ci, un certain nombre sont diskless (les Suns noir/blanc), elles doivent récupérer leur noyau Unix ainsi que toutes leurs arborescences sur les serveurs. Vous avez aussi accès à des terminaux X (HP couleur) qui eux vous permettent d’accéder directement à un serveur ou à une machine autorisée. Vous pourrez aussi travailler sur les PCs sous Linux. Voila, en quelques lignes le descriptif des matériels que vous avez à votre disposition. A ceci se rajoutent des imprimantes (HP4 n/b) et tous les autres PCs sous Windows for Workgroup ou Windows NT qui vous serviront à réaliser vos projets et autres TDs. 57 58 Cours de Système d’Exploitation UNIX Fig. 4.1 – Reseau de Machine M.S.T. Télécom 1re Année 5 octobre 2003 Chapitre 5 Utilisation du Shell 5.1 5.1.1 Introduction Qu’est ce que le Shell Comme nous l’avons vu précédemment, le shell est le programme interface entre l’utilisateur et le noyau Unix. Il est indépendant du noyau. A ce sujet, vous pouvez choisir le shell que vous voulez lors de vos sessions de travail (par contre, un shell vous est toujours affecté par défaut pour toutes vos sessions lors de la création de votre compte). Il a plusieurs rôles : il interprète les commandes passées par l’utilisateur afin qu’elles soient traitées par le noyau ; il a aussi la fonction de langage de programmation, il est utile pour prototyper des applications, pour effectuer certaines tâches simples et répétitives. Le langage des scripts pouvant paraı̂tre compliqué au premier abord pour un non initié, on préférera utiliser le langage Perl (de plus en plus répandu et se rapprochant du langage C, il est aussi très utilisé dans l’écriture de scripts CGI pour tout ce qui concerne les interfaces entre les programmes utilisateurs et le langage HTML). 5.1.2 Les différents utilisateurs Nous allons voir dans cette partie les différents niveaux d’utilisateurs sous Unix. Quel que soit le type d’utilisateur, il y a un certain nombre de paramètres en commun. Un utilisateur quelconque sous Unix est repéré par son nom (login) qu’il doit taper pour pouvoir entrer dans le système. A chaque nom, correspond un numéro d’utilisateur : l’uid. L’uid est donc le moyen pour le système de reconnaı̂tre l’utilisateur (en ce qui concerne l’attribution de la possession d’un fichier par exemple). Afin d’authentifier l’utilisateur, un mot de passe lui est attribué lors de la création de son compte. Ce mot de passe est secret, il ne doit pas être divulgué à autrui. De plus, en cas de problèmes lors de l’entrée dans le système sur le mot de passe, vérifiez le type de clavier que vous utilisez, que vous n’êtes pas en mode majuscule, et cas échéant, si vous avez oublié votre mot de passe, allez voir votre administrateur système afin qu’il le change. Il répond à des conditions bien précises de création. Par exemple, au CESIUM, il vous faut donner un mot de passe de 8 caractères avec au moins 2 caractères non alpha-numériques. L’utilisateur appartient aussi à au moins un groupe de travail et par la même a un numéro de groupe par défaut : le gid. En fonction de projets, et au vue de la notion de droits, un utilisateur peut donc appartenir à plusieurs groupes d’utilisateurs. 59 60 Cours de Système d’Exploitation UNIX Lors de la création du compte, l’administrateur système fixe un répertoire de travail par défaut (la HOME dir) dans lequel l’utilisateur sera positionné à l’entrée dans le système. En règle générale, le nom terminal du chemin de ce répertoire représente le nom de login de l’utilisateur. De façon générale, l’utilisateur est propriétaire de son répertoire HOME. Par défaut aussi, et lors de la phase de création du compte, on donne à l’utilisateur un shell qui sera exécuté lors de l’entrée dans le système. En résumé, à un utilisateur correspond les renseignements suivants : B un nom de login, B un mot de passe, B un iud, B un ou plusieurs groupes de travail, B un répertoire HOME, B un shell par défaut. Les informations que nous venons de donner ci-dessus sont enregistrées dans le fichier : /etc/passwd (/etc/group pour tout ce qui concerne les groupes. Pour des raisons de sécurité et de commodité, l’administrateur utilisera des outils de gestion du système type NIS ou Kerberos. Dans ce cas là, le fichier /etc/passwd ne contient que certaines informations sur certains utilisateurs, le reste étant placé dans les fichiers relatifs au système de gestion utilisé. 5.1.2.1 L’utilisateur de base Il utilise les applicatifs mis à sa disposition, il customise les applications, il possède des droits d’accès traditionnels, il doit veiller à utiliser les ressources (disques, CPU,...) avec modération afin de ne pas surcharger le système. 5.1.2.2 Le programmeur Il possède le même droits que l’utilisateur de base, il a en plus la possibilité de programmer ses propres applications, il utilise donc dans ce cas, les outils de développement installés sur le système, il a accès aux compilateurs et aux interpréteur. 5.1.2.3 L’administrateur système Il possède les mêmes droits que le programmeur. Son rôle est plus grand : il gère le système, il possède des droits d’accès étendus (il peut descendre dans toutes les arborescences de son système), il crée des comptes pour tous les utilisateurs de son serveur, il veille au bon fonctionnement général du système, il installe les outils nécessaires à la communauté, il surveille et régularise la charge du système et des ressources de la machine. Utilisation L’étudiant Scott Tiger arrive au Cesium et est enregistré par l’administrateur système avec les attributs suivants : B nom de login : tiger B passwd : pwd4s-t ; B groupe : students-cesium B uid : 10000 M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 61 B home-dir : /u/students/Cesium##/tiger B e-mail : Scott.Tigerumail.univ-metz.fr Lorsqu’il a entré tous ces attributs dans les fichiers système, l’administrateur crée son arborescence et lui installe les fichiers de base d’environnement : B .Xdefaults (fichier de ressources pour les clients X-Window), B .kshrc (fichier de configuration des paramètres B .profile (fichier de démarrage lu et exécuté par le shell), B .mh-profile (fichier de configuration du programme xmh, servant à la lecture des mails), B Mail (répertoire qui contiendra l’ensemble des messages reçus et la définition des masques de saisie des mails), B lib/X11/app-defaults (arborescence dans laquelle seront définies les fichiers de configuration concernant l’apparence des fenêtres à l’écran), B script (répertoire contenant les scripts de base permettant de lancer l’interface X). Une fois ce travail effectué, Scott Tiger a la possibilité d’ouvrir une session de travail sur toutes les machines qu’il a à sa disposition dans les salles machines du Cesium. Il commencera par être un simple utilisateur qui customisera ses fichiers de démarrage, il deviendra très rapidement un programmeur au fur et à mesure de l’avancement des cours (Unix, C, C++,...). Il ne sera jamais administrateur du système. 5.1.3 Exemple de session utilisateur Après avoir été créer votre compte, vous pouvez commencer à entrer dans le système, pour cela, entrez votre nom de login et votre mot de passe (ces derniers sont identiques sur toutes les machines du réseau). Après authentification, votre shell de base se lance et exécute les fichiers /etc/profile, /.profile et /.kshrc afin de fixer vos variables d’environnement (TERM, PATH, MANPATH...). Le répertoire HOME qui vous a été affecté devient alors le répertoire courant. Pour lancer l’interface graphique, tapez x11. Utilisation Par exemple pour un utilisateur yann sur la machine ulysse : Mandrake Linux release 8.2 (Bluebird) for i586 Kernel 2.4.18-6mdk on an i686 / tty1 ulysse login: yann Password: Last login: Sat Sep 21 09:45:59 on :0 [yann@ulysse yann]$ Dans le cas d’une connection graphique, nous avons la figure suivante : Yann MORÈRE M.S.T. Télécom 1re Année 62 Cours de Système d’Exploitation UNIX Fig. 5.1 – Connexion en mode graphique 5.2 5.2.1 Le Shell Entrée dans le système Lorsqu’un terminal est allumé, les processus système sont lancés et en particulier celui qui s’occupe de gérer l’arrivée de nouveau utilisateur (le daemon du programme login). A ce moment, vous pouvez entrer votre nom d’utilisateur et votre mot de passe afin de démarrer votre session. 5.2.1.1 Changer son mot de passe Vous avez fixé votre mot de passe avec l’administrateur système le jour où vous vous êtes fait recenser sur le réseau. Si vous souhaitez changer de mot de passe, la commande permettant de réaliser cette opération est : passwd ou yppasswd. Utilisation machine$ yppasswd Changing NIS password for USER on MACHINE. Old password : - entrez votre mot de passe courant New password : - entrez votre nouveau mot de passe Retype new password : - rentrez votre mot de passe NIS entry has changed on MACHINE. M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 63 Les règles concernant le mot de passe ont été citées plus haut. Attention toutefois, le système Unix les majuscules et les minuscules ne sont pas équivalentes. 5.2.1.2 Format général des commandes La syntaxe générale des commandes Unix est : commande options... arguments... Les options sont le plus souvent précédées par un tiret -. L’ordre des options est le plus souvent indifférent et peuvent être regroupées derrière un seul tiret. Les arguments quand à eux peuvent être absents et, dans ce cas là, ils prennent des valeurs par défaut. Par exemple : B ls B ls -lia B ls -l /net B ls *foo* 5.2.1.3 stuces pour se déplacer sur la ligne de commandes : Il existe sous Unix certains raccourcis clavier utiles pour se déplacer sur la ligne de commandes ou pour rappeler une commande précédemment lancée. Voici une liste succincte de ces raccourcis : B Ctrl-A : pour revenir en début de ligne, B Ctrl-E : pour aller à la fin de la ligne, B Ctrl-F : pour se déplacer vers la droite, B Ctrl-B : pour se déplacer vers la gauche, B Ctrl-D : pour effacer le caractère à droite du curseur, B Backspace : pour effacer le caractère à gauche du curseur, B Ctrl-K : pour supprimer la fin de la ligne, B Ctrl-P : pour revenir à la commande précédente, B Ctrl-N : pour passer à la commande suivante (dans la liste des commandes), B Ctrl R + début de la commande : pour retrouver une commande dans la liste, B Ctrl-S : pour interrompre la transmission des caractères entre le programme et l’écran, B Ctrl-Q : pour libérer tous les caractères depuis le Ctrl S précédent, B Ctrl-C : pour interrompre l’exécution d’un programme, B Ctrl-Z : permet de suspendre un processus en avant plan, d’exécuter une commande ou de placer le job en arrière plan (+bg) ou de le ramener en avant plan (+fg). 5.2.1.4 Le manuel en ligne Une aide en ligne est disponible sous Unix et la plupart des commandes sont présentes dans ce manuel. La commande man permet de consulter ce manuel. La syntaxe générale est la suivante : man [section] nom\_de\_la\_commande Si la page existe (si elle est trouvée dans l’une des arborescences définies dans la variable MANPATH), le système la formate et l’affiche à l’écran. En règle générale, la réponse a beaucoup de problèmes se trouve dans ces pages. N’hésitez donc jamais à les consulter. Yann MORÈRE M.S.T. Télécom 1re Année 64 Cours de Système d’Exploitation UNIX Attention toutefois, certaines commandes peuvent apparaı̂tre plusieurs fois dans la liste des pages de manuel. En effet, certaines fonctions sont utilisées dans plusieurs cas de figures ; par exemple, la commande if..then..else peut être aussi bien une commande Unix, qu’une commande C, ou C++ ou Perl... dans ce cas, il existe donc plusieurs pages se référant à cette commande (plusieurs sections contiennent des informations sur cette fonction), il faut faire donc attention à appeler la bonne page de manuel. Pour cela, il existe un moyen de connaı̂tre toutes les pages de manuel se référant à un mot clé donné : man -k mot-clé l’utilisateur verra une ligne pour chaque entrée du manuel concernant ce mot-clé. Utilisation Dans le cas de la recherche par exemple portant sur la commande file (cette commande a plusieurs utilités dans plusieurs cas sur le système) qui sous Unix détermine le type d’un fichier, selon l’ordre des chemins dans la variable MANPATH, on obtient : FILE(1) FILE(1) NAME file - determine file type SYNOPSIS file [ -bciknsvzL ] [ -f namefile ] [ -m magicfiles ] file ... file -C [ -m magicfile ] DESCRIPTION This manual page documents version 3.37 of the mand. file com File tests each argument in an attempt to classify it. There are three sets of tests, performed in this order: filesystem tests, magic number tests, and language tests. The first test that succeeds causes the file type to be printed. ....... on voit donc ici que cette page ne correspond pas aux attentes de l’utilisateur. Il doit donc consulter le manuel par mot-clé et trouver le fichier qui correspond à ses besoins : [yann@ulysse cours_unix]$ man -k file | more access (1) - determine whether a file can be accessed access (2) - check user’s permissions for a file acct (5) - execution accounting file addftinfo (1) - add information to troff font files for use with gro ff M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 65 addmntent [getmntent] (3) - get file system descriptor file entry addr2line (1) - convert addresses into file names and line numbers anytopnm (1) - convert an arbitrary type of image file to PBM, PGM, or PPM autom4te (1) - Generate files and scripts thanks to M4 autoreconf (1) - Update generated configuration files basename (1) - strip directory and suffix from filenames BIO_append_filename [BIO_s_file] (3) - FILE bio BIO_get_fd [BIO_s_fd] (3) - file descriptor BIO BIO_get_fp [BIO_s_file] (3) - FILE bio BIO_new_fd [BIO_s_fd] (3) - file descriptor BIO BIO_new_file [BIO_s_file] (3) - FILE bio BIO_new_fp [BIO_s_file] (3) - FILE bio bioradtopgm (1) - convert a Biorad confocal file into a portable graym ap BIO_read_filename [BIO_s_file] (3) - FILE bio BIO_rw_filename [BIO_s_file] (3) - FILE bio --Encore-....... FILE(1) FILE(1) NAME file - determine file type SYNOPSIS file [ -bciknsvzL ] [ -f namefile ] [ -m magicfiles ] file ... file -C [ -m magicfile ] DESCRIPTION This manual page documents version 3.37 of the mand. file com File tests each argument in an attempt to classify it. There are three sets of tests, performed in this order: filesystem tests, magic number tests, and language tests. The first test that succeeds causes the file type to be printed. The type printed will usually contain one of the words text (the file contains only printing characters and a few common control characters and is probably safe to read on lines 1-25 Yann MORÈRE M.S.T. Télécom 1re Année 66 5.2.1.5 Cours de Système d’Exploitation UNIX Sortie du système La commande exit ou Ctrl-D permettent de sortir de la session ou de quitter la fenêtre xterm en cours d’utilisation. Si vous êtes en mode fenêtré, sortez d’abord du window manager utilisé (par défaut mwm) et ensuite quittez votre session. 5.2.2 Syntaxe de commande Nous allons voir dans cette partie la plupart des commandes de bases utiles pour manipuler les fichiers et observer le système. 5.2.2.1 Fonctionnement de l’exécution d’une commande Lorsqu’il a la main, un utilisateur peut lancer l’exécution d’une commande en tapant son nom après le prompt. La commande est alors exécutée. Comment fonctionne cette exécution ? Il existe une variable d’environnement : PATH qui contient l’ensemble des chemins les plus utilisés. Utilisation [yann@ulysse cours_unix]$ echo $PATH /bin:/usr/bin:/usr/bin/X11:/usr/local/bin:/usr/bin:/usr/X11R6/bin:/usr/games:/home/yann/bin [yann@ulysse cours_unix]$ Comme sous DOS, cette variable contient tous les chemins où le système peut trouver les commandes les plus utilisées par le demandeur. Le parcours se fait de gauche à droite. Il faut donc faire attention, au cas où un exécutable est présent sur le système sous plusieurs versions différentes à bien positionner la hiérarchie des répertoires en fonction de vos besoins. Il est aussi conseillé, pour des raisons de sécurité évidente de ne pas mettre dans la liste des chemins sa HOME directory au cas où un fichier piégé y ait été placé (exemple : cheval de troie ’ls’ ou de démarrage de session...). Donc, seules les commandes qui peuvent être trouvées via la variable PATH sont exécutées directement. Pour toutes les autres, il est nécessaire d’indiquer au shell le chemin absolu (ou relatif) pour atteindre cette commande. 5.2.2.2 Commandes liées à l’arborescence de fichiers 5.2.2.2.1 Nom d’un fichier (nom absolu / nom relatif) Pour fixer le nom d’un fichier, il n’y a pas comme sous DOS par exemple de contraintes quand à la syntaxe. Tous les caractères à l’exception de / sont autorisés. Le / servant de délimiteur de répertoires. Deux notions sont liées au nom du fichier : son chemin absolu et son chemin relatif. B Le chemin absolu est composé du nom du fichier précédé par le chemin d’accès à ce fichier depuis la racine de l’arborescence (exemple : /u/students/Cesium##/user/.profile) ; B chemin relatif, quand à lui est une troncature de cette arborescence par rapport au répertoire courant (exemples : /.profile, ../other user/.profile, ./.oracle). En ce qui concerne les chemins relatifs, un certain nombre de raccourcis sont utilisés : . . désigne le répertoire courant, M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 67 . .. désigne le répertoire parent du répertoire courant, . ~/ est la contraction de votre HOME directory. 5.2.2.2.2 Visualisation de l’arborescence La commande ls permet d’obtenir la liste des fichiers d’un répertoire ou d’une arborescence de répertoires. Un certain nombre d’options permettent d’afficher plus ou moins d’informations sur ces fichiers et répertoires. Les principales options sont les suivantes : B -l : format détaillé (cf. partie utilisation), B -a : liste aussi les fichiers qui commencent par . (et qui normalement n’apparaissent pas dans la liste normale), B -d : si l’argument est un répertoire, la commande liste seulement son nom et pas les fichiers qu’il contient, B -t : affiche en triant par date de dernière modification B -R : listage récursif des sous-répertoires, B -F : fait suivre le nom des répertoires par un /, le nom des exécutables par une * et le nom des liens symboliques par un @... B -g : pour afficher les informations sur le groupe... Utilisation [yann@ulysse yann]$ ls background/ cours_unix/ cours_unix.tar.gz Documents/ evolution/ fleche_selector_right.gif fleche_selector_up.gif GNUstep/ Image1.gif [yann@ulysse yann]$ Image2.gif lasc.tar.gz latex/ lien.html login.txt lyx/ nedit_macros/ nedit_macros.tar.gz newfile1.lyx [yann@ulysse yann]$ ls -lia total 3868 34836 drwxr-xr-x 50 yann 275809 drwxr-xr-x 4 root 33829 -rw-r--r-1 yann 33828 -rw-r--r-1 yann 33827 -rw-r--r-1 yann 33826 -rw-r--r-1 yann 700411 drwxr-xr-x 2 yann 116018 drwxrwxr-x 4 yann 34849 -rw------1 yann 34838 -rw-r--r-1 yann 34839 -rw-r--r-1 yann 34840 -rw-r--r-1 yann 422990 drwxr-xr-x 3 yann Yann MORÈRE yann root yann yann yann yann yann yann yann yann yann yann yann newfile1.lyx~ newfile1.tex openoffice/ php/ playdivx* public_html/ scilab.hist so52.xpm tableau.html 12288 4096 259 26 94 21 4096 4096 12986 24 524 124 4096 sep mai jun jun jun jun sep ao^ u sep mai mai mai ao^ u 23 24 16 16 24 24 17 13 21 24 24 24 30 tableau.html~ temp/ test.html test.html~ tgif.xpm tmp/ 07:29 10:43 19:13 19:13 09:44 09:44 19:19 19:13 10:54 10:43 20:40 10:43 19:22 ./ ../ .aspell.english.prepl .aspell.english.pws .aspell.fr.prepl .aspell.fr.pws .axyftp/ background/ .bash_history .bash_logout .bash_profile .bashrc .bluefish/ M.S.T. Télécom 1re Année 68 Cours de Système d’Exploitation UNIX 278650 drwx-----294671 drwxr-xr-x 36092 -rw-r--r-34848 -rw-rw-r-68126 drwxr-xr-x 568804 drwxr-xr-x 34844 -rw-rw-r-262047 drwxr-xr-x ........ 2 3 1 1 5 2 1 3 yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann 4096 4096 2084483 20 4096 4096 0 4096 jui sep sep mai mai mai mai jui 30 23 21 24 31 24 24 1 11:10 08:09 10:50 11:49 14:24 11:49 11:48 09:17 .cddbslave/ cours_unix/ cours_unix.tar.gz .desktop .dia/ Documents/ .drakfw .emacs.d/ La première information concerne le type du fichier. Cet indicateur peut prendre les valeurs suivantes : B - pour un fichier ordinaire, B d pour un répertoire, B b pour un fichier spécial de type bloc (périphériques...), B c pour un fichier spécial de type caractère (disque, streamer...), B l pour un lien symbolique, B s pour une socket. La seconde concerne les droits (utilisateur-propriétaire, groupe de travail, autres utilisateurs), vient ensuite le nombre de liens sur le fichier (ou le répertoire), puis le propriétaire effectif, la taille, la date de dernière modification et le nom du fichier. 5.2.2.2.3 Se déplacer dans l’arborescence La commande permettant de se déplacer dans une arborescence est la commande : cd [répertoire] Cette commande fonctionne avec des chemins absolus et des chemins relatifs (il suffit que les répertoires existent). Seule, elle sert à se replacer dans le répertoire par défaut (la HOME directory). Avec certains shell, la commande cd - permet de revenir au répertoire où l’utilisateur se trouvait précédemment. droits d’accès utilisateurs lecture = r propriétaire = u écriture = w groupe = g exécutable = x autre = o pas d’accès = tous = a commandes ajouter = + enlever = initialiser = = Tab. 5.1 – Tableau récapitulatif des droits d’accès 5.2.2.2.4 Afficher le répertoire courant La commande permettant à tout moment de connaı̂tre le répertoire dans lequel on se trouve est : pwd Il est souvent intéressant de connaı̂tre à un moment donné exactement le lieu où l’on se trouve (avant d’effectuer une suppression par exemple). M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 69 5.2.2.2.5 Type d’un fichier Il est possible sous Unix de connaı̂tre aussi le type de fichier sur lequel on travaille. En dehors de l’extension qui peut être trompeuse, tous les fichiers ont une en-tête permettant de déterminer leur type (répertoire, exécutable, texte ASCII, programme C, document Postscript...). L’ensemble de ces en-têtes est défini dans le fichier /etc/magic. La commande : file nom_de_fichier permet de visualiser le type du fichier en question. Utilisation [yann@ulysse yann]$ file playdivx playdivx: Bourne shell script text executable [yann@ulysse yann]$ file Image1.gif Image1.gif: GIF image data, version 89a, 233 x 150, [yann@ulysse images]$ file scifa2.eps scifa2.eps: PostScript document text conforming at level 3.0 - type EPS [yann@ulysse images]$ 5.2.2.2.6 Affichage du contenu d’un fichier La commande : cat [-v] [fichier...] sert à afficher le contenu d’un fichier si ce dernier est passé en paramètres. Sinon, c’est l’entrée standard qui est prise par défaut (clavier ou résultat d’une autre commande). L’option -v permet d’afficher les caractères non visibles. Cette commande permet aussi de concaténer des fichiers : cat fichier1 fichier2 > fichier3 cette opération permet de créer un fichier (fichier3) en concatenant les fichiers fichier1 et fichier2. Les notions de redirection seront plus amplement abordées dans la partie langage de commande. Le seul inconvénient de cet outil est qu’il affiche le contenu du fichier dans sa totalité (sans possibilité simple de contrôler le défilement par pages). 5.2.2.2.7 Affichage page à page La commande : more [fichier...] permet d’afficher le contenu d’un fichier page à page. Le fichier par défaut est l’entrée standard (en général le résultat de la commande située avant le |). Utilisation [yann@ulysse yann]$ ls -lR | more .: total 3516 drwxrwxr-x 4 yann yann drwxr-xr-x 3 yann yann Yann MORÈRE 4096 ao^ u 13 19:13 background/ 4096 sep 23 08:30 cours_unix/ M.S.T. Télécom 1re Année 70 -rw-r--r-drwxr-xr-x drwx------rw-r--r--rw-r--r-drwxrwxr-x -rw-r--r--rw-r--r--rw-r--r-drwxr-xr-x -rw-r--r--rw-rw-r-drwxr-xr-x drwxr-xr-x -rw-r--r--rw-rw-r--rw-rw-r--rw-rw-r-...... Cours de Système d’Exploitation UNIX 1 2 6 1 1 5 1 1 1 10 1 1 17 2 1 1 1 1 yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann 2084483 4096 4096 72 101 4096 1097 914 1375899 4096 477 171 4096 4096 1547 740 716 538 sep mai jun sep sep mai sep sep sep jui ao^ u sep jui ao^ u ao^ u jui jui jui 21 24 24 17 17 24 10 10 17 29 30 21 23 30 30 7 7 7 10:50 11:49 10:19 15:41 08:30 11:49 18:45 18:45 19:18 17:11 19:21 09:54 21:58 12:45 12:45 19:13 19:13 19:13 cours_unix.tar.gz Documents/ evolution/ fleche_selector_right.gif fleche_selector_up.gif GNUstep/ Image1.gif Image2.gif lasc.tar.gz latex/ lien.html login.txt lyx/ nedit_macros/ nedit_macros.tar.gz newfile1.lyx newfile1.lyx~ newfile1.tex (redirige la sortie de la commande ls -lR vers le more) [yann@ulysse yann]$ more .bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin TEXINPUTS=${HOME}/.lyx/layouts/texmf//:${HOME}/.lyx/layouts/texmf/tex//:/usr/share.texmf//: /texmf/tex//:. BSTINPUTS=/usr/share/texmf/bibtex/bst:/usr/share/texmf/bibtex/bst//:${HOME}/.lyx/layouts/te /bst:. BIBINPUTS=/usr/share/texmf/bibtex/bib:${HOME}/.lyx/layouts/texmf/bibtex/bib:. export PATH TEXINPUTS BIBINPUTS BSTINPUTS unset USERNAME [yann@ulysse yann]$ (affiche page à page le fichier .bash profile) En bas de chaque page de la commande more, un certain nombre d’action sont possibles : B h : permet d’afficher la liste des commandes disponibles à ce niveau, B [espace] : permet de passer à la page suivante, M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 71 B [entrée] : permet de passer à la ligne suivante, B b : permet de revenir à la page précédente, B i[espace] : permet d’afficher i lignes en plus, B = : permet d’afficher le numéro de la dernière ligne affichée, B /mot : permet de se positionner 2 lignes avant la prochaine occurrence du mot mot, B n : continue la recherche précédente (identique à /), B :f : permet d’afficher le nom du fichier et le numéro de dernière ligne affichée, B . : effectue de nouveau la commande précédente, B q ou Q : permet de sortir de more. La notion de pipe (|) sera aussi développée plus amplement dans la partie langage de commande. 5.2.2.2.8 Copier des fichiers Lorsque l’on travaille, il est parfois pratique de recopier des fichiers d’un répertoire vers un autre. Dans ce cas, il faut utiliser la commande : cp [-i] fichier_source fichier_destination Pour cela, l’utilisateur doit avoir le droit de lecture sur le fichier source, et si le fichier destination existe, il doit avoir le droit d’écriture sur ce dernier. Dans ce cas, le contenu du fichier destination est écrasé par celui du fichier source (l’option -i demande confirmation de l’opération) et le fichier destination garde ses attributs propriétaire, groupe et droits d’accès. Si le fichier destination n’existe pas et si l’utilisateur a le droit d’écriture sur le répertoire courant, le fichier destination est créé, son propriétaire et son groupe sont celui de l’utilisateur qui effectue l’opération. Ses autorisations sont celles du fichier source. La commande : cp [-i] fichiers... répertoire copie les fichiers dans le répertoire. 5.2.2.2.9 Déplacer/renommer des fichiers Il est aussi nécessaire parfois de pouvoir renommer ou déplacer des fichiers. La commande a lancer est alors : mv fichier_source fichier_destination ou mv fichiers... répertoire Elle permet de déplacer un ou plusieurs fichiers dans un répertoire avec possibilité de changer leur nom. Utilisation [yann@ulysse yann]$ mv fic fic.old (on renomme le fichier ”fic” en ”fic.old”) [yann@ulysse yann]$ mv fic* rep (on déplace l’ensemble des fichiers commençant par fic dans le répertoire ”rep”). [yann@ulysse yann]$ mv fic rep/fic1 (on déplace le fichier ”fic” dans le répertoire ”rep” et on le renomme ”fic1”). Yann MORÈRE M.S.T. Télécom 1re Année 72 Cours de Système d’Exploitation UNIX 5.2.2.2.10 Supprimer un fichier : Pour pouvoir supprimer un fichier sous Unix, il faut avoir l’autorisation d’écriture sur le répertoire contenant ce fichier, mais pas forcément la lecture ou l’écriture sur le fichier lui-même (si l’utilisateur n’a pas l’autorisation d’écriture sur le fichier, une confirmation lui est demandée). Attention : la suppression d’un fichier est une opération sensible sous Unix. En effet, elle agit physiquement, c’est à dire qu’il n’y a pas de moyen facile de pouvoir récupérer un fichier supprimé par erreur. Cette opération nécessite de faire appel aux sauvegardes (type sauvegardes temporaires ou directement aux bandes). La commande à lancer est la suivante : rm [options] fichiers... Si le fichier est un lien vers un autre, le lien est supprimé mais pas le fichier destination du lien. Voici les principales options de la commande rm : B -f : pas de demande de confirmation quand on a pas d’autorisation d’écriture sur le fichier, B -r : détruit tout le contenu du répertoire en paramètre ainsi que le répertoire lui-même, B -i : option par défaut à la création du compte, cette option demande confirmation pour chaque fichier. En cas de suppression en cascade, il peut être intéressant d’enlever cette option, attention toutefois à être sûr de l’opération et à bien remettre cette option pour les suppressions suivantes. Utilisation [yann@ulysse yann]$ rm -i fichier rm: remove fichier? [yann@ulysse yann]$ rm fichier (si pas de droit d’écriture sur fichier) rm: override protection 444 for fichier? 5.2.2.2.11 Changer les droits Nous avons vu précédemment que chaque fichier avait des attributs propres et définis. Il existe un moyen pour l’utilisateur propriétaire d’un fichier de changer les droits sur ce même fichier. La commande à utiliser est : chmod mode fichiers... Le paramètre mode indique quelles sont les autorisations données, il peut être symbolique ou absolu : B mode symbolique : le paramètre mode prend la forme suivante : [qui]... op permissions..., [op permissions...] . * qui désigne celui ou ceux qui recevront ces autorisations (u pour le propriétaire, . g pour le groupe, o pour les autres et a pour les trois précédents - c’est l’option par défaut), . * op sert à indiquer l’ajout ou la suppression de droits (+ pour ajouter, - pour enlever), . * les permissions à donner sont r, w et x M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 73 B mode absolu : le paramètre mode est représenté par un nombre octal composé de 3 chiffres. Le premier chiffre représente les autorisations du propriétaire, le second ceux du groupe et le troisième correspond à tous les utilisateurs. Pour calculer chacun des chiffres, on ajoute les valeurs des autorisations (4 pour lecture, 2 pour écriture, 1 pour exécution). Utilisation [yann@ulysse yann]$ chmod u+rwx,go+rx fichier donne tous les droits au propriétaire, et les droits en lecture et exécution aux autres utilisateurs. La commande précédente est équivalente à : [yann@ulysse yann]$ chmod 755 fichier Un autre moyen de fixer ces autorisations au moment de la création du fichier est d’utiliser le bon masque. La commande : umask [nnn] donne cette valeur par défaut. Chaque fois qu’un nouveau fichier sera créé par l’utilisateur, il aura comme droits le complément à 7 du nombre passé à umask. Par exemple : umask 026 est équivalent à un chmod 751 sur le nouveau fichier créé. 5.2.2.2.12 Les liens symboliques Afin d’éviter de dupliquer des informations et, aussi pour des raisons d’administrations, il est parfois utile de réaliser un lien symbolique entre fichiers ou entre répertoires. Par exemple, lorsqu’on travaille avec des binaires qui évoluent relativement vite et dont ont dispose de plusieurs versions, il est utile de créer ce type de fichier (xemacs bouge relativement vite, une version tous les trimestres environ, il est utile de réaliser un lien entre la version courante et un fichier xemacs par exemple...) La commande à utiliser est : ln -s fichier_source fichier_lien A noter, les droits sur le fichier lien n’ont aucun sens et ne peuvent être modifiés, il a en fait les attributs du fichier source. 5.2.2.2.13 Recherche de fichiers dans l’arborescence Il est utile de pouvoir retrouver certains fichiers dans l’arborescence du système et d’effecteur certains traitements avec cette liste de fichiers. La commande utilisée est : find répertoires... [options...] où répertoires... permet d’indiquer le (ou les) répertoire(s) de départ de la recherche et les options permettent de traiter et de récupérer les données. La commande find de nombreuses options qui permettent de rechercher des fichiers qui ont certaines caractéristiques : B -name modèle_nom : tous les fichiers dont le nom répond au modèle modèle_nom, Yann MORÈRE M.S.T. Télécom 1re Année 74 Cours de Système d’Exploitation UNIX B B B B B -size n : tous les fichiers dont la taille est n (en blocs de 512 octets), -mtime n : tous les fichiers dont le nombre de jours depuis la dernière modification est n, -atime n : tous les fichiers dont le nombre de jours depuis le dernier accès est n, -user nom : tous les fichiers dont le propriétaire est nom, -type t : tous les fichiers du type t (f pour un fichier ordinaire, et les autres abréviations comme pour la commande ls -l), B -perm nombre : tous les fichiers dont les autorisations sont de la forme nombre, B -perm - nombre : tous les fichiers dont les autorisations sont au moins de la forme nombre... D’autres options permettent de traiter les informations reçues : B -print : pour afficher à l’écran le résultat de la commande, B -exec commande \ ; : permet d’exécuter une commande sur les fichiers qui vérifient les critères de la commande find. Ces fichiers sont passés à la commande -exec par les signes . Attention à bien terminer la commande par \ ; B -ok commande \ ; : effectue la même opération que ci-dessus mais demande une confirmation de l’utilisateur avant l’exécution de la commande. Il est possible de passer plusieurs critères de sélection des fichiers. Pour cela, il faut utiliser les opérateurs logiques ! (négation), -o (ou) et regrouper tous ces critères dans des parenthèses. L’opérateur et étant obtenu par juxtaposition des critères. Utilisation [yann@ulysse yann]$ find / -name "*info*" -print affiche le nom de tous les fichiers de toute l’arborescence du système qui contiennent le mot info, [yann@ulysse yann]$ find ~ -mtime -20 -print affiche les fichiers à partir du répertoire de l’utilisateur qui ont été modifiés dans les vingt derniers jours, [yann@ulysse yann]$ find /u/students ! -user X -exec ls -lia {} \; affiche un listing détaillé de tous les fichiers qui n’appartiennent pas à l’utilisateur X dans l’arborescence /u/students, [yann@ulysse yann]$ find /u/students/X -perm -002 -exec ls -l {} \; affiche un listing détaillé des fichiers de l’arborescence /u/students/X qui ont au moins l’autorisation d’écriture pour les autres, [yann@ulysse yann]$ find . \( -name a.out -o -name core -o -name "*.o" \) -ok rm {} \; supprime après confirmation de l’utilisateur tous les fichiers à partir du répertoire courant (et dans tous les sous-répertoires) du type a.out, core et .o ... 5.2.2.3 Commandes liées aux répertoires Nous venons de voir un certain nombre de commandes liées à l’arborescence de fichiers, nous allons maintenant voir celles qui sont plus spécifiques aux répertoires. M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 5.2.2.3.1 est : 75 Créer un répertoire La commande servant à créer des répertoires sous Unix mkdir [options] répertoires... Il suffit d’avoir le droit d’écriture dans le répertoire père. Si on veut créer une arborescence directement, il faut utiliser l’option -p. Par exemple pour créer l’arborescence /tp_unix/td1, taper mkdir -p tp_unix/td1. 5.2.2.3.2 Supprimer un répertoire Comme pour les fichiers, la commande rm (avec l’option -r) permet de supprimer des répertoires. Il existe une autre commande : rmdir répertoires... qui elle permet de supprimer les répertoires indiqués si ceux-ci sont déjà vides. 5.2.2.3.3 Déplacer, changer le nom d’un répertoire Comme pour les fichiers, il s’agit de la commande mv. Ceci n’est possible sous System V que si les deux répertoires ont le même parent, et sous BSD que si les deux répertoires sont dans le même système de fichiers. 5.2.2.3.4 Copier tous les fichiers d’un répertoire La commande à utiliser est : cp -r répertoire_source répertoire_destination Toute l’arborescence du répertoire source est copié dans le répertoire destination. Les nouveaux fichiers se retrouvent dans le répertoire répertoire_destination / répertoire_source. 5.2.2.4 Gestion des sorties imprimantes Comme nous l’avons vu précédemment, vous avez la possibilité d’utiliser un certain nombre d’imprimantes. Par défaut, vous êtes connectés l’imprimante de la salle Stroustrup ou Linus : HP2100TN ou HP2100. Pour son utilisation, il y a à votre disposition plusieurs commandes qui vont vous permettre de lancer un travail d’impression, d’autres pour visualiser le contenu de la file d’attente, d’autres encore pour enlever des travaux en attente, et enfin, nous essayerons de voir comment réagir rapidement en cas de problèmes. 5.2.2.4.1 Imprimer un fichier : Nous savons maintenant, qu’il existe sous Unix un moyen de connaı̂tre le type de chacun des fichiers. Il y a donc des programmes qui permettent d’imprimer des fichiers Postscript, des fichiers ascii, des fichiers .c... Nous allons voir ces commandes. Toutes reposent sur un même concept : l’imprimante que nous avons à notre disposition est une imprimante Postscript, il faut donc lui envoyer du code postscript. Pour cela, il existe des outils qui permettent de traduire le fichier au format postscript. La commande de base pour imprimer un fichier est : lpr [options] [liste_de_fichiers] Yann MORÈRE M.S.T. Télécom 1re Année 76 Cours de Système d’Exploitation UNIX Cette commande envoie le travail d’impression dans la file d’attente, le travail sera envoyé à l’imprimante par un programme daemon (lpd). Par défaut, cette commande imprime uniquement des fichiers postscript. Si aucun fichier n’est indiqué c’est la sortie standard qui est imprimée (cf. exemple). Les options utiles de cette commande sont : B -Pprinter : pour indiquer le nom de l’imprimante sur laquelle l’impression doit être effectuée, B -h : pour supprimer la bannière d’impression (première page contenant le nom de l’utilisateur et d’autres renseignements sur le fichier), B #n : pour indiquer le nombre de copies à imprimer. Cette commande va servir de base aux autres : B a2ps nom_fichier_ascii | lpr -Pprinter permet de traduire et d’imprimer un fichier ascii en postscript (ascii2postscript), B c2ps nom_fichier.c | lpr -Pprinter permet de traduire et d’imprimer un fichier .c en postscript (c2postscript), B dvi2ps nom_fichier.dvi | lpr -Pprinter permet de traduire et d’imprimer un fichier .dvi en fichier postscript (dvi2postscript)... Et ainsi de suite, vous avez à votre disposition, sur les serveurs ou sur le net, un grand nombre de traducteurs au format postscript (man2ps, gif2ps, ttf2ps...) qui fonctionneront sensiblement de la même manière. Ces fichiers vous permettent de formater vos sorties. N’hésitez pas à consulter les pages de man au sujet de ces programmes, il vous indiqueront la marche à suivre pour pouvoir améliorer vos présentations. 5.2.2.4.2 Visualiser la file d’attente Maintenant que votre impression est lancée, elle est placée dans la file d’attente. Vous avez la possibilité de consulter la liste des fichiers en attente grâce à la commande : lpq -Pprinter [utilisateur] B -Pprinter : permet de sélectionner seulement les informations envoyées à printer, B utilisateur : permet de sélectionner uniquement les travaux lancés par l’utilisateur. Utilisation [yann@ulysse images]$ lpq lj4100TN is ready no entries [yann@ulysse images]$ 5.2.2.4.3 Enlever un travail en attente Lorsque votre impression est dans la file d’attente et si vous souhaitez l’enlever de cette dernière, utilisez la commande : lprm -Pprinter [-] [numero_job] On ne peut supprimer les impressions d’un autre utilisateur (à moins d’être root). Lorsqu’on supprime une requête, celle-ci est interrompue si elle a déjà commencé (une partie des données se trouvant dans la mémoire de l’imprimante). L’option - seule permet de supprimer toutes les requêtes que l’utilisateur a lancé. Lorsqu’on donne un numéro de job, seul celui-ci est arrêté. M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 77 5.2.2.4.4 Si il y a un problème ? Si un problème subsiste, c’est à dire si une requête bloque la sortie des autres, supprimer cette requête de la file d’attente. A l’aide de la commande lpc, redémarrez le daemon d’impression de l’imprimante, et laissez sortir les travaux en attente. Reprenez la requête bloquante ultérieurement. Utilisation [yann@ulysse images]$ lpq lj4100TN is ready no entries [yann@ulysse images]$ 5.2.2.5 Commandes d’observation du système Nous venons de voir les commandes de base permettant de travailler sur les fichiers et le répertoires. Il existe aussi certaines fonctions de base qui servent à l’observation du système : 5.2.2.5.1 Date et Heure La commande : date [format] permet d’afficher la date système au format précisé. Voici une liste succincte des différents format possibles : B %m : affichage du mois (01..12), B %d : affichage du jour dans le mois (01..31), B %y : affiche des deux derniers chiffres de l’année (00..99), B %D : affichage de la date au format mm/jj/aa, B %H : affichage de l’heure (00..23), B %M : affichage des minutes (00..59), B %S : affichage des secondes (00..59), B %T : affichage de l’heure au format HH :MM :SS B %j : affichage du numéro du jour dans l’année (001..366), B %w : affichage du jour dans la semaine (dimanche=0), B %a : affichage de l’abbréviation du jour (Sun..Sat), B %h : abbréviation du mois (Jan..Dec), B %r : affichage de l’heure au format 12h (AM/PM) ... Utilisation [yann@ulysse images]$ date ’+%a %d %h %y %T’ lun 23 sep 02 09:30:31 [yann@ulysse images]$ date lun sep 23 09:30:53 CEST 2002 [yann@ulysse images]$ Yann MORÈRE M.S.T. Télécom 1re Année 78 Cours de Système d’Exploitation UNIX 5.2.2.5.2 Identifier les utilisateurs Il est possible de savoir à tout moment qui est connecté sur quelle machine. Il existe quelques commandes de base qui permettent d’avoir des renseignements sur son propre statut ou sur celui des autres. La commande : who [am i] affiche le nom de l’utilisateur, le nom du terminal, la date et l’heure de connexion et l’écran de contrôle de chaque utilisateur actuellement sur le système. La commande : w donne les informations de who, des informations sur la charge de la machine et surtout la dernière commande lancée par les utilisateurs. La commande : id affiche les numéros et les noms de l’utilisateur et des groupes de travail auxquels il appartient. La commande : groups [utilisateur] affiche la liste des groupes de travail auxquels appartient un utilisateur X. Si aucun utilisateur n’est spécifié ceux sont les groupes auxquels appartient l’utilisateur qui a tapé la commande qui s’affichent. La commande : finger [utilisateur][@machine] permet d’avoir des informations informelles sur les utilisateurs d’une machine précisée. Si aucun utilisateur n’est spécifié, les informations concernent tous les utilisateurs connectés. Si aucun nom de machine n’est renseigné, les données portent sur la machine sur laquelle l’utilisateur qui tape la commande est connecté. La commande : chfn permet de modifier les informations informelles passées à la commande finger. 5.2.2.5.3 Dernières connexions au système Il est prudent de vérifier (commande aussi très utile à l’administrateur système) que personne ne s’est connecté sur votre login en votre absence. La commande : last [-n] [utilisateur] [terminal] M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 79 permet d’afficher les dernières connexions au système. On peut limiter le nombre de lignes renvoyées grâce à l’option -n (où n désigne le nombre de lignes affichées). On peut se limiter aussi aux connexions d’un utilisateur ou aux connexions depuis un terminal. Utilisation [root@ulysse images]# last -2 X wtmp begins Mon Sep 2 17:00:26 2002 [root@ulysse images]# 5.2.2.5.4 Occupation de l’espace disque Parfois, il arrive que vous receviez des messages du système ou même de l’administrateur système vous indiquant que vous occupez trop de place sur le disque. Il existe deux commandes qui permettent de savoir la place occupée par une arborescence, ou de connaı̂tre la place disponible dans un système de fichiers. La commande : du [options] [fichiers...] affiche le nombre de kilo-octets occupés par les fichiers (ou répertoires) passés en paramètre. L’option -s permet de réaliser un affichage silencieux c’est à dire que seul le résultat final est affiché (et donc pas d’affichage du taux d’occupation des fichiers intermédiaires). La commande : df [options] [file\_system] [fichier] renvoie le nombre de blocs de 512 octets disponibles sur le système de fichiers spécifié. Si aucun système de fichier n’est passé en paramètre, c’est le système de fichier du fichier (ou du répertoire) indiqué qui sera renvoyé. Si aucun renseignement n’est spécifié, la commande df retourne les informations sur tous les systèmes de fichiers. Attention, les sorties de cette commande diffèrent d’un OS à un autre, validez le format de sortie en fonction des options que vous trouverez dans le manuel. Utilisation [yann@ulysse images]$ du -s . 1164 . [yann@ulysse images]$ [yann@ulysse images]$ du . 12 ./.xvpics 1164 . [yann@ulysse images]$ df . SysFichier 1K-blocs /dev/hda6 6000880 [yann@ulysse images]$ df Yann MORÈRE Utilisé la capacité disponible% Monté sur 3241756 2454296 57% / M.S.T. Télécom 1re Année 80 Cours de Système d’Exploitation UNIX SysFichier 1K-blocs /dev/hda6 6000880 none 123604 [yann@ulysse images]$ Utilisé la capacité disponible% Monté sur 3241756 2454296 57% / 0 123604 0% /dev/shm 5.2.2.5.5 Charge de la machine Lorsque vous trouvez que le système n’a pas des temps de réponses assez rapides (par rapport à d’habitude), utilisez la commande : uptime qui affiche l’heure et le nombre de jour depuis la mise en route du système, le nombre d’utilisateurs et la charge moyenne de la machine la dernière minute, et dans les 5 et 15 dernières minutes. Utilisation [yann@ulysse images]$ uptime 9:39am up 2:11, 0 users, [yann@ulysse images]$ load average: 0.16, 0.07, 0.01 5.2.2.5.6 Les processus Un certain nombre de commandes Unix se rapportent à la gestion des processus. Il existe des commandes d’audit de la table (ps, pstat, top), de mise en attente d’un processus (wait), de changement de priorité (nice, renice), d’envoi de signaux aux processus (kill). Nous allons donc voir dans cette partie la syntaxe et l’usage de ces commandes. 5.2.2.5.6.1 La commande ps [options] affiche des renseignements sur les processus en cours d’exécution. Les options diffèrent suivant l’OS utilisé. Nous verrons ici les options pour un système BSD, consultez les pages de manuel pour un système System V. B -a : affiche tous les processus lancés depuis un terminal quelconque, B -x : affiche tous les processus, même ceux qui n’ont pas été lancés depuis un terminal, l’option -l rajoute des renseignements supplémentaires (le numéro du père...), B -e : affiche les valeurs des variables d’environnement, B -w et -ww : formatent le nombre de colonnes d’affichage... Si aucune option n’est spécifiée, seuls les processus lancés par l’utilisateur sont affichés. En règle générale, un certain nombre de renseignements sont donnés : B USER : le nom de l’utilisateur propriétaire du processus, B PPID : le numéro du processus père (processus qui a lancé le processus courant), B PID : le numéro du processus, B %CPU : le pourcentage de temps machine consommé par le processus, B %MEM : le pourcentage de temps mémoire consommé par le processus, B SZ : la somme de la taille des données et du segment de la pile, B RSS : la taille en mémoire réelle du processus, M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 81 B TT : le terminal depuis lequel le processus a été lancé, B STAT : l’état du processus au moment du lancement de la commande (voir ci-après), B WCHAN : l’évènement que le processus attend, B START : la jour du lancement du processus, B TIME : le temps d´exécution de la commande, B COMMAND : le libellé de la commande lancée. Cette liste représente les principaux renseignements donnés, si vous avez d’autres données affichées à l’écran, n’hésitez pas à consulter les pages de man. En ce qui concerne les états (STAT) du processus, plusieurs possibilités sont affichées : B pour la première lettre : Etat courant . R : le processus est en cours de traitement, . T : le processus est stoppé, . P : le processus attend une page (typiquement récupération des données du swap vers la mémoire réelle), . D : le processus est en attente d’une E/S disque ou NFS, . S : le processus dort depuis moins de 20 secondes, . I : le processus est idle, il dort depuis plus de 20 secondes, . Z : processus en attente d’un message du noyau (processus zombie). B pour la deuxième lettre : Etat mémoire . blanc : le processus est chargé en mémoire, . W : le processus est swappé, . > : le processus avait spécifié une taille mémoire et a dépassé cette taille. B pour la troisième lettre : Etat priorités . blanc : le processus tourne sans priorité spéciale, . N : la priorité a été réduite, . < : la priorité a été augmentée. B pour la quatrième lettre : Etat pour les traitements en mémoire virtuelle . blanc : attente d’un signal, . A : nettoyage du tas (garbage collection), . S : pour un processus traitant un programme utilisant la mémoire virtuelle pour adresser séquentiellement des données volumineuses. Utilisation [yann@ulysse images]$ ps PID TTY TIME CMD 2429 pts/0 00:00:00 bash 2455 pts/0 00:06:31 nedit 6965 pts/0 00:00:00 ps [yann@ulysse images]$ ps -aux USER PID %CPU %MEM VSZ root 1 0.0 0.2 1412 root 2 0.0 0.0 0 root 3 0.0 0.0 0 root 4 0.0 0.0 0 root 5 0.0 0.0 0 root 6 0.0 0.0 0 Yann MORÈRE RSS 504 0 0 0 0 0 TTY ? ? ? ? ? ? STAT S SW SW SWN SW SW START 07:28 07:28 07:28 07:28 07:28 07:28 TIME 0:04 0:00 0:00 0:00 0:00 0:00 COMMAND init [keventd] [kapmd] [ksoftirqd_CPU0] [kswapd] [bdflush] M.S.T. Télécom 1re Année 82 root root root root root ..... 5.2.2.5.6.2 Cours de Système d’Exploitation UNIX 7 8 12 65 507 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.3 0.0 0 0 0 1756 0 0 0 0 892 0 ? ? ? ? ? SW SW< SW S SW 07:28 07:28 07:28 07:28 07:28 0:00 0:00 0:00 0:00 0:00 [kupdated] [mdrecoveryd] [kjournald] devfsd /dev [khubd] La commande pstat [options] permet d’avoir des renseignements sur la table des processus. Cette commande est plus utilisée dans le cadre du travail de l’administrateur système. 5.2.2.5.6.3 La commande top [options] affiche et met à jour les informations sur les 15 processus les plus importants au niveau de la CPU. Cette commande est plus une commande d’audit du système. 5.2.2.5.6.4 La commande wait attend jusqu’à ce qu’un processus démarré avec un & ou passé en background se termine et sort un rapport sur les terminaisons anormales. Cette commande étant lancée depuis le terminal de l’utilisateur, le shell exécute la commande wait sans créer de nouveau processus. 5.2.2.5.6.5 Le commandes nice et renice permettent de modifier les priorités d’un processus. Ces deux commandes ne sont et ne doivent être (pour des raisons évidentes) utilisées que dans des cas limités. Sur certains systèmes, elles seront réservées à l’administrateur système. 5.2.2.5.6.6 La commande kill [-signal] pid permet d’envoyer un signal à un processus dont pid est le numéro. Le super utilisateur peut tuer tous les processus, un utilisateur ne peut quand à lui tuer que les processus qu’il a lancé. Les signaux les plus utiles sont : M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 83 B 1 (ou HUP) : hangup envoyé au processus lors d’une déconnexion, B 2 (ou INT) : interromp le processus situé au premier plan, B 3 (ou QUIT) : interromp le processus récepteur du signal et génère un core dump (image de la mémoire au moment de l’arrêt), B 9 (ou KILL) : interromp le processus récepteur du signal, B 15 (ou TERM) : termine proprement (effacement des fichiers temporaires créés) le processus récepteur, B 17 (ou STOP) : stoppe le processus récepteur. En règle générale, il est conseillé d’envoyer un signal TERM pour arrêter un processus, si ce signal n’aboutit pas utiliser alors le signal KILL. Utilisation [yann@ulysse F S UID 000 S 502 000 S 502 000 S 502 000 R 502 [yann@ulysse [yann@ulysse F S UID 000 S 502 000 S 502 000 R 502 [yann@ulysse images]$ ps -l PID PPID C PRI NI ADDR 2429 2423 0 75 0 2455 2429 4 69 0 7265 2429 2 69 0 7273 2429 0 78 0 images]$ kill -15 7265 images]$ ps -l PID PPID C PRI NI ADDR 2429 2423 0 75 0 2455 2429 4 71 0 7275 2429 0 79 0 images]$ SZ 713 2246 2489 783 WCHAN wait4 do_sel do_sel - TTY pts/0 pts/0 pts/0 pts/0 TIME 00:00:00 00:06:48 00:00:00 00:00:00 CMD bash nedit emacs ps SZ 752 2246 782 WCHAN wait4 do_sel - TTY pts/0 pts/0 pts/0 TIME 00:00:00 00:06:48 00:00:00 CMD bash nedit ps Emacs a été tué. Yann MORÈRE M.S.T. Télécom 1re Année Cette page est laissée blanche intentionnellement Chapitre 6 Le Shell - Interpréteur de commandes Nous allons étudier dans ce chapitre, tout ce qui concerne les variables d’environnement ainsi que les concepts de redirection, puis nous essayerons de mieux comprendre les mécanismes de base de l’interprétation des commandes par le shell. 6.1 Les variables Nous séparerons notre étude en trois parties : la manipulation des variables définies par l’utilisateur, puis nous nous intéresserons aux variables d’environnement, pour finir par les variables spéciales et réservées par le shell lui-même. 6.1.1 Variables simples Nous appellerons variable simple toute variable définie par l’utilisateur pour ses propres besoins. Nous verrons dans cette partie comment fonctionnent tous les mécanismes permettant de manipuler des variables. 6.1.1.1 Mécanismes d’affectation On peut affecter une chaı̂ne de caractères aux variables, et par extension, toute affectation répond à la syntaxe suivante : variable=valeur Attention, il n’y a pas d’espace de part et d’autre du signe =. De plus, la commande : variable= affecte la chaı̂ne vide à variable. 6.1.1.2 Désignation de la variable Pour désigner une variable, il suffit d’utiliser la syntaxe suivante : $variable Cette notation servira pour tous les types de variables que nous verrons par la suite. Si la variable doit être suivie d’une valeur autorisée (exemple de nom de variable auquel on ajoute séquentiellement un nombre), la notation est alors la suivante : ${variable}caractère 85 86 6.1.1.3 Cours de Système d’Exploitation UNIX Affichage d’une variable La commande : echo [-n] [texte] \$variable permet d’afficher la valeur de la variable. On peut aussi l’intégrer dans du texte. L’option -n permet d’éviter le passage à la ligne après l’affichage. 6.1.1.4 Saisie au clavier Il est parfois utile de laisser l’utilisateur entrer la valeur de ses variables. La commande : read variable... lit les valeurs sur l’entrée standard. Le premier mot est affecté la première variable et ainsi de suite. Si il y a plus de variables que de mot saisis, le shell affecte aux dernières variables la chaı̂ne vide. 6.1.1.5 1.1.5 Exportation des variables D’ordinaire, une variable n’est utilisée que dans le shell-script où elle reçoit son affectation. Si on souhaite l’utiliser pour les programmes appelés ultérieurement, on doit l’exporter. La commande : export variable... recopie la valeur des variables en paramètre dans l’environnement qui sera passé aux shellscripts ultérieurs. 6.1.1.6 Visualisation des variables disponibles La commande : printenv affiche les valeurs des variables de l’environnement du processus en cours, c’est à dire celles qu’il a reçues et celles qu’il a envoyées. La commande : set affiche les valeurs des variables disponibles, c’est à dire toutes les variables même celles qui ne seront pas transmises. 6.1.1.7 Supprimer une variable La commande : unset variable supprime la variable de la liste des variables disponibles. M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 6.1.1.8 87 Substitutions Au niveau de l’affichage, il est parfois utile de pouvoir effectuer un certain nombre de substitutions : B $paramètre : affiche la valeur courante de paramètre, B $paramètre : affiche la valeur courante de paramètre et autorise la concaténation, B $paramètre :-valeur : affiche la valeur courante de paramètre si elle est non nulle, sinon affiche valeur, B $paramètre :=valeur : affiche la valeur courante de paramètre si elle est non nulle, sinon affiche valeur et affecte à paramètre valeur, B $paramètre : ?valeur : affiche la valeur courante de paramètre si elle est non nulle, sinon on écrit valeur sur la sortie standard et on sort. Si valeur est omise, alors, on écrit sur la sortie standard le message : paramètre : parameter null or not set, 6.1.2 Variables du shell - personnalisation de l’environnement 6.1.2.1 Les principales variables Voici les principales variables d’environnement utilisées par le shell : B CDPATH : liste des répertoires recherchés quand cd est exécuté avec un nom relatif comme argument, B DISPLAY : l’écran sur lequel on travaille (par défaut :0.0), B ENV : nom d’un fichier exécuté à chaque appel de ksh, B GID : le numéro du groupe actuel de l’utilisateur, B HOME : répertoire de login, B HOST : le nom de la machine sur laquelle on se trouve, B IFS : séparateur de mots dans les commandes (espace, tabulation ou passage à la ligne) ; IFS est utilisé pour les commandes internes pour découper une liste de paramètres, B LD_LIBRARY_PATH : la liste des répertoires où les programmes trouveront leurs librairies dynamiques à l’exécution, B LOGNAME : le nom de l’utilisateur, B MANPATH : liste des répertoires où se trouvent les pages de manuel, B PATH : liste des répertoire de recherche des commandes, le séparateur est :, B PS1, PS2 : prompts initial et secondaire (habituellement $ et >), B PWD : le répertoire courant, B SHELL : le shell par défaut, B TERM : nom du type de terminal utilisé, B TERMCAP : caractéristiques du terminal (nombre de lignes, de colonnes, caractères à envoyer pour effacer l’écran, pour positionner le curseur...), B UID : le numéro de l’utilisateur. 6.1.2.2 Que se passe-t-il au login ? Nous nous placerons dans le cas où le shell par défaut est un ksh. Après le login, le fichier /etc/profile (commun à tous les utilisateurs) est exécuté. Ce fichier contiendra les variables par défaut ainsi que les principaux paramètres du système. Ensuite, l’utilisateur passe dans son répertoire par défaut, et le fichier .profile est exécuté, afin de fixer les variables d’environnement propres à l’utilisateur. Ces fichiers sont exécutés dans le shell de démarrage de la session, Yann MORÈRE M.S.T. Télécom 1re Année 88 Cours de Système d’Exploitation UNIX les variables sont donc conservées pour la suite de la session si elles ont été exportées. La variable ENV est utile pour la personnalisation de l’environnement : elle contient un nom de fichier (par défaut .kshrc) qui est exécuté à chaque fois que ksh est lancé. Le fichier .kshrc est lié à ksh alors que le fichier .profile est aussi utilisé par sh. On mettra donc dans le fichier .kshrc toutes les définitions de variables propres à ksh. 6.1.3 Variables spéciales Un certain nombre de variables sont utilisées dans les shellscripts afin de déterminer et de séparer les paramètres : B $# : donne le nombre d’arguments passés au script, B $* : donne la liste des paramètres passés au script, B $n : valeur du n-ième argument du script, B $ : équivalent à $*, mais $ signifie : $1, $2,..., $n B $$ : le numéro de processus du script, B $ ! : le numéro de processus du dernier programme lancé en background, B $ ? : le code de retour du dernier programme lancé. 6.2 6.2.1 Mécanismes d’interprétation du shell Définitions Le shell est l’interpréteur de commandes, il n’est pas inclus dans le noyau d’Unix. Quand un utilisateur rentre dans le système, le shell par défaut qui lui a été donné, est automatiquement lancé et toute la session se déroule en fait dans ce shell. Lorsque cet utilisateur tape une commande, le shell la lit, l’interprète et lance son exécution. La ligne tapée peut ne comporter qu’un seule commande mais peut aussi être beaucoup plus complexe. Le shell est comme nous le verrons plus tard un langage de programmation. 6.2.2 Commandes et processus La plupart des lignes de commandes entrées par un utilisateur entraı̂nent l’exécution d’un fichier binaire du système de fichier. Le shell lance l’exécution de ces fichiers après avoir interprété le message écrit sur la ligne. Cette exécution engendre un nouveau processus. Certaines lignes de commandes peuvent aussi engendrer plusieurs processus (lignes contenant des pipes par exemple). D’autres comportant des commandes internes au shell, et donc étant exécutables sans faire appel à un fichier externe ne nécessitent pas la création d’un nouveau processus. 6.2.3 Prompts et tourmenterais de commandes Le shell indique qu’il est prêt à recevoir une nouvelle commande en affichant le prompt (par défaut $). Toute commande se termine par un passage à la ligne, dans certains cas, le passage à la ligne à une signification particulière pour la commande tapée et n’est donc pas considéré comme un terminateur de commande. Dans ce cas, le shell affiche le deuxième prompt (par défaut >) pour indiquer qu’il attends la suite de la commande. M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 89 Il est aussi possible de taper plusieurs commandes sur la même ligne en les séparant par un ;. 6.2.4 Environnement d’une commande Toutes les commandes lancées s’exécutent dans un environnement de travail. Cet environnement peut guider les variables dans leur fonctionnement. Par exemple, lors du lancement d’un programme graphique, la requête d’affichage est envoyée sur l’écran défini par la variable DISPLAY, si celle-ci n’est pas renseignée, un message d’erreur apparaı̂t sur la ligne de commandes. Lorsqu’elle est lancée depuis un shellscript, un commande hérite de l’environnement de ce shellscript, du masque des autorisations et des fichiers qui ont été ouverts. 6.2.5 Recherche d’une commande Si la commande tapée correspond à une commande interne du shell, cette commande est exécutée à l’intérieur de ce shell. Sinon, si la commande correspond à une fonction (cf. partie sur le langage de programmation) elle est elle aussi exécutée à l’intérieur du shell. Dans tous les autres cas, la commande se réfère à un fichier de l’arborescence. Si le nom ne comporte pas de caractère /, le shell examine la variable PATH pour rechercher le répertoire où ce trouve cette commande. Un nouveau shell est alors créé pour exécuter cette commande. Si la commande est un shellscript, le shell lit toutes les lignes du script et les exécutent. Si la commande appelle un fichier binaire exécutable, le code et les données associées du processus du deuxième shell sont remplacés par le code et les données associés à la commande. 6.2.6 Les alias Un alias donne un synonyme pour une chaı̂ne de caractères dans une commande. On peut ainsi redéfinir toutes les commandes en fonction de ses propres besoins. Par exemple, il est courant d’avoir un alias sur la commande rm qui transforme celle-ci en rm -i. La commande : alias nom_alias=’commande’ permet de définir un alias. Si ce dernier est utile pour toutes les sessions, il est utile de les placer dans le fichier .kshrc. La commande : alias permet d’afficher tous les alias utilisés dans la session. Pour défaire un alias, utiliser la commande : unalias nom_alias. Yann MORÈRE M.S.T. Télécom 1re Année 90 Cours de Système d’Exploitation UNIX 6.2.7 Substitution de commande Le shell interprète la commande ‘commande‘ en la remplaçant par tous ce que la commande envoie sur la sortie standard. À noter : 1. La commande est exécutée dans un sous-shell, 2. L’interprétation à l’intérieur des ‘ est complexe : le shell commence par enlever tous les \ (qui inhibent les mots à interpréter) qui précèdent un $, un ‘ ou un \, ensuite, la commande entre ‘ est interprétée comme une commande normale. 3. Lorsque la substitution de commande se trouve dans une redirection, la commande entre ‘ est concernée par cette redirection, il y a donc un ordre dans l’interprétation des commandes. 6.2.8 Substitution de nom de fichier et autres caractères spéciaux Il existe sous Unix des méta caractères qui sont utilisés pour la substitution des noms de fichiers : B ? : remplace un caractère quelconque dans un nom de fichier, B * : remplace n’importe quelle chaı̂ne de caractères (y compris la chaı̂ne vide), B [...] : remplace l’un des caractères entre crochets (on peut donner un intervalle), B [ !...] : remplace l’un des caractères qui n’est pas entre crochets. D’autres notations sont utiles : B (...) : exécute les commandes de ... dans un sous-shell, B ... : exécute les commandes de ... dans le shell courant, B commande1 && commande2 : exécute commande1, si le code de retour est OK alors on exécute commande2, B commande1 || commande2 : exécute commande1, si le code de retour est mauvais alors on exécute commande2. 6.2.9 Mécanismes d’interprétation Nous allons voir dans cette section comment les lignes de commande sont interprétées par le shell avant que ce dernier ne la lance. Le shell repère dans un premier temps les redirections et les pipes. L’interprétation des parties correspondant aux fichiers dans les redirections est différente du reste de la ligne. Les affectations sont aussi traitées à part. Pour les autres parties, voilà les tâches effectuées par le shell (par ordre d’exécution) : 1. substitution des alias, 2. substitution du caractère , 3. substitution des paramètres de position et de variables ($variables), 4. substitution des commandes (entre ‘) 5. interprétation des espaces (afin de distinguer les différents mots de la commande), 6. génération de noms (pour tout ce qui concerne les méta-caractères *, ?, ou [..]), et si aucun fichier ne correspond au modèle donné, le modèle est laissé de côté. Toutefois, il existe un moyen de dépersonnaliser les substitutions avec les caractères réservés suivants : M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 91 B \ : inhibe l’interprétation spéciale du caractère suivant. Trois cas de figures sont possibles : . si \ est entre guillemets, il est laissé, sauf si il est suivi de $, ‘, \ ou ”; dans ce cas, il est enlevé et le caractère suivant perd sa signification spéciale, . si \ n’est pas entre guillemets, il est enlevé et le caractère suivant perd sa signification spéciale (s’il en avait une) ; si le caractère suivant est un passage à la ligne, les deux caractères (\ et passage à la ligne) sont enlevés, . si \ est entre ‘, il est laissé sauf si il est suivi de $, ‘ ou ”; dans ce cas, il est enlevé et le caractère suivant perd sa signification spéciale. B ’ : inhibe toute interprétation ; B " : inhibe l’interprétation des espaces, la génération de noms, la substitution des alias et de , mais pas la substitution des paramètres et des commandes. Une apostrophe n’est pas interprétée entre deux guillemets, ce qui permet de mettre le caractère ’ dans une chaı̂ne. Utilisation [yann@ulysse mst_telecom_1]$ var=etudiant [yann@ulysse mst_telecom_1]$ echo $var etudiant [yann@ulysse cours_unix]$ echo $var xyz ‘pwd‘ etudiant xyz /home/yann/cours_unix [yann@ulysse cours_unix]$ echo \$var $var [yann@ulysse cours_unix]$ echo "\$var xyz ‘pwd‘ *" $var xyz /home/yann/cours_unix * [yann@ulysse cours_unix]$ echo ’$ represente le symbole ’ "’dollar’" $ represente le symbole ’dollar’ [yann@ulysse cours_unix]$ 6.2.10 Lancement de l’exécution d’un shellscript On appelle shellscript un fichier qui contient des noms de commandes et des instructions internes au shell. L’utilisateur peut lancer un shellscript commande une commande. Les commandes contenues dans le shellscript sont alors lancées comme si l’utilisateur les tapait sur la ligne de commande. On peut lancer l’exécution d’un shellscript de trois manières différentes : 6.2.10.1 Lancement par le nom du shellscript Si l’utilisateur a le droit de lecture et d’exécution sur le shellscript, il peut le lancer en tapant simplement son nom. Il se comporte alors comme n’importe quelle commande. En particulier, il peut être utilisé par un autre shellscript. On peut construire ainsi de nouvelles commandes adaptées à ses propres besoins. Lors de l’appel, le shell parcours la variable PATH pour trouver le fichier, donc par prudence, il est bon de lancer le script comme suit : ./shellscript, ceci évitera le temps de recherche du script dans les arborescences de répertoires et surtout l’exécution d’un autre script portant le même nom. Yann MORÈRE M.S.T. Télécom 1re Année 92 Cours de Système d’Exploitation UNIX 6.2.10.2 Lancement par appel explicite du shell Si le script porte un attribut de lecture, on peut le lancer par appel explicite du shell : /bin/ksh nom_script Dans ce cas, un nouveau shell est lancé, celui-ci lit les commandes du script et les fait exécuter comme si elles avaient été tapées au clavier. 6.2.10.3 Lancement par appel de la commande interne . La dernière solution consiste à faire précéder le nom du fichier par un . : . shellscript Dans ce cas, il n’y a pas de création d’un nouveau processus, les modifications de l’environnement sont conservées. En fait, . est une commande interne au shell qui lit toutes les commandes contenues dans le shellscript et les exécute comme si elles avaient été tapées au clavier. De la même façon, la variable PATH est parcourue pour déterminer l’emplacement dans le système de fichiers du script. 6.3 Les redirections Avant de lancer un processus, le shell lui attribue trois fichiers : B Une entrée standard (par défaut le clavier), B Une sortie standard (par défaut l’écran), B Une sortie d’erreur standard (par défaut l’écran). Ces trois directions peuvent être liés à d’autres fichiers que ceux indiqués ci-dessus grâce aux commandes de redirection. Le shell associera donc d’autres fichiers que le clavier ou l’écran et il lancera ensuite la commande. 6.3.1 Redirections des sorties 6.3.1.1 Redirection avec écrasement du fichier de redirection Cette opération consiste à rediriger la sortie standard d’une commande dans un autre fichier par la commande : commande > fichier Tout ce qui est envoyé vers la sortie standard est donc renvoyé vers ce fichier. La redirection est donc écrite à la suite de la commande sur laquelle elle agit. Si le fichier existe déjà, son contenu est écrasé, sinon il est créé. 6.3.1.2 Redirection avec ajout à la fin du fichier de redirection L’opération fonctionne de la même façon que la précédente, la commande diffère : commande >> fichier M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 6.3.1.3 93 Redirection du fichier d’erreur Le fichier d’erreur peut être redirigé en ajoutant : commande 2>fichier (ou commande 2>>fichier) Si, par exemple, on ne veut pas que les messages d’erreur s’affichent à l’écran, la commande est : commande 2> /dev/null (/dev/null est un pseudo fichier sorte de vide-poches (trou noir) où aucun message n’est conservé). 6.3.2 Redirection des entrées Dans le cas où on veut récupérer les données non plus du clavier mais d’un fichier, on utilise la commande : commande < fichier On peut définir ainsi plusieurs redirections dans une même commande : tr "[a-z]" "[A-Z]" < fichier1 > fichier2 écrit en majuscules dans fichier2 le contenu de fichier1. Fig. 6.1 – Redirections des entrées 6.3.3 La notion de pipe Les données de sortie d’une commande peuvent servir directement comme données en entrée à une autre commande. Pour effectuer cette opération, il suffit de placer un | entre les deux commandes : commande1 | commande2 | ... Chacune des commandes est exécutée dans son propre shell. Le code de retour du pipe est le code de retour de la dernière commande exécutée. Utilisation Yann MORÈRE M.S.T. Télécom 1re Année 94 Cours de Système d’Exploitation UNIX [yann@ulysse images]$ total 1160 294750 drwxrwxrwx 294671 drwxr-xr-x 294747 -rw-r--r-294788 -rw-r--r-294748 -rw-r--r-294763 -rw-rw-rw294764 -rw-rw-rw294776 -rw-r--r-294765 -rw-rw-rw294766 -rw-rw-rw294779 -rw-r--r-294767 -rw-rw-rw294768 -rw-rw-rw294783 -rw-r--r-294761 -rw-rw-rw294762 -rw-rw-rw294755 -rw-r--r-294777 -rw-r--r-294778 -rw-r--r-294782 -rw-r--r-294781 -rw-r--r-[yann@ulysse images]$ ls -lia | more 3 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann yann 4096 4096 227919 178820 21390 5185 16164 23446 5308 17780 26287 5965 20022 49006 7682 37914 53248 32772 25129 3956 2444 sep sep sep sep sep sep sep sep sep sep sep sep sep sep sep sep sep sep sep sep sep 21 24 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 10:40 08:54 18:50 18:50 18:50 18:50 18:50 18:50 18:50 18:50 18:50 18:50 18:50 18:50 18:50 18:50 18:50 18:50 18:50 18:50 18:50 ./ ../ capture.eps capture.jpg fig_E_S.eps fig_E_S.gif fig_E_S.jpg fig_pipe.eps fig_pipe.gif fig_pipe.jpg fig_tee.eps fig_tee.gif fig_tee.jpg icone.eps icone.gif icone.jpg jpeg2ps.exe login.eps login.jpg logo_metz.eps logo_metz.jpg permet d’afficher en mode page à page [yann@ulysse images]$ ls -lia | sort | lpr [yann@ulysse images]$ permet de trier les fichiers d’un répertoire et de les imprimer par ordre alphabétique. Il est possible aussi de renvoyer la sortie en même temps sur la sortie standard et dans un fichier. La commande à utiliser est : tee fichier Utilisation [yann@ulysse images]$ ls -lia | tee fichier | sort [yann@ulysse images]$ permet de conserver le résultat de ls -lia dan sun fichier et de le trier par sort. Ce mécanisme de pipe est donc très intéressant à utiliser dans l’écriture de shellscripts. M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 95 Fig. 6.2 – Mécanisme de fonctionnement de ”|” Fig. 6.3 – Mécanisme de fonctionnement de tee 6.4 6.4.1 Lancement de processus en arrière plan Définition Lorsqu’on lance une commande, le shell attend la fin de l’exécution de cette dernière avant de redonner la main à l’utilisateur. Si on ajoute un & à la fin de la ligne de commande, le shell n’attends plus la fin de l’exécution de cette commande, il la lance en arrière plan. Quand on lance une commande en arrière plan dans un shell interactif (c’est à dire pas dans un shellscript), le shell renvoie à l’écran le numéro du job pour le shell qui a lancé la commande ainsi que le numéro du processus dans la table des processus. Utilisation [yann@ulysse images]$ xeyes & [2] 3523 [yann@ulysse images]$ où [2] représente le numéro du job et 3523 le numéro du processus dans la table. Le caractère & est un terminateur de commande, il est donc possible de taper une commande à la suite sans passage à la ligne. Attention : ls > toto & lance la commande ls en arrière plan en redirigeant les noms de fichiers sur le fichier toto, alors que ls & > toto lance la commande ls en arrière plan en affichant à l’écran les noms de fichiers et ensuite effectue une redirection dans le fichier toto (la redirection n’a donc aucun effet sur la commande). Yann MORÈRE M.S.T. Télécom 1re Année 96 6.4.2 Cours de Système d’Exploitation UNIX Gestion des jobs Suivant le shell (ksh, zsh mais pas sh), l’utilisateur dispose de plusieurs commandes pour choisir le lieu d’exécution d’une commande : B pour voir la liste des processus avec leur numéro pour le shell en cours, utiliser la commande : jobs [-l] B pour stopper un processus en cours, taper : Ctrl z, B pour passer un processus en arrière plan, taper : bg [%n], B pour ramener un processus au premier plan, taper : fg [%n]. Ceci permet de stopper provisoirement un processus pour effectuer une tâche annexe et de revenir immédiatement au processus choisi. M.S.T. Télécom 1re Année 5 octobre 2003 Chapitre 7 Le Shell - Langage de programmation Nous venons de voir les principales fonctionnalités du shell lui-même puis, son aspect interpréteur de commande, nous allons voir dans ce chapitre le rôle langage de programmation du shell. 7.1 Tests divers La commande : test condition \&\& alors || sinon ou [ condition ] \&\& alors || sinon est utilisée dans de nombreux cas par les structures de contrôle du shell. Cette commande renvoie 0 si la condition est vérifiée et une valeur différente de 0 sinon. Dans la deuxième syntaxe, il faut faire attention à mettre des espaces entre les crochets et la condition. Voici les principales conditions : B -d fichier : vrai si fichier est un répertoire (et si il existe), B -e fichier : vrai si le fichier existe, B -f fichier : vrai si fichier est un fichier ordinaire (et si il existe), B -r fichier : vrai si l’utilisateur a le droit d’accès en lecture sur fichier (s’il existe), B -w fichier : vrai si l’utilisateur a le droit d’accès en écriture sur fichier (s’il existe), B -x fichier : vrai si l’utilisateur a le droit d’accès en exécution sur le fichier (s’il existe), B -c fichier : vrai si le fichier est un fichier caractère spécial (et si il existe), B -b fichier : vrai si le fichier est un fichier bloc (et si il existe), B -s fichier : vrai si fichier n’est pas vide, B -L fichier : vrai si fichier est un lien symbolique, B fichier1 -nt fichier2 : si fichier a été modifié plus récemment que fichier2, B -n cha^ ıne : vrai si chaı̂ne n’est pas vide, B -z cha^ ıne : vrai si chaı̂ne est vide, B nb1 eq nb2 : vrai si les deux nombres entiers nb1 et nb2 sont égaux, on peut remplacer eq par ne (différent), gt (supérieur), ge (supérieur ou égal), lt (inférieur), le (inférieur ou égal). B chaine1 = chaine2 : vrai si les deux chaı̂nes sont identiques, 97 98 B B B B Cours de Système d’Exploitation UNIX chaine1 != chaine2 : vrai si les deux chaı̂nes ne sont pas identiques, -a : opérateur logique et, -o : opérateur logique ou, ! : négation logique Utilisation [yann@ulysse images]$ test -f login.jpg && echo fichier || echo pas fichier fichier [yann@ulysse cours_unix]$ test \( -d images -o -f logo_metz.jpg \) -a $variable=2 && echo o ok [yann@ulysse cours_unix]$ 7.2 Décaler la position des paramètres Dans un shellscript, nous savons récupérer, à l’aide des variables spéciales, le contenu des paramètres passés. Il est parfois utile de pouvoir mettre ces paramètres dans un ordre voulu. La commande : shift [n] permet de déclarer les paramètres de n positions. Par défaut, la valeur de n est 1, dans ce cas là, $2 devient $1, $3 devient $2 etc... 7.3 Sortie d’un shellscript Pour sortir d’un shellscript et renvoyer un code de retour, utiliser la commande : exit n le code de retour est alors n. Si le shellscript ne se termine pas par un exit, il renvoie le code de retour de la dernière commande exécutée. 7.4 Les structures de contrôle Nous venons de voir que toutes les commandes Unix renvoient un code qui est un nombre entier. En général, si la commande s’est bien déroulée, elle renvoie 0, sinon elle renvoie un nombre négatif ou positif. Comme dans tout langage de programmation, il y a dans le shell Unix un certain nombre de fonctions qui assurent le contrôle des données et des paramètres : M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 7.4.1 99 if..then..else..fi La commande : if test then liste_de_commandes else liste_de_commandes fi teste la valeur renvoyée par le test après le mot if et en fonction de ce code, lance la liste de commande appropriée (si le code=0 alors on exécute les commandes après le mot then sinon les commandes après le mot else). Utilisation Programme qui supprime interactivement selon la réponse [yann@ulysse cours_unix]$ cat virer echo -n "Suppression interactive ?" read reponse if test "$reponse" = oui then rm -i $@ else rm $@ fi [yann@ulysse cours_unix]$ ./virer schmu Suppression interactive ?oui rm: Ne peut enlever ‘schmu’: Aucun fichier ou répertoire de ce type [yann@ulysse cours_unix]$ Il existe une variante pratique de if : if condition then ligne_commande elif condition2 then ligne_commande ... fi fi Yann MORÈRE M.S.T. Télécom 1re Année 100 7.4.2 Cours de Système d’Exploitation UNIX case..esac Nous avons aussi besoin de structures permettant de faire des choix multiples : case mot in modèle 1) liste_commande;; .. modèle n) liste_commande;; *) liste_commande;; esac Le premier modèle rencontré qui répond à la valeur de mot indique la liste de commandes à exécuter. Si mot ne correspond à aucun modèle, l’instruction se poursuit jusqu’à la condition *) et si celle-ci n’existe pas, jusqu’au esac. Les modèles sont de la forme : valeur1 | valeur2 | ... | valeurn Dans les modèles, on peut utiliser les caractères spéciaux *, ?, [] comme dans le cas de la recherche d’un fichier. Utilisation Programme qui supprime interactivement selon la réponse [yann@ulysse cours_unix]$ cat virer2 echo -n "Suppression interactive ?" read reponse case $reponse in o|O|oui|OUI) rm -i $@;; n|N|non|NON) rm $@;; *) echo "Réponse non valide" ./virer2 $@;; esac [yann@ulysse cours_unix]$ ./virer2 chmu Suppression interactive ?t Réponse non valide Suppression interactive ?u Réponse non valide Suppression interactive ?o rm: Ne peut enlever ‘chmu’: Aucun fichier ou répertoire de ce type [yann@ulysse cours_unix]$ 7.4.3 for..do..done Certains traitement sont répétitifs, une commande doit être lancée pour un grand nombre de paramètres du shellscript. Ceci nécessite l’usage d’une fonction qui boucle sur tous ses paramètres. La commande : M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 101 for variable [in mots...] do liste_commandes done variable prend tour à tour toutes les valeurs de la liste des mots (qui suivant in). Pour chacune de ces valeurs, la liste de commandes est exécutée. Si in mots... n’est pas présent, variable prend toutes les valeurs du script, ce qui est équivalent à for variable in $@. Utilisation Programme qui recopie tous les fichiers *.c du répertoire courant dans une autre (afin d’en faire la sauvegarde) [yann@ulysse cours_unix]$ for i in *.c > do > cp \$i rep/ > done [yann@ulysse cours_unix]$ 7.4.4 while..do..done La commande : while liste_de_commandes1 do liste_de_commandes2 done exécute la liste de commandes 2 tant que le code retour de la liste de commandes 1 est 0. Utilisation Programme qui affiche tous les paramètres d’un script (un par ligne) [yann@ulysse cours_unix]$ while test $1 > do > echo $1 > shift > done [yann@ulysse cours_unix]$ 7.4.5 until..do..done Cette commande est semblable à la précédente à la différence près que la sortie de la boucle s’effectue si la liste de commandes qui suit until renvoie 0. Syntaxe de la commande : Yann MORÈRE M.S.T. Télécom 1re Année 102 Cours de Système d’Exploitation UNIX until liste_de_commandes1 do liste_de_commandes2 done 7.4.6 Instructions liées aux boucles A l’intérieur de ces différentes structures, il est important que l’utilisateur puisse fixer lui même et selon ses propres critères la sortie de boucles. La commande : continue [n] permet de sauter à la fin de la boucle et de recommencer une nouvelle boucle. La commande : break [n] provoque, quand à elle la sortie de la boucle en cours et passe à l’instruction qui suit la boucle. Dans les deux cas, l’entier n permet d’indiquer que l’action se porte sur une boucle externe. Par exemple, break 2 sortira de la boucle qui englobe la boucle dans laquelle cette instruction est écrite. 7.5 Commandes built-in diverses Un certain nombre de commandes sont contenues dans le shell lui-même. Ce sont des mots réservés. En voici une liste succincte : B cd : permet de changer de répertoire courant, B eval cha^ ınes... : interprète les chaı̂nes et les exécute comme si elles avaient été tapées au clavier. Par exemple : eval dernier paramètre=’$’$# affecte à la variable dernier paramètre le numéro de la dernière valeur passée au shellscript, B exit : termine le shell courant, B exec commande : la commande est exécutée dans le shell courant ; le sortie de cette commande est la même que celle du shell courant, on ne revient donc jamais d’un exec, B export : exporte les variables dans l’environnement, B read : lit la ligne sur l’entrée standard et affecte les variables données en arguments, B readonly : les variables données sont positionnées mais non modifiables, B set : permet de modifier les options du shell courant (voir plus loin), B shift : décale d’un cran vers la gauche la liste des paramètres, B trap [liste_de_commandes] n... : spécifie le comportement du shell en fonction des interruptions, la liste de commandes sera exécutée si le programme reçoit un des signaux dont le numéro est n ; si n égal 0 alors la liste de commandes sera exécutée à la sortie du shell en cours, B umask : permet de changer le masque de création par défaut des autorisations sur un fichier, M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 103 B wait [n] : attends la fin d’une commande lancée de manière asynchrone, l’entier n spécifie le numéro du processus père de celui que wait attends, B : : cette commande ne fait rien mais évalue ses arguments, elle renvoie le code 0 ce qui permet de créer des boucles infinies, B . : exécute le fichier donné en argument dans le shell courant La commande : set [options] permet de déterminer les caractéristiques des variables d’environnement du shell courant et de ses descendants. Plusieurs options sont possibles, les plus utilisées sont : B -a : exporte automatiquement toutes les variables qui sont définies ou modifiées ultérieurement, B -e : sort immédiatement si une commande retourne un statut différent de 0, B -f : supprime la génération des noms de fichiers, B -h : localise et mémorise les commandes fonctions au moment de leur définition (en général, les fonctions sont localisées au moment de leur exécution), B -k : tous les arguments sont chargés dans l’environnement, et pas seulement celles que précède le nom de la commande, B -n : lit les commandes mais ne les exécute pas, il en vérifie simplement la syntaxe, B -t : sort après exécution de la commande, B -u : traite les variables non fixées comme des erreurs au moment de la substitution, B -v : pour faire afficher les lignes d’un shellscript au moment où elles sont lues par le shell, B -x : affiche chaque commande et ses arguments précédés par le signe +, B +option : pour inhiber la commande set -option précédente., 7.6 Calculs, traitements des chaı̂nes de caractères Nous allons voir dans cette partie plus en détail la commande : expr arguments... Cette commande évalue les arguments comme une expression. Le résultat est envoyé sur la sortie standard. Ce n’est pas une commande interne au shell. arguments est une expression comprenant des opérateurs. Les opérateurs suivant sont classés par ordre de priorité croissante et regroupés par groupes d’égale priorité : B exp1 \ | exp2 : retourne exp1 si elle est non nulle et non vide, sinon retourne exp2 si exp2 est non nulle et non vide, sinon retourne 0 ; B exp1 \ & exp2 : retourne exp1 si aucune des expression n’est vide ou nulle, 0 sinon, B exp1 op_comp exp2 : où op comp est un opérateur de comparaison (<, <=, =, !=, >=,>) ; retourne 0 si vrai, 1 sinon, B exp1 + exp2 : addition, B exp1 - exp2 : soustraction, B exp1 \* exp2 : multiplication, B exp1 / exp2 : division, B exp1 \% exp2 : modulo, B cha^ ıne : renvoie chaı̂ne sur la sortie standard si la chaı̂ne est non vide, 0 sinon, Yann MORÈRE M.S.T. Télécom 1re Année 104 Cours de Système d’Exploitation UNIX B cha^ ıne : expression-régulière : renvoie le nombre de caractères de chaı̂ne qui peuvent être désignés par l’expression régulière. Utilisation programme qui incrémente la valeur d’une variable de 1, affichage des nombres entiers de 1 à 10 : yann@yoda:~/latex/enseignement/cours_unix$ more test3 a=1 while [ $a -lt 10 ]; do echo $a; a=‘expr $a + 1‘; done yann@yoda:~/latex/enseignement/cours_unix$ ./test3 1 2 3 4 5 6 7 8 9 yann@yoda:~/latex/enseignement/cours_unix$ affichage de la valeur du paramètre précédé d’un - dans un script : yann@yoda:~/latex/enseignement/cours_unix$ expr test3 : ’-\(.*\)’ yann@yoda:~/latex/enseignement/cours_unix$ M.S.T. Télécom 1re Année 5 octobre 2003 Chapitre 8 Manipulation des données d’un fichier 8.1 Trier les lignes d’un fichier La commande : sort [options] [fichiers...] trie les lignes des fichiers, la sortie se faisant sur la sortie standard. Le tri s’effectue sur une ou plusieurs clés extraites de chaque ligne. Voici les principales options qui vont permettre de réaliser ce tri : B +pos1 -pos2 : permet d’indiquer le début et la fin d’un clé de tri ; celle-ci peut être composée de plusieurs zones de tri concaténées. Le tri commence au champs pos1+1 et se termine au champ pos2+1. S’il n’y a pas de pos2, la zone de tri va jusqu’à la fin de la ligne, B -t séparateur : indique le caractère qui sépare les différents champs. Si un séparateur n’est pas défini, les champs sont séparés par toute suite d’espace ou de tabulations contigus, B -b : ignore les espaces et les tabulations de tête dans chaque champ, B -n : effectue un tri numérique sur les champs, B -f : ignore la différence entre majuscules et minuscules, B -c : affiche un message si les lignes ne sont pas dans le bon ordre, B -o fichier : sort le résultat du tri dans fichier (attention sort fich > fich détruit fich avant de le trier, préférer cette option à toute redirection !), B -r : inverse l’ordre de tri, B -u : ne garde qu’une ligne par clé... Utilisation yann@yoda:~/latex/enseignement/cours_unix$ sort -t: +2 -3 /etc/passwd tri le fichier /etc/passwd par numéro d’utilisateur yann@yoda:~/latex/enseignement/cours_unix$ total 108 drwxrwxrwt 6 root root 4096 drwxr-xr-x 9 root root 24576 drwxr-xr-x 5 root root 4096 105 ls -l / | sort -b +2 -3 +7 sep 25 06:29 tmp ao^ u 29 12:08 dev ao^ u 29 12:23 lib 106 Cours de Système d’Exploitation UNIX drwxr-xr-x 2 root root 4096 drwxr-xr-x 2 root root 4096 drwx-----2 root root 16384 lrwxrwxrwx 1 root root 25 lrwxrwxrwx 1 root root 25 drwxr-xr-x 2 root root 4096 drwxr-xr-x 2 root root 4096 drwxr-xr-x 2 root root 4096 dr-xr-xr-x 91 root root 0 drwxrwsr-x 5 root staff 4096 drwxr-xr-x 13 root root 4096 drwxr-xr-x 17 root root 4096 drwxr-xr-x 100 root root 8192 drwxr-xr-x 2 root root 4096 drwxr-xr-x 11 root root 4096 drwxr-xr-x 3 root root 4096 -rw-r--r-1 root root 3170 drwxr-xr-x 2 root root 4096 yann@yoda:~/latex/enseignement/cours_unix$ ao^ u jun jun jun jun jun jun jun ao^ u jui jun jun sep jun jui jun jun fév 29 11 11 11 11 11 11 11 29 3 11 11 23 28 29 17 11 8 12:23 12:40 13:39 13:48 13:57 14:08 14:08 14:08 14:08 14:44 15:06 15:21 15:30 15:47 16:12 18:08 19:20 2002 sbin boot lost+found vmlinuz.old -> boot/vmlinuz-2.4.18vmlinuz -> boot/vmlinuz-2.4.18-bf2. cdrom floppy initrd proc home usr var etc bin root opt XF86Config.new mnt tri de la liste des fichiers sous la racine par propriétaire (+2 -3) et par nom de fichier 8.2 Recherche d’une chaı̂ne de caractères La commande : grep [option] expression-régulière [fichiers...] affiche à l’écran les lignes des fichiers qui contiennent une chaı̂ne de caractères correspondant à l’expression régulière donnée. Cette commande est souvent utilisée après un pipe. Les options les plus courantes sont : B -c : qui affiche seulement le nombre de lignes contenant la chaı̂ne, B -i : qui ignore la différence entre minuscules et majuscules, B -n : qui affiche les numéros de lignes. Utilisation yann@yoda:~/latex/enseignement/cours_unix$ ls -l | grep *.c yann@yoda:~/latex/enseignement/cours_unix$ affiche tous les fichiers .c du répertoire courant yann@yoda:~/latex/enseignement/cours_unix$ grep -i mot * affiche le nom du fichier et la ligne contenant le mot M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 8.3 107 Compter les caractères, les mots, les lignes La commande : wc [options] [fichiers...] permet de compter le nombre de lignes, de mots et de caractères de chaque fichier. Si des fichiers ne sont pas spécifiés, l’entrée standard est prise par défaut. Les options sont : B -l : pour afficher seulement le nombre de lignes, B -w : pour afficher seulement le nombre de mots, B -c : pour afficher seulement le nombre de caractères. 8.4 Conversion et suppression de caractères La commande : tr [-d] cha^ ıne1 cha^ ıne2 transforme les caractères provenant de l’entrée standard comme suit : les caractères contenus dans chaı̂ne1 sont remplacés par ceux correspondant dans chaı̂ne2, les autres étant conservés tels quels. Le tout est envoyé ensuite vers la sortie standard. L’option -d, permet de supprimer les caractères qui ne sont pas compris dans chaı̂ne1 Utilisation yann@yoda:~/latex/enseignement/cours_unix$ tr aeiou AEIOU bonjour bOnjOUr yann@yoda:~/latex/enseignement/cours_unix$ tr -d ac abcad bd yann@yoda:~/latex/enseignement/cours_unix$ 8.5 Comparaison du contenu de 2 fichiers Il existe deux moyens de comparer un fichier, soit la comparaison réelle, soit la différence. Ces commandes peuvent être utilisées dans des shellscripts, pour effectuer une réelle comparaison en vue de modification, préférez les outils livrés avec les éditeurs emacs ou xemacs. 8.5.1 Comparaison de 2 fichiers La commande : cmp [-s] fichier1 fichier2 affiche le premier octet différent dans deux fichiers. L’option -s permet d’avoir un code retour plutôt qu’un affichage. Le code est 0 si les deux fichiers sont identiques, 1 s’ils sont différents et 2 s’il y a eu une erreur. Yann MORÈRE M.S.T. Télécom 1re Année 108 8.5.2 Cours de Système d’Exploitation UNIX Différence entre 2 fichiers La commande : diff [-e] fichier1 fichier2 indique quelle ligne doivent être changées dans fichier1 pour qu’il soit identique à fichier2. L’option -e affiche les différences sous une forme semblable aux commandes de l’éditeur ed. 8.6 8.6.1 Extraire le début ou la fin d’un fichier Début du fichier La commande : head [-n] [fichiers...] affiche sur la sortie standard les n premières lignes de chacun des fichiers. Par défaut, la valeur de n est fixée à 10. 8.6.2 Fin du fichier La commande : tail [début] [fichier] affiche la fin du fichier sur la sortie standard. La première ligne affichée est indiquée par début qui peut être du type : B +n : nième ligne du fichier, B -n : nième ligne à partir de la fin du fichier. 8.7 Autres commandes utiles Les commandes suivantes peuvent aussi vous être utiles : B split : fractionnement horizontal d’un fichier, B cut : fractionnement vertical d’un fichier, B paste : recollement vertical de plusieurs fichiers, B uniq : sélection/rejet de lignes consécutives en double, B comm : sélection/rejet de lignes communes à deux fichiers, B join : jointure (relationnelle) de 2 fichiers sur une zone commune, B od : visualisation des octets d’un fichier, B dd : copie d’un fichier avec conversion... M.S.T. Télécom 1re Année 5 octobre 2003 Chapitre 9 Introduction au système X-Window 9.1 9.1.1 Introduction Systèmes de fenêtrage Le principe des systèmes de fenêtrage est de découper un écran physique en plusieurs zones logiques, appelées fenêtres, chacune d’entre elles étant affectée à une application. Différentes applications peuvent donc s’exécuter parallèlement sur une machine et s’afficher sur un même écran, le système de fenêtrage étant chargé de gérer et maintenir la cohérence de chaque zone logique. Le dispositif de pointage (communément la souris) sert à désigner les différentes zones, pour par exemple, spécifier quelle est celle qui doit recevoir les caractères tapés au clavier. Les principales avancées dans le domaine des systèmes de fenêtrage furent réalisées au centre de recherche Xerox PARC (Palo Alto Research Center ), où furent développés les premiers systèmes alliant écrans à points, dispositif de pointage et multi fenêtrage. Xerox commercialisa tout d’abord les stations de travail Star en 1981, puis la société Apple commercialisa sur ce même principe la machine Lisa en 1983 et enfin le Macintosh en 1984. 9.1.2 Le projet Athena Ce projet démarra en 1983, au MIT (Massachusetts Institute of Technology), son but était de fournir l’accès en libre service aux ressources informatiques du campus à tous les étudiants, aussi simplement et naturellement qu’ils avaient accès au téléphone. Pour ce faire, il fallait installer 4000 stations de travail Unix connectées entre elles, mais aussi imaginer et développer les logiciels nécessaires à leur fonctionnement. Cette entreprise sans précédent fut largement supportée et financée par les grands constructeurs informatiques de l’époque tels que Dec, IBM, Motorola,... qui fournirent à la fois le matériel et l’essentiel de la main d’&oe ;uvre, le projet étant dirigé par les chercheurs du MIT, dont Bob Scheifler, qui dirigeait le MIT X Consortium. L’intérêt des constructeurs était de développer des technologies portables sur l’ensemble des architectures à base d’Unix. De la diversité des sponsors, le projet Athena tira l’expérience de l’hétérogénéité des environnements informatiques ; l’époque était encore aux grands systèmes propriétaires et ces notions n’étaient encore que peu explorées. La volonté d’interconnections, de partage des ressources et surtout l’échelle à laquelle celui-ci devait être opérationnel, sont quant à elles, à la base de l’orientation résolument distribuée de toutes les retombées du projet. 109 110 Cours de Système d’Exploitation UNIX Athena regroupa en fait un grand nombre de projets, liés à l’objectif initial. Parmi ceux ayant abouti à des technologies utilisées à l’heure actuelle, citons le système d’authentification Kerberos <a href=”http ://echo-linux.alienor.fr/articles/intro-X/biblio.doc.html”>[Garfinkel 91]</a>, le système de gestion de fichiers Andrew (Andrew File System) et bien entendu, le système de fenêtrage X (X Window System). ”The X Window System” : X Basé initialement sur le système W, développé à Stanford par Paul Asente et Brian Reid, X fut tout d’abord épuré puis à nouveau étendu. Entre 1983 et 1985, les versions se succédèrent rapidement, pour aboutir en 1985 à la première version publique : X10. En Février 1987, naquit X11R1 (X Version 11, Release 1) et depuis, les évolutions (releases) se succèdent, tout en gardant une totale compatibilité arrière ; alors que chaque changement de version (X10, X11) introduisait une incompatibilité. L’ouverture de X l’a fait adopter par l’ensemble des constructeurs actuels et toute station Unix achetée maintenant est livrée avec le Système X Window. A l’occasion de la dernière évolution (X11R6 sortie en mai 1994) l’ancien ”MIT X Consortium” a été dissout, ses dirigeants estimant que leur travail était terminé et une nouvelle entité nommée ”X Consortium Inc.” a été fondée, dont la charge est de promouvoir le système. La prochaine version de X (nom de code Broadway) sera X11R7 qui sortira en Décembre 1996. Ce sera la derniere version développée par ”X Consortium Inc.” qui vivra son dernier hiver. X sera alors transféré dans le giron de l’Open Group qui prendra en charge sa maintenance. D’un point de vue technique, X ne subira plus maintenant que du support de maintenance. Il demeure cependant une forte activité de recherche et de développement ”autour de X” dans le domaine des extensions telles que le son, la vidéo, l’internationalisation,... Dans le monde Unix, X n’a plus de concurrent. Le dernier en lice, NeWS (Network Window System), développé par Sun a été définitivement abandonné. La plus grande confusion régnant au sujet du véritable nom de X, voici un court extrait du manuel X : ”The X Consortium requests that the following names be used when referring to this software : X X Window System X Version 11 X Window System, Version 11 X11 X Window System is a trademark of X Consortium, Inc.” 9.2 Le système X Window Le système X Window est un système distribué : Son principal concepteur, Bob Scheifler, chercheur en systèmes d’exploitation et applications distribués, désirait pouvoir afficher plusieurs programmes sur un seul écran afin de les mettre au point. De ce désir d’utilisateur naquit la fonctionnalité la plus importante du système : une application peut être exécutée sur une machine et s’afficher sur une autre machine. M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 9.2.1 111 Architecture L’architecture générale du système est représentée figure 1. Il s’agit d’une architecture de type Client-Serveur. Fig. 9.1 – Architecture du système X B Le client X, est une application qui a besoin d’afficher des informations sur un écran. B Le serveur X est un programme, exécuté sur une machine (”machine hôte”) connectée habituellement à un écran, un clavier et une souris. Il offre des services d’affichage aux clients qui en ont besoin. Un client X et un serveur X, sont donc deux programmes. Ils peuvent être exécutés sur des machines différentes et communiquent entre eux par l’intermédiaire d’un réseau, la plupart du temps, un réseau de type Ethernet utilisant la couche de transport TCP/IP. Cette communication suit un certain nombre de conventions (que l’on pourrait assimiler à une langue) appelée protocole de communication : le protocole X. Ainsi, tout programme sachant demander des services graphiques en ”parlant” le protocole X peut se connecter à un serveur ”comprenant” le même protocole que lui. Un PC utilisant MS-Windows (Microsoft Windows) ou un Macintosh utilisant Système 7, peuvent par exemple faire tourner un serveur X qui affiche des programmes provenant de stations Unix. 9.2.2 Client-Serveur ? L’intérêt de l’architecture client-serveur est multiple. B Hétérogénéité et transparence : le réseau inséré entre un client et un serveur assure une totale indépendance des deux parties : leur seule contrainte est le respect du protocole de communication, moyennant quoi, n’importe quel type de machine respectant le protocole client peut s’afficher sur n’importe quel type de machine respectant le protocole serveur. Un cas remarquable est l’utilisation de terminaux X, qui sont des machines spéciales, dont la seule fonction est d’agir en serveur X. Il s’agit là d’une des rares industries, produisant du matériel (hardware), directement générée par un produit logiciel (software). B Centralisation des ressources : le serveur X est le seul programme qui accède physiquement aux ressources de la machine (écran, clavier, souris,...). Il implémente la logique permettant d’arbitrer le partage de ces ressources entre ses différents clients, ce qui résout les problèmes d’accès concurrents à celles-ci. Yann MORÈRE M.S.T. Télécom 1re Année 112 Cours de Système d’Exploitation UNIX Lors des débuts de X, cette architecture constituait un apport notable, notamment du point de vue de la centralisation, mais ces choix peuvent paraı̂tre maintenant discutables. B L’utilisation du réseau ralentit l’affichage. Il faut garder en mémoire qu’à l’époque de la conception de X, les machines coûtaient encore très cher. Il n’était pas envisageable de donner une station graphique (ni même un simple PC) à chaque étudiant. L’architecture centralisée d’alors, composée de serveurs et de terminaux X, semblait donc intéressante (les programmes tournent sur un serveur et s’affichent sur les terminaux X). De nos jours, la tendance est inversée. Les architectures centralisées disparaissent au profit de réseaux locaux de petites machines (mais dont la puissance est cependant bien supérieure à celle des gros ordinateurs de 1983). Le cas le plus fréquent devient l’affichage sur une machine unique (les clients et le serveur tournent sur la même machine) et dans ce cas, la pénalité apportée par l’insertion du réseau est injustifiable, bien qu’incontournable. Signalons que certains constructeurs remplacent dans ce cas la couche de transport TCP/IP par une couche utilisant de la mémoire partagée, ce qui procure un gain de vitesse important, mais n’élimine pas les pénalisations de codage et décodage du protocole. B Evolution des technologies : la plupart des machines et des systèmes d’exploitation actuels ont des mécanismes de mémoire partagée, ainsi que les mécanismes d’arbitrage associés. Il semble maintenant possible de refaire X en tant que bibliothèque partagée utilisant ces mécanismes <a href=”http ://echo-linux.alienor.fr/articles/intro-X/biblio.doc.html”>[Kilgard 95]</a>. 9.2.3 Le serveur X Le serveur X offre les services graphiques de base nécessaires à tout système de fenêtrage : B gestion des fenêtres ; B primitives de dessin ; B arbitrage des ressources. C’est essentiellement dans l’arbitrage que se situent les difficultés de conception : un serveur X est susceptible d’avoir plusieurs clients. Ces clients tournent concurremment et utilisent les mêmes ressources. Le serveur X doit donc prendre en charge la gestion, le partage et la distribution de celles-ci. De part la volonté de son concepteur (Bob Scheifler), le serveur X n’offre que des services de très bas niveau. D’autres systèmes tels que MS-Windows permettent de créer d’un seul appel un bouton ou un menu. Le serveur X, lui, ne sait qu’ouvrir et fermer des fenêtres, sans décoration, nues. C’est l’application qui devra, dans le cas du bouton, dessiner la bordure et le label. 9.2.4 Requêtes et événements Le protocole de communication entre un client X et un serveur X n’est pas symétrique. Un serveur est (comme son nom l’indique) au service du (ou des) client(s). Le client quant à lui veut tirer parti des services proposés par le serveur ; il envoie pour ce faire des requêtes au serveur et reçoit éventuellement des réponses ou des erreurs (figure 2). Le serveur peut aussi envoyer des événements au client, pour lui signaler des modifications ou des actions de l’utilisateur. M.S.T. Télécom 1re Année 5 octobre 2003 Cours de Système d’Exploitation UNIX 113 Fig. 9.2 – Requêtes et Evénements Lorsqu’il reçoit une requête, le serveur X l’exécute. Si par exemple on lui demande de dessiner une ligne dans une fenêtre A, il va faire les vérifications d’usage sur l’existence de la fenêtre A et tracer la ligne désirée à l’intérieur. Pour chaque requête reçue, le serveur va soit : B l’exécuter si toutes les vérifications se sont révélées correctes ; B renvoyer une erreur pour signaler que la requête ne peut être exécutée. Dans tous les cas, il ne garde aucune mémoire des requêtes qu’il reçoit, pas plus que des tracés qu’il a effectués. Ceci implique que lorsque le contenu d’une fenêtre est effacé, que ce soit par programme ou par une manipulation de fenêtres, le serveur X ne sait pas restaurer son contenu ; il appartient donc au programmeur de le faire. Parmi les requêtes qu’un client peut exprimer à un serveur X, nous trouvons principalement : B requêtes de manipulation de fenêtres : création, destruction, déplacement, retaillage,... ; B requêtes de dessin : lignes, rectangles, arcs de cercles, images,... ; B requêtes d’administration : utilisées pour la gestion des ressources du serveur. Les événements quant à eux peuvent être classés en 2 catégories : B événements de manipulation de fenêtres : le serveur X, en réponse aux requêtes ou à des actions externes (déplacement d’une fenêtre par l’utilisateur, par exemple), envoie des événements de notification sur la vie des fenêtres (création, destruction, etc...) ; B événements utilisateur : lorsque l’utilisateur déplace la souris ou appuie sur une touche, le serveur X envoie un événement pour le signaler. Les erreurs sont traitées par le système et ne sont pas directement destinées au programmeur. Bien évidemment, un client X n’écrit pas directement les requêtes X sur le réseau. Une interface de programmation et sa bibliothèque associée sont fournies, permettant d’envoyer des requêtes à un serveur X par un simple appel de fonction. C’est la bibliothèque X ou Xlib . De plus, d’autres librairies de programmation appellées boites a outils ou toolkits fournissent des abstractions de plus haut niveau permettant d’accélerer les développements. Yann MORÈRE M.S.T. Télécom 1re Année