Como o kernel do Linux se compara às arquiteturas de microkernel?

36

Eu li uma vez que uma vantagem de uma arquitetura microkernel é que você pode parar / iniciar serviços essenciais como rede e sistemas de arquivos, sem precisar reiniciar o sistema inteiro. Mas considerando que o kernel Linux hoje em dia (sempre foi o caso?) Oferece a opção de usar módulos para obter o mesmo efeito, quais são as (remanescentes) vantagens de um microkernel?

    
por Tshepang 25.01.2011 / 01:26

8 respostas

32

Microkernels requerem menos código para ser executado no modo mais interno e confiável do que kernelsmonolíticos . Isso tem muitos aspectos, como:

  • Microkernels permitem que recursos não fundamentais (como drivers para hardware não conectado ou não em uso) sejam carregados e descarregados à vontade. Isso é feito principalmente no Linux, através de módulos.
  • Os microkernels são mais robustos: se um componente não-kernel travar, não levará todo o sistema com ele. Um sistema de arquivos com bugs ou um driver de dispositivo pode travar um sistema Linux. O Linux não tem como mitigar esses problemas além de práticas de codificação e testes.
  • Os Microkernels têm uma base de computação confiável menor . Assim, mesmo um driver de dispositivo malicioso ou sistema de arquivos não pode assumir o controle de todo o sistema (por exemplo, um driver de origem duvidosa para o seu gadget USB mais recente não seria capaz de ler seu disco rígido).
  • Uma conseqüência do ponto anterior é que usuários comuns podem carregar seus próprios componentes que seriam componentes do kernel em um kernel monolítico.

GUIs Unix são fornecidas através da janela X, que é o código do usuário (exceto para (parte do) driver de dispositivo de vídeo). Muitos unices modernos permitem que usuários comuns carreguem drivers do sistema de arquivos através do FUSE . Parte da filtragem de pacotes de rede do Linux pode ser feita no mundo do usuário. No entanto, os drivers de dispositivo, agendadores, gerenciadores de memória e a maioria dos protocolos de rede ainda são somente kernel.

Uma leitura clássica (se datada) sobre Linux e microkernels é o debate Tanenbaum-Torvalds . Vinte anos depois, pode-se dizer que o Linux está se movendo muito lentamente em direção a uma estrutura de microkernel (os módulos carregáveis apareceram no início, o FUSE é mais recente), mas ainda há um longo caminho a percorrer.

Outra coisa que mudou é o aumento da relevância da virtualização em desktops e computadores embutidos de última geração: para alguns propósitos , a distinção relevante não é entre o kernel e o usuário, mas entre o hypervisor e os sistemas operacionais convidados.

    
por 25.01.2011 / 23:35
15

Um microkernel limita o tempo em que o sistema está no modo kernel, ao contrário do userspace, ao mínimo absoluto possível.

Se uma falha ocorrer no modo kernel, o kernel inteiro será desativado, e isso significa que o sistema inteiro ficará inativo. Se uma falha ocorrer no modo de usuário, apenas esse processo será desativado. O Linux é robusto a esse respeito, mas ainda é possível que qualquer subsistema do kernel grave sobre a memória de qualquer outro subsistema de kernel, intencional ou acidentalmente.

O conceito de microkernel coloca muita coisa que é tradicionalmente o modo kernel, como rede e drivers de dispositivo, no espaço do usuário. Como o microkernel não é realmente responsável por muito, isso também significa que ele pode ser mais simples e confiável. Pense na maneira como o protocolo IP, por ser simples e estúpido, realmente leva a redes robustas, empurrando a complexidade para as bordas e deixando o núcleo enxuto e médio.

    
por 25.01.2011 / 03:56
5
por 26.01.2011 / 19:44
1

Dê uma olhada na arquitetura x86 - o kernel monolítico usa apenas anéis 0 e 3. Um resíduo , realmente. Mas, mais uma vez, pode ser mais rápido, devido à menor troca de contexto.

    
por 26.01.2011 / 15:04
1
  1. O kernel monolítico é muito mais antigo que o microkernel . É usado no Unix enquanto a ideia de microkernel apareceu no final do 1980 .

  2. Exemplos de sistemas operacionais com os kernels monolíticos são UNIX, LINUX enquanto os sistemas operacionais com microkernel são QNX, L4, HURD e inicialmente Mach (não MacOS X) que mais tarde foi convertido em kernel híbrido. Mesmo o MINIX não é um micronúcleo puro porque seus drivers de dispositivo são compilados como parte do kernel.

  3. Os kernels monolíticos são mais rápidos que os microkernels . O primeiro microkernel Mach é 50% mais lento que os núcleos monolíticos. Versões posteriores como L4 são apenas 2% ou 4% mais lentas que o kernel monolítico .

  4. Os kernels monolíticos são geralmente volumoso , enquanto o microkernel puro tem que ser pequeno em tamanho , cabendo no cache de primeiro nível do processador (microkernel de primeira geração). / p>

  5. Em kernels monolíticos, os drivers de dispositivo residem no espaço do kernel enquanto os drivers de dispositivo microkernel residem no espaço do usuário .

  6. Como os drivers de dispositivo residem no espaço do kernel, ele torna o kernel monolítico menos seguro que o microkernel (a falha no driver pode levar à falha). Os microkernels são mais seguros do que os núcleos monolíticos, por isso são usados em muitos dispositivos militares.

  7. Os kernels monolíticos usam sinais e sockets para garantir a IPC enquanto a abordagem de microkernel usa filas de mensagens . A 1ª versão do microkernel implementou mal o IPC, tornando-os lentos nos switches de contexto.

  8. Adicionar novos recursos a um sistema monolítico significa recompilar todo o kernel enquanto você pode adicionar novos recursos ou correções sem recompilar

por 02.02.2013 / 18:30
0

O Windows NT (o kernel subjacente aos sistemas Windows atuais) começou como um design de microkernel bastante baunilha. Devido a problemas de desempenho, mais e mais códigos "userland" migraram para o "micokernel" ... hoje a estrutura microkernel é vestigial.

    
por 02.01.2016 / 15:51
-1

O caso é que o kernel do linux é um híbrido de monolítico e microkernel. Em uma implementação monolítica pura, não há carregamento de módulos em tempo de execução.

    
por 26.01.2011 / 10:12
-1

Os termos monolithic kernel e microkernel não podem ser seriamente comparados, pois descrevem diferentes aspectos do design do kernel (estrutura vs. tamanho).

Um kernel monolítico típico era o kernel SunOS-4.x e o Linux ainda é semelhante, já que você configura manualmente o conteúdo do kernel básico.

O kernel do Solaris (começando com 2.1 em 1992) não pode mais ser chamado de monolítico, já que todos os drivers são carregados automaticamente sob demanda e apenas uma pequena parte é carregada durante a inicialização.

SunOS-4.xe Solaris (SunOS-5.x) e Linux são implementações de contexto único. Seu código inteiro é executado em um único contexto de MMU.

O Mac OS X é baseado em Mach e é executado como uma implementação de vários contextos, com vários processos separados por contextos de MMU. Neste conceito, os drivers estão em processos separados e contextos separados de MMU.

Muitas pessoas chamam o Mac OS X de "sistema microkernel", mas pode ser que o kernel básico não seja menor que o kernel básico do Solaris.

Então parece que seria melhor falar sobre single context kernels vs. multi context kernels .

    
por 02.01.2016 / 14:21

Tags