Thread in Java CAPITOLO Richiami di gestione di processi

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Thread in Java CAPITOLO 18. 18.1 Richiami di gestione di processi"

Transcript

1 CAPITOLO 18 Thread in Java Usualmente l esecuzione di un programma è sostenuta da un processo. Nella terminologia Java i processi sono denominati thread. Un thread è dunque costituito da un flusso di esecuzione di istruzioni. In molti casi è opportuno disporre di architetture software di tipo multi-thread, sia perché il calcolatore utilizzato può disporre di hardware dotato di più processori, ed essere pertanto in grado di effettuare computazioni indipendenti, sia perché la risoluzione di un particolare problema può essere organizzata in più sottoproblemi paralleli parzialmente separabili e autonomi. Si sottolinea in particolare che nella macchina virtuale di Java, nel seguito denominata JVM, la gestione dei frame costituenti l interfaccia grafica e delle operazioni che in essi hanno luogo è demandata a thread separati, uno per ciascun frame Richiami di gestione di processi Architetture software basate sull esistenza di processi indipendenti sono attuabili in ogni calcolatore purché il suo sistema operativo lo consenta. Ciò avviene in particolare con macchine dotate di sistemi operativi multitasking. In questi sistemi più processi possono coesistere ed interagire tra di loro scambiandosi reciprocamente informazioni. Dal punto di vista del sistema operativo non vi è alcuna differenza sostanziale tra il trattamento dei processi utente e quello dei processi di sistema. Va tuttavia rilevato che la gestione dei processi nei sistemi multitasking è piuttosto delicata, essendo mirata ad ottimizzare le risorse del sistema nella sua globalità. Ciò comporta, in particolare, che la computazione effettuata dai processi attivi nel calcolatore possa essere temporaneamente sospesa o subire modificazioni nella priorità di esecuzione, sia in base alle operazioni definite nei processi medesimi sia in forza di specifiche politiche di gestione previste dal sistema operativo. Con riferimento all ultima osservazione svolta, si consideri che in un sistema multitasking ogni processo può trovarsi sempre in uno solo di tre stati: esecuzione, attesa oppure pronto. In ogni istante un solo processo è in esecuzione, mentre più processi possono trovarsi accodati

2 18 CAPITOLO 18 Figura 18.1 Grafo di transizione tra gli stati di un processo. negli altri stati. Tipicamente il passaggio di un processo da uno stato ad un altro è conseguenza di richieste di operazioni di I/O oppure di completamento di quest ultime. È peraltro possibile che un processo si sospenda autonomamente o venga sospeso al fine di sincronizzarlo con altro processo concorrente. La Figura 18.1 evidenzia il grafo di transizione per gli stati di un processo. Appena creato, il processo è collocato nella coda dei processi pronti, dalla quale è fatto passare in esecuzione dal sistema operativo. Dallo stato di esecuzione il processo può: (a) terminare, venendo rimosso dalla lista dei processi; (b) venire sospeso a seguito di una richiesta di I/O oppure di accesso ad altra risorsa e venire inserito nella coda dei processi in attesa sino a quando tale risorsa non sarà disponibile; (c) venire sospeso su richiesta di altro processo o del sistema operativo ed essere trasferito nella coda dei processi pronti sino a quando non verrà richiesta la sua riattivazione. Dalla coda di attesa il processo viene rimosso in seguito al completamento dell operazione di I/O oppure per essersi liberata la risorsa richiesta, venendo inserito nella lista dei processi pronti per continuare l esecuzione. Nella gestione d insieme dei processi vi sono alcuni aspetti che si presentano critici. Uno di essi, di particolare interesse per gli argomenti trattati nel testo, riguarda la sincronizzazione per l interscambio di dati e la conseguente possibilità di mutua sospensione e successiva riattivazione. Le problematiche connesse non verranno tuttavia trattate nella loro generalità, ma facendo esplicito riferimento all architettura della macchina virtuale di Java I thread di Java In Java i processi vengono chiamati thread e costituiscono dei flussi di esecuzione. Si è già fatto notare che ogni frame è associato ad un proprio thread, il quale è responsabile delle computazioni operate a livello di finestra. Più in generale va detto che la JVM è basata su un architettura multi-thread per la cui gestione è fornita la classe Thread afferente al package java.lang. Il modello di processi usato dalla classe è improntato agli assunti sotto indicati. Ogni oggetto thread è depositario di un identificatore, non necessariamente univoco, il cui uso è limitato ad eventuali operazioni di debugging dell applicazione. Usualmente tale identificatore non è di alcuna utilità nelle applicazioni.

3 THREAD IN JAVA 19 Ogni thread afferisce ad un thread group. L insieme dei gruppi di thread presenti nella macchina Java costituisce una struttura ad albero, con radice data dal system thread group, della cui gestione è responsabile il sistema. Ogni thread possiede una priorità di esecuzione, che è costituita da un numero intero compreso tra 1 e 10 assegnabile al thread in fase di programmazione. Un thread può assumere la connotazione di demone. I demoni peraltro costituiscono processi particolari, le proprietà funzionali dei quali non sono qui trattate in quanto esulano dagli scopi del testo. Per quanto concerne gli stati dei thread la JVM fa proprio il seguente modello: un thread è definito attivo nel caso in cui sia stata lanciata la sua esecuzione e questa non si è ancora completata; è definito inattivo in caso contrario; un thread è definito sospeso nel caso in cui la sua esecuzione sia stata temporaneamente interrotta; lo stato di sospensione potrà essere successivamente eliminato ripristinandone l esecuzione. Tutte le trasformazioni di stato di un thread sono effettuate a seguito dell attivazione di opportuni metodi della classe Thread. Prima di analizzare in dettaglio tali metodi sembra tuttavia opportuno puntualizzare quali siano le più significative funzionalità da essi espletate sui thread: allocazione e inizializzazione: coincide con la creazione dell oggetto della classe Thread che dovrà contenere il modello computazionale del thread e con la definizione del contesto in cui dovrà essere eseguito il processo; in tale fase il thread è inattivo; attivazione: causa l inizio della computazione di pertinenza del thread; il thread diviene attivo; sospensione: causa una (temporanea) interruzione dell esecuzione del thread; il thread passa nello stato di thread attivo ma sospeso; ripristino: causa la riattivazione dell esecuzione del thread sospeso; il thread ritorna nello stato attivo; terminazione forzata: causa una fine anomala nell esecuzione del thread; il thread ritorna nello stato inattivo; distruzione: causa la deallocazione del thread, senza che ciò comporti necessariamente il rilascio delle risorse da esso impegnate. I metodi forniti dalla classe Thread per fronteggiare le operazioni indicate permettono di gestire nel tempo l evoluzione dei singoli thread nella macchina virtuale di Java, ma non intervengono in alcun modo sul modello computazionale da questi sostenuto. Al fine di permettere al programmatore di definire il codice dei propri thread il linguaggio mette a disposizione il metodo run(), definito nell interfaccia Runnable e implementato dalla classe Thread. Tale metodo viene richiamato in fase di attivazione del thread ed è pertanto destinato ad essere riscritto, nelle sottoclassi d applicazione derivate da Thread, con il codice che è proprio del processo computazionale che si intende associare a quest ultime. Nel seguito sono riportati i metodi della classe Thread che rivestono maggior interesse per le applicazioni sviluppate in questo testo.

4 20 CAPITOLO 18 Il primo gruppo di metodi è destinato alla creazione dei thread e alla descrizione del modello computazionale da essi realizzato. Si tratta di metodi di largo impiego da usare ogniqualvolta un thread debba essere implementato. Thread Thread() Thread (Runnable target) void run() Il costruttore Thread() alloca un nuovo thread assegnandogli un identificatore del tipo Thread-n, in cui n è un numero naturale progressivo: tipicamente Thread-0 rappresenta il thread associato al metodo main(). Usato nella sua prima forma, il costruttore è riferito a thread istanziati da sottoclassi della classe Thread, mentre nella seconda forma è riferito a thread costituiti da istanze di classi che implementano l interfaccia Runnable. Il metodo run() permette di specificare il modello computazionale del thread. Se il thread è costruito a partire da una classe implementante l interfaccia Runnable, il metodo run() della classe Thread richiama l omonimo metodo dell oggetto Runnable. Se il thread si origina da una sottoclasse di Thread, tale sottoclasse deve riscrivere il metodo run() della classe Thread. Il gruppo di metodi che seguono permette di definire le priorità e la natura dei thread. Thread void setpriority (int newpriority) int getpriority() void setdaemon (boolean on) boolean isdaemon() Il metodo setpriority() permette di modificare la priorità di un thread. Il valore di priorità assegnato coincide con il minore tra il valore del parametro newpriority e il valore di priorità del thread group a cui il thread appartiene. Viceversa, il metodo get- Priority() restituisce il valore di priorità del thread. Il metodo setdaemon() permette di definire un thread come demone o meno. Il metodo deve essere invocato prima dell attivazione del thread. La JVM termina la sua attività quando i soli thread attivi sono costituiti da demoni. Il metodo isdaemon() permette di controllare se il thread a cui è inoltrato l omonimo messaggio è un thread demone o meno. Quattro metodi erano destinati nella prima versione di Java alla realizzazione delle principali operazioni di cambiamento di stato dei thread che sono state analizzate in precedenza.

5 THREAD IN JAVA 21 Thread void start() void suspend() void resume() void stop() boolean isalive() Il metodo start() induce l esecuzione del thread portandolo nello stato di thread attivo. La macchina virtuale Java richiama il metodo run() del thread. Il metodo suspend() causa la sospensione del thread portandolo nello stato di thread sospeso. L esecuzione del thread potrà essere successivamente ripristinata con il metodo resume(). Il metodo può essere interessato da un eccezione di tipo SecurityException. Il metodo resume() ripristina l esecuzione del thread qualora esso si trovi nello stato di thread attivo ma sospeso. Il metodo può essere interessato da un eccezione di tipo SecurityException. Il metodo stop() forza il thread ad interrompere in modo anomalo la propria esecuzione sollevando un eccezione ThreadDeath. L eccezione deve essere fatta rimbalzare al metodo chiamante perché il thread termini correttamente. Lo stato di attività dei thread è verificabile ricorrendo al metodo isalive(); il metodo controlla se il thread è attivo, ossia se su di esso è stato invocato il metodo start() e il thread non ha ancora raggiunto lo stato di terminazione. I metodi suspend(), resume() e stop() sono stati peraltro rimossi (dichiarati deprecated) nelle versioni successive del linguaggio, in quanto rivelatisi possibili cause di situazioni di deadlock. La sospensione di un thread o la sua terminazione vanno quindi gestite esclusivamente con i metodi del gruppo sotto indicato. Thread static Thread currentthread() static void yield() static void sleep (long millis) void join() Il metodo currentthread() restituisce un riferimento al thread correntemente in esecuzione. È principalmente utilizzato per acquisire informazioni sul thread. Il metodo yield() causa la temporanea sospensione del thread corrente, permettendo ad altri thread in attesa di divenire attivi. Il metodo sleep() causa la sospensione del thread per il numero di millisecondi indicato dal parametro millis. Il metodo join() induce il completamento del thread corrente prima di rendere possibile l attivazione del thread successivo.

6 22 CAPITOLO 18 Due metodi sono infine destinati alle operazioni di deallocazione dei thread. Thread void destroy() private void exit() Il metodo destroy() causa la deallocazione del thread, ma non delle risorse da esso impegnate. Il metodo exit() è usato dal sistema per permettere al thread di effettuare la deallocazione delle proprie risorse Creazione di thread La creazione di un thread può essere espletata in Java seguendo due metodologie: per ereditarietà dalla classe Thread; implementando l interfaccia Runnable. La scelta di una soluzione o dell altra è dettata da preferenze personali e dalle caratteristiche dell applicazione Creazione di sottoclassi Thread Qualora si voglia realizzare un thread sfruttando l omonima classe, è necessario effettuare le seguenti operazioni: costruire una sottoclasse della classe Thread; sovrascrivere il metodo run(). Il metodo run() della sottoclasse fornisce in tal modo il corpo del nuovo thread. Una volta generata la sottoclasse, è possibile: creare un thread per istanza della sottoclasse di pertinenza; eseguire il thread per chiamata del metodo start(), il quale invoca a sua volta il metodo run() Implementazione dell interfaccia Runnable Questa seconda soluzione è preferibile nel caso in cui si vogliano creare thread evitando situazioni che potrebbero condurre a forme di ereditarietà multipla, non ammessa da Java. Le operazioni necessarie sono le seguenti: costruzione di una classe di implementazione per l interfaccia Runnable; sovrascrittura del metodo run(). Anche in questa situazione il metodo run() della classe fornisce il corpo del nuovo thread. Ciò fatto, un thread viene creato: generando un istanza della classe che implementa Runnable; passando tale istanza come parametro del costruttore della classe Thread. Il thread è eseguito per chiamata del metodo start().

7 THREAD IN JAVA Sincronizzazione dei metodi In un sistema multi-thread coesistono in generale molti thread attivi, i quali costituiscono processi in grado di evolvere autonomamente e capaci di inoltrarsi reciprocamente messaggi. La ricezione di un messaggio da parte di un thread comporta l attivazione del metodo corrispondente. Sono dunque possibili situazioni in cui potrebbe essere richiesta la contemporanea esecuzione di due o più metodi di uno stesso thread: uno di essi eseguito per esigenza del thread depositario del metodo, gli altri perché invocati da messaggi inoltrati da thread diversi. Tale situazione può dimostrarsi estremamente critica, dal momento che la richiesta di esecuzione di metodi da thread esterni potrebbe interferire con l esecuzione della computazione del thread destinatario dei messaggi. Se infatti esistono situazioni in cui l alternata esecuzione dei metodi in questione da parte della JVM può essere opportuna, esistono sicuramente situazioni in cui tale alternanza va impedita. Il problema evidenziato è risolvibile fornendo il linguaggio di opportuni dispositivi per la sincronizzazione dei metodi. Sincronizzare due o più metodi, in sostanza, significa garantire che l esecuzione di ciascuno di essi non venga interrotta dall esecuzione dei rimanenti, neppure in caso di temporanea sospensione del thread a cui i metodi appartengono. In Java la sincronizzazione dei metodi è ottenuta mediante l uso del modificatore synchronized. Qualora i metodi di un thread siano dichiarati sincronizzati, l attivazione di uno di essi blocca le richieste di esecuzione dei metodi rimanenti quando inoltrate alla stessa istanza di thread. La situazione è descritta in Figura 18.2, in cui il thread thd1 è istanziato dalla classe ClasseDiThread e attivato con l esecuzione del metodo m1(). Il thread thd2, che inoltra il messaggio thd1.m2(), dovrà attendere il completamento di m1() per ottenere l esecuzione del metodo m2(). Quanto sopra asserito si applica ai metodi d istanza. Il modificatore synchronized può tuttavia essere applicato anche ai metodi di classe. Qualora due o più metodi statici sincronizzati di una stessa classe vengano chiamati da thread diversi, le loro esecuzioni subiscono un processo di serializzazione in modo che nessuno di essi possa essere interrotto dall esecuzione dei rimanenti. Figura 18.2 Sincronizzazione di metodi d istanza.

8 24 CAPITOLO Un esempio di sincronizzazione di metodi La classe Frame_xThread (Scheda 18.4a) fornisce un esempio di sincronizzazione di metodi secondo un modello produttore-consumatore. Si supponga di disporre di otto dischi blu posizionati nella regione di sinistra di un frame, come indicato in Figura 18.3 (a), e di voler raggiungere la configurazione di otto dischi rossi riportata in 18.3 (b). La trasformazione deve avvenire per produzione di dischi blu da rendere disponibili per la trasformazione in corrispondenti dischi rossi. Figura 18.3 Configurazioni iniziale e finale di un frame. Il processo che sottende la trasformazione delle configurazioni è basato su due metodi principali: il metodo produci() e il metodo consuma(). L esempio ha la funzione di mostrare la differenza tra le configurazioni intermedie, necessarie al raggiungimento di quella finale, che possono essere attraversate a seconda che i due metodi citati siano dichiarati synchronized o meno. Le due regioni di tracciatura in cui è suddivisa la finestra grafica sono rispettivamente denominate rgnprod e rgncons, a rappresentazione dello stato del thread causato dai metodi produci() e consuma(): il metodo produci()opera sulla regione rgnprod: esso riduce progressivamente di un unità il numero di dischi presenti nella regione, richiede la tracciatura della nuova configurazione della stessa e si sospende per un secondo; il metodo consuma() opera in modo analogo sulla regione rgncons, incrementando progressivamente di un unità il numero di dischi della regione, richiedendo la tracciatura della nuova configurazione raggiunta e sospendendosi per uno stesso periodo temporale. La sospensione del thread è inserita sia per permettere all osservatore di seguire l evoluzione del processo di trasformazione nella distribuzione dei dischi nelle due regioni, sia per rendere palese il diverso funzionamento dell applicazione quando i metodi produci() e consuma() sono entrambi dichiarati sincronizzati rispetto a quando non lo sono.

9 THREAD IN JAVA 25 La trasformazione complessiva delle configurazioni di dischi nelle due regioni di tracciatura del frame proviene dalla coordinata esecuzione di entrambi i metodi produci() e consuma(). A tale scopo è necessario che l applicazione a ciò preposta generi un thread, lo si denomini th1, da attivare con il comando th1.start() per l esecuzione del metodo consuma() e in seguito invochi il metodo produci() dello stesso thread. Lo schema computazionale complessivamente ottenuto è analogo a quello riportato in Figura 18.2: il thread thd1 con il metodo m1() è sostituito dal thread th1 e dal metodo consuma(), mentre il thread esterno thd2 inoltrante il messaggio thd1.m2() è sostituito dal thread contenente il programma main() dell applicazione e dal messaggio produci(). Le configurazioni ottenute lanciando l applicazione sono diverse a seconda che i metodi produci() e consuma() siano o meno dichiarati entrambi sincronizzati. Nel caso in cui entrambi i metodi siano dichiarati synchronized, il metodo produci(), che è in esecuzione appartenendo al thread del metodo main(), non può essere interrotto neppure nei suoi periodi di sospensione dal metodo consuma() del thread th1. Pertanto inizialmente si assisterà ad una successiva rimozione di dischi dalla regione rgnprod, come riportato in Figura 18.4, sino al raggiungimento della configurazione di Figura Soltanto a questo punto potrà essere attivato il metodo consuma() del thread th1, il quale procederà ad inserire dischi nella regione rgncons, generando la successione di configurazioni di Figura Figura 18.4 Configurazioni parziali generate dal metodo produci().

10 26 CAPITOLO 18 Figura 18.5 Configurazione finale generata dal metodo produci(). Figura 18.6 Configurazioni generate dal metodo consuma(). Qualora uno dei due metodi non sia dichiarato synchronized, produci() e consuma() procederanno autonomamente, alternandosi nella generazione di configurazioni parziali. Il risultato sarà di assistere ad una progressiva eliminazione di dischi blu dalla regione rgnprod e al contestuale inserimento di dischi rossi in rgncons.

11 THREAD IN JAVA 27 Figura 18.7 Configurazioni generate dai metodi produci() e consuma(). Scheda 18.4a - class Argomenti class Frame_xThread Sincronizzazione di metodi su una stessa istanza di thread. Modello implementato: produttore-consumatore. import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import java.util.*; import javax.swing.*;

12 28 CAPITOLO 18 public class Frame_xThread extends JFrame implements Runnable { private final int ncmax = 8; private final int r2 = 20; private PanThread rgnprod, rgncons; private int cinit_prod = ncmax, cinit_cons = 0; private int cbasex = 20; private int cbasey = 20; public Frame_xThread() { setdefaultcloseoperation (JFrame.EXIT_ON_CLOSE); Container cnt = getcontentpane(); cnt.setbackground (Color.white); cnt.setlayout (new BorderLayout()); settitle ( Produttore - Consumatore ); setbounds (30, 30, 700, 200); rgnprod = new PanThread (cinit_prod); rgnprod.setsize (340, 200); rgnprod.setbackground (Color.yellow); rgnprod.setforeground (Color.blue); cnt.add (rgnprod, West ); rgncons = new PanThread (cinit_cons); rgncons.setsize (340, 200); rgncons.setbackground (Color.cyan); rgncons.setforeground (Color.red); cnt.add (rgncons, East ); Panel controlli = new JPanel(); controlli.setbackground (Color.lightGray); cnt.add (controlli, South ); setvisible (true true); class PanThread extends Canvas { public int ncerchi; public PanThread (int ncerchi) { super(); this.ncerchi = ncerchi; public void paint (Graphics g) { int cx = cbasex; int cy = cbasey; Graphics2D g2 = (Graphics2D) g; for (int c = 0; c < ncerchi; c++) { cx = cx + 2*r2; g2.fill (new Ellipse2D.Duoble (cx, cy, r2, r2)); for (int c = ncerchi + 1; c < ncmax+1; c++) { cx = cx + 2*r2; g2.draw (new Ellipse2D.Duoble (cx, cy, r2, r2));

13 THREAD IN JAVA 29 La classe Frame_xThread dispone di un frame suddiviso in due regioni. Nella regione di sinistra sono collocati otto dischi blu. Il programma realizzato dalla classe comporta l eliminazione dei dischi blu dalla regione sinistra con corrispondente generazione di otto dischi rossi nella regione destra. Il processo che sottende la trasformazione è basato su due metodi principali: il metodo produci() e il metodo consuma(). La trasformazione deve dunque avvenire per produzione di dischi blu da rendere disponibili per la consumazione (trasformazione) in corrispondenti dischi rossi. La classe è realizzata in forma mista, sfruttando sia classi dell architettura AWT sia classi JFC/Swing. La forma complessiva del frame prevede due regioni di tracciatura, istanziate dalla classe PanThread derivata da Canvas, e un sottostante pannello vuoto di classe JPanel inserito per possibili usi successivi. Le due regioni di tracciatura, denominate rgnprod e rgncons, sono destinate a visualizzare i dischi blu e rossi afferenti alle sottofinestre sinistra e destra del frame a mano a mano che il processo evolve. La regione rgnprod è inizializzata con ncmax = 8 dischi blu, mentre la regione rgncons è priva di dischi: le variabili cinit_prod e cinit_cons stabiliscono lo stato iniziale delle due regioni. I colori dei dischi provengono dalla definizione dei colori di foreground delle rispettive regioni, mentre la costante r2 ne stabilisce il diametro. Le variabili cbasex e cbasey definiscono le posizioni dei punti iniziali a partire dai quali saranno collocati i dischi nelle due regioni di tracciatura. Dichiarazione delle variabili private final int ncmax = 8; private final int r2 = 20; private PanThread rgnprod, rgncons; private int cinit_prod = ncmax, cinit_cons = 0; private int cbasex = 20; private int cbasey = 20; Dopo la creazione della finestra grafica, derivata dalla classe JFrame nel modo consueto al contesto JFC/Swing e basata su un modello di distribuzione dei componenti di tipo BorderLayout, la classe crea le regioni rgnprod e rgncons istanziandole dalla classe PanThread e dotandole dei dischi di propria pertinenza. In questa fase il metodo setbackground() assegna alla regione rgnprod uno sfondo giallo e il metodo setforeground() stabilisce per essa il colore di tracciatura blu. I corrispondenti colori della regione rgncons sono il ciano e il rosso. Le due regioni vengono quindi inserite dal metodo add() nelle parti West e East del layout del contenitore cnt del frame. Generazione del frame public Frame_xThread() { rgnprod = new PanThread (cinit_prod); rgnprod.setsize (340, 200); rgnprod.setbackground (Color.yellow); rgnprod.setforeground (Color.blue); cnt.add (rgnprod, West ); rgncons = new PanThread (cinit_cons); rgncons.setsize (340, 200);

14 30 CAPITOLO 18 rgncons.setbackground (Color.cyan); rgncons.setforeground (Color.red); cnt.add (rgncons, East ); Successivamente è creato il pannello controlli, che viene dotato di sfondo grigio e allocato nella parte South del contenitore cnt. L ultima operazione di Frame_xThread() consiste nel rendere visibile il frame con il metodo setvisible(). Completamento del frame public Frame_xThread() { Panel controlli = new JPanel(); controlli.setbackground (Color.lightGray); cnt.add (controlli, South ); setvisible (true true); Il processo di visualizzazione dei dischi nelle due regioni di tracciatura rgnprod e rgncons è realizzato dalla classe interna PanThread. Il costruttore della classe trascrive nella variabile d istanza ncerchi il numero di dischi inizialmente presenti nella regione. Tale valore verrà modificato durante l esecuzione del programma a mano a mano che i dischi verranno trasferiti dalla regione rgnprod alla regione rgncons. Costruttore della classe di visualizzazione public PanThread (int ncerchi) { super(); this.ncerchi = ncerchi; Il metodo paint() utilizza il valore di ncerchi per tracciare a campitura piena, con il metodo fill(), i dischi presenti nella regione su cui è attivato e per disegnare con il metodo draw() il profilo dei dischi mancanti. In tale contesto i valori di cbasex e cbasey definiscono i punti di riferimento iniziali del processo di tracciatura, mentre r2 stabilisce l ampiezza del rettangolo di contenimento dei dischi. Visualizzazione di regione public void paint (Graphics g) { int cx = cbasex; int cy = cbasey; Graphics2D g2 = (Graphics2D) g; for (int c = 0; c < ncerchi; c++) { cx = cx + 2*r2; g2.fill (new Ellipse2D.Duoble (cx, cy, r2, r2)); for (int c = ncerchi + 1; c < ncmax+1; c++) { cx = cx + 2*r2;

15 THREAD IN JAVA 31 g.draw (new Ellipse2D.Duoble (cx, cy, r2, r2)); I metodi della classe Frame_xThread che sottendono alla trasformazione delle configurazioni delle regioni rgnprod e rgncons sono i metodi produci() e consuma(). Il metodo produci() opera sulla regione rgnprod: la chiamata riduce progressivamente di un unità il numero di dischi presenti nella regione, richiede la tracciatura della nuova configurazione della stessa e si sospende per 1000 millisecondi. In modo analogo il metodo consuma() opera sulla regione rgncons, incrementando progressivamente di un unità il numero di dischi della regione, richiedendo la tracciatura della nuova configurazione raggiunta e sospendendosi per uno stesso periodo temporale. public class Frame_xThread extends JFrame implements Runnable { public synchronized void produci() { for (int c = 0; c < ncmax; c++) { rgnprod.ncerchi ; rgnprod.repaint(); try { Thread.sleep (1000); catch (InterruptedException e) { throw new RuntimeException(); public /* synchronized */ void consuma() { for (int c = 0; c < ncmax; c++) { rgncons.ncerchi++; rgncons.repaint(); try { Thread.sleep (1000); catch (InterruptedException e) { throw new RuntimeException(); public void run() { consuma(); La sospensione del thread è ottenuta in entrambi i metodi produci() e consuma() con l uso del metodo statico sleep() della classe Thread, che è utilizzabile dal momento che la classe Frame_xThread implementa l interfaccia Runnable. Si consideri che la sospensione del thread è inserita sia per permettere all osservatore di seguire l evoluzione del processo di trasformazione nella distribuzione dei dischi nelle due regioni, sia per rendere palese il diverso funzionamento dell applicazione quando i metodi produci() e consuma() sono entrambi dichiarati sincronizzati rispetto a quando non lo sono.

16 32 CAPITOLO 18 La classe Frame_xThread è completata dal metodo run() contenente il codice dei thread da essa istanziabili. Come si nota, il thread si limita ad operare una chiamata al metodo consuma() per modificare la regione rgncons della GUI. Codice del thread public class Frame_xThread extends JFrame implements Runnable { public void run() { consuma(); La trasformazione complessiva delle configurazioni di dischi nelle due regioni di tracciatura del frame proviene dalla coordinata esecuzione di entrambi i metodi produci() e consuma(). La classe Pgm_xThread ne implementa la realizzazione. import java.awt.*; public class Pgm_xThread { public static void main (String[] args) { Frame_xThread winthread = new Frame_xThread(); Thread th1 = new Thread (winthread); th1.start(); winthread.produci(); L applicazione genera inizialmente un thread, denominato th1, creando un istanza della classe Frame_xThread e passando l oggetto winthread così istanziato al costruttore Thread() della omonima classe. Generazione thread public static void main (String[] args) { Frame_xThread winthread = new Frame_xThread(); Thread th1 = new Thread (winthread); Il thread th1 viene quindi attivato con il comando th1.start() per l esecuzione del metodo consuma(). Attivazione thread: consuma() public static void main (String[] args) { th1.start(); Infine viene effettuata l attivazione del metodo produci() dello stesso thread inoltrandone la richiesta all istanza winthread della classe Frame_xThread.

17 THREAD IN JAVA 33 Attivazione metodo: produci() public static void main (String[] args) { winthread.produci(); 18.5 Sincronizzazione dei thread Un aspetto importante dei sistemi multi-thread riguarda il trasferimento di dati tra processi diversi. Sull argomento la letteratura riporta numerose tecniche e soluzioni. Indipendentemente dalla metodologia seguita, va sottolineato che lo scambio dati fra thread richiede che gli stessi vengano sottoposti ad una fase di sincronizzazione. La tecnica presentata nel seguito si basa sulla presenza di monitor. Un monitor costituisce una risorsa software che viene condivisa fra i thread operanti lo scambio dati, in modo da forzare gli stessi a sincronizzarsi. La Figura 18.8 riporta due situazioni tipiche. Nella forma più semplice, presentata in Figura 18.8 (a), il monitor funge da sincronizzatore dei thread thd1 e thd2 durante lo scambio dati: la sua funzione è di acquisire il dato trasmesso dal thread mittente e di sospendere quest ultimo sino a che il thread destinatario lo non avrà ricevuto. La situazione è del tutto generalizzabile. A titolo dimostrativo, in Figura 18.8 (b) esistono più thread mittenti, denominati thdp1,, thdpn, e un thread ricevente thdc. In questo caso il monitor acquisisce un dato dal primo thread mittente pronto a trasmettere, ne sospende l attività al pari dei rimanenti thread mittente, così da impedire la sovrapposizione di dati diversi in ingresso, inoltra il dato al thread ricevente thdc dopo averlo risvegliato dal suo eventuale stato di sospensione. Ciò fatto, il monitor si rende disponibile per un successivo scambio dati sospendendo il thread ricevente e risvegliando tutti i thread mittente che erano stati precedentemente sospesi. Le operazioni di cui si è trattato richiedono che il linguaggio di implementazione disponga di primitive in grado di agire sull esecuzione dei thread, forzandone la sospensione e la successiva riattivazione. In Java ciascun oggetto può costituire una risorsa condivisa da più Figura 18.8 Utilizzazione dei monitor per la sincronizzazione di thread.

18 34 CAPITOLO 18 thread, per cui i metodi destinati alla loro sincronizzazione devono essere insiti negli oggetti stessi. Essi entrano quindi di diritto nella classe Object del package java.lang da cui discendono le classi di applicazione. Object void wait() native void wait (long timeout) native void notify() native void notifyall() Il primo metodo fornito dalla classe presiede alle operazioni di sospensione dei thread. Un thread sospeso perde il possesso della risorsa condivisa su cui opera e viene inserito nella coda dei processi in attesa. I metodi wait() sospendono il thread correntemente in esecuzione, facendogli perdere il controllo della risorsa condivisa in quel momento posseduta. I thread sospesi e in attesa del rilascio di una risorsa condivisa possono essere risvegliati da altro thread operante sulla stessa risorsa con il metodo notify() oppure con il metodo notifyall(). I thread così risvegliati competono per riottenere il controllo della risorsa in base alla loro priorità e/o al momento della loro sospensione. Nella seconda forma, il metodo wait() può limitare la sospensione del thread corrente al tempo indicato dal parametro timeout. In entrambe le forme il metodo può sollevare un eccezione di tipo InterruptedException. Due ulteriori metodi sono destinati alle operazioni di risveglio dei thread. Un thread risvegliato è trasferito nella coda dei processi pronti e può competere per ottenere nuovamente il possesso della risorsa condivisa di interesse. Il metodo notify() risveglia un singolo thread che è stato sospeso in attesa del rilascio di una risorsa condivisa. Il thread può ottenere il possesso della risorsa eseguendo un metodo sincronizzato appartenente alla risorsa stessa. Il metodo notifyall() risveglia tutti i thread che sono stati sospesi in attesa del rilascio di una risorsa condivisa. I metodi risvegliati competono per riottenere il controllo della risorsa in base alla loro priorità e/o al momento della loro sospensione Un esempio di sincronizzazione di thread Il problema proposto nel Paragrafo si interessava della sincronizzazione di metodi in un modello di processo denominato produttore-consumatore. Quell esempio può essere generalizzato e completato in riferimento allo scambio dati fra thread diversi. La classe Frame_xThreads (Scheda 18.5a) fornisce un esempio di sincronizzazione di thread per l implementazione di un modello di scambio dati basato su monitor. Due thread produttori di dischi, di colori rispettivi blu e rosso, inoltrano i dischi da essi inizialmente posseduti ad un thread consumatore con cadenze temporali distinte. I thread sono costituiti da istanze delle classi Produttore e Consumatore. Per evitare conflittualità fra i diversi processi, lo scambio dati avviene attraverso una risorsa condivisa costituita da un istanza della classe Monitor. La sua funzione è di sincronizzare le operazioni di trasferimento dei dischi dai due thread produttori verso il thread consumatore.

19 THREAD IN JAVA 35 Figura 18.9 Architettura d insieme dell applicazione. La Figura 18.9 riporta l architettura software complessiva. Ai sottostanti thread produttori e consumatore, che costituiscono il nucleo dell applicazione, è associata un interfaccia grafica ripartita in tre regioni di tracciatura distinte, una per ciascun thread, con il compito di visualizzarne istante per istante lo stato. Si osservi che le diverse componenti software coinvolte nell applicazione sono tutte nettamente separate tra di loro, il che comporta una più semplice progettazione e linearità nella definizione delle classi. La classe principale dell applicazione è ora responsabile solamente della costruzione della GUI, suddivisa nelle tre regioni rgncons, rgnprod1 e rgnprod2, e dei metodi responsabili della visualizzazione dello stato dei diversi thread, mentre le operazioni di basso livello necessarie per la tracciatura dei dischi competono ad una ulteriore classe PanThread derivata da Canvas. Il cuore dell applicazione è costituito dalle classi Produttore e Consumatore, dalle quali sono generati gli omonimi thread, e la classe Monitor da cui istanziare il monitor necessario per la sincronizzazione delle attività dei processi. Il monitor infatti costituisce una risorsa condivisa dai thread produttori e consumatore, che si comporta come un supporto intermedio di trasferimento per i dischi. È basato su due metodi synchronized, denominati ricezione() e rilascio(), il cui funzionamento è l uno il duale dell altro: il metodo ricezione() è invocato dai thread della classe Produttore per inoltrare al monitor i propri dischi, mentre il metodo rilascio() è destinato ai thread della classe Consumatore per ricevere dal monitor i dischi in esso presenti.

20 36 CAPITOLO 18 Scheda 18.5a - class Argomenti class Frame_xThreads Sincronizzazione di thread. Modello implementato: monitor. Classi: Produttore, Consumatore, Monitor. import java.awt.*; import java.awt.event.*; import java.util.*; import java.awt.geom.*; import javax.swing.*; public class Frame_xThreads extends JFrame { private final int RGN_CONS = 0, RGN_PROD1 = 1, RGN_PROD2 = 2; private PanThread rgncons, rgnprod1, rgnprod2; public Frame_xThreads() { setdefaultcloseoperation (JFrame.EXIT_ON_CLOSE); Container cnt = getcontentpane(); cnt.setbackground (Color.white); cnt.setlayout (new BorderLayout()); settitle ( Produttori - Consumatore ); setbounds (30, 30, 700, 500); rgnprod1 = new PanThread(); rgnprod1.setsize (340, 300); rgnprod1.setbackground (Color.yellow); cnt.add (rgnprod1, West ); rgnprod2 = new PanThread(); rgnprod2.setsize (340, 500); rgnprod2.setbackground (Color.yellow); cnt.add (rgnprod2, East ); rgncons = new PanThread(); rgncons.setsize (700, 200); rgncons.setbackground (Color.lightGray); cnt.add (rgncons, South ); setvisible (true true); public void modificaregione (int rgn, int nmaxcerchi, Vector vt) { switch (rgn) { case 0: rgncons.setelements (vt, nmaxcerchi); rgncons.repaint(); break; case 1: rgnprod1.setelements (vt, nmaxcerchi); rgnprod1.repaint(); break; case 2: rgnprod2.setelements (vt, nmaxcerchi); rgnprod2.repaint(); break;

Java Virtual Machine

Java Virtual Machine Java Virtual Machine programmi sorgente: files.java compilatore files.class bytecode linker/loader bytecode bytecode Java API files.class interprete macchina ospite Indipendenza di java dalla macchina

Dettagli

Multithreading in Java. Fondamenti di Sistemi Informativi 2014-2015

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

Dettagli

GESTIONE DEI PROCESSI

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

Dettagli

Java threads (2) Programmazione Concorrente

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

Dettagli

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

COGNOME.NOME. Matricola

COGNOME.NOME. Matricola Esame di PROGRAMMAZIONE ORIENTATA AGLI OGGETTI Appello del 4.9.2013 COGNOME.NOME. Matricola Tre classi, denominate Anemone, Fiordaliso e Viola devono assicurare la visualizzazione di un fiore stilizzato

Dettagli

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto: Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante

Dettagli

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

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

Dettagli

Telematica II 17. Esercitazione/Laboratorio 6

Telematica II 17. Esercitazione/Laboratorio 6 Multitasking e Multithreading Telematica II 17. Esercitazione/Laboratorio 6 Multitasking si riferisce all abilità di un computer di eseguire processi (jobs) multipli in maniera concorrente si ricorda che

Dettagli

Monitor. Introduzione. Struttura di un TDA Monitor

Monitor. Introduzione. Struttura di un TDA Monitor Monitor Domenico Cotroneo Dipartimento di Informatica e Sistemistica Introduzione E stato introdotto per facilitare la programmazione strutturata di problemi in cui è necessario controllare l assegnazione

Dettagli

Pronto Esecuzione Attesa Terminazione

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

Dettagli

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica Esercitazioni di PROGETTAZIONE DEL SOFTWARE (Corsi di Laurea in Ingegneria Informatica ed Automatica ed Ingegneria

Dettagli

Il Sistema Operativo

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

Dettagli

Sistemi Operativi (modulo di Informatica II) I processi

Sistemi Operativi (modulo di Informatica II) I processi Sistemi Operativi (modulo di Informatica II) I processi Patrizia Scandurra Università degli Studi di Bergamo a.a. 2009-10 Sommario Il concetto di processo Schedulazione dei processi e cambio di contesto

Dettagli

Gestione Turni. Introduzione

Gestione Turni. Introduzione Gestione Turni Introduzione La gestione dei turni di lavoro si rende necessaria quando, per garantire la continuità del servizio di una determinata struttura, è necessario che tutto il personale afferente

Dettagli

FONDAMENTI di INFORMATICA L. Mezzalira

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

Dettagli

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

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

Dettagli

Sistema Operativo. Fondamenti di Informatica 1. Il Sistema Operativo

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

Dettagli

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

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

Dettagli

Il costrutto monitor [Hoare 74]

Il costrutto monitor [Hoare 74] Il monitor 1 Il costrutto monitor [Hoare 74] Definizione: Costrutto sintattico che associa un insieme di operazioni (entry, o public) ad una struttura dati comune a più processi, tale che: Le operazioni

Dettagli

Funzioni in C. Violetta Lonati

Funzioni in C. Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni

Dettagli

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

La gestione di un calcolatore. Sistemi Operativi primo modulo Introduzione. Sistema operativo (2) Sistema operativo (1) La gestione di un calcolatore Sistemi Operativi primo modulo Introduzione Augusto Celentano Università Ca Foscari Venezia Corso di Laurea in Informatica Un calcolatore (sistema di elaborazione) è un sistema

Dettagli

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

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE SOMMARIO Coda (queue): Specifica: interfaccia. Implementazione: Strutture indicizzate (array): Array di dimensione variabile. Array circolari. Strutture collegate (nodi). Prestazioni. Strutture Software

Dettagli

Modulo 4: Ereditarietà, interfacce e clonazione

Modulo 4: Ereditarietà, interfacce e clonazione Modulo 4: Ereditarietà, interfacce e clonazione Argomenti Trattati: Classi, Superclassi e Sottoclassi Ereditarietà Ereditarietà ed Attributi Privati Override super Ereditarietà e Costruttori Polimorfismo

Dettagli

Inizializzazione, Assegnamento e Distruzione di Classi

Inizializzazione, Assegnamento e Distruzione di Classi Inizializzazione, Assegnamento e Distruzione di Classi Lezione 9 Operazioni Automatiche In ogni programma C++ oggetti classe vengono gestiti automaticamente dal compilatore Inizializzati al momento della

Dettagli

2.0 Gli archivi. 2.1 Inserire gli archivi. 2.2 Archivio Clienti, Fornitori, Materiali, Noleggi ed Altri Costi. Impresa Edile Guida all uso

2.0 Gli archivi. 2.1 Inserire gli archivi. 2.2 Archivio Clienti, Fornitori, Materiali, Noleggi ed Altri Costi. Impresa Edile Guida all uso 2.0 Gli archivi All interno della sezione archivi sono inserite le anagrafiche. In pratica si stratta di tutti quei dati che ricorreranno costantemente all interno dei documenti. 2.1 Inserire gli archivi

Dettagli

ARCHITETTURA DI RETE FOLEGNANI ANDREA

ARCHITETTURA DI RETE FOLEGNANI ANDREA ARCHITETTURA DI RETE FOLEGNANI ANDREA INTRODUZIONE È denominata Architettura di rete un insieme di livelli e protocolli. Le reti sono organizzate gerarchicamente in livelli, ciascuno dei quali interagisce

Dettagli

Esercitazione n 4. Obiettivi

Esercitazione n 4. Obiettivi Esercitazione n 4 Obiettivi Progettare e implementare per intero un componente software in Java Linguaggio Java: Classi astratte Utilizzo di costruttori e metodi di superclasse Polimorfismo Esempio guida:

Dettagli

Programmazione concorrente in Java

Programmazione concorrente in Java Programmazione concorrente in Java Multithreading in Java Ogni thread e un oggetto, creato come istanza della classe java.lang.thread La classe Thread contiene tutti i metodi per gestire i threads L utente

Dettagli

I Canvas. import java.awt.*; import javax.swing.*; public class Graf{ public Graf () { JFrame f = new JFrame("Finestra"); // crea frame invisibile

I Canvas. import java.awt.*; import javax.swing.*; public class Graf{ public Graf () { JFrame f = new JFrame(Finestra); // crea frame invisibile I Canvas Tra i vari contenitori Java il Canvas (area di disegno o tela) è una semplice superficie di disegno particolarmente utile per visualizzare immagini o per effettuare altre operazioni grafiche.

Dettagli

Synchronized (ancora)

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

Dettagli

Gestione Risorse Umane Web

Gestione Risorse Umane Web La gestione delle risorse umane Gestione Risorse Umane Web Generazione attestati di partecipazione ai corsi di formazione (Versione V03) Premessa... 2 Configurazione del sistema... 3 Estrattore dati...

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

Gestione dei thread in Java LSO 2008

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

Dettagli

Finalità della soluzione... 3. Schema generale e modalità d integrazione... 4. Gestione centralizzata in TeamPortal... 6

Finalità della soluzione... 3. Schema generale e modalità d integrazione... 4. Gestione centralizzata in TeamPortal... 6 Finalità della soluzione... 3 Schema generale e modalità d integrazione... 4 Gestione centralizzata in TeamPortal... 6 Dati gestiti dall Anagrafica Unica... 8 Gestione anagrafica... 9 Storicizzazione...

Dettagli

La struttura dati ad albero binario

La struttura dati ad albero binario La struttura dati ad albero binario L albero è una struttura dati nella quale le informazioni sono organizzate in modo gerarchico, dall alto verso il basso. Gli elementi di un albero si chiamano nodi,

Dettagli

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

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

Dettagli

Java: Compilatore e Interprete

Java: Compilatore e Interprete Java: Compilatore e Interprete Java Virtual Machine Il bytecode non è Linguaggio Macchina. Per diventarlo, deve subire un ulteriore trasformazione che viene operata dall interprete Java in modalità JIT

Dettagli

Il problema del produttore e del consumatore. Cooperazione tra processi

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

Dettagli

Sequence Diagram e Collaboration Diagram

Sequence Diagram e Collaboration Diagram Sequence Diagram e Collaboration Diagram Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it Dipartimento di Ingegneria Informatica e delle Telecomunicazioni Università di Catania Sommario Interaction

Dettagli

Indice generale. OOA Analisi Orientata agli Oggetti. Introduzione. Analisi

Indice generale. OOA Analisi Orientata agli Oggetti. Introduzione. Analisi Indice generale OOA Analisi Orientata agli Oggetti Introduzione Analisi Metodi d' analisi Analisi funzionale Analisi del flusso dei dati Analisi delle informazioni Analisi Orientata agli Oggetti (OOA)

Dettagli

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. Esercitazione. Programmazione Object Oriented in Java

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. Esercitazione. Programmazione Object Oriented 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 Programmazione Object Oriented in Java

Dettagli

Un esercizio d esame. Flavio De Paoli

Un esercizio d esame. Flavio De Paoli Un esercizio d esame e note sulla gestione dei dati Flavio De Paoli Il testo (Appello 22 ottobre 2001) Una stazione di servizio dispone di n distributori di benzina. I clienti si presentano a uno dei distributori

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T3 1-Sottoprogrammi 1 Prerequisiti Tecnica top-down Programmazione elementare 2 1 Introduzione Lo scopo di questa Unità è utilizzare la metodologia di progettazione top-down

Dettagli

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

Il Sistema Operativo. C. Marrocco. Università degli Studi di Cassino Il Sistema Operativo Il Sistema Operativo è uno strato software che: opera direttamente sull hardware; isola dai dettagli dell architettura hardware; fornisce un insieme di funzionalità di alto livello.

Dettagli

Java Applet. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2009-2010

Java Applet. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2009-2010 Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2009-2010 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it Java Applet 1 Application VS Applet Una

Dettagli

CP Customer Portal. Sistema di gestione ticket unificato

CP Customer Portal. Sistema di gestione ticket unificato CP Customer Portal Sistema di gestione ticket unificato Sommario CP Customer Portal...1 Sistema di gestione ticket unificato...1 Sommario...2 Flusso gestione ticket...3 Modalità di apertura ticket...3

Dettagli

E possibile modificare la lingua dei testi dell interfaccia utente, se in inglese o in italiano, dal menu [Tools

E possibile modificare la lingua dei testi dell interfaccia utente, se in inglese o in italiano, dal menu [Tools Una breve introduzione operativa a STGraph Luca Mari, versione 5.3.11 STGraph è un sistema software per creare, modificare ed eseguire modelli di sistemi dinamici descritti secondo l approccio agli stati

Dettagli

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Grafica: Thread versione 1.0 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)

Dettagli

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Siti web centrati sui dati Architettura MVC-2: i JavaBeans Siti web centrati sui dati Architettura MVC-2: i JavaBeans 1 ALBERTO BELUSSI ANNO ACCADEMICO 2009/2010 Limiti dell approccio SEVLET UNICA La servlet svolge tre tipi di funzioni distinte: Interazione con

Dettagli

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

Manuale Amministratore Legalmail Enterprise. Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise Manuale Amministratore Legalmail Enterprise Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise Pagina 2 di 16 Manuale Amministratore Legalmail Enterprise Introduzione a Legalmail Enterprise...3

Dettagli

Esercizio 1: trading on-line

Esercizio 1: trading on-line Esercizio 1: trading on-line Si realizzi un programma Java che gestisca le operazioni base della gestione di un fondo per gli investimenti on-line Creazione del fondo (con indicazione della somma in inizialmente

Dettagli

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

Scheduling della CPU. Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux Scheduling della CPU Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux Sistemi multiprocessori Fin qui si sono trattati i problemi di scheduling su singola

Dettagli

19. Introduzione al multi-threading

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

Dettagli

Consiglio regionale della Toscana. Regole per il corretto funzionamento della posta elettronica

Consiglio regionale della Toscana. Regole per il corretto funzionamento della posta elettronica Consiglio regionale della Toscana Regole per il corretto funzionamento della posta elettronica A cura dell Ufficio Informatica Maggio 2006 Indice 1. Regole di utilizzo della posta elettronica... 3 2. Controllo

Dettagli

Le basi della grafica in Java. Prof. Francesco Accarino IIS Altiero Spinelli via Leopardi 132 Sesto san Giovanni

Le basi della grafica in Java. Prof. Francesco Accarino IIS Altiero Spinelli via Leopardi 132 Sesto san Giovanni Le basi della grafica in Java Prof. Francesco Accarino IIS Altiero Spinelli via Leopardi 132 Sesto san Giovanni Elaborazione classica o imperativa L elaborazione è concentrata nel momento centrale, durante

Dettagli

Architettura MVC-2: i JavaBeans

Architettura MVC-2: i JavaBeans Siti web centrati sui dati Architettura MVC-2: i JavaBeans Alberto Belussi anno accademico 2008/2009 Limiti dell approccio SEVLET UNICA La servlet svolge tre tipi di funzioni distinte: Interazione con

Dettagli

Appunti sulla Macchina di Turing. Macchina di Turing

Appunti sulla Macchina di Turing. Macchina di Turing Macchina di Turing Una macchina di Turing è costituita dai seguenti elementi (vedi fig. 1): a) una unità di memoria, detta memoria esterna, consistente in un nastro illimitato in entrambi i sensi e suddiviso

Dettagli

Gestione della memoria centrale

Gestione della memoria centrale Gestione della memoria centrale Un programma per essere eseguito deve risiedere in memoria principale e lo stesso vale per i dati su cui esso opera In un sistema multitasking molti processi vengono eseguiti

Dettagli

Il Sistema Operativo (1)

Il Sistema Operativo (1) E il software fondamentale del computer, gestisce tutto il suo funzionamento e crea un interfaccia con l utente. Le sue funzioni principali sono: Il Sistema Operativo (1) La gestione dell unità centrale

Dettagli

Object Oriented Programming

Object Oriented Programming OOP Object Oriented Programming Programmazione orientata agli oggetti La programmazione orientata agli oggetti (Object Oriented Programming) è un paradigma di programmazione Permette di raggruppare in

Dettagli

Coordinazione Distribuita

Coordinazione Distribuita Coordinazione Distribuita Ordinamento degli eventi Mutua esclusione Atomicità Controllo della Concorrenza 21.1 Introduzione Tutte le questioni relative alla concorrenza che si incontrano in sistemi centralizzati,

Dettagli

10 - Programmare con gli Array

10 - Programmare con gli Array 10 - Programmare con gli Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it

Dettagli

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

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

Dettagli

Archivio CD. Fondamenti di Programmazione

Archivio CD. Fondamenti di Programmazione Archivio CD Una persona possiede un certo numero di CD musicali e desidera organizzare il proprio archivio tramite uno strumento software. Il programma deve permettere: - l inserimento di un nuovo CD nella

Dettagli

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

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini. Algoritmi di routing dinamici (pag.89) UdA2_L5 Nelle moderne reti si usano algoritmi dinamici, che si adattano automaticamente ai cambiamenti della rete. Questi algoritmi non sono eseguiti solo all'avvio

Dettagli

GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C

GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C.:luxx:. PREMESSE In questa guida non verranno trattati i costrutti di flusso, le funzioni, o comunque le caratteristiche del linguaggio, che si danno come presupposte.

Dettagli

T 1. Per un processo con più thread di controllo, lo stato di avanzamento della computazione di ogni thread è dato da:

T 1. Per un processo con più thread di controllo, lo stato di avanzamento della computazione di ogni thread è dato da: Un thread (o processo leggero) è una attività, descritta da una sequenza di istruzioni, che esegue all'interno del contesto di esecuzione di un programma. Un thread procede nella sua esecuzione per portare

Dettagli

MODELLISTICA DI IMPIANTI E SISTEMI 2

MODELLISTICA DI IMPIANTI E SISTEMI 2 MODELLISTICA DI IMPIANTI E SISTEMI 2 Indice 1 Dalla traccia al modello 2 1.1 BAS................................................ 4 I Traccia Si consideri il problema della gestione efficiente dei servizi

Dettagli

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

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1 MECCANISMI E POLITICHE DI PROTEZIONE 13.1 Protezione Obiettivi della Protezione Dominio di Protezione Matrice di Accesso Implementazione della Matrice di Accesso Revoca dei Diritti di Accesso Sistemi basati

Dettagli

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1 MECCANISMI E POLITICHE DI PROTEZIONE 13.1 Protezione Obiettivi della Protezione Dominio di Protezione Matrice di Accesso Implementazione della Matrice di Accesso Revoca dei Diritti di Accesso Sistemi basati

Dettagli

Regione Toscana. ARPA Fonte Dati. Manuale Amministratore. L. Folchi (TAI) Redatto da

Regione Toscana. ARPA Fonte Dati. Manuale Amministratore. L. Folchi (TAI) Redatto da ARPA Fonte Dati Regione Toscana Redatto da L. Folchi (TAI) Rivisto da Approvato da Versione 1.0 Data emissione 06/08/13 Stato DRAFT 1 Versione Data Descrizione 1,0 06/08/13 Versione Iniziale 2 Sommario

Dettagli

EXPLOit Content Management Data Base per documenti SGML/XML

EXPLOit Content Management Data Base per documenti SGML/XML EXPLOit Content Management Data Base per documenti SGML/XML Introduzione L applicazione EXPLOit gestisce i contenuti dei documenti strutturati in SGML o XML, utilizzando il prodotto Adobe FrameMaker per

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T1 B2 Significato e proprietà della OOP 1 Prerequisiti Concetto ed elementi della comunicazione Allocazione e deallocazione della memoria Compilazione di un programma Spazio

Dettagli

STRUTTURE DEI SISTEMI DI CALCOLO

STRUTTURE DEI SISTEMI DI CALCOLO STRUTTURE DEI SISTEMI DI CALCOLO 2.1 Strutture dei sistemi di calcolo Funzionamento Struttura dell I/O Struttura della memoria Gerarchia delle memorie Protezione Hardware Architettura di un generico sistema

Dettagli

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

I Thread. I Thread. I due processi dovrebbero lavorare sullo stesso testo I Thread 1 Consideriamo due processi che devono lavorare sugli stessi dati. Come possono fare, se ogni processo ha la propria area dati (ossia, gli spazi di indirizzamento dei due processi sono separati)?

Dettagli

Introduzione alla programmazione in C

Introduzione alla programmazione in C Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale

Dettagli

Gestione Rapporti (Calcolo Aree)

Gestione Rapporti (Calcolo Aree) Gestione Rapporti (Calcolo Aree) L interfaccia dello strumento generale «Gestione Rapporti»...3 Accedere all interfaccia (toolbar)...3 Comandi associati alle icone della toolbar...4 La finestra di dialogo

Dettagli

Progettazione : Design Pattern Creazionali

Progettazione : Design Pattern Creazionali Progettazione : Design Pattern Creazionali Alessandro Martinelli alessandro.martinelli@unipv.it 30 Novembre 2010 Progettazione : Design Pattern Creazionali Aspetti generali dei Design Pattern Creazionali

Dettagli

FPf per Windows 3.1. Guida all uso

FPf per Windows 3.1. Guida all uso FPf per Windows 3.1 Guida all uso 3 Configurazione di una rete locale Versione 1.0 del 18/05/2004 Guida 03 ver 02.doc Pagina 1 Scenario di riferimento In figura è mostrata una possibile soluzione di rete

Dettagli

GESTIONE INFORMATICA DEI DATI AZIENDALI

GESTIONE INFORMATICA DEI DATI AZIENDALI GESTIONE INFORMATICA DEI DATI AZIENDALI Alberto ZANONI Centro Vito Volterra Università Tor Vergata Via Columbia 2, 00133 Roma, Italy zanoni@volterra.uniroma2.it Rudimenti di programmazione Programming

Dettagli

Airone Gestione Rifiuti Funzioni di Esportazione e Importazione

Airone Gestione Rifiuti Funzioni di Esportazione e Importazione Airone Gestione Rifiuti Funzioni di Esportazione e Importazione Airone Funzioni di Esportazione Importazione 1 Indice AIRONE GESTIONE RIFIUTI... 1 FUNZIONI DI ESPORTAZIONE E IMPORTAZIONE... 1 INDICE...

Dettagli

MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico

MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico MANUALE MOODLE STUDENTI Accesso al Materiale Didattico 1 INDICE 1. INTRODUZIONE ALLA PIATTAFORMA MOODLE... 3 1.1. Corso Moodle... 4 2. ACCESSO ALLA PIATTAFORMA... 7 2.1. Accesso diretto alla piattaforma...

Dettagli

FIRESHOP.NET. Gestione completa degli ordini e degli impegni. Rev. 2014.3.1 www.firesoft.it

FIRESHOP.NET. Gestione completa degli ordini e degli impegni. Rev. 2014.3.1 www.firesoft.it FIRESHOP.NET Gestione completa degli ordini e degli impegni Rev. 2014.3.1 www.firesoft.it Sommario SOMMARIO Introduzione... 3 Gli ordini a fornitore... 5 Gli impegni dei clienti... 7 Evadere gli ordini

Dettagli

11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0

11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0 11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0 PAG. 2 DI 38 INDICE 1. PREMESSA 3 2. SCARICO DEL SOFTWARE 4 2.1 AMBIENTE WINDOWS 5 2.2 AMBIENTE MACINTOSH 6 2.3 AMBIENTE

Dettagli

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

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

Dettagli

Light CRM. Documento Tecnico. Descrizione delle funzionalità del servizio

Light CRM. Documento Tecnico. Descrizione delle funzionalità del servizio Documento Tecnico Light CRM Descrizione delle funzionalità del servizio Prosa S.r.l. - www.prosa.com Versione documento: 1, del 11 Luglio 2006. Redatto da: Michela Michielan, michielan@prosa.com Revisionato

Dettagli

Database. Si ringrazia Marco Bertini per le slides

Database. Si ringrazia Marco Bertini per le slides Database Si ringrazia Marco Bertini per le slides Obiettivo Concetti base dati e informazioni cos è un database terminologia Modelli organizzativi flat file database relazionali Principi e linee guida

Dettagli

Soluzione dell esercizio del 2 Febbraio 2004

Soluzione dell esercizio del 2 Febbraio 2004 Soluzione dell esercizio del 2 Febbraio 2004 1. Casi d uso I casi d uso sono riportati in Figura 1. Figura 1: Diagramma dei casi d uso. E evidenziato un sotto caso di uso. 2. Modello concettuale Osserviamo

Dettagli

Il descrittore di processo (PCB)

Il descrittore di processo (PCB) Il descrittore di processo (PC) Il S.O. gestisce i processi associando a ciascuno di essi un struttura dati di tipo record detta descrittore di processo o Process Control lock (PC) Il PC contiene tutte

Dettagli

Automazione Industriale (scheduling+mms) scheduling+mms. adacher@dia.uniroma3.it

Automazione Industriale (scheduling+mms) scheduling+mms. adacher@dia.uniroma3.it Automazione Industriale (scheduling+mms) scheduling+mms adacher@dia.uniroma3.it Introduzione Sistemi e Modelli Lo studio e l analisi di sistemi tramite una rappresentazione astratta o una sua formalizzazione

Dettagli

Sistemi Operativi. Processi GESTIONE DEI PROCESSI. Concetto di Processo. Scheduling di Processi. Operazioni su Processi. Processi Cooperanti

Sistemi Operativi. Processi GESTIONE DEI PROCESSI. Concetto di Processo. Scheduling di Processi. Operazioni su Processi. Processi Cooperanti GESTIONE DEI PROCESSI 4.1 Processi Concetto di Processo Scheduling di Processi Operazioni su Processi Processi Cooperanti Concetto di Thread Modelli Multithread I thread in diversi S.O. 4.2 Concetto di

Dettagli

Un sistema operativo è un insieme di programmi che consentono ad un utente di

Un sistema operativo è un insieme di programmi che consentono ad un utente di INTRODUZIONE AI SISTEMI OPERATIVI 1 Alcune definizioni 1 Sistema dedicato: 1 Sistema batch o a lotti: 2 Sistemi time sharing: 2 Sistema multiprogrammato: 3 Processo e programma 3 Risorse: 3 Spazio degli

Dettagli

CAPITOLO 7 - SCAMBIO DI MESSAGGI

CAPITOLO 7 - SCAMBIO DI MESSAGGI CAPITOLO 7 - SCAMBIO DI MESSAGGI Lo scambio di messaggi è una forma di comunicazione nel quale un processo richiede al sistema operativo di mandare dei dati direttamente ad un altro processo. In alcuni

Dettagli

15J0460A300 SUNWAY CONNECT MANUALE UTENTE

15J0460A300 SUNWAY CONNECT MANUALE UTENTE 15J0460A300 SUNWAY CONNECT MANUALE UTENTE Agg. 10/07/2012 R.00 Il presente manuale costituisce parte integrante ed essenziale del prodotto. Leggere attentamente le avvertenze contenute in esso in quanto

Dettagli

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 3 - Variabili Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di

Dettagli

13. Chain of Responsibility

13. Chain of Responsibility Chain of Responsibility 92 13. Chain of Responsibility (GoF pag. 223) 13.1. Descrizione Consente di separare il mittente di una richiesta dal destinario, in modo di consentire a più di un oggetto di gestire

Dettagli

Comune di San Martino Buon Albergo

Comune di San Martino Buon Albergo Comune di San Martino Buon Albergo Provincia di Verona - C.A.P. 37036 SISTEMA DI VALUTAZIONE DELLE POSIZIONI DIRIGENZIALI Approvato dalla Giunta Comunale il 31.07.2012 INDICE PREMESSA A) LA VALUTAZIONE

Dettagli

Libero Emergency PC. Sommario

Libero Emergency PC. Sommario Emergenza PC (Garantisce le funzionalità di base delle operazioni di prestito e restituzione in caso di problemi tecnici sulla linea o di collegamento con il server) Sommario 1. Emergency PC...2 2. Iniziare

Dettagli

COLLI. Gestione dei Colli di Spedizione. Release 5.20 Manuale Operativo

COLLI. Gestione dei Colli di Spedizione. Release 5.20 Manuale Operativo Release 5.20 Manuale Operativo COLLI Gestione dei Colli di Spedizione La funzione Gestione Colli consente di generare i colli di spedizione in cui imballare gli articoli presenti negli Ordini Clienti;

Dettagli