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