O que é um Kernel
O
kernel de um sistema operacional é visto como se fosse o núcleo do mesmo. Ele representa a camada de software mais próxima ao hardware. Segundo alguns autores, o
kernel é o seu coração, sua mente e seu sistema nervoso. Ele é responsável exclusivamente pelo transporte das informações de mais baixo nível que tornam todas as outras tarefas possível. Fazendo malabarismos com diversos processos que ocorrem simultaneamente, gerenciando sua memória de forma que não interfiram uns nos outros, satisfazendo suas solicitações de acesso a um disco e muito mais.
Funções de um Kernel
O
kernel (monolítico) é responsável por abstrair a interface de hardware, fazendo com que os processos utilizem os recursos de forma segura e organizada.
Algumas funções são atribuídas ao Kernel como:
- Gerência dos Processos (Criação, Agendamento, Finalização);
- Gerência de Alocação e Liberação de Memória;
- Controle do Sistema de Arquivos;
- Operações de Entrada e Saída;
Para que se possa ter essa estrutura funcional e realizar algum trabalho, uma aplicação tem que ter acesso aos serviços disponibilizados pelo
kernel, desta forma uma API (Interface de Programação de Aplicação) é disponibilizada à aplicação. Essa API faz a chamada das funções do
kernel através de interrupção, memória compartilhada ou IPC (Inter-Process Communication).
Arquitetura do Kernel
Segundo Tanenbaum, o
kernel pode ser monolítico, em camadas, ou microkernel (também conhecido como modelo cliente-servidor).
Sistemas Monolíticos
Estrutura mais utilizada, poderia ser chamada de "a grande fusão". Não existe uma estruturação visível na organização monolítica. O Sistema operacional é escrito como um conjunto de procedimentos, sendo que um pode chamar qualquer um dos outros quando necessário. Quando utilizada essa estrutura, cada procedimento deve ter uma interface muito bem definida em termos de parâmetros e resultados.
Dentro dessa estrutura existem dois tipos de chamadas:
- o modo Kernel, onde é permitida a execução de todas as instruções básicas da máquina e;
- o modo usuário, para os programas de usuário, onde certas instruções, como aquelas que controlam entrada/saída não podem ser executadas
Sistemas em Camadas
Estrutura em que o sistema operacional foi organizado como uma hierarquia de níveis, cada um construído sobre o nível imediatamente inferior. O primeiro sistema construído dessa forma foi o THE, projetado no Technische Hogeschool Eindhoven na Holanda por E.W.Dijkstra (1968).
Microkernel
Sendo mais flexível que o
kernel monolítico, o microkernel não fornece o sistema de arquivos, sistema de diretórios, gerência completa de processos e a manipulação da maioria das chamadas de sistema. Todos os serviços prestados pelo microkernel estão á por serem difíceis de executar em outro local ou inviável financeiramente se oferecidos fora do kernel.
O objetivo principal é mantê-lo o menor possível. Todos os outros serviços do sistema operacional estão disponibilizados em forma de servidores ao nível de usuário. Para se realizar alguma operação, o usuário deve enviar uma mensagem ao servidor apropriado.
Os serviços prestados pelo microkernel são os seguintes:
- Um mecanismo de comunicação entre processos
- Um mínimo de funções para gerência de memória
- Um mínimo de funções de gerência de processos e de escalonamento
- Funções de entrada / Saída de baixo nível
Kernel Híbrido
Baseado em microkernel, ele executa operações em modo protegido (modo kernel), através de servidores externos, para a melhoria de desempenho evitando também troca de contextos.
NanoKernel
Extremamente simples. Ele é a camada mais próxima do hardware. Gerenciando virtualmente os serviços, o nano-kernel faz com que a memória que é utilizada por ele seja menor que a do micro-kernel.
Exokernel
Nessa estrutura existe apenas um
kernel simples onde o mesmo faz o controle de recursos do sistema e de um conjunto de bibliotecas que implementam as abstrações do sistema operacional. O aplicativo pode acessar diretamente os recursos do sistema, ou utilizar as bibliotecas. O Programador tem mais liberdade para optar pela abstração de hardware que desejar.
O Kernel Linux
Criado como um hobby por um estudante chamado Linus Torvalds, que tinha como objetivo criar seu próprio sistema operacional Unix-like (baseado na estrutura Unix) que rodasse em processadores de arquitetura Intel 80386. Linus estudou o sistema Minix, de Andrew Tanenbaum e não satisfeito com a arquitetura resolveu criar o seu próprio sistema.
O Projeto
Linux foi lançado publicamente em 1991.
Kernel monolítico, drivers e extensões do
kernel rodam com acesso total ao hardware, embora alguns rodem em espaço usuário (modo usuário citado anteriormente em Kernel Monolítico).
Diferente do padrão do
kernel monolítico, os drivers de dispositivos são configurados como módulos e são carregados enquanto o sistema está rodando. Ainda, os drivers de dispositivos podem ser pré-inseridos sob algumas condições. Isso foi feito para a correção de acesso a interrupções de hardware e melhora do multi-processamento simétrico.
O objetivo do Torvalds não era tornar o sistema portável, embora hoje ele seja um dos mais portáveis dentre os existentes. A portabilidade do sistema era dirigida para a parte de inclusão de sistemas que rodavam em outros sistemas operacionais, no Linux.