L'environnement de programmation Unix/Linux 1
SYSTÈME D'EXPLOITATION ET MISE EN ŒUVRE SOUS UNIX
Maher SELLAMI
2012-2013
L'environnement de programmation Unix/Linux
2
Objectifs de ce module
• Présenter l'architecture logicielle des systèmes d'exploitation, • Découvrir le système UNIX• Etudier les outils de développement des programmes.• Maitriser les interfaces système: SHELL, API • Appréhendrer les fondements de base des systèmes de gestion de
fichiers
Introduction Objectifs
2012-2013
L'environnement de programmation Unix/Linux
3
SOMMAIRE0. Architecture et Blocs fonctionnelsI. Présentation générale des systèmes d’exploitation
Définition et objectifs d’un système d’exploitationEvolution des systèmes d’exploitation Fonctions d’un système d’exploitationStructure d’un système d’exploitationCaractéristiques des Systèmes d’exploitation modernes
TD : Etude de Cas , La Structure de Windows
II. Environnement UNIXLe Système de fichiersLe shellLes filtres grep,sed, awk, find, sort
TP: LE SHELL d’UNIXScripts, outils: grep, sed awk,…
III. Programmer sous GNU/LINUXEnvironnement d’exécutionInteraction avec l’environnement d’exécutionGestion des erreursEcrire et utiliser des Bibliothèques
TP : Compiler avec gcc make, gdb, gestion des erreurs,Bibliothèques
IV. Le système de gestion de fichiersOrganisation Primitives d'accès élémentaires aux fichiersSécurité et Protection des fichiersLe système de fichiers d’UNIX (Les E/S de base, répertoire, inode)
TD :FAT, NTFSTP : SGF d’UNIX /Linux
Introduciton
2012-2013
L'environnement de programmation Unix/Linux
4
Bibliographie
Livres pédagogiques• Systèmes d'exploitation -- Concepts et algorithmes.
Joffroy Beauquier et Béatrice Bérard. Ediscience international, Paris, 1993.• Systèmes d'Exploitation, Andrew Tanenbaum. Pearson Education, 2003.• Principes des systèmes d'exploitation des ordinateurs, S. Krakowiak , Dunod 1987 • Architecture des systèmes d'exploitation, M. GRIFFITHS, ..., M. VASSAYADE,
Hermès, 1988.• Systèmes d'exploitation, concepts et algorithmes, J. BEAUQUIER, B.BERNARD, MC
Graw-Hill, 1990.
Livres documentant un système particulier• La programmation sous Unix, 3e éd., J.M. Rifflet, McGraw-Hill, 1993• The Unix Programming Environment- B.W. Kernighan, R. Pike, Prentice-Hall• Conception du système UNIX, Maurice J. Bach. Dunod, 1997.• Conception et implémentation du système 4.4BSD.
Marshall Kirk McKusick, Keith Bostic, Michael J. Karels, et John S. Quarterman. International Thomson Publishing France, 1997.
• Le système UNIX- S.R. Bourne InterEditions, 1985• Inside Windows NT, Helen Custer, Microsoft Press, 1992
Introduciton
2012-2013
L'environnement de programmation Unix/Linux 5
ARCHITECTURE ET BLOCS FONCTIONNELS
Blocs fonctionnels d’un ordinateursArchitecturesInterruptions
Maher SELLAMI
O2012-2013
L'environnement de programmation Unix/Linux
6
Blocs fonctionnels
• La compréhension de certaines fonctions d’un système d’exploitation nécessite un minimum de connaissance du matériel « hardware ».
• ARCHITECTURE: découpage de la machine en sous-ensembles, et interrelations entre ces sous-ensemblesChoix d’architecture: compromis entre performances et
coûts (efficacité et facilité de construction)
• Principaux blocs :– Processeur– Mémoire– Bus– E/S
2012-2013
Architecture fonctionnelle d’un Ordinateur Blocs fonctionnels
P M E/S
L'environnement de programmation Unix/Linux
7
LE PROCESSEUR (CPU)
• Dirige les activités de l’ordinateur. • A chaque cycle d’horloge, chaque unité du
processeur va ouvrir ou fermer certains ports pour déplacer, lire, écrire, comparer, additionner.
• Les ordres sont donnés par l’unité de contrôle.
2012-2013
Architecture fonctionnelle d’un Ordinateur Blocs fonctionnels
L'environnement de programmation Unix/Linux
8
La Mémoire
• Stocke les informations temporairement.• Ensemble de cases de rangement ou position, chacune d’elles
pouvant contenir les informations et étant repéré par une adresse.• Adresse: permet de mettre ou extraire la représentation d’information.• Bit : une position comprend un nombre fixe d’éléments (0 et 1)• Mot : un nombre déterminé de bits occupant des postions contigües;
selon modèle (16, 24, 32 bits,..).• Unité d’adressage: plus petite quantité de mémoire qui sépare deux
adresses consécutives.• Espace d’adressage: ensemble de toutes les adresses que l’unité
commande est capable de générer donnée par la largeur des adresses (nombre de bits dans une adresse).
• Espace virtuel : nombre de cases mémoires qu’un programme peut adresser
2012-2013
Architecture fonctionnelle d’un Ordinateur Blocs fonctionnels
L'environnement de programmation Unix/Linux
9
La Hiérarchie de mémoire
2012-2013
Architecture fonctionnelle d’un Ordinateur Blocs fonctionnels
Gérée par :-Le compilateur
- Un dispositif câblé
- Le système d’exploitation
- La création de fichiers (SGF)
L'environnement de programmation Unix/Linux
10
Le Bus
• Les instructions sont transportées par des lignes parallèles groupées qu’on appelle bus.
• Aspect physique: – Fils électriques reliant les différents éléments d’un ordinateur.– Ces éléments sont reliés au bus par un connecteur : « fond de
panier ».
• Aspect Logique: – Multiplexage: les données et les adresses peuvent être multiplexés
sur les mêmes lignes d’un bus. – Espace d’adressage: Largeur des adresses que le bus peut manipuler– Cycle du bus: définit par le vitesse de l’horloge, un mouvement de
données se produit à chaque top de l’horloge.– Transaction: un échange de données entre deux éléments connectés
au bus.– Débit: nombre de mots de données qu’il est capable de transporter
par seconde.
2012-2013
Architecture fonctionnelle d’un Ordinateur Blocs fonctionnels
L'environnement de programmation Unix/Linux
11
les Périphériques D’E/S
• Assurent la communication avec l’extérieur
Les mémoires de Masses (bandes, disques)• Complètent la mémoire Centrale par une capacité accrue (sans
source d’énergie)• Temps de positionnement lent. (en ms)• Sauvegarde: supports à accès séquentiel (bande,…)• Repérage : accès direct à l’information (disque,..).
Les unités d’Entrées-Sorties• voir les résultats et fournir les données Clavier-Ecran, Imprimante, « Joy-Stick », le stylo optique, la
souris, scanner, ...
Les unité de communications• reliés des systèmes informatiques ensembles modems, câbles de connexion et dispositifs réseaux etc.
2012-2013
Architecture fonctionnelle d’un Ordinateur Blocs fonctionnels
L'environnement de programmation Unix/Linux
12
Architecture de VON NEUMANN
• la performance d’un élément d’une machine est liée aux autres éléments qui lui sont connectés
• L'efficacité est liée au débit des informations qui circulent dans ses différents éléments.
• 3 techniques pour placer le dispositif d’E/S.
2012-2013
Architecture fonctionnelle d’un Ordinateur Quelques architectures
P M
P ME/S P ME/S
P M E/S
Structure à bus commun mémoire-entrées/sortiesLiaison directe des dispositifs d’entrées/sorties
Interfaces d’entrées/sorties vues comme une partie de la mémoire
L'environnement de programmation Unix/Linux
13
Architecture de VON NEUMANN
2012-2013
Architecture fonctionnelle d’un Ordinateur Quelques architectures
L'environnement de programmation Unix/Linux
14
L’accès direct mémoire (DMA)
• Technique qui fournit un chemin direct entre le bus d’E/S et la mémoire sans intervention du processeur.
• Le DMA soulage l’UC du contrôle des entrées-sorties• L ‘E/S "vole" un cycle mémoire au Bus pour réaliser un transfert• L'exécution du programme en UC continue pendant le transfert DMA• Si conflit d'accès à la mémoire priorité au DMA
2012-2013
Architecture fonctionnelle d’un Ordinateur Quelques architectures
L'environnement de programmation Unix/Linux
15
Architecture de Harvard
• Augmenter le flux des informations qui circulent dans la machine: «M.I.» et «M.D.»
• Multiplier par deux la vitesse du processeur sans changer la vitesse des mémoires.
2012-2013
Architecture fonctionnelle d’un Ordinateur Quelques architectures
P MDMI
BI BD
CPU
pré-recherche
bus
externe
contrôle du bus
gestion de la mémoire
cache instructions
cache données
Le microprocesseur 68030
L'environnement de programmation Unix/Linux
16
Machines microcodées
• Doter un processeur d’une mémoire spéciale dite mémoire de microcode destinée à contenir des micro-instructions.
• Une instruction élémentaire est constituée d’un micro-programme : séquence de micro-instructions
Réduire les coûts de réalisation des processeurs
2012-2013
Architecture fonctionnelle d’un Ordinateur Quelques architectures
P MMMBIN B
L'environnement de programmation Unix/Linux
17
Les Interruptions• Comment l’U.C. va prendre en compte les événements extérieurs.• Les interruptions externes
– dues aux périphériques ou à des événements extérieurs au système informatique (temps réel).FAIRE TOUJOURS
signaler au CPU qu’il est prêt ;recevoir un ordre du CPU ;exécuter l’ordre ;à la fin de l’exécution, boucler
FAIT
– Pour signaler à l’unité centrale qu’ils sont prêts, les périphériques connectés vont utiliser le mécanisme d’interruption.
• Les interruptions internes– Les interruptions dues à l’horloge– Les interruptions dues aux erreurs
• Un dépassement de capacité• La violation d’accès mémoire• L’exécution d’une instruction dont la partie fonction n’est pas conforme• L’utilisation d’une instruction privilégiée en dehors du mode système.
• Les interruptions logicielles2012-2013
Architecture fonctionnelle d’un Ordinateur Les Interruptions
L'environnement de programmation Unix/Linux
18
Les interruptions logicielles
• Réalisés par des instructions de type SVC (Supervisor Call) destinée à permettre à un programme utilisateur de faire une requête au système– Lancement de tâches– Allocation de ressources matérielles (mémoire - disque -
imprimante ...)
• Provoque: – la mise en sommeil du programme– La prise de contrôle de l’unité centrale par le S.E.– Le S.E. exécute un service particulier demandé par le programme.– changer de mode d’exécution et passer en mode superviseur.
Motif : vérifier la correction des arguments d’appel, afin d’éviter des tentatives de pénétration frauduleuse à l’intérieur du système.
2012-2013
Architecture fonctionnelle d’un Ordinateur Les Interruptions
L'environnement de programmation Unix/Linux 19
PRÉSENTATION GÉNÉRALE DES SYSTÈMES D’EXPLOITATION
Définition et objectifs d’un système d’exploitationEvolution des systèmes d’exploitation Fonctions d’un système d’exploitationStructure d’un système d’exploitationCaractéristiques des Systèmes d’exploitation modernes
Maher SELLAMI
12012-2013
L'environnement de programmation Unix/Linux
20
Introduction
• Sans logiciels, un ordinateur n’est qu’un morceau de métal inutile.
• Grâce à ces logiciels, il peut jouer son rôle d'outils universels .
Problèmes• L'écriture des programmes doivent prendre en compte tous
les composants d'un ordinateur, un travail extrêmement difficile.
• Il faut libérer le programmeur de la complexité du matériel.
Solution• Enrober le matériel par une couche de logiciel qui gère
l’ensemble de système. • Présenter au programmeur une interface au machine virtuelle
plus facile à comprendre.
2012-2013
Présentation générale des systèmes d’exploitation Généralités
L'environnement de programmation Unix/Linux
21
Introduction
2012-2013
Présentation générale des systèmes d’exploitation Généralités
Utilisateurs
ProgrammesApplications Atelier de
DéveloppementBase de données
Navigateur
OutilsEditeurs Compilateurs Editeurs de
liensChargeur Metteur au
pointInterpréteur de commandes
GestionMémoire Processeur Fichiers Périphériques Communication
Matériel
Structure générale d’un système informatique
Programmeur
Programmeur Système
Logiciel de baseLogiciel d’Application
L'environnement de programmation Unix/Linux
22
Définition et objectifs d’un système d’exploitation
2012-2013
Présentation générale des systèmes d’exploitation Généralités
• Définition et réalisation d’une machine virtuelle– fonction de gestion de l’information : structuration, conservation,
conservation désignation (mémoire virtuelle, fichiers); transfert (entrée-sorties),
– fonction d’exécution de programmes en séquence , en parallèle, en concurrence, de composer et d'enchaîner des programmes, de synchroniser des exécutions
– service divers : aide à la mise au point, traitement des défaillances, mesure de temps, etc.
• Gestion et partage des ressources– gestion des ressources physiques : allocation de mémoire
principale de mémoire secondaire, des organes d’entrée-sortie,– partage et échange d’information entre usagers, – protection mutuelle des usagers, – service divers : facturation de ressources, statistiques d’utilisation,
mesure de performances, etc.
L'environnement de programmation Unix/Linux
23
Définition et objectifs d’un S.E. d’exploitation
2012-2013
Présentation générale des systèmes d’exploitation Généralités
machine virtuelle
matériel
système d'explitation
ressources
utilisateurs
L'environnement de programmation Unix/Linux
24
Évolution des systèmes d’exploitation
2012-2013
Présentation générale des systèmes d’exploitation Évolution des systèmes d’exploitation
• Exploitation porte ouverte : 1945-1955• Traitement par lots : 1955-1965• Multiprogrammation et traitement par lots : 1965-1980• Multiprogrammation et partage de temps : 1965-1980• Systèmes d'exploitation d'ordinateurs personnels• Exploitation en réseau• Exploitation en distribué• Systèmes multiprocesseurs• Système d'exploitation temps réel
L'environnement de programmation Unix/Linux
25
Fonctions d’un système d’exploitation
2012-2013
Présentation générale des systèmes d’exploitation Fonctions d’un système d’exploitation
• La gestion de la mémoire• La gestion des processus • La gestion des périphériques d’E/S• La gestion des fichiers• La gestion de la communication• Environnement de travail
L'environnement de programmation Unix/Linux
26
La gestion de la mémoire
2012-2013
Présentation générale des systèmes d’exploitation Fonctions d’un système d’exploitation
• Fonctions:– connaître les parties libres et occupées de la mémoire, – allouer de la mémoire aux processus qui en besoin, – récupérer la mémoire utilisé par un processus – traite le va-et-vient entre le disque et la M.C.
• Services offerts:– répartition de la mémoire disponible entre les différents
processus actifs et l’ensemble des utilisateurs présents – localisation maintien des données pour chaque
processus,– maintien de l’intégrité de certains espaces réservés,– gestion de la pagination de la mémoire, utilisation de
mémoire virtuelle.
L'environnement de programmation Unix/Linux
27
La gestion de la mémoire
2012-2013
Présentation générale des systèmes d’exploitation Fonctions d’un système d’exploitation
• Techniques: découpage de la mémoire en :– zones de taille variable (contigue)– la segmentation– La pagination
L'environnement de programmation Unix/Linux
28
La gestion de la mémoire:contigue
2012-2013
Présentation générale des systèmes d’exploitation Fonctions d’un système d’exploitation
Allocation contigue en zone variable• La mémoire est découpée en partitions de taille variable , c'est-à-dire
adaptables à la taille des programmes.• La mémoire est formée d'un ensemble de zones libres et de zones
occupées (partitions allouées). • Une zone libre est caractérisée par son adresse d’implantation (adr) et
sa taille (taille).• Allouer un programme P de taille Taille(P) :
trouver une zone libre telle que Taille (Zone Libre) >= Taille (P)
• Le système maintient une liste des zones libres en MC First Fit : la première zone qui convient Best Fit : celle générant le moins de perte
• Inconvénients: Allocations et désallocations successives des programmes créent des trous (zones libres de taille insuffisante) en mémoire centrale : fragmentation
• externe: l`espace inutilisé est entre partitions• interne: l ’espace inutilisé est dans les partitions
Gestion de la mémoire: Segmentation • la segmentation utilise des parties de programme qui ont une valeur
logique (des modules)• L’adresse logique est une paire: <No de segm, décalage>
où décalage est l’adresse dans le segment
Avantages: l’unité d’allocation de mémoire est plus petite que le programme entier une entité logique connue par le programmeur
Les segments peuvent changer de place en mémoire
Implémente l’édition des liens La protection et le partage de segments sont aisés
Désavantage: le problème des partitions dynamiques La fragmentation externe n’est pas éliminée
trous en mémoire, compression?
• Une autre solution est d`essayer à simplifier le mécanisme en utilisant unités d`allocation mémoire de tailles égales
PAGINATION
L'environnement de programmation Unix/Linux
29
Fonctions d’un système d’exploitation
2012-2013
L'environnement de programmation Unix/Linux
30
Gestion de la mémoire: pagination
2012-2013
Présentation générale des systèmes d’exploitation Fonctions d’un système d’exploitation
• L'espace d'adressage du programme est découpé en morceaux linéaires de même taille : page.
• L'espace de la mémoire physique est lui-même découpé en morceaux linéaires de même taille : la case ou cadre de page (frame)
• La taille d'un cadre est égale à la taille d'une page• Charger un programme en mémoire centrale consiste à
placer les pages dans n'importe quel « frame » disponible.
• Conséquences:– un processus peut être éparpillé n’importe où dans la
mémoire physique.– la fragmentation externe est éliminée
L'environnement de programmation Unix/Linux
31
La mémoire virtuelle
2012-2013
Présentation générale des systèmes d’exploitation Fonctions d’un système d’exploitation
• La capacité de la mémoire centrale est trop petite pour charger l'ensemble des pages des programmes utilisateurs.
• Ne charger que les pages utiles à un instant (principes de localité).– tester la présence d'une page en mémoire centrale : rôle du bit de validation si un processus cherche à accéder à une page non présente en
mémoire centrale, il se produit un déroutement de défaut de page• Défaut de page: le système d'exploitation lance une entrée/sortie disque
pour charger la page manquante en mémoire dans une case libre. la totalité des cases de la mémoire centrale peuvent être occupées
• le système d'exploitation utilise un algorithme pour choisir une case à libérer• L’optimal est de retirer une page devenue inutile
– Au hasard– FIFO (First In, First out)– LRU (Least Recently Used) : moins récemment utilisée
L'environnement de programmation Unix/Linux
32
La gestion des processus
2012-2013
Présentation générale des systèmes d’exploitation Fonctions d’un système d’exploitation
• Un processus est un programme en cours d’exécution – un environnement processeur (CO, PSW, RSP, registres
généraux) – un environnement mémoire appelé contexte du processus
• Processus: une unité de description d'une activité pouvant s'exécuter en parallèle.
• Multiprogrammation faire coexister plusieurs programmes simultanément en mémoire (multi-tâches)
• Le temps partagé ou pseudo-parallélisme : simuler le partage par plusieurs programmes de temps processeur. multitâche ≠ temps partagé
• Multitraitement: plusieurs tâches en même temps (multi-processeurs.)
L'environnement de programmation Unix/Linux
33
La gestion des processus
2012-2013
Présentation générale des systèmes d’exploitation Fonctions d’un système d’exploitation
• Multiprogrammation simple
prêt
bloqué élu
Election: allocation du processeur
fin E/S
demande E/S
chargement
prêt
bloqué élu
sélectionnéfin E/S
demande E/S
défaut de page
fin tranche de tempschargement
• Multiprogrammation en temps partagés
En exécution
la préemption est la mise en attente forcée d’un processus
L'environnement de programmation Unix/Linux
34
La gestion des processus
2012-2013
Présentation générale des systèmes d’exploitation Fonctions d’un système d’exploitation
• L'ordonnanceur (scheduler) définit l'ordre dans lequel les processus prêts utilisent l'UC et la durée d'utilisation, en utilisant un algorithme d'ordonnancement ( FIFO, Priorités , tourniquet, file de priorité…)
• Algorithme d'ordonnancement doit avoir les qualités:– équitabilité : chaque processus reçoit sa part du temps
processeur– efficacité : le processeur doit travailler à 100 % du temps– temps de réponse : à minimiser en mode interactif– temps d'exécution : minimiser l'attente des travaux en
traitement par lots (batch)– rendement : maximiser le nombre de travaux effectués par
unité de temps
L'environnement de programmation Unix/Linux
35
La gestion des périphériques d’E/S
2012-2013
Présentation générale des systèmes d’exploitation Fonctions d’un système d’exploitation
• Fonctions– Cacher la complexité des dispositifs d’E/S– Ignorer les différences qui existent entre les
mêmes types d’unités proposées par plusieurs constructeurs
• Services offerts– Fonctions liés à leur emploi: paramétrage ou
configuration logicielle de ces périphériques – Fonctions liés à leur utilisation: réalisation des
fonctions d'accès et de contrôle des ces périphériques.
L'environnement de programmation Unix/Linux
36
La gestion des fichiers
2012-2013
Présentation générale des systèmes d’exploitation Fonctions d’un système d’exploitation
• Un fichier : une collection de données codées, de même nature, et stockées sur un support externe (disque, bande).
• Fonctions• Implantation physique des fichiers• Réalisation des fonctions d’accès aux fichiers• la sécurité et confidentialité des informations qu’ils
contiennent.
• Services Offerts– fonctions liés à l'existence des fichiers: création,
duplication édition, impression, déplacement– fonctions liées à l’utilisation des fichiers et leur
partage
L'environnement de programmation Unix/Linux
37
Gestion des communications
2012-2013
Présentation générale des systèmes d’exploitation Fonctions d’un système d’exploitation
permettre l'accès à:• d’autres machines virtuelles, (locales,
distantes ou mobiles) ,• des supports externes, via des E/S • des objets, des composants partageables,
des services, • des fichiers (locaux, distants ou mobiles)• des groupes de diffusion ou de coopération.
L'environnement de programmation Unix/Linux
38
Environnement de travail
2012-2013
Présentation générale des systèmes d’exploitation Fonctions d’un système d’exploitation
• le but de toute architecture est de présenter à l’utilisateur un environnement où il puisse travailler confortablement.
• L'utilisateur a deux façons pour accéder aux services offerts par le système : – écrit des programmes qui font des appels au noyau (API)– utilise l'interface-utilisateur (shell ou interpréteur de commandes)
• Les interfaces utilisateurs offrent souvent plusieurs ergonomies, en fonction des fonctionnalités attendues, ... ou en fonction des préférences de l’utilisateur:– Environnement graphique: ergonomie préférée par les usagers
non informaticiens (shell graphique)– Langage simplifié interactive : simple succession de lignes de
commande comportant un « verbe », et des paramètres– Langage algorithmique, véritable langage de programmation,
muni de structures de contrôle de programme et de variables.
L'environnement de programmation Unix/Linux
39
Les systèmes monolithiques
2012-2013
Présentation générale des systèmes d’exploitation Structure d’un système d’exploitation
• La plus largement répandue.• Le SE est une collection de procédures, chacune pouvant appeler à tout moment
n'importe quelle autre.• Pour construire le code objet du système, il faut compiler toutes les procédures, pas
de masquage des informations; chaque procédure est visible de toutes les autres
Systèmes monolithiques avec une structure minimale• Les services offerts par le système d'exploitation sont appelés par des instructions
de type SVC (Supervisor Call )• Cette instruction commute la machine du mode utilisateur au mode noyau et
transfère le contrôle au système d'exploitation.
procédure
principale
procédure
de services
procédure
utilitaires
L'environnement de programmation Unix/Linux
40
Les systèmes à couches
2012-2013
Présentation générale des systèmes d’exploitation Structure d’un système d’exploitation
• La généralisation de la structuration simple • Chaque couche ne pouvant être appelée que par des procédures
qui lui sont immédiatement inférieures• Structurer le système d'exploitation en plusieurs couches, chaque
couche s'appuyant sur celle qui lui est immédiatement inférieure. • Exemple : THE de Dijkstra (un simple système de traitement par
lots - batch)
C5- Opérateur
C4- Programmes utilisateurs
C3- Gestion des E/S , chaque processus dialoguait avec des périphériques abstraits
C2- communication entre les processus et la console de l’opérateur
C1- Gestion de la mémoire, allocation d'espace mémoire pour les processus (pagination).
C0- Allocation du processeur par commutation de temps entre les processus, soit à la suite d'expiration de délais, soit à la suite d'interruption ; multiprogrammation de base du processeur
L'environnement de programmation Unix/Linux
41
Les Machines virtuelles
2012-2013
Présentation générale des systèmes d’exploitation Structure d’un système d’exploitation
• Un des premiers SE à gérer le concept de machine virtuelle a été l'adaptation temps partagé de l'OS/360 d'IBM, prooposé vers 1968 sous le nom de VM/370 en 1979.
• Dissocier les deux fonctions d’un SE– Gestionnaire de ressources (multiprogrammation)– Fournir une machine étendue (interface)
• Le VM/370, s'exécute sur le même matériel et fournit à la couche supérieure plusieurs machines virtuelles, copies conformes de la machine réelle (interruptions, mode noyau/utilisateur, etc...)
• Chaque machine virtuelle peut exécuter son propre SE. • Lorsqu'une machine virtuelle exécute en mode interactif un
appel système, l'appel est analysé par le moniteur temps partagé de cette machine, CMS.
L'environnement de programmation Unix/Linux
42
Les Machines virtuelles
2012-2013
Présentation générale des systèmes d’exploitation Structure d’un système d’exploitation
Avantages:- Chaque VM peut exécuter un SE tout comme sur le matériel! Plus d’un SE par machine!- En séparant la machine étendue de la multiprogrammation chaque fonction est plus facile à entretenir
Désavantage: plusieurs couches de traps (déroutement)
L'environnement de programmation Unix/Linux
43
Le modèle client-serveur
2012-2013
Présentation générale des systèmes d’exploitation Structure d’un système d’exploitation
• Un des problèmes majeurs avec les SE?– Ils sont gigantesques!
• Moins que l’on met dans le noyau, le plus facile ce sera d’entretenir et amélioré le SE– Un très petit noyau s’appèle un micronoyau
(microkernel)• Si on enlève des fonctions du noyau du SE,
ces fonctions doivent exister dans l’espace utilisateur
• reporter la plupart des fonctions du système d’exploitation dans des processus utilisateur
L'environnement de programmation Unix/Linux
44
Le modèle client-serveur
2012-2013
Présentation générale des systèmes d’exploitation Structure d’un système d’exploitation
• le noyau ne gère que la communication entre les clients et les serveurs. • La décomposition du SE « serveur » plus faciles à modifier• Les serveurs s’exécutent comme des processus en mode utilisateur, et
non en mode noyau, un bogue dans un serveur n’affectera pas, en général, l’ensemble de la
machine, les dégâts se limitant au serveur.• Le modèle client-serveur se prête, à une utilisation sur des systèmes
distribués . • Un client qui envoie des messages à un serveur n’a pas besoin de savoir
si le message est traité localement ou sur une machine distante via un réseau
L'environnement de programmation Unix/Linux
45
Caractéristiques des SE modernes
2012-2013
Présentation générale des systèmes d’exploitation
• Multi-threading– Processus légers
• Multi-processus• Multi-coeur, partage mémoire (multi-
processeur)• Architecture à micro-noyaux (micro-kernel)• Gestion de l’adressage• Communication interprocess• Ordonnancement• Système distribué
L'environnement de programmation Unix/Linux
46
Principaux systèmes d’exploitation
2012-2013
Présentation générale des systèmes d’exploitation
AppleMac OS Classic Système 5 · Système 6 · Système 7 · Mac OS 8 · Mac OS 9
Dérivés de NeXTSTEP NeXTSTEP · Rhapsody · Darwin · Mac OS X · iOS
Dérivés de BeOS BlueEyedOS · Haiku · ZETACisco Systems Cisco IOSDOS DR-DOS · FreeDOS · MS-DOS · PC-DOSIBM AIX · MVS · OS/2 · OS/360 · OS/390 · z/OS · OS/400
Microsoft WindowsBasé sur DOS MS-DOS · 1.x · 2.x · 3.x · 95 · 98 · MeBranche NT NT · 2000 · XP · 2003 · Vista · 2008 · 7 · 8
POSIX / UNIX
BSD FreeBSD · NetBSD · OpenBSD · DragonFly BSD · PC-BSD
GNU Debian GNU/Hurd · Arch Hurd
Linux (liste) Arch Linux · Debian · Frugalware · Fedora · Funtoo · Gentoo · Mandriva · Red Hat · Slackware · SUSE · Ubuntu
Autres dérivés AIX · HP-UX · IRIX · LynxOS · Minix · QNX · Solaris · System V · Tru64 · UnixWare · ChorusOS
Dérivés de AmigaOS MorphOS · AROS
D’importance historique CP/M · CTSS · GCOS · Genera · ITS · Multics · Plan 9 · QDOS · RSTS · TENEX · TOPS-20 · TOS · VMS
Autres systèmes eyeOS · FreeDOS · Inferno · MenuetOS · ReactOS · UNICOS · VxWorks
Système d’exploitation mobile Android · Bada · BlackBerry OS · iOS · OpenMoko · Palm OS · HP webOS · Symbian OS · Windows CE · Windows Mobile
L'environnement de programmation Unix/Linux 47
L’ENVIRONNEMENT UNIX/LINUX
Présentation générale du système UNIXLe Système de fichiersLe shellLes filtres: grep, sed, awk, find, sort
Maher SELLAMI
22012-2013
L'environnement de programmation Unix/Linux
48
SOMMAIRE
• Présentation générale du système UNIX• Le Système de fichiers• Le shell• Les filtres
– grep,– sed, – awk, – find, – sort
2012-2013
L'environnement de programmation Unix/Linux
492012-2013
Présentation générale du système UNIX Historique
1969Version expérimentale sur PDP-7
1971Version 1
1972
1973UNIX en C- Bell Labs
Version 2
1974Version 5
1974PWB
1975Version 6
1979Version 7
1974HERT temps réel
1977BSD 2.0
Berkley
1980
BSD 4.1
1981SunOs
1986
BSD 4.3
1981
System III
1983System V AT&T
1985System V R2.0
1986System V R3.0
1980XENIX
Microsoft
1987/ 88
SYSTEM V R3.2
1990SYSTEM V R4.0
1981XENIX 2.0
Micro/SCO
1985XENIX 5.1
1989SCO UNIX
System V/386
1986AIX 1.0
IBM
1990AIX 3.1
SUN
1987
MACH
1991
OSF/1
L'environnement de programmation Unix/Linux
50
Les raisons du succès d'UNIIX
• écrit en C, et donc est facilement portable • les sources sont disponibles; adaptations
faciles aux besoins• l'environnement UNIX est particulièrement
riche et fécond
2012-2013
Présentation générale du système UNIX Historique
L'environnement de programmation Unix/Linux
51
Le phénomène de standardisation
Plusieurs spécifications constituent une base de garantie de la portabilité d'applications;
• POSIX (1983) publiée par l'IEEE et issu d'un document de l'association /usr/group
• X/OPEN (1984): créée par les constructeurs européens
• SVID (1984) d'origine AT&T.• OSF (1984) IBM, DEC, BULL, HP... impose le
standard AIX/OSF (UNIX d'IBM)• ARCHER (AT&T) ou UNIX International, le
standard est UNIX SYSTEM V R 4
2012-2013
Présentation générale du système UNIX Historique
L'environnement de programmation Unix/Linux
52
Caractéristiques essentielles
• UNIX est un système multi-tâches, multti-threads, multi-utilisateurs en temps paratagé.
• Les entrées-sorties sont banalisées sous forme de fichiers (périphérique, prise réseau, fichier ordinaire…)
• L'utilisateur a deux façons pour accéder aux services offerts par le système : – écrit des programmes qui font des appels au noyau– utilise l'interface-utilisateur qui fourni un langage de
commande, le shell (Bourne-Shell, C-Shell, Korn-Shell, T-Shell)
• 2 sortes d'utilisateurs:– l'administrateur du système: a tous les droits; responsable du
système (root);– les autres usagers : enregistrés par le root, rassemblés en
groupes.
2012-2013
Présentation générale du système UNIX Caractéristiques essentielles
L'environnement de programmation Unix/Linux 53
L’ENVIRONNEMENT UNIX/LINUX
Présentation générale du système UNIXLe Système de fichiersLe shellLes filtres: grep, sed, awk, find, sort
Maher SELLAMI
22012-2013
L'environnement de programmation Unix/Linux
54
Le Shell
• programme ordinaire appelé interpréteur de commande
• choisi par l'usager• Un programme shell est interprété
interactivement ou en mode détaché; véritable langage de programmation
• Les 3 fonctions intéressentes sont :– Les noms de fonctions abrégés– La redirection des entées-sortie– Créer un environnement sur mesure
2012-2013
Présentation générale du système UNIX Caractéristiques essentielles
L'environnement de programmation Unix/Linux
55
Processus
• entité dynamique qui nait, qui vit en toute indépendance ou en communiquant avec d'autres processus , qui à son tour peut créer des processus, et enfin qui meurt.
• Un processus est caractérisé par– numéro(PID);– un père (PPID);– un propriétaire (UID);– un groupe propriétaire (GID),– …
2012-2013
Présentation générale du système UNIX Caractéristiques essentielles
L'environnement de programmation Unix/Linux
56
Fichiers standards
2012-2013
Présentation générale du système UNIX Caractéristiques essentielles
P1entrée standardsortie standard
erreur standard
120
P21
20écran
clavierUn processus fils du shell initial
Processus Théorique
P31
20 écranclavier
fsP4
1
20fsfefi
les entrées-sorties standards redirigéessortie standard redirigé
L'environnement de programmation Unix/Linux
57
Fichiers standards
Différentes formes de redirection sont possibles:• 1>f ou >fredirection de la sortie standard sur f, avec création;• 2>f idem, pour rediriger l'erreur standard;• 1>>f ou >>f redirection de la sortie standard sur f, avec création de f s'il
n'existait pas;• 2>>f idem, pour rediriger l'erreur standard;• 0<f ou <fredirection de l'entrée standard à partir de f;
affiche un message sur la sortie standard$ echo ceci est mon messagele message sert à initialiser le fichier f. $ echo ceci est mon message >fécrie la liste des fichiers dans fichier.liste$ ls >fichier.liste$ cat f1 f2 f3 >>temp ajouter f1 f2 f3 dans tempenvoye un message à des personnes provenant du fichier let$ mail marie eric phil <let $ sort <temp trie le contenu du fichier temp
2012-2013
Présentation générale du système UNIX Caractéristiques essentielles
L'environnement de programmation Unix/Linux
58
Composition de processus
• composition séquentielle (;): C1;C2;C3$ date; wc <fff; who am i; echo fin de commande>totoMon Sep Jan 27 19:08:47 PST 199312 33 345jmr tty9 Jan 27 17:55$ cat totofin de commande composee
• composition parallèle de processus indépendants (&):
C1&C2&C3le commande wc s'exécutera pendant que l'usager à la main
$ wc ch* >wc.out &2145$ lp ch*& cc code.c
• composition parallèle de processus communicants(|): C1|C2|C3
2012-2013
Présentation générale du système UNIX Caractéristiques essentielles
P10 1
2P2 1
2P3 1
2
0 0
L'environnement de programmation Unix/Linux
59
Fichier
• Un fichier est une suite non structurée, stockée sur une mémoire auxiliaire.
• Plusieurs sortes de fichiers:– les fichiers ordinaires;– les répertoires;– les périphériques à accès par caractère (terminal);– les périphériques à accès par bloc (disque);– les références vers un autre volume (liens symboliques);– les tubes mettant en communication deux processus ;– les prises réseaux, pour accéder à des fichiers éloignés.
• Un fichier peut avoir plusieurs liens (noms)
2012-2013
Le Système de fichiers Notion de fichier
L'environnement de programmation Unix/Linux
60
Caractéristiques d'un fichier
• Les caractéristiques statiques d'un fichier sont stockées dans un descripteur appelé i-noeud:– le type de fichier (ordinaire, répertoire, ...);– sa taille, en octets;– le couple UID-GID; le numéro du propriétaire et le
numéro de son groupe;– date de création, la date de dernière modification et la
date de dernière consultation;– un compteur de référence sur le i-noeud (nombre de
liens);– la liste des blocs contenant l'information sur le disque.– …
2012-2013
Le Système de fichiers Notion de fichier
L'environnement de programmation Unix/Linux
61
Désignation d'un fichier : répertoires
• La correspondance entre désignation externe (identificateur) et désignation interne (n° de i-noeud) est réalisée par les répertoires .
• Un répertoire (catalogue) est un fichier particulier : c'est en fait un tableau à deux colonnes, l'une noms des fichiers,numéro de i-noeud.
2012-2013
Le Système de fichiers Notion de fichier
..
.
usrbin
..
.
localbin
225
100150
..
.
rmln
2365052
3625
202
25 36
L'environnement de programmation Unix/Linux
62
Répertoire
2012-2013
Le Système de fichiers Notion de fichier
bin dev libetc tmp
user1 bin libtmp usr2
courier jeux unix progc docu jeux progc
doc1 doc2 doc doc1 doc2 doc3prog1.c pog2.c
usr
/ (racine)
Le chemin complet du fichier prog1.c est : /usr/user1/progc/prog1.cle chemin relatif à doc : courier/doc
L'environnement de programmation Unix/Linux
63
Les permissions
• Chaque fichiers possède un ensemble de permissions, qui déterminent qui peut faire quoi avec le fichier.
• 3 types de permissions associées à un fichier :– lecture examen du contenu;– écriture modification;– exécution faire exécuter comme un programme;
• L'option -l de ls imprime les permissions :$ ls -l /etc/passwd-rw-r--r-- 1 root 5115 Aug 30 10 10:40 /etc/passwd$ ls -lg /etc/passwd-rw-r--r-- 1 root 5115 Aug 30 10 10:40 /etc/passwd$ ls -l /bin/passwd-rwsr-xr-x 1 root 5115 Aug 30 10 10:40 /etc/passwd
• Le s à la place du x dans les permissions du propriétaire indique que, lorsque la commande est exécutée, elle doit obtenir les permissions associées à son propriétaire (set-uid).
2012-2013
Le Système de fichiers Notion de fichier
L'environnement de programmation Unix/Linux
64
Les permissions
$ ls -lddrwxrwxr-x 1 root 5115 Aug 30 10 10:40 etc/passwd
• La permission d'effacer un fichier est indépendante du fichier.• chmod change les permissions d'un fichier, 2 formes :
– soit un nombre octal , de la forme
chmod nnn fichiers 4:"read", 2:"write", 1:"execute"
$ chmod 666 essai # lire, écrire par tous– soit sous forme symbolique
chmod [qui] * position [droit]+ fichiers... qui :: u|g|o|a
position :: +|-|= droit :: r|w|x
$ chmod +x commande # tout le monde peut exécuter$ chmod -w f1 # empêche d'écrire sur f1
• Seul le propriétaire d'un fichier peut en changer les permissions (le super utilisateur aussi ).
• chown, chgrp
2012-2013
Le Système de fichiers Notion de fichier
L'environnement de programmation Unix/Linux
65
Introduction
• Les services offerts par UNIX sont accessibles par :– un sous-programme du noyau UNIX, appelé depuis un
programme ( C, PASCAL)– un programme exécutable à travers un interpréteur de
commande (shell) .
• Le langage Bourne-Shell est un langage algorithmique.• Il permet de manipuler sont essentiellement les fichiers
et les répertoires de l'arborescence d'UNIX.• Les instructions du langage de commande peuvent être:
– un appel d'un sous-programme externe: ls , rm, cp, ...– un appel d'un sous-programme interne : echo , read, ...– structure de contrôle : if , while, ...– une liste de commandes ou phrases (c1;c2 ou c1|c2)
2012-2013
Le shell introduction
L'environnement de programmation Unix/Linux 66
L’ENVIRONNEMENT UNIX/LINUX
Présentation générale du système UNIXLe Système de fichiersLe SHELL (Bourne shell)Les filtres: grep, sed, awk, find, sort
Maher SELLAMI
22012-2013
L'environnement de programmation Unix/Linux
67
Caractères génériques
? remplace un caractère quelconque, sauf le ;
* remplace n'importe quelle chaîne, même vide, de caractères ne comportant pas
[...] remplace un caractère parmi ... , ou un caractère parmi ceux qui ne sont pas énumérés entre [...] , si le premier est un point d'exclamation.
$ ls t1.p t2b.p t3.p tf.p tn.p tx.pt1a.p t2.p t4.p tn tx$ echo Mes versions de TP sont t?.pMes Versions de TP sont t1.p t2.p t3.p tf.p tn.p tx.p$ echo les bonnes versions t[!0-9].ples bonnes versions tf.p tn.p tx.p$ echo Dans t1?.p les tableaux sont de la forme t\[nx]
avec nx=12 \*PDans t1a.p t&b.p les tableaux sont de la forme t[nx]
avec nx=12*P
2012-2013
Le shell Notions de base
L'environnement de programmation Unix/Linux
68
Notions de base
• Séparateurs; séparateurs de phrases
<tab> espace séparateurs d'entités lexicales (mot)
• Mots– désignent les variables, les symboles du langage (mots-clé) et les noms de fichiers.– Un commentaire est préfixé par un #.
• Caractères génériques– ? remplace un caractère quelconque, sauf le ;– * remplace n'importe quelle chaîne, même vide, de caractères ne comportant pas– [...] remplace un caractère parmi ... , ou un caractère parmi ceux qui ne sont pas énumérés
entre [...] , si le premier est un point d'exclamation.
$ ls t1.p t2b.p t3.p tf.p tn.p tx.pt1a.p t2.p t4.p tn tx$ echo Mes versions de TP sont t?.pMes Versions de TP sont t1.p t2.p t3.p tf.p tn.p tx.p$ echo les bonnes versions t[!0-9].ples bonnes versions tf.p tn.p tx.p$ echo Dans t1?.p les tableaux sont de la forme t\[nx] avec nx=12 \*PDans t1a.p t&b.p les tableaux sont de la forme t[nx] avec nx=12*P
• Caractères spéciaux & | < > $ ( ) ' " ` { } \• caractère spécial devient un caractère normal s'il est précédé du caractère \ ou s'il
est situé dans une parenthésage particulier. 2012-2013
Le shell Notions de base
L'environnement de programmation Unix/Linux
69
Parenthésages
• Servent à regrouper des séquences de mots ou à isoler des mots:{...} exécute les commandes dans ... par le même shell;
(...) exécute les commandes ... par un shell fils;
'...' prend littéralement ... ; aucun caractère spécial n'interprété ;
"..." prend littéralement ... après interprétation de $, '...', et \
`...` exécute les commandes dans ... ; le résultat (sortie standard) remplace `...`$ echo '***'*** # idem \*\*\*$ echo "Voici l'exemple"Voici l'exemple$ echo la variable 'as$V3' contient $HOME/as\$la variable as$v3 contient /users/fc/tp1/as$le shell remplace $HOME par /users/fc/tp1/as, v3 par vide
$ echo "la variable as$V3 contient $HOME/as\$"la variable as contient /users/fc/tp1/as$$ echo 'la variable as$V3 contient $HOME/as\$'la variable as$v3 contient $HOME/as$$ (date ; who)>f1 <f2wed sep 28 09:11:09vous tty2 sep 28 08:30mhs tty4 sep 28 09:30
2012-2013
Le shell Notions de base
L'environnement de programmation Unix/Linux
70
Variables• désignées par des mots; elles ne se déclarent pas, et leurs type (numérique ou
chaîne) dépend de leur interprétation par les commandes. • Initialisation variable=valeur • valeur: valeur numérique, une chaîne de caractères, le résultat d'un commande, une
liste de commandes ...$ N=1 # N est une variable entière$ ACTIF=`who` # ACTIF est une chaîne, résultat en sortie par l'exécution de who$ USAGE="echo Syntaxe: $0 f1 F2; cat $help"USAGE est une liste de commandes
• Evaluation des variables– La prise de valeur d'une variable ou d'un paramètre est réalisée par l'opérateur $ préfixant le nom de la
variable ou du paramètre.– Les accolades {} peuvent être nécessaire autour du nom,
$ REP=${REP}miage # Concaténer "miage" sans espace à la valeur de REP
2012-2013
Le shell Variables; Arguments et paramètres
L'environnement de programmation Unix/Linux
71
Evaluation des variables
ion des variables
• {variable:-mot} substitue la variable si elle est définie , sinon le mot (non évalué)$ t=${x:-60} # t aura la valeur de x, sinon 60
• {variable:=mot} idem avec de plus affectation de la variable si elle n'est pas définie$ a='bonjour'$ echo ${a:='au revoir'}bonjour$ echo ${b:='salut'} # b aura la valeur 'salut' salut
• {variable:?mot} si la variable est initialisé et non nulle, elle sera substituée; autrement, imprime mot et termine le processus Shell en cours.$ echo ${b:?Erreur} # b à pour valeur initiale 'salut'salut$ echo ${c:?Attention!} # c n'est pas initialiséec : Attention!
• {variable:+mot} si la variable est initialisé et non nulle, l'interprète substituera mot et sinon la chaîne vide, la variable n'étant pas modifiée.
$ echo ${b:+bonjour}
bonjour
2012-2013
Le shell Variables; Arguments et paramètres
L'environnement de programmation Unix/Linux
72
Paramètres des commandes
• Les paramètres effectifs d'une commande ou argument sont des chaînes de caractères.
• Les paramètres formels sont désignés par des chiffres; des paramètres positionnels: – 0 nom de la commande;– 1 premier paramètre effectif;– 2... deuxième paramètre effectif, ainsi de suite;– "$*" équivalent à "$1 $2 ..." "$@" équivalent à "$1" "$2" ...
2012-2013
Le shell Variables; Arguments et paramètres
L'environnement de programmation Unix/Linux
73
Portée et environnement
ion des variables
• La portée d'une variable est le processus qui l'a crée.• export rend les variables visible dans les processus Shell qui seront crées par la
suite (fils)$ x=Bonjour$ export x$ sh # un autre shell$ echo $xBonjour # x est connue dans le sous-shell
2012-2013
Le shell Variables; Arguments et paramètres
L'environnement de programmation Unix/Linux
74
Variables prédéfinies• # nbre de paramètres effectifs d'une commande (sous-prog.);• ? code de retour d'une commande;• $ numéro de du processus Shell en cours;• ! numéro du dernier processus lancé en arrière plan;• HOME nom du répertoire personnel, fournit le paramètre par défaut de cd;• PATH règles de recherches des commandes;• TERM type du terminal utilisé• PS1 valeur de premier prompt ($ par défaut)• PS2 valeur de second prompt (> par défaut)• IFS caractères séparateur de chaînes dans le Shell.• Une variable peut être détruite par la commande interne unset (sauf PATH, PS1,
PS2)
2012-2013
Le shell Variables; Arguments et paramètres
L'environnement de programmation Unix/Linux
75
read, echo
ion des variables
• read lit une ligne de l’entrée standard au clavier; chacun des mots est affecté successivement à une variable (dans l'ordre).$ read x y z # si on tape "une deux trois quatre cinq"une deux trois quatre cinqOn aura les variables x="une", y="deux" et z="trois quatre cinq"
• echo affiche sa liste d’arguments sur la sortie standard; admet les caractères spéciaux (\t \n \f \c)echo [-ne] [message ...]
echo {--help,--version}
-n Ne pas effectuer le saut de ligne final.
-e Interpréter les séquences de caractères précédées d'un backslash '\‘ \a alerte (sonnerie) \n saut de ligne \c supprimer le saut de ligne final
\f saut de page \r retour chariot \b retour en arrière d'un caractère
\t tabulation horizontale \v tabulation verticale \\ backslash
\nnn le caractère de code ASCII nnn (en octal)
2012-2013
Le shell Lecture et affichage
L'environnement de programmation Unix/Linux
76
expr
ion des variables
• expr - Evalue des expressionsexpr expression...
expr {--help,--version}
Incrémentation de NN=`expr $N + 1` # autres opérateurs : - * / %(mod)
– Opérateurs: | & < <= == != > >= + - / * % :– match chaîne exp_reg– substr chaîne pos lg– index chaîne classe_caractère– length chaîne
2012-2013
Le shell Expressions
L'environnement de programmation Unix/Linux
77
test
ion des variables
• test - Vérifier le type d'un fichier, et comparer des valeurs.
test expr ou encore [ expr ]
test {--help,--version}• test renvoie une valeur 0 (vrai) ou 1 (faux) suivant l'évaluation
de l'expression conditionnelle expr.• expr terme simple, ou suite de termes combinés avec les
opérateurs logiques : -a, -o !. ; parenthéses \( ...\)– -r f vrai si f existe et a le droit r;– -w f vrai si f existe et a le droit w;– -x f vrai si f existe et a le droit x;– -f f vrai si f existe et est un fichier ordinaire;– -d r vrai si le répertoire r existe;– -u f vrai si f existe et a le bit set-UID;– -s f vrai si f existe et n'est pas de longueur nulle;
2012-2013
Le shell Expressions
L'environnement de programmation Unix/Linux
78
test (suite)
ion des variables
– -z ch vrai si la chaîne ch est de longueur nulle;– -n ch vrai si la chaîne ch est de longueur non nulle;– c1 = c2 vrai si la chaîne c1 et c2 sont égales (espacement
obligatoire) ;– c1 != c2 vrai si la chaîne c1 et c2 sont différentes;– n1 -eq n2 vrai si les nombres n1=n2 (prédicats:-ne -ge -gt -lt -le)
f1 accssible en lecture, on affiche un message
test –r f1 && echo “f1 accessible en lecture”I compris entre 10 et 20
if [ $I -ge 10 -a $I -le 20] then ...le fichier résultat n'est pas vide, ou R non nulle et N> NN
if test -s resultat -o \( -n $R -a $N -gt $NN \)then ...
2012-2013
Le shell Expressions
L'environnement de programmation Unix/Linux
79
Structure de la ligne de commande
ion des variables
• Commande simple:retourne code zéro si exécution sans erreur ou une valeur non nul à une
signification propre à la commande qui l'a retournée.
• Tube (pipe-line) : séquence de 2 ou plusieurs commandes séparées par le "|".
• Liste de commande: séquence de commandes simples ou de pipe-lines séparés par l'un des caractères suivants : ; & && ||– C1 ; C2 exécution séquentielle de C1 puis C2 ;– C1 & C2 exécution asynchrone; – C1 && C2 exécute C1; s'il n'ya pas d'erreur , exécute C2;– C1 || C2 exécute C1; s'il ya une erreur , exécute C2.
• Structure de contrôle
2012-2013
Le shell Les Commandes
L'environnement de programmation Unix/Linux
80
La boucle pour...
for <variable> [in <chaine> ...]
do <liste de commandes>
done• La liste de commande est exécutée pour chaque valeur de la
variable prise dans les mot de la chaînefor prog in *.pdo echo –e "\n\n$prog \n"head -1 $prog
done
affiche la liste des paramètres
for i # équivalent à for i in $*do echo $i ; done
2012-2013
Le shell Les Commandes
L'environnement de programmation Unix/Linux
81
La boucle tantque...
while <liste de commandes>
do <liste de commandes>
done• Tant que la dernière commande de la première <liste de
commandes> est vrai, la deuxième <liste de commandes> est exécutée
• Tant que la fin du fichier n’est pas atteintwhile read ligne; do … ; done
• lire un choix numériqueecho "Votre choix (1-4) "while echo "?\c"; read choix;[ "$choix" -lt 1 -o $choix -gt 4 ]do echo "Recommencer (1-4) "done
2012-2013
Le shell Les Commandes
L'environnement de programmation Unix/Linux
82
La sélection si…if <liste de commnades 1>
then <liste de commandes 2>
else <liste de commandes 3>
fi
• La liste de commande 2 est exécuté si la liste de commandes 1 est vraie, sinon la liste de commandes 3.if test -f $1then echo $1 existeelse echo $1 n\'existe pas
fi
c1&&c2 s’écrit: if c1; then c2; fi c1||c2 s’écrit: if c1; then :;else c2; fi
2012-2013
Le shell Les Commandes
L'environnement de programmation Unix/Linux
83
La sélection si…
if ...thenelse if ...
then....fi…
fi
ou encoreif ...then.. .elif .......else…
fi
2012-2013
Le shell Les Commandes
L'environnement de programmation Unix/Linux
84
La sélection cas ...
case <chaîne> in
<motif> ) <liste de commandes>;;
<motif> ) <liste de commandes>;;
…
esac
• exécute la liste de commandes correspondant au premier motif satisfaisant la chaîne , puis l'exécution du case est terminée.
aiguillage après la lecture du choixcase $choix in1) sh choix1;;2) sh choix2;;*) echo "Pas encore au point";;
esac
2012-2013
Le shell Les Commandes
L'environnement de programmation Unix/Linux
85
Commandes Internes
prédéfinies dans le Shell; pas de fichier exécutable ayant son nom.
• break [n] sortir d'une boucle (tant que, pour), ou de n emboîtements de boucles;
• continue [n] continuer à l'itération suivante d'une boucle, ou à la nème boucle englobante;
• exit [n] quitter le programme avec en code retour celui de la dernière commande exécutée, ou n si
• return [n] idem pour quitter une fonction;• . fichier exécute un fichier Shell dans le Shell courant;• : commande vide du Shell. Son code de retour est 0
while :; do date; done
2012-2013
Le shell Les Commandes
L'environnement de programmation Unix/Linux
86
Commandes relatives aux varaibles et paramètres
• eval mot mot contient une liste de commande Shellqui seront sont exécutées.( sous-programme).
# fichier de démarrage /etc/profileMESSFIN="echo `logname` de \'connecte\' le ; date;"QUOTAT='TAILLE=`du -s $HOME | cut -f1`'MESQUIT=' echo Test des quotas en cours"eval $QUOTASif [ $TAILLE -gt $MAXQUOTAS ]theneval $MESSFIN
exec shfi
2012-2013
Le shell Les Commandes
L'environnement de programmation Unix/Linux
87
Commandes relatives aux varaibles et paramètres
• set [arg1]+ fournit les valeurs des paramètres effectifs correspondant aux paramètres formels 1, 2, ...
paramétrer les sous-programmes réalisés par evalset `date` # range le jour de la semaine dans $1 mois dans $2 ...
• set -u [mot] substitution d'une variable non définie (mot) provoque une erreur
• shift [n] les paramètres $n+1.... ($2, par défaut) sont renommés à partir de 1.
2012-2013
Le shell Les Commandes
L'environnement de programmation Unix/Linux
88
Redirection des E/S • >fichier dirige la sortie standard vers fichier;• >> fichier ajoute la sortie standard à fichier;• < fichier prend la sortie standard à fichier;• n> fichier dirige la sortie du descripteur n vers fichier;• n>> fichier ajoute la sortie du descripteur n vers fichier;• <&m le fichier de descripteur m au lieu de l'entrée standard;• >&m idem pour la sortie standard;• n> &m fusionne la sortie du descripteur n à celle de m ;• n< &m fusionne l'entrée du descripteur n à celle de m ;• n< fichier dirige la sortie du descripteur n vers fichier• << [-]mot l'entrée est lue jusqu'à une ligne contenant mot
(ou fin de fichier).- ignorer les blancs de début de ligne;
2012-2013
Le shell Redirection des E/S
L'environnement de programmation Unix/Linux
89
Redirection des E/S $ (echo Message normal> echo message pour signaler une erreur 1>&2> echo Autre message normal ) > sortie 2>erreur$ cat sortieMessage normalAutre message normal$ cat erreurMessage pour signaler une erreur
2012-2013
Le shell Redirection des E/S
L'environnement de programmation Unix/Linux
90
Gestion des processus et des événements• wait [n] suspend l'exécution jusqu'à ce que le processus
n, ou tous les processus lancés en arrière-plan, se terminent.• trap [arguments] [n]+ l'argument est une commande qui sera
exécutée par le Shell lorsque le signal n survient;• trap [n]+ les trappes sont remises à leur état primitif
(restaurer)• trap liste des commandes associés à chaque signal.• exec [commande] lance la commande par recouvrement du
processus shell$ exec kshremplacement du Shell par un processus Korn-shell$ exec loginrecommencer une session, en gardant la ligne$ exec >sessionpour ce shell, la sortie standard est le fichier
2012-2013
Le shell Sous-programme
L'environnement de programmation Unix/Linux
91
Sous-programme ou procédure shell• Un texte en Shell stocké dans un fichier constitue une
procédure Shell. Son activation peut se faire:
sh <nom du fichier> <arguments>
<nom du fichier> <arguments> , le droit x doit être positionné$ sh proc1 f1 f2 f3$ proc1 f1 f2 f3
2012-2013
Le shell Sous-programme
L'environnement de programmation Unix/Linux 92
L’ENVIRONNEMENT UNIX/LINUX
Présentation générale du système UNIXLe Système de fichiersLe shellLes filtres: grep, sed, awk, find, sort
Maher SELLAMI
22012-2013
L'environnement de programmation Unix/Linux
93
Recherche d'une chaîne dans un fichier: grep• grep, egrep et fgrep lisent « ligne par ligne » et affichent les lignes de
fichiers donnés en paramètre et qui contiennent un motif donné.
grep [option] <motif> [<fichier> ... ]• motif est une expression régulière dans laquelle certains caractères ont
une signification particulière.• Sauf option contraire, chaque ligne ayant cette propriété est écrite sur la
sortie standard. • Le code de retour est 0 si un motif a été trouvé, 1 sinon, et 2 s'il y a eu des
erreurs
2012-2013
Les Filtres La famille « grep »
L'environnement de programmation Unix/Linux
94
Options
Op• -v seules les lignes ne contenant pas le motif sont affichées;• -v seules les lignes contenant pas le motif sont affichées;• -c seul le nombre de lignes satisfaisantes est affiché;• -i ignore la distinction minuscule/majuscule (grep );• -l seules les noms de fichiers contenant le motif sont affichés;• -n numérote les lignes affichées;• -e motif lorsque le motif commence par un tiret;• -f fichier le motif est dans le fichier (egrep et fgrep)
$ grep -n variable *.ch cherche variable dans les source$ grep From $MAIL affiche les messages contenant From$ grep From $MAIL| grep -v marie... autre que marie$ grep -c marie $HOME/lib/annuaire trouve le n° de
marie $ who | grep marie est-elle connectée?$ ls | grep -v temp tous les fichiers sauf temp
2012-2013
Les Filtres La famille « grep »
L'environnement de programmation Unix/Linux
95
expressions régulières de grep et fgrep • c tout caractère non spécial• \c ignore la signification spéciale de c• ^ début de ligne • $ fin de ligne• . n'importe quel caractère unique• [...] n'importe quel caractère unique parmi ....; • [^...] n'importe quel caractère unique ne figurant pas parmi ....• \n ce qui a été identifié par la nième sous expression \(...\) • r* zéro ou plus occurrences de r• r+ une ou plus occurrences de r• r? zéro ou une occurrence de r• r1r2 r1 suivi de r2• r1| r2 r1 ou r2 (egrep seulement)• \( r \) sous expression r repérée (grep seulement); voir \n; • (r) expression régulière r (egrep seulement); peut être imbriqué
2012-2013
Les Filtres La famille « grep »
L'environnement de programmation Unix/Linux
96
Exemples$ grep '^From' $MAIL$ ls -l | grep '^d'$ ls -l | grep '^.......rw'$ grep '^[^:]*::' /etc/passwd
• fgrep recherche plusieurs expressions simultanément• egrep traite des expressions régulières avec 'ou' et des () pour grouper les
expressions.
2012-2013
Les Filtres La famille « grep »
L'environnement de programmation Unix/Linux
97
Recherche d'un fichier: find find [répertoire]+ [expression]+• find descend récursivement des sous-hiérarchies de répertoires données
par leur racine, en cherchant les fichiers répndant à certaines critères (nom,droit,type, taille..).
• répertoire la liste des racines des sous-hiérarchies à explorer• expression suite de primitives exprimant à la fois les critères de
sélection des fichiers et les actions à leur appliquer.
2012-2013
Les Filtres Recherche d'un fichier: find
L'environnement de programmation Unix/Linux
98
expression-name <fic> recherche le fichier fic
-user <nom> recherche un fichier appartenat à l'utilisateur nom;
-atime <n> recherche un fichier utilisé dans les n derniers jours;
-mtime <n> recherche un fichier modifié dans les n derniers jours;
-newer <fic> recherche un fichier modifié plus récemment que fic;
-type <x> recherche un fichier de type <x> avec : b pour fichier spécial bloc,
c pour fichier spécial caractère,
d pour fichier répertoire,
f pour fichier ordinaire,
p pour tube nommé (System III/V);
-perm <octal> recherche un fichier ayant les permissions données;
- links <n> recherche un fichier ayant n liens ;
-group <nom> recherche sur un groupe nom;
2012-2013
Les Filtres Recherche d'un fichier: find
L'environnement de programmation Unix/Linux
99
expression• - size <nc|n> recherche sur une taille en blocs ou en caractères;• - exec commande vrai si la commande restitue une valeur de sortie nulle.
la fin de la commande doit être ponctuée par \; et le nom du fichier examiné est représenté par {};
• - print le nom de fichier doit être imprimé;• - inum <n> recherche un fichier dont le i-noeud n;• -\(expression\) a pour valeur booléenne celle de l'expression parenthésée.• Toutes ces primitives peuvent être composées avec: !, -o , et \(\).
2012-2013
Les Filtres Recherche d'un fichier: find
L'environnement de programmation Unix/Linux
100
ExempleE find /usr/ens \( -name *.p -o -name *.f \) -mtime -30 -exec ls -i
{} \;2135 /usr/ens/mhs/exam.p2149 /usr/ens/mhs/scarable.f2149 /usr/ens/rim/exp.p2149 /usr/ens/rim/examen.pfind $HOME -newer .datesauv -printaffiche les fichiers de l'arborescence définie par le répertoire
personnel de l'usage modifiés après le fichier .datesauv
2012-2013
Les Filtres Recherche d'un fichier: find
L'environnement de programmation Unix/Linux
101
Tri
sort [options] [clé [option]]* [<fichier1> ]* • trie les lignes et écrit les résultats sur la sortie standard (sauf -o).
options• -c (check) vérifie si le fichier est dèjà trié;• -u (unique) conserve un seul exemplaires des lignes identiques;• -o <fichier> (output) envoie la sortie sur fichier• -d (dictionary) ordre lexicographique (lettres, les chiffres, blancs);• -f traduit les majuscules en minuscules;• -n clé numérique (signée éventuellement);• -i les caractères dont le code ASCII 040-0176;• -r tri en ordre inversé;• -b ignorer les blancs en début de champ;• -t<x> le délimiteur de champ dans les lignes est le caractère x.
2012-2013
Les Filtres Tri et fusion
L'environnement de programmation Unix/Linux
102
Notion de cléN• clé de la forme +debut - fin.
debut premier champ servant à faire la clé (numérotation à partir de zéro)
finn° du premier champ qui n'appartient pas à la clé.
sort +1 -2 f trie f sur une clé formaté par le deuxième champ de chaque ligne
• Une clé peut être préciser des portions de champs.
debut et fin sont de la forme m.n (éventuellement l'une des options b d f i n ou r) où:
m nombre de champs à sauter depuis le début de ligne
n nombre de caractères à sauter en début de champ .
2012-2013
Les Filtres Tri et fusion
L'environnement de programmation Unix/Linux
103
Exemples$ ls | sort trie les noms de fichiers en ordre
alphanumérique$ ls -s | sort -nr trie par ordre de taille décroissante $ ls -l | sort +4nr -5n trie par taille décroissant;
après avoir sauter les 3 premiers champs$ who | sort +4n -5n trie les plus anciennes
connexions$ sort +2.3 -5.0 f trie f sur une clé qui commence au
troisième champ (4ème caractère), et qui se termine à la fin du cinquième champ.
Soit f.t un fichier d'étudiants qui la format suivant:nom, prénom, jj/mm/aa, codeBac, codeDiplôme$ sort -t, +4bf -5bf +0f -1f f.t >diplome.ttri sur diplôme, puis alphabétiquement, sortie sur
diplome.t$ sort -t, +2.6b -2.8b +2.3b -2.5b +2.0b -2.2b f.t >age.ttri par âge, la date étant la date de naissance, sortie
sur age.t.2012-2013
Les Filtres Tri et fusion
L'environnement de programmation Unix/Linux
104
• 4.3.2 Fusion • sort -m [options] [clé [option]]+ [<fichier1> ]+• Les fichiers doivent préalablement être triés sur les clés de fusion.
2012-2013
Les Filtres Tri et fusion
L'environnement de programmation Unix/Linux
105
L'éditeur de flot sed • sed est un éditeur non interactif qui permet le traitement de fichiers texte.
sed [-n] [<requête>][-e <requête>]* [ -f <script>][<fichier>]*• sed recopie le ou les fichier (par défaut l'entrée standard) sur la sortie
standard, en appliquant à chaque ligne les requêtes qui suivent l'option -e (un par requête), ou les requêtes qui se trouve dans le fichier script, ou la requête s'il y en a une.
• -n affichage sur la sortie des lignes sur lesquelles on applique la commande p seulement.
Forme générale des requêtes de sed• [adresse1 [adresse2]] commande [arguments] • adresse peut être • n n° absolu d'un ligne de texte • $ dernière ligne• /expression/ motif figurant dans la ligne adressé.
2012-2013
Les Filtres L'éditeur de flot sed
L'environnement de programmation Unix/Linux
106
Mode de fonctionnement
2012-2013
Les Filtres L'éditeur de flot sed
fichier à éditer fichier résultat
tampon des
requêtes
tampon
auxiliaire
tampon d'édition (1 ligne)
L'environnement de programmation Unix/Linux
107
Les commandes de manipulation de l'espace de travail• a\ <texte> ajoute des lignes à la sortie jusqu'à la première ligne ne se
terminant pas par \• b <etiq> saut à la commande :etiq• c\ remplace des lignes comme pour a• d détruit la ligne courante; lit la suivante• i\ insère le texte avant la prochain sortie • l imprime la ligne • q termine• r fic lit fic, et copie son contenu en sortie• s/<anc>/<nouv>/f substitue l'expression régulière <anc> par la chaîne de
substitution nouv. f est un indicateur :• g : remplace toutes occurrences traitées;• p : le tampon est écrit si une substitution est effectuée;• w <fic> : écrit dans fic si une substitution est effectuée • t <etiq>branchement à etiq si la dernière substitution a réussi• w <fic> écrit dans fic;
2012-2013
Les Filtres L'éditeur de flot sed
L'environnement de programmation Unix/Linux
108
Les commandes de manipulation de l'espace de travail• y/<ch1>/<ch2>/ toutes les occurrences du tampon des caractères figurant dans la
ch1 sont remplacés par ch2.• = imprime le n° de la ligne;• ! commande-sedcommande est effectuée sur les lignes non sélectionnées;• { et } associe à un espace d'adressage une liste de commandes;• N la ligne courante est ajoutée au tampon;• D détruit le début du tampon jusqu'à la première <LF>;• P affiche le début du tampon jusqu'à la première <LF>;• h le tampon est transféré dans le tampon auxiliaire;• H le tampon est ajouté dans le tampon auxiliaire; le séparateur est la fin de
ligne• g le tampon auxiliaire est copié dans le tampon dont le contenu est détruit• G le tampon auxiliaire est ajouté dans le tampon; le séparateur est la fin de
ligne• x échange entre les contenus du tampon et du tampon auxiliaire.
2012-2013
Les Filtres L'éditeur de flot sed
L'environnement de programmation Unix/Linux
109
Exemples$ sed 's/UNIX/UNIX(TM)/g' f1 f2$ '10,/{# .*}/s/ */ /g' f >>f$ who | sed 's/ .* / /'$ sed '/fin/ q'$ sed '/^***/d'$ sed 's/$/\n'$ sed '1,/^$/d$ sed -n '/^$/,/^fin/p $ sed -n '/exp/w fichier1 > /exp/!w fichier2
2012-2013
Les Filtres L'éditeur de flot sed
L'environnement de programmation Unix/Linux
110
ExemplesRemplacer <LF> par le séparateur :, sauf s'il est suivi par !.# debut de la boucle: debut# ajout de la suivante dans le tamponN# remplacer la fin de ligne par : s'il n'y a pas de !s/ \n \([^!]\) / :\1 /# si la substitution a réussi , recommencert debut# sinon , afficher la ligne d'adresse complèteP# et détruire le ! qui reste dans le tampond
2012-2013
Les Filtres L'éditeur de flot sed
L'environnement de programmation Unix/Linux
111
Outil de transformation de texte AWK• outil non interactif pour traiter des textes, les transformer , les éditer , faire des
calculs • manipule les fichiers ligne par ligne et adresse les champs à l'intérieur des lignes• chaque ligne est soumise à awk (<fprog>, <prog>) ;
awk [-F<car>] {[-f <fprog>| <prog>]} [param] [<fichier>]*• Syntaxe d'un programme sélection { actions }• sélection expressions, BEGIN, END
$ awk '/<expression régulière>/ {print}' <fichier> -idem egrep$ awk ' {print}' <fichier> ... -idem cat
Traitement des champs• $1, $2, ..., $NF désignent le premier champ, le second champ, .... • $0 enregistrement courant (ligne).• NF nombre de champs de la ligne courante.
$ whorim tty2 Sep 29 11:53slim tty4 Sep 29 12:15$ who | awk '{print $1, $5} imprime les noms et heurs de connexionsrim 11:53slim 12:15
2012-2013
Les Filtres Outil de transformation de texte AWK
L'environnement de programmation Unix/Linux
112
Les variablesLes variables utilisateurs• La déclaration et le type sont implicites (numériques, chaînes).• Initialisées à la chaîne vide '‘
Les variables prédéfinies• FILENAME nom du fichier courant d'entrée• FS séparateur de champs (<espace> par défaut)• NF nombre de champs dans l'enregistrement courant• NR n° de l'enregistrement courant• OFMT format de sortie des nombres (défaut %g, voir printf..)• OFS séparateur de champs de sortie(par défaut, un espace)• ORS séparateur de lignes en sortie (par défaut, fin de ligne)• RS séparateur de lignes en entrée (par défaut de ligne)
$ awk '{print NR, $0}' affiche le fichier avec le n° de ligne$ awk '{ printf "%4d %s\n", NR, $0 }' idem n° de ligne sur 4 caract.
2012-2013
Les Filtres Outil de transformation de texte AWK
L'environnement de programmation Unix/Linux
113
Les sélections- combinaison quelconque au moyen des opérateurs: ! || && (et)
- expression régulière de la forme<expression> ~ /<expression régulière>/
<expression> !~ /<expression régulière>/
<expression> <op> <expression> où <op> est < <= > >= == !=
$2 == "" 2ème champ vide$2 ~ /$/ 2ème champ identique à la chaîne vide$2 !~ /./ 2ème champ ne contient aucun caractèrelength($2) == 0 2ème champ de longueur nulle
$ awk -F: '$2 == "" {print}' /etc/passwd les gens sans mot de passe$ awk 'BEGIN {FS = ":" } idem> $2 == "" {print}' /etc/passwd
- intervalle de la forme /motif/, /motif/
2012-2013
Les Filtres Outil de transformation de texte AWK
L'environnement de programmation Unix/Linux
114
Les opérateurs (priorité )• = += -= *= /= %= opérateurs d'affectation• || opérateur booléens OU; «exp1» || «exp2» • «exp2» n'est pas évaluée que si «exp1» est vraie• && opérateur booléens ET; «exp1» && «exp2» est vraie si les deux le sont• ! négation • > >= < <= == != ~ !~ opérateurs relationnels ~ et !~ sont des opérateurs de
correspondance.• <espace> opérateur de concaténation de chaînes• + - plus, moins;• * / % multiplication, division, reste;• ++ -- incrémentation, décrémentation (préfixé ou postfixé);
2012-2013
Les Filtres Outil de transformation de texte AWK
L'environnement de programmation Unix/Linux
115
Les fonctions• cos(expr) cosinus de expr;• exp(expr) exponentielle de expr;• getline() lit la ligne suivante; 0 si fin de fichier, 1 sinon;• index(s1, s2) position de la chaîne s1 dans la chaîne s2;• int(expr) partie entière de expr;• length(s) longueur de la chaîne s; $0 par défaut.;• log(expr) logarithme naturel de expr;• sin(expr) sinus de expr;• split(s, a, c) découpe s en a[1],a[2], ..., a[n] suivant le délimiteur c (ou FS);• sprintf(fmt,...) formate ... en accord avec la spécification fmt;• substr(s, m, n) sous-chaîne de s; début au caractère m, longueur maximale n.
2012-2013
Les Filtres Outil de transformation de texte AWK
L'environnement de programmation Unix/Linux
116
Les instructionsapparaissent dans les actions et se terminent soit par un ; <fin de ligne> #• - Instructions d'impression
print [<expression>, <expression> ...]
printf (<format>, [<expression>, <expression> ...])
• - Instruction conditionnelleif (<expression>)
<instruction>
else
<instruction>
• - Instructions itérativeswhile (<expression>)
<instruction>
for (<var>; <expr>; <expr>)
<instruction>
for (<var> in <tableau>)
<instruction>
• break sortie de la boucle courante;• continue poursuivre à l'itération suivante de la boucle;• exit sortie de awk ou passage à l'action associé à END;• next abondan de l'enregist. courant et passage au suivant;
2012-2013
Les Filtres Outil de transformation de texte AWK
L'environnement de programmation Unix/Linux
117
Les tableaux associatifs• Les tableaux sont des variables qui associent des indexes avec des valeurs. • Les indexes peuvent être soit des nombres, soit des chaînes de caractères :
# imprime son entrée à l'envers
awk ' { ligne[NR]=$0 }END {for (i=NR; i>0; i--) print ligne[i]}' $*
# freqmot : compter les apparitions de motsawk ' { for (i=1; i<=NF; i++) num[$i]++ }END {for (mot in num) print mot,num[mot]}' $*
2012-2013
Les Filtres Outil de transformation de texte AWK
L'environnement de programmation Unix/Linux
118
Un autre exemple: awk# recherche les mots doubles adjacents dans plusieurs fichiersawk 'FILENAME != prevfile { # nouveau fichierNR=1prevfile=FILENAME}NF>0 {if ($1 == dernmot)printf "double %s, fichier %s, ligne %s ", $1, FILENAME, NRfor (i=2; i<=NF; i++)if ($i == $(i-1))printf "double %s, fichier %s, ligne %s \n", $i, FILENAME, NRif (NF >0)dernmot=$NF} ' $*
2012-2013
Les Filtres Outil de transformation de texte AWK
L'environnement de programmation Unix/Linux 119
PROGRAMMER SOUS GNU/LINUX
Compiler avec GCCLe configurateur MAKEDéboguer avec le Débogueur GNU (GDB)Environnement d’exécutionGestion des erreursEcrire et utiliser des Bibliothèques
Maher SELLAMI
32012-2013
L'environnement de programmation Unix/Linux
120
Traduction et interprétation des programmes• Programme interprété
Programmer sous GNU/LINUX Compiler avec GCC
2012-2013
•Programme Interprété
Editeur CompilateurProgramme
Source Programme
objetrelogeable
Programme Exécutable
relogeable
• Programme Compilé• Compilation unique
InterpréteurProgramme
Source Résultat
Données
BibliothèqueBibliothèque
Editeur
Programme Source 1
Compilateur
Programme Source 2
Programme Source 3
Compilateur Compilateur
Programme objet1
Programme objet2
Editeur de liens
Programme Exécutable
Bibliothèque
Programme objet3
Chargeur M.C.
• Compilation séparée
Chargeur MémoireCentrale
Champs des outils de production
chaîne de production
traditionnelle
L'environnement de programmation Unix/Linux
121
Outils de production
Compilateur• Traduit les modules sources écrits en langage de haut
niveau (C, Ada, …) en modules objets qui contiennent du langage machine mais dans lesquels les calculs d’adresses ne sont pas résolus.
Editeur de liens (linker) :• rassemble les modules traduits séparément par les
traducteurs, les relie et produit un module chargeable (ou relogeable - relocatable -).
Chargeur (loader) :• Le rôle du chargeur est donc d'aller chercher sur un
disque les fichiers exécutables (le programme) et les données pour les implanter en mémoire.
Programmer sous GNU/LINUX Compiler avec GCC
2012-2013
Module TLC 122
Compilateur vs Interpréteur
Février 2008
Différence entre un compilateur et un interpréteur :
What time is it ? Compilateur
Quelle heure est-il ?
What time is it ? Interpréteur
Il est 9h35.
L'environnement de programmation Unix/Linux
123
Compiler avec GCC
• Les compilateurs disponibles sur les systèmes Linux font tous partie de la GNU Compiler Collection, plus communément appelée GCC (http://gcc.gnu.org/.) .
• GCC inclut également des compilateurs C, C++, Java, Objective-C, Fortran et Chill. Ce chapitre se concentre plus particulièrement sur la programmation C et C++.
• Supposons que vous ayez un programme reciprocal avec : – un fichier source C++ (reciprocal.cpp) et ;– un fichier source C (main.c)
• Ce programme calcule l'inverse d'un entier.
Programmer sous GNU/LINUX Compiler avec GCC
2012-2013
L'environnement de programmation Unix/Linux
124
ExempleFichier source C main.c#include <stdio.h>#include <stdlib.h>#include "reciprocal.hpp"int main (int argc, char **argv) { int i; i = atoi (argv[1]); printf ("L'inverse de %d est %g\n", i, reciprocal (i)); return 0;}
Programmer sous GNU/LINUX Compiler avec GCC
Fichier source C++ reciprocal.cpp#include <cassert>#include "reciprocal.hpp"double reciprocal (int i) {
assert (i != 0); // i doit être différent de zéro return 1.0/i;}Fichier d'entête reciprocal.hpp
#ifdef %%__%%cplusplusextern "C" {#endifextern double reciprocal (int i);#ifdef %%__%%cplusplus}#endif
2012-2013
L'environnement de programmation Unix/Linux
125
Compiler un Fichier Source Isolé
% gcc -c main.c
Le fichier objet résultant est appelé main.o. • Le compilateur C++ s'appelle g++. (similaire à gcc);
% g++ -c reciprocal.cpp
• L'option -c indique à g++ de ne compiler le fichier que sous forme d'un fichier objet; sans cela, g++ tenterait de lier le programme afin de produire un exécutable.
• L'option -I est utilisée pour indiquer à GCC où rechercher les
fichiers d'entête. % g++ -c -I ../include reciprocal.cpp% g++ -c -D NDEBUG reciprocal.cpp
désactivez la vérification en définissant la macro NDEBUG. • L’option –O optimise le code afin qu'il s'exécute aussi rapidement
que possible% g++ -c -O2 reciprocal.cpp
Programmer sous GNU/LINUX Compiler avec GCC
2012-2013
L'environnement de programmation Unix/Linux
126
Lier les Fichiers Objet
• Maintenant que vous avez compilé main.c et reciprocal.cpp, vous devez les lier. % g++ -o reciprocal main.o reciprocal.o
• Vous pouvez maintenant lancer reciprocal comme ceci: % ./reciprocal 7
• Ajout d’une bibliothèque (-l)% g++ -o reciprocal main.o reciprocal.o -lpam
inclure libpam.a lors de l'édition de liens• Si vous voulez que l'éditeur de liens recherche en plus dans d'autres
répertoires, vous devez utiliser l'option -L, % g++ -o reciprocal main.o reciprocal.o -L/usr/local/lib/pam
-lpam
indiquer à l'éditeur de liens de rechercher les bibliothèques dans le répertoire /usr/local/lib/pam% gcc -o app app.o -L. -ltest
indiquer à l'éditeur de liens de rechercher la bibliothèque test dans le répertoire courant
Programmer sous GNU/LINUX Compiler avec GCC
2012-2013
L'environnement de programmation Unix/Linux 127
PROGRAMMER SOUS GNU/LINUX
Compiler avec GCCLe configurateur MAKEDéboguer avec le Débogueur GNU (GDB)DocumentationEnvironnement d’exécutionGestion des erreursEcrire et utiliser des Bibliothèques
Maher SELLAMI
32012-2013
L'environnement de programmation Unix/Linux
128
Automatiser le Processus avec GNU Make
• Vous pouvez fournir toutes ces informations à make en les plaçant dans un fichier nommé Makefile. reciprocal: main.o reciprocal.o
g++ $(CFLAGS) -o reciprocal main.o reciprocal.omain.o: main.c reciprocal.hpp
gcc $(CFLAGS) -c main.creciprocal.o: reciprocal.cpp reciprocal.hpp
g++ $(CFLAGS) -c reciprocal.cppclean:
rm -f *.o reciprocal% makegcc -c main.cg++ -c reciprocal.cppg++ -o reciprocal main.o reciprocal.o
• recompiler avec les optimisations activées, vous procéderiez de la façon suivante: % make cleanrm -f *.o reciprocal% make CFLAGS=-O2gcc -O2 -c main.cg++ -O2 -c reciprocal.cppg++ -O2 -o reciprocal main.o reciprocal.oNotez que le drapeau -O2 a été inséré à la place de $(CFLAGS) dans les règles.
Programmer sous GNU/LINUX GNU Make
2012-2013
L'environnement de programmation Unix/Linux
129
Le configurateur MAKE
• lit une spécification de dépendances ou mode d'emploi de fabrication, et l'interprète pour créer une nouvelle version complète.
• Il vérifie les dates de dernière modification, pour réaliser le minimum de compilation.
Exemple:
$ calculer <entree >sortie• Le mode d'emploi dont a besoin make pour
fabriquer sortie (makefile) :sortie : calculer entree
calculer <entree >sortie
Programmer sous GNU/LINUX Le configurateur MAKE
2012-2013
L'environnement de programmation Unix/Linux
130
Mode de fonctionnement: Makefile
• make examine si les dépendances de l'entrée sont à jour; sinon, fait exécuter par des processus UNIX les commandes de fabrication en les soumettant une par une à l'interpréteur shell.
Le mode d'emploi est constitué à partir de six modèles de lignes:• Lignes de commentaires débutent par un # et se termine <NL>• Définitions d'entrée nomment les entrées et définissent les dépendances:
Cible : liste de dépendances
Exemple: prog: def.c sp.o prog.c
• Règles de fabrication forment la recette; suivent un définition d'entrée: <tab> <commande>
Exemple: gcc -o prog prog.o def.o sp.o
• Les entrées génériques .s [ .t ]+ :
.s.t. mode d'emploi général à appliquer pour fabriquer un fichier de suffixe .t quand on a un fichier de suffixe .s
• Les lignes d'inclusion include <fichier>• Définitions de macros une macro est une variable de make
<nom macro> = <texte définissant la macro>
Programmer sous GNU/LINUX Le configurateur MAKE
2012-2013
L'environnement de programmation Unix/Linux
131
L'appel de make
make [-f makefile] [options] [macro=valeur ] [cible] • -i Ignorer les erreurs retournées par les
commandes exécutées;• -s Ne pas imprimer les commandes avant de les
exécuter;• -r Ne pas utiliser les règles implicites;• -t Maj des dates des fichiers cibles sans
exécuter les comandes;• -o Retourner un code précisant l'état cible• -f fic fic est le nom du fichier description à utiliser
(makefile).
Programmer sous GNU/LINUX Le configurateur MAKE
2012-2013
L'environnement de programmation Unix/Linux
132
Utilisation des macros
• La substitution de macro précédant son nom entre () par $.
MISEAUPOINT = # rien: pas de mise au pointprog: def.p sp.o prog.o
pc -o prog prog.o def.o sp.odef.o: def.p
pc -c $(MISEAUPOINT) def.psp.o: sp.p def.o
pc -c $(MISEAUPOINT) sp.pprog.o: prog.p def.o
pc -c $(MISEAUPOINT) prog.p
• On obtient un module prog pour la mise au point de 2 façons:– MISEAUPOINT = -g # dans le makefile– $ make MISEAUPOINT = -g # dans l’appel de make
Programmer sous GNU/LINUX Le configurateur MAKE
2012-2013
L'environnement de programmation Unix/Linux
133
Macros prédéfinies
• $@ nom complet du fichier cible (à faire)• $* nom du fichier cible sans préfixe;• $? liste des dépendants qui sont plus récents que le fichier cible courant;• $< nom du fichier source associé à une règle implicite (suffixe du fichier
cible);.c.o :
gcc –c $*.c.c.o :
gcc –c $<
• $$@ n'a de sens que sur la ligne de définition de dépendances. Il se réfère à l'objet courant ($@) défini dans l'entrée.
• Exemple de makefilePASPROG = demo ex1 essai ex2# obtention des exécutables PASCAL$(PASPROG) : [email protected]
pc -c $@ $*.p# entrée pour détruire les éxecutablesvider del :
rm -f $(PASPROG)# entrée pour recommencer tout: détruire et refaire les exécutablesre : vider $(PASPROG)
Programmer sous GNU/LINUX Le configurateur MAKE
2012-2013
L'environnement de programmation Unix/Linux 134
PROGRAMMER SOUS GNU/LINUX
Compiler avec GCCLe configurateur MAKEDéboguer avec le Débogueur GNU (GDB) Documentation Environnement d’exécutionGestion des erreursEcrire et utiliser des Bibliothèques
Maher SELLAMI
32012-2013
L'environnement de programmation Unix/Linux
135
Introduction
• Le débogueur est le programme que vous utilisez pour trouver pourquoi votre programme ne se comporte pas comme vous pensez qu'il le devrait.
• Compiler avec les Informations de Débogage• compiler en activant les informations de débogage,
utiliser l'option -g % make CFLAGS=-ggcc -g -c main.cg++ -g -c reciprocal.cppg++ -g -o reciprocal main.o reciprocal.o
Programmer sous GNU/LINUX Déboguer avec le Débogueur GNU (GDB)
2012-2013
L'environnement de programmation Unix/Linux
136
Lancer GDB
% gdb reciprocal
(gdb)• lancer votre programme au sein du débogueur.
(gdb) runStarting program: reciprocalProgram received signal SIGSEGV, Segmentation fault.%%__%%strtol_internal (nptr=0x0, endptr=0x0, base=10, group=0)at strtol.c:287287 strtol.c: No such file or directory.(gdb) • Vous pouvez observer la pile en utilisant la commande where:
(gdb) where#0 %%__%%strtol_internal (nptr=0x0, endptr=0x0, base=10, group=0) at strtol.c:287#1 0x40096fb6 in atoi (nptr=0x0) at ../stdlib/stdlib.h:251#2 0x804863e in main (argc=1, argv=0xbffff5e4) at main.c:8main a appelé la fonction atoi avec un pointeur NULL ce qui est la source de l'erreur.
Programmer sous GNU/LINUX Déboguer avec le Débogueur GNU (GDB)
2012-2013
L'environnement de programmation Unix/Linux
137
Les commandes de GDB
• remonter de deux niveaux dans la pile jusqu'à atteindre main
(gdb) up 2#2 0x804863e in main (argc=1, argv=0xbffff5e4) at main.c:88 i = atoi (argv[1]);• GDB retrouver le fichier source main.c et il affiche la ligne contenant l'appel • Vous pouvez inspecter la valeurs des variables en utilisant la commande print:
(gdb) print argv[1]$2 = 0x0Cela confirme que le problème vient d'un pointeur NULL passé à atoi. • Vous pouvez placer un point d'arrêt en utilisant la commande break:
(gdb) break main
Breakpoint 1 at 0x804862e: file main.c, line 8.• relancer le programme avec un argument, comme ceci:
(gdb) run 7Starting program: reciprocal 7Breakpoint 1, main (argc=2, argv=0xbffff5e4) at main.c:88 i = atoi (argv[1])Vous remarquez que le débogueur s'est arrêté au niveau du point d'arrêt.
Programmer sous GNU/LINUX Déboguer avec le Débogueur GNU (GDB)
2012-2013
L'environnement de programmation Unix/Linux
138
Les commandes de GDB
• Vous pouvez passer à l'instruction se trouvant après l'appel à atoi en utilisant la commande next:
(gdb) next9 printf ("L'inverse de %d est %g\n", i, reciprocal (i));
• Si vous voulez voir ce qui se passe à l'intérieur de la fonction reciprocal, utilisez la commande step,
(gdb) stepreciprocal (i=7) at reciprocal.cpp:66 assert (i != 0);Vous êtes maintenant au sein de la fonction reciprocal.
Programmer sous GNU/LINUX Déboguer avec le Débogueur GNU (GDB)
2012-2013
L'environnement de programmation Unix/Linux 139
PROGRAMMER SOUS GNU/LINUX
Compiler avec GCCLe configurateur MAKEDéboguer avec le Débogueur GNU (GDB) Documentation Environnement d’exécutionGestion des erreursEcrire et utiliser des Bibliothèques
Maher SELLAMI
32012-2013
L'environnement de programmation Unix/Linux
140
Pages de Manuel
• Les pages de manuel sont divisées en sections numérotées; pour les programmeurs, les plus importantes sont celles-ci: (1) Commandes utilisateur
(2) Appels système
(3) Fonctions de la bibliothèque standard
(8) Commandes système/d'administration
% man sleep
• la page de manuel de la fonction sleep de la bibliothèque standard, utilisez cette commande: % man 3 sleep
• Chaque page de manuel comprend un résumé sur une ligne de la commande ou fonction.
• whatis liste toutes les pages de manuel (de toutes les sections) pour une commande ou une fonction
• recherche par mot-clé sur les résumés man -k mot-clé.
Programmer sous GNU/LINUX Documentation
2012-2013
L'environnement de programmation Unix/Linux
141
Info
• Info contient des informations plus détaillées pour beaucoup de composants fondamentaux du système GNU/Linux et quelques autres programmes.
• Les pages Info sont des documents hypertextes, similaires aux pages Web.
• Pour lancer le navigateur texte Info, tapez simplement info à l'invite de commande. Parmi les documents Info les plus utiles, on trouve: – gcc Le compilateur gcc– libc La bibliothèque C GNU, avec beaucoup d'appels système– gdb Le débogueur GNU– emacs L'éditeur de texte Emacs– info Le système Info lui-même
Programmer sous GNU/LINUX Documentation
2012-2013
L'environnement de programmation Unix/Linux 142
PROGRAMMER SOUS GNU/LINUX
Compiler avec GCCLe configurateur MAKEDéboguer avec le Débogueur GNU (GDB) Documentation Environnement d’exécutionGestion des erreursEcrire et utiliser des Bibliothèques
Maher SELLAMI
32012-2013
L'environnement de programmation Unix/Linux
143
La Liste d'ArgumentsInteraction Avec l'Environnement d'Exécution
• En lancant un programme, vous pouvez passer plus d'informations en ajoutant un ou plusieurs mots après le nom du programme
• Ce sont des arguments de ligne de commande ou liste d'arguments du programme.
% ls -s /• le programme ls reçoit de trois éléments :
– le nom du programme lui-même, (ls)– Les second et troisième élément sont les deux arguments de ligne de
commande, -s et /.
• La fonction main de votre programme peut accéder à la liste d'arguments via ses paramètres argc et argv – argc, indique le nombre d'éléments dans la liste. – argv, est un tableau de pointeurs sur des caractères (taille est argc,)
qui pointent vers les éléments de la liste d'arguments, qui sont des chaînes terminées par zéro.
Programmer sous GNU/LINUX Environnement d’exécution
2012-2013
L'environnement de programmation Unix/Linux
144
Utiliser argc et argv
• arglist.c
Programmer sous GNU/LINUX Environnement d’exécution
#include <stdio.h>int main (int argc, char* argv[]){
printf ("Le nom de ce programme est '%s'.\n", argv[0]);printf ("Ce programme a été invoqué avec %d arguments.\n",
argc - 1);/* A-t-on spécifié des arguments sur la ligne de commande ? */if (argc > 1) {
/* Oui, les afficher. */int i;printf ("Les arguments sont :\n");for (i = 1; i < argc; ++i)
printf (" %s\n", argv[i]);}return 0;
}
2012-2013
L'environnement de programmation Unix/Linux
145
la Ligne de Commande GNU/Linux
• Les options modifient le comportement du programme, alors que les autres arguments fournissent des entrées
• Les options peuvent prendre deux formes: – Les options courtes sont formées d'un seul tiret et
d'un caractère isolé (-h)– Les options longues sont formées de deux tirets
suivis d'un nom composé de lettres majuscules, minuscules et de tirets (-- help, --output foo).
• il est conseillé d'utiliser les noms préconisés dans les standards de codage. % info "(standards)User Interfaces"
Programmer sous GNU/LINUX Environnement d’exécution
2012-2013
L'environnement de programmation Unix/Linux
146
Utiliser getopt_long
• Pour utiliser getopt_long, vous devez fournir deux structures de données.– La première est une chaîne contenant les options courtes valables, chacune sur une
lettre. Une option qui requiert un argument est suivie par deux-points.
ho:v indique que les options valides sont -h, -o et -v, la seconde devant être suivie d'un argument.
– Pour indiquer les options longues disponibles, vous devez construire un tableau d'éléments struct option. Chaque élément correspond à une option longue et dispose de quatre champs :
• le nom de l'option longue • 1 si l'option prend un argument, 0 sinon; • NULL • un caractère qui indique l'option courte synonyme de l'option longue. • Tous les champs du dernier élément doivent être à zéro.
Programmer sous GNU/LINUX Environnement d’exécution
Forme courte Forme longue Fonction
-h --help Affiche l'aide mémoire et quitte
-o nom fichier --output nom fichier Indique le nom du fichier de sortie
-v --verbose Affiche des messages détaillés
L'analyse des options de la ligne de commande est une corvée. La fonction, getopt_long, interprète à la fois les options courtes et longues.
2012-2013
L'environnement de programmation Unix/Linux
147
Exemple
const char* const short_options = "ho:v";
const struct option long_options[] = { { "help", 0, NULL, 'h' }, { "output", 1, NULL, 'o' }, { "verbose", 0, NULL, 'v' }, { NULL, 0, NULL, 0 }};….next_option = getopt_long (argc, argv, short_options, long_options, NULL);
Programmer sous GNU/LINUX Environnement d’exécution
2012-2013
L'environnement de programmation Unix/Linux
148
Interaction avec l’environnement
• L’environnement est une collection de paires variable/valeur (sous forme de chaine de caractères) dans une variable « environ »
char * getenv(const char *name)
obtenir la valeur de la variable d’environnement name
int setenv(const char *name, const char value, int overwrite)
positionner une variable
int putenv(char *string)
ajouter une variable string est de la forme name=value*/
int unsetenv(const char *name);
supprime une variable
Programmer sous GNU/LINUX Environnement d’exécution
2012-2013
L'environnement de programmation Unix/Linux
149
Afficher l'Environnement d'Exécution print-env.c
Programmer sous GNU/LINUX Environnement d’exécution
#include <stdio.h>/* La variable ENVIRON contient l'environnement. */extern char** environ;int main (){ char **var; for (var = environ; *var != NULL; ++var) printf ("%s\n", *var); return 0;}
• Ne modifiez pas environ vous-même; utilisez plutôt les fonctions setenv et getenv.
2012-2013
L'environnement de programmation Unix/Linux 150
PROGRAMMER SOUS GNU/LINUX
Compiler avec GCCLe configurateur MAKEDéboguer avec le Débogueur GNU (GDB) Documentation Environnement d’exécutionGestion des erreursEcrire et utiliser des Bibliothèques
Maher SELLAMI
32012-2013
L'environnement de programmation Unix/Linux
151
La gestion des erreurs : perror()• Un appel système retourne une valeur différente de 0 si une erreur survient
– “errno”, est une variable «système» qui contient le code numérique de l’erreur du
dernier appel système, un appel système qui échoue modifie la valeur de errno
– La liste globale d'erreurs sys_errlist[] indexée par errno peut être utilisée pour obtenir
le message d'erreur (errno <sys_nerr ).
– “perror(char *str)” est une fonction standard C qui décrit les erreurs des appels
systèmes ( affiche str suivie par “:” et une description de la dernière erreur rencontrée,
sinon “Error 0” )
– char *strerror (int errnum) Obtenir le libellé d'un code d'erreur « errnum »
• “/usr/include/sys/errno.h” contient une liste des codes d’erreurs prédéfinies
Exemples: #define EPERM 1 /* Not owner */ #define ENOENT 2 /* No such file or directory */ #define ESRCH 3 /* No such process */ #define EINSR 4 /* Interrupted System call */ #define EIO 5 /* I/O error */
Programmer sous GNU/LINUX Gestion des erreurs
2012-2013
L'environnement de programmation Unix/Linux
152
La gestion des erreurs : perror()
#include <stdio.h> #include <sys/file.h> #include <errno.h> main() { int fd; /* Open a nonexistent file to cause an error */ fd = open(“nonexist.txt”, O_RDONLY); if ( fd==-1 ) {/* fd == -1 , an error occurred */ printf( “errno = %d \n”, errno ); perror(“main”); } fd=open( “/”, O_WRONLY ); /* Force a different error */ if ( fd== -1 ) {
printf(“errno=%d\n”, errno); perror(“main”);
} /* Execute a successful system call */ fd = open(“nonexist.txt”, O_RDONLY | O_CREAE, 0644 ); printf(“errno=%d\n”, errno); /* Display after successful call */ perror(“main”); errno=0; /* Manually reset error variable */ perror(“main”);
}
Programmer sous GNU/LINUX Gestion des erreurs
2012-2013
L'environnement de programmation Unix/Linux
153
La gestion des erreurs : perror()
$ showErrno errno=2 main: No such file or directory errno=21 main: Is a directory errno=21 main: Is a directory main: Error 0
Programmer sous GNU/LINUX Gestion des erreurs
2012-2013
L'environnement de programmation Unix/Linux
154
assert
• détecter des conditions inattendues assert(condition)
• Le programme s'arrête si l'expression est fausse, après avoir affiché un message d'erreur (nom du fichier, le numéro de ligne et le texte de l'expression)for (i = 0; i < 100; ++i) assert (do_something () == 0);Ou mieux,for (i = 0; i < 100; ++i) { int status = do_something (); assert (status == 0);}
Programmer sous GNU/LINUX Gestion des erreurs
2012-2013
L'environnement de programmation Unix/Linux 155
PROGRAMMER SOUS GNU/LINUX
Compiler avec GCCLe configurateur MAKEDéboguer avec le Débogueur GNU (GDB) Documentation Environnement d’exécutionGestion des erreursEcrire et utiliser des Bibliothèques
Maher SELLAMI
32012-2013
L'environnement de programmation Unix/Linux
156
Les bibliothèques statiques
• Une archive (ou bibliothèque statique) est une collection de fichiers objets
stockée dans un seul fichier objet (fichier lib sous Window)
• Lorsque vous fournissez une archive à l’éditeur de liens, il recherche au
sein de cette archive les fichiers dont il a besoin, les extrait et les lie avec
votre programme comme si vous aviez fourni ces fichiers objets
directement.
• Vous pouvez créer une archive en utilisant la commande ar.
• Les fichiers archives utilisent l’extension .a$ ar cr libtest.a test1.o test2.o
combiner test1.o et test2.o dans une seule archive libtest.a
• une bliothèque à un emplacement visible :– /usr/local/lib si la librairie est susceptible d’être utilisée par plusieurs utilisateurs ;
– ~/lib si la librairie est susceptible d’être utilisée par un seul utilisateur.
– La variable « LD_LIBRARY_PATH » pour les bibliothèques dynamiques
Programmer sous GNU/LINUX
2012-2013
L'environnement de programmation Unix/Linux
157
Les bibliothèques dynamiques
• Différences avec les archives, l’édition de liens se fait pendant l’exécution
• la réduction de la taille d'un exécutable, • la mise à jour de la bibliothèque sans
refaire l’édition de liens• Les bibliothèque partagées (shared) ne
sont chargées qu’une seule fois en mémoire
Programmer sous GNU/LINUX
2012-2013
L'environnement de programmation Unix/Linux
158
Les bibliothèques dynamiques
• Pour créer une bibliothèque partagée, compiler les objets avec l'option -fPIC
% gcc -c -fPIC test1.cL'option -fPIC indique au compilateur que vous allez utiliser test1.o en tant qu'élément d'un objet partagé.
• Puis, vous combinez les fichiers objets au sein d'une bibliothèque partagée, comme ceci: % gcc -shared -fPIC -o libtest.so test1.o test2.o
• L'option -shared indique à l'éditeur de liens de créer une bibliothèque partagée au lieu d'un exécutable ordinaire.
• Les bibliothèques partagées utilisent l'extension .so, (shared object),, le nom commence toujours par lib
• Lier un programme à une bibliothèque partagée (idem statique)% gcc -o app app.o -L. -ltest
Programmer sous GNU/LINUX
2012-2013
L'environnement de programmation Unix/Linux 159
LES SYSTÈMES DE GESTION DE FICHIERS
IntroductionOrganisation logiqueOrganisation physiqueStructuration du disque durRéalisation des fonctions d’accès élémentairesSécurité et ProtectionExemple: Le SGF d’UNIX
Maher SELLAMI
4O
2012-2013
L'environnement de programmation Unix/Linux
160
Fonctions d’un SGF
• Fichier– un objet qui contient un ensemble d’information pour
conservation et utilisation dans un système informatique– possède un nom qui permet de le désigner– Fonctions d’accès principales: lire, écrire, éventuellement
exécuter
• SGF– Conservation des fichiers en mémoire secondaire– Implantation des fonctions d’accès aux fichiers (ouvrir,
fermer, lire, écrire, …)– Assure sécurité et protection: intégrité des informations et
respect des droits d’accès– Gère l’accès aux supports physiques
Systèmes de gestion de fichiers Introduction
2012-2013
L'environnement de programmation Unix/Linux
161
Organisation d’un SGF
Un SGF est organisé de façon hiérarchique : toute action au niveau logique et interprété comme un ensemble d’actions au niveau physique
Systèmes de gestion de fichiers Introduction
Organisation logique•Vue par l’utilisateur•Déterminé par condition de
• Commodité• généralité
Organisation physique•Liée aux supports physiques•Déterminé par considération de
• Économie de places• Efficacité d’accès
SGF
répertoire={ descripteurs} TABLES D’IMPLANATION Physiques
Nom externe Nom interne
Un SGF réalise la correspondance entre l’organisation logique et l’organisation physique
2012-2013
L'environnement de programmation Unix/Linux
162
Programme :
Organisation logique : suite d’enregistrementsPour les élèvesLire (nom_élève);
Lire (note_examen);Écrire (table);
faitSauvegarder(mon_fichier)
toto 12
dupont 20
cesar 09
cléopâtre 15
Programme mon_fichierinstructions
Toto Dupont César12 20 09
Programmedonnée
100100010000
Cléopâtre15
Organisation physiqueStructure selonAllocation
fichier_notes_nfa004
NFA003 4
ExempleSystèmes de gestion de fichiers Introduction
2012-2013
Schèma de l’organisation d’un SGFSystèmes de gestion de fichiers Introduction
163L'environnement de programmation
Unix/Linux
Réalisation des fonctions d’accès logique
Interface de l’utilisateur
Interfaces internes au SGF
Fonctions d’accès logique
Noms externes et locaux
Noms internes
Liaison des noms
Interprétation nom externes
Interprétation nom locaux
Réalisation des fonctions d’accès Physique
Réalisation E/S physiques
Allocation de mémoire secondaire
Adresses logiques
Adresses physiques
2012-2013
L'environnement de programmation Unix/Linux
164
Schèma de l’organisation d’un SGF• La mise en correspondance entre organisation
logique et physique peut comporter une organisation intermédiaire
Systèmes de gestion de fichiers Introduction
adresse logique
adresses physiques
Désignation d’article
Fonctions d’accès
Cette étape intermédiaire pour des raisons d’efficacité peut être court-circuitée (unix,windows, …)
deux cas de figure :• Le S.E. connaît la structure logique des fichiers (Macintosh, IBM,…)
+ les possibilités sont plus importantes,- le S.E. est plus complexe.
• Le S.E. considère les fichiers comme des flots d’octets (MS-DOS, Unix,)
+ le système est plus simple,− pas d’assurance sur la nature des fichiers
2012-2013
L'environnement de programmation Unix/Linux 165
LES SYSTÈMES DE GESTION DE FICHIERS
IntroductionOrganisation logiqueOrganisation physiqueStructuration du disque durRéalisation des fonctions d’accès élémentairesSécurité et ProtectionExemple: Le SGF d’UNIX
Maher SELLAMI
4O
2012-2013
L'environnement de programmation Unix/Linux
166
Organisation logique d’un fichier
• vue de l’utilisateur de l’ensemble des données mémorisées sur le support de masse– Un type de donnée (programmation)– Un ensemble de données groupées sous forme d’enregistrements
(articles)
• fichier = { enregistremements }• Les fonctions d’accès sont spécifiques de l’organisation logique• A chaque enregistrement correspond une adresse logique• enregistrement = {champs ou attributs}• Champs possède un nom et un type• L’Organisation logique dépent des contraintes auxquelles doivent
satisfaire les enregistrements– Ordre sur les articles– Restriction sur les valeurs des champs– Relations entre les attributs des ≠ enregistrements
Systèmes de gestion de fichiers Organisation logique d’un fichier
2012-2013
L'environnement de programmation Unix/Linux
167
• En programmation, un fichier logique est un type dedonnée sur lequel peuvent être appliquées desopérations spécifiques.
Program toto;
fichier : file of …
créer (fichier, mode)ouvrir (fichier, mode)
fermer (fichier)detruire (fichier)
Représentation du fichier interne au programme
Liaison via le SGF avec le fichier physiqueLiaison mon_fichier avec
fichier_notes_nfa004
Rupture de la Liaison avec le fichier physique
6
Notion de fichier logiqueSystèmes de gestion de fichiers Organisation logique d’un fichier
2012-2013
L'environnement de programmation Unix/Linux
168
• Un fichier logique est un ensemble d'enregistrements,désigné par un nom et accessible via des fonctionsd'accès.
Type élement = recordFichier logique : Attributs du fichier
nom-élève : char;note : entier;
end;
enregistrement
Toto Dupont César Cléopâtre12 20 09 15
mon_fichier : file of element
Nom logique (mon_fichier)
fonctions d'accèslire (enregistrement)
écrire (enregistrement)insérer (enregistrement)
supprimer (enregistrement)
Organisation définissant sa structurelogique : le mode d’accès
7
Notion de fichier logique
Systèmes de gestion de fichiers Organisation logique d’un fichier
2012-2013
L'environnement de programmation Unix/Linux
169
• Les enregistrements du fichier ne peuvent être accédésque les uns à la suite des autres.- Ouverture du fichier : positionne sur le premier enregistrement- Opération de lecture : délivre l'enregistrement courant et se
positionne sur le suivant- Opération d’ajout : obligatoirement en fin de fichier
Toto Dupont César12 20 09
Lecture 1 Lecture 2 Lecture 3
Cléopâtre15
AjoutFin de fichier
Accès à l'enregistrement 3il faut lire d'abordl'enregistrement 1,puis l'enregistrement 2
8
Fichier à mode d'accès séquentielSystèmes de gestion de fichiers Organisation logique d’un fichier
2012-2013
L'environnement de programmation Unix/Linux
170
program acces_fichiers;
enrg_note = record nom_eleve : string;
note : integer;
end;
t_fichier_notes = file of enrg_note;
var mon_fichier : t_fichier_notes;Beginassign(mon_fichier,‘fichier_notes_nfa004');reset ( mon_fichier ); (* ouvrir le fichier *)while not eof ( nom_fichier ) do(* parcourir les éléments du fichier – accès séquentiel*) beginget ( mon fichier );end;(* accès relatif : aller à l’élément 6 *)seek (mon_fichier,6) ;get (mon_fichier) ;(* fermeture automatique en fin de programme *)End.
Enregistrement
Déclaration fichier logique
Mise en correspondance
10
Exemple : les fichiers dans le langage pascal
Systèmes de gestion de fichiers Organisation logique d’un fichier
2012-2013
L'environnement de programmation Unix/Linux
171
Main() {
struct note{ char nom_eleve[30];
float note;
} ;
Struct note enrg_note;
FILE *mon_fichier;
mon_fichier=fopen("fichier_notes_nfa004" , "r");while (fread(&enreg_note,sizeof(struct note),1, mon_fichier) do(* parcourir les éléments du fichier – accès séquentiel*/{....}..../* accès relatif : aller à l’élément 6 */fseek(mon_fichier, sizeof(struct note)*6L,0);..../* fermeture automatique en fin de programme *)/}
Enregistrement
Déclaration fichier logique
Mise en correspondance
10
Exemple : les fichiers dans le langage C
Systèmes de gestion de fichiers Organisation logique d’un fichier
2012-2013
L'environnement de programmation Unix/Linux
1729
Fichier à mode d'accès direct
• Les fonctions d’accès s’expriment en fonction des attributs
• Les attributs correspondent aux valeurs des différents champs
• Une clé est tout attribut d’un enregistrement dont la valeur peut servir à accéder à l’enregistrement
• 2 organisations possibles:– Clé unique– Clés multiples
Systèmes de gestion de fichiers Organisation logique d’un fichier
2012-2013
L'environnement de programmation Unix/Linux
1739
Accès direct: clè unique
• Chaque article comporte une seule clé qui l’identifie
cle_trouve=recherche(clé, al) délivre l’adresse logique al correspondant à « clé » si cle_trouve est vrai
• La fonction recherche sert à réaliser un jeu de fonctions d’accès direct:– lire (clé, info)– ajouter(clé, info)– supprimer(clé, info)– modifier(clé, info)
• 2 classes de méthodes :– Adressage dispersé (hash code)– Fichiers indexès
Systèmes de gestion de fichiers Organisation logique d’un fichier
2012-2013
L'environnement de programmation Unix/Linux
1749
Accès direct:Adressage dispersé
• On se donne f une fonction de dispersion qui est définie :– 0 ≤ f(c) ≤ nb d’enregistrements– si c1 = c2, alors f (c1) = f (c2),
• On appel collision, l’existence de deux clés c1 et c2 telles que c1 ≠ c2 et f (c1) = f (c2).
Systèmes de gestion de fichiers Organisation logique d’un fichier
2012-2013
Inconvénients :- il est difficile de choisir f,- sur certains système perte de place,- réorganisation périodique du fichier.
L'environnement de programmation Unix/Linux
1759
Adressage direct par indexation
• Ensemble de clés supposé ordonné• La relation clé-adresse logique est
matérialisée par un index
Systèmes de gestion de fichiers Organisation logique d’un fichier
2012-2013
La recherche d’un enregistrement nécessite en moyenne- n/2 lectures si l’index n’est pas trié,- log2 n lectures si l’index est trié.
L'environnement de programmation Unix/Linux
1769
Adressage direct : clés multitples
• Plusieurs clés pour désigner un article Une valeur de clé peut correspondre à plusieurs
articles
• Une clé primaire est une clé dont la valeur détermine de façon unique un enregistrement
• Technique de base est l’organisation multi-liste
On utilise un index par clé
Systèmes de gestion de fichiers Organisation logique d’un fichier
2012-2013
L'environnement de programmation Unix/Linux
1779
Adressage direct : clés multitples
A135 200
B436 500
R211 200
R322 100
X007 750
Systèmes de gestion de fichiers Organisation logique d’un fichier
2012-2013
… ….
JACQUES 500
… …
PAUL 100
… …
… ….
ARTHAUD 200
… …
DUNOD 500
… …
PUG 750
100
200
500
750
R211 JACQUE PUG <…> 900
Pointeur auteurs
Pointeur éditeurs
Adresseslogiques
Organisation multilistes pour un fichier à clés multiples
Index des référennces
Index des auteurs
Index des éditeurs
L'environnement de programmation Unix/Linux 178
LES SYSTÈMES DE GESTION DE FICHIERS
IntroductionOrganisation logiqueOrganisation physiqueStructuration du disque durRéalisation des fonctions d’accès élémentairesSécurité et ProtectionExemple: Le SGF d’UNIX
Maher SELLAMI
4O
2012-2013
L'environnement de programmation Unix/Linux
17911
Problème
• Comment allouer l’espace disque aux fichiers de sorte que:– Cet espace disuqe soit bien utilisé– L’accès aux fichiers soit rapide
Systèmes de gestion de fichiers Organisation physique d’un fichier
2012-2013
L'environnement de programmation Unix/Linux
180
Adresse physique (secteur) : n°tête, n°cylindre,n°secteur
Cylindre : ensemble des pistes accessiblessans déplacement des têtes
Moteur
tête de lecture/écriture (face)
plateau
Face : 20 à 1500 pistes
Piste : ensemble de secteurs (4 à 32) Alimentation
Secteur : plus petite unité d'information accessible (32 à 4096 octets)
12
Structure du disque durSystèmes de gestion de fichiers Organisation physique d’un fichier
2012-2013
L'environnement de programmation Unix/Linux
181
L’unité d’allocation sur le disque dur est le bloc physique.Il est composé de 1 à n secteurs
ex:1 bloc = 2 secteurs de 512 octets soit 1KO
Les opérations de lecture et d'écriture du SGF se font bloc par bloc
sect sect sect sect
Bloc 1 Bloc 2 Bloc 3 Bloc 4
13
Allocation du disque : le bloc physiqueSystèmes de gestion de fichiers Organisation physique d’un fichier
2012-2013
L'environnement de programmation Unix/Linux
182
Programme :
Pour les élèvesLire (nom_élève);
Lire (note_examen);Écrire (table);
faitSauvegarder(mon_fichier)
totot 12
dupont 20
cesar 09
cléopâtre 15
Programme Fichier logique : suite d’enregistrementsinstructions mon-_fichier
Toto Dupont César Cléopâtre12 20 09 15
Programmedonnée
Fichier physiqueEnsemble de
00110blocs physiques
Fichier_notes_nfa004
14
Implantation physiqueSystèmes de gestion de fichiers Organisation physique d’un fichier
2012-2013
L'environnement de programmation Unix/Linux
183
Implantation physique
• Un fichier physique est constitué d’un ensemble de blocs physique.
• Il existe plusieurs méthodes d’allocation des blocs physiques :– allocation contiguë (séquentielle simple)– allocation par zones– allocation par blocs chainés– allocation indexée
il faut gérer et représenter l'espace libre
2012-2013
Systèmes de gestion de fichiers Organisation physique d’un fichier
L'environnement de programmation Unix/Linux
184
• Un fichier occupe un ensemble de blocs contigus sur ledisque
• Bien adapté au méthodes d'accès séquentielleset directes•Difficultés :-Fragmentation de la mémoire-extension du fichier
fichier 1 : adresse bloc 1, longueur 3 blocs
fichier 2 : adresse bloc 13, longueur 5 blocs
16
Allocation contiguëSystèmes de gestion de fichiers Organisation physique d’un fichier
2012-2013
L'environnement de programmation Unix/Linux
185
• création d'un nouveau fichier : il faut allouer un nombre de blocssuffisants dépendant de la taille du fichier
prévoir cette tailletrouver un trou suffisant (First Fit, BestFit)
Fichier 3 : 4 blocs
fichier 1 : adresse bloc 1, longueur 3 blocs
fichier 2 : adresse bloc 13, longueur 5 blocs
Fichier 4 : 6 blocs
17
Allocation contiguëSystèmes de gestion de fichiers Organisation physique d’un fichier
2012-2013
L'environnement de programmation Unix/Linux
186
• fragmentation de la mémoire: ramasse miette
Compactage
Fichier 4 : 6 blocs
fichier 1 : adresse bloc 1, longueur 3 blocs adresse bloc 1, longueur 3 blocs
fichier 2 : adresse bloc 13, longueur 5 blocs adresse bloc 8, longueur 3 blocs
fichier 3 : adresse bloc 3, longueur 4 blocs adresse bloc 4, longueur 3 blocs
18
Allocation contiguëSystèmes de gestion de fichiers Organisation physique d’un fichier
2012-2013
L'environnement de programmation Unix/Linux
187
• Etendre le fichier 1 avec un bloc de données
Déplacer lesfichiers
COUTEUX !
fichier 1 : adresse bloc 1,
fichier 1 : adresse bloc 1, longueur 4 blocslongueur 3 blocs
Générer une erreur
19
Allocation contiguëSystèmes de gestion de fichiers Organisation physique d’un fichier
2012-2013
L'environnement de programmation Unix/Linux
188
• Un fichier est constitué de plusieurs zones physiquesdisjointes (exemple système MVS IBM) :
- une zone primaire allouée à la création- des zones secondaires (extensions) allouées au fur et à
mesure des besoins- Chaque zone est allouée de façon indépendante
ZonePrimaire( 3 blocs)
ZoneSecondaire(2 blocs)
ZP P
ZS I
ZS I
ZS I
Problèmes précédents atténuésmais toujours existants
20
Allocation par zonesSystèmes de gestion de fichiers Organisation physique d’un fichier
2012-2013
L'environnement de programmation Unix/Linux
189
• Un fichier est constitué comme une liste chainée deblocs physiques, qui peuvent être dispersés n'importeoù.
• Extension simple du fichier : allouer un
fichier 1
fichier 2
nouveau bloc et le chainer au dernier• Pas de fragmentation
• Difficultés :-mode séquentiel seul-le chaînage du bloc suivant occupe de la place dans un bloc
Adresse/ n° bloc suivant
données21
Allocation par bloc chainéeSystèmes de gestion de fichiers Organisation physique d’un fichier
2012-2013
L'environnement de programmation Unix/Linux
190
• Une table d'allocation desfichiers (File allocation table- FAT) regroupe l'ensembledes chainages.
(exemple systèmes windows)
fichier 1
fichier 2
FAT
N° bloc
1 NULL
2 Libre
3 5
4 Libre
5 NULL
6 Libre
7 1
11 7
12 Libre
13 15
14 Libre
15 3
16 Libre
17 13
Fin de fichier
Bloc non alloué
N° de Bloc suivantAlloué pour le
fichier
2220 Libre
Allocation par bloc chainée : variante
Systèmes de gestion de fichiers Organisation physique d’un fichier
2012-2013
L'environnement de programmation Unix/Linux
191
• Les adresses des blocs physiques constituant un fichier sontrangées dans une table appelée index, elle-même contenue dansun ou plusieurs blocs disque
512 / 4 = 128 entrées
fichier 2
fichier 1
bloc d'index
-+ Supporte bien l’accès direct-« gaspillage de place » dans le bloc d’index-- taille maximale du fichier dépend de la taille -de l’index
23
Allocation indexéeSystèmes de gestion de fichiers Organisation physique d’un fichier
2012-2013
L'environnement de programmation Unix/Linux
192
0 Accès direct
Accès direct
9 Accès direct
10 1 indirection
11 2 indirections
12 3 indirections
Table d'allocation13 entrées
En mémoire centrale Sur disque
24
Allocation indexée : la solution Unix/Linux
Systèmes de gestion de fichiers Organisation physique d’un fichier
2012-2013
L'environnement de programmation Unix/Linux
193
0
9
10
11
12
Accès directAccès direct
Accès direct1 indirection
2 indirections3 indirections
Table d'allocation13 entrées
10 blocs de données
INDIRECT_1
256 blocs de données
INDIRECT_2_1
256 blocs de données
INDIRECT_2_2INDIRECT_2
En mémoire centrale Sur disque
4 blocs de données
29
Allocation indexée : la solution Unix/Linux
Systèmes de gestion de fichiers Organisation physique d’un fichier
2012-2013
Bloc = 1024 octets
L'environnement de programmation Unix/Linux
194
• Le système maintient une liste d'espace libre, qui mémorise tousles blocs disque libres (non alloués)
- Création d'un fichier : recherche dans la liste d'espace libre dela quantité requise d'espace et allocation au fichier : l'espacealloué est supprimé de la liste
- Destruction d'un fichier : l'espace libéré est intégré à la listed'espace libre
Il existe différentes représentations possibles de l'espace libre
vecteur de bits liste chainée des blocs libres
30
Gestion de l'espace libreSystèmes de gestion de fichiers Organisation physique d’un fichier
2012-2013
L'environnement de programmation Unix/Linux
195
• La liste d'espace libre est représentée par un vecteurbinaire, dans lequel chaque bloc est figuré par un bit.
- Bloc libre : bit à 1
- Bloc alloué : bit à 0
01010101110101010111
Facilité de trouver n blocs libres consécutifs Système Macintosh
31
Gestion de l'espace libre par un vecteur de bits
Systèmes de gestion de fichiers Organisation physique d’un fichier
2012-2013
L'environnement de programmation Unix/Linux
196
• La liste d'espace libre est représentée par une listechainée des blocs libres
Liste des blocs libres Parcours de la listecouteux
Difficile de trouver ungroupe de blocs libres
Variante par comptage
32
Gestion de l'espace libre par liste chainée
Systèmes de gestion de fichiers Organisation physique d’un fichier
2012-2013
L'environnement de programmation Unix/Linux
197
• Le premier bloc libre d’une zone libre contient l’adresse du premierbloc libre dans la zone suivante et le nombre de blocs libres dans lazone courante.
Liste des blocs libres Liste des blocs libres
1 1
1 3
1 1
1 3
33
Gestion de l'espace libre par liste chainée:variante avec comptage
Systèmes de gestion de fichiers Organisation physique d’un fichier
2012-2013
L'environnement de programmation Unix/Linux
198
• La FAT intègredirectement lagestion de cetespace.
fichier 1
fichier 2
FAT
N° bloc
1 NULL
2 Libre
3 5
4 Libre
5 NULL
6 Libre
7 1
11 7
12 Libre
13 15
14 Libre
15 3
16 Libre
17 13
Fin de fichier
Bloc non alloué
N° de Bloc suivantAlloué pour le
fichier
3420 Libre
Gestion de l'espace libreSystèmes de gestion de fichiers Organisation physique d’un fichier
2012-2013
L'environnement de programmation Unix/Linux 199
LES SYSTÈMES DE GESTION DE FICHIERS
IntroductionOrganisation logiqueOrganisation physiqueStructuration du disque durRéalisation des fonctions d’accès élémentairesSécurité et ProtectionExemple: Le SGF d’UNIX
Maher SELLAMI
4O
2012-2013
L'environnement de programmation Unix/Linux
200
Structuration du disque dur
• Trois opérations pour structurer le disque dur :- Formatage physique- Formatage logique
- Partitionnement
45
Systèmes de gestion de fichiers Structuration du disque dur
2012-2013
L'environnement de programmation Unix/Linux
201
• Le formatage physique ou de bas niveau permet dediviser la surface du disque en éléments basiques.
Il prépare le disque à accueillir desdonnées
Adresse (HCS, head cylinder sector)
cylindre
plateau
Face : 20 à 1500 pistes
Piste : ensemble de secteursSecteur : 512 octets
Adresse HCS (3, 1, 30)
46
Formatage physiqueSystèmes de gestion de fichiers Structuration du disque dur
2012-2013
L'environnement de programmation Unix/Linux
202
• Le formatage logique ou de haut niveau crée un systèmede gestion de fichiers sur le disque.
- Le type de SGF installé dépend du système d’exploitation. Ilforme les clusters ou blocs
- Il est possible d’installer plusieurs types de SGF sur un disquegrâce au partitionnement du disque..
sgf1 sgf2 sgf3
disque
partition partition partition47
Formatage logique/ PartitionnementSystèmes de gestion de fichiers Structuration du disque dur
2012-2013
L'environnement de programmation Unix/Linux
203
• Une partition est une partie d'un disque dur destinée à accueillir unSGF. Elle est identifiée par un nom appelé « nom de volume ». Elleest constituée d’un ensemble de cylindres contigüs.
• Un disque peut accueillir 4 partitions différentes. Une seule est activeà la fois.
Premier secteur (cylindre 0,secteur 1, face 0)Master Boot RecordProgramme de Table des
démarrage (446 o) partitions
Partition 1 FAT 16
Partition 2 Linux
Partition 3 FAT 32
Partition 4 NTFS
4 descripteurs de partition4 * 16 octets
Adresse HCS premier secteurAdresse HCS dernier secteur
Nombre de secteurstype
active
48
PartitionnementSystèmes de gestion de fichiers Structuration du disque dur
2012-2013
L'environnement de programmation Unix/Linux
204
Bloc boot Super bloc Tabledes inodes
Blocs disques
Descripteur des
1er secteurcontient l’amorçage duSEet description de lapartition
fichiersNomTaille
droitsTaille du SGFblocs libres chainésDescripteurs de fichiers(inodes) libres
inode
49
Organisation de partition : LINUXSystèmes de gestion de fichiers Structuration du disque dur
2012-2013
L'environnement de programmation Unix/Linux
205
Secteurd'amorçage FAT
Copie dela FAT
RépertoireB
locs de donnéesracine
1 NULL2 L3 NULL Fichier 1 ext H taille
4 L5 L6 L7 1
11 712 L13 1514 L15 316 L
17 13
20 L
50
Organisation de partition : DOSSystèmes de gestion de fichiers Structuration du disque dur
2012-2013
L'environnement de programmation Unix/Linux
20651
PartitionsSystèmes de gestion de fichiers Structuration du disque dur
2012-2013
L'environnement de programmation Unix/Linux
207
1. L’utilisateur appuie sur le bouton d’alimentationde l’unité centrale
2. Une fois le courant stabilisé, le processeur démarre etexécute le code du BIOS stocké dans la ROM à uneadresse prédéfinie
3. Le BIOS exécute une séquence de vérification descomposants (mémoire, vidéo, périphériques de base)(POST : Power-OnSelf Test)
4. Le BIOS accède au CMOS pour lire la configurationmatérielle de la machine (date, heure, périphérique demasse contenant le système d’exploitation).
5. Le BIOS accède au MBR du disque ; il charge enProgramme de
démarrage (446 o)
bootstrap
Table despartitions
active
mémoire centrale le programme de démarrage
6. Le programme de démarrage détermine la partitionactive et transfert le contrôle au bootstrap de la partitionpour charger le système d’exploitation
52
Démarrage de l’ordinateurSystèmes de gestion de fichiers Structuration du disque dur
2012-2013
L'environnement de programmation Unix/Linux 208
LES SYSTÈMES DE GESTION DE FICHIERS
IntroductionOrganisation logiqueOrganisation physiqueStructuration du disque durRéalisation des fonctions d’accès élémentairesSécurité et ProtectionExemple: Le SGF d’UNIX
Maher SELLAMI
4O
2012-2013
L'environnement de programmation Unix/Linux
209
Programme Utilisateur
Appelssystème
open (fichier)chdir( /home)
open chdir
_open
_chdir
Interpréteur de commandes
commandes
> cd /home
Interface d’appel(bibliothèque système)
SE : ensemblede fonctions
Système de gestion de fichiers
Joëlle Delacroix 62
Interfaces d’appel du SGFSystèmes de gestion de fichiers Réalisation des fonctions d’accès élémentaires
2012-2013
L'environnement de programmation Unix/Linux
210
Quelques commandes du SGF:- liste du répertoire (ls, dir)- changement de répertoire (cd)- création répertoire (mkdir)- suppression répertoire (rmdir)- suppression fichier (rm, del)- modification d'attributs d'un fichier (chmod)- changement de nom de fichier… (mv, ren)
Au lancement d'une commande -> appel à la fonction du SGF
Joëlle Delacroix 63
Les commandesSystèmes de gestion de fichiers Réalisation des fonctions d’accès élémentaires
2012-2013
L'environnement de programmation Unix/Linux
211
Quelques appels systèmes du SGF:-ouverture fichier (open)-création de fichier (creat)- fermeture fichier (close)et- Lecture (read)-Écriture (write)
Joëlle Delacroix 66
Les appels systèmesSystèmes de gestion de fichiers Réalisation des fonctions d’accès élémentaires
2012-2013
L'environnement de programmation Unix/Linux
212
MCOuverture fichier
descripteur
Fich = OPEN (nom_fichier, L/E)
L'ouverture- vérifie l'existence du fichier dans le répertoire du disque
repertoire
- vérifie la compatibilité des types d'accès au fichier (lecture/écriture)- transfert les éléments de l’entrée de répertoire dans le descripteurcorrespondant en mémoire
- renvoie au programme un index Fich qui désigne le descripteur de fichier (nom local)
Le descripteur est conservé et mis à jour en mémoire jusqu'à la fermeture
Joëlle Delacroix 67
Ouverture de fichierSystèmes de gestion de fichiers Réalisation des fonctions d’accès élémentaires
2012-2013
Fich
L'environnement de programmation Unix/Linux
213
MCLecture fichier
enrg
cacheREAD (Fich, enrg, n°enregistrement)
enrg
Fich
descripteur bloc disque
La lecture d'un fichier nécessite:-pointeur du descripteur-l'adresse mémoire de la zone réceptrice de l'enregistrement-n° de l'enregistrement qui peut:
- . ne pas exister si lecture séquentielle. être le rang si accès direct
Il faut déterminer l'adresse du bloc physique contenant l'enregistrement à lire Les données lues sont transférées dans un tampon mémoire
Joëlle Delacroix 68
Lecture de fichierSystèmes de gestion de fichiers Réalisation des fonctions d’accès élémentaires
2012-2013
L'environnement de programmation Unix/Linux
214
read(Fich, enrg, taille_enrg_octets)•Un fichier Unix est une suite d'octets sans structure, accessibles de manière séquentielle. •Le SGF maintient pour chaque fichier un offset qui pointe sur l'octet courant dans le fichier.•Une opération de lecture spécifie combien d'octets doivent être lus (taille_enrg_octets). •La lecture s'effectue depuis la position courante de l'offset et délivre les taille_enrg_octets octets suivants.
Lecture 1 Lecture 2
Taille_enrg_octets Taille_enrg_octetsOpen
offset = 0Read (fich, enrg, taille_enrg_octets)offset = offset + taille_enrg_octets
Joëlle Delacroix 69
Lecture fichier : UnixSystèmes de gestion de fichiers Réalisation des fonctions d’accès élémentaires
2012-2013
L'environnement de programmation Unix/Linux
215
Lecture fichier : Unix READ (fich, enrg, taille_enrg_octets)
• Une opération de lecture spécifie combien d'octets doivent être lus(taille_enrg_octets). •La lecture s'effectue depuis la position courante de l'offset et délivre les taille_enrg_octets octets suivants.
Il faut déterminer à quel bloc les octets à lire appartiennent, et lire ce blocBloc 0,1,2 Bloc 3
Fich
offsetOpenoffset = 0 Taille_enrg_octets
Read (fich enrg, taille_enrg_octets)offset = offset + taille_enrg_octets
inode
Joëlle Delacroix 70
Lecture fichier : UnixSystèmes de gestion de fichiers Réalisation des fonctions d’accès élémentaires
2012-2013
L'environnement de programmation Unix/Linux
216
Ecriture fichier
WRITE (fich, tampon, n°enregistrement)
L'écriture dans un fichier nécessite:- pointeur du descripteur
- l'adresse mémoire de la zone émettrice de l'enregistrement- n° de l'enregistrement qui peut:. ne pas exister si écriture séquentielle. être le rang si accès direct
Cette fonction met à jour certains éléments du descripteur ; ellepeut entrainer l’allocation d’un nouveau bloc au fichier.
Les données sont transférées du tampon mémoire vers lefichier
78
Ecriture fichierSystèmes de gestion de fichiers Réalisation des fonctions d’accès élémentaires
2012-2013
L'environnement de programmation Unix/Linux
217
Fermeture fichier
CLOSE (fich)
79
Fermeture du fichier
La fermeture provoque:• transfert les éléments du descripteur vers le
répertoire sur le disque• Libération de la mémoire occupée par les
tampons
2012-2013
Systèmes de gestion de fichiers Réalisation des fonctions d’accès élémentaires
L'environnement de programmation Unix/Linux 218
LES SYSTÈMES DE GESTION DE FICHIERS
IntroductionOrganisation logiqueOrganisation physiqueStructuration du disque durRéalisation des fonctions d’accès élémentairesSécurité et ProtectionExemple: Le SGF d’UNIX
Maher SELLAMI
4O
2012-2013
L'environnement de programmation Unix/Linux
219
Protection des fichiers
• Protection contre les dégâts physiques
FIABILITE
Utilisation de différents types de redondance
• Protection contre les accès inappropriés
PROTECTION
liste d’accès (droits d'accès)
83
Systèmes de gestion de fichiers Sécurité et protection des fichiers
2012-2013
L'environnement de programmation Unix/Linux
220
• Définition de droits d'accès- lecture (r), écriture (w), exécution (x), destruction ...
• A chaque fichier est associé une liste d'accès, spécifiantpour chaque utilisateur, les types d'accès qui lui sontautorisés
Annie Nicolas Martiner x r r x
Annie Nicolas Martiner r w x r w x
fichACharles Louisr x r w x
fichBCharles Louisr w x r
84
Protection contre les accès inappropriés
Systèmes de gestion de fichiers Sécurité et protection des fichiers
2012-2013
L'environnement de programmation Unix/Linux
221
• La liste d'accès peut être longue et difficile à gérer- définition de groupes auxquels sont associés des droits
- un utilisateur hérite des droits du groupe auxquels il appartient
G3 : NicolasG2 : Martine, Charles, Annie
Annie NicolasMartine Charlesr x r r x r x
Annie Nicolas MartineCharlesr r w x r w x r w x
fichALouisr w x
Louis fichBr
G1 : Louis
G3r
G3r
G3 : Annie, LouisG2 : Martine, CharlesG1 : Nicolas
G2 G1 fichAr x r w x
G2 G1 fichBr w x r w x
85
Systèmes de gestion de fichiers Sécurité et protection des fichiers
2012-2013
Protection contre les accès inappropriés
L'environnement de programmation Unix/Linux
222
• Exemple Unix- Définition de trois classes :
• le propriétaire : celui qui a crée le fichier
• le groupe : le groupe de travail
• les autres : tous les autres
> ls -l
drwxr-xr-x 2 delacroi 4096 Oct 22 1998 repertoire
-rw-r--r-- 1 delacroi 6401 Jan 8 1997 eleve.c
-rwxr-xr-x 1 delacroi 24576 Dec 15 1998 essai-rw-r--r-- 1 delacroi 67 Dec 15 1998 essai.c
> chmod a+w essai.c
> ls -l essai.c
-rw-rw-rw- 1 delacroi 67 Dec 15 1998 essai.c
86
Systèmes de gestion de fichiers Sécurité et protection des fichiers
2012-2013
Protection contre les accès inappropriés
L'environnement de programmation Unix/Linux
223
• Utilisation de la redondance interne :
l'information existe en double exemplaire : une version primaire, uneversion secondaire
le système maintient la cohérence entre les deux versions
exemple : Windows dispose de deux exemplaires de la FAT
Secteurd'amorçage FAT
Copie de Répertoirela FAT racine Blocs de données
primaire secondaire
Maintien de la cohérence entre les deux exemplaires
87
Protection contre les dégâts physiques
Systèmes de gestion de fichiers Sécurité et protection des fichiers
2012-2013
L'environnement de programmation Unix/Linux
224
• Utilisation de la redondance interne :
Des données supplémentaires appelées somme de contrôle sontajoutées à l'information qui permettent de vérifier la validité desinformations.
exemple : chaque secteur du disque comporte les données + unesomme de contrôle. Cette somme de contrôle permet de détecter lessecteurs défectueux.
secteur
données 100010001000CRC
1100 1000100010001100
Somme de contrôle : inclut des élémentsredondants par rapport aux données
CRC (contrôle de redondance cyclique) : fonction permettant de détecter les erreurs et lesappliquée aux données et calculant la somme de réparer
contrôle
88
Protection contre les dégâts physiquesSystèmes de gestion de fichiers Sécurité et protection des fichiers
2012-2013
L'environnement de programmation Unix/Linux
225
• Utilisation de la redondance :
Les données sont dupliquées sur plusieurs supports physique
Redondance par sauvegarde périodique complète ou incrémentale
Principes des disques RAID (Redundant Array of Independent Disk)
89
Protection contre les dégâts physiques
Systèmes de gestion de fichiers Sécurité et protection des fichiers
2012-2013
L'environnement de programmation Unix/Linux
226
• Redondance par sauvegarde périodique : sauvegarde complète : la totalité du SGF est dupliqué même si les
fichiers n'ont pas été modifiésCartouches
Sauvegarde tous les blocsToutes les nuits
Restauration tous les blocsDernière sauvegarde
90
Protection contre les dégâts physiques
Systèmes de gestion de fichiers Sécurité et protection des fichiers
2012-2013
L'environnement de programmation Unix/Linux
227
• Redondance par sauvegarde périodique : sauvegarde incrémentale : seuls les objets modifiés depuis la
dernière sauvegarde sont dupliqués.Cartouches
Sauvegarde tous les blocsDimanche nuit
Sauvegarde les blocs modifiésL, ma, me, je, ve, sa nuit
Restaurationdernière sauvegarde complète
Complétée par les sauvegardes incrémentalesà J-1
Trash jour J
91
Protection contre les dégâts physiques
Systèmes de gestion de fichiers Sécurité et protection des fichiers
2012-2013
L'environnement de programmation Unix/Linux
228
• Principes des disques RAID : L’unité de stockage est constituée de plusieurs disques durs
constituant une grappe.
Lecture/écriture
RAID Niveau 1
B1
RAID Niveau 4
B1
Bloc de contrôle = f (B1,B2,B3)Bloc de contrôle = f (B4,B5, B6)
B2B1 B1 B1B2B2B2
B2 B3 BCB4B5 B6 BC
Les données (blocs) sont répartis sur n-1 disques de la grappeLes données (blocs) sont dupliquées Le bloc n stocke une information redondante
sur chaque disque des données permettant de les reconstituer en cas de perte
92
Protection contre les dégâts physiques
Systèmes de gestion de fichiers Sécurité et protection des fichiers
2012-2013
L'environnement de programmation Unix/Linux 229
LES SYSTÈMES DE GESTION DE FICHIERS
IntroductionOrganisation logiqueOrganisation physiqueStructuration du disque durRéalisation des fonctions d’accès élémentairesSécurité et ProtectionExemple: Le SGF d’UNIX
Maher SELLAMI
4O
2012-2013
L'environnement de programmation Unix/Linux
230
Rappel
• Un fichier est un flot d’octets non structurée, stockée sur une mémoire auxiliaire.
• Plusieurs sortes de fichiers:– les fichiers ordinaires;– les répertoires;– les périphériques– …
• Un fichier peut avoir plusieurs liens (noms)• Les caractéristiques statiques d'un fichier sont stockées dans
un descripteur appelé i-noeud:– le type de fichier (ordinaire, répertoire, ...), taille, dates, UID-GID,
∑liens, la liste des blocs , …
• Un répertoire est un fichier particulier : c'est en fait un tableau à deux colonnes, nom, i-noeud.
2012-2013
Systèmes de gestion de fichiers Exemple: Le SGF d’UNIX
L'environnement de programmation Unix/Linux
231
Gestion des périphériques
• Un périphérique est un fichier spécial qui possède 2 index:– majeur identifie les périphériques de même type– Mineur identifie individuellement chaque périphérique
• Un volume de stockage n’est accessible que s’il est monté
intégré le volume dans la racine du SGF (/)• La commande mount permet de relier une partition ou un
périphérique à un répertoire par lequel les données sont accessibles.
mount -t iso9660 /dev/cdrom /media/cdrom
Le cdrom est accessible à travers le répertoire /media/cdrom
2012-2013
Systèmes de gestion de fichiers Exemple: Le SGF d’UNIX
L'environnement de programmation Unix/Linux
232
Fonctionnement du SGF UNIX
2012-2013
Systèmes de gestion de fichiers Exemple: Le SGF d’UNIX
L'environnement de programmation Unix/Linux
233
Les entées sortie de base
• Les descripteurs de fichiers– Toute entrée-sortie est une lecture ou une écriture d'un fichier.– Avant d'entreprendre une opération de lecture ou d'écriture,
il est nécessaire d'ouvrir le fichier (ou de le créer)– Le système , retourne un entier non nul, appelé nom local, qui
servira à le désigner.
• Primitives E/S sur fichier -read et –write
#include <unistd.h>ssize_t read(int fd, void *buf, size_t count)
ssize_t write(int fd, const char *buf, size_t count)
read et write fournissent en retour le nombre d'octets réellement transférés. Zéro indique une fin de fichier, et -1 , une erreur (errno).
Systèmes de gestion de fichiers Exemple: Le SGF d’UNIX
2012-2013
L'environnement de programmation Unix/Linux
234
Les entées sortie de base
• Exemple : version primitive de cat
/* copie son entrée sur sa sortie */# define SIZE 512 /* arbitraire */main(){ char buf[SIZE];int n;while((n=read(0,buf,sizeof(buf)) > 0) write(1, buf, n);exit(0);
}
Systèmes de gestion de fichiers Exemple: Le SGF d’UNIX
2012-2013
L'environnement de programmation Unix/Linux
235
Les entées sortie de base
• Ouverture de fichier
int open(const char *pathname, int flags)– open retourne un nom local de fichier (entier) , -1si une erreur.– mode d'ouverture sont définis dans /usr/include/fcntl.h:
O_RDONLY ouverture en lecture seulement;
O_WRONLY ouverture en écriture seulement;
O_RDWR ouverture en lecture et écriture;
– D'autres bits peuvent êtres combinés (OU) avec les bits précédents:O_NDELAY ouverture non bloquante (tubes ,fichiers spéciaux);
O_APPEND écriture uniquement en fin de fichier
O_CREAT création de fichier s'il n'existe pas(fournir droits)
O_TRUNC effacer le contenu du fichier s'il existe.
O_EXCL avec O_CREAT, provoque un echec si il existe
– Une autre forme:
int open(const char *pathname, int flags, mode_t droits)droits droits d'accès (création seulement).
Cette valeur est modifiée par le umask du processus : la véritable valeur utilisée est (mode & ~umask).
Systèmes de gestion de fichiers Exemple: Le SGF d’UNIX
2012-2013
L'environnement de programmation Unix/Linux
236
Les entées sortie de base
• La création de fichier
int creat(const char *pathname, mode_t droits)creat, utilisée pour créer de nouveau fichier ou pour en réécrire
d'anciens.– retourne un nom local utilisé lors des opérations futures sur le fichier; -1
en cas d'erreur– creat ouvre le fichier en écriture .
• Fermeture de fichiers.
int close(int fd)– close rompt le lien entre un fichier et un nom local, rendant celui-ci libre– A sortie du programme (exit) ferme tous les fichiers ouverts.
• Suppression de fichiers
int unlink(const char *pathname)unlink détruit un fichier dans lr système de fichier.
Systèmes de gestion de fichiers Exemple: Le SGF d’UNIX
2012-2013
L'environnement de programmation Unix/Linux
237
Les entées sortie de base
• L'accès aléatoire –lssek
off_t lseek(int fd, off_t deplacement, int origine)– lseek permet de se déplacer dans un fichier sans lecture/écriture à la
position deplacement dans le fichier associé au descripteur fd en suivant la directive origine ainsi :
SEEK_SET La tête est placée à offset octets depuis le début du fichier.
SEEK_CUR La tête de lecture/écriture est avancée de deplacement octets.
SEEK_END La tête est placée à la fin du fichier plus deplacement octets.– La position courante devient deplacement, considéré par rapport à
l'origine.
Systèmes de gestion de fichiers Exemple: Le SGF d’UNIX
lseek(fd, 0L, SEEK_END); pour ajouter à la fin de fichier lseek(fd, 0L, SEEK_SET); pour retourner au début du fichier pos = lseek(fd, 0L, SEEK_CUR); position courante
2012-2013
L'environnement de programmation Unix/Linux
238
Les entées sortie de base
• Duplication d'un descripteur de fichier
int dup(int oldfd);int dup2(int oldfd, int newfd)
– dup et dup2 créent une copie du descripteur de fichier oldfd.
– dup utilise le plus petit numéro inutilisé pour le nouveau descripteur.
– dup2 transforme newfd en une copie de oldfd, fermant auparavant newfd si besoin est.
Systèmes de gestion de fichiers Exemple: Le SGF d’UNIX
d=creat("toto", 0666);close((2);dup(d);close(d);
redirige la sortie standard d’erreur sur le fichier toto.
2012-2013
L'environnement de programmation Unix/Linux
239
Les répertoires
• Un répertoire décrit l’association entre le nom de fichier et le descripteur (i-nœud) .
• Une entrée du répertoire est décrit par une structure
struct dirent{long d_ino; /* inode number */off_t d_off; /* offset to this dirent */unsigned short d_reclen; /* length of this d_name */char d_name [NAME_MAX+1]; /* file name */}• Accès au répertoirestruct dirent *readdir (DIR *dir)
readdir() renvoie l'entrée suivante du flux répertoire, NULL a la fin du répertoire
DIR *opendir (const char *name);
opendir() ouvre un flux répertoire correspondant au répertoire name, et renvoie un pointeur sur ce flux. Le flux est positionné sur la première entrée du répertoire
Systèmes de gestion de fichiers Exemple: Le SGF d’UNIX
nom de fichier n° d'inode
2012-2013
L'environnement de programmation Unix/Linux
240
Exemple : listdir.c Affiche le Contenu d'un Répertoire
alitésEE
#include <assert.h>
#include <dirent.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
int main (int argc, char* argv[])
{
char* dir_path;
DIR* dir;
struct dirent* entry;
char entry_path[PATH_MAX + 1];
size_t path_len;
if (argc >= 2) /* répertoire spécifié sur la ligne de commande s'il y a lieu. */
dir_path = argv[1];
else /* Sinon, utilise le répertoire courant. */
dir_path = ".";
strncpy (entry_path, dir_path, sizeof (entry_path)); /* Copie le chemin du répertoire dans entry_path. */
path_len = strlen (dir_path);
if (entry_path[path_len - 1] != '/') { /* Si le répertoire ne se termine pas par un slash, l'ajoute. */
entry_path[path_len] = '/';
entry_path[path_len + 1] = '\0';
++path_len;
}
dir = opendir (dir_path); /* Démarre l'affichage du contenu du répertoire. */
while ((entry = readdir (dir)) != NULL) { /* Boucle sur les entrées du répertoire. */
const char* type; /* chemin complet=répertoire+nom de l'entrée. */
strncpy(entry_path+path_len,entry->d_name,sizeof(entry_path)-path_len);
printf ("%s\n",entry_path);
}
closedir (dir);
return 0;
}
Systèmes de gestion de fichiers Exemple: Le SGF d’UNIX
2012-2013
L'environnement de programmation Unix/Linux
241
les inodes
• Le descripteur de fichier, ou inode est décrit dans une structure stat (#include <sys/stat.h>)
struct stat
{ dev_t st_dev; périphérique du inode */
ino_t st_ino; numéro du inode */
ushort st_mode type du fichier, attributs, résumé
short st_nlink; nombre de liens
ushort st-uid; numéro du propriétaire */
ushort st-gid; numéro du groupe */
dev_t st_rdev;n° de ressource pour fichier spécial */
off_t st_size; taille du fichier en octets */
time_t st_atime; date de dernier accès
time_t st_mtime; date de dernière modification
time_t st_ctime; date de dernière modif. de caract
};
Systèmes de gestion de fichiers Exemple: Le SGF d’UNIX
st_mode 15 11 10 9 8 0type setuid setgid sticky r w x r w x r w x
2012-2013
L'environnement de programmation Unix/Linux
242
les inodes
• Accès au descripteur
int stat(const char *file_name, struct stat *buf);récupère le statut du fichier pointé par file_name et remplit le buffer buf
int fstat(int filedes, struct stat *buf)identique à stat, sauf que le fichier ouvert est pointé par le descripteur filedes
int lstat(const char *file_name, struct stat *buf);identique à stat, sauf qu'il donne le statut d'un lien lui-même et non pas du fichier pointé par ce lien
Systèmes de gestion de fichiers Exemple: Le SGF d’UNIX
2012-2013