Sei sulla pagina 1di 67

Politecnico di Milano

Facolt di Ingegneria dellInformazione

SISTEMI INFORMATICI Esercitazioni A.A. 20122013

SCHEDULING, LINGUAGGIO C e STATECHARTS

Fabio PANOZZO

Indice
I Scheduling 2
3 3 3 3 4 5 10 13 13 13 13 14 14 19 20 22 22 22 22 23 23 23 26 27 35 35 35

1 Processi aperiodici 1.1 Modello . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.1 1.1.2 1.2 1.3 1.4 EDF Simboli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Graco dei processi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (Preemption, vincoli di precedenza) . . . . . . . . . . . . . . . . . . . . . . .

EDF (Preemption, no vincoli di precedenza) . . . . . . . . . . . . . . . . . . . . . . SPRING (No preemption) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2 Processi periodici 2.1 Modello . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1 2.1.2 2.1.3 2.2 2.3 2.4 Simboli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Graco dei processi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Risultati notevoli di schedulabilit . . . . . . . . . . . . . . . . . . . . . . .

RM (Statico, Di = Ti ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DM (Statico, Di < Ti ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . EDF (Dinamico, Di = Ti ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3 Processi misti 3.1 3.2 Scenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modello . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 3.2.2 3.3 3.4 3.5 3.6 Simboli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Risultati notevoli di schedulabilit . . . . . . . . . . . . . . . . . . . . . . .

Aperiodici Hard Real Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RM + DS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . EDF + TBS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . EDF + TBS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4 Gestione delloverload 4.1 Modello . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1 Simboli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ii

4.2 4.3

Workload . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DOVER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

36 38

II

Linguaggio C

42
43 50

5 Comunicazione di rete 6 Programmazione parallela

III

Statecharts

54
55 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 55 56

7 Statecharts 7.1 7.2 Linguaggio 7.1.1 Simboli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Esercizi (tratti da temi desame) . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Parte I

Scheduling

Capitolo 1

Processi aperiodici
1.1
1.1.1

Modello
Simboli

{j1 , . . . , jn } processi aperiodici ai istante di arrivo di un processo fi istante di ne di un processo di deadline di un processo ci tempo di computazione di un processo Li = fi di lateness di un processo; se Li 0 la deadline del processo i rispettata Li > 0 la deadline del processo i non rispettata Lmax = maxi Li lateness massima dei processi; se Lmax 0 i processi sono schedulabili Lmax > 0 i processi non sono schedulabili

1.1.2

Graco dei processi


ai ji 1 2 3 4 5 6 7 8 t ci di

CAPITOLO 1. PROCESSI APERIODICI

1.2

EDF (Preemption, no vincoli di precedenza)

Early deadline rst. Sceglie il processo pronto con deadline pi piccola. Garanzia di ottimalit: restituisce la soluzione con il minimo Lmax tra tutte le possibili schedulazioni (esistenti). Esercizio 1.1 Schematizzare la schedulazione dei processi, dare la sequenza di completamento, dare Li e Lmax .

j1 ai ci di 1 1 2 j1 Li 0

j2 2 2 9 j5 -1

j3 0 3 5 j3 0

j4 3 2 8 j4 -1

j5 2 1 4 j2 0

j1

j2

j3

j4

j5 1 2 3 4 5 6 7 8 9 10 t

Lmax = 0, quindi i processi sono schedulabili. Esercizio 1.2 Schematizzare la schedulazione dei processi, dare la sequenza di completamento, dare Li e Lmax .

j1

j1 ai ci di 1 2 5 j1 Li -2

j2 4 2 11 j4 -1

j3 0 4 7 j3 0

j4 5 1 7 j6 0

j5 6 1 12 j2 0

j6 8 2 10

j2

j3

j4

j5 0

j5

j6 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 t

Lmax = 0, quindi i processi sono schedulabili. Nota. Allistante 5 si potrebbero schedulare sia j3 che j4 ; la scelta del tutto arbitraria.

1.3. EDF (PREEMPTION, VINCOLI DI PRECEDENZA) Esercizio 1.3 Dire se il seguente problema schedulabile.

j1 ai ci di 1 2 4 j4 Li -1

j2 2 1 3 j2 0

j3 0 3 4 j3 1

j4 1 1 3

j1

j2

j3

j1 3

j4 1 2 3 4 5 6 7 8 t

Lmax > 0, quindi i processi non sono schedulabili. Nota. Allistante 3 si potrebbero schedulare sia j1 che j3 ; indipendentemente dalla scelta eettuata sarebbe risultato Lmax = 3 perch EDF restituisce sempre il valore ottimo.

1.3

EDF (Preemption, vincoli di precedenza)

Due fasi: 1. Costruzione del problema ausiliario a i = maxjk ji {ai , ak + ck } un processo non deve essere attivato prima che il suo predecessore non possa aver nito d i = minji jk {di , dk ck } devo poter terminare il predecessore e avere tempo a sucienza per terminare il successore 2. EDF
a i = a1 j1 c1 d 1 d1

j1

j2

a2 j2 1 2 3 4

a 2

d = d2 c2 2

9 10 11 12

Nota. Il predecessore non pu fare preemption del successore perch ogni volta che si dovr scegliere tra j1 e j2 sar scelto j1 perch la sua deadline minore.

6 Esercizio 1.4

CAPITOLO 1. PROCESSI APERIODICI

Schedulare i seguenti processi tenendo conto delle precedenze.

j1 ai ci di 1 2 5

j2 1 2 7

j3 0 2 9

j4 0 1 7

j5 2 1 8
j2 j1

j3

j4

a 2 = a2 a 3 = a3 a 5 = a5

a 1 = max{1, 1 + 2} = 3

d 1 = d1 d 3 = min{9, 7 1} = 6 d 2 = min{7, 5 2} = 3

a 4 = max{0, 0 + 2} = 2

d 4 = d4 d 5 = d5

j1

j1 a i ci d i 3 2 5

j2 1 2 3

j3 0 2 6

j4 2 1 7

j5 2 1 8

j2

j3

j4

j5 1 2 3 4 5 6 7 8 9 10 t

1.3. EDF (PREEMPTION, VINCOLI DI PRECEDENZA) Esercizio 1.5 Schedulare i seguenti processi tenendo conto delle precedenze; calcolare Lmax .
j4

j1 ai ci di 1 2 5

j2 0 1 11

j3 1 2 12

j4 3 1 15

j5 5 1 13

j6 5 2 14
j2 j1

j3

j6

j5

a 1 = a1 a 3 = max{1, 1 + 2} = 3 a 2 = max{0, 1 + 2} = 3

a 6 = max{5, 3 + 2, 5 + 1, 3 + 1} = 6

a 5 = max{5, 3 + 1} = 5

a 4 = max{3, 1 + 2} = 3

d 6 = d6

d 5 = min{13, 14 2} = 12

d 4 = min{15, 14 2} = 12

d 3 = min{12, 14 2} = 12

d 2 = min{11, 12 1} = 11

d 1 = min{5, 11 1, 12 2, 12 1} = 5

j1

j2

j1 a i ci d i 1 2 5

j2 3 1 11

j3 3 2 12

j4 3 1 12

j5 5 1 12

j6 6 2 14
j5 j3

j4

j6 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 t

Lmax = 2.

8 Esercizio 1.6

CAPITOLO 1. PROCESSI APERIODICI

Schedulare i seguenti processi tenendo conto delle precedenze; calcolare Lmax .

j1 ai ci di 1 1 14

j2 1 1 11

j3 2 1 13

j4 2 1 24

j5 2 1 14

j6 3 1 15
j2 j4 j6

j1

j3

j5

a 1 = a1 a 2 = a2 a 4 = max{2, 1 + 1} = 2 a 3 = max{2, 1 + 1, 1 + 1} = 2

d 3 = min{13, 14 1, 15 1} = 13 d 5 = d5 d 4 = min{24, 14 1, 15 1} = 13

d 2 = min{11, 13 1, 13 1} = 11

d 1 = min{14, 13 1} = 12

a 5 = max{2, 2 + 1, 2 + 1} = 3

a 6 = max{3, 2 + 1, 2 + 1} = 3

d 6 = d6

j1

j2

j1 a i ci d i 1 1 12

j2 1 1 11

j3 2 1 13

j4 2 1 13

j5 3 1 14

j6 3 1 15
j5 j3

j4

j6 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 t

Lmax = 8.

1.3. EDF (PREEMPTION, VINCOLI DI PRECEDENZA) Esercizio 1.7 Valutare EDF considerando la conoscenza del vincolo solo allarrivo del processo.

j1 ai ci di 2 2 12

j2 1 2 3

j3 0 3 7

j4 3 1 8

j5 6 2 11

j6 4 1 12
j1 j6 j5

t=0 a 1 = a1 a 2 = a2 a 3 = a3 a 4 = a4 a 5 = a5 a 6 = a6 t=4 a 1 = a1 a 2 = a2 a 3 = a3 a 4 = a4 a 5 = a5 a 6 = max{4, 2 + 2} = 4 t=6 a 1 = a1 a 2 = a2 a 3 = a3 a 4 = a4 a 6 = max{4, 2 + 2} = 4 a 5 = max{6, 4 + 1} = 6 d 1 = min{12, 9 1} = 8 d 2 = d2 d 3 = d3 d 4 = d4 d 5 = d5 d 6 = min{12, 11 2} = 9 d 1 = min{12, 12 1} = 11 d 2 = d2 d 3 = d3 d 4 = d4 d 5 = d5 d 6 = d6 d 1 = d1 d 2 = d2 d 3 = d3 d 4 = d4 d 5 = d5 d 6 = d6

10
t=0 a i ci d i t=4 a i ci d i t=6 a i ci d i j1 2 2 12 j1 2 2 11 j1 2 2 8 j2 1 2 3 j2 1 2 3 j2 1 2 3 j3 0 3 7 j3 0 3 7 j3 0 3 7 j4 3 1 8 j4 3 1 8 j4 3 1 8 j5 6 2 11 j5 6 2 11 j5 6 2 11 j6 4 1 12 j6 4 1 12
j5 j1

CAPITOLO 1. PROCESSI APERIODICI

0,4,6

j2

j3

j4 0,4,6 0,4,6

j6 4 1 9
j6 1 2 3 4

0,4,6

0,4

9 10 11 12 13 14 15 16

1.4

SPRING (No preemption)

Senza preemption con EDF non si ha garanzia di trovare la soluzione anche se essa esiste.
j1 ai ci di 1 2 6 j2 2 2 4
j2 1 2 3 4 5 6 t j2 1 2 3 4 5 6 t

j1

j1

Figura 1.1: EDF

Figura 1.2: Soluzione esistente

Ricercare quindi tra tutte le possibili schedulazioni, costruzione di un albero di enumerazione, problema N P completo, non applicabile nella realt. Spring. Listante temporale del nodo di arrivo deve essere minore di di ci , per tutti i processi

non ancora schedulati. Utilizzo di euristiche (di I e II grado) e limiti di backtracking (numero massimo di nodi) per migliorare il tempo di restituzione di una soluzione.

1.4. SPRING (NO PREEMPTION) Esercizio 1.8 Schedulare i seguenti processi.

11

0 j1 8 j2 2 j1 8 j3 4

j1 ai ci di 5 3 8

j2 0 2 4

j3 3 1 5

j4 0 3 11

j5 1 1 7
j1 8 j4 11

j1 8

j4 7

j5 5

Esercizio 1.9 Schedulare i seguenti processi utilizzando le seguenti euristiche: hi = max{ai t, 0} h i = di .

0 j2 2

j1 ai ci di 5 3 8

j2 0 2 4

j3 3 1 5

j4 0 3 11

j5 1 1 7
j4 7 j1 8 j4 11 j5 3

j3 4

t=0 h1 = 5, h 1 =8 h2 = 0, h 2 =4 h3 = 3, h 3 =5 h4 = 0, h 4 = 11 h5 = 1, h 5 =7

t=2 h1 = 3, h 1 =8 ... h3 = 1, h 3 =5 h4 = 0, h 4 = 11 h5 = 0, h 5 =7

t=3 h1 = 2, h 1 =8 ... h3 = 0, h 3 =5 h4 = 0, h 4 = 11 ...

12 t=4 h1 = 1, h 1 =8 ... ... h4 = 0, h 4 = 11 ...

CAPITOLO 1. PROCESSI APERIODICI t=8 ... ... ... h4 = 0, h 4 = 11 ...

Nota. La ricerca nel presente esercizio computazionalmente pi eciente di quella dellEsercizio 1.8.

Capitolo 2

Processi periodici
2.1
2.1.1

Modello
Simboli

{1 , . . . , n } processi periodici i,k istanza k-esima del processo i i fase di un processo (primo tempo di attivazione) Ti periodo del processo ri,k = i + (k 1) Ti k-esima attivazione Di = di,k ai,k deadline relativa di un processo Ci tempo di computazione di un processo U=
i Ui

Ci fattore di utilizzazione Ti

2.1.2

Graco dei processi


Ti Di i i 1 2 3 4 5 6 7 8 t Ci di,k ri,k+1

13

14

CAPITOLO 2. PROCESSI PERIODICI

2.1.3

Risultati notevoli di schedulabilit

Se U > 1 il sistema non schedulabile indipendentemente dallalgoritmo utilizzato. Rate monotonic LyuLayland (condizione suciente) U th = n n 21 dove n il numero dei processi

U U th il sistema schedulabile U th < U 1 non ci si pu esprimere sulla schedulabilit del sistema BiniButtazzo (condizione suciente)
i (Ui i (Ui

+ 1) 2 il sistema schedulabile + 1) > 2 non ci si pu esprimere sulla schedulabilit del sistema

Response time analysis (condizione necessaria e suciente computazionalmente pesante)


0 Ri = Ci

(2.1) cj
(k 1) k Ri Tj

Iik =
j |Tj <Ti

(2.2) (2.3)

k Ri = Ci + Ii

Ri Di , i il sistema schedulabile Nota. La vericata schedulazione con LyuLayland implica la vericata schedulazione con Bini Buttazzo. Deadline monotonic Response time analysis (condizione suciente computazionalmente pesante) Early deadline rst U 1 il sistema schedulabile

2.2

RM (Statico, Di = Ti)

Rate monotonic. Le priorit sono sssate allistante t = 0 e non possono cambiare durante la schedulazione dei processi: pi piccolo il periodo, pi alta la priorit.

2.2. RM (STATICO, DI = TI ) Esercizio 2.1 Schedulare i seguenti processi.

15

1 i Ci Ti 0 2 15

2 1 2 3

1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 t

Esercizio 2.2 Dire se il seguente sistema schedulabile con RM.

1 i Ci Ti 2 1 3

2 0 1 5

3 2 2 13

4 0 1 15

LyuLayland test. U= U th 2 1 1 1 + + + = 0, 754 3 5 13 15 4 =4 21 = 0, 7568

U < U th schedulabile con RM Nota. Essendo U < 1 il sistema risulta schedulabile anche con EDF.

16

CAPITOLO 2. PROCESSI PERIODICI

4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 t

Esercizio 2.3 Dire se il seguente sistema schedulabile con RM.

1 i Ci Ti 0 2 6

2 1 2 10

3 2 1 4

4 3 2 11

LyuLayland test. U= U th 2 2 1 2 + + + = 0, 965 6 10 4 11 4 =4 21 = 0, 757

U > U th non ho garanzia di schedulabilit BiniButtazzo test. (Ui + 1) =


i

2 +1 6

2 +1 10

1 +1 4

2 +1 11

= 2, 36

(Ui + 1) > 2 non ho garanzia di schedulabilit

RTA test. Ordino in modo crescente i processi per Ti : 3 , 1 , 2 , 4 .


0 R3 = C3 = 1 0 I3 =0 1 0 0 R3 = C3 + I3 = 1 = R3

R3 < D3 = T3 3 schedulabile

2.2. RM (STATICO, DI = TI )
0 R1 = C1 = 2 0 I1 = C3 0 R1 T3

17

=1

2 =1 4 3 =1 4

1 0 0 R1 = C1 + I1 = 2 + 1 = 3 = R1 1 I1 = C3 1 R1 T3

=1

2 1 1 R1 = C1 + I1 = 2 + 1 = 3 = R1 < D1 = T1 1 schedulabile 0 R2 = C2 = 2 0 I2 = C1 0 0 R2 R2 + C3 T1 T3

=2

2 2 +1 =3 6 4 5 5 +1 =4 6 4 6 6 +1 =4 6 4

1 0 0 R2 = C2 + I2 = 2 + 3 = 5 = R2 1 I2 = C1 1 1 R2 R2 + C3 T1 T3

=2

2 1 1 R2 = C2 + I2 = 2 + 4 = 6 = R2 2 I2 = C1 2 2 R2 R2 + C3 T1 T3

=2

3 2 2 R2 = C2 + I2 = 2 + 4 = 6 = R2 < D2 = T2 2 schedulabile 0 R4 = C4 = 2 0 I4 = C2 0 0 0 R4 R4 R4 + C1 + C3 T2 T1 T3

=2

2 2 2 +2 +1 =5 10 6 4 7 7 7 +2 +1 =8 10 6 4 10 10 10 +2 +1 =9 10 6 4 11 11 11 +2 +1 = 11 10 6 4

1 0 0 R4 = C4 + I4 = 2 + 5 = 7 = R4 1 I4 = C2 1 1 1 R4 R4 R4 + C1 + C3 T2 T1 T3

=2

2 1 1 R4 = C4 + I4 = 2 + 8 = 10 = R4 2 I4 = C2 2 2 2 R4 R4 R4 + C1 + C3 T2 T1 T3

=2

3 2 2 R4 = C4 + I4 = 2 + 9 = 11 = R4 3 I4 = C2 3 3 3 R4 R4 R4 + C1 + C3 T2 T1 T3

=2

4 3 4 R4 = C4 + I4 = 2 + 11 = 13 = R4

R4 > D4 = T4 4 non schedulabile

18 Esercizio 2.4 Trovare valore di C4 tale che: 1. sia massimo ma schedulabile con LyuLayland, 2. sia massimo ma schedulabile con BiniButtazzo, 3. sia massimo ma schedulabile in sezione critica.
1 i Ci Ti 0 2 8 2 0 3 12 3 0 1 5

CAPITOLO 2. PROCESSI PERIODICI

4 0 ? 20

1. LyuLayland test. U th = 4 Hp : C4 = 1 U= 4 21 = 0, 757 +

Hp : C4 = 2

2 3 + 8 12 U < U th 3 2 U= + 8 12 U > U th

1 1 + = 0, 75 5 20 4 schedulabile 1 2 + + = 0, 8 5 20 non ho garanzia di schedulabilit

C4 = 1. 2. BiniButtazzo test. Hp : C4 = 1
i

(Ui + 1) =

1 +1 4

1 +1 4

1 +1 5

1 +1 20

= 1, 968

(Ui + 1) > 2 4 schedulabile (Ui + 1) = 1 +1 4 1 +1 4 1 +1 5 2 +1 20 = 2, 0625

Hp : C4 = 2
i

(Ui + 1) > 2 non ho garanzia di schedulabilit

C4 = 1.

2.3. DM (STATICO, DI < TI ) 3. Sezione critica test. C4 = 4.

19

4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 t

Nota. Nel caso C4 = 4 cosa ci direbbero i test LyuLayland e BiniButtazzo? LyuLayland U= 2 3 1 4 + + + = 0, 9 8 12 5 20 U > U th non ho garanzia di schedulabilit

BiniButtazzo (Ui + 1) =
i

1 +1 4

1 +1 4

1 +1 5

4 +1 20

=3

(Ui + 1) > 2 non ho garanzia di schedulabilit

Nota. Con EDF sarebbe schedulabile? Essendo U < 1 la risposta aermativa.

2.3

DM (Statico, Di < Ti)

Deadline monotonic. Le priorit sono sssate allistante t = 0 e non possono cambiare durante la schedulazione dei processi: pi piccola la deadline, pi alta la priorit. Esercizio 2.5 Dire se il seguente sistema schedulabile.

1 i Ci Ti Di 0 2 6 3

2 3 2 6 3

20

CAPITOLO 2. PROCESSI PERIODICI

0 R2 = C2 = 2 0 I2 =0 1 0 0 R2 = C2 + I2 = 1 = R2

R2 < D2 2 schedulabile
0 R1 = C1 = 2 0 = C2 I1 0 R1 T2

=2

2 =2 6

1 0 R1 = C1 + I1 = 2 + 2 = 4 > D1 1 non schedulabile

2 1 2 3 4 5 6 t

2 1 2 3 4 5 6 t

Figura 2.1: Sezione critica

Figura 2.2: DM

Nota. Lesercizio una dimostrazione che RTA una condizione suciente e non necessaria per la schedulabilit di un sistema con DM.

2.4

EDF (Dinamico, Di = Ti)

Early deadline rst. Le priorit cambiano dinamicamente al variare degli istanti di tempo: deadline pi stringente, priorit pi alta. Esercizio 2.6 Schedulare i seguenti processi.

1 i Ci Ti 0 2 8

2 0 3 12

3 0 1 5

4 0 5 20

3 1 5 2 + + + = 0, 95 8 12 5 20 U < 1 il sistema schedulabile U=

2.4. EDF (DINAMICO, DI = TI )

21

4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 t

Nota. NellEsercizio 2.4 il sistema risultava schedulabile con algoritmo RM e al pi C4 = 4 (analisi RTA); con C4 = 5 il sistema risulta schedulabile utilizzando EDF, ma non con RM.

Capitolo 3

Processi misti
3.1 Scenario

Aperiodico Hard Real Time

Aperiodico Soft Real Time

EDF No server Server

BACKGROUND SCHEDULING Statico Dinamico

RM +

EDF +

DEFERRABLE TOTAL SERVER BANDWIDTH SERVER

3.2
3.2.1

Modello
Simboli

ri = fi ai tempo di risposta del processo Ci (t): tempo di computazione rimanente al processo i allistante t Up fattore di utilizzazione dei processi periodici (denito in modo analogo ad U del Cap. 2) 22

3.3. APERIODICI HARD REAL TIME Us fattore di utilizzazione del processo server s

23

3.2.2

Risultati notevoli di schedulabilit

Se Up + Us > 1 il sistema non schedulabile indipendentemente dallalgoritmo utilizzato. Deferrable server


n

U th = n Up U th Up n

Us + 2 1 2 Us + 1 Us + 2 1 2 Us + 1

dove n il numero dei processi

il sistema schedulabile

3.3

Aperiodici Hard Real Time

Esercizio 3.1 Schedulare i seguenti processi.

1 i Ci Ti 1 2 4

2 0 2 8

3 2 1 16

4 0 1 32

j1 ai ci di 3 2 8

j2 5 2 17

j3 7 2 22

1 1 2 2 + + + = 0, 84375 4 8 16 32 Up < 1 linsieme dei processi periodici schedulabile Up = Nota. Allistante t = 3 possibile mandare in esecuzione sia 2 che j1 ed allistante t = 13 sia 1 che j2 ; in questi casi hanno precedenza i processi aperiodici.

3.4

RM + DS

Deferrable server. Laddove non diversamente specicato manda in esecuzione i processi aperiodici con politica FIFO.

24

CAPITOLO 3. PROCESSI MISTI

j1

j2

j3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 t

Esercizio 3.2 Schedulare i seguenti processi.

1 i Ci Ti 0 2 15

s 1 2 3
ai ci

j1 1 1

j2 0 2

j3 2 2

j4 4 2

j5 11 3

j6 9 3

j7 6 3

Up =

U th = 1 1

2 = 0, 13 15 2 Us = = 0, 6 3

Up < U th schedulabile con RM

0, 6 + 2 1 = 0, 143 2 0, 6 + 1

3.4. RM + DS

25

j1

j2

j3

j4

j5

j6

j7 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 t

Esercizio 3.3 Calcolare la capacit massima del DS anch il sistema sia schedulabile. Mostrare la schedulazione.

1 i Ci Ti 0 1 6

2 0 2 9

s 0 ? 4
ai ci

j1 1 1

j2 8 1

j3 3 3

j4 11 2

1 2 + = 0, 39 6 9 Us + 2 0, 39 2 2 1 2 Us + 1 Up = Us =

Us 0, 308

Cs Cs = 4 Us = 4 0, 308 = 1 4

26

CAPITOLO 3. PROCESSI MISTI

j1

j2

j3

j4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 t

3.5

EDF + TBS

Total bandwidth server. necessario introdurre delle soft deadline per i processi aperiodici che consentano la schedulazione con EDF. I processi aperiodici sono ordinati in base allistante di attivazione. ck Us

dk = max{ak , dk1 } + d0 = 0

Nota. Per la condizione necessaria e suciente di schedulabilit si ha che Us + Up 1, conseguentemente al pi Us = 1 Up .

Esercizio 3.4 Schedulare i seguenti processi.

1 i Ci Ti 0 1 4

2 0 1 5

3 0 2 11

j1 ai ci 1 3

j2 4 2

3.6. EDF + TBS

27

Up =

1 1 2 + + = 0, 63 4 5 11 Us = 1 0, 63 = 0, 37 d1 = max{1, 0} +

3 = 1 + 9 = 10 0, 37 2 d2 = max{4, 10} + = 10 + 6 = 16 0, 37

3.6

EDF + TBS

possibile migliorare le soft deadline per rendere la schedulazione computazionalmente pi eciente attraverso stime iterative degli istanti di ne dei processi.
0 d0 k = max{ak , dk 1 } +

ck Us

d0 0 =0 s = ak + ck + Ip (ak , ds ) f k k
+1 s ds =f k k

dove
s s Ip (ak , ds k ) = Ia (ak , dk ) + If (ak , dk )

Ia (ak , ds k) =
i|i attivo e di <ds k

Ci (ak ) max 0,
i

If (ak , ds k) = next_ri (ak ) =

ds k next_ri (ak ) 1 Ci Ti

ak + 1 Ti Ti

28 Signicato.

CAPITOLO 3. PROCESSI MISTI

s Ip (ak , ds k ): interferenza (stimata) su jk da parte di processi periodici in [ak , dk )

Ia (ak , ds k ): interferenza causata da istanze periodiche attivate prima di ak con deadline minore di ds k If (ak , ds k ): interferenza causata da istanze periodiche che si attiveranno dopo ak con deadline minore di ds k Ci (ak ): tempo di computazione rimanente al processo i allistante t = ak ds k next_ri (ak ) : numero di volte che il processo i si riattiva dopo ak ( minore di 0 se Ti si attiva dopo ds k) ak + 1 : istante della prima riattivazione del processo i dopo ak (sul libro questa formula Ti non corretta, manca il termine +1 al numeratore)

3.6. EDF + TBS Esercizio 3.5 Schedulare i seguenti processi.

29

1 i Ci Ti 0 1 4

2 0 1 5

3 0 2 11

4 0 2 16

j1 ai ci 0 3

Up =

2 2 1 1 + + + = 0, 757 4 5 11 16 Us = 1 0, 757 = 0, 243 d0 1 = max{0, 0} +

3 = 0 + 13 = 13 0, 243 0+1 5=5 5 0+1 next_r4 (0) = 16 = 16 16

0+1 4=4 4 0+1 11 = 11 next_r3 (0) = 11 next_r1 (0) =

next_r2 (0) =

0 = a1 + c1 + Ia (0, 13) + If (0, 13) = 0 + 3 + 4 + 3 = 10 = d1 = d0 f 1 1 1 Ia (0, 13) = 1 + 1 + 2 = 4 If (0, 13) = max 0, 13 4 13 5 1 1 + max 0, 1 1+ 4 5 13 11 13 16 + max 0, 1 2 + max 0, 1 2 =2+1+0+0 =3 11 16

1 = a1 + c1 + Ia (0, 10) + If (0, 10) = 0 + 3 + 2 + 1 = 6 = d2 = d1 f 1 1 1 Ia (0, 10) = 1 + 1 = 2 If (0, 10) = max 0, 10 5 10 4 1 1 + max 0, 1 1+ 4 5 10 11 10 16 + max 0, 1 2 + max 0, 1 2 =1+0+0+0 =1 11 16

2 = a1 + c1 + Ia (0, 6) + If (0, 6) = 0 + 3 + 2 + 0 = 5 = d3 = d2 f 1 1 1 Ia (0, 6) = 1 + 1 = 2 If (0, 6) = max 0, 65 64 1 1 + max 0, 1 1+ 4 5 6 11 6 16 + max 0, 1 2 + max 0, 1 2 =0+0+0+0=0 11 16

30

CAPITOLO 3. PROCESSI MISTI 3 = a1 + c1 + Ia (0, 5) + If (0, 5) = 0 + 3 + 1 + 0 = 4 = d4 = d3 f 1 1 1 Ia (0, 5) = 1 If (0, 5) = max 0, 54 55 1 1 + max 0, 1 1+ 4 5 5 16 5 11 1 2 + max 0, 1 2 =0+0+0+0=0 + max 0, 11 16

4 = a1 + c1 + Ia (0, 4) + If (0, 4) = 0 + 3 + 0 + 0 = 3 = d5 = d4 f 1 1 1 Ia (0, 4) = 0 If (0, 4) = max 0, 44 45 1 1 + max 0, 1 1+ 4 5 4 11 4 16 + max 0, 1 2 + max 0, 1 2 =0+0+0+0=0 11 16

d1 = 3.
1

j1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 t

4 Nota. Anche se d5 1 = d1 inutile reiterare il sistema perch per la schedulabilit non potr mai

essere d1 < a1 + c1 e a1 + c1 = 3. Esercizio 3.6 Schedulare i seguenti processi.


1 i Ci Ti 0 1 6 2 0 2 9 ai ci

j1 1 2

j2 8 1

Up =

1 2 + = 0, 39 6 9 Us = 1 0, 39 = 0, 61 d0 1 = max{1, 0} +

2 =1+4=5 0, 61

3.6. EDF + TBS next_r1 (1) = 1+1 6=6 6 next_r2 (1) = 1+1 9=9 9

31

0 = a1 + c1 + Ia (1, 5) + If (1, 5) = 1 + 2 + 0 + 0 = 3 = d1 = d0 f 1 1 1 Ia (1, 5) = 0 non ci sono processi attivi con di < ds k If (1, 5) = max 0, 56 59 1 1 + max 0, 1 2=0+0=0 6 9

j1

j2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 t

Figura 3.1: Valutazione processi attivi allistante t = 1 1 = 8 + 2 = 10 0, 61 8+1 9=9 9

d0 2 = max{8, 3} + 8+1 6 = 12 6

next_r1 (8) =

next_r2 (8) =

0 = a2 + c2 + Ia (8, 10) + If (8, 10) = 8 + 1 + 0 + 0 = 9 = d1 = d0 f 2 2 2 Ia (8, 10) = 0 non ci sono processi attivi allistante t = 8 If (8, 10) = max 0, 10 12 10 9 1 1 + max 0, 1 2=0+0=0 6 9

j1

j2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 t

Figura 3.2: Valutazione processi attivi allistante t = 8

32

CAPITOLO 3. PROCESSI MISTI

j1

j2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 t

Esercizio 3.7 Schedulare i seguenti processi.


1 i Ci Ti 0 2 5 2 0 1 3 ai ci

j1 1 2

j2 5 3

Up =

2 1 + = 0, 73 5 3 Us = 1 0, 73 = 0, 27 d0 1 = max{1, 0} +

2 =1+8=9 0, 27 next_r2 (1) = 1+1 3=3 3

next_r1 (1) =

1+1 5=5 5

0 = a1 + c1 + Ia (1, 9) + If (1, 9) = 1 + 2 + 2 + 1 = 6 = d1 = d0 f 1 1 1 Ia (1, 9) = 2 attivo solo 1 allistante t = 1 If (1, 9) = max 0, 93 95 1 2 + max 0, 1 1=0+1=1 5 3

1 = a1 + c1 + Ia (1, 6) + If (1, 6) = 1 + 2 + 2 + 0 = 5 = d2 = d1 f 1 1 1 Ia (1, 6) = 2 attivo solo 1 allistante t = 1 If (1, 6) = max 0, 65 63 1 2 + max 0, 1 1=0+0=0 5 3

2 = a1 + c1 + Ia (1, 5) + If (1, 5) = 1 + 2 + 0 + 0 = 3 = d3 = d2 f 1 1 1 Ia (1, 5) = 0 non ci sono processi attivi allistante t = 1 If (1, 5) = max 0, 53 55 1 2 + max 0, 1 1=0+0=0 5 3

3.6. EDF + TBS d0 2 = max{5, 9} + 5+1 5 = 10 5 3 = 9 + 12 = 21 0, 27 5+1 3=6 3

33

next_r1 (5) =

next_r2 (5) =

0 = a2 + c2 + Ia (5, 21) + If (5, 21) = 5 + 3 + 3 + 8 = 19 = d1 = d0 f 2 2 2 Ia (5, 21) = 3 entrambi i processi sono attivi allistante t = 5 If (5, 21) = max 0, 21 10 21 6 1 2 + max 0, 1 1=4+4=8 5 3

1 = a2 + c2 + Ia (5, 19) + If (5, 19) = 5 + 3 + 3 + 6 = 17 = d2 = d1 f 2 2 2 Ia (5, 19) = 3 entrambi i processi sono attivi allistante t = 5 If (5, 19) = max 0, 19 10 19 6 1 2 + max 0, 1 1=2+4=6 5 3

2 = a2 + c2 + Ia (5, 17) + If (5, 17) = 5 + 3 + 3 + 5 = 16 = d3 = d2 f 2 2 2 Ia (5, 17) = 3 entrambi i processi sono attivi allistante t = 5 If (5, 17) = max 0, 17 10 17 6 1 2 + max 0, 1 1=2+3=5 5 3

3 = a2 + c2 + Ia (5, 17) + If (5, 17) = 5 + 3 + 3 + 5 = 16 = d4 = d3 f 2 2 2 Ia (5, 16) = 3 entrambi i processi sono attivi allistante t = 5 If (5, 16) = max 0, 16 10 16 6 1 2 + max 0, 1 1=2+3=5 5 3

j1

j2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 t

Figura 3.3: Valutazione processi attivi allistante t = 1

34

CAPITOLO 3. PROCESSI MISTI

j1

j2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 t

Figura 3.4: Valutazione processi attivi allistante t = 5

j1

j2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 t

Capitolo 4

Gestione delloverload
4.1
4.1.1

Modello
Simboli

frequenza media di arrivo delle richieste c carico medio della richiesta = c carico Vi (fi ) valore del processo tipi di processo:
Vi (fi ) Vi (fi ) Vi (fi ) Vi (fi )

di

di

di

Figura 4.1: Firm

Figura 4.2: Critico

Figura 4.3: SRT

Figura 4.4: Non RT

35

36

CAPITOLO 4. GESTIONE DELLOVERLOAD

4.2

Workload

Fattore di load da calcolare negli istanti t di attivazione dei processi presenti nel sistema. (t) = max
i|di dk ci (t)

k |jk attivo

dk t

se (t) > 1 siamo in presenza di overload. Esercizio 4.1 Calcolare il fattore di load negli istanti t = 1, t = 3 e t = 6.

j1 ai ci di 6 2 9

j2 3 3 11

j3 1 6 10

j1

j2

j3 1 2 3 4 5 6 7 8 9 10 11 12 t

(1) = max = 6 <1 9

c3 (1) d3 1 no overload c2 (3) + c3 (3) c3 (3) , d2 3 d3 3 7 4 7 , = <1 8 7 8 c1 (6) c1 (6) + c2 (6) + c3 (6) c1 (6) + c3 (6) , , d1 6 d2 6 d3 6 2 6 3 6 , , = >1 3 5 4 5

(3) = max = max (6) = max = max

no overload

overload

4.2. WORKLOAD Esercizio 4.2 Calcolare il fattore di load negli istanti t = 1, t = 2 e t = 3.

37

j1 ai ci di 1 2 4

j2 3 2 6

j3 2 2 7

j1

j2

j3 1 2 3 4 5 6 7 8 9 10 t

(1) =

2 <1 3

no overload no overload no overload

3 1 3 , = <1 2 5 5 2 4 (3) = max 0, , =1 3 4 (2) = max Esercizio 4.3

Calcolare il fattore di load negli istanti t = 1, t = 2, t = 4 e t = 7.

j1

j1 ai ci di 1 4 6

j2 4 2 7

j3 2 2 4

j4 7 3 11
j4 1 2 3 4 5 6 7 8 9 10 11 12 t j2

j3

(1) =

4 <1 5 5 2 , 4 2 = 5 >1 4

no overload overload

(2) = max

38

CAPITOLO 4. GESTIONE DELLOVERLOAD

4.3

DOVER
i Vi .

DOVER . Massimizza A =

Dato (valore ottimo della schedulazione qualora lalgoritmo fosse chiaroveggente), sia max
A

A A

DOVER un algoritmo online ottimo in situazioni di overload, cio DOVER = 0, 25. Come EDF tranne quando un professo jz reggiunge LSTz (last start time), cio il suo tempo rimanente di computazione uguale al tempo rimanente no alla sua deadline. Due set di task privileged : ogni volta che viene fatta preemption su un task questo diventa privilegiato waiting : ogni volta che un task schedulato a causa di un LST tutti i task ready diventano waiting Allistante t = LSTz se z non il processo che EDF schedulerebbe EDF jcurr LST jz si verica la seguente condizione Vz > (1 + k ) (Vcurr + Vpriv )

se soddisfatta eseguo z , metto curr tra i pronti se non ho ancora terminato z e t = LSTx verico la seguente condizione Vx > (1 + se vericata scarto z se non vericata scarto x se non vericata scarto z dove k= V V V = max Vi ci V = min Vi ci k ) Vz

i|i attivo a t

i|i attivo a t

4.3. DOVER Esercizio 4.4

39

Calcolare il fattore di load negli istanti notevoli e riportare la schedulazione dei seguenti processi.

j1

j1 ai ci di Vi 1 3 15 1

j2 6 2 8 1

j3 5 5 10 17

j4 0 3 14 1

j5 3 3 12 1

j2

j3

j4

j5 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 t

(0) =

3 <1 14 5 5 2 , <1 = 14 13 14 6 3 6 , <1 = 12 9 12 9 5 6 , , =1 10 5 7 6 10 2 6 7 , , , = >1 9 2 4 5 4 curr = j2 1 1 17 1 , , , 3 2 5 3 V = 17 5 priv = {j5 } V = min

no overload no overload no overload no overload overload jz = j3 1 1 17 1 , , , 3 2 5 3 V = 1 3

(1) = max (3) = max (5) = max (6) = max

t=6

V = max 3 17 5

k=

17 >

1+

3 17 5

(1 + 1) = 8, 39 vericato

A t = 6 viene eseguito j3 e scartato j2 (in quanto era anche questultimo in LST). Nota. Allistante t = 5 il processo j3 era in LST, ma non stato necessario vericare nessuna condizione in quanto 1. non cera overload 2. il processo j3 era quello che EDF avrebbe mandato in esecuzione

40 Esercizio 4.5

CAPITOLO 4. GESTIONE DELLOVERLOAD

Calcolare il fattore di load negli istanti notevoli e riportare la schedulazione dei seguenti processi.

j1

j1 ai ci di Vi 0 2 3 3

j2 2 3 10 1

j3 4 3 8 2

j4 6 3 9 15

j5 8 2 10 7

j2

j3

j4

j5 1 2 3 4 5 6 7 8 9 10 t

(0) =

2 <1 3 3 (2) = < 1 8 (4) = max 3 4 3 , = <1 6 4 4 5 1 4 , , =2>1 4 2 3 curr = j3 1 2 15 , , 3 3 3 15 3 priv = {j2 }

no overload no overload no overload overload

(6) = max

t=6

jz = j4 1 2 15 , , 3 3 3 1 3

V = max

V = min

k=

3 15 = 15 3 15 > 1 +

V =

V =

15 (2 + 1) = 14, 6 vericato

A t = 6 viene eseguito j4 e j3 inserito tra i processi pronti. t=7 1 2 15 , , 3 3 3 15 3 curr = j4 jx = j3 1 2 15 , , 3 3 3 1 3

V = max

V = min

k=

3 15 = 15 3

V =

V =

4.3. DOVER 2> 1+ 15 15 = 73 non vericato

41

A t = 7 viene eseguito j4 e j3 scartato. (8) = max 4 1 4 , , 2 1 2 =2>1 overload jx = j5 1 15 7 , , 3 3 2 1 3

t=8 1 15 7 , , 3 3 2

curr = j4

V = max

V = min

k=

3 15 = 15 3 7> 1+

V =

15 3

V =

15 15 = 73 non vericato

A t = 8 viene eseguito j4 e j5 scartato.

Parte II

Linguaggio C

42

Capitolo 5

Comunicazione di rete
Un socket , in pratica, lequivalente dellindirizzo di rete di un processo. Stabilire una connessione fra due socket, e quindi dare inizio ad una sessione, signica mettere in condizione di comunicare due processi aacciati sulla rete. In C vi sono diverse funzioni e strutture apposite per la creazione e luso dei socket. Le si possono trovare negli header sys/socket.h, sys/types.h, sys/time.h, unistd.h, netinet/in.h, netdb.h, che vanno inclusi a seconda delle funzioni e strutture che si intende usare. Tutti gli esempi riguardano i protocolli usati da internet (AF_INET). La tipica modalit di utilizzo dei socket la seguente: 1. Creazione del socket 2. Assegnazione indirizzo 3. Connessione/Attesa di una connessione 4. Scambio dati 5. Chiusura socket

int socket (int dominio, int tipo, int protocollo)


Crea un socket e ne restituisce un descrittore. Questultimo pu essere usato anche con le funzioni relative ai le. (la variabile errno contiene il codice derrore appropriato). Se il valore del descrittore pari a 1, allora la creazione del socket non andata a buon ne

Il parametro dominio indica la famiglia di protocolli da usare. Tre delle possibili famiglie sono AF_UNIX (protocolli interni di Unix), AF_ISO (protocolli ISO) e AF_INET (protocolli usati da internet). In <sys/socket.h> sono deniti anche gli altri. In tipo, come dice lo stesso nome del parametro, viene indicato il tipo di comunicazione, cio in che modo debbano essere scambiati i dati. Pu assumere diversi valori fra cui SOCK_STREAM (connessione permanente e bidirezionale basata su un usso di byte: i dati vengono mantenuti in 43

44

CAPITOLO 5. COMUNICAZIONE DI RETE

ordine e non sono persi o duplicati) e SOCK_DGRAM (scambio di datagram, ovvero pacchetti di byte di lunghezza massima ssata, non adabile al 100% perch la connessione non continua e quindi i pacchetti stessi possono essere duplicati e/o non arrivare in ordine). Inne, il protocollo, indica il particolare protocollo da usare con il socket. Normalmente assume valore nullo (0), cio il protocollo usato quello di default per la combinazione di dominio e tipo specicata con gli altri due parametri. Per utilizzare, invece, un protocollo ben preciso, si pu guardare il le /etc/protocols contenente i numeri associati ai tipi di protocolli possibili. Il valore restituito, come gi detto, il descrittore del socket. Questo valore va conservato perch serve per ogni riferimento al socket creato. Il socket creato bloccante per default. Un socket bloccante quando, a seguito di una chiamata alla funzione di attesa per una connessione, blocca il thread in cui stata creata, no allarrivo di una richiesta di connessione. Per capire meglio il signicato, si pensi ad un ciclo while in cui allinterno vi una attesa per una connessione. Con un socket bloccante, il ciclo non continuer e si bloccher no allarrivo di una richiesta di connessione. Con un socket non bloccante, invece, non si ha una attesa indenita. Se al momento della verica, non presente alcuna richiesta di connessione, allora il thread continuer con la propria esecuzione, senza bloccarsi. Il modo di rendere un socket non bloccante il seguente (si assume che il descrittore del socket sia nella variabile intera con nome sock): eventuale_errore = fcntl (sock, F_SETFL, 0, NONBLOCK);

int bind (int descrittore_socket, struct sockaddr indirizzo, int lunghezza_record_indirizzo)


bind assegna un indirizzo al socket. In caso di errore viene restituito il valore 1 (la variabile errno conterr il codice derrore appropriato). Vediamo come fatta la struttura sockaddr: struct sockaddr { unsigned short int sa_family; // Famiglia degli indirizzi. char sa_data[14]; // Dati dellindirizzo. }; Sia la struttura che i valori che pu assumere sa_family, si trovano nel le bits/socket.h, incluso in sys/socket.h. Fra le famiglie possibili ci sono AF_UNSPEC, AF_FILE, AF_INET (internet), AF_UNIX. Il contenuto del campo sa_data dipende dalla particolare famiglia di indirizzi usata. Nel caso di AF_INET, si avr la struttura sockaddr_in, denita in netinet/in.h (che quindi andr

45 incluso) ed equivalente, per mezzo di una conversione esplicita di formato, alla precedente:

struct in_addr { unsigned int s_addr; };

struct sockaddr_in { unsigned short int sin_family; // Famiglia degli indirizzi. unsigned short int sin_port; // Numero della porta (16 bit). struct in_addr sin_addr; // Indirizzi internet. // Campo per adattare la dimensione di sockaddr_in a quella della struttura // sockaddr. unsigned char sin_zero[sizeof (struct sockaddr) sizeof (unsigned short int) sizeof (unsigned short int) sizeof (struct in_addr)]; };

La famiglia degli indirizzi AF_INET. Per quel che riguarda la porta da usare, bisogna fare attenzione al fatto che lordine dei bit usato in internet diverso da quello usato normalmente dal computer. Quindi bisogna convertire il numero della porta voluto e poi assegnarlo al campo sin_port. La funzione che consente questa conversione htons. Fra gli indirizzi internet utilizzabili nel campo sin_addr (deniti in netinet/in.h) ci sono INADDR_ANY (vengono accettati dati da qualunque parte vengano), INADDR_BROADCAST (per mandare dati a tutti gli host), INADDR_LOOPBACK (loopback sullhost locale). Un tipico modo di usare la struttura sockaddr_in il seguente:

//... int eventuale_errore; int sock; struct sockaddr_in temp; sock = socket (AF_INET, SOCK_STREAM, 0); //Creazione del socket. temp.sin_family = AF_INET; temp.sin_addr.s_addr = INADDR_ANY; temp.sin_port = htons (123); //Numero casuale. eventuale_errore = bind (sock, (struct sockaddr ) &temp, sizeof (temp)); //...

46

CAPITOLO 5. COMUNICAZIONE DI RETE

int close (int descrittore_socket)


close consente di chiudere la comunicazione sul socket passato in descrittore_socket. Ovviamente, la funzione close deve essere chiamata su entrambi i socket in comunicazione. Se uno venisse chiuso e laltro no, e quello aperto cercasse di mandare dati a seguito della funzione write (o di altre funzioni), si otterrebbe un errore. Se il risultato della chiamata a close fosse 1, allora si sarebbe in presenza di un errore.

int shutdown (int descrittore_socket, int modalita_chiusura)


La funzione shutdown causa la chiusura totale o solo parziale di una connessione full-duplex (bidirezionale) sul socket associato al descrittore. La modalit di chiusura pu assumere tre valori. Se vale 0, allora il socket indicato non potr pi ricevere dati. Con il valore 1, il socket non potr pi spedire messaggi. In ne, con il valore 2, il socket non potr pi ricevere messaggi e neanche mandarne. Se loperazione non va a buon ne, il risultato della chiamata a questa funzione 1.

int connect (int descrittore_socket, struct sockaddr indirizzo_server, int lunghezza_record_indirizzo)


La funzione connect cerca (solo se SOCK_STREAM) di eettuare la connessione fra il socket passato come parametro con il socket in ascolto allindirizzo specicato. Per spiegarne luso, un esempio pi ecace: #include <netdb.h> //... struct sockaddr_in temp; struct hostent indirizzo_host; int eventuale_errore; int sock; //... //Tipo di indirizzo. temp.sin_family = AF_INET; //Porta dascolto sul server a cui ci si vuole connettere. temp.sin_port = htons (321); //Numero casuale. //gethostbyname restituisce una struttura di tipo hostent in cui mette //lindirizzo IP. Riceve in ingresso il nome dellhost che puo essere //un nome, in indirizzo IPv4 o un indirizzo IPv6. //Nel caso di IPv4 o IPv6, il campo indirizzo_host->h_addr contiene il nome stesso. indirizzo_host = gethostbyname (nome.inventato.it ); //Se hp contiene il puntatore nullo, allora la chiamata a gethostbyname fallita.

47 if (indirizzo_host == 0) { printf(Gethostbyname fallito \n); if (h_errno == HOST_NOT_FOUND) printf(host not found \n);

if (h_errno == NO_ADDRESS) printf(name is valid but no has IP address \n); exit(1);

if (h_errno == NO_RECOVERY) printf(non recoverable name server error occurred \n); } //Copio lindirizzo nella struttura di tipo sockaddr_in, nel campo relativo //allindirizzo. bcopy (indirizzo_host->h_addr, &temp.sin_addr, indirizzo_host->h_length); //Connessione del socket eventuale_errore = connect (sock, (struct sockaddr ) &temp, sizeof(temp));

int listen (int descrittore_socket, int dimensione_coda)


Mentre il socket in ascolto, pu ricevere delle richieste di connessione. Mentre viene servita una di queste richieste, ne possono arrivare altre. Il procedimento adottato per tenere conto di questo fatto, di mettere le richieste in una coda di attesa. Listen si occupa di denire la dimensione massima di questa coda (dimensione_coda). La funzione Listen si applica solo ai socket di tipo SOCK_STREAM o SOCK_SEQPACKET. Come al solito, se il valore restituito e 1, allora vi stato un errore.

int accept (int descrittore_socket, struct sockaddr indirizzo, int lunghezza_record_indirizzo)


Ha il compito di accettare una connessione. Una volta che un socket stato creato (socket), collegato (bind) e messo in ascolto (listen), accept prende la prima connessione disponibile sulla coda delle connessioni pendenti, crea un nuovo socket con le stesse propriet di quello rappresentato da descrittore_socket e restituisce un nuovo descrittore. La connessione pu, allora, essere gestita con questo nuovo socket. Mediante un fork sul processo che gestisce la connessione, possibile servire la connessione accettata, aspettando contemporaneamente altre connessioni (e servendole se sono gi nella coda). In indirizzo vengono messi i dati relativi al socket che ha richiesto la connessione. Se non ci sono connessioni presenti nella coda, allora, il comportamento di default (per default i socket sono bloccanti) prevede che il processo venga bloccato no allarrivo di una nuova. possibile rendere il socket non bloccante per modicare il comportamento di default di accept. Seguendo il metodo gi indicato, si forza accept a vericare la presenza di una connessione ed a sbloccare immediatamente il processo, anche in assenza di connessioni pendenti. Come sempre, in caso di errore, accept restituisce il valore 1 e la variabile errno ne contiene il codice.

48

CAPITOLO 5. COMUNICAZIONE DI RETE

int send (int descrittore_socket, const void buffer, int lunghezza_messaggio, unsigned int opzioni)
Con send possibile inviare messaggi dal socket rappresentato da descrittore al socket con cui connesso. Questa funzione pu essere usata solamente in presenza di una connessione. Il parametro buffer contiene il messaggio e deve avere una dimensione non inferione a lunghezza_messaggio (cio alla dimensione del messaggio da spedire). opzioni pu essere posto a 0. In caso di errore, la funzione send restituisce il valore 1, altrimenti restituisce 0.

int recv (int descrittore_socket, const void buffer, int dimensione_buffer, unsigned int opzioni)
Serve a ricevere messaggi da un socket e pu essere usato solamente in presenza di una connessione. Il risultato della chiamata a questa funzione, in caso di errore, 1, altrimenti il numero di caratteri ricevuti. Il messaggio ottenuto contenuto nella memoria puntata da buffer. Il parametro dimensione_buffer non altro che la dimensione del buer. opzioni pu essere posto a 0. Se non presente alcun messaggio in arrivo, ed il socket bloccante (vedi Il modo di rendere un socket non bloccante), allora recv attende no allarrivo di un messaggio. Esistono, comunque, altre due funzioni simili a recv: sono recvfrom e recvmsg.

int getsockname (int descrittore_socket,struct sockaddr indirizzo, int lunghezza_record_indirizzo)


Permette di ottenere tramite indirizzo le informazioni sullindirizzo locale del socket. Cio restituisce il record contenente, ad esempio nel caso di sockaddr_in, la famiglia di indirizzi, il numero della porta, gli indirizzi internet con cui il socket interagisce. Il parametro lunghezza_record_indirizzo deve puntare alla dimensione della struttura sockaddr. In uscita conterr un puntatore alla dimensione di tale struttura. La struttura sockaddr descritta con la funzione bind. Vediamo un esempio di utilizzo di getsockname. //... int eventuale_errore; int sock; struct sockaddr_in temp; int dim = sizeof (temp); //... eventuale_errore = getsockname (sock, (struct sockaddr ) &temp, &dim); In caso di insuccesso, viene restituito il valore 1, altrimenti lo zero.

49 //In temp ci sono le informazioni sul protocollo, porta e indirizzi //...

unsigned short int htons (unsigned short int valore)


Su internet i numeri sono rappresentati con un ordine diverso di bit rispetto a quello dellelaboratore. Questa funzione si occupa della conversione al formato internet per numeri di tipo unsigned short int.

unsigned long int htonl (unsigned long int valore)


Su internet i numeri sono rappresentati con un ordine diverso di bit rispetto a quello dellelaboratore. Questa funzione si occupa della conversione al formato internet per numeri di tipo unsigned short int.

unsigned short int ntohs (unsigned short int valore)


Su internet i numeri sono rappresentati con un ordine diverso di bit rispetto a quello dellelaboratore. Questa funzione si occupa della conversione dal formato internet per numeri di tipo unsigned short int.

unsigned long int ntohl (unsigned long int valore)


Su internet i numeri sono rappresentati con un ordine diverso di bit rispetto a quello dellelaboratore. Questa funzione si occupa della conversione dal formato internet per numeri di tipo unsigned short int.

Capitolo 6

Programmazione parallela
Una fork in programmazione la modalit attraverso cui un processo crea in memoria una copia di s stesso: la copia prender il nome di processo glio, mentre il processo originale verr chiamato processo padre. Pi in generale, una fork in un ambiente multithreading signica che un thread di esecuzione stato duplicato. Nei sistemi operativi UNIX e Unix-like il processo padre ed il processo glio possono scegliere le istruzioni da eseguire tramite il valore di ritorno della chiamata di sistema fork(). Il valore di ritorno della chiamata fork() vale 0 nel processo glio, un numero maggiore di 0 nel processo padre (il valore restituito proprio il PID del glio) o un valore minore di 0 nel caso in cui non sia stato possibile creare un nuovo processo (ad esempio per un eccessivo numero di processi attualmente attivi). Quando un processo eettua la chiamata fork() verr creato un nuovo spazio di indirizzamento. Comunque, con tecniche di copy-on-write non verr occupata memoria sica no al momento in cui uno dei due processi non eettuer una scrittura. Il processo glio avr una copia esatta di tutti i segmenti di memoria del processo padre. Sia il processo padre che il glio possono proseguire la loro esecuzione indipendentemente luno dallaltro.

pid_t fork (void)


Descrizione La funzione fork() crea un processo glio che dierisce dal genitore solamente per il suo PID (Process IDentier) e PPID (Parent Process ID). Non sono ereditati i lock sui les, mentre la ricezione dei segnali provoca i comportamenti standard. Valore di ritorno La funzione fork() ritorna in caso di successo: nel thread del padre, il PID del glio nel thread del glio, 0 50

51 Se la funzione fork() fallisce, ritorna 1 e non viene generato nessun processo glio. In questa situazione la variabile errno settata con il codice di errore appropriato. Esempio #include <unistd.h> //... pid_t pid; //... pid = fork(); if (pid < 0) { //gestione errore } else if (pid == 0) { //processo figlio } else { /* processo padre. * la variabile pid contiene il pid del processo figlio */ } //...

void exit (int status)


Descrizione La funzione exit() eettua il termine normale del programma, ritornando il valore di status al parent. Quindi la funzione exit() esegue in sequenza le seguenti operazioni: 1. tutte le funzioni registrate con le funzioni atexit() e on_exit() sono chiamate nellordine inverso alla loro registrazione; 2. tutti gli stream aperti vengono scaricati tramite la funzione della libreria standard fflush(); 3. tutti gli stream aperti (compresi stdin, stdout e stderr) vengono chiusi impiegando le funzioni della libreria standard; 4. viene chiamata la funzione _exit(). Valore di ritorno La funzione exit() non ritorna. Termina lesecuzione del processo.

52

CAPITOLO 6. PROGRAMMAZIONE PARALLELA

pid_t wait (int status) pid_t waitpid (pid_t pid, int status, int options)
Descrizione La funzione wait() sospende il processo corrente nch un glio (child) termina o nch il processo corrente riceve un segnale di terminazione o un segnale che sia gestito da una funzione. Quando un child termina il processo, senza che il parent abbia atteso la sua terminazione attraverso la funzione di wait(), allora il child assume lo stato di zombie ossia di processo defunto. Se il processo corrente esegue la funzione di wait(), mentre ci sono uno o pi child in stato di zombie, allora la funzione ritorna immediatamente e ciascuna risorsa del child viene liberata. La funzione waitpid() sospende il processo corrente nch il glio (child) corrispondente al pid passato in argomento termina o nch il processo corrente riceve un segnale di terminazione o un segnale che sia gestito da una funzione. Se il processo corrente esegue la funzione di waitpid() e il child identicato dal pid in stato di zombie, allora la funzione ritorna immediatamente e ciascuna risorsa del child viene liberata. Il valore del pid pu essere uno dei seguenti: < 1: la funzione attende ciascun child avente il process group ID uguale al valore assoluto del pid; 1: la funzione attende ciascun child analogamente alla funzione wait(); 0: la funzione attende ciascun child avente il process group ID uguale a quello del processo corrente; > 0: la funzione attende il child avente il process ID corrispondente al valore del pid. Se status non NULL, le funzioni wait() e waitpid() memorizzano linformazione dello stato nellarea di memoria puntata da questo argomento. Il paramentro options pu valere zero o pu essere in OR con i seguenti valori costanti: WNOHANG specica il ritorno immediato se i child non sono usciti; WUNTRACED specica di ritornare anche se i child sono fermati (stop), e lo stato non deve venire riportato.

Valore di ritorno In caso di successo le funzioni wait() e waitpid() ritornano il process ID del child che termina. Tornano 1 in caso di errore e errno viene settato in modo appropriato. waitpid() torna 0 se stato impiegato WNOHANG e non ci sono gli che hanno terminato.

53

int execl (const char pathname, const char arg, ...) int execlp (const char pathname, const char arg, ...) int execle (const char pathname, const char arg, ..., char const envp[]) int execv (const char pathname, char const argv[]) int execvp (const char pathname, char const argv[])

Descrizione Le funzioni execl(), execlp(), execle(), execvl(), execvp() sostituiscono il processo corrente con un nuovo processo. In realt le funzioni sono una interfaccia per la funzione execve() a cui si rimanda per ulteriori approfondimenti. pathname un programma eseguibile (binario) o uno script che dovr sostituire il processo corrente. Nel nome della funzione chiamata sono contenuti dei caratteri che indicano sia il tipo di argomenti accettati e sia il tipo di comportamento dalla funzione stessa. l La funzione accetta una lista di argomenti. Il primo argomento convenzionalmente il nome del programma che verr eseguito. Allultimo argomento valido deve seguire un puntatore a NULL. v La funzione accetta un vettore di argomenti. Il primo elemento (argv[0]) deve contenere il nome del programma da invocare. Lultimo argomento valido deve essere seguito da un elemento contenente un puntatore a NULL. e La funzione accetta fra i suoi parametri un array di stringhe dellambiente (environment) che deve essere passato al pathname da eseguire. Ogni stringa di ambiente del formato parametro = valore (p.e. TERM = vt100). Larray envp[] terminato da un elemento a NULL. Le funzioni con il nome non comprendenti la lettera e, fanno ereditare lambiente del processo attuale il quale contenuto nella variabile esterna environ, al programma individuato da pathname. p In questo caso, se il pathname non contiene il carattere slash /, pathname viene ricercato in base alla variabile di ambiente PATH. Se la variabile PATH non specicata, pathname viene per default ricercato nelle directory /bin e /usr/bin. Valore di ritorno Le funzioni execl(), execlp(), execle(), execvl(), execvp() se hanno successo non eettuano ritorno al chiamante. In caso contrario il valore 1 viene tornato e la variabile errno viene settata con il valore appropriato.

Parte III

Statecharts

54

Capitolo 7

Statecharts
7.1 Linguaggio

Statecharts un linguaggio semiformale di modellazione.

7.1.1

Simboli

Stato
N ome_stato

Stati concorrenti
Stato_1 Stato_2

Posso trovarmi contemporaneamente in Stato_1 e Stato_2 Transizione tra stati


Stato_1 Clausola Stato_2

La clausa una formula logica con operatori , , e con letterali di due tipi: Evento Condizione sugli stati: In(Stato ), dove lo Stato deve essere concorrente rispetto alla posizione di Clausola

55

56 Gerarchia di stati
Stato_padre Stato_f iglio_1 Stato_f iglio_2

CAPITOLO 7. STATECHARTS

Stato di storia
N ome_stato

Quando ritorno nello stato riprendo dallultimo stato glio in cui mi trovavo. Stato iniziale
N ome_stato

Evento Evento_1

7.2

Esercizi (tratti da temi desame)

Esercizio 7.1 (9 punti) Specicare mediante il formalismo degli statecharts il seguente problema senza utilizzare variabili. Si ha un ascensore che pu muoversi attraverso quattro piani numerati da 0 (piano terra) a 3. Lascensore pu essere fermo oppure in movimento. Qualora sia fermo, la porta pu essere aperta oppure chiusa. Qualora lascensore sia in movimento, si pu trovare in uno dei quattro piani (considerare il tempo di transizione da un piano a un altro trascurabile dal punto di vista della specica e non specicare lo stato della porta durante il movimento, in quanto viene assunto chiuso). Il controllo dellascensore basato sullutilizzo di due pulsanti set e start dove, in linea di principio, il pulsante set permette di selezionare il piano a cui si vuole andare e il pulsante start permette di far partire lascensore. Il pulsante set permette di selezionare, solo qualora lascensore sia fermo e la porta sia chiusa, il piano desiderato incrementando questo di 1. Ad esempio, premendo set con la porta chiusa e lascensore fermo quando il piano selezionato il piano 1, si seleziona il piano 2. Inoltre, la selezione ciclica: schiacciando set quando il piano selezionato il piano 3 si seleziona il piano 0. Esiste una selezione iniziale del piano data di default (scelta dallo studente) e la selezione non viene a cancellarsi a fronte di eventi quali lapertura o la chiusura delle porte o start. Premendo il pulsante start con la porta chiusa lascensore va in movimento. Qualora lascensore abbia raggiunto il piano selezionato, lascensore diventa fermo.

7.2. ESERCIZI (TRATTI DA TEMI DESAME)

57

Qualora il piano selezionato sia il piano in cui lascensore si trova, lascensore va in movimento e si ferma subito. Gli unici eventi conosciuti dal sistema sono: apri_porta, chiudi_porta, set, start. Gli stati di default possono essere assegnati liberamente purch consistenti. (Consiglio: si risolva lesercizio in modo incrementale, prima con soli 3 piani e poi lo si estenda al caso in cui i piani siano 4.) Esercizio 7.2 (9 punti) Specicare mediante il formalismo degli statecharts senza utilizzare variabili il problema di coordinare due robot pulitori (R1 e R2) per lavare il pavimento di una stanza (S). Viene fornito il funzionamento di ogni robot quando questo lava la stanza da solo, e si richiede di modicare tale funzionamento al ne di permettere ai due robot di lavare il pavimento in modo coordinato. Il funzionamento di ogni robot, quando lava da solo la stanza, il seguente: si attiva dal magazzino a fronte dellevento start, entra allinterno della stanza, lava la stanza e quando la stanza completamente pulita torna nel magazzino. Il criterio con cui il robot lava la stanza il seguente: la stanza (S) viene divisa in quattro aree (A1-A2-A3-A4) contigue e le aree vengono lavate in successione una dopo laltra (le stanze vengono lavate o nellordine A1-A2-A3-A4 o nellordine A4-A3-A2-A1). Il passaggio del robot da unarea alla successiva basato sullevento pulito: questo viene generato ogni qual volta larea che il robot sta lavando diventi pulita. In sintesi, il robot pulisce unarea nch non si presentato levento pulito, e, appena si presenta tale evento, il robot si ferma e si sposta nellarea da pulire successiva (qualora si trovi nellultima area, il robot si sposta in magazzino). Le aree possono essere sporche in vario modo richiedendo cos tempi diversi per poter essere pulite. Si specichi il funzionamento coordinato dei due robot in modo tale che: R1 e R2 agiscano contemporaneamente, R1 inizi a lavare la stanza S partendo dallarea A1 e si muova verso larea A4, R2 inizi a lavare la stanza S partendo dallarea A4 e si muova verso larea A1, tutte le aree vengano lavate una sola volta, non siano mai presenti due robot nella stessa area contemporaneamente, i tempi di passaggio dei robot tra due aree contigue e tra una generica area e il magazzino siano trascurabili ai ni della specica. (Suggerimento: si specichi prima il funzionamento dei robot quando lavano la stanza singolarmente, e poi quando lavano la stanza in modo coordinato.)

58 Esercizio 7.3 (9 punti)

CAPITOLO 7. STATECHARTS

Specicare mediante il formalismo degli statecharts senza utilizzare variabili il seguente problema. Si ha un sistema di log-in munito di un video, una tastiera e un mouse. A video viene proiettata una schermata costituita da un campo nome, un campo password, e un pulsante di OK. Lutente pu inserire i propri dati (nome, password) premere il pulsante di Ok, e il sistema verica la correttezza dei dati inseriti per regolarne laccesso. Il sistema pu trovarsi o in uno stato in cui il campo nome attivo (nome_attivo), oppure il campo password attivo (pw_attivo), oppure in uno stato (controllo) in cui il sistema verica la correttezza dei dati immessi, oppure, ancora, in un insieme di stati, descritti sotto, in cui vengono segnalati degli avvisi allutente. Allavvio lo stato di default nome_attivo. Tramite il mouse poi possibile: qualora sia attivo il campo password, attivare il campo nome (evento click_nome), qualora sia attivo il campo nome, attivare il campo password (evento click_pw), premere il pulsante di OK (evento click_ok). Solo nel campo correntemente attivato possibile inserire caratteri. Allavvio del sistema i campi sono vuoti (per ogni campo esiste lo stato vuoto) e, a fronte dellinserimento di caratteri (evento usso_di_caratteri), il campo selezionato diventa non vuoto (non_vuoto). Premendo il pulsante di Ok possibile: qualora sia il campo nome che il campo password siano vuoti, il sistema mostra unavviso (avviso_dati_mancanti) e attiva lultimo stato attivo prima di aver premuto OK, qualora uno tra il campo nome e il campo password non sia vuoto, il sistema mostra unavviso (avviso_nome_mancante oppure avviso_pw_mancante) e attiva lo stato relativo al campo mancante, qualora sia il campo nome che il campo password siano non vuoti, il sistema controlla i dati, e genera un evento true se i dati sono corretti e false se i dati sono scorretti. A fronte di true mostra un avviso di login (avviso_login), a fronte di un false mostra unavviso (avviso_dati_sbagliati) e attiva lultimo stato attivo prima di aver premuto OK. Esercizio 7.4 (10 punti) Formalizzare attraverso gli Statecharts il seguente problema. Si ha una catena di montaggio costituita da tre robot, ognuno dei quali dedicato ad un pezzo di uno specico tipo, ma cooperanti nellassemblaggio del prodotto nale. Ogni robot collegato a sua volta a un macchinario che porta, tramite un sistema a nastro, i singoli pezzi al robot. Lobiettivo coordinare i tre robot nellassemblaggio del pezzo. Ogni robot i-esimo schematizzabile considerando il suo stato (attendi_pezzo, prendi_pezzo, impila_pezzo) e lo stato del tipo di pezzo i-esimo portato dal sistema

7.2. ESERCIZI (TRATTI DA TEMI DESAME)

59

a nastro al robot i-esimo (pezzo_presente, pezzo_mancante). Ogni volta che arriva un pezzo per il robot i- esimo, viene generato levento pezzo-i e lo stato del relativo tipo di pezzo passa da pezzo_mancante a pezzo_presente (il sistema fatto in modo tale che un pezzo pu arrivare solo se nessun pezzo di quel tipo presente). Se il tipo di pezzo i-esimo presente, allora il robot i-esimo pu prenderlo, e conseguentemente il tipo di pezzo i-esimo diventa mancante. I pezzi dei tre robot devono essere impilati in un particolare ordine per poter assemblare il prodotto nale. Nello specico, deve prima essere impilato il pezzo1, poi il pezzo2, e, inne, il pezzo3. Per poter coordinare in modo eciente i tre robot, si consiglia di schematizzare il prodotto in vari stati, ad esempio (vuoto, se nessun pezzo stato impilato, primo, se il pezzo1 stato impilato, secondo, se il pezzo2 stato impilato, e terzo, qualora tutti i pezzi siano stati impilati). Esercizio 7.5 (10 punti) Sia data la formalizzazione basata su Statecharts riportata in gura dove si descrive la coordinazione tra due robot pulitori (R1 e R2). Nello specico: ci sono due robot uguali che alloggiano in un magazzino e che devono periodicamente pulire una stanza S. La stanza divisa, ai ne del lavaggio, in quattro aeree (A1-A4) e i robot sono coordinati in modo tale che il robot R1 inizia a pulire la stanza a partire dallarea A1 e prosegue scendendo (rispetto alla gura) verso larea A4 e il robot R2 inizia dallarea A2 e prosegue verso larea A1. Gli unici eventi che i robot riconoscono sono start e pulito (generato quando larea che il robot sta pulendo diventata pulita). La coordinazione tale che nessuna area che stata pulita viene pulita nuovamente e che non ci possono essere due robot nella stessa area.

60

CAPITOLO 7. STATECHARTS

Si pone il problema che R1 ha un guasto al serbatoio dacqua e non pu immagazzinare la quantit dacqua necessaria per pulire (si assume che la quantit immagazzinata dal serbatoio pu non essere suciente neanche per pulire una singola area). Cos R1 deve, quando necessario (cio appena si presenta levento acqua_sporca), andare a cambiare lacqua (in una stanza denominata L). Durante il cambio dellacqua, R1 si accorger che lacqua pulita in quanto viene a generarsi levento acqua_pulita. E permesso a R2, al ne di ridurre il tempo di lavaggio della stanza, di andare a pulire unarea che R1 ha cominciato a pulire, ma che non ha concluso di pulire in quanto dovuto andare a cambiare lacqua. Cos, una volta che lacqua stata cambiata, R1 torner a pulire larea che stava pulendo al momento in cui si generato levento acqua_sporca oppure, qualora in quellarea sia presente R2, torner in magazzino. Si consiglia di tenere traccia dello stato di R1 prima di andare in L, usando uno stato concorrente con stati: A1, A2, A3, M. Formalizzare tale problema modicando la gura sopra aggiungendo gli stati necessari e modicando le condizioni di transizione. Esercizio 7.6 (10 punti) Si vuole specicare tramite il formalismo degli Statechart senza lutilizzo di variabili la trasmissione di pacchetti TCP su rete da parte un singolo host. Il mezzo trasmissivo costituito da un trasmettitore T che pu essere in attesa (W - waiting) oppure in invio (S - sending). Il trasmettitore pu trasmettere un solo pacchetto per volta e, qualora la trasmissione del singolo pacchetto si concluda, viene generato un evento sent. Il mezzo trasmissivo viene utilizzato con mutua esclusivit da alcune code a priorit (Q queue) il cui obiettivo gestire linvio di un pacchetto: recuperare il pacchetto, inviarlo al mezzo trasmissivo, aspettare il messaggio che confermi la corretta consegna del pacchetto e, qualora non arrivi tale messaggio, rinviare il pacchetto. In gura fornito lo statechart che specica la situazione in cui sia presente una sola coda Q1 e la rete sia adabile. La coda si pu trovare: in attesa dellarrivo di un pacchetto (WP waiting for a packet), in attesa di accedere al mezzo trasmissivo (WS waiting for sending), in invio (S - sending) e in attesa del messaggio di corretta consegna del pacchetto (WA waiting for acknoledgment). Ogni volta che almeno una coda (in questo caso solo Q1) in WP ed presente un pacchetto da inviare, viene generato un evento packet che viene comunicato a tutte le code. Nel caso ci sia una sola coda, il pacchetto viene automaticamente assegnato a Q1 e quindi questa transisce da WP a WS. Una volta in WS, la coda Q1 transisce in S qualora il mezzo trasmissivo sia disponile, cio quando in W. Una volta terminata la trasmissione il mezzo trasmissivo ritorna nello stato W e conseguentemente la coda transisce in WA. A fronte dellevento ack1 la coda transisce da WA a WP. Si richiede di estendere lo statechart dato per cogliere due aspetti: 1. la possibilit che un pacchetto non venga consegnato correttamente e venga quindi ritrasmesso e 2. la presenza di due code concorrenti.

7.2. ESERCIZI (TRATTI DA TEMI DESAME)

61

1. Una volta inviato un pacchetto tramite la coda Q1 e non si abbia ricevuto il messaggio di conferma entro una scadenza pressata, viene generato un evento timeout1. A fronte di timeout1 il pacchetto viene ritrasmesso. Il numero massimo di ritrasmissioni 2, dopodich la coda gestisce un altro pacchetto. Si utilizzi uno stato contatore C1 per tenere traccia del numero di trasmissioni di un pacchetto. 2. Si introduca una nuova coda Q2. Le due code funzionano in modo analogo in parallelo. Viene per data precedenza a Q1: se disponile un pacchetto ed entrambe le code lo possono gestire viene preferita la coda Q1; analogamente se entrambe le due code sono in attesa di accedere al mezzo trasmissivo viene preferita la coda Q1. Esercizio 7.7 (10 punti) Si vuole specicare tramite il formalismo degli Statecharts il meccanismo con cui la tecnologia Ethernet gestisce laccesso al mezzo trasmissivo. Si considerino tre host (denotati con H1, H2, H3) e il mezzo trasmissivo (denotato con medium). Gli host possono essere in attesa dellarrivo di pacchetti (stato WP), in trasmissione sul mezzo per poter avere laccesso (stato MA), in attesa di poter ritentare laccesso al mezzo trasmissivo (W) e in trasmissione dei dati sul mezzo trasmissivo (PT). Per descrive il funzionamento dellhost si utilizza inoltre una coda di pacchetti capace di contenere al massimo tre pacchetti. Il mezzo trasmissivo pu essere in uso da una coppia di host (blocked) o libero (free). Una volta che arriva un pacchetto, questo entra in coda: levento che segnala larrivo del pacchetto incomingHi, dove i indica il numero dellhost. Qualora c almeno un pacchetto in coda, lhost passa da WP a MA, nel tentativo di accedere al mezzo trasmissivo. Qualora il mezzo trasmissivo sia libero lhost prende possesso di questo e trasmette (quindi passa a PT). Qualora invece il mezzo trasmissivo sia occupato lhost passa a W. La transizione da W a MA attivata a fronte di un evento timeoutHi. Una volta cominciata la trasmissione del pacchetto, questo viene tolto dalla coda. Finita la trasmissione (evento sentHi) lo stato dellhost pu passare

62

CAPITOLO 7. STATECHARTS

in MA qualora ci siano altri pacchetti in coda, oppure in WP qualora non ci siano pacchetti in coda. Il mezzo trasmissivo transisce da free a blocked quando almeno un host passa a PT e da blocked a free quando nessun host in PT. Riportare lo statechart di un generico host i e del mezzo trasmissivo. Esercizio 7.8 (10 punti) Si vuole specicare tramite il formalismo degli Statecharts, e senza lutilizzo di variabili, il funzionamento di una macchina distributrice di merendine. La macchina contiene due tipi di merendine: merendina1 e merendina2. Per ogni tipo di merendina la macchina contiene al massimo 2 merendine. Il numero di merendine scende ogni volta che una merendina viene comprata (si veda sotto per le condizioni da considerare) e ritorna al massimo ogni volta che viene ricaricata (evento ricarica). Inizialmente si suppone che il numero di merendine sia pari al massimo. Ogni utente munito di una chiave magnetica contenente il proprio credito. La chiave pu essere inserita (stato inserita) o non inserita (stato non_inserita) nella macchina distributrice. Nella chiave presente il credito. Questo pu essere al massimo di 5 euro e scende ogni qual volta si compra una merendina del costo della merendina comprata (si veda sotto per le condizioni da considerare) e sale di un euro ogni qualvolta la chiave inserita e si verica levento 1euro. La macchina distributrice pu essere in tre soli stati: attesa, merendina1, merendina2. In attesa attende che lutente scelga la merendina da comprare. In merendina1 la macchina fa prendere allutente una merendina1. La transizione da attesa a merendina1 possibile se: la chiave inserita, lutente ha premuto il pulsante 1 (evento pulsante1), esiste almeno una merendina1 nella macchina e nella chiave presente un credito suciente per acquistare la merendina1. La merendina1 ha un costo pari a 2 euro. La transizione da merendina1 ad attesa avviene in automatico. In modo analogo vengono gestite le transizioni tra attesa e merendina2, in questo caso per il costo di una merendina2 di 1 euro. Esercizio 7.9 (10 punti) Si vuole specicare tramite il formalismo degli Statecharts, e senza lutilizzo di variabili, il funzionamento di un forno a microonde. Il forno pu essere aperto o chiuso (gli eventi apri e chiudi regolano le corrispettive transizioni). Quando chiuso, il forno pu essere: in funzione, non in funzione, oppure pu trovarsi in uno stato (beep) in cui allerta lutente del forno emettendo un suono. Il sistema di controllo del forno si basa principalmente sulla selezione del programma e sul timer. I pulsanti utilizzabili dallutente sono: start, reset e set. La particolarit del sistema di controllo che, una volta selezionato un programma di cottura e fatto partire il forno, il programma non pu essere cambiato se non tramite il pulsante reset (ciononostante la cottura pu essere sospesa aprendo il forno). Ci sono due possibili programmi (4 e 8) e un programma ttizio (0) che identica il fatto che non stato selezionato alcun programma. Il nome del programma fa riferimento alla durata della cottura, ad esempio col programma 4 la cottura dura 4 minuti. E possibile selezionare

7.2. ESERCIZI (TRATTI DA TEMI DESAME)

63

un programma tramite luso del pulsante set solo se il forno non in funzione, chiuso, e non ci sono programmi di cottura da terminare. Luso del pulsate set ciclico: se premuto una volta permette di selezionare il programma 4, se premuto una seconda volta permette di selezionare il programma 8, se premuta unaltra volta il programma 0, e cos via. Premendo il pulsante start, qualora sia stato impostato un programma diverso da 0, il forno va in funzione. Per poter gestire una cottura si modellizzi il timer: pu essere spento oppure in uno stato da 0 a 8 (si considerino solo i pari). La transizione da 0 a spento automatica; le transizioni da 8 a 6, da 6 a 4, e cos via sono regolate da un evento timer (questo evento si attiva automaticamente ogni 2 minuti di cottura eettiva). Una volta selezionato un programma e attivato il forno, il timer passa da spento allo stato corrispondente al programma. Via via che passa il tempo (evento timer) lo stato del timer viene aggiornato. Si vuole che a met cottura e a ne cottura il forno passi dallo stato in funzione allo stato beep e successivamente allo stato non in funzione (questa ultima transizione avviene in automatico). La sospensione a met cottura ha la nalit di permettere allutente di girare lalimento da cuocere. Inne, se premuto il tasto reset, indipendentemente dallo stato in cui si trova il forno, tutte le funzionalit del forno vengono azzerate. Esercizio 7.10 (10 punti) Si vuole specicare tramite il formalismo degli Statecharts, e senza lutilizzo di variabili, luso di due risorse (A e B) da parte di due processi periodici (1 e 2). Un generico processo i pu trovarsi nello stato di ready, execution o wait, in questultimo si riconoscono due sottostati: waitingA e waitingB (corrispondenti allattesa della risorsa A e B rispettivamente). Si presuppone che un processo non possa aspettare di accedere contestualmente a pi di una risorsa (un processo pu per utilizzare entrambe le risorse). Gli eventi che guidano le transizioni da execution a ready sono generati dallo scheduler e sono: dispatch_i e preempt_i. Ogni qual volta un processo i in execution e richiede una risorsa X, viene generato un evento i.requireX. Qualora la risorsa occupata (vedi sotto) il processo passa a waitingX. necessario modellizzare lo stato delle risorse e luso delle risorse da parte di ogni singolo processo. Una risorsa X pu trovarsi o libera (free) o occupata (hold). Le transizioni da free a hold sono guidate dagli eventi i.requireX e i.freeX (quetultimo evento viene generato quando un processo i in esecuzione libera la risorsa X). Luso delle risorse da parte di un processo i viene modellizzata con uno statechart costituito da un numero di stati pari al numero di combinazioni di risorse utilizzate dal processo. Esercizio 7.11 (10 punti) Si vuole specicare tramite il formalismo degli Statecharts il funzionamento di un ascensore in un palazzo in Israele, dove al sabato lascensore si muove autonomamente senza nessun intervento da parte degli utenti. Lascensore pu essere fermo o in movimento (le condizioni che guidano le transizioni tra questi stati sono descritti in seguito). Inoltre, lascensore pu trovarsi su 3 piani (1, 2, 3)

64

CAPITOLO 7. STATECHARTS

pi il piano terra (0). presente inoltre un sistema di impostazione del piano ad uso dellutente. Lutente pu, quando lascensore fermo, selezionare tramite il pulsante set (da considerare come evento) il piano desiderato. Precisamente, il pulsante set permette di passare ciclicamente da 0 a 1, da 1 a 2, da 2 a 3, e inne da 3 a 0. Una volta impostato il piano desiderato e premuto il tasto start (da considerare come evento), se lascensore non si trova al piano impostato, allora va in movimento. La transizione da un piano allaltro possibile solo se lascensore in movimento. In questo caso lascensore si muover ovviamente verso il piano impostato. Si consideri ora il problema di modicare il sistema di controllo per permettere di gestire il sabato. Il funzionamento dellascensore in questo caso : si muove piano per piano in modo tale che, una volta che lascensore ha raggiunto un piano e si fermato, allora autonomamente il sistema di impostazione seleziona il prossimo piano in cui andare. Qualora sia a 0 seleziona 1, qualora sia a 1 seleziona 2, no a 3, a quel punto seleziona 2 e riscende piano per piano no a 0. Si introduca un macrostato giorno per gestire il giorno della settimana dove un evento (Event_day) fa cambiare il giorno della settimana. Si introduca un macrostato direzione che descriva la direzione dellascensore (Up e Down) e tale che quando in discesa lascensore raggiunge il piano 0 la direzione diventa Up e quando invece in salita raggiunge il piano 3 la direzione diventa Down. Al sabato lascensore passa da fermo a in movimento appena il piano impostato diverso da quello corrente. Al sabato inoltre il pulsante set e il pulsante start non hanno eetto. Esercizio 7.12 (10 punti) Si vuole modellizzare tramite il formalismo degli StateCharts il funzionamento di un distributore di videocassette. Ogni utente registrato ha una tessera, questa pu essere in oppure out. Gli eventi che attivano queste due transizioni sono inserisci (da out a in) ed estrai (da in a out). Nella transizione da in ad out necessario inoltre che non ci sia alcuna transazione in atto (vedi sotto). Ogni tessera ha caricato un certo credito che pu essere 0,1,2,3. La transizione verso un credito maggiore attivata dallevento gettone e dal fatto che la tessera sia inserita. La transizione verso un credito negativo attivata dal vericarsi di una transazione. Il distributore pu contenere diversi lm e per ognuno di questi pi copie. Si supponga che per ogni lm possa contenere un massimo di tre copie. La transizione verso un numero maggiore di copie attivata dallevento restituito. Si specichino gli stati relativi a un lm generico i, dove i un parametro. Il distributore ore una interfaccia la cui schermata principale la home. Da questa un utente, anche senza aver inserito la propria tessera, pu passare alla schermata scelta (evento scegli) da cui scegliere il lm da prendere. Una volta scelto un lm i (evento sel_lm_i) si possono vericare alcuni casi: se non ci sono copie disponibili non avvengono transizioni, se la tessera non inserita viene visualizzata la schermata in cui si richiede di inserire la tessera e si ritorna a scelta, se il credito non suciente viene visualizzata la schermata dicendo che il credito insuciente e si ritorna a scelta, altrimenti viene

7.2. ESERCIZI (TRATTI DA TEMI DESAME)

65

attivata la transazione e si ritorna alla home. In un qualunque istante di tempo venga estratta la tessera, si ritorna alla home. Esercizio 7.13 (10 punti) Si vuole modellare tramite il formalismo degli StateCharts il coordinamento di un gruppo di meccanici durante il pit-stop di unauto da corsa. Unauto pu essere ferma o in_movimento (levento pit_stop attiva la transizione da in_movimento a ferma, la transizione inversa attivata quando tutte le gomme sono state cambiate). Una volta che una macchina si ferma, per ogni gomma si attiva un meccanico (meccanicoi) che prima svita e poi avvita la gomma. Una volta svitata la gomma, un ulteriore meccanico (il cui comportamento non da modellare) si occupa di rimuovere la gomma che stata svitata e montare la gomma nuova. Ogni gomma pu trovarsi in: da_svitare, da_rimuovere, da_avvitare, pronta. Le transizioni sono attivate dai seguenti eventi: svitata, rimossa, avvitata. La particolarit del problema che ogni meccanico addetto a svitare/avvitare una specica gomma pu aiutare i meccanici addetti a svitare/avvitare le altre gomme. (Lassunzione che meccanici diversi possono impiegare tempi diversi per avvitare/svitare e rimuovere le gomme.) Nello specico: un meccanico pu trovarsi in svita, aspetta, e avvita. In aspetta il meccanico sta aspettando che la propria gomma venga rimossa oppure ha nito di avvitare la propria gomma e sta aspettando che tutte le altre gomme siano state cambiate. In questo stato il meccanicoi pu aiutare il meccanicoj che in quellistante sta svitando o avvitando la propria gomma j (indicare gli stati come: aiutaj, aiutak, aiutal, dove j, k, e l sono indici). Inoltre, se il meccanicoi sta aiutando un altro meccanico e la gomma i stata rimossa, allora il meccanicoi va subito ad avvitare questultima gomma, indipendentemente da cosa stia facendo. La macchina ripartir quando tutte le gomme sono state cambiate.