Vous êtes sur la page 1sur 68

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

INTRODUCTION
au
systme
Unix

Eric Gressier
CNAM-CEDRIC
28 Novembre 1994

TP Informatique Programmation B

Eric Gressier

PLAN

1. Introduction
2. Processus
3. Gestion Mmoire
4. Fichiers et Tubes
5. IPC System V

28 Novembre 1994

CNAM - CEDRIC

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

REFERENCES BIBLIOGRAPHIQUES

Unix Network Programming. W. Richard Stevens. Prentice Hall Software


Series.1990.
Advanced Programming in the Unix Environment. W. Richard Stevens.
Addison Weslay.1992.
The Design and Implementation of the 4.3 BSD Unix Operating System.
S.J. Leffler. M. K. Mc Kusick. M.J. Karels. J.S. Quaterman. Prentice Hall.1989.
The Magic Garden Explained. The Internals of UNIX SYSTEM V
RELEASE 4. An open systems design. B. Goodheart. J. Cox. Prentice
Hall.1994.

28 Novembre 1994

TP Informatique Programmation B

Eric Gressier

1. INTRODUCTION

28 Novembre 1994

CNAM - CEDRIC

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Les Unix
Il existe plusieurs UNIX, mais les plus rpandus
sont :
- Unix System V Release 4
- Unix 4.4 BSD
Et une standardisation de l'interface des appels
systmes : POSIX.
Pour la partie communication, les travaux
majeurs ont t dvelopps partir de la famille
BSD. Mais, aujourdhui, on peut quasiment dire
que tout est dans tout et rciproquement.
Unix System V release 4 semble marquer
l'avantage sur l'Unix BSD arrt la version 4.4.
Dans la prsentation le noyau 4.3 BSD a t
choisi, Ultrix (DEC) a t construit partir de
cette souche.

28 Novembre 1994

TP Informatique Programmation B

Eric Gressier

2. Processus

28 Novembre 1994

CNAM - CEDRIC

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Processus
Processus = instance
excutable en mmoire

d'un

programme

Programme source :
main (argc, argv)
int argc;
int *argv[];

/* nombre d'arguments, nom du programme inclu */


/*tableau de pointeurs sur la liste des arguments :
argv[0] -> "nom du programme\0"
argv[1] -> "1er argument\0"
...
*/

{
corps du programme
}

28 Novembre 1994

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Gnration
d'un
excutable
utilisation d'un excutable
source
compilation
objet
dition de lien
excutable
a.out

exit()

programme sur
disque
excution :
translation
expansion
chargement
excution en
mmoire centrale

espace de
pagination

28 Novembre 1994

et

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Image d'un processus sur disque


structure dcrite par a.out.h :
Magic number
entte

Code
(text)

donnes intialises
readonly
donnes initialises
read-write
table des symboles

zone
donnes
initialises
liens utilisables
pour une autre
dition de liens

Magic Number :
si #! dans a_magic, le fichier est excutable par un interprteur :
#! est suivi par le chemin d'accs l'interprteur :
#!/bin/sh pour le Bourne Shell
#!/bin/csh pour le C-Shell

sinon le fichier est directement excutable, c'est le rsultat d'une


compilation et d'une dition de lien, ce champ indique si la
pagination est autorise (stickybit), si le code est partageable
par plusieurs processus.
28 Novembre 1994

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Image d'un processus en mmoire


zone
pile

Pile
d'excution

Heap (tas)

Adresse haute

donnes
dynamique

zone malloc()

donnes
utilisateur

donnes
non-initialises
donnes
initialises

zone remplie zro


(bss-block started by symbol)

donnes
statiques

code utilisateur
Adresse basse

Organisation de l'image d'un processus en


mmoire virtuelle .
1

Le chargement de l'image du processus en


mmoire se fait la demande, au fur et
mesure des dfauts de pages.

Plusieurs Processus peuvent utiliser le mme code, le code est alors partag
entre plusieurs processus, un seul exemplaire de la partie "text" rside en
mmoire
1

28 Novembre 1994

10

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Gnration de Processus

1 utilisateur = plusieurs processus


cration de processus :
appels systme
fork() cre un nouveau processus
exec() charge un nouvel excutable
Processus :
Unit dexcution dun programme
Espace dadressage & dallocation de
ressources
(dsignation locale une machine des objets systmes, non
unicit des noms sur le rseau)
28 Novembre 1994

11

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Processus du point de vue du Systme


descripteur
(table des processus)

proc strucuture
(proc.h)

pile noyau
contexte utilisateur

.user area (.u -> user.h)


. argv
. environnement
(envp : process envt. vector)

pile utilisateur
vu
auparavant

donnes utilisateur

code utilisateur

La pile noyau est utilise quand le processus


s'excute en mode systme, un appel systme
provoque le passage du processus du mode d'excution
utilisateur au mode systme, le processus excute alors du code
systme pour son propre compte.

"user area" : ensemble d'informations sur le


processus, informations ncessaires mais non vitales quand
le processus n'est plus en mmoire (sur disque de pagination)
28 Novembre 1994

12

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Image de la mmoire vue par le systme


partie toujours rsidente en mmoire centrale
pile d'interruptions systme
(dpendant du matriel)
donnes systme (/vmunix)

table des processus

code systme
mode d'excution systme, mode privilgi, espace systme
mode d'excution utilisateur, espace mmoire utilisateur

processus

...

partie sujette la pagination et au "swap"


pagination -> li la gestion de la mmoire virtuelle
"swap" -> recopie de processus entier sur disque, concerne la
gestion de ressource mmoire et processeur, et le taux
d'utilisation de la machine
28 Novembre 1994

13

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Modes d'excution
interruptions : disques,
horloge,E/S rseau ...

.pas d'ordonnancement
.pas de blocage possible
.espace d'adressage systme
.exc. sur pile d'interruption

partie basse du noyau

partie haute du noyau

sleep() .s'excute jusqu'au blocage ou fin


wakeup() d'appel
possible pour manque
attente .blocage
de ressource
.excution sur pile noyau dans
l'espace d'adressage utilisateur

appel
systme

espace utilisateur

programme

. premption possible
. excution sur pile
utilisateur

- processus -

28 Novembre 1994

14

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Adressage en mmoire virtuelle


exemple Vax :

Rserv
0xC0000000

0x80000000

Espace
Noyau
pile mode noyau
user struct
pile

0x40000000

0x00000000

28 Novembre 1994

tas
donnes
excutable

Dcoupage
de
l'Espace
d'adresse
Rgion P1
Virtuelle
Vax

System

Rgion P0

15

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Lecture "systme" de la mmoire


/dev/kmem

mmoire virtuelle vue comme un priphrique

/dev/mem

mmoire physique vue comme un priphrique


- les donnes noyaux ont une adresse (Vax) :
0x80 000 000 + dplacement
- les donnes utilisateur ont une adresse (Vax):
0x00 000 000 + dplacement

/dev/drum mmoire de pagination/swap vue comme un


priphrique
Les priphriques sont vus comme des fichiers, on peut y
accder de la mme faon en respectant les rgles d'accs.
exemple : accs en lecture la mmoire virtuelle
fd_kmem = open ("/dev/kmem",0)

28 Novembre 1994

16

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Pour savoir si une variable est dans l'espace noyau :


son adresse est sur 32 bits (long int), si loc est l'adresse de la
variable examine :

loc "ET" 0x 8000 0000

vrai : variable dans


l'espace noyau

28 Novembre 1994

faux : variable dans


l'espace utilisateur

17

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Processus en mmoire vive

processus en mmoire : un ensemble de


structures de donnes

desc. d'image
executable
Pile en
mode
noyau

p_textp

Rsident
en
mmoire
centrale

28 Novembre 1994

cessus

proc struct
p_p0br

u_procp

red zone
table
des pages

....

p_addr

desc.
processus

....

table des pro

....

x_caddr

desc.
utilisateur
user struct (u.)
Contexte
matriel
Process Control
Bloc
-Vax

Paginable
"Swappable"

18

TP Informatique Programmation B

descripteur de
structure proc.h -

Eric Gressier

processus

CNAM - CEDRIC

proc

. infos d ordonnancement
-> p_pri
=> priorit courante du processus (petit nombre = prioritaire)
-> p_usrpri
=> priorit du processus en mode utilisateur, calcul partir
de p_nice et p_cpu
-> p_nice
=> priorit propose par l'utilisateur pour le processus
-> p_cpu
=> priorit qui tient compte de l'utilisation relle du
processeur par le processus
-> p_slptime
=> temps pass par le processus dans l'tat endormi
. identificateurs
-> p_pid
=> identificateur du processus (unique sur la machine), obtenu
par getpid()
-> p_ppid
=> identificateur du pre crateur du processus, obtenu par
getppid()
-> p_uid
=> identificateur de lutilisateur (user identifier) du processus,
obtenu par getuid()
-> p_pgrid
=> identificateur du groupe dans lequel est le processus, obtenu
par getgid()
2
-> p_euid
=> identificateur effectif du processus, identique p_uid
souvent sauf quand le programme dispose du bit suid (set user
id) qui lui permet de prendre l'uid d'un autre utilisateur, root
par exemple, peut tre obtebu avec geteuid()
-> p_egid
=> idem juste avant pour le groupe, obtenu avec getegid()
. gestion mmoire
-> p_textp
=> pointeur vers un descripteur de fichier excutable
-> p_p0pbr
=> adresse de la table des pages du processus
-> p_szpt
=> taille de la table des pages
-> p_addr
=> localisation de la zone u. (user area) qd le processus est en
mmoire
-> p_swaddr
=> localisation de la zone u. qd le processus est swapp
. gestion dvnements et signaux
-> p_wchan
=> signaux attendus par le processus : fin dE/S, fin de dfaut
de page, ...
-> p_sig
-> p_sigignore
-> p_sigcatch

champ dpendant du systme (Unix BSD, Ultrix ...)

28 Novembre 1994

19

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Accs la table des processus l'intrieur du


noyau BSD
1. Explorer l'image disque du systme pour
obtenir l'adresse en mmoire virtuelle (MV) des
variables cibles.
Pour la table des processus, on cherche :
_proc: la table elle-mme
_nproc : le nombre maximum d'entres
dans la table
Utiliser la fonction nlist()
struct {
char
*name;/* nom de la
unsigned charn_type;
char
n_other;
short
n_desc;
unsigned longn_value;/*dplact dans
};

variable */

la MV*/

utilisation :
struct nlist nlst[] = {
{"_nproc"},
{"_proc"},
{0}, /* obligatoire */
}

nlist("/vmunix",nlst);
28 Novembre 1994

20

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

2. Accder la mmoire virtuelle pour retirer le


contenu de ces variables
kmem = open("/dev/kmem",0);/*au dbut*/
lseek(kmem,offset_var,0);
read(kmem,ptr_buff_stockage,taille);

pour _proc :
au pralable :
struct proc
long int

*bproc
nproc

lseek(kmem,nlst[1].nvalue,0);
read(kmem,&nproc,sizeof(longint3));

Accs pour obtenir le premier mot machine


contenu dans la table des processus :
lseek(kmem,nlst[2].nvalue,0);
read(kmem,&bproc,sizeof(longint));
bproc contient ce premier mot !!!

Un mot sur un vax fait 32 bits et est dcrit par un long int

28 Novembre 1994

21

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Processus prts
File des Processus Prts -> Tableau de files, sauf le processus lu
whichqs
0
4
Priorit
Mode
Noyau
50

processus
p_usrpri

p_link
processus

processus
p_rlink

...

Priorit
Mode
"User"
124
qs[32]

La priorit va de 0 127 : 0 la plus forte, 127, la plus faible. Le


tableau des files s'appelle qs[]. Un vecteur de bits whichqs
(32 bits, soit un part entre de qs !!!) est associ qs et indique
si la file correspondante est vide ou non.
qs est gr suivant une mthode de hachage, pour obtenir la
bonne file on fait p_pri/4.

28 Novembre 1994

22

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Etats d'un processus

exit

lu

zombie

fini

sleep
ligible
prt

assez de
mmoire

Processus
en
bloqu Mmoire
endormi :
"wait channel"
"wait event"

wakeup

fork
cr

swapout

pas assez de
mmoire
prt
S

swapout

swapin

Processus
bloqu "Swapp"
sur
S
disque

wakeup

voir la commande pstat(8) qui permet d'imprimer une


photographie des informations contenues dans les tables du
systme, pstat -p liste le contenu de la table des processus ... le
rsultat est assez cryptique !!!

28 Novembre 1994

23

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Ordonnancement - aspects gnraux


top horloge noyau : 1 tick (10 ms souvent)
L'ordonnancement s'effectue par priorit : la file
de plus forte priorit est examine en premier, et
pour une mme file en tourniquet, 1 quantum de
temps correspond 10 ticks.
Quand un processus se bloque pour une ressource
manquante, il ne rejoint pas la file des processus
prts.
Quand un processus puise son quantum, il est
mis en fin de la file dont il vient.
Les processus sont bougs de file en file en
fonction de la valeur de leur priorit courante.
Un processus en excution ne peut tre prempt
par un processus plus prioritaire qui vient de
s'veiller que s'il effectue un appel systme.
Sinon, le processus plus prioritaire doit attendre
l'puisement de son quantum.

28 Novembre 1994

24

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Calcul de priorit (1)


Calcul de la priorit fond sur :
p_nice priorit demande par l'utilisateur
p_cpuindicateur d'utilisation du processeur par
le processus
4

value tous les 4 ticks en cours d'excution


(processus lu) par :
p_usrpri = PUSER 5 + Entier(p_cpu/4) + 2 *p_nice (1)

L'utilisation du processeur par le processus lu


est calcule chaque tick :
p_cpu = p_cpu +1

Chaque seconde p_cpu est ajust par le calcul:


p_cpu = (2*n)/(2*n + 1) + p_nice
o n est la longueur moyenne de la file des processus prts
chantillonne sur 1 minute.

La priorit d'un processus dcroit avec le temps


pass en excution.

(-20, processus "booster" par l'administrateur, 0 normal, +20 ralenti par


l'utilisateur)
5 PUSER vaut 50 en gnral
4

28 Novembre 1994

25

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Calcul de priorit (2)

Quand le processus est rest endormi plus d'1 s,


sa priorit est recalcule son rveil par :
p_cpu =[Entier((2*n)/(2*n+1))]p_slptime p_cpu

p_slptime est la dure d'endormissement, mis zro au


moment de la mise en sommeil, puis incrmet de un chaque
seconde coule.

Puis il applique la formule (1) pour calculer la


priorit d'ordonnancement.

28 Novembre 1994

26

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Calcul de priorit (3)


Priorits en mode noyau :
Non-interruptibles :0 PZERO

- swapper (priorit 0)
- attente E/S disque
- attente infos sur fichier (infos de contrle)
Interruptibles : PZERO+1 PUSER -1
7

- attente de ressources
- attente sur verrou de ressources
- attente d'vnement
Priorits en mode utilisateur :
PUSER 127
p_usrpri est toujours ramen une valeur 127

25 habituellement
7 50 habituellement
6

28 Novembre 1994

27

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Ce qu'il faut retenir !!!

Plus on s'excute, plus on consomme de temps


CPU, et plus la priorit du processus baisse.

qqch faire ... lancez un processus qui


dure peu de temps

28 Novembre 1994

28

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Commande ps
USER
gressier
gressier
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
amaral
root
root
root
root
donzeau

PID %CPU %MEM


SZ RSS TT STAT
5015 7.5 0.8 649 530 p3 R
5000 0.6 0.1 247
86 p3 S
4748 0.3 0.1 102
44 p5 S
3592 0.2 0.1
84
37 q8 S
298 0.1 0.1 145
83 ? I
303 0.1 0.1 244
29 ? S
1 0.0 0.3 254 212 ? S
4355 0.0 0.1 102
43 qb I
348 0.0 0.1 134
47 ? S
208 0.0 0.1 163
50 ? I
291 0.0 0.1
48
33 ? S
2 0.0 0.1 4096
0 ? D
14693 0.0 0.0
0
0 ? Z
18500 0.0 0.0 147
0 ? IW
22368 0.0 0.0
0
0 ? Z
7600 0.0 0.0
13
0 ? IW
12550 0.0 0.0 340
12 ? IW
28562 0.0 0.0 340
12 ? IW
2686 0.0 0.8 864 555 03 T
4655 0.0 0.0 126
17 ? IW
1215 0.0 0.2 368 148 ? I
2284 0.0 0.0 320
7 ? IW
8223 0.0 0.0 376
12 ? IW
29702 0.0 1.1 3763 724 01 T

TIME
0:00
0:00
0:00
0:05
23:50
29:05
3:03
0:00
0:37
1:29
0:19
4:46
0:00
0:00
0:00
0:00
0:00
0:00
0:11
0:00
0:00
0:00
0:00
0:00

COMMAND
ps -aux
-csh (csh)
telnetd
rlogind
/etc/inetd
/etc/rwhod
init
telnetd
- std.9600 tty32 (getty)
/usr/local/cap/atis
/etc/cron
pagedaemon
<exiting>
telnet
<exiting>
- std.9600 tty23 (lattelnet)
-ml0.iijnet.or.jp: anonymous/
-crl.dec.com: anonymous/put_y
emacs
- std.9600 tty04 (getty)
rshd
rshd
-indy207.cs.york.ac.uk: anony
latex exam_juin94.tex

tat d'un processus sur une squence de 5 lettres RWNAV:


- La premire lettre done des indications sur le processus en cours d'excution :
"R" pour "running", "T" pour "stopped", "P" pour en attente de page, "D" pour
attente d'E/S disque, "S" pour "sleeping" (moins de 20 secondes),

"I"

pour

"idle"

(endormi plus de 20 secondes).


- La seconde lettre indique si le processus est mis sur disque (swapped out) :
"W" pour swapp, "Z" pour tu(zombie, pas encore dtruit), "<espace>" le processus
en mmoire, ">" le processus est rsident en mmoire et a dpass son quota mmoire
centrale.
- La troisime lettre indique si le processus s'excute avec une priorit modifie
la commande nice :
"N"

sa priorit a t rduite, "<" sa priorit a t augmente, "<espace>" cas normal.

- La quatrime lettre indique si le processus est sujet un traitement spcial


mmoire virtuelle, le plus courrant :"<espace>" reprsente le cas normal VA_NORM.
- La cinquime dpend des capacits matrielle du processeur et de la faon dont
processus les utilise.

28 Novembre 1994

29

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Primitive fork
int fork()
cre un nouveau processus qui est un clone du
pre au moment de la cration, le fils
hrite de l'environnement du pre : mme vue du
code, mme vue des donnes, mmes fichiers ouverts, mme
environnement (variables PATH, TERM, ...)
p_pid : 1255

p_pid : 1256

pile

donnes

fork()

code
Image du processus crateur
(pre)

Image du processus cr
(fils)

En ralit le code n'est pas dupliqu et les


donnes le sont le plus tard possible, technique
du copy-on-write ... parfois on fait un fork pour changer
son image excutable immdiatement aprs, dans ce cas, on
utilise un vfork().
28 Novembre 1994

30

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

main ()
{
id = fork();
if ( id == 0) {
printf("fils : %d\n", getpid());
/*processus fils*/
exit(0);
} else {
printf("pre : %d\n", getpid());
/*processus pre*/
printf("fils : %d\n", id);
exit(0);
}
}

28 Novembre 1994

31

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Primitives exec
L'utilisation d'une primitive de type exec
permet de changer l'image d'un processus en
mmoire. On peut ainsi lancer un nouveau
programme.
Aprs un exec, le contrle de l'excution est
donn au programme lanc.
execl(chemin,arg,...,0)

execlp(fich,arg,...,0)

former argv

execle(chemin,arg,...,0,envp)

former argv

execvp(fich,argv)

convertir fich
en chemin d'accs

former argv

execve(chemin,argv,envp)
ajouter
un pointeur sur
l'environnemnt

execv(chemin,argv)

Le programme hrite d'un certain nombre de


paramtres du processus qui l'hberge : n de
processus, n de processus pre, l'uid utilisateur rel... le
numro de processus effectif peut changer si le programme
lanc a un bit suid.

28 Novembre 1994

32

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Primitive exit
Quand il se termine
exit(status).

un

processus

fait

Cet appel systme a pour effet de passer une


information d'tat, "status",au systme.
Cet tat de sortie est rcuprable par le
processus pre l'aide de l'appel wait.
exit() provoque un vidage des E/S en cours
non effectues (action flush) avant de terminer
le processus, c'est un appel standard de la
librairie C.
_exit() effectue la terminaison directement,
c'est un appel systme.

28 Novembre 1994

33

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Primitive wait
int wait (int *status);
Un processus peut rcuprer des informations
sur un fils qui vient de se terminer grace wait.
Il rcupre la variable "status" de terminaison,
et/ou d'autres donnes sur le mode de
terminaison du processus.
autres variantes de wait :
. wait3 qui n'existe que pour Unix 4.3 BSD,
ne bloque pas le processus qui effectue wait3
alors que wait bloque "ternellement" le
processus demandeur.
. waitpid qui n'existe que pour Unix 4.3
BSD, permet d'attendre la fin d'un processus
fils particulier

28 Novembre 1994

34

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Terminaison d'un processus

allproc

zombproc

freeproc

processus
actif

exit

processus
zombie

processus
zombie

processus
vide

processus
vide

notification au pre
wait
processus
vide

descripteur de processus libr

Si le pre est termin avant le fils, l'id du


processus pre n'a plus de sens ... Unix trouve
tous les processus orphelins, leur pre devient
"init" qui ne se termine jamais.
Un processus ne sait jamais quand son pre a pu
se terminer ... seulement sa propre
terminaison.

28 Novembre 1994

35

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Lancement d'un shell utilisateur

init
fork

pid #1
fork

1. fork

init

init
exec

getty

init
exec

2. exec
getty

getty
3. exec

login
4. exec
/bin/csh

28 Novembre 1994

36

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Lancement d'une commande


Rsultat du point de vue processus de la
commande ls :
1. fork

/bin/csh

/bin/csh

2. exec
3. exit
ls

28 Novembre 1994

37

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Groupe de processus

login
exec
/bin/csh

fork

exec

/bin/csh

fork

/bin/csh

leader du
groupe de processus

xterm

exec
ls

groupe de processus

Le leader du groupe de processus a son pid gal son pgid. Un


processus fils cre un nouveau groupe en se retirant du groupe
auquel il appartient par la primitive setpgrp().

28 Novembre 1994

38

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

En Bourne shell, quand vous lancez une


commande, un fils est cr, il appartient au
mme groupe de processus que son pre. Ds
que vous quittez votre session on a propos du
processus qui se termine :
id de processus = id de groupe de processus = id de terminal attach au groupe8

Le signal SIGHUP est envoy tous les


processus qui ont le mme id de groupe de
processus. Tous les processus fils, petits fils, ...
dans le groupe sont tus automatiquement.
En Cshell, chaque commande lance en tache
de fond (avec & au bout) cre son propre
groupe, et devient donc son propre "group
leader". Par consquent, la fin de la session
utilisateur ne peut tuer les commandes lances
en tches de fond.

Pour certains shells, l'identificateur de terminal attach un groupe de processus


est intialis avec l'identificateur de groupe de processus du processus shell activ
ds la fin de la phase de login. En gnral, cette situation n'est vraie que pour les
processus actifs en session (foreground), pas pour les autres, ceux lancs en
arrire plan (background).
8

28 Novembre 1994

39

TP Informatique Programmation B

Eric Gressier

3. Gestion Mmoire

28 Novembre 1994

40

CNAM - CEDRIC

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

relation mmoire centrale et disque de


pagination

Mmoire
Virtuelle

Table des Pages


bit
v

Disque de Pagination

...
0
1

...

Remplacement par
Algo. de l'horloge
deux passes

Memoire
Physique
CPU

RAM

-> mcanisme de va et vient, superposition


de lespace swap avec lespace de pagination

28 Novembre 1994

41

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

commande vmstat
Statistiques sur la mmoire virtuelle, les processus, les disques,
l'activit du processeur...
option -f pour avoir le nombre de fork et de vfork, option -v pour
avoir des infos plus dtailles sur la mmoire, -S pour avoir des
infos sur les pages soumises au va et vient (swap)
Sans options, la commande vmstat donne un rsum :
procs
r b w
0 0 0

faults
in sy cs
98 571 75

cpu
us sy id
16 12 72

memory
avm fre
21k 41k

re at
2 4

page
pi po fr
4
1
1

de
0

disk
sr s0 s1
0 0 0

procs: information sur les processus dans diffrents tats.


r
(run queue) processus prts
b
bloqus en attente de ressources (E/S, demandes de pages)
w
prts ou endormis (< 20 seconds)mais swapps
faults: taux d'interruptions/d'appels systme (trap) par seconde, la moyenne est calcule sur les
5 dernires secondes.
in
interruption due un contrleur (sauf horloge) par seconde
sy
appels systemes par seconde
cs
taux de changement de contexte processuer ( nb chgt par seconde)
cpu: rpartition de l'utilisation du processeur en pourcentage
us
temps utilisateur pour les processus de priorit normale et basse
sy
proportion utilise par le systme
id
cpu inutilis - libre
La somme des 3 fait 100% !?!

28 Novembre 1994

42

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

memory: informations sur l'utilisation de la mmoire virtuelle et de la mmoire relle, les pages
virtuelles sont considres actives si elles appartiennent des processus qui sont excutables ou qui
se sont excuts depuis moins de 20 secondes. Les pages sont indiques en unit de 1 Ko, le
suffixe k prcise qu'il faut multipli le chiffre affich par 1000, et le suffixe m par 106.
avm pages virtuelles actives
fre
taille de la liste des pages libres
page: information les dfauts de page et l'activit de pagination. La moyenne est calcule toutes
les 5 secondes. L'unit est toujours 1Ko et est indpendante de la taille reel des pages de la
machine.
re
page "reclaims", pages rfrences
at
pages "attached" ???
pi
pages "paged in"
po
pages "paged out"
fr
pages "freed", libres par seconde
de
anticipation du manque de mmoire
sr
pages examines par l'algorithme horloge deux phases
disk: s0, s1 ...sn: activit de pagination ou de va et vient en secteurs transfrs par seconde, ce
champ dpend de la configuration du systme. Habituellement l'espace swap est rparti sur
plusieurs disques, on trouve la liste des priphriques qui supportent cette fonction et qui est
configure dans le systme.

28 Novembre 1994

43

TP Informatique Programmation B

Eric Gressier

4. Fichiers et Tubes

28 Novembre 1994

44

CNAM - CEDRIC

TP Informatique Programmation B

gestion des
terminal

table des fichiers


ouverts
d'un processus

n de
descripteur

stdin
stdout
stderr

Eric Gressier

E/S

disque,

table des
fichiers
infos
fichier

CNAM - CEDRIC

rseau,

table des
v-nodes
(en mmoire)

v-node/i-node
infos
fichier

v-node/i-node

notion dobjet dcrit par un descripteur et un


ensemble doprations plutt que par extension
de lespace dadressage (Multics)

28 Novembre 1994

45

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Structure d'un i-node


Vue utilisateur : Fichier non structur

Vue Systme :
Descripteur de fichiers
(i-node)

bloc de donnes
bloc index 1 niveau d'indirection

droits,
propritaire,
...

10 blocs
de donnes
en accs
direct
index
index
index

bloc index 2 niveaux d'indirection


bloc index 3 niveaux d'indirection

...

...
...
...
...

...
...
...
...

...

...

...

...
...
...

28 Novembre 1994

46

...

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Partage de fichier
processus 1
0
1
...2

table des fichiers

position
courante

descripteur de fichier
v-node
intermdiaire
(rseau-NFS
et tous types)

processus 2
0
1
...2

28 Novembre 1994

position
courante

i-node
(fichier local)

47

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Communication par fichier


Les programmes peuvent communiquer par
fichier :
fichier
2

4
prog1
(client)

prog2
(serveur)
fichier

Il peut tre ncessaire de procder un


verrouillage de la ressource fichier :
flock(), lockf(), fcntl()
ATTENTION,
ces
mcanismes
ne
fonctionnent
pas ncessairement

travers NFS !!!

28 Novembre 1994

48

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Verrouillage de fichier (1)


verrouillage de tout le fichier (Unix souche BSD) :
flock()
Le type de verrouillage doit tre prcis :
LOCK_SH
verrouillage en mode partag (opration bloquante)
LOCK_EX
verrouillage en mode exclusif (opration bloquante)
LOCK_UN
dverrouillage
LOCK_NB
demande d'opration non bloquante
Une opration est dite bloquante si le demandeur est bloqu
jusqu' ce que l'appel systme correspondant soit
termin ... ce qui peut arriv ... l'appellant restant dans ce cas
indfiniment en attente... d'o l'utilisation par exemple de la
combinaison LOCK_SH|LOCK_NB.
Un fichier peut tre verrouill "LOCK_SH" par plusieurs
processus en mme temps, mais ne peut tre verrouil
"LOCK_EX" que par un seul la fois.

28 Novembre 1994

49

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Verrouillage de fichier(2)
verrouiller une partie du fichier (Unix souche system V) :
lockf()
dans ce cas, il faut utiliser lseek() pour se positionner au
dbut de la zone du fichier cible, puis spcifier dans l'appel de
lockf() la longueur de la zone verrouiller.
Le verrouillage peut s'effectuer de diffrentes faons, qu'il faut
spcifier :
F_TEST
F_LOCK
F_TLOCK
F_ULOCK

28 Novembre 1994

test si une zone est dj verrouille


vrrouiller une zone (opration bloquante)
test si la zone est verrouille, verrouille sinon
dverrouille une zone dj verrouille

50

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Primitive mmap() (1)


mmap()
Permet un processus de projeter le contenu d'un
fichier dj ouvert dans son espace d'adressage.
La zone mappe s'appelle une rgion. Au lieu de
faire des lectures et des critures sur le fichier, le
processus y accde comme si les variables qu'il
contient taient en mmoire.
Plusieurs processus peuvent "mapper" le contenu
d'un mme fichier et ainsi le partager de faon
efficace.
Un fichier peut tre soit un fichier sur disque,
soit un priphrique.
mmap() s'utilise pour un fichier dj cr, il est
impossible d'tendre un fichier "mapp"
suivant les implantations, il semble qu'un
munmap() soit ncessaire pour "dmapper"
une rgion avant de fermer le fichier par
close().
pas de client/serveur !:-)
28 Novembre 1994

51

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Primitive mmap() (2)


#include <sys/types.h>
#include <sys/mman.h>
caddr_t mmap(addr,len,prot,flags,fd,off)
caddr_t
addr;
size_t
len;
int
prot, flags, fd;
off_t
off;
C'est une mise en correspondance partir de l'adresse "pa" de l'espace
d'adressage d'un processus, d'une zone de "len" octets prise l'intrieur d'un
objet de descripteur "fd" partir de "off". La valeur de "pa" dpend du
paramtre "addr", de la machine, et de la valeur de "flags".
Si l'appel systme russit, mmap() retourne la valeur pa en rsultat. Il y a
correspondance entre les rgions [pa, pa+len] de l'espace d'adressage du processus
et [off, off+len] de l'objet. Une mise en correspondance remplace toute mise en
correspondance prcdente sur la zone [pa, pa+len] .
prot dtermine le mode d'accs de la rgion : "read", "write", "execute", "none"
(aucun accs) ou une combinaison de ces modes
flags donne des informations sur la gestion des pages mappes :
MAP_SHARED
page partage, les modifications seront visibles par les autres
processus quand ils accderont au fichier
MAP_PRIVATE les modifications ne seront pas visibles
MAP_FIXED
l'adresse addr donne par l'utilisateur est prise exactement,
habituellement le systme effectue un arrondi sur une frontire
de page

28 Novembre 1994

52

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Exemple mmap()
int fd, *p, lg;
fd = open("fichier",2);
p =
mmap((caddr_t) 0,lg,
PROT_READ|PROT_WRITE,
MAP_SHARED,fd,0);
*p = *p +1;
close(fd);

28 Novembre 1994

53

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Tube ou "pipe" - "|" du niveau shell -(1)


pipe()
Un tube est un canal unidirectionnel qui
fonctionne en mode flot d'octets. Mcanisme
d'change bien adapt l'envoi de caractres.
La suite d'octets poste dans un tube n'est pas
obligatoirement retire en une seule fois par
l'entit l'autre bout du tube. Lors de la lecture,
il peut n'y avoir qu'une partie des octets retirs,
le reste est laiss pour une lecture ultrieure.
Ceci amne les utilisateurs dlimiter les
messages envoys en les entrecoupant de "\n".
Sous certaines conditions, une criture ou une
lecture peut provoquer la terminaison du
processus qui effectue l'appel systme.
Les critures dans un tube sont atomiques
normalement. Deux processus qui crivent en
mme temps ne peuvent mlanger leurs donnes.
Mais si on crit plus d'un certain volume max
(4096 octets souvent), l'criture dans le tube
n'est pas atomique, dans ce cas les donnes
crites par deux processus concurrents peuvent
s'entrelacer.
28 Novembre 1994

54

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Tube ou "pipe" - "|" du niveau shell -(2)

L'utilisation d'un tube se fait entre processus de


mme "famille"/"descendance". On peut dire
que le tube est priv.
L'usage courant est :
int pipefd[2];
pipe(pipefd);
write (pipefd[1], ...);
read (pipefd[0], ...);
...
se souvenir de stdin (0), on lit ce qui vient du clavier, et,
stdout(1), on crit sur l'cran.

Un tube existe tant qu'un processus le rfrence.


Quand le dernier processus rfrenant un tube
est termin, le tube est dtruit.

28 Novembre 1994

55

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Etapes d'un change client/serveur avec


tube
1. cration du tube :
read fd[0]
write fd[1]
espace
systme

tube
flot d'octets

2. fork() du pre :
pre

fork()

fils

espace
systme

tube
flot d'octets

3. fermeture des extrmits non utilises


pre

fils

espace
systme

tube
flot d'octets

situation quivalente celle de "ls -l|more"


28 Novembre 1994

56

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Schma Client/Serveur avec tubes


Etapes :
1. cration de tube1 et de tube2
2. fork()
3. le pre ferme l'entre 0 (in) de tube1 et
l'entre 1 (out) de tube2
4. le fils ferme l'entre 1 (out) de tube1 et
l'entre 0 (in) de tube2
pre

fils
write 2
read 1

read 2
write 1
tube1

espace
systme

tube2

28 Novembre 1994

57

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Tubes Nomms ou FIFOs


Les tubes sont privs et connus de leur seule
descendance par le mcanisme d'hritage. Les
tubes nomms sont publics au contraire.
Le tube nomm est cr par :
mknod("chemindaccs", mode d'accs)

ou par
/etc/mknod chemindaccs p

C'est presque l'quivalent d'un fichier pour le


systme.
Le tube est connu par son chemin d'accs et
accessible comme un fichier par open(), read(),
write(), close().
Les tubes nomms fonctionnent comme les
tubes.

28 Novembre 1994

58

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Client/Serveur avec des tubes nomms


Serveur
rponses
tube de rponse
client1:
/tmp/client1.fifo
confirmations

rponses
indications

tube de rponse
client2:
/tmp/client1.fifo
confirmations

requtes

Client1

Client2

tube connu de requtes :


/usr/tubes/serveur.fifo

Ne pas oublier de dtruire les tubes nomms


aprs utilisation !!!

28 Novembre 1994

59

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Mcanismes de communication interprocessus


IPC distants :
- sockets (Unix BSD) ou streams (Unix System V)

IPC locaux :
- fichiers avec mcanisme de verrouillage (lock)
- tubes (pipe), tubes nomms,
- interruptions logicielles (signaux)
- sockets,
- smaphores,
- files de messages,
- mmoire partage,

28 Novembre 1994

60

TP Informatique Programmation B

Eric Gressier

5. IPC System V

28 Novembre 1994

61

CNAM - CEDRIC

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Identification des objets IPC system V


Les objets IPC system V :
Files de messages
Smaphores,
Segments de mmoire partage
Ils sont dsigns par des identificateurs uniques.
La premire tape consiste donc a crer un
identificateur.
1. On peut fabriquer un identificateur grace la
fonction suivante :
#include <sys/types.h>
#include <sys/ipc.h>
key_t ftok(char *chemindaccs, char proj)

L'identificateur rendu en rsultat est garanti


unique. "chemindaccs" correspond un
fichier, attention ce qu'il ne soit pas dtruit de
faon inopportune... sinon, la fonction ftok()
ne pourrait retourner l'identificateur qui sert
tous les processus pour reprer l'objet IPC.
2. On se le fixe soi mme
28 Novembre 1994

62

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Cration d'objets IPC System V


Il est attach un objet IPC un certain nombre
d'informations : l'id utilisateur du propritaire, l'id du
groupe du propritaire, l'id utilisateur du crateur, l'id du groupe
du crateur, le mode d'accs, son identificateur.

ftok()

id unique
clef

msgget() objet
semget()
shmget() entier

Mode de cration :
cration de l'objet demand et
association de celui-ci
l'identificateur fourni

IPC_PRIVATE

IPC_CREAT

cration si l'objet n'existe pas dj,


sinon aucune erreur

IPC_CREAT|IPC_EXCL

cration si l'objet n'existe pas dj,


sinon erreur

aucun mode prcis

erreur si l'objet n'existe pas

Pas comparable un fichier dans son mode de gestion et


d'hritage. L'identificateur d'objet se passe
28 Novembre 1994

63

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Files de messages
L'objet "Message Queue" fonctionne suivant le
modle d'une file donc en FIFO, la politique
FIFO peut tre applique l'ensemble des
messages dans la file ou par seulement en
fonction du type de message.
cration : msgget()
Lors de la cration, on spcifie les droits d'accs : read/write
pour propritaire/groupe/autres en combinant avec IPC_XXX.

envoie de message : msgsnd()


rception de message : msgrcv()
Les messages peuvent tre retirs en fonction de leur type.

oprations de contrle : msgctl()


Permet en particulier de dtruire une file de messages, sinon il
faut utiliser la commande ipcrm.
La commande ipcrm est applicable tout objet IPC system V.

28 Novembre 1994

64

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Objet File de Messages

id
file de
messages

type
longueur

NULL
type
longueur

donnes

donnes

premier
dernier

desc.
file de
msg

28 Novembre 1994

65

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Smaphores
Les objets smaphores permettent de grer un
groupe de smaphores par objet.
cration : semget()
manipulation du smaphore : semop()
gestion du smaphore : semctl()
Objet smaphore :
id
smaphore

semval [0](compteur)
[0]

sem_nsems

(2 ici)

[0]
[0]
semval [1]
[1]

desc.
objet
semaphores

[1]
[1]

Quand plusieurs processus attendent le relachement d'une


ressource, on a aucun moyen de dterminer l'avance celui qui
l'obtiendra. En particulier, pas d'ordre FIFO d'attente.
28 Novembre 1994

66

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Segments de Mmoire partage


Communication par variable partage travers
l'espace d'adressage des processus.
cration : shmget()
Le segment de mmoire partage est cr mais non accessible.
L encore, il faut spcifier le mode d'accs.

attachement l'espace
processus : shmat()

d'adressage

d'un

Le segment est inclu dans l'espace d'adressage du processus


demandeur l'adresse indique suivant le cas par *shsmaddr.

dtachement du segment de mmoire partage


de l'espace d'adressage d'un processus :
shmdt()
oprations de gestion du segment de mmoire
partage : shmctl()

28 Novembre 1994

67

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Utilisation de segments de mmoire


partage
En gnral on fait du client/serveur travers un
segment de mmoire partage avec une
signalisation par smaphore.
processus serveur

processus client
espace
d'adressage
du
processus

segment de mmoire partage

segment
attach dans
l'espace
d'adressage du
processus

28 Novembre 1994

68

Vous aimerez peut-être aussi