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

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

Sistemi Operativi Sincronizzazione tra Processi

Sistemi Operativi Sincronizzazione tra Processi Sistemi Operativi Processi Docente: Claudio E. Palazzi cpalazzi@math.unipd.it Crediti per queste slides al Prof. Tullio Vardanega 1 Processi indipendenti possono avanzare concorrentemente senza alcun vincolo

Dettagli

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

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof. Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 009-10 prof. Viviana Bono Blocco 9 Metodi statici: passaggio parametri, variabili locali, record

Dettagli

Le funzionalità di un DBMS

Le funzionalità di un DBMS Le funzionalità di un DBMS Sistemi Informativi L-A Home Page del corso: http://www-db.deis.unibo.it/courses/sil-a/ Versione elettronica: DBMS.pdf Sistemi Informativi L-A DBMS: principali funzionalità Le

Dettagli

Inter Process Communication. Laboratorio Software 2008-2009 C. Brandolese

Inter Process Communication. Laboratorio Software 2008-2009 C. Brandolese Inter Process Communication Laboratorio Software 2008-2009 C. Brandolese Introduzione Più processi o thread Concorrono alla relaizzazione di una funzione applicativa Devono poter realizzare Sincronizzazione

Dettagli

Università degli Studi di Parma. Facoltà di Scienze MM. FF. NN. Corso di Laurea in Informatica

Università degli Studi di Parma. Facoltà di Scienze MM. FF. NN. Corso di Laurea in Informatica Università degli Studi di Parma Facoltà di Scienze MM. FF. NN. Corso di Laurea in Informatica A.A. 2007-08 CORSO DI INGEGNERIA DEL SOFTWARE Prof. Giulio Destri http://www.areasp.com (C) 2007 AreaSP for

Dettagli

Informatica. Scopo della lezione

Informatica. Scopo della lezione 1 Informatica per laurea diarea non informatica LEZIONE 1 - Cos è l informatica 2 Scopo della lezione Introdurre le nozioni base della materia Definire le differenze tra hardware e software Individuare

Dettagli

UML: Class Diagram. Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it

UML: Class Diagram. Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it UML: Class Diagram Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it Dipartimento di Ingegneria Informatica e delle Telecomunicazioni Università di Catania Class Diagram Forniscono una vista strutturale

Dettagli

Abstract Data Type (ADT)

Abstract Data Type (ADT) Abstract Data Type Pag. 1/10 Abstract Data Type (ADT) Iniziamo la nostra trattazione presentando una nozione che ci accompagnerà lungo l intero corso di Laboratorio Algoritmi e Strutture Dati: il Tipo

Dettagli

Il Concetto di Processo

Il Concetto di Processo Processi e Thread Il Concetto di Processo Il processo è un programma in esecuzione. È l unità di esecuzione all interno del S.O. Solitamente, l esecuzione di un processo è sequenziale (le istruzioni vengono

Dettagli

AOT Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Unified Process. Prof. Agostino Poggi

AOT Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Unified Process. Prof. Agostino Poggi AOT Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Unified Process Prof. Agostino Poggi Unified Process Unified Software Development Process (USDP), comunemente chiamato

Dettagli

Middleware Laboratory. Dai sistemi concorrenti ai sistemi distribuiti

Middleware Laboratory. Dai sistemi concorrenti ai sistemi distribuiti Dai sistemi concorrenti ai sistemi distribuiti Problemi nei sistemi concorrenti e distribuiti I sistemi concorrenti e distribuiti hanno in comune l ovvio problema di coordinare le varie attività dei differenti

Dettagli

Rational Unified Process Introduzione

Rational Unified Process Introduzione Rational Unified Process Introduzione G.Raiss - A.Apolloni - 4 maggio 2001 1 Cosa è E un processo di sviluppo definito da Booch, Rumbaugh, Jacobson (autori dell Unified Modeling Language). Il RUP è un

Dettagli

Le variabili. Olga Scotti

Le variabili. Olga Scotti Le variabili Olga Scotti Cos è una variabile Le variabili, in un linguaggio di programmazione, sono dei contenitori. Possono essere riempiti con un valore che poi può essere riletto oppure sostituito.

Dettagli

Comandi filtro: sed. Se non si specificano azioni, sed stampa sullo standard output le linee in input, lasciandole inalterate.

Comandi filtro: sed. Se non si specificano azioni, sed stampa sullo standard output le linee in input, lasciandole inalterate. Comandi filtro: sed Il nome del comando sed sta per Stream EDitor e la sua funzione è quella di permettere di editare il testo passato da un comando ad un altro in una pipeline. Ciò è molto utile perché

Dettagli

CAPITOLO PRIMO IL CONCETTO DI ALGORITMO 1

CAPITOLO PRIMO IL CONCETTO DI ALGORITMO 1 1.1 Che cos è un algoritmo CAPITOLO PRIMO IL CONCETTO DI ALGORITMO 1 Gli algoritmi sono metodi per la soluzione di problemi. Possiamo caratterizzare un problema mediante i dati di cui si dispone all inizio

Dettagli

SOFTWARE GESTIONE SMS DA INTERFACCE CL MANUALE D INSTALLAZIONE ED USO

SOFTWARE GESTIONE SMS DA INTERFACCE CL MANUALE D INSTALLAZIONE ED USO CLSMS SOFTWARE GESTIONE SMS DA INTERFACCE CL MANUALE D INSTALLAZIONE ED USO Sommario e introduzione CLSMS SOMMARIO INSTALLAZIONE E CONFIGURAZIONE... 3 Parametri di configurazione... 4 Attivazione Software...

Dettagli

Finanziamenti on line -

Finanziamenti on line - Finanziamenti on line - Manuale per la compilazione dei moduli di Gestione dei Progetti Finanziati del Sistema GEFO Rev. 02 Manuale GeFO Pagina 1 Indice 1. Introduzione... 4 1.1 Scopo e campo di applicazione...

Dettagli

Mario Polito IARE: Press - ROMA

Mario Polito IARE: Press - ROMA Mario Polito info@mariopolito.it www.mariopolito.it IMPARARE A STUD IARE: LE TECNICHE DI STUDIO Come sottolineare, prendere appunti, creare schemi e mappe, archiviare Pubblicato dagli Editori Riuniti University

Dettagli

Inter-Process Communication

Inter-Process Communication Inter-Process Communication C. Baroglio a.a. 2002-2003 1 Introduzione In Unix i processi possono essere sincronizzati utilizzando strutture dati speciali, appartenti al pacchetto IPC (inter-process communication).

Dettagli

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica Algebra di Boole: Concetti di base Fondamenti di Informatica - D. Talia - UNICAL 1 Algebra di Boole E un algebra basata su tre operazioni logiche OR AND NOT Ed operandi che possono

Dettagli

DI D AGRA R MM M I M A BLOCC C H C I TEORI R A E D D E SERC R I C ZI 1 1

DI D AGRA R MM M I M A BLOCC C H C I TEORI R A E D D E SERC R I C ZI 1 1 DIAGRAMMI A BLOCCHI TEORIA ED ESERCIZI 1 1 Il linguaggio dei diagrammi a blocchi è un possibile formalismo per la descrizione di algoritmi Il diagramma a blocchi, o flowchart, è una rappresentazione grafica

Dettagli

Descrizioni VHDL Behavioral

Descrizioni VHDL Behavioral 1 Descrizioni VHDL Behavioral In questo capitolo vedremo come la struttura di un sistema digitale è descritto in VHDL utilizzando descrizioni di tipo comportamentale. Outline: process wait statements,

Dettagli

Classi ed Oggetti in JAVA

Classi ed Oggetti in JAVA Classi ed Oggetti in JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dell Informazione Università di Siena Via Roma 56 53100 SIENA Uff. 0577233606 rigutini@dii.unisi.it www.dii.unisi.it/~rigutini/

Dettagli

Introduzione agli algoritmi e alla programmazione in VisualBasic.Net

Introduzione agli algoritmi e alla programmazione in VisualBasic.Net Lezione 1 Introduzione agli algoritmi e alla programmazione in VisualBasic.Net Definizione di utente e di programmatore L utente è qualsiasi persona che usa il computer anche se non è in grado di programmarlo

Dettagli

RUP (Rational Unified Process)

RUP (Rational Unified Process) RUP (Rational Unified Process) Caratteristiche, Punti di forza, Limiti versione del tutorial: 3.3 (febbraio 2007) Pag. 1 Unified Process Booch, Rumbaugh, Jacobson UML (Unified Modeling Language) notazione

Dettagli

Copyright Università degli Studi di Torino, Progetto Atlante delle Professioni 2009 IT PROCESS EXPERT

Copyright Università degli Studi di Torino, Progetto Atlante delle Professioni 2009 IT PROCESS EXPERT IT PROCESS EXPERT 1. CARTA D IDENTITÀ... 2 2. CHE COSA FA... 3 3. DOVE LAVORA... 4 4. CONDIZIONI DI LAVORO... 5 5. COMPETENZE... 6 Quali competenze sono necessarie... 6 Conoscenze... 8 Abilità... 9 Comportamenti

Dettagli

Arduino: Programmazione

Arduino: Programmazione Programmazione formalmente ispirata al linguaggio C da cui deriva. I programmi in ARDUINO sono chiamati Sketch. Un programma è una serie di istruzioni che vengono lette dall alto verso il basso e convertite

Dettagli

Ambienti di sviluppo integrato

Ambienti di sviluppo integrato Ambienti di sviluppo integrato Un ambiente di sviluppo integrato (IDE - Integrated Development Environment) è un ambiente software che assiste i programmatori nello sviluppo di programmi Esso è normalmente

Dettagli

Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio. IDE = Integrated Development Environment

Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio. IDE = Integrated Development Environment Bloodshed Dev-C++ Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio IDE = Integrated Development Environment Gerardo Pelosi 01 Ottobre 2014 Pagina 1 di 8 Dev-C++ - Installazione Potete

Dettagli

Introduzione alle applicazioni di rete

Introduzione alle applicazioni di rete Introduzione alle applicazioni di rete Definizioni base Modelli client-server e peer-to-peer Socket API Scelta del tipo di servizio Indirizzamento dei processi Identificazione di un servizio Concorrenza

Dettagli

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO...

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO... Modulo A Programmiamo in Pascal Unità didattiche 1. Installiamo il Dev-Pascal 2. Il programma e le variabili 3. Input dei dati 4. Utilizziamo gli operatori matematici e commentiamo il codice COSA IMPAREREMO...

Dettagli

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory FILE SYSTEM : INTERFACCIA 8.1 Interfaccia del File System Concetto di File Metodi di Accesso Struttura delle Directory Montaggio del File System Condivisione di File Protezione 8.2 Concetto di File File

Dettagli

UML Component and Deployment diagram

UML Component and Deployment diagram UML Component and Deployment diagram Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it Dipartimento di Ingegneria Informatica e delle Telecomunicazioni Università di Catania I diagrammi UML Classificazione

Dettagli

BPEL: Business Process Execution Language

BPEL: Business Process Execution Language Ingegneria dei processi aziendali BPEL: Business Process Execution Language Ghilardi Dario 753708 Manenti Andrea 755454 Docente: Prof. Ernesto Damiani BPEL - definizione Business Process Execution Language

Dettagli

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); }

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); } import java.util.*; class coda * Questa classe contiene tutti i metodi per la gestione della coda * @author D'Ambrosio Giovanni Classe 4D I.T.I.S. Grottaminarda * @version 26/02/2010 * VETTORE DINAMICO

Dettagli

FIRESHOP.NET. Gestione Utility & Configurazioni. Rev. 2014.3.1 www.firesoft.it

FIRESHOP.NET. Gestione Utility & Configurazioni. Rev. 2014.3.1 www.firesoft.it FIRESHOP.NET Gestione Utility & Configurazioni Rev. 2014.3.1 www.firesoft.it Sommario SOMMARIO Introduzione... 4 Impostare i dati della propria azienda... 5 Aggiornare il programma... 6 Controllare l integrità

Dettagli

Informatica Applicata

Informatica Applicata Ing. Irina Trubitsyna Concetti Introduttivi Programma del corso Obiettivi: Il corso di illustra i principi fondamentali della programmazione con riferimento al linguaggio C. In particolare privilegia gli

Dettagli

La suite Dental Trey che semplifica il tuo mondo.

La suite Dental Trey che semplifica il tuo mondo. La suite Dental Trey che semplifica il tuo mondo. impostazioni di sistema postazione clinica studio privato sterilizzazione magazzino segreteria amministrazione sala di attesa caratteristiche UNO tiene

Dettagli

Procedura per il ripristino dei certificati del dispositivo USB

Procedura per il ripristino dei certificati del dispositivo USB Procedura per il ripristino dei certificati del dispositivo USB 30/04/2013 Sommario - Limitazioni di responsabilità e uso del manuale... 3 1 Glossario... 3 2 Presentazione... 4 3 Quando procedere al ripristino

Dettagli

Appunti di Sistemi Operativi. Enzo Mumolo e-mail address :mumolo@units.it web address :www.units.it/mumolo

Appunti di Sistemi Operativi. Enzo Mumolo e-mail address :mumolo@units.it web address :www.units.it/mumolo Appunti di Sistemi Operativi Enzo Mumolo e-mail address :mumolo@units.it web address :www.units.it/mumolo Indice 1 Cenni su alcuni algoritmi del Kernel di Unix 1 1.1 Elementi di Unix Internals.................................

Dettagli

I Valori del Manifesto Agile sono direttamente applicabili a Scrum:!

I Valori del Manifesto Agile sono direttamente applicabili a Scrum:! Scrum descrizione I Principi di Scrum I Valori dal Manifesto Agile Scrum è il framework Agile più noto. E la sorgente di molte delle idee che si trovano oggi nei Principi e nei Valori del Manifesto Agile,

Dettagli

Esercizi Capitolo 5 - Alberi

Esercizi Capitolo 5 - Alberi Esercizi Capitolo 5 - Alberi Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile saltare alle

Dettagli

GeoGebra 4.2 Introduzione all utilizzo della Vista CAS per il secondo biennio e il quinto anno

GeoGebra 4.2 Introduzione all utilizzo della Vista CAS per il secondo biennio e il quinto anno GeoGebra 4.2 Introduzione all utilizzo della Vista CAS per il secondo biennio e il quinto anno La Vista CAS L ambiente di lavoro Le celle Assegnazione di una variabile o di una funzione / visualizzazione

Dettagli

Manuale d uso Apache OpenMeetings (Manuale Utente + Manuale Amministratore)

Manuale d uso Apache OpenMeetings (Manuale Utente + Manuale Amministratore) Manuale d uso Apache OpenMeetings (Manuale Utente + Manuale Amministratore) Autore: Matteo Veroni Email: matver87@gmail.com Sito web: matteoveroni@altervista.org Fonti consultate: http://openmeetings.apache.org/

Dettagli

PROGETTO FORMATIVO ECM TEORICO-PRATICO in INFORMATICA MEDICA

PROGETTO FORMATIVO ECM TEORICO-PRATICO in INFORMATICA MEDICA PROGETTO FORMATIVO ECM TEORICO-PRATICO in INFORMATICA MEDICA SEDE: ORDINE DEI MEDICI E DEGLI ODONTOIATRI DELLA PROVINCIA DI LECCE Via Nazario Sauro, n. 31 LECCE Presentazione Progetto: Dal 9 Novembre 2013

Dettagli

Neomobile incentra l infrastruttura IT su Microsoft ALM, arrivando a 40 nuovi rilasci a settimana

Neomobile incentra l infrastruttura IT su Microsoft ALM, arrivando a 40 nuovi rilasci a settimana Storie di successo Microsoft per le Imprese Scenario: Software e Development Settore: Servizi In collaborazione con Neomobile incentra l infrastruttura IT su Microsoft ALM, arrivando a 40 nuovi rilasci

Dettagli

Le funzioni di shell La bash supporta la programmazione procedurale e prevede la possibilità di definire funzioni utilizzando le sintassi

Le funzioni di shell La bash supporta la programmazione procedurale e prevede la possibilità di definire funzioni utilizzando le sintassi Le funzioni di shell La bash supporta la programmazione procedurale e prevede la possibilità di definire funzioni utilizzando le sintassi alternative: function nome { lista-comandi } oppure nome ( ) {

Dettagli

GUIDA RAPIDA emagister-agora Edizione BASIC

GUIDA RAPIDA emagister-agora Edizione BASIC GUIDA RAPIDA emagister-agora Edizione BASIC Introduzione a emagister-agora Interfaccia di emagister-agora Configurazione dell offerta didattica Richieste d informazioni Gestione delle richieste d informazioni

Dettagli

Guida all utilizzo del dispositivo USB

Guida all utilizzo del dispositivo USB Guida all utilizzo del dispositivo USB 30/04/2013 Sommario - Limitazioni di responsabilità e uso del manuale... 3 1. Glossario... 3 2. Guida all utilizzo del dispositivo USB... 4 2.1 Funzionamento del

Dettagli

Conferencing Services. Web Meeting. Quick Start Guide V4_IT

Conferencing Services. Web Meeting. Quick Start Guide V4_IT Web Meeting Quick Start Guide V4_IT Indice 1 INFORMAZIONI SUL PRODOTTO... 3 1.1 CONSIDERAZIONI GENERALI... 3 1.2 SISTEMI OPERATIVI SUPPORTATI E LINGUE... 3 1.3 CARATTERISTICHE... 3 2 PRENOTARE UNA CONFERENZA...

Dettagli

Processi di business sovra-regionali relativi ai sistemi regionali di FSE. Versione 1.0 24 Giugno 2014

Processi di business sovra-regionali relativi ai sistemi regionali di FSE. Versione 1.0 24 Giugno 2014 Processi di business sovra-regionali relativi ai sistemi regionali di FSE Versione 1.0 24 Giugno 2014 1 Indice Indice... 2 Indice delle figure... 3 Indice delle tabelle... 4 Obiettivi del documento...

Dettagli

nasce il futuro v secolo a. c. agorà virtuale

nasce il futuro v secolo a. c. agorà virtuale dell e-learning nasce il futuro v secolo a. c. Con Agorà, nell antica Grecia, si indicava la piazza principale della polis, il suo cuore pulsante, il luogo per eccellenza di una fertilità culturale e scientifica

Dettagli

Introduzione alla Programmazione ad Oggetti in C++

Introduzione alla Programmazione ad Oggetti in C++ Introduzione alla Programmazione ad Oggetti in C++ Lezione 1 Cosa è la Programmazione Orientata agli Oggetti Metodologia per costruire prodotti software di grosse dimensioni che siano affidabili e facilmente

Dettagli

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI PROBLEMA DELLA RICERCA in termini generali: Dati in input un insieme S di elementi (numeri, caratteri, stringhe, ) e un elemento

Dettagli

Esercizio di Sincronizzazione tra Processi: Ponte a Senso Unico Alternato con Capacità Limitata

Esercizio di Sincronizzazione tra Processi: Ponte a Senso Unico Alternato con Capacità Limitata Esercizio di Sincronizzazione tra Processi: Ponte a Senso Unico Alternato con Capacità Limitata Supponiamo sempre di avere un ponte stretto che permette il passaggio delle auto solo in un verso per volta,

Dettagli

Compilare il primo programma. Primo programma in C. Esercizio Somma due numeri. Compilare il primo programma. Analisi. Analisi

Compilare il primo programma. Primo programma in C. Esercizio Somma due numeri. Compilare il primo programma. Analisi. Analisi Primo in C Un semplice L ambiente di sviluppo Dev-C++ Codifica del Compilazione e correzione errori Esecuzione e verifica 2 Esercizio Somma due numeri Si realizzi un in linguaggio C che acquisisca da tastiera

Dettagli

Guida Così si aggiornano i programmi Microsoft

Guida Così si aggiornano i programmi Microsoft Guida Così si aggiornano i programmi Microsoft Informazione Navigare in Internet in siti di social network oppure in siti web che consentono la condivisione di video è una delle forme più accattivanti

Dettagli

Note e informazioni legali

Note e informazioni legali Note e informazioni legali Proprietà del sito; accettazione delle condizioni d uso I presenti termini e condizioni di utilizzo ( Condizioni d uso ) si applicano al sito web di Italiana Audion pubblicato

Dettagli

I file di dati. Unità didattica D1 1

I file di dati. Unità didattica D1 1 I file di dati Unità didattica D1 1 1) I file sequenziali Utili per la memorizzazione di informazioni testuali Si tratta di strutture organizzate per righe e non per record Non sono adatte per grandi quantità

Dettagli

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati Algoritmi Algoritmi Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati Il procedimento (chiamato algoritmo) è composto da passi elementari

Dettagli

Progetto Istanze On Line

Progetto Istanze On Line 2014 Progetto Istanze On Line 09 aprile 2014 INDICE 1 INTRODUZIONE ALL USO DELLA GUIDA... 3 1.1 SIMBOLI USATI E DESCRIZIONI... 3 2 GESTIONE DELL UTENZA... 4 2.1 COS È E A CHI È RIVOLTO... 4 2.2 NORMATIVA

Dettagli

FileMaker Server 12. Guida introduttiva

FileMaker Server 12. Guida introduttiva FileMaker Server 12 Guida introduttiva 2007 2012 FileMaker, Inc. Tutti i diritti riservati. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, California 95054 FileMaker e Bento sono marchi di FileMaker,

Dettagli

GESTIRE LA BIBLIOGRAFIA

GESTIRE LA BIBLIOGRAFIA GESTIRE LA BIBLIOGRAFIA STRUMENTI DI GESTIONE BIBLIOGRAFICA I software di gestione bibliografica permettono di raccogliere, catalogare e organizzare diverse tipologie di materiali, prendere appunti, formattare

Dettagli

Manipolazione di testi: espressioni regolari

Manipolazione di testi: espressioni regolari Manipolazione di testi: espressioni regolari Un meccanismo per specificare un pattern, che, di fatto, è la rappresentazione sintetica di un insieme (eventualmente infinito) di stringhe: il pattern viene

Dettagli

Elementi di UML (7): Diagrammi dei componenti e di deployment

Elementi di UML (7): Diagrammi dei componenti e di deployment Elementi di UML (7): Diagrammi dei componenti e di deployment Università degli Studi di Bologna Facoltà di Scienze MM. FF. NN. Corso di Laurea in Scienze di Internet Anno Accademico 2004-2005 Laboratorio

Dettagli

Gestore Comunicazioni Obbligatorie. Progetto SINTESI. Comunicazioni Obbligatorie. Modulo Applicativo COB. - Versione Giugno 2013 -

Gestore Comunicazioni Obbligatorie. Progetto SINTESI. Comunicazioni Obbligatorie. Modulo Applicativo COB. - Versione Giugno 2013 - Progetto SINTESI Comunicazioni Obbligatorie Modulo Applicativo COB - Versione Giugno 2013-1 Versione Giugno 2013 INDICE 1 Introduzione 3 1.1 Generalità 3 1.2 Descrizione e struttura del manuale 3 1.3 Requisiti

Dettagli

MINI GUIDA SINTETICA per l uso della lavagna interattiva multimediale

MINI GUIDA SINTETICA per l uso della lavagna interattiva multimediale MINI GUIDA SINTETICA per l uso della lavagna interattiva multimediale InterWrite SchoolBoard è un software per lavagna elettronica di facile utilizzo. Può essere adoperata anche da studenti diversamente

Dettagli

Guida. Vista Live. Controllo. Riproduzione su 24 ore. Ricerca avanz. Le icone includono: Mod. uscita. Icona. Un sensore di allarme.

Guida. Vista Live. Controllo. Riproduzione su 24 ore. Ricerca avanz. Le icone includono: Mod. uscita. Icona. Un sensore di allarme. Guida operatore del registratore TruVision Vista Live Sull immagine live dello schermo vengono visualizzati laa data e l ora corrente, il nome della telecamera e viene indicato se è in corso la registrazione.

Dettagli

Oggetti Lezione 3. aspetti generali e definizione di classi I

Oggetti Lezione 3. aspetti generali e definizione di classi I Programmazione a Oggetti Lezione 3 Il linguaggio Java: aspetti generali e definizione di classi I Sommario Storia e Motivazioni Definizione di Classi Campi e Metodi Istanziazione di oggetti Introduzione

Dettagli

How to Develop Accessible Linux Applications

How to Develop Accessible Linux Applications How to Develop Accessible Linux Applications Sharon Snider Copyright 2002 IBM Corporation v1.1, 2002-05-03 Diario delle Revisioni Revisione v1.1 2002-05-03 Revisionato da: sds Convertito in DocBook XML

Dettagli

Sistemi di supporto alle decisioni Ing. Valerio Lacagnina

Sistemi di supporto alle decisioni Ing. Valerio Lacagnina Cosa è il DSS L elevato sviluppo dei personal computer, delle reti di calcolatori, dei sistemi database di grandi dimensioni, e la forte espansione di modelli basati sui calcolatori rappresentano gli sviluppi

Dettagli

Corso di Programmazione ad Oggetti

Corso di Programmazione ad Oggetti Corso di Programmazione ad Oggetti Introduzione alla programmazione ad oggetti a.a. 2008/2009 Claudio De Stefano 1 La programmazione modulare Un programma può essere visto come un insieme di moduli che

Dettagli

Universita' di Ferrara Dipartimento di Matematica e Informatica. Algoritmi e Strutture Dati. Rappresentazione concreta di insiemi e Hash table

Universita' di Ferrara Dipartimento di Matematica e Informatica. Algoritmi e Strutture Dati. Rappresentazione concreta di insiemi e Hash table Universita' di Ferrara Dipartimento di Matematica e Informatica Algoritmi e Strutture Dati Rappresentazione concreta di insiemi e Hash table Copyright 2006-2015 by Claudio Salati. Lez. 9a 1 Rappresentazione

Dettagli

Architettura dei Calcolatori

Architettura dei Calcolatori Architettura dei Calcolatori Sistema di memoria parte prima Ing. dell Automazione A.A. 2011/12 Gabriele Cecchetti Sistema di memoria parte prima Sommario: Banco di registri Generalità sulla memoria Tecnologie

Dettagli

Lezione su Informatica di Base

Lezione su Informatica di Base Lezione su Informatica di Base Esplora Risorse, Gestione Cartelle, Alcuni tasti di scelta Rapida Domenico Capano D.C. Viterbo: Lunedì 21 Novembre 2005 Indice Una nota su questa lezione...4 Introduzione:

Dettagli

Quando A e B coincidono una coppia ordinata é determinata anche dalla loro posizione.

Quando A e B coincidono una coppia ordinata é determinata anche dalla loro posizione. Grafi ed Alberi Pag. /26 Grafi ed Alberi In questo capitolo richiameremo i principali concetti di due ADT che ricorreranno puntualmente nel corso della nostra trattazione: i grafi e gli alberi. Naturale

Dettagli

Risposte ai quesiti ricevuti per l Avviso di gara per la realizzazione del sistema informatico per la gestione richieste di finanziamento FAPISI

Risposte ai quesiti ricevuti per l Avviso di gara per la realizzazione del sistema informatico per la gestione richieste di finanziamento FAPISI Risposte ai quesiti ricevuti per l Avviso di gara per la realizzazione del sistema informatico per la gestione richieste di finanziamento FAPISI Forniamo in questo articolo le risposte ai 53 quesiti ricevuti

Dettagli

Controllare un nastro trasportatore fischertechnik con Arduino

Controllare un nastro trasportatore fischertechnik con Arduino TITOLO ESPERIENZA: Controllare un nastro trasportatore fischertechnik con Arduino PRODOTTI UTILIZZATI: OBIETTIVO: AUTORE: RINGRAZIAMENTI: Interfacciare e controllare un modello di nastro trasportatore

Dettagli

Adriana Volpato. P.D.P. Piano Didattico Personalizzato sc. Primaria

Adriana Volpato. P.D.P. Piano Didattico Personalizzato sc. Primaria Adriana Volpato P.D.P. Piano Didattico Personalizzato sc. Primaria 19 Dicembre 2011 STRUMENTO didattico educativo individua gli strumenti fa emergere il vero alunno solo con DIAGNOSI consegnata si redige

Dettagli

Utilizzato con successo nei più svariati settori aziendali, Passepartout Mexal BP è disponibile in diverse versioni e configurazioni:

Utilizzato con successo nei più svariati settori aziendali, Passepartout Mexal BP è disponibile in diverse versioni e configurazioni: Passepartout Mexal BP è una soluzione gestionale potente e completa per le imprese che necessitano di un prodotto estremamente flessibile, sia dal punto di vista tecnologico sia funzionale. Con più di

Dettagli

Progetto Istanze On Line

Progetto Istanze On Line 2011 Progetto Istanze On Line 21 febbraio 2011 INDICE 1 INTRODUZIONE ALL USO DELLA GUIDA... 3 1.1 SIMBOLI USATI E DESCRIZIONI... 3 2 PROGETTO ISTANZE ON LINE... 4 2.1 COS È E A CHI È RIVOLTO... 4 2.2 NORMATIVA

Dettagli

WEB Conference, mini howto

WEB Conference, mini howto Prerequisiti: WEB Conference, mini howto Per potersi collegare o creare una web conference è necessario: 1) Avere un pc con sistema operativo Windows XP o vista (windows 7 non e' ancora certificato ma

Dettagli

RELAZIONE PROGETTO THE ANIMATED E-BOOK

RELAZIONE PROGETTO THE ANIMATED E-BOOK RELAZIONE PROGETTO THE ANIMATED E-BOOK Nome scuola: ISTITUTO TECNICO COMMERCIALE D. ROMANAZZI Indirizzo: VIA C. ULPIANI, 6/A cap. 70126 città: BARI provincia: BA tel.: 080 5425611 fax: 080 5426492 e-mail:

Dettagli

Procedura corretta per mappare con ECM Titanium

Procedura corretta per mappare con ECM Titanium Procedura corretta per mappare con ECM Titanium Introduzione: In questo documento troverete tutte le informazioni utili per mappare correttamente con il software ECM Titanium, partendo dalla lettura del

Dettagli

CURSOS AVE CON TUTOR

CURSOS AVE CON TUTOR CURSOS AVE CON TUTOR DOMANDE PIÙ FREQUENTI (FAQ) A che ora ed in quali giorni sono fissate le lezioni? Dal momento in cui riceverai le password di accesso al corso sei libero di entrare quando (24/24)

Dettagli

Accordo d Uso (settembre 2014)

Accordo d Uso (settembre 2014) Accordo d Uso (settembre 2014) Il seguente Accordo d uso, di seguito Accordo, disciplina l utilizzo del Servizio on line 4GUEST, di seguito Servizio, che prevede, la creazione di Viaggi, Itinerari, Percorsi,

Dettagli

Il programma è articolato in due parti. Nella Prima parte: cosa è il mondo NoiPA, con un focus sulla posizione dell utente all interno dell intero

Il programma è articolato in due parti. Nella Prima parte: cosa è il mondo NoiPA, con un focus sulla posizione dell utente all interno dell intero 1 Il programma è articolato in due parti. Nella Prima parte: cosa è il mondo NoiPA, con un focus sulla posizione dell utente all interno dell intero sistema e sui servizi a disposizione sia in qualità

Dettagli

CORSO DI ALGORITMI E PROGRAMMAZIONE. JDBC Java DataBase Connectivity

CORSO DI ALGORITMI E PROGRAMMAZIONE. JDBC Java DataBase Connectivity CORSO DI ALGORITMI E PROGRAMMAZIONE JDBC Java DataBase Connectivity Anno Accademico 2002-2003 Accesso remoto al DB Istruzioni SQL Rete DataBase Utente Host client Server di DataBase Host server Accesso

Dettagli

SISSI IN RETE. Quick Reference guide guida di riferimento rapido

SISSI IN RETE. Quick Reference guide guida di riferimento rapido SISSI IN RETE Quick Reference guide guida di riferimento rapido Indice generale Sissi in rete...3 Introduzione...3 Architettura Software...3 Installazione di SISSI in rete...3 Utilizzo di SISSI in Rete...4

Dettagli

Minimizzazione di Reti Logiche Combinatorie Multi-livello

Minimizzazione di Reti Logiche Combinatorie Multi-livello Minimizzazione di Reti Logiche Combinatorie Multi-livello Maurizio Palesi Maurizio Palesi 1 Introduzione Obiettivo della sintesi logica: ottimizzazione delle cifre di merito area e prestazioni Prestazioni:

Dettagli

Gestione crediti formativi Manuale di istruzioni per l utilizzo del sistema

Gestione crediti formativi Manuale di istruzioni per l utilizzo del sistema Guida pratica all utilizzo della gestione crediti formativi pag. 1 di 8 Gestione crediti formativi Manuale di istruzioni per l utilizzo del sistema Gentile avvocato, la presente guida è stata redatta per

Dettagli

Manuale Operativo IL SOFTWARE PER LA GESTIONE CENTRALIZZATA DEL SISTEMA DELLE SEGNALAZIONI E DEI RECLAMI DELL ENTE

Manuale Operativo IL SOFTWARE PER LA GESTIONE CENTRALIZZATA DEL SISTEMA DELLE SEGNALAZIONI E DEI RECLAMI DELL ENTE Manuale Operativo IL SOFTWARE PER LA GESTIONE CENTRALIZZATA DEL SISTEMA DELLE SEGNALAZIONI E DEI RECLAMI DELL ENTE Il presente documento applica il Regolamento sulla gestione delle segnalazioni e dei reclami

Dettagli

Processi (di sviluppo del) software. Fase di Analisi dei Requisiti. Esempi di Feature e Requisiti. Progettazione ed implementazione

Processi (di sviluppo del) software. Fase di Analisi dei Requisiti. Esempi di Feature e Requisiti. Progettazione ed implementazione Processi (di sviluppo del) software Fase di Analisi dei Requisiti Un processo software descrive le attività (o task) necessarie allo sviluppo di un prodotto software e come queste attività sono collegate

Dettagli

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. - lezione 14 - Thread in Java

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. - lezione 14 - Thread in Java Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it - lezione 14 - Thread in Java 1 Cos è un

Dettagli

INTRODUZIONE ALLA GESTIONE DEL PROGETTO SOFTWARE CON UML

INTRODUZIONE ALLA GESTIONE DEL PROGETTO SOFTWARE CON UML Università degli Studi di Parma Dipartimento di Matematica e Informatica Corso di Laurea in Informatica DISPENSE INTRODUTTIVE INTRODUZIONE ALLA GESTIONE DEL PROGETTO SOFTWARE CON UML Prof. Giulio Destri

Dettagli

Prof. Caterina Rizzi Dipartimento di Ingegneria Industriale

Prof. Caterina Rizzi Dipartimento di Ingegneria Industriale RUOLO DELLA MODELLAZIONE GEOMETRICA E LIVELLI DI MODELLAZIONE PARTE 2 Prof. Caterina Rizzi... IN QUESTA LEZIONE Modelli 2D/3D Modelli 3D/3D Dimensione delle primitive di modellazione Dimensione dell oggettoy

Dettagli

Le novità di QuarkXPress 10.1

Le novità di QuarkXPress 10.1 Le novità di QuarkXPress 10.1 INDICE Indice Le novit di QuarkXPress 10.1...3 Nuove funzionalit...4 Guide dinamiche...4 Note...4 Libri...4 Redline...5 Altre nuove funzionalit...5 Note legali...6 ii LE NOVITÀ

Dettagli

Trattamento aria Regolatore di pressione proporzionale. Serie 1700

Trattamento aria Regolatore di pressione proporzionale. Serie 1700 Trattamento aria Serie 7 Serie 7 Trattamento aria Trattamento aria Serie 7 Serie 7 Trattamento aria +24VDC VDC OUTPUT MICROPROCESS. E P IN EXH OUT Trattamento aria Serie 7 Serie 7 Trattamento aria 7 Trattamento

Dettagli