Таблицы страниц не изменяются при переключении в режим ядра - часть ядра виртуального адресного пространства просто помечается как доступная только в ring0, поэтому она становится доступной. Ядро изменяет таблицы страниц при изменении текущего процесса.
Инструкция int 0x80
обслуживается шлюзом-ловушкой, который предоставляет адрес для процессора, к которому нужно перейти в виде пары CS: EIP. Новый CS (селектор сегмента кода) включает в себя CPL (текущий уровень привилегий), равный 0, что влияет на переход к ring0.
Из-за перехода с ring3 на ring0 процессор также выбирает новые значения для SS: ESP из TSS (селектор сегмента задачи) и сохраняет старые в TSS. Это переключается со стека пользовательского режима на стек ядра.
Предыдущий CS: EIP затем помещается в стек ядра (это адрес возврата в пространстве пользователя). Все это выполняется процессором благодаря самой инструкции int 0x80
.
Инструкция IRET
может использоваться для возврата в пользовательское пространство - она извлекает CS: EIP из стека ядра. Поскольку CS включает в себя CPL, равный 3, процессор переключается обратно на ring3, что заставляет его переключаться обратно на стек ring3.