Esqueça o modo real, que é apenas um detalhe da arquitetura x86 e está lá apenas para compatibilidade com os processadores da década de 1980.
O processador realmente tem um sinalizador que indica o nível de privilégio atual. Os detalhes dessa bandeira variam entre os tipos de processadores, mas para manter as coisas simples, pense nela como duas configurações: usuário e kernel.
Existem instruções do processador que alteram o nível de privilégio. O mais importante para a segurança é que indo para um nível de privilégio mais alto também salta para um endereço predefinido . O endereço pode estar em um registrador que somente o código do kernel pode modificar, ou na memória que o kernel configura (via MMU) como inacessível no modo de usuário. O código neste endereço é cuidadoso para verificar as solicitações feitas pelo código do usuário, ele não aceitará solicitações arbitrárias do código do usuário.
Normalmente existem várias maneiras de se obter um privilégio mais alto, pelo menos três tipos: chamadas de sistema (quando o código do usuário muda explicitamente para o modo kernel), interrupções (quando um periférico sinaliza ao processador que ele deveria fazer alguma coisa) e interceptações (quando o processador tenta executar inválido cide, por exemplo, acesso a memória não mapeada ou uma instrução desconhecida).
Em uma chamada de sistema, o código do usuário não especifica onde pular, apenas emite a instrução de chamada do sistema e o processador determina onde pular. Para determinar qual chamada de sistema é invocada, o código do kernel examina o conteúdo dos registradores: normalmente há um registro que contém um número de chamada do sistema, e o distribuidor de chamadas do sistema no kernel procura esse número em uma tabela.
Veja também Espaço do usuário para a transição do espaço do kernel e Como o kernel impedir que um programa malicioso leia toda a RAM física?