Является ли стек ядра для общего процесса общим или существует отдельный стек ядра для каждого процесса? Если он отдельно для каждого процесса, где хранится этот указатель стека? В task_struct?стек ядра для процесса linux
ответ
Существует только одна общая память ядра. В нем каждый процесс имеет свой собственный task_struct + стек ядра (по умолчанию 8K).
В контекстном переключателе старый указатель стека сохраняется где-то, а фактический указатель стека указывается на вершину стека (или внизу в зависимости от аппаратной архитектуры) нового процесса, который будет запущен.
This old article говорит, что каждый процесс имеет свой собственный стек ядра. См. Комментарии к тому, почему это кажется очень хорошим дизайном.
Я пробовал reading the current source, чтобы убедиться, но так как стек ядра «неявный», он не отображается в task_struct
. Об этом говорится в статье.
Этот ответ был отредактирован для включения мудрости из комментариев. Благодарю.
Я серьезно сомневаюсь, что это можно изменить. Стек ядра - это не общее пространство, где системные вызовы могут помещать свои данные. Если вы разделите их между процессами, несколько подпрограмм ядра могут использовать один и тот же стек одновременно -> повреждение данных. –
Я бы подумал, что каждому процессу нужен свой собственный стек ядра, потому что несколько разных процессов могут одновременно выполнять системные вызовы, и вы не хотите, чтобы их путали. –
Каждый процесс имеет свой собственный стек ядра, и каждый стек ядра имеет связанный с ним процесс. Он никогда не менялся. Вот почему в «ps» есть какая-то псевдопроцессная вещь. –
Книга «Развитие ядра Linux» Роберта Лава имеет хорошее объяснение о стеке ядра процесса.
И да, каждый процесс имеет свой собственный стек ядра, и если я не ошибаюсь, его указатель хранится в структуре thread_info. Но я не уверен в этом, и struct task_struct хранится в начале или в конце стека ядра процесса, в зависимости от архитектуры процессора.
Cheers. Carlos Maiolino
Начиная с ядра Linux 2.6 структура 'thread_info' хранится в конце стека ядра каждого процесса, а не структуры task_struct. Строка 'thread_info' содержит указатель на структуру' task_struct' –
Я думаю, что каждый процесс имеет свой собственный стек режима ядра. Драйвер выполняется в режиме ядра, процесс иногда блокируется при выполнении подпрограммы драйвера. и операционная система может планировать запуск другого процесса. Запланированный процесс может снова вызвать процедуру драйвера. Если стек ядра является общим, 2 процесса используют стек ядра, все будет замешано. Я озадачен этим вопросом в течение длительного времени. Сначала я думаю, что стек ядра является общим, некоторые книги говорят об этом. После того как я прочитал разработку ядра Linux и посмотрю код драйвера, я начинаю думать, что стек ядра не используется.
- 1. Создание процесса Linux: стек пользовательского режима
- 2. Назначение ядра процессора для процесса - Linux
- 3. Модуль ядра Linux для мониторинга определенного процесса
- 4. Обнаружение процесса создания в пространстве ядра Linux
- 5. цикла по родителям процесса, Linux ядра
- 6. Модуль ядра Linux копирует .text сегмент процесса
- 7. Идентификация API ядра linux-процесса/обслуживания
- 8. Состояние процесса linux при сбрасывании ядра
- 9. Имеет ли DCE собственный стек ядра linux или использует ли Linux-стек хост-машины?
- 10. Получить стек backtrace работающего процесса
- 11. Карта памяти процесса (Linux Windows)
- 12. стек ядра и стек приложения пользовательского режима
- 13. Отладка ядра для зависания процесса?
- 14. Планирование ядра Linux
- 15. Настройка ядра ядра Linux для Redis 3.2.6
- 16. Планировщик ядра Linux CFS
- 17. Ячейка стека внутри ядра Linux
- 18. программа C, чтобы сбросить стек запущенного процесса на Linux
- 19. Конфигурация модуля ядра Linux
- 20. Последовательность выключения ядра Linux Linux
- 21. Управление процессом ядра Linux
- 22. В linux все процессы ядра имеют один и тот же стек ядра, каждый пользовательский процесс имеет свой собственный стек, правильно?
- 23. Где бы превалировал ptrace процессор, стек пользовательского пространства или стек ядра?
- 24. Как распечатать стек вызовов ядра в Mac OS X
- 25. Разработка ядра linux
- 26. Как планировщик процесса Linux предотвращает голодание процесса
- 27. ядра получить стек, когда сигнал
- 28. Модуль Linux для подключения функций процесса
- 29. RDMA API для ядра Linux
- 30. Отладчик памяти для ядра linux
где хранится этот указатель стека? – suresh
В контекстном переключении значение указателя старого стека сохраняется в task_struct процесса, который заменяется новым процессом, и указатель стека для нового процесса считывается из task_struct этого нового процесса. –