Download "SISTEMAS OPERACIONAIS ABERTOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com"
Marta Neuza Pinheiro Varejão
1 - Aula 9-1. O KERNEL DO LINUX Nos sistemas GNU/Linux, todas as distribuições baseadas nos sistemas GNU/Linux existentes são compatíveis, graças ao uso de um kernel único desenvolvido por uma equipe de excelentes e restritos programadores, onde Linus Torvalds é o coordenador. Outra situação analisada está no fato do Slackware, em comparação à maioria das demais distribuições, ter o diferencial de possuir vários kernels customizados para o uso em situações específicas. Ainda assim, existirão circunstâncias em que necessitaremos de ter habilitadas algumas funcionalidades específicas, bem como outras que não terão necessidade de estarem presentes, ocupando memória e carga do processador. Pelo fato do código-fonte ser aberto e da existência de diversos recursos para a sua modificação, o kernel possui uma grande flexibilidade para ser adaptado e recompilado com o intuito de atender os mais variados motivos. É justamente por isso é que iremos estudar o kernel e detalhar como funciona o processo de compilação do kernel, para que o usuário possa obter suporte à determinadas tecnologias ou periféricos, além de otimizar o sistema para obter uma melhor performance. Existem inúmeras funcionalidades ao qual o kernel pode ser adaptado. Apesar deste processo não ser tão necessário, e na maioria das vezes dispensável, nos interessará conhecer suas características e possivelmente realizar algumas intervenções caso necessárias para o uso dos sistemas GNU/Linux em nosso cotidiano. E para isto, conhecer as características e particularidades do kernel Linux, além de obter informações são necessárias para personalizá-lo de forma à atender as mais variadas necessidades. O kernel é considerado o coração do sistema; é ele quem coordena todo o trabalho de gerenciamento e acesso aos principais recursos do sistema. Ao acessarmos a memória principal, ao executarmos aplicações, ao exibirmos informações no vídeo, ao gravarmos arquivos, enfim, todos os eventos inerentes de um sistema operacional. 1
2 1.1. Tipos de Kernel Monolítico: Um kernel é considerado monolítico quando os drivers e/ou programas de controle dos dispositivos são compilados diretamente no kernel. Estes kernels são utilizados para a inicialização de sistemas para os mais variados tipos de hardware. Porém em contrapartida exigem um consumo muito maior de memória RAM que o kernel modular, onde diversos destes drivers e/ou programas são compilados como módulos. Modular Ao contrário do kernel monolítico, no kernel modular os programas de controle de dispositivos são compilados separadamente como módulos ao invés de serem inclusos no kernel. A principal vantagem deste processo está no fato de se obter um kernel leve, rápido e bem enxuto. Porém, dependendo das operações à serem realizadas e dos possíveis módulos existentes, possivelmente ocorrerá uma perda de performance face ao carregamento destes módulos durante a utilização intensa dos dispositivos do sistema. Este é o principal motivo pelo qual determinadas tecnologias devem ser compiladas diretamente (uso constante), enquanto outras devem ser compiladas como módulos (usos ocasionais). Kernel semi-monolítico Tanto o kernel monolítico quanto o kernel modular são temas de debates e discussões entre vários especialistas em desenvolvimento de sistemas operacionais. Com os desenvolvedores do kernel Linux, com certeza não seria diferente: enquanto alguns defendem a utilização do kernel modular em argumento à sua simplicidade e formato compacto, outros defendem a utilização do kernel monolítico, tendo como principal argumento a dificuldade em obter trocas de informações confiáveis entre os desenvolvedores, pelo fato destes estarem divididos em numerosos grupos para a administração de seus respectivos módulos. Para intermediar estas circunstâncias, foi incorporado ao kernel Linux algumas características do kernel modular, onde estas apresentam as suas principais qualidades sem apresentar suas limitações, como a perda de desempenho e simplicidade. 2
3 1.2. Versões Tecnicamente existem duas versões do kernel: - A versão de desenvolvimento; e - A versão estável. A versão de desenvolvimento é composta por um número de série cujo 2º termo é sempre ímpar (2.1.x, 2.3.x, 2.5.x), onde são acrescentadas melhorias e modificações para que no futuro venha à ser largamente utilizado. Ao chegar à um certo grau de amadurecimento, este kernel se tornar a versão estável, onde é alterada a sua composição numérica para uma nova série, onde este 2º termo passa à ser par (2.2.x, 2.4.x, 2.6.x). Á partir da versão estável inicia-se novamente o trabalho para desenvolvimento de uma nova versão do kernel, e isto gera um ciclo de desenvolvimento contínuo: - A versão em desenvolvimento gera a versão estável 2.1.x -> 2.2.x; - A nova versão estável torna-se a base para o novo desenvolvimento 2.2.x -> 2.3.x; - Onde continua o ciclo de aperfeiçoamento 2.3.x -> 2.4.x -> 2.5.x -> 2.6.x ->... Dependendo das circunstâncias, algumas modificações são incluídas no kernel estável para que ele possa suportar novas tecnologias que sejam bastante necessárias, procedimento este que geralmente é implementado no kernel de desenvolvimento para que esteja presente no novo kernel estável. Para exemplo, à partir da versão , o kernel passou a suportar nomes extensos do Windows nas partições VFAT; já acima da versão , passou a suportar o sistema de dados ReiserFS Armazenamento Os Binários do Sistema Conforme as instruções da norma FHS e respectivamente da LSB, os arquivos de inicialização e o kernel Linux do sistema deverá estar instalado no diretório /boot da estrutura de diretórios. Ao checarmos este diretório, encontraremos o seguinte conjunto de arquivos: 3
4 A imagem do kernel principal corresponde ao arquivo vmlinuz-ide-[versão], ao passo que o arquivo System.map-ide-[VERSÃO] é utilizado pelas ferramentas de manipulação de módulos. Já o config-ide-[versão] refere-se às opções de configuração padrão da distribuição que foram utilizados na compilação do kernel correspondente ao.config situado no pacote do código-fonte O Código-Fonte Já o código-fonte do kernel Linux deverá estar disponibilizado em /usr/src, onde deverá existir o diretório linux-[versão]. Dentro deste diretório, poderemos ver a seguinte árvore de diretórios: Este código-fonte compõe-se da seguinte estrutura: 4
5 Além do subdiretório /Documentation, existem diversos documentos para consulta, como o README, o REPORTING-BUGS, o COPYING e o CREDITS. Sempre que puderem, gastem alguns minutos e dê uma olhada neles ou pelo menos no arquivo README. Poderemos armazenar diversas versões do kernel, apenas atribuindo aos seus respectivos diretórios o nome e a versão corrente destes para que, na eminência de uma necessidade, estes estejam sempre à disponibilidade O Desenvolvimento do Kernel O kernel do Linux é desenvolvido graças à ajuda de milhares de colaboradores, que tendo em mãos o seu código-fonte, ajudam nas mais diversas formas: sejam aperfeiçoando o próprio código, analisando, comunicando erros, dando sugestões, etc., enfim, colaborações que hoje o tornam um dos maiores projetos de código-aberto atualmente. Encabeçado por Linus Torvalds e com grande apoio de seu braço direito Alan Cox, o kernel Linux possui um grupo de desenvolvedores, subdividido por uma rígida hierarquia, onde as sugestões enviadas são avaliadas pelos membros da equipe, porém em casos de opiniões adversas, somente os líderes de cada hierarquia é que dão a palavra final. 5
6 1.5. Compilação A compilação do kernel está entre as maiores vantagens para a adoção de sistemas operacionais livres como o GNU/Linux e BSDs em comparação aos outros proprietários existentes, justamente por ser possível realizar a otimização de seus recursos em virtude de se encontrar disponível o seu código-fonte para a realização desta operação Suporte a Periféricos e Programas Um dos principais motivos que levam os usuários a recompilarem o kernel está na necessidade de suporte à novos periféricos e tecnologias, incrementando-as no sistema ou habilitando conforme necessário. Em virtude da imensa variedade máquinas com perfis de hardwares existentes, os sistemas GNU/Linux geralmente reconhecem a grande maioria destes, porém ainda existem muitos componentes que, por mais variados motivos, não são suportados pelo kernel ou seu suporte não se encontram habilitados Otimização e Personalização Por padrão e de acordo com cada kernel disponibilizado pelas mais diversas distribuições, existem recursos diversos que são disponibilizados para atender a grande maioria dos usuários; porém, por mais exóticos que sejam tais usuários, a grande maioria dos recursos presentes serão desnecessários para seu uso. A compilação do kernel provê um conjunto de recursos mais enxuto ao sistema o qual se encontra instalado. Basta apenas personalizá-lo de acordo com o equipamento utilizado, onde teremos um novo kernel, mais simples, limpo, rápido, enxuto e com melhor eficiência Suporte Específico para cada Arquitetura Em virtude da existência de diversas arquiteturas, a grande maioria das distribuições fornece o kernel pré-compilado para atender as mais variadas existentes. Por exemplo, o kernel do Slackware é compilado para suportar processadores à partir do i386/i486, ao passo que o Mandrake, com seus vastos recursos, somente suporta processadores i585 em diante em virtude da demanda de processamento e de hardware. 6
7 O kernel pode ser otimizado para suportar os recursos específicos de uma única plataforma, habilitando suas extensões e otimizando as instruções do sistema somente para aquela arquitetura, onde o ganho de desempenho são sensíveis graças à este procedimento Compatibilidade A possibilidade de ajustar o kernel para finalidades específicas o torna altamente compatível com praticamente todas as tecnologias e quesitos atuais existentes. Suporte à dispositivos exóticos e periféricos desconhecidos são garantidos com algumas alterações na configuração do kernel e respectiva utilização Experiência e Aprendizado Para os engenheiros, técnicos de manutenção, profissionais de diversos ramos e até mesmos simples usuários do sistema, a compilação do kernel é uma ótima oportunidade de aprendizado para melhor conhecer os fundamentos básicos do funcionamento de um sistema operacional. Um profissional que conhece à fundo este processo, domina quaisquer aspectos referentes às suas características e funcionalidades e que consegue adaptá-lo para as mais variadas situações, com certeza terá um grande ganho de desempenho e qualidade para lidar com os mais variados sistemas operacionais, pois terá bons conceitos técnicos enraizados em sua mente. Conhecer algumas características e particularidades do kernel Linux nos beneficiará muito quando houver necessidade de realizar intervenções, como a instalação e suporte de um periférico, a adaptação de determinados parâmetros, entre outros. BIBLIOGRAFIA MELO, Edinei Pacheco de. O Kernel e a Compilação. 9ª Parte, Treinamento, Site < acesso em 06Nov08 7