242
SYSTÈME D'EXPLOITATION ET MISE EN ŒUVRE SOUS UNIX Maher SELLAMI 2012-2013 1 L'environnement de programmation Unix/Linux

Système d_exploitation et UNIX (COUR_COMPLET)

Embed Size (px)

Citation preview

Page 1: Système d_exploitation et  UNIX (COUR_COMPLET)

L'environnement de programmation Unix/Linux 1

SYSTÈME D'EXPLOITATION ET MISE EN ŒUVRE SOUS UNIX

Maher SELLAMI

2012-2013

Page 2: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 3: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 4: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 5: Système d_exploitation et  UNIX (COUR_COMPLET)

L'environnement de programmation Unix/Linux 5

ARCHITECTURE ET BLOCS FONCTIONNELS

Blocs fonctionnels d’un ordinateursArchitecturesInterruptions

Maher SELLAMI

O2012-2013

Page 6: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 7: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 8: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 9: Système d_exploitation et  UNIX (COUR_COMPLET)

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)

Page 10: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 11: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 12: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 13: Système d_exploitation et  UNIX (COUR_COMPLET)

L'environnement de programmation Unix/Linux

13

Architecture de VON NEUMANN

2012-2013

Architecture fonctionnelle d’un Ordinateur Quelques architectures

Page 14: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 15: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 16: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 17: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 18: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 19: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 20: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 21: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 22: Système d_exploitation et  UNIX (COUR_COMPLET)

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.

Page 23: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 24: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 25: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 26: Système d_exploitation et  UNIX (COUR_COMPLET)

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.

Page 27: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 28: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 29: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 30: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 31: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 32: Système d_exploitation et  UNIX (COUR_COMPLET)

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.)

Page 33: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 34: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 35: Système d_exploitation et  UNIX (COUR_COMPLET)

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.

Page 36: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 37: Système d_exploitation et  UNIX (COUR_COMPLET)

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.

Page 38: Système d_exploitation et  UNIX (COUR_COMPLET)

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.

Page 39: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 40: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 41: Système d_exploitation et  UNIX (COUR_COMPLET)

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.

Page 42: Système d_exploitation et  UNIX (COUR_COMPLET)

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)

Page 43: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 44: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 45: Système d_exploitation et  UNIX (COUR_COMPLET)

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é

Page 46: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 47: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 48: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 49: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 50: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 51: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 52: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 53: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 54: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 55: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 56: Système d_exploitation et  UNIX (COUR_COMPLET)

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é

Page 57: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 58: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 59: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 60: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 61: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 62: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 63: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 64: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 65: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 66: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 67: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 68: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 69: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 70: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 71: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 72: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 73: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 74: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 75: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 76: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 77: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 78: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 79: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 80: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 81: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 82: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 83: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 84: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 85: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 86: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 87: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 88: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 89: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 90: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 91: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 92: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 93: Système d_exploitation et  UNIX (COUR_COMPLET)

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 »

Page 94: Système d_exploitation et  UNIX (COUR_COMPLET)

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 »

Page 95: Système d_exploitation et  UNIX (COUR_COMPLET)

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 »

Page 96: Système d_exploitation et  UNIX (COUR_COMPLET)

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 »

Page 97: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 98: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 99: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 100: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 101: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 102: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 103: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 104: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 105: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 106: Système d_exploitation et  UNIX (COUR_COMPLET)

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)

Page 107: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 108: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 109: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 110: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 111: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 112: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 113: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 114: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 115: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 116: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 117: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 118: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 119: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 120: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 121: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 122: Système d_exploitation et  UNIX (COUR_COMPLET)

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.

Page 123: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 124: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 125: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 126: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 127: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 128: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 129: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 130: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 131: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 132: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 133: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 134: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 135: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 136: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 137: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 138: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 139: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 140: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 141: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 142: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 143: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 144: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 145: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 146: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 147: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 148: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 149: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 150: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 151: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 152: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 153: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 154: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 155: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 156: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 157: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 158: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 159: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 160: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 161: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 162: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 163: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 164: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 165: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 166: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 167: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 168: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 169: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 170: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 171: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 172: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 173: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 174: Système d_exploitation et  UNIX (COUR_COMPLET)

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.

Page 175: Système d_exploitation et  UNIX (COUR_COMPLET)

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é.

Page 176: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 177: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 178: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 179: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 180: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 181: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 182: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 183: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 184: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 185: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 186: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 187: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 188: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 189: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 190: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 191: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 192: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 193: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 194: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 195: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 196: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 197: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 198: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 199: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 200: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 201: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 202: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 203: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 204: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 205: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 206: Système d_exploitation et  UNIX (COUR_COMPLET)

L'environnement de programmation Unix/Linux

20651

PartitionsSystèmes de gestion de fichiers Structuration du disque dur

2012-2013

Page 207: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 208: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 209: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 210: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 211: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 212: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 213: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 214: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 215: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 216: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 217: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 218: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 219: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 220: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 221: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 222: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 223: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 224: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 225: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 226: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 227: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 228: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 229: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 230: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 231: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 232: Système d_exploitation et  UNIX (COUR_COMPLET)

L'environnement de programmation Unix/Linux

232

Fonctionnement du SGF UNIX

2012-2013

Systèmes de gestion de fichiers Exemple: Le SGF d’UNIX

Page 233: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 234: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 235: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 236: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 237: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 238: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 239: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 240: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 241: Système d_exploitation et  UNIX (COUR_COMPLET)

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

Page 242: Système d_exploitation et  UNIX (COUR_COMPLET)

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