Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 6 1 Programmi concorrenti: quanto è lungo un millisecondo? In un normale personal computer.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

INFORMATICA Altre Istruzioni di I/O
CONCLUSIONE - Nucleo (o Kernel) Interagisce direttamente con lhardware Interagisce direttamente con lhardware Si occupa dellesecuzione.
Il Sistema Operativo Il Sistema Operativo fa parte del software di base; e` costituito da un insieme di programmi che interagiscono e cooperano per: gestire.
Costruttori e Distruttori
Java: programmazione concorrente con condivisione di memoria
1 Processi e Thread Processi Thread Meccanismi di comunicazione fra processi (IPC) Problemi classici di IPC Scheduling Processi e thread in Unix Processi.
1 Semantica Operazionale di un frammento di Java: lo stato.
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Time Sharing Il termine “Time Sharing” proviene dall'inglese e significa letteralmente “partizione di tempo”. Questa è una tecnica sviluppatasi negli.
Scheduling in Linux (Kernel 2.6)
Il Software: Obiettivi Programmare direttamente la macchina hardware è molto difficile: lutente dovrebbe conoscere lorganizzazione fisica del computer.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Laboratorio di Linguaggi lezione IV Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
Soluzione Esercizio - Classe Vettore
Gestione di Progetti Software 2 (A.A. 2004/2005) - Lezione 2 1 JAVA: obiettivi di progetto del linguaggio Nota storica: Il linguaggio JAVA (inizialmente.
Gestione dei Progetti Software 2 (a.a. 2004/05) - Lezione 3 1 JAVA e Internet: il World Wide Web Internet: milioni di computer collegati fra di loro attraverso.
Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il Contratto INTERFACCIA E REALIZZAZIONE Che cosa realizza una.
Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4 1 Sulla realizzazione dellereditarietà 4 Ereditarietà: statica / dinamica 4 Binding: statico.
Lezione 4: Costrutti Condizionali Prof. Raffaele Montella.
I Thread.
Selezione (=scelta) con “if-else”
INFORMATICA Altre Istruzioni di I/O. © Piero Demichelis 2 Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni.
Sincronizzazione fra thread
Sistemi Operativi SCHEDULING DELLA CPU.
Sistemi Operativi GESTIONE DEI PROCESSI.
Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo.
Le funzioni a tempo di esecuzione
OGGETTI COMPOSTI Una classe può contenere riferimenti a altre classi (o anche a se stessa): public class Orologio { Counter ore, minuti; } Loggetto Orologio.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
INTRODUZIONE l sistema operativo è il primo software che lutente utilizza quando accende il computer; 1)Viene caricato nella memoria RAM con loperazione.
I Metodi in Java Il termine "metodo" è sinonimo di "azione". Quindi, affinché un programma esegua qualche istruzione, deve contenere metodi.
La schedulazione dei processi
Programmazione concorrente
1 Lucidi delle esercitazioni di Sistemi di Elaborazione in Rete Università degli Studi della Calabria Corso di Laurea in Ingegneria Gestionale A.A. 2003/2004.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
I metodi F. Bombi Campi e metodi Abbiamo visto che una classe può contenere – Campi – Metodi stato I campi sono utilizzati per memorizzare.
Threads.
Informatica Lezione 7 Scienze e tecniche psicologiche dello sviluppo e dell'educazione (laurea triennale) Anno accademico:
Concorrenza 1 Conto corrente Nella famiglia Giambietti non ci sono grossi problemi economici. Infatti il padre, Enea, di professione artista free-lance,
JAVA Per iniziare. Verificare installazione javac –version java –version Cercare i files e sistemare eventualmente il path.
Una "vera" classe.. ..un esempio pratico: la calcolatrice
1 Gestione del Processore (Scheduling). 2 Scheduling dei processi È l’attività mediante la quale il sistema operativo effettua delle scelte tra i processi,
Gestione del Processore (Scheduling)
Programmazione ad oggetti
Corso JAVA Lezione n° 03 Istituto Statale di Istruzione Superiore “F. Enriques”
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Informatica Lezione 5 Scienze e tecniche psicologiche dello sviluppo e dell'educazione (laurea triennale) Anno accademico:
Università di Torino – Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a prof. Viviana Bono Blocco 7 – Array.
Gestione del processore (Scheduler)
Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
Gestione dei thread in Java
1 Processi e Thread Meccanismi di IPC (2) Problemi classici di IPC.
Informatica Lezione 8 Scienze e tecniche psicologiche dello sviluppo e dell'educazione Anno accademico:
Ingegneria del software Modulo 1 -Introduzione al processo software Unità didattica 3 - Modelli di fase d’analisi Ernesto Damiani Università degli Studi.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
1 Elementi di programmazione concorrente in Java: i threads.
Informatica Generale Marzia Buscemi
IL NUCLEO Avvio e terminazione dei processi Assegnazione della CPU ai diversi processi Sincronizzazione tra i processi Sincronizzazione dei processi con.
Priorità e Sincronizzazione tra Threads. Priorità e preemption Java non garantisce la preemption Lo scheduling avviene in base all’algortimo Highest Priority.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
13/08/02Input 1 Interagire con il computer Da tastiera Da riga di comando Funzioni di conversione.
Scheduler e politiche di Marco Arcamone.
Input in Java. Uso Scanner Un oggetto per la lettura dalla tastiera Piuttosto, per rappresentare la tastiera del nostro calcolatore useremo un oggetto.
Metodi in Java. Note Identificazione input: (il raggio è un numero reale !!!) Identificazione delle operazioni necessarie al calcolo Area=r*r*PI Circonferenza=2*r*PI.
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi Complessità e Trasportabilità Lezione n°3.
IL NUCLEO Le funzioni del nucleo sono: Avvio e terminazione dei processi Assegnazione della CPU ai diversi processi Sincronizzazione tra i processi Sincronizzazione.
Transcript della presentazione:

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 6 1 Programmi concorrenti: quanto è lungo un millisecondo? In un normale personal computer odierno, il processore può eseguire centinaia di migliaia di istruzioni in un solo millisecondo Il processore può rimanere inattivo (idle) per intervalli di tempo molto lunghi in attesa che succeda qualcosa come: - lutente prema un tasto - vengano trasferiti dati da un hard disk - venga caricato il prossimo frame di una animazione Un programma altamente interattivo lascia il processore idle per il 99% del tempo Programmare con threads significa anche utilizzare meglio le risorse del computer

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 6 2 Eseguire un programma concorrente: lo scheduler Lo SCHEDULER è un componente del sistema run-time di JAVA che Determina quale thread debba essere eseguito in un dato momento Supponiamo che un programma in esecuzione abbia i threads a, b, c, d, di cui: a e b sono eseguibili, c è effettivamente in esecuzione, e d è sospeso in attesa di operazioni di I/O - c esegue una sleep(3) lo scheduler manda in esecuzione a o b - a va in esecuzione - a richiede una operazione di I/Olo scheduler manda in esecuzione b - b va in esecuzione e terminail processore è idle finchè almeno uno fra a, c o d ritorna eseguibile

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 6 3 Scheduling di trame e priorità Priorità: ogni thread ha assegnata una priorità, che regola lassegnazione alle trame della risorsa processore Su di un computer a N processori, solitamente gli N threads di maggiore priorità che non siano bloccati in attesa di un notify, vanno effettivamente in esecuzione Altri threads con la stessa priorità oppure quelli con priorità più bassa attendono normalmente che quelli di priorità più alta terminino oppure che siano bloccati Per avere controllo sulle priorità dei thread, JAVA fornisce i metodi getPriority( )setPriority( )yield( ) e le costanti MIN_PRIORITYNORM_PRIORITYMAX_PRIORITY

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 6 4 Scheduling: quando e come usare le priorità Trame corrispondenti a processi continui --> BASSA PRIORITA Trame corrispondenti a eventi rari --> ALTA PRIORITA Esempio: Screen saver In una applicazione abbiamo un thread che riceve input dalla tastiera e visualizza i risultati, mentre un secondo thread realizza uno screen saver SE LO SCREEN SAVER E ATTIVO, QUALUNQUE TASTO PREMUTO DEVE AVERE EFFETTO IMMEDIATO STOPPANDO LO SCREEN SAVER, CHE QUINDI DOVRA AVERE PRIORITA PIU BASSA

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 6 5 Sincronizzazione Accedere concorrentemente ai dati comuni in maniera sicura: bloccare un oggetto Metodi synchronized class Account { private double saldo; public Account (double somma_iniz) { saldo = somma_iniz; } public synchronized double getSaldo ( ) { return saldo; } public synchronized void deposito (double somma) { saldo += somma; } public synchronized void trasferisci (Account conto, double somma) { saldo -= somma; conto.deposito(somma); }

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 6 6 Sincronizzazione (continua) Il campo saldo deve essere privato per garantire la consistenza dei dati Il costruttore Account non è sincronizzato dato che può essere eseguito solamente alla creazione delloggetto Sono necessari altri meccanismi di sincronizzazione se si vuole imporre un ordine preciso tra due trame concorrenti nellaccesso ai dati comuni class Account { private double saldo; public Account (double somma_iniz) { saldo = somma_iniz; } public synchronized double getSaldo ( ) { return saldo; } public synchronized void deposito (double somma) { saldo += somma; }

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 6 7 Sincronizzazione (continua) Non è affatto detto che loggetto bloccato sia poi effettivamente usato allinterno della istruzione sincronizzata public static void abs (int[ ] values) { synchronized (values) { for (int i = 0; i < values.length; i++) { if (values[i] <0) values[i] = - values[i]; } Istruzioni synchronized: bloccare un oggetto durante lesecuzione di una istruzione synchronized (expression) statement LOGGETTO RISULTANTE VIENE BLOCCATO DURANTE LESECUZIONE DI statement

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 6 8 Classi non sincronizzate in programmi multithreaded Soluz.1: Creare una sottoclasse ridefinendo ogni metodo come segue: synchronized metodo (parametri) { super(parametri); } Soluz.2: Usare i metodi della classe non synchronized in istruzioni synchronized Problema: come fare ad usare in maniera consistente in una applicazione multithreaded una classe che non è stata progettata come synchronized ?

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 6 9 Comunicazione fra trame: wait e notify wait() e notify() sono metodi della classe Object che possono essere chiamati solamente dallinterno di codice sincronizzato wait( ) rilascia atomicamente il blocco sulloggetto e arresta la trama mettendola in attesa notify( ) sveglia la trama (ovvero, una delle trame) in attesa sullo stesso oggetto notifyAll( ) sveglia tutte le trame in attesa sullo stesso oggetto

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 6 10 wait e notify (esempio) class Risorse { int quanti; public synchronized void produci ( ) { quanti++; notify( ); } public synchronized void consuma ( ) { while (quanti == 0) wait ( ); quanti--; }

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 6 11 Problemi di Deadlocks Se abbiamo due threads T1 e T2 e due oggetti O1 e O2 su cui effettuare la sincronizzazione, può accadere che: - T1 blocca O1 - T2 blocca O2 - T1 si arresta in attesa dello sblocco di O2 - T2 si arresta in attesa dello sblocco di O1 -nulla può proseguire e lapplicazione è bloccata indefinitamente: deadlock

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 6 12 Deadlock in generale Loggetto O1 esegue un metodo sincronizzato che invoca un metodo sincronizzato su O2, che a sua volta invoca un metodo sincronizzato.... … su On che infine invoca un metodo sincronizzato su O1 O1 O2 On m1( ) m2( ) m3( ) m n ( ).... m n+1 ( ) JAVA non ha alcun meccanismo per scoprire un deadlock, né potenziale (cioè in fase di compilazione), né effettivo (a run-time) LA CORRETTEZZA DEI PROGRAMMI CONCORRENTI È RESPONSABILITÀ ESCLUSIVA DEL PROGRAMMATORE

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 6 13 Deadlocks: un esempio class Trasferimento extends Thread { private Account conto1; private Account conto2; private double importo; public Trasferimento (Account c1, Account c2, double quanto) { conto1 = c1; conto2 = c2; importo = quanto; } public void run ( ) {// trasferisci() è un metodo sincronizzato!! conto1.trasferisci (conto2, importo); } public static void main (String[ ] args) { double saldo1 = Integer.parseInt (args[1]); double saldo2 = Integer.parseInt (args[3]); Account c1 = new Account (args[0], saldo1); Account c2 = new Account (args[2], saldo2); new Trasferimento (c1, c2, 1000).start(); new Trasferimento (c2, c1, 2000).start(); }

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 6 14 Deadlocks: un esempio class Account {..... public synchronized void trasferisci (Account c2, double quanto) { synchronized (c2) { c2.deposito(quanto); saldo -= quanto; }

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 6 15 Fine dellesecuzione di una trama: gli interrupt QUANDO TERMINA LESECUZIONE DI UNA TRAMA? Il metodo run( ) del thread termina Il thread riceve un messaggio di stop( ) dallesterno e muore immediatamente Il thread riceve dallesterno un messaggio di interrupt( ) e decide di eseguire stop( ) volontariamente... thread2.interrupt( );... while (!isInterrupted( )) { // fa qualcosa } stop( );... thread1 thread2

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 6 16 Attesa del termine di una trama: join( ) Se una trama t1 manda ad unaltra trama t2 il messaggio t2.join( ), lesecuzione di t1 viene sospesa fino a che t2 non è terminata class CalcThread extends Thread { private double result; public void run ( ) { calculate( ); } public double getResult ( ) { return result; } public void calculate ( ) { // calcola il valore di result } class ShowJoin { public static void main (String[ ] args) { CalcThread calc = new CalcThread( ); calc.start( ); faQualcosaAltro( ); try { calc.join( ); System.out.println(risultato = + calc.getResult( )); } catch (InterruptedException e) { System.out.println(Nessun risultato); }

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 6 17 Trame di tipo daemon e user Di solito le trame create da un programma sono di tipo user, e la applicazione termina quando tutte le trame user attivate terminano E possibile trasformare una trama in daemon con il messaggio setDaemon(true), mentre il metodo getDaemon( ) testa lo stato daemon/user di una trama Se una trama daemon crea altre trame, queste saranno anchesse di tipo daemon e il loro stato non potrà essere mutato