Upload
others
View
5
Download
0
Embed Size (px)
Citation preview
Concepts des systèmesd’exploitation et mise en oeuvre
sous Unix
Coordonnateur : François Trahay
module CSC4508/M2
Avril 2018
Con
ceptsde
ssystèm
esd’exploitatio
net
mise
enoeuv
resous
Unix
TEL
ECOM
SudP
aris
—Coo
rdon
nateur
:Franç
oisTr
ahay
—Av
ril20
18—
mod
uleCSC
4508
/M2
0
Con
ceptsde
ssystèm
esd’exploitatio
net
mise
enoeuv
resous
Unix
Con
tent
s
Licenc
eix
Présentationdu
cours
1
Plandu
docu
ment
2
1Objectifs
ducours
2
2Pub
licvisé
etpré-requ
is3
3Dérou
lement
4
Introd
uction
:rôle
d’un
systèm
ed’exploitation
5
Plandu
docu
ment
6
1Sy
stèm
esinform
atique
s6
2Machine
virtue
lle6
3Objectifs
d’un
systèm
ed’exploitation
7
4Différents
type
sde
systèm
esd’exploitation
74.1Te
mps
réel
soup
leversus
temps
réel
stric
t............................
84.2Caractéris
tique
sde
sap
plications
temps
réel
...........................
84.3Tr
ansactionn
el...........................................
9
Interactions
entresystèm
emulti-tâche
etprocessus
11
Plandu
docu
ment
12
1Point
devu
eprocessus
121.1Le
sap
plications
etle
systèm
e...................................
121.2La
prog
rammationsystèm
e....................................
131.3Le
sfonctio
nsde
lalibc
......................................
131.4Utilisa
tionde
sap
pels
systèm
es..................................
141.5Utilisa
tionde
sfonc
tions
......................................
141.6Te
stdu
retour
desap
pels
systèm
eet
desfonc
tions
.......................
151.7Que
faire
encasd’erreur
systèm
e?................................
16
2Point
devu
esystèm
e18
2.1Gén
éralité
ssurl’exécu
tiondestâches
systèm
e..........................
192.2Tr
aitementde
sap
pels
systèm
e..................................
192.3Pr
iseen
comptede
sinterrup
tions
.................................
21
3Ordon
nanc
ementde
sprocessussous
Linu
x21
3.1Pr
iorit
éstatique
..........................................
223.2Po
litique
d’ordo
nnan
cement....................................
233.3Ordon
nanc
ementtemps-réelL
inux
................................
233.3.1Inversionde
priorit
é:én
oncé
duprob
lème........................
253.3.2Inversionde
priorit
é:exem
plede
solutio
n........................
253.4Ordon
nanc
ementstan
dard
.....................................
25
Biblio
grap
hiedu
chap
itre
26
Gestion
dela
mém
oire
27
Plandu
docu
ment
28
TEL
ECOM
SudP
aris
—Coo
rdon
nateur
:Franç
oisTr
ahay
—Av
ril20
18—
mod
uleCSC
4508
/M2
i
Con
ceptsde
ssystèm
esd’exploitatio
net
mise
enoeuv
resous
Unix
1Point
devu
esystèm
e28
1.1Introd
uctio
n............................................
281.2Be
soinsde
sprocessus
.......................................
291.3Pa
gina
tion
.............................................
301.3.1Gén
éralité
s.........................................
301.3.2Adresse
logiqu
e.......................................
311.3.3Ta
blede
spa
ges.......................................
321.3.4Accélérateu
rs(cachesd’ad
resses)
.............................
321.3.5Éc
roulem
ent
........................................
331.4Se
gmentatio
n............................................
331.4.1Gén
éralité
s.........................................
341.4.2Descripteur
desegm
ents
..................................
341.5Pa
gina
tionversus
Segm
entatio
n.................................
351.6Algorith
mes
pour
lagestionde
spa
ges
..............................
361.6.1Cha
rgem
ent.........................................
361.6.2Rem
placem
ent(décha
rgem
ent)
..............................
36
2Point
devu
eprocessus
372.1Es
pace
d’ad
ressag
ed’un
processus
................................
372.2Observatio
net
contrôle
del’u
tilisa
tionde
lamém
oire
.....................
382.2.1Observatio
nde
l’utilisa
tionde
spa
ges.
..........................
382.2.2Observatio
ndu
type
d’accèsàla
mém
oire
........................
392.2.3Êt
reattentifàl’a
ligne
mentdesstructures
........................
412.2.4Con
trôlede
sdé
fautsde
page
...............................
432.3Allo
catio
n/Désallocatio
ndy
namique
demém
oire
........................
442.3.1Allo
catio
n/Désallocatio
nmém
oire
stan
dard
.......................
442.3.2Digression:algo
rithm
espo
urmalloc
..........................
462.3.3Digression:algo
rithm
espo
urfree
............................
472.3.4Désallocatio
nau
tomatique
avec
alloca
.........................
472.3.5Mécan
ismed’allocatio
n/dé
sallo
catio
ndé
dié
.......................
482.3.6Allo
catio
n/Désallocatio
nmém
oire
auniveau
systèm
e..................
482.4Déverminag
ede
saccèsmém
oire
.................................
492.4.1Détecterstatique
mentlesaccèserroné
sàde
szone
salloué
esdy
namique
ment.
....
492.4.2Détecterdy
namique
mentlesaccèserroné
sàde
szonesalloué
esdy
namique
ment...
512.4.3Visu
alise
rqu
andun
ezone
mém
oire
estaccédé
e/mod
ifée
................
53
Biblio
grap
hiedu
chap
itre
54
Lesfichiers(etlesentrées-sorties)
55
Plandu
docu
ment
56
1Primitives
Unixd’entrées-sorties
571.1Pr
imitivesde
base
.........................................
571.1.1Ouv
erture/fermeturede
fichier
..............................
571.1.2Le
cturesurde
scrip
teur
..................................
581.1.3Éc
rituresurdescrip
teur
..................................
591.2Dup
licationde
descrip
teur
.....................................
611.3Con
trôlede
sentrée-sortie
s.....................................
611.3.1Pr
imitive
fcntl.......................................
611.3.2Ve
rrou
illag
ede
fichier
...................................
621.3.3Con
seilau
noyaupo
urleslectures
............................
641.4Man
ipulationde
l’offset
......................................
641.5Gestio
nde
lalenteu
rou
dublocag
ede
sentrées-sorties*
....................
65
TEL
ECOM
SudP
aris
—Coo
rdon
nateur
:Franç
oisTr
ahay
—Av
ril20
18—
mod
uleCSC
4508
/M2
ii
Con
ceptsde
ssystèm
esd’exploitatio
net
mise
enoeuv
resous
Unix
2Biblio
thèque
Cd’entrées-sorties
662.1Introd
uctio
n............................................
672.2Ouv
erture/fermeturede
fichier
..................................
672.3Le
cturede
fichier
..........................................
68Le
cturede
fichier
(suite).....................................
682.4Éc
riturede
fichier
.........................................
69Éc
riturede
fichier
(suite)
....................................
692.5Con
trôledu
tampo
n........................................
712.6Divers................................................
71
3Projectionde
sfichiersen
mém
oire
72
4Man
ipulationde
si-n
oeud
sdu
systèm
ede
fichiersUnix
73Man
ipulationde
si-n
oeud
sdu
systèm
ede
fichiersUnix(suite)...................
74
5Entrées-sorties
surrépe
rtoires
74
6Limitations
deNFS
75
Biblio
grap
hiedu
chap
itre
76
Com
mun
ications
inter-processus
77
Plandu
docu
ment
78
1Gestion
desprocessus
781.1En
vironn
ementde
sprocessus
...................................
781.2Inform
ations
conc
erna
ntun
processus
..............................
791.3Créationde
processus
.......................................
811.4Te
rminaisonde
processus
.....................................
821.5Ex
écutiond’un
nouv
eauprog
ramme
...............................
83
2Com
mun
ications
àl’a
idede
tube
s84
2.1Pr
incipe
destube
s.........................................
842.2Tu
besordina
ires(oulocaux
)...................................
852.3Tu
besno
mmés
...........................................
87
3Com
mun
icationàl’a
idede
sIP
CPOSIX
893.1InterPr
ocessCom
mun
icationPO
SIX
..............................
903.2IP
CSy
stem
Vversus
POSIX
IPC
................................
913.3Filesde
messages..........................................
913.4Mém
oire
partag
ée.........................................
943.5Sé
map
hores.............................................
973.5.1Introd
uctio
nau
xsémap
hores
...............................
973.5.2Introd
uctio
nau
xsémap
hores:an
alog
ie.........................
983.5.3Introd
uctio
nau
xsémap
hores:algo
rithm
esP
ETV
..................
993.5.4Sé
map
horesPO
SIX
:initia
lisation
............................
993.5.5Sé
map
horesPO
SIX
:utilisa
tion..............................10
0
4Com
paraison
desmécan
ismes
desynchron
isation
102
Synchron
isationentreprocessus
105
Plandu
docu
ment
106
1Introd
uction
106
1.1Correspon
danc
eprob
lèmes
viecouran
te/informatique
.....................10
6
TEL
ECOM
SudP
aris
—Coo
rdon
nateur
:Franç
oisTr
ahay
—Av
ril20
18—
mod
uleCSC
4508
/M2
iii
Con
ceptsde
ssystèm
esd’exploitatio
net
mise
enoeuv
resous
Unix
2Sé
map
hore
=Outilde
base
107
2.1Gén
éralité
s.............................................10
72.2Ana
logie...............................................10
82.3Algorith
mes
PET
V........................................10
9
3Résolutionde
prob
lèmes
desynchron
isationtypiqu
es10
93.1Ex
clusionmutuelle
.........................................11
03.2Coh
orte
...............................................11
13.3Pa
ssag
ede
témoin
.........................................11
13.3.1En
void
esig
nal.......................................11
13.3.2Ren
dez-vous
entrede
uxprocessus
............................11
23.3.3App
elprocéd
ural
entreprocessus.............................11
33.4Pr
oduc
teurs/Con
sommateu
rs...................................11
33.4.1Objectif
...........................................11
43.4.2Pr
incipe
...........................................11
43.4.3Dép
oser
etextraire
.....................................11
53.4.4Ex
emple...........................................11
53.4.5K
prod
ucteurs
.......................................11
73.4.6Ex
emplede
prob
lèmeavec
2prod
ucteurs
........................11
7Ex
emplede
prob
lèmeavec
2prod
ucteurs(suite)
.......................11
73.4.7So
lutio
ncomplète
.....................................11
93.5Le
cteu
rs/réd
acteurs
........................................11
93.5.1Objectif
...........................................11
93.5.2So
lutio
nde
base
......................................12
03.5.3Ana
lyse
...........................................12
03.5.4So
lutio
navec
priorit
éségales
...............................12
1
4Interblocage
122
4.1Introd
uctio
n............................................12
24.2Gén
éralité
s.............................................12
2
5Miseen
oeuv
reda
nsun
systèm
ed’exploitation
123
Biblio
grap
hiedu
chap
itre
124
Thr
eads
ouprocessuslégers
125
Plandu
docu
ment
126
1Présentation
126
1.1Bibliograp
hie
............................................12
61.2Threads
...............................................12
71.3Détache
rle
flotd’exécutionde
sressou
rces
............................12
81.3.1Vision
trad
ition
nelle
d’un
processus
...........................12
81.3.2Autre
visio
nd’un
processus
................................12
91.3.3Pr
ocessusmulti-
thread
...................................12
9
2Création/
destructionde
thread
s13
02.1Pt
hread“H
ello
world
”.......................................13
02.2En
semblede
thread
spa
irs.....................................13
22.3Threads
POSIX:c
réation/
destruction
..............................13
22.3.1Identifi
catio
n........................................13
32.3.2Utilisa
tion..........................................13
32.3.3Attrib
uts
..........................................13
4Attrib
uts(2/2
)..........................................13
5
TEL
ECOM
SudP
aris
—Coo
rdon
nateur
:Franç
oisTr
ahay
—Av
ril20
18—
mod
uleCSC
4508
/M2
iv
Con
ceptsde
ssystèm
esd’exploitatio
net
mise
enoeuv
resous
Unix
3Partage
desdo
nnées
136
3.1Notionde
varia
blepa
rtag
ée....................................13
73.2Pa
rtag
eno
n-intentionn
elde
sdo
nnées
..............................13
73.3Cod
eréentran
tet
thread
-safe
...................................13
93.4Thread-Lo
calS
torage
.......................................14
2
4Sy
nchron
isation
144
4.1Sy
nchron
isatio
n...........................................14
44.2Ex
clusions
mutue
lles........................................14
5Ex
clusions
mutue
lles(2/2
).......................................14
54.3Sé
map
horesPO
SIX
(rap
pel)
...................................14
74.4Attente
decond
ition
s.......................................14
9Attente
decond
ition
s(2/2
)......................................15
0
5Utilisationet
limitations
desthread
s15
45.1Utilisa
tionde
sthread
s.......................................15
55.2Limita
tions
desthread
s......................................15
7
6Autresfonc
tion
sde
labibliothèque
POSIX
thread
s15
86.1Ann
ulation
.............................................15
8Ann
ulation(2/2
)............................................16
06.2Nettoya
gede
sressou
rces
......................................16
16.3Initialisa
tion
............................................16
2
Biblio
grap
hiedu
chap
itre
162
Architecture
163
Plandu
docu
ment
164
1Introd
uction
164
1.1Lo
ideMoo
re............................................16
4
2Processeu
rséqu
entiel
165
3Pipeline
165
3.1Micro
archite
ctured’un
pipe
line
.................................16
63.2Pr
ocesseurssupe
rscalaire
s.....................................16
63.3Pr
ocesseurssupe
rscalaire
s.....................................16
73.4Dép
enda
nceentreinstructions
..................................16
73.5Gestio
nde
sbran
chem
ents
.....................................16
83.6Pr
édictio
nde
bran
chem
ent
....................................16
83.7Instructions
vectorielle
s......................................16
9
4ParallelP
rocessing
170
4.1Hyp
erthread
ing/SM
T......................................17
14.2Pr
ocesseursmulti-
cœurs......................................17
14.3Architectures
SMP
.........................................17
24.4Architectures
NUMA
.......................................17
2
5Hiérarchiemém
oire
173
5.1En
jeux
................................................17
35.2Cache
s................................................17
45.3Mem
oryMan
agem
entUnit(M
MU)
...............................17
55.3.1Fu
lly-associativ
ecaches
..................................17
65.3.2Dire
ct-m
appedcaches
...................................17
65.3.3Set-a
ssociativ
ecaches
...................................17
75.3.4Coh
éren
cede
cache.....................................17
7
TEL
ECOM
SudP
aris
—Coo
rdon
nateur
:Franç
oisTr
ahay
—Av
ril20
18—
mod
uleCSC
4508
/M2
v
Con
ceptsde
ssystèm
esd’exploitatio
net
mise
enoeuv
resous
Unix
Biblio
grap
hiedu
chap
itre
178
Éléments
d’architecture
client-serveur
179
Plandu
docu
ment
180
1Introd
uction
180
1.1Défi
nitio
nd’un
earchite
ctureclient/serveur
...........................18
01.2Objectif
decetteprésentatio
n...................................18
11.3À
prop
osdescommun
ications
...................................18
2
2Se
rveu
rmon
o-tâchegérant
unclient
àla
fois
182
2.1Pr
incipe
...............................................18
32.2Ana
lyse
...............................................18
6
3Se
rveu
ravec
autant
detâches
quede
clients
187
3.1Pr
incipe
...............................................18
73.2Va
riante...............................................19
23.3Ana
lyse
...............................................19
23.4Réd
uctio
ndu
temps
deconn
exionde
sclients
..........................19
3
4Se
rveu
ravec
Ntâches
gérant
tous
lesclients
194
4.1Pr
incipe
...............................................19
44.2Ana
lyse
...............................................19
5
5Se
rveu
rmon
o-tâchegérant
tous
lesclientsàla
fois
195
5.1Pr
incipe
...............................................19
65.2Ape
rçude
laprog
rammationévén
ementie
lle...........................19
75.3Ana
lyse
...............................................20
0
6Con
clusion
201
Biblio
grap
hiedu
chap
itre
201
Récap
itulatifde
sou
tils
203
Plandu
docu
ment
204
1Infossurl’a
rchitecturematérielle
204
2Deb
ugging
204
3Entrées/S
orties
–Bases
dedo
nnées
205
4IP
C20
5
5Tr
aitementde
tâches
parallè
les
206
Biblio
grap
hie
207
Plandu
docu
ment
208
1Con
ceptsde
ssystèm
esd’exploitation
208
2Ouv
ragesdé
diés
àUnix
208
3Docum
ents
dédiés
àLinu
x20
9
4Docum
ents
spécifiqu
esthread
s20
9
TEL
ECOM
SudP
aris
—Coo
rdon
nateur
:Franç
oisTr
ahay
—Av
ril20
18—
mod
uleCSC
4508
/M2
vi
Con
ceptsde
ssystèm
esd’exploitatio
net
mise
enoeuv
resous
Unix
5Divers
210
6Biblio
grap
hie
211
Inde
x21
5
TEL
ECOM
SudP
aris
—Coo
rdon
nateur
:Franç
oisTr
ahay
—Av
ril20
18—
mod
uleCSC
4508
/M2
vii
Con
ceptsde
ssystèm
esd’exploitatio
net
mise
enoeuv
resous
Unix
TEL
ECOM
SudP
aris
—Coo
rdon
nateur
:Franç
oisTr
ahay
—Av
ril20
18—
mod
uleCSC
4508
/M2
viii
Con
ceptsde
ssystèm
esd’exploitatio
net
mise
enoeuv
resous
Unix
#1
' &
$ %
Licence
Cedo
cumentestun
edo
cumentatio
nlibre,p
lacéesous
laLicencede
Docum
entatio
nLibreGN
U(G
NU
Free
Docum
entatio
nLicense).
Copy
righ
t(c
)20
03-2
018
Fréd
ériq
ueSi
lber
-Cha
ussu
mier
,Mi
chel
Sima
tic
etFr
anço
isTr
ahay
Perm
issi
ones
tac
cord
éede
copi
er,
dist
ribu
eret
/ou
modi
fier
cedo
cume
ntse
lon
les
term
esde
laLi
cenc
ede
Docu
ment
atio
nLi
bre
GNU
(GNU
Free
Docu
ment
atio
nLi
cens
e),
vers
ion
1.2
outo
ute
vers
ion
ulté
rieu
repu
blié
epa
rla
Free
Soft
ware
Foun
dati
on;
avec
les
Sect
ions
Inva
riab
les
qui
sont
‘Lic
ence
’;
avec
les
Text
esde
Prem
ière
deCo
uver
ture
qui
sont
‘Con
cept
sde
ssy
stèm
esd’
expl
oita
tion
etmi
seen
oeuv
reso
usUn
ix’
etav
ecle
sTe
xtes
deQu
atri
ème
deCo
uver
ture
qui
sont
‘Hel
p’.
Une
copi
ede
lapr
ésen
teLi
cenc
epe
utêt
retr
ouvé
eà
l’ad
ress
esu
ivan
te:
http
://w
ww.g
nu.o
rg/c
opyl
eft/
fdl.
html
.
Remarqu
e:La
licence
compo
rteno
tammentles
sections
suivantes:2.
COPIES
VERB
ATIM
,3.
COPIES
ENQUA
NTITÉ
,4.MODIFICAT
IONS,
5.MÉL
ANGE
DEDOCU
MEN
TS,6
.RE
CUEILS
DE
DOCU
MEN
TS,7
.AG
RÉGA
TION
AVEC
DES
TRAV
AUXINDÉP
ENDAN
TSet
8.TR
ADUC
TION.
Cedo
cumentestpréparéavec
deslogicielslib
res:
•LA T
EX:
les
textes
sources
sont
écrit
sen
LA TEX
(http://www.latex-project.org/
,le
site
duGroup
efra
ncop
hone
des
Utilisa
teurs
deT E
X/L
A TEX
est
http://www.gutenberg.eu.org).
Une
nouv
elle
classe
etun
eno
uvelle
feuille
destyle
basées
sur
laclasse
seminar
ont
été
tout
spécialement
dévélopp
ées:
newslide
etslideint
(projet
fusio
nforge
slideint
,https://fusionforge.int-evry.fr/www/slideint/);
•emacs:
tous
lestextes
sont
édité
savec
l’éditeur
GNUemacs(http://www.gnu.org/software/emacs
);
•dvips:
lesversions
PostSc
ript(P
ostScriptestun
emarqu
edé
poséede
lasociétéAdo
beSy
stem
sIn-
corporated)de
stran
sparents
etde
spo
lycopiés
àde
stination
desétud
iantsou
desen
seigna
ntssont
obtenu
esàpa
rtirde
sfichiersDVI(
«DeV
iceInde
pend
ent»
)géné
résàpa
rtirde
LaTe
Xpa
rl’u
tilita
iredvips(http://www.ctan.org/tex-archive/dviware/dvips
);
•ps2pdf
etdvipdfmx
:lesversions
estun
emarqu
edé
poséede
lasociétéAdo
beSy
s-temsIncorporated
)sont
obtenu
esà
partir
desfichiersPo
stscrip
tpa
rl’u
tilita
ireps2pdf
(ps2pdf
étan
tunshell-s
criptlan
çant
Ghostscript,
voyezle
sitede
GNUGhostscripthttp://www.gnu.org/-
software/ghostscript/)
ouàpa
rtir
desfichiersDVIp
arl’u
tilita
iredvipfm
;
•makeindex:
les
index
etglossaire
sont
géné
rés
àl’a
ide
del’u
tilita
ireUnix
makeindex
(http://www.ctan.org/tex-archive/indexing/makeindex);
•TeX4ht
:lespa
gesHTML
sont
géné
rées
àpa
rtir
deLa
TeX
parTeX4ht
(http://www.cis.ohio-
-state.edu/~gurari/TeX4ht/mn.html);
•Xfig
:lesfig
ures
sont
dessinéesda
nsl’u
tilita
ireX11
deFigxfig
(http://www.xfig.org
);
•fig2dev:
lesfig
ures
sont
expo
rtéesda
nslesform
atsEP
S(«
Encapsulated
PostSc
ript»)
etPN
G(«
Portab
leNetwo
rkGraph
ics»)
grâceà
l’utilita
irefig2dev
(http://www.xfig.org/userman/-
installation.html);
•convert:
certaine
sfig
ures
sont
conv
ertie
sd’un
form
atvers
unau
tre
par
l’utilita
ireconvert
(http://www.imagemagick.org/www/utilities.html
)de
Imag
eMag
ickStud
io;
•HTML
TIDY
:les
sources
HTML
géné
rés
par
TeX4h
tsont
«be
autifi
és»
àl’a
ide
deHTML
TIDY
(http://tidy.sourceforge.net
);v
ouspo
uvez
donc
leslireda
nsle
source;
Nou
sespéron
sque
vous
rega
rdez
cettepa
geavec
unna
viga
teur
libre:F
irefoxpa
rexemple.
Com
mel’ind
ique
lechoixde
lalic
ence
GNU/F
DL,
tous
lesélém
ents
perm
ettant
d’ob
tenircessupp
orts
sont
libres.
TEL
ECOM
SudP
aris
—Coo
rdon
nateur
:Franç
oisTr
ahay
—Av
ril20
18—
mod
uleCSC
4508
/M2
ix
Con
ceptsde
ssystèm
esd’exploitatio
net
mise
enoeuv
resous
Unix
TEL
ECOM
SudP
aris
—Coo
rdon
nateur
:Franç
oisTr
ahay
—Av
ril20
18—
mod
uleCSC
4508
/M2
x
Con
ceptsde
ssystèm
esd’exploitatio
net
mise
enoeuv
resous
Unix
Ava
nt-p
ropo
sCecoursestprép
aréet
dispen
séde
puis
deno
mbreusesan
nées
parlesen
seigna
ntsde
l’Instit
utNationa
lde
sTé
lécommun
ications
pour
lemod
ulede
deux
ièmean
néeASR
3de
Télécom
INT.Q
uesoient
remerciées
icitoutes
lespe
rson
nesqu
ion
tcontrib
uées
àce
cours:
Christ
ian
Bac,
Djamel
Belaïd,Oliv
ierBe
rger,
Guy
Bernard,
Dom
inique
Bouille
t,Den
isCon
an,Dan
ielMillot,Christ
ian
Schü
ller,
Fréd
érique
Silber-
Cha
ussumier,
Mich
elSimatic
etEr
icRen
ault.
Certaines
partiesde
cecoursne
seraient
passans
lesno
mbreu
xécha
nges
avec
Cathe
rineCoq
uery
etClaud
eKaiserdu
Dép
artementInform
atique
duCNAM
:qu’ils
ensoient
icié
galementremerciés.
Etpu
isun
gran
dmerci
aux
person
nesqu
ion
tpe
rmis
aulogo
CSC
4508
d’exist
er:
GeorgeW
.Hart
(http://www.georgehart.com
)qu
iaau
toris
él’u
tilisa
tionde
photos
desa
sculptureKno
tstructured
pour
celogo
etSteeve
Joua
nnet
etMarie-C
hrist
ineMon
getqu
iont
travaillé
àl’intégratio
nde
cesph
otos
dans
lelogo
.
Lestran
sparents
etle
polycopié
ontété
réalisé
sgrâce
àLa
TeX
etau
xtravau
xde
Philipp
eLa
levée
etDen
isCon
an.
TEL
ECOM
SudP
aris
—Coo
rdon
nateur
:Franç
oisTr
ahay
—Av
ril20
18—
mod
uleCSC
4508
/M2
xi
Con
ceptsde
ssystèm
esd’exploitatio
net
mise
enoeuv
resous
Unix
TEL
ECOM
SudP
aris
—Coo
rdon
nateur
:Franç
oisTr
ahay
—Av
ril20
18—
mod
uleCSC
4508
/M2
xii
Pré
sent
atio
ndu
cour
s
Mic
hel
Sim
atic
mod
ule
CSC
4508
/M2
Avr
il20
18 1
Présentatio
ndu
cours
#2
' &
$ %
Plan
dudo
cument
1Objectifsd
ucours...............................................................3
2Pu
blic
viséet
pré-requ
is.........................................................4
3Dé
roulem
ent....................................................................5
#3
' &
$ %
1Objectifsdu
cours
�«Ce
uxqu
ison
tférus
depratique
sans
posséder
lascien
cesont
commele
pilote
qui
s’embarqueraitsans
timon
,nib
oussoleet
nesaurait
jamais
oùilva
»(Léonard
deVinci)
�Objectifs
�(R
e)découvrir
lesconcepts
debase
d’un
systèm
ed’exploitatio
n(processus,
gestionde
lamém
oire,fi
chier
s,threads)
IPrendreconscie
ncedesh
ypothèsesc
hoisies
parles
concepteurs/développ
eurs
desystèm
ed’exploitatio
nI
Comprendre,
enexpérim
entant
sous
Linu
x,les
impactsd
ecesh
ypothèses
�Étud
ierles
mécanism
esde
commun
icatio
nentre
processusd
’une
mêm
emachine
�Co
mprendreles
prob
lèmes
desynchron
isatio
nde
processuse
tles
patro
nsde
conceptio
nassocié
s
Àla
placed
epatronde
conceptio
n,certains
auteursp
arlent
deparadigm
e,c’est-à-dire
unmod
èlet
héorique
depe
nsée
quio
rientela
rechercheet
laréfle
xion
scientifiqu
e.Cecoursfait
latran
sitionentrela
prem
ière
etla
troisiè
mean
née:
•1ère
anné
e:
–CSC
3102
:Introdu
ctionau
xsystèm
esd’exploitatio
n,àla
conc
urrenc
eentreprocessus
•2è
anné
e:
–CSC
4103
:Introdu
ctionàla
prog
rammationsystèm
een
C–
CSC
4508
(partie
interactionentrelesprog
rammes
etle
systèm
ed’exploitatio
n):Interactio
ns:
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
2
Présentatio
ndu
cours
∗entreun
prog
rammeet
lesystèm
ed’exploitatio
nde
lamachine
surlaqu
elle
iltourne
∗entreplusieursprog
rammes
surla
mêm
emachine
–CSC
4509
:Algorith
mique
etcommun
ications
desap
plications
répa
rties(Interactio
nsentrepro-
cessus
surde
smachinesdiffé
rentes)
•3è
anné
e:
–Su
itede
laVo
ied’APp
rofond
issem
entA
SR:P
rised
ehau
teur
dans
lesinteractio
nsentrep
rocessus
surde
smachinesdiffé
rentes
–Su
itede
laVo
ied’APp
rofin
dissem
entJIN
:Utilisa
tionde
notio
nsvu
esda
nscetteUV
dans
lecadred’ap
plications
interactives
#4
' &
$ %
2Pu
blic
visé
etpré-requ
is
�Pu
blic
visé
�Fu
turs
ingénieurs
(dévelo
ppeurs,
spécifieurs,
archite
ctes...)do
ntle
cœur
demétier
(Télé
coms,spatial...)utilis
el’o
utilinform
atique
�Fu
turs
chercheurs
ensystèm
es(ré
partis)
�Pré-requ
is�
Algorithm
ie(notions)
�Ar
chite
ctures
matérielles
(notions)
�La
ngageC(bon
nepratique)
�Un
ixutilis
ateur(
bonn
epratique)
Siun
participan
tveut
parfa
iresesconn
aissan
ceslié
esau
xpré-requ
is,ilpo
urra
serepo
rter
avec
profi
tvers
lessit
essuivan
ts:
•Algorith
mie
:cou
rsAlgorith
mique
etprog
rammation(C
SC31
01,h
ttps://moodle.tem-
tsp.eu/)
•Sy
stèm
ed’exploitatio
n:c
ours
Introd
uctio
nau
xsystèm
esd’exploitatio
n(C
SC31
02,h
ttp://www-
inf.
telecom-
sudparis.eu/COURS/CSC3102/Supports/)
•La
ngag
eC
:coursPr
ogrammation
systèm
es(C
SC41
03,http://www-i
nf.telecom-s
udparis.eu/
COURS/CSC4103/Supports/)
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
3
Présentatio
ndu
cours
#5
' &
$ %
3Dérou
lement
�Co
urs
�Intro
duction
�Interactions
entre
systèm
emulti-tâcheet
processus
�Ge
stionde
lamém
oire
�En
trées/S
ortie
s�
Commun
icatio
nsinter-p
rocessus
�Sy
nchron
isatio
nentre
processus
�Th
reads
�Ar
chite
cture
�Élém
ents
d’archite
ctureclient-s
erveur
�TP
s(sous
Linu
x)�
Exercic
esd’applica
tion
�Ex
ercic
ede
synthèse
oud’approfon
dissem
ent
�Travail
perso
nnel
Les«sig
naux
»sont
abordé
strès
brièvementda
nsle
cadrede
CSC
4508
.Le
sou
tilssuivan
tsfacilitan
tla
compréh
ensio
ndu
compo
rtem
entd’un
eap
plicationsont
évoq
ués,
voire
utilisés:
•Observatio
nexterne:u
tilisa
tionde
ps,v
mstat,
top,
time
,getrusage()
•Observatio
ninterne:u
tilisa
tiondu
profi
linggprof
•Ana
lyse
accèsmém
oire
:
–Lo
gicielslib
res:m
trace,
mpatrol,
splint
etvalgrind
–Pr
oduits
commerciau
x:I
nsure++(société
Parasoft)
etRational
Purify
(société
IBM
)
Encomplém
ent,qu
elqu
esou
tilsutile
ssont
égalem
entréférenc
ésda
nsla
partie
Récapitulatif
desou
tils,
àla
findu
poly.
Ence
quic
oncernele
travailp
ersonn
el,v
oici
lesrésulta
tsd’un
sond
ageréalisé
surde
sétud
iantsde
lasession20
12-201
3(9
répo
nses
sur14
étud
iants)
:
•Pa
sde
prép
arationné
cessaire
avan
tun
eséan
cede
3he
ures
deCou
rsIntégré.
•En
moyen
ne,4
4he
ures
detravailp
ersonn
el(m
inim
umde
5he
ures,m
axim
umde
100he
ures).
LesT
Psau
ront
lieusurles
machine
sdes
sallesd
eTPsous
Linu
x,maisv
ousp
ouvezbien
sûrt
ravailler
sur
votremachine
person
nelle
(sou
sLinu
x/Mac,o
uen
faisa
nttourne
rLinu
xda
nsun
emachine
virtue
lle).Dan
sce
cas,
vous
aurezbe
soin
d’installerqu
elqu
eslogiciels.
Voicilaliste
desprincipa
uxpa
ckag
es(pou
rDeb
ian
etdé
rivées)
àinstallerpo
urce
mod
ule:
•virtua
lbox
•hw
loc,
hwloc-de
vel,hw
loc-lib
s,hw
loc-gu
i
•pa
pi,p
api-d
evel
•valgrin
d
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
4
Intr
oduc
tion
:rô
led’
unsy
stèm
ed’
expl
oita
tion
Mic
hel
Sim
atic
mod
ule
CSC
4508
/M2
Avr
il20
18 5
Introd
uctio
n:r
ôled’un
systèm
ed’exploitatio
n
#2
' &
$ %
Plan
dudo
cument
2Sy
stèm
esinform
atiques..........................................................4
2Machine
virtuelle.
...............................................................4
4Objectifsd
’unsystèm
ed’exploitatio
n.............................................6
4Diffé
rentst
ypes
desystèm
esd’exploitatio
n.......................................6
#3
' &
$ %
1Sy
stèm
esinform
atiques
�Bu
t:résoud
reun
prob
lèmede
lavie
quotidien
ne
�De
uxentités
:lematériel
etle
logicie
l�
Matériel
:architecturecla
ssique
IUn
itéCe
ntrale
(U.C.)
chargéedu
traite
ment
IMém
oire
Centrale
(M.C.)
chargéedu
stockage
IUn
itésd
’échang
es(U
.E.)
chargéede
l’adaptation
→Pé
riphériq
uesc
hargés
desinterfaces
�Lo
gicie
l:deux
niveaux:
ILo
gicie
ldebase
ILo
gicie
ld’app
lication
→No
tionde
machine
virtuelle
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
6
Introd
uctio
n:r
ôled’un
systèm
ed’exploitatio
n
#4
' &
$ %
2Machine
virtuelle
�Objectif
:offrirauxutilis
ateurs
desf
onctionn
alitésa
daptéesà
leurs
besoins
�Princip
e:m
asqu
erles
caractéristiquesp
hysiq
uesd
umatériel
�So
lutio
n:stru
ctureen
couches,chacun
eoff
rant
dess
ervic
esde
plus
enplus
évolués
auniveau
supérie
ur
Uti
lita
ire
s
Sy
stè
me
d’e
xp
loit
ati
on
Uti
lis
ate
urs
Lo
gic
iel
d’a
pp
lic
ati
on
Ma
téri
el
Lo
gic
iel
de
ba
se
#5
' &
$ %
3Objectifsd’un
systèm
ed’exploitatio
n
�De
uxob
jectifsm
ajeurs
�Transfo
rmer
unemachine
matérielleen
unemachine
utilis
able,
c’est-à-dire
fournir
deso
utils
adaptésa
uxbesoinsind
épendammentd
escaractéristiquesp
hysiq
ues
�Optim
iserl’utilisa
tiondu
matériel
princip
alementp
ourd
esraiso
nsécon
omiques.
�Mais
ilfaut
égale
mentlagarantie
d’un
bonniveau
enmatièr
ede
:�
Sécurité:intégrité,
contrôle
desa
ccès,c
onfid
entia
lité...
�Fiabilit
é:d
egré
desatisfactiondesu
tilisa
teursm
êmedans
desc
onditio
nsho
stiles
etim
prévues
�Effi
cacit
é:p
erform
ancesd
usystèm
e→
Optim
isatio
nspo
urévite
rtou
tsurcoût
(overhead)
enterm
ede
temps
etplace
consom
més
parlesystèm
eau
détrimentd
el’app
lication
→Co
mprom
is→
Diffé
rentst
ypes
desystèm
esd’exploitatio
n
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
7
Introd
uctio
n:r
ôled’un
systèm
ed’exploitatio
n4Différents
type
sde
systèm
esd’exploitatio
n
#6
' &
$ %
4Différents
type
sde
systèm
esd’exploitatio
n
�Prob
lèmes
diffé
rents:
pasd
esystèm
eun
iverse
l
�Àl’orig
ine(ete
ncoreaujourd’hu
ipou
rcertaines
applica
tions),tra
itementp
arlots
oubatch(enchaînem
enta
utom
atique
dese
xécutio
ns)
�Au
jourd’hu
itroisgrandesc
atégories
desystèm
es1.
Systèm
estemps
réel
:con
trôle
deprocessusind
ustriels
(notionde
respectd
etemps
derépo
nseprépon
dérante)
2.Sy
stèm
estra
nsactio
nnels
:traite
ments
àdistance
(nom
breuxaccèsinteractifs,
opérations
prédéfinies,g
rand
equ
antitéd’inform
ations)
3.Sy
stèm
estemps
parta
gé:d
évelo
ppem
entd
’app
lications
etactiv
itésa
vecmoins
decontraintes.Mod
einteractifavec
unmaxim
umde
fonctio
nnalités
#7
' &
$ %
4.1Te
mps
réel
soup
leversus
temps
réel
stric
t
�De
uxcatégorie
sdeprob
lèmes
temps
réel
enfonctio
ndesc
onséqu
encesd
uno
n-respectd
escontraintesd
etemps
1.Te
mps
réel
soup
le(oudo
ux)
�Te
mps
àl’échellehu
main
eet
unretard
neprovoq
uequ
edesd
ésagréments
mineurs
(impatie
ncede
l’utilisa
teur)
�Inform
atique
interactive
,réservatio
nde
places,g
estio
n,tra
itementd
’app
eldans
uncentraltélé
phon
ique...
2.Te
mps
réel
stric
t(ou
dur)
�Sy
stèm
esautono
mes
decontrôle
deprocessusind
ustriels
avec
dese
xigences
trèsf
ortesa
univeau
durespectd
escontraintesd
etemps
:tou
tretardentra
îne
degraves
conséquences
tellesq
u’un
eperte
d’inform
ation(unmessage
suru
nréseau),un
accid
ent(
crashd’un
avion,
explosiond’un
eraffinerie
)...
�Ro
botiq
ue,p
ilotage
d’avions,surveilla
ncemédica
le,acheminem
entd
ela
voix
dans
uncentraltélé
phon
ique,c
ontrô
lede
raffinerie
s,systèm
esem
barqués...
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
8
Introd
uctio
n:r
ôled’un
systèm
ed’exploitatio
n4Différents
type
sde
systèm
esd’exploitatio
n
#8
' &
$ %
4.2Ca
ractéristiquesdesapplications
temps
réel
�Co
ntraintes
�Ré
agirim
pérativ
ementd
ansu
nlap
sdetemps
déterm
iné(durée
fonctio
ndu
domain
e)�
Sûreté
defonctio
nnem
ent:
ils’a
gitd
’assurer
unservice
perm
anentfi
able
caru
narrêt(
partiel
outotal)auraitdesc
onséqu
encesd
ésastre
uses.
�Ax
iomes
debase
lorsd
ela
spécificatio
n/conceptio
n�
Choixde
solutio
nssans
aucunrisqu
e(par
exem
pleen
term
esde
blocages)
�Se
rvice
minim
umpo
urles
opérations
critiqu
es�
Redo
ndance
:matérielle
(dou
blem
entd
esorganesv
itaux,d
ontl’unité
centrale)
etlogicie
lle(procédu
resd
econtrôle,
reprise
...)
IMod
emaît
re/esclav
eI
Mod
eparta
gede
charge
#9
' &
$ %
4.3Transactionn
el
�Ca
ractéristiques
�Ge
stiond’inform
ations
engrande
quantité
�Ex
écutionsim
ultanéed’op
érations
prédéfinies
�Ac
cèsa
uservice
defaçoninteractive
�Gr
andno
mbrede
term
inauxraccordés
�Ga
rantie
auniveau
perfo
rmance
(tem
psde
répo
nse,
sécurité,
fiabilité...)
.
�So
lutio
ns�
Ajou
terlagestiondesc
ommun
icatio
nsàun
eapplica
tionexistante
(vente
par
corre
spon
dance)
�Dé
velopp
erun
eapplica
tionintégrantles
commun
icatio
ns(ré
servationde
place)
�Mon
iteurst
ransactio
nnels
d’origineconstru
cteurs
outie
rce-partiecommeTu
xedo
(sociét
éBE
A):o
ptim
iserlacharge,facilit
erla
prog
rammation,
prise
encompte
desa
spects
sessionet
commun
icatio
nparlemon
iteur,fi
abilit
é...
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
9
Introd
uctio
n:r
ôled’un
systèm
ed’exploitatio
n
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
10
Inte
ract
ions
entr
esy
stèm
em
ulti
-tâc
heet
proc
essu
s
Mic
hel
Sim
atic
mod
ule
CSC
4508
/M2
Avr
il20
18 11
Interactions
entresystèm
emulti-
tâcheet
processus
1Po
intde
vueprocessus
#2
' &
$ %
Plan
dudo
cument
1Po
intd
evueprocessus.
.........................................................4
2Po
intd
evuesystèm
e...........................................................11
3Ordon
nancem
entd
esprocessuss
ousL
inux
......................................15
#3
' &
$ %
1Po
intde
vueprocessus
1.1
Lesa
pplications
etle
systèm
e..................................................4
1.3
Laprog
rammationsystèm
e....................................................
61.3
Lesf
onctions
dela
libc
.......................................................6
1.5
Utilis
ationdesa
ppels
systèm
es.................................................8
1.5
Utilis
ationdesf
onctions
.......................................................8
1.6
Test
duretour
desa
ppels
systèm
eet
desf
onctions
..............................9
1.7
Que
faire
encasd
’erreur
systèm
e?............................................10
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
12
Interactions
entresystèm
emulti-
tâcheet
processus
1Po
intde
vueprocessus
#4
' &
$ %
1.1Lesapplications
etle
systèm
e
�Lesa
pplications
encourse
tlesystèm
erésid
ente
nmém
oire
centrale
�La
mém
oire
estd
iviséeen
deux
parties
�L’espace
systèm
e:lenoyau
�L’espace
utilis
ateur:
oùrésid
entles
applica
tions
Re
lati
on
s a
ve
c
les
pé
rip
hé
riq
ue
s
Es
pa
ce
uti
lis
ate
ur
Es
pa
ce
sy
stè
me
(n
oy
au
)
Ap
pli
ca
tio
n1
Ap
pli
ca
tio
n2
#5
' &
$ %
1.2La
programmationsystèm
e
�C’estledévelopp
ementd
’app
lications
enutilis
antles
ressou
rces
etles
outilsf
ournis
parlesystèm
e�
Utilis
ationde
fonctio
nsstandardsf
ournies
avec
lelan
gage
:inclusesd
ansla
libc
,bibliothèque
standard
dulan
gage
Cpo
urUn
ix�
Cesf
onctions
dialo
guenta
vecle
noyauet
contrôlen
tcedialo
gue
�Lesa
pplications
utilis
enta
insidesr
essourcesd
unoyau
Re
lati
on
s a
ve
c
les
pé
rip
hé
riq
ue
s
Es
pa
ce
uti
lis
ate
ur
Es
pa
ce
sy
stè
me
(n
oy
au
)
Ap
pli
ca
tio
n1
Ap
pli
ca
tio
n2
Es
pa
ce
uti
lis
ate
ur li
bc
Certaines
fonc
tions
dela
libc
rend
entu
nserviceàl’a
pplic
ationsans
pour
autant
faire
appe
lausystèm
e.C’est
lecas,
parexem
ple,
destrcmp
,qsort
...
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
13
Interactions
entresystèm
emulti-
tâcheet
processus
1Po
intde
vueprocessus
#6
' &
$ %
1.3Lesfonctio
nsde
lalib
c
�De
uxtypesf
ondamentaux
:1.
Lesa
ppels
systèm
e�
Cesont
lesfonctio
nsperm
ettant
lacommun
icatio
navec
lenoyau
�Ex
emples
:open,
read
,write
,fcntl
...
2.Lesf
onctions
�Ce
sont
lesfonctio
nsstandard
dulan
gage
C�
Exem
ples
:printf,
fopen,
fread,
strcmp
...
#7
' &
$ %
1.4Utilisa
tiondesappe
lssystèm
es
�Travaillen
tenrelat
iondirecteavec
lenoyau
�Re
tournent
unentie
rpositifo
unu
lencasd
esuccès
et-1
encasd
’échec
�Pa
rdéfautlenoyaupeut
bloq
uerles
appelssystèm
eset
ainsibloq
uerl’app
licationsi
lafonctio
nnalité
demandéene
peut
pasê
treservie
immédiat
ement
�Ne
réserventp
asde
lamém
oire
dans
lenoyau.
Lesr
ésultats
sont
obligatoirement
stockésd
ansl’es
pace
duprocessus(
dans
l’espaceutilis
ateur),
ilfaut
prévoirc
etespace
para
llocatio
nde
varia
ble(statiq
ue,p
ile)o
ude
mém
oire
(malloc()...)
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
14
Interactions
entresystèm
emulti-
tâcheet
processus
1Po
intde
vueprocessus
#8
' &
$ %
1.5Utilisa
tiondesfonctio
ns
�Re
tournent
unevaleu
rdetype
divers
(entier
,caractère,p
ointeur...)
.Voirlemanuel
deréférencepo
urchacun
ed’entre
elles
�Lo
rsqu’elles
rend
entu
npo
inteur,c
elui-c
iest
lepo
inteur
NULL
encasd
’échec
�Ce
rtaines
peuventu
tilise
runappelsystème(fopen
s’app
uiesuro
pen,
fread
sur
read
...)
�Lesf
onctions
rend
antu
npo
inteur
ontg
énérale
menta
lloué
dela
mém
oire
dans
l’espacedu
processuse
tlepo
inteur
rend
uydo
nneaccès
#9
' &
$ %
1.6Te
stdu
retour
desappe
lssystèm
eet
desfonctio
ns
�Ilfaut
toujou
rstester
lavaleu
rderetour
d’un
appelsystème
Sivaleu
rrendu
eesté
gale
à−
1�
Ilfaut
gérerleprob
lème
�Un
evaria
bleexternede
nom
errnoestp
osition
néeàun
evaleu
rind
iquant
l’erre
ur(cette
varia
blevaut
0s’iln
’yapasd
’erreur)
�Ilfaut
presqu
etoujou
rstester
lavaleu
rderetour
d’un
efonctio
n
Pour
lesfonctio
nsrend
antu
npo
inteur,silavaleu
rrendu
eestN
ULL
�Ilfaut
gérerleprob
lème
�En
void
emessagesd
’erreursà
l’aidedesf
onctions
�perror()
(oustrerror()
)�
fprintf()(oufputs)
Lefichier
errno.hassociede
smné
mon
ique
sàchaq
ueerreur
«stan
dard
».Le
mande
chaq
ueap
pels
ystèmeet
dechaq
uefonc
tionexplique,d
ansla
sectionERRORS
,les
diffé
rents
code
sd’erreur
quip
euvent
être
renv
oyés.
Unexem
plede
«presquetoujou
rs»estla
fonc
tionprintf(3).
Pourqu
oi?
Que
lque
squ
estio
nspo
urs’e
ntraîner
surlesap
pels
systèm
eset
lesfonc
tions
:•
Voyezla
page
duman
ueld
el’a
ppel
systèm
estat(2)
–Que
fait
cetap
pels
ystème?
–Po
urqu
oifaut-il
luip
asserun
pointeur
surun
estructurestat
enpa
ramètre
?–
Avan
td’app
eler
stat
,cep
ointeu
rdoitê
treinitia
lisép
ourp
ointer
suru
nezone
mém
oire,p
ourquo
i?Sino
nqu
ese
passe-t-il?
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
15
Interactions
entresystèm
emulti-
tâcheet
processus
1Po
intde
vueprocessus
•Vo
yezla
page
duman
ueld
ela
fonc
tiongethostbyname(3)
–Que
lest
lerôle
decettefonc
tion?
–Com
mentrécu
père-t-onsonrésulta
t?–
Oùestréalisé
el’a
llocatio
nde
l’espacemém
oire
nécessaire
pour
stockersonrésulta
t?
Témoign
aged’un
ancien
ASR
:«Sa
nsinsis
tanc
ede
votre[N
DLR
:Mich
elSimatic]p
art,
cela
neno
usau
raitpa
ssau
tésivite
auxyeux
quelesp
roblèm
es(endé
butd
ela
coup
erobo
tique
)ven
aitd
’unman
quede
gestionde
serreurssurun
code
quin
’avaitpa
sétérelu
parsuffisammentde
mon
de.»
#10
' &
$ %
1.7Que
faire
encasd’erreur
systèm
e?�
Utilis
erperror("message")po
uraffi
cher
lemessage
indiqu
ésuivi
de«:»
etdu
message
systèm
ecorre
spon
dant
àl’erre
ur
�Ut
iliser
lamacro
assert()
rc=appelSysteme(...);
assert(rc>=
0);
�(Spécifi
queBS
Det
nonstandard,m
aisOK
Linu
xet
MacOS)
Utilis
erles
fonctio
nserret
errx
�(Spécifi
quecompilat
eurg
cc)U
tilise
rles
fonctio
nserroret
error_at_line
�Dé
finiret
utilis
erun
emacro
ERROR_AT_LINE
#defineERROR_AT_LINE(status,errnum,filename,linenum,...){\
fprintf(stderr,"%s:%d:",
filename,linenum);
\fprintf(stderr,__VA_ARGS__);
\fprintf(stderr,":%s\n",strerror(errnum));\
abort();
\}
Lafonctio
nstrerror()
perm
etd’ob
tenirlachaîne
decaractères
affichée
parp
error()sans
pour
autant
provoq
uerd’affi
chag
e.__FILE__
,__LINE__et
__func__
sont
desm
acrosd
éfinies
parlestan
dard
C99
etsont
donc
valid
espo
urtout
compilateur.
Lafonc
tion
abort()
term
inede
man
ière
anormalele
processusen
cours.
Un
core
dump
estgéné
ré(ana
lysableu
ltérie
urem
entp
arun
débu
ggue
ur),sila
limite
fixée
parles
helll’a
utorise
.Par
exem
ples
ousb
ash,
ulimit
-cpe
rmet
devoir
lataillelim
itedu
core
dump
(ilfaut
tape
rla
comman
deulimit
-cunlimited
pour
n’avoirau
cune
limite
).Vo
iciu
nexem
pled’utilisatio
nde
lafonc
tionassert
:/*
****
****
****
****
**/
/*ex
empl
eAss
ert.
c*/
/***
****
****
****
****
/
/*Ce
prog
ramm
ea
pour
obje
ctif
d’il
lust
rer
lero
lede
lama
cro
asse
rt*/
#inc
lude
<std
lib.
h>#i
nclu
de<s
ys/t
ypes
.h>
#inc
lude
<sys
/sta
t.h>
#inc
lude
<uni
std.
h>
#inc
lude
<ass
ert.
h>
int
main
(){
stru
ctst
atbu
f;in
trc
;
rc=
stat
("un
Fich
ierQ
uiNE
xist
ePas
",&b
uf);
asse
rt(r
c>=
0);
retu
rnEX
IT_S
UCCE
SS;
} TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
16
Interactions
entresystèm
emulti-
tâcheet
processus
1Po
intde
vueprocessus
Lemessage
d’erreur
obtenu
àl’e
xécu
tionestle
suivan
t:
exem
pleA
sser
t:ex
empl
eAss
ert.
c:19
:ma
in:
Asse
rtio
n‘r
c>=
0’fa
iled
.Ab
ando
n(c
ore
dump
ed)
assert
perm
etde
détecter
leprob
lème,maisilfau
tpassers
ousd
ebug
gerp
ourm
ieux
compren
drel’orig
ine
del’e
rreu
rlors
del’a
ppel
systèm
e(enaffi
chan
tle
contenude
lavaleur
errno).N
otez
qu’il
faut
aussiq
uele
prog
rammeaitétécompilé
avec
l’option-g,q
ueulimit
-cvalaitunlimitedau
mom
entde
l’erreu
r,et
que
lavaria
bleerrnosoitaccessible
aude
bugg
er.
Dec
efait,un
prog
rammeurp
eutp
référeru
tilise
rlafonc
tionerr(qui
estd
ispon
iblesous
Linu
xet
MacOS)
dont
voiciu
nexem
ple:
/***
****
****
****
*//*
exem
pleE
rr.c
*//*
****
****
****
***/
/*Ce
prog
ramm
ea
pour
obje
ctif
d’il
lust
rer
lero
lede
lafo
ncti
on*/
/*er
rqu
ies
tun
eex
tens
ion
BSD
non
stan
dard
*/
#inc
lude
<std
lib.
h>#i
nclu
de<s
ys/t
ypes
.h>
#inc
lude
<sys
/sta
t.h>
#inc
lude
<uni
std.
h>
#inc
lude
<err
.h>
#def
ine
NOM_
FICH
IER
"unF
ichi
erQu
iNEx
iste
Pas"
int
main
(){
stru
ctst
atbu
f;in
trc
;
rc=
stat
(NOM
_FIC
HIER
,&b
uf);
if(r
c<
0){
err(
EXIT
_FAI
LURE
,"%
s:%d
:Pb
aumo
ment
del’
appe
la
stat
sur
fich
ier
\"%s
\"",
__FI
LE__
,__
LINE
__,
NOM_
FICH
IER)
;} re
turn
EXIT
_SUC
CESS
;}
Lemessage
d’erreur
obtenu
àl’e
xécu
tionestle
suivan
t:
exem
pleE
rr:
exem
pleE
rr.c
:25:
Pbau
mome
ntde
l’ap
pel
ast
atsu
rfi
chie
r"u
nFic
hier
QuiN
Exis
tePa
s":
Nosu
chfi
leor
dire
ctor
y
Cette
fonc
tionaun
epo
rtab
ilité
limité
e.Su
rtou
t,elle
nedé
clen
chepa
sla
créatio
nd’un
core.D
ece
fait,
iln’estpa
spo
ssible
d’an
alyser
lecore
géné
réau
mom
entde
l’erreu
r,de
man
ière
àcompren
drecommentle
prog
rammeestarriv
éau
niveau
decetteerreur.
Autre
possibilité,s
ileprog
rammeu
rsait
qu’il
n’utilisera
qu’uncompilateur
gcc,
ilpe
utpréférer
error
ouerror_at_linedo
ntvo
iciu
nexem
ple:
/***
****
****
****
****
****
***/
/*ex
empl
eErr
oc_a
t_li
ne.c
*//*
****
****
****
****
****
****
*/
/*Ce
prog
ramm
ea
pour
obje
ctif
d’il
lust
rer
lero
lede
lafo
ncti
on*/
/*er
ror_
at_l
ine
qui
est
*spe
cifi
que*
agc
c*/
#inc
lude
<std
lib.
h>#i
nclu
de<s
ys/t
ypes
.h>
#inc
lude
<sys
/sta
t.h>
#inc
lude
<uni
std.
h>
#inc
lude
<err
no.h
>#i
nclu
de<e
rror
.h>
#def
ine
NOM_
FICH
IER
"unF
ichi
erQu
iNEx
iste
Pas"
int
main
(){
stru
ctst
atbu
f;in
trc
;
rc=
stat
(NOM
_FIC
HIER
,&b
uf);
if(r
c<
0){
erro
r_at
_lin
e(EX
IT_F
AILU
RE,
errn
o,__
FILE
__,
__LI
NE__
,"P
bau
mome
ntde
l’ap
pel
ast
atsu
rfi
chie
r\"
%s\"
",NO
M_FI
CHIE
R);
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
17
Interactions
entresystèm
emulti-
tâcheet
processus
} retu
rnEX
IT_S
UCCE
SS;
}
Lemessage
d’erreur
obtenu
àl’e
xécu
tionestle
suivan
t:
./ex
empl
eErr
or_a
t_li
ne:e
xemp
leEr
ror_
at_l
ine.
c:24
:Pb
aumo
ment
del’
appe
la
stat
sur
fich
ier
"unF
ichi
erQu
iNEx
iste
Pas"
:No
such
file
ordi
rect
ory
Leprog
rammeu
rdisposeainsid
’unaffi
chag
eplus
clairqu
antàl’o
riginede
l’erreu
r.To
utefois,erroret
error_at_lineprésentent
2inconv
énients.To
utd’ab
ord,
elless
onts
pécifiq
uesà
gcc:e
llesn
esont
donc
pas
exploitables
avec
d’au
tres
compilateurs.
Surtou
t,ellesne
déclen
chentpa
sla
créatio
nd’un
core.D
ece
fait,
iln’estpa
spo
ssible
d’an
alyser
lecore
géné
réau
mom
entde
l’erreu
r,de
man
ière
àcompren
drecommentle
prog
rammeestarriv
éau
niveau
decetteerreur.
C’est
pourqu
oino
usrecomman
dons
l’utilisa
tionde
lamacro
ERROR_AT_LINEdo
ntvoiciu
nexem
ple:
/***
****
****
****
****
****
***/
/*ex
empl
eERR
OR_A
T_LI
NE.c
*//*
****
****
****
****
****
****
*/
/*Ce
prog
ramm
ea
pour
obje
ctif
d’il
lust
rer
lero
lede
lama
cro
ERRO
R_AT
_LIN
E*/
#inc
lude
<std
lib.
h>#i
nclu
de<s
ys/t
ypes
.h>
#inc
lude
<sys
/sta
t.h>
#inc
lude
<uni
std.
h>
#inc
lude
<std
io.h
>#i
nclu
de<s
trin
g.h>
#inc
lude
<err
no.h
>#d
efin
eER
ROR_
AT_L
INE(
stat
us,e
rrnu
m,fi
lena
me,l
inen
um,.
..)
{\
fpri
ntf(
stde
rr,"
%s:%
d:",
file
name
,lin
enum
);\
fpri
ntf(
stde
rr,_
_VA_
ARGS
__);
\fp
rint
f(st
derr
,":%
s\n"
,st
rerr
or(e
rrnu
m));
\ab
ort(
);\
}
#def
ine
NOM_
FICH
IER
"unF
ichi
erQu
iNEx
iste
Pas"
int
main
(){
stru
ctst
atbu
f;in
trc
;
rc=
stat
(NOM
_FIC
HIER
,&b
uf);
if(r
c<
0){
ERRO
R_AT
_LIN
E(EX
IT_F
AILU
RE,
errn
o,__
FILE
__,
__LI
NE__
,"P
bau
mome
ntde
l’ap
pel
ast
atsu
rfi
chie
r\"
%s\"
",NO
M_FI
CHIE
R);
} retu
rnEX
IT_S
UCCE
SS;
}
Lemessage
d’erreur
obtenu
àl’e
xécu
tionestle
suivan
t:
exem
pleE
RROR
_AT_
LINE
.c:3
2:Pb
aumo
ment
del’
appe
la
stat
sur
fich
ier
"unF
ichi
erQu
iNEx
iste
Pas"
:No
such
file
ordi
rect
ory
Aban
don
(cor
edu
mped
)
Cette
macro
pallielesinc
onvénients
identifi
ésprécéd
emment.Deplus,leprog
rammeu
rdisp
osed’un
core
pour
unean
alysefin
ede
l’erreu
r.Notez
que,
dans
lecasd’un
eerreur
decertaine
sfonc
tions
dela
librairieC
(mallocpa
rexem
ple),la
varia
bleerrnon’estpa
spo
sitionn
ée.D
onc,
sivotreprog
rammepe
ututiliserla
macro
assert()
(com
me
pour
lesa
ppelss
ystème),l’utilisa
tionde
lamacro
ERROR_AT_LINEamoins
desens
(puisque
lavaria
bleerrno
n’estpa
spo
sitionn
ée).
Celape
utam
ener
leprog
rammeu
ràdé
finir
uneau
tremacro
quin
epren
dpa
sen
comptele
errno.
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
18
Interactions
entresystèm
emulti-
tâcheet
processus
2Po
intde
vuesystèm
e
#11
' &
$ %
2Po
intde
vuesystèm
e
2.2
Généralités
surl’ex
écutiondest
âchess
ystème.................................1
32.2
Trait
ementd
esappelssystèm
e................................................13
3.0
Prise
encomptedesinterruptions
.............................................15
#12
' &
$ %
2.1Généralité
ssurl’exécutio
ndestâches
systèm
e
�L’exécutiondest
âchess
ystèmes’e
ffectue
engénéralsur
lecomptedesd
ifférents
processush
ébergésp
arle
systèm
e
�Le
systèm
ene
sedéroulepo
ursonpropre
comptequ
edans
trèsp
eude
cas
�Ondistingu
edeux
typesd
’actions
�Le
traite
mentd
esappelssystèm
e�
Laprise
encomptedesinterruptions
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
19
Interactions
entresystèm
emulti-
tâcheet
processus
2Po
intde
vuesystèm
e
#13
' &
$ %
2.2Traitementdesappe
lssystèm
e
esp
ace
noyau
esp
ace
uti
lisate
ur
Pro
gra
mm
e
Bib
lioth
èq
ue s
tan
dard
UneFo
nct
ion(
) {
.
..
LaPri
mit
ive (
P1
, P2
, ..
.) ;
.
..} m
ain
() {
...
}
LaPri
mit
ive:
..
.
movq
P1
, %
rdi
m
ovq
P2
, %
rsi
m
ovq
P3
, %
ed
x
movq
Num
ero
Sysc
all,
%ra
x
sysc
all
..
.
ret
G
est
ionnair
eS
ysc
all(
) {
P
rim
itiv
eN
oyau(N
um
ero
) ;
} Pri
mit
iveN
oyau(i
nt
num
ero
) {
cop
iePa
ram
etr
e(&
arg
s);
(*
LeTa
ble
au[N
um
ero
]) (
arg
s, &
vale
urR
eto
ur)
;
R
eto
urU
tilis
ate
ur(
vale
urR
eto
ur)
;}
LeC
od
e(v
oid
* A
rgs,
...
) {
...
.}
LeTa
ble
au
•Le
sespa
cessystèm
eet
utilisateur
sont
sépa
rés
→Unprocessusne
peut
pasaccéde
rau
xressou
rces
dusystèm
e
•Le
sprocessusréalise
ntlesap
pels
systèm
een
passan
tda
nsle
mod
esystèm
eet
enexécutan
tl’a
ppel
systèm
eda
nsle
noyau
Surun
emachine
32bits,lechan
gementd’espa
cese
fait
parun
etrap
pe(écrite
enassembleu
r)
Surun
emachine
64bits,lechan
gementd’espa
cese
fait
grâceàl’instruc
tionsyscall
•Pr
écision
ssurle
déroulem
entde
sap
pels
systèm
e
1.Pr
éparation
–Algorith
mede
base
∗Vé
rifier
quela
requ
êteestvalid
e∗
Com
muter
lapile
∗Sa
uter
àla
fonc
tionrend
antle
service.
Cette
fonc
tionrécu
père
lesargu
ments
etlesmet
dans
unestructurede
travail.
–Si
larequ
êtene
conc
erne
pasun
eEn
trée/S
ortie
,leprocessusdé
roulele
code
duno
yausans
blocag
eet
term
inel’a
ppel
systèm
e–
Ence
quic
oncernelesrequ
êtes
d’E/
S,on
distingu
e:
∗Le
sE/
Sinterrup
tibles(ellespe
uventêtre
avortées
parun
signa
l)∗
LesE/
Sininterrup
tibles(elle
sne
peuv
entpa
sêtre
avortées)
–Po
urcesdeux
type
s,le
processus
∗Pr
épareun
environn
ementpo
urse
mettreen
attentede
laréalisa
tion
∗Dem
ande
augérant
depé
riphé
riquesde
réalise
rl’E
/S.
∗S’en
dort
2.Te
rminaison
–L’E/
Sesta
cquittée
paru
nau
trep
rocessus
quiind
ique
quelep
rocessus
endo
rmiest
désorm
ais
prêt
pour
exécution
–Le
systèm
edo
nnela
mainau
processusp
rêtp
oure
xécutio
nselonl’a
lgorith
med’ordo
nnan
ce-
ment
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
20
Interactions
entresystèm
emulti-
tâcheet
processus
–Unprocessusr
éalisan
tune
E/Sinterrup
tible
peut
sortirde
l’attente
lors
dela
réceptiond’un
signa
l
–Ildé
fait
alorssa
deman
deau
niveau
noya
uet
retourne
enmod
eutilisateur
avec
uncompte-
rend
ud’erreur
3.Retou
rau
mod
eutilisateur
–Le
sap
pels
systèm
eretourne
ntun
code
–En
casd’erreur,lavaria
bleerrnoestmod
ifiée
pour
explicite
rl’e
rreu
rg
∗Le
svaleursde
errnosont
décrite
sda
nsle
fichier
<errno.h>.
∗Une
courte
phrase
peut
être
obtenu
epa
rla
fonc
tionchar
*strerror(int
errnum).
Cette
phrase
peut
être
affichée
parvoid
perror
(const
char
*s).
#14
' &
$ %
2.3Prise
encomptedesinterrup
tions
�Lesinterruptions
sont
acqu
ittéesp
arle
processuse
ncours
�Ilpeut
être
amenéàpasser
dumod
eutilis
ateura
umod
enoyau
�Ilfaitpasser
lesprocessusq
uiattend
aient
l’événementlié
àcette
interru
ptiondans
lemod
eprêt
pour
exécution
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
21
Interactions
entresystèm
emulti-
tâcheet
processus
3Ordon
nancem
entde
sprocessussous
Linu
x
#15
' &
$ %
3Ordon
nancem
entdesprocessussous
Linu
x
3.1
Prior
itéstatique
..............................................................16
3.3
Politique
d’ordo
nnancement.
.................................................1
83.3
Ordon
nancem
entt
emps-ré
elLinu
x............................................1
83.4
Ordon
nancem
ents
tand
ard.
...................................................21
Sous
Linu
x,on
a4no
tions
liées
àl’o
rdon
nanc
ement:
•La
priorit
éstatique
,
•La
politique
d’ordo
nnan
cement,
•La
priorit
éd’ordo
nnan
cement,
•La
priorit
édy
namique
.
Ces
notio
nspe
rmettent
:
•Unordo
nnan
cementtemps-réel«
soup
le»
•Unordo
nnan
cementstan
dard
privilé
gian
tun
eexécutionéquitablede
sdiffé
rentsprocessus
NB
:So
usLinu
x,on
n’aau
cune
garantie
surle
temps
d’exécution
d’un
etâche(axiom
ede
base
dutemps-réel«
stric
t»).
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
22
Interactions
entresystèm
emulti-
tâcheet
processus
3Ordon
nancem
entde
sprocessussous
Linu
x
#16
' &
$ %
3.1Prioritéstatique
�intsched_setscheduler(pid_t
pid,
intpolicy,conststruct
sched_param*p);
perm
etd’aff
ecterà
unprocessusu
neprior
itéstatique
(entre
0et
99)s
tipulantlafile
d’attentede
l’ordon
nanceur(
schedu
ler)o
ùildo
itêtre
placé.
�Po
urdécid
erdu
processusà
exécuter,l’ordon
nanceurp
rend
leprem
ierprocessus
prêt
dans
lafilede
plus
hauteprior
ité
�NB
:Vale
ursf
ortesd
eprior
itéstatique
=Fo
rtesp
riorités
#17
' &
$ %
3.2Po
litique
d’ordo
nnancement
�intsched_setscheduler(pid_t
pid,
intpolicy,conststruct
sched_param*p);
perm
etd’aff
ecterà
unprocessusu
nepo
litique
d’ordo
nnancement
�SCHED_FIFO
:Leprocessusn
’arrête
sonexécutionqu
esi
IIlfaitun
eE/
SI
Ilfaitun
appelà
intsched_yield(void)(il
laissealo
rspasser
lesautre
sprocessusp
rêts
demêm
eprior
ité)
IIlchange
sapo
litique
d’ordo
nnancement
IIlestp
réem
ptépard
esprocessusp
lusp
rioritair
es(il
reprendensuite
son
exécution)
�SCHED_RR
:une
cond
ition
d’arrêts
upplém
entaire
estd
éfinie
ILa
duréed’exécutionatteintu
nqu
antum
detemps
(déterminable
viala
fonctio
nintsched_rr_get_interval(pid_tpid,
struct
timespec
*tp)
)�
SCHED_OTHER:o
rdon
nancem
ente
ntemps
parta
gé(ré
servéauxprocessusd
eprior
itéstatique
0)
Lequ
antum
detemps
pour
unprocessusSCHED_RR
estidentiq
uequ
elle
quesoit
lapriorité
statique
duprocessus.
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
23
Interactions
entresystèm
emulti-
tâcheet
processus
3Ordon
nancem
entde
sprocessussous
Linu
x
#18
' &
$ %
3.3Ordon
nancem
enttemps-réelL
inux
3.4.0
Inversion
deprior
ité:é
noncédu
prob
lème.
..................................21
3.4.0
Inversion
deprior
ité:e
xemplede
solutio
n....................................21
Lesprioritésstatiqueset
lespolitiquesd’ordonn
ancementSCHED_FIFO
etSCHED_RR
deLinu
xpe
rmettent
degérerdu
temps-réel«
soup
le».
Toutefois,
ilfaut
garder
enmém
oire
queLinu
xestsujetàl’inversion
depriorité
présentéeda
nsles
tran
sparents
suivan
ts.
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
24
Interactions
entresystèm
emulti-
tâcheet
processus
3Ordon
nancem
entde
sprocessussous
Linu
x
#19
' &
$ %
3.3.1Inversionde
priorité:é
noncédu
prob
lème
Tâch
e A
Pri
ori
té f
aib
le
C p
rêt
: C
pre
nd
la m
ain
Beso
in R
.
Déjà
réserv
ée
par
A :
C s
e
met
en
att
en
te
Tâch
e C
Pri
ori
té f
ort
e
Réserv
ati
on
resso
urc
e
cri
tiq
ue R
A p
rêt
: A
pre
nd
la m
ain
B p
rêt.
B p
lus p
rio
rita
ire q
ue A
. D
on
c B
pre
nd
la
main
.
On
co
nsta
te q
ue C
att
en
d la f
in d
e l’e
xécu
tio
n
de B
alo
rs q
ue C
est
plu
s p
rio
rita
ire q
ue B
:
les p
rio
rité
s d
e B
et
C s
on
t in
vers
ées.
Pri
ori
té m
oy.
Tâch
e B
t1t3
t4t2
t0
#20
' &
$ %
3.3.2Inversionde
priorité:e
xemplede
solutio
n
Tâch
e C
Pri
ori
té f
ort
e
Tâch
e A
Pri
ori
té f
aib
le
mem
e p
rio
rité
qu
e A
: C
att
en
d
C p
rêt.
C d
eR
éserv
ati
on
resso
urc
e
cri
tiq
ue R
A a
fin
i (e
t a
relâ
ch
é R
) :
A
retr
ou
ve s
a
pri
ori
té f
aib
le.
De p
lus, C
est
plu
s p
rio
rita
ire
qu
e B
. D
on
c C
pre
nd
la m
ain
C a
fin
i (e
t a
relâ
ch
é R
) :
B p
ren
d la
main
A p
rêt
: A
pre
nd
la m
ain
Réserv
ati
on
resso
urc
e
cri
tiq
ue R
:
A r
eço
it u
ne
pri
ori
té f
ort
e
B p
rêt.
B m
oin
s p
rio
rita
ire
qu
e A
: B
att
en
d
Pri
ori
té m
oy.
Tâch
e B
t1t4
t2t0
t2’
t3t4
’
Cetran
sparentprésente
unexem
plede
solutio
nqu
ine
peut
être
qu’im
plém
enté
man
uelle
mentsous
Linu
x.En
effet,L
inux
nefournitau
cunmécan
ismepo
urdé
tecter
etcorriger
automatique
mentle
prob
lème
d’inversionde
priorit
é.
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
25
Interactions
entresystèm
emulti-
tâcheet
processus
#21
' &
$ %
3.4Ordon
nancem
entstandard
�La
politique
SCHED_OTHERestlapo
litique
utilis
éepard
éfautp
arLinu
x
�Elle
s’app
uiesurl’ordon
nanceurC
FS(C
ompletely
FairSc
hedu
ler)
�Le
processusà
exécuter
estc
hoisi
dans
laliste
desp
rocessus
deprior
itéstatique
nulle,e
nutilis
antu
neprior
itédynamique
quin
es’a
pplique
quedans
cette
liste.
NB:V
aleursf
ortes=
Faibles
prior
ités
�La
prior
itédynamique
estfon
ction,
entre
autre
s�
d’un
eprior
itéd’ordo
nnancement(caractère
«gentil»du
processusfi
xéavec
lesappelssystèm
eintnice(int
inc)
ouintsetpriority(intwhich,
int
who,
intprio))
�du
faitqu
ele
processusa
itrelâc
héle
processeur
avante
xpira
tionde
sondélai
�Le
processusleplus
prior
itaire
(dynam
iquement)
este
xécuté
jusqu’àce
qu’il
�Fa
sseun
eE/
S�
Devie
nnemoins
prior
itaire
(dynam
iquement)
qu’unautre
processus
Pour
approfon
dirl’ordon
nanc
ements
tand
ardet
pren
dreconn
aissan
cede
spist
esde
rechercheenvisagées,
lelecteu
rtir
eraprofi
tde
laréférenc
e[?]. Bib
liogr
aphi
edu
chap
itre
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
26
Ges
tion
dela
mém
oire
Mic
hel
Sim
atic
mod
ule
CSC
4508
/M2
Avr
il20
18 27
Gestio
nde
lamém
oire
1Po
intde
vuesystèm
e
#2
' &
$ %
Plan
dudo
cument
1Po
intd
evuesystèm
e............................................................4
2Po
intd
evueprocessus.
........................................................21
Cecoursestprésente
brièvementle
fonc
tionn
ementde
lamém
oire.Po
urplus
dedétails,no
usvous
conseillo
nsde
lire[D
repp
er,2
007].
#3
' &
$ %
1Po
intde
vuesystèm
e
1.1
Intro
duction..................................................................
41.2
Besoinsd
esprocessus..........................................................5
1.3
Paginatio
n....................................................................8
1.4
Segm
entatio
n................................................................13
1.5
Paginatio
nversu
sSe
gmentatio
n..............................................
161.6
Algorithm
espo
urla
gestiondesp
ages
.........................................19
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
28
Gestio
nde
lamém
oire
1Po
intde
vuesystèm
e
#4
' &
$ %
1.1Introd
uctio
n
�Un
processusa
besoin
d’être
présente
nmém
oire
centrale
pour
s’exécuter
�Mém
oire
centrale
divis
éeen
deux
parties
:�
L’espace
réservéau
systèm
ed’exploitatio
n�
L’espace
allou
éauxprocessus
�La
Gestionmém
oire
concerne
l’espaceprocessus
�Ca
pacit
ésmém
oire
augm
entent,m
aisles
besoinsa
ussi→
Nécessité
deplusieu
rsniveaux
�Mém
oire(s)r
apide(s)
(cache(s))
�Mém
oire
centrale
�Mém
oire
auxiliaire
(disq
ue)
Princip
ed’inclu
sionpo
urlim
iterles
mise
sàjour
entre
lesdiffé
rentsn
iveaux
Àprop
osdu
principe
d’inclusion,
dans
unearchite
ctureIntel,le
cacheL1
(Level
1)estinclus
dans
lecacheL2
(Level
2),lui-m
êmeinclus
dans
laRAM,e
lle-m
êmeincluseda
nsle
swap
(disq
ue).
Voicilestemps
d’accèstypiqu
esàde
sdo
nnéessit
uées
dans
lesdiffé
rentstype
sde
mém
oire
surun
emachine
“classique
”(processeu
rIntelC
orei5
Skylake)
en20
171:
•do
nnée
dans
lecacheL1
:4cycles
/1ns
•do
nnée
dans
lecacheL2
:12cycles
/3ns
(3fois
plus
lent
queL1
)
•do
nnée
dans
lecacheL3
:44cycles
/10
ns(10fois
plus
lent
queL1
)
•do
nnée
dans
laRAM
:60-1
00ns
(100
fois
plus
lent
queL1
)
•do
nnée
surun
disque
SSD
:150
µs(150
000fois
plus
lent
queL1
)
•do
nnée
surun
disque
dur:1
0ms(10millions
defois
plus
lent
queL1
)
Letableau
suivan
tmon
trelesdiffé
renc
esde
coût
entrelestype
sde
mém
oire
(etl’é
volutio
navec
les
anné
es):
Ann
ée20
0820
0920
1020
1420
17Disq
uedu
r,72
00tr/m
n(en
€/Go)
0,50
0,32
0,10
0,04
0.03
Disq
ueSS
D(en
€/Go)
––
–0,50
0.29
Clé
USB
(en
€/Go)
––
1,64
0.62
0.39
RAM
(en
€/Go)
–37
,00
21,85
8.75
8.11
1.Don
nées
dispon
iblesda
nsle
man
uel“
Inte
l64
and
IA-3
2A
rchi
tect
ures
Opt
imiz
atio
nR
efer
ence
Man
ual”
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
29
1Po
intde
vuesystèm
e1.3Pa
gina
tion
#5
' &
$ %
1.2Besoins
desprocessus
Allo
cation
Trou
veru
nezone
mém
oire
dispon
ible
pour
ystockeru
nprog
ramme
Libé
ration
quandun
prog
rammese
term
ine,
récupérerles
espaces(
enfaisa
ntdes
regrou
pements
s’ily
aeu
fragm
entatio
n)qu
’iloccupaitpo
urles
consacrerà
d’autre
sprocessus.
Protection
Garantirl’intégritéde
l’espacemém
oire
associé
àchaque
processus→
�Dispositif(
matériel)d
econtrôle
empêchantt
outa
ccès
endehors
del’espace
attribu
é�
Toutedétectiond’un
evio
lationmém
oire
estr
écup
érée
parlesystèm
e(dérou
tement)
Adressage
Traductio
ndesa
dresseslog
iquese
nadresses
physiques:
fonctio
nappelée
topo
graphieou
mapping
�Àla
tradu
ction/
édition
deslien
s�
Auchargementinitia
l�
Àl’exécutio
n
Lessystèm
esmulti-
utilisateurset
multi-
tâches
actuelstels
Unix,
Windo
ws-NT
(etsessuccesseurs
Windo
ws-20
00,W
indo
ws-XP,
etc.)...
ontces4be
soins.
Com
mela
gestionmém
oire
àba
sede
pagina
tion
etde
segm
entatio
nyrépo
ndpleine
ment,
cessystèm
esd’exploitatio
nutilisent
cetype
degestionmém
oire.
C’est
pourqu
oino
uslesdétaillon
sda
nsla
suite
dece
cours.
#6
' &
$ %
1.3Pa
ginatio
n
1.3.1
Généralités
..................................................................8
1.3.2
Adresselogiqu
e..............................................................9
1.3.4
Tabledesp
ages
............................................................11
1.3.4
Accélér
ateurs
(cachesd
’adresses)............................................11
1.4.0
Écroulem
ent.
..............................................................13
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
30
1Po
intde
vuesystèm
e1.3Pa
gina
tion
#7
' &
$ %
1.3.1Généralité
sM
ém
oir
e p
hysi
qu
e
Mém
oir
e v
irtu
elle
P2
Mém
oir
e v
irtu
elle
P1
�Objectif
:offrirun
espace
adressable
plus
grandqu
ela
mém
oire
physique
�Princip
e�
Espace
adressable
dechaque
prog
rammedécoup
éen
page
s�
Mém
oire
physique
divis
éeen
cadr
esde
page
s
�l’exécutio
n,un
processuspo
ssède
�Pe
ude
pagesen
mém
oire
centrale
(pages
activ
es)
�Le
resteest
#8
' &
$ %
IInexistante
nmém
oire
(pages
inactiv
esjamaisécrites)
IEn
mém
oire
second
aire
(pages
inactiv
esqu
iont
déjà
étéécrites)
�Le
dispositifd
epaginatio
n�
Effectuela
corre
spon
danced’adresse
�Ch
arge
lespagesnécessaires(dérou
tementp
ardéfaut
depage)
�(Éventuellement)
décharge
despagesactiv
esen
mém
oire
second
aire
�Don
c,le
prog
rammen’estp
lusprésentintégralem
ente
nmém
oire
centrale
etiln’yaplus
decontinuité
physique
Sous
Linu
x,lescadres
depa
geon
tun
etaillede
4Ko(taille
défin
iepa
rlesconstantes
PAGE_SIZEet
PAGE_SHIFT
dans
lefichier
page.h
).
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
31
1Po
intde
vuesystèm
e1.3Pa
gina
tion
#9
' &
$ %
1.3.2Ad
resselogiqu
e�
Espace
adressable
divis
éàpartird
esbits
depo
idsf
orts
del’adresse
Adresselogiqu
esurk
bits
Numérode
Page
Déplacem
entd
anslapage
(pbits
)((k−p)bits
)N
pd
→2p
pagese
tune
page
contien
t2k
−poctets
�Ta
illed’un
epage
�Àl’orig
ine:5
12octets
ou1Ko
�Au
jourd’hu
i:2Ko
,4Ko
(k-p
=12
bits,d
oncp=
20bits)e
tplus
Choix=
comprom
isentre
divers
critè
reso
pposés
�De
rnièr
epage
àmoitié
gaspillé
e�
Temps
detra
nsfert
d’un
epage
faible
parr
appo
rtau
temps
d’accèst
otal
�Mém
oire
depetitecapacit
é:p
etite
spages
#10
' &
$ %
1.3.3Ta
bledespages
�La
corre
spon
danceentre
adresselogiqu
eet
adresseph
ysique
sefaitavec
unetable
desp
ages
contenant
�Nu
mérode
cadrede
page
�Bits
d’inform
ation(présence,
accès,référence,
écriture,
date
dechargement...)
Np
d
Ad
resse lo
giq
ue
Ad
resse p
hysiq
ue
Nc
dcad
re N
c
cad
re 0
cad
re 1
Mo
t ad
ressé
cad
re y
Mém
oir
e C
en
trale
Info
rmati
on
Nu
méro
de c
ad
re
0 1 Np x
Nc
Tab
le d
es P
ag
es
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
32
Gestio
nde
lamém
oire
1Po
intde
vuesystèm
e
#11
' &
$ %
1.3.4Ac
célérateurs(cachesd’adresses)
�Prob
lème:tou
taccèsàun
einform
ationnécessite
deux
accèsmém
oire
�So
lutio
n:u
tilise
rdes
mém
oiresassocia
tives
(registresd’accèsrapide)
�Princip
e�
Onaun
certainno
mbrede
registresàdisposition
�Num
érode
page
logiqu
eN
pcomparé
aucontenude
chaque
registre
�Ég
alité
trou
vée
→en
sortie
numéro
Ncdu
cadrecorre
spon
dant
�Sino
nutilisatio
nde
latabledespages
Np
d
Ad
resse lo
giq
ue
Ad
resse p
hysiq
ue
Nc
dcad
re N
c
cad
re 0
cad
re 1
Mo
t ad
ressé
cad
re y
Mé
mo
ire
Ce
ntr
ale
Nu
méro
de p
ag
eN
um
éro
de c
ad
re
R0
R1
Rz
Rt
Nc
Re
gis
tre
s d
’ac
cé
léra
teu
r
Np
Dan
sun
earchite
ctureIntel,on
disposed’un
Tran
slatio
nLo
ok-aside
Buffe
r(T
LB)mun
ide32
,64,
voire
256entrées.
NB
:onpa
rleégalem
entde
cachede
trad
uctio
nd’ad
resse.
Pour
anecdo
te,e
ndé
cembre20
07,A
MD
aconstaté
unbu
gda
nssesprocesseursqu
adri-
cœursOpteron
andPh
enom
.Cebu
gétaitlié
àla
TLB
etau
cachede
niveau
3.Unpa
tchaétéprop
osé:ile
ntraînaitun
edé
grad
ationde
perfo
rman
cesde
10à40
%(http://techreport.com/articles.x/13741).
#12
' &
$ %
1.3.5Éc
roulem
ent
�Eff
etsecond
aire
dela
paginatio
n:é
crou
lement(t
hras
hing
)dû
àun
taux
dedéfautsde
page
trop
impo
rtant
�Deuxfacteurs
princip
aux:taille
mém
oire
etdegréde
multip
rogram
mation(nom
brede
processus)
0T
aille
mém
oir
e
Pro
bab
ilit
é d
e d
éfa
ut
de p
ag
e
1
0N
om
bre
de p
rocessu
s
Pro
bab
ilit
é d
e d
éfa
ut
de p
ag
e
1
�So
lutio
ns�
Augm
entatio
nde
lacapacit
émém
oire
�Ordre
desmod
ules
utilisés
�Prise
encomptelors
dudévelopp
ement
�Ré
gulatio
nde
lacharge
(load
levell
ing)
:lim
itatio
ndu
nombrede
processus
�Définitio
nd’un
espace
vital(
work
ing
set)
nécessaire
�Ge
stiondu
taux
dedéfautsde
page
:mod
uler
leno
mbrede
pagesallouées
Lacomman
deappletviewer
˜simatic/Cours/ASR/Demo/vm.htmlaffi
cheun
edé
mon
stratio
nde
lamé-
moire
virtue
lle.
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
33
1Po
intde
vuesystèm
e1.4Se
gmentatio
n
#13
' &
$ %
1.4Se
gmentatio
n
1.4.2
Généralités.................................................................15
1.4.2
Descrip
teur
desegm
ents....................................................15
#14
' &
$ %
1.4.1Généralité
s
�Objectif
:refléter
enmém
oire
centrale
lastructuredesprog
rammes
(cod
e,do
nnées,pile)
�L’utilisateur
défin
itdessegm
ents
(entité
slogiqu
es)
�Prog
ramme=
ensemblede
segm
ents
ayantu
netailleet
desattribu
tspropres(le
cture
seule,
écriture,
parta
ge)
�Po
urdisposer
d’un
esegm
entatio
n,ilfaut
undispositifc
hargéde
�Eff
ectuer
lacorre
spon
danceentre
uneadresselogiqu
eet
l’adresse
physique
�As
surerlaprotectio
n�
Chargerles
segm
ents
enmém
oire
�Co
rrespon
danceréalisé
eparu
netabledesdescrip
teursde
segm
ents
contenant
�Ad
ressede
base
d’im
plantatio
n�
Long
ueur
dusegm
ent
�Inform
ations
decontrôle
d’accès
�Protectio
nassuréeparu
ndo
uble
contrôle
:siledéplacem
ente
stnégatif
ousupérie
uràla
long
ueur
dusegm
ent,alorsilyavio
latio
nmém
oire
etdéroutem
ent
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
34
Gestio
nde
lamém
oire
1Po
intde
vuesystèm
e
#15
' &
$ %
1.4.2Descripteur
desegm
ents
Info
rma
tio
n
0 1 Ns x
Descri
pte
ur
de S
eg
men
ts
Lo
ng
ue
ur
Ba
se
lgb
Ad
res
se
ph
ys
iqu
e
bd
Ad
res
se
lo
giq
ue
Ns
d
se
gm
en
t N
s
Mo
t a
dre
ss
é
Mém
oir
e C
en
trale
b b+
d
b+
lg−
1
+
�Do
ublem
entd
esaccèsm
émoire→
Mêm
esdispositifs
accélér
ateurs
(caches
d’adresses)q
uepo
urla
paginatio
n.
#16
' &
$ %
1.5Pa
ginatio
nversus
Segm
entatio
n
�Mise
enoeuvre
analog
ue,m
aisconcepts
diffé
rents
�Pa
ginatio
n=
divis
ionph
ysique
vsSe
gmentatio
n=
divis
ionlogiqu
e�
Paginatio
ntra
nsparenteàl’u
tilisa
teur
vsSe
gmentatio
ndéterm
inée
parl’utilisa
teur
�Ta
illedespagesfixes
vsTa
illedessegm
ents
varia
ble(aveccontrôle
deno
n-dépassem
ent)
�Onutilise
donc
paginatio
net
segm
entatio
n!
Ad
res
se
lo
giq
ue
su
r k
bit
s
N°
de
Se
gm
en
tD
ép
lac
em
en
t d
an
s l
e s
eg
me
nt
N°
de
Se
gm
en
tN
° d
e P
ag
eD
ép
lac
em
en
t d
an
s l
a p
ag
e
Ns
dN
p
�Av
antage
:mém
oire
virtuelle(segments
chargésen
partie)
etorganisatio
nlogiqu
e�
Inconvénien
t:Su
rcoû
t(lim
itéparl’utilisa
tionde
caches
d’adresses
dans
leprocesseur)
Lescomman
desUnixsuivan
tesdo
nnentde
sinform
ations
surla
pagina
tionet
lasegm
entatio
nde
spro-
cessus
dela
machine
:
•Pa
gina
tion
–La
comman
deps
-uaffi
che
∗La
taillemém
oire
virtue
lleutiliséepa
rle
processus(V
SZ)
∗La
taillemém
oire
résid
anten
mém
oire
centrale
(RSS
)–
Lacomman
detopaffi
che
∗la
mém
oire
centrale
totale/u
tilisé
e/dispon
ible
∗le
swap
total/utilisé/d
ispon
ible
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
35
1Po
intde
vuesystèm
e1.6Algorith
mes
pour
lagestionde
spa
ges
–topaun
affichag
ecomplexequ
ipeu
trequ
érir
trop
detemps
quan
dle
processeur
esttrès
utilisé.
Dan
scecas,la
comman
devmstat
-n1estp
référable:e
lleaffi
cheégalem
entd
’autresind
ications
surla
charge
dela
machine
•Se
gmentatio
n
–La
comman
desize
nomE
xécu
tabl
eliste
lataillede
sdiffé
rentes
sections
deno
mExé
cuta
ble
#17
' &
$ %
1.6Algorith
mes
pour
lagestiondespages
1.6.2
Chargement................................................................19
1.6.2
Remplacem
ent(
déchargement)..............................................19
#18
' &
$ %
1.6.1Ch
argement
�Un
prog
rammedémarre.O
ndécid
edesp
ages
àcharger:
�Àla
demande
c’est-à-dire
encasd
ebesoin
�Pa
ranticipatio
nEx
emple:u
nprog
rammetra
vaille
engénéral(princip
ede
laséqu
entia
litédes
prog
rammes)s
urdesp
ages
contiguëse
nyaccédant
demanièr
ecroissante
:il
accède
àun
epage,p
uisà
lasuiva
nte(danslaplaged’adresse),p
uisà
lasuiva
nte....
Dece
fait,
quandun
prog
rammeaccède
àun
epage,c
ertains
systèm
es(Exemple:S
un)a
nticipent
lefaitqu
’ilaccédera
bientôtà
lasuiva
nte:
illa
précharge.
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
36
Gestio
nde
lamém
oire
2Po
intde
vueprocessus
#19
' &
$ %
1.6.2Re
mplacem
ent(déchargem
ent)
�Po
urles
systèm
espaginéslorsqu’iln’yaplus
depage
libre
FIFO
(Fir
stIn
Fir
stO
ut)Re
mplacer
lapage
laplus
ancie
nne
LRU
(Lea
stR
ecen
tlyU
sed)
Remplacer
lapage
lamoins
récemmentu
tilisé
eLF
U(L
east
Freq
uent
lyU
sed)
Remplacer
lapage
lamoins
fréqu
emment
utilis
éeAlgorithm
ede
Belad
ydit«op
timal
»(O
PT
ouMIN
)Re
mplacer
lapage
quin
esera
plus
utilis
ées’ile
nexisteun
eet
sinon
celle
quilesera
leplus
tardive
ment
Ran
dom
Remplacer
unepage
choisie
auhasard
Algorithm
e«second
echan
ce»
Comprom
istant
auniveau
surcoû
tsqu
’enterm
esde
transferts
�Va
riantede
l’algorith
meLR
Ucoup
léeau
princip
eFIFO
�Un
bitU
associé
àchaque
page
etmisàun
lorsd
echaque
accès
�L’alg
orith
meparcou
rtla
liste
desp
ages
dans
l’ordre
FIFO
etmet
à0tout
bit
Uqu
ivaut1
ouretirela
prem
ièrepage
dont
lebitU
està
0�
C’estl’algorith
meutilis
éparL
inux
L’algo
rithm
e«second
echan
ce»estégalem
entconn
usous
lesno
ms:
•FI
NUFO
(First
InNot
Used
FirstO
ut)
•ho
rloge
(clock)
#20
' &
$ %
2Po
intde
vueprocessus
2.1
Espace
d’adressaged’un
processus.
...........................................2
12.2
Observatio
net
contrôle
del’u
tilisa
tionde
lamém
oire
..........................23
2.3
Allocatio
n/Dé
sallo
catio
ndynamique
demém
oire...............................30
2.4
Déverm
inagedesa
ccès
mém
oire
..............................................37
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
37
2Po
intde
vueprocessus
2.2Observatio
net
contrôle
del’u
tilisa
tionde
lamém
oire
#21
' &
$ %
2.1Espace
d’adressaged’un
processus
Pil
eV
ari
ab
les
au
tom
ati
qu
es
3 G
o
_e
nd
_d
ata
_e
tex
t
0
En
vir
on
ne
me
nt
Ta
s
Va
ria
ble
s g
lob
ale
s n
on
in
itia
lis
ée
s
Co
de
ex
éc
uta
ble
Va
ria
ble
s g
lob
ale
s i
nit
iali
sé
es
Va
ria
ble
s s
tati
qu
es
en
v
sta
ck
bs
s
da
ta
tex
t
#22
' &
$ %
2.2Observatio
net
contrôle
del’u
tilisa
tionde
lamém
oire
2.2.1
Observatio
nde
l’utilisa
tiondesp
ages........................................23
2.2.2
Observatio
ndu
type
d’accèsà
lamém
oire
...................................2
42.2.3
Être
attentifàl’alignementd
esstructures....................................26
2.2.4
Contrôle
desd
éfauts
depage
................................................27
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
38
2Po
intde
vueprocessus
2.2Observatio
net
contrôle
del’u
tilisa
tionde
lamém
oire
#23
' &
$ %
2.2.1Observatio
nde
l’utilisa
tiondespages
�ps
-uet
topdo
nnentd
esindicatio
ns
�intgetrusage(int
who,
struct
rusage
*usage)
perm
etde
conn
aître
�ru_minflt:n
ombrede
défautsd
epage
mineurs,
c’est-à-dire
pagesinactive
sjamais
écrites
finale
mentc
hargéese
nmém
oire
�ru_majflt:n
ombrede
défautsd
epage
majeurs,
c’est-à-dire
pagesinactive
sdéjà
écrites
etdéchargées
(swa
ppées)
surd
isque
�/usr/bin/time
nomE
xécu
tabl
e
affichetoutes
cesinformations
pour
leprocessusn
omExécutable
lancé
enmod
ecommande
•getrusage(2)
perm
etau
ssid
econn
aître
–ru_nswap
:nom
brede
fois
oùle
processusaétéentiè
rementsw
appé
–ru_utime
:tem
pspa
ssépa
rle
processusen
mod
eutilisateur
–ru_stime
:tem
pspa
ssépa
rle
processusen
mod
eno
yau
Noter
quela
struct
rusage
renv
oyée
pargetrusagecontient
d’au
tres
cham
ps,m
aiscescham
psne
sont
pasrenseign
éspa
rLinu
x
•time
nomE
xécu
tabl
eutilise
lafonc
tionbuilt-in
dushellq
uifournitbe
aucoup
moins
d’inform
ations
que/usr/bin/timenomExécutable
#24
' &
$ %
2.2.2Observatio
ndu
type
d’accèsàla
mém
oire
�L’ou
tilvalgrind
(logicie
llibr
e,http://valgrind.org)
perm
etd’ob
server
tous
lestypesd
’accès
àla
mém
oire
effectués
paru
nprog
ramme
valgrind
--tool=cachegrindnomProgramme
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
39
2Po
intde
vueprocessus
2.2Observatio
net
contrôle
del’u
tilisa
tionde
lamém
oire
Voiciu
nexem
pled’utilisatio
nde
valgrind
surlesprog
rammes
gentil
etmechantétud
iésda
nsl’e
xer-
cice
1(etpo
urlesque
lson
constate
unediffé
rencede
temps
d’exécutiond’un
facteu
r10
enl’a
bsen
cede
swap
). Rap
pelons
lecontenude
gentil.c
:/*
****
****
***/
/*ge
ntil
.c*/
/***
****
****
*/
#inc
lude
<std
lib.
h>#i
nclu
de"c
onst
ante
s.h"
char
t[NB
RE][
PAGE
];
int
main
(){
int
i,j,
k;fo
r(i
=0;
i<2
;i+
+){
for
(j=0
;j<
NBRE
;j+
+){
for
(k=0
;k<
PAGE
;k+
+){
t[j]
[k]
=1;
}}
} retu
rnEX
IT_S
UCCE
SS;
}
Etceluid
emechant.c:
/***
****
****
**/
/*me
chan
t.c
*//*
****
****
****
/
#inc
lude
<std
lib.
h>#i
nclu
de"c
onst
ante
s.h"
char
t[NB
RE][
PAGE
];
int
main
(){
int
i,j,
k;fo
r(i
=0;
i<2
;i+
+){
for
(k=0
;k<
PAGE
;k+
+){
for
(j=0
;j<
NBRE
;j+
+){
t[j]
[k]
=1;
}}
} retu
rnEX
IT_S
UCCE
SS;
}
Pour
nepa
savoirde
stemps
d’exécutiontrop
long
savec
valgrind
,lefichier
constantes.h
défin
itun
tableaude
«seulem
ent»5Mo:
/*co
nsta
ntes
.h*/
#def
ine
NBME
G5
#def
ine
BYTE
S(N
BMEG
*1<
<20)
#def
ine
PAGE
4096
#def
ine
NBRE
(BYT
ES/P
AGE)
valgrind
--tool=cachegrindgentil
affiche:
==55
34==
Cach
egri
nd,
anI1
/D1/
L2ca
che
prof
iler
.==
5534
==Co
pyri
ght
(C)
2002
-200
5,an
dGN
UGP
L’d,
byNi
chol
asNe
ther
cote
etal
.==
5534
==Us
ing
LibV
EXre
v14
71,
ali
brar
yfo
rdy
nami
cbi
nary
tran
slat
ion.
==55
34==
Copy
righ
t(C
)20
04-2
005,
and
GNU
GPL’
d,by
Open
Work
sLL
P.==
5534
==Us
ing
valg
rind
-3.1
.0,
ady
nami
cbi
nary
inst
rume
ntat
ion
fram
ewor
k.==
5534
==Co
pyri
ght
(C)
2000
-200
5,an
dGN
UGP
L’d,
byJu
lian
Sewa
rdet
al.
==55
34==
For
more
deta
ils,
reru
nwi
th:
-v==
5534
==--
5534
--wa
rnin
g:Pe
ntiu
m4
with
12KB
micr
o-op
inst
ruct
ion
trac
eca
che
--55
34--
Simu
lati
nga
16KB
I-ca
che
with
32B
line
s==
5534
====
5534
==I
refs
:94
,485
,037
==55
34==
I1mi
sses
:92
1==
5534
==L2
imi
sses
:52
6==
5534
==I1
miss
rate
:0.
00%
==55
34==
L2i
miss
rate
:0.
00%
==55
34==
==55
34==
Dre
fs:
52,4
86,1
17(4
1,98
5,22
5rd
+10
,500
,892
wr)
==55
34==
D1mi
sses
:16
5,21
7(
1,18
3rd
+16
4,03
4wr
)==
5534
==L2
dmi
sses
:16
4,70
3(
694
rd+
164,
009
wr)
==55
34==
D1mi
ssra
te:
0.3%
(0.
0%+
1.5%
)
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
40
2Po
intde
vueprocessus
2.2Observatio
net
contrôle
del’u
tilisa
tionde
lamém
oire
==55
34==
L2d
miss
rate
:0.
3%(
0.0%
+1.
5%)
==55
34==
==55
34==
L2re
fs:
166,
138
(2,
104
rd+
164,
034
wr)
==55
34==
L2mi
sses
:16
5,22
9(
1,22
0rd
+16
4,00
9wr
)==
5534
==L2
miss
rate
:0.
1%(
0.0%
+1.
5%)
valgrind
--tool=cachegrindmechantaffi
che:
==55
60==
Cach
egri
nd,
anI1
/D1/
L2ca
che
prof
iler
.==
5560
==Co
pyri
ght
(C)
2002
-200
5,an
dGN
UGP
L’d,
byNi
chol
asNe
ther
cote
etal
.==
5560
==Us
ing
LibV
EXre
v14
71,
ali
brar
yfo
rdy
nami
cbi
nary
tran
slat
ion.
==55
60==
Copy
righ
t(C
)20
04-2
005,
and
GNU
GPL’
d,by
Open
Work
sLL
P.==
5560
==Us
ing
valg
rind
-3.1
.0,
ady
nami
cbi
nary
inst
rume
ntat
ion
fram
ewor
k.==
5560
==Co
pyri
ght
(C)
2000
-200
5,an
dGN
UGP
L’d,
byJu
lian
Sewa
rdet
al.
==55
60==
For
more
deta
ils,
reru
nwi
th:
-v==
5560
==--
5560
--wa
rnin
g:Pe
ntiu
m4
with
12KB
micr
o-op
inst
ruct
ion
trac
eca
che
--55
60--
Simu
lati
nga
16KB
I-ca
che
with
32B
line
s==
5560
====
5560
==I
refs
:94
,524
,470
==55
60==
I1mi
sses
:92
1==
5560
==L2
imi
sses
:52
6==
5560
==I1
miss
rate
:0.
00%
==55
60==
L2i
miss
rate
:0.
00%
==55
60==
==55
60==
Dre
fs:
52,5
08,6
47(4
2,00
2,12
3rd
+10
,506
,524
wr)
==55
60==
D1mi
sses
:10
,487
,135
(1,
183
rd+
10,4
85,9
52wr
)==
5560
==L2
dmi
sses
:10
,486
,621
(69
4rd
+10
,485
,927
wr)
==55
60==
D1mi
ssra
te:
19.9
%(
0.0%
+99
.8%
)==
5560
==L2
dmi
ssra
te:
19.9
%(
0.0%
+99
.8%
)==
5560
====
5560
==L2
refs
:10
,488
,056
(2,
104
rd+
10,4
85,9
52wr
)==
5560
==L2
miss
es:
10,4
87,1
47(
1,22
0rd
+10
,485
,927
wr)
==55
60==
L2mi
ssra
te:
7.1%
(0.
0%+
99.8
%)
Enécrit
ure,
onconstate
qu’avecgentil
,les
donn
éesne
sont
pastrou
vées
dans
lecacheda
ns1,
5%de
scas.
Avec
mechant,
cettevaleur
mon
teà
99,8%
descas,
cequ
iexp
lique
ladiffé
renc
ede
perfo
rman
cesde
sde
uxprog
rammes
(san
scompter
qu’avecgentil
,laTLBestmise
pleine
mentàprofi
t).
NB
:
•Po
urmechant,
onfait
glob
alem
ent
2×NBRE×PAGE
=2×BYTES
=10.4
85.7
60écrit
ures
surle
tableaut,
cequ
iexp
lique
leno
mbred’écrit
ures
observéesavec
valgrind
.
•Po
urgentil
,onfaitau
ssi2×NBRE×PAGE
=2×
BYTES
=10.4
85.7
60écrit
ures
surletableaut.
Pourtant
lesD
1missesen
écrit
uresont
nettem
entp
lusr
éduits
quepo
urmechant!L
’exp
licationrésid
eda
nsl’e
xécu
tionde
l’outilcg_annotate(fo
urni
avec
valgrind
,cg_annotate
–<numéroPID>
gentil
,[numéroPID]po
uvan
têtre
retrou
véavec
l’exten
siondu
fichier
cachegrind.out.[numéroPID]
géné
répa
rl’exécu
tionde
valgrind
--tool=cachegrind).Ilm
ontreq
uevalgrind
considèreq
ueleprocesseur
estmun
id’uncacheen
écrit
urede
64octets
(cf.64
Bda
nsla
ligne
D1cache).P
arconséque
nt,d
ans
lecasde
gentil
quifaitde
saccèscontigus,leprocesseur
n’abe
soin
d’accéde
ràla
mém
oire
physique
quetous
les64
octets.O
r10.4
85.7
60/6
4=
163.
840:o
nretrou
vele
nombrede
D1missesen
écrit
ure
degentil
.
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
41
2Po
intde
vueprocessus
2.2Observatio
net
contrôle
del’u
tilisa
tionde
lamém
oire
#25
' &
$ %
2.2.3Être
attentifàl’alignementdesstructures
�Pa
rdéfaut,le
compilat
eura
ligne
surd
esfro
ntièr
esde
4octets
(2octets
pour
lesshort).
�Le
compilat
eurp
eutd
oncgénérerd
esoctets
inutilis
ésau
sein
d’un
estructure.
Pour
récupérerc
etespace
perdu
�Le
mieu
xestd
eréordo
nnancerles
feuillesd
esstructures
�Onpeut
aussic
ompacter
toutes
lesstructures
d’un
source
gcc-fpack-struct
�Oubien
compacter
justeun
estructuredo
nnée
typedefstruct
{
...
}__attribute__((packed))uneStructure;
�Ce
talignementp
eutê
treinsuffisant
(besoind’align
ersur1
6octets,p
arexem
ple).
Pour
forcer
l’alignement:
#26
' &
$ %
�typVariablenomVariable__attribute__((aligned
(nombre)));
�Ut
ilisationde
posix_memaligned
pour
lesvaria
bles
detype
pointeur
Pardé
faut,lecompilateur
aligne
surde
sfro
ntièresde
4octets,c
arcertains
processeursne
savent
pas
accéde
ràde
sentie
rsqu
ison
tsurun
efro
ntière
de4octets
(oualorsils
sont
moins
perfo
rman
ts).
C’était
notammentle
casde
sprem
ièresgéné
ratio
nsde
processeursARM.A
ujou
rd’hui,laplup
artde
sprocesseurs
évolué
s(Intel,A
MD...)
n’on
tplus
cegenrede
prob
lème.
Pourtant
certains
compilateurs(don
tgcc)
conti-
nuentàfaire
pardé
faut
cetaligne
mentsurde
sfro
ntièresde
4octets.
Dan
slec
asoù
lecompa
ctag
ed’une
structured
onne
lieuàun
aligne
mentine
fficace
(par
exem
ple,intàche-
valsur
unefro
ntière
de4octets),lecompilateur
neprod
uita
ucun
warningdu
type
WARNING:inefficient
alignment.
L’exercice
Mém
oire/3
illustrela
placeet
lesp
erform
ancesp
erdu
essiun
estructurecontient
desé
léments
quin
esont
pasrang
ésda
nsle
bonordre.
posix_memaligned
correspo
ndà_aligned_mallocsurlescompilateursMicrosoft
etIntel.
L’exercice
Mém
oire/8
illustrel’u
tilisa
tiond’instructions
vectorielle
sSS
Ede
sprocesseursIntel/AMD
qui
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
42
2Po
intde
vueprocessus
2.2Observatio
net
contrôle
del’u
tilisa
tionde
lamém
oire
impo
sent
desdo
nnéesaligné
essurde
sfro
ntièresde
16octets.L
esinstructions
SSE
perm
ettent
defaire
des
opérations
sur4flo
ttan
ts(ausens
floatdu
lang
ageC)en
parallè
le,m
aisrequ
ièrent
quechaq
uegrou
pede
4flo
ttan
tssoit
aligné
surun
efro
ntière
de16
octets.Intel
prop
osedé
sorm
aisun
eextensionde
SSE
appe
lée
AVX
(Advan
cedVe
ctor
Extensions
).Elle
perm
etde
travaille
rsur25
6bits
aulie
ude
128et
n’im
pose
pas
d’aligne
mentsurun
efro
ntière
d’octets.
Lamacro
offsetof
(défi
nieda
nsstddef.h
)pe
rmet
deconn
aîtrela
posit
ion(offset)d’un
cham
psda
nsun
estructure.Pa
rexemple,leprog
rammesuivan
taffichela
posit
iondu
cham
psfield_b(ic
i:4)
parr
appo
rtau
débu
tde
lastructure:
struct
my_struct{
intfield_a;
intfield_b;
}; printf("%d\n",
offsetof(field_b,struct
my_struct));
Cette
macro
est,
parexem
ple,
utiliséeda
nsle
noyauLinu
xpo
urretrou
verl’a
dresse
d’un
estructureà
partir
d’un
pointeur
surun
desescham
ps.
#27
' &
$ %
2.2.4Co
ntrôle
desdéfautsde
page
�Lu
ttecontre
lesdéfautsd
epage
mineurs
�Ilsuffitd
’écrireun
octetd
anslapage
�Lu
ttecontre
lesdéfautsd
epage
majeurs
�intmlock(constvoid
*addr,
size_t
len)
perm
etde
verro
uillere
nmém
oire
centralelenoctets
(àpartird
eaddr
)dela
mém
oire
virtuelledu
processus
�intmunlock(constvoid
*addr,
size_t
len)
déverro
uille
�intmlockall(int
flags)
perm
etde
tout
verro
uillere
nmém
oire
centrale.
flagsvaut
unecombinaiso
nde
IMCL_CURRENT:V
errouillert
outesles
pagesc
orrespon
dant
actuellem
entà
l’espaced’adressagedu
processus
IMCL_FUTURE
:Verrouillert
outesles
pagesq
uiseront
dans
l’espaced’adressage
�intmunlockall(void)
déverro
uille
tout
Sous
Linu
x,la
quan
titéde
mém
oire
physique
quel’o
npe
utverrou
iller
estfix
éepa
rRLIMIT_MEMLOCK
•mlock(2)
etmlockall(2)pe
uventdo
ncécho
uer.
•Dan
sle
casoù
ilsréussis
sent,u
nmalloc(3)subséque
ntpe
utécho
uer.
Laqu
antit
édem
émoire
physique
verrou
illab
lepa
runprocessusp
eutê
trec
hang
éeen
appe
lant
setrlimit.
Unexem
pled’utilisatio
nestdispon
ible
dans
lefichier
exemple_setrlimit.c:
#inc
lude
<sys
/tim
e.h>
#inc
lude
<sys
/res
ourc
e.h>
#inc
lude
<std
io.h
>#i
nclu
de<s
tdli
b.h>
int
main
(){
stru
ctrl
imit
limi
ts;
if(g
etrl
imit
(RLI
MIT_
MEML
OCK,
&lim
its)
)ab
ort(
);
prin
tf("
Numb
erof
lock
able
memo
rypa
ges:
\n")
;
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
43
2Po
intde
vueprocessus
2.3Allo
catio
n/Désallocatio
ndy
namique
demém
oire
prin
tf("
\tcu
rren
t:%l
d\n"
,li
mits
.rli
m_cu
r);
prin
tf("
\tma
ximu
m:%l
d\n"
,li
mits
.rli
m_ma
x);
limi
ts.r
lim_
cur
=li
mits
.rli
m_cu
r/
2;
prin
tf("
Sett
ing
limi
tsto
%ld\
n",
limi
ts.r
lim_
cur)
;
if(s
etrl
imit
(RLI
MIT_
MEML
OCK,
&lim
its)
)ab
ort(
);
if(g
etrl
imit
(RLI
MIT_
MEML
OCK,
&lim
its)
)ab
ort(
);
prin
tf("
Numb
erof
lock
able
memo
rypa
ges:
\n")
;pr
intf
("\t
curr
ent:
%ld\
n",
limi
ts.r
lim_
cur)
;pr
intf
("\t
maxi
mum:
%ld\
n",
limi
ts.r
lim_
max)
;
retu
rn0;
} #28
' &
$ %
2.3Allocatio
n/Désallocatio
ndynamique
demém
oire
2.3.1
Allocatio
n/Dé
sallo
catio
nmém
oire
standard
..................................30
2.3.2
Digressio
n:a
lgorith
mes
pour
malloc
.......................................3
12.3.4
Digressio
n:a
lgorith
mes
pour
free
..........................................33
2.3.4
Désallo
catio
nautomatique
avec
alloca
.....................................33
2.3.6
Mécanism
ed’allocation/
désallo
catio
ndédié.
.................................35
2.3.6
Allocatio
n/Dé
sallo
catio
nmém
oire
auniveau
systèm
e.........................35
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
44
2Po
intde
vueprocessus
2.3Allo
catio
n/Désallocatio
ndy
namique
demém
oire
#29
' &
$ %
2.3.1Allocatio
n/Désallocatio
nmém
oire
standard
�void
*malloc(size_tsize)
renvoieun
pointeur
suru
nezone
desize
octets
�void
*realloc
(void*ptr,size_t
size)
change
lataille
d’un
ezone
mém
oire
réservée
précédem
mentp
armalloc(3)
�void
*calloc(size_tnmemb,
sizeoi_t
size)
Mêm
erôle
quemalloc
,mais
avec
initialisatio
nde
lamém
oire
à0
�intposix_memalign(void**memptr,size_t
alignment,
size_t
size)
Mêm
erôle
quemalloc
,l’adresse
dela
zone
mém
oire
renvoyée
étantu
nmultip
lede
alignment
_aligned_mallocestlafonctio
ncorre
spon
dantesurc
ompilat
eurM
icrosofto
uIntel
�void
free
(void*ptr)
Libératio
nde
zone
#30
' &
$ %
�void
_aligned_free(void*ptr)
Libératio
nde
zone
mém
oire
allou
éepar_
aligned_malloc
�intmallopt(int
parametre,
intvaleur)
Contrôle
deparamètresd
efonctio
nnem
entd
esfonctio
nsprécédentes
•To
utes
cesfonc
tions
sont
desfonc
tions
dela
bibliothèque
C(qui
font
dans
certains
casde
sap
pels
systèm
e).
•L’algo
rithm
ede
malloc(3)esttrès
perfo
rman
t.Il
n’estdo
ncpa
sné
cessaire
engéné
rald
echercher
àl’o
ptim
iser.
•To
utefois:
–Lo
rsd’un
eallocatio
nd’un
ezone
mém
oire
quid
oitêtre
initialisé
eà0,
onprivilé
gieracalloc(3)
(ilestplus
efficace
qu’unmalloc(3)suivid
’unmemset(3)).
–Si
besoin,o
npe
utaffi
nerlespa
ramètresde
fonc
tionn
ementde
malloc(3)avec
mallopt(3)
.
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
45
2Po
intde
vueprocessus
2.3Allo
catio
n/Désallocatio
ndy
namique
demém
oire
–Deplus,e
naff
ectant
__malloc_hook,
__realloc_hook
et__free_hook,
onpe
utpe
rson
naliser
lecompo
rtem
entde
sroutines
d’allocatio
n/lib
érationstan
dard.
–http://blog.pavlov.net/2007/11/21/malloc-r
eplacementsévoq
uede
salternatives
àl’a
lgo-
rithm
estan
dard
demalloc
.
•Qua
ndon
libèreun
ezone
avec
free
,ile
stvivementconseillé
d’aff
ecterNULL
aupo
inteur
qu’onavait
surcettezone.C
elape
rmet
unplan
tage
netsi,
parerreur,d
ansla
suite
duprog
ramme,
onchercheà
nouv
eauàaccéderàcettezone
(désormaislib
érée)àl’a
idede
cepo
inteur.
•[Blaess,
2002
]propo
sed’alleren
core
plus
loin
:ils
uggère
detester
systém
atique
mentla
valeur
d’un
pointeur
avan
tde
faire
malloc
,c’est-à-dire
d’avoirsystém
atique
mentla
séqu
ence
:assert(p
!=NULL);
p=malloc(taille);...
Leprog
rammesuivan
tillustrecommentcommentcetteaff
ectatio
nàNULL
perm
etd’avoirun
plan
tage
netet
commentle
passag
esous
debu
gger
perm
etde
retrou
verrapide
mentl’o
riginede
l’erreu
r.
/***
****
****
****
****
***/
/*il
Faut
Mett
reNU
LL.c
*//*
****
****
****
****
****
*/
/*Ce
prog
ramm
eil
lust
rel’
inte
ret
d’af
fect
era
NULL
une
vari
able
qui
*//*
cont
ient
unpo
inte
urve
rsun
ezo
neno
nal
loue
e.*/
/*En
effe
t,il
fait
une
segm
enta
tion
faul
t,ce
qui
perm
etde
repe
rer
*//*
qu’o
na
comm
isun
eop
erat
ion
illi
cite
.Ut
ilis
erun
debu
gger
perm
et*/
/*de
comp
rend
rele
prob
leme
.*/
/**/
/*1)
Comp
iler
lepr
ogra
mme
avec
l’op
tion
-g*/
/*cc
-g-o
ilFa
utMe
ttre
NULL
ilFa
utMe
ttre
NULL
.c*/
/*2)
./il
Faut
Mett
reNU
LL*/
/*==
>Se
gmen
tati
onfa
ult
*//*
3)ul
imit
-cun
limi
ted
*//*
4)./
ilFa
utMe
ttre
NULL
*//*
==>
Segm
enta
tion
faul
t(c
ore
dump
ed)
*//*
5)dd
d./
ilFa
utMe
ttre
NULL
core
*/
#inc
lude
<std
lib.
h>#i
nclu
de<a
sser
t.h>
void
h(ch
ar*p
){*p
=’a
’;} vo
idg(
char
*p){
h(p)
;} vo
idf(
char
*p){
g(p)
;} in
tma
in()
{ch
ar*p
=NU
LL;
f(p)
;
p=
mall
oc(1
);as
sert
(p!=
NULL
);
f(p)
;
free
(p);
p=
NULL
;
f(p)
;
retu
rnEX
IT_S
UCCE
SS;
} TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
46
2Po
intde
vueprocessus
2.3Allo
catio
n/Désallocatio
ndy
namique
demém
oire
#31
' &
$ %
2.3.2Digression:a
lgorith
mes
pour
malloc
�Da
nsla
suite
,onappelle
«Trou
»,un
ezone
libre
detaille
xi(sup
érieu
reàun
minim
um)e
td’adressea
i
�Meilleu
rcho
ix(bestfi
t):trous
dans
l’ordre
croissantd
estaille
s(x
1<x
2<···<
xn)e
tcho
ixdu
plus
petit
troude
taille
suffisante
�Plus
mauvaischoix(w
orst
fit):
trous
dans
l’ordre
décroissantd
estaille
s(x
1>x
2>···>
xn)e
tallo
catio
nde
tout
oupartiedu
prem
iertro
u
�Prem
iertro
uvé(first
fit):
trous
dans
l’ordre
croissantd
esadresses
(a1<a
2<···<
an)e
tcho
ixdu
prem
iertro
ude
taille
suffisante
�Frères
siamois(
Budd
ysystem
)basésurl’allo
catio
nde
zonesa
yant
unetaille
multip
led’un
epu
issance
de2
�Princip
e:sid
emande
detaille
T,recherchede
lapu
issanceitelle
que
2i−1<T≤
2i ,pu
isallocationd’un
troude
taille
2i
�Algorithm
erécursif:
siliste
2ivid
e,recherched’un
troude
taille
2i+1
#32
' &
$ %
2.3.3Digression:a
lgorith
mes
pour
free
�Fragmentatio
n:d
emande
refuséecarp
lusd
ezone
detaille
suffisantemais
somme
dest
ailles
desz
ones
libress
upérieu
reàla
taille
demandée
�So
lutio
n:retassemento
ucompactage:regroup
erles
zoneslibr
espo
uren
créeru
nela
plus
grande
possible
�Objectif
:recon
struire
laliste
desz
ones
librese
ncherchantà
reconstru
irele
plus
grandtro
upo
ssible
�Plusieu
rscasà
envis
ager
�Zo
nelib
érée
entre
2zoneso
ccup
ées
�Zo
nelib
érée
entre
unezone
occupéeet
unezone
libre
�Zo
nelib
érée
entre
2zoneslibr
es
�Un
algorith
meperfo
rmanta
univeau
del’allo
catio
npeut
s’avérerê
treplus
complexe
pour
lalib
ération
�Algorithm
edesf
rèress
iamois:
lalib
érationd’un
ezone
(unbu
ddy)
estr
écursiv
e
Lesit
ehttp://g.oswego.edu/dl/html/malloc.html
présente
lesa
lgorith
mes
d’allocatio
n/dé
sallo
catio
nutiliséspa
rgcc(N
B:c
ette
page
htmle
xpliq
uequ
’elle
estdé
sorm
aisob
solète;t
outefois,
elle
contient
des
indicatio
nspo
urcompren
drel’implém
entatio
nvisib
leda
nsless
ources
mmalloc.c,
mfree.cet
mmprivate.h
degcc)
:
•La
recherched’un
ezone
libre
sefait
selonun
ordrebest-fit.
•L’utilisatio
nd’inde
xpe
rmet
detraiterun
ede
man
ded’allocatio
nen
unedo
uzaine
d’instructions.
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
47
2Po
intde
vueprocessus
2.3Allo
catio
n/Désallocatio
ndy
namique
demém
oire
#33
' &
$ %
2.3.4Désallocatio
nautomatique
avec
alloca
�void
*alloca(size_tsize)
allou
esize
octets
dans
l’espacede
pile
del’app
elant
�Do
nc,q
uand
onretourne
dela
fonctio
nqu
iaappeléalloca
,l’es
pace
allou
éest
automatiquementlibéré
�Prob
lème:O
nrisqu
ede
débo
rder
dela
pile.
..sans
aucunavertissementd
usystèm
e
#34
' &
$ %
2.3.5Mécanism
ed’allocatio
n/désallocatio
ndédié
�Princip
e�
Audémarrage
duprog
ramme,
onconstru
itun
eliste
chaîn
éede
blocsd
eN
octets
�Quand
onabesoin
d’allou
erun
bloc
deN
octets,o
nrécupère
leprem
ierélé
mentd
ecette
liste
�Quand
onveut
désalloueru
nbloc
deN
octets,o
nremet
cebloc
entête
deliste
�Av
antage
:Vite
ssed’allocation/
désallo
catio
n
�Inconvénien
t:Lesb
locs
allou
és/d
ésallou
éson
ttou
slamêm
etaille
L’algo
rithm
ede
malloc
étan
ttrès
efficace,lemécan
ismeprésenté
icin
’est
engéné
ralp
asné
cessaire.
Ilpe
uttoutefoiss
’impo
serd
anslecaso
ùl’o
ndo
itfaire
uneallocatio
n/dé
sallo
catio
nda
nsun
gestionn
aire
desig
nal(da
nslequ
ellesop
érations
demalloc
/freesont
proscrite
s).
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
48
2Po
intde
vueprocessus
2.4Déverminag
ede
saccèsmém
oire
#35
' &
$ %
2.3.6Allocatio
n/Désallocatio
nmém
oire
auniveau
systèm
e
�void
*sbrk(ptrdiff_tincrément)
incrém
ente
l’espacede
donn
éesd
uprog
rammede
incrémentoctets
�void
*mmap(void*start,size_t
length,intprot,intflags,
int
fd,off_toffset)
Perm
etde
mapperu
nfichier
enmém
oire.E
nplus
deso
ptions
quiseron
tétudiées
dans
lechapitre«En
trées/sortie
s»,f
lags
peut
prendrela
valeu
rMAP_ANON(ou
MAP_ANONYMOUS)
pour
indiqu
erqu
’onne
souh
aitepasr
éellementt
ravaille
rsur
unfichier,m
aissuru
nezone
mém
oire
viergeem
plie
dezéros
sbrk
n’estp
asun
appe
lsystème,
justeun
efonc
tionde
labibliothèque
Cqu
iinv
oque
l’app
elsystèm
eint
brk(void
*fin_segment_donnée)
.
#36
' &
$ %
2.4Déverminagedesaccèsmém
oire
2.4.1
Détecter
statiquementles
accèse
rronésà
desz
ones
allou
éesd
ynam
iquement.
.37
2.4.2
Détecter
dynamiquementles
accèse
rronésà
desz
ones
allou
éesd
ynam
iquement38
2.4.3
Visualiserq
uand
unezone
mém
oire
esta
ccédée/m
odifée......................39
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
49
2Po
intde
vueprocessus
2.4Déverminag
ede
saccèsmém
oire
#37
' &
$ %
2.4.1Détecterstatiquementlesaccèserronésàdeszones
allouées
dynamiquement
�Objectif
:quand
unprog
rammeaccède
àun
ezone
allou
éedynamiquement,vérifi
er,
aumom
entd
ela
compilat
ion,
que
�Iln’accède
pase
ndehors
dela
zone
(ouqu
ela
zone
n’estp
aslib
érée)
�Ilne
litpasu
noctetjam
aisinitialisé
�...
�Outils
�insure++
(sociét
éPa
rasoft):
prop
oseun
outil
d’analy
sedess
ources
�splint
(logicie
llibr
e,http://www.splint.org/
):ou
tredesc
ontrô
les«parano
ïaques»
surlesource,v
érifiecerta
insp
roblèm
esd’accèsm
émoire
�Limite
=Lesv
érificatio
nsne
peuventd
épasserlecadred’un
source
Pour
illustrer
lapu
issan
cede
splint
(etvalgrind
auslide
suivan
t),é
tudiez
leprog
rammeC
suivan
t(qui
s’exécu
tecorrectement).Ilc
ontie
nt3erreurs.
Lesvoyez-vous
?/*
****
****
****
****
***/
/*je
uDes
3Err
eurs
.c*/
/***
****
****
****
****
*/
/*Ce
prog
ramm
ea
pour
obje
ctif
d’il
lust
rer
lafo
ncti
onst
rcpy
*//*
Ils’
exec
ute
corr
ecte
ment
.Po
urta
nt,
ilco
ntie
nt3
erre
urs
!*/
/*Po
uvez
-vou
sle
sre
trou
ver
?*/
#inc
lude
<str
ing.
h>#i
nclu
de<s
tdli
b.h>
#inc
lude
<std
io.h
>
#def
ine
CITA
TION
"Fai
tes
que
lerê
vedé
vore
votr
evi
e,af
inqu
ela
vie
nedé
vore
pas
votr
erê
ve."
//An
toin
ede
Sain
t-Ex
uper
y
int
main
(){
char
*p=
NULL
;
/*Re
serv
atio
nd’
une
zone
pour
accu
eill
irla
cita
tion
*/p
=ma
lloc
(str
len(
CITA
TION
));
if(p
==NU
LL){
fpri
ntf(
stde
rr,"
mall
ocp
NOK"
);re
turn
EXIT
_FAI
LURE
;} /*
Onme
t’\
0’au
nive
audu
prem
ier
cara
cter
epo
inte
par
ppo
urqu
e*/
/*le
prin
tfqu
isu
itn’
affi
che
pas
n’im
port
equ
oi*/
p[1]
=’\
0’;
prin
tf("
Cont
enu
poin
tepa
rp
avan
tst
rcpy
:\"
%s\"
\n",
p);
/*C’
est
part
ipo
urle
strc
py*/
strc
py(p
,CIT
ATIO
N);
/*On
rega
rde
l’af
fich
age
*/pr
intf
("Co
nten
upo
inte
par
pap
res
strc
py:
\"%s
\"\n
",p)
;
/*On
libe
rela
zone
poin
tee
par
ppu
isqu
’ell
ees
tde
sorm
ais
inut
ile
*/fr
ee(p
);
//A
TT
EN
TI
ON
//S’
ilav
ait
ecou
tele
sco
nsei
lsde
cepo
ly,
lepr
ogra
mmeu
rde
ce//
code
sour
ceau
rait
mis
lali
gne
//p
=NU
LL;
//ap
res
cefr
ee.
Mais
cert
aine
spe
rson
nes
nepe
uven
ts’
empe
cher
de//
nepa
sec
oute
rce
qu’o
nle
urdi
t...
Amo
ins
que
cet
oubl
ine
soit
//vo
lont
aire
...
//A
TT
EN
TI
ON
/*On
veri
fie
que
l’af
fich
age
dep
cond
uit
deso
rmai
sa
une
erre
ur*/
prin
tf("
Cont
enu
poin
tepa
rp
apre
sfr
ee:
\"%s
\"\n
",p)
;
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
50
2Po
intde
vueprocessus
2.4Déverminag
ede
saccèsmém
oire
retu
rnEX
IT_S
UCCE
SS;
}
L’exécutionde
splint
(splintjeuDes3Erreurs.c
)don
nel’a
ffichag
esuivant
(qui
devraitc
ontribue
ràla
localisationde
certainesd
es3erreurs;
pour
lesa
utres,ilfaud
rautiliserd
esou
tilsd
edé
tectiondy
namique
):Sp
lint
3.1.
1--
-21
Apr
2006
jeuD
es3E
rreu
rs.c
:(i
nfu
ncti
onma
in)
jeuD
es3E
rreu
rs.c
:25:
58:
Pass
edst
orag
ep
not
comp
lete
lyde
fine
d(*
pis
unde
fine
d):
prin
tf(.
..,
p,..
.)St
orag
ede
riva
ble
from
apa
rame
ter,
retu
rnva
lue
orgl
obal
isno
tde
fine
d.Us
e/*
@out
@*/
tode
note
pass
edor
retu
rned
stor
age
whic
hne
edno
tbe
defi
ned.
(Use
-com
pdef
toin
hibi
twa
rnin
g)je
uDes
3Err
eurs
.c:1
6:3:
Stor
age
*pal
loca
ted
jeuD
es3E
rreu
rs.c
:37:
56:
Vari
able
pus
edaf
ter
bein
gre
leas
edMe
mory
isus
edaf
ter
itha
sbe
enre
leas
ed(e
ithe
rby
pass
ing
asan
only
para
mor
assi
gnin
gto
anon
lygl
obal
).(U
se-u
sere
leas
edto
inhi
bit
warn
ing)
jeuD
es3E
rreu
rs.c
:34:
8:St
orag
ep
rele
ased
Fini
shed
chec
king
---
2co
dewa
rnin
gs
Noter
leprem
ierw
arning
(peu
explicite
:-()q
uicorrespo
ndau
faitqu
’onaécrit
p[1]
=’\0’;da
nslesource
(sio
nmet
p[0]
,l’erreu
rdisparaît).
#38
' &
$ %
2.4.2Détecterdynamiquementlesaccèserronésàdeszones
allouées
dynamiquement
�Objectif
:quand
unprog
rammeaccède
àun
ezone
allouéedynamiquement,vérifi
er,à
l’exécutio
n,qu
e�
Iln’accède
pasen
dehors
dela
zone
(ouqu
ela
zone
n’estp
aslib
érée)
�...
�Outils
�in
sure
++(sociét
éPa
rado
x):a
umom
entd
ela
compilatio
n,ceto
utilajou
teauxsources
(.c)
desinstructions
decontrôle
auniveau
desdiffé
rentes
instructions
d’aff
ectatio
n�
Rati
onal
Puri
fy(sociét
éIB
M):a
umom
entd
ulink,
ceto
utilajou
teauxob
jets(.
o)desinstructions
decontrôle
auniveau
desdiffé
rentes
instructions
(assem
bleur)
d’aff
ectatio
n�
valg
rind
(logicie
llibre,h
ttp:
//va
lgri
nd.o
rg):l’exécutableestluparu
nsim
ulateur
deprocesseur
x86qu
isecharge
dedétecter
toutes
lesanom
alies
d’accès
�Limite
=Onn’estjam
aissûrd
’être
passépart
outesles
branches
NB
:
1.Dan
slapratique
,ile
strecomman
déd’utilisers
plint(avant
dese
lanc
erda
nslest
ests
unita
irese
tles
testsd’intégration),p
uisd’utiliserinsure++
,rationalPurify
ouvalgrind
.
2.Ilexist
ed’autreso
utils
(évo
quéc
i-dessous)).L
apa
gehttp://valgrind.org/gallery/survey_03/q4.
html
contient
uneliste
assezexha
ustiv
eavec
uncompa
ratif
(objectif
?)pa
rrapp
ortàvalgrind
.
3.valgrind
nes’e
xécu
tequ
’enenvironn
ementLinu
x(/M
ac).
Lapa
gehttp://wiki.winehq.org/Wine_
and_Valgrind
explique
commentan
alyser
uneap
plicationW
indo
wsavec
valgrind
.
4.Linu
xprop
osed’au
tres
outilsn
ettementm
oins
puiss
ants
qu’insure++,
rational
Purify
etvalgrind
,maisenvisageab
lesda
nsde
scasextrêm
esoù
lesou
tilsprésentésjusqu’àprésentne
seraient
pasutili-
sables
(con
traintede
temps
d’exécution,
parexem
ple)
:
•mpatrolutilise
uneversionspéciale
demalloc
etfree
(ainsi
qued’au
tres
fonc
tions
travailla
ntsurla
mém
oire,c
ommememset
parexem
ple)
deman
ière
àrepé
rerde
sdé
bordem
ents
dezone
.
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
51
2Po
intde
vueprocessus
2.4Déverminag
ede
saccèsmém
oire
•mtrace
est
une
extension
GNU
(man
3mtrace
)qu
ipe
rmet
unsuiviintégré
des
alloca-
tions/d
ésallocatio
nsOnpe
utainsir
epérer
desfuite
smém
oire
•Onpe
utcitere
nfinelectric
fencequ
iest
complètem
ento
bsolètepa
rrap
port
auxou
tilsp
récé-
dents.
5.Po
urinform
ation:
•la
société
Free
utilise
égalem
ent
les
outils
stan
se(http://stanse.fi.nuini.cz
),clan
g(clang-a
nalyzer.llvm.org
)et
smatch
(http://smatch.sourceforge.net
);•
lasociétéAirbus
utilise
égalem
entl’o
utilfra
ma-C.
L’investigationde
cesou
tilssort
ducadrede
cecours.
Pour
illustrer
lapu
issan
cede
ceso
utils,rep
reno
nsle
prog
rammeC
(qui
s’exécu
tecorrectement)
présenté
encommentaire
dutran
sparentprécéd
ent.Ilc
ontie
nt3erreurs.
Lesvoyez-vous
?L’exécution
devalgrind
(valgrind--tool=memcheck--leak-check=yes
jeuDes3Erreurs
)surun
exécutab
lecompilé
avec
l’option-g
donn
el’a
ffichag
esuivan
t(qui
devraitcontrib
ueràla
localisation
deces3erreurs)
:==
2402
==Me
mche
ck,
ame
mory
erro
rde
tect
orfo
rx8
6-li
nux.
==24
02==
Copy
righ
t(C
)20
02-2
005,
and
GNU
GPL’
d,by
Juli
anSe
ward
etal
.==
2402
==Us
ing
valg
rind
-2.4
.0,
apr
ogra
msu
perv
isio
nfr
amew
ork
for
x86-
linu
x.==
2402
==Co
pyri
ght
(C)
2000
-200
5,an
dGN
UGP
L’d,
byJu
lian
Sewa
rdet
al.
==24
02==
For
more
deta
ils,
reru
nwi
th:
-v==
2402
====
2402
==Co
ndit
iona
lju
mpor
move
depe
nds
onun
init
iali
sed
valu
e(s)
==24
02==
at0x
B2A4
CF:
vfpr
intf
(in
/lib
/lib
c-2.
3.5.
so)
==24
02==
by0x
B2F9
42:
prin
tf(i
n/l
ib/l
ibc-
2.3.
5.so
)==
2402
==by
0x80
484D
C:ma
in(j
euDe
s3Er
reur
s.c:
25)
==24
02==
==24
02==
Inva
lid
writ
eof
size
1==
2402
==at
0x1B
90A6
BA:
memc
py(m
ac_r
epla
ce_s
trme
m.c:
285)
==24
02==
by0x
8048
4F9:
main
(jeu
Des3
Erre
urs.
c:28
)==
2402
==Ad
dres
s0x
1B92
B073
is0
byte
saf
ter
abl
ock
ofsi
ze75
allo
c’d
==24
02==
at0x
1B90
9222
:ma
lloc
(vg_
repl
ace_
mall
oc.c
:130
)==
2402
==by
0x80
4849
9:ma
in(j
euDe
s3Er
reur
s.c:
16)
==24
02==
==24
02==
Inva
lid
read
ofsi
ze1
==24
02==
at0x
B2A4
CF:
vfpr
intf
(in
/lib
/lib
c-2.
3.5.
so)
==24
02==
by0x
B2F9
42:
prin
tf(i
n/l
ib/l
ibc-
2.3.
5.so
)==
2402
==by
0x80
4850
C:ma
in(j
euDe
s3Er
reur
s.c:
31)
==24
02==
Addr
ess
0x1B
92B0
73is
0by
tes
afte
ra
bloc
kof
size
75al
loc’
d==
2402
==at
0x1B
9092
22:
mall
oc(v
g_re
plac
e_ma
lloc
.c:1
30)
==24
02==
by0x
8048
499:
main
(jeu
Des3
Erre
urs.
c:16
)==
2402
====
2402
==In
vali
dre
adof
size
1==
2402
==at
0xB2
A4CF
:vf
prin
tf(i
n/l
ib/l
ibc-
2.3.
5.so
)==
2402
==by
0xB2
F942
:pr
intf
(in
/lib
/lib
c-2.
3.5.
so)
==24
02==
by0x
8048
52D:
main
(jeu
Des3
Erre
urs.
c:37
)==
2402
==Ad
dres
s0x
1B92
B028
is0
byte
sin
side
abl
ock
ofsi
ze75
free
’d==
2402
==at
0x1B
9097
43:
free
(vg_
repl
ace_
mall
oc.c
:152
)==
2402
==by
0x80
4851
A:ma
in(j
euDe
s3Er
reur
s.c:
34)
==24
02==
==24
02==
Inva
lid
read
ofsi
ze1
==24
02==
at0x
B4B9
4D:
_IO_
file
_xsp
utn@
@GLI
BC_2
.1(i
n/l
ib/l
ibc-
2.3.
5.so
)==
2402
==by
0xB2
A140
:vf
prin
tf(i
n/l
ib/l
ibc-
2.3.
5.so
)==
2402
==by
0xB2
F942
:pr
intf
(in
/lib
/lib
c-2.
3.5.
so)
==24
02==
by0x
8048
52D:
main
(jeu
Des3
Erre
urs.
c:37
)==
2402
==Ad
dres
s0x
1B92
B072
is74
byte
sin
side
abl
ock
ofsi
ze75
free
’d==
2402
==at
0x1B
9097
43:
free
(vg_
repl
ace_
mall
oc.c
:152
)==
2402
==by
0x80
4851
A:ma
in(j
euDe
s3Er
reur
s.c:
34)
==24
02==
==24
02==
Inva
lid
read
ofsi
ze1
==24
02==
at0x
B4B9
5F:
_IO_
file
_xsp
utn@
@GLI
BC_2
.1(i
n/l
ib/l
ibc-
2.3.
5.so
)==
2402
==by
0xB2
A140
:vf
prin
tf(i
n/l
ib/l
ibc-
2.3.
5.so
)==
2402
==by
0xB2
F942
:pr
intf
(in
/lib
/lib
c-2.
3.5.
so)
==24
02==
by0x
8048
52D:
main
(jeu
Des3
Erre
urs.
c:37
)==
2402
==Ad
dres
s0x
1B92
B071
is73
byte
sin
side
abl
ock
ofsi
ze75
free
’d==
2402
==at
0x1B
9097
43:
free
(vg_
repl
ace_
mall
oc.c
:152
)==
2402
==by
0x80
4851
A:ma
in(j
euDe
s3Er
reur
s.c:
34)
==24
02==
==24
02==
Inva
lid
read
ofsi
ze1
==24
02==
at0x
B574
65:
memp
cpy
(in
/lib
/lib
c-2.
3.5.
so)
==24
02==
by0x
B2A1
40:
vfpr
intf
(in
/lib
/lib
c-2.
3.5.
so)
==24
02==
by0x
B2F9
42:
prin
tf(i
n/l
ib/l
ibc-
2.3.
5.so
)==
2402
==by
0x80
4852
D:ma
in(j
euDe
s3Er
reur
s.c:
37)
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
52
2Po
intde
vueprocessus
2.4Déverminag
ede
saccèsmém
oire
==24
02==
Addr
ess
0x1B
92B0
28is
0by
tes
insi
dea
bloc
kof
size
75fr
ee’d
==24
02==
at0x
1B90
9743
:fr
ee(v
g_re
plac
e_ma
lloc
.c:1
52)
==24
02==
by0x
8048
51A:
main
(jeu
Des3
Erre
urs.
c:34
)==
2402
====
2402
==In
vali
dre
adof
size
2==
2402
==at
0xB5
746A
:me
mpcp
y(i
n/l
ib/l
ibc-
2.3.
5.so
)==
2402
==by
0xB2
A140
:vf
prin
tf(i
n/l
ib/l
ibc-
2.3.
5.so
)==
2402
==by
0xB2
F942
:pr
intf
(in
/lib
/lib
c-2.
3.5.
so)
==24
02==
by0x
8048
52D:
main
(jeu
Des3
Erre
urs.
c:37
)==
2402
==Ad
dres
s0x
1B92
B029
is1
byte
sin
side
abl
ock
ofsi
ze75
free
’d==
2402
==at
0x1B
9097
43:
free
(vg_
repl
ace_
mall
oc.c
:152
)==
2402
==by
0x80
4851
A:ma
in(j
euDe
s3Er
reur
s.c:
34)
==24
02==
==24
02==
Inva
lid
read
ofsi
ze4
==24
02==
at0x
B574
6C:
memp
cpy
(in
/lib
/lib
c-2.
3.5.
so)
==24
02==
by0x
B2A1
40:
vfpr
intf
(in
/lib
/lib
c-2.
3.5.
so)
==24
02==
by0x
B2F9
42:
prin
tf(i
n/l
ib/l
ibc-
2.3.
5.so
)==
2402
==by
0x80
4852
D:ma
in(j
euDe
s3Er
reur
s.c:
37)
==24
02==
Addr
ess
0x1B
92B0
2Bis
3by
tes
insi
dea
bloc
kof
size
75fr
ee’d
==24
02==
at0x
1B90
9743
:fr
ee(v
g_re
plac
e_ma
lloc
.c:1
52)
==24
02==
by0x
8048
51A:
main
(jeu
Des3
Erre
urs.
c:34
)==
2402
====
2402
==ER
ROR
SUMM
ARY:
174
erro
rsfr
om9
cont
exts
(sup
pres
sed:
13fr
om1)
==24
02==
mall
oc/f
ree:
inus
eat
exit
:0
byte
sin
0bl
ocks
.==
2402
==ma
lloc
/fre
e:1
allo
cs,
1fr
ees,
75by
tes
allo
cate
d.==
2402
==Fo
rco
unts
ofde
tect
eder
rors
,re
run
with
:-v
==24
02==
Noma
lloc
’dbl
ocks
--no
leak
sar
epo
ssib
le.
NB
:siv
ousfaite
sun
eéd
ition
delie
nstatique
dejeuDes3Erreurs
,puisqu
evous
exécutez
valgrind
--tool=memcheck--leak-check=yes
jeuDes3Erreurs
,vou
scon
staterez
quevalgrind
détectede
serreu
rsavan
tle
main
devotreprog
ramme.
Laversionstatique
dela
libc
comtie
ntdo
ncde
sprob
lèmes
d’accès
mém
oire.
$cc
-g-s
tati
cje
uDes
3Err
eurs
.c-o
jeuD
es3E
rreu
rs$
valg
rind
./je
uDes
3Err
eurs
==19
314=
=Me
mche
ck,
ame
mory
erro
rde
tect
or==
1931
4==
Copy
righ
t(C
)20
02-2
013,
and
GNU
GPL’
d,by
Juli
anSe
ward
etal
.==
1931
4==
Usin
gVa
lgri
nd-3
.10.
0.SV
Nan
dLi
bVEX
;re
run
with
-hfo
rco
pyri
ght
info
==19
314=
=Co
mman
d:./
jeuD
es3E
rreu
rs==
1931
4==
==19
314=
=Co
ndit
iona
lju
mpor
move
depe
nds
onun
init
iali
sed
valu
e(s)
==19
314=
=at
0x43
7396
:__
link
in_a
tfor
k(i
n/t
mp/j
euDe
s3Er
reur
s)==
1931
4==
by0x
4157
83:
ptma
lloc
_ini
t.pa
rt.7
(in
/tmp
/jeu
Des3
Erre
urs)
==19
314=
=by
0x41
5B0D
:ma
lloc
_hoo
k_in
i(i
n/t
mp/j
euDe
s3Er
reur
s)==
1931
4==
by0x
4680
72:
_dl_
get_
orig
in(i
n/t
mp/j
euDe
s3Er
reur
s)==
1931
4==
by0x
437A
3E:
_dl_
non_
dyna
mic_
init
(in
/tmp
/jeu
Des3
Erre
urs)
==19
314=
=by
0x43
8837
:__
libc
_ini
t_fi
rst
(in
/tmp
/jeu
Des3
Erre
urs)
==19
314=
=by
0x40
1301
:(b
elow
main
)(i
n/t
mp/j
euDe
s3Er
reur
s)==
1931
4==
==19
314=
=Co
ndit
iona
lju
mpor
move
depe
nds
onun
init
iali
sed
valu
e(s)
==19
314=
=at
0x41
11B9
:_i
nt_f
ree
(in
/tmp
/jeu
Des3
Erre
urs)
==19
314=
=by
0x46
1B80
:fi
llin
_rpa
th(i
n/t
mp/j
euDe
s3Er
reur
s)==
1931
4==
by0x
4622
5E:
_dl_
init
_pat
hs(i
n/t
mp/j
euDe
s3Er
reur
s)==
1931
4==
by0x
437F
1C:
_dl_
non_
dyna
mic_
init
(in
/tmp
/jeu
Des3
Erre
urs)
==19
314=
=by
0x43
8837
:__
libc
_ini
t_fi
rst
(in
/tmp
/jeu
Des3
Erre
urs)
==19
314=
=by
0x40
1301
:(b
elow
main
)(i
n/t
mp/j
euDe
s3Er
reur
s)==
1931
4==
==19
314=
=Co
ndit
iona
lju
mpor
move
depe
nds
onun
init
iali
sed
valu
e(s)
==19
314=
=at
0x41
121F
:_i
nt_f
ree
(in
/tmp
/jeu
Des3
Erre
urs)
==19
314=
=by
0x46
1B80
:fi
llin
_rpa
th(i
n/t
mp/j
euDe
s3Er
reur
s)==
1931
4==
by0x
4622
5E:
_dl_
init
_pat
hs(i
n/t
mp/j
euDe
s3Er
reur
s)==
1931
4==
by0x
437F
1C:
_dl_
non_
dyna
mic_
init
(in
/tmp
/jeu
Des3
Erre
urs)
==19
314=
=by
0x43
8837
:__
libc
_ini
t_fi
rst
(in
/tmp
/jeu
Des3
Erre
urs)
==19
314=
=by
0x40
1301
:(b
elow
main
)(i
n/t
mp/j
euDe
s3Er
reur
s)
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
53
Gestio
nde
lamém
oire
#39
' &
$ %
2.4.3Visu
alise
rqu
andun
ezone
mém
oire
estaccédée/mod
ifée
�Watchpo
intsous
gdb
�gd
boff
rela
possibilit
éde
mettre
enplacedesw
atchpo
intsurd
eszones
mém
oire,e
nlec
ture
ouen
lecture/écritu
re.
�Si
unetelle
zone
mém
oire
esta
ccédée,g
dbstop
pele
prog
ramme.
�Co
ntrôle
del’accès
àla
mém
oire
�intmprotect(const
void
*addr,
size_t
*len,intprot)
contrôle
lesautorisations
d’accès(
lecture
et/o
uécriture)
àun
epo
rtion
dela
mém
oire.S
iunaccèsinterdits
eprod
uit,le
prog
rammereçoitSIGSEGV
�Ut
ilisation:tou
tesituatio
noù
unedo
nnée
estm
odifiée
etle
contexte
neperm
etpasd
’utilise
rdes
outilsd
etype
valgrin
dou
gdb
mprotect(2)im
pose
lacontrainte
suivan
te:l’adresse
dedé
butd
ezone
doitêtre
aligné
esuru
nefro
ntière
depa
ge.
Bib
liogr
aphi
edu
chap
itre
[Blaess,
2002
]Blaess,C
.(20
02).
Programmationsystèm
een
Csous
Linu
x:s
igna
ux,p
rocessus,threads,IPC
etsockets.
Eyrolle
s,Pa
ris,P
aris,
Fran
ce.
[Drepp
er,2
007]
Drepp
er,U
.(20
07).
Wha
tevery
prog
rammer
shou
ldkn
owab
outm
emory.
Technicalrep
ort,
Red
Hat.
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
54
Les
fich
iers
(et
les
entr
ées-
sort
ies)
Mic
hel
Sim
atic
mod
ule
CSC
4508
/M2
Avr
il20
18 55
Lesfichiers(etlesentrées-sorties)
#2
' &
$ %
Plan
dudo
cument
1Prim
itivesU
nixd’entré
es-so
rties
.................................................5
2Bibliothèque
Cd’entré
es-so
rties.................................................15
3Projectio
ndesfi
chier
senmém
oire
..............................................24
4Manipulationdesi-noeud
sdusystèm
ede
fichiersU
nix.
..........................25
5En
trées-so
rties
surr
épertoire
s...................................................27
6Limita
tions
deNF
S............................................................28
Lors
dece
cours,
onpa
rlera
surtou
tde
fichiers,
carc’estl’e
xempled’entrées-sortiesle
plus
facilement
man
ipulab
le.To
utefois,
bien
noterqu
ele
contenude
s3prem
ièressections
s’app
lique
auxentrées-sorties
autres
quelesfichiers.
Rap
pels
urlesfichiers(notions
vues
enprem
ière
anné
e):
•Unfichier
estun
esuite
d’octets
contigus
stockésda
nsun
supp
ort(par
exem
ple,
undisque
)sous
unno
m(le
«no
mdu
fichier
»).
•Ondistingu
elesfichiers:
–Te
xte:conten
antdesoctets
affichab
lesàl’é
cran
.Cetype
defichiersestconstit
uéde
ligne
sidentifi
éespa
rle
caractèrede
finde
ligne
(sou
sUnix,
caractèrede
code
ASC
II10
alorsqu
esous
Windo
ws,
caractèrede
code
ASC
II10
suivid
’uncaractèrede
code
ASC
II13
)–
Bina
ire:c
ontena
ntde
soctets
nonaffi
chab
lesàl’é
cran
.
Sous
Unix,
les
comman
des
hexdump-C
nomFichier
etblessnomFichier
perm
ettent
devisualise
rle
contenu
d’un
fichier
deman
ière
précise
.Utilise
z-les
pour
1)compa
-rer
lecontenu
dehelloWorldUnix.c
ethelloWorldWindows.c,
2)voir
que
lefichier
default_names_fichierIssuDuTP10DuModuleCSC4103.txt
n’est
pas
tout
àfait
unfichier
texte
(et,
anne
xement,
voir
aussiconc
rètementcommentsont
stockéslescaractères
accentué
sda
nsun
fichier).
•Qua
ndon
«ou
vre»
unfichier,le
systèm
ed’exploitatio
nfournitun
eno
tion
depo
sition
couran
te(app
elée
parfo
isoff
setda
nsla
suite
dece
cours)
delecture/écrit
ure.
–Cette
posit
ioncouran
tedé
term
inele
rang
del’o
ctet
dans
lefichier
àpa
rtir
duqu
ellesprim
itives
systèm
eliron
tou
bien
écrir
ontde
soctets
dans
lefichier.
–Cet
offsetavan
ceàchaq
uefois
qu’oneff
ectueun
electureou
uneécrit
ure.
–Le
systèm
ed’exploitatio
nmet
àdisposition
del’u
tilisa
teur
desp
rimitivesp
ourc
hang
erexplicite
-mentcettepo
sitioncouran
te(san
slireou
écrir
ede
soctets).
•La
«fin
d’un
fichier
»correspo
ndàl’e
ndroit
situé
derrière
ledernieroctetdu
fichier.Q
uand
onest
àla
findu
fichier,o
nne
peut
paslired’octets.E
nrevanche
,onpe
utécrir
ede
soctets
(selon
lemod
eda
nslequ
elon
aou
vert
lefichier).
•Ilexist
e3mod
esd’accèsàun
fichier
:
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
56
1Pr
imitivesUnixd’entrées-sorties
1.1Pr
imitivesde
base
–Sé
quentie
l:Le
soctets
sont
luslesun
sàla
suite
desau
tres
àpa
rtir
dudé
butdu
fichier.
–Dire
ct:O
npe
utpe
utpo
sitionn
erl’o
ffset
sans
avoirbe
soin
delirelesoctets
situé
savan
tl’o
ffset.
–Sé
quentie
lind
exé:L
efichier
contient
desenregistrements,c
haqu
een
registrementétan
tidentifi
épa
rune
clé(
unique
ouno
n).À
l’aided
elaclé,on
peut
sepo
sitionn
erau
débu
td’unen
registrement.
Onpe
utégalem
entlirelesen
registrements
dans
l’ordre
défin
ispa
rleur
clé.
Lesystèm
eLinu
xet
lalib
rairieCoff
rent
lesm
odes
d’accèss
éque
ntielset
directs.Po
urun
mod
ed’accès
séqu
entie
lind
exé,
ilfaut
s’app
uyer
surun
elib
rairie(U
nixNDBM
,GDBM
,OracleBe
rkeley
DB.
..).
#3
' &
$ %
1Prim
itivesUnixd’entrées-sorties
1.1
Prim
itivesd
ebase.............................................................5
1.3
Duplica
tionde
descrip
teur
....................................................10
1.3
Contrôle
dese
ntrée-sorties....................................................10
1.4
Manipulationde
l’offset
......................................................13
1.5
Gestionde
lalen
teur
oudu
blocagedese
ntrées-so
rties*.
.......................14
#4
' &
$ %
1.1Prim
itivesde
base
1.1.1
Ouverture/fermeturede
fichier
...............................................5
1.1.2
Lecturesurd
escripteur.......................................................6
1.1.3
Écrituresurd
escripteur
......................................................7
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
57
1Pr
imitivesUnixd’entrées-sorties
1.1Pr
imitivesde
base
#5
' &
$ %
1.1.1Ouverture/fermeturede
fichier
�intopen(const
char
*path,
intflags,
mode_t
mode):retou
r=f_id
flagspeut
prendrel’u
nedesv
aleurss
uivantes
:�
O_RDONLY
:lecture
seulem
ent
�O_WRONLY
:écritu
reseulem
ent
�O_RDWR
:écritu
reet
lecture
associé
eà:
�O_APPEND
:écritu
rese
nfin
defichier
�O_TRUNC:rem
iseàvid
edu
fichier
�O_CREAT:c
réationsile
fichier
n’existepas.Lesd
roits
sont
(mode
&umask
)�
O_SYNC
:ouverture
dufichier
enécrituresynchron
isée
�O_NONBLOCK
(ouO_NDELAY
):open
etles
opérations
ultérie
ures
faite
ssur
ledescrip
teur
nepo
urront
pass
ebloq
uer.
�intclose(intdesc)
Aprop
osde
l’optionO_SYNC
dans
open
:
•Po
urga
gner
enpe
rform
ance,pa
rdé
faut,lors
d’un
eop
ération
d’écrit
ure,
lesystèm
ed’exploitatio
nn’écrit
pasph
ysique
mentlesoctets
surle
disque
(ilssont
gardés
dans
descaches
duno
yauen
attente
d’un
mom
entconsidérécommefavorablepa
rle
systèm
epo
urréalise
rl’é
critu
resurdisque
)
•Dece
fait,
encasd’arrêtbrutal
dela
machine
(exemple:c
oupu
rede
couran
t):
–Des
donn
éesqu
’oncroyaitavoirécrit
essurdisque
peuv
entêtre
perdue
scarellesétaienten
fait
enmém
oire
–Ilyau
ssir
isque
d’incohé
rencesurlesdo
nnéesqu
’ontrou
veda
nsle
fichier
•So
lutio
nspo
ursynchron
iserde
sdo
nnéesde
fichier
enmém
oire
avec
ledisque
:
–Sy
nchron
isatio
nim
plicite
(i.e.
àchaq
ueécrit
ure)
:ajout
del’o
ptionO_SYNC
aumom
entdu
open
–Sy
nchron
isatio
nexplicite
(i.e.
surdé
cisio
nde
l’app
lication)
viala
prim
itive
intfsync(intfd)
L’utilisatio
nde
O_NONBLOCK
estdé
taillée
ensection1.5.
Noter
qu’onpe
utau
ssic
réer
unfichier
àl’a
idede
laprim
itive
creat:
intcreat(constchar
*path,
mode_t
mode):r
etou
r=
f_id
quie
stéquivalent
àl’a
ppel
suivan
tde
open
:
open(path,
O_WRONLY|O_CREAT|O_TRUNC,mode).
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
58
1Pr
imitivesUnixd’entrées-sorties
1.1Pr
imitivesde
base
#6
' &
$ %
1.1.2Lecturesurdescrip
teur
�ssize_tread(int
fd,void
*buf,size_t
count)
:retou
r=no
mbred’octets
lus �Au
retour
deread
,lazone
bufestm
odifiée
avec
lerésulta
tdela
lecture
�Da
nsle
casd
’unfichier,leno
mbred’octets
lusp
eutn
epasê
treégal
àcount:
IOnse
trouveàla
findu
fichier
IOnafaitun
elec
ture
nonbloq
uanteet
lesdo
nnéesé
taien
tverrouillées
demanièr
eexclu
sive
�ssize_treadv(intfd,conststruct
iovec*iov,intiovcnt)
�Au
retour
dereadv,
leszonesr
éférencées
parles
iovcnt
éléments
dutableau
iovsont
mod
ifiéesa
vecle
résulta
tdela
lecture
Dan
sle
casoù
lafonc
tionread
estutiliséesurun
descrip
teur
autrequ
’unfichier
(tub
e,socket),
lefait
quele
nombred’octets
luspe
utne
pasêtre
égal
àcountpe
utavoird’au
tres
signific
ations
:
•Po
urun
tube
decommun
ication(cf.
chap
itreCom
mun
ications
Inter-processus),le
correspo
ndan
ta
ferm
ésonextrém
itédu
tube
.
•Po
urun
esocket
(cf.
coursCSC
4509
),le
protocoleréseau
utilise
despa
quetsde
donn
éesde
taille
inférie
ureàcelle
quie
stréclam
ée.
#7
' &
$ %
1.1.3Éc
rituresurdescrip
teur
�ssize_twrite(intfd,constvoid
*buf,size_t
count)
:retou
r=no
mbre
d’octets
écrits
�Da
nsle
casd
’unfichier,leretour
(sanse
rreur)d
el’écritu
resig
nifie
que:
ILeso
ctetso
ntétéécritsd
ansles
caches
dunoyausipasd
eO_SYNC
aumom
entd
uop
enI
Leso
ctetso
ntétéécritss
urdisque
siO_SYNC
aumom
entd
uop
en.
�Da
nsle
casd
’unfichier,sileno
mbred’octets
écritse
stdiffé
rent
decount,
cela
signifie
uneerreur
(disq
ueplein
,par
exem
ple)
�ssize_twritev(int
fd,conststruct
iovec*iov,intiovcnt)
�Au
retour
dewritev
,les
zonesr
éférencées
parles
iovcnt
éléments
dutableau
iovon
tété
écrites
surledescrip
teur
fd
�intposix_fallocate(intfd,off_toffset,off_tlen)
�Ga
rantitqu
el’espacedisque
requ
ispo
urle
fichier
este
ffective
menta
lloué
L’écrit
uresurdisque
estatom
ique
:sid
euxprocessusP
1etP
2écriv
entsim
ultané
mentda
nsle
mêm
efichier
aumêm
een
droit,lorsqu
elesde
uxprocessusau
ront
finileu
récrit
ure,
ontrou
vera
àceten
droit:
•So
itl’é
critu
refaite
parP
1,
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
59
1Pr
imitivesUnixd’entrées-sorties
1.1Pr
imitivesde
base
•So
itl’é
critu
refaite
parP
2,
•Maisjamaisun
mélan
gede
sécrit
ures
faite
spa
rP
1etP
2.
Noter
quequ
andle
fichier
esto
uverta
vecl’o
ptionO_APPEND
,siP
1etP
2écriv
ents
imultané
ment(
àla
findu
fichier,p
uisqu’on
al’o
ptionO_APPEND
),lorsqu
elesde
uxprocessusau
ront
finileu
récrit
ure,
ontrou
vera
enfin
defichier
:
•So
itl’é
critu
refaite
parP
1suivie
decelle
faite
parP
2,
•So
itl’é
critu
refaite
parP
2suivie
decelle
faite
parP
1.Auc
uneécrit
uren’estd
oncpe
rdue
!Attentio
n,cetteécrit
uresim
ultané
een
finde
fichier
n’estp
aséquivalente
àde
uxprocessusexécutan
tsim
ultané
mentlesop
érations
:ls
eek(
fd,0
,SEE
K_EN
D);
/*Fi
xela
posi
tion
cour
ante
àla
fin
dufi
chie
r*/
writ
e(fd
,dat
a,ta
ille
);
Eneff
et,d
ansce
derniercas,
l’une
desécrit
ures
risqu
ed’être
écraséepa
rl’a
utre.
Lefichier
copier.c
dela
page
suivan
teillustrel’u
tilisa
tionde
open
,read,
writeet
close.
/***
****
****
*//*
copi
er.c
*//*
****
****
***/
#inc
lude
<std
lib.
h>#i
nclu
de<u
nist
d.h>
#inc
lude
<sys
/sta
t.h>
#inc
lude
<fcn
tl.h
>#i
nclu
de<s
trin
g.h>
#inc
lude
<std
io.h
>
#def
ine
USAG
E"U
SAGE
=co
pier
nomS
ourc
eno
mDes
t\n"
#def
ine
ERRE
CRIT
"Err
eur
d’ec
ritu
re(d
isqu
epl
ein
?)\n
"
int
sour
ce,
dest
;in
tbu
f;in
tnb
CarL
u,nb
CarE
crit
;
int
main
(int
argc
,ch
ar*a
rgv[
]){
if(a
rgc
!=3)
{wr
ite(
STDE
RR_F
ILEN
O,US
AGE,
strl
en(U
SAGE
));
retu
rnEX
IT_F
AILU
RE;
} sour
ce=
open
(arg
v[1]
,O_
RDON
LY);
if(s
ourc
e<
0){
perr
or(a
rgv[
1]);
retu
rnEX
IT_F
AILU
RE;
} dest
=op
en(a
rgv[
2],
O_WR
ONLY
|O_C
REAT
|O_T
RUNC
,S_
IRWX
U|S_
IRWX
G|S_
IRWX
O);
if(d
est
<0)
{pe
rror
(arg
v[2]
);re
turn
EXIT
_FAI
LURE
;} wh
ile
((nb
CarL
u=
read
(sou
rce,
(voi
d*)&
buf,
size
of(b
uf))
)>
0){
nbCa
rEcr
it=
writ
e(de
st,
(voi
d*)&
buf,
nbCa
rLu)
;if
(nbC
arEc
rit
<=0)
{if
(nbC
arEc
rit
==0)
{wr
ite(
STDE
RR_F
ILEN
O,ER
RECR
IT,
strl
en(E
RREC
RIT)
);} el
se{
perr
or("
writ
e");
} retu
rnEX
IT_F
AILU
RE;
}} if
(nbC
arLu
<0)
{pe
rror
("re
ad")
;re
turn
EXIT
_FAI
LURE
;} if
(clo
se(s
ourc
e)<
0){
perr
or(a
rgv[
1]);
retu
rnEX
IT_F
AILU
RE;
} if(c
lose
(des
t)<
0){
perr
or(a
rgv[
2]);
retu
rnEX
IT_F
AILU
RE;
} retu
rnEX
IT_S
UCCE
SS;
} TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
60
1Pr
imitivesUnixd’entrées-sorties
1.3Con
trôlede
sentrée-sortie
s
Cette
opérationde
recopiedu
contenud’un
fichier
vers
unau
trede
scrip
teur
estun
eop
érationfré
quem
-mentr
éalisée
dans
less
erveursW
eb.E
neff
et,c
esserveurs
doiventn
otam
mente
nvoyer
lecontenude
fichiers
vers
desna
viga
teursqu
ileur
enon
tfait
lade
man
de.C’est
pourqu
oile
systèm
eLinu
xoff
rela
prim
itive
sendfile
(ssize_t
sendfile(int
out_fd,intin_fd,
off_t*offset,
size_t
count)
).Elle
perm
etde
lirecountoctets
dein_fdpo
urlesécrir
esurout_fd
(qui
doitcorrespo
ndre
àun
esocket).sendfile
est
plus
perfo
rman
tqu
ela
combina
isonread
/write
.La
fonc
tionfallocateestla
versionspécifiqu
eLinu
xde
lafonc
tion(portable)
posix_fallocate.
#8
' &
$ %
1.2Dup
licationde
descrip
teur
�Mécanism
eprincip
alementu
tilisé
pour
réaliserd
esredirections
dest
roisfichiers
d’entré
e-sorties
standard.
�intdup(intfdACloner)
:retou
r=no
uveauF
d
associe
leplus
petit
descrip
teur
dispon
ible
duprocessusa
ppela
ntàla
mêm
eentré
edans
latabledesfi
chier
souverts
quele
descrip
teur
fdACloner
�intdup2(int
fdACloner,
intfdClone)
forcele
descrip
teur
fdCloneàdeveniru
nsyno
nymedu
descrip
teur
fdACloner.
Sile
descrip
teur
fdClonen’estp
asdispon
ible,
lesystèm
eréalise
aupréalab
leun
eop
érationde
ferm
etureclose(fdClone)
#9
' &
$ %
1.3Co
ntrôle
desentrée-sortie
s
1.3.1
Prim
itive
fcntl............................................................10
1.3.2
Verro
uillage
defichier.......................................................11
1.4.0
Conseil
aunoyaupo
urles
lectures.
..........................................13
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
61
1Pr
imitivesUnixd’entrées-sorties
1.3Con
trôlede
sentrée-sortie
s
#10
' &
$ %
1.3.1Prim
itive
fcntl
�intfcntl(intfd,intcmd,
...)
:retou
rfon
ctiondu
type
d’op
ération
perm
etla
réalisatio
nd’un
certa
inno
mbred’op
érations
àdiffé
rentsn
iveauxdans
lestables
dusystèm
e
�Lesc
ommandesp
ossib
lessont
:�
F_GETFL:V
aleur
desa
ttributsu
tilisé
saumom
entd
el’o
uverture
dufichier
�F_SETFL:P
osition
nementd
ecerta
insd
ecesa
ttributs(
NB:c
esattribu
tssont
commun
sàtous
lesprocessusm
anipulantlefichier
concerné)
Onpeut
ainsipo
sitionn
erO_ASYNCou
O_NONBLOCK
aprèsc
réationdu
descrip
teur
defichier.
�Opératio
nsliées
auverro
uillage
#11
' &
$ %
1.3.2Ve
rrou
illagede
fichier
�Lesv
errous
sont
attachés
àun
i-nœud
.Don
c,l’effe
td’unverro
usuru
nfichier
est
visible
autra
vers
detous
lesdescrip
teurs(
etdo
nctous
lesfichierso
uverts)
corre
spon
dant
àce
nœud
�Un
verro
uestlaproprié
téd’un
processus:
ceprocessuse
stle
seul
habilitéàle
mod
ifier
oul’enlever
�Lesv
errous
ontu
nepo
rtéede
[entier
1:entier
2]ou
[entier
:∞]
�Lesv
errous
ontu
ntype
:�
parta
gé(shared)
�exclu
sif(exclusiv
e)
Lefichier
vExcl.cillustrela
pose
d’un
verrou
exclusif:
/***
****
****
//*
vExc
l.c
*//*
****
****
**/
#inc
lude
<std
lib.
h>#i
nclu
de<u
nist
d.h>
#inc
lude
<sys
/sta
t.h>
#inc
lude
<fcn
tl.h
>#i
nclu
de<s
tdio
.h>
int
main
(){
int
fd;
stru
ctfl
ock
verr
ou;
fd=
open
("/t
mp/f
icTe
st",
O_RD
WR|O
_CRE
AT,
S_IR
WXU|
S_IR
WXG|
S_IR
WXO)
;if
(fd
<0)
{
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
62
1Pr
imitivesUnixd’entrées-sorties
1.3Con
trôlede
sentrée-sortie
s
perr
or("
open
");
exit
(EXI
T_FA
ILUR
E);
} /*Ve
rrou
excl
usif
sur
le15
èca
ract
ère
*/ve
rrou
.l_t
ype
=F_
WRLC
K;ve
rrou
.l_w
henc
e=
SEEK
_SET
;ve
rrou
.l_s
tart
=15
;ve
rrou
.l_l
en=
1;/*
Aca
use
dupa
rame
tre
F_SE
TLKW
,on
sebl
oque
sur
lefc
ntl
sija
mais
*//*
leve
rrou
nepe
utpa
set
repr
is*/
prin
tf("
tent
ativ
ede
pose
deve
rrou
(exc
lusi
f)pa
rpr
oces
sus
%d..
.\n"
,ge
tpid
());
if(f
cntl
(fd,
F_SE
TLKW
,&v
erro
u)<
0){
perr
or("
Pose
verr
ou")
;ex
it(E
XIT_
FAIL
URE)
;} pr
intf
("..
.Ve
rrou
(exc
lusi
f)po
sepa
rpr
oces
sus
%d\n
",ge
tpid
());
/*Ic
ion
pour
rait
fair
ele
trai
teme
ntqu
ine
cess
itai
td’
etre
prot
ege
*//*
par
leve
rrou
*/sl
eep(
10);
/*Li
bera
tion
duve
rrou
*/pr
intf
("Re
lach
emen
tve
rrou
par
proc
essu
s%d
...\
n",
getp
id()
);ve
rrou
.l_t
ype
=F_
UNLC
K;ve
rrou
.l_w
henc
e=
SEEK
_SET
;ve
rrou
.l_s
tart
=15
;ve
rrou
.l_l
en=
1;if
(fcn
tl(f
d,F_
SETL
K,&v
erro
u)<
0){
perr
or("
Rela
chem
ent
verr
ou")
;ex
it(E
XIT_
FAIL
URE)
;} pr
intf
("..
.OK\
n");
retu
rnEX
IT_S
UCCE
SS;
} Lefichier
vPart.cillustrela
pose
d’un
verrou
partag
é:
/***
****
****
//*
vPar
t.c
*//*
****
****
**/
#inc
lude
<std
lib.
h>#i
nclu
de<u
nist
d.h>
#inc
lude
<sys
/sta
t.h>
#inc
lude
<fcn
tl.h
>#i
nclu
de<s
tdio
.h>
int
main
(){
int
fd;
stru
ctfl
ock
verr
ou;
fd=
open
("/t
mp/f
icTe
st",
O_RD
WR|O
_CRE
AT,
S_IR
WXU|
S_IR
WXG|
S_IR
WXO)
;if
(fd
<0)
{pe
rror
("op
en")
;ex
it(E
XIT_
FAIL
URE)
;} /*
Verr
oupa
rtag
esu
rle
15e
cara
cter
e*/
verr
ou.l
_typ
e=
F_RD
LCK;
verr
ou.l
_whe
nce
=SE
EK_S
ET;
verr
ou.l
_sta
rt=
15;
verr
ou.l
_len
=1;
/*A
caus
edu
para
metr
eF_
SETL
KW,
onse
bloq
uesu
rle
fcnt
lsi
jama
is*/
/*le
verr
our
nepe
utpa
set
repr
is*/
prin
tf("
tent
ativ
ede
pose
deve
rrou
(par
tage
)pa
rpr
oces
sus
%d..
.\n"
,ge
tpid
());
if(f
cntl
(fd,
F_SE
TLKW
,&v
erro
u)<
0){
perr
or("
Pose
verr
ou")
;ex
it(E
XIT_
FAIL
URE)
;} pr
intf
("..
.Ver
rou
(par
tage
)po
sepa
r%d
\n",
getp
id()
);
/*Ic
ion
pour
rait
fair
ele
trai
teme
ntqu
ine
cess
itai
td’
etre
prot
ege
*//*
par
leve
rrou
*/sl
eep(
10);
/*Li
bera
tion
duve
rrou
*/pr
intf
("Re
lach
emen
tve
rrou
par
proc
essu
s%d
...\
n",
getp
id()
);ve
rrou
.l_t
ype
=F_
UNLC
K;ve
rrou
.l_w
henc
e=
SEEK
_SET
;ve
rrou
.l_s
tart
=15
;ve
rrou
.l_l
en=
1;if
(fcn
tl(f
d,F_
SETL
K,&v
erro
u)<
0){
perr
or("
Rela
chem
ent
verr
ou")
;
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
63
Lesfichiers(etlesentrées-sorties)
1Pr
imitivesUnixd’entrées-sorties
exit
(EXI
T_FA
ILUR
E);
} prin
tf("
...O
K\n"
);
retu
rnEX
IT_S
UCCE
SS;
}
•Si
onexécutevExclen
prem
ier,un
autrevExclou
unvPartdo
iventattend
reavan
tde
pouv
oirpo
ser
leur
verrou
.
•Si
onexécutevParten
prem
ier,un
autrevPartpe
utpo
serleverrou
(partagé).En
revanche,u
nvExcl
doitattend
reavan
tde
pouv
oirpo
sersonverrou
.
•Noter
qu’onpe
utavoirun
efaminede
vExcl:
–Ondé
marre
un1e
rvP
art.
–Ondé
marre
vExcl:
ilse
met
enattente.
–Ondé
marre
un2e
vPart.Le
1ervP
arts
etermine.Maisc
ommele2
èvPa
rteste
ntrainde
s’exécu
ter,
vExcla
tten
den
core.
–Ondé
marre
un3e
vPart.Le
2evP
arts
etermine.Maisc
ommele3
evP
arte
sten
trainde
s’exécu
ter,
vExcla
tten
den
core.
–On
constate
quetant
quedesvP
artdé
marrent
alorsqu
ele
vPartprécéd
entn’a
pasfin
ide
s’exécu
ter,
vExcld
oitattend
re:ilp
eutdo
ncyavoirun
efaminede
vExcl.
Pour
empê
cher
cettefamine,
ilfaut
ajou
terun
eexclusionmutue
lle(cf.chap
itre«Sy
nchron
isatio
nde
processus»).
#12
' &
$ %
1.3.3Co
nseila
unoyaupo
urleslectures
�intposix_fadvise(intfd,off_toffset,off_tlen,
intadvice):
retour
=0siOK,
numérod’erreur
sinon
perm
etd’anno
ncer
aunoyaula
manièr
edo
nton
vaaccéderà
unfichier,c
equ
iperm
etau
noyaude
faire
deso
ptim
isatio
nsapproprié
es
Dep
uis
janv
ier
2011
,on
sait
que
cette
fonc
tion
est
utilisée
dans
les
procha
ines
versions
deFi-
refox
pour
gagn
er40
%à
50%
detemps
aumom
ent
dudé
marrage
enchargean
tplus
efficace-
ment
les
deux
librairies
del’interface
grap
hiqu
e,xul.dll
etmozjs.dll
(plus
d’inform
ations
enhttps://bugzilla.mozilla.org/show_bug.cgi?id=627591).
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
64
Lesfichiers(etlesentrées-sorties)
1Pr
imitivesUnixd’entrées-sorties
#13
' &
$ %
1.4Manipulationde
l’offset
�off_tlseek(intfd,off_tunOffset,intorigine)
:retou
r=no
uvel
emplacem
ent
perm
etde
manipuler
l’offset
dufichier
�origineperm
etde
précise
rlamanièr
ede
prendreen
comptele
paramètre
offset
:�
SEEK_SET
:offset
=unOffset
�SEEK_CUR
:offset
=offset
+unOffset
�SEEK_END
:offset
=finFichier
+unOffset
�pread(re
spectiv
ementp
write)
faitun
elec
ture
(respectiv
ementu
neécriture)
commeread
(respectiv
ementw
rite
),mais
perm
eten
plus
deprécise
runoff
set.
NB:L
’offset
dufichier
n’estp
asmod
ifié
lseekpe
utêtre
utilisé
pour
faire
unfichier
d’inde
xpe
rmettant
deretrou
verplus
rapide
mentdesinfor-
mations
dans
unfichier
textue
l(cf.e
xerciceEn
trées-sorties/5).T
outefois,
avan
td’eng
ager
undé
velopp
ement
spécifiqu
eet
coûteu
xba
sésurl
seek
,tou
joursv
érifier
quela
fonc
tionn
alité
recherchée
n’exist
epa
sdéjàda
nsun
elib
rairie(O
penSo
urce)commeUnixNDBM
,GDBM
ouOracleBe
rkeley
DB
(voircommentaire
dela
section2.6).
#14
' &
$ %
1.5Gestio
nde
lalenteurou
dublocagedesentrées-sorties*
�La
réceptiond’un
signalp
arun
processusa
rrête
touteentré
e-sortieen
coursd
ansc
eprocessus(
errnoestp
osition
néàEINTR).
�Da
nsle
caso
ùle
descrip
teur
estm
arqu
éavec
l’optionO_NONBLOCK
:lorsque
leprog
rammeinvoqu
eun
eprim
itive
d’entré
e-sortiedo
ntle
systèm
edétectequ
’elle
sebloq
uerait,
laprim
itive
renvoieim
médiat
ementu
neerreur
etpo
sitionn
eerrnoà
EAGAIN
ouEWOULDBLOCK(selo
nqu
efichier
ousocket).
�Le
prog
rammepeut
s’app
uyer
surles
prim
itivesd
’entré
es-so
rties
asynchrones
aio_read
etaio_write.
Chacun
edécle
nche
l’exécutio
nd’un
eentré
e-sortiede
manièr
easynchrone
:�
Elle
nebloq
uepasl’ex
écutiondu
prog
ramme;
�Quand
sonexécutionestt
erminée
(qu’ellese
soitbien
passée
ouqu
’ilyait
euun
eerreur),un
signale
stenvoyé
auprog
rammequ
i,dans
legestionn
airede
signal,peut
récupérera
vecaio_return
etaio_errorle
résulta
tdel’exécutio
nde
l’entrée-sortieasynchrone.
Lese
ntrées-so
rties
asynchroness
ontd
écon
seillé
essous
Linu
x.
NB
:L’«
*»da
nssontit
resig
nale
quece
tran
sparentestun
tran
sparentd’ap
profon
dissem
entdu
cours
CSC
4508
.
•Vu
quela
réceptiond’un
signa
lpar
unprocessusa
rrêtetouteentrée-sortie
encours,on
invo
quesouv
ent
laprim
itive
setitimeravan
td’invo
quer
uneop
ération
d’entrée-sortie
.Ainsi
lesystèm
eenvoie
unsig
nal(en
généralS
IGALRM
)et
arrête
donc
l’entrée-sortie
sicettede
rnière
estrestée
bloq
uéeplus
d’un
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
65
Lesfichiers(etlesentrées-sorties)
certain
temps.Noter
que,
sion
utilise
dessig
naux
dans
leprog
ramme,
ilfaut
prévoirla
mise
enplaced’un
gestionn
aire
desig
nal(
avec
sigaction)
desortequ
ele
signa
lsoitgéré
parle
prog
ramme
(éventue
llementen
nefaisa
ntrie
n).A
insi
leprog
rammene
s’arrêtepa
spa
rcequ
ele
signa
ln’est
pas
géré
parle
prog
ramme.
•En
théorie
,l’u
tilisa
tionde
O_NONBLOCK
pourrait
perm
ettrede
gérerplusieursde
scrip
teur
d’entrées-
sortiese
npa
rallè
le.A
insi,
supp
oson
sque
tabFd[]estu
ntableaude
descrip
teurs(
associés
àde
sfichiers)
ouvertsen
lecture.
Onpo
urraitavoirla
bouc
le:
whil
e(1
){
rc=
read
(ta
bFd[
i],
buf,
size
of(b
uf))
;if
(rc
>=0)
{//
Fair
ele
trai
teme
ntas
soci
éa
lale
ctur
eco
rrec
te}
else
if(e
rrno
!=EA
GAIN
){
//L’
erre
urne
vien
tpa
sdu
fait
que
lede
scri
pteu
res
tun
fich
ier
//ou
vert
enno
n-bl
oqua
ntet
que
lere
adse
bloq
uera
it.
//Il
faut
donc
s’ar
rete
r.er
ror_
at_l
ine(
EXIT
_FAI
LURE
,er
rno,
__FI
LE__
,__
LINE
__,
"Pb
desc
ript
eur"
);} i
=(i
+1)
%NB
_ELE
MENT
_DAN
S_TA
BFD;
}
Dan
sla
pratique
,cette
man
ière
deprocéd
erestpe
upe
rform
ante.E
neff
et,o
ndo
itsystém
atique
ment
appe
lerread
surtous
lesdescrip
teursde
fichier,a
lors
quepe
ut-êtrele
read
nedo
nneraun
résulta
tprob
antqu
esurl’u
nde
sde
scrip
teurs.
C’est
pourqu
oilesd
ifférents
systèm
esd’exploitatio
nprop
osentu
nemétho
depo
urdé
term
iner
enun
seul
appe
lsystèmele
(oules)
descrip
teur(s)s
urlequ
el(/lesque
ls)ilyaeu
unévén
ement.Ainsi,
sous
Linu
x,on
utilise
engénérallaprim
itive
select
.Lorsd
ucours«
Élém
ents
d’archite
ctureclient-serveur
»,no
usutilisons
lalib
rairielibevent
(http://monkey.org/∼
provos/libevent/
)qu
ipermet
dega
rantir
lapo
rtab
ilité
dela
gestiondesévén
ements.
•Le
sentrées-sortiesasyn
chrone
s(aio_read,
aio_write...)ne
sont
pasim
plém
entées
dans
leno
yau
Linu
x.To
utefois,
ellessont
émuléesda
nsla
librairiegcc:cettede
rnière
secharge
dedé
marrerun
thread
chargé
defaire
lalectureou
l’écritu
rede
man
ière
asyn
chrone
.Cette
man
ière
deprocéd
erest
très
peupe
rform
ante.L
’utilisa
tionde
sentrées-sortiesasyn
chronesestdo
ncdé
conseillé
esous
Linu
x.
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
66
Lesfichiers(etlesentrées-sorties)
2Bibliothèque
Cd’entrées-sorties
#15
' &
$ %
2Bibliothèque
Cd’entrées-sorties
2.2
Intro
duction.................................................................1
72.2
Ouverture/fermeturede
fichier................................................17
2.3
Lecturede
fichier.............................................................19
2.4
Écriturede
fichier............................................................21
2.6
Contrôle
dutampo
n..........................................................23
2.6
Divers.......................................................................23
#16
' &
$ %
2.1Introd
uctio
n
�L’ensembledesf
onctions
vues
jusqu’àprésents
ontd
esappelssystèm
espécifiqu
esUn
ix:leuru
tilisa
tionrisqu
ede
comprom
ettre
lapo
rtabilitéd’un
eapplica
tion
�Le
langage
Cdéfin
itdesm
écanism
esstandard
d’entré
es-so
rties.L
euru
tilisa
tion
garantitdo
ncla
porta
bilitéd’un
eapplica
tion
�Né
anmoins
l’implém
entatio
nde
cesm
écanism
esstandardse
stun
esurcou
cheau
dessus
desp
rimitivess
ystèmes
:ces
mécanism
esstandard
ontu
nepénalitéen
term
ede
perfo
rmances
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
67
2Bibliothèque
Cd’entrées-sorties
2.3Le
cturede
fichier
#17
' &
$ %
2.2Ouverture/fermeturede
fichier
�Ouverture
:�
FILE
*fopen
(const
char
*path,
constchar
*mode)
provoq
uel’o
uverture
d’un
fluxvers
lefichier
path
�FILE
*fdopen(int
fd,constchar
*mode)
perm
etd’associe
runflu
xau
descrip
teur
defichier
fdob
tenu
,par
exem
ple,
àl’aidede
open
�FILE
*freopen
(const
char
*path,
constchar
*mode,
FILE
*stream)
Fonctio
nnalité
similaire
àdup2
�FILE
*tmpfile
(void)
crée
unfichier
tempo
raire
�Ferm
eture:
�intfclose
(FILE*stream)
Unflu
xestun
estructurede
donn
éesqu
icon
tient
notammentun
descrip
teur
defichier,m
aisau
ssid
espo
inteurssurde
stampo
nsutilisésen
lectureet
enécrit
ure.
fopencrée
desfichiersavec
desdroits
combiné
savec
leumask.
Pour
d’au
tres
droits,faire
unopen
dufichier
avec
lesdroits
quiv
ousintéressent,pu
isutiliserfdopen
pour
obtenirun
flux.
#18
' &
$ %
2.3Lecturede
fichier
�in
tfg
etc
(FIL
E*s
trea
m)
litun
caractère
�in
tge
tc(F
ILE
*str
eam)
équivalen
tde
fget
c,maisim
plém
enté
sous
form
ede
macro
(→a
prior
i,plus
efficace)
�in
tge
tcha
r(v
oid)
litun
caractèresurs
tdin
�ch
ar*f
gets
(cha
r*s
,in
tsi
ze,
FILE
*str
eam)
litau
plus
size−
1caractères
jusqu’à
reto
ur-c
hari
otou
EOF
�ch
ar*g
ets
(cha
r*s
)
litun
echaîne
decaractères
surs
tdin
�si
ze_t
frea
d(v
oid
*ptr
,si
ze_t
size
,si
ze_t
nmem
b,FI
LE*s
trea
m):retou
r=no
mbred’
élém
ents
lus(etn
onle
nombred’
octe
tslus)
litun
tableaud’ob
jets
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
68
2Bibliothèque
Cd’entrées-sorties
2.4Éc
riturede
fichier
#19
' &
$ %
Lecturede
fichier
(suite)
�intfscanf
(FILE*stream,
constchar
*format,
...)
faitun
elec
ture
form
atée
�intscanf(const
char
*format,
...)
faitun
elec
ture
form
atée
surs
tdin
�Po
urtoutes
lesop
érations
delec
ture,lalec
ture
enfin
defichier
décle
nche
lepo
sitionn
ementd
’unindicateur
testable
parf
eof()
Toujou
rstester
lavaleur
renv
oyée
parfscanf
etconsœurs.
Celaévite
rade
ssurpris
es.
Lafonc
tionsscanf
perm
etde
faire
unelectureform
atée
d’un
ezone
mém
oire.
#20
' &
$ %
2.4Éc
riturede
fichier
�in
tfp
utc
(int
c,FI
LE*s
trea
m)
écrit
uncaractère
�in
tpu
tc(i
ntc,
FILE
*str
eam)
équivalen
tde
fput
c,maisim
plém
enté
sous
form
ede
macro
(→a
prior
i,plus
efficace)
�in
tpu
tcha
r(i
ntc)
écrit
uncaractèresurs
tdou
t
�in
tfp
uts
(con
stch
ar*s
,FI
LE*s
trea
m)
écrit
unechaîne
decaractères
�in
tpu
ts(c
onst
char
*s)
écrit
unechaîne
decaractères
surs
tdou
t
�si
ze_t
fwri
te(c
onst
void
*ptr
,si
ze_t
size
,si
ze_t
nmem
b,FI
LE*s
trea
m):
retour
=no
mbred’
élém
ents
écrits(etn
onle
nombred’
octe
tsécrits)
écrit
untableaud’ob
jets
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
69
2Bibliothèque
Cd’entrées-sorties
2.4Éc
riturede
fichier
#21
' &
$ %
Écriturede
fichier
(suite)
�intfprintf(FILE*stream,
constchar
*format,
...)
faitun
eécritureform
atée
�intprintf
(const
char
*format,
...)
faitun
eécritureform
atée
surs
tdout
Com
mefscanf
,fprintfet
consœursrenv
oientun
nombre.
Toutefois,
aucontraire
defscanf
,cette
valeur
deretour
n’esten
géné
ralp
asutile
(car
lecompilateur
fait
desvérifi
catio
nspe
rmettant
decontrôler
quetous
lespa
ramètreson
tbien
étéutilisés).N
oter
quesplin
trecomman
dede
caster
leretour
defprintf
etconsœursen
(void)
.La
fonc
tionsprintfpe
rmet
defaire
uneécrit
ureform
atée
dans
unezone
mém
oire.
Lefichier
copier2.cde
lapa
gesuivan
teillustrelesprim
itivesde
labibliothèque
Cd’entrées-sorties.
/***
****
****
**/
/*co
pier
2.c
*//*
****
****
****
/#i
nclu
de<s
tdli
b.h>
#inc
lude
<std
io.h
>#i
nclu
de<s
trin
g.h>
#inc
lude
<err
no.h
>
FILE
*sou
rce,
*des
t;ch
arbu
f[10
24];
int
nbEl
emLu
,nb
Elem
Ecri
t;
int
main
(int
argc
,ch
ar*a
rgv[
]){
if(a
rgc
!=3)
{fp
uts(
"USA
GE=
copi
er2
nomS
ourc
eno
mDes
t\n"
,st
derr
);re
turn
EXIT
_FAI
LURE
;} so
urce
=fo
pen(
argv
[1],
"r")
;if
(sou
rce
==NU
LL)
{fp
rint
f(st
derr
,"E
rreu
r’%
s’lo
rsou
vert
ure
fich
ier
%s\n
",st
rerr
or(e
rrno
),ar
gv[1
]);
retu
rnEX
IT_F
AILU
RE;
} dest
=fo
pen(
argv
[2],
"w")
;if
(des
t==
NULL
){
fpri
ntf(
stde
rr,
"Err
eur
’%s’
lors
ouve
rtur
efi
chie
r%s
\n",
stre
rror
(err
no),
argv
[2])
;re
turn
EXIT
_FAI
LURE
;} wh
ile
((nb
Elem
Lu=
frea
d((v
oid*
)buf
,si
zeof
(buf
[0])
,si
zeof
(buf
),so
urce
))>
0){
nbEl
emEc
rit
=fw
rite
((vo
id*)
buf,
size
of(b
uf[0
]),
nbEl
emLu
,de
st);
if(n
bEle
mEcr
it<
nbEl
emLu
){
fput
s("E
rreu
rd’
ecri
ture
\n",
stde
rr);
retu
rnEX
IT_F
AILU
RE;
}} if
(fer
ror(
sour
ce)
!=0)
{fp
uts(
"Err
eur
frea
d",
stde
rr);
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
70
Lesfichiers(etlesentrées-sorties)
2Bibliothèque
Cd’entrées-sorties
retu
rnEX
IT_F
AILU
RE;
} if(f
clos
e(so
urce
)<
0){
perr
or(a
rgv[
1]);
retu
rnEX
IT_F
AILU
RE;
} if(f
clos
e(de
st)
<0)
{pe
rror
(arg
v[2]
);re
turn
EXIT
_FAI
LURE
;} re
turn
EXIT
_SUC
CESS
;} #
22
' &
$ %
2.5Co
ntrôle
dutampo
n
�intsetvbuf(FILE*stream,
char
*buf,intbuf,
size_t
size)
contrôle
letampo
nutilis
éparlalibrairiestandard
pour
cacher
certa
ines
opérations
vis-à-visdu
systèm
ede
fichier
�intfflush
(FILE*flux)
videle
tampo
nd’un
flux
NB:c
ecin
eforcepasl’éc
ritureph
ysique
desd
onnées
quin
’esta
ssurée
quepar
O_SYNC
oufsync
L’instructionsetvbuf(stream,NULL,_IONBF,0)
(oubien
setbuf(file,NULL))
perm
etde
garantir
qu’auc
unbu
ffern
esera
utilisé
parlalib
rairiestan
dard
(auc
uneop
érationd’écrit
urene
sera
donc
buffe
risée).
#23
' &
$ %
2.6Divers
�intfseek(FILE*stream,
long
offset,intwhence)
contrôle
l’offset
�intfileno
(FILE*stream)
renvoiele
descrip
teur
defichier
associé
auflu
x
�void
clearerr
(FILE*stream)
effaceindicateur
d’erreur
etde
finde
fichier
�intfeof
(FILE*stream)
testel’ind
icateur
defin
defichier
(effa
çableun
iquementp
arclearerr
)
�intferror
(FILE*stream)
testel’ind
icateur
d’erreur
(effa
çableun
iquementp
arclearerr
)
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
71
Lesfichiers(etlesentrées-sorties)
Ilexist
eau
ssid
esfonc
tions
de«ba
sesde
donn
ées»,
plus
précisé
mentde
saccèsau
xfichiersplus
évolués
quel’a
ccès
séqu
entie
loudirect
:fichiers
séqu
entie
lsinde
xés(avecdesclés
d’accès),a
rbresbina
ires...
•Pa
ckag
eUnixNDBM
:fon
ctiondbm_open
...(utilisé
pour
services
réseau
NIS,p
arexem
ple),
•Pa
ckag
eGDBM
:exten
sions
GNU
(fonc
tiongdbm_open...
),
•Pa
ckag
eOracleBe
rkeley
DB
:fonc
tiondbopen
...
(fichiers
accessible
àpa
rtir
dulang
ageC,Java,
Perl.
..).
Voirmanou
bien
[Blaess,
2002
]pou
rplus
d’inform
ations.
#24
' &
$ %
3Projectio
ndesfichiersen
mém
oire
�void
*mmap(void*start,size_t
length,intprot,intflags,
int
fd,off_toffset)
perm
etd’établir
uneprojectio
nen
mém
oire
d’un
fichier
(oud’un
périp
hériq
ue)d
emanièr
eàaccédera
ucontenudu
fichier
avec
desinstru
ctions
demanipulation
mém
oire
�intmunmap(void*start,size_t
length)
supp
rimeun
eprojectio
n
�AT
TENT
ION
:mmapne
perm
etpasd
’ajouter
deso
ctetsà
unfichier
Lefichier
affic8.c
dela
page
suivan
teillustremmap
./*
****
****
***/
/*af
fic8
.c*/
/***
****
****
*/
/*Pr
ogra
mme
affi
chan
t8
cara
cter
es(a
part
irdu
i-ie
me)
dufi
chie
rdo
nt*/
/*le
nom
est
four
nien
para
metr
e*/
#inc
lude
<std
lib.
h>#i
nclu
de<s
ys/t
ypes
.h>
#inc
lude
<uni
std.
h>#i
nclu
de<s
ys/s
tat.
h>#i
nclu
de<f
cntl
.h>
#inc
lude
<std
io.h
>#i
nclu
de<s
ys/m
man.
h>
int
main
(int
argc
,ch
ar*a
rgv[
]){
int
fd;
int
i,j;
char
*tab
;in
trc
;
if(a
rgc
<3)
{fp
uts(
"USA
GE=
perm
utno
mFic
vale
urDe
I\n"
,st
derr
);re
turn
EXIT
_FAI
LURE
;} fd
=op
en(a
rgv[
1],
O_RD
ONLY
);if
(fd
<0)
{pe
rror
("op
enfi
c");
retu
rnEX
IT_F
AILU
RE;
} i=
atoi
(arg
v[2]
);
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
72
Lesfichiers(etlesentrées-sorties)
/*mm
ap*/
tab
=(c
har
*)mm
ap(0
,i+
7,PR
OT_R
EAD,
MAP_
PRIV
ATE,
fd,
0);
if(t
ab==
MAP_
FAIL
ED){
perr
or("
mmap
");
retu
rnEX
IT_F
AILU
RE;
} /*Af
fich
age
*/fo
r(j
=0;
j<8
;j+
+){
putc
(tab
[i+j
],st
dout
);} pu
ts("
");
/*On
ferm
eto
ut*/
rc=
munm
ap(t
ab,i
+7);
if(r
c<
0){
perr
or("
munm
ap")
;re
turn
EXIT
_FAI
LURE
;} if
(clo
se(f
d)<
0){
perr
or("
clos
efi
c");
retu
rnEX
IT_F
AILU
RE;
} retu
rnEX
IT_S
UCCE
SS;
} Vuqu
emmap
nepe
rmet
pasd’ajou
terde
soctets
àun
fichier,ilfau
tveiller
àce
quele
fichier
aitla
taille
max
imum
souh
aitée(par
exem
ple,
avec
posix_fallocate)
avan
td’utilisermmap
surce
fichier.
#25
' &
$ %
4Manipulationdesi-n
oeud
sdu
systèm
ede
fichiersUnix
�Le
systèm
ede
gestionde
fichiersUn
ixestbasé
surlano
tiond’i-n
œud
s
�in
tst
at(c
onst
char
*fil
e_na
me,
stru
ctst
at*b
uf)
fsta
t(in
tfd
,st
ruct
stat
*buf
)
renvoientdesinform
ations
relativ
esàun
fichier
donn
é.Structurestat
:Ty
peno
mnature
dev_
tst_d
evNum
érodu
SGF
ino_
tst_io
Num
éroi-n
œud
mod
e_t
st_m
ode
Protectio
nnlink_
tst_n
link
Nom
brede
liens
matériels
uid_
tst_u
idNum
érodu
proprié
taire
gid_
tst_g
idNum
érodu
grou
pedev_
tst_r
dev
Type
périp
hériq
ueoff
_tst_s
izeTa
illeen
octets
time_
tst_a
time
Datedernier
accès
time_
tst_m
time
Datedernièr
emod
ificatio
n...
...
...
Lefichier
tailleFic.cde
lapa
gesuivan
teillustreun
eutilisatio
nde
stat
.
/***
****
****
****
//*
tail
leFi
c.c
*//*
****
****
****
**/
/*Pr
ogra
mme
affi
chan
tla
tail
leen
octe
tdu
fich
ier
dont
leno
mes
t*/
/*fo
urni
enpa
rame
tre
*/
#inc
lude
<std
lib.
h>#i
nclu
de<s
ys/t
ypes
.h>
#inc
lude
<uni
std.
h>#i
nclu
de<s
ys/s
tat.
h>#i
nclu
de<f
cntl
.h>
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
73
Lesfichiers(etlesentrées-sorties)
#inc
lude
<std
io.h
>
int
main
(int
argc
,ch
ar*a
rgv[
]){
int
fd;
stru
ctst
atst
s;
if(a
rgc
<2)
{fp
uts(
"USA
GE=
tail
leFi
cno
mFic
\n",
stde
rr);
retu
rnEX
IT_F
AILU
RE;
} fd=
open
(arg
v[1]
,O_
RDON
LY);
if(f
d<
0){
perr
or("
open
fic"
);re
turn
EXIT
_FAI
LURE
;} if
(fst
at(f
d,&s
ts)
<0)
{pe
rror
("fs
tat"
);re
turn
EXIT
_FAI
LURE
;} pr
intf
("Fi
chie
r%s
a%l
doc
tets
\n",
argv
[1],
sts.
st_s
ize)
;if
(clo
se(f
d)<
0){
perr
or("
clos
efi
c");
retu
rnEX
IT_F
AILU
RE;
} retu
rnEX
IT_S
UCCE
SS;
} #26
' &
$ %
Manipulationdesi-n
oeud
sdu
systèm
ede
fichiersUnix(suite)
�intaccess(const
char
*pathname,
intmode)
testeles
droits
d’accèsd
’unprocessusv
is-à-vis
dufichier
pathname
�intunlink(const
char
*pathname)
perm
etde
détru
ireun
nom
dans
lesystèm
ede
fichiers
�intrename(const
char
*OLD,constchar
*NEW)
perm
etde
reno
mmer
unfichier
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
74
Lesfichiers(etlesentrées-sorties)
#27
' &
$ %
5En
trées-sortiessurrépe
rtoires
�Co
nsultatio
n:
�DI
R*o
pend
ir(c
onst
char
*pat
h):retou
r=po
inteur
surfl
uxréperto
ireou
vrele
réperto
irepa
then
«lec
ture
»�
stru
ctdi
rent
*rea
ddir
(DIR
*dir
):retou
r=un
eentré
ede
réperto
ireou
NULL
litla
prem
ièreentré
e(oula
suiva
ntesiun
appelà
readdira
déjà
étéfait)
duréperto
iredi
r
�vo
idre
wind
dir
(DIR
*dir
)
�in
tcl
osed
ir(D
IR*d
ir)
�Mise
-à-jo
ur:
�in
tmk
dir(
cons
tch
ar*p
ath,
mode
_tmo
de)
�in
trm
dir(
cons
tch
ar*p
ath)
�Ra
ppel
:int
unli
nk(c
onst
char
*pat
h)
perm
etde
supp
rimer
l’entrée
path
(eté
ventuellementd
edétru
irel’i-nœud
associé
dans
lesystèm
ede
fichier,sic
ette
entré
eétaitlaseulepo
intant
surl’i-œud
)
Ilexist
eau
ssid
esfonc
tions
perm
ettant
laman
ipulationde
liens
symbo
lique
s.Ellesne
sont
pasdé
crite
sici,carpo
url’instant
lano
rmePO
SIX
n’apa
srepris
cesmécan
ismes.A
titre
indicatif,v
oici
lesfonctio
nsdispon
ible
dans
Linu
x:
•intsymlink(constchar
*oldpath,constchar
*newpath)
crée
unlie
nsymbo
lique
•intlstat(constchar
*path,
struct
stat
*buf)
fournitde
sinform
ations
surun
liensymbo
lique
•intreadlink(const
char
*path,
char
*buf,size_t
bufsiz)
litle
contenud’un
liensymbo
lique
#28
' &
$ %
6Limita
tions
deNFS
�NF
S(N
etwo
rkFile
System
)est
unprotocoleperm
ettant
unaccèst
ransparent
pour
lesutilis
ateurs
àdesfi
chier
sprésentss
urdesm
achinesd
istantes
�Se
slim
itatio
nssont
lessuiva
ntes
:�
LeserveurN
FSests
ansé
tate
tles
verro
usne
sont
pass
uppo
rtésp
ourles
fichiersd
istants
�Prob
lèmede
cohérence:N
FSgère
unensemblede
caches
pour
lesfichierse
tleu
rsattribu
ts.C
escaches
ontu
nedu
réede
validité
de3second
espo
urles
fichierse
t30second
espo
urles
réperto
irese
tile
xiste
desp
hasesd
’incohérence
entre
lesdiffé
rentsc
lients
�Prob
lèmede
sécurité:l’accès
auxfichiersd
istants
estc
ontrô
léau
travers
del’identificatio
n(num
érique)d
el’u
tilisa
teur
demandeur.L
ebo
nfonctio
nnem
ent
d’ensembledu
mécanism
esupp
osedo
ncqu
’une
identifi
catio
nnu
mérique
donn
éecorre
spon
deàla
mêm
eperso
nneph
ysique
surlesystèm
ede
serveurd
efichierse
tsurles
systèm
esclients
quip
euvent
lesollic
iterv
iaNF
S.So
lutio
ncla
ssique
:utilis
erun
NIS(N
etwo
rkInform
ationSe
rvice
)
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
75
Lesfichiers(etlesentrées-sorties)
L’exercice
6illustrecertaine
sde
ceslim
itatio
nsde
NFS
.
Bib
liogr
aphi
edu
chap
itre
[Blaess,
2002
]Blaess,C
.(20
02).
Programmationsystèm
een
Csous
Linu
x:s
igna
ux,p
rocessus,threads,IPC
etsockets.
Eyrolle
s,Pa
ris,P
aris,
Fran
ce.
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
76
Com
mun
icat
ions
inte
r-pr
oces
sus
Den
isC
onan
,M
iche
lSi
mat
icet
Fra
nçoi
sT
raha
y
mod
ule
CSC
4508
/M2
Avr
il20
18 77
Com
mun
ications
inter-processus
1Gestio
nde
sprocessus
#2
' &
$ %
Plan
dudo
cument
1Ge
stiondesp
rocessus
...........................................................4
2Co
mmun
icatio
nsàl’aidede
tubes...............................................10
3Co
mmun
icatio
nàl’aidedesIPC
POSIX.........................................13
4Co
mparaiso
ndesm
écanism
esde
synchron
isatio
n.................................26
#3
' &
$ %
1Gestio
ndesprocessus
1.1
Envir
onnementd
esprocessus.
.................................................4
1.2
Inform
ations
concernant
unprocessus.
.........................................5
1.3
Créatio
nde
processus..........................................................6
1.4
Term
inais
onde
processus.
.....................................................7
1.5
Exécutiond’un
nouveauprog
ramme.
...........................................8
TEL
ECOM
SudP
aris—
Den
isCon
an,M
ichelSimaticet
Fran
çoisTr
ahay
—Av
ril20
18—
mod
uleC
SC45
08/M
278
Com
mun
ications
inter-processus
1Gestio
nde
sprocessus
#4
' &
$ %
1.1En
vironn
ementdesprocessus
�En
viron
nement=
liste
dechaîn
esde
caractères
(cou
ples
<nom>=<valeur>
)
�Va
riables
expo
rtées
dushell
�Ac
cessible
àpartird
eenvp
oude
lavaria
bleexterneenviron
intmain(int
argc,char
**argv,char
**en
vp)
ICe
tteform
edu
main
esta
ujou
rd’hui
dépréciée
�envp
etenvironpo
ssèdentlamêm
evaleu
r
�getenv
récupère
lecontenud’un
evaria
bled’envir
onnement
�char
*getenv(char
*name)
�Va
leurd
eretour
=po
inteur
surlachaîn
e<valeur>
ouNULL
Voiciu
nexem
plede
recherchede
varia
bles
d’environn
ement(fichierexemple_getenv.c
):
/***
****
****
****
****
*//*
exem
ple_
gete
nv.c
*//*
****
****
****
****
***/
#inc
lude
<std
io.h
>#i
nclu
de<s
tdli
b.h>
exte
rnch
ar**
envi
ron;
int
main
(int
argc
,ch
ar**
argv
,ch
ar**
envp
){
char
*p_s
hell
;ch
ar**
anci
en_e
nvir
on=
envi
ron;
/*pa
rcou
rsde
l’en
viro
nnem
ent
*/pr
intf
("--
->en
vp:\
n");
whil
e(*e
nvp
!=NU
LL)
{pr
intf
("%s
\n",
*env
p);
envp
++;
} prin
tf("
--->
envi
ron
:\n"
);wh
ile(
*env
iron
!=NU
LL)
{pr
intf
("%s
\n",
*env
iron
);en
viro
n++;
} /*af
fich
age
dela
vari
able
SHEL
Lsi
elle
exis
te*/
prin
tf("
--->
rech
erch
ede
lava
riab
leSH
ELL
:\n"
);if
((p_
shel
l=
gete
nv("
SHEL
L"))
!=NU
LL)
{pr
intf
("SH
ELL
:%s
\n",
p_sh
ell)
;}
else
{pr
intf
("va
riab
leSH
ELL
non
défi
nie\
n");
} envi
ron
=an
cien
_env
iron
;pr
intf
("--
->re
cher
che
dela
vari
able
SHEL
L(e
nvir
onré
init
iali
sée)
:\n"
);if
((p_
shel
l=
gete
nv("
SHEL
L"))
!=NU
LL)
{pr
intf
("SH
ELL
:%s
\n",
p_sh
ell)
;}
else
{pr
intf
("va
riab
leSH
ELL
non
défi
nie\
n");
} retu
rnEX
IT_S
UCCE
SS;
}
Veuillezrega
rder
aussiles
fonc
tions
putenv(3),
setenv(3),
unsetenv(3).
TEL
ECOM
SudP
aris—
Den
isCon
an,M
ichelSimaticet
Fran
çoisTr
ahay
—Av
ril20
18—
mod
uleC
SC45
08/M
279
Com
mun
ications
inter-processus
1Gestio
nde
sprocessus
#5
' &
$ %
1.2Inform
ations
concernant
unprocessus
�Ty
pesd
’inform
ations
:�
pid_tPID:n
umérodu
processus,un
ique
etno
nmod
ifiable
�pid_tPPID
:num
érodu
processusp
arent,un
ique
etno
nmod
ifiable
�gid_tPGID
:num
érodu
processusc
hefd
’ungrou
pea ,
unique
etmod
ifiable
�uid_tUID:n
umérode
l’utilisa
teur
réel,
unique
etno
nmod
ifiable
�gid_tGID:n
umérodu
grou
pede
l’utilisa
teur
réel,
unique
etno
nmod
ifiable
�gid_tEUID
:num
érode
l’utilisa
teur
effectif,u
niqu
eet
mod
ifiable
�gid_tEGID
:num
érodu
grou
pede
l’utilisa
teur
effectif,u
niqu
eet
mod
ifiable
�Prim
itivesc
orrespon
dantes
:�
pid_tgetpid()
,pid_t
getppid(),
intgetpgid(),
intsetpgid(pid_t
pid,
pid_tpgid)
�uid_tgetuid()
,uid_t
geteuid(),
gid_tgetgid()
,gid_t
getegid(),
intsetuid(uid_t
id),intsetgid(gid_t
id)
a.Attentio
n!u
ngrou
pede
processusrepè
reun
ensemblede
processusda
nsun
emêm
esession,
cen’estpa
slié
augrou
ped’utilisateur.
Dan
sunsystèm
edet
ypeU
NIX
,iln
’est
pasp
ossib
lede
construire
unprocessus;
enrevanche
,les
processus
peuv
entêtre
dupliqué
sàl’ide
ntique
(àcharge
ensuite
auprog
rammeu
rde
chan
gerl’imag
edu
processuss’il
veut
exécuter
unprog
rammediffé
rent).
Ainsi,
tout
processus(à
l’excep
tiondu
processusinitial
—no
té0)
possèd
eun
parent.Ils
sont
donc
logiqu
ementorga
niséssous
laform
ed’un
earbo
rescen
ce.D
epuisla
version
2.4du
noyauGNU/L
inux
,leno
mbrede
processusn’estplus
limité
àla
valeur
NT_TASKS
(fixéeà51
2)mais
dépe
ndde
lataillemém
oire
dela
machine
.Ainsi,
pour
unemachine
à8Go,
leno
mbrepe
rmis
est62
993:
lisible
enrega
rdan
tda
ns/proc/sys/kernel/threads-max
.La
séman
tique
associée
àchacun
ede
cesprim
itivessystèm
eestla
suivan
te:getpid
etgetppidre-
tourne
ntrespectiv
ementle
numérodu
processuscouran
tet
lenu
mérodu
parent
duprocessuscouran
t;getuid
etgetgid
retourne
ntrespectiv
ementl’U
IDréel
etle
GID
réel
associés
auprocessuscouran
t.Le
svaleursd
uprop
riétaire
etdu
grou
peeff
ectifsd
éterminentles
droits
duprocessuslorsd
esaccèsa
uxob
jets
dusystèm
e(fichiers
etprocessus).C
esvaleurss
ontm
odifiéeslorsqu’un
processusc
orrespon
dàl’e
xécu
tiond’un
prog
rammebina
irepo
urlequ
elle
bits
etuid(le
ttre
sen
lieuet
placedu
droitx
)est
posit
ionn
é.Le
prop
rié-
taire
réel
restel’ide
ntifian
tde
l’utilisa
teur
ayan
tlanc
éla
comman
deet
leprop
riétaire
effectif
devientalors
l’ide
ntifian
tduprop
riétaire
dufichier
exécuté.C’est
ainsiq
u’ilestp
ossib
led’exécuter
desc
omman
desc
omme
passwd
deman
dant
lesprivilè
gesdu
supe
r-utilisateur.S
eulles
processusde
prop
riétaire
lesupe
r-utilisateur
(0)pe
uventchan
gerd’identifi
antavec
lesprim
itivessetuid
etsetgid
.Le
rôle
desgrou
pesde
processuspe
rmet
degérerensemble,
parexem
plepo
url’e
nvoi
desig
naux
,les
processuscrééspa
run
emêm
eap
plicationim
portan
te.P
arexem
ple,
pour
supp
rimer
tous
lesprocessusde
cetteap
plication,
ilsuffira
d’envoyeru
nsig
nala
ugrou
pe.P
reno
nsle
casd
ela
comman
decat|lp
-Php2
quic
onne
ctel’e
ntréestan
dard
vers
l’imprim
ante
hp2.
Pour
sortir
del’e
ntréeclavier,
ilsuffitde
tape
run
CTL-Dqu
ienv
oieun
signa
ld’arrêt
auxde
uxprocessusmaispa
sau
shellq
uialanc
écesdeux
processus.
Lesig
nalestdo
ncenvoyé
augrou
pede
processusqu
ien
glob
ecesde
uxprocessus.
Voiciun
exem
plede
man
ipulationde
sinform
ations
relativ
esàun
processus(fichierexemple_getpid.c
):
/***
****
****
****
****
*//*
exem
ple_
getp
id.c
*//*
****
****
****
****
***/
#inc
lude
<std
io.h
>#i
nclu
de<s
tdli
b.h>
#inc
lude
<sys
/typ
es.h
>#i
nclu
de<u
nist
d.h>
int
main
(){
prin
tf("
pid
=%d
\n",
getp
id()
);pr
intf
("pp
id=
%d\n
",ge
tppi
d())
;pr
intf
("pg
rp=
%d\n
",ge
tpgr
p())
;pr
intf
("cr
éati
ond’
ungr
oupe
=%d
\n",
setp
grp(
));
prin
tf("
pid
=%d
\n",
getp
id()
);pr
intf
("pp
id=
%d\n
",ge
tppi
d())
;pr
intf
("pg
rp=
%d\n
\n",
getp
grp(
));
TEL
ECOM
SudP
aris—
Den
isCon
an,M
ichelSimaticet
Fran
çoisTr
ahay
—Av
ril20
18—
mod
uleC
SC45
08/M
280
Com
mun
ications
inter-processus
1Gestio
nde
sprocessus
prin
tf("
uid
=%d
\n",
getu
id()
);pr
intf
("eu
id=
%d\n
",ge
teui
d())
;pr
intf
("gi
d=
%d\n
",ge
tgid
());
prin
tf("
egid
=%d
\n",
gete
gid(
));
prin
tf("
chan
geme
ntd’
iden
tité
effe
ctiv
e=
%d,
%d\n
",se
tuid
(0),
setg
id(0
));
prin
tf("
uid
=%d
\n",
getu
id()
);pr
intf
("eu
id=
%d\n
",ge
teui
d())
;pr
intf
("gi
d=
%d\n
",ge
tgid
());
prin
tf("
egid
=%d
\n",
gete
gid(
));
retu
rnEX
IT_S
UCCE
SS;
}
#6
' &
$ %
1.3Créatio
nde
processus
�Hé
ritagede
presqu
etous
lesattribu
tsdu
parent
:�
Segm
entt
ext:c
opié
ouparta
gé�
Segm
entd
ata:c
opié
�UID/GIDréels
eteff
ectifs:
conservés
�PID/PPID
:mod
ifiés
�PGRP
:con
servé
�Sign
auxinterceptés:
conservés
�De
scrip
teursd
efichiers/
tubes:
copiés
�Te
mps
U.C.
:rem
isà0
�Prim
itivesc
orrespon
dantes
:pid_tfork()
,pid_t
vfork()
Laprim
itive
fork
perm
etde
duplique
run
processusàl’identique
.Aussi,
afinde
pouv
oirdiscrim
iner
entrele
parent
(leprocessusinitia
l)et
l’enfan
t(la
copie),lavaleur
deretour
decetteprim
itive
estd
ifférente
selonqu
el’o
nestda
nsl’u
nou
l’autre
processus:d
ansle
parent,lavaleur
retourné
eestle
numérodu
PID
del’e
nfan
t;da
nsl’e
nfan
t,la
valeur
retourné
eest0;e
ncasd’erreur,c
ommepo
urla
plup
artde
sprim
itives
systèm
es,lavaleur
retournéepa
rl’app
elàfork
dans
lepa
rent
est-
1.vforkestu
neversionallégéede
fork
nede
vant
être
utiliséequ
esielle
ests
uivied’un
exec
imméd
iatementa
près.V
oici
unexem
plede
duplication
deprocessus(fichierexemple_fork.c
):
/***
****
****
****
***/
/*ex
empl
e_fo
rk.c
*//*
****
****
****
****
*/
#inc
lude
<std
io.h
>#i
nclu
de<s
tdli
b.h>
#inc
lude
<sys
/typ
es.h
>#i
nclu
de<u
nist
d.h>
int
main
(){
pid_
tpi
d;pr
intf
("dé
mons
trat
ion
defo
rk\n
");
pid
=fo
rk()
;sw
itch
(pid
){
case
-1:
fpri
ntf(
stde
rr,
"ech
ecde
fork
\n")
;re
turn
EXIT
_FAI
LURE
;ca
se0
:/*
enfa
nt*/
slee
p(2)
;pr
intf
("je
suis
l’en
fant
\n")
;pr
intf
("pi
d=
%d\n
",ge
tpid
());
prin
tf("
ppid
=%d
\n",
getp
pid(
));
prin
tf("
pgrp
=%d
\n",
getp
grp(
));
prin
tf("
uid
=%d
\n",
getu
id()
);pr
intf
("eu
id=
%d\n
",ge
teui
d())
;pr
intf
("gi
d=
%d\n
",ge
tgid
());
brea
k;
TEL
ECOM
SudP
aris—
Den
isCon
an,M
ichelSimaticet
Fran
çoisTr
ahay
—Av
ril20
18—
mod
uleC
SC45
08/M
281
Com
mun
ications
inter-processus
1Gestio
nde
sprocessus
defa
ult
:/*
pare
nt*/
prin
tf("
jesu
isle
pare
nt\n
");
prin
tf("
pid
=%d
\n",
getp
id()
);pr
intf
("pp
id=
%d\n
",ge
tppi
d())
;pr
intf
("pg
rp=
%d\n
",ge
tpgr
p())
;pr
intf
("ui
d=
%d\n
",ge
tuid
());
prin
tf("
euid
=%d
\n",
gete
uid(
));
prin
tf("
gid
=%d
\n",
getg
id()
);pr
intf
("pi
dde
l’en
fant
=%d
\n",
pid)
;br
eak;
} retu
rnEX
IT_S
UCCE
SS;
}
#7
' &
$ %
1.4Te
rminaisonde
processus
�Te
rminaison:
�Co
deretour
duprocessus
�Libératio
ndessegm
ents
demém
oire
�En
tréedans
latabledesprocessus(cf.
/pro
c):
IGa
rdée
:stockagecode
retour,tem
psCP
U...
ILibéréeparleprocessusparent
(dansle
wait
)
�At
tentede
laterm
inaisonde
l’enfant:
�Inform
ations
obtenu
eslor
sde
lafin
duprocessusenfant
IMod
etra
ce→
octetp
oids
fort
=sig
nalreçu,
octetp
oids
faible
=0x
b1I
exit→
octetp
oids
fort
=code
retour
enfant,o
ctet
poidsfaible
=0x
00I
Sign
al→
octetp
oids
fort
=0x
b1,o
ctet
poidsfaible
=sig
nalreçu
�Onutilise
plutôt
lesmacros
WIFE
XITE
D,WE
XITS
TATU
S,WI
FSIG
NALE
Det
WTER
MSIG
�Prim
itivescorre
spon
dantes
:vo
idex
it(i
ntco
de_r
etou
r),i
ntat
exit
(voi
d(*f
onct
ion_
a_ex
ecut
er)(
))pi
d_t
wait
(int
*cod
e_re
tour
),pi
d_t
wait
pid(
pid_
tpi
d_en
fant
,in
t*c
ode_
reto
ur,
int
opti
ons)
Laprim
itive
exit
perm
etde
quitt
erleprocessusc
ourant
enretourna
ntun
code
deretour
;atexitpe
rmet
d’em
pilerlesfonc
tions
devant
être
exécutéesàla
term
inaisondu
processus,
lepa
ramètre
consist
anten
unpo
inteur
surla
fonctio
nde
vant
être
exécutée.L
esystèm
eGNU/L
inux
possèd
eun
eprim
itive
(on_exit
).La
prim
itive
atexit
estpréférab
leàon_exit,
carelle
eststan
dard.
Lesprim
itiveswait
etwaitpidpe
rmettent
d’attend
rela
find’un
processusenfant.D
ansle
prem
iercas,
leprem
ieren
fant
seterm
inan
testpris
encompteet
lavaleur
pointéepa
rle
paramètre
contient
lecode
deretour
del’e
nfan
t;da
nsle
second
cas,
leprem
ierpa
ramètre
spécifiel’e
nfan
tde
vant
être
attend
u:<
-1po
urn’im
portequ
elen
fant
appa
rten
antà
ungrou
pede
processusd
’identit
épid_enfant
;-1po
urn’im
portequ
elen
fant
;0po
urn’im
portequ
elenfant
appa
rten
antau
mêm
egrou
pequ
ele
parent
;>0po
url’e
nfan
tayan
tle
PID
indiqu
é.Le
dernierpa
ramètre
perm
etde
spécifier
lecompo
rtem
entde
laprim
itive
;enpa
rticulier,
WNOHANGpe
rmet
deretourne
rmêm
esi
aucu
nen
fant
nes’e
stterm
iné.
Voiciu
nexem
plede
term
inaisonde
processus(fichierexemple_wait.c
):
/***
****
****
****
***/
/*ex
empl
e_wa
it.c
*//*
****
****
****
****
*/
#inc
lude
<std
io.h
>#i
nclu
de<s
tdli
b.h>
#inc
lude
<sys
/wai
t.h>
#inc
lude
<uni
std.
h>
void
f(vo
id)
{pr
intf
("On
vabi
ento
tso
rtir
\n")
;} vo
idg(
void
){
prin
tf("
Onso
rt\n
");
} int
main
(){
int
pid,
code
_ret
our;
TEL
ECOM
SudP
aris—
Den
isCon
an,M
ichelSimaticet
Fran
çoisTr
ahay
—Av
ril20
18—
mod
uleC
SC45
08/M
282
Com
mun
ications
inter-processus
1Gestio
nde
sprocessus
pid
=fo
rk()
;if
(pid
){
/*pa
rent
*/wa
it(&
code
_ret
our)
;co
de_r
etou
r=
WEXI
TSTA
TUS(
code
_ret
our)
;pr
intf
("Pa
rent
:co
dede
reto
urob
tenu
:%d
\n",
code
_ret
our)
;re
turn
(cod
e_re
tour
);}
else
{/*
enfa
nt*/
atex
it(g
);at
exit
(f);
prin
tf("
enfa
nt:
term
inai
son
avec
code
dere
tour
%d\n
",5)
;re
turn
5;} re
turn
EXIT
_SUC
CESS
;}
#8
' &
$ %
1.5Ex
écutiond’un
nouveauprogramme
�Mod
ificatio
nde
l’image(le
segm
entd
ecode)d
uprocessusc
ourant
�Iln’estp
aspo
ssible
derevenird
’unexec
�Lesinstru
ctions
quisuivent
unexec
nesont
exécutéesq
uesiexec
écho
ue
�Prim
itivesc
orrespon
dantes
:exec
{l|v}[e|p]→
man3exec
Il:listed’argu
ments
:fou
rnirla
liste
(char*arg0,
char
*arg1,...,
0)I
v:tablea
ud’argu
ments
:fou
rnirun
pointeur
surletableau(char**argv
avec
dernier
élément=
’0’)
Ie:p
asseru
npo
inteur
d’envir
onnement(
char
**envp
)I
p:lavaria
bled’envir
onnementP
ATHestu
tilisé
epo
urlocaliser
lefichier
(char
*nom_relatif
),sin
onchem
inabsolu
(char*nom_absolu)
Laprim
itive
exec
,que
llequ
’ensoitsa
form
e,pe
rmet
demod
ifier
l’imag
e(lesegm
entd
ecod
e)du
processus
couran
t.Il
estim
portan
tde
noterqu
’iln’estpa
spo
ssible
derevenird’un
exec
etqu
elesinstructions
qui
suiventsonap
peln
esont
accessiblesqu
es’ils
’est
prod
uitun
eerreur.
Laliste
desprim
itivesestla
suivan
te:
•int
exec
l(char
*nom_absolu,
char
*arg0,
char
*arg1,...,
0)
•int
exec
v(char
*nom_absolu,
char
*argv[])
•int
exec
le(char*nom_absolu,
char
*arg0,
char
*arg1,...,
0,char
**envp)
•int
exec
ve(char*nom_absolu,
char
**argv,char
**envp)
•int
exec
lp(char*nom_relatif,char
*arg0,
char
*arg1,...,
0)
•int
exec
vp(char*nom_relatif,char
**argv)
Lesp
rimitivese
xeclpet
execvp
agiro
ntcommele
shelld
anslarecherchedu
fichier
exécutab
lesile
nom
fourni
necontient
pasd
e«sla
sh»(/).Le
chem
inde
rechercheests
pécifié
dans
lavaria
bled’environn
ement
PATH
.Sic
ette
varia
blen’estpa
sdé
finie,lechem
inpa
rdé
faut
sera
“/bin:/usr/bin:”.V
oici
unexem
plede
recouv
rementde
code
(fichierexemple_exec.c
):
/***
****
****
****
***/
/*ex
empl
e_ex
ec.c
*//*
****
****
****
****
*/
#inc
lude
<std
io.h
>#i
nclu
de<s
tdli
b.h>
#inc
lude
<sys
/typ
es.h
>
TEL
ECOM
SudP
aris—
Den
isCon
an,M
ichelSimaticet
Fran
çoisTr
ahay
—Av
ril20
18—
mod
uleC
SC45
08/M
283
Com
mun
ications
inter-processus
2Com
mun
ications
àl’a
idede
tube
s
#inc
lude
<uni
std.
h>
int
main
(){
int
code
_ret
our;
syst
em("
ps")
;pr
intf
("pi
d=
%d\n
",ge
tpid
());
prin
tf("
ppid
=%d
\n",
getp
pid(
));
prin
tf("
pgrp
=%d
\n",
getp
grp(
));
prin
tf("
uid
=%d
\n",
getu
id()
);pr
intf
("eu
id=
%d\n
",ge
teui
d())
;pr
intf
("gi
d=
%d\n
",ge
tgid
());
code
_ret
our
=ex
eclp
("ps
","p
s",
(cha
r*)
NULL
);pr
intf
("co
de_r
etou
rva
ut%d
\n",
code
_ret
our)
;pe
rror
("pb
sur
exec
");
prin
tf("
fin
dupr
ogra
mme
appe
lant
\n")
;re
turn
EXIT
_FAI
LURE
;}
#9
' &
$ %
2Co
mmun
ications
àl’aidede
tube
s
2.1
Princip
edest
ubes............................................................10
2.2
Tubeso
rdinair
es(oulocaux)..................................................11
2.3
Tubesn
ommés...............................................................12
TEL
ECOM
SudP
aris—
Den
isCon
an,M
ichelSimaticet
Fran
çoisTr
ahay
—Av
ril20
18—
mod
uleC
SC45
08/M
284
Com
mun
ications
inter-processus
2Com
mun
ications
àl’a
idede
tube
s
#10
' &
$ %
2.1Principe
destube
s
�Prem
iermoyen
d’échang
ede
donn
éese
ntre
processuss
ousU
NIX
�Fichier
sspécia
uxgéréss
elonun
emétho
dologieFIFO
�Ta
illelim
itée(ty
piqu
ement,64
Kio)
�De
uxtypesd
etubes:
�Tu
beso
rdinair
es,n
onvis
ibles
dans
l’arborescence,
entre
processusd
’une
mêm
efiliat
ion
�Tu
besn
ommés,v
isibles
dans
l’arborescence,
entre
processusn
onforcém
entliés
parfi
liatio
n
�Créatio
nou
ouvertu
rede
tube
retournent
desd
escripteursd
efichierso
uverts
gérés
commeles
autre
sfichier
s
#11
' &
$ %
2.2Tu
besordinaire
s(oulocaux)
�Ac
cèsp
arcréatio
nou
héritage
�Pe
rteparu
nprocessus=
perte
d’accèsd
éfinitiv
eparc
eprocessus
�Po
sitioncourante
entiè
rementd
éterminée
parles
lectures/écritures
�Prim
itive
lseekinterdite
�Ta
illemaxim
umdéterm
inée
parP
IPE_BUFdéfin
iedans
<limits.h>
�Opératio
nde
lecture
pard
éfautb
loqu
ante
�Bloq
uant
jusqu’àlec
ture
dela
taille
demandéeou
disparition
detous
lesécriv
ains
�Po
urno
nbloq
uante:u
tilise
rfcntl
avec
ledrap
eau0_NONBLOCK
�Opératio
nd’écritureatom
ique
(tou
test
écrit)s
iopératio
nbloq
uante
�Sign
alSIGPIPEsiaucunlec
teur
�Prim
itive
corre
spon
dante:
intpipe(int
descfich[2])
I0po
urla
lecture
et1po
url’écritu
re→
Semettre
d’accord
pour
l’utilisa
tion(celu
iqui
écrit,c
euxqu
ilise
nt)
•Le
tube
estun
moyen
decommun
icationinter-processusde
type
FIFO
.Letableaude
deux
entie
rspa
sséen
paramètre
perm
etau
retour
del’a
ppel
deconn
aîtrelesde
uxflu
xassociés
autube
.Lo
rsde
l’app
elde
laprim
itive
pipe
,letube
estcréé
ausein
duprocessusréalisa
ntl’a
ppel.P
ourréalise
run
ecommun
icationinter-processus,
ilestné
cessaire
—suite
àla
créatio
ndu
tube
—de
dupliquer
leprocessus.
L’écrit
ureet
lalecturede
sinform
ations
dans
letube
s’effe
ctue
ntàl’a
idede
sprim
itives
writeet
read
commeavec
lesfi
chiers
classiq
ues;
iln’estp
aspo
ssible
dese
déplacer
dans
letube
(avec
laprim
itive
lseekpa
rexem
ple).
•Po
urévite
rlesprob
lèmes
d’interblocage
dûsàl’a
ttente
dedo
nnéesqu
in’arriveron
tpa
ssurde
sde
s-cripteursq
uelesé
crivains
neferm
entp
as,ile
stfortem
entc
onseilléde
neconserverq
uelesd
escripteurs
utile
set
deferm
ersystém
atique
menttous
lesau
tres.
TEL
ECOM
SudP
aris—
Den
isCon
an,M
ichelSimaticet
Fran
çoisTr
ahay
—Av
ril20
18—
mod
uleC
SC45
08/M
285
Com
mun
ications
inter-processus
2Com
mun
ications
àl’a
idede
tube
s
•La
taillem
axim
umdé
term
inée
parP
IPE_BUFdé
term
inelatailled
esatom
icwr
ite,i.e.lataillem
axim
ale
aude
làde
laqu
elle
l’écritu
reris
quede
nepa
sêtre
atom
ique
.Eneff
et,s
i2processusécriv
entsurle
mêm
etube
etqu
ela
taillede
sdo
nnéesécrit
esestproche
dePIPE_BUF
,ily
aun
fort
risqu
equ
ele
contenude
cesécrit
ures
soitmélan
gées
dans
letube
(unmorceau
del’écritu
redu
processus1,
puisun
morceau
del’é
critu
redu
processus2,
puis
unmorceau
dela
suite
del’é
critu
redu
processus1...).
•La
fonc
tionpopenen
gend
reun
processusen
créant
untube
,exécu
tant
unfork
eten
invo
quan
tle
shell.Le
tube
perm
et,selon
lepa
ramètre
fourni
àpopend’être
enrelatio
navec
l’entréeou
lasortie
duprocessusen
gend
ré.
•Vo
iciu
nexem
plede
commun
icationde
donn
éesavec
untube
ordina
ire(fichierexemple_pipe.c
):
/***
****
****
****
***/
/*ex
empl
e_pi
pe.c
*//*
****
****
****
****
*/
#inc
lude
<ass
ert.
h>#i
nclu
de<s
tdio
.h>
#inc
lude
<std
lib.
h>#i
nclu
de<s
trin
g.h>
#inc
lude
<sys
/typ
es.h
>#i
nclu
de<u
nist
d.h>
#inc
lude
<sys
/wai
t.h>
void
pare
nt(i
nttu
be,
char
*mes
sage
){
spri
ntf(
mess
age,
"Mes
sage
dupa
rent
(%d)
\n",
getp
id()
);wr
ite(
tube
,me
ssag
e,st
rlen
(mes
sage
)+
1);
clos
e(tu
be);
} void
enfa
nt(i
nttu
be)
{ch
arbo
ite;
prin
tf("
Mess
age
reçu
par
%d:
\"",
getp
id()
);wh
ile
(rea
d(tu
be,
&boi
te,
1)==
1)pu
tcha
r(bo
ite)
;pr
intf
("\"
\n\n
");
} int
main
(){
int
pid,
desc
fich
[2],
code
_ret
our;
char
tamp
on[8
0];
pipe
(des
cfic
h);
pid
=fo
rk()
;sw
itch
(pid
){
case
-1:
fpri
ntf(
stde
rr,
"ech
ecde
fork
\n")
;ex
it(E
XIT_
FAIL
URE)
;ca
se0
:/*
enfa
nt*/
clos
e(de
scfi
ch[1
]);
/*..
.n’
ecri
tpa
sda
nsle
tube
mais
lit
*/en
fant
(des
cfic
h[0]
);br
eak;
defa
ult
:/*
pare
nt*/
clos
e(de
scfi
ch[0
]);
/*..
.ne
lit
pas
dans
letu
bema
isec
rit
*/pa
rent
(des
cfic
h[1]
,ta
mpon
);wa
it(&
code
_ret
our)
;br
eak;
} retu
rnEX
IT_S
UCCE
SS;
}
•Cet
exem
plepe
rmet
àun
parent
d’envoyerd
esoctets
àun
enfant.L
’enfan
tsaitq
uele
parent
aterm
iné
d’écrir
esesdo
nnéesqu
andle
parent
ferm
ele
tube
.Dan
sla
pratique
,cemoyen
desavoirqu
ele
parent
aterm
inéd’envoyerun
bloc
dedo
nnéesàl’e
nfan
tn’estpa
spratique
puisq
uele
tube
nepe
utservir
qu’une
seulefois!T
rois
métho
desplus
adap
tées
sont
àdisposition
:
1.Le
parent
envoie
àl’e
nfan
tde
sdo
nnéesqu
iont
unetaillefix
e(unentie
r,un
estructurede
don-
nées...).
Lepa
rent
écrit
sesdo
nnéeset
l’enfan
tfait
unread
detaillefix
eoctets.r
eadrenv
oie
donc
taillefix
e(le
parent
aécrit
unedo
nnée)ou
0(le
parent
aferm
éle
tube
).2.
Lepa
rent
peut
aussie
nvoyer
desd
onné
esd’un
etaillevaria
ble(par
exem
ple,
unechaîne
decarac-
tères).D
ansc
ecas,lepa
rent
commen
cepa
renv
oyer
unentie
rcon
tena
ntla
taillede
lado
nnée
qu’il
s’app
rête
àenvoyer,
puis
ilenvoie
cettedo
nnée.L
’enfan
tcommen
cedo
ncpa
rfaire
unprem
ier
read
desizeof(int)po
urdé
term
iner
latailledu
read
qu’il
doit
faire
justeap
rès,
puis
ilfait
le-ditread
.
TEL
ECOM
SudP
aris—
Den
isCon
an,M
ichelSimaticet
Fran
çoisTr
ahay
—Av
ril20
18—
mod
uleC
SC45
08/M
286
Com
mun
ications
inter-processus
2Com
mun
ications
àl’a
idede
tube
s
NB
:si
lestailles
sont
faibles(que
lque
sdizaines,vo
irecentaine
sd’octets),
ilestplus
perfo
r-man
td’ap
plique
rla
métho
de1en
écriv
ant/lisan
tsystém
atique
mentle
nombremax
imum
d’oc-
tets.C
ertes,on
envoie
desoctets
pour
rien,
maison
écon
omise
des2ap
pelssystèm
epa
récha
nge
d’inform
ationentrele
parent
etl’e
nfan
t:o
nestplus
perfo
rman
t.3.
Lepa
rent
etl’e
nfan
tpe
uventutiliserlesfonc
tions
d’écrit
ure/lecturede
lalib
C.P
arexem
ple,
lepa
rent
fait
desfputspe
ndan
tqu
el’e
nfan
tfaitde
sfgets.
L’im
plém
entatio
nde
ces3métho
desestlaiss
éeàtit
red’exercice.
#12
' &
$ %
2.3Tu
besno
mmés
�Créatio
nparlaprim
itive
mknodqu
ipermet
decréerles
fichierss
pécia
uxou
par
mkfifo
�mknodétait
préalab
lementr
éservéeau
super-u
tilisa
teur
�Ouverture
possible
parles
processusc
onnaiss
antleno
mdu
tube
�Pa
rdéfaut,ou
vertu
rebloq
uante:lecteurse
técriva
inss
’atte
ndent→
synchron
isatio
n
�Su
ppressiondu
tube
lorsque
explicitementd
emandé
etpasd
’ouverture
encours
�Si
supp
ressionalo
rsqu
’ilexistedeslecteurse
técriva
ins,fonctio
nnem
entc
omme
unfichier
ordinaire
�Prim
itivesc
orrespon
dantes
:intmknod(constchar
*nom_fich,
mode_t
mode,dev_tn_periph)
IMod
e=
S_IFIFO(ou0010000)
plus
lesdroits
surles
troisdernier
soctets
intmkfifo(const
char
*nom_fich,
mode_t
mode)
IMod
e=
droits
Remarque:les
tubesno
mmés
ontlongtemps
étéle
moyen
privilégiépour
commun
iquerentre
plusiseurs
processus.
Cette
méthode
tend
àdisparaître
auprofi
tdel’u
tilisationde
files
demessage.L
aprésente
Section
n’estm
aintenue
quepour
desraison
shistoriques.
Lemod
eindiqu
elespe
rmiss
ions
d’accès.
Ces
perm
issions
sont
mod
ifiéespa
rla
valeur
d’umaskdu
pro-
cessus
:les
perm
issions
d’accèseff
ectiv
ementad
optées
sont
(mode&NOT(umask)
).L’open
d’un
tube
nomméen
lecture(respe
ctivem
entécrit
ure)
estbloq
uant
jusqu’àce
qu’un
écriv
ain
(respe
ctivem
entun
lecteu
r)ou
vrele
tube
enécrit
ure(respe
ctivem
entlecture)
àl’a
utre
extrém
ité.
Dan
sl’e
xemplesuivan
t,le
serveu
r(fichierexemple_mkfifo_serveur.c
)attend
desrequ
êtes
(dela
part
declientsdécrits
ci-après)surle
tube
nommé./client-serveur
.Noter
quee
xemple_mkfifo_serveur.cou
vrelelet
ubeq
u’ilcrée
enlecture/écrit
urea
ulie
ud’un
electure
simplede
sortequ
e:
•Ilne
sebloq
uepa
sau
mom
entdu
open
enattend
antqu
’unprocessusou
vrele
tube
enécrit
ure
•Si
nous
ouvron
sle
tube
enlectureseule,
àchaq
uefois
quele
client
quis’e
stconn
ecté
seterm
ine,
lalecturedu
tube
nomméva
écho
uercarle
noyaudé
tecteun
eferm
eturede
fichier.E
nde
man
dant
l’ouv
erture
d’un
tube
enlectureet
enecrit
ure,
nous
évito
nsce
genrede
situa
tion,
carilrestetoujou
rsau
moins
unde
scrip
teur
ouvert
surla
sortie.
/***
****
****
****
****
****
****
*//*
exem
ple_
mkfi
fo_s
erve
ur.c
*//*
****
****
****
****
****
****
***/
#inc
lude
<sys
/typ
es.h
>#i
nclu
de<u
nist
d.h>
#inc
lude
<sys
/wai
t.h>
#inc
lude
<sys
/sta
t.h>
#inc
lude
<fcn
tl.h
>#i
nclu
de<s
tdio
.h>
TEL
ECOM
SudP
aris—
Den
isCon
an,M
ichelSimaticet
Fran
çoisTr
ahay
—Av
ril20
18—
mod
uleC
SC45
08/M
287
Com
mun
ications
inter-processus
2Com
mun
ications
àl’a
idede
tube
s
#inc
lude
<std
lib.
h>#i
nclu
de<s
trin
g.h>
#inc
lude
<err
no.h
>
#def
ine
TAIL
LEMS
G12
8#d
efin
eNO
MTUB
ESER
VEUR
"./c
lien
t-se
rveu
r"
void
trai
terR
eque
te(c
har
*req
uete
){ch
arre
pons
e[TA
ILLE
MSG]
;ch
arty
pReq
uete
[128
];ch
arno
mTub
eCli
ent[
128]
;in
tfd
W;in
tnb
Writ
e;
/*An
alys
ede
lare
quet
e*/
/*NB
:ss
canf
pres
ente
l’in
conv
enie
ntqu
esi
lecl
ient
envo
ie*/
/*un
ech
aine
deca
ract
ere
cont
enan
tun
espa
ce(p
arex
empl
e:
*//*
"PIN
GPI
NG")
lach
aine
lue
s’ar
rete
aupr
emie
res
pace
!*/
/*fg
ets
sera
itpr
obab
leme
ntme
ille
ur.
*/ss
canf
(req
uete
,"%s
\n%s
",ty
pReq
uete
,no
mTub
eCli
ent)
;/*
Prep
arat
ion
dela
repo
nse
*/sp
rint
f(re
pons
e,"%
s",
"PON
G");
/*Af
fich
age
*/pr
intf
("Se
rveu
ra
recu
\"%s
\"et
repo
nd\"
%s\"
sur
letu
beno
mme
\"%s
\"\n
",ty
pReq
uete
,re
pons
e,no
mTub
eCli
ent
);/*
Répo
nse
sur
letu
beno
mmé
ducl
ient
*/fd
W=
open
(nom
Tube
Clie
nt,
O_WR
ONLY
);if
(fdW
==-1
){
perr
or("
open
(nom
Tube
Clie
nt)"
);ex
it(E
XIT_
FAIL
URE)
;} nb
Writ
e=
writ
e(fd
W,re
pons
e,si
zeof
(rep
onse
));
if(n
bWri
te<
size
of(r
epon
se))
{pe
rror
("pb
ecri
ture
sur
tube
nomm
e");
} /*Da
nsce
tte
appl
icat
ion,
lecl
ient
nere
nvoi
epa
sde
requ
ête
ulté
rieu
re*/
/*né
cess
itan
tun
eré
pons
e==
>On
peut
ferm
erce
tube
*/cl
ose(
fdW)
;} in
tma
in()
{ch
arre
quet
e[TA
ILLE
MSG]
;in
tfd
R;in
tnb
Read
;
/*Cr
éati
ondu
tube
nomm
écô
tése
rveu
r(q
uipe
rmet
tra
les
comm
unic
atio
ns*/
/*cl
ient
-ser
veur
)*/
if(m
kfif
o(NO
MTUB
ESER
VEUR
,S_
IRUS
R|S_
IWUS
R)<
0){
if(e
rrno
!=EE
XIST
){
perr
or("
mkfi
fo(t
ube
nomm
ése
rveu
r");
exit
(EXI
T_FA
ILUR
E);
} else
{pr
intf
("%s
exis
tede
ja:
onsu
ppos
equ
ec’
est
unpi
peno
mme\
n",
NOMT
UBES
ERVE
UR);
prin
tf("
etqu
’on
peut
cont
inue
rle
prog
ramm
esa
nspr
oble
me\n
");
puts
("")
;}
} /*Ou
vert
ure
dece
tube
nomm
é*/
fdR
=op
en(N
OMTU
BESE
RVEU
R,O_
RDWR
);if
(fdR
==-1
){
perr
or("
open
(tub
eno
mmé)
");
exit
(EXI
T_FA
ILUR
E);
} /*At
tent
ede
requ
êtes
*/do
{ nbRe
ad=
read
(fdR
,re
quet
e,si
zeof
(req
uete
));
if(n
bRea
d!=
size
of(r
eque
te))
{pe
rror
("re
adsu
rtu
beno
mme
NOK"
);re
turn
EXIT
_FAI
LURE
;} /*
Ontr
aite
lare
quêt
e*/
trai
terR
eque
te(r
eque
te);
}whi
le(1
);}
Leclient
exemple_mkfifo_client.cenvoie
auserveu
rdes
requ
êtes
contenan
tlemessage
PING
etle
nom
dutube
(./serveur-client.<numéroProcessusClient>)
surlequ
elle
client
attend
larépo
nsePONG
./*
****
****
****
****
****
****
**/
/*ex
empl
e_mk
fifo
_cli
ent.
c*/
TEL
ECOM
SudP
aris—
Den
isCon
an,M
ichelSimaticet
Fran
çoisTr
ahay
—Av
ril20
18—
mod
uleC
SC45
08/M
288
Com
mun
ications
inter-processus
/***
****
****
****
****
****
****
/
#inc
lude
<sys
/typ
es.h
>#i
nclu
de<u
nist
d.h>
#inc
lude
<sys
/wai
t.h>
#inc
lude
<sys
/sta
t.h>
#inc
lude
<fcn
tl.h
>#i
nclu
de<s
tdio
.h>
#inc
lude
<std
lib.
h>#i
nclu
de<s
trin
g.h>
#inc
lude
<err
no.h
>
#def
ine
TAIL
LEMS
G12
8#d
efin
eNO
MTUB
ESER
VEUR
"./c
lien
t-se
rveu
r"
int
main
(){
char
nomT
ubeC
lien
t[12
8];
char
requ
ete[
TAIL
LEMS
G];
char
repo
nse[
TAIL
LEMS
G];
int
fdW,
fdR;
int
nbRe
ad,
nbWr
ite;
/*Pr
épar
atio
nde
nomT
ubeC
lien
t(t
ube
qui
perm
ettr
ale
sco
mmun
icat
ions
*//*
serv
eur-
clie
nt)
*/sp
rint
f(no
mTub
eCli
ent,
"/tm
p/se
rveu
r-cl
ient
.%d"
,ge
tpid
());
/*Cr
éati
ondu
tube
nomm
équ
ipe
rmet
tra
ause
rveu
rde
repo
ndre
aucl
ient
*/if
(mkf
ifo(
nomT
ubeC
lien
t,S_
IRUS
R|S_
IWUS
R)<
0){
if(e
rrno
!=EE
XIST
){
perr
or("
mkfi
fo(t
ube
nomm
écl
ient
");
exit
(EXI
T_FA
ILUR
E);
} else
{pr
intf
("%s
exis
tede
ja:
onsu
ppos
equ
ec’
est
unpi
peno
mme\
n",
nomT
ubeC
lien
t);
prin
tf("
etqu
’on
peut
cont
inue
rle
prog
ramm
esa
nspr
oble
me\n
");
puts
("")
;}
} /*Ou
vert
ure
dece
tube
*/fd
R=
open
(nom
Tube
Clie
nt,
O_RD
WR);
if(f
dR==
-1)
{pe
rror
("op
en(t
ube
nomm
é)")
;ex
it(E
XIT_
FAIL
URE)
;} /*
Envo
ide
lare
quêt
eve
rsle
serv
eur
(la
requ
ete
cont
ient
leno
mdu
*//*
tube
sur
lequ
ella
repo
nse
est
atte
ndue
)*/
spri
ntf(
requ
ete,
"%s\
n%s"
,"P
ING"
,no
mTub
eCli
ent)
;fd
W=
open
(NOM
TUBE
SERV
EUR,
O_WR
ONLY
);if
(fdW
==-1
){
perr
or("
open
(NOM
TUBE
SERV
EUR)
");
exit
(EXI
T_FA
ILUR
E);
} nbWr
ite
=wr
ite(
fdW,
requ
ete,
size
of(r
eque
te))
;if
(nbW
rite
<si
zeof
(req
uete
)){
perr
or("
pbec
ritu
resu
rpi
peno
mme"
);} /*
Onn’
aura
pas
d’au
tres
mess
ages
àen
voye
rau
serv
eur.
Onpe
utdo
nc*/
/*fe
rmer
letu
beco
teem
issi
on*/
clos
e(fd
W);
/*On
lit
laré
pons
eet
onl’
affi
che
*/nb
Read
=re
ad(f
dR,
repo
nse,
size
of(r
epon
se))
;if
(nbR
ead
!=si
zeof
(rep
onse
)){
prin
tf("
Comm
unic
atio
nav
ecle
serv
eur
prob
able
ment
romp
ue\n
");
exit
(EXI
T_FA
ILUR
E);
} prin
tf("
Repo
nse
duse
rveu
r=
\"%s
\"\n
",re
pons
e);
/*On
ferm
ele
tube
côté
réce
ptio
n*/
clos
e(fd
R);
/*On
détr
uit
letu
beno
mmé
ducl
ient
(pui
sque
cetu
beno
mmé
nese
rvir
a*/
/*pl
usja
mais
.*/
if(u
nlin
k(no
mTub
eCli
ent)
<0)
{pe
rror
("un
link
");
exit
(EXI
T_FA
ILUR
E);
} retu
rnEX
IT_S
UCCE
SS;
}
Dan
scetexem
ple,
onado
ncun
tube
nommépo
urlescommun
ications
client-serveur
etun
tube
nommé
(par
client)po
urlescommun
ications
serveu
r-client.
TEL
ECOM
SudP
aris—
Den
isCon
an,M
ichelSimaticet
Fran
çoisTr
ahay
—Av
ril20
18—
mod
uleC
SC45
08/M
289
Com
mun
ications
inter-processus
3Com
mun
icationàl’a
idede
sIP
CPO
SIX
#13
' &
$ %
3Co
mmun
icationàl’aidedesIPCPO
SIX
3.1
InterP
rocess
Commun
icatio
nPO
SIX..........................................14
3.3
IPCSy
stem
Vversu
sPO
SIXIPC.............................................1
63.3
Files
demessages.
...........................................................1
63.4
Mém
oire
parta
gée.
...........................................................18
3.5
Sémaphores..................................................................20
#14
' &
$ %
3.1InterProcessCo
mmun
icationPO
SIX
�Troist
ypes
d’ob
jetss
ystème:
�Files
demessages:
échang
ede
flots
dedo
nnéesf
ormatées
�Mém
oire
parta
gée
�Sé
maphores:
outilsd
esynchron
isatio
n
�Ut
ilisationd’un
eclé
pour
identifi
erles
objet
ssystème
�Ch
aînede
caractèrede
laform
e/nom_de_la_cle
Leterm
e«IP
C»recouv
retroism
écan
ismes
decommun
icationintrod
uits
àpa
rtirdu
System
V:les
files
demessages,
lamém
oire
partag
éeet
lessémap
hores.
Ces
mécan
ismes
utilisent
unsystèm
ede
fichier
virtue
lpe
rmettant
lape
rsist
ance.C
haqu
etype
d’IP
Cestdo
ncaccessible
depu
isle
systèm
ede
fichiers:
•Le
sob
jets
detype
mém
oire
partag
éesont
stockésda
ns/dev/shm/
•Le
ssém
apho
resn
ommés
sont
stockésd
ans/
dev/shm/
sous
laform
esem.X
(oùXestlacléd
usémap
hore)
•Le
sfiles
demessage
sont
accessiblesviaun
mon
tage
dans
lesystèm
ede
fichier
(par
exem
ple:m
ount
-tmqueue
none
/dev/mqueue)
TEL
ECOM
SudP
aris—
Den
isCon
an,M
ichelSimaticet
Fran
çoisTr
ahay
—Av
ril20
18—
mod
uleC
SC45
08/M
290
Com
mun
ications
inter-processus
3Com
mun
icationàl’a
idede
sIP
CPO
SIX
LesI
PCné
cessite
ntun
eclépe
rmettant
d’identifi
erl’o
bjet
IPC.U
nemêm
eclédo
itdo
ncêtre
fourniepa
rtous
lesprocessusdé
siran
taccéderàl’o
bjet.U
necléestun
echaîne
decaractèrecommen
çant
par“/”et
necompo
rtan
tpa
sle
caractère“/”aille
urs.
Ilexist
edes
form
esplus
évolué
esde
commun
icationentreles
processusd
’une
mêm
emachine
.Cito
nsD-Bus
(http://dbus.freedesktop.org
),ICE(http://www.zeroc.com),Z
eroMQ(http://www.zeromq.org
)...Vu
lesfonc
tionn
alité
soff
ertesen
géné
ralpa
rceslib
rairies
(gestio
nde
cyclede
vie,
gestion
depu
blication-
souscriptio
n...),ceslib
rairies
s’app
arentent
plus
àde
sintergiciels
(middlew
are)
decommun
icationqu
’àde
smécan
ismes
d’IP
C.Ils
seront
donc
plutôt
étud
iésen
CSC
5002
(Intergicielspo
urap
plications
répa
rties).
#15
' &
$ %
3.2IPCSy
stem
Vversus
POSIX
IPC
�Sy
stem
V=
unedesp
remièr
esversion
smajeuresd
’Unix.
Aservid
ebase
pour
l’élab
orationdu
standard
POSIX
�PO
SIX=
Porta
bleOperatin
gSy
stem
Interfa
ce(défini
parIEE
E)
�Sy
stem
Vet
POSIXdéfin
issentles
IPCde
manièr
esdiffé
rentes
�Pe
ndantlon
gtem
ps,implantatio
nincomplètedesIPC
POSIX
surc
ertainss
ystèmes
�LesIPC
System
Von
tperdu
répend
antlon
gtem
ps
�Au
jourd’hu
iIPC
POSIXim
plantées
corre
ctem
entd
ansL
inux
etla
plup
artd
esUn
ix
LesIP
CPO
SIX
sont
implan
tées
correctementda
nsla
plup
artde
sUnixactuels.
Toutefois,
Mac
OSX
n’off
repa
sun
eim
plan
tatio
ncomplètedu
stan
dard
(lessémap
horesan
onym
esne
sont
pasim
plém
entées).
#16
' &
$ %
3.3Filesde
messages
�Créatio
n/destruction:
mqd_tmq_open(constchar
*name,
intoflag,
mode_t
mode,struct
mq_attr*attr)
intmq_unlink(mqd_tmq)
�Ouverture
/ferm
etured’un
efiledéjà
créée:
mqd_tmq_open(constchar
*name,
intoflag)
intmq_close(mqd_t
mq)
�Ém
ission/réception(bloqu
ante
sifileplein
eet
ofla
gne
contien
tpas
O_NO
NBLO
CK):
intmq_send(mqd_tmqdes,
constchar
*msg_ptr,size_t
msg_len,
unsigned
msg_prio)
ssize_tmq_receive(mqd_t
mqdes,
char
*msg_ptr,size_t
msg_len,
unsigned
*msg_prio)
TEL
ECOM
SudP
aris—
Den
isCon
an,M
ichelSimaticet
Fran
çoisTr
ahay
—Av
ril20
18—
mod
uleC
SC45
08/M
291
Com
mun
ications
inter-processus
3Com
mun
icationàl’a
idede
sIP
CPO
SIX
Lorsqu
’unprocessuse
nvoieu
nmessage
dans
unefi
le,celui-ciest
placép
arordred
eprio
ritéd
anslafile,les
messagesd
emêm
epriorit
éétan
tclassés
paro
rdre
d’arriv
ée.L
orsqu’un
processusd
ésire
recevoirun
message,
illit
leprem
iermessage
dispon
ible
(leplus
priorit
aire).Cecis
etrad
uitpa
rcinq
opérations.
mq_openpe
rmet
d’ob
tenirun
identifi
antd
efilede
messagesàpa
rtird’un
ecléet
desdroits
d’accèset
les
cond
ition
sdecréatio
nassociées.Le
quatriè
mepa
ramètre
demq_openpe
rmet
despécifier
lesa
ttrib
uts(
taille
max
imalede
smessages,
nombremax
imal
demessagesda
nsla
file,
etc.)de
lafilede
message.
mq_close
perm
etde
ferm
erun
efilede
message.C
haqu
eprocessusu
tilisa
ntla
filede
message
doitap
peler
cettefonc
tion.
mq_unlinkpe
rmet
dedé
truire
défin
itivementun
efilede
message.
mq_sendpe
rmet
d’envoyerun
message
dans
lafileidentifi
éepa
rle
prem
ierpa
ramètre
etdo
ntl’a
dresse
etla
taillesont
respectiv
ementlesdeux
ièmeet
troisiè
mepa
ramètres.Le
dernierpa
ramètre
défin
ilapriorit
édu
message.
mq_receive
deman
dela
réceptiond’un
message
àpa
rtirde
l’ide
ntifian
tde
filede
messages.
Cemessage
sera
placéà
l’adresse
indiqu
éepa
rled
euxièm
eparam
ètre
etne
pasd
épasserlatailleind
iqué
epar
letroisiè
me.
Silequ
atriè
mepa
ramètre
n’estp
asNULL
,mq_receiveyaff
ecte
lapriorit
éassociée
aumessage
lors
del’a
ppel
àmq_send.
Àmoins
quele
drap
eauO_NONBLOCK
nesoitpa
ssélors
del’a
ppel
àmq_open,
laréceptionde
smessagese
sttoujou
rsbloq
uante;
l’env
oin’estb
loqu
antq
uequ
andla
filede
message
estp
leine.Po
urde
senv
ois/réceptions
nonbloq
uants,
onpe
ututiliserlesfonc
tions
mq_timedsend
etmq_timedreceive:
ssize_tmq_timedsend(mqd_t
mqdes,
constchar
*msg_ptr,size_t
msg_len,
unsigned
msg_prio,conststruct
timespec
*abs_timeout)
ssize_tmq_timedreceive(mqd_tmqdes,
char
*msg_ptr,size_t
msg_len,
unsigned
*msg_prio,
conststruct
timespec
*abs_timeout);
Ces
fonc
tions
pren
nent
unpa
ramètre
supp
lémentaire
detype
struct
timespec
correspo
ndan
tàla
date
jusqu’àlaqu
elle
lafonctio
ndo
itse
bloq
uers
iauc
unmessage
n’estr
eçu(pou
rmq_timedreceive
)ousila
file
estpleine
(pou
rmq_timedsend
).Ilesté
galementp
ossib
lede
traiterles
messagesr
eçude
puisun
efilede
message
deman
ière
évén
ementie
lleen
utilisant
:intmq_notify(mqd_tmqdes,
conststruct
sigevent
*sevp)
Lorsqu
’un
message
est
reçu
dans
lafile
mqdes,
lafonc
tion
sevp->sigev_notify_function
est
appe
lée
(sisevp->sigev_notify
vaut
SIGEV_THREAD
)ou
lesig
nalsevp->sigev_signo
est
émis
(si
sevp->sigev_notify
vaut
SIGEV_SIGNAL
).Un
exem
pled’utilisatio
nde
mq_
notify
estdispon
ible
dans
msg_queue/example_msg_server_notify.c.
Voici
unexem
ple
decommun
ication
àl’a
ide
defiles
demessages
Posix
(fichiers
msg_queue/example_msg_server.c
etmsg_queue/example_msg_client.c
):
/***
****
****
****
****
****
**/
/*ex
ampl
e_ms
g_se
rver
.c*/
/***
****
****
****
****
****
**/
/*Se
rver
proc
ess.
Run
itwi
th*
$ex
ampl
e_ms
g_se
rver
/mes
sage
_que
ue_n
ame
&*
Resu
lt:
prin
tsth
ecl
ient
s’re
ques
ts*
Stop
swh
ena
clie
ntse
nds
ame
ssag
est
arti
ngwi
th@
*/ #inc
lude
<std
io.h
>#i
nclu
de<s
tdli
b.h>
#inc
lude
<uni
std.
h>#i
nclu
de<s
trin
g.h>
#inc
lude
<mqu
eue.
h>
#inc
lude
"exa
mple
_msg
.h"
int
main
(int
argc
,ch
ar**
argv
){
mqd_
tre
ques
ts,
resp
onse
s;ch
arke
y_re
q[80
];ch
arke
y_re
p[80
];
stru
ctms
gre
q,re
p;
if(a
rgc
!=2)
{fp
rint
f(st
derr
,"U
sage
:%s
/mes
sage
_que
ue_n
ame\
n",
argv
[0])
;ex
it(E
XIT_
FAIL
URE)
;} sp
rint
f(ke
y_re
q,"%
s_re
q",
argv
[1])
;sp
rint
f(ke
y_re
p,"%
s_re
p",
argv
[1])
;
TEL
ECOM
SudP
aris—
Den
isCon
an,M
ichelSimaticet
Fran
çoisTr
ahay
—Av
ril20
18—
mod
uleC
SC45
08/M
292
Com
mun
ications
inter-processus
3Com
mun
icationàl’a
idede
sIP
CPO
SIX
stru
ctmq
_att
rat
tr;
attr
.mq_
flag
s=
0;at
tr.m
q_ma
xmsg
=10
;/*
size
ofth
eme
ssag
equ
eue
*/at
tr.m
q_cu
rmsg
s=
0;at
tr.m
q_ms
gsiz
e=
size
of(s
truc
tms
g);
/*si
zeof
one
mess
age
*/
/*me
ssag
equ
eue
for
inco
ming
requ
ests
*/re
ques
ts=
mq_o
pen(
key_
req,
O_CR
EAT|
O_RD
WR,
S_IR
USR|
S_IW
USR,
&att
r);
if(r
eque
sts
<0)
{pe
rror
("Se
rver
:mq
_ope
n");
exit
(EXI
T_FA
ILUR
E);
} /*me
ssag
equ
eue
for
outg
oing
resp
onse
s*/
resp
onse
s=
mq_o
pen(
key_
rep,
O_CR
EAT|
O_RD
WR,
S_IR
WXU,
&att
r);
if(r
espo
nses
<0)
{pe
rror
("Se
rver
:mq
_ope
n");
exit
(EXI
T_FA
ILUR
E);
} for
(;;)
{/*
wait
for
any
requ
ests
*/in
tle
n=
mq_r
ecei
ve(r
eque
sts,
(cha
r*)&
req,
size
of(r
eq),
NULL
);if
(len
<0)
{pe
rror
("Se
rver
:mq
_rec
eive
");
exit
(EXI
T_FA
ILUR
E);
} prin
tf("
Serv
er:
rece
ived
mess
age:
%s\n
",re
q.te
xt);
if(r
eq.t
ext[
0]==
’@’)
{/*
ask
tote
rmin
ate
the
serv
er*/
brea
k;} /*
proc
ess
the
requ
est
*/st
rcpy
(rep
.tex
t,re
q.te
xt);
/*se
ndth
ere
spon
seto
the
clie
nt*/
len
=mq
_sen
d(re
spon
ses,
(cha
r*)&
rep,
GET_
SIZE
(&re
p),
0);
if(l
en<
0){
perr
or("
Serv
er:
mq_s
end"
);ex
it(E
XIT_
FAIL
URE)
;} pr
intf
("Se
rver
:me
ssag
ese
nt:
%s\n
",re
p.te
xt);
} strc
py(r
ep.t
ext,
"Ter
mina
ting
the
serv
er")
;
if(
mq_s
end(
resp
onse
s,(c
har*
)&re
p,GE
T_SI
ZE(&
rep)
,0)
<0)
{pe
rror
("Se
rveu
r:
mq_s
end"
);ex
it(E
XIT_
FAIL
URE)
;} /*
wait
toma
kesu
reth
atcl
ient
rece
ived
the
serv
er’s
answ
er*/
slee
p(2)
;
/*cl
ose
the
mess
age
queu
es*/
if(
(mq_
clos
e(re
ques
ts)
<0)
||(m
q_cl
ose(
resp
onse
s)<
0))
{pe
rror
("Se
rveu
r:
mq_c
lose
");
exit
(EXI
T_FA
ILUR
E);
} /*de
lete
the
mess
age
queu
es*/
if((
mq_u
nlin
k(ke
y_re
q)<
0)||
(mq_
unli
nk(k
ey_r
ep)
<0)
){
perr
or("
Serv
eur
:mq
_unl
ink"
);ex
it(E
XIT_
FAIL
URE)
;} re
turn
EXIT
_SUC
CESS
;} /*
****
****
****
****
****
***/
/*ex
ampl
e_ms
g_cl
ient
.c*/
/***
****
****
****
****
****
*/
/*Cl
ient
proc
ess.
Run
itwi
th*
$ex
ampl
e_ms
g_cl
ient
/mes
sage
_que
ue_n
ame
text
_to_
send
*Re
sult
:pr
int
the
mess
age
rece
ived
from
the
serv
er*/ #inc
lude
<std
io.h
>#i
nclu
de<s
tdli
b.h>
#inc
lude
<uni
std.
h>
TEL
ECOM
SudP
aris—
Den
isCon
an,M
ichelSimaticet
Fran
çoisTr
ahay
—Av
ril20
18—
mod
uleC
SC45
08/M
293
Com
mun
ications
inter-processus
3Com
mun
icationàl’a
idede
sIP
CPO
SIX
#inc
lude
<str
ing.
h>#i
nclu
de<m
queu
e.h>
#inc
lude
"exa
mple
_msg
.h"
int
main
(int
argc
,ch
ar**
argv
){
mqd_
tre
ques
ts,
resp
onse
s;ch
arke
y_re
q[80
];ch
arke
y_re
p[80
];
stru
ctms
gre
p,re
q;in
tle
n;
if(a
rgc
!=3)
{pr
intf
("Cl
ient
:Us
age
:%s
/mes
sage
_que
ue_n
ame
text
_to_
send
\n",
argv
[0])
;ex
it(E
XIT_
FAIL
URE)
;} sp
rint
f(ke
y_re
q,"%
s_re
q",
argv
[1])
;sp
rint
f(ke
y_re
p,"%
s_re
p",
argv
[1])
;
/*me
ssag
equ
eue
for
send
ing
requ
ests
*/re
ques
ts=
mq_o
pen(
key_
req,
O_WR
ONLY
);if
(req
uest
s<
0){
perr
or("
Clie
nt:
mq_o
pen"
);ex
it(E
XIT_
FAIL
URE)
;} /*
mess
age
queu
efo
rre
ceiv
ing
resp
onse
s*/
resp
onse
s=
mq_o
pen(
key_
rep,
O_RD
ONLY
);if
(req
uest
s<
0){
perr
or("
Clie
nt:
mq_o
pen"
);ex
it(E
XIT_
FAIL
URE)
;} /*
prep
are
the
requ
est
tose
nd*/
strc
py(r
eq.t
ext,
argv
[2])
;/*
send
the
requ
est
*/le
n=
mq_s
end(
requ
ests
,(c
har*
)&re
q,GE
T_SI
ZE(&
req)
,1)
;if
(len
<0)
{pe
rror
("Cl
ient
:mq
_sen
d");
exit
(EXI
T_FA
ILUR
E);
} prin
tf("
Clie
nt:
mess
age
sent
:%s
\n",
req.
text
);
/*Wa
itfo
ra
resp
onse
s*/
len
=mq
_rec
eive
(res
pons
es,
(cha
r*)&
rep,
size
of(r
ep),
NULL
);if
(len
<0)
{pe
rror
("Cl
ient
:mq
_rec
eive
");
exit
(EXI
T_FA
ILUR
E);
} prin
tf("
Clie
nt:
mess
age
rece
ived
:%s
\n",
rep.
text
);
/*cl
ose
the
mess
age
queu
es*/
if((
mq_c
lose
(req
uest
s)<
0)||
(mq_
clos
e(re
spon
ses)
<0)
){pe
rror
("Se
rveu
r:
mq_c
lose
");
exit
(EXI
T_FA
ILUR
E);
} retu
rnEX
IT_S
UCCE
SS;
}
Un
autre
exem
ple
estégalem
entdispon
iblesda
nsmsg_queue/example_msg_server_pingpong.c
etmsg_queue/example_msg_client_pingpong.c.
TEL
ECOM
SudP
aris—
Den
isCon
an,M
ichelSimaticet
Fran
çoisTr
ahay
—Av
ril20
18—
mod
uleC
SC45
08/M
294
Com
mun
ications
inter-processus
3Com
mun
icationàl’a
idede
sIP
CPO
SIX
#17
' &
$ %
3.4Mém
oire
partagée
�Créatio
n:
int
shm_
open
(con
stch
ar*n
ame,
int
ofla
g,mo
de_t
mode
)
�Créatio
n(o
flag
contien
tO_
CREA
T)d’un
objetde
taillenu
lle�
Retour
=descrip
teur
defichier
�Ch
angerlataillede
l’objet
mém
oire
partagée
:in
tft
runc
ate(
int
fd,
off_
tle
ngth
)
�Attachem
ent:
void
*mma
p(vo
id*a
ddr,
size
_tle
ngth
,in
tpr
ot,
int
flag
s,in
tfd
,of
f_t
offs
et)
�ad
dr=
0→
choixde
l’adresse
parlesystèm
ed’exploitatio
n�
Unemêm
erégion
peut
être
attachée
plusieu
rsfoisàdesadresses
diffé
rentes
�pr
ot:d
roitd’accès(le
cture/écriture/exécution)
�fl
ags:M
AP_S
HARE
Dpo
urpartager
lazone
mém
oire
avec
unautreprocessus
�fd
:descripteur
defichier
retourné
pars
hm_o
pen
�of
fset
:emplacem
entde
départ
dela
zone
dans
lamém
oire
partagée
�Re
tour
:adresse
d’attachem
enteff
ectiv
eou
MAP_
FAIL
ED
�Détachement:
int
munm
ap(v
oid
*add
r,si
ze_t
leng
th)
#18
' &
$ %
�Ferm
eture:
int
clos
e(in
tfd
)
�Destructio
n:
int
shm_
unli
nk(c
onst
char
*nam
e)
Unsegm
entde
mém
oire
partag
éeestun
morceau
demém
oire
quip
eutêtre
commun
àplusieurspro-
cessus
:l’espacemém
oire
virtue
lest
ainsip
artagé.T
oute
mod
ificatio
neff
ectuée
parl’u
nde
sprocessuspe
utau
tomatique
mentê
trec
onnu
edes
autres
processusp
artagean
tcem
orceau
demém
oire.T
roisétap
esjalonn
ent
l’utilisa
tionde
lamém
oire
partag
ée:
•shm_open
perm
etd’ob
teniru
nidentifi
anta
ssociéau
segm
entd
emém
oire
partag
éedo
ntla
cléestn
ame.
Lepa
ramètre
oflagprécise
lescond
ition
sde
créatio
n.Le
dernierpa
ramètre
(mode)
précise
lesdroits
d’accès.Une
foisle
segm
entd
emém
oire
partag
écréé,ilsecompo
rtecommeun
fichier
classiq
ueet
peut
être
man
ipuléàpa
rtir
dude
scrip
teur
defichier
fd.
•Lo
rsde
sacréatio
n,le
segm
entd
emém
oire
partag
éestd
etaillenu
lle.L
eprog
rammepe
ut,p
arla
suite
,chan
gersa
tailleàl’a
idede
lafonc
tionftruncate.
TEL
ECOM
SudP
aris—
Den
isCon
an,M
ichelSimaticet
Fran
çoisTr
ahay
—Av
ril20
18—
mod
uleC
SC45
08/M
295
Com
mun
ications
inter-processus
3Com
mun
icationàl’a
idede
sIP
CPO
SIX
•mmap
perm
etd’attacher
(c’est-à-dire
d’insérer)
lesegm
entd
emém
oire
partag
édan
sl’espaced
’adressage
virtue
lduprocessusen
précisa
ntle
descrip
teur
defichier
dusegm
entde
mém
oire
partag
é,l’a
dresse
préférée
oùattacher
lesegm
ent(
sila
valeur
NULL
estfou
rnie,les
ystèmep
lace
lesegm
entd
anslep
remier
espa
celib
resuffisammentgran
d),lesdroits
d’accès(une
combina
ison
dePROT_EXEC,
PROT_WRITE
,PROT_READet
PROT_NONE)
etun
drap
eaupe
rmettant
—entreau
tres
—de
spécifier
quele
segm
ent
demém
oire
estdestinéàêtre
partag
éentreplusieursprocessus(MAP_SHARED).E
nretour,laprim
itive
retourne
l’adresse,d
ansl’e
spaced’ad
ressag
evirtue
lduprocessus,
oùle
segm
entaétéattaché.
Lors
d’un
fork
,l’e
nfan
thérit
ede
lamém
oire
partag
ée.Lo
rsd’un
exec
oud’un
exit
,lessegm
ents
mém
oire
duprocessussont
automatiquementdé
tachés.
Laterm
inaisond’un
prog
rammeutilisant
unsegm
entd
emém
oire
partag
éese
décompo
seen
troisé
tape
s:
•munmap
détachele
segm
entde
mém
oire
partag
é
•closeferm
ele
segm
entde
mém
oire
partag
é
•shm_unlink
supp
rimele
segm
entde
mém
oire
partag
é.Une
fois
lesegm
entsupp
rimé,
plus
aucu
npro-
cessus
nepe
utl’u
tilise
r.
Voici
unexem
ple
decommun
ication
àl’a
ide
desegm
ents
demém
oire
partag
éeIP
C(fichiers
exemple_shm.c:
/***
****
****
****
****
****
**/
/*ex
empl
e_sh
m.c
*//*
****
****
****
****
****
****
/
#inc
lude
<std
io.h
>#i
nclu
de<s
tdli
b.h>
#inc
lude
<uni
std.
h>#i
nclu
de<s
ys/t
ypes
.h>
#inc
lude
<sys
/mma
n.h>
#inc
lude
<sys
/sta
t.h>
/*Fo
rmo
deco
nsta
nts
*/#i
nclu
de<f
cntl
.h>
/*Fo
rO_
*co
nsta
nts
*/#i
nclu
de<e
rrno
.h>
#inc
lude
<tim
e.h>
#inc
lude
<sem
apho
re.h
>#i
nclu
de<s
tdin
t.h>
/*ke
yth
atid
enti
fies
the
shar
edme
mory
*/#d
efin
eSH
M_KE
Y"/
plop
"
#def
ine
NB_E
LEME
NTS
10
type
def
stru
ct{
int
tab[
NB_E
LEME
NTS]
;}
shar
ed_m
emor
y;
shar
ed_m
emor
y*b
uffe
r;
#def
ine
SHM_
SIZE
size
of(s
hare
d_me
mory
)
void
prin
t_bu
ffer
(){
int
i;pr
intf
("Th
esh
ared
memo
ryse
gmen
tco
ntai
ns:\
n");
for(
i=0;
i<NB
_ELE
MENT
S;i+
+){
prin
tf("
%d\t
",bu
ffer
->ta
b[i]
);} pr
intf
("\n
");
} int
main
(int
argc
,ch
ar*a
rgv[
]){
int
fd;
int
rank
;in
ti;
if(a
rgc
<2)
{fp
uts(
"USA
GE:
exem
ple_
shm
<ran
k>\n
",st
derr
);ex
it(E
XIT_
FAIL
URE)
;} ra
nk=
atoi
(arg
v[1]
);
/*op
enth
esh
ared
memo
ryse
gmen
t*/
fd=
shm_
open
(SHM
_KEY
,O_
RDWR
,06
66);
if(f
d<0)
{pe
rror
("sh
m_op
en")
;ex
it(E
XIT_
FAIL
URE)
;}
TEL
ECOM
SudP
aris—
Den
isCon
an,M
ichelSimaticet
Fran
çoisTr
ahay
—Av
ril20
18—
mod
uleC
SC45
08/M
296
3Com
mun
icationàl’a
idede
sIP
CPO
SIX
3.5Sémap
hores
/*se
tth
esi
zeof
the
shar
edme
mory
segm
ent
*/if
(ftr
unca
te(f
d,SH
M_SI
ZE)
<0)
{pe
rror
("ft
runc
ate"
);ex
it(E
XIT_
FAIL
URE)
;} /*
map
the
shar
edme
mory
segm
ent
inth
ecu
rren
tad
dres
ssp
ace
*/if
((bu
ffer
=mm
ap(N
ULL,
SHM_
SIZE
,PR
OT_R
EAD|
PROT
_WRI
TE,
MAP_
SHAR
ED,
fd,
0))
<0)
{pe
rror
("mm
ap")
;ex
it(E
XIT_
FAIL
URE)
;} fo
r(i=
0;i<
10;
i++)
{pr
int_
buff
er()
;in
tv
=bu
ffer
->ta
b[ra
nk];
slee
p(1)
;v+
+;bu
ffer
->ta
b[ra
nk]
=v;
} /*un
map
the
memo
ryre
gion
*/if
(mun
map(
buff
er,
SHM_
SIZE
)<
0){
perr
or("
munm
ap")
;ex
it(E
XIT_
FAIL
URE)
;} /*
clos
eth
esh
ared
memo
ryse
gmen
t*/
if(c
lose
(fd)
<0)
{pe
rror
("cl
ose"
);ex
it(E
XIT_
FAIL
URE)
;} re
turn
EXIT
_SUC
CESS
;} #
19
' &
$ %
3.5Sé
maphores
3.5.1
Intro
ductionauxsémaphores................................................20
3.5.2
Intro
ductionauxsémaphores:
analo
gie.
.....................................21
3.5.4
Intro
ductionauxsémaphores:
algorith
mes
PET
V...........................24
3.5.4
SémaphoresP
OSIX:initia
lisation.
..........................................24
3.5.5
SémaphoresP
OSIX:u
tilisa
tion.............................................2
5
TEL
ECOM
SudP
aris—
Den
isCon
an,M
ichelSimaticet
Fran
çoisTr
ahay
—Av
ril20
18—
mod
uleC
SC45
08/M
297
3Com
mun
icationàl’a
idede
sIP
CPO
SIX
3.5Sémap
hores
#20
' &
$ %
3.5.1Introd
uctio
nauxsémaphores
�Sé
maphore
=ob
jetcompo
sé:
�D’
unevaria
ble(savaleu
r)�
D’un
efiled’attente(le
sprocessus
bloq
ués)
�Prim
itivesa
ssociée
s:�
Initialisatio
n(avecun
evaleu
rpositive
ounu
lle)
�Manipulation:
IPrise
(Pou
Wait
)=demande
d’autorisation
IVa
lidation(V
ouSign
al)=
find’utilis
ation
�Princip
e:sém
aphore
associé
àun
eressou
rce
�Prise
=demande
d’autorisation(P
uis-je?
)sivaleur>
0accord,sinon
blocage
�Va
lidation=
restitu
tiond’autorisation(V
as-y)
sivaleur<
0déblocaged’un
processus
Interprétatio
nde
lavaleur
dusémap
hore
:
•sivaleur>
=0:n
ombred’au
toris
ations
•sivaleur<
=0:n
ombrede
processusbloq
ués
valeur
=valeurInitiale−nb(P
)+nb(V
)La
valeur
initialen’estjamaisné
gativ
e.Le
sémap
hore
estl’o
util
deba
sepo
urrésoud
relesprob
lèmes
desynchron
isatio
nentreprocessus(cf.
chap
itre«Sy
nchron
isatio
nentreprocessus»).
#21
' &
$ %
3.5.2Introd
uctio
nauxsémaphores:a
nalogie
�Pa
rkingdeN
places
contrôlé
paru
nfeu
P
−1
+1
Vale
ur
du
sém
ap
ho
re
V
•Ét
atinitial
:parking
vide
==>
valeur
sémap
hore
=N
•Cap
teur
d’entrée
=rôle
deP
TEL
ECOM
SudP
aris—
Den
isCon
an,M
ichelSimaticet
Fran
çoisTr
ahay
—Av
ril20
18—
mod
uleC
SC45
08/M
298
3Com
mun
icationàl’a
idede
sIP
CPO
SIX
3.5Sémap
hores
−1survaleur
sivaleur>
=0feuvert,s
inon
feuroug
e
•Cap
teur
desortie
=rôle
deV
+1survaleur
sivaleur<
=0feuvert
pour
unevoitu
re
sinon
rien(une
placedispon
ible
deplus)
•NB
:siu
nevo
iture
nejoue
pasle
jeu(elle
nepa
ssepa
sde
vant
lescapteu
rs),
elle
met
enpé
rille
bon
fonc
tionn
ementdu
systèm
e:
–trop
devoitu
resda
nsle
parking
–OU
BIEN
feuroug
ealorsqu
ele
parkingcontient
desplaces
libres
#22
' &
$ %
3.5.3Introd
uctio
nauxsémaphores:a
lgorith
mes
PET
V�
Initialisa
tion(sémaphore,n)
vale
ur[s
émap
hore
]=
n
�P(
sémaphore)
vale
ur[s
émap
hore
]=
vale
ur[s
émap
hore
]-
1si
(val
eur[
séma
phor
e]<
0)al
ors
état
Proc
essu
s=
Bloq
uéme
ttre
proc
essu
sen
file
d’at
tent
efi
nSi
invo
quer
l’or
donn
ance
ur
�V(
sémaphore)
vale
ur[s
émap
hore
]=
vale
ur[s
émap
hore
]+
1si
(val
eur[
séma
phor
e]<=
0)al
ors
extr
aire
proc
essu
sde
file
d’at
tent
eét
atPr
oces
sus
=Pr
êtfi
nSi
invo
quer
l’or
donn
ance
ur
TEL
ECOM
SudP
aris—
Den
isCon
an,M
ichelSimaticet
Fran
çoisTr
ahay
—Av
ril20
18—
mod
uleC
SC45
08/M
299
3Com
mun
icationàl’a
idede
sIP
CPO
SIX
3.5Sémap
hores
#23
' &
$ %
3.5.4Sé
maphoresPO
SIX
:initia
lisation
2typesd
esémaphores:
�Sé
maphoresn
ommés
:identifiés
paru
neclé
dela
form
e/un_nom.
Less
émaphores
nommés
sont
persistants.
�Créatio
n/ou
vertu
re:
sem_t*sem_open(constchar
*name,
intoflag,
mode_t
mode,
unsigned
intvalue)
sem_t*sem_open(constchar
*name,
intoflag)
�Ferm
eture/destruction:
intsem_close(sem_t*sem)
intsem_unlink(const
char
*name)
�Sé
maphoresa
nonymes
:plac
ésdans
unezone
mém
oire
parta
géeparp
lusie
urs
threadso
uprocessus(
pare
xempledans
unsegm
entd
emém
oire
parta
gée).
�Initialisatio
n:
intsem_init(sem_t
*sem,intpshared,
unsigned
intvalue)
#24
' &
$ %
�De
struction:
intsem_destroy(sem_t*sem)
Attentio
n,sous
Mac
OSX,les
sémap
horesa
nony
mes
nesont
pasimplém
entées.Ilcon
vientd
oncd
’utilise
run
autremécan
isme(par
exem
pleun
sémap
hore
nommé).
TEL
ECOM
SudP
aris—
Den
isCon
an,M
ichelSimaticet
Fran
çoisTr
ahay
—Av
ril20
18—
mod
uleC
SC45
08/M
210
0
3Com
mun
icationàl’a
idede
sIP
CPO
SIX
3.5Sémap
hores
#25
' &
$ %
3.5.5Sé
maphoresPO
SIX
:utilisa
tion
Unefoisou
vert/
initialisésles
deux
typesd
esémaphoresp
euvent
être
manipulés
avec
:
�Prise
:intsem_wait(sem_t
*sem)
intsem_trywait(sem_t*sem)
intsem_timedwait(sem_t*sem,conststruct
timespec
*abs_timeout)
�Va
lidation:
intsem_post(sem_t
*sem)
�Co
nsultatio
n:
intsem_getvalue(sem_t
*sem,int*sval)
Lacréatio
nd’un
sémap
hore
nommése
fait
enfournissan
tsonidentifi
ant(name),u
ndrap
eau(O_CREATE
pour
créerle
sémap
hore),lesdroits
d’accèsau
sémap
hore,a
insi
quela
valeur
initialedu
sémap
hore.
Lacréatio
nd’un
sémap
hore
anon
ymeconsist
eàinitialise
run
objetde
type
sem_taccessible
partous
lesthread
ssuccep
tiblesd’utiliserle
sémap
hore.S
ilesémap
hore
estutilisé
parplusieursprocessus,
onplace
géné
ralementlesémap
hore
dans
unsegm
entd
emém
oire
partag
épa
rles
processus.Dan
scecas,lepa
ramètre
pshareddo
itêtre
à1lors
del’a
ppel
àsem_init
.Dan
stous
lescas,
lepa
ramètre
valuedé
signe
lavaleur
initialedu
sémap
hore.
Une
foisla
phased’initialisa
tionterm
inée,lesémap
hore
estu
tilisa
bleavec
sem_post
(équ
ivalentà
l’opé
-ratio
nV())
etsem_wait
(équ
ivalentàl’o
pératio
nP()).
Lafonc
tionsem_wait
estb
loqu
ante
:silavaleur
dusémap
hore
devientinférieureà0,
lethread
sebloq
ueen
attend
antq
uela
valeur
dusémap
hore
rede
vien
nepo
sitive.
Pour
évite
rdebloq
uerind
éfiniem
ent,on
peut
utilisers
em_timedwait
quifi
xeun
eda
teàpa
rtirde
laqu
elle
lethread
doitêtre
débloq
ué.S
isem_timedwait
seterm
ined
ufaitde
l’exp
iratio
ndu
timer,
lafonc
tionretourne
-1et
errnovaut
ETIMEDOUT.
Ilesté
galement
possible
d’utiliserlafonc
tionno
n-bloq
uantesem_trywaitqu
itente
deprendrele
sémap
hore.E
ncasd
’échec
(silavaleur
dusémap
hore
estinférie
ureà1),lafonc
tionne
sebloq
uepa
s,maisretourne
-1et
errnovaut
EAGAIN
.Deu
xfonc
tions
sont
trad
ition
nelle
mentréalisé
eslorsqu
el’o
nutilise
lessémap
hores.
Laprem
ière
P(s)
(correspon
dant
àla
fonc
tionsem_post
)set
radu
itpa
r«Pu
is-je?»
,tan
disq
uela
second
eV(s)(correspon
dant
àla
fonc
tionsem_wait
)sig
nifie
«Va
s-y!
».Lo
rsqu
el’o
ndé
sirepren
dreun
eressou
rce,
oneff
ectueun
P(s)
;lorsqu
ela
ressou
rcen’estplus
nécessaire,o
nla
relâcheen
effectuan
tun
V(s)
.L’exem
plesuivan
tutilise
unsémap
hore
pour
réalise
run
parking.
Lesde
uxprog
rammes
sepa
rtag
entla
constanteCLE_PARKINGdé
finie
dans
exempleSemInit.h
./*
****
****
****
***/
/*ex
empl
eSem
.h*/
/***
****
****
****
*/
#def
ine
CLE_
PARK
ING
"/ex
empl
e_cl
e"
Leprog
rammeexempleSemInit.c
crée
cesémap
hore
(don
tla
cléestba
séesurun
nom
defichier)et
l’initia
lise:
/***
****
****
****
****
*//*
exem
pleS
emIn
it.c
*//*
****
****
****
****
***/
#inc
lude
<std
lib.
h>#i
nclu
de<s
tdio
.h>
#inc
lude
<fcn
tl.h
>/*
For
O_*
cons
tant
s*/
#inc
lude
<sys
/sta
t.h>
/*Fo
rmo
deco
nsta
nts
*/#i
nclu
de<s
emap
hore
.h>
TEL
ECOM
SudP
aris—
Den
isCon
an,M
ichelSimaticet
Fran
çoisTr
ahay
—Av
ril20
18—
mod
uleC
SC45
08/M
210
1
Com
mun
ications
inter-processus
#inc
lude
"exe
mple
Sem.
h"#d
efin
eNB
_PLA
CES
2
int
main
(int
argc
,ch
ar*a
rgv[
]){
sem_
t*s
emPa
rkin
g;
if(a
rgc
!=1)
{fp
uts(
"USA
GE=
exem
pleS
emIn
it\n
",st
derr
);ex
it(E
XIT_
FAIL
URE)
;} /*
Créa
tion
etin
itia
lisa
tion
dusé
maph
ore
*/se
mPar
king
=se
m_op
en(C
LE_P
ARKI
NG,
O_CR
EAT,
S_IR
WXU,
NB_P
LACE
S);
if(s
emPa
rkin
g==
SEM_
FAIL
ED)
{pe
rror
("se
m_op
en")
;ex
it(E
XIT_
FAIL
URE)
;} pu
ts("
Init
iali
sati
onOK
,vo
uspo
uvez
exec
uter
exem
pleS
em")
;
int
sval
=-1
;if
(sem
_get
valu
e(se
mPar
king
,&s
val)
<0)
{pe
rror
("se
m_ge
tval
ue")
;ex
it(E
XIT_
FAIL
URE)
;} pr
intf
("sv
al=
%d\n
",sv
al);
retu
rnEX
IT_S
UCCE
SS;
}
Leprog
rammeexempleSem.c
utilise
cesémap
hore
pour
protéger
l’accès
aupa
rking:
/***
****
****
****
*//*
exem
pleS
em.c
*//*
****
****
****
***/
#inc
lude
<std
lib.
h>#i
nclu
de<s
tdio
.h>
#inc
lude
<fcn
tl.h
>/*
For
O_*
cons
tant
s*/
#inc
lude
<sys
/sta
t.h>
/*Fo
rmo
deco
nsta
nts
*/#i
nclu
de<s
emap
hore
.h>
#inc
lude
<uni
std.
h>
#inc
lude
"exe
mple
Sem.
h"
void
P(se
m_t
*sem
_id)
{se
m_wa
it(s
em_i
d);
} void
V(se
m_t
*sem
_id)
{se
m_po
st(s
em_i
d);
} int
main
(int
argc
,ch
ar*a
rgv[
]){
sem_
t*s
emPa
rkin
g;
if(a
rgc
!=1)
{fp
uts(
"USA
GE=
exem
pleS
em\n
",st
derr
);ex
it(E
XIT_
FAIL
URE)
;} /*
ouve
rtur
edu
sÃľm
apho
rede
jacr
ÃľÃľ
*/se
mPar
king
=se
m_op
en(C
LE_P
ARKI
NG,
0);
if(s
emPa
rkin
g==
SEM_
FAIL
ED)
{pe
rror
("se
m_op
en")
;ex
it(E
XIT_
FAIL
URE)
;} pr
intf
("De
mand
ed’
entr
eeda
nsle
park
ing.
..\n
");
P(se
mPar
king
);pr
intf
("\a
...O
K\n"
);
slee
p(5)
;
prin
tf("
Aver
tir
deso
rtie
dupa
rkin
g...
\n")
;V(
semP
arki
ng);
prin
tf("
\a..
.OK\
n");
slee
p(5)
;
retu
rnEX
IT_S
UCCE
SS;
} TEL
ECOM
SudP
aris—
Den
isCon
an,M
ichelSimaticet
Fran
çoisTr
ahay
—Av
ril20
18—
mod
uleC
SC45
08/M
210
2
Com
mun
ications
inter-processus
#26
' &
$ %
4Co
mparaiso
ndesmécanism
esde
synchron
isatio
n
Temps
écou
lépo
urenvoyeru
nmessage
viadiffé
rentsm
edia
decommun
icatio
n:
1.Tu
bepo
urtra
nsférer4
096octets
:2,3
7µ
s
2.Tu
bepo
urtra
nsférer4
16octets
en2écritures
(long
ueur,p
uisd
onnée)
:1,2
7µ
s,soitun
gain
de47
%
3.Tu
bepo
urtra
nsférerp
ointeur(
supp
osemalloc
etfre
e):2,2
0µ
s,soitun
gain
de7%
4.Ta
bleaude
zonesm
émoire
géré
parp
aradigmede
synchron
isatio
nProd
ucteur/C
onsommateura
vecdess
émaphoresP
OSIX
:0,9
4µ
s,soitun
gain
de60
%
5.Idem
,mais
avec
desc
onditio
nsPO
SIX:3,2
9µ
s,soitun
surcoû
tde
39%
6.File
demessages(
IPCet
POSIX)
:0,9
9µ
s,soitun
gain
de58
%
Cette
compa
raiso
nde
smécan
ismes
desynchron
isatio
naétéréalisé
elors
desT
Pno
tésd
e20
09(première
etde
uxièmesession).P
ourle
code
desexpé
rienc
esréalisé
es,s
erepo
rter
aucorrigéde
cesTP
notés.
Leprincipe
decesexpé
rienc
esestle
suivan
t:u
nthread
distributeur
envoie
1.00
0.00
0messagesviaun
medium
decommun
icationàde
sthreadstra
iteur.L
espe
rform
ancessont
mesuréesàl’a
idede
lacomman
declock_gettimesuru
nemachine
mun
ied’un
processeur
quad
ri-cœ
urIntelC
orei7-4600U
cade
ncéà
2.1GHz,
8Gode
RAM
et,d
uno
yauLinu
x4.4.0.
Noter
quecettecompa
raiso
nestréalisé
eàl’a
idede
threads.
Dece
fait,
lesthreadssont
enmesurede
partag
erl’e
spacemém
oire.P
arexem
ple,
unezone
mém
oire
alloué
evia
malloc
parle
thread
distributeur
estlib
érab
leviafree
parun
thread
traite
ur.
Voiciledé
tailde
sexpé
rienc
esréalisé
es:
1.Le
thread
distributeur
envoie
systém
atique
ment40
96octets
auxthreadstra
iteur
viaun
tube
.
2.Dan
scettemétho
de,o
nfaittran
siter
moins
d’octets
dans
letube
.
•Le
thread
distributeur
écrit
d’ab
ordda
nsle
tube
lalong
ueur
dela
chaîne
qu’il
s’app
rête
àécrir
e,pu
isla
chaîne
elle-m
ême(etpa
stous
lesoctets
dutableaude
caractères
dans
lequ
eleststockée
cettechaîne
);•
Cha
quethreadtra
iteur
litd’ab
ordla
long
ueur
dela
chaîne
quia
étéé
crite
parlethreaddistributeur,
puis
lachaîne
elle-m
ême.
Lega
inob
tenu
(47%
)estdû
aufait
qu’ondivise
par
4096/41
6'
10le
nombred’octets
tran
sférés
(inutile
ment)
entrela
mém
oire
duthread
distributeur
etle
tube
d’un
epa
rt,et
entrele
tube
etla
mém
oire
desthreadstra
iteursd’au
trepa
rt.
3.Dan
scettemétho
de,on
écrit
encore
moins
d’octets
dans
letuyau
eton
écon
omise
d’un
epa
rtles
recopies
d’octets
entrela
mém
oire
duthread
distributeur
etle
tube
,etd
’autre
part
celle
sentre
letube
etla
mém
oire
dechaq
uethread
traite
ur.
•Àchaq
uerequ
ête,lethread
distributeur
alloue
,àl’a
ided
emalloc,
unez
onem
émoire
qu’il
remplit;
puis
ilstocke
lepo
inteur
(verscettezone
mém
oire)da
nsle
tube
;•
Cha
quethread
traite
urlit
cepo
inteur
dans
letube
,pu
istraite
lesdo
nnéesda
nscettezones
mém
oire,e
ten
finlib
èrecettezone
mém
oire
àl’a
idede
free
.
Sion
aga
gné7
%de
temps
parr
appo
rtàla
prem
ière
métho
dede
travail,on
ape
rdupa
rrap
port
aucode
dela
deux
ièmemétho
de(7
3%d’au
gmentatio
n).L
esmalloc
/freesont
icib
eauc
oupplus
péna
lisan
tsqu
el’é
critu
re/lecture
desoctets
dumessage
surle
tube
.
TEL
ECOM
SudP
aris—
Den
isCon
an,M
ichelSimaticet
Fran
çoisTr
ahay
—Av
ril20
18—
mod
uleC
SC45
08/M
210
3
Com
mun
ications
inter-processus
4.Dan
scette
métho
de,o
nremplacele
tube
paru
ntableaude
2∗N
cases(N
étan
tleno
mbrede
threads
traite
ur)géré
parlesthreadsselonun
paradigm
ede
synchron
isatio
nPr
oduc
teur/C
onsommateu
r,en
utilisant
dessémap
horesPO
SIX
(sem_t
).
•Ondé
finitun
tableaude
2∗N
zone
sde
TAILLE
_MAX_REQ
UET
Eoctets;
•À
chaq
uerequ
ête,
lethread
distributeur
:(a)essaye
d’accéde
ràl’u
nedescasesde
cetableauselonle
paradigm
ede
synchron
isatio
nPr
o-du
cteu
r/Con
sommateu
r,(b)commun
ique
l’adresse
decettecase
àla
fonc
tionchargéede
remplir
cettezone
mém
oire,
(c)inform
elesthreadstra
iteur
grâceau
paradigm
ePr
oduc
teur/C
onsommateurqu
’une
inform
a-tio
nestprête;
•Cha
quethread
traite
urattend
qu’une
inform
ationsoit
prêteda
nsce
tableau;
•Qua
ndc’estle
cas,
lethread
traite
ur:
(a)recopiele
contenude
lacase
prêteda
nsun
evaria
blelocale,
(b)indiqu
eau
thread
distributeur
(grâce
aupa
radigm
ePr
oduc
teur/C
onsommateu
r)qu
ecette
placeestàno
uveaudispon
ible,
(c)tran
smet
l’adresse
decettevaria
blelocale
àsa
fonc
tionde
traitement;
•To
utes
lesop
érations
desynchron
isatio
nsurcestableaux
sont
réalisé
esàl’a
idede
sémap
hores
sem_t.
Lega
inob
tenu
estdû
aufait
qu’onécon
omise
aumax
imum
lestran
sfertsmém
oire
entrela
mém
oire
desthreadset
celle
dutube
.Deplus,lemécan
ismede
synchron
isatio
nàba
sede
sémap
hore
semble
plus
efficace
queceluib
asésurlestube
s.
5.Dan
scettemétho
de,o
nutilise
descond
ition
sPO
SIX
aulie
ude
sémap
horesPO
SIX.I
lapp
araîtqu
elescond
ition
ssont
moins
perfo
rman
tes(cequ
isem
blelogiqu
e,vu
qu’onfaitbe
aucoup
plus
d’ap
pels
àde
sprim
itivesde
synchron
isatio
ntout
aulong
ducode
).
6.Cette
métho
des’a
ppuiesurun
efilede
message
IPC
(etno
nPO
SIX).
•le
thread
distributeur
écrit
sesrequ
êtes
entant
quemessagesda
nsun
efilede
messagesIP
C(prim
itive
msgsnd
etno
nmq_send)
qu’il
acrééeau
mom
entde
l’initia
lisationdu
prog
ramme;
•chaq
uethread
traite
urlit
unmessage
surcettefile,
puisap
pelle
safonc
tionde
traitementavec
larequ
êtecontenue
dans
cemessage.
•La
filede
message
estsupp
rimée,u
nefois
quele
prog
rammeafin
ison
exécution.
Lespe
rform
ancesde
cecode
sont
légèrementmoins
bonn
esqu
elespe
rform
ancesde
lasolutio
n4.
Toutefois,
lasolutio
nàba
sede
filede
message
al’a
vantag
ede
pouv
oirfonc
tionn
erentreplusieurs
processuset
nécessite
uncode
plus
“propre”.U
neexpé
rienc
eréalisé
eavec
lesfiles
demessagesPO
SIX
mon
trequ
ecesde
rnièreson
tun
niveau
depe
rform
ance
équivalent
aufiles
demessagesIP
C.
7.Que
llessont
lespe
rform
ancesd’un
tube
nommépa
rrapp
ortàun
tube
stan
dard
?La
questio
nest
ouverte(ausens
oùle
test
resteàfaire
).
TEL
ECOM
SudP
aris—
Den
isCon
an,M
ichelSimaticet
Fran
çoisTr
ahay
—Av
ril20
18—
mod
uleC
SC45
08/M
210
4
Sync
hron
isat
ion
entr
epr
oces
sus
Dom
iniq
ueB
ouil
let
etM
iche
lSi
mat
ic
mod
ule
CSC
4508
/M2
Avr
il20
18 105
Synchron
isatio
nentreprocessus
1Introd
uctio
n
#2
' &
$ %
Plan
dudo
cument
1Intro
duction....................................................................4
2Sé
maphore
=Outilde
base......................................................6
3Ré
solutio
nde
prob
lèmes
desynchron
isatio
ntypiqu
es..............................9
4Interblocage
...................................................................3
45
Mise
enoeuvre
dans
unsystèm
ed’exploitatio
n..................................
35
#3
' &
$ %
1Introd
uctio
n
�Lesp
roblèm
esde
synchron
isatio
nsont
légions
dans
lavie
courante
:�
Quand
oncrédite
soncompteen
banq
ue,c
ecréditne
doitpasê
treperduparce
qu’en
parallèle
labanq
uedébite
unchèque
�Un
parkingde
capacit
éN
places
nedo
itpaslais
sere
ntrerN
+1véhicules
�Ro
méo
etJuliette
nepeuvents
eprendreparlamain
ques’ilsse
retro
uventà
leurr
endez-vous
�Ro
bert
etRa
ymon
defont
lavaiss
elle.
Raym
onde
lave.
Robert
essuie.
L’égou
ttoir
lessynchron
ise.
�Ce
rtaines
lignesd
etra
inpo
ssèdentd
essections
devoie
unique.S
urcess
ectio
ns,
onne
peut
avoirq
uedest
rainsc
irculantd
ansu
nmêm
esens
àun
instantd
onné
�Onrencon
tredesp
roblèm
essim
ilaire
slorsqu’on
utilis
eun
systèm
ed’exploitatio
n
TEL
ECOM
SudP
aris
—Dom
inique
Bouille
tet
Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M210
6
Synchron
isatio
nentreprocessus
2Sé
map
hore
=Outilde
base
#4
' &
$ %
1.1Co
rrespo
ndance
prob
lèmes
viecourante/informatique
Ban
que
Prob
lèmed’
exclu
sion
mut
uelle
:une
ressou
rcene
doitêtre
accessible
queparu
neentitéàun
instantd
onné.C
as,p
arexem
ple,
d’un
ezone
mém
oire
contenantlesolded’un
compte.
Par
king
Prob
lèmede
coho
rte:u
ngrou
pede
taillebo
rnée
esta
utorisé
àoff
rir/u
tilise
run
service
.Cas,p
arexem
ple,
d’un
serveurd
econn
exions
Internet
quin
edo
itpasautoriser
plus
deN
conn
exions
enparallèle.
Rom
éoet
Julie
tte
Prob
lèmede
pass
age
deté
moi
n:o
ndivis
ele
travailentre
desprocessus.
Cas,pare
xemple,
de2processusqu
idoivent
s’échangerd
esinform
ations
àun
mom
ent
donn
éde
leure
xécutio
navantd
econtinuer.
Rob
ert
etR
aym
onde
Prob
lèmede
prod
ucte
urs/
cons
omm
ateu
rs:u
nconsom
mateurn
epeut
consom
mer
quesitous
lesprod
ucteurson
tfaitleurt
ravail.
Cas,pare
xemple,
d’un
processuschargé
d’envoyerd
estampo
nsqu
iont
étéremplispard
’autresprocessus.
Tra
inProb
lèmede
lecte
urs/
réda
cteu
rsoù
l’ondo
itgérer,de
manièr
ecohérente,
une
compétitionentre
diffé
rentes
catégorie
sd’entités.C
as,p
arexem
ple,
d’un
etâchede
fond
pério
diqu
ede
«nettoyage»qu
inepeut
sedécle
ncherq
uequ
andles
tâches
princip
ales
sont
inactiv
es.
#5
' &
$ %
2Sé
maphore
=Outilde
base
2.1
Généralités....................................................................6
2.2
Analo
gie.
.....................................................................7
3.0
Algorithm
esPET
V...........................................................9
Lesémap
hore
estl’o
utilde
base
pour
résoud
relesprob
lèmes
desynchron
isatio
n.
TEL
ECOM
SudP
aris
—Dom
inique
Bouille
tet
Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M210
7
Synchron
isatio
nentreprocessus
2Sé
map
hore
=Outilde
base
#6
' &
$ %
2.1Généralité
s
�Sé
maphore
=ob
jetcompo
sé:
�D’
unevaria
ble(savaleu
r)�
D’un
efiled’attente(le
sprocessus
bloq
ués)
�Prim
itivesa
ssociée
s:�
Initialisatio
n(avecun
evaleu
rpositive
ounu
lle)
�Manipulation:
IPrise
(Pou
Wait
)=demande
d’autorisation
IVa
lidation(V
ouSign
al)=
find’utilis
ation
�Princip
e:sém
aphore
associé
àun
eressou
rce
�Prise
=demande
d’autorisation(P
uis-je?
)sivaleur>
0accord,sinon
blocage
�Va
lidation=
restitu
tiond’autorisation(V
as-y)
sivaleur<
0déblocaged’un
processus
Interprétatio
nde
lavaleur
dusémap
hore
:
•sivaleur>
=0:n
ombred’au
toris
ations
•sivaleur<
=0:n
ombrede
processusbloq
ués
valeur
=valeurInitiale−nb(P
)+nb(V
)La
valeur
initialen’estjamaisné
gativ
e.
#7
' &
$ %
2.2Analogie
�Pa
rkingdeN
places
contrôlé
paru
nfeu
P
−1
+1
Vale
ur
du
sém
ap
ho
re
V
•Ét
atinitial
:parking
vide
==>
valeur
sémap
hore
=N
•Cap
teur
d’entrée
=rôle
deP
−1survaleur
TEL
ECOM
SudP
aris
—Dom
inique
Bouille
tet
Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M210
8
Synchron
isatio
nentreprocessus
sivaleur>
=0feuvert,s
inon
feuroug
e
•Cap
teur
desortie
=rôle
deV
+1survaleur
sivaleur<
=0feuvert
pour
unevoitu
resin
onrie
n(une
placedispon
ible
deplus)
•NB
:siu
nevo
iture
nejoue
pasle
jeu(elle
nepa
ssepa
sde
vant
lescapteu
rs),
elle
met
enpé
rille
bon
fonc
tionn
ementdu
systèm
e:
–trop
devoitu
resda
nsle
parking
–OU
BIEN
feuroug
ealorsqu
ele
parkingcontient
desplaces
libres
#8
' &
$ %
2.3Algorith
mes
PET
V�
Initialisa
tion(sémaphore,n)
vale
ur[s
émap
hore
]=
n
�P(
sémaphore)
vale
ur[s
émap
hore
]=
vale
ur[s
émap
hore
]-
1si
(val
eur[
séma
phor
e]<
0)al
ors
état
Proc
essu
s=
Bloq
uéme
ttre
proc
essu
sen
file
d’at
tent
efi
nSi
invo
quer
l’or
donn
ance
ur
�V(
sémaphore)
vale
ur[s
émap
hore
]=
vale
ur[s
émap
hore
]+
1si
(val
eur[
séma
phor
e]<=
0)al
ors
extr
aire
proc
essu
sde
file
d’at
tent
eét
atPr
oces
sus
=Pr
êtfi
nSi
invo
quer
l’or
donn
ance
ur
TEL
ECOM
SudP
aris
—Dom
inique
Bouille
tet
Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M210
9
Synchron
isatio
nentreprocessus
3Résolutionde
prob
lèmes
desynchron
isatio
ntypiqu
es
#9
' &
$ %
3Ré
solutio
nde
prob
lèmes
desynchron
isatio
ntypiqu
es
3.1
Exclu
sionmutuelle
...........................................................1
03.3
Cohorte
......................................................................13
3.3
Passagede
témoin...........................................................1
33.4
Prod
ucteurs/Co
nsom
mateurs.................................................1
63.5
Lecteurs/
rédacteurs..........................................................28
Lesémap
hore
perm
etd’élab
orer
desmécan
ismes
deplus
haut
niveau
quis
ontétud
iésda
nscettepa
rtie.
On
disposeraainside
paradigm
es(ou
patron
s),c’est-à-dire
d’exem
ples-ty
pepe
rmettant
demod
élise
rde
sclassesde
prob
lèmes
quis
ontfré
quem
mentrenc
ontrés
etqu
ison
tprésents
àtous
lesniveau
xda
nsles
systèm
eset
applications
conc
urrentes.
Leur
solutio
nfournitde
ssché
mas
deconc
eptio
net
deprog
rammationde
compo
santsconc
urrents.
Ilsserventd
ebrique
sdeba
seàtouteétud
e,an
alyseou
construc
tionde
systèm
esou
d’ap
plications
coop
ératives.
NB
:il
exist
ede
nombreu
xau
tres
prob
lèmes/p
arad
igmes
aux
noms
plus
poétique
sles
uns
que
lesau
tres
(leprob
lème
dusalon
decoiffure,
leprob
lème
duPè
reNoël,
leprob
lème
dela
mon
tagn
erusse...)[D
owney,
2005
].
#10
' &
$ %
3.1Ex
clusionmutuelle
�Pe
rmet
lagestiond’accèsc
oncurre
ntàdesr
essourcesp
artagées
�Princip
e:
�Sé
maphore
mutexinitialisé
à1
�Prim
itive
Pen
débu
tdesectioncritiqu
e�
Prim
itive
Ven
finde
sectioncritiqu
e
�Ex
emple:
�Sé
maphore
mutexinitialisé
à1
�Prog1
Prog2
P(mutex)
P(mutex)
x=lire
(cpte)
x=lire
(cpte)
x=x+10
x=x-100
écrire
(cpte=x)
écrire
(cpte=x)
V(mutex)
V(mutex)
Qua
ndProg1s’e
xécu
tesans
queProg2soit
activ
é,alorsP(mutex)
fait
passer
mutexà
0et
Prog1entre
ensectioncritiqu
e.
TEL
ECOM
SudP
aris
—Dom
inique
Bouille
tet
Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M211
0
3Résolutionde
prob
lèmes
desynchron
isatio
ntypiqu
es3.3Pa
ssag
ede
témoin
SiProg2estactiv
équ
andProg1esten
sectioncritiqu
e,alorsP(mutex)
fait
passer
mutexà−
1.Don
cProg2se
retrou
vebloq
ué.Q
uand
Prog1exécuteV(mutex),alorsmutexpa
sseà
0et
Prog2estdé
bloq
ué.
#11
' &
$ %
3.2Co
horte
�Pe
rmet
lacoop
érationd’un
grou
pede
taille
maxim
umdo
nnée
�Princip
e:
�Sé
maphore
parkinginitialisé
àN
�Prim
itive
Pen
débu
tdebesoin
�Prim
itive
Ven
finde
besoin
�Ex
emple:
�Sé
maphore
parkinginitialisé
àN
�Prog
vehicule
...
P(parking)
|...
V(parking)
...
Le(N
+1)
evéhicu
lequ
iche
rche
àentrer
dans
lepa
rkingse
retrou
vebloq
uépa
rson
P(parking)
.Iln
’est
débloq
uéqu
equ
andun
autrevéhicu
lesort
enfaisa
ntV(parking)
.
Noter
quevaleurSem
[parking]=
valeurInitialeSem
[parking]−
nb(P
)+nb(V
)
#12
' &
$ %
3.3Pa
ssagede
témoin
�Pe
rmet
lacoop
érationpard
ivisio
ndu
travailentre
processus
�3types:
�En
void
esig
nal
�Re
ndez-vou
sentre
2processus
�Ap
pelp
rocédu
rale
ntre
processus
TEL
ECOM
SudP
aris
—Dom
inique
Bouille
tet
Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M211
1
3Résolutionde
prob
lèmes
desynchron
isatio
ntypiqu
es3.3Pa
ssag
ede
témoin
#13
' &
$ %
3.3.1En
void
esig
nal
�Pe
rmet
àun
processusd
’envoyeru
n«top»àun
autre
pour
signaler
laprésence/d
ispon
ibilit
éd’un
einform
ation
�Princip
e:
�Sé
maphore
topinitialisé
à0
�Prim
itive
Ppo
urattente«top»
�Prim
itive
Vpo
ursig
nal«
top»
�Ex
emple:
�Sé
maphore
topinitialisé
à0
�Prog1
Prog2
...
...
calcul(info)
P(top)
V(top)
utilisation(info)
...
...
Cemécan
ismepe
utêtre
utilisé
parProg1po
urdo
nner
àProg2le
droitd’accèsàun
eressou
rcequ
and
Prog1estim
equ
ecetteressou
rceestprête.
#14
' &
$ %
3.3.2Re
ndez-vou
sentredeux
processus
�Pe
rmet
àdeux
processusd
’établir
unpo
intd
esynchron
isatio
n
�Princip
e:
�Sé
maphore
romeoinitialisé
à0
�Sé
maphore
juliette
initialisé
à0
�Prog1
Prog2
...
...
V(juliette)
V(romeo)
P(romeo)
P(juliette)
...
...
Cepa
tron
perm
etàProg1et
Prog2de
s’échan
gerd
esinform
ations
àun
mom
entp
récisd
eleur
exécution
avan
tde
continue
r.Gén
éralisa
tion:p
rincipe
d’un
rend
ez-vou
sentreN
processus(N
B:c
etalgo
rithm
ene
fonc
tionn
equ
’une
seulefois)
•Sé
map
hore
rdvinitialisé
à0
•Sé
map
hore
mutexinitialisé
à1
•En
tiernbAttenteinitialisé
à0
TEL
ECOM
SudP
aris
—Dom
inique
Bouille
tet
Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M211
2
Synchron
isatio
nentreprocessus
3Résolutionde
prob
lèmes
desynchron
isatio
ntypiqu
es
...
P(mutex)
sinbAttente<N-1alors
nbAttente=nbAttente+1
V(mutex)
P(rdv)
sinon V(mutex)
répéter(N-1)fois
V(rdv)
finrépéter
nbAttente=0//
Pasobligatoire,
vuqu’algorithmene
fonctionne
qu’une
fois
finsi
...
#15
' &
$ %
3.3.3App
elprocédural
entreprocessus
�Pe
rmet
àun
processusd
efaire
un«appeld
eprocédure»,
alors
quele
code
decette
procédureestlocalisé
dans
unautre
processus
�Princip
e:
�Sé
maphore
appelinitialisé
à0
�Sé
maphore
retour
initialisé
à0
�Serveur
Client
répéter
...
P(appel)
preparationParamAppel()
analyseParamAppel()
V(appel)
...
P(retour)
préparationParamRetour()
analyseParamRetour()
V(retour)
...
finRépéter
Serveurestle
serveu
rd’«ap
peld
eprocéd
ure».
Ilse
met
enattented’un
appe
lenfaisa
ntP(appel)
.
Client
démarre.Ilp
répa
resesp
aram
ètresd
’app
elen
lesm
ettant,p
arexem
ple,da
nsun
ezon
edem
émoire
partag
ée.A
vecV(appel)
,ilp
révientServeurde
ladispon
ibilité
decesinform
ations.
Serveurestalorsréactiv
é.Il
analyselespa
ramètresd’ap
pel,eff
ectuesontraitementet
stocke
lespa
-ramètresde
retour
dans
uneau
trezone
demém
oire
partag
ée.Av
ecV(retour),
ilprévient
Client
dela
dispon
ibilité
decesinform
ations.Ils
emet
ensuite
enattented’un
autreap
pel.
Client
estréactiv
é,an
alyselespa
ramètresretour
etpo
ursuitsontraitement.
TEL
ECOM
SudP
aris
—Dom
inique
Bouille
tet
Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M211
3
3Résolutionde
prob
lèmes
desynchron
isatio
ntypiqu
es3.4Pr
oducteurs/Con
sommateu
rs
#16
' &
$ %
3.4Prod
ucteurs/Co
nsom
mateurs
3.4.2
Objectif
....................................................................18
3.4.2
Princip
e...................................................................1
83.4.4
Dépo
sere
textraire
.........................................................21
3.4.4
Exem
ple.
..................................................................21
3.4.6K
prod
ucteurs.
............................................................25
3.4.6
Exem
plede
prob
lèmeavec
2prod
ucteurs.
...................................2
53.5.1
Solutio
ncomplète.
.........................................................2
8
#17
' &
$ %
3.4.1Objectif
�Pe
rmettre
lecontrôle
deflu
xentre
un(oudes)
prod
ucteur(s)e
tun(oudes)
consom
mateur(s
)danslecaso
ùils
commun
iquent
viaun
tampo
nmém
oire
deN
cases
�1.
ExécutionProduc
:ilp
rodu
itinfo0
info0
2.Ex
écutionProduc
:ilp
rodu
itinfo1
info0
info1
3.Ex
écutionConso:ilc
onsommeinfo0
info1
4.Ex
écutionProduc
:ilp
rodu
itinfo2
info1
info2
Cepa
tron
estu
negéné
ralisationde
sfonc
tionn
alité
soff
ertespa
rlestube
s(transitd’inform
ationentreK
processusprod
ucteursetP
processusconsom
mateurs).
TEL
ECOM
SudP
aris
—Dom
inique
Bouille
tet
Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M211
4
3Résolutionde
prob
lèmes
desynchron
isatio
ntypiqu
es3.4Pr
oducteurs/Con
sommateu
rs
#18
' &
$ %
3.4.2Principe
�Sé
maphore
infoPreteinitialisé
à0
�Sé
maphore
placeDispo
initialisé
àN
�Produc
Conso
répéter
répéter
...
P(infoPrete)
calcul(info)
extraire(info)
P(placeDispo)
V(placeDispo)
déposer(info)
utiliser(info)
V(infoPrete)
finRépéter
...
finRépéter
Ici,le
prod
ucteur
Produc
peut
écrir
eN
inform
ations
avan
td’être
bloq
ué(degré
delib
ertéN).
Cha
queité
ratio
nde
Consolib
èreun
ecase.
#19
' &
$ %
3.4.3Dép
oser
etextraire
�Le
tampo
nne
peut
s’étend
reàl’infi
ni→
Tampo
ngéré
defaçoncir
culaire,
c’est-à-dire
quequ
anddernièr
ecase
utilis
ée,retou
ràla
prem
ière
�Ilfaut
:�
unindice
dedépo
tiDépot
�un
indice
d’extra
ctioniExtrait
�ajou
terà
l’initia
lisationiDépot
=0et
iExtrait
=0
�déposer(info)
tampon[iDépot]
=info
iDépot
=(iDépot+1)
modulo
N
�extraire(info)
info
=tampon[iExtrait]
iExtrait
=(iExtrait+1)
modulo
N
TEL
ECOM
SudP
aris
—Dom
inique
Bouille
tet
Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M211
5
3Résolutionde
prob
lèmes
desynchron
isatio
ntypiqu
es3.4Pr
oducteurs/Con
sommateu
rs
#20
' &
$ %
3.4.4Ex
emple
1.Onsupp
osequ
’àun
instantd
onné,letampo
nestd
ansl’ét
atsuiva
nt:
�Ta
mpo
n:
info8
�valeurSem
[placeDispo]
=4etvaleurSem
[infoPrete
]=1
�iDepot
=4etiExtrait
=3
2.Ex
écutionProduc
:ilp
rodu
itinfo9
�Ta
mpo
n:
info8
info9
�valeurSem
[placeDispo]
=3etvaleurSem
[infoPrete
]=2
�iDepot
=0etiExtrait
=3
3.Ex
écutionProduc
:ilp
rodu
itinfoA
�Ta
mpo
n:
infoA
info8
info9
�valeurSem
[placeDispo]
=2etvaleurSem
[infoPrete
]=3
�iDepot
=1etiExtrait
=3
4.Ex
écutionConso:ilc
onsommeinfo8
#21
' &
$ %
�Ta
mpo
n:
infoA
info9
�valeurSem
[placeDispo]
=3etvaleurSem
[infoPrete
]=2
�iDepot
=1etiExtrait
=4
NB
:
•déposer(info)et
extraire(info)
sont
simples
grâceau
xsémap
horesplaceDispo
etinfoPrete.
•La
valeur
dess
émap
horesn
esuffitp
asàdé
term
iner
oùilfaut
écrir
eou
lireen
prem
ier.Si
onconsidère
lesde
uxtampo
nsmém
oire
suivan
ts:
–Ta
mpo
n1:
info
info
info
valeurSem
[placeDispo]
=2etvaleurSem
[infoPrete
]=3
iDepot
=3etiExtrait
=0
–Ta
mpo
n2:
info
info
info
TEL
ECOM
SudP
aris
—Dom
inique
Bouille
tet
Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M211
6
3Résolutionde
prob
lèmes
desynchron
isatio
ntypiqu
es3.4Pr
oducteurs/Con
sommateu
rs
valeurSem
[placeDispo]
=2etvaleurSem
[infoPrete
]=3
iDepot
=0etiExtrait
=2
Silesvaleursde
sémap
horessont
identiq
ues,iDepot
etiExtrait
sont
diffé
rents!
#22
' &
$ %
3.4.5
Kprod
ucteurs
�Ce
mod
èlesemblerester
valab
lepo
urplusieu
rsprod
ucteurs(
ouplusieu
rsconsom
mateurs)
enterm
esde
synchron
isatio
n...
�...m
aisen
faitrisqu
ed’inform
ationperdue
àcausedesind
icesiDé
pot(
pour
Kprod
ucteurs)
ouiExtrait(pou
rPconsom
mateurs)
quison
tdes
varia
bles
glob
ales
(cf.exem
ple)
#23
' &
$ %
3.4.6Ex
emplede
prob
lèmeavec
2prod
ucteurs
�soitun
tampo
navecN
=5et
deux
dépo
tseff
ectués
sans
extra
ction
�L’état
courante
stalo
rs:
�Ta
mpo
n:
info0
info1
�valeurSem
[placeDispo]
=3etvaleurSem
[infoPrete
]=2
�iDepot
=2etiExtrait
=0
TEL
ECOM
SudP
aris
—Dom
inique
Bouille
tet
Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M211
7
3Résolutionde
prob
lèmes
desynchron
isatio
ntypiqu
es3.4Pr
oducteurs/Con
sommateu
rs
#24
' &
$ %
Exem
plede
prob
lèmeavec
2prod
ucteurs(suite)
1.Dé
butd
’exécutionde
Produc1:
P(placeDispo);tampon[iDépot]
=infoP1;...
�Ta
mpo
n:
info0
info1
infoP1
�valeurSem
[placeDispo]
=2etvaleurSem
[infoPrete
]=2
�iDepot
=2etiExtrait
=0
2.Ex
écutioncomplètede
Produc2:P
(placeDispo);tampon[iDépot]=
infoP2;iDépot=(iDépot+1)
modulo
N;V(infoPrete)
�Ta
mpo
n:
info0
info1
infoP2
�valeurSem
[placeDispo]
=1etvaleurSem
[infoPrete
]=3
�iDepot
=3etiExtrait
=0
3.Find’exécutionde
Produc1:
...;iDépot=(iDépot+1)modulo
N;V(infoPrete)
�Ta
mpo
n:
info0
info1
infoP2
i!*?#
#25
' &
$ %
�valeurSem
[placeDispo]
=1etvaleurSem
[infoPrete
]=4
�iDepot
=4etiExtrait
=0
Con
clusionde
l’exemple:
•Va
leur
dessémap
horeset
indicescorrecte
:
–1case
libre
:lade
rnière
–4infosdispon
iblesàpa
rtir
de0
•Mais –infoP1
écrasée(par
infoP2
)–
Vuqu
ele
procha
inprod
ucteur
écrir
ada
nsla
case
4(la
dernière),
l’informationqu
iseraluepa
run
consom
mateu
ren
case
3sera
erroné
e:l’in
form
ationen
case
3estno
nvalid
e.
TEL
ECOM
SudP
aris
—Dom
inique
Bouille
tet
Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M211
8
3Résolutionde
prob
lèmes
desynchron
isatio
ntypiqu
es3.5Le
cteu
rs/réd
acteurs
#26
' &
$ %
3.4.7So
lutio
ncomplète
�Ilfaut
uneexclu
sionmutuelle
surd
époser()
etextraire()
autour
deiDépot
etiExtrait
�Po
urK
prod
ucteurs:
�Sé
maphore
mutexinitialisé
à1
�dépo
ser(info)
P(mutex)
|tampon[iDépot]=info
|iDépot=(iDépot+1)
modulo
NV(mutex)
�Po
urP
consom
mateurs,
idem
pour
extraire
�Po
urK
prod
ucteurse
tPconsom
mateurs,
utilis
erdeux
sémaphoresm
utexPet
mutexC
#27
' &
$ %
3.5Lecteurs/rédacteurs
3.5.1
Objectif
....................................................................28
3.5.3
Solutio
nde
base............................................................30
3.5.3
Analy
se....................................................................30
3.5.4
Solutio
navec
prior
itésé
gales
................................................31
TEL
ECOM
SudP
aris
—Dom
inique
Bouille
tet
Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M211
9
3Résolutionde
prob
lèmes
desynchron
isatio
ntypiqu
es3.5Le
cteu
rs/réd
acteurs
#28
' &
$ %
3.5.1Objectif
�Pe
rmettre
unecompétitioncohérenteentre
deux
typesd
eprocessus(
les«lec
teurs»
etles
«rédacteurs
»):
�Plusieu
rslec
teursp
euvent
accéders
imultanémentà
laressou
rce
�Lesr
édacteurss
onte
xclusifse
ntre
euxpo
urleu
rexploita
tionde
laressou
rce
�Un
rédacteure
stexclu
sifavec
leslec
teurs
Cepa
tron
perm
et,p
arexem
ple,
d’interdire
àun
processusd’écrir
eda
nsun
fichier,s
ides
processussont
entrainde
lire(sim
ultané
ment)
cefichier.D
eplus,d
euxprocessusne
peuv
enté
crire
simultané
mentd
ansle
fichier.E
nrevanche
,plusie
ursprocessuspe
uventliresim
ultanémentle
fichier.
Lepa
radigm
eLecteurs/Réd
acteur
perm
etde
réalise
rune
exclusionmutue
lleentreu
ngrou
ped’entit
és(le
slecteu
rs)et
uneentit
é(le
réda
cteu
r).Ile
stgéné
ralisab
leàl’e
xclusio
nmutue
lleentrede
uxgrou
pesd’entit
és(cf.TP
noté
2006
,que
stion2:e
xclusio
nmutue
lleentrelesna
inset
lesou
rs).
#29
' &
$ %
3.5.2So
lutio
nde
base
�Sé
maphore
mute
xGinitialisé
à1
�Sé
maphore
mute
xLinitialisé
à1
�En
tierN
Linitialisé
à0
�Le
cteu
rRé
dact
eur
P(mu
texL
)P(
mute
xG)
|NL
=NL
+1
|ec
ritu
resE
tLec
ture
s()
|si
NL==
1al
ors
V(mu
texG
)|
P(mu
texG
)|f
inSi
V(mu
texL
)le
ctur
es()
P(mu
texL
)|N
L=
NL-
1|s
iNL
==0
alor
s|
V(mu
texG
)|f
inSi
V(mu
texL
)
•Le
«G
»de
mutexG
signifie
«Gén
éral
».
•Le
«L»de
mutexL
signifie
«Le
cteu
r».
TEL
ECOM
SudP
aris
—Dom
inique
Bouille
tet
Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M212
0
3Résolutionde
prob
lèmes
desynchron
isatio
ntypiqu
es3.5Le
cteu
rs/réd
acteurs
#30
' &
$ %
3.5.3Analyse
�La
solutio
nde
base
fonctio
nne,
mais
onconstate
qu’il
yaun
epo
ssibilit
éde
famine
pour
lesrédacteurs.
�Po
urévite
rcette
famine,
onajou
teles
contraintess
uivantes
:�
Sila
ressou
rceestu
tilisé
eparu
nlec
teur
:I
Tout
écriv
ainestm
isen
attente.
ITo
utlec
teur
esta
ccepté
s’iln
’yapasd
’écriv
ainen
attente.
ITo
utlec
teur
estm
isen
attentes’ily
aun
écriv
ainen
attente.
Exem
plede
faminepo
urlesréda
cteurs
:
•Unlecteu
rL
1se
met
àlire
•Unréda
cteu
rR
arriv
eet
semet
donc
enattentede
lafin
delecturede
L1.
•Unlecteu
rL
2arriv
e.Vu
l’algorith
me,
ilestau
toris
éàliresans
attend
re
•L
1term
inesa
lecture.
Com
meL
2n’apa
sfin
isalecture,R
continue
àattend
re.
•Unlecteu
rL
3arriv
e...
•R
peut
potentielle
mentne
jamaisréussir
àécrir
e.
#31
' &
$ %
3.5.4So
lutio
navec
priorités
égales
�Sémaphore
mute
xGinitialisé
à1
�Sémaphore
mute
xLinitialisé
à1
�Sémaphore
fifo
initialisé
à1
�En
tierN
Linitialisé
à0
�Le
cteu
rRé
dact
eur
P(fi
fo)
P(fi
fo)
P(mu
texL
)P(
mute
xG)
NL=
NL+
1V(
fifo
)si
NL==
1al
ors
ecri
ture
sEtL
ectu
res(
)P(
mute
xG)
V(mu
texG
)fi
nSi
V(mu
texL
)V(
fifo
)le
ctur
es()
P(mu
texL
)NL
=NL
-1
siNL
==0
alor
sV(
mute
xG)
finS
iV(
mute
xL)
TEL
ECOM
SudP
aris
—Dom
inique
Bouille
tet
Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M212
1
Synchron
isatio
nentreprocessus
4Interblocage
fifo
signifie
«FirstIn
FirstOut
».
Attentio
n,cettesolutio
nne
marchequ
epa
rcequ
’onsupp
osequ
ela
filed’attentede
processuse
nattente
surle
sémap
hore
fifo
estelle-m
êmegéréeen
FIFO
!Sic
en’estpa
sle
cas,
onpe
uten
core
avoirfamine.
#32
' &
$ %
4Interblocage
4.2
Intro
duction.................................................................3
44.2
Généralités...................................................................34
#33
' &
$ %
4.1Introd
uctio
n�
Interblocage
(Deadlock)
=toutesituatio
ntelle
quedeux
processusa
umoins
sont
chacun
enattented’un
eressou
rceno
nparta
geable
déjà
allou
éeàl’autre
�Ex
emple:e
xclusio
nmutuelle
surd
euxressou
rces
diffé
rentes
�Sé
maphore
mutex1
initialisé
à1
�Sé
maphore
mutex2
initialisé
à1
�Prog1
Prog2
...
...
P(mutex1)
P(mutex2)
|accès
àressource1
|accès
àressource2
|P(mutex2)
|P(mutex1)
||accèsàressource2
||accèsàressource1
|V(mutex2)
|V(mutex1)
V(mutex1)
V(mutex2)
...
...
�Lesd
euxprog
rammes
sebloq
ueront
mutuellements
iProg1
faitP(mutex1)alo
rsqu
esim
ultanémentP
rog2
faitP(mutex2)
TEL
ECOM
SudP
aris
—Dom
inique
Bouille
tet
Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M212
2
Synchron
isatio
nentreprocessus
#34
' &
$ %
4.2Généralité
s
�Sy
nonymes
d’interblocage
:verroumortelo
uétreinte
fatale
�Co
ndition
snécessaire
sets
uffisantes
(Coff
man,1
971)
4CN
Ssim
ultanées
:1.
Ressou
rces
enexclu
sionmutuelle
(ressou
rces
concernées
nonparta
geables
)2.
Processuse
nattente(processus
conserve
lesressou
rces
allou
ées)
3.No
npréemptiondesr
essources(
ressou
rces
concernées
nonpréemptibles
)4.
Chaîn
ecir
culaire
deprocessusb
loqu
és(généralisatio
ndesd
emandesr
écipr
oques)
�3stratégies
delutte
contre
lesblocages
:�
Préventio
n(statiq
ue)
�Dé
tectionavec
guériso
n�
Évite
ment(
préventio
ndynamique)
L’interblocage
est
approfon
dida
nsl’U
.V.«
Algorith
mique
etcommun
ications
des
applications
»(C
SC45
09).
#35
' &
$ %
5Mise
enoeuvre
dans
unsystèm
ed’exploitatio
n
�Sé
maphores(
cf.c
hapitre
s«Co
mmun
icatio
nsinter-p
rocessus
»et
«Th
reads»
)�
SémaphoresIPC
�Sé
maphoresP
osix
�Mon
iteurs(
oucond
ition
souvaria
bles-con
ditio
n)�
Lemon
iteur
ajou
tele
type
conditionet
unefiled’attenteassocié
eàchaque
varia
blede
type
conditionain
siqu
edesp
rimitivesw
aitx,
signal
x(x
étant
unecond
ition
).�
Sibesoin,u
nprocessuss
ebloq
ueparw
aitet
libèrele
mon
iteur
�Un
processusr
éveille
undesp
rocessus
enattentepars
ignal
�Ilpeut
égale
mentr
éveiller
tous
lesprocessuse
nattenteparb
roadcast
•Le
smon
iteurs(plusexactementlescond
ition
s)C
sont
étud
iées
dans
lechap
itre«Threads
».
•En
Java,o
na:
–le
mot-clé
synchronized
surlesmétho
des
–lesmétho
deswait()
,notify()et
notifyAll()
–un
econd
ition
anon
ymeavec
uneseulefiled’attentepa
rmon
iteur
TEL
ECOM
SudP
aris
—Dom
inique
Bouille
tet
Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M212
3
Synchron
isatio
nentreprocessus
•Des
exem
ples
decode
enenvironn
ementW
indo
wss
ontp
résentés
dans
l’article«OMG,M
ulti-
Threading
iseasie
rtha
nNetwo
rking»(http://www.gamasutra.com/view/feature/4006/sponsored_feature_
omg_.php
)
Lalib
rairie
C++11
n’intègre
que
les
mutex
etles
cond
ition
s[W
illiams,
2012
],car
ses
auteurs
ontestim
équ
elessémap
horespo
uvaientdo
nner
lieu
àtrop
d’erreur
(cf.
http://www.open-
std.org/
jtc1/sc22/wg21/docs/papers/2006/n2043.html#SemaphoreTypes).Certainsau
teursestim
entqu
ecet
argu
ment
netie
ntpa
set
qu’en
fait
les
sémap
hores
offrent
une
gran
depo
lyvalenc
e:ils
prop
osent
unelib
rairie(portable,
maisno
nstan
dard)de
sémap
horesC++
(cf.
http://preshing.com/20150316/
semaphores-a
re-s
urprisingly-
versatile/
).
Bib
liogr
aphi
edu
chap
itre
[Dow
ney,
2005
]Dow
ney,
A.B
.(20
05).
The
LittleBo
okof
Semaphores.
GreenTe
aPress,h
ttp://g
reentea-
press.c
om/sem
apho
res/.Ve
rsion2.1.5.
[Williams,
2012
]W
illiams,
A.(201
2).
C++
Con
currency
inactio
n,Pr
actic
alMultithreading
.Man
ning
Publications,fi
rsted
ition
.
TEL
ECOM
SudP
aris
—Dom
inique
Bouille
tet
Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M212
4
Thre
ads
oupr
oces
sus
lége
rs
Éri
cR
enau
ltet
Fré
déri
que
Silb
er-C
haus
sum
ier
mod
ule
CSC
4508
/M2
Avr
il20
18 125
Threads
ouprocessuslégers
1Pr
ésentatio
n
#2
' &
$ %
Plan
dudo
cument
1Présentatio
n....................................................................4
2Créatio
n/destructionde
threads.
...............................................1
13
Parta
gedesd
onnées
...........................................................1
94
Synchron
isatio
n................................................................25
5Ut
ilisationet
limita
tions
dest
hreads
............................................32
6Au
tresf
onctions
dela
bibliothèque
POSIXthreads...............................37
#3
' &
$ %
1Présentatio
n
1.1
Bibliographie.
.................................................................4
1.3
Threads.
.....................................................................5
1.3
Détacher
leflo
td’ex
écutiondesr
essources......................................7
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
212
6
Threads
ouprocessuslégers
1Pr
ésentatio
n
#4
' &
$ %
1.1Bibliographie
�«Co
mpu
terS
ystems:
AProg
rammer’sPe
rspectiv
e»,
R.E.
Bryant
etD.
R.O’Hallaron
,Prentice
Hall,
2003
.�
«UN
IXSY
STEM
SProg
ramming:c
ommun
icatio
n,Co
ncurrencyandTh
reads»
,K.
A.Ro
bbinse
tS.R
obbins,P
rentice
Hall,
2003
.�
«Prog
rammationsystèm
een
Csous
Linu
x»,
C.Blaess,E
yrolles
,200
0.�
«Un
derst
anding
theLinu
xkernel,
2ndedition
»,Da
niel
P.Bo
vete
tM.C
esati,
O’Reilly,
2003
.�
Threadss
pécifi
quem
ent
�«Pt
hreads
Prog
ramming:A
POSIX
Standard
forB
etterM
ultip
rocessing»,
B.Nichols,D.
Buttlar
etJ.
P.Farre
ll,O’Reilly
andAs
socia
tes,19
96.
�«Th
readsP
rimer
:AGu
ideto
MultithreadedProg
ramming»,
B.Lewis,D.
Berg
etB.
Lewis,Prentic
eHa
ll,19
95.
�«Prog
rammingWith
POSIXTh
reads»
,D.B
utenho
f,Ad
disonWesley
,199
7.�
«Te
chniqu
esdu
multithread:d
uparallélismedans
lesprocessus»
,B.Z
ignin,
Herm
ès,1
996.
Lecoursd
eBr
yant
etHallaronestt
rèsb
ienfait.
Ilpa
rtde
scou
ches
basses
pour
explique
rles
diffé
rentes
notio
ns:les
imag
esmém
oire
desprocessuspo
urexplique
rla
notio
nde
thread
,les
instructions
liées
àun
electureet
àun
eécrit
urepo
urexplique
rlesprob
lèmes
desynchron
isatio
navec
pour
exem
plele
compteu
r.Le
livre
Rob
bins
etRob
bins
estt
rèsp
rogressif.Ilexp
lique
notammentles
ensd
ethread-safe
avec
strtok()
commeexem
ple(p.3
9)et
yrevientd
ansu
nchap
itresurles
thread
sPOSIX
avec
commeexem
ples
strerr()
eterrno(p.4
32).Le
sthread
ssont
expliqué
ssurtroischap
itres
avec
beau
coup
d’exem
ples,n
otam
mentde
sexem
ples
détaillés
degestiondessig
naux
avec
desthread
s.Le
livre
deC.B
laessfou
rnitbe
aucoup
d’explications
surl’im
plan
tatio
ndest
hreads
sous
Linu
xmêm
es’il
estdé
jàun
peuan
cien
parexem
plece
quic
oncernela
directive_REENTRANT
estdé
jàob
solète.
#5
' &
$ %
1.2Threads
�Traductio
n:fi
ld’ex
écution,
processuslégers
�Princip
e:d
étacherleflo
td’ex
écutiondesr
essources
�Intro
duits
dans
divers
langagese
tsystèmes
:�
Prog
rammationconcurrente
�Ut
ilisationdesr
essourcess
imultanément:
recouvrementd
ucalcu
letd
esentré
es/sortie
s�
Exploitatio
ndesa
rchitectures
multip
rocesseurs
IAr
chite
ctures
SMPou
CMP
IPlus
généralem
entd
esarchite
ctures
àmém
oire
parta
gée
�Ex
ploitatio
nde
latechno
logiehyper-t
hreading
SMP
:Sym
metricMultiP
rocessor
CMP
:ChipMultiP
rocessor
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
212
7
1Pr
ésentatio
n1.3Détache
rle
flotd’exécutionde
sressou
rces
#6
' &
$ %
1.3Détacherle
flotd’exécutiondesressou
rces
1.3.1
Visio
ntra
ditio
nnelled’un
processus...........................................7
1.3.3
Autre
visiond’un
processus.
.................................................9
1.3.3
Processusm
ulti-thread
.......................................................9
#7
' &
$ %
1.3.1Vision
tradition
nelle
d’un
processus
�Processusm
ono-thread
�Co
ntexte
:con
texted’exécution+
contexte
dunoyau
�Espace
d’adressage:c
ode,
donn
éese
tpile
brk PC
0
3 G
o
Co
de
, d
on
né
es
et
pil
e
SP
Ta
s
Do
nn
ée
s
Co
de
Pil
e
Co
nte
xte
du
pro
ce
ss
us
Po
inte
ur
de
pil
e (
SP
)
Str
uc
ture
s M
V
Ta
ble
s d
e d
es
cri
pte
urs
Po
inte
ur
brk
Co
nte
xte
du
no
ya
u:
Co
mp
teu
r o
rdin
al
(PC
)
Re
gis
tre
s g
én
éra
ux
Re
gis
tre
d’é
tat
Co
nte
xte
d’e
xé
cu
tio
n:
Surun
emachine
32bits,leprocessusdisposed’un
espa
ced’ad
ressag
es’é
tend
antjusqu’à3Go.
Lataille
del’e
spaced’ad
ressag
ed’un
processusestplus
impo
rtan
tesurun
emachine
64bits,m
aislesexplications
suivan
tesr
estent
valables.S
urlesché
made
cettep
age,lesd
ifférents
segm
ents
sont
sché
matisé
sentroisz
ones.
Lazone
“Cod
e”contient
lecode
etlesdo
nnéesen
écrit
ureseule,
lazone
“Don
nées”contient
lesdo
nnéesen
lecture/écrit
ureet
le“T
as”contient
lesdo
nnéesalloué
esdy
namique
ment.
Lazone
“Pile
”représente
lapile
d’exécutiondu
processus.
Lecontexte
duprocessuse
streprésenté
divisé
ende
ux.L
econ
texted
’exécu
tionreprésente
lesinformations
surl’étatd
’exécu
tiondu
prog
ramme:
registres,instructioncouran
teet
pointeur
depile.L
econ
texted
uno
yau
représente
lesinformations
surl’étatd
esressou
rces
nécessairesa
uprocessus:
structures
perm
ettant
degérer
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
212
8
1Pr
ésentatio
n1.3Détache
rle
flotd’exécutionde
sressou
rces
lamém
oire,les
tables
dede
scrip
teursp
oura
ccéd
erau
xfichiers,au
xpo
rtsd
ecommun
ication...et
lepo
inteur
vers
lafin
dusegm
entde
donn
ées,
indiqu
épo
inteur
brk(voirle
chap
itresurla
mém
oire).
Lessché
mas
sont
tirés
ducoursde
O’H
allaronet
al.à
l’université
CarnegieMellon.
#8
' &
$ %
1.3.2Au
trevisio
nd’un
processus
�Dé
tacher
leflo
td’ex
écutiondesr
essources
�Processusm
ono-thread
�Fild
’exécutionou
thread
:pile
+contexte
d’exécution
�Co
de,d
onnées
etle
contexte
dunoyau
Co
de
et
do
nn
ée
s
brk PC
Co
nte
xte
du
no
ya
u:
Ta
ble
s d
e d
es
cri
pte
urs
Po
inte
ur
brkTa
s
Do
nn
ée
s
Co
de
Str
uc
ture
s M
V
Th
rea
d
Co
nte
xte
du
th
rea
d:
Pil
e
SP
Po
inte
ur
de
pil
e (
SP
)
Co
mp
teu
r o
rdin
al
(PC
)
Re
gis
tre
d’é
tat
Re
gis
tre
s g
én
éra
ux
Cette
autrevisio
ndu
processusd
étache
leflo
td’exécu
tionde
sressources.Le
sinformations
nécessairesa
ucoursd
edérou
lementd
uprog
rammec
’est-à-dire
lapileet
lecontexte
d’exécutionsont
isolées
desinformations
conc
erna
ntlesressou
rces
stocka
ntle
code
,les
donn
éeset
lecontexte
duno
yau.
Cecifaitdo
ncap
paraîtr
elesinform
ations
nécessairesau
fild’exécution,
enan
glais«thread
»et
lesinform
ations
quip
ourron
têtre
partag
éespa
rplusieursfilsd’exécution.
#9
' &
$ %
1.3.3Processusmulti-thread
�Processusm
ulti-thread
�Plusieu
rsfilsd
’exécution
�Co
de,d
onnées
etcontexte
dunoyauparta
gés:
notammentp
artage
desfi
chier
set
desp
orts
decommun
icatio
n
Pil
e 1
Pil
e 2
Th
rea
d 2
Th
rea
d 1
SP
1
PC
1
Co
de
et
do
nn
ée
s p
art
ag
és
Co
nte
xte
du
th
rea
d 1
:
Co
nte
xte
du
no
ya
u:
Ta
ble
s d
e d
es
cri
pte
urs
Po
inte
ur
brkTa
s
Do
nn
ée
s
Co
de
Str
uc
ture
s M
V
Re
gis
tre
s g
én
éra
ux
Re
gis
tre
d’é
tat
PC
2
SP
2
Co
nte
xte
du
th
rea
d 2
:
Re
gis
tre
s g
én
éra
ux
Re
gis
tre
d’é
tat
Dan
slecasd
’unprocessusm
ulti-thread
,les
diffé
rentsfi
lsd’exécutioncaractérisé
spar
leur
pile,l’étatd
esregistreset
lecompteu
rordina
lsepa
rtag
entle
code
,les
donn
ées,le
taset
lecontexte
duno
yauno
tamment
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
212
9
Threads
ouprocessuslégers
2Création/
destructionde
thread
s
lestables
dede
scrip
teurs.
Lesfichierset
lespo
rtsde
commun
icationpa
rexem
plesont
partag
és.
Lapile
d’un
processusha
bituel
n’estcontrainte
quepa
rla
limite
dela
zone
nommée
tas,
dans
la-
quelle
lesvaria
bles
dyna
mique
ssont
alloué
es.En
principe
,la
pile
d’un
telprocessuspo
urrait
croître
jusqu’à
remplir
l’essentie
lde
l’espaced’ad
ressag
edu
prog
ramme,
soit
environ
3Go.
Dan
sle
casd’un
prog
ramme
multit
hread,
les
diffé
rentes
piles
doivent
être
posit
ionn
ées
àde
sem
placem
ents
figés
dès
lacréatio
nde
sthread
s,ce
quiim
pose
deslim
itesde
taille
puisq
u’ellesne
doiventpa
sse
rejoindre.
Dan
sla
bibliothèque
POSIX,l’a
dresse
etla
taille
max
imum
dela
pile
sont
donn
ées
par
:_PO
-SIX_THREA
D_AT
TR_ST
ACKADDR
et_PO
SIX_THREA
D_AT
TR_ST
ACKSIZE
.Latailleminim
umde
lapile
estdé
finie
parPT
HREA
D_ST
ACK_MIN
correspo
ndan
tà16
Kosous
Linu
x.(V
oirle
“Blaess”
p.28
6-28
7)
#10
' &
$ %
2Créatio
n/destructionde
threads
2.1
Pthread“H
ellowo
rld”.
.......................................................11
2.3
Ensemblede
threadsp
airs.
...................................................1
32.3
ThreadsP
OSIX:c
réation/
destruction.
........................................13
Nou
sprésenton
sici
l’API
PThread(P
OSIX
thread
)utilisé
een
C.[?]
présente
l’intégratio
nde
sthreads
àla
librairieC++11
.Ile
sttoutefoispo
ssible
d’utilisera
ussila
librairiepthread(auris
qued’un
emoins
bonn
epo
rtab
ilité?).
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
213
0
Threads
ouprocessuslégers
2Création/
destructionde
thread
s
#11
' &
$ %
2.1Pt
hread“H
ello
world
”
�Interfa
cePO
SIXPt
hread
�Fo
urniru
nefonctio
npo
intd
’entré
eth
rea
d p
rin
cip
al
thre
ad
pa
ir
exit()
ap
pe
l p
thre
ad
_cre
ate
()
pth
rea
d_
exit()
fin
de
pth
rea
d_
cre
ate
()
prin
tf()
ap
pe
l p
thre
ad
_jo
in()
fin
de
pth
rea
d_
join
()
exé
cu
tio
n d
e t
hre
ad
_fu
nctio
n
�Visualisatio
ndesd
ifférents
threadsa
vecla
commande
ps
Voilà
unprem
ierprog
rammemulti-thread
.Ceprog
rammeutilise
l’interface
POSIX
Pthread.
Ildo
itêtre
compilé
avec
l’option-pthread
degcc(voirle
mande
gcc)
:gcchelloworld.c
-pthread
-ohelloworld
#inc
lude
<pth
read
.h>
#inc
lude
<tim
e.h>
#inc
lude
<err
or.h
>#i
nclu
de<s
tdli
b.h>
#inc
lude
<std
io.h
>
void
*thr
ead_
func
tion
(vo
id*a
rg)
{st
ruct
time
spec
slee
ptim
e;
prin
tf("
Hell
owo
rld\
n");
/*ra
lent
isse
ment
*/sl
eept
ime.
tv_s
ec=
10;
slee
ptim
e.tv
_nse
c=
0;
nano
slee
p(&s
leep
time
,NU
LL);
pthr
ead_
exit
(NUL
L);
} int
main
(int
argc
,ch
ar*
argv
[])
{pt
hrea
d_t
thre
ad;
int
rc;
rc=
pthr
ead_
crea
te(
&thr
ead,
NULL
,th
read
_fun
ctio
n,NU
LL);
if(r
c)er
ror(
EXIT
_FAI
LURE
,rc
,"p
thre
ad_c
reat
e");
rc=
pthr
ead_
join
(thr
ead,
NULL
);if
(rc)
erro
r(EX
IT_F
AILU
RE,
rc,
"pth
read
_joi
n");
retu
rnEX
IT_S
UCCE
SS;
}
Unthread
estcréé
pour
afficher
“Hello
world”.
Lethread
principa
ldéclareun
thread
detype
pthread_t
etap
pelle
lafonc
tionpthread_create()
.Cette
fonc
tionpren
dcommeargu
mentl’a
dresse
duthread
,les
attributsde
cethread
(sou
vent
àNULL
),un
pointeur
vers
lafonctio
npo
intd’entrée
icit
hread_function()
etenfin
unpo
inteur
vers
lesargu
ments
decettefonc
tion(NULLda
nsno
trecas).
Lethread
créé
exécute
lafonctio
nthread_function()
etse
term
ine
avec
pthread_exit()
.
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
213
1
Threads
ouprocessuslégers
2Création/
destructionde
thread
s
pthread_exit()
pren
dcommeargu
mentun
eéventuelle
valeur
deretour.Le
thread
principa
lattend
laterm
inaison
duthread
créé,lib
èrelesressou
rces
liées
àce
thread
etrécupè
rela
valeur
deretour
avec
pthread_join()
.
Lethread
principa
lse
term
ineavec
exit()
.Il
faut
noterqu
el’a
ppel
àexit()
envoie
unsig
nalde
term
inaisonàtous
lesthread
sdu
processus.
Ilfaut
donc
s’assurer,c
ommec’estle
casicig
râce
àl’a
ppel
àpthread_join()
,que
tous
lesau
tres
thread
ssont
déjà
term
inés.
Lacomman
deps
-L(oups
-m)selonlesversions
affichelesdiffé
rentsthread
s.Vé
rifiez
qu’unseul
iden
-tifi
antde
processusap
paraît
pour
l’ensem
blede
sthread
s.
Rem
arqu
e:
Pour
lesa
ncienn
esversions
dela
libc(in
férie
ures
àla
libc6)ile
stné
cessaire
decompilerles
prog
rammes
multit
hreadavec
ladirective_REENTRANT
pour
défin
irde
sfon
ctions
réentran
tess
upplém
entaire
set
fournirun
edé
finition
correcte
deerrno.
Cette
directiven’estplus
nécessaire
àpa
rtir
dela
libc6
(voir
notammentfeatures.h
).
Interactivem
entpe
ndan
tle
cours:
exécutionsurun
emachine
dela
salle
deTP
duprog
ramme
helloworld
avec
tempo
risationpo
urvisualise
rlesdiffé
rentsthread
s.
#12
' &
$ %
2.2En
semblede
threadspairs
�Créatio
nd’un
ensemblede
threadsp
airs
�Pa
sd’ar
borescence
parent/enfantc
ommepo
urles
processus
T1
T2
T3
T4
T5
T6
Co
de
et
do
nn
ée
s p
art
ag
ée
s
Co
nte
xte
du
no
ya
u
Lesthread
sne
form
entpa
sun
earbo
rescen
cecommelesprocessus.
Lorsqu
’unprocessuscrée
unthread
,on
parle
alorsde
thread
principa
letde
thread
pair.
L’en
semblede
thread
scontient
alorsdeux
thread
s.Un
thread
,prin
cipa
louno
n,pe
utcréerun
autrethread
quir
ejoint
alorsl’e
nsem
blede
thread
s.
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
213
2
2Création/
destructionde
thread
s2.3Threads
POSIX
:création/
destruction
#13
' &
$ %
2.3Threads
POSIX
:création/
destruction
2.3.2
Identifi
catio
n...............................................................15
2.3.2
Utilis
ation.
.................................................................15
2.3.3
Attribu
ts...................................................................16
#14
' &
$ %
2.3.1Identifi
catio
n
�Un
équivalen
tdupid_t:p
thread_t
�Identifi
antd
uthread
courant:
�pt
hrea
d_t
pthr
ead_
self
(voi
d)
�Co
mparaiso
nde
deux
identifi
ants
:�
int
pthr
ead_
equa
l(p
thre
ad_t
thre
ad1,
pthr
ead_
tth
read
2)
Lesthreadssont
identifi
éspa
run
objetde
type
pthread_t.
Lafonc
tionpthread_self
perm
etde
conn
aîtrel’ide
ntifian
tdu
thread
couran
t(retou
rnéàl’a
ppel
dela
fonc
tion).
Sile
type
pid_testdé
finic
ommeétan
tun
entie
r,iln’en
estpa
sde
mêm
epo
urle
type
thread_t
.Sa
défin
ition
estdé
pend
ante
dusystèm
eutilisé.Aussi,
afin
d’évite
rtout
prob
lème,
lacompa
raiso
nde
deux
identifi
ants
dethread
esteff
ectuépa
rl’interméd
iaire
dela
fonc
tionpthread_equal.
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
213
3
2Création/
destructionde
thread
s2.3Threads
POSIX
:création/
destruction
#15
' &
$ %
2.3.2Utilisa
tion
�Créatio
n�
int
pthr
ead_
crea
te(p
thre
ad_t
*thr
ead,
pthr
ead_
attr
_t*a
ttr,
void
*(*
star
t_ro
utin
e)(v
oid
*),
void
*arg
)
�Te
rminais
on�
void
pthr
ead_
exit
(voi
d*r
etva
l)
�in
tpt
hrea
d_jo
in(p
thre
ad_t
thre
ad,
void
**th
read
_ret
urn)
�in
tpt
hrea
d_de
tach
(pth
read
_tth
read
)
�Attention:p
ourlaplup
artd
esfonctio
nsde
labibliothèque
ThreadsP
OSIX,
uncode
d’erreur
nonnu
lest
renvoyéen
casd
eprob
lèmemais
errnon’estp
asnécessair
ementp
osition
né.
pthread_create
perm
etde
créerun
nouv
eaufil
d’exécutionpo
urle
processuscouran
t.Po
urcela,le
prem
ierpa
ramètre
contient
l’adresse
oùsera
placél’ide
ntifian
tdu
thread
ausortir
dela
fonc
tion.
Lesecond
paramètre
pointe
surlesattributsassociés
authread
dèssa
créatio
n(cfles
tran
sparents
«Attrib
uts»).L
esde
uxde
rniers
paramètresreprésentent
respectiv
ementl’a
dresse
dela
fonc
tionde
vant
être
exécutée
parle
nouv
eauthread
etle
paramètre
fourni
àcettefonc
tion.
Lavaleur
retourné
eest0en
casde
succès
etle
code
del’e
rreu
rsin
on.
Lethread
s’exécu
tejusqu’àla
finde
lafonc
tion,
sauf
s’ile
ffectue
unap
pelà
pthread_exit
.Dan
sce
cas,
lefil
d’exécutioneste
xplicite
mentinterrompu
etla
valeur
passée
enpa
ramètre
correspo
ndàla
valeur
defin
d’exécutiondu
thread
.L’objet
spécifiéestde
type
void
*po
urde
sraiso
nsde
généric
ité.
Lesressou
rces
liées
àun
thread
nesont
paslib
éréeslorsqu
ece
thread
seterm
inesauf
s’ils
’agitd’un
thread
détaché.
Pour
libérer
lesressou
rces
liées
àun
thread
nondé
taché,
ilfaut
qu’unau
trethread
appe
llepthread_join
.
pthread_join
perm
etd’attend
rela
finde
l’exécu
tiond’un
thread
.Cette
fonc
tionbloq
uejusqu’àce
que
lefil
d’exécutionassociéàl’ide
ntifian
tdu
prem
ierpa
ramètre
seterm
ine.
Lavaleur
defin
d’exécutiondu
thread
estalorscopiée
àl’e
mplacem
entpo
inté
parle
second
paramètre.
pthread_detach
perm
etde
«dé
tacher
»un
fild’exécution,
c’est-à-dire
qu’il
n’estpa
spo
ssible
pour
unau
trethread
dese
synchron
iseravec
luiavec
lafonc
tionpthread_join
etqu
esesressou
rces
seront
automatique
mentlib
éréesdè
squ
’ilse
term
inera.
Lesthreads
peuv
entau
ssise
term
iner
parun
mécan
isme
d’an
nulatio
n.To
utthread
peut
deman
-de
rl’a
nnulation
d’un
autrethread
.Cha
quethread
contrôle
lefait
depo
uvoirêtre
annu
léou
non
(voir
pthread_cancel()
).
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
213
4
2Création/
destructionde
thread
s2.3Threads
POSIX
:création/
destruction
#16
' &
$ %
2.3.3At
tributs
�Créatio
net
destructiond’un
estructured’attribu
ts�
int
pthr
ead_
attr
_ini
t(p
thre
ad_a
ttr_
t*a
ttr)
�in
tpt
hrea
d_at
tr_d
estr
oy(p
thre
ad_a
ttr_
t*a
ttr)
�État
joignable/détaché
�in
tpt
hrea
d_at
tr_g
etde
tach
stat
e(co
nst
pthr
ead_
attr
_t*a
ttr,
int
*det
achs
tate
)
�in
tpt
hrea
d_at
tr_s
etde
tach
stat
e(co
nst
pthr
ead_
attr
_t*a
ttr,
int
deta
chst
ate)
�→
deta
chst
ate
=PT
HREA
D_CR
EATE
_[JO
INAB
LE|D
ETAC
HED]
Cha
que
fild’exécution
est
doté
d’un
certain
nombre
d’attributs,
regrou
péda
nsun
type
opaq
uepthread_attr_t
.Le
sattributssont
fixés
lors
dela
créatio
ndu
thread
.Lo
rsqu
elesattributspa
rdé
faut
sont
suffisants,
onpa
ssegéné
ralementun
pointeur
NULL
.Ungran
dno
mbrede
fonc
tions
sont
fournies
afin
deman
ipuler
lesattributsassociés
aux
filsd’exécution.
Lesde
uxprem
ières—
pthread_attr_init
etpthread_attr_destroy
—pe
rmettent
respectiv
ementd
’initialise
retd
edé
truire
lelotd
’attrib
utss
urlequ
elpo
inte
leprem
ierpa
ramètre.L
esau
tres
fonc
tions
perm
ettent
respectiv
ementde
lire(pthread_attr_getX
)et
demod
ifier
(pthread_attr_setX
)l’é
tatde
sattributs.
Uncoup
lede
fonctio
nsestfourni
parattribut,le
Xreprésentant
leno
mde
l’attrib
ut.L
eprem
ierp
aram
ètre
estu
npo
inteur
surlelotd
’attrib
uts;
tand
isqu
ele
second
peut
être
lano
uvelle
valeur
del’a
ttrib
utou
l’adresse
oùsera
placée
lavaleur
couran
tede
l’attrib
utselonqu
el’o
neff
ectueun
emise
àjour
ouun
electure.
L’attribut
detachstatepe
rmet
despécifier
s’ilserapo
ssible
dese
synchron
isers
urle
fild’exécutionun
efois
qu’il
sera
term
iné.
Deu
xvaleurssont
possibles:P
THREAD_CREATE_JOINABLE
pour
autoris
erla
synchro-
nisatio
net
PTHREAD_CREATE_DETACHEDpo
urla
décliner.
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
213
5
Threads
ouprocessuslégers
#17
' &
$ %
Attributs(2/2)
�Po
litique
d’ordo
nnancementd
esthreads
int
pthr
ead_
attr
_get
sche
dpol
icy(
cons
tpt
hrea
d_at
tr_t
*att
r,in
t*p
olic
y)
int
pthr
ead_
attr
_set
sche
dpol
icy(
cons
tpt
hrea
d_at
tr_t
*att
r,in
tpo
licy
)
→po
licy
=SC
HED_
[OTH
ER|R
R|FI
FO]
�Pa
ramètresd
’ordon
nancem
ent
�Prior
itéd’ordo
nnancement
int
pthr
ead_
attr
_get
sche
dpar
am(c
onst
pthr
ead_
attr
_t*a
ttr,
cons
tst
ruct
sche
d_pa
ram
*par
am)
int
pthr
ead_
attr
_set
sche
dpar
am(c
onst
pthr
ead_
attr
_t*a
ttr,
stru
ctsc
hed_
para
m*p
aram
)
�Hé
ritagede
l’ordon
nancem
ent
int
pthr
ead_
attr
_get
inhe
rits
ched
(con
stpt
hrea
d_at
tr_t
*att
r,in
t*i
nher
it)
#18
' &
$ %
int
pthr
ead_
attr
_set
inhe
rits
ched
(con
stpt
hrea
d_at
tr_t
*att
r,in
tin
heri
t)
→in
heri
t=
PTHR
EAD_
[EXP
LICI
T|IN
HERI
T]_S
CHED
�Interprétatio
ndesv
aleursd
’ordon
nancem
ent
int
pthr
ead_
attr
_get
scop
e(co
nst
pthr
ead_
attr
_t*a
ttr,
int
*sco
pe)
int
pthr
ead_
attr
_set
scop
e(co
nst
pthr
ead_
attr
_t*a
ttr,
int
scop
e)
→sc
ope
=PT
HREA
D_SC
OPE_
[SYS
TEM|
PROC
ESS]
�Ad
ressede
lapile
duthread
int
pthr
ead_
attr
_get
stac
kadd
r(co
nst
pthr
ead_
attr
_t*a
ttr,
void
*add
r)
int
pthr
ead_
attr
_set
stac
kadd
r(co
nst
pthr
ead_
attr
_t*a
ttr,
void
*add
r)
�Ta
illede
lapile
duthread
int
pthr
ead_
attr
_get
stac
ksiz
e(co
nst
pthr
ead_
attr
_t*a
ttr,
int
size
)
int
pthr
ead_
attr
_set
stac
ksiz
e(co
nst
pthr
ead_
attr
_t*a
ttr,
int
*siz
e)
Lesattributsschedpolicy,
schedparam
,scopeet
inheritsched
conc
erne
ntl’o
rdon
ancementde
sfils
d’exécution.
Ilsne
sont
dispon
iblesqu
esi
laconstante_POSIX_THREAD_PRIORITY_SCHEDULINGestdé
finie
dans
unistd.h
.En
particulier,l’a
ttrib
utschedpolicycorrespo
ndàla
politique
d’ordo
nnan
cemente
mployée
parlethread.
Troisvaleurssont
possibles:S
CHED_OTHER
pour
l’ordon
nanc
ementclassiq
ue;S
CHED_RRpo
urun
séqu
ence-
menttemps-réela
vecl’a
lgorith
meRo
undRo
bin;S
CHED_FIFOpo
urun
ordo
nnan
cementtemps-réelF
IFO.
Pour
plus
dedé
tails,c
f.chap
itre«Interactionsystèm
emulti-
tâcheet
processus».
Lesattributsstackaddret
stacksizepe
rmettent
deconfi
gurerla
pile
utiliséepa
rle
fild’exécution.
Ilspe
rmettent
respectiv
ementde
précise
rl’a
dresse
dedé
part
etla
taillemax
imalede
lapile.
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
213
6
Threads
ouprocessuslégers
3Pa
rtag
ede
sdo
nnées
#19
' &
$ %
3Pa
rtagedesdo
nnées
3.2
Notio
nde
varia
bleparta
gée.
..................................................21
3.2
Parta
geno
n-intentionn
eldesd
onnées
.........................................2
13.3
Code
réentra
ntet
thread-sa
fe.................................................22
3.4
Thread-Local
Storage........................................................
23
#20
' &
$ %
3.1Notionde
varia
blepartagée
�Va
riableparta
gée:d
euxdéfin
ition
spossib
les�
Conceptuellem
ent:
varia
bleutilis
éeparp
lusie
urst
hreads
�Te
chniqu
ement:
pend
antl’ex
écutionun
eseuleinstance
dela
varia
blepo
urtous
lesthreads
IVa
riableglob
ale:u
neseuleinstance
“partagée”
IVa
riablestatique
locale
:une
seuleinstance
“partagée”
IVa
riableautomatique
locale
:une
instance
dans
chacun
edesp
ilesd
esthreads
appelan
ts�
Attention:les
threadsp
artagent
l’intégralitéde
l’espaced’adressagedu
processus
�To
utes
lesvaria
bles
peuventp
otentie
llementê
treparta
gées.
�Mêm
eles
varia
bles
automatiqueslocale
speuvent
être
parta
gées
:àutilis
eravec
précautio
n.�
Parta
gedu
contexte
dunoyau
�Ge
stiondesfl
ux�
Gestiondess
ignaux
Con
ceptue
llement,
unevaria
blepa
rtag
éeestun
evaria
bleutiliséepa
rplusieursthread
s.Te
chniqu
ement,
onap
pelle
varia
blepa
rtag
éeun
evaria
blepo
urlaqu
elle
durant
l’exécu
tiondu
prog
ramme,
iln’exist
equ
’une
seuleinstan
ce.E
nC,les
varia
bles
glob
ales
etlesvaria
bles
localesstatique
sne
sont
alloué
esqu
’une
seule
fois
pour
l’ensem
bledesthread
s,surle
tas.
Don
ciln’en
exist
equ
’une
seuleinstan
cepe
ndan
tl’e
xécu
tion
duprog
ramme.
Enrevanche
,les
varia
bles
automatiqueslocalesàun
efonc
tionsont
alloué
esda
nsla
pile
dechaq
uethread
appe
lant
cettefonctio
n.Don
cilexist
eplusieursinstanc
esde
cesv
ariables
pend
antl’exécu
tion
duprog
ramme.
Attentio
n:lesthread
spa
rtag
entl’intégralitéde
l’espaced’ad
ressag
edu
processusce
quisig
nifie
que
TOUTES
lesv
ariables
peuv
entê
trepa
rtag
ées.MAIS
géné
ralement,on
utilise
desv
ariables
glob
ales,v
isibles
dans
l’ensem
blede
sfonctio
nsutile
s,po
urdé
finir
desvaria
bles
partag
ées.
Voir
Briant
etO’H
allaron.
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
213
7
Threads
ouprocessuslégers
3Pa
rtag
ede
sdo
nnées
#21
' &
$ %
3.2Pa
rtageno
n-intentionn
eldesdo
nnées
�Lo
rsqu’un
emêm
einstance
devaria
bleestu
tilisé
eparp
lusie
urst
hreads
alors
que
conceptuellem
entc
en’estp
asun
evaria
bleparta
gée
�Pe
utprovoq
uerd
essituatio
nsde
compétition(ra
cecond
ition
)I
Lerésulta
tvarie
selonles
cond
ition
sd’ex
écution
�Erreursd
ifficiles
àdétecter!
/* *ra
ce.c
:co
defa
ux(p
oly
Bria
ntet
Hall
aron
)* *
sans
temp
oris
atio
n,se
mble
s’ex
ecut
erco
rrec
teme
nt!
*en
ajou
tant
une
temp
oris
atio
n,on
voit
l’er
reur
.*/ #inc
lude
<pth
read
.h>
#inc
lude
<err
or.h
>#i
nclu
de<s
tdli
b.h>
#inc
lude
<std
io.h
>
#def
ine
NTHR
EADS
100
void
*fun
c(vo
id*a
rg)
{in
tme
;
me=
*((i
nt*)
arg)
;pr
intf
("He
llo
from
%d\n
",me
);
pthr
ead_
exit
(NUL
L);
} int
main
(int
argc
,ch
ar**
argv
){
int
i;pt
hrea
d_t
thre
ads[
NTHR
EADS
];
for
(i=
0;
i<
NTHR
EADS
;i+
+){
int
rc;
/*OO
PS!!
!!FA
UX:
ies
tpa
rtag
épa
rto
usle
sth
read
s!*/
rc=
pthr
ead_
crea
te(&
thre
ads[
i],
NULL
,fu
nc,
&i);
if(r
c)er
ror(
EXIT
_FAI
LURE
,rc
,"p
thre
ad_c
reat
e");
}
for
(i=
0;
i<
NTHR
EADS
;i+
+){
int
rc;
rc=
pthr
ead_
join
(thr
eads
[i],
NULL
);if
(rc)
erro
r(EX
IT_F
AILU
RE,
rc,
"pth
read
_joi
n");
}
exit
(EXI
T_SU
CCES
S);
} TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
213
8
Threads
ouprocessuslégers
3Pa
rtag
ede
sdo
nnées
L’exécutiondu
prog
rammerace.c
affichele
numérodu
thread
créé
enpa
ssan
ten
paramètre
l’adresse
del’ind
icede
labo
ucle.U
neseuleinstan
cede
l’ind
icede
bouc
leestutiliséepa
rtous
lesthread
sdo
ncen
fonc
tionde
l’instant
oùl’a
ffichag
es’e
ffectue
,lerésulta
testdiffé
rent.L
ecode
estdo
ncfaux
.Ils
’agitd’un
erace
enan
glais(situ
ationde
compé
titionen
français),c
’est-à-dire
quele
résulta
tde
l’exécu
tiondé
pend
dufaitqu
’unthread
atteintu
npo
intx
d’exécutionavan
tqu’un
autrethread
atteigne
unpo
inty
(voirleBr
iant
etO’H
allaron).
Lesexécutions
semblentcorrectesmaisen
ajou
tant
unetempo
risationd’un
esecond
eavan
tstocka
gede
lavaleur,l’erreu
restbien
visib
le:e
xécu
tionde
raceTempo.c.
Deman
ière
géné
rale,l’u
tilisa
tion
dethread
s,il
estné
cessaire
d’exécuter
plusieursfois
lemêm
ecode
simultané
ment.
Eneff
et,s
urun
emachine
multip
rocesseu
r,ilestpo
ssible
quepe
ndan
tl’e
xécu
tiondu
code
parun
processeur,u
nau
treprocesseur
commen
cel’exécu
tionde
cemêm
ecode.I
lfau
tdo
ncvérifi
erqu
eda
nsce
cas,
lesexécutions
sedé
roulentcorrectement.
Surun
emachine
mon
oprocesseu
r,le
prob
lèmese
pose
aussi.En
effet,d
ansla
plup
artde
ssystèm
esd’exploitatio
n,lorsqu
’unprocessusesten
cours,
ilpe
utêtre
interrom
pupo
urexécuter
unau
treprocessus.
Deplus,les
fonc
tions
récu
rsives
sont
aussiu
nexem
ple
d’exécutions
simultané
esdu
mêm
ecode
.
Interactivem
entpe
ndan
tle
cours:
Exem
plede
partag
eno
n-intentionn
elde
sdo
nnées.
#22
' &
$ %
3.3Co
deréentrantet
thread-safe
�Co
deréentra
nt:p
asde
varia
bles
parta
gées
lorsd
’exécutions
simultanées
par
plusieu
rsthreads
�Ne
pasm
aintenird
’état
persistante
ntre
lesappels
ICo
ntre-exemple:s
trtok,
rand
�Ne
pasr
etou
rner
depo
inteur
suru
nevaria
blestatique
ICo
ntre-exemple:c
time
�Co
dethread-sa
fe:résultats
corre
ctslorsd
’exécutions
simultanées
parp
lusie
urs
threads
�Protéger
lesaccèsa
uxdo
nnéesp
artagées
dans
lesfonctio
nsI
Contre-exemple:v
ariab
leglob
aleexterneerrno
IRe
défin
ition
deerrno:c
haqu
ethread
asonpropre
errno
�Pa
sd’app
elàdu
code
nonthread-sa
fe
Ontrou
veda
nsla
littérature
deux
term
esdiffé
rents:réentran
tet
thread-safe.
Pour
certains,ils
sont
équivalents.
Pour
d’au
tres,b
ienqu
ecesno
tions
soient
liées
àla
façonde
gérerlesressou
rces
,cesont
deux
notio
nsdiffé
rentes.U
nefonc
tionthread-safeprod
uitun
résulta
tcorrectlors
d’un
eexécutionmultit
hread.
Une
fonc
tionréentran
ten’utilise
pasde
varia
bles
partag
éeslors
d’un
eexécutionmultit
hread(voirle
Briant
etO’H
allaron).U
nefonc
tionpe
utêtre
soitréentran
te,s
oitthread-safe,
soit
lesde
ux,s
oitni
l’unni
l’autre.
Une
fonc
tionréentran
tene
conserve
pasd’état
entrede
uxap
pels
successifs;
elle
neretourne
pasno
nplus
depo
inteur
surdesdo
nnéesstatique
s.To
utes
lesdo
nnéessont
fournies
parl’a
ppelan
t.Une
fonc
tion
réentran
tene
doitpa
sap
pelerno
nplus
defonc
tionno
n-réentran
te.
Lestan
dard
POSIX
spécifiequ
etoutes
lesfonctio
nsné
cessaires,
notammentcellesde
labibliothèque
C,
doiventêtre
implan
tées
defaçonàpo
uvoirêtre
exécutéespa
rplusieursthread
ssim
ultanément.
Certaines
fonc
tions,né
anmoins,écha
ppentàcettespécificatio
npa
rmilesquelle
sdirname,
getenv
,gethostbyname,
gethostbyadddr
,rand,
readdir,
setenv
,putenv,
strerror
,strtok...(V
oirle
Rob
bins
etRob
bins
p.43
2)Po
url’e
nsem
blede
cesfonc
tions,u
neversionréentran
tedo
itêtre
implan
téedé
signé
eavec
lesuffixe
_r.
Une
fonc
tionno
n-réentran
tepe
utsouv
ent,
maispa
stoujou
rs,ê
treidentifi
éepa
rsoninterfa
ceexterneet
sonutilisatio
n.Pa
rexem
ple,
enC,laprim
itive
strtok
n’estpa
sréentran
tepa
rcequ
’elle
conserve
lachaîne
decaractères
pour
ladivisere
nélém
ents.L
aprim
itive
ctimen’estp
asno
nplus
réentran
te;e
lleretourne
un
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
213
9
Threads
ouprocessuslégers
3Pa
rtag
ede
sdo
nnées
pointeur
surd
esdo
nnéess
tatiq
uesq
uiesté
craséàchaq
ueap
pel.Ilfaut
alorsu
tilise
rles
versions
ré-entrantes
decesprim
itives,
parexem
plestrtok_r
.Une
fonc
tionthread-safeprotègelesd
onné
espa
rtag
ées(
varia
bles
maisa
ussiécrit
ureda
nsde
sfichiers
par
exem
ple)
desaccèsconc
urrentspa
rde
sverrou
s.La
notio
nde
thread-safene
conc
erne
quel’implan
tatio
nde
lafonc
tionet
nonsoninterfa
ceexterne.
Une
fonc
tionthread-safeno
n-réentran
teestsouv
entmoins
perfo
rman
tequ
’une
fonc
tionréentran
tepu
is-qu
’ilaéténé
cessaire
d’ajou
terde
ssynchron
isatio
nspo
urla
rend
rethread-safe.
Dan
sune
applicationmulti-thread
,tou
tesles
fonc
tions
appe
lées
parp
lusie
ursthreads,d
oivent
être
thread-
safe.Ilfau
tremarqu
erau
ssiq
uela
plup
artdu
temps,les
fonc
tions
non-réentran
tesne
sont
pasthread-safe
maisqu
elesrend
reréentran
teslesrend
aussithread-safe.
Lesbibliothèque
sréentran
teset
thread-safesont
utile
sda
nstous
lesenvironn
ements
deprog
rammation
parallè
leset
asyn
chrone
set
passeulem
entpo
urde
sthreads.
errnoestpa
rdé
faut
unevaria
bleglob
aleexterne.
Cette
implan
tatio
nne
peut
pasfonc
tionn
eravec
des
thread
s.En
effet,lerésulta
tde
lalecturede
errnon’estpa
scorrectpu
isqu’un
autrethread
peut
l’avoir
mod
ifiée.D
ansle
casde
thread
s,errnoestprop
reàchaq
uethread
.Labibliothèque
pthreadredé
finit
lafonc
tion_errno_location()(voirbits/errno.h
)po
urfournirun
ead
resseprop
reàchaq
uethread
.Par
défaut,p
ourun
processusmon
othread,
_errno_location()renv
oiel’a
dresse
dela
varia
bleglob
aleerrno.
/* *Ex
empl
ede
code
non-
réen
tran
t*
strt
ok()
main
tien
tun
état
pers
ista
nten
tre
les
appe
ls*/ #inc
lude
<std
io.h
>#i
nclu
de<s
tdli
b.h>
#inc
lude
<str
ing.
h>#i
nclu
de<e
rror
.h>
#inc
lude
<pth
read
.h>
#def
ine
MAXS
IZE
256
void
*sta
rt_f
unct
ion(
void
*arg
){
char
*phr
ase;
char
*ele
ment
;ch
ar*d
elim
="
";
phra
se=
mall
oc(M
AXSI
ZE*
size
of(c
har)
);if
(phr
ase
==NU
LL)
{pe
rror
("ma
lloc
");
exit
(EXI
T_FA
ILUR
E);
}
strc
py(p
hras
e,"1
112
13")
;
elem
ent
=st
rtok
(phr
ase,
deli
m);
prin
tf("
1)el
emen
t0
=%s
\n",
elem
ent)
;
elem
ent
=st
rtok
(NUL
L,de
lim)
;pr
intf
("1)
elem
ent
1=
%s\n
",el
emen
t);
pthr
ead_
exit
(NUL
L);
} int
main
(int
argc
,ch
ar**
argv
){
int
rc;
pthr
ead_
tth
read
;ch
ar*e
leme
nt;
char
*del
im=
"";
char
*phr
ase;
phra
se=
mall
oc(M
AXSI
ZE*
size
of(c
har)
);if
(phr
ase
==NU
LL)
{pe
rror
("ma
lloc
");
exit
(EXI
T_FA
ILUR
E);
}
strc
py(p
hras
e,"0
102
03")
;
elem
ent
=st
rtok
(phr
ase,
deli
m);
prin
tf("
0)el
emen
t0
=%s
\n",
elem
ent)
;rc
=pt
hrea
d_cr
eate
(&th
read
,NU
LL,
star
t_fu
ncti
on,
NULL
);if
(rc)
erro
r(EX
IT_F
AILU
RE,
rc,
"pth
read
_cre
ate"
);
pthr
ead_
join
(thr
ead,
NULL
);
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
214
0
Threads
ouprocessuslégers
3Pa
rtag
ede
sdo
nnées
if(r
c)er
ror(
EXIT
_FAI
LURE
,rc
,"p
thre
ad_j
oin"
);
elem
ent
=st
rtok
(NUL
L,de
lim)
;pr
intf
("0)
elem
ent
1=
%s:
OUOU
OUPS
!\n"
,el
emen
t);
retu
rnEX
IT_S
UCCE
SS;
}
Dan
slesprog
rammes
fournis,
deux
thread
s,le
thread
principa
letle
thread
pair,
analysentchacun
une
chaîne
decaractères
diffé
rentepo
urla
décompo
seren
élém
ent.
Leprog
rammestr.c
utilise
lafonc
tionstrtok()
.Cette
fonc
tion
découp
eun
echaîne
decaractères
enplusieursélém
ents,retourné
ssuccessiv
ementpa
rdiffé
rentsap
pels
àstrtok()
.En
trechaq
ueap
pelà
strtok()
,unpo
inteur
vers
l’élémentsuivan
tde
lachaîne
estmaintenupa
rl’interméd
iaire
d’un
evaria
ble
statique
àl’intérieur
dela
fonc
tionstrtok()
.Le
résulta
tdu
prog
rammedé
pend
donc
del’o
rdre
desap
pels
àstrtok()
.Dan
sno
trecas,
leprem
ier
appe
lest
effectuépa
rle
thread
principa
l.En
suite
lethread
pair
estcréé.S
ilethread
pair
effectuealorsun
appe
làstrtok()
,àl’a
ppel
suivan
t,le
thread
principa
lrenverraun
résulta
tcorrespo
ndan
tàla
chaîne
duthread
pair
etno
nàla
sienn
e!Po
urcorriger
ceprob
lèmeet
faire
ensortequ
ele
résulta
tne
dépe
ndepa
sde
l’ordon
nanc
ementde
sexécutions
dest
hreads,ilfau
tutilise
rlafonc
tionstrtok_r()
.Cette
fonc
tionpe
rmet
auprog
rammea
ppelan
tde
fournirlui-m
êmela
zone
demém
oire
perm
ettant
deconserverun
pointeur
vers
l’élémentsuivan
t(en
troisiè
meargu
mentde
lafonc
tion).
/* *At
tent
ion
lebu
ffer
enen
tree
,ph
rase
,es
tmo
difi
e*
par
l’ap
pel
ast
rotk
donc
ilne
sert
ari
end’
appe
ler
*pl
usie
urs
fois
strt
oksu
rle
meme
buff
er!
* *ap
pel
ast
rtok
_r* */ #inc
lude
<std
io.h
>#i
nclu
de<s
tdli
b.h>
#inc
lude
<str
ing.
h>#i
nclu
de<e
rror
.h>
#inc
lude
<pth
read
.h>
#def
ine
MAXS
IZE
256
void
*sta
rt_f
unct
ion(
void
*arg
){
char
*phr
ase;
char
*ele
ment
;ch
ar*d
elim
="
";ch
ar*p
tr;
phra
se=
mall
oc(M
AXSI
ZE*
size
of(c
har)
);if
(phr
ase
==NU
LL)
{pe
rror
("ma
lloc
phra
se")
;ex
it(E
XIT_
FAIL
URE)
;}
strc
py(p
hras
e,"1
112
13")
;
elem
ent
=st
rtok
_r(p
hras
e,de
lim,
&ptr
);pr
intf
("1)
elem
ent
0=
%s\n
",el
emen
t);
elem
ent
=st
rtok
_r(N
ULL,
deli
m,&p
tr);
prin
tf("
1)el
emen
t1
=%s
\n",
elem
ent)
;
pthr
ead_
exit
(NUL
L);
} int
main
(int
argc
,ch
ar**
argv
){
int
rc;
pthr
ead_
tth
read
;ch
ar*e
leme
nt;
char
*del
im=
"";
char
*phr
ase;
char
*ptr
;ph
rase
=ma
lloc
(MAX
SIZE
*si
zeof
(cha
r));
if(p
hras
e==
NULL
){
perr
or("
mall
oc")
;ex
it(E
XIT_
FAIL
URE)
;}
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
214
1
Threads
ouprocessuslégers
3Pa
rtag
ede
sdo
nnées
strc
py(p
hras
e,"0
102
03")
;
elem
ent
=st
rtok
_r(p
hras
e,de
lim,
&ptr
);pr
intf
("0)
elem
ent
0=
%s\n
",el
emen
t);
rc=
pthr
ead_
crea
te(&
thre
ad,
NULL
,st
art_
func
tion
,NU
LL);
if(r
c)er
ror(
EXIT
_FAI
LURE
,rc
,"p
thre
ad_c
reat
e");
elem
ent
=st
rtok
_r(N
ULL,
deli
m,&p
tr);
rc=
pthr
ead_
join
(thr
ead,
NULL
);if
(rc)
erro
r(EX
IT_F
AILU
RE,
rc,
"pth
read
_joi
n");
prin
tf("
0)el
emen
t1
=%s
:OK
!\n"
,el
emen
t);
retu
rnEX
IT_S
UCCE
SS;
} Interactivem
enten
cours:
Exem
pleavec
uncode
utilisant
strtok()
.
#23
' &
$ %
3.4Thread-Lo
calS
torage
�Va
riables
glob
alesp
ropreàchaque
thread
�Ch
aque
thread
aun
ecopiedistinctede
lavaria
ble
�exem
ple:e
rrno
�Créatio
n�
int
pthr
ead_
key_
crea
te(p
thre
ad_k
ey_t
*cle
,vo
id(*
dest
r_fo
ncti
on)
(vo
id*
)
�De
struction
�in
tpt
hrea
d_ke
y_de
lete
(pt
hrea
d_ke
y_t
cle)
�Ut
ilisation
�in
tpt
hrea
d_se
tspe
cifi
c(p
thre
ad_k
ey_t
cle,
cons
tvo
id*p
oint
eur)
�vo
id*
pthr
ead_
gets
peci
fic(
pthr
ead_
key_
tcl
e)
�Ce
cipeut
utilementê
treutilis
éavec
pthread_once
Lorsqu
’une
valeur
doitêtre
conservéed’un
appe
ldefonc
tionàl’a
utre,e
llepe
utêtre
déclarée
statique
ouglob
ale.
Elle
estalorscommun
eàl’e
nsem
blede
sthreads.
Iln’estpa
sno
nplus
possible
dela
stockerda
nsla
pile.O
nutilise
alorsles«do
nnéesprivées».
Une
clé(detype
pthread_key_t)
doit
être
associée
àchaq
uedo
nnée
privée
etpe
utrésid
eren
varia
ble
statique
.Labibliothèque
associela
cléavec
unpo
inteur
géné
rique
diffé
rent
pour
chaq
uethread
.pthread_key_create
initialise
laclédo
ntl’a
dresse
estp
asséeen
prem
iera
rgum
ent;
lesecond
argu
ment
estl’a
dresse
dela
fonc
tionqu
iseraap
peléelors
dela
destructionde
laclé.
pthread_key_delete
détruitla
clépo
intéepa
rle
paramètre.
pthread_setspecificassociela
clépa
ssée
enprem
iera
rgum
enta
uxdo
nnéesp
ersonn
ellesc
ompo
sant
lesecond
argu
ment.
Lesecond
argu
mentesttypiqu
ementun
tableaudo
ntchaq
ueélém
entsera
utilisé
parun
thread
diffé
rent.C
ette
opérationne
doit
être
réalisé
equ
’une
seulefois,
quel
quesoit
leno
mbrede
threads.
pthread_getspecificretourne
l’adresse
dela
donn
éepe
rson
nelle
associée
authread
pour
laclépa
ssée
enpa
ramètre.
/*sp
ecif
ic.c
*/ #inc
lude
<err
or.h
>#i
nclu
de<u
nist
d.h>
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
214
2
Threads
ouprocessuslégers
3Pa
rtag
ede
sdo
nnées
#inc
lude
<std
lib.
h>#i
nclu
de<s
tdio
.h>
#inc
lude
<pth
read
.h>
stat
icpt
hrea
d_ke
y_t
cleU
niqu
e;
void
set_
buff
er(p
thre
ad_k
ey_t
cle,
int
init
_val
ue)
{in
t*v
al;
val
=(i
nt*)
pthr
ead_
gets
peci
fic(
cle)
;*v
al=
init
_val
ue;
} int
*get
_buf
fer(
pthr
ead_
key_
tcl
e){
int
*val
;va
l=
(int
*)pt
hrea
d_ge
tspe
cifi
c(cl
e);
retu
rnva
l;} vo
id*s
tart
_rou
tine
(voi
d*a
rg)
{in
t*m
aval
;
/*do
itet
reap
pele
epa
rch
aque
thre
ad,
lebu
ffer
enar
gdo
itet
redi
ffer
ent
*/pt
hrea
d_se
tspe
cifi
c(cl
eUni
que,
mall
oc(s
izeo
f(in
t)))
;
set_
buff
er(c
leUn
ique
,1)
;
mava
l=
get_
buff
er(c
leUn
ique
);pr
intf
("th
read
1:ma
val
=%d
\n",
*mav
al);
pthr
ead_
exit
(EXI
T_SU
CCES
S);
} int
main
(int
argc
,ch
ar*a
rgv[
]){
int
rc;
int
*mav
al;
pthr
ead_
tth
read
1;
/*ne
doit
etre
fait
qu’u
nese
ule
fois
,pa
sde
fonc
tion
dede
stru
ctio
n*/
pthr
ead_
key_
crea
te(&
cleU
niqu
e,NU
LL);
/*do
itet
reap
pele
epa
rch
aque
thre
ad,
lebu
ffer
enar
gdo
itet
redi
ffer
ent
*/pt
hrea
d_se
tspe
cifi
c(cl
eUni
que,
mall
oc(s
izeo
f(in
t)))
;
set_
buff
er(c
leUn
ique
,2)
;ma
val
=ge
t_bu
ffer
(cle
Uniq
ue);
prin
tf("
thre
adma
itre
:ma
val
=%d
\n",
*mav
al);
rc=
pthr
ead_
crea
te(&
thre
ad1,
NULL
,st
art_
rout
ine,
NULL
);if
(rc)
erro
r(EX
IT_F
AILU
RE,
rc,
"pth
read
_cre
ate"
);
rc=
pthr
ead_
join
(thr
ead1
,NU
LL);
if(r
c)er
ror(
EXIT
_FAI
LURE
,rc
,"p
thre
ad_j
oin"
);
mava
l=
get_
buff
er(c
leUn
ique
);pr
intf
("th
read
mait
re:
mava
l=
%d\n
",*m
aval
);pt
hrea
d_ke
y_de
lete
(cle
Uniq
ue);
pthr
ead_
exit
(EXI
T_SU
CCES
S);
}
Afin
desim
plifier
l’utilisa
tionde
varia
bles
TLS
,certainscompilateurs(G
CC,Intel
CC,e
tc.)pe
rmettent
l’utilisa
tiondu
mot-clé
__thread
lors
dela
déclarationd’un
evaria
ble.
Parexem
ple:
__thread
intvariable_name=0;
Vous
man
ipulez,s
ansle
savoir,
desvaria
bles
TLS
depu
isle
débu
tdu
mod
ule.
Parexem
ple,
errnoest
thread
-local,ce
quié
vite
desrace-con
ditio
nsqu
ipou
rraientêtre
facheu
ses.
Lesvaria
bles
TLS
sont
stockées
dans
lasection
.tdata
del’e
spaced’ad
ressag
e.Lo
rsqu
’un
nouv
eau
thread
estcréé,la
section
.tdata
estrecopiée,pe
rmettant
ainsid’alloue
rtoutes
lesvaria
bles
TLS
du
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
214
3
Threads
ouprocessuslégers
4Sy
nchron
isatio
n
thread
.Deplus
amples
explications
surl’im
plém
entatio
nde
varia
bles
TLS
sous
Linu
xsont
dispon
iblesd
ans:
Drepp
er,U
.Elfha
ndlin
gforthread
-locals
torage.T
echn
ical
report,R
edHat,I
nc.,20
03.
#24
' &
$ %
4Sy
nchron
isatio
n
4.1
Synchron
isatio
n..............................................................25
4.2
Exclu
sions
mutuelles..........................................................27
4.3
SémaphoresP
OSIX(ra
ppel)
..................................................28
4.4
Attentede
cond
ition
s.........................................................29
#25
' &
$ %
4.1Sy
nchron
isatio
n
�Ga
rantirla
consistance
desd
onnées
�Ac
cèss
imultanésà
unedo
nnée
parta
géeen
lecture/écritu
reI
Séqu
encementd
esinstructions
load
,update,
store
�Ex
emple:e
xclusio
nmutuelle
detype
comptebancair
e
�Im
plantatio
nde
Pet
Vavec
dest
hreads
:plusie
urso
utils
dela
bibliothèque
Pthread
�Sé
maphores
�Mutex
�Co
ndition
s
Lesthreadsdo
ivents
ynchroniserleurs
activ
itéspo
urinteragir.Ceciinc
lutles
synchron
isatio
nsim
plicite
spa
rlamod
ificatio
nde
donn
éesp
artagées
etless
ynchronisatio
nsexplicite
sinforman
tles
autres
desé
véne
ments
quis
esont
prod
uits.
Leprog
rammec
ompteurBOOM.cestu
nexem
pled
emau
vaise
utilisatio
nd’un
edon
néep
artagée,la
varia
ble
compteur
.Deu
xthread
sinc
rémentent
simultanémentc
ette
varia
bleu
nno
mbred
efoiside
ntique
setn
’arrivent
pasau
mêm
erésulta
t.
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
214
4
Threads
ouprocessuslégers
4Sy
nchron
isatio
n
Ilestdo
ncné
cessaire
d’introd
uire
lesfonc
tions
Pet
Vpo
ursynchron
iserlesdiffé
rentsthread
s(voirle
chap
itreSy
nchron
isatio
nentreprocessus).
Simultané
menten
cours:
Exécutionde
compteurBOOM.c
suru
nemachine
mon
oprocesseu
retb
ipro-
cesseu
r.Com
menterlesrésulta
ts.
#26
' &
$ %
4.2Ex
clusions
mutuelles
�Ty
pe:p
thread_mutex_t
�Créatio
n�
int
pthr
ead_
mute
x_in
it(p
thre
ad_m
utex
_t*m
utex
,co
nst
pthr
ead_
mute
xatt
r_t
*mut
exat
tr)
�pthread_mutex_init
retourne
toujou
rs0.
�De
struction
�in
tpt
hrea
d_mu
tex_
dest
roy
(pth
read
_mut
ex_t
*mut
ex)
Lesvaria
bles
glob
ales
etlesde
scrip
teursde
fichiers(etd’au
tres
choses
encore)étan
tpa
rtag
éspa
rl’e
n-sembled
esthreadsd
’unprocessus,un
mécan
ismed
itd’«exclusionmutue
lle»estfou
rnia
find’assurerq
uecer-
taines
opérations
seront
synchron
isées.P
ourc
ela,
onutilise
un«mutex
»do
ntle
type
estp
thread_mutex_t
.
L’initialisa
tion
d’un
mutex
peut
s’effe
ctue
rsoit
deman
ière
statique
(en
assig
nant
lava-
leur
PTHREAD_MUTEX_INITIALIZER
aumutex),
soit
deman
ière
dyna
mique
(àl’a
ide
dela
fonctio
npthread_mutex_init
).Dan
sle
casdy
namique
,le
prem
ierpa
ramètre
estun
pointeur
surle
mutex
etle
second
estun
pointeur
surlesattributsqu
el’o
nveut
associer
aumutex
(une
valeur
nulle
associelesattri-
buts
pardé
faut).
pthread_mutex_destroype
rmet
dedé
truire
unmutex
(non
verrou
illé)
enprécisa
ntl’a
dresse
dumutex.
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
214
5
Threads
ouprocessuslégers
4Sy
nchron
isatio
n
#27
' &
$ %
Exclusions
mutuelles(2/2)
�Ut
ilisation
�in
tpt
hrea
d_mu
tex_
lock
(pth
read
_mut
ex_t
*mut
ex)
�in
tpt
hrea
d_mu
tex_
unlo
ck(p
thre
ad_m
utex
_t*m
utex
)
�in
tpt
hrea
d_mu
tex_
tryl
ock
(pth
read
_mut
ex_t
*mut
ex)
�Attribu
ts�
Lesa
ttributsa
ssociés
auxMUT
EXne
sont
pasp
ortables
�Ilconvien
tdene
past
roples
utilis
er�
Oude
seréférerà
lado
cumentatio
nen
ligne
pthread_mutex_lock
perm
etde
pren
drele
mutex
passéen
paramètre.S
ilemutex
estdispon
ible,ile
stpris
desuite
;sinon
,lethread
sebloq
uejusqu’àob
tenirle
mutex.
pthread_mutex_unlock
libèrele
mutex.L
ethread
libéran
tle
mutex
doiten
être
lepo
ssesseur.
pthread_mutex_trylockpe
rmet
desavo
irs’ile
stpo
ssible
deprendrele
mutex.C
ecin
ega
rantiten
rien
quele
mutex
sera
toujou
rslib
relors
duprocha
inap
pelà
pthread_mutex_lock
.Il
està
noterqu
’àce
jour
lano
rmePO
SIX
neprévoitau
cun
attribut
pour
lesmutex
(des
attri-
buts
exist
entda
nscertaine
sim
plan
tatio
ns,e
npa
rticulierlesmutex
récu
rsifs
sous
Linu
x,voir
lesfonc
tions
pthread_mutexattr_init
,pthread_mutexattr_destroy
...).
/* *co
mpte
urMu
tex.
c* *
Acce
sau
comp
teur
prot
ege
par
mute
x*
mute
x_in
itne
renv
oie
pas
deco
ded’
erre
ur* */ #inc
lude
<uni
std.
h>#i
nclu
de<e
rror
.h>
#inc
lude
<std
lib.
h>#i
nclu
de<s
tdio
.h>
#inc
lude
<pth
read
.h>
/*IN
T_MA
X/
2*/
#def
ine
NBIT
ER10
0000
0000
int
comp
teur
=0;
pthr
ead_
mute
x_t
mute
x;
void
*sta
rt_r
outi
ne(v
oid
*arg
){
int
i,rc
;
for
(i=
0;i
<NB
ITER
;i+
+){
rc=
pthr
ead_
mute
x_lo
ck(&
mute
x);
if(r
c)er
ror(
EXIT
_FAI
LURE
,rc
,"p
thre
ad_m
utex
_loc
k");
comp
teur
++;
rc=
pthr
ead_
mute
x_un
lock
(&mu
tex)
;if
(rc)
erro
r(EX
IT_F
AILU
RE,
rc,
"pth
read
_mut
ex_u
nloc
k");
}pt
hrea
d_ex
it(N
ULL)
;} TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
214
6
Threads
ouprocessuslégers
4Sy
nchron
isatio
n
int
main
(int
argc
,ch
ar*a
rgv[
]){
int
rc;
pthr
ead_
tth
read
1,th
read
2;
pthr
ead_
mute
x_in
it(&
mute
x,NU
LL);
rc=
pthr
ead_
crea
te(&
thre
ad1,
NULL
,st
art_
rout
ine,
NULL
);if
(rc)
erro
r(EX
IT_F
AILU
RE,
rc,
"pth
read
_cre
ate"
);
rc=
pthr
ead_
crea
te(&
thre
ad2,
NULL
,st
art_
rout
ine,
NULL
);if
(rc)
erro
r(EX
IT_F
AILU
RE,
rc,
"pth
read
_cre
ate"
);
rc=
pthr
ead_
join
(thr
ead1
,NU
LL);
if(r
c)er
ror(
EXIT
_FAI
LURE
,rc
,"p
thre
ad_j
oin"
);
rc=
pthr
ead_
join
(thr
ead2
,NU
LL);
if(r
c)er
ror(
EXIT
_FAI
LURE
,rc
,"p
thre
ad_j
oin"
);
if(c
ompt
eur
!=2
*NB
ITER
)pr
intf
("BO
OM!
comp
teur
=%d
\n",
comp
teur
);el
se prin
tf("
OKco
mpte
ur=
%d\n
",co
mpte
ur);
rc=
pthr
ead_
mute
x_de
stro
y(&m
utex
);if
(rc)
erro
r(EX
IT_F
AILU
RE,
rc,
"pth
read
_mut
ex_d
estr
oy")
;
exit
(EXI
T_SU
CCES
S);
} #28
' &
$ %
4.3Sé
maphoresPO
SIX
(rappe
l)
�Créatio
net
destruction
�in
tse
m_in
it(
sem_
t*s
em,
int
psha
red,
u_in
tva
lue)
�in
tse
m_de
stro
y(
sem_
t*s
em)
�Ut
ilisation
�in
tse
m_wa
it(
sem_
t*s
em)
�in
tse
m_po
st(
sem_
t*s
em)
�in
tse
m_tr
ywai
t(
sem_
t*s
em)
�in
tse
m_ge
tval
ue(
sem_
t*s
em,
int
*sva
l)
�To
utes
cesf
onctions
renvoient-
1en
casd
eprob
lèmeet
positionn
ente
rrno
.
Remarque:lessémaphoresPO
SIX
sont
égalem
entabordéedans
lechapitre«Com
mun
ications
inter-
processus».
Les
sémap
hores
POSIX
font
partie
dela
bibliothèque
des
threads
Linu
xsi
laconstante
_POSIX_SEMAPHORESestdé
finie
dans
unistd.h
;les
fonc
tionn
alité
ssont
alorsdé
finiesda
nssemaphore.h.
Ilssont
sensiblementdiffé
rentsde
ssémap
horesIP
CSy
stem
V.L
etype
associéau
xsémap
horesPO
SIX
est
sem_t. sem_init
perm
etd’initialise
rle
sémap
hore
dont
l’adresse
constit
uele
prem
ierpa
ramètre
etla
valeur
lede
rnier.
Lede
uxièmepa
ramètre
indiqu
esi
lesémap
hore
peut
être
partag
épa
rplusieursprocessus.
sem_destroydé
truitle
sémap
hore
passéen
argu
ment.
sem_wait
attend
quele
sémap
hore
passéen
argu
mentsoit
libre
pour
lepren
dre.
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
214
7
Threads
ouprocessuslégers
4Sy
nchron
isatio
n
sem_post
libèrele
sémap
hore
passéen
argu
ment.
sem_trywaitrenv
oie-1
(etp
lace
lavaleur
EAGAIN
dans
errno)
sile
sémap
hore
estd
éjàpris;e
llerenv
oie
0da
nsle
cascontraire
.sem_getvalue
placela
valeur
couran
tedu
sémap
hore
àl’a
dresse
passéen
second
argu
ment.
/** **
sema
phor
e.c
** **sy
nchr
onis
atio
nde
deux
thre
ads:
util
isat
ion
d’un
sema
phor
e** **
exem
ple
d’un
sché
mapr
oduc
teur
/con
somm
ateu
r** **
Leth
read
prin
cipa
léc
rit
unca
ract
ère
dans
une
zone
demé
moir
eco
mmun
e.**
Unde
uxiè
meth
read
leli
t.** **
sem_
init
,se
m_wa
it,
sem_
post
etse
m_de
stro
yre
nvoi
ent
-1en
cas
de**
prob
leme
etpo
siti
onne
nter
rno.
** **/
#inc
lude
<pth
read
.h>
#inc
lude
<sem
apho
re.h
>#i
nclu
de<e
rror
.h>
#inc
lude
<std
lib.
h>#i
nclu
de<s
tdio
.h>
char
buff
er;
sem_
tpl
aceD
ispo
;se
m_t
info
Pret
e;
void
prod
ucti
on()
{bu
ffer
=’a
’;
prin
tf("
prod
ucte
ur:
<0x%
x>it
em=
%c\n
",(u
nsig
ned
int)
pthr
ead_
self
(),
buff
er);
} void
cons
omma
tion
(){
prin
tf("
cons
omma
teur
:<0
x%x>
item
=%c
\n",
(uns
igne
din
t)pt
hrea
d_se
lf()
,bu
ffer
);} vo
id*e
crir
e(vo
id*n
ull)
{in
trc
;
/*P(
plac
eDis
po)
*/rc
=se
m_wa
it(&
plac
eDis
po);
if(r
c){
perr
or("
sem_
wait
");
exit
(EXI
T_FA
ILUR
E);
}
prod
ucti
on()
;
/*V(
info
Pret
e)*/
rc=
sem_
post
(&in
foPr
ete)
;if
(rc)
{pe
rror
("se
m_po
st")
;ex
it(E
XIT_
FAIL
URE)
;}
retu
rnNU
LL;
} void
*lir
e(vo
id*n
ull)
{in
trc
;
/*P(
info
Pret
e)*/
rc=
sem_
wait
(&in
foPr
ete)
;if
(rc)
{pe
rror
("se
m_wa
it")
;ex
it(E
XIT_
FAIL
URE)
;}
cons
omma
tion
(bu
ffer
);
/*V(
plac
eDis
po)
*/rc
=se
m_po
st(&
plac
eDis
po);
if(r
c)
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
214
8
Threads
ouprocessuslégers
4Sy
nchron
isatio
n
{pe
rror
("se
m_po
st")
;ex
it(E
XIT_
FAIL
URE)
;}
pthr
ead_
exit
(NUL
L);
} int
main
(){
int
rc;
pthr
ead_
tle
cteu
r;
sem_
init
(&pl
aceD
ispo
,0,
1);
sem_
init
(&in
foPr
ete,
0,0)
;
rc=
pthr
ead_
crea
te(
&lec
teur
,NU
LL,
&lir
e,NU
LL);
if(r
c)er
ror(
EXIT
_FAI
LURE
,rc
,"p
thre
ad_c
reat
e");
ecri
re(N
ULL)
;
rc=
pthr
ead_
join
(lec
teur
,NU
LL);
if(r
c)er
ror(
EXIT
_FAI
LURE
,rc
,"p
thre
ad_j
oin"
);
rc=
sem_
dest
roy(
&pla
ceDi
spo)
;if
(rc)
{pe
rror
("se
m_de
stro
y");
exit
(EXI
T_FA
ILUR
E);
}rc
=se
m_de
stro
y(&i
nfoP
rete
);if
(rc)
{pe
rror
("se
m_de
stro
y");
exit
(EXI
T_FA
ILUR
E);
}
retu
rnEX
IT_S
UCCE
SS;
} #29
' &
$ %
4.4At
tentede
cond
ition
s�
Princip
e�
Unprem
ierthread
semet
enattented’un
cond
ition
�Lo
rsqu’un
second
thread
réalise
lacond
ition
,ilé
met
unsig
nalà
destinationde
lacond
ition
,réveillan
tunthread
enattente
ISi
aucunthread
n’este
nattente,
rienne
sepasse
ISi
plusieu
rsthreadssont
enattente,
unthread
estr
éveillé
�Ty
pe:p
thread_cond_t
�Créatio
n�
int
pthr
ead_
cond
_ini
t(p
thre
ad_c
ond_
t*c
ond,
cons
tpt
hrea
d_co
ndat
tr_t
*con
d_at
tr)
�pthread_cond_initretourne
toujou
rs0.
�De
struction
�in
tpt
hrea
d_co
nd_d
estr
oy(
pthr
ead_
cond
_t*c
ond)
�No
tes:
iln’existepasd
’attr
ibut
pour
lescond
ition
s
Lorsqu
’unfil
d’exécutiondo
itpa
tienter
jusqu’àce
qu’unévén
ementsurvienn
eda
nsun
autrefil
d’exé-
cutio
n,on
peut
utiliserun
eau
tretechniqu
ede
synchron
isatio
n:les«
cond
ition
s»
dont
letype
est
pthread_cond_t
.Leprincipe
estle
suivan
t:u
nprem
ierthread
semet
enattented’un
econd
ition
devant
être
réalisé
e;lorsqu
’unsecond
thread
réalise
lacond
ition
,ilé
met
unsig
nalà
destinationde
lacond
ition
qui
réveillele
thread
enattente.
Siau
cunthread
n’esten
attente,
rienne
sepa
sse;
siplus
d’un
thread
esten
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
214
9
Threads
ouprocessuslégers
4Sy
nchron
isatio
n
attente,
l’und’euxestréveillé,
maison
nepe
utdé
term
iner
lequ
el.
Une
cond
ition
peut
être
initialisé
esoit
statique
menten
assig
nant
lavaleur
défin
iepa
rla
macro
PTHREAD_COND_INITIALIZER
,soitd
ynam
iquemente
nréalisa
ntun
appe
làpthread_cond_init.
Cette
fonc
-tio
nné
cessite
deux
paramètres:le
prem
ierestun
pointeur
surla
cond
ition
àinitialise
r;le
second
est
unpo
inteur
lesattributsassociés
àla
cond
ition
(oula
valeur
nulle
sion
désir
elesattributspa
rdé
faut).
pthread_cond_destroy
détruitla
cond
ition
surlaqu
elle
pointe
lepa
ramètre.I
lest
àno
terqu
ela
biblio-
thèque
dethreadsLinu
xn’im
plém
ente
aucunattribut
pour
lescond
ition
s.
#30
' &
$ %
Attentede
cond
ition
s(2/2)
�Ut
ilisation
�in
tpt
hrea
d_co
nd_s
igna
l(
pthr
ead_
cond
_t*
cond
)
�in
tpt
hrea
d_co
nd_w
ait
(pth
read
_con
d_t
*con
d,pt
hrea
d_mu
tex_
t*m
utex
)
�in
tpt
hrea
d_co
nd_t
imed
wait
(pth
read
_con
d_t
*con
d,pt
hrea
d_mu
tex_
t*m
utex
,co
nst
stru
ctti
mesp
ec*a
bsti
me)
�in
tpt
hrea
d_co
nd_b
road
cast
(pt
hrea
d_co
nd_t
*co
nd)
�Lesf
onctions
pthread_cond_signal,
pthread_cond_waitet
pthread_cond_broadcast
renvoientt
oujours0
.
�No
tes
�To
ujou
rsprendrele
mutex
associé
àla
cond
ition
avante
tlerelâc
here
nsuite.
IPa
sd’in
terblocage
entre
lethread
seplaçante
nattentede
lacond
ition
etceluilaréalisant.
#31
' &
$ %
Ipthread_cond_waitlib
érele
mutex
puisse
met
enattentede
lacond
ition
.Un
efoisqu
ela
cond
ition
estr
éalisée,lafonctio
nbloq
ueàno
uveaule
mutex
avantd
esortir.
�pthread_cond_waitpeut
seterm
iner
mêm
esila
cond
ition
n’apasé
téréalisée.
pthread_cond_signalréalise
lacond
ition
passéen
paramètre.
pthread_cond_waitplacele
fild’exécutioncouran
ten
attentede
réalisa
tionde
lacond
ition
passée
enprem
ierp
aram
ètre
etassociée
aumutex
passéen
second
paramètre
(une
cond
ition
estt
oujoursa
ssociéeàun
mutex
pour
évite
rles
prob
lèmes
deconc
urrenc
ed’accèssurlavaria
ble).L
emutex
doitêtre
verrou
illépa
rle
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
215
0
Threads
ouprocessuslégers
4Sy
nchron
isatio
n
thread
appe
lant.p
thread_cond_wait
déverrou
illealorslemutex
etattend
quela
cond
ition
soitsig
nalée.
Un
appe
làpthread_cond_waitpe
utse
term
iner
mêm
esila
cond
ition
n’apa
sété
réalisé
e.Ilestd
oncim
portan
tde
vérifi
erqu
ec’estle
casavan
tde
continue
r.pthread_cond_timedwait
réalise
lamêm
eop
ération.
Lede
rnierpa
ramètre
estla
date
(etl’h
eure)à
partir
delaqu
elle
lethread
sera
réveillé,
mêm
esi
lacond
ition
n’apa
sétéréalisé
e.pthread_cond_broadcast
réalise
lacond
ition
etréveilletous
lesfilsd’exécutionen
attentede
saréali-
satio
n. Pour
utiliserc
orrectem
entc
esfonc
tions,ilfau
ttou
jourspren
drele
mutex
associéàla
cond
ition
avan
tet
lerelâcher
ensuite
.Iln
’yapa
sd’interblocage
entrele
fild’exécutionse
plaçan
ten
attentede
lacond
ition
etceluilaréalisa
nt.E
neff
et,lafonc
tionpthread_cond_waitcommen
cepa
rlibérer
lemutex
puisse
met
enattentede
lacond
ition
.Une
fois
quela
cond
ition
estréalisé
e,la
fonc
tionbloq
ueàno
uveaule
mutex
avan
tde
sortir.
/** **
cond
itio
nUn.
c** **
sync
hron
isat
ion
dede
uxth
read
s:ut
ilis
atio
nd’
une
vari
able
cond
itio
n** **
exem
ple
d’un
sché
mapr
oduc
teur
/con
somm
ateu
r** **
Leth
read
prin
cipa
léc
rit
unca
ract
ère
dans
une
zone
demé
moir
eco
mmun
e.**
Unde
uxiè
meth
read
leli
t.** **
mute
x_in
it,
cond
_ini
t,co
nd_s
igna
l,co
nd_b
road
cast
etco
nd_w
ait
ne**
renv
oien
tpa
sde
code
d’er
reur
** **/
#inc
lude
<pth
read
.h>
#inc
lude
<err
or.h
>#i
nclu
de<u
nist
d.h>
#inc
lude
<std
lib.
h>#i
nclu
de<s
tdio
.h>
char
buff
er=
’a’;
pthr
ead_
mute
x_t
mute
x;
pthr
ead_
cond
_tco
ndPl
aceD
ispo
;pt
hrea
d_co
nd_t
cond
Info
Pret
e;in
tin
foPr
ete
=0;
void
prod
ucti
on()
{pr
intf
("pr
oduc
teur
:<0
x%x>
buff
er=
%c\n
",(u
nsig
ned
int)
pthr
ead_
self
(),
buff
er);
} void
coms
omma
tion
(){
prin
tf("
cons
omma
teur
:<0
x%x>
buff
er=
%c\n
",(u
nsig
ned
int)
pthr
ead_
self
(),
buff
er);
} void
*ecr
ire(
void
*nul
l){
int
rc;
/*P(
plac
eDis
po)
*/
rc=
pthr
ead_
mute
x_lo
ck(&
mute
x);
if(r
c)er
ror(
EXIT
_FAI
LURE
,rc
,"p
thre
ad_m
utex
_loc
k");
/*wh
ile
pall
iele
sca
soù
leth
read
sere
veil
leal
ors
que
lepr
edic
atn’
est
pas
remp
li*/
whil
e(i
nfoP
rete
)pt
hrea
d_co
nd_w
ait(
&con
dPla
ceDi
spo,
&mut
ex);
rc=
pthr
ead_
mute
x_un
lock
(&mu
tex)
;if
(rc)
erro
r(EX
IT_F
AILU
RE,
rc,
"pth
read
_mut
ex_u
nloc
k");
prod
ucti
on()
;
/*V(
info
Pret
e)*/
rc=
pthr
ead_
mute
x_lo
ck(&
mute
x);
if(r
c)er
ror(
EXIT
_FAI
LURE
,rc
,"p
thre
ad_m
utex
_loc
k");
info
Pret
e=
1;pt
hrea
d_co
nd_s
igna
l(&c
ondI
nfoP
rete
);rc
=pt
hrea
d_mu
tex_
unlo
ck(&
mute
x);
if(r
c)
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
215
1
Threads
ouprocessuslégers
4Sy
nchron
isatio
n
erro
r(EX
IT_F
AILU
RE,
rc,
"pth
read
_mut
ex_u
nloc
k");
retu
rnNU
LL;
} void
*lir
e(vo
id*
null
){
int
rc;
/*P(
info
Pret
e)*/
rc=
pthr
ead_
mute
x_lo
ck(&
mute
x);
if(r
c)er
ror(
EXIT
_FAI
LURE
,rc
,"p
thre
ad_m
utex
_loc
k");
/*wh
ile
pall
iele
sca
soù
leth
read
sere
veil
leal
ors
que
lepr
edic
atn’
est
pas
remp
li*/
whil
e(!
info
Pret
e)pt
hrea
d_co
nd_w
ait(
&con
dInf
oPre
te,
&mut
ex);
rc=
pthr
ead_
mute
x_un
lock
(&mu
tex)
;if
(rc)
erro
r(EX
IT_F
AILU
RE,
rc,
"pth
read
_mut
ex_u
nloc
k");
coms
omma
tion
(bu
ffer
);
/*V(
plac
eDis
po)
*/rc
=pt
hrea
d_mu
tex_
lock
(&m
utex
);if
(rc)
erro
r(EX
IT_F
AILU
RE,
rc,
"pth
read
_mut
ex_l
ock"
);
info
Pret
e=
0;pt
hrea
d_co
nd_s
igna
l(&c
ondP
lace
Disp
o);
rc=
pthr
ead_
mute
x_un
lock
(&mu
tex)
;if
(rc)
erro
r(EX
IT_F
AILU
RE,
rc,
"pth
read
_mut
ex_u
nloc
k");
pthr
ead_
exit
(NUL
L);
} int
main
(){
int
rc;
pthr
ead_
tle
cteu
r;
pthr
ead_
mute
x_in
it(&
mute
x,NU
LL);
pthr
ead_
cond
_ini
t(&c
ondP
lace
Disp
o,NU
LL);
pthr
ead_
cond
_ini
t(&c
ondI
nfoP
rete
,NU
LL);
rc=
pthr
ead_
crea
te(
&lec
teur
,NU
LL,
&lir
e,NU
LL);
if(r
c)er
ror(
EXIT
_FAI
LURE
,rc
,"p
thre
ad_c
reat
e");
ecri
re(N
ULL)
;
rc=
pthr
ead_
join
(lec
teur
,NU
LL);
if(r
c)er
ror(
EXIT
_FAI
LURE
,rc
,"p
thre
ad_j
oin"
);
rc=
pthr
ead_
mute
x_de
stro
y(&m
utex
);if
(rc)
erro
r(EX
IT_F
AILU
RE,
rc,
"pth
read
_mut
ex_d
estr
oy")
;rc
=pt
hrea
d_co
nd_d
estr
oy(&
cond
Plac
eDis
po);
if(r
c)er
ror(
EXIT
_FAI
LURE
,rc
,"p
thre
ad_c
ond_
dest
roy"
);rc
=pt
hrea
d_co
nd_d
estr
oy(&
cond
Info
Pret
e);
if(r
c)er
ror(
EXIT
_FAI
LURE
,rc
,"p
thre
ad_c
ond_
dest
roy"
);
retu
rnEX
IT_S
UCCE
SS;
} /** **
cond
itio
nMul
t.c
** **sy
nchr
onis
atio
nde
deux
thre
ads:
util
isat
ion
d’un
eva
riab
leco
ndit
ion
** **ex
empl
ed’
unsc
héma
prod
ucte
ur/c
onso
mmat
eur
** **Le
thre
adpr
inci
pal
écri
tca
ract
ère
aca
ract
ere
dans
une
zone
demé
moir
eco
mmun
e.**
Unde
uxiè
meth
read
lit
cara
cter
ea
cara
cter
e.** TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
215
2
Threads
ouprocessuslégers
4Sy
nchron
isatio
n
**mu
tex_
init
,co
nd_i
nit,
cond
_sig
nal,
cond
_bro
adca
stet
cond
_wai
tne
**re
nvoi
ent
pas
deco
ded’
erre
ur** **
/
#inc
lude
<pth
read
.h>
#inc
lude
<err
or.h
>#i
nclu
de<u
nist
d.h>
#inc
lude
<std
lib.
h>#i
nclu
de<s
tdio
.h>
#def
ine
NBCH
ARS
26ch
arbu
ffer
=’a
’-
1;pt
hrea
d_mu
tex_
tmu
tex;
pthr
ead_
cond
_tco
ndPl
aceD
ispo
;pt
hrea
d_co
nd_t
cond
Info
Pret
e;in
tin
foPr
ete
=0;
void
prod
ucti
on()
{bu
ffer
++;
prin
tf("
prod
ucte
ur:
<0x%
x>bu
ffer
=%c
\n",
(uns
igne
din
t)pt
hrea
d_se
lf()
,bu
ffer
);} vo
idco
msom
mati
on()
{pr
intf
("co
nsom
mate
ur:
<0x%
x>bu
ffer
=%c
\n",
(uns
igne
din
t)pt
hrea
d_se
lf()
,bu
ffer
);} vo
id*e
crir
e(vo
id*n
ull)
{
int
i;fo
r(i
=0;
i<
NBCH
ARS;
i++)
{in
trc
;/*
P(pl
aceD
ispo
)*/
rc=
pthr
ead_
mute
x_lo
ck(&
mute
x);
if(r
c)er
ror(
EXIT
_FAI
LURE
,rc
,"p
thre
ad_m
utex
_loc
k");
/*wh
ile
pall
iele
sca
soù
leth
read
sere
veil
leal
ors
que
lepr
edic
atn’
est
pas
remp
li*/
whil
e(i
nfoP
rete
)rc
=pt
hrea
d_co
nd_w
ait(
&con
dPla
ceDi
spo,
&mut
ex);
rc=
pthr
ead_
mute
x_un
lock
(&mu
tex)
;if
(rc)
erro
r(EX
IT_F
AILU
RE,
rc,
"pth
read
_mut
ex_u
nloc
k");
prod
ucti
on()
;
/*V(
info
Pret
e)*/
rc=
pthr
ead_
mute
x_lo
ck(&
mute
x);
if(r
c)er
ror(
EXIT
_FAI
LURE
,rc
,"p
thre
ad_m
utex
_loc
k");
info
Pret
e=
1;pt
hrea
d_co
nd_s
igna
l(&c
ondI
nfoP
rete
);
rc=
pthr
ead_
mute
x_un
lock
(&mu
tex)
;if
(rc)
erro
r(EX
IT_F
AILU
RE,
rc,
"pth
read
_mut
ex_u
nloc
k");
}
retu
rnNU
LL;
} void
*lir
e(vo
id*
null
){
int
i;fo
r(i
=0;
i<
NBCH
ARS;
i++)
{in
trc
;
rc=
pthr
ead_
mute
x_lo
ck(
&mut
ex);
if(r
c)er
ror(
EXIT
_FAI
LURE
,rc
,"p
thre
ad_m
utex
_loc
k");
/*P(
info
Pret
e)*/
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
215
3
Threads
ouprocessuslégers
/*wh
ile
pall
iele
sca
soù
leth
read
sere
veil
leal
ors
que
lepr
edic
atn’
est
pas
remp
li*/
whil
e(!
info
Pret
e)rc
=pt
hrea
d_co
nd_w
ait(
&con
dInf
oPre
te,
&mut
ex);
coms
omma
tion
(bu
ffer
);
info
Pret
e=
0;
/*V(
plac
eDis
po)
*/pt
hrea
d_co
nd_s
igna
l(&c
ondP
lace
Disp
o);
rc=
pthr
ead_
mute
x_un
lock
(&mu
tex)
;if
(rc)
erro
r(EX
IT_F
AILU
RE,
rc,
"pth
read
_mut
ex_u
nloc
k");
}
pthr
ead_
exit
(NUL
L);
} int
main
(){
int
rc;
pthr
ead_
tle
cteu
r;
pthr
ead_
mute
x_in
it(&
mute
x,NU
LL);
pthr
ead_
cond
_ini
t(&c
ondP
lace
Disp
o,NU
LL);
pthr
ead_
cond
_ini
t(&c
ondI
nfoP
rete
,NU
LL);
rc=
pthr
ead_
crea
te(
&lec
teur
,NU
LL,
&lir
e,NU
LL);
if(r
c)er
ror(
EXIT
_FAI
LURE
,rc
,"p
thre
ad_c
reat
e");
ecri
re(N
ULL)
;
rc=
pthr
ead_
join
(lec
teur
,NU
LL);
if(r
c)er
ror(
EXIT
_FAI
LURE
,rc
,"p
thre
ad_j
oin"
);
rc=
pthr
ead_
mute
x_de
stro
y(&m
utex
);if
(rc)
erro
r(EX
IT_F
AILU
RE,
rc,
"pth
read
_mut
ex_d
estr
oy")
;rc
=pt
hrea
d_co
nd_d
estr
oy(&
cond
Plac
eDis
po);
if(r
c)er
ror(
EXIT
_FAI
LURE
,rc
,"p
thre
ad_c
ond_
dest
roy"
);rc
=pt
hrea
d_co
nd_d
estr
oy(&
cond
Info
Pret
e);
if(r
c)er
ror(
EXIT
_FAI
LURE
,rc
,"p
thre
ad_c
ond_
dest
roy"
);
retu
rnEX
IT_S
UCCE
SS;
} TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
215
4
Threads
ouprocessuslégers
5Utilisa
tionet
limita
tions
desthread
s
#32
' &
$ %
5Utilisa
tionet
limita
tions
desthreads
5.1
Utilis
ationdest
hreads
........................................................34
5.2
Limita
tions
dest
hreads
.......................................................35
#33
' &
$ %
5.1Utilisa
tiondesthreads
�Po
urqu
oiutilis
erles
threads?
�Am
éliorer
laréactiv
itédesa
pplications
�Pa
rtagerd
esressou
rces
�Éc
onom
iserd
utemps
etde
laplacemém
oire
�Ex
ploiterd
esarchite
ctures
multi-processeurs
�Ex
emples
d’archite
ctures
logicie
lles
�Maît
re/esclav
e�
Divis
erpo
urrégn
er�
Prod
ucteur/con
sommateur
�Ex
emples
d’applica
tions
�Trait
ementd
etexte
�Na
vigateurw
eb�
Serveurw
eb
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
215
5
Threads
ouprocessuslégers
5Utilisa
tionet
limita
tions
desthread
s
#34
' &
$ %
�Po
urmon
applica
tion?
�Identifi
erdeso
pératio
nscoûteuses
�Dé
term
iner
lataille
desd
onnées
àparta
ger(
sipo
ssible
petite)
�Identifi
erles
(nom
breux?
)problèm
esde
verro
us�
Répartirles
tâches
indépend
antes
Prog
rammer
uneap
plicationinteractiveavec
dest
hreads
peut
perm
ettreàun
prog
rammede
continue
ràs’e
xécu
term
êmesiun
epa
rtie
del’a
pplic
ationestb
loqu
éeou
este
ntraind’eff
ectuer
uneop
érationcoûteu
se.
Celape
rmet
donc
d’accroîtrel’interactiv
itéde
l’app
lication.
Lesarchite
ctures
maître/esclave,
diviserpo
urrégn
eret
prod
ucteurs/consom
mateu
rssont
desexem
ples
d’archite
ctures
pouv
antêtre
facilementim
plan
tées
avec
desthreads.
Ces
archite
ctures
mèn
enttoutes
àdes
prog
rammes
mod
ulaireseffi
cacementim
plan
téspa
rde
sthreads.
Dan
sle
casd’un
earchite
cturemaître/esclave,
uneentit
émaîtrereçoit
laou
lesrequ
êtes
etcrée
les
entit
ésesclaves
pour
lesexécuter.L
emaîtrecontrôle,p
arexem
ple,
leno
mbred’esclaves
exist
ants
etce
que
faitchaq
ueesclave.
Unesclaves’e
xécu
teindé
pend
ammentde
sau
tres
esclaves.
Ungestionn
aire
d’im
pressio
nsestun
exem
pled’archite
cturemaître/esclaves.U
ngestionn
aire
d’im
pres-
sions
gère
plusieursim
prim
antes,
s’assurequ
etoutes
lesrequ
êtes
d’im
pressio
nreçu
essont
effectuéesen
untemps
raiso
nnab
le.Q
uand
legestionn
aire
reçoit
unerequ
ête,
l’entité
maîtrechoisit
uneim
prim
ante
etde
-man
deàun
eentité
esclaved
’effe
ctue
rl’im
pressio
nsuru
neim
prim
ante
donn
ée.C
haqu
eesclave
peut
effectuer
uneim
pressio
nàun
instan
tdon
nésuru
neim
prim
ante.L
egestionn
aire
estc
hargéde
traiterles
supp
ressions
desrequ
êtes
d’im
pressio
ns.
Dan
sle
mod
èlediviserpo
urrégn
er,les
entit
éseff
ectuentlestâches
enpa
rallèle,ind
épen
dammentles
unes
desau
tres.Iln
’yapa
sd’entit
émaître.
Unexem
plede
mod
èlediviserp
ourr
égne
rseraitd
’exécu
teru
necomman
degrep
parallè
le.L
acomman
degrep
étab
littout
d’ab
ordun
ensemblede
fichiersà
exam
iner.E
llecrée
ensuite
unen
sembled’entit
és.C
haqu
eentit
étraite
unfichier
eteff
ectuela
recherchedu
schémaenvoya
ntlerésulta
tsur
unesortiecommun
e.Qua
ndun
eentit
éterm
inesa
rechercheda
nsle
fichier,e
lletraite
unau
trefichier
ous’a
rrête.
Lemod
èleprod
ucteur/con
sommateu
rreprésente
typiqu
ementun
echaîne
deprod
uctio
n(m
odèlepipe
-lin
é). Voilà
quelqu
esexem
ples
d’ap
plicationpo
uvan
ttire
rprofit
d’un
eimplan
tatio
nmulti-thread
.Unna
viga
teur
webpe
utavoirun
thread
affichan
tlesim
ages
etle
textepe
ndan
tqu
’unau
trethread
récu
père
lesdo
nnées
surle
réseau
.Untraitementde
textepe
utavoirun
thread
gérant
l’interface
grap
hiqu
e,un
deux
ièmethread
gérant
lesentréesde
l’utilisa
teur
parl’interméd
iaire
duclavieret
enfin
untroisiè
methread
pour
faire
les
vérifi
catio
nsgram
maticales
etorthog
raph
ique
s.Certaines
applications
ontbe
soin
d’eff
ectuer
plusieursfois
lesmêm
estâches.T
ypique
ment,
unserveur
web
acceptede
srequ
êtes
clientes.Ces
requ
êtes
deman
dent
despa
geswe
b,de
sim
ages,de
ssons,...
Un
serveu
rpe
utde
voir
servir
beau
coup
derequ
êtes
clientes
simultané
ment.
Sice
serveu
rwe
bestun
processus
mon
o-thread
,iln
epo
urra
servir
qu’une
requ
êteàla
fois.
Une
solutio
nestd’im
plan
terle
serveu
rcommeun
processusmulti-thread
.Unthread
estchargé
derecevoir
lesrequ
êtes.L
orsque
cethread
reçoit
unerequ
ête,
ilcrée
unau
trethread
pour
traitercetterequ
ête.
Une
amélioratio
nde
cettesolutio
nconsist
eàutiliserun
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
215
6
Threads
ouprocessuslégers
5Utilisa
tionet
limita
tions
desthread
s
ensemble(pool)de
threadscréésau
préalable.
Sivous
êtes
unprog
rammeu
ret
quevo
usvo
ulez
tirer
profi
td’un
eim
plan
tatio
nmulti-thread
,il
faut
identifi
erlespa
rtiesdu
prog
rammequ
idevraient
etcellesqu
inede
vraientpa
sêtre
multi-thread
.Voilà
uncertainno
mbrede
bonn
esqu
estio
ns:
•Y-a-t-il
desop
érations
coûteu
sesne
dépe
ndan
tpa
sdu
CPU
(dessin
d’un
efenê
tre,
impressio
nd’un
docu
ment,répo
nseàun
clicde
souris,
calcul
d’un
ecolonn
ede
feuille
decalcul,g
estio
nde
signa
ux,...)
?
•Y-aura-t-ilbe
aucoup
dedo
nnéesàpa
rtag
er?
•Y-a-t-il
beau
coup
deprob
lèmes
deverrou
s?exclusionmutue
llede
donn
ées,
interblocages(deadlocks)
(2threadson
tverrou
illés
desdo
nnéesqu
’untroisiè
meessaye
d’ob
tenir)
etrace
cond
ition
s(situ
ation
decompé
titionen
franç
ais)
?Situations
d’interblocages:a
vecs=
1et
t=
1:
Thread1
Thread2
P(s)
P(t)
P(t)
P(s)
V(s)
V(t)
V(t)
V(s)
ouavec
s=
1et
t=
0:
Thread1
Thread2
P(s)
P(s)
V(s)
V(s)
P(t)
P(t)
V(t)
V(t)
•Le
stâche
speu
vent-elle
sêtrerépa
rtiese
nplusieurs?
pare
xempleun
thread
pour
lagestionde
ssigna
ux,
unau
trepo
url’interface
grap
hiqu
e,...
#35
' &
$ %
5.2Limita
tions
desthreads
�Re
ssou
rces
quel’o
nne
souh
aite
pasparta
ger
�ID
utilisateur,g
roup
e�
droits
�qu
otas
d’utilisatio
nde
ressou
rces
:nom
bremaxim
alde
fichiersou
verts
paru
nprocessus,...
�Co
rruptiondesressou
rces
parta
gées
enmém
oire
�Mortd
’un
thre
ad→
mortd
el’app
licationentiè
re
�Prob
lématiques
�Ex
écutiond’un
fork
IDup
licationde
tous
lesth
read
sou
nouveauprocessusmon
o-th
read
�Ge
stionde
signaux
:àqu
ienvoyer
lesig
nal?
IAu
thre
adauqu
elils’a
pplique
?I
Àtous
lesth
read
sdu
processus?
IÀ
certa
ins
thre
ads?
IÀ
unth
read
spécifiqu
equ
isechargera
dele
gérerc
orrectem
ent?
�Év
iterd
ecommun
iquerp
arsig
naux
dans
uneapplica
tionmulti-
thre
ad!
Prog
rammer
uneap
plicationavec
dest
hreads
estu
tilepo
urim
plan
terd
esap
plications
utilisant
plusieurs
entit
ésindé
pend
antes.
Néanm
oins,d
anscertains
cas,
ilestpréférab
led’utiliserplusieursprocessus.
Beau
coup
deressou
rces
sont
gérées
parles
systèm
esd’exploitatio
nau
niveau
duprocessus.Pa
rexemple,
lesidentifi
ants
d’utilisateurset
degrou
peet
lespe
rmiss
ions
quileu
rsont
associéessont
gérésau
niveau
duprocessus.
Lesprog
rammes
quio
ntbe
soin
d’aff
ecterun
utilisateur
diffé
rent
auxdiffé
rentes
entit
ésde
leur
prog
rammeutiliseront
plusieursprocessusplutôt
qu’unseul
processuspo
sséd
antplusieursthreads.
D’autre
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
215
7
Threads
ouprocessuslégers
6Autresfonc
tions
dela
bibliothèque
POSIX
thread
s
part,lesattributsdu
systèm
ede
fichierstels
quele
répe
rtoire
detravailcouran
tou
leno
mbremax
imal
defichiersou
vertssont
aussip
artagéspa
rtous
lesthreadsap
parten
antàun
mêm
eprocessus.
Ainsi,
une
applicationayan
tbe
soin
degérercesattributsde
man
ière
indé
pend
ante
utilisera
plusieursprocessus.
Dan
sun
prog
rammemulti-thread
,les
séman
tique
sde
fork()
etde
exec()
peuv
entêtre
mod
ifiées.
Siun
thread
appe
llefork()
àl’intérieur
d’un
prog
ramme,
ceno
uveauprocessusdo
it-ildu
plique
rtous
lesthreads?
Ce
nouv
eauprocessusdo
it-ilêtre
mon
o-thread
?
Dan
sLinu
x,lorsqu
’unthread
appe
lleun
fork(),leprocessusentie
restdu
pliqué
ycompris
leszone
sde
mém
oire
partag
éesa
vecles
autres
thread
s.Pa
rcon
tre,iln’yada
nsleprocessusfi
lsqu
’unseul
fild’exécution,
celuid
uthread
ayan
tinv
oqué
fork().D
oncilfau
tfaire
attentionau
xressou
rces
utilisées
parles
autres
thread
ssauf
s’ily
aap
pelà
exec()
.Les
ressou
rces
alloué
esdy
namique
mentexist
eron
tda
nsle
nouv
eauprocessus
maisne
pourront
pasêtre
libéréeset
lesressou
rces
verrou
illéesne
pourront
pasêtre
déverrou
illées(voirle
Blaess
p.29
1)
Letraitementd’un
signa
ldép
enddu
type
desig
nal.Unsig
nals
ynchrone
(accès
illégal
àla
mém
oire,
divisio
npa
rzéro)do
itêtre
envoyé
authread
conc
erné
etno
nau
xau
tres.P
ourlessig
naux
asyn
chrone
s,la
situa
tionn’estpa
sclaire.C
ertainssig
naux
asyn
chrone
scommeCon
trol-C
doiventêtre
envoyésàtous
les
threadsdu
processus.
Certaines
implan
tatio
nsd’UNIX
perm
ettent
àun
thread
despécifier
quel
signa
lil
recevraet
quel
signa
lilb
loqu
era.
Cep
enda
nt,les
signa
uxne
doiventêtre
gérésqu
’une
seuleet
unique
fois.
C’est
pourqu
oi,lesig
naln
’est
souv
entenvoyé
qu’auprem
ierthread
quin
ebloq
uepa
sle
signa
l.So
laris
2im
plan
tela
quatriè
mesolutio
n,un
thread
spécifiqu
egère
tous
lessig
naux
.
#36
' &
$ %
6Au
tres
fonctio
nsde
labibliothèque
POSIXthreads
6.1
Annu
lation.
..................................................................37
6.2
Netto
yage
desr
essources.
....................................................39
6.0
Initialisatio
n.................................................................4
0
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
215
8
Threads
ouprocessuslégers
6Autresfonc
tions
dela
bibliothèque
POSIX
thread
s
#37
' &
$ %
6.1Ann
ulation
�En
void
’une
requ
êted’annu
lation
�in
tpt
hrea
d_ca
ncel
(pth
read
_tth
read
)
�Dé
finition
ducompo
rtement
�in
tpt
hrea
d_se
tcan
cels
tate
(int
stat
e,in
t*
olds
tate
)
→state=
PTHREAD_CANCEL_[ENABLE|DISABLE]
�Dé
finition
dutype
d’annu
lation(siP
THREAD_CANCEL_ENABLE
)�
int
pthr
ead_
setc
ance
ltyp
e(i
ntty
pe,
int
*ol
dtyp
e)
→type
=PTHREAD_CANCEL_[DEFERRED|ASYNCHRONOUS]
Unthread
peut
vouloiran
nulerun
autrethread
.Ile
nvoiealorsun
ede
man
ded’an
nulatio
npa
rl’inter-
méd
iaire
dela
fonc
tionpthread_cancel
.Lethread
annu
lése
term
inecommes’ila
vait
lui-m
êmeinvo
quéla
fonc
tionpthread_exit
.Lavaleur
0estretourné
een
casde
succès
;dan
sle
cascontraire
,uncode
d’erreur
estrenv
oyé.
Lethread
récepteu
rpe
utaccepter
larequ
ête,
larefuserou
larepo
usserjusqu’àatteindreun
«po
int
d’an
nulatio
n».
Cecie
stpa
rticulièrementintéressan
tsi
lecode
exécutépa
rle
thread
estsensible
(com
mela
man
ipulationde
ssémap
horespa
rexem
ple).
pthread_setcancelstate
perm
etde
précise
rsi
laprocha
inerequ
êted’an
nulatio
nsera
prise
encompte
(PTHREAD_CANCEL_ENABLE
)ou
non(PTHREAD_CANCEL_DISABLE).L
esecond
paramètre
perm
etde
récu
pérer
l’étatprécéd
ent.
pthread_setcanceltypeprécise
silesrequ
êtes
d’an
nulatio
nsont
prise
sen
compte,
lecompo
rtem
entd
ufil
d’exécution:P
THREAD_CANCEL_DEFERRED
diffè
rela
term
inaisondu
thread
auprocha
inpo
intd
’ann
ulation;
PTHREAD_CANCEL_ASYNCHRONOUSterm
inele
thread
dèsréceptionde
larequ
ête.
Lesecond
paramètre
perm
etde
récu
pérerl’é
tatprécéd
ent.
L’op
portun
itéde
diffé
rerl’accep
tatio
nde
sdem
ande
sdeterm
inaisonse
justifieda
nsla
mesureoù
ellesn
esont
pasmém
orisé
es.A
insi,
siseulsl’a
ccep
tionasyn
chrone
etle
refusde
sde
man
desde
term
inaisonétaient
autoris
ées,
lesde
man
desarriv
antpe
ndan
tlespé
riode
sde
refusseraient
systém
atiquementpe
rdues.
/*ca
ncel
.c
*/ #inc
lude
<ass
ert.
h>#i
nclu
de<e
rror
.h>
#inc
lude
<uni
std.
h>#i
nclu
de<s
tdli
b.h>
#inc
lude
<std
io.h
>#i
nclu
de<p
thre
ad.h
>
#def
ine
GRAN
DNOM
BRE
1200
0000
void
prin
t_co
mpte
ur(v
oid
*arg
){
int
*com
pteu
r=
(int
*)ar
g;pr
intf
("J’
aire
cuun
ean
nula
tion
etco
mpte
ur=
%d\n
",*c
ompt
eur)
;} vo
id*s
tart
_rou
tine
(voi
d*a
rg)
{in
ti;
int
old_
valu
e;
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
215
9
Threads
ouprocessuslégers
6Autresfonc
tions
dela
bibliothèque
POSIX
thread
s
int
comp
teur
=0;
/*pt
hrea
d_se
tcan
cels
tate
(PTH
READ
_CAN
CEL_
DISA
BLE,
&old
_val
ue);
*/
/*pa
rde
faut
DEFE
RRED
*/pt
hrea
d_se
tcan
celt
ype(
PTHR
EAD_
CANC
EL_A
SYNC
HRON
OUS,
&old
_val
ue);
/*ap
pel
prin
t_co
mpte
urqu
and
annu
lati
on*/
pthr
ead_
clea
nup_
push
(pri
nt_c
ompt
eur,
&com
pteu
r);
for
(i=
0;i
<GR
ANDN
OMBR
E;i+
+)co
mpte
ur++
;
/*Po
int
d’an
nula
tion
expl
icit
e,ut
ile
siDE
FERR
ED*/
pthr
ead_
test
canc
el()
;
prin
tf("
Jem’
endo
rsav
ecco
mpte
ur=
%d\n
",co
mpte
ur);
slee
p(2)
;pr
intf
("Je
mere
veil
le\n
");
/*pa
rame
tre
a0
parc
equ
eno
nac
tive
(ann
ulat
ion
avan
t)ma
isap
pel
nece
ssai
repo
urco
mpil
atio
n*/
pthr
ead_
clea
nup_
pop(
0);
pthr
ead_
exit
(EXI
T_SU
CCES
S);
} int
main
(int
argc
,ch
ar*a
rgv[
]){
int
rc;
pthr
ead_
tth
read
1;in
t*r
c_jo
in;
rc=
pthr
ead_
crea
te(&
thre
ad1,
NULL
,st
art_
rout
ine,
NULL
);if
(rc)
erro
r(EX
IT_F
AILU
RE,
rc,
"pth
read
_cre
ate"
);
rc=
pthr
ead_
canc
el(t
hrea
d1);
if(r
c)er
ror(
EXIT
_FAI
LURE
,rc
,"p
thre
ad_c
ance
l");
rc=
pthr
ead_
join
(thr
ead1
,(v
oid
**)&
rc_j
oin)
;if
(rc)
erro
r(EX
IT_F
AILU
RE,
rc,
"pth
read
_joi
n");
asse
rt(r
c_jo
in==
PTHR
EAD_
CANC
ELED
||rc
_joi
n==
EXIT
_SUC
CESS
);
rc=
pthr
ead_
canc
el(t
hrea
d1);
if(r
c)er
ror(
EXIT
_FAI
LURE
,rc
,"p
thre
ad_c
ance
l");
pthr
ead_
exit
(EXI
T_SU
CCES
S);
} TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
216
0
Threads
ouprocessuslégers
6Autresfonc
tions
dela
bibliothèque
POSIX
thread
s
#38
' &
$ %
Ann
ulation(2/2)
�Te
std’annu
lationexplicite
�vo
idpt
hrea
d_te
stca
ncel
(voi
d)
�Te
std’annu
lationim
plicite
�pt
hrea
d_co
nd_w
ait,
pthr
ead_
cond
_tim
edwa
it
�pt
hrea
d_jo
in,
sem_
wait
,si
gwai
t
Ilexist
edeu
xtype
sdep
oint
d’an
nulatio
n.Le
spointsd
’ann
ulationexplicite
sson
tprécisésp
arleprog
ram-
meu
ravec
lafonc
tionpthread_testcancel
.Les
points
d’an
nulatio
nim
plicite
scorrespo
ndenten
géné
ralà
desfonc
tions
pouv
anta
tten
dreun
évén
ementind
éfiniment.La
liste
despo
ints
d’an
nulatio
ndé
pend
dessys-
tèmes
(etsurtou
tde
leur
implan
tatio
n!).
Serepo
rter
àla
docu
mentatio
n(G
NU
enpa
rticulier)
pour
plus
d’inform
ation.
#39
' &
$ %
6.2Nettoyage
desressou
rces
�De
uxroutines
�vo
idpt
hrea
d_cl
eanu
p_pu
sh(v
oid
(*ro
utin
e)(v
oid
*),
void
*arg
)
�vo
idpt
hrea
d_cl
eanu
p_po
p(i
ntex
ecut
e)I
exec
uteà
0:fon
ctionsupp
rimée
dela
pile
maisno
nexécutée
Iex
ecut
eà
1:fon
ctionsupp
rimée
dela
pile
ETexécutée
�Attention
�Lesd
euxappelsdo
ivent
apparte
nira
umêm
ebloc
d’instructions
Unpo
intd
’ann
ulationpo
uvan
tintervenirà
n’im
portequ
elmom
ente
tles
ressou
rces
associéesa
uxthreads
n’étan
tpa
slib
éréesen
find’exécution(elle
sne
lesont
qu’à
lafin
duprocessus),u
nmécan
ismeaétémis
enplaceafi
nde
libérer
sesressou
rces
avan
tqu
’ilse
term
inevraiment.
Pour
uneressou
rcequ
el’o
nvientd’alloue
ràun
thread
,pthread_cleanup_pushpe
rmet
deprécise
rla
fonc
tionde
vant
être
exécutée
afinde
libérer
laressou
rce,
etle
paramètre
quiserapa
sséàcettefonc
tion.
Ces
fonc
tions
sont
placéesd
ansu
nepile
spéciale.À
laterm
inaisondu
prog
ramme,
lesfon
ctions
sont
dés-em
pilées
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
216
1
Threads
ouprocessuslégers
etexécutées.
Leprog
rammeu
rpe
utlui-m
ême
dés-em
piler
ces
fonc
tions
par
l’interméd
iaire
d’un
appe
là
pthread_cleanup_pop.
L’un
ique
paramètre
précise
sila
fonc
tiondo
itêtre
simplem
entdé
s-em
pilée(0)ou
aussie
xécu
tée(1).
pthread_cleanup_push
etpthread_cleanup_popsont
géné
ralementim
plém
entéssous
laform
ede
ma-
cros
dont
laprem
ière
ouvreun
bloc
lexicalq
ueferm
ela
second
e.Le
sde
uxap
pels
doiventap
parten
irau
mêm
ebloc
d’instructions.
Voirl’e
xempleprécéd
ent:
cancel.c
#40
' &
$ %
6.3Initialisa
tion
�Àl’entréed’un
efonctio
n�
Type
:pthread_once_t
�Va
leur:
PTHREAD_ONCE_INIT
�in
tpt
hrea
d_on
ce(
pthr
ead_
once
_t*o
nce_
cont
rol,
void
(*on
ce_r
outi
ne)(
))
�Lo
rsd’un
fork
�Du
plica
tiondu
fild’exécutionréalisant
unappelà
fork
�in
tpt
hrea
d_at
fork
(voi
d(*
prep
are)
(),
void
(*pa
rent
)(
),vo
id(*
chil
d)(
))
Une
fonc
tionpe
utêtre
utiliséep
arplusieursthreads.T
outefois,
certainesd
eses
varia
bles
peuv
entn
edevoir
être
initialisé
esqu
’une
seulefois(
c’estlec
aspo
url’o
uverture
d’un
ebased
edon
nées
pare
xemple).L
afonc
tion
pthread_once
perm
etde
réalise
rcetteop
érationen
s’affran
chiss
antde
sprob
lèmes
desynchron
isatio
nsi
plusieursthreadsl’a
ppellent
simultané
ment.
Letype
pthread_once_t
estop
aque
.Po
urêtre
utile
,un
evaria
blede
cetype
doit
être
déclarée
deman
ière
statique
ouglob
ale(afin
dene
pasavoirun
ecopiede
lavaria
blepo
urchaq
ueap
peld
efonc
tion).
L’initialisa
tions’e
ffectue
àl’a
idede
lavaleur
préd
éfiniePTHREAD_ONCE_INIT.
Lafonc
tionprécisé
een
second
paramètre
del’a
ppel
àpthread_once
n’estexécutée
quelors
duprem
ierpa
ssag
e.Le
prem
ierpa
ramètre
est
unpo
inteur
surun
evaria
blede
type
pthread_once_t
.Lo
rsd’un
appe
làla
prim
itive
fork
,seu
llefil
d’exécutionréalisa
ntl’a
ppel
estd
upliq
ué.C
epen
dant,l’en-
sembled
esressou
rces
(enpa
rticulierles
pilesd
’exécu
tions
etless
egments
demém
oire
alloué
sdyn
amique
ment
parles
autres
threads)
sont
aussid
upliq
ués.La
prim
itive
pthread_atfork
perm
etd’em
piler—
pour
chaq
ueressou
rcede
vant
être
libérée
lors
d’un
appe
làfork
—lesfonctio
nsde
vant
être
appe
lées
respectiv
ement
avan
tl’a
ppel
àfork
,par
lepè
reap
rèsl’a
ppel
àfork
etpa
rle
filsap
rèsl’a
ppel
àfork
.
Bib
liogr
aphi
edu
chap
itre
TEL
ECOM
SudP
aris—
ÉricRen
aultet
Fréd
érique
Silber-C
haussumier—
Avril
2018
—mod
uleC
SC45
08/M
216
2
Arc
hite
ctur
e
Fra
nçoi
sT
raha
y
mod
ule
CSC
4508
/M2
Avr
il20
18 163
Architecture
1Introd
uctio
n
#2
' &
$ %
Plan
dudo
cument
1Intro
duction....................................................................4
3Processeur
séqu
entie
l............................................................6
3Pipeline.
.......................................................................6
4Pa
rallelP
rocessing.
............................................................14
5Hiérarchie
mém
oire
............................................................
20
#3
' &
$ %
1Introd
uctio
n
Pourqu
oice
cours?
�Co
mprendrece
quisepassedans
lapartie“hardw
are”
dela
pile
d’exécution
�Po
urécriredesp
rogram
mes
adaptésa
uxmachinesm
odernes
Dan
sles
faits
,lecompilateur
sedébrou
illegéné
ralementp
ourg
énérer
unbina
irequ
ipermette
d’exploiter
toutes
lescapa
citésdu
processeur.M
aisle
compilateur
écho
uepa
rfois
etgénè
reun
code
nonop
timisé
.Il
faut
donc
être
capa
blede
détecter
leprob
lème,
etêtre
capa
bled’écrir
eun
code
quele
compilateur
saura
optim
iser.
TEL
ECOM
SudP
aris
—Fran
çois
Trah
ay—
Avril
2018
—mod
uleCSC
4508
/M2
164
Architecture
#4
' &
$ %
1.1Lo
ideMoore
1965
–20
05
�Lo
ideMoo
re(196
5):leno
mbrede
transistorsd
esmicr
oprocesseursd
oubletous
lesdeux
ans
�La
finesse
degravuredu
processeur
diminue
�La
fréqu
ence
d’horlo
geaugm
ente
–>Au
gmentatio
ndesp
erform
ancesd
uprocesseur
Depu
is20
05
�La
finesse
degravurecontinue
dediminuer(
mais
moins
vite)
�La
fréqu
ence
d’horlo
gen’augm
ente
plus
�Dissipationthermique
dépend
dela
fréqu
ence,d
uno
mbrede
transistors,de
lataille
dest
ransistors
�Si
ondiminue
lataille
dest
ransistors,ilfaut
rédu
irela
fréqu
ence
#5
' &
$ %
2Processeur
séqu
entie
l
�Un
einstructionnécessite
Nétap
es�
Fetch:c
hargem
entd
el’instru
ctiondepu
isla
mém
oire
�De
code
:identificatio
nde
l’instru
ction
�Ex
ecute:e
xécutio
nde
l’instru
ction
�Writeback:stockagedu
résulta
t
�Ch
aque
étap
eestt
raité
eparu
ncir
cuitdu
processeur
�La
plup
artd
escir
cuits
n’estp
asutilis
éeàchaque
étap
e
→Un
einstructioneste
xécutéetous
lesN
cycle
s
inst
ruct
ions
cycl
es
d'h
orl
og
e
Fetc
h
Deco
de
Exe
cute
Wri
teback
Leno
mbred’étap
esné
cessaire
àl’e
xécu
tiond’un
einstructiondé
pend
dutype
deprocesseur
(Pentiu
m4:
31étag
es,Intel
Haswe
ll:1
4-19
étag
es,A
RM9:5
étag
es,e
tc.)
TEL
ECOM
SudP
aris
—Fran
çois
Trah
ay—
Avril
2018
—mod
uleCSC
4508
/M2
165
Architecture
3Pipe
line
#6
' &
$ %
3Pipe
line
�Pipelined’instructions
�Àchaque
étap
e,plusieu
rscir
cuits
sont
utilis
és
→Un
einstructioneste
xécutéeàchaque
cycle
inst
ruct
ions
Fetc
h
Deco
de
Exe
cute
Wri
teb
ack
cycl
es
d'h
orl
oge
Fig
ure1:E
xécutio
nd’instructions
suru
nprocesseur
avec
pipeline
#7
' &
$ %
3.1Micro
archite
ctured’un
pipe
line
�Ch
aque
étagedu
pipelineestimplém
enté
paru
nensemblede
porte
slog
iques
�ÉtageEx
ecute:u
nsous-circ
uitp
artype
d’op
ération(unité
fonctio
nnelle)
fetch
decode
int
float
branch
mem
writeback
Fig
ure2:M
icro-archite
ctured’un
pipeline
TEL
ECOM
SudP
aris
—Fran
çois
Trah
ay—
Avril
2018
—mod
uleCSC
4508
/M2
166
Architecture
3Pipe
line
#8
' &
$ %
3.2Processeurssupe
rscalaire
s
�Ut
ilisation
desdiffé
rentes
unité
sfonc-
tionn
elles
simultanément
→plusieu
rsinstructions
exécutéess
imulta-
nément!
�Né
cessité
dechargere
tdécod
erplusieu
rsinstructions
simultanément
fetc
h
int
float
wri
teb
ack
wri
teb
ack
test
bra
nch
mem
wri
teb
ack
deco
de &
dis
patc
h
Fig
ure
3:Micr
o-archite
ctured’un
pro-
cesseurs
uperscala
ire
#9
' &
$ %
3.3Processeurssupe
rscalaire
s
inst
ruct
ions
Fetc
h
Deco
de
Exe
cute
Wri
teb
ack
cycl
es
d'h
orl
oge
TEL
ECOM
SudP
aris
—Fran
çois
Trah
ay—
Avril
2018
—mod
uleCSC
4508
/M2
167
Architecture
3Pipe
line
#10
' &
$ %
3.4Dép
endanceentreinstructions
Limita
tions
dusupersc
alaire
:
�ilne
doitpasy
avoird
edépend
ance
entre
lesinstructions
exécutéess
imultanément.
�Ex
empled’instructions
nonparallélisables
a=b*c;
d=a+1;
�De
gréde
parallélismedesinstru
ctions
:Instru
ctionLevelP
arallelism
(ILP)
�Lesinstru
ctions
exécutéese
nparallèles
doive
ntutilis
erdesu
nitésf
onctionn
elles
diffé
rentes
#11
' &
$ %
3.5Gestio
ndesbranchem
ents
�Co
mmentr
emplirle
pipelinequ
andles
instructions
contien
nent
desb
ranchements
cond
ition
nels?
cmpa,
7;a>7?
bleL1
movc,
b;b=c
brL2
L1:movd,
b;b=d
L2:...
�En
casd
emauvaischoix:ilfaut“
vider”le
pipeline
→perte
detemps
inst
ruct
ions
cycl
es
d'h
orl
og
e
cmp a,7
ble L1
mov d,b
mov c,b
?
Fetc
h
Deco
de
Exe
cute
Wri
teb
ack
Lecoût
d’un
mau
vaischoixlors
duchargementd
’une
bran
chedépe
ndde
laprofon
deur
dupipe
line:p
lus
lepipe
lineestlon
g,plus
ilfaut
vide
rd’étages(
etdo
ncattend
reavan
td’exécuteru
neinstruction).P
ourc
ette
raiso
n(entre
autres),
laprofon
deur
dupipe
lineda
nsun
processeur
estlim
itée.
TEL
ECOM
SudP
aris
—Fran
çois
Trah
ay—
Avril
2018
—mod
uleCSC
4508
/M2
168
Architecture
3Pipe
line
#12
' &
$ %
3.6Prédictio
nde
branchem
ent
�Le
processeur
implém
ente
unalg
orith
mede
prédict
ion
�Idée
générale
:�
Pour
chaque
branchem
ent,on
serapp
elledesr
ésultats
précédents
0x12
loop: ..
.0x50
inceax
0x54
cmpl
eax,
10000
0x5A
jlloop
0x5C
end_loop:
...
ad
dr
bra
nch
his
tory
0x23
0011
0x42
1000
0x5A
1111
0x7E
0000
Lesalgo
rithm
esde
préd
ictio
nde
bran
chem
entim
plém
entésda
nslesprocesseursmod
erne
ssont
aujour-
d’hu
itrèsévolué
set
atteigne
ntun
eeffi
cacité
supé
rieureà98
%(sur
lasuite
debe
nchm
arks
SPEC
89).
Pour
conn
aîtrele
nombrede
bonn
es/m
auvaise
spréd
ictio
ns,o
npe
utconsulterlescompteu
rsmatériels
duprocesseur.A
vecla
bibliothèque
PAPI
1 ,lesc
ompteu
rsPAPI_BR_PRCet
PAPI_BR_MSPdo
nnentleno
mbre
debran
chem
ents
correctementet
incorrectementpréd
its.
#13
' &
$ %
3.7Instructions
vectorielles
�De
nombreusesa
pplications
fonctio
nnente
nmod
eDa
taPa
rallelism
�Sing
leInstruction,
Multip
leDa
ta(SIM
D):u
nemêm
eop
érationappliquéeàun
ensemblede
donn
ées
for(i=0;
i<size;i++)
{C[i]
=A[i]
*B[i];
}
�Ex
emple:image,
scien
tificcompu
ting
�Ut
ilisationd’instructions
vectorielles
(MMX,
SSE,
AVX,
...)
�instructions
spécifiqu
esàun
type
deprocesseur
for(i=0;
i<size;i+=8)
{*pC=_mm_mul_ps(*pA,*pB);
pA++;pB++;pC++;
}
Lesinstructions
vectorielle
son
tétédé
mocratis
ésàla
finde
san
nées
1990
avec
lesjeux
d’instructions
MMX
(Intel)e
t3DNow
!(AMD)p
ermettant
detravaille
rsur
64bits
(par
exem
plepo
urfaire
2op
érations
32bits
ensim
ultané
).Dep
uis,chaq
uegéné
ratio
nde
processeursx
86ap
portesonextensionau
jeud’instruction:
SSE2
,SSS
E3(128
bits),
SSE4
,AVX,A
VX2(256
bits),
AVX51
2(512
bits).
Lesau
tres
type
sde
processeurs
fournissentégalem
entdesjeux
d’instructions
vectorielle
s(par
exem
pleNEO
N(128
bits)surARM).
Lesjeux
d’instructions
vectorielle
ssont
spécifiqu
esàcertains
processeurs.
Lefichier
/proc/cpuinfo
1.http
://icl.cs.utk.edu/
projects/p
api/
TEL
ECOM
SudP
aris
—Fran
çois
Trah
ay—
Avril
2018
—mod
uleCSC
4508
/M2
169
Architecture
contient
(entre
autres)lesjeux
d’instructions
dispon
iblessurle
processeur
d’un
emachine
.Par
exem
ple,
sur
unIntelC
orei7
:
$cat
/proc/cpuinfo
processor:0
vendor_id:GenuineIntel
cpufamily
:6
model:69
modelname
:Intel(R)
Core(TM)
i7-4600U
stepping
:1
microcode:0x1d
cpuMHz:1484.683
cachesize
:4096
KBphysical
id:0
siblings
:4
core
id:0
cpucores:2
apicid
:0
initialapicid
:0
fpu:yes
fpu_exception:yes
cpuidlevel:13
wp:yes
flags:fpuvmede
psetscmsrpaemcecx8apic
sepmtrr
pgemcacmov
patpse36clflushdtsacpi
mmxfxsr
ssesse2
ssht
tmpbesyscallnx
pdpe1gbrdtscp
lmconstant_tsc
arch_perfmon
pebs
btsrep_good
nopl
xtopologynonstop_tscaperfmperf
eagerfpu
pnipclmulqdqdtes64
monitords_cpl
vmxsmxesttm2ssse3sdbg
fmacx16
xtpr
pdcm
pcid
sse4_1
sse4_2
x2apic
movbepopcnt
tsc_deadline_timer
aesxsaveavx
f16c
rdrand
lahf_lmabmidaarat
epbplnptsdtherm
tpr_shadow
vnmi
flexpriority
eptvpid
fsgsbase
tsc_adjust
bmi1
avx2
smep
bmi2
erms
invpcidxsaveopt
bugs
:bogomips
:5387.82
clflushsize
:64
cache_alignment:64
addresssizes:39
bits
physical,48
bits
virtual
powermanagement:
[...] Lecham
psflagscontient
laliste
detoutes
lescapabilitiesdu
processeur,n
otam
mentlesjeux
d’instruc-
tions
dispon
ibles:m
mx,sse,
sse2,ssse3,
sse4_1,sse4_2,avx2
.
L’utilisatio
nde
cesjeux
d’instructions
vectorielle
spe
utse
faire
enprog
ramman
tdirectem
enten
assem-
bleu
rou
enexploitant
lesintrinsics
quefournissentlescompilateurs.
Toutefois,
devant
leno
mbrede
jeux
d’instructions
dispon
ible
etl’évo
lutilité
desarchite
ctures
deprocesseurs,
ilestrecomman
déde
laiss
erle
compilateur
optim
iserluim
êmele
code
,par
exem
pleen
utilisant
l’option-O
3.
TEL
ECOM
SudP
aris
—Fran
çois
Trah
ay—
Avril
2018
—mod
uleCSC
4508
/M2
170
Architecture
4Pa
ralle
lProcessing
#14
' &
$ %
4Pa
rallelP
rocessing
#15
' &
$ %
4.1Hyperthreading/SM
T
�Prob
lèmedu
supersc
alaire
/vectorie
l:�
Ilfaut
quel’app
licationait
suffisammentd
eparallélismeàexploiter
�Ilyad’autre
sapp
lications
quia
ttend
entd
’avoirle
CPU
�Simultaneou
sMulti-Th
reading(SMT)
:�
Mod
ifier
unprocesseur
supersc
alaire
pour
l’exécutio
nde
plusieu
rsthreads
�Du
plica
tionde
certa
insc
ircuits
�Mise
encommun
decerta
insc
ircuits
ALU
(in
t)
FPU
(float)
ALU
(in
t)
fetc
hd
eco
de &
dis
patc
h
Mem
/Bra
nch
Mem
/Bra
nch
wri
teb
ack
Thre
ad B
Thre
ad A
Share
d
LeSM
Testu
nmoyen
peucher
d’au
gmenterles
perfo
rman
cesd
’unprocesseur
:endu
pliqua
ntles“
petit
s”circuits
(ALU
,regist
res,etc.)e
tenmettant
encommun
les“
gros”circuits
(FPU
,prédictionde
bran
chem
ents,
caches),
onpe
utexécuter
plusieursthread
ssim
ultané
ment.
Lesurcoû
ten
term
ede
fabricationestlégeret
lega
inen
perfo
rman
cespe
utêtre
gran
d.Com
mele
dispatcher
ordo
nnan
celesinstruc
tions
deplusieurst
hreads,u
neerreur
dupréd
icteur
debran
-chem
entd
evient
moins
gravepu
isque
pend
antq
uele
pipe
linedu
thread
fautifse
reno
uvelle,u
nau
trethread
peut
s’exécu
ter.
Lega
inde
perfo
rman
celorsqu
eplusieursthread
ss’e
xécu
tent
n’estpa
ssystém
atique
puisq
uecertains
circuits
restentpa
rtag
és(par
exem
ple,
leFP
U).
TEL
ECOM
SudP
aris
—Fran
çois
Trah
ay—
Avril
2018
—mod
uleCSC
4508
/M2
171
Architecture
4Pa
ralle
lProcessing
#16
' &
$ %
4.2Processeursmulti-cœ
urs
�Sc
alabilitédu
SMT
limité
e�
dispatcher
parta
gé�
FPU
parta
gé
→Du
plica
tionde
tous
lescir
cuits
ALU
(in
t)
FPU
(float)
ALU
(in
t)
fetc
hdeco
de &
dis
patc
hM
em
/Bra
nch
Mem
/Bra
nch
wri
teback
Core
B
Core
A
fetc
hdeco
de &
dis
patc
h
wri
teback
FPU
(float)
Ilestbien
sûrpo
ssible
decombine
rmulti-
cœur
avec
SMT.La
plup
artde
sfond
eurs
prod
uisent
des
processeursmulti-
cœur
SMT
:IntelCorei7
(4cœ
ursx2thread
s),SP
ARC
T3Niaga
ra-3
(16cœ
ursx8
thread
s),IBM
POW
ER7(8
cœursx4thread
s).
#17
' &
$ %
4.3Architectures
SMP
�Sy
mmetric
Multi-Processin
g
�As
semblagede
processeurss
urun
ecarte
mère
�Lesp
rocesseurs
separta
gent
lebu
ssystème
�Lesp
rocesseurs
separta
gent
lamém
oire
�Prob
lèmede
scala
bilité:c
ontentionpo
url’accès
aubu
s
CPU
CPU
Mem
Syst
em
bu
sI/O
TEL
ECOM
SudP
aris
—Fran
çois
Trah
ay—
Avril
2018
—mod
uleCSC
4508
/M2
172
Architecture
5Hiérarchiemém
oire
#18
' &
$ %
4.4Architectures
NUMA
�Nœ
udsNU
MAconn
ectésp
arun
réseau
rapide
�Co
hérencemém
oire
entre
lesprocesseurs
�Ac
cèsp
rivilégiéau
banc
mém
oire
local
�Ac
cèsp
ossib
le(avecun
surcoû
t)auxbancsm
émoire
situéss
urles
autre
snœud
s
→No
n-Un
iform
Mem
oryAr
chite
cture CPU
Mem I/O
CPU
Mem
I/O
CPU
Mem
CPU
Mem
Lesprem
ièresmachine
sNUMA
(dan
slesan
nées
1990
)étaientsim
plem
entde
sen
sembles
demachine
srelié
espa
runréseau
prop
riétaire
chargé
degérerles
tran
sfertsm
émoire.D
epuis2
003,
certaine
scartesm
ères
perm
ettent
derelie
rplusieursprocesseursOpteron
(AMD)relié
spa
run
lienHyp
erTr
ansport.Intela
parla
suite
développ
éune
techno
logies
imila
ire(Q
uick
Path
Intercon
nect,Q
PI)p
ourr
eliers
esprocesseursN
ehalem
(sortis
en20
07).
#19
' &
$ %
5Hiérarchiemém
oire
TEL
ECOM
SudP
aris
—Fran
çois
Trah
ay—
Avril
2018
—mod
uleCSC
4508
/M2
173
Architecture
5Hiérarchiemém
oire
#20
' &
$ %
5.1En
jeux
�Jusqu’en
2005
:aug
mentatio
ndesp
erfs
desC
PUs:
55%/an
�De
puis20
05:a
ugmentatio
ndu
nombrede
cœur
parp
rocesseur
�Au
gmentatio
ndesp
erfs
dela
mém
oire
:10%
/an
�Ce
sont
lesaccèsm
émoire
quison
tcoû
teux
:Mem
oryWall
�Ilfaut
desm
écanism
espo
uram
éliorer
lesperfo
rmancesd
ela
mém
oire
Jusqu’au
xan
nées
1990
,lego
ulet
d’étrang
lementé
taitleprocesseur.D
upo
intd
evu
elogiciel,o
ncherchait
alorsàminim
iserle
nombred’instructions
àexécuter.
Avec
l’aug
mentatio
nde
spe
rform
ancesde
sprocesseurs,
lapressio
nestmainten
antsurla
mém
oire.C
ôté
logiciel,o
ncherchedo
ncàminim
iserle
nombred’accèsàla
mém
oire.C
ette
pressio
nsurla
mém
oire
est
exacerbé
epa
rle
développ
ementde
sprocesseursmulti-
cœurs.
Pare
xemple,
unprocesseur
IntelC
orei7
peut
engend
rerjusqu
’à2accèsm
émoire
parc
ycle
d’ho
rloge.U
nprocesseur
à8cœ
ursh
yper-threadé
s(do
nc16
thread
s)tourna
ntà3.0Ghz
1pe
utdo
ncgéné
rer2×
16.0×
109
=96
milliardsde
référenc
esmém
oire
parsecond
e.Si
l’onconsidèrede
saccèsàdesdo
nnéesde
64bits,c
ela
représente
3072
Go/
s(3.07
2To
/s).À
cesa
ccès
auxdo
nnées,ilfaut
ajou
terles
accèsa
uxinstructions
(jusqu’à
128bits
parinstruction).O
narriv
edo
ncà61
44Go/
s(don
c6.14
4To
/s!)
dedé
bitmax
imum
.
Àtit
rede
compa
raiso
n,en
2016
,une
barettede
mém
oire
RAM
(DDR4)
aun
débitmax
imum
del’o
rdre
de20
Go/
s.Ilestdo
ncné
cessaire
demettreen
placede
smécan
ismes
pour
évite
rqu
ele
processeur
nepa
sse
sontemps
àattend
rela
mém
oire.
1.Exemple:u
nIntelC
orei7-596
0Xsortie
n20
14
TEL
ECOM
SudP
aris
—Fran
çois
Trah
ay—
Avril
2018
—mod
uleCSC
4508
/M2
174
Architecture
5Hiérarchiemém
oire
#21
' &
$ %
5.2Ca
ches
�Ac
cèsà
lamém
oire
(RAM
)trèsc
oûteux
(env.6
0ns
–env.
180cycle
s)
�Po
uraccélér
erles
accèsm
émoire,u
tilisa
tionde
mém
oire
cacherapide
:�
CacheL1
:trèsp
etite
capacit
é(ty
piqu
ement:
64Ko
),trè
srapide(env.4
cycle
s)�
CacheL2
:petite
capacit
é(ty
piqu
ement:
256Ko
),rapide
(env.1
0cycle
s)�
CacheL3
:grand
ecapacit
é(ty
piqu
ement:
entre
4Moet
20Mo),lent(
env.
40cycle
s)
�Ac
cèsa
udisque
dur(
SWAP
)trèsc
oûteux
:env.4
0ms(
150µssuru
ndisque
SSD)
Pour
visualise
rla
hiérarchie
mém
oire
d’un
emachine
,vou
spo
uvez
utiliserl’o
utillstopo
fourni
parla
bibliothèque
hwloc.
TEL
ECOM
SudP
aris
—Fran
çois
Trah
ay—
Avril
2018
—mod
uleCSC
4508
/M2
175
5Hiérarchiemém
oire
5.3Mem
oryMan
agem
entUnit(M
MU)
#22
' &
$ %
5.3Mem
oryManagem
entUnit(M
MU)
�Traduitles
adresses
mém
oire
virtuelles
enadresses
physiques
�Ch
erched
ansleT
LB(Translat
ionLo
o-kasid
eBu
ffer),
puis
dans
latabledes
pages
�Un
efoisl’adresse
physique
trouvée,d
e-mande
lesdo
nnéesa
ucache/mém
oire
Data
/ Inst
ruct
ion
reg
iste
rs
CPU
MM
U
TLB
cach
eR
AM
dis
k
Pag
eta
ble
vad
dr.
p a
dd
r.
#23
' &
$ %
5.3.1
Fully
-ass
ocia
tivecaches
�Ca
che=
tableauàN
entré
es�
Àchaque
référence,
recherchede
Tag
dans
letableau
�Si
trouvé(cache
hit)
etVa
lid=1:a
ccès
àla
ligne
decacheDa
ta�
Sino
n(cache
miss
):accèsR
AM�
Prob
lème:
nécessite
deparcou
rirtout
letableau
→Princip
alementutilis
épo
urles
petitscaches
(ex:T
LB)
Adresse
Tag
Offset
Tag
Data
Valid
Latailled’un
elig
nede
cachedé
pend
duprocesseur
(gén
éralem
ententre32
et12
8octets).
On
peut
retrou
vercetteinform
ationda
ns/proc/cpuinfo:
$cat/proc/cpuinfo
|grepcache_alignment
cache_alignment:64
TEL
ECOM
SudP
aris
—Fran
çois
Trah
ay—
Avril
2018
—mod
uleCSC
4508
/M2
176
5Hiérarchiemém
oire
5.3Mem
oryMan
agem
entUnit(M
MU)
#24
' &
$ %
5.3.2
Dire
ct-m
appe
dcaches
�Ut
ilisationdesbits
depo
idsfaible
del’adresse
pour
trouver
l’ind
exde
l’entréedans
lecache
�Co
mparaiso
ndu
Tag
(bits
depo
idsfort)
del’adresse
etde
l’entrée.
→Ac
cèsd
irect
àla
ligne
decache
�Attention:risq
uede
collis
ion
�exem
ple:0
x123
4567
8et
0xbff
7267
8
Ad
ress
e
Tag
Off
set
Tag
Data
Valid
31
30
...
13
12
11
2
1
0
...
10
Ind
ex
0 1 2 ...
10
21
10
22
10
23
=20
32
20
Ind
ex
#25
' &
$ %
5.3.3
Set-
asso
ciat
ivecaches
�Index
pour
accéderàun
setde
Klignesde
cache
�Re
cherchedu
Tagparm
iles
adresses
duset
→Ca
che
associa
tifK-
voies
(K-way
associa
tive
cache)
Ad
ress
e
Tag
Off
set
Tag
Data
Valid
31
30
...
13
12
11
2
1
0
...
10
Ind
ex
0 20
Ind
ex
1 ...
n-1 n
00
11
...
10
10
00
11
...
10
10
10
01
...
01
10
32
Deno
sjou
rs,les
caches
(L1,
L2et
L3)s
ontg
énéralem
enta
ssociatifsà
4(A
RM
CortexA9pa
rexemple),
8(Intel
Sand
yBr
idge),voire
16(A
MD
Opteron
Mag
ny-C
ours)voies.
TEL
ECOM
SudP
aris
—Fran
çois
Trah
ay—
Avril
2018
—mod
uleCSC
4508
/M2
177
Architecture
#26
' &
$ %
5.3.4Co
hérencede
cache
�Que
faire
si2threadsa
ccèdentà
unemêm
ezone
mém
oire?
�En
lecture
:réplicationdans
lescaches
locaux
�En
écriture:n
écessitéd’invalider
lesdo
nnéesd
ansles
autre
scaches
ICa
chesnoo
ping
:lecacheenvoie
unmessage
quiinvalide
lesautre
scaches
Pour
détailler
unpe
uplus
cecours,
jevous
conseille
cettepa
gewe
b:M
odernmicroprocessors
–A
90minutes
guide!
(http://www.lighterra.com/papers/modernmicroprocessors/).
Pour
avoir(
beau
coup
)plusd
edétails,
tourne
zvou
sversles
livres[?]
et[?]d
écriv
ente
ndé
taill’a
rchitecture
d’un
ordina
teur.S
ivou
scherchez
àconn
aîtrele
fonc
tionn
ementtrès
endé
taild’un
pointprécis,
lisez
[?].
Bib
liogr
aphi
edu
chap
itre
TEL
ECOM
SudP
aris
—Fran
çois
Trah
ay—
Avril
2018
—mod
uleCSC
4508
/M2
178
Élé
men
tsd’
arch
itec
ture
clie
nt-s
erve
ur
Mic
hel
Sim
atic
mod
ule
CSC
4508
/M2
Avr
il20
18 179
Élém
ents
d’archite
ctureclient-serveur
1Introd
uctio
n
#2
' &
$ %
Plan
dudo
cument
1Intro
duction....................................................................4
2Se
rveurm
ono-tâchegérant
unclientà
lafois.....................................7
3Se
rveura
vecautant
detâches
quede
clients
....................................11
4Se
rveura
vecN
tâches
gérant
tous
lesclients....................................16
5Se
rveurm
ono-tâchegérant
tous
lesclients
àla
fois..............................18
6Co
nclusio
n.....................................................................23
#3
' &
$ %
1Introd
uctio
n
1.1
Défin
ition
d’un
earchite
ctureclient/serveur.
....................................4
1.2
Objectif
decette
présentatio
n..................................................5
2.0
Àprop
osdesc
ommun
icatio
ns..................................................7
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
180
Élém
ents
d’archite
ctureclient-serveur
1Introd
uctio
n
#4
' &
$ %
1.1Définitio
nd’un
earchite
ctureclient/serveur
�Un
eapplica
tionfonctio
nneselonun
earchite
ctureclient-s
erveur
quand:les
machines«
clientes»
contactent
unemachine
«serveur»
afinqu
ece
serveurleur
fournisseun
service
(via
l’exécutio
nd’un
prog
ramme)
�Lesc
lientse
nvoientd
esrequ
êtes
�Le
serveure
nvoiedesr
épon
ses
Clie
nt
Clie
nt
Se
rve
ur
Re
qu
ête
Ré
po
nse
Re
qu
ête
Ré
po
nse
Exem
ples
d’ap
plications
:
•Se
rveu
rd’im
pressio
n
•Se
rveu
rWeb
•Se
rveu
rd’au
toris
ationde
cartes
banc
aires
•Se
rveu
rde
•Tr
aitementd’un
appe
l(étab
lissement,raccrochag
e...)da
nsun
commutateu
rtéléph
onique
•Lo
calisationd’un
mob
ileGSM
lors
d’un
appe
lversce
mob
ile
#5
' &
$ %
1.2Objectif
decetteprésentatio
n
�Étud
ierdiffé
rentes
archite
ctures
logicie
llesp
ourt
raite
rleflu
xde
requ
êtes
arriv
anta
univeau
duserveur
4typesd
’archite
cture:
�Se
rveurm
ono-tâchegérant
unclientà
lafois
�Se
rveura
vecautant
detâches
quede
clients
�Se
rveura
vecN
tâches
gérant
tous
lesclients
�Se
rveurm
ono-tâchegérant
tous
lesclients
àla
fois
�An
alyserles
qualitése
tles
défautsd
echacun
ede
cesa
rchitectures
�Étud
iercommentc
ombinerles
diffé
rentes
briquesd
usystèm
ed’exploitatio
npo
urdisposer
del’architecturela
plus
prop
iceàrépo
ndre
auxbesoinsd
el’app
lication
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
181
Élém
ents
d’archite
ctureclient-serveur
Selonl’u
nité
demulti-
prog
rammationutilisée,
une«tâche»sera
implém
entéeviaun
«processus»ou
un«thread
».Nepa
shé
siter
àcompléter
cecoursavec
lalecturede
[Leitner,2
003]
et[K
egel,2
006].Ils
contienn
entde
nombreu
sesinform
ations
techniqu
es.
#6
' &
$ %
1.3Àprop
osdescommun
ications
�To
utprocessus(
cliento
userveur)
peut
recevoirdesm
essagesv
iaun
(ouplusieu
rs)«po
int(s)
d’accès»
quilui
est(
sont)p
ropre(s)
�Po
urqu
’unautre
processuslui
envoie
unmessage
viaun
«po
intd
’accès
»,ilfaut,
aupréalab
le,qu
eceta
utre
processuss
e«conn
ecte
»(ausens
protocolair
edu
term
e)(exemple:T
CP,tub
eno
mmé)
ouno
n(exemple:U
DP,S
ystèmede
signalisationCC
ITT
No7)
�Pa
rabu
sdelan
gage,o
ndita
ussiqu
’unclients
e«conn
ecte
»au
serveurlorsqu’ila
unesuite
d’échang
esrequ
ête/répo
nseavec
leserveur(
cette
«conn
exionclient»
nécessita
ntun
econn
exionprotocolair
eou
non).
Dans
lasuite
decette
présentatio
n,le
term
ede
«conn
exion»désig
nera
toujou
rsun
e«conn
exionclient»
�L’aspect
commun
icatio
ninter-m
achine
esth
orsd
ucontexte
dece
cours.Do
nc,d
ans
lesTP
s,on
utilis
erades«
files
demessages»
engu
isede
«po
ints
d’accès»
Dan
sla
pratique
,un«po
intd’accès»est:
Cas
UDP/T
CP
uncoup
lead
resseM
achine
/port
Cas
Tube
nommé
unno
mde
fichier
Cas
SS7
unead
resseSy
stèm
ede
signa
lisationCCIT
TN
o7(SS7
ou#7)
Laprog
rammationde
s«sockets»po
urgérerd
esflu
xTCPou
desm
essagesU
DPesta
bordée
dans
l’U.V
.«
Algorith
mique
etcommun
ications
desap
plications
»(C
SC45
09).
Mêm
esi
lesTPs
sefont
enintra-machine
,tou
slesélém
ents
présentésicis
ontvalid
esen
environn
ement
inter-machine
.Dan
slesTPs
,nou
sutilisons
des«files
demessages».
Onpo
urraitutiliserau
ssid
es«tube
sno
mmés
».
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
182
Élém
ents
d’archite
ctureclient-serveur
2Se
rveu
rmon
o-tâchegérant
unclient
àla
fois
#7
' &
$ %
2Se
rveurmon
o-tâchegérant
unclient
àla
fois
2.1
Princip
e......................................................................8
3.0
Analy
se......................................................................10
#8
' &
$ %
2.1Principe
�La
tâcheserveurt
raite
lesconn
exions
clientd
ebo
uten
bout
C1
Serv
eur
C1
C1
Serv
eur
Serv
eur
C2
1
C2
2
C2
3
Réponse12
Requête
11
Réponse11
Requête
12
Requête
21
•En
1,le
serveu
resten
attented’un
e«conn
exionclient
».Le
client
C1pe
utdo
ncse
conn
ecterau
serveu
rpo
urenvoyerla
requ
êteRequête11(con
tena
ntla
référencede
sonpo
intd’accèssurlequ
elil
attend
desrépo
nses).
•En
2,le
serveu
rtraite
cetterequ
êtede
laman
ière
suivan
te:
–Ilou
vreun
«po
intd’accès»dé
diéC1-Serveur
–Ilenvo
iesa
répo
nseRéponse11(avec
laréférenc
edu
«po
intd’accès»dé
dié)
–Il
attend
d’au
tres
requ
êtes
(ouun
message
deferm
eturede
«conn
exionclient
»)surce
«po
int
d’accès»dé
dié.
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
183
Élém
ents
d’archite
ctureclient-serveur
2Se
rveu
rmon
o-tâchegérant
unclient
àla
fois
•En
3,leserveu
rrép
ondau
xdiffé
rentes
requ
êtes
duclient
C1.E
nrevanche
,com
meiln’estp
asàl’é
coute
surson«po
intd’accès»principa
ld’attente
de«conn
exionclient
»,ilne
serend
pascomptequ
eC2
aenvoyé
larequ
êteRequête21po
urlaqu
elle
ilattend
unerépo
nse.
Exem
pled’ap
plications
basées
surcettearchite
cture:
•Se
rveu
rd’im
pressio
n
Tout
aulong
dece
chap
itre
«Architecture
client/serveur
»,no
usutilisons
desexem
ples
decode
avec
unmêm
eclient
etde
sserveu
rsillustran
tlesdiffé
rentes
archite
ctures.C
esexem
ples
sont
inspiré
sde
exemple_mkfifo_client.cet
exemple_mkfifo_serveur.c
étud
iéslors
ducours«Com
mun
ications
inter-
processus».
Mais,
ici:
1.la
conn
exionclient-serveur
sefaitavec
uneconn
exionTCP;
2.le
client
envoie
unmessage
auserveu
rqu
irép
onden
signa
lant
REQUETE_OK
.Leclient
envoie
ensuite
lemêm
emessage
auserveurqu
irép
ondàno
uveauen
signa
lant
REQUETE_OK
.Lorsque
leclient
envoie
lemêm
emessage
pour
laon
zièm
efois,
leserveu
rrépo
nden
signa
lant
REQUETE_KO
.Leclient
s’arrête
alors.
$./clientTCPessaiClientTCP
Client
essaiClientTCP
:Connecte
!Client
essaiClientTCP
:Envoide
requetes
vers
leserveur...
Client
essaiClientTCP
:Nouvelle
reponsedu
serveur="1-ieme
reponseau
client
’essaiClientTCP’"==>OK
Client
essaiClientTCP
:Nouvelle
reponsedu
serveur="2-ieme
reponseau
client
’essaiClientTCP’"==>OK
[...]
Client
essaiClientTCP
:Nouvelle
reponsedu
serveur="9-ieme
reponseau
client
’essaiClientTCP’"==>OK
Client
essaiClientTCP
:Nouvelle
reponsedu
serveur="10-ieme
reponseau
client
’essaiClientTCP’"==>OK
Client
essaiClientTCP
:Envoide
requetes
termine!
Voicilecode
duclient
:/*
****
****
****
***/
/*cl
ient
TCP.
c*/
/***
****
****
****
*/
#inc
lude
<std
lib.
h>#i
nclu
de<s
tdio
.h>
#inc
lude
<str
ing.
h>#i
nclu
de<s
ys/t
ypes
.h>
#inc
lude
<sys
/soc
ket.
h>#i
nclu
de<n
etin
et/t
cp.h
>//
Toge
tTC
P_NO
DELA
Yde
clar
atio
n#i
nclu
de<n
etdb
.h>
#inc
lude
<uni
std.
h>
#inc
lude
"Err
.h"
#inc
lude
"ini
tCom
muni
cati
onTC
P.h"
#inc
lude
"cli
ent-
serv
eur.
h"
// //Co
nsta
ntes
defo
ncti
onne
ment
dupr
ogra
mme
// #def
ine
TEMP
S_IN
TER_
REQ
1000
0//
Temp
sen
tre
2re
quet
es(e
nmi
cro-
seco
ndes
)
int
main
(int
argc
,ch
ar*a
rgv[
]){
if(a
rgc
!=2)
{pr
intf
("Us
age
=cl
ient
iden
tifi
antC
lien
t\n"
);ex
it(E
XIT_
FAIL
URE)
;} ch
ar*i
dCli
ent
=ar
gv[1
];
// //Co
nnex
ion
ause
rveu
r// in
tfd
Conn
exio
n=
conn
exio
nPoi
ntDA
cces
();
prin
tf("
Clie
nt%6
s:
Conn
ecte
!\n"
,id
Clie
nt);
// //En
voi
dere
quet
esau
serv
eur
jusq
u’a
cequ
’il
nous
renv
oie
REQU
ETE_
KO// pr
intf
("Cl
ient
%6s
:En
voi
dere
quet
esve
rsle
serv
eur.
..\n
",id
Clie
nt);
mess
age_
tms
gRep
onse
;
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
184
Élém
ents
d’archite
ctureclient-serveur
2Se
rveu
rmon
o-tâchegérant
unclient
àla
fois
int
nbRe
pons
esOK
=0;
do{ //
Envo
ire
quet
eme
ssag
e_t
msgR
eque
te;
msgR
eque
te.t
yp=
REQU
ETE;
strn
cpy(
msgR
eque
te.i
nfoS
up.i
dCli
ent,
idCl
ient
,TA
ILLE
_ID_
CLIE
NT);
int
nbWr
ite
=wr
ite(
fdCo
nnex
ion,
&msg
Requ
ete,
size
of(m
sgRe
quet
e));
if(n
bWri
te<
size
of(m
sgRe
quet
e))
ERR(
EXIT
_FAI
LURE
,__
FILE
__,
__LI
NE__
,"P
robl
eme
writ
esu
rco
nnex
ion
TCP"
);
//Le
ctur
ere
pons
ein
tnb
Read
=re
ad(f
dCon
nexi
on,
&msg
Repo
nse,
size
of(m
sgRe
pons
e));
if(n
bRea
d!=
size
of(m
sgRe
pons
e))
ERR(
EXIT
_FAI
LURE
,__
FILE
__,
__LI
NE__
,"C
ommu
nica
tion
avec
lese
rveu
rpr
obab
leme
ntro
mpue
\n")
;if
(msg
Repo
nse.
typ
==RE
QUET
E_OK
){
//An
alys
ere
pons
enb
Repo
nses
OK++
;ch
arpa
yloa
dAtt
endu
e[TA
ILLE
_PAY
LOAD
];CA
LCUL
_PAY
LOAD
(pay
load
Atte
ndue
,id
Clie
nt,
nbRe
pons
esOK
);if
(str
cmp(
payl
oadA
tten
due,
msgR
epon
se.i
nfoS
up.p
aylo
ad)
==0)
{pr
intf
("Cl
ient
%6s
:No
uvel
lere
pons
edu
serv
eur
=\"
%s\"
==>
OK\n
",id
Clie
nt,
msgR
epon
se.i
nfoS
up.p
aylo
ad);
}el
se{
prin
tf("
Clie
nt%6
s:
Souc
iav
ecre
pons
edu
serv
eur
!\n"
,id
Clie
nt);
prin
tf("
-At
tend
u=
\"%s
\"\n
",pa
yloa
dAtt
endu
e);
prin
tf("
-Re
cu=
\"%s
\"\n
",ms
gRep
onse
.inf
oSup
.pay
load
);pr
intf
("==
>Ar
ret
!\n"
);ex
it(E
XIT_
FAIL
URE)
;}
} usle
ep(T
EMPS
_INT
ER_R
EQ);
}wh
ile
(msg
Repo
nse.
typ
==RE
QUET
E_OK
);
// //Ce
clie
nta
term
ine
son
trav
ail
// prin
tf("
Clie
nt%6
s:
Envo
ide
requ
etes
term
ine
!\n"
,id
Clie
nt);
if(c
lose
(fdC
onne
xion
)<
0)ER
R(EX
IT_F
AILU
RE,
__FI
LE__
,__
LINE
__,
"clo
se")
;
retu
rnEX
IT_S
UCCE
SS;
}
Voicilecode
duserveu
rmon
o-tâchegérant
unclient
àla
fois
:/*
****
****
****
****
****
****
****
****
//*
serv
eurT
CP_1
_tac
he_1
_cli
ent.
c*/
/***
****
****
****
****
****
****
****
**/
#inc
lude
<std
lib.
h>#i
nclu
de<s
tdio
.h>
#inc
lude
<str
ing.
h>#i
nclu
de<s
ys/t
ypes
.h>
#inc
lude
<sys
/soc
ket.
h>#i
nclu
de<n
etin
et/t
cp.h
>//
Toge
tTC
P_NO
DELA
Yde
clar
atio
n#i
nclu
de<n
etdb
.h>
#inc
lude
<uni
std.
h>
#inc
lude
"Err
.h"
#inc
lude
"ini
tCom
muni
cati
onTC
P.h"
#inc
lude
"cli
ent-
serv
eur.
h"
// //Co
nsta
ntes
defo
ncti
onne
ment
dupr
ogra
mme
// // #def
ine
NB_M
AX_R
EPON
SES
10//
Nomb
rema
ximu
mde
repo
nses
que
lese
rveu
rfa
it//
aun
clie
nt(a
vant
delu
ire
pond
reRE
PONS
E_KO
)
void
gest
ionC
onne
xion
(int
fdCo
nnex
ion)
{ss
ize_
tnb
Read
;me
ssag
e_t
requ
ete;
int
nbRe
pons
esAu
Clie
nt=
0;
whil
e((
nbRe
ad=
read
(fdC
onne
xion
,&r
eque
te,
size
of(r
eque
te))
)==
size
of(r
eque
te))
{me
ssag
e_t
repo
nse;
/*On
trai
tela
requ
ete
*/if
(nbR
epon
sesA
uCli
ent
<NB
_MAX
_REP
ONSE
S){
nbRe
pons
esAu
Clie
nt++
;re
pons
e.ty
p=
REQU
ETE_
OK;
CALC
UL_P
AYLO
AD(r
epon
se.i
nfoS
up.p
aylo
ad,
requ
ete.
info
Sup.
idCl
ient
,nb
Repo
nses
AuCl
ient
);//
usle
ep(1
0000
0);
}el
se{
repo
nse.
typ
=RE
QUET
E_KO
;} ss
ize_
tnb
Writ
e=
writ
e(fd
Conn
exio
n,&r
epon
se,
size
of(r
epon
se))
;
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
185
Élém
ents
d’archite
ctureclient-serveur
if(n
bWri
te<
size
of(r
epon
se))
ERR(
EXIT
_FAI
LURE
,__
FILE
__,
__LI
NE__
,"P
robl
eme
ecri
ture
sur
conn
exio
nTC
P");
} /*Le
clie
nta
ferm
ela
conn
exio
n:
onfa
itle
mena
ge*/
if(c
lose
(fdC
onne
xion
)<
0)ER
R(EX
IT_F
AILU
RE,
__FI
LE__
,__
LINE
__,
"clo
se")
;} vo
idge
stio
nPoi
ntDA
cces
(int
fdPo
intD
Acce
s){
int
rang
Clie
nt=
0;do
{ //At
tent
ed’
une
conn
exio
nin
tfd
Conn
exio
n=
acce
pt(f
dPoi
ntDA
cces
,NU
LL,
NULL
);if
(fdC
onne
xion
<0)
ERR(
EXIT
_FAI
LURE
,__
FILE
__,
__LI
NE__
,"a
ccep
t");
//We
set
TCP_
NODE
LAY
flag
soth
atpa
cket
sse
nton
this
TCP
conn
ecti
on//
will
not
bede
laye
dby
the
syst
emla
yer
int
stat
us=1
;if
(set
sock
opt(
fdCo
nnex
ion,
IPPR
OTO_
TCP,
TCP_
NODE
LAY,
&sta
tus,
size
of(s
tatu
s))
<0)
ERR(
EXIT
_FAI
LURE
,__
FILE
__,
__LI
NE__
,"s
etso
ckop
t");
//Ge
stio
nde
cett
eco
nnex
ion
rang
Clie
nt++
;pr
intf
("%6
d-ie
mecl
ient
atr
aite
r\n"
,ra
ngCl
ient
);
gest
ionC
onne
xion
(fdC
onne
xion
);}
whil
e(1
);} in
tma
in()
{in
tfd
Poin
tDAc
ces
=cr
eati
onPo
intD
Acce
s();
gest
ionP
oint
DAcc
es(f
dPoi
ntDA
cces
);
retu
rnEX
IT_S
UCCE
SS;
}
Voiciq
uelque
sexpé
riences
envisageab
lesavec
ceserveu
r:
1.Dan
sun
term
inal,t
apez
lacomman
deshell:
./serveurTCP_1_tache_1_client
2.Dan
sun
autreterm
inal,t
apez
lacomman
deshell:
for((i=1;i<=600;i+=1));do
(./clientTCP
$i&);done
3.Con
statez
que,
pour
s’exécu
ter,
chaq
ueclient
doitattend
requ
’unau
treclient
aitfin
ides’e
xécu
ter.
4.Arrêtez
leserveu
r.
#9
' &
$ %
2.2Analyse
�Av
antages
�Ar
chite
cturesim
ple
�Bien
adaptéeau
casd
etra
itements
courts
�Machine
serveurp
euchargée
�Pa
sderisqu
ede
surcharge
�Inconvénien
ts�
Archite
ctureinadaptéeau
casd
etra
itements
long
s,qu
ecette
long
ueur
soitdû
eà:
ITe
mps
detra
itementlon
gau
niveau
duserveur
INo
mbreuxéchang
esrequ
ête/répo
nseentre
cliente
tserveur
avantq
uele
client
nese
déconn
ecte
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
186
Élém
ents
d’archite
ctureclient-serveur
3Se
rveu
ravec
autant
detâches
quede
clients
#10
' &
$ %
3Se
rveuravec
autant
detâches
quede
clients
3.1
Princip
e.....................................................................11
3.3
Varia
nte.
....................................................................13
3.3
Analy
se......................................................................13
4.0
Rédu
ctiondu
temps
deconn
exiondesc
lients.
.................................1
4
#11
' &
$ %
3.1Principe
�La
tâcheserveurd
élègu
eles
conn
exions
clientà
dese
nfants
C1
Serv
eur
C1
Serv
eur
C1
Serv
eur
Enfa
nt1
Enfa
nt1
Enfa
nt2
C2
1
C2
2
C2
3
Réponse21
Requête
11
Requête
11
Réponse11
Requête
12
Requête
21
Requête
21
Réponse12
•En
1,le
serveu
resten
attented’un
e«conn
exionclient
».Le
client
C1pe
utdo
ncse
conn
ecterau
serveu
rpo
urenvoyerla
requ
êteRequête11(con
tena
ntla
référencede
sonpo
intd’accèssurlequ
elil
attend
desrépo
nses).
•En
2,le
serveu
rcrée
unen
fant
(Enfant1
)chargé
degérerlesrequ
êtes
vena
ntdu
client
C1.I
llui
fait
suivre
viaun
«po
intd’accès»local(
parexem
ple,
untube
,une
filede
messagesou
bien
unezone
mém
oire)la
requ
êteRequête11:
–Le
client
ferm
ele
«po
intd’accès»d’attentede
«conn
exionclient
»(c’est
leserveu
rqu
iest
respon
sablede
surveille
rce
«po
intd’accès»)
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
187
Élém
ents
d’archite
ctureclient-serveur
3Se
rveu
ravec
autant
detâches
quede
clients
–Enfant1ou
vreun
«po
intd’accès»dé
diéC1-Enfant1
–Ilenvo
iesa
répo
nseRéponse11(avec
laréférenc
edu
«po
intd’accès»dé
dié)
–Il
attend
d’au
tres
requ
êtes
(ouun
message
deferm
eturede
«conn
exionclient
»)surce
«po
int
d’accès»dé
dié.
•En
3:
–Enfant1répo
ndau
xdiffé
rentes
requ
êtes
enproven
ance
duclient
C1–
Leserveu
resten
mesurede
répo
ndre
instan
tané
mentau
xrequ
êtes
vena
ntd’au
tres
clients.
Pour
cefaire
,ilc
réeun
enfant
dédiéqu
isecharge
derépo
ndre.
Exem
ples
d’ap
plications
basées
surcettearchite
cture:
•Se
rveu
rde
•La
plup
artde
sap
plications
seconn
ectant
àun
SGBD
•Se
rveu
rWeb
Apache
(cf.ci-dessous)
Pour
gagn
eren
perfo
rman
ce(4.000
forksde
processusné
cessite
ntenviron9second
essurun
emachine
à1GHz,
soit
2millise
cond
espa
rfork
;deplus
l’arrêt
deces4.00
0processusné
cessite
ntenviron25
second
es,
soit
6millise
cond
espa
rlib
ération),a
ulie
ude
créerdesen
fantsàchaq
ueconn
exionde
client,o
npe
utcréer
(aumom
entdu
démarrage
duserveu
r)un
«pool
d’en
fantsdispon
ibles».
Le«pool
d’en
fantsdispon
ibles»
estun
patron
deconc
eptio
ndé
nomméThreadpool
enan
glais.
Enplus
d’évite
rlesris
ques
desurcha
rge,
ilpe
rmet
d’écon
omise
rlesop
érations
decréatio
n/ne
ttoyag
ed’en
-fants/threadspe
ndan
tqu
ele
systèm
eestsollicité.
Con
ceptue
llement,le«pool
d’en
fantsd
ispon
ibles»
consist
eàavoiru
nestructured
edon
nées
dans
laqu
elle
onrang
elesidentifi
ants
desen
fantscrééslors
dudé
marrage
del’a
pplic
ation.
Qua
ndle
serveurabe
soin
defaire
travaille
runen
fant,ilp
rend
l’ide
ntifian
tduprem
iere
nfan
tdela
structurede
donn
éese
tillui
donn
ela
tâcheàfaire
.Qua
ndl’e
nfan
tafin
i,ceten
fant
stocke
sonidentifi
antda
nsla
structurede
donn
ées(il
signifie
ainsiq
u’ilestàno
uveaudispon
ible
pour
recevoir
dutravaild
ela
part
duserveu
r).
Dan
slapratique
(cf.Cf.exercice
«Élém
ents
d’archite
ctureclient-serveur
»nu
méro2),le«pool
d’en
fants
dispon
ibles»pe
utêtre
implém
enté
dela
man
ière
suivan
te:
•To
uslesen
fantsqu
ison
tcréésse
mettent
directem
enten
attente(enlecture)
surle
pointd’entrée
duserveu
r.Ainsi,
quan
dle
serveu
rreçoit
unerequ
ête,
dans
lecasoù
lesystèm
egère
l’atomicité
des
lectures
surlepo
intd
’entrée(i.e.
unseul
processusp
eutr
éussiràfaire
lalecturesurlepo
intd
’entrée,
mêm
es’ilssont
plusieursà
être
enattente[enlecture]
surlepo
intd
’entrée),u
nseul
enfant
estr
éveillé
parle
systèm
eet
traite
larequ
êtequ
’ilaluesurle
pointd’entrée.Q
uand
ceten
fant
afin
i,ilse
remet
enattentesurle
pointd’entrée.
•To
uslese
nfan
tsqu
ison
tcréés
semettent
enattente(enlecture)
surlemêm
etube
(oula
mêm
efilede
message,o
ubien
encore
lemêm
etampo
ncontrôlé
parun
mécan
ismede
prod
ucteur
consom
mateu
r).
Qua
ndle
serveu
rreçoit
unerequ
ête,
il«redirig
e»cetterequ
êteen
écriv
antsurle
tube
(oufilede
message
outampo
n).Unen
fant
estdo
ncréveillé.
Iltraite
larequ
ête.
Qua
ndilafin
i,ilse
met
enattente(enlecture)
surle
tube
.
Leserveu
rWeb
Apache
(http://httpd.apache.org/)
utilise
un«pool
d’en
fantsdispon
ibles».
serveurTCP_n_tache_n_client.c
est
unexem
ple
deserveu
rmettant
enoeuv
recette
archite
cture
(NB
:leclient
estidentiq
ue,v
uqu
esoninterfa
ceavec
leserveu
rnechan
gepa
s):
/***
****
****
****
****
****
****
****
**/
/*se
rveu
rTCP
_n_t
ache
_n_c
lien
t.c
*//*
****
****
****
****
****
****
****
****
/
#inc
lude
<std
lib.
h>#i
nclu
de<s
tdio
.h>
#inc
lude
<str
ing.
h>#i
nclu
de<s
ys/t
ypes
.h>
#inc
lude
<sys
/soc
ket.
h>#i
nclu
de<n
etin
et/t
cp.h
>//
Toge
tTC
P_NO
DELA
Yde
clar
atio
n#i
nclu
de<n
etdb
.h>
#inc
lude
<uni
std.
h>#i
nclu
de<p
thre
ad.h
>
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
188
Élém
ents
d’archite
ctureclient-serveur
3Se
rveu
ravec
autant
detâches
quede
clients
#inc
lude
"Err
.h"
#inc
lude
"ini
tCom
muni
cati
onTC
P.h"
#inc
lude
"cli
ent-
serv
eur.
h"
// //Co
nsta
ntes
defo
ncti
onne
ment
dupr
ogra
mme
// // #def
ine
NB_M
AX_R
EPON
SES
10//
Nomb
rema
ximu
mde
repo
nses
que
lese
rveu
rfa
it//
aun
clie
nt(a
vant
delu
ire
pond
reRE
PONS
E_KO
)
//St
ruct
ure
perm
etta
ntde
pass
erun
enti
eren
para
metr
elo
rs//
d’un
pthr
ead_
crea
teun
ion
IntP
tr{
int
enti
er;
void
*ptr
;}; vo
id*g
esti
onCo
nnex
ion(
void
*arg
){un
ion
IntP
trip
;ip
.ptr
=ar
g;in
tfd
Conn
exio
n=
ip.e
ntie
r;ss
ize_
tnb
Read
;me
ssag
e_t
requ
ete;
int
nbRe
pons
esAu
Clie
nt=
0;
whil
e((
nbRe
ad=
read
(fdC
onne
xion
,&r
eque
te,
size
of(r
eque
te))
)==
size
of(r
eque
te))
{me
ssag
e_t
repo
nse;
/*On
trai
tela
requ
ete
*/if
(nbR
epon
sesA
uCli
ent
<NB
_MAX
_REP
ONSE
S){
nbRe
pons
esAu
Clie
nt++
;re
pons
e.ty
p=
REQU
ETE_
OK;
CALC
UL_P
AYLO
AD(r
epon
se.i
nfoS
up.p
aylo
ad,
requ
ete.
info
Sup.
idCl
ient
,nb
Repo
nses
AuCl
ient
);//
usle
ep(1
0000
0);
}el
se{
repo
nse.
typ
=RE
QUET
E_KO
;} ss
ize_
tnb
Writ
e=
writ
e(fd
Conn
exio
n,&r
epon
se,
size
of(r
epon
se))
;if
(nbW
rite
<si
zeof
(rep
onse
))ER
R(EX
IT_F
AILU
RE,
__FI
LE__
,__
LINE
__,
"Pro
blem
eec
ritu
resu
rco
nnex
ion
TCP"
);} /*
Lecl
ient
afe
rme
laco
nnex
ion
:on
fait
leme
nage
*/if
(clo
se(f
dCon
nexi
on)
<0)
ERR(
EXIT
_FAI
LURE
,__
FILE
__,
__LI
NE__
,"c
lose
");
retu
rnNU
LL;
} void
gest
ionP
oint
DAcc
es(i
ntfd
Poin
tDAc
ces)
{in
tra
ngCl
ient
=0;
do{ //
Atte
nte
d’un
eco
nnex
ion
int
fdCo
nnex
ion
=ac
cept
(fdP
oint
DAcc
es,
NULL
,NU
LL);
if(f
dCon
nexi
on<
0)ER
R(EX
IT_F
AILU
RE,
__FI
LE__
,__
LINE
__,
"acc
ept"
);
//We
set
TCP_
NODE
LAY
flag
soth
atpa
cket
sse
nton
this
TCP
conn
ecti
on//
will
not
bede
laye
dby
the
syst
emla
yer
int
stat
us=1
;if
(set
sock
opt(
fdCo
nnex
ion,
IPPR
OTO_
TCP,
TCP_
NODE
LAY,
&sta
tus,
size
of(s
tatu
s))
<0)
ERR(
EXIT
_FAI
LURE
,__
FILE
__,
__LI
NE__
,"s
etso
ckop
t");
//Ge
stio
nde
cett
eco
nnex
ion
rang
Clie
nt++
;pr
intf
("%6
d-ie
mecl
ient
atr
aite
r\n"
,ra
ngCl
ient
);
pthr
ead_
tth
read
;un
ion
IntP
trip
;ip
.ent
ier
=fd
Conn
exio
n;in
trc
=pt
hrea
d_cr
eate
(&th
read
,NU
LL,
gest
ionC
onne
xion
,ip
.ptr
);if
(rc
<0)
ERRX
(EXI
T_FA
ILUR
E,__
FILE
__,
__LI
NE__
,"p
thre
ad_c
reat
e:%s
",st
rerr
or(r
c));
rc=
pthr
ead_
deta
ch(t
hrea
d);
if(r
c<
0)ER
RX(E
XIT_
FAIL
URE,
__FI
LE__
,__
LINE
__,
"pth
read
_det
ach:
%s",
stre
rror
(rc)
);}
whil
e(1
);} in
tma
in()
{in
tfd
Poin
tDAc
ces
=cr
eati
onPo
intD
Acce
s();
gest
ionP
oint
DAcc
es(f
dPoi
ntDA
cces
);
retu
rnEX
IT_S
UCCE
SS;
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
189
Élém
ents
d’archite
ctureclient-serveur
3Se
rveu
ravec
autant
detâches
quede
clients
}
Voiciq
uelque
sexpé
riences
envisageab
lesavec
ceserveu
r:
1.Dan
sun
term
inal,t
apez
lacomman
deshell:
./serveurTCP_n_tache_n_client
2.Dan
sun
autreterm
inal,t
apez
lacomman
deshell:
for((i=1;i<=600;i+=1));do
(./clientTCP
$i&);done
3.Con
statez
quel’e
xécu
tionestplus
rapide
,car
leserveurtraite
désorm
aistous
lesclientsen
parallè
le.
4.Ilyatoutefoisu
nprob
lème.
Pour
levo
ir,ilfaut
quele
temps
d’interactionentreun
client
etle
serveu
rdu
replus
long
temps
:
(a)Arrêtez
leserveu
ret
redé
marrez-le.
(b)Dan
sclientTCP.c
,mod
ifiez
TEMPS_INTER_REQpo
urluid
onne
rlavaleur
1000
000(1
million,
soit
1second
e)(c)make
(d)for((i=1;i<=1200;i+=1));
do(./clientTCP
$i&);done
(e)Le
serveu
raffi
che
1020-iemeclient
atraiter
./serveurTCP_n_tache_n_client:serveurTCP_n_tache_n_client.c:68:accept:Toomany
open
files$
./clientTCPessaiClientTCP
Ditau
trem
ent,le
serveu
rarenc
ontréun
prob
lème,
alorsq
u’ilcherchaità
faire
unaccept
pour
le10
21eclient.
5.Po
urcompren
dreet
corriger
ceprob
lème
(a)Ta
pezla
comman
deulimit
-aVo
usconstatezqu
ele
nombremax
imum
d’open
files
estde
1024
.Or,
votreprog
rammeaou
vert
stdin,
stdout
,stderr,
lasocket
correspo
ndan
taupo
intd
’accès,1
020socketsc
orrespon
dant
aux
socketsd
es10
20prem
iers
clients,soitun
totald
e10
24fichierso
uverts.D
ece
fait,
au10
21eclient
dont
laconn
exionné
cessite
rait
un10
25efichier
ouvert,v
otre
prog
rammes’a
rrête.
(b)Mod
ifiez
cettelim
iteen
tapa
ntla
comman
deulimit
-n2048
(c)for((i=1;i<=2000;i+=1));
do(./clientTCP
$i&);donepe
rmet
dedé
passer
cettelim
itede
1020
clients.
Mais,
sivous
essayezde
lanc
ersim
ultané
mentplus
de20
44clients,
vous
avez
àno
uveaule
prob
lème.
(d)Vo
uspo
urrie
zchercher
àcontinue
rà
augm
enterà
nouv
eau
lalim
itedu
nombrede
fichiers
ouverts.
Vous
atteindriezun
eprem
ière
limite
liéeàla
confi
guratio
ndu
noyau
(cf.
comman
deulimit
-Hn,
puis
unede
uxièmelim
itelié
eau
xcapa
citésde
lamachine
elle-m
ême(vou
spo
u-vezl’a
tteind
reen
vous
appu
yant
surhttps://docs.oracle.com/cd/E18887_01/html/e18878/
ins_asap_preinstall.htm,
cham
pfs.file-nr
etcomman
de/sbin/sysctl
-a,et
https://
ro-c
he.info/articles/2017-
03-2
6-increase-o
pen-
files-
limit).D
etoutefaçon,
vous
avez
besoin
d’em
pêcher
votreap
plicationd’atteindrecettelim
ite.N
ousprésentons
unemétho
deci-
dessou
s.
6.Arrêtez
leserveu
r.L’utilisatio
nd’un
pool
dethreadspe
rmet
d’em
pêcher
d’atteindrecettelim
ite,c
ommel’illu
stre
lepro-
gram
meserveurTCP_pool_tache_n_client.c
:/*
****
****
****
****
****
****
****
****
***/
/*se
rveu
rTCP
_poo
l_ta
che_
n_cl
ient
.c*/
/***
****
****
****
****
****
****
****
****
*/
#inc
lude
<std
lib.
h>#i
nclu
de<s
tdio
.h>
#inc
lude
<str
ing.
h>#i
nclu
de<s
ys/t
ypes
.h>
#inc
lude
<sys
/soc
ket.
h>#i
nclu
de<n
etin
et/t
cp.h
>//
Toge
tTC
P_NO
DELA
Yde
clar
atio
n#i
nclu
de<n
etdb
.h>
#inc
lude
<uni
std.
h>#i
nclu
de<p
thre
ad.h
>
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
190
Élém
ents
d’archite
ctureclient-serveur
3Se
rveu
ravec
autant
detâches
quede
clients
#inc
lude
"Err
.h"
#inc
lude
"ini
tCom
muni
cati
onTC
P.h"
#inc
lude
"cli
ent-
serv
eur.
h"
// //Co
nsta
ntes
defo
ncti
onne
ment
dupr
ogra
mme
// // #def
ine
NB_M
AX_R
EPON
SES
10//
Nomb
rema
ximu
mde
repo
nses
que
lese
rveu
rfa
it//
aun
clie
nt(a
vant
delu
ire
pond
reRE
PONS
E_KO
)#d
efin
eNB
_THR
EADS
_DAN
S_PO
OL10
00//
Nomb
rede
thre
ads
dans
lepo
ol
//St
ruct
ure
perm
etta
ntde
pass
erun
enti
eren
para
metr
elo
rs//
d’un
pthr
ead_
crea
teun
ion
IntP
tr{
int
enti
er;
void
*ptr
;}; //
Mute
xev
itan
tle
sra
ceco
ndit
ions
sur
rang
Clie
ntpt
hrea
d_mu
tex_
tmu
tex;
void
gest
ionC
onne
xion
(int
fdCo
nnex
ion)
{ss
ize_
tnb
Read
;me
ssag
e_t
requ
ete;
int
nbRe
pons
esAu
Clie
nt=
0;
whil
e((
nbRe
ad=
read
(fdC
onne
xion
,&r
eque
te,
size
of(r
eque
te))
)==
size
of(r
eque
te))
{me
ssag
e_t
repo
nse;
/*On
trai
tela
requ
ete
*/if
(nbR
epon
sesA
uCli
ent
<NB
_MAX
_REP
ONSE
S){
nbRe
pons
esAu
Clie
nt++
;re
pons
e.ty
p=
REQU
ETE_
OK;
CALC
UL_P
AYLO
AD(r
epon
se.i
nfoS
up.p
aylo
ad,
requ
ete.
info
Sup.
idCl
ient
,nb
Repo
nses
AuCl
ient
);//
usle
ep(1
0000
0);
}el
se{
repo
nse.
typ
=RE
QUET
E_KO
;} ss
ize_
tnb
Writ
e=
writ
e(fd
Conn
exio
n,&r
epon
se,
size
of(r
epon
se))
;if
(nbW
rite
<si
zeof
(rep
onse
))ER
R(EX
IT_F
AILU
RE,
__FI
LE__
,__
LINE
__,
"Pro
blem
eec
ritu
resu
rco
nnex
ion
TCP"
);} /*
Lecl
ient
afe
rme
laco
nnex
ion
:on
fait
leme
nage
*/if
(clo
se(f
dCon
nexi
on)
<0)
ERR(
EXIT
_FAI
LURE
,__
FILE
__,
__LI
NE__
,"c
lose
");
} void
*ges
tion
Poin
tDAc
ces(
void
*arg
){
unio
nIn
tPtr
ip;
ip.p
tr=
arg;
int
fdPo
intD
Acce
s=
ip.e
ntie
r;st
atic
int
rang
Clie
nt=
0;do
{ //At
tent
ed’
une
conn
exio
nin
tfd
Conn
exio
n=
acce
pt(f
dPoi
ntDA
cces
,NU
LL,
NULL
);if
(fdC
onne
xion
<0)
ERR(
EXIT
_FAI
LURE
,__
FILE
__,
__LI
NE__
,"a
ccep
t");
//We
set
TCP_
NODE
LAY
flag
soth
atpa
cket
sse
nton
this
TCP
conn
ecti
on//
will
not
bede
laye
dby
the
syst
emla
yer
int
stat
us=1
;if
(set
sock
opt(
fdCo
nnex
ion,
IPPR
OTO_
TCP,
TCP_
NODE
LAY,
&sta
tus,
size
of(s
tatu
s))
<0)
ERR(
EXIT
_FAI
LURE
,__
FILE
__,
__LI
NE__
,"s
etso
ckop
t");
//Ge
stio
nde
cett
eco
nnex
ion
if(p
thre
ad_m
utex
_loc
k(&m
utex
)!=
0)ER
R(EX
IT_F
AILU
RE,
__FI
LE__
,__
LINE
__,
"pth
read
_mut
ex_l
ock"
);ra
ngCl
ient
++;
prin
tf("
%6d-
ieme
clie
nta
trai
ter\
n",
rang
Clie
nt);
if(p
thre
ad_m
utex
_unl
ock(
&mut
ex)
!=0)
ERR(
EXIT
_FAI
LURE
,__
FILE
__,
__LI
NE__
,"p
thre
ad_m
utex
_unl
ock"
);
gest
ionC
onne
xion
(fdC
onne
xion
);}
whil
e(1
);} in
tma
in()
{in
tfd
Poin
tDAc
ces
=cr
eati
onPo
intD
Acce
s();
int
i;
//In
itia
lisa
tion
dumu
tex
pthr
ead_
mute
x_in
it(&
mute
x,NU
LL);
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
191
Élém
ents
d’archite
ctureclient-serveur
3Se
rveu
ravec
autant
detâches
quede
clients
//Cr
eati
ondu
pool
deth
read
sfo
r(i
=0
;i
<NB
_THR
EADS
_DAN
S_PO
OL-1
;i+
+){
pthr
ead_
tth
read
;un
ion
IntP
trip
;ip
.ent
ier
=fd
Poin
tDAc
ces;
int
rc=
pthr
ead_
crea
te(&
thre
ad,
NULL
,ge
stio
nPoi
ntDA
cces
,ip
.ptr
);if
(rc
<0)
ERRX
(EXI
T_FA
ILUR
E,__
FILE
__,
__LI
NE__
,"p
thre
ad_c
reat
e:%s
",st
rerr
or(r
c));
rc=
pthr
ead_
deta
ch(t
hrea
d);
if(r
c<
0)ER
RX(E
XIT_
FAIL
URE,
__FI
LE__
,__
LINE
__,
"pth
read
_det
ach:
%s",
stre
rror
(rc)
);} //
Leth
read
duma
ines
tau
ssi
unth
read
dupo
olun
ion
IntP
trip
;ip
.ent
ier
=fd
Poin
tDAc
ces;
gest
ionP
oint
DAcc
es(i
p.pt
r);
retu
rnEX
IT_S
UCCE
SS;
}
Voiciu
neexpé
rienc
eenvisageab
lepo
urvérifi
erqu
ece
serveu
rrésis
teàun
gran
dno
mbresim
ultané
declients:
1.Dan
sun
term
inal,t
apez
lacomman
deshell:
./serveurTCP_pool_tache_n_client
2.Dan
sun
autreterm
inal,t
apez
lescomman
des
ulimit
-n1024
for((i=1;i<=2000;i+=1));
do(./clientTCP
$i&);done
3.Vo
usconstatezqu
ele
serveurfaitattend
relesclientsqu
’ilne
peut
pastraiterim
médiatement.
4.Arrêtez
leserveu
r.
#12
' &
$ %
3.2Va
riante
�Da
nsle
caso
ùle
nombrede
«po
ints
d’accès»
estlim
itéau
niveau
dela
machine
duserveur(
exem
ple:S
S7),la
tâcheserveurs
ertd
edistrib
uteurà
sese
nfants
�Onparle
alors
de«multip
lexage»des«
conn
exions
client»
auniveau
duserveur
C1
Se
rve
ur
C2
Ré
po
nse
15
En
fan
t1
En
fan
t2
Re
qu
ête
15
(C1
)
Re
qu
ête
22
(C2
)
Re
qu
ête
15
(C1
)
Re
qu
ête
22
(C2
)
Ré
po
nse
22
Noter
quelesen
fantsn’on
tpa
sbe
soin
de«po
intd’accès»dé
diéC-Enfant
dans
lamesureoù
seul
leserveu
rs’a
dresse
directem
entàeu
x.
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
192
Élém
ents
d’archite
ctureclient-serveur
#13
' &
$ %
3.3Analyse
�Av
antages
�Ad
apté
aucasd
etra
itements
long
s
�Inconvénien
ts�
Leserveurd
oitê
trehébergéparu
nemachine
puiss
ante
�Risque
desurchargeàmoins
d’utilis
er:
Idesm
écanism
esde
synchron
isatio
nde
tâches
àbase
de«cohorte
»I
unpo
old’enfantsd
ispon
ibles
�Se
nsibilit
éau
nombrede
clients
:lacharge
duserveura
ugmente
prop
ortio
nnellem
enta
uno
mbrede
clients
Solutio
nspo
ssibles
:I
Augm
enterlapu
issance
duserveur(
pare
xemple,
grappesd
ePC
)I
Rédu
irele
temps
deconn
exiondesc
lients
•Év
aluo
nsla
sensibilité
auno
mbrede
clients:
–Si
onfait4.00
0fork
d’un
processuss
imples
urun
emachine
Red
Hat
7.3,
onob
serveq
uela
mém
oire
consom
mée
estde
225Mo,
soit
57,6
Ko/
processusforké.
–Si
onconsidèreun
commutateurd
ecommun
ications
GSM
,cecommutateu
rabe
soin
de25
tâches
enpa
rallè
lepa
rab
onné
.–
Cecommutateu
rgère
100.00
0ab
onné
s.Ilrequ
iert
donc
2.50
0.00
0tâches,s
oit13
7Gode
RAM.
–Po
urinform
ation,
grâceàl’a
rchitecture«Se
rveu
ravec
Ntâches
gérant
tous
lesclients»(cf.
section4),lecontexte
requ
ispa
rles
25tâches
représente
dans
laréalité
107Kopa
rabo
nné,
c’est-
à-dire
10Gode
RAM
pour
gérerles10
0.00
0ab
onné
s(à
compa
reravec
les13
7Goprécéd
ents).
#14
' &
$ %
3.4Ré
ductiondu
temps
deconn
exiondesclients
�Princip
e:
�L’enfant
n’estc
onnectéavec
leclientq
uepend
antletemps
detra
itementd
’une
requ
ête
�Si
leclienta
unerequ
êteultérie
urefaisa
ntpartiedu
mêm
econtexte,iltransmet
lecontexte
avec
larequ
êteultérie
ure
�Ex
emple:G
oogle
�Limite
:Solutioninapplica
bleau
casd
’app
lications
oùle
clientn
epeut
héberger
lecontexte
:�
Soitpo
urdesr
aison
sdecapacit
é(m
émoire,traite
ment...)
�So
itpo
urdesr
aison
sdesécurité
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
193
Élém
ents
d’archite
ctureclient-serveur
4Se
rveu
ravecN
tâches
gérant
tous
lesclients
Laplup
artde
sap
plications
télécomssont
confrontéesàce
prob
lème.
#15
' &
$ %
4Se
rveuravec
Ntâches
gérant
tous
lesclients
4.1
Princip
e.....................................................................16
5.0
Analy
se......................................................................18
#16
' &
$ %
4.1Principe
�Le
serveurh
éberge
dans
une«base
dedo
nnées»
ale
contexte
dechacun
deses
clients
potentiels
�Au
démarrage,leserveurd
émarreN
enfants
�Lo
rsde
laréceptiond’un
erequ
ête,
leserveurc
onfie
àl’u
nde
sese
nfants
latâchede
gérerlarequ
êtecomptetenu
ducontexte
client
�L’enfant
faitéventuellem
enté
voluer
lecontexte
C1
Se
rve
ur
C2
Ré
po
nse
15
En
fan
t1
En
fan
tN
Re
qu
ête
15
(C1
)
Re
qu
ête
22
(C2
)
Re
qu
ête
15
(C1
)
Re
qu
ête
22
(C2
)
Ré
po
nse
22
Accè
s a
u c
on
texte
a.Cette
base
dedo
nnéespe
utêtre
unezone
demém
oire
partag
ée
Exem
ples
d’ap
plications
basées
surcettearchite
cture:
•la
plup
artde
sap
plications
télécoms(C
ommutateu
r,ServiceCon
trolP
oint
dans
les«Réseaux
Intelli-
gents»,
serveu
rde
localisationda
nsle
GSM
...)
•le
serveu
rWeb
Nginx(http://wiki.nginx.org/)
Leslan
gagesà
base
d’au
tomate(G
rafcet,S
DL.
..)s
ontb
ienad
aptésà
l’écritu
rede
laprise
encomptede
requ
êtes
(app
elées«évén
ements
»,«sig
naux
»...)comptetenu
d’un
contexte.L
etraitementde
larequ
ête
faitfaire
une«tran
sition»àl’a
utom
ate.
Lors
dela
conn
exiond’un
client,les
critè
resde
choixde
l’enfan
tpa
rle
serveurpe
uventêtre
varié
s:
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
194
Élém
ents
d’archite
ctureclient-serveur
•Sé
lectionde
l’enfan
ttraitant
lemoins
declientsactifsàl’instantt
•Sé
lectionde
l’enfan
tdédiéàce
type
derequ
êtes
•Dan
slecaso
ùle
serveure
stmultip
rocesseu
r,la
base
dedo
nnée
peut
être
distrib
uéeentrelesd
ifférents
processeurs.
Dan
sce
cas,
sélectionde
l’enfan
tdo
ntla
base
dedo
nnéescontient
lecontexte
duclient.
TCP
n’estpa
sad
apté
pour
unserveu
ravec
Ntâches
gérant
nclients.
Enrevanche
,UDP
estbien
adap
té.C
’est
pourqu
oiilafait
l’objet
dela
questio
n3du
TP
noté
de20
17,lecontexte
dechaq
ueclient
étan
tstocké
dans
unarbre(binaire
derecherche)
Rou
ge-N
oirman
ipuléavec
labibliothèque
libredblack
(http://libredblack.sourceforge.net/
).
#17
' &
$ %
4.2Analyse
�Av
antages
�Ad
apté
aucasd
econn
exions
long
uesa
vecde
long
stem
psd’inactiv
ité�
Cas,pare
xemple,
desa
pplications
téléc
omsa
�Inconvénien
ts�
Complexité
�Risquesd
esurcharge
a.Le
gros
dutraitementd’ap
pels
efait
àl’établissementet
auraccrochag
e(le
temps
deconv
er-
satio
nqu
iest
leplus
long
endu
réene
consom
mepratiquementrien
enressou
rces
serveur)
Àprop
osde
sris
ques
desurcha
rge:
•Unbo
nexem
pleestlecompo
rtem
entd
uréseau
GSM
franç
aisle01
/01/
2002
.Beauc
oupde
gens
avaient
décidé
d’envoyerleursvo
euxpa
rSM
Sle
01/0
1/20
02à00
h00.
Certainsvo
euxsont
arriv
ésplusieurs
joursplus
tard
àleursde
stinataires.
•En
téléph
onie,m
anièresde
sepréservercontre
lasurcha
rge:
–«Es
pacementd’ap
pel»
(«callgapping»)
:sileserveu
rdé
tecteun
risqu
ede
surcha
rge,
ilrefuse
lesap
pels
sortan
ts(i.e.
lestentatives
d’ap
pel).
Exem
ple:le21
/09/
01,lorsde
l’exp
losio
nde
l’usin
eAZF
,les
commutateu
rsde
commun
ication
mob
ilede
larégion
toulou
sainesont
rentrésen
«régu
latio
n»
pend
ant4he
ures
(ren
dant
les
appe
lsentran
tsbe
aucoup
plus
priorit
airesqu
elesap
pels
sortan
ts)en
constatant
quele
nombre
detentatives
d’ap
pelsdé
part
étaientm
ultip
liéspa
r15
(lesab
onné
scherchaientà
téléph
oner
plus
avec
leur
mob
ile,c
arlescentraux
fixes
étaientsaturéset
onavaitun
taux
d’effi
cacité
desap
pels
dépa
rtde
seulem
ent15
%).
–Métho
dede
niveau
«réseau
téléph
onique
»:c
ertainsnu
méros
detéléph
onepe
uventdo
nner
lieu
àbe
aucoup
d’ap
pels
conc
entrés
dans
letemps
(par
exem
ple,
numérod’un
conc
ours
lors
d’un
eém
issiontélévisée).D
ansce
cas,
lescommutateu
rstraverséslors
del’é
tabliss
ementde
l’app
elne
laiss
entpa
sser
qu’unfaible
pourcentag
ed’ap
pels
vers
cenu
méro(par
exem
ple,
1%).
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
195
Élém
ents
d’archite
ctureclient-serveur
5Se
rveu
rmon
o-tâchegérant
tous
lesclientsàla
fois
#18
' &
$ %
5Se
rveurmon
o-tâchegérant
tous
lesclientsàla
fois
5.1
Princip
e.....................................................................19
5.2
Aperçu
dela
prog
rammationévénem
entie
lle...................................2
15.3
Analy
se......................................................................22
#19
' &
$ %
5.1Principe
�La
tâcheserveurt
ravaille
avec
unmod
èlede
prog
rammationévénem
entie
lle.
C1
Serv
eur
C1
C1
Serv
eur
C2
1
C2
2
C2
3
Réponse12
Requête
11
Réponse11
Requête
12
Requête
21
Serv
eur
Réponse11
•En
1,le
serveu
resten
attented’un
e«conn
exionclient
».Le
client
C1pe
utdo
ncse
conn
ecterau
serveu
rpo
urenvoyerla
requ
êteRequête11(con
tena
ntla
référencede
sonpo
intd’accèssurlequ
elil
attend
desrépo
nses).
•En
2,le
serveu
rtraite
cetterequ
êtede
laman
ière
suivan
te:
–Ilou
vreun
«po
intd’accès»dé
diéC1-Serveur
–Ilenvo
iesa
répo
nseRéponse11(avecla
référenc
edu
«po
intd’accès»dé
dié)
–Il
attend
d’au
tres
requ
êtes
(ouun
message
deferm
eturede
«conn
exionclient
»)surce
«po
int
d’accès»dé
dié.
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
196
Élém
ents
d’archite
ctureclient-serveur
5Se
rveu
rmon
o-tâchegérant
tous
lesclientsàla
fois
•En
3,le
serveu
rrépo
ndau
xdiffé
rentes
requ
êtes
duclient
C1.P
arce
quele
serveu
rtravaille
avec
unmod
èlede
prog
rammationévén
ementie
l,ilesten
mesurede
pren
dreen
compte:ilo
uvre
un«po
int
d’accès»dé
diéC2-Serveur
etenvoie
sarépo
nseRéponse12(avecla
référenc
edu
«po
intd’accès»
dédié).Ils
emet
ensuite
enattented’évén
ements
surlestroispo
ints
d’accès.
Exem
pled’ap
plications
basées
surcettearchite
cture:
•Memcached(http://memcached.org/
):u
nemém
oire
distrib
uéepo
urcacher
desob
jets
•Nginx(http://nginx.net/
):u
nserveu
rWeb
(notam
ment)
très
perfo
rman
t
#20
' &
$ %
5.2Ape
rçude
laprogrammationévénem
entie
lle
�Princip
e�
Onne
décle
nche
uneop
érationde
lecture
suru
ndescrip
teur
quequ
andon
est
sûrq
u’ilyaeff
ectiv
ementq
uelque
choseàliresurc
edescrip
teur.
�Po
ursavoirsic’e
stle
cas,on
s’app
uiesurd
esprim
itivess
ystèmecomme
select
,poll,
epoll...
�De
sintergicie
ls(m
iddlew
are)
facilite
ntle
développ
ementd
’app
lications
basées
sur
cemod
èle.Ilsgarantiss
entlapo
rtabilitéentre
systèm
esdiffé
rentst
oute
nutilis
ant
lesprim
itivess
ystèmeles
plus
perfo
rmantes.
Exem
ple:l
ibevent(http://monkey.org/~provos/libevent/
)�
event_setperm
etde
spécifier
ledescrip
teur
àsurveiller
etla
fonctio
nde
rapp
el(callback
)àinvoqu
ersiun
événem
enta
rrive
surledescrip
teur.
�event_addperm
etde
donn
ercette
spécificatio
nàla
tâcheprincip
alede
libevent
.
#21
' &
$ %
�event_dispatch
démarre
latâcheprincip
alede
libevent
.Siu
névénem
ent
arriv
esuru
ndescrip
teur,c
ette
tâcheappelle
lafonctio
ncallbackassocié
e.
Leserveu
rserveurTCP_1_tache_n_client.c
s’app
uies
urla
bibliothèque
libevent
pour
implan
terc
ette
archite
cture:
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
197
Élém
ents
d’archite
ctureclient-serveur
5Se
rveu
rmon
o-tâchegérant
tous
lesclientsàla
fois
/***
****
****
****
****
****
****
****
**/
/*se
rveu
rTCP
_1_t
ache
_n_c
lien
t.c
*//*
****
****
****
****
****
****
****
****
/
#inc
lude
<std
lib.
h>#i
nclu
de<s
tdio
.h>
#inc
lude
<str
ing.
h>#i
nclu
de<s
ys/t
ypes
.h>
#inc
lude
<sys
/soc
ket.
h>#i
nclu
de<n
etin
et/t
cp.h
>//
Toge
tTC
P_NO
DELA
Yde
clar
atio
n#i
nclu
de<n
etdb
.h>
#inc
lude
<uni
std.
h>
#inc
lude
"Err
.h"
#inc
lude
"ini
tCom
muni
cati
onTC
P.h"
#inc
lude
"cli
ent-
serv
eur.
h"
#inc
lude
<eve
nt2/
even
t.h>
stru
ctev
ent_
base
*bas
e;
// //Co
nsta
ntes
defo
ncti
onne
ment
dupr
ogra
mme
// // #def
ine
NB_M
AX_R
EPON
SES
10//
Nomb
rema
ximu
mde
repo
nses
que
lese
rveu
rfa
it//
aun
clie
nt(a
vant
delu
ire
pond
reRE
PONS
E_KO
)
// //St
ruct
ure
pour
laca
llba
ckty
pede
fst
ruct
{in
tnb
Repo
nses
AuCl
ient
;st
ruct
even
t*e
v;}
cont
exte
_t;
void
gest
ionC
onne
xion
(int
fdCo
nnex
ion,
shor
tev
ent,
void
*arg
){co
ntex
te_t
*pct
xt=
(con
text
e_t
*)ar
g;me
ssag
e_t
requ
ete;
ssiz
e_t
nbRe
ad=
read
(fdC
onne
xion
,&r
eque
te,
size
of(r
eque
te))
;if
(nbR
ead
==si
zeof
(req
uete
)){
mess
age_
tre
pons
e;/*
Ontr
aite
lare
quet
e*/
if(p
ctxt
->nb
Repo
nses
AuCl
ient
<NB
_MAX
_REP
ONSE
S){
pctx
t->n
bRep
onse
sAuC
lien
t++;
repo
nse.
typ
=RE
QUET
E_OK
;CA
LCUL
_PAY
LOAD
(rep
onse
.inf
oSup
.pay
load
,re
quet
e.in
foSu
p.id
Clie
nt,
pctx
t->n
bRep
onse
sAuC
lien
t);
//us
leep
(100
000)
;}
else
{re
pons
e.ty
p=
REQU
ETE_
KO;
} ssiz
e_t
nbWr
ite
=wr
ite(
fdCo
nnex
ion,
&rep
onse
,si
zeof
(rep
onse
));
if(n
bWri
te<
size
of(r
epon
se))
ERR(
EXIT
_FAI
LURE
,__
FILE
__,
__LI
NE__
,"P
robl
eme
ecri
ture
sur
conn
exio
nTC
P");
//On
ream
orce
l’ev
enem
ent
even
t_ad
d(pc
txt-
>ev,
NULL
);}
else
{/*
Lecl
ient
afe
rme
laco
nnex
ion
:on
fait
leme
nage
*/if
(clo
se(f
dCon
nexi
on)
<0)
ERR(
EXIT
_FAI
LURE
,__
FILE
__,
__LI
NE__
,"c
lose
");
free
(pct
xt);
}} vo
idge
stio
nPoi
ntDA
cces
(int
fdPo
intD
Acce
s,sh
ort
even
t,vo
id*a
rg)
{st
atic
int
rang
Clie
nt=
0;
int
fdCo
nnex
ion
=ac
cept
(fdP
oint
DAcc
es,
NULL
,NU
LL);
if(f
dCon
nexi
on<
0)ER
R(EX
IT_F
AILU
RE,
__FI
LE__
,__
LINE
__,
"acc
ept"
);
//We
set
TCP_
NODE
LAY
flag
soth
atpa
cket
sse
nton
this
TCP
conn
ecti
on//
will
not
bede
laye
dby
the
syst
emla
yer
int
stat
us=1
;if
(set
sock
opt(
fdCo
nnex
ion,
IPPR
OTO_
TCP,
TCP_
NODE
LAY,
&sta
tus,
size
of(s
tatu
s))
<0)
ERR(
EXIT
_FAI
LURE
,__
FILE
__,
__LI
NE__
,"s
etso
ckop
t");
//Ge
stio
nde
cett
eco
nnex
ion
rang
Clie
nt++
;pr
intf
("%6
d-ie
mecl
ient
atr
aite
r\n"
,ra
ngCl
ient
);
cont
exte
_t*p
ctxt
=ma
lloc
(siz
eof(
cont
exte
_t))
;if
(pct
xt==
NULL
)ER
R(EX
IT_F
AILU
RE,
__FI
LE__
,__
LINE
__,
"mal
loc"
);// //
Init
iali
sati
ondu
cont
exte
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
198
Élém
ents
d’archite
ctureclient-serveur
5Se
rveu
rmon
o-tâchegérant
tous
lesclientsàla
fois
// pctx
t->n
bRep
onse
sAuC
lien
t=
0;//
Defi
niti
onde
l’ev
enem
ent
pctx
t->e
v=
even
t_ne
w(ba
se,
fdCo
nnex
ion,
EV_R
EAD,
gest
ionC
onne
xion
,pc
txt)
;
/*Aj
out
aux
even
emen
tsac
tifs
,sa
nsti
meou
t*/
even
t_ad
d(pc
txt-
>ev,
NULL
);} in
tma
in()
{in
tfd
Poin
tDAc
ces
=cr
eati
onPo
intD
Acce
s();
//In
itia
lisa
tion
dela
libr
airi
eev
ent
base
=ev
ent_
base
_new
();
if(!
base
)ER
R(EX
IT_F
AILU
RE,
__FI
LE__
,__
LINE
__,
"Cou
ldno
tin
itia
lize
libe
vent
!\n"
);
//De
fini
tion
del’
even
emen
tli
eau
poin
td’
acce
sst
ruct
even
t*e
vent
Poin
tDAc
ces
=ev
ent_
new(
base
,fd
Poin
tDAc
ces,
EV_R
EAD|
EV_P
ERSI
ST,
gest
ionP
oint
DAcc
es,
NULL
);
//Aj
out
aux
even
emen
tsac
tifs
,sa
nsti
meou
tev
ent_
add(
even
tPoi
ntDA
cces
,NU
LL);
// //At
tent
ed’
even
emen
ts// ev
ent_
base
_dis
patc
h(ba
se);
retu
rnEX
IT_S
UCCE
SS;
}
Notez
que:
•rangClient
estde
venu
static
;
•iln’yapa
sbe
soin
demutex
pour
protéger
l’inc
rémentatio
nde
rangClient
puisq
u’iln’yadé
sorm
ais
plus
qu’une
seuletâchequ
iinc
rémente
cettevaria
ble;
•la
notio
nde
contexte
estintrod
uite
pour
gérernbReponsesAuClient
;
•no
usavon
sspécifiéqu
el’é
véne
mentsurfdPointDAccesestpe
rsist
ant.
Enrevanche
,nou
sne
l’avons
pasfaitpo
urfdConnexion.
Eneff
et,n
ousne
devo
nspa
sréarmer
cetévén
ementqu
andle
serveu
rsait
qu’il
n’au
raplus
d’évén
ements
duclient
surcettesocket.E
nrevanche
,nou
sréarmon
sman
uellement
cetévén
ementqu
andc’estné
cessaire
:
//On
reamorce
l’evenement
event_add(pctxt->ev,
NULL);
Voiciq
uelque
sexpé
riences
envisageab
lesavec
ceserveu
r:
1.Dan
sun
term
inal,
mod
ifiez
lavaria
ble
d’environn
ement
LD_LIBRARY_PATH
pour
que
votre
exécutab
leretrou
vela
bibliothèque
(dyn
amique
)lib
event.
Puis,
tape
zla
comman
deshell
:./serveurTCP_1_tache_n_client
2.Dan
sun
autreterm
inal,t
apez
lacomman
deshell:
for((i=1;i<=600;i+=1));do
(./clientTCP
$i&);done
3.Con
statez
quel’e
xécu
tionestrapide,m
êmes’iln
’yaqu
’une
seuletâchepo
urtraitertous
cesclients.
4.Vo
yezcommentle
serveu
r«rame»si
vous
décommentezsa
ligne
usleep(100000);
5.Autre
expé
rienc
e,leserveu
rfait.
/serveurTCP_1_tache_n_client:serveurTCP_1_tache_n_client.c:69:
accept:Toomany
open
filessiun
client
met
1second
eentrechaq
uerequ
êteet
qu’il
yabe
aucoup
declients.
Pour
résoud
recela,s
urtout
pasde
sémap
hores,
carcela
bloq
uerait
leprog
ramme!
Seule
solutio
n:
(a)en
levezle
EV_PERSIST
deevent_newsurfdPointDAccess
;(b)ajou
tezun
compteu
ret
quan
dce
compteurde
vientproche
dela
valeur
critiqu
e,ne
réarmez
pas
l’événe
mentlié
àgestionPointDAcces
.Ainsi,
vous
évite
zde
faire
desaccept
entrop
.
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
199
Élém
ents
d’archite
ctureclient-serveur
5Se
rveu
rmon
o-tâchegérant
tous
lesclientsàla
fois
#22
' &
$ %
5.3Analyse
�Av
antages
�Ad
apté
aucasd
econn
exions
long
uesa
vecde
long
stem
psd’inactiv
ité
�Inconvénien
ts�
Complexité
�Risquesd
esurcharge
�Le
traite
mentd
’une
requ
êtene
doitpasc
omprendredesa
ppels
-systèm
eslen
ts(à
moins
quece
nesoisdese
ntrées-so
rties):
leserveurs
ecompo
rteraitalo
rscommeun
serveurm
ono-processusg
érantu
nclientà
lafois
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
200
Élém
ents
d’archite
ctureclient-serveur
#23
' &
$ %
6Co
nclusio
n
�Ce
coursa
présenté
4archite
ctures
logicie
llesd
eserveur.Elles
mettent
enœuvre
tous
lesmécanism
essystèm
eétud
iésau
coursd
ecette
U.V.
�Quelle
estlameilleu
rearchite
cture?
Larépo
nseàcette
questio
ndépend
decritè
resd
ontl’im
porta
ncevarie
selonle
projet
considéré:
�No
mbremaxim
umde
clients
simultanésà
gérer,
�Du
réede
traite
mentd
’une
requ
êteau
niveau
duserveur,
�Ex
périe
ncedesd
évelo
ppeurs,
�Im
porta
ncede
ladimensio
nGr
eenCo
mpu
ting,
�...
Àtort
ouàraiso
n,le
Green
Com
putin
gestun
eno
tionclairementen
vogu
eactuellement.D’unpo
intde
vueprog
rammationet
archite
cturelogicielle,ils
emblequ
ecetteno
tionconsist
eessentiellementàop
timise
rau
max
imum
l’efficacité
del’a
pplic
ationdé
velopp
ée.
Onpe
utyajou
terle
besoin
qu’une
applicationconsom
mele
moins
deressou
rces
possibleset
surtou
tsoit
enmesurede
diminue
rsonutilisatio
nde
ressou
rces
enpé
riodescreu
sesd’utilisatio
n.Ainsi,
pour
une
applicationclient-serveur,o
npe
utim
aginer
quel’a
pplic
ationsoittrès
utiliséeàde
she
ures
depo
inte
ettrès
peule
restedu
temps.Dan
sce
cas,
l’architecture«Serveu
ravec
Ntâches
gérant
tous
lesclients»,
ces
Ntâches
étan
tstockésda
nsun
pool
d’en
fantsdispon
ibles,
estmoins
Green
quel’a
rchitecture«Se
rveu
rmon
o-tâchegérantN
clientsà
lafois».
Eneff
et,e
nhe
ures
creu
ses,le
pool
d’en
fantsd
ispon
iblesr
este
alloué
alorsqu
’ilne
sert
pas.
Onconsom
medo
ncde
laRAMinutile
ment.
Bib
liogr
aphi
edu
chap
itre
[Kegel,2
006]
Kegel
(200
6).The
C10
Kprob
lem.http
://w
ww.kegel.com
/c10
k.html.
Last
accessed
inMay
2011
.
[Leitner,2
003]
Leitn
er(200
3).S
calableNetwo
rkPr
ogrammingOr:
The
Que
stfora
Goo
dWeb
Server
(Tha
tSu
rvives
Slashd
ot).
http
://b
ulk.fefe.de/scalab
le-netwo
rking.pd
f.La
staccessed
inMay
2011
.
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
201
Élém
ents
d’archite
ctureclient-serveur
TEL
ECOM
SudP
aris
—Mich
elSimatic
—Av
ril20
18—
mod
uleCSC
4508
/M2
202
Réc
apit
ulat
ifde
sou
tils
Fra
nçoi
sT
raha
y
mod
ule
CSC
4508
/M2
Avr
il20
18 203
Récap
itulatif
desou
tils
#2
' &
$ %
Plan
dudo
cument
2Infoss
url’architecturematérielle.................................................4
2De
bugg
ing.
.....................................................................4
4En
trées/S
ortie
s–Ba
sesd
edo
nnées.
.............................................6
4IPC............................................................................6
5Trait
ementd
etâches
parallèles
..................................................
7
#3
' &
$ %
1Infossurl’architecturematérielle
�HW
Loc
a
�Fo
urnitd
esinform
ations
surlatopo
logiede
lamachine
(hyp
erthreads,cœ
urs,
nœud
sNUM
A,caches
parta
gés,etc.)
�Outils
perm
ettant
deplacer
lesthreads/processuss
urla
machine
�PA
PIb
�Do
nneaccèsa
uxcompteurs
matérielsd
uprocesseur
(nom
bred’instructions
exécutées,no
mbrede
cachemiss
,etc.)
a.https://w
ww.ope
n-mpi.org/p
rojects/hw
loc/
b.http
://icl.cs.utk.edu/
projects/p
api/wiki/Main_
Page
TEL
ECOM
SudP
aris
—Fran
çois
Trah
ay—
Avril
2018
—mod
uleCSC
4508
/M2
204
Récap
itulatif
desou
tils
#4
' &
$ %
2Debug
ging
�Co
mpiler
avec
Clang
a
�po
urbénéficier
desonanaly
sestatique
pour
repérerc
ertainsb
ugss
ubtils.
�GD
B�
Pour
débu
ggueru
nprog
ramme:a
fficher
l’instru
ctionayantc
ausé
unSIGS
EGV,
observer
lesvaleu
rsde
varia
bles,e
xécutio
npasà
pas,etc.
�Po
urfaire
dureverse
debu
gging
�valgrin
d�
Pour
détecter
lesprob
lèmes
mém
oire
(variab
lesno
ninitialisées,a
ccès
àde
lamém
oire
nonallou
ée,e
tc.)
�Inform
ations
surl’utilisa
tiondesc
aches(
accèse
nlec
ture/écritu
reauxcaches
ouen
dehors
desc
aches)
�Go
ogle
Breakp
adb
�Sy
stèm
ede
crash-repo
rting
multiplateforme
a.ht
tp:/
/cla
ng.l
lvm.
org/
b.ht
tps:
//ch
romi
um.g
oogl
esou
rce.
com/
brea
kpad
/bre
akpa
d/
Lereverse
debugging
est
une
fonc
tionn
alité
mécon
nue,
mais
très
puiss
ante
degd
b.Elle
per-
met
d’exécuter
une
application
enmod
epa
sà
pas,
mais
enrecu
lant.
Ceci
perm
et,
àpa
rtir
d’un
eerreur
desegm
entatio
n(par
exem
ple),
derevenir
enarriè
repo
urcompren
dre
pourqu
oile
pointeur
ptr
est
NULL
(par
exem
ple).
Vous
trou
verez
untutorie
lsur
cette
fonc
tionn
alité
ici
:http://jayconrod.com/posts/28/tutorial-reverse-debugging-with-gdb-7
Pour
allerp
lusloinda
nsl’u
tilisa
tionde
gdb,
jevo
usconseille
lavidé
ode
GregLa
wlors
dela
Cpp
Con
2015
“Giveme15
minutes
&I’llcha
ngeyo
urview
ofGDB”
:https://www.youtube.com/watch?v=PorfLSr3DDI
#5
' &
$ %
3En
trées/So
rties–Bases
dedo
nnées
�Ba
sesd
edo
nnées
�ND
BM�
GDBM
�Oracle
Berkele
yDB
�Ce
sbases
dedo
nnéesp
ermettent
destockerd
esfichierss
ouslaform
eclé
/vale
ur
�Ge
stionde
donn
éeslocale
sauform
atSQ
L�
SQLite
a
a.ht
tps:
//ww
w.sq
lite
.org
/
TEL
ECOM
SudP
aris
—Fran
çois
Trah
ay—
Avril
2018
—mod
uleCSC
4508
/M2
205
Récap
itulatif
desou
tils
#6
' &
$ %
4IPC
�Ze
roMQ,n
anom
sg
�Ra
bbitM
Q,N
ATS,
Apache
Kafka
�Po
uréchang
erdesm
essagese
ntre
processuss
urun
eou
plusieu
rsmachines,y
comprisavec
desa
rchitectures
/lan
gagesd
ifférents
#7
' &
$ %
5Traitementde
tâches
parallèles
�GN
Uparallel
�Ce
lery
�Ta
sk-sp
ooler
�Pe
rmettent
d’exécuter
deslistes
detâches
enparallèle
TEL
ECOM
SudP
aris
—Fran
çois
Trah
ay—
Avril
2018
—mod
uleCSC
4508
/M2
206
Bib
liog
raph
ie
Fré
déri
que
Silb
er-C
haus
sum
ier
etM
iche
lSi
mat
ic
mod
ule
CSC
4508
/M2
Avr
il20
18 207
Bibliograp
hie
#2
' &
$ %
Plan
dudo
cument
2Co
ncepts
dess
ystèmes
d’exploitatio
n.............................................4
2Ouvragesd
édiés
àUn
ix..........................................................4
4Do
cuments
dédiés
àLinu
x.......................................................7
4Do
cuments
spécifiqu
esthreads...................................................7
5Divers..........................................................................8
6Bibliographie.
.................................................................1
3
#3
' &
$ %
1Co
ncepts
dessystèm
esd’exploitatio
n�
[Kais
er,2
006]
:est
uncoursd
uCN
AMqu
iévoqu
eles
concepts
évoq
uésd
ans
CSC4
508/
M2,
mais
sous
laform
ed’un
documentr
édigé.
Dispon
ible
surInternet.
�[Silb
erschatz
etal.,2
002]
:traite
dela
conceptio
ndess
ystèmes
d’exploitatio
n.Il
aborde
lesdiffé
rentes
prob
lématiquesq
uiapparaiss
entlorsqu’on
veut
créeru
nsystèm
ed’exploitatio
neffi
cace
etdétaille
lesdiffé
rentes
manièr
esde
résoud
reces
prob
lèmes,leurs
avantagese
tleurs
inconvénien
ts.E
nfin,
pour
chaque
grande
thém
atique
(ordon
nancem
entd
el’allo
catio
nCP
U,allocationde
lamém
oire,système
defichiersd
istrib
ués...)
,celivre
explique
commentles
systèm
esd’exploitatio
nexistants
(Linux,S
olaris,
Windows
2000
entre
autre
s)on
trésolucesp
roblèm
es.
�[Tannenb
aum,2
001]
:une
référencedans
ledo
main
ede
laconceptio
ndess
ystèmes
d’exploitatio
n.Pe
ut-être
unpeumoins
complet
quele
[Silb
erschatz
etal.,2
002]
�[Bloch,2
008]
:présentel’h
istoire
dess
ystèmes
d’exploitatio
n,leu
rfon
ctionn
ement
etles
enjeu
x.
�[D
owney,20
05]:
uneréférencepo
urtout
cequ
icon
cerneles
paradigm
esde
synchron
isatio
n.
[Dow
ney,
2005
]aun
seul
défaut
:ilu
tilise
wait
etsignal
enlie
uet
placede
P()et
V();c
elape
utprêter
àconfusionavec
lesprim
itiveswait
etsignal
étud
iées
pend
antle
courssurlesthreads.
TEL
ECOM
SudP
aris—
Fréd
érique
Silber-C
haussumiere
tMich
elSimatic—
Avril
2018
—mod
uleC
SC45
08/M
220
8
Bibliograp
hie
#4
' &
$ %
2Ouvragesdédiés
àUnix
�[Leffl
erandKu
zick,
1997
]:présentatio
ndesc
onceptsq
uion
tguidé
l’élab
orationdu
systèm
eUN
IXBS
Dpard
euxmaît
resd
usujet
�[Riffl
et,1
995]
:mon
ancie
nlivre
dechevet
avantd
econn
aître
[Blae
ss,2
002]
�[Stevens,1
992]
:con
sidérécommeun
ebible
�[UNIX,
2003
])et
[GNU
,200
3]:m
anet
info
sont
dess
ources
d’inform
ations
inestim
ables
.
#5
' &
$ %
3Docum
ents
dédiés
àLinu
x
�[Blae
ss,2
002]
:unlivre
(voire
uneréférence)
trèsc
omplet
surlaprog
rammation
systèm
esous
Linu
x
�[M
itchellet
al.,2
001]
:unbo
nlivre
(désormais
enfra
nçais
!)po
urdévelopp
erdes
applica
tions
avancées
(ouno
n)sous
Linu
x
�[linu
xCrossRe
f,20
05]:
pour
seprom
ener
aisém
entd
ansles
sourcesL
inux
�[D
repp
er,1
999]
:pou
rceuxqu
is’in
téressenta
uxprob
lèmes
d’op
timisa
tion
�[How
To,2
005]
:l’en
droito
ùchercher
desr
épon
sesà
desq
uestions
classiquess
urLinu
x
�[linu
xCenter,20
05]:
unindexthém
atique
depagesW
ebconsacrées
ausystèm
ed’exploitatio
nLinu
x
�[linu
xMag,2
005]
:unmagazineen
ligne
surL
inux
�[linu
xDoc,2
005]
:point
centralp
ourlado
cumentatio
nLinu
x(notam
mentles
FAQ)
TEL
ECOM
SudP
aris—
Fréd
érique
Silber-C
haussumiere
tMich
elSimatic—
Avril
2018
—mod
uleC
SC45
08/M
220
9
Bibliograp
hie
#6
' &
$ %
4Docum
ents
spécifiqu
esthreads
�[Bryanta
ndO’Hallaron
,200
3]:c
f.commentaire
�[Rob
bins
andRo
bbins,20
03]:
cf.c
ommentaire
�[Blae
ss,2
002]
:cf.commentaire
�[Bovet
andCe
sati,
2003
]
�Th
readss
pécifi
quem
ent
�[Nich
olse
tal.,
1996
]:décritcommentf
airedesp
rogram
mes
àbase
efficacesd
ethreadsPO
SIX
�[Lew
iset
al.,1
995]
:présenteles
princip
esgénéraux
dest
hreadset,n
otam
ment,
leurimplantatio
nsous
Linu
x,Windows
...
�[Butenho
f,19
97]:
décritcommentfair
edesp
rogram
mes
efficacesà
base
dethreadsPO
SIX
�[Zignin,
1996
]:décritles
princip
esgénéraux
dest
hreads.C
ommence
àdater,
mais
présente
l’avantaged’être
dispon
ible
àla
bibliothèque
deTS
P
#7
' &
$ %
�[Lam
pkin,2
006]
:une
semi-F
AQsurles
threadsPO
SIX,
dispon
ible
surleWeb
�[W
illiam
s,20
12]:
décritle
multi-threadingen
C++
11,d
ispon
ible
àla
bibliothèque
deTS
P
Lecours[Bryan
tan
dO’H
allaron,
2003
]est
très
bien
fait.
Ilpa
rtde
scouche
sba
sses
pour
explique
rles
diffé
rentes
notio
ns:les
imag
esmém
oire
desprocessuspo
urexplique
rla
notio
nde
thread
,les
instructions
liées
àun
electureet
àun
eécrit
urepo
urexplique
rlesprob
lèmes
desynchron
isatio
navec
pour
exem
plele
compteu
r.Le
livre
[Rob
bins
andRob
bins,2
003]
estt
rèsp
rogressif.Ilexp
lique
notammentles
ensd
ethread-safe
avec
strtok()
commeexem
ple(p.3
9)et
yrevientd
ansu
nchap
itresurles
thread
sPOSIX
avec
commeexem
ples
strerr()
eterrno(p.4
32).
Lesthread
ssont
expliqué
ssurtroischap
itres
avec
beau
coup
d’exem
ples,n
o-tammentde
sexem
ples
détaillés
degestionde
ssig
naux
avec
desthread
s.Introd
uitau
ssid
esprim
itivesno
nim
plan
tées
surLinu
xcommelesprim
itivespthread_rw_*
.Le
livre
[Blaess,
2002
]fou
rnit
beau
coup
d’explications
surl’implan
tatio
nde
sthread
ssous
Linu
xmêm
es’ile
stdé
jàun
peuan
cien
parexem
plece
quic
oncernela
directive_REENTRANT
estdé
jàob
solète.
TEL
ECOM
SudP
aris—
Fréd
érique
Silber-C
haussumiere
tMich
elSimatic—
Avril
2018
—mod
uleC
SC45
08/M
221
0
Bibliograp
hie
#8
' &
$ %
5Divers
�Dé
velopp
ementd
’unserveure
fficace
etperfo
rmant
�[Leit
ner,20
03]fou
rnitde
précieu
sesind
icatio
nssurledévelopp
ementd
’un
serveure
fficace.
�[Kegel,
2006
]résum
el’ensem
bledess
tratégies
utilis
ables
pour
qu’unserveurg
ère
deno
mbreusese
ntrées-so
rties
�Sy
mbian
OS
�[M
orris,2
007]
présente
Symbian
OS.
[Morris
,200
7]estmis
icip
arcu
riosit
éintelle
ctue
lle.E
neff
et,a
près
l’ann
once
parNokia
del’u
tilisa
tion
deWindows
Mobile
pour
sestéléph
ones,leprojet
Symbian
OSaétéarrété.
#9
' &
$ %
6Bibliographie
[Blae
ss,2
002]
Blaess,C
.(20
02).
Prog
rammationsystèm
een
Csous
Linu
x:signaux,
processus,threads,IPCet
sockets.
Eyrolles,Pa
ris,P
aris,
France.
[Bloch,2
008]
Bloch,
L.(200
8).L
essystèm
esd’exploitatio
ndeso
rdinateurs
:histoire,
fonctio
nnem
ent,enjeu
x.Vu
ilbert,http
://g
reenteapress.co
m/sem
aphores/.
http
://w
ww.laurent-b
loch.org/spip.ph
p?artic
le13.
[Bovet
andCe
sati,
2003
]Bo
vet,D.
P.andCe
sati,
M.(20
03).
Underst
anding
theLinu
xkernel.
O’Reilly,
2edition
.[Bryanta
ndO’Hallaron
,200
3]Br
yant,R
.E.a
ndO’Hallaron
,D.R
.(20
03).
Compu
ter
System
s:AProg
rammer’sPe
rspectiv
e.Prentic
eHa
ll.[Butenho
f,19
97]Bu
tenh
of,D
.(19
97).
Prog
rammingwith
POSIX
Threads.
Addison
Wesley
.[D
owney,20
05]Do
wney,A
.B.(20
05).
TheLittleBo
okof
Semaphores.
GreenT
eaPress,
http
://g
reenteapress.co
m/sem
aphores/.V
ersio
n2.1.5.
[Drepp
er,1
999]
Drepper,U.
(199
9).O
ptim
izing
applica
tions
with
gcc&
glibc.
Technicalreport,Re
dHat.h
ttp://p
eople.r
edhat.c
om/d
repp
er/o
ptim
tut.p
s.gz.
TEL
ECOM
SudP
aris—
Fréd
érique
Silber-C
haussumiere
tMich
elSimatic—
Avril
2018
—mod
uleC
SC45
08/M
221
1
Bibliograp
hie
#10
' &
$ %
[GNU
,200
3]GN
U(200
3).P
ages
d’Info
deGN
U.GN
U/Linu
x,Distrib
utionRe
dHat
7.3
edition
.
[How
To,2
005]
HowT
o(200
5).H
ow-to
linux.h
ttp://w
ww.traduc.org.L
asta
ccessedin
May
2011
.
[Kais
er,2
006]
Kaise
r,C.
(200
6).S
ystèmes
inform
atiques:
lesstructures
etparadigm
esdesp
lates-fo
rmes
inform
atiques.
http
://d
eptin
fo.cn
am.fr/E
nseig
nement/Cy
cleProb
atoire/S
RI/S
ystemes.
[Kegel,
2006
]Ke
gel(20
06).
TheC1
0Kprob
lem.h
ttp://w
ww.kegel.com/c10
k.html.
Last
accessed
inMay
2011
.
[Lam
pkin,2
006]
Lampk
in(200
6).P
OSIXTh
reads:
Semi-F
AQRe
vision5.2.
http
://w
ww.co
gnitu
s.net/h
tml/howt
o/pthreadS
emiFA
Q.htm
l.La
staccessed
inMay
2011
.
[Leffl
erandKu
zick,
1997
]Leffler,S
.and
Kuzic
k,J.-M
.(19
97).
Thedesig
nof
the
4.4B
SD.
[Leit
ner,20
03]Leitn
er(200
3).S
calab
leNe
tworkProg
rammingOr:
TheQuest
fora
Good
Web
Server
(ThatS
urviv
esSlashd
ot).
#11
' &
$ %
http
://b
ulk.fefe.de/scala
ble-networkin
g.pd
f.La
staccessed
inMay
2011
.[Lew
iset
al.,1
995]
Lewis,B.,B
erg,
D.,a
ndLewis,B.
(199
5).T
hreads
Prim
er:A
Guideto
MultithreadedProg
ramming.
Prentic
eHa
ll.[linu
xCenter,20
05]linuxCe
nter
(200
5).L
inux
center.h
ttp://w
ww.linu
x-center.org/fr.
Last
accessed
inMay
2011
.[linu
xCrossRe
f,20
05]linuxCrossR
ef(200
5).C
ross-re
ferencinglinux.
http
://lxr.linu
x.no
/sou
rce.
Last
accessed
inMay
2011
.[linu
xDoc,2
005]
linuxDo
c(200
5).T
heLinu
xDo
cumentatio
nProject.
http
://w
ww.tldp
.org/.
Last
accessed
inMay
2011
.[linu
xMag,2
005]
linuxMag
(200
5).L
inux
magazine.
http
://w
ww.linu
x-mag.co
m/.
Last
accessed
inMay
2011
.[M
itchellet
al.,2
001]
Mitc
hell,
M.,Oldham,J
.,andSa
muel,A.
(200
1).
Prog
rammationAv
ancéesous
Linu
x(A
dvancedLinu
xProg
ramming).N
ewRiders
Publish
ing,
http
://w
ww.advancedlinuxprog
ramming-fr.org.
[Morris,2
007]
Morris,B
.(20
07).
TheSy
mbian
OSarchite
cturesourcebo
ok:D
esign
andevolutionof
amob
ileph
oneOS.
Wiley.
TEL
ECOM
SudP
aris—
Fréd
érique
Silber-C
haussumiere
tMich
elSimatic—
Avril
2018
—mod
uleC
SC45
08/M
221
2
Bibliograp
hie
#12
' &
$ %
[Nich
olse
tal.,
1996
]Nichols,B.,B
uttla
r,D.
,and
Farre
ll,J.
(199
6).P
threads
Prog
ramming:A
POSIXStandard
forB
etterM
ultip
rocessing.
O’Reilly
and
Associa
tes.
[Riffl
et,1
995]
Rifflet,J
.-M.(19
95).
Laprog
rammationsous
UNIX,3
èÉd
ition
.Ed
iscien
ceInternational,Pa
ris,F
rance.
[Rob
bins
andRo
bbins,20
03]Ro
bbins,K.
A.andRo
bbins,S.
(200
3).U
NIXSY
STEM
SProg
ramming:c
ommun
icatio
n,Co
ncurrencyandTh
reads.
Prentic
eHa
ll.[Silb
erschatz
etal.,2
002]
Silberschatz,A
.,Ba
er,P
.,andGa
gne,
G.(200
2).O
peratin
gSy
stem
Concepts.J
ohnWiley&
Sons
Inc.,
6thedition
.[Stevens,1
992]
Stevens,W.(
1992
).Ad
vanced
Prog
rammingin
TheUN
IXEn
viron
ment.
Addison-Wesley
,Reading
,Massachusetts,U
SA.
[Tannenb
aum,2
001]
Tann
enbaum
,A.(
2001
).Mod
ernOperatin
gSy
stem
s.Ha
rdcover,
2ndedition
.[UNIX,
2003
]UN
IX(200
3).P
ages
dumanuele
nligne
UNIX.G
NU/L
inux,D
istrib
ution
RedH
at7.3edition
.[W
illiam
s,20
12]William
s,A.
(201
2).C
++
Concurrencyin
actio
n,Practic
al
#13
' &
$ %
Multithreading
.Manning
Publica
tions,fi
rstedition
.
[Zignin,
1996
]Zign
in,B
.(19
96).
Techniqu
esdu
multithread:d
uparallèlismedans
lesprocessus.
Herm
ès.
TEL
ECOM
SudP
aris—
Fréd
érique
Silber-C
haussumiere
tMich
elSimatic—
Avril
2018
—mod
uleC
SC45
08/M
221
3
Bibliograp
hie
TEL
ECOM
SudP
aris—
Fréd
érique
Silber-C
haussumiere
tMich
elSimatic—
Avril
2018
—mod
uleC
SC45
08/M
221
4
Inde
xSy
mbo
ls_aligned_free,
45_aligned_malloc,
42,4
5__attribute_
___attribute__
aligned,
42__attribute__
packed
,42
-fpackstruct
,42 A
abort,
16access
,74
Adresse
logiqu
e,32
aio_error,
65aio_read
,65
aio_return
,65
aio_write,
65Algorith
med
elasecond
echa
nce,seeSe
cond
echa
nce,
Algorith
mede
laAlig
nement,42
alloca
,48
App
elprocéd
ural
entreprocessus,
seeSy
nchron
isa-
tion,
App
elprocéd
ural
entreprocessus
App
elssystèm
es,2
0Architectureclient/serveur,1
80argc
,79
argv
,79
assert
,16
atexit
,82
Attente
deprocessus,seePr
ocessus,
Attente
deAV
X,see
Instructions
vectorielle
sSS
E
BBe
lady
,37
Berkeley
DB,
seeOracleBe
rkeley
DB
bless,
56Blocag
ede
sentrées-sorties,
65brk,
49
Ccache,
23Mém
oire,2
9Cache
,40
d’ad
resses,3
3cachefully
-associatif,2
3cachehit,
23cachemiss
,23
cachesnoo
ping
,178
calloc
,45
Celery,
7Clé,see
IPC,C
léclearerr
,72
Clie
ntserveur,seeArchitectureclient/serveur
close,
58,9
5closedir
,75
cohé
renc
ede
cache,
178
Coh
orte,see
Synchron
isatio
n,Coh
orte
Con
ditio
ns,see
Mon
iteurs
Con
sommateu
rs,
see
Synchron
isatio
n,Pr
oduc
-teurs/Con
sommateu
rsCon
trôlede
fichier,see
Fichier,
Con
trôlede
creat,
58Créationde
fichier,see
Fichier,
Créationde
Créationde
processus,seePr
ocessus,
Créationde
DD-Bus,
91Défau
tsde
page,4
3Dép
lacementda
nsfichier,seeFichier,
Dép
lacement
dans
Descripteur,6
1,72
Écrit
ure,
59Le
cture,
59Descripteur
desegm
ents,3
5dup,
61dup2
,61
Dup
licationde
descrip
teur,6
1
EEAGAIN
,65
Écrit
urefichier,see
Fichier,
Écrit
ure
Écrit
uresurde
scrip
teur,see
Descripteur,É
critu
reÉc
roulem
ent,33
EINTR,
65electric
fence,
51environ,
79En
vironn
ementde
sprocessus,
seePr
ocessus,
Envi-
ronn
ementde
sEn
void
esig
nal,seeSy
nchron
isatio
n,En
void
esig
nal
envp
,79
epoll,
197
Erreur
systèm
e,16
errno,
15,1
6,21
,139
,142
error,
16error_at_line,
16ERROR_AT_LINE,
16Es
pace
vital,33
event_add,
197
event_dispatch
,197
event_set,
197
EWOULDBLOCK,
65Ex
clusion
mutue
lle,seeSy
nchron
isatio
n,Ex
clusion
mutue
lleexecl,
83execle
,83
execlp
,83
Exécutionno
uveauprog
ramme,
seePr
ocessus,
Exé-
cutio
nno
uveauprog
ramme
execv,
83execve
,83
execvp
,83
215
exit
,82
Ffallocate,
59fclose
,68
fcntl,
62feof
,72
Ferm
eturefichier,see
Fichier,
Ferm
eture
ferror
,72
fflush
,71
fgetc,
68fgets,
68Fichier Con
seil,
64Con
trôlede
,62,
71Créationde
,58
Dép
lacementda
ns,6
5,72
Écrit
ure,
59Éc
riturede
,69,
70Fe
rmeturede
,58,
68I-n
œud
s,73
,74
Lecture,
59Le
cturede
,68,
69NFS
,76
Offset,see
Fichier,
Dép
lacementda
nsOuv
erture
de,5
8,68
Projectio
nen
mém
oire,7
2Rép
ertoire
,75
Tampo
ndu
,71
Verrou
illag
ede
,62
FIFO
,see
FirstIn
FirstOut
File
demessages,
91fileno
,72
Filesde
messages,
91Finde
processus,seePr
ocessus,
Term
inaisonde
FINUFO
,see
Second
echan
ce,A
lgorith
mede
laFirstI
nFirstO
ut,3
7FirstI
nNot
Used
FirstO
ut,see
Second
echan
ce,A
l-go
rithm
ede
lafopen,
68fork
,81
fprintf,
70fputc,
69fputs,
69fread,
68free
,45
Algorith
mes,4
7fscanf
,69
fseek,
72fsync,
58,7
1ftruncate,
95fwrite
,69
Ggd
b,4
gdb,
54GDBM
,5,5
7,65
,72
getc
,68
getchar,
68getegid,
80getenv
,79
geteuid,
80getgid
,80
getpgid,
80getpid
,80
getppid,
80getrlimit,
43getrusage,
23,3
9gets
,68
getuid
,80
GNU
Parallel,7
Goo
gleBr
eakp
ad,4 H
hexdump,
56HW
Loc,
3Hyp
erthread
ing,
171
Hyp
ertran
sport,
173
IICE,
91Inclusion,
seePr
incipe
d’inclusion
Inform
ations
conc
erna
ntun
processus,seePr
ocessus,
Inform
ations
conc
erna
ntun
I-nœud
s,seeFichier,
I-nœud
sInstructionLe
velP
arallelism
(ILP
),16
8Instructions
vectorielle
s,16
9Instructions
vectorielle
sAVX,see
Instructions
vecto-
rielle
sSS
EInstructions
vectorielle
sSS
E,43
insure++
,50,
51Intel,29
,33
Interblocage,see
Synchron
isatio
n,Interblocage
Intergiciel,19
7InterPr
ocessCom
mun
ication,
seeIP
Cinterrup
tion,
65Interrup
tion,
21Inversionde
priorit
é,25
IPCClé,9
0Filesde
messages,seeFilesde
messages
Mém
oire
partag
ée,see
Mém
oire,p
artagée
KKafka
,6
LLeastF
requently
Used,3
7LeastR
ecently
Used,3
7Le
cteu
rs/R
édacteurs,
see
Synchron
isatio
n,Le
cteu
rs/R
édacteurs
Lecturede
fichier,see
Fichier,
Lecture
Lecturesurde
scrip
teur,see
Descripteur,L
ecture
Lenteu
rde
sentrées-sorties,
65LF
U,see
LeastFreque
ntly
Used
216
libevent
,66,
197
ligne
decache,
23Limite
,see
Voirulimit
LRU,see
LeastRecently
Used
lseek,
65lstat,
75
Mmain
,79
majeu
rs Défau
tsde
page,see
Défau
tsde
page
malloc
,45,
48,4
9Algorith
mes,4
7mallopt,
45Mem
cached
,196
memset
,45
Mém
oire,3
5pa
rtag
ée,9
5mem
orywa
ll,20
Middlew
are,
197
mineu
rs Défau
tsde
page,see
Défau
tsde
page
mkdir,
75mkfifo
,87
mknod,
87mlock,
43mlockall
,43
mmap
,49,
72,9
5Mon
iteurs,
123
mpatrol,
51mprotect
,54
mq_close
,91
mq_open,
91mq_receive
,91
mq_send,
91mq_unlink,
91mtrace
,51
munlock,
43munlockall
,43
munmap
,72,
95
Nna
nomsg,6
NAT
S,6
NDBM
,5,5
7,65
,72
Netwo
rkFile
System
,see
Fichier,
NFS
Netwo
rkInform
ationService,
76NFS
,see
Fichier,
NFS
Nginx
,196
nice
,26
NIS,7
6Non
Uniform
Mem
oryArchitecture,
173
notify
,123
notifyAll,
123
Noyau
,20
NUMA,1
73
OO_APPEND
,58
O_ASYNC,
62O_CREAT,
58Offset,see
Fichier,
Dép
lacementda
nsoffsetof
,43
O_NDELAY
,58
O_NONBLOCK
,58,
62,6
5open
,58
opendir,
75OracleBe
rkeley
DB,
5,57
,65,
72O_RDONLY
,58
Ordon
nanc
ement
Politique
d’,2
3Pr
iorit
édy
namique
,26
statique
,23,
26Pr
iorit
éd’ordo
nnan
cement,26
stan
dard,2
6O_RDWR
,58
O_SYNC
,58,
71O_TRUNC,
58Ouv
erture
fichier,see
Fichier,
Ouv
erture
O_WRONLY
,58
PP,
98,1
01,1
08,1
44Pa
ges Utilisa
tionde
s,35
,39
Pagina
tion,
31,3
5,43
PAPI
,3,1
2Pa
ssag
ede
témoin,
seeSy
nchron
isatio
n,Pa
ssag
ede
témoin
perror
,16,
21pipe
,85
Pipe
line,
166
Politique
d’ordo
nnan
cement,
seeOrdon
nanc
ement,
Poli-
tique
d’poll
,197
popen,
86Po
rtable
Operatin
gSy
stem
Interface,
seePO
SIX
POSIX,9
1,13
1Sé
map
hores,seeSé
map
hores,P
OSIX
posix_fadvise,
64posix_fallocate,
59posix_memalign
,42,
45PO
SIX
Pthreads,1
33Pr
incipe
d’inclusion,
29printf
,70
Priorit
édy
namique
,see
Ordon
nanc
ement,
Prorité
dy-
namique
statique
,see
Ordon
nanc
ement,Pr
orité
statique
Processeur,1
64Pr
ocessus
Attente
de,8
2
217
Créationde
,81
Environn
ementde
s,79
Exécutionno
uveauprog
ramme,
83Inform
ations
conc
erna
ntun
,80
Term
inaisonde
,82
Prod
ucteurs/Con
sommateu
rs,see
Synchron
isatio
n,Pr
oduc
teurs/Con
sommateu
rsPr
ogrammationévén
ementie
lle,1
97Pr
ojectio
nde
fichier
enmém
oire,see
Fichier,Pr
ojec-
tionen
mém
oire
ps,2
3,35
,39
pthread_atfork
,162
pthread_attr_destroy
,135
pthread_attr_getdetachstate,
135
pthread_attr_getschedparam
,136
pthread_attr_getschedpolicy,
136
pthread_attr_getstackaddr,
136
pthread_attr_getstacksize,
136
pthread_attr_init,
135
pthread_attr_setdetachstate,
135
pthread_attr_setschedparam
,136
pthread_attr_setschedpolicy,
136
pthread_attr_setstackaddr,
136
pthread_attr_setstacksize,
136
pthread_cancel
,159
pthread_cleanup_pop,
161
pthread_cleanup_push
,161
pthread_cond_broadcast
,150
pthread_cond_destroy
,149
pthread_cond_init,
149
pthread_cond_signal,
150
pthread_cond_timedwait
,150
pthread_cond_wait,
150
pthread_create
,134
pthread_detach
,134
pthread_equal,
133
pthread_exit
,134
pthread_get_specific
,142
pthread_join
,134
pthread_key_create
,142
pthread_key_delete
,142
pthread_mutex_destroy,
145
pthread_mutex_init
,145
pthread_mutex_lock
,146
pthread_mutex_trylock,
146
pthread_mutex_unlock
,146
pthread_once_t
,162
pthread_self
,133
pthread_setcancelstate
,159
pthread_setcanceltype,
159
pthread_set_specific
,142
pthread_testcancel
,161
purify
,51
putc
,69
putchar,
69puts
,69
QQPI
,173
Qua
ntum
detemps,2
3,26
Quick
Path
Intercon
nect,1
73
RRab
bitM
Q,6
Rational
Purify
,51
read
,59
readddir
,75
readlink
,75
readv,
59realloc,
45Réd
acteurs,
see
Synchron
isatio
n,Le
cteu
rs/R
édacteurs
rename
,74
Ren
dez-vous
entrede
uxprocessus,
seeSy
nchron
isa-
tion,
Ren
dez-vous
entrede
uxprocessus
Rép
ertoire
,see
Fichier,
Rép
ertoire
Retou
r d’ap
pels
ystème,
15de
fonc
tion,
15return,1
5rewinddir,
75rmdir,
75
Ssbrk
,49
scanf,
69SCHED_FIFO
,23
SCHED_OTHER,
23,2
6SCHED_RR
,23
sched_rr_get_interval,
23sched_setscheduler
,23
sched_yield,
23Se
cond
echan
ceAlgorith
mede
la,3
7Se
gmentatio
n,34
,35
Segm
ents,3
5select
,66,
197
Sémap
hores,
98,1
08,1
47PO
SIX,1
01sem_close,
101
sem_destroy,
101,
147
sem_getvalue
,101
,147
sem_init
,101
,147
sem_open
,101
sem_post
,101
,147
sem_trywait,
147
sem_unlink
,101
sem_wait
,101
,147
sendfile
,61
Serveu
r,seeArchitectureclient/serveur
setvbuf,
71setgid
,80
setitimer,
66setpgid,
80
218
setpriority,
26setrlimit,
43shm_open
,95
shm_unlink
,95
SIGALARM
,66
signaction
,66
signa
l,65
Sign
al,see
Synchron
isatio
n,En
void
esig
nal
size
,35
SMP,
172
SMT,1
71splint
,50,
51sprintf,
70SQ
Lite,5
sscanf
,69
SSE,
seeInstructions
vectorielle
sSS
Estat
,73
strerror
,16,
21supe
rscalaire
,167
Swap
,35
symlink,
75Sy
mmetric
Multi-
Processin
g,17
2Sy
nchron
isatio
nApp
elprocéd
ural
entreprocessus,
113
Coh
orte,1
11disque
,58
Envoid
esig
nal,11
2Ex
clusionmutue
lle,1
10Interblocage,1
22Le
cteu
rs/R
édacteurs,
119
Passag
ede
témoin,
111
Prod
ucteurs/Con
sommateu
rs,1
14Ren
dez-vous
entrede
uxprocessus,
112
synchronized
,123
Systèm
estemps
réel,8
,9tran
sactionn
el,9 T
Tablede
spa
ges,
32Ta
ille,
35Ta
mpo
ndu
fichier,see
Fichier,
Tampo
ndu
Task-spo
oler,7
Temps
réel,see
Systèm
estemps
réel,9
Linu
x,24
Term
inaisonde
processus,
seePr
ocessus,
Term
inai-
sonde
Thrashing
,33
Thread,
126
time
,23,
39TLB
,33
top,
23,3
5,39
Tran
sactionn
el,see
Systèm
estran
sactionn
els
Tran
slatio
nLo
ok-aside
Buffe
r,33
Tube
s nommés,8
7ordina
ires,
85
Uulimit
,16
UnixNDBM
,see
NDBM
unlink
,74,
75Utilisa
tionde
spa
ges,
35,3
9
VV,
98,1
01,1
08,1
44valgrin
d,4
valgrind
,40,
51Va
riables-con
ditio
n,seeMon
iteurs
Verrou
illag
ede
fichier,see
Fichier,
Verrou
illag
ede
vfork,
81vmstat
,35
Wwait
,82,
123
waitpid,
82watchpoint
,54
WEXITSTATUS,
82WIFEXITED,
82WIFSIGNALED,
82Wine
,51
Working
set,33
write,
59writev
,59
WTERMSIG
,82
ZZe
roMQ,6
ZeroMQ
,91
219