O kernel do Linux

Introdução

Independente de qual seja, todo sistema operacional possui 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 deste artigo é 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 (para conhecer a história completa, clique aqui). 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. E como Linux é, na verdade, o nome de um kernel, talvez eu devesse dar o nome de “O kernel Linux” ao título deste artigo. Devido a essa questão – sobre o que de fato o nome Linux representa – o correto é dar o nome GNU/Linux a todas as distribuições desse sistema, uma vez que essas são constituídas pelo kernel – o Linux – mais uma coleção de programas e aplicativos, sendo que a quase totalidade desses softwares são baseados nos conceitos da GNU. No entanto, por questões de comodidade, convencionou-se a utilizar o nome Linux para toda e qualquer distribuição.

As versões do kernel

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.

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 (até o fechamento deste artigo) 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. A foto abaixo mostra o Linux rodando no videogame Nintendo DS:

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.

Onde obter o kernel

Você pode baixar o código-fonte e o próprio kernel do Linux a partir do site www.kernel.org. Nesse endereço não só é possível baixar a última versão como também versões um pouco mais antigas. Por esse mesmo site também é possível obter informações, reportar bugs e participar de listas de discussão.

Finalizando

Aos que se interessam por esse tipo de estudo, entender o que é o kernel de um sistema operacional e como ele funciona é algo realmente fantástico. Talvez essa questão não seria tão conhecida entre os adeptos da computação se o Linux não fosse um sistema de código-fonte aberto. Graças a ele, qualquer pessoa pode tirar proveito do sistema operacional, ou melhor, do kernel, seja para estudar seu funcionamento, seja para usá-lo em seu cotidiano. O kernel é o núcleo de um sistema operacional e assim, não é errado dizer que o Linux é o coração das distribuições GNU/Linux. Mas isso é pouco. O Linux, mesmo que indiretamente, é um dos grandes responsáveis pela divulgação das filosofias que regem a cultura do software livre.

  1. Daniela Piovovar dos Reis
    30/04/2015 às 20:05

    Linus Torvalds criou a primeira versão do kernel do Linux, a partir da necessidade de alterar um sistema operacional quando fosse preciso. Foi uma criação de suma importância para a evolução da criação de sistemas operacionais, porque ao juntar aplicativos ao kernel e juntamente com o código-fonte livre para o acesso de quem tivesse interesse poderiam ser formados vários sistemas operacionais a partir da necessidade de cada interessado.
    O mais surpreendente ao meu ver foi sua capacidade de compartilhamento, pois Linus Torvalds quis dividir com todos sua criação.O kernel é o núcleo de um sistema operacional pois ele carrega as funções responsáveis por checar o que deve ser inicializado em nível de software e cada parte do hardware a ser liberada para trabalhar corretamente, isso pode ser feito por módulos o automaticamente quando é carregado a tela inicial do usuário.

    Daniela Piovovar dos Reis
    Curso: Técnico em Informática para internet / turma 2015/1
    Data: 30 de Abril de 2015.

  2. simone candida soares
    03/05/2015 às 16:23

    Como foi bom todo esse conhecimento sobre o kernel e saber que ele também e um arquivo que controla o hardware do computador só veio trazer mas conhecimento .

  3. Jessé Leite
    05/05/2015 às 00:28

    Fantástico, realmente incrível.

  4. 09/05/2015 às 15:54

    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.

  5. ANTONIO JOSÉ DOS SANTOS
    13/05/2015 às 13:19

    e muito bom preciso aprender mas sobre o linux parece ser muito bom para usar e ainda as empresas precisam de sistemas operacionais bom e original ta ai uma opção boa e barata

  6. JULIO CEZAR FERREIRA DA SILVA
    14/05/2015 às 15:45

    Kernel Modular
    Agora que entendemos melhor o que o kernel faz, vamos olhar mais atentamente a sua organização
    física. As primeiras versões do kernel eram monolíticas, ou seja, todos os módulos estavam
    compilados dentro de um único arquivo executavel. O kernel das distribuições mais novas são
    modulares, ou seja, os módulos podem ser carregados no kernel em tempo de execução, isso faz
    com que o núcleo do kernel fique menor e não seja necessário reiniciar a maquina para carregar ou
    substituir novos módulos.
    O núcleo do kernel é carregado na memória na hora do boot e é lido de um arquivo no diretório
    “/boot” na maioria das vezes este arquivo é chamado de “vmlinuz-VERSÃO_DO_KERNEL”. Para
    ver a versão do kernel corrente utilize o comando:

    O kernel monolítico é aquele que contém todos os módulos e subsistemas em um único executável binário. O kernel monolítico tem como característica, permitir que as funções essenciais sejam executadas através do kernel space (espaço do kernel).

    Isto é possível através do uso de módulos. O que significa que um módulo, apesar de não estar no mesmo código do kernel, é executado no espaço de memória do kernel fazendo com que o kernel continue sendo único e centralizado.

    Geralmente, um kernel monolítico tem melhor desempenho do que outras arquiteturas de kernel, porém, a manutenção da sua programação é mais demorada, pois o kernel deve ser recompilado e substituído por completo, caso queira implementá-lo.

    Exemplos: Linux, Unix, BSD, FreeBSD, FreeDOS, MS-DOS.

    Microkernel :: O microkernel (ou kernel modular) é um kernel que “conversa” com os subsistemas que estão no user space (espaço do usuário) através do uso de mensagens.

    Possui um núcleo cujas funcionalidades são executadas, em quase toda sua totalidade, fora do kernel space. Outras funcionalidades são oferecidas através de programas chamados “servidores”, que se localizam no user space.

    O microkernel, basicamente, provê os serviços essenciais, tais como como gerenciamento de memória, gerência de threads e comunicação entre os processos e tarefas. Serviços não essenciais residem no user space.

    Os microkernels são modulares, cada subsistema do microkernel funciona como plugins e por isso, o microkernel é extremamente flexível. Um microkernel pode ter um executável binário menor do que um kernel monolítico, porque o microkernel permite a utilização de plugins que podem ser usados de acordo com as necessidades do projeto.

    Exemplos: OpenSolaris, Hurd, QNX (Quick Unix), MINIX.

    Kernel Híbrido :: Tem características de microkernel e kernel monolítico. É um kernel que possui apenas as funções principais e serviços não essenciais, e comunica-se com os módulos que são chamados de “servidores”, como por exemplo, o serviço de impressão.

    Se um “servidor” der erro, o S.O. continua funcionando, pois são separados. Seu desempenho é relativamente menor, pois o kernel tem que comunicar-se com os serviços via mensagens, e isto exige um hardware mais robusto.

    Exemplos: Windows NT, Windows XP, Windows Vista, Windows 7, Windows 8, Mac OS, L4.

    Exokernel :: O exokernel é bastante utilizado para virtualização de sistemas, pois cria uma camada de kernel expondo o hardware dando o controle aos outros sistemas que rodam na camada superior.

    O exokernel tem um conceito muito parecido com o microkernel, pois ao invés de ter subsistemas no user space (subsistemas executados como programas), tem sistemas operacionais funcionando na camada superior.

    O exokernel é um software bastante difícil de projetar, pois deve se adaptar aos diferentes tipos de sistemas operacionais e deve permitir o acesso aos diferentes recursos de hardware de cada máquina.

  7. ARIONE CAVALCANTE DOS SANTOS
    15/05/2015 às 17:17

    Muito interessante esse texto, o título nos remete a pensar que Kernel é algo exclusivo do Línux, mas, logo no inicio do texto é esclarecido que ele é parte principal de todo sistema operacional. É o núcleo ou o cérebro do S.O. e gerencia os processos e periféricos por meio do escalonamento. O Kernel é o mediador do hardware e software dentre as ações a serem executadas. E por meio do Linux foi dada mais publicidade dessa importância que tem o Kernel dos sistemas operacionais.

  8. ALESSANDRA GUIMARÃES DA SILVA
    22/05/2015 às 11:04

    Interessante o Kernel até então não o conhecia, mas agora vendo seu papel e seu valor a desempenhar e importância no computador pois é ele que controla todo o hardware do computador e cabe a ele as tarefas de permiti que todos os processos sejam executados pela cpu. E também podemos baixar o kernel e conhecer todas as versões desde da mais antiga a atualizada

  1. No trackbacks yet.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: