Corso di Programmazione a oggetti Programmazione concorrente Costrutti

  • Slides: 18
Download presentation
Corso di “Programmazione a oggetti” Programmazione concorrente Costrutti e meccanismi di alto livello a

Corso di “Programmazione a oggetti” Programmazione concorrente Costrutti e meccanismi di alto livello a supporto della programmazione concorrente in ambiente globale Tipi di Monitor 9. 07. 2006 2. 2. 3. 2 G. Cantone 1

enter m. cont==0; Monitor Regione exit && m. look() ==NULL /m. cont=1; ATTESA MUTEX

enter m. cont==0; Monitor Regione exit && m. look() ==NULL /m. cont=1; ATTESA MUTEX m (1) exit && P=m. look()!=NULL / P==m. get(); ATTIV O P exit m. cont==1 /m. cont=0; Precondizione /Postcondizione 9. 07. 2006 2. 2. 3. 2 G. Cantone 2

Monitor Regione Critica Condizionale m. cont==0; c 1. signal/while (c 1. cont>0 ) {m.

Monitor Regione Critica Condizionale m. cont==0; c 1. signal/while (c 1. cont>0 ) {m. put(c 1. get()); c 1. cont--; } enter ATTESA BLOCCAT SYNC s O COND c 1 cl. wait c 1. signal c 1. wait ATTESA MUTEX m(1) (exit || wait ) &&m. look() !=NULL/ P==m. get(); ATTIV O P exit enter && m. cont==1; 9. 07. 2006 Molte postcondizioni non riportate 2. 2. 3. 2 G. Cantone 3

Monitor tipo Regione Critica Condizionale Un processo già in attesa su condizione, una volta

Monitor tipo Regione Critica Condizionale Un processo già in attesa su condizione, una volta passato in esecuzione, dovrà valutare nuovamente la condizione di avanzamento (un altro processo, già in attesa sul semaforo di ingresso o ivi ricollocato, entrando per primo nel monitor, potrebbe alterare lo stato del monitor medesimo): while(!<B>) cond. wait; 9. 07. 2006 2. 2. 3. 2 G. Cantone 4

Monitor Java: notify. All() Corrisponde a un monitor tipo Regione Critica Condizionale con un

Monitor Java: notify. All() Corrisponde a un monitor tipo Regione Critica Condizionale con un solo stato di attesa. Vi è un’unica condizione di attesa, implicita. È una classe Java che include almeno un metodo synchronized. Tutti metodi synchronized operano in mutua esclusione. Con il segnalamento notify. All(), TUTTI i processi in attesa vengono rimessi in ingresso del monitor. 9. 07. 2006 2. 2. 3. 2 G. Cantone 5

Monitor/Implementazione/Casi reali Monitor Java notify. All m. cont==0; BLOCCAT O enter synchronized notify. All/while

Monitor/Implementazione/Casi reali Monitor Java notify. All m. cont==0; BLOCCAT O enter synchronized notify. All/while (ai. cont>0 ) {m. put(ai. get()); ai. cont--; } Attesa interna ai wait c. notify. All ATTESA MUTEX m(1) (exit || wait ) &&m. look() !=NULL/ P==m. get(); ATTIV O P exit enter && m. cont==1; 9. 07. 2006 Molte postcondizioni non riportate 2. 2. 3. 2 G. Cantone 6

Monitor Java Con il segnalamento notify(), UN processo, scelto a caso fra quelli eventualmente

Monitor Java Con il segnalamento notify(), UN processo, scelto a caso fra quelli eventualmente in attesa, viene rimesso in ingresso del monitor. 9. 07. 2006 2. 2. 3. 2 G. Cantone 7

Monitor Java: notify() m. cont==0; BLOCCAT O enter synchronized notify/ai. cont>0 => {m. put(ai.

Monitor Java: notify() m. cont==0; BLOCCAT O enter synchronized notify/ai. cont>0 => {m. put(ai. get()); ai. cont--; } Attesa interna ai wait c. notify ATTESA MUTEX m(1) (exit || wait ) &&m. look() !=NULL/ P==m. get(); ATTIV O P exit enter && m. cont==1; 9. 07. 2006 Molte postcondizioni non riportate 2. 2. 3. 2 G. Cantone 8

Variante Monitor MRCC È una variante del precedente MRCC. Se il processo attivo si

Variante Monitor MRCC È una variante del precedente MRCC. Se il processo attivo si sospende, allora libera il monitor. Un processo attivo può risvegliare un qualunque numero di processi i quali però sono forzati ad abbandonare il monitor, il cui controllo resta al processo segnalante. L’uscita forzata potrebbe creare problemi, in quanto i processi forzati a uscire non potrebbero disporre dei giusti valori dei dati. 9. 07. 2006 2. 2. 3. 2 G. Cantone 9

Variante Monitor RCC c. signal/if (c. cont>0 ) {m. put(c. get()); c. cont--; }

Variante Monitor RCC c. signal/if (c. cont>0 ) {m. put(c. get()); c. cont--; } BLOCCAT O wait m. cont==0; C enter synchronized c. signal ATTESA MUTEX m(1) (exit || wait ) &&m. look() !=NULL/ P==m. get(); ATTIV O P exit enter && m. cont==1; 9. 07. 2006 Molte postcondizioni non riportate 2. 2. 3. 2 G. Cantone 10

Ulteriori tipi di monitor Aspetti comuni I processi in attesa su coda interna sono,

Ulteriori tipi di monitor Aspetti comuni I processi in attesa su coda interna sono, in termini di risveglio, privilegiati rispetto a quelli in attesa all’esterno. 9. 07. 2006 2. 2. 3. 2 G. Cantone 11

Monitore enter m. cont==0; Modificata 9. 07. 2006 ! a ATTESA BLOCCAT COND c(0)O

Monitore enter m. cont==0; Modificata 9. 07. 2006 ! a ATTESA BLOCCAT COND c(0)O Cond c(0) Come necessario per programma c. wait c. signal &&c. cont>0; ATTESA MUTEX m(1) a: (exit || c. wait || (c. signal && c. cont==0)) &&m. look() !=NULL/ P==m. get(); ATTIV O P c. signal || exit enter && m. cont==1; /m. cont=0; 9. 07. 2006 Molte postcondizioni non riportate 2. 2. 3. 2 G. Cantone 12

Monitor/Casi reali Monitor di Hoare Monitor Hansen Simili al Monitore. Impiegano Condition e uni.

Monitor/Casi reali Monitor di Hoare Monitor Hansen Simili al Monitore. Impiegano Condition e uni. Queue rispettivamente 9. 07. 2006 2. 2. 3. 2 G. Cantone 13

Monitor/Implementazione/Casi reali Monitor Concurrent Pascal enter m. cont==0; 0. . MAXP-1 ! a ATTESA

Monitor/Implementazione/Casi reali Monitor Concurrent Pascal enter m. cont==0; 0. . MAXP-1 ! a ATTESA BLOCCAT QUEUE q(0)O QUEUE q(0) q. delay q. continue &&q. queue; ATTESA MUTEX m(1) a: (exit || delay || (q. continue && !q. queue)) &&m. look() !=NULL/ P==m. get(); ATTIV O P continue || exit enter && m. cont==1; 9. 07. 2006 Molte postcondizioni non riportate 2. 2. 3. 2 G. Cantone 14

Altri monitor/Aspetti Comuni Una C. signal() NON comporta l’abbandono dello stato ATTIVO. Ciò perché

Altri monitor/Aspetti Comuni Una C. signal() NON comporta l’abbandono dello stato ATTIVO. Ciò perché il processo segnalato potrebbe portare il monitor in uno stato diverso da quello lasciato dal processo che emette il segnale e, per questo, inconsistente per lo stesso. 9. 07. 2006 2. 2. 3. 2 G. Cantone 15

Monitor Mediatore Come necessario per programma enter m. cont==0; ATTESA BLOCCATO COND Cond c(0)

Monitor Mediatore Come necessario per programma enter m. cont==0; ATTESA BLOCCATO COND Cond c(0) ATTESA MUTEX m(1) c. signal &&c. cont>0; (exit || c. wait) &&u. cont==0 && m. look() !=NULL /P==m. get(); enter && m. cont==1; 9. 07. 2006 c. wait c. signal && c. cont==0 ATTIV O P ) ait . w || c t i 0 (ex ont> u. c Molte postcondizioni non riportate 2. 2. 3. 2 G. Cantone exit( exit c. signal && c. cont>0 && PENDENTE URGENTE u(0) 16

Monitor/Implementazione/Avanzamentosospensione Monitor Gladiatore ATTESA ELIGIBILI e Come necessario per programma ATTESA BLOCCAT COND c

Monitor/Implementazione/Avanzamentosospensione Monitor Gladiatore ATTESA ELIGIBILI e Come necessario per programma ATTESA BLOCCAT COND c O Cond c(0) c. wait c. signal ((exit || c. wait ) && e. cont>0) / P== e. get() m. cont==0; enter c. signal && c. cont>0 ATTESA MUTEX m ((exit || c. wait) &&e. cont==0) && m. look()!=NULL / P==m. get() ATTIV O P exit enter && m. cont==1; /m. cont=0; 9. 07. 2006 Molte postcondizioni non riportate 2. 2. 3. 2 G. Cantone 17

Monitor/ICasi reali Monitor Mesa ATTESA ELEGIBILI e(0) Come necessario per programma ATTESA BLOCCAT COND

Monitor/ICasi reali Monitor Mesa ATTESA ELEGIBILI e(0) Come necessario per programma ATTESA BLOCCAT COND c O Cond c(0) c. wait c. notify ((exit || c. wait ) && e. cont>0) / P== e. get() m. cont==0; enter c. notify && c. cont>0 ATTESA MUTEX m(1) ((exit || c. wait) &&e. cont==0) && m. look()!=NULL / P==m. get() ATTIV O P exit enter && m. cont==1; 9. 07. 2006 Molte postcondizioni non riportate 2. 2. 3. 2 G. Cantone 18