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

Documenti analoghi
Hilzer s Barbershop problem

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

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

Architettura degli Elaboratori 2

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

Sistemi Operativi. Lezione 7-bis Esercizi

Lettori e scrittori, Barbiere sonnolento

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

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

Sistemi operativi - Concetti ed esempi -Settima edizione

Esercitazione 15. Il problema dello Sleeping Barber

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

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

CORSO DI PROGRAMMAZIONE

ESERCIZIO SincrAmbGlob-1

Esercizi su automi temporizzati e Uppaal

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

Porto Renzo Davoli, Alberto Montresor

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

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

Mutua esclusione. Sistemi Distribuiti Laurea magistrale in ingegneria informatica A.A Leonardo Querzoni. mercoledì 29 febbraio 12

Sincronizzazione. Soluzioni software Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino

CAPITOLO 23 PROBLEMA DEL BARBIERE

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

Il monitor. Sistemi Operativi T AA

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

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

PROGRAMMAZIONE: Le strutture di controllo

Il costrutto monitor [Hoare 74]

Nota: lo studente si ricordi di inizializzare i valori delle variabili semaforo usate nella sua soluzione.

Sistemi Operativi. Lezione 7 Comunicazione tra processi

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 sulla sincronizzazione

Chiamata di procedura remota

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

System Call per la gestione dei semafori in Linux. Semafori: modello concettuale. Creazione ed inizializzazione di un semaforo

Sistemi Operativi Esercizi Sincronizzazione

Monitor. Introduzione. Struttura di un TDA Monitor

Corso di Linguaggi di Programmazione

Il costrutto monitor [Hoare 74]

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 17/01/2014/ Foglio delle domande / VERSIONE 1

Il monitor. Costrutti linguistici per la sincronizzazione

Sistemi operativi Sincronizzazione fra processi

Semafori. Semafori classici con i thread POSIX 2

Modello a scambio di messaggi

STRUTTURE DI CONTROLLO DEL C++

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;

Meccanismi di sincronizzazione: Semafori e Monitor

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

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

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

Sincronizzazione tra processi

Laboratorio di Matematica e Informatica 1

Listino Aria Condizionata Frigair - Maggio 2014

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

Synchronized (ancora)

Condivisione. Sistemi Operativi Giuseppe Prencipe. Es.: produttore -- consumatore. Es.: produttore -- consumatore. Es.: produttore -- consumatore

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

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

Java Virtual Machine

SISTEMI OPERATIVI. Sincronizzazione in Java (Semafori e barriere) Patrizia Scandurra (MODULO DI INFORMATICA II) LABORATORIO

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Seminari Giornata fiscale AGEFIS

«Sciente e Tecnologie dei Beni Culturali»

UNIVERSITÀ DEGLI STUDI DI BERGAMO

Problematiche dello scambio di messaggi Produttore-consumatore con scambio di messaggi

Send/receive sincrona, assumendo che la condivisione avvenga mediante riferimenti logici coincidenti, invece che con capability.

La mutua esclusione (dai sistemi concorrenti ai sistemi distribuiti) mutua esclusione

Le risorse. Alcune definizioni

CAPITOLO 22 PROBLEMA DEL PRODUTTORE/CONSUMATORE

istruzioni eseguite in ordine predeterminabile in base al codice del programma e dei valori dei dati in ingresso

Metodi. Un metodo è una porzione di codice a cui si associa un nome. Un istruzione eseguita da un metodo può essere:

Istruzioni di ripetizione in Java 1

Tipi di POSIX Semaphores

PRINCIPI DI SISTEMI OPERATIVI

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Strutture di controllo decisionali

Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia

3. un metodo che restituisce l elenco delle matricole di tutti gli studenti del corso;

Pr1: determinare il maggiore di n numeri interi n. Fondamenti di Informatica Prof. Vittoria de Nitto Personè

Sistemi Operativi Esercizi Ricapitolazione. Docente: Claudio E. Palazzi

Le strutture di controllo in C++

Programmazione I - corso B a.a prof. Viviana Bono

Il software Epi Info

Implementazione dei monitor tramite semafori Attesa condizionale Sincronizzazione nei sistemi operativi reali Transazioni atomiche

Il Modello a scambio di messaggi

Metodi statici. Dichiarazione e chiamata di metodi statici

Ponte a Senso Unico Alternato

Inserimento di un elemento in coda. quale va collegato quello nuovo. ultimo. *lista 8 3. aux. ultimo. *lista 8 3. aux

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

CAPITOLO 17 PROBLEMI DEL PRODUTTORE/CONSUMATORE v1

Introduzione all'algoritmica. 1 Primo esempio: il massimo di una sequenza.

Liste con sentinella. intlist *createlist(void){ intlist *q = malloc(sizeof(intlist)); if(!q) { exit(-1); } q->next = q->prev = q; return q; }

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Espressioni logiche. Espressioni logiche. Operatori logici. Operatori logici. Operatori logici. Espressioni Logiche e Istruzione di Test

Cognome Nome Matricola Postazione PC. Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a Gennaio 2015

Sistemi Operativi e Laboratorio, Prova del 15/01/2014

Transcript:

Sushi bar problem The Little Book of Semaphores by Allen B. Downey http://greenteapress.com/semaphores/ 1

Sushi bar problem Immaginiamo di avere un sushi bar con 5 sedie. Se un cliente arriva e c'è una sedia vuota si può sedere immediatamente. Se le 5 sedie sono occupate, allora i commmensali stanno mangiando assieme, e per entrare bisogna attendere che la cena sia finita prima di sedersi (si alzano tutti più o meno tutti assieme). In altri termini, le sedie devono tornare ad essere tutte libere Scrivere il comportamento del processo customer per entrare e uscire dal sushi bar. 2

Sushi bar problem // num proc seduti e in attesa int eating = 0, waiting = 0; Semaphore mutex = Semaphore(1); // sem per far attendere i processi mentre si mangia Semaphore block = new Semaphore(0); boolean must_wait = false; // bar pieno 3

Sushi bar problem: soluzione errata block.p(); // riprendo la m.e. waiting = 1; must_wait = (eating == 5); if (eating == 0) { n = min(5, waiting); for i=1:n block.v(); must_wait = false; 4

Sushi bar problem: soluzione errata block.p(); // riprendo la m.e. waiting = 1; must_wait = (eating == 5); if (eating == 0) { n = min(5, waiting); for i=1:n block.v(); must_wait = false; 5

Sushi bar problem: soluzione errata block.p(); // riprendo la m.e. waiting = 1; must_wait = (eating == 5); if (eating == 0) { n = min(5, waiting); for i=1:n block.v(); must_wait = false; Se arrivo e il bar è pieno, lascio la m.e. e aspetto che altri altri escano. Quando l'ultimo esce, segnala facendo block.v() Svegliando alcuni in attesa e ponendo a false must wait. 6

Sushi bar problem: soluzione errata block.p(); // riprendo la m.e. waiting = 1; must_wait = (eating == 5); if (eating == 0) { n = min(5, waiting); for i=1:n block.v(); must_wait = false; Ma quando il cliente si sveglia, deve attendere di riprendere la m.e. e nel farlo compete con altri che arrivano. Se i nuovi arrivano a prendere la mutex prima, possono prendersi le sedie prima di lui. 7

Sushi bar problem: soluzione errata block.p(); // riprendo la m.e. waiting = 1; must_wait = (eating == 5); Non if è solo (eating un problema == 0) di ingiustizia; { può capitare n = che min(5, più di 5 processi waiting); passino Se 5 processi for sono i=1:n già entrati, il processo Che prende la block.v(); m.e. qui entra per mangiare anche lui must_wait = false; 8

Sushi bar problem: soluzione #1 Il problema proveniva dall'accesso alla m.e. Per modificare le variabili eating e waiting Demandiamo al processo che esce di modificare i valori di eating e waiting 9

Sushi bar problem: soluzione #1 block.p(); else { must_wait=(eating==5); if (eating == 0) { n = min(5, waiting); waiting = n; eating += n; must_wait=(eating==5); for i=1:n block.v(); 10

Sushi bar problem: soluzione #1 block.p(); else Quando { l'ultimo lascia la m.e., la var eating è stata già modificata, per cui i nuovi arrivati si bloccano, visto che lo must_wait=(eating==5); stato è già stato aggiornato if (eating == 0) { n = min(5, waiting); waiting = n; eating += n; must_wait=(eating==5); for i=1:n block.v(); 11

Sushi bar problem: soluzione #2 Usiamo il passaggio del testimone 12

Sushi bar problem: soluzione #2 block.p(); // m.e. passata waiting = 1; must_wait = (eating == 5); if (waiting &&! must_wait) block.v(); // pass m.e. else if (eating == 0) must_wait = false; if (waiting &&!must_wait) block.v(); // pass m.e. else 13

Sushi bar problem: soluzione #2 block.p(); // m.e. passata waiting = 1; must_wait = (eating == 5); if (waiting &&! must_wait) block.v(); // pass m.e. else if (eating == 0) must_wait = false; if (waiting &&!must_wait) Se voglio block.v(); entrare e eating // < pass 5 passo. m.e. else Il quinto setta must_wait 14

Sushi bar problem: soluzione #2 block.p(); // m.e. passata waiting = 1; must_wait = (eating == 5); if (waiting &&! must_wait) Se must_wait è vera, i clienti si bloccano block.v(); // pass m.e. finché l'ultimo la setta a false e chiama la V() su block La block.v() passa il testimone al primo processo bloccato else if (eating == 0) must_wait = false; if (waiting &&!must_wait) block.v(); // pass m.e. else 15

Sushi bar problem: soluzione #2 block.p(); // m.e. passata waiting = 1; must_wait = (eating == 5); if (waiting &&! must_wait) block.v(); // pass m.e. else if (eating == 0) must_wait = false; Il processo if (waiting svegliato si && segna!must_wait) come eating, block.v(); e verifica se può // svegliare pass m.e. altri processi bloccati su block In else tal caso gli passa la mutex Si va avanti finché non finiscono processi in attesa o raggiungo i 5 clienti, al che l'ultimo rilascia la mutex 16

Sushi bar problem: soluzione #1 coi monitor procedure entry entra() { block.wait(); else { must_wait=(eating==5); procedure entry esci(){ if (eating == 0) { n = min(5, waiting); waiting = n; eating += n; must_wait=(eating==5); for i=1:n block.signal(); 17

Sushi bar problem: soluzione message passing I processi variano non si conoscono serve un processo server A questo punto il problema si risolve banalmente con una sincronizzazione via messaggio Il client manda msg al server e aspetta risposta Quando esce informa il server Il server riceve msg e mette chi aspetta in coda o fa entrare se c'è posto Quando la sala si svuota ne sveglia 5 (se ci sono) 18