Monitor pthreads. Esercizio
|
|
|
- Emilio Baldini
- 10 anni fa
- Просмотров:
Транскрипт
1 Monitor pthreads Esercizio
2 Esercizio monitor Una società di noleggio di automobili offre ai propri clienti tre tipi di automobili: piccole, medie, grandi. Ogni tipo di auto è disponibile in numero limitato (Npiccole, Nmedie, Ngrandi). I clienti del noleggio possono essere di due tipi: convenzionati, non convenzionati. Ogni cliente richiede una macchina di un particolare tipo (piccola, media, o grande); il noleggio, sulla base della propria disponibilità corrente : assegnerà a chi ha richiesto una macchina piccola, preferenzialmente una macchina piccola (se è disponibile), oppure una media (solo se vi è immediata disponibilità di medie). assegnerà a chi ha richiesto una media, preferenzialmente una media (se è disponibile), oppure una grande (solo se vi è immediata disponibilità di grandi). a chi richiede una macchina grande, deve essere comunque assegnata una grande. 2
3 ..continua Il cliente, dopo aver ritirato la macchina presso la sede del noleggio, la usa per un intervallo di tempo arbitrario, e successivamente procede alla restituzione della macchina. Le regole del noleggio prevedono che ritiro e restituzione delle auto avvengano sempre presso la stessa sede: non è prevista la restituzione in una sede diversa da quella del ritiro. Per la gestione del noleggio, vale inoltre il seguente vincolo: nel ritiro delle auto, i clienti convenzionati devono essere prioritari rispetto ai non convenzionati. Definire una politica di gestione del noleggio, e la si realizzi, utilizzando la libreria pthread. 3
4 1. Quali processi? Impostazione 2. Qual è la struttura di ogni processo? 3. Definizione del monitor per gestire la risorsa 4. Definizione delle procedure "entry" 5. Definizione del programma concorrente 4
5 1. Quali processi? Impostazione clienti convenzionati clienti non convenzionati 2. Quale struttura per i processi? Convenzionato: A=richiesta (nolo, Auto, Conv); <usa l'auto A> restituzione(nolo,a); Non Convenzionato: A=richiesta (nolo, Auto, NonConv); <usa l'auto A> restituzione(nolo,a); 5
6 3. Definizione del monitor noleggio: lo stato del noleggio e`definito da: numero auto piccole, medie e grandi disponibili. lo stato e` modificabile dalle operazioni di: richiesta: acquisizione di un'auto da parte di un cliente restituzione di un auto da parte di un cliente il noleggio e`una risorsa da accedere in modo mutuamente esclusivo: predispongo un mutex per il controllo della mutua esclusione nell'esecuzione delle operazioni di accesso e di rilascio: MUX ogni cliente e` rappresentato da un thread, caratterizzato dal tipo dell'auto richiesta (P, M, G) e dal tipo del cliente (Convenzionato o No): una coda per ogni tipo di cliente (Conv, NonConv) e per ogni tipo di auto (P, M, G). Incapsulo il tutto all'interno del tipo struct noleggio 6
7 Tipo associato al noleggio typedef struct { int disp[3]; /* numero auto disp. (per ogni cat.)*/ pthread_mutex_t MUX; /*mutex */ pthread_cond_t Q[3][2]; /* Q[tipoauto][tipocliente] */ noleggio; 7
8 4.Definizione delle operazioni entry: richiesta(noleggio, auto, cliente): operazione eseguita da ogni thread per ottenere un'auto a nolo; e` possibile ottenere un'automobile di categoria diversa -> funzione restituzione(noleggio, auto): operazione eseguita dai thread per restituire un'auto. 8
9 #include <stdio.h> #include <pthread.h> Soluzione #define TotP 10 /* numero totale auto piccole */ #define TotM 10 /* numero totale auto medie */ #define TotG 10 /* numero totale auto grandi */ #define P 0 /*indice auto piccole*/ #define M 1 /*indice auto medie*/ #define G 2 /*indice auto grandi*/ #define Conv 0 #define NonConv 1 typedef struct { int disp[3]; /* numero auto disp. (per cat.)*/ pthread_mutex_t MUX; /*mutex */ pthread_cond_t Q[3][2]; /* Q[tipoauto][tipocliente] */ noleggio; 9
10 /* funzione entry richiesta auto: */ int richiesta (noleggio *n, int A, int cl) { int ottenuta; pthread_mutex_lock (&n->mux); switch(a){ case P: case M: if ((n->disp[p]==0)&&(n->disp[m]==0)) { while(!n->disp[p]) pthread_cond_wait (&n->q[p][cl], &n->mux); ottenuta=p; else if (n->disp[p]!=0) ottenuta=p; else ottenuta=m; break; if ((n->disp[m]==0)&&(n->disp[g]==0)) { while(!n->disp[m]) pthread_cond_wait (&n->q[m][cl], &n->mux); ottenuta=m; else if (n->disp[m]!=0) ottenuta=m; else ottenuta=g; break; /* continua..*/ 10
11 /*..continua richiesta: */ case G: while (n->disp[g]==0) pthread_cond_wait(&n->q[g][cl],&n->mux); ottenuta=g; break; n->disp[ottenuta]--; pthread_mutex_unlock (&n->mux); return ottenuta; 11
12 /* procedure entry restituzione auto: */ void restituzione (noleggio *n, int A) { pthread_mutex_lock (&n->mux); /* aggiorna lo stato del noleggio */ n->disp[a]++; /* risveglio in ordine di priorita` */ pthread_cond_signal (&n->q[a][conv]); pthread_cond_signal (&n->q[a][nonconv]); pthread_mutex_unlock (&n->mux); 12
13 /* Inizializzazione del noleggio */ void init (noleggio *n) { int i, j; pthread_mutex_init (&n->mux, NULL); for (i=0; i<2; i++) for (j=0; j<3; j++) pthread_cond_init (&n->q[i][j], NULL); n->disp[p]=totp; n->disp[m]=totm; n->disp[g]=totg; return; 13
14 /* Programma di test: genero MAXT thread convenzionati e non convenzionati per ogni tipo di auto */ #define MAXT 50 /* num. di thread per tipo e per auto */ noleggio n; void *clienteconv (void *arg) /*cliente "convenzionato"*/ { int A, i; printf("thread C. %d: richiedo un'auto di tipo %s\n\n", pthread_self(),(char *)arg); A=atoi((char *)arg); /*A auto richiesta */ A=richiesta (&n, A, Conv); printf(" thread C.%lu: ottengo un'auto %d\n\n", pthread_self(),a); /* USO..: */ restituzione(&n,a); printf("thread C:%lu: ho restituito l'auto.\n\n", pthread_self()); return NULL; 14
15 void *clientenonconv (void *arg) /* cliente non convenzionato*/ { int A, i; printf("thread NC. %d: richiedo un'auto di tipo %s\n\n", pthread_self(),(char *)arg); A=atoi((char *)arg); /*A auto richiesta */ A=richiesta (&n, A, NonConv); printf(" thread NC. %lu: ottengo un'auto %d\n\n", pthread_self(),a ); /* USO..: */ restituzione(&n,a); printf("thread NC.%lu: ho restituito l'auto.\n\n", pthread_self()); return NULL; main () { pthread_t th_c[3][maxt], th_nc[3][maxt]; int i,j; void *retval; init (&n); 15
16 /*CREAZIONE thread: */ for (i=0; i<maxt; i++) { pthread_create (&th_c[0][i], NULL, clienteconv, "0"); pthread_create (&th_c[1][i], NULL, clienteconv, "1"); pthread_create (&th_c[2][i], NULL, clienteconv, "2"); for (i=0; i<maxt; i++) { pthread_create (&th_nc[0][i], NULL, clientenonconv, "0"); pthread_create (&th_nc[1][i], NULL, clientenonconv, "1"); pthread_create (&th_nc[2][i], NULL, clientenonconv, "2"); /* Attesa teminazione threads :*/ for (i=0; i<maxt; i++) { pthread_join (&th_c[0][i], &retval); pthread_join (&th_c[1][i], &retval); pthread_join (&th_c[2][i], &retval); for (i=0; i<maxt; i++) { pthread_join (&th_nc[0][i], &retval); pthread_join (&th_nc[1][i], &retval); pthread_join (&th_nc[2][i], &retval); 16
Sistemi Operativi L-A. Esercizi 14 Giugno 2007. Esercizio monitor
Sistemi Operativi L-A Esercizi 14 Giugno 2007 Esercizio monitor Si consideri la toilette di un ristorante. La toilette è unica per uomini e donne. Utilizzando la libreria pthread, si realizzi un'applicazione
Esercizio sul Monitor. Ponte con utenti grassi e magri 11 Novembre 2013
Esercizio sul Monitor Ponte con utenti grassi e magri 11 Novembre 2013 1 Ponte con utenti grassi e magri Si consideri un ponte pedonale che collega le due rive di un fiume. Al ponte possono accedere due
Perche le CPU multicore
Perche le CPU multicore I processi industriali producono chip sempre piu densi in termini di transistor 2000 Inoltre: Watt ~ Volt 2 x frequenza Frequenza ~ Volt Watt ~ frequenza 3 Il rapporto Watt/mm 2
I thread nel sistema operativo LINUX: Linuxthreads
I thread nel sistema operativo LINUX: Linuxthreads LinuxThreads: Caratteristiche Processi leggeri realizzati a livello kernel System call clone: int clone(int (*fn) (void *arg), void *child_stack, int
Il costrutto monitor
Il Monitor 1 Monitor Definizione del monitor Esempi d uso Realizzazione del costrutto monitor Realizzazione di politiche di gestione delle risorse Chiamate innestate a procedure del monitor Realizzazione
Sistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 16 luglio 2015 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare
Thread: sincronizzazione Esercitazioni del 09 Ottobre 2009
Thread: sincronizzazione Esercitazioni del 09 Ottobre 2009 Luca Fossati, Fabrizio Castro, Vittorio Zaccaria October 10, 2009 Sincronizzazione - 1 1 Esercizio 1: Sincronizzazione - 1 Qual è il problema
Esercizio monitor con pthreads
Esercizio monitor con pthreads Si consideri la pista di pattinaggio sul ghiaccio di una località turistica montana. La pista di pattinaggio è aperta a tutti. In particolare i clienti dell impianto si suddividono
I puntatori e l allocazione dinamica di memoria
I puntatori e l allocazione dinamica di memoria L allocazione delle variabili Allocazione e rilascio espliciti di memoria Le funzioni malloc e free 2 2006 Politecnico di Torino 1 Allocare = collocare in
Laboratorio su Programmazione Concorrente in C. Problemi classici e derivati Dalla Ottava lezione di laboratorio in avanti
Laboratorio su Programmazione Concorrente in C Problemi classici e derivati Dalla Ottava lezione di laboratorio in avanti NOTA BENE: E INSISTO!!!!! Usare il comando man nomefunzionedilibreria per ottenere
Esercitazione 2! Mutex e semafori POSIX. 3 Novembre 2016
Esercitazione 2! Mutex e semafori POSIX 3 Novembre 2016 Strumenti di sincronizzazione nella libreria LinuxThread I semafori nelle librerie pthread e LinuxThreads La libreria pthread definisce soltanto
2. I THREAD. 2.1 Introduzione
2. I THREAD 2.1 Introduzione Il tipo di parallelismo che è opportuno avere a disposizione nelle applicazioni varia in base al grado di cooperazione necessaria tra le diverse attività svolte in parallelo:
Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)
Strutture Strutture e Unioni DD cap.10 pp.379-391, 405-406 KP cap. 9 pp.361-379 Strutture Collezioni di variabili correlate (aggregati) sotto un unico nome Possono contenere variabili con diversi nomi
Esempio: la Toilette Unisex
Esempio: la Toilette Unisex Si consideri la toilette di un ristorante. La toilette è unica per uomini e donne. Utilizzando i semafori forniti dalla libreria LinuxThreads, si realizzi un'applicazione concorrente
Processi programma processo processo Stati di un processo Attesa di caricamento new Pronto ( ready ) Esecuzione running Waiting ( in Attesa )
Processi Un processo è l insieme delle azioni compiute dal processore per eseguire un programma. Si può semplificare dicendo che "un processo è un programma in esecuzione". Per meglio definire un processo
= PTHREAD_MUTEX_INITIALIZER
MUTEX Prof.ssa Sara Michelangeli Quando si programma in modalità concorrente bisogna gestire le problematiche di accesso alle eventuali sezioni critiche. Una sezione critica è una sequenza di istruzioni
Computazione multi-processo. Condivisione, Comunicazione e Sincronizzazione dei Processi. Segnali. Processi e Threads Pt. 2
Computazione multi-processo Avere più processi allo stesso momento implica/richiede Processi e Threads Pt. 2 Concorrenza ed efficienza Indipendenza e protezione dei dati ma deve prevedere/permettere anche:
Sincronizzazione. I semafori Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino
Sincronizzazione I semafori Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino 2 Introduzione Le soluzioni Software sono complesse da utilizzare dal punto di vista del programmatore
2. Spiegare brevemente qual è la funzione del compilatore e la sua importanza per il programmatore.
1 Esercizio 1 1. Immaginate di avere una calcolatore che invece che poter rappresentare i classici due valori per ogni bit (0/1) possa rappresentare 7 valori per ogni bit. (a) Quanti bit gli occorreranno
Creazione di thread. In Linux si utilizzano le librerie pthread (POSIX thread) per lavorare con i thread:
Thread Un thread o lightweight process (LWP) è un unità di utilizzo della CPU che consiste di: un program counter, un insieme di registri, uno stack space. Tale unità condivide con gli altri peer thread
La struttura dati ad albero binario
La struttura dati ad albero binario L albero è una struttura dati nella quale le informazioni sono organizzate in modo gerarchico, dall alto verso il basso. Gli elementi di un albero si chiamano nodi,
Lab. di Sistemi Operativi - Esercitazione n 9- -Thread-
Lab. di Sistemi Operativi - Esercitazione n 9- -Thread- 1 Sommario Esercizi su: Comunicazione tra processi: la funzione pipe() Condivisione dati e codice tra due o più processi: concetto di Thread 2 -
I Thread in Java e POSIX
I Thread in Java e POSIX Thread e Multithreading Per risolvere i problemi di efficienza del modello a processi pesanti (modello ad ambiente locale) è possibile far ricorso al modello ad ambiente globale,
Monitor. Introduzione. Struttura di un TDA Monitor
Monitor Domenico Cotroneo Dipartimento di Informatica e Sistemistica Introduzione E stato introdotto per facilitare la programmazione strutturata di problemi in cui è necessario controllare l assegnazione
Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati
Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati Condizione di sincronizzazione Qualora si voglia realizzare una determinata politica di gestione delle risorse,la decisione se ad
Cosa sono i semafori?
Mutex Cosa sono i semafori? I semafori sono primitive fornite dal sistema operativo per permettere la sincronizzazione tra processi e/o thread. Semafori di mutua esclusione con i thread POSIX 2 Operazioni
Esercizio: gestione di un conto corrente
Esercizio: gestione di un conto corrente Si realizzi un conto corrente bancario mediante: - una ASTRAZIONE DI DATO - un TIPO DI DATO ASTRATTO Il conto corrente è caratterizzato dalle seguenti informazioni:
Java Virtual Machine
Java Virtual Machine programmi sorgente: files.java compilatore files.class bytecode linker/loader bytecode bytecode Java API files.class interprete macchina ospite Indipendenza di java dalla macchina
Il costrutto monitor [Hoare 74]
Il monitor 1 Il costrutto monitor [Hoare 74] Definizione: Costrutto sintattico che associa un insieme di operazioni (entry, o public) ad una struttura dati comune a più processi, tale che: Le operazioni
Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2012-13 14 giugno 2013
Cognome Nome Matricola Postazione PC Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2012-13 14 giugno 2013 Testo Il database di una banca è costituito da due vettori paralleli. Il primo
Appello di Informatica B
Politecnico di Milano Facoltà di Ingegneria Industriale 19 febbraio 2004 Appello di Informatica B Prof. Angelo Morzenti - Prof. Vincenzo Martena Cognome e nome: Matricola: Tipo di prova: recupero I prova
Ottava Esercitazione. introduzione ai thread java mutua esclusione
Ottava Esercitazione introduzione ai thread java mutua esclusione Agenda Esempio 1 Concorrenza in Java: creazione ed attivazione di thread concorrenti. Esercizio 2 da svolgere Concorrenza in Java: sincronizzazione
ACSO Programmazione di Sistema e Concorrente
ACSO Programmazione di Sistema e Concorrente P2 Modello Thread 2/12/2015 programma e parallelismo il tipo di parallelismo dipende dal grado di cooperazione (scambio di informazione) necessario tra attività
Introduzione alla programmazione in C
Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale
Relazione tra thread e processi
I Thread POSIX Relazione tra modello a processi e a thread Creazione di un thread Attesa Distacco Terminazione Ricerca e confronto Inizializzazione dinamica Relazione tra thread e processi Nel modello
Problem solving avanzato
Problem solving avanzato Formulazione del problema Struttura dati e algoritmo Il programma 2 26 Politecnico di Torino 1 Dati in input (1/4) Sono dati due file di testo, contenenti le informazioni sulle
Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli
CODICE Le fonti in cui si possono trovare tutorial o esempi di progetti utilizzati con Arduino si trovano nel sito ufficiale di Arduino, oppure nei forum di domotica e robotica. Il codice utilizzato per
Corso di Laboratorio di Sistemi Operativi
Corso di Laboratorio di Sistemi Operativi Lezione 7 Alessandro Dal Palù email: [email protected] web: www.unipr.it/~dalpalu Threads Un thread è l unità di base per l utilizzo della CPU. Composto
Il costrutto monitor [Hoare 74]
Il monitor 1 Il costrutto monitor [Hoare 74] Definizione: Costrutto sintattico che associa un insieme di operazioni (entry o public) ad una struttura dati comune a più processi, tale che: Le operazioni
Laboratorio di Algoritmi e Strutture Dati
Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ 1 Operazioni su Liste Doppie e Circolari 2 1 Indice Liste puntate semplici: Gli elementi sono
Sottoprogrammi: astrazione procedurale
Sottoprogrammi: astrazione procedurale Incapsulamento di un segmento di programma presente = false; j = 0; while ( (j
Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a. 2012-13 25 luglio 2013
Cognome Nome Matricola Postazione PC Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a. 2012-13 25 luglio 2013 Testo Il database di una banca è costituito da due vettori paralleli. Il
I THREAD. thread 2. thread 1
I THREAD Un thread è un singolo flusso di istruzioni, all interno di un processo, che lo scheduler può fare eseguire separatamente e concorrentemente con il resto del processo. Per fare questo uno thread
Esempio produttori consumatori. Primitive asincrone
Primitive asincrone Send non bloccante: il processo mittente, non appena inviato il messaggio, prosegue la sua esecuzione. Il supporto a tempo di esecuzione deve fornire un meccanismo di accodamento dei
Gestione dei File in C
Gestione dei File in C Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania [email protected] http://www.diit.unict.it/users/mpalesi Sommario In questo documento saranno introdotte
La gestione della memoria
La gestione della memoria DOTT. ING. LEONARDO RIGUTINI DIPARTIMENTO INGEGNERIA DELL INFORMAZIONE UNIVERSITÀ DI SIENA VIA ROMA 56 53100 SIENA UFF. 0577234850-7102 [email protected] HTTP://WWW.DII.UNISI.IT/~RIGUTINI/
void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }
FUNZIONI 57. Cosa servono le funzioni? A spezzare il programma in diverse parti relativamente indipendenti fra loro, ovvero interagenti sono attraverso i parametri di input ed IL VALORE di uscita. In questo
Concetti chiave. Struct. Variabili strutturate: il tipo struct Elementi di una struttura typedef e struct Array di strutture
Concetti chiave Struct Variabili strutturate: il tipo struct Elementi di una struttura typedef e struct Array di strutture Struct Per aggregare elementi di tipo diverso si utilizza una struttura. struct
Esercizi sul Monitor in Java
Esercizi sul Monitor in Java 1 I filosofi a cena (E. Dijkstra, 1965) 5 filosofi sono seduti attorno a un tavolo circolare; ogni filosofo ha un piatto di spaghetti tanto scivolosi che necessitano di 2 forchette
RICERCA DI UN ELEMENTO
RICERCA DI UN ELEMENTO Si legga da tastiera un array di N elementi (N stabilito dall utente) Si richieda un elemento x il programma deve cercare l elemento x nell array Se l elemento è presente, deve visualizzare
Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007
Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007 Dott.Davide Di Ruscio Dipartimento di Informatica Università degli Studi di L Aquila Lezione del 08/03/07 Nota Questi lucidi sono tratti
Un esercizio d esame. Flavio De Paoli
Un esercizio d esame e note sulla gestione dei dati Flavio De Paoli Il testo (Appello 22 ottobre 2001) Una stazione di servizio dispone di n distributori di benzina. I clienti si presentano a uno dei distributori
