Os módulos/drivers do Linux pertencem ao espaço do kernel ou ao espaço do usuário?

Os módulos/drivers do Linux pertencem ao espaço do kernel ou ao espaço do usuário?

Alguns artigos dizem que módulos/drivers pertencem ao espaço do kernel, pois participam da formação do kernel; (referência:http://www.freesoftwaremagazine.com/articles/drivers_linux)

Enquanto outros dizem que apenas o Ring0 (interage diretamente com o hardware) pode ser chamado de espaço do kernel (módulos/drivers excluídos como no Ring2). (referência:http://jaseywang.me/2011/01/04/vfs-kernel-space-user-space-2/)

Alguém poderia me dizer qual ponto de vista é correto?

Responder1

No AMD64 e nos clones, e no ix86, o Linux usa apenas os anéis 0 e 3. Nenhuma outra arquitetura comum possui os "anéis", portanto, usá-los completamente seria totalmente não-portátil. Além disso, o Linux é monolítico. A ideia do anel inteiro é ser capaz de executar o microkernel no anel 0 e fazer com que os processos de serviço sejam executados em anéis mais altos, para que não possam bagunçar o microkernel e, finalmente, fazer com que o espaço do usuário seja executado no anel mais alto, onde não pode fazer isso. muito dano.

Responder2

Você seria capaz de fornecer uma referência? Presumo que você esteja falando sobre Linux, que (que eu saiba) usa apenas os anéis 0 (kernel) e 3 (usuário).

EDITAR:

Acho que depende do design do sistema operacional. Você pode usar os anéis internos, digamos, em uma arquitetura de microkernel. Você está perguntando sobre um sistema específico (por exemplo, Linux)? Acredito que só seja possível responder a esta pergunta para um sistema operacional específico. No entanto, na maioria dos casos, os sistemas operacionais baseados em x86 usam apenas "kernel" (0) e "usuário" (3).

Responder3

Para um sistema operacional convencional (não executado em virtualização), espaço do kernel e ring0 são sinônimos em termos de privilégio. No entanto, devo explicá-los separadamente, para destacar as diferenças presentes e os pontos em comum que partilham.

Kernel space- O sistema operacional normalmente terá dois modos de execução: espaço do kernel e espaço do usuário. O espaço do kernel é onde ficam os códigos privilegiados do sistema operacional, como agendador, drivers de dispositivo, etc. Sua tarefa é gerenciar todo o sistema e garantir que ele funcione 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 menos privilegiado. Qualquer área da memória do computador pode ser marcada com estes níveis. Se uma área de memória estiver marcada para acesso por ring0, então apenas o código residente em ring0 poderá acessá-la, uma região de memória marcada para acesso por ring3 poderá ser acessada por todos os anéis. Isso fornece um mecanismo que garante que, se você executar código menos confiável em níveis de privilégio mais baixos (anel superior) e código mais confiável em níveis de privilégio mais altos (anel inferior), o primeiro não será capaz de 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 (CPU não Intel, como ARM, não possui arquitetura de 4 anéis), a maioria dos sistemas operacionais usa apenas dois dos 4 anéis. Normalmente são ring0 e ring3. O kernel roda em ring0 e constitui o espaço do kernel (observe que se amanhã o desenvolvedor do sistema operacional fizer o kernel rodar em ring1, em vez de ring0, então o ring1 constituirá o espaço do kernel). Os programas aplicativos são executados no ring3 e constituem o espaço do usuário.

Esta é a convenção seguida pela maioria dos sistemas operacionais. No entanto, se eu for o desenvolvedor do sistema operacional, posso usar a arquitetura em anel da maneira que desejar. Considere os seguintes cenários:
(KS=Espaço do kernel,NÓS=Espaço do usuário,DD=Drivers de dispositivo ou módulos de kernel,RX= anel X)

  1. KSem r0,NÓSem r3 - mais comumente usado. por exemplo. Linux, Windows, etc.
  2. KSem r1,NÓSem r3 - configuração virtualizada, onde o hipervisor é executado em ring0.
  3. KSem r0,DDem r1,NÓSem r3 - Alguns projetos de pesquisa usam esta configuração para proteger o kernel de drivers de dispositivos com bugs.
  4. KSem r0,DDem r3,NÓSem r3 - Microkernels usam esta configuração.
  5. KSem r0,NÓSem r0 – tudo no mesmo anel. Alguns sistemas operacionais de pesquisa, como a singularidade da Microsoft, usam essa configuração. KS é protegido dos EUA por meio de outros mecanismos. (SOs mais antigos, como MS DOS, Windows 98, etc. usavam isso. O KS não era protegido dos EUA, portanto, travamentos do sistema operacional eram frequentes.)
  6. KSem r3,NÓSem 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: fiz algumas simplificações ao escrever, como chamar a arquitetura x86 de CPUs Intel. Não se preocupe com complexidades agora.

informação relacionada