Вы можете определить, находитесь ли вы в режиме пользователя или в режиме ядра, исходя из уровня привилегий, установленного в регистре сегмента кода (CS).Каждая инструкция, загруженная в ЦП из памяти, на которую указывает регистр RIP или EIP (регистр указателя команд в зависимости от того, x86_64 или x86 соответственно), будет считываться из сегмента, описанного в таблице глобальных дескрипторов (GDT), текущим кодомдескрипторМладшие два бита дескриптора сегмента кода будут определять текущий уровень привилегий, на котором выполняется код.Когда выполняется системный вызов, который обычно выполняется посредством программного прерывания, ЦП проверит текущий уровень привилегий, а если он находится в пользовательском режиме, заменит текущий дескриптор сегмента кода на дескриптор уровня ядра, как определенодескриптор шлюза программного прерывания системного вызова, а также сделать переключение стека и сохранить текущие флаги, значение CS уровня пользователя и значение RIP в этом новом стеке уровня ядра.Когда системный вызов завершен, значение CS пользовательского режима, флаги и значение указателя инструкций (EIP или RIP) восстанавливаются из стека ядра, а переключатель стека возвращается в стек текущих выполняющихся процессов.