O que é o kernel do Linux e o que ele faz?
Com mais de 13 milhões de linhas de código, o kernel do Linux é um dos maiores projetos de código aberto do mundo, mas o que é um kernel e o que é usado para?
Então, o que é o kernel?
Um kernel é o nível mais baixo de software facilmente substituível que faz interface com o hardware em seu computador. Ele é responsável por fazer a interface entre todos os aplicativos que estão sendo executados no “modo de usuário” até o hardware físico e permitir que processos, conhecidos como servidores, obtenham informações uns dos outros usando comunicação entre processos (IPC)..
Tipos Diferentes de Kernels
Existem, é claro, maneiras diferentes de construir um kernel e considerações arquitetônicas ao construir uma do zero. Em geral, a maioria dos kernels se enquadra em um dos três tipos: monolítico, microkernel e híbrido. Linux é um kernel monolítico enquanto o OS X (XNU) e o Windows 7 usam kernels híbridos. Vamos fazer um tour rápido das três categorias para que possamos entrar em mais detalhes mais tarde.
Imagem por pipoca da cidade alta
Microkernel
Um microkernel leva a abordagem de apenas gerenciar o que precisa: CPU, memória e IPC. Quase tudo o mais em um computador pode ser visto como um acessório e pode ser tratado no modo de usuário. Microkernels têm uma vantagem de portabilidade, porque eles não precisam se preocupar se você mudar sua placa de vídeo ou até mesmo o seu sistema operacional, desde que o sistema operacional ainda tente acessar o hardware da mesma maneira. Os microkernels também ocupam uma área muito pequena, tanto para memória quanto para espaço de instalação, e tendem a ser mais seguros, porque apenas processos específicos são executados no modo de usuário, o qual não tem as permissões altas como modo de supervisor..
Prós
- Portabilidade
- Pequena pegada de instalação
- Pegada de memória pequena
- Segurança
Contras
- Hardware é mais abstraído através de drivers
- O hardware pode reagir mais devagar porque os drivers estão no modo de usuário
- Processos tem que esperar em uma fila para obter informações
- Processos não podem ter acesso a outros processos sem esperar
Kernel monolítico
Os kernels monolíticos são o oposto dos microkernels porque englobam não apenas a CPU, a memória e o IPC, mas também incluem recursos como drivers de dispositivos, gerenciamento do sistema de arquivos e chamadas do servidor do sistema. Os kernels monolíticos tendem a ser melhores em acessar hardware e multitarefa, porque se um programa precisa obter informações da memória ou outro processo em execução, ele tem uma linha mais direta para acessá-lo e não precisa esperar em uma fila para fazer as coisas. No entanto, isso pode causar problemas, porque quanto mais coisas forem executadas no modo de supervisor, mais coisas podem derrubar seu sistema se não se comportar adequadamente.
Prós
- Acesso mais direto ao hardware para programas
- Mais fácil para os processos se comunicarem entre si
- Se o seu dispositivo é suportado, ele deve funcionar sem instalações adicionais
- Processos reagem mais rápido porque não há uma fila para o tempo do processador
Contras
- Grande pegada de instalação
- Grande pegada de memória
- Menos seguro porque tudo é executado no modo supervisor
Imagem via schoschie no Flickr
Kernel Híbrido
Os kernels híbridos têm a capacidade de escolher o que desejam executar no modo de usuário e o que desejam executar no modo de supervisor. Muitas vezes, coisas como drivers de dispositivos e E / S do sistema de arquivos serão executados no modo de usuário, enquanto as chamadas de IPC e de servidor serão mantidas no modo de supervisor. Isso dá o melhor dos dois mundos, mas muitas vezes exigirá mais trabalho do fabricante do hardware, porque toda a responsabilidade do motorista depende deles. Também pode ter alguns dos problemas de latência inerentes aos microkernels.
Prós
- O desenvolvedor pode escolher o que é executado no modo de usuário e o que é executado no modo de supervisor
- Tamanho de instalação menor que o kernel monolítico
- Mais flexível que outros modelos
Contras
- Pode sofrer o mesmo atraso do processo que o microkernel
- Drivers de dispositivo precisam ser gerenciados pelo usuário (normalmente)
Onde estão os arquivos do kernel do Linux?
O arquivo do kernel, no Ubuntu, é armazenado em sua pasta / boot e é chamado vmlinuz-versão. O nome vmlinuz vem do mundo unix onde eles costumavam chamar seus kernels simplesmente de “unix” nos anos 60, então o Linux começou a chamar seu kernel “linux” quando foi desenvolvido pela primeira vez na década de 90..
Quando a memória virtual foi desenvolvida para facilitar as habilidades de multitarefa, “vm” foi colocado na frente do arquivo para mostrar que o kernel suporta memória virtual. Por um tempo, o kernel do Linux foi chamado vmlinux, mas o kernel ficou muito grande para caber na memória de inicialização disponível, então a imagem do kernel foi compactada e o x final foi alterado para z para mostrar que foi compactado com compactação zlib. Essa mesma compactação nem sempre é usada, frequentemente substituída por LZMA ou BZIP2, e alguns kernels são chamados simplesmente de zImage..
A numeração da versão estará no formato A.B.C.D onde A.B provavelmente será 2.6, C será sua versão e D indica seus patches ou correções.
Na pasta / boot também haverá outros arquivos muito importantes chamados initrd.img-version, system.map-version e config-version. O arquivo initrd é usado como um pequeno disco RAM que extrai e executa o arquivo real do kernel. O arquivo system.map é usado para gerenciamento de memória antes que o kernel seja totalmente carregado, e o arquivo de configuração informa ao kernel quais opções e módulos carregar na imagem do kernel quando ela estiver sendo compilada..
Arquitetura do Kernel Linux
Como o kernel do Linux é monolítico, tem a maior pegada e a maior complexidade em relação aos outros tipos de kernels. Este foi um recurso de design que estava bastante debatido nos primórdios do Linux e ainda carrega algumas das mesmas falhas de design que os núcleos monolíticos são inerentes a ter..
Uma coisa que os desenvolvedores do kernel do Linux fizeram para contornar essas falhas foi criar módulos do kernel que pudessem ser carregados e descarregados em tempo de execução, o que significa que você pode adicionar ou remover recursos de seu kernel em tempo real. Isso pode ir além da simples adição de funcionalidade de hardware ao kernel, incluindo módulos que executam processos de servidor, como virtualização de baixo nível, mas também permite que o kernel inteiro seja substituído sem a necessidade de reinicializar seu computador em algumas instâncias..
Imagine se você pudesse atualizar para um service pack do Windows sem precisar reinicializar…
Módulos do Kernel
E se o Windows tivesse todos os drivers disponíveis já instalados e você tivesse que ligar os drivers necessários? Isso é essencialmente o que os módulos do kernel fazem para o Linux. Os módulos do kernel, também conhecidos como módulos de kernel carregáveis (LKM), são essenciais para manter o kernel funcionando com todo o seu hardware sem consumir toda a memória disponível..
Um módulo normalmente adiciona funcionalidade ao kernel base para coisas como dispositivos, sistemas de arquivos e chamadas do sistema. Os LKMs possuem a extensão de arquivo .ko e são tipicamente armazenados no diretório / lib / modules. Devido à sua natureza modular, você pode personalizar facilmente seu kernel configurando módulos para carregar ou não, durante a inicialização com o comando menuconfig ou editando seu arquivo / boot / config, ou pode carregar e descarregar módulos rapidamente com o modprobe comando.
Módulos de código fechado e de terceiros estão disponíveis em algumas distribuições, como o Ubuntu, e podem não ser instalados por padrão porque o código-fonte dos módulos não está disponível. O desenvolvedor do software (isto é, nVidia, ATI, entre outros) não fornece o código-fonte, mas constrói seus próprios módulos e compila os arquivos .ko necessários para distribuição. Embora esses módulos sejam gratuitos como na cerveja, eles não são gratuitos como na fala e, portanto, não são incluídos em algumas distribuições, porque os mantenedores sentem que “contamina” o kernel fornecendo software não-livre..
Um kernel não é mágico, mas é completamente essencial para qualquer computador que esteja funcionando corretamente. O kernel do Linux é diferente do OS X e do Windows porque inclui drivers no nível do kernel e faz com que muitas coisas sejam suportadas “fora da caixa”. Espero que você saiba um pouco mais sobre como o seu software e hardware trabalham juntos e quais arquivos você precisa para inicializar o seu computador..
Kernel.org
Imagem por ingridtaylar