Существует ли стек ядра для каждого процесса?

#linux #stack #kernel

#linux #стек #ядро

Вопрос:

Существует ли стек ядра и стек пользовательского пространства для каждого процесса пользовательского пространства? Если оба стека существуют, должно быть 2 указателя стека для каждого процесса пользовательского пространства, верно?

Ответ №1:

В Linux каждая задача (пользовательское пространство или поток ядра) имеет стек ядра размером 8 КБ или 4 КБ, в зависимости от конфигурации ядра. Действительно, существуют отдельные указатели стека, однако в процессоре в любой момент времени присутствует только один; если выполняется пользовательский код, указатель стека ядра, который будет использоваться при исключениях или прерываниях, определяется сегментом состояния задачи, и если выполняется код ядра, указатель стека пользователя сохраняется в структуре контекста, расположенной в стеке ядра.

Ответ №2:

Каждый поток пользовательского пространства (не только процесс) имеет свой стек пользовательского пространства и стек пространства ядра. Пространство ядра имеет один percpu стека, и ISR также имеет свой отдельный стек.