2013-08-21 2 views
15

Когда я создаю несколько потоков из процесса, то каждый поток имеет свой собственный стек, или они разделяют стек своего родительского процесса. Что происходит, когда поток выполняет системный вызов? Связаны ли потоки с собственным стеком ядра, например с процессами?Имеет ли каждый поток свой собственный стек?

+1

yes thread specific stack !, глобальные значения являются общими для потоков (local not) –

+0

@GrijeshChauhan Что происходит, когда мы делаем системный вызов из потока? –

+2

, например, если вы вызываете 'open()' системный вызов для открытия файла. используя 'int f = open()' then of course 'f' является локальным для потока. но помните, что файловые дескрипторы разделены между потоками. Если вы знаете значение 'f', вы можете использовать это значение в другом потоке для доступа к тому же файлу (вам не нужно открывать его снова) –

ответ

9

Да нити имеют свои собственные стеки и собственные стеки ядра (например, linux).

Когда поток выполняет системный вызов, вы попадаете в режим ядра (из пользовательского режима), вы передаете аргументы в ядро, аргументы проверяются, ядро ​​делает это/стек), возвращает окончательное значение обратно в поток, и вы возвращаетесь в пользовательский режим.

+0

Как ядро ​​«w/e нужно делать» без стека? – avakar

+0

Я уточню в своем ответе – Joohwan

+2

Стек ядра - это только меры предосторожности, добавленные к существующей модели. Несколько стеков являются обязательным условием многопоточности. Ядро по существу обеспечивает параллельную версию того, что происходит в пользовательском пространстве, чтобы предотвратить утечку конфиденциальных данных. – Potatoswatter

Смежные вопросы