Esempio produttori consumatori. Primitive asincrone



Похожие документы
MODELLO AD AMBIENTE GLOBALE

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

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

Il problema del produttore e del consumatore. Cooperazione tra processi

Il costrutto monitor [Hoare 74]

Sincronizzazione e comunicazione tra processi in Unix. usati per trasferire ad un processo l indicazione che un determinato evento si è verificato.

Sistemi Operativi Esercizi Sincronizzazione

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

CAPITOLO 7 - SCAMBIO DI MESSAGGI

Gestione del workflow

Monitor. Introduzione. Struttura di un TDA Monitor

Pronto Esecuzione Attesa Terminazione

FONDAMENTI di INFORMATICA L. Mezzalira

CAPITOLO 27 SCAMBIO DI MESSAGGI

Il costrutto monitor [Hoare 74]

Java Virtual Machine

IPC System V. Code di messaggi

GENERAZIONE ARCHIVIO F24 AGENZIA ENTRATE

INFORMATICA 1 L. Mezzalira

Il descrittore di processo (PCB)

I/O su Socket TCP: read()

Fasi di creazione di un programma

CONTROLLO DI GESTIONE DELLO STUDIO

Descrizione di un algoritmo

Esercizio 2. Client e server comunicano attraverso socket TCP

Comunicazione tra Computer. Protocolli. Astrazione di Sottosistema di Comunicazione. Modello di un Sottosistema di Comunicazione

Sistemi Operativi. Lezione 7 Comunicazione tra processi

Sostituto abilitato Entratel con più sedi: ricezione diretta e incarico ad intermediario abilitato

Sommario. G. Piscitelli

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 5 di Giovedì 15 Luglio 2010 tempo a disposizione 2h30'

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE

Comunicazione. La comunicazione point to point e' la funzionalita' di comunicazione fondamentale disponibile in MPI

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:

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

GESTIONE INFORMATICA DEI DATI AZIENDALI

Procedura SMS. Manuale Utente

Il Sistema Operativo

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

OTTAVA ESPERIENZA DI LABORATORIO. L elaborazione dei files in C

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Protocollo Informatico (D.p.r. 445/2000)

Sistemi Operativi. 3 LEZIONE PROCESSI CORSO DI LAUREA TRIENNALE IN INFORMATICA. Sistemi Operativi 2007/08

Introduzione alla programmazione in C

MANUALE UTENTE. In questo manuale verranno descritte tutte le sue funzioni. Il sistema OTRS è raggiungibile al seguente link:

CREAZIONE DI UN AZIENDA

I file di dati. Unità didattica D1 1

Corso di Sistemi Operativi Ingegneria Elettronica e Informatica prof. Rocco Aversa. Raccolta prove scritte. Prova scritta

Sono casi particolari di MCF : SPT (cammini minimi) non vi sono vincoli di capacità superiore (solo x ij > 0) (i, j) A : c ij, costo di percorrenza

Esempio: dest = parolagigante, lettere = PROVA dest (dopo l'invocazione di tipo pari ) = pprrlogvgante

SUPPORTO F24 MAGNETICO

(Esercizi Tratti da Temi d esame degli ordinamenti precedenti)

ISTRUZIONI PER LA GESTIONE BUDGET

I Codici Documento consentono di classificare le informazioni e di organizzare in modo logico l archiviazione dei file.

Gestione della memoria centrale

Protocollo Informatico (D.p.r. 445/2000)

Computazione multi-processo. Condivisione, Comunicazione e Sincronizzazione dei Processi. Segnali. Processi e Threads Pt. 2

Aprire, preparare un documento da utilizzare come documento principale per una stampa unione.

BPIOL - Bollettino Report Gold. Manuale Utente

Liberare la memoria allocata dinamicamente.

Esercitazione. Formato di compitini e compiti: domande ed esercizi "closed book" G. Ferrari - Reti di calcolatori.

Prova di Esame - Rete Internet (ing. Giovanni Neglia) Lunedì 24 Gennaio 2005, ore 15.00

2.5. L'indirizzo IP identifica il computer di origine, il numero di porta invece identifica il processo di origine.

Corso di Informatica

Gestione del processore e dei processi

Sistema Operativo. Fondamenti di Informatica 1. Il Sistema Operativo

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

UNIVERSITA DEGLI STUDI DI BRESCIA Facoltà di Ingegneria

Strutturazione logica dei dati: i file

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress.

MANUALE DI GESTIONE BANCA DATI INTERNET ED AREA FTP PER ESPERTI DI RAZZA

Hub-PA Versione Manuale utente

(Analisi, Estrazione ed invio via dei cedolini paga).

Internet Banking. Novità della release Martedì 03 Marzo 2009

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.7. Il moltiplicatore binario e il ciclo di base di una CPU

Manuale Amministratore Legalmail Enterprise. Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise

Riccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino

Sottoprogrammi: astrazione procedurale

Arduino: Programmazione

RICERCA DI UN ELEMENTO

Istruzioni (1): L elaborato verrà letto, compilato e fatto girare per verificare la correttezza della sintassi e delle operazioni svolte

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Access. P a r t e p r i m a

Funzioni in C. Violetta Lonati

P a g i n a 1 MANUALE OPERATIVO CIA COMINUCA

Architettura di un calcolatore

Corso di Sistemi di Elaborazione delle Informazioni I Anno 2005/2006. Esercizi entità relazione risolti. a cura di Angela Campagnaro

flusso delle informazioni... 2 password... 3 password/ inserimento di una nuova richiesta... 4 le condizioni di vendita... 6

Nelle reti di calcolatori, le porte (traduzione impropria del termine. port inglese, che in realtà significa porto) sono lo strumento

Транскрипт:

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 messaggi. Il processo ricevente non può dedurre dal contenuto del messaggio ricevuto alcuna informazione sullo stato del mittente. Esempio produttori consumatori Utilizzo delle primitive send e receive asincrone per realizzare uno schema cliente-servitore. Il servitore è un processo che gestisce una risorsa buffer destinata a memorizzare i messaggi inviati da uno o più processi produttori ad uno o più processi consumatori. Ogni processo produttore può inviare un messaggio ad uno qualunque dei processi consumatori.si vogliono evitare situazioni in cui esistano processi consumatori in attesa di messaggi ed altri con messaggi in coda. Il processo buffer gestisce la risorsa di memorizzazione dei messaggi () inviati dai processi produttori e convoglia tali messaggi in ordine FIFO ai processi consumatori. Ogni consumatore invia un messaggio di controllo (pronto) al buffer per denotare il suo stato di pronto a ricevere un messaggio e quindi si mette in attesa del messaggio. Buffer è un processo servitore, produttori e consumatori sono processi clienti. Primitive: Send(mes, proc); proc=receive(&mes); mes è una variabile di tipo messaggio, proc è una variabile di tipo process Ogni processo ha una coda di messaggi a lui inviati gestita FIFO. La primitiva Send inserisce il messaggio mes nella coda di proc e termina La primitiva Receive analizza la coda d ingresso del processo che la esegue: se la coda è vuota il processo viene bloccato; diversamente viene estratto il primo messaggio il cui valore è assegnato alla variabile mes. 1

Due diversi tipi di messaggi per rappresentare le diverse informazioni scambiate tra i processi: produttore - i Processo buffer pronto consumatore - j i messaggi di tipo in-mess ricevuti dal processo buffer : sono caratterizzati da due varianti per tenere conto sia dei inviati dai produttori che dei segnali di controllo (pronto) inviati dai consumatori. i messaggi di tipo out-mess inviati da buffer ai consumatori (). I messaggi inviati a buffer sono ricevuti in ordine FIFO ( o segnali pronto). Quando viene ricevuto un messaggio inviato da un produttore (): questo deve essere inviato ad un consumatore, se uno o più consumatori sono in attesa; diversamente il messaggio deve essere memorizzato nella coda- locale a buffer. Quando viene ricevuto un messaggio da un consumatore (segnale pronto): se nella coda locale vi sono disponibili, ne viene prelevato uno ed inviato al consumatore; in caso contrario il nome del consumatore viene inserito nella coda-consumatori pronti contenente i nomi dei consumatori in attesa di. typedef enum{,prontomsg_ricevuto; typedef struct{ msg_ricevuto specie; union{ tipodato informazione; /* specie == */ tiposegnale ready; /* specie == pronto*/ contenuto; in-mess; typedef tipodato out-mess; 2

void Process_buffer() /* codice del processo buffer*/ { T_queue coda_; /*coda di elementi di tipo Tipodato*/ P_queue consumatori_pronti; /*coda di nomi di processo*/ Tipodato inf; process consumatore, proc; in-mess in; out-mess out; while (1) { proc= Receive(&in); switch (in.specie) {case : if (<consumatori-pronti e` vuota>) <inserzione di in.contenuto.informazione nella coda_>; else { <estrazione di consumatore da consumatori-pronti>; out=in.contenuto.informazione: Send(out,consumatore); break; case pronto: if (<coda_ e` vuota>) <inserzione proc in consumatori-pronti>; else { <estrazione di inf da coda_>; out=inf; Send(out,proc); /* fine switch*/ /* fine while*/ Codice produttore: void produttore-i() { in-mess mess; Tipodato C; mess.specie=; while(1) { <produci contenuto C>; mess.contenuto.informazione=c; Send(mess,buffer); Codice consumatore: void consumatore-j() { in-mess mess1, mess2; mess1.specie=pronto; while(1) { Send(mess1,buffer); proc=receive(&mess2); <consuma mess2>; Uso delle porte Più canali di ingresso per ogni processo ciascuno dedicato a messaggi di tipo diverso. Utilizzo di uno schema di ricezione che consenta di specificare, sulla base dello stato interno del processo ricevente, l insieme dei canali sui quali attendere il messaggio. Definizione di una porta x: port x:t; /* variabile di tipo porta*/ dove T e` il tipo dei messaggi associati alla porta. L identificatore della porta è visibile all esterno del processo. Nel caso di più porte con lo stesso nome, si utilizza la notazione: nome-processo.nome-porta Primitive: Send_to(x, m); proc= Receive_from(x,&m); Due porte per il processo buffer, una per ricevere i messaggi e l altra per messaggi pronto. Il tipo della prima porta corrisponde al tipo T dei inviati dai produttori. Il tipo della seconda porta corrisponde al tipo predefinito signal che contraddistingue i messaggi contenenti solo segnali di sincronizzazione. Il supporto a tempo di esecuzione deve fornire tante code di ingresso per ciascun processo quante sono le porte in esso dichiarate 3

void Process_buffer() { port porta-:t; porta controllo:signal; T inf; signal pronto; process produttore,consumatore; do /* comando con guardia ripetitivo*/ produttore=receive_from(porta-, &inf); consumatore=receive_from(controllo, &pronto); Send_to(consumatore.inport, Inf); consumatore= Receive_from(controllo,&pronto); produttore:=receive_from (porta-,&inf); Send_to(consumatore.inport, Inf); end; Codice produttore: void produttore-i() { T inf; while (1) { <produci contenuto>; inf=<contenuto>; Send_to(porta-, inf); Codice consumatore: void consumatore-j() { T inf; process buffer; signal pronto; port inport:t; while(1) { Send_to(controllo, pronto); buffer=receive_from(inport,inf); <consuma inf>; Esempio produttori-consumatori con limitazione del numero di messaggi memorizzati N numero di messaggi memorizzati da buffer. Il produttore rimane in attesa di un segnale di abilitazione all invio dei da parte di buffer e soltanto quando tale messaggio è arrivato invia il messaggio. produttore - i ok - prod ok to - send Processo buffer ok - cons consumatore - j void Process_buffer() { port porta-:t; port controllo-prod: signal; port controllo-cons: signal; T inf; signal ok-prod, ok-cons, ok-to-send; process prod, cons; int cont=0; /* contatore dei messaggi nel buffer*/ do (cont<n); prod=receive_from(controllo-prod,&ok-prod); cont++; Send_to(prod.okport, ok-to-send); (cont>0); cons=receive_from(controllo-cons,&ok-cons); prod=receive_from(porta-,&inf); cont--; Send_to(cons.inport, inf); end; 4

void produttore_i() { port okport: signal; T inf; signal ok-prod, ok-to-send; process buffer; while (1) { <produci contenuto>; inf=<contenuto>; Send_to(controllo-prod, ok-prod); buffer=receive_from(okport, ok-to-send); Send_to(porta-,inf); Lo schema del processo consumatore rimane lo stesso. ESEMPIO DI SISTEMA PIPELINE Lettura degli N record di un file, loro elaborazione e creazione di un secondo file contenente gli N record elaborati. Il processo di ingresso legge da file_1 un record alla volta e lo invia al processo di elaborazione il quale, a sua volta, riceve il record, lo elabora e lo invia al processo di uscita. Quest ultimo riceve, uno alla volta, i record elaborati e li scrive sul file_2. /* Programma esempio-pipeline */ processo Ingresso processo Elabora processo Uscita file n. 1 file n. 2 FILE file1,file2; /*file of T*/ process Ingresso, Elabora, Uscita;... /* codice del proc. Ingresso: */ void Proc_Ingresso() {T buf; int i; for(i=1; i<=n; i++) { Read(file1,&buf); Send(buf, Elabora); 5

/* codice del proc. Elabora: */ void Proc_Elabora() {T buf-in, buf-out; process proc; int i; for(i=1;i<=n; i++) { proc=receive(&buf-in); buf-out:=<risultato elaborazione buf-in >; Send(buf-out,Uscita); /* codice del proc. Uscita: */ void Proc_Uscita() {T buf; process proc; int i; for(i=1;i<=n; i++) { proc=receive(&buf); write(file2,buf); L uso di primitive con specifiche di canale di tipo simmetrico potrebbe risultare più indicato in questo caso. Un controllo del flusso dei messaggi può essere ottenuto per ogni copia di processi con l utilizzazione di un processo buffer. 6