Para um sistema operacional convencional (não executado em virtualização), o espaço do kernel e o anel 0 são sinônimos em termos do privilégio.
No entanto, devo explicá-las separadamente, para destacar as diferenças presentes e comuns que elas compartilham.
Kernel space
- o sistema operacional normalmente possui dois modos de execução: o espaço do kernel e o espaço do usuário. Espaço do kernel é onde o código privilegiado do sistema operacional, como agendador, drivers de dispositivo, etc, vivem. Sua tarefa é gerenciar todo o sistema e garantir que ele seja executado de maneira estável. O espaço do usuário contém processos como navegadores da web, etc., que usam a funcionalidade fornecida pelo espaço do kernel.
Rings
- Os processadores Intel vêm com 4 níveis de privilégio de operação. Estes são chamados de anéis. O anel 0 é o mais privilegiado, enquanto o anel 3 é o menor. Qualquer área da memória do computador pode ser marcada com esses níveis. Se uma área de memória é marcada para acesso por ring0, então apenas o código que reside em ring0 pode acessá-la, uma região de memória marcada para acesso por ring3 pode ser acessada por todos os anéis. Isso fornece um mecanismo que garante que, se você executar um código menos confiável em níveis de privilégio mais baixos (anel superior) e mais código confiável em níveis de privilégio mais altos (anel inferior), o primeiro não poderá afetar o último. Qual código é executado em qual anel (nível de privilégio) pode ser definido programaticamente.
Para simplificar o design e tornar o código portátil (a CPU não-Intel, como o ARM, não possui a arquitetura de quatro segmentos), a maioria dos SO usa apenas dois dos quatro toques. Estes são tipicamente ring0 e ring3. O kernel roda em ring0, e constitui o espaço do kernel (note que se amanhã o desenvolvedor do sistema operacional fez o kernel rodar em ring1, ao invés de ring0, então o ring1 irá constituir o espaço do kernel). Os programas aplicativos são executados em ring3 e constituem o espaço do usuário.
Esta é a convenção seguida pela maioria dos sistemas operacionais. No entanto, se eu sou o desenvolvedor do sistema operacional, estou livre para usar a arquitetura do anel da maneira que eu quiser. Considere os seguintes cenários:
( KS = Espaço do kernel, US = Espaço do usuário, DD = Drivers de dispositivo ou módulos do kernel, rX = anel X)
-
KS em r0, US em r3 - mais comumente usados. por exemplo. Linux, Windows, etc.
-
KS em r1, US em r3 - configuração virtualizada, em que o hipervisor é executado em ring0.
-
KS em r0, DD em r1, US em r3 - Alguns projetos de pesquisa usam essa configuração para proteger o kernel contra drivers de dispositivo com bugs. / li>
-
KS em r0, DD em r3, US em r3 - Microkernels usam essa configuração.
-
KS em r0, US em r0 - tudo no mesmo toque. Alguns sistemas de pesquisa, como a singularidade da Microsoft, usam essa configuração. O KS é protegido dos EUA usando outros mecanismos. (Sistemas operacionais mais antigos, como MS DOS, Windows 98, etc., usavam isso. O KS não era protegido dos Estados Unidos, portanto falhas no SO eram frequentes.)
-
KS em r3, US em r0 - Absurdo. Dar mais privilégios aos EUA permitirá que os EUA corrompam o KS. Nunca vi tal configuração, mas se eu quiser escrever tal sistema operacional, nada me impedirá de fazer isso.
Nota: Eu fiz algumas simplificações enquanto escrevia, como chamar arquitetura x86 como CPUs da Intel. Não se preocupe com os detalhes agora.