Differenza tra thread a livello utente e kernel nel sistema operativo

Differenza tra thread a livello utente e kernel nel sistema operativo

Thread

In informatica, un thread è un processo leggero che può essere gestito in modo indipendente da uno scheduler. Migliora le prestazioni dell’applicazione attraverso il parallelismo. Thread condivide informazioni come segmento di codice, file aperti e segmento di dati con altri thread peer. I thread hanno i propri registri di sistema che contengono le sue variabili di lavoro correnti, uno stack che contiene la cronologia di esecuzione e il contatore che tiene traccia di quale istruzione eseguire successivamente.

I thread rappresentano un approccio software per migliorare le prestazioni del sistema operativo riducendo il sovraccarico. Il thread è equivalente a un processo classico. Esistono due tipi principali di thread, includono:

  • Thread a livello utente (thread gestiti dall’utente)
  • Thread a livello di kernel (thread gestiti dal sistema operativo che agiscono sul kernel, un core del sistema operativo).

Differenza tra thread a livello utente e kernel nel sistema operativo

Thread a livello utente

I thread a livello utente sono piccoli e molto più veloci dei thread a livello di kernel. Sono supportati direttamente dal sistema operativo. I thread a livello utente vengono implementati dagli utenti e il kernel non è a conoscenza dell’esistenza di questi thread. Gestisce questi thread come se fossero processi a thread singolo. L’area di applicazione del thread a livello utente non dispone di codice di gestione del thread.

Il thread a livello utente è anche chiamato thread di mapping molti-a-uno perché il sistema operativo mappa tutti i thread in un processo multithread a un singolo contesto di esecuzione. Il sistema operativo considera ogni processo multithread come una singola unità di esecuzione.

Thread a livello di kernel

I thread a livello di kernel vengono gestiti direttamente dal sistema operativo e la gestione dei thread viene eseguita dal kernel. Nel thread a livello di thread, non è presente codice di gestione dei thread nell’area dell’applicazione e più thread dello stesso processo possono essere pianificati su processori diversi nei thread a livello di kernel.

Poiché il kernel gestisce i thread, il kernel può pianificare un altro thread se un dato thread si blocca invece di bloccare l’intero processo. I thread del kernel sono in genere più lenti da creare e gestire rispetto ai thread utente; e il trasferimento del controllo da un thread a un altro all’interno dello stesso processo richiede un cambio di modalità al kernel.

Differenza tra thread a livello utente e thread a livello di kernel

BASE DI CONFRONTO FILETTATURA LIVELLO UTENTE KERNEL LEVEL THREAD
Descrizione Il supporto fornito a livello utente viene definito thread a livello utente .   Il supporto fornito dal kernel è indicato come thread a livello di kernel.  
Mappatura dei thread Il thread a livello utente è anche chiamato thread di mapping molti-a-uno perché il sistema operativo mappa tutti i thread in un processo multithread a un singolo contesto di esecuzione. Il sistema operativo considera ogni processo multithread come una singola unità di esecuzione.   I thread a livello di kernel supportano il mapping dei thread uno a uno. La mappatura richiede ogni thread utente con thread kernel. Il sistema operativo esegue questa mappatura.  
Esempi Esempi di librerie di thread utente includono: POSIX Pthreads, Mach C-thread e Solaris 2 UI-thread.   Esempi di thread a livello di kernel includono: Windows NT, Windows 2000, Solaris 2, BeOS e Tru64 UNIX (precedentemente UNIX digitale)  
Tempo cambio contesto Il tempo di cambio di contesto è inferiore.   Il tempo di cambio di contesto è più.  
Velocità  I thread a livello utente sono più veloci dei thread a livello di kernel.   I thread a livello di kernel sono più lenti dei thread a livello utente.  
Multithreading L’applicazione multithread non può sfruttare il multiprocessing.   Le routine del kernel stesse possono essere multithread.  
Supporto hardware Il cambio di contesto richiede il supporto hardware   È necessario il supporto hardware.  
Implementazione L’implementazione dei thread utente è semplice.   L’implementazione del thread del kernel è complicata.  
Sistema operativo Il livello utente può essere eseguito su qualsiasi sistema operativo.   I thread a livello di kernel sono specifici del sistema operativo.  
Codice dell’applicazione Il codice per creare e distruggere il thread, il passaggio dei messaggi, il trasferimento dei dati e la pianificazione dei thread è incluso nella libreria dei thread.   Il codice di gestione dei thread non è incluso nel codice dell’applicazione. È l’unica API per il thread del kernel. Il sistema operativo Windows utilizza questa funzione.  
Chiamate di sistema I thread a livello utente non richiamano il kernel per la decisione di pianificazione.   I thread sono costruiti e controllati da chiamate di sistema. Il sistema conosce lo stato di ogni thread.  
Spazio operativo Il thread a livello utente utilizza lo spazio per la pianificazione del thread. I thread sono trasparenti per il sistema operativo.   Il kernel esegue la pianificazione su base thread. Il supporto del kernel e la creazione del thread di gestione avviene solo nello spazio del kernel.  

Pubblicato da Vito Lavecchia

Lavecchia Vito Ingegnere Informatico (Politecnico di Bari) Email: [email protected] Sito Web: https://vitolavecchia.altervista.org

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *