SISTEMI OPERATIVI. Semafori. Semafori

Documenti analoghi
Java Virtual Machine

Meccanismi di sincronizzazione: Semafori e Monitor

Capitolo 7: Sincronizzazione

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

Sistemi Operativi. Lezione 7 Comunicazione tra processi

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

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

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

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

Monitor. Introduzione. Struttura di un TDA Monitor

Gestione di files Motivazioni

Java threads (2) Programmazione Concorrente

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

SISTEMI OPERATIVI. Sincronizzazione dei processi. Domande di verifica. Luca Orrù Centro Multimediale Montiferru 30/05/2007

Sommario. G. Piscitelli

Ingegneria del Software

Informatica 3. Informatica 3. LEZIONE 6: Il controllo dell esecuzione. Lezione 6 - Modulo 1. Errori durante l esecuzione. Il controllo dell esecuzione

DTI / ISIN / Titolo principale della presentazione. La cena dei filosofi. Amos Brocco, Ricercatore, DTI / ISIN. 14 maggio 2012

Il costrutto monitor [Hoare 74]

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

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

I thread nel sistema operativo LINUX: Linuxthreads

SAPIENZA Università di Roma Facoltà di Ingegneria

Algoritmi di Ricerca. Esempi di programmi Java

Le variabili. Olga Scotti

Multithreading in Java. Fondamenti di Sistemi Informativi

Synchronized (ancora)

DMA Accesso Diretto alla Memoria

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

Esercizi sugli Oggetti Monitor

Il costrutto monitor [Hoare 74]

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

Semplici Algoritmi di Ordinamento

Sincronizzazione tra processi

Programmazione Orientata agli Oggetti in Linguaggio Java

Thread: sincronizzazione Esercitazioni del 09 Ottobre 2009

Ottava Esercitazione. introduzione ai thread java mutua esclusione

Esercizi della lezione 5 di Java

Perche le CPU multicore

SISTEMI OPERATIVI. Sincronizzazione in Java (Monitor e variabili condizione in Java)

ESERCIZIO 1 (Definizione funzioni passaggio parametri per copia)

T 1. Per un processo con più thread di controllo, lo stato di avanzamento della computazione di ogni thread è dato da:

Informatica Teorica. Macchine a registri

Un esercizio d esame. Flavio De Paoli

Il costrutto monitor

I THREAD O PROCESSI LEGGERI Generalità

ESERCIZIO 1 (b) Dove è memorizzato il numero del primo blocco del file? Insieme agli altri attributi del file, nella cartella che contiene il file.

Sistemi Operativi Anno Accademico 2011/2012. Segnali: Interrupt software per la gestione di eventi asincroni

Blocchi funzione: FbModbusAsciiMs

SISTEMI OPERATIVI 3 febbraio 2014 corso A nuovo ordinamento e parte di teoria del vecchio ordinamento indirizzo SR

PROGRAMMA DISCIPLINARE SVOLTO a. s / 2016

Processi e thread. Dipartimento di Informatica Università di Verona, Italy. Sommario

Trasparenze del Corso di Sistemi Operativi

Sistemi Operativi Sincronizzazione tra Processi

ARRAY E STRINGHE. G. Frosini Slide 1

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Pronto Esecuzione Attesa Terminazione

Sistemi Operativi (M. Cesati)

Sincronizzazione dei processi

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

3.2 Concorrenza, parallelismo e parallelismo reale

Esercizi sul Monitor in Java

Gestione dei thread in Java LSO 2008

Fondamenti di Informatica PROBLEMI E ALGORITMI. Fondamenti di Informatica - D. Talia - UNICAL 1

Sincronizzazione con Java

Descrizione del protocollo

ESAME SCRITTO DI ELEMENTI DI INFORMATICA E PROGRAMMAZIONE. 10 Settembre 2013

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Primo scritto 11 Gennaio 2008

INFORMATICA GRAFICA - FONDAMENTI DI INFORMATICA Ing. Civile - Edile/Architettura Dott. Penzo SOLUZIONE PROVA SCRITTA DEL 16/09/2002.

Capitolo 3 Operazioni di ingresso e uscita

Programmazione Concorrente in Java

Sistemi Operativi Esercizi Sincronizzazione

Registri. «a2» Copyright Daniele Giacomini --

3) Il seguente numerale A1F0 in base 16 a quale numero in base 10 corrisponde?

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Sistemi Operativi L-A. Esercizi 14 Giugno Esercizio monitor

Alfabeto ed elementi lessicali del linguaggio C

La struttura dati ad albero binario

CAPITOLO 24 I MONITOR

Esercizi sulla definizione di classi (Fondamenti di Informatica 1 Walter Didimo) Soluzioni

3. Terza esercitazione autoguidata: progetto gestione voli

Reti e problematiche di Rete

Il sistema di I/O. Hardware di I/O Interfacce di I/O Software di I/O. Introduzione

Corso di Sistemi Operativi

Esercizi di programmazione in C

GESTIONE DELLA MEMORIA CENTRALE

Programmazione concorrente in Java

3. La sintassi di Java

Sistema Operativo. Fondamenti di Informatica 1. Il Sistema Operativo

Note applicative AN001: Driver ModBus

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

// inizializzazione della biblioteca con utenti, libri e prestiti // non richiesta Biblioteca.inizializza();

La gestione dell I/O (Cap. 5, Tanenbaum)

Corso sul linguaggio Java

SISTEMI OPERATIVI 14 settembre 2015 corso A nuovo ordinamento e parte di teoria del vecchio ordinamento indirizzo SR

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

CAPITOLO 7 - SCAMBIO DI MESSAGGI

Il Sistema Operativo

Terza Esercitazione. Unix - Esercizio 1. Unix System Call Exec Java Introduzione Thread

Transcript:

SISTEMI OPERATIVI 04.a Semafori Semafori Approfondimento sulla mutua escluone Manipolazione di risorse mutex Strategie di soluzione Lock e Un Primitive semaforiche 1

Approfondimento sulla mutua escluone Mutua escluone: la ncronizzazione consente a più proces di operare su dati condivi, controllando l interferenza Il problema nasce quando le risorse so n condivibili, cioè tali da n poter essere utilizzate da più di un processo alla volta È sufficiente che le operazioni sulle risorse comuni n sovrapponga nel tempo!! 2 Uso della risorsa mutex corretto da parte di P1 e P2 Uso della risorsa mutex errato da parte di P1 e P2 Utilizzo di risorse mutex t 1 -t 2 = tempo di attesa del processo P1 per accedere alla risorsa R t 3 -t 4 = tempo di attesa del processo P2 per accedere alla risorsa R 3 acquizione della risorsa R uso della risorsa R P1 P2 t1 t2 t3 t4 t5

Acquizione e rilascio di risorse mutex 4 Controllo con semaforo: variabile SemR booleana SemR=libero SemR:=occupato SemR:=libero Uso di R Sequenza di acquizione (WAIT) Sequenza di rilascio (SIGNAL) Operazioni primitive su un semaforo 5 wait (SemR) gnal (SemR) Termilogia di Dijkstra P (SemR) Proberen V (SemR) Verhogen Wait (SemR) USO di R Signal (SemR) P (SemR) USO di R V (SemR)

Acquizione di risorse mutex Sequenza di acquizione WAIT - accesso alla risorsa 6 SemR=libero Problema: due operazioni per acquire la risorsa: 1. controllo dello stato (SemR =?) 2. occupazione (SemR := occupato) SemR:=occupato Uso di R Acquizione di risorse mutex [2] Problema: due operazioni per acquire la risorsa: 1. controllo dello stato (SemR ==?) 2. occupazione (SemR := occupato) Queste operazioni so temporalmente separate: se i proces A e B cerca di acquire la risorsa, potrebbe verificare la sequenza: A.1 A controlla lo stato della risorsa e la trova libera ma, prima che A la occupi, B.1 B controlla lo stato della risorsa e la trova libera B.2 B, avendo trovato la risorsa libera, la occupa ma, anche A.2 A, avendo trovato la risorsa libera, la occupa 7 Uso errato della risorsa R A B A.1 B.1 B.2 A.2 t

Acquizione di risorse mutex [3] Le due operazioni per acquire la risorsa: 1. controllo dello stato (SemR ==?) 2. occupazione (SemR := occupato) van eseguite in modo indivibile Sequenza di acquizione (WAIT) SemR=libero SemR:=occupato 8 La sequenza di istruzioni va eseguita in mutua escluone Uso di R Acquizione di risorse mutex [4] Per ascurare la mutua escluone nell uso della risorsa R è necessario ascurare che: l accesso ad R (l uso di SemR) avvenga in mutua escluone 9 Si ripropone, a livello più basso, lo stesso problema: Per ascurare la mutua escluone nell uso di SemR è necessario ascurare che: l accesso a SemR avvenga in mutua escluone E così via, all infinito

Strategie di soluzione Conviene fermar al primo o secondo passo e rendere indivibile (mutuamente escluvo) o direttamente l uso della risorsa R oppure l accesso ad R (l uso di SemR) cioè la sequenza di istruzioni che: 1. controlla lo stato della risorsa (SemR = =?) 2. la occupa (SemR = occupato) 10 Nota: l operazione su SemR di solito dura molto me dell uso di R Strategie di soluzione [2] Definita Sezione Critica la sequenza di istruzioni con la quale un processo opera su una risorsa comune, il problema risolve con: 11 Soluzione A Uso indivibile della risorsa oppure Soluzione B Mutua escluone delle sezioni critiche di accesso alla risorsa Operazioni su variabili di stato della risorsa so Sezioni critiche L operazione di rilascio opera sulla stessa variabile di stato ( SemR = occupato ) dell operazione di accesso.

Soluzione A - (Lock e Un) 12 ( ) ( ) Istruzioni (coppia di parente) che rendo indivibile la sequenza di operazioni. USO di R Lock svolge le funzioni di wait quelle di gnal Soluzione B - (Wait e Signal) 13 Acquizione (WAIT) Rilascio (SIGNAL) Lock SemR = libero SemR:=occupato Un Un Uso di R Lock SemR:=libero Un

Lock e Un in stemi Moprocessore 14 Lock( ) disabilita le interruzioni ARM: MRS r0, CPSR ORR r0, r0, #0x80 ; bit 7 <- 1 ; 0x40 per FIQ, bit 6 <- 1 MSR CPSR_c, r0 Un( ) riabilita le interruzioni ARM: MRS r0, CPSR BIC r0, r0, #0x80 MSR CPSR_c, r0 Va bene per la soluzione B (breve), n per la A (lunga) Lock e Un in stemi Multiprocessore I processori devo avere una istruzione che: 1. legge un dato da memoria, 2. lo esamina (bit di condizione), 3. lo riscrive in memoria. 15 IN MODO INDIVISIBILE (CON UN UNICO CICLO DI MEMORIA)

Lock e Un in stemi Multiprocessore [2] 16 Ad esempio: l istruzione TEST AND SET (TAS) 68000: TAS.B S.L ; S->Z e N, S=1 (ciclo READ-MODIFY-WRITE) L istruzione ARM SWAP (SWP) ARM: SWP{<cond>} Rd, Rm, [Rn] ;[Rn]->tmp, Rm->[Rn], tmp->rd ; se Rd==Rm avviene lo scambio tra Rd e [Rn] ; operazione atomica Lock e Un - realizzazione con TAS Usando l istruzione TAS può costruire l operazione di (istruz. M68000) S == 0 LOCK: TAS.B S.L ;S->Z e N, S=1 BNE LOCK UNLOCK: CLR.B S S = 0 17 S = 1

Lock e Un - con TAS Esaminando i grafi, ci accorge che: la variabile di S svolge la funzione di un semaforo l operazione svolge la funzione della wait l operazione svolge la funzione della gnal 18 S == 0 S = 0 S = 1 Soluzione A - (Lock e Un) 19 ( ) ( ) Istruzioni (coppia di parente) che rendo indivibile la sequenza di operazioni interne. USO di R qui un processo potrebbe attendere l per 30 minuti! (30 minuti)

Soluzione B - (Wait e Signal) 20 WAIT la soluzione B è preferibile SemR == libero qui un processo attende l per < 5 µs! SIGNAL SemR = occupato USO di R SemR = libero (5 µs ) (30 minuti) Realizzazione di Lock e Un 21 in stemi MONO-processore: Lock disabilitazione delle interruzioni Un riabilitazione delle interruzioni in stemi MULTI-processore: Lock Un READ-MODIFY-WRITE (TAS, SWP) reset della variabile

PROBLEMA nella realizzazione di wait: public void wait() { (); for (;;) { if (semr){ //libero=true semr = false; (); break; } (); (); } } Anche (realizzata con TAS): LOCK: TAS.B S.L ;S->Z e N, S=1 BNE LOCK BUSY WAITING! BUSY WAITING! 22 public void () { while (tas) {} } BUSY WAITING! Ma l attesa con è breve (5 µs) Wait - forma busy waiting (spin) Svantaggio: n consente di usare in modo efficiente il processore Vantaggio: n richiede commutazione di contesto n appena la variabile di o il semaforo lo consento, i proces riparto subito, col minimo ritardo. Potrebbe essere conveniente: in stemi multi-processore, quando i tempi di attesa prevedo brevi. 23 Più conveniente: semaforo con sospene dei proces.

Semaforo con sospene dei proces Wait (SemR) Signal (SemR) 24 SemR == libero Proces sospe? Sospendi e SemR = occupato SemR = libero Riesuma e Al semaforo va associata una CODA DI PROCESSI SOSPESI Semaforo (binario) in Java class Semaphore { public Semaphore(boolean b); // b valore iniziale public synchronized void p(); // operazione p indivibile 25 public synchronized void v(); // operazione v indivibile public synchronized long p(long timeout); // operazione p indivibile con timeout ms public int value(); // valore del semaforo (0 o 1) public int queue(); // num. thread in attesa sulla coda del sem. public synchronized Thread waitingthread(int pos); // thread in attesa in pozione pos public String tostring(); // stringa descrittiva }

Mutua escluone in Java public void metodoconsezcritica(..., Semaphore s) {... s.p(); <codice della sezione critica> s.v();... } 26... public void metodoricorvo (..., MutexSem s) {... s.p(); <codice della sezione critica>... metodoricorvo(..., s); // il MutexSem n provoca dead... s.v();... } Esercizi 1. Far in modo che un thread T1 invii un gnal su un semaforo ogni volta che preme RETURN sulla tastiera; sul semaforo mette in attesa un thread T2 che, quando riceve il gnal, visualizza il valore di una variabile di conteggio che incrementa. 2. Creare un numero arbitrario di thread (numero passato come parametro sulla linea di comando) che, in mutua escluone, visualizza su stdout: il proprio me, l ora corrente, un contatore che indica se e il primo che visualizza, oppure il secondo ecc. (cioè un contatore condiviso tra i vari thread e incrementato da ciascu). 3. Adottare il modello del produttore/consumatore per far sì che un thread T1 legga una riga da stdin, e la invii ad un thread T2 attraverso una variabile stringa comune, e che T2 la visualizzi su stdout aseme alla sua lunghezza (numero di caratteri).

04.a Semafori