Li uma vez que uma vantagem de uma arquitetura de microkernel é que você pode interromper / iniciar serviços essenciais como redes e sistemas de arquivos, sem precisar reiniciar o sistema inteiro. Mas considerando que o kernel do Linux atualmente (sempre foi o caso?) Oferece a opção de usar módulos para obter o mesmo efeito, quais são as vantagens (restantes) de um microkernel?
39
Respostas:
Os microkernels exigem menos código para serem executados no modo mais íntimo e confiável do que os kernels monolíticos . Isso tem muitos aspectos, como:
As GUIs do Unix são fornecidas via janela X, que é o código da terra do usuário (exceto (parte do) driver de dispositivo de vídeo). Muitos departamentos modernos permitem que usuários comuns carreguem drivers do sistema de arquivos através do FUSE . Parte da filtragem de pacotes de rede Linux pode ser feita na terra do usuário. No entanto, drivers de dispositivo, agendadores, gerenciadores de memória e a maioria dos protocolos de rede ainda são apenas do 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á caminhando muito lentamente para 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 foi a crescente relevância da virtualização em computadores desktop e embarcados de última geração: para alguns propósitos, a distinção relevante não está entre o kernel e a região do usuário, mas entre o hipervisor e os sistemas operacionais convidados.
fonte
Um microkernel limita o tempo em que o sistema está no modo kernel, em oposição ao espaço do usuário, ao mínimo absoluto possível.
Se ocorrer uma falha no modo kernel, o kernel inteiro será desativado, e isso significa que o sistema inteiro será desativado. Se ocorrer uma falha no modo de usuário, esse processo será interrompido. O Linux é robusto nesse aspecto, mas ainda é possível para qualquer subsistema do kernel gravar na memória de qualquer outro subsistema do kernel, intencional ou acidentalmente.
O conceito de microkernel coloca muitas coisas tradicionalmente no 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 pode ser mais simples e mais confiável. Pense na maneira como o protocolo IP, por ser simples e estúpido, realmente leva a redes robustas, empurrando a complexidade para o limite e deixando o núcleo enxuto e mesquinho.
fonte
Você deve ler o outro lado da questão:
Computação de alto desempenho extremo ou por que os microkernels sugam
O sistema de arquivos pertence ao kernel
fonte
Dê uma olhada na arquitetura x86 - o kernel monolítico usa apenas os anéis 0 e 3. Um desperdício, na verdade. Mas, novamente, pode ser mais rápido, devido à menor alternância de contexto.
fonte
O kernel monolítico é muito mais antigo que o microkernel . É usado no Unix enquanto a idéia de microkernel apareceu no final dos anos 80 .
Exemplos de sistemas operacionais com os núcleos monolíticos são UNIX, LINUX, enquanto os sistemas operacionais com microkernel são QNX, L4, HURD e inicialmente Mach (não o MacOS X), que foi posteriormente convertido em kernel híbrido. Mesmo o MINIX não é um microkernel puro porque seus drivers de dispositivo são compilados como parte do kernel.
Os núcleos monolíticos são mais rápidos que os micro núcleos . O primeiro microkernel Mach é 50% mais lento que os grãos monolíticos. Versões posteriores como L4 são apenas 2% ou 4% mais lentas que o kernel monolítico .
Os núcleos monolíticos geralmente são volumosos, enquanto o microkernel puro precisa ser pequeno em tamanho , até caber no cache de primeiro nível do processador (microkernel de primeira geração).
Nos kernels monolíticos, os drivers de dispositivo residem no espaço do kernel, enquanto nos drivers de dispositivo do microkernel residem no espaço do usuário .
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 causar uma falha). Os microkernels são mais seguros que os monolíticos, portanto, são usados em muitos dispositivos militares.
Os núcleos monolíticos usam sinais e soquetes para garantir o IPC, enquanto a abordagem por microkernel usa filas de mensagens . O 1 st gen de microkernel mal implementado IPC para que eles eram lentos em trocas de contexto.
Adicionar novos recursos a um sistema monolítico significa recompilar todo o kernel enquanto você pode adicionar novos recursos ou patches sem recompilar
fonte
O Windows NT (o kernel subjacente aos sistemas Windows atuais) começou como um design de microkernel bastante básico. Devido a problemas de desempenho, cada vez mais o código "userland" foi migrado para o "micokernel" ... hoje sua estrutura de microkernel é vestigial.
fonte
O caso é que o linux kernel é um híbrido de monolítico e microkernel. Em uma implementação monolítica pura, não há módulos carregando no tempo de execução.
fonte
Os termos
monolithic kernel
emicrokernel
não podem ser seriamente comparados, pois descrevem diferentes aspectos do design do kernel (estrutura versus tamanho).Um kernel monolítico típico era o kernel SunOS-4.x e o Linux ainda é semelhante, pois você configura manualmente o conteúdo do kernel básico.
O kernel Solaris (começando com 2.1 em 1992) não pode mais ser chamado de monolítico, pois todos os drivers são carregados automaticamente sob demanda e apenas uma pequena parte é carregada durante a inicialização inicial.
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 MMU.
O Mac OS X é baseado em Mach e é executado como uma implementação de múltiplos contextos com vários processos separados por contextos MMU. Nesse conceito, os drivers estão em processos separados e em contextos MMU separados.
Muitas pessoas chamam o Mac OS X de "sistema de microkernel", mas pode ser que o kernel básico não seja menor que o kernel básico do Solaris.
Assim, parece que seria melhor para falar sobre
single context kernels
vs.multi context kernels
.fonte
microkernel
está errado de qualquer maneira, pois geralmente é usado para algo que deve ser chamadomulti context kernel
.