Hilzer s Barbershop problem

Documenti analoghi
Sushi bar problem. The Little Book of Semaphores by Allen B. Downey

Problema dei Fumatori di sigarette. Problema dei Fumatori di sigarette. Problema dei Fumatori di sigarette

CAPITOLO 23 PROBLEMA DEL BARBIERE

Lettori e scrittori, Barbiere sonnolento

ESERCIZIO SincrAmbGlob-1

Architettura degli Elaboratori 2

Sistemi Operativi. Lezione 7-bis Esercizi

Porto Renzo Davoli, Alberto Montresor

Sistemi operativi - Concetti ed esempi -Settima edizione

Sistemi Operativi. Lez. 13: primitive per la concorrenza monitor e messaggi

Chiamata di procedura remota

Sistemi Operativi Esercizi Ricapitolazione. Docente: Claudio E. Palazzi

Esercitazioni 7 e 8. Bounded Buffer con sincronizzazione Java (1)

Sincronizzazione. Problemi di sincronizzazione tipici Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino

Java Virtual Machine. Indipendenza di java dalla macchina ospite. I threads in Java

Esercizio di Sincronizzazione tra Processi: Ponte a Senso Unico Alternato con Capacità Limitata e Senza Starvation

Monitor. Le procedure entry sono le sole operazioni che possono essere utilizzate dai processi per accedere alle variabili comuni.

Università degli Studi della Calabria Corso di Laurea in Ingegneria Informatica A.A. 2001/2002. Sistemi Operativi Corsi A e B. Esercitazioni 7 e 8

Esercizi di utilizzo del semaforo semplice di competizione per l'uso di una risorsa comune

Sistemi Operativi e Laboratorio, Prova del 6/4/2017 versione A

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

/////////////////////////////////// /// ESERCIZI SUI SEMAFORI /// /// Stefano Ferretti /// ///////////////////////////////////

UNIVERSITÀ DEGLI STUDI DI BERGAMO

Sincronizzazione Le sezioni scritiche

SOLUZIONE. ESERCIZIO PRODUTTORE CONSUMATORE (semafori)

Università degli Studi di Bologna Sede di Cesena. Corso di Laurea in Scienze dell Informazione. Anno Accademico 1998/99

Soluzioni ai problemi di Mutua Esclusione Primitive di sincronizzazione. Soluzioni ai problemi di Mutua EsclusionePrimitive di sincronizzazione

Esercitazione 15. Il problema dello Sleeping Barber

CORSO DI PROGRAMMAZIONE

Processi parte V. Processi parte V. Sincronizzazione dei processi mediante monitor: Sintassi Funzionamento Implementazione

Rappresentazione degli algoritmi

Monitor. Introduzione. Struttura di un TDA Monitor

Sincronizzazione con Java

Programmazione multi threaded in Python. Linguaggi dinamici A.A. 2010/2011 1

Tipi di POSIX Semaphores

Elementi di Architettura e Sistemi Operativi. problema punti massimi i tuoi punti problema 1 8 problema 2 5 problema 3 7 problema 4 10 totale 30

Il monitor. Costrutti linguistici per la sincronizzazione

C: panoramica. Violetta Lonati

Sincronizzazione. Problemi di sincronizzazione tipici Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino

Esercizio di Sincronizzazione tra Processi: Ponte a Senso Unico Alternato con Capacità Limitata

Il costrutto monitor [Hoare 74]

Modelli di programmazione parallela

osservazione: 1 MCD(m,n) min(m,n) = si provano i numeri compresi tra 1 e min(m,n) conviene iniziare da min(m,n) e scendere verso 1

Introduzione. Meccanismi di sincronizzazione: Semafori e Monitor. Semafori - Definizione. Semafori - Descrizione informale

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

Meccanismi di sincronizzazione: Semafori e Monitor

Monitor [Hoare 74] Costrutto sintattico che associa un insieme di procedure/funzioni (entry) ad una struttura dati comune a più processi.

Monitor [Hoare 74] Uso del monitor

Informa(ca Appun% dal laboratorio 4

Con noi la conversazione acquisisce nuovi valori.

Panoramica Introduttiva su Inter-Process Communication (IPC)

Il monitor. Sistemi Operativi T AA

Interazione tra Processi. Sistemi Operativi T AA

Esercizio monitor con pthreads

Corso di Programmazione Concorrente. I Monitor. Valter Crescenzi

SEMAFORI SEMAFORI. Sul semaforo sono ammesse solo due operazioni (primitive)

Algoritmi di Ricerca. Esempi di programmi Java

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Corso di FONDAMENTI DI RETI DI TELECOMUNICAZIONI. Martino De Marco

Modello a scambio di messaggi

Sistemi operativi. Lez. 6: primitive per la concorrenza e semafori

Semafori. Semafori classici con i thread POSIX 2

Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Esercitazione 3. Espressioni booleane I comandi if-else e while

Programmazione = decomposizione basata su astrazioni

Le risorse. Alcune definizioni

Sincronizzazione dei processi. Capitolo 5 -- Silberschatz

CORSO DI ELEMENTI DI INFORMATICA

Esercizio monitor. Sistemi Operativi T 1

Esercitazione maggio 2011

SOLUZIONE. <l auto arriva all ingresso I> while PostiDisponibili == 0

to.net/en Cartella stampa P.A.S. Corporation 4-9 Aprile 2017 Milan Design Week Via Tortona 28, Milano

Programmazione orientata agli oggetti. Ivan Lanese

Corso di Laboratorio di Sistemi Operativi

Modelli di interazione tra processi

CORSO DI PROGRAMMAZIONE

Corso di Fondamenti di Informatica. La ricorsione

«Sciente e Tecnologie dei Beni Culturali»

Java Virtual Machine

Decima Esercitazione. Accesso a risorse condivise tramite Monitor Java

Algoritmi di Ricerca. Esempi di programmi Java

SISTEMI OPERATIVI. Nucleo di un SO. Il Nucleo. Il nucleo di un SO Gestione delle interruzioni Sincronizzazione tra processi Dispatcher. 06.

PRINCIPI DI SISTEMI OPERATIVI

Capitolo 7: Sincronizzazione

Sviluppo di programmi

Università di Bergamo Facoltà di Ingegneria INGEGNERIA DEL SOFTWARE. Paolo Salvaneschi B1_1 V2.1. Reti di Petri

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Esercizio sul Monitor. Ponte con utenti grassi e magri 11 Novembre 2013

Cenni ai Problemi classici di Sincronizzazione Processi Concorrenti. E. Mumolo

ADT Mappa. Le chiavi (il mezzo per accedere agli elementi) hanno lo scopo di rendere efficiente la ricerca. Strutture Dati

Informatica 3. Informatica 3. LEZIONE 13: Liste doppie, pile e code. Lezione 13 - Modulo 1. Free list (2) Free list. Free list

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto

STRUTTURE DI CONTROLLO DEL C++

Esercizi Esercizi Università di Salerno

MODELLO AD AMBIENTE GLOBALE

Synchronized (ancora)

Iterazione. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa E07. C. Limongelli Novembre 2007

Laboratorio di Algoritmi e Strutture Dati. Code con Priorità

Transcript:

The Little Book of Semaphores by Allen B. Downey http://greenteapress.com/semaphores/ Versione più complicata del classico problema del barbiere 1

Il nostro barbershop ha tre sedie, tre barbieri, e un'area di attesa che può ospitare quattro clienti su un divano e che ha posti in piedi per i nuovi clienti. In totale, il numero di clienti nel negozio è 20. Un cliente non entra nel negozio se è pieno. Una volta dentro, il cliente si siede sul divano o sta in piedi se il divano è pieno. Quando un barbiere è libero, il cliente che è sul divano da più tempo viene servito e, se ci sono clienti in piedi, quello che è lì da più tempo prende un posto sul divano. Quando il taglio di capelli di un cliente è finito, qualsiasi barbiere può accettare il pagamento, ma c'è un solo registratore di cassa, per cui il pagamento viene effettuato per un cliente alla volta. I barbieri dividono il loro tempo tra il taglio dei capelli, accettare pagamenti, e dormire nella loro sedia in attesa di un cliente. 2

3

Barbieri: invocano cuthair acceptpayment 4

Clienti: invocano le seguenti funzioni, in ordine entershop, sitonsofa, sitinbarberchair, pay, exitshop 5

Clienti: invocano le seguenti funzioni, in ordine entershop, sitonsofa, sitinbarberchair, pay, Non possibile invocarla se il barbershop è pieno exitshop 6

Clienti: invocano le seguenti funzioni, in ordine entershop, sitonsofa, sitinbarberchair, pay, Se il divano è pieno, non posso invocarla finché qualcuno non chiama sitinbarberchair exitshop 7

Clienti: invocano le seguenti funzioni, in ordine entershop, sitonsofa, sitinbarberchair, pay, Se i barbieri sono occupati, non posso invocarla finché qualcuno non chiama pay exitshop 8

Clienti: invocano le seguenti funzioni, in ordine entershop, sitonsofa, sitinbarberchair, pay, exitshop Il cliente deve invocare pay prima che il barbiere possa invocare acceptpayment 9

Clienti: invocano le seguenti funzioni, in ordine entershop, sitonsofa, sitinbarberchair, pay, exitshop Il barbiere deve invocare acceptpayment, prima che il cliente invochi exitshop 10

Ci sono varie code FIFO La soluzione del libro usa dei costrutti per riuscire a realizzare una reale politica FIFO. Noi rilassiamo il problema e diciamo che ci va bene che i clienti stiano in piedi se non c'è posto nel divano, poi si siedono sul divano e aspettano posto in una delle tre sedie Usiamo un semaforo sofa per il divano Ci servirà una variabile customers per contare i clienti un sem mutex Un semaforo chair per le tre sedie dei barbieri Altri semafori per sincronizzare i processi barbiere e cliente barber + customer (per sedersi) cash + receipt (per pagare) 11

int customers = 0; Hilzer s Barbershop problem // semaphores mutex = Semaphore(1); sofa = Semaphore(4); chair = Semaphore(3); barber = Semaphore(0); customer = Semaphore(0); cash = Semaphore(0); receipt = Semaphore(0); 12

process client { mutex.p(); // entro if customers == 20 { mutex.v() return; } customers += 1; mutex.v(); sofa.p(); // mi siedo sitonsofa(); chair.p(); // aspetto la sedia sitinbarberchair(); sofa.v(); // libero divano...... customer.v(); // sveglio // barbiere barber.p(); gethaircut(); pay(); cash.v(); // sincro barbiere receipt.p(); chair.v(); mutex.p(); // esco customers = 1; mutex.v(); exitshop(); } 13

process barber { while (1) { customer.p(); barber.v(); cuthair(); cash.p(); acceptpayment(); receipt.v(); } } Hilzer s Barbershop problem 14

NOTA: La soluzione generale necessita di usare delle particolari code FIFO È una coda FIFO di semafori privati Ha un semaforo mutex associato Per mettermi in coda Prendo mutex sulla FIFO Aggiungo in coda il mio semaforo privato Rilascio mutex Chiamo P() sul mio semaforo privato Estrazione coda Prendo mutex Estraggo il semaforo privato in cima alla coda FIFO Rilascio mutex Chiamo V() su quel semaforo Trovate descrizione sul libro al link formito nella prima slide 15

Traduzione monitor: Servono condition che svolgano il lavoro dei relativi semafori Servono dei contatori, visto che nella sala di attesa, sul divano e sulle sedie ho più posti liberi L'ordinamento FIFO potrebbe essere più semplice 16

Traduzione message passing: Vari modi, e i processi non si conoscono Standard Aggiungere dei processi per la gestione dell'entrata, del divano, e delle sedie, della cassa Della cassa magari possiamo farne a meno Quando il cliente si siede sulla sedia, il gestore della sedia comunica al cliente l'id del mio barbiere (e viceversa) Così poi la sincronizzazione per il pagamento avviene tra loro direttamente Oppure, visto che c'è un processo che fa l'accettazione, magari può fare tutto lui Less standard (e più complessa) visto che è tutto FIFO, l'accettazione potrebbe dare al cliente qualche informazione in modo che lui possa poi svolgere l'attività senza sincronizzarsi con il server 17

: Message Passing L'accettazione da al cliente info per sincronizzarsi altrove Accettazione passa al cliente l'ultimo utente che è entrato prima di lui (se gli utenti in coda sono > 3) e si sincronizza con lui Questo vuol dire che i clienti devono poter ricevere messaggi non solo per sincronizzarsi, ma anche messaggi da altri clienti Info sui barbieri Se ogni taglio richiede lo stesso tempo, potremmo calcolare facilmente in quale sedia va il cliente Cliente i sedia i%3 Se il taglio richiede tempo variabile, ho svariate opzioni: Reinserisco un gestore sedie Il cliente chiede a tutti i barbieri e il primo che risponde è ok Il cliente manda ad un barbiere unico e questi si sincronizzano tra loro 18