Почему в Linux для каждого процесса существует стек ядра?

Почему в Linux для каждого процесса существует стек ядра?

Недавно я начал изучать Linux, и возник ряд вопросов, которые я собираюсь задать.

  1. Во время чтения я столкнулся с термином «стек ядра» и не могу понять, почему ядро ​​Linux использует стек ядра для каждого процесса?

  2. Почему при выполнении процесса регистр esp имеет адрес вершины
    стека ядра процесса, а не адрес вершины стека пользовательского режима соответствующего процесса?

решение1

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

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

Связанный контент