i thread o “processi leggeri”

Transcript

i thread o “processi leggeri”
I THREAD O “PROCESSI
LEGGERI”
Processi (pesanti):




entità autonome con poche risorse condivise (si prestano poco alla
scrittura di applicazioni fortemente cooperanti)
Ogni processo può essere visto come Immagine (descrittore di
processo, Program counter, Stato dei registri, Codice, Dati ecc.) e
risorse possedute (file aperti, dispositivi di I/O ecc.)
Ogni processo ha un proprio spazio di indirizzamento (cioè due
processi non condividono nessuna area di memoria)
Ogni operazione di CONTEXT SWITCH (salvataggio del contesto del
processo che viene sospeso e ripristino di quello che inizia o
riprende la sua esecuzione) richiede tempo di CPU “sprecato”
(overhead)
Thread o processi leggeri (LWP Light Weight
Process)



Flusso di controllo che può essere attivato in parallelo
ad altri Thread nell’ambito di uno stesso processo
(nell’esecuzione dello stesso programma)
Segmento di codice (una funzione) che viene eseguito
in modo sequenziale all’interno di un processo
(pesante). Ogni thread viene eseguito in parallelo agli
altri thread mandati in esecuzione dallo stesso processo
e condividono lo spazio di indirizzamento e quindi le
strutture dati.
Multithreading : molteplicità di flussi in esecuzione
all’interno di un processo pesante.
Per evolvere parallelamente agli altri thread o processi
che si contendono la CPU i Thread mantengono
comunque un TCB (Thread Control Blok) che contiene

Un identificatore di Thead (ID)

Un Program counter

Un insieme di registri

Uno stato di esecuzione (running, ready, blocked)

Uno stack di esecuzione

Uno spazio di memoria per le variabili locali

NON HANNO una loro area dove è presente IL CODICE del
programma in quanto condividono quella del processo che li
genera così come ne condividono l’area DATI



l’utilizzo dei Thread offre la possibilità di sfruttare al
meglio architetture multiprocessore
Le operazioni di context switch sono più semplici e
veloci (condividendo i dati sono meno le informazioni da
memorizzare e ripristinare)
Un segmento di codice si dice thread-safe, se è in grado
di supportare l’esecuzione da parte di più thread,
garantendo che nessuno possa accedere a dati
inconsistenti (cioè durante il loro aggiornamento)
Creazione distruzione
processi
Allocazione, copia e deallocazione di grandi quantità di memoria
Richiedono solo la creazione di uno stack per il thread
Errore
può danneggiare altri non può danneggiare thread e l’intero processo altri processi
a cui appartiene
Codice
Un processo può modificare il proprio codice mediante il cambiamento di eseguibile
Condivisione
il codice è fissato e presente nella sezione text del processo cui appartiene
E’ automatica perchè tutti E’ onerosa e deve i thread condividono la essere implementata memoria del processo cui dal programmatore
appartengono
E’ garantita automaticamente Mutua esclusione
dall’isolamento dei vari processi
limitate dall’overhead Prestazioni
di gestione
Limitata dalla Concorrenza
difficoltà di comunicazione
Thread
Deve essere realizzata dal programmatore mediante semafori ecc.
elevate
elevate
JAVA runtime MS­Dos Processo engine singolo Thread Processo singolo singolo
Thread multipli per processo
UNIX Processi MACH,LINUX multipli Thread Processi multipli singolo per Thread multipli processo
per processo
User Level
Vengono implementati grazie ad apposite librerie (thread package)
che contengono funzioni per creare, terminare, sincronizzare,
effettuare lo scheduling ed il cambio di contesto (il nucleo gli
ignora e gestisce solamente i processi)
VANTAGGI:


Efficienza di gestione (tempi di switching molto ridotti non
richiedendo chiamate al kernel)
Possono essere implementati su qualsiasi S.O.(alto grado di
portabilità tra macchine e sistemi diversi)
SVANTAGGI:


Se un thread effettua una system call (ad es, per motivi di I/O)
oltre a sospendere se stesso provoca la sospensione del processo
che lo ha generato (quindi anche di tutti gli altri thread)
Non è possibile sfruttare il parallelismo fisico in architetture
multiprocessore(interni ad un processo
e quindi assegnati ad un
unico processore)
Kernel Level (Linux,Unix e Windows)
La gestione è affidata al kernel tramite chiamate di sistema, vengono
gestiti come tutti gli altri processi,schedulati, sospesi, risvegliati,
gli vengono assegnate risorse di sistema ecc.
VANTAGGI:


se un thread si sospende continuano ad evolversi altri thread
generati dallo stesso processo (sono tra loro schedulati in modo
autonomo)
In architetture multiprocessor si può sfruttare al massimo il
parallelismo fisico
SVANTAGGI:

Tempi lunghi impiegati dal kernel per il cambio di contesto, reso
ancora più complesso in quanto deve gestire sia processi che
thread
Soluzione mista (Solaris)
Permette di creare dei thread a livello utente che devono essere
preventivamente definiti a livello di kernel e lasciano all’utente le
politiche di scheduling e di sincronizzazione.
VANTAGGI:


se un thread si sospende questo non blocca necessariamente altri
thread generati dallo stesso processo.
Thread della stessa applicazione possono essere eseguiti in
parallelo su processori diversi.
Ciclo di vita di un Thread
Idle
Ready
Sleeping
Ranning
Blocked
Waiting
Dead
Utilizzo dei Thread



Permettono di organizzare l’esecuzione di lavori con attività
foreground (interattivo) e in background (lavoro nascosto)
Nei fogli elettronici vengono utilizzati per le procedure di
ricalcolo automatico, nei word processor per effettuare il
controllo ortografico del documento che si stà creando
Permettono di realizzare delle attività asincrone, quali le
operazioni di garbage collection nella gestione della RAM
oppure procedure di salvataggio automatico di dati (backup
schedulati)