Vous êtes sur la page 1sur 242

SYSTME D'EXPLOITATION ET MISE EN

UVRE SOUS UNIX

Maher SELLAMI
2012-2013

L'environnement de programmation
Unix/Linux

Introduction

Objectifs

Objectifs de ce module

Prsenter l'architecture logicielle des systmes d'exploitation,


Dcouvrir le systme UNIX
Etudier les outils de dveloppement des programmes.
Maitriser les interfaces systme: SHELL, API
Apprhendrer les fondements de base des systmes de gestion de
fichiers

2012-2013

L'environnement de programmation

Introduciton

SOMMAIRE
0. Architecture et Blocs fonctionnels
I. Prsentation gnrale des systmes
dexploitation
Dfinition et objectifs dun systme dexploitation
Evolution des systmes dexploitation
Fonctions dun systme dexploitation
Structure dun systme dexploitation
Caractristiques des Systmes dexploitation modernes

II. Environnement UNIX

TP: LE SHELL
dUNIX
Scripts,
outils: grep, sed
awk,

Le Systme de fichiers
Le shell
Les filtres grep,sed, awk, find, sort

III. Programmer sous GNU/LINUX

TP: Compiler
avec gcc
make, gdb,
gestion des
erreurs,
Bibliothques

Environnement dexcution
Interaction avec lenvironnement dexcution
Gestion des erreurs
Ecrire et utiliser des Bibliothques

L'environnement de programmation

IV. Le systme de gestion de fichiers

2012-2013

TD: Etude de
Cas,
La Structure de
Windows

TD:FAT, NTFS

Introduciton

Bibliographie
Livres pdagogiques
Systmes d'exploitation -- Concepts et algorithmes.
Joffroy Beauquier et Batrice Brard. Ediscience international, Paris, 1993.
Systmes d'Exploitation, Andrew Tanenbaum. Pearson Education, 2003.
Principes des systmes d'exploitation des ordinateurs, S. Krakowiak , Dunod 1987
Architecture des systmes d'exploitation, M. GRIFFITHS, ..., M. VASSAYADE,
Herms, 1988.
Systmes d'exploitation, concepts et algorithmes, J. BEAUQUIER, B.BERNARD, MC
Graw-Hill, 1990.
Livres documentant un systme 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 systme UNIX, Maurice J. Bach. Dunod, 1997.
Conception et implmentation du systme 4.4BSD.
Marshall Kirk McKusick, Keith Bostic, Michael J. Karels, et John S. Quarterman.
International Thomson Publishing France, 1997.
Le systme UNIX- S.R. Bourne
InterEditions, 1985
Inside Windows NT, Helen Custer, Microsoft Press, 1992

2012-2013

L'environnement de programmation

Blocs fonctionnels dun ordinateurs


Architectures
Interruptions

ARCHITECTURE ET BLOCS
FONCTIONNELS
Maher SELLAMI

2012-2013

L'environnement de programmation
Unix/Linux

Architecture fonctionnelle dun Ordinateur

Blocs fonctionnels

Blocs fonctionnels
La comprhension de certaines fonctions dun systme
dexploitation ncessite un minimum de connaissance
du matriel hardware .
ARCHITECTURE: dcoupage de la machine en sousensembles, et interrelations entre ces sous-ensembles
Choix darchitecture: compromis entre performances et cots
(efficacit et facilit de construction)

Principaux blocs :
Processeur
Mmoire
Bus
E/S
2012-2013

M
E/S

L'environnement de programmation

Architecture fonctionnelle dun Ordinateur

Blocs fonctionnels

LE PROCESSEUR (CPU)
Dirige les activits de lordinateur.
A chaque cycle dhorloge, chaque unit du
processeur va ouvrir ou fermer certains ports pour
dplacer, lire, crire, comparer, additionner.
Les ordres sont donns par lunit de contrle.

2012-2013

L'environnement de programmation

Architecture fonctionnelle dun Ordinateur

Blocs fonctionnels

La Mmoire
Stocke les informations temporairement.
Ensemble de cases de rangement ou position, chacune delles pouvant
contenir les informations et tant repr par une adresse.
Adresse: permet de mettre ou extraire la reprsentation dinformation.
Bit : une position comprend un nombre fixe dlments (0 et 1)
Mot : un nombre dtermin de bits occupant des postions contiges;
selon modle (16, 24, 32 bits,..).
Unit dadressage: plus petite quantit de mmoire qui spare deux
adresses conscutives.
Espace dadressage: ensemble de toutes les adresses que lunit
commande est capable de gnrer
donne par la largeur des adresses (nombre de bits dans une adresse).

Espace virtuel : nombre de cases mmoires quun programme peut


adresser
2012-2013

L'environnement de programmation

Architecture fonctionnelle dun Ordinateur

Blocs fonctionnels

La Hirarchie de mmoire
Gre par :
-Le compilateur
- Un dispositif cbl
- Le systme
dexploitation

- La cration de fichiers
(SGF)

2012-2013

L'environnement de programmation

Architecture fonctionnelle dun Ordinateur

Blocs fonctionnels

Le Bus
Les instructions sont transportes par des lignes parallles
groupes quon appelle bus.
Aspect physique:
Fils lectriques reliant les diffrents lments dun ordinateur.
Ces lments sont relis au bus par un connecteur : fond de
panier .

Aspect Logique:
Multiplexage: les donnes et les adresses peuvent tre multiplexs sur
les mmes lignes dun bus.
Espace dadressage: Largeur des adresses que le bus peut manipuler
Cycle du bus: dfinit par le vitesse de lhorloge, un mouvement de
donnes se produit chaque top de lhorloge.
Transaction: un change de donnes entre deux lments connects
au bus.
Dbit: nombre de mots de donnes quil est capable de transporter par
seconde.
2012-2013

L'environnement de programmation

10

Architecture fonctionnelle dun Ordinateur

Blocs fonctionnels

les Priphriques DE/S

Assurent la communication avec lextrieur


Les mmoires de Masses (bandes, disques)
Compltent la mmoire Centrale par une capacit accrue (sans
source dnergie)
Temps de positionnement lent. (en ms)
Sauvegarde: supports accs squentiel (bande,)
Reprage : accs direct linformation (disque,..).
Les units dEntres-Sorties
voir les rsultats et fournir les donnes
Clavier-Ecran, Imprimante, Joy-Stick , le stylo optique, la souris,
scanner, ...
Les unit de communications
relis des systmes informatiques ensembles
modems, cbles de connexion et dispositifs rseaux etc.
2012-2013

L'environnement de programmation

11

Architecture fonctionnelle dun Ordinateur

Quelques architectures

Architecture de VON NEUMANN


P

la performance dun lment dune machine est lie aux


autres lments qui lui sont connects
L'efficacit est lie au dbit des informations qui circulent dans
ses diffrents lments.
3 techniques pour placer le dispositif dE/S.
E/S

E/S

Liaison directe des dispositifs


dentres/sorties

2012-2013

Structure bus commun mmoire-entres/sorties

E/S

L'environnement de programmation

Interfaces dentres/sorties vues comme


une partie de la mmoire
12

Architecture fonctionnelle dun Ordinateur

Quelques architectures

Architecture de VON NEUMANN

2012-2013

L'environnement de programmation

13

Architecture fonctionnelle dun Ordinateur

Quelques architectures

Laccs direct mmoire (DMA)


Technique qui fournit un chemin direct entre le bus dE/S et la
mmoire sans intervention du processeur.
Le DMA soulage lUC du contrle des entres-sorties
L E/S "vole" un cycle mmoire au Bus pour raliser un transfert
L'excution du programme en UC continue pendant le transfert DMA
Si conflit d'accs la mmoire priorit au DMA

2012-2013

L'environnement de programmation

14

Architecture fonctionnelle dun Ordinateur

Quelques architectures

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 mmoires.
P

MI

BD

BI

CPU

cache
donnes

MD

cache
instructions

gestion de la
mmoire

bus
externe

pr-recherche
contrle du
bus

Le microprocesseur 68030
2012-2013

L'environnement de programmation

15

Architecture fonctionnelle dun Ordinateur

Quelques architectures

Machines microcodes
Doter un processeur dune mmoire spciale dite
mmoire de microcode destine contenir des
micro-instructions.
Une instruction lmentaire est constitue dun
micro-programme : squence de microinstructions
Rduire les cots de ralisation des processeurs

MM
2012-2013

BIN

L'environnement de programmation

M
16

Architecture fonctionnelle dun Ordinateur

Les Interruptions

Les Interruptions
Comment lU.C. va prendre en compte les vnements extrieurs.
Les interruptions externes
dues aux priphriques ou des vnements extrieurs au systme informatique
(temps rel).
FAIRE TOUJOURS
signaler au CPU quil est prt ;
recevoir un ordre du CPU ;
excuter lordre ;
la fin de lexcution, boucler
FAIT

Pour signaler lunit centrale quils sont prts, les priphriques connects vont
utiliser le mcanisme dinterruption.

Les interruptions internes


Les interruptions dues lhorloge
Les interruptions dues aux erreurs

Un dpassement de capacit
La violation daccs mmoire
Lexcution dune instruction dont la partie fonction nest pas conforme
Lutilisation dune instruction privilgie en dehors du mode systme.

Les interruptions logicielles


2012-2013

L'environnement de programmation

17

Architecture fonctionnelle dun Ordinateur

Les Interruptions

Les interruptions logicielles

Raliss par des instructions de type SVC (Supervisor Call)


destine permettre un programme utilisateur de faire une
requte au systme
Lancement de tches
Allocation de ressources matrielles (mmoire - disque imprimante ...)

Provoque:
la mise en sommeil du programme
La prise de contrle de lunit centrale par le S.E.
Le S.E. excute un service particulier demand par le programme.
changer de mode dexcution et passer en mode superviseur.

Motif : vrifier la correction des arguments dappel, afin dviter


des tentatives de pntration frauduleuse lintrieur du
systme.
2012-2013

L'environnement de programmation

18

Dfinition et objectifs dun systme dexploitation


Evolution des systmes dexploitation
Fonctions dun systme dexploitation
Structure dun systme dexploitation
Caractristiques des Systmes dexploitation modernes

PRSENTATION GNRALE DES


SYSTMES DEXPLOITATION
Maher SELLAMI

2012-2013

L'environnement de programmation
Unix/Linux

19

Prsentation gnrale des systmes dexploitation

Gnralits

Introduction
Sans logiciels, un ordinateur nest quun morceau de mtal
inutile.
Grce ces logiciels, il peut jouer son rle d'outils universels .
Problmes
L'criture des programmes doivent prendre en compte tous
les composants d'un ordinateur,
un travail extrmement difficile.

Il faut librer le programmeur de la complexit du matriel.


Solution
Enrober le matriel par une couche de logiciel qui gre
lensemble de systme.
Prsenter au programmeur une interface au machine virtuelle
plus facile comprendre.

2012-2013

L'environnement de programmation

20

Prsentation gnrale des systmes dexploitation

Gnralits

Introduction
Utilisateurs

Logiciel
dApplicat Logiciel de
base
ion

Programmes
Applications

Atelier de
Dveloppement

Base
Navigateu
de
r
donne
Programmeur
s

Outils
Editeur Compilateu
s
rs

Mmoire

Editeurs
de liens

Chargeur

Gestion
Processeur

Fichiers

Metteur
au point

Programmeur
Systme
Priphrique
s

Matriel

2012-2013

Interprte
ur de
command
es

Structure gnrale dun systme


informatique
L'environnement de programmation
21

Communicatio
n

Prsentation gnrale des systmes dexploitation

Gnralits

Dfinition et objectifs dun systme dexploitation


Dfinition et ralisation dune machine virtuelle
fonction de gestion de linformation : structuration, conservation,
conservation dsignation (mmoire virtuelle, fichiers); transfert
(entre-sorties),
fonction dexcution de programmes en squence , en parallle, en
concurrence, de composer et d'enchaner des programmes, de
synchroniser des excutions
service divers : aide la mise au point, traitement des dfaillances,
mesure de temps, etc.

Gestion et partage des ressources


gestion des ressources physiques : allocation de mmoire principale
de mmoire secondaire, des organes dentre-sortie,
partage et change dinformation entre usagers,
protection mutuelle des usagers,
service divers : facturation de ressources, statistiques dutilisation,
mesure de performances, etc.
2012-2013

L'environnement de programmation

22

Prsentation gnrale des systmes dexploitation

Gnralits

Dfinition et objectifs dun S.E. dexploitation

utilisateurs

machine virtuelle
systme d'explitation
ressources
matriel

2012-2013

L'environnement de programmation

23

Prsentation gnrale des systmes dexploitation

volution des systmes dexploitation

volution des systmes dexploitation

2012-2013

Exploitation porte ouverte : 1945-1955


Traitement par lots : 1955-1965
Multiprogrammation et traitement par lots : 1965-1980
Multiprogrammation et partage de temps : 1965-1980
Systmes d'exploitation d'ordinateurs personnels
Exploitation en rseau
Exploitation en distribu
Systmes multiprocesseurs
Systme d'exploitation temps rel

L'environnement de programmation

24

Prsentation gnrale des systmes dexploitation

Fonctions dun systme dexploitation

Fonctions dun systme dexploitation

La gestion de la mmoire
La gestion des processus
La gestion des priphriques dE/S
La gestion des fichiers
La gestion de la communication
Environnement de travail

2012-2013

L'environnement de programmation

25

Prsentation gnrale des systmes dexploitation

Fonctions dun systme dexploitation

La gestion de la mmoire
Fonctions:
connatre les parties libres et occupes de la mmoire,
allouer de la mmoire aux processus qui en besoin,
rcuprer la mmoire utilis par un processus
traite le va-et-vient entre le disque et la M.C.

Services offerts:
rpartition de la mmoire disponible entre les diffrents
processus actifs et lensemble des utilisateurs prsents
localisation maintien des donnes pour chaque
processus,
maintien de lintgrit de certains espaces rservs,
gestion de la pagination de la mmoire, utilisation de
mmoire virtuelle.
2012-2013

L'environnement de programmation

26

Prsentation gnrale des systmes dexploitation

Fonctions dun systme dexploitation

La gestion de la mmoire

Techniques: dcoupage de la mmoire en :


zones de taille variable (contigue)
la segmentation
La pagination

2012-2013

L'environnement de programmation

27

Prsentation gnrale des systmes dexploitation

Fonctions dun systme dexploitation

La gestion de la mmoire:contigue
Allocation contigue en zone variable
La mmoire est dcoupe en partitions de taille variable , c'est--dire
adaptables la taille des programmes.
La mmoire est forme d'un ensemble de zones libres et de zones
occupes (partitions alloues).
Une zone libre est caractrise par son adresse dimplantation (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 systme maintient une liste des zones libres en MC


First Fit : la premire zone qui convient
Best Fit : celle gnrant le moins de perte

Inconvnients: Allocations et dsallocations successives des


programmes crent des trous (zones libres de taille insuffisante) en
mmoire centrale : fragmentation
externe: l`espace inutilis est entre partitions
interne: l espace inutilis est dans les partitions
2012-2013

L'environnement de programmation

28

Fonctions dun systme dexploitation

Gestion de la mmoire: Segmentation

la segmentation utilise des parties de programme qui ont une valeur


logique (des modules)
Ladresse logique est une paire: <No de segm, dcalage>
o dcalage est ladresse dans le segment
Avantages: lunit dallocation de mmoire est
plus petite que le programme entier
une entit logique connue par le programmeur
Les segments peuvent changer de place en mmoire
Implmente ldition des liens
La protection et le partage de segments sont aiss
Dsavantage: le problme des partitions dynamiques
La fragmentation externe nest pas limine

trous en mmoire, compression?

Une autre solution est d`essayer simplifier le mcanisme en


utilisant units d`allocation mmoire de tailles gales

2012-2013

PAGINATION
L'environnement de programmation

29

Prsentation gnrale des systmes dexploitation

Fonctions dun systme dexploitation

Gestion de la mmoire: pagination


L'espace d'adressage du programme est dcoup en
morceaux linaires de mme taille : page.
L'espace de la mmoire physique est lui-mme dcoup
en morceaux linaires de mme taille : la case ou cadre
de page (frame)
La taille d'un cadre est gale la taille d'une page
Charger un programme en mmoire centrale consiste
placer les pages dans n'importe quel frame
disponible.
Consquences:
un processus peut tre parpill nimporte o dans la mmoire
physique.
la fragmentation externe est limine
2012-2013

L'environnement de programmation

30

Prsentation gnrale des systmes dexploitation

Fonctions dun systme dexploitation

La mmoire virtuelle

La capacit de la mmoire 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 prsence d'une page en mmoire centrale :
rle du bit de validation
si un processus cherche accder une page non prsente en
mmoire centrale, il se produit un droutement de dfaut de page
Dfaut de page: le systme d'exploitation lance une entre/sortie disque
pour charger la page manquante en mmoire dans une case libre.
la totalit des cases de la mmoire centrale peuvent tre occupes
le systme d'exploitation utilise un algorithme pour choisir une case librer
Loptimal est de retirer une page devenue inutile
Au hasard
FIFO (First In, First out)
LRU (Least Recently Used) : moins rcemment utilise

2012-2013

L'environnement de programmation

31

Prsentation gnrale des systmes dexploitation

Fonctions dun systme dexploitation

La gestion des processus


Un processus est un programme en cours dexcution
un environnement processeur (CO, PSW, RSP, registres
gnraux)
un environnement mmoire appel contexte du processus

Processus: une unit de description d'une activit


pouvant s'excuter en parallle.
Multiprogrammation faire coexister plusieurs
programmes simultanment en mmoire (multi-tches)
Le temps partag ou pseudo-paralllisme : simuler le
partage par plusieurs programmes de temps processeur.
multitche temps partag

Multitraitement: plusieurs tches en mme temps (multiprocesseurs.)


2012-2013

L'environnement de programmation

32

Prsentation gnrale des systmes dexploitation

Fonctions dun systme dexploitation

La gestion des processus


Multiprogrammation simple
chargement

prt

fin E/S

bloqu

demande
E/S

lu

Election:
allocation
du
processeur
En

excution

Multiprogrammation en temps partags


chargeme
nt
fin E/S

bloqu

prt

fin
tranche
de temps
slection

n
demande E/S

lu

dfaut de
page

la premption est la mise en attente force dun


processus
2012-2013

L'environnement de programmation

33

Prsentation gnrale des systmes dexploitation

Fonctions dun systme dexploitation

La gestion des processus


L'ordonnanceur (scheduler) dfinit l'ordre dans lequel
les processus prts utilisent l'UC et la dure d'utilisation,
en utilisant un algorithme d'ordonnancement ( FIFO,
Priorits , tourniquet, file de priorit)
Algorithme d'ordonnancement doit avoir les qualits:
quitabilit : chaque processus reoit sa part du temps
processeur
efficacit : le processeur doit travailler 100 % du temps
temps de rponse : minimiser en mode interactif
temps d'excution : minimiser l'attente des travaux en
traitement par lots (batch)
rendement : maximiser le nombre de travaux effectus par
unit de temps

2012-2013

L'environnement de programmation

34

Prsentation gnrale des systmes dexploitation

Fonctions dun systme dexploitation

La gestion des priphriques dE/S

Fonctions
Cacher la complexit des dispositifs dE/S
Ignorer les diffrences qui existent entre les
mmes types dunits proposes par plusieurs
constructeurs

Services offerts
Fonctions lis leur emploi: paramtrage ou
configuration logicielle de ces priphriques
Fonctions lis leur utilisation: ralisation des
fonctions d'accs et de contrle des ces
priphriques.
2012-2013

L'environnement de programmation

35

Prsentation gnrale des systmes dexploitation

Fonctions dun systme dexploitation

La gestion des fichiers


Un fichier : une collection de donnes codes, de
mme nature, et stockes sur un support externe
(disque, bande).
Fonctions
Implantation physique des fichiers
Ralisation des fonctions daccs aux fichiers
la scurit et confidentialit des informations quils contiennent.

Services Offerts
fonctions lis l'existence des fichiers: cration,
duplication dition, impression, dplacement
fonctions lies lutilisation des fichiers et leur partage

2012-2013

L'environnement de programmation

36

Prsentation gnrale des systmes dexploitation

Fonctions dun systme dexploitation

Gestion des communications

permettre l'accs :
dautres 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 coopration.

2012-2013

L'environnement de programmation

37

Prsentation gnrale des systmes dexploitation

Fonctions dun systme dexploitation

Environnement de travail
le but de toute architecture est de prsenter lutilisateur un
environnement o il puisse travailler confortablement.
L'utilisateur a deux faons pour accder aux services offerts
par le systme :
crit des programmes qui font des appels au noyau (API)
utilise l'interface-utilisateur (shell ou interprteur de commandes)

Les interfaces utilisateurs offrent souvent plusieurs


ergonomies, en fonction des fonctionnalits attendues, ... ou
en fonction des prfrences de lutilisateur:
Environnement graphique: ergonomie prfre par les usagers non
informaticiens (shell graphique)
Langage simplifi interactive : simple succession de lignes de
commande comportant un verbe , et des paramtres
Langage algorithmique, vritable langage de programmation, muni
de structures de contrle de programme et de variables.
2012-2013

L'environnement de programmation

38

Prsentation gnrale des systmes dexploitation

Structure dun systme dexploitation

Les systmes monolithiques

La plus largement rpandue.


Le SE est une collection de procdures, chacune pouvant appeler tout moment
n'importe quelle autre.
Pour construire le code objet du systme, il faut compiler toutes les procdures, pas
de masquage des informations; chaque procdure est visible de toutes les autres
Systmes monolithiques avec une structure minimale
Les services offerts par le systme d'exploitation sont appels par des instructions
de type SVC (Supervisor Call )
Cette instruction commute la machine du mode utilisateur au mode noyau et
transfre le contrle au systme d'exploitation.
procdur
e
principal
e

procdure
de services

procdur
e
utilitaires

2012-2013

L'environnement de programmation

39

Prsentation gnrale des systmes dexploitation

Structure dun systme dexploitation

Les systmes couches


La gnralisation de la structuration simple
Chaque couche ne pouvant tre appele que par des procdures
qui lui sont immdiatement infrieures
Structurer le systme d'exploitation en plusieurs couches, chaque
couche s'appuyant sur celle qui lui est immdiatement infrieure.
Exemple : THE de Dijkstra (un simple systme de traitement par
lots - batch)
C5- Oprateur
C4- Programmes utilisateurs
C3- Gestion des E/S , chaque processus dialoguait avec des
priphriques abstraits
C2- communication entre les processus et la console de loprateur
C1- Gestion de la mmoire, allocation d'espace mmoire pour les
processus (pagination).
C0- Allocation du processeur par commutation de temps entre les
processus, soit la suite d'expiration de dlais, soit la suite
d'interruption ; multiprogrammation
de base du processeur
L'environnement de programmation

2012-2013

40

Prsentation gnrale des systmes dexploitation

Structure dun systme dexploitation

Les Machines virtuelles


Un des premiers SE grer 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 dun SE
Gestionnaire de ressources (multiprogrammation)
Fournir une machine tendue (interface)

Le VM/370, s'excute sur le mme matriel et fournit la


couche suprieure plusieurs machines virtuelles, copies
conformes de la machine relle (interruptions, mode
noyau/utilisateur, etc...)
Chaque machine virtuelle peut excuter son propre SE.
Lorsqu'une machine virtuelle excute en mode interactif un
appel systme, l'appel est analys par le moniteur temps
partag de cette machine, CMS.
2012-2013

L'environnement de programmation

41

Prsentation gnrale des systmes dexploitation

Structure dun systme dexploitation

Les Machines virtuelles

Avantages:
- Chaque VM peut excuter un SE tout comme sur le
matriel! Plus dun SE par machine!
- En sparant la machine tendue de la multiprogrammation
chaque fonction est plus facile entretenir

Dsavantage: plusieurs couches de traps


(droutement)
2012-2013

L'environnement de programmation

42

Prsentation gnrale des systmes dexploitation

Structure dun systme dexploitation

Le modle client-serveur
Un des problmes majeurs avec les SE?
Ils sont gigantesques!

Moins que lon met dans le noyau, le plus


facile ce sera dentretenir et amlior le SE
Un trs petit noyau sapple un micronoyau
(microkernel)

Si on enlve des fonctions du noyau du SE,


ces fonctions doivent exister dans lespace
utilisateur
reporter la plupart des fonctions du systme
dexploitation dans des processus utilisateur
2012-2013

L'environnement de programmation

43

Prsentation gnrale des systmes dexploitation

Structure dun systme dexploitation

Le modle client-serveur

le noyau ne gre que la communication entre les clients et les serveurs.


La dcomposition du SE serveur plus faciles modifier
Les serveurs sexcutent comme des processus en mode utilisateur, et
non en mode noyau,
un bogue dans un serveur naffectera pas, en gnral, lensemble de la
machine, les dgts se limitant au serveur.
Le modle client-serveur se prte, une utilisation sur des systmes
distribus .
Un client qui envoie des messages un serveur na pas besoin de savoir
si le message est trait localement ou sur une machine distante via un
rseau
2012-2013

L'environnement de programmation

44

Prsentation gnrale des systmes dexploitation

Caractristiques des SE modernes


Multi-threading
Processus lgers

Multi-processus
Multi-coeur, partage mmoire (multiprocesseur)
Architecture micro-noyaux (micro-kernel)
Gestion de ladressage
Communication interprocess
Ordonnancement
Systme distribu
2012-2013

L'environnement de programmation

45

Prsentation gnrale des systmes dexploitation

Principaux systmes dexploitation


Mac OS Classic

Systme 5 Systme 6 Systme 7 Mac OS 8


Mac OS 9

Drivs de NeXTSTEP

NeXTSTEP Rhapsody Darwin Mac OS X iOS

Apple
Drivs de BeOS
Cisco Systems
DOS
IBM

Microsoft Windows

BlueEyedOS Haiku ZETA


Cisco IOS
DR-DOS FreeDOS MS-DOS PC-DOS
AIX MVS OS/2 OS/360 OS/390 z/OS OS/400
Bas sur DOS
Branche NT
BSD
GNU

POSIX / UNIX

Linux (liste)

Autres drivs
Drivs de AmigaOS
Dimportance historique
Autres systmes
Systme dexploitation mobile
2012-2013

MS-DOS 1.x 2.x 3.x 95 98 Me


NT 2000 XP 2003 Vista 2008 7 8
FreeBSD NetBSD OpenBSD DragonFly BSD
PC-BSD
Debian GNU/Hurd Arch Hurd
Arch Linux Debian Frugalware Fedora Funtoo
Gentoo Mandriva Red Hat Slackware SUSE
Ubuntu
AIX HP-UX IRIX LynxOS Minix QNX Solaris
System V Tru64 UnixWare ChorusOS

MorphOS AROS
CP/M CTSS GCOS Genera ITS Multics Plan 9 QDOS RSTS TENEX
TOPS-20 TOS VMS
eyeOS FreeDOS Inferno MenuetOS ReactOS UNICOS VxWorks
Android Bada BlackBerry OS iOS OpenMoko Palm OS HP webOS Symbian
OS Windows CE Windows Mobile
L'environnement de programmation
46

Prsentation gnrale du systme UNIX


Le Systme de fichiers
Le shell
Les filtres: grep, sed, awk, find, sort

LENVIRONNEMENT
UNIX/LINUX
Maher SELLAMI

2012-2013

L'environnement de programmation
Unix/Linux

47

SOMMAIRE

Prsentation gnrale du systme UNIX


Le Systme de fichiers
Le shell
Les filtres
grep,
sed,
awk,
find,
sort

2012-2013

L'environnement de programmation

48

Prsentation gnrale du systme UNIX

Historique

1969
Version exprimentale sur PDP-7
1971
Version 1
1972
Version 2
1973
UNIX en C- Bell Labs
1974
PWB

1974
Version 5
1975
Version 6

1977
BSD 2.0
Berkley

1979
Version 7

1980

1981
System III

BSD 4.1
1981
SunOs
SUN

1983
System V AT&T
1985
System V R2.0

1987
MACH
1986
BSD 4.3

1986
System V R3.0
1987/ 88
SYSTEM V R3.2

1991
OSF/1

2012-2013

1974
HERT temps rel

1980
XENIX
Microsoft
1981
XENIX 2.0
Micro/SCO
1985
XENIX 5.1

1986
AIX 1.0
IBM

1989
SCO UNIX
System V/386
1990
AIX 3.1

1990
SYSTEM V R4.0

L'environnement de programmation

49

Prsentation gnrale du systme UNIX

Historique

Les raisons du succs d'UNIIX

crit en C, et donc est facilement portable


les sources sont disponibles; adaptations
faciles aux besoins
l'environnement UNIX est particulirement
riche et fcond

2012-2013

L'environnement de programmation

50

Prsentation gnrale du systme UNIX

Historique

Le phnomne de standardisation

Plusieurs spcifications constituent une base de


garantie de la portabilit d'applications;
POSIX (1983) publie par l'IEEE et issu d'un
document de l'association /usr/group
X/OPEN (1984): cre par les constructeurs
europens
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

L'environnement de programmation

51

Prsentation gnrale du systme UNIX

Caractristiques essentielles

Caractristiques essentielles

UNIX est un systme multi-tches, multti-threads, multiutilisateurs en temps paratag.


Les entres-sorties sont banalises sous forme de fichiers
(priphrique, prise rseau, fichier ordinaire)
L'utilisateur a deux faons pour accder aux services offerts
par le systme :
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 systme: a tous les droits; responsable du
systme (root);
les autres usagers : enregistrs par le root, rassembls en
groupes.
2012-2013

L'environnement de programmation

52

Prsentation gnrale du systme UNIX


Le Systme de fichiers
Le shell
Les filtres: grep, sed, awk, find, sort

LENVIRONNEMENT
UNIX/LINUX
Maher SELLAMI

2012-2013

L'environnement de programmation
Unix/Linux

53

Prsentation gnrale du systme UNIX

Caractristiques essentielles

Le Shell

programme ordinaire appel interprteur


de commande
choisi par l'usager
Un programme shell est interprt
interactivement ou en mode dtach;
vritable langage de programmation
Les 3 fonctions intressentes sont :
Les noms de fonctions abrgs
La redirection des entes-sortie
Crer un environnement sur mesure
2012-2013

L'environnement de programmation

54

Prsentation gnrale du systme UNIX

Caractristiques essentielles

Processus
entit dynamique qui nait, qui vit en toute
indpendance ou en communiquant avec
d'autres processus , qui son tour peut
crer des processus, et enfin qui meurt.
Un processus est caractris par
numro(PID);
un pre (PPID);
un propritaire (UID);
un groupe propritaire (GID),

2012-2013

L'environnement de programmation

55

Prsentation gnrale du systme UNIX

Caractristiques essentielles

Fichiers standards

sortie standard
1
P1
2
erreur standard

entre standard
0

Processus Thorique

P2

cran

2
clavier 0
Un processus fils du shell initial

clavier 0

P3

1
2

fs
cran

sortie standard redirig

2012-2013

1
fi

P4

fs
fe

les entres-sorties standards rediriges

L'environnement de programmation

56

Prsentation gnrale du systme UNIX

Caractristiques essentielles

Fichiers standards

Diffrentes formes de redirection sont possibles:


1>f ou >fredirection de la sortie standard sur f, avec cration;
2>f idem, pour rediriger l'erreur standard;
1>>f ou >>f redirection de la sortie standard sur f, avec cration de f s'il
n'existait pas;
2>>f
idem, pour rediriger l'erreur standard;
0<f ou <fredirection de l'entre standard partir de f;
affiche un message sur la sortie standard
$ echo ceci est mon message
le 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 temp
envoye un message des personnes provenant du fichier let
$ mail marie eric phil <let
$ sort <temp
trie le contenu du fichier temp
2012-2013

L'environnement de programmation

57

Prsentation gnrale du systme UNIX

Caractristiques essentielles

Composition de processus

composition squentielle (;): C1;C2;C3


$ date; wc <fff; who am i; echo fin de commande>toto
Mon Sep Jan 27 19:08:47 PST 1993
12 33 345
jmr tty9 Jan 27 17:55
$ cat toto
fin de commande composee

composition parallle de processus indpendants (&):


C1&C2&C3
le commande wc s'excutera pendant que l'usager la main
$ wc ch* >wc.out &
2145
$ lp ch*& cc code.c

composition parallle de processus communicants(|): C1|C2|C3


0
P1 1 0 P2 1 0 P3 1
2
2012-2013

L'environnement de programmation

2
58

Le Systme de fichiers

Notion de fichier

Fichier

Un fichier est une suite non structure, stocke


sur une mmoire auxiliaire.
Plusieurs sortes de fichiers:
les fichiers ordinaires;
les rpertoires;
les priphriques accs par caractre (terminal);
les priphriques accs par bloc (disque);
les rfrences vers un autre volume (liens symboliques);
les tubes mettant en communication deux processus ;
les prises rseaux, pour accder des fichiers loigns.

Un fichier peut avoir plusieurs liens (noms)

2012-2013

L'environnement de programmation

59

Le Systme de fichiers

Notion de fichier

Caractristiques d'un fichier

Les caractristiques statiques d'un fichier sont


stockes dans un descripteur appel i-noeud:
le type de fichier (ordinaire, rpertoire, ...);
sa taille, en octets;
le couple UID-GID; le numro du propritaire et le
numro de son groupe;
date de cration, la date de dernire modification et la
date de dernire consultation;
un compteur de rfrence sur le i-noeud (nombre de
liens);
la liste des blocs contenant l'information sur le disque.

2012-2013

L'environnement de programmation

60

Le Systme de fichiers

Notion de fichier

Dsignation d'un fichier : rpertoires

La correspondance entre dsignation


externe (identificateur) et dsignation
interne (n de i-noeud) est ralise par les
rpertoires .
Un rpertoire (catalogue) est un fichier
particulier : c'est en fait un tableau deux
colonnes, l'une noms des fichiers,numro
de i-noeud.
2

..
.

0
2
25
36

usr
bin
25

2012-2013

..
.

2
25
local 100
bin 150

36

..
.
rm
ln

L'environnement de programmation

2
36
50
52

61

Le Systme de fichiers

Notion de fichier

Rpertoire

/ (racine)
bin

dev
user1

courier
doc1

jeux

doc2 doc

etc
bin

usr
tmp

unix progc
prog1.c

lib

pog2.c

usr2
docu

jeux

tmp
lib
progc

doc1 doc2 doc3

Le chemin complet du fichier prog1.c est : /usr/user1/progc/prog1.


le chemin relatif doc : courier/doc

2012-2013

L'environnement de programmation

62

Le Systme de fichiers

Notion de fichier

Les permissions

Chaque fichiers possde un ensemble de permissions, qui


dterminent qui peut faire quoi avec le fichier.
3 types de permissions associes un fichier :
lecture examen du contenu;
criture modification;
excution faire excuter 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 propritaire indique que,


lorsque la commande est excute, elle doit obtenir les permissions
associes son propritaire (set-uid).
2012-2013

L'environnement de programmation

63

Le Systme de fichiers

Notion de fichier

Les permissions

$ ls -ld
drwxrwxr-x 1 root 5115 Aug 30 10 10:40 etc/passwd

La permission d'effacer un fichier est indpendante 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 excuter
$ chmod -w f1
# empche d'crire sur f1

Seul le propritaire d'un fichier peut en changer les


permissions (le super utilisateur aussi ).
chown, chgrp
2012-2013

L'environnement de programmation

64

Le shell

introduction

Introduction

Les services offerts par UNIX sont accessibles par :


un sous-programme du noyau UNIX, appel depuis un
programme ( C, PASCAL)
un programme excutable travers un interprteur de
commande (shell) .

Le langage Bourne-Shell est un langage algorithmique.


Il permet de manipuler sont essentiellement les fichiers
et les rpertoires 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 contrle : if , while, ...
une liste de commandes ou phrases (c1;c2 ou c1|c2)
2012-2013

L'environnement de programmation

65

Prsentation gnrale du systme UNIX


Le Systme de fichiers
Le SHELL (Bourne shell)
Les filtres: grep, sed, awk, find, sort

LENVIRONNEMENT
UNIX/LINUX
Maher SELLAMI

2012-2013

L'environnement de programmation
Unix/Linux

66

Le shell

Notions de base

Caractres gnriques

? remplace un caractre quelconque, sauf le ;


* remplace n'importe quelle chane, mme vide, de caractres ne
comportant pas
[...] remplace un caractre parmi ... , ou un caractre parmi ceux qui ne sont
pas numrs entre [...] , si le premier est un point d'exclamation.
$ ls
t1.p
t2b.p t3.p tf.p tn.p tx.p
t1a.pt2.p t4.p tn tx
$ echo Mes versions de TP sont t?.p
Mes Versions de TP sont t1.p t2.p t3.p tf.p tn.p tx.p
$ echo les bonnes versions t[!0-9].p
les bonnes versions tf.p tn.p tx.p
$ echo Dans t1?.p les tableaux sont de la forme t\[nx]
avec nx=12 \*P
Dans t1a.p t&b.p les tableaux sont de la forme t[nx]
avec nx=12*P
2012-2013

L'environnement de programmation

67

Le shell

Notions de base

Notions de base

Sparateurs
;
sparateurs de phrases
<tab> espace sparateurs d'entits lexicales (mot)

Mots

dsignent les variables, les symboles du langage (mots-cl) et les noms de fichiers.
Un commentaire est prfix par un #.

Caractres gnriques

?
remplace un caractre quelconque, sauf le ;
*
remplace n'importe quelle chane, mme vide, de caractres ne comportant pas
[...] remplace un caractre parmi ... , ou un caractre parmi ceux qui ne sont pas numrs entre
[...] , si le premier est un point d'exclamation.
$ ls
t1.p
t2b.p
t3.p tf.p tn.p tx.p
t1a.p t2.p t4.p tn tx
$ echo Mes versions de TP sont t?.p
Mes Versions de TP sont t1.p t2.p t3.p tf.p tn.p tx.p
$ echo les bonnes versions t[!0-9].p
les bonnes versions tf.p tn.p tx.p
$ echo Dans t1?.p les tableaux sont de la forme t\[nx] avec nx=12 \*P
Dans t1a.p t&b.p les tableaux sont de la forme t[nx] avec nx=12*P

Caractres spciaux
&|<>$()'"`{}\
caractre spcial devient
un caractre normal s'il est prcd du caractre \ ou s'il
L'environnement de programmation

2012-2013

68

Le shell

Notions de base

Parenthsages

Servent regrouper des squences de mots ou isoler des mots:

{...} excute les commandes dans ... par le mme shell;

(...)
excute les commandes ... par un shell fils;
'...' prend littralement ... ; aucun caractre spcial n'interprt ;
"..."
prend littralement ... aprs interprtation de $, '...', et \
`...`
excute les commandes dans ... ; le rsultat (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 <f2
wed sep 28 09:11:09
vous
tty2 sep 28 08:30
mhs
tty4 sep 28 09:30
2012-2013

L'environnement de programmation

69

Le shell

Variables; Arguments et paramtres

Variables

dsignes par des mots; elles ne se dclarent pas, et leurs type (numrique ou
chane) dpend de leur interprtation par les commandes.
Initialisation variable=valeur
valeur: valeur numrique, une chane de caractres, le rsultat d'un commande, une
liste de commandes ...
$ N=1
# N est une variable entire
$ ACTIF=`who` # ACTIF est une chane, rsultat en sortie par l'excution 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 paramtre est ralise par l'oprateur $ prfixant le nom de la
variable ou du paramtre.
Les accolades {} peuvent tre ncessaire autour du nom,
$ REP=${REP}miage
# Concatner "miage" sans espace la valeur de REP

2012-2013

L'environnement de programmation

70

Le shell

Variables; Arguments et paramtres

Evaluation des variables


ion des variables

{variable:-mot} substitue la variable si elle est dfinie , 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 dfinie
$ 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 substitue;


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 initialise
c : Attention!

{variable:+mot} si la variable est initialis et non nulle, l'interprte substituera mot et


sinon la chane vide, la variable n'tant pas modifie.
$ echo ${b:+bonjour}
bonjour

2012-2013

L'environnement de programmation

71

Le shell

Variables; Arguments et paramtres

Paramtres des commandes

Les paramtres effectifs d'une commande ou argument sont des chanes de


caractres.
Les paramtres formels sont dsigns par des chiffres; des paramtres positionnels:

2012-2013

0
nom de la commande;
1
premier paramtre effectif;
2... deuxime paramtre effectif, ainsi de suite;
"$*" quivalent "$1 $2 ..."
"$@" quivalent "$1" "$2" ...

L'environnement de programmation

72

Le shell

Variables; Arguments et paramtres

Porte et environnement
ion des variables

La porte d'une variable est le processus qui l'a cre.


export rend les variables visible dans les processus Shell qui seront cres par la
suite (fils)
$ x=Bonjour
$ export x
$ sh
# un autre shell
$ echo $x
Bonjour
# x est connue dans le sous-shell

2012-2013

L'environnement de programmation

73

Le shell

Variables; Arguments et paramtres

Variables prdfinies

# nbre de paramtres effectifs d'une commande (sous-prog.);


? code de retour d'une commande;
$ numro de du processus Shell en cours;
!
numro du dernier processus lanc en arrire plan;
HOME nom du rpertoire personnel, fournit le paramtre par dfaut de cd;
PATH rgles de recherches des commandes;
TERM type du terminal utilis
PS1 valeur de premier prompt ($ par dfaut)
PS2 valeur de second prompt (> par dfaut)
IFS caractres sparateur de chanes dans le Shell.
Une variable peut tre dtruite par la commande interne unset (sauf PATH, PS1,
PS2)

2012-2013

L'environnement de programmation

74

Le shell

Lecture et affichage

read, echo
ion des variables

read lit une ligne de lentre 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 cinq
On aura les variables x="une", y="deux" et z="trois quatre cinq"

echo affiche sa liste darguments sur la


sortie standard; admet les caractres spciaux
(\t \n \f \c)
echo [-ne] [message ...]
echo {--help,--version}
-n Ne pas effectuer le saut de ligne final.
-e Interprter les squences de caractres prcdes 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 arrire d'un caractre
\t tabulation horizontale \v tabulation verticale
\\ backslash
\nnn le caractre de code ASCII nnn (en octal)

2012-2013

L'environnement de programmation

75

Le shell

Expressions

expr
ion des variables

expr - Evalue des expressions


expr
expr

expression...
{--help,--version}

Incrmentation de N
N=`expr $N + 1` # autres oprateurs : - * / %(mod)

2012-2013

Oprateurs: | & < <= == != > >= + - / * % :


match chane exp_reg
substr chane pos lg
index chane classe_caractre
length chane

L'environnement de programmation

76

Le shell

Expressions

test
ion des variables

test - Vrifier 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 combins avec les
oprateurs logiques : -a, -o !. ; parenthses \( ...\)

2012-2013

-r f vrai si f existe et a le droit r;


-w fvrai si f existe et a le droit w;
-x fvrai si f existe et a le droit x;
-f f vrai si f existe et est un fichier ordinaire;
-d r vrai si le rpertoire 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;
L'environnement de programmation

77

Le shell

Expressions

test (suite)
ion des variables

-z ch vrai si la chane ch est de longueur nulle;


-n ch vrai si la chane ch est de longueur non nulle;
c1 = c2 vrai si la chane c1 et c2 sont gales (espacement
obligatoire) ;
c1 != c2 vrai si la chane c1 et c2 sont diffrentes;
n1 -eq n2 vrai si les nombres n1=n2 (prdicats:-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 rsultat 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

L'environnement de programmation

78

Le shell

Les Commandes

Structure de la ligne de commande


ion des variables

Commande simple:
retourne code zro si excution sans erreur ou une valeur non nul une
signification propre la commande qui l'a retourne.

Tube (pipe-line) : squence de 2 ou plusieurs commandes


spares par le "|".
Liste de commande: squence de commandes simples ou de
pipe-lines spars par l'un des caractres suivants : ; & && ||

C1 ; C2 excution squentielle de C1 puis C2 ;


C1 & C2
excution asynchrone;
C1 && C2 excute C1; s'il n'ya pas d'erreur , excute C2;
C1 || C2
excute C1; s'il ya une erreur , excute C2.

Structure de contrle

2012-2013

L'environnement de programmation

79

Le shell

Les Commandes

La boucle pour...

for <variable> [in <chaine> ...]


do <liste de commandes>
done
La liste de commande est excute pour chaque valeur de la
variable prise dans les mot de la chane
for prog in *.p
do
echo e "\n\n$prog \n"
head -1 $prog
done

affiche la liste des paramtres


for i
# quivalent
do echo $i ; done

2012-2013

for i in $*

L'environnement de programmation

80

Le shell

Les Commandes

La boucle tantque...

while <liste de commandes>


do <liste de commandes>
done
Tant que la dernire commande de la premire <liste de
commandes> est vrai, la deuxime <liste de commandes> est
excute
Tant que la fin du fichier nest pas atteint
while read ligne; do ; done

lire un choix numrique


echo "Votre choix (1-4) "
while echo "?\c"; read choix;
[ "$choix" -lt 1 -o $choix -gt 4
do echo "Recommencer (1-4) "
done
2012-2013

L'environnement de programmation

81

Le shell

Les Commandes

La slection si
if <liste de commnades 1>
then <liste de commandes 2>
else <liste de commandes 3>
fi

La liste de commande 2 est excut si la liste de commandes 1


est vraie, sinon la liste de commandes 3.
if test -f $1
then echo $1 existe
else echo $1 n\'existe pas
fi

c1&&c2
c1||c2

2012-2013

scrit:
scrit:

if c1; then c2; fi


if c1; then :;else c2; fi

L'environnement de programmation

82

Le shell

Les Commandes

La slection si
if ...
then
else if ...
then
....
fi

fi

ou
encore
2012-2013

L'environnement de programmation

83

Le shell

Les Commandes

La slection cas ...

case <chane> in
<motif> ) <liste de commandes>;;
<motif> ) <liste de commandes>;;

esac

excute la liste de commandes correspondant au premier motif


satisfaisant la chane , puis l'excution du case est termine.
aiguillage aprs la lecture du choix
case
1)
2)
*)
esac

2012-2013

$choix in
sh choix1;;
sh choix2;;
echo "Pas encore au point";;

L'environnement de programmation

84

Le shell

Les Commandes

Commandes Internes

prdfinies dans le Shell; pas de fichier excutable ayant son


nom.
break [n] sortir d'une boucle (tant que, pour), ou de n
embotements de boucles;
continue [n] continuer l'itration suivante d'une boucle, ou
la nme boucle englobante;
exit [n] quitter le programme avec en code retour celui de la
dernire commande excute, ou n si
return [n]idem pour quitter une fonction;
. fichier excute un fichier Shell dans le Shell courant;
: commande vide du Shell. Son code de retour est 0
while :; do date; done

2012-2013

L'environnement de programmation

85

Le shell

Les Commandes

Commandes relatives aux varaibles et paramtres

eval mot mot contient une liste de commande Shellqui seront


sont excutes.( sous-programme).
# fichier de dmarrage /etc/profile
MESSFIN="echo `logname` de \'connecte\' le ; date;"
QUOTAT='TAILLE=`du -s $HOME | cut -f1`'
MESQUIT=' echo Test des quotas en cours"
eval $QUOTAS
if [ $TAILLE -gt $MAXQUOTAS ]
then
eval $MESSFIN
exec sh
fi

2012-2013

L'environnement de programmation

86

Le shell

Les Commandes

Commandes relatives aux varaibles et paramtres

set [arg1]+ fournit les valeurs des paramtres effectifs


correspondant aux paramtres formels 1, 2, ...
paramtrer les sous-programmes raliss par eval
set `date` # range le jour de la semaine dans $1 mois
dans $2 ...

set -u [mot] substitution d'une variable non dfinie (mot)


provoque une erreur
shift [n] les paramtres $n+1.... ($2, par dfaut) sont
renomms partir de 1.

2012-2013

L'environnement de programmation

87

Le shell

Redirection des E/S

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'entre standard;
>&m idem pour la sortie standard;
n> &m fusionne la sortie du descripteur n celle de m ;
n< &m fusionne l'entre du descripteur n celle de m ;
n< fichier
dirige la sortie du descripteur n vers fichier
<< [-]mot l'entre est lue jusqu' une ligne contenant mot (ou
fin de fichier).- ignorer les blancs de dbut de ligne;

2012-2013

L'environnement de programmation

88

Le shell

Redirection des E/S

Redirection des E/S


$ (echo Message normal
> echo message pour signaler une erreur 1>&2
> echo Autre message normal
) > sortie 2>erreur
$ cat sortie
Message normal
Autre message normal
$ cat erreur
Message pour signaler une erreur

2012-2013

L'environnement de programmation

89

Le shell

Sous-programme

Gestion des processus et des vnements


wait [n] suspend l'excution jusqu' ce que le processus n,
ou tous les processus lancs en arrire-plan, se terminent.
trap [arguments] [n]+ l'argument est une commande qui sera
excute par le Shell lorsque le signal n survient;
trap [n]+ les trappes sont remises leur tat primitif (restaurer)
trap liste des commandes associs chaque signal.
exec [commande] lance la commande par recouvrement du
processus shell
$ exec ksh
remplacement du Shell par un processus Korn-shell
$ exec login
recommencer une session, en gardant la ligne
$ exec >session
pour ce shell, la sortie standard est le fichier
2012-2013

L'environnement de programmation

90

Le shell

Sous-programme

Sous-programme ou procdure shell


Un texte en Shell stock dans un fichier constitue une
procdure 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

L'environnement de programmation

91

Prsentation gnrale du systme UNIX


Le Systme de fichiers
Le shell
Les filtres: grep, sed, awk, find, sort

LENVIRONNEMENT
UNIX/LINUX
Maher SELLAMI

2012-2013

L'environnement de programmation
Unix/Linux

92

Les Filtres

La famille grep

Recherche d'une chane dans un fichier: grep

grep, egrep et fgrep lisent ligne par ligne et affichent les lignes de
fichiers donns en paramtre et qui contiennent un motif donn.
grep [option] <motif> [<fichier> ... ]
motif est une expression rgulire dans laquelle certains caractres ont
une signification particulire.
Sauf option contraire, chaque ligne ayant cette proprit 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

L'environnement de programmation

93

Les Filtres

La famille grep

Options

$
$
$
$
$
$

-v seules les lignes ne contenant pas le motif sont affiches;


-v seules les lignes contenant pas le motif sont affiches;
-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 affichs;
-n numrote les lignes affiches;
-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 connecte?
ls | grep -v temp tous les fichiers sauf temp

Op

2012-2013

L'environnement de programmation

94

Les Filtres

La famille grep

expressions rgulires de grep et fgrep

c tout caractre non spcial


\c ignore la signification spciale de c
^ dbut de ligne
$ fin de ligne
.
n'importe quel caractre unique
[...] n'importe quel caractre unique parmi ....;
[^...]
n'importe quel caractre unique ne figurant pas parmi ....
\n ce qui a t identifi par la nime sous expression \(...\)
r* zro ou plus occurrences de r
r+ une ou plus occurrences de r
r? zro ou une occurrence de r
r1r2
r1 suivi de r2
r1| r2 r1 ou r2 (egrep seulement)
\( r \) sous expression r repre (grep seulement); voir \n;
(r) expression rgulire r (egrep seulement); peut tre imbriqu

2012-2013

L'environnement de programmation

95

Les Filtres

La famille grep

Exemples
$
$
$
$

grep '^From' $MAIL


ls -l | grep '^d'
ls -l | grep '^.......rw'
grep '^[^:]*::' /etc/passwd

fgrep recherche plusieurs expressions simultanment


egrep traite des expressions rgulires avec 'ou' et des () pour grouper les
expressions.

2012-2013

L'environnement de programmation

96

Les Filtres

Recherche d'un fichier: find

Recherche d'un fichier: find


find [rpertoire]+ [expression]+
find descend rcursivement des sous-hirarchies de rpertoires donnes
par leur racine, en cherchant les fichiers rpndant certaines critres
(nom,droit,type, taille..).
rpertoire la liste des racines des sous-hirarchies explorer
expression suite de primitives exprimant la fois les critres de slection
des fichiers et les actions leur appliquer.

2012-2013

L'environnement de programmation

97

Les Filtres

Recherche d'un fichier: find

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 rcemment que fic;
-type <x> recherche un fichier de type <x> avec :
b pour fichier spcial bloc,
c pour fichier spcial caractre,
d pour fichier rpertoire,
f pour fichier ordinaire,
p pour tube nomm (System III/V);

-perm <octal> recherche un fichier ayant les permissions donnes;


- links <n>
recherche un fichier ayant n liens ;
-group <nom>recherche sur un groupe nom;

2012-2013

L'environnement de programmation

98

Les Filtres

Recherche d'un fichier: find

expression

- size <nc|n> recherche sur une taille en blocs ou en caractres;


- exec commande vrai si la commande restitue une valeur de sortie nulle.
la fin de la commande doit tre ponctue par \; et le nom du fichier examin
est reprsent par {};
- print le nom de fichier doit tre imprim;
- inum <n> recherche un fichier dont le i-noeud n;
-\(expression\) a pour valeur boolenne celle de l'expression parenthse.
Toutes ces primitives peuvent tre composes avec: !, -o , et \(\).

2012-2013

L'environnement de programmation

99

Les Filtres

Exemple
E find{} /usr/ens
\;

Recherche d'un fichier: find

\( -name *.p -o -name *.f \) -mtime -30 -exec ls -i

2135 /usr/ens/mhs/exam.p
2149 /usr/ens/mhs/scarable.f
2149 /usr/ens/rim/exp.p
2149 /usr/ens/rim/examen.p
find $HOME -newer .datesauv -print
affiche les fichiers de l'arborescence dfinie par le rpertoire
personnel de l'usage modifis aprs le fichier .datesauv

2012-2013

L'environnement de programmation

100

Les Filtres

Tri et fusion

Tri
sort [options] [cl [option]]* [<fichier1> ]*
trie les lignes et crit les rsultats sur la sortie standard (sauf -o).
options
-c (check) vrifie si le fichier est dj 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 numrique (signe ventuellement);
-i les caractres dont le code ASCII 040-0176;
-r tri en ordre invers;
-b ignorer les blancs en dbut de champ;
-t<x> le dlimiteur de champ dans les lignes est le caractre x.

2012-2013

L'environnement de programmation

101

Les Filtres

Tri et fusion

Notion de cl
N cl de la forme +debut - fin.
debut premier champ servant faire la cl (numrotation partir de zro)
fin n du premier champ qui n'appartient pas la cl.
sort +1 -2 f trie f sur une cl format par le
deuxime champ de chaque ligne
Une cl peut tre prciser 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 dbut de ligne
n nombre de caractres sauter en dbut de champ .

2012-2013

L'environnement de programmation

102

Les Filtres

Tri et fusion

Exemples
$ ls | sort
trie les noms de fichiers en ordre
alphanumrique
$ ls -s | sort -nr trie par ordre de taille dcroissante
$ ls -l | sort +4nr -5n
trie par taille dcroissant;
aprs 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
troisime champ (4me caractre), et qui se termine la
fin du cinquime champ.
Soit f.t un fichier d'tudiants qui la format suivant:
nom, prnom, jj/mm/aa, codeBac, codeDiplme
$ sort -t, +4bf -5bf +0f -1f f.t >diplome.t
tri sur diplme, puis alphabtiquement, sortie sur
diplome.t
$ sort -t, +2.6b -2.8b +2.3b -2.5b +2.0b -2.2b f.t >age.t
tri par ge, la date tant la date de naissance, sortie
sur age.t.
2012-2013

L'environnement de programmation

103

Les Filtres

Tri et fusion

4.3.2 Fusion
sort -m [options] [cl [option]]+ [<fichier1> ]+
Les fichiers doivent pralablement tre tris sur les cls de fusion.

2012-2013

L'environnement de programmation

104

Les Filtres

L'diteur de flot sed

L'diteur de flot sed


sed est un diteur non interactif qui permet le traitement de fichiers texte.
sed [-n] [<requte>][-e <requte>]* [ -f <script>][<fichier>]*
sed recopie le ou les fichier (par dfaut l'entre standard) sur la sortie
standard, en appliquant chaque ligne les requtes qui suivent l'option -e
(un par requte), ou les requtes qui se trouve dans le fichier script, ou la
requte s'il y en a une.
-n affichage sur la sortie des lignes sur lesquelles on applique la
commande p seulement.
Forme gnrale des requtes de sed
[adresse1 [adresse2]] commande [arguments]
adresse peut tre
n n absolu d'un ligne de texte
$ dernire ligne
/expression/ motif figurant dans la ligne adress.

2012-2013

L'environnement de programmation

105

Les Filtres

L'diteur de flot sed

Mode de fonctionnement

tampon d'dition (1 ligne)


tampon des

tampon

requtes

auxiliaire

fichier diter

2012-2013

fichier rsultat

L'environnement de programmation

106

Les Filtres

L'diteur de flot sed

Les commandes de manipulation de l'espace


de
a\ travail
<texte> ajoute des lignes la sortie jusqu' la premire ligne ne se

terminant pas par \


b <etiq>
saut la commande :etiq
c\ remplace des lignes comme pour a
d dtruit la ligne courante; lit la suivante
i\ insre 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 rgulire <anc> par la chane de
substitution nouv. f est un indicateur :
g : remplace toutes occurrences traites;
p : le tampon est crit si une substitution est effectue;
w <fic> : crit dans fic si une substitution est effectue
t <etiq>branchement etiq si la dernire substitution a russi
w <fic> crit dans fic;

2012-2013

L'environnement de programmation

107

Les Filtres

L'diteur de flot sed

Les commandes de manipulation de l'espace


de
y/<ch1>/<ch2>/
travail toutes les occurrences du tampon des caractres figurant dans la

ch1 sont remplacs par ch2.


= imprime le n de la ligne;
! commande-sedcommande est effectue sur les lignes non slectionnes;
{ et }
associe un espace d'adressage une liste de commandes;
N la ligne courante est ajoute au tampon;
D dtruit le dbut du tampon jusqu' la premire <LF>;
P affiche le dbut du tampon jusqu' la premire <LF>;
h le tampon est transfr dans le tampon auxiliaire;
H le tampon est ajout dans le tampon auxiliaire; le sparateur est la fin de ligne
g le tampon auxiliaire est copi dans le tampon dont le contenu est dtruit
G le tampon auxiliaire est ajout dans le tampon; le sparateur est la fin de ligne
x change entre les contenus du tampon et du tampon auxiliaire.

2012-2013

L'environnement de programmation

108

Les Filtres

L'diteur de flot sed

Exemples
$
$
$
$
$
$
$
$
$
>

2012-2013

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

L'environnement de programmation

109

Les Filtres

L'diteur de flot sed

Exemples
Remplacer <LF> par le sparateur :, sauf s'il est suivi par !.
# debut de la boucle
: debut
# ajout de la suivante dans le tampon
N
# remplacer la fin de ligne par : s'il n'y a pas de !
s/ \n \([^!]\) / :\1 /
# si la substitution a russi , recommencer
t debut
# sinon , afficher la ligne d'adresse complte
P
# et dtruire le ! qui reste dans le tampon
d

2012-2013

L'environnement de programmation

110

Les Filtres

Outil de transformation de texte AWK

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'intrieur des lignes
chaque ligne est soumise awk (<fprog>, <prog>) ;
awk [-F<car>] {[-f <fprog>| <prog>]} [param] [<fichier>]*
Syntaxe d'un programme slection { actions }
slection
expressions, BEGIN, END
$ awk '/<expression rgulire>/ {print}' <fichier>
$ awk ' {print}' <fichier> ...
-idem

-idem egrep
cat

Traitement des champs


$1, $2, ..., $NF dsignent le premier champ, le second champ, ....
$0 enregistrement courant (ligne).
NF nombre de champs de la ligne courante.
$ who
rim
tty2
Sep 29 11:53
slim
tty4
Sep 29 12:15
$ who | awk '{print $1, $5} imprime les noms et heurs de connexions
rim
11:53
slim
12:15
2012-2013

L'environnement de programmation

111

Les Filtres

Outil de transformation de texte AWK

Les variables
Les variables utilisateurs

La dclaration et le type sont implicites (numriques, chanes).

Initialises la chane vide '


Les variables prdfinies
FILENAME nom du fichier courant d'entre
FS sparateur de champs (<espace> par dfaut)
NF nombre de champs dans l'enregistrement courant
NR n de l'enregistrement courant
OFMT format de sortie des nombres (dfaut %g, voir printf..)
OFS
sparateur de champs de sortie(par dfaut, un espace)
ORS
sparateur de lignes en sortie (par dfaut, fin de ligne)
RS sparateur de lignes en entre (par dfaut 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

L'environnement de programmation

112

Les Filtres

Outil de transformation de texte AWK

Les slections
- combinaison quelconque au moyen des oprateurs:
- expression rgulire de la forme

! || && (et)

<expression> ~ /<expression rgulire>/


<expression> !~ /<expression rgulire>/
<expression> <op> <expression>
o <op> est < <= > >= == !=
$2 == ""
2me champ vide
$2 ~ /$/
2me champ identique la chane vide
$2 !~ /./ 2me champ ne contient aucun caractre
length($2) == 0 2me 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

L'environnement de programmation

113

Les Filtres

Outil de transformation de texte AWK

Les oprateurs (priorit )

= += -= *= /= %= oprateurs d'affectation
|| oprateur boolens OU; exp1 || exp2
exp2 n'est pas value que si exp1 est vraie
&& oprateur boolens ET; exp1 && exp2 est vraie si les deux le sont
!
ngation
> >= < <= == != ~ !~ oprateurs relationnels ~ et !~ sont des oprateurs de
correspondance.
<espace> oprateur de concatnation de chanes
+ - plus, moins;
*/%
multiplication, division, reste;
++ -incrmentation, dcrmentation (prfix ou postfix);

2012-2013

L'environnement de programmation

114

Les Filtres

Outil de transformation de texte AWK

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 chane s1 dans la chane s2;
int(expr)
partie entire de expr;
length(s)
longueur de la chane s; $0 par dfaut.;
log(expr)
logarithme naturel de expr;
sin(expr)
sinus de expr;
split(s, a, c) dcoupe s en a[1],a[2], ..., a[n] suivant le dlimiteur c (ou FS);
sprintf(fmt,...)
formate ... en accord avec la spcification fmt;
substr(s, m, n) sous-chane de s; dbut au caractre m, longueur maximale n.

2012-2013

L'environnement de programmation

115

Les Filtres

Outil de transformation de texte AWK

Les instructions
apparaissent dans les actions et se terminent soit par un ; <fin de ligne> #
- Instructions d'impression
print [<expression>, <expression> ...]
printf (<format>, [<expression>, <expression> ...])

- Instruction conditionnelle
if (<expression>)
<instruction>
else
<instruction>

- Instructions itratives
while (<expression>)
<instruction>
for (<var>; <expr>; <expr>)
<instruction>
for (<var> in <tableau>)
<instruction>

break sortie de la boucle courante;


continue
poursuivre l'itration 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

L'environnement de programmation

116

Les Filtres

Outil de transformation de texte AWK

Les tableaux associatifs

Les tableaux sont des variables qui associent des indexes avec des valeurs.
Les indexes peuvent tre soit des nombres, soit des chanes de caractres :
# imprime son entre l'envers

awk ' { ligne[NR]=$0 }


END {for (i=NR; i>0; i--) print ligne[i]}
' $*

# freqmot : compter les apparitions de mots


awk ' { for (i=1; i<=NF; i++) num[$i]++ }
END {for (mot in num) print mot,
num[mot]}
' $*

2012-2013

L'environnement de programmation

117

Les Filtres

Outil de transformation de texte AWK

Un autre exemple: awk


# recherche les mots doubles adjacents dans plusieurs fichiers
awk '
FILENAME != prevfile { # nouveau fichier
NR=1
prevfile=FILENAME
}
NF>0 {
if ($1 == dernmot)
printf "double %s, fichier %s, ligne %s ", $1, FILENAME, NR
for (i=2; i<=NF; i++)
if ($i == $(i-1))
printf "double %s, fichier %s, ligne %s \n", $i, FILENAME, NR
if (NF >0)
dernmot=$NF
} ' $*

2012-2013

L'environnement de programmation

118

Compiler avec GCC


Le configurateur MAKE
Dboguer avec le Dbogueur GNU (GDB)
Environnement dexcution
Gestion des erreurs
Ecrire et utiliser des Bibliothques

PROGRAMMER SOUS
GNU/LINUX
Maher SELLAMI

2012-2013

L'environnement de programmation
Unix/Linux

119

Programmer sous GNU/LINUX

Compiler avec GCC

Programme Interprt

Traduction et interprtation des programmes

Programme interprt

Programme Compil
Compilation unique

Edite
ur

Programm
e Source

2012-2013

Interprte
ur

Rsultat

Donnes

Compilate
ur

Compilation spare

chane de
production
traditionnelle

Programm
e Source

Programm
e objet
relogeable

Program
me
Source 1

Compilate
urProgram
me
objet1

Editeur
Program
me
Source 2

Programm
e
Excutabl
e
relogeable

Compilate
ur
Program
me
objet2

M.
C.

Program
me
Source 3

Compilate
urProgram
me
objet3

Editeur
de liens

Champs des
Program
outils de
production
me
L'environnement de programmation
Excutabl

Chargeu
r

Bibliothq
Bibliothqu
Bibliothq
ue
ue e

120

Chargeu
r

Mmoir
e
Central

Programmer sous GNU/LINUX

Compiler avec GCC

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
dadresses ne sont pas rsolus.
Editeur de liens (linker) :
rassemble les modules traduits sparment par les
traducteurs, les relie et produit un module chargeable
(ou relogeable - relocatable -).
Chargeur (loader) :
Le rle du chargeur est donc d'aller chercher sur un
disque les fichiers excutables (le programme) et les
donnes pour les implanter en mmoire.
2012-2013

L'environnement de programmation

121

Diffrence entre un compilateur et un interprteur :

Compilateur vs Interprteur

What time is it ?

Compilateur

Quelle heure est-il ?

What time is it ?

Interprteur

Il est 9h35.
Fvrier 2008

Module TLC

122

Programmer sous GNU/LINUX

Compiler avec GCC

Compiler avec GCC

Les compilateurs disponibles sur les systmes Linux


font tous partie de la GNU Compiler Collection, plus
communment appele GCC (http://gcc.gnu.org/.) .
GCC inclut galement des compilateurs C, C++,
Java, Objective-C, Fortran et Chill. Ce chapitre se
concentre plus particulirement 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.


2012-2013

L'environnement de programmation

123

Programmer sous GNU/LINUX

Compiler avec GCC

Exemple
Fichier 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;
}

Fichier source C++ reciprocal.cpp


#include <cassert>
#include "reciprocal.hpp"
double reciprocal (int i) {
assert (i != 0); // i doit tre diffrent de zro
return 1.0/i;
}
Fichier d'entte reciprocal.hpp

#ifdef
extern
#endif
extern
#ifdef
}
#endif
2012-2013

%%__%%cplusplus
"C" {
double reciprocal (int i);
%%__%%cplusplus

L'environnement de programmation

124

Programmer sous GNU/LINUX

Compiler avec GCC

Compiler un Fichier Source Isol

% gcc -c main.c
Le fichier objet rsultant 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 excutable.
L'option -I est utilise pour indiquer GCC o rechercher les fichiers
d'entte.
% g++ -c -I ../include reciprocal.cpp
% g++ -c -D NDEBUG reciprocal.cpp

dsactivez la vrification en dfinissant la macro NDEBUG.


Loption O optimise le code afin qu'il s'excute aussi rapidement que
possible
% g++ -c -O2 reciprocal.cpp
2012-2013

L'environnement de programmation

125

Programmer sous GNU/LINUX

Compiler avec GCC

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 dune bibliothque (-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
rpertoires, 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


bibliothques dans le rpertoire /usr/local/lib/pam
% gcc -o app app.o -L. -ltest

indiquer l'diteur de liens de rechercher la


bibliothque test dans le rpertoire courant
2012-2013

L'environnement de programmation

126

Compiler avec GCC


Le configurateur MAKE
Dboguer avec le Dbogueur GNU (GDB)
Documentation
Environnement dexcution
Gestion des erreurs
Ecrire et utiliser des Bibliothques

PROGRAMMER SOUS
GNU/LINUX
Maher SELLAMI

2012-2013

L'environnement de programmation
Unix/Linux

127

Programmer sous GNU/LINUX

GNU Make

Automatiser le Processus avec GNU Make

Vous pouvez fournir toutes ces informations make en les plaant dans
un fichier nomm Makefile.
reciprocal: main.o reciprocal.o
g++ $(CFLAGS) -o reciprocal main.o reciprocal.o
main.o: main.c reciprocal.hpp
gcc $(CFLAGS) -c main.c
reciprocal.o: reciprocal.cpp reciprocal.hpp
g++ $(CFLAGS) -c reciprocal.cpp
clean:
rm -f *.o reciprocal
% make
gcc -c main.c
g++ -c reciprocal.cpp
g++ -o reciprocal main.o reciprocal.o

recompiler avec les optimisations actives, vous procderiez de la faon


suivante:
% make clean
rm -f *.o reciprocal
% make CFLAGS=-O2
gcc -O2 -c main.c
g++ -O2 -c reciprocal.cpp
g++ -O2 -o reciprocal main.o reciprocal.o
Notez que le drapeau -O2 a t insr la place de $(CFLAGS) dans les rgles.

2012-2013

L'environnement de programmation

128

Programmer sous GNU/LINUX

Le configurateur MAKE

Le configurateur MAKE
lit une spcification de dpendances ou mode
d'emploi de fabrication, et l'interprte pour crer
une nouvelle version complte.
Il vrifie les dates de dernire modification, pour
raliser 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
2012-2013

L'environnement de programmation

129

Programmer sous GNU/LINUX

Le configurateur MAKE

Mode de fonctionnement: Makefile

make examine si les dpendances de l'entre sont jour; sinon, fait excuter par
des processus UNIX les commandes de fabrication en les soumettant une par une
l'interprteur shell.
Le mode d'emploi est constitu partir de six modles de lignes:
Lignes de commentaires
dbutent par un # et se termine <NL>
Dfinitions d'entre
nomment les entres et dfinissent les dpendances:
Cible
:
liste de dpendances
Exemple:
prog: def.c
sp.o prog.c

Rgles de fabrication

forment la recette; suivent un dfinition d'entre:

<tab>
<commande>
Exemple: gcc -o prog prog.o def.o sp.o

Les entres gnriques


.s [ .t ]+ :
.s.t.
mode d'emploi gnral appliquer pour fabriquer un fichier de suffixe .t quand on a
un fichier de suffixe .s

Les lignes d'inclusion include <fichier>


Dfinitions de macros une macro est une variable de make
<nom macro> =

2012-2013

<texte dfinissant la macro>

L'environnement de programmation

130

Programmer sous GNU/LINUX

Le configurateur MAKE

L'appel de make

make [-f makefile] [options] [macro=valeur ] [cible]


-i Ignorer les erreurs retournes par les
commandes excutes;
-s Ne pas imprimer les commandes avant de les
excuter;
-r Ne pas utiliser les rgles implicites;
-t Maj des dates des fichiers cibles sans excuter
les comandes;
-o Retourner un code prcisant l'tat cible
-f fic fic est le nom du fichier description utiliser
(makefile).
2012-2013

L'environnement de programmation

131

Programmer sous GNU/LINUX

Le configurateur MAKE

Utilisation des macros

La substitution de macro prcdant son nom entre () par $.


MISEAUPOINT = # rien: pas de mise au point
prog:def.p sp.o prog.o
pc -o prog prog.o def.o sp.o
def.o: def.p
pc -c $(MISEAUPOINT) def.p
sp.o:sp.p def.o
pc -c $(MISEAUPOINT) sp.p
prog.o:prog.p def.o
pc -c $(MISEAUPOINT) prog.p
On obtient un module prog pour la mise au point de 2 faons:
MISEAUPOINT = -g # dans le makefile
$ make MISEAUPOINT = -g # dans lappel de make
2012-2013

L'environnement de programmation

132

Programmer sous GNU/LINUX

Le configurateur MAKE

Macros prdfinies

$@
$*
$?
$<

nom complet du fichier cible ( faire)


nom du fichier cible sans prfixe;
liste des dpendants qui sont plus rcents que le fichier cible courant;
nom du fichier source associ une rgle implicite (suffixe du fichier cible);

.c.o :
gcc c $*.c
.c.o :
gcc c $<

$$@
n'a de sens que sur la ligne de dfinition de dpendances. Il se rfre
l'objet courant ($@) dfini dans l'entre.
Exemple de makefile
PASPROG = demo ex1 essai ex2
# obtention des excutables PASCAL
$(PASPROG) : $$@.p
pc -c $@ $*.p
# entre pour dtruire les xecutables
vider del :
rm -f $(PASPROG)
# entre pour recommencer tout: dtruire et refaire les excutables
re : vider $(PASPROG)

2012-2013

L'environnement de programmation

133

Compiler avec GCC


Le configurateur MAKE
Dboguer avec le Dbogueur GNU (GDB)
Documentation
Environnement dexcution
Gestion des erreurs
Ecrire et utiliser des Bibliothques

PROGRAMMER SOUS
GNU/LINUX
Maher SELLAMI

2012-2013

L'environnement de programmation
Unix/Linux

134

Programmer sous GNU/LINUX

Dboguer avec le Dbogueur GNU (GDB)

Introduction

Le dbogueur 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 Dbogage
compiler en activant les informations de
dbogage, utiliser l'option -g
% make
gcc -g
g++ -g
g++ -g
2012-2013

CFLAGS=-g
-c main.c
-c reciprocal.cpp
-o reciprocal main.o reciprocal.o
L'environnement de programmation

135

Programmer sous GNU/LINUX

Dboguer avec le Dbogueur GNU (GDB)

Lancer GDB

% gdb reciprocal
(gdb)
lancer votre programme au sein du dbogueur.
(gdb) run
Starting program: reciprocal
Program received signal SIGSEGV, Segmentation fault.
%%__%%strtol_internal (nptr=0x0, endptr=0x0, base=10, group=0)
at strtol.c:287
287
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:8
main a appel la fonction atoi avec un pointeur NULL ce qui est la source de l'erreur.

2012-2013

L'environnement de programmation

136

Programmer sous GNU/LINUX

Dboguer avec le Dbogueur GNU (GDB)

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:8
8
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 = 0x0
Cela confirme que le problme vient d'un pointeur NULL pass atoi.
Vous pouvez placer un point d'arrt 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 7
Starting program: reciprocal 7
Breakpoint 1, main (argc=2, argv=0xbffff5e4) at main.c:8
8
i = atoi (argv[1])
Vous remarquez que le dbogueur s'est arrt au niveau du point d'arrt.
2012-2013

L'environnement de programmation

137

Programmer sous GNU/LINUX

Dboguer avec le Dbogueur GNU (GDB)

Les commandes de GDB


Vous pouvez passer l'instruction se trouvant aprs
l'appel atoi en utilisant la commande next:
(gdb) next
9
printf ("L'inverse de %d est %g\n",
i, reciprocal (i));
Si vous voulez voir ce qui se passe l'intrieur de la
fonction reciprocal, utilisez la commande step,
(gdb) step
reciprocal (i=7) at reciprocal.cpp:6
6
assert (i != 0);
Vous tes maintenant au sein de la fonction reciprocal.
2012-2013

L'environnement de programmation

138

Compiler avec GCC


Le configurateur MAKE
Dboguer avec le Dbogueur GNU (GDB)
Documentation
Environnement dexcution
Gestion des erreurs
Ecrire et utiliser des Bibliothques

PROGRAMMER SOUS
GNU/LINUX
Maher SELLAMI

2012-2013

L'environnement de programmation
Unix/Linux

139

Programmer sous GNU/LINUX

Documentation

Pages de Manuel
Les pages de manuel sont divises en sections numrotes; pour les
programmeurs, les plus importantes sont celles-ci:
(1) Commandes utilisateur
(2) Appels systme
(3) Fonctions de la bibliothque standard
(8) Commandes systme/d'administration
% man sleep

la page de manuel de la fonction sleep de la bibliothque standard,


utilisez cette commande:
% man 3 sleep

Chaque page de manuel comprend un rsum 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 rsums
man -k mot-cl.
2012-2013

L'environnement de programmation

140

Programmer sous GNU/LINUX

Documentation

Info
Info contient des informations plus dtailles pour beaucoup
de composants fondamentaux du systme 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 bibliothque C GNU, avec beaucoup d'appels systme
gdb Le dbogueur GNU
emacs L'diteur de texte Emacs
info Le systme Info lui-mme
2012-2013

L'environnement de programmation

141

Compiler avec GCC


Le configurateur MAKE
Dboguer avec le Dbogueur GNU (GDB)
Documentation
Environnement dexcution
Gestion des erreurs
Ecrire et utiliser des Bibliothques

PROGRAMMER SOUS
GNU/LINUX
Maher SELLAMI

2012-2013

L'environnement de programmation
Unix/Linux

142

Programmer sous GNU/LINUX

Environnement dexcution

La Liste d'Arguments
Interaction Avec l'Environnement d'Excution

En lancant un programme, vous pouvez passer plus d'informations


en ajoutant un ou plusieurs mots aprs le nom du programme
Ce sont des arguments de ligne de commande ou liste d'arguments
du programme.
% ls -s /
le programme ls reoit de trois lments :
le nom du programme lui-mme, (ls)
Les second et troisime lment sont les deux arguments de ligne de
commande, -s et /.

La fonction main de votre programme peut accder la liste


d'arguments via ses paramtres argc et argv
argc, indique le nombre d'lments dans la liste.
argv, est un tableau de pointeurs sur des caractres (taille est argc,) qui
pointent vers les lments de la liste d'arguments, qui sont des chanes
termines par zro.

2012-2013

L'environnement de programmation

143

Programmer sous GNU/LINUX

Environnement dexcution

Utiliser argc et argv


arglist.c

#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 spcifi des arguments sur la ligne de commande ? */
if (argc > 1) {
/* Oui, les afficher. */
int i;
printf ("Les arguments sont :\n");
for (i = 1; i < argc; ++i)
printf (" %s\n", argv[i]);
}
return 0;
}

2012-2013

L'environnement de programmation

144

Programmer sous GNU/LINUX

Environnement dexcution

la Ligne de Commande GNU/Linux

Les options modifient le comportement du


programme, alors que les autres arguments
fournissent des entres
Les options peuvent prendre deux formes:
Les options courtes sont formes d'un seul tiret et
d'un caractre isol (-h)
Les options longues sont formes 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 prconiss dans


les standards de codage.
% info "(standards)User Interfaces"
2012-2013

L'environnement de programmation

145

Programmer sous GNU/LINUX

Environnement dexcution

Utiliser getopt_long

L'analyse des options de la ligne de commande est une corve.


La fonction, getopt_long, interprte la fois les options courtes et
longues.

Forme courte

Forme longue

Fonction

-h

--help

Affiche l'aide mmoire et quitte

-o nom fichier

--output nom fichier

Indique le nom du fichier de sortie

-v

--verbose

Affiche des messages dtaills

Pour utiliser getopt_long, vous devez fournir deux structures de donnes.

La premire est une chane 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'lments
struct option. Chaque lment correspond une option longue et dispose de quatre
champs :

2012-2013

le nom de l'option longue


1 si l'option prend un argument, 0 sinon;
NULL
un caractre qui indique l'option courte synonyme de l'option longue.
Tous les champs du dernier lment doivent tre zro.
L'environnement de programmation
146

Programmer sous GNU/LINUX

Environnement dexcution

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);
2012-2013

L'environnement de programmation

147

Programmer sous GNU/LINUX

Environnement dexcution

Interaction avec lenvironnement


Lenvironnement est une collection de paires
variable/valeur (sous forme de chaine de caractres)
dans une variable environ
char * getenv(const char *name)
obtenir la valeur de la variable denvironnement 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);
L'environnement de programmation
supprime
une variable
2012-2013
148

Programmer sous GNU/LINUX

Environnement dexcution

Afficher l'Environnement d'Excution print-env.c

#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-mme; utilisez plutt les


fonctions setenv et getenv.

2012-2013

L'environnement de programmation

149

Compiler avec GCC


Le configurateur MAKE
Dboguer avec le Dbogueur GNU (GDB)
Documentation
Environnement dexcution
Gestion des erreurs
Ecrire et utiliser des Bibliothques

PROGRAMMER SOUS
GNU/LINUX
Maher SELLAMI

2012-2013

L'environnement de programmation
Unix/Linux

150

Programmer sous GNU/LINUX

Gestion des erreurs

La gestion des erreurs : perror()

Un appel systme retourne une valeur diffrente de 0 si une erreur survient


errno, est une variable systme qui contient le code numrique de lerreur du
dernier appel systme, un appel systme qui choue modifie la valeur de errno
La liste globale d'erreurs sys_errlist[] indexe par errno peut tre utilise pour obtenir
le message d'erreur (errno <sys_nerr ).
perror(char *str) est une fonction standard C qui dcrit les erreurs des appels
systmes ( affiche str suivie par : et une description de la dernire erreur rencontre,
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 derreurs prdfinies

Exemples:
#define
EPERM
#define
ENOENT
#define
ESRCH
#define
EINSR
#define
EIO

2012-2013

1
2
3
4
5

/*
/*
/*
/*
/*

Not owner */
No such file or directory */
No such process */
Interrupted System call */
I/O error */

L'environnement de programmation

151

Programmer sous GNU/LINUX

Gestion des erreurs

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
perror(main);
errno=0; /* Manually reset error variable */
perror(main);
}
2012-2013

L'environnement de programmation

152

call */

Programmer sous GNU/LINUX

Gestion des erreurs

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

2012-2013

L'environnement de programmation

153

Programmer sous GNU/LINUX

Gestion des erreurs

assert
dtecter des conditions inattendues
assert(condition)

Le programme s'arrte si l'expression est fausse,


aprs avoir affich un message d'erreur (nom du
fichier, le numro 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);
}
2012-2013

L'environnement de programmation

154

Compiler avec GCC


Le configurateur MAKE
Dboguer avec le Dbogueur GNU (GDB)
Documentation
Environnement dexcution
Gestion des erreurs
Ecrire et utiliser des Bibliothques

PROGRAMMER SOUS
GNU/LINUX
Maher SELLAMI

2012-2013

L'environnement de programmation
Unix/Linux

155

Programmer sous GNU/LINUX

Les bibliothques statiques

Une archive (ou bibliothque statique) est une collection de fichiers objets
stocke dans un seul fichier objet (fichier lib sous Window)

Lorsque vous fournissez une archive lditeur 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 crer une archive en utilisant la commande ar.

Les fichiers archives utilisent lextension .a


$ ar cr libtest.a test1.o test2.o
combiner test1.o et test2.o dans une seule archive libtest.a

une bliothque un emplacement visible :


/usr/local/lib si la librairie est susceptible dtre utilise par plusieurs utilisateurs ;
~/lib si la librairie est susceptible dtre utilise par un seul utilisateur.
La variable LD_LIBRARY_PATH pour les bibliothques dynamiques

2012-2013

L'environnement de programmation

156

Programmer sous GNU/LINUX

Les bibliothques dynamiques

Diffrences avec les archives, ldition de


liens se fait pendant lexcution
la rduction de la taille d'un excutable,
la mise jour de la bibliothque sans
refaire ldition de liens
Les bibliothque partages (shared) ne
sont charges quune seule fois en
mmoire

2012-2013

L'environnement de programmation

157

Programmer sous GNU/LINUX

Les bibliothques dynamiques


Pour crer une bibliothque partage, compiler les objets avec
l'option -fPIC
% gcc -c -fPIC test1.c
L'option -fPIC indique au compilateur que vous allez utiliser
test1.o en tant qu'lment d'un objet partag.
Puis, vous combinez les fichiers objets au sein d'une
bibliothque partage, comme ceci:
% gcc -shared -fPIC -o libtest.so test1.o test2.o

L'option -shared indique l'diteur de liens de crer une


bibliothque partage au lieu d'un excutable ordinaire.
Les bibliothques partages utilisent l'extension .so, (shared
object),, le nom commence toujours par lib
Lier un programme une bibliothque partage (idem statique)
% gcc -o app app.o -L. -ltest
2012-2013

L'environnement de programmation

158

Introduction
Organisation logique
Organisation physique
Structuration du disque dur
Ralisation des fonctions daccs lmentaires
Scurit et Protection
Exemple: Le SGF dUNIX

4
O

LES SYSTMES DE GESTION


DE FICHIERS

2012-2013

Maher SELLAMI
L'environnement de programmation
Unix/Linux

159

Systmes de gestion de fichiers

Introduction

Fonctions dun SGF

Fichier
un objet qui contient un ensemble dinformation pour
conservation et utilisation dans un systme informatique
possde un nom qui permet de le dsigner
Fonctions daccs principales: lire, crire, ventuellement
excuter

SGF
Conservation des fichiers en mmoire secondaire
Implantation des fonctions daccs aux fichiers (ouvrir,
fermer, lire, crire, )
Assure scurit et protection: intgrit des informations et
respect des droits daccs
Gre laccs aux supports physiques
2012-2013

L'environnement de programmation

160

Systmes de gestion de fichiers

Introduction

Organisation dun SGF

Un SGF ralise la correspondance entre lorganisation logique et


lorganisation physique
Organisation logique
Vue par lutilisateur
Dtermin par condition de SGF
Commodit
gnralit

rpertoire={ descripteurs}
Nom externe

Organisation physique
Lie aux supports physiques
Dtermin par considration
de
conomie de places
Efficacit daccs
TABLES DIMPLANATION Physiques
Nom interne

Un SGF est organis de faon hirarchique : toute action


au niveau logique et interprt comme un ensemble
dactions au niveau physique
2012-2013

L'environnement de programmation

161

Systmes de gestion de fichiers

Introduction

Exemple
Programme :
Pour les lves
Lire (nom_lve);
Lire (note_examen);
crire (table);
fait
Sauvegarder
(mon_fichier)
toto

12

dupont

20

cesar

09

cloptre

15

Organisation logique : suite denregistrements


Programme
mon_fichier

instructions
Toto
12

Dupont
20

Csar
09

Cloptre
15

Organisation physique
Structure selon
Allocation

Programme
donne

100100010000

fichier_notes_nfa004
2012-2013

L'environnement de programmation
NFA003

162

Systmes de gestion de fichiers

Introduction

Schma de lorganisation dun SGF


Noms
externes et
locaux

Fonctions daccs
logique
Liaison des
noms
Interprtation
Interprtation
nom externes
nom locaux

Noms
internes

Ralisation des fonctions


daccs logique

Adresses
logiques

Ralisation des fonctions


daccs Physique

Adresses
physiques

2012-2013

Allocation
de
mmoire
secondaire

Interfaces
internes au SGF

Ralisation
E/S
physiques

L'environnement de programmation

Interface de
lutilisateur

163

Systmes de gestion de fichiers

Introduction

Schma de lorganisation dun SGF


La mise en correspondance entre organisation
logique et physique peut comporter une
organisation intermdiaire
adresses
Dsignatio adress
physique
n darticle e
s
logiqu
intermdiaire pour
des raisons defficacit
e

Fonctio
ns
daccs

Cette tape
peut tre
court-circuite (unix,windows, )
deux cas de figure :
Le S.E. connat la structure logique des fichiers (Macintosh, IBM,)
+ les possibilits sont plus importantes,
- le S.E. est plus complexe.
Le S.E. considre les fichiers comme des flots doctets (MS-DOS,
Unix,)
+ le systme est plus simple,
pas dassurance sur la nature des fichiers
2012-2013

L'environnement de programmation

164

Introduction
Organisation logique
Organisation physique
Structuration du disque dur
Ralisation des fonctions daccs lmentaires
Scurit et Protection
Exemple: Le SGF dUNIX

4
O

LES SYSTMES DE GESTION


DE FICHIERS

2012-2013

Maher SELLAMI
L'environnement de programmation
Unix/Linux

165

Systmes de gestion de fichiers

Organisation logique dun fichier

Organisation logique dun fichier


vue de lutilisateur de lensemble des donnes mmorises sur le
support de masse
Un type de donne (programmation)
Un ensemble de donnes groupes sous forme denregistrements
(articles)

fichier = { enregistremements }
Les fonctions daccs sont spcifiques de lorganisation logique
A chaque enregistrement correspond une adresse logique
enregistrement = {champs ou attributs}
Champs possde un nom et un type
LOrganisation logique dpent des contraintes auxquelles doivent
satisfaire les enregistrements
Ordre sur les articles
Restriction sur les valeurs des champs
Relations entre les attributs des enregistrements

2012-2013

L'environnement de programmation

166

Systmes de gestion de fichiers

Organisation logique dun fichier

Notion de fichier logique


En programmation, un fichier logique est un type de
donne sur lequel peuvent tre appliques des
oprations spcifiques.
Program toto;
fichier : file of
crer (fichier, mode)
ouvrir (fichier, mode)
fermer (fichier)
detruire (fichier)

2012-2013

Reprsentation du fichier interne au programme


Liaison via le SGF avec le fichier physique
Liaison mon_fichier avec
fichier_notes_nfa004
Rupture de la Liaison avec le fichier physique

L'environnement de programmation

167

Systmes de gestion de fichiers

Organisation logique dun fichier

Notion de fichier logique

Un fichier logique est un ensemble d'enregistrements,


dsign par un nom et accessible via des fonctions
d'accs.
Fichier logique :
Attributs du fichier
Type lement = record
nom-lve : char;
Nom logique (mon_fichier)
note : entier;
end;
fonctions d'accs
lire (enregistrement)
enregistrement
crire (enregistrement)
insrer (enregistrement)
Toto
Dupont Csar Cloptre
supprimer (enregistrement)
12

20

09

15

mon_fichier : file of element


2012-2013

Organisation dfinissant sa structure


logique : le mode daccs

L'environnement de programmation

168

Systmes de gestion de fichiers

Organisation logique dun fichier

Fichier mode d'accs squentiel


Les enregistrements du fichier ne peuvent tre accds
que les uns la suite des autres.
- Ouverture du fichier : positionne sur le premier enregistrement
- Opration de lecture : dlivre l'enregistrement courant et se
positionne sur le suivant
- Opration dajout : obligatoirement en fin de fichier
Accs l'enregistrement 3
Toto
12

Dupont
20

Csar
09

Lecture 1 Lecture 2 Lecture 3

2012-2013

il faut lire d'abord

Cloptre
l'enregistrement 1,
15

puis l'enregistrement 2

Ajout
Fin de fichier

L'environnement de programmation

169

Exemple : les fichiers dans le langage


pascal
program acces_fichiers;
Systmes de gestion de fichiers

enrg_note = record

Organisation logique dun fichier

nom_eleve : string;
note : integer;
end;

t_fichier_notes = file of enrg_note;


var
mon_fichier : t_fichier_notes;

Enregistrement

Dclaration fichier logique

Begin
assign(mon_fichier,fichier_notes_nfa004'); Mise en correspondance
reset ( mon_fichier ); (* ouvrir le fichier *)
while not eof ( nom_fichier ) do
(* parcourir les lments du fichier accs squentiel*)

begin
get ( mon fichier );
end;
(* accs relatif : aller llment 6 *)

seek (mon_fichier,6) ;
get (mon_fichier) ;
(* fermeture automatique en fin de programme *)

End.
2012-2013

L'environnement de programmation

170

10

Exemple : les fichiers dans le langage


CMain() {
Systmes de gestion de fichiers

Organisation logique dun fichier

struct note{ char nom_eleve[30];


float note;
} ;

Enregistrement

Dclaration fichier logique


Struct note enrg_note;
FILE *mon_fichier;
Mise en correspondance
mon_fichier=fopen("fichier_notes_nfa004" , "r");
while (fread(&enreg_note,sizeof(struct note),1,
mon_fichier) do
(* parcourir les lments du fichier accs squentiel*/

{
....
}
....
/* accs relatif : aller llment 6 */
fseek(mon_fichier, sizeof(struct note)*6L,0);
....
/* fermeture automatique en fin de programme *)/

}
2012-2013

L'environnement de programmation

171

10

Systmes de gestion de fichiers

Organisation logique dun fichier

Fichier mode d'accs direct

Les fonctions daccs sexpriment en


fonction des attributs
Les attributs correspondent aux valeurs des
diffrents champs
Une cl est tout attribut dun enregistrement
dont la valeur peut servir accder
lenregistrement
2 organisations possibles:
Cl unique
Cls multiples
2012-2013

L'environnement de programmation

172

Systmes de gestion de fichiers

Organisation logique dun fichier

Accs direct: cl unique


Chaque article comporte une seule cl qui lidentifie
cle_trouve=recherche(cl, al) dlivre ladresse logique
al correspondant cl si cle_trouve est vrai
La fonction recherche sert raliser un jeu de
fonctions daccs direct:
lire (cl, info)
ajouter(cl, info)
supprimer(cl, info)
modifier(cl, info)

2 classes de mthodes :
Adressage dispers (hash code)
Fichiers indexs
2012-2013

L'environnement de programmation

173

Systmes de gestion de fichiers

Organisation logique dun fichier

Accs direct:Adressage dispers

On se donne f une fonction de


dispersion qui est dfinie :
0 f(c) nb denregistrements
si c1 = c2, alors f (c1) = f (c2),

On appel collision, lexistence de deux cls


c1 et c2 telles que c1 c2 et f (c1) = f (c2 ).
Inconvnients :
- il est difficile de choisir f,
- sur certains systme perte de
place,
- rorganisation priodique du
2012-2013

L'environnement de programmation

174

Systmes de gestion de fichiers

Organisation logique dun fichier

Adressage direct par indexation

Ensemble de cls suppos ordonn


La relation cl-adresse logique est
matrialise par un index

La recherche dun enregistrement ncessite en


moyenne
- n/2 lectures si lindex nest pas tri,
- log2 n lectures si lindex est tri.
2012-2013

L'environnement de programmation

175

Systmes de gestion de fichiers

Organisation logique dun fichier

Adressage direct : cls multitples


Plusieurs cls pour dsigner un article
Une valeur de cl peut correspondre plusieurs
articles

Une cl primaire est une cl dont la valeur


dtermine de faon unique un enregistrement
Technique de base est lorganisation multi-liste
On utilise un index par cl

2012-2013

L'environnement de programmation

176

Systmes de gestion de fichiers

Organisation logique dun fichier

Adressage direct : cls multitples

dex des rfrennces


A135

200

B436

500

R211

200

R322

100

X007

750

Adresses
logiques

Pointeur auteurs
Pointeur diteurs

100

ndex des auteurs

JACQUES

500

PAUL

100

200

500

ndex des diteurs

ARTHAU
D

200

DUNOD

500

PUG

750

2012-2013

750

R211

JACQUE

PUG

<>

900

Organisation multilistes pour un fichier cls multiples


L'environnement de programmation

177

Introduction
Organisation logique
Organisation physique
Structuration du disque dur
Ralisation des fonctions daccs lmentaires
Scurit et Protection
Exemple: Le SGF dUNIX

4
O

LES SYSTMES DE GESTION


DE FICHIERS

2012-2013

Maher SELLAMI
L'environnement de programmation
Unix/Linux

178

Systmes de gestion de fichiers

Organisation physique dun fichier

Problme

Comment allouer lespace disque aux fichiers de


sorte que:
Cet espace disuqe soit bien utilis
Laccs aux fichiers soit rapide

2012-2013

L'environnement de programmation

179

11

Systmes de gestion de fichiers

Organisation physique dun fichier

Structure du disque dur


Adresse physique (secteur) : ntte, ncylindre,nsecteur
Cylindre : ensemble des pistes accessibles
sans dplacement des ttes
Moteur
tte de lecture/criture (face)

plateau

Face : 20 1500 pistes

Piste : ensemble de secteurs (4 32)


Secteur : plus petite unit d'information accessible (32 4096 octets)

2012-2013

L'environnement de programmation

180

Alimentation

12

Systmes de gestion de fichiers

Organisation physique dun fichier

Allocation du disque : le bloc physique


Lunit dallocation 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 oprations de lecture et d'criture du SGF se font bloc par bloc

sect sect
Bloc 1

2012-2013

sect

sect
Bloc 2

Bloc 3

L'environnement de programmation

Bloc 4

181

13

Systmes de gestion de fichiers

Organisation physique dun fichier

Implantation physique
Programme :
Pour les lves
Lire (nom_lve);
Lire (note_examen);
crire (table);
fait
Sauvegarder
(mon_fichier)

2012-2013

totot

12

dupont

20

cesar

09

cloptre

15

Programme

Fichier logique : suite denregistrements


instructions
mon-_fichier
Toto
12

Dupont
20

Csar Cloptre
09
15

Programme
donne
Fichier physique
Ensemble de
00110
blocs physiques
Fichier_notes_nfa
004
L'environnement de programmation

182

14

Systmes de gestion de fichiers

Organisation physique dun fichier

Implantation physique
Un fichier physique est constitu dun
ensemble de blocs physique.
Il existe plusieurs mthodes dallocation des
blocs physiques :
allocation contigu (squentielle simple)
allocation par zones

allocation par blocs chains


allocation indexe
il faut grer et reprsenter l'espace libre

2012-2013

L'environnement de programmation

183

Systmes de gestion de fichiers

Organisation physique dun fichier

Allocation contigu
Un fichier occupe un ensemble de blocs contigus sur le
disque
Bien adapt au mthodes d'accs squentielles
et directes
Difficults :
-Fragmentation de la mmoire
-extension du fichier

fichier 1 : adresse bloc 1, longueur 3 blocs


fichier 2 : adresse bloc 13, longueur 5 blocs
2012-2013

L'environnement de programmation

184

16

Systmes de gestion de fichiers

Organisation physique dun fichier

Allocation contigu
cration d'un nouveau fichier : il faut allouer un nombre de blocs
suffisants dpendant de la taille du fichier
prvoir cette taille
trouver un trou suffisant (First Fit, BestFit)

Fichier 4 : 6 blocs

Fichier 3 : 4 blocs

fichier 1 : adresse bloc 1, longueur 3 blocs


fichier 2 : adresse bloc 13, longueur 5 blocs
2012-2013

L'environnement de programmation

185

17

Systmes de gestion de fichiers

Organisation physique dun fichier

Allocation contigu
fragmentation de la mmoire: ramasse miette

Compactage
Fichier 4 : 6 blocs

2012-2013

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

L'environnement de programmation

186

18

Systmes de gestion de fichiers

Organisation physique dun fichier

Allocation contigu
Etendre le fichier 1 avec un bloc de donnes

Dplacer les
fichiers
COUTEUX !

fichier 1 : adresse bloc 1,


longueur 3 blocs

2012-2013

fichier 1 : adresse bloc 1,


longueur 4 blocs

Gnrer une erreur

L'environnement de programmation

187

19

Systmes de gestion de fichiers

Organisation physique dun fichier

Allocation par zones


Un fichier est constitu de plusieurs zones physiques
disjointes (exemple systme MVS IBM) :
- une zone primaire alloue la cration
- des zones secondaires
(extensions) alloues au fur et
mesure des besoins
- Chaque zone est alloue de faon indpendante
ZP

ZS
ZS

Zone
Primaire
( 3 blocs)
Zone
Secondaire
(2 blocs)
2012-2013

L'environnement de programmation

ZS

I
I
I

Problmes prcdents attnus


mais toujours existants
188

20

Systmes de gestion de fichiers

Organisation physique dun fichier

Allocation par bloc chaine


Un fichier est constitu comme une liste chaine de
blocs physiques, qui peuvent tre disperss n'importe
o.

fichier 1

fichier 2

Extension simple du fichier : allouer un


nouveau bloc et le chainer au dernier
Pas de fragmentation
Difficults :
-mode squentiel seul
-le chanage du bloc suivant
occupe de la place dans un bloc
Adresse/ n bloc suivant

donnes
2012-2013

L'environnement de programmation

189

21

Allocation par bloc chaine :


variante
Systmes de gestion de fichiers

Organisation physique dun fichier

N bloc

Une table d'allocation des


fichiers (File allocation table
- FAT) regroupe l'ensemble
des chainages.
(exemple systmes windows)

NULL

Libre
3

fichier 1

Libre

NULL

Libre

11
12
13

fichier 2

14
15

Bloc non allou

Fin de fichier

7
Libre

N de Bloc suivant
Allou pour le
fichier

15
Libre
3

16

Libre

17

13

FAT
2012-2013

L'environnement de programmation

190

22

Systmes de gestion de fichiers

Organisation physique dun fichier

Allocation indexe
Les adresses des blocs physiques constituant un fichier sont
ranges dans une table appele index, elle-mme contenue dans
un ou plusieurs blocs disque
512 / 4 = 128 entres

fichier 2

fichier 1

bloc d'index

2012-2013

-+ Supporte bien laccs direct


- gaspillage de place dans le bloc dindex
-- taille maximale du fichier dpend de la taille
-de lindex
L'environnement de programmation
191

23

Allocation indexe : la solution


Unix/Linux
Systmes de gestion de fichiers

Accs direct
Accs direct

Accs direct
1 indirection

10
11
12

Organisation physique dun fichier

2 indirections
3 indirections

Table d'allocation
13 entres
En mmoire centrale
2012-2013

Sur disque
L'environnement de programmation

192

24

Allocation indexe : la solution


Unix/Linux
Systmes de gestion de fichiers

Organisation physique dun fichier

Bloc = 1024 octets

Accs direct
Accs direct

10 blocs de donnes
9
10
11
12

Accs direct
1 indirection

INDIRECT_1

256 blocs de donnes

2 indirections
3 indirections

INDIRECT_2_1

Table d'allocation
13 entres

256 blocs de donnes


INDIRECT_2_2

INDIRECT_2

En mmoire centrale

Sur disque

4 blocs de donnes

2012-2013

L'environnement de programmation

193

29

Systmes de gestion de fichiers

Organisation physique dun fichier

Gestion de l'espace libre


Le systme maintient une liste d'espace libre, qui mmorise tous
les blocs disque libres (non allous)
- Cration d'un fichier : recherche dans la liste d'espace libre de
la quantit requise d'espace et allocation au fichier : l'espace
allou est supprim de la liste
- Destruction d'un fichier : l'espace libr est intgr la liste
d'espace libre

Il existe diffrentes reprsentations possibles de l'espace libre


vecteur de bits
liste chaine des blocs libres
2012-2013

L'environnement de programmation

194

30

Systmes de gestion de fichiers

Organisation physique dun fichier

Gestion de l'espace libre par un vecteur de


bits
La liste d'espace libre est reprsente par un vecteur
binaire, dans lequel chaque bloc est figur par un bit.
- Bloc libre : bit 1
- Bloc allou : bit 0

01010101110101010111

Facilit de trouver n blocs libres conscutifs


Systme Macintosh

2012-2013

L'environnement de programmation

195

31

Gestion de l'espace libre par liste


chaine
Systmes de gestion de fichiers

Organisation physique dun fichier

La liste d'espace libre est reprsente par une liste


chaine des blocs libres
Liste des blocs libres

Parcours de la liste
couteux
Difficile de trouver un
groupe de blocs libres
Variante par comptage

2012-2013

L'environnement de programmation

196

32

Systmes de gestion de fichiers

Organisation physique dun fichier

Gestion de l'espace libre par liste


chaine:
Le premieravec
bloc libre comptage
dune zone libre contient ladresse du premier
variante

bloc libre dans la zone suivante et le nombre de blocs libres dans la


zone courante.

Liste des blocs libres

Liste des blocs libres


1

3
1
1

2012-2013

L'environnement de programmation

197

33

Systmes de gestion de fichiers

Organisation physique dun fichier

Gestion de l'espace libre


N bloc

La FAT intgre
directement la
gestion de cet
espace.

NULL

Libre
3

fichier 1

Libre

NULL

Libre
7

11

13

fichier 2

14
15
16
17

Bloc non allou

12

Fin de fichier

N de Bloc suivant
Allou pour le
fichier

Libre
15
Libre
3
Libre
13

FAT
2012-2013

L'environnement de programmation

198

34

Introduction
Organisation logique
Organisation physique
Structuration du disque dur
Ralisation des fonctions daccs lmentaires
Scurit et Protection
Exemple: Le SGF dUNIX

4
O

LES SYSTMES DE GESTION


DE FICHIERS

2012-2013

Maher SELLAMI
L'environnement de programmation
Unix/Linux

199

Systmes de gestion de fichiers

Structuration du disque dur

Structuration du disque dur


Trois oprations pour structurer le disque dur :
- Formatage physique
- Formatage logique
- Partitionnement

2012-2013

L'environnement de programmation

200

45

Systmes de gestion de fichiers

Structuration du disque dur

Formatage physique
Le formatage physique ou de bas niveau permet de
diviser la surface du disque en lments basiques.
Il prpare le disque accueillir des
donnes
Adresse (HCS, head cylinder sector)
cylindre
plateau

Face : 20 1500 pistes

Piste : ensemble de secteurs


Secteur : 512 octets
Adresse HCS (3, 1, 30)
2012-2013

L'environnement de programmation

201

46

Systmes de gestion de fichiers

Structuration du disque dur

Formatage logique/ Partitionnement


Le formatage logique ou de haut niveau cre un systme
de gestion de fichiers sur le disque.
- Le type de SGF install dpend du systme dexploitation. Il
forme les clusters ou blocs
- Il est possible dinstaller plusieurs types de SGF sur un disque
grce au partitionnement du disque..

sgf1

sgf2

sgf3

disque

partition
2012-2013

partition

L'environnement de programmation

partition
202

47

Systmes de gestion de fichiers

Structuration du disque dur

Partitionnement
Une partition est une partie d'un disque dur destine accueillir un
SGF. Elle est identifie par un nom appel nom de volume . Elle
est constitue dun ensemble de cylindres contigs.
Un disque peut accueillir 4 partitions diffrentes. Une seule est active
la fois.

Programme de
dmarrage (446 o)

Table des
partitions

Partition 1 FAT 16
Partition 2 Linux
Partition 3 FAT 32
Partition 4 NTFS
2012-2013

L'environnement de programmation

Premier secteur (cylindre 0,


secteur 1, face 0)
Master Boot Record
4 descripteurs de partition
4 * 16 octets
Adresse HCS premier secteur
Adresse HCS dernier secteur
Nombre de secteurs
type
active
203

48

Systmes de gestion de fichiers

Structuration du disque dur

Organisation de partition : LINUX

Bloc boot Super bloc Table


des inodes

Blocs disques

Descripteur des
fichiers

1er secteur
contient lamorage du
SE
Taille du SGF
et description de la
blocs libres chains
partition
Descripteurs de fichiers
(inodes) libres

No
m
droits
Taille

inode
2012-2013

L'environnement de programmation

204

49

Systmes de gestion de fichiers

Structuration du disque dur

Organisation de partition : DOS

Secteur
d'amorage

2012-2013

FAT

Rpertoire

Copie de
la FAT

1
2
3
4
5
6
7

NULL
L
NULL
L
L
L
1

11
12
13
14
15
16
17

7
L
15
L
3
L
13

20

locs de donnes
racine
Fichier 1

L'environnement de programmation

ext

205

taille

50

Systmes de gestion de fichiers

Structuration du disque dur

Partitions

2012-2013

L'environnement de programmation

206

51

Systmes de gestion de fichiers

Structuration du disque dur

Dmarrage de lordinateur
1. Lutilisateur appuie sur le bouton dalimentation
de lunit centrale
2. Une fois le courant stabilis, le processeur dmarre et
excute le code du BIOS stock dans la ROM une
adresse prdfinie
3. Le BIOS excute une squence de vrification des
composants (mmoire, vido, priphriques de base)
(POST : Power-OnSelf Test)
4. Le BIOS accde au CMOS pour lire la configuration
matrielle de la machine (date, heure, priphrique de
masse contenant le systme dexploitation).
Programme de
dmarrage (446 o)

bootstrap

2012-2013

Table des
partitions

5. Le BIOS accde au MBR du disque ; il charge en


mmoire centrale le programme de dmarrage

6. Le programme de dmarrage dtermine la partition


active et transfert le contrle au bootstrap de la partition
active
pour charger le systme dexploitation
L'environnement de programmation

207

52

Introduction
Organisation logique
Organisation physique
Structuration du disque dur
Ralisation des fonctions daccs lmentaires
Scurit et Protection
Exemple: Le SGF dUNIX

4
O

LES SYSTMES DE GESTION


DE FICHIERS

2012-2013

Maher SELLAMI
L'environnement de programmation
Unix/Linux

208

Systmes de gestion de fichiers

Ralisation des fonctions daccs lmentaires

Interfaces dappel du SGF


Programme Utilisateur

Interprteur de commandes

Appels
systme
open (fichier)
chdir( /home)

open chdir

commandes
> cd /home

Interface dappel
(bibliothque systme)

_open
_chdir

SE : ensemble
de fonctions

Systme de gestion de fichiers

2012-2013
Jolle Delacroix

L'environnement de programmation

209

62

Systmes de gestion de fichiers

Ralisation des fonctions daccs lmentaires

Les commandes
Quelques commandes du SGF:
- liste du rpertoire
(ls, dir)
- changement de rpertoire
(cd)
- cration rpertoire
(mkdir)
- suppression rpertoire (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

2012-2013
Jolle Delacroix

L'environnement de programmation

210

63

Systmes de gestion de fichiers

Ralisation des fonctions daccs lmentaires

Les appels systmes


Quelques appels systmes du SGF:
-ouverture fichier (open)
-cration de fichier (creat)
- fermeture fichier (close)
et
- Lecture
(read)
-criture
(write)

2012-2013
Jolle Delacroix

L'environnement de programmation

211

66

Systmes de gestion de fichiers

Ralisation des fonctions daccs lmentaires

Ouverture de fichier
Ouverture fichier

MC
Fich

descripteur

Fich = OPEN (nom_fichier, L/E)


L'ouverture
repertoire
- vrifie l'existence du fichier dans le rpertoire du disque
- vrifie la compatibilit des types d'accs au fichier (lecture/criture)
- transfert les lments de lentre de rpertoire dans le descripteur
correspondant en mmoire
- renvoie au programme un index Fich qui dsigne le descripteur de
fichier (nom local)
Le descripteur est conserv et mis jour en mmoire jusqu' la fermeture
2012-2013
Jolle Delacroix

L'environnement de programmation

212

67

Systmes de gestion de fichiers

Ralisation des fonctions daccs lmentaires

Lecture de fichier
MC

Lecture
fichier

enrg

cache

READ (Fich, enrg, nenregistrement)

Fich
enrg

descripteur

bloc disque

La lecture d'un fichier ncessite:


-pointeur du descripteur
-l'adresse mmoire de la zone rceptrice de l'enregistrement
-n de l'enregistrement qui peut:
- . ne pas exister si lecture squentielle
. tre le rang si accs direct
Il faut dterminer l'adresse du bloc physique contenant l'enregistrement lire
Les donnes lues sont transfres dans un tampon mmoire

2012-2013
Jolle Delacroix

L'environnement de programmation

213

68

Systmes de gestion de fichiers

Ralisation des fonctions daccs lmentaires

Lecture fichier : Unix


read(Fich, enrg, taille_enrg_octets)
Un fichier Unix est une suite d'octets sans structure, accessibles de
manire squentielle.
Le SGF maintient pour chaque fichier un offset qui pointe sur l'octet courant
dans le fichier.
Une opration de lecture spcifie combien d'octets doivent tre lus
(taille_enrg_octets).
La lecture s'effectue depuis la position courante de l'offset et dlivre les
taille_enrg_octets octets suivants.

Lecture 1

Lecture 2

Taille_enrg_octets

2012-2013
Jolle Delacroix

Taille_enrg_octets
Open
offset = 0
Read (fich, enrg, taille_enrg_octets)
offset = offset + taille_enrg_octets

L'environnement de programmation

214

69

Systmes de gestion de fichiers

Ralisation des fonctions daccs lmentaires

Lecture
fichier : Unix
Lecture
fichier
: Unix READ (fich, enrg, taille_enrg_octets)
Une opration de lecture spcifie combien d'octets doivent tre lus
(taille_enrg_octets).
La lecture s'effectue depuis la position courante de l'offset et dlivre les
taille_enrg_octets octets suivants.
Il faut dterminer quel bloc les octets lire appartiennent, et lire ce bloc
Bloc 0,1,2

Bloc 3

Fich
offset
Open
offset = 0

Taille_enrg_octets
Read (fich enrg, taille_enrg_octets)
offset = offset + taille_enrg_octets

inode
2012-2013
Jolle Delacroix

L'environnement de programmation

215

70

Systmes de gestion de fichiers

Ecriture fichier

Ralisation des fonctions daccs lmentaires

Ecriture fichier

WRITE (fich, tampon, nenregistrement)


L'criture dans un fichier ncessite:
- pointeur du descripteur
- l'adresse mmoire de la zone mettrice de l'enregistrement
- n de l'enregistrement qui peut:
. ne pas exister si criture squentielle
. tre le rang si accs direct

Cette fonction met jour certains lments du descripteur ; elle


peut entrainer lallocation dun nouveau bloc au fichier.
Les donnes sont transfres du tampon mmoire vers le
fichier
2012-2013

L'environnement de programmation

216

78

Systmes de gestion de fichiers

Ralisation des fonctions daccs lmentaires

Fermeture du fichierFermeture fichier


CLOSE (fich)

La fermeture provoque:
transfert les lments du descripteur vers le
rpertoire sur le disque
Libration de la mmoire occupe par les
tampons

2012-2013

L'environnement de programmation

217

79

Introduction
Organisation logique
Organisation physique
Structuration du disque dur
Ralisation des fonctions daccs lmentaires
Scurit et Protection
Exemple: Le SGF dUNIX

4
O

LES SYSTMES DE GESTION


DE FICHIERS

2012-2013

Maher SELLAMI
L'environnement de programmation
Unix/Linux

218

Systmes de gestion de fichiers

Scurit et protection des fichiers

Protection des fichiers


Protection contre les dgts physiques
FIABILITE
Utilisation de diffrents types de redondance

Protection contre les accs inappropris

PROTECTION
liste daccs (droits d'accs)
2012-2013

L'environnement de programmation

219

83

Systmes de gestion de fichiers

Scurit et protection des fichiers

Protection contre les accs inappropris


Dfinition de droits d'accs
- lecture (r), criture (w), excution (x), destruction ...

A chaque fichier est associ une liste d'accs, spcifiant


pour chaque utilisateur, les types d'accs qui lui sont
autoriss

Annie
rx
Annie
r
2012-2013

Nicolas
r

Martine
rx

Nicolas Martine
rwx
rwx
L'environnement de programmation

Charles
rx
Charles
rwx
220

Louis fichA
rwx
Louis fichB
r
84

Systmes de gestion de fichiers

Scurit et protection des fichiers

Protection contre les accs inappropris


La liste d'accs peut tre longue et difficile grer
- dfinition de groupes auxquels sont associs des droits
- un utilisateur hrite des droits du groupe auxquels il appartient
G3 : Nicolas
G2 : Martine, Charles, Annie
G1 : Louis
Annie NicolasMartine
rx
r
rx

fichA
Louis
rwx

Charles
rx

Annie Nicolas MartineCharles


r
rwx
rwx
rwx

G3
r

fichB

Louis

G3
r

G2

G1
rx

G2

fichB

G1
rwx

rwx

G3 : Annie, Louis
G2 : Martine, Charles
G1 : Nicolas
2012-2013

L'environnement de programmation

221

fichA
rwx

85

Systmes de gestion de fichiers

Scurit et protection des fichiers

Protection contre les accs inappropris


Exemple Unix
- Dfinition de trois classes :
le propritaire : celui qui a cre 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
2012-2013

67 Dec 15 1998 essai.c


L'environnement de programmation

222

86

Protection contre les dgts


physiques
Systmes de gestion de fichiers

Scurit et protection des fichiers

Utilisation de la redondance interne :


l'information existe en double exemplaire : une version primaire, une
version secondaire
le systme maintient la cohrence entre les deux versions
exemple : Windows dispose de deux exemplaires de la FAT
Secteur
d'amorage

FAT

Copie de
la FAT

Rpertoire
racine

Blocs de donnes

primaire secondaire
Maintien de la cohrence entre les deux exemplaires
2012-2013

L'environnement de programmation

223

87

Systmes de gestion de fichiers

Scurit et protection des fichiers

Protection contre les dgts physiques


Utilisation de la redondance interne :
Des donnes supplmentaires appeles somme de contrle sont
ajoutes l'information qui permettent de vrifier la validit des
informations.
exemple : chaque secteur du disque comporte les donnes + une
somme de contrle. Cette somme de contrle permet de dtecter les
secteurs dfectueux.

donnes 100010001000

C
R
C

CRC (contrle de redondance cyclique) : fonction


applique aux donnes et calculant la somme de
contrle
2012-2013

secteur
1100

1000100010001100

Somme de contrle : inclut des lments


redondants par rapport aux donnes
permettant de dtecter les erreurs et les
rparer

L'environnement de programmation

224

88

Protection contre les dgts


physiques
Systmes de gestion de fichiers

Scurit et protection des fichiers

Utilisation de la redondance :
Les donnes sont dupliques sur plusieurs supports physique

Redondance par sauvegarde priodique complte ou incrmentale


Principes des disques RAID (Redundant Array of Independent Disk)

2012-2013

L'environnement de programmation

225

89

Protection contre les dgts


physiques
Systmes de gestion de fichiers

Scurit et protection des fichiers

Redondance par sauvegarde priodique :


sauvegarde complte : la totalit du SGF est dupliqu mme si les
fichiers n'ont pas t modifis
Cartouches
Sauvegarde tous les blocs
Toutes les nuits

Restauration tous les blocs


Dernire sauvegarde

2012-2013

L'environnement de programmation

226

90

Protection contre les dgts


physiques
Systmes de gestion de fichiers

Scurit et protection des fichiers

Redondance par sauvegarde priodique :


sauvegarde incrmentale : seuls les objets modifis depuis la
dernire sauvegarde sont dupliqus.
Cartouches
Sauvegarde tous les blocs
Dimanche nuit

Sauvegarde les blocs modifis


L, ma, me, je, ve, sa nuit

Restauration
dernire sauvegarde complte
Complte par les sauvegardes incrmentales
J-1

2012-2013

L'environnement de programmation

227

Trash jour J

91

Protection contre les dgts


physiques
Systmes de gestion de fichiers

Scurit et protection des fichiers

Principes des disques RAID :


Lunit de stockage est constitue de plusieurs disques durs
constituant une grappe.

Lecture/criture
RAID Niveau 1

RAID Niveau 4
Bloc de contrle = f (B1,B2,B3)
Bloc de contrle = f (B4,B5, B6)

B2

B1
B1 B1 B1
B2B2B2

Les donnes (blocs) sont dupliques


sur chaque disque
2012-2013

B1

B2 B3 BC
B5B4B6 BC

Les donnes (blocs) sont rpartis sur n-1 disques de la grappe


Le bloc n stocke une information redondante
des donnes permettant de les reconstituer en cas de perte

L'environnement de programmation

228

92

Introduction
Organisation logique
Organisation physique
Structuration du disque dur
Ralisation des fonctions daccs lmentaires
Scurit et Protection
Exemple: Le SGF dUNIX

4
O

LES SYSTMES DE GESTION


DE FICHIERS

2012-2013

Maher SELLAMI
L'environnement de programmation
Unix/Linux

229

Systmes de gestion de fichiers

Exemple: Le SGF dUNIX

Rappel

Un fichier est un flot doctets non structure, stocke sur une


mmoire auxiliaire.
Plusieurs sortes de fichiers:
les fichiers ordinaires;
les rpertoires;
les priphriques

Un fichier peut avoir plusieurs liens (noms)


Les caractristiques statiques d'un fichier sont stockes dans un
descripteur appel i-noeud:
le type de fichier (ordinaire, rpertoire, ...), taille, dates, UID-GID,
liens, la liste des blocs ,

Un rpertoire est un fichier particulier : c'est en fait un tableau


deux colonnes, nom, i-noeud.
2012-2013

L'environnement de programmation

230

Systmes de gestion de fichiers

Exemple: Le SGF dUNIX

Gestion des priphriques

Un priphrique est un fichier spcial qui possde 2 index:


majeur identifie les priphriques de mme type
Mineur identifie individuellement chaque priphrique

Un volume de stockage nest accessible que sil est mont


intgr le volume dans la racine du SGF (/)
La commande mount permet de relier une partition ou un
priphrique un rpertoire par lequel les donnes sont
accessibles.
mount -t iso9660 /dev/cdrom /media/cdrom
Le cdrom est accessible travers le rpertoire /media/cdrom

2012-2013

L'environnement de programmation

231

Systmes de gestion de fichiers

Exemple: Le SGF dUNIX

Fonctionnement du SGF UNIX

2012-2013

L'environnement de programmation

232

Systmes de gestion de fichiers

Exemple: Le SGF dUNIX

Les entes sortie de base


Les descripteurs de fichiers
Toute entre-sortie est une lecture ou une criture d'un fichier.

Avant d'entreprendre une opration de lecture ou d'criture, il


est ncessaire d'ouvrir le fichier (ou de le crer)
Le systme , retourne un entier non nul, appel nom local, qui
servira le dsigner.

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


rellement transfrs. Zro indique une fin de fichier, et -1 ,
une erreur (errno).
2012-2013

L'environnement de programmation

233

Systmes de gestion de fichiers

Exemple: Le SGF dUNIX

Les entes sortie de base


Exemple : version primitive de cat
/* copie son entre 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);
}
2012-2013

L'environnement de programmation

234

Systmes de gestion de fichiers

Exemple: Le SGF dUNIX

Les entes 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 dfinis 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 combins (OU) avec les bits prcdents:
O_NDELAY ouverture non bloquante (tubes ,fichiers spciaux);
O_APPEND criture uniquement en fin de fichier
O_CREAT cration 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'accs (cration seulement).
Cette valeur est modifie par le umask du processus : la vritable valeur
utilise est (mode & ~umask).
2012-2013

L'environnement de programmation

235

Systmes de gestion de fichiers

Exemple: Le SGF dUNIX

Les entes sortie de base


La cration de fichier
int creat(const char *pathname, mode_t droits)
creat, utilise pour crer de nouveau fichier ou pour en rcrire
d'anciens.
retourne un nom local utilis lors des oprations 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 dtruit un fichier dans lr systme de fichier.
2012-2013

L'environnement de programmation

236

Systmes de gestion de fichiers

Exemple: Le SGF dUNIX

Les entes sortie de base


L'accs alatoire lssek
off_t lseek(int fd, off_t deplacement, int
origine)
lseek permet de se dplacer 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 tte est place offset octets depuis le dbut du fichier.
SEEK_CUR La tte de lecture/criture est avance de deplacement octets.
SEEK_END La tte est place la fin du fichier plus deplacement octets.
La position courante devient deplacement, considr par rapport
l'origine.
lseek(fd, 0L, SEEK_END);
pour ajouter la fin de fichier
lseek(fd, 0L, SEEK_SET);
pour retourner au dbut du
fichier
pos = lseek(fd, 0L, SEEK_CUR); position courante
2012-2013

L'environnement de programmation

237

Systmes de gestion de fichiers

Exemple: Le SGF dUNIX

Les entes sortie de base

Duplication d'un descripteur de fichier


int dup(int oldfd);
int dup2(int oldfd, int newfd)
dup et dup2 crent une copie du descripteur
de fichier oldfd.
dup utilise le plus petit numro inutilis pour
le nouveau descripteur.
dup2 transforme newfd en une copie de
oldfd, fermant auparavant newfd si besoin est.
d=creat("toto", 0666);
close((2);
dup(d);close(d);
2012-2013

redirige la sortie standard


derreur sur le fichier toto.
L'environnement de programmation

238

Systmes de gestion de fichiers

Exemple: Le SGF dUNIX

Les rpertoires

Un rpertoire dcrit lassociation entre le nom de fichier et le descripteur (i-nud) .

nom de
fichier
Une entre du rpertoire est dcrit par une structure

n d'inode

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 */
}
Accs au rpertoire
struct dirent *readdir (DIR *dir)
readdir() renvoie l'entre suivante du flux rpertoire, NULL a la fin du rpertoire
DIR *opendir (const char *name);
opendir() ouvre un flux rpertoire correspondant au rpertoire name, et renvoie un pointeur
sur ce flux. Le flux est positionn sur la premire entre du rpertoire
2012-2013

L'environnement de programmation

239

Systmes de gestion de fichiers

Exemple: Le SGF dUNIX

Exemple : listdir.c Affiche le Contenu d'un Rpertoire


alits
EE

#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)
/* rpertoire spcifi sur la ligne de commande s'il y a lieu. */
dir_path = argv[1];
else /* Sinon, utilise le rpertoire courant. */
dir_path = ".";
strncpy (entry_path, dir_path, sizeof (entry_path)); /* Copie le chemin du rpertoire dans entry_path. */
path_len = strlen (dir_path);
if (entry_path[path_len - 1] != '/') {
/* Si le rpertoire 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);
/* Dmarre l'affichage du contenu du rpertoire. */
while ((entry = readdir (dir)) != NULL) {
/* Boucle sur les entres du rpertoire. */
const char* type;
/* chemin complet=rpertoire+nom de l'entre. */
strncpy(entry_path+path_len,entry->d_name,sizeof(entry_path)-path_len);
printf ("%s\n",entry_path);
}
closedir (dir);
return 0;
}

2012-2013

L'environnement de programmation

240

Systmes de gestion de fichiers

Exemple: Le SGF dUNIX

les inodes

Le descripteur de fichier, ou inode est dcrit dans une structure stat


(#include <sys/stat.h>)
struct stat
{ dev_t st_dev; priphrique du inode */
ino_t
st_ino; numro du inode */
ushort st_mode
type du fichier, attributs, rsum
short
st_nlink;
nombre de liens
ushort st-uid; numro du propritaire */
ushort st-gid; numro du groupe */
dev_t st_rdev; n de ressource pour fichier spcial */
off_t
st_size; taille du fichier en octets */
time_t st_atime;
date de dernier accs
time_t st_mtime; date de dernire modification
time_t st_ctime;
date de dernire modif. de caract
};
st_mode 15 11
10
9
8
0
type setuid setgid sticky r w x r w x r w x
2012-2013

L'environnement de programmation

241

Systmes de gestion de fichiers

Exemple: Le SGF dUNIX

les inodes
Accs au descripteur
int stat(const char *file_name, struct stat
*buf);
rcupre 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-mme
et non pas du fichier point par ce lien
2012-2013

L'environnement de programmation

242