Возврат из режима ядра в режим пользователя

Я немного запутался в понимании переключения режимов в ядре Unix. Я даю свое понимание здесь и открываю его для обсуждения / исправления.

При переходе из режима пользователя в режим ядра процессор выполняет переключение между стеком пользователя-процесса и стеком ядра-процесса. Затем селектор сегмента пользователя и процесса и указатель стека сохраняются в стеке ядра, а затемeip указатель инструкции (адрес возврата в пользовательском режиме) и другие аппаратные регистры помещаются в стек ядра

Когда ядро должно вернуться в режим пользователя,trapret Код выскакивает все значения, хранящиеся в стеке ядра, обратно в аппаратные регистры.

Но когдаiret извлекает eip из стека ядра, следующая команда, которая должна быть выполнена, - это адрес возврата в пользовательском режиме.

Это происходит без полного выталкивания других значений стека ядра.

Как сделать остальные значения (%cs, %eflags, %esp, %ss) восстановить?

Как указатель пользовательского стека в стеке ядра возвращается обратно к% esp?

Ответы на вопрос(1)

Ваш ответ на вопрос