I THREAD O PROCESSI Processi (pesanti): LEGGERI 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 Errore Codice Condivisione Mutua esclusione Prestazioni Concorrenza processi Allocazione, copia e deallocazione di grandi quantità di memoria non può danneggiare altri processi Un processo può modificare il proprio codice mediante il cambiamento di eseguibile E onerosa e deve essere implementata dal programmatore E garantita automaticamente dall isolamento dei vari processi limitate dall overhead di gestione Limitata dalla difficoltà di comunicazione elevate elevate Thread Richiedono solo la creazione di uno stack per il thread può danneggiare altri thread e l intero processo a cui appartiene il codice è fissato e presente nella sezione text del processo cui appartiene E automatica perchè tutti i thread condividono la memoria del processo cui appartengono Deve essere realizzata dal programmatore mediante semafori ecc.
MS Dos Processo singolo Thread singolo UNIX Processi multipli Thread singolo per processo JAVA runtime engine Processo singolo Thread multipli per processo MACH,LINUX Processi multipli Thread multipli 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)