# Micronúcleo (computação)

Micronúcleo, ou microkernel, é uma arquitetura de núcleo (kernel) de um sistema operativo cujas funcionalidades são quase todas executadas fora do núcleo, em oposição a um núcleo monolítico. Os processos se comunicam com um núcleo mínimo, usando o mínimo possível o "espaço do sistema" (kernel space). Neste local os aplicativos tem acesso a todas as instruções e a todo o hardware e deixando o máximo de recursos rodando no "espaço do usuário" (user-space) em que o software tem algumas restrições, não podendo acessar algumas hardwares, nem tem acesso a todas as instruções).
Basicamente o Microkernel executa a maioria dos processos fora do kernel, ele carrega o minimo de processos possíveis no kernel space. O restante dos módulos são executados como processos de usuário comuns para o sistema.
Um dos principais benefícios de utilizar a arquitetura dessa maneira, com divisão de tarefas entre módulos, é uma menor preocupação com os erros, já que sistemas operacionais são muito sujeitos a eles. Isso não quer dizer que erros não vão acontecer, porém, erros que provavelmente causariam uma falha e derrubariam todo o sistema, agora irão apenas causar uma falha naquele módulo em específico, trazendo alta confiabilidade.
Um bom exemplo de aplicação dessa arquitetura é o MINIX 3, que utilizou muito da modularidade no seu sistema operacional. O seu micronúcleo tem cerca de 12000 linhas em C e 1400 linhas de assembly para funções de nível muito baixo, como gerenciamento de interrupções e processos de chaveamento. O código C gerencia os processos e controla a comunicação entre eles, além de permitir as chamadas para o núcleo, permitindo o sistema operacional funcionar. O driver de dispositivo para o relógio também fica no núcleo, porque o escalonador interage proximamente com ele. Os demais drivers do dispositivo operam como processos do usuário.
Além do núcleo, o sistema é estruturado em mais três camadas de processos, todas essas camadas executando em modo de usuário. A camada inferior é responsável pelos drivers de dispositivos. Como essa camada executa em modo usuário, ela não tem permissão para acessar fisicamente e emitir comandos de E/S. Ao invés disso, é necessário construir uma estrutura com as informações das portas que irão ser utilizadas e gerar uma chamada ao núcleo. Isso permite que o núcleo verifique oque o driver está lendo ou escrevendo, não deixando que, por exemplo, um dispositivo defeituoso escreva acidentalmente no disco.
Acima dos drivers está a camada que contém os servidores. Essa camada faz a maior parte do trabalho do sistema operacional, já que gerencia operações importantes do mesmo, como gerenciamento de arquivos ou gerenciamento de processos, por exemplo. Os programas de usuário enviam requisições aos servidores do que for necessário para o funcionamento do mesmo. Acima dessa camada estão os programas de usuário, que utiliza chamadas nas demais camadas para funcionar corretamente.
Uma estratégia interessante ligada ao núcleo minimalista é utilizar processos de modo usuário para atribuir prioridades aos processos, desacoplando essa função do núcleo e reduzindo-o.

## Exemplos de sistemas operacionais

* Hurd
* MINIX
* QNX
* L4