Подтвердить что ты не робот

Стек ядра для процесса linux

Является ли стек ядра для общего процесса общим или существует отдельный стек ядра для каждого процесса? Если он отдельно для каждого процесса, где хранится этот указатель стека? В task_struct?

4b9b3361

Ответ 1

Существует только одна общая память ядра. В нем каждый процесс имеет свой собственный task_struct + стек ядра (по умолчанию 8K).

В контекстном переключении старый указатель стека сохраняется где-то, и фактический указатель стека делается так, чтобы указывать на вершину стека (или снизу в зависимости от архитектуры оборудования) нового процесса, который будет запущен.

Ответ 2

В этой старой статье говорится, что каждый процесс имеет свой собственный стек ядра. См. Комментарии к тому, почему это кажется очень хорошим дизайном.

Я попытался прочитать текущий источник, чтобы убедиться, но поскольку стек ядра "неявный", он не отображается в task_struct, Это упоминается в статье.

Этот ответ был отредактирован для включения мудрости из комментариев. Спасибо.

Ответ 3

В книге "Развитие ядра Linux" Роберта Лава есть хорошее объяснение о стеке ядра процесса.

И да, каждый процесс имеет свой собственный стек ядра, и если я не ошибаюсь, его указатель хранится в структуре thread_info. Но я не уверен в этом, и struct task_struct хранится в начале или в конце стека ядра процесса, в зависимости от архитектуры процессора.

Приветствия. Карлос Майолино

Ответ 4

Я думаю, что каждый процесс имеет свой собственный стек режима ядра. Драйвер выполняется в режиме ядра, процесс иногда блокируется при выполнении подпрограммы драйвера. и операционная система может планировать запуск другого процесса. Запланированный процесс может снова вызвать процедуру драйвера. Если стек ядра является общим, 2 процесса используют стек ядра, все будет замешано. Я озадачен этим вопросом в течение длительного времени. Сначала я думаю, что стек ядра является общим, некоторые книги говорят об этом. После того как я прочитал разработку ядра Linux и посмотрю код драйвера, я начинаю думать, что стек ядра не используется.