Les processus

publicité
IN3R21
Systèmes d’exploitation
Damien Masson
[email protected]
Année 2009-2010
(Transparents © Xavier Hilaire)
Objectifs du cours
 Comprendre
les principes utilisés dans tout
système d’exploitation moderne
 Comprendre comment fonctionne UNIX
 Savoir écrire des scripts en shell standard, ce
qui suppose la maîtrise :


de la syntaxe et du fonctionnement du shell
des expressions régulières
2
Objectifs du cours
IN4R12 : programmation système
Synchro de processus
fork
Mémoire partagée
Signaux ...
Concepts
fondamentaux
(processus,fichiers,
mémoire,...)
IN3R21 : systèmes
d’exploitation
Shell
Expressions régulières
3
Notions de base sur les
systèmes d’exploitation
4
Définition
Système d’exploitation n.m. : “Logiciel de base d'un
ordinateur destiné à commander l'exécution des
programmes en assurant la gestion des travaux, les
opérations d'entrée-sortie sur les périphériques,
l'affectation des ressources aux différents processus,
l'accès aux fichiers, ainsi que la comptabilité des travaux.”
(Grand dictionnaire terminologique)

Plus simplement : ensemble logiciel faisant abstraction
des ressources matérielles d’une machine, en présentant
toujours une même interface (pilotes, bibliothèques,
commandes…) à l’utilisateur.

5
Bref historique


1954 : Gene Amdahl sort le premier système
d’exploitation pour IBM 704
Configuration très variable d’un client à l’autre, bien
que certaines caractéristiques aient été communes
(CPU: 36 bits/mot, PF et entier; bandes
magnétiques, cartes perforées; unités d’impression)
6
Bref historique





1961 : CTSS, 1er système multi-utilisateurs mis au
point au MIT par Corbato et Fano.
1964 : naissance du projet MULTICS (AT&T et MIT),
qui ne se finalisera jamais
1969 : K. Thompson et D. Ritchie écrivent le premier
SE à temps partagé sur DEC PDP-7: naissance
d’UNIX. Portage sur PDP-11 deux ans plus tard.
1973 : noyau UNIX entièrement réécrit en C : UNIX
Time-Sharing System V4.
1974 : G. Kildall écrit CP/M. Dans le même temps,
Apple développe ProDOS.
7
Bref historique




1980 : Microsoft lance XENIX (Motorola 68k), qui
deviendra DOS. IBM manque de racheter CP/M et se
tourne vers Microsoft pour coécrire son système.
1981 : sortie du premier PC à base Intel par IBM,
exploité sous PC-DOS 1
1985 : sortie de l’Amiga 1000 par Commodore.
AmigaDOS = SE dédié avec interface graphique. IBM
lance le développement de OS/2 dans le même
temps.
1987 : sortie du Macintosh II par Apple. Sortie de
Windows 2.0 par Microsoft. Lancement de Solaris par
Sun Microsystems.
8
Bref historique







1988 : sortie de A/UX par Apple.
1989 : Création de NeXT par Steve Jobs. Sortie de
Windows 3.0 par Microsoft.
1992 : Sortie de Windows 3.1 par Microsoft.
1994 : Sortie de AIX par IBM. Sortie de Windows 95
et de Windows NT 3 par Microsoft. Sortie de Linux
1.0 par Linus Torvald.
1998 : Sortie de Windows 98 par Microsoft
1999 : Noyau Linux 2.2 multi-plateforme: x86, Alpha,
Sparc, m68k, MIPS.
2001 : Sortie de Windows XP par Microsoft,
lancement de Mac OS X par Apple.
9
Définition
Il faut donc exploiter:
Le(s) processeur(s)
 Les programmes qu’ils doivent exécuter :




La mémoire



réelle ou virtuelle? partagée?
pagination et va-et-vient sur disque (swap)
Les disques



un ou plusieurs en même temps?
quelles priorités? Droits d’accès au matériel?
partitionnement
systèmes de fichiers, fichiers et droits d’accès
Le réseau
 Tous les autres périphériques
} pas traités dans cette unité
10
Modèle de machine
Modèle le plus fréquemment utilisé : von Neumann:
 Mémoire séparée du/des processeur(s)
 Instructions et données représentables dans un même type de
mémoire
mémoire
CPU1
...
bus
CPUn
bus
disque
imprimante
clavier
11
Les processeurs





Possèdent des « variables internes » appelées
registres, d’accès unitaire en temps
Réalisent les opérations logiques
(et,ou,négation,ou exclusif), et arithmétiques
(+,-,*,/), entières ou à point flottant
Réalisent des entrées/sorties sur le bus de
données (accès aux périphériques)
Adressent la mémoire octet par octet, et au
moins mot par mot.
Exécutent leurs programmes sans forcément
savoir ce qu’exécutent les autres processeurs
12
Les processeurs
 Sont
capables d’exécuter des processus en
mode superviseur ou utilisateur (bits Ring0
sur x86, MSR_PR sur PowerPC) :


Mode superviseur : accès autorisé à l’intégralité
de la mémoire physique de la machine, et aux
différents bus d’E/S. C’est le mode processeur
sous lequel s’exécutent la plupart des différents
composants du système.
Mode utilisateur : accès à la mémoire limité aux
zones allouées au processus. Accès aux bus
interdit. C’est le mode processeur sous lequel
s’exécute la majorité du code applicatif.
13
Les processeurs



Lorsqu’un processus tente d’accéder au bus, ou à une
zone mémoire qui ne lui appartient pas, le processeur
l’interrompt et signale la faute au processus créateur
de celui fautif (le shell, ou tout autre programme) par
une interruption
Un processus tournant en mode utilisateur peut
s’interrompre pour exécuter certaines routines
prédéfinies en mode superviseur par le mécanisme
d’interruption logicielle (instruction INT sur Intel. A
rapprocher de TRAP sur 68k pour les exceptions)
Vocabulaire : privilégié, protégé (architectures Intel)
et superviseur sont synonymes.
14
Les processus



Le processus est l’unité de programme indivisible
exécutée par un processeur
Ne pas confondre processus et programme : un
programme peut être constitué de plusieurs
processus. Il peut également être exécuté en plus
d’un exemplaire (instance) sur un même système.
Un système est dit monoprocessus s’il ne peut
exécuter qu’un seul processus à la fois: l’exécution
d’un nouveau processus requiert la terminaison du
processus courant. Il est dit multiprocessus dans
le cas contraire.
15
Processeurs et processus



Un système est dit multiprocesseur s’il supporte
l’exécution de plusieurs processus sur plus d’un
processeur ; monoprocesseur dans le cas
contraire.
Un système monoprocesseur et multiprocessus
est parfois dit à temps partagé.
Le problème de l’exécution de p processus par n
processeurs est résolu par un composant du
système appelé ordonnanceur (scheduler)
16
Processeurs et processus
CPU0
Monoprocesseur,
temps partagé
C
B
A
t
CPU0
C
A
t
Multiprocesseur
CPU1
C
B
t
17
Organisation d’un système
Applicatifs utilisateur
Applicatifs système
Bibliothèque système
Fonctions système
Ordonnanceur
Pilotes de périphériques
et composants système
Matériel
Mode utilisateur
Mode superviseur
Shell, services (ftp, lp,…)
Gestion de la mémoire, des
fichiers, des périphériques
Gestion des processus et
événements
Appel de fonction
18
Interruption
Organisation d’un système




Le noyau (kernel) d’un système d’exploitation
est l’ensemble logiciel indivisible minimal qui est
systématiquement chargé au démarrage
D’un point de vue processeur, il est vu comme
du code s’exécutant en mode superviseur
Deux grands schémas d’organisation
classiques : monolithique et à micro-noyau. Le
choix dépend du niveau de service minimal qui
doit être offert.
(Un troisième schéma est celui du client-serveur)
19
Organisation d’un système
Système monolithique : fonctionnalités concentrées
dans le noyau. Aucune hiérarchie imposée sur les
appels de fonctions entre composants.
Applicatifs
Bibliothèque système
noyau
Gestion RAM
Ordonnanceur
Syst. de fichiers
Matériel
Pilotes
Réseau
20
Organisation d’un système
Système à µ-noyau : tout ce qui ne nécessite pas
un accès direct au matériel est retiré du noyau.
Réseau
Applicatifs
Gestion RAM
Bibliothèque système
Syst. de fichiers
noyau
Matériel
Pilotes
Ordonnanceur
21
La mémoire

Mémoire morte, ou ROM (read only memory) :




Accès alétoire, en lecture seulement, souvent lente
(recopie en RAM usuelle)
Contient le code exécutable nécessaire au démarrage de
la machine
Variante: EPROM (Editable Programmable ROM)
Mémoire vive, ou RAM (random access memory) :


Contient le code exécutable et les données du noyau du
système d’exploitation et des processus
Mémoire à accès rapide, modifiable, et organisée selon le
schéma suivant pour chaque processus :
22
La mémoire réelle
Adresses croissantes
Pile
Pointeur de pile: SP
}
Tas
(données
dynamiques)
code exécutable
+
données constantes
Collision possible
(dépassement de pile)
Pointeur de segment de
données: DP
Pointeur de segment
de code : CS
23
La mémoire virtuelle




Idée de la mémoire virtuelle = permettre à un programme
d’accéder à un espace mémoire plus grand que l’espace
mémoire physique réel
La mémoire physique est partagée en segments
(segmentation), pages (segments de taille fixe, pagination), ou
une combinaison des deux
A un instant donné, seuls les segments auxquels les processus
actifs ont fait récemment accès se trouvent en mémoire. Les
autres sont écrits sur disque.
Lorsqu’un processus veut accéder à une adresse virtuelle v
donnée :



la MMU (memory management unit) détermine le numéro de
segment s et le déplacement d dans ce segment tels que v=(s,d)
si s est présent en mémoire => accès direct à (s,d)
si s n’est pas présent en mémoire => défaut de segment. Il faut
recharger le segment en défaut depuis le disque
24
La mémoire virtuelle


Remarque : un processeur 32 bits peut adresser jusqu’à 2^32 =
4096 MO = 4 GO. Sur Linux 32 bits, chaque processus adresse
jusqu’à 3 GO d’espace virtuel, le GO restant étant alloué pour la
table de pages et les données système du processus (gâchis !)
Quel algorithme de remplacement de page utiliser ?




algorithme de référence de Belady : choisir la page référencée le +
tard possible dans le futur. N’a qu’un intérêt théorique
algorithme aléatoire : on choisit la page au hasard (proposé par
IBM sur RS). Facile à implémenter, mais pas très bon.
algorithme FIFO : choisir la page la plus ancienne. Mauvaise
stratégie (pas corrélation avec la fréquence d’utilisation)
algorithme LRU (least recently used) : choisir la page la moins
récemment utilisée. Problème : suppose que l’on tienne à jour les
fréquences d’utilisation de chaque page (utilisation d’une pile et
d’un indicateur de vieillissement)
25
Les périphériques

Communiquent avec le(s) processeur(s) par
l’intermédiaire du bus de données:




soit octet par octet : périphériques « caractère », par
ex.: clavier, souris.
soit par blocs à des adresses convenues :
périphériques « bloc », par ex.: disque dur.
Bloquent indirectement les processeurs si les
bus de données et mémoire (système) sont
confondus
Peuvent solliciter l’attention des processeurs par
le mécanisme d’interruption
26
Le système UNIX
GNU/Linux
27
Qu’est-ce que UNIX ?



Une marque, détenue à l’origine par AT&T (Bell
Labs) et aujourd’hui par Open Group (consortium
industriel)
Succède à Unics (lui-même sucesseur de
Multics), projet commun à Bell Labs (AT&T), MIT,
et General Electric
UNIX s’inspire en très large partie de code
public, hérité soit du monde universitaire (U.
Californie à Berkeley, en particulier), et a été
enrichi par des sociétés privées (HP, IBM, Novel,
Sun Microsystems,..)
28
Qu’est-ce que UNIX ?
29
Qu’est-ce que GNU/Linux ?
 GNU/Linux
(ou Linux) n’est pas une
version d’UNIX
 Mais il en reprend les idées générales :





Monolithique
Multiprocessus
Multi-utilisateurs : plusieurs utilisateurs
peuvent exécuter simultanément leurs
processus sur une même machine
Code source écrit majoritairement en C
Notions système (processus, signaux,
utilisateurs, droits, terminaux, ...) identiques
30
Qu’est-ce que GNU/Linux ?
 Avantages



:
Code source public (licence GPL)
Haute portabilité (supporte les architectures i386,
Power, PC98, Alpha, MIPS, Sparc, …)
Applications très nombreuses
 Inconvénients



:
Nombre de distributions sur le marché
Spécificités introduites dans certaines d’entre
elles
Fiabilité et mise à l’épreuve moins poussées que
sur la plupart des systèmes commerciaux
31
Schéma général
Accès réservé à l’administrateur
terminaux
liaison terminal
+ display X11
liaisons terminaux
+ displays X11
Eric
openoffice
Joël
Processus (util.)
openoffice (eric)
firefox (joel)
maia (alain)
console
firefox
Alain
maia
32
Utilisateurs et groupes




Un utilisateur UNIX = une entrée identifiée par
un entier unique (UID) dans la table des
utilisateurs. NB: il ne s’agit pas forcément d’une
personne physique
Un groupe UNIX = une entrée identifiée par un
entier unique (GID) dans la table des groupes
Table des utilisateurs et des groupes : fichiers
/etc/passwd et /etc/group . Accès direct si
politique de gestion locale, délocalisée sinon
(NIS, PAM, Kerberos, …)
Tout utilisateur doit être membre d’au moins un
groupe
33
Utilisateurs et groupes
Une ligne d’un fichier /etc/passwd :
hilairex:x:516:488:hilairex:/mnt/users_hdb8/:/bin/bash
Login
UID GID
Nom complet
Mot de passe crypté
(x si gestion délocalisée,
* si compte interdit)
Shell par défaut
Répertoire HOME
(par défaut)
Deux lignes d’un fichier /etc/group :
compta::524:dupontl
users::488:dupontl,durandt,hilairex
Nom GID Liste de logins
Mot de passe crypté (ou vide si inutilisé)
34
L’utilisateur root




C’est l’administrateur système
Il est le seul a avoir un UID et GID à zéro (0)
A autorité sur tout (accès aux fichiers, au
matériel, aux droits des autres utilisateurs, aux
processus en lecture comme en écriture).
Définit généralement des utilisateurs fictifs et des
groupes pour limiter les droits des autres
utilisateurs ou applications:
nobody:*:-2:-2:Unprivileged User:/:/usr/bin/false
root:*:0:0:System Administrator:/var/root:/bin/sh
daemon:*:1:1:System Services:/var/root:/usr/bin/false
lp:*:26:26:Printing Services:/var/spool/cups:/usr/bin/false
35
Les processus
Tout processus Linux (et UNIX) :
 Possède un identificateur entier unique : le
PID (Process ID)
 Est toujours créé par clonage d’un
processus existant, qui devient son père
 Dispose des droits conférés à l’utilisateur
qui l’a lancé (accès fichiers, réseau, etc.)
 Ne peut lire et écrire que dans l’espace
mémoire que le système lui a alloué ou qu’il
alloue lui-même dynamiquement, sauf s’il
s’agit de mémoire partagée
36
Les processus
 Se
trouve toujours dans l’un des trois états
{ élu, prêt, bloqué } et peut transiter vers un
autre état comme ceci :
Elu
T1
Prêt
T2
Bloqué
T3
•
Signification
des états:
•
•
Bloqué: en attente de la réalisation d’un
événement d’E/S
Prêt: dégagé de toute attente d’E/S
Elu: effectivement en cours d’exécution
37
Les processus : transitions
•
•
•
T1: Linux est préemptif, c.à.d que l’ordonnanceur
peut décider à tout moment de suspendre l’exécution
d’un processus au profit d’un autre; dans ce cas le
processus retourne dans l’état prêt. Les commandes
nice et renice permettent d’attribuer une priorité
d’exécution à chaque processus.
T2 : lorsqu’un processus est en attente d’un
événement d’E/S (réception d’un caractère sur port
série, par ex.), le noyau l’interrompt et le place dans
l’état bloqué. Il passe alors la main au premier
processus prêt de la file d’attente.
T3 : le gestionnaire d’événements est programmé
pour débloquer les processus dans l’état bloqué sur
réception de l’événement matériel attendu. Dans ce
cas, le processus débloqué retourne dans l’état prêt. 38
Les processus : ordonnancement
Linux utilise 40 files circulaires (tourniquets, de -19 à 20) sur
lesquelles tournent des processus de même priorité + une métafile.
p1
20
19
p2
p5
p3
p4
…
• Exécution des processus de
priorité numérale basse
privilégiée par un temps
d’exécution plus long
• Ajout/retrait d’un processus
sur un tourniquet en temps
unitaire
• Les temps d’exécution
alloués (quantum) sont
réajustés dynamiquement
• La commande renice permet
d’envoyer un processus vers
un autre tourniquet
-19
p3
p3
39
Les processus
La commande ps : afficher les processus lancés
(nombreuses options)
$ ps -auxf
USER
PID %CPU %MEM
root
1 0.0 0.0
root
root
…
nobody
daemon
root
hilairex
hilairex
hilairex
hilairex
VSZ
1560
2
3
0.0
0.0
0.0
0.0
0
0
3334
3353
10611
10613
10614
10834
10883
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.1
0.0
0.1
0.1
0.2
0.3
0.0
11420
1688
6944
7024
4316
6628
2724
RSS TTY
536 ?
0 ?
0 ?
1144
616
2028
2012
2976
3176
948
?
?
?
?
pts/0
pts/0
pts/0
STAT START
S
Feb02
TIME COMMAND
0:00 init [5]
S
SN
Feb02
Feb02
0:00 [migration/0]
0:00 [ksoftirqd/0]
Ssl
Ss
Ss
S
Ss
S
R+
Feb02
Feb02
13:33
13:33
13:33
13:54
13:59
0:00 mDNSResponder
0:00 /usr/sbin/atd
0:00 \_ sshd: hilairex
0:00
\_ sshd: hilairex@pts/0
0:00
\_ -bash
0:00
\_ xterm
0:00
\_ ps -auxf
Option
Effet
Option
Effet
-l
Affichage long
-u
Affiche le nom d’utilisateur
-a
Affiche tous les processus
-x
Inclure les processus sans terminal
-m
Informations mémoire
-f
Arbre des appels
40
Les processus
La commande top : moniteur de processus
$ top -c
Tasks: 99 total,
2 running, 96 sleeping,
0
Cpu(s): 0.0% us, 0.3% sy, 0.0% ni, 99.7% id,
Mem:
1034240k total,
659612k used,
374628k
Swap: 1004052k total,
0k used, 1004052k
PID USER
PR
NI
10940 hilairex
16
0
2000 1060
804 R
0.3
0.1
0:00.01 top -c
1 root
16
0
1560
536
472 S
0.0
0.1
0:00.49 init [5]
2 root
RT
0
0
0
0 S
0.0
0.0
0:00.00 [migration/0]
34
19
0
0
0 S
0.0
0.0
0:00.00 [ksoftirqd/0]
3 root
VIRT
RES
stopped,
1 zombie
0.0% wa, 0.0% hi, 0.0% si
free,
28744k buffers
free,
385436k cached
SHR S %CPU %MEM
Option
…
Effet
-c
Afficher la ligne de commande
-p int
Ne surveiller que le processus int -d
(cumulatif)
TIME+
COMMAND
Option
Effet
-u util
Affiche seulement les processus de
l’utilisateur util
Inclure les processus sans terminal
Trier selon un champs particulier: taper ‘F’ une fois la
commande lancée. Autres options: taper ‘?’ ou ‘h’.
41
Les fichiers



TOUT est fichier
Linux (comme UNIX) présente à l’utilisateur l’ensemble des
fichiers auxquels le système à accès sous forme d’un arbre de
répertoires dont la racine est /
Il existe 5 types de fichiers :




Fichier ordinaire
Répertoire : fichier spécial lu par le système, et qui implémente
une liste d’autres fichiers
Liens matériels : pointeur référençant directement le numéro
d’i-node (voir + loin) d’un fichier ordinaire déjà existant
Lien symboliques: fichier spécial lu par le système, dont le
contenu indique un nouvel emplacement à partir duquel il faut
continuer la recherche du fichier cible. A la différence d’un lien
matériel, un lien symbolique peut ne plus « pointer » sur rien.
42
Les fichiers
Exemple à propos des liens :
$ ls -l
total 8
-rw------1 hilairex wheel 18 9 mar
$ cat test
Ceci est du texte
$ ln -s test liensymb
$ ln test lienmat
$ ls -l
total 24
-rw------2 hilairex wheel 18 9 mar
lrwx-----1 hilairex wheel
4 9 mar
-rw------2 hilairex wheel 18 9 mar
$ rm test
$ ls -l
total 16
-rw------1 hilairex wheel 18 9 mar
lrwx-----1 hilairex wheel
4 9 mar
$ cat liensymb
cat: liensymb: No such file or directory
$
01:43 test
lien symbolique
lien matériel
01:43 lienmat
01:43 liensymb -> test
01:43 test
01:43 lienmat
01:43 liensymb -> test
43
Les fichiers


Fichier de contrôle de périphérique (dans /dev) : fichier
spécial servant à accéder directement à un périphérique
(très souvent par read(), write(), ou ioctl()).
Tout nœud de l’arbre de fichiers:
 soit appartient au même périphérique que son père,
 soit est la racine de l’arbre des fichiers d’un autre
périphérique (on dit que les périphériques sont
montés en différents points de l’arbre)
44
Les fichiers
/
mnt (/mnt)
cdrom (/mnt/cdrom)
floppy (/mnt/floppy)
usr (/usr)
Serveur NFS
(network filesystem)
bin (/usr/bin)
local (/usr/local)
QuickTimeᆰ et un
dホcompresseur TIFF (non compressホ)
sont requis pour visionner cette image.
LAN
QuickTime ᆰet un
dホcompresseur TIFF (non compressホ)
sont requis pour visionner cette image.
45
Les fichiers
Montage de périphériques ou affichage de périphériques
montés : la commande mount
Invocation sans paramètres : affichage simple
$ mount
/dev/sda7 on / type ext3 (rw)
none on /proc type proc (rw)
none on /proc/bus/usb type usbfs (rw)
none on /sys type sysfs (rw)
none on /mnt/floppy type supermount
(rw,sync,dev=/dev/fd0,fs=ext2:vfat,--)
/dev/sda1 on /mnt/win_c type ntfs (ro,umask=0,nls=iso8859-15)
/dev/sda2 on /mnt/win_d type vfat (rw,umask=0,iocharset=iso885915,codepage=850)
/dev/sda5 on /usr type reiserfs (rw,notail)
yfiler:/vol/user on /nfs/user type nfs (rw,tcp,addr=147.215.1.8)
xfiler:/opt on /nfs/opt type nfs (rw,addr=147.215.1.2)
nfsd on /proc/fs/nfsd type nfsd (rw)
46
Les fichiers
Invocation avec paramètres :
mount [-t type] [-o options] desc mpoint
où desc est un descripteur de périphérique (entrée dans /dev si
attaché à la machine) et mpoint un chemin valide et libre (non déjà
monté). Le type de système de fichiers doit souvent être spécifié; les
options contrôlent divers paramètres de montage (lecture seule,
synchrone / asynchrone, accès pour les utilisateurs ordinaires, …)
Exemple : montage d’un CDROM (format ISO 9660):
[root@mandribule ~]# ls -l /mnt/cdrom
total 0
[root@mandribule ~]# mount -t iso9660 /dev/hda /mnt/cdrom
mount: périphérique de type bloc/dev/hda est protégé en écriture, on le
monte en lecture seulement
[root@mandribule ~]# ls -l /mnt/cdrom
total 61
dr-xr-xr-x 10 root root 4096 sep 26 22:37 i586/
-r--r--r-- 35 root root 29009 sep 21 13:10 release-notes-fr.txt
-r--r--r-- 35 root root 29017 sep 21 13:07 release-notes.txt
[root@mandribule ~]#
47
Les fichiers
Remarques:



Le montage « cache » toute la hiérarchie de fichiers dont le point
de montage est la racine
Il faut normalement être administrateur pour réaliser un montage;
mais l’autorisation peut être conférée via l’option « users » dans
le fichier /etc/fstab
Le fichier /etc/fstab contient les entrées des systèmes de fichiers
habituellement montés sur la machine:
$ cat /etc/fstab
/dev/sda7 / ext3 defaults 1 1
/dev/hda /mnt/cdrom auto umask=0,users,iocharset=utf8,noauto,ro,exec 0 0
/dev/sda1 /mnt/windows ntfs umask=0,nls=utf8,ro 0 0
none /proc proc defaults 0 0
/dev/sda6 /usr reiserfs notail 1 2
/dev/sda5 swap swap defaults 0 0
$
48
Les fichiers


Si un montage est spécifié dans /etc/fstab, il suffit de passer le
point de montage en argument à mount pour monter le
périphérique.
C’est également le seul moyen d’autoriser un utilisateur à
monter un périphérique s’il a l’option « users » - exemple :
$ mount -t iso9660 /dev/hda /mnt/cdrom
mount: seul l'usager ROOT peut faire cela
$ mount /dev/hda /mnt/cdrom
mount: seul l'usager ROOT peut faire cela
$ mount /mnt/cdrom
$ ls -l /mnt/cdrom
total 61
dr-xr-xr-x 10 root root 4096 sep 26 22:37 i586/
-r--r--r-- 35 root root 29009 sep 21 13:10 release-notes-fr.txt
-r--r--r-- 35 root root 29017 sep 21 13:07 release-notes.txt
$

mount -a a pour effet de monter tous les systèmes déclarés
dans /etc/fstab, sauf ceux ayant l’option « nonauto ».
49
Les fichiers
Démontage d’un système de fichiers: par la
commande umount (unmount)
$ mount
/dev/sda7 on / type ext3 (rw)
none on /proc type proc (rw)
/dev/sda1 on /mnt/windows type ntfs (ro,umask=0,nls=utf8)
/dev/sda6 on /usr type reiserfs (rw,notail)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/hda on /mnt/cdrom type iso9660 (ro,nosuid,nodev,users,iocharset=utf8)
$ umount /mnt/cdrom
$ mount
/dev/sda7 on / type ext3 (rw)
none on /proc type proc (rw)
/dev/sda1 on /mnt/windows type ntfs (ro,umask=0,nls=utf8)
/dev/sda6 on /usr type reiserfs (rw,notail)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
$
Remarque: le démontage est très important
Remonter deux fois de suite un système de fichiers non
démonté (suite à interruption d’alimentation électrique par
ex.) peut entraîner une perte irréversible d’information.
50
Les systèmes de fichiers
Système de fichiers (SF) = convention de codage des fichiers
sur un support physique
Hypothèses:
support à accès aléatoire,
 unités d’allocation de taille fixe,
 le contrôleur de périphérique présente le périphérique
sous forme d’un tableau contigu d’unités d’allocation
 unités d’allocation groupées en blocs, de taille fixe

Linux supporte des SF très variés: Ext2, Ext3, FFS, NTFS, FAT,
NFS, ISO 9660, … Les systèmes natifs pour les partitions de
disques durs sont Ext2 et Ext3.
Deux grands schémas de codages différents utilisés dans les
SF (en général): codage à accès séquentiel et à accès
aléatoire.
51
Les systèmes de fichiers à accès
séquentiel
Fichier codé sous forme d’une liste chaînée de blocs
Un fichier = un numéro de premier bloc
Un répertoire = une liste de champs <nom de fichier, taille, droits,
dates, …, numéro de premier bloc>
Méthode utilisée par le système FAT (File Allocation Table) de
Microsoft dans MSDOS et les « vieux » Windows (3.X, 9X)
Infos Répertoire
disque
racine
X fin
libre
3
1
4
2
X
N
…
X
Bloc 1
...
Bloc N
N
Avantages : économie d’espace, implémentation aisée
Inconvénients : lenteur, fragmentation
52
Les systèmes de fichiers à accès
aléatoire
Fichier codé sous forme d’un tableau d’index de blocs
Un fichier = une entrée dans la table d’index : un i-node
Un i-node = <nom de fichier, taille, droits, dates, …, tableau
d’index de blocs>
Un répertoire = une liste d’entrées dans la table d’index
Méthode utilisée par le système Ext (origine: Minix)
Infos
Répertoire
Table d’index
disque
racine
Bloc 1
…
…
f1 f2
fm
fi
(superbloc)
(/)
. alloué
...
Bloc N
X libre
1 9 X X X X … X
Avantage: accès aléatoire
Inconvénients: surconsommation, fichiers de tailles limitées
53
Les systèmes Ext2 et Ext3
Idée de Ext2 = utiliser un arbre B+ (schéma transparent suivant) pour :
 Dimensionner les index en rapport avec la distribution des tailles des
fichiers
 Substituer les dernières entrées du tableau d’index par des pointeurs
d’indirection vers un nouveau tableau
Léger sacrifice de performances pour les fichiers (marginaux) de très
grande taille + ajout d’un test pour savoir si on sort de l’indexation
simple
Idée de Ext3 = journaliser Ext2, càd ajouter un journal d’évènements à
Ext 2 pour permettre la récupération de fichiers en cas d’erreur ou
d’interruption d’alimentation.
54
Les systèmes Ext2 et Ext3
Bloc 1
...
Répertoire
racine (/)
F1
F2
...
...
...
...
...
…
Fi
…
Table d’i-nodes
Infos disque
…
...
…
Fj
Fm
...
…
F1 à Fi-1 : pointeurs directs
Fi à Fj-1 : indirection simple
Fj à Fm : indirection double
...
...
Bloc N
55
Droits d’accès aux fichiers
A tout fichier (au sens large: fichier, lien, répertoire)
sont associés :
 Le numéro d’utilisateur de son propriétaire
 Le numéro de groupe de son propriétaire
 Des droits d’accès, stockés sur 12 bits :




3 bits de droits de l’utilisateur (U)
3 bits de droits de son groupe (G)
3 bits de droits des autres utilisateurs (O)
3 bits spéciaux:
 1 bit spécial « sticky » (collant)
 1 bit spécial « set UID »
 1 bit spécial « set GID »
56
Droits d’accès aux fichiers


Les groupes de bits U,G,O spécifient les droits du
propriétaire, du groupe et des autres utilisateurs en lecture,
écriture, et exécution sur le fichier.
Un et un seul de ces groupes est utilisé in fine pour décider
des droits d’accès dans cet ordre :




S’il y a concordance avec le login → on utilise le groupe U
S’il y a concordance avec le groupe → on utilise le groupe G
S’il n’y a concordance ni avec l’un, ni avec l’autre → on utilise le
groupe O
Le groupe de bits spéciaux modifie les règles de transfert
d’identité lorsque l’utilisateur qui accède au fichier n’est pas
son propriétaire.
57
Droits d’accès aux fichiers
Exemple : affichage des droits d’accès par fichier avec ls -l:
$ ls -l
total 12
lrwxrwxrwx 1
index.html
-rw-r--r-- 1
-rw-r-xr-- 1
-rw-r--r-- 2
drwx------ 4
$
groupe
propriétaire
hilairex sshdist5
hilairex
hilairex
hilairex
hilairex
10 fév
sshdist5
2
sshdist5
36
sshdist5 287
sshdist5 4096
Compteur de liens : 2 ici, le
fichier est référencé
dans un autre répertoire
Fichier ordinaire (-) : le
propriétaire peut lire et écrire,
le groupe peut lire et
exécuter, les autres peuvent
lire seulement.
fév
fév
fév
fév
7 18:42 alias2index.html ->
7
7
7
2
18:39
18:44
18:43
17:16
index.html
script
script.sh
tmp/
Lien symbolique (l): aucun droit n’est
ajouté/perdu par rapport au fichier
désigné (ici, index.html)
Répertoire (d): l’utilisateur conserve
ses droits en lecture, écriture et
exécution; le groupe et les autres ne
peuvent rien faire
58
Les bits spéciaux SetUID et SetGID
Ils permettent d’exécuter un fichier sous l’UID et/ou le GID de
l’utilisateur qui en est le propriétaire. Exemple:
$ ls -l
-r-xr-xr-x
1 hilairex
sshdist5
36 fév
7 18:44 script
Sera exécuté par un utilisateur dupont du groupe
users en tant que dupont du groupe users
-r-sr-xr-x
1 hilairex
sshdist5
36 fév
7 18:44 script
Sera exécuté par un utilisateur dupont du groupe
users en tant que hilairex du groupe users
-r-xr-sr-x
1 hilairex
sshdist5
36 fév
7 18:44 script
Sera exécuté par un utilisateur dupont du groupe
users en tant que dupont du groupe sshdist5
Remarque: se rencontre souvent sur des commandes système pour
lesquelles le propriétaire est root:wheel. Exemple:
ls -la /usr/bin/passwd
-r-sr-xr-x
1 root wheel
75636 Sep 27 10:12 /usr/bin/passwd
59
Le bit spécial sticky
Ce bit n’a d’effet que sur les répertoires. S’il est positionné, les
utilisateurs ayant la permission d’écriture dans le répertoire perdent
la possibilité de supprimer ou renommer les fichiers qui ne sont pas
les leurs. Exemple:
Utilisateur xavier :
$ touch /tmp/toto && chmod 666 /tmp/toto && ls -l /tmp/toto
-rw-rw-rw1 xavier wheel 0 26 fév 22:52 /tmp/toto
Utilisateur test :
$ echo "J'en rajoute" >> /tmp/toto
$ cat /tmp/toto
J'en rajoute
$ rm /tmp/toto
rm: /tmp/toto: Permission denied
$ mv /tmp/toto /tmp/ilestamoi
mv: rename /tmp/toto to /tmp/ilestamoi: Permission denied
$ chown test /tmp/toto
chown: /tmp/toto: Operation not permitted
$
60
La commande chmod
Elle permet de modifier les droits d’accès à un ou plusieurs
fichiers. Seuls le propriétaire du fichier et l’administrateur ont ce
pouvoir.
chmod droits fichiers…
On peut spécifier les droits en forme littérale ou numéraire.
En fome littérale (conseillée) : les droits de lecture (r), écriture (w),
et exécution (x) sont passés pour U,G, et O précédés par + s’ils
sont conférés, - s’ils sont révoqués, et éventuellement séparés par
des virgules. Exemple :
ls -l toto
-r--rw-r-x
1 xavier
xavier
379 Feb
9 20:08 toto
61
La commande chmod
Ajout du droit d’écriture pour l’utilisateur, révocation de tous
les droits pour les autres:
chmod u+w,go-rwx toto
ls -l toto
-rw------1 xavier
xavier
379 Feb
9 20:08 toto
Les bits SetUID et SetGID doivent être passés comme u+sx
et g+sx ou +sx (seul). Le sticky bit est passé comme +t.
chmod +sx,ugo+r toto
ls -l toto
-rwsr-sr-x
1 xavier
xavier
379 Feb
9 20:08 toto
62
La commande chmod
En forme numérale, les droits sont passés sous la forme de 3
ou 4 chiffres en système octal.
Les trois derniers chiffres représentent les droits attribués pour
chaque groupe U,G,O, dans cet ordre. Les droits sont des
combinaisons de logiques entre les valeurs 1=exécution,
2=lecture, et 4=écriture.
Les bits SetUID, SetGID et sticky peuvent être utilisés suivant
le même principe, avec la convention SetUID=4000 (octal) ,
SetGID=2000, sticky bit=1000.
Exemple:
$ chmod 756
$ ls -l toto
-rwxr-xrw$ chmod 6756
$ ls -l toto
-rwxr-srw-
toto
1 xavier
toto
xavier
379 Feb
9 20:08 toto
1 xavier
xavier
379 Feb
9 20:08 toto
63
La commande chown
chown login:group fichiers…
Elle assigne l’utilisateur login de groupe group comme propriétaire des
fichiers spécifiés.
Remarque: Il faut en principe être administrateur pour exécuter chown.
Au mieux, les autres utilisateurs peuvent s’approprier un fichier, mais
jamais l’attribuer de force à quelqu’un d’autre. Exemples:
$ ls -l toto
-rw-rw-rw1 xavier xavier 379 Feb
$ whoami
xavier
$ chown secours toto
chown: toto: Operation not permitted
$ su
Password:
# chown secours:wheel toto
# ls -l toto
-rw-rw-rw1 secours wheel 379 Feb
9 20:08 toto
9 20:08 toto
64
Téléchargement