Google

domingo, 24 de agosto de 2008

O kernel do Linux

Independente de qual Sistema Operacional seja, todos possuem um kernel. Trata-se de um item fundamental, que antes do Linux era conhecido apenas por estudantes de computação de grandes universidades ou por desenvolvedores da área. Após o surgimento do Linux, o termo kernel ficou mais conhecido e qualquer um que já tenha se aventurado no Linux provavelmente sabe de sua existência. Porém, os conceitos que envolvem o kernel não são claros a muita gente e, por isso, poucas pessoas sabem exatamente o que é kernel. O objetivo desta postagem é dar explicações sobre isso, mas com ênfase no kernel do Linux.

O que é kernel

Kernel pode ser entendido com uma série de arquivos escritos em linguagem C e em linguagem Assembly que constituem o núcleo do sistema operacional. É o kernel que controla todo o hardware do computador. Ele pode ser visto como uma interface entre os programas e todo o hardware. Cabe ao kernel as tarefas de permitir que todos os processos sejam executados pela CPU e permitir que estes consigam compartilhar a memória do computador.

O kernel do Linux

Para entender melhor tudo o que envolve o kernel do Linux é interessante ver um pouco da história do sistema. O kernel do Linux foi idealizado pelo finlandês Linus Torvalds, em 1991. Torvalds era um estudante de ciência da computação que, em seus estudos, teve a necessidade de criar uma nova versão do Minix, um sistema operacional baseado no Unix e desenvolvido por Andy Tannenbaum.

Linus começou a trabalhar nesse projeto e, quando desenvolveu algo concreto, enviou uma mensagem para um grupo de usuários do Minix na Usenet (a antecessora da internet). Na mensagem, Torvalds notificou sobre sua criação e avisou que disponibilizaria o código-fonte do que tinha desenvolvido a todos os interessados.

O que Linus Torvalds tinha criado, na verdade, era a primeira versão do kernel do Linux. Assim, falando grossamente, bastava juntar uma série de aplicativos com o kernel para que um sistema operacional fosse criado.

Linus Torvalds tinha vontade de ter um sistema operacional no qual fosse possível alterar conforme a necessidade. Ao criar a "nova versão" do Minix, Torvalds tinha desenvolvido um meio de usar o hardware de um computador por software e, portanto, restava agora a cada interessado adicionar os aplicativos e as funcionalidades desejadas, para assim constituir um sistema operacional. Em outras palavras, o "chassis" do sistema estava criado, bastava adicionar a "carroceria".

O nome Linux é uma mistura de Linus com Unix.

Periodicamente, novas versões do kernel do Linux são lançadas. Isso ocorre para prover melhorias em uma determinada função da versão anterior, para corrigir vulnerabilidades e para adicionar recursos ao kernel, principalmente compatibilidade com novos hardwares.

As versões do kernel

Cada versão do kernel é representada por 3 números distintos separados por pontos, sendo que um quarto número pode ser aplicado (você já saberá o porquê), por exemplo: 2.6.21.3. O primeiro número indica a versão do kernel. Note que esse número muda raramente: a última alteração ocorreu em 1996, quando o kernel passou da versão 1 para a versão 2. O segundo número indica a última revisão feita até o momento naquela versão do kernel. O terceiro número, por sua vez, indica uma revisão menor, como se fosse uma "revisão da última revisão" do kernel. Note que o terceiro número pode ser acompanhado de pequenas siglas. Uma que costuma aparecer com freqüência é a sigla "rc" (release candidate), que indica a disponibilização de uma versão ainda não oficial, por exemplo: 2.6.22-rc1. Há siglas que apontam uma versão trabalhada por um desenvolvedor em específico, como a "mm", que indica as alterações feitas por Andrew Morton.
Como já dito, um quarto número pode ser usado. Ele é aplicado quando uma falha grave no kernel foi descoberta, sendo, portanto, necessário atualizá-lo. Porém, não faz sentido lançar uma revisão completa apenas por causa de algumas correções, razão esta que levou à utilização de um quarto número.

É importante frisar que antes da série 2.6.x, o esquema de numeração do kernel tinha o seguinte esquema: se o segundo número da representação fosse ímpar, significava que aquela série ainda estava em desenvolvimento, ou seja, era uma versão instável e em fase de testes e aperfeiçoamentos. Se o número fosse par, significava que aquela série já tinha estabilidade para ser disponibilizada para uso.

Mais uma nota importante: você não precisa usar sempre a última versão do kernel. Só é recomendável fazer uma atualização em caso de necessidade de compatibilidade com novo hardware ou em casos de melhorias de recursos. Em alguns casos, principalmente com computadores antigos, o desempenho é melhor se usado um kernel antigo. Em situações simples, talvez seja melhor apenas aplicar um patch (uma correção para um problema) do que adicionar um kernel novo.

Compatibilidade

O kernel do Linux permite que o sistema operacional seja compatível com uma série de plataformas, desde palmtops até mainframes. Até mesmo nos computadores da Apple é possível instalar o Linux. As principais plataformas compatíveis são: Apple, Sun, Sparc, Alpha, PowerPC, i386 (Intel), ARM, entre outras.

Também existe compatibilidade com sistemas de arquivos. Acredite, apesar de não ser recomendável por questões de desempenho, é possível instalar o Linux até mesmo em partições FAT32. As principais compatibilidades neste aspecto são com os seguintes sistemas de arquivos: FAT, FAT32, ext2, ext3, ReiserFS, JFS, XFS, NTFS, entre outros.

Atuação do kernel

Obviamente, o kernel "começa a trabalhar" no processo de inicialização (boot) do sistema, a partir das instruções que são lidas na MBR (Master Boot Record), um recurso responsável por indicar ao BIOS do computador como e onde carregar o sistema operacional. Quando isso ocorre, o kernel começa a detectar os dispositivos de hardware essenciais do computador, como a placa de vídeo, por exemplo. Se até aí tudo ocorrer sem problemas, toda a imagem do kernel passa a ser carregada. Findo esse processo, o kernel checa a memória e a prepara para o uso através de uma função de paginação. As interrupções (IRQs), os discos, memória-cache, entre outros, são acionados em seguida.

Após realizar todas essas etapas, o sistema operacional está pronto para funcionar. O kernel carrega as funções responsáveis por checar o que deve ser inicializado em nível de software e processos, como, por exemplo, o conteúdo do arquivo /etc/init. Geralmente o que é carregado é a tela de login do usuário.

Usuário logado, sistema operacional trabalhando" O kernel agora executa suas funções, como a de controlar o uso da memória pelos programas ou a de atender a chamada de uma interrupção de hardware.

É interessante notar que as distribuições Linux montam o kernel com recursos e drivers básicos para hardware, afinal carregar o suporte a todo tipo de dispositivo é algo inviável. O kernel ficaria extremamente grande e somente os drivers relacionados ao hardware do computador em questão é que seriam usados. Para lidar com esse tipo de problema, os drivers são carregados como módulos após o kernel ser ativado. A questão é que carregar recursos por módulo gera uma queda de desempenho (pouco significativa em computadores rápidos) e, por isso, muitos usuários preferem recompilar o kernel de seus sistemas para que esse carregue os drivers junto com sua inicialização, ou seja, sem usar módulos.
Fonte: http://www.infowester.com

Escola Técnica de Viçosa - R. Dr. Milton Bandeira 160 3º andar