стек ядра для процесса Linux - PullRequest
22 голосов
/ 20 мая 2009

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

Ответы [ 4 ]

19 голосов
/ 20 мая 2009

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

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

12 голосов
/ 20 мая 2009

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

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

Этот ответ был отредактирован с учетом мудрости комментариев. Благодаря.

2 голосов
/ 11 апреля 2010

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

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

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

1 голос
/ 28 октября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...