X Prefazione dei paradigmi della programmazione concorrente. Successivamente, l evoluzione delle tecnologie hardware, che hanno consentito lo sviluppo

Documenti analoghi
Modello a scambio di messaggi

Il Modello a scambio di messaggi

Universita` di Bologna Corso di Laurea Magistrale in Ing. Informatica A.A Sistemi Operativi M. Prof. Anna Ciampolini

Introduzione alla Programmazione Concorrente

CORSO DI Principi di Sistemi Operativi (1? anno Corso di Laurea Specialistica in Ingegneria Informatica) ANNO ACCADEMICO

Modelli di interazione tra processi

Sistemi Operativi L-S

Modelli di interazione tra processi

Modelli di interazione tra processi

PROCESSI NON SEQUENZIALI E TIPI DI INTERAZIONE

Chiamata di procedura remota

Il Modello a scambio di messaggi

Programmi e Oggetti Software

Programmi e Oggetti Software

Linguaggi di programmazione e astrazione

Modello a scambio di messaggi

Sistemi in tempo reale: applicazioni alla robotica. Sistemi in tempo reale: applicazioni alla robotica p.1/15

Corso di Laurea Ingegneria Civile

Sistemi Operativi: Concetti Introduttivi

Corso di Laurea Ingegneria Informatica

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Dispensa 07. Oggetti e Java. Marzo Programmazione Java 1

Principles of Concurrent Programming

Corso di. Fondamenti di Informatica T

In passato, occuparsi di informatica era sinonimo di programmare computer

Il Sistema Operativo

Indice PARTE A. Prefazione Gli Autori Ringraziamenti dell Editore La storia del C. Capitolo 1 Computer 1. Capitolo 2 Sistemi operativi 21 XVII XXIX

Corso Programmazione Java Standard

Introduzione ORGANIZZAZIONE DEL LIBRO. Il libro è composto da 12 capitoli organizzati nelle tre parti seguenti:

Programma Master Programmatore Java

OBIETTIVI. Conoscere i concetti di base dell Informatica. Conoscere i principi e gli strumenti di base della programmazione

SCD. Sistemi distribuiti: introduzione. Sistemi distribuiti: introduzione. Sistemi distribuiti: introduzione

Prefazione. Contenuti

Struttura Logica del S.O:

Informatica 3. Informatica 3. Lezione 1- Modulo 1. LEZIONE 1: Introduzione. Concetti di linguaggi di programmazione. Introduzione

Fondamenti di Informatica (lettere A-I) A

Indice generale Introduzione...vii Parte I Concetti e costrutti fondamentali... 1 Capitolo 1 Introduzione al linguaggio... 3

CORSO DI FONDAMENTI DI INFORMATICA

Linee di programmazione

Introduzione. Sommario. Il software. Definizione di Ingegneria del software

LABORATORIO di Reti di Calcolatori

Corso di Linguaggi di Programmazione + Laboratorio

Le risorse. Alcune definizioni

Informatica 3. LEZIONE 1: Introduzione. Modulo 1: Introduzione al corso Modulo 2: Introduzione ai linguaggi di programmazione

LABORATORI DI CULTURA DIGITALE: INFORMATICA, INTERNET E ROBOTICA

I SISTEMI OPERATIVI. Insieme di programmi che implementano funzioni essenziali per l uso di un sistema elaboratore.

PROGRAMMA PER LA PROVA DI ACCERTAMENTO

Interazione tra Processi. Sistemi Operativi T AA

Architettura di rete. Modelli di Riferimento: TCP/IP e OSI. Modello di riferimento OSI. Modelli di riferimento. architettura di rete

CONCETTI E ARCHITETTURA DI UN SISTEMA DI BASI DI DATI

Sommario 1 Introduzione progetto Soluzione Integrazione Conclusioni... 10

PIANO DI LAVORO ANNO SCOLASTICO 2016/2017. I.I.S.S. C. E. GADDA Sede di Langhirano MATERIA DI INSEGNAMENTO TECNOLOGIE E PROGETTAZIONE DI

Capitolo 6 Le infrastrutture SoftWare

ISTITUTO TECNICO INDUSTRIALE STATALE "G. MARCONI" Via Milano n PONTEDERA (PI) DIPARTIMENTO: Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

MANIFESTO DEGLI STUDI DEL CORSO DI LAUREA IN INFORMATICA (CREMA)

Linguaggi di programmazione

SISTEMI DI ELABORAZIONE

Introduzione alla programmazione strutturata

Syllabus A042 Insegnamenti disciplinari

Elena Baralis 2007 Politecnico di Torino 1

Modulo 2 Architetture dei SD Lezione 1

Programmazione C Massimo Callisto De Donato

FONDAMENTI DI INFORMATICA II

Basi di Dati Ingegneria Informatica e delle Telecomunicazioni

ARCHITETTURA DEI CALCOLATORI

Interazione tra Processi. Sistemi Operativi T AA

Il PROCESSO UNIFICATO

Applicazioni distribuite e sistemi ad oggetti distribuiti. RPC RMI - Web Services 1

Reti logiche A All. Informatici (M-Z) Fabrizio Ferrandi a.a

SQL e linguaggi di programmazione. Cursori. Cursori. L interazione con l ambiente SQL può avvenire in 3 modi:

CORSO DI PROGRAMMAZIONE E INFORMATICA GENERALE 1

Linguaggi di programmazione

FONDAMENTI DI INTELLIGENZA ARTIFICIALE-M

Corso di Laurea Ingegneria Informatica Laboratorio di Informatica

Sistemi Operativi A. Prof. Alberto Broggi. Dip. di Ingegneria dell Informazione Università di Parma

Università di Bergamo Facoltà di Ingegneria INGEGNERIA DEL SOFTWARE. Paolo Salvaneschi A4_3 V2.1. Progettazione. Metodi e Linguaggi

ISO- OSI e architetture Client-Server

Le reti rete La telematica telematica tele matica Aspetti evolutivi delle reti Modello con mainframe terminali Definizione di rete di computer rete

Basi di dati Basi di dati per bioinformatica

INFORMATICA PER LE SCIENZE UMANE a.a. 2016/2017

Salvatore Cuomo Prolusione

Sincronizzazione Le sezioni scritiche

Sistemi Operativi. Prof. Alberto Broggi. Dip. di Ingegneria dell Informazione Università di Parma

Corso di Architettura degli Elaboratori

INFORMATICA PER LE SCIENZE UMANE a.a. 2015/2016

CALCOLATORI ELETTRONICI

Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria Sede di Modena. Esame di Stato 2004

Istruzioni Condizionali

SISTEMI OPERATIVI, RETI, INTERNET

ANNO ACCADEMICO 2017/2018 LAUREA TRIENNALE 3 ANNI. Informatica

Principles of Concurrent Programming

Analisi e comparazione dei Framework OpenSwing e Google Web Toolkit per lo sviluppo di interfacce utente con paradigma MVC.

Gestione dello sviluppo software Modelli Base

Corso di Laurea Ingegneria Informatica

I sistemi operativi (prima parte) Agostino Lorenzi I sistemi operativi - Atlas

Open Database Connectivity (ODBC)

Gerarchia fisica di memoria 1. Gerarchia fisica di memoria 2. Gerarchia fisica di memoria 3. Ricapitolazione di concetti base

Scrivere il software. Scrivere il software. Interprete. Compilatore e linker. Fondamenti di Informatica

Servizi di interscambio dati e cooperazione applicativa Guida alla gestione dei servizi web Mipaaf

Transcript:

Prefazione La concorrenza, intesa come contemporaneità di esecuzione di parti diverse di uno stesso programma, rappresenta una caratteristica di primaria importanza nello sviluppo del software, sia nel caso del software di sistema, e in particolare del Sistema Operativo, sia nel caso del software applicativo, soprattutto con riferimento a specifici ambiti come, per esempio, quello relativo al software real-time o al software di rete. In tutti questi casi, la concorrenza fornisce un ausilio fondamentale per raggiungere gli obiettivi che il sistema software si prefigge sollevando, per contro, una serie di problematiche alla soluzione delle quali è dedicato il presente volume. Quando si parla di concorrenza si tende poi a distinguere il caso in cui la contemporaneità di esecuzione sia relativa a parti diverse di uno stesso programma residente su una sola macchina, sia essa monoelaboratore o multielaboratore, rispetto al caso in cui le parti di programma in contemporanea esecuzione risiedano su macchine diverse collegate tra loro tramite una rete di comunicazione. In quest ultimo caso è più spesso usato il termine programmazione distribuita. Il tema della programmazione concorrente può essere visto da due diverse angolazioni: la prima, strettamente correlata al più generale tema della programmazione, vede la concorrenza come un nuovo approccio alla specifica, al progetto, alla realizzazione e alla validazione di un programma, tendente a liberare il programmatore dai vincoli e dalle limitazioni imposte dalle tradizionali tecniche proprie della programmazione sequenziale. Da questo punto di vista sono parte integrante di questa tematica, oltre agli aspetti legati ai linguaggi di programmazione, le metodologie, i paradigmi e le tecniche per la produzione di programmi, ovviamente per tutto ciò che concerne l introduzione della concorrenza. la seconda, relativa al tema dei sistemi operativi, vede la concorrenza come uno strumento concettuale di fondamentale importanza per il progetto e la realizzazione di un sistema operativo. In effetti, tutte le problematiche connesse con la concorrenza sono nate agli inizi degli anni sessanta in connessione con lo sviluppo dei primi sistemi operativi multiprogrammati. La multiprogrammazione, intesa come tecnica per consentire a un sistema operativo di controllare l esecuzione concorrente di più programmi sequenziali, pur in presenza di una macchina fisica monoelaboratore, rappresenta il primo e più semplice esempio di applicazione

X Prefazione dei paradigmi della programmazione concorrente. Successivamente, l evoluzione delle tecnologie hardware, che hanno consentito lo sviluppo di architetture multielaboratore prima e delle reti di elaboratori poi, ha ulteriormente contribuito ad accrescere l importanza delle tecniche di programmazione concorrente e di programmazione distribuita nello sviluppo dei moderni sistemi operativi. Questi due diverse modalità di affrontare il tema della programmazione concorrente e distribuita sono contemporaneamente presenti in questo volume. L obiettivo del testo è infatti quello di presentare le problematiche, dovute all introduzione della concorrenza, che deve affrontare chi si appresta a progettare e realizzare un sistema software, riservando un attenzione particolare a quei casi in cui tale sistema coincida con un Sistema Operativo. Il libro è stato infatti concepito anche come testo per un corso avanzato sui sistemi operativi. Per questo motivo, nei paragrafi conclusivi di molti capitoli vengono illustrate le possibili tecniche con cui, all interno di un sistema operativo, possono essere realizzati i meccanismi primitivi che sono necessari per fornire il supporto alla concorrenza in un contesto sia locale sia distribuito. Contenuti Il libro si articola in tre parti distinte. La prima, costituita dai primi tre capitoli, è dedicata a introdurre i principali concetti che stanno alla base della programmazione concorrente e distribuita: vengono presentati come estensione di analoghi concetti propri della tradizionale programmazione sequenziale. Vengono inoltre presentate le principali problematiche introdotte dalla concorrenza, alla soluzione delle quali sono dedicati i successivi capitoli. Nell introdurre i principali strumenti linguistici necessari per la specifica della concorrenza, vengono anche descritti i meccanismi offerti dal nucleo del Sistema Operativo necessari per fornire loro il supporto. La seconda parte del libro, anch essa costituita da tre capitoli, è dedicata alla programmazione concorrente in senso stretto, cioè alla concorrenza all interno di un architettura non distribuita. La terza parte infine, costituita dagli ultimi quattro capitoli, è invece dedicata alla programmazione distribuita, cioè al caso in cui la concorrenza riguardi parti di uno stesso programma distribuite nell ambito di un architettura composta da macchine interconnesse tramite una rete di comunicazione. Capitolo 1 - Concetti fondamentali In questo capitolo vengono richiamati alcuni dei principali concetti propri della programmazione sequenziale che, una volta estesi al più ampio ambito della programmazione concorrente, costituiranno le fondamenta su cui si basano tutti i successivi argomenti presentati nel libro. Fra tali concetti, primo fra tutti è quello di processo. Viene inoltre messa in evidenza la differenza tra test e prova di un programma, differenza che nel contesto della programmazione concorrente acquista ancora più importanza rispetto al caso della programmazione sequenziale. Per questo motivo le proprietà disafety e liveness, proprie di un programma sequenziale, vengono estese al caso in cui esso sia concorrente. Infine, richiamando i meccanismi di astrazione, viene definito il concetto di macchina concorrente che, astraendo dai dettagli implementativi, fornisce il supporto alla concorrenza richiamando quindi gli stretti legami fra questa e il Sistema Operativo.

Prefazione XI Capitolo 2 - Programmazione concorrente e distribuita Il capitolo si propone di approfondire il tema della programmazione concorrente intesa come l insieme delle tecniche, delle metodologie e degli strumenti necessari per fornire il supporto all esecuzione di un applicazione software come un insieme di attività svolte simultaneamente. Oggi la programmazione concorrente, pur continuando a essere il supporto indispensabile al progetto e alla realizzazione dei Sistemi Operativi, è largamente utilizzata anche nel progetto e nella realizzazione di varie tipologie di sistemi applicativi. Vengono introdotti i possibili tipi di interazione tra i processi: la cooperazione, la competizione e l interferenza. Con l aiuto di alcuni esempi, sono poi discusse le proprietà fondamentali di ciascuna forma di interazione. Capitolo 3 - Costrutti linguistici per la specifica della concorrenza Come indicato nel titolo, questo capitolo ha il compito di introdurre i meccanismi linguistici necessari, in un linguaggio di programmazione, per la specifica della concorrenza. Tali meccanismi sono comuni ai due tipi di architetture di macchine e di linguaggi concorrenti ad alto livello che sono oggetto di approfondita analisi nei capitoli successivi. Come esemplificazione di quanto presentato in generale, vengono illustrati come casi particolari la libreria pthread e la realizzazione dei thread nel linguaggio Java. Come anticipato, alla fine del capitolo viene mostrata la realizzazione del meccanismo di multiprogrammazione offerto dal nucleo di un sistema operativo a supporto della concorrenza. Capitolo 4 - Modello a memoria comune Obiettivo di questo capitolo è quello di introdurrre le principali caratteristiche del modello architetturale di macchina concorrente a memoria comune. Da queste derivano le modalità utilizzate dai processi, in esecuzione su tali architetture virtuali, per interagire tra di loro sia per competere sull uso di risorse comuni sia per cooperare. Per chiarire meglio le varie tecniche utilizzate per consentire le interazioni tra processi, vengono introdotte le varie tipologie di gestione delle risorse e il concetto di gestore di una risorsa. Inoltre, viene presentato il costrutto delle regioni critiche condizionali, il principale strumento utilizzato nei successivi capitoli per la specifica delle condizioni di sincronizzazione che devono essere verificate durante gli accessi a risorse condivise. Infine, viene introdotto il concetto di virtualizzazione di una risorsa, generalizzando le tipologie di allocazione delle risorse viste precedentemente. Capitolo 5 - Semafori In questo capitolo viene illustrato il meccanismo di sincronizzazione di gran lunga più usato come meccanismo primitivo in sistemi che seguono il modello a memoria comune, generalmemte offerto dal nucleo di un Sistema Operativo. Vengono descritte, in maniera precisa, la semantica, le proprietà e le modalità di uso dei semafori nel risovere i vari problemi di interazione e sincronizzazione tra processi. Una volta definita la specifica del meccanismo, vengono presentati diversi paradigmi di uso dei semafori, ciascuno dei quali adatto a risolvere particolari categorie di problemi, illustrando ciascun paradigma mediante alcuni esempi. I singoli paradigmi vengono identificati con nomi specifici che ne richiamano le proprietà: semafori binari di mutua esclusione, semafori evento, semafori binari composti, semafori condizione, semafori risorsa, semafori privati. Alla fine, vengono illustrate le tecniche di implementazione del meccanismo semaforico al-

XII Prefazione l interno del nucleo di un Sistema Operativo, sia per una classica architettura fisica monoelaboratore, sia nel caso più generale di architetture multielaboratore. Capitolo 6 - Monitor In questo capitolo viene presentato il meccanismo dei monitor, sicuramente il meccanismo linguistico di alto livello più usato per programmare interazioni tra processi in un sistema organizzato secondo il modello a memoria comune. In particolare viene evidenziato come tale meccanismo consenta al programmatore di ovviare a molti degli inconvenienti che potrebbero nascere in seguito a un uso non corretto di un meccanismo primitivo come quello dei semafori. La capacità espressiva del monitor viene illustrata presentando alcuni esempi di come tale strumento consenta di risolvere alcuni classici problemi di gestione delle risorse. Particolare attenzione è posta nella definizione delle diverse semantiche della primitiva signal, che viene utilizzata nell ambito di un monitor per riattivare un processo sospeso in attesa di una condizione di sincronizzazione. Per ciascuna semantica viene anche illustrata una possibile realizzazione del monitor in termini di semafori. Infine viene affrontato il problema della simulazione del comportamento del monitor utilizzando le primitive di sincronizzazione proprie della libreria Pthread e del linguaggio Java. Capitolo 7 - Modello a scambio di messaggi In questo capitolo vengono introdotte e illustrate le principali caratteristiche di un modello architetturale di macchina concorrente del tutto diverso rispetto a quello cui è stato fatto riferimento nei precedenti tre capitoli. Questo modello architetturale, noto come modello a scambio di messaggi, è quello a cui viene fatto riferimento quando si parla di programmazione distribuita. Viene definito il concetto di canale come principale strumento da utilizzare per consentire le interazioni tra processi in architetture organizzate secondo questo modello. Del canale vengono illustrate le varie tipologie in base ai seguenti parametri: la direzione del flusso dei dati che un canale può trasferire (canali mono e bidirezionali), la designazione del canale e dei processi sorgente e destinatario di ogni comunicazione (canali simmetrici e asimmetrici), il tipo di sincronizzazione fra i processi comunicanti (canali asincroni, sincroni e con sincronizzazione estesa). Infine vengono introdotte le varie tipologie di primitive di comunicazione che sono utilizzate, di volta in volta, nei successivi tre capitoli del libro, ivi incluse le istruzioni relative ai comandi con guardie. Capitolo 8 - Primitive di comunicazione asincrone Scopo di questo capitolo è illustrare il primo, e più primitivo, dei tre meccanismi di comunicazione che vengono presi in considerazione nel libro con riferimento al modello a scambio di messaggi: si tratta di quello che prevede che l operazione di invio di un messaggio sia asincrona. Per prima cosa viene mostrato come, con tale meccanismo, sia possibile scrivere processi servitori che simulano le stesse funzionalità che, nel modello a memoria comune, sono proprie di una risorsa condivisa. Viene messo in evidenza come, adottando un diverso paradigma di programmazione, sia possibile risolvere gli stessi problemi di allocazione di risorse visti nell altro modello, arrivando anche a una tabella di corrispondenza tra le soluzioni previste nell ambito dei due modelli. Per chiarire questi concetti vengono illustrate le soluzioni ad alcuni problemi di allocazione di risorse precedentemente visti anche nel modello a memoria comune, ivi

Prefazione XIII incluse le tecniche per la specifica di strategie di priorità. Alla fine, vengono mostrate possibili implementazioni delle funzioni di comunicazione tramite le primitive nel nucleo di un Sistema Operativo adatto per architetture sia monoelaboratore o multielaboratore sia distribuite. Capitolo 9 - Primitive di comunicazione sincrone In questo capitolo viene introdotto il meccanismo per la comunicazione sincrona. In particolare, vengono messe in evidenza le principali differenze fra questo meccanismo e quello asincrono illustrato nel precedente capitolo. Tali differenze riguardano sia l implementazione del meccanismo sia l efficienza delle soluzioni ai vari problemi di interazione tra processi. Per illustrare più in dettaglio quest ultimo aspetto, vengono rivisti alcuni esempi già sviluppati nel precedente capitolo, con lo scopo di mettere meglio in evidenza le possibili soluzioni che possono essere realizzate con i due diversi meccanismi di comunicazione. Relativamente alla realizzazione del meccanismo, vengono illustrate tre diverse tecniche: innanzi tutto, viene mostrato come sia possibile simulare un meccansimo di comunicazione sincrona in un sistema organizzato secondo il modello a memoria comune e, in particolare, utilizzando il meccanismo semaforico. Successivamente viene mostrato come un meccanismo di comunicazione sincrono possa essere facilmente realizzato mediante un meccanismo primitivo di tipo asincrono. Infine, viene illustrata la soluzione che prevede di realizzare lo stesso meccanismo sincrono come meccanismo primitivo offerto direttamente dal nucleo del Sistema Operativo. Capitolo 10 - Chiamate di procedura remota e rendez-vous Il capitolo introduce due meccanismi di comunicazione tra processi di alto livello, utilizzati prevalentemente in ambiente distribuito: la chiamata di procedura remota (RPC) e il rendez-vous. Entrambi vengono utilizzati da un processo client per chiedere, lato server, l esecuzione di un determinato servizio e in entrambi i casi il client rimane in attesa del completamento del servizio e dell arrivo dei risultati. Una volta precisata la differenza tra i due meccanismi, vengono presi in considerazione due linguaggi, ADA e Java, e viene discussa la soluzione in essi contenuta relativamente ai due meccanismi. In particolare, con riferimento al linguaggio ADA viene discusso il meccanismo rendez-vous e ne vengono illustrate le proprietà tramite alcuni esempi. Le proprietà del secondo meccanismo, la chiamata di procedura remota, vengono discusse facendo riferimento alla sua realizzazione nel linguaggio Java dove prende il nome di RMI (Remote Method Invocation). Esercizi di riepilogo Vengono infine proposti alcuni esercizi sull utilizzo degli strumenti di sincronizzazione presentati nel testo e relativi alla realizzazione di politiche di gestione delle risorse sia in ambiente a memoria comune sia in ambiente a scambio di messaggi. Le soluzioni agli esercizi sono reperibili sul sito www.ateneonline.it/ancilotti. Per gli argomenti trattati, il libro è particolarmente adatto non solo come testo per un corso di Programmazione concorrente e distribuita, ma anche come testo per un corso approfondito di Sistemi Operativi così come è normalmente previsto nell ambito di corsi di laurea magistrale sia in ingegneria informatica sia in informatica.

XIV Prefazione Nel libro si presume la conoscenza degli argomenti relativi alla struttura e ai principi di funzionamento di un Sistema Operativo, argomenti che fanno normalmente parte di un corso di base sui Sistemi Operativi e che sono trattati nel volume Sistemi operativi, edito da McGraw-Hill e di cui il presente testo si pone come logica continuazione. Pur presentando nel libro molte esemplificazioni dei concetti introdotti mediante opportuni richiami a specifici linguaggi (per esempio Java) o a librerie standard (come la libreria Pthread), nella presentazione dei singoli argomenti si è adottata la scelta di non fare riferimento a uno specifico linguaggio, utilizzando viceversa una generica sintassi C-like. Ringraziamenti Gli autori desiderano ringraziare due colleghi, la Prof.ssa Anna Ciampolini e il Prof. Giuseppe Lipari che, in base alla loro esperienza sui temi trattati nel libro, hanno contribuito con idee, discussioni e suggerimenti alla stesura finale del testo. Desiderano inoltre ringraziare la Prof.ssa Rebecca Montanari e l Ing. Daniela Tibaldi per il fondamentale contributo alla preparazione e verifica degli esercizi riportati nel testo.