2013-08-21 18 views
15

Quando creo più thread da un processo, ogni thread ha il proprio stack o è esso che condivide lo stack del processo padre. Cosa succede quando un thread effettua una chiamata di sistema? I thread mantengono anche i propri processi del kernel stack?Ogni thread ha il proprio stack?

+1

sì stack specifico per thread !, i valori globali sono condivisibili tra thread (locale non) –

+0

@GrijeshChauhan Cosa succede quando effettuiamo una chiamata di sistema da una discussione? –

+2

per esempio se chiami la chiamata di sistema 'open()' per aprire un file. usando 'int f = open()' allora of-course 'f' è locale per il thread. ma ricorda che i descrittori dei file sono condivisi tra i thread. Se si conosce il valore di 'f', è possibile utilizzare tale valore in thread diversi per accedere allo stesso file (non è necessario aprirlo di nuovo) –

risposta

9

Sì, i thread hanno i propri stack e il proprio stack di kernel (ad esempio linux).

Quando un thread effettua una chiamata di sistema, si intercetta nella modalità kernel (dalla modalità utente), si passano gli argomenti al kernel, gli argomenti vengono controllati, il kernel non deve fare (nel kernel stack), restituisce il valore finale al thread e si ritorna alla modalità utente.

+0

Come fa il kernel "w/e deve fare" senza uno stack? – avakar

+0

Mi chiarirò nella mia risposta – Joohwan

+2

Lo stack del kernel è solo una precauzione di sicurezza aggiunta a un modello preesistente. Stack multipli sono un prerequisito per il multithreading. Il kernel fornisce essenzialmente una versione parallela di ciò che sta accadendo nello spazio utente per impedire la fuoriuscita di dati sensibili. – Potatoswatter

Problemi correlati