Estratto del documento

Esercitazioni ambienti di sistemi operativi

Java

Java è un linguaggio di programmazione general-purpose, concorrente, basato su classi e orientato agli oggetti. Il compilatore converte il codice sorgente Java in un codice intermedio detto bytecode. È tipizzato staticamente (bisogna dichiarare il tipo di una variabile).

Python

Python è un linguaggio interpretato general-purpose. L’interprete converte il codice sorgente Python in codice macchina riga per riga. I tipi dei dati sono dinamici, non è necessario dichiararli.

Definizione di programma e processo

Un programma è un’entità passiva, come il contenuto di un file memorizzato sul disco. Il processo può essere definito come un programma in esecuzione:

  • Esegue le proprie istruzioni in modo sequenziale.
  • È un’entità attiva, con un program counter che specifica l’attività attuale (ovvero, quale sia la prossima istruzione da eseguire) ed un insieme di risorse associate.

Thread

Detto lightweight process, è un flusso sequenziale di esecuzione di istruzioni all’interno di un programma/processo. In un programma si possono far partire più thread che sono eseguiti concorrentemente. Tutti i thread eseguono all’interno del contesto di esecuzione di un solo processo, ovvero condividono le stesse variabili del programma.

Ciclo di vita di un Thread Java

  • New: subito dopo l’istruzione new le variabili sono state allocate e inizializzate; il thread è in attesa di passare nello stato Runnable.
  • Runnable: il thread è in esecuzione o in coda di attesa per ottenere l’utilizzo della CPU.
  • Not Runnable: il thread non può essere messo in esecuzione dallo scheduler. Entra in questo stato quando è in attesa di operazioni di I/O, oppure dopo l’invocazione del metodo sleep(), o del metodo wait(), che verrà discusso in seguito.
  • Dead: al termine dell’esecuzione del suo metodo run().

Thread in Java

Tutti i programmi Java comprendono almeno un thread. Anche un programma costituito solo dal metodo main viene eseguito come un singolo thread. Java fornisce strumenti che consentono di creare e manipolare thread aggiuntivi nel programma.

La Java Virtual Machine (JVM) è in grado di eseguire una molteplicità di thread su una singola CPU. Lo scheduler della JVM sceglie il thread in stato Runnable con priorità più alta; se più thread in attesa di eseguire hanno uguale priorità, la scelta dello scheduler avviene con una modalità ciclica (round-robin).

Il thread messo in esecuzione dallo scheduler viene interrotto se e solo se:

  • Il metodo run termina l’esecuzione.
  • Il thread esegue yield(), indicando allo scheduler che il thread corrente è disposto a fornire l'uso corrente di un processore (metodo statico).
  • Un thread con priorità più alta diventa Runnable.
  • Il quanto di tempo assegnato si è esaurito.

Implementazione di thread in Java

Esistono due modi per implementare thread in Java:

  • Definire una sottoclasse della classe Thread (più facile da usare in applicazioni semplici, ma limitato).
  • Definire una classe che implementa l’interfaccia Runnable.

Thread come sottoclasse di Thread

  • Si definisce una nuova classe che estende la classe Thread e che ridefinisce il metodo run() della classe Thread.
  • Si crea un’istanza della sottoclasse tramite new.
  • Si chiama il metodo start() sull’istanza creata. Questo determina l’invocazione del metodo run() dell’oggetto.

N.B.: L’invocazione diretta del metodo run() non crea un nuovo thread.

Thread come implementazione di Runnable

  • Si definisce una nuova classe che implementa l’interfaccia Runnable e che implementa il metodo run() dell’interfaccia Runnable.
  • Si crea un’istanza della classe tramite new.
  • Si crea un’istanza della classe Thread, passando al suo costruttore un riferimento all’istanza della nuova classe definita.
  • Si chiama il metodo start() sull’istanza della classe Thread creata, determinando l’invocazione del metodo run() dell’oggetto Runnable associato.

Classe Thread

Costruttori

  • Thread(): crea un nuovo oggetto Thread.
  • Thread(String name): crea un nuovo oggetto Thread con nome name.
  • Thread(Runnable target): crea un nuovo oggetto Thread a partire dall’oggetto target.
  • Thread(Runnable target, String name): crea un nuovo oggetto Thread con nome name a partire dall’oggetto target.
Anteprima
Vedrai una selezione di 4 pagine su 12
Appunti Esercitazione di Sistemi Operativi Pag. 1 Appunti Esercitazione di Sistemi Operativi Pag. 2
Anteprima di 4 pagg. su 12.
Scarica il documento per vederlo tutto.
Appunti Esercitazione di Sistemi Operativi Pag. 6
Anteprima di 4 pagg. su 12.
Scarica il documento per vederlo tutto.
Appunti Esercitazione di Sistemi Operativi Pag. 11
1 su 12
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher stefano-brusco2001 di informazioni apprese con la frequenza delle lezioni di Sistemi operativi e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università della Calabria o del prof Talia Domenico.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community