CAPITOLO 27 SCAMBIO DI MESSAGGI



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

Pronto Esecuzione Attesa Terminazione

Sistemi Operativi (modulo di Informatica II)

Introduzione alle applicazioni di rete

Esempio produttori consumatori. Primitive asincrone

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

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

CAPITOLO 7 - SCAMBIO DI MESSAGGI

Sommario. G. Piscitelli

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

Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione.

Reti di Telecomunicazione Lezione 8

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

Gestione della memoria centrale

Comunicazione tra Processi

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini.

MODELLO AD AMBIENTE GLOBALE

Mutua esclusione distribuita

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:

UTILIZZATORI A VALLE: COME RENDERE NOTI GLI USI AI FORNITORI

Il problema del produttore e del consumatore. Cooperazione tra processi

Approccio stratificato

Database. Si ringrazia Marco Bertini per le slides

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

Cenni di programmazione distribuita in C++ Mauro Piccolo

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

Il glossario della Posta Elettronica Certificata (PEC) Diamo una definizione ai termini tecnici relativi al mondo della PEC.

ARCHITETTURA DI RETE FOLEGNANI ANDREA

Organizzazione degli archivi

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE

TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI

Il Sistema Operativo. C. Marrocco. Università degli Studi di Cassino

Scheduling della CPU. Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux

Sistema Operativo. Fondamenti di Informatica 1. Il Sistema Operativo

Strutturazione logica dei dati: i file

I Thread. I Thread. I due processi dovrebbero lavorare sullo stesso testo

La Gestione delle risorse Renato Agati

MODELLISTICA DI IMPIANTI E SISTEMI 2

File system II. Sistemi Operativi Lez. 20

NAVIGAORA HOTSPOT. Manuale utente per la configurazione

Il Sistema Operativo

FPf per Windows 3.1. Guida all uso

GESTIONE DEI PROCESSI

Modello di Controllo dell Accesso basato sui ruoli (RBAC)

Inizializzazione degli Host. BOOTP e DHCP

Protezione. Protezione. Protezione. Obiettivi della protezione

CREAZIONE DI UN AZIENDA

Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014)

(Esercizi Tratti da Temi d esame degli ordinamenti precedenti)

SCENARIO. Personas ALICE Lucchin / BENITO Condemi de Felice. All rights reserved.

Il sapere tende oggi a caratterizzarsi non più come un insieme di contenuti ma come un insieme di metodi e di strategie per risolvere problemi.

Capitolo Quarto...2 Le direttive di assemblaggio di ASM Premessa Program Location Counter e direttiva ORG

Gestione del processore e dei processi

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

Monitor. Introduzione. Struttura di un TDA Monitor

CAPITOLO 24 I MONITOR

La Fatturazione Elettronica

Introduzione ai Metodi Formali

Scenario di Progettazione

La gestione di un calcolatore. Sistemi Operativi primo modulo Introduzione. Sistema operativo (2) Sistema operativo (1)

Laboratorio di Algoritmi e Strutture Dati

Informatica per la comunicazione" - lezione 13 -

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

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

Sistemi Operativi. 5 Gestione della memoria

Creare una nuova spedizione personalizzata.

Fasi di creazione di un programma

Capitolo 13. Interrogare una base di dati

MANUALE UTENTE. TeamPortal Liste Distribuzioni

La Firma Digitale La sperimentazione nel Comune di Cuneo. Pier Angelo Mariani Settore Elaborazione Dati Comune di Cuneo

Sistemi Operativi STRUTTURA DEI SISTEMI OPERATIVI 3.1. Sistemi Operativi. D. Talia - UNICAL

Il costrutto monitor [Hoare 74]

INFORMATICA. Il Sistema Operativo. di Roberta Molinari

Progettazione : Design Pattern Creazionali

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. D. Talia - UNICAL. Sistemi Operativi 9.1

EXPLOit Content Management Data Base per documenti SGML/XML

Lezione 8. La macchina universale

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

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

Scenari esemplificativi di utilizzo delle Mailing List

Soluzione dell esercizio del 2 Febbraio 2004

Università Politecnica delle Marche. Progetto Didattico

Concetto di Funzione e Procedura METODI in Java

Progettazione di Basi di Dati

Introduzione alla Programmazione Orientata agli Oggetti. Classi, Oggetti e Messaggi

INTERNET e RETI di CALCOLATORI A.A. 2011/2012 Capitolo 4 DHCP Dynamic Host Configuration Protocol Fausto Marcantoni fausto.marcantoni@unicam.

Come si può vedere, la regola è stata fatta in modo da spostare tutti i messaggi di Spam nella cartella del cestino.

Transcript:

CAPITOLO 27 SCAMBIO DI MESSAGGI SCAMBIO DI MESSAGGI Sia che si guardi al microkernel, sia a SMP, sia ai sistemi distribuiti, Quando i processi interagiscono fra loro, devono soddisfare due requisiti fondamentali: devono essere sincronizzati per garantire la mutua esclusione, e hanno bisogno di scambiarsi informazioni per cooperare. Un modo per soddisfare entrambi è lo scambio di messaggi: tale tipologia di comunicazione è implementato per sistemi a singolo processore basati su l'interazione tra microkernel e ha il vantaggio di un implementazione naturale sui sistemi distribuiti e sui processi è multiprocessori con memoria condivisa (SMP). fondamentalmente Lo scambio di messaggi prevede che non ci siano risorse condivise (per questo viene affidato allo detta anche shared nothing, nessuna condivisione), inoltre non include meccanismi quali l uso scambio di dei lock o analoghi per ottenere la mutua esclusione poiché l uso dei soli messaggi permette, ai messaggi. processi che devono interagire tra loro, di garantirsi la mutua esclusione e di scambiare informazioni per la cooperazione. In questa tecnica si sfrutta un canale di comunicazione logico sul quale viaggia un messaggio destinato ad un indirizzo. PRIMITIVE DI SINCRONIZZAZIONE Due processi possono interagire fra di loro scambiandosi messaggi, cosa che fanno usando le due primitive send() receive() PRIMITIVE DI SINCRONIZZAZIONE send(destinazione,messaggio) receive(sorgente,messaggio) Un sistema di Inter Process Communication (IPC) fornisce almeno le due primitive send(messaggio) e receive(messaggio). La comunicazione avviene tramite queste due sole primitive. La specifica di queste due primitive può dunque essere: send(destinazione, messaggio) receive(sorgente, messaggio) CARATTERISTICHE PROGETTUALI DI SISTEMI A SCAMBIO DI MESSAGGI Sono ora presentate le caratteristiche di progettazione dei sistemi di messaggi per comunicazione interprocessore e sincronizzazione. Una send può essere bloccante o non bloccante, invece una receive può essere bloccante, non bloccante o con test di messaggio d arrivo. Rispetto all indirizzamento questo può essere diretto o indiretto. Il formato di un messaggio può essere a lunghezza fissa o variabile. Il tipo di gestione delle code dei messaggi può essere FIFO o a priorità. SINCRONIZZAZIONE 1

La slide elenca le combinazioni più comuni del send e receive. Send bloccante e receive bloccante Sia il mittente sia il ricevente sono bloccati fino al completamento dell operazione (rendez-vous). Tale combinazione permette una sincronizzazione stretta tra processi. A questa tipologia di scambio di messaggi appartiene anche la chiamata di procedura remota (RPC Remote Procedure Call) detta anche rendez-vous esteso Send non bloccante e receive bloccante Anche se il mittente può continuare, il ricevente deve aspettare l arrivo del messaggio. Questa combinazione permette di inviare vari messaggi a vari destinatari molto velocemente. Il processo che è in attesa di ricevere un messaggio per poter continuare rimane bloccato fino alla avvenuta ricezione del messaggio. Es.: server che fornisce un servizio o una risorsa ad altri processi. Send non bloccante e receive non bloccante Né il mittente né il destinatario deve aspettare In molti casi scegliere una send non bloccante è la più naturale opzione per la programmazione concorrente. Se la primitiva send è usata per chiamare un operazione di output, come la stampa, essa consente al processo di mandare la richiesta in forma di messaggio e continuare l esecuzione. Un pericolo potenziale della send non bloccante è che un errore potrebbe portare ad una situazione in cui un processo continua a generare messaggi; siccome non c è modo di bloccare il mittente, i messaggi possono consumare le risorse di sistema, in particolare il tempo di processore e lo spazio dei buffer, a danno degli altri processi e del sistema operativo. Inoltre, la send non bloccante lascia al programmatore il compito di controllare che un messaggio arrivi a destinazione: i processi devono mandare messaggi di risposta per confermare la ricezione di un messaggio. Per la primitiva receive, la versione bloccante sembra la scelta più naturale per molti casi di programmazione concorrente. In genere un processo che richiede un messaggio avrà bisogno, per procedere, delle informazioni in esso contenute; tuttavia, se un messaggio è perso, cosa che può accadere nei sistemi distribuiti, o se un processo fallisce prima di poter mandare il messaggio, il processo ricevete rimarrà bloccato per sempre. Il problema si può risolvere utilizzando una receive non bloccante; in questo secondo caso il pericolo è che ogni messaggio, inviato dopo che il processo ha già effettuato la receive corrispondente, andrà perso. Un altro approccio possibile è dare al processo la possibilità di controllare se c è un messaggio in arrivo prima di effettuare la receive; oppure specificare più di un mittente in una receive. Quest ultima possibilità è utile quando un processo aspetta messaggi proveniente da processi diversi, e se solo un messaggio è sufficiente per continuare l esecuzione. INDIRIZZAMENTO Per instaurare una comunicazione fra processi è necessario che fra i parametri delle specifiche send e receive vi siano il destinatario e il mittente dei messaggi. Ci sono due tipi di indirizzamenti: diretto e indiretto. 2

INDIRIZZAMENTO DIRETTO Nell indirizzamento diretto, ogni processo che intenda comunicare deve nominare esplicitamente il ricevente e il trasmittente della comunicazione. In questo schema le funzioni primitive send e receive si definiscono come segue: send(p, messaggio) consente di inviare un messaggio al processo P. receive(q,messaggio) consente di ricevere un messaggio dal processo Q. All interno di questo schema, un canale di comunicazione ha le seguenti caratteristiche: tra ogni coppia di processi che intendono comunicare si stabilisce automaticamente un canale ed i processi devono conoscere solo la reciproca identità; un canale è associato esattamente a due processi ed esiste esattamente un canale tra ciascuna coppia di processi. Questo schema ha una simmetria nell indirizzamento, vale a dire che per poter comunicare il trasmittente e il ricevente devono nominarsi a vicenda e ritorna utile per i processi concorrenti che cooperano. Una variante di questo schema si avvale della asimmetria dell indirizzamento. Soltanto il trasmittente nomina il ricevente, mentre il ricevente non deve nominare il trasmittente: ad esempio un processo server per la stampante deve accettare richieste di stampa da qualunque processo. Per tali applicazioni, un approccio più efficace è l uso dell indirizzamento implicito: il parametro sorgente della primitiva receive serve per rispondere al mittente del messaggio quando l operazione è compiuta. In questo schema le primitive receive e send si definiscono come segue: receive(ind, messaggio) variabile ind. send(ind,messaggio) che consente di ricevere un messaggio da qualsiasi processo il cui nome è specificato nella che consente di inviare un messaggio al processo il cui nome è memorizzato nella variabile ind INDIRIZZAMENTO INDIRETTO Con l indirizzamento indiretto, i messaggi s inviano a delle caselle (dette anche porte), che li ricevono. Una porta si può considerare in modo astratto come un oggetto nel quale i processi possono introdurre e prelevare messaggi ed è identificata in modo unico. In questo schema un processo può comunicare con altri processi tramite un certo numero di porte ma due processi possono comunicare solo se condividono una porta. In questo caso le primitive send e receive si definiscono nel modo seguente: send(a,messaggio) 3

consente di inviare un messaggio alla porta A; receive(a,messaggio) consente di ricevere un messaggio dalla porta A. Consideriamo ora alcuni problemi nell uso dell indirizzamento indiretto. Si supponga che i processi P1, P2 e P3 condividano la porta A. Il processo P1 invia un messaggio ad A, supponiamo anche che P2 e P3 eseguono una receive da A. Quale processo, fra P2 e P3 riceverà il messaggio? La soluzione dipende dallo schema che si sceglie: Si può fare in modo che un canale sia associato al massimo a due processi. Si può consentire a un solo processo alla volta di eseguire un operazione receive. Si può consentire al sistema di decidere arbitrariamente quale processo riceverà il messaggio (il messaggio sarà ricevuto da P2 o da P3, ma non da entrambi). Il sistema può comunicare l identità del ricevente e del trasmittente. RELAZIONI MITTENTE-RICEVENTE Lo scambio di messaggi consente di instaurare una comunicazione di tipo uno-a-uno, uno-a-molti, molti-a-uno, molti-amolti. Le relazioni uno-a-uno permettono connessioni private fra due processi. in questo modo s isolano le interazioni fra i due da possibili interferenze causate da errori degli altri processi. Questa tipologia di relazione instaura un canale di tipo simmetrico, spesso chiamato semplicemente canale o link. Le relazioni uno-a-molti permettono di avere un mittente e molti destinatari: è utile per applicazioni dove un messaggio o qualche informazione deve essere mandata ad un insieme di processi. Le relazioni molti-a-uno sono tipiche delle interazioni client/server, dove un processo fornisce un servizio per molti processi. In questo caso i processi client specificano il destinatario delle loro richieste e il processo server è pronto a ricevere messaggi da qualunque client. Nelle relazioni uno-a-molti e molti-a-uno la casella prende il nome di porta e il canale che si viene ad instaurare ha uno schema di tipo asimmetrico. In questo schema la porta è a tutti gli effetti una coda di messaggi solitamente gestita con politica FIFO. Nelle relazioni di tipo molti-a-molti i processi client inviano richieste non ad un particolare server, ma ad uno qualunque scelto tra un insieme di server equivalenti. Questo caso comporta problemi di natura realizzativa, infatti, il supporto a tempo di esecuzione del linguaggio deve garantire che un messaggio di richiesta sia inviato a tutti i processi server e deve assicurare che, non appena il messaggio è ricevuto da uno di essi, lo stesso non sia più disponibile per tutti gli altri server. ASSEGNAZIONE DELLE CASELLE L associazione dei processi alle caselle di posta può essere statica o dinamica. Spesso le porte sono associate staticamente ad un processo particolare, cioè la porta è creata e assegnata permanentemente al processo. Analogamente, una relazione uno-a-uno viene di solito definita staticamente e permanentemente. Quando ci sono molti mittenti, l associazione di un mittente ad una casella può avvenire dinamicamente, tramite l uso di primitive come connect e disconnect. 4

Una porta può appartenere al processo o al sistema. Se appartiene a un processo, cioè fa parte del suo spazio d indirizzi, occorre distinguere ulteriormente tra il proprietario, che può soltanto ricevere messaggi tramite la porta, e l utente, che può solo inviare messaggi alla porta. Poiché ogni porta ha un unico proprietario, non può sorgere confusione su chi debba ricevere un messaggio inviato a una determinata porta. Quando un processo che possiede una porta termina, questa scompare, e qualsiasi processo che invii un messaggio alla porta di un processo già terminato deve essere informato della sua scomparsa. Il processo che crea una nuova porta è il proprietario predefinito della porta, inizialmente è l unico processo che può ricevere messaggi attraverso questa porta. Tuttavia, il diritto di proprietà e il diritto di ricezione si possono passare ad altri processi per mezzo di idonee chiamate al sistema. Naturalmente questa disposizione potrebbe dar luogo alla creazione di più riceventi per ciascuna porta. D altra parte, una porta posseduta dal sistema operativo è indipendente e non è legata ad alcun processo in particolare. Il sistema operativo offre un meccanismo che permette a un processo le seguenti operazioni: creare una nuova porta; inviare e ricevere messaggi tramite la porta; rimuovere una porta. FORMATO DEL MESSAGGIO I messaggi Il formato dei messaggi dipende dagli obiettivi del sistema di scambio di messaggi e dall uso di un possono essere a singolo computer o di un sistema distribuito. Per alcuni sistemi operativi i progettisti hanno scelto messaggi corti di lunghezza fissata, in modo da minimizzare il sovraccarico e lo spazio richiesto, inoltre lunghezza fissa o a lunghezza variabile Nel caso più la realizzazione a livello di sistema è semplice anche se i limiti imposti rendono più difficile il compito della programmazione. Se è necessario passare una gran quantità di dati, si possono mettere i dati in un file e indicare semplicemente il nome del file nel messaggio. generale di L uso di messaggi di dimensione variabile costituisce un approccio più flessibile e anche se la scelta di messaggi a messaggi a dimensione variabili richiede una realizzazione più complessa a livello del sistema, il lavoro lunghezza di programmazione risulta semplificato. variabile il formato di un messaggio è il seguente: / Il messaggio p è formato da due parti: un intestazione, che contiene informazioni riguardo al messaggio un corpo, che contiene il messaggio vero e proprio. L intestazione può contenere un identificatore del mittente e del destinatario del messaggio un campo per la lunghezza un campo che indica il tipo di messaggio eventualmente ci possono essere delle informazioni di controllo, come un puntatore per creare una lista di messaggi, un numero sequenziale per tenere traccia dei messaggi mandati dal mittente al destinatario, e un campo per la priorità. ORGANIZZAZIONE DELLE CODE FIFO Sia che la comunicazione sia diretta che indiretta, i messaggi scambiati tra processi comunicanti risiedono in code temporanee. Tipicamente viene utilizzata come politica di gestione delle code la CON PRIORITA' FIFO, in alternativa si può permettere la definizione di livelli di priorità che consentano al ricevente Anche con di decidere quale dei messaggi in coda processare per primo. Fondamentalmente esistono tre modi esame da parte per realizzare queste code. del ricevente che può Capacità zero decidere quale La coda ha lunghezza massima 0, quindi il canale non può avere messaggi in attesa al suo gestire prima interno. In questo caso il trasmittente deve fermarsi finché il ricevente prende in consegna il messaggio. Capacità limitata La coda ha lunghezza finita n, quindi al suo interno possono risiedere al massimo n messaggi. L operazione send è virtualmente bloccante. Se la coda non è piena, quando s invia un nuovo messaggio, quest ultimo è posto in fondo alla coda, il messaggio viene copiato oppure si tiene un puntatore a quel messaggio. Il trasmittente può proseguire la propria esecuzione senza essere 5

costretto ad attendere. Ma il canale ha comunque una capacità limitata; se è pieno, il trasmittente deve fermarsi nell attesa che ci sia spazio disponibile nella coda. Capacità illimitata La coda ha una lunghezza potenzialmente infinita, quindi al suo interno può attendere un numero indefinito di messaggi. Il trasmittente non si ferma mai. L operazione send è non bloccante. Il caso con capacità zero è talvolta chiamato sistema a scambio di messaggi senza memorizzazione transitoria (no buffering); gli altri due prendono il nome di sistema a scambio di messaggi con memorizzazione transitoria automatica (automatic buffering). MUTUA ESCLUSIONE Con l'uso di messaggi program mutuaesclusione; const n= ; (*numero di processi*); procedure P(i; integer) ; var msg: messaggio; repeat receive (mutex, msg); <sezione critica>; send (mutex, msg); <resto del programma> forever end; (*programma principale*) crea_casella (mutex); send (mutex, null); par P(1);. P(n); parend end. L algoritmo riportato presenta uno dei modi di usare lo scambio di messaggi per garantire la mutua esclusione. S ipotizza l uso di una receive bloccante e una send non bloccante. Un gruppo di processi concorrenti condivide una casella della posta, mutex, che è usata normalmente dai processi per mandare e ricevere; la casella è inizializzata con un singolo messaggio vuoto. Un processo che vuole entrare nella sezione critica prima cerca di ricevere un messaggio; se la casella è vuota, il processo è bloccato. Quando un processo ha ricevuto il messaggio, entra nella sezione critica e al termine rimanda il messaggio alla casella, così il messaggio rappresenta un permesso di accesso (token) che è passato da un processo all altro. La soluzione precedente ipotizza che, se più di un processo esegue la receive, allora: Se c è un messaggio, questo è consegnato ad un solo processo e gli altri sono bloccati. Se la coda dei messaggi è vuota, tutti i processi sono bloccati, e quando arriva un messaggio, un solo processo è attivato e riceve il messaggio. Questa ipotesi vale praticamente per tutti i sistemi con scambio di messaggi. PRODUTTORE/CONSUMATORE con buffer limitato ed uso di messaggi const capacita = ; {capacità del buffer} null = ; {messaggio vuoto} var i:integer; procedure produttore; var pmsg: messaggio; while true do receive (cas_produci, pmsg); pmsg:=produci; send (cas_consuma, pmsg); end end; procedure consumatore; var cmsg: messaggio; while true do Un altro esempio dell uso dello scambio di messaggi è una soluzione del problema del produttore/consumatore con buffer limitato: utilizzando le capacità di mutua esclusione dello scambio di messaggi. L algoritmo sfrutta lo scambio di messaggi per passare dati insieme con segnali. Si usano due caselle: quando il produttore genera dei dati, li manda alla casella cas_consuma tramite dei messaggi, e finché c è un messaggio in quella casella, il consumatore può consumare. Quindi cas_consuma serve da buffer, e i dati del buffer sono organizzati come coda di messaggi; la dimensione del buffer è data dalla variabile globale capacita. Inizialmente la casella cas_produci contiene un numero di messaggi vuoti pari alla capacità del buffer; il numero diminuisce per ogni dato prodotto e aumenta per ogni dato consumato. Questo approccio è piuttosto flessibile: ci possono essere molti produttori e consumatori, a patto che tutti abbiano accesso ad entrambe le caselle. Il sistema può anche essere distribuito, con tutti i produttori e la casella cas_produci in un sito, e tutti i consumatori e la casella cas_consuma in un altro. 6

end; receive(cas_consuma, cmsg); consuma(cmsg); send(cas_produci, null) end {processo genitore} crea_casella(cas_produci); crea_casella(cas_consuma); for i = 1 to capacita do send(cas_produci,null); par produttore; consumatore; parend end 7