#linux #stack #kernel
#linux #стек #ядро
Вопрос:
Существует ли стек ядра и стек пользовательского пространства для каждого процесса пользовательского пространства? Если оба стека существуют, должно быть 2 указателя стека для каждого процесса пользовательского пространства, верно?
Ответ №1:
В Linux каждая задача (пользовательское пространство или поток ядра) имеет стек ядра размером 8 КБ или 4 КБ, в зависимости от конфигурации ядра. Действительно, существуют отдельные указатели стека, однако в процессоре в любой момент времени присутствует только один; если выполняется пользовательский код, указатель стека ядра, который будет использоваться при исключениях или прерываниях, определяется сегментом состояния задачи, и если выполняется код ядра, указатель стека пользователя сохраняется в структуре контекста, расположенной в стеке ядра.
Ответ №2:
Каждый поток пользовательского пространства (не только процесс) имеет свой стек пользовательского пространства и стек пространства ядра. Пространство ядра имеет один percpu стека, и ISR также имеет свой отдельный стек.