Java Virtual Machine

Похожие документы
Java Virtual Machine. Indipendenza di java dalla macchina ospite. I threads in Java

Java threads (2) Programmazione Concorrente

Multithreading in Java. Fondamenti di Sistemi Informativi

GESTIONE DEI PROCESSI

Il costrutto monitor [Hoare 74]

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

Il costrutto monitor [Hoare 74]

Monitor. Introduzione. Struttura di un TDA Monitor

Telematica II 17. Esercitazione/Laboratorio 6

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

Esercitazioni 7 e 8. Bounded Buffer con sincronizzazione Java (1)

Java: Compilatore e Interprete

Ottava Esercitazione. introduzione ai thread java mutua esclusione

Programmazione concorrente in Java

Pronto Esecuzione Attesa Terminazione

Thread e Task. L20_MultiThread 2

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:

Lo scheduler di UNIX (1)

Gestione dei thread in Java LSO 2008

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

Programmazione concorrente in Java. Dr. Paolo Casoto, Ph.D

Un esercizio d esame. Flavio De Paoli

Il problema del produttore e del consumatore. Cooperazione tra processi

Terza Esercitazione. Unix - Esercizio 1. Unix System Call Exec Java Introduzione Thread

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

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

Il costrutto monitor

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

Esercizi sugli Oggetti Monitor

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

Parola chiave extends

Il Sistema Operativo

Capitolo 7: Sincronizzazione

Sistema Operativo. Fondamenti di Informatica 1. Il Sistema Operativo

Scheduling della CPU Simulazione in linguaggio Java

Sistemi Operativi Esercizi Sincronizzazione

FONDAMENTI di INFORMATICA L. Mezzalira

Esercitazione n 4. Obiettivi

Computazione multi-processo. Condivisione, Comunicazione e Sincronizzazione dei Processi. Segnali. Processi e Threads Pt. 2

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

I THREAD O PROCESSI LEGGERI Generalità

Il descrittore di processo (PCB)

SISTEMI OPERATIVI. Sincronizzazione in Java (Monitor e variabili condizione in Java)

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

Programmazione in Java Parte I: Fondamenti

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

Programmazione Orientata agli Oggetti in Linguaggio Java

Oggetti Lezione 3. aspetti generali e definizione di classi I

Programmare in Java. Olga Scotti

La Gestione delle risorse Renato Agati

Corso di Sistemi di Elaborazione delle informazioni

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

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

Esercizi della lezione 5 di Java

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

Il software di base comprende l insieme dei programmi predisposti per un uso efficace ed efficiente del computer.

Sistemi Operativi. Lezione 7 Comunicazione tra processi

ESERCIZIO 1 (b) Dove è memorizzato il numero del primo blocco del file? Insieme agli altri attributi del file, nella cartella che contiene il file.

Esercizi sulla definizione di classi (Fondamenti di Informatica 1 Walter Didimo) Soluzioni

Esercitazioni Ingegneria del So2ware 8 Threads. Giordano Tamburrelli tamburrelli@elet.polimi.it h@p://giordano.webfacdonal.com

Sistemi Operativi SCHEDULING DELLA CPU

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

Inizializzazione, Assegnamento e Distruzione di Classi

Introduzione alla programmazione Java. Dott. Ing. M. Banci, PhD

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

Esempio produttori consumatori. Primitive asincrone

progam ponteasensounicoalaternato ; type dir = ( nord, sud );

Algoritmi di scheduling

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

Modello dei processi. Riedizione delle slide della Prof. Di Stefano

I thread nel sistema operativo LINUX: Linuxthreads

Test di unità con JUnit4

Sistemi Operativi. Scheduling della CPU SCHEDULING DELLA CPU. Concetti di Base Criteri di Scheduling Algoritmi di Scheduling

Sistemi Operativi SCHEDULING DELLA CPU. Sistemi Operativi. D. Talia - UNICAL 5.1

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

SCHEDULATORI DI PROCESSO

Sincronizzazione e comunicazione tra processi in Unix. usati per trasferire ad un processo l indicazione che un determinato evento si è verificato.

Concetto di Funzione e Procedura METODI in Java

ARRAY E STRINGHE. G. Frosini Slide 1

Corso di Sistemi Operativi Ingegneria Elettronica e Informatica prof. Rocco Aversa. Raccolta prove scritte. Prova scritta

Con il pulsante Start si introducono palline che rimbalzano in un area di disegno fino a che non è terminato il loro ciclo di vita (1000 movimenti).

IL SISTEMA OPERATIVO

19. Introduzione al multi-threading

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

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

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Algoritmi di Ricerca. Esempi di programmi Java

Esercitazione E1 Scheduling, deadlock, monitor

Programmazione a Oggetti Lezione 10. Ereditarieta

Scheduling. Sistemi Operativi e Distribuiti A.A Bellettini - Maggiorini. Concetti di base

3. La sintassi di Java

Synchronized (ancora)

Транскрипт:

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 ospite Programmi java Programmi java Programmi java Java Virtual Machine per Windows Java Virtual Machine per linux Java Virtual Machine per unix windows linux unix

I threads in Java Ogni programma Java contiene almeno un singolo thread, corrispondente all esecuzione del metodo main() sulla JVM. E possibile creare dinamicamente nuovi thread attivando concorrentemente le loro esecuzioni all interno del programma. I threads Java sono oggetti che derivano dalla classe Thread fornita dal package java.lang.

Il metodo run della classe di libreria Thread definisce l insieme di statement Java che ogni thread (oggetto della classe) eseguirà concorrentemente con gli altri thread. Nella classe Thread l implentazione del suo metodo run è vuota. In ogni sottoclasse derivata da Thread deve essere ridefinito (override) il metodo run in modo da fargli eseguire ciò che è richiesto dal programma

class AltriThreads extends Thread { public void run () { <corpo del programma eseguito> <da ogni thread di questa classe> public class EsempioConDueThreads { public static void main (string[] args) { AltriThreads t1 = new AltriThread (); t1.start (); <resto del programma eseguito dal thread main>

La classe AltriThread (estensione di Thread) implenta i nuovi thread ridefinendo il metodo run. La classe EsempioConDueThreads fornisce il main nel quale viene creato il thread t1 come oggetto derivato dalla classe Thread. Per attivare il thread deve essere eseguito il metodo start() che invoca il metodo run() (il metodo run() non può essere chiamato direttamente, ma solo attraverso start()). JVM gestisce due thread concorrenti: il thread principale associato al main ed il thread t1.

Grafo di stato di un thread start() runnable terminazione del metodo run() new new dead riattivazione blocked sospensione

Priorità e scheduling Preemptive priority scheduling con priorità fisse (crescenti verso l alto). MIN-PRIORITY, MAX-PRIORITY: costanti definite nella classe thread. Ogni thread eredita, all atto della sua creazione, la priorità del processo padre. Metodo set-priority per modificare il valore della priorità

JVM esegue l algoritmo di scheduling: quando il thread correntemente in esecuzione esce dallo stato runnable (sospensione o terminazione); quando diventa runnable un thread a priorità più alta (preemption).

JVM non supporta l assegnazione della CPU per quanti di tempo (round robin). S.O. adotta round-robin: i thread di uguale priorità vengono gestiti round robin (anziché FIFO). S.O non adotta round-robin: è possibile simulare a programma tale comportamento. Metodo yeld() (cooperative multithreading). Trasparenza della JVM rispetto alla gestione dei quanti di tempo: potenziale problema per quanto riguarda la portabilià di applicazioni Java che adottano diversi criteri di scheduling

Sincronizzazione in java Modello ad ambiente globale: I threads di una applicazione condividono lo spazio di indirizzamento. Ogni tipo di interazione tra thread avviene tramite oggetti comuni. Interazione di tipo competitivo (mutua esclusione): meccanismo degli objects locks. Interazione di tipo cooperativo (scambio informazioni): meccanismo wait-notify.i

Mutua esclusione Ad ogni oggetto viene associato dalla JVM un lock (analogo ad un semaforo binario). E possibile denotare alcune sezioni di codice che operano su un oggetto come sezioni critiche tramite la parola chiave sinchronized. Il compilatore inserisce : un prologo in testa alla sezione critica per l acquisizione del lock associato all oggetto. un epilogo alla fine della sezione critica per rilasciare il lock.

Con riferimento ad un oggetto x si può definire un blocco di statement come una sezione critica nel seguente modo (synchronized block): synchronized (oggetto x) <sequenza di statement>;. Object mutexlock= new Object;.. public void M( ) { <sezione di codice non critica>; synchronized (mutexlock){ < sezione di codice critica>; <sezione di codice non critica>;

lock associato a mutex lock: libero: il thread può eseguire la sezione critica occupato: il thread viene sospeso dalla JVM in una coda associata a mutex lock. Termine della sezione critica: non ci sono thread in attesa: il lock viene reso libero (JVM). ci sono thread in attesa: il lock rimane occupato e viene scelto uno di questi(jvm).

synchronized block esecuzione del blocco mutuamente esclusiva rispetto: - ad altre esecuzioni dello stesso blocco - all esecuzione di altri blocchi sincronizzati all interno dello stesso oggetto

Entry set di un oggetto Object ob t 1 lock sinchronized (ob){ ; a) lock libero t 2 t 3 lock Object ob sinchronized (ob){ ; t 1 a) lock occupato

Mutua esclusione tra i metodi di una classe public class intvar { private int i: 0; public synchronized void incrementa ( ) { i ++; public synchronized void decrementa ( ) { i--; Quando un metodo viene invocato per operare su un oggetto della classe, l esecuzione del metodo avviene in mutua esclusione utilizzando il lock dell oggetto.

Sincronizzazione diretta wait set: coda di thread associata ad ogni oggetto, inizialmente vuota. I thread entrano ed escono dalla coda utilizzando i metodi wait ( ) e notify ( ). wait e notify possono essere invocati da un thread solo all interno di un blocco sincronizzato o di un metodo sincronizzato (possesso del lock dell oggetto)

wait ( ) comporta il rilascio del lock, la sospensione del thread ed il suo inserimento in wait set. notify ( ) comporta l estrazione di un thread da wait set ed il suo inserimento in entry set. notifyall comporta l estrazione di tutti i thread da wait set ed il loro inserimento in entry set. notify e notifyall non provocano il rilascio del lock, i thread risvegliati devono attendere. Il rilascio del lock avviene al completamento del blocco o del metodo sincronizzato da parte del thread che ha eseguito la notify.

public class Mailbox{ private int contenuto; private boolean pieno=false; public synchronized int preleva ( ) { while (pieno= = false) { wait ( ); pieno= false notify ( ); return contenuto; public synchronized void deposita (int valore) { while (pieno= = true) { wait ( ); contenuto=valore; pieno= true; notify ( );

public class Mailbox { private int[]contenuto; private int contatore, testa, coda; public mailbox(){ contenuto = new int[n]; contatore = 0; testa = 0; coda = 0; public synchronized int preleva (){ int elemento; while (contatore == 0){ wait(); elemento = contenuto[testa]; testa = (testa + 1)%N; --contatore; notifyall(); return elemento; public synchronized void deposita (int valore){ while (contatore == N) { wait(); contenuto[coda] = valore; coda = (coda + 1)%N; ++contatore; notifyall();

Semafori in Java Java non supporta i semafori, ma possono essere facilmente costruiti mediante i meccanismi di sincronizzazione standard. Le primitive P e V (wait e signal sui semafori) si possono ottenere dichiarandole come i syncronized methods all interno della classe semaforo.

public class Semaphore { private int valore; public semaphore (int v) { valore=v public synchronized void P( ) { while (valore= = 0) { wait( ); valore - - 1; public synchronized void V( ) { ++valore; notify;

Monitor in Java La mutua esclusione delle procedure del monitor può essere ottenuta dichiarando i metodi come syncronized. Non esistono le variabili condizione. Non è cioè possibile per un thread attendere per una specifica condizione. Quando un thread è risvegliato da una notify o notify-all non riceve alcuna informazione sul perché è stato riattivato. Viene utilizzata la semantica signal and continue. Il thread segnalato può riacquisire il controllo del monitor solo se il thread che ha eseguito notify esce dal monitor o si è bloccato.