
Недавно я начал изучать Linux, и возник ряд вопросов, которые я собираюсь задать.
Во время чтения я столкнулся с термином «стек ядра» и не могу понять, почему ядро Linux использует стек ядра для каждого процесса?
Почему при выполнении процесса регистр esp имеет адрес вершины
стека ядра процесса, а не адрес вершины стека пользовательского режима соответствующего процесса?
решение1
Когда процесс переходит в режим ядра в результате системного вызова, стек переключается со стека пользовательского режима на стек ядра. Это делается для сохранения целостности ядра, в противном случае процесс (например, другой поток) мог бы сделать что-нибудь неприятное со стеком.
Отдельный стек ядра необходим для каждого процесса, чтобы сохранить состояние процесса. Состояние необходимо сохранить в случае переключения задач, т. е. если текущий процесс переведен в спящий режим, а какой-то другой процесс запланирован для запуска. Когда это происходит, значения регистров (включая регистр указателя стека) восстанавливаются, так что процесс, который должен быть запущен, может продолжить работу с той же точки, в которой он был, когда был приостановлен.