Programmazione Concorrente

Slides:



Advertisements
Presentazioni simili
Meccanismi di IPC Problemi classici di IPC
Advertisements

Esercizio Usate il ciclo repeat until (controllo post condizionale) per simulare il prodotto N x M con M somme di N. Esempio: 5 x 3 equivale a fare 5 +5.
Programma: main() { istruzioni } ; assegnazione condizione ciclo istruzione: ;
Informatica 22/03/2012.
Calcolo del minimo comune multiplo (m.c.m.) Luigi Sante
PROGRAMMARE IN PASCAL (le basi)
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Dipartimento di Matematica
Java: programmazione concorrente con condivisione di memoria
Algoritmi e Programmazione
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
Il problema dello stallo
1 Processi e Thread Meccanismi di IPC, Inter Process Communication (1)
1 Processi e Thread Meccanismi di IPC (1). 2 Comunicazioni fra processi/thread Processi/thread eseguiti concorrentemente hanno bisogno di interagire per.
Hash Tables Indirizzamento diretto Tabelle Hash Risoluzioni di collisioni Indirizzamento aperto.
Sincronizzazione fra processi
Sincronizzazione di processi
Tail recursion: esempio
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 10/03/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Risorse condivise e sovraccarichi nei sistemi in tempo reale E.Mumolo
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Array Anno Accademico 2009/2010.
Corso di Informatica (Programmazione)
1 Corso di Informatica (Programmazione) Esercitazione 2 (3 dicembre 2008)
CORSO DI PROGRAMMAZIONE II
Introduzione agli stream e alle classi
Gestione dei processi Un sistema operativo multitasking è in grado di gestire più processi Un processo corrisponde ad un programma in esecuzione. Un programma.
Introduzione alla programmazione lll
APPUNTI SUL LINGUAGGIO C
Corso di Programmazione Concorrente Problemi Classici Valter Crescenzi nz.
Sincronizzazione dei Processi
Sistema Operativo Architettura degli elaboratori 1 - A. Memo La gestione dei processi stallo 9 soluzione corretta si utilizzano un semaforo per.
Selezione (=scelta) con “if-else”
Istruzioni Decisionali
Sincronizzazione fra thread
Strutture di controllo in C -- Flow Chart --
Problema Ci sono 5 signore nel parco. Ognuna di loro ha 1 figlio. Ogni bambino ha 10 figurine di calciatori, per un totale quindi di 50 figurine. Questi.
OPERAZIONI CON STRINGHE Le operazioni più interessanti da fare, per ora, con le stringhe sono: determinare la lunghezza della stringa, cioè quanti caratteri.
CAPITOLO 7.
FILE TESTO OUTPUT INPUT + DATI PROGRAMMA OUTPUT INPUT PROGRAMMA CARICAMENTO DATI FILE DATI.
Interazione e sincronizzazione
Programmazione Mod. B - prof. Burattini - Cap 17 1.
PROBLEMA ALGORITMO PROGRAMMA LINGUAGGI di PROGRAMMAZIONE
Si vuole che lesecutore coniughi non solo il presente indicativo ma anche limperfetto e il passato remoto Acquisisci tempo presente imperfetto passato.
void binario(int n); …………………
Tail recursion: esempio
Sincronizzazione dei processi
Costruzione di una semplice Agenda telefonica Elettronica Esercizio sull'uso delle principali system call Unix.
ND-partizione (A) n   A  somma  0 M  1/2 (  a i ) for i  1 to n do S[i]  choice ({true, false}) if S[i] then somma  somma + a i if somma > M then.
Programmazione Strutturata
Concorrenza 1 Conto corrente Nella famiglia Giambietti non ci sono grossi problemi economici. Infatti il padre, Enea, di professione artista free-lance,
- prof. V. Riboldi - SOTTOPROGRAMMI IN TPASCAL METODO TOP DOWN.
TURBOPASCAL L’iterazione - prof. V. Riboldi -.
4/5/2015E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo – Algoritmi.
1 Esercitazione Sistemi distribuiti: sistemi che risisedono su più calcolatori interconnessi da una rete di comunicazione Algoritmi distribuiti: programmi.
1 Esercitazione finale per il corso di Sistemi Operativi (A.A. 2001/2002)
Programmazione Concorrente e Distribuita
Politecnico di Milano © Domenico Barretta Processi concorrenti in Unix Docente Domenico Barretta Politecnico di Milano
PROVA INTERCORSO MOD.B a.a RICORSIONE ESERCIZI A1.1-A1.6.
Architettura dei Sistemi Operativi
Tecnologie Informatiche ed Elettroniche per le Produzioni Animali
1 Processi e Thread Meccanismi di IPC (2) Problemi classici di IPC.
Processi e Thread Processi Thread
1 Elementi di programmazione concorrente in Java: i threads.
1 Informatica Generale Marzia Buscemi Ricevimento: Giovedì ore , Dipartimento di Informatica, stanza 306-PS o per posta.
1 Risorse e Stallo 2 Risorse (1) Esempi di risorse –stampanti –nastri –tabelle I processi devono accedere alle risorse in un ordine ragionevole Supponiamo.
LIP: 15 Marzo 2005 Vettori di interi. Esercizio proposto Definire una classe VectorInt i cui oggetti sono vettori omogenei di interi ordinati in modo.
NUCLEO DI UN SISTEMA A PROCESSI Il modello a processi prevede l’esistenza di tante unità di elaborazione (macchine virtuali) quanti sono i processi; ogni.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
1 Competizione e cooperazione pag. 88 Cap.3 - Esecuzione concorrente di processi 1.
Transcript della presentazione:

Programmazione Concorrente Esercizi

Esercizio 1 Dati P (P > 2) processi che comunicano per mezzo di un buffer circolare, definire lo schema di un generico processo produttore in cui l'uso coordinato del buffer è regolato per mezzo di semafori.

Processo Produttore type item = … var N: integer; buffer: array[0..N–1] of item; pieno: semaphore (initial 0); vuoto: semaphore (initial N); mutex: semaphore (initial 1); T: integer; repeat < prepara messaggio mess > wait(vuoto); wait(mutex); buffer[T ] := mess; T := (T+1) mod N; signal(mutex); signal(pieno) until(halt);

Esercizio 2 Due processi P e Q comunicano tramite un buffer di capacità un messaggio. P invia messaggi che sono stringhe con dimensione massima di 80 caratteri. Q estrae i caratteri uno alla volta. Definire i dati condivisi e scrivere le procedure invio(x:A;y:B)(y denota la dimensione di x) e ricezione(var ch:char), con type A = array[1..80] of char; B = 1..80;

Soluzione var pieno: semaphore(initial 1); vuoto: semaphore(initial 0); index: integer; buff_msg: A; dim_msg: B; Procedure invio(x:A;y:B); begin wait(pieno); buff_msg := x; dim_msg := y; index := 1; signal(vuoto) end; Procedure ricezione(var ch: char); begin wait(vuoto); ch := buf_msg[index]; index := index + 1; if index > dim_msg then signal(pieno) else signal(vuoto) end; 1 2

Esercizio 3 Un semaforo si dice privato per un processo Pi, quando solo il processo Pi può eseguire sul semaforo la primitiva wait. La primitiva signal sul semaforo può essere invece eseguita anche da altri processi. Il semaforo privato viene inizializzato al valore 0. Si consideri un insieme di processi P1,P2,…,Pn che utilizza un insieme di risorse comuni R1,R2 ,…, Rm. Ogni processo può utilizzare una qualunque delle risorse; la condizione si riduce quindi a valutare se tra tutte le risorse ne esiste una libera. A ciascun processo è assegnata una priorità per cui, in fase di rilascio di una risorsa, tra tutti i processi in attesa, deve essere scelto quello cui corrisponde la massima priorità.

Soluzione Indichiamo con: PS[i] : una variabile binaria che assume il valore 1 se il processo Pi è sospeso, il valore 0 altrimenti. R[j] : una variabile binaria che assume il valore 1 se la risorsa j-esima è occupata, il valore 0 altrimenti. RA[i] : una variabile intera che rappresenta l'indice della risorsa assegnata al processo i-esimo; il valore 0 indica nessuna risorsa. DISP : una variabile intera che indica il numero delle risorse non occupate. SOSP : una variabile intera che indica il numero dei processi sospesi. mutex : un semaforo di mutua eslusione. privi : il semaforo privato del processo Pi.

Soluzione (cont.) Schema di acquisizione risorse del processo Pi begin wait(mutex); if DISP > 0 then begin < Seleziona una risorsa K fra quelle disponibili utilizzando il vettore R >; DISP := DISP - 1; R[K] := 1; RA[i] := K; signal(privi) end; else begin SOSP := SOSP + 1; PS[i] := 1 signal(mutex); wait(privi); < Uso della risorsa RA[i] > begin wait(mutex); if SOSP  0 then begin < Seleziona il processo Pi di priorità maggiore tra quelli sospesi, utilizzando PS >; SOSP := SOSP - 1; PS[i] := 0; RA[i] := m; signal(privi) end; else begin R[m] := 0; DISP := DISP + 1 signal(mutex) Schema di acquisizione risorse del processo Pi Schema di rilascio risorse del processo Pj

Esercizio 4 Utilizzare le primitive wait e signal definite sui semafori per realizzare un semplice programma concorrente per risolvere il problema dei lettori/scrittori che possa causare l'attesa indefinita (starvation) ma non lo stallo (deadlock) dei processi componenti.

Soluzione Nel problema dei processi lettori/scrittori può avvenire il fenomeno di attesa indefinita; infatti, se mentre è presente un processo lettore nella sezione critica, continuano ad arrivare altri lettori, tutti i processi scrittori dovranno aspettare (attesa indefinita) l'uscita dell'ultimo lettore dalla sua sezione critica, rilasciando così la mutua esclusione sul semaforo db.

Soluzione (cont.) semaphore mutex=1, db=1; int rc=0; void Lettore() { wait(mutex); rc++; if (rc == 1) wait(db); signal(mutex); LetturaDB(); rc--; if (rc == 0) signal(db); } void Scrittore() wait(db); ScritturaDB(); signal(db);

Esercizio 5 Si vuole modellare un sistema composto da 1 macchinetta distributrice di aranciata, 1 fornitore di aranciata e N = 20 consumatori di aranciata. Requisiti: La macchinetta fornisce due operazioni: caricamento, che permette al fornitore di rifornire la macchinetta con M = 10 aranciate; prelievo, che permette ad un consumatore di prelevare una aranciata. Il fornitore inizialmente carica la macchinetta, poi si sospende in attesa di essere chiamato a rifornire nuovamente la macchinetta vuota.

Esercizio 5 (cont.) Ogni consumatore ha accesso alla macchinetta per prelevare aranciate. Il primo consumatore che trova la macchinetta scarica deve chiamare il fornitore e attendere una nuova disponibilità di aranciata. Finché la macchinetta è vuota, i consumatori si devono sospendere in attesa di aranciata. Scrivere le procedure carica e preleva che simulano la situazione utilizzando i semafori.

Soluzione type A = array[1..10] of orange; var pieno: semaphore(initial 1); vuoto: semaphore(initial 0); mutex: semaphore(initial 1); index: 1..10; aranciate: A; Procedure carica(x:A); begin wait(pieno); aranciate := x; index := 10; signal(vuoto) end; Procedure prelevai(var y: orange); begin wait(mutex); wait(vuoto); y := aranciate[index]; index := index – 1; if index = 0 then signal(pieno) else signal(vuoto); signal(mutex) end; 1 2

Esercizio 6 Una tribù di N selvaggi mangia in comune da una pentola che può contenere fino a M (M < N) porzioni di stufato di missionario. Quando un selvaggio ha fame si serve, a meno che la pentola sia vuota; in questo caso sveglia il cuoco ed aspetta che questo abbia riempito di nuovo la pentola. La struttura dei processi selvaggio(i) e cuoco è la seguente: Scrivere un monitor (con le procedure serviti e riempi) che regola l’interazione. Il cuoco si sveglia solo quando la pentola è vuota. selvaggio(i) ... begin repeat serviti < mangia > until false end cuoco ... begin repeat riempi until false end

Soluzione 1 2 type cm = Monitor; var pasti: 0..M; cb: boolean; sb: integer; selv,cu: condition; Procedure entry serviti; begin if pasti = 0 then if cb then begin cb := false; cu.signal end else begin sb := sb + 1; selv.wait end; pasti := pasti – 1 Procedure entry riempi; begin if pasti > 0 then begin cb := true; cu.wait end pasti := M while sb > 0 do begin sb := sb – 1; selv.signal if pasti = 0 then pasti = M; end; pasti := 0; cb := false; sb := 0 1 2