TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI"

Transcript

1

2 Agostino Lorenzi Enrico Cavalli Andrea Colleoni TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI Articolazione Informatica Classe 4 Questo volume è disponibile anche in versione digitale. Per scaricarla: 1. prendi nota del codice stampato sul bollino, presente in questa pagina solo sulle copie destinate alla vendita; 2. segui le istruzioni sul sito della Casa Editrice

3 ISBN Edizioni: Certi Car Graf Certificazione Cartaria, Cartotecnica, Grafica Direzione editoriale: Copertina: Videoimpaginazione: Disegni: Stampa: Progetti di Editoria srl Vavassori & Vavassori Claudio Tognozzi Claudio Tognozzi - Vavassori & Vavassori Vincenzo Bona - Torino La casa editrice ATLAS opera con il Sistema Qualità conforme alla norma UNI EN ISO 9001: 2008 certificato da CISQ CERTICARGRAF. Con la collaborazione della Redazione e dei Consulenti dell I.I.E.A. Il presente volume è conforme alle nuove Linee Guida e alle nuove disposizioni ministeriali in merito alle caratteristiche tecniche e tecnologiche dei libri di testo. L Editore dichiara la propria disponibilità a regolarizzare errori di attribuzione o eventuali omissioni sui detentori di diritto di copyright non potuti reperire. Ogni riproduzione del presente volume è vietata. Le fotocopie per uso personale del lettore possono essere effettuate nei limiti del 15% di ciascun volume/fascicolo di periodico dietro pagamento alla SIAE del compenso previsto dall art. 68, commi 4 e 5, della legge 22 aprile 1941 n Le fotocopie per finalità di carattere professionale, economico o commerciale o comunque per uso diverso da quello personale possono essere effettuate a seguito di specifica autorizzazione rilasciata da CLEARedi, Centro Licenze e Autorizzazioni per le Riproduzioni Editoriali, Corso di Porta Romana 108, Milano, e sito web by Istituto Italiano Edizioni Atlas Via Crescenzi, Bergamo Tel. 035/ Fax 035/ Istituto Italiano Edizioni Atlas

4 PRESENTAZIONE UN OPERA MISTA, MULTIMEDIALE E DIGITALE La scuola deve offrire agli studenti l occasione per acquisire familiarità con gli strumenti di progettazione, documentazione e controllo, in modo da costruire un profilo professionale che consenta loro di intervenire nelle fasi e nei livelli del processo produttivo, dall ideazione alla realizzazione del prodotto, per la parte di propria competenza. Questo testo per la quarta classe è il secondo di tre volumi, che propongono lo studio e l applicazione delle tecnologie informatiche secondo le Linee Guida della disciplina Tecnologie e progettazione di sistemi informatici e di telecomunicazioni, per l articolazione Informatica dell indirizzo Informatica e telecomunicazioni, nel settore Tecnologico degli Istituti Tecnici. È una proposta editoriale mista, composta di materiali a stampa e contenuti integrativi on line; inoltre è disponibile in forma digitale (ebook+) su piattaforma dedicata con materiali multimediali e interattivi. MATERIALI A STAMPA La prima parte presenta l esecuzione concorrente dei processi a livello teorico nel primo capitolo, e a livello applicativo nell inserto che contiene progetti di programmazione concorrente con la codifica in linguaggio Java. La seconda parte è dedicata alle funzionalità programmabili di un sistema operativo e presenta la programmazione nella Bash shell di Linux e nella PowerShell di Windows. La terza parte presenta le fasi e i modelli di gestione del ciclo di sviluppo del progetto informatico, con le metodologie e le tecniche che sono diventate standard consolidati di settore. Vengono anche illustrate le modalità operative per l uso degli strumenti software per la gestione del progetto. Gli argomenti sono accompagnati dallo studio e dalla simulazione di casi aziendali significativi, in modo da mostrarne l applicazione pratica. Un inserto finale tratta poi la sicurezza e la tutela ambientale, come previsto nelle Linee Guida, con riferimento alla normativa di settore, nazionale e comunitaria. Gli aspetti operativi sono presentati sotto forma di progetti, di diversa complessità, accompagnati da note pratiche e videate di spiegazione, per favorire la didattica laboratoriale a scuola e la rielaborazione personale dello studente a casa. In questo modo l apprendimento è il frutto dell integrazione tra tecnologie e applicazioni operative delle conoscenze. Ogni capitolo contiene alcune schede Focus notes per l utilizzo del lessico e della terminologia di settore in lingua inglese, con spiegazioni dei concetti presentati nel capitolo, glossario, acronimi e un test. All inizio di ogni capitolo sono enunciati gli obiettivi di apprendimento e i contenuti trattati. Al termine di ogni capitolo si possono poi trovare le domande di autoverifica e i problemi applicativi. Il riferimento ai quesiti e ai problemi è contenuto all interno della trattazione dei diversi argomenti. Infine l appendice contiene le soluzioni ai quesiti di autoverifica (in italiano e in inglese) e l indice analitico del testo. Istituto Italiano Edizioni Atlas 3

5 ebook+ PER COMPUTER, TABLET E LIM L opera è disponibile anche in versione digitale ebook+ per computer, tablet e LIM. Tale versione digitale comprende il testo sfogliabile e numerose espansioni multimediali quali: Test strutturati interattivi (in italiano e in inglese) Lezioni multimediali (videoanimazioni con commento vocale) Progetti aggiuntivi di approfondimento Aggiornamenti sui prodotti software presentati nel testo. I riferimenti alle espansioni multimediali sono indicati all interno dei capitoli con le seguenti icone: Link di download a file esterno Link a pagine Web Video Quiz CONTENUTI DIGITALI INTEGRATIVI I Contenuti digitali integrativi riguardano: Approfondimenti e integrazioni dei contenuti trattati nel testo Note operative sugli strumenti software per la realizzazione dei progetti. Essi sono disponibili per Studenti e Docenti tramite un collegamento diretto al sito dell Atlas: oppure con il seguente codice QR per dispositivi mobili. I riferimenti ai Contenuti digitali integrativi sono indicati, in modo puntuale e con numerazione progressiva, al termine dei paragrafi di ogni capitolo, richiamati con un apposito simbolo. I riferimenti sono inoltre elencati nell indice generale del testo. MATERIALI MULTIMEDIALI E DIDATTICI PER L INSEGNANTE Per il Docente ci sono i Materiali didattici per l Insegnante, disponibili nell area riservata del sito della Casa Editrice (a cui i Docenti possono accedere con password) oppure su supporto ottico. Essi contemplano: traccia per la compilazione dei Piani di lavoro per i Consigli di classe; repertorio di esercizi da assegnare come verifiche o autoverifiche agli studenti; presentazioni in PowerPoint e in pdf che illustrano i contenuti dei capitoli e che possono essere utilizzati con la LIM per lezioni multimediali in classe; file completi dei progetti. L Editore 4 Istituto Italiano Edizioni Atlas

6 INDICE Simboli del linguaggio UML (Unified Modeling Language) Esecuzione concorrente di processi 11 1 Competizione e cooperazione tra processi Mutua esclusione e sincronizzazione Soluzioni software per la mutua esclusione Soluzioni hardware per la mutua esclusione I semafori Problemi caratteristici con i processi concorrenti Il problema dei filosofi a tavola Monitor e scambio di messaggi Lo stallo AUTOVERIFICA Domande Problemi FOCUS NOTES Concurrent Processing GLOSSARY ACRONYMS TEST SCHEDA DI AUTOVALUTAZIONE Programmazione concorrente in Java La classe Thread L interfaccia Runnable Assegnazione della CPU al thread di più alta priorità Accesso parallelo a risorse comuni Comunicazione tra thread Modello Produttore-Consumatore con ricezione garantita Analisi parallela di grandi quantità di dati Gestione sincronizzata di un conto corrente bancario AUTOVERIFICA Problemi Funzionalità programmabili di un sistema operativo 99 1 Programmazione nella shell Le variabili nella shell Le variabili di sistema L output di dati e messaggi Il comando read Il comando tput Le substitution Gli operatori aritmetici Espressioni condizionali Le strutture di selezione e di ripetizione Altre strutture di controllo Shell script per problemi di carattere generale Shell script per operazioni di gestione del sistema Elaborazione concorrente AUTOVERIFICA Domande Problemi Istituto Italiano Edizioni Atlas 5

7 FOCUS NOTES Bash Shell GLOSSARY ACRONYMS TEST SCHEDA DI AUTOVALUTAZIONE PowerShell di Windows La shell Gli alias La cronologia dei comandi Le variabili Le variabili di sistema Gestione dei file e delle directory L output di dati e messaggi e la ridirezione dell output Formattazione dell output La programmazione nella shell Gli operatori aritmetici Operatori di confronto e booleani Le strutture di selezione e di ripetizione Altre strutture di controllo Programmazione avanzata Funzioni Browser per la navigazione Internet AUTOVERIFICA Problemi Ciclo di sviluppo del progetto informatico Il progetto informatico Il Project Management Fasi e deliverables Le fasi standard di un processo di sviluppo Il lavoro di squadra Il piano di progetto Modello a cascata Altri modelli di gestione del ciclo di sviluppo I metodi agili Gestione della qualità Maturità del processo di sviluppo AUTOVERIFICA Domande Problemi FOCUS NOTES IT Project Development GLOSSARY ACRONYMS TEST SCHEDA DI AUTOVALUTAZIONE Tecniche e strumenti per la gestione del progetto Gli strumenti operativi per la gestione di un progetto Il Documento di Specifica dei Requisiti Diagrammi UML con WhiteStarUML Il progetto architetturale del sistema La progettazione delle interfacce utente Il software Pencil Istituto Italiano Edizioni Atlas

8 5 Il monitoraggio del progetto informatico Il software ProjectLibre Lo sviluppo del software L ambiente di programmazione Eclipse Versionamento del codice sorgente Creazione di un repository locale con TortoiseSVN Sviluppo di software object oriented Test unitari Creare un test unitario in Eclipse Compilazione, assemblamento e installazione Creazione di un progetto Maven con Eclipse Generazione automatica della documentazione AUTOVERIFICA Domande Problemi FOCUS NOTES Project Management Tools and Techniques GLOSSARY ACRONYMS TEST SCHEDA DI AUTOVALUTAZIONE Studio di casi Gestione di un associazione polisportiva Analisi Progettazione Progettazione dell interfaccia utente Gestione e monitoraggio del progetto Sviluppo del progetto Realizzazione della logica applicativa Test unitari Installazione e generazione della documentazione API Programma in background per la bonifica di tracciati Analisi Progettazione Sviluppo del progetto Test unitari Installazione e generazione della documentazione API Sicurezza e tutela ambientale La sicurezza dei sistemi informatici La sicurezza delle reti La sicurezza nei luoghi di lavoro Requisiti minimi per il lavoro con le attrezzature informatiche Rispetto e tutela dell ambiente APPENDICE Indice analitico Soluzioni ai quesiti di autoverifica Focus Notes: Answer key Istituto Italiano Edizioni Atlas 7

9 CONTENUTI DIGITALI INTEGRATIVI 1 Esecuzione concorrente di processi 1. L algoritmo di Peterson 2. L istruzione di scambio 3. Il problema del produttore-consumatore con un buffer circolare 4. Le regioni critiche condizionali Programmazione concorrente in Java 1. Allocatore di memoria 2 Funzionalità programmabili di un sistema operativo 1. Velocizzare la chiamata di uno script 2. Menu di scelte 3. Le funzioni 4. Script per i servizi 5. Il linguaggio awk 6. Quick reference per Linux e Bash shell PowerShell di Windows 1. Here-string e commenti su più righe 2. Read-Host 3. Ordinamenti e primi/ultimi valori 4. Sintetizzatore di messaggi vocali 5. Quick reference di PowerShell 3 Ciclo di sviluppo del progetto informatico 1. La norma ISO/IEC 12207: Termini e definizioni 3. La qualità per i prodotti software 4 Tecniche e strumenti per la gestione del progetto 1. Approfondimento sui pattern architetturali 2. Tecnica UML UX per la progettazione delle interfacce utente 3. Stima dei costi di produzione del software 4. Pianificazione e vincoli sulle risorse nella gestione dei progetti 5. Software Subversion Edge 6. Generazione automatica di codice Java da WhiteStarUML 7. Generazione di documentazione con Doxygen Sicurezza e tutela ambientale 1. Dati aziendali e tutela della privacy 2. Aggiornamenti sulle normative di settore nazionale e comunitaria 8 Istituto Italiano Edizioni Atlas

10 Simboli del linguaggio UML (Unified Modeling Language) Use Case (Caso d uso) Class (classe) Actor (Attore) Association (associazione generica) Directed association (associazione con verso) Object (oggetto) Generalization (associazione di generalizzazione) Dependency (dipendenza) <<include>> Include (Inclusione) <<extend>> Extend (Estensione) Entity (entità) Inheritance (ereditarietà) entity1 Control (controllo) control1 Boundary (frontiera) Interface (interfaccia) boundary1 Istituto Italiano Edizioni Atlas 9

11 Simboli del linguaggio UML (Unified Modeling Language) Node (nodo) Aggregation (aggregazione) e Composition (composizione) Node instance (istanza di nodo) Initial state (inizio) Final state (fine) Artifact (artefatto) Action state (stato azione) Decision (decisione) Port (porta) Signal Accept State (dati di ingresso) Part (parte) Signal Send State (dati in uscita) 10 Istituto Italiano Edizioni Atlas

12 1 Esecuzione concorrente di processi OBIETTIVI DI APPRENDIMENTO In questo capitolo conoscerai gli aspetti riguardanti l esecuzione di processi in modo concorrente e sarai in grado di progettare gli algoritmi per gestire i più comuni problemi di mutua esclusione e di sincronizzazione tra processi, individuando gli strumenti e le strategie più efficaci. CONTENUTI Competizione e cooperazione tra processi Mutua esclusione e sincronizzazione Soluzioni software per la mutua esclusione Soluzioni hardware per la mutua esclusione I semafori Problemi caratteristici con i processi concorrenti Monitor e scambio di messaggi Lo stallo 11

13 1 Competizione e cooperazione tra processi In questo capitolo impareremo a risolvere i problemi che si presentano a causa delle interazioni tra i processi eseguiti in parallelo. Il parallelismo può essere reale per effetto delle presenza di più processori, e si parla in tale caso di multiprocessing, oppure simulato per effetto della multiprogrammazione. In entrambi i casi si presentano i medesimi problemi e si dice che essi sono l effetto della concorrenza tra processi. Si considerino due elaborazioni che interagiscono per la soluzione di un problema. Per esempio, un thread prepara il cedolino paga di un dipendente e un secondo thread lo stampa. I due thread devono essere sincronizzati, per evitare che il cedolino paga di uno o più dipendenti non sia stampato o che un cedolino paga sia stampato più volte. Può anche accadere che per effetto dell interazione tra i due thread sia stampato un cedolino paga con dati non corretti. Pensiamo ora ad un caso della vita reale. Due amici, Anna e Bruno, si scambiano favori: Anna ha prestato a Bruno la somma di 200 euro e Bruno ha prestato ad Anna una telecamera. Un giorno, dopo un litigio, Anna chiede a Bruno di restituire la somma prestata e Bruno le risponde che, prima di farlo, vuole che gli sia resa la telecamera. Ma Anna, non fidandosi più di Bruno, pretende che sia lui a fare la prima mossa, restituendo il denaro. Si è giunti a una situazione di stallo: A vuole R 1, posseduta da B, che vuole R 2, posseduta da A. Se A e B non sono persone, ma processi, e R 1 e R 2 sono risorse del sistema, si descrive una situazione che si può verificare con i processi concorrenti. La concorrenza tra processi avviene, come si è visto, secondo diverse modalità. Si parla infatti di competizione nell accesso alle risorse, come nel caso dei processi Anna e Bruno, e di cooperazione nell evoluzione dei processi, come nel caso della produzione dei cedolini paga degli stipendi. La cooperazione tra processi, inoltre, può avvenire con la condivisione di risorse, per esempio mediante la condivisione di un area della memoria centrale, o di un file per processi concorrenti su un singolo calcolatore, oppure tramite comunicazione, mediante lo scambio di messaggi, come avviene ai processi che interagiscono in un sistema distribuito. La competizione nell accesso alle risorse può portare allo stallo dei processi, mentre la cooperazione tra processi concorrenti può causare l inconsistenza dei dati elaborati. I problemi di concorrenza tra processi si presentano sia con i processi di sistema, che con i processi degli utenti. I temi discussi in questo capitolo sono importanti sia per lo sviluppo di applicazioni con linguaggi di programmazione che supportano il multithreading, sia nell ambito dello studio dei sistemi operativi. Occorre precisare che nel seguito si parlerà di processi concorrenti e relativi problemi, ma le stesse problematiche caratterizzano anche la cooperazione tra thread. Gli algoritmi presentati in questo capitolo sono scritti con un linguaggio di progetto e possono servire come traccia per la codifica in un linguaggio di programmazione. Nell inserto successivo a questo capitolo saranno presentati alcuni programmi, relativi alla programmazione concorrente e all uso dei thread, scritti in linguaggio Java. 2 Mutua esclusione e sincronizzazione Si consideri la preparazione e la stampa degli estratti di conto corrente di una banca. L intera operazione è eseguita da due processi P 0 cooperanti. Il processo P 0 produce i dati dell estratto conto li stampa. I processi interagiscono nel seguente modo: P 0 produce i dati di un cliente e li deposita in un buffer per lo scambio delle informazioni, P 1 li preleva dal buffer e stampa l estratto conto del cliente Esecuzione concorrente di processi Istituto Italiano Edizioni Atlas

14 Clienti P 0 P 1 Dato Buffer Stampa Estratto Conto L operazione complessiva è descritta dal seguente ciclo: while (esistonoclienti) producidaticliente(); scrividatinelbuffer(); leggidatidabuffer(); stampaestrattoconto(); eseguito da P 0 eseguito da P 0 eseguito da P 1 eseguito da P 1 Le precedenti attività possono essere scomposte in due processi paralleli: /* * P0 esegue P1 esegue * */ while (esistonoclienti) while (esistonoclienti) producidaticliente(); leggidatidabuffer(); scrividatinelbuffer(); stampaestrattoconto(); Questa scomposizione non garantisce che le diverse azioni siano eseguite nell ordine desiderato e, in tal caso, l elaborazione può portare a risultati non corretti. Le cause dei possibili malfunzionamenti sono: l accesso concorrente alle informazioni e la differente velocità di esecuzione dei processi. Accesso concorrente alle informazioni Può succedere che mentre P 0 esegue scrividatinelbuffer, P 1 acceda al buffer per leggere i dati da stampare. Si supponga, per semplicità, che lo scambio dei dati si riduca a quello di una coppia di valori: il numero di conto corrente e il relativo saldo. Questi valori sono memorizzati nelle variabili numeroconto0 e saldo0 di P 0 e, rispettivamente, numeroconto1 e saldo1 di P 1 e sono scambiati nelle variabili numeroconto e saldo che rappresentano il buffer. L accesso concorrente al buffer significa in sostanza che, mentre P 0 esegue le istruzioni: numeroconto = numeroconto0; saldo = saldo0; anch accede al buffer per eseguire: numeroconto1 = numeroconto; saldo1 = saldo; Supponiamo che nella sequenza dei conti correnti da elaborare compaia quello del cliente A con numeroconto = 5000 e saldo = , seguito da quello di B con numeroconto = 5001 e saldo = Si supponga anche ch abbia appena finito di stampare i dati di A, mentre P 0 abbia elaborato i dati di B e sia pronto ad aggiornare il buffer. Istituto Italiano Edizioni Atlas 1. Esecuzione concorrente di processi 13

15 La situazione è illustrata nel seguente schema: P 0 Buffer P 1 Cliente B Cliente A Cliente A numeroconto saldo A questo punto P 0 deve aggiornare il contenuto di Buffer con i dati del cliente B, mentr, stampati i dati del cliente A, accede al buffer per leggere numeroconto e saldo del prossimo cliente. Per effetto della concorrenza può accadere che le precedenti istruzioni siano eseguite nel seguente ordine: numeroconto = numeroconto0; eseguita da P 0 numeroconto1 = numeroconto; eseguita da P 1 saldo1 = saldo; eseguita da P 1 saldo = saldo0; eseguita da P 0 Dopo l esecuzione delle precedenti istruzioni le variabili del problema assumono i seguenti valori: P 0 Buffer P 1 Cliente B Cliente B? numeroconto saldo Il sistema si viene a trovare in uno stato inconsistente, in quanto P 1 associa il numero di conto del cliente B con il saldo del conto corrente di A. Situazioni come la precedente, dove due o più processi accedono a dati condivisi e il risultato dell elaborazione dipende dall ordine di esecuzione dei processi, sono dette corse critiche. La parte di codice dove possono presentarsi le corse critiche è chiamata regione critica o sezione critica. Nell esempio discusso ci sono due regioni critiche: scrivedatinelbuffer, che è una regione critica di P 0, mentre leggedatidabuffer è una regione critica di P 1. Differente velocità di esecuzione dei processi La differente velocità di esecuzione dei processi può portare alla perdita di informazioni o alla duplicazione delle informazioni. Supponiamo infatti che il processo P 0 sia più veloce di P 1 : può accadere che P 0 ponga nel buffer i dati del cliente C prima ch abbia letto quelli del cliente B, che non saranno mai stampati. Se invece foss a essere più veloce di P 0, potrebbe accadere che P 1, dopo avere stampato i dati di A, acceda al buffer prima che P 0 lo abbia aggiornato con i dati di B. In tale caso P 1 preleverebbe dal buffer i dati di A e li stamperebbe per la seconda volta. Si osservi che questi problemi si possono presentare sia in sistemi multiprocessore, per effetto del parallelismo nell esecuzione, sia in sistemi monoprocessore, dove il parallelismo avviene alternando l esecuzione dei due processi. Nell esempio sopra discusso, per risolvere il problema dell accesso concorrente alle informazioni, bisogna impedire che, mentre P 0 modifica il buffer, anch acceda al buffer per leggerlo. In pratica questo significa che l esecuzione di scrividatinelbuffer o di leggidatidalbuffer può iniziare solo se l altra non è in esecuzione. Questo si esprime anche dicendo che le due procedure devono essere eseguite in mutua esclusione. Più in generale si dice che: Le porzioni di codice C 0, C 1,..., C n, sono eseguite in mutua esclusione quando l esecuzione del codice C i può iniziare solo se nessuna porzione di codice C j, con i diverso da j, è in esecuzione Esecuzione concorrente di processi Istituto Italiano Edizioni Atlas

16 Le attività dei due processi devono anche essere sincronizzate per evitare che un estratto conto non sia stampato o che sia stampato più volte: P 0 può scrivere nel buffer solo se il buffer è vuoto. In pratica, P 0 può scrivere nel buffer solo dopo ch lo ha letto svuotandolo. P 1 può leggere il buffer solo se il buffer è pieno. In pratica, P 1 può leggere il buffer solo dopo che P 0 ha scritto nel buffer riempiendolo. Per attuare la mutua esclusione nell accesso alle regioni critiche e sincronizzare i due processi, modifichiamo P 0 introducendo due meccanismi in grado di realizzare le azioni indicate come commento nel codice del processo. Attendi buffer vuoto deve forzare il processo P 0 ad attendere che il buffer sia pronto per accogliere i dati, mentre Buffer pieno ha lo scopo di segnalare che il buffer è stato riempito con nuovi dati. Analogamente si modifica P 1 introducendo le azioni Attendi buffer pieno e Buffer vuoto. /* * P0 esegue P1 esegue * */ while (esistonoclienti) while (esistonoclienti) producidaticliente(); // Attendi buffer pieno // Attendi buffer vuoto leggidatidabuffer(); scrividatinelbuffer(); // Buffer vuoto // Buffer pieno stampaestrattoconto(); Per tenere conto dello stato del buffer usiamo la variabile booleana globale pieno che assume il valore true dopo che P 0 ha depositato i dati nel buffer e le viene attribuito il valore false dopo che P 0 ha prelevato i dati dal buffer. Il valore di pieno è quindi modificato nelle posizioni occupate da Buffer pieno e Buffer vuoto, mentre è controllato da Attendi buffer vuoto e Attendi buffer pieno. Il valore iniziale della variabile pieno dovrà essere, naturalmente, false. Inizialment è costretto ad attendere che ci sia qualche cosa nel buffer. Il processo P 0, dopo avere prodotto i dati del primo correntista, li scrive nel buffer e, successivamente segnala, modificando pieno, che il buffer contiene dei dati. Si osservi che se, per qualsiasi ragione, P 1 impiega molto tempo a leggere i dati dal buffer, P 0 produce nuovi dati e poi è costretto ad attendere. Il processo P 1, invece, può accedere al buffer solo se pieno vale true. In tale caso P 1 accede al buffer e successivamente ne modifica lo stato assegnando il valore false a pieno e abilitando P 0 a proseguire nell esecuzione. Si osserva ch, dopo avere modificato la variabile pieno, non potrà più accedere al buffer sino a quando lo abiliterà P 0. La mutua esclusione è così garantita. Per costruire il codice di P 0 si può usare la variabile pieno e modellare le azioni: Attendi buffer vuoto di P 0 e Attendi buffer pieno di P 1 nel seguente modo: boolean pieno = false; while (pieno) while (!pieno) P 0 : Attendi buffer vuoto Se pieno == true ripete test P 1 : Attendi buffer pieno Se pieno == false ripete test Istituto Italiano Edizioni Atlas 1. Esecuzione concorrente di processi 15

17 Attendi buffer vuoto si implementa con un ciclo while nel quale non viene eseguita alcuna istruzione. Se pieno vale true, il test viene ripetuto. Quando pieno vale false, il ciclo termina. Considerazioni simmetriche si possono fare per Attendi buffer pieno. Si noti che i precedenti cicli lasciano attivo il processo, che continua ad accedere alla variabile pieno e a controllarne il valore. Per questa ragione i precedenti cicli prendono il nome di cicli di attesa attiva. Le azioni Buffer pieno di P 0 e Buffer vuoto di P 1 sono realizzate con le seguenti assegnazioni: pieno = true; pieno = false; P 0 : Buffer pieno P 1 : Buffer vuoto In base alle precedenti osservazioni, la classe EstrattoConto che descrive l interazione tra P 0, può essere descritta con il seguente codice: /* * Classe EstrattoConto * */ class EstrattoConto static boolean pieno = false; public static void main(string args[]) /* * P0 e P1 sono eseguiti in parallelo * */ P0(); P1(); /* * Processo P0 * */ void P0() while (esistonoclienti) producedaticliente(); while (pieno) scrivedatinelbuffer(); pieno = true; /* * Processo P1 * */ void P1() while (esistonoclienti) while (!pieno) leggedatidabuffer(); pieno = false; stampaestrattoconto(); Esecuzione concorrente di P 0 Attendi Buffer vuoto Buffer pieno Attendi Buffer pieno Buffer vuoto Esecuzione concorrente di processi Istituto Italiano Edizioni Atlas

18 La soluzione proposta risolve sia il problema dell accesso alla sezioni critiche che quello della sincronizzazione dei processi. Si devono però fare le seguenti osservazioni: 1. Il programma è stato realizzato sfruttando un meccanismo di attesa attiva, che andrebbe evitato perché spreca risorse; sarebbe meglio sospendere il processo in attesa e riattivarlo in seguito. 2. Il programma forza i due processi ad evolvere alla medesima velocità. Nell esempio precedente, dove i processi si scambiano informazioni usando un buffer di capacità unitaria, questo fatto appare naturale. Se invece il buffer fosse in grado di contenere i dati di 100 clienti, questa limitazione risulterebbe inaccettabile: P 0 deve essere libero di produrre dati fino a riempire il buffer, mentr deve poter accedere al buffer fino a quando ci sono dati da prelevare. L accesso alle regioni critiche è particolarmente delicato e va trattato separatamente dal problema della sincronizzazione dei processi. Si consideri il caso di una sala cinematografica con più di una cassa per la vendita dei biglietti. Il numero di posti ancora disponibili è continuamente aggiornato ed è visualizzato sugli schermi nell atrio del cinema per informare gli spettatori. Il numero di posti liberi è memorizzato nella variabile intera posti e per ogni biglietto venduto viene eseguita la seguente istruzione: posti = posti 1; Ogni cassa esegue un proprio processo che accede alla risorsa condivisa posti per controllarla e variarla. L accesso concorrente a posti per decrementarne il valore è una corsa critica che va eseguita in mutua esclusione. Infatti l istruzione posti = posti 1 non è un istruzione macchina e quindi non è eseguita in un solo passo dal processore, ma viene tradotta dal compilatore in una sequenza di istruzioni macchina del tipo: LDA [posti] LDB #1 SUB STA [posti] Copia il valore di posti in A Inserisce 1 in B Decrementa di 1 il valore di A Aggiorna il valore di posti Supponiamo che, in un certo istante, la variabile posti contenga 50 e ci siano due processi P 0 che ne vogliono aggiornare il valore contemporaneamente. Dopo i due aggiornamenti, il valore atteso di posti è 48. Supponendo che i due processi siano eseguiti in un ambiente multiprocessore, può accadere che, per effetto dell esecuzione concorrente dei processi, P 0 calcoli nel registro A il valore posti 1 e, prima di riuscire ad aggiornare il valore di posti, anch acceda alla memoria ricopiando il valore 50 nel registro A, lo decrementi e ne aggiorni il valore in memoria scrivendo in posti il valore 49. A questo punto anche P 0 esegue l istruzione STA [posti] inserendo, a sua volta, il valore 49 per posti. Il valore finale di posti è 49 e non il valore atteso di 48 in quanto uno dei due aggiornamenti è andato perso. La successione dei valori assunti dai registri A e B dei due processori e da posti è mostrata nella seguente tabella. P 0 A B P 1 A B posti 50 LDA [posti] LDB # SUB LDA [posti] LDB # SUB STA [posti] STA [posti] Istituto Italiano Edizioni Atlas 1. Esecuzione concorrente di processi 17

19 La medesima situazione può presentarsi anche in ambiente monoprocessore se lo schedulatore, dopo che P 0 ha eseguito le prime tre istruzioni, decide di interromperlo e, dopo avere salvato lo stato dei registri, manda in esecuzion. Completata l esecuzione di posti = posti 1 da parte di P 1, lo schedulatore esegue un nuovo cambiamento di contesto e manda ancora in esecuzione P 0 sino al completamento. In tale caso le istruzioni eseguite da P 0 si intervallano come è mostrato nella precedente tabella. Per risolvere il problema delle corse critiche servono due istruzioni speciali, EntraSezioneCritica ed EsciSezioneCritica, da inserire immediatamente prima e dopo la sezione critica: esse garantiscono l esecuzione in mutua esclusione. In tale caso i due processi P 0 possono essere schematizzati nel seguente modo: /* * Processo P0 Processo P1 * */ while (true) while (true) arriva Spettatore(); arrivaspettatore(); EntraSezioneCritica; EntraSezioneCritica; posti = posti - 1; posti = posti - 1; EsciSezioneCritica; EsciSezioneCritica; Un modo per implementare queste speciali istruzioni è suggerita nella soluzione del problema della preparazione degli estratti conto. Introduciamo la variabile processo, che può assumere i due valori 0 e 1, usata per indicare quale sia il processo che ha il diritto di accedere alla sezione critica. In questo caso l accesso alla sezione critica può essere controllato con un ciclo di attesa attiva come mostrato di seguito. /* * Implementazione di EntraSezioneCritica * */ int processo = 1;... while (processo == 0) SezioneCritica;... Se la variabile processo vale 0 viene eseguito un ciclo di attesa attiva, mentre se processo vale 1, si accede a SezioneCritica. All uscita dalla regione critica bisogna che la procedura EsciSezioneCritica modifichi il valore di processo permettendo all altro processo di accedere a sua volta alla sezione critica. PROGETTO 1 Risolvere il problema del conteggio dei posti liberi usando le speciali istruzioni: EntraSezione- Critica ed EsciSezioneCritica. La classe ContaPostiLiberi sintetizza le precedenti osservazioni e mostra come controllare l accesso a una sezione critica dei processi concorrenti P 0 usando questa tecnica Esecuzione concorrente di processi Istituto Italiano Edizioni Atlas

20 /* * Classe ContaPostiLiberi * */ class ContaPostiLiberi static int processo = 0; static int posti = 400; public static void main(string args[]) /* * P0 e P1 sono eseguiti in parallelo * */ P0(); P1(); Esecuzione concorrente di P 0 /* * P0 esegue P1 esegue * */ void P0() Entrata e uscita dalle void P1() sezioni critiche while (true) evidenziata in colore while (true) arriva Spettatore(); arrivaspettatore(); while (processo == 1); while (processo == 0); posti = posti - 1; posti = posti - 1; processo = 1; processo = 0; La soluzione proposta garantisce la mutua esclusione anche se richiede l accesso alternato di P 0 alle rispettive sezioni critiche. Si nota però che, nel problema in esame, la stretta alternanza nell esecuzione dell istruzione posti = posti 1 da parte di P 0 non è accettabile, perché, se per qualsiasi ragione uno dei due processi si ferma, anche l altro è costretto a fermarsi. Si pensi alla possibilità che i processi P 0 siano associati, uno ad una cassa della sala cinematografica, e l altro a un sistema di prenotazioni via Internet. L implementazione precedente di ContaPostiLiberi avrebbe l effetto di impedire la normale operatività della cassa in assenza di prenotazioni on-line e, simmetricamente, di bloccare le prenotazioni on-line in assenza di spettatori alla cassa. Si consideri infine il caso di due processi P 1 e P 2 che devono leggere i dati da un file sul nastro A e scrivere i risultati su un nastro montato sull unità B. Per effetto dell esecuzione intervallata dei due processi le azioni possono concatenarsi nel seguente modo:... P 1 chiede il nastro A e lo ottiene P 2 chiede il nastro B e lo ottiene P 1 chiede il nastro B e rimane bloccato in attesa P 2 chiede il nastro A e rimane bloccato in attesa Istituto Italiano Edizioni Atlas 1. Esecuzione concorrente di processi 19

21 Nessuno dei due processi P 1 e P 2 può proseguire perché sono l uno in attesa di una risorsa posseduta dall altro. Si è realizzata una situazione di stallo (o blocco critico) che può essere risolta solo interrompendo l esecuzione di uno dei due processi. Un problema abbinato allo stallo è quello del ritardo indefinito, o starvation (letteralmente, inedia) che può avvenire, per esempio, in un sistema dove i processi sono mandati in esecuzione in base alle priorità: in tale caso un processo a bassa priorità corre il rischio di non essere mai preso in considerazione per l esecuzione, a causa della presenza di processi pronti a priorità più elevata. Oppure si immagini un sistema di spool che, tra i file pronti per la stampa, seleziona sempre il più piccolo, in base a una politica di minimizzazione del tempo medio di servizio. C è il rischio che la stampa di un file molto grande sia continuamente posticipata per l arrivo di file più piccoli pronti per la stampa. Gli esempi discussi mostrano l importanza dei problemi che si incontrano con i processi concorrenti. Si osservi anche che certe situazioni si possono presentare solo per effetto di un insieme di situazioni concomitanti. In pratica esse si presentano raramente, a volte dopo mesi o anni di corretto funzionamento del software e, di conseguenza, gli errori sono difficili da correggere, perché le situazioni che li causano sono praticamente impossibili da riprodurre. Per questo motivo è importante progettare soluzioni corrette in partenza. 3 Soluzioni software per la mutua esclusione Le osservazioni del precedente paragrafo suggeriscono che una buona soluzione al problema della mutua esclusione richiede che siano rispettate le seguenti condizioni: 1. La mutua esclusione tra i processi che vogliono accedere alla sezione critica deve essere garantita. 2. Un processo fuori dalla sezione critica non deve impedire, né ritardare, l accesso alla sezione critica da parte degli altri processi. 3. Non si possono fare ipotesi sulla velocità relativa dei diversi processi. È anche sottinteso che: 4. I processi rimangono nella loro sezione critica per un tempo limitato e non ci deve essere stallo, né ritardo indefinito. Per semplificare la lettura dei prossimi esempi saranno a volte omesse, sostituendole con alcuni puntini, sia la struttura iterativa while (true), che indica la ripetizione ciclica di un gruppo di azioni, sia le azioni preliminari e conclusive codificate nel ciclo. Quindi invece di scrivere: void P() while (true) AzioniPreliminari; CorpoProcedura; AzioniFinali; si userà la seguente notazione semplificata: void P()... CorpoProcedura; Esecuzione concorrente di processi Istituto Italiano Edizioni Atlas

22 Per risolvere il problema della mutua esclusione, utilizziamo una variabile logica, di nome occupata, che descrive lo stato della sezione critica. Se occupata vale true, la sezione critica è in uso da parte di un processo, diversamente la sezione critica è libera. Il meccanismo di accesso, descritto nel programma MutuaEsclusione1, si basa sul fatto che un processo prima di entrare nella sezione critica esamina il valore di occupata. Se la sezione critica è occupata, il processo entra in un ciclo di attesa attiva, dove continua a controllare il valore di occupata. Se, invece, la sezione critica è libera, assegna alla variabile occupata il valore true e, successivamente, accede alla sezione critica. All uscita dalla sezione critica il processo riporta il valore di occupata a false. /* * La classe MutuaEsclusione1 * */ class MutuaEsclusione1 static boolean occupata = false; public static void main(string args[]) /* * P0 e P1 sono eseguiti in parallelo * */ P0(); P1(); Esecuzione concorrente di P 0 /* * P0 esegue P1 esegue * */ void P0() void P1() while (occupata) while (occupata) occupata = true; occupata = true; Sezione Critica Sezione Critica occupata = false; occupata = false; Si osservi che in MutuaEsclusione1 la mutua esclusione non è garantita. Infatti, se i due processi P 0 vogliono accedere contemporaneamente alla sezione critica, può accadere che uno dei due, per esempio P 0, la trovi libera, e quindi la variabile occupata valga false. A questo punto, prima che P 0 riesca a modificare il valore di occupata, anch la esamina, ritiene che la sezione critica sia libera, e vi accede. Nella classe MutuaEsclusione1 il permesso di accedere o meno alla sezione critica è concesso in base allo stato libero/occupato della sezione critica, senza tener conto di cosa vuole fare l altro processo. Si può pensare quindi a una diversa soluzione, formalizzata nella classe MutuaEsclusione2, che tenga conto della volontà dei processi di accedervi. Per descrivere questo approccio, immaginiamo la situazione reale di due automobilisti che viaggiano su strade che si incrociano e, per decidere se attraversare l incrocio o fermarsi, un automobilista osservi l altra strada. Se c è un veicolo che vuole entrare nell incrocio, si ferma e lo lascia passare; se non c è nessuno che vuole entrare nell incrocio, prosegue. Istituto Italiano Edizioni Atlas 1. Esecuzione concorrente di processi 21

23 /* * La classe MutuaEsclusione2 * */ class MutuaEsclusione2 static boolean voglioentrare[] = new boolean[2]; public static void main(string args[]) voglioentrare[0] = false; voglioentrare[1] = false; /* * P0 e P1 sono eseguiti in parallelo * */ P0(); P1(); Esecuzione concorrente di P 0 /* * P0 esegue P1 esegue * */ void P0() void P1() voglioentrare[0] = true; voglioentrare[1] = true; while (voglioentrare[1]) while (VoglioEntrare[0]) Sezione Critica Sezione Critica voglioentrare[0] = false; voglioentrare[1] = false; MutuaEsclusione2 garantisce la mutua esclusione, ma l esecuzione concorrente di P 0 può portare a una situazione di blocco critico a causa del concatenarsi delle seguenti azioni: voglioentrare[0] = true; eseguita da P 0 voglioentrare[1] = true; eseguita da P 1 while (voglioentrare[x]) eseguita da P 0 o da P 1 A questo punto il processo P 0 è bloccato nel proprio ciclo di attesa dal valore di voglioentrare[1] e anch è bloccato in un ciclo di attesa a causa del valore di voglioentrare[0]. Purtroppo chi potrebbe cambiare il valore di voglioentrare[1] sbloccando P 0, cioè il processo P 1, è a sua volta bloccato in un ciclo di attesa. Nel 1965 l olandese Dekker ha proposto un algoritmo per risolvere via software, e con le proprietà specificate all inizio del paragrafo, il problema della mutua esclusione. L algoritmo di Dekker è piuttosto complicato: solo nel 1981 Peterson ha proposto una nuova soluzione al problema scoprendo un algoritmo molto più semplice di quello di Dekker. L algoritmo di Peterson è spiegato nei Contenuti digitali integrativi. Il fatto che ci siano voluti ben 16 anni per scoprire un nuovo semplice algoritmo per risolvere via software il problema della mutua esclusione, lascia comprendere come siano difficili da risolvere i problemi che si incontrano con i processi concorrenti. Di conseguenza la lettura di tali algoritmi richiede molta attenzione. CONTENUTI DIGITALI INTEGRATIVI 1. L algoritmo di Peterson Esecuzione concorrente di processi Istituto Italiano Edizioni Atlas

24 4 Soluzioni hardware per la mutua esclusione Le istruzioni macchina sono eseguite in modo indivisibile, perché non sono interrompibili. Questo significa che, in un sistema con un solo processore, due istruzioni macchina concorrenti sono eseguite, sequenzialmente, in ordine arbitrario e non prevedibile. Supponiamo, per esempio, che due processi P 0 eseguano in concorrenza le istruzioni: /* * P0 P1 * */ LDA posti STA posti La loro esecuzione può avvenire solamente secondo la sequenza A oppure B: A B LDA posti P 0 STA posti P 1 STA posti P 1 LDA posti P 0 La soluzione al problema della mutua esclusione proposta in MutuaEsclusione1, discussa nel precedente paragrafo, non risolve il problema delle corse critiche perché la coppia di istruzioni eseguite in parallelo da P 0 : while (occupata) occupata = true; while (occupata) occupata = true; non è eseguita in modo atomico, cioè in un colpo solo. Se ciò fosse possibile, la soluzione proposta in MutuaEsclusione1 sarebbe corretta, come si capisce anche per la precedente osservazione sulla sequenzialità di esecuzione delle istruzioni macchina. In generale ci sono due modi per eseguire un insieme di istruzioni in modo atomico: disabilitare le interruzioni prima di eseguire le istruzioni che devono essere eseguite in modo atomico e riabilitarle subito dopo; usare istruzioni macchina che controllino un valore in una locazione di memoria e nella stessa istruzione le attribuiscano un valore. Disabilitare le interruzioni L uso di questa tecnica per accedere in mutua esclusione a una regione critica è mostrato di seguito. Essa utilizza due speciali comandi DisabilitaInterruzioni e AbilitaInterruzioni che, richiedendo i servizi del sistema operativo, disabilitano e abilitano le interruzioni. /* * P0 esegue P1 esegue * */ void P0() void P1() DisabilitaInterruzioni; DisabilitaInterruzioni; Sezione critica di P0 Sezione critica di P1 AbilitaInterruzioni; AbilitaInterruzioni; Un processo che vuole accedere in mutua esclusione alla propria regione critica usa il comando DisabilitaInterruzioni prima di accedervi. A questo punto il processo non può essere interrotto e la sezione critica è eseguita in mutua esclusione. Il processo riabilita le interruzioni in uscita alla sezione critica con il comando AbilitaInterruzioni. Istituto Italiano Edizioni Atlas 1. Esecuzione concorrente di processi 23

25 La soluzione è semplice e di immediata applicazione; inoltre può essere usata senza alcuna modifica anche con N processi concorrenti. Presenta però alcuni gravi difetti: non è applicabile nel caso di sistemi multiprocessore; è comunque sconsigliata nei sistemi a singolo processore, perché non è opportuno lasciare ai processi la possibilità di disabilitare le interruzioni: infatti, se un processo si blocca o fallisce mentre è nella sezione critica, le interruzioni rimangono disabilitate; quando il processo è nella sezione critica e le interruzioni sono disabilitate, il sistema funziona come sistema monoprogrammato senza che il sistema operativo possa alternare l esecuzione dei processi secondo le proprie politiche. Naturalmente il problema è rilevante solo se la sezione critica ha una grande dimensione. Usare istruzioni macchina In molti processori c è una speciale istruzione macchina TSL (Test and Set Lock, controlla e blocca), che ha la seguente sintassi generale: TSL registro, blocco Essa trasferisce in un registro del processore il contenuto della parola di memoria blocco e, con la stessa istruzione, memorizza in blocco un valore intero diverso da zero. Se interpretiamo i valori di blocco pensando che il valore 0 indichi assenza di blocco, mentre un valore diverso da zero indichi che il blocco è impostato, l azione di TSL consiste nel prelevare il valore di blocco, per poterlo poi controllare, e contemporaneamente impostare il bloccaggio. L istruzione Test and Set Lock, essendo un istruzione macchina, garantisce che le due operazioni di lettura di un dato e assegnazione di un valore a quel dato siano eseguite atomicamente. Se due processi eseguono simultaneamente due istruzioni TSL, esse sono eseguite in sequenza. Il comportamento di TSL può essere pensato come quello di una speciale funzione testset che restituisce il valore del proprio argomento x (azione 1) e modifica x assegnandogli il valore true (azione 2). 2 1 testset (x): true x La funzione testset può essere definita nel seguente modo: /* * La funzione testset * */ boolean testset(boolean x) boolean salvax; salvax = x; x = true; return salvax; Gli effetti di testset sono riassunti nella seguente tabella: x testset(x) x restituito true true true false false true La classe MutuaEsclusioneTestSet risolve il problema dell accesso in mutua esclusione alle sezioni critiche usando la funzione testset. x Esecuzione concorrente di processi Istituto Italiano Edizioni Atlas

26 /* * La classe MutuaEsclusioneTestSet * */ class MutuaEsclusioneTestSet static boolean blocco; public static void main(string args[]) blocco = false; /* * P0 e P1 sono eseguiti in parallelo * */ P0(); P1(); /* * P0 esegue P1 esegue * */ void P0() void P1() while (testset(blocco)) while (testset(blocco)) Sezione Critica Sezione Critica blocco = false; blocco = false; Un processo può entrare nella propria sezione critica solo se trova il valore di blocco impostato a false. Analizziamo il comportamento dei due processi quando cercano di accedere simultaneamente alle rispettive sezioni critiche. I processi devono eseguire la funzione testset e il primo dei due che trova il valore di blocco messo a false accede alla sezione critica, ponendo contemporaneamente il valore di blocco uguale a true e forzando l altro processo a eseguire un ciclo di attesa attiva. L attesa termina quando il processo che ha guadagnato l accesso alla sezione critica la lascia e riporta il valore di blocco a false. La soluzione proposta ha il pregio di essere immediatamente estendibile a un numero arbitrario di processi concorrenti. Inoltre, poiché durante l esecuzione dell istruzione macchina TSL nessuno può accedere alla memoria, la soluzione si applica anche ai sistemi multiprocessore. Bisogna però osservare che la mutua esclusione è garantita dal ciclo di attesa attiva: while (testset(blocco)) In tale caso il processo, o i processi, in attesa continuano a usare le risorse del processore mentre aspettano che la sezione critica si liberi. Quando un processo non può accedere alla sezione critica, sarebbe meglio bloccarlo, per poi riattivarlo al termine dell attesa, quando l accesso alla sezione critica diventa possibile. I semafori, che saranno trattati nel prossimo paragrafo, hanno precisamente questa funzione. AUTOVERIFICA Domande da 1 a 3 pag Problemi da 1 a 7 pag CONTENUTI DIGITALI INTEGRATIVI 2. L istruzione di scambio Istituto Italiano Edizioni Atlas 1. Esecuzione concorrente di processi 25

27 5 I semafori I semafori sono speciali variabili pensate per gestire i meccanismi di collaborazione tra processi concorrenti. L idea di fondo alla base dei semafori è che i processi possono collaborare, scambiandosi segnali, inviati e ricevuti con queste variabili. Per inviare e ricevere segnali, un processo dispone delle due primitive wait e signal. Un processo, durante la propria esecuzione, può inviare segnali con signal e può fermarsi in attesa di ricevere un segnale inviato da un altro processo usando la primitiva wait. Con i semafori è quindi possibile implementare la collaborazione tra processi usando meccanismi di attesa-risveglio ed evitare i cicli di attesa attiva. Le primitive wait e signal sono usate nel seguente modo: con la primitiva signal un processo invia un segnale a un semaforo che lo riceve e lo memorizza; la primitiva wait serve invece per ricevere i segnali inviati a un dato semaforo: se il segnale non è stato ancora inviato, il processo è sospeso in attesa della trasmissione; se invece il segnale è già stato trasmesso, il processo lo riceve e prosegue nella propria esecuzione. I semafori possono essere pensati come oggetti composti da una variabile intera e da una coda di processi. Sono creati assegnando un valore alla variabile intera e possono essere manipolati con le sole primitive wait e signal. La variabile intera serve per contare i segnali inviati al semaforo: il suo valore è incrementato dalla primitiva signal e decrementato da wait. La coda di processi si forma per effetto dei processi che cercano di ricevere un segnale con wait: se il contatore è minore o uguale 0, e quindi non ci sono segnali da ricevere, il processo è fermato e inserito nella coda. Nel semaforo s in figura, per esempio, la variabile intera ha il valore -3 e nella coda associata a s ci sono tre processi in attesa di essere riattivati. s 3 P 2 P 1 P 0 Lo stato di un semaforo è rappresentato dal valore assunto da una variabile intera e da una coda di processi associata al semaforo. /* * Composizione di un semaforo s: un intero e una coda di processi * */ int count; CodaProcessi coda; Un semaforo s, quando viene definito, è creato con un valore intero per la variabile s.count e con la coda di processi s.coda vuota. La coda s.coda è gestita in modalità FIFO. Un variabile semaforica s, dopo la creazione, può essere manipolata soltanto con le procedure wait e signal che sono eseguite in modalità atomica e quindi non interrompibili: wait eseguita da un processo P sul semaforo s decrementa s.count e, se il valore decrementato è minore di 0, blocca P e lo inserisce nella coda associata al semaforo s. signal eseguita su un semaforo s incrementa s.count e, se s.coda non è vuota, attiva uno dei processi in attesa nella coda associata a s. Il comportamento di wait e signal può essere descritto con i seguenti diagrammi di flusso Esecuzione concorrente di processi Istituto Italiano Edizioni Atlas

28 P esegue s.wait() P esegue s.signal() s.count-- s.count < 0 Sì s.count < 0 Sì No Estrai Q da s.coda Attiva Q No Inserisci P in s.coda Blocca P s.count++ Dalla definizione di wait e signal, si può osservare che count serve a contare i segnali inviati a un semaforo e, in ogni momento, rappresenta il numero di segnali inviati con s.signal() e non ancora consumati con s.wait(). Per comprendere meglio il funzionamento dei semafori, si consideri un semaforo s con il valore iniziale di count uguale a 1 e senza processi in coda. Lo stato iniziale del semaforo è visualizzato nella figura a), mentre la figura b) descrive lo stato del semaforo dopo che un processo ha eseguito s.wait(): il valore di count è diventato 0 e la coda associata a s è vuota. s 1 s 0 s 1 a) b) c) P Se a questo punto un processo P esegue una wait sul semaforo s il valore di count diventa -1 e il processo P è inserito nella coda di s, come è mostrato nella figura c). Supponiamo che a questo punto un processo Q esegua tre volte s.signal(). La prima esecuzione di s.signal() riporta il semaforo nello stato b): il processo P è stato svegliato e non ci sono più processi in coda, count vale 0. La seconda esecuzione di s.signal() porta il semaforo nello stato descritto in a). Dopo la terza esecuzione di s.signal() il semaforo non ha processi in coda e count vale 2. Generalizziamo queste osservazioni dicendo che il valore assunto da count di un semaforo s è indicativo delle seguenti situazioni: quando count è maggiore o uguale a zero, esso indica il numero di segnali di sveglia che sono stati inviati al semaforo s con s.signal() e non sono stati ancora ricevuti con s.wait(); quando count è minore di zero, esso indica quanti sono i processi in coda, in attesa di ricevere un segnale di sveglia con s.signal(). Questo significa che un semaforo ricorda i segnali di sveglia inviati. Un valore positivo di count indica anche il numero di s.wait() che si possono eseguire prima che un processo venga bloccato dal semaforo. Mostriamo ora come sia possibile usare i semafori per risolvere i due problemi fondamentali della programmazione concorrente: la mutua esclusione e la sincronizzazione. Istituto Italiano Edizioni Atlas 1. Esecuzione concorrente di processi 27

29 Mutua esclusione con i semafori Per implementare la mutua esclusione si usa un semaforo con la variabile count inizializzata a 1. Occorre poi delimitare la porzione di codice che deve essere eseguita in mutua esclusione con wait e signal su quel semaforo. wait e signal prendono il posto delle istruzioni speciali EntraSezioneCritica ed EsciSezioneCritica che sono state utilizzate nel Paragrafo 2 per garantire la mutua esclusione nell accesso alle sezioni critiche. La tecnica da usare è mostrata nel seguente programma dove, per gestire l accesso alle sezioni critiche, si usa un semaforo di nome mutex e si ipotizza l esistenza della classe Semaforo nella quale sono definiti i metodi wait e signal con il comportamento sopra descritto. Osserviamo che la soluzione è generalizzabile a N processi concorrenti. /* * Mutua Esclusione con i semafori * */ class MutuaEsclusione static Semaforo mutex(1); mutex.count è inizializzato a 1 public static void main(string args[]) /* * P0 e P1 sono eseguiti in parallelo * */ P0(); P1(); /* * P0 esegue P1 esegue * */ void P0() void P1() EntraSezioneCritica mutex.wait(); mutex.wait(); Sezione Critica Sezione Critica mutex.signal(); mutex.signal(); EsciSezioneCritica I processi per accedere alla propria sezione critica eseguono mutex.wait(). Poiché il metodo wait non è interrompibile, anche se P 0 eseguono contemporaneamente mutex.wait(), le due esecuzioni saranno sequenziali. Il primo processo che esegue wait, supponiamo sia P 0, diminuisce il valore del contatore portandolo a 0 e prosegue nell esecuzione entrando nella propria sezione critica. 1 P 0 mutex.wait() Esecuzione concorrente di processi Istituto Italiano Edizioni Atlas

30 A questo punto P 1 non può accedere alla sezione critica, perché l esecuzione di mutex.wait() da parte di P 1 diminuisce il valore di count che diventa negativo e provoca la sospensione d i P 1. 0 P 1 mutex.wait() 1 P 1 P 1 rimane bloccato nella coda di mutex sino a quando P 0, uscendo dalla propria sezione critica, esegue mutex.signal() che riporta count a 0 e riattiva P 1. Sincronizzazione con i semafori Per sincronizzare due processi su un evento bisogna utilizzare un semaforo s inizializzato a 0 e usare wait e signal nel seguente modo: il processo che rileva l evento esegue s.signal(), mentre il processo che attende l evento per sincronizzarsi su di esso esegue s.wait(). Si consideri il caso di due processi P 0 che si devono sincronizzare su un evento rilevato da P 1. Per esempio, P 1 rileva l arrivo in stazione di un treno a lunga percorrenza, mentre P 0 autorizza la partenza di un treno locale che viaggia in coincidenza con il primo treno. /* * Sincronizzazione con i semafori * */ class Sincronizzazione static Semaforo s(0); s.count è inizializzato a 0 public static void main(string args[]) /* * P0 e P1 sono eseguiti in parallelo * */ P0(); P1(); /* * P0 esegue P1 esegue * */ void P0() void P1() AzioniPreEvento; RilevaEvento; s.wait(); Attende evento s.signal(); Evento rilevato AzioniDopoEvento; AltreAzioni; Per controllare la correttezza della soluzione si supponga che P 0 esegua s.wait() prima ch rilevi l evento ed esegua s.signal(). In tale caso s.count diventerebbe negativo e P 0 sarebbe bloccato sul semaforo s sino alla rilevazione dell evento da parte di P 1. Se invece foss a eseguire s.signal() per primo, il valore di s.count diventerebbe 1 e P 0, dopo avere invocato s.wait(), non sarebbe bloccato e potrebbe proseguire nell esecuzione. Istituto Italiano Edizioni Atlas 1. Esecuzione concorrente di processi 29

31 AUTOVERIFICA Test interattivo AUTOVERIFICA Domande MUTUA ESCLUSIONE E SINCRONIZZAZIONE 1. Quali delle seguenti affermazioni sono vere (V) e quali false (F)? a) I problemi caratteristici della concorrenza sono mutua esclusione e sincronizzazione b) La mancata mutua esclusione nell accesso alle sezioni critiche può causare inconsistenza nei dati c) La sincronizzazione dei processi è garantita con la mutua esclusione d) La mancata sincronizzazione dei processi può causare la duplicazione dei dati e) L esigenza della mutua esclusione si ha solo con processi concorrenti in ambiente multiprocessore f) L esigenza di sincronizzare i processi si ha sia in ambiente multiprocessore che in ambiente monoprocessore 2. I processi P 0, eseguiti in parallelo, incrementano la variabile comune count che, prima degli incrementi, vale 35: /* * P0 P1 * */ count = count + 1; count = count + 1; Quale valore finale (non corretto) può assumere la variabile count per effetto dell esecuzione concorrente dei due incrementi? 3. I processi P 0 sono eseguiti in parallelo e cooperano come indicato nel seguente frammento di programma, dove si fa uso delle istruzioni speciali EntraCritica ed EsciCritica: /* * P0 P1 * */ while (true) while (true) ProduceDati; EntraCritica; EntraCritica; LeggeBuffer; ScriveBuffer; EsceCritica; EsceCritica; StampaDati; Quali delle seguenti affermazioni sono vere (V) e quali false (F)? a) L accesso in mutua esclusione al buffer è garantito b) La sincronizzazione è garantita c) Se il processo P 0 è più veloce del processo P 1, nella stampa alcuni dati possono essere persi d) Se il processo P 0 è più lento del processo P 1, nella stampa alcuni dati possono essere stampati più volte Esecuzione concorrente di processi Istituto Italiano Edizioni Atlas

32 SEMAFORI E PROCESSI CONCORRENTI 4. Quali delle seguenti affermazioni sono vere (V) e quali false (F)? a) I semafori sono speciali variabili per implementare il meccanismo attesa risveglio tra processi concorrenti b) I semafori sono rappresentabili come un intero e una coda di processi c) I semafori sono una struttura normalmente programmabile d) La primitiva wait decrementa la variabile intera del semaforo e) Se il contatore di un semaforo vale 5 allora ci sono 4 processi in coda sul semaforo f) Se il contatore di un semaforo è maggiore o uguale a 0 non ci sono processi in coda su quel semaforo AUTOVERIFICA 5. Il valore di count del semaforo s è 3. Un processo P esegue per tre volte s.wait() e subito dopo il processo Q esegue a sua volta s.wait(). Quali sono gli stati di P e di Q? a) P prosegue nell esecuzione, Q in attesa. b) P prosegue nell esecuzione, Q prosegue nell esecuzione. c) P in attesa, Q prosegue nell esecuzione. d) P in attesa, Q in attesa. 6. Il valore di count del semaforo s è 0. Un processo P esegue s.wait() e poco dopo il processo Q esegue s.signal(). Quali sono gli stati di P e di Q? a) P prosegue nell esecuzione, Q in attesa. b) P prosegue nell esecuzione, Q prosegue nell esecuzione. c) P in attesa, Q prosegue nell esecuzione. d) P in attesa, Q in attesa. 7. I processi P e Q competono per accedere a una sezione critica. In un dato momento P è in attesa nella coda associata a mutex, mentre Q si trova nella propria sezione critica. /* * P Q * */ mutex.wait(); mutex.wait(); SezioneCritica; SezioneCritica; mutex.signal(); mutex.signal(); Supponendo che i due processi stiano girando in un sistema multiprocessore, quali sono i rispettivi stati? a) P Running, Q Ready b) P Running, Q Running c) P Ready, Q Running d) P Ready, Q Ready 8. Nelle medesime ipotesi del quesito precedente, ma supponendo che i due processi stiano girando in un sistema a singolo processore, quali sono i rispettivi stati? a) P Running, Q Ready b) P Running, Q Running c) P Ready, Q Running d) P Ready, Q Ready Istituto Italiano Edizioni Atlas 1. Esecuzione concorrente di processi 57

33 FOCUS NOTES Concurrent processing Parallel processing is the function that allows program instructions to be executed by multiple processors, with the goal of running a program faster. The parallelism is real in a multiprocessing system, when two or more processors share the work to be done, or simulated in a multiprogramming system, when multiple programs submitted by users are each allowed to use the processor for a short time. In distributed systems multiple processes are executed on multiple systems. All of these involve cooperation, competition, and communication between processes. Competition occurs when accessing the resources: it can lead to deadlock of the processes. Cooperation among processes occurs in the sharing of resources, for example sharing an area of main memory, or file for concurrent processes on a single computer. Communication between processes occurs in message passing, as in a distributed system. In concurrent processing, tasks are broken down into subtasks that are assigned to separate processors to perform simultaneously instead of sequentially, as they would have to be carried out by a single processor. Mutual exclusion The main problem in concurrency is processes interfering with each other while accessing a shared resource (files, I/O devices such as printers, shared data structures). Mutual exclusion is the way of making sure that each process, executing the shared data or resources, excludes all others from doing so simultaneously. While one process accesses a shared resource, all other processes, requiring to do so at the same time, are kept waiting; when that process has finished accessing the shared resource, one of the processes waiting to do so is allowed to proceed. The solution is to allow only one process at a time to enter the code that accesses the shared resource, for example a shared global variable: such code is called a critical section. When one process is inside a critical section of code, other processes must be prevented from entering that section. Semaphore An operating system is designed as a collection of cooperating processes with efficient mechanisms for supporting cooperation. Two or more processes can cooperate by simple signals that are sent and received by special variables called semaphores: a process is forced to stop at a specific point of its execution until it has received a specific signal. The signals are sent and received by these variables. In the purpose of signaling, wait and signal, two primitives associated with a semaphore, are available respectively for the signal receiver and the signal sender. The cooperation among processes is implemented through the invocation of these two primitives. The primitive signal sends a signal to a semaphore that receives and stores it. The primitive wait receives the signals sent to a semaphore: if the signal has not yet been sent, the process is suspended waiting for the transmission; if the signal has already been sent, the process receives it and continues its execution Esecuzione concorrente di processi Istituto Italiano Edizioni Atlas

34 Programmazione concorrente in Java 1 La classe Thread Java è nato quando i concetti della programmazione parallela erano già ben presenti nel mondo dell informatica e nei sistemi operativi. Quindi in Java, a differenza degli altri linguaggi di programmazione, sono stati inseriti fin dalla nascita gli strumenti per sfruttare questi aspetti: questo è tra i motivi che hanno creato il successo di Java presso i programmatori di tutto il mondo. Nella programmazione parallela un singolo programma viene suddiviso in più processi che vengono eseguiti in parallelo. Specialmente nel caso di programmi interattivi, o che utilizzano la rete, in molti casi la soluzione migliore è suddividerne l esecuzione in sequenze di istruzioni separate, che lavorano in parallelo condividendo l utilizzo della CPU. Un thread viene definito come una sequenza di istruzioni in corso di esecuzione. In un ambiente multithread possiamo creare più thread contemporaneamente attivi, cioè più sequenze di istruzioni che vengono eseguite parallelamente. È possibile anche avere più thread attivi dentro allo stesso programma, cioè il concetto di thread ci aiuta a parallelizzare i programmi Java. Il multithreading sfrutta il fatto che tipicamente un thread, cioè una sequenza di istruzioni in esecuzione, spende molto del proprio tempo aspettando che una risorsa (per esempio la memoria o un disco) si renda disponibile, o che un altro programma segnali che una certa condizione si è verificata. Java utilizza i thread per permettere ai programmi di lavorare in modo asincrono: se un thread, per esempio un istanza di un browser che accede a Internet, deve interrompersi per attendere dati dalla rete, può farlo senza fermare o ritardare nessun altro thread o programma in esecuzione nel sistema. Il thread che legge input dalla tastiera, o dal mouse, passa la maggior parte del proprio tempo in attesa; un programma di animazione produce una videata ogni sessantesimo di secondo, per il resto rimane inattivo (o dormiente), lasciando che altri programmi proseguano il proprio lavoro. Java fornisce meccanismi semplici ed eleganti per controllare e gestire la creazione di thread, le priorità, lo scambio di messaggi e la sincronizzazione tra thread: strumenti molto potenti che consentono di sviluppare con efficienza la programmazione concorrente. Gli elementi di Java che stanno alla base della realizzazione di programmi multithreaded, e quindi paralleli, sono la classe Thread, insieme ai suoi metodi, e l interfaccia Runnable. Il concetto di thread in Java viene espresso tramite la classe Thread. Questa contiene tutti gli strumenti per gestire e controllare i thread. Un oggetto Thread può essere considerato come il pannello di controllo contenente i comandi per gestire un thread. Esso fornisce metodi per controllare se il thread è in esecuzione, terminato, sospeso o dormiente. Ogni singolo thread ha un inizio, con la creazione del thread, una sequenza di operazioni che deve eseguire, con eventuali interruzioni del proprio lavoro, e poi una fine. I normali programmi che non usano la programmazione concorrente si dicono single-threaded: si possono considerare come programmi eseguiti da un solo thread, senza parallelismo nelle operazioni. Di fatto, quando viene fatto partire un qualunque programma Java, c è già un thread in corso: quello che sta eseguendo il programma che è stato lanciato. È possibile ottenere una descrizione del thread in corso tramite il metodo statico Thread.currentThread. Istituto Italiano Edizioni Atlas Programmazione concorrente in Java 73

35 PROGETTO 1 Visualizzare le informazioni relative al thread in corso. Programma Java (Thread1.java) class Thread1 public static void main(string args[]) Thread tic = Thread.currentThread(); tic.setname("thread in esecuzione"); System.out.println("Ecco il thread in corso: " + tic); try for (int i = 3; i > 0; i ) System.out.println(i); Thread.sleep(1000); catch (InterruptedException e) System.out.println("Mi hanno interrotto"); System.out.println("Fine del lavoro."); La descrizione del thread in esecuzione viene assegnata alla variabile tic. Il metodo setname permette di assegnare un nome simbolico al thread. La prima println quindi riporta a video una descrizione del thread. A questo punto il ciclo for effettua un conto alla rovescia da 3 a 2 a 1, e poi il programma scrive Fine del lavoro e termina. Il conto alla rovescia contiene il metodo sleep, il cui parametro è il numero di millisecondi durante i quali il programma deve fermarsi ( dormire ). Quindi Thread.sleep(1000) impone al thread di sospendersi per 1 secondo. La presenza di sleep impone la presenza del costrutto try catch, per gestire un eventuale eccezione, che potrebbe verificarsi se un altro thread volesse interrompere il thread in corso mentre dorme. L esecuzione del programma fornisce il seguente output: Ecco il thread in corso: Thread[Thread in esecuzione,5,main] Fine del lavoro. È importante osservare la descrizione del thread che viene visualizzata: il nome del thread, che è stato impostato attraverso il metodo Thread.setName; il valore 5 che indica la priorità assegnata in automatico dal sistema; il nome main del gruppo di thread a cui questo thread appartiene. 74 Programmazione concorrente in Java Istituto Italiano Edizioni Atlas

36 2 L interfaccia Runnable Vediamo ora i meccanismi per creare thread aggiuntivi. Si tratta di creare una nuova istanza di Thread, indicando ad essa quale codice eseguire. In Java è possibile eseguire un thread su qualunque oggetto che implementi l interfaccia Runnable. L interfaccia Runnable indica la richiesta che un certo pezzo di codice venga eseguito in modo asincrono, cioè all interno di un thread. Volendo allora creare una classe EsempioDiThread con la quale creare dei thread, essa deve essere dichiarata in questo modo: class EsempioDiThread implements Runnable Inoltre, al proprio interno, la classe dovrà implementare un metodo chiamato run. Questo è un elemento fondamentale, in quanto Java prevede che: si crei un nuovo thread con l istruzione new; si avvii il nuovo thread con l istruzione start, specificando l oggetto che deve eseguire il thread; a questo punto il nuovo thread cerca il metodo run dell oggetto ed esegue il codice in esso contenuto; dopo aver eseguito il codice di run, il thread termina il suo compito. Creare un thread che genera altri thread. Diagramma della classe EsempioDiThread primot nuovot run PROGETTO 2 Implementazione della classe (EsempioDiThread.java) class EsempioDiThread implements Runnable // crea una nuova istanza di EsempioDiThread EsempioDiThread() Thread primot = Thread.currentThread(); System.out.println("Primo thread: " + primot); Thread nuovot = new Thread(this, "Thread figlio"); System.out.println("\t\tThread figlio: " + nuovot); nuovot.start(); try Thread.sleep(2000); catch (InterruptedException e) System.out.println("Primo thread: Mi hanno interrotto"); System.out.println("Primo thread terminato"); Istituto Italiano Edizioni Atlas Programmazione concorrente in Java 75

37 // metodo che il nuovo thread esegue public void run() try for (int i = 1; i < 5; i++) System.out.println("\t\t" + i); Thread.sleep(1000); catch (InterruptedException e) System.out.println("\t\tThread figlio: Mi hanno interrotto"); System.out.println("\t\tThread figlio terminato"); Programma Java (Thread2.java) class Thread2 public static void main(string args[]) new EsempioDiThread(); In questo programma viene definita la classe EsempioDiThread, e il main crea un oggetto di quella classe con l istruzione new EsempioDiThread(); che determina l esecuzione del costruttore EsempioDiThread. Il thread principale crea un nuovo thread, generalmente chiamato thread figlio, tramite l istruzione: Thread nuovot = new Thread(this, "Thread figlio"); Questa crea il thread figlio passando il parametro this, per indicare che il nuovo thread deve chiamare il metodo run dell oggetto this. Il passo importante è l istruzione: nuovot.start(); che avvia effettivamente l esecuzione del nuovo thread. In pratica, a questo punto l oggetto da poco creato (this) sta eseguendo sia il thread padre che il figlio, i quali procedono in modo indipendente e asincrono l uno dall altro, secondo la definizione di thread. Il thread padre dorme per 2 secondi e termina; il figlio conta da 1 a 4 e termina a sua volta. 76 Programmazione concorrente in Java Istituto Italiano Edizioni Atlas

38 L output del programma è il seguente: Primo thread: Thread[main,5,main] Thread figlio: Thread[Thread figlio,5,main] 1 2 Primo thread terminato 3 4 Thread figlio terminato In questo esempio non è stato usato il metodo setname per il thread padre, quindi in output viene visualizzato il nome main. Inoltre entrambi i thread hanno priorità 5. Si osservi che l output del programma produce le scritte dei due thread in modo mescolato. Il primo thread dorme per due secondi poi termina con la scritta Primo thread terminato, mentre il secondo thread sta effettuando il conteggio da 1 a 4. Poi chiude con la scritta Thread figlio terminato. Le tabulazioni \t inserite nelle println servono a distinguere meglio gli output del figlio da quelle del padre. 3 Assegnazione della CPU al thread di più alta priorità Quando è attivo un grande numero di thread, può capitare che più thread siano pronti a utilizzare la CPU: per esempio un thread ha ricevuto i dati che attendeva dalla memoria, un altro i dati che attendeva dal disco, ed entrambi vorrebbero procedere con l esecuzione del proprio lavoro. Si tratta di decidere quale thread ha il diritto di riprendere per primo l esecuzione. L ambiente runtime di Java utilizza le priorità per decidere le precedenze e l importanza dei diversi thread. Così come un sistema operativo assegna priorità ai thread di sistema, il programmatore assegna priorità ai thread che compongono il proprio programma. In Java la priorità è indicata da un numero compreso tra 1 e 10. Il progetto seguente presenta due thread a diverse priorità e mostra la differenza nella quantità di lavoro che ciascuno di essi riesce a effettuare nel tempo a disposizione. PROGETTO 3 Lettura di un file da parte di due thread concorrenti. Si immagini di avere un file molto grande da leggere, per esempio le anagrafiche della società di servizio del gas, semplicemente per contare il numero dei clienti. Per migliorare l efficienza del programma, invece del tradizionale programma single-thread, si vogliono utilizzare due thread che procedono in parallelo. Nel programma vengono però assegnate priorità diverse ai due thread in modo da verificare, alla fine dell esecuzione, quanti clienti ogni thread è riuscito a contare. Nel programma viene allora definita una classe LettoreFile il cui costruttore: riceve come parametro prio, cioè la priorità che si vuole assegnare al lettore stesso; crea un thread leggirecord che svolge l effettivo lavoro: leggirecord = new Thread(this); Istituto Italiano Edizioni Atlas Programmazione concorrente in Java 77

39

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

SISTEMI OPERATIVI. Sincronizzazione dei processi. Domande di verifica. Luca Orrù Centro Multimediale Montiferru 30/05/2007 2007 SISTEMI OPERATIVI Sincronizzazione dei processi Domande di verifica Luca Orrù Centro Multimediale Montiferru 30/05/2007 Sincronizzazione dei processi 1. Si descrivano i tipi di interazione tra processi?

Dettagli

Reti e problematiche di Rete

Reti e problematiche di Rete Reti e problematiche di Rete I Processi Concorrenti Enrico Cavalli Anno Accademico 2008-2009 I problemi con i processi concorrenti 1 I processi concorrenti La concorrenza tra processi avviene secon diverse

Dettagli

CAPITOLO 27 SCAMBIO DI MESSAGGI

CAPITOLO 27 SCAMBIO DI MESSAGGI 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:

Dettagli

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

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

Dettagli

Capitolo 7: Sincronizzazione

Capitolo 7: Sincronizzazione Capitolo 7: Sincronizzazione Il problema della sincronizzazione. Il problema della sezione critica. Hardware per la sincronizzazione. Semafori. Problemi classici di sincronizzazione. Monitor (cenni). 7.1

Dettagli

Java Virtual Machine

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

Dettagli

Implementazione dei monitor tramite semafori Attesa condizionale Sincronizzazione nei sistemi operativi reali Transazioni atomiche

Implementazione dei monitor tramite semafori Attesa condizionale Sincronizzazione nei sistemi operativi reali Transazioni atomiche Implementazione dei monitor tramite semafori Attesa condizionale Sincronizzazione nei sistemi operativi reali Transazioni atomiche 5.1 Implementazione dei monitor con i semafori Un monitor è un tipo di

Dettagli

SISTEMI OPERATIVI. Deadlock (blocco critico) Domande di verifica. Luca Orrù Centro Multimediale Montiferru 04/06/2007

SISTEMI OPERATIVI. Deadlock (blocco critico) Domande di verifica. Luca Orrù Centro Multimediale Montiferru 04/06/2007 2007 SISTEMI OPERATIVI Deadlock (blocco critico) Domande di verifica Luca Orrù Centro Multimediale Montiferru 04/06/2007 Deadlock (blocco critico) 1. Si descriva il deadlock e le condizioni sotto cui si

Dettagli

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

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2015-16. Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2015-16 Pietro Frasca Lezione 15 Martedì 24-11-2015 Struttura logica del sottosistema di I/O Processi

Dettagli

Informatica 3. Informatica 3. LEZIONE 6: Il controllo dell esecuzione. Lezione 6 - Modulo 1. Errori durante l esecuzione. Il controllo dell esecuzione

Informatica 3. Informatica 3. LEZIONE 6: Il controllo dell esecuzione. Lezione 6 - Modulo 1. Errori durante l esecuzione. Il controllo dell esecuzione Informatica 3 Informatica 3 LEZIONE 6: Il controllo dell esecuzione Modulo 1: La gestione delle eccezioni Modulo 2: Programmazione concorrente Lezione 6 - Modulo 1 La gestione delle eccezioni Politecnico

Dettagli

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) 12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,

Dettagli

Funzioni del Sistema Operativo

Funzioni del Sistema Operativo Il Software I componenti fisici del calcolatore (unità centrale e periferiche) costituiscono il cosiddetto Hardware (ferramenta). La struttura del calcolatore può essere schematizzata come una serie di

Dettagli

Sistemi Operativi. Lezione 7 Comunicazione tra processi

Sistemi Operativi. Lezione 7 Comunicazione tra processi Lezione 7 Comunicazione tra processi Introduzione La soluzione sw al problema della mutua esclusione è abbastanza complessa Algoritmo di Peterson La soluzione hw mediante disabilitazione degli interrupt

Dettagli

Prefazione. Contenuti

Prefazione. Contenuti Prefazione Il sistema operativo costituisce uno dei componenti fondamentali di ogni sistema di elaborazione, in particolare è quello con cui l utente entra direttamente in contatto quando accede al sistema,

Dettagli

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio QUEUE : considerazioni QUEUE : considerazioni Si è realizzata una struttura dati complessa utilizzandone una primitiva, l array. Il pregio di tale implementazione è il basso costo computazionale, mentre

Dettagli

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

Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione. Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione. Compito fondamentale di un S.O. è infatti la gestione dell

Dettagli

Programmazione in Java (I modulo) Lezione 3: Prime nozioni

Programmazione in Java (I modulo) Lezione 3: Prime nozioni Programmazione in Java (I modulo) Lezione 3: Prime nozioni La volta scorsa Abbiamo avuto un primo assaggio! Abbiamo visto come usare l editor per scrivere un programma Java. Abbiamo analizzato riga per

Dettagli

1 Processo, risorsa, richiesta, assegnazione 2 Concorrenza 3 Grafo di Holt 4 Thread 5 Sincronizzazione tra processi

1 Processo, risorsa, richiesta, assegnazione 2 Concorrenza 3 Grafo di Holt 4 Thread 5 Sincronizzazione tra processi 1 Processo, risorsa, richiesta, assegnazione 2 Concorrenza 3 Grafo di Holt 4 Thread 5 Sincronizzazione tra processi Il processo E' un programma in esecuzione Tipi di processo Stati di un processo 1 indipendenti

Dettagli

Il costrutto monitor [Hoare 74]

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

Dettagli

CATALOGO INFORMATICA

CATALOGO INFORMATICA I prezzi al pubblico indicati nel presente catalogo sono stati determinati in ragione di IVA e sono immutabili per tutto l anno. Notizie e comunicazioni di cambiamenti dei prezzi di copertina nel corso

Dettagli

CAPITOLO 24 I MONITOR

CAPITOLO 24 I MONITOR EFFETTO DELLE PRIMITIVE - signal E wait SUI SEMAFORI CAPITOLO 24 I MONITOR I semafori sono un mezzo efficace per la gestione della mutua esclusione in ambienti con processi concorrenti, ma spesso è difficile

Dettagli

Sistema Operativo Compilatore

Sistema Operativo Compilatore MASTER Information Technology Excellence Road (I.T.E.R.) Sistema Operativo Compilatore Maurizio Palesi Salvatore Serrano Master ITER Informatica di Base Maurizio Palesi, Salvatore Serrano 1 Il Sistema

Dettagli

Il costrutto monitor [Hoare 74]

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

Dettagli

Programmazione concorrente in Java. Dr. Paolo Casoto, Ph.D. - 2012 1

Programmazione concorrente in Java. Dr. Paolo Casoto, Ph.D. - 2012 1 + Programmazione concorrente in Java 1 + Introduzione al multithreading 2 La scomposizione in oggetti consente di separare un programma in sottosezioni indipendenti. Oggetto = metodi + attributi finalizzati

Dettagli

Elementi di Informatica e Programmazione

Elementi di Informatica e Programmazione Elementi di Informatica e Programmazione Il Sistema Operativo Corsi di Laurea in: Ingegneria Civile Ingegneria per l Ambiente e il Territorio Università degli Studi di Brescia Docente: Daniela Fogli Cos

Dettagli

I processi. Un processo è una attività, controllata da un programma, che si svolge su un processore.

I processi. Un processo è una attività, controllata da un programma, che si svolge su un processore. I processi Cos è un processo? Un processo è una attività, controllata da un programma, che si svolge su un processore. Il programma è una entità statica che descrive la sequenza di istruzioni che devono

Dettagli

Sistema Operativo e Applicativi

Sistema Operativo e Applicativi Sistema Operativo e Applicativi Modulo di Informatica Dott.sa Sara Zuppiroli A.A. 2012-2013 Modulo di Informatica () Software A.A. 2012-2013 1 / 36 Software Conosciamo due classi di software: Programmi

Dettagli

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

Sistemi Operativi STRUTTURA DEI SISTEMI OPERATIVI 3.1. Sistemi Operativi. D. Talia - UNICAL STRUTTURA DEI SISTEMI OPERATIVI 3.1 Struttura dei Componenti Servizi di un sistema operativo System Call Programmi di sistema Struttura del sistema operativo Macchine virtuali Progettazione e Realizzazione

Dettagli

CAPITOLO 1 I SISTEMI OPERATIVI

CAPITOLO 1 I SISTEMI OPERATIVI CAPITOLO 1 I SISTEMI OPERATIVI Introduzione ai sistemi operativi pag. 3 La shell pag. 3 Tipi di sistemi operativi pag. 4 I servizi del sistema operativo pag. 4 La gestione dei file e il file system Il

Dettagli

Monitor. Introduzione. Struttura di un TDA Monitor

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

Dettagli

Informatica di Base - 6 c.f.u.

Informatica di Base - 6 c.f.u. Università degli Studi di Palermo Dipartimento di Ingegneria Informatica Informatica di Base - 6 c.f.u. Anno Accademico 2007/2008 Docente: ing. Salvatore Sorce Il Sistema Operativo Gerarchia del software

Dettagli

3.2 Concorrenza, parallelismo e parallelismo reale

3.2 Concorrenza, parallelismo e parallelismo reale 3. PROGRAMMAZIONE CONCORRENTE 3.1 Introduzione La programmazione usuale si basa su un modello di esecuzione sequenziale, cioè sull ipotesi che le istruzioni di un programma vengano eseguite una dopo l

Dettagli

1. I dispositivi periferici

1. I dispositivi periferici La gestione dell I/O 1. I dispositivi periferici Un ulteriore aspetto fondamentale del SO è la gestione dei dispositivi periferici (periferiche) Dal punto di vista del sistema operativo per periferiche

Dettagli

Ingegneria del Software UML - Unified Modeling Language

Ingegneria del Software UML - Unified Modeling Language Ingegneria del Software UML - Unified Modeling Language Obiettivi. Presentare un approccio visuale alla progettazione. Illustrare i vantaggi dell utilizzo di diagrammi nella fase di progettazione. Rispondere

Dettagli

Pronto Esecuzione Attesa Terminazione

Pronto Esecuzione Attesa Terminazione Definizione Con il termine processo si indica una sequenza di azioni che il processore esegue Il programma invece, è una sequenza di azioni che il processore dovrà eseguire Il processo è quindi un programma

Dettagli

CAPITOLO 14 CONCORRENZA: MUTUA ESCLUSIONE E SINCRONIZZAZIONE

CAPITOLO 14 CONCORRENZA: MUTUA ESCLUSIONE E SINCRONIZZAZIONE CAPITOLO 14 CONCORRENZA: MUTUA ESCLUSIONE E SINCRONIZZAZIONE CONCORRENZA, MUTUA ESCLUSIONE, SINCRONIZZAZIONE Premesso che la trattazione e comprensione di un sistema operativo l abbiamo basata sui concetti

Dettagli

Elementi di Programmazione: con Java dal Computer, al Web, al Cellulare

Elementi di Programmazione: con Java dal Computer, al Web, al Cellulare Minicorso tematico: Elementi di Programmazione: con Java dal Computer, al Web, al Cellulare Dott. Francesco Ricca Dipartimento Di Matematica Università della Calabria ricca@mat.unical.it Presentiamoci

Dettagli

Indice. settembre 2008 Il File System 2

Indice. settembre 2008 Il File System 2 Il File System Indice 4. Il File System 5. Vantaggi del FS 6. Protezione 7. Condivisione 8. I file - 1 9. I file - 2 10. Attributi dei file 11. Directory 12. Livelli di astrazione - 1 13. Livelli di astrazione

Dettagli

PROGETTO DI UN MIDDLEWARE PER L ACCESSO REMOTO A UN REPOSITORY

PROGETTO DI UN MIDDLEWARE PER L ACCESSO REMOTO A UN REPOSITORY Giampiero Allamprese 0000260193 PROGETTO DI UN MIDDLEWARE PER L ACCESSO REMOTO A UN REPOSITORY Reti di Calcolatori LS prof. Antonio Corradi A.A. 2007/2008 ABSTRACT L obiettivo di questo progetto è la realizzazione

Dettagli

Linguaggi di Programmazione I Lezione 5

Linguaggi di Programmazione I Lezione 5 Linguaggi di Programmazione I Lezione 5 Prof. Marcello Sette mailto://marcello.sette@gmail.com http://sette.dnsalias.org 1 aprile 2008 Diagrammi UML 3 UML: richiami..........................................................

Dettagli

Meccanismi di sincronizzazione: Semafori e Monitor

Meccanismi di sincronizzazione: Semafori e Monitor Meccanismi di sincronizzazione: Semafori e Monitor 1 Introduzione Nelle prossime lezioni vedremo alcuni meccanismi dei sistemi operativi e dei linguaggi di programmazione sviluppati per facilitare la scrittura

Dettagli

uomo Software (sistema operativo) hardware

uomo Software (sistema operativo) hardware uomo Software (sistema operativo) hardware 1 Sistema operativo Insieme di programmi che svolgono funzioni essenziali per l uso del sistema di elaborazione Questi programmi sono i primi ad essere eseguiti

Dettagli

LAVORO ESTIVO DI INFORMATICA CLASSE 2O

LAVORO ESTIVO DI INFORMATICA CLASSE 2O LAVORO ESTIVO DI INFORMATICA CLASSE 2O PER COLORO CHE HANNO AVUTO LA SOSPENSIONE DEL GIUDIZIO, GLI ESERCIZI SVOLTI DEVONO ESSERE CONSEGNATI TASSATIVAMENTE IL GIORNO DELL'ESAME SCRITTO. A CHI È STATO ASSEGNATO

Dettagli

GESTIONE DEI PROCESSI

GESTIONE DEI PROCESSI Sistemi Operativi GESTIONE DEI PROCESSI Processi Concetto di Processo Scheduling di Processi Operazioni su Processi Processi Cooperanti Concetto di Thread Modelli Multithread I thread in Java Concetto

Dettagli

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti 13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/

Dettagli

Informatica: il sistema operativo

Informatica: il sistema operativo pierpaolo.vittorini@cc.univaq.it Università degli Studi dell Aquila Facoltà di Medicina e Chirurgia 6 ottobre 2006 Il software Il software è l insieme dei programmi che operano sul calcolatore Software

Dettagli

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

SISTEMI OPERATIVI. Gestione dei processi. Domande di verifica. Luca Orrù Centro Multimediale Montiferru 13/05/2007 2007 SISTEMI OPERATIVI Gestione dei processi Domande di verifica Luca Orrù Centro Multimediale Montiferru 13/05/2007 Gestione dei processi 1. Qual è la differenza tra un programma e un processo? Un programma

Dettagli

Multithreading in Java. Fondamenti di Sistemi Informativi 2014-2015

Multithreading in Java. Fondamenti di Sistemi Informativi 2014-2015 Multithreading in Java Fondamenti di Sistemi Informativi 2014-2015 Multithreading La programmazione concorrente consente di eseguire più processi o thread nello stesso momento. Nel secondo caso si parla

Dettagli

Evoluzione dei sistemi operativi (5) Evoluzione dei sistemi operativi (4) Classificazione dei sistemi operativi

Evoluzione dei sistemi operativi (5) Evoluzione dei sistemi operativi (4) Classificazione dei sistemi operativi Evoluzione dei sistemi operativi (4) Sistemi multiprogrammati! più programmi sono caricati in contemporaneamente, e l elaborazione passa periodicamente dall uno all altro Evoluzione dei sistemi operativi

Dettagli

SISTEMI OPERATIVI. Gestione della memoria Domande di verifica. Luca Orrù Centro Multimediale Montiferru 18/06/2007

SISTEMI OPERATIVI. Gestione della memoria Domande di verifica. Luca Orrù Centro Multimediale Montiferru 18/06/2007 2007 SISTEMI OPERATIVI Gestione della memoria Domande di verifica Luca Orrù Centro Multimediale Montiferru 18/06/2007 Gestione della memoria 1. Si descriva il concetto di memoria virtuale (esame del 19-06-2006)

Dettagli

I THREAD O PROCESSI LEGGERI Generalità

I THREAD O PROCESSI LEGGERI Generalità I THREAD O PROCESSI LEGGERI Generalità Thread: segmento di codice (funzione) Ogni processo ha un proprio SPAZIO DI INDIRIZZAMENTO (area di memoria) Tutti i thread genereti dallo stesso processo condividono

Dettagli

Scheduling della CPU. Contenuti delle lezioni del 23 e del 26 Marzo 2009. Sequenza alternata di CPU burst e di I/O burst.

Scheduling della CPU. Contenuti delle lezioni del 23 e del 26 Marzo 2009. Sequenza alternata di CPU burst e di I/O burst. Contenuti delle lezioni del 23 e del 26 Marzo 2009 Scheduling della CPU Introduzione allo scheduling della CPU Descrizione di vari algoritmi di scheduling della CPU Analisi dei criteri di valutazione nella

Dettagli

Strumenti per lo sviluppo del software

Strumenti per lo sviluppo del software Lo sviluppo del software Strumenti per lo sviluppo del software Lo sviluppo del software è l attività centrale del progetto e ha lo scopo di produrre il codice sorgente che, una volta compilato e messo

Dettagli

Software che sovrintende al funzionamento del computer eseguendo compiti diversi:

Software che sovrintende al funzionamento del computer eseguendo compiti diversi: Sistema Operativo dispensa a cura di Alessandro Bellini Software che sovrintende al funzionamento del computer eseguendo compiti diversi: 1. Gestire interazione utente macchina 2. Fornire un interfaccia

Dettagli

Corso di Informatica

Corso di Informatica CdLS in Odontoiatria e Protesi Dentarie Corso di Informatica Prof. Crescenzio Gallo crescenzio.gallo@unifg.it Funzioni dei Sistemi Operativi!2 Le funzioni principali del SO Gestire le risorse dell elaboratore

Dettagli

Definizione di processo. Un processo è un programma (o una parte di una programma) in corso di esecuzione

Definizione di processo. Un processo è un programma (o una parte di una programma) in corso di esecuzione SISTEMI OPERATIVI (parte prima - gestione dei processi) Tra i compiti di un sistema operativo sicuramente troviamo i seguenti: Gestione dei processi Gestione della memoria Gestione del file-system Ci occuperemo

Dettagli

Il sistema operativo

Il sistema operativo Il sistema operativo Percorso di Preparazione agli Studi di Ingegneria Università degli Studi di Brescia Docente: Massimiliano Giacomin Cos è un Sistema Operativo? Per capirlo, immaginiamo inizialmente

Dettagli

Infrastrutture Software

Infrastrutture Software Infrastrutture Software I componenti fisici di un sistema informatico sono resi accessibili agli utenti attraverso un complesso di strumenti software finalizzati all utilizzo dell architettura. Si tratta

Dettagli

Fondamenti di Informatica: Sistemi Operativi 1. Introduzione

Fondamenti di Informatica: Sistemi Operativi 1. Introduzione Introduzione Fondamenti di Informatica: Sistemi Operativi 1 Elaboratori necessitano di SOFTWARE SOFTWARE DI SISTEMA (SISTEMI OPERATIVI): fanno funzionare le varie componenti del computer e permettono all

Dettagli

5 Gestione dei progetti software. 5.1 Attività gestionale. Sistemi Informativi I Lezioni di Ingegneria del Software

5 Gestione dei progetti software. 5.1 Attività gestionale. Sistemi Informativi I Lezioni di Ingegneria del Software 5 Gestione dei progetti software. Dopo aver completato lo studio del ciclo di vita del software, in questa parte vengono discussi gli aspetti gestionali della produzione del software. Vengono esaminate

Dettagli

Il problema del produttore e del consumatore. Cooperazione tra processi

Il problema del produttore e del consumatore. Cooperazione tra processi Il problema del produttore e del consumatore Cooperazione tra processi Risorsa consumabile I processi disgiunti possono interferire tra loro a causa dell'uso di risorse permanenti, ma ognuno di essi ignora

Dettagli

Laboratorio di Progettazione di Sistemi Software Introduzione

Laboratorio di Progettazione di Sistemi Software Introduzione Laboratorio di Progettazione di Sistemi Software Introduzione Valentina Presutti (A-L) Riccardo Solmi (M-Z) Indice degli argomenti Introduzione all Ingegneria del Software UML Design Patterns Refactoring

Dettagli

Linguaggi di programmazione

Linguaggi di programmazione Linguaggi di programmazione Programmazione L attività con cui si predispone l elaboratore ad eseguire un particolare insieme di azioni su particolari dati, allo scopo di risolvere un problema Dati Input

Dettagli

Corso di Esercitazioni di Programmazione

Corso di Esercitazioni di Programmazione Corso di Esercitazioni di Programmazione Introduzione Dott.ssa Sabina Rossi Informazioni Pagina web del corso: News Orari Mailing list Lezioni Esercitazioni Date esami Risultati esami.. http://www.dsi.unive.it/~prog1

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi di Ricerca. Esempi di programmi Java Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare

Dettagli

Considera tutti i requisiti funzionali (use cases) NON deve necessariamente modellare i requisiti non funzionali

Considera tutti i requisiti funzionali (use cases) NON deve necessariamente modellare i requisiti non funzionali Corso di Laurea Specialistica in Ingegneria Informatica Corso di Ingegneria del Software A. A. 2008 - Progettazione OO E. TINELLI Punto di Partenza Il modello di analisi E una rappresentazione minima del

Dettagli

Casi d uso (use cases)

Casi d uso (use cases) Casi d uso (use cases) proposti da Ivar Jacobson nel 1992 termine nuovo, ma tecnica consolidata (studio degli scenari di operatività degli utilizzatori di un sistema) sono i modi in cui il sistema può

Dettagli

Lezione 10. Scheduling nei sistemi multiprocessori. Esempio: P=2 processori. Scheduling dei processi

Lezione 10. Scheduling nei sistemi multiprocessori. Esempio: P=2 processori. Scheduling dei processi Lezione 10 Cenni ai sistemi operativi distribuiti 2. Gestione della CPU e della memoria nei multiprocessori Gestione dei processi Scheduling Bilanciamento del carico Migrazione dei processi Gestione della

Dettagli

Manuale di Lokalize. Nick Shaforostoff Traduzione italiana: Pino Toscano

Manuale di Lokalize. Nick Shaforostoff Traduzione italiana: Pino Toscano Nick Shaforostoff Traduzione italiana: Pino Toscano 2 Indice 1 Introduzione 5 2 Editor 6 2.1 Finestra principale..................................... 6 2.2 Barre degli strumenti....................................

Dettagli

corrispondente server Web (l applicazione server) viene inviata una richiesta, alla quale il server normalmente risponde inviando la pagina HTML che

corrispondente server Web (l applicazione server) viene inviata una richiesta, alla quale il server normalmente risponde inviando la pagina HTML che Prefazione In questo volume completiamo l esplorazione del linguaggio Java che abbiamo iniziato in Java Fondamenti di programmazione. I due testi fanno parte di un percorso didattico unitario, come testimoniano

Dettagli

Sistema Operativo. Fondamenti di Informatica 1. Il Sistema Operativo

Sistema Operativo. Fondamenti di Informatica 1. Il Sistema Operativo Sistema Operativo Fondamenti di Informatica 1 Il Sistema Operativo Il Sistema Operativo (S.O.) è un insieme di programmi interagenti che consente agli utenti e ai programmi applicativi di utilizzare al

Dettagli

FONDAMENTI di INFORMATICA L. Mezzalira

FONDAMENTI di INFORMATICA L. Mezzalira FONDAMENTI di INFORMATICA L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software

Dettagli

Ordinamento degli eventi. Lezione 11. Osservazioni. Relazione verificato prima. Cenni ai sistemi operativi distribuiti 3. Coordinazione distribuita

Ordinamento degli eventi. Lezione 11. Osservazioni. Relazione verificato prima. Cenni ai sistemi operativi distribuiti 3. Coordinazione distribuita Lezione 11 Cenni ai sistemi operativi distribuiti 3. Coordinazione distribuita Ordinamento degli eventi Un sistema monoprocessore Unico clock Unica memoria Ordinamento degli eventi Mutua esclusione Deadlock

Dettagli

Diagramma delle durate dei CPU burst. Lo scheduler della CPU. Criteri di scheduling. Dispatcher

Diagramma delle durate dei CPU burst. Lo scheduler della CPU. Criteri di scheduling. Dispatcher Schedulazione della CPU Scheduling della CPU Introduzione allo scheduling della CPU Descrizione di vari algorimi di scheduling della CPU Analisi dei criteri di valutazione nella scelta di un algoritmo

Dettagli

Informatica per Sistemi Informativi Aziendali

Informatica per Sistemi Informativi Aziendali Agostino Lorenzi Richelmo Giupponi Informatica per Sistemi Informativi Aziendali Sistemi informatici Linguaggio di programmazione Comunicazione aziendale e Web Classe 3 Questo volume è disponibile anche

Dettagli

Fondamenti di Informatica

Fondamenti di Informatica Fondamenti di Informatica Il software Dipartimento di Ingegneria dell Informazione Universitàdegli Studi di Parma SOFTWARE I componenti fisici del calcolatore (unità centrale e periferiche) costituiscono

Dettagli

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

Sistemi Operativi. Lez. 13: primitive per la concorrenza monitor e messaggi Sistemi Operativi Lez. 13: primitive per la concorrenza monitor e messaggi Osservazioni I semafori sono strumenti particolarmente potenti poiché consentono di risolvere ogni problema di sincronizzazione

Dettagli

Sommario. G. Piscitelli

Sommario. G. Piscitelli Sommario Sincronizzazione Inconsistenza di dati condivisi: i rischi dell'interleaving nei processi concorrenti La race condition Il problema della "sezione critica" dei processi concorrenti e la soluzione

Dettagli

1. Che cos è la multiprogrammazione? Si può realizzare su un sistema monoprocessore? 2. Quali sono i servizi offerti dai sistemi operativi?

1. Che cos è la multiprogrammazione? Si può realizzare su un sistema monoprocessore? 2. Quali sono i servizi offerti dai sistemi operativi? 1. Che cos è la multiprogrammazione? Si può realizzare su un sistema monoprocessore? 2. Quali sono i servizi offerti dai sistemi operativi? 1. La nozione di multiprogrammazione prevede la possibilità di

Dettagli

Synchronized (ancora)

Synchronized (ancora) Synchronized (ancora) Riscriviamo l esempio di prima. Usiamo una struttura modulare, con una classe Notificatore che ha opportuni metodi. La classe ha due campi privati, la lista buftext e un suo thread.

Dettagli

Un primo programma Java. Introduzione alla programmazione in Java. Programmi e mondo reale. Programmare ad oggetti. I programmi come modelli

Un primo programma Java. Introduzione alla programmazione in Java. Programmi e mondo reale. Programmare ad oggetti. I programmi come modelli 4 Un primo programma Java Introduzione alla programmazione in Java class Program1 { System.out.println("Benvenuti al corso"); 1 5 Programmi e mondo reale Programmare ad oggetti Il codice di un programma

Dettagli

Il Sistema Operativo

Il Sistema Operativo Il Sistema Operativo Il Sistema Operativo Il Sistema Operativo (S.O.) è un insieme di programmi interagenti che consente agli utenti e ai programmi applicativi di utilizzare al meglio le risorse del Sistema

Dettagli

Sistemi Operativi mod. B. Sistemi Operativi mod. B A B C A B C P 1 2 0 0 P 1 1 2 2 3 3 2 P 2 3 0 2 P 2 6 0 0 P 3 2 1 1 P 3 0 1 1 < P 1, >

Sistemi Operativi mod. B. Sistemi Operativi mod. B A B C A B C P 1 2 0 0 P 1 1 2 2 3 3 2 P 2 3 0 2 P 2 6 0 0 P 3 2 1 1 P 3 0 1 1 < P 1, > Algoritmo del banchiere Permette di gestire istanze multiple di una risorsa (a differenza dell algoritmo con grafo di allocazione risorse). Ciascun processo deve dichiarare a priori il massimo impiego

Dettagli

Un esercizio d esame. Flavio De Paoli

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

Dettagli

MODULO 1 CONCETTI BASE DEL ITC (17 ORE)

MODULO 1 CONCETTI BASE DEL ITC (17 ORE) PIANO DI LAVORO ANNUALE Classe I A Disciplina: Tecnologie informatiche A.S. 2014/2015 Docente: prof. Vidhi Meri, prof. Solazzo Alessandro Ore settimanali: 3 ( di cui 2 di laboratorio) Analisi della situazione

Dettagli

PIANO DI LAVORO ANNUALE Anno Scolastico 2014-2015

PIANO DI LAVORO ANNUALE Anno Scolastico 2014-2015 Istituto di Istruzione Superiore ITALO CALVINO telefono: 0257500115 via Guido Rossa 20089 ROZZANO MI fax: 0257500163 Sezione Associata: telefono: 025300901 via Karl Marx 4 - Noverasco - 20090 OPERA MI

Dettagli

Java threads (2) Programmazione Concorrente

Java threads (2) Programmazione Concorrente Java threads (2) emanuele lattanzi isti information science and technology institute 1/28 Programmazione Concorrente Utilizzo corretto dei thread in Java emanuele lattanzi isti information science and

Dettagli

Thread: sincronizzazione Esercitazioni del 09 Ottobre 2009

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

Dettagli

La specifica del problema

La specifica del problema 2.9 (Caso di studio facoltativo) Pensare a oggetti: esame del problema Iniziamo ora a esaminare il nostro caso di studio di progettazione e implementazione orientate agli oggetti. Le sezioni Pensare a

Dettagli

SCP: SCHEDULER LAYER. a cura di. Alberto Boccato

SCP: SCHEDULER LAYER. a cura di. Alberto Boccato SCP: SCHEDULER LAYER a cura di Alberto Boccato PREMESSA: Negli ultimi tre anni la nostra scuola ha portato avanti un progetto al quale ho partecipato chiamato SCP (Scuola di Calcolo Parallelo). Di fatto

Dettagli

Università degli studi di Brescia Facoltà di Medicina e Chirurgia Corso di Laurea in Infermieristica. Corso propedeutico di Matematica e Informatica

Università degli studi di Brescia Facoltà di Medicina e Chirurgia Corso di Laurea in Infermieristica. Corso propedeutico di Matematica e Informatica Università degli studi di Brescia Facoltà di Medicina e Chirurgia Corso di Laurea in Infermieristica a.a. 2006/2007 Docente Ing. Andrea Ghedi IL FUNZIONAMENTO BASE DI UN COMPUTER HW e SW Lezione 1 1 Il

Dettagli

Gestione dei thread in Java LSO 2008

Gestione dei thread in Java LSO 2008 Gestione dei thread in Java LSO 2008 Cos è un Thread? Si può avere la necessità di suddividere un programma in sottoattività separate da eseguire indipendentemente l una dall altra Queste sottoattività

Dettagli

Introduzione. Meccanismi di sincronizzazione: Semafori e Monitor. Semafori - Definizione. Semafori - Descrizione informale

Introduzione. Meccanismi di sincronizzazione: Semafori e Monitor. Semafori - Definizione. Semafori - Descrizione informale Introduzione Meccanismi di sincronizzazione: Nelle prossime lezioni vedremo alcuni meccanismi dei sistemi operativi e dei linguaggi di programmazione sviluppati per facilitare la scrittura di programmi

Dettagli

Introduzione ai sistemi operativi

Introduzione ai sistemi operativi Introduzione ai sistemi operativi Che cos è un S.O.? Shell Utente Utente 1 2 Utente N Window Compilatori Assembler Editor.. DB SOFTWARE APPLICATIVO System calls SISTEMA OPERATIVO HARDWARE Funzioni di un

Dettagli

Ingegneria del Software I. UML - Use Case Diagram

Ingegneria del Software I. UML - Use Case Diagram Requisiti e casi d uso Unified Modeling Language Use Case Diagram 1 Il primo passo di qualsiasi processo di sviluppo è la definizione dei requisiti Definizione del Business Model Solitamente informale

Dettagli

www.wlascuola.4000.it

www.wlascuola.4000.it 1 Cenni di programmazione Risolvere un problema significa trovare un procedimento che consenta di produrre i risultati, a partire dai dati iniziali, attraverso un processo di elaborazione. La metodologia

Dettagli

19. Introduzione al multi-threading

19. Introduzione al multi-threading 19. Introduzione al multi-threading Marco Faella Dip. Ing. Elettrica e Tecnologie dell'informazione Università di Napoli Federico II Corso di Linguaggi di Programmazione II I thread I thread, o processi

Dettagli

OBIETTIVI SPECIFICI DI APPRENDIMENTO

OBIETTIVI SPECIFICI DI APPRENDIMENTO Disciplina:... Anno scolastico: 20.../20... Classe/i :... Docente:... DI APPRENDIMENTO SEZIONE 1 Premesse matematiche Nozioni fondamentali sui sistemi di numerazione Sistemi di numerazione in base diversa

Dettagli

Secondo biennio Articolazione Informatica TPSIT Prova Quarta

Secondo biennio Articolazione Informatica TPSIT Prova Quarta Sistema operativo: gestione memoria centrale La Memoria Virtuale consente di superare i limiti della Memoria Centrale : A. no B. a volte C. si, ma non sempre e' adeguata D. si, attraverso tecniche di gestione

Dettagli

EIPASS Junior Programma analitico d esame Scuola Primaria

EIPASS Junior Programma analitico d esame Scuola Primaria eipass EIPASS Junior Programma analitico d esame Scuola Primaria Programma analitico d esame EIPASS Junior Scuola Primaria Premessa La nascita, lo sviluppo e il consolidamento delle competenze digitali

Dettagli