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).
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. |