THREADS: thread del kernel vs. thread supportati dal kernel vs. thread a livello di utente?


9

Qualcuno sa qual è la differenza tra questi?

Mi sembra che i thread del kernel corrispondano al codice che esegue il kernel (intuitivamente), ma non sono sicuro degli altri due ...

Inoltre, lo standard pthreads sarebbe considerato a livello di utente e supportato dal kernel, dal momento che si accede a una libreria mentre il kernel esegue tutta la pianificazione / commutazione dei thread?

Risposte:


14

Il termine "thread del kernel" può essere utilizzato per fare riferimento a thread effettivi eseguiti interamente nello spazio del kernel oppure può fare riferimento ai thread dello spazio utente pianificati dal kernel. Il termine thread "supportati dal kernel" indica quest'ultimo, thread eseguiti nello spazio utente ma che sono facilitati dal kernel, il che di solito significa che il kernel li pianifica.

"Discussioni a livello di utente" di solito significa discussioni visibili nello spazio utente. Cioè, ciò che crei quando chiami la funzione "crea thread" dello standard di threading. In genere, il termine "thread a livello di utente" viene utilizzato per indicare un thread creato dal codice dell'applicazione indipendentemente da come viene implementato dal sistema. Può essere un thread di puro spazio utente con un supporto del kernel scarso o nullo oppure può essere un thread pianificato dal kernel.

Lo standard pthreads può essere implementato come thread dello spazio utente puro (in cui il kernel pianifica il processo e il processo pianifica i thread), thread supportati dal kernel (in cui il kernel pianifica direttamente i thread) o un approccio ibrido (in cui il kernel pianifica un thread a livello di kernel che quindi, nello spazio utente, pianifica un thread a livello utente). Lo standard non richiede alcun particolare mezzo di implementazione. L'implementazione più comune è il mapping da 1 a 1 in cui ogni thread a livello di utente ha un thread corrispondente pianificato dal kernel.


com'è l'implementazione su Linux?
Yati Sagade,

3
Su tutti i moderni sistemi Linux (2.6 kernel o successivi) che conosco, l'implementazione di threading predefinita del sistema è 1 a 1, ogni thread a livello utente ha un KSE corrispondente (entità di pianificazione del kernel - in sostanza, un thread pianificato dal Kernel Linux). Il thread creato con 'pthread_create' verrà programmato direttamente dal kernel. I sistemi moderni generalmente usano NPTL , i sistemi più vecchi utilizzavano i LinuxThreads : sono entrambi da 1 a 1.
David Schwartz,

"o un approccio ibrido (in cui il kernel pianifica un thread a livello di kernel che quindi, nello spazio utente, pianifica un thread a livello utente)." Ehi David, potresti spiegarlo di nuovo? Non sono sicuro di cosa stia succedendo ... Quando dici la mappatura 1-a-1 ti riferisci ai blocchi di controllo dei thread quando menzioni i thead a livello di kernel?
Templare oscuro,

Per 1 a 1 intendo che ogni volta che chiami "pthread_create", viene creato un nuovo contesto programmato dal kernel. In un approccio ibrido , il numero di contesti pianificati dal kernel è inferiore al numero di thread creati: il kernel pianifica uno di quei contesti e quindi il thread della libreria pianifica uno dei thread creati dall'applicazione.
David Schwartz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.