Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D La Corte in Rete
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Antonino Mazzeo » 20.Dai Processi ai Thread


Sommario

  • Processi e Thread
  • Thread al livello d’utente e al livello del nucleo
  • Modelli di programmazione multithread

Processi e Thread

  • L’astrazione di Processo incorpora due concetti importanti:
    • Concorrenza: ogni processo ha un flusso di controllo
    • Protezione: ogni processo definisce un proprio spazio di indirizzamento
  • Threads
    • Concetto chiave: separazione tra concorrenza e protezione
    • Un thread è un flusso di controllo sequenziale di un programma
    • Ha il suo insieme di registri, il suo stack, non ha una propria area heap e/o area dati
    • Un processo definisce lo spazio di indirizzamento che può essere condiviso da più threads

Thread

  • Vantaggi nell’uso dei thread:
    • La creazione/terminazione di un thread è molto più efficiente della creazione di un processo
    • La comunicazione tra threads è molto più semplice ed efficiente di quelle tra processi
    • Il Context switching tra threads ha decisamente un minor overhead di quello tra processi
  • Stati di un Thread
I diversi tipi di process/thread

I diversi tipi di process/thread

Stati di un thread

Stati di un thread


Thread al livello d’utente

  • Gestiti come uno strato separato sopra il Kernel, e realizzati tramite una libreria di funzioni per la creazione, lo scheduling e la gestione, senza alcun intervento diretto del nucleo
  • Vantaggi
    • Minore overhead per il context switch (che non richiede il passaggio in kernel mode);
    • Lo scheduler dei thread è indipendente da quello dei processi e le applicazioni sono portabili.
  • Svantaggi
    • Quando un thread invoca una system call (bloccante), tutti i thread di quel processo si bloccano;
    • In generale, nelle architetture multiprocessore, non c’è vantaggio nell’utilizzo del multithreading: il kernel assegna un processo per ogni processore.
Thread al livello d’utente

Thread al livello d'utente


Thread al livello Kernel e approccio combinato

  • Gestiti direttamente dal sistema operativo.
    • Il kernel gestisce le informazioni di contesto sia dei thread sia dei processi
    • Lo scheduling è a livello thread
  • Approcci combinati
    • Più thread al livello d’utente corrispondono a ad un numero inferiore o uguale di thread al livello del nucleo;
    • La creazione del thread avviene nello spazio utente;
    • Il grosso dello scheduling e sincronizzazione è fatta nello spazio utente (es. Solaris)
Approccio combinato

Approccio combinato


Modelli di programmazione multithread

  • Modello da molti a uno
    • Fa corrispondere molti thread al livello d’utente a un singolo thread al livello del nucleo.
    • Usato su sistemi che non gestiscono i thread al livello del nucleo.
  • Modello da uno a uno
    • Mette in corrispondenza ciascun thread del livello d’utente con un thread del livello del nucleo.
    • Esempi:Windows 95/98/NT/2000, OS/2
  • Modello da molti a molti
    • Mette in corrispondenza più thread del livello d’utente con un numero minore o uguale di thread del livello del nucleo.
    • Esempi: Solaris 2, Windows NT/2000

Prossima lezione

Esercitazione: Posix Threads

I materiali di supporto della lezione

P. Ancilotti, M.Boari, A. Ciampolini, G. Lipari, “Sistemi Operativi”, Mc-Graw-Hill (Cap. 2, par. 10)

W. Stallings, “Operating Systems : Internals and Design Principles (5th Edition) ”, Prentice Hall (Cap. 4)

Threads

  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion

Fatal error: Call to undefined function federicaDebug() in /usr/local/apache/htdocs/html/footer.php on line 93