Au menu aujourd’hui
1/52G´ en´ eralit´ es
I D´ eroulement du cours
I Architecture g´ en´ erale d’un syst` eme I Choix du cours : Unix et OCaml
I OCaml et le syst` eme d’exploitation Le syst` eme de fichiers
I Syst` eme de fichiers
I Op´ erations sur le syst` eme de fichiers
D´ eroulement du cours
Principes et Programmation des Syst` emes d’exploitation
3/52
Didier R´ emy
Chercheur ` a l’INRIA-Rocquencourt Email : Didier.Remy@inria.fr
URLs du cours :
http ://pauillac.inria.fr/˜remy/poly/system/
http ://www.enseignement.polytechnique.fr/profs/informatique/
Didier.Remy/system/
Objectifs du cours
4(1)/52Comprendre le fonctionnement du syst` eme.
I Comment sont stock´ ees les donn´ ees sur le disque ?
Comment fait-on pour agrandir un fichier ? de plusieurs gigas ? Pour d´eplacer un fichier dans la hi´erarchie ?
I Que se passe-t-il quand vous ex´ ecutez un programme ?
Qui lance votre programme ? Comment votre programme fait-il pour lire un fichier ?
I Comment pr´ eserver l’int´ egrit´ e du syst` eme quand votre programme plante ? quand la machine plante ?
Si votre programme prend feu, jusqu’o`u se propage l’incendie ?
I Que se passe-t-il quand vous imprimez un fichier ? ouvrez une fenˆ etre ? ou broutez la toile ?
I Comment vous redonner la main mˆ eme lorsqu’un programme boucle ? ´ equitablement ?
la programmation syst` eme.
Apprendre Illustrer quelques principes. Simplifier
I La programmation syst` eme est r´ eput´ ee difficile. I Nous tenterons de la rendre simple.
I En simplifiant souvant la r´ ealit´ e.
I Mais il est toujours possible de d´ etailler selon les besoins. . On expliquera les principes dans le cours.
. Pour utiliser un appel syst` eme, la documentation on-line ( man et OCaml ) suffisent.
. Pour comprendre tous les d´ etails d’une partie du syst` eme, il
faut un manuel Unix ou Linux.
Objectifs du cours
4(2)/52Comprendre le fonctionnement du syst` eme.
Apprendre la programmation syst` eme.
I Comment interagir avec le syst` eme d’exploitation ? (depuis un programme utilisateur)
I avec d’autres programmes tournant sur la mˆ eme machine ? I ... sur une machine distante ?
Illustrer quelques principes. Simplifier
I La programmation syst` eme est r´ eput´ ee difficile. I Nous tenterons de la rendre simple.
I En simplifiant souvant la r´ ealit´ e.
I Mais il est toujours possible de d´ etailler selon les besoins.
. On expliquera les principes dans le cours.
Objectifs du cours
4(3)/52Comprendre le fonctionnement du syst` eme.
Apprendre la programmation syst` eme.
Illustrer quelques principes.
I Modularisation
Interfaces bien d´ efinies entre des composants, ind´ ependemment de leur impl´ ementation.
I Architecture multi-couches
Statification des op´ erations complexes.
I Compromis entre efficacit´ e, simplicit´ e, et robustesse.
Simplifier
I La programmation syst` eme est r´ eput´ ee difficile. I Nous tenterons de la rendre simple.
I En simplifiant souvant la r´ ealit´ e.
I Mais il est toujours possible de d´ etailler selon les besoins . . On expliquera les principes dans le cours.
. Pour utiliser un appel syst` eme, la documentation on-line ( man et OCaml ) suffisent.
. Pour comprendre tous les d´ etails d’une partie du syst` eme, il
faut un manuel Unix ou Linux.
Objectifs du cours
4(4)/52Comprendre le fonctionnement du syst` eme.
Apprendre la programmation syst` eme.
Illustrer quelques principes.
Simplifier
I La programmation syst` eme est r´ eput´ ee difficile.
I Nous tenterons de la rendre simple.
I En simplifiant souvant la r´ ealit´ e.
I Mais il est toujours possible de d´ etailler selon les besoins.
. On expliquera les principes dans le cours.
Fonctionnement du cours
5(1)/529 Cours + 9 TDs, calendrier sur la page du cours.
Pr´ esence n´ ecessaire en TD comme en cours sauf exception,
mais l’exception ne doit pas ˆ etre la r` egle
(mˆ eme si ce n’est pas la ligne politique de l’´ Ecole...)
I Ce qui est dit en cours est suppos´ e connu de tous (tenez-vous inform´ es si vous ˆ etes absents).
I Sans surprise, mais exp´ erimentalement, ceux qui
d´ ecrochent sont aussi ceux qui sont absents en cours ou en TD.
I On ne refait pas le cours en TD pour les absents.
Les questions sont les bienvenues
I N’h´ esitez pas, pendant le cours.
I Si vous d´ ecrochez pendant le cours, posez des questions ` a la fin du cours ou pendant les TDs.
Commentaires/Suggestions sur le cours
(format, rapidit´ e, etc.)
I N’h´ esitez pas, apr` es le cours.
I Directement, ou en passant par vos d´ el´ egu´ es.
I N’attendez pas la fin du trimestre.
Fonctionnement du cours
5(2)/529 Cours + 9 TDs, calendrier sur la page du cours.
Pr´ esence n´ ecessaire en TD comme en cours sauf exception,
mais l’exception ne doit pas ˆ etre la r` egle
(mˆ eme si ce n’est pas la ligne politique de l’´ Ecole...)
Les questions sont les bienvenues
I N’h´ esitez pas, pendant le cours.
I Si vous d´ ecrochez pendant le cours, posez des questions ` a la fin du cours ou pendant les TDs.
Commentaires/Suggestions sur le cours
Evaluation ´
6/52Un examen ´ ecrit, portant sur l’ensemble du cours th´ eorique (principes) et pratique (programmation).
Les notes de cours pourront ˆ etre interdites pour tout ou une partie de
l’examen.
Le Projet de majeure
7/52Pour ceux qui le choisissent en syst` eme
C’est une autre ´ evaluation, ind´ ependante.
G´ en´ eralit´ es
Rˆ oles du syst` eme d’exploitation
9(1)/52Int´ eragir avec le monde ext´ erieur
I Un programme calcule une fonction math´ ematique.
I Au minimum, il vous faut lui donner des entr´ ees (au clavier, par le r´ eseau), lire le r´ esultat (` a l’´ ecran, sur papier, etc.)
Effectuer les tˆ aches de bas niveau
Rˆ oles du syst` eme d’exploitation
9(2)/52Int´ eragir avec le monde ext´ erieur Effectuer les tˆ aches de bas niveau
I Int´ eraction avec les p´ eriph´ eriques
I Pas besoin de programmer le protocole d’int´ eraction pour imprimer un fichier ou se connecter par t´ el´ ephone.
Prot´ eger la machine
Cacher les d´ etails de votre machine
Partager la machine
Rˆ oles du syst` eme d’exploitation
9(3)/52Int´ eragir avec le monde ext´ erieur Effectuer les tˆ aches de bas niveau Prot´ eger la machine
I Contre des ordres corrects non voulus.
(effacer tout le disque par exemple)
I Contre des ordres incorrects envoy´ es aux p´ eriph´ eriques.
I Au pire, votre programme plante, pas la machine.
Rˆ oles du syst` eme d’exploitation
9(4)/52Int´ eragir avec le monde ext´ erieur Effectuer les tˆ aches de bas niveau Prot´ eger la machine
Cacher les d´ etails de votre machine
L’interface syst` eme
I donne l’illusion que toutes les machines sont identiques.
I rend les programmes (relativement) portables.
Partager la machine
Rˆ oles du syst` eme d’exploitation
9(5)/52Int´ eragir avec le monde ext´ erieur Effectuer les tˆ aches de bas niveau Prot´ eger la machine
Cacher les d´ etails de votre machine Partager la machine
Le syst` eme d’exploitation donne l’illusion que I le programme tourne seul sur la machine.
I l’utilisateur est seul sur la machine.
R´ esum´ e (partiel)
10(1)/52Processus Syst` eme
Utilisateurs Taches Ressource Processeurs
u
1.. .
u
ip
1.. . p
2.. .
p
3.. . p
jR
1R
2R
3.. .
R
kP
1P
21234 21314342
A quoi ¸ ` ca ressemble ?
11(1)/52Une baguette magique
I C’est votre vision jusqu’aujourd’hui :
I Vous faites, sans le savoir, appel au syst` eme, qui vous r´ epond comme par magie, pour :
lire un caract` ere, cr´ eer un fichier, lire un fichier, etc.
I Mais aussi, sans le demander vous ˆ etes sous le contrˆ ole du syst` eme :
c’est le syst` eme qui lance votre proramme, alloue la
m´ emoire pour le faire tourner, l’interrompt pour entrelacer l’ex´ ecution d’autres programmes.
Une boˆ ıte noire
Un oignon
A quoi ¸ ` ca ressemble ?
11(2)/52Une baguette magique Une boˆ ıte noire
Programmes utilisateurs Syst` eme
d’exploitation
I Vue de l’ext´ erieure = programmation avec le syst` eme
Un oignon
En fait
I c’est une architecture complexe, I qui doit ˆ etre robuste, portable, etc.
I Un bon exemple de programmation de syst` emes.
A quoi ¸ ` ca ressemble ?
11(3)/52Une baguette magique Une boˆ ıte noire
Programmes Utilisateurs Syst` eme
d’exploitation
I Vue de l’int´ erieur = programmation du syst` eme
Un oignon
A quoi ¸ ` ca ressemble ?
11(4)/52Une baguette magique Une boˆ ıte noire
Programmes Utilisateurs Syst` eme
d’exploitation
I Entre les deux, une interface rigoureusement d´ efinie : . c’est le jeu d’appels syst` emes
. d´ ecrits avec leur s´ emantique pr´ ecise.
Comportement de chaque appel syst` eme y compris en cas
d’anomalie, avec la liste compl` ete des erreurs qui peuvent ˆ etre retourn´ ees.
Un oignon
En fait
I c’est une architecture complexe, I qui doit ˆ etre robuste, portable, etc.
I Un bon exemple de programmation de syst` emes.
A quoi ¸ ` ca ressemble ?
11(5)/52Une baguette magique Une boˆ ıte noire
Un oignon
cd
Programmes utilisateurs mkdir
ls
gcc date
Noyau hardware
tar ed Outils
ld
mount
Autres applications
sh ftp
Services
A quoi ¸ ` ca ressemble ?
11(6)/52Une baguette magique Une boˆ ıte noire
Un oignon
I Beaucoup de couches empil´ ees ou juxtapos´ ees.
I Seules les couches profondes d´ ependent de la machine.
I Le plus petit possible : les couches qui peuvent ˆ etre mises ` a l’ext´ erieure ne font pas partie du syst` eme (diminue le noyau critique donc augmente la robustesse)
I Ne restent que celles qui sont essentielles pour la sˆ uret´ e ou l’efficacit´ e.
En fait
I c’est une architecture complexe, I qui doit ˆ etre robuste, portable, etc.
I Un bon exemple de programmation de syst` emes.
A quoi ¸ ` ca ressemble ?
11(7)/52Une baguette magique Une boˆ ıte noire
Un oignon
En fait
I c’est une architecture complexe, I qui doit ˆ etre robuste, portable, etc.
I Un bon exemple de programmation de syst` emes.
Programmes utilisateurs
Librairies Niveau utilisateur
trappes Niveau Noyau
Interface syst`eme
Syst`eme de fichiers Caches Charact`eres Bloc
Pilotes
Contrˆole des processus Communicatinon
inter-processsus Ordonnancement
Gestion m´emoire
Contrˆole des p´eriph´eriques Niveau noyau
interruptions Niveau mat´eriel
P´eriph´eriques
Plan du cours
13(1)/52Programmation du syst` eme
Les fichiers Les processus
Cr´ eation, interruptions, ordonnancement des taches.
Communication inter-processus
Signaux, tuyaux (pipes), prises (sockets)
Communication inter-machines
Prises (sockets)
Les coprocessus (threads)
Concurrence, verrous, conditions
Impl´ ementation du syst` eme
(quelques coups de projecteurs sur...)
Fichiers, Tampons
M´ emoire
Plan du cours
13(2)/52Programmation du syst` eme Impl´ ementation du syst` eme
(quelques coups de projecteurs sur...)
Fichiers, Tampons M´ emoire
Gestion m´ emoire, m´ emoire virtuelle, caches.
Processus
Ordonnancement, etc.
Quel syst` eme d’exploitation ?
14(1)/52pour le cours.
Unix, Linux, Mach... Windows ?
En principe, le choix importe peu
En pratique, Windows est exclu (sans sources) De plus, Unix/Linux
I partagent les mˆ emes concepts avec des diff´ erences minimes. I sont les plus r´ epandus (apr` es Windows),
I offrent un libre acc` es aux sources,
I pr´ esentent une architecture relativement simple,
Quel syst` eme d’exploitation ?
14(2)/52pour le cours.
Unix, Linux, Mach... Windows ?
En principe, le choix importe peu
Les grands principes des syst` emes d’exploitation transcendent les particularit´ es de tel ou tel syst` eme.
Les besoins sont les mˆ emes syst` eme de fichiers, gestion m´ emoire, ordonnancement des taches, etc.
Les progr` es sont (lentement) transf´ er´ es d’un syst` eme ` a un autre.
Au sens large le syst` eme d’exploitation ne se r´ eduit pas au noyau.
Il inclut les biblioth` eques qui l’entourent et sont essentielles pour son utilisation : compilateur, chargeur, ´ editeur, etc.
Linux ou Gnu-Linux comme revendiqu´ e par Richard Stallman ?
En pratique, Windows est exclu (sans sources) De plus, Unix/Linux
I partagent les mˆ emes concepts avec des diff´ erences minimes. I sont les plus r´ epandus (apr` es Windows),
I offrent un libre acc` es aux sources,
I pr´ esentent une architecture relativement simple,
I Unix garde une importance historique dans le domaine des OS. I Linux ≈ Unix (diff´ erents noyaux mais biblioth` eques similaires) I Normes POSIX : rend les diff´ erents Unix compatibles
(mˆ emes appels syst` emes)
Quel syst` eme d’exploitation ?
14(3)/52pour le cours.
Unix, Linux, Mach... Windows ?
En principe, le choix importe peu
En pratique, Windows est exclu (sans sources)
De plus, Unix/Linux
I partagent les mˆ emes concepts avec des diff´ erences minimes. I sont les plus r´ epandus (apr` es Windows),
I offrent un libre acc` es aux sources,
I pr´ esentent une architecture relativement simple,
Quel syst` eme d’exploitation ?
14(4)/52pour le cours.
Unix, Linux, Mach... Windows ?
En principe, le choix importe peu
En pratique, Windows est exclu (sans sources) De plus, Unix/Linux
I partagent les mˆ emes concepts avec des diff´ erences minimes.
I sont les plus r´ epandus (apr` es Windows), I offrent un libre acc` es aux sources,
I pr´ esentent une architecture relativement simple,
I Unix garde une importance historique dans le domaine des OS.
I Linux ≈ Unix (diff´ erents noyaux mais biblioth` eques similaires) I Normes POSIX : rend les diff´ erents Unix compatibles
(mˆ emes appels syst` emes)
Quel langage de programmation ?
15(1)/52Pour programmer le syst` eme
Le langage d’impl´ ementation d’un syst` eme est presque
exclusivement C (mˆ eme si des exp´ eriences ont ´ et´ e men´ ees avec d’autres langages), car il combine :
I Une s´ emantique assez claire (compar´ e ` a Java, C++), I Une tr` es bonne efficacit´ e,
I Un langage qui permet l’acc` es ` a (presque) toutes les capacit´ es de la machine (op´ erations sur les bits, etc.)
I Allocation explicite, qui est (encore) la r` egle pour les syst` emes d’exploitation.
I C est le langage de choix pour programmer un syst` eme d’exploitation.
I Il s’impose pour ´ etendre un syst` eme existant ´ ecrit en C. I Mais ce ne sera pas forc´ ement toujours le cas...
Besoin de prouver la correction des programmes (pour des syst` emes embarqu´ es)
Pour interagir avec le syst` eme
Quel langage de programmation ?
15(2)/52Pour programmer le syst` eme
I C est le langage de choix pour programmer un syst` eme d’exploitation.
I Il s’impose pour ´ etendre un syst` eme existant ´ ecrit en C.
I Mais ce ne sera pas forc´ ement toujours le cas...
Besoin de prouver la correction des programmes (pour des syst` emes embarqu´ es)
Pour interagir avec le syst` eme
I OCaml rel` eve les appels syst` emes essentiels, avec une interface de plus haut niveau que C.
I Ce qui assure plus de s´ ecurit´ e ` a la fois pour la partie syst` eme et
le reste du programme.
Quel langage de programmation ?
15(3)/52Pour programmer le syst` eme
I C est le langage de choix pour programmer un syst` eme d’exploitation.
I Il s’impose pour ´ etendre un syst` eme existant ´ ecrit en C.
I Mais ce ne sera pas forc´ ement toujours le cas...
Besoin de prouver la correction des programmes (pour des syst` emes embarqu´ es)
Pour interagir avec le syst` eme
I L’interface primitive avec le syst` eme est une librairie C.
I Les langages g´ en´ eraux raisonnables s’interfacent avec C et rel` event les appels syst` emes essentiels.
I Un langage de haut niveau permet de red´ efinir une interface plus claire et plus sˆ ure, voir plus g´ en´ erique.
I Une application ne fait pas qu’ interagir avec le syst` eme : un
langage de haut niveau b´ en´ eficie ` a tout le programme.
Quel langage de programmation ?
15(4)/52Pour programmer le syst` eme
I C est le langage de choix pour programmer un syst` eme d’exploitation.
I Il s’impose pour ´ etendre un syst` eme existant ´ ecrit en C.
I Mais ce ne sera pas forc´ ement toujours le cas...
Besoin de prouver la correction des programmes (pour des syst` emes embarqu´ es)
Pour interagir avec le syst` eme
I OCaml rel` eve les appels syst` emes essentiels, avec une interface de plus haut niveau que C.
I Ce qui assure plus de s´ ecurit´ e ` a la fois pour la partie syst` eme et
le reste du programme.
Entre le programme et le syst` eme
16/52(Description approximative, minimale)
Un programme qui tourne poss` ede :
I Un environnement d’ex´ ecution , fix´ e par le syst` eme au lancement du programme, consultable et modifiable par le programme.
I Des variables-syst` eme modifiables seulement par le syst` eme (afin de pr´ eserver des invariants), ` a sa propre initiative ou sur demande du programme.
Par exemple : umask , uid , gid , cwd , etc.
I Des descripteurs (fichiers, connexions) ´ egalement g´ er´ es par le
syst` eme.
OCaml et le syst` eme d’exploitation
17/52La librairie Pervasives fournit les fonctions d’entr´ ee-sortie tamporis´ ees ainsi que quelques appels syst` eme. Par exemple :
exit : int -> ’a
Les librairies Sys (pr´ echarg´ ee) et Unix rel` event la plupart appels syst` eme.
Pour les utiliser
1. Commencer le fichier source foo.ml par : open Sys
open Unix
2. Pour compiler avec la librairie Unix : ocamlc -o foo unix.cma foo.ml
ou bien
ocamlc -o foo -c foo.ml
ocamlc -o foo unix.cma foo.cmo
Interface minimale avec le programme
appelant
18/52Les arguments de la ligne de commande Sys.argv : string array
L’environnement d’ex´ ecution
Unix.environment : unit -> string array Unix.getenv : string -> string array Le code de retour
Pervasives.exit : int -> ’a
Un retour normal ex´ ecute exit 0
Une exception lev´ ee non-rattrap´ ee appelle exit 2 .
Traitement des erreurs
19/52Origine
Une erreur pendant un appel syst` eme (une op´ eration avec le syst` eme) interrompt celui-ci et est indiqu´ ee au programme appelant avec la
source de l’erreur.
Signalement
En C, une erreur correspond ` a un code de retour de -1 et le type de l’erreur est cod´ ee dans une variable globale errno . Il faut donc tester syst´ ematiquement le code de retour d’un appel syst` eme.
En OCaml, une erreur lors d’un appel syst` eme l` eve l’exception : exception Unix_error of error * string * string
L’erreur est d´ ecrite par un type ´ enum´ er´ e :
type error = E2BIG | EACCESS | ... EUNKNOWNERR of int
Traitement des erreurs
20/52R´ ecup´ eration des erreurs
Avec la construction
try ... with Unix_error (EACCESS, _, _) | ...
Le filtrage peut ˆ etre s´ electif en fonction du type de l’erreur.
Erreurs fatales
handle_unix_error : (’a -> ’b) -> ’a -> ’b
handle_unix_error f a ´ evalue f a et si une erreur est lev´ ee affiche un
rapport d’erreur et termine le programme avec le code 2.
Traitement des errreurs non fatales
21/52Code de finalisation
Certains appels syst` emes ouvrent des structures syst` eme qu’il faudra refermer ensuite, que le calcul se termine normalement ou de fa¸ con erron´ ee. Le code de fermeture est appel´ e finalisation.
La construction try ... finalize est programmable.
let try_finalize f x finally y =
let res = try f x with exn -> finally y; raise exn in finally y; res
Utilisation typique
let desc = openfile () in
let treat arg = (* code de traitement utilisant desc *) in
try_finalize treat arg close desc
Le syst` eme de fichiers
Le syst` eme de fichiers
23/52Il permet de stocker les donn´ ees de fa¸ con persistante.
Un programme ne voit pas directement les informations telles qu’elles sont stock´ ees sur le disque, mais par l’interm´ ediaire du syst` eme de fichiers qui lui en donne une vue abstraite :
I les d´ etails d’impl´ ementation sont cach´ es,
I la pr´ esentation ` a l’utilisateur est ind´ ependante de leur repr´ esentation sur machine,
I le syst` eme peut pr´ eserver des invariants (car l’utilisateur n’a pas acc` es aux d´ etails de la repr´ esentation).
Plan
I Vue abstraite de la hi´ erarchie
I Exploration et modification de la hi´ erarchie.
I Lecture-´ ecriture sur les fichiers r´ eguliers (prochain cours...)
Syst` eme de fichiers : un arbre
24(1)/52Un arbre graphe acyclique + pointeurs arri` eres liens symboliques
.
•
•
/ 1
2 bin
3 ls
cd 4
usr 5
bin 6 gcc 7
cc
lib 8
• •
• •
liens durs
interdit
Lien dur sur un r´ epertoire liens inverses
liens symboliques Chemins de 9 ` a 8 ?
• •
/usr/lib
Syst` eme de fichiers (graphe)
25/52Le syst` eme de fichiers est un graphe :
I Un seul point d’entr´ ee appel´ e la racine, d´ esign´ e par / . I Les arcs sont ´ etiquet´ es par des noms.
I Deux arcs issus d’un mˆ eme nœud ont des ´ etiquettes diff´ erentes.
I Un noeud non-orphelin est appel´ e r´ epertoire et ne peut avoir qu’un seul parent. Il a toujours au moins deux fils, lui-mˆ eme et son parent, qui sont ´ etiquett´ es par . et .. respectivement.
Chaque nœud peut donc ˆ etre d´ esign´ e de fa¸ con univoque au moins par un chemin ` a partir de la racine.
Chaque nœud a un num´ ero unique qui permet la comparaison (´ egalit´ e
physique)—en fait deux num´ eros device et inode .
Syst` eme de fichiers (chemins)
26/52Un chemin relatif est une liste de noms de fichiers.
On peut le repr´ esenter par une chaˆıne caract` eres, en s´ eparant les noms de fichiers par le caract` ere sp´ ecial / , qui ne peut pas apparaˆıtre dans les noms de fichiers.
Pour interpr´ eter un chemin, il faut pr´ eciser un nœud de d´ epart, en g´ en´ eral, d´ etermin´ e par le contexte.
Exemples : local/bin et ../tmp/foo
Un chemin absolu est un chemin relatif interpr´ et´ e ` a partir de la
racine. On le note en le pr´ ec´ edent d’un / (qui d´ esigne la racine).
Position dans la hi´ erarchie
27/52Un programme (et plus g´ en´ eralement un processus Unix a une position courante dans la hi´ erarchie ` a partir de laquelle sont ´ evalu´ es les liens
relatifs).
getcwd : unit -> string chdir : string -> unit
L’orgine de la hi´ erarchie
Pour information plus que pour usage...
L’origine de la hi´ erarchie n’est pas forc´ ement celle que l’on pense : le syst` eme peut tromper le programme et ne lui montrer qu’une vue
´ elagu´ ee (faire man 2 chroot ).
Monter une h´ erarchie dans une autre
28(1)/52Avant montage
Gauche Droite
/
bin 1
usr 2
/ sha 3
man 4
src 5
Apr` es montage
de la hi´ erarchie droite ` a l’adresse /usr de la gauche
1
Les chemins en OCaml
29/52Pour ˆ etre param´ etrique en fonction des conventions du syst` eme
(Windows, Unix), OCaml d´ efinit les op´ erations sur les fichiers de fa¸ con abstraite dans le module Filename .
current_dir_name : string parent_dir_name : string
concat : string -> string -> string
Pour d´ ecomposer les chemins, on peut utiliser les fonctions : dirname : string -> string
basename : string -> string
Pour chaque chemin p , absolu ou relatif, dirname p et filename p
retournent un chemin d et un nom b tel que d/n ´ equivaut ` a p .
NB : Les calculs sur les chemins ne font pas d’appels syst` emes.
Exercice
30/52Remplir la table :
p dirname p basename p
foo/bar foo bar
foo
•foo
• • •
foo/
•foo
•Est-ce que foo/
•est ´ egale ` a
•/foo ?
Si et seulement si foo est si un r´ epertoire.
Types de fichiers
31/52Selon leur contenu :
I Les r´ epertoires, seuls ` a avoir des fils, n’ont pas de contenu.
I Les fichiers ordinaires : leur contenu est quelconque (suite de caract` eres).
I Les liens symboliques : leur contenu est un chemin, relatif ou absolu, qui peut ou non d´ esigner un autre nœud.
Un lien symbolique est normalement int´ epr´ et´ e comme un pointeur dans le graphe qu’il faut suivre.
I Les autres cas vus plus loin dans le cours : . Les tuyaux, les prises.
. Les fichiers sp´ eciaux de type caract` ere ou de type bloc.
En Unix, la communication avec des p´ eriph´ eriques se fait par des fichiers
sp´ eciaux. Le programme n’a pas besoin, en g´ en´ eral, de savoir qu’il s’agit
d’un fichier sp´ ecial (exemple : impression).
Types de fichiers en OCaml
32/52Le type concret ´ enum´ er´ e file_kind d´ ecrit les diff´ erents types de fichiers :
S_REG fichier normal S_DIR r´ epertoire
S_LNK lien symbolique
S_CHR fichier sp´ ecial de type caract` ere S_BLK fichier sp´ ecial de type bloc
S_FIFO tuyau
S_SOCK prise
Liens symboliques
33/52Les liens symboliques sont interpr´ et´ es comme des pointeurs.
On les suit lors d’une recherche dans la hi´ erarchie des fichiers : I Si p/f est un lien symbolique absolu /q alors p/f d´ esigne /q . I Si p/f est un lien symbolique relatif q alors p/f d´ esigne p/q . Lorsqu’un lien symbolique f apparaˆıt dans un chemin p/f /q ,
la seule int´ epr´ etation possible est de remplacer p/f par le nœud qu’il d´ esigne, qui doit ˆ etre un r´ epertoire.
Lorsqu’un lien symbolique f apparaˆıt ` a la fin d’un chemin p/f ,
on peut interpr´ eter ce chemin comme le lien lui-mˆ eme ou comme l’objet
d´ esign´ e par le lien : le contexte doit alors pr´ eciser quelle interpr´ etation
choisir.
Vue acyclique de la hi´ erarchie
34/52Les r´ epertoires “
•” et “
• •” permettent de remonter ` a la racine ` a partir de n’importe quel nœud.
On peut donc atteindre tous les nœuds de l’arbre ` a partir de n’importe quel autre (si on a les droits d’acc` es).
Les liens “
•” et “
• •” cr´ eent des cycles.
Les liens symboliques permettent des racourcis. Ils peuvent
´ egalement cr´ eer des cycles.
Un parcours r´ ecursif
I doit toujours ´ eviter les r´ epertoires “
•” et “
• •”
Glanage de fichiers...
35/52Le recyclage des nœuds d’une hi´ erarchie peut se faire par
compteur de r´ ef´ erence, car (une lecture de) la hi´ erarchie est acyclique.
Une destruction de fichier ou de dossier vide se fait en O(1). Il faut toujours vider les r´ epertoires avant de pouvoir les effacer !
Les liens symboliques sont ignor´ es pour le comptage des r´ ef´ erences. On peut donc d´ etruire un fichier alors qu’il existe quelque part dans la
hi´ erarchie un lien symbolique qui le d´ esigne. (Tout comme on peut cr´ eer
un lien symbolique vers un fichier inexistant.)
Op´ erations sur les fichiers
36/52Diff´ erents types d’op´ erations
I Consultation d’un nœud (m´ eta-information) I Parcours de la hi´ erarchie (en tout sens...)
I Modification de la hi´ erarchie (cr´ eation, destruction de nœuds).
I Ecriture/Lecture du contenu des fichiers. ´
Selon les diff´ erents types de fichiers
Ces op´ erations d´ ependent du type de fichiers : I Fichiers ordinaire : lecture, ´ ecriture
I R´ epertoires : lecture, ajout.
I Cr´ eation, destructions de nœuds (liens durs, symboliques, etc.)
M´ eta-informations sur les fichiers
37/52Identification
Le num´ ero du p´ eriph´ erique (device) sur lequel il est.
Le num´ ero du nœud sur ce p´ eriph´ erique.
Type du fichier Taille
Dates de modifications
(a) dernier acc` es
(m) derni` ere modification du contenu
(c) dernier modification du contenu ou des m´ eta-informations.
Droits d’acc` es
Propri´ etaires et Groupes
38/52Les utilisateurs appartiennent ` a un ensemble de groupes d’utilisateurs.
Les utilisateurs et les groupes d’utilisateurs sont identifi´ es par un num´ ero, appel´ e user-id ( uid ) et group-id ( gid ).
La liste des utilisateurs et des groupes est dans une base de donn´ ees du syst` eme (traditionnellement les fichiers /etc/passwd et /etc/group . On peut la consulter avec les fonctions :
getpwnam: string -> passwd_entry getgrnam: string -> group_entry
getpwuid: int -> passwd_entry getgrgid: int -> group_entry
Un programme qui s’ex´ ecute a un uid et un gid , consultables :
getuid : unit -> int
Droits d’acc` es
39/52autorisation en lecture (r), ´ ecriture (w), ou ex´ ecution (x)
se note rwx qui repr´ esente un nombre octal (1 bit par lettre).
propri´ etaires
I l’utilisateur propri´ etaire du fichier, I le groupe propri´ etaire du fichier ou I tout le monde.
Cod´ es sur un entier par l’union des permissions individuelles :
user(U)
z }| {
− − −
group(G)
z }| {
− − −
other(O)
z }| {
− − −
| {z }
0oUGO
+ Les bits s et le bit t
Exemple : Que signifie 0o644 ?
Informations sur un fichier en OCaml
40/52stat : string -> stats lstat : string -> stats
o` u stats est un type enregistrement :
st_dev : int Identificateur de la partition
st_ino : int Identificateur du fichier dans la partition 9
=
;
identit´e dans la hi´erarchie st_kind : file_kind Type du fichier.
st_perm : int Droits d’acc`es au fichier
st_nlink : int Nombre d’entr´ees pour un r´epertoire ou nombre de liens durs pour un fichier.
st_uid : int Le num´ero de l’utilisateur propri´etaire.
st_gid : int Le num´ero du groupe propri´etaire.
st_rdev : int (pour les fichiers sp´eciaux).
La taille du fichier, en octets.