нет =) я тут про другие права. права к доступу в адресное пространство и на выполнение кода в данной странице висят на самой странице. страницы хранятся в структуре процессора LDT (подробнее о ней в главе "Управление памятью" смотри ссылку внизу).
переключение user space / ядро / user space происходят в trap'ах (это особый вид прерываний процессора)
i386 имеет довольно сложную систему прерываний. я сейчас буду говорит о прерываниях защищеного режима (protected mode)
информация о них заполняется в особой структуре IDT (это структура не ядра а процессора, но расположена она в адресном пространстве ядра)
сколько то там первых прерываний отдано аппаратным прерываниям (таймер, DMA, прочая аппаратура). на них вешаются соответствующие обработчики
сколько то прерываний программные но генерируются они самим процессором (нарушение защиты процессора, отсутствие страниц в памяти, трассировка и прочее) на них тоже вешеются соответствующие обработчики
остальные номера прерываний свободны. в Linuxе на прерывание 0x80 повешан обработчик системных вызовов.
любой обработчик прерывания выполняется с привелегиями ядра. обработчики прерывания естественно представляют собой "ядерный код".
приложения запущеные на 3м кольце защиты вообще ничего не могут сделать кроме как вариться с выделеном адресном пространстве и то если ядро позволит
многие инструкции процессора требуют приоритета ядра. так что скажем in/out инструкции не выполнятся на третьем кольце возникнет исключение и процессор автоматически выполнит код обработчика программного преоывания "нарушение защиты". а вот инструкцию int 0x80 процесс на 3м кольце имеет право выполнить.
возникнет программное прерывание которое будет обрабатываться на уровне ядра. ура! процесс получил нужные привелегии. фишка в том что процесс не может изменить код который будет выполняться на 0м кольце. тоесть может выполнять только доверенный код ядра в своём контексте.
вот так в грубом приближении построена защита ОС на i386
читай
http://sasm.narod.ru/docs/pm/pm_main.htm