Ваша цепочка вызовов ядра, и "нет"
Ядро linux само по себе является многопоточной программой, которая работает путем переключения стеков.
Итак, допустим, вы делаете read(0, space, 100);
или, может быть, просто c = getchar();
, который в конечном итоге превратится в read()
.
Когда Linux получит контроль, он начнет выполнять вызовы функций, естественно, используя стек ядра.Он будет выполнять вызовы в ядре все ниже и ниже, пока, наконец, не достигнет tty или сетевого уровня.
Но вы еще ничего не набрали!
Так что он просто переключается на другой процесс,тот, который действительно работает, и он оставляет все эти фреймы активации вызова функций в стеке.В конце концов вы что-то набираете, и ядро выясняет, что ваш процесс теперь работает, и когда он переключается обратно, снова переключая стеки, все эти вызовы функций, реализующие ваш read(2)
, теперь могут развернуться и в конечном итоге вернуться в режим пользователя.