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

1

Alguns artigos dizem que os módulos / drivers pertencem ao espaço do kernel enquanto participam da formação do kernel; (referência: link )

Enquanto outros dizem que apenas o Ring0 (interaja diretamente com o hardware) pode ser chamado de espaço do kernel (módulos / drivers excluídos, como no Ring2). (referência: link )

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

    
por California_desert 22.04.2013 / 17:00

3 respostas

4

Em AMD64 e clones e ix86, o Linux usa apenas o anel 0 e 3. Nenhuma outra arquitetura comum tem os "anéis", portanto, usá-los totalmente seria totalmente não portátil. Além disso, o Linux é monolítico. A idéia do anel inteiro é poder rodar o microkernel no anel 0, e ter processos de serviço rodando em anéis mais altos para que eles não possam atrapalhar o microkernel e finalmente ter espaço no userspace no anel mais alto, onde ele não pode fazer muito dano.

    
por 22.04.2013 / 18:27
1

Você seria capaz de fornecer uma referência? Estou assumindo que você está falando sobre o Linux, que (até onde eu sei) 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 em uma arquitetura de microkernel. Você está perguntando sobre um sistema específico (por exemplo, Linux)? Eu acredito que só é 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 "user" (3).

    
por 22.04.2013 / 17:12
0

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)

  1. KS em r0, US em r3 - mais comumente usados. por exemplo. Linux, Windows, etc.
  2. KS em r1, US em r3 - configuração virtualizada, em que o hipervisor é executado em ring0.
  3. 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>
  4. KS em r0, DD em r3, US em r3 - Microkernels usam essa configuração.
  5. 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.)
  6. 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.

    
por 12.07.2016 / 18:02