77
1 Programmation système & 3 ème année Licence MIAGE Réseaux Philippe Lahire Université de Nice Sophia-Antipolis Octobre 2012 Ce cours fait de nombreux emprunts à celui de R. Rousseau Ce cours fait de nombreux emprunts à celui de R. Rousseau Version Octobre 2012 N°2 Organisation du cours Planning : Cours: 12 séances (1h30) Cours: 12 séances (1h30) TP: 12 séances (1h30) Contrôle continu : TP: deux à trois TP notés un ou deux contrôles courts + contrôle terminal (1h30) Note complémentaire : Le travail : Motivation Compréhension Progression Le travail : Motivation, Compréhension, Progression,… La tenue : Assiduité, Respect,… Matériel : PC sous linux

Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

Embed Size (px)

Citation preview

Page 1: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

11

Programmation système &

3ème année Licence MIAGE

Réseaux

Philippe LahireUniversité de Nice Sophia-Antipolis

Octobre 2012

Ce cours fait de nombreux emprunts à celui de R. RousseauCe cours fait de nombreux emprunts à celui de R. Rousseau

Version Octobre 2012 N°2

Organisation du cours

Planning :Cours: 12 séances (1h30)Cours: 12 séances (1h30)TP: 12 séances (1h30)

Contrôle continu :TP: deux à trois TP notésun ou deux contrôles courts + contrôle terminal (1h30)

Note complémentaire :Le travail : Motivation Compréhension ProgressionLe travail : Motivation, Compréhension, Progression,…La tenue : Assiduité, Respect,…

Matériel : PC sous linux

Page 2: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

22

Version Octobre 2012 N°3

Programme

Système de FichiersEntrée sortie + API (read write )Entrée-sortie + API (read, write…)Notion de processus + API (fork, exec)Tubes + API (pipe)Signaux + API

LangageLangage : • principalement CC

Version Octobre 2012 N°4

Organisation des enseignements

cours Semaine TP

1 Introduction + Entrées-Sorties 42

2 Introduction + Entrées-Sorties 42

3 Systèmes de Fichiers 43 TP N°1 : E/S (1h30)

4 Systèmes de Fichiers (prog) 45 TP N°1 : E/S (1h30)

5 Processus 46 TP N°2 : Syst. Fich. (1h30)

6 Processus (prog) 48 TP N°2 : Syst. Fich. (1h30)

7 Tubes 49 TP N°3 : Processus Fork (1h30)

8 Tubes 50 TP N°4 : Processus exec (1h30)

9 Signaux 51 TP N°4 : Processus exec (1h30)

10 Signaux 2 TP N°5 : Tubes (1h30)

3 TP N°6 : Signaux(1h30)

11 Révision/Rattrapage 4 TP N°6 : Signaux(1h30)

TP Révision/ Rattrapage

12 Contrôle Terminal TP Révision / Rattrapage

Page 3: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

33

Version Octobre 2012 N°5

Tentative de bibliographie

1. S. Harbison & G. Steele Jr. C, a reference manual (1st ed. 1984) Prentice Hall, 2nd edition, 1987, 404 p.

2. B. Kernighan & D. Ritchie “The C Programming Language (1st ed. 1978)”,CC g g g g g ( ) ,

Prentice Hall, 2nd ed., 1988. Traduction française Masson, 1990.3. A. Tannenbaum “ Systèmes d’exploitation : systèmes centralisés,

systèmes distribués” MacGraw Hill, 1990. Traduction française (2e ed) Dunod, 1999

4. A. Siberschatz & P. Galvin “ Operating Systems Concepts ”, 5e ed, Addison-Wesley, 1998.

5. J. Beauquier & B. Berard “Systèmes d’exploitation : concepts et algorithmes ” MacGraw Hill, 1990.

6. W. Stevens “Advanced Programming in the Unix environment” Addison Wesley 1992 744 p

Conc

epts

Conc

epts

ixix Wesley, 1992, 744 p.7. M.J. Bach “Conception du système Unix”, Prentice Hall, 1986. Traduction

française Masson, 1991.8. J.M. Rifflet “La programmation sous Unix”, Ediscience intern., 3ème éd.,

1993, 630 p.9. U. Vahalia “Unix Internals : the new Frontiers” Prentice Hall, 199610. A.D. Solomon “Le guide officiel sur l’architecture et le noyau Windows

NT” 2nd ed., Microsoft Press, 1998.11. Site microsoft

Uni

Uni

Win

dow

sW

indo

ws

Version Octobre 2012 N°6

Documentation en ligne

Sur le langage CSur le langage CEn L2MI (Gilles Menez) : ( )

www-mips.unice.fr/˜menez/L2/L2cours.htmlCours vidéo sur le langage C de l’Université de Paris VI : www.infop6.jussieu.fr/cederoms/Videoc2000/

Sur la programmation réseauSur la programmation réseau :Cours réseau du CNRS : www.urec.fr/coursCours programmation réseau avec sockets, de Brian "Beej" Hall :

hi d ˜b j id h lwww.ecst.csuchico.edu/˜beej/guide/net/html/.

A propos de l’UEA propos de l’UE «Programmation système et réseau» :Site web officiel de cet enseignement :http://deptinfo.unice.fr/~lahire/enseignement/SYSL3

Page 4: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

44

Chapitre 1: Présentation générale

Version Octobre 2012 N°8

Chapitre 1: Présentation générale

Historique des systèmes UNIXVers une normalisation: POSIX

√√Vers une normalisation: POSIXUnix propriétaires ou LinuxSurvol de l'architectureNoyau du systèmePrincipales caractéristiquesRappels des notions de base: le ShellRappels des notions de base: le ShellPrincipales commandesInterprétation de commandeNotion de base: La session, le manuel,…Parallèle avec Windows

Page 5: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

55

Version Octobre 2012 N°11

Vers une normalisation: POSIX

PPortable OOpen SSystem IInterface eXXchange

Norme IEEE & Description:1003.0: Guide et présentation 1003.1: Bibliothèque de fonctions1003.2: Shell et utilitaires1003.3: Méthode de tests et conformité1003.4: Extension temps réel1003.5: Form. appels systèmes en ADA1003 6: Sécurité1003.6: Sécurité1003.7: Administration système1003.8: Accès commun aux fichiers1003.9: Interface sous Fortran 771003.10: Interface supercalculateurs

Normes: ISO 9945-1 ( P1003.1)

Version Octobre 2012 N°12

Unix propriétaires ou Linux…

Linus Torvald (FIN-91 sur i386)Philosophiep

Un noyau et des outils de base Indépendant de tout constructeur

Libre et Basé sur des contributions bénévoles (GPL)Organisation en projets ambitieux (FSF, SourceForge)Un grand nombre d'utilisateurs motivésUn “excellent produit”: stable et code original “libre de droits”

Porté un grand nombre d'architectures : SPARC, INTEL, ALPHA, MAC, …

Quelques projets: ApacheGnomeGNU

Page 6: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

66

Version Octobre 2012 N°13

De nombreuses distributions Linux

Les différencesNom: Debian, Redhat, Suse, Mandrake, …Prix (commerciale ou pas), Nombre de logiciels, Versions des logiciels, Pilotes supportés,Organisation des fichiers de configuration, Procédures d'installation, Sérieux de la gestion (site web, mise à jour, etc.), Fréquence des versionsqCertifications, …

Mais encore:Debian: de 4500 à 9000 Logiciels,Orienté informaticien,Une dérive vers l'automatisation, …

Version Octobre 2012 N°14

Survol de l'architecture (1)

UTILISATEURInterface Utilisateur

SYSTEME D’EXPLOITATION UNIX

BIBLIOTHEQUE STANDARDfopen, fclose, fread, fwrite,…

PROGRAMMES UTILITAIRES STANDARDShell, éditeur, compilateur, …

Interface Bibliothèques

Interface Appels Systèmes

Interface Utilisateur

MATERIEL: UC, mémoire, disques, terminaux, etc…

SYSTEME D’EXPLOITATION UNIXGestion des processus, de la mémoire, des E/S,…

Autre système en couche : logiciels réseaux suivant norme - OSI

Page 7: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

77

Version Octobre 2012 N°17

Noyau du système

BibliothèquesProgramme Utilisateur

Interface des appels systèmes

Sous-systèmes de contrôle de fichiers

Sous-systèmes de contrôle des processus

Communication interprocessus

Ordonnanceur

Gestion mémoire

Cache Buffer

PARTIE MATERIELLE

Cache Buffer

BlocCaractèreContrôleurs de périphériques

Contrôle de la partie matérielle

Version Octobre 2012 N°19

Principales caractéristiques

Langage de haut niveauLe noyau : plus d'1 million de lignes de Cy p g

Expressivité et simplicité de l'interfaceConstruction de programmes: des primitives élémentairesUn système de fichiers « hiérarchique »Un format cohérent de fichier (octet)Accès aux périphériquesccès au pé p é quesMulti-utilisateurs et multitâches …Indépendance avec l'architecture matérielle

54 % du codeMémoire virtuelle (versions actuelles)

Page 8: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

88

Version Octobre 2012 N°21

Notion d’interprète de commandes

Shell : Interface textuelle vers le système

FonctionnalitésFonctionnalités

Message d'invitation (prompt)

Attend la saisie d'une commande

Commandes internes

Commandes externes (charg. + exec. programmes)

Historique des commandes précédentesHistorique des commandes précédentes

Redirections et tubes

Structures de contrôles (boucles, tests, fonctions, ...)

Mécanisme d'alias, variables d'environnement

Gestion de processus

Version Octobre 2012 N°22

Différents shells unix possibles

Bourne shellBourne shell (historiquement, le 1er)

Toujours utilisé par les scripts internes du systèmeToujours utilisé par les scripts internes du système

CC--shellshell (csh, tcsh)

syntaxe différente

Évolutions du Bourne shellÉvolutions du Bourne shell

ksh (Korn shell)

bash (Bourne Again shell): le shell du projet GNU

Où indiquer le shell par défaut ?

bash (Bourne Again shell): le shell du projet GNU

zsh: Évolution prétendument "ultime" du bourne shell

Améliorations : historique, complétion, ...

Possibilité de (demander à) changer le shell par défaut

lancé automatiquement au début de session

Page 9: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

99

Version Octobre 2012 N°23

Quelques éléments d’administration

/etc/passwd/etc/passwdnom_du_compte : mot_de_passe : numero_utilisateur : numero_de_groupe : nom_du_compte : mot_de_passe : numero_utilisateur : numero_de_groupe :

commentaire : répertoire : programme de demarragecommentaire : répertoire : programme de demarrage

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/bin/bash

daemon:x:2:2:daemon:/sbin:/bin/bash

news:x:9:13:News system:/etc/news:/bin/bash

user1:x:500:100:Mr User 1......:/home/user1:/bin/bash

commentaire : répertoire : programme_de_demarragecommentaire : répertoire : programme_de_demarrage

/etc/group/etc/groupnom_de_groupe : champ_special : numero_de_groupe : membre1, membre2nom_de_groupe : champ_special : numero_de_groupe : membre1, membre2

root:x:0:rootbin:x:1:root,bin,daemondaemon:x:2:users:x:100:

Version Octobre 2012 N°28

Caractéres spéciaux du shell

Certains caractères ont une signification spéciale pour le shell

* : 0 ou plusieurs caractères quelconques

Pas en CPas en C

p q q

t*o : nom de fichier qui débute par t et finit par o

? : 1 (et un seul) caractère quelconque

t?t? : désigne toto ou titi ou ttta, ...

\ : enlève la signification spéciale du caractère qui suit

t\*to : désigne t*to

Certaines constructions ont une signification spéciale

[a-z] : un caractère entre a et z (a ou b ou c ... ou z)

[aefgij] : un caractère (et un seul) parmi a,e,f,g,i,j

t[oau]t[oau] : toto, ou totu, ou tata, ou tato, ...

{mot1,mot2} : soit mot1, soit mot2

Page 10: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

1010

Version Octobre 2012 N°34

Notions de base: Le manuel

Principales sections (environ 20 Mo)taille dépendante des paquetages - nyx : (≈20 Mo de “.gz”)man1: Commandes utilisateurs à partir shell (≈1800)man2: Primitives du noyau (≈250)man3: Routines C (≈1400)man4: Fichiers spéciaux: les pilotes des périphériques (disque dur, clavier/écran, graveur, lecteur de dvd, zip, mémoires usb...) (≈90)man5: Formats de fichiers et protocoles (≈200)man7: Format des systèmes de fichiers, jeux de caractères, macros, nroff... (≈80)man8: Commandes d’administration – à partir shell (≈450)man9: routines du noyau non standards (≈90)

Attention : Un ordre d'évaluation Base whatis: recherche de commandesapropos: recherche de mots clés

Version Octobre 2012 N°35

Anatomie d’une page de manuel (1)

Section

Brè ve de scr ip t ion

Syn taxes possibles

Descr ipt ion détaillée de la comman de

Pr om p t d u « PAGE R »

De scr ip t ion d é t a illé e d e sop t ion s (or d r e a lp h a b .)

'q ' : q u it' b ' : r e tou r 1 p .< s p c > : d é fil 1 p .< e n t e r > : d é fil 1 l./xy : r e c h e r c h e r « xy »

Page 11: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

1111

Version Octobre 2012 N°36

Anatomie d’une page de manuel (2)

A i éAutr es pages in téressan tessu r un su jet voisin

N u l n ' e s t p a r fa it . . .

Par fois am bigu ës ou con fu sesVer sion angla ise (défau t ) :unset LANG LC_ALLpu is m an à n ouveau...

Version Octobre 2012 N°38

Principe général d'utilisation/* Fichier Z2.h */

Z1.oR1 (int i)Zlib.a

main (){

}........R1 (23)

/* Fichier Y.c */

#include "Z2.h"

Z2.o

Z3.o

........R1 (int i) {......}.......

PREPROCESSEUR

/* MAN !!!!! */

man r1

}

a.out

Y.o

EDITION DE LIEN

COMPILATION

Page 12: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

1212

Version Octobre 2012 N°39

Exception vs compte-renduPresque toutes fonctions/appels systèmes

Traitement standard des erreurs (1)

entierpointeur…Presque toutes fonctions/appels systèmes

Utilisation de errnoerrno :Syntaxe : extern int errno ;n◦ dernière erreur détectée par un appel système

• normale : positive ou nulle, non void ,• anormale : négative ou void

n dernière erreur détectée par un appel systèmepas remise à zéro à chaque appel. intro(2)intro(2) : liste des différents codes

Méthodologie : test compte-rendu + errnoerrno

Version Octobre 2012 N°40

Fonctions associées#include <string.h>

Traitement standard des erreurs (2)

#include string.hchar* strerror (int errnum)retourne message « en clair » associé à errnumerrnum

#include <stdio.h>void perror (const char* message)affiche message message associé à errno errno (stderrstderr)affiche « message » + message associé à errno errno (stderrstderr)

Méthodologie :utiliser en s’appuyant sur « man » (Errors / Erreurs)ou traitement ad hoc (ex: gestion paramètres de « main »)

Page 13: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

1313

Version Octobre 2012 N°41

Exemple#include <string.h>

Traitement standard des erreurs (3)

g#include <stdio.h>int main (int argc, char* argv[]) {FILE* fichier;if (argc != xxx) {

fprintf(stderr, « nombre paramètres incorrect »);exit(exit(11))

ici > 1

exit(exit(11))}

if ( (fichier = fopen(argv[1], « rw »)) == NULL) {fprintf(stderr,«Erreur %i:%s \n », errno, strerror(errno));exit(exit(22); }); }

} }

Version Octobre 2012 N°42

Traitement des erreurs de W. Stevens (1)

+ returnreturn

format message d’erreur avec nb %% + nb arguments

+ exit(1)exit(1)

+ abortabort

Affiche aussi le message associé à errnoerrno

Macros : en majuscule et sans paramètrePas de message passé en paramètre mais :Affichage: Nom du fichier + numéro de ligne

Page 14: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

1414

Version Octobre 2012 N°43

Exemple#include <stevens.h> Pas par défaut dans linux

Traitement des erreurs de W. Stevens (2)

#include <stevens.h>#include <stdio.h>int traiter_fichier (char* f) {FILE* fichier; char tab[30];if ( (fichier = fopen(f, « rw »)) == NULL)

ERR_EXITERR_EXIT;

Pas par défaut dans linux

;…if (fclose(fichier)) != 0)

ERR_RETURNERR_RETURN;} }

Chapitre 2: Entrées - Sorties

Page 15: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

1515

Version Octobre 2012 N°45

Plan de travail

Principes généraux…

Structures internesHiérarchie de descripteursTables pour la gestion des entrées-sorties

Principaux appels systèmesOuverture / fermeture de fichiers: open closeOuverture / fermeture de fichiers: open, closeEntrées-sorties: read, writePositionnement : lseek, fseekDuplication en vue de redirection : dup, dup2

Version Octobre 2012 N°46

Mise au point / Survol

bash gcc emacs

int open (….) { } int read (….) { }

TablesTables :

FILE* fopen (….) { } Bien sur on se sert aussi du « shell »pour lancer un

programme

Système exploitation

TablesTables :•Fich. Ouvert•Volumes•Blocs•….

Consulte / met à jour« appelle » / exécute

processus

Page 16: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

1616

Version Octobre 2012 N°47

Principes généraux (1)

Sous UNIX: tout est fichierPériphérique réseau mémoire

Exemples : • « hardware » (/dev) • Accès au réseau (sockets)

T b i t t (FIFO)Périphérique, réseau, mémoire...Fichier = une suite d’octetsOrganisation : Hiérarchie de

Système de fichiers (partitions…)répertoiresFichiers « normaux » (en anglais Regular)

• Tubes persistants (FIFO) • Tables du noyau (TDF)

Montage : • local • distant

( g g )Liens entre fichiers (symboliques et physiques)Fichiers virtuels (/proc)Fichiers spéciaux (périphériques,FIFO,…)

Version Octobre 2012 N°48

Principes généraux (2)

Méthodes d’accèsSéquentiel (read)q ( )Direct - unité: l’octet – (lseek)

Protectionpropriétaire, groupe d’utilisateurs, les autresPas de journal (log) mais possibilité de verrous

Généralité + simplicitéImplantation de SGBD : bonne aptitudeImplantation de SGBD : bonne aptitudefichiers à trou, accès direct, octets…mécanismes additionnels non intégrés: évolution (gestion des versions), typage des

données, système transactionnel (SGBD),

Page 17: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

1717

Version Octobre 2012 N°49

Principes généraux (3)

Deux points de vuesUtilisateur (commandes, applications,…)( pp )Programmeur (C et appels systèmes)

Utilisateuréchanges entre un processus et des entités :

disque, machine distante, autre processus, terminal...

Programmeur Fichier au sens large

Echanges avec n’importe quelle entité par des flots d’octets consécutifsAccès direct possible sur des disques locaux ou distants (curseur lecture/écriture)

Version Octobre 2012 N°50

Principes généraux (4)

Une suite d’octetsDisqueDisque

Curseur

TamponDescripteur de fichier :

Prédéfini (fich Stand )

MémoireMémoire Programme

F.D.F.D.

• Prédéfini (fich. Stand.)• A associer (open)

Simple numéroSimple numéro

Page 18: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

1818

Version Octobre 2012 N°51

Principes généraux (5)

Association (open…)Dans le programmeDans le programme Appel du programmeAppel du programme

( p )nom externe / Desc. Fichier

chemin relatifchemin absolu

Pas de caractère génériquePas de caractère générique

Utilisation (read, write…)chemin relatifchemin absolu

Desc. Fichier: numéro de voieobtenu par associationprédéfini :

0 : voie standard d’entrée1 : voie standard de sortie2 : voie standard d’erreur

On n’utilise jamais On n’utilise jamais directement directement

Le clavier ou l’écranLe clavier ou l’écran

Version Octobre 2012 N°52

Un modèle d’E/S adaptable aux langages

Impact:• Performance

Un modèle d’entrée sortie de bas niveauxLangage CJava…

• Utilisation…

Page 19: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

1919

Version Octobre 2012 N°53

Modèle langage C vs Modèle UNIX

Appels systèmes (1)open, lseek, write, stat...Mécanismes de base

Streams et routines C (2)isastream, fopen, fseek, fread, fwrite, fgets, feof, ...Notion de stream

Remarques et ConclusionMode noyau et Préemptiony p

struct FILE vs numéro d'entrée dans la TDFlect./écr. d'enregistrement vs d'octet(2) utilise (1)signatures de (2) indépendantes du système, mais l'implémentation dépend elle, du système ...

qu'en concluez vous ?

Version Octobre 2012 N°54

Qu'est-ce qu'un processus

DéfinitionsInstruction = indécomposable et indivisibleInstruction indécomposable et indivisibleProcesseur = ...Processus = exécution d'un programme

(instructions + données)Approche intuitive

UNIX = système "temps partagé“Plusieurs processus en même tempsUn seul processus actifAttente des autres (dans/hors mémoire)

Page 20: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

2020

Version Octobre 2012 N°55

Tables pour gérer les fichiers P

1 01

Position :État : N° inode :

Tables partagéesTables partagéesPrivéPrivéP2 0

Proc

essu

s 12345

Nombre :…

Position :État :Nombre :

Nb. copies :Inode Infos ……

N° inode :Nb. copies :Inode Infos …

Tables Descripteurs Fichiers

Position :Ét t

Table fichiersEspace utilisateur Table inodes

Proc

essu

s P 0

12345

N° inode :Nb. copies :Inode Infos …

État :Nombre :…

Position :État :Nombre :

Version Octobre 2012 N°56

Modèle UNIX - Synthèse

Trois points de vues Le processus

Rôles :Gestion des voies d’échangep

L’usageLe « fichier »

Deux abstractions (par point de vue)Processus : Usage et nature du fichierUsage : raison de l’utilisation par le processus

et la nature du fichier

gGestion du curseur…Gestion des protections…

« Fichier »: raison de l’utilisation et usage du fichier

Permettre le partageD’un même usage par un/plusieurs processusD’un même fichier par un/plusieurs processusD’une même fichier par un/plusieurs usages

Page 21: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

2121

Version Octobre 2012 N°57

Ouverture/Création d’un fichier: openopen

Descripteur de fichier

Lors de la création: f(perm,umask)

Mode d’ouverture

Nom fichier

fichier

Mise à jour des tables internes (processus + noyau)Oflags/perm : 9/15 macros dans les fichiers .h

Un petit ensemble de combinaisons validesLes incohérences ne sont pas détectés

Version Octobre 2012 N°58

Ouverture/Création: openopen (oflags)

O_CREAT:O_CREAT: création, si le fichier n’existe pasO EXCL:O EXCL: combiné avec O CREATO CREAT, création si le fichier n’existe

Valeurs possibles

__ __ ,pas, erreur sinonO_RDONLY:O_RDONLY: ouverture en lecture seule. O_WRONLY:O_WRONLY: ouverture en écriture seule (création ou ajout) O_RDWR:O_RDWR: ouverture en lecture et écriture (mise à jour n’importe où) O TRUNC:O TRUNC: libération du contenu du fichier, s’il existe + curseur __ ,placé en début de fichierO_APPEND:O_APPEND: contenu du fichier non touché + curseur placé en EOFO_SYNC:O_SYNC: attend la fin d’écriture sur le média après chaque write (pas de cache)O_NONBLOCK:O_NONBLOCK: E/S non bloquantes.

Page 22: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

2222

Version Octobre 2012 N°59

Ouverture/Création: openopen (oflags)

Règles et choix incohérents

O_CREATO_CREAT si la création est permise ⇒ ¬ O_RDONLYO_RDONLY

O_EXCLO_EXCL si le fichier ne doit pas déjà exister ⇒ O_WRONLYO_WRONLY +

Choisir l’un des 3 types exclusifs d’action : O_RDONLYO_RDONLY, O_WRONLYO_WRONLY, O_RDWRO_RDWR

+

O_CREATO_CREAT

O_TRUNCO_TRUNC ou O_APPENDO_APPEND pour placer le curseur au début (resp. à la

fin) du fichier (doit donc déjà exister ⇒ ¬ O_EXCLO_EXCL)

O_SYNCO_SYNC si les écritures doivent être immédiates ⇒ ¬ O_RDONLYO_RDONLY.

Version Octobre 2012 N°60

Ouverture/Création: openopen (oflags)

open (nomFichier, O_RDONLY)open (nomFichier, O_RDONLY)

Curseur au début du pour lire

Exemples

open (nomFichier, O_WRONLY | O_CREATopen (nomFichier, O_WRONLY | O_CREAT | O_TRUNCO_TRUNC, …)

[Création + effacement] si nécessaire + curseur au début pour écrire

open (nomFichier, O_WRONLY | O_APPENDopen (nomFichier, O_WRONLY | O_APPEND, …)

Curseur en fin pour écrire

open (nomFichier, O_WRONLY | O_CREATopen (nomFichier, O_WRONLY | O_CREAT | O_APPENDO_APPEND, …)Création si nécessaire + curseur en fin pour écrire

open (nomFichier, O_WRONLY | O_CREATopen (nomFichier, O_WRONLY | O_CREAT | O_EXCLO_EXCL, …)

Création si n’existe pas (erreur sinon) + curseur au début pour écrire

open (nomFichier, O_RDWRopen (nomFichier, O_RDWR)

Doit exister + curseur au début pour lire ou écrire n’importe où

Page 23: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

2323

Version Octobre 2012 N°61

Ouverture/Création: openopen (perm)Règle

Les permissions associées à un fichier lors de sa créationsont fixées par la conjonction de deux points de vue :

Point de vue :du programmeur, qui propose des permissions logiques

de l’utilisateur, propriétaire des fichiers créés, qui

sont fixées par la conjonction de deux points de vue :

Ex: Compilateur: exécution / Editeur: lecture et écriture…

peut interdire certaines permissions

umaskumask : pas de lecture/écriture pour les autres

Permission appliquée = perm & ~umaskumask

Masque interdictions

Version Octobre 2012 N°62

Ouverture/Création: openopen (perm)Valeurs possibles

Pour donner des droits

Le propriétaire

Le Groupe propriétairee G oupe p op éta e

Les autres

Page 24: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

2424

Version Octobre 2012 N°63

open (« f », O_WRONLYO_WRONLY | O_CREAT, O_CREAT, ))

Ouverture/Création: openopen (perm)Exemple

1 1 01 0 0 0 0 0))

0 0 00 1 0 0 1 0022Group = ¬¬write

umaskumask

1 1 01 0 0 0 0 00 0 10 1 1 0 0 0

|

0 0 00 0 0 1 1 1 |

1 1 11 1 1 1 1 1

1 1 11 0 1 1 0 1&

~

1 1 11 0 1 1 0 1755

pOther = ¬¬write =

Version Octobre 2012 N°64

Création d'un fichier

Equivalencesopenopen (path, O WRONLY | O CREAT)openopen (path, O_WRONLY | O_CREAT)creatcreat (path, mode)mknodmknod : Fichier spéciaux (FIFO, ...)

Deux Phases: création et ouverture Voir Communication inter-processus

Paramètres oflag = 010000 | 001000 (O_RDONLY,...)

Commande(s) associée(s): emacs, gcc, cp, ...Structure(s) interne(s): tables, super-bloc

Page 25: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

2525

Version Octobre 2012 N°65

Création d'un fichier: mécanisme interneEtapes

Localisation inode parent (I.PI.P),Localisation inode parent (I.PI.P),Recherche nom fichier...

Si le nom n’existe pas alors:Verrouillage I.P.I.P., liste des inodes libresAllocation inode: inode-mémoire = get (inode-disque) Modification I.P.I.P.: Informations fichier

Sinon (le nom existe) :Désallocation blocs: contenu fichierNon-Modification I.P.I.P.

Importance des verrous et du mode noyauImportance des verrous et du mode noyau

Version Octobre 2012 N°66

Processus 1#include <sys/types.h>

Ouverture/Création d'un fichier (1)

y yp#include <sys/stat.h>#include <fcntl.h>int main () { int rfd, wfd, rwfd;

if ((rfd = openopen("/etc/bashrc",O_RDONLY)) < 0)erreur;

Attention !

erreur;if ((rwfd = openopen("/etc/bashrc", O_RDWR)) < 0)

erreur; if ((wfd = openopen("/.bashrc",O_WRONLY | O_CREAT)) < 0)

erreur; }

Action: ouverture: rfd, rwfd - création/ouverture: wfd

Page 26: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

2626

Version Octobre 2012 N°67

Ouverture/Création d'un fichier (2)

Processus 2#include <sys/fcntl.h>#include <sys/stat h>#include <sys/stat.h> #include <sys/types.h> int main () {

int rfd, wfd;if ((wfd = openopen("/etc/bashrc",O_WRONLY)) < 0)

erreur;if ((rfd = openopen("/.bash_profile",O_RDONLY)) < 0)

erreur;}Deux processus indépendantsDes tables partagées et privées

Action: ouverture: rfd - ouverture: wfd

Version Octobre 2012 N°68

Ouverture d'un fichier: Vision interne

P1 01

Position :État :Nombre :

O_RDONLYO_RDONLY

11/etc/bashrc/etc/bashrc

N° inode :Nb. copies :I d I f

112233

Attention : partage possible dup/fork

P2 0

Proc

essu

s 12345

Position :État :Nombre :

O_RDWRO_RDWR

11…

Position :État :Nombre :

O_WRONLYO_WRONLY

11

Inode Infos …

N° inode :Nb. copies :Inode Infos …

11/.bashrc/.bashrc

Table fichiersEspace utilisateur Table inodes

Proc

essu

s P2 0

12345

11

Position :État :Nombre : 11

O_RDONLYO_RDONLY

Position :État :Nombre :

O_WRONLYO_WRONLY

11

N° inode :Nb. copies :Inode Infos …

/.bash_profile/.bash_profile

11

Page 27: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

2727

Version Octobre 2012 N°69

Fermeture d’un fichier: closeclose

Descripteur de fichier

Mise à jour des tables internes (processus + noyau)

fichier

fd est une entrée dans la TDF :openopen, forkfork, voie standard…

Fermeture par le noyau des fichiers à la terminaison d’un processus (exitexit(?))

Version Octobre 2012 N°70

Fermeture d'un fichier

Processus 2#include <unistd.h> int main ()int main () {

int rfd, wfd;/* Ouverture et utilisation */ ... closeclose (rfd); /* exit: fermeture implicite */ closeclose (wfd); /* exit: fermeture implicite */ }

T bl fi hi /i dTables fichiers/inodesDécrémentations compteursDésallocations élémentsLibération complète si le compteur atteint 0

Commande(s) associée(s): exit, éditeur…Structure(s) interne(s): tables, buffers

Page 28: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

2828

Version Octobre 2012 N°71

Fermeture d'un fichier: Vision interne

P1 01

Position :État :Nombre :

O_RDONLYO_RDONLY

11/etc/bashrc/etc/bashrc

N° inode :Nb. copies :I d I f

112233

P2 0

Proc

essu

s 12345

Position :État :Nombre :

O_RDWRO_RDWR

11…

Position :État :Nombre :

O_WRONLYO_WRONLY

11

Inode Infos …

N° inode :Nb. copies :Inode Infos …

11/.bashrc/.bashrc

Table fichiersEspace utilisateur Table inodes

Proc

essu

s P2 0

12345

11

Position :État :Nombre : 11

O_RDONLYO_RDONLYN° inode :Nb. copies :Inode Infos …

/.bash_profile/.bash_profile

11

…Position :État :Nombre :

O_WRONLYO_WRONLY

11nullnull

Version Octobre 2012 N°72

Lecture d’un fichier: readread

Descripteur fichier

Nombre octets lus

Mise à jour des tables internes (noyau)fd é d l TDF l

Lieu de stockage données lues

Nombre octets à lire

fd est une entrée dans la TDF ouverte en lecture :openopen, forkfork, voie standard…

Allocation de bufferbuffer impérativeNb octets lus ≤ Nb octets à lire (EOF, périphérique,…)Début = position du curseur Après = position + nb oct.lus

Page 29: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

2929

Version Octobre 2012 N°73

Lecture d'un fichier

Processus 1#include <sys/types.h> #include <unistd h>#include <unistd.h> int main () {

int rfd, nb; char tabp[30]; char tabg[1024];/* Ouverture rfd */ ... nb = readread (rfd, tabp, 30); nb = readread (rfd, tabg, 1024);nb = readread (rfd tabp 20);nb = readread (rfd, tabp, 20);

}Lecture à travers une même entrée

Commande(s) associée(s): cat, more, emacs, ...Structure(s) interne(s): tables, blocs, buffers

Version Octobre 2012 N°74

Lecture d'un fichier: Commentaires

Verrouillage/partageDurée d'un readreadDurée d un readreadVerrouillage explicite possible

Schéma lecteur/écrivain possiblePlusieurs descripteurs possibles

Lecture réelleAttention: Lecture bloc par blocBloc dans le "buffer cache" ou sur le disque?Lecture anticipée

Page 30: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

3030

Version Octobre 2012 N°75

Lecture d'un fichier

Processus 1#include <sys/types.h> #include <unistd h> #include <unistd.h> int main () {

int rfd1, rfd2, nb;char tab1[30], tab2[30];/* Ouverture rfd1, rfd2 */ ... nb = readread (rfd1, tab1, 30); nb readread (rfd2 tab2 30);nb = readread (rfd2, tab2, 30);

}Lecture à travers plusieurs entrées – attention

Ici: 2 descripteurs indépendanceforkfork: "2" descripteurs dépendance

Version Octobre 2012 N°76

Lecture d’un fichier (2)

Page 31: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

3131

Version Octobre 2012 N°77

Ecriture dans un fichier: writewrite

Descripteur fichier

Nombre octets écrits

Mise à jour des tables internes (noyau)fd est une entrée dans la TDF ouverte en écriture :

Données à écrire

Nombre octets à écrire

fd est une entrée dans la TDF ouverte en écriture :openopen, forkfork, voie standard…

Nb octets écrits ≤ Nb octets à écrire EOF, périphérique (imprimante, réseau…), signal, média/quota plein

Début = position du curseur Après = position + nb octets écrits

Version Octobre 2012 N°78

Ecriture dans un fichier

Processus 1#include <sys/types.h> #include <unistd h> #include <unistd.h> int main () {

int wfd, nb;char tab[30];/* Ouverture wfd */ /* Remplissage de tab */ ... nb = writewrite (wfd tab 30); nb = writewrite (wfd, tab, 30); /* Remplissage à partir de tab */ ... nb = writewrite (wfd, tab, 30);

}Commande(s) associée(s): cat, emacs, …Structure(s) interne(s): Tables, blocs, buffer

Page 32: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

3232

Version Octobre 2012 N°79

Ecriture dans un fichier (2)

Version Octobre 2012 N°80

Ecriture d'un fichier: commentaires

Verrouillage/partageDurée d'un writewriteDurée d un writewriteVerrouillage explicite possible

Schéma lecteur/écrivain possiblePlusieurs descripteurs possibles

Ecriture réelleAllocation de blocs par nécessité (indirect, données)Ecriture partielle Lecture du blocEcriture différée des blocs: "buffer cache"

Page 33: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

3333

Version Octobre 2012 N°81

Positionnement dans un fichier: lseeklseek

Descripteur fichier

position

Mise à jour des tables internes (noyau)fd est une entrée dans la TDF ouverte en écriture :

Référentiel

déplacementEntier 64 bits

fd est une entrée dans la TDF ouverte en écriture :openopen, forkfork, voie standard…

Retour = position par rapport au début du fichierRéférentiel = SEEK_SET, SEEK_CUR, SEEK_END déplacement positif/négatif avant (resp. après) le début (resp. fin)

Version Octobre 2012 N°82

Positionnement : commentaires

Référentiel :SEEK SET : par rapport au débutSEEK_SET : par rapport au débutSEEK_CUR: par rapport au curseurSEEK_END :par rapport à la fin

Comment connaitre la position courante?

O i i è l fiOn peut se positionner après la finToute écriture crée des trousLa lecture de trous rend des octets nuls

Une position négative est souvent une erreur

Page 34: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

3434

Version Octobre 2012 N°83

Positionnement dans un fichier

#include <sys/types.h>#include <unistd.h>int main () { int main () {

int fd, pos;char tab[30];/* Ouverture fd */ ... pos = lseeklseek (fd, 1000, SEEK_CUR); // voir aussi SEEK_SETpos = lseeklseek (fd, -50, SEEK_END);

}readread/writewrite ⇒ accès séquentiellseeklseek ⇒ accès directPas d'accès disque

Commande(s) associée(s): éditeur…Structure(s) interne(s): tables des fichiers

Version Octobre 2012 N°84

Duplication d’entrée: dup2dup2

Descripteur fichier à dupliquer

Mise à jour des tables internes (processus et noyau)fd1 é d l TDF

à dupliquer

Descripteur fichier où copier

fd1 est une entrée dans la TDFfd2 est une entrée libre (ou qui sera fermée)le contenu de fd1 est recopié dans fd2 + MAJ de compteurs de référencesdupdup réalise la copie dans la première entrée libre

Page 35: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

3535

Version Octobre 2012 N°85

Duplication d’entrée: dupdup

Descripteur fichier à dupliquerà dupliquer

Démarche1. Sauvegarde de fd2 (dup)2. Recopie de fd1 dans fd23. Restauration (dup2 + close)

Idem à dup2dup2La copie se fait dans la 1ère entrée libre flle contenu de fd1 est recopié dans fl + MAJ de compteurs de référencesIl est nécessaire de connaître l’état de la TDFIl est nécessaire de connaître l’état de la TDF

( p )

Version Octobre 2012 N°86

dup: mécanismes de base (1)

P1 01

Position :État :Nombre :

O_RDONLYO_RDONLY

11/etc/bashrc/etc/bashrc

N° inode :Nb. copies :I d I f

22

Proc

essu

s 12345

Position :État :Nombre :

O_RDWRO_RDWR

11

Inode Infos …

22

Table fichiersEspace utilisateur Table inodes

Page 36: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

3636

Version Octobre 2012 N°87

dup: mécanismes de base (2)

Fonctionnement généralD li i d d i d fi hiDuplication du descripteur de fichierTable des fichiers (ouverture): incrémentation des référencesTable des fichiers (fermeture): décrémentation des référencesTable des inodes: pas de modificationD è ê b ffDeux accès au même buffer

Utilisationdupdup et dup2dup2 (routine)Implémentation du shell: redirections E/S

Liens avec les structures internes: voir open

Version Octobre 2012 N°88

dup: exemple simple

#include <sys/types.h>#include <unistd.h>#i l d f tl h#include <fcntl.h>int main () {

int fd, nfd;char tab1[512], tab2[512];fd = openopen ("/etc/bashrc", O_RDONLY); /* ex: fd = 3 */ ... fd dd (fd) /* fd 6 */nfd = dupdup (fd); /* ex: nfd = 6 */

readread (fd, tab1, 512);readread (nfd, tab2, 512);closeclose (fd);readread (nfd, tab2, 512);...

}

Page 37: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

3737

Version Octobre 2012 N°89

dup2: exemple simple

#include <sys/types.h>#include <unistd.h>#include <fcntl h>#include <fcntl.h>int main () {

int fd, nfd;char tab1[512], tab2[512];fd = openopen ("/etc/bashrc", O_RDONLY);/* ex: fd = 3 */

nfd = dup2dup2 (fd, 4); /* nfd = 4 *//* si non libre: "4" est fermé avant *// si non libre: 4 est fermé avant /

readread (fd, tab1, 512);readread (nfd, tab2, 512);closeclose (fd);readread (nfd, tab2, 512);...

}

Version Octobre 2012 N°90

dup: exemple de la redirection en shell

#include <sys/types.h>#include <unistd.h>#i l d f tl h#include <fcntl.h>int main () {

int pid, fd, nfd; ... if ( (pid = forkfork ()) < 0) erreur;if (pid == 0) { /* Traitement fils */

if (/* redirection */) {fd openopen (fichier ) /* création */fd = openopen (fichier, ...); /* création ... */closeclose (stdout); nfd = dupdup (fd); /* nfd = stdout */closeclose (fd); exec de la commande}

... } ... }

Page 38: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

3838

Version Octobre 2012 N°91

A propos de fcntlfcntl

Descripteur fichier

C d fd

Commande :f lf l (fd1 F DUPFD 0) dd (fd1) i 0 lib

Commande sur fd

Arguments de la commande

fcntlfcntl (fd1, F_DUPFD, 0) ⇔ dupdup (fd1) si 0 est libreF_GETFL : attributs positionnés lors de openopenF_SETFL : nouveaux attributs - dans arg. Seuls O_APPEND, O_NONBLOCK et O_ASYNC… Gestion de verrous, Signaux (interruptions IO), PID processus concerné... relatifs au fichier

Version Octobre 2012 N°92

A propos de ioctlioctl

Descripteur fichier

C d fd

Commande :

Commande sur fd

Arguments de la commande

Commande :Opérations sur un périphériqueOpérations sur un périphériquePas une commande POSIXGrand nombre de commande qui dépendent du matériel…Grand nombre de commande qui dépendent du matériel…

Page 39: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

3939

Version Octobre 2012 N°93

Opérations atomiques ou pas ?

Attention :Programmation mono ou multi processusProgrammation mono ou multi processusOn peut être interrompu entre deux instructions

Chapitre 3: Systèmes de fichiers

Page 40: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

4040

Version Octobre 2012 N°96

Structures d’un système de fichiers P

1 01

Position :État : N° inode :

Tables partagéesTables partagéesPrivéPrivé

P2 0

Proc

essu

s 12345

Nombre :…

Position :État :Nombre :

Nb. copies :Inode Infos ……

N° inode :Nb. copies :Inode Infos …

Tables Descripteurs Fichiers

Position :Ét t

Table fichiersEspace utilisateur Table inodes

Proc

essu

s P 0

12345

N° inode :Nb. copies :Inode Infos …

État :Nombre :…Position :État :Nombre :

Version Octobre 2012 N°97

Les périphériques

Quelques informations pour commencer

Périphériques = fichiers spéciauxFichiers b et c

Périphériques “caractères”terminal, réseaux

Périphériques “blocs”Disques, bandes, Cd-rom

Interface commune: appels systèmes

Page 41: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

4141

Version Octobre 2012 N°99

Propriétés d’un système de fichiers

Technologie différentes (disques, CD-ROM, CLE USB…)Montage local ou distant (NFS)

Propriétés globales spécifiquesProtections, exportation…

Montage/démontage dynamiquemount, umount (commande ou appel système)

Une hiérarchie de nomsFichiers norma répertoires spécia liens t besFichiers normaux, répertoires, spéciaux, liens, tubes…

Partitionnement des sous-hiérarchiesAllocation du média associé (blocs libre…)Deux niveaux d’organisation:

Logique (suite de blocs, unité d’allocation 1k?)Physique (secteurs, pistes, cylindres)

Version Octobre 2012 N°100

Arborescenceet volumes

/dev/rz0g

/dev/rz0a

sharedusr

/

Root filesystem

+ partition de swap/dev/rz2a

/dev/rz0gySwap…

+ partition de swap

/dev/rz1aoracle

etud

/dev/rz2g

Syst. Fic. virtuel

Page 42: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

4242

Version Octobre 2012 N°101

Création/utilisation Système de fichiers

Création

EXT2Fiable, matureCréation

mkfsmkfs (Syst. Fichiers)Taille des blocksNombre d’inodes…

Utilisationmountmount/umountumount

,Support pour fsckfsckPré allocationLiens symboliques rapides

Redémarrage après crash lentEXT3

Compatible avec EXT2EXT2mountmount/umountumountType Système de fichier

Mêmes structures de données≈ EXT2EXT2 + Journalisation

Ecriture dans un journalEcriture dans le syst. fichiers

Version Octobre 2012 N°102

Montage et démontage

Commande mount / umountMontages locaux / distantsMontages locaux / distantsVisualisation: dfexemple: mount -t ext2 -o nodev,nosuid,noexec /dev/sda3 /usr

AutomatisationFichiers: /etc/fstab/etc/init.d/* …

Page 43: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

4343

Version Octobre 2012 N°104

Le super-bloc

Gestion des blocsNombre blocs libres

Super-bloc … … 1 b

Gr. Blocs 0

…Descr. De gr. n b… 1 bBitm. blocs

« Liste » blocs libresBitmap blocs libre/occ.

Gestion des inodesNombre total inodes Compteur inodes libres« Liste » inodes libres

1 bBitm. blocsBitm. inodes 1 b…

n bTab. inodes …

Blocs Fichiers

Blocs libres

n bTab. blocs

…« Liste » inodes libres Bitmap inode libre/occupé

Gestion globaleTaille système fichiersIndicateur de modificationDuplication dans les groupes

Gr. Blocs n

Version Octobre 2012 N°105

Maintien de la cohérence FSCK 1/2

Qui ?: L'administrateur

Pourquoi ?: Synchronisation (sync)Blocs: cache buffer disqueInode: Copie en mémoire disqueSuper-bloc: Copie en mémoire disque

Quand ?:Quand ?:Réparation: Crash, Coupure alimentationPrévention: Au reboot

Réparation: Attention aux pertes de données !!

Page 44: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

4444

Version Octobre 2012 N°106

Maintien de la cohérence FSCK 2/2

Objectifs:Objectifs: Vérifications, réparationsBlocs:

Appartenances à plusieurs inodes Non référencés

Inodes: Tailles fichier/répertoire incohérentesNombres de liens incorrectsMauvais formatsNon référencés

Super-bloc:Plus de blocs que possibleMauvais format de la liste des blocs libresTotal des blocs/inodes libres incohérentsBlocs libres manquants

Version Octobre 2012 N°107

Montage/démontage et structures internes

N° inode :Nb. copies :Inode Infos …

SuperBloc :Inode cible :

…mount

t e t2

N° inode :Nb. copies :Inode Infos ……

N° inode :Nb. copies :

Inode cible :Inode à monter :Syst. Fichier :

SuperBloc :Inode cible :Inode à monter :

/dev/sda3

/

-t ext2

mount

Table inodesTable volumes

pInode Infos …

N° inode :Nb. copies :Inode Infos …

Syst. Fichier :

… copie mémoire

/dev/sda7

/usr

-t ext2

Page 45: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

4545

Version Octobre 2012 N°108

Principales arborescences 1/2

Répertoire Description

/bin Binaires

/dev Périphériques

/etc Fichiers de configuration

/lib Bibliothèques de base

/tmp Fichiers temporaires

/mnt Montages nfs

/var Fichiers de log, mail, impression, …/var Fichiers de log, mail, impression, …

/home Répertoires utilisateurs

Version Octobre 2012 N°109

Principales arborescences 2/2

Répertoire Description

/usr/X11R6 Noyau X Window

/usr/bin Binaires autres paquetages

/usr/include En-têtes

/usr/lib Bibliothèques autres paquetages

/usr/man Manuels en ligne

/usr/src Source noyau, …

/usr/local Installation locales au site /usr/local Installation locales au site

/usr/share Fichiers paquetages de l'instal.

/usr/sbin Binaires administration

Page 46: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

4646

Version Octobre 2012 N°110

Filesystem Hierarchy Standard (2004)

BinBin : Essential command binaries

Root filesystem Root filesystem (extrait)(extrait)BinBin : Essential command binariesBootBoot : Static files of the boot loaderdevdev : Device filesetcetc : Host-specific system configurationliblib : Essential shared libraries and kernel modulesmediamedia : Mount point for removeable mediamntmnt : Mount point for mounting a filesystem temporarilyoptopt : Add on application software packagesoptopt : Add-on application software packagessbinsbin : Essential system binariessrvsrv : Data for services provided by this systemtmptmp : Temporary filesusrusr : Secondary hierarchyvarvar : Variable data

Uniformisation des distributionsUniformisation des distributions

Version Octobre 2012 N°111

Organisation logique: la réalité

Une forêt de liensUn nom = un lienUn nom un lienLiens:

Entre père et filsEntre frères

Mise en oeuvreCommandes associées: ln et unlinkLiens: dur et symboliquesPar rapport aux inodes:

lien en dur [N:1] un inodelien symbolique [1:1] un inode

Page 47: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

4747

Version Octobre 2012 N°112

Organisation logique: la réalité

/

usrLien en dur

etud

shared

home

d2

etud1oracle

.profile

Gprofileetud2

Même partition

Un seul fichier

Lien symbolique

≈Raccourcietud2

etud1.profile

Lien en durLien symbolique

Pas de vérification

Version Octobre 2012 N°113

Protections: groupes / utilisateurs

Principaux élémentsGrain: le fichierOpérations:

lecture, écriture, exécution/traversée

Objet: utilisateur, groupe, autresNe pas confondre:

Groupe de l'utilisateur et groupe d'un fichierGroupe de l utilisateur et groupe d un fichierFichier /etc/groupCommande newgrp (processus)Commande chgrp (fichier)Liens symbolique / physique

Page 48: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

4848

Version Octobre 2012 N°114

Protections: de fichier/répertoire

Les fichiersr: permission de lire le fichier u g ow: permission d’écrire le fichier, i.e. ajouter, supprimer ou modifier les données qu’il contientx: permission d’exécuter le fichier

Les répertoiresr: permission de lire, donc de lister le répertoire

mais pas forcément d’en lire les fichiers…w: permission d’écrire dans le répertoire et donc de supprimer l fi hi ’il iles fichiers qu’il contientx: permission de traverser le répertoire. Sans cette permission, toute opération est interdite. Cette interdiction est héritée par tous les fichiers et répertoires qu’il contient

“Un fichier est protégé contre une modification par ses propres permissions, et contre la suppression par les permissions du répertoire qui le contient.“

Version Octobre 2012 N°115

Protections:exemple

rwxrwxrwx REP-1

rwxrwxrwx

rwxrwxrwxrwxrwxrwx REP-2 REP-3

FIC-1

PL,PROF PL,PROF

PL,PROF

rwxrwxrwx

rwxr-xr--

FIC-1

rwxrwxrwx

REP-5

REP-4

LIEN-1

rwxr----- PL,PROF

PL,PROF

PL,PROF

PL,PROF

REP-1/REP-2/REP-4/REP-6

REP-1/REP-3/REP-5/LIEN-1

REP-1/REP-2/REP-4/REP-6

LIEN-1 =

rwxrwxrwx

REP-6

FIC-2

r-xr-xr-xPL,PROF

PL,PROF

Utilisateurs: RC, PROF / JPP, ETUD1

Commandes: ls, cd, touch

REP 1/REP 2/REP 4/REP 6

Les droits qui comptent(voir chmod)

Page 49: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

4949

Version Octobre 2012 N°118

Structure générale d'un fichier

Qualités requises:Evolution de la taille des fichiersEvolution de la taille des fichiersAccès efficaceNombre de fichiers ?Accès multi-processusAccès multi-utilisateurs

Une structure interneUne structure interneDes appels systèmes appropriésDes appels systèmes appropriés

Version Octobre 2012 N°119

Structure générale d'une inode 1/2

Copie disqueCopie disque:PropriétairepGroupe propriétaireType fichierDroits d'accèsDates (accès, modification, inode)Nombres de liensAdresses disque (blocs)Taille fichierRéférence ACL au fichier et répertoire

inode = anglais (i-noeud)

Page 50: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

5050

Version Octobre 2012 N°120

Copie mémoire = Copie disque + …Verrouillé ?

Structure générale d'une inode 2/2

Verrouillé ?Processus en attenteCopie et image disque différentesPériphérique logiqueNuméro inodePointeurs inodes (une par liste)

liste des inodes libresliste des inodes (adressage calculé)

Nombre copies actives

Copie disque du super bloc

Version Octobre 2012 N°121

Inode de fichier/répertoire

5007105di i

5007105

é t i

UIDGID

T fi hiordinairerwxr-xr--

19/10/200510/10/200512/10/2005

5

653450 1 … 10

répertoirerwxr-xr--

19/10/200510/10/200512/10/2005

3

3450 1 … 10

Type fichierProtectionsDate lecture

Date modificationDate inode

Nombre liensContenu

Taille

cont

enu aaaaaaaaaaa

bbbbbcccccc

ddddddddddd

cont

enu N° Nom Un format

ls, cd, …

Page 51: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

5151

Version Octobre 2012 N°122

Arborescence et inodes

2010 .8010 ..1003 D1

2010

1003 .201000

3

Infos inode

Infos inode

2010 ..1067 D25790 F1

10

1067 .1003 ..10

67

aaaaaaaaaaacccccccbbbbbbbbbbbbbbbb57

90

Infos inodeInfos inode

Version Octobre 2012 N°123

Organisation physique0

1

2

Blocs de donnees

Taille max (blocs) =

.

...

.

3

45

6

7

8

9

simple

10 +256 +

2562 +2563

Taille max (blocs) = 10 + 256 + 2562 + 2563

ls –il

.

....

.

.........

.

...

.

.

....

double

triple

Page 52: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

5252

Version Octobre 2012 N°124

Organisation physique: Comprendre les choix

Choix d'organisationsBlocs contiguësTable des blocsCompactage, nettoyageTaille de blocsAccès indirectRépertoire / fichier p

ConséquencesFragmentationEfficacité (espace / temps)Limite des fichiers

Version Octobre 2012 N°125

Nom attributst_mode

Description Mot = bits de protection

Information sur fichiers: norme POSIX

st_ino st_dev st_nlinkst_uidst_gidst_size

i

pIdentif. Fich.: num. i-node Périphérique du fichier Nombre de liens Ident. utilisateur Ident. groupeTaille en octets D d è l st_atime

st_mtime st_ctime

Date dern. accès lecture Date dern. accès écriture Date dern. modification

Page 53: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

5353

Version Octobre 2012 N°126

Accès aux fichiers: norme POSIX

Routinefd = creatcreat (nom,mode)

Descriptioncréation nouveau fichier

fd = openopen (fichier,mode) e = closeclose (fd) n = readread (fd,buff,nb) n = writewrite (fd,buff,nb) p = lseeklseek (fd,dep,deb) e = statstat (nom,&buff) fd kdikdi ( d )

ouverture fichier lecture/ecriturefermeture fichier ouvert lecture fichier --> tampon écriture tampon --> fichier déplacement dans fichier récupération info. fichiers

é i é i fd = mkdirmkdir (nom,mode) e = rmdirrmdir (nom) e = linklink (nom1,nom2)e = unlinkunlink (nom) e = chdirchdir (nom_rep) e = chmodchmod (nom,mode)

création répertoire suppression répertoirecréation nouvelle Entréesuppression Entréechangement répertoire de Travailmodification protection de fichier

Version Octobre 2012 N°127

Contenu inode: statstat, fstatfstat, lstatlstat

Descripteur fichier

Nom fichier

Informationsinode

lstat: informations sur le lien symbolique luilstat: informations sur le lien symbolique lui--mêmemêmefstat: accès direct par le descripteur ce fichierlstat accès par le nom de fichierlstat accès par le nom de fichierMise à jour des tables internes (noyau)

Page 54: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

5454

Version Octobre 2012 N°128

Informations sur un fichier

#include <sys/types.h>#include <sys/stat.h>#include <unistd h>#include <unistd.h>int main () {

int fd, e;struct stat buf;... e = statstat ("/etc/passwd",&buf);/* autre possibilité */fd ("/ t / d" )fd = openopen ("/etc/passwd", ...);e = fstatfstat (fd, &buf);printf ("Nombre liens: %d", buf.st_nlink);

}Macros POSIX: S_ISREGS_ISREG(m), S_ISDIRS_ISDIR(m), I_SRWXUI_SRWXU

Commande(s) associée(s): lsStructure(s) interne(s): inode

Version Octobre 2012 N°129

statstat, fstatfstat, lstat lstat (compléments)

Protections + type de fichiers

Numéro dans /etc/passwd/etc/passwd

Numéro dans /etc/group/etc/group

pp

Taille en octets

Dates : modification Inode, accès et modifications du

contenucontenu

N° inode sur disque

Nombre liens en dur

+ st_dev et r_dev : majeur/mineur+ st_blksize et st_blocks

! !

Page 55: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

5555

Version Octobre 2012 N°130

Obtenir le type d’un fichier

struct stat

st_modest_mode

.

.

.

Extraire le type

<sys/stat.h>

.

Version Octobre 2012 N°131

Obtenir les droits d’un fichier

if(st->st_mode & S_IRUSR) …

struct stat

st_modest_mode

.

.

.

if(st->st_mode & S_IWUSR) …

if(st->st_mode & S_IXUSR) …

if(st->st_mode & S_IXGRP) …

……

Macros sur les protections : voir openopen

<sys/stat.h>

.if(st->st_mode & S_IXOTH) …

Page 56: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

5656

Version Octobre 2012 N°132

Obtenir le nom de login / groupe

lahire:x:1543:34:Philippe Lahire:/home/lahire:bin/bash

t t d* t id ( id t id)

struct stat

st_uidst_uid

.

.=

struct passwd* getpwuid (uid_t uid)

st gidst gid

prof:x:34:Professeurs:lahire …

st_gidst_gid

struct group* getgrgid (gid_t gid)

Voir getpwent (3)getpwent (3)

= /etc/passwd

/etc/group

+/etc/shadow

Version Octobre 2012 N°133

Synthèse getpwent(3)

Adresse de la structure si résultat OKNULL si uid ou gid n’existe pasChamps « passwd »,« passwd_gr » : adminstrateur

Page 57: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

5757

Version Octobre 2012 N°134

Information sur les périphériques

struct stat.

macros

st_dev: du S.F. qui contient le fichier

#include <sys/types.h>#include <sys/types.h>int minor (dev_t d)int minor (dev_t d)int major (dev_t d)int major (dev_t d)

st_devst_dev

.

.

st_rdevst_rdev

_ qst_rdev: du fichier spécial (si /dev/…)Majeur = classe de l’appareilMineur = numéro d’instance de la classe création par mknod(8) ou /dev/MAKEDEV

Version Octobre 2012 N°135

Manipuler des dates (1)

struct stat. fonctions Retour: NULLNULL si ¬OK

Dates GMT : nb sec. depuis 01/01/1970 à 12 PM

#include <time.h>#include <time.h>struct tm* localtime (const time_t t)struct tm* localtime (const time_t t)struct tm* gmtime (const time_t t)struct tm* gmtime (const time_t t)st_mtimest_mtime

.

st_ctimest_ctime

st_atimest_atime

pst_atimest_atime ((read), st_mtimest_mtime (write) st_ctimest_ctime ((creat, chmod, chown…)localtimelocaltime : fuseau (config. Syst.) + heure été/hivergmtimegmtime : temps GMT universel

Page 58: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

5858

Version Octobre 2012 N°136

Manipuler des dates (2)

timetime

Passer d’un Format à un autrePasser d’un Format à un autre

mktimemktime

asctime, asctime, asctime_rasctime_r

ctime,ctime,ctime_rctime_r

Version Octobre 2012 N°137

Manipuler des dates (3)

en secondes

À

fourni par « l’utilisateur »

À partir d’un struct tmtm

ctime_r + asctime_r: résultat = pointeur sur «ctime_r + asctime_r: résultat = pointeur sur « buf »»Transformation de la date (seconde ou struct tm) en chaîne de caractèresLe résultat est internationaliséLe résultat est internationalisé

Page 59: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

5959

Version Octobre 2012 N°138

Manipuler des dates (4)

Si ¬NULL: modification

d l d tde la « date »

Date au format

Heure du système

« struct tm »

Date au format « time_t »

date(1) = printf(« %s\n », ctime(time())ctime(time()))

Version Octobre 2012 N°139

Manipuler des dates (5)

Buffer + taille pour la sortie

Heure à formater

Voirstrftime (3)

Exemple de format

Page 60: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

6060

Version Octobre 2012 N°140

Internationalisation (1)

Agir sur les variables d’environnement :LC TIME : conventions utilisées pour les datesLC_TIME : conventions utilisées pour les datesLC_MONETARY, LC_COLLATE, LC_TYPE, LC_NUMERIC, LANGSigne monétaire, jeu de caractères, ordre alphabétique…

LC_ALL: S’applique à tous

enen (anglais)dede (allemand) ……

Version Octobre 2012 N°141

Internationalisation (2)

Paramétrer un programme pour l’internationalisation :#include <locale.h>setlocale (LC_ALL, « »);setlocale (LC_ALL, « fr_FR »);…

Laisser la libertéLaisser la libertéImposerImposer

time_t

struct tm

char …[MAX]

Page 61: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

6161

Version Octobre 2012 N°142

Manipuler les dates d’un fichier (1)

Nom du fichier

Nouvelles « dates »

t ti

La date associée à l’inode est mise à jourtimes = NULL ⇒ date couranteil faut avoir les droits en écriture sur le fichier

st_atimest_mtime

Version Octobre 2012 N°143

Manipuler les dates d’un fichier (2)

#include <sys/types.h>#include <utime.h> i t i () int main () {

int fd, e;struct utimbuf tbuf;... tbuf.actime = ... tbuf.modtime = ... e = utimeutime ("/etc/passwd", &tbuf);( p , f);

}

Commande(s) associée(s): ls, touchStructure(s) interne(s): inode

Page 62: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

6262

Version Octobre 2012 N°144

Gérer le propriétaire d'un fichier(1)

d f h

Kernel: CAP_CHOWN

Nom du fichier

Propriétaire& groupe

Descripteur de fichier

chown ≈ fchownlchown lchown (lien symbolique) chown chown (fichier référencé)MAJ de st_ctime st_ctime (c’est normal?)

fichier

Il y a aussi chgrpchgrp

Version Octobre 2012 N°145

Gérer le propriétaire d'un fichier (2)

#include <sys/types.h>#include <unistd.h>int main () int main () {

int fd, e;... e = chownchown ("/etc/passwd", 1014, 50);/* autre possibilité */fd = openopen ("/etc/passwd", ...);e = fchownfchown (fd, 1014, 50);

}}

Commande(s) associée(s): chownStructure(s) interne(s): inode

Page 63: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

6363

Version Octobre 2012 N°146

Créer un lien (en dur)

Nom initial

Sorte d’alias…Incrémentation du nombre de liens en dur

Nom du lien

Incrémentation du nombre de liens en durAppartenance au même Système de FichiersPas de liens en l’air (gestion par le système)Efficacité: pas de fichier intermédiaireMais: retrouver les noms « à la main »…

Version Octobre 2012 N°147

Créer un lien symbolique

Nom initial

Nom du lien

nombre de liens en dur sur newpathnewpath: 12 inodes : celle du lien et celle du fichier ⇒ Efficacité vs lisibilité

Liens en l’air possiblesLien à travers les systèmes de fichiers

Page 64: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

6464

Version Octobre 2012 N°148

Supprimer un lien

d f hNom du fichier

Effacement d’un lien en durEffacement du fichier si c’est le dernierIl faut avoir les droits…Il faut avoir les droits…

Version Octobre 2012 N°149

Création/suppression d'un lien

#include <unistd.h>int main () int main () {

int e;... e = linklink ("/etc/passwd", "/tmp/passwd");e = symlinksymlink ("/etc/passwd", "/tmp/passwd");e = symlinksymlink ("/etc", "/tmp/etc");

Le fichier lien symbolique

e = unlinkunlink ("/tmp/passwd"); e = unlinkunlink ("/tmp/etc");

}Commande associée(s): ln, unlink, rmStructure(s) interne(s): inode

Page 65: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

6565

Version Octobre 2012 N°150

Rappel sur les droits d’accès (open)

Pour donner des droits

Le propriétaire

Le Groupe propriétairee G oupe p op éta e

Les autres

Version Octobre 2012 N°151

Vérifier l’accès à un fichier

Nom du fichier

modemode = droit de …

fichier

Droits demandés

R_OKR_OK: lectureW_OKW_OK: écritureX_OKX_OK: exécution ou traverséeF_OKF_OK: existence

Page 66: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

6666

Version Octobre 2012 N°152

Gérer les protections d’un fichier (1)

Nom du fichierfichier

droits

DescripteurDe fichier

modemode = combinaison des 3 permissions pour les 3 catégories et de 3 indicateurs⇒⇒ S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IROTHS_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IROTH⇒⇒ S_ISUID | S_IRGRP | S_IROTHS_ISUID | S_IRGRP | S_IROTH

Indicateurs…

Version Octobre 2012 N°153

Gérer les protections d’un fichier (2)Fichiernormal

(*)

Répertoire

(*)

3 indicateurs : interprétation ≠ (fichier normal / répertoire)(*) gestion de verrou si ¬exécutable (voir cours)

Page 67: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

6767

Version Octobre 2012 N°154

Gérer les protections d'un fichier (3)

#include <sys/types.h>#include <sys/stat.h>int main () {

int fd, e;... e = chmodchmod ("/etc/passwd", S_IRWXU);/* autre possibilité */fd = openopen ("/etc/passwd", ...);pp ( p , );e = fchmodfchmod (fd, S_IRWXU);

}

Commande(s) associée(s): chmodStructure(s) interne(s): inode

Version Octobre 2012 N°155

Manipuler le masque de protection

Nouveau masque

Utilisation des 9 macros Utilisation des 9 macros 3 permissions pour les 3 catégories

modemode idem chmodchmodmodemode = idem chmodchmodS_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IROTHS_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IROTH

Mais : marque une interdictionSe combine avec ce qui est donné par open: ETS’applique au futur fichiers créés

Page 68: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

6868

Version Octobre 2012 N°156

Protections de fichier et processus (1)

Processus PP

RUIDEUIDSUID

RGIDEGIDSGID

real user-id

effectiveuser-id

real group-id

effectivegroup-id

saved set saved setsaved setuser-id

sa ed setgroup-id

Version Octobre 2012 N°157

Protections de fichier et processus (2)

Processus PP=Sauf si

login + group(s)=sauf si

RUIDEUIDSUID

RGIDEGIDSGID

set-user-id sauf si set-group-id

ownerowner

Restaurer aprèsRestaurer après«« set/drop privilegeset/drop privilege »»

Fichier de PP

ou

ownerownergroupgroup

OU: utilisation de :setuid, setgid (posix)setreuid, setregid…Avoir les privilèges

Différents effets : cours sur les processus

Contrainte (si EUID != 0):new = RUID/SUID

Page 69: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

6969

Version Octobre 2012 N°158

Appels systèmes et liens symboliques

S’applique surS’applique sur…

Le fichier lien symbolique :Le fichier lien symbolique :lchown, chown, lstat, readlink, unlinkremove, rename

Le fichier luiLe fichier lui--même :même :chmod, creat, chown, link, mkdir, open, stat access, chdir, exec, mkfifo, opendir, pathconf, truncate, rename

Version Octobre 2012 N°159

Créer/Supprimer un répertoire (1)

Nom du répertoire

droits

S_ISGIDS_ISGID : droits du gr. Du répertoire = droits de ses fichiersS_ISVTXS_ISVTX : création de fichiers ¬renommer & ¬supprimerS_IX… S_IX… : X est pour « traverser »rmdirrmdir: le répertoire doit être vidermdirrmdir : fonctionne comme unlinkunlink

Page 70: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

7070

Version Octobre 2012 N°160

Créer/supprimer un répertoire (2)

#include <sys/types.h> #include <sys/stat.h> i t i () int main () {

int e;... e = mkdirmkdir ("/tmp/myrep", S_IWUSR);e = rmdirrmdir ("/tmp/myrep");

}

Commande(s) associée(s): mkdir, rmdir, rmStructure(s) interne(s): inode

Version Octobre 2012 N°161

Ouvrir un répertoire

Nom du répertoirerépertoire

DIRDIR : un peu comme FILE (section 3)Curseur placé sur la 1ère entréeCombien d’entrée minimum?

Page 71: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

7171

Version Octobre 2012 N°162

Parcourir un répertoire

«descripteur»

N° inodeNom fichier

Seul endroit où est stocké un nom de fichierAvance le curseur

Et le chemin ?

Version Octobre 2012 N°163

Réinitialiser/Fermer un répertoire

«descripteur»

(*)

(**)

(*) Position sur la 1ère entrée (affecte table noyau)(**) Affecte la TDF et les tables du noyau(**) rend les ressources aux système

(**)

Page 72: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

7272

Version Octobre 2012 N°164

Réinitialiser/Fermer un répertoire

«descripteur»

(*)

(**)

(*) Position sur la 1ère entrée (affecte table noyau)(**) Affecte la TDF et les tables du noyau(**) rend les ressources aux système

(**)

Version Octobre 2012 N°165

Accès au contenu d'un répertoire

#include <sys/types.h>#include <dirent.h>i t i () {int main () {

DIR* dir;struct dirent * entry;dir = opendiropendir ("/var"); entry = readdirreaddir (dir);printf ("%s - %d", entry->d_name, entry->d_ino);closedirclosedir(dir);

}}seekdirseekdir, telldirtelldir, ...

Commande(s) associée(s): ls, mv, …Structure(s) interne(s): tables des fichiers

Page 73: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

7373

Version Octobre 2012 N°166

Manipuler le répertoire courant (1)

Nom de fichier

«descripteur»

fichier

Affecte le contenu d’un processusAllocation de bufbuf + taille allouée

Chemin absolu

Version Octobre 2012 N°167

Manipuler le répertoire courant (2)

#include <unistd.h>int main () { {

int fd, e;... e = chdirchdir ("/etc");/* autre possibilité */fd = openopen ("/etc", ...);e = fchdirfchdir (fd);

}}Table des fichiers: Changement nombre de références

Commande(s) associée(s): cdStructure(s) interne(s): Tables des fichiers, processus

Page 74: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

7474

Version Octobre 2012 N°168

Renommer / Déplacer un fichier

Fichier de départ

newpathnewpath dans le même système de fichiersAutres liens en du non affectés

Fichier d’arrivée

Autres liens en du non affectésSi cible existe elle est écraséeNombreuses restrictionsChemin correct, cible: répertoire non vide,…

Commande mvmv

Version Octobre 2012 N°169

Synchronisation Disque/buffer

Descripteur de fichier

syncsync: synchronise les buffers (écriture) et disques fsyncfsync: idem mais pour un fichierDifférer l’écriture ⇒ accélérer les échangesToutes les xx sec. + arrêt de la machine

Page 75: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

7575

Version Octobre 2012 N°170

Synchronisation Disque/buffer

#include <unistd.h>int main () (){

int fd, e;... /* Ouverture fichier en écriture */ fd = openopen ("/etc/passwd", ...);...

ff (fd)e = fsyncfsync (fd);syncsync () /* S. F. */

}Commande associée(s): syncStructure(s) interne(s): Tables, buffer, inode

Version Octobre 2012 N°180

Système de fichier /proc (1)

Processus en cours

Autres informations : mémoire, noyau, paramètres systèmes, …

Page 76: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

7676

Version Octobre 2012 N°181

Système de fichier /proc (2)

Systèmes de fichierssupportés

Information sur la mémoire

Version Octobre 2012 N°182

Système de fichier /proc (3)

Information sur la table des volumes montés

Page 77: Version Octobre 2012 N°2 Organisation du coursdeptinfo.unice.fr/.../cours-systeme-2012-2013-part1.pdf · Programmation système & 3èmeannée Licence MIAGE Réseaux Philippe Lahire

7777

Version Octobre 2012 N°183

Système de fichier /proc (4)

Répertoire courantRépertoire courantExécutableExécutable

Répertoire RacineRépertoire Racine

Propriétaire, PIDPropriétaire, PID

Variables environnementVariables environnement