A grande maioria das distribuições Linux é executada sobre um kernel monolítico e capaz de carregar e descarregar dinamicamente algumas porções de código ligado ao núcleo, usualmente chamados de módulos, que tem como um dos principais exemplos os drivers de dispositivo.
Além disso, o kernel Linux também tem a característica de ser preemptivo que, conforme explanado anteriormente, é aquele que permite a execução de uma interrupção no meio da execução de um determinado código, como resposta a uma chamada do sistema, criando a ilusão ao usuário de que diversos processos são executados simultaneamente em cada processador.
Quando a arquitetura do sistema Linux é pensada em alto nível, pode-se segmentá-la em função de duas camadas distintas:
A figura abaixo traz uma visão esquemática do funcionamento do Linux.
|
Internamente à camada do espaço usuário, além das aplicações se usuário, é possível observar a existência de uma biblioteca de funções C (GNU C Library), que provê a interface de chamada padrão POSIX para que os aplicativos executados em modo usuário possam acessar funções comuns do sistema e que são normalmente executadas em modo kernel, como as operações de entrada e saída e de gerenciamento de memória. |
Já no espaço kernel, pode-se observar três grandes blocos: um que agrupa as interfaces de chamada do sistema, que implementa as funções mais básicas e se localiza no topo da pilha; um segundo que agrupa o kernel do sistema, que é independente da arquitetura do computador e que contém as funções como as de gerenciamento de processos e de memória, o sistema de arquivos virtual, a pilha de rede e drivers de dispositivo; e um terceiro, mais abaixo, que agrupa todo o código que é dependente da plataforma.