119
Concepts des systèmes d’exploitation et mise en oeuvre sous Unix Coordonnateur : François Trahay module CSC4508/M2 Avril 2018

Concepts des systèmes d'exploitation et mise en oeuvre

  • 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é

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

PDF

(PDF

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

rip

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

rip

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

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

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

de

Se

gm

en

tD

ép

lac

em

en

t d

an

s l

e s

eg

me

nt

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

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

s

2.Tu

bepo

urtra

nsférer4

16octets

en2écritures

(long

ueur,p

uisd

onnée)

:1,2

s,soitun

gain

de47

%

3.Tu

bepo

urtra

nsférerp

ointeur(

supp

osemalloc

etfre

e):2,2

s,soitun

gain

de7%

4.Ta

bleaude

zonesm

émoire

géré

parp

aradigmede

synchron

isatio

nProd

ucteur/C

onsommateura

vecdess

émaphoresP

OSIX

:0,9

s,soitun

gain

de60

%

5.Idem

,mais

avec

desc

onditio

nsPO

SIX:3,2

s,soitun

surcoû

tde

39%

6.File

demessages(

IPCet

POSIX)

:0,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

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

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

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?

certa

ins

thre

ads?

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

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

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

[email protected]

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

→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

po

nse

Re

qu

ête

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

mail

•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

mail

•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

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

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

)

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

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

)

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

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

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

220