vuoi
o PayPal
tutte le volte che vuoi
Thread a livello kernel e thread a livello utente
SO2. La commutazione tra i thread non richiede l'intervento del nucleo.
Lo scheduling dei thread è indipendente da quello del nucleo.
Lo svantaggio del loro utilizzo è invece il fatto che le chiamate di sistema sono bloccanti e i vari thread non possono essere eseguiti parallelamente su diversi core di elaborazione. Inoltre non si sfrutta un eventuale parallelismo hardware.
Con i thread a livello kernel invece sono gestiti dal SO e le chiamate di sistema non sono bloccanti per l'intero processo, ma bloccano solo il thread che ha effettuato la chiamata. Permettono inoltre di eseguire i thread di uno stesso processo su diverse unità di elaborazione (non è che se ho 4 CPU vado 4 volte più veloce, in condizioni ottime ci si avvicina).
Nei thread a livello kernel il tempo di elaborazione della CPU è distribuito equamente per ogni thread (ogni thread riceve lo stesso tempo di CPU), mentre nei thread a livello utente ho che due processi A e B ricevono lo stesso tempo di CPU.
stesso tempomacchina, diviso equamente tra i processi (ogni processo riceve lo stessotempo di CPU).
Deve sempre esistere una relazione tra i thread a livello utente e quelli a livellokernel, e ci sono 3 opzioni di modelli di programmazione multithread:
- MODELLO DA MOLTI A UNO: molti thread a livello utente sono mappati inun singolo thread a livello kernel. Tuttavia, l’intero processo rimane bloccato nelmomento in cui un thread effettua una chiamata di sistema di tipo bloccante.Inoltre, poiché un solo thread alla volta può accedere al kernel, è impossibileeseguire vari thread parallelamente su diverse unità di elaborazione.
- MODELLO DA UNO A UNO: fa corrispondere un thread a livello utente ad unthread a livello kernel. In questo modo, se un thread effettua una chiamata disistema di tipo bloccante risulterà bloccato solo quel thread e non l’interoprocesso. Inoltre, più thread potranno essere eseguiti parallelamente su diversicore di elaborazione.
Lo svantaggio è che per ogni thread a livello utente dovrà essere creato un thread anche a livello kernel, che può sovraccaricare le prestazioni di un'applicazione (quindi molte realizzazioni di questo modello limitano il numero di thread supportabili dal sistema).
MODELLO DA MOLTI A MOLTI: fa corrispondere molti thread a livello utente ad un numero minore o uguale di thread a livello kernel. Se un thread invoca una chiamata di sistema di tipo bloccante, il kernel può schedulare un altro thread.
MODELLO A DUE LIVELLI: Simile al modello molti a molti, ma permette ad un particolare thread utente di essere associato ad un particolare thread del nucleo. Utile nel caso in cui fossero richieste prestazioni particolari per certi scopi.
9. Condizioni necessarie per il verificarsi di un deadlock
Esistono potenziali conflitti tra i processi che utilizzano risorse condivise. La maggior parte delle risorse prevede un utilizzo esclusivo (es. CD-ROM), ma non necessariamente i
deadlock coinvolgono dispositivi di I/O (es. database in rete). I deadlock possono verificarsi quando i processi ottengono accessi esclusivi a determinate "risorse" (dispositivi o oggetti software). Le risorse possono essere di diverso tipo, ma vengono comunemente classificate in due tipi diversi:- risorse "con prerilascio": possono essere tolte ai processi senza problemi (es. memoria, CPU)
- risorse "senza prerilascio": se vengono tolte ai processi si ha il fallimento dell'elaborazione (es. stampanti)